From 107435ada4c4c422ba4f951336b5e566b86ac3ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20F=C3=B6rster?= Date: Thu, 18 Jul 2024 17:35:26 +0200 Subject: [PATCH] Add luacode and asy as verbatim environments (#141) Adds the following source code environments: - `asy` - `asydef` - `luacode` - `luacode*` Fixes #140. --- .github/workflows/ci.yml | 3 + grammar.js | 41 ++ package-lock.json | 4 +- package.json | 4 +- src/grammar.json | 865 ++++++++++++++++++++++++++++++----- src/node-types.json | 300 ++++++++++++ src/scanner.c | 12 + test/corpus/environments.txt | 22 + 8 files changed, 1123 insertions(+), 128 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3bec3b907..aed2dd0e9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,6 +65,9 @@ jobs: else printf 'changed=true\n' >> "$GITHUB_OUTPUT" fi + - name: Set up tree-sitter + uses: tree-sitter/setup-action/cli@v1 + if: steps.scanner-check.outputs.changed == 'true' - name: Run parser and binding tests uses: tree-sitter/parser-test-action@v2 with: diff --git a/grammar.js b/grammar.js index e43ddfa93..83187543c 100644 --- a/grammar.js +++ b/grammar.js @@ -46,7 +46,11 @@ module.exports = grammar({ $._trivia_raw_env_verbatim, $._trivia_raw_env_listing, $._trivia_raw_env_minted, + $._trivia_raw_env_asy, + $._trivia_raw_env_asydef, $._trivia_raw_env_pycode, + $._trivia_raw_env_luacode, + $._trivia_raw_env_luacode_star, $._trivia_raw_env_sagesilent, $._trivia_raw_env_sageblock, ], @@ -81,7 +85,10 @@ module.exports = grammar({ $.verbatim_environment, $.listing_environment, $.minted_environment, + $.asy_environment, + $.asydef_environment, $.pycode_environment, + $.luacode_environment, $.sagesilent_environment, $.sageblock_environment, $.generic_environment, @@ -491,6 +498,21 @@ module.exports = grammar({ ), }), + ...specialEnvironment({ + rule: 'asy_environment', + name: 'asy', + content: $ => field('code', alias($._trivia_raw_env_asy, $.source_code)), + options: undefined, + }), + + ...specialEnvironment({ + rule: 'asydef_environment', + name: 'asydef', + content: $ => + field('code', alias($._trivia_raw_env_asydef, $.source_code)), + options: undefined, + }), + ...specialEnvironment({ rule: 'pycode_environment', name: 'pycode', @@ -499,6 +521,25 @@ module.exports = grammar({ options: undefined, }), + luacode_environment: $ => + choice($._luacode_environment, $._luacode_environment_star), + + ...specialEnvironment({ + rule: '_luacode_environment', + name: 'luacode', + content: $ => + field('code', alias($._trivia_raw_env_luacode, $.source_code)), + options: undefined, + }), + + ...specialEnvironment({ + rule: '_luacode_environment_star', + name: 'luacode*', + content: $ => + field('code', alias($._trivia_raw_env_luacode_star, $.source_code)), + options: undefined, + }), + ...specialEnvironment({ rule: 'sagesilent_environment', name: 'sagesilent', diff --git a/package-lock.json b/package-lock.json index 4274bdf2d..c55658c00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,10 +16,10 @@ "devDependencies": { "prebuildify": "^6.0.0", "prettier": "^3.0.3", - "tree-sitter-cli": "^0.22.2" + "tree-sitter-cli": "^0.22.6" }, "peerDependencies": { - "tree-sitter": "^0.21.0" + "tree-sitter": "^0.21.1" }, "peerDependenciesMeta": { "tree_sitter": { diff --git a/package.json b/package.json index b4e3aaf4c..c71fe52b3 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "node-gyp-build": "^4.8.0" }, "peerDependencies": { - "tree-sitter": "^0.21.0" + "tree-sitter": "^0.21.1" }, "peerDependenciesMeta": { "tree_sitter": { @@ -48,7 +48,7 @@ }, "devDependencies": { "prettier": "^3.0.3", - "tree-sitter-cli": "^0.22.2", + "tree-sitter-cli": "^0.22.6", "prebuildify": "^6.0.0" }, "tree-sitter": [ diff --git a/src/grammar.json b/src/grammar.json index 97ef8cf91..89a46bb75 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -132,10 +132,22 @@ "type": "SYMBOL", "name": "minted_environment" }, + { + "type": "SYMBOL", + "name": "asy_environment" + }, + { + "type": "SYMBOL", + "name": "asydef_environment" + }, { "type": "SYMBOL", "name": "pycode_environment" }, + { + "type": "SYMBOL", + "name": "luacode_environment" + }, { "type": "SYMBOL", "name": "sagesilent_environment" @@ -1991,63 +2003,664 @@ ] } } - ] - } - }, - "end": { - "type": "PREC_RIGHT", - "value": 0, - "content": { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "command", - "content": { - "type": "STRING", - "value": "\\end" - } - }, - { - "type": "FIELD", - "name": "name", + ] + } + }, + "end": { + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "command", + "content": { + "type": "STRING", + "value": "\\end" + } + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "curly_group_text" + } + } + ] + } + }, + "generic_environment": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "begin", + "content": { + "type": "SYMBOL", + "name": "begin" + } + }, + { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "_root_content" + } + }, + { + "type": "FIELD", + "name": "end", + "content": { + "type": "SYMBOL", + "name": "end" + } + } + ] + }, + "comment_environment": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "begin", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_comment_environment_begin" + }, + "named": true, + "value": "begin" + } + }, + { + "type": "FIELD", + "name": "comment", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_trivia_raw_env_comment" + }, + "named": true, + "value": "comment" + } + }, + { + "type": "FIELD", + "name": "end", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_comment_environment_end" + }, + "named": true, + "value": "end" + } + } + ] + }, + "_comment_environment_begin": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "command", + "content": { + "type": "STRING", + "value": "\\begin" + } + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_comment_environment_group" + }, + "named": true, + "value": "curly_group_text" + } + }, + { + "type": "SEQ", + "members": [] + } + ] + }, + "_comment_environment_end": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "command", + "content": { + "type": "STRING", + "value": "\\end" + } + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_comment_environment_group" + }, + "named": true, + "value": "curly_group_text" + } + } + ] + }, + "_comment_environment_group": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "FIELD", + "name": "text", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_comment_environment_name" + }, + "named": true, + "value": "text" + } + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "_comment_environment_name": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "word", + "content": { + "type": "ALIAS", + "content": { + "type": "STRING", + "value": "comment" + }, + "named": true, + "value": "word" + } + } + ] + }, + "verbatim_environment": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "begin", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_verbatim_environment_begin" + }, + "named": true, + "value": "begin" + } + }, + { + "type": "FIELD", + "name": "verbatim", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_trivia_raw_env_verbatim" + }, + "named": true, + "value": "comment" + } + }, + { + "type": "FIELD", + "name": "end", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_verbatim_environment_end" + }, + "named": true, + "value": "end" + } + } + ] + }, + "_verbatim_environment_begin": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "command", + "content": { + "type": "STRING", + "value": "\\begin" + } + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_verbatim_environment_group" + }, + "named": true, + "value": "curly_group_text" + } + }, + { + "type": "SEQ", + "members": [] + } + ] + }, + "_verbatim_environment_end": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "command", + "content": { + "type": "STRING", + "value": "\\end" + } + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_verbatim_environment_group" + }, + "named": true, + "value": "curly_group_text" + } + } + ] + }, + "_verbatim_environment_group": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "FIELD", + "name": "text", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_verbatim_environment_name" + }, + "named": true, + "value": "text" + } + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "_verbatim_environment_name": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "word", + "content": { + "type": "ALIAS", + "content": { + "type": "STRING", + "value": "verbatim" + }, + "named": true, + "value": "word" + } + } + ] + }, + "listing_environment": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "begin", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_listing_environment_begin" + }, + "named": true, + "value": "begin" + } + }, + { + "type": "FIELD", + "name": "code", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_trivia_raw_env_listing" + }, + "named": true, + "value": "source_code" + } + }, + { + "type": "FIELD", + "name": "end", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_listing_environment_end" + }, + "named": true, + "value": "end" + } + } + ] + }, + "_listing_environment_begin": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "command", + "content": { + "type": "STRING", + "value": "\\begin" + } + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_listing_environment_group" + }, + "named": true, + "value": "curly_group_text" + } + }, + { + "type": "SEQ", + "members": [] + } + ] + }, + "_listing_environment_end": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "command", + "content": { + "type": "STRING", + "value": "\\end" + } + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_listing_environment_group" + }, + "named": true, + "value": "curly_group_text" + } + } + ] + }, + "_listing_environment_group": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "FIELD", + "name": "text", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_listing_environment_name" + }, + "named": true, + "value": "text" + } + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "_listing_environment_name": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "word", + "content": { + "type": "ALIAS", + "content": { + "type": "STRING", + "value": "lstlisting" + }, + "named": true, + "value": "word" + } + } + ] + }, + "minted_environment": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "begin", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_minted_environment_begin" + }, + "named": true, + "value": "begin" + } + }, + { + "type": "FIELD", + "name": "code", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_trivia_raw_env_minted" + }, + "named": true, + "value": "source_code" + } + }, + { + "type": "FIELD", + "name": "end", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_minted_environment_end" + }, + "named": true, + "value": "end" + } + } + ] + }, + "_minted_environment_begin": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "command", + "content": { + "type": "STRING", + "value": "\\begin" + } + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "curly_group_text" - } + "name": "_minted_environment_group" + }, + "named": true, + "value": "curly_group_text" } - ] - } + }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "options", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "brack_group_key_value" + }, + { + "type": "BLANK" + } + ] + } + }, + { + "type": "FIELD", + "name": "language", + "content": { + "type": "SYMBOL", + "name": "curly_group_text" + } + } + ] + } + ] }, - "generic_environment": { + "_minted_environment_end": { "type": "SEQ", "members": [ { "type": "FIELD", - "name": "begin", + "name": "command", "content": { - "type": "SYMBOL", - "name": "begin" + "type": "STRING", + "value": "\\end" } }, { - "type": "REPEAT", + "type": "FIELD", + "name": "name", "content": { - "type": "SYMBOL", - "name": "_root_content" + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_minted_environment_group" + }, + "named": true, + "value": "curly_group_text" } + } + ] + }, + "_minted_environment_group": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" }, { "type": "FIELD", - "name": "end", + "name": "text", "content": { - "type": "SYMBOL", - "name": "end" + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_minted_environment_name" + }, + "named": true, + "value": "text" } + }, + { + "type": "STRING", + "value": "}" } ] }, - "comment_environment": { + "_minted_environment_name": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "word", + "content": { + "type": "ALIAS", + "content": { + "type": "STRING", + "value": "minted" + }, + "named": true, + "value": "word" + } + } + ] + }, + "asy_environment": { "type": "SEQ", "members": [ { @@ -2057,7 +2670,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_comment_environment_begin" + "name": "_asy_environment_begin" }, "named": true, "value": "begin" @@ -2065,15 +2678,15 @@ }, { "type": "FIELD", - "name": "comment", + "name": "code", "content": { "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_trivia_raw_env_comment" + "name": "_trivia_raw_env_asy" }, "named": true, - "value": "comment" + "value": "source_code" } }, { @@ -2083,7 +2696,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_comment_environment_end" + "name": "_asy_environment_end" }, "named": true, "value": "end" @@ -2091,7 +2704,7 @@ } ] }, - "_comment_environment_begin": { + "_asy_environment_begin": { "type": "SEQ", "members": [ { @@ -2109,7 +2722,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_comment_environment_group" + "name": "_asy_environment_group" }, "named": true, "value": "curly_group_text" @@ -2121,7 +2734,7 @@ } ] }, - "_comment_environment_end": { + "_asy_environment_end": { "type": "SEQ", "members": [ { @@ -2139,7 +2752,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_comment_environment_group" + "name": "_asy_environment_group" }, "named": true, "value": "curly_group_text" @@ -2147,7 +2760,7 @@ } ] }, - "_comment_environment_group": { + "_asy_environment_group": { "type": "SEQ", "members": [ { @@ -2161,7 +2774,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_comment_environment_name" + "name": "_asy_environment_name" }, "named": true, "value": "text" @@ -2173,7 +2786,7 @@ } ] }, - "_comment_environment_name": { + "_asy_environment_name": { "type": "SEQ", "members": [ { @@ -2183,7 +2796,7 @@ "type": "ALIAS", "content": { "type": "STRING", - "value": "comment" + "value": "asy" }, "named": true, "value": "word" @@ -2191,7 +2804,7 @@ } ] }, - "verbatim_environment": { + "asydef_environment": { "type": "SEQ", "members": [ { @@ -2201,7 +2814,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_verbatim_environment_begin" + "name": "_asydef_environment_begin" }, "named": true, "value": "begin" @@ -2209,15 +2822,15 @@ }, { "type": "FIELD", - "name": "verbatim", + "name": "code", "content": { "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_trivia_raw_env_verbatim" + "name": "_trivia_raw_env_asydef" }, "named": true, - "value": "comment" + "value": "source_code" } }, { @@ -2227,7 +2840,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_verbatim_environment_end" + "name": "_asydef_environment_end" }, "named": true, "value": "end" @@ -2235,7 +2848,7 @@ } ] }, - "_verbatim_environment_begin": { + "_asydef_environment_begin": { "type": "SEQ", "members": [ { @@ -2253,7 +2866,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_verbatim_environment_group" + "name": "_asydef_environment_group" }, "named": true, "value": "curly_group_text" @@ -2265,7 +2878,7 @@ } ] }, - "_verbatim_environment_end": { + "_asydef_environment_end": { "type": "SEQ", "members": [ { @@ -2283,7 +2896,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_verbatim_environment_group" + "name": "_asydef_environment_group" }, "named": true, "value": "curly_group_text" @@ -2291,7 +2904,7 @@ } ] }, - "_verbatim_environment_group": { + "_asydef_environment_group": { "type": "SEQ", "members": [ { @@ -2305,7 +2918,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_verbatim_environment_name" + "name": "_asydef_environment_name" }, "named": true, "value": "text" @@ -2317,7 +2930,7 @@ } ] }, - "_verbatim_environment_name": { + "_asydef_environment_name": { "type": "SEQ", "members": [ { @@ -2327,7 +2940,7 @@ "type": "ALIAS", "content": { "type": "STRING", - "value": "verbatim" + "value": "asydef" }, "named": true, "value": "word" @@ -2335,7 +2948,7 @@ } ] }, - "listing_environment": { + "pycode_environment": { "type": "SEQ", "members": [ { @@ -2345,7 +2958,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_listing_environment_begin" + "name": "_pycode_environment_begin" }, "named": true, "value": "begin" @@ -2358,7 +2971,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_trivia_raw_env_listing" + "name": "_trivia_raw_env_pycode" }, "named": true, "value": "source_code" @@ -2371,7 +2984,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_listing_environment_end" + "name": "_pycode_environment_end" }, "named": true, "value": "end" @@ -2379,7 +2992,7 @@ } ] }, - "_listing_environment_begin": { + "_pycode_environment_begin": { "type": "SEQ", "members": [ { @@ -2397,7 +3010,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_listing_environment_group" + "name": "_pycode_environment_group" }, "named": true, "value": "curly_group_text" @@ -2409,7 +3022,7 @@ } ] }, - "_listing_environment_end": { + "_pycode_environment_end": { "type": "SEQ", "members": [ { @@ -2427,7 +3040,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_listing_environment_group" + "name": "_pycode_environment_group" }, "named": true, "value": "curly_group_text" @@ -2435,7 +3048,7 @@ } ] }, - "_listing_environment_group": { + "_pycode_environment_group": { "type": "SEQ", "members": [ { @@ -2449,7 +3062,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_listing_environment_name" + "name": "_pycode_environment_name" }, "named": true, "value": "text" @@ -2461,7 +3074,7 @@ } ] }, - "_listing_environment_name": { + "_pycode_environment_name": { "type": "SEQ", "members": [ { @@ -2471,7 +3084,7 @@ "type": "ALIAS", "content": { "type": "STRING", - "value": "lstlisting" + "value": "pycode" }, "named": true, "value": "word" @@ -2479,7 +3092,20 @@ } ] }, - "minted_environment": { + "luacode_environment": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_luacode_environment" + }, + { + "type": "SYMBOL", + "name": "_luacode_environment_star" + } + ] + }, + "_luacode_environment": { "type": "SEQ", "members": [ { @@ -2489,7 +3115,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_minted_environment_begin" + "name": "__luacode_environment_begin" }, "named": true, "value": "begin" @@ -2502,7 +3128,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_trivia_raw_env_minted" + "name": "_trivia_raw_env_luacode" }, "named": true, "value": "source_code" @@ -2515,7 +3141,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_minted_environment_end" + "name": "__luacode_environment_end" }, "named": true, "value": "end" @@ -2523,7 +3149,7 @@ } ] }, - "_minted_environment_begin": { + "__luacode_environment_begin": { "type": "SEQ", "members": [ { @@ -2541,7 +3167,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_minted_environment_group" + "name": "__luacode_environment_group" }, "named": true, "value": "curly_group_text" @@ -2549,36 +3175,11 @@ }, { "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "options", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "brack_group_key_value" - }, - { - "type": "BLANK" - } - ] - } - }, - { - "type": "FIELD", - "name": "language", - "content": { - "type": "SYMBOL", - "name": "curly_group_text" - } - } - ] + "members": [] } ] }, - "_minted_environment_end": { + "__luacode_environment_end": { "type": "SEQ", "members": [ { @@ -2596,7 +3197,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_minted_environment_group" + "name": "__luacode_environment_group" }, "named": true, "value": "curly_group_text" @@ -2604,7 +3205,7 @@ } ] }, - "_minted_environment_group": { + "__luacode_environment_group": { "type": "SEQ", "members": [ { @@ -2618,7 +3219,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_minted_environment_name" + "name": "__luacode_environment_name" }, "named": true, "value": "text" @@ -2630,7 +3231,7 @@ } ] }, - "_minted_environment_name": { + "__luacode_environment_name": { "type": "SEQ", "members": [ { @@ -2640,7 +3241,7 @@ "type": "ALIAS", "content": { "type": "STRING", - "value": "minted" + "value": "luacode" }, "named": true, "value": "word" @@ -2648,7 +3249,7 @@ } ] }, - "pycode_environment": { + "_luacode_environment_star": { "type": "SEQ", "members": [ { @@ -2658,7 +3259,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_pycode_environment_begin" + "name": "__luacode_environment_star_begin" }, "named": true, "value": "begin" @@ -2671,7 +3272,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_trivia_raw_env_pycode" + "name": "_trivia_raw_env_luacode_star" }, "named": true, "value": "source_code" @@ -2684,7 +3285,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_pycode_environment_end" + "name": "__luacode_environment_star_end" }, "named": true, "value": "end" @@ -2692,7 +3293,7 @@ } ] }, - "_pycode_environment_begin": { + "__luacode_environment_star_begin": { "type": "SEQ", "members": [ { @@ -2710,7 +3311,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_pycode_environment_group" + "name": "__luacode_environment_star_group" }, "named": true, "value": "curly_group_text" @@ -2722,7 +3323,7 @@ } ] }, - "_pycode_environment_end": { + "__luacode_environment_star_end": { "type": "SEQ", "members": [ { @@ -2740,7 +3341,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_pycode_environment_group" + "name": "__luacode_environment_star_group" }, "named": true, "value": "curly_group_text" @@ -2748,7 +3349,7 @@ } ] }, - "_pycode_environment_group": { + "__luacode_environment_star_group": { "type": "SEQ", "members": [ { @@ -2762,7 +3363,7 @@ "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_pycode_environment_name" + "name": "__luacode_environment_star_name" }, "named": true, "value": "text" @@ -2774,7 +3375,7 @@ } ] }, - "_pycode_environment_name": { + "__luacode_environment_star_name": { "type": "SEQ", "members": [ { @@ -2784,7 +3385,7 @@ "type": "ALIAS", "content": { "type": "STRING", - "value": "pycode" + "value": "luacode*" }, "named": true, "value": "word" @@ -5896,10 +6497,26 @@ "type": "SYMBOL", "name": "_trivia_raw_env_minted" }, + { + "type": "SYMBOL", + "name": "_trivia_raw_env_asy" + }, + { + "type": "SYMBOL", + "name": "_trivia_raw_env_asydef" + }, { "type": "SYMBOL", "name": "_trivia_raw_env_pycode" }, + { + "type": "SYMBOL", + "name": "_trivia_raw_env_luacode" + }, + { + "type": "SYMBOL", + "name": "_trivia_raw_env_luacode_star" + }, { "type": "SYMBOL", "name": "_trivia_raw_env_sagesilent" diff --git a/src/node-types.json b/src/node-types.json index d33bb0127..6b66bbd00 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -259,6 +259,78 @@ } } }, + { + "type": "asy_environment", + "named": true, + "fields": { + "begin": { + "multiple": false, + "required": true, + "types": [ + { + "type": "begin", + "named": true + } + ] + }, + "code": { + "multiple": false, + "required": true, + "types": [ + { + "type": "source_code", + "named": true + } + ] + }, + "end": { + "multiple": false, + "required": true, + "types": [ + { + "type": "end", + "named": true + } + ] + } + } + }, + { + "type": "asydef_environment", + "named": true, + "fields": { + "begin": { + "multiple": false, + "required": true, + "types": [ + { + "type": "begin", + "named": true + } + ] + }, + "code": { + "multiple": false, + "required": true, + "types": [ + { + "type": "source_code", + "named": true + } + ] + }, + "end": { + "multiple": false, + "required": true, + "types": [ + { + "type": "end", + "named": true + } + ] + } + } + }, { "type": "author", "named": true, @@ -654,6 +726,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -782,6 +862,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -1000,6 +1084,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -1128,6 +1220,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -1753,6 +1849,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -1885,6 +1989,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -2326,6 +2434,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -2458,6 +2574,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -2624,6 +2744,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -2748,6 +2876,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -2962,6 +3094,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -3094,6 +3234,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -3634,6 +3778,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -3766,6 +3918,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -4205,6 +4361,42 @@ } } }, + { + "type": "luacode_environment", + "named": true, + "fields": { + "begin": { + "multiple": false, + "required": true, + "types": [ + { + "type": "begin", + "named": true + } + ] + }, + "code": { + "multiple": false, + "required": true, + "types": [ + { + "type": "source_code", + "named": true + } + ] + }, + "end": { + "multiple": false, + "required": true, + "types": [ + { + "type": "end", + "named": true + } + ] + } + } + }, { "type": "math_delimiter", "named": true, @@ -4342,6 +4534,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -4474,6 +4674,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -4610,6 +4814,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -4734,6 +4946,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -5161,6 +5377,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -5289,6 +5513,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -5427,6 +5655,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -5559,6 +5795,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -5821,6 +6061,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -5949,6 +6197,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -6056,6 +6308,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -6188,6 +6448,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -6338,6 +6602,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -6466,6 +6738,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -6616,6 +6892,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -6744,6 +7028,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true @@ -6882,6 +7170,14 @@ "type": "acronym_reference", "named": true }, + { + "type": "asy_environment", + "named": true + }, + { + "type": "asydef_environment", + "named": true + }, { "type": "author_declaration", "named": true @@ -7010,6 +7306,10 @@ "type": "listing_environment", "named": true }, + { + "type": "luacode_environment", + "named": true + }, { "type": "math_delimiter", "named": true diff --git a/src/scanner.c b/src/scanner.c index 2d51a5752..b1f67c56c 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -9,7 +9,11 @@ enum TokenType { TRIVIA_RAW_ENV_VERBATIM, TRIVIA_RAW_ENV_LISTING, TRIVIA_RAW_ENV_MINTED, + TRIVIA_RAW_ENV_ASY, + TRIVIA_RAW_ENV_ASYDEF, TRIVIA_RAW_ENV_PYCODE, + TRIVIA_RAW_ENV_LUACODE, + TRIVIA_RAW_ENV_LUACODE_STAR, TRIVIA_RAW_ENV_SAGESILENT, TRIVIA_RAW_ENV_SAGEBLOCK, }; @@ -119,6 +123,14 @@ bool tree_sitter_latex_external_scanner_scan(void *payload, TSLexer *lexer, return find_verbatim(lexer, "\\end{minted}", false); case TRIVIA_RAW_ENV_PYCODE: return find_verbatim(lexer, "\\end{pycode}", false); + case TRIVIA_RAW_ENV_ASY: + return find_verbatim(lexer, "\\end{asy}", false); + case TRIVIA_RAW_ENV_ASYDEF: + return find_verbatim(lexer, "\\end{asydef}", false); + case TRIVIA_RAW_ENV_LUACODE: + return find_verbatim(lexer, "\\end{luacode}", false); + case TRIVIA_RAW_ENV_LUACODE_STAR: + return find_verbatim(lexer, "\\end{luacode*}", false); case TRIVIA_RAW_ENV_SAGESILENT: return find_verbatim(lexer, "\\end{sagesilent}", false); case TRIVIA_RAW_ENV_SAGEBLOCK: diff --git a/test/corpus/environments.txt b/test/corpus/environments.txt index 6da1bdc55..93cf20d84 100644 --- a/test/corpus/environments.txt +++ b/test/corpus/environments.txt @@ -236,6 +236,28 @@ Pycode environment (text (word)))))) +================================================================================ +Luacode* environment +================================================================================ + +\begin{luacode*} + Hello World +\end{luacode*} + +-------------------------------------------------------------------------------- + +(source_file + (luacode_environment + (begin + (curly_group_text + (text + (word)))) + (source_code) + (end + (curly_group_text + (text + (word)))))) + ================================================================================ Sagesilent environment ================================================================================