CommonMark

CommonMarkはマークダウンの構文の合理化された版であり、仕様とBSDの使用許諾が付されているCとJavaScriptでの参照実装を備えています。

今すぐ試してみよう!

詳しくは https://commonmark.org をご参照ください。

本リポジトリには仕様そのものとともに、仕様に対してテストを実行したり、仕様のHTML版およびPDF版を作ったりするためのツールが含まれています。

参照実装は別のリポジトリにあります。

多種多様な言語によるサードパーティのライブラリの一覧がこちらにあります。

仕様書に沿っているかテストする

仕様には500を越す埋め込まれた例が含まれており適合性試験として供されます。 実行プログラム$PROGを使ってテストを実行するには以下とします。

python3 test/spec_tests.py --program $PROG

実際にテストを実行することなく仕様から素のテストデータを抽出したければ、次のようにできます。

python3 test/spec_tests.py --dump-tests

こうするとすべてのテストをJSON形式で得られます。

JavaScriptで開発している方はcommonmark-spec npmパッケージを使うとより便利に思われるかもしれません。 このリポジトリから公開されています。 次の形式のJSONオブジェクトの配列testsをエクスポートするものです。

{
  "markdown": "Foo\nBar\n---\n",
  "html": "<h2>Foo\nBar</h2>\n",
  "section": "Setext headings",
  "number": 65
}

仕様について

仕様のソースはspec.txtです。 これは基本的にはマークダウンファイルであって、略記の形式で書かれたコードの例があります。

```````````````````````````````` example
Markdown source
.
expected HTML output
````````````````````````````````

仕様のHTML版を作るには、make spec.htmlとしてください。 PDF版を作るには、make spec.pdfとしてください。 どちらの版のためにも、lua rockのlcmarkがインストールされていなければなりません。 つまりluaとlua rocksをインストールした後に、luarocks install lcmarkとします。 PDFについてはxelatexもインストールされていなければなりません。

仕様は人間の書き手の視点から書かれており、コンピューターの読み手ではありません。 アルゴリズム――すなわちコンピュータプログラムの和訳――ではなく何をもってブロック引用や、コードブロックや、マークダウン文書を作り上げることのできるその他の構造的な各要素とするかの宣言的な説明です。

John Gruber氏の正典的な構文の説明には未決定な多くの側面が残されているため、精確な仕様を書く上で数多の決定を下すことが要求されており、その多くはどこかしら独断的です。 そうした決定を下す中で、既存の慣習と簡潔性、可読性、表現力、一貫性への配慮を希求してきました。 多くの互換性のない既存のマークダウンの実装による「普通」の文書が、可能な限りに、それらの執筆者が意図した通りに呈示されることを確かなものにしようとしてきました。 そして様々な要素が協調的に働くような規則を作ろうとしてきました。 異なる決定を下すことができたであろうところでは(例えば、リストの字下げを統制する規則)、そこでの選択についての原則を説明しました。 二三の場合においては、正典的な構文の説明からわずかに外しましたが、その説明で述べられているマークダウンの目標を見越した上でのものです。

ほとんどの部分で、Gruber氏の正典的な構文の説明で記述されている基礎的な要素に留め、脚註や定義リストのような拡張は控えました。 そうしたものを検討する前に中枢をしっかりしたものにすることが重要なのです。 しかしながら、ここでは改行と有塀コードブロックのための可視化された構文を加えました。

元来のマークダウンとの違い

本仕様で正典的な構文の説明と矛盾することを述べているところがごく数点あります。

貢献

CommonMarkを議論するための公開討論の場があります。 質問や自由な議論になる可能性の高いものについてはgithubのイシューの代わりにこちらをお使いください。 githubのイシュートラッカーは単純で、明快で、着手できるイシューでのみ使ってください。

執筆者

この仕様はJohn MacFarlene氏によって書かれましたが、それは以下によるものです。

最初の告知をして以来、多くの方々が発想を貢献してくださいました。 とりわけKārlis Gaņģis氏は強調、強い強調、リンク、画像の規則を練る上でご尽力いただきました。