Stage 3: Consider a possibility that an Anudatta follows a Halant.
[m17n/m17n-db.git] / FLT / GUR2-OTF.flt
1 ;; GUR2-OTF.flt -- Font Layout Table for gur2 OpenType fonts
2 ;; Copyright (C) 2010 AIST (H15PRO112)
3 ;; See the end for copying conditions.
4
5 (font layouter gur2-otf nil
6       (version "1.6.0")
7       (font (nil nil unicode-bmp :otf=gur2)))
8
9 ;;; <li> GUR2-OTF.flt
10 ;;;
11 ;;; For gur2 OpenType fonts to draw the Gurmukhi script.
12
13 (category
14  (0x0A00 0x0A7F ?X)                     ; generic
15  (0x0A00        ?Z)                     ; internal use
16  (0x0A01 0x0A02 ?a)                     ; SIGN ADAK BINDI .. BINDI
17  (0x0A03        ?A)                     ; SIGN VISARGA
18  (0x0A05 0x0A14 ?V)                     ; LETTER A .. AU
19  (0x0A15 0x0A38 ?C)                     ; LETTER KA .. SA
20  (0x0A3C        ?n)                     ; SIGN NUKTA
21  (0x0A3E        ?p)                     ; VOWEL SIGN AA
22  (0x0A3F        ?m)                     ; VOWEL SIGN I
23  (0x0A40        ?p)                     ; VOWEL SIGN II
24  (0x0A41 0x0A42 ?b)                     ; VOWEL SIGN U .. UU
25  (0x0A47 0x0A4C ?u)                     ; VOWEL SIGN EE .. AU
26  (0x0A4D        ?H)                     ; SIGN VIRAMA
27 ;; (0x0A51      ?)                      ; SIGN UDAAT
28  (0x0A59 0x0A5E ?C)                     ; LETTER KHHA .. FA
29  (0x0A70        ?a)                     ; TIPPI
30  (0x0A71        ?d)                     ; ADDAK
31 ;; (0x0A75      ?)                      ; SIGN YAKASH
32
33  (0x200C        ?N)                     ; ZWNJ
34  (0x200D        ?J)                     ; ZWJ
35  (0x25CC        ?X)                     ; DOTTED CIRCLE
36
37  (pstf          ?P)
38  )
39
40 ;; Stage 0
41 ;; Preprocessing
42 (generator
43  (0
44   (cond
45    ((0x0A32 0x0A3C) 0x0A33)
46    ((0x0A38 0x0A3C) 0x0A36)
47    ((0x0A16 0x0A3C) 0x0A59)
48    ((0x0A17 0x0A3C) 0x0A5A)
49    ((0x0A1C 0x0A3C) 0x0A5B)
50    ((0x0A2B 0x0A3C) 0x0A5E)
51    ("." =))
52   *))
53
54 ;; Stage 1
55 ;; Syllable identification
56 (generator
57  (0
58   (cond
59    ;; Consonant-based syllables
60    ("(Cn?J?HJ?)*Cn?(H[NJ]?|m?u?b?p?n?)a?A?"
61     < | (0 = *) | >)
62
63    ;; Syllables with an independent vowel
64    ("Vn?(J?HC)?m?u?b?p?n?a?A?"
65     < | (0 = *) | >)
66
67    ;; Combining marks are displayed with a DOTTED CIRCLE.
68    ("(m)|(n|H|u|b|p|a|A|JHC)"
69     < (1 =) 0x25CC (2 :otf=gur2=blwf,pstf+) >)
70
71    ("." =))
72   *))
73
74 ;; Stage 2
75 ;; Basic shaping forms and matra reordering
76 (generator
77  (0
78   (cond
79    ;; Explicit halant forms
80    (" ([CnHJ]+)(HN?a?A?) "
81     (1 :otf?gur2=locl,nukt,akhn,blwf,pstf+)
82     | (1 shaping) (2 = *) |)
83
84    ;; Ordinary syllables
85    ;; 1          2    3     4     5     6
86    (" ([CnHJV]+)(mn?)?(un?)?(bn?)?(pn?)?(a?A?) "
87     (1 :otf?gur2=locl,nukt,akhn,blwf,pstf+)
88     | (2 = *) (1 shaping) (4 = *) (3 = *) (5 = *) (6 = *) |)
89
90    ("." =))
91   *)
92
93  (shaping
94   (cond
95    ("([CnHJP]*[CV]n?)((J?PP)+)$"
96     (1 :otf=gur2=locl,nukt,akhn,blwf,cjct+) (2 :otf=gur2=pstf+))
97    (".+"
98     (0 :otf=gur2=locl,nukt,akhn,blwf,cjct+))))
99  )
100
101 ;; Stage 3
102 ;; Final reordering (Move pre-base matra after the last halant)
103 (generator
104  (0
105   (cond
106    ;; 1    2         3
107    (" (mn?)([^ ]+HJ?)([^H ]+) "
108     | (2 = *) (1 = *) (3 = *) |)
109
110    ("." =))
111   *))
112
113 ;; Stage 4
114 ;; Nukta for matra and presentation forms
115 (generator
116  (0
117   (cond
118    (" ([^ ]+) "
119     | (1 :otf=gur2=nukt,pres,abvs,blws,psts,haln,calt+) |)
120
121    ("." =))
122   *))
123
124 ;; Stage 5
125 ;; Remove ZWNJ/ZWJ
126 (generator
127  (0
128   (cond
129    ("[NJ]")
130
131    ("." =))
132   *))
133
134 ;; Stage 6
135 ;; GPOS processing
136 (generator
137  (0
138   (cond
139    (" ([^ ]+) "
140     (1 :otf=gur2=+kern,dist,abvm,blwm))
141
142    ("." =))
143   *))
144
145 ;; Copyright (C) 2010
146 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
147 ;;   Registration Number H15PRO112
148
149 ;; This file is part of the m17n database; a sub-part of the m17n
150 ;; library.
151
152 ;; The m17n library is free software; you can redistribute it and/or
153 ;; modify it under the terms of the GNU Lesser General Public License
154 ;; as published by the Free Software Foundation; either version 2.1 of
155 ;; the License, or (at your option) any later version.
156
157 ;; The m17n library is distributed in the hope that it will be useful,
158 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
159 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
160 ;; Lesser General Public License for more details.
161
162 ;; You should have received a copy of the GNU Lesser General Public
163 ;; License along with the m17n library; if not, write to the Free
164 ;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
165 ;; Boston, MA 02110-1301, USA.
166
167 ;; Local Variables:
168 ;; mode: emacs-lisp
169 ;; End: