New file.
authorhanda <handa>
Thu, 25 Aug 2005 01:54:47 +0000 (01:54 +0000)
committerhanda <handa>
Thu, 25 Aug 2005 01:54:47 +0000 (01:54 +0000)
ARAB-OTF-NO-GPOS.flt [new file with mode: 0644]

diff --git a/ARAB-OTF-NO-GPOS.flt b/ARAB-OTF-NO-GPOS.flt
new file mode 100644 (file)
index 0000000..2f4d3ae
--- /dev/null
@@ -0,0 +1,248 @@
+;; ARAB-OTF-NO-GPOS.flt -- Font Layout Table for Arabic OpenType font sans GPOS
+;; Copyright (C) 2005
+;;   National Institute of Advanced Industrial Science and Technology (AIST)
+;;   Registration Number H15PRO112
+
+;; This file is part of the m17n database; a sub-part of the m17n
+;; library.
+
+;; The m17n library is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU Lesser General Public License
+;; as published by the Free Software Foundation; either version 2.1 of
+;; the License, or (at your option) any later version.
+
+;; The m17n library is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; Lesser General Public License for more details.
+
+;; You should have received a copy of the GNU Lesser General Public
+;; License along with the m17n library; if not, write to the Free
+;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+;; 02111-1307, USA.
+
+;;; <li> ARAB-OTF-NO-GPOS.flt
+;;;
+;;; For Arabic OpenType fonts that don't have GPOS table 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)
+ (0x25CC               ?x)
+ (0xFB50 0xFDFF                ?X)             ; Arabic Presentation Froms-A
+ (0xFE70 0xFEFC                ?X)             ; Arabic Presentation Froms-B
+ )
+
+(generator
+ (0
+  (cond
+   ;; If a presentation from 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)
+ (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)
+ (0x200C               ?U)
+ (0x200D               ?D)
+ (0x25CC               ?U)
+ (0xFB50 0xFDFF                ?X)             ; Arabic Presentation Froms-A
+ (0xFE70 0xFEFC                ?X)             ; Arabic Presentation Froms-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 =)
+   ((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: