Markdown是一種輕量級標記式語言,創始人為約翰·格魯伯。它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成有效的XHTML(或者HTML)文件。[4]這種語言吸收了很多在電子郵件中已有的純文字標記的特性。
由於Markdown的輕量化、易讀易寫特性,並且對於圖片,圖表、數學式都有支援,目前許多網站都廣泛使用Markdown來撰寫說明文件或是用於討論區上發表訊息。如GitHub、Reddit、Discord、Diaspora、Stack Exchange、OpenStreetMap 、SourceForge、簡書等,甚至還能被用來撰寫電子書。
歷史
約翰·格魯伯在2004年創造了Markdown語言,在語法上有很大一部分是跟亞倫·斯沃茨共同合作的。這個語言的目的是希望大家使用「易於閱讀、易於撰寫的純文字格式,並選擇性地轉換成有效的XHTML(或是HTML)」。
其中最重要的設計是可讀性,也就是說這個語言應該要能直接在字面上閱讀,而不用記憶格式化指令標記(像是RTF與HTML)。
因此,它是現行電子郵件標記格式的慣例,雖然它也借鑒了幾個早期的標記語言,如:Setext、Textile (markup language)、reStructuredText。格魯伯也編寫了的Perl指令碼:Markdown.pl,用於把Markdown語法編寫的內容轉換成有效的、結構良好的XHTML或HTML內容,並將左尖括號<
和&
號替換成它們各自的字元實體參照。它可以用作單獨的指令碼,Blosxom和Movable 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]
2017年,GitHub發佈了基於CommonMark的GitHub Flavored Markdown(GFM)的正式規範。[22]除了表格、刪除線、自動連結和任務列表被GitHub規範作為擴充添加之外,它遵循CommonMark規範。 [23]GitHub還相應地更改了其站點上使用的解析器,這要求更改某些文件 - 例如,GFM現在要求建立標題的雜湊符號由空格字元分隔。
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使用電郵用字元「>」來引用。</p>
</blockquote>
<p>行間<abbr title="Hypertext Markup Language">HTML</abbr>亦受支援。</p>
|
段落以空白行分隔。 行末兩個空格 文字屬性:斜體、
粗體、 水平線: 列表:
編號列表:
連結。
行間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]。
參考文獻
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.