Update FSF postal address.
[m17n/m17n-db.git] / 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 is disabled.
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      (delete @-2))
355
356     ((= c 0x0DD9)
357      (cond
358       ((| (< @-1 0x0D9A) (> @-1 0x0DC6)))
359       ((= @+1 0x0D91)
360        (delete @-1)
361        (delete @+1)
362        0x0D93)
363       ((& (>= @+1 0x0D9A) (<= @+1 0x0DC6))
364        (set c1 @+1)
365        (cond
366         ((= @+2 0x0DD9)
367          (merge-kombuva)
368          0x0DDB)
369         ((= @+2 0x0DCA)
370          (merge-kombuva)
371          0x0DDA)
372         ((= @+2 0x0DCF)
373          (merge-kombuva)
374          0x0DDC)
375         ((= @+2 0x0DDF)
376          (merge-kombuva)
377          0x0DDE)
378         (1
379          (delete @-1)
380          (delete @+1)
381          (insert c1)
382          0x0DD9)))
383       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
384        (delete @-1)
385        0x200C
386        0x0DD9)
387       ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D))
388        (delete @-3)
389        0x0DD9)
390       (1
391        (delete @-1)
392        0x0DD9)))
393
394     ((= c 0x0DDA)
395      0x0DD9)
396
397     ((= c 0x0DDB)
398      (cond
399       ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
400        0x0DD9)
401       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
402        (delete @-1)
403        0x200C
404        0x0DDB)
405       ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D))
406        (delete @-3)
407        0x0DDB)
408       (1
409        (delete @-1)
410        0x0DDB)))
411
412     ((= c 0x0DDC)
413      0x0DD9)
414     ((= c 0x0DDD)
415      0x0DDC)
416     ((= c 0x0DDE)
417      0x0DD9)
418     ((= c 0x0DF2)
419      0x0DD8))
420
421    (cond
422     ((& (>= @-1 0x0D9A)
423         (<= @-1 0x0DC6)
424         (| (= @+1 0x0DD9) (= @+1 0x0DDB)))
425      0x200C)))
426
427   ((Delete)
428    (delete-following-zw)
429    (set c @+1)
430    (cond
431     ((< c 0)
432      (unhandle)))
433    (delete @+1)
434    (cond
435     ((= c 0x0D86)
436      0x0DCF)
437     ((= c 0x0D87)
438      0x0DD0)
439     ((= c 0x0D88)
440      0x0DD1)
441     ((= c 0x0D8C)
442      0x0DDF)
443     ((= c 0x0D8E)
444      0x0DD8)
445     ((= c 0x0D90)
446      0x0DDF)
447     ((= c 0x0D92)
448      0x0DCA)
449     ((= c 0x0D93)
450      0x0D91)
451     ((& (>= c 0x0D9A) (<= c 0x0DC6))
452      (forward)
453      (cond
454       ((= @+1 0x0DD9)
455        (delete @+1)
456        (move @<)
457        (insert c))
458       ((= @+1 0x0DDB)
459        (delete @+1)
460        0x0DD9
461        (move @<)
462        (insert c))
463       ((= @+1 0x0DDA)
464        (delete @+1)
465        0x0DCA
466        (move @<)
467        (insert c))
468       ((= @+1 0x0DDC)
469        (delete @+1)
470        0x0DCF
471        (move @<)
472        (insert c))
473       ((= @+1 0x0DDE)
474        (delete @+1)
475        0x0DDF
476        (move @<)
477        (insert c))
478       (1
479        (delete @<))))
480     ((= c 0x0DDB)
481      0x0DD9)))
482
483   ("\\" (shift join))))
484
485 (macro
486  ;; prototype
487  (forward (set x 0))
488  (backward (set x 0))
489  (delete-preceding-zw (set x 0))
490  (delete-following-zw (set x 0))
491
492  ;; skip following (virama zwj consonant)* sequence
493  (forward
494   (set cc3 @+3)
495   (cond
496    ((& (= @+1 0x0DCA) (= @+2 0x200D) (>= cc3 0x0D9A) (<= cc3 0x0DC6))
497     (delete @+3)
498     0x0DCA 0x200D
499     (insert cc3)
500     (forward))))
501
502  (backward
503   (set cc1 @-1)
504   (cond
505    ((& (= @-3 0x0DCA) (= @-2 0x200D) (>= cc1 0x0D9A) (<= cc1 0x0DC6))
506     (delete @-3)
507     0x0DCA
508     0x200D
509     (insert cc1)
510     (move @<)
511     (backward))))
512
513  (delete-preceding-zw
514   (cond
515    ((| (= @-1 0x200C) (= @-1 0x200D))
516     (delete @-1)
517     (delete-preceding-zw))))
518
519  (delete-following-zw
520   (cond
521    ((| (= @+1 0x200C) (= @+1 0x200D))
522     (delete @+1)
523     (delete-following-zw))))
524
525  (merge-kombuva
526   (delete @-1)
527   (delete @+2)
528   (insert c1)))
529
530 (state
531  (init
532   (consonant
533    (cond
534     ((= @-1 0x0DD9)
535      (cond
536       ((= @-2 0x200C)
537        (delete @-2)
538        0x0DD9)
539       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
540        (delete @-1)
541        0x0DD9)))
542     ((= @-1 0x0DDB)
543      (cond
544       ((= @-2 0x200C)
545        (delete @-2)
546        0x0DDB)
547       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
548        (delete @-1)
549        0x0DDB)))))
550   (misc))
551
552  (join
553   (consonant
554    (set c @-1)
555    (cond
556     ((| (= c 0x0DD9) (= c 0x0DDB))
557      (cond
558       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
559        (delete @-1)
560        (move @<)
561        0x0DCA 0x200D
562        (move @>)
563        (insert c))))
564     ((& (>= c 0x0D9A) (<= c 0x0DC6))
565      (move @<)
566      0x0DCA 0x200D))
567    (shift init))
568
569   (nil
570    (shift init))))
571
572 ;; Local Variables:
573 ;; coding: utf-8
574 ;; mode: emacs-lisp
575 ;; End: