NP_Markdownで記事を表示すると、タブがスペースに変換されて表示されます。そうすると、記事中にプログラムのソースコードを書いた場合に、読み手がそれをコピペした時に、元のソースコードにあったタブが失われてしまうことになります。このパッチは、そのような問題を解決するのに役立つかもしれません。
対応するNP_Markdownのバージョンは、0.5.1。Markdownは、PHP Markdown Extra 1.2.3です。
このパッチを適用するには、先ず、「MarkdownEx2.php」を「markdown.php」と同じディレクトリに置いて下さい。それから、元の「NP_Markdown.php」と同じディレクトリに、「NP_Markdown.php.patch」を置いて、そのディレクトリをカレントディレクトリとして、下記のコマンドを実行して下さい。
patch -b < NP_Markdown.php.patch
Windowsで実行する場合には、元の「NP_Markdown.php」の改行コードをDOSスタイルに変換しておく必要があります。パッチのファイルの最後には改行コードが必要なので、コピペして最後が改行コードにならなかった時には手動でEnterキーを押す等して改行コードを入れて下さい。「patchコマンドの簡単な使い方」も参照して下さい。
オリジナルのNP_Markdownは記事を処理する際、Markdown関数を呼び出しますが、パッチを当てたNP_Markdownは、MarkdownEx2関数を呼び出します。MarkdownEx2関数は、MarkdownEx2.phpの中で定義されていて、MarkdownEx2.phpは、パッチを当てたNP_Markdownにより、markdown.phpの代わりに読み込まれます。
MarkdownEx2.phpでは、MarkdownEx2関数と共にMarkdownEx2_Parserクラスを定義しています。MarkdownEx2_Parserクラスは、markdown.phpで定義されているMarkdownExtra_Parserのサブクラスです。MarkdownEx2_Parserクラスは、スーパークラスのdetabメソッドをオーバーライドすることにより、タブをスペースに変換する機能を無効化しています。
何か問題が発生した時には、MarkdownEx2_Parserクラスにて、スーパークラスのメソッドをオーバーライドしたりしてなんとかすることにより、markdown.phpをいじらなくてもある程度対応できるかもしれません。