2013/06/05(水) [n年前の日記]
#3 [xyzzy] xyzzyからtidy.exeを呼ぼうとしてハマる
何度やっても、整形後のhtmlソースの頭に、xml関連の1行、<?xml ... ?> が追加されてしまう…。tidy.exe に与えるオプションをいくら弄ってもダメで。
もしかして tidy.exe がバグ持ち版なのかなあ、とすら思ってしまったけど。html-support.l が原因だった。御丁寧に、execute-tidy () の中で、毎回最後に必ず insert-xml-decl を呼んでた…。html-support.l 自身が、<?xml ... ?> の1行を追加する処理を、わざわざ独自に実装していたようで。
おそらくだけど、html4以前や xml 相手に作業してる時代は、このほうが都合が良かったのかなと想像。しかし、html5 になって、そのあたりの状況が変わってきた感があるわけで。
とりあえず、html-support.l を修正して、フラグで処理を分けるようにしてみたり。
tidy.exe 側にも、add-xml-decl という設定項目があって、<?xml ... ?> を追加する/しないを制御できるように見えるのだけど。それだけでは上手くいかない・日本語文字列が書かれている html に対しては失敗する、みたいな状況でもあったのかな…?
もしかして tidy.exe がバグ持ち版なのかなあ、とすら思ってしまったけど。html-support.l が原因だった。御丁寧に、execute-tidy () の中で、毎回最後に必ず insert-xml-decl を呼んでた…。html-support.l 自身が、<?xml ... ?> の1行を追加する処理を、わざわざ独自に実装していたようで。
おそらくだけど、html4以前や xml 相手に作業してる時代は、このほうが都合が良かったのかなと想像。しかし、html5 になって、そのあたりの状況が変わってきた感があるわけで。
とりあえず、html-support.l を修正して、フラグで処理を分けるようにしてみたり。
(defvar *tidy-insert-xml-decl* nil)を最初のあたりで追加しといて、
(if *tidy-insert-xml-decl* (insert-xml-decl))で、フラグが t なら呼ぶ、みたいな。
tidy.exe 側にも、add-xml-decl という設定項目があって、<?xml ... ?> を追加する/しないを制御できるように見えるのだけど。それだけでは上手くいかない・日本語文字列が書かれている html に対しては失敗する、みたいな状況でもあったのかな…?
[ ツッコむ ]
以上です。