--- /dev/null
+;; Copyright (C) 2005
+;; National Institute of Advanced Industrial Science and Technology (AIST)
+;; Registration Number H15PRO112
+
+;; This file is part of the m17n database; a sub-part of the m17n
+;; library.
+
+;; The m17n library is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU Lesser General Public License
+;; as published by the Free Software Foundation; either version 2.1 of
+;; the License, or (at your option) any later version.
+
+;; The m17n library is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; Lesser General Public License for more details.
+
+;; You should have received a copy of the GNU Lesser General Public
+;; License along with the m17n library; if not, write to the Free
+;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+;; 02111-1307, USA.
+
+(input-method si wijesekera)
+
+(description "Sinhala input method based on SLS 1134 Rev. 2:2004.
+ <http://http://www.fonts.lk/doc/sin-kbd-layout4.pdf>
+")
+
+(title "Wijesekera")
+
+(map
+ (consonant
+ ("l" "ක") ; 0D9A
+ ("L" "ඛ") ; 0D9B
+ ("." "ග") ; 0D9C
+ (">" "ඝ") ; 0D9D
+ ("X" "ඞ") ; 0D9E
+ ((A-.) "ඟ") ; 0D9F
+ ("p" "ච") ; 0DA0
+ ("P" "ඡ") ; 0DA1
+ ("c" "ජ") ; 0DA2
+ ("C" "ඣ") ; 0DA3
+ ("\[" "ඤ") ; 0DA4
+ ("{" "ඥ") ; 0DA5
+ ((A-c) "ඦ") ; 0DA6
+ ("g" "ට") ; 0DA7
+ ("G" "ඨ") ; 0DA8
+ ("v" "ඩ") ; 0DA9
+ ("V" "ඪ") ; 0DAA
+ ("K" "ණ") ; 0DAB
+ ((A-v) "ඬ") ; 0DAC
+ (";" "ත") ; 0DAD
+ (":" "ථ") ; 0DAE
+ ("o" "ද") ; 0DAF
+ ("O" "ධ") ; 0DB0
+ ("k" "න") ; 0DB1
+ ((A-o) "ඳ") ; 0DB3
+ ("m" "ප") ; 0DB4
+ ("M" "ඵ") ; 0DB5
+ ("n" "බ") ; 0DB6
+ ("N" "භ") ; 0DB7
+ ("u" "ම") ; 0DB8
+ ("U" "ඹ") ; 0DB9
+ ("h" "ය") ; 0DBA
+ ("r" "ර") ; 0DBB
+ ("," "ල") ; 0DBD
+ ("j" "ව") ; 0DC0
+ ("Y" "ශ") ; 0DC1
+ ("I" "ෂ") ; 0DC2
+ ("i" "ස") ; 0DC3
+ ("y" "හ") ; 0DC4
+ ("<" "ළ") ; 0DC5
+ ("F" "ෆ") ; 0DC6
+ )
+
+ (misc
+ ("x" "ං") ; 0D82
+ ((A-x) "ඃ") ; 0D83
+
+ ("w" "අ") ; 0D85
+ ("b" "ඉ") ; 0D89
+ ("B" "ඊ") ; 0D8A
+ ("W" "උ") ; 0D8B
+ ("R" "ඍ") ; 0D8D
+ ((A-,) "ඏ") ; 0D8F
+
+ ("T" "ඔ") ; 0D94
+
+ ("s" "ි") ; 0DD2
+ ("S" "ී") ; 0DD3
+ ("q" "ු") ; 0DD4
+
+ ("Q" "ූ") ; 0DD6
+
+ ((A-a) "ෳ") ; 0DF3
+ ((A-') "෴") ; 0DF4
+
+ ("\]" ";")
+ ("}" ":")
+ ("'" ".")
+ ("\"" ",")
+ ("z" "'")
+ ("Z" "\"")
+
+ ("|" "්") ; touch (ZWJ 0DCA)
+ ("J" "ළු") ; muurdhaja lu (0DC5 0DD4)
+ ((S-\ ) " ") ; NBSP
+ ((A-\ ) "") ; ZWNJ
+
+ ("t"
+ (set c @-2)
+ (cond
+ ((= @-1 0x0DD9)
+ (cond
+ ((= c 0x200C)
+ (delete @-2)
+ 0x0D93)
+ ((| (< c 0x0D9A) (> c 0x0DC6))
+ (delete @-1)
+ 0x0D93)
+ (1
+ 0x0D91)))
+ (1
+ 0x0D91)))
+
+ ("a"
+ (set c @-1)
+ (cond
+ ((= c 0x0D91)
+ (delete @-1)
+ 0x0D92)
+ ((= c 0x0D94)
+ (delete @-1)
+ 0x0D95)
+ ((= c 0x0DD9)
+ (delete @-1)
+ 0x0DDA)
+ ((= c 0x0DDC)
+ (delete @-1)
+ 0x0DDD)
+ (1
+ 0x0DCA)))
+
+ ("d"
+ (set c @-1)
+ (cond
+ ((= c 0x0D85)
+ (delete @-1)
+ 0x0D86)
+ ((= c 0x0DD9)
+ (delete @-1)
+ 0x0DDC)
+ (1
+ 0x0DCF)))
+
+ ("e"
+ (cond
+ ((= @-1 0x0D85)
+ (delete @-1)
+ 0x0D87)
+ (1
+ 0x0DD0)))
+
+ ("E"
+ (set c @-1)
+ (cond
+ ((= c 0x0D85)
+ (delete @-1)
+ 0x0D88)
+ ((= c 0x0DD4)
+ (cond
+ ((= @-2 0x0DC5)
+ (delete @-1)
+ 0x0DD6)
+ (1
+ 0x0DD1)))
+ (1
+ 0x0DD1)))
+
+ ("D"
+ (set c @-1)
+ (cond
+ ((= c 0x0D8D)
+ (delete @-1)
+ 0x0D8E)
+ ((= c 0x0DD8)
+ (delete @-1)
+ 0x0DF2)
+ (1
+ 0x0DD8)))
+
+ ("A"
+ (set c @-1)
+ (cond
+ ((= c 0x0D8B)
+ (delete @-1)
+ 0x0D8C)
+ ((= c 0x0D8F)
+ (delete @-1)
+ 0x0D90)
+ ((= c 0x0D94)
+ (delete @-1)
+ 0x0D96)
+ ((= c 0x0DD9)
+ (delete @-1)
+ 0x0DDE)
+ (1
+ 0x0DDF)))
+
+ ("f"
+ (set c @+1)
+ (cond
+ ((& (> c 0x0D99) (< c 0x0DC7))
+ (delete @+1)
+ (insert c)
+ (forward)
+ (set c @+1)
+ (cond
+ ((= c 0x0DCA)
+ (delete @+1)
+ 0x0DDA)
+ ((= c 0x0DD9)
+ (delete @+1)
+ 0x0DDB)
+ ((= c 0x0DCF)
+ (delete @+1)
+ 0x0DDC)
+ ((= c 0x0DDF)
+ (delete @+1)
+ 0x0DDE)
+ (1
+ 0x0DD9)))
+ ((= c 0x0D91)
+ (delete @+1)
+ 0x0D93)
+ ((= c 0x0DD9)
+ (delete @+1)
+ 0x0DDB)
+ ((& (= c 0x200C) (= @+2 0x0DD9))
+ (delete @+2)
+ 0x200C 0x0DDB)
+ ((& (= @-1 0x0DD9)
+ (| (< @-2 0x0D9A) (> @-2 0x0DC6)))
+ (delete @-1)
+ 0x0DDB)
+ ((& (> @-1 0x0D99) (< @-1 0xDC7))
+ 0x200C 0x0DD9)
+ (1
+ 0x0DD9)))
+
+ ;; sanyaka letters
+ ((A-z)
+ (set c @-1)
+ (cond
+ ((= c 0x0DAF)
+ (delete @-1)
+ 0x0DB3)
+ ((= c 0x0D9C)
+ (delete @-1)
+ 0x0D9F)
+ ((= c 0x0DA9)
+ (delete @-1)
+ 0x0DAC)
+ ((= c 0x0DA2)
+ (delete @-1)
+ 0x0DA6)))
+
+ ;; yansaya
+ ("H"
+ (set c @-1)
+ (cond
+ ((= c 0x0DD9)
+ (delete @-1))
+ ((= c 0x0DDB)
+ (delete @-1))
+ (1
+ (set c 0)))
+ (cond
+ ((& (> @-1 0x0D99) (< @-1 0x0DC6))
+ 0x0DCA 0x200D 0x0DBA))
+ (cond
+ ((> c 0)
+ (insert c))))
+
+ ;; rakaransaya
+ ("`"
+ (set c @-1)
+ (cond
+ ((| (= c 0x0DD9) (= c 0x0DDB) (= c 0x0DD2) (= c 0x0DD3))
+ (delete @-1))
+ (1
+ (set c 0)))
+ (cond
+ ((& (> @-1 0x0D99) (< @-1 0x0DC7))
+ 0x0DCA 0x200D 0x0DBB))
+ (cond
+ ((> c 0)
+ (insert c))))
+
+ ;; repaya
+ ("~"
+ (set c @-1)
+ (cond
+ ((| (= c 0x0DD9) (= c 0x0DDB))
+ (delete @-1))
+ (1
+ (set c 0)))
+ (backward)
+ (cond
+ ((& (> @-1 0x0D99) (< @-1 0x0DC7))
+ (set c1 @-1)
+ (delete @-1)
+ (insert c1)
+ (move @<)
+ 0x0DBB 0x0DCA 0x200D))
+ (cond
+ ((> c 0)
+ (move @>)
+ (insert c))))
+
+ ((BackSpace)
+ (delete-preceding-zw)
+ (set c @-1)
+ (delete @-1)
+ (cond
+ ((= c 0x0D86)
+ 0x0D85)
+ ((= c 0x0D87)
+ 0x0D85)
+ ((= c 0x0D88)
+ 0x0D85)
+ ((= c 0x0D8C)
+ 0x0D8B)
+ ((= c 0x0D8E)
+ 0x0D8D)
+ ((= c 0x0D90)
+ 0x0D8F)
+ ((= c 0x0D92)
+ 0x0D8F)
+ ((= c 0x0D93)
+ (cond ((& (> @-1 0x0D99) (< @-1 0x0DC7)) 0x200C))
+ 0x0DD9)
+ ((= c 0x0D95)
+ 0x0D94)
+ ((= c 0x0D96)
+ 0x0D94)
+
+ ((= c 0x0DD9)
+ (cond
+ ((| (< @-1 0x0D9A) (> @-1 0x0DC6)))
+ ((& (> @-2 0x0D99) (< @-2 0x0DC7))
+ (delete @-1)
+ 0x200C
+ 0x0DD9)
+ ((& (> @-4 0x0D99) (< @-1 0x0DC7) (= @-3 0x0DCA) (= @-2 0x200D))
+ (delete @-3)
+ 0x0DD9)
+ (1
+ (delete @-1)
+ 0x0DD9)))
+
+ ((= c 0x0DDA)
+ 0x0DD9)
+
+ ((= c 0x0DDB)
+ (cond
+ ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
+ 0x0DD9)
+ ((& (> @-2 0x0D99) (< @-2 0x0DC7))
+ (delete @-1)
+ 0x200C
+ 0x0DDB)
+ ((& (> @-4 0x0D99) (< @-1 0x0DC7) (= @-3 0x0DCA) (= @-2 0x200D))
+ (delete @-3)
+ 0x0DDB)
+ (1
+ (delete @-1)
+ 0x0DDB)))
+
+ ((= c 0x0DDC)
+ 0x0DD9)
+ ((= c 0x0DDD)
+ 0x0DDC)
+ ((= c 0x0DDE)
+ 0x0DD9)
+ ((= c 0x0DF2)
+ 0x0DD8)
+ ((& (> c 0x0D99) (< c 0x0DC7) (= @-2 0x0DCA) (= @-1 0x200D))
+ (delete @-2)))
+
+ (cond
+ ((& (> @-1 0x0D99)
+ (< @-1 0x0DC7)
+ (| (= @+1 0x0DD9) (= @+1 0x0DDB)))
+ 0x200C)))
+
+ ("\\" (shift join))))
+
+(macro
+ ;; prototype
+ (forward (set x 0))
+ (backward (set x 0))
+ (delete-preceding-zw (set x 0))
+
+ ;; skip following (virama zwj consonant)* sequence
+ (forward
+ (set cc3 @+3)
+ (cond
+ ((& (= @+1 0x0DCA) (= @+2 0x200D) (> cc3 0x0D99) (< cc3 0x0DC7))
+ (delete @+3)
+ 0x0DCA 0x200D
+ (insert cc3)
+ (forward))))
+
+ (backward
+ (set cc1 @-1)
+ (cond
+ ((& (= @-3 0x0DCA) (> cc11 0x0D99) (< cc1 0x0DC7) (= @-2 0x200G))
+ (delete @-3)
+ 0x0DCA
+ 0x200D
+ (insert cc1)
+ (move @<)
+ (backward))))
+
+ (delete-preceding-zw
+ (cond
+ ((| (= @-1 0x200C) (= @-1 0x200D))
+ (delete @-1)
+ (delete-preceding-zw)))))
+
+(state
+ (init
+ (consonant
+ (cond
+ ((= @-1 0x0DD9)
+ (cond
+ ((= @-2 0x200C)
+ (delete @-2)
+ 0x0DD9)
+ ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
+ (delete @-1)
+ 0x0DD9)))
+ ((= @-1 0x0DDB)
+ (cond
+ ((= @-2 0x200C)
+ (delete @-2)
+ 0x0DDB)
+ ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
+ (delete @-1)
+ 0x0DDB)))))
+ (misc))
+
+ (join
+ (consonant
+ (set c @-1)
+ (cond
+ ((| (= c 0x0DD9) (= c 0x0DDB))
+ (cond
+ ((& (> @-2 0x0D99) (< @-2 0x0DC7))
+ (delete @-1)
+ (move @<)
+ 0x0DCA 0x200D
+ (move @>)
+ (insert c))))
+ ((& (> c 0x0D99) (< c 0x0DC7))
+ (move @<)
+ 0x0DCA 0x200D))
+ (shift init))
+
+ (nil
+ (shift init))))
+
+;; Local Variables:
+;; coding: utf-8
+;; mode: emacs-lisp
+;; End: