From 20408b55129fe234e4e062197a6c6568ee554179 Mon Sep 17 00:00:00 2001 From: handa Date: Thu, 19 Oct 2006 01:32:02 +0000 Subject: [PATCH] Full rewrite to allow typing diacritical marks at the end of syllable. --- vi-telex.mim | 421 ++++++++++------------------------------------------------ 1 file changed, 73 insertions(+), 348 deletions(-) diff --git a/vi-telex.mim b/vi-telex.mim index af6f1bc..b5004f5 100644 --- a/vi-telex.mim +++ b/vi-telex.mim @@ -1,5 +1,5 @@ ;; vi-telex.mim -- Input method for Vietnames with TELEX key sequence -;; Copyright (C) 2003, 2004, 2005 +;; Copyright (C) 2003, 2004, 2005, 2006 ;; National Institute of Advanced Industrial Science and Technology (AIST) ;; Registration Number H15PRO112 @@ -28,363 +28,88 @@ (title "ắ") (map - (map1 - ("a" "a") ("e" "e") ("i" "i") ("o" "o") ("u" "u") ("y" "y") ("d" "d") - ("A" "A") ("E" "E") ("I" "I") ("O" "O") ("U" "U") ("Y" "Y") ("D" "D") - ("\\" "\\")) - (map2 - ("af" ?à) - ("AF" ?À) - ("Af" ?À) - ("as" ?á) - ("AS" ?Á) - ("As" ?Á) - ("aa" ?â) - ("AA" ?Â) - ("Aa" ?Â) - ("ax" ?ã) - ("AX" ?Ã) - ("Ax" ?Ã) - ("ef" ?è) - ("EF" ?È) - ("Ef" ?È) - ("es" ?é) - ("ES" ?É) - ("Es" ?É) - ("ee" ?ê) - ("EE" ?Ê) - ("Ee" ?Ê) - ("if" ?ì) - ("IF" ?Ì) - ("If" ?Ì) - ("is" ?í) - ("IS" ?Í) - ("Is" ?Í) - ("of" ?ò) - ("OF" ?Ò) - ("Of" ?Ò) - ("os" ?ó) - ("OS" ?Ó) - ("Os" ?Ó) - ("oo" ?ô) - ("OO" ?Ô) - ("Oo" ?Ô) - ("ox" ?õ) - ("OX" ?Õ) - ("Ox" ?Õ) - ("uf" ?ù) - ("UF" ?Ù) - ("Uf" ?Ù) - ("us" ?ú) - ("US" ?Ú) - ("Us" ?Ú) - ("ys" ?ý) - ("YS" ?Ý) - ("Ys" ?Ý) - ("aw" ?ă) - ("AW" ?Ă) - ("Aw" ?Ă) - ("ix" ?ĩ) - ("IX" ?Ĩ) - ("Ix" ?Ĩ) - ("ux" ?ũ) - ("UX" ?Ũ) - ("Ux" ?Ũ) - ("ow" ?ơ) - ("OW" ?Ơ) - ("Ow" ?Ơ) - ("uw" ?ư) - ("UW" ?Ư) - ("Uw" ?Ư) - ("aj" ?ạ) - ("AJ" ?Ạ) - ("Aj" ?Ạ) - ("ar" ?ả) - ("AR" ?Ả) - ("Ar" ?Ả) - ("ej" ?ẹ) - ("EJ" ?Ẹ) - ("Ej" ?Ẹ) - ("er" ?ẻ) - ("ER" ?Ẻ) - ("Er" ?Ẻ) - ("ex" ?ẽ) - ("EX" ?Ẽ) - ("Ex" ?Ẽ) - ("ir" ?ỉ) - ("IR" ?Ỉ) - ("Ir" ?Ỉ) - ("ij" ?ị) - ("IJ" ?Ị) - ("Ij" ?Ị) - ("oj" ?ọ) - ("OJ" ?Ọ) - ("Oj" ?Ọ) - ("or" ?ỏ) - ("OR" ?Ỏ) - ("Or" ?Ỏ) - ("uj" ?ụ) - ("UJ" ?Ụ) - ("Uj" ?Ụ) - ("ur" ?ủ) - ("UR" ?Ủ) - ("Ur" ?Ủ) - ("yf" ?ỳ) - ("YF" ?Ỳ) - ("Yf" ?Ỳ) - ("yj" ?ỵ) - ("YJ" ?Ỵ) - ("Yj" ?Ỵ) - ("yr" ?ỷ) - ("YR" ?Ỷ) - ("Yr" ?Ỷ) - ("yx" ?ỹ) - ("YX" ?Ỹ) - ("Yx" ?Ỹ) + (vowel + ;; sfrxj + ("a" ("aáàảãạ")) + ("aa" ("âấầẩẫậ")) + ("aw" ("ăắằẳẵặ")) + ("e" ("eéèẻẽẹ")) + ("ee" ("êếềểễệ")) + ("i" ("iíìỉĩị")) + ("o" ("oóòỏõọ")) + ("oo" ("ôốồổỗộ")) + ("ow" ("ơớờởỡợ")) + ("u" ("uúùủũụ")) + ("uw" ("ưứừửữự")) + ("y" ("yýỳỷỹỵ")) + ("A" ("AÁÀẢÃẠ")) + ("AA" ("ÂẤẦẨẪẬ")) ("Aa" ("ÂẤẦẨẪẬ")) + ("AW" ("ĂẮẰẲẴẶ")) ("Aw" ("ĂẮẰẲẴẶ")) + ("E" ("EÉÈẺẼẸ")) + ("EE" ("ÊẾỀỂỄỆ")) ("Ee" ("ÊẾỀỂỄỆ")) + ("I" ("IÍÌỈĨỊ")) + ("O" ("OÓÒỎÕỌ")) + ("OO" ("ÔỐỒỔỖỘ")) ("Oo" ("ÔỐỒỔỖỘ")) + ("OW" ("ƠỚỜỞỠỢ")) ("Ow" ("ƠỚỜỞỠỢ")) + ("U" ("UÚÙỦŨỤ")) + ("UW" ("ƯỨỪỬỮỰ")) ("Uw" ("ƯỨỪỬỮỰ")) + ("Y" ("YÝỲỶỸỴ"))) + + (diacritical + ("s" (cond (MARKED (move 1) (select 1) (move @>)) (1 ?s))) + ("f" (cond (MARKED (move 1) (select 2) (move @>)) (1 ?f))) + ("r" (cond (MARKED (move 1) (select 3) (move @>)) (1 ?r))) + ("x" (cond (MARKED (move 1) (select 4) (move @>)) (1 ?x))) + ("j" (cond (MARKED (move 1) (select 5) (move @>)) (1 ?j)))) + + (double + ("ss" (cond (MARKED (move 1) (select 0) (move @>))) ?s) + ("ff" (cond (MARKED (move 1) (select 0) (move @>))) ?f) + ("rr" (cond (MARKED (move 1) (select 0) (move @>))) ?r) + ("xx" (cond (MARKED (move 1) (select 0) (move @>))) ?x) + ("jj" (cond (MARKED (move 1) (select 0) (move @>))) ?j)) + + (consonant + ("b" ?b) ("c" ?c) ("d" ?d) ("g" ?g) ("h" ?h) ("k" ?k) ("l" ?l) ("m" ?m) + ("n" ?n) ("p" ?p) ("q" ?q) ("t" ?t) ("v" ?v) ("z" ?z)) + + (d-bar ("dd" ?đ) - ("DD" ?Đ) - ("Dd" ?Đ)) - (map3 - ("aas" ?ấ) - ("AAS" ?Ấ) - ("Aas" ?Ấ) - ("aaf" ?ầ) - ("AAF" ?Ầ) - ("Aaf" ?Ầ) - ("aar" ?ẩ) - ("AAR" ?Ẩ) - ("Aar" ?Ẩ) - ("aax" ?ẫ) - ("AAX" ?Ẫ) - ("Aax" ?Ẫ) - ("aaj" ?ậ) - ("AAJ" ?Ậ) - ("Aaj" ?Ậ) - ("aws" ?ắ) - ("AWS" ?Ắ) - ("Aws" ?Ắ) - ("awf" ?ằ) - ("AWF" ?Ằ) - ("Awf" ?Ằ) - ("awr" ?ẳ) - ("AWR" ?Ẳ) - ("Awr" ?Ẳ) - ("awx" ?ẵ) - ("AWX" ?Ẵ) - ("Awx" ?Ẵ) - ("awj" ?ặ) - ("AWJ" ?Ặ) - ("Awj" ?Ặ) - ("ees" ?ế) - ("EES" ?Ế) - ("Ees" ?Ế) - ("eef" ?ề) - ("EEF" ?Ề) - ("Eef" ?Ề) - ("eer" ?ể) - ("EER" ?Ể) - ("Eer" ?Ể) - ("eex" ?ễ) - ("EEX" ?Ễ) - ("Eex" ?Ễ) - ("eej" ?ệ) - ("EEJ" ?Ệ) - ("Eej" ?Ệ) - ("oos" ?ố) - ("OOS" ?Ố) - ("Oos" ?Ố) - ("oof" ?ồ) - ("OOF" ?Ồ) - ("Oof" ?Ồ) - ("oor" ?ổ) - ("OOR" ?Ổ) - ("Oor" ?Ổ) - ("oox" ?ỗ) - ("OOX" ?Ỗ) - ("Oox" ?Ỗ) - ("ooj" ?ộ) - ("OOJ" ?Ộ) - ("Ooj" ?Ộ) - ("ows" ?ớ) - ("OWS" ?Ớ) - ("Ows" ?Ớ) - ("owf" ?ờ) - ("OWF" ?Ờ) - ("Owf" ?Ờ) - ("owr" ?ở) - ("OWR" ?Ở) - ("Owr" ?Ở) - ("owx" ?ỡ) - ("OWX" ?Ỡ) - ("Owx" ?Ỡ) - ("owj" ?ợ) - ("OWJ" ?Ợ) - ("Owj" ?Ợ) - ("uws" ?ứ) - ("UWS" ?Ứ) - ("Uws" ?Ứ) - ("uwf" ?ừ) - ("UWF" ?Ừ) - ("Uwf" ?Ừ) - ("uwr" ?ử) - ("UWR" ?Ử) - ("Uwr" ?Ử) - ("uwx" ?ữ) - ("UWX" ?Ữ) - ("Uwx" ?Ữ) - ("uwj" ?ự) - ("UWJ" ?Ự) - ("Uwj" ?Ự) + ("DD" ?Đ) ("Dd" ?Đ)) - ("aff" (insert "af")) - ("AFF" (insert "AF")) - ("Aff" (insert "Af")) - ("ass" (insert "as")) - ("ASS" (insert "AS")) - ("Ass" (insert "As")) - ("aaa" (insert "aa")) - ("AAA" (insert "AA")) - ("Aaa" (insert "Aa")) - ("axx" (insert "ax")) - ("AXX" (insert "AX")) - ("Axx" (insert "Ax")) - ("eff" (insert "ef")) - ("EFF" (insert "EF")) - ("Eff" (insert "Ef")) - ("ess" (insert "es")) - ("ESS" (insert "ES")) - ("Ess" (insert "Es")) - ("eee" (insert "ee")) - ("EEE" (insert "EE")) - ("Eee" (insert "Ee")) - ("iff" (insert "if")) - ("IFF" (insert "IF")) - ("Iff" (insert "If")) - ("iss" (insert "is")) - ("ISS" (insert "IS")) - ("Iss" (insert "Is")) - ("off" (insert "of")) - ("OFF" (insert "OF")) - ("Off" (insert "Of")) - ("oss" (insert "os")) - ("OSS" (insert "OS")) - ("Oss" (insert "Os")) - ("ooo" (insert "oo")) - ("OOO" (insert "OO")) - ("Ooo" (insert "Oo")) - ("oxx" (insert "ox")) - ("OXX" (insert "OX")) - ("Oxx" (insert "Ox")) - ("uff" (insert "uf")) - ("UFF" (insert "UF")) - ("Uff" (insert "Uf")) - ("uss" (insert "us")) - ("USS" (insert "US")) - ("Uss" (insert "Us")) - ("yss" (insert "ys")) - ("YSS" (insert "YS")) - ("Yss" (insert "Ys")) - ("aww" (insert "aw")) - ("AWW" (insert "AW")) - ("Aww" (insert "Aw")) - ("ixx" (insert "ix")) - ("IXX" (insert "IX")) - ("Ixx" (insert "Ix")) - ("uxx" (insert "ux")) - ("UXX" (insert "UX")) - ("Uxx" (insert "ux")) - ("oww" (insert "ow")) - ("OWW" (insert "OW")) - ("Oww" (insert "Ow")) - ("uww" (insert "uw")) - ("UWW" (insert "UW")) - ("Uww" (insert "Uw")) - ("ajj" (insert "aj")) - ("AJJ" (insert "AJ")) - ("Ajj" (insert "Aj")) - ("arr" (insert "ar")) - ("ARR" (insert "AR")) - ("Arr" (insert "Ar")) - ("ejj" (insert "ej")) - ("EJJ" (insert "EJ")) - ("Ejj" (insert "Ej")) - ("err" (insert "er")) - ("ERR" (insert "ER")) - ("Err" (insert "Er")) - ("exx" (insert "ex")) - ("EXX" (insert "EX")) - ("Exx" (insert "Ex")) - ("irr" (insert "ir")) - ("IRR" (insert "IR")) - ("Irr" (insert "Ir")) - ("ijj" (insert "ij")) - ("IJJ" (insert "IJ")) - ("Ijj" (insert "Ij")) - ("ojj" (insert "oj")) - ("OJJ" (insert "OJ")) - ("Ojj" (insert "Oj")) - ("orr" (insert "or")) - ("ORR" (insert "OR")) - ("Orr" (insert "Or")) - ("ujj" (insert "uj")) - ("UJJ" (insert "UJ")) - ("Ujj" (insert "Uj")) - ("urr" (insert "ur")) - ("URR" (insert "UR")) - ("Urr" (insert "Ur")) - ("yff" (insert "yf")) - ("YFF" (insert "YF")) - ("Yff" (insert "Yf")) - ("yjj" (insert "yj")) - ("YJJ" (insert "YJ")) - ("Yjj" (insert "Yj")) - ("yrr" (insert "yr")) - ("YRR" (insert "YR")) - ("Yrr" (insert "Yr")) - ("yxx" (insert "yx")) - ("YXX" (insert "YX")) - ("Yxx" (insert "Yx")) - ("ddd" (insert "dd")) - ("DDD" (insert "DD")) - ("Ddd" (insert "Dd"))) (escape - ("\\w" ?w) - ("\\W" ?W) - ("\\a" ?a) - ("\\A" ?A) - ("\\e" ?e) - ("\\E" ?E) - ("\\o" ?o) - ("\\O" ?O) - ("\\s" ?s) - ("\\S" ?S) - ("\\f" ?f) - ("\\F" ?F) - ("\\r" ?r) - ("\\R" ?R) - ("\\x" ?x) - ("\\X" ?X) - ("\\j" ?j) - ("\\J" ?J) - ("\\d" ?d) - ("\\D" ?D) - ("\\\\" ?\\)) + ("\\")) + (backspace ((BackSpace) (undo)))) (state (init - (map1 (delete @-) (pushback 1) (shift main))) + ;; The variable MARKED indicates whether a vowel is typed or not. + (t (set MARKED 0)) + (vowel (set MARKED 1) (shift after-vowel)) + (d-bar) + (escape (shift escape)) + (backspace)) + + ;; The state shifted to when a vowel is typed. The vowel is the + ;; first character of the preedit buffer. + (after-vowel + (consonant (shift after-vc)) + (d-bar (shift after-vc)) + (double (shift after-vc)) + (vowel (shift init)) + (diacritical (shift init)) + (backspace)) - (main - (map1 (shift edit)) - (map2 (shift edit)) - (map3 (shift init)) - (escape (shift init)) - (backspace (shift init))) + ;; The state shifted to when a vowel and consonant are typed. The + ;; vowel is the first character of the preedit buffer. + (after-vc + (diacritical (shift init))) - (edit - (backspace))) + (escape + "a" + (nil (shift init) (unhandle)))) ;; Local Variables: ;; coding: utf-8 -- 1.7.10.4