Remove the "finish" state and change mode to emacs-lisp.
[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 0x0DD9)
352      (cond
353       ((| (< @-1 0x0D9A) (> @-1 0x0DC6)))
354       ((& (> @-2 0x0D99) (< @-2 0x0DC7))
355        (delete @-1)
356        0x200C
357        0x0DD9)
358       ((& (> @-4 0x0D99) (< @-1 0x0DC7) (= @-3 0x0DCA) (= @-2 0x200D))
359        (delete @-3)
360        0x0DD9)
361       (1
362        (delete @-1)
363        0x0DD9)))
364
365     ((= c 0x0DDA)
366      0x0DD9)
367
368     ((= c 0x0DDB)
369      (cond
370       ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
371        0x0DD9)
372       ((& (> @-2 0x0D99) (< @-2 0x0DC7))
373        (delete @-1)
374        0x200C
375        0x0DDB)
376       ((& (> @-4 0x0D99) (< @-1 0x0DC7) (= @-3 0x0DCA) (= @-2 0x200D))
377        (delete @-3)
378        0x0DDB)
379       (1
380        (delete @-1)
381        0x0DDB)))
382
383     ((= c 0x0DDC)
384      0x0DD9)
385     ((= c 0x0DDD)
386      0x0DDC)
387     ((= c 0x0DDE)
388      0x0DD9)
389     ((= c 0x0DF2)
390      0x0DD8)
391     ((& (> c 0x0D99) (< c 0x0DC7) (= @-2 0x0DCA) (= @-1 0x200D))
392      (delete @-2)))
393
394    (cond
395     ((& (> @-1 0x0D99)
396         (< @-1 0x0DC7)
397         (| (= @+1 0x0DD9) (= @+1 0x0DDB)))
398      0x200C)))
399
400   ("\\" (shift join))))
401
402 (macro
403  ;; prototype
404  (forward (set x 0))
405  (backward (set x 0))
406  (delete-preceding-zw (set x 0))
407
408  ;; skip following (virama zwj consonant)* sequence
409  (forward
410   (set cc3 @+3)
411   (cond
412    ((& (= @+1 0x0DCA) (= @+2 0x200D) (> cc3 0x0D99) (< cc3 0x0DC7))
413     (delete @+3)
414     0x0DCA 0x200D
415     (insert cc3)
416     (forward))))
417
418  (backward
419   (set cc1 @-1)
420   (cond
421    ((& (= @-3 0x0DCA) (= @-2 0x200D) (> cc1 0x0D99) (< cc1 0x0DC7))
422     (delete @-3)
423     0x0DCA
424     0x200D
425     (insert cc1)
426     (move @<)
427     (backward))))
428
429  (delete-preceding-zw
430   (cond
431    ((| (= @-1 0x200C) (= @-1 0x200D))
432     (delete @-1)
433     (delete-preceding-zw)))))
434
435 (state
436  (init
437   (consonant
438    (cond
439     ((= @-1 0x0DD9)
440      (cond
441       ((= @-2 0x200C)
442        (delete @-2)
443        0x0DD9)
444       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
445        (delete @-1)
446        0x0DD9)))
447     ((= @-1 0x0DDB)
448      (cond
449       ((= @-2 0x200C)
450        (delete @-2)
451        0x0DDB)
452       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
453        (delete @-1)
454        0x0DDB)))))
455   (misc))
456
457  (join
458   (consonant
459    (set c @-1)
460    (cond
461     ((| (= c 0x0DD9) (= c 0x0DDB))
462      (cond
463       ((& (> @-2 0x0D99) (< @-2 0x0DC7))
464        (delete @-1)
465        (move @<)
466        0x0DCA 0x200D
467        (move @>)
468        (insert c))))
469     ((& (> c 0x0D99) (< c 0x0DC7))
470      (move @<)
471      0x0DCA 0x200D))
472    (shift init))
473
474   (nil
475    (shift init))))
476
477 ;; Local Variables:
478 ;; coding: utf-8
479 ;; mode: emacs-lisp
480 ;; End: