Markdown の方言

2014年9月21日 19:55

まず、Markdown について補足しておく。文書を記述するための軽量マークアップ言語のひとつであり、プレーンテキストに簡単なコマンド文字を加えることでひととおりの装飾が行なえるのが特徴。また、HTML テキストへの変換も容易である。まぁ詳しく知りたい人は Wikipedia の当該項目をご覧ください。

今回自作した CMS ……というか、今ご覧いただいているこのサイトがまさにそれなのだが、WordPress など既存の CMS を活用しているのではなく、オリジナルのアプリとして作成しているため、その運用方針はある程度ラフというか、汎用性をほとんど考えていない。よって、記事も外部のエディタで下書きした Markdown テキストをそのまま投稿し、アプリ側で HTML に変換して表示している。

プラットフォームが Python(GAE)なので、Markdown から HTML への変換には python.markdown2 をチョイスした。具体的な変換方法は以下のとおり。

import markdown2

def mark2html(value):
  return markdown2.markdown(value)

さて、ツイートにあるように、python.markdown2 が解釈する Markdown 記法はごくごく基本的なものでしかない。いや、この書き方は語弊があるか。Markdown には作者であるジョン・グルーバーが定めたシンタックスがあるが、GitHub などで利用されている Markdown は、それに独自シンタックスを追加したものだったりする。それらは俗に「方言」などと呼ばれるが、python.markdown2 も extension という形でそれら方言に対応してくれている。

Many Markdown processors include support for additional optional syntax (often called "extensions") and markdown2 is no exception.

今回は GitHub Flavored Markdown でメジャーなシンタックス「fenced code blocks」を使いたかったわけだが、python.markdown2 では fenced-code-blocks という Extras で対応してくれていた。よって、前述のコードは以下のようになる(そして、このコード部分の表現こそが fenced code blocks である)。

import markdown2

def mark2html(value):
  return markdown2.markdown(value, extras=['fenced-code-blocks'])

第2引数の extras は配列であり、複数の Extras が指定できる。とりあえずは fenced code blocks だけ導入したが、他に必要なものがあれば都度追加してこうと思う。