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_OPEN_H 27 #define HARFBUZZ_OPEN_H 28 29 #include "harfbuzz-global.h" 30 31 HB_BEGIN_HEADER 32 33 #ifdef HB_USE_PACKED_STRUCTS 34 #pragma pack(push, 1) 35 #endif 36 37 /* Use this if a feature applies to all glyphs */ 38 #define HB_ALL_GLYPHS 0xFFFF 39 40 #define HB_DEFAULT_LANGUAGE 0xFFFF 41 42 #define HB_MAX_NESTING_LEVEL 100 43 44 45 /* Script list related structures */ 46 47 struct HB_LangSys_ 48 { 49 HB_UShort* FeatureIndex; /* array of Feature indices */ 50 HB_UShort LookupOrderOffset; /* always 0 for TT Open 1.0 */ 51 HB_UShort ReqFeatureIndex; /* required FeatureIndex */ 52 HB_UShort FeatureCount; /* number of Feature indices */ 53 }; 54 55 typedef struct HB_LangSys_ HB_LangSys; 56 57 58 struct HB_LangSysRecord_ 59 { 60 HB_LangSys LangSys; /* LangSys table */ 61 HB_UInt LangSysTag; /* LangSysTag identifier */ 62 }; 63 64 typedef struct HB_LangSysRecord_ HB_LangSysRecord; 65 66 67 struct HB_ScriptTable_ 68 { 69 HB_LangSysRecord* LangSysRecord; /* array of LangSysRecords */ 70 HB_LangSys DefaultLangSys; /* DefaultLangSys table */ 71 HB_UShort LangSysCount; /* number of LangSysRecords */ 72 }; 73 74 typedef struct HB_ScriptTable_ HB_ScriptTable; 75 76 77 struct HB_ScriptRecord_ 78 { 79 HB_UInt ScriptTag; /* ScriptTag identifier */ 80 HB_ScriptTable Script; /* Script table */ 81 }; 82 83 typedef struct HB_ScriptRecord_ HB_ScriptRecord; 84 85 86 struct HB_ScriptList_ 87 { 88 HB_ScriptRecord* ScriptRecord; /* array of ScriptRecords */ 89 HB_UShort ScriptCount; /* number of ScriptRecords */ 90 }; 91 92 typedef struct HB_ScriptList_ HB_ScriptList; 93 94 95 /* Feature list related structures */ 96 97 struct HB_Feature_ 98 { 99 HB_UShort* LookupListIndex; /* array of LookupList indices */ 100 HB_UShort FeatureParams; /* always 0 for TT Open 1.0 */ 101 HB_UShort LookupListCount; /* number of LookupList indices */ 102 }; 103 104 typedef struct HB_Feature_ HB_Feature; 105 106 107 struct HB_FeatureRecord_ 108 { 109 HB_UInt FeatureTag; /* FeatureTag identifier */ 110 HB_Feature Feature; /* Feature table */ 111 }; 112 113 typedef struct HB_FeatureRecord_ HB_FeatureRecord; 114 115 116 struct HB_FeatureList_ 117 { 118 HB_UShort* ApplyOrder; /* order to apply features */ 119 HB_FeatureRecord* FeatureRecord; /* array of FeatureRecords */ 120 HB_UShort FeatureCount; /* number of FeatureRecords */ 121 HB_UShort ApplyCount; /* number of elements in ApplyOrder */ 122 }; 123 124 typedef struct HB_FeatureList_ HB_FeatureList; 125 126 127 /* Lookup list related structures */ 128 129 typedef struct HB_SubTable_ HB_SubTable; 130 131 132 struct HB_Lookup_ 133 { 134 HB_SubTable* SubTable; /* array of SubTables */ 135 HB_UShort LookupType; /* Lookup type */ 136 HB_UShort LookupFlag; /* Lookup qualifiers */ 137 HB_UShort SubTableCount; /* number of SubTables */ 138 }; 139 140 typedef struct HB_Lookup_ HB_Lookup; 141 142 143 /* The `Properties' field is not defined in the OpenType specification but 144 is needed for processing lookups. If properties[n] is > 0, the 145 functions HB_GSUB_Apply_String() resp. HB_GPOS_Apply_String() will 146 process Lookup[n] for glyphs which have the specific bit not set in 147 the `properties' field of the input string object. */ 148 149 struct HB_LookupList_ 150 { 151 HB_Lookup* Lookup; /* array of Lookup records */ 152 HB_UInt* Properties; /* array of flags */ 153 HB_UShort LookupCount; /* number of Lookups */ 154 }; 155 156 typedef struct HB_LookupList_ HB_LookupList; 157 158 159 /* Possible LookupFlag bit masks. `HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS' comes from the 160 OpenType 1.2 specification; HB_LOOKUP_FLAG_RIGHT_TO_LEFT has been (re)introduced in 161 OpenType 1.3 -- if set, the last glyph in a cursive attachment 162 sequence has to be positioned on the baseline -- regardless of the 163 writing direction. */ 164 165 #define HB_LOOKUP_FLAG_RIGHT_TO_LEFT 0x0001 166 #define HB_LOOKUP_FLAG_IGNORE_BASE_GLYPHS 0x0002 167 #define HB_LOOKUP_FLAG_IGNORE_LIGATURES 0x0004 168 #define HB_LOOKUP_FLAG_IGNORE_MARKS 0x0008 169 #define HB_LOOKUP_FLAG_IGNORE_SPECIAL_MARKS 0xFF00 170 171 172 struct HB_CoverageFormat1_ 173 { 174 HB_UShort* GlyphArray; /* array of glyph IDs */ 175 HB_UShort GlyphCount; /* number of glyphs in GlyphArray */ 176 }; 177 178 typedef struct HB_CoverageFormat1_ HB_CoverageFormat1; 179 180 181 struct HB_RangeRecord_ 182 { 183 HB_UShort Start; /* first glyph ID in the range */ 184 HB_UShort End; /* last glyph ID in the range */ 185 HB_UShort StartCoverageIndex; /* coverage index of first 186 glyph ID in the range */ 187 }; 188 189 typedef struct HB_RangeRecord_ HB_RangeRecord; 190 191 192 struct HB_CoverageFormat2_ 193 { 194 HB_RangeRecord* RangeRecord; /* array of RangeRecords */ 195 HB_UShort RangeCount; /* number of RangeRecords */ 196 }; 197 198 typedef struct HB_CoverageFormat2_ HB_CoverageFormat2; 199 200 201 struct HB_Coverage_ 202 { 203 HB_Byte CoverageFormat; /* 1 or 2 */ 204 205 union 206 { 207 HB_CoverageFormat1 cf1; 208 HB_CoverageFormat2 cf2; 209 } cf; 210 }; 211 212 typedef struct HB_Coverage_ HB_Coverage; 213 214 215 struct HB_ClassDefFormat1_ 216 { 217 HB_UShort* ClassValueArray; /* array of class values */ 218 HB_UShort StartGlyph; /* first glyph ID of the 219 ClassValueArray */ 220 HB_UShort GlyphCount; /* size of the ClassValueArray */ 221 }; 222 223 typedef struct HB_ClassDefFormat1_ HB_ClassDefFormat1; 224 225 226 struct HB_ClassRangeRecord_ 227 { 228 HB_UShort Start; /* first glyph ID in the range */ 229 HB_UShort End; /* last glyph ID in the range */ 230 HB_UShort Class; /* applied to all glyphs in range */ 231 }; 232 233 typedef struct HB_ClassRangeRecord_ HB_ClassRangeRecord; 234 235 236 struct HB_ClassDefFormat2_ 237 { 238 HB_ClassRangeRecord* ClassRangeRecord; 239 /* array of ClassRangeRecords */ 240 HB_UShort ClassRangeCount; 241 /* number of ClassRangeRecords */ 242 }; 243 244 typedef struct HB_ClassDefFormat2_ HB_ClassDefFormat2; 245 246 247 struct HB_ClassDefinition_ 248 { 249 union 250 { 251 HB_ClassDefFormat1 cd1; 252 HB_ClassDefFormat2 cd2; 253 } cd; 254 255 HB_Byte ClassFormat; /* 1 or 2 */ 256 HB_Bool loaded; 257 }; 258 259 typedef struct HB_ClassDefinition_ HB_ClassDefinition; 260 261 262 struct HB_Device_ 263 { 264 HB_UShort* DeltaValue; /* array of compressed data */ 265 HB_UShort StartSize; /* smallest size to correct */ 266 HB_UShort EndSize; /* largest size to correct */ 267 HB_Byte DeltaFormat; /* DeltaValue array data format: 268 1, 2, or 3 */ 269 }; 270 271 typedef struct HB_Device_ HB_Device; 272 273 274 enum HB_Type_ 275 { 276 HB_Type_GSUB, 277 HB_Type_GPOS 278 }; 279 280 typedef enum HB_Type_ HB_Type; 281 282 #ifdef HB_USE_PACKED_STRUCTS 283 #pragma pack(pop) 284 #endif 285 286 HB_END_HEADER 287 288 #endif /* HARFBUZZ_OPEN_H */ 289