;; tai-sonla.mim -- Tai Viet input method with Phonetic sequence ;; Copyright (C) 2007 ;; Thua Thien Hue Center of Information Technology (HueCIT, Vietnam) ;; Copyright (C) 2007 ;; National Institute of Advanced Industrial Science and Technology (AIST) ;; Registration Number H15PRO112 ;; This file is part of the m17n contrib; a sub-part of the m17n ;; library. ;; The m17n library is free software; you can redistribute it and/or ;; modify it under the terms of the GNU Lesser General Public License ;; as published by the Free Software Foundation; either version 2.1 of ;; the License, or (at your option) any later version. ;; The m17n library is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; Lesser General Public License for more details. ;; You should have received a copy of the GNU Lesser General Public ;; License along with the m17n library; if not, write to the Free ;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. (input-method tai sonla-kbd) (title "꫞") (description (_"Tai Viet input method using the phonetic key sequence with the Tai Son La keyboard layout. The phonetic key sequence means that you type a syllable in this order: C W? V v? F? T? where C is an initial consonant, W is a label for labializing C ('ꪫ'), V is a vowel (V1:prefix, V2:combining, or V3:postfix), v is the second vowel of a digraph vowel (in the case that V is 'ꪹ' and v is 'ꪸ', 'ꪷ', or 'ꪱ'), F is a final consonant, T is a tonemark (spacing or combining). You can type special symbols by these keys: '$' -> 'ꫛ' '#' -> 'ꫜ' '%' -> 'ꫝ' '!' -> '꫞' '@' -> '꫟' ")) (macro (adjust-tone (set TT @-1) (delete @-) (cond ((| (= T ?ꫀ) (= T ?ꫂ)) (delete @-) (move @>)) ((> T 0) (move M) (delete @+) (move @>))) (set T TT) (cond ((| (= T ?ꫀ) (= T ?ꫂ)) (insert T)) ((> T 0) (move M) (insert T) (move @>))))) (map (consonant ("k" "ꪀ") ("K" "ꪁ") ("x" "ꪂ") ("X" "ꪃ") ("q" "ꪄ") ("Q" "ꪅ") ("|" "ꪆ") ("\"" "ꪇ") ("g" "ꪈ") ("G" "ꪉ") ("c" "ꪊ") ("C" "ꪋ") ("." "ꪌ") (">" "ꪍ") ("s" "ꪎ") ("S" "ꪏ") ("z" "ꪐ") ("Z" "ꪑ") ("d" "ꪒ") ("D" "ꪓ") ("t" "ꪔ") ("T" "ꪕ") ("w" "ꪖ") ("W" "ꪗ") ("n" "ꪘ") ("N" "ꪙ") ("b" "ꪚ") ("B" "ꪛ") ("p" "ꪜ") ("P" "ꪝ") ("/" "ꪞ") ("?" "ꪟ") ("f" "ꪠ") ("F" "ꪡ") ("m" "ꪢ") ("M" "ꪣ") ("j" "ꪤ") ("J" "ꪥ") ("r" "ꪦ") ("R" "ꪧ") ("l" "ꪨ") ("L" "ꪩ") ("v" "ꪪ") ("V" "ꪫ") ("h" "ꪬ") ("H" "ꪭ") ("o" "ꪮ") ("O" "ꪯ")) (final-c ("b" "ꪚ") ("d" "ꪒ") ("k" "ꪀ") ("J" "ꪥ") ("M" "ꪣ") ("N" "ꪙ") ("G" "ꪉ") ("V" "ꪫ")) (high-v ("V" "ꪫ")) (special ("$" "ꫛ") ("#" "ꫜ") ("%" "ꫝ") ("!" "꫞") ("@" "꫟")) (vowel-pre ("e" "ꪵ") ("," "ꪶ") ("E" "ꪹ") ("Y" "ꪻ") ("y" "ꪼ") ("o^" "ꪶ")) (vowel-combining ("}" "ꪰ") ("i" "ꪲ") ("U" "ꪳ") ("u" "ꪴ") ("[" "ꪷ") ("I" "ꪸ") ("{" "ꪾ") ("awm" "ꪾ")) (vowel-post ("a" "ꪱ") ;; ("A" "ꪱꪲ") ("<" "ꪺ") ("]" "ꪽ") ;; Note: "ꪮ" and "ꪯ" can be consonant and vowel. ("o" "ꪮ") ("O" "ꪯ")) (vowel-digraph ("r" "ꪸ") ("R" "ꪷ") ("A" "ꪱ")) (tone (":" "ꫀ") (";" "ꫂ") ("\"" "꪿") ("'" "꫁")) (punctuation ("!!" "!") ("@@" "@") ("##" "#") ("$$" "$") ("%%" "%") (",," ",") (".." ".") (";;" ";") ("::" ":") (";;" ";") ("\"\"" "\"") ("//" "/") ("||" "|") ("''" "'") ("!!" "?") ("??" "?") ("[[" "[") ("]]" "]") ("{{" "{") ("}}" "}") ("<<" "<") (">>" ">")) (backspace ((BackSpace) (sub K 1) (undo K)))) (state (init (t (set K 0)) (consonant (mark M) (shift after-c)) (special) (punctuation) (vowel-pre) (vowel-post) (vowel-combining) (tone)) (after-c (t (mark M) (set V2 0) (set K @@)) (high-v (mark M)) (vowel-pre (set V1 @-1) (delete @-) (move @<) (insert V1) (move @>) (shift after-c-vpre)) (vowel-combining (cond ((> V2 0) (move @-) (delete @-) (move @>)) (1 (set K @@))) (set V2 @-1) (mark M)) (vowel-post (shift after-c-v)) (vowel-digraph (mark M) (move @<) (insert "ꪹ") (move @>) (shift after-c-v)) (final-c (delete @-) (pushback 1) (shift init)) (backspace) (nil (shift after-c-v))) (after-c-vpre (t (set K @@)) (vowel-combining (set V2 @-1) (mark M) (shift after-c-v)) (vowel-post (shift after-c-v)) (backspace) (nil (shift after-c-v))) (after-c-v (t (set T 0) (set K @@)) (tone (cond ((= T 0) (set K @@))) (adjust-tone)) (final-c (shift after-c-v-f)) (backspace)) (after-c-v-f (t (set K @@)) (tone (adjust-tone)) (backspace)))