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