230 lines
4.8 KiB
Plaintext
230 lines
4.8 KiB
Plaintext
;; ARAB-OTF.flt -- Font Layout Table for Arabic OpenType font
|
|
;; Copyright (C) 2004, 2006, 2007, 2008, 2010 AIST (H15PRO112)
|
|
;; See the end for copying conditions.
|
|
|
|
(font layouter arab-otf nil
|
|
(font (nil nil unicode-bmp :otf=arab=init,medi,fina+mark)))
|
|
|
|
;;; <li> ARAB-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
|
|
;; X: presentation form
|
|
(0x0600 0x06FF ?x)
|
|
(0x0674 0x0678 ?p)
|
|
(0x0643 ?n)
|
|
(0x06AF ?n)
|
|
(0x06D5 ?n)
|
|
(0x0750 0x077F ?x) ; Arabic Supplement
|
|
(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)
|
|
(0x0600 0x06FF ?U)
|
|
(0x0610 0x0615 ?T)
|
|
(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)
|
|
(0x066E 0x066F ?D)
|
|
(0x0670 ?T)
|
|
(0x0671 0x0673 ?R)
|
|
(0x0679 0x0687 ?D)
|
|
(0x0688 0x0699 ?R)
|
|
(0x069A 0x06C3 ?D)
|
|
(0x06C4 0x06CB ?R)
|
|
(0x06CC 0x06CE ?D)
|
|
(0x06CF ?R)
|
|
(0x06D0 0x06D3 ?D)
|
|
(0x06D5 ?R)
|
|
(0x06D6 0x06E4 ?T)
|
|
(0x06E7 0x06E8 ?T)
|
|
(0x06EA 0x06ED ?T)
|
|
(0x06EE 0x06EF ?R)
|
|
(0x06FA 0x06FC ?D)
|
|
(0x06FF ?D)
|
|
(0x0750 0x0758 ?D)
|
|
(0x0759 0x075B ?R)
|
|
(0x075C 0x076A ?D)
|
|
(0x076B 0x076C ?R)
|
|
(0x076D 0x0770 ?D)
|
|
(0x0771 ?R)
|
|
(0x0772 ?D)
|
|
(0x0773 0x0774 ?R)
|
|
(0x0775 0x0777 ?D)
|
|
(0x0778 0x0779 ?R)
|
|
(0x077A 0x077F ?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 (cond
|
|
((font-facility 0x25CC) < 0x25CC = * >)
|
|
(".+" [ = * ])))
|
|
(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 OTF features.
|
|
|
|
(generator
|
|
(0
|
|
otf:arab=rlig,calt,liga,dlig,cswh,mset+curs,kern,mark,mkmk))
|
|
|
|
;; Copyright (C) 2004, 2006, 2007, 2008
|
|
;; 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
|
|
;; Boston, MA 02110-1301 USA.
|
|
|
|
;; Local Variables:
|
|
;; mode: lisp
|
|
;; End:
|