Home > Archives > 2007年11月20日

2007年11月20日

NP_SyntaxHighlighter と NP_HatenaLike と DB保存/復元と

はてなっぽくかけるという NP_HatenaLike というプラグインを入れてみたのだけど, <pre> タグ内に空行(空白のみを含む)があるとその行で <pre> タグの効果を切られてしまう.でも &nbsp; を書き込んでおけば切られることはない.ということで,ソースを <pre> で囲むときに空行があるときは &nbsp; を書くようにした.

もうひとつ.Nucleus のDBバックアップを行うと,行頭に # がある行はバックアップ用スクリプト中のコメントとして扱われてしまい,データが吹き飛ぶことになる.Cのソースとかの場合 #include とかで先頭に # が来るため結構きつい.そこで,# を &#35; という風に文字参照に置き換えて書くようにした.

これらの条件の下,NP_SyntaxHighlighter を有効にしてみた.その結果,&#35; が # にならずに &#35; のままハイライティングされるようになってしまった.当然 &nbsp; もそのまま残って & だけに色がつくとかいう状況になった.原因は NP_SyntaxHighlighter がこれらの参照をうまく扱えないことにある.

ということで,NP_SyntaxHighlighter を少々書き換え. highlight_code の先頭付近で参照の置換をしている部分に必要な置換を追加.さらに, <pre> タグ直後に入ってしまう改行を回避.

$string = str_replace ( array ( '&quot;', '&apos;' , '&lt;' , '&gt;', '&apos;', '&#35;', '&nbsp;', '&amp;' ), array ( '"', "'", '<', '>', '?', '#', ' ', '&' ), $string );
$string = preg_replace('/^[ ]*[\n\r]/','', $string);

んで,重要なのが NP_SyntaxHighlighter の前に NP_HatenaLike を置くこと.NP_SyntaxHighlighter が &nbsp; を空白にしてしまうので逆向きだと <pre> が切れる.

とりあえずこれで大きく変な部分が解消された.あとはバックスラッシュが消えてしまう部分をどうにかすれば…

Home > Archives > 2007年11月20日

Search
Feeds

Page Top