(stage 0): Use font-facility to check KHANDA-TA's availability.
authorntakahas <ntakahas>
Thu, 25 Mar 2010 10:25:18 +0000 (10:25 +0000)
committerntakahas <ntakahas>
Thu, 25 Mar 2010 10:25:18 +0000 (10:25 +0000)
(reorder): Add the patterns JY and HJ before pstf.

FLT/BENG-OTF.flt

index 90221c6..1e3c8dc 100644 (file)
    ((0x09CC)
     0x09C7 0x09D7)
 
-   ;; TA + HALANT + ZWJ -> KHANDA-TA
-   ((0x09A4 0x09CD 0x200D)
-    0x09CE)
+   ;; Many fonts still do not have KHANDA-TA.
+   ((0x09CE)
+    (cond
+     ((font-facility 0x09CE) =)
+     (".+" 0x09A4 0x09CD 0x200D)))
 
    ;; consonant + NUKTA
    ((0x09A1 0x09BC)
    ;; Two-part vowel signs
    ((0x09C7 0x09BE)
     (cond
-     ((font-facility 0x25CC) < 0x09C7 0x25CC 0x09BE >)
+     ((font-facility 0x25CC) < = 0x25CC = >)
      (".+" < 0x09CB >)))
    ((0x09C7 0x09D7)
     (cond
-     ((font-facility 0x25CC) < 0x09C7 0x25CC 0x09D7 >)
+     ((font-facility 0x25CC) < = 0x25CC = >)
      (".+" < 0x09CC >)))
 
    ;; Combining marks are displayed with a DOTTED CIRCLE.
    (" (RHJ?)?([^ ]+)(HN) "
     | (1 = *) (2 reorder) (3 = =) |)
 
-   ;; Ordinary syllables
-   (" (RHJ?)?([^mbpaA ]*[^mbpaANJ ])(m?([NJ]?b)?p?n?a?A?) "
+   ;; Syllables with a below matra
+   (" (RHJ?)?([^mbpaA ]*[^mbpaANJ ])(m?[NJ]?bp?n?a?A?) "
+    | (1 = *) (2 reorder) (3 = *) |)
+
+   ;; Other syllables
+   (" (RHJ?)?([^mbpaA ]+)(m?p?n?a?A?) "
     | (1 = *) (2 reorder) (3 = *) |)
 
    ("." =))
   *)
 
  (reorder
-  ("(.|.+[^YJ])((J?HY)*)$"
-   (1 reorder-BR) (2 reorder-Y)))
-
+  ("(.|.+([^YJ]|JY|HJ))((J?HY)*)$"
+   (1 reorder-BR *) (3 reorder-Y *)))
  ;; Unlike Devanagari and Gujarati, vattu in Bengali does not have a
  ;; half form.  Therefore the sequence CHRHC can be safely reordered
- ;; as CRHHC.  Same for CHBHC.
+ ;; to CRHHC.  Same for CHBHC.
  (reorder-BR
   (cond
-   ("J?(H)([BR])(.*)"
-    (2 =) (1 =) (3 reorder-BR))
-   ("(.)(.*)"
-    (1 =) (2 reorder-BR))))
+   ("J?(H)([BR])"
+    (2 =) (1 =))
+   ("." =)))
 
  (reorder-Y
-  ("J?(H)(Y)(.*)"
-   (2 =) (1 =) (3 reorder-Y)))
+  ("J?(H)(Y)"
+   (2 =) (1 =)))
  )
 
 ;; Stage 3
    ("." =))
   *)
 
- ;; FIXME: When the constant C has both half and blwf, the partial
- ;; sequence CHJ changes into blwf, instead of half, unless it is
- ;; placed at the beginning of a syllable.
  (b4post
-  ("(.|.+[^YH]H?)(YH)*$"
-   (1 (cond ("(.H)(.+)" (1 :otf=beng=half+) (2 :otf=beng=blwf,half,vatu+))
-           (".+" :otf=beng=blwf,half,vatu+)))))
+  (cond
+   ("(.H)J?(.*)"
+    (1 :otf=beng=half+)
+    (2 ("(.|.+([^YH]|JY|[BR]H))((YH)*)$" (1 lang-forms *))))
+   ("(.|.+([^YH]|JY|[BR]H))((YH)*)"
+    (1 lang-forms *))))
+
+ (lang-forms
+  (cond
+   ("(.H)J" (1 :otf=beng=half+))
+   (".H" :otf=beng=blwf,half,vatu+)
+   ("." =)))
 
  (post
-  ("(.|.+[^YH]H?)((YH)+)$"
-   (2 :otf=beng=pstf+)))
+  ("(.|.+([^YH]|JY|[BR]H))((YH)+)$"
+   (3 :otf=beng=pstf+)))
  )
 
 ;; Stage 4