-;; si-wijesekera.mim -- Sinhala input method with wijesekera method
-;; Copyright (C) 2005, 2006, 2008
+
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H15PRO112
(description "Sinhala input method based on SLS 1134 Rev. 2:2004.
<http://www.fonts.lk/doc/sin-kbd-layout4.pdf>
-This input method requires surrounding text support.
+This input method uses surrounding text if possible, or a preedit
+buffer otherwise.
")
(title "සි")
+(variable
+ (use-surrounding-text (_"Surrounding text vs. preedit
+If 1, try to use surrounding text. Otherwise, use preedit.")
+ 1 1 0))
+
(macro
;; skip following (virama zwj consonant)* sequence
(forward
(insert c1)))
(map
+ (starter
+ ("A") ("B") ("C") ("D") ("E") ("F") ("G") ("H") ("I") ("J") ("K") ("L") ("M")
+ ("N") ("O") ("P") ("Q") ("R") ("S") ("T") ("U") ("V") ("W") ("X") ("Y") ("Z")
+ ("a") ("b") ("c") ("d") ("e") ("f") ("g") ("h") ("i") ("j") ("k") ("l") ("m")
+ ("n") ("o") ("p") ("q") ("r") ("s") ("t") ("u") ("v") ("w") ("x") ("y") ("z")
+ ("`") ("~") ("\[") ("{") ("\]") ("}") ("\\") ("|") (";") (":") ("'") ("\"")
+ (",") ("<") (".") (">") ((A-o)) ((A-.)) ((A-v)) ((A-c)) ((A-x))
+ ((S-\ )) ((A-\ )) ((A-,)) ((A-a)) ((A-\')) ((A-z)) ((BackSpace)) ((Delete)))
+
(consonant
("l" "ක") ; 0D9A
("L" "ඛ") ; 0D9B
((= c 0x0DDB)
0x0DD9))))
+ (independent
+ ("w" "අ") ; 0D85
+ ("b" "ඉ") ; 0D89
+ ("B" "ඊ") ; 0D8A
+ ("W" "උ") ; 0D8B
+ ("R" "ඍ") ; 0D8D
+ ((A-,) "ඏ") ; 0D8F
+ ("t" "එ") ; 0D91
+ ("T" "ඔ") ; 0D94
+ ("l" "ක") ; 0D9A
+ ("L" "ඛ") ; 0D9B
+ ("." "ග") ; 0D9C
+ (">" "ඝ") ; 0D9D
+ ("X" "ඞ") ; 0D9E
+ ((A-.) "ඟ") ((0x2E A-z) "ඟ") ; 0D9F
+ ("p" "ච") ; 0DA0
+ ("P" "ඡ") ; 0DA1
+ ("c" "ජ") ; 0DA2
+ ("C" "ඣ") ; 0DA3
+ ("\[" "ඤ") ; 0DA4
+ ("{" "ඥ") ; 0DA5
+ ((A-c) "ඦ") ((0x63 A-z) "ඦ") ; 0DA6
+ ("g" "ට") ; 0DA7
+ ("G" "ඨ") ; 0DA8
+ ("v" "ඩ") ; 0DA9
+ ("V" "ඪ") ; 0DAA
+ ("K" "ණ") ; 0DAB
+ ((A-v) "ඬ") ((0x76 A-z) "ඬ") ; 0DAC
+ (";" "ත") ; 0DAD
+ (":" "ථ") ; 0DAE
+ ("o" "ද") ; 0DAF
+ ("O" "ධ") ; 0DB0
+ ("k" "න") ; 0DB1
+ ((A-o) "ඳ") ((0x6F A-z) "ඳ") ; 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
+ ((A-\') "෴") ; 0DF4
+
+ ("J" "ළු") ; muurdhaja lu (0DC5 0DD4)
+
+ ((S-\ ) " ") ; NBSP (00A0)
+ ((A-\ ) "") ; ZWNJ (200C)
+
+ ("\]" ";")
+ ("}" ":")
+ ("'" ".")
+ ("\"" ",")
+ ("z" "'")
+ ("Z" "\"")
+ )
+
+ (dependent
+ ("x" "ං") ; 0D82
+ ((A-x) "ඃ") ; 0D83
+ ("a"
+ (cond
+ ((= @-1 0x0D91) (delete @-) "ඒ") ; 0D92
+ ((= @-1 0x0D94) (delete @-) "ඕ") ; 0D95
+ ((= @-1 0x0DD9) (delete @-) "ේ") ; 0DDA
+ ((= @-1 0x0DDC) (delete @-) "ෝ") ; 0DDD
+ (1 "්"))) ; 0DCA
+ ("d"
+ (cond
+ ((= @-1 0x0D85) (delete @-) "ආ") ; 0D86
+ ((= @-1 0x0DD9) (delete @-) "ො") ; 0DDC
+ (1 "ා"))) ; 0DCF
+ ("e"
+ (cond
+ ((= @-1 0x0D85) (delete @-) "ඇ") ; 0D87
+ (1 "ැ"))) ; 0DD0
+ ("E"
+ (cond
+ ((= @-1 0x0D85) (delete @-) "ඈ") ; 0D88
+ ((& (= @-2 0x0DC5) (= @-1 0x0DD4))
+ (delete @-) "ූ") ; 0DD6
+ (1 "ෑ"))) ; 0DD1
+ ("s" "ි") ; 0DD2
+ ("S" "ී") ; 0DD3
+ ("q" "ු") ; 0DD4
+ ("Q" "ූ") ; 0DD6
+
+ ("D"
+ (cond
+ ((= @-1 0x0D8D) (delete @-) "ඎ") ; 0D8E
+;; The following line does not work when no consonant proceeds.
+;; ((= @-1 0x0DD8) (delete @-) "ෲ") ; 0DF2
+ (1 "ෘ"))) ; 0DD8
+;; This one works with or without a preceeding consonant.
+ ("DD" "ෲ") ; 0DF2
+
+ ("A"
+ (cond
+ ((= @-1 0x0D8B) (delete @-) "ඌ") ; 0D8C
+ ((= @-1 0x0D8F) (delete @-) "ඐ") ; 0D90
+ ((= @-1 0x0D94) (delete @-) "ඖ") ; 0D96
+ ((= @-1 0x0DD9) (delete @-) "ෞ") ; 0DDE
+ (1 "ෟ"))) ; 0DDF
+ ((A-a) "ෳ") ; 0DF3
+
+ ("H" ; yansaya (0DCA 200D 0DBA)
+ (cond
+ ((| (= @-1 0x0DD9) (= @-1 0x0DDB))
+ (move @-) "්ය" (move @>))
+ (1
+ "්ය")))
+
+ ("`" ; rakaransaya (0DCA 200D 0DBB)
+ (cond
+ ((| (= @-1 0x0DD2) (= @-1 0x0DD3) (= @-1 0x0DD9) (= @-1 0x0DDB))
+ (move @-) "්ර" (move @>))
+ (1 "්ර")))
+
+ ("~" ; repaya (0DBB 0DCA 200D)
+ (move @<)
+ "ර්"
+ (move @>))
+ )
+
+ (kombuva
+ ("f" "ෙ")) ; 0DD9
+
(join
- ("\\")))
+ ("\\"))
+
+ (backspace
+ ((BackSpace))))
(state
(init
+ (starter
+ (pushback 1)
+ (cond
+ ((& (= use-surrounding-text 1) (= @-0 -1))
+ (shift surrounding-text))
+ (1
+ (shift preedit)))))
+
+ (surrounding-text
(consonant
(move @<)
(cond
((| (< @-2 0x0D9A) (> @-2 0x0DC6))
(delete @-1)
(move @>)
- 0x0DDB)))))
- (misc)
- (join (shift join)))
+ 0x0DDB))))
+ (commit))
+ (misc
+ (commit))
+ (join
+ (shift join)))
(join
(consonant
(insert c))))
((& (>= c 0x0D9A) (<= c 0x0DC6))
0x0DCA 0x200D))
- (shift init))
+ (commit)
+ (shift surrounding-text))
(nil
- (shift init))))
+ (commit)
+ (shift surrounding-text)))
+
+ (preedit
+ (independent
+ (shift independent-state))
+ (kombuva
+ (shift kombuva-state))
+ (dependent))
+
+ (independent-state
+ (dependent)
+ (join
+ (cond
+ ((| (= @-1 0x0DD9) (= @-1 0x0DDB))
+ (shift join-state))
+ ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
+ (undo -1))
+ (1
+ (shift join-state))))
+ (backspace
+ (undo)))
+
+ (join-state
+ (t
+ (mark p))
+ (independent
+ (move p)
+ (set c @-1)
+ (cond
+ ((| (= c 0x0DD9) (= c 0x0DDB))
+ (delete @-)
+ "්" ; 0DCA 200D
+ (move @>)
+ (insert c))
+ (1
+ "්" ; 0DCA 200D
+ (move @>)))
+ (shift independent-state))
+ (backspace
+ (undo)))
+
+ (kombuva-state
+ (t
+ (mark p))
+ (independent
+ (cond
+ ((& (= @0 0x0DD9) (= @1 0x0D91))
+ (delete @<)
+ "ඓ" ; 0D93
+ (shift independent-state))
+ ((& (= @0 0x0DD9) (< @2 0))
+ (move @0)
+ (delete @+)
+ (move @>)
+ "ෙ" ; 0DD9
+ (shift independent-state))
+ ((& (= @0 0x0DDB) (< @2 0))
+ (move @0)
+ (delete @+)
+ (move @>)
+ "ෛ" ; 0DDB
+ (shift independent-state))
+ (1
+ (delete p)
+ (pushback 1)
+ (shift preedit))))
+ (kombuva
+ (mark p)
+ (cond
+ ((& (= @0 0x0DD9) (< @2 0))
+ (delete @<)
+ "ෛ") ; 0DDB
+ (1
+ (delete @-)
+ (pushback 1)
+ (shift preedit))))
+ (dependent
+ (mark p))
+ (backspace
+ (undo))))
;; Local Variables:
;; coding: utf-8