Markdown Extra Spec: Parsing Section

John MacFarlane jgm at
Tue May 13 10:02:48 EDT 2008

> It certainly true that many parts could be converted to this and be less

> verbose, and I find this idea appealing. I doubt the whole Markdown Extra

> ruleset can be expressed in this format though. Can a PEG grammar have

> parametrized rules?


> I've just added nested block element support in the spec. This is done

> by having the block element generator (formerly the block element pass)

> have a stack of rules to match when starting each line. This idea coming

> straight from Allan Odgaard's explanation of his lost Markdown parser.

> <

No, PEG can't do this. But there is a different approach that works
(described in my earlier email).

By the way: if I understand it correctly, your description of "Code
block" would parse the following as two code blocks, not one code block
containing a blank line:

some code

more code

(Note: there is no tab on the middle line.) I don't think that's the
desired behavior.

Here's the markdown-peg version (and remember, this is "runnable"):

verbatim <- newRule $
many1 (doesNotMatch blankline ->> indentedLine) <++>
(many (many1 (optional indent ->> blankline) <++>
many1 (doesNotMatch blankline ->> indentedLine)) ## concat) <<-
many blankline ## Verbatim . concat


More information about the Markdown-Discuss mailing list