Markdown

轻量级标记语言,常用于书写自述(README)文件

Markdown是一種輕量級標記語言,創始人為約翰·格魯伯。它允許人們使用易讀易寫的純文本格式編寫文檔,然後轉換成有效的XHTML(或者HTML)文檔。[4]這種語言吸收了很多在電子郵件中已有的純文本標記的特性。

Markdown
網路媒體型式text/markdown[1]
統一類型標識net.daringfireball.markdown
開發者約翰·格魯伯(與亞倫·斯沃茨在語法上合作)
首次發布2004年3月19日​(20年前)​(2004-03-19[2][3]
最新版本
1.0.1
2004年12月17日​(19年前)​(2004-12-17[4]
格式類型標記語言
延伸為MultiMarkdown, Markdown Extra, CommonMark[5]
免費格式?[6]
網站daringfireball.net/projects/markdown

由於Markdown的輕量化、易讀易寫特性,並且對於圖片,圖表、數學式都有支援,目前許多網站都廣泛使用Markdown來撰寫說明文件或是用於論壇上發表訊息。如GitHubRedditDiscordDiasporaStack ExchangeOpenStreetMapSourceForge簡書等,甚至還能被用來撰寫電子書

歷史

約翰·格魯伯在2004年創造了Markdown語言,在語法上有很大一部分是跟亞倫·斯沃茨共同合作的。這個語言的目的是希望大家使用「易於閱讀、易於撰寫的純文字格式,並選擇性地轉換成有效的XHTML(或是HTML)」。

其中最重要的設計是可讀性,也就是說這個語言應該要能直接在字面上閱讀,而不用記憶格式化指令標記(像是RTF與HTML)。

因此,它是現行電子郵件標記格式的慣例,雖然它也借鑒了幾個早期的標記語言,如:Setext英語SetextTextile (markup language)英語Textile (markup language)reStructuredText。格魯伯也編寫了的Perl腳本:Markdown.pl,用於把Markdown語法編寫的內容轉換成有效的、結構良好的XHTML或HTML內容,並將左尖括號<&號替換成它們各自的字符實體引用。它可以用作單獨的腳本,BlosxomMovable Type的插件又或者BBEdit的文本過濾器[4]。Markdown也已經被其他人用Perl和別的編程語言重新實現,其中一個Perl模塊放在了CPAN(Text::Markdown)上。它基於一個BSD風格的許可證分發並可以作為幾個內容管理系統的插件[8][9]

標準化

Markdown已經成為典型的轉換為HTML的非正式規範[10]參考實現。隨着時間的推移,出現了許多Markdown實現。人們開發這些主要是由於在基本語法之上需要額外的功能 - 例如表格,腳註,定義列表(技術上的HTML描述列表)和HTML塊內的Markdown。其中一些行為偏離了最開始的參考實現。與此同時,非正式規範中的一些含糊不清引起了人們的注意[11]。這些問題促使Markdown解析器的一些開發人員努力實現標準化。

Babelmark[12][13]是一個可用於比較各種實現的輸出的工具,以促進關於如何以及是否應該闡明Markdown規範的某些模糊方面的討論。[14]格魯伯認為不應完全標準化:「不同的網站(和人們)有不同的需求。沒有一種語法可以讓所有人滿意。」[15]

2016年3月發布了RFC 7763和RFC 7764。RFC 7763 從原始變體引入了MIME類型 text/markdown。RFC 7764討論並註冊了MultiMarkdown、GitHub Flavored Markdown (GFM)、Pandoc、CommonMark及Markdown等變體。[16]

從2012年開始,包括Jeff Atwood和John MacFarlane在內的一群人啟動了標準化工作。[17]一個社區網站現在旨在記錄可用於文檔作者和開發人員的各種工具和資源,以及各種Markdown實現的實現者。[18] 2014年9月,格魯伯反對在這一工作中繼續使用「Markdown」這個名字,其被更名為CommonMark。[19][20]CommonMark.org發布了規範、參考實現和測試套件的幾個版本,並計劃在2018年宣布最終的1.0規範和測試套件。[21]

GFM

2017年,GitHub發布了基於CommonMark的GitHub Flavored Markdown(GFM)的正式規範。[22]除了表格、刪除線、自動鏈接和任務列表被GitHub規範作為擴展添加之外,它遵循CommonMark規範。 [23]GitHub還相應地更改了其站點上使用的解析器,這要求更改某些文檔 - 例如,GFM現在要求創建標題的哈希符號由空格字符分隔。

Markdown Extra

Markdown Extra是一種輕量級標記語言,基於在PHP(最初)、Python和Ruby[24]中實現的Markdown。它添加了普通Markdown語法不具備的功能。內容管理系統支持Markdown Extra,例如Drupal[25],TYPO3[26]和MediaWiki[27]

它為Markdown添加了以下功能:

  • HTML塊內的Markdown標記
  • 具有id / class屬性的元素
  • 圍欄代碼塊
  • 表格[28]
  • 定義清單
  • 腳註
  • 縮寫

示例

Markdown語法 由Markdown處理器產生的HTML 瀏覽器顯示效果
# 一级標題

## 二级標題

段落以空白行分隔。

行末兩個空格  産生斷行。

文本屬性:*斜體*、
**粗體**`等寬字型Monospace`。

水平線:

---

列表:

  * 張三
  * 李四
  * 王二

編號列表:

  1. 不論
  2. 三七
  3. 二十一

[連結](http://example.com)

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

> Markdown使用電郵用字元「>」來引用。

行間<abbr title="Hypertext Markup Language">HTML</abbr>亦受支援。
<h1>一级標題</h1>

<h2>二级標題</h2>

<p>段落以空白行分隔。</p>

<p>行末兩個空格<br />
產生斷行。</p>

<p>文本屬性:<em>斜體</em><strong>粗體</strong><code>等寬字型Monospace</code></p>

<p>水平線:</p>

<hr />

<p>列表:</p>

<ul>
<li>張三</li>
<li>李四</li>
<li>王二</li>
</ul>

<p>編號列表:</p>

<ol>
<li>不論</li>
<li>三七</li>
<li>二十一</li>
</ol>

<p><a href="http://example.com">連結</a></p>

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

<blockquote>
<p>Markdown使用電郵用字元「&gt;」來引用。</p>
</blockquote>

<p>行間<abbr title="Hypertext Markup Language">HTML</abbr>亦受支援。</p>
一級標題
二級標題

段落以空白行分隔。

行末兩個空格
產生斷行。

文本屬性:斜體粗體等寬字型Monospace

水平線:


列表:

  • 張三
  • 李四
  • 王二

編號列表:

  1. 不論
  2. 三七
  3. 二十一

連結

 

Markdown使用電郵用字元「>」來引用。

行間HTML亦受支持。

實現

Markdown的實現可用於十幾種編程語言;此外,許多平台和框架都支持Markdown。[29] 例如,Markdown插件適用於每個主要的博客平台。[30]

雖然Markdown是一種最小標記語言,並且使用普通文本編輯器進行讀取和編輯,但是有專門設計的編輯器可以預覽具有樣式的文件,這些樣式可用於所有主要平台。許多通用文本和代碼編輯器都具有內置於其中的Markdown的語法高亮插件,或者可用作可選下載。編輯器可以具有並排預覽窗口或直接以所見即所得的方式呈現代碼。

  • 源代碼文檔生成器Doxygen支持Markdown的額外功能。[31]
  • RStudio是一個用於R的IDE,為稱為sundown的Markdown變體提供了C++包裝函數。[32]
  • GitHub Flavored Markdown(GFM)忽略單詞中的下劃線,並添加語法高亮顯示、任務列表[33]和表格[34]
  • Discount – 一個C語言實現。[35][36]
  • MarkAPL是一個用Dyalog APL編寫的轉換器。它支持隔離塊,智能排版,鏈接引用和特殊屬性,並可以生成目錄。[37]
  • PHP Markdown - 一個庫包,包含PHP Markdown解析器及其有額外功能的兄弟PHP Markdown Extra。[38]
  • Markdig - 遵循CommonMark規範的.NET庫,包括一組擴展和用戶創建自己擴展的能力。
  • WP Githuber MD - 一個WordPress 插件,實現了所見即所得的 Markdown 編輯器及增強語法。[39]
  • Visual Studio Code 對 Markdown 的支援度極高[40]

參考文獻

  1. ^ 1.0 1.1 RFC 7763頁面存檔備份,存於網際網路檔案館) - The text/markdown Media Type
  2. ^ Swartz, Aaron. Markdown. Aaron Swartz: The Weblog. 2004-03-19 [2016-02-04]. (原始內容存檔於2017-12-24). 
  3. ^ Gruber, John. Daring Fireball: Markdown. Daring Fireball. [2014-04-25]. (原始內容存檔於2004-04-02). 
  4. ^ 4.0 4.1 4.2 Markdown 1.0.1 readme source code Daring Fireball - Markdown. 2004-12-17 [2012-03-19]. (原始內容存檔於2004-04-02). 
  5. ^ RFC7764頁面存檔備份,存於網際網路檔案館) – Guidance on Markdown: Design Philosophies, Stability Strategies, and Select Registrations
  6. ^ Markdown: License. Daring Fireball. [2014-04-25]. (原始內容存檔於2020-02-18). 
  7. ^ Daring Fireball statement頁面存檔備份,存於網際網路檔案館) by creator John Gruber
  8. ^ MarsEdit 2.3 ties the knot with Tumblr support - Ars Technica. [2009-08-11]. (原始內容存檔於2011-08-21). 
  9. ^ Review: Practical Django Projects - Ars Technica. [2009-08-11]. (原始內容存檔於2011-06-07). 
  10. ^ 存档副本. [2019-02-18]. (原始內容存檔於2019-09-09). 
  11. ^ GitHub Flavored Markdown Spec. github.github.com. [2017-10-01]. (原始內容存檔於2020-02-03). 
  12. ^ Babelmark 2 - Compare markdown implementations. Johnmacfarlane.net. [2014-04-25]. (原始內容存檔於2017-07-18). 
  13. ^ Babelmark 3 - Compare Markdown Implementations. github.io. [2017-12-10]. (原始內容存檔於2020-11-12). 
  14. ^ Babelmark 2 - FAQ. Johnmacfarlane.net. [2014-04-25]. (原始內容存檔於2017-07-28). 
  15. ^ Gruber, John [@gruber]. @tobie @espadrine @comex @wycats Because different sites (and people) have different needs. No one syntax would make all happy. (推文). 4 September 2014 –透過Twitter. 
  16. ^ Markdown Variants. IANA. 2016-03-28 [2016-07-06]. (原始內容存檔於2020-10-27). 
  17. ^ Atwood, Jeff. The Future of Markdown. CodingHorror.com. 2012-10-25 [2014-04-25]. (原始內容存檔於2014-02-11). 
  18. ^ Markdown Community Page. GitHub. [2014-04-25]. (原始內容存檔於2020-10-26). 
  19. ^ Standard Markdown is now Common Markdown. Jeff Atwood. [2014-10-07]. (原始內容存檔於2014-10-09). 
  20. ^ Standard Markdown Becomes Common Markdown then CommonMark. InfoQ. [2014-10-07]. (原始內容存檔於2020-09-30). 
  21. ^ CommonMark. [20 Jun 2018]. (原始內容存檔於2016-04-12) (英語). The current version of the CommonMark spec is complete, and quite robust after a year of public feedback … but not quite final. With your help, we plan to announce a finalized 1.0 spec and test suite in 2018. 
  22. ^ GitHub Flavored Markdown Spec. [2017-10-01]. (原始內容存檔於2020-02-03). 
  23. ^ A formal spec for GitHub Flavored Markdown. GitHub Engineering. [16 Mar 2017]. (原始內容存檔於2020-02-03). 
  24. ^ Fortin, Michel. PHP Markdown Extra. Michel Fortin website. 2018 [2018-12-26]. (原始內容存檔於2021-01-17). 
  25. ^ Markdown editor for BUEditor. 4 December 2008 [2019-02-18]. (原始內容存檔於2020-09-17). 
  26. ^ Markdown for TYPO3 (markdown_content). extensions.typo3.org. [2019-02-18]. (原始內容存檔於2021-02-01). 
  27. ^ Extension:MarkdownExtraParser - MediaWiki. www.mediawiki.org. [2019-02-18]. (原始內容存檔於2020-10-29). 
  28. ^ PHP Markdown Extra. Michel Fortin. [2019-02-18]. (原始內容存檔於2021-01-17). 
  29. ^ W3C Community Page of Markdown Implementations. W3C Markdown Wiki. [24 March 2016]. (原始內容存檔於2020-09-17). 
  30. ^ Markdown THrowdown – What happens when FOSS software gets corporate backing. Ars Technica. 2014-10-05 [2019-02-18]. (原始內容存檔於2020-11-14). 
  31. ^ Doxygen Manual: Markdown support. Stack.nl. 2014-04-21 [2014-04-25]. (原始內容存檔於2017-07-18). 
  32. ^ jjallaire; e.a. Markdown.cpp. GitHub project RStudio. 2015-06-30 [2016-07-07]. (原始內容存檔於2017-07-26). 
  33. ^ Writing on GitHub. help.github.com. GitHub, Inc. [9 July 2014]. (原始內容存檔於2018-06-04). 
  34. ^ GitHub Flavored Markdown. github.com. [29 March 2013]. (原始內容存檔於2019-02-05). 
  35. ^ Discount - a C implementation of the Markdown markup language. [2014-11-01]. (原始內容存檔於2019-10-18). 
  36. ^ David Parsons. DISCOUNT. GitHub. 2016-05-28 [2016-07-07]. (原始內容存檔於2021-01-16). 位於Open Hubdiscount 
  37. ^ Markdown converter written in Dyalog APL.. [2019-02-18]. (原始內容存檔於2020-12-05). 
  38. ^ PHP Markdown. [2016-03-01]. (原始內容存檔於2021-01-20). 
  39. ^ Markdown Editor. [2018-12-15]. (原始內容存檔於2020-12-13). 
  40. ^ Markdown and Visual Studio Code. [2019-09-10]. (原始內容存檔於2019-02-08). 

外部連結