1 /* |
|
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
3 * |
|
4 * This code is free software; you can redistribute it and/or modify it |
|
5 * under the terms of the GNU General Public License version 2 only, as |
|
6 * published by the Free Software Foundation. Oracle designates this |
|
7 * particular file as subject to the "Classpath" exception as provided |
|
8 * by Oracle in the LICENSE file that accompanied this code. |
|
9 * |
|
10 * This code is distributed in the hope that it will be useful, but WITHOUT |
|
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
13 * version 2 for more details (a copy is included in the LICENSE file that |
|
14 * accompanied this code). |
|
15 * |
|
16 * You should have received a copy of the GNU General Public License version |
|
17 * 2 along with this work; if not, write to the Free Software Foundation, |
|
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
19 * |
|
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
21 * or visit www.oracle.com if you need additional information or have any |
|
22 * questions. |
|
23 * |
|
24 */ |
|
25 |
|
26 /* |
|
27 * |
|
28 * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved |
|
29 * |
|
30 */ |
|
31 |
|
32 #ifndef __MORPHTABLES_H |
|
33 #define __MORPHTABLES_H |
|
34 |
|
35 /** |
|
36 * \file |
|
37 * \internal |
|
38 */ |
|
39 |
|
40 #include "LETypes.h" |
|
41 #include "LayoutTables.h" |
|
42 #include "LETableReference.h" |
|
43 |
|
44 U_NAMESPACE_BEGIN |
|
45 |
|
46 class LEGlyphStorage; |
|
47 |
|
48 typedef le_uint32 FeatureFlags; |
|
49 |
|
50 typedef le_int16 FeatureType; |
|
51 typedef le_int16 FeatureSetting; |
|
52 |
|
53 struct FeatureTableEntry |
|
54 { |
|
55 FeatureType featureType; |
|
56 FeatureSetting featureSetting; |
|
57 FeatureFlags enableFlags; |
|
58 FeatureFlags disableFlags; |
|
59 }; |
|
60 |
|
61 struct ChainHeader |
|
62 { |
|
63 FeatureFlags defaultFlags; |
|
64 le_uint32 chainLength; |
|
65 le_int16 nFeatureEntries; |
|
66 le_int16 nSubtables; |
|
67 FeatureTableEntry featureTable[ANY_NUMBER]; |
|
68 }; |
|
69 LE_VAR_ARRAY(ChainHeader, featureTable) |
|
70 |
|
71 struct MorphTableHeader |
|
72 { |
|
73 le_int32 version; |
|
74 le_uint32 nChains; |
|
75 ChainHeader chains[ANY_NUMBER]; |
|
76 |
|
77 void process(const LETableReference& base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const; |
|
78 }; |
|
79 LE_VAR_ARRAY(MorphTableHeader, chains) |
|
80 |
|
81 typedef le_int16 SubtableCoverage; |
|
82 typedef le_uint32 SubtableCoverage2; |
|
83 |
|
84 enum SubtableCoverageFlags |
|
85 { |
|
86 scfVertical = 0x8000, |
|
87 scfReverse = 0x4000, |
|
88 scfIgnoreVt = 0x2000, |
|
89 scfReserved = 0x1FF8, |
|
90 scfTypeMask = 0x0007 |
|
91 }; |
|
92 |
|
93 enum MorphSubtableType |
|
94 { |
|
95 mstIndicRearrangement = 0, |
|
96 mstContextualGlyphSubstitution = 1, |
|
97 mstLigatureSubstitution = 2, |
|
98 mstReservedUnused = 3, |
|
99 mstNonContextualGlyphSubstitution = 4, |
|
100 mstContextualGlyphInsertion = 5 |
|
101 }; |
|
102 |
|
103 struct MorphSubtableHeader |
|
104 { |
|
105 le_int16 length; |
|
106 SubtableCoverage coverage; |
|
107 FeatureFlags subtableFeatures; |
|
108 |
|
109 void process(const LEReferenceTo<MorphSubtableHeader> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const; |
|
110 }; |
|
111 |
|
112 enum SubtableCoverageFlags2 |
|
113 { |
|
114 scfVertical2 = 0x80000000, |
|
115 scfReverse2 = 0x40000000, |
|
116 scfIgnoreVt2 = 0x20000000, |
|
117 scfReserved2 = 0x1FFFFF00, |
|
118 scfTypeMask2 = 0x000000FF |
|
119 }; |
|
120 |
|
121 struct MorphSubtableHeader2 |
|
122 { |
|
123 le_uint32 length; |
|
124 SubtableCoverage2 coverage; |
|
125 FeatureFlags subtableFeatures; |
|
126 |
|
127 void process(const LEReferenceTo<MorphSubtableHeader2> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const; |
|
128 }; |
|
129 |
|
130 struct ChainHeader2 |
|
131 { |
|
132 FeatureFlags defaultFlags; |
|
133 le_uint32 chainLength; |
|
134 le_uint32 nFeatureEntries; |
|
135 le_uint32 nSubtables; |
|
136 FeatureTableEntry featureTable[ANY_NUMBER]; |
|
137 }; |
|
138 LE_VAR_ARRAY(ChainHeader2, featureTable) |
|
139 |
|
140 struct MorphTableHeader2 |
|
141 { |
|
142 le_int32 version; |
|
143 le_uint32 nChains; |
|
144 ChainHeader2 chains[ANY_NUMBER]; |
|
145 |
|
146 void process(const LEReferenceTo<MorphTableHeader2> &base, LEGlyphStorage &glyphStorage, le_int32 typoFlags, LEErrorCode &success) const; |
|
147 }; |
|
148 LE_VAR_ARRAY(MorphTableHeader2, chains) |
|
149 |
|
150 /* |
|
151 * AAT Font Features |
|
152 * source: https://developer.apple.com/fonts/registry/ |
|
153 * (plus addition from ATS/SFNTLayoutTypes.h) |
|
154 */ |
|
155 |
|
156 enum { |
|
157 |
|
158 allTypographicFeaturesType = 0, |
|
159 |
|
160 allTypeFeaturesOnSelector = 0, |
|
161 allTypeFeaturesOffSelector = 1, |
|
162 |
|
163 ligaturesType = 1, |
|
164 |
|
165 requiredLigaturesOnSelector = 0, |
|
166 requiredLigaturesOffSelector = 1, |
|
167 commonLigaturesOnSelector = 2, |
|
168 commonLigaturesOffSelector = 3, |
|
169 rareLigaturesOnSelector = 4, |
|
170 rareLigaturesOffSelector = 5, |
|
171 logosOnSelector = 6, |
|
172 logosOffSelector = 7, |
|
173 rebusPicturesOnSelector = 8, |
|
174 rebusPicturesOffSelector = 9, |
|
175 diphthongLigaturesOnSelector = 10, |
|
176 diphthongLigaturesOffSelector = 11, |
|
177 squaredLigaturesOnSelector = 12, |
|
178 squaredLigaturesOffSelector = 13, |
|
179 abbrevSquaredLigaturesOnSelector = 14, |
|
180 abbrevSquaredLigaturesOffSelector = 15, |
|
181 symbolLigaturesOnSelector = 16, |
|
182 symbolLigaturesOffSelector = 17, |
|
183 contextualLigaturesOnSelector = 18, |
|
184 contextualLigaturesOffSelector = 19, |
|
185 historicalLigaturesOnSelector = 20, |
|
186 historicalLigaturesOffSelector = 21, |
|
187 |
|
188 cursiveConnectionType = 2, |
|
189 |
|
190 unconnectedSelector = 0, |
|
191 partiallyConnectedSelector = 1, |
|
192 cursiveSelector = 2, |
|
193 |
|
194 letterCaseType = 3, |
|
195 |
|
196 upperAndLowerCaseSelector = 0, |
|
197 allCapsSelector = 1, |
|
198 allLowerCaseSelector = 2, |
|
199 smallCapsSelector = 3, |
|
200 initialCapsSelector = 4, |
|
201 initialCapsAndSmallCapsSelector = 5, |
|
202 |
|
203 verticalSubstitutionType = 4, |
|
204 |
|
205 substituteVerticalFormsOnSelector = 0, |
|
206 substituteVerticalFormsOffSelector = 1, |
|
207 |
|
208 linguisticRearrangementType = 5, |
|
209 |
|
210 linguisticRearrangementOnSelector = 0, |
|
211 linguisticRearrangementOffSelector = 1, |
|
212 |
|
213 numberSpacingType = 6, |
|
214 |
|
215 monospacedNumbersSelector = 0, |
|
216 proportionalNumbersSelector = 1, |
|
217 |
|
218 /* |
|
219 appleReserved1Type = 7, |
|
220 */ |
|
221 |
|
222 smartSwashType = 8, |
|
223 |
|
224 wordInitialSwashesOnSelector = 0, |
|
225 wordInitialSwashesOffSelector = 1, |
|
226 wordFinalSwashesOnSelector = 2, |
|
227 wordFinalSwashesOffSelector = 3, |
|
228 lineInitialSwashesOnSelector = 4, |
|
229 lineInitialSwashesOffSelector = 5, |
|
230 lineFinalSwashesOnSelector = 6, |
|
231 lineFinalSwashesOffSelector = 7, |
|
232 nonFinalSwashesOnSelector = 8, |
|
233 nonFinalSwashesOffSelector = 9, |
|
234 |
|
235 diacriticsType = 9, |
|
236 |
|
237 showDiacriticsSelector = 0, |
|
238 hideDiacriticsSelector = 1, |
|
239 decomposeDiacriticsSelector = 2, |
|
240 |
|
241 verticalPositionType = 10, |
|
242 |
|
243 normalPositionSelector = 0, |
|
244 superiorsSelector = 1, |
|
245 inferiorsSelector = 2, |
|
246 ordinalsSelector = 3, |
|
247 |
|
248 fractionsType = 11, |
|
249 |
|
250 noFractionsSelector = 0, |
|
251 verticalFractionsSelector = 1, |
|
252 diagonalFractionsSelector = 2, |
|
253 |
|
254 /* |
|
255 appleReserved2Type = 12, |
|
256 */ |
|
257 |
|
258 overlappingCharactersType = 13, |
|
259 |
|
260 preventOverlapOnSelector = 0, |
|
261 preventOverlapOffSelector = 1, |
|
262 |
|
263 typographicExtrasType = 14, |
|
264 |
|
265 hyphensToEmDashOnSelector = 0, |
|
266 hyphensToEmDashOffSelector = 1, |
|
267 hyphenToEnDashOnSelector = 2, |
|
268 hyphenToEnDashOffSelector = 3, |
|
269 unslashedZeroOnSelector = 4, |
|
270 slashedZeroOffSelector = 4, |
|
271 unslashedZeroOffSelector = 5, |
|
272 slashedZeroOnSelector = 5, |
|
273 formInterrobangOnSelector = 6, |
|
274 formInterrobangOffSelector = 7, |
|
275 smartQuotesOnSelector = 8, |
|
276 smartQuotesOffSelector = 9, |
|
277 periodsToEllipsisOnSelector = 10, |
|
278 periodsToEllipsisOffSelector = 11, |
|
279 |
|
280 mathematicalExtrasType = 15, |
|
281 |
|
282 hyphenToMinusOnSelector = 0, |
|
283 hyphenToMinusOffSelector = 1, |
|
284 asteriskToMultiplyOnSelector = 2, |
|
285 asteriskToMultiplyOffSelector = 3, |
|
286 slashToDivideOnSelector = 4, |
|
287 slashToDivideOffSelector = 5, |
|
288 inequalityLigaturesOnSelector = 6, |
|
289 inequalityLigaturesOffSelector = 7, |
|
290 exponentsOnSelector = 8, |
|
291 exponentsOffSelector = 9, |
|
292 |
|
293 ornamentSetsType = 16, |
|
294 |
|
295 noOrnamentsSelector = 0, |
|
296 dingbatsSelector = 1, |
|
297 piCharactersSelector = 2, |
|
298 fleuronsSelector = 3, |
|
299 decorativeBordersSelector = 4, |
|
300 internationalSymbolsSelector = 5, |
|
301 mathSymbolsSelector = 6, |
|
302 |
|
303 characterAlternativesType = 17, |
|
304 |
|
305 noAlternatesSelector = 0, |
|
306 |
|
307 designComplexityType = 18, |
|
308 |
|
309 designLevel1Selector = 0, |
|
310 designLevel2Selector = 1, |
|
311 designLevel3Selector = 2, |
|
312 designLevel4Selector = 3, |
|
313 designLevel5Selector = 4, |
|
314 designLevel6Selector = 5, |
|
315 designLevel7Selector = 6, |
|
316 |
|
317 styleOptionsType = 19, |
|
318 |
|
319 noStyleOptionsSelector = 0, |
|
320 displayTextSelector = 1, |
|
321 engravedTextSelector = 2, |
|
322 illuminatedCapsSelector = 3, |
|
323 titlingCapsSelector = 4, |
|
324 tallCapsSelector = 5, |
|
325 |
|
326 characterShapeType = 20, |
|
327 |
|
328 traditionalCharactersSelector = 0, |
|
329 simplifiedCharactersSelector = 1, |
|
330 jis1978CharactersSelector = 2, |
|
331 jis1983CharactersSelector = 3, |
|
332 jis1990CharactersSelector = 4, |
|
333 traditionalAltOneSelector = 5, |
|
334 traditionalAltTwoSelector = 6, |
|
335 traditionalAltThreeSelector = 7, |
|
336 traditionalAltFourSelector = 8, |
|
337 traditionalAltFiveSelector = 9, |
|
338 expertCharactersSelector = 10, |
|
339 |
|
340 numberCaseType = 21, |
|
341 |
|
342 lowerCaseNumbersSelector = 0, |
|
343 upperCaseNumbersSelector = 1, |
|
344 |
|
345 textSpacingType = 22, |
|
346 |
|
347 proportionalTextSelector = 0, |
|
348 monospacedTextSelector = 1, |
|
349 halfWidthTextSelector = 2, |
|
350 normallySpacedTextSelector = 3, |
|
351 |
|
352 transliterationType = 23, |
|
353 |
|
354 noTransliterationSelector = 0, |
|
355 hanjaToHangulSelector = 1, |
|
356 hiraganaToKatakanaSelector = 2, |
|
357 katakanaToHiraganaSelector = 3, |
|
358 kanaToRomanizationSelector = 4, |
|
359 romanizationToHiraganaSelector = 5, |
|
360 romanizationToKatakanaSelector = 6, |
|
361 hanjaToHangulAltOneSelector = 7, |
|
362 hanjaToHangulAltTwoSelector = 8, |
|
363 hanjaToHangulAltThreeSelector = 9, |
|
364 |
|
365 annotationType = 24, |
|
366 |
|
367 noAnnotationSelector = 0, |
|
368 boxAnnotationSelector = 1, |
|
369 roundedBoxAnnotationSelector = 2, |
|
370 circleAnnotationSelector = 3, |
|
371 invertedCircleAnnotationSelector = 4, |
|
372 parenthesisAnnotationSelector = 5, |
|
373 periodAnnotationSelector = 6, |
|
374 romanNumeralAnnotationSelector = 7, |
|
375 diamondAnnotationSelector = 8, |
|
376 |
|
377 kanaSpacingType = 25, |
|
378 |
|
379 fullWidthKanaSelector = 0, |
|
380 proportionalKanaSelector = 1, |
|
381 |
|
382 ideographicSpacingType = 26, |
|
383 |
|
384 fullWidthIdeographsSelector = 0, |
|
385 proportionalIdeographsSelector = 1, |
|
386 |
|
387 cjkRomanSpacingType = 103, |
|
388 |
|
389 halfWidthCJKRomanSelector = 0, |
|
390 proportionalCJKRomanSelector = 1, |
|
391 defaultCJKRomanSelector = 2, |
|
392 fullWidthCJKRomanSelector = 3, |
|
393 |
|
394 rubyKanaType = 28, |
|
395 |
|
396 rubyKanaOnSelector = 2, |
|
397 rubyKanaOffSelector = 3, |
|
398 |
|
399 /* The following types are provided for compatibility; note that |
|
400 their use is deprecated. */ |
|
401 |
|
402 adobeCharacterSpacingType = 100, /* prefer 22 */ |
|
403 adobeKanaSpacingType = 101, /* prefer 25 */ |
|
404 adobeKanjiSpacingType = 102, /* prefer 26 */ |
|
405 adobeSquareLigatures = 104, /* prefer 1 */ |
|
406 |
|
407 lastFeatureType = -1 |
|
408 }; |
|
409 |
|
410 U_NAMESPACE_END |
|
411 #endif |
|
412 |
|