Markdown

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

Template:Short description Script error: No such module "For". Script error: No such module "Infobox".Template:Template otherScript error: No such module "Check for unknown parameters".

Markdown[1] is a lightweight markup language for creating formatted text using a plain-text editor. John Gruber created Markdown in 2004 as an easy-to-read markup language.[1] Markdown is widely used for blogging and instant messaging, and also used elsewhere in online forums, collaborative software, documentation pages, and readme files.

The initial description of Markdown[2] contained ambiguities and raised unanswered questions, causing implementations to both intentionally and accidentally diverge from the original version. This was addressed in 2014 when long-standing Markdown contributors released CommonMark, an unambiguous specification and test suite for Markdown.[3]

History

Markdown was inspired by pre-existing conventions for marking up plain text in email and usenet posts,[4] such as the earlier markup languages setext (Template:Circa), Textile (c. 2002), and reStructuredText (c. 2002).[1]

In 2002 Aaron Swartz created atx and referred to it as "the true structured text format". Gruber created the Markdown language in 2004 with Swartz as his "sounding board".[5] The goal of the language was to enable people "to write using an easy-to-read and easy-to-write plain text format, optionally convert it to structurally valid XHTML (or HTML)".[6]

Another key design goal was readability, that the language be readable as-is, without looking like it has been marked up with tags or formatting instructions,Template:R unlike text formatted with "heavier" markup languages, such as Rich Text Format (RTF), HTML, or even wikitext (each of which have obvious in-line tags and formatting instructions which can make the text more difficult for humans to read).

Gruber wrote a Perl script, Markdown.pl, which converts marked-up text input to valid, well-formed XHTML or HTML, encoding angle brackets (<, >) and ampersands (&), which would be misinterpreted as special characters in those languages. It can take the role of a standalone script, a plugin for Blosxom or a Movable Type, or of a text filter for BBEdit.[6]

Rise and divergence

As Markdown's popularity grew rapidly, many Markdown implementations appeared, driven mostly by the need for additional features such as tables, footnotes, definition lists,[note 1] and Markdown inside HTML blocks.

The behavior of some of these diverged from the reference implementation, as Markdown was only characterised by an informal specification[7] and a Perl implementation for conversion to HTML.

At the same time, a number of ambiguities in the informal specification had attracted attention.[8] These issues spurred the creation of tools such as Babelmark[9][10] to compare the output of various implementations,[11] and an effort by some developers of Markdown parsers for standardisation. However, Gruber has argued that complete standardization would be a mistake: "Different sites (and people) have different needs. No one syntax would make all happy."[12]

Gruber avoided using curly braces in Markdown to unofficially reserve them for implementation-specific extensions.[13]

Standardization

Template:Primary sources section Script error: No such module "Infobox".Template:Template otherScript error: No such module "Check for unknown parameters".

From 2012, a group of people, including Jeff Atwood and John MacFarlane, launched what Atwood characterised as a standardisation effort.[3]

A community website now aims to "document various tools and resources available to document authors and developers, as well as implementors of the various Markdown implementations".[14]

In September 2014, Gruber objected to the usage of "Markdown" in the name of this effort and it was rebranded as CommonMark.[4][15][16] CommonMark.org published several versions of a specification, reference implementation, test suite, and "[plans] to announce a finalized 1.0 spec and test suite in 2019".[17]

No 1.0 spec has since been released, as major issues still remain unsolved.[18]

Nonetheless, the following websites and projects have adopted CommonMark: Discourse, GitHub, GitLab, Reddit, Qt, Stack Exchange (Stack Overflow), and Swift.

In March 2016, two relevant informational Internet RFCs were published:

Variants

Websites like Bitbucket, Diaspora, Discord,[20] GitHub,[21] OpenStreetMap, Reddit,[22] SourceForge[23] and Stack Exchange[24] use variants of Markdown to make discussions between users easier.

Depending on implementation, basic inline HTML tags may be supported.[25]

Italic text may be implemented by _underscores_ or *single-asterisks*.[26]

GitHub Flavored Markdown

GitHub had been using its own variant of Markdown since as early as 2009,[27] which added support for additional formatting such as tables and nesting block content inside list elements, as well as GitHub-specific features such as auto-linking references to commits, issues, usernames, etc.

In 2017, GitHub released a formal specification of its GitHub Flavored Markdown (GFM) that is based on CommonMark.[21] It is a strict superset of CommonMark, following its specification exactly except for tables, strikethrough, autolinks and task lists, which GFM adds as extensions.[28]

Accordingly, GitHub also changed the parser used on their sites, which required that some documents be changed. For instance, GFM now requires that the hash symbol that creates a heading be separated from the heading text by a space character.

Markdown Extra

Markdown Extra is a lightweight markup language based on Markdown implemented in PHP (originally), Python and Ruby.[29] It adds the following features that are not available with regular Markdown:

  • Markdown markup inside HTML blocks
  • Elements with id/class attribute
  • "Fenced code blocks" that span multiple lines of code
  • Tables[30]
  • Definition lists
  • Footnotes
  • Abbreviations

Markdown Extra is supported in some content management systems such as Drupal,[31] Grav (CMS), Textpattern CMS[32] and TYPO3.[33]

Examples

Text using Markdown syntax Corresponding HTML produced by a Markdown processor Text viewed in a browser
Heading
=======

Sub-heading
-----------

# Alternative heading

## Alternative sub-heading

Paragraphs are separated 
by a blank line.

Two spaces at the end of a line  
produce a line break.
<h1>Heading</h1>

<h2>Sub-heading</h2>

<h1>Alternative heading</h1>

<h2>Alternative sub-heading</h2>

<p>Paragraphs are separated
by a blank line.</p>

<p>Two spaces at the end of a line<br />
produce a line break.</p>
Heading
Sub-heading
Alternative heading
Alternative sub-heading

Paragraphs are separated by a blank line.

Two spaces at the end of a line
produce a line break.

Text attributes _italic_, **bold**, `monospace`.

Horizontal rule:

---
<p>Text attributes <em>italic</em>, <strong>bold</strong>, <code>monospace</code>.</p>

<p>Horizontal rule:</p>

<hr />
Text attributes italic, bold, monospace.

Horizontal rule:


Bullet lists nested within numbered list:

  1. fruits
     * apple
     * banana
  2. vegetables
     - carrot
     - broccoli
<p>Bullet lists nested within numbered list:</p>

<ol>
  <li>fruits <ul>
      <li>apple</li>
      <li>banana</li>
  </ul></li>
  <li>vegetables <ul>
      <li>carrot</li>
      <li>broccoli</li>
  </ul></li>
</ol>
Bullet lists nested within numbered list:
  1. fruits
    • apple
    • banana
  2. vegetables
    • carrot
    • broccoli
A [link](http://example.com).

![Image](Icon-pictures.png "icon")

> Markdown uses email-style
characters for blockquoting.
>
> Multiple paragraphs need to be prepended individually.

Most inline <abbr title="Hypertext Markup Language">HTML</abbr> tags are supported.
<p>A <a href="http://example.com">link</a>.</p>

<p><img alt="Image" title="icon" src="Icon-pictures.png" /></p>

<blockquote>
<p>Markdown uses email-style characters for blockquoting.</p>
<p>Multiple paragraphs need to be prepended individually.</p>
</blockquote>

<p>Most inline <abbr title="Hypertext Markup Language">HTML</abbr> tags are supported.</p>
A link.

Image

Markdown uses email-style characters for blockquoting.

Multiple paragraphs need to be prepended individually.

Most inline HTML tags are supported.

Implementations

Implementations of Markdown are available for over a dozen programming languages; in addition, many applications, platforms and frameworks support Markdown.[34] For example, Markdown plugins exist for every major blogging platform.[4]

While Markdown is a minimal markup language and is read and edited with a normal text editor, there are specially designed editors that preview the files with styles, which are available for all major platforms. Many general-purpose text and code editors have syntax highlighting plugins for Markdown built into them or available as optional download. Editors may feature a side-by-side preview window or render the code directly in a WYSIWYG fashion.

See also

Explanatory notes

Template:Reflist

References

Template:Reflist

External links

Template:Document markup languages Template:Authority control

  1. a b c Cite error: Invalid <ref> tag; no text was provided for refs named philosophy
  2. Script error: No such module "citation/CS1".
  3. a b Script error: No such module "citation/CS1".
  4. a b c Cite error: Invalid <ref> tag; no text was provided for refs named ArsTechnica2014
  5. Template:Cite tweet
  6. a b Markdown 1.0.1 readme source code Script error: No such module "citation/CS1".
  7. Script error: No such module "citation/CS1".
  8. Script error: No such module "citation/CS1".
  9. Script error: No such module "citation/CS1".
  10. Script error: No such module "citation/CS1".
  11. Script error: No such module "citation/CS1".
  12. Template:Cite tweet
  13. Script error: No such module "citation/CS1".
  14. Script error: No such module "citation/CS1".
  15. Script error: No such module "citation/CS1".
  16. Script error: No such module "citation/CS1".
  17. Script error: No such module "citation/CS1".
  18. Script error: No such module "citation/CS1".
  19. Script error: No such module "citation/CS1".
  20. Script error: No such module "citation/CS1".
  21. a b Script error: No such module "citation/CS1".
  22. Script error: No such module "citation/CS1".
  23. Script error: No such module "citation/CS1".
  24. Script error: No such module "citation/CS1".
  25. Script error: No such module "citation/CS1".
  26. Script error: No such module "citation/CS1".
  27. Script error: No such module "citation/CS1".
  28. Script error: No such module "citation/CS1".
  29. Script error: No such module "citation/CS1".
  30. Script error: No such module "citation/CS1".
  31. Script error: No such module "citation/CS1".
  32. Script error: No such module "citation/CS1".
  33. Script error: No such module "citation/CS1".
  34. Script error: No such module "citation/CS1".


Cite error: <ref> tags exist for a group named "note", but no corresponding <references group="note"/> tag was found