New file.
authorhanda <handa>
Thu, 24 Jan 2008 07:43:53 +0000 (07:43 +0000)
committerhanda <handa>
Thu, 24 Jan 2008 07:43:53 +0000 (07:43 +0000)
MIM/vi-tcvn.mim [new file with mode: 0644]

diff --git a/MIM/vi-tcvn.mim b/MIM/vi-tcvn.mim
new file mode 100644 (file)
index 0000000..aa98da7
--- /dev/null
@@ -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: