*** empty log message ***
[m17n/m17n-db.git] / si-wijesekera.mim
index 4eb75eb..a927553 100644 (file)
@@ -1,4 +1,5 @@
-;; Copyright (C) 2005
+;; si-wijesekera.mim -- Sinhala input method with wijesekera method
+;; Copyright (C) 2005, 2006
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H15PRO112
 
 
 ;; 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.
+;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, 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>
+  <http://www.fonts.lk/doc/sin-kbd-layout4.pdf>
+This input method requires surrounding text support.
 ")
 
-(title "Wijesekera")
+(title "සි")
 
 (map
  (consonant
   ("f"
    (set c @+1)
    (cond
-    ((& (> c 0x0D99) (< c 0x0DC7))
+    ((& (>= c 0x0D9A) (<= c 0x0DC6))
      (delete @+1)
      (insert c)
      (forward)
        (| (< @-2 0x0D9A) (> @-2 0x0DC6)))
      (delete @-1)
      0x0DDB)
-    ((& (> @-1 0x0D99) (< @-1 0xDC7))
+    ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
      0x200C 0x0DD9)
     (1
      0x0DD9)))
     (1
      (set c 0)))
    (cond
-    ((& (> @-1 0x0D99) (< @-1 0x0DC6))
+    ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
      0x0DCA 0x200D 0x0DBA))
    (cond
     ((> c 0)
     (1
      (set c 0)))
    (cond
-    ((& (> @-1 0x0D99) (< @-1 0x0DC7))
+    ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
      0x0DCA 0x200D 0x0DBB))
    (cond
     ((> c 0)
      (set c 0)))
    (backward)
    (cond
-    ((& (> @-1 0x0D99) (< @-1 0x0DC7))
+    ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
      (set c1 @-1)
      (delete @-1)
      (insert c1)
   ((BackSpace)
    (delete-preceding-zw)
    (set c @-1)
+   (cond
+    ((< c 0)
+     (unhandle)))
    (delete @-1)
    (cond
     ((= c 0x0D86)
     ((= c 0x0D92)
      0x0D8F)
     ((= c 0x0D93)
-     (cond ((& (> @-1 0x0D99) (< @-1 0x0DC7)) 0x200C))
+     (cond ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6)) 0x200C))
      0x0DD9)
     ((= c 0x0D95)
      0x0D94)
     ((= c 0x0D96)
      0x0D94)
 
+    ((& (>= c 0x0D9A) (<= c 0x0DC6) (= @-2 0x0DCA) (= @-1 0x200D))
+     (cond
+      ((= @-3 0x0DBB)
+       (delete @-3)
+       (insert c))
+      (1
+       (delete @-2))))
+
     ((= c 0x0DD9)
      (cond
       ((| (< @-1 0x0D9A) (> @-1 0x0DC6)))
-      ((& (> @-2 0x0D99) (< @-2 0x0DC7))
+      ((= @+1 0x0D91)
+       (delete @-1)
+       (delete @+1)
+       0x0D93)
+      ((& (>= @+1 0x0D9A) (<= @+1 0x0DC6))
+       (set c1 @+1)
+       (cond
+       ((= @+2 0x0DD9)
+        (merge-kombuva)
+        0x0DDB)
+       ((= @+2 0x0DCA)
+        (merge-kombuva)
+        0x0DDA)
+       ((= @+2 0x0DCF)
+        (merge-kombuva)
+        0x0DDC)
+       ((= @+2 0x0DDF)
+        (merge-kombuva)
+        0x0DDE)
+       (1
+        (delete @-1)
+        (delete @+1)
+        (insert c1)
+        0x0DD9)))
+      ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
        (delete @-1)
        0x200C
        0x0DD9)
-      ((& (> @-4 0x0D99) (< @-1 0x0DC7) (= @-3 0x0DCA) (= @-2 0x200D))
+      ((& (= @-4 0x0DBB) (= @-3 0x0DCA) (= @-2 0x200D))
+       (set c1 @-1)
+       (delete @-4)
+       (insert c1)
+       0x0DD9)
+      ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D))
        (delete @-3)
        0x0DD9)
       (1
      (cond
       ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
        0x0DD9)
-      ((& (> @-2 0x0D99) (< @-2 0x0DC7))
+      ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
        (delete @-1)
        0x200C
        0x0DDB)
-      ((& (> @-4 0x0D99) (< @-1 0x0DC7) (= @-3 0x0DCA) (= @-2 0x200D))
+      ((& (= @-4 0x0DBB) (= @-3 0x0DCA) (= @-2 0x200D))
+       (set c1 @-1)
+       (delete @-4)
+       (insert c1)
+       0x0DDB)
+      ((& (>= @-4 0x0D9A) (<= @-4 0x0DC6) (= @-3 0x0DCA) (= @-2 0x200D))
        (delete @-3)
        0x0DDB)
       (1
     ((= c 0x0DDE)
      0x0DD9)
     ((= c 0x0DF2)
-     0x0DD8)
-    ((& (> c 0x0D99) (< c 0x0DC7) (= @-2 0x0DCA) (= @-1 0x200D))
-     (delete @-2)))
+     0x0DD8))
 
    (cond
-    ((& (> @-1 0x0D99)
-       (< @-1 0x0DC7)
+    ((& (>= @-1 0x0D9A)
+       (<= @-1 0x0DC6)
        (| (= @+1 0x0DD9) (= @+1 0x0DDB)))
      0x200C)))
 
+  ((Delete)
+   (delete-following-zw)
+   (set c @+1)
+   (cond
+    ((< c 0)
+     (unhandle)))
+   (delete @+1)
+   (cond
+    ((= c 0x0D86)
+     0x0DCF)
+    ((= c 0x0D87)
+     0x0DD0)
+    ((= c 0x0D88)
+     0x0DD1)
+    ((= c 0x0D8C)
+     0x0DDF)
+    ((= c 0x0D8E)
+     0x0DD8)
+    ((= c 0x0D90)
+     0x0DDF)
+    ((= c 0x0D92)
+     0x0DCA)
+    ((= c 0x0D93)
+     0x0D91)
+    ((& (>= c 0x0D9A) (<= c 0x0DC6))
+     (forward)
+     (cond
+      ((= @+1 0x0DD9)
+       (delete @+1)
+       (move @<)
+       (insert c))
+      ((= @+1 0x0DDB)
+       (delete @+1)
+       0x0DD9
+       (move @<)
+       (insert c))
+      ((= @+1 0x0DDA)
+       (delete @+1)
+       0x0DCA
+       (move @<)
+       (insert c))
+      ((= @+1 0x0DDC)
+       (delete @+1)
+       0x0DCF
+       (move @<)
+       (insert c))
+      ((= @+1 0x0DDE)
+       (delete @+1)
+       0x0DDF
+       (move @<)
+       (insert c))
+      (1
+       (delete @<))))
+    ((= c 0x0DDB)
+     0x0DD9)))
+
   ("\\" (shift join))))
 
 (macro
  (forward (set x 0))
  (backward (set x 0))
  (delete-preceding-zw (set x 0))
+ (delete-following-zw (set x 0))
 
  ;; skip following (virama zwj consonant)* sequence
  (forward
   (set cc3 @+3)
   (cond
-   ((& (= @+1 0x0DCA) (= @+2 0x200D) (> cc3 0x0D99) (< cc3 0x0DC7))
+   ((& (= @+1 0x0DCA) (= @+2 0x200D) (>= cc3 0x0D9A) (<= cc3 0x0DC6))
     (delete @+3)
     0x0DCA 0x200D
     (insert cc3)
  (backward
   (set cc1 @-1)
   (cond
-   ((& (= @-3 0x0DCA) (> cc11 0x0D99) (< cc1 0x0DC7) (= @-2 0x200G))
+   ((& (= @-3 0x0DCA) (= @-2 0x200D) (>= cc1 0x0D9A) (<= cc1 0x0DC6))
     (delete @-3)
     0x0DCA
     0x200D
   (cond
    ((| (= @-1 0x200C) (= @-1 0x200D))
     (delete @-1)
-    (delete-preceding-zw)))))
+    (delete-preceding-zw))))
+
+ (delete-following-zw
+  (cond
+   ((| (= @+1 0x200C) (= @+1 0x200D))
+    (delete @+1)
+    (delete-following-zw))))
+
+ (merge-kombuva
+  (delete @-1)
+  (delete @+2)
+  (insert c1)))
 
 (state
  (init
   (consonant
+   (move @<)
    (cond
     ((= @-1 0x0DD9)
      (cond
       ((= @-2 0x200C)
        (delete @-2)
+       (move @>)
        0x0DD9)
       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
        (delete @-1)
+       (move @>)
        0x0DD9)))
     ((= @-1 0x0DDB)
      (cond
       ((= @-2 0x200C)
        (delete @-2)
+       (move @>)
        0x0DDB)
       ((| (< @-2 0x0D9A) (> @-2 0x0DC6))
        (delete @-1)
+       (move @>)
        0x0DDB)))))
   (misc))
 
  (join
   (consonant
+   (move @<)
    (set c @-1)
    (cond
     ((| (= c 0x0DD9) (= c 0x0DDB))
      (cond
-      ((& (> @-2 0x0D99) (< @-2 0x0DC7))
+      ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
        (delete @-1)
-       (move @<)
        0x0DCA 0x200D
        (move @>)
        (insert c))))
-    ((& (> c 0x0D99) (< c 0x0DC7))
-     (move @<)
+    ((& (>= c 0x0D9A) (<= c 0x0DC6))
      0x0DCA 0x200D))
    (shift init))