467b66eac904343ece51b472976c4c3d48f9b868
[m17n/m17n-db.git] / si-wijesekera.mim
1 ;; Copyright (C) 2005
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 0x0D99) (< c 0x0DC7))
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 0x0D99) (< @-1 0xDC7))
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 0x0D99) (< @-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 0x0D99) (< @-1 0x0DC7))
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 0x0D99) (< @-1 0x0DC7))
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 0x0D99) (< @-1 0x0DC7)) 0x200C))
345      0x0DD9)
346     ((= c 0x0D95)
347      0x0D94)
348     ((= c 0x0D96)
349      0x0D94)
350
351     ((& (> c 0x0D99) (< c 0x0DC7) (= @-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 0x0D99) (< @+1 0x0DC7))
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 0x0D99) (< @-2 0x0DC7))
382        (delete @-1)
383        0x200C
384        0x0DD9)
385       ((& (> @-4 0x0D99) (< @-4 0x0DC7) (= @-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 0x0D99) (< @-2 0x0DC7))
400        (delete @-1)
401        0x200C
402        0x0DDB)
403       ((& (> @-4 0x0D99) (< @-4 0x0DC7) (= @-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 0x0D99)
421         (< @-1 0x0DC7)
422         (| (= @+1 0x0DD9) (= @+1 0x0DDB)))
423      0x200C)))
424
425   ("\\" (shift join))))
426
427 (macro
428  ;; prototype
429  (forward (set x 0))
430  (backward (set x 0))
431  (delete-preceding-zw (set x 0))
432
433  ;; skip following (virama zwj consonant)* sequence
434  (forward
435   (set cc3 @+3)
436   (cond
437    ((& (= @+1 0x0DCA) (= @+2 0x200D) (> cc3 0x0D99) (< cc3 0x0DC7))
438     (delete @+3)
439     0x0DCA 0x200D
440     (insert cc3)
441     (forward))))
442
443  (backward
444   (set cc1 @-1)
445   (cond
446    ((& (= @-3 0x0DCA) (= @-2 0x200D) (> cc1 0x0D99) (< cc1 0x0DC7))
447     (delete @-3)
448     0x0DCA
449     0x200D
450     (insert cc1)
451     (move @<)
452     (backward))))
453
454  (delete-preceding-zw
455   (cond
456    ((| (= @-1 0x200C) (= @-1 0x200D))
457     (delete @-1)
458     (delete-preceding-zw))))
459
460  (merge-combuva
461   (delete @-1)
462   (delete @+2)
463   (insert c1)))
464
465 (state
466  (init
467   (consonant
468    (cond
469     ((= @-1 0x0DD9)
470      (cond
471       ((= @-2 0x200C)
472        (delete @-2)
473        0x0DD9)
474       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
475        (delete @-1)
476        0x0DD9)))
477     ((= @-1 0x0DDB)
478      (cond
479       ((= @-2 0x200C)
480        (delete @-2)
481        0x0DDB)
482       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
483        (delete @-1)
484        0x0DDB)))))
485   (misc))
486
487  (join
488   (consonant
489    (set c @-1)
490    (cond
491     ((| (= c 0x0DD9) (= c 0x0DDB))
492      (cond
493       ((& (> @-2 0x0D99) (< @-2 0x0DC7))
494        (delete @-1)
495        (move @<)
496        0x0DCA 0x200D
497        (move @>)
498        (insert c))))
499     ((& (> c 0x0D99) (< c 0x0DC7))
500      (move @<)
501      0x0DCA 0x200D))
502    (shift init))
503
504   (nil
505    (shift init))))
506
507 ;; Local Variables:
508 ;; coding: utf-8
509 ;; mode: emacs-lisp
510 ;; End: