--- /dev/null
+;; ARAB-OTF-NO-GPOS.flt -- Font Layout Table for Arabic OpenType font sans GPOS
+;; Copyright (C) 2005, 2006, 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.
+
+;;; <li> ARAB-OTF-NO-GPOS.flt
+;;;
+;;; For Arabic OpenType fonts that don't have GPOS table to draw the
+;;; Arabic script.
+
+(font layouter arab-otf-no-gpos nil
+ (font (nil nil unicode-bmp :otf=arab=init,medi,fina,liga+~mark)))
+
+;; Step 0: Move Kazakh high hamza.
+
+(category
+ ;; p: high hamza carrier (p for positive)
+ ;; n: high hamza suppressor (n for negative)
+ ;; x: don't care
+ (0x0600 0x06FF ?x)
+ (0x0750 0x077F ?x) ; Arabic Supplement
+ (0x0674 0x0678 ?p)
+ (0x0643 ?n)
+ (0x06AF ?n)
+ (0x06D5 ?n)
+ (0x200C ?x)
+ (0x200D ?x)
+ (0x25CC ?x)
+ (0xFB50 0xFDFF ?X) ; Arabic Presentation Forms-A
+ (0xFE70 0xFEFC ?X) ; Arabic Presentation Forms-B
+ )
+
+(generator
+ (0
+ (cond
+ ;; If a presentation form is found, draw the whole sequence as is.
+ (".*X.*" = *)
+
+ (".*p.*" ; If a high hamza is found,
+ (cond
+ (".*n.*" ; and a suppressor exists,
+ rmhamza *) ; then remove the high hamza.
+ (0 ; Otherwise, move the high
+ 0x674 rmhamza *))) ; hamza to the beginning.
+ (0 = *))) ; If no high hamza, do nothing.
+
+ (rmhamza
+ (cond
+ ((0x0674) )
+ ((0x0675) 0x0627)
+ ((0x0676) 0x0648)
+ ((0x0677) 0x06C7)
+ ((0x0678) 0x0649)
+ ("." =))))
+
+;; Step 1: ccmp
+
+(category
+ ;; D: Dual-joining (beh, teh, etc. & zwj)
+ ;; R: Right-joining (alef, dal, thal, reh, zain)
+ ;; U: Non-joining (Hamza, etc. & zwnj)
+ ;; T: Transparent (combining marks)
+ (0x060B 0x060F ?U)
+ (0x0610 0x0615 ?T)
+ (0x061B ?U)
+ (0x061E 0x061F ?U)
+ (0x0621 ?U)
+ (0x0622 0x0623 ?R)
+ (0x0624 ?R)
+ (0x0625 ?R)
+ (0x0626 ?D)
+ (0x0627 ?R)
+ (0x0628 ?D)
+ (0x0629 ?R)
+ (0x062A 0x062E ?D)
+ (0x062F 0x0632 ?R)
+ (0x0633 0x0647 ?D)
+ (0x0648 ?R)
+ (0x0649 0x064A ?D)
+ (0x064B 0x065E ?T)
+ (0x0660 0x066D ?U)
+ (0x066E 0x066F ?D)
+ (0x0670 ?T)
+ (0x0671 0x0673 ?R)
+ (0x0674 0x0678 ?U)
+ (0x0679 0x0687 ?D)
+ (0x0688 0x0699 ?R)
+ (0x069A 0x06C3 ?D)
+ (0x06C4 0x06CB ?R)
+ (0x06CC 0x06CE ?D)
+ (0x06CF ?R)
+ (0x06D0 0x06D3 ?D)
+ (0x06D4 ?U)
+ (0x06D5 ?R)
+ (0x06D6 0x06E4 ?T)
+ (0x06E5 0x06E6 ?U)
+ (0x06E7 0x06E8 ?T)
+ (0x06E9 ?U)
+ (0x06EA 0x06ED ?T)
+ (0x06EE 0x06EF ?R)
+ (0x06F0 0x06F9 ?U)
+ (0x06FA 0x06FC ?D)
+ (0x06FD 0x06FE ?U)
+ (0x06FF ?D)
+ (0x0750 0x0758 ?D)
+ (0x0759 0x075B ?R)
+ (0x075C 0x076A ?D)
+ (0x076B 0x076C ?R)
+ (0x076D ?D)
+ (0x200C ?U)
+ (0x200D ?D)
+ (0x25CC ?U)
+ (0xFB50 0xFDFF ?X) ; Arabic Presentation Forms-A
+ (0xFE70 0xFEFC ?X) ; Arabic Presentation Forms-B
+ )
+
+;; (generator
+;; (0
+;; otf:arab=ccmp))
+
+;; Step 2: Initial, medial, or final.
+
+(generator
+ (0
+ (cond
+ (".*X.*" (cond ("[DRUX]T*" < = * >) ("." =)) *)
+
+ ("D.*"
+ (cond
+ ("(.)(T*)([DR].*)"
+ <
+ (1 otf:arab=init)
+ (2 = *)
+ >
+ (3 join))
+ ("(.)(T*)(.*)" ; == (D)(T*)(U.*)
+ <
+ (1 otf:arab=isol)
+ (2 = *)
+ >
+ (3 disjoin))))
+
+ ("([RU])(T*)(.*)"
+ <
+ (1 otf:arab=isol)
+ (2 = *)
+ >
+ (3 disjoin))
+
+ ("(T+)(.*)"
+ (1 = *)
+ (2 disjoin))))
+
+ (join
+ (cond
+ ("D.*"
+ (cond
+ ("(.)(T*)([DR].*)"
+ <
+ (1 otf:arab=medi)
+ (2 = *)
+ >
+ (3 join))
+ ("(.)(T*)(.*)" ; == (D)(T*)(U.*)
+ <
+ (1 otf:arab=fina)
+ (2 = *)
+ >
+ (3 disjoin))))
+
+ ("(.)(T*)(.*)"
+ <
+ (1 otf:arab=fina)
+ (2 = *)
+ >
+ (3 disjoin))))
+
+ (disjoin
+ (cond
+ ("D.*"
+ (cond
+ ("(.)(T*)([DR].*)"
+ <
+ (1 otf:arab=init)
+ (2 = *)
+ >
+ (3 join))
+ ("(.)(T*)(.*)" ; == (D)(T*)(U.*)
+ <
+ (1 otf:arab=isol)
+ (2 = *)
+ >
+ (3 disjoin))))
+
+ ("(.)(T*)(.*)" ; == ([RU])(T*)(.*)
+ <
+ (1 otf:arab=isol)
+ (2 = *)
+ >
+ (3 disjoin)))))
+
+;; Step 3: GPOS features.
+
+(generator
+ (0
+ (cond
+ ((0x0651 0x0650) tc+bc 0x064E tc+bc 0x0651) ; shadda + kasra
+ ((0x0651 0x064D) tc+bc 0x064B tc+bc 0x0651) ; shadda + kasratan
+ ((range 0x0610 0x0615) tc+bc =)
+ ((0x064B) tc+bc =)
+ ((0x064C) tc+bc =)
+ ((0x064D) bc-tc =)
+ ((0x064E) tc+bc =)
+ ((0x064F) tc+bc =)
+ ((0x0650) bc-tc =)
+ ((range 0x0651 0x0654) tc+bc =)
+ ((0x0655) bc-tc =)
+ ((0x0656) bc-tc =)
+ ((range 0x0657 0x065B) tc+bc =)
+ ((0x065C) bc-tc =)
+ ((0x065D) tc+bc =)
+ ((0x065E) tc+bc =)
+ ((0x0670) tc+bc =)
+ ((range 0x06D6 0x06DC) tc+bc =)
+ ((range 0x06DF 0x06E2) tc+bc =)
+ ((0x06E3) bc-tc =)
+ ((0x06E4) tc+bc =)
+ ((0x06E7) tc+bc =)
+ ((0x06E8) tc+bc =)
+ ((0x06EA) bc-tc =)
+ ((0x06EB) tc+bc =)
+ ((0x06EC) tc+bc =)
+ ((0x06ED) bc-tc =)
+ ((0x200C) =)
+ ((0x200D) =)
+ ("." =))
+ *))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; ARAB-OTF.flt -- Font Layout Table for Arabic OpenType font
+;; Copyright (C) 2004, 2006, 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., 59 Temple Place, Suite 330, Boston, MA
+;; 02111-1307, USA.
+
+;;; <li> ARAB-OTF.flt
+;;;
+;;; For Arabic OpenType fonts to draw the Arabic script.
+
+(font layouter arab-otf nil
+ (font (nil nil unicode-bmp :otf=arab=init,medi,fina,liga+mark)))
+
+;; Step 0: Move Kazakh high hamza.
+
+(category
+ ;; p: high hamza carrier (p for positive)
+ ;; n: high hamza suppressor (n for negative)
+ ;; x: don't care
+ (0x0600 0x06FF ?x)
+ (0x0750 0x077F ?x) ; Arabic Supplement
+ (0x0674 0x0678 ?p)
+ (0x0643 ?n)
+ (0x06AF ?n)
+ (0x06D5 ?n)
+ (0x200C ?x)
+ (0x200D ?x)
+ (0x25CC ?x)
+ (0xFB50 0xFDFF ?X) ; Arabic Presentation Forms-A
+ (0xFE70 0xFEFC ?X) ; Arabic Presentation Forms-B
+ )
+
+(generator
+ (0
+ (cond
+ ;; If a presentation form is found, draw the whole sequence as is.
+ (".*X.*" = *)
+
+ (".*p.*" ; If a high hamza is found,
+ (cond
+ (".*n.*" ; and a suppressor exists,
+ rmhamza *) ; then remove the high hamza.
+ (0 ; Otherwise, move the high
+ 0x674 rmhamza *))) ; hamza to the beginning.
+ (0 = *))) ; If no high hamza, do nothing.
+
+ (rmhamza
+ (cond
+ ((0x0674) )
+ ((0x0675) 0x0627)
+ ((0x0676) 0x0648)
+ ((0x0677) 0x06C7)
+ ((0x0678) 0x0649)
+ ("." =))))
+
+;; Step 1: ccmp
+
+(category
+ ;; D: Dual-joining (beh, teh, etc. & zwj)
+ ;; R: Right-joining (alef, dal, thal, reh, zain)
+ ;; U: Non-joining (Hamza, etc. & zwnj)
+ ;; T: Transparent (combining marks)
+ (0x060B 0x060F ?U)
+ (0x0610 0x0615 ?T)
+ (0x061B ?U)
+ (0x061E 0x061F ?U)
+ (0x0621 ?U)
+ (0x0622 0x0623 ?R)
+ (0x0624 ?R)
+ (0x0625 ?R)
+ (0x0626 ?D)
+ (0x0627 ?R)
+ (0x0628 ?D)
+ (0x0629 ?R)
+ (0x062A 0x062E ?D)
+ (0x062F 0x0632 ?R)
+ (0x0633 0x0647 ?D)
+ (0x0648 ?R)
+ (0x0649 0x064A ?D)
+ (0x064B 0x065E ?T)
+ (0x0660 0x066D ?U)
+ (0x066E 0x066F ?D)
+ (0x0670 ?T)
+ (0x0671 0x0673 ?R)
+ (0x0674 0x0678 ?U)
+ (0x0679 0x0687 ?D)
+ (0x0688 0x0699 ?R)
+ (0x069A 0x06C3 ?D)
+ (0x06C4 0x06CB ?R)
+ (0x06CC 0x06CE ?D)
+ (0x06CF ?R)
+ (0x06D0 0x06D3 ?D)
+ (0x06D4 ?U)
+ (0x06D5 ?R)
+ (0x06D6 0x06E4 ?T)
+ (0x06E5 0x06E6 ?U)
+ (0x06E7 0x06E8 ?T)
+ (0x06E9 ?U)
+ (0x06EA 0x06ED ?T)
+ (0x06EE 0x06EF ?R)
+ (0x06F0 0x06F9 ?U)
+ (0x06FA 0x06FC ?D)
+ (0x06FD 0x06FE ?U)
+ (0x06FF ?D)
+ (0x0750 0x0758 ?D)
+ (0x0759 0x075B ?R)
+ (0x075C 0x076A ?D)
+ (0x076B 0x076C ?R)
+ (0x076D ?D)
+ (0x200C ?U)
+ (0x200D ?D)
+ (0x25CC ?U)
+ (0xFB50 0xFDFF ?X) ; Arabic Presentation Forms-A
+ (0xFE70 0xFEFC ?X) ; Arabic Presentation Forms-B
+ )
+
+;; (generator
+;; (0
+;; otf:arab=ccmp))
+
+;; Step 2: Initial, medial, or final.
+
+(generator
+ (0
+ (cond
+ (".*X.*" (cond ("[DRUX]T*" < = * >) ("." =)) *)
+
+ ("D.*"
+ (cond
+ ("(.)(T*)([DR].*)"
+ <
+ (1 otf:arab=init)
+ (2 = *)
+ >
+ (3 join))
+ ("(.)(T*)(.*)" ; == (D)(T*)(U.*)
+ <
+ (1 otf:arab=isol)
+ (2 = *)
+ >
+ (3 disjoin))))
+
+ ("([RU])(T*)(.*)"
+ <
+ (1 otf:arab=isol)
+ (2 = *)
+ >
+ (3 disjoin))
+
+ ("(T+)(.*)"
+ (1 = *)
+ (2 disjoin))))
+
+ (join
+ (cond
+ ("D.*"
+ (cond
+ ("(.)(T*)([DR].*)"
+ <
+ (1 otf:arab=medi)
+ (2 = *)
+ >
+ (3 join))
+ ("(.)(T*)(.*)" ; == (D)(T*)(U.*)
+ <
+ (1 otf:arab=fina)
+ (2 = *)
+ >
+ (3 disjoin))))
+
+ ("(.)(T*)(.*)"
+ <
+ (1 otf:arab=fina)
+ (2 = *)
+ >
+ (3 disjoin))))
+
+ (disjoin
+ (cond
+ ("D.*"
+ (cond
+ ("(.)(T*)([DR].*)"
+ <
+ (1 otf:arab=init)
+ (2 = *)
+ >
+ (3 join))
+ ("(.)(T*)(.*)" ; == (D)(T*)(U.*)
+ <
+ (1 otf:arab=isol)
+ (2 = *)
+ >
+ (3 disjoin))))
+
+ ("(.)(T*)(.*)" ; == ([RU])(T*)(.*)
+ <
+ (1 otf:arab=isol)
+ (2 = *)
+ >
+ (3 disjoin)))))
+
+;; Step 3: Other GSUB features (ligatures, etc.)
+
+(generator
+ (0
+ otf:arab=rlig,calt,liga,dlig,cswh,mset))
+
+;; Step 4: GPOS features.
+
+(generator
+ (0
+ otf:arab=))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; ARAB.flt -- Font Layout Table for Arabic font (Unicode encoding)
+;; Copyright (C) 2003, 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.
+
+(font layouter arab nil
+ (font (nil bitstream\ cyberbase unicode-bmp)))
+
+;;; <li> ARAB.flt
+;;;
+;;; For Arabic fonts of Unicode encoding to draw Arabic script.
+
+;; phase 1: Kazakh high hamza
+(category
+ (0x0600 0x06FF ?x)
+ (0x0675 0x0678 ?p)
+ (0x0643 ?n)
+ (0x06AF ?n)
+ (0x06D5 ?n)
+ (0x200C ?x)
+ (0x200D ?x)
+ (0xFB50 0xFDFF ?x) ; Arabic Presentation Forms-A
+ (0xFE70 0xFEFC ?x) ; Arabic Presentation Forms-B
+ )
+
+(generator
+ (0
+ (cond
+ (".*p.*"
+ (cond
+ (".*n.*"
+ rmhamza *)
+ ("(.)(.*)"
+ (1 < 0x0674 rmhamza >)
+ (2 rmhamza *))))
+ (0 = *)))
+
+ (rmhamza
+ (cond
+ ((0x0675) 0x0627)
+ ((0x0676) 0x0648)
+ ((0x0677) 0x06C7)
+ ((0x0678) 0x0649)
+ ("." =))))
+
+;; phase 2: ligatures
+(category
+ (0x0600 0x06FF ?x) ; general
+ (0x0622 ?a) ; alef madda
+ (0x0623 ?b) ; alef hamza above
+ (0x0625 ?c) ; alef hamza below
+ (0x0627 ?d) ; alef
+ (0x0644 ?l) ; lam
+ (0x064B 0x0655 ?t) ; combinings
+ (0x0670 ?t) ; combining
+ (0x06D6 0x06ED ?t) ; combinings
+ (0x06E5 ?x)
+ (0x06E6 ?x)
+ (0x06E9 ?x)
+ (0x200C ?x)
+ (0x200D ?x)
+ (0xFB50 0xFDFF ?x)
+ (0xFE70 0xFEFC ?x)
+ )
+
+(generator
+ (0
+ (cond
+ ("l(t*)a(t*)"
+ 0xFEF5
+ (1 = *)
+ (2 = *))
+ ("l(t*)b(t*)"
+ 0xFEF7
+ (1 = *)
+ (2 = *))
+ ("l(t*)c(t*)"
+ 0xFEF9
+ (1 = *)
+ (2 = *))
+ ("l(t*)d(t*)"
+ 0xFEFB
+ (1 = *)
+ (2 = *))
+ ("."
+ =))
+ *))
+
+;; phase 3: joining
+(category
+ ;; D: Dual-joining (beh, teh, etc. & zwj)
+ ;; R: Right-joining (alef, dal, thal, reh, zain)
+ ;; U: Non-joining (Hamza, etc. & zwnj)
+ ;; T: Transparent (combining marks)
+ ;; P: Already in Arabic Presentation Form A & B
+ (0x060C 0x060F ?U)
+ (0x0610 0x0615 ?T)
+ (0x061B ?U)
+ (0x061F ?U)
+ (0x0621 ?U)
+ (0x0622 0x0623 ?R)
+ (0x0624 ?R)
+ (0x0625 ?R)
+ (0x0626 ?D)
+ (0x0627 ?R)
+ (0x0628 ?D)
+ (0x0629 ?R)
+ (0x062A 0x062E ?D)
+ (0x062F 0x0632 ?R)
+ (0x0633 0x0647 ?D)
+ (0x0648 ?R)
+ (0x0649 0x064A ?D)
+ (0x064B 0x0658 ?T)
+ (0x0660 0x066D ?U)
+ (0x066E 0x066F ?D)
+ (0x0670 ?T)
+ (0x0671 0x0673 ?R)
+ (0x0674 0x0678 ?U)
+ (0x0679 0x0687 ?D)
+ (0x0688 0x0699 ?R)
+ (0x069A 0x06C3 ?D)
+ (0x06C4 0x06CB ?R)
+ (0x06CC 0x06CE ?D)
+ (0x06CF ?R)
+ (0x06D0 0x06D3 ?D)
+ (0x06D4 ?U)
+ (0x06D5 ?R)
+ (0x06D6 0x06E4 ?T)
+ (0x06E5 0x06E6 ?U)
+ (0x06E7 0x06E8 ?T)
+ (0x06E9 ?U)
+ (0x06EA 0x06ED ?T)
+ (0x06EE 0x06EF ?R)
+ (0x06F0 0x06F9 ?U)
+ (0x06FA 0x06FC ?D)
+ (0x06FD 0x06FE ?U)
+ (0x06FF ?D)
+ (0xFB50 0xFDFF ?P)
+ (0xFE70 0xFEFC ?P)
+ (0xFEF5 ?R)
+ (0xFEF7 ?R)
+ (0xFEF9 ?R)
+ (0xFEFB ?R)
+ (0x200C ?U)
+ (0x200D ?D)
+ )
+
+(generator
+ (0
+ (cond
+ ("PT*"
+ = combining *)
+
+ ("D[^P]*"
+ (cond
+ ("(.)(T*)([DR].*)"
+ (1 initial)
+ (2 combining *)
+ (3 join))
+ ("(.)(T*)(.*)" ; == (D)(T*)(U.*)
+ (1 isolated)
+ (2 combining *)
+ (3 disjoin))))
+
+ ("([RU])(T*)([^P]*)"
+ (1 isolated)
+ (2 combining *)
+ (3 disjoin))
+
+ ("(T+)([^P]*)"
+ (1 = *)
+ (2 disjoin)))
+
+ *)
+
+ (join
+ (cond
+ ("D.*"
+ (cond
+ ("(.)(T*)([DR].*)"
+ (1 medial)
+ (2 combining *)
+ (3 join))
+ ("(.)(T*)(.*)" ; == (D)(T*)(U.*)
+ (1 final)
+ (2 combining *)
+ (3 disjoin))))
+
+ ("(.)(T*)(.*)" ; == (R)(T*)(.*)
+ (1 final)
+ (2 combining *)
+ (3 disjoin))))
+
+ (disjoin
+ (cond
+ ("D.*"
+ (cond
+ ("(.)(T*)([DR].*)"
+ (1 initial)
+ (2 combining *)
+ (3 join))
+ ("(.)(T*)(.*)" ; == (D)(T*)(U.*)
+ (1 isolated)
+ (2 combining *)
+ (3 disjoin))))
+
+ ("(.)(T*)(.*)" ; == ([RU])(T*)(.*)
+ (1 isolated)
+ (2 combining *)
+ (3 disjoin))))
+
+ (isolated
+ (cond
+ ((range 0x060C 0x060F) =)
+ ((0x061B) =)
+ ((0x061F) =)
+ ((0x0621) 0xFE80)
+ ((0x0622) 0xFE81)
+ ((0x0623) 0xFE83)
+ ((0x0624) 0xFE85)
+ ((0x0625) 0xFE87)
+ ((0x0626) 0xFE89)
+ ((0x0627) 0xFE8D)
+ ((0x0628) 0xFE8F)
+ ((0x0629) 0xFE93)
+ ((0x062A) 0xFE95)
+ ((0x062B) 0xFE99)
+ ((0x062C) 0xFE9D)
+ ((0x062D) 0xFEA1)
+ ((0x062E) 0xFEA5)
+ ((0x062F) 0xFEA9)
+ ((0x0630) 0xFEAB)
+ ((0x0631) 0xFEAD)
+ ((0x0632) 0xFEAF)
+ ((0x0633) 0xFEB1)
+ ((0x0634) 0xFEB5)
+ ((0x0635) 0xFEB9)
+ ((0x0636) 0xFEBD)
+ ((0x0637) 0xFEC1)
+ ((0x0638) 0xFEC5)
+ ((0x0639) 0xFEC9)
+ ((0x0640) 0x0640)
+ ((0x063A) 0xFECD)
+ ((0x0641) 0xFED1)
+ ((0x0642) 0xFED5)
+ ((0x0643) 0xFED9)
+ ((0x0644) 0xFEDD)
+ ((0x0645) 0xFEE1)
+ ((0x0646) 0xFEE5)
+ ((0x0647) 0xFEE9)
+ ((0x0648) 0xFEED)
+ ((0x0649) 0xFEEF)
+ ((0x064A) 0xFEF1)
+ ((range 0x0660 0x066D) =)
+ ((0x0671) 0xFB50)
+ ((0x0674) =)
+ ((0x0677) 0xFBDD)
+ ((0x0679) 0xFB66)
+ ((0x067A) 0xFB5E)
+ ((0x067B) 0xFB52)
+ ((0x067E) 0xFB56)
+ ((0x067F) 0xFB62)
+ ((0x0680) 0xFB5A)
+ ((0x0683) 0xFB76)
+ ((0x0684) 0xFB72)
+ ((0x0686) 0xFB7A)
+ ((0x0687) 0xFB7E)
+ ((0x0688) 0xFB88)
+ ((0x068C) 0xFB84)
+ ((0x068D) 0xFB82)
+ ((0x068E) 0xFB86)
+ ((0x0691) 0xFB8C)
+ ((0x0698) 0xFB8A)
+ ((0x06A4) 0xFB6A)
+ ((0x06A6) 0xFB6E)
+ ((0x06A9) 0xFB8E)
+ ((0x06AD) 0xFBD3)
+ ((0x06AF) 0xFB92)
+ ((0x06B1) 0xFB9A)
+ ((0x06B3) 0xFB96)
+ ((0x06BA) 0xFB9E)
+ ((0x06BB) 0xFBA0)
+ ((0x06BE) 0xFBAA)
+ ((0x06C0) 0xFBA4)
+ ((0x06C1) 0xFBA6)
+ ((0x06C5) 0xFBE0)
+ ((0x06C6) 0xFBD9)
+ ((0x06C7) 0xFBD7)
+ ((0x06C8) 0xFBDB)
+ ((0x06C9) 0xFBE2)
+ ((0x06CB) 0xFBDE)
+ ((0x06CC) 0xFBFC)
+ ((0x06D0) 0xFBE4)
+ ((0x06D2) 0xFBAE)
+ ((0x06D3) 0xFBB0)
+ ((0x06D4) =)
+ ((0x06D5) 0xFEE9)
+ ((0x06E5) =)
+ ((0x06E6) =)
+ ((0x06E9) =)
+ ((range 0x06F0 0x06F9) =)
+ ((0x06FD) =)
+ ((0x06FE) =)
+ ((0xFEF5) =)
+ ((0xFEF7) =)
+ ((0xFEF9) =)
+ ((0xFEFB) =)
+ ((0x200C) =)
+ ((0x200D) =)
+ ))
+
+ (final
+ (cond
+ ((0x0622) 0xFE82)
+ ((0x0623) 0xFE84)
+ ((0x0624) 0xFE86)
+ ((0x0625) 0xFE88)
+ ((0x0626) 0xFE8A)
+ ((0x0627) 0xFE8E)
+ ((0x0628) 0xFE90)
+ ((0x0629) 0xFE94)
+ ((0x062A) 0xFE96)
+ ((0x062B) 0xFE9A)
+ ((0x062C) 0xFE9E)
+ ((0x062D) 0xFEA2)
+ ((0x062E) 0xFEA6)
+ ((0x062F) 0xFEAA)
+ ((0x0630) 0xFEAC)
+ ((0x0631) 0xFEAE)
+ ((0x0632) 0xFEB0)
+ ((0x0633) 0xFEB2)
+ ((0x0634) 0xFEB6)
+ ((0x0635) 0xFEBA)
+ ((0x0636) 0xFEBE)
+ ((0x0637) 0xFEC2)
+ ((0x0638) 0xFEC6)
+ ((0x0639) 0xFECA)
+ ((0x0640) 0x0640)
+ ((0x063A) 0xFECE)
+ ((0x0641) 0xFED2)
+ ((0x0642) 0xFED6)
+ ((0x0643) 0xFEDA)
+ ((0x0644) 0xFEDE)
+ ((0x0645) 0xFEE2)
+ ((0x0646) 0xFEE6)
+ ((0x0647) 0xFEEA)
+ ((0x0648) 0xFEEE)
+ ((0x0649) 0xFEF0)
+ ((0x064A) 0xFEF2)
+ ((0x0671) 0xFB51)
+ ((0x0679) 0xFB67)
+ ((0x067A) 0xFB5F)
+ ((0x067B) 0xFB52)
+ ((0x067E) 0xFB57)
+ ((0x067F) 0xFB63)
+ ((0x0680) 0xFB5B)
+ ((0x0683) 0xFB77)
+ ((0x0684) 0xFB73)
+ ((0x0686) 0xFB7B)
+ ((0x0687) 0xFB7F)
+ ((0x0688) 0xFB89)
+ ((0x068C) 0xFB85)
+ ((0x068D) 0xFB83)
+ ((0x068E) 0xFB87)
+ ((0x0691) 0xFB8D)
+ ((0x0698) 0xFB8B)
+ ((0x06A4) 0xFB6B)
+ ((0x06A6) 0xFB6F)
+ ((0x06A9) 0xFB8F)
+ ((0x06AD) 0xFBD4)
+ ((0x06AF) 0xFB93)
+ ((0x06B1) 0xFB9B)
+ ((0x06B3) 0xFB97)
+ ((0x06BA) 0xFB9F)
+ ((0x06BB) 0xFBA1)
+ ((0x06BE) 0xFBAB)
+ ((0x06C0) 0xFBA5)
+ ((0x06C1) 0xFBA7)
+ ((0x06C5) 0xFBE1)
+ ((0x06C6) 0xFBDA)
+ ((0x06C7) 0xFBD8)
+ ((0x06C8) 0xFBDC)
+ ((0x06C9) 0xFBE3)
+ ((0x06CB) 0xFBDF)
+ ((0x06CC) 0xFBFD)
+ ((0x06D0) 0xFBE5)
+ ((0x06D2) 0xFBAF)
+ ((0x06D3) 0xFBB1)
+ ((0x06D5) 0xFEEA)
+ ((0xFEF5) 0xFEF6)
+ ((0xFEF7) 0xFEF8)
+ ((0xFEF9) 0xFEFA)
+ ((0xFEFB) 0xFEFC)
+ ((0x200C) =)
+ ((0x200D) =)
+ ))
+
+ (initial
+ (cond
+ ((0x0626) 0xFE8B)
+ ((0x0628) 0xFE91)
+ ((0x062A) 0xFE97)
+ ((0x062B) 0xFE9B)
+ ((0x062C) 0xFE9F)
+ ((0x062D) 0xFEA3)
+ ((0x062E) 0xFEA7)
+ ((0x0633) 0xFEB3)
+ ((0x0634) 0xFEB7)
+ ((0x0635) 0xFEBB)
+ ((0x0636) 0xFEBF)
+ ((0x0637) 0xFEC3)
+ ((0x0638) 0xFEC7)
+ ((0x0639) 0xFECB)
+ ((0x0640) 0x0640)
+ ((0x063A) 0xFECF)
+ ((0x0641) 0xFED3)
+ ((0x0642) 0xFED7)
+ ((0x0643) 0xFEDB)
+ ((0x0644) 0xFEDF)
+ ((0x0645) 0xFEE3)
+ ((0x0646) 0xFEE7)
+ ((0x0647) 0xFEEB)
+ ((0x0649) 0xFBE8)
+ ((0x064A) 0xFEF3)
+ ((0x0679) 0xFB68)
+ ((0x067A) 0xFB60)
+ ((0x067B) 0xFB54)
+ ((0x067E) 0xFB58)
+ ((0x067F) 0xFB64)
+ ((0x0680) 0xFB5C)
+ ((0x0683) 0xFB78)
+ ((0x0684) 0xFB74)
+ ((0x0686) 0xFB7C)
+ ((0x0687) 0xFB80)
+ ((0x06A4) 0xFB6C)
+ ((0x06A6) 0xFB70)
+ ((0x06A9) 0xFB90)
+ ((0x06AD) 0xFBD5)
+ ((0x06AF) 0xFB94)
+ ((0x06B1) 0xFB9C)
+ ((0x06B3) 0xFB98)
+ ((0x06BA) 0xFEE7)
+ ((0x06BB) 0xFBA2)
+ ((0x06BE) 0xFBAC)
+ ((0x06C1) 0xFBA8)
+ ((0x06CC) 0xFBFE)
+ ((0x06D0) 0xFBE6)
+ ((0x200C) =)
+ ((0x200D) =)
+ ))
+
+ (medial
+ (cond
+ ((0x0626) 0xFE8C)
+ ((0x0628) 0xFE92)
+ ((0x062A) 0xFE98)
+ ((0x062B) 0xFE9C)
+ ((0x062C) 0xFEA0)
+ ((0x062D) 0xFEA4)
+ ((0x062E) 0xFEA8)
+ ((0x0633) 0xFEB4)
+ ((0x0634) 0xFEB8)
+ ((0x0635) 0xFEBC)
+ ((0x0636) 0xFEC0)
+ ((0x0637) 0xFEC4)
+ ((0x0638) 0xFEC8)
+ ((0x0639) 0xFECC)
+ ((0x0640) 0x0640)
+ ((0x063A) 0xFED0)
+ ((0x0641) 0xFED4)
+ ((0x0642) 0xFED8)
+ ((0x0643) 0xFEDC)
+ ((0x0644) 0xFEE0)
+ ((0x0645) 0xFEE4)
+ ((0x0646) 0xFEE8)
+ ((0x0647) 0xFEEC)
+ ((0x0649) 0xFBE9)
+ ((0x064A) 0xFEF4)
+ ((0x0679) 0xFB69)
+ ((0x067A) 0xFB61)
+ ((0x067B) 0xFB55)
+ ((0x067E) 0xFB59)
+ ((0x067F) 0xFB65)
+ ((0x0680) 0xFB5D)
+ ((0x0683) 0xFB79)
+ ((0x0684) 0xFB75)
+ ((0x0686) 0xFB7D)
+ ((0x0687) 0xFB81)
+ ((0x06A4) 0xFB6D)
+ ((0x06A6) 0xFB71)
+ ((0x06A9) 0xFB91)
+ ((0x06AD) 0xFBD6)
+ ((0x06AF) 0xFB95)
+ ((0x06B1) 0xFB9D)
+ ((0x06B3) 0xFB99)
+ ((0x06BA) 0xFEE8)
+ ((0x06BB) 0xFBA3)
+ ((0x06BE) 0xFBAD)
+ ((0x06C1) 0xFBA9)
+ ((0x06CC) 0xFBFF)
+ ((0x06D0) 0xFBE7)
+ ((0x200C) =)
+ ((0x200D) =)
+ ))
+
+ (combining
+ (cond
+ ((0x0651 0x0650) tc+bc 0x064E tc+bc 0x0651) ; shadda + kasra
+ ((0x0651 0x064D) tc+bc 0x064B tc+bc 0x0651) ; shadda + kasratan
+ ((range 0x0610 0x0615) tc+bc =)
+ ((0x064B) tc+bc =)
+ ((0x064C) tc+bc =)
+ ((0x064D) bc-tc =)
+ ((0x064E) tc+bc =)
+ ((0x064F) tc+bc =)
+ ((0x0650) bc-tc =)
+ ((range 0x0651 0x0654) tc+bc =)
+ ((0x0655) bc-tc =)
+ ((0x0656) bc-tc =)
+ ((0x0657) tc+bc =)
+ ((0x0658) tc+bc =)
+ ((0x0670) tc+bc =)
+ ((range 0x06D6 0x06DC) tc+bc =)
+ ((range 0x06DF 0x06E2) tc+bc =)
+ ((0x06E3) bc-tc =)
+ ((0x06E4) tc+bc =)
+ ((0x06E7) tc+bc =)
+ ((0x06E8) tc+bc =)
+ ((0x06EA) bc-tc =)
+ ((0x06EB) tc+bc =)
+ ((0x06EC) tc+bc =)
+ ((0x06ED) bc-tc =)
+ ((0x200C) =)
+ ((0x200D) =)
+ ))
+ )
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; BENG-OTF.flt -- Font Layout Table for Bengali OpenType font
+;; 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.
+
+;;; <li> BENG-OTF.flt
+;;;
+;;; For Bengali OpenType fonts to draw the Bengali script. Tested with
+;;; MuktiNarrow.ttf <http://www.nongnu.org/freebangfont/index.html>
+;;; and
+;;; LikhanNormal.otf <http:http://www.stat.wisc.edu/~deepayan/Bengali/WebPage/Font/fonts.html>
+
+(font layouter beng-otf nil
+ (font (nil nil unicode-bmp :otf=beng=rphf)))
+
+(category
+ ;; C: consonant (excluding B, Y and R)
+ ;; B: consonant BA (below)
+ ;; Y: consonant YA (post)
+ ;; R: consonant RA (reph, below)
+ ;; n: NUKTA
+ ;; H: HALANT
+ ;; m: MATRA (pre)
+ ;; b: MATRA (below)
+ ;; p: MATRA (post)
+ ;; t: MATRA (two-part)
+ ;; A: vowel modifier (above)
+ ;; a: vowel modifier (post)
+ ;; V: independent vowel
+ ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
+ ;; J: ZWJ (ZERO WIDTH JOINER)
+ ;; E: ELSE
+ ;;
+ (0x200C ?N) ; ZWNJ
+ (0x200D ?J) ; ZWJ
+ (0x0964 0x0965 ?E) ; DANDA, DOUBLE DANDA
+ (0x0980 0x09FF ?E) ; ELSE
+ (0x0981 ?A) ; SIGN CANDRABINDU (above)
+ (0x0982 0x0983 ?a) ; SIGN ANUSWAR, VISARGA (post)
+ (0x0985 0x098C ?V) ; LETTER A .. VOCALIC L
+ (0x098F 0x0990 ?V) ; LETTER E .. AI
+ (0x0993 0x0994 ?V) ; LETTER O .. 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 (post)
+ (0x09BF ?m) ; VOWEL SIGN I (pre)
+ (0x09C0 ?p) ; VOWEL SIGN II (post)
+ (0x09C1 0x09C4 ?b) ; VOWEL SIGN U, UU, R, RR (below)
+ (0x09C7 0x09C8 ?m) ; VOWEL SIGN E, AI (pre)
+ (0x09CB 0x09CC ?t) ; VOWEL SIGN O, AU (two-part)
+ (0x09CD ?H) ; SIGN VIRAMA (HASANT)
+ (0x09CE ?C) ; LETTER KHANDA TA
+ (0x09D7 ?p) ; AU LENGTH MARK
+ (0x09DC 0x09DD ?C) ; LETTER RRA, RHA
+ (0x09DF ?C) ; LETTER YYA
+ (0x09E0 0x09E1 ?V) ; LETTER VOCALIC RR, LL
+ (0x09E2 0x09E3 ?b) ; VOWEL SIGN L .. LL (below)
+ (0x09F0 0x09F1 ?C) ; LETTER RR', RR'' (assamese)
+ (0x09FE ?x) ; mark #1 (internal use)
+ (0x09FF ?y) ; mark #2 (internal use)
+ )
+
+;; Step 1 : Syllable identification. Recognised syllables are quoted
+;; by the pseudo character, which is generated by the command "|" and
+;; has the category " " (space).
+(generator
+ (0
+ (cond
+ ;; Special case. The sequence "C1 H N C2 m" is reordered as
+ ;; "C1 H m C2", not "m C1 H C2". Besides, "C1 H" is drawn in the
+ ;; halant-form.
+ ("([CRBY]n?H)N"
+ < |
+ (1 otf:beng=hln)
+ | >)
+
+ ;; Case A-C are for those syllables that end with an explicit vowel
+ ;; mark and/or a vowel modifier. They are divided into three cases
+ ;; for the readability of regular expression. The leading
+ ;; consonant-Hasant repetition is analysed for reordering in the
+ ;; next step. Two-part vowel, if any, is split for
+ ;; canonicalisation.
+
+ ;; Case A : A syllable ending with a vowel modifier.
+ ;;1 23 4 5 6 7
+ ("(RH)?(([CRBY]n?HJ?)*([CRBY]n?))([mbp]*)(t)?([Aa])"
+ < |
+ (1 = =)
+ (2 set-marks)
+ (5 = *)
+ (6 split)
+ (7 =)
+ | >)
+
+ ;; Case B : A syllable ending with a two-part vowel.
+ ;;1 23 4 5
+ ("(RH)?(([CRBY]n?HJ?)*([CRBY]n?))(t)"
+ < |
+ (1 = =)
+ (2 set-marks)
+ (5 split)
+ | >)
+
+ ;; Case C : A syllable ending with other vowel. Note that a
+ ;; two-part vowel may be expressed with two vowel marks for
+ ;; backward compatibility.
+ ;;1 23 4 5
+ ("(RH)?(([CRBY]n?HJ?)*([CRBY]n?))([mbp]+)"
+ < |
+ (1 = =)
+ (2 set-marks)
+ (5 = *)
+ | >)
+
+ ;; Case D : Ya-phalaa. Reorder H and Y for the next step.
+ ;; The web page "Unicode FAQ for Indic Scripts and Languages"
+ ;; <http://www.unicode.org/faq/indic.html> says "it should be
+ ;; permissible for the Ya-phalla to be consistently formed by "ZWNJ
+ ;; + VIRAMA + YA".
+ ("([CRBY]n?N)(H)(Y)"
+ < |
+ (1 = *)
+ (3 =)
+ (2 =)
+ | >)
+
+ ;; Case E : No explicit vowel nor modifier. If the syllable ends
+ ;; with a consonant, analyse it for reordering in the next step.
+ ;; Otherwise, just identify the syllable without changing anything.
+ ;;1 23 4
+ ("(RH)?(([CRBY]n?HJ?)*[CRBY]n?)(HN|HJ|H)?"
+ < |
+ (1 = =)
+ (2 set-marks)
+ (4 = *)
+ | >)
+
+ ;; Case F : Syllables that begin with an independent vowel. An
+ ;; optional HYp sequence appears when this syllable represents the
+ ;; sound "a" in English "bat" (see the FAQ above). If it appears,
+ ;; we reorder the H and Y for the next step.
+ ("(V)(HYp)?([aA])?"
+ < | (1 =) (2 ("HY(p)" 0x09AF 0x09CD (1 =))) (3 =) | >)
+
+ ("." =))
+ *)
+
+ ;; Set mark #1 (x) at the position where below consonants begin, and
+ ;; mark #2 (y) at the position to which below and above signs will be
+ ;; moved.
+ (set-marks
+ (cond
+ ;; Ending with Y.
+ ;;1 2 3 45 6
+ ("([CRBY]n?(HJ?Cn?)*)(H)(([RB]H)*)(Y)"
+ (1 = *) ; prebase & base
+ 0x09FE ; mark #1
+ (4 = *) ; below consonants
+ 0x09FF ; mark #2
+ (6 =) ; YA
+ (3 =)) ; moved HASANT
+ ;; Ending with R or B.
+ ;;1 2 3 45
+ ("([CRBY]n?(HJ?Cn?)*)(H)(([RB]H)*[RB])"
+ (1 = *) ; prebase & base
+ 0x09FE ; mark #1
+ (4 = *) ; below consonants
+ (3 =) ; moved HASANT
+ 0x09FF) ; mark #2
+ (".+"
+ = *
+ 0x09FE ; mark #1
+ 0x09FF))) ; mark #2
+
+ ;; Split two-part dependent vowel signs for canonicalisation.
+ (split
+ (cond
+ ((0x09CB) 0x09C7 0x09BE)
+ ((0x09CC) 0x09C7 0x09D7)))
+ )
+
+;; Step 2 : Move Reph and Matra if necessary. From now on, we care
+;; only for those syllables that have been identified in Step 1.
+(generator
+ (0
+ (cond
+ ;; Special case: a single consonant and a Halant.
+ (" (.)xy(HJ?) "
+ |
+ 0x09FE
+ (1 =)
+ (2 = *)
+ 0x09FE
+ |)
+
+ ;; This is the most generic pattern. It follows Cases A, B, C and
+ ;; E in Step 1. Now Mark #1 is used to indicate the critical part
+ ;; that requires pre-base substitution in the following steps.
+
+ ;; 1 2 3 4 5 6 7 8 9 10
+ (" (RH)?([^ xy]+)x([^ y]*)y(YH)?(m)?(b)?(p)?(A)?(a)?(HJ|H)? "
+ |
+ (5 =) ; [Mpre]
+ ;; Actually, the nukt feature is not necessary for Bengali because
+ ;; all the necessary Nukta forms are precomposed in the Unicode
+ ;; standard. Even if a Nukta consonant is given in the form of
+ ;; the combination of the base consonant and a Nukta sign, we can
+ ;; safely perform the composition here because it does not affect
+ ;; surrounding letters in the syllable. The Akhand ligature
+ ;; operation is also applied here, before applying the half form
+ ;; operation because the Mukti font generates Akhand ligatures
+ ;; directly from the "C H C" sequence, not via the half form.
+ 0x09FE ; begin Cpre & Cbase
+ (2 otf:beng=nukt,akhn) ; {Cpre + H} + Cbase
+ 0x09FE ; end Cpre & Cbase
+ (3 otf:beng=blwf) ; {Cbelow + H}
+ (6 =) ; [Mbelow]
+ (1 otf:beng=rphf) ; [Reph]
+ (8 =) ; [VMabove]
+ (4 otf:beng=pstf) ; [Cpost + H]
+ (7 =) ; [Mpost]
+ (9 =) ; [VMpost]
+ (10 = *) ; optional HASANT
+ |)
+
+ ;; Syllables that begin with an independent vowel (following up
+ ;; Step 1, Case F). If a YH sequence exist, it is changed to the
+ ;; post-base form. Syllables of this type do not require further
+ ;; modification.
+ (" (V)(YH)(.*) "
+ |
+ (1 =)
+ (2 otf:beng=pstf)
+ (3 = *)
+ |)
+
+ ;; Ya-phalaa (following up Step 1, Case D). Remove N and change YH
+ ;; to the post base form. Syllables of this type do not require
+ ;; further modification.
+ (" ([CBRY]n?)N(YH) "
+ |
+ (1 =)
+ (2 otf:beng=pstf)
+ |)
+
+ ("." =))
+ *))
+
+;; Step 3 : Now only those syllables that contain the pseudo character
+;; x require pre-base substition. This is the most complicated part
+;; in this FLT.
+
+;; If the sequence "C1 H C2" makes ligature L12, L12 replaces the
+;; original sequence.
+
+;; To test the availability of such a ligature, we try to generate it
+;; using the pre-base substitute feature, then see whether succeeded
+;; or not. In the case of failure, the pre-base feature does not
+;; change the original sequence.
+
+;; To create a ligature, the "C1 H" part must be first converted into
+;; the half form of C1. Creating the half form of a consonant always
+;; succeeds.
+
+;; ligature(half(C1,H),C2)
+;; ==> ligature(C1half,C2)
+;; ==> L12 ; success
+;; C1half C2 ; fail
+
+;; If the ligature is not available, the "C1 H" part must be converted
+;; into the _Halant_ (not half) form of C1. However, there is no way
+;; to reconvert C1half into C1halant nor to revert back to "C1 H".
+;; Thus we duplicate the critical part in two different forms so that
+;; we can select the appropriate one in the next step. The pseudo
+;; character x is used to indicate the boundaries.
+
+;; ... C1 H C2 ... ==> ... x C1halant C2 x L12 x ...
+
+;; If the length of the L12 part is one, ligature generation was
+;; successful. In this case we wipe out the duplicated C1halant and
+;; C2. Otherwise we remove L12.
+
+;; In very few cases (I found only one in the Mukti font), the "C1 H"
+;; part need to be converted into C1halant (instead of C1half) to make
+;; a ligature with C2. So when we try to generate a ligature form, we
+;; apply the GSUB features "half", "haln" and "pres" in this order.
+
+(category
+ ;; C: consonant (excluding B, Y and R)
+ ;; H: HALANT
+ ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
+ ;; J: ZWJ (ZERO WIDTH JOINER)
+ ;; E: ELSE
+ ;;
+ (0x200C ?N) ; ZWNJ
+ (0x200D ?J) ; ZWJ
+ (0x0964 0x0965 ?E) ; DANDA, DOUBLE DANDA
+ (0x0980 0x09FF ?E) ; ELSE
+ (0x09CD ?H) ; SIGN VIRAMA (HASANT)
+ (0x0995 ?K) ; LETTER KA
+ (0x09B7 ?S) ; LETTER SSA
+ (0x09A3 ?M) ; LETTER NNA
+ (0x09AE ?M) ; LETTER MA
+ (0x09FE ?x) ; mark #1 (internal use)
+ )
+
+(generator
+ (0
+ (cond
+
+ ;; One pre-base and base.
+ ;; 1 23 4 5 6
+ (" ([^x ]*)x((.H)([^J]))(H)?x([^ ]*) "
+ |
+ (1 = *)
+ 0x09FE ; x
+ (3 otf:beng=haln) ; C1halant
+ (4 =) ; C2
+ 0x09FE ; x
+ (2 otf:beng=half,haln,pres) ; ligature result
+ 0x09FE ; x
+ (5 =)
+ (6 = *)
+ |)
+
+ ;; One pre-base with ZWJ. According to the Unicode FAQ, the half
+ ;; form is forced in this case. So we fake as if ligature
+ ;; generation was failed.
+ (" ([^x ]*)x(.H)J(.)?x([^ ]*) "
+ |
+ (1 = *)
+ 0x09FE ; x
+ (2 otf:beng=half) ; C1half
+ (3 =) ; C2
+ 0x09FE ; x
+ 0x09FD ; pseudo result
+ 0x09FD ; pseudo result
+ 0x09FE ; x
+ (4 = *)
+ |)
+
+ ;; One pre-base possibly with ZWNJ. Similar to above.
+ (" ([^x ]*)x(.H)N?(.)?x([^ ]*) "
+ |
+ (1 = *)
+ 0x09FE ; x
+ (2 otf:beng=haln) ; C1halant
+ (3 =) ; C2
+ 0x09FE ; x
+ 0x09FD ; pseudo result
+ 0x09FD ; pseudo result
+ 0x09FE ; x
+ (4 = *)
+ |)
+
+ ;; Standalone base. There is nothing more to do.
+ (" ([^x ]*)x(.)x([^ ]*) "
+ |
+ (1 = *)
+ (2 =)
+ (3 = *)
+ |)
+
+ ;; KA-SSA-NNA and KA-SSA-MA are the only pre-base ligatures that
+ ;; consist of three consonants.
+ ;; 1 23 4 5 6 7
+ (" ([^x ]*)x((KH)(SH)(M))(H)?x([^ ]*) "
+ |
+ (1 = *)
+ 0x09FE ; x
+ (3 otf:beng=haln) ; KAhalant
+ (4 otf:beng=haln) ; SSAhalant
+ (5 =) ; NNA or MA
+ 0x09FE ; x
+ (2 otf:beng=half,haln,pres) ; ligature result
+ 0x09FE ; x
+ (6 =)
+ (7 = *)
+ |)
+
+ ;; Two or more pre-bases plus base. Give up. Convert all
+ ;; pre-bases into halant form.
+ ;; 1 23 4 5
+ (" ([^x ]*)x(([^x]H[JN]?)+)([^x])?x([^ ]*) "
+ |
+ (1 = *)
+ 0x09FE ; x
+ (2 force-haln) ; halant forms
+ (4 =) ; full form
+ 0x09FE ; x
+ 0x09FD ; pseudo result
+ 0x09FD ; pseudo result
+ 0x09FE ; x
+ (5 = *)
+ |)
+
+ ("." =))
+ *)
+
+ ;; This is to remove ZWNJ and ZWJ. The half-form-force-effect of ZWJ
+ ;; is ignored. Sorry.
+ (force-haln
+ (cond
+ ("([^JN]*)[JN](.*)"
+ (1 otf:beng=haln)
+ (2 force-haln))
+ (".+"
+ otf:beng=haln)))
+ )
+
+;; Step 4 : Select the appropriate representation. Only those
+;; syllables that contain the virtual character x require
+;; modification.
+(generator
+ (0
+ (cond
+ ;; Only one glyph in the ligature section (between the second and
+ ;; the third x). It means a ligature was successfully generated.
+ ;; C1halant and C2 (between the first and second x) are removed.
+ (" ([^x ]*)x[^x]+x(.)x([^ ]*) "
+ |
+ (1 = *)
+ (2 =)
+ (3 = *)
+ |)
+
+ ;; Otherwise halant and base forms are used. The failed ligature
+ ;; is removed.
+ (" ([^x ]*)x([^x]+)x[^x]+x([^ ]*) "
+ |
+ (1 = *)
+ (2 = *)
+ (3 = *)
+ |)
+
+ ;; No need to care the other cases.
+ ("." =))
+ *))
+
+;; Step 5 : Select appropriate glyph variants for fine adjustments.
+;; Now the syllable boundary marks are removed so that the final step
+;; can find word boundaries.
+(generator
+ (0
+ (cond
+ (" ([^ ]+) "
+ (1 otf:beng=blws,abvs,psts,vatu))
+ ("."
+ [ otf:beng=+ ] ))
+ *)
+ )
+
+;; Step 6 : Word initial substitute. As the syllable boundaries have
+;; been eliminated in the previous step, this rule is applied to a run
+;; of Bengali glyphs, i.e. word by word. We finally apply the init
+;; feature to the word initial gylphs to get the final result.
+(generator
+ (0
+ ("(.)(.*)"
+ (1 otf:beng=init)
+ (2 = *))))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; DEVA-CDAC.flt -- Font Layout Table for Devanagari (C-DAC font)
+;; Copyright (C) 2003, 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.
+
+;;; <li> DEVA-CDAC.flt
+;;;
+;;; For the font DVYG0ntt.ttf (developed by C-DAC, encoding is ISFOC)
+;;; to draw Devanagari script. The font is available at:
+;;; <ul>
+;;; <li> infopage: http://www.iiit.net/ltrc/iscii/FAQ.htm#SEC2.1
+;;; <li> download: http://www.iiit.net/ltrc/iscii/iscii_plugin_linux.tar.gz
+;;; </ul>
+
+(font layouter deve-cdac nil
+ (font (nil dv-ttyogesh apple-roman)))
+
+(category
+ ;; A: ANUSVARA or CANDRABINDU
+ ;; C: CONSONANT (except for R)
+ ;; R: LETTER RA
+ ;; V: VOWEL INDEPENDENT
+ ;; N: NUKTA
+ ;; H: HALANT
+ ;; M: MATRA (VOWEL DEPENDENT, except for I)
+ ;; I: VOWEL SIGN I
+ ;; S: STRESS or TONE
+ ;; E: ELSE
+ (0x0900 ?E)
+ (0x0901 0x0902 ?A) ; CANDRABINDU and ANUSVARA
+ (0x0903 ?E) ; SIGN VISARGA
+ (0x0905 0x0914 ?V) ; A .. AU
+ (0x0915 0x0939 ?C) ; KA .. HA
+ (0x0930 ?R) ; RA
+ (0x093C ?N) ; NUKTA
+ (0x093D ?E) ; AVAGRAHA
+ (0x093E 0x094C ?M) ; VOWEL SIGN AA .. AU
+ (0x093F ?I) ; VOWEL SIGN I
+ (0x094D ?H) ; SIGN VIRAMA (HARANT)
+ (0x0950 ?E) ; OM
+ (0x0951 0x954 ?S) ; UDATTA .. ACUTE
+ (0x0958 0x095E ?C) ; LETTER QA .. YYA
+ (0x0960 0x0961 ?V) ; LETTER VOCALIC RR and LL
+ (0x0962 0x0963 ?M) ; VOWEL SIGN VOCALIC L and LL
+ (0x0964 0x0970 ?E) ; DANDA .. ABBREVIATION SIGN
+ )
+
+(generator
+ (0
+ (cond
+ ("VA?S?"
+ < | vowel * | >)
+ ("([RC]H)*[RC](H|[IM]?A?S?)?"
+ < |
+ (cond
+ ("RH.*" ;; with preceding RA HARANT
+ (cond
+ ("(RH)([^I]*)(I)(A?S?)" ; with I
+ (3 vowel-sign-I)
+ (2 consonant *)
+ (1 preceding-r)
+ (4 post-modifier))
+ ("(RH)([^M]*)(M)(A?S?)" ; with M
+ (2 consonant *)
+ (3 matra)
+ (1 preceding-r)
+ (4 post-modifier))
+ ("(RH)(.*)(H)$" ; with last HARANT
+ (2 consonant *)
+ (1 preceding-r)
+ (3 harant))
+ ("(RH)([^AS]*)(.*)" ; otherwise
+ (2 consonant *)
+ (1 preceding-r)
+ (3 post-modifier))))
+ ;; without preceding RA HARANT
+ ("([^I]*)(I)(A?S?)" ; with I
+ (2 vowel-sign-I)
+ (1 consonant *)
+ (3 post-modifier))
+ ("([^M]*)(M)(A?S?)" ; with M
+ (1 consonant *)
+ (2 matra)
+ (3 post-modifier))
+ ("(.*)(H)$" ; with last HARANT
+ (1 consonant *)
+ (2 harant))
+ ("([^AS]*)(.*)" ; otherwise
+ (1 consonant *)
+ (3 post-modifier))
+ (".*"
+ consonant *))
+ | > )
+ ("."
+ independent))
+ *)
+
+ (vowel
+ (cond
+ ((0x0905) 0x2B)
+ ((0x0906) 0x2B 0xC9)
+ ((0x0907) 0x3C)
+ ((0x0908 0x0901) 0x3C 0xC7 0xC6)
+ ((0x0908) 0x3C 0xC7)
+ ((0x0909) 0x3D)
+ ((0x090A) 0x3E 0xF0)
+ ((0x090B) 0x40 0xF1)
+ ((0x090D 0x0901) 0x42 0xC4)
+ ((0x090D 0x0902) 0x42 0xC4)
+ ((0x090D) 0x42 0xEC)
+ ((0x090E 0x0901) 0x42 0xE0 0xC6)
+ ((0x090E) 0x42 0xE0)
+ ((0x090F) 0x42)
+ ((0x0910 0x0901) 0x42 0xE4 0xC6)
+ ((0x0910) 0x42 0xE4)
+ ((0x0911 0x0901) 0x2B 0xC9 0xC4)
+ ((0x0911 0x0902) 0x2B 0xC9 0xC4)
+ ((0x0911) 0x2B 0xC9 0xEC)
+ ((0x0912 0x0901) 0x2B 0xC9 0xE0 0xC6)
+ ((0x0912) 0x2B 0xC9 0xE0)
+ ((0x0913 0x0901) 0x2B 0xC9 0xE4 0xC6)
+ ((0x0913) 0x2B 0xC9 0xE4)
+ ((0x0914 0x0901) 0x2B 0xC9 0xE8 0xC6)
+ ((0x0914) 0x2B 0xC9 0xE8)
+ ((0x0960) 0x41 0xF1)))
+
+ (vowel-sign-I
+ ((0x093F) 0xCA))
+
+ (preceding-r
+ ((0x0930 0x094D) 0xC7))
+
+ (post-modifier
+ (cond
+ ((0x0901) 0xC4)
+ ((0x0902) 0xC6)
+ ((0x0951) 0x27)
+ ((0x0952) bc.tc 0x2D)))
+
+ (harant
+ ((0x094D) 0xC2))
+
+ (consonant
+ (cond
+ ((0x0915 0x094D 0x0924) 0x48 0xF2)
+ ((0x0915 0x094D 0x0930) 0x47 0xF2)
+ ((0x0915 0x094D 0x0937 0x094D) 0x49)
+ ((0x0915 0x094D 0x0937) 0x49 0xC9)
+ ((0x0915 0x094D) 0x43)
+ ((0x0915) 0x45 0xF2)
+ ((0x0916 0x094D 0x0930 0x094D) 0x4C)
+ ((0x0916 0x094D 0x0930) 0x4C 0xC9)
+ ((0x0916 0x094D) 0x4A)
+ ((0x0916) 0x4A 0xC9)
+ ((0x0917 0x094D 0x0930 0x094D) 0x4F)
+ ((0x0917 0x094D 0x0930) 0x4F 0xC9)
+ ((0x0917 0x094D) 0x4D)
+ ((0x0917) 0x4D 0xC9)
+ ((0x0918 0x094D 0x0930 0x094D) 0x51)
+ ((0x0918 0x094D 0x0930) 0x51 0xC9)
+ ((0x0918 0x094D) 0x50)
+ ((0x0918) 0x50 0xC9)
+ ((0x0919) 0x52 0xF3)
+ ((0x091A 0x094D 0x0930 0x094D) 0x54)
+ ((0x091A 0x094D 0x0930) 0x54 0xC9)
+ ((0x091A 0x094D) 0x53)
+ ((0x091A) 0x53 0xC9)
+ ((0x091B) 0x55 0xF4)
+ ((0x091C 0x094D 0x091E 0x094D) 0x59)
+ ((0x091C 0x094D 0x091E) 0x59 0xC9)
+ ((0x091C 0x094D 0x0930 0x094D) 0x58)
+ ((0x091C 0x094D 0x0930) 0x58 0xC9)
+ ((0x091C 0x094D) 0x56)
+ ((0x091C) 0x56 0xC9)
+ ((0x091D 0x094D 0x0930 0x094D) 0x5B)
+ ((0x091D 0x094D 0x0930) 0x5B 0xC9)
+ ((0x091D 0x094D) 0x5A)
+ ((0x091D) 0x5A 0xC9)
+ ((0x091E 0x094D) 0x5C)
+ ((0x091E) 0x5C 0xC9)
+ ((0x091F 0x094D 0x091F) 0x5E 0xF5)
+ ((0x091F 0x094D 0x0920) 0x5F 0xF5)
+ ((0x091F) 0x5D 0xF5)
+ ((0x0920 0x094D 0x0920) 0x61 0xF6)
+ ((0x0920) 0x60 0xF6)
+ ((0x0921 0x094D 0x0921) 0x64 0xF7)
+ ((0x0921 0x094D 0x0922) 0x65 0xF7)
+ ((0x0921) 0x62 0xF7)
+ ((0x0922) 0x66 0xF8)
+ ((0x0923 0x094D) 0x68)
+ ((0x0923) 0x68 0xC9)
+ ((0x0924 0x094D 0x0924 0x094D) 0x6B)
+ ((0x0924 0x094D 0x0924) 0x6B 0xC9)
+ ((0x0924 0x094D 0x0930 0x094D) 0x6A)
+ ((0x0924 0x094D 0x0930) 0x6A 0xC9)
+ ((0x0924 0x094D) 0x69)
+ ((0x0924) 0x69 0xC9)
+ ((0x0925 0x094D 0x0930 0x094D) 0x6D)
+ ((0x0925 0x094D 0x0930) 0x6D 0xC9)
+ ((0x0925 0x094D) 0x6C)
+ ((0x0925) 0x6C 0xC9)
+ ((0x0926 0x0943) 0x6F 0xF9)
+ ((0x0926 0x094D 0x0926) 0x71 0xF9)
+ ((0x0926 0x094D 0x0927) 0x72 0xF9)
+ ((0x0926 0x094D 0x092E) 0x73)
+ ((0x0926 0x094D 0x092F) 0x74)
+ ((0x0926 0x094D 0x0930) 0x70 0xF9)
+ ((0x0926 0x094D 0x0935) 0x75 0xF9)
+ ((0x0926) 0x6E 0xF9)
+ ((0x0927 0x094D 0x0930 0x094D) 0x77)
+ ((0x0927 0x094D 0x0930) 0x77 0xC9)
+ ((0x0927 0x094D) 0x76)
+ ((0x0927) 0x76 0xC9)
+ ((0x0928 0x094D 0x0928 0x094D) 0x7A)
+ ((0x0928 0x094D 0x0928) 0x7A 0xC9)
+ ((0x0928 0x094D 0x0930 0x094D) 0x79 0xC9)
+ ((0x0928 0x094D 0x0930) 0x79 0xC9)
+ ((0x0928 0x094D) 0x78)
+ ((0x0928) 0x78 0xC9)
+ ((0x0929) 0x78 0xC3 0xC9)
+ ((0x092A 0x094D 0x0930 0x094D) 0x7C)
+ ((0x092A 0x094D 0x0930) 0x7C 0xC9)
+ ((0x092A 0x094D) 0x7B)
+ ((0x092A) 0x7B 0xC9)
+ ((0x092B 0x094D 0x0930) 0xA3 0xFB)
+ ((0x092B 0x094D) 0x7D)
+ ((0x092B) 0xA1 0xFB)
+ ((0x092C 0x094D 0x0930 0x094D) 0xA5)
+ ((0x092C 0x094D 0x0930) 0xA5 0xC9)
+ ((0x092C 0x094D) 0xA4)
+ ((0x092C) 0xA4 0xC9)
+ ((0x092D 0x094D 0x0930 0x094D) 0xA7)
+ ((0x092D 0x094D 0x0930) 0xA7 0xC9)
+ ((0x092D 0x094D) 0xA6)
+ ((0x092D) 0xA6 0xC9)
+ ((0x092E 0x094D 0x0930 0x094D) 0xA9)
+ ((0x092E 0x094D 0x0930) 0xA9 0xC9)
+ ((0x092E 0x094D) 0xA8)
+ ((0x092E) 0xA8 0xC9)
+ ((0x092F 0x094D 0x0930 0x094D) 0xAB)
+ ((0x092F 0x094D 0x0930) 0xAB 0xC9)
+ ((0x092F 0x094D) 0xAA)
+ ((0x092F) 0xAA 0xC9)
+ ((0x0930 0x0941) 0xAF 0xFB)
+ ((0x0930 0x0942) 0xB0 0xFC)
+ ((0x0930) 0xAE 0xF7)
+ ((0x0931 0x094D) 0xAD)
+ ((0x0931) 0xAE 0xC3 0xF7)
+ ((0x0932 0x094D) 0xB1)
+ ((0x0932) 0xB1 0xC9)
+ ((0x0933 0x094D) 0xB2)
+ ((0x0933) 0xB3)
+ ((0x0934 0x094D) 0xB2 0xC3)
+ ((0x0934) 0xB3 0xC3)
+ ((0x0935 0x094D 0x0930 0x094D) 0xB5)
+ ((0x0935 0x094D 0x0930) 0xB5 0xC9)
+ ((0x0935 0x094D) 0xB4)
+ ((0x0935) 0xB4 0xC9)
+ ((0x0936 0x094D 0x0930 0x094D) 0xB8)
+ ((0x0936 0x094D 0x0930) 0xB8 0xC9)
+ ((0x0936 0x094D 0x0935 0x094D) 0xB7)
+ ((0x0936 0x094D 0x0935) 0xB7 0xC9)
+ ((0x0936 0x094D) 0xB6)
+ ((0x0936) 0xB6 0xC9)
+ ((0x0937 0x094D) 0xB9)
+ ((0x0937) 0xB9 0xC9)
+ ((0x0938 0x094D 0x0930 0x094D) 0xBB)
+ ((0x0938 0x094D 0x0930) 0xBB 0xC9)
+ ((0x0938 0x094D) 0xBA)
+ ((0x0938) 0xBA 0xC9)
+ ((0x0939 0x0943) 0xBE)
+ ((0x0939 0x094D 0x092E) 0xC0)
+ ((0x0939 0x094D 0x092F) 0xC1)
+ ((0x0939 0x094D 0x0930) 0xBF)
+ ((0x0939 0x094D) 0xBC)
+ ((0x0939) 0xBD)
+ ((0x094D 0x092F) 0xAC)
+ ((0x094D 0x0930) 0xC5)
+ ((0x0958 0x094D) 0x44)
+ ((0x0958) 0x46 0xF2 0xF3)
+ ((0x0959 0x094D) 0x4B)
+ ((0x0959) 0x4B 0xC9)
+ ((0x095A 0x094D) 0x4E)
+ ((0x095A) 0x4E 0xC9)
+ ((0x095B 0x094D) 0x57)
+ ((0x095B) 0x57 0xC9)
+ ((0x095C) 0x63 0xF7)
+ ((0x095D) 0x67 0xF8)
+ ((0x095E 0x094D) 0x7E)
+ ((0x095E) 0xA2 0xFB)
+ ((0x095F) 0xAA 0xC3 0xC9)
+ ((0x094D) 0xC2)))
+
+ (matra
+ (cond
+ ((0x093E) 0xC9)
+ ((0x093F 0x0901) 0xCA 0xC6)
+ ((0x093F) 0xCA)
+ ((0x0940 0x0901) 0xD2 0xC6)
+ ((0x0940) 0xD2)
+ ((0x0941) 0xD6)
+ ((0x0942) 0xDA)
+ ((0x0943) 0xDE)
+ ((0x0944) 0xDF)
+ ((0x0945) 0xEC)
+ ((0x0946 0x0901) 0xE0 0xC6)
+ ((0x0946) 0xE0)
+ ((0x0947 0x0901) 0xE4 0xC6)
+ ((0x0947) 0xE4)
+ ((0x0948 0x0901) 0xE8 0xC6)
+ ((0x0948) 0xE8)
+ ((0x0949 0x0901) 0xC9 0xC4)
+ ((0x0949 0x0902) 0xC9 0xC4)
+ ((0x0949) 0xC9 0xEC)
+ ((0x094A 0x0901) 0xC9 0xE0 0xC6)
+ ((0x094A) 0xC9 0xE0)
+ ((0x094B 0x0901) 0xC9 0xE4 0xC6)
+ ((0x094B) 0xC9 0xE4)
+ ((0x094C 0x0901) 0xC9 0xE8 0xC6)
+ ((0x094C) 0xC9 0xE8)))
+
+ (independent
+ (cond
+ ((0x0900) 0x23 0xC7) ; fake!!
+ ((0x0903) 0x26)
+ ((0x093C) 0xC3)
+ ((0x093D) 0x25)
+ ((0x0950) 0x24) ;new
+ ((0x0951) 0x27) ;new
+ ((0x0964) 0x2A)
+ ((0x0965) 0x2A 0x2A)
+ ((0x0966) 0x30)
+ ((0x0967) 0x31)
+ ((0x0968) 0x32)
+ ((0x0969) 0x33)
+ ((0x096A) 0x34)
+ ((0x096B) 0x35)
+ ((0x096C) 0x36)
+ ((0x096D) 0x37)
+ ((0x096E) 0x38)
+ ((0x096F) 0x39)
+ ((0x094D) 0x23 Bc>10Bl 0xC2)
+ ((0x093F) 0xCA Bc>10Bl 0x23)
+ ((0x0940) 0x23 0xD2)
+ )))
+
+(category
+ ;; C: CONSONANTS
+ ;; I: VOWEL SIGN I
+ ;; R: RIGHT MODIFIER
+ ;; S: SPACING
+ ;; E: ELSE
+ ;;
+ (0x00 0xFF ?E)
+ (0x3C 0xC1 ?C)
+ (0xC9 ?R)
+ (0xCA 0xD1 ?I)
+ (0xD2 0xD5 ?R)
+ (0xF0 0xFE ?S))
+
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ (1
+ (cond
+ ("(I[^C]*)(CC[^R]*)(R.*)"
+ (1 rule-i-wide = *)
+ (2 rule-else = *))
+ ("(I[^C]*)(CC[^S]*)(S)(.*)"
+ (1 rule-i-wide = *)
+ (2 = *)
+ (4 rule-else = *)
+ (3 = *))
+ ("([^R]*)(R).*"
+ (0 rule-else = *))
+ ("([^S]*)(S)(.*)"
+ (1 rule-else = *)
+ (3 rule-else = *)
+ (2 = *))
+ (".*" = *))))
+ ("[^ ]*"
+ = *))
+ *)
+
+ (rule-i-wide
+ (cond
+ ((0xCA 0xC6) 0xCF)
+ ((0xCA 0xC7 0xC6) 0xD1)
+ ((0xCA 0xC7) 0xD0)
+ ((0xCA) 0xCE)))
+
+ (rule-else
+ (cond
+ ((0xC3 0xD6) 0xD7)
+ ((0xC3 0xDA) 0xDB)
+ ((0xC5 0xD6) 0xD8)
+ ((0xC5 0xDA) 0xDC)
+ ((0xC7 0xC4) 0xC8)
+ ((0xC7 0xC6) 0xC8)
+ ((0xCA 0xC6) 0xCB)
+ ((0xCA 0xC7 0xC6) 0xCD)
+ ((0xCA 0xC7) 0xCC)
+ ((0xD2 0xC6) 0xD3)
+ ((0xD2 0xC7 0xC6) 0xD5)
+ ((0xD2 0xC7) 0xD4)
+ ((0xE0 0xC6) 0xE1)
+ ((0xE0 0xC7 0xC6) 0xE3)
+ ((0xE0 0xC7) 0xE2)
+ ((0xE4 0xC6) 0xE5)
+ ((0xE4 0xC7 0xC6) 0xE7)
+ ((0xE4 0xC7) 0xE6)
+ ((0xE8 0xC6) 0xE9)
+ ((0xE8 0xC7 0xC6) 0xEB)
+ ((0xE8 0xC7) 0xEA)
+ ((0xEC 0xC6) 0xED)
+ ((0xEC 0xC7 0xC6) 0xEF)
+ ((0xEC 0xC7) 0xEE))))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; DEVA-OTF.flt -- Font Layout Table for Devanagari OpenType font
+;; Copyright (C) 2003, 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.
+
+;;; <li> DEVA-OTF.flt
+;;;
+;;; For Devanagari OpenType fonts to draw the Devanagari script.
+
+(font layouter deva-otf nil
+ (font (nil nil unicode-bmp :otf=deva=rphf)))
+
+(category
+ ;; C: consonant (except for R)
+ ;; R: consonant RA
+ ;; n: NUKTA
+ ;; H: HALANT
+ ;; m: MATRA (pre)
+ ;; u: MATRA (above)
+ ;; b: MATRA (below)
+ ;; p: MATRA (post)
+ ;; A: vowel modifier (above)
+ ;; a: vowel modifier (post)
+ ;; S: stress sign (above)
+ ;; s: stress sign (below)
+ ;; V: independent vowel
+ ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
+ ;; J: ZWJ (ZERO WIDTH JOINER)
+ ;; E: ELSE
+ ;;
+ (#x0900 #x097F ?E) ; ELSE
+ (#x0901 ?A) ; SIGN CANDRABINDU (above)
+ (#x0902 ?A) ; SIGN ANUSVARA (above)
+ (#x0903 ?a) ; SIGN VISARGA (post)
+ (#x0905 #x0914 ?V) ; LETTER A .. LETTER AU
+ (#x0915 #x0939 ?C) ; LETTER KA .. LETTER HA
+ (#x0930 ?R) ; LETTER RA
+ (#x093C ?n) ; SIGN NUKTA
+ (#x093D ?E) ; SIGN AVAGRAHA
+ (#x093E #x094C ?p) ; VOWEL SIGN (post)
+ (#x093F ?m) ; VOWEL SIGN I (pre)
+ (#x0941 #x0944 ?b) ; VOWEL SIGN (below)
+ (#x0945 #x0948 ?u) ; VOWEL SIGN (above)
+ (#x094D ?H) ; SIGN VIRAMA (HALANT)
+ (#x0950 ?E) ; OM
+ (#x0951 #x0954 ?S) ; STRESS SIGN or TONE MARK (above)
+ (#x0952 ?s) ; STRESS SIGN or TONE MARK (below)
+ (#x0958 #x095E ?C) ; LETTER QA .. LETTER YYA
+ (#x0960 ?V) ; LETTER VOCALIC RR
+ (#x0961 ?V) ; LETTER VOCALIC LL
+ (#x0962 #x0963 ?b) ; VOWEL SIGN (below)
+ (#x0964 #x0970 ?E) ; DANDA .. ABBREVIATION SIGN
+ (#x200C ?N) ; ZWNJ
+ (#x200D ?J) ; ZWJ
+ (#x097D ?x) ; internally used tag to indicate Reph
+ (#x097E ?y) ; internally used tag to indicate Mpost
+ (#x097F ?z) ; internally used tag to indicate Cbase
+ )
+
+;; The first stage is to extract a syllable and re-order characters in
+;; it.
+(generator
+ (0
+ (cond
+ ;; If [CR]H is followed by ZWNJ/ZWJ, move ZWNJ/ZWJ to the head so
+ ;; that the later stages find it quickly.
+ ("([CR]n?H)([NJ])"
+ < | (2 =) (1 = *) | > )
+
+ ;; A syllable starting with RH (Reph) and ending with a vowel
+ ;; and/or a vowel modifier.
+ ("(RH)(([CR]n?H)*[CR]n?)([mubp][Aa]?[Ss]?|[Aa][Ss]?|[Ss])"
+ < | (1 #x097D = =) (2 move-base-Halant) (4 reorder-post-base) | >)
+
+ ;; A syllable starting with RH (Reph) and ending without a vowel
+ ;; nor a vowel modifier.
+ ("(RH)(([CR]n?H)*[CR]n?)(H)?"
+ < | (1 #x097D = =) (2 move-base-Halant) (4 =) | >)
+
+ ;; A syllable starting with the other consonant and ending with a
+ ;; vowel and/or a vowel modifier.
+ ("(([CR]n?H)*[CR]n?)([mubp][Aa]?[Ss]?|[Aa][Ss]?|[Ss])"
+ < | (1 move-base-Halant) (3 reorder-post-base) | >)
+
+ ;; A syllable starting with the other consonant and ending without
+ ;; a vowel nor a vowel modifier.
+ ("(([CR]n?H)*[CR]n?)(H)?"
+ < | (1 move-base-Halant) (3 =) | >)
+
+ ;; A syllable starting with an independent vowel.
+ ("V[Aa]?[Ss]?"
+ < | = * | > )
+
+ ("." =))
+ *)
+
+ ;; Move Halant on a base consonant to the tail.
+ (move-base-Halant
+ (cond
+ ("(([CR]n?H)*[CR]n?)(H)(R)"
+ (1 = *)
+ (4 =)
+ (3 =))
+ (".*"
+ = *)))
+
+ ;; Re-order post modifiers.
+ (reorder-post-base
+ ;; 12 3 4 5 67 8 9 10
+ ("((m)|(u)|(b)|(p))?((A)|(a))?((S)|(s))?$"
+ (2 =) (4 =) (10 =) (3 =) (5 =)
+ #x097E
+ (7 =) (9 =) (8))))
+
+;; The second stage is to reorder Reph and Mpre.
+(generator
+ (0
+ (cond
+ (" [NJ]([^ ]*) "
+ = *)
+ (" (x(..))([CRnH]*) "
+ | (3 = *) (2 otf:deva=rphf) |)
+ (" (x(..))([CRnH]*)(m?)([^y]*)y([^ ]*) "
+ | (4 =) (3 = *) (5 = *) (2 otf:deva=rphf) (6 = *) |)
+ (" ([CRnH][CRnH]*) "
+ = *)
+ (" ([CRnH][CRnH]*)(m?)([^y]*)y([^ ]*) "
+ | (2 =) (1 = *) (3 = *) (4 = *) |)
+ ("." =))
+ *))
+
+;; The third stage is to drive OTF tables. For the moment, we use
+;; the default LangSys, and try all GSUB/GPOS features except for the
+;; sequence followed by ZWNJ in which case try "nukt" and "haln"
+;; features only.
+(generator
+ (0
+ (cond
+ (" N([^ ]*) "
+ (1 otf:deva=nukt,haln))
+
+ (" J([^ ]*) "
+ (1 otf:deva))
+
+ (" ([^ ]*)(CH) "
+ (1 otf:deva=~rphf,*) (2 otf:deva=haln))
+
+ (" ([^ ]*) "
+ (1 otf:deva=~rphf,*))
+
+ ("."
+ \[ otf:deva=+ \] ))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; GUJR-OTF.flt -- Font Layout Table for Gujarati 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.
+
+;;; <li> GUJR-OTF.flt
+;;;
+;;; For Gujarati OpenType fonts to draw the Gujarati script.
+;;; Tested with padmaa-Medium-1.5.ttf <http://www.indictrans.org/>
+
+(font layouter gujr-otf nil
+ (font (nil nil unicode-bmp :otf=gujr=rphf)))
+
+(category
+ ;; C: general consonant
+ ;; R: RA
+ ;; V: independent vowel
+ ;; H: HALANT
+ ;; m: MATRA (pre)
+ ;; u: MATRA (above)
+ ;; b: MATRA (below)
+ ;; p: MATRA (post)
+ ;; A: vowel modifier (above)
+ ;; a: vowel modifier (post)
+ ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
+ ;; J: ZWJ (ZERO WIDTH JOINER)
+ ;; E: ELSE
+ ;;
+ (0x200C ?N) ; ZWNJ
+ (0x200D ?J) ; ZWJ
+ (0x0964 ?E) ; DANDA
+ (0x0965 ?E) ; DOUBLE DANDA
+ (0x0A80 0x0AFF ?E) ; ELSE
+ (0x0A81 ?A) ; SIGN CANDRABINDU
+ (0x0A82 ?A) ; SIGN ANUSVARA
+ (0x0A83 ?a) ; SIGN VISARGA
+ (0x0A85 0x0A94 ?V) ; LETTER AA .. LETTER AU
+ (0x0A95 0x0AB9 ?C) ; LETTER KA .. LETTER HA
+ (0x0AB0 ?R) ; LETTER RA
+ (0x0ABC ?n) ; SIGN NUKTA
+ (0x0ABE ?p) ; VOWEL SIGN AA (post)
+ (0x0ABF ?m) ; VOWEL SIGN I (pre)
+ (0x0AC0 ?p) ; VOWEL SIGN II (post)
+ (0x0AC1 0x0AC4 ?b) ; VOWEL SIGN U, UU, R, RR (below)
+ (0x0AC5 0x0AC8 ?u) ; VOWEL SIGN CANDRA E, E, AI (above)
+ (0x0AC9 0x0ACC ?p) ; VOWEL SIGN CANDRA O, O, AU (post)
+ (0x0ACD ?H) ; SIGN VIRAMA (HALANT)
+ (0x0AE0 0x0AE1 ?V) ; LETTER VOCALIC RR, LL
+ (0x0AE2 0x0AE3 ?b) ; VOWEL SIGN VOCALIC RR, LL (below)
+ (0x0AFF ?X) ; internal use
+ )
+
+;; Step 1 : Syllable identification, Reph and base consonant movements.
+(generator
+ (0
+ (cond
+ ;; A syllable ending with a vowel sign and/or a vowel modifier.
+ ("(([CR]n?H)*[CR]n?)([mubp][Aa]?|[Aa])"
+ < | (1 move-reph-vattu) (3 = *) | >)
+
+ ;; Forced Halant or half form.
+ ("(([CR]n?H)*[CR]n?)(H[NJ])"
+ < | (1 move-reph-vattu) (3 = =) | >)
+
+ ;; A syllable without a vowel sign nor a vowel modifier.
+ ("([CR]n?H)*[CR]n?H?"
+ < | move-reph-vattu | >)
+
+ ;; A syllable starting with an independent vowel.
+ ("V[Aa]?"
+ < | = * | >)
+
+ ("." =))
+ *)
+
+ ;; Move the leading RH and the Halant on the base consonant to
+ ;; appropriate positions.
+ ;; 0x0AFF indicates the destination of below-, above-, post Matras.
+ (move-reph-vattu
+ (cond
+ ;; Ending with Halnt. Immitate a forced Halant form.
+ ("(.*)(H)$"
+ (1 move-reph-vattu) (2 =) 0x200C)
+
+ ;; Both Reph and Vattu.
+ ;;1 23 4 5
+ ("(RH)(([CR]n?H)*[CR]n?)(H)(R)$"
+ (2 = *) (5 =) (4 =) 0x0AFF (1 = =))
+
+ ;; A special case of above.
+ ("(RH)(R)$"
+ (2 =) 0x0AFF (1 = =))
+
+ ;; Reph but no Vattu.
+ ("(RH)(([CR]n?H)*Cn?)$"
+ (2 = *) 0x0AFF (1 = =))
+
+ ;; No Reph but Vattu.
+ ("(Cn?(H[CR]n?)*)(H)(R)$"
+ (1 = *) (4 =) (3 =) 0x0AFF)
+
+ ;; Neither Reph nor Vattu.
+ (".*"
+ = * 0x0AFF))))
+
+;; Step 2 : Matra movements and OTF forms.
+(generator
+ (0
+ (cond
+ ;; 1 2 3 4 5 6
+ (" (RH)?([^X ]*)X(RH)?(m)?([bup])?([Aa])? "
+ |
+ (4 =)
+ (1 otf:gujr=~rphf,~blwf,*)
+ (2 otf:gujr=~rphf,*)
+ (5 =)
+ (3 otf:gujr=rphf)
+ (6 =)
+ |)
+
+ (" (RH)?([^X ]*)X(RH)?(HJ) "
+ |
+ (1 = =)
+ (2 otf:gujr=~rphf)
+ (3 otf:gujr=rphf)
+ (4 = =)
+ |)
+
+ (" (RH)?([^X ]*)X(RH)?(H)N "
+ |
+ (1 otf:gujr=~rphf,~blwf,*)
+ (2 otf:gujr=~rphf,*)
+ (3 otf:gujr=rphf)
+ (4 =)
+ |)
+
+ ("." =))
+ *))
+
+;; Step 3 : OTF substitutions and positionings.
+(generator
+ (0
+ (cond
+ (" (.*)J "
+ (1 otf:gujr=~rphf,~blwf,*))
+ (" ([^ ]*) "
+ (1 otf:gujr=~rphf,~blwf,~half,~haln,*))
+ ("."
+ [ otf:gujr=+ ]))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; GURU-OTF.flt -- Font Layout Table for Gurmukhi 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.
+
+;;; <li> GURU-OTF.flt
+;;;
+;;; For Gurmukhi OpenType fonts to draw the Punjabi script.
+;;; Designed for saab.otf (version 0.91).
+;;; <http://guca.sourceforge.net/typography/fonts/saab/index.shtml>
+
+(font layouter guru-otf nil
+ (font (nil nil unicode-bmp :otf=guru=vatu)))
+
+(category
+ ;; C: general consonant
+ ;; Y: post-base consonat (YA)
+ ;; R: below-base consonat (RA, VA, HA)
+ ;; n: NUKTA
+ ;; H: HALANT
+ ;; m: MATRA (pre)
+ ;; u: MATRA (above)
+ ;; b: MATRA (below)
+ ;; p: MATRA (post)
+ ;; A: vowel modifier (above)
+ ;; a: vowel modifier (post)
+ ;; V: independent vowel
+ ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
+ ;; J: ZWJ (ZERO WIDTH JOINER)
+ ;; E: ELSE
+ ;;
+ (0x200C ?N) ; ZWNJ
+ (0x200D ?J) ; ZWJ
+ (0x0964 ?E) ; DANDA
+ (0x0965 ?E) ; DOUBLE DANDA
+ (0x0A00 0x0A7F ?E) ; ELSE
+ (0x0A01 ?A) ; SIGN ADAK BINDI (above)
+ (0x0A02 ?A) ; SIGN BINDI (above)
+ (0x0A03 ?a) ; SIGN VISARGA (post)
+ (0x0A05 0x0A14 ?V) ; LETTER A .. LETTER AU
+ (0x0A15 0x0A38 ?C) ; LETTER KA .. LETTER SA
+ (0x0A2F ?Y) ; LETTER YA
+ (0x0A30 ?R) ; LETTER RA
+ (0x0A35 ?R) ; LETTER VA
+ (0x0A39 ?R) ; LETTER HA
+ (0x0A3C ?n) ; SIGN NUKTA
+ (0x0A3E ?p) ; VOWEL SIGN AA (post)
+ (0x0A3F ?m) ; VOWEL SIGN I (pre)
+ (0x0A40 ?p) ; VOWEL SIGN II (post)
+ (0x0A41 ?b) ; VOWEL SIGN U (below)
+ (0x0A42 ?b) ; VOWEL SIGN UU (below)
+ (0x0A47 ?u) ; VOWEL SIGN EE (above)
+ (0x0A48 ?u) ; VOWEL SIGN AI (above)
+ (0x0A4B ?u) ; VOWEL SIGN OO (above)
+ (0x0A4C ?u) ; VOWEL SIGN AU (above)
+ (0x0A4D ?H) ; SIGN VIRAMA (HALANT)
+ (0x0A59 0x0A5E ?C) ; LETTER KHHA .. LETTER FA
+ (0x0A70 ?A) ; TIPPI (above)
+ (0x0A7F ?X) ; internal use
+ )
+
+;; Step 1 : Syllable identification and Halant movement.
+(generator
+ (0
+ (cond
+ ;; A syllable ending with a vowel sign and/or a vowel modifier.
+ ("(([CRY]n?H)*[CRY]n?)([mubp][Aa]?|[Aa])"
+ < | (1 move-base-Halant) (3 =) | >)
+
+ ;; A syllable without a vowel sign nor a vowel modifier.
+ ("(([CRY]n?H)*[CRY]n?)(H)?"
+ < | move-base-Halant | >)
+
+ ;; A syllable starting with an independent vowel.
+ ("V[Aa]?"
+ < | = * | > )
+
+ ("." =))
+ *)
+
+ ;; Move Halant on the base consonant to the tail.
+ ;; 0x0A7F indicates the position for above- or below Matra.
+ (move-base-Halant
+ (cond
+ ("(([CRY]n?H)*[CRY]n?)(H)(Y)$"
+ (1 = *)
+ 0x0A7F
+ (4 =)
+ (3 =))
+ ("(([CRY]n?H)*[CRY]n?)(H)(R)$"
+ (1 = *)
+ (4 =)
+ (3 =)
+ 0x0A7F)
+ ("([CRY]n?H)*[CRY]n?H$"
+ = * 0x200C)
+ (".*"
+ = * 0x0A7F))))
+
+;; Step 2 : Move Matra.
+(generator
+ (0
+ (cond
+ ;; 1 2 3 4 5 6
+ (" ([CRYnH]*)X(YH)?(m)?([ub])?(p)?([Aa])? "
+ | (3 =) (1 = *) (4 =) (2 = =) (5 =) (6 =) |)
+ ("." =))
+ *))
+
+;; Step 3 : Drive OTF tables.
+(generator
+ (0
+ (cond
+ (" ([^ ]*H)N "
+ (1 otf:guru=nukt))
+ (" ([^ ]*) "
+ (1 otf:guru=nukt,blwf,pstf,vatu,pres,abvs,blws,psts))
+ ((0x0A71)
+ otf:guru)
+ ("."
+ [ otf:guru=+ ] ))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; HEBR-FF.flt -- Font Layout Table for Hebrew fonts (Unicode encoding)
+;; Copyright (C) 2003, 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.
+
+;;; <li> HEBR-FF.flt
+;;;
+;;; For Hebrew fonts of Unicode encoding to draw the Hebrew script.
+;;; This is for such fonts that do not require an explicit combining
+;;; code because accents and points have negative lbearing.
+
+(font layouter hebr-ff nil
+ (font (nil nil unicode-bmp :lang=he,yi)))
+
+(category
+ (0x0590 0x05ff ?h) ; hebrew
+ )
+
+(generator
+ (0
+ (cond
+ ((0x05d9 0x05b4) 0xfb1d)
+ ((0x05e9 0x05c1) 0xfb2a)
+ ((0x05e9 0x05c2) 0xfb2b)
+ ((0x05e9 0x05bc 0x05c1) 0xfb2c)
+ ((0x05e9 0x05bc 0x05c2) 0xfb2d)
+ ((0x05d0 0x05b7) 0xfb2e)
+ ((0x05d0 0x05b8) 0xfb2f)
+ ((0x05d0 0x05bc) 0xfb30)
+ ((0x05d1 0x05bc) 0xfb31)
+ ((0x05d2 0x05bc) 0xfb32)
+ ((0x05d3 0x05bc) 0xfb33)
+ ((0x05d4 0x05bc) 0xfb34)
+ ((0x05d5 0x05bc) 0xfb35)
+ ((0x05d6 0x05bc) 0xfb36)
+ ((0x05d8 0x05bc) 0xfb38)
+ ((0x05d9 0x05bc) 0xfb39)
+ ((0x05da 0x05bc) 0xfb3a)
+ ((0x05db 0x05bc) 0xfb3b)
+ ((0x05dc 0x05bc) 0xfb3c)
+ ((0x05de 0x05bc) 0xfb3e)
+ ((0x05e0 0x05bc) 0xfb40)
+ ((0x05e1 0x05bc) 0xfb41)
+ ((0x05e3 0x05bc) 0xfb43)
+ ((0x05e4 0x05bc) 0xfb44)
+ ((0x05e6 0x05bc) 0xfb46)
+ ((0x05e7 0x05bc) 0xfb47)
+ ((0x05e8 0x05bc) 0xfb48)
+ ((0x05e9 0x05bc) 0xfb49)
+ ((0x05ea 0x05bc) 0xfb4a)
+ ((0x05d5 0x05b9) 0xfb4b)
+ ((0x05d1 0x05bf) 0xfb4c)
+ ((0x05db 0x05bf) 0xfb4d)
+ ((0x05e4 0x05bf) 0xfb4e)
+ ;; The font FreeSerif.ttf does not have this glyph?!?
+ ;; ((0x05b0) 0x05b4 Bc-13Bc 0x05b4)
+ ("." =))
+ *))
+
+(category
+ (0x0590 0x05af ?p) ; accents
+ (0x05d0 0x05ff ?h) ; letters
+ (0xfb1d 0xfb4e ?h) ; presentation forms
+ (0x05b0 0x05c4 ?p) ; points
+ (0x05be ?h) ; punctuation
+ (0x05c0 ?h) ; punctuation
+ (0x05c3 ?h) ; punctuation
+ )
+
+(generator
+ (0
+ (cond
+ ("(h)(p+)"
+ <
+ = *
+ >)
+ ("." = *))
+ *)
+ )
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; HEBR.flt -- Font Layout Table for Hebrew font (Unicode encoding)
+;; Copyright (C) 2003, 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.
+
+;;; <li> HEBR.flt
+;;;
+;;; For Hebrew fonts of Unicode encoding to draw Hebrew script. This
+;;; is for such a font that requires explicit combining code to draw
+;;; accents and points.
+
+(font layouter hebr nil
+ (font (nil freesans unicode-bmp)))
+
+(category
+ (0x0590 0x05ff ?h) ; hebrew
+ )
+
+(generator
+ (0
+ (cond
+ ((0x05d9 0x05b4) 0xfb1d)
+ ((0x05e9 0x05c1) 0xfb2a)
+ ((0x05e9 0x05c2) 0xfb2b)
+ ((0x05e9 0x05bc 0x05c1) 0xfb2c)
+ ((0x05e9 0x05bc 0x05c2) 0xfb2d)
+ ((0x05d0 0x05b7) 0xfb2e)
+ ((0x05d0 0x05b8) 0xfb2f)
+ ((0x05d0 0x05bc) 0xfb30)
+ ((0x05d1 0x05bc) 0xfb31)
+ ((0x05d2 0x05bc) 0xfb32)
+ ((0x05d3 0x05bc) 0xfb33)
+ ((0x05d4 0x05bc) 0xfb34)
+ ((0x05d5 0x05bc) 0xfb35)
+ ((0x05d6 0x05bc) 0xfb36)
+ ((0x05d8 0x05bc) 0xfb38)
+ ((0x05d9 0x05bc) 0xfb39)
+ ((0x05da 0x05bc) 0xfb3a)
+ ((0x05db 0x05bc) 0xfb3b)
+ ((0x05dc 0x05bc) 0xfb3c)
+ ((0x05de 0x05bc) 0xfb3e)
+ ((0x05e0 0x05bc) 0xfb40)
+ ((0x05e1 0x05bc) 0xfb41)
+ ((0x05e3 0x05bc) 0xfb43)
+ ((0x05e4 0x05bc) 0xfb44)
+ ((0x05e6 0x05bc) 0xfb46)
+ ((0x05e7 0x05bc) 0xfb47)
+ ((0x05e8 0x05bc) 0xfb48)
+ ((0x05e9 0x05bc) 0xfb49)
+ ((0x05ea 0x05bc) 0xfb4a)
+ ((0x05d5 0x05b9) 0xfb4b)
+ ((0x05d1 0x05bf) 0xfb4c)
+ ((0x05db 0x05bf) 0xfb4d)
+ ((0x05e4 0x05bf) 0xfb4e)
+ ("." =))
+ *))
+
+(category
+ (0x0590 0x05af ?p) ; accents
+ (0x05d0 0x05ff ?h) ; letters
+ (0xfb1d 0xfb4e ?h) ; presentation forms
+ (0x05b0 0x05c4 ?p) ; points
+ (0x05be ?h) ; punctuation
+ (0x05c0 ?h) ; punctuation
+ (0x05c3 ?h) ; punctuation
+ )
+
+(generator
+ (0
+ (cond
+ ("(h)(p+)"
+ <
+ (1 =)
+ (2 ("." Bc.Bc =) *)
+ >)
+ ("." = *))
+ *)
+ )
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; KHMR-ANLONG.flt -- Font Layout Table for Khmer (Anlong font)
+;; Copyright (C) 2003, 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.
+
+;;; <li> KHMR-ANLONG.flt
+;;;
+;;; For the font ANLONG.TTF to draw Khmer script. The font is
+;;; available at:
+;;; <ul>
+;;; <li> infopage: http://www.cambodia.org/fonts/index.html#dl
+;;; <li> download: http://www.cambodia.org/fonts/khmerfnt.zip
+;;; </ul>
+
+(font layouter khmr-anlong nil
+ (font (nil anlongvill\ khek apple-roman)))
+
+(category
+ ;; C: CONSONANT (except R and KHMER LETTER LA)
+ ;; R: KHMER LETTER RO
+ ;; c: KHMER SIGN COENG (function as virama)
+ ;; V: INDEPENDENT VOWEL (except Q)
+ ;; Q: CONJUNCT VOWEL QU, RY, QE
+ ;; v: DEPENDENT VOWEL
+ ;; s: SHIFT
+ ;; S: COMBINING SIGN
+ ;; E: ELSE
+ (0x1780 0x17A0 ?C)
+ (0x1789 ?N) ; exception of C (NYO)
+ (0x179A ?R) ; exception of C (RO)
+ (0x17A1 ?E) ; ELSE
+ (0x17A2 ?C)
+ (0x17A3 0x17A4 ?E) ; ELSE
+ (0x17A5 0x17B3 ?V)
+ (0x17A7 ?Q)
+ (0x17AB ?Q)
+ (0x17AF ?Q)
+ (0x17B2 ?C)
+ (0x17B4 0x17FF ?E)
+ (0x17B6 0x17C5 ?v)
+ (0x17C6 ?S)
+ (0x17C9 0x17CA ?s)
+ (0x17CB 0x17D3 ?S)
+ (0x17D2 ?c))
+
+(generator
+ (0
+ (cond
+ ("([CNR]c[CNRQ])c(R)(s?v?S?)"
+ | (1 with-conjunct) (2 Bl.Br 0xEE) 0x00 (3 vowel-and-sign *) |)
+ ("([CNR]c[CNRQ])(s?v?S?)"
+ | (1 with-conjunct) 0x00 (2 vowel-and-sign *) |)
+ ("([CNR])(s?v?S?)"
+ | (1 independent) (2 vowel-and-sign *) |)
+ ("."
+ independent))
+ *)
+
+ (with-conjunct
+ (cond
+ ("(N)c(CRQ)"
+ (1 0x8B)
+ (2 conjunct))
+ ("(N)c(N)"
+ (1 0x8B)
+ (2 Br.Bl 0xDD))
+ ((0x17B3 0x17D2 0x1799)
+ 0xB8)
+ ("(.)c(.)"
+ (1 independent)
+ (2 conjunct))))
+
+ (independent
+ (cond
+ ((range 0x1780 0x1788) 0x82)
+ ((0x1789) 0x8C)
+ ((range 0x178A 0x1794) 0x91)
+ ((0x1795) 0x9F)
+ ((range 0x1796 0x179C) 0xA1)
+ ((0x179D) < 0x84 cr-<cc 0xFA >)
+ ((0x179E) < 0x9B cr-<cc 0xFA >)
+ ((range 0x179F 0x17A2) 0xA8)
+ ((0x17A3) 0xAB)
+ ((0x17A4) < 0xAB Br>Bl 0xBA >)
+ ((range 0x17A5 0x17A7) 0xAC)
+ ((0x17A8) < 0xAE Br.Bl 0xF4 >)
+ ((0x17A9) 0xB9)
+ ((range 0x17AA 0x17B1) 0xAF)
+ ((0x17B2) 0xB7) ; same as 0xB6
+ ((0x17B3) < 0xAE tr<20bl 0xF8 >)
+ ((0x17B4) < 0xBA tr+bl 0xF5 >)
+ ((0x17B5) 0xBA)
+ ((0x17B6) 0xBA)
+ ((0x17B7) 0xBB)
+ ((0x17B8) 0xBD)
+ ((0x17B9) 0xBF)
+ ((0x17BA) 0xC1)
+ ((0x17BB) 0xC3)
+ ((0x17BC) 0xC5)
+ ((0x17BD) 0xC7)
+ ((0x17BE) < 0xCD 0x20 0xBD >)
+ ((0x17BF) < 0xCD 0x20 Br<Bl 0xC9 >)
+ ((0x17C0) < 0xCD 0x20 Br<Bl 0xCB >)
+ ((range 0x17C1 0x17C3) 0xCD)
+ ((0x17C4) < 0xCD 0x20 Br<Bl 0xBA >)
+ ((0x17C5) < 0xCD 0x20 Br<Bl 0xD0 >)
+ ((0x17C6) 0xD1)
+ ((0x17C7) 0xD3)
+ ((0x17C8) 0x3A)
+ ((0x17C9) 0xF6)
+ ((range 0x17CA 0x17CB) 0xF4)
+ ((0x17CC) 0xF8)
+ ((0x17CD) 0xF7)
+ ((0x17CE) < 0x20 tc+80bc 0x2B >)
+ ((range 0x17CF 0x17D0) 0xF9)
+ ((0x17D1) < 0x20 tc+80bc 0x5F >)
+ ((0x17D2) < 0x20 bc-tc 0x5E >)
+ ((0x17D3) 0xD1)
+ ((range 0x17D4 0x17D5) 0xFC)
+ ((0x17D6) 0xFB)
+ ((0x17D7) 0xFE)
+ ((0x17D8) < 0xFC 0xA6 0xFC >)
+ ((0x17D9) < 0x30 cr<10cl 0xD2 >)
+ ((0x17DA) 0x8D)
+ ((0x17DB) < 0xFF br->10tl 0xC3 >)
+ ((0x17DC) 0x53)
+ ((range 0x17E0 0x17E9) 0x30)))
+
+ (conjunct
+ (cond
+ ((0x1780) br-tl 0xD4)
+ ((0x1781) br-tl 0xD5)
+ ((0x1782) br-tl 0xD6)
+ ((0x1783) Br.Bl 0xD7)
+ ((0x1784) br-tl 0xD8)
+ ((0x1785) br-tl 0xD9)
+ ((0x1786) br-tl 0xDA)
+ ((0x1787) br-tl 0xDB)
+ ((0x1788) Br.Bl 0xDC)
+ ((0x1789) br-tl 0xDE)
+ ((0x178A) br-tl 0xE3)
+ ((0x178B) br-tl 0xDF)
+ ((0x178C) br-tl 0xE0)
+ ((0x178D) Br.Bl 0xE1)
+ ((0x178E) br-tl 0xE2)
+ ((0x178F) br-tl 0xE3)
+ ((0x1790) br-tl 0xE4)
+ ((0x1791) br-tl 0xE5)
+ ((0x1792) br-tl 0xE6)
+ ((0x1793) br-tl 0xE7)
+ ((0x1794) Br.Bl 0xE8)
+ ((0x1795) br-tl 0xE9)
+ ((0x1796) br-tl 0xEA)
+ ((0x1797) br-tl 0xEB)
+ ((0x1798) br-tl 0xEC)
+ ((0x1799) Br.Bl 0xED)
+ ((0x179A) Bl+Bc 0xEE)
+ ((0x179B) br-tl 0xEF)
+ ((0x179C) br-tl 0xF0)
+ ((0x179D) br-tl 0xD6 br.bl 0xFA)
+ ((0x179E) Br.Bl 0xE8 br.bl 0xFA)
+ ((0x179F) Br.Bl 0xF1)
+ ((0x17A0) br-tl 0xF2)
+ ((0x17A2) br-tl 0xF3)
+ ((0x17A7) br-tl 0xD5 br.bl 0xC4) ; ugly compromise
+ ((0x17AB) br-tl 0xA1) ; ugly compromise
+ ((0x17AF) br-tl 0xB4))) ; ugly compromise
+
+ (vowel-and-sign
+ (cond
+ ((0x17B6) Br-Bl 0xBA)
+ ((0x17B7) tr+bl 0xBB)
+ ((0x17B8) tr+bl 0xBD)
+ ((0x17B9) tr+bl 0xBF)
+ ((0x17BA) tr+bl 0xC1)
+ ((0x17BB) br+tr 0xC3)
+ ((0x17BC) br-tl 0xC5)
+ ((0x17BD) br-tl 0xC7)
+ ((0x17BE) tr+bl 0xBD Bl.Br 0xCD)
+ ((0x17BF) Br.Bl 0xC9 Bl.Br 0xCD)
+ ((0x17C0) Br.Bl 0xCB Bl.Br 0xCD)
+ ((0x17C1) Bl.Br 0xCD)
+ ((0x17C2) Bl.Br 0xCE)
+ ((0x17C3) Bl.Br 0xCF)
+ ((0x17C4) Bl.Br 0xCD Br.Bl 0xBA)
+ ((0x17C5) Bl.Br 0xCD Br.Bl 0xD0)
+ ((0x17C6) tr+bl 0xD1)
+ ((0x17C7) Br.Bl 0xD3)
+ ((0x17C8) Br.Bl 0x3A)
+ ((0x17C9) tr+bl 0xF6)
+ ((0x17CA) tr+bl 0xF4)
+ ((0x17CB) tr+bl 0xF5)
+ ((0x17CC) tr+bl 0xF8)
+ ((0x17CD) tr+bl 0xF7)
+ ((0x17CE) tr+>br 0x2B)
+ ((0x17CF) tr+bl 0xF9)
+ ((0x17D0) tr+bl 0xFA))))
+
+(category
+ ;; WIDTH HEIGHT DEPTH
+ ;; N: normal normal normal
+ ;; T: normal high normal
+ ;; W: wide normal normal
+ ;; n: normal normal deep
+ ;; w: wide normal deep
+ ;; V: right part of KHMER VOWEL SIGN YA and IE
+ ;; x: separator
+ (0x00 0xFF ?N)
+ (0x00 ?x)
+ (0x85 ?W)
+ (0x89 ?T)
+ (0x8A 0x8B ?W)
+ (0x8C ?w)
+ (0x91 0x92 ?T)
+ (0x93 0x94 ?W)
+ (0x97 ?T)
+ (0x9F ?T)
+ (0xA4 ?W)
+ (0xA6 ?W)
+ (0xA8 0xA9 ?W)
+ (0xAA ?w)
+ (0xAC ?T)
+ (0xAD ?w)
+ (0xAF ?T)
+ (0xB0 0xB3 ?n)
+ (0xB5 ?n)
+ (0xB6 0xB7 ?T)
+ (0xB8 ?w)
+ (0xC9 ?V)
+ (0xCB ?V)
+ (0xD7 ?w)
+ (0xDC 0xDE ?w)
+ (0xE1 0xE2 ?w)
+ (0xE8 ?w)
+ (0xED ?w)
+ (0xF1 ?w))
+
+(generator
+ (0
+ (cond
+ (" ([^ x]*)x(V)([^ ]*) "
+ < (1 = *) (2 (cond ((0xC9) 0xCA) ((0xCB) 0xCC))) (3 = *) >)
+ (" ([^ x]*)x([^ ]*) "
+ < (1 = *) (2 = *) >)
+ (" (T[^V]*)(V)([^ ]*) "
+ < (1 = *) (2 (cond ((0xC9) Br.Bl 0xCA) ((0xCB) Br.Bl 0xCC))) (3 = *) >)
+ (" ([wn])(V)([^ ]*) "
+ < (1 = *) (2 (cond ((0xC9) 0xCA) ((0xCB) 0xCC))) (3 = *) >)
+ (" ([^ ]*) "
+ < (1 = *) >)
+ ("."
+ =))
+ *))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; KHMR-MULE.flt -- Font Layout Table for Khmer (mule font)
+;; Copyright (C) 2003, 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.
+
+;;; <li> KHMR-MULE.flt
+;;;
+;;; For Khmer fonts of mule encoding to draw Khmer script. The font is
+;;; available at: <ftp://ftp.m17n.org/m17n-fonts/>
+
+(font layoutre khmr-mule nil
+ (font (mulekhmer-1)))
+
+(category
+ (0x1780 0x17A2 ?C) ;; C: CONSONANT (except R and KHMER LETTER LA)
+ (0x179A ?R) ;; R: KHMER LETTER RO
+ (0x17A1 ?E) ;; E: ELSE
+ (0x17A3 0x17A4 ?E)
+ (0x17A5 0x17B3 ?V) ;; V: INDEPENDENT VOWEL (except Q)
+ (0x17A7 ?Q) ;; Q: CONJUNCT VOWEL QU, RY, QE
+ (0x17AB ?Q)
+ (0x17AF ?Q)
+ (0x17B2 ?C)
+ (0x17B4 0x17FF ?E)
+ (0x17B6 0x17C5 ?v) ;; v: DEPENDENT VOWEL
+ (0x17C6 ?S) ;; S: COMBINING SIGN
+ (0x17C9 0x17CA ?s) ;; s: SHIFT
+ (0x17CB 0x17D3 ?S)
+ (0x17D2 ?c) ;; c: KHMER SIGN COENG (function as virama)
+ )
+
+(generator
+ (0
+ (cond
+ ("[CR](c[CRQ])?(cR)?s?v?S?"
+ (cond
+ (".(c[CRQ])(cR)?s?v?S?"
+ < |
+ ("(.)c(.)(c(.))?" (1 independent) (2 conjunct) (4 conjunct))
+ vowel-and-sign *
+ | > )
+ ("[CR][svS][svS]*" < | independent vowel-and-sign * | > )
+ ("." independent)))
+ ("." independent))
+ *)
+
+ (independent
+ (cond
+ ((0x17D8) 0xD4 0x9B 0xD4)
+ ((range 0x1780 0x17FF) 0x80)))
+
+ (conjunct
+ (cond
+ ((0x1783) Br.Bc 0x43)
+ ((0x1788) Br.Bc 0x48)
+ ((0x178D) Br.Bc 0x4D)
+ ((0x1794) Br.Bc 0x54)
+ ((0x1799) Br.Bc 0x59)
+ ((0x179A) Bl<Bc 0x5A)
+ ((range 0x179E 0x179F) Br.Bc 0x5E)
+ ((range 0x1780 0x17AF) bc-tc 0x40)
+ ))
+
+ (vowel-and-sign
+ (cond
+ ((0x17B6) Br.Bl 0xB6)
+ ((0x17BB) br+tr 0xBB)
+ ((0x17BC) bc-tc 0xBC)
+ ((0x17BD) bc-tc 0xBD)
+ ((0x17BE) tc.bc 0xB8 Bl.Br 0xC1)
+ ((0x17BF) Bl.Br 0xC1 Br.Bc 0x04)
+ ((0x17C0) Bl.Br 0xC1 Br.Bc 0x05)
+ ((0x17C1) Bl.Br 0xC1)
+ ((0x17C2) Bl.Br 0xC2)
+ ((0x17C3) Bl.Br 0xC3)
+ ((0x17C4) Bl.Br 0xC1 Br.Bl 0xB6)
+ ((0x17C5) Bl.Br 0xC1 Br.Bl 0x2D)
+ ((0x17C9) tr+br 0xC9)
+ ((0x17CB) tr+br 0xCB)
+ ((0x17CE) tr+br 0xCE)
+ ((range 0x17B7 0x17D0) tc+bc 0xB7))))
+
+(category
+ (0x00 0xFF ?E)
+ (0x04 0x05 ?V)
+ (0x2D ?V)
+ (0xB6 ?V)
+ (0xC6 ?C)
+ (0xCB ?R)
+ (0xCC 0xCD ?C)
+ (0xCE ?R)
+ (0xCF 0xD0 ?C)
+ (0xD2 ?E))
+
+(generator
+ (0
+ (cond
+ ("VC" = tc>20bc =)
+ ("VR" = tr<20br =)
+ ("." =))
+ *))
+
+(category
+ (0x00 0xFF ?E) ;; E: else
+ (0x40 0x6F ?c) ;; c: conjunct CONSONANT
+ (0x49 ?n) ;; n: conjunct KHMER LETTER NYO
+ (0x59 ?y) ;; y: conjunct KHMER LETTER YO
+ (0x80 0xA2 ?C) ;; C: first CONSONANT
+ (0x89 ?N) ;; N: first KHMER LETTER NYO
+ (0xB2 ?Q) ;; Q: KHMER INDEPENDENT VOWEL QOO TYPE TWO
+ (0xC9 0xD1 ?S))
+
+(generator
+ (0
+ (cond
+ (" [^ ][^ ][^ ]* "
+ < =
+ (cond
+ ("N[cny]" 0x27 ((0x49) bc-tc 0x28) =)
+ ("Qy" 0x2B))
+ = * > )
+ ("[^ ]*" = * ))
+ *))
+
+(category
+ (0x00 0x7F ?n) ;; n: width:normal height:normal depth:deep
+ (0x04 0x05 ?V) ;; V: right part of KHMER VOWEL SIGN YA and IE
+ (0x26 ?w) ;; w: width:wide height:normal depth:deep
+ (0x27 ?W) ;; W: width:wide height:normal depth:normal
+ (0x28 ?w)
+ (0x2A ?w)
+ (0x2C ?N) ;; N: width:normal height:normal depth:normal
+ (0x43 ?w)
+ (0x48 0x49 ?w)
+ (0x4D 0x4E ?w)
+ (0x5A ?r) ;; r: conjunct KHMER LETTER RO
+ (0x60 ?w)
+ (0x80 0xFF ?N)
+ (0x83 ?W)
+ (0x84 ?T) ;; T: width:normal height:high depth:normal
+ (0x87 ?T)
+ (0x88 0x89 ?W)
+ (0x8A 0x8B ?T)
+ (0x8D 0x8E ?W)
+ (0x90 ?T)
+ (0x95 ?T)
+ (0x99 ?W)
+ (0x9B ?W)
+ (0x9F 0xA0 ?W)
+ (0xA6 ?W))
+
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ <
+ (1
+ (cond
+ ("(Wnr)([^V]*)(V)?(.*)" = *)
+ ("(Tnr)([^V]*)(V)?(.*)"
+ (1 = = ((0x5A) Bl<Bc 0x20) =) (2 = *) (3 high-deep-YA-IE =) (4 = *))
+ ("(..r)([^V]*)(V)?(.*)"
+ (1 = = ((0x5A) Bl<Bc 0x20) =) (2 = *) (3 deep-YA-IE =) (4 = *))
+ ("(T[nw][^V]*)(V)?(.*)"
+ (1 = *) (2 high-deep-YA-IE =) (3 = *))
+ ("(.[nw][^V]*)(V)?(.*)"
+ (1 = *) (2 deep-YA-IE =) (3 = *))
+ ("(T^V*)(V)?(.*)"
+ (1 = *) (2 high-YA-IE =) (3 = *))
+ (".*" = *)))
+ >)
+ ("[^ ]*" = *))
+ *)
+
+ (deep-YA-IE
+ ((range 0x04 0x05) Br.Bc 0x24))
+
+ (high-deep-YA-IE
+ ((range 0x04 0x05) Br.Bc 0x34))
+
+ (high-YA-IE
+ ((range 0x04 0x05) Br.bc 0x14)))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; KHMR-OTF.flt -- Font Layout Table for Khmer OpenType fonts
+;; Copyright (C) 2005, 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.
+
+;;; <li> KHMR-OTF.flt
+;;;
+;;; For Khmer OpenType fonts to draw Khmer.
+;;; A Font is available from
+;;; <http://www.khmeros.info/drupal/?q=en/download/fonts>.
+
+(font layouter khmr-otf nil
+ (font (nil nil unicode-bmp :otf=khmr=pres)))
+
+(category
+ ;; E : else
+ ;; C : consonant & independent vowel
+ ;; R : RO
+ ;; r : ROBAT
+ ;; m : vowel sign (pre)
+ ;; b : vowel sign (below)
+ ;; a : vowel sign (above)
+ ;; A : vowel sign (two-part, above)
+ ;; p : vowel sign (post)
+ ;; P : vowel sign (two-part, post)
+ ;; s : sign (above)
+ ;; S : sign (post)
+ ;; c : consonant shifter
+ ;; H : COENG
+ ;; N : ZERO WIDTH NON-JOINER
+ ;; J : ZERO WIDTH JOINER
+ (0x1780 0x17FF ?E)
+ (0x19E0 0x19FF ?E)
+ (0x1780 0x17B3 ?C)
+ (0x179A ?R)
+;; (0x17A3 0x17B3 ?V)
+ (0x17B6 ?p)
+ (0x17B7 0x17BA ?a)
+ (0x17BB 0x17BD ?b)
+ (0x17BE ?A)
+ (0x17BF 0x17C0 ?P)
+ (0x17C1 0x17C3 ?m)
+ (0x17C4 0x17C5 ?P)
+ (0x17C6 ?s)
+ (0x17C7 0x17C8 ?S)
+ (0x17C9 0x17CA ?c)
+ (0x17CB 0x17D1 ?s)
+ (0x17CC ?r)
+ (0x17D2 ?H)
+ (0x17D3 ?s)
+ (0x17DD ?s)
+ (0x200C ?N)
+ (0x200D ?J)
+ )
+
+;; Generic syllable pattern is as follows.
+;; [CR](r|N?c)?(HCr?)*(HR)?(HCr?)*[NJ]?(m|b|a|A|p|P)?s*S?(H[CR])?
+
+;; Step 0.
+;; Move m to the beginning.
+;; Split A and P.
+;; Exchange the order of pP and s.
+;; Move HR before the base.
+
+(generator
+ (0
+ (cond
+
+ ;; pre vowel sign
+ ;;1 2 3 4 5 67 8 9 10
+ ("([CR](r|N?c)?(HCr?)*)(HR(r)?)?((HCr?)*[NJ]?)(m)(s*S?(H[CR])?)"
+ < |
+ (8 =)
+ (4 = =)
+ (1 = *)
+ (5 =)
+ (6 = *)
+ (9 = *)
+ | > )
+
+ ;; two-part above vowel sign
+ ;;1 2 3 4 5 67 8
+ ("([CR](r|N?c)?(HCr?)*)(HR(r)?)?((HCr?)*[NJ]?As*S?(H[CR])?)"
+ < |
+ 0x17C1
+ (4 = =)
+ (1 = *)
+ (5 =)
+ (6 = *)
+ | > )
+
+ ;; post vowel sign
+ ;;1 2 3 4 5 67 8 9 10 11
+ ("([CR](r|N?c)?(HCr?)*)(HR(r)?)?((HCr?)*[NJ]?)(p)(s*)(S?(H[CR])?)"
+ < |
+ (4 = =)
+ (1 = *)
+ (5 =)
+ (6 = *)
+ (9 = *)
+ (8 =)
+ (10 = *)
+ | > )
+
+ ;; two-part post vowel sign
+ ;;1 2 3 4 5 67 8 9 10 11
+ ("([CR](r|N?c)?(HCr?)*)(HR(r)?)?((HCr?)*[NJ]?)(P)(s*)(S?(H[CR])?)"
+ < |
+ 0x17C1
+ (4 = =)
+ (1 = *)
+ (5 =)
+ (6 = *)
+ (9 = *)
+ (8 =)
+ (10 = *)
+ | > )
+
+ ;; other vowel signs or no vowel sign
+ ;;1 2 3 4 5 67 8
+ ("([CR](r|N?c)?(HCr?)*)(HR(r)?)?((HCr?)*[NJ]?[b|a]?s*S?(H[CR])?)"
+ < |
+ (4 = =)
+ (1 = *)
+ (5 =)
+ (6 = *)
+ | > )
+
+ ("." =))
+ *))
+
+;; Now a syllable looks like below.
+;; m?(HR)?[CR](r|N?c)?(HCr?)*[NJ]?(b|a|A)?s*(p|P)?S?(H[CR])?
+
+;; Step 1.
+;; Set the form of consonant shifter.
+
+(generator
+ (0
+ (cond
+ ;; shifter + above vowel sign without ZWNJ
+ ;; Shifter take blwf. HR takes pref. HC's take blwf or pstf.
+ ;; 1 2 3 4 5 6 7 8
+ (" (m)?(HR)?([CR]c(HCr?)*(N|J)?(a|A))(s*S?)(H[CR])? "
+ |
+ (1 =)
+ (2 otf:khmr=pref+)
+ (3 otf:khmr=blwf,abvf,pstf+)
+ (7 = *)
+ (8 otf:khmr=blwf,pstf+)
+ | )
+
+ ;; shifter + ZWNJ + above vowel sign, or, shifter without above vowel sign
+ ;; Shifter stays above. HR takes pref. HC's take blwf or pstf.
+ ;; 1 2 3 45 6 7 8 9 10 11
+ (" (m)?(HR)?([CR]N?c)((HCr?)*)([NJ]?[ba]?)(A)?(s*p?)(P)?(S)?(H[CR])? "
+ |
+ (1 =)
+ (2 otf:khmr=pref+)
+ (3 = *)
+ (4 otf:khmr=blwf,pstf+)
+ (6 = *)
+ (7 otf:khmr=abvf+)
+ (8 = *)
+ (9 otf:khmr=pstf+)
+ (10 =)
+ (11 otf:khmr=blwf,pstf+)
+ | )
+
+ ;; no shifter
+ ;; 1 2 3 45 6 7 8 9 10 11
+ (" (m)?(HR)?([CR]r?)((HCr?)*)([NJ]?[ba]?)(A)?(s*p?)(P)?(S)?(H[CR])? "
+ |
+ (1 =)
+ (2 otf:khmr=pref+)
+ (3 = *)
+ (4 otf:khmr=blwf,pstf+)
+ (6 = *)
+ (7 otf:khmr=abvf+)
+ (8 = *)
+ (9 otf:khmr=pstf+)
+ (10 =)
+ (11 otf:khmr=blwf,pstf+)
+ | )
+
+ ("." =))
+ *))
+
+;; Now a syllable looks like below. ~ characters are OTF feature applied.
+;; m?(HR)?[CR](r|c)?(HCr?)*[NJ]?(b|a|A)?s*(p|P)?S?(H[CR])?
+;; ~~ ~~ ~ ~~~~ ~ ~ ~~~~~
+
+;; Step 2.
+;; Concatenate adjacent Khmer syllables.
+;; Remove J. Retain N to prevent ligature.
+
+(generator
+ (0
+ (cond
+ (" ")
+ ("J")
+ ("." =))
+ *))
+
+;; Step 3.
+;; Apply other OTF features.
+
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ (1 otf:khmr=pres,blws,abvs,psts,clig))
+ ("."
+ [ otf:khmr=+ ]))
+ *))
+
+;; Step 4.
+;; Remove N to clean up.
+(generator
+ (0
+ (cond
+ ("N")
+ ("." =))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; 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.
+
+;;; <li> KNDA-OTF.flt
+;;;
+;;; For Kannada OpenType fonts to draw Kannada.
+;;; Designed for Sampige.ttf <http://kannada.sourceforge.net/>
+
+(font layouter knda-otf nil
+ (font (nil nil unicode-bmp :otf=knda=rphf)))
+
+(category
+ ;; C: general consonant
+ ;; R: no below-base consonat (RRA, NNNA, LLLA)
+ ;; r: RA
+ ;; H: HALANT
+ ;; u: MATRA (above)
+ ;; p: MATRA (post)
+ ;; t: MATRA (two-part)
+ ;; T: MATRA (three-part)
+ ;; a: vowel modifier (post)
+ ;; V: independent vowel
+ ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
+ ;; J: ZWJ (ZERO WIDTH JOINER)
+ ;; E: ELSE
+ ;;
+ (0x200C ?N) ; ZWNJ
+ (0x200D ?J) ; ZWJ
+ (0x0964 ?E) ; DANDA
+ (0x0965 ?E) ; DOUBLE DANDA
+ (0x0C80 0x0CFF ?E) ; ELSE
+ (0x0C82 ?a) ; SIGN ANUSVARA
+ (0x0C83 ?a) ; SIGN VISARGA
+ (0x0C85 0x0C94 ?V) ; LETTER A .. LETTER AU
+ (0x0C95 0x0CB9 ?C) ; LETTER KA .. LETTER HA
+ (0x0CB0 ?r) ; LETTER RA
+ (0x0CBC ?n) ; SIGN NUKTA
+ (0x0CBD ?E) ; SIGN AVAGRAHA
+ (0x0CBE ?p) ; VOWEL SIGN AA (post)
+ (0x0CBF ?u) ; VOWEL SIGN I (above)
+ (0x0CC0 ?t) ; VOWEL SIGN II (two-part)
+ (0x0CC1 0x0CC4 ?p) ; VOWEL SIGN U, UU, R, RR (post)
+ (0x0CC6 ?u) ; VOWEL SIGN E (above)
+ (0x0CC7 0x0CCA ?t) ; VOWEL SIGN EE, AI, O (two-part)
+ (0x0CCB ?T) ; VOWEL SIGN OO (three-part)
+ (0x0CCC ?u) ; VOWEL SIGN AU (above)
+ (0x0CCD ?H) ; SIGN VIRAMA (HALANT)
+ (0x0CD5 ?l) ; LENGTH MARK (length post)
+ (0x0CD6 ?l) ; AI LENGTH MARK (length post)
+ (0x0CDE ?C) ; LETTER FA (LLLA)
+ (0x0CE0 0x0CE1 ?V) ; LETTER VOCALIC RR, LL
+ (0x0CFD ?Z) ; internal use
+ (0x0CFE ?Y) ; internal use
+ (0x0CFF ?X) ; internal use
+ )
+
+;; Step 1 : Syllable identification and Halant movement.
+(generator
+ (0
+ (cond
+ ;; A syllable containing a three-part vowel sign.
+ ("([CRr](H[Cr])*)(T)(a)?"
+ < | (1 move-base-Halant) (3 0x0CC6 0x0CC2 0x0CD5) (4 =) | >)
+
+ ;; A syllable containing a two-part vowel sign.
+ ("([CRr](H[Cr])*)(t)(a)?"
+ < | (1 move-base-Halant) (3 two-part) (4 =) | >)
+
+ ;; A syllable ending with vowel signs and/or a vowel modifier.
+ ("([CRr](H[Cr])*)([upl]+a?|a)"
+ < | (1 move-base-Halant) (3 = *) | >)
+
+ ;; Forced Halant form.
+ ("((RH)?([Cr]H)*)([Cr]H)N"
+ < | (1 move-base-Halant) | >
+ < | (4 move-base-Halant) | >)
+
+ ;; Forced Half form.
+ ("((RH)?([Cr]H)*)([Cr]H)J"
+ < | (1 move-base-Halant) >
+ < | (4 otf:knda=blwf) | >)
+
+ ;; A syllable without a vowel sign nor a vowel modifier.
+ ("[CRr](H[Cr])*H?"
+ < | move-base-Halant | >)
+
+ ;; A syllable starting with an independent vowel.
+ ("Va?"
+ < | = * | > )
+
+ ("." =))
+ *)
+
+ ;; Move Halant on the base consonant to the tail if the syllable ends
+ ;; with a consonant.
+ ;; A leading 0x0CFF means Halant movement.
+ ;; A leading 0x0CFE means a syllable ending with a Halant.
+ ;; A leading 0x0CFD means Halant & Reph movements.
+ (move-base-Halant
+ (cond
+ (".*H$"
+ 0x0CFE = *)
+ ("(rH)(.)$"
+ 0x0CFD (2 =) (1 = =))
+ ("(rH)(.)(H)(.*)"
+ 0x0CFD (2 =) (4 = *) (3 =) (1 = =))
+ ("(.)(H)(.*)"
+ 0x0CFF (1 =) (3 = *) (2 =))
+ (".*"
+ = *)))
+
+ ;; Divide a two-part Matra into elements.
+ (two-part
+ (cond
+ ((0x0CC0) 0x0CBF 0x0CD5)
+ ((0x0CC7) 0x0CC6 0x0CD5)
+ ((0x0CC8) 0x0CC6 0x0CD6)
+ ((0x0CCA) 0x0CC6 0x0CC2)))
+ )
+
+;; Step 2 : Move Matra if applicable.
+;; The base consonant in a Halant-ending syllable is changed into Halant form.
+(generator
+ (0
+ (cond
+ ;; 1 2 3 4 5 6 7
+ (" Z(.)([CrH]*)(rH)(u)?(p)?(l*)(a)? "
+ | (1 =) (4 =) (5 =) (2 = *) (6 = *) (3 otf:knda=rphf) (7 =) |)
+ ;; 1 2 3 4 5 6
+ (" X(.)([CrH]*)(u)?(p)?(l*)(a)? "
+ | (1 =) (3 =) (4 =) (2 = *) (5 = *) (6 =) |)
+ (" Y(..)([^ ]*) "
+ ;; Sampige.ttf lacks the haln feature, so "otf:knda=haln" does not work.
+ | (1 otf:knda=~rphf,~blwf,*) (2 = *) |)
+ ("." =))
+ *))
+
+;; Step 3 : Drive OTF tables.
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ (1 otf:knda=~rphf,*))
+ ("."
+ [ otf:knda=+ ]))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; LAOO-ALICE.flt -- Font Layout Table for Lao (Alice font)
+;; Copyright (C) 2003, 2004, 2005, 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.
+
+;;; <li> LAOO-ALICE.flt
+;;;
+;;; For the font ALICE0.TTF to draw Lao script. The font is
+;;; available at:
+;;; <ul>
+;;; <li> infopage: http://seasrc.th.net/font/font.htm
+;;; <li> download: http://seasrc.th.net/font/fontlao.dir/alice0.zip
+;;; </ul>
+
+(font layouter laoo-alice nil
+ (font (nil alice0\ lao apple-roman)
+ (nil alice0\ lao iso8859-1)))
+
+(category
+ ;; C: CONSONANT (except for c and s)
+ ;; c: TALL CONSONANT
+ ;; s: LAO SEMIVOWEL SIGN LO
+ ;; A: VOWEL AM
+ ;; V: VOWEL UPPER
+ ;; v: VOWEL LOWER
+ ;; T: TONE
+ ;; I: INDEPENDENT VOWEL (except for A)
+ ;; S: SIGN
+ (0x0E81 0x0E82 ?C)
+ (0x0E84 ?C)
+ (0x0E87 0x0E88 ?C)
+ (0x0E8A ?C)
+ (0x0E8D ?C)
+ (0x0E94 0x0E97 ?C)
+ (0x0E99 0x0E9E ?C)
+ (0x0E9B ?c)
+ (0x0E9D ?c)
+ (0x0E9F ?c)
+ (0x0EA1 0x0EA3 ?C)
+ (0x0EA2 ?c)
+ (0x0EA5 ?C)
+ (0x0EA7 ?C)
+ (0x0EAA 0x0EAB ?C)
+ (0x0EAD 0x0EAE ?C)
+ (0x0EAF ?S)
+ (0x0EB0 ?I)
+ (0x0EB1 ?V)
+ (0x0EB2 ?I)
+ (0x0EB3 ?A)
+ (0x0EB4 0x0EB7 ?V)
+ (0x0EB8 0x0EB9 ?v)
+ (0x0EBB ?V)
+ (0x0EBC ?s)
+ (0x0EBD ?I)
+ (0x0EC0 0x0EC4 ?I)
+ (0x0EC6 ?S)
+ (0x0EC8 0x0ECC ?T)
+ (0x0ECD ?V)
+ (0x0EDC 0x0EDD ?C))
+
+(generator
+ (0
+ (cond
+ ("(Cs?)(T?A)"
+ < (1 independent semi-vowel) (2 am-after-normal-c) > )
+ ("(cs?)(T?A)"
+ < (1 independent semi-vowel) (2 am-after-tall-c) > )
+ ("(Cs?)([vV]?T?)"
+ < (1 independent semi-vowel) (2 vowel-tone-after-c *) > )
+ ("(cs?)([vV]?T?)"
+ < (1 independent semi-vowel) (2 Br<Bl vowel-tone-after-c *) > )
+ ("[sVvTA]"
+ [ isolated-dependent ])
+ ("."
+ independent))
+ *)
+
+ (independent
+ (cond
+ ((0x0E81) 0xA1)
+ ((0x0E82) 0xA2)
+ ((0x0E84) 0xA3)
+ ((0x0E87) 0xA4)
+ ((0x0E88) 0xA5)
+ ((0x0E8A) 0xA7)
+ ((0x0E8D) 0xA8)
+ ((0x0E94) 0xA9)
+ ((0x0E95) 0xAA)
+ ((0x0E96) 0xAB)
+ ((0x0E97) 0xEA)
+ ((0x0E99) 0xAD)
+ ((0x0E9A) 0xAE)
+ ((0x0E9B) 0xAF)
+ ((0x0E9C) 0xB0)
+ ((0x0E9D) 0xB1)
+ ((0x0E9E) 0xB2)
+ ((0x0E9F) 0xB3)
+ ((0x0EA1) 0xB4)
+ ((0x0EA2) 0xB5)
+ ((0x0EA3) 0xEB)
+ ((0x0EA5) 0xEC)
+ ((0x0EA7) 0xB8)
+ ((0x0EAA) 0xA6)
+ ((0x0EAB) 0xB9)
+ ((0x0EAD) 0xBA)
+ ((0x0EAE) 0xBB)
+ ;; ((0x0EAF) ??)
+ ((0x0EB0) 0xBD)
+ ((0x0EB2) 0xBE)
+ ((0x0EB3) 0xBF)
+ ((0x0EB4) [ 0xF2 ])
+ ((0x0EBD) 0xBC)
+ ((0x0EC0) 0xC0)
+ ((0x0EC1) 0xC1)
+ ((0x0EC2) 0xC2)
+ ((0x0EC3) 0xC3)
+ ((0x0EC4) 0xC4)
+ ((0x0EC6) 0xC5)
+ ((0x0EC6) 0xC5)
+ ((0x0EDC) 0xCE)
+ ((0x0EDD) 0xCF)))
+
+ (semi-vowel
+ ((0x0EBC) 0xF9))
+
+ (am-after-normal-c
+ (cond
+ ((0x0EB3) 0xED)
+ ((0x0EC8 0x0EB3) 0xEE)
+ ((0x0EC9 0x0EB3) 0xEF)
+ ((0x0ECA 0x0EB3) 0xFC 0xED)
+ ((0x0ECB 0x0EB3) 0xFD 0xED)
+ ((0x0ECC 0x0EB3) 0xFE 0xED)))
+
+ (am-after-tall-c
+ (cond
+ ((0x0EB3) 0xD6 0xBE)
+ ((0x0EC8 0x0EB3) 0xD2 0xBE)
+ ((0x0EC9 0x0EB3) 0xD3 0xBE)
+ ((0x0ECA 0x0EB3) 0xFC 0xF0 0xBE)
+ ((0x0ECB 0x0EB3) 0xFD 0xF0 0xBE)
+ ((0x0ECC 0x0EB3) 0xFE 0xF0 0xBE)))
+
+ (vowel-tone-after-c
+ (cond
+ ((0x0EB1 0x0EC8) 0x84)
+ ((0x0EB1 0x0EC9) 0x98)
+ ((0x0EB1) 0xD7)
+ ((0x0EB4 0x0EC8) 0x85)
+ ((0x0EB4 0x0EC9) 0x99)
+ ((0x0EB4) 0xD8)
+ ((0x0EB5 0x0EC8) 0x86)
+ ((0x0EB5 0x0EC9) 0x9A)
+ ((0x0EB5) 0xD9)
+ ((0x0EB6 0x0EC8) 0x87)
+ ((0x0EB6 0x0EC9) 0x9B)
+ ((0x0EB6) 0xDA)
+ ((0x0EB7 0x0EC8) 0x88)
+ ((0x0EB7 0x0EC9) 0x9C)
+ ((0x0EB7) 0xDB)
+ ((0x0EB8) 0xF7)
+ ((0x0EB9) 0xF8)
+ ((0x0EBB 0x0EC8) 0x89)
+ ((0x0EBB 0x0EC9) 0x9D)
+ ((0x0EBB) 0xDC)
+ ((0x0EC8) tr+bl 0xC8)
+ ((0x0EC9) tr+bl 0xC9)
+ ((0x0ECA) tr+bl 0xCA)
+ ((0x0ECB) tr+bl 0xCB)
+ ((0x0ECC) tr+bl 0xCC)
+ ((0x0ECD) 0xD6)))
+
+ (isolated-dependent
+ (cond
+ ((0x0EB1) 0xF1)
+ ((0x0EB4) 0xF2)
+ ((0x0EB5) 0xF3)
+ ((0x0EB6) 0xF4)
+ ((0x0EB7) 0xF5)
+ ((0x0EB8) 0xF7)
+ ((0x0EB9) 0xF8)
+ ((0x0EBB) 0xF6)
+ ((0x0EC8) 0xC8)
+ ((0x0EC9) 0xC9)
+ ((0x0ECA) 0xCA)
+ ((0x0ECB) 0xCB)
+ ((0x0ECC) 0xCC)
+ ((0x0ECD) 0xD6))))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; LAOO-GENERIC.flt -- Font Layout Table for Lao
+;; Copyright (C) 2005, 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.
+
+;;; <li> LAOO-GENERIC.flt
+
+(font layouter laoo-generic nil
+ (font (nil nil unicode-bmp :lang=lo)))
+
+(category
+ ;; C: CONSONANT (except for c and s)
+ ;; c: TALL CONSONANT
+ ;; s: LAO SEMIVOWEL SIGN LO
+ ;; A: VOWEL AM
+ ;; V: VOWEL UPPER
+ ;; v: VOWEL LOWER
+ ;; T: TONE
+ ;; I: INDEPENDENT VOWEL (except for A)
+ ;; S: SIGN
+ (0x0E81 0x0E82 ?C)
+ (0x0E84 ?C)
+ (0x0E87 0x0E88 ?C)
+ (0x0E8A ?C)
+ (0x0E8D ?C)
+ (0x0E94 0x0E97 ?C)
+ (0x0E99 0x0E9E ?C)
+ (0x0E9B ?c)
+ (0x0E9D ?c)
+ (0x0E9F ?c)
+ (0x0EA1 0x0EA3 ?C)
+ (0x0EA2 ?c)
+ (0x0EA5 ?C)
+ (0x0EA7 ?C)
+ (0x0EAA 0x0EAB ?C)
+ (0x0EAD 0x0EAE ?C)
+ (0x0EAF ?S)
+ (0x0EB0 ?I)
+ (0x0EB1 ?V)
+ (0x0EB2 ?I)
+ (0x0EB3 ?A)
+ (0x0EB4 0x0EB7 ?V)
+ (0x0EB8 0x0EB9 ?v)
+ (0x0EBB ?V)
+ (0x0EBC ?s)
+ (0x0EBD ?I)
+ (0x0EC0 0x0EC4 ?I)
+ (0x0EC6 ?S)
+ (0x0EC8 0x0ECC ?T)
+ (0x0ECD ?V)
+ (0x0ED0 0x0ED9 ?I)
+ (0x0EDC 0x0EDD ?C))
+
+(generator
+ (0
+ (cond
+ ("(Cs?)(T)?(A)"
+ < (1 = =) 0x0ECD (2 tr+bl =) (3 0x0EB2) > )
+ ("(cs?)(T)?(A)"
+ < (1 = =) Br<10Bl 0x0ECD (2 tr+<10bl =) (3 0x0EB2) > )
+ ("(Cs?[vV]?)(T)?"
+ < (1 = *) (2 tr+bl =) > )
+ ("(cs?)([vV])?(T)?"
+ < (1 = *) (2 (cond ("v" =) ("." Br<10Bl =))) (3 tr+<10bl =) > )
+ ("[sVvTA]"
+ [ = ])
+ ("."
+ =))
+ *))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; LAOO-MULE.flt -- Font Layout Table for Lao (mule font)
+;; Copyright (C) 2003, 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.
+
+;;; <li> LAOO-MULE.flt
+;;;
+;;; For Lao fonts of mule encoding to draw Lao script. The font is
+;;; available at:
+;;; <ul>
+;;; <li> infopage: http://www.gnu.org/directory/localization/intlfonts.html
+;;; <li> download: ftp://ftp.gnu.org/pub/gnu/intlfonts/intlfonts-1.2.1.tar.gz
+;;; </ul>
+
+(font layouter laoo-mule nil
+ (font (mulelao-1)))
+
+(category
+ ;; C: CONSONANT (except c and s)
+ ;; c: TALL CONSONANT
+ ;; s: LAO SEMIVOWEL SIGN LO
+ ;; V: VOWEL UPPER
+ ;; v: VOWEL LOWER
+ ;; T: TONE
+ ;; I: INDEPENDENT
+ ;;
+ (0x0E80 0x0EDF ?I)
+ (0x0E81 0x0E82 ?C)
+ (0x0E84 ?C)
+ (0x0E87 0x0E88 ?C)
+ (0x0E8A ?C)
+ (0x0E8D ?C)
+ (0x0E94 0x0E97 ?C)
+ (0x0E99 0x0E9E ?C)
+ (0x0E9B ?c)
+ (0x0E9D ?c)
+ (0x0E9F ?c)
+ (0x0EA1 0x0EA3 ?C)
+ (0x0EA2 ?c)
+ (0x0EA5 ?C)
+ (0x0EA7 ?C)
+ (0x0EAA 0x0EAB ?C)
+ (0x0EAD 0x0EAE ?C)
+ (0x0EB1 ?V)
+ (0x0EB4 0x0EB7 ?V)
+ (0x0EB8 0x0EB9 ?v)
+ (0x0EBB ?V)
+ (0x0EBC ?s)
+ (0x0EC8 0x0ECC ?T)
+ (0x0ECD ?V))
+
+(generator
+ (0
+ (cond
+ ("cs?(VT?|v?T)"
+ <
+ ("(cs?)" independent semi-vowel)
+ ("VT?" composed-non-relative composed-relative *)
+ (".*" composed-non-relative *)
+ > )
+ ("Cs?[vV]?T?"
+ < independent semi-vowel composed-relative * > )
+ ("[^Cs]*"
+ independent *))
+ *)
+
+ (independent
+ ((range 0x0E80 0x0EDF) 0xA0))
+
+ (composed-relative
+ (cond
+ ((0x0EB1) tc+bc 0xD1)
+ ((0x0EB4) tc+bc 0xD4)
+ ((0x0EB5) tc+bc 0xD5)
+ ((0x0EB6) tc+bc 0xD6)
+ ((0x0EB7) tc+bc 0xD7)
+ ((0x0EB8) bc+tc 0xD8)
+ ((0x0EB9) bc+tc 0xD9)
+ ((0x0EBB) tc+bc 0xDB)
+ ((0x0EC7) tc+bc 0xE7)
+ ((0x0EC8) tc+bc 0xE8)
+ ((0x0EC9) tc+bc 0xE9)
+ ((0x0ECA) tc+bc 0xEA)
+ ((0x0ECB) tc+bc 0xEB)
+ ((0x0ECC) tc+bc 0xEC)
+ ((0x0ECD) tc+bc 0xED)
+ ((0x0ECE) tc+bc 0xEE)))
+
+ (semi-vowel
+ ((0x0EBC) Bc-Bc 0xDC))
+
+ (composed-non-relative
+ (cond
+ ((0x0EB1) Bc-Bc 0xD1)
+ ((0x0EB4) Bc-Bc 0xD4)
+ ((0x0EB5) Bc-Bc 0xD5)
+ ((0x0EB6) Bc-Bc 0xD6)
+ ((0x0EB7) Bc-Bc 0xD7)
+ ((0x0EB8) Bc-Bc 0xD8)
+ ((0x0EB9) Bc-Bc 0xD9)
+ ((0x0EBB) Bc-Bc 0xDB)
+ ((0x0E47) Bc-Bc 0xE7)
+ ((0x0E48) Bc-Bc 0xE8)
+ ((0x0E49) Bc-Bc 0xE9)
+ ((0x0E4A) Bc-Bc 0xEA)
+ ((0x0E4B) Bc-Bc 0xEB)
+ ((0x0E4C) Bc-Bc 0xEC)
+ ((0x0E4D) Bc-Bc 0xED)
+ ((0x0E4E) Bc-Bc 0xEE))))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; LAOO-OTF.flt -- Font Layout Table for Lao
+;; Copyright (C) 2006, 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.
+
+;;; <li> LAOO-OTF.flt
+
+(font layouter laoo-otf nil
+ (font (nil phetsarath\ ot unicode-bmp)))
+
+(category
+ ;; C: CONSONANT
+ ;; S: LAO SEMIVOWEL SIGN LO
+ ;; A: VOWEL AM
+ ;; V: DEPENDENT VOWEL
+ ;; T: TONE
+ ;; I: OTHER INDEPENDENT
+ (0x0E81 0x0EAE ?C)
+ (0x0EAF 0x0EB0 ?I)
+ (0x0EB1 ?V)
+ (0x0EB2 ?I)
+ (0x0EB3 ?A)
+ (0x0EB4 0x0EBB ?V)
+ (0x0EBC ?S)
+ (0x0EBD 0x0EC6 ?I)
+ (0x0EC8 0x0ECC ?T)
+ (0x0ECD ?V)
+ (0x0ED0 0x0ED9 ?I)
+ (0x0EDC 0x0EDD ?C)
+
+ (0x25CC ?I))
+
+;; The only GSUB is the decomposition of AM. We do it by hand because
+;; it requires reordering in addition to decomposition.
+
+(generator
+ (0
+ (cond
+ ("(CS?)(T)?A"
+ < | (1 = *) 0x0ECD (2 =) 0x0EB2 | > )
+ ("CS?V?T?"
+ < | = * | > )
+ ("[SVT]"
+ < | 0x25CC = | > )
+ ("."
+ =))
+ *))
+
+;; Then apply all GPOS features.
+
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ (1 otf:lao\ =))
+ ("."
+ [ otf:lao\ =+ ]))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; MLYM-CDAC.flt -- Font Layout Table for Malayalam (C-DAC font)
+;; Copyright (C) 2003, 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.
+
+;;; <li> MLYM-CDAC.flt
+;;;
+;;; For the font MLKR0ntt.ttf (developped by C-DAC, encoding is ISFOC)
+;;; to draw Malayalam script. The font is available at:
+;;; <ul>
+;;; <li> infopage: http://www.iiit.net/ltrc/iscii/FAQ.htm#SEC2.1
+;;; <li> download: http://www.iiit.net/ltrc/iscii/iscii_plugin_linux.tar.gz
+;;; </ul>
+
+(font layouter mlym-cdac nil
+ (font (malayalam-cdac)
+ (nil ml-ttkarthika apple-roman)))
+
+(category
+ (0x0D00 0x0D7F ?E) ; all malayalam characters
+ (0x0D02 ?A) ; ANUSVARA
+ (0x0D03 ?G) ; VISARGA
+ (0x0D05 0x0D14 ?V) ; independent vowel
+ (0x0D15 0x0D39 ?C) ; consonant
+ (0x0D3E 0x0D4C ?M) ; dependent vowel (MATRA)
+ (0x0D4D ?H) ; HALANT
+ )
+
+(generator
+ (0
+ (cond
+ ("(VA?)|G|((CH)?(CH)?(CH)?CH)?C(H|M?[AH]?)?" | glyph * |)
+ ("." glyph ))
+ * )
+
+ (glyph
+ (cond
+ ;; various sign
+ ((0x0D02) 0x77)
+ ((0x0D03) 0x78)
+ ;; Independent Vowels
+ ((0x0D05) 0x41)
+ ((0x0D06) 0x42)
+ ((0x0D07) 0x43)
+ ((0x0D08) 0x43 0x75)
+ ((0x0D09) 0x44)
+ ((0x0D0A) 0x44 0x75)
+ ((0x0D0B) 0x45)
+ ((0x0D0C) 0x23)
+ ((0x0D0E) 0x46)
+ ((0x0D0F) 0x47)
+ ((0x0D10) 0x73 0x46)
+ ((0x0D12) 0x48)
+ ((0x0D13) 0x48 0x6D)
+ ((0x0D14) 0x48 0x75)
+ ;; Consonants
+ ((0x0D15 0x0D4D 0x0D15 0x0D41) 0xE7)
+ ((0x0D15 0x0D4D 0x0D15) 0xA1)
+ ((0x0D15 0x0D4D 0x0D33) 0xA2)
+ ((0x0D15 0x0D4D 0x0D37) 0xA3)
+ ((0x0D15 0x0D4D 0x0D1F) 0xCE)
+ ((0x0D15 0x0D4D 0x0D24) 0xE0)
+ ((0x0D15 0x0D41) 0xE6)
+ ((0x0D15 0x0D41) 0xE6)
+ ((0x0D15) 0x49)
+ ((0x0D16) 0x4A)
+ ((0x0D17 0x0D4D 0x0D17) 0xA4)
+ ((0x0D17 0x0D4D 0x0D32) 0xA5)
+ ((0x0D17 0x0D4D 0x0D2E) 0xDC)
+ ((0x0D17 0x0D4D 0x0D28) 0xE1)
+ ((0x0D17) 0x4B)
+ ((0x0D18) 0x4C)
+ ((0x0D19 0x0D4D 0x0D15) 0xA6)
+ ((0x0D19 0x0D4D 0x0D19) 0xA7)
+ ((0x0D19 0x0D4D 0x0D15 0x0D41) 0xE8)
+ ((0x0D19) 0x4D)
+ ((0x0D1A 0x0D4D 0x0D1A) 0xA8)
+ ((0x0D1A 0x0D4D 0x0D1B) 0xD1)
+ ((0x0D1A) 0x4E)
+ ((0x0D1B) 0x4F)
+ ((0x0D1C 0x0D4D 0x0D1C) 0xD6)
+ ((0x0D1C 0x0D4D 0x0D1E) 0xDA)
+ ((0x0D1C) 0x50)
+ ((0x0D1D) 0x51)
+ ((0x0D1E 0x0D4D 0x0D1A) 0xA9)
+ ((0x0D1E 0x0D4D 0x0D1E) 0xAA)
+ ((0x0D1E) 0x52)
+ ((0x0D1F 0x0D4D 0x0D1F) 0xAB)
+ ((0x0D1F) 0x53)
+ ((0x0D20) 0x54)
+ ((0x0D21 0x0D4D 0x0D21) 0xCD)
+ ((0x0D21) 0x55)
+ ((0x0D22) 0x56)
+ ((0x0D23 0x0D41 0x0D4D) 0xAC)
+ ((0x0D23 0x0D41) 0xE9)
+ ((0x0D23 0x0D4D 0x0D1F) 0xAD)
+ ((0x0D23 0x0D4D 0x0D23) 0xAE)
+ ((0x0D23 0x0D4D 0x0D2E) 0xD7)
+ ((0x0D23 0x0D4D 0x0D21) 0xDE)
+ ((0x0D23) 0x57)
+ ((0x0D24 0x0D4D 0x0D24) 0xAF)
+ ((0x0D24 0x0D4D 0x0D25) 0xB0)
+ ((0x0D24 0x0D4D 0x0D38) 0xD5)
+ ((0x0D24 0x0D4D 0x0D2D) 0xDB)
+ ((0x0D24 0x0D4D 0x0D2E) 0xDF)
+ ((0x0D24) 0x58)
+ ((0x0D25) 0x59)
+ ((0x0D26 0x0D4D 0x0D26) 0xB1)
+ ((0x0D26 0x0D4D 0x0D27) 0xB2)
+ ((0x0D26) 0x5A)
+ ((0x0D27) 0x5B)
+ ((0x0D28 0x0D41 0x0D4D) 0xB3)
+ ((0x0D28 0x0D41) 0xEB)
+ ((0x0D28 0x0D4D 0x0D24) 0xB4)
+ ((0x0D28 0x0D4D 0x0D26) 0xB5)
+ ((0x0D28 0x0D4D 0x0D28 0x0D41) 0xEC)
+ ((0x0D28 0x0D4D 0x0D28) 0xB6)
+ ((0x0D28 0x0D4D 0x0D2E) 0xB7)
+ ((0x0D28 0x0D4D 0x0D27) 0xD4)
+ ((0x0D28 0x0D4D 0x0D25) 0xD9)
+ ((0x0D28 0x0D4D 0x0D31) 0xE2)
+ ((0x0D28) 0x5C)
+ ((0x0D2A 0x0D4D 0x0D2A) 0xB8)
+ ((0x0D2A 0x0D4D 0x0D32) 0xB9)
+ ((0x0D2A) 0x5D)
+ ((0x0D2B) 0x5E)
+ ((0x0D2C 0x0D4D 0x0D2C) 0xBA)
+ ((0x0D2C 0x0D4D 0x0D32) 0xBB)
+ ((0x0D2C 0x0D4D 0x0D27) 0xCF)
+ ((0x0D2C 0x0D4D 0x0D26) 0xD0)
+ ((0x0D2C) 0x5F)
+ ((0x0D2D) 0x60)
+ ((0x0D2E 0x0D4D 0x0D2A) 0xBC)
+ ((0x0D2E 0x0D4D 0x0D2E) 0xBD)
+ ((0x0D2E 0x0D4D 0x0D32) 0xBE)
+ ((0x0D2E) 0x61)
+ ((0x0D2F) 0x62)
+ ((0x0D2F 0x0D4D 0x0D2F) 0xBF)
+ ((0x0D2F 0x0D4D 0x0D15 0x0D4D 0x0D15) 0xED)
+ ((0x0D30 0x0D41 0x0D4D) 0xC0)
+ ((0x0D30 0x0D41) 0xEA)
+ ((0x0D30) 0x63)
+ ((0x0D31 0x0D4D 0x0D31) 0xE4)
+ ((0x0D31 0x0D4D) 0xC0)
+ ((0x0D31 0x0D41 0x0D4D) 0xC0)
+ ((0x0D31) 0x64)
+ ((0x0D32 0x0D41 0x0D4D) 0xC2)
+ ((0x0D32 0x0D4D 0x0D32) 0xC3)
+ ((0x0D32 0x0D4D 0x0D2A) 0xE5)
+ ((0x0D32) 0x65)
+ ((0x0D33 0x0D41 0x0D4D) 0xC4)
+ ((0x0D33 0x0D4D 0x0D33) 0xC5)
+ ((0x0D33) 0x66)
+ ((0x0D34) 0x67)
+ ((0x0D35 0x0D4D 0x0D35) 0xC6)
+ ((0x0D35) 0x68)
+ ((0x0D36 0x0D4D 0x0D32) 0xC7)
+ ((0x0D36 0x0D4D 0x0D36) 0xC8)
+ ((0x0D36 0x0D4D 0x0D1A) 0xDD)
+ ((0x0D36) 0x69)
+ ((0x0D37 0x0D4D 0x0D1F) 0xE3)
+ ((0x0D37) 0x6A)
+ ((0x0D38 0x0D4D 0x0D32) 0xC9)
+ ((0x0D38 0x0D4D 0x0D38) 0xCA)
+ ((0x0D38 0x0D4D 0x0D31 0x0D4D 0x0D31) 0xCC)
+ ((0x0D38 0x0D4D 0x0D25) 0xD8)
+ ((0x0D38) 0x6B)
+ ((0x0D39 0x0D4D 0x0D32) 0xCB)
+ ((0x0D39 0x0D4D 0x0D2E) 0xD2)
+ ((0x0D39 0x0D4D 0x0D28) 0xD3)
+ ((0x0D39) 0x6C)
+ ;; Dependent vowel signs
+ ((0x0D3E) 0x6D)
+ ((0x0D3F) 0x6E)
+ ((0x0D40) 0x6F)
+ ((0x0D41) 0x70)
+ ((0x0D42) 0x71)
+ ((0x0D43) 0x72)
+ ((0x0D46) 0x73)
+ ((0x0D47) 0x74)
+ ((0x0D48) 0x73 0x73)
+ ((0x0D4A) 0x73 0x6D)
+ ((0x0D4B) 0x74 0x6D)
+ ((0x0D4C) 0x75)
+ ;; Various signs
+ ((0x0D4D 0x0D2F 0x0D41) 0x7C)
+ ((0x0D4D 0x0D2F 0x0D42) 0x7D)
+ ((0x0D4D 0x0D2F) 0x79)
+ ((0x0D4D 0x0D30 0x0D4D) 0x72)
+ ((0x0D4D 0x0D30) 0x7B)
+ ((0x0D4D 0x0D31 0x0D4D) 0x72)
+ ((0x0D4D 0x0D31) 0x7B)
+ ((0x0D4D 0x0D35) 0x7A)
+ ((0x0D4D 0x0D4D) 0x76)
+ ((0x0D4D) 0x76)
+ ((0x0D57) 0x75))))
+
+(category
+ (0x00 0xFF ?M)
+ (0x49 0x6C ?C)
+ (0x73 ?E) ; E
+ (0x74 ?e) ; EE
+ (0x79 ?Y) ; yakar
+ (0x7A ?V) ; vakar
+ (0x7B ?R) ; rrakar
+ (0xA1 0xE5 ?C))
+
+(generator
+ (0
+ (cond
+ (" (C[YV]?)(R) "
+ < (2 =) (1 = *) >)
+ (" (R?C[YV]?)(EE?) "
+ < (2 = *) (1 = *) >)
+ (" (R?C[YV]?)(e) "
+ < (2 = ) (1 = *) >)
+ (" ([^ ]*) "
+ < (1 = *) >)
+ ("." [ = ]))
+ *))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; MLYM-OTF.flt -- Font Layout Table for Malayalam OpenType font
+;; Copyright (C) 2003, 2004, 2005, 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.
+
+;;; <li> MLYM-OTF.flt
+;;;
+;;; For Malayalam OpenType fonts to draw the reformed Malayalam script.
+
+(font layouter mlym-otf nil
+ (font (nil nil unicode-bmp :otf=mlym=haln)))
+
+;; The first stage is to extract a syllable and re-order characters.
+(category
+ ;; C: consonant (except for BPR)
+ ;; B: consonant that is the subject of "blws" feature
+ ;; P: consonant that is the subject of "pstf" feature
+ ;; R: consonant RA
+ ;; H: HALANT (VIRAMA)
+ ;; m: MATRA (Mpre)
+ ;; p: MATRA (Mpost)
+ ;; t: MATRA (two-part: Mpre+Mpost)
+ ;; A: vowel modifier (post) (ANUSVARA and VISARGA)
+ ;; V: independent vowel
+ ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
+ ;; J: ZWJ (ZERO WIDTH JOINER)
+ ;; E: else (all other independnt characters)
+ (0x0D00 0x0D7F ?E) ; else
+ (0x0D02 0x0D03 ?A) ; ANUSVARA & VISARGA
+ (0x0D05 0x0D14 ?V) ; independent vowel
+ (0x0D15 0x0D39 ?C) ; consonant
+
+ ;; Accorind to www.microsoft.com/typography/otfntdev/indicot/appen.htm,
+ ;; these must be classified into 'B' category, but at least, it
+ ;; doesn't work with this font
+ ;; http://www.supersoftweb.com/THOOLIUC.TTF
+ ;;(0x0D1F ?B) ; TTA
+ ;;(0x0D23 ?B) ; NNA
+ ;;(0x0D26 ?B) ; DA
+ (0x0D2F ?P) ; YA
+ (0x0D30 ?R) ; RA
+ (0x0D32 ?B) ; LA
+ (0x0D35 ?P) ; VA
+ (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
+ (0x200C ?N) ; ZWNJ
+ (0x200D ?J) ; ZWJ
+ (0x0D7D ?x) ; marker inserted before base-C
+ (0x0D7E ?y) ; marker inserted after base-C
+ (0x0D7F ?z) ; marker inserted before last Ra
+ )
+
+;; The 1st stage is to extract a syllable while moving a Halant
+;; following Cbase to the tail and partitioning two-part matras into
+;; parts.
+(generator
+ (0
+ (cond
+ ;; If [CR]H is followed by ZWNJ/ZWJ, move ZWNJ/ZWJ) to the head so
+ ;; that the later stages find it quickly.
+ ("([CBPR]H)([NJ])"
+ < | (2 =) (1 = =) | >)
+
+ ;; A syllable starting with a consonant and ending with a vowel
+ ;; and/or a vowel modifier.
+ ("(([CBPR]H)*[CBPR])([pmt]A?|A)"
+ < | (1 move-halant) (3 partition = =) | >)
+
+ ;; A syllable starting with a consonant and ending without a vowel
+ ;; nor a vowel modifier.
+ ("(([CBPR]H)*[CBPR])(H)?"
+ < | (1 move-halant) (3 =) | >)
+
+ ;; A syllable starting with an independent vowel.
+ ("(VA?)"
+ < | (1 = *) | >)
+
+ ;; Other independent character.
+ ("." =))
+ *)
+
+ ;; Move Halant to the tail if necessary. Insert 0x0D7D before Cbase,
+ ;; 0x0D7E after Cbase, 0x0D7F before the tailing RH (if any). They
+ ;; work as markers in the following stages.
+ (move-halant
+ (cond
+ ;; In the first two cases, we don't have to move Halant.
+ ("[BPR]$" ; Single consonant.
+ 0x0D7D 0x0D7E =)
+ ("(([CBPR]H)*)(C)$" ; Cbase is at tail.
+ (1 = *) 0x0D7D (3 =) 0x0D7E)
+ ;; In the following cases, we must move Halant to the tail.
+ ("(([CBPR]H)*)([C])H(([BR]H)*)(R)$" ; Cbase is at head or middle.
+ (1 = *) 0x0D7D (3 =) 0x0D7E (4 = *) 0x0D7F 0x0D30 0x0D4D)
+ ("(([CBPR]H)*)([C])H(([BR]H)*[BP])$" ; Cbase is at head or middle.
+ (1 = *) 0x0D7D (3 =) 0x0D7E (4 = *) 0x0D4D)
+ ("(RH)?(.)H(.*)$" ; No Cbase, move the first
+ ; Halant to the tail.
+ (1 = *) 0x0D7D (2 = ) 0x0D7E (3 = *) 0x0D4D)))
+
+ ;; Partition two-part matras into parts.
+ (partition
+ (cond
+ ((0x0D4A) 0x0D46 0x0D3E)
+ ((0x0D4B) 0x0D47 0x0D3E)
+ ;; Unicode suggests this partitioning:
+ ((0x0D4C) 0x0D46 0x0D57)
+ ;; but it is questionable. Perhaps, this substitution is better.
+ ;; ((0x0D4C) 0x0D57)
+ )))
+
+;; The 2nd stage is to apply GSUB for prebase part.
+(generator
+ (0
+ (cond
+ ;; Originally [CBPR]H is followed by ZWNJ. Apply no feature (just
+ ;; cmap).
+ (" N([^ ]*) "
+ (1 otf:mlym=+))
+
+ ;; Originally [CBPR]H is followed by ZWJ. Apply only GSUB haln
+ ;; feature.
+ (" J([^ ]*) "
+ (1 otf:mlym=haln+))
+
+ ;; Syllable starting with a consonant should match this pattern.
+ (" ([^ y]*)y([^ z]*)(z..)?([^ ]*) "
+ |
+ (1 otf:mlym=~blwf,~pstf,~blws,~psts,*+) ; Prebase part.
+ 0x0D7E ; Preserve this marker.
+ (2 = *) ; Postbase part.
+ (3 = *) ; Optional tailing RH.
+ (4 = *) ; Optional Mpost.
+ |)
+
+ ;; A syllable starting with an independent vowel.
+ (" ([^ ]*) "
+ (1 otf:mlym+))
+
+ ;; Any other independent character. Apply no feature (just cmap).
+ ("."
+ [ otf:mlym=+ ] ))
+ *))
+
+;; The 3rd stage is to move Mpre (if any) and tailing RH (if any)
+;; forward to just before the base consonant.
+(generator
+ (0
+ (cond
+ (" ([^x]*)(.)xy([^ zm]*)(z(..))?(m)?([^ ]*) "
+ | (1 = *) (4 (5 otf:mlym=pstf+)) (6 =) 0x0D7D (2 =) (3 = *) (7 = *) |)
+ (" ([^x]*)x(.)y([^ zm]*)(z(..))?(m)?([^ ]*) "
+ | (1 = *) (4 (5 otf:mlym=pstf+)) (6 =) 0x0D7D (2 =) (3 = *) (7 = *) |)
+ (" xy([^ m]*)(m)?([^ ]*) "
+ | (2 =) 0x0D7D (1 = *) (3 = *) |)
+ ("[NJ]")
+ ("."
+ = ))
+ *))
+
+;; The 4th stage is to apply GSUB to postbase part.
+(generator
+ (0
+ (cond
+ (" ([^x]*)x(.H) "
+ | (1 = *) (2 otf:mlym=haln) |)
+ (" ([^x]*)x([^ ]*) "
+ | (1 = *) (2 otf:mlym=~akhn,~haln,blwf,pstf,vatu,*+) |)
+ ("." =))
+ *))
+
+
+
+;; The 5th (last) stage is to apply GPOS features.
+(generator
+ (0
+ (cond
+ (" ([^ ]*) " (1 otf:mlym=))
+ ("." =))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; MLYM-RACHANA.flt -- Font Layout Table for Malayalam Rachana font
+;; Copyright (C) 2005, 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.
+
+;;; <li> 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.
+
+(font layouter mlym-rachana nil
+ (font (nil rachana unicode-bmp)))
+
+;; 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 dedependent character.
+ ("[Apmt]" [ = ])
+
+ ;; 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:
--- /dev/null
+;; MYMR-MYAZEDI.flt -- Font Layout Table for Myanmar (Zedi font)
+;; Copyright (C) 2004, 2005, 2006, 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.
+
+;;; <li> MYMR-MYAZEDI.flt
+;;;
+;;; For the Myanmar Zedi family fonts to draw Myanmar script.
+;;; <ul>
+;;; <li> download: http://www.myazedi.com/downloads/MyaZedi_M17N.ttf
+;;; </ul>
+
+(font layouter mymr-myazedi nil
+ (font (nil myazedi_m17n unicode-bmp)))
+
+;; 1st stage
+;; Extract syllable while detecting Kinzi, substituting subscripts,
+;; and removing Halants.
+
+(category
+ (0x1000 0x107F ?O) ; other
+ (0x1000 0x1021 ?C) ; consonant except for c, K, n, M
+ (0x1000 0x1003 ?c) ; consonant that has subscript form
+ (0x1004 ?K) ; consonant NGA
+ (0x1005 0x1008 ?c)
+ (0x100B 0x100C ?c)
+ (0x100F 0x1019 ?c)
+ (0xE014 ?c)
+ (0xE01B ?c)
+ (0x1014 ?n) ; consonant NA
+ (0x101C ?c)
+ ;; cosonants that can be a Medial
+ (0x101A ?M) ; medial Ya
+ (0x101B ?M) ; medial Ra
+ (0x101D ?M) ; medial Wa
+ (0x101F ?M) ; medial Ha
+ (0x1021 0x102A ?I) ; independent vowel
+ (0x102C 0x1032 ?V) ; dependent Vowel
+ (0x1036 ?A) ; sign ANUSVARA
+ (0x1037 0x1038 ?S) ; other sign
+ (0x1039 ?H) ; HALANT (VIRAMA)
+ (0x200C ?N) ; ZWNJ (Zero Width Non Joiner)
+ (0x200D ?J) ; ZWJ (Zero Width Joiner)
+ )
+
+(generator
+ (0
+ (cond
+ ;; The following regular expression matches a graphme cluster pattern
+ ;; described in Table 10-3 of the Unicode Standard 4.0 except for
+ ;; Kinzi which is encoded by the sequence "U+1004 U+1039 U+200D".
+ ;;
+ ;;<-1-><---------2--------><--4--><--6---> <7->
+ ;; <---3---> <5->
+ ("(KHJ)([CcnKMr](H[CcnK])?)((HM)*)(V*A?H?)N?(S*)"
+ | < (1 0xE390) (2 consonant) (4 remove-halant *) (6 = *) (7 = *) > |)
+
+ ;; Irregular independent Kinzi
+ ("KHJ"
+ [ 0xE390 ])
+
+ ;; Cluster without Kinzi
+ ("([CcnKMr](H[CcnK])?)((HM)*)(V*A?H?)N?(S*)"
+ | < (1 consonant) (3 remove-halant *) (5 = *) (6 = *) > |)
+
+ ;; Fixme: I'm not sure about the syllable pattern for an
+ ;; independent vowel.
+ ("IV*[AS]*"
+ | < = * > |)
+
+ ;; Treat anything else as a single character.
+ ("."
+ [ = ]))
+ *)
+
+ (consonant
+ (cond
+ ((0x100B 0x1039 0x100C) 0xE10C)
+ ((0x100D 0x1039 0x100D) 0xE00D)
+ ((0x100E 0x1039 0x100D) 0xE10D)
+ ((0x100F 0x1039 0x100D) 0xE20D)
+ ((0x101E 0x1039 0x101E) 0xE01E)
+ ("(n)H([cn])" 0xE140 (2 subscript))
+ ("(.)H([cn])" (1 =) (2 subscript))
+ ("(.)H(.)" (1 =) (2 =))
+ ("." =)))
+
+ (subscript
+ (cond ((range 0x1000 0x101C) 0xE000)))
+
+ (remove-halant
+ (cond
+ ((0x1039))
+ ("." =))))
+
+;; 2nd stage
+;; Handle medials.
+
+(category
+ (0x1000 0x107F ?O) ; other
+ (0x1000 0x1021 ?W) ; wide consonant
+ (0x1001 0x1002 ?S) ; single-width consonant
+ (0x1004 0x1005 ?S)
+ (0x1007 0x1008 ?S)
+ (0x100B 0x100E ?S)
+ (0x1012 0x1017 ?S)
+ (0x1019 ?S)
+ (0x101A ?a) ; medial Ya
+ (0x101B ?b) ; medial Ra
+ (0x101D ?d) ; medial Wa
+ (0x101F ?f) ; medial Ha
+ (0x1020 ?S)
+ (0x102D 0x102E ?V) ; dependent vowel (upper)
+ (0x1032 ?V)
+ (0x200C ?N) ; ZWNJ
+ (0xE000 0xE3FF ?O)
+ (0xE000 0xE01E ?w) ; wide subscript
+ (0xE001 0xE002 ?s) ; single-width subscript
+ (0xE005 ?s)
+ (0xE007 ?s)
+ (0xE00B ?s)
+ (0xE012 0xE017 ?s)
+ (0xE019 ?s)
+ (0xE10C 0xE10D ?s)
+ (0xE140 ?s)
+ (0xE20D ?w)
+ (0xE390 ?K) ; Kinzi
+ )
+
+(generator
+ (0
+ (cond
+ (" (K)?([WSabdfws][WSKws]?[abdf][abdf]*[^ ]*) "
+ | (1 =) (2 medial = *) |)
+ (" ([^ ]*) "
+ = *)
+ ("."
+ =))
+ *)
+
+ (medial
+ (cond
+ ;; Medial Ya (U+101A)
+ ("(..?)adf" (1 = *) 0xE1A2)
+ ("(..?)ad" (1 = *) 0xE1A4)
+ ("(..?)af" (1 = *) 0xE1A3)
+ ("(..?)a" (1 = *) 0xE1A1)
+
+ ;; Medial Ra (U+101B)
+ ("([Waf]|.[Ww])bdf" 0xE1BA (1 = *))
+ ("(..?)bdf" 0xE1B9 (1 = *))
+ ("([Waf]|.[Ww])bd" 0xE1B8 (1 = *))
+ ("(..?)bd" 0xE1B7 (1 = *))
+ ("([Waf]|.[Ww])b(f)?(V)" 0xE1B6 (1 = *) (2 0xE1F3) (3 =))
+ ("(..?)b(f)?(V)" 0xE1B5 (1 = *) (2 0xE1F3) (3 =))
+ ;; Single-width consonant + a wide subscript + Medial Ra.
+ ;; To use glyph E1B4, we must shift the single-width consonant to
+ ;; the right.
+ ("([Sd][Ww])b" 0xE1B4 Br>32Bl (1 = *))
+ ("([Waf].|.[Ww])b" 0xE1B4 (1 = *))
+ ("(s|..)b" 0xE1B3 (1 = *))
+ ("([Waf])b(f)?" 0xE1B2 (1 = *) (2 0xE1F3))
+ ("(.)b(f)?" 0xE1B1 (1 = *) (2 0xE1F3))
+
+ ;; Medial Wa (U+101D)
+ ("(..?)df" (1 = *) 0xE1D1)
+ ("(..?)d" (1 = *) 0xE01D)
+
+ ;; Medial Ha (U+101F)
+ ((0x100A 0x101F) 0x100A 0xE1F3)
+ ("(..?)f" (1 = *) 0xE1F1))))
+
+;; 3rd stage
+;; Reorder Kinzi and Vowel E. Handle Kinzi-vowel combination.
+
+(category
+ (0x1000 0x107F ?O)
+ (0x1000 0x1021 ?C) ; Consonants except for c
+ (0x1001 0x1002 ?c) ; Consonants affecting the shape of
+ (0x1004 ?c) ; the following vowel U+102C
+ (0x1012 ?c)
+ (0x1015 ?c)
+ (0x101D ?c)
+ (0x1008 ?b)
+ (0x100A 0x100D ?b)
+ (0x1020 ?b)
+ (0x1025 ?b)
+ (0x102C ?A) ; Vowel AA
+ (0x102D ?i) ; Vowel I
+ (0x102E ?I) ; Vowel II
+ (0x102F ?u) ; Vowel U
+ (0x1030 ?U) ; Vowel UU
+ (0x1031 ?e) ; Vowel E
+ (0x1032 ?V) ; Vowel AI
+ (0x1036 0x1038 ?D)
+ (0x1039 ?H)
+ (0x200C ?N)
+ (0x200D ?J)
+ (0xE000 0xE3FF ?O)
+ (0xE000 0xE01D ?b)
+ (0xE140 ?B)
+ (0xE1A1 0xE1B0 ?b)
+ (0xE1B1 0xE1BA ?B)
+ (0xE1D1 0xE1F1 ?B)
+ (0xE20D ?b)
+ (0xE390 ?K) ; Kinzi
+ )
+
+(generator
+ (0
+ (cond
+ (" K([CcbB]*)(e)([^ ]*) "
+ | (2 =) (1 = *) (3 kinzi-vowel = *) |)
+ (" K([CcbB]*)([^ ]*) "
+ | (1 = *) (2 kinzi-vowel = *) |)
+ (" ([CcbB]*)(e)([^ ]*) "
+ | (2 =) (1 = *) (3 = *) |)
+ (" ([^ ]*) "
+ = *)
+ ("."
+ =))
+ *)
+
+ (kinzi-vowel
+ (cond
+ ((0x102D) 0xE391)
+ ((0x102E) 0xE391)
+ ((0x1036) 0xE393)
+ 0xE390)))
+
+;; 4th stage
+;; Various glyph substitions.
+
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ |
+ (1
+ (cond
+ ;; Consonant substituion.
+ ((0x1009 0x1039) 0x1025 0x1039)
+ ((0x1009 0xE005) 0xE109 Br>5Bl 0xE005)
+;; ((0x101B 0x102F) 0xE01B 0x102F)
+;; ((0x101B 0x1030) 0xE01B 0x1030)
+;; ((0x1014 0x102F) 0xE140 0x102F)
+;; ((0x1014 0x1030) 0xE140 0x1030)
+
+;; ;; Sign substituion.
+;; ((0x102F 0x1037) 0x102F 0xE137)
+;; ((0x1030 0x1037) 0x1030 0xE137)
+;; ((0xE01D 0x1037) 0xE01D 0xE137)
+;; ((0xE1A1 0x1036 0x1037) 0xE1A1 0x1036 0xE137)
+;; ((0xE1A1 0x1032 0x1037) 0xE1A1 0x1032 0xE137)
+;; ((0xE01D 0x1032 0x1037) 0xE01D 0x1032 0xE137)
+;; ((0xE01D 0x1036 0x1037) 0xE01D 0x1036 0xE137)
+
+ ;; Vowel substituion.
+ ((0xE1F1 0x102F) 0xE1F2)
+ ((0xE1F1 0x102D 0x102F) 0xE1F2 0x102D)
+ ((0xE1F1 0x102E 0x102F) 0xE1F2 0x102E)
+ ((0xE1F1 0x1032 0x102F) 0xE1F2 0x1032)
+ ("BcK?A" = = = =)
+ ("cAH" = 0xE02D)
+ ("cA" = 0xE02C)
+ ("cKA" = = Br>Bl 0xE02C)
+ ((0x1012 0xE012 0x102C 0x1039) = = 0xE02D)
+ ((0x1012 0xE01D 0x102C 0x1039) = = 0xE02D)
+ ((0x1012 0xE012 0x102C) = = 0xE02C)
+ ((0x1012 0xE01D 0x102C) = = 0xE02C)
+ ((0x102D 0x1036) 0xE2D1)
+ ("([bB][^u]*)u" (1 = *) 0xE2F1)
+ ("([bB][^u]*)U" (1 = *) 0xE2F2)
+ ("." =))
+ *)
+ |)
+ ("."
+ =))
+ *))
+
+;; 5th stage
+;; Adjust below characters (U+102F, U+1037, etc)
+
+(category
+ (0x1000 0x107F ?O)
+ (0x200C 0x200D ?O)
+ (0xE000 0xE3FF ?O)
+ (0x1014 ?T) ; tall consonant (substituted)
+ (0x101B ?T)
+ (0x102F 0x1030 ?B) ; below position (substitute tall one)
+ (0x1037 ?b) ; shift to right
+ (0xE01D ?B)
+ (0xE1A1 ?B)
+ (0xE1D1 ?B)
+ (0xE1B1 0xE1BA ?L)
+ (0xE1F1 0xE1F2 ?B)
+ (0xE2F1 0xE2F2 ?L) ; has lower part
+ )
+
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ |
+ (1
+ (cond
+ ("(T)(B)([OL])?(b)?"
+ (1 (cond ((0x1014) 0xE140) ((0x101B) 0xE01B)))
+ (2 =)
+ (3 = *)
+ (4 0xE137))
+ ("([TBL])(O*)?(b)"
+ (1 =) (2 = *) (3 0xE137))
+ ("." =))
+ *)
+ |)
+ ("OO*" = *)
+ ("." =))
+ *))
+
+;; 6th stage
+;; Adjust conbination of normal consonant and wide subconsonant.
+
+(category
+ (0x1000 0x107F ?O)
+ (0x200C 0x200D ?O)
+ (0xE000 0xE3FF ?O)
+ (0x1001 0x1002 ?n)
+ (0x1004 0x1005 ?n)
+ (0x1007 ?n)
+ (0x100E ?n)
+ (0x1012 0x1013 ?n)
+ (0x1015 0x1017 ?n)
+ (0x1019 ?n)
+ (0x101D ?n)
+ (0xE000 ?w)
+ (0xE003 ?w)
+ (0xE006 ?w)
+ (0xE00C ?w)
+ (0xE00F ?w)
+ (0xE010 0xE011 ?w)
+ (0xE018 ?w))
+
+(generator
+ (0
+ (cond
+ (" (n)(w)([^ ]*) "
+ \[ (1 =) (2 Br>17Bl =) (3 = *))
+ (" ([^ ]*) "
+ (1 = *))
+ ("."
+ =))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; coding: utf-8
+;; End:
--- /dev/null
+;; NO-CLT.flt -- Font Layout Table suppressing Complex Text Layout
+;; Copyright (C) 2003, 2004, 2005
+;; National Institute of Advanced Industrial Science and Technology (AIST)
+;; Registration Number H15PRO112
+
+;; This file is 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.
+
+;;; <li> NO-CTL.flt
+;;;
+;;; This is to suppress Complex Text Layout for many scripts. This
+;;; FLT can be used for fonts that have Unicode encoding. Even if a
+;;; glyph in a font has zero width, the glyph is displayed as if it is
+;;; a spacing glyph.
+
+(category
+ (0x0000 0x10FFFF ?C)
+)
+
+(generator
+ (0
+ (cond
+ ("C" [ = ]))
+ *))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; ORYA-OTF.flt -- Font Layout Table for Oriya OpenType font
+;; 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.
+
+;;; <li> ORYA-OTF.flt
+;;;
+;;; For Oriya OpenType fonts to draw the Oriya script. Tested with
+;;; utkalm.ttf <http://oriya.sarovar.org/download/utkalm.ttf.gz>
+
+(font layouter orya-otf nil
+ (font (nil nil unicode-bmp :otf=orya=rphf)))
+
+(category
+ ;; C: consonant (excluding Y and R)
+ ;; R: consonant RA (reph, below)
+ ;; B: consonant (below)
+ ;; Y: consonant YA, YYA (post)
+ ;; n: NUKTA
+ ;; H: HALANT
+ ;; m: MATRA (pre)
+ ;; u: MATRA (above)
+ ;; b: MATRA (below)
+ ;; p: MATRA (post)
+ ;; t: MATRA (two-part)
+ ;; A: vowel modifier (above)
+ ;; a: vowel modifier (post)
+ ;; V: independent vowel
+ ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
+ ;; J: ZWJ (ZERO WIDTH JOINER)
+ ;; E: ELSE
+ ;;
+ (0x200C ?N) ; ZWNJ
+ (0x200D ?J) ; ZWJ
+ (0x0664 0x0665 ?E) ; DANDA, DOUBLE DANDA
+ (0x0B00 0x0B7F ?E) ; ELSE
+ (0x0B01 ?A) ; SIGN CANDRABINDU (above)
+ (0x0B02 0x0B03 ?a) ; SIGN ANUSWAR, VISARGA (post)
+ (0x0B05 0x0B0C ?V) ; LETTER A .. VOCALIC L
+ (0x0B0F 0x0B10 ?V) ; LETTER E .. AI
+ (0x0B13 0x0B14 ?V) ; LETTER O .. AU
+ (0x0B15 0x0B39 ?C) ; LETTER KA .. HA
+ (0x0B24 ?B) ; LETTER TA
+ (0x0B28 ?B) ; LETTER NA
+ (0x0B2C ?B) ; LETTER BA
+ (0x0B2D ?B) ; LETTER BHA
+ (0x0B2E ?B) ; LETTER MA
+ (0x0B2F ?Y) ; LETTER YA
+ (0x0B30 ?R) ; LETTER RA
+ (0x0B32 ?B) ; LETTER LA
+ (0x0B33 ?B) ; LETTER LLA
+ (0x0B35 ?B) ; LETTER VA
+ (0x0B3C ?n) ; SIGN NUKTA
+ (0x0B3E ?p) ; VOWEL SIGN AA (post)
+ (0x0B3F ?u) ; VOWEL SIGN I (above)
+ (0x0B40 ?p) ; VOWEL SIGN II (post)
+ (0x0B41 0x0B43 ?b) ; VOWEL SIGN U, UU, R (below)
+ (0x0B47 ?m) ; VOWEL SIGN E (pre)
+ (0x0B48 0x0B4C ?t) ; VOWEL SIGN AI, O, AU (two-part)
+ (0x0B4D ?H) ; SIGN VIRAMA (HALANT)
+ (0x0B56 ?u) ; AI LENGTH MARK
+ (0x0B57 ?p) ; AU LENGTH MARK
+ (0x0B5C 0x0B5D ?C) ; LETTER RRA, RHA
+ (0x0B5F ?Y) ; LETTER YYA
+ (0x0B60 0x0B61 ?V) ; LETTER VOCALIC RR, LL
+ (0x0B71 ?C) ; LETTER WA
+ (0x0B7E ?x) ; mark #1 (internal use)
+ (0x0B7F ?y) ; mark #2 (internal use)
+ )
+
+;; Step 1 : Syllable identification. Recognised syllables are quoted
+;; by the pseudo character, which is generated by the command "|" and
+;; has the category " " (space).
+(generator
+ (0
+ (cond
+ ;; Case F : Syllables containing an independent vowel.
+ ("(RH)?(V)(a)?(A)?"
+ < |
+ (2 =)
+ (1 = =)
+ (3 =)
+ (4 =)
+ | >)
+
+ ;; Case A-C are for those syllables that end with an explicit vowel
+ ;; mark and/or a vowel modifier. They are divided into three cases
+ ;; for readability of the regular expressions. The leading
+ ;; consonant-Halant repetition is analysed for reordering in the
+ ;; next step. A two-part vowel, if any, is split for
+ ;; canonicalisation.
+
+ ;; Case A : A syllable ending with a vowel modifier.
+ ("(RH)?(([CRBY]n?H[NJ]?)*([CRBY]n?))([mbup]*)(t)?([Aa])"
+ < |
+ (1 = =)
+ (2 set-marks)
+ (5 = *)
+ (6 split)
+ (7 =)
+ | >)
+
+ ;; Case B : A syllable ending with a two-part vowel.
+ ("(RH)?(([CRBY]n?H[NJ]?)*([CRBY]n?))(t)"
+ < |
+ (1 = =)
+ (2 set-marks)
+ (5 split)
+ | >)
+
+ ;; Case C : A syllable ending with other vowel(s). Note that a
+ ;; two-part vowel may be expressed with two vowel marks for
+ ;; backward compatibility.
+ ("(RH)?(([CRBY]n?H[NJ]?)*([CRBY]n?))([mbup]+)"
+ < |
+ (1 = =)
+ (2 set-marks)
+ (5 = *)
+ | >)
+
+ ;; Case E : No explicit vowel nor modifier. If the syllable ends
+ ;; with a consonant, analyse it for reordering in the next step.
+ ;; Otherwise, just identify the syllable without changing anything.
+ ;;1 23 4
+ ("(RH)?(([CRBY]n?H[NJ]?)*[CRBY]n?)(HN|HJ|H)?"
+ < |
+ (1 = =)
+ (2 set-marks)
+ (4 = *)
+ | >)
+
+ ("." =))
+ *)
+
+ ;; Set mark #1 (x) at the position where below consonants begin, and
+ ;; mark #2 (y) at the position to which below and above signs will be
+ ;; moved.
+ (set-marks
+ (cond
+ ;; Ending with Y.
+ ;;1 2 3 45 6
+ ("([CRBY]n?(H[NJ]?Cn?)*)(H)(([RB]H)*)(Y)$"
+ (1 = *) ; prebase & base
+ 0x0B7E ; below begin
+ (4 = *) ; below consonants
+ 0x0B7F ; below end
+ (6 =) ; YA
+ (3 =)) ; moved HALANT
+ ;; Ending with R or B.
+ ;;1 2 3 45
+ ("([CRBY]n?(H[NJ]?Cn?)*)(H)(([RB]H)*[RB])$"
+ (1 = *) ; prebase & base
+ 0x0B7E ; below begin
+ (4 = *) ; below consonants
+ (3 =) ; moved HALANT
+ 0x0B7F) ; below end
+ (".+"
+ = *
+ 0x0B7E ; below begin
+ 0x0B7F))) ; below end
+
+ ;; Split two-part dependent vowel signs for canonicalisation.
+ (split
+ (cond
+ ((0x0B48) 0x0B47 0x0B56)
+ ((0x0B4B) 0x0B47 0x0B3E)
+ ((0x0B4C) 0x0B47 0x0B57)))
+ )
+
+;; Step 2 : Move Reph and Matra if necessary. From now on, we care
+;; only for those syllables that have been identified in Step 1.
+(generator
+ (0
+ (cond
+ ;; Special case: a single consonant and a Halant.
+ (" (.)xy(H[NJ]?) "
+ |
+ (1 =)
+ (2 = *)
+ |)
+
+ ;; This is the most generic pattern. It follows Case A-C and a
+ ;; part of Case E in Step 1. Now Mark #1 is used to indicate the
+ ;; critical part that requires pre-base substitution in the
+ ;; following steps.
+
+ ;; 1 2 3 4 5 6 7 8 9 10 11
+ (" (RH)?([^ xy]+)x([^ y]*)y(YH)?(m)?(b)?(u)?(p)?(A)?(a)?(HN|HJ|H)? "
+ |
+ (5 =) ; [Mpre]
+ ;; We can safely perform Nukta composition here because it does
+ ;; not affect surrounding letters in the syllable. The Akhand
+ ;; ligature operation is also applied here, before applying the
+ ;; half form operation because the Utkal font generates Akhand
+ ;; ligatures directly from the "C H C" sequence, not via the half
+ ;; form.
+ 0x0B7E ; begin Cpre & Cbase
+ (2 otf:orya=nukt,akhn+) ; {Cpre + H} + Cbase
+ 0x0B7E ; end Cpre & Cbase
+ (3 otf:orya=blwf+) ; {Cbelow + H}
+ (6 =) ; [Mbelow]
+ (7 =) ; [Mabove]
+ (1 otf:orya=rphf+) ; [Reph]
+ (4 otf:orya=pstf+) ; [Cpost + H]
+ (8 =) ; [Mpost]
+ (9 =) ; [VMabove]
+ (10 =) ; [VMpost]
+ (11 = *) ; optional HALANT
+ |)
+
+ ;; Syllables that begin with an independent vowel (following up
+ ;; Step 1, Case F). Syllables of this type do not require further
+ ;; modification.
+ (" (V)(RH)(.*) "
+ |
+ (1 =)
+ (2 otf:orya=rphf+)
+ (3 = *)
+ |)
+
+ ("." =))
+ *))
+
+;; Step 3 : Now only those syllables that contain the pseudo character
+;; x require pre-base substition. Unlike the Mukti font for Bengali,
+;; the Utkal font can produce the ligature for "C1 H C2" from
+;; "C1halant" and "C2". If such a ligature is not available, we get a
+;; sequence consisting of "C1halant" and "C2", which is satisfactory.
+
+(generator
+ (0
+ (cond
+ (" (.H)J "
+ |
+ (1 otf:orya=half+)
+ |)
+ (" (.H)N? "
+ |
+ (1 otf:orya=haln+)
+ |)
+ (" ([^x ]?x)([^x ]*)(x[^ ]*) "
+ |
+ (1 = *)
+ (2 pres)
+ (3 = *)
+ |)
+ ("." =))
+ *)
+
+ (pres
+ (cond
+ ("([^NJ]*)(.H)J(.*)"
+ (1 otf:orya=haln,pres+)
+ (2 otf:orya=half+)
+ (3 pres))
+ ("([^N]*)(H)N(.*)"
+ (1 otf:orya=haln,pres+)
+ (2 =)
+ (3 pres))
+ (".*"
+ otf:orya=haln,pres+)))
+
+ )
+
+;; Step 4 : Mpre/Cpre reordering. If the pre-base substitution in
+;; the previous step results in more than one glyph, and there is an
+;; Mpre in this syllable, then move the Mpre before the Cbase.
+;; i.e. [Mpre]{Kh}Kf... -> {Kh}[Mpre]Kf...
+
+(generator
+ (0
+ (cond
+ (" ([^x ])x([^x ]+)([^x ])x([^x ]*) "
+ |
+ (2 = *)
+ (1 =)
+ (3 =)
+ (4 = *)
+ |)
+ (" ([^x ])?x([^x ]*)x([^ ]*) "
+ |
+ (1 =)
+ (2 = *)
+ (3 = *)
+ |)
+ ("." =))
+ *))
+
+;; Step 5 : Substitutions & positioning.
+
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ ;; FIXME : The pres below is for the TTA ligature in the Utkal
+ ;; font. It should be removed once the font is updated.
+ (1 otf:orya=vatu,abvs,blws,psts,pres))
+ ("."
+ [ otf:orya=+ ]))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; SINH-OTF.flt -- Font Layout Table for Sinhala OpenType fonts
+;; Copyright (C) 2004, 2005, 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.
+
+;;; <li> SINH-OTF.flt
+;;;
+;;; For Sinhala OpenType fonts to draw Sinhala.
+;;; A Font is available from <http://sinhala.linux.lk/>.
+
+(font layouter sinh-otf nil
+ (font (nil nil unicode-bmp :otf=sinh=akhn)))
+
+(category
+ ;; V : independent vowels
+ ;; C : consonants
+ ;; H : AL-LAKUNA (virama)
+ ;; m : KOMBUVA
+ ;; M : DIGA KOMBUVA
+ ;; b : below-consonant vowel signs
+ ;; u : above-consonant vowel signs
+ ;; p : post-consonant vowel signs
+ ;; q : AELA-PILLA
+ ;; r : GAYANUKITTA
+ ;; s : KOMBUVA HAA AELA-PILLA
+ ;; t : two-part vowel sign
+ ;; a : AVUSVARAYA & VISARGAYA
+ ;; E : else
+ ;; J : ZERO WIDTH JOINER
+ (0x0D80 0x0DFF ?E)
+ (0x0D82 0x0D83 ?a)
+ (0x0D85 0x0D96 ?V)
+ (0x0D96 0x0DC6 ?C)
+ (0x0DCA ?H)
+ (0x0DCF ?q)
+ (0x0DD0 0x0DD1 ?p)
+ (0x0DD2 0x0DD3 ?u)
+ (0x0DD4 0x0DD6 ?b)
+ (0x0DD8 ?p)
+ (0x0DD9 ?m)
+ (0x0DDA ?t)
+ (0x0DDB ?M)
+ (0x0DDC ?s)
+ (0x0DDD 0x0DDE ?t)
+ (0x0DDF ?r)
+ (0x0DF2 0x0DF3 ?p)
+ (0x200D ?J)
+ )
+
+;; Step 0 : Syllable identification
+(generator
+
+ (0
+ (cond
+ ;; A syllable containing a completely decomposed two-part vowel sign.
+ ("(C(HJ[CR])*)(m(H|qH?|r)a?)"
+ < | (1 otf:sinh=akhn,vatu,pres) (3 = *) | >)
+
+ ;; A syllable containing KOMBUVA HAA AELA-PILLA.
+ ("(C(HJ[CR])*)(s)(H)?(a)?"
+ < | (1 otf:sinh=akhn,vatu,pres) (3 two-part) (4 =) (5 =) | >)
+
+ ;; A syllable with a two-part vowel sign.
+ ("(C(HJ[CR])*)(t)(a)?"
+ < | (1 otf:sinh=akhn,vatu,pres) (3 two-part) (4 =) | >)
+
+ ;; A syllable with a vowel sign and/or a various sign.
+ ("(C(HJ[CR])*)([mMbupqr]a?|a)"
+ < | (1 otf:sinh=akhn,vatu,pres) (3 = *) | >)
+
+ ;; No signs.
+ ("C(HJ[CR])*H?"
+ < | otf:sinh=akhn,vatu,pres | >)
+
+ ;; Independent vowels.
+ ("Va?"
+ < | = * | >)
+
+ ("." =))
+ *)
+
+ ;; Split two-part dependent vowel signs for canonicalisation.
+ (two-part
+ (cond
+ ((0x0DDA) 0x0DD9 0x0DCA)
+ ((0x0DDC) 0x0DD9 0x0DCF)
+ ((0x0DDD) 0x0DD9 0x0DCF 0x0DCA)
+ ((0x0DDE) 0x0DD9 0x0DDF)))
+ )
+
+;; Step 1 : Move pre-consonant signs.
+(generator
+ (0
+ (cond
+ ;; 1 2 3 4 5 6 7 8 9
+ (" ([^ mMbupqr]+)(m|M)?(b)?(u)?(p)?(q)?(r)?(H)?(a)? "
+ | (2 =) (1 = *) (3 =) (4 =) (5 =) (6 =) (7 =) (8 =) (9 =) |)
+ ("." =))
+ *))
+
+;; Step 2 : OTF substitutions.
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ (1 otf:sinh))
+ ("."
+ [ otf:sinh=+ ]))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; SYRC-OTF.flt -- Font Layout Table for Syriac OpenType font
+;; 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.
+
+;;; <li> SYRC-OTF.flt
+;;;
+;;; For Syriac OpenType fonts to draw the Syriac script.
+
+(font layouter syrc-otf nil
+ (font (nil nil unicode-bmp :otf=syrc)))
+
+;; Step 1: Initial, medial, or final.
+
+(category
+ ;; D: Dual-joining
+ ;; R: Right-joining
+ ;; U: Non-joining
+ ;; T: Transparent
+ ;; A: ALAPH
+ ;; r: DALATH, RISH, DOTLESS DALATH RISH
+
+ (0x0700 0x071F ?U)
+ (0x0710 ?A)
+ (0x0711 ?T)
+ (0x0712 0x072E ?D)
+ (0x0715 0x0716 ?r)
+ (0x0717 0x0719 ?R)
+ (0x071E ?R)
+ (0x0728 ?R)
+ (0x072A ?r)
+ (0x072C ?R)
+ (0x072F ?R)
+ (0x0730 0x074A ?T)
+ (0x074D ?R)
+ (0x074E 0x074F ?D)
+
+ (0x0303 ?T)
+ (0x0330 ?T)
+ (0x0304 ?T)
+ (0x0331 ?T)
+ (0x0307 ?T)
+ (0x0323 ?T)
+ (0x0308 ?T)
+ (0x030A ?T)
+ (0x0325 ?T)
+ (0x0324 ?T)
+ (0x032D ?T)
+ (0x032E ?T)
+
+ (0x064B 0x0655 ?T)
+ (0x0670 ?T)
+
+ (0x200C ?U)
+ (0x200D ?D)
+ )
+
+(generator
+ (0
+ (cond
+ ("(r)(T*)(.*)"
+ (1 otf:syrc=isol)
+ (2 = *)
+ (3 dalath-rish))
+
+ ("(D)(T*)([DRAr].*)"
+ (1 otf:syrc=init)
+ (2 = *)
+ (3 join))
+
+ ("(T+)(.*)"
+ (1 = *)
+ (2 disjoin))
+
+ ("(.)(T*)(.*)"
+ (1 otf:syrc=isol)
+ (2 = *)
+ (3 disjoin))))
+
+ (join
+ (cond
+ ("(r)(T*)(.*)"
+ (1 otf:syrc=fina)
+ (2 = *)
+ (3 dalath-rish))
+
+ ("(D)(T*)([DRrA].*)"
+ (1 otf:syrc=medi)
+ (2 = *)
+ (3 join))
+
+ ("(.)(T*)(.*)"
+ (1 otf:syrc=fina)
+ (2 = *)
+ (3 disjoin))))
+
+ (disjoin
+ (cond
+ ("(D)(T*)([DRAr].*)"
+ (1 otf:syrc=init)
+ (2 = *)
+ (3 join))
+
+ ("(r)(T*)(.*)"
+ (1 otf:syrc=isol)
+ (2 = *)
+ (3 dalath-rish))
+
+ ("(A)(T*)([DRAr].*)"
+ (1 otf:syrc=med2)
+ (2 = *)
+ (3 disjoin))
+
+ ("(A)(T*)(.*)"
+ (1 otf:syrc=fin2)
+ (2 = *)
+ (3 disjoin))
+
+ ("(.)(T*)(.*)"
+ (1 otf:syrc=isol)
+ (2 = *)
+ (3 disjoin))))
+
+ (dalath-rish
+ (cond
+ ("(D)(T*)([DRAr].*)"
+ (1 otf:syrc=init)
+ (2 = *)
+ (3 join))
+
+ ("(r)(T*)(.*)"
+ (1 otf:syrc=isol)
+ (2 = *)
+ (3 dalath-rish))
+
+ ("(A)(T*)([DRAr].*)"
+ (1 otf:syrc=med2)
+ (2 = *)
+ (3 disjoin))
+
+ ("(A)(T*)(.*)"
+ (1 otf:syrc=fin3)
+ (2 = *)
+ (3 disjoin))
+
+ ("(.)(T*)(.*)"
+ (1 otf:syrc=isol)
+ (2 = *)
+ (3 disjoin)))))
+
+;; Step 2: Other GSUB features (ligatures, etc.)
+
+(generator
+ (0
+ otf:syrc=rlig,calt,liga,dlig))
+
+;; Step 3: GPOS features.
+
+(generator
+ (0
+ otf:syrc=))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; TAML-CDAC.flt -- Font Layout Table for Tamil (C-DAC font)
+;; Copyright (C) 2003, 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.
+
+;;; <li> TAML-CDAC.flt
+;;;
+;;; For the font TMVL0ntt.ttf (developped by C-DAC, encoding is ISFOC)
+;;; to draw Tamil script. The font is available at:
+;;; <ul>
+;;; <li> infopage: http://www.iiit.net/ltrc/iscii/FAQ.htm#SEC2.1
+;;; <li> download: http://www.iiit.net/ltrc/iscii/iscii_plugin_linux.tar.gz
+;;; </ul>
+
+(font layouter taml-cdac nil
+ (font (nil tm-ttvalluvar apple-roman)))
+
+(category
+ ;; C: CONSONANT
+ ;; I: INDEPENDENT VOWEL
+ ;; R: DEPENDENT VOWEL RIGHT
+ ;; L: DEPENDENT VOWEL LEFT
+ ;; B: DEPENDENT VOWEL LEFT AND RIGHT TYPE 1
+ ;; b: DEPENDENT VOWEL LEFT AND RIGHT TYPE 2
+ ;; V: VIRAMA
+ ;; E: ELSE
+ ;;
+ (0x0B83 ?E)
+ (0x0B85 0x0B8A ?I)
+ (0x0B8E 0x0B90 ?I)
+ (0x0B92 0x0B94 ?I)
+ (0x0B95 ?C)
+ (0x0B99 0x0B9A ?C)
+ (0x0B9C ?C)
+ (0x0B9E 0x0B9F ?C)
+ (0x0BA3 0x0BA4 ?C)
+ (0x0BA8 0x0BAA ?C)
+ (0x0BAE 0x0BB5 ?C)
+ (0x0BB7 0x0BB9 ?C)
+ (0x0BBE 0x0BC2 ?R)
+ (0x0BC6 0x0BC8 ?L)
+ (0x0BCA ?B)
+ (0x0BCB ?b)
+ (0x0BCC ?B)
+ (0x0BCD ?V)
+ (0x0BD7 ?E))
+
+;; CHAR->GLYPH STAGE
+(generator
+ (0
+ (cond
+ ("((CV)*)(C)(R)"
+ (1 consonant-virama *)
+ (3 consonant)
+ (4 dependent-vowel))
+ ("((CV)*)(C)(L)"
+ < |
+ (4 dependent-vowel)
+ (1 consonant-virama *)
+ (3 consonant)
+ | >)
+ ("((CV)*)(C)(B)"
+ < |
+ 0xAA
+ (1 consonant-virama *)
+ (3 consonant)
+ (4 dependent-vowel)
+ | >)
+ ("((CV)*)(C)(b)"
+ < |
+ 0xAB
+ (1 consonant-virama *)
+ (3 consonant)
+ (4 dependent-vowel)
+ | >)
+ ("CV"
+ < consonant-virama >)
+ ("[RLBb]"
+ isolated-dependent-vowel)
+ ("." independent consonant))
+ *)
+
+ (consonant-virama
+ (cond
+ ((0x0B95 0x0BCD) 0xE8 0xA2) ; k
+ ((0x0B99 0x0BCD) 0xE9 0xA2) ; n^
+ ((0x0B9A 0x0BCD) 0xEA 0xA2) ; c
+ ((0x0B9E 0x0BCD) 0xEB 0xA2) ; n~
+ ((0x0B9F 0x0BCD) 0xEC 0xA2) ; t.
+ ((0x0BA3 0x0BCD) 0xED 0xA2) ; n.
+ ((0x0BA4 0x0BCD) 0xEE 0xA2) ; t
+ ((0x0BA8 0x0BCD) 0xEF 0xA2) ; n
+ ((0x0BAA 0x0BCD) 0xF0 0xA2) ; p
+ ((0x0BAE 0x0BCD) 0xF1 0xA2) ; m
+ ((0x0BAF 0x0BCD) 0xF2 0xA2) ; y
+ ((0x0BB0 0x0BCD) 0xF3 0xA2) ; r
+ ((0x0BB2 0x0BCD) 0xF4 0xA2) ; l
+ ((0x0BB5 0x0BCD) 0xF5 0xA2) ; v
+ ((0x0BB4 0x0BCD) 0xF6 0xA2) ; l_
+ ((0x0BB3 0x0BCD) 0xF7 0xA2) ; l.
+ ((0x0BB1 0x0BCD) 0xF8 0xA2) ; r_
+ ((0x0BA9 0x0BCD) 0xA1) ; n_
+ ((0x0BB8 0x0BCD) 0x76) ; s
+ ((0x0BB7 0x0BCD) 0x77) ; s'
+ ((0x0B9C 0x0BCD) 0x78) ; j
+ ((0x0BB9 0x0BCD) 0x79) ; h
+ ))
+
+ (consonant
+ (cond
+ ((0x0B95) 0xE8) ; k
+ ((0x0B99) 0xE9) ; n^
+ ((0x0B9A) 0xEA) ; c
+ ((0x0B9E) 0xEB) ; n~
+ ((0x0B9F) 0xEC) ; t.
+ ((0x0BA3) 0xED) ; n.
+ ((0x0BA4) 0xEE) ; t
+ ((0x0BA8) 0xEF) ; n
+ ((0x0BAA) 0xF0) ; p
+ ((0x0BAE) 0xF1) ; m
+ ((0x0BAF) 0xF2) ; y
+ ((0x0BB0) 0xF3) ; r
+ ((0x0BB2) 0xF4) ; l
+ ((0x0BB5) 0xF5) ; v
+ ((0x0BB4) 0xF6) ; l_
+ ((0x0BB3) 0xF7) ; l.
+ ((0x0BB1) 0xF8) ; r_
+ ((0x0BA9) 0xF9) ; n_
+ ((0x0BB8) 0xFA) ; s
+ ((0x0BB7) 0xFB) ; s'
+ ((0x0B9C) 0xFC) ; j
+ ((0x0BB9) 0xFD) ; h
+ ))
+
+ (dependent-vowel
+ (cond
+ ((0x0BBE) 0xA3) ; a~
+ ((0x0BBF) 0xA4) ; i
+ ((0x0BC0) 0xA6) ; i~
+ ((0x0BC1) 0xA7) ; u
+ ((0x0BC2) 0xA8) ; u~
+ ((0x0BC6) 0xAA) ; e
+ ((0x0BC7) 0xAB) ; e~
+ ((0x0BC8) 0xAC) ; ai
+ ((0x0BCA) 0xA3) ; o (right part)
+ ((0x0BCB) 0xA3) ; o~ (right part)
+ ((0x0BCC) 0xF7) ; au (right part)
+ ))
+
+ (independent
+ (cond
+ ;; VOWELS
+ ((0x0B85) 0xDC) ; a
+ ((0x0B86) 0xDD) ; a~
+ ((0x0B87) 0xDE) ; i
+ ((0x0B88) 0xDF) ; i~
+ ((0x0B89) 0xE0) ; u
+ ((0x0B8A) 0xE1) ; u~
+ ((0x0B8E) 0xE2) ; e
+ ((0x0B8F) 0xE3) ; e~
+ ((0x0B90) 0xE4) ; ai
+ ((0x0B92) 0xE5) ; o
+ ((0x0B93) 0xE6) ; o~
+ ((0x0B94) 0xE5 0xF7) ; au
+ ;; VISARGA
+ ((0x0B83) 0xE7)
+ ))
+
+ (isolated-dependent-vowel
+ (cond
+ ((0x0BBE) 0x81 0xA3) ; a~
+ ((0x0BBF) 0x81 0xA4) ; i
+ ((0x0BC0) 0x81 0xA6) ; i~
+ ((0x0BC1) 0x81 0xA7) ; u
+ ((0x0BC2) 0x81 0xA8) ; u~
+ ((0x0BC6) 0xAA 0x81) ; e
+ ((0x0BC7) 0xAB 0x81) ; e~
+ ((0x0BC8) 0xAC 0x81) ; ai
+ ((0x0BCA) 0xAA 0x81 0xA3) ; o
+ ((0x0BCB) 0xAB 0x81 0xA3) ; o~
+ ((0x0BCC) 0xAA 0x81 0xF7) ; au
+ )))
+
+;; LIGATURE STAGE
+(category
+ ;; C: CONSONANT (except for K, R, S)
+ ;; K: CONSONANT K
+ ;; R: CONSONANT R
+ ;; S: CONSONANT S'
+ ;; V: LIGATURE VOWEL (except for I,i)
+ ;; I: DEPENDENT VOWEL I
+ ;; i: DEPENDENT VOWEL I~
+ ;; L: LEFT PART OF VOWEL
+ ;; v: VIRAMA
+ ;; E: ELSE
+ ;;
+ (0x00 0xFF ?E)
+ (0xA2 ?v)
+ (0xE9 0xFD ?C)
+ (0xE8 ?K)
+ (0xF3 ?R)
+ (0xFB ?S)
+ (0xA4 ?I) ; i
+ (0xA6 ?i) ; i~
+ (0xA7 0xA8 ?V) ; u, u~
+ (0xAA 0xAC ?L)
+ )
+
+(generator
+ (0
+ (cond
+ ;; 1 23 4 5 6
+ (" (L)(([CKRS](v)?)*)(KvS)(.)? "
+ (2 = *) (1 =) (5 0xFE) (6 =))
+ ;; 1 23 4 5
+ (" (L)(([CKRS](v)?)*)([CKRS].?) "
+ (2 = *) (1 =) (5 = =))
+ ("KvS[Iiv]?"
+ ligature-ks)
+ ("[CKRS][IiV]"
+ ligature = =)
+ ("SvRi" 0xFF)
+ ("."
+ =))
+ *)
+
+ (ligature-ks
+ (cond
+ ((0xE8 0xA2 0xFB 0xA4) 0x56) ; ksi
+ ((0xE8 0xA2 0xFB 0xA6) 0x72) ; ksi~
+ ((0xE8 0xA2 0xFB 0xA2) 0x7A) ; ks
+ ((0xE8 0xA2 0xFB) 0xFE) ; ks
+ ))
+
+ (ligature
+ (cond
+ ((0xE8 0xA2 0x76 0xA2) 0x7A) ; ks.
+
+ ((0xE8 0xA4) 0x41) ; ki
+ ((0xE9 0xA4) 0x42) ; n^i
+ ((0xEA 0xA4) 0x43) ; ci
+ ((0xEB 0xA4) 0x44) ; n~i
+ ((0xEC 0xA4) 0xAE) ; t.i
+ ((0xED 0xA4) 0x45) ; n.i
+ ((0xEE 0xA4) 0x46) ; ti
+ ((0xEF 0xA4) 0x47) ; ni
+ ((0xF0 0xA4) 0x48) ; pi
+ ((0xF1 0xA4) 0x49) ; mi
+ ((0xF2 0xA4) 0x4A) ; yi
+ ((0xF3 0xA4) 0x4B) ; ri
+ ((0xF4 0xA4) 0x4C) ; li
+ ((0xF5 0xA4) 0x4D) ; vi
+ ((0xF6 0xA4) 0x4E) ; l_i
+ ((0xF7 0xA4) 0x4F) ; l.i
+ ((0xF8 0xA4) 0x50) ; r_i
+ ((0xF9 0xA4) 0x51) ; n_i
+ ((0xFA 0xA4) 0x52) ; si
+ ((0xFB 0xA4) 0x53) ; s'i
+ ((0xFC 0xA4) 0x54) ; ji
+ ((0xFD 0xA4) 0x55) ; hi
+
+ ((0xE8 0xA6) 0x57) ; ki~
+ ((0xE9 0xA6) 0x58) ; n^i~
+ ((0xEA 0xA6) 0x59) ; ci~
+ ((0xEB 0xA6) 0x5A) ; n~i~
+ ((0xEC 0xA6) 0xAF) ; t.i~
+ ((0xED 0xA6) 0x61) ; n.i~
+ ((0xEE 0xA6) 0x62) ; ti~
+ ((0xEF 0xA6) 0x63) ; ni~
+ ((0xF0 0xA6) 0x64) ; pi~
+ ((0xF1 0xA6) 0x65) ; mi~
+ ((0xF2 0xA6) 0x66) ; yi~
+ ((0xF3 0xA6) 0x67) ; ri~
+ ((0xF4 0xA6) 0x68) ; li~
+ ((0xF5 0xA6) 0x69) ; vi~
+ ((0xF6 0xA6) 0x6A) ; l_i~
+ ((0xF7 0xA6) 0x6B) ; l.i~
+ ((0xF8 0xA6) 0x6C) ; r_i~
+ ((0xF9 0xA6) 0x6D) ; n_i~
+ ((0xFA 0xA6) 0x6E) ; si~
+ ((0xFB 0xA6) 0x6F) ; s'i~
+ ((0xFC 0xA6) 0x70) ; ji~
+ ((0xFD 0xA6) 0x71) ; hi~
+
+ ((0xE8 0xA7) 0xB0) ; ku
+ ((0xE9 0xA7) 0xB1) ; n^u
+ ((0xEA 0xA7) 0xB2) ; cu
+ ((0xEB 0xA7) 0xB3) ; n~u
+ ((0xEC 0xA7) 0xB4) ; t.u
+ ((0xED 0xA7) 0xB5) ; n.u
+ ((0xEE 0xA7) 0xB6) ; tu
+ ((0xEF 0xA7) 0xB8) ; nu
+ ((0xF0 0xA7) 0xB9) ; pu
+ ((0xF1 0xA7) 0xBA) ; mu
+ ((0xF2 0xA7) 0xBB) ; yu
+ ((0xF3 0xA7) 0xBC) ; ru
+ ((0xF4 0xA7) 0xBD) ; lu
+ ((0xF5 0xA7) 0xBE) ; vu
+ ((0xF6 0xA7) 0xBF) ; l_u
+ ((0xF7 0xA7) 0xC0) ; l.u
+ ((0xF8 0xA7) 0xC1) ; r_u
+ ((0xF9 0xA7) 0xC2) ; n_u
+
+ ((0xE8 0xA8) 0xC3) ; ku~
+ ((0xE9 0xA8) 0xC4) ; n^u~
+ ((0xEA 0xA8) 0xC5) ; cu~
+ ((0xEB 0xA8) 0xC6) ; n~u~
+ ((0xEC 0xA8) 0xC7) ; t.u~
+ ((0xED 0xA8) 0xC8) ; n.u~
+ ((0xEE 0xA8) 0xC9) ; tu~
+ ((0xEF 0xA8) 0xCB) ; nu~
+ ((0xF0 0xA8) 0xCC) ; pu~
+ ((0xF1 0xA8) 0xCD) ; mu~
+ ((0xF2 0xA8) 0xCE) ; yu~
+ ((0xF3 0xA8) 0xCF) ; ru~
+ ((0xF4 0xA8) 0xD6) ; lu~
+ ((0xF5 0xA8) 0xD7) ; vu~
+ ((0xF6 0xA8) 0xD8) ; l_u~
+ ((0xF7 0xA8) 0xD9) ; l.u~
+ ((0xF8 0xA8) 0xDA) ; r_u~
+ ((0xF9 0xA8) 0xDB) ; n_u~
+ ))
+ )
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; TAML-OTF.flt -- Font Layout Table for Tamil OpenType fonts
+;; Copyright (C) 2004, 2006, 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.
+
+;;; <li> TAML-OTF.flt
+;;;
+;;; For Tamil OpenType fonts to draw Tamil.
+;;; Fonts are available from <http://sourceforge.net/projects/tamillinux/>.
+
+(font layouter taml-otf nil
+ (font (nil nil unicode-bmp :otf=taml=akhn)))
+
+(category
+ ;; C: general consonant
+ ;; V: independent vowel
+ ;; H: HALANT
+ ;; m: MATRA (pre)
+ ;; u: MATRA (above)
+ ;; b: MATRA (below)
+ ;; p: MATRA (post)
+ ;; A: vowel modifier (above)
+ ;; a: vowel modifier (post)
+ ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
+ ;; J: ZWJ (ZERO WIDTH JOINER)
+ ;; E: ELSE
+ ;;
+ (0x200C ?N) ; ZWNJ
+ (0x200D ?J) ; ZWJ
+ (0x0964 ?E) ; DANDA
+ (0x0965 ?E) ; DOUBLE DANDA
+ (0x0B80 0x0BFF ?E) ; ELSE
+ (0x0B85 0x0B94 ?V) ; LETTER AA .. LETTER AU
+ (0x0B95 0x0BB9 ?C) ; LETTER KA .. LETTER HA
+ (0x0BBE ?p) ; VOWEL SIGN AA (post)
+ (0x0BBF ?p) ; VOWEL SIGN I (post)
+ (0x0BC0 ?u) ; VOWEL SIGN II (above)
+ (0x0BC1 ?b) ; VOWEL SIGN U (below)
+ (0x0BC2 ?b) ; VOWEL SIGN UU (below)
+ (0x0BC6 0x0BC8 ?m) ; VOWEL SIGN E, EE, AI (pre)
+ (0x0BCA 0x0BCC ?t) ; VOWEL SIGN O, OO, AU (two-part)
+ (0x0BCD ?H) ; VIRAMA
+ (0x0BD7 ?p) ; AU LENGTH MARK (post)
+ )
+
+;; Step 1 : Syllable identification.
+(generator
+ (0
+ (cond
+ ;; Special ligature SRI
+ ((0x0BB8 0x0BCD 0x0BB0 0x0BC0)
+ otf:taml=akhn)
+
+ ;; A syllable ending with a two-part vowel sign.
+ ("((CH)*C)(t)"
+ < | (1 otf:taml=akhn) (3 two-part) | >)
+
+ ;; A syllable ending with a vowel sign.
+ ("((CH)*C)([mubp])"
+ < | (1 otf:taml=akhn) (3 =) | >)
+
+ ;; No vowel sign.
+ ("(CH)*CH?"
+ < | otf:taml=akhn | >)
+
+ ;; A variation of AU.
+ ((0x0B92 0x0BD7)
+ 0x0B94)
+
+ ("." =))
+ *)
+
+ (two-part
+ (cond
+ ((0x0BCA)
+ 0x0BC6 0x0BBE)
+ ((0x0BCB)
+ 0x0BC7 0x0BBE)
+ ((0x0BCC)
+ 0x0BC6 0x0BD7))))
+
+;; Step 2 : Matra movements.
+(generator
+ (0
+ (cond
+ (" ([^ mubp]*)([^ mubp])(m)?([ubp])? "
+ | (1 = *) (3 =) (2 =) (4 =) |)
+ ("." =))
+ *))
+
+;; Step 3 : OTF substitutions and positionings.
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ (1 otf:taml))
+ ("."
+ [ otf:taml=+ ]))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; TELU-OTF.flt -- Font Layout Table for Telugu 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.
+
+;;; <li> TELU-OTF.flt
+;;;
+;;; For Telugu OpenType fonts to draw Telugu.
+;;; Designed for Pothana2000.ttf <http://www.kavya-nandanam.com/>
+
+(font layouter telu-otf nil
+ (font (nil nil unicode-bmp :otf=telu=haln)))
+
+(category
+ ;; C: general consonant
+ ;; R: no below-base consonat (RRA, NNNA, LLLA)
+ ;; H: HALANT
+ ;; u: MATRA (above)
+ ;; b: MATRA (below)
+ ;; p: MATRA (post)
+ ;; t: MATRA (two-part)
+ ;; a: vowel modifier (post)
+ ;; V: independent vowel
+ ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
+ ;; J: ZWJ (ZERO WIDTH JOINER)
+ ;; E: ELSE
+ ;;
+ (0x200C ?N) ; ZWNJ
+ (0x200D ?J) ; ZWJ
+ (0x0964 ?E) ; DANDA
+ (0x0965 ?E) ; DOUBLE DANDA
+ (0x0C00 0x0C7F ?E) ; ELSE
+ (0x0C01 0x0C03 ?a) ; post signs
+ (0x0C05 0x0C14 ?V) ; LETTER A .. LETTER AU
+ (0x0C15 0x0C39 ?C) ; LETTER KA .. LETTER HA
+ (0x0C29 ?R) ; LETTER NNNA
+ (0x0C31 ?R) ; LETTER RRA
+ (0x0C34 ?R) ; LETTER LLLA
+ (0x0C3E 0x0C40 ?u) ; VOWEL SIGN AA, I, II (above)
+ (0x0C41 0x0C44 ?p) ; VOWEL SIGN U, UU, R, RR (post)
+ (0x0C46 0x0C47 ?u) ; VOWEL SIGN E, EE (above)
+ (0x0C48 ?t) ; VOWEL SIGN AI (two-part)
+ (0x0C4A 0x0C4C ?u) ; VOWEL SIGN O, OO, AU (above)
+ (0x0C4D ?H) ; SIGN VIRAMA (HALANT)
+ (0x0C55 ?u) ; LENGTH MARK (above)
+ (0x0C56 ?b) ; AI LENGTH MARK (below)
+ (0x0C60 0x0C61 ?V) ; LETTER VOCALIC RR, LL
+ (0x0C7E ?Y) ; internal use
+ (0x0C7F ?X) ; internal use
+ )
+
+;; Step 1 : Syllable identification and Halant movement.
+(generator
+ (0
+ (cond
+ ;; A syllable containing a two-part vowel sign.
+ ("([CR](HC)*)(t)(a)?"
+ < | (1 move-base-Halant) (3 0x0C46 0x0C56) (4 =) | >)
+
+ ;; A syllable ending with vowel signs and/or a vowel modifier.
+ ("([CR](HC)*)([ubp]+a?|a)"
+ < | (1 move-base-Halant) (3 = *) | >)
+
+ ;; Forced Halant form
+ ("((RH)?(CH)*)(CH)N"
+ (1 < | move-base-Halant | >)
+ (4 < | move-base-Halant | >))
+
+ ;; Forced Below form
+ ("((RH)?(CH)*)(CH)J"
+ (1 < | move-base-Halant >)
+ (4 < | otf:telu=blwf | >))
+
+ ;; A syllable without a vowel sign nor a vowel modifier.
+ ("[CR](HC)*H?"
+ < | move-base-Halant | >)
+
+ ;; A syllable starting with an independent vowel.
+ ("Va?"
+ < | = * | > )
+
+ ("." =))
+ *)
+
+ ;; Move Halant on the base consonant to the tail if the syllable ends
+ ;; with a consonant.
+ ;; A leading 0x0C7F means Halant movement.
+ ;; A leading 0x0C7E means a syllable ending with a Halant.
+ (move-base-Halant
+ (cond
+ (".*H$"
+ 0x0C7E = *)
+ ("(.)(H)(.*)"
+ 0x0C7F (1 =) (3 = *) (2 =))
+ (".*"
+ = *))))
+
+;; Step 2 : Move Matra if applicable.
+;; The base consonant in a Halant-ending syllable is changed into Halant form.
+(generator
+ (0
+ (cond
+ ;; 1 2 3 4 5 6
+ (" X(.)([CH]*)(u)?(b)?(p)?(a)? "
+ | (1 =) (3 =) (4 =) (5 =) (2 = *) (6 =) |)
+ (" Y(..)([^ ]*) "
+ | (1 otf:telu=haln) (2 = *) |)
+ ("." =))
+ *))
+
+;; Step 3 : Drive OTF tables.
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ (1 otf:telu))
+ ("."
+ [ otf:telu=+ ]))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; THAA.flt -- Font Layout Table for Thaana OpenType font
+;; Copyright (C) 2004, 2005, 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.
+
+;;; <li> THAA-OTF.flt
+;;;
+;;; For Thaana OpenType fonts to draw the Thaana script.
+
+(font layouter thaa-otf nil
+ (font (nil nil unicode-bmp :otf=thaa)))
+
+(category
+ (0x0780 0x07a5 ?c) ; consonants
+ (0x07a6 0x07b0 ?v) ; vowels
+ (0x07b1 ?c) ; consonant
+ )
+
+;; Grouping.
+(generator
+ (0
+ (cond
+ ;; GPOS of OTF wil override this combining rule.
+ ("cv" < = Bl.Bl = >)
+ ("v" [ = ])
+ ("." =))
+ *))
+
+;; Drive OTF.
+(generator
+ (0
+ otf:thaa=+mark))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; THAI-GENERIC.flt -- Font Layout Table for Thai (proportional font)
+;; Copyright (C) 2005, 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.
+
+;;; <li> THAI-GENERIC.flt
+;;;
+;;; For the Thai proportional fonts to draw Thai script.
+
+(font layouter thai-generic nil
+ (font (nil nil unicode-bmp :lang=th)))
+
+(category
+ ;; C: CONSONANT normal
+ ;; c: CONSONANT tall
+ ;; d: CONSONANT deep
+ ;; A: SARA-AM
+ ;; V: VOWEL upper, NIKHAHIT, and YAMAKKAN
+ ;; v: VOWEL lower
+ ;; T: TONE
+ ;; I: OTHER INDEPENDENT
+ (0x0E01 0x0E2E ?C)
+ (0x0E0D 0x0E10 ?d)
+ (0x0E1B ?c)
+ (0x0E1D ?c)
+ (0x0E1F ?c)
+ (0x0E2C ?c)
+ (0x0E2F 0x0E32 ?I)
+ (0x0E31 ?V)
+ (0x0E33 ?A)
+ (0x0E34 0x0E37 ?V)
+ (0x0E38 0x0E3A ?v)
+ (0x0E3F 0x0E46 ?I)
+ (0x0E47 ?V)
+ (0x0E48 0x0E4C ?T)
+ (0x0E4D 0x0E4E ?V)
+ (0x0E4F 0x0E5B ?I))
+
+(generator
+ (0
+ (cond
+ ("([Cd])(T)?(A)"
+ < (1 = 0x0E4D) (2 tr+bl =) (3 0x0E32) > )
+ ("(c)(T)?(A)"
+ < (1 = Br<13Bl 0x0E4D) (2 tr+<13bl =) (3 0x0E32) > )
+ ("(C[vV]?)(T)?"
+ < (1 = =) (2 tr+bl =) > )
+ ("(c)([vV])?(T)?"
+ < (1 = *) (2 (cond ("v" =) ("." Br<8Bl =))) (3 tr+<8bl =) > )
+ ("(d)([vV])?(T)?"
+ < (1 = *) (2 (cond ("v" br-tl =) ("." =))) (3 tr+bl =) > )
+ ("[VvTA]"
+ [ = ])
+ ("."
+ =))
+ *))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; THAI-NORASI.flt -- Font Layout Table for Thai (Norasi font)
+;; Copyright (C) 2003, 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.
+
+;;; <li> THAI-NORASI.flt
+;;;
+;;; For the Thai Norasi family fonts to draw Thai script. The fonts are
+;;; available at:
+;;; <ul>
+;;; <li> infopage: <http://packages.debian.org/stable/x11/xfonts-thai-ttf.html>
+;;; </ul>
+
+(font layouter thai-norasi nil
+ (font (nil norasi unicode-bmp)))
+
+;; 1st stage: basic composition of CVT
+(category
+ ;; C: CONSONANT
+ ;; V: VOWEL upper and lower
+ ;; A: SARA-AM
+ ;; T: TONE
+ ;; E: else
+ (0x0E00 0x0E5F ?E)
+ (0x0E01 0x0E2E ?C)
+ (0x0E31 ?V)
+ (0x0E33 ?A)
+ (0x0E34 0x0E3A ?V)
+ (0x0E47 ?V)
+ (0x0E48 0x0E4E ?T)
+ )
+
+(generator
+ (0
+ (cond
+ ("(C)(T)?(A)" ; SARA-AM -> NIKHAHIT+SARA-AA
+ (1 = 0x0E4D) (2 =) (3 0x0E32))
+ ("(C)(T)(V)?" ; CTV -> CVT
+ (1 =) (3 =) (2 =))
+ ("(C)(V)?(T)?"
+ (1 =) (2 =) (3 =))
+ ("[^C]"
+ [ = ]))
+ *))
+
+(category
+ ;; C: CONSONANT tall
+ ;; c: CONSONANT normal
+ ;; d: CONSONANT deep
+ ;; V: VOWEL upper, NIKHAHIT, and YAMAKKAN
+ ;; v: VOWEL lower
+ ;; T: TONE
+ ;; E: ELSE
+ (0x0E00 0x0E5F ?E)
+ (0x0E01 0x0E2E ?c)
+ (0x0E0D 0x0E10 ?d)
+ (0x0E1B ?C)
+ (0x0E1D ?C)
+ (0x0E1F ?C)
+ (0x0E2C ?C)
+ (0x0E31 ?V)
+ (0x0E34 0x0E37 ?V)
+ (0x0E38 0x0E3A ?v)
+ (0x0E47 ?V)
+ (0x0E48 0x0E4C ?T)
+ (0x0E4D 0x0E4E ?V))
+
+(generator
+ (0
+ (cond
+ ("(C)(V)(T)?"
+ < (1 =) (2 vowel-upper-left) (3 tone-high-left) >)
+ ("(C)(v)?(T)?"
+ < (1 =) (2 =) (3 tone-low-left) >)
+ ("([cd])(V)(T)?"
+ < (1 =) (2 =) (3 =) >)
+ ("(c)(v)?(T)?"
+ < (1 =) (2 =) (3 tone-low) >)
+ ("(d)(v)?(T)?"
+ < (1 =) (2 vowel-deep) (3 tone-low) >)
+ ("[VvT]"
+ [ = ])
+ ("."
+ =))
+ *)
+
+ (vowel-upper-left
+ (cond
+ ((0x0E31) =)
+ ((range 0x0E34 0x0E37) 0xF701)
+ ((0x0E47) =)
+ ((0x0E4D) 0xF711)
+ ((0x0E4E) =)))
+
+ (vowel-deep
+ ((range 0x0E38 0x0E3A) 0xF718))
+
+ (tone-high-left
+ ((range 0x0E48 0x0E4C) 0xF713))
+
+ (tone-low-left
+ ((range 0x0E48 0x0E4C) 0xF705))
+
+ (tone-low
+ ((range 0x0E48 0x0E4C) 0xF70A)))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; THAI-OTF.flt -- Font Layout Table for Thai
+;; Copyright (C) 2006, 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.
+
+;;; <li> THAI-OTF.flt
+
+(font layouter thai-otf nil
+ (font (nil nil unicode-bmp :otf=thai+mark,mkmk)))
+
+(category
+ ;; C: CONSONANT
+ ;; A: SARA-AM
+ ;; i: SARA I, SARA U (below vowel 1, above vowel 1)
+ ;; I: SARA II, SARA UEE (above vowel 3)
+ ;; U: MAIHAN-AKAT, SARA UE, SARA UU (above vowel 2, below vowel 2)
+ ;; P: PHINTHU, YAMAKKARN (below diacritic, above diacritic 3)
+ ;; T: TONE
+ ;; N: THANTHAKHAT, NIKHAHIT (above diacritic 1)
+ ;; M: MAITAIKHU (above diacritic 2)
+ ;; X: OTHER INDEPENDENT
+ (0x0E01 0x0E23 ?C)
+ (0x0E24 ?X)
+ (0x0E25 ?C)
+ (0x0E26 0x0E2E ?C)
+ (0x0E2F 0x0E30 ?X)
+ (0x0E31 ?U) ;; av2
+ (0x0E32 ?X)
+ (0x0E33 ?A)
+ (0x0E34 ?i) ;; av1
+ (0x0E35 ?I) ;; av3
+ (0x0E36 ?U) ;; av2
+ (0x0E37 ?I) ;; av3
+ (0x0E38 ?i) ;; bv1
+ (0x0E39 ?U) ;; bv2
+ (0x0E3A ?P) ;; bd
+ (0x0E3F 0x0E46 ?X)
+ (0x0E47 ?M) ;; ad2
+ (0x0E48 0x0E4B ?T)
+ (0x0E4C 0x0E4D ?N) ;; ad1
+ (0x0E4E ?P) ;; ad3
+ (0x0E4F 0x0E5B ?X)
+ (0x25CC ?X))
+
+;; Perform GSUB. The decomposition of AM is done by hand because it
+;; requires reordering in addition to decomposition.
+
+(generator
+ (0
+ (cond
+ ("(C)(T)?A"
+ < | (1 =) 0x0E4D (2 =) 0x0E32 | > )
+ ("C[UiI]T"
+ < | = * | > )
+ ("CiN"
+ < | = * | > )
+ ("CIM"
+ < | = * | > )
+ ("C[iIUPTNM]?"
+ < | = * | > )
+ ("[iIUPTNM]"
+ < | 0x25CC = | > )
+ ("."
+ =))
+ *))
+
+;; Perform GPOS.
+
+(generator
+ (0
+ (cond
+ (" ([^ ]*) "
+ (1 otf:thai))
+ ("."
+ [ otf:thai=+ ]))
+ *))
+
+;; Local Variables:
+;; mode: emacs-lisp
+;; End:
--- /dev/null
+;; THAI-TIS620.flt -- Font Layout Table for Thai (TIS620 font)
+;; Copyright (C) 2003, 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.
+
+;;; <li> THAI-TIS620.flt
+;;;
+;;; For fixed width fonts of TIS620 encoding to draw Thai script.
+
+(font layouter thai-tis620 nil
+ (font (tis620.2529-1)
+ (tis620.2533-0)))
+
+(category
+ ;; C: CONSONANT
+ ;; V: VOWEL UPPER
+ ;; v: VOWEL LOWER
+ ;; T: TONE
+ ;; I: INDEPENDENT
+ ;;
+ (0x0E01 0x0E2E ?C)
+ (0x0E2F 0x0E5B ?I)
+ (0x0E31 ?V)
+ (0x0E34 0x0E37 ?V)
+ (0x0E38 0x0E3A ?v)
+ (0x0E47 ?V)
+ (0x0E48 0x0E4E ?T)
+ )
+
+(generator
+ (0
+ (cond
+ ("C([vV])?T?"
+ independent dependent * )
+ ("[^C]*"
+ independent *))
+ *)
+
+ (independent
+ ((range 0x0E00 0x0E5F) 0xA0))
+
+ (dependent
+ (cond
+ ((0x0E31) tc+bc 0xD1)
+ ((0x0E34) tc+bc 0xD4)
+ ((0x0E35) tc+bc 0xD5)
+ ((0x0E36) tc+bc 0xD6)
+ ((0x0E37) tc+bc 0xD7)
+ ((0x0E38) bc-tc 0xD8)
+ ((0x0E39) bc-tc 0xD9)
+ ((0x0E3A) bc-tc 0xDA)
+ ((0x0E47) tc+bc 0xE7)
+ ((0x0E48) tc+bc 0xE8)
+ ((0x0E49) tc+bc 0xE9)
+ ((0x0E4A) tc+bc 0xEA)
+ ((0x0E4B) tc+bc 0xEB)
+ ((0x0E4C) tc+bc 0xEC)
+ ((0x0E4D) tc+bc 0xED)
+ ((0x0E4E) tc+bc 0xEE))))
+
+;; Local Variables:
+;; mode: lisp
+;; End:
--- /dev/null
+;; TIBT-MTIB.flt -- Font Layout Table for Tibetan (Tomabechi font)
+;; Copyright (C) 2003, 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.
+
+;;; <li> TIBT-MTIB.flt
+;;;
+;;; For the Tibetan TrueType font developped by Dr. Tomabechi to draw
+;;; Tibetan script. The font is available at:
+;;; <ul>
+;;; <li> infopage: http://www.m17n.org/emacs-ttf/
+;;; <li> download: http://www.m17n.org/emacs-ttf/fonts/tibetan/mtib.ttf
+;;; </ul>
+
+(font layouter tibt-mtib nil
+ (font (nil mtib unicode-bmp)))
+
+(category
+ ;; Tibetan character category for rendering
+ ;; C: CONSONANTS (except R)
+ ;; R: LETTER RA (RA-MGO)
+ ;; S: SUBJOINED CONSONANTS (except s)
+ ;; s: SUBJOINED CONSONANTS (don't modify RA-MGO)
+ ;; V: VOWEL (except a and A)
+ ;; a: VOWEL SIGN A (invisible when composed)
+ ;; A: VOWEL SIGN AA (don't make preceding C shorter)
+ ;; M: MODIFIER
+ ;; E: ELSE
+ ;;
+ (0x0F00 0x0FCF ?E) ; ELSE
+ (0x0F19 ?M) ; ASTROLOGICAL SIGN SDONG TSHUGS
+ (0x0F35 ?M) ; MARK NGAS BZUNG NYI ZLA
+ (0x0F37 ?M) ; MARK NGAS BZUNG SGOR RTAGS
+ (0x0F39 ?M) ; MARK TSA -PHRU
+ (0x0F40 0x0F6A ?C) ; LETTER KA .. LETTER FIXED-FORM RA
+ (0x0F62 ?R) ; LETTER RA
+ (0x0F70 ?a) ; VOWEL SIGN A
+ (0x0F71 ?A) ; VOWEL SIGN AA
+ (0x0F72 0x0F7D ?V) ; VOWEL SIGN I .. VOWEL SIGN OO
+ (0x0F7E ?M) ; SIGN RJES SU NGA RO
+ (0x0F80 ?V) ; VOWEL SIGN REVERSED I
+ (0x0F81 ?V) ; VOWEL SIGN REVERSED II
+ (0x0F82 ?M) ; SIGN NYI ZLA NAA DA
+ (0x0F83 ?M) ; SIGN SNA LDAN
+ (0x0F84 ?V) ; MARK HALANTA
+ ;; SIGN LCI RTAGS .. SIGN GRU MED RGYINGS
+ (0x0F86 0x0F8B ?M)
+ ;; SUBJOINED LETTER KA .. SUBJOINED LETTER FIXED-FORM RA
+ (0x0F90 0x0FBC ?s)
+ (0x0FAD ?S)
+ (0x0FB1 0x0FB2 ?S)
+ (0x0FC6 ?M))
+
+(generator
+ (0
+ (cond
+ ("[CR][Ss]*[VaA]*M*"
+ <
+ (cond
+ ("R[^SA].*" ; ར[^ྭྱྲཱ]
+ ((0x0F62) 0xE083) ; convert ར to upper form
+ subjoined *
+ dependent-vowel-modifier *)
+ (".A.*" ; Cཱ (don't make C shorter)
+ =
+ dependent-vowel-modifier *)
+ (".[Ss].*"
+ |
+ short-consonant
+ subjoined *
+ dependent-vowel-modifier *
+ |)
+ (".*"
+ =
+ dependent-vowel-modifier * )
+ )
+ >)
+ ("[VaAM]"
+ < 0xE07A dependent-vowel-modifier >)
+ ("[Ss]"
+ < 0xE07A subjoined >)
+ ("."
+ =))
+ *)
+
+ (short-consonant
+ (cond
+ ((0x0F5D) 0x0FBA)
+ ((0x0F61) 0x0FBB)
+ ((0x0F62) 0x0FBC)
+ ((0x0F6A) 0x0FBC)
+ ((range 0x0F40 0x0F69) 0x0F90)))
+
+ (subjoined
+ ((range 0x0F90 0x0FB9) bc.tc =))
+
+ (dependent-vowel-modifier
+ (cond
+ ((0x0F18) bl.tc =)
+ ((0x0F19) bc.tc =)
+ ((0x0F35) bc.tc =)
+ ((0x0F37) bc.tc =)
+ ((0x0F39) tc.bc =)
+ ((0x0F70) ) ; invisible
+ ((0x0F71) bc.tc =)
+ ((0x0F72) tc.bc =)
+ ((0x0F73) bc.tc 0x0F71 tc.bc 0x0F72)
+ ((0x0F74) bc.tc =)
+ ((0x0F75) bc.tc =)
+ ((0x0F76) bc.tc 0x0FB2 tc.bc 0x0F72)
+ ((0x0F77) bc.tc 0x0FB2 bc.tc 0x0F71 tc.bc 0x0F80)
+ ((0x0F78) bc.tc 0x0FB3 tc.bc 0x0F80)
+ ((0x0F79) bc.tc 0x0FB3 bc.tc 0x0F71 tc.bc 0x0F80)
+ ((0x0F7A) tc.bc =)
+ ((0x0F7B) tc.bc =)
+ ((0x0F7C) tc.bc =)
+ ((0x0F7D) tc.bc =)
+ ((0x0F7E) tc.bc =)
+ ((0x0F80) tc.bc =)
+ ((0x0F81) bc.tc 0x0F71 tc.bc =)
+ ((0x0F82) tc.bc =)
+ ((0x0F83) tc.bc =)
+ ((0x0F84) bc.tc =)
+ ((0x0F86) tc.bc =)
+ ((0x0F87) tc.bc =)
+ ((0x0F88) tc.bc =)
+ ((0x0F89) tc.bc =)
+ ((0x0F8A) tc.bc =)
+ ((0x0F8B) tc.bc =)
+ ((0x0FC6) bc.tc =))))
+
+(category
+ (0x000 0xFFFF ?G))
+
+(generator
+ (0
+ (cond
+ (" (G*) "
+ (1 precomposed = *))
+ ("[^ ]*"
+ = *))
+ *)
+
+ (precomposed
+ (cond
+ ((0x0F90 0x0FAD) 0xE000)
+ ((0x0F90 0x0FB1) 0xE010)
+ ((0x0F90 0x0FB2) 0xE018)
+ ((0x0F90 0x0FB3) 0xE026)
+ ((0x0F91 0x0FAD) 0xE001)
+ ((0x0F91 0x0FB1) 0xE011)
+ ((0x0F91 0x0FB2) 0xE019)
+ ((0x0F92 0x0FAD) 0xE002)
+ ((0x0F92 0x0FB1) 0xE012)
+ ((0x0F92 0x0FB2 0x0FAD) 0xE025)
+ ((0x0F92 0x0FB2) 0xE01A)
+ ((0x0F92 0x0FB3) 0xE027)
+ ((0x0F95 0x0FAD) 0xE003)
+ ((0x0F97 0x0FB2) 0xE060)
+ ((0x0F99 0x0FAD) 0xE004)
+ ((0x0F9F 0x0FAD) 0xE005)
+ ((0x0F9F 0x0FB2) 0xE01B)
+ ((0x0FA0 0x0FB2) 0xE01C)
+ ((0x0FA1 0x0FAD) 0xE006)
+ ((0x0FA1 0x0FB2) 0xE01D)
+ ((0x0FA4 0x0FB1) 0xE013)
+ ((0x0FA4 0x0FB2) 0xE01E)
+ ((0x0FA5 0x0FB1 0x0FAD) 0xE017)
+ ((0x0FA5 0x0FB1) 0xE014)
+ ((0x0FA5 0x0FB2) 0xE01F)
+ ((0x0FA6 0x0FB1) 0xE015)
+ ((0x0FA6 0x0FB2) 0xE020)
+ ((0x0FA6 0x0FB3) 0xE028)
+ ((0x0FA8 0x0FB1) 0xE016)
+ ((0x0FA8 0x0FB2) 0xE021)
+ ((0x0FA9 0x0FAD) 0xE007)
+ ((0x0FAA 0x0FAD) 0xE008)
+ ((0x0FAB 0x0FB2) 0xE061)
+ ((0x0FAE 0x0FAD) 0xE009)
+ ((0x0FAF 0x0FAD) 0xE00A)
+ ((0x0FAF 0x0FB3) 0xE029)
+ ((0x0FB2 0x0F90 0x0FB1) 0xE03A)
+ ((0x0FB2 0x0F90) 0xE02C)
+ ((0x0FB2 0x0F92 0x0FAD) 0xE038)
+ ((0x0FB2 0x0F92 0x0FB1) 0xE03B)
+ ((0x0FB2 0x0F92) 0xE02D)
+ ((0x0FB2 0x0F94) 0xE02E)
+ ((0x0FB2 0x0F97) 0xE02F)
+ ((0x0FB2 0x0F99) 0xE030)
+ ((0x0FB2 0x0F9F) 0xE031)
+ ((0x0FB2 0x0FA1) 0xE032)
+ ((0x0FB2 0x0FA3) 0xE033)
+ ((0x0FB2 0x0FA6) 0xE034)
+ ((0x0FB2 0x0FA8 0x0FB1) 0xE03C)
+ ((0x0FB2 0x0FA8) 0xE035)
+ ((0x0FB2 0x0FA9 0x0FAD) 0xE039)
+ ((0x0FB2 0x0FA9) 0xE036)
+ ((0x0FB2 0x0FAB) 0xE037)
+ ((0x0FB2 0x0FAD) 0xE00B)
+ ((0x0FB2 0x0FB3) 0xE02A)
+ ((0x0FB3 0x0F90) 0xE03D)
+ ((0x0FB3 0x0F92) 0xE03E)
+ ((0x0FB3 0x0F94) 0xE03F)
+ ((0x0FB3 0x0F95) 0xE040)
+ ((0x0FB3 0x0F97) 0xE041)
+ ((0x0FB3 0x0F9F) 0xE042)
+ ((0x0FB3 0x0FA1) 0xE043)
+ ((0x0FB3 0x0FA4) 0xE044)
+ ((0x0FB3 0x0FA6) 0xE045)
+ ((0x0FB3 0x0FAD) 0xE00C)
+ ((0x0FB3 0x0FB7) 0xE046)
+ ((0x0FB4 0x0FAD) 0xE00D)
+ ((0x0FB4 0x0FB2) 0xE022)
+ ((0x0FB6 0x0F90 0x0FB1) 0xE052)
+ ((0x0FB6 0x0F90 0x0FB2) 0xE057)
+ ((0x0FB6 0x0F90) 0xE047)
+ ((0x0FB6 0x0F92 0x0FB1) 0xE053)
+ ((0x0FB6 0x0F92 0x0FB2) 0xE058)
+ ((0x0FB6 0x0F92) 0xE048)
+ ((0x0FB6 0x0F94) 0xE049)
+ ((0x0FB6 0x0F99) 0xE04A)
+ ((0x0FB6 0x0F9F) 0xE04B)
+ ((0x0FB6 0x0FA1) 0xE04C)
+ ((0x0FB6 0x0FA3 0x0FB2) 0xE059)
+ ((0x0FB6 0x0FA3) 0xE04D)
+ ((0x0FB6 0x0FA4 0x0FB1) 0xE054)
+ ((0x0FB6 0x0FA4 0x0FB2) 0xE05A)
+ ((0x0FB6 0x0FA4) 0xE04E)
+ ((0x0FB6 0x0FA6 0x0FB1) 0xE055)
+ ((0x0FB6 0x0FA6 0x0FB2) 0xE05B)
+ ((0x0FB6 0x0FA6) 0xE04F)
+ ((0x0FB6 0x0FA8 0x0FB1) 0xE055)
+ ((0x0FB6 0x0FA8 0x0FB2) 0xE05C)
+ ((0x0FB6 0x0FA8) 0xE050)
+ ((0x0FB6 0x0FA9) 0xE051)
+ ((0x0FB6 0x0FAD) 0xE00E)
+ ((0x0FB6 0x0FB2) 0xE023)
+ ((0x0FB6 0x0FB3) 0xE02B)
+ ((0x0FB7 0x0FAD) 0xE00F)
+ ((0x0FB7 0x0FB2) 0xE024))))
+
+;; Local Variables:
+;; mode: lisp
+;; coding: utf-8
+;; End:
--- /dev/null
+;; TIBT-MULE.flt -- Font Layout Table for Tibetan (muletibetan font)
+;; Copyright (C) 2003, 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.
+
+;;; <li> TIBT-MULE.flt
+;;;
+;;; For the muletibetan font developped by Dr. Tomabechi to draw Tibetan
+;;; script. The font is available at:
+;;; <ul>
+;;; <li> infopage: http://www.gnu.org/directory/Localization/intlfonts.html
+;;; <li> download: ftp://ftp.gnu.org/pub/gnu/intlfonts/intlfonts-1.2.1.tar.gz
+;;; </ul>
+
+(font layouter tibt-mule nil
+ (font (muletibetan-2)))
+
+(category
+ ;; Tibetan character category for rendering
+ ;; C: CONSONANTS (except R)
+ ;; R: LETTER RA (RA-MGO)
+ ;; S: SUBJOINED CONSONANTS (except s)
+ ;; s: SUBJOINED CONSONANTS (don't modify RA-MGO)
+ ;; V: VOWEL (except a and A)
+ ;; a: VOWEL SIGN A (invisible when composed)
+ ;; A: VOWEL SIGN AA (don't make preceding C shorter)
+ ;; M: MODIFIER
+ ;; E: ELSE
+ ;;
+ (0x0F00 0x0FCF ?E) ; default
+ (0x0F19 ?M) ; ASTROLOGICAL SIGN SDONG TSHUGS
+ (0x0F35 ?M) ; MARK NGAS BZUNG NYI ZLA
+ (0x0F37 ?M) ; MARK NGAS BZUNG SGOR RTAGS
+ (0x0F39 ?M) ; MARK TSA -PHRU
+ (0x0F40 0x0F6A ?C) ; LETTER KA .. LETTER FIXED-FORM RA
+ (0x0F62 ?R) ; LETTER RA
+ (0x0F70 ?a) ; VOWEL SIGN A
+ (0x0F71 ?A) ; VOWEL SIGN AA
+ (0x0F72 0x0F7D ?V) ; VOWEL SIGN I .. VOWEL SIGN OO
+ (0x0F7E ?M) ; SIGN RJES SU NGA RO
+ (0x0F80 ?V) ; VOWEL SIGN REVERSED I
+ (0x0F81 ?V) ; VOWEL SIGN REVERSED II
+ (0x0F82 ?M) ; SIGN NYI ZLA NAA DA
+ (0x0F83 ?M) ; SIGN SNA LDAN
+ (0x0F84 ?V) ; MARK HALANTA
+ ;; SIGN LCI RTAGS .. SIGN GRU MED RGYINGS
+ (0x0F86 0x0F8B ?M)
+ ;; SUBJOINED LETTER KA .. SUBJOINED LETTER FIXED-FORM RA
+ (0x0F90 0x0FBC ?s)
+ (0x0FAD ?S)
+ (0x0FB1 0x0FB2 ?S))
+
+(generator
+ (0
+ (cond
+ ("[CR][Ss]*[VaA]*M*"
+ <
+ (cond
+ ("R[SA].*" ; ར[ྭྱྲཱ]
+ ((0x0F62) 0x2122) ; convert ར to upper form
+ subjoined *
+ dependent-vowel-modifier *)
+ (".A.*" ; Cཱ
+ consonant
+ dependent-vowel-modifier *)
+ (".[Ss].*"
+ |
+ short-consonant
+ subjoined *
+ dependent-vowel-modifier *
+ |)
+ (".*"
+ consonant
+ dependent-vowel-modifier * )
+ )
+ >)
+ ("."
+ independent
+ subjoined))
+ *)
+
+ (consonant
+ ((range 0x0F40 0x0F6A) 0x2221))
+
+ (short-consonant
+ (cond
+ ((range 0x0F40 0x0F69) 0x2321)
+ ((0x0F6A) 0x234D)))
+
+ (subjoined
+ ((range 0x0F90 0x0FBC) bc+tc 0x2321))
+
+ (dependent-vowel-modifier
+ (cond
+ ((0x0F19) bc-tc 0x2149)
+ ((0x0F35) bc-tc 0x2165)
+ ((0x0F37) bc-tc 0x2167)
+ ((0x0F39) tc-bc 0x2169)
+ ((0x0F70) ) ; invisible
+ ((0x0F71) bc-tc 0x2252)
+ ((0x0F72) tc-bc 0x2253)
+ ((0x0F73) bc-tc 0x2252 tc-bc 0x2253)
+ ((0x0F74) bc-tc 0x2255)
+ ((0x0F75) bc-tc 0x2256)
+ ((0x0F76) bc-tc 0x2343 tc-bc 0x2261)
+ ((0x0F77) bc-tc 0x2343 bc-tc 0x2252 tc-bc 0x2261)
+ ((0x0F78) bc-tc 0x2344 tc-bc 0x2261)
+ ((0x0F79) bc-tc 0x2344 bc-tc 0x2262 tc-bc 0x2261)
+ ((0x0F7A) tc-bc 0x225B)
+ ((0x0F7B) tc-bc 0x225C)
+ ((0x0F7C) tc-bc 0x225D)
+ ((0x0F7D) tc-bc 0x225E)
+ ((0x0F7E) tc-bc 0x225F)
+ ((0x0F80) tc-bc 0x2261)
+ ((0x0F81) bc-tc 0x2252 0x2261)
+ ((0x0F82) tc-bc 0x2263)
+ ((0x0F83) tc-bc 0x2264)
+ ((0x0F84) bc-tc 0x2265)
+ ((0x0F86) tc-bc 0x2267)
+ ((0x0F87) tc-bc 0x2268)
+ ((0x0F88) tc-bc 0x2269)
+ ((0x0F89) tc-bc 0x226A)
+ ((0x0F8A) tc-bc 0x226B)
+ ((0x0F8B) tc-bc 0x226C)))
+
+ (independent
+ (cond
+ ((range 0x0F00 0x0F3F) 0x2130)
+ ((range 0x0F6B 0x0F8B) 0x224C)
+ ((range 0x0FBD 0x0FCF) 0x234E))))
+
+(category
+ (0x2121 0x24FF ?G))
+
+(generator
+ (0
+ (cond
+ (" (G*) "
+ (1 precomposed = * ))
+ ("[^ ]*"
+ = * ))
+ *)
+
+ (precomposed
+ (cond
+ ((0x2321 0x233E) 0x2421)
+ ((0x2321 0x2342) 0x2440)
+ ((0x2321 0x2343) 0x2450)
+ ((0x2321 0x2344) 0x2460)
+ ((0x2322 0x233E) 0x2422)
+ ((0x2322 0x2342) 0x2441)
+ ((0x2322 0x2343) 0x2451)
+ ((0x2323 0x233E) 0x2423)
+ ((0x2323 0x2342) 0x2442)
+ ((0x2323 0x2343 0x233E) 0x245F)
+ ((0x2323 0x2343) 0x2452)
+ ((0x2323 0x2344) 0x2461)
+ ((0x2326 0x233E) 0x2424)
+ ((0x2328 0x2343) 0x245D)
+ ((0x232A 0x233E) 0x2425)
+ ((0x2330 0x233E) 0x2426)
+ ((0x2330 0x2343) 0x2453)
+ ((0x2331 0x2343) 0x2454)
+ ((0x2332 0x233E) 0x2427)
+ ((0x2332 0x2343) 0x2455)
+ ((0x2335 0x2342) 0x2443)
+ ((0x2335 0x2343) 0x2456)
+ ((0x2336 0x2342 0x233E) 0x2447)
+ ((0x2336 0x2342) 0x2444)
+ ((0x2336 0x2343) 0x2457)
+ ((0x2337 0x2342) 0x2445)
+ ((0x2337 0x2343) 0x2458)
+ ((0x2337 0x2344) 0x2462)
+ ((0x2339 0x2342) 0x2446)
+ ((0x2339 0x2343) 0x2459)
+ ((0x233A 0x233E) 0x2428)
+ ((0x233B 0x233E) 0x2429)
+ ((0x233C 0x2343) 0x245E)
+ ((0x233F 0x233E) 0x242A)
+ ((0x2340 0x233E) 0x242B)
+ ((0x2340 0x2344) 0x2463)
+ ((0x2343 0x2321 0x2342) 0x2530)
+ ((0x2343 0x2321) 0x2521)
+ ((0x2343 0x2323 0x233E) 0x252D)
+ ((0x2343 0x2323 0x2342) 0x2531)
+ ((0x2343 0x2323) 0x2522)
+ ((0x2343 0x2325) 0x2523)
+ ((0x2343 0x2328) 0x2524)
+ ((0x2343 0x232A) 0x2525)
+ ((0x2343 0x2330) 0x2526)
+ ((0x2343 0x2332) 0x2527)
+ ((0x2343 0x2334) 0x2528)
+ ((0x2343 0x2337) 0x2529)
+ ((0x2343 0x2339 0x2342) 0x2532)
+ ((0x2343 0x2339) 0x252A)
+ ((0x2343 0x233A 0x233E) 0x252E)
+ ((0x2343 0x233A) 0x252B)
+ ((0x2343 0x233C) 0x252C)
+ ((0x2343 0x233E) 0x242C)
+ ((0x2343 0x2344) 0x2464)
+ ((0x2344 0x2321) 0x2540)
+ ((0x2344 0x2323) 0x2541)
+ ((0x2344 0x2325) 0x2542)
+ ((0x2344 0x2326) 0x2543)
+ ((0x2344 0x2328) 0x2544)
+ ((0x2344 0x2330) 0x2545)
+ ((0x2344 0x2332) 0x2546)
+ ((0x2344 0x2334) 0x2121)
+ ((0x2344 0x2335) 0x2547)
+ ((0x2344 0x2337) 0x2548)
+ ((0x2344 0x233E) 0x242D)
+ ((0x2344 0x2348) 0x2549)
+ ((0x2345 0x233E) 0x242E)
+ ((0x2345 0x2343) 0x245A)
+ ((0x2347 0x2321 0x2342) 0x2560)
+ ((0x2347 0x2321 0x2343) 0x2570)
+ ((0x2347 0x2321) 0x2550)
+ ((0x2347 0x2323 0x2342) 0x2561)
+ ((0x2347 0x2323 0x2343) 0x2571)
+ ((0x2347 0x2323) 0x2551)
+ ((0x2347 0x2325) 0x2552)
+ ((0x2347 0x232A) 0x2553)
+ ((0x2347 0x2330) 0x2554)
+ ((0x2347 0x2332) 0x2555)
+ ((0x2347 0x2334 0x2343) 0x2572)
+ ((0x2347 0x2334) 0x2556)
+ ((0x2347 0x2335 0x2342) 0x2562)
+ ((0x2347 0x2335 0x2343) 0x2573)
+ ((0x2347 0x2335) 0x2557)
+ ((0x2347 0x2337 0x2342) 0x2563)
+ ((0x2347 0x2337 0x2343) 0x2574)
+ ((0x2347 0x2337) 0x2558)
+ ((0x2347 0x2339 0x2342) 0x2564)
+ ((0x2347 0x2339 0x2343) 0x2575)
+ ((0x2347 0x2339) 0x2559)
+ ((0x2347 0x233A) 0x255A)
+ ((0x2347 0x233E) 0x242F)
+ ((0x2347 0x2343) 0x245B)
+ ((0x2347 0x2344) 0x2465)
+ ((0x2348 0x233E) 0x2430)
+ ((0x2348 0x2343) 0x245C))))
+
+;; Local Variables:
+;; mode: lisp
+;; coding: utf-8
+;; End:
--- /dev/null
+;; TIBT-OTF.flt -- Font Layout Table for Tibetan (OpenType font)
+;; Copyright (C) 2005, 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.
+
+;;; <li> TIBT-OTF.flt
+;;;
+;;; For TibetanMachineUniAlpha.ttf to draw Tibetan script.
+;;; The font is available at:
+;;; <ul>
+;;; <li> infopage: http://www.thdl.org/
+;;; <li> download: http://ftp.debian.org/debian/pool/main/t/ttf-tmuni/ttf-tmuni_0.0.20040806.orig.tar.gz
+;;; </ul>
+
+(font layouter tibt-otf nil
+ (font (nil nil unicode-bmp :otf=tibt=ccmp,blws,abvs)))
+
+;; Step 0: Reordering Characters
+;;
+;; According to the Unicode canonical combining class value (CCCV),
+;; Tibetan combining characters must be orderd in the following way:
+;;
+;; MARK HALANTA (CCCV=9)
+;; VOWEL SIGN AA (129)
+;; Above base vowel signs (130)
+;; VOWEL SIGN U (132)
+;; MARK TSA -PHRU (216)
+;;
+;; However, the current font expects the following order:
+;;
+;; MARK TSA -PHRU
+;; VOWEL SIGN AA
+;; VOWEL SIGN U
+;; MARK HALANTA
+;; Above base vowel signs
+
+(category
+ (0x0F00 0x0FCF ?x) ; default
+ (0x0F39 ?T) ; MARK TSA -PHRU
+ (0x0F71 ?A) ; VOWEL SIGN AA
+ (0x0F72 ?V) ; VOWEL SIGN I
+ (0x0F74 ?U) ; VOWEL SIGN U
+ (0x0F7A 0x0F7D ?V) ; VOWEL SIGN E .. VOWEL SIGN OO
+ (0x0F80 ?V) ; VOWEL SIGN REVERSED I
+ (0x0F84 ?H)) ; MARK HALANTA
+
+(generator
+ (0
+ (cond
+ ("x+"
+ = *)
+ ("(H?)(A*)(V?)(U*)(T?)"
+ (5 =) (2 = *) (4 = *) (1 =) (3 =)))
+ *))
+
+;; Step 1: Syllable identification
+
+;; C: Consonants
+;; T: MARK TSA -PHRU
+;; c: Subjoind consonants
+;; A: VOWEL SIGN AA
+;; U: VOWEL SIGN U
+;; H: MARK HALANTA
+;; V: Above or two-part vowel signs
+;; S: Above base signs
+;; s: Other above base signs
+;; x: Others
+
+(category
+ (0x0F00 0x0FCF ?x) ; default
+ (0x0F39 ?T) ; MARK TSA -PHRU
+ (0x0F40 0x0F6A ?C) ; LETTER KA .. LETTER FIXED-FORM RA
+ (0x0F71 ?A) ; VOWEL SIGN AA
+ (0x0F72 0x0F7E ?V) ; VOWEL SIGN I .. SIGN RJES SU NGA RO
+ (0x0F74 ?U) ; VOWEL SIGN U
+ (0x0F80 0x0F81 ?V) ; VOWEL SIGN REVERSED I, REVERSED II
+ (0x0F82 0x0F83 ?S) ; SIGN NYI ZLA NAADA, SIGN SNA LDAN
+ (0x0F84 ?H) ; MARK HALANTA
+ (0x0F86 0x0F87 ?s) ; SIGN LCI RTAGS, SIGN YANG RTAGS
+ (0x0F88 0x0F89 ?C) ; SIGN LCE TSA CAN, SIGN MCHU CAN
+ (0x0F90 0x0FBC ?c)) ; SUBJOIND LETTER KA .. FIXED-FORM RA
+
+(generator
+ (0
+ (cond
+ ;; For some reason, it is better not to apply the abvs feature when
+ ;; both A and U exist.
+ ("(C)(T?)(c*)(A*)(U*)(H?)(V*)(S*)(s*)"
+ otf:tibt=ccmp,blws,abvs)
+ ("."
+ =))
+ *))
+
+;; Local Variables:
+;; mode: lisp
+;; coding: utf-8
+;; End: