From 7557a34c89de5a994cc06025c8122dfa3a5af8cf Mon Sep 17 00:00:00 2001 From: Kistaro Windrider Date: Fri, 1 May 2026 12:56:59 -0700 Subject: [PATCH] Cart grammar: tolerate leading blank lines before the magic header `extras: $ => []` in the cart grammar made the parser fail at byte 0 on any whitespace-only or empty line before `pico-8 cartridge //...`. Real PICO-8 carts always start with the header at byte 0 so this rarely surfaced in production, but it ( a ) broke the `tree-sitter test` corpus harness, which prepends a newline to each fixture, and ( b ) would mis-flag a hand-edited cart that gained an accidental blank line up top. Fix: prefix the `cartridge` rule with `repeat($._blank_line)` and add a hidden `_blank_line` token matching `[ \t]*\n`. Junk content before the header ( a non-blank, non-magic line ) still produces an ERROR. Restores the test corpus that was dropped in v0.1 ( previously failing on this same edge case ) and adds a fixture for the unknown_section fallback while the corpus is being rebuilt. Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 13 +- grammars/p8-cart/grammar.js | 17 +- grammars/p8-cart/src/grammar.json | 14 + grammars/p8-cart/src/parser.c | 1931 +++++++++++++------------ grammars/p8-cart/test/corpus/cart.txt | 109 ++ 5 files changed, 1190 insertions(+), 894 deletions(-) create mode 100644 grammars/p8-cart/test/corpus/cart.txt diff --git a/README.md b/README.md index 25fff5d..75e3eeb 100644 --- a/README.md +++ b/README.md @@ -149,10 +149,15 @@ dev extension to pick up changes. ### Tests -Sample carts live under `examples/`. Use `tree-sitter parse` directly for -verification — corpus-style `tree-sitter test` is not currently set up -because the cart grammar's strict `extras: []` doesn't tolerate the -leading newline that the test harness prepends to each fixture. +Sample carts live under `examples/`; parse them directly with +`tree-sitter parse ` for ad-hoc checks. + +The cart grammar has a corpus under `grammars/p8-cart/test/corpus/` — +run `( cd grammars/p8-cart && npx tree-sitter test )`. The corpus +covers the empty-section skeleton, normal Lua content, the case where +a Lua identifier resembles a section marker ( e.g. `local __foo__ = 1` +must remain a `line`, not be re-tokenized as a marker ), and the +fallback `unknown_section` rule. ## Roadmap diff --git a/grammars/p8-cart/grammar.js b/grammars/p8-cart/grammar.js index ad59cc8..255fc9d 100644 --- a/grammars/p8-cart/grammar.js +++ b/grammars/p8-cart/grammar.js @@ -18,16 +18,31 @@ module.exports = grammar({ name: 'p8_cart', - // Whitespace is significant inside hex sections, so we don't skip it. + // Whitespace is significant inside hex sections, so we don't skip it + // globally. Tolerance for stray leading blanks before the magic header + // is added explicitly via the `repeat($._blank_line)` at the top of + // `cartridge` ( see below ). extras: $ => [], rules: { cartridge: $ => seq( + // Tolerate stray whitespace / blank lines before the magic header. + // Real PICO-8 carts begin with the header on byte 0, but allowing + // a leading run of blanks ( a ) lets the `tree-sitter test` corpus + // framework, which prepends a newline to each fixture, run cleanly + // and ( b ) keeps the parser robust against a hand-edited cart that + // gained an accidental blank line up top. + repeat($._blank_line), optional($.header), optional($.version), repeat($.section), ), + // A line that has no content other than horizontal whitespace and a + // newline. Hidden ( underscore prefix ) so it does not appear in the + // syntax tree. + _blank_line: $ => token(/[ \t]*\n/), + header: $ => /pico-8 cartridge \/\/[^\n]*\n/, version: $ => /version[ \t]+\d+\n/, diff --git a/grammars/p8-cart/src/grammar.json b/grammars/p8-cart/src/grammar.json index 403aa21..693583b 100644 --- a/grammars/p8-cart/src/grammar.json +++ b/grammars/p8-cart/src/grammar.json @@ -5,6 +5,13 @@ "cartridge": { "type": "SEQ", "members": [ + { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "_blank_line" + } + }, { "type": "CHOICE", "members": [ @@ -38,6 +45,13 @@ } ] }, + "_blank_line": { + "type": "TOKEN", + "content": { + "type": "PATTERN", + "value": "[ \\t]*\\n" + } + }, "header": { "type": "PATTERN", "value": "pico-8 cartridge \\/\\/[^\\n]*\\n" diff --git a/grammars/p8-cart/src/parser.c b/grammars/p8-cart/src/parser.c index e218596..0fc988a 100644 --- a/grammars/p8-cart/src/parser.c +++ b/grammars/p8-cart/src/parser.c @@ -5,48 +5,51 @@ #endif #define LANGUAGE_VERSION 14 -#define STATE_COUNT 31 -#define LARGE_STATE_COUNT 9 -#define SYMBOL_COUNT 28 +#define STATE_COUNT 36 +#define LARGE_STATE_COUNT 13 +#define SYMBOL_COUNT 30 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 13 +#define TOKEN_COUNT 14 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 0 -#define MAX_ALIAS_SEQUENCE_LENGTH 3 +#define MAX_ALIAS_SEQUENCE_LENGTH 4 #define PRODUCTION_ID_COUNT 1 enum ts_symbol_identifiers { - sym_header = 1, - sym_version = 2, - sym_lua_marker = 3, - sym_gfx_marker = 4, - sym_gff_marker = 5, - sym_label_marker = 6, - sym_map_marker = 7, - sym_sfx_marker = 8, - sym_music_marker = 9, - sym_section_marker = 10, - aux_sym_line_token1 = 11, - aux_sym_line_token2 = 12, - sym_cartridge = 13, - sym_section = 14, - sym_lua_section = 15, - sym_gfx_section = 16, - sym_gff_section = 17, - sym_label_section = 18, - sym_map_section = 19, - sym_sfx_section = 20, - sym_music_section = 21, - sym_unknown_section = 22, - sym_lua_content = 23, - sym_body = 24, - sym_line = 25, - aux_sym_cartridge_repeat1 = 26, - aux_sym_lua_content_repeat1 = 27, + sym__blank_line = 1, + sym_header = 2, + sym_version = 3, + sym_lua_marker = 4, + sym_gfx_marker = 5, + sym_gff_marker = 6, + sym_label_marker = 7, + sym_map_marker = 8, + sym_sfx_marker = 9, + sym_music_marker = 10, + sym_section_marker = 11, + aux_sym_line_token1 = 12, + aux_sym_line_token2 = 13, + sym_cartridge = 14, + sym_section = 15, + sym_lua_section = 16, + sym_gfx_section = 17, + sym_gff_section = 18, + sym_label_section = 19, + sym_map_section = 20, + sym_sfx_section = 21, + sym_music_section = 22, + sym_unknown_section = 23, + sym_lua_content = 24, + sym_body = 25, + sym_line = 26, + aux_sym_cartridge_repeat1 = 27, + aux_sym_cartridge_repeat2 = 28, + aux_sym_lua_content_repeat1 = 29, }; static const char * const ts_symbol_names[] = { [ts_builtin_sym_end] = "end", + [sym__blank_line] = "_blank_line", [sym_header] = "header", [sym_version] = "version", [sym_lua_marker] = "lua_marker", @@ -73,11 +76,13 @@ static const char * const ts_symbol_names[] = { [sym_body] = "body", [sym_line] = "line", [aux_sym_cartridge_repeat1] = "cartridge_repeat1", + [aux_sym_cartridge_repeat2] = "cartridge_repeat2", [aux_sym_lua_content_repeat1] = "lua_content_repeat1", }; static const TSSymbol ts_symbol_map[] = { [ts_builtin_sym_end] = ts_builtin_sym_end, + [sym__blank_line] = sym__blank_line, [sym_header] = sym_header, [sym_version] = sym_version, [sym_lua_marker] = sym_lua_marker, @@ -104,6 +109,7 @@ static const TSSymbol ts_symbol_map[] = { [sym_body] = sym_body, [sym_line] = sym_line, [aux_sym_cartridge_repeat1] = aux_sym_cartridge_repeat1, + [aux_sym_cartridge_repeat2] = aux_sym_cartridge_repeat2, [aux_sym_lua_content_repeat1] = aux_sym_lua_content_repeat1, }; @@ -112,6 +118,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = true, }, + [sym__blank_line] = { + .visible = false, + .named = true, + }, [sym_header] = { .visible = true, .named = true, @@ -216,6 +226,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = false, }, + [aux_sym_cartridge_repeat2] = { + .visible = false, + .named = false, + }, [aux_sym_lua_content_repeat1] = { .visible = false, .named = false, @@ -262,6 +276,11 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [28] = 28, [29] = 29, [30] = 30, + [31] = 31, + [32] = 32, + [33] = 33, + [34] = 34, + [35] = 35, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -269,708 +288,719 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(70); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(82); - if (lookahead != 0) ADVANCE(114); + if (eof) ADVANCE(71); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(84); + if (lookahead != 0) ADVANCE(116); END_STATE(); case 1: - if (lookahead == '\n') ADVANCE(80); + if (lookahead == '\n') ADVANCE(82); if (lookahead == '_') ADVANCE(1); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 2: - if (lookahead == '\n') ADVANCE(75); - if (lookahead == '_') ADVANCE(1); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); - END_STATE(); - case 3: - if (lookahead == '\n') ADVANCE(74); - if (lookahead == '_') ADVANCE(1); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); - END_STATE(); - case 4: - if (lookahead == '\n') ADVANCE(73); - if (lookahead == '_') ADVANCE(1); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); - END_STATE(); - case 5: if (lookahead == '\n') ADVANCE(77); if (lookahead == '_') ADVANCE(1); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); - case 6: - if (lookahead == '\n') ADVANCE(78); - if (lookahead == '_') ADVANCE(1); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); - END_STATE(); - case 7: + case 3: if (lookahead == '\n') ADVANCE(76); if (lookahead == '_') ADVANCE(1); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); - case 8: + case 4: + if (lookahead == '\n') ADVANCE(75); + if (lookahead == '_') ADVANCE(1); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); + END_STATE(); + case 5: if (lookahead == '\n') ADVANCE(79); if (lookahead == '_') ADVANCE(1); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); + END_STATE(); + case 6: + if (lookahead == '\n') ADVANCE(80); + if (lookahead == '_') ADVANCE(1); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); + END_STATE(); + case 7: + if (lookahead == '\n') ADVANCE(78); + if (lookahead == '_') ADVANCE(1); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); + END_STATE(); + case 8: + if (lookahead == '\n') ADVANCE(81); + if (lookahead == '_') ADVANCE(1); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 9: if (lookahead == '\n') ADVANCE(72); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(9); + if (lookahead == '\t' || + lookahead == ' ') ADVANCE(9); END_STATE(); case 10: - if (lookahead == '\n') ADVANCE(71); - if (lookahead != 0) ADVANCE(10); + if (lookahead == '\n') ADVANCE(74); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(10); END_STATE(); case 11: - if (lookahead == ' ') ADVANCE(15); + if (lookahead == '\n') ADVANCE(73); + if (lookahead != 0) ADVANCE(11); END_STATE(); case 12: - if (lookahead == ' ') ADVANCE(50); + if (lookahead == ' ') ADVANCE(16); END_STATE(); case 13: - if (lookahead == '-') ADVANCE(16); + if (lookahead == ' ') ADVANCE(51); END_STATE(); case 14: - if (lookahead == '/') ADVANCE(10); + if (lookahead == '-') ADVANCE(17); END_STATE(); case 15: - if (lookahead == '/') ADVANCE(14); + if (lookahead == '/') ADVANCE(11); END_STATE(); case 16: - if (lookahead == '8') ADVANCE(12); + if (lookahead == '/') ADVANCE(15); END_STATE(); case 17: - if (lookahead == '_') ADVANCE(54); + if (lookahead == '8') ADVANCE(13); END_STATE(); case 18: - if (lookahead == '_') ADVANCE(1); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + if (lookahead == '_') ADVANCE(55); END_STATE(); case 19: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'a') ADVANCE(22); - if (lookahead == 'u') ADVANCE(21); + if (lookahead == '_') ADVANCE(1); if (('0' <= lookahead && lookahead <= '9') || - ('b' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 20: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'a') ADVANCE(30); - if (lookahead == 'u') ADVANCE(31); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'a') ADVANCE(23); + if (lookahead == 'u') ADVANCE(22); if (('0' <= lookahead && lookahead <= '9') || - ('b' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 21: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'a') ADVANCE(39); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'a') ADVANCE(31); + if (lookahead == 'u') ADVANCE(32); if (('0' <= lookahead && lookahead <= '9') || - ('b' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 22: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'b') ADVANCE(24); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'a') ADVANCE(40); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 23: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'c') ADVANCE(47); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'b') ADVANCE(25); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 24: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'e') ADVANCE(29); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'c') ADVANCE(48); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 25: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'f') ADVANCE(27); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'e') ADVANCE(30); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 26: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'f') ADVANCE(32); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'f') ADVANCE(28); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 27: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'f') ADVANCE(35); - if (lookahead == 'x') ADVANCE(37); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'f') ADVANCE(33); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 28: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'i') ADVANCE(23); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'f') ADVANCE(36); + if (lookahead == 'x') ADVANCE(38); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 29: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'l') ADVANCE(45); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'i') ADVANCE(24); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 30: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'p') ADVANCE(41); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'l') ADVANCE(46); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 31: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 's') ADVANCE(28); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'p') ADVANCE(42); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 32: - if (lookahead == '_') ADVANCE(18); - if (lookahead == 'x') ADVANCE(43); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 's') ADVANCE(29); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 33: - if (lookahead == '_') ADVANCE(18); + if (lookahead == '_') ADVANCE(19); + if (lookahead == 'x') ADVANCE(44); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 34: - if (lookahead == '_') ADVANCE(2); + if (lookahead == '_') ADVANCE(19); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 35: - if (lookahead == '_') ADVANCE(34); + if (lookahead == '_') ADVANCE(2); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 36: - if (lookahead == '_') ADVANCE(3); + if (lookahead == '_') ADVANCE(35); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 37: - if (lookahead == '_') ADVANCE(36); + if (lookahead == '_') ADVANCE(3); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 38: - if (lookahead == '_') ADVANCE(4); + if (lookahead == '_') ADVANCE(37); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 39: - if (lookahead == '_') ADVANCE(38); + if (lookahead == '_') ADVANCE(4); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 40: - if (lookahead == '_') ADVANCE(5); + if (lookahead == '_') ADVANCE(39); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 41: - if (lookahead == '_') ADVANCE(40); + if (lookahead == '_') ADVANCE(5); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 42: - if (lookahead == '_') ADVANCE(6); + if (lookahead == '_') ADVANCE(41); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 43: - if (lookahead == '_') ADVANCE(42); + if (lookahead == '_') ADVANCE(6); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 44: - if (lookahead == '_') ADVANCE(7); + if (lookahead == '_') ADVANCE(43); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 45: - if (lookahead == '_') ADVANCE(44); + if (lookahead == '_') ADVANCE(7); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 46: - if (lookahead == '_') ADVANCE(8); + if (lookahead == '_') ADVANCE(45); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 47: - if (lookahead == '_') ADVANCE(46); + if (lookahead == '_') ADVANCE(8); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 48: - if (lookahead == 'a') ADVANCE(63); + if (lookahead == '_') ADVANCE(47); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 49: - if (lookahead == 'c') ADVANCE(60); + if (lookahead == 'a') ADVANCE(64); END_STATE(); case 50: - if (lookahead == 'c') ADVANCE(48); + if (lookahead == 'c') ADVANCE(61); END_STATE(); case 51: - if (lookahead == 'd') ADVANCE(55); + if (lookahead == 'c') ADVANCE(49); END_STATE(); case 52: - if (lookahead == 'e') ADVANCE(62); + if (lookahead == 'd') ADVANCE(56); END_STATE(); case 53: - if (lookahead == 'e') ADVANCE(11); + if (lookahead == 'e') ADVANCE(63); END_STATE(); case 54: - if (lookahead == 'g') ADVANCE(25); - if (lookahead == 'l') ADVANCE(19); - if (lookahead == 'm') ADVANCE(20); - if (lookahead == 's') ADVANCE(26); - if (('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + if (lookahead == 'e') ADVANCE(12); END_STATE(); case 55: - if (lookahead == 'g') ADVANCE(53); + if (lookahead == 'g') ADVANCE(26); + if (lookahead == 'l') ADVANCE(20); + if (lookahead == 'm') ADVANCE(21); + if (lookahead == 's') ADVANCE(27); + if (('a' <= lookahead && lookahead <= 'z')) ADVANCE(34); END_STATE(); case 56: - if (lookahead == 'i') ADVANCE(49); + if (lookahead == 'g') ADVANCE(54); END_STATE(); case 57: - if (lookahead == 'i') ADVANCE(51); + if (lookahead == 'i') ADVANCE(50); END_STATE(); case 58: - if (lookahead == 'i') ADVANCE(61); + if (lookahead == 'i') ADVANCE(52); END_STATE(); case 59: - if (lookahead == 'n') ADVANCE(67); + if (lookahead == 'i') ADVANCE(62); END_STATE(); case 60: - if (lookahead == 'o') ADVANCE(13); + if (lookahead == 'n') ADVANCE(68); END_STATE(); case 61: - if (lookahead == 'o') ADVANCE(59); + if (lookahead == 'o') ADVANCE(14); END_STATE(); case 62: - if (lookahead == 'r') ADVANCE(65); + if (lookahead == 'o') ADVANCE(60); END_STATE(); case 63: if (lookahead == 'r') ADVANCE(66); END_STATE(); case 64: - if (lookahead == 'r') ADVANCE(57); + if (lookahead == 'r') ADVANCE(67); END_STATE(); case 65: - if (lookahead == 's') ADVANCE(58); + if (lookahead == 'r') ADVANCE(58); END_STATE(); case 66: - if (lookahead == 't') ADVANCE(64); + if (lookahead == 's') ADVANCE(59); END_STATE(); case 67: - if (lookahead == '\t' || - lookahead == ' ') ADVANCE(68); + if (lookahead == 't') ADVANCE(65); END_STATE(); case 68: if (lookahead == '\t' || - lookahead == ' ') ADVANCE(68); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(9); + lookahead == ' ') ADVANCE(69); END_STATE(); case 69: - if (eof) ADVANCE(70); - if (lookahead == '_') ADVANCE(17); - if (lookahead == 'p') ADVANCE(56); - if (lookahead == 'v') ADVANCE(52); + if (lookahead == '\t' || + lookahead == ' ') ADVANCE(69); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(10); END_STATE(); case 70: - ACCEPT_TOKEN(ts_builtin_sym_end); + if (eof) ADVANCE(71); + if (lookahead == '\n') ADVANCE(72); + if (lookahead == '_') ADVANCE(18); + if (lookahead == 'p') ADVANCE(57); + if (lookahead == 'v') ADVANCE(53); + if (lookahead == '\t' || + lookahead == ' ') ADVANCE(9); END_STATE(); case 71: - ACCEPT_TOKEN(sym_header); + ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); case 72: - ACCEPT_TOKEN(sym_version); + ACCEPT_TOKEN(sym__blank_line); END_STATE(); case 73: - ACCEPT_TOKEN(sym_lua_marker); + ACCEPT_TOKEN(sym_header); END_STATE(); case 74: - ACCEPT_TOKEN(sym_gfx_marker); + ACCEPT_TOKEN(sym_version); END_STATE(); case 75: - ACCEPT_TOKEN(sym_gff_marker); + ACCEPT_TOKEN(sym_lua_marker); END_STATE(); case 76: - ACCEPT_TOKEN(sym_label_marker); + ACCEPT_TOKEN(sym_gfx_marker); END_STATE(); case 77: - ACCEPT_TOKEN(sym_map_marker); + ACCEPT_TOKEN(sym_gff_marker); END_STATE(); case 78: - ACCEPT_TOKEN(sym_sfx_marker); + ACCEPT_TOKEN(sym_label_marker); END_STATE(); case 79: - ACCEPT_TOKEN(sym_music_marker); + ACCEPT_TOKEN(sym_map_marker); END_STATE(); case 80: - ACCEPT_TOKEN(sym_section_marker); + ACCEPT_TOKEN(sym_sfx_marker); END_STATE(); case 81: - ACCEPT_TOKEN(aux_sym_line_token1); + ACCEPT_TOKEN(sym_music_marker); END_STATE(); case 82: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(113); - if (lookahead != 0) ADVANCE(114); + ACCEPT_TOKEN(sym_section_marker); END_STATE(); case 83: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(115); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); + ACCEPT_TOKEN(aux_sym_line_token1); END_STATE(); case 84: ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(116); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(115); + if (lookahead != 0) ADVANCE(116); END_STATE(); case 85: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(117); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 86: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(118); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 87: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(119); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 88: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(120); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 89: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(121); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 90: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(122); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 91: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(123); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 92: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(124); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 93: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'a') ADVANCE(96); + if (lookahead == 'u') ADVANCE(95); + if (('0' <= lookahead && lookahead <= '9') || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 94: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'a') ADVANCE(104); + if (lookahead == 'u') ADVANCE(105); + if (('0' <= lookahead && lookahead <= '9') || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 95: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'a') ADVANCE(110); + if (('0' <= lookahead && lookahead <= '9') || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 96: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'b') ADVANCE(98); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 97: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'c') ADVANCE(114); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 98: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'e') ADVANCE(103); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 99: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'f') ADVANCE(101); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 100: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'f') ADVANCE(106); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 101: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'f') ADVANCE(108); + if (lookahead == 'x') ADVANCE(109); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 102: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'i') ADVANCE(97); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 103: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'l') ADVANCE(113); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 104: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'p') ADVANCE(111); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 105: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 's') ADVANCE(102); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 106: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (lookahead == 'x') ADVANCE(112); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 107: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(85); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 108: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(86); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 109: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(87); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 110: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(88); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 111: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(89); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 112: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(90); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 113: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(91); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 114: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == '_') ADVANCE(92); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 115: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead == 'g') ADVANCE(99); + if (lookahead == 'l') ADVANCE(93); + if (lookahead == 'm') ADVANCE(94); + if (lookahead == 's') ADVANCE(100); + if (('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 116: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(83); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 117: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(82); + if (lookahead == '_') ADVANCE(117); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 118: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(77); + if (lookahead == '_') ADVANCE(117); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 119: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(76); + if (lookahead == '_') ADVANCE(117); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 120: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(75); + if (lookahead == '_') ADVANCE(117); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 121: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(79); + if (lookahead == '_') ADVANCE(117); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 122: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(80); + if (lookahead == '_') ADVANCE(117); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 123: + ACCEPT_TOKEN(aux_sym_line_token2); + if (lookahead == '\n') ADVANCE(78); + if (lookahead == '_') ADVANCE(117); + if (('0' <= lookahead && lookahead <= '9') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); + END_STATE(); + case 124: ACCEPT_TOKEN(aux_sym_line_token2); if (lookahead == '\n') ADVANCE(81); if (lookahead == '_') ADVANCE(117); if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 86: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(118); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 87: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(119); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 88: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(120); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 89: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(121); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 90: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(122); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 91: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'a') ADVANCE(94); - if (lookahead == 'u') ADVANCE(93); - if (('0' <= lookahead && lookahead <= '9') || - ('b' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 92: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'a') ADVANCE(102); - if (lookahead == 'u') ADVANCE(103); - if (('0' <= lookahead && lookahead <= '9') || - ('b' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 93: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'a') ADVANCE(108); - if (('0' <= lookahead && lookahead <= '9') || - ('b' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 94: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'b') ADVANCE(96); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 95: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'c') ADVANCE(112); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 96: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'e') ADVANCE(101); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 97: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'f') ADVANCE(99); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 98: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'f') ADVANCE(104); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 99: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'f') ADVANCE(106); - if (lookahead == 'x') ADVANCE(107); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 100: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'i') ADVANCE(95); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 101: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'l') ADVANCE(111); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 102: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'p') ADVANCE(109); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 103: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 's') ADVANCE(100); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 104: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (lookahead == 'x') ADVANCE(110); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 105: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(83); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 106: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(84); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 107: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(85); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 108: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(86); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 109: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(87); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 110: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(88); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 111: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(89); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 112: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == '_') ADVANCE(90); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 113: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead == 'g') ADVANCE(97); - if (lookahead == 'l') ADVANCE(91); - if (lookahead == 'm') ADVANCE(92); - if (lookahead == 's') ADVANCE(98); - if (('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 114: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(81); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 115: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(80); - if (lookahead == '_') ADVANCE(115); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 116: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(75); - if (lookahead == '_') ADVANCE(115); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 117: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(74); - if (lookahead == '_') ADVANCE(115); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 118: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(73); - if (lookahead == '_') ADVANCE(115); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 119: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(77); - if (lookahead == '_') ADVANCE(115); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 120: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(78); - if (lookahead == '_') ADVANCE(115); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 121: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(76); - if (lookahead == '_') ADVANCE(115); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); - END_STATE(); - case 122: - ACCEPT_TOKEN(aux_sym_line_token2); - if (lookahead == '\n') ADVANCE(79); - if (lookahead == '_') ADVANCE(115); - if (('0' <= lookahead && lookahead <= '9') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(105); - if (lookahead != 0) ADVANCE(114); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(107); + if (lookahead != 0) ADVANCE(116); END_STATE(); default: return false; @@ -979,10 +1009,10 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { static const TSLexMode ts_lex_modes[STATE_COUNT] = { [0] = {.lex_state = 0}, - [1] = {.lex_state = 69}, - [2] = {.lex_state = 69}, - [3] = {.lex_state = 0}, - [4] = {.lex_state = 0}, + [1] = {.lex_state = 70}, + [2] = {.lex_state = 70}, + [3] = {.lex_state = 70}, + [4] = {.lex_state = 70}, [5] = {.lex_state = 0}, [6] = {.lex_state = 0}, [7] = {.lex_state = 0}, @@ -1000,7 +1030,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [19] = {.lex_state = 0}, [20] = {.lex_state = 0}, [21] = {.lex_state = 0}, - [22] = {.lex_state = 0}, + [22] = {.lex_state = 70}, [23] = {.lex_state = 0}, [24] = {.lex_state = 0}, [25] = {.lex_state = 0}, @@ -1009,6 +1039,11 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [28] = {.lex_state = 0}, [29] = {.lex_state = 0}, [30] = {.lex_state = 0}, + [31] = {.lex_state = 0}, + [32] = {.lex_state = 0}, + [33] = {.lex_state = 0}, + [34] = {.lex_state = 0}, + [35] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -1026,229 +1061,280 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_line_token2] = ACTIONS(1), }, [1] = { - [sym_cartridge] = STATE(30), - [sym_section] = STATE(4), - [sym_lua_section] = STATE(21), - [sym_gfx_section] = STATE(21), - [sym_gff_section] = STATE(21), - [sym_label_section] = STATE(21), - [sym_map_section] = STATE(21), - [sym_sfx_section] = STATE(21), - [sym_music_section] = STATE(21), - [sym_unknown_section] = STATE(21), - [aux_sym_cartridge_repeat1] = STATE(4), + [sym_cartridge] = STATE(35), + [sym_section] = STATE(8), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat1] = STATE(2), + [aux_sym_cartridge_repeat2] = STATE(8), [ts_builtin_sym_end] = ACTIONS(3), - [sym_header] = ACTIONS(5), - [sym_version] = ACTIONS(7), - [sym_lua_marker] = ACTIONS(9), - [sym_gfx_marker] = ACTIONS(11), - [sym_gff_marker] = ACTIONS(13), - [sym_label_marker] = ACTIONS(15), - [sym_map_marker] = ACTIONS(17), - [sym_sfx_marker] = ACTIONS(19), - [sym_music_marker] = ACTIONS(21), - [sym_section_marker] = ACTIONS(23), + [sym__blank_line] = ACTIONS(5), + [sym_header] = ACTIONS(7), + [sym_version] = ACTIONS(9), + [sym_lua_marker] = ACTIONS(11), + [sym_gfx_marker] = ACTIONS(13), + [sym_gff_marker] = ACTIONS(15), + [sym_label_marker] = ACTIONS(17), + [sym_map_marker] = ACTIONS(19), + [sym_sfx_marker] = ACTIONS(21), + [sym_music_marker] = ACTIONS(23), + [sym_section_marker] = ACTIONS(25), }, [2] = { [sym_section] = STATE(6), - [sym_lua_section] = STATE(21), - [sym_gfx_section] = STATE(21), - [sym_gff_section] = STATE(21), - [sym_label_section] = STATE(21), - [sym_map_section] = STATE(21), - [sym_sfx_section] = STATE(21), - [sym_music_section] = STATE(21), - [sym_unknown_section] = STATE(21), - [aux_sym_cartridge_repeat1] = STATE(6), - [ts_builtin_sym_end] = ACTIONS(25), - [sym_version] = ACTIONS(27), - [sym_lua_marker] = ACTIONS(9), - [sym_gfx_marker] = ACTIONS(11), - [sym_gff_marker] = ACTIONS(13), - [sym_label_marker] = ACTIONS(15), - [sym_map_marker] = ACTIONS(17), - [sym_sfx_marker] = ACTIONS(19), - [sym_music_marker] = ACTIONS(21), - [sym_section_marker] = ACTIONS(23), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat1] = STATE(22), + [aux_sym_cartridge_repeat2] = STATE(6), + [ts_builtin_sym_end] = ACTIONS(27), + [sym__blank_line] = ACTIONS(29), + [sym_header] = ACTIONS(31), + [sym_version] = ACTIONS(33), + [sym_lua_marker] = ACTIONS(11), + [sym_gfx_marker] = ACTIONS(13), + [sym_gff_marker] = ACTIONS(15), + [sym_label_marker] = ACTIONS(17), + [sym_map_marker] = ACTIONS(19), + [sym_sfx_marker] = ACTIONS(21), + [sym_music_marker] = ACTIONS(23), + [sym_section_marker] = ACTIONS(25), }, [3] = { [sym_section] = STATE(6), - [sym_lua_section] = STATE(21), - [sym_gfx_section] = STATE(21), - [sym_gff_section] = STATE(21), - [sym_label_section] = STATE(21), - [sym_map_section] = STATE(21), - [sym_sfx_section] = STATE(21), - [sym_music_section] = STATE(21), - [sym_unknown_section] = STATE(21), - [aux_sym_cartridge_repeat1] = STATE(6), - [ts_builtin_sym_end] = ACTIONS(25), - [sym_lua_marker] = ACTIONS(9), - [sym_gfx_marker] = ACTIONS(11), - [sym_gff_marker] = ACTIONS(13), - [sym_label_marker] = ACTIONS(15), - [sym_map_marker] = ACTIONS(17), - [sym_sfx_marker] = ACTIONS(19), - [sym_music_marker] = ACTIONS(21), - [sym_section_marker] = ACTIONS(23), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat2] = STATE(6), + [ts_builtin_sym_end] = ACTIONS(27), + [sym_version] = ACTIONS(33), + [sym_lua_marker] = ACTIONS(11), + [sym_gfx_marker] = ACTIONS(13), + [sym_gff_marker] = ACTIONS(15), + [sym_label_marker] = ACTIONS(17), + [sym_map_marker] = ACTIONS(19), + [sym_sfx_marker] = ACTIONS(21), + [sym_music_marker] = ACTIONS(23), + [sym_section_marker] = ACTIONS(25), }, [4] = { - [sym_section] = STATE(7), - [sym_lua_section] = STATE(21), - [sym_gfx_section] = STATE(21), - [sym_gff_section] = STATE(21), - [sym_label_section] = STATE(21), - [sym_map_section] = STATE(21), - [sym_sfx_section] = STATE(21), - [sym_music_section] = STATE(21), - [sym_unknown_section] = STATE(21), - [aux_sym_cartridge_repeat1] = STATE(7), - [ts_builtin_sym_end] = ACTIONS(25), - [sym_lua_marker] = ACTIONS(9), - [sym_gfx_marker] = ACTIONS(11), - [sym_gff_marker] = ACTIONS(13), - [sym_label_marker] = ACTIONS(15), - [sym_map_marker] = ACTIONS(17), - [sym_sfx_marker] = ACTIONS(19), - [sym_music_marker] = ACTIONS(21), - [sym_section_marker] = ACTIONS(23), + [sym_section] = STATE(9), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat2] = STATE(9), + [ts_builtin_sym_end] = ACTIONS(35), + [sym_version] = ACTIONS(37), + [sym_lua_marker] = ACTIONS(11), + [sym_gfx_marker] = ACTIONS(13), + [sym_gff_marker] = ACTIONS(15), + [sym_label_marker] = ACTIONS(17), + [sym_map_marker] = ACTIONS(19), + [sym_sfx_marker] = ACTIONS(21), + [sym_music_marker] = ACTIONS(23), + [sym_section_marker] = ACTIONS(25), }, [5] = { - [sym_section] = STATE(8), - [sym_lua_section] = STATE(21), - [sym_gfx_section] = STATE(21), - [sym_gff_section] = STATE(21), - [sym_label_section] = STATE(21), - [sym_map_section] = STATE(21), - [sym_sfx_section] = STATE(21), - [sym_music_section] = STATE(21), - [sym_unknown_section] = STATE(21), - [aux_sym_cartridge_repeat1] = STATE(8), - [ts_builtin_sym_end] = ACTIONS(29), - [sym_lua_marker] = ACTIONS(9), - [sym_gfx_marker] = ACTIONS(11), - [sym_gff_marker] = ACTIONS(13), - [sym_label_marker] = ACTIONS(15), - [sym_map_marker] = ACTIONS(17), - [sym_sfx_marker] = ACTIONS(19), - [sym_music_marker] = ACTIONS(21), - [sym_section_marker] = ACTIONS(23), + [sym_section] = STATE(9), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat2] = STATE(9), + [ts_builtin_sym_end] = ACTIONS(35), + [sym_lua_marker] = ACTIONS(11), + [sym_gfx_marker] = ACTIONS(13), + [sym_gff_marker] = ACTIONS(15), + [sym_label_marker] = ACTIONS(17), + [sym_map_marker] = ACTIONS(19), + [sym_sfx_marker] = ACTIONS(21), + [sym_music_marker] = ACTIONS(23), + [sym_section_marker] = ACTIONS(25), }, [6] = { - [sym_section] = STATE(7), - [sym_lua_section] = STATE(21), - [sym_gfx_section] = STATE(21), - [sym_gff_section] = STATE(21), - [sym_label_section] = STATE(21), - [sym_map_section] = STATE(21), - [sym_sfx_section] = STATE(21), - [sym_music_section] = STATE(21), - [sym_unknown_section] = STATE(21), - [aux_sym_cartridge_repeat1] = STATE(7), - [ts_builtin_sym_end] = ACTIONS(29), - [sym_lua_marker] = ACTIONS(9), - [sym_gfx_marker] = ACTIONS(11), - [sym_gff_marker] = ACTIONS(13), - [sym_label_marker] = ACTIONS(15), - [sym_map_marker] = ACTIONS(17), - [sym_sfx_marker] = ACTIONS(19), - [sym_music_marker] = ACTIONS(21), - [sym_section_marker] = ACTIONS(23), + [sym_section] = STATE(10), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat2] = STATE(10), + [ts_builtin_sym_end] = ACTIONS(35), + [sym_lua_marker] = ACTIONS(11), + [sym_gfx_marker] = ACTIONS(13), + [sym_gff_marker] = ACTIONS(15), + [sym_label_marker] = ACTIONS(17), + [sym_map_marker] = ACTIONS(19), + [sym_sfx_marker] = ACTIONS(21), + [sym_music_marker] = ACTIONS(23), + [sym_section_marker] = ACTIONS(25), }, [7] = { - [sym_section] = STATE(7), - [sym_lua_section] = STATE(21), - [sym_gfx_section] = STATE(21), - [sym_gff_section] = STATE(21), - [sym_label_section] = STATE(21), - [sym_map_section] = STATE(21), - [sym_sfx_section] = STATE(21), - [sym_music_section] = STATE(21), - [sym_unknown_section] = STATE(21), - [aux_sym_cartridge_repeat1] = STATE(7), - [ts_builtin_sym_end] = ACTIONS(31), - [sym_lua_marker] = ACTIONS(33), - [sym_gfx_marker] = ACTIONS(36), - [sym_gff_marker] = ACTIONS(39), - [sym_label_marker] = ACTIONS(42), - [sym_map_marker] = ACTIONS(45), - [sym_sfx_marker] = ACTIONS(48), - [sym_music_marker] = ACTIONS(51), - [sym_section_marker] = ACTIONS(54), + [sym_section] = STATE(6), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat2] = STATE(6), + [ts_builtin_sym_end] = ACTIONS(27), + [sym_lua_marker] = ACTIONS(11), + [sym_gfx_marker] = ACTIONS(13), + [sym_gff_marker] = ACTIONS(15), + [sym_label_marker] = ACTIONS(17), + [sym_map_marker] = ACTIONS(19), + [sym_sfx_marker] = ACTIONS(21), + [sym_music_marker] = ACTIONS(23), + [sym_section_marker] = ACTIONS(25), }, [8] = { - [sym_section] = STATE(7), - [sym_lua_section] = STATE(21), - [sym_gfx_section] = STATE(21), - [sym_gff_section] = STATE(21), - [sym_label_section] = STATE(21), - [sym_map_section] = STATE(21), - [sym_sfx_section] = STATE(21), - [sym_music_section] = STATE(21), - [sym_unknown_section] = STATE(21), - [aux_sym_cartridge_repeat1] = STATE(7), - [ts_builtin_sym_end] = ACTIONS(57), - [sym_lua_marker] = ACTIONS(9), - [sym_gfx_marker] = ACTIONS(11), - [sym_gff_marker] = ACTIONS(13), - [sym_label_marker] = ACTIONS(15), - [sym_map_marker] = ACTIONS(17), - [sym_sfx_marker] = ACTIONS(19), - [sym_music_marker] = ACTIONS(21), - [sym_section_marker] = ACTIONS(23), + [sym_section] = STATE(10), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat2] = STATE(10), + [ts_builtin_sym_end] = ACTIONS(27), + [sym_lua_marker] = ACTIONS(11), + [sym_gfx_marker] = ACTIONS(13), + [sym_gff_marker] = ACTIONS(15), + [sym_label_marker] = ACTIONS(17), + [sym_map_marker] = ACTIONS(19), + [sym_sfx_marker] = ACTIONS(21), + [sym_music_marker] = ACTIONS(23), + [sym_section_marker] = ACTIONS(25), + }, + [9] = { + [sym_section] = STATE(10), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat2] = STATE(10), + [ts_builtin_sym_end] = ACTIONS(39), + [sym_lua_marker] = ACTIONS(11), + [sym_gfx_marker] = ACTIONS(13), + [sym_gff_marker] = ACTIONS(15), + [sym_label_marker] = ACTIONS(17), + [sym_map_marker] = ACTIONS(19), + [sym_sfx_marker] = ACTIONS(21), + [sym_music_marker] = ACTIONS(23), + [sym_section_marker] = ACTIONS(25), + }, + [10] = { + [sym_section] = STATE(10), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat2] = STATE(10), + [ts_builtin_sym_end] = ACTIONS(41), + [sym_lua_marker] = ACTIONS(43), + [sym_gfx_marker] = ACTIONS(46), + [sym_gff_marker] = ACTIONS(49), + [sym_label_marker] = ACTIONS(52), + [sym_map_marker] = ACTIONS(55), + [sym_sfx_marker] = ACTIONS(58), + [sym_music_marker] = ACTIONS(61), + [sym_section_marker] = ACTIONS(64), + }, + [11] = { + [sym_section] = STATE(12), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat2] = STATE(12), + [ts_builtin_sym_end] = ACTIONS(39), + [sym_lua_marker] = ACTIONS(11), + [sym_gfx_marker] = ACTIONS(13), + [sym_gff_marker] = ACTIONS(15), + [sym_label_marker] = ACTIONS(17), + [sym_map_marker] = ACTIONS(19), + [sym_sfx_marker] = ACTIONS(21), + [sym_music_marker] = ACTIONS(23), + [sym_section_marker] = ACTIONS(25), + }, + [12] = { + [sym_section] = STATE(10), + [sym_lua_section] = STATE(26), + [sym_gfx_section] = STATE(26), + [sym_gff_section] = STATE(26), + [sym_label_section] = STATE(26), + [sym_map_section] = STATE(26), + [sym_sfx_section] = STATE(26), + [sym_music_section] = STATE(26), + [sym_unknown_section] = STATE(26), + [aux_sym_cartridge_repeat2] = STATE(10), + [ts_builtin_sym_end] = ACTIONS(67), + [sym_lua_marker] = ACTIONS(11), + [sym_gfx_marker] = ACTIONS(13), + [sym_gff_marker] = ACTIONS(15), + [sym_label_marker] = ACTIONS(17), + [sym_map_marker] = ACTIONS(19), + [sym_sfx_marker] = ACTIONS(21), + [sym_music_marker] = ACTIONS(23), + [sym_section_marker] = ACTIONS(25), }, }; static const uint16_t ts_small_parse_table[] = { [0] = 5, - ACTIONS(61), 1, - sym_section_marker, - STATE(23), 1, - sym_lua_content, - ACTIONS(63), 2, - aux_sym_line_token1, - aux_sym_line_token2, - STATE(17), 2, - sym_line, - aux_sym_lua_content_repeat1, - ACTIONS(59), 8, - ts_builtin_sym_end, - sym_lua_marker, - sym_gfx_marker, - sym_gff_marker, - sym_label_marker, - sym_map_marker, - sym_sfx_marker, - sym_music_marker, - [25] = 5, - ACTIONS(67), 1, - sym_section_marker, - STATE(22), 1, - sym_body, - ACTIONS(63), 2, - aux_sym_line_token1, - aux_sym_line_token2, - STATE(18), 2, - sym_line, - aux_sym_lua_content_repeat1, - ACTIONS(65), 8, - ts_builtin_sym_end, - sym_lua_marker, - sym_gfx_marker, - sym_gff_marker, - sym_label_marker, - sym_map_marker, - sym_sfx_marker, - sym_music_marker, - [50] = 5, ACTIONS(71), 1, sym_section_marker, - STATE(24), 1, + STATE(33), 1, sym_body, - ACTIONS(63), 2, + ACTIONS(73), 2, aux_sym_line_token1, aux_sym_line_token2, - STATE(18), 2, + STATE(23), 2, sym_line, aux_sym_lua_content_repeat1, ACTIONS(69), 8, @@ -1260,18 +1346,58 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [75] = 5, - ACTIONS(75), 1, + [25] = 5, + ACTIONS(77), 1, sym_section_marker, - STATE(25), 1, + STATE(32), 1, sym_body, - ACTIONS(63), 2, + ACTIONS(73), 2, aux_sym_line_token1, aux_sym_line_token2, - STATE(18), 2, + STATE(23), 2, sym_line, aux_sym_lua_content_repeat1, - ACTIONS(73), 8, + ACTIONS(75), 8, + ts_builtin_sym_end, + sym_lua_marker, + sym_gfx_marker, + sym_gff_marker, + sym_label_marker, + sym_map_marker, + sym_sfx_marker, + sym_music_marker, + [50] = 5, + ACTIONS(81), 1, + sym_section_marker, + STATE(31), 1, + sym_body, + ACTIONS(73), 2, + aux_sym_line_token1, + aux_sym_line_token2, + STATE(23), 2, + sym_line, + aux_sym_lua_content_repeat1, + ACTIONS(79), 8, + ts_builtin_sym_end, + sym_lua_marker, + sym_gfx_marker, + sym_gff_marker, + sym_label_marker, + sym_map_marker, + sym_sfx_marker, + sym_music_marker, + [75] = 5, + ACTIONS(85), 1, + sym_section_marker, + STATE(28), 1, + sym_body, + ACTIONS(73), 2, + aux_sym_line_token1, + aux_sym_line_token2, + STATE(23), 2, + sym_line, + aux_sym_lua_content_repeat1, + ACTIONS(83), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1281,17 +1407,17 @@ static const uint16_t ts_small_parse_table[] = { sym_sfx_marker, sym_music_marker, [100] = 5, - ACTIONS(79), 1, + ACTIONS(89), 1, sym_section_marker, - STATE(26), 1, + STATE(29), 1, sym_body, - ACTIONS(63), 2, + ACTIONS(73), 2, aux_sym_line_token1, aux_sym_line_token2, - STATE(18), 2, + STATE(23), 2, sym_line, aux_sym_lua_content_repeat1, - ACTIONS(77), 8, + ACTIONS(87), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1301,17 +1427,17 @@ static const uint16_t ts_small_parse_table[] = { sym_sfx_marker, sym_music_marker, [125] = 5, - ACTIONS(83), 1, + ACTIONS(93), 1, sym_section_marker, STATE(27), 1, - sym_body, - ACTIONS(63), 2, + sym_lua_content, + ACTIONS(73), 2, aux_sym_line_token1, aux_sym_line_token2, - STATE(18), 2, + STATE(21), 2, sym_line, aux_sym_lua_content_repeat1, - ACTIONS(81), 8, + ACTIONS(91), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1321,17 +1447,17 @@ static const uint16_t ts_small_parse_table[] = { sym_sfx_marker, sym_music_marker, [150] = 5, - ACTIONS(87), 1, + ACTIONS(97), 1, sym_section_marker, - STATE(28), 1, + STATE(30), 1, sym_body, - ACTIONS(63), 2, + ACTIONS(73), 2, aux_sym_line_token1, aux_sym_line_token2, - STATE(18), 2, + STATE(23), 2, sym_line, aux_sym_lua_content_repeat1, - ACTIONS(85), 8, + ACTIONS(95), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1341,17 +1467,17 @@ static const uint16_t ts_small_parse_table[] = { sym_sfx_marker, sym_music_marker, [175] = 5, - ACTIONS(91), 1, + ACTIONS(101), 1, sym_section_marker, - STATE(29), 1, + STATE(34), 1, sym_body, - ACTIONS(63), 2, + ACTIONS(73), 2, aux_sym_line_token1, aux_sym_line_token2, - STATE(18), 2, + STATE(23), 2, sym_line, aux_sym_lua_content_repeat1, - ACTIONS(89), 8, + ACTIONS(99), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1361,15 +1487,15 @@ static const uint16_t ts_small_parse_table[] = { sym_sfx_marker, sym_music_marker, [200] = 4, - ACTIONS(95), 1, + ACTIONS(105), 1, sym_section_marker, - ACTIONS(63), 2, + ACTIONS(73), 2, aux_sym_line_token1, aux_sym_line_token2, - STATE(19), 2, + STATE(24), 2, sym_line, aux_sym_lua_content_repeat1, - ACTIONS(93), 8, + ACTIONS(103), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1379,16 +1505,16 @@ static const uint16_t ts_small_parse_table[] = { sym_sfx_marker, sym_music_marker, [222] = 4, - ACTIONS(99), 1, + ACTIONS(109), 1, + sym__blank_line, + ACTIONS(112), 1, sym_section_marker, - ACTIONS(63), 2, - aux_sym_line_token1, - aux_sym_line_token2, - STATE(19), 2, - sym_line, - aux_sym_lua_content_repeat1, - ACTIONS(97), 8, + STATE(22), 1, + aux_sym_cartridge_repeat1, + ACTIONS(107), 10, ts_builtin_sym_end, + sym_header, + sym_version, sym_lua_marker, sym_gfx_marker, sym_gff_marker, @@ -1397,15 +1523,15 @@ static const uint16_t ts_small_parse_table[] = { sym_sfx_marker, sym_music_marker, [244] = 4, - ACTIONS(103), 1, + ACTIONS(116), 1, sym_section_marker, - ACTIONS(105), 2, + ACTIONS(73), 2, aux_sym_line_token1, aux_sym_line_token2, - STATE(19), 2, + STATE(24), 2, sym_line, aux_sym_lua_content_repeat1, - ACTIONS(101), 8, + ACTIONS(114), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1414,12 +1540,30 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [266] = 2, - ACTIONS(110), 3, + [266] = 4, + ACTIONS(120), 1, + sym_section_marker, + ACTIONS(122), 2, + aux_sym_line_token1, + aux_sym_line_token2, + STATE(24), 2, + sym_line, + aux_sym_lua_content_repeat1, + ACTIONS(118), 8, + ts_builtin_sym_end, + sym_lua_marker, + sym_gfx_marker, + sym_gff_marker, + sym_label_marker, + sym_map_marker, + sym_sfx_marker, + sym_music_marker, + [288] = 2, + ACTIONS(127), 3, sym_section_marker, aux_sym_line_token1, aux_sym_line_token2, - ACTIONS(108), 8, + ACTIONS(125), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1428,10 +1572,10 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [282] = 2, - ACTIONS(114), 1, + [304] = 2, + ACTIONS(131), 1, sym_section_marker, - ACTIONS(112), 8, + ACTIONS(129), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1440,10 +1584,10 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [296] = 2, - ACTIONS(118), 1, + [318] = 2, + ACTIONS(135), 1, sym_section_marker, - ACTIONS(116), 8, + ACTIONS(133), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1452,10 +1596,10 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [310] = 2, - ACTIONS(122), 1, + [332] = 2, + ACTIONS(139), 1, sym_section_marker, - ACTIONS(120), 8, + ACTIONS(137), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1464,10 +1608,10 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [324] = 2, - ACTIONS(126), 1, + [346] = 2, + ACTIONS(143), 1, sym_section_marker, - ACTIONS(124), 8, + ACTIONS(141), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1476,10 +1620,10 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [338] = 2, - ACTIONS(130), 1, + [360] = 2, + ACTIONS(147), 1, sym_section_marker, - ACTIONS(128), 8, + ACTIONS(145), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1488,10 +1632,10 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [352] = 2, - ACTIONS(134), 1, + [374] = 2, + ACTIONS(151), 1, sym_section_marker, - ACTIONS(132), 8, + ACTIONS(149), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1500,10 +1644,10 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [366] = 2, - ACTIONS(138), 1, + [388] = 2, + ACTIONS(155), 1, sym_section_marker, - ACTIONS(136), 8, + ACTIONS(153), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1512,10 +1656,10 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [380] = 2, - ACTIONS(142), 1, + [402] = 2, + ACTIONS(159), 1, sym_section_marker, - ACTIONS(140), 8, + ACTIONS(157), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1524,10 +1668,10 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [394] = 2, - ACTIONS(146), 1, + [416] = 2, + ACTIONS(163), 1, sym_section_marker, - ACTIONS(144), 8, + ACTIONS(161), 8, ts_builtin_sym_end, sym_lua_marker, sym_gfx_marker, @@ -1536,34 +1680,35 @@ static const uint16_t ts_small_parse_table[] = { sym_map_marker, sym_sfx_marker, sym_music_marker, - [408] = 1, - ACTIONS(148), 1, + [430] = 1, + ACTIONS(165), 1, ts_builtin_sym_end, }; static const uint32_t ts_small_parse_table_map[] = { - [SMALL_STATE(9)] = 0, - [SMALL_STATE(10)] = 25, - [SMALL_STATE(11)] = 50, - [SMALL_STATE(12)] = 75, - [SMALL_STATE(13)] = 100, - [SMALL_STATE(14)] = 125, - [SMALL_STATE(15)] = 150, - [SMALL_STATE(16)] = 175, - [SMALL_STATE(17)] = 200, - [SMALL_STATE(18)] = 222, - [SMALL_STATE(19)] = 244, - [SMALL_STATE(20)] = 266, - [SMALL_STATE(21)] = 282, - [SMALL_STATE(22)] = 296, - [SMALL_STATE(23)] = 310, - [SMALL_STATE(24)] = 324, - [SMALL_STATE(25)] = 338, - [SMALL_STATE(26)] = 352, - [SMALL_STATE(27)] = 366, - [SMALL_STATE(28)] = 380, - [SMALL_STATE(29)] = 394, - [SMALL_STATE(30)] = 408, + [SMALL_STATE(13)] = 0, + [SMALL_STATE(14)] = 25, + [SMALL_STATE(15)] = 50, + [SMALL_STATE(16)] = 75, + [SMALL_STATE(17)] = 100, + [SMALL_STATE(18)] = 125, + [SMALL_STATE(19)] = 150, + [SMALL_STATE(20)] = 175, + [SMALL_STATE(21)] = 200, + [SMALL_STATE(22)] = 222, + [SMALL_STATE(23)] = 244, + [SMALL_STATE(24)] = 266, + [SMALL_STATE(25)] = 288, + [SMALL_STATE(26)] = 304, + [SMALL_STATE(27)] = 318, + [SMALL_STATE(28)] = 332, + [SMALL_STATE(29)] = 346, + [SMALL_STATE(30)] = 360, + [SMALL_STATE(31)] = 374, + [SMALL_STATE(32)] = 388, + [SMALL_STATE(33)] = 402, + [SMALL_STATE(34)] = 416, + [SMALL_STATE(35)] = 430, }; static const TSParseActionEntry ts_parse_actions[] = { @@ -1572,72 +1717,80 @@ static const TSParseActionEntry ts_parse_actions[] = { [3] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cartridge, 0, 0, 0), [5] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), - [25] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cartridge, 1, 0, 0), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [29] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cartridge, 2, 0, 0), - [31] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), - [33] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), SHIFT_REPEAT(9), - [36] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [39] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), SHIFT_REPEAT(11), - [42] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), SHIFT_REPEAT(12), - [45] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), SHIFT_REPEAT(13), - [48] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), SHIFT_REPEAT(14), - [51] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), SHIFT_REPEAT(15), - [54] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), SHIFT_REPEAT(16), - [57] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cartridge, 3, 0, 0), - [59] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lua_section, 1, 0, 0), - [61] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lua_section, 1, 0, 0), - [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), - [65] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_gfx_section, 1, 0, 0), - [67] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_gfx_section, 1, 0, 0), - [69] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_gff_section, 1, 0, 0), - [71] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_gff_section, 1, 0, 0), - [73] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_label_section, 1, 0, 0), - [75] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_label_section, 1, 0, 0), - [77] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_map_section, 1, 0, 0), - [79] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_map_section, 1, 0, 0), - [81] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_sfx_section, 1, 0, 0), - [83] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_sfx_section, 1, 0, 0), - [85] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_music_section, 1, 0, 0), - [87] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_music_section, 1, 0, 0), - [89] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unknown_section, 1, 0, 0), - [91] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unknown_section, 1, 0, 0), - [93] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lua_content, 1, 0, 0), - [95] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lua_content, 1, 0, 0), - [97] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_body, 1, 0, 0), - [99] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_body, 1, 0, 0), - [101] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_lua_content_repeat1, 2, 0, 0), - [103] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_lua_content_repeat1, 2, 0, 0), - [105] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_lua_content_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_line, 1, 0, 0), - [110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_line, 1, 0, 0), - [112] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_section, 1, 0, 0), - [114] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_section, 1, 0, 0), - [116] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_gfx_section, 2, 0, 0), - [118] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_gfx_section, 2, 0, 0), - [120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lua_section, 2, 0, 0), - [122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lua_section, 2, 0, 0), - [124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_gff_section, 2, 0, 0), - [126] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_gff_section, 2, 0, 0), - [128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_label_section, 2, 0, 0), - [130] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_label_section, 2, 0, 0), - [132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_map_section, 2, 0, 0), - [134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_map_section, 2, 0, 0), - [136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_sfx_section, 2, 0, 0), - [138] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_sfx_section, 2, 0, 0), - [140] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_music_section, 2, 0, 0), - [142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_music_section, 2, 0, 0), - [144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unknown_section, 2, 0, 0), - [146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unknown_section, 2, 0, 0), - [148] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), + [27] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cartridge, 1, 0, 0), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [35] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cartridge, 2, 0, 0), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [39] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cartridge, 3, 0, 0), + [41] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat2, 2, 0, 0), + [43] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat2, 2, 0, 0), SHIFT_REPEAT(18), + [46] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat2, 2, 0, 0), SHIFT_REPEAT(20), + [49] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat2, 2, 0, 0), SHIFT_REPEAT(15), + [52] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat2, 2, 0, 0), SHIFT_REPEAT(16), + [55] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat2, 2, 0, 0), SHIFT_REPEAT(17), + [58] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat2, 2, 0, 0), SHIFT_REPEAT(13), + [61] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat2, 2, 0, 0), SHIFT_REPEAT(14), + [64] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cartridge_repeat2, 2, 0, 0), SHIFT_REPEAT(19), + [67] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cartridge, 4, 0, 0), + [69] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_sfx_section, 1, 0, 0), + [71] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_sfx_section, 1, 0, 0), + [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), + [75] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_music_section, 1, 0, 0), + [77] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_music_section, 1, 0, 0), + [79] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_gff_section, 1, 0, 0), + [81] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_gff_section, 1, 0, 0), + [83] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_label_section, 1, 0, 0), + [85] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_label_section, 1, 0, 0), + [87] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_map_section, 1, 0, 0), + [89] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_map_section, 1, 0, 0), + [91] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lua_section, 1, 0, 0), + [93] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lua_section, 1, 0, 0), + [95] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unknown_section, 1, 0, 0), + [97] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unknown_section, 1, 0, 0), + [99] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_gfx_section, 1, 0, 0), + [101] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_gfx_section, 1, 0, 0), + [103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lua_content, 1, 0, 0), + [105] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lua_content, 1, 0, 0), + [107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), + [109] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), SHIFT_REPEAT(22), + [112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_cartridge_repeat1, 2, 0, 0), + [114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_body, 1, 0, 0), + [116] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_body, 1, 0, 0), + [118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_lua_content_repeat1, 2, 0, 0), + [120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_lua_content_repeat1, 2, 0, 0), + [122] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_lua_content_repeat1, 2, 0, 0), SHIFT_REPEAT(25), + [125] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_line, 1, 0, 0), + [127] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_line, 1, 0, 0), + [129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_section, 1, 0, 0), + [131] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_section, 1, 0, 0), + [133] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lua_section, 2, 0, 0), + [135] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lua_section, 2, 0, 0), + [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_label_section, 2, 0, 0), + [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_label_section, 2, 0, 0), + [141] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_map_section, 2, 0, 0), + [143] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_map_section, 2, 0, 0), + [145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unknown_section, 2, 0, 0), + [147] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unknown_section, 2, 0, 0), + [149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_gff_section, 2, 0, 0), + [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_gff_section, 2, 0, 0), + [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_music_section, 2, 0, 0), + [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_music_section, 2, 0, 0), + [157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_sfx_section, 2, 0, 0), + [159] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_sfx_section, 2, 0, 0), + [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_gfx_section, 2, 0, 0), + [163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_gfx_section, 2, 0, 0), + [165] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), }; #ifdef __cplusplus diff --git a/grammars/p8-cart/test/corpus/cart.txt b/grammars/p8-cart/test/corpus/cart.txt new file mode 100644 index 0000000..1a1acb5 --- /dev/null +++ b/grammars/p8-cart/test/corpus/cart.txt @@ -0,0 +1,109 @@ +================== +empty cart skeleton +================== + +pico-8 cartridge // http://www.pico-8.com +version 42 +__lua__ +__gfx__ +__map__ +__sfx__ +__music__ + +--- + +(cartridge + (header) + (version) + (section (lua_section (lua_marker))) + (section (gfx_section (gfx_marker))) + (section (map_section (map_marker))) + (section (sfx_section (sfx_marker))) + (section (music_section (music_marker)))) + +================== +cart with lua content +================== + +pico-8 cartridge // http://www.pico-8.com +version 42 +__lua__ +function _draw() + cls() +end +__gfx__ +00000000 + +--- + +(cartridge + (header) + (version) + (section + (lua_section + (lua_marker) + (lua_content + (line) + (line) + (line)))) + (section + (gfx_section + (gfx_marker) + (body + (line))))) + +================== +lua identifier resembling section marker +================== + +pico-8 cartridge // http://www.pico-8.com +version 42 +__lua__ +local __foo__ = 1 +local s = "__lua__" +__gfx__ +00 + +--- + +(cartridge + (header) + (version) + (section + (lua_section + (lua_marker) + (lua_content + (line) + (line)))) + (section + (gfx_section + (gfx_marker) + (body + (line))))) + +================== +unknown section name +================== + +pico-8 cartridge // http://www.pico-8.com +version 42 +__lua__ +__future_section__ +opaque body +__gfx__ +00 + +--- + +(cartridge + (header) + (version) + (section (lua_section (lua_marker))) + (section + (unknown_section + (section_marker) + (body (line)))) + (section + (gfx_section + (gfx_marker) + (body (line)))))