;; BENG-OTF.flt -- Font Layout Table for Bengali OpenType font ;; Copyright (C) 2004, 2007 AIST (H15PRO112) ;; See the end for copying conditions. (font layouter beng-otf nil (font (nil nil unicode-bmp :otf=beng=rphf))) ;;;
  • BENG-OTF.flt ;;; ;;; For Bengali OpenType fonts to draw the Bengali script. (category ;; X: generic ;; V: independent vowel ;; C: consonant (except for R, B and Y) ;; R: consonant RA ;; B: consonant BA ;; Y: consonant YA ;; T: KHANDA TA ;; n: NUKTA ;; H: HALANT ;; m: vowel sign (pre) ;; b: vowel sign (below) ;; p: vowel sign (post) ;; A: vowel modifier (above) ;; a: vowel modifier (post) ;; Z: internal use ;; N: ZWNJ (ZERO WIDTH NON-JOINER) ;; J: ZWJ (ZERO WIDTH JOINER) (0x0980 0x09FF ?X) ; generic (0x0980 ?Z) ; internal use (0x0981 ?A) ; SIGN CANDRABINDU (0x0982 0x0983 ?a) ; SIGN ANUSVARA .. VISARGA (0x0985 0x0994 ?V) ; LETTER A .. AU (0x0995 0x09B9 ?C) ; LETTER KA .. HA (0x09AC ?B) ; LETTER BA (0x09AF ?Y) ; LETTER YA (0x09B0 ?R) ; LETTER RA (0x09BC ?n) ; SIGN NUKTA (0x09BE ?p) ; VOWEL SIGN AA (0x09BF ?m) ; VOWEL SIGN I (0x09C0 ?p) ; VOWEL SIGN II (0x09C1 0x09C4 ?b) ; VOWEL SIGN U .. RR (0x09C7 0x09C8 ?m) ; VOWEL SIGN E .. AI (0x09CD ?H) ; SIGN VIRAMA (0x09CE ?T) ; LETTER KHANDA TA (0x09D7 ?p) ; AU LENGTH MARK (0x09DC 0x09DF ?C) ; LETTER RRA .. YYA (0x09E0 0x09E1 ?V) ; LETTER VOCALIC RR, LL (0x09E2 0x09E3 ?b) ; VOWEL SIGN L .. LL (0x09F0 0x09F1 ?C) ; LETTER RR WITH MIDDLE/LOWER DIAGONAL (0x0964 0x0965 ?X) ; DANDA .. DOUBLE DANDA (0x200C ?N) ; ZWNJ (0x200D ?J) ; ZWJ ) ;; Preprocessing (generator (0 (cond ;; Decompose two-part vowel signs. ((0x09CB) 0x09C7 0x09BE) ((0x09CC) 0x09C7 0x09D7) ;; TA + HALANT + ZWJ -> KHANDA-TA ((0x09A4 0x09CD 0x200D) 0x09CE) ;; consonant + NUKTA ((0x09A1 0x09BC) 0x09DC) ((0x09A2 0x09BC) 0x09DD) ((0x09AF 0x09BC) 0x09DF) ("." =)) *)) ;; Syllable identification and reordering. (generator (0 (cond ;; Khanda-Ta ("(RH)?(T)" < | (2 =) (1 otf:beng=rphf+) | >) ;; A syllable with a pre-base vowel sign. ;;1 2 3 4 5 6 7 8 9 ("(RH)?([CRBY]n?(HCn?)*(H[RB])?(J?HY)?)(m)(p)?(A)?(a)?" < | (6 =) (2 pre-below) (1 otf:beng=rphf+) (8 =) (2 post) (7 =) (9 =) | >) ;; A syllable with a non-pre-base vowel sign. ;;1 2 3 4 5 6 78 9 10 11 ("(RH)?([CRBY]n?(HCn?)*(H[RB])?(J?HY)?)(N)?J?((b)|(p))(A)?(a)?" < | (6 =) (2 pre-below) (8 =) (1 otf:beng=rphf+) (10 =) (2 post) (9 =) (11 =) | >) ;; A syllable with a vowel modifier and no vowel signs. ;;1 2 3 4 5 67 8 ("(RH)?([CRBY]n?(HCn?)*(H[RB])?(J?HY)?)((A)|(a))" < | (2 pre-below) (1 otf:beng=rphf+) (7 =) (2 post) (8 =) | >) ;; A syllable ending with a halant. ;;1 2 3 4 5 6 ("(RH)?([CRBY]n?(HCn?)*(H[RB])?(J?HY)?)(HN?)?" < | (2 pre-below) (6 =) (1 otf:beng=rphf+) (2 post) | >) ;; A syllable starting with an independent vowel. ;;1 2 3 4 5 6 ("(V)(J?(H)(Y)(p))?(A?a?)" < | (1 =) 0x0980 (4 =) (3 =) (5 =) (6 = *) | >) ("." =)) *) ;; Move a halant after the base consonant to the end. ;; Put a special mark after the final belew-base consonant. ;; Remove post-base parts. (pre-below (cond ("(.+)(H)([RB])(J?HY)?$" (1 = *) (3 =) (2 =) 0x0980) ("([^J]+)J?HY$" (1 = *) 0x0980) (".+" = * 0x0980))) ;; Extract post-base parts and add a halant at the end. ;; Produce nothing if there are no post-base parts. (post (cond (".*(H)(Y)$" (2 =) (1 =))))) ;; Apply 'nukt' and 'akhn'. (generator (0 (cond (" ([^Z]+)(Z[^ ]*) " | (1 otf:beng=nukt,akhn+) (2 = *) |) ("." =)) *)) ;; Apply 'blwf' and 'pstf' to the concerning parts. (generator (0 (cond (" (N?m?.)([^Z]*)(Z)([^ ]*) " | (1 = *) (2 otf:beng=blwf+) (3 =) (4 otf:beng=pstf+) |) ("." =)) *)) ;; Get pre-base and below-base conjuncts. (generator (0 (cond (" (N?m?)([^Z]+)(Z)([^ ]*) " | (1 = *) (2 otf:beng=half,vatu,pres,blws+) (3 =) (4 = *) |) ("." =)) *)) ;; When the number of glyphs between a pre-base vowel sign and the ;; post-below mark is more than one, move the pre-base vowel sign ;; before the final glyph. (generator (0 (cond (" (N)?(m)([^Z]+)([^Z])Z([^ ]*) " | (1 =) (3 = *) (2 =) (4 =) (5 = *) |) (" ([^Z]+)Z([^ ]*) " | (1 = *) (2 = *) |) ("." =)) *)) ;; Get matra conjuncts. ;; Do not apply 'blws' to syllables that begins with ZWNJ. (generator (0 (cond (" N([^ ]+) " (1 otf:beng=init,pres,abvs,psts,haln+abvm,blwm,dist)) (" ([^ ]+) " (1 otf:beng=init,pres,abvs,blws,psts,haln+abvm,blwm,dist)) ("." [ = ])) *)) ;; Copyright (C) 2004, 2007 ;; National Institute of Advanced Industrial Science and Technology (AIST) ;; Registration Number H15PRO112 ;; This file is part of the m17n database; a sub-part of the m17n ;; library. ;; The m17n library is free software; you can redistribute it and/or ;; modify it under the terms of the GNU Lesser General Public License ;; as published by the Free Software Foundation; either version 2.1 of ;; the License, or (at your option) any later version. ;; The m17n library is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; Lesser General Public License for more details. ;; 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., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;; Local Variables: ;; mode: emacs-lisp ;; End: