*** empty log message ***
authorhanda <handa>
Mon, 15 Mar 2010 00:11:03 +0000 (00:11 +0000)
committerhanda <handa>
Mon, 15 Mar 2010 00:11:03 +0000 (00:11 +0000)
xex.html
xex.js

index b62260f..f60ee20 100644 (file)
--- a/xex.html
+++ b/xex.html
@@ -4,7 +4,7 @@
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <style type="text/css">
     <!--
-     td { font-family: 'monospace'; font-size: 12pt; width: 40mm}
+     td { font-family: 'monospace'; font-size: 12pt}
      textarea { font-size: 20pt; width: 100mm; }
       -->
   </style>
diff --git a/xex.js b/xex.js
index 4ad5b75..4f567b0 100644 (file)
--- a/xex.js
+++ b/xex.js
@@ -2,7 +2,7 @@
 
 var Xex = {
   LogNode: null,
-  Log: function (arg, indent)
+  Log: function (arg, indent, cont)
   {
     if (! Xex.LogNode)
       return;
@@ -14,7 +14,9 @@ var Xex = {
        if (indent != undefined)
          for (var i = 0; i <= indent; i++)
            str += '  ';
-       Xex.LogNode.value += "\n" + str + arg;
+       if (! cont)
+         Xex.LogNode.value += "\n";
+       Xex.LogNode.value += str + arg;
        Xex.LogNode.scrollTop = Xex.LogNode.scrollHeight;
       }
   }
@@ -2021,6 +2023,38 @@ MIM.State = function (name)
       }
     return this.Current ();
   }
+
+  MIM.Candidates.prototype.CurrentGroup = function (selector)
+  {
+    var col, start, end
+    if (this.column > 0)
+      {
+       col = this.index % this.column;
+       start = this.index - col;
+       end = start + this.column;
+       if (end > this.total)
+         end = this.total;
+      }
+    else
+      {
+       start = this.blocks[this.row].Index;
+       col = this.index - start;
+       end = start + this.blocks[this.row].Count ();
+      }
+    var group = new Array ();
+    group.push (col);
+    var row = this.row;
+    var block = this.blocks[row++];
+    while (start < end)
+      {
+       var c = block.get (start - block.Index);
+       group.push (c);
+       start++;
+       if (start == block.Index + block.Count ())
+         block = this.blocks[row++];
+      }
+    return group;
+  }
 }) ();
 
 MIM.im_domain = new Xex.Domain ('input-method', null, null);
@@ -2496,7 +2530,7 @@ MIM.im_domain.DefType (MIM.State.prototype);
     if (out.index > this.key_head)
       {
        this.key_head = out.index;
-       Xex.Log (' with submap for ' + this.key_head + 'keys');
+       Xex.Log (' with submap for ' + this.key_head + 'keys', false, true);
        restore_state.call (this);
        this.keymap = sub;
        if (sub.map_actions)
@@ -2529,7 +2563,7 @@ MIM.im_domain.DefType (MIM.State.prototype);
       }
     else
       {
-       Xex.Log (' without submap');
+       Xex.Log (' without submap', false, true);
        this.keymap = sub;
        var current_state = this.state;
        var map = this.keymap;
@@ -2682,6 +2716,7 @@ MIM.im_domain.DefType (MIM.State.prototype);
     {
       this.preedit_replace (this.cursor_pos, this.cursor_pos, text, candidates);
       this.changed = MIM.ChangedStatus.Preedit | MIM.ChangedStatus.CursorPos;
+      this.candidates = candidates;
     },
 
     rep: function (old_text, new_text, candidates)
@@ -2844,7 +2879,6 @@ MIM.im_domain.DefType (MIM.State.prototype);
       this.key_unhandled = false;
       this.keys.val.push (key);
       var count = 0;
-      Xex.Log ("keyhead=" + this.key_head + " len="+this.keys.val.length);
       while (this.key_head < this.keys.val.length)
        {
          if (! handle_key.call (this))
@@ -2884,6 +2918,14 @@ MIM.im_domain.DefType (MIM.State.prototype);
          //this.keys.val.splice (0, this.keys.val.length);
          this.key_head = this.state_key_head = this.commit_key_head = 0;
        }
+      MIM.show (this);
+      if (false && (this.changed & MIM.ChangedStatus.Candidate))
+       {
+         if (this.candidate_show)
+           MIM.show (this);
+         else
+           MIM.hide (this);
+       }
       return (! this.key_unhandled
              && this.produced.length == 0);
     }
@@ -3153,18 +3195,20 @@ MIM.update = function (target, ic)
   function copy_style (from, to)
   {
     var from_style = getComputedStyle(from,'');
-       
     for(var name in style_props)
       to.style[name] = from_style.getPropertyValue (style_props[name]);
-       
     to.style.left = from.offsetLeft + 'px'; 
     to.style.top = from.offsetTop + 'px';
     to.style.width = from.offsetWidth;
     to.style.height = from.offsetHeight;
   }
 
-  MIM.show = function (target, ic)
+  MIM.show = function (ic)
   {
+    Xex.Log ('show:' + ic.candidates);
+    if (! ic.candidates)
+      return;
+    var target = ic.target;
     if (! ic.div_node)
       {
        ic.target_top = 0;
@@ -3175,32 +3219,43 @@ MIM.update = function (target, ic)
            ic.target_left += elm.offsetLeft;
          }
        ic.div_node = document.createElement ('div');
+       copy_style (target, ic.div_node);
        ic.div_node.style.visibility="hidden";
        ic.div_node.style.position = "absolute";
        document.getElementsByTagName ('body')[0].appendChild (ic.div_node);
        ic.div_node_first = document.createElement ('span');
        ic.div_node_last = document.createElement('span');
        ic.div_node_last.innerHTML = '.';
-       ic.can_node = document.createElement ('div');
-       ic.can_node.appendChild (document.createTextNode ('1. abc'));
-       ic.can_node.appendChild (document.createTextNode ('2. def'));
+       ic.div_node.appendChild (ic.div_node_first);
+       ic.div_node.appendChild (ic.div_node_last);
+       ic.can_node = document.createElement ('table');
        ic.can_node.style.position = 'absolute';
        ic.can_node.style.display = 'none';
+       ic.can_node.style.backgroundColor = "white";
+       ic.can_node.style.border = "1px solid black";
        document.getElementsByTagName ('body')[0].appendChild (ic.can_node);
       }
 
-    copy_style (target, ic.div_node);
-    ic.div_node.innerHTML = '';
+    ic.can_node.innerHTML = '';
+    var tr = document.createElement ('tr');
+    ic.can_node.appendChild (tr);
+    var group = ic.candidates.CurrentGroup ();
+    for (var i = 1; i < group.length; i++)
+      {
+       var td = document.createElement ('td');
+       td.nowrap = true;
+       td.innerHTML = i + '.' + group[i];
+       if (i == group[0] + 1)
+         td.style.backgroundColor = 'lightblue';
+       ic.can_node.appendChild (td);
+      }
     ic.div_node_first.innerHTML = target.value.substr (0, ic.range[0]);
-    ic.div_node.appendChild (ic.div_node_first);
-    ic.div_node.appendChild (ic.div_node_last);
-    Xex.Log (ic.div_node.firstChild.innerHTML);
     var x = ic.target_left + ic.div_node.lastChild.offsetLeft;
-    var y = ic.target_top + ic.div_node.lastChild.offsetTop - target.scrollTop;
+    var y = (ic.target_top + ic.div_node.lastChild.offsetTop
+            + ic.div_node.lastChild.offsetHeight - target.scrollTop + 10);
     ic.can_node.style.left = x + 'px';
     ic.can_node.style.top = y + 'px';
     ic.can_node.style.display = 'block';
-    Xex.Log ("x:" + x + "px y:" + y + "px");
   }
 }) ();
 
@@ -3263,7 +3318,7 @@ MIM.keydown = function (event)
       if (! MIM.get_range (target, ic))
        ic.reset ();
     }
-  MIM.show (target, ic);
+  //MIM.show (target, ic);
   MIM.debug_print (event, ic);
   ic.key = MIM.decode_key_event (event);
   if (ic.key)
@@ -3306,7 +3361,6 @@ MIM.keypress = function (event)
     Xex.Log ("filtering " + ic.key);
     try {
       var result = ic.Filter (ic.key);
-      Xex.Log ("result = " + result);
     } catch (e) {
       Xex.Log ('Error:' + e);
       throw (e);