Merge: lib/markdown2: introduce a new Markdown engine
authorJean Privat <jean@pryen.org>
Tue, 26 Jun 2018 13:28:20 +0000 (09:28 -0400)
committerJean Privat <jean@pryen.org>
Tue, 26 Jun 2018 13:28:20 +0000 (09:28 -0400)
commit6ad86288a89e93f6887a8f770f6668586298a92e
tree08bb53f5afb80290db174b06a1a48447a6681b1f
parent74398ebe85ee2337efa986205531b3ca696c8543
parent278b28992e380f283c3984f0b702278ee94b445e
Merge: lib/markdown2: introduce a new Markdown engine

This PR introduces a new Markdown engine called `markdown2`.

The current Markdown implementation is functional but does not follows the [CommonMark](http://commonmark.org/) specification as it passes only 273 tests of the 627 from the [CommonMark test suite](https://github.com/CommonMark/CommonMark).

Also there is a few issues with it as stated in #791, #1394, #1525 and #2507.

This new implementation aims at resolving these issues and follow the CommonMark specification.

Features:
* Markdown AST creation and rendering
* Rendering to HTML
* Rendering to Markdown
* Rendering to Man format
* Rendering to LaTeX
* Parsing of Github extended mode
* Parsing of wikilinks
* Parsing of LaTeX/Maths expression (upcoming in next PR)
* Respect of the CommonMark specification with only 10 tests failed (UTF-8 related)
* Extensive testing with a total of 980 test units...

I didn't remove the old markdown implementation since the benchmarks are not really good for now. Since `markdown2` uses a lot of regular expressions, performances can be an issue compared to `markdown`:

![screenshot from 2018-06-20 19 21 08](https://user-images.githubusercontent.com/583144/41689548-1a8bc5d0-74bf-11e8-899e-52b0eb093d57.png)

In the following PR some Nit tools will be migrated to the new implementation:
* nitunit
* nitiwiki
* nitdoc
* nitweb

Pull-Request: #2720