| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright (C) 1998-2004 David Turner and Werner Lemberg | |
| 3 * Copyright (C) 2006 Behdad Esfahbod | |
| 4 * | |
| 5 * This is part of HarfBuzz, an OpenType Layout engine library. | |
| 6 * | |
| 7 * Permission is hereby granted, without written agreement and without | |
| 8 * license or royalty fees, to use, copy, modify, and distribute this | |
| 9 * software and its documentation for any purpose, provided that the | |
| 10 * above copyright notice and the following two paragraphs appear in | |
| 11 * all copies of this software. | |
| 12 * | |
| 13 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR | |
| 14 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES | |
| 15 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN | |
| 16 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH | |
| 17 * DAMAGE. | |
| 18 * | |
| 19 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, | |
| 20 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND | |
| 21 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS | |
| 22 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO | |
| 23 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. | |
| 24 */ | |
| 25 | |
| 26 #ifndef HARFBUZZ_GSUB_PRIVATE_H | |
| 27 #define HARFBUZZ_GSUB_PRIVATE_H | |
| 28 | |
| 29 #include "harfbuzz-impl.h" | |
| 30 #include "harfbuzz-stream-private.h" | |
| 31 #include "harfbuzz-gsub.h" | |
| 32 | |
| 33 HB_BEGIN_HEADER | |
| 34 | |
| 35 #ifdef HB_USE_PACKED_STRUCTS | |
| 36 #pragma pack(push, 1) | |
| 37 #endif | |
| 38 | |
| 39 typedef union HB_GSUB_SubTable_ HB_GSUB_SubTable; | |
| 40 | |
| 41 /* LookupType 1 */ | |
| 42 | |
| 43 struct HB_SingleSubstFormat1_ | |
| 44 { | |
| 45 HB_Short DeltaGlyphID; /* constant added to get | |
| 46 substitution glyph index */ | |
| 47 }; | |
| 48 | |
| 49 typedef struct HB_SingleSubstFormat1_ HB_SingleSubstFormat1; | |
| 50 | |
| 51 | |
| 52 struct HB_SingleSubstFormat2_ | |
| 53 { | |
| 54 HB_UShort* Substitute; /* array of substitute glyph IDs */ | |
| 55 HB_UShort GlyphCount; /* number of glyph IDs in | |
| 56 Substitute array */ | |
| 57 }; | |
| 58 | |
| 59 typedef struct HB_SingleSubstFormat2_ HB_SingleSubstFormat2; | |
| 60 | |
| 61 | |
| 62 struct HB_SingleSubst_ | |
| 63 { | |
| 64 union | |
| 65 { | |
| 66 HB_SingleSubstFormat1 ssf1; | |
| 67 HB_SingleSubstFormat2 ssf2; | |
| 68 } ssf; | |
| 69 | |
| 70 HB_Coverage Coverage; /* Coverage table */ | |
| 71 HB_Byte SubstFormat; /* 1 or 2 */ | |
| 72 }; | |
| 73 | |
| 74 typedef struct HB_SingleSubst_ HB_SingleSubst; | |
| 75 | |
| 76 | |
| 77 /* LookupType 2 */ | |
| 78 | |
| 79 struct HB_Sequence_ | |
| 80 { | |
| 81 HB_UShort* Substitute; /* string of glyph IDs to | |
| 82 substitute */ | |
| 83 HB_UShort GlyphCount; /* number of glyph IDs in the | |
| 84 Substitute array */ | |
| 85 }; | |
| 86 | |
| 87 typedef struct HB_Sequence_ HB_Sequence; | |
| 88 | |
| 89 | |
| 90 struct HB_MultipleSubst_ | |
| 91 { | |
| 92 HB_Sequence* Sequence; /* array of Sequence tables */ | |
| 93 HB_Coverage Coverage; /* Coverage table */ | |
| 94 HB_UShort SubstFormat; /* always 1 */ | |
| 95 HB_UShort SequenceCount; /* number of Sequence tables */ | |
| 96 }; | |
| 97 | |
| 98 typedef struct HB_MultipleSubst_ HB_MultipleSubst; | |
| 99 | |
| 100 | |
| 101 /* LookupType 3 */ | |
| 102 | |
| 103 struct HB_AlternateSet_ | |
| 104 { | |
| 105 HB_UShort* Alternate; /* array of alternate glyph IDs */ | |
| 106 HB_UShort GlyphCount; /* number of glyph IDs in the | |
| 107 Alternate array */ | |
| 108 }; | |
| 109 | |
| 110 typedef struct HB_AlternateSet_ HB_AlternateSet; | |
| 111 | |
| 112 | |
| 113 struct HB_AlternateSubst_ | |
| 114 { | |
| 115 HB_AlternateSet* AlternateSet; /* array of AlternateSet tables */ | |
| 116 HB_Coverage Coverage; /* Coverage table */ | |
| 117 HB_UShort SubstFormat; /* always 1 */ | |
| 118 HB_UShort AlternateSetCount; | |
| 119 /* number of AlternateSet tables */ | |
| 120 }; | |
| 121 | |
| 122 typedef struct HB_AlternateSubst_ HB_AlternateSubst; | |
| 123 | |
| 124 | |
| 125 /* LookupType 4 */ | |
| 126 | |
| 127 struct HB_Ligature_ | |
| 128 { | |
| 129 HB_UShort* Component; /* array of component glyph IDs */ | |
| 130 HB_UShort LigGlyph; /* glyphID of ligature | |
| 131 to substitute */ | |
| 132 HB_UShort ComponentCount; /* number of components in ligature */ | |
| 133 }; | |
| 134 | |
| 135 typedef struct HB_Ligature_ HB_Ligature; | |
| 136 | |
| 137 | |
| 138 struct HB_LigatureSet_ | |
| 139 { | |
| 140 HB_Ligature* Ligature; /* array of Ligature tables */ | |
| 141 HB_UShort LigatureCount; /* number of Ligature tables */ | |
| 142 }; | |
| 143 | |
| 144 typedef struct HB_LigatureSet_ HB_LigatureSet; | |
| 145 | |
| 146 | |
| 147 struct HB_LigatureSubst_ | |
| 148 { | |
| 149 HB_LigatureSet* LigatureSet; /* array of LigatureSet tables */ | |
| 150 HB_Coverage Coverage; /* Coverage table */ | |
| 151 HB_UShort SubstFormat; /* always 1 */ | |
| 152 HB_UShort LigatureSetCount; /* number of LigatureSet tables */ | |
| 153 }; | |
| 154 | |
| 155 typedef struct HB_LigatureSubst_ HB_LigatureSubst; | |
| 156 | |
| 157 | |
| 158 /* needed by both lookup type 5 and 6 */ | |
| 159 | |
| 160 struct HB_SubstLookupRecord_ | |
| 161 { | |
| 162 HB_UShort SequenceIndex; /* index into current | |
| 163 glyph sequence */ | |
| 164 HB_UShort LookupListIndex; /* Lookup to apply to that pos. */ | |
| 165 }; | |
| 166 | |
| 167 typedef struct HB_SubstLookupRecord_ HB_SubstLookupRecord; | |
| 168 | |
| 169 | |
| 170 /* LookupType 5 */ | |
| 171 | |
| 172 struct HB_SubRule_ | |
| 173 { | |
| 174 HB_UShort* Input; /* array of input glyph IDs */ | |
| 175 HB_SubstLookupRecord* SubstLookupRecord; | |
| 176 /* array of SubstLookupRecord | |
| 177 tables */ | |
| 178 HB_UShort GlyphCount; /* total number of input glyphs */ | |
| 179 HB_UShort SubstCount; /* number of SubstLookupRecord | |
| 180 tables */ | |
| 181 }; | |
| 182 | |
| 183 typedef struct HB_SubRule_ HB_SubRule; | |
| 184 | |
| 185 | |
| 186 struct HB_SubRuleSet_ | |
| 187 { | |
| 188 HB_SubRule* SubRule; /* array of SubRule tables */ | |
| 189 HB_UShort SubRuleCount; /* number of SubRule tables */ | |
| 190 }; | |
| 191 | |
| 192 typedef struct HB_SubRuleSet_ HB_SubRuleSet; | |
| 193 | |
| 194 | |
| 195 struct HB_ContextSubstFormat1_ | |
| 196 { | |
| 197 HB_SubRuleSet* SubRuleSet; /* array of SubRuleSet tables */ | |
| 198 HB_Coverage Coverage; /* Coverage table */ | |
| 199 HB_UShort SubRuleSetCount; /* number of SubRuleSet tables */ | |
| 200 }; | |
| 201 | |
| 202 typedef struct HB_ContextSubstFormat1_ HB_ContextSubstFormat1; | |
| 203 | |
| 204 | |
| 205 struct HB_SubClassRule_ | |
| 206 { | |
| 207 HB_UShort* Class; /* array of classes */ | |
| 208 HB_SubstLookupRecord* SubstLookupRecord; | |
| 209 /* array of SubstLookupRecord | |
| 210 tables */ | |
| 211 HB_UShort GlyphCount; /* total number of context classes */ | |
| 212 HB_UShort SubstCount; /* number of SubstLookupRecord | |
| 213 tables */ | |
| 214 }; | |
| 215 | |
| 216 typedef struct HB_SubClassRule_ HB_SubClassRule; | |
| 217 | |
| 218 | |
| 219 struct HB_SubClassSet_ | |
| 220 { | |
| 221 HB_SubClassRule* SubClassRule; /* array of SubClassRule tables */ | |
| 222 HB_UShort SubClassRuleCount; | |
| 223 /* number of SubClassRule tables */ | |
| 224 }; | |
| 225 | |
| 226 typedef struct HB_SubClassSet_ HB_SubClassSet; | |
| 227 | |
| 228 | |
| 229 /* The `MaxContextLength' field is not defined in the TTO specification | |
| 230 but simplifies the implementation of this format. It holds the | |
| 231 maximal context length used in the context rules. */ | |
| 232 | |
| 233 struct HB_ContextSubstFormat2_ | |
| 234 { | |
| 235 HB_SubClassSet* SubClassSet; /* array of SubClassSet tables */ | |
| 236 HB_Coverage Coverage; /* Coverage table */ | |
| 237 HB_ClassDefinition ClassDef; /* ClassDef table */ | |
| 238 HB_UShort SubClassSetCount; | |
| 239 /* number of SubClassSet tables */ | |
| 240 HB_UShort MaxContextLength; | |
| 241 /* maximal context length */ | |
| 242 }; | |
| 243 | |
| 244 typedef struct HB_ContextSubstFormat2_ HB_ContextSubstFormat2; | |
| 245 | |
| 246 | |
| 247 struct HB_ContextSubstFormat3_ | |
| 248 { | |
| 249 HB_Coverage* Coverage; /* array of Coverage tables */ | |
| 250 HB_SubstLookupRecord* SubstLookupRecord; | |
| 251 /* array of substitution lookups */ | |
| 252 HB_UShort GlyphCount; /* number of input glyphs */ | |
| 253 HB_UShort SubstCount; /* number of SubstLookupRecords */ | |
| 254 }; | |
| 255 | |
| 256 typedef struct HB_ContextSubstFormat3_ HB_ContextSubstFormat3; | |
| 257 | |
| 258 | |
| 259 struct HB_ContextSubst_ | |
| 260 { | |
| 261 union | |
| 262 { | |
| 263 HB_ContextSubstFormat1 csf1; | |
| 264 HB_ContextSubstFormat2 csf2; | |
| 265 HB_ContextSubstFormat3 csf3; | |
| 266 } csf; | |
| 267 | |
| 268 HB_Byte SubstFormat; /* 1, 2, or 3 */ | |
| 269 }; | |
| 270 | |
| 271 typedef struct HB_ContextSubst_ HB_ContextSubst; | |
| 272 | |
| 273 | |
| 274 /* LookupType 6 */ | |
| 275 | |
| 276 struct HB_ChainSubRule_ | |
| 277 { | |
| 278 HB_UShort* Backtrack; /* array of backtrack glyph IDs */ | |
| 279 HB_UShort* Input; /* array of input glyph IDs */ | |
| 280 HB_UShort* Lookahead; /* array of lookahead glyph IDs */ | |
| 281 HB_SubstLookupRecord* SubstLookupRecord; | |
| 282 /* array of SubstLookupRecords */ | |
| 283 HB_UShort BacktrackGlyphCount; | |
| 284 /* total number of backtrack glyphs */ | |
| 285 HB_UShort InputGlyphCount; | |
| 286 /* total number of input glyphs */ | |
| 287 HB_UShort LookaheadGlyphCount; | |
| 288 /* total number of lookahead glyphs */ | |
| 289 HB_UShort SubstCount; /* number of SubstLookupRecords */ | |
| 290 }; | |
| 291 | |
| 292 typedef struct HB_ChainSubRule_ HB_ChainSubRule; | |
| 293 | |
| 294 | |
| 295 struct HB_ChainSubRuleSet_ | |
| 296 { | |
| 297 HB_ChainSubRule* ChainSubRule; /* array of ChainSubRule tables */ | |
| 298 HB_UShort ChainSubRuleCount; | |
| 299 /* number of ChainSubRule tables */ | |
| 300 }; | |
| 301 | |
| 302 typedef struct HB_ChainSubRuleSet_ HB_ChainSubRuleSet; | |
| 303 | |
| 304 | |
| 305 struct HB_ChainContextSubstFormat1_ | |
| 306 { | |
| 307 HB_ChainSubRuleSet* ChainSubRuleSet; | |
| 308 /* array of ChainSubRuleSet tables */ | |
| 309 HB_Coverage Coverage; /* Coverage table */ | |
| 310 HB_UShort ChainSubRuleSetCount; | |
| 311 /* number of ChainSubRuleSet tables */ | |
| 312 }; | |
| 313 | |
| 314 typedef struct HB_ChainContextSubstFormat1_ HB_ChainContextSubstFormat1; | |
| 315 | |
| 316 | |
| 317 struct HB_ChainSubClassRule_ | |
| 318 { | |
| 319 HB_UShort* Backtrack; /* array of backtrack classes */ | |
| 320 HB_UShort* Input; /* array of context classes */ | |
| 321 HB_UShort* Lookahead; /* array of lookahead classes */ | |
| 322 HB_SubstLookupRecord* SubstLookupRecord; | |
| 323 /* array of substitution lookups */ | |
| 324 HB_UShort BacktrackGlyphCount; | |
| 325 /* total number of backtrack | |
| 326 classes */ | |
| 327 HB_UShort InputGlyphCount; | |
| 328 /* total number of context classes */ | |
| 329 HB_UShort LookaheadGlyphCount; | |
| 330 /* total number of lookahead | |
| 331 classes */ | |
| 332 HB_UShort SubstCount; /* number of SubstLookupRecords */ | |
| 333 }; | |
| 334 | |
| 335 typedef struct HB_ChainSubClassRule_ HB_ChainSubClassRule; | |
| 336 | |
| 337 | |
| 338 struct HB_ChainSubClassSet_ | |
| 339 { | |
| 340 HB_ChainSubClassRule* ChainSubClassRule; | |
| 341 /* array of ChainSubClassRule | |
| 342 tables */ | |
| 343 HB_UShort ChainSubClassRuleCount; | |
| 344 /* number of ChainSubClassRule | |
| 345 tables */ | |
| 346 }; | |
| 347 | |
| 348 typedef struct HB_ChainSubClassSet_ HB_ChainSubClassSet; | |
| 349 | |
| 350 | |
| 351 /* The `MaxXXXLength' fields are not defined in the TTO specification | |
| 352 but simplifies the implementation of this format. It holds the | |
| 353 maximal context length used in the specific context rules. */ | |
| 354 | |
| 355 struct HB_ChainContextSubstFormat2_ | |
| 356 { | |
| 357 HB_ChainSubClassSet* ChainSubClassSet; | |
| 358 /* array of ChainSubClassSet | |
| 359 tables */ | |
| 360 HB_Coverage Coverage; /* Coverage table */ | |
| 361 | |
| 362 HB_ClassDefinition BacktrackClassDef; | |
| 363 /* BacktrackClassDef table */ | |
| 364 HB_ClassDefinition InputClassDef; | |
| 365 /* InputClassDef table */ | |
| 366 HB_ClassDefinition LookaheadClassDef; | |
| 367 /* LookaheadClassDef table */ | |
| 368 | |
| 369 HB_UShort ChainSubClassSetCount; | |
| 370 /* number of ChainSubClassSet | |
| 371 tables */ | |
| 372 HB_UShort MaxBacktrackLength; | |
| 373 /* maximal backtrack length */ | |
| 374 HB_UShort MaxLookaheadLength; | |
| 375 /* maximal lookahead length */ | |
| 376 HB_UShort MaxInputLength; | |
| 377 /* maximal input length */ | |
| 378 }; | |
| 379 | |
| 380 typedef struct HB_ChainContextSubstFormat2_ HB_ChainContextSubstFormat2; | |
| 381 | |
| 382 | |
| 383 struct HB_ChainContextSubstFormat3_ | |
| 384 { | |
| 385 HB_Coverage* BacktrackCoverage; | |
| 386 /* array of backtrack Coverage | |
| 387 tables */ | |
| 388 HB_Coverage* InputCoverage; | |
| 389 /* array of input coverage | |
| 390 tables */ | |
| 391 HB_Coverage* LookaheadCoverage; | |
| 392 /* array of lookahead coverage | |
| 393 tables */ | |
| 394 HB_SubstLookupRecord* SubstLookupRecord; | |
| 395 /* array of substitution lookups */ | |
| 396 HB_UShort BacktrackGlyphCount; | |
| 397 /* number of backtrack glyphs */ | |
| 398 HB_UShort InputGlyphCount; | |
| 399 /* number of input glyphs */ | |
| 400 HB_UShort LookaheadGlyphCount; | |
| 401 /* number of lookahead glyphs */ | |
| 402 HB_UShort SubstCount; /* number of SubstLookupRecords */ | |
| 403 }; | |
| 404 | |
| 405 typedef struct HB_ChainContextSubstFormat3_ HB_ChainContextSubstFormat3; | |
| 406 | |
| 407 | |
| 408 struct HB_ChainContextSubst_ | |
| 409 { | |
| 410 union | |
| 411 { | |
| 412 HB_ChainContextSubstFormat1 ccsf1; | |
| 413 HB_ChainContextSubstFormat2 ccsf2; | |
| 414 HB_ChainContextSubstFormat3 ccsf3; | |
| 415 } ccsf; | |
| 416 | |
| 417 HB_Byte SubstFormat; /* 1, 2, or 3 */ | |
| 418 }; | |
| 419 | |
| 420 typedef struct HB_ChainContextSubst_ HB_ChainContextSubst; | |
| 421 | |
| 422 | |
| 423 #if 0 | |
| 424 /* LookupType 7 */ | |
| 425 struct HB_ExtensionSubst_ | |
| 426 { | |
| 427 HB_GSUB_SubTable *subtable; /* referenced subtable */ | |
| 428 HB_UShort SubstFormat; /* always 1 */ | |
| 429 HB_UShort LookuptType; /* lookup-type of referenced subtable */ | |
| 430 }; | |
| 431 | |
| 432 typedef struct HB_ExtensionSubst_ HB_ExtensionSubst; | |
| 433 #endif | |
| 434 | |
| 435 | |
| 436 /* LookupType 8 */ | |
| 437 struct HB_ReverseChainContextSubst_ | |
| 438 { | |
| 439 HB_Coverage* LookaheadCoverage; /* array of lookahead Coverage | |
| 440 tables */ | |
| 441 HB_UShort* Substitute; /* array of substitute Glyph ID */ | |
| 442 HB_Coverage* BacktrackCoverage; /* array of backtrack Coverage | |
| 443 tables */ | |
| 444 HB_Coverage Coverage; /* coverage table for input glyphs */ | |
| 445 HB_UShort SubstFormat; /* always 1 */ | |
| 446 HB_UShort BacktrackGlyphCount; /* number of backtrack glyphs */ | |
| 447 HB_UShort LookaheadGlyphCount; /* number of lookahead glyphs */ | |
| 448 HB_UShort GlyphCount; /* number of Glyph IDs */ | |
| 449 }; | |
| 450 | |
| 451 typedef struct HB_ReverseChainContextSubst_ HB_ReverseChainContextSubst; | |
| 452 | |
| 453 | |
| 454 union HB_GSUB_SubTable_ | |
| 455 { | |
| 456 HB_SingleSubst single; | |
| 457 HB_MultipleSubst multiple; | |
| 458 HB_AlternateSubst alternate; | |
| 459 HB_LigatureSubst ligature; | |
| 460 HB_ContextSubst context; | |
| 461 HB_ChainContextSubst chain; | |
| 462 HB_ReverseChainContextSubst reverse; | |
| 463 }; | |
| 464 | |
| 465 | |
| 466 | |
| 467 | |
| 468 HB_INTERNAL HB_Error | |
| 469 _HB_GSUB_Load_SubTable( HB_GSUB_SubTable* st, | |
| 470 HB_Stream stream, | |
| 471 HB_UShort lookup_type ); | |
| 472 | |
| 473 HB_INTERNAL void | |
| 474 _HB_GSUB_Free_SubTable( HB_GSUB_SubTable* st, | |
| 475 HB_UShort lookup_type ); | |
| 476 | |
| 477 #ifdef HB_USE_PACKED_STRUCTS | |
| 478 #pragma pack(pop) | |
| 479 #endif | |
| 480 | |
| 481 HB_END_HEADER | |
| 482 | |
| 483 #endif /* HARFBUZZ_GSUB_PRIVATE_H */ | |
| OLD | NEW |