From 49e37b65f03f00f7e56fb62f67edd776170a50bb Mon Sep 17 00:00:00 2001 From: handa Date: Thu, 24 Jan 2008 07:43:53 +0000 Subject: [PATCH] New file. --- MIM/vi-tcvn.mim | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 MIM/vi-tcvn.mim diff --git a/MIM/vi-tcvn.mim b/MIM/vi-tcvn.mim new file mode 100644 index 0000000..aa98da7 --- /dev/null +++ b/MIM/vi-tcvn.mim @@ -0,0 +1,169 @@ +;; vi-tcvn.mim -- Input method for Vietnames with TCVN6064 key sequence +;; Copyright (C) 2008 +;; 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. + (t (set C @-1) (set V-1 0) (set V-2 0) (set V-3 0) (set C-AFTER-V 0) + (set SELECT 0)) + + (consonant (set C @-1)) + (consonant-ext (set C @-1)) + ;; 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)) + + ;; 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: -- 1.7.10.4