From: handa Date: Wed, 10 Mar 2010 07:48:55 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: ALPHA~23 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5493c915216843b556790454bf9aece8c42c2b95;p=m17n%2Fm17n-lib-js.git *** empty log message *** --- diff --git a/xex.js b/xex.js index 542e94d..90fd2d3 100644 --- a/xex.js +++ b/xex.js @@ -2,23 +2,20 @@ var Xex = { LogNode: null, - LogSuspended: '', - Log: function (arg, indent, suspend) + Log: function (arg, indent) { if (! Xex.LogNode) return; if (! arg) Xex.LogNode.value = ''; - else if (suspend) - Xex.LogSuspended += arg; else { - var str = Xex.LogSuspended; - Xex.LogSuspended = ''; + var str = ''; if (indent != undefined) for (var i = 0; i <= indent; i++) str += ' '; - Xex.LogNode.value = str + arg + "\n" + Xex.LogNode.value; + Xex.LogNode.value += "\n" + str + arg; + Xex.LogNode.scrollTop = Xex.LogNode.scrollHeight; } } }; @@ -1395,7 +1392,6 @@ var MIM = { MIM.Key = function (val) { this.key; - this.has_modifier = false; if (val instanceof Xex.Term) this.key = val.val; else if (typeof val == 'string' || val instanceof String) @@ -1426,7 +1422,6 @@ var MIM = { MIM.KeySeq = function (seq) { this.val = new Array (); - this.has_modifier = false; if (seq) { @@ -1751,6 +1746,13 @@ MIM.Keymap = function () var sub; if (index < keys.val.length && this.submaps + && ! keys.val[index]) + { + Xex.Log ('invalid key at ' + index); + throw 'invalid key'; + } + + if (index < keys.val.length && this.submaps && (sub = this.submaps[keys.val[index].key])) { index++; @@ -2486,24 +2488,26 @@ MIM.im_domain.DefType (MIM.State.prototype); function handle_key () { - var out = this.keymap.Lookup (this.keys, this.key_head); + Xex.Log ('Key(' + this.key_head + ') "' + this.keys.val[this.key_head] + + '" in ' + this.state.name + ':' + this.keymap.name + + " key/state/commit-head/len:" + + this.key_head + '/' + this.state_key_head + '/' + this.commit_key_head + '/' + this.keys.val.length); + var out = this.state.keymap.Lookup (this.keys, this.state_key_head); var sub = out.map; - Xex.Log ('handling ' + this.keys.val[this.key_head] - + ' in ' + this.state.name + ':' + this.keymap.name, 0, true); - this.key_head = out.index; - if (sub != this.keymap) + if (out.index > this.key_head) { - Xex.Log (' with submap'); + this.key_head = out.index; + Xex.Log (' with submap for ' + this.key_head + 'keys'); restore_state.call (this); this.keymap = sub; - if (this.keymap.map_actions) + if (sub.map_actions) { Xex.Log ('taking map actions:'); - if (! this.take_actions (this.keymap.map_actions)) + if (! this.take_actions (sub.map_actions)) return false; } - else if (this.keymap.submaps) + else if (sub.submaps) { Xex.Log ('no map actions'); for (var i = this.state_key_head; i < this.key_head; i++) @@ -2512,7 +2516,7 @@ MIM.im_domain.DefType (MIM.State.prototype); this.ins (this.keys.val[i].key, null); } } - if (! this.keymap.submaps) + if (! sub.submaps) { Xex.Log ('terminal:'); if (this.keymap.branch_actions != null) @@ -2521,13 +2525,14 @@ MIM.im_domain.DefType (MIM.State.prototype); if (! this.take_actions (this.keymap.branch_actions)) return false; } - if (this.keymap != this.state.keymap) + if (sub != this.state.keymap) this.shift (this.state); } } else { Xex.Log (' without submap'); + this.keymap = sub; var current_state = this.state; var map = this.keymap; @@ -2770,6 +2775,7 @@ MIM.im_domain.DefType (MIM.State.prototype); if (this.key_head > this.keys.val.length) this.key_head = this.keys.val.length; } + Xex.Log ('0: key head = ' + this.key_head); }, pop: function () @@ -2821,7 +2827,6 @@ MIM.im_domain.DefType (MIM.State.prototype); this.changed |= MIM.ChangedStatus.StateTitle; this.state = state; this.keymap = state.keymap; - this.state_key_head = this.key_head; save_state.call (this); }, @@ -2870,12 +2875,23 @@ MIM.im_domain.DefType (MIM.State.prototype); { this.keys.val.splice (0, this.commit_key_head); this.key_head -= this.commit_key_head; + if (this.key_head < 0) + { + Xex.Log ('RECOVER key_head'); + this.key_head = 0; + } this.state_key_head -= this.commit_key_head; + if (this.state_key_head < 0) + { + Xex.Log ('RECOVER state_key_head'); + this.state_key_head = 0; + } this.commit_key_head = 0; } if (this.key_unhandled) { this.keys.val.length = 0; + //this.keys.val.splice (0, this.keys.val.length); this.key_head = this.state_key_head = this.commit_key_head = 0; } return (! this.key_unhandled @@ -3140,13 +3156,10 @@ MIM.focus_in = function (event) else { Xex.Log ('focus_in in ' + target.tagName); - try { - ic.Filter (MIM.Key.FocusIn); - MIM.update (target, ic); - // Ignore further focus-in caused by setSelectionRange (). - // target.mim_ignore_focus_in = true; - } - catch (e) { Xex.Log ('Error:' + e); throw (e); } + ic.Filter (MIM.Key.FocusIn); + MIM.update (target, ic); + // Ignore further focus-in caused by setSelectionRange (). + target.mim_ignore_focus_in = true; } } } @@ -3259,7 +3272,7 @@ MIM.keypress = function (event) try { var result = ic.Filter (ic.key); } catch (e) { - Xex.Log ('Error;' + e); + Xex.Log ('Error:' + e); throw (e); } MIM.update (target, ic);