NP_GeSHi2でソースコードを表示すると、何故か空行にスペースが1つ入って表示されます。また、空行に元々空白類があった場合、その空白類が1つのスペースに置き換わって表示されます。このような動作を無効にするパッチを作ってみました。このパッチは<pre>タグを使った場合のみに効果があります。
現在のパッチは、空行に元々空白類があった場合、それを削除せずにスルーさせます。削除した方がよい場合には、以前のものを使うことができます。
対応するNP_GeSHi2のバージョンは、0.1。GeSHiは、GeSHi 1.0.8.2です。
このパッチを適用するには、先ず、元の「NP_GeSHi2.php」と同じディレクトリに、「NP_GeSHi2.php.patch」を置いて、そのディレクトリをカレントディレクトリとして、下記のコマンドを実行して下さい。
patch -b < NP_GeSHi2.php.patch
Windowsで実行した場合には、そのままでパッチが当たると思いますが、UNIX系で実行する場合には、元の「NP_GeSHi2.php」の改行コードをUNIXスタイルに変換しておく必要があります。パッチのファイルの最後には改行コードが必要なので、コピペして最後が改行コードにならなかった時には、手動で改行コードを入れて下さい。「patchコマンドの簡単な使い方」も参照して下さい。
次に、元の「geshi.php」と同じディレクトリに、「geshi.php.patch」を置いて、そのディレクトリをカレントディレクトリとして、下記のコマンドを実行して下さい。
patch -b < geshi.php.patch
Windowsで実行する場合には、元の「geshi.php」の改行コードをDOSスタイルに変換しておく必要があります。パッチのファイルの最後には改行コードが必要なので、コピペして最後が改行コードにならなかった時には、手動で改行コードを入れて下さい。
オリジナルのNP_GeSHi2は、ソースコードを囲んだ<pre>タグを出力時には削除してた気がするのですが、このパッチを当てたNP_GeSHi2は<pre>タグを削除せずに出力します。(<code>タグを使った場合の動作はオリジナルと変わりません。)オプションの「Header for pre」は、<pre>の直前、「Footer for pre」は、</pre>の直後に挿入されます。
<pre>タグが出力されるということは、長い行のソースコードを表示されると、ページが横に長くなってしまうのですが、その問題は、「[ CSS ] pre でも改行を生かしたまま折り返す | Bowz::Notebook:」というようのを使って解決できると思います。
NP_MarkdownEditorを使っている場合には、admin-mde.cssに、たとえば、下記のようなのを書き加えます。
div#mde-prevmore pre, div#mde-prevbody pre{
white-space: -moz-pre-wrap; /* Mozilla */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* CSS3 */
word-wrap: break-word; /* IE 5.5+ */
}
ちなみに、「geshi.php.patch」を適用したgeshiは、MediaWikiのSyntaxHighlight_GeSHiにも流用できるみたいです。あけび猫が「SyntaxHighlight_GeSHi-MW1.14-r45462」で試したところでは、geshiを入れ替えるだけで効果があり、SyntaxHighlight_GeSHiにはパッチは不要みたいでした。やってみて、なかなか効果が出ない場合には、FileCacheを削除したり、memcachedを再起動させたりするとよいと思います。