- Markup language comparison - Textile vs. Markdown
- Textile2 vs. MultiMarkdown
- Syntax Comparison
- Which one do you prefer?
Textile2 is an extension to Textile, adding extended blocks (blocks that can contain a newline). MultiMarkdown is an extension to Markdown, adding support for tables, footnotes, bibliography, automatic cross-references, glossaries, appendices, definition lists, math syntax, anchor and image attributes, and document metadata.
Generally, Markdown is bit more cryptic but more powerful, while Textile is simpler and easier to read. Textile is meant to be combined with HTML for more complex documents. Below are the basic differences between the two syntaxes.
h1. h2. h3. h4. h5. h6.
# ## ### #### ##### ######
Markdown makes it difficult to read what section level your at as you go deeper then the 5th heading. On the other hand, Markdown offers a more visual syntax for level 1 headings,
Main Header ========
and for level 2 headings:
Sub Header --------
Some complaints against the Markdown link syntax include forgetting which goes first (the link title or the URL) and what types of brackets are around each. Textile is simpler.
Complaints against Textile include the need to escape a double quote in the link title (
"How free markets "address" health care":http://krugman.blogs.nytimes.com/2009/07/25/why-markets-cant-cure-healthcare/), and unclear end of links: some parsers may include the final period in
"Foo Bar":http://foo.com/bar., while others may not. Markdown is more powerful and clearer.
- Markdown provides a shorthand way to create a link with the URL as the text by enclosing the URL in angle brackets:
- Textile does not have a shortcut. One would have to do
"http://mojomojo.org/":http://mojomojo.org/(note that some implementations, but not the one MojoMojo uses, automatically hyperlink URLs, which makes it impossible to disable automatic hyperlinking via the markup)
The Textile markup has longer historical backing with _ and * being used way before HTML to convey "underline" and "bold".
Markdown justifies its choice in the light of semantic markup: thinking in terms of "bold" and "italic" is not semantic; other media (e.g. speech synthesizers for the visually impaired) cannot render "bold" or "italic". The semantic meaning is "emphasis" and "strong emphasis". Markdown is semantic.
Textile doesn't interpret emphasis right inside parentheses: neither
(_italics_) will be rendered with formatting; instead, the two strings will be output verbatim.
- Textile can be turned off by placing
==around whatever content you don't want to Textile
- Markdown can be turned off by surrounding the content in a
<div>. This comes in handy when pasting chunks of HTML like counters or comment widgets. To force Markdown to interpret markup in
<div>s, add a markdown="1" attribute to the div. (Note: this doesn't currently work in Text::Markdown (the module used by MojoMojo), but is being worked on).
- Textile: generally impossible, although particular characters can be escaped (HTML named entities), numeric entities cannot (
_will be rendered literally, not as an underscore)
- Markdown: simply backslash-escape the character:
- Textile: TODO
- Markdown: all HTML tags are interpreted as HTML. Markdown is interpreted in inline tags (e.g.
<del>). Markdown is not processed within block-level HTML tags (
` etc.). While you can't use a Markdown-stylelink` inside an HTML table, for example, this is flagged as a feature request for Text::Markdown.
- Both Textile and MultiMarkdown have a syntax for definition lists but MojoMojo currently doesn't support the MultiMarkdown syntax.
- Textile's footnoting is simpler:
as the footnote anchor and
fn1. My foonotewhere the footnote text should appear. On the other hand, it is impossible to define named footnotes, which are extensively used on Wikipedia in large documents, or when one reference substantiates multiple facts.
- Markdown's is more semantic and adds a link back
[^my_footnote] ... [^my_footnote]: A note about my foot. A multiple references to the same footnote bug in MultiMarkdown causes the footnote to be repeated for each reference, and the anchor counter to increase.
- Textile: tables with headings, table/row/column style attributes, vertical alignment and row/column span. No linebreaks between rows and no horizontal alignment.
- Markdown: tables with captions, headings, horizontal alignment, horizontal column spanning, and line breaks allowed between rows for improved readability (interpreted as
<tbody>sections). No vertical alignment or row spanning. Pipe characters in text within table cells must be escaped as
|(backslash-escaping doesn't work in this case with MultiMarkdown).
Example copied from the MultiMarkdown syntax guide:
|First Header||Second Header||Third Header|
|And more||And more|
Textile2: newlines break lists. It thus becomes impossible to render blockquotes or blocks of code in lists because the "bq." or "bc." block signature requires being surrounded by blank lines, and blank lines break lists:
# First, bq. Avoid problems, and you'll never be the one who overcame them. -- Richard Bach # Second item, but will be numbered "1" bq. There is no elevator to success. You have to take the stairs.
To achieve this, one must fall back to HTML.
Markdown's documentation explicitly tells how to "put a blockquote within a list item" (or a code section). This very list including the code section above has been written using Markdown.
You can submit your preference for Markdown vs. Textile at the Mark-it-up survey.
Author: Dan Dascalescu
Thanks to Mateu X. Hunter for the initial draft.
Showing changes from previous revision.