| | } |
| | </style> |
| | -<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/><meta content="1739" name="count"/><title>Text format feature matrix</title></head><body><h1 id="markdown">Markdown</h1> |
| | +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/><meta content="1747" name="count"/><title>Text format feature matrix</title></head><body><h1 id="markdown">Markdown</h1> |
| | <div class="byline"> |
| | <p>Dave Jarvis, Aug 25, 2025</p> |
 |
| | <p>The purpose of this page is to help dispel the notion that Markdown is inferior |
| | to other text formats for technical documentation. Rather, they each have their |
| | -own strengths and weaknesses. Further, the page provides the starting point for |
| | -an objective way to evaluate various formats for specific needs. Keep in mind |
| | -that tools such as pandoc can do a terrific job at converting between formats.</p> |
| | +own strengths and weaknesses. The table provides an objective way to evaluate |
| | +formats for specific needs. Keep in mind that tools such as pandoc can do a |
| | +terrific job at converting between formats.</p> |
| | <p>Full disclosure: I developed KeenWrite, a desktop Markdown editor and |
| | command-line application. While the feature matrix is fairly comprehensive, if |
| | you spot a critical omission, <a href="/contact.shtml">contact me</a>.</p> |
| | <p>The <a href="matrix.ods">downloadable</a> feature matrix is an unweighted comparison of |
| | various plain text systems:</p> |
| | -<p><span class="caption">Feature matrix comparison</span></p> |
| | <p> |
| | </p><table> |
 |
| | <tr><td align="left">Text, code blocks</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td></tr> |
| | <tr><td align="left">Text, code blocks, language</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td></tr> |
| | -<tr><td align="left">Text, dashes, en --</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td></tr> |
| | -<tr><td align="left">Text, dashes, em ---</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">N</td><td align="left">N</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td></tr> |
| | +<tr><td align="left">Text, dashes, en --</td><td align="left">N</td><td align="left">Y</td><td align="left">Y</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td></tr> |
| | +<tr><td align="left">Text, dashes, em ---</td><td align="left">N</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">N</td><td align="left">N</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td></tr> |
| | <tr><td align="left">Text, ellipses …</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">N</td><td align="left">N</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td></tr> |
| | <tr><td align="left">Text, arrows -> => <= <-</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">Y</td><td align="left">Y</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td></tr> |
| | <tr><td align="left">Text, (C) (R) (TM)</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">Y</td><td align="left">Y</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td></tr> |
| | <tr><td align="left">Text, entities, numeric</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td></tr> |
| | <tr><td align="left">Text, entities, named</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td></tr> |
| | <tr><td align="left">Text, non-breaking spaces</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">N</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td><td align="left">Y</td></tr> |
| | -<tr><td align="left">Total</td><td align="left">52</td><td align="left">59</td><td align="left">63</td><td align="left">48</td><td align="left">59</td><td align="left">40</td><td align="left">51</td><td align="left">36</td><td align="left">42</td><td align="left">53</td><td align="left">53</td><td align="left">57</td></tr> |
| | +<tr><td align="left">Total</td><td align="left">50</td><td align="left">59</td><td align="left">63</td><td align="left">48</td><td align="left">59</td><td align="left">40</td><td align="left">51</td><td align="left">36</td><td align="left">42</td><td align="left">53</td><td align="left">53</td><td align="left">57</td></tr> |
| | </tbody> |
| | </table> |
 |
| | marking up instructions for drawing a diagram, technical or otherwise.</p> |
| | <h3 id="diagrams-variables-interpolated">Diagrams, variables, interpolated</h3> |
| | -<p>The <strong>Diagrams, variables, interpolated</strong> row means the ability to reference |
| | -interpolated variables within diagrams. For example, a genealogy diagram could |
| | -include family names from an externally defined character sheet:</p> |
| | +<p>The <strong>Diagrams, variables, interpolated</strong> row means embedding interpolated |
| | +variables into diagrams. For example, a genealogy diagram could include family |
| | +names from an externally defined character sheet:</p> |
| | <pre><code>``` diagram-blockdiag |
| | blockdiag { |
 |
| | <h3 id="diagrams-mermaid">Diagrams, Mermaid</h3> |
| | <p>The <strong>Diagrams, Mermaid</strong> rows signify various aspects of exporting diagrams |
| | -codified using the text-based Mermaid syntax.</p> |
| | +coded using the text-based Mermaid syntax.</p> |
| | <ul> |
| | <li><strong>Raster</strong> -- Diagrams render as pixel-based images.</li> |
 |
| | <p>To render Mermaid diagrams in AsciiDoc, a headless browser extension must be |
| | installed. AsciiDoctor launches the browser to draw the diagram. While this is |
| | -a pragmatic solution, it has disadvantages.</p> |
| | +a pragmatic solution, it has drawbacks.</p> |
| | <h3 id="images-dimensions">Images, dimensions</h3> |
| | <p>The <strong>Images, dimensions</strong> row captures the ability to resize images in the |
 |
| | equations, and sections are algorithms, musical scores, lyrics, source |
| | listings, and more. If users can add and refer to their own cross-reference |
| | -labels, including internationalizd ones, the <strong>Cross-references, custom</strong> |
| | +labels, including internationalized ones, the <strong>Cross-references, custom</strong> |
| | row is marked with a <code>Y</code>.</p> |
| | <p>Existing Markdown implementations have fairly similar syntaxes for |
 |
| | <code>Y</code>.</p> |
| | <h3 id="curls-quotation-marks-comprehensive">Curls quotation marks, comprehensive</h3> |
| | -<p>The <strong>Curls quotations marks, comprehensive</strong> row describes systems that can |
| | -curl single quotes correctly. Phrases such as “fish ’n’ chips,” “’Bout that |
| | +<p>The <strong>Curls quotations marks, comprehensive</strong> row describes systems that |
| | +properly format quotation marks. Phrases such as “fish ’n’ chips,” “’Bout that |
| | time I says, ‘Boys! I been thinkin’ ’bout th’ Universe,’” or quotations that |
| | span multiple paragraphs must be curled.</p> |
| | <p>KeenWrite integrates KeenQuotes, a natural language parsing library that can |
| | -determine how to curl single quotes, double quotes, contractions, and mark |
| | -primes. Systems must pass KeenQuote’s test suite using naturally entered |
| | -quotation marks (i.e., " and ') to be marked as a <code>Y</code>.</p> |
| | +determine how to format single quotation marks, double quotes, contractions, |
| | +and mark primes. Systems must pass KeenQuote’s test suite using naturally |
| | +entered quotation marks (i.e., " and ') to be marked as a <code>Y</code>.</p> |
| | <h3 id="collate-chapters">Collate chapters</h3> |
| | <p>The <strong>Collate chapters</strong> row describes whether individual document files---in |
 |
| | built-in functionality, it is marked as <code>N</code>, regardless of whether extensions |
| | support it.</p> |
| | -<p>Note that <strong>Text, underline</strong> is deliberately unsupported by KeenWrite. |
| | -Historically, underlining was developed to compensate for shortcomings |
| | -in early typewriter technology. Namely, a lack of bold or italics. If users |
| | -ache for that newsstand tabloid feel, they’ll need to look elsewhere.</p> |
| | +<p>Note that <strong>Text, colour</strong> mixes content (what is written) and presentation |
| | +(how the writing appears), and is therefore unsupported by KeenWrite.</p> |
| | +<p><strong>Text, underline</strong> is also unsupported by KeenWrite. Historically, |
| | +underlining was developed to compensate for shortcomings in early typewriter |
| | +technology. Namely, a lack of bold or italics. If users ache for that newsstand |
| | +tabloid feel, they’ll need to look elsewhere.</p> |
| | <h1 id="diagram-code-blocks">Diagram code blocks</h1> |
| | <p>KeenWrite distinguishes between diagrams and source code listings by prefixing |