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