;; MLYM-RACHANA.flt -- Font Layout Table for Malayalam Rachana font
;; Copyright (C) 2005
;; 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., 59 Temple Place, Suite 330, Boston, MA
;; 02111-1307, USA.
;;;
MLYM-RACHANA.flt
;;;
;;; For the Rachana Malayalam fonts to draw the traditional Malayalam
;;; script. This fonts handles virtually all ligatures with the AKHN
;;; feature without character reordering.
;; The first stage is to extract a syllable and re-order characters.
(category
;; C: consonant
;; H: HALANT
;; m: MATRA (Mpre)
;; p: MATRA (Mpost)
;; t: MATRA (two-part: Mpre+Mpost)
;; A: vowel modifier (post) (ANUSVARA and VISARGA)
;; V: independent vowel
;; E: else (all other independnt characters)
(0x0D00 0x0D7F ?E) ; else
(0x0D02 0x0D03 ?A) ; ANUSVARA & VISARGA
(0x0D05 0x0D14 ?V) ; independent vowel
(0x0D15 0x0D39 ?C) ; consonant
(0x0D3E 0x0D43 ?p) ; dependent vowel (Mpost)
(0x0D46 0x0D48 ?m) ; dependent vowel (Mpre)
(0x0D4A 0x0D4C ?t) ; dependent vowel (two-part)
(0x0D4D ?H) ; VIRAMA (HALANT)
(0x0D57 ?p) ; dependent vowel (Mpost)
(0x0D60 ?V) ; VOCALIC RR
(0x0D61 ?V) ; VOCALIC LL
(0x0D7F ?x) ; Internal use
(0x200C ?N) ; ZERO WIDTH NON-JOINER
(0x200D ?J) ; ZERO WIDTH JOINER
)
;; Step 0. Syllable identification.
(generator
(0
(cond
;; Halant + ZWNJ -- forced explicit halant.
("((CH)*C)HN"
< | (1 otf:mlym=akhn,psts,haln) 0x0D4D | >)
;; Halant + ZWJ -- forced cillaksaram.
("(CH)*(CH)J"
< | (1 otf:mlym=akhn,psts,haln) (2 otf:mlym=haln) | >)
;; Pre-consonant vowel is temporarily moved to the leftmost
;; position to permit consonant ligature.
("((CH)*C)(m)(A?)"
< | (3 =) (1 otf:mlym=akhn,psts,haln) 0x0D7F (4 =) | >)
;; Two-part vowel sign.
("((CH)*C)(t)(A?)"
< | (3 pre) (1 otf:mlym=akhn,psts,haln) 0x0D7F (3 post) (4 =) | >)
;; Post-consonant vowel sign and/or vowel modifier.
("((CH)*C(pA?|A))"
< | (1 otf:mlym=akhn,psts,haln) | >)
;; No vowel sign.
("((CH)*C(H?))"
< | (1 otf:mlym=akhn,psts,haln) | >)
;; A syllable starting with an independent vowel.
("(VA?)"
< | (1 = *) | >)
;; Other independent character.
("." =))
*)
;; Former part of two-part vowel sign.
(pre
(cond
((0x0D4A) 0x0D46)
((0x0D4B) 0x0D47)
((0x0D4C) 0x0D46)))
;; Latter part of two-part vowel sign.
(post
(cond
((0x0D4A) 0x0D3E)
((0x0D4B) 0x0D3E)
((0x0D4C) 0x0D57))))
;; Step 1. Move Mpre to the left of base consonant(-cluster).
(generator
(0
(cond
(" (m)([^x]*)([^x])x([^ ]*) "
(2 = *) (1 =) (3 =) (4 = *))
("."
=))
*))
;; Step 2. Finalise.
(generator
(0
(cond
(" ([^ ]*) " (1 otf:mlym=+))
("." =))
*))
;; Local Variables:
;; mode: emacs-lisp
;; End: