« 1.0.5 の RSS がおかしい | Main | ソースはみつかった »
エントリ「1.0.5 の RSS がおかしい」で述べた RSS において EntryBody の日本語が実体参照になる原因を調べた。
net.sf.thingamablog.generator.HyperTextTag クラスの tidyHTML メソッドを通すと日本語が実体参照になってしまう。そのメソッドでは org.ccil.cowan.tagsoup.XMLWriter クラスと org.ccil.cowan.tagsoup.Parser クラスを使って、HTML を整形している。
この整形は必要なものだ。RSS で各エントリの内容を全ては書かない設定(デフォルトではそうなっている)にしているとエントリの内容が切られるのだが、その際に開始タグがあるのに終了タグがない状態になってしまう。これを補正するためのものだからだ。だから外すわけにはいかない。
また encode_html="1" を付けているときに実体参照 &#NNNN; の & が & になってしまうのは、上の tidyHTML で実体参照になった後に HTML 予約文字を実体参照にしているからである。しかしこの順序を逆にするわけにもいかない。なぜならば、HTML 予約文字を実体参照にしたあとではそれは既にただの文字であってタグ付けに意味がある文字ではないからである。tidyHTML で開始タグがあるのに終了タグがないということを認識できなくなる。
org.ccil.cowan.tagsoup のクラス群で実体参照にされてしまうのを防ぐことができれば全てはうまくいく。そうしようと org.ccil.cowan.tagsoup のドキュメントを探したのだが Google ても見つからないのだ。org.ccil.cowan.tagsoup のクラス群のドキュメントはどこにあるのだろう?
いっそのこと作者に投げちゃおうかな。