On 10 Feb 2015, at 23:40, Robert J. Rockefeller wrote:
I still have something wrong.
My injected grammar (injection selector is L:text.html.markdown) looks like this: […]
OK, your initial hunch was correct about the end pattern being eclipsed by recursively matching a new raw block since this is an injection grammar (I thought you had simply extended the current Markdown grammar).
You can solve this by changing the injection scope selector.
To make it only inject at the root of the grammar, you can use:
L:(text.html.markdown $)
However, in your example document, the here-doc is technically inside a paragraph. I am not sure if Markdown (that support fenced code blocks) will treat it as a code block or not, but if you want to support fenced code blocks, regardless of current context, you should use this injection scope selector:
L:(text.html.markdown - markup.raw)
This will inject the grammar everywhere except markup.raw, so you will avoid the recursion.
Btw: The inline markdown and markdown block: You may want to swap the two rules, so that we always try a block first (3 backticks), and then, if it’s not a block, fallback on trying inline raw. Then remove the trailing space, and possibly add another rule (before the inline raw) to match escape sequences, so that ` is not mistaken as inline raw.