diff --git a/grammar.js b/grammar.js index b4f6b15..c06a2c0 100644 --- a/grammar.js +++ b/grammar.js @@ -26,20 +26,27 @@ export default grammar({ content: _ => token(prec(-1, /([^{]|\{[^A-Za-z/])+/)), block_open: $ => seq( - $._block_open_start, + "{", + $.block_keyword, + ":", $.block_name, optional($.attributes), "}", ), block_close: $ => seq( - $._block_close_start, + "{", + "/", + $.block_keyword, + ":", $.block_name, "}", ), lang_tag: $ => seq( - $._lang_start, + "{", + $.lang_keyword, + ":", $.lang_text, "}", ), @@ -65,9 +72,8 @@ export default grammar({ prefix_argument: _ => /[A-Za-z][A-Za-z0-9 _-]*/, lang_text: _ => /[^}]+/, - _block_open_start: _ => /\{[Bb][Ll][Oo][Cc][Kk]:/, - _block_close_start: _ => /\{\/[Bb][Ll][Oo][Cc][Kk]:/, - _lang_start: _ => /\{[Ll][Aa][Nn][Gg]:/, + block_keyword: _ => token(prec(1, /[Bb][Ll][Oo][Cc][Kk]/)), + lang_keyword: _ => token(prec(1, /[Ll][Aa][Nn][Gg]/)), _space: _ => /[ \t]+/, }, }); diff --git a/queries/tumblr/highlights.scm b/queries/tumblr/highlights.scm index c52d584..4fe8424 100644 --- a/queries/tumblr/highlights.scm +++ b/queries/tumblr/highlights.scm @@ -1,16 +1,15 @@ ; Punctuation "{" @punctuation.bracket "}" @punctuation.bracket - -; Keywords that introduce a tag form. The grammar exposes the opening -; sequence as a hidden node, so capture the parent and let the editor -; colour the leading {block:, {/block:, {lang: literally via the -; tokenizer. The colon delimiter inside a variable_prefix tag is captured -; below. ":" @punctuation.delimiter "-" @punctuation.delimiter +"/" @punctuation.delimiter "=" @operator +; Block and lang keywords inside their tags: the literal "block" / "lang". +(block_keyword) @keyword.directive +(lang_keyword) @keyword.directive + ; Block names. Known data-block names get @function.builtin; If/IfNot ; toggles get @keyword.conditional (theme authors may define arbitrary ; If* / IfNot* names via so we match by prefix). diff --git a/src/grammar.json b/src/grammar.json index c75eac9..d2d7f32 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -48,9 +48,17 @@ "block_open": { "type": "SEQ", "members": [ + { + "type": "STRING", + "value": "{" + }, { "type": "SYMBOL", - "name": "_block_open_start" + "name": "block_keyword" + }, + { + "type": "STRING", + "value": ":" }, { "type": "SYMBOL", @@ -77,9 +85,21 @@ "block_close": { "type": "SEQ", "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "STRING", + "value": "/" + }, { "type": "SYMBOL", - "name": "_block_close_start" + "name": "block_keyword" + }, + { + "type": "STRING", + "value": ":" }, { "type": "SYMBOL", @@ -94,9 +114,17 @@ "lang_tag": { "type": "SEQ", "members": [ + { + "type": "STRING", + "value": "{" + }, { "type": "SYMBOL", - "name": "_lang_start" + "name": "lang_keyword" + }, + { + "type": "STRING", + "value": ":" }, { "type": "SYMBOL", @@ -250,17 +278,27 @@ "type": "PATTERN", "value": "[^}]+" }, - "_block_open_start": { - "type": "PATTERN", - "value": "\\{[Bb][Ll][Oo][Cc][Kk]:" + "block_keyword": { + "type": "TOKEN", + "content": { + "type": "PREC", + "value": 1, + "content": { + "type": "PATTERN", + "value": "[Bb][Ll][Oo][Cc][Kk]" + } + } }, - "_block_close_start": { - "type": "PATTERN", - "value": "\\{\\/[Bb][Ll][Oo][Cc][Kk]:" - }, - "_lang_start": { - "type": "PATTERN", - "value": "\\{[Ll][Aa][Nn][Gg]:" + "lang_keyword": { + "type": "TOKEN", + "content": { + "type": "PREC", + "value": 1, + "content": { + "type": "PATTERN", + "value": "[Ll][Aa][Nn][Gg]" + } + } }, "_space": { "type": "PATTERN", diff --git a/src/node-types.json b/src/node-types.json index c9ca254..16746d8 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -38,9 +38,13 @@ "named": true, "fields": {}, "children": { - "multiple": false, + "multiple": true, "required": true, "types": [ + { + "type": "block_keyword", + "named": true + }, { "type": "block_name", "named": true @@ -60,6 +64,10 @@ "type": "attributes", "named": true }, + { + "type": "block_keyword", + "named": true + }, { "type": "block_name", "named": true @@ -72,9 +80,13 @@ "named": true, "fields": {}, "children": { - "multiple": false, + "multiple": true, "required": true, "types": [ + { + "type": "lang_keyword", + "named": true + }, { "type": "lang_text", "named": true @@ -150,6 +162,10 @@ "type": "-", "named": false }, + { + "type": "/", + "named": false + }, { "type": ":", "named": false @@ -166,6 +182,10 @@ "type": "attribute_value", "named": true }, + { + "type": "block_keyword", + "named": true + }, { "type": "block_name", "named": true @@ -186,6 +206,10 @@ "type": "image", "named": false }, + { + "type": "lang_keyword", + "named": true + }, { "type": "lang_text", "named": true diff --git a/src/parser.c b/src/parser.c index aadb135..27a59c6 100644 --- a/src/parser.c +++ b/src/parser.c @@ -7,39 +7,39 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 31 +#define STATE_COUNT 35 #define LARGE_STATE_COUNT 2 #define SYMBOL_COUNT 33 #define ALIAS_COUNT 0 #define TOKEN_COUNT 22 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 0 -#define MAX_ALIAS_SEQUENCE_LENGTH 5 +#define MAX_ALIAS_SEQUENCE_LENGTH 6 #define MAX_RESERVED_WORD_SET_SIZE 0 #define PRODUCTION_ID_COUNT 1 #define SUPERTYPE_COUNT 0 enum ts_symbol_identifiers { sym_content = 1, - anon_sym_RBRACE = 2, - anon_sym_LBRACE = 3, - anon_sym_DASH = 4, - anon_sym_COLON = 5, - anon_sym_EQ = 6, - sym_attribute_name = 7, - sym_attribute_value = 8, - sym_block_name = 9, - sym_variable_name = 10, - sym_variable_modifier = 11, - anon_sym_text = 12, - anon_sym_color = 13, - anon_sym_font = 14, - anon_sym_image = 15, - sym_prefix_argument = 16, - sym_lang_text = 17, - sym__block_open_start = 18, - sym__block_close_start = 19, - sym__lang_start = 20, + anon_sym_LBRACE = 2, + anon_sym_COLON = 3, + anon_sym_RBRACE = 4, + anon_sym_SLASH = 5, + anon_sym_DASH = 6, + anon_sym_EQ = 7, + sym_attribute_name = 8, + sym_attribute_value = 9, + sym_block_name = 10, + sym_variable_name = 11, + sym_variable_modifier = 12, + anon_sym_text = 13, + anon_sym_color = 14, + anon_sym_font = 15, + anon_sym_image = 16, + sym_prefix_argument = 17, + sym_lang_text = 18, + sym_block_keyword = 19, + sym_lang_keyword = 20, sym__space = 21, sym_template = 22, sym__node = 23, @@ -57,10 +57,11 @@ enum ts_symbol_identifiers { static const char * const ts_symbol_names[] = { [ts_builtin_sym_end] = "end", [sym_content] = "content", - [anon_sym_RBRACE] = "}", [anon_sym_LBRACE] = "{", - [anon_sym_DASH] = "-", [anon_sym_COLON] = ":", + [anon_sym_RBRACE] = "}", + [anon_sym_SLASH] = "/", + [anon_sym_DASH] = "-", [anon_sym_EQ] = "=", [sym_attribute_name] = "attribute_name", [sym_attribute_value] = "attribute_value", @@ -73,9 +74,8 @@ static const char * const ts_symbol_names[] = { [anon_sym_image] = "image", [sym_prefix_argument] = "prefix_argument", [sym_lang_text] = "lang_text", - [sym__block_open_start] = "_block_open_start", - [sym__block_close_start] = "_block_close_start", - [sym__lang_start] = "_lang_start", + [sym_block_keyword] = "block_keyword", + [sym_lang_keyword] = "lang_keyword", [sym__space] = "_space", [sym_template] = "template", [sym__node] = "_node", @@ -93,10 +93,11 @@ static const char * const ts_symbol_names[] = { static const TSSymbol ts_symbol_map[] = { [ts_builtin_sym_end] = ts_builtin_sym_end, [sym_content] = sym_content, - [anon_sym_RBRACE] = anon_sym_RBRACE, [anon_sym_LBRACE] = anon_sym_LBRACE, - [anon_sym_DASH] = anon_sym_DASH, [anon_sym_COLON] = anon_sym_COLON, + [anon_sym_RBRACE] = anon_sym_RBRACE, + [anon_sym_SLASH] = anon_sym_SLASH, + [anon_sym_DASH] = anon_sym_DASH, [anon_sym_EQ] = anon_sym_EQ, [sym_attribute_name] = sym_attribute_name, [sym_attribute_value] = sym_attribute_value, @@ -109,9 +110,8 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_image] = anon_sym_image, [sym_prefix_argument] = sym_prefix_argument, [sym_lang_text] = sym_lang_text, - [sym__block_open_start] = sym__block_open_start, - [sym__block_close_start] = sym__block_close_start, - [sym__lang_start] = sym__lang_start, + [sym_block_keyword] = sym_block_keyword, + [sym_lang_keyword] = sym_lang_keyword, [sym__space] = sym__space, [sym_template] = sym_template, [sym__node] = sym__node, @@ -135,19 +135,23 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [anon_sym_RBRACE] = { - .visible = true, - .named = false, - }, [anon_sym_LBRACE] = { .visible = true, .named = false, }, - [anon_sym_DASH] = { + [anon_sym_COLON] = { .visible = true, .named = false, }, - [anon_sym_COLON] = { + [anon_sym_RBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH] = { .visible = true, .named = false, }, @@ -199,16 +203,12 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym__block_open_start] = { - .visible = false, + [sym_block_keyword] = { + .visible = true, .named = true, }, - [sym__block_close_start] = { - .visible = false, - .named = true, - }, - [sym__lang_start] = { - .visible = false, + [sym_lang_keyword] = { + .visible = true, .named = true, }, [sym__space] = { @@ -301,6 +301,10 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [28] = 28, [29] = 29, [30] = 30, + [31] = 31, + [32] = 32, + [33] = 33, + [34] = 34, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -308,220 +312,262 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(39); + if (eof) ADVANCE(31); ADVANCE_MAP( - '-', 43, - ':', 44, - '=', 45, + '-', 37, + '/', 36, + ':', 34, + '=', 38, + 'B', 57, + 'L', 53, '_', 62, - 'c', 53, - 'f', 54, - 'i', 51, - 't', 47, - '{', 42, - '}', 41, - '\t', 80, - ' ', 80, + 'b', 57, + 'c', 46, + 'f', 47, + 'i', 44, + 'l', 53, + 't', 40, + '{', 33, + '}', 35, + '\t', 86, + ' ', 86, ); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(66); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(73); if (('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); if (('A' <= lookahead && lookahead <= 'Z')) ADVANCE(60); - if (lookahead != 0) ADVANCE(40); + if (lookahead != 0) ADVANCE(32); END_STATE(); case 1: ADVANCE_MAP( '"', 2, - '-', 43, - ':', 44, - '=', 45, - 'c', 13, - 'f', 14, - 'i', 11, - 't', 7, - '}', 41, - '\t', 80, - ' ', 80, + '-', 37, + '/', 36, + ':', 34, + '=', 38, + 'B', 69, + 'L', 65, + 'b', 21, + 'c', 10, + 'f', 11, + 'i', 8, + 'l', 17, + 't', 4, + '}', 35, + '\t', 86, + ' ', 86, ); - if (('A' <= lookahead && lookahead <= 'Z')) ADVANCE(65); + if (('A' <= lookahead && lookahead <= 'Z')) ADVANCE(72); END_STATE(); case 2: if (lookahead == '"') ADVANCE(63); if (lookahead != 0) ADVANCE(2); END_STATE(); case 3: - if (lookahead == ':') ADVANCE(79); + if (lookahead == 'a') ADVANCE(6); END_STATE(); case 4: - if (lookahead == ':') ADVANCE(77); + if (lookahead == 'e') ADVANCE(16); END_STATE(); case 5: - if (lookahead == ':') ADVANCE(78); + if (lookahead == 'e') ADVANCE(80); END_STATE(); case 6: - if (lookahead == 'a') ADVANCE(9); + if (lookahead == 'g') ADVANCE(5); END_STATE(); case 7: - if (lookahead == 'e') ADVANCE(19); + if (lookahead == 'l') ADVANCE(12); END_STATE(); case 8: - if (lookahead == 'e') ADVANCE(73); + if (lookahead == 'm') ADVANCE(3); END_STATE(); case 9: - if (lookahead == 'g') ADVANCE(8); + if (lookahead == 'n') ADVANCE(14); END_STATE(); case 10: - if (lookahead == 'l') ADVANCE(15); + if (lookahead == 'o') ADVANCE(7); END_STATE(); case 11: - if (lookahead == 'm') ADVANCE(6); + if (lookahead == 'o') ADVANCE(9); END_STATE(); case 12: - if (lookahead == 'n') ADVANCE(17); + if (lookahead == 'o') ADVANCE(13); END_STATE(); case 13: - if (lookahead == 'o') ADVANCE(10); + if (lookahead == 'r') ADVANCE(76); END_STATE(); case 14: - if (lookahead == 'o') ADVANCE(12); + if (lookahead == 't') ADVANCE(78); END_STATE(); case 15: - if (lookahead == 'o') ADVANCE(16); + if (lookahead == 't') ADVANCE(74); END_STATE(); case 16: - if (lookahead == 'r') ADVANCE(69); + if (lookahead == 'x') ADVANCE(15); END_STATE(); case 17: - if (lookahead == 't') ADVANCE(71); + if (lookahead == 'A' || + lookahead == 'a') ADVANCE(22); END_STATE(); case 18: - if (lookahead == 't') ADVANCE(67); + if (lookahead == 'C' || + lookahead == 'c') ADVANCE(20); END_STATE(); case 19: - if (lookahead == 'x') ADVANCE(18); + if (lookahead == 'G' || + lookahead == 'g') ADVANCE(85); END_STATE(); case 20: - if (lookahead == 'A' || - lookahead == 'a') ADVANCE(29); + if (lookahead == 'K' || + lookahead == 'k') ADVANCE(84); END_STATE(); case 21: - if (lookahead == 'B' || - lookahead == 'b') ADVANCE(28); + if (lookahead == 'L' || + lookahead == 'l') ADVANCE(23); END_STATE(); case 22: - if (lookahead == 'C' || - lookahead == 'c') ADVANCE(25); + if (lookahead == 'N' || + lookahead == 'n') ADVANCE(19); END_STATE(); case 23: - if (lookahead == 'C' || - lookahead == 'c') ADVANCE(26); + if (lookahead == 'O' || + lookahead == 'o') ADVANCE(18); END_STATE(); case 24: - if (lookahead == 'G' || - lookahead == 'g') ADVANCE(3); - END_STATE(); - case 25: - if (lookahead == 'K' || - lookahead == 'k') ADVANCE(4); - END_STATE(); - case 26: - if (lookahead == 'K' || - lookahead == 'k') ADVANCE(5); - END_STATE(); - case 27: - if (lookahead == 'L' || - lookahead == 'l') ADVANCE(30); - END_STATE(); - case 28: - if (lookahead == 'L' || - lookahead == 'l') ADVANCE(31); - END_STATE(); - case 29: - if (lookahead == 'N' || - lookahead == 'n') ADVANCE(24); - END_STATE(); - case 30: - if (lookahead == 'O' || - lookahead == 'o') ADVANCE(22); - END_STATE(); - case 31: - if (lookahead == 'O' || - lookahead == 'o') ADVANCE(23); - END_STATE(); - case 32: if (('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(64); END_STATE(); - case 33: + case 25: if (('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(75); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(82); END_STATE(); - case 34: + case 26: if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(62); END_STATE(); - case 35: + case 27: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(66); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(73); END_STATE(); - case 36: + case 28: if (lookahead != 0 && lookahead != '/' && (lookahead < 'A' || 'Z' < lookahead) && - (lookahead < 'a' || 'z' < lookahead)) ADVANCE(40); + (lookahead < 'a' || 'z' < lookahead)) ADVANCE(32); END_STATE(); - case 37: + case 29: if (lookahead != 0 && - lookahead != '}') ADVANCE(76); + lookahead != '}') ADVANCE(83); END_STATE(); - case 38: - if (eof) ADVANCE(39); - if (lookahead == '{') ADVANCE(42); - if (lookahead != 0) ADVANCE(40); + case 30: + if (eof) ADVANCE(31); + if (lookahead == '{') ADVANCE(33); + if (lookahead != 0) ADVANCE(32); END_STATE(); - case 39: + case 31: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 40: + case 32: ACCEPT_TOKEN(sym_content); - if (lookahead == '{') ADVANCE(36); - if (lookahead != 0) ADVANCE(40); + if (lookahead == '{') ADVANCE(28); + if (lookahead != 0) ADVANCE(32); END_STATE(); - case 41: - ACCEPT_TOKEN(anon_sym_RBRACE); - END_STATE(); - case 42: + case 33: ACCEPT_TOKEN(anon_sym_LBRACE); - if (lookahead == '/') ADVANCE(21); - if (lookahead == 'B' || - lookahead == 'b') ADVANCE(27); - if (lookahead == 'L' || - lookahead == 'l') ADVANCE(20); END_STATE(); - case 43: - ACCEPT_TOKEN(anon_sym_DASH); - END_STATE(); - case 44: + case 34: ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); - case 45: + case 35: + ACCEPT_TOKEN(anon_sym_RBRACE); + END_STATE(); + case 36: + ACCEPT_TOKEN(anon_sym_SLASH); + END_STATE(); + case 37: + ACCEPT_TOKEN(anon_sym_DASH); + END_STATE(); + case 38: ACCEPT_TOKEN(anon_sym_EQ); END_STATE(); + case 39: + ACCEPT_TOKEN(sym_attribute_name); + if (lookahead == '-') ADVANCE(62); + if (lookahead == '_') ADVANCE(61); + if (lookahead == 'a') ADVANCE(42); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(60); + END_STATE(); + case 40: + ACCEPT_TOKEN(sym_attribute_name); + if (lookahead == '-') ADVANCE(62); + if (lookahead == '_') ADVANCE(61); + if (lookahead == 'e') ADVANCE(52); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); + END_STATE(); + case 41: + ACCEPT_TOKEN(sym_attribute_name); + if (lookahead == '-') ADVANCE(62); + if (lookahead == '_') ADVANCE(61); + if (lookahead == 'e') ADVANCE(81); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); + END_STATE(); + case 42: + ACCEPT_TOKEN(sym_attribute_name); + if (lookahead == '-') ADVANCE(62); + if (lookahead == '_') ADVANCE(61); + if (lookahead == 'g') ADVANCE(41); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); + END_STATE(); + case 43: + ACCEPT_TOKEN(sym_attribute_name); + if (lookahead == '-') ADVANCE(62); + if (lookahead == '_') ADVANCE(61); + if (lookahead == 'l') ADVANCE(48); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); + END_STATE(); + case 44: + ACCEPT_TOKEN(sym_attribute_name); + if (lookahead == '-') ADVANCE(62); + if (lookahead == '_') ADVANCE(61); + if (lookahead == 'm') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); + END_STATE(); + case 45: + ACCEPT_TOKEN(sym_attribute_name); + if (lookahead == '-') ADVANCE(62); + if (lookahead == '_') ADVANCE(61); + if (lookahead == 'n') ADVANCE(50); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); + END_STATE(); case 46: ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'a') ADVANCE(49); + if (lookahead == 'o') ADVANCE(43); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || - ('b' <= lookahead && lookahead <= 'z')) ADVANCE(60); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); END_STATE(); case 47: ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'e') ADVANCE(59); + if (lookahead == 'o') ADVANCE(45); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -530,7 +576,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'e') ADVANCE(74); + if (lookahead == 'o') ADVANCE(49); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -539,7 +585,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'g') ADVANCE(48); + if (lookahead == 'r') ADVANCE(77); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -548,7 +594,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'l') ADVANCE(55); + if (lookahead == 't') ADVANCE(79); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -557,7 +603,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'm') ADVANCE(46); + if (lookahead == 't') ADVANCE(75); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -566,7 +612,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'n') ADVANCE(57); + if (lookahead == 'x') ADVANCE(51); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -575,16 +621,18 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'o') ADVANCE(50); + if (lookahead == 'A' || + lookahead == 'a') ADVANCE(58); if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); + ('B' <= lookahead && lookahead <= 'Z') || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(60); END_STATE(); case 54: ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'o') ADVANCE(52); + if (lookahead == 'C' || + lookahead == 'c') ADVANCE(56); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -593,7 +641,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'o') ADVANCE(56); + if (lookahead == 'G' || + lookahead == 'g') ADVANCE(85); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -602,7 +651,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'r') ADVANCE(70); + if (lookahead == 'K' || + lookahead == 'k') ADVANCE(84); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -611,7 +661,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 't') ADVANCE(72); + if (lookahead == 'L' || + lookahead == 'l') ADVANCE(59); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -620,7 +671,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 't') ADVANCE(68); + if (lookahead == 'N' || + lookahead == 'n') ADVANCE(55); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -629,7 +681,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(sym_attribute_name); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); - if (lookahead == 'x') ADVANCE(58); + if (lookahead == 'O' || + lookahead == 'o') ADVANCE(54); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); @@ -670,54 +723,117 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 65: ACCEPT_TOKEN(sym_variable_name); + if (lookahead == 'A' || + lookahead == 'a') ADVANCE(70); + if (('0' <= lookahead && lookahead <= '9') || + ('B' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(72); + END_STATE(); + case 66: + ACCEPT_TOKEN(sym_variable_name); + if (lookahead == 'C' || + lookahead == 'c') ADVANCE(68); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(65); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(72); END_STATE(); - case 66: + case 67: + ACCEPT_TOKEN(sym_variable_name); + if (lookahead == 'G' || + lookahead == 'g') ADVANCE(85); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(72); + END_STATE(); + case 68: + ACCEPT_TOKEN(sym_variable_name); + if (lookahead == 'K' || + lookahead == 'k') ADVANCE(84); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(72); + END_STATE(); + case 69: + ACCEPT_TOKEN(sym_variable_name); + if (lookahead == 'L' || + lookahead == 'l') ADVANCE(71); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(72); + END_STATE(); + case 70: + ACCEPT_TOKEN(sym_variable_name); + if (lookahead == 'N' || + lookahead == 'n') ADVANCE(67); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(72); + END_STATE(); + case 71: + ACCEPT_TOKEN(sym_variable_name); + if (lookahead == 'O' || + lookahead == 'o') ADVANCE(66); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(72); + END_STATE(); + case 72: + ACCEPT_TOKEN(sym_variable_name); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(72); + END_STATE(); + case 73: ACCEPT_TOKEN(sym_variable_modifier); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(66); - END_STATE(); - case 67: - ACCEPT_TOKEN(anon_sym_text); - END_STATE(); - case 68: - ACCEPT_TOKEN(anon_sym_text); - if (lookahead == '-') ADVANCE(62); - if (lookahead == '_') ADVANCE(61); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); - END_STATE(); - case 69: - ACCEPT_TOKEN(anon_sym_color); - END_STATE(); - case 70: - ACCEPT_TOKEN(anon_sym_color); - if (lookahead == '-') ADVANCE(62); - if (lookahead == '_') ADVANCE(61); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); - END_STATE(); - case 71: - ACCEPT_TOKEN(anon_sym_font); - END_STATE(); - case 72: - ACCEPT_TOKEN(anon_sym_font); - if (lookahead == '-') ADVANCE(62); - if (lookahead == '_') ADVANCE(61); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); - END_STATE(); - case 73: - ACCEPT_TOKEN(anon_sym_image); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(73); END_STATE(); case 74: + ACCEPT_TOKEN(anon_sym_text); + END_STATE(); + case 75: + ACCEPT_TOKEN(anon_sym_text); + if (lookahead == '-') ADVANCE(62); + if (lookahead == '_') ADVANCE(61); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); + END_STATE(); + case 76: + ACCEPT_TOKEN(anon_sym_color); + END_STATE(); + case 77: + ACCEPT_TOKEN(anon_sym_color); + if (lookahead == '-') ADVANCE(62); + if (lookahead == '_') ADVANCE(61); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); + END_STATE(); + case 78: + ACCEPT_TOKEN(anon_sym_font); + END_STATE(); + case 79: + ACCEPT_TOKEN(anon_sym_font); + if (lookahead == '-') ADVANCE(62); + if (lookahead == '_') ADVANCE(61); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); + END_STATE(); + case 80: + ACCEPT_TOKEN(anon_sym_image); + END_STATE(); + case 81: ACCEPT_TOKEN(anon_sym_image); if (lookahead == '-') ADVANCE(62); if (lookahead == '_') ADVANCE(61); @@ -725,33 +841,30 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(60); END_STATE(); - case 75: + case 82: ACCEPT_TOKEN(sym_prefix_argument); if (lookahead == ' ' || lookahead == '-' || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(75); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(82); END_STATE(); - case 76: + case 83: ACCEPT_TOKEN(sym_lang_text); if (lookahead != 0 && - lookahead != '}') ADVANCE(76); + lookahead != '}') ADVANCE(83); END_STATE(); - case 77: - ACCEPT_TOKEN(sym__block_open_start); + case 84: + ACCEPT_TOKEN(sym_block_keyword); END_STATE(); - case 78: - ACCEPT_TOKEN(sym__block_close_start); + case 85: + ACCEPT_TOKEN(sym_lang_keyword); END_STATE(); - case 79: - ACCEPT_TOKEN(sym__lang_start); - END_STATE(); - case 80: + case 86: ACCEPT_TOKEN(sym__space); if (lookahead == '\t' || - lookahead == ' ') ADVANCE(80); + lookahead == ' ') ADVANCE(86); END_STATE(); default: return false; @@ -760,46 +873,51 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [0] = {.lex_state = 0}, - [1] = {.lex_state = 38}, - [2] = {.lex_state = 38}, - [3] = {.lex_state = 38}, - [4] = {.lex_state = 1}, - [5] = {.lex_state = 38}, - [6] = {.lex_state = 38}, - [7] = {.lex_state = 38}, - [8] = {.lex_state = 38}, - [9] = {.lex_state = 38}, - [10] = {.lex_state = 38}, - [11] = {.lex_state = 1}, - [12] = {.lex_state = 1}, - [13] = {.lex_state = 1}, + [1] = {.lex_state = 30}, + [2] = {.lex_state = 1}, + [3] = {.lex_state = 30}, + [4] = {.lex_state = 30}, + [5] = {.lex_state = 1}, + [6] = {.lex_state = 1}, + [7] = {.lex_state = 1}, + [8] = {.lex_state = 30}, + [9] = {.lex_state = 30}, + [10] = {.lex_state = 30}, + [11] = {.lex_state = 30}, + [12] = {.lex_state = 30}, + [13] = {.lex_state = 30}, [14] = {.lex_state = 1}, [15] = {.lex_state = 1}, - [16] = {.lex_state = 32}, - [17] = {.lex_state = 32}, - [18] = {.lex_state = 0}, + [16] = {.lex_state = 1}, + [17] = {.lex_state = 0}, + [18] = {.lex_state = 1}, [19] = {.lex_state = 1}, - [20] = {.lex_state = 1}, - [21] = {.lex_state = 37}, - [22] = {.lex_state = 1}, - [23] = {.lex_state = 1}, - [24] = {.lex_state = 34}, - [25] = {.lex_state = 33}, + [20] = {.lex_state = 27}, + [21] = {.lex_state = 24}, + [22] = {.lex_state = 29}, + [23] = {.lex_state = 25}, + [24] = {.lex_state = 24}, + [25] = {.lex_state = 1}, [26] = {.lex_state = 1}, [27] = {.lex_state = 1}, - [28] = {.lex_state = 35}, + [28] = {.lex_state = 1}, [29] = {.lex_state = 1}, [30] = {.lex_state = 1}, + [31] = {.lex_state = 26}, + [32] = {.lex_state = 1}, + [33] = {.lex_state = 1}, + [34] = {.lex_state = 1}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [STATE(0)] = { [ts_builtin_sym_end] = ACTIONS(1), [sym_content] = ACTIONS(1), - [anon_sym_RBRACE] = ACTIONS(1), [anon_sym_LBRACE] = ACTIONS(1), - [anon_sym_DASH] = ACTIONS(1), [anon_sym_COLON] = ACTIONS(1), + [anon_sym_RBRACE] = ACTIONS(1), + [anon_sym_SLASH] = ACTIONS(1), + [anon_sym_DASH] = ACTIONS(1), [anon_sym_EQ] = ACTIONS(1), [sym_attribute_name] = ACTIONS(1), [sym_block_name] = ACTIONS(1), @@ -809,300 +927,289 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_color] = ACTIONS(1), [anon_sym_font] = ACTIONS(1), [anon_sym_image] = ACTIONS(1), - [sym__block_open_start] = ACTIONS(1), - [sym__block_close_start] = ACTIONS(1), - [sym__lang_start] = ACTIONS(1), + [sym_block_keyword] = ACTIONS(1), + [sym_lang_keyword] = ACTIONS(1), [sym__space] = ACTIONS(1), }, [STATE(1)] = { - [sym_template] = STATE(18), - [sym__node] = STATE(2), - [sym_block_open] = STATE(2), - [sym_block_close] = STATE(2), - [sym_lang_tag] = STATE(2), - [sym_variable] = STATE(2), - [aux_sym_template_repeat1] = STATE(2), + [sym_template] = STATE(17), + [sym__node] = STATE(3), + [sym_block_open] = STATE(3), + [sym_block_close] = STATE(3), + [sym_lang_tag] = STATE(3), + [sym_variable] = STATE(3), + [aux_sym_template_repeat1] = STATE(3), [ts_builtin_sym_end] = ACTIONS(3), [sym_content] = ACTIONS(5), [anon_sym_LBRACE] = ACTIONS(7), - [sym__block_open_start] = ACTIONS(9), - [sym__block_close_start] = ACTIONS(11), - [sym__lang_start] = ACTIONS(13), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 7, - ACTIONS(7), 1, - anon_sym_LBRACE, + [0] = 6, ACTIONS(9), 1, - sym__block_open_start, + anon_sym_SLASH, ACTIONS(11), 1, - sym__block_close_start, - ACTIONS(13), 1, - sym__lang_start, - ACTIONS(15), 1, - ts_builtin_sym_end, - ACTIONS(17), 1, - sym_content, - STATE(3), 6, - sym__node, - sym_block_open, - sym_block_close, - sym_lang_tag, - sym_variable, - aux_sym_template_repeat1, - [27] = 7, - ACTIONS(19), 1, - ts_builtin_sym_end, - ACTIONS(21), 1, - sym_content, - ACTIONS(24), 1, - anon_sym_LBRACE, - ACTIONS(27), 1, - sym__block_open_start, - ACTIONS(30), 1, - sym__block_close_start, - ACTIONS(33), 1, - sym__lang_start, - STATE(3), 6, - sym__node, - sym_block_open, - sym_block_close, - sym_lang_tag, - sym_variable, - aux_sym_template_repeat1, - [54] = 3, - ACTIONS(36), 1, sym_variable_name, - STATE(20), 1, + ACTIONS(15), 1, + sym_block_keyword, + ACTIONS(17), 1, + sym_lang_keyword, + STATE(16), 1, sym_variable_prefix, - ACTIONS(38), 4, + ACTIONS(13), 4, anon_sym_text, anon_sym_color, anon_sym_font, anon_sym_image, - [67] = 2, - ACTIONS(42), 2, - sym_content, + [22] = 4, + ACTIONS(7), 1, anon_sym_LBRACE, - ACTIONS(40), 4, + ACTIONS(19), 1, ts_builtin_sym_end, - sym__block_open_start, - sym__block_close_start, - sym__lang_start, - [78] = 2, - ACTIONS(46), 2, + ACTIONS(21), 1, sym_content, - anon_sym_LBRACE, - ACTIONS(44), 4, + STATE(4), 6, + sym__node, + sym_block_open, + sym_block_close, + sym_lang_tag, + sym_variable, + aux_sym_template_repeat1, + [40] = 4, + ACTIONS(23), 1, ts_builtin_sym_end, - sym__block_open_start, - sym__block_close_start, - sym__lang_start, - [89] = 2, - ACTIONS(50), 2, + ACTIONS(25), 1, sym_content, + ACTIONS(28), 1, anon_sym_LBRACE, - ACTIONS(48), 4, - ts_builtin_sym_end, - sym__block_open_start, - sym__block_close_start, - sym__lang_start, - [100] = 2, - ACTIONS(54), 2, - sym_content, - anon_sym_LBRACE, - ACTIONS(52), 4, - ts_builtin_sym_end, - sym__block_open_start, - sym__block_close_start, - sym__lang_start, - [111] = 2, - ACTIONS(58), 2, - sym_content, - anon_sym_LBRACE, - ACTIONS(56), 4, - ts_builtin_sym_end, - sym__block_open_start, - sym__block_close_start, - sym__lang_start, - [122] = 2, - ACTIONS(62), 2, - sym_content, - anon_sym_LBRACE, - ACTIONS(60), 4, - ts_builtin_sym_end, - sym__block_open_start, - sym__block_close_start, - sym__lang_start, - [133] = 4, - ACTIONS(64), 1, + STATE(4), 6, + sym__node, + sym_block_open, + sym_block_close, + sym_lang_tag, + sym_variable, + aux_sym_template_repeat1, + [58] = 4, + ACTIONS(31), 1, anon_sym_RBRACE, - ACTIONS(66), 1, + ACTIONS(33), 1, sym__space, STATE(29), 1, sym_attributes, - STATE(12), 2, + STATE(6), 2, sym_attribute, aux_sym_attributes_repeat1, - [147] = 3, - ACTIONS(66), 1, + [72] = 3, + ACTIONS(33), 1, sym__space, + ACTIONS(35), 1, + anon_sym_RBRACE, + STATE(7), 2, + sym_attribute, + aux_sym_attributes_repeat1, + [83] = 3, + ACTIONS(37), 1, + anon_sym_RBRACE, + ACTIONS(39), 1, + sym__space, + STATE(7), 2, + sym_attribute, + aux_sym_attributes_repeat1, + [94] = 2, + ACTIONS(44), 1, + sym_content, + ACTIONS(42), 2, + ts_builtin_sym_end, + anon_sym_LBRACE, + [102] = 2, + ACTIONS(48), 1, + sym_content, + ACTIONS(46), 2, + ts_builtin_sym_end, + anon_sym_LBRACE, + [110] = 2, + ACTIONS(52), 1, + sym_content, + ACTIONS(50), 2, + ts_builtin_sym_end, + anon_sym_LBRACE, + [118] = 2, + ACTIONS(56), 1, + sym_content, + ACTIONS(54), 2, + ts_builtin_sym_end, + anon_sym_LBRACE, + [126] = 2, + ACTIONS(60), 1, + sym_content, + ACTIONS(58), 2, + ts_builtin_sym_end, + anon_sym_LBRACE, + [134] = 2, + ACTIONS(64), 1, + sym_content, + ACTIONS(62), 2, + ts_builtin_sym_end, + anon_sym_LBRACE, + [142] = 1, + ACTIONS(66), 2, + anon_sym_RBRACE, + sym__space, + [147] = 2, ACTIONS(68), 1, anon_sym_RBRACE, - STATE(13), 2, - sym_attribute, - aux_sym_attributes_repeat1, - [158] = 3, ACTIONS(70), 1, - anon_sym_RBRACE, - ACTIONS(72), 1, - sym__space, - STATE(13), 2, - sym_attribute, - aux_sym_attributes_repeat1, - [169] = 2, - ACTIONS(75), 1, - anon_sym_RBRACE, - ACTIONS(77), 1, anon_sym_DASH, - [176] = 1, - ACTIONS(79), 2, - anon_sym_RBRACE, - sym__space, - [181] = 1, - ACTIONS(81), 1, - sym_block_name, - [185] = 1, - ACTIONS(83), 1, - sym_block_name, - [189] = 1, - ACTIONS(85), 1, + [154] = 1, + ACTIONS(72), 1, + anon_sym_COLON, + [158] = 1, + ACTIONS(74), 1, ts_builtin_sym_end, - [193] = 1, - ACTIONS(87), 1, + [162] = 1, + ACTIONS(76), 1, anon_sym_COLON, - [197] = 1, - ACTIONS(89), 1, + [166] = 1, + ACTIONS(78), 1, anon_sym_COLON, - [201] = 1, - ACTIONS(91), 1, - sym_lang_text, - [205] = 1, - ACTIONS(93), 1, - anon_sym_RBRACE, - [209] = 1, - ACTIONS(95), 1, - anon_sym_RBRACE, - [213] = 1, - ACTIONS(97), 1, - sym_attribute_name, - [217] = 1, - ACTIONS(99), 1, - sym_prefix_argument, - [221] = 1, - ACTIONS(101), 1, - anon_sym_RBRACE, - [225] = 1, - ACTIONS(103), 1, - anon_sym_EQ, - [229] = 1, - ACTIONS(99), 1, + [170] = 1, + ACTIONS(80), 1, sym_variable_modifier, - [233] = 1, - ACTIONS(105), 1, + [174] = 1, + ACTIONS(82), 1, + sym_block_name, + [178] = 1, + ACTIONS(84), 1, + sym_lang_text, + [182] = 1, + ACTIONS(80), 1, + sym_prefix_argument, + [186] = 1, + ACTIONS(86), 1, + sym_block_name, + [190] = 1, + ACTIONS(88), 1, anon_sym_RBRACE, - [237] = 1, - ACTIONS(107), 1, + [194] = 1, + ACTIONS(90), 1, + sym_block_keyword, + [198] = 1, + ACTIONS(92), 1, + anon_sym_RBRACE, + [202] = 1, + ACTIONS(94), 1, + anon_sym_COLON, + [206] = 1, + ACTIONS(96), 1, + anon_sym_RBRACE, + [210] = 1, + ACTIONS(98), 1, + anon_sym_EQ, + [214] = 1, + ACTIONS(100), 1, + sym_attribute_name, + [218] = 1, + ACTIONS(102), 1, + anon_sym_COLON, + [222] = 1, + ACTIONS(104), 1, sym_attribute_value, + [226] = 1, + ACTIONS(106), 1, + anon_sym_RBRACE, }; static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(2)] = 0, - [SMALL_STATE(3)] = 27, - [SMALL_STATE(4)] = 54, - [SMALL_STATE(5)] = 67, - [SMALL_STATE(6)] = 78, - [SMALL_STATE(7)] = 89, - [SMALL_STATE(8)] = 100, - [SMALL_STATE(9)] = 111, - [SMALL_STATE(10)] = 122, - [SMALL_STATE(11)] = 133, - [SMALL_STATE(12)] = 147, - [SMALL_STATE(13)] = 158, - [SMALL_STATE(14)] = 169, - [SMALL_STATE(15)] = 176, - [SMALL_STATE(16)] = 181, - [SMALL_STATE(17)] = 185, - [SMALL_STATE(18)] = 189, - [SMALL_STATE(19)] = 193, - [SMALL_STATE(20)] = 197, - [SMALL_STATE(21)] = 201, - [SMALL_STATE(22)] = 205, - [SMALL_STATE(23)] = 209, - [SMALL_STATE(24)] = 213, - [SMALL_STATE(25)] = 217, - [SMALL_STATE(26)] = 221, - [SMALL_STATE(27)] = 225, - [SMALL_STATE(28)] = 229, - [SMALL_STATE(29)] = 233, - [SMALL_STATE(30)] = 237, + [SMALL_STATE(3)] = 22, + [SMALL_STATE(4)] = 40, + [SMALL_STATE(5)] = 58, + [SMALL_STATE(6)] = 72, + [SMALL_STATE(7)] = 83, + [SMALL_STATE(8)] = 94, + [SMALL_STATE(9)] = 102, + [SMALL_STATE(10)] = 110, + [SMALL_STATE(11)] = 118, + [SMALL_STATE(12)] = 126, + [SMALL_STATE(13)] = 134, + [SMALL_STATE(14)] = 142, + [SMALL_STATE(15)] = 147, + [SMALL_STATE(16)] = 154, + [SMALL_STATE(17)] = 158, + [SMALL_STATE(18)] = 162, + [SMALL_STATE(19)] = 166, + [SMALL_STATE(20)] = 170, + [SMALL_STATE(21)] = 174, + [SMALL_STATE(22)] = 178, + [SMALL_STATE(23)] = 182, + [SMALL_STATE(24)] = 186, + [SMALL_STATE(25)] = 190, + [SMALL_STATE(26)] = 194, + [SMALL_STATE(27)] = 198, + [SMALL_STATE(28)] = 202, + [SMALL_STATE(29)] = 206, + [SMALL_STATE(30)] = 210, + [SMALL_STATE(31)] = 214, + [SMALL_STATE(32)] = 218, + [SMALL_STATE(33)] = 222, + [SMALL_STATE(34)] = 226, }; static const TSParseActionEntry ts_parse_actions[] = { [0] = {.entry = {.count = 0, .reusable = false}}, [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), [3] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template, 0, 0, 0), - [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2), - [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(4), - [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [15] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template, 1, 0, 0), - [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3), - [19] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_template_repeat1, 2, 0, 0), - [21] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_template_repeat1, 2, 0, 0), SHIFT_REPEAT(3), - [24] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_template_repeat1, 2, 0, 0), SHIFT_REPEAT(4), - [27] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_repeat1, 2, 0, 0), SHIFT_REPEAT(17), - [30] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_repeat1, 2, 0, 0), SHIFT_REPEAT(16), - [33] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_repeat1, 2, 0, 0), SHIFT_REPEAT(21), - [36] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [38] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [40] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable, 3, 0, 0), - [42] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable, 3, 0, 0), - [44] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lang_tag, 3, 0, 0), - [46] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lang_tag, 3, 0, 0), - [48] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block_open, 3, 0, 0), - [50] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block_open, 3, 0, 0), - [52] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block_close, 3, 0, 0), - [54] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block_close, 3, 0, 0), - [56] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block_open, 4, 0, 0), - [58] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block_open, 4, 0, 0), - [60] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable, 5, 0, 0), - [62] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable, 5, 0, 0), - [64] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [68] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attributes, 1, 0, 0), - [70] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_attributes_repeat1, 2, 0, 0), - [72] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attributes_repeat1, 2, 0, 0), SHIFT_REPEAT(24), - [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [79] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 4, 0, 0), - [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [83] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [85] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [87] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_prefix, 1, 0, 0), - [89] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [93] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [95] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [97] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [99] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [19] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_template, 1, 0, 0), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(4), + [23] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_template_repeat1, 2, 0, 0), + [25] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_template_repeat1, 2, 0, 0), SHIFT_REPEAT(4), + [28] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_template_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [35] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attributes, 1, 0, 0), + [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_attributes_repeat1, 2, 0, 0), + [39] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_attributes_repeat1, 2, 0, 0), SHIFT_REPEAT(31), + [42] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lang_tag, 5, 0, 0), + [44] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lang_tag, 5, 0, 0), + [46] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable, 3, 0, 0), + [48] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable, 3, 0, 0), + [50] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable, 5, 0, 0), + [52] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable, 5, 0, 0), + [54] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block_close, 6, 0, 0), + [56] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block_close, 6, 0, 0), + [58] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block_open, 5, 0, 0), + [60] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block_open, 5, 0, 0), + [62] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block_open, 6, 0, 0), + [64] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block_open, 6, 0, 0), + [66] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 4, 0, 0), + [68] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [70] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [72] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [74] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [76] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [78] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [80] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [82] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [84] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [86] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [88] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [90] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [92] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [94] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_prefix, 1, 0, 0), + [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [98] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), }; #ifdef __cplusplus diff --git a/test/corpus/blocks.txt b/test/corpus/blocks.txt index 2c68652..734f342 100644 --- a/test/corpus/blocks.txt +++ b/test/corpus/blocks.txt @@ -9,8 +9,10 @@ Simple block (template (content) (block_open + (block_keyword) (block_name)) (block_close + (block_keyword) (block_name)) (content)) @@ -25,12 +27,14 @@ Block with content (template (content) (block_open + (block_keyword) (block_name)) (content) (variable (variable_name)) (content) (block_close + (block_keyword) (block_name)) (content)) @@ -45,14 +49,18 @@ Nested blocks (template (content) (block_open + (block_keyword) (block_name)) (block_open + (block_keyword) (block_name)) (variable (variable_name)) (block_close + (block_keyword) (block_name)) (block_close + (block_keyword) (block_name)) (content)) @@ -67,6 +75,7 @@ Block with one attribute (template (content) (block_open + (block_keyword) (block_name) (attributes (attribute @@ -75,6 +84,7 @@ Block with one attribute (variable (variable_name)) (block_close + (block_keyword) (block_name)) (content)) @@ -89,6 +99,7 @@ Block with multiple attributes (template (content) (block_open + (block_keyword) (block_name) (attributes (attribute @@ -98,6 +109,7 @@ Block with multiple attributes (attribute_name) (attribute_value)))) (block_close + (block_keyword) (block_name)) (content)) @@ -112,8 +124,10 @@ Case insensitive block keyword (template (content) (block_open + (block_keyword) (block_name)) (block_close + (block_keyword) (block_name)) (content)) @@ -128,12 +142,16 @@ Conditional block (template (content) (block_open + (block_keyword) (block_name)) (block_open + (block_keyword) (block_name)) (content) (block_close + (block_keyword) (block_name)) (block_close + (block_keyword) (block_name)) (content)) diff --git a/test/corpus/lang.txt b/test/corpus/lang.txt index 010c4b2..9c71322 100644 --- a/test/corpus/lang.txt +++ b/test/corpus/lang.txt @@ -9,6 +9,7 @@ Simple lang tag (template (content) (lang_tag + (lang_keyword) (lang_text)) (content)) @@ -23,5 +24,6 @@ Lang tag with spaces and punctuation (template (content) (lang_tag + (lang_keyword) (lang_text)) (content))