Add si-wijesekera.mim.
[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
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    (delete @-1)
325    (cond
326     ((= c 0x0D86)
327      0x0D85)
328     ((= c 0x0D87)
329      0x0D85)
330     ((= c 0x0D88)
331      0x0D85)
332     ((= c 0x0D8C)
333      0x0D8B)
334     ((= c 0x0D8E)
335      0x0D8D)
336     ((= c 0x0D90)
337      0x0D8F)
338     ((= c 0x0D92)
339      0x0D8F)
340     ((= c 0x0D93)
341      (cond ((& (> @-1 0x0D99) (< @-1 0x0DC7)) 0x200C))
342      0x0DD9)
343     ((= c 0x0D95)
344      0x0D94)
345     ((= c 0x0D96)
346      0x0D94)
347
348     ((= c 0x0DD9)
349      (cond
350       ((| (< @-1 0x0D9A) (> @-1 0x0DC6)))
351       ((& (> @-2 0x0D99) (< @-2 0x0DC7))
352        (delete @-1)
353        0x200C
354        0x0DD9)
355       ((& (> @-4 0x0D99) (< @-1 0x0DC7) (= @-3 0x0DCA) (= @-2 0x200D))
356        (delete @-3)
357        0x0DD9)
358       (1
359        (delete @-1)
360        0x0DD9)))
361
362     ((= c 0x0DDA)
363      0x0DD9)
364
365     ((= c 0x0DDB)
366      (cond
367       ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
368        0x0DD9)
369       ((& (> @-2 0x0D99) (< @-2 0x0DC7))
370        (delete @-1)
371        0x200C
372        0x0DDB)
373       ((& (> @-4 0x0D99) (< @-1 0x0DC7) (= @-3 0x0DCA) (= @-2 0x200D))
374        (delete @-3)
375        0x0DDB)
376       (1
377        (delete @-1)
378        0x0DDB)))
379
380     ((= c 0x0DDC)
381      0x0DD9)
382     ((= c 0x0DDD)
383      0x0DDC)
384     ((= c 0x0DDE)
385      0x0DD9)
386     ((= c 0x0DF2)
387      0x0DD8)
388     ((& (> c 0x0D99) (< c 0x0DC7) (= @-2 0x0DCA) (= @-1 0x200D))
389      (delete @-2)))
390
391    (cond
392     ((& (> @-1 0x0D99)
393         (< @-1 0x0DC7)
394         (| (= @+1 0x0DD9) (= @+1 0x0DDB)))
395      0x200C)))
396
397   ("\\" (shift join))))
398
399 (macro
400  ;; prototype
401  (forward (set x 0))
402  (backward (set x 0))
403  (delete-preceding-zw (set x 0))
404
405  ;; skip following (virama zwj consonant)* sequence
406  (forward
407   (set cc3 @+3)
408   (cond
409    ((& (= @+1 0x0DCA) (= @+2 0x200D) (> cc3 0x0D99) (< cc3 0x0DC7))
410     (delete @+3)
411     0x0DCA 0x200D
412     (insert cc3)
413     (forward))))
414
415  (backward
416   (set cc1 @-1)
417   (cond
418    ((& (= @-3 0x0DCA) (> cc11 0x0D99) (< cc1 0x0DC7) (= @-2 0x200G))
419     (delete @-3)
420     0x0DCA
421     0x200D
422     (insert cc1)
423     (move @<)
424     (backward))))
425
426  (delete-preceding-zw
427   (cond
428    ((| (= @-1 0x200C) (= @-1 0x200D))
429     (delete @-1)
430     (delete-preceding-zw)))))
431
432 (state
433  (init
434   (consonant
435    (cond
436     ((= @-1 0x0DD9)
437      (cond
438       ((= @-2 0x200C)
439        (delete @-2)
440        0x0DD9)
441       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
442        (delete @-1)
443        0x0DD9)))
444     ((= @-1 0x0DDB)
445      (cond
446       ((= @-2 0x200C)
447        (delete @-2)
448        0x0DDB)
449       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
450        (delete @-1)
451        0x0DDB)))))
452   (misc))
453
454  (join
455   (consonant
456    (set c @-1)
457    (cond
458     ((| (= c 0x0DD9) (= c 0x0DDB))
459      (cond
460       ((& (> @-2 0x0D99) (< @-2 0x0DC7))
461        (delete @-1)
462        (move @<)
463        0x0DCA 0x200D
464        (move @>)
465        (insert c))))
466     ((& (> c 0x0D99) (< c 0x0DC7))
467      (move @<)
468      0x0DCA 0x200D))
469    (shift init))
470
471   (nil
472    (shift init))))
473
474 ;; Local Variables:
475 ;; coding: utf-8
476 ;; mode: emacs-lisp
477 ;; End: