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