From fc2aec5dcdc9fea56875367056f758f3c5202021 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 01:08:27 +0300 Subject: [PATCH 01/12] add structure for container and shape --- grammar.js | 115 +++++-- src/grammar.json | 749 ++++++++++++++++++++++++-------------------- src/node-types.json | 102 +++--- src/parser.c | Bin 199538 -> 83068 bytes tree-sitter-d2.wasm | Bin 33162 -> 15865 bytes 5 files changed, 559 insertions(+), 407 deletions(-) diff --git a/grammar.js b/grammar.js index 7e6bf9d..5a822ba 100644 --- a/grammar.js +++ b/grammar.js @@ -1,24 +1,103 @@ -const spaces = repeat(choice(" ", "\t")); +const PREC = { + COMMENT: -2, + IDENTIFIER: 11, + SHAPE: 10, + CONTAINER: 9, +}; + +spaces = /[ \t]/; module.exports = grammar({ name: "d2", - extras: ($) => [$.line_comment], + extras: ($) => [ + /[ \f\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]/, + $.line_comment, + ], word: ($) => $._word, conflicts: ($) => [ - [$.shape_key], + //[$.shape_key], + /* [$._shape_path], [$._shape_block], [$._shape_block_definition], [$._style_attr_block], [$._inner_style_attribute], [$._emptyline], +*/ ], rules: { - source_file: ($) => repeat($._root_definition), + source_file: ($) => repeat($._new_root_definition), + + _new_root_definition: ($) => choice($._eol, $.shape, $.container), + + container: ($) => + prec( + PREC.CONTAINER, + seq( + alias($.shape_key, $.container_key), + choice( + seq($._dot, $.shape), + seq( + seq( + optional(seq($._colon, optional($.label))), + optional(seq(alias($._new_container_block, $.block))) + ) + ) + ) + ) + ), + + shape: ($) => + prec( + PREC.SHAPE, + seq( + $.shape_key, + optional( + seq( + optional(seq($._colon, optional($.label))), + optional(seq(alias($._new_shape_block, $.block))) + ) + ), + $._end + ) + ), + + shape_key: ($) => + choice( + $.string, + prec.left( + seq( + optional($._dash), + choice( + $._word, + token(prec(PREC.IDENTIFIER, /([\w\d]+( +|\-)[\w\d]+)+/)) + ), + optional($._dash) + ) + ) + ), + + _new_shape_block: ($) => + prec(PREC.SHAPE, seq("{", repeat($._new_shape_block_definition), "}")), + + _new_shape_block_definition: ($) => prec(PREC.SHAPE, choice($._eol)), + + _new_container_block: ($) => + prec( + PREC.CONTAINER, + seq("{", repeat($._new_container_block_definition), "}") + ), + + _new_container_block_definition: ($) => + prec(PREC.CONTAINER, choice($._eol, $.shape, $.container)), + + // -------------------------------------------- + + // source_file: ($) => repeat($._root_definition), _root_definition: ($) => choice( @@ -60,19 +139,6 @@ module.exports = grammar({ $.shape_key ), - shape_key: ($) => - choice( - $.string, - seq( - optional($._dash), - choice( - $._word, - repeat1(seq($._word, choice(repeat1(" "), $._dash), $._word)) - ), - optional($._dash) - ) - ), - _dash: ($) => token.immediate("-"), label: ($) => choice($.string, $._unquoted_string), @@ -169,15 +235,16 @@ module.exports = grammar({ _connection_attr_key: ($) => choice("source-arrowhead", "target-arrowhead"), - _colon: ($) => seq(spaces, ":"), + _colon: ($) => seq(":"), _arrow: ($) => seq(spaces, $.arrow), arrow: ($) => choice(/-+>/, /--+/, /<-+/, /<-+>/), - dot: ($) => token.immediate("."), + _dot: ($) => seq($.dot), + dot: ($) => token("."), - _unquoted_string: ($) => token.immediate(/[^'"`\n;{}]+/), + _unquoted_string: ($) => token(prec(5, /[\w\-]([^'"`\n;{}]*[\w\-])?/)), string: ($) => choice( @@ -186,12 +253,12 @@ module.exports = grammar({ seq("`", repeat(token.immediate(/[^`\n]+/)), "`") ), - line_comment: ($) => token(prec(-2, seq("#", /.*/))), + line_comment: ($) => token(prec(PREC.COMMENT, seq("#", /.*/))), _word: ($) => /[\w\d]+/, - _emptyline: ($) => seq(spaces, $._eof), - _eof: ($) => choice("\n", "\0"), - _end: ($) => seq(spaces, choice(";", $._eof)), + _emptyline: ($) => prec(-1, seq(spaces, $._eol)), + _eol: ($) => choice("\n", "\0"), + _end: ($) => seq(choice(";", $._eol)), }, }); diff --git a/src/grammar.json b/src/grammar.json index 537f9ee..d6bdea1 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -6,7 +6,346 @@ "type": "REPEAT", "content": { "type": "SYMBOL", - "name": "_root_definition" + "name": "_new_root_definition" + } + }, + "_new_root_definition": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_eol" + }, + { + "type": "SYMBOL", + "name": "shape" + }, + { + "type": "SYMBOL", + "name": "container" + } + ] + }, + "container": { + "type": "PREC", + "value": 9, + "content": { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "shape_key" + }, + "named": true, + "value": "container_key" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_dot" + }, + { + "type": "SYMBOL", + "name": "shape" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "label" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_new_container_block" + }, + "named": true, + "value": "block" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + ] + } + ] + } + }, + "shape": { + "type": "PREC", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "shape_key" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "label" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_new_shape_block" + }, + "named": true, + "value": "block" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "SYMBOL", + "name": "_end" + } + ] + } + }, + "shape_key": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "string" + }, + { + "type": "PREC_LEFT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_dash" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_word" + }, + { + "type": "TOKEN", + "content": { + "type": "PREC", + "value": 11, + "content": { + "type": "PATTERN", + "value": "([\\w\\d]+( +|\\-)[\\w\\d]+)+" + } + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_dash" + }, + { + "type": "BLANK" + } + ] + } + ] + } + } + ] + }, + "_new_shape_block": { + "type": "PREC", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "_new_shape_block_definition" + } + }, + { + "type": "STRING", + "value": "}" + } + ] + } + }, + "_new_shape_block_definition": { + "type": "PREC", + "value": 10, + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_eol" + } + ] + } + }, + "_new_container_block": { + "type": "PREC", + "value": 9, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "_new_container_block_definition" + } + }, + { + "type": "STRING", + "value": "}" + } + ] + } + }, + "_new_container_block_definition": { + "type": "PREC", + "value": 9, + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_eol" + }, + { + "type": "SYMBOL", + "name": "shape" + }, + { + "type": "SYMBOL", + "name": "container" + } + ] } }, "_root_definition": { @@ -144,20 +483,8 @@ "type": "SEQ", "members": [ { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "SYMBOL", @@ -213,20 +540,8 @@ "type": "SEQ", "members": [ { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "REPEAT", @@ -243,40 +558,16 @@ "value": "container_key" }, { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "SYMBOL", "name": "dot" }, { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" } ] } @@ -287,85 +578,6 @@ } ] }, - "shape_key": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "string" - }, - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_dash" - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_word" - }, - { - "type": "REPEAT1", - "content": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_word" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "STRING", - "value": " " - } - }, - { - "type": "SYMBOL", - "name": "_dash" - } - ] - }, - { - "type": "SYMBOL", - "name": "_word" - } - ] - } - } - ] - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_dash" - }, - { - "type": "BLANK" - } - ] - } - ] - } - ] - }, "_dash": { "type": "IMMEDIATE_TOKEN", "content": { @@ -390,20 +602,8 @@ "type": "SEQ", "members": [ { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "CHOICE", @@ -477,20 +677,8 @@ "type": "SEQ", "members": [ { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "STRING", @@ -509,20 +697,8 @@ "type": "SEQ", "members": [ { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "SYMBOL", @@ -563,20 +739,8 @@ ] }, { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "STRING", @@ -686,40 +850,16 @@ "type": "SEQ", "members": [ { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "STRING", "value": "{" }, { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "REPEAT", @@ -776,20 +916,8 @@ ] }, { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "STRING", @@ -801,20 +929,8 @@ "type": "SEQ", "members": [ { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "ALIAS", @@ -959,22 +1075,6 @@ "_colon": { "type": "SEQ", "members": [ - { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } - }, { "type": "STRING", "value": ":" @@ -985,20 +1085,8 @@ "type": "SEQ", "members": [ { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } + "type": "PATTERN", + "value": "[ \\t]" }, { "type": "SYMBOL", @@ -1027,18 +1115,31 @@ } ] }, + "_dot": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "dot" + } + ] + }, "dot": { - "type": "IMMEDIATE_TOKEN", + "type": "TOKEN", "content": { "type": "STRING", "value": "." } }, "_unquoted_string": { - "type": "IMMEDIATE_TOKEN", + "type": "TOKEN", "content": { - "type": "PATTERN", - "value": "[^'\"`\\n;{}]+" + "type": "PREC", + "value": 5, + "content": { + "type": "PATTERN", + "value": "[\\w\\-]([^'\"`\\n;{}]*[\\w\\-])?" + } } }, "string": { @@ -1140,31 +1241,23 @@ "value": "[\\w\\d]+" }, "_emptyline": { - "type": "SEQ", - "members": [ - { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] + "type": "PREC", + "value": -1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "[ \\t]" + }, + { + "type": "SYMBOL", + "name": "_eol" } - }, - { - "type": "SYMBOL", - "name": "_eof" - } - ] + ] + } }, - "_eof": { + "_eol": { "type": "CHOICE", "members": [ { @@ -1180,22 +1273,6 @@ "_end": { "type": "SEQ", "members": [ - { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": " " - }, - { - "type": "STRING", - "value": "\t" - } - ] - } - }, { "type": "CHOICE", "members": [ @@ -1205,7 +1282,7 @@ }, { "type": "SYMBOL", - "name": "_eof" + "name": "_eol" } ] } @@ -1213,34 +1290,16 @@ } }, "extras": [ + { + "type": "PATTERN", + "value": "[ \\f\\t\\v\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]" + }, { "type": "SYMBOL", "name": "line_comment" } ], - "conflicts": [ - [ - "shape_key" - ], - [ - "_shape_path" - ], - [ - "_shape_block" - ], - [ - "_shape_block_definition" - ], - [ - "_style_attr_block" - ], - [ - "_inner_style_attribute" - ], - [ - "_emptyline" - ] - ], + "conflicts": [], "precedences": [], "externals": [], "inline": [], diff --git a/src/node-types.json b/src/node-types.json index 2efdd90..08d15be 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -48,6 +48,10 @@ "type": "connection", "named": true }, + { + "type": "container", + "named": true + }, { "type": "container_key", "named": true @@ -60,6 +64,10 @@ "type": "label", "named": true }, + { + "type": "shape", + "named": true + }, { "type": "shape_key", "named": true @@ -106,6 +114,37 @@ ] } }, + { + "type": "container", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "block", + "named": true + }, + { + "type": "container_key", + "named": true + }, + { + "type": "dot", + "named": true + }, + { + "type": "label", + "named": true + }, + { + "type": "shape", + "named": true + } + ] + } + }, { "type": "container_key", "named": true, @@ -163,6 +202,29 @@ ] } }, + { + "type": "shape", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "block", + "named": true + }, + { + "type": "label", + "named": true + }, + { + "type": "shape_key", + "named": true + } + ] + } + }, { "type": "shape_key", "named": true, @@ -187,39 +249,11 @@ "required": false, "types": [ { - "type": "attr_key", + "type": "container", "named": true }, { - "type": "attr_value", - "named": true - }, - { - "type": "block", - "named": true - }, - { - "type": "connection", - "named": true - }, - { - "type": "container_key", - "named": true - }, - { - "type": "dot", - "named": true - }, - { - "type": "invalid", - "named": true - }, - { - "type": "label", - "named": true - }, - { - "type": "shape_key", + "type": "shape", "named": true } ] @@ -234,18 +268,10 @@ "type": "\u0000", "named": false }, - { - "type": "\t", - "named": false - }, { "type": "\n", "named": false }, - { - "type": " ", - "named": false - }, { "type": "\"", "named": false diff --git a/src/parser.c b/src/parser.c index 00ca67858728554f4dfe2b6c1714f0df4c76f7f5..a0e3f0fd526b48cab3ddc81c2cc8e33b6aa4c1ff 100644 GIT binary patch literal 83068 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 diff --git a/tree-sitter-d2.wasm b/tree-sitter-d2.wasm index c9f5b7dd472e7e9d92497c1aa63b51ee17035672..e91ec96cf1556c296e00df4dc8fe108101eee203 100755 GIT binary patch literal 15865 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 z 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 literal 33162 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șBQ zZ8xKv_6d3NwQl3_#A)hf;&*see5rokc-+?q4{O~J;cwH*_LC{v(aaN8H~W^q%8SLs zgEu?M&+=^X=oc#8@(gt4^N`YQ{Gs96@^)EHD!wBCe<1+(-j^7D>;nV=(9cg`5xWfUp!3pz*8FA?sGl%vs^lt?V4;q$(4_{ zSswjzm(C;J@>Z&RnNqUAqhF(R9Ul*=>(Ru^xmw>s(h4=P`(N-R^$QQV_miCWbMuDv zx@pScy5Ec*_V|a~`3&De(a*$%H((y!Tb|OLacS1WSKV=k3tc=s%@aquN6&EU3{Uy! z=ftJgKV2`pb(8rv4pUylQ*MgxE{Ai^{YKQ2pVr3{$CDnt%pHebXYt0_W4GCDXV*Qi z-A0!mPj{Ek!)~47`6>OJc52|#dDLysLvEen8L``cj7#U?<6Ju4zPfZC@$#MR%4e+9 zqt|%!?H+x#N3ZA6mw5D-Jo=p;eVIpB>#);ao^>Lm?jxM*Qt1rOrCrx0@9*N}Aw3=? z3RA7)O|siBG)h`H{7T0gVwWA>b}N3(hd0|wx8wgrPd>`Q&t~Jfxm$nTqoX|hoOXD{ zrSp*Dx7U}}@l}E+PVe~Lt$1Wg3EB-mQx4||k3PVq+kK#|$SzO*Z61A~OE>L$G2UrZ zPbw{|sGY$|YRk{BEh(+7ttpvMK7*B2SJjqQRN)`;CT+_2(n;m=tfaK2rg}O7V{sT; zT}zfzYHMIy%kYntmzR`PPn=i|Wqf(Xx#MfuIn^~|%WDd1O2<}Aox;X}wxF!Kvbu)B zu(G;}mDE&M*OuU)y{xFJpnr9om8inb!9NT>!3R&WM9Ee72g}K+0_SX8MP((cEIp?j zDgN1XCMg(#tDaC^Fuh`I?RY~zsg%ygmQEROvgLWn)T+r-t82^0mcXe3|NKZvdG$CZ z+hkg4<%@FCDA> zlYky$*%;hB_G8kfq!ukw)sv`EOZ+43lgdkLdnD)eFnQ7vni&AvxVy<$zTK03ZJzXn z=JD-jdco;R&DxCylkQRrB{f@#8WgHbOXCYt4_gXXJ-a2ht~E(&7Z|8^k@0uKJIIzS z7f<{%Dl!xD*0(|4tnX#21 z*$mmQ$>_4Sm$tM_O-A-`u$M6nZiNg4e-We+&O2agY6fWnq4TA{_ThLI9~O1dbHzaX23e`3dLuL8@_nxz=alcshjY zW@HJ@iy^}y-I2Ef(iid)Bpc=3gYp(Z_CYRz420~4Y=q#YDjSVs6G#vEzYd@O1Nagu Al>h($ -- 2.44.0 From f7e1a9d5973f3c7994319f57a16747d7ab4844e3 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 09:00:07 +0300 Subject: [PATCH 02/12] refac connections --- grammar.js | 66 ++-- src/grammar.json | 350 +++++++++++---------- src/node-types.json | 25 +- src/parser.c | Bin 83068 -> 101295 bytes test/corpus/container.txt | 104 ++++-- test/corpus/shape.txt | 70 ++--- test/{corpus => old_corpus}/attributes.txt | 0 test/old_corpus/connection.txt | 198 ++++++++++++ test/old_corpus/container.txt | 97 ++++++ test/old_corpus/shape.txt | 134 ++++++++ tree-sitter-d2.wasm | Bin 15865 -> 22751 bytes 11 files changed, 774 insertions(+), 270 deletions(-) rename test/{corpus => old_corpus}/attributes.txt (100%) create mode 100644 test/old_corpus/connection.txt create mode 100644 test/old_corpus/container.txt create mode 100644 test/old_corpus/shape.txt diff --git a/grammar.js b/grammar.js index 5a822ba..9b8fae1 100644 --- a/grammar.js +++ b/grammar.js @@ -1,8 +1,10 @@ const PREC = { COMMENT: -2, - IDENTIFIER: 11, - SHAPE: 10, CONTAINER: 9, + CONNECTION: 9, + SHAPE: 11, + IDENTIFIER: 12, + ARROW: 13, }; spaces = /[ \t]/; @@ -18,6 +20,7 @@ module.exports = grammar({ word: ($) => $._word, conflicts: ($) => [ + [$._connection_path, $.container], //[$.shape_key], /* [$._shape_path], @@ -32,7 +35,26 @@ module.exports = grammar({ rules: { source_file: ($) => repeat($._new_root_definition), - _new_root_definition: ($) => choice($._eol, $.shape, $.container), + _new_root_definition: ($) => + choice($._eol, seq(choice($.shape, $.container, $.connection), $._end)), + + connection: ($) => + seq( + $._connection_path, + repeat1(seq($._arrow, $._connection_path)), + optional(seq($._colon, $.label)) + ), + + _connection_path: ($) => + seq( + repeat( + prec( + PREC.CONNECTION, + seq(alias($.shape_key, $.container_key), $._dot) + ) + ), + $.shape_key + ), container: ($) => prec( @@ -40,7 +62,7 @@ module.exports = grammar({ seq( alias($.shape_key, $.container_key), choice( - seq($._dot, $.shape), + seq($._dot, choice($.shape, $.container)), seq( seq( optional(seq($._colon, optional($.label))), @@ -61,23 +83,16 @@ module.exports = grammar({ optional(seq($._colon, optional($.label))), optional(seq(alias($._new_shape_block, $.block))) ) - ), - $._end + ) ) ), shape_key: ($) => choice( $.string, - prec.left( - seq( - optional($._dash), - choice( - $._word, - token(prec(PREC.IDENTIFIER, /([\w\d]+( +|\-)[\w\d]+)+/)) - ), - optional($._dash) - ) + seq( + token(prec(PREC.IDENTIFIER, /\-?([\w\d]+|([\w\d]+( +|\-)[\w\d]+)+)/)), + optional($._dash) ) ), @@ -93,7 +108,10 @@ module.exports = grammar({ ), _new_container_block_definition: ($) => - prec(PREC.CONTAINER, choice($._eol, $.shape, $.container)), + prec( + PREC.CONTAINER, + choice($._eol, seq(choice($.shape, $.container), $._end)) + ), // -------------------------------------------- @@ -107,16 +125,6 @@ module.exports = grammar({ $._shape_definition ), - connection: ($) => - seq( - $._shape_path, - repeat1(seq($._arrow, $._shape_path)), - optional( - choice(seq($.dot, $._connection_attribute), seq($._colon, $.label)) - ), - $._end - ), - _shape_definition: ($) => seq( $._shape_path, @@ -237,14 +245,14 @@ module.exports = grammar({ _colon: ($) => seq(":"), - _arrow: ($) => seq(spaces, $.arrow), + _arrow: ($) => seq($.arrow), - arrow: ($) => choice(/-+>/, /--+/, /<-+/, /<-+>/), + arrow: ($) => token(prec(PREC.ARROW, choice(/-+>/, /--+/, /<-+/, /<-+>/))), _dot: ($) => seq($.dot), dot: ($) => token("."), - _unquoted_string: ($) => token(prec(5, /[\w\-]([^'"`\n;{}]*[\w\-])?/)), + _unquoted_string: ($) => token(prec(5, /[\w\-?!]([^'"`\n;{}]*[\w\-?!])?/)), string: ($) => choice( diff --git a/src/grammar.json b/src/grammar.json index d6bdea1..ad1a7f4 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -16,13 +16,111 @@ "type": "SYMBOL", "name": "_eol" }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "shape" + }, + { + "type": "SYMBOL", + "name": "container" + }, + { + "type": "SYMBOL", + "name": "connection" + } + ] + }, + { + "type": "SYMBOL", + "name": "_end" + } + ] + } + ] + }, + "connection": { + "type": "SEQ", + "members": [ { "type": "SYMBOL", - "name": "shape" + "name": "_connection_path" + }, + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_arrow" + }, + { + "type": "SYMBOL", + "name": "_connection_path" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "SYMBOL", + "name": "label" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_connection_path": { + "type": "SEQ", + "members": [ + { + "type": "REPEAT", + "content": { + "type": "PREC", + "value": 9, + "content": { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "shape_key" + }, + "named": true, + "value": "container_key" + }, + { + "type": "SYMBOL", + "name": "_dot" + } + ] + } + } }, { "type": "SYMBOL", - "name": "container" + "name": "shape_key" } ] }, @@ -52,8 +150,17 @@ "name": "_dot" }, { - "type": "SYMBOL", - "name": "shape" + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "shape" + }, + { + "type": "SYMBOL", + "name": "container" + } + ] } ] }, @@ -125,7 +232,7 @@ }, "shape": { "type": "PREC", - "value": 10, + "value": 11, "content": { "type": "SEQ", "members": [ @@ -196,10 +303,6 @@ "type": "BLANK" } ] - }, - { - "type": "SYMBOL", - "name": "_end" } ] } @@ -212,63 +315,38 @@ "name": "string" }, { - "type": "PREC_LEFT", - "value": 0, - "content": { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_dash" - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_word" - }, - { - "type": "TOKEN", - "content": { - "type": "PREC", - "value": 11, - "content": { - "type": "PATTERN", - "value": "([\\w\\d]+( +|\\-)[\\w\\d]+)+" - } - } - } - ] - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_dash" - }, - { - "type": "BLANK" - } - ] + "type": "SEQ", + "members": [ + { + "type": "TOKEN", + "content": { + "type": "PREC", + "value": 12, + "content": { + "type": "PATTERN", + "value": "\\-?([\\w\\d]+|([\\w\\d]+( +|\\-)[\\w\\d]+)+)" + } } - ] - } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_dash" + }, + { + "type": "BLANK" + } + ] + } + ] } ] }, "_new_shape_block": { "type": "PREC", - "value": 10, + "value": 11, "content": { "type": "SEQ", "members": [ @@ -292,7 +370,7 @@ }, "_new_shape_block_definition": { "type": "PREC", - "value": 10, + "value": 11, "content": { "type": "CHOICE", "members": [ @@ -338,12 +416,26 @@ "name": "_eol" }, { - "type": "SYMBOL", - "name": "shape" - }, - { - "type": "SYMBOL", - "name": "container" + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "shape" + }, + { + "type": "SYMBOL", + "name": "container" + } + ] + }, + { + "type": "SYMBOL", + "name": "_end" + } + ] } ] } @@ -369,74 +461,6 @@ } ] }, - "connection": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_shape_path" - }, - { - "type": "REPEAT1", - "content": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_arrow" - }, - { - "type": "SYMBOL", - "name": "_shape_path" - } - ] - } - }, - { - "type": "CHOICE", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "dot" - }, - { - "type": "SYMBOL", - "name": "_connection_attribute" - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_colon" - }, - { - "type": "SYMBOL", - "name": "label" - } - ] - } - ] - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "SYMBOL", - "name": "_end" - } - ] - }, "_shape_definition": { "type": "SEQ", "members": [ @@ -1084,10 +1108,6 @@ "_arrow": { "type": "SEQ", "members": [ - { - "type": "PATTERN", - "value": "[ \\t]" - }, { "type": "SYMBOL", "name": "arrow" @@ -1095,25 +1115,32 @@ ] }, "arrow": { - "type": "CHOICE", - "members": [ - { - "type": "PATTERN", - "value": "-+>" - }, - { - "type": "PATTERN", - "value": "--+" - }, - { - "type": "PATTERN", - "value": "<-+" - }, - { - "type": "PATTERN", - "value": "<-+>" + "type": "TOKEN", + "content": { + "type": "PREC", + "value": 13, + "content": { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "-+>" + }, + { + "type": "PATTERN", + "value": "--+" + }, + { + "type": "PATTERN", + "value": "<-+" + }, + { + "type": "PATTERN", + "value": "<-+>" + } + ] } - ] + } }, "_dot": { "type": "SEQ", @@ -1138,7 +1165,7 @@ "value": 5, "content": { "type": "PATTERN", - "value": "[\\w\\-]([^'\"`\\n;{}]*[\\w\\-])?" + "value": "[\\w\\-?!]([^'\"`\\n;{}]*[\\w\\-?!])?" } } }, @@ -1299,7 +1326,12 @@ "name": "line_comment" } ], - "conflicts": [], + "conflicts": [ + [ + "_connection_path", + "container" + ] + ], "precedences": [], "externals": [], "inline": [], diff --git a/src/node-types.json b/src/node-types.json index 08d15be..3c813bb 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -1,9 +1,4 @@ [ - { - "type": "arrow", - "named": true, - "fields": {} - }, { "type": "attr_key", "named": true, @@ -87,14 +82,6 @@ "type": "arrow", "named": true }, - { - "type": "attr_key", - "named": true - }, - { - "type": "attr_value", - "named": true - }, { "type": "container_key", "named": true @@ -126,6 +113,10 @@ "type": "block", "named": true }, + { + "type": "container", + "named": true + }, { "type": "container_key", "named": true @@ -248,6 +239,10 @@ "multiple": true, "required": false, "types": [ + { + "type": "connection", + "named": true + }, { "type": "container", "named": true @@ -300,6 +295,10 @@ "type": "animated", "named": false }, + { + "type": "arrow", + "named": true + }, { "type": "border-radius", "named": false diff --git a/src/parser.c b/src/parser.c index a0e3f0fd526b48cab3ddc81c2cc8e33b6aa4c1ff..bc35e889d4a348fceedb756cdaa0b5354c28a60e 100644 GIT binary patch literal 101295 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 QCl7vN&m$ZZ6p~l^f2Jbaz +biz<->baz +biz<-baz + +-------------------------------------------------------------------------------- + +(source_file + (connection + (shape_key) + (arrow) + (shape_key) + ) + (connection + (shape_key) + (arrow) + (shape_key) + ) + (connection + (shape_key) + (arrow) + (shape_key) + ) + (connection + (shape_key) + (arrow) + (shape_key) + ) +) + +================================================================================ +Formatted connection +================================================================================ +foo -- bar +biz -> baz +biz <-> baz +biz <- baz + +-------------------------------------------------------------------------------- + +(source_file + (connection + (shape_key) + (arrow) + (shape_key) + ) + (connection + (shape_key) + (arrow) + (shape_key) + ) + (connection + (shape_key) + (arrow) + (shape_key) + ) + (connection + (shape_key) + (arrow) + (shape_key) + ) +) + +================================================================================ +Connection with looooong arrow +================================================================================ +foo ----------- bar +biz ----------> baz +biz <---------> baz +biz <---------- baz + +-------------------------------------------------------------------------------- + +(source_file + (connection + (shape_key) + (arrow) + (shape_key) + ) + (connection + (shape_key) + (arrow) + (shape_key) + ) + (connection + (shape_key) + (arrow) + (shape_key) + ) + (connection + (shape_key) + (arrow) + (shape_key) + ) +) + + +================================================================================ +Complex identifier connection +================================================================================ +Foo Bar -- Biz Baz +-Bar-Foo- <- -Baz-Biz- + +-------------------------------------------------------------------------------- + +(source_file + (connection + (shape_key) + (arrow) + (shape_key) + ) + (connection + (shape_key) + (arrow) + (shape_key) + ) +) + +================================================================================ +Inline connection +================================================================================ +foo--bar->biz->baz + +-------------------------------------------------------------------------------- + +(source_file + (connection + (shape_key) + (arrow) + (shape_key) + (arrow) + (shape_key) + (arrow) + (shape_key) + ) +) + +================================================================================ +Many connections inline +================================================================================ +foo--bar;biz->baz + +-------------------------------------------------------------------------------- + +(source_file + (connection + (shape_key) + (arrow) + (shape_key) + ) + (connection + (shape_key) + (arrow) + (shape_key) + ) +) + +================================================================================ +Labeled connections +================================================================================ +foo--bar: Question? +bar -> baz: Yes + +-------------------------------------------------------------------------------- + +(source_file + (connection + (shape_key) + (arrow) + (shape_key) + (label) + ) + (connection + (shape_key) + (arrow) + (shape_key) + (label) + ) +) + +================================================================================ +Connection of shapes inside a containers +================================================================================ +foo.biz.baz -> bar.baz.biz: Label + +-------------------------------------------------------------------------------- + +(source_file + (connection + (container_key) (dot) (container_key) (dot) (shape_key) + (arrow) + (container_key) (dot) (container_key) (dot) (shape_key) + (label) + ) +) diff --git a/test/old_corpus/container.txt b/test/old_corpus/container.txt new file mode 100644 index 0000000..d0b5691 --- /dev/null +++ b/test/old_corpus/container.txt @@ -0,0 +1,97 @@ +================================================================================ +Declare a shape inside a container +================================================================================ +foo.baz + +-------------------------------------------------------------------------------- + +(source_file + (container_key) (dot) (shape_key) +) + +================================================================================ +Use quoted string as a shape key +================================================================================ +'foo'.'baz' + +-------------------------------------------------------------------------------- + +(source_file + (container_key (string)) (dot) (shape_key (string)) +) + +================================================================================ +Declare container inside a container using block +================================================================================ + +foo: { + bar: { + baz: { + biz + } + } +} + +-------------------------------------------------------------------------------- + +(source_file + (shape_key) + (block + (shape_key) + (block + (shape_key) + (block + (shape_key) + ) + ) + ) +) + +================================================================================ +Declare labaled container inside a labeled container using block +================================================================================ + +foo: Foo { + bar: Bar { + baz: Baz { + biz: Biz + } + } +} + +-------------------------------------------------------------------------------- + +(source_file + (shape_key) (label) + (block + (shape_key) (label) + (block + (shape_key) (label) + (block + (shape_key) (label) + ) + ) + ) +) + +================================================================================ +Declare many shapes inside a container +================================================================================ + +foo: { + bar + biz + baz +} + +-------------------------------------------------------------------------------- + +(source_file + (shape_key) + (block + (shape_key) + (shape_key) + (shape_key) + ) +) + diff --git a/test/old_corpus/shape.txt b/test/old_corpus/shape.txt new file mode 100644 index 0000000..c73d2f7 --- /dev/null +++ b/test/old_corpus/shape.txt @@ -0,0 +1,134 @@ +================================================================================ +Simple shape key +================================================================================ +foo +bar + +-------------------------------------------------------------------------------- + +(source_file + (shape_key) + (shape_key) +) + +================================================================================ +Complex shape key +================================================================================ + Foo bar +-Biz-baz- + +-------------------------------------------------------------------------------- + +(source_file + (shape_key) + (shape_key) +) + +================================================================================ +Use quoted string as a shape key +================================================================================ +'foo' + +-------------------------------------------------------------------------------- + +(source_file + (shape_key (string)) +) + +================================================================================ +Define multiple shapes using semicolons +================================================================================ +a;b;c + +-------------------------------------------------------------------------------- + +(source_file + (shape_key) + (shape_key) + (shape_key) +) + +================================================================================ +Labeled shapes +================================================================================ +a: Foo Bar +a: Foo Bar; b: Biz Baz + +-------------------------------------------------------------------------------- + +(source_file + (shape_key) (label) + (shape_key) (label) + (shape_key) (label) +) + +================================================================================ +It should skip white spaces +================================================================================ + +foo + +bar : Foo Bar; baz + +-------------------------------------------------------------------------------- + +(source_file + (shape_key) + (shape_key) (label) + (shape_key) +) + +================================================================================ +Shape block +================================================================================ + +foo: { + bar: { + baz: { + biz + } + } +} + +-------------------------------------------------------------------------------- + +(source_file + (shape_key) + (block + (shape_key) + (block + (shape_key) + (block + (shape_key) + ) + ) + ) +) + +================================================================================ +Aliased shape block +================================================================================ + +foo: Foo { + bar: Bar { + baz: Baz { + biz: Biz + } + } +} + +-------------------------------------------------------------------------------- + +(source_file + (shape_key) (label) + (block + (shape_key) (label) + (block + (shape_key) (label) + (block + (shape_key) (label) + ) + ) + ) +) + diff --git a/tree-sitter-d2.wasm b/tree-sitter-d2.wasm index e91ec96cf1556c296e00df4dc8fe108101eee203..ad324c52c27e04c0848fdd1ab15027582f0dd877 100755 GIT binary patch literal 22751 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 CHG literal 15865 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 z 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 -- 2.44.0 From 25adf22f55af446aa28ab947c7b38b4880bf5c22 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 09:01:12 +0300 Subject: [PATCH 03/12] move unquoted string prec to constant --- grammar.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/grammar.js b/grammar.js index 9b8fae1..c4ad86d 100644 --- a/grammar.js +++ b/grammar.js @@ -1,5 +1,6 @@ const PREC = { COMMENT: -2, + UNQUOTED_STRING: 5, CONTAINER: 9, CONNECTION: 9, SHAPE: 11, @@ -252,7 +253,8 @@ module.exports = grammar({ _dot: ($) => seq($.dot), dot: ($) => token("."), - _unquoted_string: ($) => token(prec(5, /[\w\-?!]([^'"`\n;{}]*[\w\-?!])?/)), + _unquoted_string: ($) => + token(prec(PREC.UNQUOTED_STRING, /[\w\-?!]([^'"`\n;{}]*[\w\-?!])?/)), string: ($) => choice( -- 2.44.0 From 6032250d6d13d297ca4d3b0b8f518ab25befa99c Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 09:05:20 +0300 Subject: [PATCH 04/12] add more tests --- test/corpus/container.txt | 106 ++++++++++++++++++++++++++------------ test/corpus/shape.txt | 11 ++++ 2 files changed, 83 insertions(+), 34 deletions(-) diff --git a/test/corpus/container.txt b/test/corpus/container.txt index dbfa5ea..e95d05c 100644 --- a/test/corpus/container.txt +++ b/test/corpus/container.txt @@ -21,7 +21,7 @@ foo.bar.biz ) ================================================================================ -Use quoted string as a shape key +Use quoted string as keys ================================================================================ 'foo'.'baz' @@ -67,39 +67,6 @@ foo: { ) ) -================================================================================ -Declare a container with complex keys -================================================================================ - -Foo biz bar: { - bar biz baz: { - -biz-baz-Baz-: { - Helo world - } - } -} - --------------------------------------------------------------------------------- - -(source_file - (container - (container_key) - (block - (container - (container_key) - (block - (container - (container_key) - (block - (shape (shape_key)) - ) - ) - ) - ) - ) - ) -) - ================================================================================ Declare labeled container inside a labeled container using block ================================================================================ @@ -159,3 +126,74 @@ foo: { ) ) + +================================================================================ +Declare a container with complex keys +================================================================================ + +Foo biz bar: { + bar biz baz: { + -biz-baz-Baz-: { + Helo world + } + } +} + +-------------------------------------------------------------------------------- + +(source_file + (container + (container_key) + (block + (container + (container_key) + (block + (container + (container_key) + (block + (shape (shape_key)) + ) + ) + ) + ) + ) + ) +) + +================================================================================ +Declare a container with complex keys and labels +================================================================================ + +Foo biz bar: Biz biz Bar { + bar biz baz: baz baz biz { + -biz-baz-Baz-: Biz buz Baz { + Helo world + } + } +} + +-------------------------------------------------------------------------------- + +(source_file + (container + (container_key) + (label) + (block + (container + (container_key) + (label) + (block + (container + (container_key) + (label) + (block + (shape (shape_key)) + ) + ) + ) + ) + ) + ) +) + + diff --git a/test/corpus/shape.txt b/test/corpus/shape.txt index 9db5732..16a0489 100644 --- a/test/corpus/shape.txt +++ b/test/corpus/shape.txt @@ -104,3 +104,14 @@ foo: Foo {} (shape (shape_key) (label) (block)) ) +================================================================================ +Use quoted string as shape key and label +================================================================================ +'foo': "Label" + +-------------------------------------------------------------------------------- + +(source_file + (shape (shape_key (string)) (label (string))) +) + -- 2.44.0 From 1ea16740ebcb838c57187daafc42b635ef2bee05 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 09:08:37 +0300 Subject: [PATCH 05/12] add connection to container block --- grammar.js | 2 +- src/grammar.json | 4 ++++ src/parser.c | Bin 101295 -> 101671 bytes test/corpus/connection.txt | 26 ++++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/grammar.js b/grammar.js index c4ad86d..196bbc8 100644 --- a/grammar.js +++ b/grammar.js @@ -111,7 +111,7 @@ module.exports = grammar({ _new_container_block_definition: ($) => prec( PREC.CONTAINER, - choice($._eol, seq(choice($.shape, $.container), $._end)) + choice($._eol, seq(choice($.shape, $.container, $.connection), $._end)) ), // -------------------------------------------- diff --git a/src/grammar.json b/src/grammar.json index ad1a7f4..eff3577 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -428,6 +428,10 @@ { "type": "SYMBOL", "name": "container" + }, + { + "type": "SYMBOL", + "name": "connection" } ] }, diff --git a/src/parser.c b/src/parser.c index bc35e889d4a348fceedb756cdaa0b5354c28a60e..e023a529b7af655f7c7608d16ac5355baddec98e 100644 GIT binary patch delta 4568 zcmb7IX>3&271nuU#vU6m#(2R7Gk{m@fqDCT#Mm={6Tmju#ccqaecz2uQ?uHvr4#}Y z5=Uy&gjS8(ibOyvVO3QEk+dQf@A${>zgg_CYbt=0pKyk}0l~4wg@*9}st!;^K!Tl&>J}m(U#Y zIa*33@@Q~=DZLyHn>7OTQZlz--13fOM^m+FshvA@rCDmnHo0yFMakmU88ihyJ7!RQ zh3-i?5b8a!d+plIdv~pl&Woln(ntKu9aNh0$N@i?L58OLgB3GrH<8WlI!N7`OIP{& zEb#5Gpz(Y@2CEV=8q2x06y~cHRLP-sn#g-=u{TtWJ--cdd%AGrrE02x*XGqyR0C7J zk~Z;=YU$^|{#PY6X|~Si%jpw7Rt1z-DyZ&>P~|C%*?g^v#_*;}(qVA-GAiJ!m9z~1 zmY}{PKpQo~=3^C9o|#Lpsg)9GW%T;q{eJ ze10}{BRNtrRsIa=p0xcF5j!86K1ZB}ovS(e6Eqm6&dAkUnj@W8z}+@Y;y0QR@vc^i z@5|4GtoF!E?K5PrW1eRiG) z-#*66(=`MBSVAi`9a;TFNDnQgI?c31+AJiUuea0okR$qrfJeU=zlbhsmML^&?a7o0 zyM9ew)Zqt9ptx%h&DU%%fVKb)BA&u?ZSDs@G!xk%P)TT@%@h_j{;Gjk6t_^3sGh0Z zxq_NPj&F(_y2WocBSlbd>q0IZnkF3M|F+V*8VWSM^H0rkmB-FKO*=#GBYbA^pSn63N=|GQ%*T5&qpLWnG;W8}V5f)0MGhc#)BW;+^ku|D07I6Kuh=rR{&;{E?oyZFx zK8uA&Vv!nuSV0Rze%ux-RKLr2*3be?w}cK!rHI?A;Z*s0{beP6Rb&Rvq^enba}`bC zyH5-iaw8*ims3@`ofG(-;+ipH6Mh<8>RcazKfR&*Vj^Yh8{;37M_EYB^!*`l11FWrR(S!QH(0VWg+-uI`uemU0mVm z>*;Ia`F?dh6_+~FepH30F$sISJhL)Cs~F+dxG=x_dxG zk4qWT9OXz?M`+teHqd0x8AZfYBAyonw&am$w7? zp-}~o6g3A07~2H5*g?Y#MapsQz-?186b zX{+0O1D?w^l_4$~PINQa`a!m)@-7-rkcl$HLmS$M+oA)V!>?-vJ!UD=o*hh3OOeJz z_10#*2=_KqrsoEgS&F#lxd9%Qvcf~Vn!SaJH9sz)$`x~84%j)3<^eIzb*B&#hZ2vtD$8Ah=?!$Bm#5 zY(-mihrtV5=@3zzbGFl=2<(wS$nzfT4Q!{(h@INPh`OEZi2BCq#1kWyd~r8rq5I}- zCnwu5lqlkO;{Zm5Tia+H&hG8NoO!XArbg7)P$vd`oIBjsEk06qQE^y)is8lBMVqqG zDxVIp;!-6)zX!u;>rTo= z{Ypd(U1=UQd~FYn!Q2VBhGEI^*=gmN{zslZ^IMY$xWR(!>$iUQvSqyD}6n%k0PKbeLK`cnOW&`35Sz+_u;Rh19(AOg{#sr z3~QJ=*7m5g9LCjLekB#(Fu&M?55xz3^b`*~M-#~tWU6`KIOS>v8eDH0az`&7qMN;l z+iShJ@sD1WAYnwfem^{m2p0+EIUL_l`538y<3tQsnd}couadj_@WuVoek#jM9rA;d zX&=h7vM(cC=}@NRu~!yJr)QjR99Dr&qu~_U_}+6Q_$I$Xf7CDw)bwF#^SAnF0k<8* zC+PhHG=*CaAnoq=QN1uYM=TfeP#;aehc7%<&#?o@*WCwUW5GdsL6|h*(#Iv3X@zY! z4+38%?immD_wgah=COy;T;$&3op>Trp}~Br_u&-IDa&@0D|BS7ieVp!TsVZF;(sAf zOv2x*4ufk;4^15W{$W~A;FNuo`bi%=dzA3U;dA};(_v$B$JRyD1&Q|;AXOrA5$--l zQwD!FK<|(k?p`=f&-3vUm`m$V(9=9k{Ojctw2iNy!dT>-L^wu7Z*00!Fl$?a>7ZZO*&{*96gB{?d(Y!FQ%>Ar(hzwNm#>MTXGr;nJ6NO a@oBv3G;Hn|ph^rj(i3wAe|MTb$oL;qp|-sM delta 4635 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 VKlcx#`kxM```R8Uy+}Dz{|mLV*FgXP diff --git a/test/corpus/connection.txt b/test/corpus/connection.txt index f1d8b64..50ef980 100644 --- a/test/corpus/connection.txt +++ b/test/corpus/connection.txt @@ -196,3 +196,29 @@ foo.biz.baz -> bar.baz.biz: Label (label) ) ) + +================================================================================ +Connection of shapes inside a block of container +================================================================================ +foo.baz: { + foo -> biz: Label +} + +-------------------------------------------------------------------------------- + +(source_file + (container + (container_key) (dot) + (container + (container_key) + (block + (connection + (shape_key) + (arrow) + (shape_key) + (label) + ) + ) + ) + ) +) -- 2.44.0 From f27955146571a2c777643517e1873f72cc222b51 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 10:40:58 +0300 Subject: [PATCH 06/12] add root attributes --- examples/all.d2 | 19 + grammar.js | 180 ++++---- queries/highlights.scm | 6 +- src/grammar.json | 828 +++++++++---------------------------- src/node-types.json | 89 ++-- src/parser.c | Bin 101671 -> 76455 bytes test/corpus/attributes.txt | 45 ++ tree-sitter-d2.wasm | Bin 22751 -> 15627 bytes 8 files changed, 415 insertions(+), 752 deletions(-) create mode 100644 examples/all.d2 create mode 100644 test/corpus/attributes.txt diff --git a/examples/all.d2 b/examples/all.d2 new file mode 100644 index 0000000..500e34b --- /dev/null +++ b/examples/all.d2 @@ -0,0 +1,19 @@ +shape: oval +label: ten +constraint: utehu +icon: huell +opacity: 1 +fill: red +stroke: red +stroke-width: 5 +stroke-dash: 4 +border-radius: 1 +font-color: red +shadow: true +multiple: true +animated: true +link: https://to +near: abc + +hello + diff --git a/grammar.js b/grammar.js index 196bbc8..f397ded 100644 --- a/grammar.js +++ b/grammar.js @@ -1,11 +1,13 @@ const PREC = { COMMENT: -2, - UNQUOTED_STRING: 5, - CONTAINER: 9, - CONNECTION: 9, - SHAPE: 11, - IDENTIFIER: 12, - ARROW: 13, + UNQUOTED_STRING: 0, + CONTAINER: 2, + CONNECTION: 2, + SHAPE: 3, + IDENTIFIER: 0, + ARROW: 0, + ATTRIBUTE: 0, + ATTRIBUTE_KEY: 0, }; spaces = /[ \t]/; @@ -18,7 +20,7 @@ module.exports = grammar({ $.line_comment, ], - word: ($) => $._word, + word: ($) => $._identifier, conflicts: ($) => [ [$._connection_path, $.container], @@ -37,7 +39,20 @@ module.exports = grammar({ source_file: ($) => repeat($._new_root_definition), _new_root_definition: ($) => - choice($._eol, seq(choice($.shape, $.container, $.connection), $._end)), + choice( + $._eol, + seq( + choice( + alias($._new_root_attribute, $.attribute), + $.shape, + $.container, + $.connection + ), + $._end + ) + ), + + // connections connection: ($) => seq( @@ -57,6 +72,8 @@ module.exports = grammar({ $.shape_key ), + // containers + container: ($) => prec( PREC.CONTAINER, @@ -74,6 +91,20 @@ module.exports = grammar({ ) ), + _new_container_block: ($) => + prec( + PREC.CONTAINER, + seq("{", repeat($._new_container_block_definition), "}") + ), + + _new_container_block_definition: ($) => + prec( + PREC.CONTAINER, + choice($._eol, seq(choice($.shape, $.container, $.connection), $._end)) + ), + + // shapes + shape: ($) => prec( PREC.SHAPE, @@ -88,35 +119,87 @@ module.exports = grammar({ ) ), - shape_key: ($) => - choice( - $.string, - seq( - token(prec(PREC.IDENTIFIER, /\-?([\w\d]+|([\w\d]+( +|\-)[\w\d]+)+)/)), - optional($._dash) - ) - ), + shape_key: ($) => choice($.string, seq($._identifier, optional($._dash))), + + _identifier: ($) => + token(prec(PREC.IDENTIFIER, /\-?([\w\d]+|([\w\d]+( +|\-)[\w\d]+)+)/)), _new_shape_block: ($) => prec(PREC.SHAPE, seq("{", repeat($._new_shape_block_definition), "}")), _new_shape_block_definition: ($) => prec(PREC.SHAPE, choice($._eol)), - _new_container_block: ($) => + // attributes + + _new_root_attribute: ($) => prec( - PREC.CONTAINER, - seq("{", repeat($._new_container_block_definition), "}") + PREC.ATTRIBUTE, + seq(alias($._root_attr_key, $.attr_key), $._colon, $.attr_value) ), - _new_container_block_definition: ($) => - prec( - PREC.CONTAINER, - choice($._eol, seq(choice($.shape, $.container, $.connection), $._end)) + _root_attr_key: ($) => + choice( + "direction", + // reserved but doesn't affected for root + alias( + choice( + "shape", + "label", + "constraint", + "icon", + $._common_style_attr_key, + $._text_attr_key + ), + $.reserved + ) ), + _shape_attr_key: ($) => + prec( + PREC.ATTRIBUTE_KEY, + choice( + "shape", + "label", + // sql + "constraint", + // image + "icon", + "width", + "height" + ) + ), + + _style_attr_key: ($) => choice($._common_style_attr_key, "3d"), + + _common_style_attr_key: ($) => + choice( + "opacity", + "fill", + "stroke", + "stroke-width", + "stroke-dash", + "border-radius", + "font-color", + "shadow", + "multiple", + "animated", + "link" + ), + + _text_attr_key: ($) => "near", + + _connection_attr_key: ($) => choice("source-arrowhead", "target-arrowhead"), + + // + + label: ($) => choice($.string, $._unquoted_string), + + attr_value: ($) => seq(choice($.string, $._unquoted_string)), + // -------------------------------------------- // source_file: ($) => repeat($._root_definition), + /* _root_definition: ($) => choice( @@ -148,24 +231,6 @@ module.exports = grammar({ $.shape_key ), - _dash: ($) => token.immediate("-"), - - label: ($) => choice($.string, $._unquoted_string), - - attr_value: ($) => seq(spaces, choice($.string, $._unquoted_string)), - - _root_attribute: ($) => - choice( - seq( - alias($._root_attr_key, $.attr_key), - $._colon, - $.attr_value, - $._end - ), - alias(seq($._shape_attribute, $._end), $.invalid) - ), - - _root_attr_key: ($) => "direction", _shape_block: ($) => seq( @@ -211,38 +276,9 @@ module.exports = grammar({ _connection_attribute: ($) => seq(alias($._connection_attr_key, $.attr_key), $._colon, $.attr_value), + */ - _shape_attr_key: ($) => - choice( - "shape", - "label", - // sql - "constraint", - // image - "icon", - "width", - "height" - ), - - _style_attr_key: ($) => - choice( - "opacity", - "fill", - "stroke", - "stroke-width", - "stroke-dash", - "border-radius", - "font-color", - "shadow", - "multiple", - "animated", - "3d", - "link" - ), - - _text_attr_key: ($) => "near", - - _connection_attr_key: ($) => choice("source-arrowhead", "target-arrowhead"), + _dash: ($) => token.immediate("-"), _colon: ($) => seq(":"), diff --git a/queries/highlights.scm b/queries/highlights.scm index f9e3551..2e9f129 100644 --- a/queries/highlights.scm +++ b/queries/highlights.scm @@ -2,7 +2,7 @@ ;------------------------------------------------------------------------------- (ERROR) @error -(invalid (_) @error) +; (invalid (_) @error) ;------------------------------------------------------------------------------- (container_key) @constant @@ -15,7 +15,7 @@ (container_key (string) @string.special) (shape_key (string) @string) (label) @string -(attr_value) @string +; (attr_value) @string ; Comments ;------------------------------------------------------------------------------- @@ -42,4 +42,4 @@ ;------------------------------------------------------------------------------- (ERROR) @error -(invalid (_) @error) +; (invalid (_) @error) diff --git a/src/grammar.json b/src/grammar.json index eff3577..e973575 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -1,6 +1,6 @@ { "name": "d2", - "word": "_word", + "word": "_identifier", "rules": { "source_file": { "type": "REPEAT", @@ -22,6 +22,15 @@ { "type": "CHOICE", "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_new_root_attribute" + }, + "named": true, + "value": "attribute" + }, { "type": "SYMBOL", "name": "shape" @@ -97,7 +106,7 @@ "type": "REPEAT", "content": { "type": "PREC", - "value": 9, + "value": 2, "content": { "type": "SEQ", "members": [ @@ -126,7 +135,7 @@ }, "container": { "type": "PREC", - "value": 9, + "value": 2, "content": { "type": "SEQ", "members": [ @@ -230,9 +239,72 @@ ] } }, + "_new_container_block": { + "type": "PREC", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "_new_container_block_definition" + } + }, + { + "type": "STRING", + "value": "}" + } + ] + } + }, + "_new_container_block_definition": { + "type": "PREC", + "value": 2, + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_eol" + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "shape" + }, + { + "type": "SYMBOL", + "name": "container" + }, + { + "type": "SYMBOL", + "name": "connection" + } + ] + }, + { + "type": "SYMBOL", + "name": "_end" + } + ] + } + ] + } + }, "shape": { "type": "PREC", - "value": 11, + "value": 3, "content": { "type": "SEQ", "members": [ @@ -318,15 +390,8 @@ "type": "SEQ", "members": [ { - "type": "TOKEN", - "content": { - "type": "PREC", - "value": 12, - "content": { - "type": "PATTERN", - "value": "\\-?([\\w\\d]+|([\\w\\d]+( +|\\-)[\\w\\d]+)+)" - } - } + "type": "SYMBOL", + "name": "_identifier" }, { "type": "CHOICE", @@ -344,9 +409,20 @@ } ] }, + "_identifier": { + "type": "TOKEN", + "content": { + "type": "PREC", + "value": 0, + "content": { + "type": "PATTERN", + "value": "\\-?([\\w\\d]+|([\\w\\d]+( +|\\-)[\\w\\d]+)+)" + } + } + }, "_new_shape_block": { "type": "PREC", - "value": 11, + "value": 3, "content": { "type": "SEQ", "members": [ @@ -370,7 +446,7 @@ }, "_new_shape_block_definition": { "type": "PREC", - "value": 11, + "value": 3, "content": { "type": "CHOICE", "members": [ @@ -381,656 +457,122 @@ ] } }, - "_new_container_block": { + "_new_root_attribute": { "type": "PREC", - "value": 9, + "value": 0, "content": { "type": "SEQ", "members": [ { - "type": "STRING", - "value": "{" - }, - { - "type": "REPEAT", + "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_new_container_block_definition" - } + "name": "_root_attr_key" + }, + "named": true, + "value": "attr_key" }, - { - "type": "STRING", - "value": "}" - } - ] - } - }, - "_new_container_block_definition": { - "type": "PREC", - "value": 9, - "content": { - "type": "CHOICE", - "members": [ { "type": "SYMBOL", - "name": "_eol" + "name": "_colon" }, { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "shape" - }, - { - "type": "SYMBOL", - "name": "container" - }, - { - "type": "SYMBOL", - "name": "connection" - } - ] - }, - { - "type": "SYMBOL", - "name": "_end" - } - ] + "type": "SYMBOL", + "name": "attr_value" } ] } }, - "_root_definition": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_emptyline" - }, - { - "type": "SYMBOL", - "name": "_root_attribute" - }, - { - "type": "SYMBOL", - "name": "connection" - }, - { - "type": "SYMBOL", - "name": "_shape_definition" - } - ] - }, - "_shape_definition": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_shape_path" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "dot" - }, - { - "type": "SYMBOL", - "name": "_shape_attribute" - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_colon" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "[ \\t]" - }, - { - "type": "SYMBOL", - "name": "label" - } - ] - }, - { - "type": "BLANK" - } - ] - } - ] - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "CHOICE", - "members": [ - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_shape_block" - }, - "named": true, - "value": "block" - }, - { - "type": "BLANK" - } - ] - } - ] - } - ] - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "SYMBOL", - "name": "_end" - } - ] - }, - "_shape_path": { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "[ \\t]" - }, - { - "type": "REPEAT", - "content": { - "type": "SEQ", - "members": [ - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "shape_key" - }, - "named": true, - "value": "container_key" - }, - { - "type": "PATTERN", - "value": "[ \\t]" - }, - { - "type": "SYMBOL", - "name": "dot" - }, - { - "type": "PATTERN", - "value": "[ \\t]" - } - ] - } - }, - { - "type": "SYMBOL", - "name": "shape_key" - } - ] - }, - "_dash": { - "type": "IMMEDIATE_TOKEN", - "content": { - "type": "STRING", - "value": "-" - } - }, - "label": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "string" - }, - { - "type": "SYMBOL", - "name": "_unquoted_string" - } - ] - }, - "attr_value": { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "[ \\t]" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "string" - }, - { - "type": "SYMBOL", - "name": "_unquoted_string" - } - ] - } - ] - }, - "_root_attribute": { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_root_attr_key" - }, - "named": true, - "value": "attr_key" - }, - { - "type": "SYMBOL", - "name": "_colon" - }, - { - "type": "SYMBOL", - "name": "attr_value" - }, - { - "type": "SYMBOL", - "name": "_end" - } - ] - }, - { - "type": "ALIAS", - "content": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_shape_attribute" - }, - { - "type": "SYMBOL", - "name": "_end" - } - ] - }, - "named": true, - "value": "invalid" - } - ] - }, "_root_attr_key": { - "type": "STRING", - "value": "direction" - }, - "_shape_block": { - "type": "SEQ", + "type": "CHOICE", "members": [ - { - "type": "PATTERN", - "value": "[ \\t]" - }, { "type": "STRING", - "value": "{" + "value": "direction" }, { - "type": "REPEAT", + "type": "ALIAS", "content": { "type": "CHOICE", "members": [ { - "type": "SYMBOL", - "name": "_emptyline" + "type": "STRING", + "value": "shape" }, { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "[ \\t]" - }, - { - "type": "SYMBOL", - "name": "_shape_block_definition" - } - ] + "type": "STRING", + "value": "label" + }, + { + "type": "STRING", + "value": "constraint" + }, + { + "type": "STRING", + "value": "icon" + }, + { + "type": "SYMBOL", + "name": "_common_style_attr_key" + }, + { + "type": "SYMBOL", + "name": "_text_attr_key" } ] - } - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_shape_block_definition" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_end" - }, - { - "type": "BLANK" - } - ] - } - ] - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "PATTERN", - "value": "[ \\t]" - }, - { - "type": "STRING", - "value": "}" - } - ] - }, - "_shape_block_definition": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "connection" - }, - { - "type": "SYMBOL", - "name": "_shape_definition" - }, - { - "type": "SYMBOL", - "name": "_shape_attribute" - } - ] - }, - "_shape_attribute": { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_shape_attr_key" - }, - "named": true, - "value": "attr_key" - }, - { - "type": "SYMBOL", - "name": "_colon" - }, - { - "type": "SYMBOL", - "name": "attr_value" - } - ] - }, - { - "type": "SYMBOL", - "name": "_style_attribute" - } - ] - }, - "_style_attribute": { - "type": "SEQ", - "members": [ - { - "type": "ALIAS", - "content": { - "type": "STRING", - "value": "style" }, "named": true, - "value": "attr_key" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "dot" - }, - { - "type": "SYMBOL", - "name": "_inner_style_attribute" - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_colon" - }, - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_style_attr_block" - }, - "named": true, - "value": "block" - } - ] - } - ] - } - ] - }, - "_style_attr_block": { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "[ \\t]" - }, - { - "type": "STRING", - "value": "{" - }, - { - "type": "PATTERN", - "value": "[ \\t]" - }, - { - "type": "REPEAT", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_emptyline" - }, - { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_inner_style_attribute" - }, - { - "type": "SYMBOL", - "name": "_end" - } - ] - } - ] - } - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_inner_style_attribute" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_end" - }, - { - "type": "BLANK" - } - ] - } - ] - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "PATTERN", - "value": "[ \\t]" - }, - { - "type": "STRING", - "value": "}" - } - ] - }, - "_inner_style_attribute": { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "[ \\t]" - }, - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_style_attr_key" - }, - "named": true, - "value": "attr_key" - }, - { - "type": "SYMBOL", - "name": "_colon" - }, - { - "type": "SYMBOL", - "name": "attr_value" - } - ] - }, - "_connection_attribute": { - "type": "SEQ", - "members": [ - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_connection_attr_key" - }, - "named": true, - "value": "attr_key" - }, - { - "type": "SYMBOL", - "name": "_colon" - }, - { - "type": "SYMBOL", - "name": "attr_value" + "value": "reserved" } ] }, "_shape_attr_key": { + "type": "PREC", + "value": 0, + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "shape" + }, + { + "type": "STRING", + "value": "label" + }, + { + "type": "STRING", + "value": "constraint" + }, + { + "type": "STRING", + "value": "icon" + }, + { + "type": "STRING", + "value": "width" + }, + { + "type": "STRING", + "value": "height" + } + ] + } + }, + "_style_attr_key": { "type": "CHOICE", "members": [ { - "type": "STRING", - "value": "shape" + "type": "SYMBOL", + "name": "_common_style_attr_key" }, { "type": "STRING", - "value": "label" - }, - { - "type": "STRING", - "value": "constraint" - }, - { - "type": "STRING", - "value": "icon" - }, - { - "type": "STRING", - "value": "width" - }, - { - "type": "STRING", - "value": "height" + "value": "3d" } ] }, - "_style_attr_key": { + "_common_style_attr_key": { "type": "CHOICE", "members": [ { @@ -1073,10 +615,6 @@ "type": "STRING", "value": "animated" }, - { - "type": "STRING", - "value": "3d" - }, { "type": "STRING", "value": "link" @@ -1100,6 +638,44 @@ } ] }, + "label": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "string" + }, + { + "type": "SYMBOL", + "name": "_unquoted_string" + } + ] + }, + "attr_value": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "string" + }, + { + "type": "SYMBOL", + "name": "_unquoted_string" + } + ] + } + ] + }, + "_dash": { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "STRING", + "value": "-" + } + }, "_colon": { "type": "SEQ", "members": [ @@ -1122,7 +698,7 @@ "type": "TOKEN", "content": { "type": "PREC", - "value": 13, + "value": 0, "content": { "type": "CHOICE", "members": [ @@ -1166,7 +742,7 @@ "type": "TOKEN", "content": { "type": "PREC", - "value": 5, + "value": 0, "content": { "type": "PATTERN", "value": "[\\w\\-?!]([^'\"`\\n;{}]*[\\w\\-?!])?" diff --git a/src/node-types.json b/src/node-types.json index 3c813bb..17e7779 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -2,7 +2,17 @@ { "type": "attr_key", "named": true, - "fields": {} + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "reserved", + "named": true + } + ] + } }, { "type": "attr_value", @@ -20,12 +30,12 @@ } }, { - "type": "block", + "type": "attribute", "named": true, "fields": {}, "children": { "multiple": true, - "required": false, + "required": true, "types": [ { "type": "attr_key", @@ -34,11 +44,18 @@ { "type": "attr_value", "named": true - }, - { - "type": "block", - "named": true - }, + } + ] + } + }, + { + "type": "block", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ { "type": "connection", "named": true @@ -47,25 +64,9 @@ "type": "container", "named": true }, - { - "type": "container_key", - "named": true - }, - { - "type": "dot", - "named": true - }, - { - "type": "label", - "named": true - }, { "type": "shape", "named": true - }, - { - "type": "shape_key", - "named": true } ] } @@ -151,33 +152,6 @@ ] } }, - { - "type": "invalid", - "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": false, - "types": [ - { - "type": "attr_key", - "named": true - }, - { - "type": "attr_value", - "named": true - }, - { - "type": "block", - "named": true - }, - { - "type": "dot", - "named": true - } - ] - } - }, { "type": "label", "named": true, @@ -193,6 +167,11 @@ ] } }, + { + "type": "reserved", + "named": true, + "fields": {} + }, { "type": "shape", "named": true, @@ -239,6 +218,10 @@ "multiple": true, "required": false, "types": [ + { + "type": "attribute", + "named": true + }, { "type": "connection", "named": true @@ -307,6 +290,10 @@ "type": "constraint", "named": false }, + { + "type": "direction", + "named": false + }, { "type": "dot", "named": true diff --git a/src/parser.c b/src/parser.c index e023a529b7af655f7c7608d16ac5355baddec98e..adddd4d9b02c9effa675f63554e4952e190ecdc4 100644 GIT binary patch literal 76455 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 literal 101671 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 CHG -- 2.44.0 From 781eb62b37ca779ffe5fe2839c52da537234bb69 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 11:24:48 +0300 Subject: [PATCH 07/12] add style attributes --- grammar.js | 45 ++++++- src/grammar.json | 259 +++++++++++++++++++++++++++++-------- src/node-types.json | 24 ++++ src/parser.c | Bin 76455 -> 116286 bytes test/corpus/attributes.txt | 71 ++++++++++ 5 files changed, 338 insertions(+), 61 deletions(-) diff --git a/grammar.js b/grammar.js index f397ded..2c28145 100644 --- a/grammar.js +++ b/grammar.js @@ -111,9 +111,12 @@ module.exports = grammar({ seq( $.shape_key, optional( - seq( - optional(seq($._colon, optional($.label))), - optional(seq(alias($._new_shape_block, $.block))) + choice( + seq($._dot, alias($._style_attribute, $.attribute)), + seq( + optional(seq($._colon, optional($.label))), + optional(seq(alias($._new_shape_block, $.block))) + ) ) ) ) @@ -132,10 +135,7 @@ module.exports = grammar({ // attributes _new_root_attribute: ($) => - prec( - PREC.ATTRIBUTE, - seq(alias($._root_attr_key, $.attr_key), $._colon, $.attr_value) - ), + seq(alias($._root_attr_key, $.attr_key), $._colon, $.attr_value), _root_attr_key: ($) => choice( @@ -147,6 +147,7 @@ module.exports = grammar({ "label", "constraint", "icon", + "style", $._common_style_attr_key, $._text_attr_key ), @@ -169,6 +170,36 @@ module.exports = grammar({ ) ), + _style_attribute: ($) => + prec( + PREC.ATTRIBUTE, + seq( + alias("style", $.attr_key), + choice( + seq($._dot, alias($._inner_style_attribute, $.attribute)), + seq($._colon, alias($._style_attribute_block, $.block)) + ) + ) + ), + + _style_attribute_block: ($) => + seq( + "{", + repeat( + choice( + $._eol, + seq(alias($._inner_style_attribute, $.attribute), $._end) + ) + ), + "}" + ), + + _inner_style_attribute: ($) => + prec( + PREC.ATTRIBUTE, + seq(alias($._style_attr_key, $.attr_key), $._colon, $.attr_value) + ), + _style_attr_key: ($) => choice($._common_style_attr_key, "3d"), _common_style_attr_key: ($) => diff --git a/src/grammar.json b/src/grammar.json index e973575..48a9f29 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -316,56 +316,79 @@ "type": "CHOICE", "members": [ { - "type": "SEQ", + "type": "CHOICE", "members": [ { - "type": "CHOICE", + "type": "SEQ", "members": [ { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "_colon" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "label" - }, - { - "type": "BLANK" - } - ] - } - ] + "type": "SYMBOL", + "name": "_dot" }, { - "type": "BLANK" + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_style_attribute" + }, + "named": true, + "value": "attribute" } ] }, { - "type": "CHOICE", + "type": "SEQ", "members": [ { - "type": "SEQ", + "type": "CHOICE", "members": [ { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_new_shape_block" - }, - "named": true, - "value": "block" + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "label" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" } ] }, { - "type": "BLANK" + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_new_shape_block" + }, + "named": true, + "value": "block" + } + ] + }, + { + "type": "BLANK" + } + ] } ] } @@ -458,30 +481,26 @@ } }, "_new_root_attribute": { - "type": "PREC", - "value": 0, - "content": { - "type": "SEQ", - "members": [ - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_root_attr_key" - }, - "named": true, - "value": "attr_key" - }, - { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { "type": "SYMBOL", - "name": "_colon" + "name": "_root_attr_key" }, - { - "type": "SYMBOL", - "name": "attr_value" - } - ] - } + "named": true, + "value": "attr_key" + }, + { + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "SYMBOL", + "name": "attr_value" + } + ] }, "_root_attr_key": { "type": "CHOICE", @@ -511,6 +530,10 @@ "type": "STRING", "value": "icon" }, + { + "type": "STRING", + "value": "style" + }, { "type": "SYMBOL", "name": "_common_style_attr_key" @@ -559,6 +582,134 @@ ] } }, + "_style_attribute": { + "type": "PREC", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "STRING", + "value": "style" + }, + "named": true, + "value": "attr_key" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_dot" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_inner_style_attribute" + }, + "named": true, + "value": "attribute" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_style_attribute_block" + }, + "named": true, + "value": "block" + } + ] + } + ] + } + ] + } + }, + "_style_attribute_block": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_eol" + }, + { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_inner_style_attribute" + }, + "named": true, + "value": "attribute" + }, + { + "type": "SYMBOL", + "name": "_end" + } + ] + } + ] + } + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "_inner_style_attribute": { + "type": "PREC", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_style_attr_key" + }, + "named": true, + "value": "attr_key" + }, + { + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "SYMBOL", + "name": "attr_value" + } + ] + } + }, "_style_attr_key": { "type": "CHOICE", "members": [ diff --git a/src/node-types.json b/src/node-types.json index 17e7779..fbd7a09 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -44,6 +44,18 @@ { "type": "attr_value", "named": true + }, + { + "type": "attribute", + "named": true + }, + { + "type": "block", + "named": true + }, + { + "type": "dot", + "named": true } ] } @@ -56,6 +68,10 @@ "multiple": true, "required": false, "types": [ + { + "type": "attribute", + "named": true + }, { "type": "connection", "named": true @@ -180,10 +196,18 @@ "multiple": true, "required": true, "types": [ + { + "type": "attribute", + "named": true + }, { "type": "block", "named": true }, + { + "type": "dot", + "named": true + }, { "type": "label", "named": true diff --git a/src/parser.c b/src/parser.c index adddd4d9b02c9effa675f63554e4952e190ecdc4..aa657a9d30ee213df834dfd269fc34d2bc28c557 100644 GIT binary patch literal 116286 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 literal 76455 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 diff --git a/test/corpus/attributes.txt b/test/corpus/attributes.txt index 660ef47..733a6ec 100644 --- a/test/corpus/attributes.txt +++ b/test/corpus/attributes.txt @@ -43,3 +43,74 @@ near: abc (attribute (attr_key (reserved)) (attr_value)) ) +================================================================================ +Style attribute +================================================================================ +foo.style.opacity: 5 +foo.style.fill: red +foo.style.stroke: red +foo.style.stroke-width: 5 +foo.style.stroke-dash: 4 +foo.style.border-radius: 1 +foo.style.font-color: red +foo.style.shadow: true +foo.style.multiple: true +foo.style.animated: true +foo.style.link: https://to + +-------------------------------------------------------------------------------- + +(source_file + (shape (shape_key) (dot) (attribute (attr_key) (dot) (attribute (attr_key) (attr_value)))) + (shape (shape_key) (dot) (attribute (attr_key) (dot) (attribute (attr_key) (attr_value)))) + (shape (shape_key) (dot) (attribute (attr_key) (dot) (attribute (attr_key) (attr_value)))) + (shape (shape_key) (dot) (attribute (attr_key) (dot) (attribute (attr_key) (attr_value)))) + (shape (shape_key) (dot) (attribute (attr_key) (dot) (attribute (attr_key) (attr_value)))) + (shape (shape_key) (dot) (attribute (attr_key) (dot) (attribute (attr_key) (attr_value)))) + (shape (shape_key) (dot) (attribute (attr_key) (dot) (attribute (attr_key) (attr_value)))) + (shape (shape_key) (dot) (attribute (attr_key) (dot) (attribute (attr_key) (attr_value)))) + (shape (shape_key) (dot) (attribute (attr_key) (dot) (attribute (attr_key) (attr_value)))) + (shape (shape_key) (dot) (attribute (attr_key) (dot) (attribute (attr_key) (attr_value)))) + (shape (shape_key) (dot) (attribute (attr_key) (dot) (attribute (attr_key) (attr_value)))) +) + +================================================================================ +Block style attributes +================================================================================ +foo.style: { + opacity: 5 + fill: red + stroke: red + stroke-width: 5 + stroke-dash: 4 + border-radius: 1 + font-color: red + shadow: true + multiple: true + animated: true + link: https://to +} + +-------------------------------------------------------------------------------- + +(source_file + (shape + (shape_key) (dot) + (attribute + (attr_key) + (block + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + ) + ) + ) +) -- 2.44.0 From a95e6251f01802d5563ee19e6f76725b0f8c100b Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 11:31:05 +0300 Subject: [PATCH 08/12] some cleanup --- grammar.js | 138 +++-------------------- queries/highlights.scm | 8 +- src/grammar.json | 73 +++--------- src/parser.c | Bin 116286 -> 115444 bytes test/old_corpus/attributes.txt | 110 ------------------ test/old_corpus/connection.txt | 198 --------------------------------- test/old_corpus/container.txt | 97 ---------------- test/old_corpus/shape.txt | 134 ---------------------- 8 files changed, 36 insertions(+), 722 deletions(-) delete mode 100644 test/old_corpus/attributes.txt delete mode 100644 test/old_corpus/connection.txt delete mode 100644 test/old_corpus/container.txt delete mode 100644 test/old_corpus/shape.txt diff --git a/grammar.js b/grammar.js index 2c28145..eb42878 100644 --- a/grammar.js +++ b/grammar.js @@ -10,8 +10,6 @@ const PREC = { ATTRIBUTE_KEY: 0, }; -spaces = /[ \t]/; - module.exports = grammar({ name: "d2", @@ -22,28 +20,17 @@ module.exports = grammar({ word: ($) => $._identifier, - conflicts: ($) => [ - [$._connection_path, $.container], - //[$.shape_key], - /* - [$._shape_path], - [$._shape_block], - [$._shape_block_definition], - [$._style_attr_block], - [$._inner_style_attribute], - [$._emptyline], -*/ - ], + conflicts: ($) => [[$._connection_path, $.container]], rules: { - source_file: ($) => repeat($._new_root_definition), + source_file: ($) => repeat($._root_definition), - _new_root_definition: ($) => + _root_definition: ($) => choice( $._eol, seq( choice( - alias($._new_root_attribute, $.attribute), + alias($._root_attribute, $.attribute), $.shape, $.container, $.connection @@ -57,17 +44,14 @@ module.exports = grammar({ connection: ($) => seq( $._connection_path, - repeat1(seq($._arrow, $._connection_path)), + repeat1(seq($.arrow, $._connection_path)), optional(seq($._colon, $.label)) ), _connection_path: ($) => seq( repeat( - prec( - PREC.CONNECTION, - seq(alias($.shape_key, $.container_key), $._dot) - ) + prec(PREC.CONNECTION, seq(alias($.shape_key, $.container_key), $.dot)) ), $.shape_key ), @@ -80,24 +64,24 @@ module.exports = grammar({ seq( alias($.shape_key, $.container_key), choice( - seq($._dot, choice($.shape, $.container)), + seq($.dot, choice($.shape, $.container)), seq( seq( optional(seq($._colon, optional($.label))), - optional(seq(alias($._new_container_block, $.block))) + optional(seq(alias($._container_block, $.block))) ) ) ) ) ), - _new_container_block: ($) => + _container_block: ($) => prec( PREC.CONTAINER, - seq("{", repeat($._new_container_block_definition), "}") + seq("{", repeat($._container_block_definition), "}") ), - _new_container_block_definition: ($) => + _container_block_definition: ($) => prec( PREC.CONTAINER, choice($._eol, seq(choice($.shape, $.container, $.connection), $._end)) @@ -112,10 +96,10 @@ module.exports = grammar({ $.shape_key, optional( choice( - seq($._dot, alias($._style_attribute, $.attribute)), + seq($.dot, alias($._style_attribute, $.attribute)), seq( optional(seq($._colon, optional($.label))), - optional(seq(alias($._new_shape_block, $.block))) + optional(seq(alias($._shape_block, $.block))) ) ) ) @@ -127,14 +111,14 @@ module.exports = grammar({ _identifier: ($) => token(prec(PREC.IDENTIFIER, /\-?([\w\d]+|([\w\d]+( +|\-)[\w\d]+)+)/)), - _new_shape_block: ($) => - prec(PREC.SHAPE, seq("{", repeat($._new_shape_block_definition), "}")), + _shape_block: ($) => + prec(PREC.SHAPE, seq("{", repeat($._shape_block_definition), "}")), - _new_shape_block_definition: ($) => prec(PREC.SHAPE, choice($._eol)), + _shape_block_definition: ($) => prec(PREC.SHAPE, choice($._eol)), // attributes - _new_root_attribute: ($) => + _root_attribute: ($) => seq(alias($._root_attr_key, $.attr_key), $._colon, $.attr_value), _root_attr_key: ($) => @@ -176,7 +160,7 @@ module.exports = grammar({ seq( alias("style", $.attr_key), choice( - seq($._dot, alias($._inner_style_attribute, $.attribute)), + seq($.dot, alias($._inner_style_attribute, $.attribute)), seq($._colon, alias($._style_attribute_block, $.block)) ) ) @@ -229,95 +213,12 @@ module.exports = grammar({ // -------------------------------------------- - // source_file: ($) => repeat($._root_definition), - /* - - _root_definition: ($) => - choice( - $._emptyline, - $._root_attribute, - $.connection, - $._shape_definition - ), - - _shape_definition: ($) => - seq( - $._shape_path, - optional( - choice( - seq($.dot, $._shape_attribute), - seq( - optional(seq($._colon, optional(seq(spaces, $.label)))), - optional(alias($._shape_block, $.block)) - ) - ) - ), - $._end - ), - - _shape_path: ($) => - seq( - spaces, - repeat(seq(alias($.shape_key, $.container_key), spaces, $.dot, spaces)), - $.shape_key - ), - - - _shape_block: ($) => - seq( - spaces, - "{", - repeat(choice($._emptyline, seq(spaces, $._shape_block_definition))), - optional(seq($._shape_block_definition, optional($._end))), - spaces, - "}" - ), - - _shape_block_definition: ($) => - choice($.connection, $._shape_definition, $._shape_attribute), - - _shape_attribute: ($) => - choice( - seq(alias($._shape_attr_key, $.attr_key), $._colon, $.attr_value), - $._style_attribute - ), - - _style_attribute: ($) => - seq( - alias("style", $.attr_key), - choice( - seq($.dot, $._inner_style_attribute), - seq($._colon, alias($._style_attr_block, $.block)) - ) - ), - - _style_attr_block: ($) => - seq( - spaces, - "{", - spaces, - repeat(choice($._emptyline, seq($._inner_style_attribute, $._end))), - optional(seq($._inner_style_attribute, optional($._end))), - spaces, - "}" - ), - - _inner_style_attribute: ($) => - seq(spaces, alias($._style_attr_key, $.attr_key), $._colon, $.attr_value), - - _connection_attribute: ($) => - seq(alias($._connection_attr_key, $.attr_key), $._colon, $.attr_value), - */ - _dash: ($) => token.immediate("-"), _colon: ($) => seq(":"), - _arrow: ($) => seq($.arrow), - arrow: ($) => token(prec(PREC.ARROW, choice(/-+>/, /--+/, /<-+/, /<-+>/))), - _dot: ($) => seq($.dot), dot: ($) => token("."), _unquoted_string: ($) => @@ -332,9 +233,6 @@ module.exports = grammar({ line_comment: ($) => token(prec(PREC.COMMENT, seq("#", /.*/))), - _word: ($) => /[\w\d]+/, - - _emptyline: ($) => prec(-1, seq(spaces, $._eol)), _eol: ($) => choice("\n", "\0"), _end: ($) => seq(choice(";", $._eol)), }, diff --git a/queries/highlights.scm b/queries/highlights.scm index 2e9f129..71fdff8 100644 --- a/queries/highlights.scm +++ b/queries/highlights.scm @@ -1,8 +1,3 @@ -; Special (treesitter don't overwrite) -;------------------------------------------------------------------------------- - -(ERROR) @error -; (invalid (_) @error) ;------------------------------------------------------------------------------- (container_key) @constant @@ -15,7 +10,7 @@ (container_key (string) @string.special) (shape_key (string) @string) (label) @string -; (attr_value) @string +(attr_value) @string ; Comments ;------------------------------------------------------------------------------- @@ -42,4 +37,3 @@ ;------------------------------------------------------------------------------- (ERROR) @error -; (invalid (_) @error) diff --git a/src/grammar.json b/src/grammar.json index 48a9f29..d2cd3a7 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -6,10 +6,10 @@ "type": "REPEAT", "content": { "type": "SYMBOL", - "name": "_new_root_definition" + "name": "_root_definition" } }, - "_new_root_definition": { + "_root_definition": { "type": "CHOICE", "members": [ { @@ -26,7 +26,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_new_root_attribute" + "name": "_root_attribute" }, "named": true, "value": "attribute" @@ -67,7 +67,7 @@ "members": [ { "type": "SYMBOL", - "name": "_arrow" + "name": "arrow" }, { "type": "SYMBOL", @@ -121,7 +121,7 @@ }, { "type": "SYMBOL", - "name": "_dot" + "name": "dot" } ] } @@ -156,7 +156,7 @@ "members": [ { "type": "SYMBOL", - "name": "_dot" + "name": "dot" }, { "type": "CHOICE", @@ -218,7 +218,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_new_container_block" + "name": "_container_block" }, "named": true, "value": "block" @@ -239,7 +239,7 @@ ] } }, - "_new_container_block": { + "_container_block": { "type": "PREC", "value": 2, "content": { @@ -253,7 +253,7 @@ "type": "REPEAT", "content": { "type": "SYMBOL", - "name": "_new_container_block_definition" + "name": "_container_block_definition" } }, { @@ -263,7 +263,7 @@ ] } }, - "_new_container_block_definition": { + "_container_block_definition": { "type": "PREC", "value": 2, "content": { @@ -323,7 +323,7 @@ "members": [ { "type": "SYMBOL", - "name": "_dot" + "name": "dot" }, { "type": "ALIAS", @@ -378,7 +378,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_new_shape_block" + "name": "_shape_block" }, "named": true, "value": "block" @@ -443,7 +443,7 @@ } } }, - "_new_shape_block": { + "_shape_block": { "type": "PREC", "value": 3, "content": { @@ -457,7 +457,7 @@ "type": "REPEAT", "content": { "type": "SYMBOL", - "name": "_new_shape_block_definition" + "name": "_shape_block_definition" } }, { @@ -467,7 +467,7 @@ ] } }, - "_new_shape_block_definition": { + "_shape_block_definition": { "type": "PREC", "value": 3, "content": { @@ -480,7 +480,7 @@ ] } }, - "_new_root_attribute": { + "_root_attribute": { "type": "SEQ", "members": [ { @@ -605,7 +605,7 @@ "members": [ { "type": "SYMBOL", - "name": "_dot" + "name": "dot" }, { "type": "ALIAS", @@ -836,15 +836,6 @@ } ] }, - "_arrow": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "arrow" - } - ] - }, "arrow": { "type": "TOKEN", "content": { @@ -873,15 +864,6 @@ } } }, - "_dot": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "dot" - } - ] - }, "dot": { "type": "TOKEN", "content": { @@ -994,27 +976,6 @@ } } }, - "_word": { - "type": "PATTERN", - "value": "[\\w\\d]+" - }, - "_emptyline": { - "type": "PREC", - "value": -1, - "content": { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "[ \\t]" - }, - { - "type": "SYMBOL", - "name": "_eol" - } - ] - } - }, "_eol": { "type": "CHOICE", "members": [ diff --git a/src/parser.c b/src/parser.c index aa657a9d30ee213df834dfd269fc34d2bc28c557..3d1bdfa32f8cec2d5cc131e35afe3eb51eed87eb 100644 GIT binary patch delta 7702 zcmb_hdvH`$ny;^KNOw9A@+1i)=?)1JAS8Y7?R&egJQCgu0*O2ZnXnUr1PNdgkhk&{ zO9lpmm*Ha^m8jzYDi9`0903hAGi%k35BO)-Do5AZ+MTW0K?|yOT&=}rf9IU;PC{pE zXR7v}^gZYM&Ub#_`<#<^k9hy%pts`=g^zugPnMfUm1J~Jr@E9qO|5OMjgRekv~m9I z;FO^0RQiL##2jYAp#d|CXDyg3W_2+umOa+CWz)mWjcZyqG>ds7KHs>ht!;DT>gF{q ztu32d+FAwCj1wPjYi(_QSWKsh`LLMh+Xm&CYsY6Bv06+0l6A&K*w$?`kS0A$GHYrV- zTWZ|gx>|6+;9TcWvDn_W-SfUuj~#Ju_{L_~(uz%6w#yLV-nmrZp7mw9RF*54BO$jw zt;+q@H_SbpmaSoPZrVWwl4QDj(h5^e!4-CYmlhza`%c>NA@14X?YZ~F#@~Wzv}Gh{=V#~ANVh91RefB~^1G3&Nh!iPZc}!VyD%_9Q04FStaNu%Alsdqo#%dQX1Q0h zbGs*GN2vRF4iR6QOZjeBZmRltDtEZ+Da&zd^SrKBmhFo16HaOO%)Dp4?(L#O?(X6O z_qpO{-B3w^n-M6C<48#nrV?=#aL<>_%;^^;0=FQ#!vZ5?xD+=crWC;P-Ns;n1a=6& z9|a099?f+xQo7q2j&X{mQ-UR+eA?Y!T9`nc;x>#P%D)x{zdqWpke6k2Yh|rN-P*Bf z-S1R;srxsfVsihW&r?|2%}MSdgj<4DhYUbV&@==H% zETuwzA0)E)cO^7Za(E0=63AdGrX01(3{W-i3Sd=)UkYH=lL4B??LqSKKLn^sevv6i zBYA8vwyI}Zkh~-Tc)}K6EW-SrQec=?g0Jc_^7b4og-G68206z^(@)iAb{W88E{zwJ zL3VI7q}XbaRN-fWF1|4PQmGQ<<4&>npJOCnPgXe{Oyy5Pl+VTED4RbUPb-I6<3w!< z1{-8#ESx|i0lH-Z{f#%GOOi_^x%|Ndnl+Hs-5AJWtCDuWC>JW_s=u$KiCFwiC7ERQ zR8FLuS`GwD(?33NlZXF0=}$l`lQAqFrxh8L>dj& zYZIvqKW+C>1%5KBy7>^m|C#tAa{GP(J_`NWeCdPh?+{{8>LM&*d)l?;D z4_4Cz@w>Yk5X`VLPviIk?yV-DTwI}q->z1||FeSb1A;r_sN7>lxO6<$g+ppxebESB zIUei6Cchq{nVzuCw?kB19JVFHF5#C3Q^f86lkviiG+xiviL^sQeBTOD34Vs_G@JkY zG~M6x%_Mr#<1tO%GnL-)m=0G@r1YUmmv(sxg#TCP|`mHhcMsvE$=;3@6- z^>peaP1hqrNR42f$G2vZJ_zgEvm~qK^fb(&JmR%0D2pqX(+GrA$3iOOAFZZg{G~ya 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 delta 8954 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 G%>MxlK>qar diff --git a/test/old_corpus/attributes.txt b/test/old_corpus/attributes.txt deleted file mode 100644 index f48a55c..0000000 --- a/test/old_corpus/attributes.txt +++ /dev/null @@ -1,110 +0,0 @@ -================================================================================ -Root attribute -================================================================================ -direction: value - --------------------------------------------------------------------------------- - -(source_file - (attr_key) (attr_value) -) - -================================================================================ -Block shape attribute -================================================================================ -foo: { - shape: oval - - foo.bar.baz: { - shape: oval - } -} - --------------------------------------------------------------------------------- - -(source_file - (shape_key) - (block - (attr_key) (attr_value) - (container_key) (dot) (container_key) (dot) (shape_key) - (block - (attr_key) (attr_value) - ) - ) -) - - -================================================================================ -Inline shape attribute -================================================================================ -foo.shape: oval -foo.bar.baz.shape: oval - --------------------------------------------------------------------------------- - -(source_file - (shape_key) (dot) (attr_key) (attr_value) - (container_key) (dot) (container_key) (dot) (shape_key) (dot) (attr_key) (attr_value) -) - -================================================================================ -Inline style attribute -================================================================================ -foo.style.opacity: 5 - --------------------------------------------------------------------------------- - -(source_file - (shape_key) (dot) (attr_key) (dot) (attr_key) (attr_value) -) - -================================================================================ -Block style attributes -================================================================================ -foo.style: { - opacity: 5 - - fill: red; -} - --------------------------------------------------------------------------------- - -(source_file - (shape_key) (dot) (attr_key) - (block - (attr_key) (attr_value) - (attr_key) (attr_value) - ) -) - -================================================================================ -Inline block style attributes -================================================================================ -foo.style: { opacity: 5; fill: red; } -foo.style: { opacity: 5 } - --------------------------------------------------------------------------------- - -(source_file - (shape_key) (dot) (attr_key) - (block - (attr_key) (attr_value) - (attr_key) (attr_value) - ) - (shape_key) (dot) (attr_key) - (block - (attr_key) (attr_value) - ) -) - -================================================================================ -Color in string -================================================================================ -foo.style.fill: "#ffffff"; - --------------------------------------------------------------------------------- - -(source_file - (shape_key) (dot) (attr_key) (dot) (attr_key) (attr_value (string)) -) - diff --git a/test/old_corpus/connection.txt b/test/old_corpus/connection.txt deleted file mode 100644 index f1d8b64..0000000 --- a/test/old_corpus/connection.txt +++ /dev/null @@ -1,198 +0,0 @@ -================================================================================ -Simple connection -================================================================================ -foo--bar -biz->baz -biz<->baz -biz<-baz - --------------------------------------------------------------------------------- - -(source_file - (connection - (shape_key) - (arrow) - (shape_key) - ) - (connection - (shape_key) - (arrow) - (shape_key) - ) - (connection - (shape_key) - (arrow) - (shape_key) - ) - (connection - (shape_key) - (arrow) - (shape_key) - ) -) - -================================================================================ -Formatted connection -================================================================================ -foo -- bar -biz -> baz -biz <-> baz -biz <- baz - --------------------------------------------------------------------------------- - -(source_file - (connection - (shape_key) - (arrow) - (shape_key) - ) - (connection - (shape_key) - (arrow) - (shape_key) - ) - (connection - (shape_key) - (arrow) - (shape_key) - ) - (connection - (shape_key) - (arrow) - (shape_key) - ) -) - -================================================================================ -Connection with looooong arrow -================================================================================ -foo ----------- bar -biz ----------> baz -biz <---------> baz -biz <---------- baz - --------------------------------------------------------------------------------- - -(source_file - (connection - (shape_key) - (arrow) - (shape_key) - ) - (connection - (shape_key) - (arrow) - (shape_key) - ) - (connection - (shape_key) - (arrow) - (shape_key) - ) - (connection - (shape_key) - (arrow) - (shape_key) - ) -) - - -================================================================================ -Complex identifier connection -================================================================================ -Foo Bar -- Biz Baz --Bar-Foo- <- -Baz-Biz- - --------------------------------------------------------------------------------- - -(source_file - (connection - (shape_key) - (arrow) - (shape_key) - ) - (connection - (shape_key) - (arrow) - (shape_key) - ) -) - -================================================================================ -Inline connection -================================================================================ -foo--bar->biz->baz - --------------------------------------------------------------------------------- - -(source_file - (connection - (shape_key) - (arrow) - (shape_key) - (arrow) - (shape_key) - (arrow) - (shape_key) - ) -) - -================================================================================ -Many connections inline -================================================================================ -foo--bar;biz->baz - --------------------------------------------------------------------------------- - -(source_file - (connection - (shape_key) - (arrow) - (shape_key) - ) - (connection - (shape_key) - (arrow) - (shape_key) - ) -) - -================================================================================ -Labeled connections -================================================================================ -foo--bar: Question? -bar -> baz: Yes - --------------------------------------------------------------------------------- - -(source_file - (connection - (shape_key) - (arrow) - (shape_key) - (label) - ) - (connection - (shape_key) - (arrow) - (shape_key) - (label) - ) -) - -================================================================================ -Connection of shapes inside a containers -================================================================================ -foo.biz.baz -> bar.baz.biz: Label - --------------------------------------------------------------------------------- - -(source_file - (connection - (container_key) (dot) (container_key) (dot) (shape_key) - (arrow) - (container_key) (dot) (container_key) (dot) (shape_key) - (label) - ) -) diff --git a/test/old_corpus/container.txt b/test/old_corpus/container.txt deleted file mode 100644 index d0b5691..0000000 --- a/test/old_corpus/container.txt +++ /dev/null @@ -1,97 +0,0 @@ -================================================================================ -Declare a shape inside a container -================================================================================ -foo.baz - --------------------------------------------------------------------------------- - -(source_file - (container_key) (dot) (shape_key) -) - -================================================================================ -Use quoted string as a shape key -================================================================================ -'foo'.'baz' - --------------------------------------------------------------------------------- - -(source_file - (container_key (string)) (dot) (shape_key (string)) -) - -================================================================================ -Declare container inside a container using block -================================================================================ - -foo: { - bar: { - baz: { - biz - } - } -} - --------------------------------------------------------------------------------- - -(source_file - (shape_key) - (block - (shape_key) - (block - (shape_key) - (block - (shape_key) - ) - ) - ) -) - -================================================================================ -Declare labaled container inside a labeled container using block -================================================================================ - -foo: Foo { - bar: Bar { - baz: Baz { - biz: Biz - } - } -} - --------------------------------------------------------------------------------- - -(source_file - (shape_key) (label) - (block - (shape_key) (label) - (block - (shape_key) (label) - (block - (shape_key) (label) - ) - ) - ) -) - -================================================================================ -Declare many shapes inside a container -================================================================================ - -foo: { - bar - biz - baz -} - --------------------------------------------------------------------------------- - -(source_file - (shape_key) - (block - (shape_key) - (shape_key) - (shape_key) - ) -) - diff --git a/test/old_corpus/shape.txt b/test/old_corpus/shape.txt deleted file mode 100644 index c73d2f7..0000000 --- a/test/old_corpus/shape.txt +++ /dev/null @@ -1,134 +0,0 @@ -================================================================================ -Simple shape key -================================================================================ -foo -bar - --------------------------------------------------------------------------------- - -(source_file - (shape_key) - (shape_key) -) - -================================================================================ -Complex shape key -================================================================================ - Foo bar --Biz-baz- - --------------------------------------------------------------------------------- - -(source_file - (shape_key) - (shape_key) -) - -================================================================================ -Use quoted string as a shape key -================================================================================ -'foo' - --------------------------------------------------------------------------------- - -(source_file - (shape_key (string)) -) - -================================================================================ -Define multiple shapes using semicolons -================================================================================ -a;b;c - --------------------------------------------------------------------------------- - -(source_file - (shape_key) - (shape_key) - (shape_key) -) - -================================================================================ -Labeled shapes -================================================================================ -a: Foo Bar -a: Foo Bar; b: Biz Baz - --------------------------------------------------------------------------------- - -(source_file - (shape_key) (label) - (shape_key) (label) - (shape_key) (label) -) - -================================================================================ -It should skip white spaces -================================================================================ - -foo - -bar : Foo Bar; baz - --------------------------------------------------------------------------------- - -(source_file - (shape_key) - (shape_key) (label) - (shape_key) -) - -================================================================================ -Shape block -================================================================================ - -foo: { - bar: { - baz: { - biz - } - } -} - --------------------------------------------------------------------------------- - -(source_file - (shape_key) - (block - (shape_key) - (block - (shape_key) - (block - (shape_key) - ) - ) - ) -) - -================================================================================ -Aliased shape block -================================================================================ - -foo: Foo { - bar: Bar { - baz: Baz { - biz: Biz - } - } -} - --------------------------------------------------------------------------------- - -(source_file - (shape_key) (label) - (block - (shape_key) (label) - (block - (shape_key) (label) - (block - (shape_key) (label) - ) - ) - ) -) - -- 2.44.0 From fb612e11b66a422efbb0724b192fa336795b55b8 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 12:01:25 +0300 Subject: [PATCH 09/12] add container and shape blocks to conflicts --- grammar.js | 14 ++++++++++---- queries/highlights.scm | 1 + src/grammar.json | 35 +++++++++++++++++++++++------------ src/node-types.json | 8 -------- src/parser.c | Bin 115444 -> 113696 bytes test/corpus/container.txt | 27 +++++++++++++++++++++++++++ test/highlight/shape.d2 | 2 +- tree-sitter-d2.wasm | Bin 15627 -> 25891 bytes 8 files changed, 62 insertions(+), 25 deletions(-) diff --git a/grammar.js b/grammar.js index eb42878..7a4b946 100644 --- a/grammar.js +++ b/grammar.js @@ -1,9 +1,12 @@ const PREC = { COMMENT: -2, + EOL: -1, UNQUOTED_STRING: 0, CONTAINER: 2, CONNECTION: 2, SHAPE: 3, + CONTAINER_BLOCK: 4, + SHAPE_BLOCK: 4, IDENTIFIER: 0, ARROW: 0, ATTRIBUTE: 0, @@ -20,7 +23,10 @@ module.exports = grammar({ word: ($) => $._identifier, - conflicts: ($) => [[$._connection_path, $.container]], + conflicts: ($) => [ + [$._connection_path, $.container], + [$._container_block_definition, $._shape_block_definition], + ], rules: { source_file: ($) => repeat($._root_definition), @@ -83,7 +89,7 @@ module.exports = grammar({ _container_block_definition: ($) => prec( - PREC.CONTAINER, + PREC.CONTAINER_BLOCK, choice($._eol, seq(choice($.shape, $.container, $.connection), $._end)) ), @@ -114,7 +120,7 @@ module.exports = grammar({ _shape_block: ($) => prec(PREC.SHAPE, seq("{", repeat($._shape_block_definition), "}")), - _shape_block_definition: ($) => prec(PREC.SHAPE, choice($._eol)), + _shape_block_definition: ($) => prec(PREC.SHAPE_BLOCK, choice($._eol)), // attributes @@ -233,7 +239,7 @@ module.exports = grammar({ line_comment: ($) => token(prec(PREC.COMMENT, seq("#", /.*/))), - _eol: ($) => choice("\n", "\0"), + _eol: ($) => token(prec(PREC.EOL, choice("\n", "\0"))), _end: ($) => seq(choice(";", $._eol)), }, }); diff --git a/queries/highlights.scm b/queries/highlights.scm index 71fdff8..54a6672 100644 --- a/queries/highlights.scm +++ b/queries/highlights.scm @@ -3,6 +3,7 @@ (container_key) @constant (shape_key) @variable (attr_key) @property +(reserved) @error ; Literals ;------------------------------------------------------------------------------- diff --git a/src/grammar.json b/src/grammar.json index d2cd3a7..6e0a6fd 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -265,7 +265,7 @@ }, "_container_block_definition": { "type": "PREC", - "value": 2, + "value": 4, "content": { "type": "CHOICE", "members": [ @@ -469,7 +469,7 @@ }, "_shape_block_definition": { "type": "PREC", - "value": 3, + "value": 4, "content": { "type": "CHOICE", "members": [ @@ -977,17 +977,24 @@ } }, "_eol": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": "\n" - }, - { - "type": "STRING", - "value": "\u0000" + "type": "TOKEN", + "content": { + "type": "PREC", + "value": -1, + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "\n" + }, + { + "type": "STRING", + "value": "\u0000" + } + ] } - ] + } }, "_end": { "type": "SEQ", @@ -1022,6 +1029,10 @@ [ "_connection_path", "container" + ], + [ + "_container_block_definition", + "_shape_block_definition" ] ], "precedences": [], diff --git a/src/node-types.json b/src/node-types.json index fbd7a09..3a738c0 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -266,14 +266,6 @@ "named": true, "fields": {} }, - { - "type": "\u0000", - "named": false - }, - { - "type": "\n", - "named": false - }, { "type": "\"", "named": false diff --git a/src/parser.c b/src/parser.c index 3d1bdfa32f8cec2d5cc131e35afe3eb51eed87eb..c72ab26ed7f42e27ac0c65452666b5bdeb11161c 100644 GIT binary patch delta 11370 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 delta 12848 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 S(|G0GcAB!=XSUNXWB(WGx#G|O diff --git a/test/corpus/container.txt b/test/corpus/container.txt index e95d05c..704d2b5 100644 --- a/test/corpus/container.txt +++ b/test/corpus/container.txt @@ -196,4 +196,31 @@ Foo biz bar: Biz biz Bar { ) ) +================================================================================ +Declare shapes sparsely in a container +================================================================================ +Foo: Baz { + + biz + + baz + + bar + + +} + +-------------------------------------------------------------------------------- + +(source_file + (container + (container_key) + (label) + (block + (shape (shape_key)) + (shape (shape_key)) + (shape (shape_key)) + ) + ) +) diff --git a/test/highlight/shape.d2 b/test/highlight/shape.d2 index ca98449..ef251c4 100644 --- a/test/highlight/shape.d2 +++ b/test/highlight/shape.d2 @@ -15,7 +15,7 @@ foo: Foo Bar # ^ string foo: Foo Bar { - # <- variable + # <- constant # ^ string # ^ punctuation.bracket diff --git a/tree-sitter-d2.wasm b/tree-sitter-d2.wasm index da01d16be5ab9e23c350d4e5131d5ff13f591b51..07e54749327db76a4897a4040ef5cb72eed7fc78 100755 GIT binary patch literal 25891 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 literal 15627 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 Date: Fri, 9 Dec 2022 12:04:09 +0300 Subject: [PATCH 10/12] remove test diagram --- .gitignore | 2 ++ examples/all.d2 | 19 ------------------- 2 files changed, 2 insertions(+), 19 deletions(-) delete mode 100644 examples/all.d2 diff --git a/.gitignore b/.gitignore index 42d67a4..74045d4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,7 @@ .envrc .direnv +# test data +test.d2 # produced by d2 *.svg diff --git a/examples/all.d2 b/examples/all.d2 deleted file mode 100644 index 500e34b..0000000 --- a/examples/all.d2 +++ /dev/null @@ -1,19 +0,0 @@ -shape: oval -label: ten -constraint: utehu -icon: huell -opacity: 1 -fill: red -stroke: red -stroke-width: 5 -stroke-dash: 4 -border-radius: 1 -font-color: red -shadow: true -multiple: true -animated: true -link: https://to -near: abc - -hello - -- 2.44.0 From 7310e225388911d876b9bbaafc1397ea1912b57b Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 12:13:42 +0300 Subject: [PATCH 11/12] fix eol --- grammar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grammar.js b/grammar.js index 7a4b946..e9bad38 100644 --- a/grammar.js +++ b/grammar.js @@ -239,7 +239,7 @@ module.exports = grammar({ line_comment: ($) => token(prec(PREC.COMMENT, seq("#", /.*/))), - _eol: ($) => token(prec(PREC.EOL, choice("\n", "\0"))), + _eol: ($) => token(prec(PREC.EOL, "\n")), _end: ($) => seq(choice(";", $._eol)), }, }); -- 2.44.0 From e67462999304772a172e8cf8f3a7e04beca351b6 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Fri, 9 Dec 2022 12:34:42 +0300 Subject: [PATCH 12/12] add attributes for container --- grammar.js | 40 +- src/grammar.json | 233 +- src/node-types.json | 4 - src/parser.c | 2739 ++++++++++--------- test/corpus/attributes.txt | 112 + test/corpus/shape.txt | 26 - test/highlight/{keyword.d2 => attribute.d2} | 2 +- tree-sitter-d2.wasm | Bin 25891 -> 25898 bytes 8 files changed, 1605 insertions(+), 1551 deletions(-) rename test/highlight/{keyword.d2 => attribute.d2} (95%) diff --git a/grammar.js b/grammar.js index e9bad38..bd702d7 100644 --- a/grammar.js +++ b/grammar.js @@ -5,8 +5,6 @@ const PREC = { CONTAINER: 2, CONNECTION: 2, SHAPE: 3, - CONTAINER_BLOCK: 4, - SHAPE_BLOCK: 4, IDENTIFIER: 0, ARROW: 0, ATTRIBUTE: 0, @@ -23,10 +21,7 @@ module.exports = grammar({ word: ($) => $._identifier, - conflicts: ($) => [ - [$._connection_path, $.container], - [$._container_block_definition, $._shape_block_definition], - ], + conflicts: ($) => [[$._connection_path, $.container]], rules: { source_file: ($) => repeat($._root_definition), @@ -82,15 +77,15 @@ module.exports = grammar({ ), _container_block: ($) => - prec( - PREC.CONTAINER, - seq("{", repeat($._container_block_definition), "}") - ), + seq("{", repeat($._container_block_definition), "}"), _container_block_definition: ($) => - prec( - PREC.CONTAINER_BLOCK, - choice($._eol, seq(choice($.shape, $.container, $.connection), $._end)) + choice( + $._eol, + seq( + choice($.shape, $.container, $.connection, $._shape_attribute), + $._end + ) ), // shapes @@ -103,10 +98,7 @@ module.exports = grammar({ optional( choice( seq($.dot, alias($._style_attribute, $.attribute)), - seq( - optional(seq($._colon, optional($.label))), - optional(seq(alias($._shape_block, $.block))) - ) + seq(optional(seq($._colon, optional($.label)))) ) ) ) @@ -117,11 +109,6 @@ module.exports = grammar({ _identifier: ($) => token(prec(PREC.IDENTIFIER, /\-?([\w\d]+|([\w\d]+( +|\-)[\w\d]+)+)/)), - _shape_block: ($) => - prec(PREC.SHAPE, seq("{", repeat($._shape_block_definition), "}")), - - _shape_block_definition: ($) => prec(PREC.SHAPE_BLOCK, choice($._eol)), - // attributes _root_attribute: ($) => @@ -145,6 +132,15 @@ module.exports = grammar({ ) ), + _shape_attribute: ($) => + choice( + alias($._base_shape_attribute, $.attribute), + alias($._style_attribute, $.attribute) + ), + + _base_shape_attribute: ($) => + seq(alias($._shape_attr_key, $.attr_key), $._colon, $.attr_value), + _shape_attr_key: ($) => prec( PREC.ATTRIBUTE_KEY, diff --git a/src/grammar.json b/src/grammar.json index 6e0a6fd..45a4ba0 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -240,67 +240,63 @@ } }, "_container_block": { - "type": "PREC", - "value": 2, - "content": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "{" - }, - { - "type": "REPEAT", - "content": { - "type": "SYMBOL", - "name": "_container_block_definition" - } - }, - { - "type": "STRING", - "value": "}" + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "_container_block_definition" } - ] - } + }, + { + "type": "STRING", + "value": "}" + } + ] }, "_container_block_definition": { - "type": "PREC", - "value": 4, - "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_eol" - }, - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "shape" - }, - { - "type": "SYMBOL", - "name": "container" - }, - { - "type": "SYMBOL", - "name": "connection" - } - ] - }, - { - "type": "SYMBOL", - "name": "_end" - } - ] - } - ] - } + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_eol" + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "shape" + }, + { + "type": "SYMBOL", + "name": "container" + }, + { + "type": "SYMBOL", + "name": "connection" + }, + { + "type": "SYMBOL", + "name": "_shape_attribute" + } + ] + }, + { + "type": "SYMBOL", + "name": "_end" + } + ] + } + ] }, "shape": { "type": "PREC", @@ -367,28 +363,6 @@ "type": "BLANK" } ] - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "_shape_block" - }, - "named": true, - "value": "block" - } - ] - }, - { - "type": "BLANK" - } - ] } ] } @@ -443,43 +417,6 @@ } } }, - "_shape_block": { - "type": "PREC", - "value": 3, - "content": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "{" - }, - { - "type": "REPEAT", - "content": { - "type": "SYMBOL", - "name": "_shape_block_definition" - } - }, - { - "type": "STRING", - "value": "}" - } - ] - } - }, - "_shape_block_definition": { - "type": "PREC", - "value": 4, - "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_eol" - } - ] - } - }, "_root_attribute": { "type": "SEQ", "members": [ @@ -549,6 +486,51 @@ } ] }, + "_shape_attribute": { + "type": "CHOICE", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_base_shape_attribute" + }, + "named": true, + "value": "attribute" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_style_attribute" + }, + "named": true, + "value": "attribute" + } + ] + }, + "_base_shape_attribute": { + "type": "SEQ", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_shape_attr_key" + }, + "named": true, + "value": "attr_key" + }, + { + "type": "SYMBOL", + "name": "_colon" + }, + { + "type": "SYMBOL", + "name": "attr_value" + } + ] + }, "_shape_attr_key": { "type": "PREC", "value": 0, @@ -982,17 +964,8 @@ "type": "PREC", "value": -1, "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": "\n" - }, - { - "type": "STRING", - "value": "\u0000" - } - ] + "type": "STRING", + "value": "\n" } } }, @@ -1029,10 +1002,6 @@ [ "_connection_path", "container" - ], - [ - "_container_block_definition", - "_shape_block_definition" ] ], "precedences": [], diff --git a/src/node-types.json b/src/node-types.json index 3a738c0..810cf29 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -200,10 +200,6 @@ "type": "attribute", "named": true }, - { - "type": "block", - "named": true - }, { "type": "dot", "named": true diff --git a/src/parser.c b/src/parser.c index c72ab26..ab92f90 100644 --- a/src/parser.c +++ b/src/parser.c @@ -6,7 +6,7 @@ #endif #define LANGUAGE_VERSION 14 -#define STATE_COUNT 81 +#define STATE_COUNT 79 #define LARGE_STATE_COUNT 4 #define SYMBOL_COUNT 73 #define ALIAS_COUNT 1 @@ -66,25 +66,25 @@ enum { sym__container_block_definition = 47, sym_shape = 48, sym_shape_key = 49, - sym__shape_block = 50, - sym__shape_block_definition = 51, - sym__root_attribute = 52, - sym__root_attr_key = 53, - sym__style_attribute = 54, - sym__style_attribute_block = 55, - sym__inner_style_attribute = 56, - sym__style_attr_key = 57, - sym__common_style_attr_key = 58, - sym_label = 59, - sym_attr_value = 60, - sym__colon = 61, - sym_string = 62, - sym__end = 63, - aux_sym_source_file_repeat1 = 64, - aux_sym_connection_repeat1 = 65, - aux_sym__connection_path_repeat1 = 66, - aux_sym__container_block_repeat1 = 67, - aux_sym__shape_block_repeat1 = 68, + sym__root_attribute = 50, + sym__root_attr_key = 51, + sym__shape_attribute = 52, + sym__base_shape_attribute = 53, + sym__shape_attr_key = 54, + sym__style_attribute = 55, + sym__style_attribute_block = 56, + sym__inner_style_attribute = 57, + sym__style_attr_key = 58, + sym__common_style_attr_key = 59, + sym_label = 60, + sym_attr_value = 61, + sym__colon = 62, + sym_string = 63, + sym__end = 64, + aux_sym_source_file_repeat1 = 65, + aux_sym_connection_repeat1 = 66, + aux_sym__connection_path_repeat1 = 67, + aux_sym__container_block_repeat1 = 68, aux_sym__style_attribute_block_repeat1 = 69, aux_sym_string_repeat1 = 70, aux_sym_string_repeat2 = 71, @@ -143,10 +143,11 @@ static const char * const ts_symbol_names[] = { [sym__container_block_definition] = "_container_block_definition", [sym_shape] = "shape", [sym_shape_key] = "shape_key", - [sym__shape_block] = "block", - [sym__shape_block_definition] = "_shape_block_definition", [sym__root_attribute] = "attribute", [sym__root_attr_key] = "attr_key", + [sym__shape_attribute] = "_shape_attribute", + [sym__base_shape_attribute] = "attribute", + [sym__shape_attr_key] = "attr_key", [sym__style_attribute] = "attribute", [sym__style_attribute_block] = "block", [sym__inner_style_attribute] = "attribute", @@ -161,7 +162,6 @@ static const char * const ts_symbol_names[] = { [aux_sym_connection_repeat1] = "connection_repeat1", [aux_sym__connection_path_repeat1] = "_connection_path_repeat1", [aux_sym__container_block_repeat1] = "_container_block_repeat1", - [aux_sym__shape_block_repeat1] = "_shape_block_repeat1", [aux_sym__style_attribute_block_repeat1] = "_style_attribute_block_repeat1", [aux_sym_string_repeat1] = "string_repeat1", [aux_sym_string_repeat2] = "string_repeat2", @@ -220,10 +220,11 @@ static const TSSymbol ts_symbol_map[] = { [sym__container_block_definition] = sym__container_block_definition, [sym_shape] = sym_shape, [sym_shape_key] = sym_shape_key, - [sym__shape_block] = sym__container_block, - [sym__shape_block_definition] = sym__shape_block_definition, [sym__root_attribute] = sym__root_attribute, [sym__root_attr_key] = anon_sym_style, + [sym__shape_attribute] = sym__shape_attribute, + [sym__base_shape_attribute] = sym__root_attribute, + [sym__shape_attr_key] = anon_sym_style, [sym__style_attribute] = sym__root_attribute, [sym__style_attribute_block] = sym__container_block, [sym__inner_style_attribute] = sym__root_attribute, @@ -238,7 +239,6 @@ static const TSSymbol ts_symbol_map[] = { [aux_sym_connection_repeat1] = aux_sym_connection_repeat1, [aux_sym__connection_path_repeat1] = aux_sym__connection_path_repeat1, [aux_sym__container_block_repeat1] = aux_sym__container_block_repeat1, - [aux_sym__shape_block_repeat1] = aux_sym__shape_block_repeat1, [aux_sym__style_attribute_block_repeat1] = aux_sym__style_attribute_block_repeat1, [aux_sym_string_repeat1] = aux_sym_string_repeat1, [aux_sym_string_repeat2] = aux_sym_string_repeat2, @@ -447,14 +447,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym__shape_block] = { - .visible = true, - .named = true, - }, - [sym__shape_block_definition] = { - .visible = false, - .named = true, - }, [sym__root_attribute] = { .visible = true, .named = true, @@ -463,6 +455,18 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym__shape_attribute] = { + .visible = false, + .named = true, + }, + [sym__base_shape_attribute] = { + .visible = true, + .named = true, + }, + [sym__shape_attr_key] = { + .visible = true, + .named = true, + }, [sym__style_attribute] = { .visible = true, .named = true, @@ -519,10 +523,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = false, }, - [aux_sym__shape_block_repeat1] = { - .visible = false, - .named = false, - }, [aux_sym__style_attribute_block_repeat1] = { .visible = false, .named = false, @@ -591,10 +591,10 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [22] = 22, [23] = 23, [24] = 24, - [25] = 25, + [25] = 21, [26] = 26, [27] = 27, - [28] = 21, + [28] = 28, [29] = 29, [30] = 30, [31] = 31, @@ -645,8 +645,6 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [76] = 76, [77] = 77, [78] = 78, - [79] = 79, - [80] = 80, }; static inline bool aux_sym_string_token2_character_set_1(int32_t c) { @@ -689,8 +687,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { switch (state) { case 0: if (eof) ADVANCE(86); - if (lookahead == 0 || - lookahead == '\n') ADVANCE(194); + if (lookahead == '\n') ADVANCE(194); if (lookahead == '"') ADVANCE(187); if (lookahead == '#') ADVANCE(193); if (lookahead == '\'') ADVANCE(184); @@ -699,7 +696,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '3') ADVANCE(93); if (lookahead == ':') ADVANCE(179); if (lookahead == ';') ADVANCE(195); - if (lookahead == '<') ADVANCE(5); + if (lookahead == '<') ADVANCE(11); if (lookahead == '`') ADVANCE(190); if (lookahead == 'a') ADVANCE(122); if (lookahead == 'b') ADVANCE(123); @@ -716,289 +713,27 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ('_' <= lookahead && lookahead <= 'z')) ADVANCE(144); END_STATE(); case 1: - if (lookahead == ' ') ADVANCE(1); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); - END_STATE(); - case 2: - if (lookahead == '"') ADVANCE(187); - if (lookahead == '#') ADVANCE(189); - if (aux_sym_string_token2_character_set_1(lookahead)) ADVANCE(188); - if (lookahead != 0 && - lookahead != '\n') ADVANCE(189); - END_STATE(); - case 3: - if (lookahead == '#') ADVANCE(186); - if (lookahead == '\'') ADVANCE(184); - if (aux_sym_string_token2_character_set_1(lookahead)) ADVANCE(185); - if (lookahead != 0 && - lookahead != '\n') ADVANCE(186); - END_STATE(); - case 4: - if (lookahead == '#') ADVANCE(192); - if (lookahead == '`') ADVANCE(190); - if (aux_sym_string_token2_character_set_1(lookahead)) ADVANCE(191); - if (lookahead != 0 && - lookahead != '\n') ADVANCE(192); - END_STATE(); - case 5: - if (lookahead == '-') ADVANCE(181); - END_STATE(); - case 6: - if (lookahead == '-') ADVANCE(181); - if (lookahead == '>') ADVANCE(180); - END_STATE(); - case 7: - if (lookahead == '-') ADVANCE(181); - if (lookahead == '>') ADVANCE(180); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(144); - END_STATE(); - case 8: - if (lookahead == '-') ADVANCE(16); - END_STATE(); - case 9: - if (lookahead == '-') ADVANCE(63); - END_STATE(); - case 10: - if (lookahead == 'a') ADVANCE(17); - END_STATE(); - case 11: - if (lookahead == 'a') ADVANCE(64); - END_STATE(); - case 12: - if (lookahead == 'a') ADVANCE(22); - END_STATE(); - case 13: - if (lookahead == 'a') ADVANCE(70); - END_STATE(); - case 14: - if (lookahead == 'a') ADVANCE(25); - END_STATE(); - case 15: - if (lookahead == 'c') ADVANCE(150); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); - END_STATE(); - case 16: - if (lookahead == 'c') ADVANCE(55); - END_STATE(); - case 17: - if (lookahead == 'c') ADVANCE(38); - END_STATE(); - case 18: - if (lookahead == 'd') ADVANCE(152); - END_STATE(); - case 19: - if (lookahead == 'd') ADVANCE(28); - END_STATE(); - case 20: - if (lookahead == 'd') ADVANCE(172); - END_STATE(); - case 21: - if (lookahead == 'd') ADVANCE(147); - if (lookahead == 'w') ADVANCE(149); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); - END_STATE(); - case 22: - if (lookahead == 'd') ADVANCE(52); - END_STATE(); - case 23: - if (lookahead == 'd') ADVANCE(11); - if (lookahead == 'w') ADVANCE(39); - END_STATE(); - case 24: - if (lookahead == 'd') ADVANCE(68); - END_STATE(); - case 25: - if (lookahead == 'd') ADVANCE(35); - END_STATE(); - case 26: - if (lookahead == 'e') ADVANCE(159); - END_STATE(); - case 27: - if (lookahead == 'e') ADVANCE(170); - END_STATE(); - case 28: - if (lookahead == 'e') ADVANCE(62); - END_STATE(); - case 29: - if (lookahead == 'e') ADVANCE(20); - END_STATE(); - case 30: - if (lookahead == 'h') ADVANCE(162); - END_STATE(); - case 31: - if (lookahead == 'h') ADVANCE(160); - END_STATE(); - case 32: - if (lookahead == 'h') ADVANCE(12); - if (lookahead == 't') ADVANCE(61); - END_STATE(); - case 33: - if (lookahead == 'i') ADVANCE(44); - if (lookahead == 'o') ADVANCE(48); - END_STATE(); - case 34: - if (lookahead == 'i') ADVANCE(47); - END_STATE(); - case 35: - if (lookahead == 'i') ADVANCE(72); - END_STATE(); - case 36: - if (lookahead == 'i') ADVANCE(57); - END_STATE(); - case 37: - if (lookahead == 'i') ADVANCE(49); - END_STATE(); - case 38: - if (lookahead == 'i') ADVANCE(66); - END_STATE(); - case 39: - if (lookahead == 'i') ADVANCE(24); - END_STATE(); - case 40: - if (lookahead == 'k') ADVANCE(174); - END_STATE(); - case 41: - if (lookahead == 'k') ADVANCE(26); - END_STATE(); - case 42: - if (lookahead == 'l') ADVANCE(156); - END_STATE(); - case 43: - if (lookahead == 'l') ADVANCE(69); - END_STATE(); - case 44: - if (lookahead == 'l') ADVANCE(42); - END_STATE(); - case 45: - if (lookahead == 'l') ADVANCE(27); - END_STATE(); - case 46: - if (lookahead == 'l') ADVANCE(54); - END_STATE(); - case 47: - if (lookahead == 'm') ADVANCE(13); - END_STATE(); - case 48: - if (lookahead == 'n') ADVANCE(67); - END_STATE(); - case 49: - if (lookahead == 'n') ADVANCE(40); - END_STATE(); - case 50: - if (lookahead == 'n') ADVANCE(34); - END_STATE(); - case 51: - if (lookahead == 'o') ADVANCE(60); - END_STATE(); - case 52: - if (lookahead == 'o') ADVANCE(73); - END_STATE(); - case 53: - if (lookahead == 'o') ADVANCE(41); - END_STATE(); - case 54: - if (lookahead == 'o') ADVANCE(59); - END_STATE(); - case 55: - if (lookahead == 'o') ADVANCE(46); - END_STATE(); - case 56: - if (lookahead == 'p') ADVANCE(10); - END_STATE(); - case 57: - if (lookahead == 'p') ADVANCE(45); - END_STATE(); - case 58: - if (lookahead == 'r') ADVANCE(148); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); - END_STATE(); - case 59: - if (lookahead == 'r') ADVANCE(166); - END_STATE(); - case 60: - if (lookahead == 'r') ADVANCE(19); - END_STATE(); - case 61: - if (lookahead == 'r') ADVANCE(53); - END_STATE(); - case 62: - if (lookahead == 'r') ADVANCE(9); - END_STATE(); - case 63: - if (lookahead == 'r') ADVANCE(14); - END_STATE(); - case 64: - if (lookahead == 's') ADVANCE(30); - END_STATE(); - case 65: - if (lookahead == 's') ADVANCE(164); - END_STATE(); - case 66: - if (lookahead == 't') ADVANCE(74); - END_STATE(); - case 67: - if (lookahead == 't') ADVANCE(8); - END_STATE(); - case 68: - if (lookahead == 't') ADVANCE(31); - END_STATE(); - case 69: - if (lookahead == 't') ADVANCE(36); - END_STATE(); - case 70: - if (lookahead == 't') ADVANCE(29); - END_STATE(); - case 71: - if (lookahead == 'u') ADVANCE(43); - END_STATE(); - case 72: - if (lookahead == 'u') ADVANCE(65); - END_STATE(); - case 73: - if (lookahead == 'w') ADVANCE(168); - END_STATE(); - case 74: - if (lookahead == 'y') ADVANCE(154); - END_STATE(); - case 75: - if (lookahead == 0 || - lookahead == '\n') ADVANCE(194); + if (lookahead == '\n') ADVANCE(194); if (lookahead == '"') ADVANCE(187); if (lookahead == '#') ADVANCE(193); if (lookahead == '\'') ADVANCE(184); if (lookahead == '-') ADVANCE(81); if (lookahead == '`') ADVANCE(190); if (lookahead == '}') ADVANCE(88); - if (sym__eol_character_set_1(lookahead)) SKIP(75) + if (sym__eol_character_set_1(lookahead)) SKIP(1) if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('_' <= lookahead && lookahead <= 'z')) ADVANCE(144); END_STATE(); - case 76: - if (lookahead == 0 || - lookahead == '\n') ADVANCE(194); + case 2: + if (lookahead == '\n') ADVANCE(194); if (lookahead == '"') ADVANCE(187); if (lookahead == '#') ADVANCE(193); if (lookahead == '\'') ADVANCE(184); if (lookahead == ';') ADVANCE(195); if (lookahead == '`') ADVANCE(190); if (lookahead == '{') ADVANCE(87); - if (sym__eol_character_set_1(lookahead)) SKIP(76) + if (sym__eol_character_set_1(lookahead)) SKIP(2) if (lookahead == '!' || lookahead == '-' || ('0' <= lookahead && lookahead <= '9') || @@ -1006,68 +741,324 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ('A' <= lookahead && lookahead <= 'Z') || ('_' <= lookahead && lookahead <= 'z')) ADVANCE(183); END_STATE(); - case 77: - if (lookahead == 0 || - lookahead == '\n') ADVANCE(194); + case 3: + if (lookahead == '\n') ADVANCE(194); if (lookahead == '#') ADVANCE(193); if (lookahead == '-') ADVANCE(177); if (lookahead == '.') ADVANCE(182); - if (lookahead == '3') ADVANCE(18); + if (lookahead == '3') ADVANCE(24); if (lookahead == ':') ADVANCE(179); if (lookahead == ';') ADVANCE(195); - if (lookahead == '<') ADVANCE(5); - if (lookahead == 'a') ADVANCE(50); - if (lookahead == 'b') ADVANCE(51); - if (lookahead == 'f') ADVANCE(33); - if (lookahead == 'l') ADVANCE(37); - if (lookahead == 'm') ADVANCE(71); - if (lookahead == 'o') ADVANCE(56); - if (lookahead == 's') ADVANCE(32); + if (lookahead == '<') ADVANCE(11); + if (lookahead == 'a') ADVANCE(56); + if (lookahead == 'b') ADVANCE(57); + if (lookahead == 'f') ADVANCE(39); + if (lookahead == 'l') ADVANCE(43); + if (lookahead == 'm') ADVANCE(77); + if (lookahead == 'o') ADVANCE(62); + if (lookahead == 's') ADVANCE(38); if (lookahead == '{') ADVANCE(87); if (lookahead == '}') ADVANCE(88); - if (sym__eol_character_set_1(lookahead)) SKIP(78) + if (sym__eol_character_set_1(lookahead)) SKIP(4) END_STATE(); - case 78: - if (lookahead == 0 || - lookahead == '\n') ADVANCE(194); + case 4: + if (lookahead == '\n') ADVANCE(194); if (lookahead == '#') ADVANCE(193); - if (lookahead == '-') ADVANCE(6); + if (lookahead == '-') ADVANCE(12); if (lookahead == '.') ADVANCE(182); - if (lookahead == '3') ADVANCE(18); + if (lookahead == '3') ADVANCE(24); if (lookahead == ':') ADVANCE(179); if (lookahead == ';') ADVANCE(195); - if (lookahead == '<') ADVANCE(5); - if (lookahead == 'a') ADVANCE(50); - if (lookahead == 'b') ADVANCE(51); - if (lookahead == 'f') ADVANCE(33); - if (lookahead == 'l') ADVANCE(37); - if (lookahead == 'm') ADVANCE(71); - if (lookahead == 'o') ADVANCE(56); - if (lookahead == 's') ADVANCE(32); + if (lookahead == '<') ADVANCE(11); + if (lookahead == 'a') ADVANCE(56); + if (lookahead == 'b') ADVANCE(57); + if (lookahead == 'f') ADVANCE(39); + if (lookahead == 'l') ADVANCE(43); + if (lookahead == 'm') ADVANCE(77); + if (lookahead == 'o') ADVANCE(62); + if (lookahead == 's') ADVANCE(38); if (lookahead == '{') ADVANCE(87); if (lookahead == '}') ADVANCE(88); - if (sym__eol_character_set_1(lookahead)) SKIP(78) + if (sym__eol_character_set_1(lookahead)) SKIP(4) END_STATE(); - case 79: - if (lookahead == 0 || - lookahead == '\n') ADVANCE(194); + case 5: + if (lookahead == '\n') ADVANCE(194); if (lookahead == '#') ADVANCE(193); if (lookahead == '-') ADVANCE(176); if (lookahead == '.') ADVANCE(182); if (lookahead == ':') ADVANCE(179); if (lookahead == ';') ADVANCE(195); if (lookahead == '{') ADVANCE(87); - if (sym__eol_character_set_1(lookahead)) SKIP(80) + if (sym__eol_character_set_1(lookahead)) SKIP(6) END_STATE(); - case 80: - if (lookahead == 0 || - lookahead == '\n') ADVANCE(194); + case 6: + if (lookahead == '\n') ADVANCE(194); if (lookahead == '#') ADVANCE(193); if (lookahead == '.') ADVANCE(182); if (lookahead == ':') ADVANCE(179); if (lookahead == ';') ADVANCE(195); if (lookahead == '{') ADVANCE(87); - if (sym__eol_character_set_1(lookahead)) SKIP(80) + if (sym__eol_character_set_1(lookahead)) SKIP(6) + END_STATE(); + case 7: + if (lookahead == ' ') ADVANCE(7); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 8: + if (lookahead == '"') ADVANCE(187); + if (lookahead == '#') ADVANCE(189); + if (aux_sym_string_token2_character_set_1(lookahead)) ADVANCE(188); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(189); + END_STATE(); + case 9: + if (lookahead == '#') ADVANCE(186); + if (lookahead == '\'') ADVANCE(184); + if (aux_sym_string_token2_character_set_1(lookahead)) ADVANCE(185); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(186); + END_STATE(); + case 10: + if (lookahead == '#') ADVANCE(192); + if (lookahead == '`') ADVANCE(190); + if (aux_sym_string_token2_character_set_1(lookahead)) ADVANCE(191); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(192); + END_STATE(); + case 11: + if (lookahead == '-') ADVANCE(181); + END_STATE(); + case 12: + if (lookahead == '-') ADVANCE(181); + if (lookahead == '>') ADVANCE(180); + END_STATE(); + case 13: + if (lookahead == '-') ADVANCE(181); + if (lookahead == '>') ADVANCE(180); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(144); + END_STATE(); + case 14: + if (lookahead == '-') ADVANCE(22); + END_STATE(); + case 15: + if (lookahead == '-') ADVANCE(69); + END_STATE(); + case 16: + if (lookahead == 'a') ADVANCE(23); + END_STATE(); + case 17: + if (lookahead == 'a') ADVANCE(70); + END_STATE(); + case 18: + if (lookahead == 'a') ADVANCE(28); + END_STATE(); + case 19: + if (lookahead == 'a') ADVANCE(76); + END_STATE(); + case 20: + if (lookahead == 'a') ADVANCE(31); + END_STATE(); + case 21: + if (lookahead == 'c') ADVANCE(150); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 22: + if (lookahead == 'c') ADVANCE(61); + END_STATE(); + case 23: + if (lookahead == 'c') ADVANCE(44); + END_STATE(); + case 24: + if (lookahead == 'd') ADVANCE(152); + END_STATE(); + case 25: + if (lookahead == 'd') ADVANCE(34); + END_STATE(); + case 26: + if (lookahead == 'd') ADVANCE(172); + END_STATE(); + case 27: + if (lookahead == 'd') ADVANCE(147); + if (lookahead == 'w') ADVANCE(149); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 28: + if (lookahead == 'd') ADVANCE(58); + END_STATE(); + case 29: + if (lookahead == 'd') ADVANCE(17); + if (lookahead == 'w') ADVANCE(45); + END_STATE(); + case 30: + if (lookahead == 'd') ADVANCE(74); + END_STATE(); + case 31: + if (lookahead == 'd') ADVANCE(41); + END_STATE(); + case 32: + if (lookahead == 'e') ADVANCE(159); + END_STATE(); + case 33: + if (lookahead == 'e') ADVANCE(170); + END_STATE(); + case 34: + if (lookahead == 'e') ADVANCE(68); + END_STATE(); + case 35: + if (lookahead == 'e') ADVANCE(26); + END_STATE(); + case 36: + if (lookahead == 'h') ADVANCE(162); + END_STATE(); + case 37: + if (lookahead == 'h') ADVANCE(160); + END_STATE(); + case 38: + if (lookahead == 'h') ADVANCE(18); + if (lookahead == 't') ADVANCE(67); + END_STATE(); + case 39: + if (lookahead == 'i') ADVANCE(50); + if (lookahead == 'o') ADVANCE(54); + END_STATE(); + case 40: + if (lookahead == 'i') ADVANCE(53); + END_STATE(); + case 41: + if (lookahead == 'i') ADVANCE(78); + END_STATE(); + case 42: + if (lookahead == 'i') ADVANCE(63); + END_STATE(); + case 43: + if (lookahead == 'i') ADVANCE(55); + END_STATE(); + case 44: + if (lookahead == 'i') ADVANCE(72); + END_STATE(); + case 45: + if (lookahead == 'i') ADVANCE(30); + END_STATE(); + case 46: + if (lookahead == 'k') ADVANCE(174); + END_STATE(); + case 47: + if (lookahead == 'k') ADVANCE(32); + END_STATE(); + case 48: + if (lookahead == 'l') ADVANCE(156); + END_STATE(); + case 49: + if (lookahead == 'l') ADVANCE(75); + END_STATE(); + case 50: + if (lookahead == 'l') ADVANCE(48); + END_STATE(); + case 51: + if (lookahead == 'l') ADVANCE(33); + END_STATE(); + case 52: + if (lookahead == 'l') ADVANCE(60); + END_STATE(); + case 53: + if (lookahead == 'm') ADVANCE(19); + END_STATE(); + case 54: + if (lookahead == 'n') ADVANCE(73); + END_STATE(); + case 55: + if (lookahead == 'n') ADVANCE(46); + END_STATE(); + case 56: + if (lookahead == 'n') ADVANCE(40); + END_STATE(); + case 57: + if (lookahead == 'o') ADVANCE(66); + END_STATE(); + case 58: + if (lookahead == 'o') ADVANCE(79); + END_STATE(); + case 59: + if (lookahead == 'o') ADVANCE(47); + END_STATE(); + case 60: + if (lookahead == 'o') ADVANCE(65); + END_STATE(); + case 61: + if (lookahead == 'o') ADVANCE(52); + END_STATE(); + case 62: + if (lookahead == 'p') ADVANCE(16); + END_STATE(); + case 63: + if (lookahead == 'p') ADVANCE(51); + END_STATE(); + case 64: + if (lookahead == 'r') ADVANCE(148); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 65: + if (lookahead == 'r') ADVANCE(166); + END_STATE(); + case 66: + if (lookahead == 'r') ADVANCE(25); + END_STATE(); + case 67: + if (lookahead == 'r') ADVANCE(59); + END_STATE(); + case 68: + if (lookahead == 'r') ADVANCE(15); + END_STATE(); + case 69: + if (lookahead == 'r') ADVANCE(20); + END_STATE(); + case 70: + if (lookahead == 's') ADVANCE(36); + END_STATE(); + case 71: + if (lookahead == 's') ADVANCE(164); + END_STATE(); + case 72: + if (lookahead == 't') ADVANCE(80); + END_STATE(); + case 73: + if (lookahead == 't') ADVANCE(14); + END_STATE(); + case 74: + if (lookahead == 't') ADVANCE(37); + END_STATE(); + case 75: + if (lookahead == 't') ADVANCE(42); + END_STATE(); + case 76: + if (lookahead == 't') ADVANCE(35); + END_STATE(); + case 77: + if (lookahead == 'u') ADVANCE(49); + END_STATE(); + case 78: + if (lookahead == 'u') ADVANCE(71); + END_STATE(); + case 79: + if (lookahead == 'w') ADVANCE(168); + END_STATE(); + case 80: + if (lookahead == 'y') ADVANCE(154); END_STATE(); case 81: if (('0' <= lookahead && lookahead <= '9') || @@ -1099,17 +1090,16 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 84: if (eof) ADVANCE(86); - if (lookahead == 0 || - lookahead == '\n') ADVANCE(194); + if (lookahead == '\n') ADVANCE(194); if (lookahead == '"') ADVANCE(187); if (lookahead == '#') ADVANCE(193); if (lookahead == '\'') ADVANCE(184); - if (lookahead == '-') ADVANCE(7); + if (lookahead == '-') ADVANCE(13); if (lookahead == '.') ADVANCE(182); if (lookahead == '3') ADVANCE(93); if (lookahead == ':') ADVANCE(179); if (lookahead == ';') ADVANCE(195); - if (lookahead == '<') ADVANCE(5); + if (lookahead == '<') ADVANCE(11); if (lookahead == '`') ADVANCE(190); if (lookahead == 'a') ADVANCE(122); if (lookahead == 'b') ADVANCE(123); @@ -1127,8 +1117,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 85: if (eof) ADVANCE(86); - if (lookahead == 0 || - lookahead == '\n') ADVANCE(194); + if (lookahead == '\n') ADVANCE(194); if (lookahead == '"') ADVANCE(187); if (lookahead == '#') ADVANCE(193); if (lookahead == '\'') ADVANCE(184); @@ -1157,7 +1146,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 89: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'a') ADVANCE(92); if (('0' <= lookahead && lookahead <= '9') || @@ -1167,7 +1156,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 90: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'a') ADVANCE(96); if (('0' <= lookahead && lookahead <= '9') || @@ -1177,7 +1166,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 91: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'a') ADVANCE(139); if (('0' <= lookahead && lookahead <= '9') || @@ -1187,7 +1176,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 92: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'c') ADVANCE(111); if (('0' <= lookahead && lookahead <= '9') || @@ -1197,7 +1186,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 93: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'd') ADVANCE(153); if (('0' <= lookahead && lookahead <= '9') || @@ -1207,7 +1196,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 94: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'd') ADVANCE(101); if (('0' <= lookahead && lookahead <= '9') || @@ -1217,7 +1206,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 95: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'd') ADVANCE(173); if (('0' <= lookahead && lookahead <= '9') || @@ -1227,7 +1216,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 96: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'd') ADVANCE(124); if (('0' <= lookahead && lookahead <= '9') || @@ -1237,7 +1226,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 97: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'd') ADVANCE(108); if (('0' <= lookahead && lookahead <= '9') || @@ -1247,7 +1236,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 98: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'd') ADVANCE(137); if (('0' <= lookahead && lookahead <= '9') || @@ -1257,7 +1246,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 99: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'e') ADVANCE(158); if (('0' <= lookahead && lookahead <= '9') || @@ -1267,7 +1256,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 100: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'e') ADVANCE(171); if (('0' <= lookahead && lookahead <= '9') || @@ -1277,7 +1266,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 101: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'e') ADVANCE(132); if (('0' <= lookahead && lookahead <= '9') || @@ -1287,7 +1276,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 102: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'e') ADVANCE(95); if (('0' <= lookahead && lookahead <= '9') || @@ -1297,7 +1286,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 103: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'h') ADVANCE(163); if (('0' <= lookahead && lookahead <= '9') || @@ -1307,7 +1296,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 104: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'h') ADVANCE(161); if (('0' <= lookahead && lookahead <= '9') || @@ -1317,7 +1306,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 105: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'h') ADVANCE(90); if (lookahead == 't') ADVANCE(131); @@ -1328,7 +1317,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 106: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'i') ADVANCE(116); if (lookahead == 'o') ADVANCE(120); @@ -1339,7 +1328,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 107: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'i') ADVANCE(119); if (('0' <= lookahead && lookahead <= '9') || @@ -1349,7 +1338,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 108: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'i') ADVANCE(141); if (('0' <= lookahead && lookahead <= '9') || @@ -1359,7 +1348,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 109: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'i') ADVANCE(128); if (('0' <= lookahead && lookahead <= '9') || @@ -1369,7 +1358,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 110: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'i') ADVANCE(121); if (('0' <= lookahead && lookahead <= '9') || @@ -1379,7 +1368,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 111: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'i') ADVANCE(135); if (('0' <= lookahead && lookahead <= '9') || @@ -1389,7 +1378,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 112: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'k') ADVANCE(175); if (('0' <= lookahead && lookahead <= '9') || @@ -1399,7 +1388,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 113: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'k') ADVANCE(99); if (('0' <= lookahead && lookahead <= '9') || @@ -1409,7 +1398,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 114: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'l') ADVANCE(157); if (('0' <= lookahead && lookahead <= '9') || @@ -1419,7 +1408,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 115: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'l') ADVANCE(138); if (('0' <= lookahead && lookahead <= '9') || @@ -1429,7 +1418,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 116: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'l') ADVANCE(114); if (('0' <= lookahead && lookahead <= '9') || @@ -1439,7 +1428,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 117: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'l') ADVANCE(100); if (('0' <= lookahead && lookahead <= '9') || @@ -1449,7 +1438,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 118: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'l') ADVANCE(126); if (('0' <= lookahead && lookahead <= '9') || @@ -1459,7 +1448,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 119: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'm') ADVANCE(91); if (('0' <= lookahead && lookahead <= '9') || @@ -1469,7 +1458,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 120: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'n') ADVANCE(136); if (('0' <= lookahead && lookahead <= '9') || @@ -1479,7 +1468,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 121: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'n') ADVANCE(112); if (('0' <= lookahead && lookahead <= '9') || @@ -1489,7 +1478,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 122: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'n') ADVANCE(107); if (('0' <= lookahead && lookahead <= '9') || @@ -1499,7 +1488,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 123: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'o') ADVANCE(130); if (('0' <= lookahead && lookahead <= '9') || @@ -1509,7 +1498,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 124: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'o') ADVANCE(142); if (('0' <= lookahead && lookahead <= '9') || @@ -1519,7 +1508,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 125: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'o') ADVANCE(113); if (('0' <= lookahead && lookahead <= '9') || @@ -1529,7 +1518,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 126: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'o') ADVANCE(129); if (('0' <= lookahead && lookahead <= '9') || @@ -1539,7 +1528,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 127: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'p') ADVANCE(89); if (('0' <= lookahead && lookahead <= '9') || @@ -1549,7 +1538,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 128: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'p') ADVANCE(117); if (('0' <= lookahead && lookahead <= '9') || @@ -1559,7 +1548,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 129: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'r') ADVANCE(167); if (('0' <= lookahead && lookahead <= '9') || @@ -1569,7 +1558,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 130: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'r') ADVANCE(94); if (('0' <= lookahead && lookahead <= '9') || @@ -1579,7 +1568,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 131: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'r') ADVANCE(125); if (('0' <= lookahead && lookahead <= '9') || @@ -1589,7 +1578,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 132: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'r') ADVANCE(146); if (('0' <= lookahead && lookahead <= '9') || @@ -1599,7 +1588,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 133: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 's') ADVANCE(103); if (('0' <= lookahead && lookahead <= '9') || @@ -1609,7 +1598,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 134: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 's') ADVANCE(165); if (('0' <= lookahead && lookahead <= '9') || @@ -1619,7 +1608,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 135: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 't') ADVANCE(143); if (('0' <= lookahead && lookahead <= '9') || @@ -1629,7 +1618,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 136: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 't') ADVANCE(145); if (('0' <= lookahead && lookahead <= '9') || @@ -1639,7 +1628,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 137: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 't') ADVANCE(104); if (('0' <= lookahead && lookahead <= '9') || @@ -1649,7 +1638,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 138: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 't') ADVANCE(109); if (('0' <= lookahead && lookahead <= '9') || @@ -1659,7 +1648,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 139: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 't') ADVANCE(102); if (('0' <= lookahead && lookahead <= '9') || @@ -1669,7 +1658,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 140: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'u') ADVANCE(115); if (('0' <= lookahead && lookahead <= '9') || @@ -1679,7 +1668,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 141: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'u') ADVANCE(134); if (('0' <= lookahead && lookahead <= '9') || @@ -1689,7 +1678,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 142: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'w') ADVANCE(169); if (('0' <= lookahead && lookahead <= '9') || @@ -1699,7 +1688,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 143: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (lookahead == 'y') ADVANCE(155); if (('0' <= lookahead && lookahead <= '9') || @@ -1709,7 +1698,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 144: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1718,8 +1707,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 145: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); - if (lookahead == '-') ADVANCE(15); + if (lookahead == ' ') ADVANCE(7); + if (lookahead == '-') ADVANCE(21); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || @@ -1727,8 +1716,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 146: ACCEPT_TOKEN(sym__identifier); - if (lookahead == ' ') ADVANCE(1); - if (lookahead == '-') ADVANCE(58); + if (lookahead == ' ') ADVANCE(7); + if (lookahead == '-') ADVANCE(64); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || @@ -1778,7 +1767,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 153: ACCEPT_TOKEN(anon_sym_3d); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1790,7 +1779,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 155: ACCEPT_TOKEN(anon_sym_opacity); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1802,7 +1791,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 157: ACCEPT_TOKEN(anon_sym_fill); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1811,8 +1800,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 158: ACCEPT_TOKEN(anon_sym_stroke); - if (lookahead == ' ') ADVANCE(1); - if (lookahead == '-') ADVANCE(21); + if (lookahead == ' ') ADVANCE(7); + if (lookahead == '-') ADVANCE(27); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || @@ -1820,14 +1809,14 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 159: ACCEPT_TOKEN(anon_sym_stroke); - if (lookahead == '-') ADVANCE(23); + if (lookahead == '-') ADVANCE(29); END_STATE(); case 160: ACCEPT_TOKEN(anon_sym_stroke_DASHwidth); END_STATE(); case 161: ACCEPT_TOKEN(anon_sym_stroke_DASHwidth); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1839,7 +1828,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 163: ACCEPT_TOKEN(anon_sym_stroke_DASHdash); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1851,7 +1840,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 165: ACCEPT_TOKEN(anon_sym_border_DASHradius); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1863,7 +1852,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 167: ACCEPT_TOKEN(anon_sym_font_DASHcolor); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1875,7 +1864,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 169: ACCEPT_TOKEN(anon_sym_shadow); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1887,7 +1876,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 171: ACCEPT_TOKEN(anon_sym_multiple); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1899,7 +1888,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 173: ACCEPT_TOKEN(anon_sym_animated); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1911,7 +1900,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 175: ACCEPT_TOKEN(anon_sym_link); - if (lookahead == ' ') ADVANCE(1); + if (lookahead == ' ') ADVANCE(7); if (lookahead == '-') ADVANCE(82); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -2322,57 +2311,57 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [1] = {.lex_state = 85}, [2] = {.lex_state = 85}, [3] = {.lex_state = 85}, - [4] = {.lex_state = 85}, - [5] = {.lex_state = 77}, - [6] = {.lex_state = 77}, - [7] = {.lex_state = 77}, - [8] = {.lex_state = 75}, - [9] = {.lex_state = 77}, - [10] = {.lex_state = 75}, - [11] = {.lex_state = 75}, - [12] = {.lex_state = 77}, - [13] = {.lex_state = 76}, - [14] = {.lex_state = 75}, - [15] = {.lex_state = 75}, - [16] = {.lex_state = 0}, - [17] = {.lex_state = 75}, - [18] = {.lex_state = 0}, - [19] = {.lex_state = 75}, - [20] = {.lex_state = 75}, - [21] = {.lex_state = 77}, - [22] = {.lex_state = 0}, - [23] = {.lex_state = 76}, - [24] = {.lex_state = 75}, - [25] = {.lex_state = 0}, - [26] = {.lex_state = 0}, - [27] = {.lex_state = 76}, - [28] = {.lex_state = 79}, + [4] = {.lex_state = 1}, + [5] = {.lex_state = 1}, + [6] = {.lex_state = 1}, + [7] = {.lex_state = 85}, + [8] = {.lex_state = 3}, + [9] = {.lex_state = 3}, + [10] = {.lex_state = 3}, + [11] = {.lex_state = 3}, + [12] = {.lex_state = 3}, + [13] = {.lex_state = 1}, + [14] = {.lex_state = 1}, + [15] = {.lex_state = 2}, + [16] = {.lex_state = 1}, + [17] = {.lex_state = 0}, + [18] = {.lex_state = 1}, + [19] = {.lex_state = 0}, + [20] = {.lex_state = 1}, + [21] = {.lex_state = 3}, + [22] = {.lex_state = 1}, + [23] = {.lex_state = 0}, + [24] = {.lex_state = 0}, + [25] = {.lex_state = 5}, + [26] = {.lex_state = 2}, + [27] = {.lex_state = 2}, + [28] = {.lex_state = 0}, [29] = {.lex_state = 0}, [30] = {.lex_state = 0}, - [31] = {.lex_state = 75}, - [32] = {.lex_state = 76}, + [31] = {.lex_state = 2}, + [32] = {.lex_state = 2}, [33] = {.lex_state = 0}, [34] = {.lex_state = 0}, [35] = {.lex_state = 0}, - [36] = {.lex_state = 0}, - [37] = {.lex_state = 75}, + [36] = {.lex_state = 1}, + [37] = {.lex_state = 0}, [38] = {.lex_state = 0}, - [39] = {.lex_state = 0}, - [40] = {.lex_state = 0}, - [41] = {.lex_state = 2}, - [42] = {.lex_state = 3}, - [43] = {.lex_state = 3}, + [39] = {.lex_state = 9}, + [40] = {.lex_state = 10}, + [41] = {.lex_state = 9}, + [42] = {.lex_state = 8}, + [43] = {.lex_state = 0}, [44] = {.lex_state = 0}, - [45] = {.lex_state = 4}, - [46] = {.lex_state = 2}, + [45] = {.lex_state = 0}, + [46] = {.lex_state = 10}, [47] = {.lex_state = 0}, - [48] = {.lex_state = 2}, - [49] = {.lex_state = 3}, + [48] = {.lex_state = 8}, + [49] = {.lex_state = 8}, [50] = {.lex_state = 0}, - [51] = {.lex_state = 0}, - [52] = {.lex_state = 4}, + [51] = {.lex_state = 9}, + [52] = {.lex_state = 10}, [53] = {.lex_state = 0}, - [54] = {.lex_state = 4}, + [54] = {.lex_state = 0}, [55] = {.lex_state = 0}, [56] = {.lex_state = 0}, [57] = {.lex_state = 0}, @@ -2397,8 +2386,6 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [76] = {.lex_state = 0}, [77] = {.lex_state = 0}, [78] = {.lex_state = 0}, - [79] = {.lex_state = 0}, - [80] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2442,19 +2429,19 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_SEMI] = ACTIONS(1), }, [1] = { - [sym_source_file] = STATE(80), - [sym__root_definition] = STATE(2), - [sym_connection] = STATE(53), - [sym__connection_path] = STATE(63), - [sym_container] = STATE(53), - [sym_shape] = STATE(53), - [sym_shape_key] = STATE(16), - [sym__root_attribute] = STATE(53), - [sym__root_attr_key] = STATE(62), + [sym_source_file] = STATE(73), + [sym__root_definition] = STATE(3), + [sym_connection] = STATE(47), + [sym__connection_path] = STATE(62), + [sym_container] = STATE(47), + [sym_shape] = STATE(47), + [sym_shape_key] = STATE(17), + [sym__root_attribute] = STATE(47), + [sym__root_attr_key] = STATE(60), [sym__common_style_attr_key] = STATE(78), [sym_string] = STATE(29), - [aux_sym_source_file_repeat1] = STATE(2), - [aux_sym__connection_path_repeat1] = STATE(20), + [aux_sym_source_file_repeat1] = STATE(3), + [aux_sym__connection_path_repeat1] = STATE(22), [ts_builtin_sym_end] = ACTIONS(5), [sym__identifier] = ACTIONS(7), [anon_sym_direction] = ACTIONS(9), @@ -2482,19 +2469,58 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__eol] = ACTIONS(21), }, [2] = { - [sym__root_definition] = STATE(3), - [sym_connection] = STATE(53), - [sym__connection_path] = STATE(63), - [sym_container] = STATE(53), - [sym_shape] = STATE(53), - [sym_shape_key] = STATE(16), - [sym__root_attribute] = STATE(53), - [sym__root_attr_key] = STATE(62), + [sym__root_definition] = STATE(2), + [sym_connection] = STATE(47), + [sym__connection_path] = STATE(62), + [sym_container] = STATE(47), + [sym_shape] = STATE(47), + [sym_shape_key] = STATE(17), + [sym__root_attribute] = STATE(47), + [sym__root_attr_key] = STATE(60), [sym__common_style_attr_key] = STATE(78), [sym_string] = STATE(29), - [aux_sym_source_file_repeat1] = STATE(3), - [aux_sym__connection_path_repeat1] = STATE(20), + [aux_sym_source_file_repeat1] = STATE(2), + [aux_sym__connection_path_repeat1] = STATE(22), [ts_builtin_sym_end] = ACTIONS(23), + [sym__identifier] = ACTIONS(25), + [anon_sym_direction] = ACTIONS(28), + [anon_sym_shape] = ACTIONS(31), + [anon_sym_label] = ACTIONS(31), + [anon_sym_constraint] = ACTIONS(31), + [anon_sym_icon] = ACTIONS(31), + [anon_sym_style] = ACTIONS(31), + [anon_sym_opacity] = ACTIONS(34), + [anon_sym_fill] = ACTIONS(34), + [anon_sym_stroke] = ACTIONS(34), + [anon_sym_stroke_DASHwidth] = ACTIONS(34), + [anon_sym_stroke_DASHdash] = ACTIONS(34), + [anon_sym_border_DASHradius] = ACTIONS(34), + [anon_sym_font_DASHcolor] = ACTIONS(34), + [anon_sym_shadow] = ACTIONS(34), + [anon_sym_multiple] = ACTIONS(34), + [anon_sym_animated] = ACTIONS(34), + [anon_sym_link] = ACTIONS(34), + [sym__text_attr_key] = ACTIONS(31), + [anon_sym_SQUOTE] = ACTIONS(37), + [anon_sym_DQUOTE] = ACTIONS(40), + [anon_sym_BQUOTE] = ACTIONS(43), + [sym_line_comment] = ACTIONS(3), + [sym__eol] = ACTIONS(46), + }, + [3] = { + [sym__root_definition] = STATE(2), + [sym_connection] = STATE(47), + [sym__connection_path] = STATE(62), + [sym_container] = STATE(47), + [sym_shape] = STATE(47), + [sym_shape_key] = STATE(17), + [sym__root_attribute] = STATE(47), + [sym__root_attr_key] = STATE(60), + [sym__common_style_attr_key] = STATE(78), + [sym_string] = STATE(29), + [aux_sym_source_file_repeat1] = STATE(2), + [aux_sym__connection_path_repeat1] = STATE(22), + [ts_builtin_sym_end] = ACTIONS(49), [sym__identifier] = ACTIONS(7), [anon_sym_direction] = ACTIONS(9), [anon_sym_shape] = ACTIONS(11), @@ -2518,60 +2544,153 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DQUOTE] = ACTIONS(17), [anon_sym_BQUOTE] = ACTIONS(19), [sym_line_comment] = ACTIONS(3), - [sym__eol] = ACTIONS(25), - }, - [3] = { - [sym__root_definition] = STATE(3), - [sym_connection] = STATE(53), - [sym__connection_path] = STATE(63), - [sym_container] = STATE(53), - [sym_shape] = STATE(53), - [sym_shape_key] = STATE(16), - [sym__root_attribute] = STATE(53), - [sym__root_attr_key] = STATE(62), - [sym__common_style_attr_key] = STATE(78), - [sym_string] = STATE(29), - [aux_sym_source_file_repeat1] = STATE(3), - [aux_sym__connection_path_repeat1] = STATE(20), - [ts_builtin_sym_end] = ACTIONS(27), - [sym__identifier] = ACTIONS(29), - [anon_sym_direction] = ACTIONS(32), - [anon_sym_shape] = ACTIONS(35), - [anon_sym_label] = ACTIONS(35), - [anon_sym_constraint] = ACTIONS(35), - [anon_sym_icon] = ACTIONS(35), - [anon_sym_style] = ACTIONS(35), - [anon_sym_opacity] = ACTIONS(38), - [anon_sym_fill] = ACTIONS(38), - [anon_sym_stroke] = ACTIONS(38), - [anon_sym_stroke_DASHwidth] = ACTIONS(38), - [anon_sym_stroke_DASHdash] = ACTIONS(38), - [anon_sym_border_DASHradius] = ACTIONS(38), - [anon_sym_font_DASHcolor] = ACTIONS(38), - [anon_sym_shadow] = ACTIONS(38), - [anon_sym_multiple] = ACTIONS(38), - [anon_sym_animated] = ACTIONS(38), - [anon_sym_link] = ACTIONS(38), - [sym__text_attr_key] = ACTIONS(35), - [anon_sym_SQUOTE] = ACTIONS(41), - [anon_sym_DQUOTE] = ACTIONS(44), - [anon_sym_BQUOTE] = ACTIONS(47), - [sym_line_comment] = ACTIONS(3), - [sym__eol] = ACTIONS(50), + [sym__eol] = ACTIONS(51), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 3, + [0] = 16, ACTIONS(3), 1, sym_line_comment, - ACTIONS(53), 5, + ACTIONS(53), 1, + sym__identifier, + ACTIONS(56), 1, + anon_sym_RBRACE, + ACTIONS(61), 1, + anon_sym_style, + ACTIONS(64), 1, + anon_sym_SQUOTE, + ACTIONS(67), 1, + anon_sym_DQUOTE, + ACTIONS(70), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym__eol, + STATE(17), 1, + sym_shape_key, + STATE(22), 1, + aux_sym__connection_path_repeat1, + STATE(29), 1, + sym_string, + STATE(62), 1, + sym__connection_path, + STATE(68), 1, + sym__shape_attr_key, + STATE(4), 2, + sym__container_block_definition, + aux_sym__container_block_repeat1, + ACTIONS(58), 6, + anon_sym_shape, + anon_sym_label, + anon_sym_constraint, + anon_sym_icon, + anon_sym_width, + anon_sym_height, + STATE(44), 6, + sym_connection, + sym_container, + sym_shape, + sym__shape_attribute, + sym__base_shape_attribute, + sym__style_attribute, + [60] = 16, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(7), 1, + sym__identifier, + ACTIONS(15), 1, + anon_sym_SQUOTE, + ACTIONS(17), 1, + anon_sym_DQUOTE, + ACTIONS(19), 1, + anon_sym_BQUOTE, + ACTIONS(76), 1, + anon_sym_RBRACE, + ACTIONS(80), 1, + anon_sym_style, + ACTIONS(82), 1, + sym__eol, + STATE(17), 1, + sym_shape_key, + STATE(22), 1, + aux_sym__connection_path_repeat1, + STATE(29), 1, + sym_string, + STATE(62), 1, + sym__connection_path, + STATE(68), 1, + sym__shape_attr_key, + STATE(6), 2, + sym__container_block_definition, + aux_sym__container_block_repeat1, + ACTIONS(78), 6, + anon_sym_shape, + anon_sym_label, + anon_sym_constraint, + anon_sym_icon, + anon_sym_width, + anon_sym_height, + STATE(44), 6, + sym_connection, + sym_container, + sym_shape, + sym__shape_attribute, + sym__base_shape_attribute, + sym__style_attribute, + [120] = 16, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(7), 1, + sym__identifier, + ACTIONS(15), 1, + anon_sym_SQUOTE, + ACTIONS(17), 1, + anon_sym_DQUOTE, + ACTIONS(19), 1, + anon_sym_BQUOTE, + ACTIONS(80), 1, + anon_sym_style, + ACTIONS(84), 1, + anon_sym_RBRACE, + ACTIONS(86), 1, + sym__eol, + STATE(17), 1, + sym_shape_key, + STATE(22), 1, + aux_sym__connection_path_repeat1, + STATE(29), 1, + sym_string, + STATE(62), 1, + sym__connection_path, + STATE(68), 1, + sym__shape_attr_key, + STATE(4), 2, + sym__container_block_definition, + aux_sym__container_block_repeat1, + ACTIONS(78), 6, + anon_sym_shape, + anon_sym_label, + anon_sym_constraint, + anon_sym_icon, + anon_sym_width, + anon_sym_height, + STATE(44), 6, + sym_connection, + sym_container, + sym_shape, + sym__shape_attribute, + sym__base_shape_attribute, + sym__style_attribute, + [180] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(88), 5, ts_builtin_sym_end, anon_sym_SQUOTE, anon_sym_DQUOTE, anon_sym_BQUOTE, sym__eol, - ACTIONS(55), 19, + ACTIONS(90), 19, sym__identifier, anon_sym_direction, anon_sym_shape, @@ -2591,221 +2710,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_animated, anon_sym_link, sym__text_attr_key, - [32] = 10, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(57), 1, - anon_sym_RBRACE, - ACTIONS(59), 1, - anon_sym_3d, - ACTIONS(65), 1, - anon_sym_stroke, - ACTIONS(68), 1, - sym__eol, - STATE(5), 1, - aux_sym__style_attribute_block_repeat1, - STATE(50), 1, - sym__inner_style_attribute, - STATE(70), 1, - sym__style_attr_key, - STATE(76), 1, - sym__common_style_attr_key, - ACTIONS(62), 10, - anon_sym_opacity, - anon_sym_fill, - anon_sym_stroke_DASHwidth, - anon_sym_stroke_DASHdash, - anon_sym_border_DASHradius, - anon_sym_font_DASHcolor, - anon_sym_shadow, - anon_sym_multiple, - anon_sym_animated, - anon_sym_link, - [72] = 10, + [212] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(13), 1, anon_sym_stroke, - ACTIONS(71), 1, + ACTIONS(92), 1, anon_sym_RBRACE, - ACTIONS(73), 1, + ACTIONS(94), 1, anon_sym_3d, - ACTIONS(77), 1, - sym__eol, - STATE(5), 1, - aux_sym__style_attribute_block_repeat1, - STATE(50), 1, - sym__inner_style_attribute, - STATE(70), 1, - sym__style_attr_key, - STATE(76), 1, - sym__common_style_attr_key, - ACTIONS(75), 10, - anon_sym_opacity, - anon_sym_fill, - anon_sym_stroke_DASHwidth, - anon_sym_stroke_DASHdash, - anon_sym_border_DASHradius, - anon_sym_font_DASHcolor, - anon_sym_shadow, - anon_sym_multiple, - anon_sym_animated, - anon_sym_link, - [112] = 10, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(13), 1, - anon_sym_stroke, - ACTIONS(73), 1, - anon_sym_3d, - ACTIONS(79), 1, - anon_sym_RBRACE, - ACTIONS(81), 1, - sym__eol, - STATE(6), 1, - aux_sym__style_attribute_block_repeat1, - STATE(50), 1, - sym__inner_style_attribute, - STATE(70), 1, - sym__style_attr_key, - STATE(76), 1, - sym__common_style_attr_key, - ACTIONS(75), 10, - anon_sym_opacity, - anon_sym_fill, - anon_sym_stroke_DASHwidth, - anon_sym_stroke_DASHdash, - anon_sym_border_DASHradius, - anon_sym_font_DASHcolor, - anon_sym_shadow, - anon_sym_multiple, - anon_sym_animated, - anon_sym_link, - [152] = 14, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(15), 1, - anon_sym_SQUOTE, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(19), 1, - anon_sym_BQUOTE, - ACTIONS(83), 1, - sym__identifier, - ACTIONS(85), 1, - anon_sym_RBRACE, - ACTIONS(87), 1, - sym__eol, - STATE(16), 1, - sym_shape_key, - STATE(20), 1, - aux_sym__connection_path_repeat1, - STATE(29), 1, - sym_string, - STATE(63), 1, - sym__connection_path, - STATE(10), 2, - sym__container_block_definition, - aux_sym__container_block_repeat1, - STATE(38), 2, - sym__shape_block_definition, - aux_sym__shape_block_repeat1, - STATE(44), 3, - sym_connection, - sym_container, - sym_shape, - [199] = 7, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(13), 1, - anon_sym_stroke, - ACTIONS(73), 1, - anon_sym_3d, - STATE(68), 1, - sym__inner_style_attribute, - STATE(70), 1, - sym__style_attr_key, - STATE(76), 1, - sym__common_style_attr_key, - ACTIONS(75), 10, - anon_sym_opacity, - anon_sym_fill, - anon_sym_stroke_DASHwidth, - anon_sym_stroke_DASHdash, - anon_sym_border_DASHradius, - anon_sym_font_DASHcolor, - anon_sym_shadow, - anon_sym_multiple, - anon_sym_animated, - anon_sym_link, - [230] = 13, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(15), 1, - anon_sym_SQUOTE, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(19), 1, - anon_sym_BQUOTE, - ACTIONS(83), 1, - sym__identifier, - ACTIONS(89), 1, - anon_sym_RBRACE, - ACTIONS(91), 1, - sym__eol, - STATE(16), 1, - sym_shape_key, - STATE(20), 1, - aux_sym__connection_path_repeat1, - STATE(29), 1, - sym_string, - STATE(63), 1, - sym__connection_path, - STATE(11), 2, - sym__container_block_definition, - aux_sym__container_block_repeat1, - STATE(44), 3, - sym_connection, - sym_container, - sym_shape, - [273] = 13, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(93), 1, - sym__identifier, - ACTIONS(96), 1, - anon_sym_RBRACE, ACTIONS(98), 1, - anon_sym_SQUOTE, - ACTIONS(101), 1, - anon_sym_DQUOTE, - ACTIONS(104), 1, - anon_sym_BQUOTE, - ACTIONS(107), 1, sym__eol, - STATE(16), 1, - sym_shape_key, - STATE(20), 1, - aux_sym__connection_path_repeat1, - STATE(29), 1, - sym_string, - STATE(63), 1, - sym__connection_path, - STATE(11), 2, - sym__container_block_definition, - aux_sym__container_block_repeat1, - STATE(44), 3, - sym_connection, - sym_container, - sym_shape, - [316] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(110), 1, - anon_sym_stroke, - ACTIONS(57), 13, - anon_sym_RBRACE, - anon_sym_3d, + STATE(10), 1, + aux_sym__style_attribute_block_repeat1, + STATE(45), 1, + sym__inner_style_attribute, + STATE(67), 1, + sym__style_attr_key, + STATE(74), 1, + sym__common_style_attr_key, + ACTIONS(96), 10, anon_sym_opacity, anon_sym_fill, anon_sym_stroke_DASHwidth, @@ -2816,54 +2740,128 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_multiple, anon_sym_animated, anon_sym_link, - sym__eol, - [338] = 11, + [252] = 10, ACTIONS(3), 1, sym_line_comment, - ACTIONS(15), 1, - anon_sym_SQUOTE, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(19), 1, - anon_sym_BQUOTE, - ACTIONS(112), 1, - anon_sym_LBRACE, - ACTIONS(114), 1, - sym__unquoted_string, - STATE(34), 1, - sym_label, - STATE(51), 1, - sym_string, - STATE(56), 1, - sym__shape_block, - STATE(74), 1, - sym__container_block, - ACTIONS(116), 2, + ACTIONS(13), 1, + anon_sym_stroke, + ACTIONS(94), 1, + anon_sym_3d, + ACTIONS(100), 1, + anon_sym_RBRACE, + ACTIONS(102), 1, sym__eol, - anon_sym_SEMI, - [373] = 10, + STATE(8), 1, + aux_sym__style_attribute_block_repeat1, + STATE(45), 1, + sym__inner_style_attribute, + STATE(67), 1, + sym__style_attr_key, + STATE(74), 1, + sym__common_style_attr_key, + ACTIONS(96), 10, + anon_sym_opacity, + anon_sym_fill, + anon_sym_stroke_DASHwidth, + anon_sym_stroke_DASHdash, + anon_sym_border_DASHradius, + anon_sym_font_DASHcolor, + anon_sym_shadow, + anon_sym_multiple, + anon_sym_animated, + anon_sym_link, + [292] = 10, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(104), 1, + anon_sym_RBRACE, + ACTIONS(106), 1, + anon_sym_3d, + ACTIONS(112), 1, + anon_sym_stroke, + ACTIONS(115), 1, + sym__eol, + STATE(10), 1, + aux_sym__style_attribute_block_repeat1, + STATE(45), 1, + sym__inner_style_attribute, + STATE(67), 1, + sym__style_attr_key, + STATE(74), 1, + sym__common_style_attr_key, + ACTIONS(109), 10, + anon_sym_opacity, + anon_sym_fill, + anon_sym_stroke_DASHwidth, + anon_sym_stroke_DASHdash, + anon_sym_border_DASHradius, + anon_sym_font_DASHcolor, + anon_sym_shadow, + anon_sym_multiple, + anon_sym_animated, + anon_sym_link, + [332] = 7, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(13), 1, + anon_sym_stroke, + ACTIONS(94), 1, + anon_sym_3d, + STATE(54), 1, + sym__inner_style_attribute, + STATE(67), 1, + sym__style_attr_key, + STATE(74), 1, + sym__common_style_attr_key, + ACTIONS(96), 10, + anon_sym_opacity, + anon_sym_fill, + anon_sym_stroke_DASHwidth, + anon_sym_stroke_DASHdash, + anon_sym_border_DASHradius, + anon_sym_font_DASHcolor, + anon_sym_shadow, + anon_sym_multiple, + anon_sym_animated, + anon_sym_link, + [363] = 3, ACTIONS(3), 1, sym_line_comment, ACTIONS(118), 1, - sym__identifier, - ACTIONS(121), 1, - anon_sym_style, - ACTIONS(123), 1, + anon_sym_stroke, + ACTIONS(104), 13, + anon_sym_RBRACE, + anon_sym_3d, + anon_sym_opacity, + anon_sym_fill, + anon_sym_stroke_DASHwidth, + anon_sym_stroke_DASHdash, + anon_sym_border_DASHradius, + anon_sym_font_DASHcolor, + anon_sym_shadow, + anon_sym_multiple, + anon_sym_animated, + anon_sym_link, + sym__eol, + [385] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(122), 5, + anon_sym_RBRACE, anon_sym_SQUOTE, - ACTIONS(126), 1, anon_sym_DQUOTE, - ACTIONS(129), 1, anon_sym_BQUOTE, - STATE(18), 1, - sym_shape_key, - STATE(29), 1, - sym_string, - STATE(56), 1, - sym__style_attribute, - STATE(74), 2, - sym_container, - sym_shape, - [405] = 10, + sym__eol, + ACTIONS(120), 8, + sym__identifier, + anon_sym_shape, + anon_sym_label, + anon_sym_constraint, + anon_sym_icon, + anon_sym_style, + anon_sym_width, + anon_sym_height, + [406] = 10, ACTIONS(3), 1, sym_line_comment, ACTIONS(15), 1, @@ -2872,94 +2870,82 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DQUOTE, ACTIONS(19), 1, anon_sym_BQUOTE, - ACTIONS(121), 1, + ACTIONS(80), 1, + anon_sym_style, + ACTIONS(124), 1, + sym__identifier, + STATE(19), 1, + sym_shape_key, + STATE(29), 1, + sym_string, + STATE(63), 1, + sym__style_attribute, + STATE(70), 2, + sym_container, + sym_shape, + [438] = 10, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(15), 1, + anon_sym_SQUOTE, + ACTIONS(17), 1, + anon_sym_DQUOTE, + ACTIONS(19), 1, + anon_sym_BQUOTE, + ACTIONS(126), 1, + anon_sym_LBRACE, + ACTIONS(128), 1, + sym__unquoted_string, + STATE(37), 1, + sym_label, + STATE(50), 1, + sym_string, + STATE(70), 1, + sym__container_block, + ACTIONS(130), 2, + sym__eol, + anon_sym_SEMI, + [470] = 10, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(80), 1, anon_sym_style, ACTIONS(132), 1, sym__identifier, - STATE(18), 1, + ACTIONS(135), 1, + anon_sym_SQUOTE, + ACTIONS(138), 1, + anon_sym_DQUOTE, + ACTIONS(141), 1, + anon_sym_BQUOTE, + STATE(19), 1, sym_shape_key, STATE(29), 1, sym_string, - STATE(56), 1, + STATE(63), 1, sym__style_attribute, - STATE(74), 2, + STATE(70), 2, sym_container, sym_shape, - [437] = 9, + [502] = 8, ACTIONS(3), 1, sym_line_comment, - ACTIONS(112), 1, + ACTIONS(126), 1, anon_sym_LBRACE, - ACTIONS(134), 1, - anon_sym_COLON, - ACTIONS(136), 1, - sym_arrow, - ACTIONS(138), 1, - sym_dot, - STATE(13), 1, - sym__colon, - STATE(57), 1, - sym__container_block, - STATE(72), 1, - sym__shape_block, - ACTIONS(140), 2, - sym__eol, - anon_sym_SEMI, - [466] = 9, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(15), 1, - anon_sym_SQUOTE, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(19), 1, - anon_sym_BQUOTE, - ACTIONS(83), 1, - sym__identifier, - STATE(20), 1, - aux_sym__connection_path_repeat1, - STATE(29), 1, - sym_string, - STATE(36), 1, - sym_shape_key, - STATE(40), 1, - sym__connection_path, - [494] = 8, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(112), 1, - anon_sym_LBRACE, - ACTIONS(134), 1, - anon_sym_COLON, - ACTIONS(142), 1, - sym_dot, - STATE(13), 1, - sym__colon, - STATE(57), 1, - sym__container_block, - STATE(72), 1, - sym__shape_block, - ACTIONS(140), 2, - sym__eol, - anon_sym_SEMI, - [520] = 8, - ACTIONS(3), 1, - sym_line_comment, ACTIONS(144), 1, - sym__identifier, - ACTIONS(147), 1, - anon_sym_SQUOTE, - ACTIONS(150), 1, - anon_sym_DQUOTE, - ACTIONS(153), 1, - anon_sym_BQUOTE, - STATE(19), 1, - aux_sym__connection_path_repeat1, - STATE(29), 1, - sym_string, - STATE(75), 1, - sym_shape_key, - [545] = 8, + anon_sym_COLON, + ACTIONS(146), 1, + sym_arrow, + ACTIONS(148), 1, + sym_dot, + STATE(15), 1, + sym__colon, + STATE(55), 1, + sym__container_block, + ACTIONS(150), 2, + sym__eol, + anon_sym_SEMI, + [528] = 9, ACTIONS(3), 1, sym_line_comment, ACTIONS(15), 1, @@ -2968,41 +2954,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DQUOTE, ACTIONS(19), 1, anon_sym_BQUOTE, - ACTIONS(83), 1, + ACTIONS(152), 1, sym__identifier, - STATE(19), 1, + STATE(22), 1, aux_sym__connection_path_repeat1, STATE(29), 1, sym_string, STATE(35), 1, sym_shape_key, - [570] = 3, + STATE(38), 1, + sym__connection_path, + [556] = 7, ACTIONS(3), 1, sym_line_comment, - ACTIONS(158), 1, + ACTIONS(126), 1, + anon_sym_LBRACE, + ACTIONS(144), 1, + anon_sym_COLON, + ACTIONS(154), 1, + sym_dot, + STATE(15), 1, + sym__colon, + STATE(55), 1, + sym__container_block, + ACTIONS(150), 2, + sym__eol, + anon_sym_SEMI, + [579] = 8, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(156), 1, + sym__identifier, + ACTIONS(159), 1, + anon_sym_SQUOTE, + ACTIONS(162), 1, + anon_sym_DQUOTE, + ACTIONS(165), 1, + anon_sym_BQUOTE, + STATE(20), 1, + aux_sym__connection_path_repeat1, + STATE(29), 1, + sym_string, + STATE(76), 1, + sym_shape_key, + [604] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(170), 1, sym__dash, - ACTIONS(156), 6, + ACTIONS(168), 6, anon_sym_LBRACE, anon_sym_COLON, sym_arrow, sym_dot, sym__eol, anon_sym_SEMI, - [585] = 6, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(160), 1, - anon_sym_COLON, - ACTIONS(162), 1, - sym_arrow, - STATE(32), 1, - sym__colon, - STATE(33), 1, - aux_sym_connection_repeat1, - ACTIONS(164), 2, - sym__eol, - anon_sym_SEMI, - [605] = 7, + [619] = 8, ACTIONS(3), 1, sym_line_comment, ACTIONS(15), 1, @@ -3011,33 +3018,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DQUOTE, ACTIONS(19), 1, anon_sym_BQUOTE, - ACTIONS(166), 1, - sym__unquoted_string, - STATE(65), 1, - sym_string, - STATE(71), 1, - sym_attr_value, - [627] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(168), 6, - anon_sym_RBRACE, + ACTIONS(152), 1, sym__identifier, - anon_sym_SQUOTE, - anon_sym_DQUOTE, - anon_sym_BQUOTE, - sym__eol, - [639] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(170), 6, - anon_sym_LBRACE, - anon_sym_COLON, - sym_arrow, - sym_dot, - sym__eol, - anon_sym_SEMI, - [651] = 2, + STATE(20), 1, + aux_sym__connection_path_repeat1, + STATE(29), 1, + sym_string, + STATE(33), 1, + sym_shape_key, + [644] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(172), 6, @@ -3047,64 +3036,32 @@ static const uint16_t ts_small_parse_table[] = { sym_dot, sym__eol, anon_sym_SEMI, - [663] = 7, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(15), 1, - anon_sym_SQUOTE, - ACTIONS(17), 1, - anon_sym_DQUOTE, - ACTIONS(19), 1, - anon_sym_BQUOTE, - ACTIONS(166), 1, - sym__unquoted_string, - STATE(58), 1, - sym_attr_value, - STATE(65), 1, - sym_string, - [685] = 3, + [656] = 6, ACTIONS(3), 1, sym_line_comment, ACTIONS(174), 1, + anon_sym_COLON, + ACTIONS(176), 1, + sym_arrow, + STATE(26), 1, + sym__colon, + STATE(34), 1, + aux_sym_connection_repeat1, + ACTIONS(178), 2, + sym__eol, + anon_sym_SEMI, + [676] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(180), 1, sym__dash, - ACTIONS(156), 5, + ACTIONS(168), 5, anon_sym_LBRACE, anon_sym_COLON, sym_dot, sym__eol, anon_sym_SEMI, - [699] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(156), 6, - anon_sym_LBRACE, - anon_sym_COLON, - sym_arrow, - sym_dot, - sym__eol, - anon_sym_SEMI, - [711] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(176), 6, - anon_sym_LBRACE, - anon_sym_COLON, - sym_arrow, - sym_dot, - sym__eol, - anon_sym_SEMI, - [723] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(180), 2, - anon_sym_RBRACE, - sym__eol, - ACTIONS(178), 4, - sym__identifier, - anon_sym_SQUOTE, - anon_sym_DQUOTE, - anon_sym_BQUOTE, - [737] = 7, + [690] = 7, ACTIONS(3), 1, sym_line_comment, ACTIONS(15), 1, @@ -3113,446 +3070,497 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DQUOTE, ACTIONS(19), 1, anon_sym_BQUOTE, - ACTIONS(114), 1, + ACTIONS(128), 1, sym__unquoted_string, - STATE(51), 1, + STATE(50), 1, sym_string, - STATE(67), 1, + STATE(57), 1, sym_label, - [759] = 4, + [712] = 7, ACTIONS(3), 1, sym_line_comment, - ACTIONS(185), 1, - sym_arrow, - STATE(33), 1, - aux_sym_connection_repeat1, - ACTIONS(183), 3, - anon_sym_COLON, - sym__eol, - anon_sym_SEMI, - [774] = 5, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(112), 1, - anon_sym_LBRACE, - STATE(55), 1, - sym__shape_block, + ACTIONS(15), 1, + anon_sym_SQUOTE, + ACTIONS(17), 1, + anon_sym_DQUOTE, + ACTIONS(19), 1, + anon_sym_BQUOTE, + ACTIONS(182), 1, + sym__unquoted_string, + STATE(59), 1, + sym_string, STATE(66), 1, - sym__container_block, - ACTIONS(188), 2, - sym__eol, - anon_sym_SEMI, - [791] = 3, + sym_attr_value, + [734] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(192), 1, + ACTIONS(184), 6, + anon_sym_LBRACE, + anon_sym_COLON, + sym_arrow, sym_dot, - ACTIONS(190), 4, + sym__eol, + anon_sym_SEMI, + [746] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(168), 6, + anon_sym_LBRACE, + anon_sym_COLON, + sym_arrow, + sym_dot, + sym__eol, + anon_sym_SEMI, + [758] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(186), 6, + anon_sym_LBRACE, + anon_sym_COLON, + sym_arrow, + sym_dot, + sym__eol, + anon_sym_SEMI, + [770] = 7, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(15), 1, + anon_sym_SQUOTE, + ACTIONS(17), 1, + anon_sym_DQUOTE, + ACTIONS(19), 1, + anon_sym_BQUOTE, + ACTIONS(182), 1, + sym__unquoted_string, + STATE(59), 1, + sym_string, + STATE(69), 1, + sym_attr_value, + [792] = 7, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(15), 1, + anon_sym_SQUOTE, + ACTIONS(17), 1, + anon_sym_DQUOTE, + ACTIONS(19), 1, + anon_sym_BQUOTE, + ACTIONS(182), 1, + sym__unquoted_string, + STATE(59), 1, + sym_string, + STATE(65), 1, + sym_attr_value, + [814] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(190), 1, + sym_dot, + ACTIONS(188), 4, anon_sym_COLON, sym_arrow, sym__eol, anon_sym_SEMI, - [804] = 3, + [827] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(192), 1, + ACTIONS(194), 1, + sym_arrow, + STATE(34), 1, + aux_sym_connection_repeat1, + ACTIONS(192), 3, + anon_sym_COLON, + sym__eol, + anon_sym_SEMI, + [842] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(190), 1, sym_dot, - ACTIONS(136), 4, + ACTIONS(146), 4, anon_sym_COLON, sym_arrow, sym__eol, anon_sym_SEMI, - [817] = 2, + [855] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(194), 4, + ACTIONS(197), 4, sym__identifier, anon_sym_SQUOTE, anon_sym_DQUOTE, anon_sym_BQUOTE, - [827] = 4, + [865] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(196), 1, - anon_sym_RBRACE, - ACTIONS(198), 1, + ACTIONS(126), 1, + anon_sym_LBRACE, + STATE(64), 1, + sym__container_block, + ACTIONS(199), 2, sym__eol, - STATE(39), 2, - sym__shape_block_definition, - aux_sym__shape_block_repeat1, - [841] = 4, + anon_sym_SEMI, + [879] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(200), 1, - anon_sym_RBRACE, - ACTIONS(202), 1, - sym__eol, - STATE(39), 2, - sym__shape_block_definition, - aux_sym__shape_block_repeat1, - [855] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(183), 4, + ACTIONS(192), 4, anon_sym_COLON, sym_arrow, sym__eol, anon_sym_SEMI, - [865] = 4, - ACTIONS(205), 1, - anon_sym_DQUOTE, - ACTIONS(207), 1, - aux_sym_string_token2, - ACTIONS(209), 1, - sym_line_comment, - STATE(46), 1, - aux_sym_string_repeat2, - [878] = 4, - ACTIONS(205), 1, + [889] = 4, + ACTIONS(201), 1, anon_sym_SQUOTE, - ACTIONS(209), 1, + ACTIONS(203), 1, + aux_sym_string_token1, + ACTIONS(205), 1, sym_line_comment, + STATE(51), 1, + aux_sym_string_repeat1, + [902] = 4, + ACTIONS(201), 1, + anon_sym_BQUOTE, + ACTIONS(205), 1, + sym_line_comment, + ACTIONS(207), 1, + aux_sym_string_token3, + STATE(52), 1, + aux_sym_string_repeat3, + [915] = 4, + ACTIONS(205), 1, + sym_line_comment, + ACTIONS(209), 1, + anon_sym_SQUOTE, ACTIONS(211), 1, aux_sym_string_token1, - STATE(49), 1, + STATE(39), 1, aux_sym_string_repeat1, - [891] = 4, - ACTIONS(209), 1, - sym_line_comment, - ACTIONS(213), 1, - anon_sym_SQUOTE, - ACTIONS(215), 1, - aux_sym_string_token1, - STATE(42), 1, - aux_sym_string_repeat1, - [904] = 3, - ACTIONS(3), 1, - sym_line_comment, - STATE(24), 1, - sym__end, - ACTIONS(217), 2, - sym__eol, - anon_sym_SEMI, - [915] = 4, - ACTIONS(209), 1, - sym_line_comment, - ACTIONS(219), 1, - anon_sym_BQUOTE, - ACTIONS(221), 1, - aux_sym_string_token3, - STATE(45), 1, - aux_sym_string_repeat3, [928] = 4, - ACTIONS(209), 1, + ACTIONS(205), 1, sym_line_comment, - ACTIONS(224), 1, + ACTIONS(209), 1, anon_sym_DQUOTE, - ACTIONS(226), 1, + ACTIONS(213), 1, aux_sym_string_token2, - STATE(46), 1, + STATE(49), 1, aux_sym_string_repeat2, [941] = 4, ACTIONS(3), 1, sym_line_comment, - ACTIONS(229), 1, + ACTIONS(215), 1, anon_sym_COLON, - ACTIONS(231), 1, + ACTIONS(217), 1, sym_dot, - STATE(64), 1, + STATE(53), 1, sym__colon, - [954] = 4, - ACTIONS(209), 1, + [954] = 3, + ACTIONS(3), 1, sym_line_comment, - ACTIONS(213), 1, - anon_sym_DQUOTE, - ACTIONS(233), 1, - aux_sym_string_token2, - STATE(41), 1, - aux_sym_string_repeat2, - [967] = 4, - ACTIONS(209), 1, - sym_line_comment, - ACTIONS(235), 1, - anon_sym_SQUOTE, - ACTIONS(237), 1, - aux_sym_string_token1, - STATE(49), 1, - aux_sym_string_repeat1, - [980] = 3, + STATE(13), 1, + sym__end, + ACTIONS(219), 2, + sym__eol, + anon_sym_SEMI, + [965] = 3, ACTIONS(3), 1, sym_line_comment, STATE(12), 1, sym__end, - ACTIONS(240), 2, + ACTIONS(221), 2, sym__eol, anon_sym_SEMI, - [991] = 2, + [976] = 4, + ACTIONS(205), 1, + sym_line_comment, + ACTIONS(209), 1, + anon_sym_BQUOTE, + ACTIONS(223), 1, + aux_sym_string_token3, + STATE(40), 1, + aux_sym_string_repeat3, + [989] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(242), 3, - anon_sym_LBRACE, + STATE(7), 1, + sym__end, + ACTIONS(225), 2, sym__eol, anon_sym_SEMI, [1000] = 4, - ACTIONS(209), 1, + ACTIONS(205), 1, sym_line_comment, - ACTIONS(213), 1, - anon_sym_BQUOTE, - ACTIONS(244), 1, - aux_sym_string_token3, - STATE(54), 1, - aux_sym_string_repeat3, - [1013] = 3, + ACTIONS(227), 1, + anon_sym_DQUOTE, + ACTIONS(229), 1, + aux_sym_string_token2, + STATE(48), 1, + aux_sym_string_repeat2, + [1013] = 4, + ACTIONS(201), 1, + anon_sym_DQUOTE, + ACTIONS(205), 1, + sym_line_comment, + ACTIONS(232), 1, + aux_sym_string_token2, + STATE(48), 1, + aux_sym_string_repeat2, + [1026] = 2, ACTIONS(3), 1, sym_line_comment, - STATE(4), 1, - sym__end, - ACTIONS(246), 2, + ACTIONS(234), 3, + anon_sym_LBRACE, sym__eol, anon_sym_SEMI, - [1024] = 4, + [1035] = 4, ACTIONS(205), 1, - anon_sym_BQUOTE, - ACTIONS(209), 1, sym_line_comment, - ACTIONS(248), 1, + ACTIONS(236), 1, + anon_sym_SQUOTE, + ACTIONS(238), 1, + aux_sym_string_token1, + STATE(51), 1, + aux_sym_string_repeat1, + [1048] = 4, + ACTIONS(205), 1, + sym_line_comment, + ACTIONS(241), 1, + anon_sym_BQUOTE, + ACTIONS(243), 1, aux_sym_string_token3, - STATE(45), 1, + STATE(52), 1, aux_sym_string_repeat3, - [1037] = 2, + [1061] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(246), 1, + anon_sym_LBRACE, + STATE(54), 1, + sym__style_attribute_block, + [1071] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(248), 2, + sym__eol, + anon_sym_SEMI, + [1079] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(250), 2, sym__eol, anon_sym_SEMI, - [1045] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(188), 2, - sym__eol, - anon_sym_SEMI, - [1053] = 2, + [1087] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(252), 2, sym__eol, anon_sym_SEMI, - [1061] = 2, + [1095] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(254), 2, sym__eol, anon_sym_SEMI, - [1069] = 2, + [1103] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(256), 2, sym__eol, anon_sym_SEMI, - [1077] = 2, + [1111] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(258), 2, sym__eol, anon_sym_SEMI, - [1085] = 2, + [1119] = 3, ACTIONS(3), 1, sym_line_comment, - ACTIONS(260), 2, - sym__eol, - anon_sym_SEMI, - [1093] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(262), 1, + ACTIONS(260), 1, anon_sym_COLON, STATE(27), 1, sym__colon, - [1103] = 3, + [1129] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(162), 1, + ACTIONS(262), 2, + sym__eol, + anon_sym_SEMI, + [1137] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(176), 1, sym_arrow, - STATE(22), 1, + STATE(24), 1, aux_sym_connection_repeat1, - [1113] = 3, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(264), 1, - anon_sym_LBRACE, - STATE(68), 1, - sym__style_attribute_block, - [1123] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(266), 2, - sym__eol, - anon_sym_SEMI, - [1131] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(268), 2, - sym__eol, - anon_sym_SEMI, - [1139] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(270), 2, - sym__eol, - anon_sym_SEMI, [1147] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(272), 2, + ACTIONS(199), 2, sym__eol, anon_sym_SEMI, [1155] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(264), 2, + sym__eol, + anon_sym_SEMI, + [1163] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(266), 2, + sym__eol, + anon_sym_SEMI, + [1171] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(268), 2, + sym__eol, + anon_sym_SEMI, + [1179] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(270), 1, + anon_sym_COLON, + STATE(32), 1, + sym__colon, + [1189] = 3, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(272), 1, + anon_sym_COLON, + STATE(31), 1, + sym__colon, + [1199] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(274), 2, sym__eol, anon_sym_SEMI, - [1163] = 3, + [1207] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(276), 1, - anon_sym_COLON, - STATE(23), 1, - sym__colon, - [1173] = 2, + ACTIONS(276), 2, + sym__eol, + anon_sym_SEMI, + [1215] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(278), 2, sym__eol, anon_sym_SEMI, - [1181] = 2, + [1223] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(116), 2, - sym__eol, - anon_sym_SEMI, - [1189] = 2, + ACTIONS(280), 1, + anon_sym_COLON, + [1230] = 2, ACTIONS(3), 1, sym_line_comment, - ACTIONS(280), 2, - sym__eol, - anon_sym_SEMI, - [1197] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(282), 2, - sym__eol, - anon_sym_SEMI, - [1205] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(192), 1, - sym_dot, - [1212] = 2, + ACTIONS(282), 1, + ts_builtin_sym_end, + [1237] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(284), 1, anon_sym_COLON, - [1219] = 2, + [1244] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(286), 1, anon_sym_COLON, - [1226] = 2, + [1251] = 2, + ACTIONS(3), 1, + sym_line_comment, + ACTIONS(190), 1, + sym_dot, + [1258] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(288), 1, anon_sym_COLON, - [1233] = 2, + [1265] = 2, ACTIONS(3), 1, sym_line_comment, ACTIONS(290), 1, anon_sym_COLON, - [1240] = 2, - ACTIONS(3), 1, - sym_line_comment, - ACTIONS(292), 1, - ts_builtin_sym_end, }; static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(4)] = 0, - [SMALL_STATE(5)] = 32, - [SMALL_STATE(6)] = 72, - [SMALL_STATE(7)] = 112, - [SMALL_STATE(8)] = 152, - [SMALL_STATE(9)] = 199, - [SMALL_STATE(10)] = 230, - [SMALL_STATE(11)] = 273, - [SMALL_STATE(12)] = 316, - [SMALL_STATE(13)] = 338, - [SMALL_STATE(14)] = 373, - [SMALL_STATE(15)] = 405, - [SMALL_STATE(16)] = 437, - [SMALL_STATE(17)] = 466, - [SMALL_STATE(18)] = 494, - [SMALL_STATE(19)] = 520, - [SMALL_STATE(20)] = 545, - [SMALL_STATE(21)] = 570, - [SMALL_STATE(22)] = 585, - [SMALL_STATE(23)] = 605, - [SMALL_STATE(24)] = 627, - [SMALL_STATE(25)] = 639, - [SMALL_STATE(26)] = 651, - [SMALL_STATE(27)] = 663, - [SMALL_STATE(28)] = 685, - [SMALL_STATE(29)] = 699, - [SMALL_STATE(30)] = 711, - [SMALL_STATE(31)] = 723, - [SMALL_STATE(32)] = 737, - [SMALL_STATE(33)] = 759, - [SMALL_STATE(34)] = 774, - [SMALL_STATE(35)] = 791, - [SMALL_STATE(36)] = 804, - [SMALL_STATE(37)] = 817, - [SMALL_STATE(38)] = 827, - [SMALL_STATE(39)] = 841, - [SMALL_STATE(40)] = 855, - [SMALL_STATE(41)] = 865, - [SMALL_STATE(42)] = 878, - [SMALL_STATE(43)] = 891, - [SMALL_STATE(44)] = 904, - [SMALL_STATE(45)] = 915, - [SMALL_STATE(46)] = 928, - [SMALL_STATE(47)] = 941, - [SMALL_STATE(48)] = 954, - [SMALL_STATE(49)] = 967, - [SMALL_STATE(50)] = 980, - [SMALL_STATE(51)] = 991, - [SMALL_STATE(52)] = 1000, - [SMALL_STATE(53)] = 1013, - [SMALL_STATE(54)] = 1024, - [SMALL_STATE(55)] = 1037, - [SMALL_STATE(56)] = 1045, - [SMALL_STATE(57)] = 1053, - [SMALL_STATE(58)] = 1061, - [SMALL_STATE(59)] = 1069, - [SMALL_STATE(60)] = 1077, - [SMALL_STATE(61)] = 1085, - [SMALL_STATE(62)] = 1093, - [SMALL_STATE(63)] = 1103, - [SMALL_STATE(64)] = 1113, - [SMALL_STATE(65)] = 1123, - [SMALL_STATE(66)] = 1131, - [SMALL_STATE(67)] = 1139, - [SMALL_STATE(68)] = 1147, - [SMALL_STATE(69)] = 1155, - [SMALL_STATE(70)] = 1163, - [SMALL_STATE(71)] = 1173, - [SMALL_STATE(72)] = 1181, - [SMALL_STATE(73)] = 1189, - [SMALL_STATE(74)] = 1197, - [SMALL_STATE(75)] = 1205, - [SMALL_STATE(76)] = 1212, - [SMALL_STATE(77)] = 1219, - [SMALL_STATE(78)] = 1226, - [SMALL_STATE(79)] = 1233, - [SMALL_STATE(80)] = 1240, + [SMALL_STATE(5)] = 60, + [SMALL_STATE(6)] = 120, + [SMALL_STATE(7)] = 180, + [SMALL_STATE(8)] = 212, + [SMALL_STATE(9)] = 252, + [SMALL_STATE(10)] = 292, + [SMALL_STATE(11)] = 332, + [SMALL_STATE(12)] = 363, + [SMALL_STATE(13)] = 385, + [SMALL_STATE(14)] = 406, + [SMALL_STATE(15)] = 438, + [SMALL_STATE(16)] = 470, + [SMALL_STATE(17)] = 502, + [SMALL_STATE(18)] = 528, + [SMALL_STATE(19)] = 556, + [SMALL_STATE(20)] = 579, + [SMALL_STATE(21)] = 604, + [SMALL_STATE(22)] = 619, + [SMALL_STATE(23)] = 644, + [SMALL_STATE(24)] = 656, + [SMALL_STATE(25)] = 676, + [SMALL_STATE(26)] = 690, + [SMALL_STATE(27)] = 712, + [SMALL_STATE(28)] = 734, + [SMALL_STATE(29)] = 746, + [SMALL_STATE(30)] = 758, + [SMALL_STATE(31)] = 770, + [SMALL_STATE(32)] = 792, + [SMALL_STATE(33)] = 814, + [SMALL_STATE(34)] = 827, + [SMALL_STATE(35)] = 842, + [SMALL_STATE(36)] = 855, + [SMALL_STATE(37)] = 865, + [SMALL_STATE(38)] = 879, + [SMALL_STATE(39)] = 889, + [SMALL_STATE(40)] = 902, + [SMALL_STATE(41)] = 915, + [SMALL_STATE(42)] = 928, + [SMALL_STATE(43)] = 941, + [SMALL_STATE(44)] = 954, + [SMALL_STATE(45)] = 965, + [SMALL_STATE(46)] = 976, + [SMALL_STATE(47)] = 989, + [SMALL_STATE(48)] = 1000, + [SMALL_STATE(49)] = 1013, + [SMALL_STATE(50)] = 1026, + [SMALL_STATE(51)] = 1035, + [SMALL_STATE(52)] = 1048, + [SMALL_STATE(53)] = 1061, + [SMALL_STATE(54)] = 1071, + [SMALL_STATE(55)] = 1079, + [SMALL_STATE(56)] = 1087, + [SMALL_STATE(57)] = 1095, + [SMALL_STATE(58)] = 1103, + [SMALL_STATE(59)] = 1111, + [SMALL_STATE(60)] = 1119, + [SMALL_STATE(61)] = 1129, + [SMALL_STATE(62)] = 1137, + [SMALL_STATE(63)] = 1147, + [SMALL_STATE(64)] = 1155, + [SMALL_STATE(65)] = 1163, + [SMALL_STATE(66)] = 1171, + [SMALL_STATE(67)] = 1179, + [SMALL_STATE(68)] = 1189, + [SMALL_STATE(69)] = 1199, + [SMALL_STATE(70)] = 1207, + [SMALL_STATE(71)] = 1215, + [SMALL_STATE(72)] = 1223, + [SMALL_STATE(73)] = 1230, + [SMALL_STATE(74)] = 1237, + [SMALL_STATE(75)] = 1244, + [SMALL_STATE(76)] = 1251, + [SMALL_STATE(77)] = 1258, + [SMALL_STATE(78)] = 1265, }; static const TSParseActionEntry ts_parse_actions[] = { @@ -3561,133 +3569,132 @@ static const TSParseActionEntry ts_parse_actions[] = { [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 0), [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), - [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(79), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [23] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1), - [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [27] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), - [29] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(21), - [32] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(77), - [35] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(78), - [38] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(79), - [41] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(43), - [44] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(48), - [47] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(52), - [50] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(3), - [53] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__root_definition, 2), - [55] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__root_definition, 2), - [57] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), - [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), SHIFT_REPEAT(76), - [62] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), SHIFT_REPEAT(79), - [65] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), SHIFT_REPEAT(79), - [68] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), SHIFT_REPEAT(5), - [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), - [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [79] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [83] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [85] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [87] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [89] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [93] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(21), - [96] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__container_block_repeat1, 2), - [98] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(43), - [101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(48), - [104] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(52), - [107] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(11), - [110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), - [112] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [116] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shape, 2), - [118] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__connection_path_repeat1, 2, .production_id = 2), SHIFT(28), - [121] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), - [123] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2, .production_id = 2), SHIFT(43), - [126] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2, .production_id = 2), SHIFT(48), - [129] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2, .production_id = 2), SHIFT(52), - [132] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), - [134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__connection_path, 1), - [138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [140] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shape, 1), - [142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [144] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2), SHIFT_REPEAT(28), - [147] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2), SHIFT_REPEAT(43), - [150] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2), SHIFT_REPEAT(48), - [153] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2), SHIFT_REPEAT(52), - [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shape_key, 1), - [158] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), - [160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [164] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_connection, 2), - [166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [168] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__container_block_definition, 2), - [170] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2), - [172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shape_key, 2), + [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [23] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), + [25] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(21), + [28] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(72), + [31] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(78), + [34] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(77), + [37] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(41), + [40] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(42), + [43] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(46), + [46] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2), SHIFT_REPEAT(2), + [49] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1), + [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [53] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(21), + [56] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__container_block_repeat1, 2), + [58] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(75), + [61] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(43), + [64] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(41), + [67] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(42), + [70] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(46), + [73] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__container_block_repeat1, 2), SHIFT_REPEAT(4), + [76] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [78] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [80] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), + [82] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [84] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [86] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [88] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__root_definition, 2), + [90] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__root_definition, 2), + [92] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [94] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [98] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), + [106] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), SHIFT_REPEAT(74), + [109] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), SHIFT_REPEAT(77), + [112] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), SHIFT_REPEAT(77), + [115] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), SHIFT_REPEAT(10), + [118] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__style_attribute_block_repeat1, 2), + [120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__container_block_definition, 2), + [122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__container_block_definition, 2), + [124] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), + [126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shape, 2), + [132] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__connection_path_repeat1, 2, .production_id = 2), SHIFT(25), + [135] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2, .production_id = 2), SHIFT(41), + [138] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2, .production_id = 2), SHIFT(42), + [141] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2, .production_id = 2), SHIFT(46), + [144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [146] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__connection_path, 1), + [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shape, 1), + [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [156] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2), SHIFT_REPEAT(25), + [159] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2), SHIFT_REPEAT(41), + [162] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2), SHIFT_REPEAT(42), + [165] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2), SHIFT_REPEAT(46), + [168] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shape_key, 1), + [170] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), + [172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2), [174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3), - [178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__container_block_definition, 1), - [180] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym__container_block_definition, 1), REDUCE(sym__shape_block_definition, 1), - [183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_connection_repeat1, 2), - [185] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_connection_repeat1, 2), SHIFT_REPEAT(17), - [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shape, 3), - [190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__connection_path, 2), - [192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [194] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2, .production_id = 2), - [196] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__shape_block_repeat1, 2), - [202] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__shape_block_repeat1, 2), SHIFT_REPEAT(39), - [205] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), - [207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [209] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), - [211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [213] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), - [215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), - [217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat3, 2), - [221] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat3, 2), SHIFT_REPEAT(45), - [224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat2, 2), - [226] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat2, 2), SHIFT_REPEAT(46), - [229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2), - [237] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2), SHIFT_REPEAT(49), - [240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_label, 1), - [244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shape, 4), - [252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_container, 2, .production_id = 2), - [254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__root_attribute, 3), - [256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__container_block, 3), - [258] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__shape_block, 2), - [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__shape_block, 3), - [262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [266] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr_value, 1), - [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_container, 4, .production_id = 2), - [270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_connection, 4), - [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__style_attribute, 3), - [274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__style_attribute_block, 3), - [276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__inner_style_attribute, 3), - [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__style_attribute_block, 2), - [282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_container, 3, .production_id = 2), + [176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_connection, 2), + [180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shape_key, 2), + [186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3), + [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__connection_path, 2), + [190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_connection_repeat1, 2), + [194] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_connection_repeat1, 2), SHIFT_REPEAT(18), + [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__connection_path_repeat1, 2, .production_id = 2), + [199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shape, 3), + [201] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), + [203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [205] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), + [207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [209] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), + [211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [223] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat2, 2), + [229] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat2, 2), SHIFT_REPEAT(48), + [232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [234] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_label, 1), + [236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2), + [238] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2), SHIFT_REPEAT(51), + [241] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat3, 2), + [243] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat3, 2), SHIFT_REPEAT(52), + [246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__style_attribute, 3), + [250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_container, 2, .production_id = 2), + [252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__style_attribute_block, 3), + [254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_connection, 4), + [256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__container_block, 2), + [258] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr_value, 1), + [260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [262] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__container_block, 3), + [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_container, 4, .production_id = 2), + [266] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__inner_style_attribute, 3), + [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__root_attribute, 3), + [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__base_shape_attribute, 3), + [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_container, 3, .production_id = 2), + [278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__style_attribute_block, 2), + [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__root_attr_key, 1), + [282] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__style_attr_key, 1), - [286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__root_attr_key, 1), - [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__root_attr_key, 1, .production_id = 1), - [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__common_style_attr_key, 1), - [292] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__shape_attr_key, 1), + [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__common_style_attr_key, 1), + [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__root_attr_key, 1, .production_id = 1), }; #ifdef __cplusplus diff --git a/test/corpus/attributes.txt b/test/corpus/attributes.txt index 733a6ec..9017546 100644 --- a/test/corpus/attributes.txt +++ b/test/corpus/attributes.txt @@ -114,3 +114,115 @@ foo.style: { ) ) ) + +================================================================================ +Container attributes +================================================================================ +foo: { + shape: oval + label: Baz + constraint: primary-key + icon: pathto + width: 100 + height: 200 +} + +-------------------------------------------------------------------------------- + +(source_file + (container + (container_key) + (block + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + ) + ) +) + +================================================================================ +Container style attributes +================================================================================ +foo: { + style.opacity: 5 + style.fill: red + style.stroke: red + style.stroke-width: 5 + style.stroke-dash: 4 + style.border-radius: 1 + style.font-color: red + style.shadow: true + style.multiple: true + style.animated: true + style.link: https://to +} + +-------------------------------------------------------------------------------- + +(source_file + (container + (container_key) + (block + (attribute (attr_key) (dot) (attribute (attr_key) (attr_value))) + (attribute (attr_key) (dot) (attribute (attr_key) (attr_value))) + (attribute (attr_key) (dot) (attribute (attr_key) (attr_value))) + (attribute (attr_key) (dot) (attribute (attr_key) (attr_value))) + (attribute (attr_key) (dot) (attribute (attr_key) (attr_value))) + (attribute (attr_key) (dot) (attribute (attr_key) (attr_value))) + (attribute (attr_key) (dot) (attribute (attr_key) (attr_value))) + (attribute (attr_key) (dot) (attribute (attr_key) (attr_value))) + (attribute (attr_key) (dot) (attribute (attr_key) (attr_value))) + (attribute (attr_key) (dot) (attribute (attr_key) (attr_value))) + (attribute (attr_key) (dot) (attribute (attr_key) (attr_value))) + ) + ) +) + +================================================================================ +Block style attributes inside a container +================================================================================ +foo: { + style: { + opacity: 5 + fill: red + stroke: red + stroke-width: 5 + stroke-dash: 4 + border-radius: 1 + font-color: red + shadow: true + multiple: true + animated: true + link: https://to + } +} + +-------------------------------------------------------------------------------- + +(source_file + (container + (container_key) + (block + (attribute + (attr_key) + (block + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + (attribute (attr_key) (attr_value)) + ) + ) + ) + ) +) + diff --git a/test/corpus/shape.txt b/test/corpus/shape.txt index 16a0489..cf52896 100644 --- a/test/corpus/shape.txt +++ b/test/corpus/shape.txt @@ -78,32 +78,6 @@ bar : Foo Bar; baz (shape (shape_key)) ) -================================================================================ -Shape block -================================================================================ - -foo: {} -bar {} - --------------------------------------------------------------------------------- - -(source_file - (shape (shape_key) (block)) - (shape (shape_key) (block)) -) - -================================================================================ -Labeled shape block -================================================================================ - -foo: Foo {} - --------------------------------------------------------------------------------- - -(source_file - (shape (shape_key) (label) (block)) -) - ================================================================================ Use quoted string as shape key and label ================================================================================ diff --git a/test/highlight/keyword.d2 b/test/highlight/attribute.d2 similarity index 95% rename from test/highlight/keyword.d2 rename to test/highlight/attribute.d2 index 72044c1..58f878a 100644 --- a/test/highlight/keyword.d2 +++ b/test/highlight/attribute.d2 @@ -6,7 +6,7 @@ direction: right; shape: oval # <- error -# ^ error +# ^ string baaaz.style: { # <- variable diff --git a/tree-sitter-d2.wasm b/tree-sitter-d2.wasm index 07e54749327db76a4897a4040ef5cb72eed7fc78..609a0111088564c286b2066b776e87661ae38007 100755 GIT binary patch literal 25898 zcmeHw33wGn_HUiOHwmQcvLid(gv||*MHG;wRf4#W`!*9J2@(Sdgy60OK}8W|QA9w+ z9TgN6_YGHc#sw9(al>uIbx?5`WybeAr@OklI>{Yp-v4{w`@Z*XtnNC$I`uoJPE}V` z-`kC3`AUXhxq7}TYub!8__u83p#zM7+mH9D1+R#ul+)>cfYE1fu_dO}@g zO|@T#rYa}ZtiW;dQbeize0bm~x8Trp>(bKG;ArWDvdNQ6C)Cx{PFJc$U2R20>GaCF zx{BJ;@B4BGz{d#Fc(&r$D?>#Pvp8CE|iTg3{Fx$#-EbXFUoEHi_P5Qw_G^-}gg;(oaPE z*PuY$BI0)g1Mw>nw;FM)h>r~pO1Fu)(NO&?;zy=*yNHh%=K2wA_cc>GN5qRw>0A+i zF{PJ?xXF|*5b^fi1G|@txXpOARK)j8-4!B!X}nq~;`gTXMiH+xrK?1I#~4~I;^#(O zE8<;7TqoiirtSkG)*G)L5pjz#v|hxYjPlbWE;Gu{iFlC_Ul4JjQQj!x-KKPth_@Rz z-V*TvBfcx*4W{m95oeoW@rj5(3^n~L;`yfZD-kyvLt90>!-(5Ne9DMFi@3qq-7ex= zroHuhasRG0%5y~gz<4!R#Dzxr5)q#>;sO!tjq>FpZZn3KiukorULoT3MqDXkI0$bP z@j6p?m59$8=G7vGqi(H;kDJnUw(1GkXGvX&Aei-(zh~JoA_)5eFP3cwTH?e{SRd*Z6-X0@;-J+i$69EuJPtX}447E^5-F;32yY-DA&T!$<5ja@6QC-roD{JGNxpe&hE);J||pKIG6p9Cr8-M;>+bF~=Tv z{0V>jQ|XCiCrv1?n0WG}%2TQ)PpPh%TK6S=MPE}r&7$*YHqD{)=>oct=F&xUG0me( zXg*y^m(c=RNQ-DOT~1ff61tL>(p9vKmeUHlny#U1X(e4p*V7GjBi%$d(=D`$Zl&Ak zc3Mqq=nlG**3w;cH{C<)=w7;y?xzRnL3)TDrbp;edW;^Y_4EWiNl($!^b9>q8|XQD zp8iaKp%>^ydWl}9jr0n=O0Ur-dY#^&H|Z^UoBm4g(7W^=y-y#|X8MpmqL1kl`jq}g zpV1cjoW7t(9TyjII-8$)%xV0p%sSq%1Jf8x$P`z#$Zy?IYu#SC0`#kDQQ&k2pi|0) zLgBcKtDkrL!p*9xMZ5OtJlA#ekzBW+ncEzv!l3f-surm(UHyu`LO0c>P#3!1-I#Tl z!+TF5^BgiR&Kq$4g@I?0`IR%zAoB%ho<`;y&OC+8C0zSSWPW4h31mL!%z6jzwMwVQ zcvO`3HU*Hk0NQYSw<@o2JkC$3DzEeS+RWolmWuKKd;p;9A(=-U{WzF7P>#22JQ{iW z5r_Yp`^_)OJnHC&*_PL@BttlDRwbEcIR8_P%RB^*x7ajC{T0qU60#28KjT1+BdiMU zbNDY!uJ`Yg8Uv(y~&*SBl7@PyAPSiICF1kWwV0w zs1WujcVIg2PRIYtH?3I5tUXIIj=n?eaaZN#Ph1o9?1$*BmIck$IQ-Y#Kk>29UE^rs zkp7&w+BsRf-V^KtyLT67?ndT5&fJAeN1WHzBu2G z^Da2whVzTu)LW4mh4U(L@_R(#TF2`H;1+hYsXqx^BXLNzX^BtT4CIXWB%I++=K!J- z2cd1dRK_3O5`%PJCX>lW%47vGPaL5m!HB{ckNG+Tlzy#NCNj(JzY zW7zyamEb6sdTnNfxx!1Q`B(iRnX4SV!Y7ccjz5<+#&UhjDC$<3Z+tV%8apc0|>$l<09=y!B9l z8wl-H96z2;<|8B3ALr^4=CPT@vFb}4eU-$g-#CQDyBBH_w52}Cu}NT~#$^^d-a4Zg z1+t$}=HSBqD3)1If*nksR%DkLN216scJvbC&t;CcL*UL82D{Ypo-yN8y3_j*qiVk6 zbqF*Uizb7YINq~Hby0}UbG)vB>cSAb*zsO4stZE&BFF0ys9qKhmyZ=UYY8`t!Nvy6 zr45@k&(W6(@5gZLLdP2!@Ximx3$R)Q;3Wcn0?qRsZ>b6Nybzs(p%$oK9D=hQZ?#dq zDD?Id@pdtL3lN?1lK@u)K%?%@ZRq~_j-DG@nuX~tFn?hHa!6WR*iZ1j9xGb_UJ%y) zjl4gbP@f;7{~~XvKy{9QpQ8Rh$-CAxX?BQiC+{|co)@COlJ~TsofV?Lkk>h&tru_$ zX#YXp^@iX#;-E14GkGfw`mX@xX0-|G``9*U{zTqW#?(JW^K%L6pg_~d{tnF_$r~Dg z+XKaMnIFj8Jpg|V!ENNdWH^5b(eKF{9jN{z1ivG1j{y8R1ivNkIaB|q5Zy{%_dxYW z0l$P(e<$w_)6gG6^c(WBf$BB^zk=%5yh&cK0DLb5-yrWsWBy%1`MP+Wyp1MU?}X?k z@>&E0e+|Lc$m<<|Z-?Nk*%I4L1*VWgznl`pJ^Cam%2bB3}q7&|4Q6b!% z@%@3TH{kwn17+ejVJRQmK*9dCB=Z{SXYrLcZ(`(5?0IU@@>$$EK1;3q6CYc*d6wGx zV!POFSvt?Z6_CAb{xekY3_QzVaC2Z~_s;Q>8#E4sY~ME`^AtKjzl;puvb}_}+>yM9 zjNJFUfDB(R`I$d+7(U>;5wpw6cT$hyR`=1U0iuK3sI-1WI$2urIHmI*#%=M#l<%MT zSkUZYYVM1L55tDsHE}TI*5i3(2Br^WZBr^WZBr^WZBr^WZBr^WZ zBr^WZB-~LRjiBJmFx^_=XA8MG%$8*CK-Zyh*saK|7WQDI??lyic_32}>GcreH=dc* z_>RBG4+syRk8so3iSI%g=DSe2EyZ0Z>Bnz>%0BH=l9OL2Eqy;cq7H)}Kc&MR;`$<2P)55Bx1u$9`ZjM`c zu%U(fNI#gH+35=G7>*E&gZD`?c()Z@Ha6{4p7%dAc;}+I6v~U;c zbvZ3upR{mY!osz23->g%u$J^aIW1h5v;d#2He3_8aCbuscapw4r-hYlVN0wZ;In1n z>bQlw8d|u6^j$eET${82pDhb3;uh96w6KQs+NLdh7JN;YEy;)_Oy$>*UXBWKUnA=Z z@6MK!H=DOSysCiC`>R=Eu--H^BW;Peui;jJ`)blx3HRs0n#KF z!`~ImiF>EaWdS*Sv?2rEaIwp*X&9N?NUzChVY$D)8ee67y%LR|Zz6%}w#lV&ld{DzJ| zSeh`fC}H4=xB*#IZ38!xzBQ+TE7`!8==UH*3ljzqvZ&i-O|=c&M0!rlAQGC*!1Vx^oUkOFM>_Ki1ZaX>Cd+5&#~zdtcYF& zn|>kb%X8A71^Vx!;Gb>N&y2Bi-X>o_dT~zjGi~y-Z1Qts6<|IGeCO^X_KRZUwd7FGb=><8-PqWESx5>|nk#pWAzl8KrxZSpf>=n^C@1+;kmJ5_noU|4BjvnJdOqp7IZ11T6u-{35AJB8ZX1{$Gr)P4Jq zMooyB<-BdSPM_xDF@?15$;_>rVE&`e{3n~aEXK@vo4HocaPg!-S{E^MnrTwPLlex0`^-n!%tyzV zId3yh(p4^=Axi5G%-o>~=0Et%huO?W#+W&8Gf&i&F0PZbZqLkJEM}kXAe``2)eic= zh8mv#TVeEU)#28oRcuY4oVfT7i}}NO+n)(~qKikM(z=c7b;GGO8|~JJTl|#ksFKWn ztk@ljEm^ULr5JdZ^GEI4%vcba+nw>4H16kh?+|XsUgI+@^}eo`1$~C;iyF{-{7@WJ z@l@LZ@kikfa{X2^d0|Oy=7gZ3eM>SY=+cH+A5Crq1hT3nJjR-e$2D{i_NrVH@|px)cXgB59A!0NplnqD88hTG8-eB%

l#*$RF%_7aANo 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 F{|nFKIQ;+s literal 25891 zcmeHw33OFO)^6={Zvy1h4f8xDVG;om5K-n*2_PyCZ96?*j3jCdBoKm1YfBJR1XM;v zMMXpe8AL@zMGbUy=ypi zcAa}JisGr0NZ^yoE}1^DtfG9&u%sgdb;v%4W(XvjagGq@I5Rkdqc}&<4Cl;bqO{_o zR8i5S(n*z7(~Hh6o?4oiAsCcJMb*XUPAm;$*`Assh&9?46_r(#lvR~Zs4hBhTE&Fw zvdRjt4owzLqG1Ea$x09nPGPn=#7(WjT(~ZLavj@ z&iP<2HAspk};M%<;v6;^y(i<<_S()S>e=fWP&Dl!GLhp?-)wi;|hoITK#F45v| z{f)Rxi{JG#;&LtSv*HRZzB#~@uF~R%hZ%8=7Jss(>$SMmGH=r2SGIJs7U$a1Em~Y; zskUlymo2T;;#TYP4lVAtUhUN4_m=quE&gJuUeV$_EAGSE^;+C# zyM2=uw^`-QUa9qJixwAJ<*i!WW5rr6F0;xzw7B0I+Ns4WZRrbITxsjRqD6la?$Y8N zw(i@}y6bWA8XN{lb=URzt*Df#=dCj{%GAFwfKvjqQ7X-zcgxw@%X-A z?atQXTFX+;>TlXFZ^*p#&?>>k0J+xo{0f!Ade9#d`4jwXe*zge})lo+u zGpca(n6bx>JMQ=s#-Di7?@v3ur1Zk_iIXOOL0{5Wboq=Lnn_pCESgPM(p7Xd&7o^( zF3qF)bS+&+*V6)8NQ-DOEup1!1Kmi==q9?EZlUFLE8Rx7(+awSR??lciteJ-bT_S` zwR8`yqxH0bHqyPciSDEO=>ghI57I;QFm0hn=uvu%w$kJD1U*T$w2hvk?X-iQrf29` z+DXsR^YkZrfnKDS=w*6^UZvOQb=pO5(3|uYy-n}XpXptCkKU&bXgBSl4{0xbL?6>9 z^eKHtpVO0$i_18fmz}D0GGC8*jym$Vx!qT}j{dqjC|i&hO9dIgPa`HN1D`=TQ~F(o|R!R5J$WL7rQ ztDjLXk$S<&eF1LYkM&8ujLbuvfj#xUKn6C{1B|fFcFz0>nJk>2$N48#c@CMMIkOX) zFFErpGT(6K8D!>jrKgcOz{n0{zTnJuWZvS;Q^>r{nQh2$=Q%2`Fga3jHHL0P2H0*< zh~uHTysmC06wMUFjf#(UX_^8kGq%V$2Z4B`|+Td^(Nx!H1a8EtR6}M=W z;iFUQ9eICHt_^902R((t)V+>c;Q15j)6Ldo(5Lq~a8NL{>P8=3>8Q3wb%Wo!j|4aW z25vrsb8)Dp$n~1{BY3;QQG*QcIv>2ZlF| zT;qew9kt%7-tBw)vG#T`dkYY~^@9eM8lX=1SEsvwrz2PUmTq>`VaEJj2IMYrBiIk{ z{w7EDFyJb`_A*E9uw8wpkKX90E=F~w20ual8yt1JZPFb+y3|qkSagMtE^*XwLvXtf zE_PH41Ky^=&%wILQ7dizTYYq)qgGgSxk0&A($x2`{iwgdQNs*)i&p$XcWLhk_E#ug zkEO$aHyg##sp}lo*MK+q;I)q0Y5QcEkIu((ZB%dc!Fi7AXTTeLaIT}Cvh|nx=rxXN zV^o)D@GCeq$59(?I~V)t)sAXsR2OORYp7o3sO465p^skasHd&11wK04Q3o4>>wR#R zquLwrIv>2kQHLAwS`GdMre-=SWx)9w{03l+qqbX1^L+FGse_E_Tp#?6RDl7n(IEH# zucU?=aE=fDLh3n7dbN-KOsc0*y~+oFA~nQ-SNh;TNF8Fp*&5sjOFxpzG2kp8{DD*- z176`@kKgIJvIN~K8LVsdn3;b0{YG-8=KT)Fz9+TX4oi)X?kCmUSUW&`p|k4WNDVaL zZ$9`PsYV9;)d#;Nm21FXH261E-$$yG0e|+vzmi&I&HtoPz9_yS^}OxYfB5KMNHsJB zKl3R96H3-3PxU)zN_8Yw&wm`hrw11Mc_1&k46=gZ@pUy#9PfYK?XE zJB|JW=%=J^w&=IGBYL<0-p8i+F3ItbNPLN4@k`1_A>Y>JU%9RgjJ_uMx#sFqn0kj$ zWsfLKb;kKuZBc%TTHCnR*FN{)aJ1E-<0lB+KA}$GXzNRoA8XPfg{jttvm?$wgYzSj zd-3GUi!JtuAb<;e`k4LbQkdFJ@G{FkL;FOI{Sx5(OKR6ax~);PPt z9>kP;sG)b_W1}2s1i@O9-Nb>zeYVfO(vI@{c%S5ZhO2JB_G-UIr=)y8>{e5WPr`Sp zX|sguIjucPX1T7LjpVuw8oG@FM{;xAMy|>>!~6w&YG(2n5DpJ{DCK9!_cwVSivcG8 z3G(?SkG@vjO#UO}pS5!b9j%Tq1?Wlisd#jfX>C2#jHHvKxSClkL*o+SJc5<+$=iE%b?SzHT^QA}-d1%#ujz-Z`W& z#pOI%UH~mexZ1yWA#h}^g+D{!pjr#>K-g}Dw;`Z8bp~i}QC>Xg-9_>(Q=_is>&^5U z=(jh$8t^ioL+U<-RXC0aqH7kt$k0ZDW2>rCJGfZ|e}JtxI3}Y+DVeT%U;NDlYG|eYQ4jG2HP?IOFUybSnqILneyOV zTmB3+Zt@H@^~7fN?QmYk_U=_AS2e&=!2PASINS|-i}MCDdW*voibq1ejtp;cFxhxC zu$_B_TOZk}If>ldTs`Kt5tw8to~GJaY_f1+W%Jb~8#I)SaLRGb8ukik^|JIbGI}%d z5;A%>fEnd&s(A9~P1T=}(VHsnW4)<*4jH|v+KG(bRH5&@O%?hJ4q!FBk26iO5H!8P zGmvnFa0i&UU+z2JY(Gp4IYjHTA&(R)63qBpbl!cbdS-p(*@6%+M1gw`DZ6jtyZay7`I4;7XyG2VfZd000gMp~Yr+BTX>A* z6B#Y6iCX|;#KP*Zg~!t^JWBHMj27;WTL5Fk!d+ntThlE(LUL+74%D4si9BIStVG9qZTi8tU;fxmUh+BZq5ev74Ej*NN;Q^8l zWwfw@Eqopt2lyPZaBJAYgXtFTC;4DT3%AEDz~_jCd*ET^FaOFp9kExaVx-mE6JNQ_ZNnnccnLx z`Y}YO_FLip`nlona^}R7hSc?j96m;R2E6{w4!2@+iwjoljU@R7UH|>{7VrLQebx8Z z8`1b{ZBL+j)a0_T$xZ1dH;~+v(d5mxQD=D_wj|c38^Z?fO*gP!M*tbxbW_a0;+TOO z!Ui^`8(2qjW5yONiy2rHGq5ylU_-irdq{4`Xy8UR@D;}0bkV|?0d!d~>^k7#$R-%} zwItVPG;l-Az=D_obXj0P2Rcy$Ye=rkXkaND_&R98^)UnJvcP~2aH0n8CV5Xr1508C zu8SE!mjwoNU=ua4n&jGy1{TK*TpKfhE(;9kxF%}gE|P098dwxFFh6DhT^1P7VNKM) zDw20+G@t|5&=|~%8926R*tHE<`%)fo*e;1>KP805Jz1L(5AfDUS+23C^1E29Cu z?0pj$xF%)*T^1P7F-_FK9VAy}G;kfaAY@=p%mBJ9FrY)4sDTwE@62f6+L(c>V+PP= zfdRxH@qPF0Bv)oMFrN+lHRz(NVg}G78uYGQ`7+N zhbuA~m>V-NJ7xe~78uY0Q`Eq6lDB6xa7E0(te63GSztiNOHl*2ki0FUfthSzUoZw& z#0;Rz0s}f+iW<0?kXh%s>P1l-k~JYGVB8v49^j zNPLzq^Wv%c!;H(L{4=5<1^UZA6(~$;f!iD0&Tb@mb4K_77^S~FN{`+O=(P}~zrl;x z>i7P#DE%L!^ysXBUJFtBr6iYS^!`%N^AksNv%f4#KO@A>`6&4kk_gu_1Vev_l3yAn zzdS_F`6&5fk~d@|pAPcD|BU@Z?7?MKjD2#Q?2LxkuOvCAes=H8fW6E$2i*lERxH%u?zFf`(buOrT zGIee})Dt}Fk|_20A!^P?sV|c=n6hy_l;>(n3|dQbiOh(N+j${&&PUlVm6xZpGv(;i zL8`Sp$Hi+>N!g8cn$+V#k=LkmqK%pmGRyg>*-PZ5F5at3$}Y^@v>xWOJ?8%%WiAde zb3V#^k(|!o-X>)}GdHV;*+fDAE6Q9HV&;65xmsTA;!TL8?99x~>tQ~_^ZCpu^VuP0 z&PSQ6{Z8b8BX9T@Uj~9`ngj=2Jt=oR2bJ zC?~miZzw5SGIRR~vqyJ4PI&3Cl{_w8LwVm92Ja}I!VhV&{mW@h;vgq-y*GeYm7ktk#4ee2wI!8`O z=kmWOhkg&}r$8)6xvBuBb6CAgx@msj73z2sWlZ>$*JER*?X^`2>zhUc_1m`k)z;B5(`TAi^GiEt%CpnS!nUDQm1>~y{qP7@ z>>jnMcY3xrPsf+*a=4549g{NQ;te(XzO2L@$H`BkeqJ(C9|cFvoKsU%yP&3~VV<*L z&QUb$#MEKhUwM+NYV2%1#YMoGpJ2!3$*#KE;?TL*=1+9-ZLZN7@2XoZeuAs!+B_z} zcUI>(7vIeq{c*1P&E_#u@7nxWSIx0?$GCW?Vf4|ZU)g-2tFEv*m>bvGJf`TkR_AC} z&9pcM@g0jR7yAptInq^kTb&WE`oQAo(O+$Tn5!09ouRJ!%;G~_b(h5lyXtzIKhjkT zZT<)s-|rY(gIqkQH2K3_^{LGdbg}g|IELXWTX%q~*4li3SKVUs{an0tVe}7m)jW&$ zb@33+;D@;CCX4rR@g1hYd%J3b#e2Ex7mFY4;z_yD>FKI#tjuI9u~j5(BHPmb$Pi7 zp;k~Kjx~L}&CM8hzL9PD!R;Z0ObNLjtrdD{2_u9;EWVC+G9{e-}e*Bs+ zr!npGv9lugdJ@hIl-zB3Zl{Q=jmlMWtadXG+{$>DqISN6>=O$(X-AR2N4v=?2X-4j zeTO5yY2uJ?Rj#|K2_-_m(@Tux4%9ye#4XAE5U?G;Rq3GQ|Np-{@_r}wJN}s%epJ)| zZ|K$cOR?W~Kh6GD?DT)($6}|PdWLylGu{ojX!e?~_ZyWLkZL_H32QyOtRK~l^NuK2` zTq2*iY~+Q?9h*86S&a3uDZ~goAB;)IZ*5l$!Ll2tsV*&HTxRf^+vp3|w5n1)-Fqn+Vz zl}==P)7~%bH$+&@e)IwG{k-l;nIO^YL3tYDuMCcq z2%=akUqd_=M<8z1P=SU%12l+(RMzUEA?}I8B_b<^y80CdN(5L8b<+?#ahOD$#ZY$* z@mE{}B*HC*diYxXC892d4$=^RN;n(TR5Pn-C5z%qUk-CJZQ%4I8)(}tg4tP+*Kf}UP6|Fo( zm*9bNJBtjpNL!BWm~fb1yA2+hXlS^Gc&@kRNRPEfXo$_W!s8DO)e0YLDG~p%+BOg4 zS=9m$Gc@*8fHjv03R!QvhjG_6!lEG?Gm`3{eqZ!;Ce=re5nI0Aq~j zLj#F`j_bY{VA+vAt-E0qgIlz+A^)LjAcAZFId#&ptaxisNytpKsj1#OE=M*Q_ULzHA)p@~=L=T+`mhsF#P{AoLjbRabEejwDV+N{G{N z?18qC=!d={ag^wY<8Uzo$KLSN5q-tc=ygX7KtJ_Hjb5UUI23*DjfU5H&s*-tXy4W6 zTk4vaJhwH|Eqik=Jj1%8W4oE-WN`2lnhnB6;Mc1%ne;cIsVma0r2Yt~Ie(^Zr$9cfJixoI_ z5G!%)2p_m_@^MsRmFX3Gt)$ys4ZY5K6&kKrkfEsIajr4!cAc~MJux3FzCMQkGn<29 zd8n~$Te%S!w=zq&(rcsTkGI|8n__k?*Jj<49^!ti%{(%^TG#KBcU^c_#L>_nf?8fb zJOZhs>CcCOb*W~x0*h;e$)c(B%S~tj~kC#v}8`G#J1_Fkk8hS z9pFibXK?I+KW{a(Wjl4*^N}*k^>BzkDPDw5fp{6mF5*=jyTfC`$a^Ju274V?KISXo zK9n@r8<6tETe{?6U1HnO2GR)ej%l~me-~(1@ji~-uqF_$Q(LkJQi0fuV;A4L*Vmr_ z>mWYEv6C2y<1oJtTQ3k_;Mhg<#F0Jr{QnA4p7;xn)?@3J1U5qKGk)3r_zu13t#X!u zxx0$}ICjGt#-3URo;f4L-+g`Vy{^XYk6PbrndSZ|X3Ne6TmDO|{I{5lUA&$lR^N%q zNh4eTvWfevJvPwE+%`|j@9mTxjW(?9~q-99YB7KU4fB#7g zMLHR28q!jv2a#Sw`Ua_?BSb#ZV5G4~XCqBTnt?PA=|-dtNRJ^si}X6uhe$slWhaDa zjnoyXAJPz{u}G&O6(dz3U5YdZX))3Yqzy=qB0Y<=3u!mf=SbfpVd{$%QcI+cNZpY7 zAPqzshBOLkJkl9R6OhW0rXpR6Gz)1S(o&>bk?um;fb<~JR;2An&m+Bx^fprDgMQ#U zU0wgxhi6naY^ZCQVGh~gXmO+9iN3zh_(jNs|6}ryrs37(=?5mkhp&y4+9E@nSH`c#H5XByf74;BAU56o>It)2J z55}ElD6U?PcSquiJqoezF^IAYvBHf(G#~!-gLnOa4aRve_7nAeY)P~>YyW5MYpLUn zf31D}b^8Wl9UX+o^2mSMzGKBW>~fA5Cy4Rl#8`tcdjEw#Zzl1$a^f}58{?Rfe@o0l z1i>Ht4B!9r2vUei)Bjwr&_6at4!`0>WXK-1#PLLoo`p?~a&TyLblNC`w$ z{Q0kWq$xrNI}g}*{+Ns3%ZFq_q`@Dnj}+w;~7n*|BmnzfAiOk;KY7$K)X~*;{Xd{y18f+wr${$?@=Xz4$oV`tfnJczhf! z4nKGtjdeRt);^-CnBM~;GCAIL5zN=4P|i{ZPfs8D&{yYzc33^M1D|x<@cQ$|>YM9M z*W!b*V;g{#oj=xpB3_>Y8UK`XL?-g=Sbc$~HvEbD!wBraMmioJ2lkUc@o})YHxAYw zQ9rHiyN@V^Kek+myqL`Qq@bJ}um1vl6)X4p-IkN%-K_%I*!LZX+NVTJpJL-^WTN=I z@can+%aipz6}Ei)iD>_m6CbZ`vG#cLz}80;9Vr)x<@jUE$vH;Lfghf%_1F(x%7;!m zXX^>XeEbQ@y?js}A2;uQ9F#}bKVf1(%SR6HY{K)&ld(I{h626OF+ES#{y{0QH&W{b za-*0Wy+4vu7~}P1?0P)=)&WG+{IR@5@pbI*NV(qdg!FZLLNX=ek4*p>onB{4@7ctEc0i#xJg} zt|}@ooh~L+R#X?4Rp1}6XKCsM#gj{QuDGhI@?w@ta4M;+X2q%1RZy)K_(%FnHC-u$ z3rfq*zo1&2TUk|7TGgkjxTI{_RB;|y`%I{uSXmVq5JhDrs8DuZS!oq}GqJKl6jfDL zRu`3&o>x{;#{UREGni4(=d z;&V%J#Q$AD==uU}sVpz;b8%To^#$6hsaQ0*n1PbwsTWusoiCbJF=bk1b!iDYu&S)$ ze4%^rqT-3uN_DpE+-cRNUjKD1Dyi%LsG zaYfmrVvvgJ;;QpYtNZ9)zo4|Z#8eFd14_g>*lG@DBG||ONnmnmarFQzR--i)zT_45 zj}-O~b&sjtFTKCLnkWe7iEdhv*X=>Eo+&Xf=zrafzLki}{leW6SJBPrhvmA!OksS- zBqHf}$Tp2Lc|O}bM|4(3R_E>6>ac9}IL{xJ$LpMTU|q)IAI8HUzSa^ZG0u-%?Dc2M z80U|D9AnQO`v308Q4UA2yli?azYr%O&;D>5_`~_hDV-IyxLwpD^jY9-2tAOGt`K{W zY9yX@A#L)OSIz6+A_DD5t`_?CGaF&W<+w$DhX)?}klsYT7}!rZ4@LS4DF>+;u;1al z73clX`yTnrkav;#BAo@f45=T|`H&YPamX|WX&utdNIj9ZBlUvL5lBOjUkkr)L0X6O zE#xPWb|H;M`97p=$WKOEi2NR;Hpo}woQ3mBoY~iWBR_%jX^`1pKC_OMe}T{3rsIIk i#d#FYvyiTa-2*rm;oJ=ASfpM^mmuv0{xni^=>H#?L`7%- -- 2.44.0