A Markdown parser written in JavaScript, generated with PEG grammar. Currently, in progress.
This is a component of xtd project, but I plan to finish developing it separately and then merge the result there. (So, the most part of its development history is located there).
In fact, it is a translation of PegC Markdown parser to JavaScript. But in the end, there are a lot differences in the sources and result.
The both C variant and JS (this) variant build a tree of parsed document elements, including their offsets and additional data required for generating some HTML result or hightlighting a syntax in some JavaScript implementation.
- Markdown by John Gruber, a great documents' syntax agreement
- PegJS by David Majda, a JavaScript parsers generator using PEG-like grammars
- My Customized PegJS Implementation with
chunk
variables inside actions and merged with PegJS predicate fix. - PegC GUI-oriented Markdown parser by Ali Rantakari, the place where I've found a parser and copied it and now I am modifying it for JavaScript
- PegC Markdown parser by John MacFarlane, the version the previous author adapted to implement his GUI-oriented version and in fact the actual and the main PegC parser (and I am taking parts from there to include new things here)
- PegC by Stephan Beal, itself
- PegHS Markdown parser, again by John MacFarlane, if you are interested
- Codemirror 2, the nerdy JS-written any-language source-code editor I plan to integrate with
- MDTest 1.1 by Michel Fortin
Finished
- Inlines: Strong, Em, Code
- Html Blocks, Html entities
- Headings
- Horizontal Rules
- Paragraphs
- Top-level Lists
- Top-level verbatims
- Links, all modifications
- Images, all modifications
- Oh, all that stuff except complex lists
Not finished
(They were working some not ideal way, but I am currently refactoring this part)
- Nested lists and blocks inside them
- Different extra syntax
- Search over the new stuff in PegC Markdown parser implementation
- Test over for for Markdown Syntax
- Check out [Markdown Gotchas][]
- Test with MDTest 1.1 by Michel Fortin
- Support Markdown Extra
So currently, the lists are parsed ok, but I plan to modify their rules to support complex indentations.
When parsing a MarkDown document, you get a JavaScript Object containing the document tree in Markdown terms. I'll make a detailed description when I'll finish an implementation.
Just a JS-ones:
- Showdown by Corey Innis
- MarkdownJS by Dominic Baggott
- Pagedown used at StackOverflow
- WMDEditor used at StackOverflow
Install last node.js version (v0.5.8+
)
Install npm
Run in node directory (or with -g
):
npm install pegjs
npm install [email protected] # or higher
cd ~/Worktable # (for example)
git clone [email protected]:shamansir/pegjs.git
cd ./pegjs
jake build
node test/run
ln -sf ~/Worktable/pegjs <nodejs-location>/lib/node_modules
ln -s <nodejs-location>/lib/node_modules ./node_modules # optional, if pegjs module not found
cd ~/Workspace # (for example)
git clone [email protected]:shamansir/mdown-parse-pegjs.git
cd ./mdown-parse-pegjs
node ./test-mdown-parser-with-node.js