Estoy tratando de extender el resaltador de sintaxis Markdown de VSCode para resaltar algunos Javascript anidados envueltos en una sintaxis personalizada. Por ejemplo, el siguiente archivo Markdown
# Example @@$ var value = 10; The result is @@{value}.se convertiría en
# Example The result is 10.Me gustaría que lo siguiente se resalte como Javascript en VSCode, como si estuvieran envueltos en un bloque de código cercado:
El contenido de una línea que comienza con @@$ .
El contenido envuelto entre @@{ y } .
Intenté modificar markdown.tmLanguage.json para agregar estos:
"fenced_code_block_majsdown2": { "begin": "(^|\\G)(@@$)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(\\r\\n|\\r|\\n)\\s*$", "patterns": [{ "include": "source.js" }] }, "fenced_code_block_majsdown": { "begin": "(^|\\G)(@@{)", "name": "markup.fenced_code.block.markdown", "end": "(^|\\G)(})\\s*$", "patterns": [{ "include": "source.js" }] }, El código se resalta correctamente, pero parece que se ignora el bit "end" y no entiendo por qué: a partir de @@$ o @@{ , todo el documento se resalta como Javascript. Probé varias combinaciones de expresiones regulares e intenté eliminar la parte inicial ( (^|\\G) ), pero no pude entender por qué el resaltador es tan codicioso.
¿Cómo puedo lograr mi objetivo deseado?
Terminé resolviendo el problema de esta manera:
{ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "name": "Majsdown", "patterns": [ { "include": "#majsdown_inject_expression" }, { "include": "#majsdown_execute_statement" }, { "include": "text.html.markdown" } ], "repository": { "majsdown_inject_expression": { "begin": "(.*?)(@@\\{)", "name": "test", "end": "(\\})", "beginCaptures": { "2": { "name": "keyword.control.majsdown" } }, "endCaptures": { "1": { "name": "keyword.control.majsdown" } }, "patterns": [ { "include": "source.js" } ] }, "majsdown_execute_statement": { "begin": "(.*?)(@@\\$)", "name": "test", "end": "(\\r\\n|\\r|\\n)", "beginCaptures": { "2": { "name": "keyword.control.majsdown" } }, "patterns": [ { "include": "source.js" } ] } }, "scopeName": "source.majsdown" }