pre
だけ色付けするようにした。
前に Pure JavaScript で色つけていたことがあったけど、あからさまにブラクラだった。で、なんとなく思いついたのでもっかい別の方法で実装してみた。
なんていうか非常にローテクといいますか他力本願な方法でして、PEAR::Text_Hightlighter に Ajax で丸投げというソリューションでございますです。
<?php header("content-type: text/xml"); require_once 'Text/Highlighter.php'; require_once 'Text/Highlighter/Renderer/Html.php'; $options = array( 'numbers' => HL_NUMBERS_LI, 'tabsize' => 4, ); $renderer =& new Text_Highlighter_Renderer_HTML($options); $hl =& Text_Highlighter::factory($_GET["lang"]); $hl->setRenderer($renderer); $ret = $hl->highlight($_GET["source"]); echo '<div xmlns="http://www.w3.org/1999/xhtml">'; echo $ret; echo '</div>'; ?>
こんなスクリプト書いたら、あとは JS で pre
要素列挙して投げてあげる。レスポンスを importNode
して、pre
と置き換える。みたいな。
でもこんなクソ簡単なスクリプトなのに IE ではちゃんとうごかない。importNode がだめなのか、それとも responseXML から importNode ができないのか……謎。
あーHtml.php の &nbsp;
は全部 &#160;
に置き換えた。DTD がないからエラーになる。