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