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_GDEF_PRIVATE_H 27 #define HARFBUZZ_GDEF_PRIVATE_H 28 29 #include "harfbuzz-impl.h" 30 #include "harfbuzz-stream-private.h" 31 #include "harfbuzz-buffer-private.h" 32 #include "harfbuzz-gdef.h" 33 34 HB_BEGIN_HEADER 35 36 37 /* Attachment related structures */ 38 39 struct HB_AttachPoint_ 40 { 41 HB_UShort PointCount; /* size of the PointIndex array */ 42 HB_UShort* PointIndex; /* array of contour points */ 43 }; 44 45 /* Ligature Caret related structures */ 46 47 struct HB_CaretValueFormat1_ 48 { 49 HB_Short Coordinate; /* x or y value (in design units) */ 50 }; 51 52 typedef struct HB_CaretValueFormat1_ HB_CaretValueFormat1; 53 54 55 struct HB_CaretValueFormat2_ 56 { 57 HB_UShort CaretValuePoint; /* contour point index on glyph */ 58 }; 59 60 typedef struct HB_CaretValueFormat2_ HB_CaretValueFormat2; 61 62 63 struct HB_CaretValueFormat3_ 64 { 65 HB_Short Coordinate; /* x or y value (in design units) */ 66 HB_Device Device; /* Device table for x or y value */ 67 }; 68 69 typedef struct HB_CaretValueFormat3_ HB_CaretValueFormat3; 70 71 72 struct HB_CaretValueFormat4_ 73 { 74 HB_UShort IdCaretValue; /* metric ID */ 75 }; 76 77 typedef struct HB_CaretValueFormat4_ HB_CaretValueFormat4; 78 79 80 struct HB_CaretValue_ 81 { 82 HB_UShort CaretValueFormat; /* 1, 2, 3, or 4 */ 83 84 union 85 { 86 HB_CaretValueFormat1 cvf1; 87 HB_CaretValueFormat2 cvf2; 88 HB_CaretValueFormat3 cvf3; 89 HB_CaretValueFormat4 cvf4; 90 } cvf; 91 }; 92 93 typedef struct HB_CaretValue_ HB_CaretValue; 94 95 96 struct HB_LigGlyph_ 97 { 98 HB_Bool loaded; 99 100 HB_UShort CaretCount; /* number of caret values */ 101 HB_CaretValue* CaretValue; /* array of caret values */ 102 }; 103 104 105 HB_INTERNAL HB_Error 106 _HB_GDEF_Add_Glyph_Property( HB_GDEFHeader* gdef, 107 HB_UShort glyphID, 108 HB_UShort property ); 109 110 HB_INTERNAL HB_Error 111 _HB_GDEF_Check_Property( HB_GDEFHeader* gdef, 112 HB_GlyphItem item, 113 HB_UShort flags, 114 HB_UShort* property ); 115 116 HB_INTERNAL HB_Error 117 _HB_GDEF_LoadMarkAttachClassDef_From_LookupFlags( HB_GDEFHeader* gdef, 118 HB_Stream input, 119 HB_Lookup* lo, 120 HB_UShort num_lookups ); 121 122 HB_END_HEADER 123 124 #endif /* HARFBUZZ_GDEF_PRIVATE_H */ 125