From bd3fbaac94805a80598b6478aea8e886a245b691 Mon Sep 17 00:00:00 2001 From: ntakahas Date: Thu, 5 Aug 2004 05:30:29 +0000 Subject: [PATCH] New file. --- ARABIC-OTF.flt | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 ARABIC-OTF.flt diff --git a/ARABIC-OTF.flt b/ARABIC-OTF.flt new file mode 100644 index 0000000..f58f10a --- /dev/null +++ b/ARABIC-OTF.flt @@ -0,0 +1,200 @@ +;; ARABIC-OTF.flt -- Font Layout Table for Arabic OpenType font +;; Copyright (C) 2004 +;; 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. + +;;;
  • ARABIC-OTF.flt +;;; +;;; For Arabic OpenType fonts to draw the Arabic script. + + +;; 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) + (0x0674 0x0678 ?p) + (0x0643 ?n) + (0x06AF ?n) + (0x06D5 ?n) + (0x200C ?x) + (0x200D ?x) + ) + +(generator + (0 + (cond + (".*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 + +;; (generator +;; (0 +;; otf:arab=ccmp)) + +;; Step 2: Initial, medial, or final. + +(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) + (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) + (0xFEF5 ?R) + (0xFEF7 ?R) + (0xFEF9 ?R) + (0xFEFB ?R) + (0x200C ?U) + (0x200D ?D) + ) + +(generator + (0 + (cond + ("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*)(.*)" ; == (R)(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: -- 1.7.10.4