I am trying to extend VSCode's Markdown syntax highlighter in order to highlight some nested Javascript wrapped in a custom syntax. For example, the following Markdown file
# Example
@@$ var value = 10;
The result is @@{value}.
would be converted to
# Example
The result is 10.
I would like the following to be highlighted as Javascript in VSCode, as if they were wrapped in a fenced code block:
The contents of a line starting with
@@$.The contents wrapped between
@@{and}.
I tried modifying markdown.tmLanguage.json to add these:
"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" }]
},
The code gets highlighted properly, but it seems that the "end" bit is ignored and I don't understand why -- starting from either a @@$ or @@{, the entire document is highlighted as Javascript. I've tried several combinations of regexes, and tried removing the initial part ((^|\\G)), but I couldn't figure out why the highlighter is so greedy.
How can I achieve my desired goal?