New file. Modified from ru-kbd.png.
[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
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   (",") ("<") (".") (">") ((A-o)) ((A-.)) ((A-v)) ((A-c)) ((A-x))
87   ((S-\ )) ((A-\ )) ((A-,)) ((A-a)) ((A-\')) ((A-z)) ((BackSpace)) ((Delete)))
88
89  (consonant
90   ("l" "ක")                           ; 0D9A
91   ("L" "ඛ")                           ; 0D9B
92   ("." "ග")                           ; 0D9C
93   (">" "ඝ")                           ; 0D9D
94   ("X" "ඞ")                           ; 0D9E
95   ((A-.) "ඟ")                         ; 0D9F
96   ("p" "ච")                           ; 0DA0
97   ("P" "ඡ")                           ; 0DA1
98   ("c" "ජ")                           ; 0DA2
99   ("C" "ඣ")                           ; 0DA3
100   ("\[" "ඤ")                          ; 0DA4
101   ("{" "ඥ")                           ; 0DA5
102   ((A-c) "ඦ")                         ; 0DA6
103   ("g" "ට")                           ; 0DA7
104   ("G" "ඨ")                           ; 0DA8
105   ("v" "ඩ")                           ; 0DA9
106   ("V" "ඪ")                           ; 0DAA
107   ("K" "ණ")                           ; 0DAB
108   ((A-v) "ඬ")                         ; 0DAC
109   (";" "ත")                           ; 0DAD
110   (":" "ථ")                           ; 0DAE
111   ("o" "ද")                           ; 0DAF
112   ("O" "ධ")                           ; 0DB0
113   ("k" "න")                           ; 0DB1
114   ((A-o) "ඳ")                         ; 0DB3
115   ("m" "ප")                           ; 0DB4
116   ("M" "ඵ")                           ; 0DB5
117   ("n" "බ")                           ; 0DB6
118   ("N" "භ")                           ; 0DB7
119   ("u" "ම")                           ; 0DB8
120   ("U" "ඹ")                           ; 0DB9
121   ("h" "ය")                           ; 0DBA
122   ("r" "ර")                           ; 0DBB
123   ("," "ල")                           ; 0DBD
124   ("j" "ව")                           ; 0DC0
125   ("Y" "ශ")                           ; 0DC1
126   ("I" "ෂ")                           ; 0DC2
127   ("i" "ස")                           ; 0DC3
128   ("y" "හ")                           ; 0DC4
129   ("<" "ළ")                           ; 0DC5
130   ("F" "ෆ")                           ; 0DC6
131   )
132
133  (misc
134   ("x" "ං")                           ; 0D82
135   ((A-x) "ඃ")                         ; 0D83
136
137   ("w" "අ")                           ; 0D85
138   ("b" "ඉ")                           ; 0D89
139   ("B" "ඊ")                           ; 0D8A
140   ("W" "උ")                           ; 0D8B
141   ("R" "ඍ")                           ; 0D8D
142   ((A-,) "ඏ")                         ; 0D8F
143
144   ("T" "ඔ")                           ; 0D94
145
146   ("s" "ි")                           ; 0DD2
147   ("S" "ී")                           ; 0DD3
148   ("q" "ු")                           ; 0DD4
149
150   ("Q" "ූ")                           ; 0DD6
151
152   ((A-a) "ෳ")                         ; 0DF3
153   ((A-\') "෴")                                ; 0DF4
154
155   ("\]" ";")
156   ("}" ":")
157   ("'" ".")
158   ("\"" ",")
159   ("z" "'")
160   ("Z" "\"")
161
162   ("|" "‍්")                                ; touch (ZWJ 0DCA)
163   ("J" "ළු")                                ; muurdhaja lu (0DC5 0DD4)
164   ((S-\ ) " ")                         ; NBSP
165   ((A-\ ) "‌")                                ; ZWNJ
166
167   ("t"
168    (set c @-2)
169    (cond
170     ((= @-1 0x0DD9)
171      (cond
172       ((= c 0x200C)
173        (delete @-2)
174        0x0D93)
175       ((| (< c 0x0D9A) (> c 0x0DC6))
176        (delete @-1)
177        0x0D93)
178       (1
179        0x0D91)))
180     (1
181      0x0D91)))
182
183   ("a"
184    (set c @-1)
185    (cond
186     ((= c 0x0D91)
187      (delete @-1)
188      0x0D92)
189     ((= c 0x0D94)
190      (delete @-1)
191      0x0D95)
192     ((= c 0x0DD9)
193      (delete @-1)
194      0x0DDA)
195     ((= c 0x0DDC)
196      (delete @-1)
197      0x0DDD)
198     (1
199      0x0DCA)))
200
201   ("d"
202    (set c @-1)
203    (cond
204     ((= c 0x0D85)
205      (delete @-1)
206      0x0D86)
207     ((= c 0x0DD9)
208      (delete @-1)
209      0x0DDC)
210     (1
211      0x0DCF)))
212
213   ("e"
214    (cond
215     ((= @-1 0x0D85)
216      (delete @-1)
217      0x0D87)
218     (1
219      0x0DD0)))
220
221   ("E"
222    (set c @-1)
223    (cond
224     ((= c 0x0D85)
225      (delete @-1)
226      0x0D88)
227     ((= c 0x0DD4)
228      (cond
229       ((= @-2 0x0DC5)
230        (delete @-1)
231        0x0DD6)
232       (1
233        0x0DD1)))
234     (1
235      0x0DD1)))     
236
237   ("D"
238    (set c @-1)
239    (cond
240     ((= c 0x0D8D)
241      (delete @-1)
242      0x0D8E)
243     ((= c 0x0DD8)
244      (delete @-1)
245      0x0DF2)
246     (1
247      0x0DD8)))
248
249   ("A"
250    (set c @-1)
251    (cond
252     ((= c 0x0D8B)
253      (delete @-1)
254      0x0D8C)
255     ((= c 0x0D8F)
256      (delete @-1)
257      0x0D90)
258     ((= c 0x0D94)
259      (delete @-1)
260      0x0D96)
261     ((= c 0x0DD9)
262      (delete @-1)
263      0x0DDE)
264     (1
265      0x0DDF)))
266
267   ("f"
268    (set c @+0)
269    (cond
270     ((& (>= c 0x0D9A) (<= c 0x0DC6))
271      (delete @+1)
272      (insert c)
273      (forward)
274      (set c @+0)
275      (cond
276       ((= c 0x0DCA)
277        (delete @+1)
278        0x0DDA)
279       ((= c 0x0DD9)
280        (delete @+1)
281        0x0DDB)
282       ((= c 0x0DCF)
283        (delete @+1)
284        0x0DDC)
285       ((= c 0x0DDF)
286        (delete @+1)
287        0x0DDE)
288       (1
289        0x0DD9)))
290     ((= c 0x0D91)
291      (delete @+1)
292      0x0D93)
293     ((= c 0x0DD9)
294      (delete @+1)
295      0x0DDB)
296     ((& (= c 0x200C) (= @+1 0x0DD9))
297      (delete @+2)
298      0x200C 0x0DDB)
299     ((& (= @-1 0x0DD9)
300         (| (< @-2 0x0D9A) (> @-2 0x0DC6)))
301      (delete @-1)
302      0x0DDB)
303     ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
304      0x200C 0x0DD9)
305     (1
306      0x0DD9)))
307    
308   ;; sanyaka letters
309   ((A-z)
310    (set c @-1)
311    (cond
312     ((= c 0x0DAF)
313      (delete @-1)
314      0x0DB3)
315     ((= c 0x0D9C)
316      (delete @-1)
317      0x0D9F)
318     ((= c 0x0DA9)
319      (delete @-1)
320      0x0DAC)
321     ((= c 0x0DA2)
322      (delete @-1)
323      0x0DA6)))
324
325   ;; yansaya
326   ("H"
327    (set c @-1)
328    (cond
329     ((= c 0x0DD9)
330      (delete @-1))
331     ((= c 0x0DDB)
332      (delete @-1))
333     (1
334      (set c 0)))
335    (cond
336     ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
337      0x0DCA 0x200D 0x0DBA))
338    (cond
339     ((> c 0)
340      (insert c))))
341
342   ;; rakaransaya
343   ("`"
344    (set c @-1)
345    (cond
346     ((| (= c 0x0DD9) (= c 0x0DDB) (= c 0x0DD2) (= c 0x0DD3))
347      (delete @-1))
348     (1
349      (set c 0)))
350    (cond
351     ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
352      0x0DCA 0x200D 0x0DBB))
353    (cond
354     ((> c 0)
355      (insert c))))
356
357   ;; repaya
358   ("~"
359    (set c @-1)
360    (cond
361     ((| (= c 0x0DD9) (= c 0x0DDB))
362      (delete @-1))
363     (1
364      (set c 0)))
365    (backward)
366    (cond
367     ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
368      (set c1 @-1)
369      (delete @-1)
370      (insert c1)
371      (move @<)
372      0x0DBB 0x0DCA 0x200D))
373    (cond
374     ((> c 0)
375      (move @>)
376      (insert c))))
377
378   ((BackSpace)
379    (delete-preceding-zw)
380    (set c @-1)
381    (cond
382     ((< c 0)
383      (unhandle)))
384    (delete @-1)
385    (cond
386     ((= c 0x0D86)
387      0x0D85)
388     ((= c 0x0D87)
389      0x0D85)
390     ((= c 0x0D88)
391      0x0D85)
392     ((= c 0x0D8C)
393      0x0D8B)
394     ((= c 0x0D8E)
395      0x0D8D)
396     ((= c 0x0D90)
397      0x0D8F)
398     ((= c 0x0D92)
399      0x0D8F)
400     ((= c 0x0D93)
401      (cond ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6)) 0x200C))
402      0x0DD9)
403     ((= c 0x0D95)
404      0x0D94)
405     ((= c 0x0D96)
406      0x0D94)
407
408     ((& (>= c 0x0D9A) (<= c 0x0DC6) (= @-2 0x0DCA) (= @-1 0x200D))
409      (cond
410       ((= @-3 0x0DBB)
411        (delete @-3)
412        (insert c))
413       (1
414        (delete @-2))))
415
416     ((= c 0x0DD9)
417      (cond
418       ((| (< @-1 0x0D9A) (> @-1 0x0DC6)))
419       ((= @+0 0x0D91)
420        (delete @-1)
421        (delete @+1)
422        0x0D93)
423       ((& (>= @+0 0x0D9A) (<= @+0 0x0DC6))
424        (set c1 @+0)
425        (cond
426         ((= @+1 0x0DD9)
427          (merge-kombuva)
428          0x0DDB)
429         ((= @+1 0x0DCA)
430          (merge-kombuva)
431          0x0DDA)
432         ((= @+1 0x0DCF)
433          (merge-kombuva)
434          0x0DDC)
435         ((= @+1 0x0DDF)
436          (merge-kombuva)
437          0x0DDE)
438         (1
439          (delete @-1)
440          (delete @+1)
441          (insert c1)
442          0x0DD9)))
443       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
444        (delete @-1)
445        0x200C
446        0x0DD9)
447       ((& (= @-4 0x0DBB) (= @-3 0x0DCA) (= @-2 0x200D))
448        (set c1 @-1)
449        (delete @-4)
450        (insert c1)
451        0x0DD9)
452       ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D))
453        (delete @-3)
454        0x0DD9)
455       (1
456        (delete @-1)
457        0x0DD9)))
458
459     ((= c 0x0DDA)
460      0x0DD9)
461
462     ((= c 0x0DDB)
463      (cond
464       ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
465        0x0DD9)
466       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
467        (delete @-1)
468        0x200C
469        0x0DDB)
470       ((& (= @-4 0x0DBB) (= @-3 0x0DCA) (= @-2 0x200D))
471        (set c1 @-1)
472        (delete @-4)
473        (insert c1)
474        0x0DDB)
475       ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D))
476        (delete @-3)
477        0x0DDB)
478       (1
479        (delete @-1)
480        0x0DDB)))
481
482     ((= c 0x0DDC)
483      0x0DD9)
484     ((= c 0x0DDD)
485      0x0DDC)
486     ((= c 0x0DDE)
487      0x0DD9)
488     ((= c 0x0DF2)
489      0x0DD8))
490
491    (cond
492     ((& (>= @-1 0x0D9A)
493         (<= @-1 0x0DC6)
494         (| (= @+0 0x0DD9) (= @+0 0x0DDB)))
495      0x200C)))
496
497   ((Delete)
498    (delete-following-zw)
499    (set c @+0)
500    (cond
501     ((< c 0)
502      (unhandle)))
503    (delete @+1)
504    (cond
505     ((= c 0x0D86)
506      0x0DCF)
507     ((= c 0x0D87)
508      0x0DD0)
509     ((= c 0x0D88)
510      0x0DD1)
511     ((= c 0x0D8C)
512      0x0DDF)
513     ((= c 0x0D8E)
514      0x0DD8)
515     ((= c 0x0D90)
516      0x0DDF)
517     ((= c 0x0D92)
518      0x0DCA)
519     ((= c 0x0D93)
520      0x0D91)
521     ((& (>= c 0x0D9A) (<= c 0x0DC6))
522      (forward)
523      (cond
524       ((= @+0 0x0DD9)
525        (delete @+1)
526        (move @<)
527        (insert c))
528       ((= @+0 0x0DDB)
529        (delete @+1)
530        0x0DD9
531        (move @<)
532        (insert c))
533       ((= @+0 0x0DDA)
534        (delete @+1)
535        0x0DCA
536        (move @<)
537        (insert c))
538       ((= @+0 0x0DDC)
539        (delete @+1)
540        0x0DCF
541        (move @<)
542        (insert c))
543       ((= @+0 0x0DDE)
544        (delete @+1)
545        0x0DDF
546        (move @<)
547        (insert c))
548       (1
549        (delete @<))))
550     ((= c 0x0DDB)
551      0x0DD9))))
552
553  (independent
554   ("w" "අ")                           ; 0D85
555   ("b" "ඉ")                           ; 0D89
556   ("B" "ඊ")                           ; 0D8A
557   ("W" "උ")                           ; 0D8B
558   ("R" "ඍ")                           ; 0D8D
559   ((A-,) "ඏ")                         ; 0D8F
560   ("t" "එ")                           ; 0D91
561   ("T" "ඔ")                           ; 0D94
562   ("l" "ක")                           ; 0D9A
563   ("L" "ඛ")                           ; 0D9B
564   ("." "ග")                           ; 0D9C
565   (">" "ඝ")                           ; 0D9D
566   ("X" "ඞ")                           ; 0D9E
567   ((A-.) "ඟ") ((0x2E A-z) "ඟ")              ; 0D9F
568   ("p" "ච")                           ; 0DA0
569   ("P" "ඡ")                           ; 0DA1
570   ("c" "ජ")                           ; 0DA2
571   ("C" "ඣ")                           ; 0DA3
572   ("\[" "ඤ")                          ; 0DA4
573   ("{" "ඥ")                           ; 0DA5
574   ((A-c) "ඦ") ((0x63 A-z) "ඦ")              ; 0DA6
575   ("g" "ට")                           ; 0DA7
576   ("G" "ඨ")                           ; 0DA8
577   ("v" "ඩ")                           ; 0DA9
578   ("V" "ඪ")                           ; 0DAA
579   ("K" "ණ")                           ; 0DAB
580   ((A-v) "ඬ") ((0x76 A-z) "ඬ")              ; 0DAC
581   (";" "ත")                           ; 0DAD
582   (":" "ථ")                           ; 0DAE
583   ("o" "ද")                           ; 0DAF
584   ("O" "ධ")                           ; 0DB0
585   ("k" "න")                           ; 0DB1
586   ((A-o) "ඳ") ((0x6F A-z) "ඳ")              ; 0DB3
587   ("m" "ප")                           ; 0DB4
588   ("M" "ඵ")                           ; 0DB5
589   ("n" "බ")                           ; 0DB6
590   ("N" "භ")                           ; 0DB7
591   ("u" "ම")                           ; 0DB8
592   ("U" "ඹ")                           ; 0DB9
593   ("h" "ය")                           ; 0DBA
594   ("r" "ර")                           ; 0DBB
595   ("," "ල")                           ; 0DBD
596   ("j" "ව")                           ; 0DC0
597   ("Y" "ශ")                           ; 0DC1
598   ("I" "ෂ")                           ; 0DC2
599   ("i" "ස")                           ; 0DC3
600   ("y" "හ")                           ; 0DC4
601   ("<" "ළ")                           ; 0DC5
602   ("F" "ෆ")                           ; 0DC6
603   ((A-\') "෴")                                ; 0DF4
604
605   ("J" "ළු")                                ; muurdhaja lu (0DC5 0DD4)
606
607   ((S-\ ) " ")                         ; NBSP (00A0)
608   ((A-\ ) "‌")                                ; ZWNJ (200C)
609
610   ("\]" ";")
611   ("}" ":")
612   ("'" ".")
613   ("\"" ",")
614   ("z" "'")
615   ("Z" "\"")
616   )
617
618  (dependent
619   ("x" "ං")                           ; 0D82
620   ((A-x) "ඃ")                         ; 0D83
621   ("a"
622    (cond
623     ((= @-1 0x0D91) (delete @-) "ඒ")  ; 0D92
624     ((= @-1 0x0D94) (delete @-) "ඕ")  ; 0D95
625     ((= @-1 0x0DD9) (delete @-) "ේ")  ; 0DDA
626     ((= @-1 0x0DDC) (delete @-) "ෝ")  ; 0DDD
627     (1 "්")))                         ; 0DCA
628   ("d"
629    (cond
630     ((= @-1 0x0D85) (delete @-) "ආ")  ; 0D86
631     ((= @-1 0x0DD9) (delete @-) "ො")  ; 0DDC
632     (1 "ා")))                         ; 0DCF
633   ("e"
634    (cond
635     ((= @-1 0x0D85) (delete @-) "ඇ")  ; 0D87
636     (1 "ැ")))                         ; 0DD0
637   ("E"
638    (cond
639     ((= @-1 0x0D85) (delete @-) "ඈ")  ; 0D88
640     ((& (= @-2 0x0DC5) (= @-1 0x0DD4))
641      (delete @-) "ූ")                 ; 0DD6
642     (1 "ෑ")))                         ; 0DD1
643   ("s" "ි")                           ; 0DD2
644   ("S" "ී")                           ; 0DD3
645   ("q" "ු")                           ; 0DD4
646   ("Q" "ූ")                           ; 0DD6
647
648   ("D"
649    (cond
650     ((= @-1 0x0D8D) (delete @-) "ඎ")  ; 0D8E
651 ;; The following line does not work when no consonant proceeds.
652 ;;    ((= @-1 0x0DD8) (delete @-) "ෲ")        ; 0DF2
653     (1 "ෘ")))                         ; 0DD8
654 ;; This one works with or without a preceeding consonant.
655   ("DD" "ෲ")                          ; 0DF2
656
657   ("A"
658    (cond
659     ((= @-1 0x0D8B) (delete @-) "ඌ")  ; 0D8C
660     ((= @-1 0x0D8F) (delete @-) "ඐ")  ; 0D90
661     ((= @-1 0x0D94) (delete @-) "ඖ")  ; 0D96
662     ((= @-1 0x0DD9) (delete @-) "ෞ")  ; 0DDE
663     (1 "ෟ")))                         ; 0DDF
664   ((A-a) "ෳ")                         ; 0DF3
665
666   ("H"                                  ; yansaya (0DCA 200D 0DBA)
667    (cond
668     ((| (= @-1 0x0DD9) (= @-1 0x0DDB))
669      (move @-) "්‍ය" (move @>))
670     (1
671      "්‍ය")))
672
673   ("`"                                  ; rakaransaya (0DCA 200D 0DBB)
674    (cond
675     ((| (= @-1 0x0DD2) (= @-1 0x0DD3) (= @-1 0x0DD9) (= @-1 0x0DDB))
676      (move @-) "්‍ර" (move @>))
677     (1 "්‍ර")))
678
679   ("~"                                  ; repaya (0DBB 0DCA 200D)
680    (move @<)
681    "ර්‍"
682    (move @>))
683   )
684
685  (kombuva
686   ("f" "ෙ"))                          ; 0DD9
687
688  (join
689   ("\\"))
690
691  (backspace
692   ((BackSpace))))
693
694 (state
695  (init
696   (starter
697    (pushback 1)
698    (cond
699     ((& (= use-surrounding-text 1) (= @-0 -1))
700      (shift surrounding-text))
701     (1
702      (shift preedit)))))
703
704  (surrounding-text
705   (consonant
706    (move @<)
707    (cond
708     ((= @-1 0x0DD9)
709      (cond
710       ((= @-2 0x200C)
711        (delete @-2)
712        (move @>)
713        0x0DD9)
714       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
715        (delete @-1)
716        (move @>)
717        0x0DD9)))
718     ((= @-1 0x0DDB)
719      (cond
720       ((= @-2 0x200C)
721        (delete @-2)
722        (move @>)
723        0x0DDB)
724       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
725        (delete @-1)
726        (move @>)
727        0x0DDB))))
728    (commit))
729   (misc
730    (commit))
731   (join
732    (shift join)))
733
734  (join
735   (consonant
736    (move @<)
737    (set c @-1)
738    (cond
739     ((| (= c 0x0DD9) (= c 0x0DDB))
740      (cond
741       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
742        (delete @-1)
743        0x0DCA 0x200D
744        (move @>)
745        (insert c))))
746     ((& (>= c 0x0D9A) (<= c 0x0DC6))
747      0x0DCA 0x200D))
748    (commit)
749    (shift surrounding-text))
750
751   (nil
752    (commit)
753    (shift surrounding-text)))
754
755  (preedit
756   (independent
757    (shift independent-state))
758   (kombuva
759    (shift kombuva-state))
760   (dependent)
761   (nil
762    (unhandle)))
763
764  (independent-state
765   (dependent)
766   (join
767    (cond
768     ((| (= @-1 0x0DD9) (= @-1 0x0DDB))
769      (shift join-state))
770     ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
771      (undo -1))
772     (1
773      (shift join-state))))
774   (backspace
775    (undo)))
776
777  (join-state
778   (t
779    (mark p))
780   (independent
781    (move p)
782    (set c @-1)
783    (cond
784     ((| (= c 0x0DD9) (= c 0x0DDB))
785      (delete @-)
786      "්‍"                           ; 0DCA 200D
787      (move @>)
788      (insert c))
789     (1
790      "්‍"                           ; 0DCA 200D
791      (move @>)))
792    (shift independent-state))
793   (backspace
794    (undo)))
795
796  (kombuva-state
797   (t
798    (mark p))
799   (independent
800    (cond
801     ((& (= @0 0x0DD9) (= @1 0x0D91))
802      (delete @<)
803      "ඓ"                              ; 0D93
804      (shift independent-state))
805     ((& (= @0 0x0DD9) (< @2 0))
806      (move @0)
807      (delete @+)
808      (move @>)
809      "ෙ"                              ; 0DD9
810      (shift independent-state))
811     ((& (= @0 0x0DDB) (< @2 0))
812      (move @0)
813      (delete @+)
814      (move @>)
815      "ෛ"                              ; 0DDB
816      (shift independent-state))
817     (1
818      (delete p)
819      (pushback 1)
820      (shift preedit))))
821   (kombuva
822    (mark p)
823    (cond
824     ((& (= @0 0x0DD9) (< @2 0))
825      (delete @<)
826      "ෛ")                             ; 0DDB
827     (1
828      (delete @-)
829      (pushback 1)
830      (shift preedit))))
831   (dependent
832    (mark p))
833   (backspace
834    (undo))))
835
836 ;; Local Variables:
837 ;; coding: utf-8
838 ;; mode: emacs-lisp
839 ;; End: