みげものなぞ

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 に対応だけしておいた。