*** empty log message ***
[m17n/m17n-db.git] / GURU-OTF.flt
1 ;; GURU-OTF.flt -- Font Layout Table for Gurmukhi OpenType fonts
2 ;; Copyright (C) 2004
3 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
4 ;;   Registration Number H15PRO112
5
6 ;; This file is part of the m17n database; a sub-part of the m17n
7 ;; library.
8
9 ;; The m17n library is free software; you can redistribute it and/or
10 ;; modify it under the terms of the GNU Lesser General Public License
11 ;; as published by the Free Software Foundation; either version 2.1 of
12 ;; the License, or (at your option) any later version.
13
14 ;; The m17n library is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 ;; Lesser General Public License for more details.
18
19 ;; You should have received a copy of the GNU Lesser General Public
20 ;; License along with the m17n library; if not, write to the Free
21 ;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
22 ;; 02111-1307, USA.
23
24 ;;; <li> GURU-OTF.flt
25 ;;;
26 ;;; For Gurmukhi OpenType fonts to draw the Punjabi script.
27 ;;; Designed for saab.otf (version 0.91).
28 ;;; <http://guca.sourceforge.net/typography/fonts/saab/index.shtml>
29
30 (category
31  ;; C: general consonant
32  ;; Y: post-base consonat (YA)
33  ;; R: below-base consonat (RA, VA, HA)
34  ;; n: NUKTA
35  ;; H: HALANT
36  ;; m: MATRA (pre)
37  ;; u: MATRA (above)
38  ;; b: MATRA (below)
39  ;; p: MATRA (post)
40  ;; A: vowel modifier (above)
41  ;; a: vowel modifier (post)
42  ;; V: independent vowel
43  ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
44  ;; J: ZWJ (ZERO WIDTH JOINER)
45  ;; E: ELSE
46  ;;
47  (0x200C        ?N)                     ; ZWNJ
48  (0x200D        ?J)                     ; ZWJ
49  (0x0964        ?E)                     ; DANDA
50  (0x0965        ?E)                     ; DOUBLE DANDA
51  (0x0A00 0x0A7F ?E)                     ; ELSE
52  (0x0A01        ?A)                     ; SIGN ADAK BINDI (above)
53  (0x0A02        ?A)                     ; SIGN BINDI (above)
54  (0x0A03        ?a)                     ; SIGN VISARGA (post)
55  (0x0A05 0x0A14 ?V)                     ; LETTER A .. LETTER AU
56  (0x0A15 0x0A38 ?C)                     ; LETTER KA .. LETTER SA
57  (0x0A2F        ?Y)                     ; LETTER YA
58  (0x0A30        ?R)                     ; LETTER RA
59  (0x0A35        ?R)                     ; LETTER VA
60  (0x0A39        ?R)                     ; LETTER HA
61  (0x0A3C        ?n)                     ; SIGN NUKTA
62  (0x0A3E        ?p)                     ; VOWEL SIGN AA (post)
63  (0x0A3F        ?m)                     ; VOWEL SIGN I (pre)
64  (0x0A40        ?p)                     ; VOWEL SIGN II (post)
65  (0x0A41        ?b)                     ; VOWEL SIGN U (below)
66  (0x0A42        ?b)                     ; VOWEL SIGN UU (below)
67  (0x0A47        ?u)                     ; VOWEL SIGN EE (above)
68  (0x0A48        ?u)                     ; VOWEL SIGN AI (above)
69  (0x0A4B        ?u)                     ; VOWEL SIGN OO (above)
70  (0x0A4C        ?u)                     ; VOWEL SIGN AU (above)
71  (0x0A4D        ?H)                     ; SIGN VIRAMA (HALANT)
72  (0x0A59 0x0A5E ?C)                     ; LETTER KHHA .. LETTER FA
73  (0x0A70        ?A)                     ; TIPPI (above)
74  (0x0A7F        ?X)                     ; internal use
75  )
76
77 ;; Step 1 : Syllable identification and Halant movement.
78 (generator
79  (0
80   (cond
81    ;; A syllable ending with a vowel sign and/or a vowel modifier.
82    ("(([CRY]n?H)*[CRY]n?)([mubp][Aa]?|[Aa])"
83     < | (1 move-base-Halant) (3 =) | >)
84
85    ;; A syllable without a vowel sign nor a vowel modifier.
86    ("(([CRY]n?H)*[CRY]n?)(H)?"
87     < | move-base-Halant | >)
88
89    ;; A syllable starting with an independent vowel.
90    ("V[Aa]?"
91     < | = * | > )
92
93    ("." =))
94   *)
95
96  ;; Move Halant on the base consonant to the tail.
97  ;; 0x0A7F indicates the position for above- or below Matra.
98  (move-base-Halant
99   (cond
100    ("(([CRY]n?H)*[CRY]n?)(H)(Y)$"
101     (1 = *)
102     0x0A7F
103     (4 =)
104     (3 =))
105    ("(([CRY]n?H)*[CRY]n?)(H)(R)$"
106     (1 = *)
107     (4 =)
108     (3 =)
109     0x0A7F)
110    ("([CRY]n?H)*[CRY]n?H$"
111     = * 0x200C)
112    (".*"
113     = * 0x0A7F))))
114
115 ;; Step 2 : Move Matra.
116 (generator
117  (0
118   (cond
119    ;; 1          2    3   4      5   6
120    (" ([CRYnH]*)X(YH)?(m)?([ub])?(p)?([Aa])? "
121     | (3 =) (1 = *) (4 =) (2 = =) (5 =) (6 =) |)
122    ("." =))
123   *))
124
125 ;; Step 3 : Drive OTF tables.
126 (generator
127  (0
128   (cond
129    (" ([^ ]*H)N "
130     (1 otf:guru=nukt))
131    (" ([^ ]*) "
132     (1 otf:guru=nukt,blwf,pstf,vatu,pres,abvs,blws,psts))
133    ((0x0A71)
134     otf:guru)
135    ("."
136     [ otf:guru=+ ] ))
137   *))
138
139 ;; Local Variables:
140 ;; mode: emacs-lisp
141 ;; End: