BUGFIX: MJ -> My, A-n J -> A-n y
[m17n/m17n-contrib.git] / im / si-phonetic-dynamic.mim
1 ;; si-phonetic-dynamic.mim -- Sinhala phonetic dynamic keymap
2 ;; Copyright (C) 2007-2008  Harshula Jayasuriya <harshula@gmail.com>
3
4 ;; This program is free software; you can redistribute it and/or
5 ;; modify it under the terms of the GNU General Public License
6 ;; as published by the Free Software Foundation; either version 2
7 ;; of the License, or (at your option) any later version.
8
9 ;; This program is distributed in the hope that it will be useful,
10 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 ;; GNU General Public License for more details.
13
14 ;; You should have received a copy of the GNU General Public License
15 ;; along with this program; if not, write to the Free Software
16 ;; Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 ;; Boston, MA  02110-1301, USA.
18
19 ;; m17n Keymap file for Sinhala (Sri Lanka) (2007-07-08)
20 ;; Maintainer: Harshula Jayasuriya <harshula@gmail.com>
21 ;; Last Updated: 2008-09-10
22 ;; This is a phonetic dynamic mapping for a standard US-English keyboard
23 ;; (qwerty)
24 ;; http://www.nongnu.org/sinhala/doc/keymaps/sinhala-keyboard_4.html
25
26
27 (input-method si phonetic-dynamic)
28
29 (description "Sinhala phonetic dynamic input method:
30   <http://www.nongnu.org/sinhala/doc/keymaps/sinhala-keyboard_4.html>"
31 )
32
33 (title "සි (Phonetic Dynamic)")
34
35 (macro
36  (delete-al-zwj
37   (cond
38    ((& (= @-2 0x0DCA) (= @-1 0x200D))
39     (delete @-2)
40     ;; repaya
41     (cond
42      ((= @-1 0x0DBB)
43       (delete @-1)
44      )
45     )
46    )
47   )
48  )
49
50  (insert-vowel
51   (cond
52    ((& (>= @-1 0x0D9A) (<= @-1 0xDC6))
53     (cond
54      ((= c 0x0D85) "්")       ; 0x0dca - al-lakuna
55      ((= c 0x0D86) "ා")       ; 0x0dcf - aela-pilla (aa)
56      ((= c 0x0D87) "ැ")       ; 0x0dd0 - ketti aeda-pilla (ae)
57      ((= c 0x0D88) "ෑ")       ; 0x0dd1 - diga aeda-pilla (aae)
58      ((= c 0x0D89) "ි")       ; 0x0dd2 - ketti is-pilla (i)
59      ((= c 0x0D8A) "ී")       ; 0x0dd3 - diga is-pilla (ii)
60      ((= c 0x0D8B) "ු")       ; 0x0dd4 - ketti paa-pilla (u)
61      ((= c 0x0D8C) "ූ")       ; 0x0dd6 - diga paa-pilla (uu)
62      ((= c 0x0D8D) "ෘ")       ; 0x0dd8 - gaetta-pilla (r)
63      ((= c 0x0D8E) "ෲ")       ; 0x0df2 - diga gaetta-pilla (rr)
64      ((= c 0x0D8F) "ෟ")       ; 0x0ddf - gayanukitta (l)
65      ((= c 0x0D90) "ෳ")       ; 0x0df3 - diga gayanukitta (ll)
66      ((= c 0x0D91) "ෙ")       ; 0x0dd9 - kombuva (e)
67      ((= c 0x0D92) "ේ")       ; 0x0dda - diga kombuva (ee)
68      ((= c 0x0D93) "ෛ")       ; 0x0ddb - kombu deka (ai)
69      ((= c 0x0D94) "ො")       ; 0x0ddc - kombuva haa aela-pilla (o)
70      ((= c 0x0D95) "ෝ")       ; 0x0ddd - kombuva haa diga aela-pilla (oo)
71      ((= c 0x0D96) "ෞ")       ; 0x0dde - kombuva haa gayanukitta (au)
72     )
73    )
74    (1
75     (insert c)
76    )
77   )
78  )
79
80 )
81
82 (map
83  (consonants
84   ("k" "ක")           ; 0x0d9a - alpapraana kayanna (ka)
85   ("K" "ඛ")           ; 0x0d9b - mahaapraana kayanna (kha)
86   ("g" "ග")           ; 0x0d9c - alpapraana gayanna (ga)
87   ("G" "ඝ")           ; 0x0d9d - mahaapraana gayanna (gha)
88   ((A-N) "ඞ")         ; 0x0d9e - kantaja naasikyaya (nga)
89   ((A-g) "ඟ")         ; 0x0d9f - sanyaka gayanna (nnga)
90   ("c" "ච")           ; 0x0da0 - alpapraana cayanna (ca)
91   ("C" "ඡ")           ; 0x0da1 - mahaapraana cayanna (cha)
92   ("j" "ජ")           ; 0x0da2 - alpapraana jayanna (ja)
93   ("J" "ඣ")           ; 0x0da3 - mahaapraana jayanna (jha)
94   ("z" "ඤ")           ; 0x0da4 - taaluja naasikyaya (nya)
95   ("Z" "ඥ")           ; 0x0da5 - taaluja sanyooga naasikyaya (jnya)
96   ((A-j) "ඦ")         ; 0x0da6 - sanyaka jayanna (nyja)
97   ((A-t) "ට")         ; 0x0da7 - alpapraana ttayanna (tta)
98   ((A-T) "ඨ")         ; 0x0da8 - mahaapraana ttayanna (ttha)
99   ((A-d) "ඩ")         ; 0x0da9 - alpapraana ddayanna (dda)
100   ((A-D) "ඪ")         ; 0x0daa - mahaapraana ddayanna (ddha)
101   ("N" "ණ")           ; 0x0dab - muurdhaja nayanna (nna)
102   ("X" "ඬ")           ; 0x0dac - sanyaka ddayanna (nndda)
103   ("t" "ත")           ; 0x0dad - alpapraana tayanna (ta)
104   ("T" "ථ")           ; 0x0dae - mahaapraana tayanna (tha)
105   ("d" "ද")           ; 0x0daf - alpapraana dayanna (da)
106   ("D" "ධ")           ; 0x0db0 - mahaapraana dayanna (dha)
107   ("n" "න")           ; 0x0db1 - dantaja nayanna (na)
108   ("x" "ඳ")           ; 0x0db3 - sanyaka dayanna (nda)
109   ("p" "ප")           ; 0x0db4 - alpapraana payanna (pa)
110   ("P" "ඵ")           ; 0x0db5 - mahaapraana payanna (pha)
111   ("b" "බ")           ; 0x0db6 - alpapraana bayanna (ba)
112   ("B" "භ")           ; 0x0db7 - mahaapraana bayanna (bha)
113   ("m" "ම")           ; 0x0db8 - mayanna (ma)
114   ("M" "ඹ")           ; 0x0db9 - amba bayanna (mba)
115   ("y" "ය")           ; 0x0dba - yayanna (ya)
116   ("r" "ර")           ; 0x0dbb - rayanna (ra)
117   ("l" "ල")           ; 0x0dbd - dantaja layanna (la)
118   ("v" "ව")           ; 0x0dc0 - vayanna (va)
119   ("S" "ශ")           ; 0x0dc1 - taaluja sayanna (sha)
120   ((A-s) "ෂ")         ; 0x0dc2 - muurdhaja sayanna (ssa)
121   ("s" "ස")           ; 0x0dc3 - dantaja sayanna (sa)
122   ("h" "හ")           ; 0x0dc4 - hayanna (ha)
123   ("L" "ළ")           ; 0x0dc5 - muurdhaja layanna (lla)
124   ("f" "ෆ")           ; 0x0dc6 - fayanna (fa)
125  )
126
127  (vowels
128   ("a" (set c 0x0D85) (insert-vowel))   ; 0x0d85 - ayanna (a)
129   ("A" (set c 0x0D86) (insert-vowel))   ; 0x0d86 - aayanna (aa)
130   ("w" (set c 0x0D87) (insert-vowel))   ; 0x0d87 - aeyanna (ae)
131   ("W" (set c 0x0D88) (insert-vowel))   ; 0x0d88 - aeeyanna (aee)
132   ("i" (set c 0x0D89) (insert-vowel))   ; 0x0d89 - iyanna (i)
133   ("I" (set c 0x0D8A) (insert-vowel))   ; 0x0d8a - iiyanna (ii)
134   ("u" (set c 0x0D8B) (insert-vowel))   ; 0x0d8b - uyanna (u)
135   ("U" (set c 0x0D8C) (insert-vowel))   ; 0x0d8c - uuyanna (uu)
136   ("q" (set c 0x0D8D) (insert-vowel))   ; 0x0d8d - iruyanna (iru)
137   ("Q" (set c 0x0D8E) (insert-vowel))   ; 0x0d8e - iruuyanna (iruu)
138   ((A-l) (set c 0x0D8F) (insert-vowel)) ; 0x0d8f - iluyanna (ilu)
139   ((A-L) (set c 0x0D90) (insert-vowel)) ; 0x0d90 - iluuyanna (iluu)
140   ("e" (set c 0x0D91) (insert-vowel))   ; 0x0d91 - eyanna (e)
141   ("E" (set c 0x0D92) (insert-vowel))   ; 0x0d92 - eeyanna (ee)
142   ((A-e) (set c 0x0D93) (insert-vowel)) ; 0x0d93 - aiyanna (ai)
143   ("o" (set c 0x0D94) (insert-vowel))   ; 0x0d94 - oyanna (o)
144   ("O" (set c 0x0D95) (insert-vowel))   ; 0x0d95 - ooyanna (oo)
145   ((A-o) (set c 0x0D96) (insert-vowel)) ; 0x0d96 - auyanna (au)
146  )
147
148  (remainder
149   ((A-n) "ං")         ; 0x0d82 - anusvaraya (anusvara)
150   ("H" "ඃ")           ; 0x0d83 - visargaya (visarga)
151   ((A-.) "෴")         ; 0x0df4 - kunddaliya (punctuation)
152   ("R" "්‍ර")             ;  0x0dca,0x200d,0x0dbb - rakaaranshaya
153   ("Y" "්‍ය")             ;  0x0dca,0x200d,0x0dba - yansaya
154   ((A-r) "ර්‍")           ;  0x0dbb,0x0dca,0x200d - repaya
155
156   ((A-,) "්‍")              ; 0x0dca,0x200d - join - conjunct letters cons 0DCA ZWJ cons
157   ((A-/) "‍්")              ; 0x200d,0x0dca - touch - cons ZWJ 0DCA cons
158
159   ;; Shift-space and Alt-space
160   ((S-\ ) " ")         ; 0x00a0 - no-break space
161   ((A-\ ) "‌")                ; 0x200c - ZWNJ
162
163   ((BackSpace)
164    (cond
165     ;; rakaaranshaya and yansaya
166     ((| (= @-1 0x0DBA) (= @-1 0x0DBB))
167      (delete @-1)
168      (delete-al-zwj)
169     )
170     ;; touch
171     ((& (= @-2 0x200D) (= @-1 0x0DCA))
172      (delete @-2)
173     )
174     ;; join
175     ((= @-1 0x200D)
176      (delete-al-zwj)
177     )
178     (1
179      (delete @-1)
180     )
181    )
182   )
183  )
184
185 )
186
187 (state
188  (init
189   (consonants)
190   (vowels)
191   (remainder)
192  )
193 )