Text formatter tools

It is nearly eight years since I wrote the answer below, I no longer use Grutatxt and now almost exclusively use MultiMarkdown, which adds a number of useful extensions to Markdown - the extended feature I use most is tables.

There are a number of extensions to Markdown which are not 100% compatible but which can be used almost interchangeably if you take care to use a common subset of features

  • MultiMarkdown
  • Github-flavored Markdown
  • PHP Markdown Extra

There is good support for supersets of Markdown in many applications and languages. I've used PHP, Perl and Go (golang) support for extended Markdown

There are many desktop and mobile apps that support Markdown editing with live previews etc. I still use a plain-text editor though.

I personally don't use Pandoc but I believe it is well-maintained and probably the most versatile lightweight markup processor. It should be on anyone's shortlist.


I suggest starting by looking at Markdown, Textile and Grutatxt. But there are many:

List of plain-text markup and tools

  • AFT written in Perl. Outputs html, latex, lout, RTF
  • APTconvert no longer available? See Doxia below
  • APT
  • ASCIIDoc Outputs DocBook
  • BBcode (alt)
  • BHL An add-on for the EMACS editor
  • Bobcat
  • Creole
  • Crossmark
  • Deplate Written in Ruby. Outputs LaTex, HTML, DocBook
  • Docfrac
  • Doxia reads APT and others
  • epydoc Mainly for Python API documentation
  • etText Written in Perl. Outputs HTML
  • gema Macro processor with templates for markup conversion
  • Groff
  • Grutatxt
  • Highlight 160 programming languages to HTML, XHTML, RTF, TeX, LaTeX, SVG, BBCode and XML
  • Lout similar to LaTex, outputs PS
  • Markdown Written in Perl. Outputs HTML only. Used on SuperUser.com
  • MultiMarkdown Extends Markdown with tables etc
  • o7acode Outputs HTML only?
  • otl Very configurable
  • Pandoc Written in Haskell
  • Pod Written in Perl
  • Proletext Uses spaces and tabs as markup :(
  • Regexxer Search/Replacer
  • ReST Written in Python. Outputs only HTML?
  • rdoc Written in Ruby
  • setext
  • sisu (alt)
  • skribe
  • spip More of a CMS?
  • stx2any Converts structured text (stx) into other formats
  • texy
  • Textile
  • text2html Written in Perl?
  • txt2html
  • txt2tags Not customizable
  • Yodl
  • Xilize Similar to textile markup
  • Zoem Used to generate HTML or troff.

Other lists

  • https://stackoverflow.com/questions/659227/compare-and-contrast-the-lightweight-markup-languages-textile-markdown-and-res
  • https://stackoverflow.com/questions/2158312/language-for-plain-text-documentation
  • http://en.wikipedia.org/wiki/List_of_lightweight_markup_languages
  • http://outl.sourceforge.net/lightweight.html
  • http://www.i-freeware-download.com/info/Lightweight-markup-language-ifpd-10420.aspx

Grutatxt

I like Grutatxt because it seems to me to be nearest to unadorned plain text and so the plain text is very readable. I use GrutaTxt to generate HTML and PDF (via LaTeX) It handles tables quite well which Markdown doesn't so far as I know. I have a Perl script to add a table of contents and plug in a CSS stylesheet. I use recode to convert character encodings to UTF8. I have all this in a simple makefile so I can just edit the text file and type make to publish it as a web page (and PDF simultaneously).

Comparison of markup for GrutaTxt, ASCIIDOC and APT

NL = new line, SP = space character(s)

Title
  Markdown      Title NL =====
  Grutatxt      Title NL =====
  ASCIIDOC      Title NL =====
  APT           --- NL Title NL --- NL Author NL --- NL Date

H1
  Markdown      Head NL ====   or # Head #
  Grutatxt      Head NL ====
  ASCIIDOC      Head NL ----   or   == Head
  APT           * Head

H2
  Markdown      Head NL ----   or ## Head ##
  Grutatxt      Head NL ----
  ASCIIDOC      Head NL ~~~~   or   === Head
  APT           ** Head

H3
  Markdown      ### Head ###
  Grutatxt      Head NL ~~~~
  ASCIIDOC      head NL ^^^^   or   ==== Head
  APT           *** Head

H4
  Markdown      -
  Grutatxt      -
  ASCIIDOC      Head NL ++++   or   ===== Head
  APT           **** Head       

Bold
  Markdown      **word**
  Grutatxt      *word*
  ASCIIDOC      .word
  APT           <<word>>

Italic
  Markdown      *word*
  Grutatxt      _word_
  ASCIIDOC      -
  APT           <word>

Code
  Markdown      `words`
  Grutatxt      `words'
  ASCIIDOC      `words`
  APT           <<<words>>>

Line Break
  Markdown      words SP SP NL
  Grutatxt      -
  ASCIIDOC      -
  APT           words \ NL words

Non breaking space
  Markdown      -
  Grutatxt      -
  ASCIIDOC      -
  APT           word\ word

Comment
  Markdown      -
  Grutatxt      -
  ASCIIDOC      -
  APT           ~~ comments

HyperLink
  Markdown      [name](http://a.b.c)
  Grutatxt      http://a.b.c(name)
  ASCIIDOC      <<a.b.c, name>>
  APT           http://a.b.c
                {{{http://a.b.c}name}}

Anchor
  Markdown      -
  Grutatxt      -
  ASCIIDOC      [[name]]
  APT           {name}

Unordered List
  Markdown      SP SP - words
  Grutatxt      SP * words
  ASCIIDOC      SP - words
  APT           SP * words

Ordered List
  Markdown      SP SP 1. words
  Grutatxt      SP # words
  ASCIIDOC      -
  APT           [[1]] words

Definition
  Markdown      -
  Grutatxt      SP * term: definition
  ASCIIDOC      term:: NL definition
  APT           [term] definition

Table
  Markdown      -
  Grutatxt      +---+---+
                | a | b |
                +---+---+
  ASCIIDOC      ~~~~~
                h,h,h
                ~~~~~
                a,b,c
                d,e,f
                ~~~~~
  APT           *---*---+---:
                |ctr|lft|rgt|
                *---*---+---:
                caption

Image
  Markdown      ![alt](http://a.b.c.png)
  Grutatxt      << NL <img src="cow.jpg" /> NL >>
  ASCIIDOC      -
  APT           [cow.jpg] caption

Preformatted
  Markdown      SP SP SP SP words    or <pre> NL words NL </pre>
  Grutatxt      SP words
  ASCIIDOC      SP words
  APT           --- NL words NL ---

Horizontal Rule
  Markdown      NL ------ NL      
  Grutatxt      ____
  ASCIIDOC      -
  APT           ====

Citation
  Markdown      -
  Grutatxt      ``words
  ASCIIDOC      -
  APT           -