177 lines
5.9 KiB
Plaintext
177 lines
5.9 KiB
Plaintext
;; vi-tcvn.mim -- Input method for Vietnames with TCVN6064 key sequence
|
|
;; Copyright (C) 2008, 2009, 2010
|
|
;; National Institute of Advanced Industrial Science and Technology (AIST)
|
|
;; Registration Number H15PRO112
|
|
|
|
;; This file is part of the m17n database; 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 vi tcvn)
|
|
|
|
(description (_"Vietnames input method using the TCVN6064 sequence.
|
|
Typing Backslash ('\\') toggles the normal mode and English mode.
|
|
The following variables are customizable:
|
|
tone-mark-on-last: control tone mark position in equivocal cases
|
|
backspace-is-undo: control the action of Backspace key (delete or undo)"))
|
|
|
|
(title "Ắ(TCVN)")
|
|
|
|
(variable
|
|
(tone-mark-on-last
|
|
(_"Flag to control tone mark position in equivocal cases.
|
|
If this variable is 0 (the default), put tone mark on the first vowel
|
|
in such equivocal cases as \"oa\", \"oe\", \"uy\".
|
|
Otherwise, put tone mark on the last vowel.")
|
|
0 0 1)
|
|
|
|
(backspace-is-undo
|
|
(_"Flag to control the action of Backspace key (delete or undo).
|
|
If this variable is 0 (the default), Backspace key deletes the previous
|
|
character (e.g. \"q u a i s BS\" => \"quá\").
|
|
If the value is 1, Backspace key undoes the previous key
|
|
\(e.g. \"q u a i s BS\" => \"quai\").")
|
|
0 0 1))
|
|
|
|
(include (t nil vi-base) macro)
|
|
(include (t nil vi-base) map)
|
|
|
|
(map
|
|
(vowel-ext
|
|
("2" ("âấầẩẫậ")) ("@" ("ÂẤẦẨẪẬ"))
|
|
("1" ("ăắằẳẵặ")) ("!" ("ĂẮẰẲẴẶ"))
|
|
("3" ("êếềểễệ")) ("#" ("ÊẾỀỂỄỆ"))
|
|
("4" ("ôốồổỗộ")) ("$" ("ÔỐỒỔỖỘ"))
|
|
("]" ("ơớờởỡợ")) ("}" ("ƠỚỜỞỠỢ"))
|
|
("[" ("ưứừửữự")) ("{" ("ƯỨỪỬỮỰ")))
|
|
|
|
(consonant-ext
|
|
("0" ?đ) (")" ?Đ))
|
|
|
|
(tone-mark
|
|
("8" (set SELECT 1) ?1)
|
|
("5" (set SELECT 2) ?2)
|
|
("6" (set SELECT 3) ?3)
|
|
("7" (set SELECT 4) ?4)
|
|
("9" (set SELECT 5) ?5))
|
|
|
|
(misc
|
|
("=" ?₫) ("==" ?=)
|
|
((A-1) ?1) ((A-2) ?2) ((A-3) ?3) ((A-4) ?4) ((A-5) ?5)
|
|
((A-6) ?6) ((A-7) ?7) ((A-8) ?8) ((A-9) ?9) ((A-0) ?0)
|
|
((A--) ?-) ((A-=) ?=) ((A-\\) ?\\) ((A-\[) ?[) ((A-\]) ?])
|
|
((A-!) ?!) ((A-@) ?@) ((A-\#) ?#) ((A-$) ?$) ((A-%) ?%)
|
|
((A-^) ?^) ((A-&) ?&) ((A-*) ?*) ((A-\() ?\() ((A-\)) ?\))
|
|
((A-_) ?_) ((A-+) ?+) ((A-\|) ?\|) ((A-{) ?{) ((A-}) ?}))
|
|
|
|
(temporary-escape
|
|
("22" "2") ("@@" "@")
|
|
("11" "1") ("!!" "!")
|
|
("33" "3") ("##" "##")
|
|
("44" "4") ("$$" "$")
|
|
("]]" "]") ("}}" "}")
|
|
("[[" "[") ("{{" "{")
|
|
("00" "0") ("))" ")")))
|
|
|
|
(state
|
|
(init
|
|
;; Initialize variables. C is the initial consonant. V-N is the
|
|
;; (N-1)th vowel from the last. C-AFTER-V is a number of consonants
|
|
;; typed after vowel. NST is 1 iff surrounding text is not supported.
|
|
(t (set C @-1) (set V-1 0) (set V-2 0) (set V-3 0) (set C-AFTER-V 0)
|
|
(set SELECT 0) (set NST (= @-0 -2)))
|
|
|
|
(consonant (set C @-1) (cond (NST (shift after-c))))
|
|
(consonant-ext (set C @-1) (cond (NST (shift after-c))))
|
|
;; Mark M remembers the preedit position after the last vowel.
|
|
(vowel (mark M) (set V-2 V-1) (set V-1 @-1) (shift after-v))
|
|
(vowel-ext (mark M) (set V-2 V-1) (set V-1 @-1) (shift after-v))
|
|
(temporary-escape (shift temporary-escape))
|
|
(permanent-escape (shift escape-in-normal-mode))
|
|
(misc)
|
|
(smart-quotes))
|
|
|
|
;; The state shifted to when an initial consonants is typed and
|
|
;; surrounding text is not supported.
|
|
(after-c
|
|
(vowel (mark M) (set V-2 V-1) (set V-1 @-1) (shift after-v))
|
|
(vowel-ext (mark M) (set V-2 V-1) (set V-1 @-1) (shift after-v)))
|
|
|
|
;; The state shifted to when a vowel is typed.
|
|
(after-v
|
|
(consonant (shift after-vc))
|
|
(consonant-ext (shift after-vc))
|
|
(vowel (mark M) (set V-3 V-2) (set V-2 V-1) (set V-1 @-1)
|
|
(move T) (select 0) (handle-mark) (move M))
|
|
(vowel-ext (mark M) (set V-3 V-2) (set V-2 V-1) (set V-1 @-1)
|
|
(move T) (select 0) (handle-mark) (move M))
|
|
(tone-mark (delete @-) (pushback 1) (shift after-t))
|
|
(backspace (delete @-)
|
|
(cond (V-3 (set V-1 V-2) (set V-2 V-3) (set V-3 0)
|
|
(cond ((> TPLACE 2) (set SELECT 0))))
|
|
(V-2 (set V-1 V-2) (set V-2 0)
|
|
(cond ((> TPLACE 1) (set SELECT 0))))
|
|
(1 (shift init)))))
|
|
|
|
;; The state shifted to when a consonant is typed after a vowel.
|
|
(after-vc
|
|
(t (set C-AFTER-V 1))
|
|
(consonant (add C-AFTER-V 1))
|
|
(consonant-ext (add C-AFTER-V 1))
|
|
(tone-mark (delete @-) (pushback 1) (shift after-t))
|
|
(backspace (delete @-)
|
|
(sub C-AFTER-V 1)
|
|
(cond ((= C-AFTER-V 0) (shift after-v)))))
|
|
|
|
;; The state shifted to when a tone-mark is typed.
|
|
(after-t
|
|
(t (set CURRENT-SELECT -1))
|
|
(tone-mark (cond ((= CURRENT-SELECT SELECT) (move T) (select 0) (move @>)
|
|
(shift temporary-escape))
|
|
(1 (delete @-) (handle-mark) (set CURRENT-SELECT SELECT))))
|
|
(nil (cond (C-AFTER-V (shift after-vc))
|
|
(1 (shift after-v)))))
|
|
|
|
(temporary-escape
|
|
"en"
|
|
(t (commit))
|
|
(alnum (commit)))
|
|
|
|
(escape-in-normal-mode
|
|
"EN"
|
|
(permanent-escape (insert "\\") (shift init))
|
|
;; Any other key force shifting to permanent-escape.
|
|
(nil (shift permanent-escape)))
|
|
|
|
(permanent-escape
|
|
"EN"
|
|
(t (set ESCAPE 1))
|
|
(permanent-escape (shift escape-in-permanent-escape))
|
|
;; Unhandle any characters.
|
|
(nil (unhandle)))
|
|
|
|
(escape-in-permanent-escape
|
|
"Ắ"
|
|
(permanent-escape (insert "\\") (commit) (shift permanent-escape))
|
|
;; Any other key force shifting to init
|
|
))
|
|
|
|
;; Local Variables:
|
|
;; coding: utf-8
|
|
;; mode: lisp
|
|
;; End:
|