From d1e64e2cda36ba8aad89fd34b15e07c7f4fc864a Mon Sep 17 00:00:00 2001 From: ntakahas Date: Mon, 4 Sep 2006 06:45:35 +0000 Subject: [PATCH] Change title-text to KHO THAHAN. Copy state-list rather than including. --- th-pattachote.mim | 282 ++++++++++++++++++++++++++++++++++++++++++++++++++++- th-tis820.mim | 282 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 560 insertions(+), 4 deletions(-) diff --git a/th-pattachote.mim b/th-pattachote.mim index 8a0875c..da6e672 100644 --- a/th-pattachote.mim +++ b/th-pattachote.mim @@ -29,7 +29,7 @@ The correction algorithm follows the one shown in the following ") -(title "กก") +(title "ท") (map (map @@ -130,7 +130,285 @@ The correction algorithm follows the one shown in the following (include (th kesmanee) macro) -(include (th kesmanee) state) +(state + + (init + (map + (delete @<) + (pushback 1) + (cond + ((= @-1 -2) (shift nst)) + (1 (shift st))))) + + ;; no surrounding text + (nst + (t + (set x -1) + (set y -1)) + + (map + (set z @-) + (set arg1 y) + (set arg2 z) + (cp) + (cond + ((= ret 1) ;; CP(y,z) succeeded. + (set x y) + (set y z)) + (1 + (ac) + (cond + ((= ret 1) ;; AC(y,z) succeeded. + (set x y) + (set y z)) + (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 @-) + (insert z) + (insert y) + (set x z)) + + ;; elif CP(x,y) then + (1 + (set arg1 x) + (set arg2 y) + (cp) + (cond + ((= ret 1) + + ;; replace(y -> z) + (delete @-) + (delete @-) + (insert z) + (set y 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 @-) + (insert z) + (insert y) + (set x z)) + + ;; 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 @-) + (insert z) + (set y z)) + + ;; else + ;; reject(z) + (1 + (delete @-)) + + ;; endif + ))) + ;; end + + )))) + + ;; Commit the preedit chars as soon as fixed. + (set w @-) + (cond + ;; If the last char is CTRL or NON, we can commit everything. + ((| (& (>= w 0x0000) (<= w 0x0E00)) + (= w 0x0E2F) + (= w 0x0E3F) + (= w 0x0E46) + (>= w 0x0E4F)) + (commit)) + + ;; If the last char is CONS, LV, FV2 or FV3, we can commit + ;; everything but the last. + ((| (& (>= w 0x0E01) (<= w 0x0E2E)) + (& (>= w 0x0E40) (<= w 0x0E45))) + (delete @-) + (commit) + (insert w)) + + ;; If the last char is FV1 (excluding AM) and ... + ((| (= w 0x0E30) (= w 0x0E32)) + (delete @-) + (set v @-) + (cond + + ;; ... the before last is CONS, we can commit other than the + ;; last two. + ((| (& (>= v 0x0E01) (<= v 0x0E23)) + (= v 0x0E25) + (& (>= v 0x0E27) (<= v 0x0E2E))) + (delete @-) + (commit) + (insert v) + (insert w)) + + ;; ... else if the before last is not CONS, we can commit + ;; everything but the last. + (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 diff --git a/th-tis820.mim b/th-tis820.mim index 632d13a..f3a99e4 100644 --- a/th-tis820.mim +++ b/th-tis820.mim @@ -29,7 +29,7 @@ The correction algorithm follows the one shown in the following ") -(title "กก") +(title "ท") (map (map @@ -130,7 +130,285 @@ The correction algorithm follows the one shown in the following (include (th kesmanee) macro) -(include (th kesmanee) state) +(state + + (init + (map + (delete @<) + (pushback 1) + (cond + ((= @-1 -2) (shift nst)) + (1 (shift st))))) + + ;; no surrounding text + (nst + (t + (set x -1) + (set y -1)) + + (map + (set z @-) + (set arg1 y) + (set arg2 z) + (cp) + (cond + ((= ret 1) ;; CP(y,z) succeeded. + (set x y) + (set y z)) + (1 + (ac) + (cond + ((= ret 1) ;; AC(y,z) succeeded. + (set x y) + (set y z)) + (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 @-) + (insert z) + (insert y) + (set x z)) + + ;; elif CP(x,y) then + (1 + (set arg1 x) + (set arg2 y) + (cp) + (cond + ((= ret 1) + + ;; replace(y -> z) + (delete @-) + (delete @-) + (insert z) + (set y 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 @-) + (insert z) + (insert y) + (set x z)) + + ;; 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 @-) + (insert z) + (set y z)) + + ;; else + ;; reject(z) + (1 + (delete @-)) + + ;; endif + ))) + ;; end + + )))) + + ;; Commit the preedit chars as soon as fixed. + (set w @-) + (cond + ;; If the last char is CTRL or NON, we can commit everything. + ((| (& (>= w 0x0000) (<= w 0x0E00)) + (= w 0x0E2F) + (= w 0x0E3F) + (= w 0x0E46) + (>= w 0x0E4F)) + (commit)) + + ;; If the last char is CONS, LV, FV2 or FV3, we can commit + ;; everything but the last. + ((| (& (>= w 0x0E01) (<= w 0x0E2E)) + (& (>= w 0x0E40) (<= w 0x0E45))) + (delete @-) + (commit) + (insert w)) + + ;; If the last char is FV1 (excluding AM) and ... + ((| (= w 0x0E30) (= w 0x0E32)) + (delete @-) + (set v @-) + (cond + + ;; ... the before last is CONS, we can commit other than the + ;; last two. + ((| (& (>= v 0x0E01) (<= v 0x0E23)) + (= v 0x0E25) + (& (>= v 0x0E27) (<= v 0x0E2E))) + (delete @-) + (commit) + (insert v) + (insert w)) + + ;; ... else if the before last is not CONS, we can commit + ;; everything but the last. + (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: ;; mode: emacs-lisp -- 1.7.10.4