From: handa Date: Sun, 7 Mar 2010 23:14:52 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: ALPHA~27 X-Git-Url: http://git.chise.org/gitweb/?p=m17n%2Fm17n-lib-js.git;a=commitdiff_plain;h=b80d723bac900d147bed053b5bf432fc70a0991c *** empty log message *** --- diff --git a/xex.js b/xex.js index c9199a0..ffcfc70 100644 --- a/xex.js +++ b/xex.js @@ -665,7 +665,7 @@ Xex.Funcall = function (func, vari, args) var func = domain.GetFunc (fname); var vari; attr = node.attributes['vname']; - vari = attr != undefined ? domain.GetVarCreate (attr.nodeValue) : false; + vari = attr != undefined ? domain.GetVarCreate (attr.nodeValue) : null; var args = Xex.Term.Parse (domain, node.firstElement (), null); return new Xex.Funcall (func, vari, args); } @@ -803,7 +803,7 @@ Xex.StrTerm = function (str) { this.val = str; }; proto.Clone = function () { return new Xex.StrTerm (this.val); } proto.Parser = function (domain, node) { - return new Xex.StrTerm (node.firstChild.nodeValue); + return new Xex.StrTerm (node.firstChild ? node.firstChild.nodeValue : ''); } Xex.StrTerm.prototype = proto; }) (); @@ -871,6 +871,11 @@ Xex.LstTerm = function (list) { this.val = list; }; return args[0]; } + function Fnot (domain, vari, args) + { + return (args[0].IsTrue () ? Xex.Zero : Xex.One); + } + function maybe_set_intvar (vari, n) { var term = new Xex.IntTerm (n); @@ -948,6 +953,39 @@ Xex.LstTerm = function (list) { this.val = list; }; return maybe_set_intvar (vari, n); } + function Flogand (domain, vari, args) + { + var n, i; + if (vari == null) + { + Xex.Log ("logand arg args[0]" + args[0]); + n = args[0].Intval () + i = 1; + } + else + { + Xex.Log ("logand arg var " + vari); + n = vari.val.Intval (); + i = 0; + } + while (n > 0 && i < args.length) + { + Xex.Log ("logand arg " + args[i]); + n &= args[i++].val; + } + return maybe_set_intvar (vari, n); + } + + function Flsh (domain, vari, args) + { + return maybe_set_intvar (vari, args[0].Intval () << args[1].Intval ()); + } + + function Frsh (domain, vari, args) + { + return maybe_set_intvar (vari, args[0].Intval () >> args[1].Intval ()); + } + function Fand (domain, vari, args) { var len = args.length; @@ -984,13 +1022,18 @@ Xex.LstTerm = function (list) { this.val = list; }; return Xex.One; } + function Fnoteq (domain, vari, args) + { + return (Feq (domain, vari, args) == Xex.One ? Xex.Zero : Xex.One); + } + function Flt (domain, vari, args) { - var n = args[0].Intval; + var n = args[0].Intval (); for (var i = 1; i < args.length; i++) { - var n1 = args[i].Intval; + var n1 = args[i].Intval (); if (n >= n1) return Xex.Zero; n = n1; @@ -1000,10 +1043,10 @@ Xex.LstTerm = function (list) { this.val = list; }; function Fle (domain, vari, args) { - var n = args[0].Intval; + var n = args[0].Intval (); for (var i = 1; i < args.length; i++) { - var n1 = args[i].Intval; + var n1 = args[i].Intval (); if (n > n1) return Xex.Zero; n = n1; @@ -1013,10 +1056,10 @@ Xex.LstTerm = function (list) { this.val = list; }; function Fgt (domain, vari, args) { - var n = args[0].Intval; + var n = args[0].Intval (); for (var i = 1; i < args.length; i++) { - var n1 = args[i].Intval; + var n1 = args[i].Intval (); if (n <= n1) return Xex.Zero; n = n1; @@ -1026,10 +1069,10 @@ Xex.LstTerm = function (list) { this.val = list; }; function Fge (domain, vari, args) { - var n = args[0].Intval; + var n = args[0].Intval (); for (var i = 1; i < args.Length; i++) { - var n1 = args[i].Intval; + var n1 = args[i].Intval (); if (n < n1) return Xex.Zero; n = n1; @@ -1158,8 +1201,8 @@ Xex.LstTerm = function (list) { this.val = list; }; basic.DefSubr (Fset, "set", true, 1, 1); basic.DefAlias ("=", "set"); - //basic.DefSubr (Fnot, "not", false, 1, 1); - //basic.DefAlias ("!", "not"); + basic.DefSubr (Fnot, "not", false, 1, 1); + basic.DefAlias ("!", "not"); basic.DefSubr (Fadd, "add", true, 1, -1); basic.DefSubr (Fmul, "mul", true, 1, -1); basic.DefAlias ("*", "mul"); @@ -1171,16 +1214,16 @@ Xex.LstTerm = function (list) { this.val = list; }; basic.DefAlias ("%", "mod"); basic.DefSubr (Flogior, "logior", true, 1, -1); basic.DefAlias ('|', "logior"); - //basic.DefSubr (Flogand, "logand", true, 1, -1); - //basic.DefAlias ("&", "logand"); - //basic.DefSubr (Flsh, "lsh", true, 1, 2); - //basic.DefAlias ("<<", "lsh"); - //basic.DefSubr (Frsh, "rsh", true, 1, 2); - //basic.DefAlias (">>", "rsh"); + basic.DefSubr (Flogand, "logand", true, 1, -1); + basic.DefAlias ("&", "logand"); + basic.DefSubr (Flsh, "lsh", true, 1, 2); + basic.DefAlias ("<<", "lsh"); + basic.DefSubr (Frsh, "rsh", true, 1, 2); + basic.DefAlias (">>", "rsh"); basic.DefSubr (Feq, "eq", false, 2, -1); basic.DefAlias ("==", "eq"); - //basic.DefSubr (Fnoteq, "noteq", false, 2, 2); - //basic.DefAlias ("!=", "noteq"); + basic.DefSubr (Fnoteq, "noteq", false, 2, 2); + basic.DefAlias ("!=", "noteq"); basic.DefSubr (Flt, "lt", false, 2, -1); basic.DefAlias ("<", "lt"); basic.DefSubr (Fle, "le", false, 2, -1); @@ -1344,7 +1387,9 @@ var MIM = { { this.key; this.has_modifier = false; - if (typeof val == 'string' || val instanceof String) + if (val instanceof Xex.Term) + this.key = val.val; + else if (typeof val == 'string' || val instanceof String) { this.key = decode_keysym (val); if (! this.key) @@ -1377,12 +1422,14 @@ var MIM = { var len = seq.val.length; for (var i = 0; i < len; i++) { - var v = seq.val[i]; - if (v.type != 'string' && v.type != 'integer' - && v.type != 'symbol') + var v = seq.val[i], key; + if (v.type == 'symbol' || v.type == 'string') + key = new MIM.Key (v); + else if (v.type == 'integer') + key = new MIM.Key (v.val); + else throw new Xex.ErrTerm (MIM.Error.ParseError, "Invalid key: " + v); - var key = new MIM.Key (v.val); this.val.push (key); if (key.has_modifier) this.has_modifier = true; @@ -1528,7 +1575,7 @@ var MIM = { var n = predefined[name]; if (n) return n; - if (name.charAt (1) == '-') + if (name.charAt (1) == '-' || name.charAt (1) == '+') return new MIM.SurroundMarker (name); throw new Xex.ErrTerm (MIM.Error.ParseError, "Invalid marker: " + name); @@ -1989,7 +2036,7 @@ MIM.im_domain.DefType (MIM.State.prototype); { var ic = domain.context; var gsize = domain.variables['candidates_group_size']; - var candidates = new MIM.Candidates (args, gsize ? gsize.Intval : 0); + var candidates = new MIM.Candidates (args, gsize ? gsize.Intval () : 0); ic.ins (candidates.Current (), candidates); return args[0]; } @@ -1997,7 +2044,7 @@ MIM.im_domain.DefType (MIM.State.prototype); function Fdelete (domain, vari, args) { var ic = domain.context; - var pos = args[0].IsInt ? args[0].Intval : args[0].Position (ic); + var pos = args[0].IsInt ? args[0].Intval () : args[0].Position (ic); return new Xex.IntTerm (ic.del (pos)); } @@ -2017,6 +2064,20 @@ MIM.im_domain.DefType (MIM.State.prototype); return args[0]; } + function Fshow (domain, vari, args) + { + domain.context.candidate_show = true; + domain.context.changed |= MIM.ChangedStatus.CandidateShow; + return Xex.nil; + } + + function Fhide (domain, vari, args) + { + domain.context.candidate_show = false; + domain.context.changed |= MIM.ChangedStatus.CandidateShow; + return Xex.nil; + } + function Fchar_at (domain, vari, args) { return new Xex.IntTerm (args[0].CharAt (domain.context)); @@ -2045,6 +2106,14 @@ MIM.im_domain.DefType (MIM.State.prototype); return args[0]; } + function Fpop (domain, vari, args) + { + var ic = domain.context; + if (ic.key_head < ic.keys.val.length) + ic.keys.val.splice (ic.keys_head, 1); + return Xex.nil; + } + function Fundo (domain, vari, args) { var ic = domain.context; @@ -2080,6 +2149,17 @@ MIM.im_domain.DefType (MIM.State.prototype); return args[0]; } + function Fshiftback (domain, vari, args) + { + domain.context.shift (null); + return Xex.nil; + } + + function Fkey_count (domain, vari, args) + { + return new Xex.IntTerm (domain.context.key_head); + } + function Fsurrounding_flag (domain, vari, args) { return new Xex.IntTerm (-1); @@ -2089,19 +2169,19 @@ MIM.im_domain.DefType (MIM.State.prototype); im_domain.DefSubr (Finsert_candidates, "insert-candidates", false, 1, 1); im_domain.DefSubr (Fdelete, "delete", false, 1, 1); im_domain.DefSubr (Fselect, "select", false, 1, 1); - //im_domain.DefSubr (Fshow, "show-candidates", false, 0, 0); - //im_domain.DefSubr (Fhide, "hide-candidates", false, 0, 0); + im_domain.DefSubr (Fshow, "show-candidates", false, 0, 0); + im_domain.DefSubr (Fhide, "hide-candidates", false, 0, 0); im_domain.DefSubr (Fmove, "move", false, 1, 1); im_domain.DefSubr (Fmark, "mark", false, 1, 1); im_domain.DefSubr (Fpushback, "pushback", false, 1, 1); - //im_domain.DefSubr (Fpop, "pop", false, 0, 0); + im_domain.DefSubr (Fpop, "pop", false, 0, 0); im_domain.DefSubr (Fundo, "undo", false, 0, 1); im_domain.DefSubr (Fcommit, "commit", false, 0, 0); im_domain.DefSubr (Funhandle, "unhandle", false, 0, 0); im_domain.DefSubr (Fshift, "shift", false, 1, 1); - //im_domain.DefSubr (Fshiftback, "shiftback", false, 0, 0); + im_domain.DefSubr (Fshiftback, "shiftback", false, 0, 0); im_domain.DefSubr (Fchar_at, "char-at", false, 1, 1); - //im_domain.DefSubr (Fkey_count, "key-count", false, 0, 0); + im_domain.DefSubr (Fkey_count, "key-count", false, 0, 0); im_domain.DefSubr (Fsurrounding_flag, "surrounding-text-flag", false, 0, 0); }) (); @@ -2351,9 +2431,9 @@ MIM.im_domain.DefType (MIM.State.prototype); ic.candidate_table.clear (); ic.candidates = null; ic.changed |= (MIM.ChangedStatus.Preedit | MIM.ChangedStatus.CursorPos - | ChangedStatus.CandidateList - | ChangedStatus.CandidateIndex - | ChangedStatus.CandidateShow); + | MIM.ChangedStatus.CandidateList + | MIM.ChangedStatus.CandidateIndex + | MIM.ChangedStatus.CandidateShow); } function set_cursor (prefix, pos) @@ -2453,6 +2533,7 @@ MIM.im_domain.DefType (MIM.State.prototype); proto = { reset: function () { + Xex.Log ('reseting ' + this.im.lang); this.cursor_pos = 0; this.candidate_show = false; this.prev_state = null; @@ -2858,7 +2939,7 @@ MIM.im_domain.DefType (MIM.State.prototype); else if (key.match(/^U\+([0-9A-Z]+)$/)) { if (mod.length == 0) - return; + return false; key = String.fromCharCode (parseInt (RegExp.$1, 16)); } else @@ -3042,7 +3123,12 @@ MIM.keydown = function (event) if (ic.key) { Xex.Log ("filtering " + ic.key); - var result = ic.Filter (ic.key); + try { + var result = ic.Filter (ic.key); + } catch (e) { + Xex.Log ('Error;' + e); + throw (e); + } MIM.update (target, ic); if (! ic.key_unhandled) event.preventDefault (); @@ -3072,7 +3158,12 @@ MIM.keypress = function (event) } Xex.Log ("filtering " + ic.key); - var result = ic.Filter (ic.key); + try { + var result = ic.Filter (ic.key); + } catch (e) { + Xex.Log ('Error;' + e); + throw (e); + } MIM.update (target, ic); if (! ic.key_unhandled) event.preventDefault ();