GeSHi - Generic Syntax Highlighter を使うようにした。対応言語が多いことと、シンタックスファイルを増やし易いことがいい感じ。ただし時々 well-formed じゃないエラーがでることがあるっぽい。
Category site.
ソースの色づけを復活 2
ソースの色づけを復活
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 がないからエラーになる。
taglibro の今後の予定
たぶんやらないけど、やりたいことを書いとく。
- まず libxml-ruby を捨てて REXML を使う。もともと libxml-ruby を使おうと思ったのは REXML が名前空間をまともに処理してないからだったんだけど、名前空間とかどうでもよくなった。んで、libxml-ruby は Pure Ruby じゃないのでいちいち環境間で面倒くさい。REXML は標準添付だからその辺は心配ない。できるだけ Pure Ruby じゃない外部ライブラリを使わないようにしたい。
- ちゃんとライブラリ化する。
- 公開できるようにする。