Blob Blame Raw
--- si-wijesekera.mim	2010/07/16 11:18:58	1.10
+++ si-wijesekera.mim	2011/12/06 04:16:49	1.11
@@ -1,5 +1,5 @@
 ;; si-wijesekera.mim -- Sinhala input method with wijesekera method
-;; Copyright (C) 2005, 2006, 2008, 2009
+;; Copyright (C) 2005, 2006, 2008, 2009, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H15PRO112
 
@@ -83,613 +83,650 @@
   ("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)))
+  (",") ("<") (".") (">")
+  ((A-a)) ((A-c)) ((A-o)) ((A-v)) ((A-x)) ((A-z)) ((A-\ )) ((A-.)) ((A-,)) ((A-\'))
+  ((G-a)) ((G-c)) ((G-o)) ((G-v)) ((G-x)) ((G-z)) ((G-\ )) ((G-.)) ((G-,)) ((G-\'))
+  ((S-\ )) ((BackSpace)) ((Delete)))
 
- (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)))
+  (consonant
+   ("l" "ක")				; 0D9A
+   ("L" "ඛ")				; 0D9B
+   ("." "ග")				; 0D9C
+   (">" "ඝ")				; 0D9D
+   ("X" "ඞ")				; 0D9E
+   ((A-.) "ඟ")				; 0D9F
+   ((G-.) "ඟ")				; 0D9F
+   ("p" "ච")				; 0DA0
+   ("P" "ඡ")				; 0DA1
+   ("c" "ජ")				; 0DA2
+   ("C" "ඣ")				; 0DA3
+   ("\[" "ඤ")				; 0DA4
+   ("{" "ඥ")				; 0DA5
+   ((A-c) "ඦ")				; 0DA6
+   ((G-c) "ඦ")				; 0DA6
+   ("g" "ට")				; 0DA7
+   ("G" "ඨ")				; 0DA8
+   ("v" "ඩ")				; 0DA9
+   ("V" "ඪ")				; 0DAA
+   ("K" "ණ")				; 0DAB
+   ((A-v) "ඬ")				; 0DAC
+   ((G-v) "ඬ")				; 0DAC
+   (";" "ත")				; 0DAD
+   (":" "ථ")				; 0DAE
+   ("o" "ද")				; 0DAF
+   ("O" "ධ")				; 0DB0
+   ("k" "න")				; 0DB1
+   ((A-o) "ඳ")				; 0DB3
+   ((G-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
+   )
 
-  ("f"
-   (set c @+0)
-   (cond
-    ((& (>= c 0x0D9A) (<= c 0x0DC6))
-     (delete @+1)
-     (insert c)
-     (forward)
-     (set c @+0)
-     (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) (= @+1 0x0DD9))
-     (delete @+2)
-     0x200C 0x0DDB)
-    ((& (= @-1 0x0DD9)
-	(| (< @-2 0x0D9A) (> @-2 0x0DC6)))
-     (delete @-1)
-     0x0DDB)
-    ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
-     0x200C 0x0DD9)
-    (1
-     0x0DD9)))
+  (misc
+   ("x" "ං")				; 0D82
+   ((A-x) "ඃ")				; 0D83
+   ((G-x) "ඃ")				; 0D83
+
+   ("w" "අ")				; 0D85
+   ("b" "ඉ")				; 0D89
+   ("B" "ඊ")				; 0D8A
+   ("W" "උ")				; 0D8B
+   ("R" "ඍ")				; 0D8D
+   ((A-,) "ඏ")				; 0D8F
+   ((G-,) "ඏ")				; 0D8F
+
+   ("T" "ඔ")				; 0D94
+
+   ("s" "ි")				; 0DD2
+   ("S" "ී")				; 0DD3
+   ("q" "ු")				; 0DD4
+
+   ("Q" "ූ")				; 0DD6
+
+   ((A-a) "ෳ")				; 0DF3
+   ((G-a) "ෳ")				; 0DF3
+   ((A-\') "෴")				; 0DF4
+   ((G-\') "෴")				; 0DF4
+
+   ("\]" ";")
+   ("}" ":")
+   ("'" ".")
+   ("\"" ",")
+   ("z" "'")
+   ("Z" "\"")
+
+   ("|" "‍්")				; touch (ZWJ 0DCA)
+   ("J" "ළු")				; muurdhaja lu (0DC5 0DD4)
+   ((S-\ ) " ")				; NBSP
+   ((A-\ ) "‌")				; ZWNJ
+   ((G-\ ) "‌")				; 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 @+0)
+    (cond
+     ((& (>= c 0x0D9A) (<= c 0x0DC6))
+      (delete @+1)
+      (insert c)
+      (forward)
+      (set c @+0)
+      (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) (= @+1 0x0DD9))
+      (delete @+2)
+      0x200C 0x0DDB)
+     ((& (= @-1 0x0DD9)
+	 (| (< @-2 0x0D9A) (> @-2 0x0DC6)))
+      (delete @-1)
+      0x0DDB)
+     ((& (>= @-1 0x0D9A) (<= @-1 0x0DC6))
+      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 0x0D9A) (<= @-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 0x0D9A) (<= @-1 0x0DC6))
-     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 0x0D9A) (<= @-1 0x0DC6))
-     (set c1 @-1)
-     (delete @-1)
-     (insert c1)
-     (move @<)
-     0x0DBB 0x0DCA 0x200D))
-   (cond
-    ((> c 0)
-     (move @>)
-     (insert c))))
-
-  ((BackSpace)
-   (delete-preceding-zw)
-   (set c @-1)
-   (cond
-    ((< c 0)
-     (unhandle)))
-   (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 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)))
-      ((= @+0 0x0D91)
-       (delete @-1)
-       (delete @+1)
-       0x0D93)
-      ((& (>= @+0 0x0D9A) (<= @+0 0x0DC6))
-       (set c1 @+0)
-       (cond
-	((= @+1 0x0DD9)
-	 (merge-kombuva)
-	 0x0DDB)
-	((= @+1 0x0DCA)
-	 (merge-kombuva)
-	 0x0DDA)
-	((= @+1 0x0DCF)
-	 (merge-kombuva)
-	 0x0DDC)
-	((= @+1 0x0DDF)
-	 (merge-kombuva)
-	 0x0DDE)
-	(1
-	 (delete @-1)
-	 (delete @+1)
-	 (insert c1)
-	 0x0DD9)))
-      ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
-       (delete @-1)
-       0x200C
-       0x0DD9)
-      ((& (= @-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
-       (delete @-1)
-       0x0DD9)))
-
-    ((= c 0x0DDA)
-     0x0DD9)
-
-    ((= c 0x0DDB)
-     (cond
-      ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
-       0x0DD9)
-      ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
-       (delete @-1)
-       0x200C
-       0x0DDB)
-      ((& (= @-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
-       (delete @-1)
-       0x0DDB)))
-
-    ((= c 0x0DDC)
-     0x0DD9)
-    ((= c 0x0DDD)
-     0x0DDC)
-    ((= c 0x0DDE)
-     0x0DD9)
-    ((= c 0x0DF2)
-     0x0DD8))
-
-   (cond
-    ((& (>= @-1 0x0D9A)
-	(<= @-1 0x0DC6)
-	(| (= @+0 0x0DD9) (= @+0 0x0DDB)))
-     0x200C)))
-
-  ((Delete)
-   (delete-following-zw)
-   (set c @+0)
-   (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
-      ((= @+0 0x0DD9)
-       (delete @+1)
-       (move @<)
-       (insert c))
-      ((= @+0 0x0DDB)
-       (delete @+1)
-       0x0DD9
-       (move @<)
-       (insert c))
-      ((= @+0 0x0DDA)
-       (delete @+1)
-       0x0DCA
-       (move @<)
-       (insert c))
-      ((= @+0 0x0DDC)
-       (delete @+1)
-       0x0DCF
-       (move @<)
-       (insert c))
-      ((= @+0 0x0DDE)
-       (delete @+1)
-       0x0DDF
-       (move @<)
-       (insert c))
-      (1
-       (delete @<))))
-    ((= 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
+   ;; 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)))
+   
+   ;; sanyaka letters
+   ((G-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 0x0D9A) (<= @-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 0x0D9A) (<= @-1 0x0DC6))
+      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 0x0D9A) (<= @-1 0x0DC6))
+      (set c1 @-1)
+      (delete @-1)
+      (insert c1)
+      (move @<)
+      0x0DBB 0x0DCA 0x200D))
+    (cond
+     ((> c 0)
+      (move @>)
+      (insert c))))
+
+   ((BackSpace)
+    (delete-preceding-zw)
+    (set c @-1)
+    (cond
+     ((< c 0)
+      (unhandle)))
+    (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 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)))
+       ((= @+0 0x0D91)
+	(delete @-1)
+	(delete @+1)
+	0x0D93)
+       ((& (>= @+0 0x0D9A) (<= @+0 0x0DC6))
+	(set c1 @+0)
+	(cond
+	 ((= @+1 0x0DD9)
+	  (merge-kombuva)
+	  0x0DDB)
+	 ((= @+1 0x0DCA)
+	  (merge-kombuva)
+	  0x0DDA)
+	 ((= @+1 0x0DCF)
+	  (merge-kombuva)
+	  0x0DDC)
+	 ((= @+1 0x0DDF)
+	  (merge-kombuva)
+	  0x0DDE)
+	 (1
+	  (delete @-1)
+	  (delete @+1)
+	  (insert c1)
+	  0x0DD9)))
+       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
+	(delete @-1)
+	0x200C
+	0x0DD9)
+       ((& (= @-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
+	(delete @-1)
+	0x0DD9)))
+
+     ((= c 0x0DDA)
+      0x0DD9)
+
+     ((= c 0x0DDB)
+      (cond
+       ((| (< @-1 0x0D9A) (> @-1 0x0DC6))
+	0x0DD9)
+       ((& (>= @-2 0x0D9A) (<= @-2 0x0DC6))
+	(delete @-1)
+	0x200C
+	0x0DDB)
+       ((& (= @-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
+	(delete @-1)
+	0x0DDB)))
+
+     ((= c 0x0DDC)
+      0x0DD9)
+     ((= c 0x0DDD)
+      0x0DDC)
+     ((= c 0x0DDE)
+      0x0DD9)
+     ((= c 0x0DF2)
+      0x0DD8))
+
+    (cond
+     ((& (>= @-1 0x0D9A)
+	 (<= @-1 0x0DC6)
+	 (| (= @+0 0x0DD9) (= @+0 0x0DDB)))
+      0x200C)))
+
+   ((Delete)
+    (delete-following-zw)
+    (set c @+0)
+    (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
+       ((= @+0 0x0DD9)
+	(delete @+1)
+	(move @<)
+	(insert c))
+       ((= @+0 0x0DDB)
+	(delete @+1)
+	0x0DD9
+	(move @<)
+	(insert c))
+       ((= @+0 0x0DDA)
+	(delete @+1)
+	0x0DCA
+	(move @<)
+	(insert c))
+       ((= @+0 0x0DDC)
+	(delete @+1)
+	0x0DCF
+	(move @<)
+	(insert c))
+       ((= @+0 0x0DDE)
+	(delete @+1)
+	0x0DDF
+	(move @<)
+	(insert c))
+       (1
+	(delete @<))))
+     ((= c 0x0DDB)
+      0x0DD9))))
 
-  ("H"					; yansaya (0DCA 200D 0DBA)
-   (cond
-    ((| (= @-1 0x0DD9) (= @-1 0x0DDB))
-     (move @-) "්‍ය" (move @>))
-    (1
-     "්‍ය")))
+  (independent
+   ("w" "අ")				; 0D85
+   ("b" "ඉ")				; 0D89
+   ("B" "ඊ")				; 0D8A
+   ("W" "උ")				; 0D8B
+   ("R" "ඍ")				; 0D8D
+   ((A-,) "ඏ")				; 0D8F
+   ((G-,) "ඏ")				; 0D8F
+   ("t" "එ")				; 0D91
+   ("T" "ඔ")				; 0D94
+   ("l" "ක")				; 0D9A
+   ("L" "ඛ")				; 0D9B
+   ("." "ග")				; 0D9C
+   (">" "ඝ")				; 0D9D
+   ("X" "ඞ")				; 0D9E
+   ((A-.) "ඟ") ((0x2E A-z) "ඟ")		; 0D9F
+   ((G-.) "ඟ") ((0x2E G-z) "ඟ")		; 0D9F
+   ("p" "ච")				; 0DA0
+   ("P" "ඡ")				; 0DA1
+   ("c" "ජ")				; 0DA2
+   ("C" "ඣ")				; 0DA3
+   ("\[" "ඤ")				; 0DA4
+   ("{" "ඥ")				; 0DA5
+   ((A-c) "ඦ") ((0x63 A-z) "ඦ")		; 0DA6
+   ((G-c) "ඦ") ((0x63 G-z) "ඦ")		; 0DA6
+   ("g" "ට")				; 0DA7
+   ("G" "ඨ")				; 0DA8
+   ("v" "ඩ")				; 0DA9
+   ("V" "ඪ")				; 0DAA
+   ("K" "ණ")				; 0DAB
+   ((A-v) "ඬ") ((0x76 A-z) "ඬ")		; 0DAC
+   ((G-v) "ඬ") ((0x76 G-z) "ඬ")		; 0DAC
+   (";" "ත")				; 0DAD
+   (":" "ථ")				; 0DAE
+   ("o" "ද")				; 0DAF
+   ("O" "ධ")				; 0DB0
+   ("k" "න")				; 0DB1
+   ((A-o) "ඳ") ((0x6F A-z) "ඳ")		; 0DB3
+   ((G-o) "ඳ") ((0x6F G-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
+   ((G-\') "෴")				; 0DF4
+
+   ("J" "ළු")				; muurdhaja lu (0DC5 0DD4)
+
+   ((S-\ ) " ")				; NBSP (00A0)
+   ((A-\ ) "‌")				; ZWNJ (200C)
+   ((G-\ ) "‌")				; ZWNJ (200C)
+
+   ("\]" ";")
+   ("}" ":")
+   ("'" ".")
+   ("\"" ",")
+   ("z" "'")
+   ("Z" "\"")
+   )
 
-  ("`"					; rakaransaya (0DCA 200D 0DBB)
-   (cond
-    ((| (= @-1 0x0DD2) (= @-1 0x0DD3) (= @-1 0x0DD9) (= @-1 0x0DDB))
-     (move @-) "්‍ර" (move @>))
-    (1 "්‍ර")))
+  (dependent
+   ("x" "ං")				; 0D82
+   ((A-x) "ඃ")				; 0D83
+   ((G-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
+   ((G-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 @>))
-  )
+   ("~"					; repaya (0DBB 0DCA 200D)
+    (move @<)
+    "ර්‍"
+    (move @>))
+   )
 
- (kombuva
-  ("f" "ෙ"))				; 0DD9
+  (kombuva
+   ("f" "ෙ"))				; 0DD9
 
- (join
-  ("\\"))
+  (join
+   ("\\"))
 
- (backspace
-  ((BackSpace))))
+  (backspace
+   ((BackSpace))))
 
 (state
  (init