;; KNDA-OTF.flt -- Font Layout Table for Kannada OpenType fonts
;; Copyright (C) 2004, 2007  AIST (H15PRO112)
;; See the end for copying conditions.

(font layouter knda-otf nil
      (font (nil nil unicode-bmp :otf=knda=rphf)))

;;; <li> KNDA-OTF.flt
;;;
;;; For Kannada OpenType fonts to draw the Kannada script.

(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 vowel signs.
   ((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?)*)(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+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:
