;; 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 (version "1.6.0")) (description "Tamil input method with Renganathan layout. For the detail, see the page: ") (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 ((= @+0 0x200C) (delete @+1)))) (post-proc (cond ((& (>= @-1 0x0B95) (<= @-1 0x0BB9) ; a consonant (>= @+0 0x0BC6) (<= @+0 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 (>= @+0 0x0B95) (<= @+0 0x0BB9) ; a consonant (| (< @+1 0x0BBE) (> @+1 0x0BD7))) ; not a vowel sign ;; exchange @-1 and @+0 (set vs @-1) (set c @+0) (delete @-1) (delete @+1) (insert c) (insert vs)) ((& (= @-1 0x200C) (| (< @-2 0x0B95) (> @-2 0x0BB9) ; not a constant (< @+0 0x0BC6) (> @+0 0x0BCC))) ; not a left/two-part vowel sign ;; delete unnecessary ZWNJ (delete @-1)) ((& (= @+0 0x200C) (| (< @-1 0x0B95) (> @-1 0x0BB9) ; not a constant (< @+1 0x0BC6) (> @+1 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 ((& (= @+0 0x200C) (| (< @+1 0x0BC6) (> @+1 0x0BCC))) ; not a left vowel sign (delete @+1))) (cond ((= vs 0x0BC6) (cond ((= @+0 0x0BBE) (delete @+1) 0x0BCA) ((| (= @+0 0x0BB3) (= @+0 0x0BD7)) (delete @+1) 0x0BCC) (1 0x0BC6))) ((= vs 0x0BC7) (cond ((= @+0 0x0BBE) (delete @+1) 0x0BCB) (1 0x0BC7))) ((= vs 0x0BC8) 0x0BC8)) (cond ((& (>= @-1 0x0B95) (<= @-1 0x0BB9) ; a consonant (>= @+0 0x0BC6) (<= @+0 0x0BCC)) ; a left vowel sign 0x200C))) (check-surrounding-text (cond ((& (= @+0 0x0B95) (= @+1 0x0BCD) (= @+2 0x0BB7)) ; k.ssa follows 0x0B95 0x0BCD 0x0BB7 (delete @+3)) ((& (>= @+0 0x0B95) (<= @+0 0x0BB9)) ; a consonant follows (set c @+0) (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 ((= @+0 0x200C) (delete @+1)))) ((= @-1 0x0B92) (delete @-1) 0x0B94 (cond ((= @+0 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 ((= @+0 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 ((& (>= @+0 0x0B95) (<= @+0 0x0BB9) ; a consonant (= @+1 0x0BB3)) (set c @+0) (delete @+2) (insert c) 0x0BCC) ;; ordinary check-surrounding-text (1 (check-surrounding-text) (cond ((= @+0 0x0BBE) (delete @+1) 0x0BCA) ((= @+0 0x0BD7) (delete @+1) 0x0BCC) (1 0x0BC6)))) (commit)) (ee (pre-proc) (check-surrounding-text) (cond ((= @+0 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 ((& (>= @+0 0x0B95) (<= @+0 0x0BB9) ; a consonant follows (| (< @+1 0x0BBE) (> @+1 0x0BD7))) ; not a vowel sign ;; visual : E C1 | C2 -> E C2 | ;; logical : C1 E | C2 -> C2 E | (cond ((& (= @+0 0x0B95) (= @+1 0x0BCD) (= @+2 0x0BB7)) ; k.ssa (delete @+3) 0x0B95 0x0BCD 0x0BB7) (1 (set c @+0) (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 ((& (= @+0 0x0BB6) (= @+1 0x0BCD) (= @+2 0x0BB0) (= @+3 0x0C0)) ; shrii (delete @+4)) ((& (= @+0 0x0B95) (= @+1 0x0BCD) (= @+2 0x0BB7)) ; k.ssa (cond ((& (>= @+3 0x0BC6) (<= @+3 0x0BC8)) ; a left vowel sign (delete @+4) 0x0B95 0x0BCD 0x0BB7) ((| (= @+3 0x0BCA) (= @+3 0x0BCB)) ; vowel sign e/ee (delete @+4) 0x0B95 0x0BCD 0x0BB7 0x0BBE) ((| (& (>= @+3 0x0BBE) (<= @+3 0x0BC2)) ; vowel sign aa .. uu (= @+3 0x0BCC) ; vowel sign ai (= @+3 0x0BCD)) ; virama (delete @+4)) (1 (delete @+3)))) ((& (>= @+0 0x0B95) (<= @+0 0x0BB9)) ; a consonant (set c @+0) (cond ((& (>= @+1 0x0BC6) (<= @+1 0x0BC8)) ; a left vowel sign (delete @+2) (insert c)) ((| (= @+1 0x0BCA) (= @+1 0x0BCB)) ; vowel sign e/ee (delete @+2) (insert c) 0x0BBE) ((| (& (>= @+1 0x0BBE) (<= @+1 0x0BC2)) ; vowel sign aa .. uu (= @+1 0x0BCC) ; vowel sign ai (= @+1 0x0BCD)) ; virama (delete @+2)) (1 (delete @+1)))) ((| (= @+0 0x0BCA) (= @+0 0x0BCB)) ; vowel sign e/ee (delete @+1) 0x0BBE) ((= @+0 0x0BCC) ; vowel sign ai (delete @+1) 0x0BB3) (1 (delete @+1))) (post-proc) (commit)) (misc (move @<) (cond ((= @-1 0x200C) (delete @-1))) (move @>) (cond ((= @+0 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 (nil (unhandle))) (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: