emacs-elpa-diffs
[Top][All Lists]
Advanced

[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">            } -&gt;</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> -&gt;</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>) -&gt;</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>) -&gt;</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> -&gt;</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 -&gt;</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>) -&gt;</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>) -&gt;</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> -&gt;</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>) -&gt;</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> -&gt;</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">&lt;&gt;</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">&lt;</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">&gt;</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 &lt; 100 &amp;&amp; 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 &lt; 100 &amp;&amp; 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 &lt; 100 &amp;&amp; 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 &lt; 100 &amp;&amp; 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)
+}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]