I’ve been hard at work nights/weekends to rewrite MultiMarkdown, and am making fantastic progress!
The new version now passes all of the Markdown/MultiMarkdown/Compatibility tests for HTML that are expected (there is one Markdown test that peg-markdown fails, and therefore MMD fails as well. This is really an edge case, and arguably John MacFarlane’s approach is the better one here.) During the testing, I found one or two small things that I actually changed — this means that 4.0 won’t be character for character identical to 3.7, but I believe all the changes are for the better and should have minimal, if any, impact on most users.
Performance is actually better than MMD (aka peg-multimarkdown) 3.7 right now, but I still need to add the “deadman’s switch” to keep things from running amok forever on bad documents (this will slow things down some). I was worried that my new code would lose some efficiency over John’s peg-markdown work, but I managed to simplify some things that improved overall performance. It’s still slower than peg-markdown, but this is expected as it has more features.
During my tests, there are still no memory leaks. This should be a tremendous help for MultiMarkdown Composer.
I’ve added a bit more safety checking to help prevent crashes with “unusual” documents that don’t fit expectations.
More importantly, the code should be reentrant/thread-safe. This means that the commands can be called multiple times in multiple threads without “colliding” with each other. These collisions can lead to crashes that are difficult to track down as it is unlikely that two threads will collide in exactly the same way on multiple runs. I have not tested this aspect of the code yet, but that will be coming up in the next phase.
As mentioned, HTML functionality is basically complete. Adding in LaTeX, OPML, FODT support will now be relatively easy since the framework is complete.
I still have a few command line options/commands to add back in, but these should be fairly straightforward.
Once I get these features added in, I’ll upload the source to github and get some more eyeballs looking for bugs. 4.0 will basically be a feature match release for 3.7. Once all the kinks are worked out, I’ll start considering new features and updates.
For those who are interested:
Limitations: