;; KNDA-OTF.flt -- Font Layout Table for Kannada OpenType fonts
;; 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.
;;;
KNDA-OTF.flt
;;;
;;; For Kannada OpenType fonts to draw Kannada.
;;; Designed for Kedage-n.ttf
(font layouter knda-otf nil
(font (nil nil unicode-bmp :otf=knda=rphf)))
(category
;; C: consonant (except for RA)
;; R: RA
;; n: NUKTA
;; H: HALANT
;; u: vowel sign (above)
;; b: vowel sign (below)
;; p: vowel sign (post)
;; l: length mark
;; a: vowel modifier (post)
;; V: independent vowel
;; N: ZWNJ (ZERO WIDTH NON-JOINER)
;; J: ZWJ (ZERO WIDTH JOINER)
;; X: generic
(0x0C80 0x0CFF ?X) ; generic
(0x0C82 0x0C83 ?a) ; SIGN ANUSVARA .. VISARGA
(0x0C85 0x0C94 ?V) ; LETTER A .. LETTER AU
(0x0C95 0x0CB9 ?C) ; LETTER KA .. LETTER HA
(0x0CB0 ?R) ; LETTER RA
(0x0CBC ?n) ; SIGN NUKTA
(0x0CBE ?p) ; VOWEL SIGN AA
(0x0CBF ?u) ; VOWEL SIGN I
(0x0CC1 0x0CC4 ?p) ; VOWEL SIGN U .. RR
(0x0CC6 ?u) ; VOWEL SIGN E
(0x0CCC ?u) ; VOWEL SIGN AU
(0x0CCD ?H) ; SIGN VIRAMA
(0x0CD5 0x0CD6 ?l) ; LENGTH MARK .. AI LENGTH MARK
(0x0CDE ?C) ; LETTER FA (LLLA)
(0x0CE0 0x0CE1 ?V) ; LETTER VOCALIC RR .. LL
(0x0CE2 0x0CE3 ?b) ; VOWEL SIGN VOCALIC L .. LL
(0x0964 0x0965 ?X) ; DANDA .. DOUBLE DANDA
(0x200C ?N) ; ZWNJ
(0x200D ?J) ; ZWJ
)
;; Preprocessing
(generator
(0
(cond
;; Decompose two-part and three-part vowels
((0x0CC0)
0x0CBF 0x0CD5)
((0x0CC7)
0x0CC6 0x0CD5)
((0x0CC8)
0x0CC6 0x0CD6)
((0x0CCA)
0x0CC6 0x0CC2)
((0x0CCB)
0x0CC6 0x0CC2 0x0CD5)
;; Move ZWJ between RA and HARANT.
("(R)(J)(H)"
(2 =) (1 =) (3 =))
("." =))
*))
;; Syllable identification.
;; Apply 'nukt' and 'akhn' before reordering.
(generator
(0
(cond
;; A syllable with an above vowel sign.
;;1 2 3 4
("(J)?([CR]n?(H[CR]n?)*)(up?l?a?)"
< | (1 =) (2 otf:knda=nukt,akhn+) (4 = *) | >)
;; A syllable with a post- or below vowel sign.
;;1 2 3 4 5
("(J)?([CR]n?(H[CR]n?)*)(p|b)(a)?"
< | (1 =) (2 otf:knda=nukt,akhn+) (4 =) (5 =) | >)
;; A syllable with a vowel modifier, but without vowel signs.
;;1 2 3 4
("(J)?([CR]n?(H[CR]n?)*)(a)"
< | (1 =) (2 otf:knda=nukt,akhn+) (4 =) | >)
;; No vowel signs, no vowel modifiers.
;;1 2 3 4
("(J)?([CR]n?(H[CR]n?)*)(H|HN)?"
< | (1 =) (2 otf:knda=nukt,akhn+) (4 = *) | >)
;; A syllable starting with an independent vowel.
("Va?"
< | = * | >)
("." =))
*))
;; Reordering. The base consonant is always the first one, because
;; all Kannada consonants have a below form.
(generator
(0
(cond
;; 1 2 34 5 6 7 8
(" (RH)?([^N])((H[^N])*)(u|b)?(p)?(l)?(a)? "
| (2 =) (5 =) (6 =) (3 move-h) (7 =) (1 otf:knda=rphf+) (8 =) |)
;; A syllable ending with a halant.
;; 1 2 34
(" (RH)?(.H)((.H)*)N? "
;; WORKAROUND : Kedage fonts produce halant form with 'psts'.
| (2 otf:knda=haln,psts+)(3 = *) (1 otf:knda=rphf+) |)
;; No reph movement if preceded by a ZWJ.
;; 1 23 4 5 6
(" J(.)((H[^N])*)(u|b)?(p)?(l?a?) "
| (1 =) (4 =) (5 =) (2 move-h) (6 = *) |)
;; 1 23
(" J(.H)((.H)*)N? "
| (1 otf:knda=haln,psts+) (2 = *) |)
("." =))
*)
(move-h
(cond
("(H)(.+)"
(2 = *) (1 =)))))
;; Apply other OTF features.
(generator
(0
(cond
(" ([^ ]+) "
(1 otf:knda=blwf,abvs,blws,psts))
("."
[ otf:knda=+ ]))
*))
;; Local Variables:
;; mode: emacs-lisp
;; End: