Markdown Extraの改造

タグ: Markdown   PHP  

Markdown記法をHTMLへ変換してくれるPHPライブラリーは、記法名と同じ名前のMarkdownライブラリーがあります。Markdownの記法を拡張したMarkdown Extraもあります。

当サイトでは、Laravelを利用しており、Markdownで書かれたドキュメントを表示するために予め入っていた、Markdownをそのまま流用しました。調べてみたらExtraの方でした。

Extraでは、特にテーブルとコードブロックの指定が便利になっています。詳しくはMarkdown Extraをご覧ください。

コードブロックの場合、オリジナルなMarkdownでは、先頭に4つ以上のスペースかタブを入れることになっています。これをブラウザのテキストエリアで指定するのは面倒です。そこでExtraでは、~を3つ以上続けることでコードブロックを指定できるようになっています。

~~~~
<?php
    これでコードブロックになります
~~~~

多分意図的なものだと思われますが、先頭に空白をつける方法と~を使用する方法では、生成されるコードが異なります。空白をつける方法では<pre class="prettyprint linenums></pre>に変換され、Googleのpretty printを使用するコードが生成されます。

一方の、~を4つつなげた行で挟む方法では、<pre><code></code></pre>に変換されます。意味合い的にはこちらのほうが正しいのですが、pretty printの標準のcssでは、コードハイライトされません。

もし、pretty printとMarkdown Extraの拡張コード記法を使用したい場合、Markdownライブラリーを改造し、クラスを付けましょう。Markdownライブラリーが行なっているのは原則置換ですから、意外とコードは簡単です。

  1. markdown.phpをエディターで開きます。
  2. <code>で検索しましょう。
  3. 2580行あたりに、$codeblock = "<pre><code>$codeblock</code></pre>";というコードがあります。見たまま、この行で変換が行われています。
  4. $codeblock = "<pre class=\"prettyprint linenums\">$codeblock</pre>";と書き換えます。(もしくはお好きなように変更しましょう。)

生成結果を見て、気に入らないところや、クラスを付け加えたい箇所は、このように修正しましょう。残念ながら、設定ファイルでお手軽に変更できるようにはなっていませんが、単純な置き換えのコードですから、生成場所を見つけるのも、改造もやりやすいです。

Markdownは直接タグを書くことも許しています。ほんの数箇所であれば、直接タグを書けば済みます。しかし、読みやすさが損なわれますし、毎回タグを書くのはおしゃれでないですからね。