File: //usr/share/m17n/tai-sonla.mim
;; 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)))