ヨーキョクデイ

100% pure impurities, which may imply some value. (j は虚数単位)

nsIScriptableUnescapeHTML の unescape の罠

嫌な挙動が見受けられるので bbs2chreader のコードを久々に見てみた。そして発覚した。

var unescapeHTML = Components.classes["@mozilla.org/feed-unescapehtml;1"]
                    .getService(Components.interfaces.nsIScriptableUnescapeHTML);

unescapeHTML.unescape("unk
o!");           // "unk\no!"
unescapeHTML.unescape("unk

o!");      // "unk\no!"
unescapeHTML.unescape("unk

o!");      // "unk\no!"
unescapeHTML.unescape("unk

o!");      // "unk\ro!"
unescapeHTML.unescape("unk
o!");      // "unk\ro!"
unescapeHTML.unescape("unk

o!"); // "unk\no!"

連続する改行文字(\n や \r に対応する 
 や 
)が最初の 1 つを残して後続はなかったことにされる件。親切すぎて逆に迷惑な仕様。
最近の bbs2chreader で書き込み時に cookie がないときに空行が削られる的なバグ(http://jbbs.livedoor.jp/bbs/read.cgi/computer/41231/1214224487/106 とか)の原因がこれぽ。rev. 592 にて発症した模様。
とりあえずメモ。