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