From 7e2765bca7f2d499c30c471b8746e7062ab12b90 Mon Sep 17 00:00:00 2001
From: Thomas Voss <mail@thomasvoss.com>
Date: Sun, 22 Sep 2024 23:55:25 +0200
Subject: A few tweaks

---
 grammar.js       |   2 +-
 src/grammar.json |   3 +-
 src/parser.c     | 452 +++++++++++++++++++++++++++----------------------------
 3 files changed, 222 insertions(+), 235 deletions(-)

diff --git a/grammar.js b/grammar.js
index 955de82..2f0e67b 100644
--- a/grammar.js
+++ b/grammar.js
@@ -46,7 +46,7 @@ module.exports = grammar({
 			field('name', alias(token.immediate(IDENT), $.ident))),
 
 		text: $ => repeat1(choice(
-			/(\\[@}\\]|[^@}\\])+/,
+			/(\\[@}\\]|[^@}\\\p{Pattern_White_Space}])((\\[@}\\]|[^@}\\])*(\\[@}\\]|[^@}\\\p{Pattern_White_Space}]))?/u,
 			seq('@', $._toplevel),
 		)),
 		ident: $ => IDENT,
diff --git a/src/grammar.json b/src/grammar.json
index 35347d4..9dabb74 100644
--- a/src/grammar.json
+++ b/src/grammar.json
@@ -284,7 +284,8 @@
         "members": [
           {
             "type": "PATTERN",
-            "value": "(\\\\[@}\\\\]|[^@}\\\\])+"
+            "value": "(\\\\[@}\\\\]|[^@}\\\\\\p{Pattern_White_Space}])((\\\\[@}\\\\]|[^@}\\\\])*(\\\\[@}\\\\]|[^@}\\\\\\p{Pattern_White_Space}]))?",
+            "flags": "u"
           },
           {
             "type": "SEQ",
diff --git a/src/parser.c b/src/parser.c
index 152fce0..e97e75f 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -516,17 +516,17 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
   eof = lexer->eof(lexer);
   switch (state) {
     case 0:
-      if (eof) ADVANCE(9);
+      if (eof) ADVANCE(10);
       ADVANCE_MAP(
         '"', 3,
-        '#', 15,
-        '-', 12,
-        '.', 17,
-        '/', 10,
-        '=', 13,
+        '#', 16,
+        '-', 13,
+        '.', 18,
+        '/', 11,
+        '=', 14,
         '@', 20,
-        '{', 11,
-        '}', 14,
+        '{', 12,
+        '}', 15,
       );
       if (('\t' <= lookahead && lookahead <= '\r') ||
           lookahead == ' ' ||
@@ -534,56 +534,69 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 0x200e ||
           lookahead == 0x200f ||
           lookahead == 0x2028 ||
-          lookahead == 0x2029) SKIP(7);
-      if (set_contains(aux_sym_id_attr_token1_character_set_1, 667, lookahead)) ADVANCE(16);
+          lookahead == 0x2029) SKIP(8);
+      if (set_contains(aux_sym_id_attr_token1_character_set_1, 667, lookahead)) ADVANCE(17);
       END_STATE();
     case 1:
       if (lookahead == '"') ADVANCE(22);
-      if (lookahead == '\\') ADVANCE(4);
+      if (lookahead == '\\') ADVANCE(5);
       if (lookahead != 0) ADVANCE(1);
       END_STATE();
     case 2:
       if (lookahead == '@') ADVANCE(20);
-      if (lookahead == '\\') ADVANCE(5);
-      if (lookahead == '}') ADVANCE(14);
+      if (lookahead == '\\') ADVANCE(6);
+      if (lookahead == '}') ADVANCE(15);
       if (('\t' <= lookahead && lookahead <= '\r') ||
           lookahead == ' ' ||
           lookahead == 0x85 ||
           lookahead == 0x200e ||
           lookahead == 0x200f ||
           lookahead == 0x2028 ||
-          lookahead == 0x2029) ADVANCE(18);
+          lookahead == 0x2029) SKIP(2);
       if (lookahead != 0) ADVANCE(19);
       END_STATE();
     case 3:
-      if (lookahead == '\\') ADVANCE(4);
+      if (lookahead == '\\') ADVANCE(5);
       if (lookahead != 0 &&
           lookahead != '"') ADVANCE(1);
       END_STATE();
     case 4:
+      if (lookahead == '\\') ADVANCE(6);
+      if (('\t' <= lookahead && lookahead <= '\r') ||
+          lookahead == ' ' ||
+          lookahead == 0x85 ||
+          lookahead == 0x200e ||
+          lookahead == 0x200f ||
+          lookahead == 0x2028 ||
+          lookahead == 0x2029) ADVANCE(4);
+      if (lookahead != 0 &&
+          lookahead != '@' &&
+          lookahead != '}') ADVANCE(19);
+      END_STATE();
+    case 5:
       if (lookahead == '"' ||
           lookahead == '\\') ADVANCE(1);
       END_STATE();
-    case 5:
+    case 6:
       if (lookahead == '@' ||
           lookahead == '\\' ||
           lookahead == '}') ADVANCE(19);
       END_STATE();
-    case 6:
-      if (set_contains(aux_sym_id_attr_token1_character_set_1, 667, lookahead)) ADVANCE(16);
-      END_STATE();
     case 7:
-      if (eof) ADVANCE(9);
+      if (set_contains(aux_sym_id_attr_token1_character_set_1, 667, lookahead)) ADVANCE(17);
+      END_STATE();
+    case 8:
+      if (eof) ADVANCE(10);
       ADVANCE_MAP(
         '"', 3,
-        '#', 15,
-        '-', 12,
-        '.', 17,
-        '/', 10,
-        '=', 13,
+        '#', 16,
+        '-', 13,
+        '.', 18,
+        '/', 11,
+        '=', 14,
         '@', 20,
-        '{', 11,
-        '}', 14,
+        '{', 12,
+        '}', 15,
       );
       if (('\t' <= lookahead && lookahead <= '\r') ||
           lookahead == ' ' ||
@@ -591,72 +604,65 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
           lookahead == 0x200e ||
           lookahead == 0x200f ||
           lookahead == 0x2028 ||
-          lookahead == 0x2029) SKIP(7);
+          lookahead == 0x2029) SKIP(8);
       if (set_contains(aux_sym_id_attr_token1_character_set_1, 667, lookahead)) ADVANCE(21);
       END_STATE();
-    case 8:
-      if (eof) ADVANCE(9);
-      if (lookahead == '#') ADVANCE(15);
-      if (lookahead == '-') ADVANCE(12);
-      if (lookahead == '.') ADVANCE(17);
-      if (lookahead == '/') ADVANCE(10);
-      if (lookahead == '=') ADVANCE(13);
-      if (lookahead == '{') ADVANCE(11);
-      if (lookahead == '}') ADVANCE(14);
+    case 9:
+      if (eof) ADVANCE(10);
+      if (lookahead == '#') ADVANCE(16);
+      if (lookahead == '-') ADVANCE(13);
+      if (lookahead == '.') ADVANCE(18);
+      if (lookahead == '/') ADVANCE(11);
+      if (lookahead == '=') ADVANCE(14);
+      if (lookahead == '{') ADVANCE(12);
+      if (lookahead == '}') ADVANCE(15);
       if (('\t' <= lookahead && lookahead <= '\r') ||
           lookahead == ' ' ||
           lookahead == 0x85 ||
           lookahead == 0x200e ||
           lookahead == 0x200f ||
           lookahead == 0x2028 ||
-          lookahead == 0x2029) SKIP(8);
+          lookahead == 0x2029) SKIP(9);
       if (set_contains(aux_sym_id_attr_token1_character_set_1, 667, lookahead)) ADVANCE(21);
       END_STATE();
-    case 9:
+    case 10:
       ACCEPT_TOKEN(ts_builtin_sym_end);
       END_STATE();
-    case 10:
+    case 11:
       ACCEPT_TOKEN(anon_sym_SLASH);
       END_STATE();
-    case 11:
+    case 12:
       ACCEPT_TOKEN(anon_sym_LBRACE);
       END_STATE();
-    case 12:
+    case 13:
       ACCEPT_TOKEN(anon_sym_DASH);
       END_STATE();
-    case 13:
+    case 14:
       ACCEPT_TOKEN(anon_sym_EQ);
       END_STATE();
-    case 14:
+    case 15:
       ACCEPT_TOKEN(anon_sym_RBRACE);
       END_STATE();
-    case 15:
+    case 16:
       ACCEPT_TOKEN(anon_sym_POUND);
       END_STATE();
-    case 16:
+    case 17:
       ACCEPT_TOKEN(aux_sym_id_attr_token1);
-      if (set_contains(aux_sym_id_attr_token1_character_set_2, 777, lookahead)) ADVANCE(16);
+      if (set_contains(aux_sym_id_attr_token1_character_set_2, 777, lookahead)) ADVANCE(17);
       END_STATE();
-    case 17:
+    case 18:
       ACCEPT_TOKEN(anon_sym_DOT);
       END_STATE();
-    case 18:
+    case 19:
       ACCEPT_TOKEN(aux_sym_text_token1);
-      if (lookahead == '\\') ADVANCE(5);
+      if (lookahead == '\\') ADVANCE(6);
       if (('\t' <= lookahead && lookahead <= '\r') ||
           lookahead == ' ' ||
           lookahead == 0x85 ||
           lookahead == 0x200e ||
           lookahead == 0x200f ||
           lookahead == 0x2028 ||
-          lookahead == 0x2029) ADVANCE(18);
-      if (lookahead != 0 &&
-          lookahead != '@' &&
-          lookahead != '}') ADVANCE(19);
-      END_STATE();
-    case 19:
-      ACCEPT_TOKEN(aux_sym_text_token1);
-      if (lookahead == '\\') ADVANCE(5);
+          lookahead == 0x2029) ADVANCE(4);
       if (lookahead != 0 &&
           lookahead != '@' &&
           lookahead != '}') ADVANCE(19);
@@ -678,38 +684,38 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
 
 static const TSLexMode ts_lex_modes[STATE_COUNT] = {
   [0] = {.lex_state = 0},
-  [1] = {.lex_state = 8},
-  [2] = {.lex_state = 8},
-  [3] = {.lex_state = 8},
-  [4] = {.lex_state = 8},
-  [5] = {.lex_state = 8},
-  [6] = {.lex_state = 8},
-  [7] = {.lex_state = 8},
-  [8] = {.lex_state = 8},
-  [9] = {.lex_state = 8},
-  [10] = {.lex_state = 8},
-  [11] = {.lex_state = 8},
-  [12] = {.lex_state = 8},
-  [13] = {.lex_state = 8},
+  [1] = {.lex_state = 9},
+  [2] = {.lex_state = 9},
+  [3] = {.lex_state = 9},
+  [4] = {.lex_state = 9},
+  [5] = {.lex_state = 9},
+  [6] = {.lex_state = 9},
+  [7] = {.lex_state = 9},
+  [8] = {.lex_state = 9},
+  [9] = {.lex_state = 9},
+  [10] = {.lex_state = 9},
+  [11] = {.lex_state = 9},
+  [12] = {.lex_state = 9},
+  [13] = {.lex_state = 9},
   [14] = {.lex_state = 2},
-  [15] = {.lex_state = 8},
-  [16] = {.lex_state = 8},
+  [15] = {.lex_state = 9},
+  [16] = {.lex_state = 9},
   [17] = {.lex_state = 2},
-  [18] = {.lex_state = 8},
-  [19] = {.lex_state = 8},
-  [20] = {.lex_state = 8},
-  [21] = {.lex_state = 8},
-  [22] = {.lex_state = 8},
-  [23] = {.lex_state = 8},
-  [24] = {.lex_state = 8},
-  [25] = {.lex_state = 8},
-  [26] = {.lex_state = 8},
+  [18] = {.lex_state = 9},
+  [19] = {.lex_state = 9},
+  [20] = {.lex_state = 9},
+  [21] = {.lex_state = 9},
+  [22] = {.lex_state = 9},
+  [23] = {.lex_state = 9},
+  [24] = {.lex_state = 9},
+  [25] = {.lex_state = 9},
+  [26] = {.lex_state = 9},
   [27] = {.lex_state = 2},
-  [28] = {.lex_state = 8},
+  [28] = {.lex_state = 9},
   [29] = {.lex_state = 2},
-  [30] = {.lex_state = 8},
+  [30] = {.lex_state = 9},
   [31] = {.lex_state = 2},
-  [32] = {.lex_state = 8},
+  [32] = {.lex_state = 9},
   [33] = {.lex_state = 2},
   [34] = {.lex_state = 2},
   [35] = {.lex_state = 2},
@@ -718,14 +724,14 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = {
   [38] = {.lex_state = 2},
   [39] = {.lex_state = 2},
   [40] = {.lex_state = 2},
-  [41] = {.lex_state = 8},
+  [41] = {.lex_state = 9},
   [42] = {.lex_state = 0},
   [43] = {.lex_state = 0},
   [44] = {.lex_state = 0},
   [45] = {.lex_state = 0},
   [46] = {.lex_state = 0},
-  [47] = {.lex_state = 6},
-  [48] = {.lex_state = 6},
+  [47] = {.lex_state = 7},
+  [48] = {.lex_state = 7},
   [49] = {.lex_state = 0},
   [50] = {.lex_state = 0},
   [51] = {.lex_state = 0},
@@ -939,233 +945,224 @@ static const uint16_t ts_small_parse_table[] = {
       sym_node,
       aux_sym_document_repeat1,
   [243] = 5,
-    ACTIONS(54), 1,
+    ACTIONS(50), 1,
       anon_sym_RBRACE,
-    ACTIONS(56), 1,
+    ACTIONS(54), 1,
       aux_sym_text_token1,
-    ACTIONS(58), 1,
+    ACTIONS(56), 1,
       anon_sym_AT,
     STATE(29), 1,
       aux_sym_text_repeat1,
     STATE(51), 1,
       sym_text,
   [259] = 2,
-    ACTIONS(62), 1,
+    ACTIONS(60), 1,
       anon_sym_EQ,
-    ACTIONS(60), 4,
+    ACTIONS(58), 4,
       anon_sym_LBRACE,
       anon_sym_POUND,
       anon_sym_DOT,
       sym_ident,
   [269] = 3,
-    ACTIONS(64), 1,
+    ACTIONS(62), 1,
       anon_sym_SLASH,
-    ACTIONS(66), 1,
+    ACTIONS(64), 1,
       sym_ident,
     STATE(33), 3,
       sym__toplevel,
       sym_comment,
       sym_node,
   [281] = 5,
-    ACTIONS(56), 1,
+    ACTIONS(48), 1,
+      anon_sym_RBRACE,
+    ACTIONS(54), 1,
       aux_sym_text_token1,
-    ACTIONS(58), 1,
+    ACTIONS(56), 1,
       anon_sym_AT,
-    ACTIONS(68), 1,
-      anon_sym_RBRACE,
     STATE(29), 1,
       aux_sym_text_repeat1,
     STATE(46), 1,
       sym_text,
   [297] = 1,
-    ACTIONS(70), 4,
+    ACTIONS(66), 4,
       ts_builtin_sym_end,
       anon_sym_SLASH,
       anon_sym_RBRACE,
       sym_ident,
   [304] = 1,
-    ACTIONS(72), 4,
+    ACTIONS(68), 4,
       anon_sym_LBRACE,
       anon_sym_POUND,
       anon_sym_DOT,
       sym_ident,
   [311] = 1,
-    ACTIONS(74), 4,
+    ACTIONS(70), 4,
       ts_builtin_sym_end,
       anon_sym_SLASH,
       anon_sym_RBRACE,
       sym_ident,
   [318] = 1,
-    ACTIONS(76), 4,
+    ACTIONS(72), 4,
       ts_builtin_sym_end,
       anon_sym_SLASH,
       anon_sym_RBRACE,
       sym_ident,
   [325] = 1,
-    ACTIONS(78), 4,
+    ACTIONS(74), 4,
       anon_sym_LBRACE,
       anon_sym_POUND,
       anon_sym_DOT,
       sym_ident,
   [332] = 1,
-    ACTIONS(80), 4,
+    ACTIONS(76), 4,
       anon_sym_LBRACE,
       anon_sym_POUND,
       anon_sym_DOT,
       sym_ident,
   [339] = 1,
-    ACTIONS(82), 4,
+    ACTIONS(78), 4,
       ts_builtin_sym_end,
       anon_sym_SLASH,
       anon_sym_RBRACE,
       sym_ident,
   [346] = 1,
-    ACTIONS(84), 4,
+    ACTIONS(80), 4,
       ts_builtin_sym_end,
       anon_sym_SLASH,
       anon_sym_RBRACE,
       sym_ident,
   [353] = 1,
-    ACTIONS(86), 4,
+    ACTIONS(82), 4,
       ts_builtin_sym_end,
       anon_sym_SLASH,
       anon_sym_RBRACE,
       sym_ident,
   [360] = 4,
-    ACTIONS(88), 1,
+    ACTIONS(84), 1,
       anon_sym_RBRACE,
-    ACTIONS(90), 1,
+    ACTIONS(86), 1,
       aux_sym_text_token1,
-    ACTIONS(93), 1,
+    ACTIONS(89), 1,
       anon_sym_AT,
     STATE(27), 1,
       aux_sym_text_repeat1,
   [373] = 1,
-    ACTIONS(96), 4,
+    ACTIONS(92), 4,
       ts_builtin_sym_end,
       anon_sym_SLASH,
       anon_sym_RBRACE,
       sym_ident,
   [380] = 4,
-    ACTIONS(58), 1,
+    ACTIONS(56), 1,
       anon_sym_AT,
-    ACTIONS(98), 1,
+    ACTIONS(94), 1,
       anon_sym_RBRACE,
-    ACTIONS(100), 1,
+    ACTIONS(96), 1,
       aux_sym_text_token1,
     STATE(27), 1,
       aux_sym_text_repeat1,
   [393] = 1,
-    ACTIONS(102), 4,
+    ACTIONS(98), 4,
       ts_builtin_sym_end,
       anon_sym_SLASH,
       anon_sym_RBRACE,
       sym_ident,
-  [400] = 2,
-    ACTIONS(76), 1,
-      aux_sym_text_token1,
-    ACTIONS(104), 2,
+  [400] = 1,
+    ACTIONS(72), 3,
       anon_sym_RBRACE,
+      aux_sym_text_token1,
       anon_sym_AT,
-  [408] = 3,
+  [406] = 3,
     ACTIONS(9), 1,
       anon_sym_LBRACE,
-    ACTIONS(106), 1,
+    ACTIONS(100), 1,
       sym_ident,
     STATE(21), 1,
       sym_node_body,
-  [418] = 2,
-    ACTIONS(108), 1,
-      aux_sym_text_token1,
-    ACTIONS(88), 2,
+  [416] = 1,
+    ACTIONS(84), 3,
       anon_sym_RBRACE,
-      anon_sym_AT,
-  [426] = 2,
-    ACTIONS(70), 1,
       aux_sym_text_token1,
-    ACTIONS(110), 2,
-      anon_sym_RBRACE,
       anon_sym_AT,
-  [434] = 2,
-    ACTIONS(82), 1,
-      aux_sym_text_token1,
-    ACTIONS(112), 2,
+  [422] = 1,
+    ACTIONS(66), 3,
       anon_sym_RBRACE,
-      anon_sym_AT,
-  [442] = 2,
-    ACTIONS(74), 1,
       aux_sym_text_token1,
-    ACTIONS(114), 2,
-      anon_sym_RBRACE,
       anon_sym_AT,
-  [450] = 2,
-    ACTIONS(84), 1,
-      aux_sym_text_token1,
-    ACTIONS(116), 2,
+  [428] = 1,
+    ACTIONS(78), 3,
       anon_sym_RBRACE,
-      anon_sym_AT,
-  [458] = 2,
-    ACTIONS(86), 1,
       aux_sym_text_token1,
-    ACTIONS(118), 2,
+      anon_sym_AT,
+  [434] = 1,
+    ACTIONS(70), 3,
       anon_sym_RBRACE,
+      aux_sym_text_token1,
       anon_sym_AT,
-  [466] = 2,
-    ACTIONS(102), 1,
+  [440] = 1,
+    ACTIONS(80), 3,
+      anon_sym_RBRACE,
       aux_sym_text_token1,
-    ACTIONS(120), 2,
+      anon_sym_AT,
+  [446] = 1,
+    ACTIONS(82), 3,
       anon_sym_RBRACE,
+      aux_sym_text_token1,
       anon_sym_AT,
-  [474] = 2,
-    ACTIONS(96), 1,
+  [452] = 1,
+    ACTIONS(98), 3,
+      anon_sym_RBRACE,
       aux_sym_text_token1,
-    ACTIONS(122), 2,
+      anon_sym_AT,
+  [458] = 1,
+    ACTIONS(92), 3,
       anon_sym_RBRACE,
+      aux_sym_text_token1,
       anon_sym_AT,
-  [482] = 3,
+  [464] = 3,
     ACTIONS(17), 1,
       anon_sym_LBRACE,
-    ACTIONS(124), 1,
+    ACTIONS(102), 1,
       sym_ident,
     STATE(31), 1,
       sym_node_body,
-  [492] = 2,
+  [474] = 2,
     ACTIONS(9), 1,
       anon_sym_LBRACE,
     STATE(30), 1,
       sym_node_body,
-  [499] = 2,
+  [481] = 2,
     ACTIONS(9), 1,
       anon_sym_LBRACE,
     STATE(25), 1,
       sym_node_body,
-  [506] = 2,
+  [488] = 2,
     ACTIONS(17), 1,
       anon_sym_LBRACE,
     STATE(37), 1,
       sym_node_body,
-  [513] = 2,
+  [495] = 2,
     ACTIONS(17), 1,
       anon_sym_LBRACE,
     STATE(39), 1,
       sym_node_body,
-  [520] = 1,
-    ACTIONS(126), 1,
+  [502] = 1,
+    ACTIONS(104), 1,
       anon_sym_RBRACE,
-  [524] = 1,
-    ACTIONS(128), 1,
+  [506] = 1,
+    ACTIONS(106), 1,
       aux_sym_id_attr_token1,
-  [528] = 1,
-    ACTIONS(130), 1,
+  [510] = 1,
+    ACTIONS(108), 1,
       aux_sym_id_attr_token1,
-  [532] = 1,
-    ACTIONS(132), 1,
+  [514] = 1,
+    ACTIONS(110), 1,
       sym_string,
-  [536] = 1,
-    ACTIONS(134), 1,
+  [518] = 1,
+    ACTIONS(112), 1,
       ts_builtin_sym_end,
-  [540] = 1,
-    ACTIONS(136), 1,
+  [522] = 1,
+    ACTIONS(114), 1,
       anon_sym_RBRACE,
 };
 
@@ -1200,26 +1197,26 @@ static const uint32_t ts_small_parse_table_map[] = {
   [SMALL_STATE(29)] = 380,
   [SMALL_STATE(30)] = 393,
   [SMALL_STATE(31)] = 400,
-  [SMALL_STATE(32)] = 408,
-  [SMALL_STATE(33)] = 418,
-  [SMALL_STATE(34)] = 426,
-  [SMALL_STATE(35)] = 434,
-  [SMALL_STATE(36)] = 442,
-  [SMALL_STATE(37)] = 450,
-  [SMALL_STATE(38)] = 458,
-  [SMALL_STATE(39)] = 466,
-  [SMALL_STATE(40)] = 474,
-  [SMALL_STATE(41)] = 482,
-  [SMALL_STATE(42)] = 492,
-  [SMALL_STATE(43)] = 499,
-  [SMALL_STATE(44)] = 506,
-  [SMALL_STATE(45)] = 513,
-  [SMALL_STATE(46)] = 520,
-  [SMALL_STATE(47)] = 524,
-  [SMALL_STATE(48)] = 528,
-  [SMALL_STATE(49)] = 532,
-  [SMALL_STATE(50)] = 536,
-  [SMALL_STATE(51)] = 540,
+  [SMALL_STATE(32)] = 406,
+  [SMALL_STATE(33)] = 416,
+  [SMALL_STATE(34)] = 422,
+  [SMALL_STATE(35)] = 428,
+  [SMALL_STATE(36)] = 434,
+  [SMALL_STATE(37)] = 440,
+  [SMALL_STATE(38)] = 446,
+  [SMALL_STATE(39)] = 452,
+  [SMALL_STATE(40)] = 458,
+  [SMALL_STATE(41)] = 464,
+  [SMALL_STATE(42)] = 474,
+  [SMALL_STATE(43)] = 481,
+  [SMALL_STATE(44)] = 488,
+  [SMALL_STATE(45)] = 495,
+  [SMALL_STATE(46)] = 502,
+  [SMALL_STATE(47)] = 506,
+  [SMALL_STATE(48)] = 510,
+  [SMALL_STATE(49)] = 514,
+  [SMALL_STATE(50)] = 518,
+  [SMALL_STATE(51)] = 522,
 };
 
 static const TSParseActionEntry ts_parse_actions[] = {
@@ -1248,47 +1245,36 @@ static const TSParseActionEntry ts_parse_actions[] = {
   [48] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26),
   [50] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38),
   [52] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_document, 1, 0, 0),
-  [54] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38),
-  [56] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29),
-  [58] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16),
-  [60] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr, 1, 0, 2),
-  [62] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49),
-  [64] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41),
-  [66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5),
-  [68] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26),
-  [70] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node, 2, 0, 3),
-  [72] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr, 3, 0, 8),
-  [74] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 3, 0, 4),
-  [76] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 2, 0, 1),
-  [78] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_id_attr, 2, 0, 5),
-  [80] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_attr, 2, 0, 5),
-  [82] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node_body, 2, 0, 0),
-  [84] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node, 3, 0, 6),
-  [86] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node_body, 3, 0, 0),
-  [88] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_text_repeat1, 2, 0, 0),
-  [90] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_text_repeat1, 2, 0, 0), SHIFT_REPEAT(27),
-  [93] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_text_repeat1, 2, 0, 0), SHIFT_REPEAT(16),
-  [96] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node_body, 4, 0, 0),
-  [98] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_text, 1, 0, 0),
-  [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27),
-  [102] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 4, 0, 7),
-  [104] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 2, 0, 1),
-  [106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3),
-  [108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_text_repeat1, 2, 0, 0),
-  [110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_node, 2, 0, 3),
-  [112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_node_body, 2, 0, 0),
-  [114] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 3, 0, 4),
-  [116] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_node, 3, 0, 6),
-  [118] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_node_body, 3, 0, 0),
-  [120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 4, 0, 7),
-  [122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_node_body, 4, 0, 0),
-  [124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4),
-  [126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28),
-  [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23),
-  [130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22),
-  [132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19),
-  [134] = {.entry = {.count = 1, .reusable = true}},  ACCEPT_INPUT(),
-  [136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40),
+  [54] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29),
+  [56] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16),
+  [58] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr, 1, 0, 2),
+  [60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49),
+  [62] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41),
+  [64] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5),
+  [66] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node, 2, 0, 3),
+  [68] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr, 3, 0, 8),
+  [70] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 3, 0, 4),
+  [72] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 2, 0, 1),
+  [74] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_id_attr, 2, 0, 5),
+  [76] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_attr, 2, 0, 5),
+  [78] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node_body, 2, 0, 0),
+  [80] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node, 3, 0, 6),
+  [82] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node_body, 3, 0, 0),
+  [84] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_text_repeat1, 2, 0, 0),
+  [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_text_repeat1, 2, 0, 0), SHIFT_REPEAT(27),
+  [89] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_text_repeat1, 2, 0, 0), SHIFT_REPEAT(16),
+  [92] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node_body, 4, 0, 0),
+  [94] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_text, 1, 0, 0),
+  [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27),
+  [98] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 4, 0, 7),
+  [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3),
+  [102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4),
+  [104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28),
+  [106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23),
+  [108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22),
+  [110] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19),
+  [112] = {.entry = {.count = 1, .reusable = true}},  ACCEPT_INPUT(),
+  [114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40),
 };
 
 #ifdef __cplusplus
-- 
cgit v1.2.3