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 44U_NAMESPACE_BEGIN 45 46class LEGlyphStorage; 47 48typedef le_uint32 FeatureFlags; 49 50typedef le_int16 FeatureType; 51typedef le_int16 FeatureSetting; 52 53struct FeatureTableEntry 54{ 55 FeatureType featureType; 56 FeatureSetting featureSetting; 57 FeatureFlags enableFlags; 58 FeatureFlags disableFlags; 59}; 60 61struct ChainHeader 62{ 63 FeatureFlags defaultFlags; 64 le_uint32 chainLength; 65 le_int16 nFeatureEntries; 66 le_int16 nSubtables; 67 FeatureTableEntry featureTable[ANY_NUMBER]; 68}; 69LE_VAR_ARRAY(ChainHeader, featureTable) 70 71struct 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}; 79LE_VAR_ARRAY(MorphTableHeader, chains) 80 81typedef le_int16 SubtableCoverage; 82typedef le_uint32 SubtableCoverage2; 83 84enum SubtableCoverageFlags 85{ 86 scfVertical = 0x8000, 87 scfReverse = 0x4000, 88 scfIgnoreVt = 0x2000, 89 scfReserved = 0x1FF8, 90 scfTypeMask = 0x0007 91}; 92 93enum MorphSubtableType 94{ 95 mstIndicRearrangement = 0, 96 mstContextualGlyphSubstitution = 1, 97 mstLigatureSubstitution = 2, 98 mstReservedUnused = 3, 99 mstNonContextualGlyphSubstitution = 4, 100 mstContextualGlyphInsertion = 5 101}; 102 103struct 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 112enum SubtableCoverageFlags2 113{ 114 scfVertical2 = 0x80000000, 115 scfReverse2 = 0x40000000, 116 scfIgnoreVt2 = 0x20000000, 117 scfReserved2 = 0x1FFFFF00, 118 scfTypeMask2 = 0x000000FF 119}; 120 121struct 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 130struct ChainHeader2 131{ 132 FeatureFlags defaultFlags; 133 le_uint32 chainLength; 134 le_uint32 nFeatureEntries; 135 le_uint32 nSubtables; 136 FeatureTableEntry featureTable[ANY_NUMBER]; 137}; 138LE_VAR_ARRAY(ChainHeader2, featureTable) 139 140struct 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}; 148LE_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 156enum { 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 410U_NAMESPACE_END 411#endif 412 413