*** empty log message ***
[m17n/m17n-db.git] / MIM / si-wijesekera.mim
index 2c241ba..5465cdc 100644 (file)
@@ -1,5 +1,5 @@
 ;; si-wijesekera.mim -- Sinhala input method with wijesekera method
-;; Copyright (C) 2005, 2006
+;; Copyright (C) 2005, 2006, 2008, 2009
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H15PRO112
 
 ;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 ;; Boston, MA 02110-1301, USA.
 
-(input-method si wijesekera)
+(input-method si wijesekera (version "1.6.0"))
 
 (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.
+  <http://www.siyabas.lk/docs/sin-kbd-layout5.pdf>
+Although this code supports both surrounding text and preedit,
+the former is disabled by default to avoid confusion caused by
+faulty applications.
 ")
 
 (title "සි")
 
-(macro
- ;; prototype
- (forward (set x 0))
- (backward (set x 0))
- (delete-preceding-zw (set x 0))
- (delete-following-zw (set x 0))
+(variable
+ (use-surrounding-text (_"Surrounding text vs. preedit.
+If 1, try to use surrounding text.  Otherwise, use preedit.")
+                      0 1 0))
 
+(macro
  ;; skip following (virama zwj consonant)* sequence
  (forward
-  (set cc3 @+3)
+  (set cc3 @+2)
   (cond
-   ((& (= @+1 0x0DCA) (= @+2 0x200D) (>= cc3 0x0D9A) (<= cc3 0x0DC6))
+   ((& (= @+0 0x0DCA) (= @+1 0x200D) (>= cc3 0x0D9A) (<= cc3 0x0DC6))
     (delete @+3)
     0x0DCA 0x200D
     (insert cc3)
@@ -66,7 +67,7 @@ This input method requires surrounding text support.
 
  (delete-following-zw
   (cond
-   ((| (= @+1 0x200C) (= @+1 0x200D))
+   ((| (= @+0 0x200C) (= @+0 0x200D))
     (delete @+1)
     (delete-following-zw))))
 
@@ -76,6 +77,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
@@ -140,7 +150,7 @@ This input method requires surrounding text support.
   ("Q" "ූ")                          ; 0DD6
 
   ((A-a) "ෳ")                                ; 0DF3
-  ((A-') "෴")                                ; 0DF4
+  ((A-\') "෴")                               ; 0DF4
 
   ("\]" ";")
   ("}" ":")
@@ -255,13 +265,13 @@ This input method requires surrounding text support.
      0x0DDF)))
 
   ("f"
-   (set c @+1)
+   (set c @+0)
    (cond
     ((& (>= c 0x0D9A) (<= c 0x0DC6))
      (delete @+1)
      (insert c)
      (forward)
-     (set c @+1)
+     (set c @+0)
      (cond
       ((= c 0x0DCA)
        (delete @+1)
@@ -283,7 +293,7 @@ This input method requires surrounding text support.
     ((= c 0x0DD9)
      (delete @+1)
      0x0DDB)
-    ((& (= c 0x200C) (= @+2 0x0DD9))
+    ((& (= c 0x200C) (= @+1 0x0DD9))
      (delete @+2)
      0x200C 0x0DDB)
     ((& (= @-1 0x0DD9)
@@ -406,23 +416,23 @@ This input method requires surrounding text support.
     ((= c 0x0DD9)
      (cond
       ((| (< @-1 0x0D9A) (> @-1 0x0DC6)))
-      ((= @+1 0x0D91)
+      ((= @+0 0x0D91)
        (delete @-1)
        (delete @+1)
        0x0D93)
-      ((& (>= @+1 0x0D9A) (<= @+1 0x0DC6))
-       (set c1 @+1)
+      ((& (>= @+0 0x0D9A) (<= @+0 0x0DC6))
+       (set c1 @+0)
        (cond
-       ((= @+2 0x0DD9)
+       ((= @+1 0x0DD9)
         (merge-kombuva)
         0x0DDB)
-       ((= @+2 0x0DCA)
+       ((= @+1 0x0DCA)
         (merge-kombuva)
         0x0DDA)
-       ((= @+2 0x0DCF)
+       ((= @+1 0x0DCF)
         (merge-kombuva)
         0x0DDC)
-       ((= @+2 0x0DDF)
+       ((= @+1 0x0DDF)
         (merge-kombuva)
         0x0DDE)
        (1
@@ -481,12 +491,12 @@ This input method requires surrounding text support.
    (cond
     ((& (>= @-1 0x0D9A)
        (<= @-1 0x0DC6)
-       (| (= @+1 0x0DD9) (= @+1 0x0DDB)))
+       (| (= @+0 0x0DD9) (= @+0 0x0DDB)))
      0x200C)))
 
   ((Delete)
    (delete-following-zw)
-   (set c @+1)
+   (set c @+0)
    (cond
     ((< c 0)
      (unhandle)))
@@ -511,26 +521,26 @@ This input method requires surrounding text support.
     ((& (>= c 0x0D9A) (<= c 0x0DC6))
      (forward)
      (cond
-      ((= @+1 0x0DD9)
+      ((= @+0 0x0DD9)
        (delete @+1)
        (move @<)
        (insert c))
-      ((= @+1 0x0DDB)
+      ((= @+0 0x0DDB)
        (delete @+1)
        0x0DD9
        (move @<)
        (insert c))
-      ((= @+1 0x0DDA)
+      ((= @+0 0x0DDA)
        (delete @+1)
        0x0DCA
        (move @<)
        (insert c))
-      ((= @+1 0x0DDC)
+      ((= @+0 0x0DDC)
        (delete @+1)
        0x0DCF
        (move @<)
        (insert c))
-      ((= @+1 0x0DDE)
+      ((= @+0 0x0DDE)
        (delete @+1)
        0x0DDF
        (move @<)
@@ -538,12 +548,160 @@ This input method requires surrounding text support.
       (1
        (delete @<))))
     ((= c 0x0DDB)
-     0x0DD9)))
+     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
 
-  ("\\" (shift join))))
+  ("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
@@ -566,8 +724,12 @@ This input method requires surrounding text support.
       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
        (delete @-1)
        (move @>)
-       0x0DDB)))))
-  (misc))
+       0x0DDB))))
+   (commit))
+  (misc
+   (commit))
+  (join
+   (shift join)))
 
  (join
   (consonant
@@ -583,10 +745,93 @@ 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)
+  (nil
+   (unhandle)))
+
+ (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