Merge the surrounding text version and the preedit version.
authorntakahas <ntakahas>
Mon, 30 Oct 2006 11:57:12 +0000 (11:57 +0000)
committerntakahas <ntakahas>
Mon, 30 Oct 2006 11:57:12 +0000 (11:57 +0000)
th-kesmanee.mim

index 371bac3..7320a97 100644 (file)
@@ -193,31 +193,23 @@ The correction algorithm follows the one shown in the following
   (map
    (delete @<)
    (pushback 1)
-   (cond
-    ((= @-1 -2) (shift nst))
-    (1 (shift st)))))
+   (shift main)))
  
- ;; no surrounding text
- (nst
-  (t
-   (set x -1)
-   (set y -1))
-
+ (main
   (map
-   (set z @-)
+   (set x @-3)
+   (set y @-2)
+   (set z @-1)
+
    (set arg1 y)
    (set arg2 z)
    (cp)
    (cond
-    ((= ret 1) ;; CP(y,z) succeeded.
-     (set x y)
-     (set y z))
+    ((= ret 1)) ;; CP(y,z) succeeded.
     (1
      (ac)
      (cond
-      ((= ret 1) ;; AC(y,z) succeeded.
-       (set x y)
-       (set y z))
+      ((= ret 1)) ;; AC(y,z) succeeded.
       (1
        ;; WTT-based input sequence correction starts here.
 
@@ -237,11 +229,9 @@ The correction algorithm follows the one shown in the following
          ((= ret 1)
 
           ;; reorder(y -> zy)
-          (delete @-)
-          (delete @-)
+          (delete @-2)
           (insert z)
-          (insert y)
-          (set x z))
+          (insert y))
 
          ;; elif CP(x,y) then
          (1
@@ -252,10 +242,8 @@ The correction algorithm follows the one shown in the following
            ((= ret 1)
 
             ;; replace(y -> z)
-            (delete @-)
-            (delete @-)
-            (insert z)
-            (set y z))
+            (delete @-2)
+            (insert z))
 
            ;; elif y is FV1 and z is TONE then
            ((& (| (= y 0x0E30) (= y 0x0E32) (= y 0x0E33))
@@ -263,16 +251,14 @@ The correction algorithm follows the one shown in the following
                (<= z 0x0E4B))
 
             ;; reorder(y -> zy)
-            (delete @-)
-            (delete @-)
+            (delete @-2)
             (insert z)
-            (insert y)
-            (set x z))
+            (insert y))
 
            ;; else
            ;; reject(z)
            (1
-            (delete @-))
+            (delete @-1))
 
            ;;endif
            ))))
@@ -284,28 +270,18 @@ The correction algorithm follows the one shown in the following
         (ac)
         (cond
          ((& (= ret 1)
-             ;; CTRL, NON and CONS should not be replaced.
-             (| (= y 0x0E24)
-                (= y 0x0E26)
-                (& (>= y 0x0E30) (<= y 0x0E3A))
-                (& (>= y 0x0E40) (<= y 0x0E45))
-                (& (>= y 0x0E47) (<= y 0x0E4E)))
-             (| (= z 0x0E24)
-                (= z 0x0E26)
-                (& (>= z 0x0E30) (<= z 0x0E3A))
-                (& (>= z 0x0E40) (<= z 0x0E45))
-                (& (>= z 0x0E47) (<= z 0x0E4E))))
+             ;; Only Thai characters should be replaced.
+             (& (>= y 0x0E01) (<= y 0x0E5B))
+             (& (>= z 0x0E01) (<= z 0x0E5B)))
 
           ;; replace(y -> z)
-          (delete @-)
-          (delete @-)
-          (insert z)
-          (set y z))
+          (delete @-2)
+          (insert z))
 
          ;; else
          ;; reject(z)
          (1
-          (delete @-))
+          (delete @-1))
 
          ;; endif
          )))
@@ -313,9 +289,13 @@ The correction algorithm follows the one shown in the following
 
        ))))
 
-   ;; Commit the preedit chars as soon as fixed.
-   (set w @-)
+   ;; Commit the preedit chars that are fixed.
+   (set w @-1)
    (cond
+    ;; If surrounding text is supported, commit the only char in preedit.
+    ((> @-0 -2)
+     (commit))
+
     ;; If the last char is CTRL or NON, we can commit everything.
     ((| (& (>= w 0x0000) (<= w 0x0E00))
        (= w 0x0E2F)
@@ -328,14 +308,14 @@ The correction algorithm follows the one shown in the following
     ;; everything but the last.
     ((| (& (>= w 0x0E01) (<= w 0x0E2E))
        (& (>= w 0x0E40) (<= w 0x0E45)))
-     (delete @-)
+     (delete @-1)
      (commit)
      (insert w))
 
     ;; If the last char is FV1 (excluding AM) and ...
     ((| (= w 0x0E30) (= w 0x0E32))
-     (delete @-)
-     (set v @-)
+     (delete @-1)
+     (set v @-1)
      (cond
 
       ;; ... the before last is CONS, we can commit other than the
@@ -343,7 +323,7 @@ The correction algorithm follows the one shown in the following
       ((| (& (>= v 0x0E01) (<= v 0x0E23))
          (= v 0x0E25)
          (& (>= v 0x0E27) (<= v 0x0E2E)))
-       (delete @-)
+       (delete @-1)
        (commit)
        (insert v)
        (insert w))
@@ -353,119 +333,7 @@ The correction algorithm follows the one shown in the following
       (1
        (commit)
        (insert w))))
-    )))
-
- ;; with surrounding text
- (st
-  (map
-   ;; z = next character
-   (set z @-)
-   ;; y = previous character
-   (set y @-1)
-   ;; x = character previous to y
-   (set x @-2)
-
-   (set arg1 y)
-   (set arg2 z)
-   (cp)
-   (cond
-    ((= ret 1))        ;; CP(y,z) succeeded.
-    (1
-     (ac)
-     (cond
-      ((= ret 1)) ;; AC(y,z) succeeded.
-      (1
-       ;; WTT-based input sequence correction starts here.
-
-       ;; begin
-       ;; if CP(x,z) then
-       (set arg1 x)
-       (set arg2 z)
-       (cp)
-       (cond
-       ((= ret 1)
-
-        ;; if CP(z,y) then
-        (set arg1 z)
-        (set arg2 y)
-        (cp)
-        (cond
-         ((= ret 1)
-
-          ;; reorder(y -> zy)
-          (delete @-)
-          (delete @-1)
-          (insert z)
-          (insert y))
-
-         ;; elif CP(x,y) then
-         (1
-          (set arg1 x)
-          (set arg2 y)
-          (cp)
-          (cond
-           ((= ret 1)
-
-            ;; replace(y -> z)
-            (delete @-)
-            (delete @-1)
-            (insert z))
-
-           ;; elif y is FV1 and z is TONE then
-           ((& (| (= y 0x0E30) (= y 0x0E32) (= y 0x0E33))
-               (>= z 0x0E48)
-               (<= z 0x0E4B))
-
-            ;; reorder(y -> zy)
-            (delete @-)
-            (delete @-1)
-            (insert z)
-            (insert y))
-
-           ;; else
-           ;; reject(z)
-           (1
-            (delete @-))
-
-           ;;endif
-           ))))
-
-       ;; elif AC(x,z) then
-       (1
-        (set arg1 x)
-        (set arg2 z)
-        (ac)
-        (cond
-         ((& (= ret 1)
-             ;; CTRL, NON and CONS should not be replaced.
-             (| (= y 0x0E24)
-                (= y 0x0E26)
-                (& (>= y 0x0E30) (<= y 0x0E3A))
-                (& (>= y 0x0E40) (<= y 0x0E45))
-                (& (>= y 0x0E47) (<= y 0x0E4E)))
-             (| (= z 0x0E24)
-                (= z 0x0E26)
-                (& (>= z 0x0E30) (<= z 0x0E3A))
-                (& (>= z 0x0E40) (<= z 0x0E45))
-                (& (>= z 0x0E47) (<= z 0x0E4E))))
-
-          ;; replace(y -> z)
-          (delete @-)
-          (delete @-1)
-          (insert z))
-
-         ;; else
-         ;; reject(z)
-         (1
-          (delete @-))
-
-         ;; endif
-         )))
-       ;; end
-
-       ))))
-   (commit)
-   )))
+    ))))
 
 ;; Local Variables:
 ;; coding: utf-8