Repository: alecthomas/chroma
Pull request #481 (2021-04-29 22:54:47)

toml: allow `-` in keys
The current TOML lexer doesn't consider `-` as valid part of a TOML key, but this is [legal per the v1.0.0 TOML spec](https://toml.io/en/v1.0.0#keys). In the wild, this is the style used in `pyproject.toml` files.  

This patch makes the lexer use the same character ranges as the ones specified by the spec. 


Patch:
diff --git a/lexer.go b/lexer.go
index 1269d33..fe62519 100644
--- a/lexer.go
+++ b/lexer.go
@@ -2,6 +2,7 @@ package chroma
 
 import (
 	"fmt"
+	"strings"
 )
 
 var (
@@ -98,9 +99,11 @@ type Lexer interface {
 // Lexers is a slice of lexers sortable by name.
 type Lexers []Lexer
 
-func (l Lexers) Len() int           { return len(l) }
-func (l Lexers) Swap(i, j int)      { l[i], l[j] = l[j], l[i] }
-func (l Lexers) Less(i, j int) bool { return l[i].Config().Name < l[j].Config().Name }
+func (l Lexers) Len() int      { return len(l) }
+func (l Lexers) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
+func (l Lexers) Less(i, j int) bool {
+	return strings.ToLower(l[i].Config().Name) < strings.ToLower(l[j].Config().Name)
+}
 
 // PrioritisedLexers is a slice of lexers sortable by priority.
 type PrioritisedLexers []Lexer
diff --git a/lexers/r/raku.go b/lexers/r/raku.go
index 6eb7e90..7ec0d3b 100644
--- a/lexers/r/raku.go
+++ b/lexers/r/raku.go
@@ -577,7 +577,8 @@ func rakuRules() Rules {
 	return Rules{
 		"root": {
 			Include("common"),
-			{`\{|\}|\(|\)|\[|\]`, Punctuation, nil},
+			{`[{}();]`, Punctuation, nil},
+			{`\[|\]`, Operator, nil},
 			{`.+?`, Text, nil},
 		},
 		"common": {
@@ -609,10 +610,16 @@ func rakuRules() Rules {
 			// Hyperoperator | »*«
 			{`(>>)(\S+?)(<<)`, ByGroups(Operator, UsingSelf("root"), Operator), nil},
 			{`(»)(\S+?)(«)`, ByGroups(Operator, UsingSelf("root"), Operator), nil},
+			// Hyperoperator | «*«
+			{`(<<)(\S+?)(<<)`, ByGroups(Operator, UsingSelf("root"), Operator), nil},
+			{`(«)(\S+?)(«)`, ByGroups(Operator, UsingSelf("root"), Operator), nil},
+			// Hyperoperator | »*»
+			{`(>>)(\S+?)(>>)`, ByGroups(Operator, UsingSelf("root"), Operator), nil},
+			{`(»)(\S+?)(»)`, ByGroups(Operator, UsingSelf("root"), Operator), nil},
 			// <<quoted words>>
-			{`(?<!(?:\d+|\.(?:Int|Numeric)|[$@%][\w':-]+\s+|[\])}])\s*)(<<)(?!(?:(?!>>)[^\n])+?[},;] *\n)(?!(?:(?!>>).)+?>>\S+?>>)`, Punctuation, Push("<<")},
+			{`(?<!(?:\d+|\.(?:Int|Numeric)|[$@%][\w':-]+\s+|[\])}]\s+)\s*)(<<)(?!(?:(?!>>)[^\n])+?[},;] *\n)(?!(?:(?!>>).)+?>>\S+?>>)`, Punctuation, Push("<<")},
 			// «quoted words»
-			{`(?<!(?:\d+|\.(?:Int|Numeric)|[$@%][\w':-]+\s+|[\])}])\s*)(«)(?![^»]+?[},;] *\n)(?![^»]+?»\S+?»)`, Punctuation, Push("«")},
+			{`(?<!(?:\d+|\.(?:Int|Numeric)|[$@%][\w':-]+\s+|[\])}]\s+)\s*)(«)(?![^»]+?[},;] *\n)(?![^»]+?»\S+?»)`, Punctuation, Push("«")},
 			// [<]
 			{`(?<=\[\\?)<(?=\])`, Operator, nil},
 			// < and > operators | something < onething > something
@@ -623,7 +630,7 @@ func rakuRules() Rules {
 			},
 			// <quoted words>
 			{
-				`(?<!(?:\d+|\.(?:Int|Numeric)|[$@%][\w':-]+\s+|[\])}])\s*)(<)((?:(?![,;)}] *(?:#[^\n]+)?\n)[^<>])+?)(>)(?!\s*(?:\d+|\.(?:Int|Numeric)|[$@%]\w[\w':-]*[^(]|\[))`,
+				`(?<!(?:\d+|\.(?:Int|Numeric)|[$@%][\w':-]+\s+|[\])}]\s+)\s*)(<)((?:(?![,;)}] *(?:#[^\n]+)?\n)[^<>])+?)(>)(?!\s*(?:\d+|\.(?:Int|Numeric)|[$@%]\w[\w':-]*[^(]|\s+\[))`,
 				ByGroups(Punctuation, String, Punctuation),
 				nil,
 			},
@@ -707,13 +714,13 @@ func rakuRules() Rules {
 			// Method
 			// Method with adverb
 			{
-				`(?<!\.\.[?^*+]?)(?<=(?:\.[?^*+]?)|self!)['\w:-]+(?=:['\w-]+` +
+				`(?<!\.\.[?^*+]?)(?<=(?:\.[?^*+&]?)|self!)['\w:-]+(?=:['\w-]+` +
 					colonPairOpeningBrackets + `.+?` + colonPairClosingBrackets + `$)`,
 				NameFunction,
 				Push("name-adverb"),
 			},
 			// Method without adverb
-			{`(?<!\.\.[?^*+]?)(?<=(?:\.[?^*+]?)|self!)['\w:-]+`, NameFunction, nil},
+			{`(?<!\.\.[?^*+]?)(?<=(?:\.[?^*+&]?)|self!)['\w:-]+`, NameFunction, nil},
 			// Indirect invocant
 			{namePattern + `(?=\s+\W?['\w:-]+:\W)`, NameFunction, Push("name-adverb")},
 			{`(?<=\W)(?:∅|i|e|𝑒|tau|τ|pi|π|Inf|∞)(?=\W)`, NameConstant, nil},
@@ -772,27 +779,27 @@ func rakuRules() Rules {
 		"colon-pair": {
 			// :key(value)
 			{colonPairPattern, colonPair(String), bracketsFinder(rakuNameAttribute)},
-			// :key
-			{`(:!?)(\w[\w'-]*)`, ByGroups(Punctuation, String), nil},
 			// :123abc
 			{
 				`(:)(\d+)(\w[\w'-]*)(\s*[,;)]?\s*$)`,
 				ByGroups(Punctuation, UsingSelf("number"), String, Text),
 				nil,
 			},
+			// :key
+			{`(:!?)(\w[\w'-]*)`, ByGroups(Punctuation, String), nil},
 			{`\s+`, Text, nil},
 		},
 		"colon-pair-attribute": {
 			// :key(value)
 			{colonPairPattern, colonPair(NameAttribute), bracketsFinder(rakuNameAttribute)},
-			// :key
-			{`(:!?)(\w[\w'-]*)`, ByGroups(Punctuation, NameAttribute), nil},
 			// :123abc
 			{
 				`(:)(\d+)(\w+)(\s*[,;)]?\s*$)`,
 				ByGroups(Punctuation, UsingSelf("number"), NameAttribute, Text),
 				nil,
 			},
+			// :key
+			{`(:!?)(\w[\w'-]*)`, ByGroups(Punctuation, NameAttribute), nil},
 			{`\s+`, Text, nil},
 		},
 		"colon-pair-attribute-keyvalue": {
@@ -825,6 +832,12 @@ func rakuRules() Rules {
 			// Placeholder, will be overwritten by bracketsFinder, DO NOT REMOVE!
 			{`^$`, nil, nil},
 			Include("regex-escape-class"),
+			// $(code)
+			{
+				`(?<!(?<!\\)\\)([$@])(\()(.*?)(\))`,
+				ByGroups(Keyword, Punctuation, UsingSelf("root"), Punctuation),
+				nil,
+			},
 			// Exclude $/ from variables, because we can't get out of the end of the slash regex: $/;
 			{`\$(?=/)`, NameEntity, nil},
 			// Exclude $ from variables
@@ -848,12 +861,6 @@ func rakuRules() Rules {
 			},
 			// {code}
 			{`(?<!(?<!\\)\\)({)(.*?)(})`, ByGroups(Punctuation, UsingSelf("root"), Punctuation), nil},
-			// $(code)
-			{
-				`(?<!(?<!\\)\\)([$@])(\()(.*?)(\))`,
-				ByGroups(Keyword, Punctuation, UsingSelf("root"), Punctuation),
-				nil,
-			},
 			// Properties
 			{`(:)(\w+)`, ByGroups(Punctuation, NameAttribute), nil},
 			// Operator
@@ -880,7 +887,7 @@ func rakuRules() Rules {
 				nil,
 			},
 			// Capture markers
-			{`(?<!(?<!\\)\\)<\(|\)>`, Punctuation, nil},
+			{`(?<!(?<!\\)\\)<\(|\)>`, Operator, nil},
 			{`(?<!(?<!\\)\\)<`, Punctuation, Push("regex-property")},
 			{`(?<!(?<!\\)\\)"`, Punctuation, Push("double-quotes")},
 			{`(?<!(?<!\\)\\)(?:\]|\)|>)`, Punctuation, Pop(1)},
@@ -1104,11 +1111,11 @@ func rakuRules() Rules {
 			Include("qq"),
 		},
 		"<<": {
-			{`>>(?!\s*(?:\d+|\.(?:Int|Numeric)|[$@%][\w':-]+|\[))`, Punctuation, Pop(1)},
+			{`>>(?!\s*(?:\d+|\.(?:Int|Numeric)|[$@%][\w':-]+|\s+\[))`, Punctuation, Pop(1)},
 			Include("ww"),
 		},
 		"«": {
-			{`»(?!\s*(?:\d+|\.(?:Int|Numeric)|[$@%][\w':-]+|\[))`, Punctuation, Pop(1)},
+			{`»(?!\s*(?:\d+|\.(?:Int|Numeric)|[$@%][\w':-]+|\s+\[))`, Punctuation, Pop(1)},
 			Include("ww"),
 		},
 		"ww": {
@@ -1116,11 +1123,7 @@ func rakuRules() Rules {
 			Include("qq"),
 		},
 		"qq": {
-			{
-				`(?<!(?<!\\)\\)(?:` + variablePattern + `|` + globalVariablePattern + `)`,
-				NameVariable,
-				Push("qq-variable", "name-adverb"),
-			},
+			Include("qq-variable"),
 			// Function with adverb
 			{
 				`\w[\w:'-]+(?=:['\w-]+` +
@@ -1141,7 +1144,14 @@ func rakuRules() Rules {
 			Default(Pop(1)),
 		},
 		"qq-variable": {
-			{`(?:\[.*?\]|\{.*?\}|<<.*?>>|<.*?>|«*?»)+`, UsingSelf("root"), nil},
+			{
+				`(?<!(?<!\\)\\)(?:` + variablePattern + `|` + globalVariablePattern + `)`,
+				NameVariable,
+				Push("qq-variable-extras", "name-adverb"),
+			},
+		},
+		"qq-variable-extras": {
+			{`(?:\[.*?\]|\{.*?\}|<<.*?>>|<.*?>|«.*?»)+`, UsingSelf("root"), nil},
 			// Method
 			{
 				`(\.)([^(\s]+)(\([^"]*?\))`,
@@ -1161,7 +1171,7 @@ func rakuRules() Rules {
 		},
 		"Q-variable": {
 			Include("escape-qq"),
-			Include("variable"),
+			Include("qq-variable"),
 			{`.+?`, String, nil},
 		},
 		"closure": {
diff --git a/lexers/t/toml.go b/lexers/t/toml.go
index b685a2c..18a44c5 100644
--- a/lexers/t/toml.go
+++ b/lexers/t/toml.go
@@ -27,7 +27,7 @@ func tomlRules() Rules {
 			{`"(\\\\|\\"|[^"])*"`, StringDouble, nil},
 			{`'(\\\\|\\'|[^'])*'`, StringSingle, nil},
 			{`[.,=\[\]{}]`, Punctuation, nil},
-			{`[^\W\d]\w*`, NameOther, nil},
+			{`[A-Za-z0-9_-]+`, NameOther, nil},
 		},
 	}
 }
diff --git a/styles/doom-one.go b/styles/doom-one.go
new file mode 100644
index 0000000..aa2b39c
--- /dev/null
+++ b/styles/doom-one.go
@@ -0,0 +1,58 @@
+package styles
+
+import (
+	"github.com/alecthomas/chroma"
+)
+
+// Doom One style. Inspired by Atom One and Doom Emacs's Atom One theme
+var DoomOne = Register(chroma.MustNewStyle("doom-one", chroma.StyleEntries{
+	chroma.Text:                 "#b0c4de",
+	chroma.Error:                "#b0c4de",
+	chroma.Comment:              "italic #8a93a5",
+	chroma.CommentHashbang:      "bold",
+	chroma.Keyword:              "#c678dd",
+	chroma.KeywordType:          "#ef8383",
+	chroma.KeywordConstant:      "bold #b756ff",
+	chroma.Operator:             "#c7bf54",
+	chroma.OperatorWord:         "bold #b756ff",
+	chroma.Punctuation:          "#b0c4de",
+	chroma.Name:                 "#c1abea",
+	chroma.NameAttribute:        "#cebc3a",
+	chroma.NameBuiltin:          "#ef8383",
+	chroma.NameClass:            "#76a9f9",
+	chroma.NameConstant:         "bold #b756ff",
+	chroma.NameDecorator:        "#e5c07b",
+	chroma.NameEntity:           "#bda26f",
+	chroma.NameException:        "bold #fd7474",
+	chroma.NameFunction:         "#00b1f7",
+	chroma.NameProperty:         "#cebc3a",
+	chroma.NameLabel:            "#f5a40d",
+	chroma.NameNamespace:        "#76a9f9",
+	chroma.NameTag:              "#e06c75",
+	chroma.NameVariable:         "#DCAEEA",
+	chroma.NameVariableGlobal:   "bold #DCAEEA",
+	chroma.NameVariableInstance: "#e06c75",
+	chroma.Literal:              "#98c379",
+	chroma.Number:               "#d19a66",
+	chroma.String:               "#98c379",
+	chroma.StringDoc:            "#7e97c3",
+	chroma.StringDouble:         "#63c381",
+	chroma.StringEscape:         "bold #d26464",
+	chroma.StringHeredoc:        "#98c379",
+	chroma.StringInterpol:       "#98c379",
+	chroma.StringOther:          "#70b33f",
+	chroma.StringRegex:          "#56b6c2",
+	chroma.StringSingle:         "#98c379",
+	chroma.StringSymbol:         "#56b6c2",
+	chroma.Generic:              "#b0c4de",
+	chroma.GenericEmph:          "italic",
+	chroma.GenericHeading:       "bold #a2cbff",
+	chroma.GenericInserted:      "#a6e22e",
+	chroma.GenericOutput:        "#a6e22e",
+	chroma.GenericUnderline:     "underline",
+	chroma.GenericPrompt:        "#a6e22e",
+	chroma.GenericStrong:        "bold",
+	chroma.GenericSubheading:    "#a2cbff",
+	chroma.GenericTraceback:     "#a2cbff",
+	chroma.Background:           "#b0c4de bg:#282c34",
+}))
diff --git a/styles/doom-one2.go b/styles/doom-one2.go
new file mode 100644
index 0000000..4654173
--- /dev/null
+++ b/styles/doom-one2.go
@@ -0,0 +1,71 @@
+package styles
+
+import (
+	"github.com/alecthomas/chroma"
+)
+
+// Doom One 2 style. Inspired by Atom One and Doom Emacs's Atom One theme
+var DoomOne2 = Register(chroma.MustNewStyle("doom-one2", chroma.StyleEntries{
+	chroma.Text:                 "#b0c4de",
+	chroma.Error:                "#b0c4de",
+	chroma.Comment:              "italic #8a93a5",
+	chroma.CommentHashbang:      "bold",
+	chroma.Keyword:              "#76a9f9",
+	chroma.KeywordConstant:      "#e5c07b",
+	chroma.KeywordType:          "#e5c07b",
+	chroma.Operator:             "#54b1c7",
+	chroma.OperatorWord:         "bold #b756ff",
+	chroma.Punctuation:          "#abb2bf",
+	chroma.Name:                 "#aa89ea",
+	chroma.NameAttribute:        "#cebc3a",
+	chroma.NameBuiltin:          "#e5c07b",
+	chroma.NameClass:            "#ca72ff",
+	chroma.NameConstant:         "bold",
+	chroma.NameDecorator:        "#e5c07b",
+	chroma.NameEntity:           "#bda26f",
+	chroma.NameException:        "bold #fd7474",
+	chroma.NameFunction:         "#00b1f7",
+	chroma.NameProperty:         "#cebc3a",
+	chroma.NameLabel:            "#f5a40d",
+	chroma.NameNamespace:        "#ca72ff",
+	chroma.NameTag:              "#76a9f9",
+	chroma.NameVariable:         "#DCAEEA",
+	chroma.NameVariableClass:    "#DCAEEA",
+	chroma.NameVariableGlobal:   "bold #DCAEEA",
+	chroma.NameVariableInstance: "#e06c75",
+	chroma.NameVariableMagic:    "#DCAEEA",
+	chroma.Literal:              "#98c379",
+	chroma.LiteralDate:          "#98c379",
+	chroma.Number:               "#d19a66",
+	chroma.NumberBin:            "#d19a66",
+	chroma.NumberFloat:          "#d19a66",
+	chroma.NumberHex:            "#d19a66",
+	chroma.NumberInteger:        "#d19a66",
+	chroma.NumberIntegerLong:    "#d19a66",
+	chroma.NumberOct:            "#d19a66",
+	chroma.String:               "#98c379",
+	chroma.StringAffix:          "#98c379",
+	chroma.StringBacktick:       "#98c379",
+	chroma.StringDelimiter:      "#98c379",
+	chroma.StringDoc:            "#7e97c3",
+	chroma.StringDouble:         "#63c381",
+	chroma.StringEscape:         "bold #d26464",
+	chroma.StringHeredoc:        "#98c379",
+	chroma.StringInterpol:       "#98c379",
+	chroma.StringOther:          "#70b33f",
+	chroma.StringRegex:          "#56b6c2",
+	chroma.StringSingle:         "#98c379",
+	chroma.StringSymbol:         "#56b6c2",
+	chroma.Generic:              "#b0c4de",
+	chroma.GenericDeleted:       "#b0c4de",
+	chroma.GenericEmph:          "italic",
+	chroma.GenericHeading:       "bold #a2cbff",
+	chroma.GenericInserted:      "#a6e22e",
+	chroma.GenericOutput:        "#a6e22e",
+	chroma.GenericUnderline:     "underline",
+	chroma.GenericPrompt:        "#a6e22e",
+	chroma.GenericStrong:        "bold",
+	chroma.GenericSubheading:    "#a2cbff",
+	chroma.GenericTraceback:     "#a2cbff",
+	chroma.Background:           "#b0c4de bg:#282c34",
+}))


Test patch:
diff --git a/lexers/testdata/raku.actual b/lexers/testdata/raku.actual
index fd1aa98..a18718d 100644
--- a/lexers/testdata/raku.actual
+++ b/lexers/testdata/raku.actual
@@ -16,6 +16,18 @@ fmt.Println("Hello from Go")
 
 say $=pod[0].config<numbered>;
 
+sub f1($a) {
+    $a+1;
+}
+
+2.&f1;
+
+sub f2($a,$b) {
+    $a+1;
+}
+
+2.&f2(3);
+
 #| Fibonacci with Multiple dispatch
 multi sub fib (0 --> 0) {}
 multi sub fib (1 --> 1) {}
@@ -275,7 +287,7 @@ say q:ww｢｢some $variable 'some text' text｣｣;
 say q:w｢｢some $variable 'some text' text｣｣;
 say qq:w｢｢some $regex 'some text' text｣｣;
 say Q:c｢｢some $regex 'some text' { 2 + 1 } text｣｣;
-say q:a｢｢some @array 'some text' { 2 + 1 } text｣｣;
+say q:a｢｢some @array[2] 'some text' { 2 + 1 } text｣｣;
 say Q:a:c｢｢some @array 'some text' { 2 + 1 } text｣｣;
 Q[some \qq[$variable.method()] testing]
 Q:a:c[some \qq[$variable.method()] testing]
diff --git a/lexers/testdata/raku.expected b/lexers/testdata/raku.expected
index e3bcbf5..f77f32a 100644
--- a/lexers/testdata/raku.expected
+++ b/lexers/testdata/raku.expected
@@ -43,15 +43,60 @@
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$=pod"},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"0"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"Operator","value":"."},
+  {"type":"Operator","value":"]."},
   {"type":"NameBuiltin","value":"config"},
   {"type":"Punctuation","value":"\u003c"},
   {"type":"LiteralString","value":"numbered"},
-  {"type":"Punctuation","value":"\u003e"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":"\u003e;"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"sub"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"f1"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameVariable","value":"$a"},
+  {"type":"Punctuation","value":")"},
+  {"type":"Text","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"Text","value":"\n    "},
+  {"type":"NameVariable","value":"$a"},
+  {"type":"Operator","value":"+"},
+  {"type":"LiteralNumberInteger","value":"1"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
+  {"type":"Punctuation","value":"}"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"LiteralNumberInteger","value":"2"},
+  {"type":"Operator","value":".\u0026"},
+  {"type":"NameFunction","value":"f1"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"Keyword","value":"sub"},
+  {"type":"Text","value":" "},
+  {"type":"NameFunction","value":"f2"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameVariable","value":"$a"},
+  {"type":"Operator","value":","},
+  {"type":"NameVariable","value":"$b"},
+  {"type":"Punctuation","value":")"},
+  {"type":"Text","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"Text","value":"\n    "},
+  {"type":"NameVariable","value":"$a"},
+  {"type":"Operator","value":"+"},
+  {"type":"LiteralNumberInteger","value":"1"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
+  {"type":"Punctuation","value":"}"},
+  {"type":"Text","value":"\n\n"},
+  {"type":"LiteralNumberInteger","value":"2"},
+  {"type":"Operator","value":".\u0026"},
+  {"type":"NameFunction","value":"f2"},
+  {"type":"Punctuation","value":"("},
+  {"type":"LiteralNumberInteger","value":"3"},
+  {"type":"Punctuation","value":");"},
+  {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"#| "},
   {"type":"LiteralStringDoc","value":"Fibonacci with Multiple dispatch\n"},
   {"type":"Keyword","value":"multi"},
@@ -134,7 +179,8 @@
   {"type":"Name","value":"fib"},
   {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"10"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: 55"},
   {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"#| C"},
@@ -180,8 +226,8 @@
   {"type":"NameFunction","value":"area"},
   {"type":"Punctuation","value":"}"},
   {"type":"LiteralStringDouble","value":"."},
-  {"type":"Punctuation","value":"\""},
-  {"type":"Text","value":";\n    "},
+  {"type":"Punctuation","value":"\";"},
+  {"type":"Text","value":"\n    "},
   {"type":"Punctuation","value":"}"},
   {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"}"},
@@ -203,7 +249,8 @@
   {"type":"Keyword","value":"is"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"required"},
-  {"type":"Text","value":";\n    "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n    "},
   {"type":"Keyword","value":"has"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$.height"},
@@ -211,7 +258,8 @@
   {"type":"Keyword","value":"is"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"required"},
-  {"type":"Text","value":";\n\n    "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n\n    "},
   {"type":"Keyword","value":"method"},
   {"type":"Text","value":" "},
   {"type":"NameFunction","value":"area"},
@@ -246,7 +294,8 @@
   {"type":"Punctuation","value":")"},
   {"type":"Operator","value":"."},
   {"type":"NameFunction","value":"print_area"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n\n"},
   {"type":"CommentSingle","value":"# Inifinite and lazy list"},
   {"type":"Text","value":"\n"},
   {"type":"Keyword","value":"my"},
@@ -270,24 +319,24 @@
   {"type":"Operator","value":"..."},
   {"type":"Text","value":" "},
   {"type":"NameConstant","value":"∞"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"@fib"},
-  {"type":"Punctuation","value":"["},
-  {"type":"Operator","value":"^"},
+  {"type":"Operator","value":"[^"},
   {"type":"LiteralNumberInteger","value":"11"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"Text","value":";\n"},
+  {"type":"Operator","value":"]"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: (0 1 1 2 3 5 8 13 21 34 55)"},
   {"type":"Text","value":"\n\n"},
   {"type":"CommentSingle","value":"# Feed operator"},
   {"type":"Text","value":"\n"},
   {"type":"NameVariable","value":"@fib"},
-  {"type":"Punctuation","value":"["},
-  {"type":"Operator","value":"^"},
+  {"type":"Operator","value":"[^"},
   {"type":"LiteralNumberInteger","value":"20"},
-  {"type":"Punctuation","value":"]"},
+  {"type":"Operator","value":"]"},
   {"type":"Text","value":" "},
   {"type":"Operator","value":"==\u003e"},
   {"type":"Text","value":" "},
@@ -299,8 +348,8 @@
   {"type":"Operator","value":"==\u003e"},
   {"type":"Text","value":" "},
   {"type":"NameBuiltin","value":"say"},
-  {"type":"Punctuation","value":"()"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"();"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: (2 3 5 13 89 233 1597)"},
   {"type":"Text","value":"\n\n"},
   {"type":"CommentSingle","value":"# Function composition"},
@@ -320,15 +369,16 @@
   {"type":"NameBuiltin","value":"assuming"},
   {"type":"Punctuation","value":"("},
   {"type":"NameVariable","value":"\u0026is-prime"},
-  {"type":"Punctuation","value":")"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":");"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Name","value":"reverse_primes"},
   {"type":"Text","value":" "},
   {"type":"Operator","value":"^"},
   {"type":"LiteralNumberInteger","value":"20"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: (19 17 13 11 7 5 3 2)"},
   {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"my"},
@@ -340,7 +390,8 @@
   {"type":"LiteralNumberInteger","value":"1"},
   {"type":"Operator","value":".."},
   {"type":"LiteralNumberInteger","value":"4"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"Keyword","value":"my"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"@b"},
@@ -353,8 +404,8 @@
   {"type":"Operator","value":".."},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringSingle","value":"d"},
-  {"type":"Punctuation","value":"'"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"';"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# Zip two lists using Z meta operator"},
   {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
@@ -364,7 +415,8 @@
   {"type":"OperatorWord","value":"Z"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"@b"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: ((1 a) (2 b) (3 c) (4 d))"},
   {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
@@ -375,16 +427,16 @@
   {"type":"Operator","value":"=\u003e"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"@b"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: (1 =\u003e a 2 =\u003e b 3 =\u003e c 4 =\u003e d)"},
   {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"["},
   {"type":"Text","value":"\\"},
   {"type":"OperatorWord","value":"R"},
-  {"type":"Operator","value":"\u003c"},
-  {"type":"Punctuation","value":"]"},
+  {"type":"Operator","value":"\u003c]"},
   {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"1"},
   {"type":"Operator","value":","},
@@ -393,7 +445,8 @@
   {"type":"Operator","value":","},
   {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"6"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n\n"},
   {"type":"CommentSingle","value":"# Hyper Operators"},
   {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
@@ -403,7 +456,8 @@
   {"type":"Operator","value":"«~»"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"@a"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: [a1 b2 c3 d4]"},
   {"type":"Text","value":"\n\n"},
   {"type":"CommentSingle","value":"# Junctions"},
@@ -427,8 +481,8 @@
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"\u003c"},
   {"type":"LiteralString","value":"a e i o u"},
-  {"type":"Punctuation","value":"\u003e"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":"\u003e;"},
+  {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"sub"},
   {"type":"Text","value":" "},
   {"type":"NameBuiltin","value":"MAIN"},
@@ -493,7 +547,8 @@
   {"type":"NameVariable","value":"$length"},
   {"type":"Operator","value":"."},
   {"type":"NameBuiltin","value":"defined"},
-  {"type":"Text","value":";\n    "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n    "},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$file"},
@@ -503,7 +558,8 @@
   {"type":"NameVariable","value":"$file"},
   {"type":"Operator","value":"."},
   {"type":"NameBuiltin","value":"defined"},
-  {"type":"Text","value":";\n    "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n    "},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"'"},
@@ -524,8 +580,8 @@
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringSingle","value":"off"},
-  {"type":"Punctuation","value":"')"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"');"},
+  {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"}"},
   {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"#|"},
@@ -712,40 +768,39 @@
   {"type":"NameVariable","value":"$match"},
   {"type":"Punctuation","value":"\u003c"},
   {"type":"LiteralString","value":"block"},
+  {"type":"Punctuation","value":"\u003e\u003c"},
+  {"type":"LiteralString","value":"pair"},
   {"type":"Punctuation","value":"\u003e"},
-  {"type":"Operator","value":"\u003c"},
-  {"type":"NameBuiltin","value":"pair"},
-  {"type":"Operator","value":"\u003e"},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"0"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"Operator","value":"\u003c"},
-  {"type":"NameBuiltin","value":"value"},
-  {"type":"Operator","value":"\u003e"},
-  {"type":"Text","value":";\n"},
+  {"type":"Operator","value":"]"},
+  {"type":"Punctuation","value":"\u003c"},
+  {"type":"LiteralString","value":"value"},
+  {"type":"Punctuation","value":"\u003e;"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: ｢value1｣"},
   {"type":"Text","value":"\n\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$match"},
-  {"type":"Operator","value":"\u003c"},
-  {"type":"Name","value":"section"},
-  {"type":"Operator","value":"\u003e"},
-  {"type":"Punctuation","value":"["},
+  {"type":"Punctuation","value":"\u003c"},
+  {"type":"LiteralString","value":"section"},
+  {"type":"Punctuation","value":"\u003e"},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"0"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"Operator","value":"\u003c"},
-  {"type":"NameBuiltin","value":"block"},
-  {"type":"Operator","value":"\u003e\u003c"},
-  {"type":"NameBuiltin","value":"pair"},
-  {"type":"Operator","value":"\u003e"},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"]"},
+  {"type":"Punctuation","value":"\u003c"},
+  {"type":"LiteralString","value":"block"},
+  {"type":"Punctuation","value":"\u003e\u003c"},
+  {"type":"LiteralString","value":"pair"},
+  {"type":"Punctuation","value":"\u003e"},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"0"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"Operator","value":"\u003c"},
-  {"type":"NameBuiltin","value":"value"},
-  {"type":"Operator","value":"\u003e"},
-  {"type":"Text","value":";\n"},
+  {"type":"Operator","value":"]"},
+  {"type":"Punctuation","value":"\u003c"},
+  {"type":"LiteralString","value":"value"},
+  {"type":"Punctuation","value":"\u003e;"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: ｢value3｣"},
   {"type":"Text","value":"\n\n"},
   {"type":"CommentSingle","value":"# Promise"},
@@ -767,7 +822,8 @@
   {"type":"Operator","value":"="},
   {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"0"},
-  {"type":"Text","value":";\n    "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n    "},
   {"type":"Keyword","value":"for"},
   {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"1"},
@@ -799,11 +855,13 @@
   {"type":"NameBuiltin","value":"await"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$promise"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$result"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: 55"},
   {"type":"Text","value":"\n\n"},
   {"type":"CommentSingle","value":"# Supply"},
@@ -817,7 +875,8 @@
   {"type":"NameBuiltin","value":"Supplier"},
   {"type":"Operator","value":"."},
   {"type":"NameBuiltin","value":"new"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"Keyword","value":"my"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$vegetable-supplier"},
@@ -827,7 +886,8 @@
   {"type":"NameBuiltin","value":"Supplier"},
   {"type":"Operator","value":"."},
   {"type":"NameBuiltin","value":"new"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"my"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$supply"},
@@ -854,10 +914,10 @@
   {"type":"Operator","value":"~"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$_"},
-  {"type":"Punctuation","value":")"},
-  {"type":"Text","value":";\n    "},
-  {"type":"Punctuation","value":"}"},
-  {"type":"Text","value":";\n    "},
+  {"type":"Punctuation","value":");"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Punctuation","value":"};"},
+  {"type":"Text","value":"\n    "},
   {"type":"Keyword","value":"whenever"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$vegetable-supplier"},
@@ -874,10 +934,10 @@
   {"type":"Operator","value":"~"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$_"},
-  {"type":"Punctuation","value":")"},
-  {"type":"Text","value":";\n    "},
-  {"type":"Punctuation","value":"}"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":");"},
+  {"type":"Text","value":"\n    "},
+  {"type":"Punctuation","value":"};"},
+  {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"}"},
   {"type":"Text","value":"\n"},
   {"type":"NameVariable","value":"$supply"},
@@ -896,15 +956,15 @@
   {"type":"NameVariable","value":"$v"},
   {"type":"Punctuation","value":"\""},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"})"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":"});"},
+  {"type":"Text","value":"\n\n"},
   {"type":"NameVariable","value":"$vegetable-supplier"},
   {"type":"Operator","value":"."},
   {"type":"NameBuiltin","value":"emit"},
   {"type":"Punctuation","value":"(\""},
   {"type":"LiteralStringDouble","value":"Radish"},
-  {"type":"Punctuation","value":"\")"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\");"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: «We've got a vegetable: Radish␤»"},
   {"type":"Text","value":"\n"},
   {"type":"NameVariable","value":"$bread-supplier"},
@@ -912,8 +972,8 @@
   {"type":"NameBuiltin","value":"emit"},
   {"type":"Punctuation","value":"(\""},
   {"type":"LiteralStringDouble","value":"Thick sliced"},
-  {"type":"Punctuation","value":"\")"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\");"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: «We've got bread: Thick sliced␤»"},
   {"type":"Text","value":"\n"},
   {"type":"NameVariable","value":"$vegetable-supplier"},
@@ -921,8 +981,8 @@
   {"type":"NameBuiltin","value":"emit"},
   {"type":"Punctuation","value":"(\""},
   {"type":"LiteralStringDouble","value":"Lettuce"},
-  {"type":"Punctuation","value":"\")"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\");"},
+  {"type":"Text","value":"\n"},
   {"type":"CommentSingle","value":"# OUTPUT: «We've got a vegetable: Lettuce␤»"},
   {"type":"Text","value":"\n\n"},
   {"type":"NameBuiltin","value":"say"},
@@ -947,8 +1007,8 @@
   {"type":"Operator","value":","},
   {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"6"},
-  {"type":"Punctuation","value":")"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":");"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"("},
@@ -968,8 +1028,8 @@
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"\u003c"},
   {"type":"LiteralString","value":"a b"},
-  {"type":"Punctuation","value":"\u003e"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\u003e;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"("},
@@ -984,8 +1044,8 @@
   {"type":"Operator","value":"»."},
   {"type":"Punctuation","value":"("},
   {"type":"LiteralNumberFloat","value":"0.5"},
-  {"type":"Punctuation","value":")"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":");"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"(\u003c"},
@@ -1002,8 +1062,8 @@
   {"type":"Operator","value":"."},
   {"type":"NameBuiltin","value":"elems"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"}"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"};"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"\u003c\u003c"},
@@ -1012,8 +1072,8 @@
   {"type":"LiteralStringSingle","value":"\u003e\u003e"},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringDouble","value":" "},
-  {"type":"Punctuation","value":"\u003e\u003e"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\u003e\u003e;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"\""},
@@ -1032,8 +1092,8 @@
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringSingle","value":"|"},
-  {"type":"Punctuation","value":"')"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"');"},
+  {"type":"Text","value":"\n"},
   {"type":"Keyword","value":"my"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"@array"},
@@ -1050,48 +1110,50 @@
   {"type":"LiteralStringDouble","value":"many"},
   {"type":"Punctuation","value":"\"}"},
   {"type":"LiteralStringDouble","value":" items"},
-  {"type":"Punctuation","value":"\u003e\u003e"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":"\u003e\u003e;"},
+  {"type":"Text","value":"\n\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"1"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"2"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"3"},
-  {"type":"Punctuation","value":"]"},
+  {"type":"Operator","value":"]"},
   {"type":"Text","value":" "},
   {"type":"OperatorWord","value":"(\u0026)"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"2"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"5"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"7"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"Text","value":";\n"},
+  {"type":"Operator","value":"]"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"1"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"2"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"3"},
-  {"type":"Punctuation","value":"]"},
+  {"type":"Operator","value":"]"},
   {"type":"Text","value":" "},
   {"type":"Operator","value":"∩"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"2"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"5"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"7"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"Text","value":";\n"},
+  {"type":"Operator","value":"]"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"2"},
@@ -1099,48 +1161,51 @@
   {"type":"Operator","value":"=:="},
   {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"3"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"1"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"2"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"3"},
-  {"type":"Punctuation","value":"]"},
+  {"type":"Operator","value":"]"},
   {"type":"Text","value":" "},
   {"type":"OperatorWord","value":"Z"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"4"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"5"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"6"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"Text","value":";\n"},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"]"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"1"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"2"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"3"},
-  {"type":"Punctuation","value":"]"},
+  {"type":"Operator","value":"]"},
   {"type":"Text","value":" "},
   {"type":"OperatorWord","value":"RZ"},
   {"type":"Punctuation","value":"["},
   {"type":"Operator","value":"=\u003e"},
   {"type":"Punctuation","value":"]"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
+  {"type":"Operator","value":"["},
   {"type":"LiteralNumberInteger","value":"4"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"5"},
   {"type":"Operator","value":","},
   {"type":"LiteralNumberInteger","value":"6"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Operator","value":"]"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"rx"},
   {"type":"Punctuation","value":"/:"},
   {"type":"NameAttribute","value":"i"},
@@ -1528,7 +1593,7 @@
   {"type":"Operator","value":"="},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$0"},
-  {"type":"Text","value":";"},
+  {"type":"Punctuation","value":";"},
   {"type":"LiteralStringRegex","value":" "},
   {"type":"Punctuation","value":"("},
   {"type":"NameVariable","value":"$c"},
@@ -1542,7 +1607,7 @@
   {"type":"Operator","value":"="},
   {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"0"},
-  {"type":"Text","value":";"},
+  {"type":"Punctuation","value":";"},
   {"type":"LiteralStringRegex","value":" "},
   {"type":"Punctuation","value":"("},
   {"type":"LiteralStringRegex","value":" "},
@@ -1577,7 +1642,7 @@
   {"type":"Operator","value":"="},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$/"},
-  {"type":"Text","value":";"},
+  {"type":"Punctuation","value":";"},
   {"type":"LiteralStringRegex","value":"\n        test\n        "},
   {"type":"Punctuation","value":"("},
   {"type":"LiteralStringRegex","value":"a"},
@@ -1604,7 +1669,7 @@
   {"type":"Text","value":" "},
   {"type":"Operator","value":"~"},
   {"type":"NameVariable","value":"$0"},
-  {"type":"Text","value":";"},
+  {"type":"Punctuation","value":";"},
   {"type":"LiteralStringRegex","value":"\n        "},
   {"type":"Punctuation","value":"{"},
   {"type":"Text","value":" "},
@@ -1664,17 +1729,17 @@
   {"type":"LiteralStringEscape","value":"\\w"},
   {"type":"Operator","value":"+"},
   {"type":"LiteralStringRegex","value":"\n        a "},
-  {"type":"Punctuation","value":"\u003c("},
+  {"type":"Operator","value":"\u003c("},
   {"type":"LiteralStringRegex","value":" b "},
-  {"type":"Punctuation","value":")\u003e"},
+  {"type":"Operator","value":")\u003e"},
   {"type":"LiteralStringRegex","value":" c\n        "},
-  {"type":"Punctuation","value":"\u003c("},
+  {"type":"Operator","value":"\u003c("},
   {"type":"LiteralStringRegex","value":"a "},
-  {"type":"Punctuation","value":"\u003c("},
+  {"type":"Operator","value":"\u003c("},
   {"type":"LiteralStringRegex","value":" b "},
-  {"type":"Punctuation","value":")\u003e"},
+  {"type":"Operator","value":")\u003e"},
   {"type":"LiteralStringRegex","value":" c"},
-  {"type":"Punctuation","value":")\u003e"},
+  {"type":"Operator","value":")\u003e"},
   {"type":"LiteralStringRegex","value":"\n        "},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringSingle","value":"("},
@@ -1823,14 +1888,15 @@
   {"type":"NameVariable","value":"@test"},
   {"type":"Punctuation","value":"\u003e"},
   {"type":"LiteralStringRegex","value":"\n        "},
-  {"type":"NameVariable","value":"$"},
+  {"type":"Keyword","value":"$"},
   {"type":"Punctuation","value":"("},
   {"type":"LiteralNumberInteger","value":"1"},
-  {"type":"LiteralStringRegex","value":" "},
+  {"type":"Text","value":" "},
   {"type":"Operator","value":"+"},
-  {"type":"LiteralStringRegex","value":" "},
+  {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"2"},
-  {"type":"LiteralStringRegex","value":"; "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$test"},
   {"type":"Punctuation","value":")"},
   {"type":"LiteralStringRegex","value":"\n        "},
@@ -1845,23 +1911,22 @@
   {"type":"NameFunction","value":"flip"},
   {"type":"Punctuation","value":"()\""},
   {"type":"LiteralStringRegex","value":"\n        "},
-  {"type":"NameVariable","value":"$"},
-  {"type":"Punctuation","value":"(["},
-  {"type":"Operator","value":"~"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"LiteralStringRegex","value":" "},
+  {"type":"Keyword","value":"$"},
+  {"type":"Punctuation","value":"("},
+  {"type":"Operator","value":"[~]"},
+  {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$pattern3"},
-  {"type":"NameEntity","value":"."},
-  {"type":"LiteralStringRegex","value":"comb"},
-  {"type":"NameEntity","value":"."},
-  {"type":"LiteralStringRegex","value":"reverse"},
+  {"type":"Operator","value":"."},
+  {"type":"NameBuiltin","value":"comb"},
+  {"type":"Operator","value":"."},
+  {"type":"NameBuiltin","value":"reverse"},
   {"type":"Punctuation","value":")"},
   {"type":"LiteralStringRegex","value":"\n        "},
-  {"type":"NameVariable","value":"@"},
+  {"type":"Keyword","value":"@"},
   {"type":"Punctuation","value":"("},
   {"type":"NameVariable","value":"%h"},
-  {"type":"NameEntity","value":"."},
-  {"type":"LiteralStringRegex","value":"keys"},
+  {"type":"Operator","value":"."},
+  {"type":"NameBuiltin","value":"keys"},
   {"type":"Punctuation","value":")"},
   {"type":"LiteralStringRegex","value":"\n        "},
   {"type":"LiteralStringEscape","value":"\\d"},
@@ -1897,8 +1962,8 @@
   {"type":"Punctuation","value":"}\u003e"},
   {"type":"LiteralStringRegex","value":"\n        "},
   {"type":"NameEntity","value":"$"},
-  {"type":"Punctuation","value":"/"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":"/;"},
+  {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"constant"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"\\something"},
@@ -1912,8 +1977,8 @@
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringSingle","value":"something"},
-  {"type":"Punctuation","value":"'"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":"';"},
+  {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"my"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"%hash"},
@@ -1938,9 +2003,9 @@
   {"type":"Punctuation","value":"'"},
   {"type":"Text","value":",\n    "},
   {"type":"Punctuation","value":":"},
-  {"type":"LiteralString","value":"23year"},
-  {"type":"Operator","value":","},
-  {"type":"Text","value":"\n    "},
+  {"type":"LiteralNumberInteger","value":"23"},
+  {"type":"LiteralString","value":"year"},
+  {"type":"Text","value":",\n    "},
   {"type":"LiteralString","value":"m"},
   {"type":"Text","value":" "},
   {"type":"Operator","value":"=\u003e"},
@@ -1963,8 +2028,8 @@
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$test"},
   {"type":"Text","value":",\n"},
-  {"type":"Punctuation","value":")"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":");"},
+  {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"my"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"%hash2"},
@@ -2029,8 +2094,8 @@
   {"type":"LiteralNumberInteger","value":"3"},
   {"type":"Punctuation","value":"]"},
   {"type":"Text","value":"\n"},
-  {"type":"Punctuation","value":")"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":");"},
+  {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"=for"},
   {"type":"LiteralStringDoc","value":" "},
   {"type":"Keyword","value":"comment"},
@@ -2044,8 +2109,8 @@
   {"type":"Keyword","value":"Q"},
   {"type":"Punctuation","value":"["},
   {"type":"LiteralString","value":"｢some $text｣"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"];"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"qq"},
@@ -2053,8 +2118,8 @@
   {"type":"LiteralStringDouble","value":"some "},
   {"type":"NameVariable","value":"$regex"},
   {"type":"LiteralStringDouble","value":" text"},
-  {"type":"Punctuation","value":"｣｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"｣｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"q"},
@@ -2067,8 +2132,8 @@
   {"type":"LiteralStringSingle","value":"some text"},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringDouble","value":" text"},
-  {"type":"Punctuation","value":"｣｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"｣｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"q"},
@@ -2081,16 +2146,16 @@
   {"type":"LiteralStringSingle","value":"some text"},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringDouble","value":" text"},
-  {"type":"Punctuation","value":"｣｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"｣｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"q"},
   {"type":"LiteralStringAffix","value":":w"},
   {"type":"Punctuation","value":"｢｢"},
   {"type":"LiteralString","value":"some $variable 'some text' text"},
-  {"type":"Punctuation","value":"｣｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"｣｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"qq"},
@@ -2099,8 +2164,8 @@
   {"type":"LiteralStringDouble","value":"some "},
   {"type":"NameVariable","value":"$regex"},
   {"type":"LiteralStringDouble","value":" 'some text' text"},
-  {"type":"Punctuation","value":"｣｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"｣｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"Q"},
@@ -2117,8 +2182,8 @@
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"LiteralString","value":" text"},
-  {"type":"Punctuation","value":"｣｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"｣｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"q"},
@@ -2126,9 +2191,12 @@
   {"type":"Punctuation","value":"｢｢"},
   {"type":"LiteralString","value":"some "},
   {"type":"NameVariable","value":"@array"},
+  {"type":"Operator","value":"["},
+  {"type":"LiteralNumberInteger","value":"2"},
+  {"type":"Operator","value":"]"},
   {"type":"LiteralString","value":" 'some text' { 2 + 1 } text"},
-  {"type":"Punctuation","value":"｣｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"｣｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"Q"},
@@ -2147,8 +2215,8 @@
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"LiteralStringDouble","value":" text"},
-  {"type":"Punctuation","value":"｣｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"｣｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"Keyword","value":"Q"},
   {"type":"Punctuation","value":"["},
   {"type":"LiteralString","value":"some "},
@@ -2187,8 +2255,8 @@
   {"type":"NameVariable","value":"%h"},
   {"type":"Punctuation","value":"\u003c"},
   {"type":"LiteralString","value":"one"},
-  {"type":"Punctuation","value":"\u003e｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\u003e｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"Q"},
@@ -2204,8 +2272,8 @@
   {"type":"LiteralString","value":"one"},
   {"type":"Punctuation","value":"\u003e\u003c"},
   {"type":"LiteralString","value":"two"},
-  {"type":"Punctuation","value":"\u003e｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\u003e｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"Q"},
@@ -2219,8 +2287,8 @@
   {"type":"NameVariable","value":"%h"},
   {"type":"Punctuation","value":"\u003c\u003c"},
   {"type":"LiteralStringDouble","value":"one"},
-  {"type":"Punctuation","value":"\u003e\u003e｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\u003e\u003e｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"Q"},
@@ -2232,17 +2300,18 @@
   {"type":"Punctuation","value":"'}"},
   {"type":"LiteralStringDouble","value":" "},
   {"type":"NameVariable","value":"%h"},
-  {"type":"LiteralStringDouble","value":"«one»"},
-  {"type":"Punctuation","value":"｣"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"«"},
+  {"type":"LiteralStringDouble","value":"one"},
+  {"type":"Punctuation","value":"»｣;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"Q"},
   {"type":"LiteralStringAffix","value":":b"},
   {"type":"Punctuation","value":"["},
   {"type":"LiteralString","value":"Testing"},
-  {"type":"Punctuation","value":"]"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"];"},
+  {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringSingle","value":"some "},
   {"type":"LiteralStringEscape","value":"\\qq"},
@@ -2252,12 +2321,12 @@
   {"type":"NameFunction","value":"method"},
   {"type":"Punctuation","value":"()]"},
   {"type":"LiteralStringSingle","value":" testing"},
-  {"type":"Punctuation","value":"'"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"';"},
+  {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringSingle","value":"somes\\' testing"},
-  {"type":"Punctuation","value":"'"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"';"},
+  {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"\""},
   {"type":"LiteralStringDouble","value":"some "},
   {"type":"LiteralStringEscape","value":"\\qq"},
@@ -2267,8 +2336,8 @@
   {"type":"NameFunction","value":"method"},
   {"type":"Punctuation","value":"()]"},
   {"type":"LiteralStringDouble","value":" testing"},
-  {"type":"Punctuation","value":"\""},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\";"},
+  {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"\""},
   {"type":"LiteralStringDouble","value":"some "},
   {"type":"NameVariable","value":"$variable"},
@@ -2276,8 +2345,8 @@
   {"type":"NameFunction","value":"method"},
   {"type":"Punctuation","value":"()"},
   {"type":"LiteralStringDouble","value":" testing"},
-  {"type":"Punctuation","value":"\""},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\";"},
+  {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"\""},
   {"type":"LiteralStringDouble","value":"some "},
   {"type":"NameVariable","value":"$variable"},
@@ -2290,8 +2359,8 @@
   {"type":"NameFunction","value":"method"},
   {"type":"Punctuation","value":"()"},
   {"type":"LiteralStringDouble","value":" testing"},
-  {"type":"Punctuation","value":"\""},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\";"},
+  {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"\""},
   {"type":"LiteralStringDouble","value":"some "},
   {"type":"NameVariable","value":"$variable"},
@@ -2304,15 +2373,15 @@
   {"type":"NameFunction","value":"method"},
   {"type":"Punctuation","value":"()"},
   {"type":"LiteralStringDouble","value":" testing"},
-  {"type":"Punctuation","value":"\""},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\";"},
+  {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"\""},
   {"type":"LiteralStringDouble","value":"some "},
   {"type":"NameFunction","value":"func"},
   {"type":"Punctuation","value":"()"},
   {"type":"LiteralStringDouble","value":" testing"},
-  {"type":"Punctuation","value":"\""},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\";"},
+  {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"\""},
   {"type":"LiteralStringDouble","value":"some "},
   {"type":"NameFunction","value":"func"},
@@ -2322,8 +2391,8 @@
   {"type":"LiteralString","value":"adverb"},
   {"type":"Punctuation","value":"\u003e()"},
   {"type":"LiteralStringDouble","value":" testing"},
-  {"type":"Punctuation","value":"\""},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"\";"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"\""},
@@ -2369,8 +2438,8 @@
   {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"2"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"}\""},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":"}\";"},
+  {"type":"Text","value":"\n\n"},
   {"type":"CommentMultiline","value":"#`[[\nmultiline comment]\n]]"},
   {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"my"},
@@ -2397,8 +2466,8 @@
   {"type":"LiteralStringRegex","value":" "},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringSingle","value":"something"},
-  {"type":"Punctuation","value":"'/"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":"'/;"},
+  {"type":"Text","value":"\n\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"S"},
@@ -2411,7 +2480,8 @@
   {"type":"Keyword","value":"given"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"s"},
@@ -2419,8 +2489,8 @@
   {"type":"LiteralStringRegex","value":"some"},
   {"type":"Punctuation","value":"/"},
   {"type":"LiteralStringDouble","value":"a"},
-  {"type":"Punctuation","value":"/"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"/;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"S"},
@@ -2433,7 +2503,8 @@
   {"type":"Keyword","value":"given"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
@@ -2455,8 +2526,8 @@
   {"type":"Punctuation","value":"\u003e/"},
   {"type":"LiteralStringDouble","value":"a "},
   {"type":"NameVariable","value":"$0"},
-  {"type":"Punctuation","value":"/"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"/;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
@@ -2472,8 +2543,8 @@
   {"type":"LiteralStringRegex","value":"some"},
   {"type":"Punctuation","value":")/"},
   {"type":"NameVariable","value":"$0"},
-  {"type":"Punctuation","value":"/"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"/;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
@@ -2485,8 +2556,8 @@
   {"type":"LiteralStringRegex","value":"some"},
   {"type":"Punctuation","value":"%"},
   {"type":"LiteralStringDouble","value":"a"},
-  {"type":"Punctuation","value":"%"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"%;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
@@ -2503,8 +2574,8 @@
   {"type":"Punctuation","value":"%"},
   {"type":"LiteralStringDouble","value":"a"},
   {"type":"NameVariable","value":"$0"},
-  {"type":"Punctuation","value":"%"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"%;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
@@ -2518,8 +2589,8 @@
   {"type":"LiteralStringRegex","value":"some"},
   {"type":"Punctuation","value":"/"},
   {"type":"LiteralStringDouble","value":"a"},
-  {"type":"Punctuation","value":"/"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"/;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
@@ -2537,8 +2608,8 @@
   {"type":"Operator","value":"+"},
   {"type":"Punctuation","value":"]"},
   {"type":"NameEntity","value":"$"},
-  {"type":"Punctuation","value":"/"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"/;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
@@ -2556,8 +2627,8 @@
   {"type":"LiteralNumberInteger","value":"5"},
   {"type":"Punctuation","value":"}\u003e"},
   {"type":"NameEntity","value":"$"},
-  {"type":"Punctuation","value":"/"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"/;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
@@ -2569,8 +2640,8 @@
   {"type":"NameEntity","value":"^"},
   {"type":"LiteralStringRegex","value":"text"},
   {"type":"NameEntity","value":"$"},
-  {"type":"Punctuation","value":"%"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"%;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
@@ -2581,8 +2652,8 @@
   {"type":"NameEntity","value":"^"},
   {"type":"LiteralStringRegex","value":"text"},
   {"type":"NameEntity","value":"$"},
-  {"type":"Punctuation","value":"/"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"/;"},
+  {"type":"Text","value":"\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$text"},
@@ -2594,8 +2665,8 @@
   {"type":"LiteralStringRegex","value":"abcde"},
   {"type":"Punctuation","value":"/"},
   {"type":"LiteralStringDouble","value":"12345"},
-  {"type":"Punctuation","value":"/"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":"/;"},
+  {"type":"Text","value":"\n"},
   {"type":"Keyword","value":"s"},
   {"type":"Punctuation","value":"{"},
   {"type":"LiteralStringEscape","value":"\\w"},
@@ -2606,15 +2677,16 @@
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringSingle","value":"test"},
-  {"type":"Punctuation","value":"'"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":"';"},
+  {"type":"Text","value":"\n\n"},
   {"type":"NameBuiltin","value":"say"},
   {"type":"Text","value":" "},
   {"type":"LiteralNumberInteger","value":"1"},
   {"type":"Operator","value":"+"},
   {"type":"LiteralNumberInteger","value":"1"},
   {"type":"NameConstant","value":"i"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"CATCH"},
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"{"},
@@ -2710,8 +2782,7 @@
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringSingle","value":"something"},
-  {"type":"Punctuation","value":"'"},
-  {"type":"Text","value":";"},
+  {"type":"Punctuation","value":"';"},
   {"type":"LiteralStringRegex","value":"\n        "},
   {"type":"Punctuation","value":"'"},
   {"type":"LiteralStringSingle","value":"sub"},
@@ -2734,13 +2805,15 @@
   {"type":"NameVariable","value":"$\u003cidentifier\u003e"},
   {"type":"Operator","value":"."},
   {"type":"Keyword","value":"made"},
-  {"type":"Text","value":";\n            "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n            "},
   {"type":"Keyword","value":"make"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$\u003cidentifier\u003e"},
   {"type":"Operator","value":"."},
   {"type":"Keyword","value":"made"},
-  {"type":"Text","value":";\n        "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n        "},
   {"type":"Punctuation","value":"}"},
   {"type":"LiteralStringRegex","value":"\n        "},
   {"type":"Punctuation","value":"'"},
@@ -2776,7 +2849,8 @@
   {"type":"NameVariable","value":"$/"},
   {"type":"Operator","value":"."},
   {"type":"Keyword","value":"made"},
-  {"type":"Text","value":"; "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"LiteralStringRegex","value":"\n    "},
   {"type":"Punctuation","value":"}"},
@@ -2796,7 +2870,8 @@
   {"type":"Text","value":" "},
   {"type":"Operator","value":"~"},
   {"type":"NameVariable","value":"$/"},
-  {"type":"Text","value":"; "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"LiteralStringRegex","value":" "},
   {"type":"Punctuation","value":"}"},
@@ -2821,7 +2896,8 @@
   {"type":"Operator","value":"~"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$/"},
-  {"type":"Text","value":"; "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"LiteralStringRegex","value":" "},
   {"type":"Punctuation","value":"}"},
@@ -2846,7 +2922,8 @@
   {"type":"Operator","value":"~"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$/"},
-  {"type":"Text","value":"; "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"LiteralStringRegex","value":" "},
   {"type":"Punctuation","value":"}"},
@@ -2856,7 +2933,8 @@
   {"type":"Keyword","value":"use"},
   {"type":"Text","value":" "},
   {"type":"NameNamespace","value":"Some::Module"},
-  {"type":"Text","value":";\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n"},
   {"type":"Keyword","value":"use"},
   {"type":"Text","value":" "},
   {"type":"NameNamespace","value":"Some::Module"},
@@ -2870,16 +2948,16 @@
   {"type":"Keyword","value":"v"},
   {"type":"LiteralNumberInteger","value":"1"},
   {"type":"NameEntity","value":".0.0"},
-  {"type":"Punctuation","value":")"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":");"},
+  {"type":"Text","value":"\n\n"},
   {"type":"NameFunction","value":"notes"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$trip:"},
   {"type":"Text","value":" "},
   {"type":"Punctuation","value":"\""},
   {"type":"LiteralStringDouble","value":"Almost there"},
-  {"type":"Punctuation","value":"\""},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":"\";"},
+  {"type":"Text","value":"\n\n"},
   {"type":"NameLabel","value":"LABEL"},
   {"type":"Operator","value":":"},
   {"type":"Text","value":"\n"},
@@ -3054,7 +3132,8 @@
   {"type":"NameVariable","value":"$\u003ccalc-op\u003e"},
   {"type":"Operator","value":"."},
   {"type":"Keyword","value":"made"},
-  {"type":"Text","value":"; "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"Text","value":"\n    "},
   {"type":"Keyword","value":"method"},
@@ -3074,12 +3153,11 @@
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"make"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
-  {"type":"Operator","value":"+"},
-  {"type":"Punctuation","value":"]"},
+  {"type":"Operator","value":"[+]"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$\u003cnum\u003e"},
-  {"type":"Text","value":"; "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"Text","value":"\n    "},
   {"type":"Keyword","value":"method"},
@@ -3099,12 +3177,11 @@
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"make"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
-  {"type":"Operator","value":"-"},
-  {"type":"Punctuation","value":"]"},
+  {"type":"Operator","value":"[-]"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$\u003cnum\u003e"},
-  {"type":"Text","value":"; "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"Text","value":"\n    "},
   {"type":"Keyword","value":"method"},
@@ -3122,12 +3199,11 @@
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"make"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
-  {"type":"Operator","value":"-"},
-  {"type":"Punctuation","value":"]"},
+  {"type":"Operator","value":"[-]"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$\u003cnum\u003e"},
-  {"type":"Text","value":"; "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"Text","value":"\n    "},
   {"type":"Keyword","value":"method"},
@@ -3141,12 +3217,11 @@
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"make"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
-  {"type":"Operator","value":"-"},
-  {"type":"Punctuation","value":"]"},
+  {"type":"Operator","value":"[-]"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$\u003cnum\u003e"},
-  {"type":"Text","value":"; "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"Text","value":"\n    "},
   {"type":"Keyword","value":"method"},
@@ -3160,12 +3235,11 @@
   {"type":"Text","value":" "},
   {"type":"Keyword","value":"make"},
   {"type":"Text","value":" "},
-  {"type":"Punctuation","value":"["},
-  {"type":"Operator","value":"-"},
-  {"type":"Punctuation","value":"]"},
+  {"type":"Operator","value":"[-]"},
   {"type":"Text","value":" "},
   {"type":"NameVariable","value":"$\u003cnum\u003e"},
-  {"type":"Text","value":"; "},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":" "},
   {"type":"Punctuation","value":"}"},
   {"type":"Text","value":"\n"},
   {"type":"Punctuation","value":"}"},
@@ -3188,7 +3262,8 @@
   {"type":"Punctuation","value":")"},
   {"type":"Operator","value":"."},
   {"type":"Keyword","value":"made"},
-  {"type":"Text","value":";\n\n"},
+  {"type":"Punctuation","value":";"},
+  {"type":"Text","value":"\n\n"},
   {"type":"Keyword","value":"=finish"},
   {"type":"LiteralStringDoc","value":"\n"},
   {"type":"Keyword","value":"C"},