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_GDEF_H | |
27 #define HARFBUZZ_GDEF_H | |
28 | |
29 #include "harfbuzz-open.h" | |
30 #include "harfbuzz-stream.h" | |
31 | |
32 HB_BEGIN_HEADER | |
33 | |
34 /* GDEF glyph properties. Note that HB_GDEF_COMPONENT has no corresponding | |
35 * flag in the LookupFlag field. */ | |
36 #define HB_GDEF_BASE_GLYPH 0x0002 | |
37 #define HB_GDEF_LIGATURE 0x0004 | |
38 #define HB_GDEF_MARK 0x0008 | |
39 #define HB_GDEF_COMPONENT 0x0010 | |
40 | |
41 | |
42 typedef struct HB_AttachPoint_ HB_AttachPoint; | |
43 | |
44 | |
45 struct HB_AttachList_ | |
46 { | |
47 HB_Bool loaded; | |
48 | |
49 HB_Coverage Coverage; /* Coverage table */ | |
50 HB_UShort GlyphCount; /* number of glyphs with | |
51 attachments */ | |
52 HB_AttachPoint* AttachPoint; /* array of AttachPoint tables */ | |
53 }; | |
54 | |
55 typedef struct HB_AttachList_ HB_AttachList; | |
56 | |
57 typedef struct HB_LigGlyph_ HB_LigGlyph; | |
58 | |
59 struct HB_LigCaretList_ | |
60 { | |
61 HB_Bool loaded; | |
62 | |
63 HB_Coverage Coverage; /* Coverage table */ | |
64 HB_UShort LigGlyphCount; /* number of ligature glyphs */ | |
65 HB_LigGlyph* LigGlyph; /* array of LigGlyph tables */ | |
66 }; | |
67 | |
68 typedef struct HB_LigCaretList_ HB_LigCaretList; | |
69 | |
70 | |
71 | |
72 /* The `NewGlyphClasses' field is not defined in the TTO specification. | |
73 We use it for fonts with a constructed `GlyphClassDef' structure | |
74 (i.e., which don't have a GDEF table) to collect glyph classes | |
75 assigned during the lookup process. The number of arrays in this | |
76 pointer array is GlyphClassDef->cd.cd2.ClassRangeCount+1; the nth | |
77 array then contains the glyph class values of the glyphs not covered | |
78 by the ClassRangeRecords structures with index n-1 and n. We store | |
79 glyph class values for four glyphs in a single array element. | |
80 | |
81 `LastGlyph' is identical to the number of glyphs minus one in the | |
82 font; we need it only if `NewGlyphClasses' is not NULL (to have an | |
83 upper bound for the last array). | |
84 | |
85 Note that we first store the file offset to the `MarkAttachClassDef' | |
86 field (which has been introduced in OpenType 1.2) -- since the | |
87 `Version' field value hasn't been increased to indicate that we have | |
88 one more field for some obscure reason, we must parse the GSUB table | |
89 to find out whether class values refer to this table. Only then we | |
90 can finally load the MarkAttachClassDef structure if necessary. */ | |
91 | |
92 struct HB_GDEFHeader_ | |
93 { | |
94 HB_UInt offset; | |
95 | |
96 HB_16Dot16 Version; | |
97 | |
98 HB_ClassDefinition GlyphClassDef; | |
99 HB_AttachList AttachList; | |
100 HB_LigCaretList LigCaretList; | |
101 HB_UInt MarkAttachClassDef_offset; | |
102 HB_ClassDefinition MarkAttachClassDef; /* new in OT 1.2 */ | |
103 | |
104 HB_UShort LastGlyph; | |
105 HB_UShort** NewGlyphClasses; | |
106 }; | |
107 | |
108 typedef struct HB_GDEFHeader_ HB_GDEFHeader; | |
109 typedef struct HB_GDEFHeader_* HB_GDEF; | |
110 | |
111 | |
112 HB_Error HB_New_GDEF_Table( HB_GDEFHeader** retptr ); | |
113 | |
114 | |
115 HB_Error HB_Load_GDEF_Table( HB_Stream stream, | |
116 HB_GDEFHeader** gdef ); | |
117 | |
118 | |
119 HB_Error HB_Done_GDEF_Table ( HB_GDEFHeader* gdef ); | |
120 | |
121 | |
122 HB_Error HB_GDEF_Get_Glyph_Property( HB_GDEFHeader* gdef, | |
123 HB_UShort glyphID, | |
124 HB_UShort* property ); | |
125 | |
126 HB_Error HB_GDEF_Build_ClassDefinition( HB_GDEFHeader* gdef, | |
127 HB_UShort num_glyphs, | |
128 HB_UShort glyph_count, | |
129 HB_UShort* glyph_array, | |
130 HB_UShort* class_array ); | |
131 | |
132 | |
133 HB_END_HEADER | |
134 | |
135 #endif /* HARFBUZZ_GDEF_H */ | |
OLD | NEW |