;; si-wijesekera.mim -- Sinhala input method with wijesekera method ;; Copyright (C) 2005, 2006 ;; 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 si wijesekera) (description "Sinhala input method based on SLS 1134 Rev. 2:2004. This input method requires surrounding text support. ") (title "සි") (map (consonant ("l" "ක") ; 0D9A ("L" "ඛ") ; 0D9B ("." "ග") ; 0D9C (">" "ඝ") ; 0D9D ("X" "ඞ") ; 0D9E ((A-.) "ඟ") ; 0D9F ("p" "ච") ; 0DA0 ("P" "ඡ") ; 0DA1 ("c" "ජ") ; 0DA2 ("C" "ඣ") ; 0DA3 ("\[" "ඤ") ; 0DA4 ("{" "ඥ") ; 0DA5 ((A-c) "ඦ") ; 0DA6 ("g" "ට") ; 0DA7 ("G" "ඨ") ; 0DA8 ("v" "ඩ") ; 0DA9 ("V" "ඪ") ; 0DAA ("K" "ණ") ; 0DAB ((A-v) "ඬ") ; 0DAC (";" "ත") ; 0DAD (":" "ථ") ; 0DAE ("o" "ද") ; 0DAF ("O" "ධ") ; 0DB0 ("k" "න") ; 0DB1 ((A-o) "ඳ") ; 0DB3 ("m" "ප") ; 0DB4 ("M" "ඵ") ; 0DB5 ("n" "බ") ; 0DB6 ("N" "භ") ; 0DB7 ("u" "ම") ; 0DB8 ("U" "ඹ") ; 0DB9 ("h" "ය") ; 0DBA ("r" "ර") ; 0DBB ("," "ල") ; 0DBD ("j" "ව") ; 0DC0 ("Y" "ශ") ; 0DC1 ("I" "ෂ") ; 0DC2 ("i" "ස") ; 0DC3 ("y" "හ") ; 0DC4 ("<" "ළ") ; 0DC5 ("F" "ෆ") ; 0DC6 ) (misc ("x" "ං") ; 0D82 ((A-x) "ඃ") ; 0D83 ("w" "අ") ; 0D85 ("b" "ඉ") ; 0D89 ("B" "ඊ") ; 0D8A ("W" "උ") ; 0D8B ("R" "ඍ") ; 0D8D ((A-,) "ඏ") ; 0D8F ("T" "ඔ") ; 0D94 ("s" "ි") ; 0DD2 ("S" "ී") ; 0DD3 ("q" "ු") ; 0DD4 ("Q" "ූ") ; 0DD6 ((A-a) "ෳ") ; 0DF3 ((A-') "෴") ; 0DF4 ("\]" ";") ("}" ":") ("'" ".") ("\"" ",") ("z" "'") ("Z" "\"") ("|" "‍්") ; touch (ZWJ 0DCA) ("J" "ළු") ; muurdhaja lu (0DC5 0DD4) ((S-\ ) " ") ; NBSP ((A-\ ) "‌") ; ZWNJ ("t" (set c @-2) (cond ((= @-1 0x0DD9) (cond ((= c 0x200C) (delete @-2) 0x0D93) ((| (< c 0x0D9A) (> c 0x0DC6)) (delete @-1) 0x0D93) (1 0x0D91))) (1 0x0D91))) ("a" (set c @-1) (cond ((= c 0x0D91) (delete @-1) 0x0D92) ((= c 0x0D94) (delete @-1) 0x0D95) ((= c 0x0DD9) (delete @-1) 0x0DDA) ((= c 0x0DDC) (delete @-1) 0x0DDD) (1 0x0DCA))) ("d" (set c @-1) (cond ((= c 0x0D85) (delete @-1) 0x0D86) ((= c 0x0DD9) (delete @-1) 0x0DDC) (1 0x0DCF))) ("e" (cond ((= @-1 0x0D85) (delete @-1) 0x0D87) (1 0x0DD0))) ("E" (set c @-1) (cond ((= c 0x0D85) (delete @-1) 0x0D88) ((= c 0x0DD4) (cond ((= @-2 0x0DC5) (delete @-1) 0x0DD6) (1 0x0DD1))) (1 0x0DD1))) ("D" (set c @-1) (cond ((= c 0x0D8D) (delete @-1) 0x0D8E) ((= c 0x0DD8) (delete @-1) 0x0DF2) (1 0x0DD8))) ("A" (set c @-1) (cond ((= c 0x0D8B) (delete @-1) 0x0D8C) ((= c 0x0D8F) (delete @-1) 0x0D90) ((= c 0x0D94) (delete @-1) 0x0D96) ((= c 0x0DD9) (delete @-1) 0x0DDE) (1 0x0DDF))) ("f" (set c @+1) (cond ((& (>= c 0x0D9A) (<= c 0x0DC6)) (delete @+1) (insert c) (forward) (set c @+1) (cond ((= c 0x0DCA) (delete @+1) 0x0DDA) ((= c 0x0DD9) (delete @+1) 0x0DDB) ((= c 0x0DCF) (delete @+1) 0x0DDC) ((= c 0x0DDF) (delete @+1) 0x0DDE) (1 0x0DD9))) ((= c 0x0D91) (delete @+1) 0x0D93) ((= c 0x0DD9) (delete @+1) 0x0DDB) ((& (= c 0x200C) (= @+2 0x0DD9)) (delete @+2) 0x200C 0x0DDB) ((& (= @-1 0x0DD9) (| (< @-2 0x0D9A) (> @-2 0x0DC6))) (delete @-1) 0x0DDB) ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6)) 0x200C 0x0DD9) (1 0x0DD9))) ;; sanyaka letters ((A-z) (set c @-1) (cond ((= c 0x0DAF) (delete @-1) 0x0DB3) ((= c 0x0D9C) (delete @-1) 0x0D9F) ((= c 0x0DA9) (delete @-1) 0x0DAC) ((= c 0x0DA2) (delete @-1) 0x0DA6))) ;; yansaya ("H" (set c @-1) (cond ((= c 0x0DD9) (delete @-1)) ((= c 0x0DDB) (delete @-1)) (1 (set c 0))) (cond ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6)) 0x0DCA 0x200D 0x0DBA)) (cond ((> c 0) (insert c)))) ;; rakaransaya ("`" (set c @-1) (cond ((| (= c 0x0DD9) (= c 0x0DDB) (= c 0x0DD2) (= c 0x0DD3)) (delete @-1)) (1 (set c 0))) (cond ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6)) 0x0DCA 0x200D 0x0DBB)) (cond ((> c 0) (insert c)))) ;; repaya ("~" (set c @-1) (cond ((| (= c 0x0DD9) (= c 0x0DDB)) (delete @-1)) (1 (set c 0))) (backward) (cond ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6)) (set c1 @-1) (delete @-1) (insert c1) (move @<) 0x0DBB 0x0DCA 0x200D)) (cond ((> c 0) (move @>) (insert c)))) ((BackSpace) (delete-preceding-zw) (set c @-1) (cond ((< c 0) (unhandle))) (delete @-1) (cond ((= c 0x0D86) 0x0D85) ((= c 0x0D87) 0x0D85) ((= c 0x0D88) 0x0D85) ((= c 0x0D8C) 0x0D8B) ((= c 0x0D8E) 0x0D8D) ((= c 0x0D90) 0x0D8F) ((= c 0x0D92) 0x0D8F) ((= c 0x0D93) (cond ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6)) 0x200C)) 0x0DD9) ((= c 0x0D95) 0x0D94) ((= c 0x0D96) 0x0D94) ((& (>= c 0x0D9A) (<= c 0x0DC6) (= @-2 0x0DCA) (= @-1 0x200D)) (cond ((= @-3 0x0DBB) (delete @-3) (insert c)) (1 (delete @-2)))) ((= c 0x0DD9) (cond ((| (< @-1 0x0D9A) (> @-1 0x0DC6))) ((= @+1 0x0D91) (delete @-1) (delete @+1) 0x0D93) ((& (>= @+1 0x0D9A) (<= @+1 0x0DC6)) (set c1 @+1) (cond ((= @+2 0x0DD9) (merge-kombuva) 0x0DDB) ((= @+2 0x0DCA) (merge-kombuva) 0x0DDA) ((= @+2 0x0DCF) (merge-kombuva) 0x0DDC) ((= @+2 0x0DDF) (merge-kombuva) 0x0DDE) (1 (delete @-1) (delete @+1) (insert c1) 0x0DD9))) ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6)) (delete @-1) 0x200C 0x0DD9) ((& (= @-4 0x0DBB) (= @-3 0x0DCA) (= @-2 0x200D)) (set c1 @-1) (delete @-4) (insert c1) 0x0DD9) ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D)) (delete @-3) 0x0DD9) (1 (delete @-1) 0x0DD9))) ((= c 0x0DDA) 0x0DD9) ((= c 0x0DDB) (cond ((| (< @-1 0x0D9A) (> @-1 0x0DC6)) 0x0DD9) ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6)) (delete @-1) 0x200C 0x0DDB) ((& (= @-4 0x0DBB) (= @-3 0x0DCA) (= @-2 0x200D)) (set c1 @-1) (delete @-4) (insert c1) 0x0DDB) ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D)) (delete @-3) 0x0DDB) (1 (delete @-1) 0x0DDB))) ((= c 0x0DDC) 0x0DD9) ((= c 0x0DDD) 0x0DDC) ((= c 0x0DDE) 0x0DD9) ((= c 0x0DF2) 0x0DD8)) (cond ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6) (| (= @+1 0x0DD9) (= @+1 0x0DDB))) 0x200C))) ((Delete) (delete-following-zw) (set c @+1) (cond ((< c 0) (unhandle))) (delete @+1) (cond ((= c 0x0D86) 0x0DCF) ((= c 0x0D87) 0x0DD0) ((= c 0x0D88) 0x0DD1) ((= c 0x0D8C) 0x0DDF) ((= c 0x0D8E) 0x0DD8) ((= c 0x0D90) 0x0DDF) ((= c 0x0D92) 0x0DCA) ((= c 0x0D93) 0x0D91) ((& (>= c 0x0D9A) (<= c 0x0DC6)) (forward) (cond ((= @+1 0x0DD9) (delete @+1) (move @<) (insert c)) ((= @+1 0x0DDB) (delete @+1) 0x0DD9 (move @<) (insert c)) ((= @+1 0x0DDA) (delete @+1) 0x0DCA (move @<) (insert c)) ((= @+1 0x0DDC) (delete @+1) 0x0DCF (move @<) (insert c)) ((= @+1 0x0DDE) (delete @+1) 0x0DDF (move @<) (insert c)) (1 (delete @<)))) ((= c 0x0DDB) 0x0DD9))) ("\\" (shift join)))) (macro ;; prototype (forward (set x 0)) (backward (set x 0)) (delete-preceding-zw (set x 0)) (delete-following-zw (set x 0)) ;; skip following (virama zwj consonant)* sequence (forward (set cc3 @+3) (cond ((& (= @+1 0x0DCA) (= @+2 0x200D) (>= cc3 0x0D9A) (<= cc3 0x0DC6)) (delete @+3) 0x0DCA 0x200D (insert cc3) (forward)))) (backward (set cc1 @-1) (cond ((& (= @-3 0x0DCA) (= @-2 0x200D) (>= cc1 0x0D9A) (<= cc1 0x0DC6)) (delete @-3) 0x0DCA 0x200D (insert cc1) (move @<) (backward)))) (delete-preceding-zw (cond ((| (= @-1 0x200C) (= @-1 0x200D)) (delete @-1) (delete-preceding-zw)))) (delete-following-zw (cond ((| (= @+1 0x200C) (= @+1 0x200D)) (delete @+1) (delete-following-zw)))) (merge-kombuva (delete @-1) (delete @+2) (insert c1))) (state (init (consonant (move @<) (cond ((= @-1 0x0DD9) (cond ((= @-2 0x200C) (delete @-2) (move @>) 0x0DD9) ((| (< @-2 0x0D9A) (> @-2 0x0DC6)) (delete @-1) (move @>) 0x0DD9))) ((= @-1 0x0DDB) (cond ((= @-2 0x200C) (delete @-2) (move @>) 0x0DDB) ((| (< @-2 0x0D9A) (> @-2 0x0DC6)) (delete @-1) (move @>) 0x0DDB))))) (misc)) (join (consonant (move @<) (set c @-1) (cond ((| (= c 0x0DD9) (= c 0x0DDB)) (cond ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6)) (delete @-1) 0x0DCA 0x200D (move @>) (insert c)))) ((& (>= c 0x0D9A) (<= c 0x0DC6)) 0x0DCA 0x200D)) (shift init)) (nil (shift init)))) ;; Local Variables: ;; coding: utf-8 ;; mode: emacs-lisp ;; End: