Merge si-wijesekera-preedit.mim to si-wijesekera.mim.
authorntakahas <ntakahas>
Fri, 4 Sep 2009 12:50:31 +0000 (12:50 +0000)
committerntakahas <ntakahas>
Fri, 4 Sep 2009 12:50:31 +0000 (12:50 +0000)
MIM/si-wijesekera.mim

index 34ffa47..8b2c192 100644 (file)
@@ -1,5 +1,4 @@
-;; 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
@@ -70,6 +75,15 @@ This input method requires surrounding text support.
   (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
@@ -534,11 +548,158 @@ This input method requires surrounding text support.
     ((= 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
@@ -561,9 +722,12 @@ This input method requires surrounding text support.
       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
        (delete @-1)
        (move @>)
-       0x0DDB)))))
-  (misc)
-  (join (shift join)))
+       0x0DDB))))
+   (commit))
+  (misc
+   (commit))
+  (join
+   (shift join)))
 
  (join
   (consonant
@@ -579,10 +743,91 @@ This input method requires surrounding text support.
        (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