recursive lists. After a lot of searching, and <text:span text:style-name="MMD-Italic">tons</text:span> more reading, I
ultimately decided to use a parser generator to handle the task of group lines
into blocks. <text:span text:style-name="Source_20_Text">parser.y</text:span> has the source for this, and it is processed by the
-<text:a xlink:type="simple" xlink:href="http://www.hwaci.com/sw/lemon/">lemon</text:a> parser generator to create the actual
-code.</text:p>
+<text:a xlink:type="simple" xlink:href="http://www.hwaci.com/sw/lemon/">lemon</text:a> parser generator to create the actual code.</text:p>
<text:p text:style-name="Standard">I chose to do this because hand-crafting the block parser would be complex.
The end result would likely be difficult to read and understand, which would
the development of MMD. So there is really not much unit testing built into
the code or used during the development.</text:p>
+<text:h text:outline-level="3"><text:bookmark text:name="dependencieslibraries"/>Dependencies/Libraries </text:h>
+
+<text:p text:style-name="Standard">MMD v6 has no external dependencies when compiling, aside from the standard
+libraries for C development.</text:p>
+
+<text:p text:style-name="Standard">MMD can be compiled without any other tools beside the build system (cmake).</text:p>
+
+<text:p text:style-name="Standard">If you want to edit the block parser, you need to modify the <text:span text:style-name="Source_20_Text">parser.y</text:span> file
+and process that using <text:a xlink:type="simple" xlink:href="http://www.hwaci.com/sw/lemon/">lemon</text:a> in order to update the <text:span text:style-name="Source_20_Text">parser.c</text:span> file. The
+lemon parser source is actually included in MMD and needs to be compiled to be
+used.</text:p>
+
+<text:p text:style-name="Standard">If you want to update the lexer or scanner utility functions, then you can
+modify <text:span text:style-name="Source_20_Text">lexer.re</text:span> or <text:span text:style-name="Source_20_Text">scanners.re</text:span>. These need to be processed using <text:a xlink:type="simple" xlink:href="http://re2c.org/">re2c</text:a>,
+which has to be installed separately.</text:p>
+
+<text:p text:style-name="Standard">MMD v6 makes use of several other projects to improve performance and ease of
+use:</text:p>
+
+<text:list text:style-name="L1">
+<text:list-item>
+<text:p text:style-name="Standard"><text:a xlink:type="simple" xlink:href="https://troydhanson.github.io/uthash/">uthash</text:a> – provides support for hashes to quickly locate specific “objects”
+based on text keys. These are used for matching footnotes, links, images and
+the like when created with the reference syntax. Much faster than searching
+through each one sequentially.</text:p></text:list-item>
+
+<text:list-item>
+<text:p text:style-name="Standard"><text:a xlink:type="simple" xlink:href="https://github.com/richgel999/miniz">miniz</text:a> – provides zip archive support to enable creation of EPUB 3 files,
+which are zip files with a specific file structure inside them.</text:p></text:list-item>
+
+<text:list-item>
+<text:p text:style-name="Standard"><text:a xlink:type="simple" xlink:href="https://github.com/argtable/argtable3">argtable3</text:a> – provides more advanced command-line argument processing in a
+more cross-platform approach than that used by MMD v5.</text:p></text:list-item>
+
+</text:list>
+
<text:h text:outline-level="3"><text:bookmark text:name="changelog"/>Changelog </text:h>
<text:list text:style-name="L1">
recursive lists. After a lot of searching, and <em>tons</em> more reading, I
ultimately decided to use a parser generator to handle the task of group lines
into blocks. <code>parser.y</code> has the source for this, and it is processed by the
-<a href="http://www.hwaci.com/sw/lemon/">lemon</a> parser generator to create the actual
-code.</p>
+<a href="http://www.hwaci.com/sw/lemon/">lemon</a> parser generator to create the actual code.</p>
<p>I chose to do this because hand-crafting the block parser would be complex.
The end result would likely be difficult to read and understand, which would
the development of <abbr title="MultiMarkdown">MMD</abbr>. So there is really not much unit testing built into
the code or used during the development.</p>
+<h3 id="dependencieslibraries">Dependencies/Libraries </h3>
+
+<p><abbr title="MultiMarkdown">MMD</abbr> v6 has no external dependencies when compiling, aside from the standard
+libraries for C development.</p>
+
+<p><abbr title="MultiMarkdown">MMD</abbr> can be compiled without any other tools beside the build system (cmake).</p>
+
+<p>If you want to edit the block parser, you need to modify the <code>parser.y</code> file
+and process that using <a href="http://www.hwaci.com/sw/lemon/">lemon</a> in order to update the <code>parser.c</code> file. The
+lemon parser source is actually included in <abbr title="MultiMarkdown">MMD</abbr> and needs to be compiled to be
+used.</p>
+
+<p>If you want to update the lexer or scanner utility functions, then you can
+modify <code>lexer.re</code> or <code>scanners.re</code>. These need to be processed using <a href="http://re2c.org/">re2c</a>,
+which has to be installed separately.</p>
+
+<p><abbr title="MultiMarkdown">MMD</abbr> v6 makes use of several other projects to improve performance and ease of
+use:</p>
+
+<ul>
+<li><p><a href="https://troydhanson.github.io/uthash/">uthash</a> – provides support for hashes to quickly locate specific “objects”
+based on text keys. These are used for matching footnotes, links, images and
+the like when created with the reference syntax. Much faster than searching
+through each one sequentially.</p></li>
+<li><p><a href="https://github.com/richgel999/miniz">miniz</a> – provides zip archive support to enable creation of EPUB 3 files,
+which are zip files with a specific file structure inside them.</p></li>
+<li><p><a href="https://github.com/argtable/argtable3">argtable3</a> – provides more advanced command-line argument processing in a
+more cross-platform approach than that used by <abbr title="MultiMarkdown">MMD</abbr> v5.</p></li>
+</ul>
+
<h3 id="changelog">Changelog </h3>
<ul>
earlier, which was to have a separate parser tuned to only identify headers
and “stuff between headers”.</text:p></text:list-item>
-<text:list-item>
-<text:p text:style-name="Standard">Improved EPUB support. Currently, EPUB support is provided by a separate
-<text:a xlink:type="simple" xlink:href="https://github.com/fletcher/MMD-ePub">tool</text:a>. At some point, I would like to
-better integrate this into MMD itself.</text:p></text:list-item>
-
</text:list>
</office:text>
</office:body>
<p>Some features I plan to implement at some point:</p>
<ol>
-<li><p>OPML export support is not available in v6. I plan on adding improved
+<li>OPML export support is not available in v6. I plan on adding improved
support for this at some point. I was hoping to be able to re-use the
existing v6 parser but it might be simpler to use the approach from v5 and
earlier, which was to have a separate parser tuned to only identify headers
-and “stuff between headers”.</p></li>
-<li><p>Improved EPUB support. Currently, EPUB support is provided by a separate
-<a href="https://github.com/fletcher/MMD-ePub">tool</a>. At some point, I would like to
-better integrate this into <abbr title="MultiMarkdown">MMD</abbr> itself.</p></li>
+and “stuff between headers”.</li>
</ol>
<div class="glossary">
earlier, which was to have a separate parser tuned to only identify headers
and "stuff between headers".
-2. Improved EPUB support. Currently, EPUB support is provided by a separate
-[tool](https://github.com/fletcher/MMD-ePub). At some point, I would like to
-better integrate this into MMD itself.
-
-
[>MMD]: MultiMarkdown
-
[CriticMarkup]: http://criticmarkup.com/
-
[?PEG]: Parsing Expression Grammar <https://en.wikipedia.org/wiki/Parsing_expression_grammar>
-
[?AST]: Abstract Syntax Tree <https://en.wikipedia.org/wiki/Abstract_syntax_tree>
-
[EPUB 3]: https://en.wikipedia.org/wiki/EPUB
-
[Sigil]: https://sigil-ebook.com/
-
[Calibre]: https://calibre-ebook.com/