[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/kotlin-mode 23a693d264 05/10: Add documentation of indenta
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/kotlin-mode 23a693d264 05/10: Add documentation of indentation logic |
Date: |
Tue, 17 Jan 2023 15:08:09 -0500 (EST) |
branch: elpa/kotlin-mode
commit 23a693d264355f3a05ffc20db908b4d08334bf1c
Author: taku0 <mxxouy6x3m_github@tatapa.org>
Commit: taku0 <mxxouy6x3m_github@tatapa.org>
Add documentation of indentation logic
---
doc/indentation_logic/.gitignore | 1 +
doc/indentation_logic/Makefile | 11 +
doc/indentation_logic/pages.pdf | Bin 0 -> 272143 bytes
doc/indentation_logic/src/pages.svg | 3322 +++++++++++++++++++++++++++++
doc/indentation_logic/src/split_pages.kts | 56 +
5 files changed, 3390 insertions(+)
diff --git a/doc/indentation_logic/.gitignore b/doc/indentation_logic/.gitignore
new file mode 100644
index 0000000000..63fe867247
--- /dev/null
+++ b/doc/indentation_logic/.gitignore
@@ -0,0 +1 @@
+/pages
diff --git a/doc/indentation_logic/Makefile b/doc/indentation_logic/Makefile
new file mode 100644
index 0000000000..5a53c6f142
--- /dev/null
+++ b/doc/indentation_logic/Makefile
@@ -0,0 +1,11 @@
+pages.pdf: pages/page_000.pdf
+ pdfunite pages/page_*.pdf pages.pdf
+
+pages/page_000.pdf: pages/page_000.svg
+ for i in pages/page_*.svg ; do inkscape --export-pdf=pages/"$$(
basename "$${i}" .svg )".pdf "$${i}" ; done
+
+pages/page_000.svg: src/pages.svg src/split_pages.kts
+ kotlinc-jvm -script src/split_pages.kts src/pages.svg
+
+clean:
+ rm -rf pages.pdf pages
diff --git a/doc/indentation_logic/pages.pdf b/doc/indentation_logic/pages.pdf
new file mode 100644
index 0000000000..b0d2fde34a
Binary files /dev/null and b/doc/indentation_logic/pages.pdf differ
diff --git a/doc/indentation_logic/src/pages.svg
b/doc/indentation_logic/src/pages.svg
new file mode 100644
index 0000000000..13b414a76a
--- /dev/null
+++ b/doc/indentation_logic/src/pages.svg
@@ -0,0 +1,3322 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1024"
+ height="768"
+ viewBox="0 0 1024 768.00003"
+ version="1.1"
+ id="svg8"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+ sodipodi:docname="pages.svg">
+ <defs
+ id="defs2">
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="marker6988"
+ style="overflow:visible;"
+ inkscape:isstock="true">
+ <path
+ id="path6986"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#3366cc;fill-opacity:1"
+ transform="scale(0.4) rotate(180) translate(10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible;"
+ id="marker6406"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:collect="always">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#3366cc;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path6404" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible;"
+ id="marker6390"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#3366cc;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path6388" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible;"
+ id="marker6284"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#3366cc;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path6282" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible;"
+ id="marker6252"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#a020f0;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path6250" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="marker6236"
+ style="overflow:visible;"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path6234"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#3366cc;fill-opacity:1"
+ transform="scale(0.4) rotate(180) translate(10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible;"
+ id="marker6200"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend">
+ <path
+ transform="scale(0.8) rotate(180) translate(12.5,0)"
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#a020f0;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path6198" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible;"
+ id="marker6190"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend">
+ <path
+ transform="scale(0.8) rotate(180) translate(12.5,0)"
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#a020f0;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path6188" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible;"
+ id="marker5954"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#a020f0;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path5952" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="marker3044"
+ style="overflow:visible;"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path3042"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#a020f0;fill-opacity:1"
+ transform="scale(0.4) rotate(180) translate(10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="marker2930"
+ style="overflow:visible;"
+ inkscape:isstock="true">
+ <path
+ id="path2928"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#ffffff;fill-opacity:1"
+ transform="scale(0.4) rotate(180) translate(10,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2890"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2888"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Mend"
+ style="overflow:visible;"
+ inkscape:isstock="true">
+ <path
+ id="path1921"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#ffffff;fill-opacity:1"
+ transform="scale(0.4) rotate(180) translate(10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Send"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Send"
+ style="overflow:visible;"
+ inkscape:isstock="true">
+ <path
+ id="path1927"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+
style="fill-rule:evenodd;stroke:#3366cc;stroke-width:1pt;stroke-opacity:1;fill:#3366cc;fill-opacity:1"
+ transform="scale(0.2) rotate(180) translate(6,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Mend-8"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ id="path1921-9"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="403.97716"
+ inkscape:cy="84.798123"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer16"
+ showgrid="true"
+ units="px"
+ inkscape:pagecheckerboard="false"
+ inkscape:showpageshadow="false"
+ inkscape:window-width="2152"
+ inkscape:window-height="1810"
+ inkscape:window-x="0"
+ inkscape:window-y="1960"
+ inkscape:window-maximized="0"
+ showguides="true"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-text-baseline="true"
+ inkscape:lockguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid815"
+ color="#0000ff"
+ opacity="0.0627451"
+ empcolor="#0000ff"
+ empopacity="0.1254902"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;s
[...]
+ x="512.52295"
+ y="398"
+ id="text819"><tspan
+ sodipodi:role="line"
+ id="tspan817"
+ x="512.52295"
+ y="398">Indentation logic of <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono'"
+ id="tspan821">kotlin-mode</tspan></tspan></text>
+ <text
+ id="text846"
+ y="695.46667"
+ x="998.72003"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;line-height:60px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linej
[...]
+ xml:space="preserve"><tspan
+ y="695.46667"
+ x="998.72003"
+ sodipodi:role="line"
+ id="tspan848"
+
style="line-height:37.5%;text-align:end;text-anchor:end">2019-12-01</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56"
+ id="text819-9"><tspan
+ sodipodi:role="line"
+ id="tspan817-1"
+ x="512.52295"
+ y="56">Basic idea (1/2)</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="62.540501"
+ y="120.48"
+ id="text885"><tspan
+ sodipodi:role="line"
+ id="tspan883"
+ x="62.540501"
+ y="120.48">Programs consist of...</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-weight:normal;font-size:10px;font-family:Sans;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="208.35275"
+ y="536"
+ id="text1019"><tspan
+ sodipodi:role="line"
+ id="tspan1017"
+ x="208.35275"
+ y="536"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000">List
of statements/expressions <tspan
+ style="fill:#3366cc;fill-opacity:1"
+ id="tspan5344">①</tspan>,</tspan><tspan
+ sodipodi:role="line"
+ x="208.35275"
+ y="579.04401"
+ id="tspan1021"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000">sorrounded
by (curly/round) brackets <tspan
+ style="fill:#3366cc;fill-opacity:1"
+ id="tspan5346">②</tspan>,</tspan><tspan
+ sodipodi:role="line"
+ x="208.35275"
+ y="622.08801"
+ id="tspan1023"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000">preceded
by some texts <tspan
+ style="fill:#3366cc;fill-opacity:1"
+ id="tspan5348">③</tspan></tspan></text>
+ <g
+ id="g1221"
+ transform="translate(108,-30.896)">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;
[...]
+ x="72"
+ y="299.37601"
+ id="text889"><tspan
+ id="tspan893"
+ sodipodi:role="line"
+ x="72"
+ y="299.37601"><tspan
+ id="tspan1087"
+ style="fill:#a020f0;fill-opacity:1">for</tspan> (x <tspan
+ id="tspan1137"
+ style="fill:#a020f0">in</tspan> xs) {</tspan><tspan
+ id="tspan895"
+ sodipodi:role="line"
+ x="72"
+ y="339.37601"> print(x);</tspan><tspan
+ id="tspan897"
+ sodipodi:role="line"
+ x="72"
+ y="379.37601"> print(x);</tspan><tspan
+ id="tspan899"
+ sodipodi:role="line"
+ x="72"
+ y="419.37601"> print(x);</tspan><tspan
+ id="tspan917"
+ sodipodi:role="line"
+ x="72"
+ y="459.37601">}</tspan></text>
+ <g
+ style="stroke-width:1.33333337"
+ transform="matrix(0.75,0,0,0.75,289.65281,37.896)"
+ id="g1070">
+ <circle
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="path1029"
+ cx="125.79625"
+ cy="444"
+ r="16" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter
[...]
+ x="125.79625"
+ y="456"
+ id="text1027"><tspan
+ sodipodi:role="line"
+ id="tspan1025"
+ x="125.79625"
+ y="456"
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px">1</tspan></text>
+ </g>
+ <g
+ style="stroke-width:1.33333337"
+ transform="matrix(0.75,0,0,0.75,92,-16.000004)"
+ id="g1075">
+ <circle
+ r="16"
+ cy="372.41599"
+ cx="368"
+ id="circle1036"
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <text
+ id="text1040"
+ y="384"
+ x="368"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter
[...]
+ xml:space="preserve"><tspan
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px"
+ y="384"
+ x="368"
+ id="tspan1038"
+ sodipodi:role="line">2</tspan></text>
+ </g>
+ <g
+ style="stroke-width:1.33333337"
+ transform="matrix(0.75,0,0,0.75,99.443745,-42.719995)"
+ id="g1065">
+ <circle
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="circle1042"
+ cx="128.48"
+ cy="344.25598"
+ r="16" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter
[...]
+ x="128.67625"
+ y="355.67999"
+ id="text1046"><tspan
+ sodipodi:role="line"
+ id="tspan1044"
+ x="128.67625"
+ y="355.67999"
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px">3</tspan></text>
+ </g>
+ <path
+ sodipodi:nodetypes="csscccc"
+ inkscape:connector-curvature="0"
+ id="path1056"
+ d="m 69.781542,270.896 c 0,-8.83656 7.16344,-16 16,-16 H 180 c
8.83656,0 16,-7.16344 16,-16 0,8.83656 7.16344,16 16,16 h 96 c 8.83656,0
16,7.16344 16,16"
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <path
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 328,438.00523 c 8.83656,0 16,-7.16344 16,-16 v -33.57388 c
0,-8.83656 7.16344,-16 16,-16 -8.83656,0 -16,-7.16344 -16,-16 V 326.896 c
0,-8.83656 -7.16344,-16 -16,-16"
+ id="path1077"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csscscc" />
+ <g
+ style="stroke-width:1.33333337"
+ transform="matrix(0.75,0,0,0.75,-172,192)"
+ id="g1085">
+ <circle
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="circle1079"
+ cx="368"
+ cy="372.41599"
+ r="16" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter
[...]
+ x="368"
+ y="384"
+ id="text1083"><tspan
+ sodipodi:role="line"
+ id="tspan1081"
+ x="368"
+ y="384"
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px">2</tspan></text>
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="-160"
+ y="432"
+ id="text1135"><tspan
+ sodipodi:role="line"
+ id="tspan1133"
+ x="-160"
+ y="461.116" /></text>
+ <g
+ id="g1248"
+ transform="translate(-64,-20.736)">
+ <text
+ id="text949"
+ y="287.31198"
+ x="672"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;
[...]
+ xml:space="preserve"><tspan
+ y="287.31198"
+ x="672"
+ sodipodi:role="line"
+ id="tspan939"><tspan
+ id="tspan1139"
+ style="fill:#a020f0">return</tspan> foo(</tspan><tspan
+ y="327.31198"
+ x="672"
+ sodipodi:role="line"
+ id="tspan941"> a + b,</tspan><tspan
+ y="367.31198"
+ x="672"
+ sodipodi:role="line"
+ id="tspan943"> b + c,</tspan><tspan
+ y="407.31198"
+ x="672"
+ sodipodi:role="line"
+ id="tspan945"> c + d</tspan><tspan
+ y="447.31198"
+ x="672"
+ sodipodi:role="line"
+ id="tspan947">)</tspan></text>
+ <g
+ style="stroke-width:1.33333337"
+ id="g1147"
+ transform="matrix(0.75,0,0,0.75,833.65281,31.896)">
+ <circle
+ r="16"
+ cy="444"
+ cx="125.79625"
+ id="circle1141"
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <text
+ id="text1145"
+ y="456"
+ x="125.79625"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter
[...]
+ xml:space="preserve"><tspan
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px"
+ y="456"
+ x="125.79625"
+ id="tspan1143"
+ sodipodi:role="line">1</tspan></text>
+ </g>
+ <path
+ sodipodi:nodetypes="csscscc"
+ inkscape:connector-curvature="0"
+ id="path1149"
+ d="m 872,432.00523 c 8.83656,0 16,-7.16344 16,-16 v -33.57388 c
0,-8.83656 7.16344,-16 16,-16 -8.83656,0 -16,-7.16344 -16,-16 V 320.896 c
0,-8.83656 -7.16344,-16 -16,-16"
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <g
+ style="stroke-width:1.33333337"
+ id="g1157"
+ transform="matrix(0.75,0,0,0.75,620,-20.000004)">
+ <circle
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="circle1151"
+ cx="368"
+ cy="372.41599"
+ r="16" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter
[...]
+ x="368"
+ y="384"
+ id="text1155"><tspan
+ sodipodi:role="line"
+ id="tspan1153"
+ x="368"
+ y="384"
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px">2</tspan></text>
+ </g>
+ <g
+ style="stroke-width:1.33333337"
+ id="g1165"
+ transform="matrix(0.75,0,0,0.75,428,176)">
+ <circle
+ r="16"
+ cy="372.41599"
+ cx="368"
+ id="circle1159"
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <text
+ id="text1163"
+ y="384"
+ x="368"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter
[...]
+ xml:space="preserve"><tspan
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px"
+ y="384"
+ x="368"
+ id="tspan1161"
+ sodipodi:role="line">2</tspan></text>
+ </g>
+ <g
+ style="stroke-width:1.33333337"
+ id="g1173"
+ transform="matrix(0.75,0,0,0.75,671.64,-52.879995)">
+ <circle
+ r="16"
+ cy="344.25598"
+ cx="128.48"
+ id="circle1167"
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <text
+ id="text1171"
+ y="355.67999"
+ x="128.67625"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter
[...]
+ xml:space="preserve"><tspan
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px"
+ y="355.67999"
+ x="128.67625"
+ id="tspan1169"
+ sodipodi:role="line">3</tspan></text>
+ </g>
+ <path
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 669.78154,260.736 c 0,-8.83656 7.16344,-16 16,-16 H 752 c
8.83656,0 16,-7.16344 16,-16 0,8.83656 7.16344,16 16,16 h 64.19625 c 8.83656,0
16,7.16344 16,16"
+ id="path1175"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csscccc" />
+ </g>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="832"
+ y="472"
+ id="text1187"><tspan
+ sodipodi:role="line"
+ id="tspan1185"
+ x="832"
+ y="501.116" /></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Layer 3"
+ style="display:inline">
+ <text
+ id="text949-1"
+ y="266.944"
+ x="352"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ xml:space="preserve"><tspan
+ y="266.944"
+ x="352"
+ sodipodi:role="line"
+ id="tspan939-2"><tspan
+ id="tspan1139-2"
+ style="fill:#a020f0">return</tspan> foo(</tspan><tspan
+ y="306.944"
+ x="352"
+ sodipodi:role="line"
+ id="tspan941-1"> a + b,</tspan><tspan
+ y="346.944"
+ x="352"
+ sodipodi:role="line"
+ id="tspan943-6"> b + c,</tspan><tspan
+ y="386.944"
+ x="352"
+ sodipodi:role="line"
+ id="tspan945-2"> ccc +</tspan><tspan
+ y="426.944"
+ x="352"
+ sodipodi:role="line"
+ id="tspan1505"> ddd</tspan><tspan
+ y="466.944"
+ x="352"
+ sodipodi:role="line"
+ id="tspan947-0">)</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56.000004"
+ id="text819-9-5"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6"
+ x="512.52295"
+ y="56.000004">Basic idea (2/2)</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="62.652"
+ y="127.68"
+ id="text885-5"><tspan
+ sodipodi:role="line"
+ id="tspan883-6"
+ x="62.652"
+ y="127.68">We have four cases to indent</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="112"
+ y="240"
+ id="text1289"><tspan
+ sodipodi:role="line"
+ id="tspan1287"
+ x="112"
+ y="269.116" /></text>
+ <text
+ id="text1301"
+ y="584.47998"
+ x="30.048"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ y="584.47998"
+ x="30.048"
+ id="tspan1299"
+ sodipodi:role="line">Case 1. after an element delimiter, such as
semicolon or comma</tspan><tspan
+ y="624.47998"
+ x="30.048"
+ sodipodi:role="line"
+ id="tspan1303">Case 2. after an open bracket</tspan><tspan
+ y="664.47998"
+ x="30.048"
+ sodipodi:role="line"
+ id="tspan1305">Case 3. before close bracket</tspan><tspan
+ y="704.47998"
+ x="30.048"
+ sodipodi:role="line"
+ id="tspan1307">Case 4. other case, that is to say, inside a list
element</tspan><tspan
+ y="744.47998"
+ x="30.048"
+ sodipodi:role="line"
+ id="tspan1309" /></text>
+ <g
+ id="g1070-4"
+ transform="matrix(0.75,0,0,0.75,309.65281,48)"
+ style="stroke-width:1.33333337">
+ <circle
+ r="16"
+ cy="444"
+ cx="125.79625"
+ id="path1029-5"
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <text
+ id="text1027-0"
+ y="456"
+ x="125.79625"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter;s
[...]
+ xml:space="preserve"><tspan
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px"
+ y="456"
+ x="125.79625"
+ id="tspan1025-5"
+ sodipodi:role="line">1</tspan></text>
+ </g>
+ <g
+ id="g1075-7"
+ transform="matrix(0.75,0,0,0.75,128,20.688011)"
+ style="stroke-width:1.33333337">
+ <circle
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="circle1036-3"
+ cx="368"
+ cy="372.41599"
+ r="16" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter;s
[...]
+ x="368"
+ y="384"
+ id="text1040-2"><tspan
+ sodipodi:role="line"
+ id="tspan1038-7"
+ x="368"
+ y="384"
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px">2</tspan></text>
+ </g>
+ <g
+ id="g1065-2"
+ transform="matrix(0.75,0,0,0.75,247.49281,201.24001)"
+ style="stroke-width:1.33333337">
+ <circle
+ r="16"
+ cy="344.25598"
+ cx="128.48"
+ id="circle1042-1"
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <text
+ id="text1046-3"
+ y="355.67999"
+ x="128.67625"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter;s
[...]
+ xml:space="preserve"><tspan
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px"
+ y="355.67999"
+ x="128.67625"
+ id="tspan1044-4"
+ sodipodi:role="line">3</tspan></text>
+ </g>
+ <g
+ style="stroke-width:1.33333337"
+ transform="matrix(0.75,0,0,0.75,395.49281,161.24001)"
+ id="g1436">
+ <circle
+
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.33333337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="circle1430"
+ cx="128.48"
+ cy="344.25598"
+ r="16" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.33333337px;stroke-linecap:butt;stroke-linejoin:miter;s
[...]
+ x="128.67625"
+ y="355.67999"
+ id="text1434"><tspan
+ sodipodi:role="line"
+ id="tspan1432"
+ x="128.67625"
+ y="355.67999"
+
style="text-align:center;text-anchor:middle;stroke-width:1.33333337px">4</tspan></text>
+ </g>
+ <circle
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="path1511"
+ cx="534"
+ cy="348"
+ r="8" />
+ <path
+ sodipodi:nodetypes="cssc"
+ inkscape:connector-curvature="0"
+ id="path1056-2"
+ d="m 404,369 c 0,-3.31371 2.68629,-6 6,-6 h 116 c 3.3137,0 6,-2.68629
6,-6"
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 404,288 c 0,-3.31371 2.68629,-6 6,-6 h 140 c 3.3137,0 6,-2.68629
6,-6"
+ id="path1530"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssc" />
+ <circle
+ r="17"
+ cy="259"
+ cx="556"
+ id="circle1532"
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="Layer 4"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56.000004"
+ id="text819-9-5-2"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9"
+ x="512.52295"
+ y="56.000004">Case 1: after an element delimiter</tspan></text>
+ <g
+ id="g2440"
+ transform="translate(0,-82.464005)">
+ <rect
+ y="314"
+ x="495.36499"
+ height="32"
+ width="19"
+ id="rect1685"
+
style="opacity:1;vector-effect:none;fill:#747474;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-
[...]
+ x="418.36499"
+ y="218.944"
+ id="text949-1-7"><tspan
+ id="tspan939-2-4"
+ sodipodi:role="line"
+ x="418.36499"
+ y="218.944"><tspan
+ style="fill:#a020f0"
+ id="tspan1139-2-3">return</tspan> foo(</tspan><tspan
+ id="tspan941-1-5"
+ sodipodi:role="line"
+ x="418.36499"
+ y="258.944"> a, b,</tspan><tspan
+ id="tspan943-6-6"
+ sodipodi:role="line"
+ x="418.36499"
+ y="298.944"> c, d,</tspan><tspan
+ id="tspan1505-4"
+ sodipodi:role="line"
+ x="418.36499"
+ y="338.944"> <tspan
+ id="tspan1659"
+ style="fill:#ffffff;fill-opacity:1">e</tspan>, f</tspan><tspan
+ id="tspan947-0-0"
+ sodipodi:role="line"
+ x="418.36499"
+ y="378.944">)</tspan></text>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1649"
+ d="m 495.365,274 v 72"
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ </g>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="64.32"
+ y="384.32001"
+ id="text885-5-3"><tspan
+ sodipodi:role="line"
+ x="64.32"
+ y="384.32001"
+ id="tspan1709">Align with the preceding element at the start of a
line.</tspan><tspan
+ sodipodi:role="line"
+ x="64.32"
+ y="424.32001"
+ id="tspan2650" /><tspan
+ sodipodi:role="line"
+ x="64.32"
+ y="464.32001"
+ id="tspan2652">To seek the preceding element at the start of a
line,</tspan><tspan
+ sodipodi:role="line"
+ x="64.32"
+ y="504.32001"
+ id="tspan2654">we seek an element delimiter (comma or semicolon)
</tspan><tspan
+ sodipodi:role="line"
+ x="64.32"
+ y="544.32001"
+ id="tspan2656">at the end of a line or open bracket before the
element.</tspan><tspan
+ sodipodi:role="line"
+ x="64.32"
+ y="584.32001"
+ id="tspan2658"></tspan><tspan
+ sodipodi:role="line"
+ x="64.32"
+ y="624.32001"
+ id="tspan5354">Then the next token is the token we align
to.</tspan><tspan
+ sodipodi:role="line"
+ x="64.32"
+ y="664.32001"
+ id="tspan2660"></tspan><tspan
+ sodipodi:role="line"
+ x="64.32"
+ y="704.32001"
+ id="tspan5356">Elements may start with tokens of various
types,</tspan><tspan
+ sodipodi:role="line"
+ x="64.32"
+ y="744.32001"
+ id="tspan2664">but it ends with tokens of handful types, so seeking
it is easier.</tspan></text>
+ <circle
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="path1511-5"
+ cx="581"
+ cy="176.536"
+ r="8" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="595.15997"
+ y="185.29601"
+ id="text1851"><tspan
+ sodipodi:role="line"
+ x="595.15997"
+ y="185.29601"
+ id="tspan1880">←Seek this</tspan></text>
+ <text
+ id="text1886"
+ y="215.77599"
+ x="464.84"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan1884"
+ y="215.77599"
+ x="464.84"
+ sodipodi:role="line"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end">then
align with the next token→</tspan></text>
+ <text
+ id="text1908"
+ y="269.53601"
+ x="606"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan1906"
+ y="269.53601"
+ x="606"
+ sodipodi:role="line">We call this token “parent”.</tspan></text>
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend-8);paint-order:normal"
+ d="m 608,249.53601 -20,-60"
+ id="path1910"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ id="text1715"
+ y="424"
+ x="64"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ y="453.116"
+ x="64"
+ sodipodi:role="line"
+ id="tspan1727" /></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="Layer 5"
+ style="display:inline">
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#747474;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="rect1685-2"
+ width="19"
+ height="32"
+ x="495"
+ y="287" />
+ <text
+ id="text949-1-7-0"
+ y="192"
+ x="418.36499"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ xml:space="preserve"><tspan
+ y="192"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan939-2-4-6"
+ style="fill:#000000">bar();</tspan><tspan
+ y="232"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan2546"><tspan
+ style="fill:#a020f0"
+ id="tspan2548" /></tspan><tspan
+ y="272"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan2699"><tspan
+ style="fill:#a020f0"
+ id="tspan2701">return</tspan> foo(</tspan><tspan
+ y="312"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan941-1-5-7"> <tspan
+ style="fill:#ffffff;fill-opacity:1"
+ id="tspan2801">a</tspan>, b,</tspan><tspan
+ y="352"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan943-6-6-4"> c, d,</tspan><tspan
+ y="392"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan1505-4-9"> e, f</tspan><tspan
+ y="432"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan947-0-0-4">)</tspan></text>
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 495,287 v 32"
+ id="path1649-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56"
+ id="text819-9-5-2-1"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2"
+ x="512.52295"
+ y="56">Case 2. after an open bracket</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="352"
+ y="720"
+ id="text2552"><tspan
+ sodipodi:role="line"
+ id="tspan2550"
+ x="352"
+ y="749.11603" /></text>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path2558"
+ d="m 419,247 v 72"
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <path
+
style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 419,303 h 76"
+ id="path2560"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 483,294 12,9 -12,9"
+ id="path2562"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="48"
+ y="504.48001"
+ id="text885-5-3-6"><tspan
+ sodipodi:role="line"
+ x="48"
+ y="504.48001"
+ id="tspan1709-0">Align with the start of the “preceding text” with
offset.</tspan><tspan
+ sodipodi:role="line"
+ x="48"
+ y="544.47998"
+ id="tspan2582" /><tspan
+ sodipodi:role="line"
+ x="48"
+ y="584.47998"
+ id="tspan2584">The procedure of seeking the start of the preceding
text is </tspan><tspan
+ sodipodi:role="line"
+ x="48"
+ y="624.47998"
+ id="tspan2586">same as the case 1. Seek a parent token, then the
next token </tspan><tspan
+ sodipodi:role="line"
+ x="48"
+ y="664.47998"
+ id="tspan5358">is the token align to.</tspan></text>
+ <ellipse
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="path1511-5-6"
+ cx="524"
+ cy="182.48001"
+ rx="8"
+ ry="16" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="535.15997"
+ y="190.24001"
+ id="text1851-4"><tspan
+ sodipodi:role="line"
+ x="535.15997"
+ y="190.24001"
+ id="tspan1880-0">←Seek this</tspan></text>
+ <text
+ id="text1886-9"
+ y="266.23999"
+ x="400.84"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;s
[...]
+ xml:space="preserve"><tspan
+ id="tspan1884-4"
+ y="266.23999"
+ x="400.84"
+ sodipodi:role="line">then align with the next token→</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;s
[...]
+ x="376.53589"
+ y="306.23999"
+ id="text2697"><tspan
+ sodipodi:role="line"
+ x="376.53589"
+ y="306.23999"
+ id="tspan2695">with offset</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer6"
+ inkscape:label="Layer 6"
+ style="display:inline">
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#747474;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="rect1685-2-8"
+ width="20"
+ height="32"
+ x="418"
+ y="407" />
+ <text
+ id="text949-1-7-0-0"
+ y="192"
+ x="418.36499"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ xml:space="preserve"><tspan
+ y="192"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan939-2-4-6-1"
+ style="fill:#000000">bar();</tspan><tspan
+ y="232"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan2546-7" /><tspan
+ y="272"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan2699-8"><tspan
+ style="fill:#a020f0"
+ id="tspan2701-0">return</tspan> foo(</tspan><tspan
+ y="312"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan941-1-5-7-8"> a, b,</tspan><tspan
+ y="352"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan943-6-6-4-9"> c, d,</tspan><tspan
+ y="392"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan1505-4-9-7"> e, f</tspan><tspan
+ y="432"
+ x="418.36499"
+ sodipodi:role="line"
+ id="tspan947-0-0-4-8"
+ style="fill:#ffffff;fill-opacity:1">)</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56"
+ id="text819-9-5-2-1-3"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2-9"
+ x="512.52295"
+ y="56">Case 3. before close bracket</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="48"
+ y="504.48001"
+ id="text885-5-3-6-7"><tspan
+ sodipodi:role="line"
+ x="48"
+ y="504.48001"
+ id="tspan2586-2">Align with the start of the preceding text of the
open bracket</tspan><tspan
+ sodipodi:role="line"
+ x="48"
+ y="544.47998"
+ id="tspan2780">without offset.</tspan><tspan
+ sodipodi:role="line"
+ x="48"
+ y="584.47998"
+ id="tspan2776" /><tspan
+ sodipodi:role="line"
+ x="48"
+ y="624.47998"
+ id="tspan2778">To find the open bracket, we can use the <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono'"
+ id="tspan2784">‘backward-list’</tspan>.</tspan></text>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path2558-4"
+ d="M 418,247 V 439"
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <ellipse
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="path1511-5-6-0"
+ cx="524"
+ cy="182.48001"
+ rx="8"
+ ry="16" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="535.15997"
+ y="190.24001"
+ id="text1851-4-6"><tspan
+ sodipodi:role="line"
+ x="535.15997"
+ y="190.24001"
+ id="tspan1880-0-2">←then seek this</tspan></text>
+ <text
+ id="text1886-9-6"
+ y="266.23999"
+ x="400.84"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;s
[...]
+ xml:space="preserve"><tspan
+ id="tspan1884-4-5"
+ y="266.23999"
+ x="400.84"
+ sodipodi:role="line">then align with the next token→</tspan></text>
+ <text
+ id="text2864"
+ y="151.75999"
+ x="670.776"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan2862"
+ y="151.75999"
+ x="670.776"
+ sodipodi:role="line">Seek this</tspan></text>
+ <ellipse
+ ry="16"
+ rx="8"
+ cy="263"
+ cx="622"
+ id="ellipse2866"
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <path
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker3044);paint-order:normal"
+ d="m 736,156 c -2.53312,41.63464 -20.88173,86.15342 -96,104"
+ id="path2868"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer7"
+ inkscape:label="Layer 7"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56"
+ id="text819-9-5-2-1-3-7"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2-9-3"
+ x="512.52295"
+ y="56">Case 4. other case, inside a list element</tspan></text>
+ <g
+ id="g3372"
+ transform="translate(-42.113999)">
+ <rect
+ y="328"
+ x="280"
+ height="32"
+ width="19"
+ id="rect1685-2-8-2"
+
style="display:inline;opacity:1;vector-effect:none;fill:#747474;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-
[...]
+ x="203.36499"
+ y="233"
+ id="text949-1-7-0-0-5"><tspan
+ style="fill:#000000;fill-opacity:1"
+ id="tspan947-0-0-4-8-9"
+ sodipodi:role="line"
+ x="203.36499"
+ y="233">foo();</tspan><tspan
+ id="tspan3244"
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="203.36499"
+ y="273" /><tspan
+ id="tspan3240"
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="203.36499"
+ y="313"><tspan
+ id="tspan3242"
+ style="fill:#a020f0;fill-opacity:1">val</tspan> x =</tspan><tspan
+ id="tspan3176"
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="203.36499"
+ y="353"> <tspan
+ id="tspan3246"
+ style="fill:#ffffff;fill-opacity:1">1</tspan> +</tspan><tspan
+ id="tspan3172"
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="203.36499"
+ y="393"> 2 +</tspan><tspan
+ id="tspan3174"
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="203.36499"
+ y="433"> 3</tspan></text>
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 280,328 v 32"
+ id="path2558-4-1"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path3220"
+ d="m 203,289 v 71"
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path2560-0"
+ d="m 203,344 h 74"
+
style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path2562-2"
+ d="M 267,335.00001 279,344 l -12,9"
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ </g>
+ <g
+ id="g3385"
+ transform="translate(65)">
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#747474;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="rect3252"
+ width="19"
+ height="32"
+ x="672"
+ y="367.51999" />
+ <text
+ id="text3270"
+ y="233"
+ x="595.36499"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-
[...]
+ xml:space="preserve"><tspan
+ y="233"
+ x="595.36499"
+ sodipodi:role="line"
+ id="tspan3254"
+ style="fill:#000000;fill-opacity:1">foo();</tspan><tspan
+ y="273"
+ x="595.36499"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan3256" /><tspan
+ y="313"
+ x="595.36499"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan3260"><tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan3258">val</tspan> x =</tspan><tspan
+ y="353"
+ x="595.36499"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan3264"> 1 +</tspan><tspan
+ y="393"
+ x="595.36499"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan3266"> <tspan
+ id="tspan3282"
+ style="fill:#ffffff">2</tspan> +</tspan><tspan
+ y="433"
+ x="595.36499"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan3268"> 3</tspan></text>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path3272"
+ d="m 672,328 v 71.51999"
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ </g>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="31.606001"
+ y="504.48001"
+ id="text885-5-3-6-7-0"><tspan
+ sodipodi:role="line"
+ x="31.606001"
+ y="504.48001"
+ id="tspan3329">If the line is the second line,</tspan><tspan
+ sodipodi:role="line"
+ x="31.606001"
+ y="544.47998"
+ id="tspan3333">align with the start of</tspan><tspan
+ sodipodi:role="line"
+ x="31.606001"
+ y="584.47998"
+ id="tspan3335">the element with offset.</tspan></text>
+ <text
+ id="text3343"
+ y="504.48001"
+ x="527.91553"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan3341"
+ y="504.48001"
+ x="527.91553"
+ sodipodi:role="line">If the line is the third or</tspan><tspan
+ y="544.47998"
+ x="527.91553"
+ sodipodi:role="line"
+ id="tspan3352">following lines,</tspan><tspan
+ y="584.47998"
+ x="527.91553"
+ sodipodi:role="line"
+ id="tspan3350">align with the the previous line.</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer8"
+ inkscape:label="Layer 8"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56.000004"
+ id="text819-9-5-2-1-3-7-8"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2-9-3-4"
+ x="512.52295"
+ y="56.000004"><tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono'"
+ id="tspan3406"><tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan3944">if<tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans';fill:#000000;fill-opacity:1"
+ id="tspan3950">-</tspan>else</tspan></tspan> statement</tspan></text>
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#747474;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="rect1685-2-8-2-6"
+ width="19"
+ height="32"
+ x="709"
+ y="270" />
+ <text
+ id="text949-1-7-0-0-5-6"
+ y="95"
+ x="632.25098"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ xml:space="preserve"><tspan
+ id="tspan3490"
+ y="95"
+ x="632.25098"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1">aaa();</tspan><tspan
+ id="tspan3506"
+ y="135"
+ x="632.25098"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1" /><tspan
+ id="tspan3502"
+ y="175"
+ x="632.25098"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"><tspan
+ id="tspan3504"
+ style="fill:#a020f0;fill-opacity:1">if</tspan> (foo)</tspan><tspan
+ id="tspan3498"
+ y="215"
+ x="632.25098"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"> bar()</tspan><tspan
+ id="tspan3494"
+ y="255"
+ x="632.25098"
+ sodipodi:role="line"
+ style="fill:#a020f0;fill-opacity:1">else</tspan><tspan
+ id="tspan3496"
+ y="295"
+ x="632.25098"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"> <tspan
+ style="fill:#ffffff;fill-opacity:1"
+ id="tspan3547">b</tspan>az();</tspan></text>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path2558-4-1-5"
+ d="m 709,270 v 32"
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 632,230 v 71"
+ id="path3220-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 632,285 h 74"
+ id="path2560-0-4"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="M 696,276.00001 708,285 l -12,9"
+ id="path2562-2-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <rect
+ y="230"
+ x="399"
+ height="32"
+ width="19"
+ id="rect3521"
+
style="display:inline;opacity:1;vector-effect:none;fill:#747474;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ x="399.25098"
+ y="95"
+ id="text3537"><tspan
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="399.25098"
+ y="95"
+ id="tspan3523">aaa();</tspan><tspan
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="399.25098"
+ y="135"
+ id="tspan3525" /><tspan
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="399.25098"
+ y="175"
+ id="tspan3529"><tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan3527">if</tspan> (foo)</tspan><tspan
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="399.25098"
+ y="215"
+ id="tspan3531"> bar()</tspan><tspan
+ style="fill:#a020f0;fill-opacity:1"
+ sodipodi:role="line"
+ x="399.25098"
+ y="255"
+ id="tspan3533"><tspan
+ style="fill:#ffffff;fill-opacity:1"
+ id="tspan3553">e</tspan>lse</tspan><tspan
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="399.25098"
+ y="295"
+ id="tspan3535"> baz();</tspan></text>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path3541"
+ d="M 400,150 V 262"
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#747474;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ id="rect3559"
+ width="19"
+ height="32"
+ x="228"
+ y="190" />
+ <text
+ id="text3577"
+ y="95"
+ x="150.99249"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ xml:space="preserve"><tspan
+ id="tspan3561"
+ y="95"
+ x="150.99249"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1">aaa();</tspan><tspan
+ id="tspan3563"
+ y="135"
+ x="150.99249"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1" /><tspan
+ id="tspan3567"
+ y="175"
+ x="150.99249"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"><tspan
+ id="tspan3565"
+ style="fill:#a020f0;fill-opacity:1">if</tspan> (foo)</tspan><tspan
+ id="tspan3569"
+ y="215"
+ x="150.99249"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"> <tspan
+ style="fill:#ffffff;fill-opacity:1"
+ id="tspan3583">b</tspan>ar()</tspan><tspan
+ id="tspan3573"
+ y="255"
+ x="150.99249"
+ sodipodi:role="line"
+ style="fill:#a020f0;fill-opacity:1">else</tspan><tspan
+ id="tspan3575"
+ y="295"
+ x="150.99249"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"> baz();</tspan></text>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path2558-4-1-5-7"
+ d="m 228,190 v 32"
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
/>
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 151,150 v 71"
+ id="path3220-9-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 151,205 h 74"
+ id="path2560-0-4-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="M 215,196.00001 227,205 l -12,9"
+ id="path2562-2-3-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="47.706665"
+ y="340.39999"
+ id="text885-5-3-6-7-0-8"><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="340.39999"
+ id="tspan3335-0">If the point is after <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono'"
+ id="tspan3656"><tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan3676">if</tspan> (...)</tspan>, </tspan><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="373.73334"
+ id="tspan3692">then align with the <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3658">if</tspan> token with offset.</tspan><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="407.06665"
+ id="tspan3648" /><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="440.39999"
+ id="tspan3704">If the point is before <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3660">else</tspan> token, </tspan><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="473.73334"
+ id="tspan3695">then align with the matching <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3664">if</tspan> token without offset.</tspan><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="507.06665"
+ id="tspan3650" /><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="540.39996"
+ id="tspan3701">If the point is after <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3662">else</tspan> token, </tspan><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="573.73334"
+ id="tspan3698">then align with the <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3666">else</tspan> token with offset.</tspan><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="607.06665"
+ id="tspan3652" /><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="640.39996"
+ id="tspan3654">Note that <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3668">if<tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans';-inkscape-font-specification:'Noto sans';fill:#000000;fill-opacity:1"
+ id="tspan3716">-</tspan>else</tspan> can be nested, </tspan><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="673.73334"
+ id="tspan3707">so when seeking the matching <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3670">if</tspan> token, </tspan><tspan
+ sodipodi:role="line"
+ x="47.706665"
+ y="707.06665"
+ id="tspan3712">we have to count number of <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3672">else</tspan> and <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3674">if</tspan> tokens.</tspan></text>
+ <text
+ id="text3782"
+ y="756.40002"
+ x="47.679996"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan3780"
+ y="756.40002"
+ x="47.679996"
+ sodipodi:role="line">We have similar rules for <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3922">for</tspan>, <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3924">while</tspan>, and <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3926">do</tspan>-<tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans
Mono';fill:#a020f0;fill-opacity:1"
+ id="tspan3928">while</tspan>.</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer9"
+ inkscape:label="Layer 9"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="397.86667"
+ id="text819-9-5-2-1-3-7-8-5"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2-9-3-4-5"
+ x="512.52295"
+ y="397.86667">Advanced topics</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer10"
+ inkscape:label="Layer 10"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56.000004"
+ id="text819-9-5-2-1-3-7-8-5-5"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2-9-3-4-5-7"
+ x="512.52295"
+ y="56.000004">Implicit semicolons</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:29.33333397px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="24"
+ y="128"
+ id="text885-5-3-6-7-0-6"><tspan
+ sodipodi:role="line"
+ x="24"
+ y="128"
+ id="tspan3335-5">In Kotlin and other languages, a statement may end
with a newline.</tspan><tspan
+ sodipodi:role="line"
+ x="24"
+ y="164.66667"
+ id="tspan4079">We use a heuristic function ‘<tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans
Mono';fill:#008b8b;fill-opacity:1"
+ id="tspan4085">kotlin-mode--implicit-semi-p</tspan>’ </tspan><tspan
+ sodipodi:role="line"
+ x="24"
+ y="201.33333"
+ id="tspan4093">to detect it.</tspan><tspan
+ sodipodi:role="line"
+ x="24"
+ y="238"
+ id="tspan4081">It examines tokens before and after the
newline.</tspan><tspan
+ sodipodi:role="line"
+ x="24"
+ y="274.66666"
+ id="tspan4237" /><tspan
+ sodipodi:role="line"
+ x="24"
+ y="311.33334"
+ id="tspan4239">Example:</tspan><tspan
+ sodipodi:role="line"
+ x="24"
+ y="348"
+ id="tspan4083" /></text>
+ <text
+ id="text3577-3"
+ y="368"
+ x="112"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ xml:space="preserve"><tspan
+ id="tspan3575-6"
+ y="368"
+ x="112"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"><tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan4195">for</tspan> (x <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan4197">in</tspan> xs) {</tspan><tspan
+ y="408"
+ x="112"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4179"> aaa()</tspan><tspan
+ y="448"
+ x="112"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4181"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan4199">if</tspan> (bbb)</tspan><tspan
+ y="488"
+ x="112"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4187"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan4276">if</tspan> (ccc)</tspan><tspan
+ y="528"
+ x="112"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4270"> ddd()</tspan><tspan
+ y="568"
+ x="112"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4272"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan4278">else</tspan></tspan><tspan
+ y="608"
+ x="112"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4274"> eee()</tspan><tspan
+ y="648"
+ x="112"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4189"> fff()</tspan><tspan
+ y="688"
+ x="112"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4191">}</tspan><tspan
+ y="728"
+ x="112"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4193">ccc()</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="456"
+ y="530.23999"
+ id="text1851-6"><tspan
+ sodipodi:role="line"
+ x="456"
+ y="530.23999"
+ id="tspan1880-9">← No implicit semicolon here...</tspan></text>
+ <text
+ id="text4235"
+ y="690.23999"
+ x="159.16"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan4233"
+ y="690.23999"
+ x="159.16"
+ sodipodi:role="line">← Implicit semicolon here</tspan></text>
+ <text
+ id="text4243"
+ y="650.23999"
+ x="456"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan4241"
+ y="650.23999"
+ x="456"
+ sodipodi:role="line">← ... to aligh this line to the first if
token</tspan><tspan
+ y="680.23999"
+ x="456"
+ sodipodi:role="line"
+ id="tspan4280"> rather than the else token.</tspan></text>
+ <text
+ id="text5389"
+ y="608"
+ x="456"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan5387"
+ y="608"
+ x="456"
+ sodipodi:role="line">← ... only here ...</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="231.16"
+ y="730.23999"
+ id="text5393"><tspan
+ sodipodi:role="line"
+ x="231.16"
+ y="730.23999"
+ id="tspan5391">← Implicit semicolon here</tspan></text>
+ <text
+ id="text5397"
+ y="410.23999"
+ x="311.16"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan5395"
+ y="410.23999"
+ x="311.16"
+ sodipodi:role="line">← Implicit semicolon here</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer11"
+ inkscape:label="Layer 11"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:37.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56.000004"
+ id="text819-9-5-2-1-3-7-8-5-5-7"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2-9-3-4-5-7-1"
+ x="512.52295"
+ y="56.000004">Ambiguous commas, colons, curly brackets, and
objects</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="56"
+ y="112"
+ id="text885-5-3-6-7-0-4"><tspan
+ sodipodi:role="line"
+ x="56"
+ y="112"
+ id="tspan3335-2">Commas are not always contained by
brackets.</tspan><tspan
+ sodipodi:role="line"
+ x="56"
+ y="145.33333"
+ id="tspan4330">Texts before brackets may contain another
brackets.</tspan><tspan
+ sodipodi:role="line"
+ x="56"
+ y="178.66667"
+ id="tspan7200">We handle them carefully.</tspan><tspan
+ sodipodi:role="line"
+ x="56"
+ y="212"
+ id="tspan4332" /></text>
+ <text
+ id="text3577-3-4"
+ y="210"
+ x="352"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ xml:space="preserve"><tspan
+ y="210"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4193-1"><tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5442">class</tspan> <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5444">C</tspan>: <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5446">A</tspan> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5448">by</tspan> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5450">object</tspan>: <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5452">A1</tspan>,</tspan><tspan
+ y="230"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4541"> <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5455">A2</tspan> {</tspan><tspan
+ y="250"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4543"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5458">fun</tspan> <tspan
+ style="fill:#0000ff;fill-opacity:1"
+ id="tspan5460">aaa</tspan>() {}</tspan><tspan
+ y="270"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4545"> },</tspan><tspan
+ y="290"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4547"> <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5464">B</tspan> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5466">by</tspan> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5468">object</tspan>: <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5470">B1</tspan>,</tspan><tspan
+ y="310"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4549"> <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5473">B2</tspan> {</tspan><tspan
+ y="330"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4551"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5476">fun</tspan> <tspan
+ style="fill:#0000ff;fill-opacity:1"
+ id="tspan5478">bbb</tspan>() {}</tspan><tspan
+ y="350"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4553"> } {</tspan><tspan
+ y="370"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4555"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5482">fun</tspan> <tspan
+ style="fill:#0000ff;fill-opacity:1"
+ id="tspan5484">ccc</tspan>(x: <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5486">X</tspan>): <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5488">Int</tspan> {</tspan><tspan
+ y="390"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4557"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5491">return</tspan> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5493">when</tspan> (x) {</tspan><tspan
+ y="410"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4559"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5496">object</tspan>: <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5498">X1</tspan> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5500">by</tspan> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5502">object</tspan>: <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5504">XX1</tspan> {</tspan><tspan
+ y="430"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4561"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5507">fun</tspan> <tspan
+ style="fill:#0000ff;fill-opacity:1"
+ id="tspan5509">xxx1</tspan>() {}</tspan><tspan
+ y="450"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4563"> },</tspan><tspan
+ y="470"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4565"> <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5513">X2</tspan> {</tspan><tspan
+ y="490"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4567"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5516">fun</tspan> <tspan
+ style="fill:#0000ff;fill-opacity:1"
+ id="tspan5518">xxx2</tspan>() {}</tspan><tspan
+ y="510"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4569"> },</tspan><tspan
+ y="530"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4571"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5522">object</tspan>: <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5524">Y1</tspan>,</tspan><tspan
+ y="550"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4573"> <tspan
+ style="fill:#228b22;fill-opacity:1"
+ id="tspan5527">Y2</tspan> {</tspan><tspan
+ y="570"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4575"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5530">fun</tspan> <tspan
+ style="fill:#0000ff;fill-opacity:1"
+ id="tspan5532">yyy</tspan>() {}</tspan><tspan
+ y="590"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4577"> } -></tspan><tspan
+ y="610"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4579"> 1</tspan><tspan
+ y="630"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4581" /><tspan
+ y="650"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4583"> <tspan
+ style="fill:#a020f0;fill-opacity:1"
+ id="tspan5538">else</tspan> -></tspan><tspan
+ y="670"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4585"> 2</tspan><tspan
+ y="690"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4587"> }</tspan><tspan
+ y="710"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4589"> }</tspan><tspan
+ y="730"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4591">}</tspan><tspan
+ y="750"
+ x="352"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4593" /></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="377.76709"
+ y="278.79999"
+ id="text1851-6-6"><tspan
+ sodipodi:role="line"
+ x="377.76709"
+ y="278.79999"
+ id="tspan1880-9-0">When seeking the previous element of this
line,</tspan></text>
+ <text
+ id="text5573"
+ y="302.79999"
+ x="376.7594"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ y="302.79999"
+ x="380.22293"
+ sodipodi:role="line"
+ id="tspan5575">if we got a pair of curly brackets, </tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="377.71378"
+ y="326"
+ id="text5581"><tspan
+ id="tspan5579"
+ sodipodi:role="line"
+ x="377.71378"
+ y="326">then jump to the object token</tspan><tspan
+ sodipodi:role="line"
+ x="377.71378"
+ y="342.66666"
+ id="tspan6156">and resume seeking,</tspan></text>
+ <path
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker6236);paint-order:normal"
+ d="m 380,278 56,4"
+ id="path5598"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5650"
+ d="m 380,298 60,-32"
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker6390);paint-order:normal"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker6406);paint-order:normal"
+ d="m 380,323 c 84,4 128,-53 128,-105"
+ id="path5950"
+ inkscape:connector-curvature="0" />
+ <text
+ id="text6884"
+ y="366.13333"
+ x="377.71378"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan6882"
+ y="366.13333"
+ x="377.71378"
+ sodipodi:role="line">to skip this comma.</tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ id="path6984"
+ d="M 380,362.80089 C 464,366.80089 588,270 588,218"
+
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker6988);paint-order:normal"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer12"
+ inkscape:label="Layer 12"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56.000004"
+ id="text819-9-5-2-1-3-7-8-5-5-2"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2-9-3-4-5-7-2"
+ x="512.52295"
+ y="56.000004">Ambiguous arrows</tspan></text>
+ <text
+ id="text3577-3-4-2"
+ y="208"
+ x="160"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20.65869713px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;
[...]
+ xml:space="preserve"><tspan
+ y="208"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan4593-2"><tspan
+ style="fill:#a020f0;fill-opacity:1;stroke-width:1px"
+ id="tspan9087">val</tspan> f = { g:</tspan><tspan
+ y="233.82336"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8557"> (<tspan
+ style="fill:#228b22;fill-opacity:1;stroke-width:1px"
+ id="tspan9090">Int</tspan>) -></tspan><tspan
+ y="259.64673"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8559"> (<tspan
+ style="fill:#228b22;fill-opacity:1;stroke-width:1px"
+ id="tspan9093">Int</tspan>) -></tspan><tspan
+ y="285.47012"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8561"> <tspan
+ style="fill:#228b22;fill-opacity:1;stroke-width:1px"
+ id="tspan9096">Int</tspan> -></tspan><tspan
+ y="311.29349"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8563"> g(1, 2)</tspan><tspan
+ y="337.11685"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8565">}</tspan><tspan
+ y="362.94022"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8567" /><tspan
+ y="388.76361"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8569"><tspan
+ style="fill:#a020f0;fill-opacity:1;stroke-width:1px"
+ id="tspan9102">when</tspan> (x) {</tspan><tspan
+ y="414.58698"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8571"> 1 -></tspan><tspan
+ y="440.41034"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8573"> f1 <tspan
+ style="fill:#a020f0;fill-opacity:1;stroke-width:1px"
+ id="tspan9106">as</tspan> (<tspan
+ style="fill:#228b22;fill-opacity:1;stroke-width:1px"
+ id="tspan9108">Int</tspan>) -></tspan><tspan
+ y="466.2337"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8575"> <tspan
+ style="fill:#228b22;fill-opacity:1;stroke-width:1px"
+ id="tspan9111">Int</tspan></tspan><tspan
+ y="492.0571"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8577" /><tspan
+ y="517.88043"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8579"> f2 <tspan
+ style="fill:#a020f0;fill-opacity:1;stroke-width:1px"
+ id="tspan9115">as</tspan> (<tspan
+ style="fill:#228b22;fill-opacity:1;stroke-width:1px"
+ id="tspan9117">Int</tspan>) -></tspan><tspan
+ y="543.70386"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8581"> <tspan
+ style="fill:#228b22;fill-opacity:1;stroke-width:1px"
+ id="tspan9120">Int</tspan> -></tspan><tspan
+ y="569.52722"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8583"> f3</tspan><tspan
+ y="595.35059"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8585" /><tspan
+ y="621.17395"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8587"> <tspan
+ style="fill:#a020f0;fill-opacity:1;stroke-width:1px"
+ id="tspan9140">is</tspan> (<tspan
+ style="fill:#228b22;fill-opacity:1;stroke-width:1px"
+ id="tspan9125">Int</tspan>) -></tspan><tspan
+ y="646.99731"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8589"> <tspan
+ style="fill:#228b22;fill-opacity:1;stroke-width:1px"
+ id="tspan9128">Int</tspan> -></tspan><tspan
+ y="672.82068"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8591"> f4</tspan><tspan
+ y="698.64404"
+ x="160"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1;stroke-width:1px"
+ id="tspan8595">}</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.21557999px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="448.6192"
+ y="232.27397"
+ id="text1851-6-6-3"><tspan
+ sodipodi:role="line"
+ x="448.6192"
+ y="232.27397"
+ id="tspan1880-9-0-6"
+ style="stroke-width:1px">← arrow for function type</tspan></text>
+ <text
+ id="text9162"
+ y="259.38849"
+ x="448.6192"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.21557999px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan9160"
+ y="259.38849"
+ x="448.6192"
+ sodipodi:role="line"
+ style="stroke-width:1px">← arrow for function type</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.21557999px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="448.6192"
+ y="283.92072"
+ id="text9166"><tspan
+ sodipodi:role="line"
+ x="448.6192"
+ y="283.92072"
+ id="tspan9164"
+ style="stroke-width:1px">← arrow for lambda parameters</tspan></text>
+ <text
+ id="text9170"
+ y="414.58701"
+ x="273.6228"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.21557999px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan9168"
+ y="414.58701"
+ x="273.6228"
+ sodipodi:role="line"
+ style="stroke-width:1px">← arrow for when-entry</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.21557999px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="448.6192"
+ y="441.44327"
+ id="text9174"><tspan
+ sodipodi:role="line"
+ x="448.6192"
+ y="441.44327"
+ id="tspan9172"
+ style="stroke-width:1px">← arrow for function type</tspan></text>
+ <text
+ id="text9178"
+ y="520.72107"
+ x="396.97247"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.21557999px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan9176"
+ y="520.72107"
+ x="396.97247"
+ sodipodi:role="line"
+ style="stroke-width:1px">← arrow for function type</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.21557999px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="396.97247"
+ y="544.73682"
+ id="text9182"><tspan
+ sodipodi:role="line"
+ x="396.97247"
+ y="544.73682"
+ id="tspan9180"
+ style="stroke-width:1px">← arrow for when-entry</tspan></text>
+ <text
+ id="text9186"
+ y="624.01453"
+ x="355.65503"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.21557999px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan9184"
+ y="624.01453"
+ x="355.65503"
+ sodipodi:role="line"
+ style="stroke-width:1px">← arrow for function type</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.21557999px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="355.65503"
+ y="648.03027"
+ id="text9190"><tspan
+ sodipodi:role="line"
+ x="355.65503"
+ y="648.03027"
+ id="tspan9188"
+ style="stroke-width:1px">← arrow for when-entry</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666603px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="88"
+ y="104"
+ id="text885-5-3-6-7-0-4-6"><tspan
+ sodipodi:role="line"
+ x="88"
+ y="104"
+ id="tspan4332-6">Arrows have many meanings and indentation
rules.</tspan><tspan
+ sodipodi:role="line"
+ x="88"
+ y="137.33333"
+ id="tspan9228">We use heuristics for this, but it is not
precise.</tspan></text>
+ <text
+ id="text9232"
+ y="562.03845"
+ x="653.71222"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.21557999px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ id="tspan9230"
+ y="562.03845"
+ x="653.71222"
+ sodipodi:role="line"
+ style="stroke-width:1px">Cannot handle those cases for
now.</tspan><tspan
+ y="583.55792"
+ x="653.71222"
+ sodipodi:role="line"
+ style="stroke-width:1px"
+ id="tspan5447">We assume all arrows inside a when-</tspan><tspan
+ y="605.07739"
+ x="653.71222"
+ sodipodi:role="line"
+ style="stroke-width:1px"
+ id="tspan5449">expression are parts of when-entries.</tspan></text>
+ <path
+
style="opacity:1;vector-effect:none;fill:#a020f0;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 640.31471,450.7397 15.49403,92.96414"
+ id="path9234"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path9236"
+ d="m 609.32667,523.04514 41.31739,30.98805"
+
style="opacity:1;vector-effect:none;fill:#a020f0;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+
style="opacity:1;vector-effect:none;fill:#a020f0;fill-opacity:1;fill-rule:evenodd;stroke:#3366cc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
+ d="m 568.00927,616.00928 82.63479,-51.64675"
+ id="path9238"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer13"
+ inkscape:label="Layer 13"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56.000004"
+ id="text819-9-5-2-1-3-7-8-5-5-2-9"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2-9-3-4-5-7-2-6"
+ x="512.52295"
+ y="56.000004">Angle brackets <tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono'"
+ id="tspan9259"><></tspan></tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="64"
+ y="168"
+ id="text885-5-3-6-7-09"><tspan
+ sodipodi:role="line"
+ x="64"
+ y="168"
+ id="tspan2778-7">Token ‘<tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans Mono'"
+ id="tspan9314"><</tspan>’ and ‘<tspan
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto
sans Mono';-inkscape-font-specification:'Noto sans Mono'"
+ id="tspan9316">></tspan>’ may be used as inequality operators or
</tspan><tspan
+ sodipodi:role="line"
+ x="64"
+ y="208"
+ id="tspan9312">angle brackets for type parameters.</tspan><tspan
+ sodipodi:role="line"
+ x="64"
+ y="248"
+ id="tspan9300" /><tspan
+ sodipodi:role="line"
+ x="64"
+ y="288"
+ id="tspan9302">We use heuristics to distinguish them:</tspan><tspan
+ sodipodi:role="line"
+ x="64"
+ y="328"
+ id="tspan9304" /><tspan
+ sodipodi:role="line"
+ x="64"
+ y="368"
+ id="tspan9306">- Angle bracket must be balanced.</tspan><tspan
+ sodipodi:role="line"
+ x="64"
+ y="408"
+ id="tspan9308">- Angle bracket cannot contain some kind of
tokens.</tspan><tspan
+ sodipodi:role="line"
+ x="64"
+ y="448"
+ id="tspan9310" /></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer14"
+ inkscape:label="Layer 14"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56.000004"
+ id="text819-9-5-2-1-3-7-8-5-5-2-9-0"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2-9-3-4-5-7-2-6-8"
+ x="512.52295"
+ y="56.000004">Ambiguous operators</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="64"
+ y="116.32"
+ id="text885-5-3-6-7-09-4"><tspan
+ sodipodi:role="line"
+ x="64"
+ y="116.32"
+ id="tspan9310-7">We cannot handle those cases for now.</tspan></text>
+ <text
+ id="text3577-3-4-0"
+ y="168.16"
+ x="96"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ xml:space="preserve"><tspan
+ y="168.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan4593-3"><tspan
+ style="fill:#a020f0"
+ id="tspan12605">var</tspan> shl = 1</tspan><tspan
+ y="188.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10770"><tspan
+ style="fill:#a020f0"
+ id="tspan12608">val</tspan> x = shl shl shl <tspan
+ style="fill:#b22222"
+ id="tspan12610">// The last “shl” is a variable named
“shl”.</tspan></tspan><tspan
+ y="208.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10772">shl < 100 && foo() <tspan
+ style="fill:#b22222"
+ id="tspan12613">// This is not a continuation of the previous
line.</tspan></tspan><tspan
+ y="228.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10774" /><tspan
+ y="248.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10776"><tspan
+ style="fill:#a020f0"
+ id="tspan12617">var</tspan> shl = 1</tspan><tspan
+ y="268.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10778"><tspan
+ style="fill:#a020f0"
+ id="tspan12620">val</tspan> x = shl shl <tspan
+ style="fill:#b22222"
+ id="tspan12622">// The last “shl” is a shift operator.</tspan></tspan><tspan
+ y="288.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10780"> shl < 100 && foo() <tspan
+ style="fill:#b22222"
+ id="tspan12625">// This is a continuation of the previous
line.</tspan></tspan><tspan
+ y="308.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10782" /><tspan
+ y="328.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10784"><tspan
+ style="fill:#a020f0"
+ id="tspan12629">var</tspan> shl = 1</tspan><tspan
+ y="348.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10786"><tspan
+ style="fill:#a020f0"
+ id="tspan12632">val</tspan> x = shl shl shl ++ <tspan
+ style="fill:#b22222"
+ id="tspan12634">// postfix increment operator</tspan></tspan><tspan
+ y="368.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10788">shl < 100 && foo() <tspan
+ style="fill:#b22222"
+ id="tspan12637">// This is not a continuation of the previous
line.</tspan></tspan><tspan
+ y="388.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10790" /><tspan
+ y="408.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10792"><tspan
+ style="fill:#a020f0"
+ id="tspan12641">var</tspan> shl = 1</tspan><tspan
+ y="428.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10794"><tspan
+ style="fill:#a020f0"
+ id="tspan12644">val</tspan> x = shl shl ++ <tspan
+ style="fill:#b22222"
+ id="tspan12646">// prefix increment operator</tspan></tspan><tspan
+ y="448.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10796"> shl < 100 && foo() <tspan
+ style="fill:#b22222"
+ id="tspan12649">// This is a continuation of the previous
line.</tspan></tspan><tspan
+ y="468.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10798" /><tspan
+ y="488.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10800"><tspan
+ style="fill:#a020f0"
+ id="tspan12653">val</tspan> x = foo()!! <tspan
+ style="fill:#b22222"
+ id="tspan12655">// postfix operator</tspan></tspan><tspan
+ y="508.16"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10802">foo() <tspan
+ style="fill:#b22222"
+ id="tspan12658">// This is not a continuation of the previous
line.</tspan></tspan><tspan
+ y="528.16003"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10804" /><tspan
+ y="548.16003"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10806"><tspan
+ style="fill:#a020f0"
+ id="tspan12662">val</tspan> x = !! <tspan
+ style="fill:#b22222"
+ id="tspan12664">// two prefix operators</tspan></tspan><tspan
+ y="568.16003"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10808"> foo() <tspan
+ style="fill:#b22222"
+ id="tspan12667">// This is a continuation of the previous
line.</tspan></tspan><tspan
+ y="588.16003"
+ x="96"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan10810" /></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer15"
+ inkscape:label="Layer 15"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56.000004"
+ id="text819-9-5-2-1-3-7-8-5-5-2-9-0-8"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2-9-3-4-5-7-2-6-8-5"
+ x="512.52295"
+ y="56.000004">Implementation</tspan></text>
+ <text
+ id="text3577-3-4-0-5"
+ y="152.74873"
+ x="6.5857863"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ xml:space="preserve"><tspan
+ y="152.74873"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13461"><tspan
+ style="fill:#96b4b4"
+ id="tspan16816">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16818">indent-line</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16820">← entry point for indenting line</tspan></tspan><tspan
+ y="172.74873"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13927"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16823">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16825">calculate-indent</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16827">← calculate the amount of the
indentation</tspan></tspan><tspan
+ y="192.74873"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13929"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16830">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16832">calculate-indent-of-multiline-comment</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16834">← when the point is inside a multiline
comment</tspan></tspan><tspan
+ y="212.74873"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13931"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16837">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16839">calculate-indent-of-multiline-string</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16841">← when the point is inside a multiline
string</tspan></tspan><tspan
+ y="232.74873"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13933"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16844">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16846">calculate-indent-of-single-line-comment</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16848">← when the point is before a single-line
comment</tspan></tspan><tspan
+ y="252.74873"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13935"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16851">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16853">calculate-indent-of-code</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16855">← other case, including before a single-line
string</tspan></tspan><tspan
+ y="272.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13937"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16858">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16860">forward-token</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16862">← lexer</tspan></tspan><tspan
+ y="292.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13939"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16865">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16867">forward-token-simple</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16869">← lexer without unbounded recursion</tspan></tspan><tspan
+ y="312.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13941"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16872">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16874">implicit-semi-p</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16876">← determinate implicit semicolon</tspan></tspan><tspan
+ y="332.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13943"> ...</tspan><tspan
+ y="352.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13945"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16880">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16882">backward-token</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16884">← lexer</tspan></tspan><tspan
+ y="372.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13947"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16887">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16889">backward-token-simple</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16891">← lexer without unbounded recursion</tspan></tspan><tspan
+ y="392.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13949"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16894">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16896">implicit-semi-p</tspan></tspan><tspan
+ y="412.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13951"> ...</tspan><tspan
+ y="432.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13953"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16900">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16902">calculate-indent-after-open-curly-brace</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16904">← when the point is after ‘{’</tspan></tspan><tspan
+ y="452.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13955"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16907">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16909">curly-brace-type</tspan> <tspan
+ style="fill:#3366cc"
+ id="tspan16911">← determinate the type of the block</tspan></tspan><tspan
+ y="472.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13957"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16914">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16916">find-parent-and-align-with-next</tspan></tspan><tspan
+ y="492.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13959"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16919">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16921">backward-sexps-until</tspan></tspan><tspan
+ y="512.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13961"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16924">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16926">backward-token-or-list</tspan></tspan><tspan
+ y="532.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13963"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16929">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16931">backward-token</tspan></tspan><tspan
+ y="552.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13965"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16934">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16936">forward-token-or-list</tspan></tspan><tspan
+ y="572.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13967"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16939">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16941">forward-token</tspan></tspan><tspan
+ y="592.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13969"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16944">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16946">calculate-indent-after-comma</tspan></tspan><tspan
+ y="612.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13971"> ...</tspan><tspan
+ y="632.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13973"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16950">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16952">calculate-indent-after-semicolon</tspan></tspan><tspan
+ y="652.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13975"> ...</tspan><tspan
+ y="672.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13977"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16956">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16958">calculate-indent-of-expression</tspan></tspan><tspan
+ y="692.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13979"> ...</tspan><tspan
+ y="712.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13981"> <tspan
+ style="fill:#96b4b4"
+ id="tspan16962">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16964">find-parent-and-align-with-next</tspan></tspan><tspan
+ y="732.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13983"> ...</tspan><tspan
+ y="752.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13985"> ...</tspan><tspan
+ y="772.74872"
+ x="6.5857863"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13987" /></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;font-family:'Noto
sans';-inkscape-font-specification:'Noto
sans';text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="16"
+ y="120"
+ id="text885-5-3-6-7-09-4-0"><tspan
+ sodipodi:role="line"
+ x="16"
+ y="120"
+ id="tspan9310-7-4">Overview of functions for indentation. Details are
omitted.</tspan></text>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer16"
+ inkscape:label="Layer 16"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ x="512.52295"
+ y="56.000004"
+ id="text819-9-5-2-1-3-7-8-5-5-2-9-0-8-8"><tspan
+ sodipodi:role="line"
+ id="tspan817-1-6-9-2-9-3-4-5-7-2-6-8-5-8"
+ x="512.52295"
+ y="56.000004">Data types</tspan></text>
+ <text
+ id="text3577-3-4-0-5-3"
+ y="124.24"
+ x="56"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ xml:space="preserve"><tspan
+ y="124.24"
+ x="56"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan13987-7"><tspan
+ style="fill:#96b4b4"
+ id="tspan16816-2">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b"
+ id="tspan16818-4">token</tspan></tspan><tspan
+ y="144.23999"
+ x="56"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan20839"> Lexical tokens. Consists of the type, the text,
and the location (start and end) of the token.</tspan><tspan
+ y="164.23999"
+ x="56"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan20841" /><tspan
+ y="184.23999"
+ x="56"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan20849"><tspan
+ style="fill:#96b4b4;fill-opacity:1"
+ id="tspan20853">kotlin-mode--</tspan><tspan
+ style="fill:#008b8b;fill-opacity:1"
+ id="tspan20851">indentation</tspan></tspan><tspan
+ y="204.23999"
+ x="56"
+ sodipodi:role="line"
+ style="fill:#000000;fill-opacity:1"
+ id="tspan20845"> Location of anchor point paired with
offset.</tspan></text>
+ <text
+ id="text20857"
+ y="323.20001"
+ x="512.52295"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;font-family:'Noto
Sans';-inkscape-font-specification:'Noto Sans,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-l
[...]
+ xml:space="preserve"><tspan
+ y="323.20001"
+ x="512.52295"
+ id="tspan20855"
+ sodipodi:role="line">Other notable functions</tspan></text>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:'Noto
Sans Mono';-inkscape-font-specification:'Noto Sans Mono,
Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-li
[...]
+ x="56"
+ y="391.44"
+ id="text20877"><tspan
+ id="tspan20863"
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="56"
+ y="391.44"><tspan
+ id="tspan20859"
+ style="fill:#96b4b4">kotlin-mode--</tspan><tspan
+ id="tspan20861"
+ style="fill:#008b8b">indent-new-comment-line</tspan></tspan><tspan
+ id="tspan20865"
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="56"
+ y="411.44"> Replacement for indent-new-comment-line. Break a line,
indent it, and tweak comment delimiters.</tspan><tspan
+ id="tspan20867"
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="56"
+ y="431.44" /><tspan
+ id="tspan20873"
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="56"
+ y="451.44"><tspan
+ id="tspan20869"
+ style="fill:#96b4b4;fill-opacity:1">kotlin-mode--</tspan><tspan
+ id="tspan20871"
+
style="fill:#008b8b;fill-opacity:1">post-self-insert</tspan></tspan><tspan
+ id="tspan20875"
+ style="fill:#000000;fill-opacity:1"
+ sodipodi:role="line"
+ x="56"
+ y="471.44"> Do electric indentation.</tspan></text>
+ </g>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot2588"
+
style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:'Noto
Sans';font-style:normal;font-weight:normal;font-size:32px;letter-spacing:0px;word-spacing:0px;text-anchor:start;text-align:start;-inkscape-font-specification:'Noto
Sans,
Normal';font-stretch:normal;font-variant:normal;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal"><
[...]
+ id="flowRegion2590"><rect
+ id="rect2592"
+ width="1232"
+ height="304"
+ x="-64"
+ y="384" /></flowRegion><flowPara
+ id="flowPara2594" /></flowRoot></svg>
diff --git a/doc/indentation_logic/src/split_pages.kts
b/doc/indentation_logic/src/split_pages.kts
new file mode 100644
index 0000000000..a2f1334fb9
--- /dev/null
+++ b/doc/indentation_logic/src/split_pages.kts
@@ -0,0 +1,56 @@
+/**
+ * Write each layer of Inkscape SVG file into separate SVG files.
+ */
+import java.io.File
+import javax.xml.parsers.DocumentBuilderFactory
+import javax.xml.transform.TransformerFactory
+import javax.xml.transform.dom.DOMSource
+import javax.xml.transform.stream.StreamResult
+import org.w3c.dom.Element
+
+val INKSCAPE_NS = "http://www.inkscape.org/namespaces/inkscape"
+
+if (args.size < 1) {
+ System.err.println("Usage: kotlinc-jvm -script split_pages.kts pages.svg")
+ System.exit(-1)
+}
+
+val transformer = TransformerFactory.newInstance().newTransformer()
+
+val inputFile = File(args[0])
+val document = DocumentBuilderFactory
+ .newDefaultInstance()
+ .also { it.setNamespaceAware(true) }
+ .newDocumentBuilder()
+ .parse(inputFile)
+
+val svgElement = document.documentElement
+val childNodes = svgElement.childNodes
+val layers = 0.until(childNodes.length)
+ .map { childNodes.item(it) }
+ .filter { child ->
+ child is Element &&
+ child.localName == "g" &&
+ child.getAttributeNS(INKSCAPE_NS, "groupmode") == "layer"
+ }
+
+for (layer in layers) {
+ svgElement.removeChild(layer)
+}
+
+val outputDirectory = File("pages")
+
+outputDirectory.mkdirs()
+
+for ((index, layer) in layers.withIndex()) {
+ svgElement.appendChild(layer)
+
+ // Assuming `style="display:none"`
+ layer.attributes.removeNamedItem("style")
+
+ val outputFile = File(outputDirectory, "page_%03d.svg".format(index))
+
+ transformer.transform(DOMSource(document), StreamResult(outputFile))
+
+ svgElement.removeChild(layer)
+}
- [nongnu] elpa/kotlin-mode updated (ff4637c4ea -> 3a84689d0b), ELPA Syncer, 2023/01/17
- [nongnu] elpa/kotlin-mode e8969a6214 02/10: Move lexical level routines to kotlin-mode-lexer.el, ELPA Syncer, 2023/01/17
- [nongnu] elpa/kotlin-mode 0a41f8b7fd 03/10: Fix ckeckdoc errors, ELPA Syncer, 2023/01/17
- [nongnu] elpa/kotlin-mode 115a7dd7e3 04/10: Rewrite indentation logic, ELPA Syncer, 2023/01/17
- [nongnu] elpa/kotlin-mode 23a693d264 05/10: Add documentation of indentation logic,
ELPA Syncer <=
- [nongnu] elpa/kotlin-mode 1854330e27 06/10: Fix for 24.x when template string is incomplete, ELPA Syncer, 2023/01/17
- [nongnu] elpa/kotlin-mode c7d5c67ebc 01/10: Improve detection of line continuation, ELPA Syncer, 2023/01/17
- [nongnu] elpa/kotlin-mode 2f64645460 08/10: Support definitely non-nullable type, ELPA Syncer, 2023/01/17
- [nongnu] elpa/kotlin-mode eb2af1723e 07/10: Support value modifier, ELPA Syncer, 2023/01/17
- [nongnu] elpa/kotlin-mode 70de2560a6 09/10: Support closed range operator, ELPA Syncer, 2023/01/17
- [nongnu] elpa/kotlin-mode 3a84689d0b 10/10: Merge pull request #53 from taku0/rewite-indentation, ELPA Syncer, 2023/01/17