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 31HB_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 47struct 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 55typedef struct HB_LangSys_ HB_LangSys; 56 57 58struct HB_LangSysRecord_ 59{ 60 HB_LangSys LangSys; /* LangSys table */ 61 HB_UInt LangSysTag; /* LangSysTag identifier */ 62}; 63 64typedef struct HB_LangSysRecord_ HB_LangSysRecord; 65 66 67struct 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 74typedef struct HB_ScriptTable_ HB_ScriptTable; 75 76 77struct HB_ScriptRecord_ 78{ 79 HB_UInt ScriptTag; /* ScriptTag identifier */ 80 HB_ScriptTable Script; /* Script table */ 81}; 82 83typedef struct HB_ScriptRecord_ HB_ScriptRecord; 84 85 86struct HB_ScriptList_ 87{ 88 HB_ScriptRecord* ScriptRecord; /* array of ScriptRecords */ 89 HB_UShort ScriptCount; /* number of ScriptRecords */ 90}; 91 92typedef struct HB_ScriptList_ HB_ScriptList; 93 94 95/* Feature list related structures */ 96 97struct 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 104typedef struct HB_Feature_ HB_Feature; 105 106 107struct HB_FeatureRecord_ 108{ 109 HB_UInt FeatureTag; /* FeatureTag identifier */ 110 HB_Feature Feature; /* Feature table */ 111}; 112 113typedef struct HB_FeatureRecord_ HB_FeatureRecord; 114 115 116struct 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 124typedef struct HB_FeatureList_ HB_FeatureList; 125 126 127/* Lookup list related structures */ 128 129typedef struct HB_SubTable_ HB_SubTable; 130 131 132struct 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 140typedef 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 149struct 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 156typedef 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 172struct HB_CoverageFormat1_ 173{ 174 HB_UShort* GlyphArray; /* array of glyph IDs */ 175 HB_UShort GlyphCount; /* number of glyphs in GlyphArray */ 176}; 177 178typedef struct HB_CoverageFormat1_ HB_CoverageFormat1; 179 180 181struct 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 189typedef struct HB_RangeRecord_ HB_RangeRecord; 190 191 192struct HB_CoverageFormat2_ 193{ 194 HB_RangeRecord* RangeRecord; /* array of RangeRecords */ 195 HB_UShort RangeCount; /* number of RangeRecords */ 196}; 197 198typedef struct HB_CoverageFormat2_ HB_CoverageFormat2; 199 200 201struct 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 212typedef struct HB_Coverage_ HB_Coverage; 213 214 215struct 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 223typedef struct HB_ClassDefFormat1_ HB_ClassDefFormat1; 224 225 226struct 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 233typedef struct HB_ClassRangeRecord_ HB_ClassRangeRecord; 234 235 236struct HB_ClassDefFormat2_ 237{ 238 HB_ClassRangeRecord* ClassRangeRecord; 239 /* array of ClassRangeRecords */ 240 HB_UShort ClassRangeCount; 241 /* number of ClassRangeRecords */ 242}; 243 244typedef struct HB_ClassDefFormat2_ HB_ClassDefFormat2; 245 246 247struct 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 259typedef struct HB_ClassDefinition_ HB_ClassDefinition; 260 261 262struct 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 271typedef struct HB_Device_ HB_Device; 272 273 274enum HB_Type_ 275{ 276 HB_Type_GSUB, 277 HB_Type_GPOS 278}; 279 280typedef enum HB_Type_ HB_Type; 281 282#ifdef HB_USE_PACKED_STRUCTS 283#pragma pack(pop) 284#endif 285 286HB_END_HEADER 287 288#endif /* HARFBUZZ_OPEN_H */ 289