Lightweight markup language
A lightweight markup language is a markup language with a simple syntax, designed to be easy for a human to enter with a simple text editor, and easy to read in its raw form.
Lightweight markup languages are used in applications where people might be expected to read the document source as well as the rendered output. For instance, a person downloading a software library might prefer to read the documentation in a text editor rather than a web browser.
Another application is for entry in web-based publishing, such as weblogs and wikis, where the input interface is a simple text box. The server software converts the input to a common document markup language like HTML or XHTML.
History
Lightweight markup languages were originally used on text-only displays which could not display characters in italics or bold, so informal methods to convey this information had to be developed. This formatting choice was naturally carried forth to plain-text email communications.
1986 international standard SGML provided facilities to define and parse lightweight markup languages using grammars and tag implication. The 1998 W3C XML is a profile of SGML that omits these facilities.
Types
Presentation oriented languages include AsciiDoc, BBCode, Creole, Crossmark, deplate, Epytext, EtText, Haml, JsonML, MakeDoc, Markdown, Org-mode, POD, reStructuredText, Ruby Document format, Setext, SiSU, SPIP, Xupl, Texy!, Textile, txt2tags, UDO and Wikitext.
Data serialization oriented languages include Curl (programming language) (homoiconic, but also reads JSON; every object serializes), JSON, OGDL, Simple Declarative Language and YAML.
Comparison of language features
Language | Implementation language or platf. | HTML export tool | HTML import tool | Tables | Link titles | class attribute | id attribute | Exportable formats | License |
---|---|---|---|---|---|---|---|---|---|
AsciiDoc | Python, Ruby, JavaScript | Yes | Yes | Yes | Yes | Yes | Yes | XHTML, LaTeX, PDF, DocBook, OpenDocument, EPUB, Man page, etc. | GNU GPL, MIT |
BBCode | Perl, PHP, C#, Python, Ruby | No | No | Yes | No | No | No | HTML, XHTML | Public Domain |
Creole | PHP, Python, Ruby, JavaScript [1] | No | No | Yes | No | No | No | Depends on implementation | CC_BY-SA 1.0 |
deplate | Ruby | Yes | No | Yes | No | Yes | Yes | HTML, LaTeX, DocBook, plain text | GPL |
Markdown | Perl (originally), C,[2][3] Python,[4] JavaScript, Haskell,[5] Ruby,[6] C#, Java, PHP. Features are implementation dependent. |
Yes | Yes | Yes/No | Yes | Yes/No | Yes/No | HTML originally; depending on the implementation, also LaTeX, ConTeXt, RTF, PDF, OpenDocument, DocBook, EPUB, MediaWiki, ReStructuredText, Man page, S5 (file format), etc.
Markdown own syntax does not support tables, class attributes, or id attributes; however, since Markdown supports inclusion of native HTML code, these features can be implemented using direct HTML. (Note that some extensions may support these features.) |
BSD-style & GPL (both) |
Markdown Extra | PHP (originally), Python, Ruby | Yes | Yes | Yes[7] | Yes | Yes | Yes | XHTML | BSD-style & GPL (both) |
MediaWiki | Perl, PHP | Yes | Yes | Yes | Yes | Yes | Yes | XHTML | GNU GPL |
Org-mode | Emacs Lisp, Ruby (parser only), Perl, OCaml | Yes | Yes[8] | Yes | Yes | Yes | Yes | Plain text, XHTML, LaTeX, PDF, DocBook, OpenDocument, XOXO, iCalendar, Texinfo, Markdown, Man page, contrib: groff, s5, deck.js, Confluence Wiki Markup, TaskJuggler, RSS, FreeMind | GPL |
PmWiki | PHP | No | Yes | Yes | Yes | Yes | Yes | XHTML 1.0 Transitional | GNU GPL |
POD | Perl | Yes | ? | No | Yes | ? | ? | HTML, XHTML, XML, Man page, LaTeX, plain text, RTF, DocBook | Artistic License, Perl's license |
reStructuredText | Python,[9][10] Haskell, Java, | Yes | Yes[11] | Yes | Yes | Yes | auto | LaTeX, XML, Man page, HTML (w3c valid), PDF, EPUB, S5, ODF, Devhelp, QT Help, CHM, JSON | Public Domain |
Textile | PHP, Java, Perl, Python, Ruby, ASP, C# | Yes | No | Yes | Yes | Yes | Yes | XHTML | Textile License |
Texy! | PHP, C#; Java in progress | Yes | Yes | Yes | Yes | Yes | Yes | XHTML or HTML | GNU GPL v2 License |
txt2tags | Python,[12] PHP[13] | Yes | Yes[14] | Yes[15] | Yes | ? | ? | HTML, XHTML, SGML, Creole, AsciiDoc, MediaWiki/Wikipedia, MoinMoin, PmWiki, DokuWiki, Google Code Wiki, LaTeX, roff, Man page, MagicPoint, Lout, PageMaker, ASCII Art and Plain-text | GPL |
Comparison of lightweight markup language syntax
Text/font-face formatting
Language | Bold | Italic | Monospace (teletype) | Notes |
---|---|---|---|---|
AsciiDoc | *bold text* |
'italic text' or _italic text_ |
+monospace text+ or `monospace text` |
Can double operators to apply formatting where there is no word boundary (for example **b**old t**ex**t yields bold text). |
BBCode | [b]bold text[/b] |
[i]italic text[/i] |
[code]monospace text[/code] |
Formatting works across line breaks. |
Creole | **bold text** |
//italic text// |
{{{monospace text}}} |
Triple curly braces are for nowiki which is optionally monospace in Creole (the choice of the implementor). Future Creole additions may introduce double hash marks (##) for monospace. |
deplate | {text style=bold: bold text} |
__emphasized text__ |
''monospace text'' |
deplate discourages visual formatting. Users who want to format text in a particular style have to define style classes in the given output format (CSS, LaTeX). By default, emphasized text is formatted in italics. |
Markdown[16] | **bold text** or |
*italic text* or |
Non-monospace text
|
Markdown doesn't use bold and italic tags, but rather em (typically italic) and strong (typically bold) tags.Monospace text is created by indenting that line 4 spaces or one tab character, or enclosing text in backticks: |
MediaWiki | '''bold text''' |
''italic text'' |
<code>monospace text</code> |
|
Org-mode | *bold text* |
/italic text/ |
=code= or ~verbatim~ |
_underlined_ +strike-through+ |
PmWiki | '''bold text''' |
''italic text'' |
@@monospace text@@ |
|
POD | B<bold text> |
I<italic text> |
C<monospace text> |
Indented text is also shown as monospaced code. |
reStructuredText | **bold text** |
*italic text* |
``monospace text`` |
|
Setext | **bold text** |
~italic text~ |
|
|
Textile[17] | *bold text*
or |
_italic text_
or |
@monospace text@ |
Textile uses em (typically italic) and strong (typically bold) tags
on single symbols (and |
Texy! | **bold text** |
*italic text* or
|
`monospace text` |
Texy uses by default em (typically italic) and strong (typically bold) tags. It is possible to configure library to use another tags. |
txt2tags | **bold text** |
//italic text// |
``monospace text`` |
__underlined__ --strike-through-- |
Section headers
Language | Format | Notes |
---|---|---|
AsciiDoc | = Level 1 Header
or
Level 1 Header
==============
Level 2 Header
--------------
Level 3 Header
~~~~~~~~~~~~~~
|
Close equals signs are optional (ignored if present). Level 1 is document/page title. |
BBCode | Does not support section headers | |
Creole | = Level 1 Header
|
Close equals signs are optional (ignored if present). |
deplate | * Level 1 Header
|
deplate's default markup is historically based on EmacsWiki, which in turn is the base for Org-mode. |
Markdown[16] | # Level 1 Header
Level 1 Header
==============
Level 2 Header
--------------
|
Optionally you can "close" the #-style headers with any number of #'s. The closing hashes don’t need to match the number of hashes used to open the header. The #-style headers support up to 6 levels. The = and - style headers support only the two shown. |
MediaWiki | == Level 2 Header ==
|
= is available for level 1 header, but its use is discouraged in Wikipedia (reserved for page title). More = are possible, up to 6. |
Org-mode | Default:
* Level 1 Header
** Level 2 Header
*** Level 3 Header
|
Cleaner view using org-indent-view
* Level 1 Header
* Level 2 Header
* Level 3 Header
|
PmWiki | !! Level 2 Header
|
! is available for level 1 header, but its use is discouraged in PmWiki (used for the page title). More ! are possible, up to 6. |
POD | =head1 Level 1 heading
|
|
reStructuredText |
Chapter 1 Title
===============
Section 1.1 Title
-----------------
Subsection 1.1.1 Title
~~~~~~~~~~~~~~~~~~~~~~
Section 1.2 Title
-----------------
Chapter 2 Title
===============
|
Any of the following characters can be used as the "underline": = - ` : ' " ~ ^ _ * + # < > . The same character must be used for the same indentation level and may not be used for a new indentation level. |
Textile[17] | h1. Level 1 Header
|
Up to 6 levels |
Texy! | ### Level 1 Header
Level 1 Header
==============
Level 2 Header
--------------
|
You can optionally "close" the #-style headers with an equal number of #'s. The #-style headers support up to 6 levels. The underlined style headers support four levels (### *** === ----). Resulting absolute levels numbers are calculated dynamically. Optionally, less chars can denote higher header level. |
txt2tags | = Level 1 Header =
|
Up to 6 levels. Using + characters instead of = characters creates numbered headers (the default being unnumbered). |
Link syntax
Language | Syntax | Notes |
---|---|---|
AsciiDoc | http://www.example.com
|
|
BBCode | [url]http://www.example.com[/url]
|
Some BBCode implementations can auto-parse URLs as well and convert them to a elements. |
Creole | [[Internal Page]]
|
Free standing URL's are also detected. |
deplate | [[Internal Page]]
|
Free standing URL's are also detected. The format is close to Org-mode—see below. |
Markdown[16] | <http://www.example.com> or
|
Allows for an optional title attribute. |
MediaWiki | [[Internal page]]
|
Wikitext can auto-parse URLs as well and convert them to a elements. |
Org-mode | link format: [[link][description]] or [[link]]
|
Link abbreviations[18] can optionally be set so that, for example:
|
PmWiki | [[Internal page]]
|
Wikitext can auto-parse URLs without spaces in them as well and convert them to a elements. |
POD | L</Internal Link>
|
The core POD standard does not support external links with titles. |
reStructuredText | `Link text <http://www.example.com/>`_ or |
|
Textile[17] | "Link text (optional title attribute)":http://www.example.com
or |
Allows for an optional title attribute. |
Texy! | "Link text .(optional title)[opt. class or ID]{opt. style}":http://www.example.com
or |
Texy! modifiers allows for an optional title attribute, class, ID, and other HTML element attributes. Example: "Link .(title)[class#id]{color: blue;rel:nofollow}" |
txt2tags | [Link text www.example.com] |
txt2tags can auto-parse URLs as well and convert them to a elements. Also has support for targeting references within the same text, not just URLs. |
See also
References
- ↑ "Converters". WikiCreole. Retrieved 2013-10-08.
- ↑ peg-markdown is an implementation of markdown in C.
- ↑ Discount is also an implementation of markdown in C.
- ↑ "Python-Markdown". Github.com. Retrieved 2013-10-08.
- ↑ Pandoc, which is written in Haskell, parses Markdown (in two forms) and ReStructuredText, as well as HTML and LaTeX; it writes from any of these formats to HTML, RTF, LaTeX, ConTeXt, OpenDocument, EPUB and several other formats, including (via LaTeX) PDF.
- ↑ Bruce Williams <http://codefluency.com>, for Ruby Central <http://rubycentral.org>. "kramdown: Project Info". RubyForge. Retrieved 2013-10-08.
- ↑ "PHP Markdown Extra". Michelf.com. Retrieved 2013-10-08.
- ↑ Pandoc converts markup formats to Org-mode, etc.
- ↑ Docutils is an implementation of ReStructuredText in Python
- ↑ Sphinx is an implementation of ReStructuredText in Python and Docutils with a number of output format Builders
- ↑ Pandoc converts markup formats to reStructuredText, etc.
- ↑ Aurelio Jargas www.aurelio.net (2012-01-11). "txt2tags". txt2tags. Retrieved 2013-10-08.
- ↑ "txt2tags.class.php - online convertor". Txt2tags.org. Retrieved 2013-10-08.
- ↑ "Html2wiki txt2tags module". cpan.org. Retrieved 2014-01-30.
- ↑ "Txt2tags User Guide". Txt2tags.sourceforge.net. Retrieved 2013-10-08.
- ↑ 16.0 16.1 16.2 "Markdown Syntax". Daringfireball.net. Retrieved 2013-10-08.
- ↑ 17.0 17.1 17.2 Textile Syntax
- ↑ "The Org Manual: Link abbreviations". Orgmode.org. Retrieved 2013-10-08.
External links
Wikibooks has a book on the topic of: Curl |
- C2's list
- Curl Markup to replace HTML+CSS+JS
- Inhabitants of the authoring ecosphere
- List at otl website
- Humane Text Formats - A comparison (obsolete)
- Pandoc: a versatile inter-format converter
|