アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

toInlineCSSDoCoMoをバージョンアップしました

こんにちは、亀本です。

先日toInlineCSSDoCoMoとかいうライブラリを出したら、意外と好評というかみんなあれこれといじりまわしてくれて、また実際に実務の中でもこれを利用する機会があったりなどして、いろいろと改善点が上がってきました。

ほとんどがDOMDocumentに起因する問題で


・Shift_JISなどで機種依存文字(①など)があるとWarningを出して止まる
・実体参照の処理が所々おかしい
・loadHTML()を使うと、XML宣言とDoctype宣言の位置が逆転してしまう

などなど。
あとCSSファイルがないときにExceptionが飛ぶのは適用しにくいとか言う話ももらいました。

このあたりは結構きちんと扱えないと実用レベルになりにくいので、いろいろと方法を模索しながらちょびちょび変えたりしたので、バージョンアップしたやつをリリースしておきます。

ファイル:toInlineCSSDoCoMo-0.1.3.tar.gz
追記:バージョンアップした物をHTML_CSS_Mobileという名称に変更して、CodeReposにimportしました。
http://coderepos.org/share/browser/lang/php/HTML_CSS_Mobile

主な変更点としては


・内部での変換をUTF-8で行うように
・数値文字参照と実体参照を実行時にエスケープ
・XML宣言の逆転現象を回避するように修正
・エラー処理モードを追加し、strictモードのときのみ例外を投げて、それ以外の時は無視するように

という感じです。
モード設定は


toInlineCSSDoCoMo::getInstance()->setBaseDir('./')->setMode('strict')->apply($document);


として指定できます。特に指定していなければ、CSSファイルがない場合でも例外は発生しません。
モードはとりあえずくっつけただけなので、そのうち変えたいところですが。。。

今回の変更で、うちのテンプレート、Shift_JISで吐いちゃうんだけど!みたいな状況でも対応できるようになって、そこそこちゃんとHTMLを書いていれば、ほとんどハマりどころなく適用できるんじゃないかという気がします。


とりあえず、後やっていきたいことは


・内部をリファクタリングしてメソッドの細分化
・@importのサポート
・エラー処理とモードのちゃんとした実装
・CSSファイルを直接引数指定して適用できるように
・body部だけのHTMLに対しても同様の処理を可能に
・名前をもっとイケてるやつに

という感じです。
特に最後はリア充を言いふらしちゃう方のPHPerとして有名なid:sotarok大先生にイケてねーと言われたので必至です。
いや、確かにイケてないんだけど。

ぜひぜひ、活用してあげてください。