jsminとCSSTidyのExtension作成
JavaScriptのファイルサイズ縮小化ツールjsminと、CSS圧縮ツールCSSTidyを、C++で実装してExtensionにしてみているところです。どちらもPHPスクリプト版が提供されてはいるのだけれど、Cのが早い!ということで。^^;
とりあえず、jsminの方は実装完了。
こんなかんじで使う
ob_start()のコールバックに使えるようにして、
<script type="text/javascript"> <?php ob_start("jsmin") ?> // ここにスクリプト書いたり、include "hoge.js" してみたり <?php ob_end_flush() ?> </script>
てな感じで書けば、挟まれた部分にjsminやCSSTidyがかけられます。
動的にコードが変化したり、修正の都度いちいち圧縮するのめんどくせ、という場合にはよいかも。
出力バッファリングのコールバック関数
前述の通り、jsminもCSSTidyもPHPコードが提供されているので、そのままでは使えないものの、修正すれば、コールバック関数を書くことができます。
string callback_function(string input [, int flag])
というインターフェースで、inputで元の文字列を受け取り、結果を戻り値として返却するだけです。(flagは、chunkを指定して複数回コールバック関数が呼ばれるときに、先頭ブロックで呼び出されたのか、最後のブロックで呼び出されたのか、それとも途中なのかという定数を返却します。ヘッダ・フッタに特別の処理をする必要がある場合とかかな。詳しくは、PHPマニュアルを参照ください)
jsmin
ソースコードは、 C, C#, Java, JavaScript, Perl, PHP, Python, Rubyと多岐にわたって提供されています。CのPHPモジュールとして組み込むわけなので、Cのコードを使おうと思ったのだけれど、コマンドラインツールとしての利用を想定しているため、putcで標準出力に吐いてたりして、ちょっと直すのが厳しい。ということで、C#のコードをC++にリライトしたクラスを作り、それを呼び出すようにして実装しました。