From 5eb0507baa8cbbbd5b186481efa30eca39980cae Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Sat, 10 Dec 2022 22:56:41 +0300 Subject: [PATCH] Add support of any escape character in text block See more here https://github.com/terrastruct/d2/issues/420 --- binding.gyp | 2 +- bindings/rust/build.rs | 4 +- grammar.js | 23 +++--- queries/highlights.scm | 2 - src/grammar.json | 86 +++++++++------------- src/node-types.json | 10 +-- src/parser.c | Bin 142277 -> 137074 bytes src/scanner.c | 66 ----------------- src/scanner.cc | 159 +++++++++++++++++++++++++++++++++++++++++ test/corpus/shape.txt | 25 +++++++ tree-sitter-d2.wasm | Bin 30203 -> 37493 bytes 11 files changed, 235 insertions(+), 142 deletions(-) delete mode 100644 src/scanner.c create mode 100644 src/scanner.cc diff --git a/binding.gyp b/binding.gyp index efea429..493bc06 100644 --- a/binding.gyp +++ b/binding.gyp @@ -9,7 +9,7 @@ "sources": [ "bindings/node/binding.cc", "src/parser.c", - "src/scanner.c", + "src/scanner.cc", ], "cflags_c": [ "-std=c99", diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs index f7aaf16..618e90a 100644 --- a/bindings/rust/build.rs +++ b/bindings/rust/build.rs @@ -13,9 +13,11 @@ fn main() { // If your language uses an external scanner written in C, // then include this block of code: + /* let scanner_path = src_dir.join("scanner.c"); c_config.file(&scanner_path); println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); + */ c_config.compile("parser"); println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap()); @@ -23,7 +25,6 @@ fn main() { // If your language uses an external scanner written in C++, // then include this block of code: - /* let mut cpp_config = cc::Build::new(); cpp_config.cpp(true); cpp_config.include(&src_dir); @@ -34,5 +35,4 @@ fn main() { cpp_config.file(&scanner_path); cpp_config.compile("scanner"); println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); - */ } diff --git a/grammar.js b/grammar.js index 8588958..ed4e121 100644 --- a/grammar.js +++ b/grammar.js @@ -15,7 +15,11 @@ const PREC = { module.exports = grammar({ name: "d2", - externals: ($) => [$._text_block_raw], + externals: ($) => [ + $._text_block_start, + $._text_block_end, + $._text_block_raw_text, + ], extras: ($) => [ /[ \f\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]/, @@ -129,16 +133,13 @@ module.exports = grammar({ text_block: ($) => choice( - seq("|", $._text_block_definition, "|"), - // References: https://github.com/terrastruct/d2-vim - seq("|`", $._text_block_definition, "`|") - ), - - _text_block_definition: ($) => - seq( - optional($.language), - /\s/, - optional(alias($._text_block_raw, $.raw_text)) + seq( + alias($._text_block_start, "|"), + optional($.language), + /\s/, + alias($._text_block_raw_text, $.raw_text), + alias($._text_block_end, "|") + ) ), language: ($) => /\w+/, diff --git a/queries/highlights.scm b/queries/highlights.scm index 504fa9c..cbc15a0 100644 --- a/queries/highlights.scm +++ b/queries/highlights.scm @@ -39,8 +39,6 @@ "{" "}" "|" - "|`" - "`|" ] @punctuation.bracket ; Special diff --git a/src/grammar.json b/src/grammar.json index cf506aa..babb67c 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -544,71 +544,47 @@ "type": "SEQ", "members": [ { - "type": "STRING", + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_text_block_start" + }, + "named": false, "value": "|" }, { - "type": "SYMBOL", - "name": "_text_block_definition" + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "language" + }, + { + "type": "BLANK" + } + ] }, { - "type": "STRING", - "value": "|" - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "|`" + "type": "PATTERN", + "value": "\\s" }, - { - "type": "SYMBOL", - "name": "_text_block_definition" - }, - { - "type": "STRING", - "value": "`|" - } - ] - } - ] - }, - "_text_block_definition": { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "language" - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "PATTERN", - "value": "\\s" - }, - { - "type": "CHOICE", - "members": [ { "type": "ALIAS", "content": { "type": "SYMBOL", - "name": "_text_block_raw" + "name": "_text_block_raw_text" }, "named": true, "value": "raw_text" }, { - "type": "BLANK" + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_text_block_end" + }, + "named": false, + "value": "|" } ] } @@ -1446,7 +1422,15 @@ "externals": [ { "type": "SYMBOL", - "name": "_text_block_raw" + "name": "_text_block_start" + }, + { + "type": "SYMBOL", + "name": "_text_block_end" + }, + { + "type": "SYMBOL", + "name": "_text_block_raw_text" } ], "inline": [], diff --git a/src/node-types.json b/src/node-types.json index cfd17d8..ee14e4c 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -311,7 +311,7 @@ "fields": {}, "children": { "multiple": true, - "required": false, + "required": true, "types": [ { "type": "language", @@ -352,10 +352,6 @@ "type": ";", "named": false }, - { - "type": "`|", - "named": false - }, { "type": "animated", "named": false @@ -488,10 +484,6 @@ "type": "|", "named": false }, - { - "type": "|`", - "named": false - }, { "type": "}", "named": false diff --git a/src/parser.c b/src/parser.c index 4115a50f0e2e4c614ab4ce4258722de5befad740..5fa5ff97e8076fd42baa4583701d78d313ffc971 100644 GIT binary patch literal 137074 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 F{~!5ZS8)IU literal 142277 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ΞX>)0;qBfYuVrr8~b?2Zj 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 diff --git a/src/scanner.c b/src/scanner.c deleted file mode 100644 index b3962b2..0000000 --- a/src/scanner.c +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include - -enum TokenType { - RAW_TEXT -}; - -void *tree_sitter_d2_external_scanner_create() { return NULL; } -void tree_sitter_d2_external_scanner_destroy(void *payload) { } -unsigned tree_sitter_d2_external_scanner_serialize(void *p, char *buffer) { return 0; } -void tree_sitter_d2_external_scanner_deserialize(void *p, const char *b, unsigned n) {} - -static void advance(TSLexer *lexer) { lexer->advance(lexer, false); } -static void skip(TSLexer *lexer) { lexer->advance(lexer, true); } - -static bool scan_raw_text(TSLexer *lexer) { - lexer->result_symbol = RAW_TEXT; - - if (lexer->lookahead == '`') { - advance(lexer); - } - - if (lexer->lookahead == '|') { - return false; - } - - for (bool has_content = false;; has_content = true) { - lexer->mark_end(lexer); - - if (lexer->lookahead == '\0') { - return has_content; - } - - while (iswspace(lexer->lookahead)) { - advance(lexer); - lexer->mark_end(lexer); - } - - if (lexer->lookahead == '`') { - advance(lexer); - } - - if (lexer->lookahead == '|') { - advance(lexer); - if (lexer->lookahead == '\n') { - return has_content; - } - } - - advance(lexer); - } - - return false; -} - -bool tree_sitter_d2_external_scanner_scan( - void *payload, - TSLexer *lexer, - const bool *valid_symbols -) { - if (valid_symbols[RAW_TEXT]) { - return scan_raw_text(lexer); - } - - return false; -} diff --git a/src/scanner.cc b/src/scanner.cc new file mode 100644 index 0000000..c9803ce --- /dev/null +++ b/src/scanner.cc @@ -0,0 +1,159 @@ +#include +#include +#include + +namespace { + using std::vector; + using std::iswpunct; + + enum TokenType { + TEXT_BLOCK_START, + TEXT_BLOCK_END, + TEXT_BLOCK_RAW_TEXT, + }; + + struct Scanner { + vector escape_char_stack; + + Scanner() { + deserialize(NULL, 0); + } + + unsigned serialize(char *buffer) { + size_t i = 0; + size_t escape_char_count = escape_char_stack.size(); + buffer[i++] = escape_char_count; + + vector::iterator + iter = escape_char_stack.begin(), + end = escape_char_stack.end(); + + for (; iter != end && i < TREE_SITTER_SERIALIZATION_BUFFER_SIZE; ++iter) { + buffer[i++] = *iter; + } + + return i; + } + + void deserialize(const char *buffer, unsigned length) { + escape_char_stack.clear(); + if (length == 0) return; + size_t i = 0; + size_t escape_char_count = (uint8_t)buffer[i++]; + for (; i <= escape_char_count; i++) { + escape_char_stack.push_back(buffer[i]); + } + } + + void advance(TSLexer *lexer) { + lexer->advance(lexer, false); + } + + void skip(TSLexer *lexer) { + lexer->advance(lexer, true); + } + + bool is_text_block_end(TSLexer *lexer) { + vector::reverse_iterator + iter = escape_char_stack.rbegin(), + end = escape_char_stack.rend(); + + for (; iter != end; ++iter) { + if (lexer->lookahead != *iter) { + return false; + } + advance(lexer); + } + + return true; + } + + bool scan(TSLexer *lexer, const bool *valid_symbols) { + if (valid_symbols[TEXT_BLOCK_START] && escape_char_stack.empty()) { + lexer->result_symbol = TEXT_BLOCK_START; + lexer->mark_end(lexer); + + while (lexer->lookahead != 0 && iswspace(lexer->lookahead)) { + skip(lexer); + } + + if (lexer->lookahead != '|') { + return false; + } + + advance(lexer); + escape_char_stack.push_back('|'); + + if (!iswpunct(lexer->lookahead)) { + lexer->mark_end(lexer); + return true; + } + + int16_t escape_char = lexer->lookahead; + while (lexer->lookahead == escape_char) { + escape_char_stack.push_back(escape_char); + advance(lexer); + } + + lexer->mark_end(lexer); + + return true; + } else if (valid_symbols[TEXT_BLOCK_END] && !escape_char_stack.empty()) { + lexer->result_symbol = TEXT_BLOCK_END; + lexer->mark_end(lexer); + + while (lexer->lookahead != 0 && iswspace(lexer->lookahead)) { + skip(lexer); + } + + if (is_text_block_end(lexer)) { + lexer->mark_end(lexer); + escape_char_stack.clear(); + return true; + } + } else if (valid_symbols[TEXT_BLOCK_RAW_TEXT] && !escape_char_stack.empty()) { + lexer->result_symbol = TEXT_BLOCK_RAW_TEXT; + lexer->mark_end(lexer); + + while (lexer->lookahead != 0 && !is_text_block_end(lexer)) { + advance(lexer); + lexer->mark_end(lexer); + } + + return true; + } + + return false; + + } + }; + +} + +extern "C" { + + void *tree_sitter_d2_external_scanner_create() { + return new Scanner(); + } + + bool tree_sitter_d2_external_scanner_scan(void *payload, TSLexer *lexer, const bool *valid_symbols) { + Scanner *scanner = static_cast(payload); + return scanner->scan(lexer, valid_symbols); + } + + unsigned tree_sitter_d2_external_scanner_serialize(void *payload, char *buffer) { + Scanner *scanner = static_cast(payload); + return scanner->serialize(buffer); + } + + void tree_sitter_d2_external_scanner_deserialize(void *payload, const char *buffer, unsigned length) { + Scanner *scanner = static_cast(payload); + scanner->deserialize(buffer, length); + } + + void tree_sitter_d2_external_scanner_destroy(void *payload) { + Scanner *scanner = static_cast(payload); + delete scanner; + } + +} diff --git a/test/corpus/shape.txt b/test/corpus/shape.txt index 29c2d87..d7f751e 100644 --- a/test/corpus/shape.txt +++ b/test/corpus/shape.txt @@ -184,3 +184,28 @@ foo: |`go ) ) ) + +================================================================================ +Online text block +================================================================================ +foo: | helo world | + +bar: |%%md ## hello world %%| + +-------------------------------------------------------------------------------- + +(source_file + (shape + (shape_key) + (text_block + (raw_text) + ) + ) + (shape + (shape_key) + (text_block + (language) + (raw_text) + ) + ) +) diff --git a/tree-sitter-d2.wasm b/tree-sitter-d2.wasm index 3160194b1adaf4ec4376cfe04bf4949ea48b241a..bca3b6a53d4695e99579532e9b3e596d207c5598 100755 GIT binary patch literal 37493 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 hG&T=yDxmjPTwPo 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 YSA@9;!x8!-v__bK@B%^vVG(%!AN`iw0ssI2