New file.
authorntakahas <ntakahas>
Fri, 24 Oct 2008 07:23:24 +0000 (07:23 +0000)
committerntakahas <ntakahas>
Fri, 24 Oct 2008 07:23:24 +0000 (07:23 +0000)
MIM/ta-lk-renganathan.mim [new file with mode: 0644]

diff --git a/MIM/ta-lk-renganathan.mim b/MIM/ta-lk-renganathan.mim
new file mode 100644 (file)
index 0000000..918237c
--- /dev/null
@@ -0,0 +1,654 @@
+;; ta-lk-renganathan.mim -- Tamil input method with Renganathan layout
+;; 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 ta lk-renganathan)
+
+(description "Tamil input method with Renganathan layout.
+For the detail, see the page: <http://www.locallanguages.lk/>
+")
+
+(title "க")
+
+(variable
+ (use-surrounding-text (_"Surrounding text vs. preedit
+If 1, try to use surrounding text.  Otherwise, use preedit.")
+                      0 1 0))
+
+(macro
+ (pre-proc
+  (cond
+   ((= @-1 0x200C)
+    (delete @-1)))
+  (cond
+   ((= @+1 0x200C)
+    (delete @+1))))
+
+ (post-proc
+  (cond
+   ((& (>= @-1 0x0B95) (<= @-1 0x0BB9) ; a consonant
+       (>= @+1 0x0BC6) (<= @+1 0x0BCC))        ; a left/two-part vowel sign
+    ;; prevent syllable formation
+    0x200C)
+
+   ((& (| (< @-2 0x0B95) (> @-2 0x0BB9))  ; not a consonant
+       (>= @-1 0x0BC6) (<= @-1 0x0BCC)   ; a left/two-part vowel sign
+       (>= @+1 0x0B95) (<= @+1 0x0BB9)   ; a consonant
+       (| (< @+2 0x0BBE) (> @+2 0x0BD7))) ; not a vowel sign
+    ;; exchange @-1 and @+1
+    (set vs @-1)
+    (set c @+1)
+    (delete @-1)
+    (delete @+1)
+    (insert c)
+    (insert vs))
+
+   ((& (= @-1 0x200C)
+       (| (< @-2 0x0B95) (> @-2 0x0BB9)        ; not a constant
+         (< @+1 0x0BC6) (> @+1 0x0BCC))) ; not a left/two-part vowel sign
+    ;; delete unnecessary ZWNJ
+    (delete @-1))
+
+   ((& (= @+1 0x200C)
+       (| (< @-1 0x0B95) (> @-1 0x0BB9)        ; not a constant
+         (< @+2 0x0BC6) (> @+2 0x0BCC))) ; not a left/two-part vowel sign
+    ;; delete unnecessary ZWNJ
+    (delete @+1))))
+
+ (consonant-proc
+  (move @<)
+  (cond
+   ((= @-1 0x200C)
+    (delete @-1)))
+  (set vs 0)
+  (cond
+   ((& (>= @-1 0x0BC6) (<= @-1 0x0BC8))        ; a left vowel sign
+    (cond
+     ((= @-2 0x200C)
+      (set vs @-1)
+      (delete @-2))
+     ((| (< @-2 0x0B95) (> @-2 0x0BB9))        ; not a consonant
+      (set vs @-1)
+      (delete @-1)))))
+
+  (move @>)
+  (cond
+   ((& (= @+1 0x200C)
+       (| (< @+2 0x0BC6) (> @+2 0x0BCC))) ; not a left vowel sign
+    (delete @+1)))
+
+  (cond
+   ((= vs 0x0BC6)
+    (cond
+     ((= @+1 0x0BBE)
+      (delete @+1)
+      0x0BCA)
+     ((| (= @+1 0x0BB3) (= @+1 0x0BD7))
+      (delete @+1)
+      0x0BCC)
+     (1
+      0x0BC6)))
+   ((= vs 0x0BC7)
+    (cond
+     ((= @+1 0x0BBE)
+      (delete @+1)
+      0x0BCB)
+     (1
+      0x0BC7)))
+   ((= vs 0x0BC8)
+    0x0BC8))
+
+  (cond
+   ((& (>= @-1 0x0B95) (<= @-1 0x0BB9) ; a consonant
+       (>= @+1 0x0BC6) (<= @+1 0x0BCC))        ; a left vowel sign
+    0x200C)))
+
+ (check-surrounding-text
+  (cond
+   ((& (= @+1 0x0B95) (= @+2 0x0BCD) (= @+3 0x0BB7)) ; k.ssa follows
+    0x0B95 0x0BCD 0x0BB7
+    (delete @+3))
+   ((& (>= @+1 0x0B95) (<= @+1 0x0BB9))        ; a consonant follows
+    (set c @+1)
+    (insert c)
+    (delete @+1))
+   ((& (>= @-1 0x0B95) (<= @-1 0x0BB9))        ; a consonant precedes
+    0x200C)))
+ )
+
+(map
+ (starter
+  ("q") ("w") ("e") ("r") ("t") ("y") ("u") ("i") ("o") ("p") ("[") ("]")
+  ("a") ("s") ("d") ("f") ("g") ("h") ("j") ("k") ("l") (";")
+  ("z") ("x") ("c") ("v") ("b") ("n") ("m") ("`")
+  ("Q") ("W") ("E") ("R") ("T") ("Y") ("U") ("I") ("O") ("P") ("{") ("}")
+  ("A") ("S") ("D") ("F") ("G") ("H") ("J") ("K") ("L")
+  ("Z") ("X") ("C") ("V") ("B") ("N") ("M")
+  ((A-q)) ((A-w)) ((A-e)) ((A-r)) ((A-t)) ((A-y)) ((A-u)) ((A-i))
+  ((A-1)) ((A-2)) ((A-3)) ((A-4)) ((A-5)) ((A-6)) ((A-7)) ((A-8)) ((A-9))
+  ((A-0)) ((A-`)) ((A-=)) ((A--))
+  ((BackSpace)) ((Delete)))
+
+ (composite
+  ("f;" "க்")                              ; 0B95 0BCD
+  ("f;W" "க்‌ஷ")                       ; 0B95 0BCD 200C 0BB7
+  ("Zh" "ஒளா")                           ; 0B92 0BB3 0BBE
+  ("Zp" "ஒளி")                           ; 0B92 0BB3 0BBF
+  ("ZP" "ஒளீ")                           ; 0B92 0BB3 0BC0
+  ("Z[" "ஒளு")                           ; 0B92 0BB3 0BC1
+  ("Z{" "ஒளூ")                           ; 0B92 0BB3 0BC2
+  ("Z;" "ஒள்")                           ; 0B92 0BB3 0BCD
+  ("xs" "ஔ")                         ; 0B94
+  ("xsh" "ஒளா")                          ; 0B92 0BB3 0BBE
+  ("xsp" "ஒளி")                          ; 0B92 0BB3 0BBF
+  ("xsP" "ஒளீ")                          ; 0B92 0BB3 0BC0
+  ("xs[" "ஒளு")                          ; 0B92 0BB3 0BC1
+  ("xs{" "ஒளூ")                          ; 0B92 0BB3 0BC2
+  ("xs;" "ஒள்")                          ; 0B92 0BB3 0BCD
+  )
+
+ (consonant
+  ("f" "க")                          ; 0B95
+  ("q" "ங")                          ; 0B99
+  ("r" "ச")                          ; 0B9A
+  ("E" "ஜ")                          ; 0B9C
+  ("]" "ஞ")                          ; 0B9E
+  ("l" "ட")                          ; 0B9F
+  ("z" "ண")                          ; 0BA3
+  ("j" "த")                          ; 0BA4
+  ("e" "ந")                          ; 0BA8
+  ("d" "ன")                          ; 0BA9
+  ("g" "ப")                          ; 0BAA
+  ("k" "ம")                          ; 0BAE
+  ("a" "ய")                          ; 0BAF
+  ("u" "ர")                          ; 0BB0
+  ("w" "ற")                          ; 0BB1
+  ("y" "ல")                          ; 0BB2
+  ("o" "ழ")                          ; 0BB4
+  ("t" "வ")                          ; 0BB5
+  ("U" "ஶ")                          ; 0BB6
+  ("Q" "ஸ")                          ; 0BB8
+  ("R" "ஹ")                          ; 0BB9
+
+  ("T" "க்ஷ")                            ; 0B95 0BCD 0BB7
+  )
+
+ (sign
+  ("p" "ி")                          ; 0BBF
+  ("P" "ீ")                          ; 0BC0
+  ("[" "ு")                          ; 0BC1
+  ("{" "ூ")                          ; 0BC2
+  (";" "்")                          ; 0BCD
+  )
+
+ (lla
+  ("s"))
+
+ (ssa
+  ("W"))
+
+ (aa
+  ("h"))
+
+ (e
+  ("n"))
+
+ (ee
+  ("N"))
+
+ (ai
+  ("i"))
+
+ (backspace
+  ((BackSpace)))
+
+ (delete
+  ((Delete)))
+
+ (misc
+  ("`" "ஃ")                          ; 0B83
+  ("m" "அ")                          ; 0B85
+  ("M" "ஆ")                          ; 0B86
+  ("b" "இ")                          ; 0B87
+  ("B" "ஈ")                          ; 0B88
+  ("c" "உ")                          ; 0B89
+  ("C" "ஊ")                          ; 0B8A
+  ("v" "எ")                          ; 0B8E
+  ("V" "ஏ")                          ; 0B8F
+  ("I" "ஐ")                          ; 0B90
+  ("x" "ஒ")                          ; 0B92
+  ("X" "ஓ")                          ; 0B93
+  ("Z" "ஔ")                          ; 0B94
+
+  ("O" "ௐ")                          ; 0BD0
+
+  ((A-0) "௦")                                ; 0BE6
+  ((A-1) "௧")                                ; 0BE7
+  ((A-2) "௨")                                ; 0BE8
+  ((A-3) "௩")                                ; 0BE9
+  ((A-4) "௪")                                ; 0BEA
+  ((A-5) "௫")                                ; 0BEB
+  ((A-6) "௬")                                ; 0BEC
+  ((A-7) "௭")                                ; 0BED
+  ((A-8) "௮")                                ; 0BEE
+  ((A-9) "௯")                                ; 0BEF
+  ((A-q) "௰")                                ; 0BF0
+  ((A-w) "௱")                                ; 0BF1
+  ((A-e) "௲")                                ; 0BF2
+  ((A-y) "௳")                                ; 0BF3
+  ((A-u) "௴")                                ; 0BF4
+  ((A-i) "௵")                                ; 0BF5
+  ((A-r) "௶")                                ; 0BF6
+  ((A-t) "௷")                                ; 0BF7
+  ((A-`) "௸")                                ; 0BF8
+  ((A-=) "௹")                                ; 0BF9
+  ((A--) "௺")                                ; 0BFA
+
+  ("Y" "ஶ்ரீ")                         ; 0BB6 0BCD 0BB0 0BC0
+
+  ("}" ";")                            ; 003B
+
+  ("A" "")
+  ("S" "")
+  ("D" "")
+  ("F" "")
+  ("G" "")
+  ("H" "")
+  ("J" "")
+  ("K" "")
+  ("L" "")
+  ))
+
+(state
+ (init
+  (starter
+   (pushback 1)
+   (cond
+    ((& (= use-surrounding-text 1) (= @-0 -1))
+     (shift surrounding-text))
+    (1
+     (shift preedit)))))
+
+ (surrounding-text
+  (consonant
+   (consonant-proc)
+   (commit))
+
+  (lla
+   (cond
+    ((= @-1 0x200C)
+     (delete @-1)))
+
+   (cond
+    ((& (>= @-2 0x0B95) (<= @-2 0x0BB9)        ; a consonant
+       (= @-1 0x0BC6))
+     (delete @-1)
+     0x0BCC
+     (cond
+      ((= @+1 0x200C)
+       (delete @+1))))
+    ((= @-1 0x0B92)
+     (delete @-1)
+     0x0B94
+     (cond
+      ((= @+1 0x200C)
+       (delete @+1))))
+    (1
+     0x0BB3
+     (consonant-proc)))
+
+   (commit))
+
+  (ssa
+   (cond
+    ((= @-1 0x200C)
+     (delete @-1)))
+
+   (cond
+    ((& (= @-2 0x0B95) (= @-1 0x0BCD))
+     0x200C))
+   0x0BB7
+   (consonant-proc)
+
+   (commit))
+
+  (sign
+   (cond
+    ((= @+1 0x200C)
+     (delete @+1)))
+   (move @<)
+   (cond
+    ((= @-1 0x200C)
+     (delete @-1)))
+
+   (cond
+    ((= @-1 0x0B94)
+     (delete @-1)
+     0x0B92 0x0BB3)
+    ((= @-1 0x0BCC)
+     (delete @-1)
+     0x0BC6 0x0BB3))
+
+   (commit))
+
+  (aa
+   (pre-proc)
+
+   (cond
+    ((= @-1 0x0BC6)
+     (cond
+      ((& (| (< @-3 0x0B95) (> @-3 0x0BB9)) ; not a consonant
+         (= @-2 0x200C))
+       (delete @-2))
+      (1
+       (delete @-1)))
+     0x0BCA)
+
+    ((= @-1 0x0BC7)
+     (cond
+      ((& (| (< @-3 0x0B95) (> @-3 0x0BB9)) ; not a consonant
+         (= @-2 0x200C))
+       (delete @-2))
+      (1
+       (delete @-1)))
+     0x0BCB)
+
+    ((= @-1 0x0B94)
+     (delete @-1)
+     0x0B92 0x0BB3 0x0BBE)
+
+    ((= @-1 0x0BCC)
+     (delete @-1)
+     0x0BC6 0x0BB3 0x0BBE)
+
+    (1
+     0x0BBE))
+
+   (commit))
+
+  (e
+   (pre-proc)
+
+   (cond
+    ;; additional check-surrounding-text for this vowel sign
+    ((& (>= @+1 0x0B95) (<= @+1 0x0BB9)        ; a consonant
+       (= @+2 0x0BB3))
+     (set c @+1)
+     (delete @+2)
+     (insert c)
+     0x0BCC)
+
+    ;; ordinary check-surrounding-text
+    (1
+     (check-surrounding-text)
+     (cond
+      ((= @+1 0x0BBE)
+       (delete @+1)
+       0x0BCA)
+      ((= @+1 0x0BD7)
+       (delete @+1)
+       0x0BCC)
+      (1
+       0x0BC6))))
+
+   (commit))
+
+  (ee
+   (pre-proc)
+
+   (check-surrounding-text)
+   (cond
+    ((= @+1 0x0BBE)
+     (delete @+1)
+     0x0BCB)
+    (1
+     0x0BC7))
+
+   (commit))
+
+  (ai
+   (pre-proc)
+
+   (check-surrounding-text)
+   0x0BC8
+
+   (commit))
+
+  (backspace
+   (pre-proc)
+
+   (cond
+    ((& (>= @-4 0x0B95) (<= @-4 0x0BB9)        ; a consonant
+       (= @-3 0x0BC6)
+       (= @-2 0x0BB3)
+       (| (& (>= @-1 0x0BBE) (<= @-1 0x0BC2)) ; a right/above/below vowel sign
+          (= @-1 0x0BCD)))
+     (delete @-3)
+     0x0BCC)
+
+    ((& (= @-4 0x0BB6) (= @-3 0x0BCD) (= @-2 0x0BB0) (= @-1 0x0BC0)) ; shrii
+     (delete @-4))
+
+    ((& (= @-3 0x0B92)
+       (= @-2 0x0BB3)
+       (| (& (>= @-1 0x0BBE) (<= @-1 0x0BC2)) ; a right/above/below vowel sign
+          (= @-1 0x0BCD)))
+     (delete @-3)
+     0x0B94)
+
+    ((& (= @-3 0x0B95) (= @-2 0x0BCD) (= @-1 0x0BB7)) ; k.ssa
+     (delete @-3))
+
+    ((| (= @-1 0x0BCA) (= @-1 0x0BCC)) ; vowel sign e/ai
+     (delete @-1)
+     0x0BC6)
+
+    ((= @-1 0x0BCB)                    ; vowel sign ee
+     (delete @-1)
+     0x0BC7)
+
+    ((& (>= @-1 0x0BC6) (<= @-1 0x0BC8)) ; a left vowel sign
+     (set vs @-1)
+     (delete @-1)
+     (cond
+      ((& (>= @-1 0x0B95) (<= @-1 0x0BB9)) ; a consonant
+       (cond
+       ((& (= @-3 0x0B95) (= @-2 0x0BCD) (= @-1 0x0BB7)) ; k.ssa
+        (delete @-3))
+       (1
+        (delete @-1)))
+
+       (cond
+       ((& (>= @+1 0x0B95) (<= @+1 0x0BB9)    ; a consonant follows
+           (| (< @+2 0x0BBE) (> @+2 0x0BD7))) ; not a vowel sign
+        ;; visual  : E C1 | C2  ->  E C2 |
+        ;; logical : C1 E | C2  ->  C2 E |
+        (cond
+         ((& (= @+1 0x0B95) (= @+2 0x0BCD) (= @+3 0x0BB7)) ; k.ssa
+          (delete @+3)
+          0x0B95 0x0BCD 0x0BB7)
+         (1
+          (set c @+1)
+          (delete @+1)
+          (insert c)))
+        (insert vs))
+
+       ((& (>= @-1 0x0B95) (<= @-1 0x0BB9)) ; a consonant precedes
+        ;; visual  : C1 E C2 | X  ->  C1 E | X
+        ;; logical : C1 C2 E | X  ->  C1 N E | X
+        0x200C
+        (insert vs))
+
+       (1
+        ;; visual  : X1 E C | X2  ->  X1 E | X2
+        ;; logical : X1 C E | X2  ->  X1 E | X2
+        (insert vs))))
+
+      ((= @-1 0x200C)
+       (delete @-1))))
+
+    (1
+     (delete @-1)))
+
+   (post-proc)
+   (commit))
+
+  (delete
+   (pre-proc)
+
+   (cond
+    ((& (= @+1 0x0BB6) (= @+2 0x0BCD) (= @+3 0x0BB0) (= @+4 0x0C0)) ; shrii
+     (delete @+4))
+
+    ((& (= @+1 0x0B95) (= @+2 0x0BCD) (= @+3 0x0BB7)) ; k.ssa
+     (cond
+      ((& (>= @+4 0x0BC6) (<= @+4 0x0BC8)) ; a left vowel sign
+       (delete @+4)
+       0x0B95 0x0BCD 0x0BB7)
+      ((| (= @+4 0x0BCA) (= @+4 0x0BCB)) ; vowel sign e/ee
+       (delete @+4)
+       0x0B95 0x0BCD 0x0BB7 0x0BBE)
+      ((| (& (>= @+4 0x0BBE) (<= @+4 0x0BC2)) ; vowel sign aa .. uu
+         (= @+4 0x0BCC)                      ; vowel sign ai
+         (= @+4 0x0BCD))                     ; virama
+       (delete @+4))
+      (1
+       (delete @+3))))
+
+    ((& (>= @+1 0x0B95) (<= @+1 0x0BB9)) ; a consonant
+     (set c @+1)
+     (cond
+      ((& (>= @+2 0x0BC6) (<= @+2 0x0BC8)) ; a left vowel sign
+       (delete @+2)
+       (insert c))
+      ((| (= @+2 0x0BCA) (= @+2 0x0BCB)) ; vowel sign e/ee
+       (delete @+2)
+       (insert c)
+       0x0BBE)
+      ((| (& (>= @+2 0x0BBE) (<= @+2 0x0BC2)) ; vowel sign aa .. uu
+         (= @+2 0x0BCC)                      ; vowel sign ai
+         (= @+2 0x0BCD))                     ; virama
+       (delete @+2))
+      (1
+       (delete @+1))))
+
+    ((| (= @+1 0x0BCA) (= @+1 0x0BCB)) ; vowel sign e/ee
+     (delete @+1)
+     0x0BBE)
+
+    ((= @+1 0x0BCC)                    ; vowel sign ai
+     (delete @+1)
+     0x0BB3)
+
+    (1
+     (delete @+1)))
+
+   (post-proc)
+   (commit))
+
+  (misc
+   (move @<)
+   (cond
+    ((= @-1 0x200C)
+     (delete @-1)))
+   (move @>)
+   (cond
+    ((= @+1 0x200C)
+     (delete @+1)))
+   (commit)))
+
+ (preedit
+  (consonant (shift c-state))
+  (composite (commit))
+  (sign (commit))
+  (misc (commit))
+  (lla "ள" (shift c-state))          ; 0BB3
+  (ssa "ஷ" (shift c-state))          ; 0BB7
+  (aa "ா" (commit))                  ; 0BBE
+  (e  "ெ" (shift e-state))           ; 0BC6
+  (ee "ே" (shift ee-state))          ; 0BC7
+  (ai "ை" (shift ai-state)))         ; 0BC8
+
+ (c-state
+  (sign (shift c-s-state))
+  (aa "ா" (shift c-s-state))         ; 0BBE
+  (backspace (undo)))
+
+ (c-s-state
+  (sign
+   (cond
+    ((= @-2 0x0BCC)
+     (move @-)
+     (delete @-)
+     0x0BC6 0x0BB3
+     (move @+))
+    (1
+     (commit)
+     (shift preedit))))
+  (aa
+   "ா"
+   (cond
+    ((= @-2 0x0BCC)
+     (move @-)
+     (delete @-)
+     0x0BC6 0x0BB3
+     (move @+))
+    (1
+     (commit)
+     (shift preedit))))
+  (backspace (undo)))
+
+ (e-state
+  (consonant (move @<) (delete @+) (move @>) "ெ" (shift e-c-state))
+  (lla (delete @-) "ளெ" (shift e-c-state))
+  (ssa (delete @-) "ஷெ" (shift e-c-state))
+  (backspace (delete @-) (shift preedit))
+  (nil (undo -1)))
+
+ (ee-state
+  (consonant (move @<) (delete @+) (move @>) "ே" (shift ee-c-state))
+  (lla (delete @-) "ளே" (shift ee-c-state))
+  (ssa (delete @-) "ஷே" (shift ee-c-state))
+  (backspace (delete @-) (shift preedit))
+  (nil (undo -1)))
+
+ (ai-state
+  (consonant (move @<) (delete @+) (move @>) "ை" (shift c-s-state))
+  (lla (delete @-) "ளை" (shift c-s-state))
+  (ssa (delete @-) "ஷை" (shift c-s-state))
+  (backspace (delete @-) (shift preedit))
+  (nil (undo -1)))
+
+ (e-c-state
+  (aa (delete @-) "ொ" (shift c-s-state))
+  (lla (delete @-) "ௌ" (shift c-s-state))
+  (backspace (delete @<) "ெ" (shift e-state)))
+
+ (ee-c-state
+  (aa (delete @-) "ோ" (shift c-s-state))
+  (backspace (delete @<) "ே" (shift ee-state)))
+ )
+
+;; Local Variables:
+;; coding: utf-8
+;; mode: emacs-lisp
+;; End: