Clone sections of grammar+scanner relating to pycode env, but for sageblock/silent

pull/813/head
lnay 2023-06-01 00:18:12 +07:00
parent b0686a83c2
commit 95d41d9ec4
2 changed files with 27 additions and 1 deletions

@ -47,6 +47,8 @@ module.exports = grammar({
$._trivia_raw_env_listing, $._trivia_raw_env_listing,
$._trivia_raw_env_minted, $._trivia_raw_env_minted,
$._trivia_raw_env_pycode, $._trivia_raw_env_pycode,
$._trivia_raw_env_sagesilent,
$._trivia_raw_env_sageblock,
], ],
word: $ => $.command_name, word: $ => $.command_name,
rules: { rules: {
@ -80,6 +82,8 @@ module.exports = grammar({
$.listing_environment, $.listing_environment,
$.minted_environment, $.minted_environment,
$.pycode_environment, $.pycode_environment,
$.sagesilent_environment,
$.sageblock_environment,
$.generic_environment, $.generic_environment,
$.math_environment, $.math_environment,
$._text_content $._text_content
@ -510,6 +514,22 @@ module.exports = grammar({
options: undefined, options: undefined,
}), }),
...specialEnvironment({
rule: 'sagesilent_environment',
name: 'sagesilent',
content: $ =>
field('code', alias($._trivia_raw_env_sagesilent, $.source_code)),
options: undefined,
}),
...specialEnvironment({
rule: 'sageblock_environment',
name: 'sageblock',
content: $ =>
field('code', alias($._trivia_raw_env_sageblock, $.source_code)),
options: undefined,
}),
...specialEnvironment({ ...specialEnvironment({
rule: 'math_environment', rule: 'math_environment',
name: choice( name: choice(

8
src/scanner.c vendored

@ -10,6 +10,8 @@ enum TokenType {
TRIVIA_RAW_ENV_LISTING, TRIVIA_RAW_ENV_LISTING,
TRIVIA_RAW_ENV_MINTED, TRIVIA_RAW_ENV_MINTED,
TRIVIA_RAW_ENV_PYCODE, TRIVIA_RAW_ENV_PYCODE,
TRIVIA_RAW_ENV_SAGESILENT,
TRIVIA_RAW_ENV_SAGEBLOCK,
}; };
static bool find_verbatim(TSLexer *lexer, const char *keyword, static bool find_verbatim(TSLexer *lexer, const char *keyword,
@ -92,7 +94,7 @@ bool tree_sitter_latex_external_scanner_scan(void *payload, TSLexer *lexer,
const bool *valid_symbols) { const bool *valid_symbols) {
bool found = false; bool found = false;
TSSymbol type = 0xFFFF; TSSymbol type = 0xFFFF;
for (int i = 0; i <= TRIVIA_RAW_ENV_PYCODE; i++) { for (int i = 0; i <= TRIVIA_RAW_ENV_SAGEBLOCK; i++) {
if (valid_symbols[i]) { if (valid_symbols[i]) {
if (found) { if (found) {
return false; return false;
@ -117,6 +119,10 @@ bool tree_sitter_latex_external_scanner_scan(void *payload, TSLexer *lexer,
return find_verbatim(lexer, "\\end{minted}", false); return find_verbatim(lexer, "\\end{minted}", false);
case TRIVIA_RAW_ENV_PYCODE: case TRIVIA_RAW_ENV_PYCODE:
return find_verbatim(lexer, "\\end{pycode}", false); return find_verbatim(lexer, "\\end{pycode}", false);
case TRIVIA_RAW_ENV_SAGESILENT:
return find_verbatim(lexer, "\\end{sagesilent}", false);
case TRIVIA_RAW_ENV_SAGEBLOCK:
return find_verbatim(lexer, "\\end{sageblock}", false);
} }
return false; return false;