Remove prototypes.
[m17n/m17n-db.git] / MIM / si-wijesekera.mim
1 ;; si-wijesekera.mim -- Sinhala input method with wijesekera method
2 ;; Copyright (C) 2005, 2006, 2008
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)
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 requires surrounding text support.
29 ")
30
31 (title "සි")
32
33 (macro
34  ;; skip following (virama zwj consonant)* sequence
35  (forward
36   (set cc3 @+3)
37   (cond
38    ((& (= @+1 0x0DCA) (= @+2 0x200D) (>= cc3 0x0D9A) (<= cc3 0x0DC6))
39     (delete @+3)
40     0x0DCA 0x200D
41     (insert cc3)
42     (forward))))
43
44  (backward
45   (set cc1 @-1)
46   (cond
47    ((& (= @-3 0x0DCA) (= @-2 0x200D) (>= cc1 0x0D9A) (<= cc1 0x0DC6))
48     (delete @-3)
49     0x0DCA
50     0x200D
51     (insert cc1)
52     (move @<)
53     (backward))))
54
55  (delete-preceding-zw
56   (cond
57    ((| (= @-1 0x200C) (= @-1 0x200D))
58     (delete @-1)
59     (delete-preceding-zw))))
60
61  (delete-following-zw
62   (cond
63    ((| (= @+1 0x200C) (= @+1 0x200D))
64     (delete @+1)
65     (delete-following-zw))))
66
67  (merge-kombuva
68   (delete @-1)
69   (delete @+2)
70   (insert c1)))
71
72 (map
73  (consonant
74   ("l" "ක")                           ; 0D9A
75   ("L" "ඛ")                           ; 0D9B
76   ("." "ග")                           ; 0D9C
77   (">" "ඝ")                           ; 0D9D
78   ("X" "ඞ")                           ; 0D9E
79   ((A-.) "ඟ")                         ; 0D9F
80   ("p" "ච")                           ; 0DA0
81   ("P" "ඡ")                           ; 0DA1
82   ("c" "ජ")                           ; 0DA2
83   ("C" "ඣ")                           ; 0DA3
84   ("\[" "ඤ")                          ; 0DA4
85   ("{" "ඥ")                           ; 0DA5
86   ((A-c) "ඦ")                         ; 0DA6
87   ("g" "ට")                           ; 0DA7
88   ("G" "ඨ")                           ; 0DA8
89   ("v" "ඩ")                           ; 0DA9
90   ("V" "ඪ")                           ; 0DAA
91   ("K" "ණ")                           ; 0DAB
92   ((A-v) "ඬ")                         ; 0DAC
93   (";" "ත")                           ; 0DAD
94   (":" "ථ")                           ; 0DAE
95   ("o" "ද")                           ; 0DAF
96   ("O" "ධ")                           ; 0DB0
97   ("k" "න")                           ; 0DB1
98   ((A-o) "ඳ")                         ; 0DB3
99   ("m" "ප")                           ; 0DB4
100   ("M" "ඵ")                           ; 0DB5
101   ("n" "බ")                           ; 0DB6
102   ("N" "භ")                           ; 0DB7
103   ("u" "ම")                           ; 0DB8
104   ("U" "ඹ")                           ; 0DB9
105   ("h" "ය")                           ; 0DBA
106   ("r" "ර")                           ; 0DBB
107   ("," "ල")                           ; 0DBD
108   ("j" "ව")                           ; 0DC0
109   ("Y" "ශ")                           ; 0DC1
110   ("I" "ෂ")                           ; 0DC2
111   ("i" "ස")                           ; 0DC3
112   ("y" "හ")                           ; 0DC4
113   ("<" "ළ")                           ; 0DC5
114   ("F" "ෆ")                           ; 0DC6
115   )
116
117  (misc
118   ("x" "ං")                           ; 0D82
119   ((A-x) "ඃ")                         ; 0D83
120
121   ("w" "අ")                           ; 0D85
122   ("b" "ඉ")                           ; 0D89
123   ("B" "ඊ")                           ; 0D8A
124   ("W" "උ")                           ; 0D8B
125   ("R" "ඍ")                           ; 0D8D
126   ((A-,) "ඏ")                         ; 0D8F
127
128   ("T" "ඔ")                           ; 0D94
129
130   ("s" "ි")                           ; 0DD2
131   ("S" "ී")                           ; 0DD3
132   ("q" "ු")                           ; 0DD4
133
134   ("Q" "ූ")                           ; 0DD6
135
136   ((A-a) "ෳ")                         ; 0DF3
137   ((A-\') "෴")                                ; 0DF4
138
139   ("\]" ";")
140   ("}" ":")
141   ("'" ".")
142   ("\"" ",")
143   ("z" "'")
144   ("Z" "\"")
145
146   ("|" "‍්")                                ; touch (ZWJ 0DCA)
147   ("J" "ළු")                                ; muurdhaja lu (0DC5 0DD4)
148   ((S-\ ) " ")                         ; NBSP
149   ((A-\ ) "‌")                                ; ZWNJ
150
151   ("t"
152    (set c @-2)
153    (cond
154     ((= @-1 0x0DD9)
155      (cond
156       ((= c 0x200C)
157        (delete @-2)
158        0x0D93)
159       ((| (< c 0x0D9A) (> c 0x0DC6))
160        (delete @-1)
161        0x0D93)
162       (1
163        0x0D91)))
164     (1
165      0x0D91)))
166
167   ("a"
168    (set c @-1)
169    (cond
170     ((= c 0x0D91)
171      (delete @-1)
172      0x0D92)
173     ((= c 0x0D94)
174      (delete @-1)
175      0x0D95)
176     ((= c 0x0DD9)
177      (delete @-1)
178      0x0DDA)
179     ((= c 0x0DDC)
180      (delete @-1)
181      0x0DDD)
182     (1
183      0x0DCA)))
184
185   ("d"
186    (set c @-1)
187    (cond
188     ((= c 0x0D85)
189      (delete @-1)
190      0x0D86)
191     ((= c 0x0DD9)
192      (delete @-1)
193      0x0DDC)
194     (1
195      0x0DCF)))
196
197   ("e"
198    (cond
199     ((= @-1 0x0D85)
200      (delete @-1)
201      0x0D87)
202     (1
203      0x0DD0)))
204
205   ("E"
206    (set c @-1)
207    (cond
208     ((= c 0x0D85)
209      (delete @-1)
210      0x0D88)
211     ((= c 0x0DD4)
212      (cond
213       ((= @-2 0x0DC5)
214        (delete @-1)
215        0x0DD6)
216       (1
217        0x0DD1)))
218     (1
219      0x0DD1)))     
220
221   ("D"
222    (set c @-1)
223    (cond
224     ((= c 0x0D8D)
225      (delete @-1)
226      0x0D8E)
227     ((= c 0x0DD8)
228      (delete @-1)
229      0x0DF2)
230     (1
231      0x0DD8)))
232
233   ("A"
234    (set c @-1)
235    (cond
236     ((= c 0x0D8B)
237      (delete @-1)
238      0x0D8C)
239     ((= c 0x0D8F)
240      (delete @-1)
241      0x0D90)
242     ((= c 0x0D94)
243      (delete @-1)
244      0x0D96)
245     ((= c 0x0DD9)
246      (delete @-1)
247      0x0DDE)
248     (1
249      0x0DDF)))
250
251   ("f"
252    (set c @+1)
253    (cond
254     ((& (>= c 0x0D9A) (<= c 0x0DC6))
255      (delete @+1)
256      (insert c)
257      (forward)
258      (set c @+1)
259      (cond
260       ((= c 0x0DCA)
261        (delete @+1)
262        0x0DDA)
263       ((= c 0x0DD9)
264        (delete @+1)
265        0x0DDB)
266       ((= c 0x0DCF)
267        (delete @+1)
268        0x0DDC)
269       ((= c 0x0DDF)
270        (delete @+1)
271        0x0DDE)
272       (1
273        0x0DD9)))
274     ((= c 0x0D91)
275      (delete @+1)
276      0x0D93)
277     ((= c 0x0DD9)
278      (delete @+1)
279      0x0DDB)
280     ((& (= c 0x200C) (= @+2 0x0DD9))
281      (delete @+2)
282      0x200C 0x0DDB)
283     ((& (= @-1 0x0DD9)
284         (| (< @-2 0x0D9A) (> @-2 0x0DC6)))
285      (delete @-1)
286      0x0DDB)
287     ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
288      0x200C 0x0DD9)
289     (1
290      0x0DD9)))
291    
292   ;; sanyaka letters
293   ((A-z)
294    (set c @-1)
295    (cond
296     ((= c 0x0DAF)
297      (delete @-1)
298      0x0DB3)
299     ((= c 0x0D9C)
300      (delete @-1)
301      0x0D9F)
302     ((= c 0x0DA9)
303      (delete @-1)
304      0x0DAC)
305     ((= c 0x0DA2)
306      (delete @-1)
307      0x0DA6)))
308
309   ;; yansaya
310   ("H"
311    (set c @-1)
312    (cond
313     ((= c 0x0DD9)
314      (delete @-1))
315     ((= c 0x0DDB)
316      (delete @-1))
317     (1
318      (set c 0)))
319    (cond
320     ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
321      0x0DCA 0x200D 0x0DBA))
322    (cond
323     ((> c 0)
324      (insert c))))
325
326   ;; rakaransaya
327   ("`"
328    (set c @-1)
329    (cond
330     ((| (= c 0x0DD9) (= c 0x0DDB) (= c 0x0DD2) (= c 0x0DD3))
331      (delete @-1))
332     (1
333      (set c 0)))
334    (cond
335     ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
336      0x0DCA 0x200D 0x0DBB))
337    (cond
338     ((> c 0)
339      (insert c))))
340
341   ;; repaya
342   ("~"
343    (set c @-1)
344    (cond
345     ((| (= c 0x0DD9) (= c 0x0DDB))
346      (delete @-1))
347     (1
348      (set c 0)))
349    (backward)
350    (cond
351     ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
352      (set c1 @-1)
353      (delete @-1)
354      (insert c1)
355      (move @<)
356      0x0DBB 0x0DCA 0x200D))
357    (cond
358     ((> c 0)
359      (move @>)
360      (insert c))))
361
362   ((BackSpace)
363    (delete-preceding-zw)
364    (set c @-1)
365    (cond
366     ((< c 0)
367      (unhandle)))
368    (delete @-1)
369    (cond
370     ((= c 0x0D86)
371      0x0D85)
372     ((= c 0x0D87)
373      0x0D85)
374     ((= c 0x0D88)
375      0x0D85)
376     ((= c 0x0D8C)
377      0x0D8B)
378     ((= c 0x0D8E)
379      0x0D8D)
380     ((= c 0x0D90)
381      0x0D8F)
382     ((= c 0x0D92)
383      0x0D8F)
384     ((= c 0x0D93)
385      (cond ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6)) 0x200C))
386      0x0DD9)
387     ((= c 0x0D95)
388      0x0D94)
389     ((= c 0x0D96)
390      0x0D94)
391
392     ((& (>= c 0x0D9A) (<= c 0x0DC6) (= @-2 0x0DCA) (= @-1 0x200D))
393      (cond
394       ((= @-3 0x0DBB)
395        (delete @-3)
396        (insert c))
397       (1
398        (delete @-2))))
399
400     ((= c 0x0DD9)
401      (cond
402       ((| (< @-1 0x0D9A) (> @-1 0x0DC6)))
403       ((= @+1 0x0D91)
404        (delete @-1)
405        (delete @+1)
406        0x0D93)
407       ((& (>= @+1 0x0D9A) (<= @+1 0x0DC6))
408        (set c1 @+1)
409        (cond
410         ((= @+2 0x0DD9)
411          (merge-kombuva)
412          0x0DDB)
413         ((= @+2 0x0DCA)
414          (merge-kombuva)
415          0x0DDA)
416         ((= @+2 0x0DCF)
417          (merge-kombuva)
418          0x0DDC)
419         ((= @+2 0x0DDF)
420          (merge-kombuva)
421          0x0DDE)
422         (1
423          (delete @-1)
424          (delete @+1)
425          (insert c1)
426          0x0DD9)))
427       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
428        (delete @-1)
429        0x200C
430        0x0DD9)
431       ((& (= @-4 0x0DBB) (= @-3 0x0DCA) (= @-2 0x200D))
432        (set c1 @-1)
433        (delete @-4)
434        (insert c1)
435        0x0DD9)
436       ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D))
437        (delete @-3)
438        0x0DD9)
439       (1
440        (delete @-1)
441        0x0DD9)))
442
443     ((= c 0x0DDA)
444      0x0DD9)
445
446     ((= c 0x0DDB)
447      (cond
448       ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
449        0x0DD9)
450       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
451        (delete @-1)
452        0x200C
453        0x0DDB)
454       ((& (= @-4 0x0DBB) (= @-3 0x0DCA) (= @-2 0x200D))
455        (set c1 @-1)
456        (delete @-4)
457        (insert c1)
458        0x0DDB)
459       ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D))
460        (delete @-3)
461        0x0DDB)
462       (1
463        (delete @-1)
464        0x0DDB)))
465
466     ((= c 0x0DDC)
467      0x0DD9)
468     ((= c 0x0DDD)
469      0x0DDC)
470     ((= c 0x0DDE)
471      0x0DD9)
472     ((= c 0x0DF2)
473      0x0DD8))
474
475    (cond
476     ((& (>= @-1 0x0D9A)
477         (<= @-1 0x0DC6)
478         (| (= @+1 0x0DD9) (= @+1 0x0DDB)))
479      0x200C)))
480
481   ((Delete)
482    (delete-following-zw)
483    (set c @+1)
484    (cond
485     ((< c 0)
486      (unhandle)))
487    (delete @+1)
488    (cond
489     ((= c 0x0D86)
490      0x0DCF)
491     ((= c 0x0D87)
492      0x0DD0)
493     ((= c 0x0D88)
494      0x0DD1)
495     ((= c 0x0D8C)
496      0x0DDF)
497     ((= c 0x0D8E)
498      0x0DD8)
499     ((= c 0x0D90)
500      0x0DDF)
501     ((= c 0x0D92)
502      0x0DCA)
503     ((= c 0x0D93)
504      0x0D91)
505     ((& (>= c 0x0D9A) (<= c 0x0DC6))
506      (forward)
507      (cond
508       ((= @+1 0x0DD9)
509        (delete @+1)
510        (move @<)
511        (insert c))
512       ((= @+1 0x0DDB)
513        (delete @+1)
514        0x0DD9
515        (move @<)
516        (insert c))
517       ((= @+1 0x0DDA)
518        (delete @+1)
519        0x0DCA
520        (move @<)
521        (insert c))
522       ((= @+1 0x0DDC)
523        (delete @+1)
524        0x0DCF
525        (move @<)
526        (insert c))
527       ((= @+1 0x0DDE)
528        (delete @+1)
529        0x0DDF
530        (move @<)
531        (insert c))
532       (1
533        (delete @<))))
534     ((= c 0x0DDB)
535      0x0DD9))))
536
537  (join
538   ("\\")))
539
540 (state
541  (init
542   (consonant
543    (move @<)
544    (cond
545     ((= @-1 0x0DD9)
546      (cond
547       ((= @-2 0x200C)
548        (delete @-2)
549        (move @>)
550        0x0DD9)
551       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
552        (delete @-1)
553        (move @>)
554        0x0DD9)))
555     ((= @-1 0x0DDB)
556      (cond
557       ((= @-2 0x200C)
558        (delete @-2)
559        (move @>)
560        0x0DDB)
561       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
562        (delete @-1)
563        (move @>)
564        0x0DDB)))))
565   (misc)
566   (join (shift join)))
567
568  (join
569   (consonant
570    (move @<)
571    (set c @-1)
572    (cond
573     ((| (= c 0x0DD9) (= c 0x0DDB))
574      (cond
575       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
576        (delete @-1)
577        0x0DCA 0x200D
578        (move @>)
579        (insert c))))
580     ((& (>= c 0x0D9A) (<= c 0x0DC6))
581      0x0DCA 0x200D))
582    (shift init))
583
584   (nil
585    (shift init))))
586
587 ;; Local Variables:
588 ;; coding: utf-8
589 ;; mode: emacs-lisp
590 ;; End: