Camino べんりセット

1月18日にインストールした Mozilla 1.6 同様、昨日インストールした Revontulet(Mozilla Firefox 0.8) にも「Camino べんりセット(v1.68)」を Bookmarks にインポートしました。
で色々と試してみたのですが、日記を書く上で最もよく使う「選択部分のソース」と「リンクタグ作成」がやはり上手く動きません。そこでなんとか解決しようと、昨夜遅くまで(明け方近くまで)かかって悪戦苦闘した末、「リンクタグ作成」だけは使えるようになりましたので、その経過を報告します。
リンクタグ作成」のソースは benriSet.jsvar bsetLinkTag = { 以下の部分でオブジェクトリテラルとして定義されています。

URL 文字列末尾の数字

"?" につづく 8 桁の数字が URL 末尾にある場合は、それを削除します。いわゆる「更新日時取得アンテナ」がリンク URL に付加してる事の多い文字列。この処理が不都合であれば、以下のように変更してくださいな。

kill8Nums : true,kill8Nums : false,

と「リンクタグ作成」の説明に書いていましたので試しに kill8Nums : false, にしてみました。するとあっさり動くじゃないですか。と言う事は、Error: invalid quantifier ? の原因は kill8Nums プロパティに関係するものだと推測できます。
kill8Nums プロパティは、getPageURL : function(target) { 以下の if (this.kill8Nums) url = url.bsetRemove8Nums(); で、bsetRemove8Nums() メソッドを呼び出す条件式に出てきます。kill8Nums : false, にするとエラーが出なくなるのですから、エラーの原因は bsetRemove8Nums() メソッドの定義部分にあると考えました。
bsetRemove8Nums() メソッドは run : function() { 以下の try/catch 文中の String.prototype.bsetRemove8Nums = this.remove8Nums; で、String オブジェクトのプロトタイププロパティとして定義され、その値は this.remove8Nums ですから、次は remove8Nums を探しました。remove8Numsremove8Nums : function() { 以下で定義されています。

remove8Nums : function() {
    var ptn = new RegExp('\?\\d{8}(#.*)?$');
    return (this.match(ptn)) ? RegExp.leftContext + RegExp.$1 : this;
},

Error: invalid quantifier ? からまず RegExp() コンストラクタで定義されている正規表現パターン \?\\d{8}(#.*)?$ を疑ってかかりました。
まず始めの "\?" は"?" につづく 8 桁の数字*1に書かれている "?" を表しています。次の "\" はその次に続く "\" をエスケープしている訳ですから次の "\d{8}" は任意の数字を8回繰り返すという文字クラスじゃなくて……。と正規表現が苦手な僕はここで訳が解らなくなってしまいました。ちなみにこの後に続く "(#.*)?$" は、"#" と次に続く0文字以上の任意の文字列(".*")の組("(#.*)")を0回または1回だけ繰り返したもの("(#.*)?")を文字列の最後("$")に持つという意味で、文中のアンカーにリンクする時に使う「URI#名前」の「#名前」を表しています。
結局残ったのは訳が解らなくなった "\\d{8}" の部分です。任意の8桁の数字は "\d{8}" ですから、単純に "\" を一つ取ったのですが、これでもダメみたいです。でも、 "\?\d{8}(#.*)?$" で良いはずだし……と、ここではまってしまいました。
悩んだ末に、試しに RegExp() コンストラクタを使わず、正規表現リテラル形式で var ptn = /\?\d{8}(#.*)?$/; のように定義してみました。そしたらあっさり動いたんです。明け方に一人で小躍りしてしまいました。(笑) 纏めると以下のようになります。

remove8Nums : function() {
    var ptn = /\?\d{8}(#.*)?$/;
    return (this.match(ptn)) ? RegExp.leftContext + RegExp.$1 : this;
},

なぜ RegExp() コンストラクタはダメで、正規表現リテラル形式ならエラーが出ないのか、そんな難しい事はさっぱり解りませんが、兎に角使えるので結果オーライです。
調子に乗って「選択部分のソース」も同じ所を触ってみましたが、こちらはさらに別の部分にもエラーの原因があるようなので、今のところお手上げです。何とかなりませんか?>ありみかさん
後、動作には全く関係ないですが、extraEntities プロパティの中に [255, 'yuml'], が2回出てくるので1つ削除しておきましたよ。(笑)