multi_requester.js の結果バッファ内のURLが小文字になる

世の中にはアドレス中の大文字小文字を区別するサーバも少なくないわけなんだけれども、 multi_requester.js がリンク先のURLを小文字に変換してしまっているためそう言ったサーバの大文字を含むアドレスに飛飛ぶことができない。
まあ multi_requester.js は結果が見れれば満足な場合が多いので普通はそう困ることはない。

ところで、私は .vimperatorrc に以下の設定を書いて delicious 内のブックマークを multi_requester から開いている。

javascript <<EOM
liberator.globalVariables.multi_requester_siteinfo = [
  {
    name:        "delicious-mybookmark",
    description: "delicious searching my bookmarks",
    url:         "http://delicious.com/search?p=%s&u=" + delicious_username + "&chk=&context=userposts&fr=del_icio_us&lc=1",
    xpath:       'id("context-bookmarklist")//div[@class="data"]//*[@class="taggedlink" or @class="description"]',
  },
];
EOM

つまり何が言いたいかと言うと、multi_requester.js で任意のアドレスに飛ぶ機会が多い。
飛べないアドレスに当たる度にイライラしていたので、修正を試みた。

ソースを辿ると、どうやら以下の箇所が原因。
_libly.js 328 行目付近

    xmlSerialize: function(xml) {
        try {
            return (new XMLSerializer()).serializeToString(xml)
                                        .replace(/<!--(?:[^-]|-(?!->))*-->/g, '')
                                        .replace(/<[^>]+>/g, function(all) all.toLowerCase());
        } catch (e) { return '' }
    },

タグの中身を一括で小文字に変換している。この時に URL も一緒に小文字になってる。
この処理の真に意味するところはわからないが、serializeToString() の出力を見た感じだとタグ名が大文字になってるので、タグ名のみを小文字にするように修正してみた。

    xmlSerialize: function(xml) {
        try {
            return (new XMLSerializer()).serializeToString(xml)
                                        .replace(/<!--(?:[^-]|-(?!->))*-->/g, '')
                                        .replace(/<\s*\/?\s*\w+/g, function(all) all.toLowerCase());
        } catch (e) { return '' }
    },

とりあえずこれでちゃんと動くようになった。
けど、これライブラリだし、他のどこから呼び出してるかわからないし、修正方法もこれでいいかよくわからない。まあ問題が起こったらその時考えることにする。

2009/06/14 追記

作者様(id:suVene)からブクマコメントを頂きました。

ある程度使ってみて問題ないなら、問題あったら revert する方向で commit してみては。< _libly.js

今のところ使っていて問題は出ていないです。が、残念ながら私はcodereposのコミット権を持っていない…。そしてgithubで事足りているので貰う予定もとりあえずはないです。
上の変更は使っていただけるならご自由に使っていただいて構いません。むしろ嬉しいです。
なんと言うか無責任で申し訳ない…。