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_GPOS_H |
27 | #define HARFBUZZ_GPOS_H |
28 | |
29 | #include "harfbuzz-gdef.h" |
30 | #include "harfbuzz-buffer.h" |
31 | |
32 | HB_BEGIN_HEADER |
33 | |
34 | |
35 | /* Lookup types for glyph positioning */ |
36 | |
37 | #define HB_GPOS_LOOKUP_SINGLE 1 |
38 | #define HB_GPOS_LOOKUP_PAIR 2 |
39 | #define HB_GPOS_LOOKUP_CURSIVE 3 |
40 | #define HB_GPOS_LOOKUP_MARKBASE 4 |
41 | #define HB_GPOS_LOOKUP_MARKLIG 5 |
42 | #define HB_GPOS_LOOKUP_MARKMARK 6 |
43 | #define HB_GPOS_LOOKUP_CONTEXT 7 |
44 | #define HB_GPOS_LOOKUP_CHAIN 8 |
45 | #define HB_GPOS_LOOKUP_EXTENSION 9 |
46 | |
47 | #ifdef HB_SUPPORT_MULTIPLE_MASTER |
48 | /* A pointer to a function which accesses the PostScript interpreter. |
49 | Multiple Master fonts need this interface to convert a metric ID |
50 | (as stored in an OpenType font version 1.2 or higher) `metric_id' |
51 | into a metric value (returned in `metric_value'). |
52 | |
53 | `data' points to the user-defined structure specified during a |
54 | call to HB_GPOS_Register_MM_Function(). |
55 | |
56 | `metric_value' must be returned as a scaled value (but shouldn't |
57 | be rounded). */ |
58 | |
59 | typedef HB_Error (*HB_MMFunction)(HB_Font font, |
60 | HB_UShort metric_id, |
61 | HB_Fixed* metric_value, |
62 | void* data ); |
63 | #endif |
64 | |
65 | |
66 | struct |
67 | { |
68 | HB_16Dot16 ; |
69 | |
70 | HB_ScriptList ; |
71 | HB_FeatureList ; |
72 | HB_LookupList ; |
73 | |
74 | HB_GDEFHeader* ; |
75 | |
76 | #ifdef HB_SUPPORT_MULTIPLE_MASTER |
77 | /* this is OpenType 1.2 -- Multiple Master fonts need this |
78 | callback function to get various metric values from the |
79 | PostScript interpreter. */ |
80 | |
81 | HB_MMFunction mmfunc; |
82 | void* data; |
83 | #endif |
84 | }; |
85 | |
86 | typedef struct HB_GPOSHeader_ ; |
87 | typedef HB_GPOSHeader* HB_GPOS; |
88 | |
89 | |
90 | HB_Error HB_Load_GPOS_Table( HB_Stream stream, |
91 | HB_GPOSHeader** gpos, |
92 | HB_GDEFHeader* gdef, |
93 | HB_Stream gdefStream ); |
94 | |
95 | |
96 | HB_Error HB_Done_GPOS_Table( HB_GPOSHeader* gpos ); |
97 | |
98 | |
99 | HB_Error HB_GPOS_Select_Script( HB_GPOSHeader* gpos, |
100 | HB_UInt script_tag, |
101 | HB_UShort* script_index ); |
102 | |
103 | HB_Error HB_GPOS_Select_Language( HB_GPOSHeader* gpos, |
104 | HB_UInt language_tag, |
105 | HB_UShort script_index, |
106 | HB_UShort* language_index, |
107 | HB_UShort* req_feature_index ); |
108 | |
109 | HB_Error HB_GPOS_Select_Feature( HB_GPOSHeader* gpos, |
110 | HB_UInt feature_tag, |
111 | HB_UShort script_index, |
112 | HB_UShort language_index, |
113 | HB_UShort* feature_index ); |
114 | |
115 | |
116 | HB_Error HB_GPOS_Query_Scripts( HB_GPOSHeader* gpos, |
117 | HB_UInt** script_tag_list ); |
118 | |
119 | HB_Error HB_GPOS_Query_Languages( HB_GPOSHeader* gpos, |
120 | HB_UShort script_index, |
121 | HB_UInt** language_tag_list ); |
122 | |
123 | HB_Error HB_GPOS_Query_Features( HB_GPOSHeader* gpos, |
124 | HB_UShort script_index, |
125 | HB_UShort language_index, |
126 | HB_UInt** feature_tag_list ); |
127 | |
128 | |
129 | HB_Error HB_GPOS_Add_Feature( HB_GPOSHeader* gpos, |
130 | HB_UShort feature_index, |
131 | HB_UInt property ); |
132 | |
133 | HB_Error HB_GPOS_Clear_Features( HB_GPOSHeader* gpos ); |
134 | |
135 | |
136 | #ifdef HB_SUPPORT_MULTIPLE_MASTER |
137 | HB_Error HB_GPOS_Register_MM_Function( HB_GPOSHeader* gpos, |
138 | HB_MMFunction mmfunc, |
139 | void* data ); |
140 | #endif |
141 | |
142 | /* If `dvi' is TRUE, glyph contour points for anchor points and device |
143 | tables are ignored -- you will get device independent values. */ |
144 | |
145 | |
146 | HB_Error HB_GPOS_Apply_String( HB_Font font, |
147 | HB_GPOSHeader* gpos, |
148 | HB_UShort load_flags, |
149 | HB_Buffer buffer, |
150 | HB_Bool dvi, |
151 | HB_Bool r2l ); |
152 | |
153 | HB_END_HEADER |
154 | |
155 | #endif /* HARFBUZZ_GPOS_H */ |
156 | |