Move copying condition to the end.
[m17n/m17n-db.git] / FLT / ORYA-OTF.flt
1 ;; ORYA-OTF.flt -- Font Layout Table for Oriya OpenType font
2 ;; Copyright (C) 2004, 2007  AIST (H15PRO112)
3 ;; See the end for copying conditions.
4
5 (font layouter orya-otf nil
6       (font (nil nil unicode-bmp :otf=orya=rphf)))
7
8 ;;; <li> ORYA-OTF.flt
9 ;;;
10 ;;; For Oriya OpenType fonts to draw the Oriya script.
11
12 (category
13  ;; C: consonant (except for R, B and Y)
14  ;; R: consonant RA
15  ;; B: consonant (below)
16  ;; Y: consonant (post)
17  ;; n: NUKTA
18  ;; H: HALANT
19  ;; m: vowel sign (pre)
20  ;; u: vowel sign (above)
21  ;; b: vowel sign (below)
22  ;; p: vowel sign (post)
23  ;; t: vowel sign (two-part)
24  ;; A: vowel modifier (above)
25  ;; a: vowel modifier (post)
26  ;; V: independent vowel
27  ;; N: ZWNJ (ZERO WIDTH NON-JOINER)
28  ;; J: ZWJ (ZERO WIDTH JOINER)
29  ;; X: generic
30  ;; Z: internal use
31  (0x0B00 0x0B7F ?X)                     ; generic
32  (0x0B00        ?Z)                     ; internal use
33  (0x0B01 0x0B03 ?a)                     ; SIGN CANDRABINDU .. VISARGA
34  (0x0B05 0x0B14 ?V)                     ; LETTER A .. VOCALIC AU
35  (0x0B15 0x0B39 ?C)                     ; LETTER KA .. HA
36  (0x0B24        ?B)                     ; LETTER TA
37  (0x0B28        ?B)                     ; LETTER NA
38  (0x0B2C 0x0B2E ?B)                     ; LETTER BA .. MA
39  (0x0B2F        ?Y)                     ; LETTER YA
40  (0x0B30        ?R)                     ; LETTER RA
41  (0x0B32 0x0B33 ?B)                     ; LETTER LA
42  (0x0B33        ?B)                     ; LETTER LLA
43  (0x0B3C        ?n)                     ; SIGN NUKTA
44  (0x0B3E        ?p)                     ; VOWEL SIGN AA
45  (0x0B3F        ?u)                     ; VOWEL SIGN I
46  (0x0B40        ?p)                     ; VOWEL SIGN II
47  (0x0B41 0x0B43 ?b)                     ; VOWEL SIGN U .. VOCALIC R
48  (0x0B47        ?m)                     ; VOWEL SIGN E
49  (0x0B48 0x0B4C ?t)                     ; VOWEL SIGN AI .. AU
50  (0x0B4D        ?H)                     ; SIGN VIRAMA
51  (0x0B56        ?u)                     ; AI LENGTH MARK
52  (0x0B57        ?p)                     ; AU LENGTH MARK
53  (0x0B5C 0x0B5D ?C)                     ; LETTER RRA .. RHA
54  (0x0B5F        ?Y)                     ; LETTER YYA
55  (0x0B60 0x0B61 ?V)                     ; LETTER VOCALIC RR .. LL
56  (0x0B71        ?C)                     ; LETTER WA
57  (0x0B64 0x0B65 ?X)                     ; DANDA .. DOUBLE DANDA
58  (0x200C        ?N)                     ; ZWNJ
59  (0x200D        ?J)                     ; ZWJ
60  )
61
62 (generator
63  (0
64   (cond
65    ;; Decompose two-part vowel signs.
66    ((0x0B48)
67     0x0B47 0x0B56)
68    ((0x0B4B)
69     0x0B47 0x0B3E)
70    ((0x0B4C)
71     0x0B47 0x0B57)
72    ;; Compose consonant and nukta.
73    ((0x0B21 0x0B3C)
74     0x0B5C)
75    ((0x0B22 0x0B3C)
76     0x0B5D)
77    ;; Move ZWJ before the consonant.
78    ("([CRBY]n?)(J)"
79     (2 =) (1 = *))
80    ("." =))
81   *))
82
83 ;; Syllable identification and reordering.
84 ;; Do not apply 'rphf' if a syllable begins with a ZWJ.
85 (generator
86  (0
87   (cond
88    ;; A syllable with a ZWJ and a pre-base vowel sign.
89    ;;1  23                    4  5   6   7
90    ("(J)(([CRBY]n?H)*[CRBY]n?)(m)(u)?(p)?(a)?"
91     < | (1 =) (4 =) (2 pre-below) (5 =) (2 post) (6 =) (7 =) | >)
92
93    ;; A syllable with a ZWJ and a non-pre-base vowel sign.
94    ;;1  23                    45      6   7
95    ("(J)(([CRBY]n?H)*[CRBY]n?)(([bu])|(p))(a)?"
96     < | (1 =) (2 pre-below) (5 =) (2 post) (6 =) (7 =) | >)
97
98    ;; A syllable with a ZWJ and a vowel modifier, but without vowel signs.
99    ;;1  23                    4
100    ("(J)(([CRBY]n?H)*[CRBY]n?)(a)"
101     < | (1 =) (2 pre-below) (2 post) (4 =) | >)
102
103    ;; Add a ZWNJ explicitly when a syllable ends with a halant.
104    ;;1  23                    4
105    ("(J)(([CRBY]n?H)*[CRBY]n?)(HN?)?"
106     < | (1 =) (2 pre-below) (4 = 0x200C) (2 post) | >)
107
108    ;; With a pre-base vowel sign, without a ZWJ.
109    ;;1    23                    4  5   6   7
110    ("(RH)?(([CRBY]n?H)*[CRBY]n?)(m)(u)?(p)?(a)?"
111     < |
112     (4 =) (2 pre-below) (5 =) (1 otf:orya=rphf) (2 post) (6 =) (7 =)
113     | >)
114
115    ;; With a non-pre-base vowel sign, without a ZWJ.
116    ;; 1   23                    45      6   7
117    ("(RH)?(([CRBY]n?H)*[CRBY]n?)(([bu])|(p))(a)?"
118     < | (2 pre-below) (5 =) (1 otf:orya=rphf) (2 post) (6 =) (7 =) | >)
119
120    ;; With a vowel modifier, without vowel signs and a ZWJ.
121    ;;1    23                    4
122    ("(RH)?(([CRBY]n?H)*[CRBY]n?)(a)"
123     < | (2 pre-below) (1 otf:orya=rphf) (2 post) (4 =) | >)
124
125    ;; Add a ZWNJ explicitly when a syllable ends with a halant.
126    ;;1    23                    4
127    ("(RH)?(([CRBY]n?H)*[CRBY]n?)(HN?)?"
128     < | (2 pre-below) (1 otf:orya=rphf) (4 = 0x200C) (2 post) | >)
129
130    ;; A syllable starting with an independent vowel.
131    ("Va?"
132     < | = * | >)
133
134    ("." =))
135   *)
136
137  ;; Move a halant after the base consonant to the end.
138  ;; Fill the resulting gap with a special mark.
139  ;; Remove post-base parts.
140  (pre-below
141   (cond
142    ("([CRBYnH]*[CYn])H([RBH]+)[YH]+$"
143     (1 = *) 0x0B00 (2 = *))
144    ("([CRBYnH]*[CYn])(H)([RBH]+)$"
145     (1 = *) 0x0B00 (3 = *) (2 =))
146    ("([CRBYnH]*[Cn])[YH]*$"
147     (1 = *) 0x0B00)
148    ("([RB]n?)H([RBH]*)[YH]+$"
149     (1 = *) 0x0B00 (2 = *))
150    ("([RB]n?)(H)([RBH]*)$"
151     (1 = *) 0x0B00 (3 = *) (2 =))
152    ("([RBY]n?)[YH]*$"
153     (1 = *) 0x0B00)))
154
155  ;; Extract post-base parts and add a halant at the end.
156  ;; Produce nothing if there are no post-base parts.
157  (post
158   (cond
159    ("[CRBYnH]*[CRBn]H([YH]+)$"
160     (1 = *) 0x0B4D)
161    ("Yn?H([YH]+)$"
162     (1 = *) 0x0B4D)
163    (".+"
164     )))
165  )
166
167 ;; Apply language forms to concerning segments.
168 (generator
169  (0
170   (cond
171    ;; If a syllable contains a ZWNJ, render the final halant explicitly.
172    (" ([^Z]+)(Z)([^N]*)(HN)([^ ]*) "
173     | (1 otf:orya=nukt,akhn,half,pres+) (2 =) (3 otf:orya=blwf+) (4 = =)
174     (5 otf:orya=pstf+) |)
175
176    (" (J?m?)([^Z]+)(Z)([^ ]*) "
177     | (1 = *) (2 otf:orya=nukt,akhn,half,pres+) (3 =) (4 otf:orya=blwf,pstf+) |)
178
179    ("." =))
180   *))
181
182 ;; When the number of glyphs between a pre-base vowel sign and the
183 ;; post-base mark is more than one, move the pre-base vowel sign
184 ;; before the final glyph.
185 (generator
186  (0
187   (cond
188    (" (J)?(m)([^Z]+)([^Z])Z([^N ]*)N?([^ ]*) "
189     | (1 =) (3 = *) (2 =) (4 =) (5 = *) (6 = *)|)
190    (" ([^Z]+)Z([^N ]*)N?([^ ]*) "
191     | (1 = *) (2 = *) (3 = *) |)
192    ("." =))
193   *))
194
195 ;; Apply other features.
196 ;; Do not apply 'vatu' and 'blws' if there is a ZWJ.
197 ;; The 'pres' feature is applied again for pre-base vowel sign.
198 (generator
199  (0
200   (cond
201    (" J([^ ]+) "
202     (1 otf:orya=pres,abvs,pstp,haln+abvm,blwm,dist))
203    (" ([^ ]+) "
204     (1 otf:orya=vatu,pres,abvs,blws,pstp,haln+abvm,blwm,dist))
205    ("."
206     [ = ]))
207   *))
208
209 ;; Copyright (C) 2004, 2007
210 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
211 ;;   Registration Number H15PRO112
212
213 ;; This file is part of the m17n database; a sub-part of the m17n
214 ;; library.
215
216 ;; The m17n library is free software; you can redistribute it and/or
217 ;; modify it under the terms of the GNU Lesser General Public License
218 ;; as published by the Free Software Foundation; either version 2.1 of
219 ;; the License, or (at your option) any later version.
220
221 ;; The m17n library is distributed in the hope that it will be useful,
222 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
223 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
224 ;; Lesser General Public License for more details.
225
226 ;; You should have received a copy of the GNU Lesser General Public
227 ;; License along with the m17n library; if not, write to the Free
228 ;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
229 ;; Boston, MA 02110-1301, USA.
230
231 ;; Local Variables:
232 ;; mode: emacs-lisp
233 ;; End: