echo! XMigemoCore.getRegExp('(')
で
\((|(
半端にエスケープされた物が帰ってくるのはなんでだろ。
バグ?
再現コード
var XMigemoCore; try{ XMigemoCore = Components.classes['@piro.sakura.ne.jp/xmigemo/factory;1'] .getService(Components.interfaces.pIXMigemoFactory) .getService("ja"); } catch(ex if ex instanceof TypeError){} alert( XMigemoCore.getRegExp('(') );
対症療法
"()" が含まれているときのみおかしいようなので、
そのときだけオリジナルのフィルタを使うようにした。
Index: migemo_completion.js =================================================================== --- migemo_completion.js (revision 22341) +++ migemo_completion.js (working copy) @@ -42,11 +42,18 @@ liberator.modules.completion.filter = function(array,filter,matchFromBeginning){ if(!filter) return array; - var migemoString = XMigemoCore.getRegExp(filter); - if(matchFromBeginning) - migemoString ="^(" + migemoString + ")"; - var migemoPattern = new RegExp(migemoString); + if (filter.match(/[()]/)) + return original_filter.apply(this, arguments); + try { + var migemoString = XMigemoCore.getRegExp(filter); + if(matchFromBeginning) + migemoString ="^(" + migemoString + ")"; + var migemoPattern = new RegExp(migemoString); + } catch (e) { + return original_filter.apply(this, arguments); + } + return array.filter(function([value,label]){ return migemoPattern.test(value) || migemoPattern.test(label) });
よくわからなかったのでこれはコミットしなかったけど、head に対応だけしておいた。