Add alt-gr mappings (G- ) to correspond to alt mappings (A- ).
[m17n/m17n-db.git] / MIM / si-wijesekera.mim
1 ;; si-wijesekera.mim -- Sinhala input method with wijesekera method
2 ;; Copyright (C) 2005, 2006, 2008, 2009, 2011
3 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
4 ;;   Registration Number H15PRO112
5
6 ;; This file is part of the m17n database; a sub-part of the m17n
7 ;; library.
8
9 ;; The m17n library is free software; you can redistribute it and/or
10 ;; modify it under the terms of the GNU Lesser General Public License
11 ;; as published by the Free Software Foundation; either version 2.1 of
12 ;; the License, or (at your option) any later version.
13
14 ;; The m17n library is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 ;; Lesser General Public License for more details.
18
19 ;; You should have received a copy of the GNU Lesser General Public
20 ;; License along with the m17n library; if not, write to the Free
21 ;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 ;; Boston, MA 02110-1301, USA.
23
24 (input-method si wijesekera (version "1.6.0"))
25
26 (description "Sinhala input method based on SLS 1134 Rev. 2:2004.
27   <http://www.siyabas.lk/docs/sin-kbd-layout5.pdf>
28 Although this code supports both surrounding text and preedit,
29 the former is disabled by default to avoid confusion caused by
30 faulty applications.
31 ")
32
33 (title "සි")
34
35 (variable
36  (use-surrounding-text (_"Surrounding text vs. preedit.
37 If 1, try to use surrounding text.  Otherwise, use preedit.")
38                        0 1 0))
39
40 (macro
41  ;; skip following (virama zwj consonant)* sequence
42  (forward
43   (set cc3 @+2)
44   (cond
45    ((& (= @+0 0x0DCA) (= @+1 0x200D) (>= cc3 0x0D9A) (<= cc3 0x0DC6))
46     (delete @+3)
47     0x0DCA 0x200D
48     (insert cc3)
49     (forward))))
50
51  (backward
52   (set cc1 @-1)
53   (cond
54    ((& (= @-3 0x0DCA) (= @-2 0x200D) (>= cc1 0x0D9A) (<= cc1 0x0DC6))
55     (delete @-3)
56     0x0DCA
57     0x200D
58     (insert cc1)
59     (move @<)
60     (backward))))
61
62  (delete-preceding-zw
63   (cond
64    ((| (= @-1 0x200C) (= @-1 0x200D))
65     (delete @-1)
66     (delete-preceding-zw))))
67
68  (delete-following-zw
69   (cond
70    ((| (= @+0 0x200C) (= @+0 0x200D))
71     (delete @+1)
72     (delete-following-zw))))
73
74  (merge-kombuva
75   (delete @-1)
76   (delete @+2)
77   (insert c1)))
78
79 (map
80  (starter
81   ("A") ("B") ("C") ("D") ("E") ("F") ("G") ("H") ("I") ("J") ("K") ("L") ("M")
82   ("N") ("O") ("P") ("Q") ("R") ("S") ("T") ("U") ("V") ("W") ("X") ("Y") ("Z") 
83   ("a") ("b") ("c") ("d") ("e") ("f") ("g") ("h") ("i") ("j") ("k") ("l") ("m")
84   ("n") ("o") ("p") ("q") ("r") ("s") ("t") ("u") ("v") ("w") ("x") ("y") ("z") 
85   ("`") ("~") ("\[") ("{") ("\]") ("}") ("\\") ("|") (";") (":") ("'") ("\"")
86   (",") ("<") (".") (">")
87   ((A-a)) ((A-c)) ((A-o)) ((A-v)) ((A-x)) ((A-z)) ((A-\ )) ((A-.)) ((A-,)) ((A-\'))
88   ((G-a)) ((G-c)) ((G-o)) ((G-v)) ((G-x)) ((G-z)) ((G-\ )) ((G-.)) ((G-,)) ((G-\'))
89   ((S-\ )) ((BackSpace)) ((Delete)))
90
91   (consonant
92    ("l" "ක")                          ; 0D9A
93    ("L" "ඛ")                          ; 0D9B
94    ("." "ග")                          ; 0D9C
95    (">" "ඝ")                          ; 0D9D
96    ("X" "ඞ")                          ; 0D9E
97    ((A-.) "ඟ")                                ; 0D9F
98    ((G-.) "ඟ")                                ; 0D9F
99    ("p" "ච")                          ; 0DA0
100    ("P" "ඡ")                          ; 0DA1
101    ("c" "ජ")                          ; 0DA2
102    ("C" "ඣ")                          ; 0DA3
103    ("\[" "ඤ")                         ; 0DA4
104    ("{" "ඥ")                          ; 0DA5
105    ((A-c) "ඦ")                                ; 0DA6
106    ((G-c) "ඦ")                                ; 0DA6
107    ("g" "ට")                          ; 0DA7
108    ("G" "ඨ")                          ; 0DA8
109    ("v" "ඩ")                          ; 0DA9
110    ("V" "ඪ")                          ; 0DAA
111    ("K" "ණ")                          ; 0DAB
112    ((A-v) "ඬ")                                ; 0DAC
113    ((G-v) "ඬ")                                ; 0DAC
114    (";" "ත")                          ; 0DAD
115    (":" "ථ")                          ; 0DAE
116    ("o" "ද")                          ; 0DAF
117    ("O" "ධ")                          ; 0DB0
118    ("k" "න")                          ; 0DB1
119    ((A-o) "ඳ")                                ; 0DB3
120    ((G-o) "ඳ")                                ; 0DB3
121    ("m" "ප")                          ; 0DB4
122    ("M" "ඵ")                          ; 0DB5
123    ("n" "බ")                          ; 0DB6
124    ("N" "භ")                          ; 0DB7
125    ("u" "ම")                          ; 0DB8
126    ("U" "ඹ")                          ; 0DB9
127    ("h" "ය")                          ; 0DBA
128    ("r" "ර")                          ; 0DBB
129    ("," "ල")                          ; 0DBD
130    ("j" "ව")                          ; 0DC0
131    ("Y" "ශ")                          ; 0DC1
132    ("I" "ෂ")                          ; 0DC2
133    ("i" "ස")                          ; 0DC3
134    ("y" "හ")                          ; 0DC4
135    ("<" "ළ")                          ; 0DC5
136    ("F" "ෆ")                          ; 0DC6
137    )
138
139   (misc
140    ("x" "ං")                          ; 0D82
141    ((A-x) "ඃ")                                ; 0D83
142    ((G-x) "ඃ")                                ; 0D83
143
144    ("w" "අ")                          ; 0D85
145    ("b" "ඉ")                          ; 0D89
146    ("B" "ඊ")                          ; 0D8A
147    ("W" "උ")                          ; 0D8B
148    ("R" "ඍ")                          ; 0D8D
149    ((A-,) "ඏ")                                ; 0D8F
150    ((G-,) "ඏ")                                ; 0D8F
151
152    ("T" "ඔ")                          ; 0D94
153
154    ("s" "ි")                          ; 0DD2
155    ("S" "ී")                          ; 0DD3
156    ("q" "ු")                          ; 0DD4
157
158    ("Q" "ූ")                          ; 0DD6
159
160    ((A-a) "ෳ")                                ; 0DF3
161    ((G-a) "ෳ")                                ; 0DF3
162    ((A-\') "෴")                               ; 0DF4
163    ((G-\') "෴")                               ; 0DF4
164
165    ("\]" ";")
166    ("}" ":")
167    ("'" ".")
168    ("\"" ",")
169    ("z" "'")
170    ("Z" "\"")
171
172    ("|" "‍්")                               ; touch (ZWJ 0DCA)
173    ("J" "ළු")                               ; muurdhaja lu (0DC5 0DD4)
174    ((S-\ ) " ")                                ; NBSP
175    ((A-\ ) "‌")                               ; ZWNJ
176    ((G-\ ) "‌")                               ; ZWNJ
177
178    ("t"
179     (set c @-2)
180     (cond
181      ((= @-1 0x0DD9)
182       (cond
183        ((= c 0x200C)
184         (delete @-2)
185         0x0D93)
186        ((| (< c 0x0D9A) (> c 0x0DC6))
187         (delete @-1)
188         0x0D93)
189        (1
190         0x0D91)))
191      (1
192       0x0D91)))
193
194    ("a"
195     (set c @-1)
196     (cond
197      ((= c 0x0D91)
198       (delete @-1)
199       0x0D92)
200      ((= c 0x0D94)
201       (delete @-1)
202       0x0D95)
203      ((= c 0x0DD9)
204       (delete @-1)
205       0x0DDA)
206      ((= c 0x0DDC)
207       (delete @-1)
208       0x0DDD)
209      (1
210       0x0DCA)))
211
212    ("d"
213     (set c @-1)
214     (cond
215      ((= c 0x0D85)
216       (delete @-1)
217       0x0D86)
218      ((= c 0x0DD9)
219       (delete @-1)
220       0x0DDC)
221      (1
222       0x0DCF)))
223
224    ("e"
225     (cond
226      ((= @-1 0x0D85)
227       (delete @-1)
228       0x0D87)
229      (1
230       0x0DD0)))
231
232    ("E"
233     (set c @-1)
234     (cond
235      ((= c 0x0D85)
236       (delete @-1)
237       0x0D88)
238      ((= c 0x0DD4)
239       (cond
240        ((= @-2 0x0DC5)
241         (delete @-1)
242         0x0DD6)
243        (1
244         0x0DD1)))
245      (1
246       0x0DD1)))     
247
248    ("D"
249     (set c @-1)
250     (cond
251      ((= c 0x0D8D)
252       (delete @-1)
253       0x0D8E)
254      ((= c 0x0DD8)
255       (delete @-1)
256       0x0DF2)
257      (1
258       0x0DD8)))
259
260    ("A"
261     (set c @-1)
262     (cond
263      ((= c 0x0D8B)
264       (delete @-1)
265       0x0D8C)
266      ((= c 0x0D8F)
267       (delete @-1)
268       0x0D90)
269      ((= c 0x0D94)
270       (delete @-1)
271       0x0D96)
272      ((= c 0x0DD9)
273       (delete @-1)
274       0x0DDE)
275      (1
276       0x0DDF)))
277
278    ("f"
279     (set c @+0)
280     (cond
281      ((& (>= c 0x0D9A) (<= c 0x0DC6))
282       (delete @+1)
283       (insert c)
284       (forward)
285       (set c @+0)
286       (cond
287        ((= c 0x0DCA)
288         (delete @+1)
289         0x0DDA)
290        ((= c 0x0DD9)
291         (delete @+1)
292         0x0DDB)
293        ((= c 0x0DCF)
294         (delete @+1)
295         0x0DDC)
296        ((= c 0x0DDF)
297         (delete @+1)
298         0x0DDE)
299        (1
300         0x0DD9)))
301      ((= c 0x0D91)
302       (delete @+1)
303       0x0D93)
304      ((= c 0x0DD9)
305       (delete @+1)
306       0x0DDB)
307      ((& (= c 0x200C) (= @+1 0x0DD9))
308       (delete @+2)
309       0x200C 0x0DDB)
310      ((& (= @-1 0x0DD9)
311          (| (< @-2 0x0D9A) (> @-2 0x0DC6)))
312       (delete @-1)
313       0x0DDB)
314      ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
315       0x200C 0x0DD9)
316      (1
317       0x0DD9)))
318    
319    ;; sanyaka letters
320    ((A-z)
321     (set c @-1)
322     (cond
323      ((= c 0x0DAF)
324       (delete @-1)
325       0x0DB3)
326      ((= c 0x0D9C)
327       (delete @-1)
328       0x0D9F)
329      ((= c 0x0DA9)
330       (delete @-1)
331       0x0DAC)
332      ((= c 0x0DA2)
333       (delete @-1)
334       0x0DA6)))
335    
336    ;; sanyaka letters
337    ((G-z)
338     (set c @-1)
339     (cond
340      ((= c 0x0DAF)
341       (delete @-1)
342       0x0DB3)
343      ((= c 0x0D9C)
344       (delete @-1)
345       0x0D9F)
346      ((= c 0x0DA9)
347       (delete @-1)
348       0x0DAC)
349      ((= c 0x0DA2)
350       (delete @-1)
351       0x0DA6)))
352
353    ;; yansaya
354    ("H"
355     (set c @-1)
356     (cond
357      ((= c 0x0DD9)
358       (delete @-1))
359      ((= c 0x0DDB)
360       (delete @-1))
361      (1
362       (set c 0)))
363     (cond
364      ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
365       0x0DCA 0x200D 0x0DBA))
366     (cond
367      ((> c 0)
368       (insert c))))
369
370    ;; rakaransaya
371    ("`"
372     (set c @-1)
373     (cond
374      ((| (= c 0x0DD9) (= c 0x0DDB) (= c 0x0DD2) (= c 0x0DD3))
375       (delete @-1))
376      (1
377       (set c 0)))
378     (cond
379      ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
380       0x0DCA 0x200D 0x0DBB))
381     (cond
382      ((> c 0)
383       (insert c))))
384
385    ;; repaya
386    ("~"
387     (set c @-1)
388     (cond
389      ((| (= c 0x0DD9) (= c 0x0DDB))
390       (delete @-1))
391      (1
392       (set c 0)))
393     (backward)
394     (cond
395      ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
396       (set c1 @-1)
397       (delete @-1)
398       (insert c1)
399       (move @<)
400       0x0DBB 0x0DCA 0x200D))
401     (cond
402      ((> c 0)
403       (move @>)
404       (insert c))))
405
406    ((BackSpace)
407     (delete-preceding-zw)
408     (set c @-1)
409     (cond
410      ((< c 0)
411       (unhandle)))
412     (delete @-1)
413     (cond
414      ((= c 0x0D86)
415       0x0D85)
416      ((= c 0x0D87)
417       0x0D85)
418      ((= c 0x0D88)
419       0x0D85)
420      ((= c 0x0D8C)
421       0x0D8B)
422      ((= c 0x0D8E)
423       0x0D8D)
424      ((= c 0x0D90)
425       0x0D8F)
426      ((= c 0x0D92)
427       0x0D8F)
428      ((= c 0x0D93)
429       (cond ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6)) 0x200C))
430       0x0DD9)
431      ((= c 0x0D95)
432       0x0D94)
433      ((= c 0x0D96)
434       0x0D94)
435
436      ((& (>= c 0x0D9A) (<= c 0x0DC6) (= @-2 0x0DCA) (= @-1 0x200D))
437       (cond
438        ((= @-3 0x0DBB)
439         (delete @-3)
440         (insert c))
441        (1
442         (delete @-2))))
443
444      ((= c 0x0DD9)
445       (cond
446        ((| (< @-1 0x0D9A) (> @-1 0x0DC6)))
447        ((= @+0 0x0D91)
448         (delete @-1)
449         (delete @+1)
450         0x0D93)
451        ((& (>= @+0 0x0D9A) (<= @+0 0x0DC6))
452         (set c1 @+0)
453         (cond
454          ((= @+1 0x0DD9)
455           (merge-kombuva)
456           0x0DDB)
457          ((= @+1 0x0DCA)
458           (merge-kombuva)
459           0x0DDA)
460          ((= @+1 0x0DCF)
461           (merge-kombuva)
462           0x0DDC)
463          ((= @+1 0x0DDF)
464           (merge-kombuva)
465           0x0DDE)
466          (1
467           (delete @-1)
468           (delete @+1)
469           (insert c1)
470           0x0DD9)))
471        ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
472         (delete @-1)
473         0x200C
474         0x0DD9)
475        ((& (= @-4 0x0DBB) (= @-3 0x0DCA) (= @-2 0x200D))
476         (set c1 @-1)
477         (delete @-4)
478         (insert c1)
479         0x0DD9)
480        ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D))
481         (delete @-3)
482         0x0DD9)
483        (1
484         (delete @-1)
485         0x0DD9)))
486
487      ((= c 0x0DDA)
488       0x0DD9)
489
490      ((= c 0x0DDB)
491       (cond
492        ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
493         0x0DD9)
494        ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
495         (delete @-1)
496         0x200C
497         0x0DDB)
498        ((& (= @-4 0x0DBB) (= @-3 0x0DCA) (= @-2 0x200D))
499         (set c1 @-1)
500         (delete @-4)
501         (insert c1)
502         0x0DDB)
503        ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D))
504         (delete @-3)
505         0x0DDB)
506        (1
507         (delete @-1)
508         0x0DDB)))
509
510      ((= c 0x0DDC)
511       0x0DD9)
512      ((= c 0x0DDD)
513       0x0DDC)
514      ((= c 0x0DDE)
515       0x0DD9)
516      ((= c 0x0DF2)
517       0x0DD8))
518
519     (cond
520      ((& (>= @-1 0x0D9A)
521          (<= @-1 0x0DC6)
522          (| (= @+0 0x0DD9) (= @+0 0x0DDB)))
523       0x200C)))
524
525    ((Delete)
526     (delete-following-zw)
527     (set c @+0)
528     (cond
529      ((< c 0)
530       (unhandle)))
531     (delete @+1)
532     (cond
533      ((= c 0x0D86)
534       0x0DCF)
535      ((= c 0x0D87)
536       0x0DD0)
537      ((= c 0x0D88)
538       0x0DD1)
539      ((= c 0x0D8C)
540       0x0DDF)
541      ((= c 0x0D8E)
542       0x0DD8)
543      ((= c 0x0D90)
544       0x0DDF)
545      ((= c 0x0D92)
546       0x0DCA)
547      ((= c 0x0D93)
548       0x0D91)
549      ((& (>= c 0x0D9A) (<= c 0x0DC6))
550       (forward)
551       (cond
552        ((= @+0 0x0DD9)
553         (delete @+1)
554         (move @<)
555         (insert c))
556        ((= @+0 0x0DDB)
557         (delete @+1)
558         0x0DD9
559         (move @<)
560         (insert c))
561        ((= @+0 0x0DDA)
562         (delete @+1)
563         0x0DCA
564         (move @<)
565         (insert c))
566        ((= @+0 0x0DDC)
567         (delete @+1)
568         0x0DCF
569         (move @<)
570         (insert c))
571        ((= @+0 0x0DDE)
572         (delete @+1)
573         0x0DDF
574         (move @<)
575         (insert c))
576        (1
577         (delete @<))))
578      ((= c 0x0DDB)
579       0x0DD9))))
580
581   (independent
582    ("w" "අ")                          ; 0D85
583    ("b" "ඉ")                          ; 0D89
584    ("B" "ඊ")                          ; 0D8A
585    ("W" "උ")                          ; 0D8B
586    ("R" "ඍ")                          ; 0D8D
587    ((A-,) "ඏ")                                ; 0D8F
588    ((G-,) "ඏ")                                ; 0D8F
589    ("t" "එ")                          ; 0D91
590    ("T" "ඔ")                          ; 0D94
591    ("l" "ක")                          ; 0D9A
592    ("L" "ඛ")                          ; 0D9B
593    ("." "ග")                          ; 0D9C
594    (">" "ඝ")                          ; 0D9D
595    ("X" "ඞ")                          ; 0D9E
596    ((A-.) "ඟ") ((0x2E A-z) "ඟ")             ; 0D9F
597    ((G-.) "ඟ") ((0x2E G-z) "ඟ")             ; 0D9F
598    ("p" "ච")                          ; 0DA0
599    ("P" "ඡ")                          ; 0DA1
600    ("c" "ජ")                          ; 0DA2
601    ("C" "ඣ")                          ; 0DA3
602    ("\[" "ඤ")                         ; 0DA4
603    ("{" "ඥ")                          ; 0DA5
604    ((A-c) "ඦ") ((0x63 A-z) "ඦ")             ; 0DA6
605    ((G-c) "ඦ") ((0x63 G-z) "ඦ")             ; 0DA6
606    ("g" "ට")                          ; 0DA7
607    ("G" "ඨ")                          ; 0DA8
608    ("v" "ඩ")                          ; 0DA9
609    ("V" "ඪ")                          ; 0DAA
610    ("K" "ණ")                          ; 0DAB
611    ((A-v) "ඬ") ((0x76 A-z) "ඬ")             ; 0DAC
612    ((G-v) "ඬ") ((0x76 G-z) "ඬ")             ; 0DAC
613    (";" "ත")                          ; 0DAD
614    (":" "ථ")                          ; 0DAE
615    ("o" "ද")                          ; 0DAF
616    ("O" "ධ")                          ; 0DB0
617    ("k" "න")                          ; 0DB1
618    ((A-o) "ඳ") ((0x6F A-z) "ඳ")             ; 0DB3
619    ((G-o) "ඳ") ((0x6F G-z) "ඳ")             ; 0DB3
620    ("m" "ප")                          ; 0DB4
621    ("M" "ඵ")                          ; 0DB5
622    ("n" "බ")                          ; 0DB6
623    ("N" "භ")                          ; 0DB7
624    ("u" "ම")                          ; 0DB8
625    ("U" "ඹ")                          ; 0DB9
626    ("h" "ය")                          ; 0DBA
627    ("r" "ර")                          ; 0DBB
628    ("," "ල")                          ; 0DBD
629    ("j" "ව")                          ; 0DC0
630    ("Y" "ශ")                          ; 0DC1
631    ("I" "ෂ")                          ; 0DC2
632    ("i" "ස")                          ; 0DC3
633    ("y" "හ")                          ; 0DC4
634    ("<" "ළ")                          ; 0DC5
635    ("F" "ෆ")                          ; 0DC6
636    ((A-\') "෴")                               ; 0DF4
637    ((G-\') "෴")                               ; 0DF4
638
639    ("J" "ළු")                               ; muurdhaja lu (0DC5 0DD4)
640
641    ((S-\ ) " ")                                ; NBSP (00A0)
642    ((A-\ ) "‌")                               ; ZWNJ (200C)
643    ((G-\ ) "‌")                               ; ZWNJ (200C)
644
645    ("\]" ";")
646    ("}" ":")
647    ("'" ".")
648    ("\"" ",")
649    ("z" "'")
650    ("Z" "\"")
651    )
652
653   (dependent
654    ("x" "ං")                          ; 0D82
655    ((A-x) "ඃ")                                ; 0D83
656    ((G-x) "ඃ")                                ; 0D83
657    ("a"
658     (cond
659      ((= @-1 0x0D91) (delete @-) "ඒ") ; 0D92
660      ((= @-1 0x0D94) (delete @-) "ඕ") ; 0D95
661      ((= @-1 0x0DD9) (delete @-) "ේ") ; 0DDA
662      ((= @-1 0x0DDC) (delete @-) "ෝ") ; 0DDD
663      (1 "්")))                                ; 0DCA
664    ("d"
665     (cond
666      ((= @-1 0x0D85) (delete @-) "ආ") ; 0D86
667      ((= @-1 0x0DD9) (delete @-) "ො") ; 0DDC
668      (1 "ා")))                                ; 0DCF
669    ("e"
670     (cond
671      ((= @-1 0x0D85) (delete @-) "ඇ") ; 0D87
672      (1 "ැ")))                                ; 0DD0
673    ("E"
674     (cond
675      ((= @-1 0x0D85) (delete @-) "ඈ") ; 0D88
676      ((& (= @-2 0x0DC5) (= @-1 0x0DD4))
677       (delete @-) "ූ")                        ; 0DD6
678      (1 "ෑ")))                                ; 0DD1
679    ("s" "ි")                          ; 0DD2
680    ("S" "ී")                          ; 0DD3
681    ("q" "ු")                          ; 0DD4
682    ("Q" "ූ")                          ; 0DD6
683
684    ("D"
685     (cond
686      ((= @-1 0x0D8D) (delete @-) "ඎ") ; 0D8E
687      ;; The following line does not work when no consonant proceeds.
688      ;;    ((= @-1 0x0DD8) (delete @-) "ෲ")   ; 0DF2
689      (1 "ෘ")))                                ; 0DD8
690    ;; This one works with or without a preceeding consonant.
691    ("DD" "ෲ")                                 ; 0DF2
692
693    ("A"
694     (cond
695      ((= @-1 0x0D8B) (delete @-) "ඌ") ; 0D8C
696      ((= @-1 0x0D8F) (delete @-) "ඐ") ; 0D90
697      ((= @-1 0x0D94) (delete @-) "ඖ") ; 0D96
698      ((= @-1 0x0DD9) (delete @-) "ෞ") ; 0DDE
699      (1 "ෟ")))                                ; 0DDF
700    ((A-a) "ෳ")                                ; 0DF3
701    ((G-a) "ෳ")                                ; 0DF3
702
703    ("H"                                 ; yansaya (0DCA 200D 0DBA)
704     (cond
705      ((| (= @-1 0x0DD9) (= @-1 0x0DDB))
706       (move @-) "්‍ය" (move @>))
707      (1
708       "්‍ය")))
709
710    ("`"                                 ; rakaransaya (0DCA 200D 0DBB)
711     (cond
712      ((| (= @-1 0x0DD2) (= @-1 0x0DD3) (= @-1 0x0DD9) (= @-1 0x0DDB))
713       (move @-) "්‍ර" (move @>))
714      (1 "්‍ර")))
715
716    ("~"                                 ; repaya (0DBB 0DCA 200D)
717     (move @<)
718     "ර්‍"
719     (move @>))
720    )
721
722   (kombuva
723    ("f" "ෙ"))                         ; 0DD9
724
725   (join
726    ("\\"))
727
728   (backspace
729    ((BackSpace))))
730
731 (state
732  (init
733   (starter
734    (pushback 1)
735    (cond
736     ((& (= use-surrounding-text 1) (= @-0 -1))
737      (shift surrounding-text))
738     (1
739      (shift preedit)))))
740
741  (surrounding-text
742   (consonant
743    (move @<)
744    (cond
745     ((= @-1 0x0DD9)
746      (cond
747       ((= @-2 0x200C)
748        (delete @-2)
749        (move @>)
750        0x0DD9)
751       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
752        (delete @-1)
753        (move @>)
754        0x0DD9)))
755     ((= @-1 0x0DDB)
756      (cond
757       ((= @-2 0x200C)
758        (delete @-2)
759        (move @>)
760        0x0DDB)
761       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
762        (delete @-1)
763        (move @>)
764        0x0DDB))))
765    (commit))
766   (misc
767    (commit))
768   (join
769    (shift join)))
770
771  (join
772   (consonant
773    (move @<)
774    (set c @-1)
775    (cond
776     ((| (= c 0x0DD9) (= c 0x0DDB))
777      (cond
778       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
779        (delete @-1)
780        0x0DCA 0x200D
781        (move @>)
782        (insert c))))
783     ((& (>= c 0x0D9A) (<= c 0x0DC6))
784      0x0DCA 0x200D))
785    (commit)
786    (shift surrounding-text))
787
788   (nil
789    (commit)
790    (shift surrounding-text)))
791
792  (preedit
793   (independent
794    (shift independent-state))
795   (kombuva
796    (shift kombuva-state))
797   (dependent)
798   (nil
799    (unhandle)))
800
801  (independent-state
802   (dependent)
803   (join
804    (cond
805     ((| (= @-1 0x0DD9) (= @-1 0x0DDB))
806      (shift join-state))
807     ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
808      (undo -1))
809     (1
810      (shift join-state))))
811   (backspace
812    (undo)))
813
814  (join-state
815   (t
816    (mark p))
817   (independent
818    (move p)
819    (set c @-1)
820    (cond
821     ((| (= c 0x0DD9) (= c 0x0DDB))
822      (delete @-)
823      "්‍"                           ; 0DCA 200D
824      (move @>)
825      (insert c))
826     (1
827      "්‍"                           ; 0DCA 200D
828      (move @>)))
829    (shift independent-state))
830   (backspace
831    (undo)))
832
833  (kombuva-state
834   (t
835    (mark p))
836   (independent
837    (cond
838     ((& (= @0 0x0DD9) (= @1 0x0D91))
839      (delete @<)
840      "ඓ"                              ; 0D93
841      (shift independent-state))
842     ((& (= @0 0x0DD9) (< @2 0))
843      (move @0)
844      (delete @+)
845      (move @>)
846      "ෙ"                              ; 0DD9
847      (shift independent-state))
848     ((& (= @0 0x0DDB) (< @2 0))
849      (move @0)
850      (delete @+)
851      (move @>)
852      "ෛ"                              ; 0DDB
853      (shift independent-state))
854     (1
855      (delete p)
856      (pushback 1)
857      (shift preedit))))
858   (kombuva
859    (mark p)
860    (cond
861     ((& (= @0 0x0DD9) (< @2 0))
862      (delete @<)
863      "ෛ")                             ; 0DDB
864     (1
865      (delete @-)
866      (pushback 1)
867      (shift preedit))))
868   (dependent
869    (mark p))
870   (backspace
871    (undo))))
872
873 ;; Local Variables:
874 ;; coding: utf-8
875 ;; mode: emacs-lisp
876 ;; End: