Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/graphite/include/graphite2/Font.h
9912 views
1
/* SPDX-License-Identifier: MIT OR MPL-2.0 OR LGPL-2.1-or-later OR GPL-2.0-or-later */
2
/* Copyright 2010, SIL International, All rights reserved. */
3
#pragma once
4
5
#include "graphite2/Types.h"
6
7
#define GR2_VERSION_MAJOR 1
8
#define GR2_VERSION_MINOR 3
9
#define GR2_VERSION_BUGFIX 14
10
11
#ifdef __cplusplus
12
extern "C"
13
{
14
#endif
15
16
typedef struct gr_face gr_face;
17
typedef struct gr_font gr_font;
18
typedef struct gr_feature_ref gr_feature_ref;
19
typedef struct gr_feature_val gr_feature_val;
20
21
/**
22
* Returns version information on this engine
23
*/
24
GR2_API void gr_engine_version(int *nMajor, int *nMinor, int *nBugFix);
25
26
/**
27
* The Face Options allow the application to require that certain tables are
28
* read during face construction. This may be of concern if the appFaceHandle
29
* used in the gr_get_table_fn may change.
30
* The values can be combined
31
*/
32
enum gr_face_options {
33
/** No preload, no cmap caching, fail if the graphite tables are invalid */
34
gr_face_default = 0,
35
/** Dumb rendering will be enabled if the graphite tables are invalid. @deprecated Since 1.311 */
36
gr_face_dumbRendering = 1,
37
/** preload glyphs at construction time */
38
gr_face_preloadGlyphs = 2,
39
/** Cache the lookup from code point to glyph ID at construction time */
40
gr_face_cacheCmap = 4,
41
/** Preload everything */
42
gr_face_preloadAll = gr_face_preloadGlyphs | gr_face_cacheCmap
43
};
44
45
/** Holds information about a particular Graphite silf table that has been loaded */
46
struct gr_faceinfo {
47
gr_uint16 extra_ascent; /**< The extra_ascent in the GDL, in design units */
48
gr_uint16 extra_descent; /**< The extra_descent in the GDL, in design units */
49
gr_uint16 upem; /**< The design units for the font */
50
enum gr_space_contextuals {
51
gr_space_unknown = 0, /**< no information is known. */
52
gr_space_none = 1, /**< the space character never occurs in any rules. */
53
gr_space_left_only = 2, /**< the space character only occurs as the first element in a rule. */
54
gr_space_right_only = 3, /**< the space character only occurs as the last element in a rule. */
55
gr_space_either_only = 4, /**< the space character only occurs as the only element in a rule. */
56
gr_space_both = 5, /**< the space character may occur as the first or last element of a rule. */
57
gr_space_cross = 6 /**< the space character occurs in a rule not as a first or last element. */
58
} space_contextuals;
59
unsigned int has_bidi_pass : 1; /**< the table specifies that a bidirectional pass should run */
60
unsigned int line_ends : 1; /**< there are line end contextuals somewhere */
61
unsigned int justifies : 1; /**< there are .justify properties set somewhere on some glyphs */
62
};
63
64
typedef struct gr_faceinfo gr_faceinfo;
65
66
/** type describing function to retrieve font table information
67
*
68
* @return a pointer to the table in memory. The pointed to memory must exist as
69
* long as the gr_face which makes the call.
70
* @param appFaceHandle is the unique information passed to gr_make_face()
71
* @param name is a 32bit tag to the table name.
72
* @param len returned by this function to say how long the table is in memory.
73
*/
74
typedef const void *(*gr_get_table_fn)(const void* appFaceHandle, unsigned int name, size_t *len);
75
76
/** type describing function to release any resources allocated by the above get_table table function
77
*
78
* @param appFaceHandle is the unique information passed to gr_make_face()
79
* @param pointer to table memory returned by get_table.
80
*/
81
typedef void (*gr_release_table_fn)(const void* appFaceHandle, const void *table_buffer);
82
83
/** struct housing function pointers to manage font table buffers for the graphite engine. */
84
struct gr_face_ops
85
{
86
/** size in bytes of this structure */
87
size_t size;
88
/** a pointer to a function to request a table from the client. */
89
gr_get_table_fn get_table;
90
/** is a pointer to a function to notify the client the a table can be released.
91
* This can be NULL to signify that the client does not wish to do any release handling. */
92
gr_release_table_fn release_table;
93
};
94
typedef struct gr_face_ops gr_face_ops;
95
96
/** Create a gr_face object given application information and a table functions.
97
*
98
* @return gr_face or NULL if the font fails to load for some reason.
99
* @param appFaceHandle This is application specific information that is passed
100
* to the getTable function. The appFaceHandle must stay
101
* alive as long as the gr_face is alive.
102
* @param face_ops Pointer to face specific callback structure for table
103
* management. Must stay alive for the duration of the
104
* call only.
105
* @param faceOptions Bitfield describing various options. See enum gr_face_options for details.
106
*/
107
GR2_API gr_face* gr_make_face_with_ops(const void* appFaceHandle/*non-NULL*/, const gr_face_ops *face_ops, unsigned int faceOptions);
108
109
/** @deprecated Since v1.2.0 in favour of gr_make_face_with_ops.
110
* Create a gr_face object given application information and a getTable function.
111
*
112
* @return gr_face or NULL if the font fails to load for some reason.
113
* @param appFaceHandle This is application specific information that is passed
114
* to the getTable function. The appFaceHandle must stay
115
* alive as long as the gr_face is alive.
116
* @param getTable Callback function to get table data.
117
* @param faceOptions Bitfield describing various options. See enum gr_face_options for details.
118
*/
119
GR2_DEPRECATED_API gr_face* gr_make_face(const void* appFaceHandle/*non-NULL*/, gr_get_table_fn getTable, unsigned int faceOptions);
120
121
/** @deprecated Since 1.3.7 this function is now an alias for gr_make_face_with_ops().
122
*
123
* Create a gr_face object given application information, with subsegmental caching support
124
*
125
* @return gr_face or NULL if the font fails to load.
126
* @param appFaceHandle is a pointer to application specific information that is passed to getTable.
127
* This may not be NULL and must stay alive as long as the gr_face is alive.
128
* @param face_ops Pointer to face specific callback structure for table management. Must stay
129
* alive for the duration of the call only.
130
* @param segCacheMaxSize Unused.
131
* @param faceOptions Bitfield of values from enum gr_face_options
132
*/
133
GR2_DEPRECATED_API gr_face* gr_make_face_with_seg_cache_and_ops(const void* appFaceHandle, const gr_face_ops *face_ops, unsigned int segCacheMaxSize, unsigned int faceOptions);
134
135
/** @deprecated Since 1.3.7 this function is now an alias for gr_make_face().
136
*
137
* Create a gr_face object given application information, with subsegmental caching support.
138
* This function is deprecated as of v1.2.0 in favour of gr_make_face_with_seg_cache_and_ops.
139
*
140
* @return gr_face or NULL if the font fails to load.
141
* @param appFaceHandle is a pointer to application specific information that is passed to getTable.
142
* This may not be NULL and must stay alive as long as the gr_face is alive.
143
* @param getTable The function graphite calls to access font table data
144
* @param segCacheMaxSize How large the segment cache is.
145
* @param faceOptions Bitfield of values from enum gr_face_options
146
*/
147
GR2_DEPRECATED_API gr_face* gr_make_face_with_seg_cache(const void* appFaceHandle, gr_get_table_fn getTable, unsigned int segCacheMaxSize, unsigned int faceOptions);
148
149
/** Convert a tag in a string into a gr_uint32
150
*
151
* @return gr_uint32 tag, zero padded
152
* @param str a nul terminated string of which at most the first 4 characters are read
153
*/
154
GR2_API gr_uint32 gr_str_to_tag(const char *str);
155
156
/** Convert a gr_uint32 tag into a string
157
*
158
* @param tag contains the tag to convert
159
* @param str is a pointer to a char array of at least size 4 bytes. The first 4 bytes of this array
160
* will be overwritten by this function. No nul is appended.
161
*/
162
GR2_API void gr_tag_to_str(gr_uint32 tag, char *str);
163
164
/** Get feature values for a given language or default
165
*
166
* @return a copy of the default feature values for a given language. The application must call
167
* gr_featureval_destroy() to free this object when done.
168
* @param pFace The font face to get feature values from
169
* @param langname The language tag to get feature values for. If there is no such language or
170
* langname is 0, the default feature values for the font are returned.
171
* langname is right 0 padded and assumes lowercase. Thus the en langauge
172
* would be 0x656E0000. Langname may also be space padded, thus 0x656E2020.
173
*/
174
GR2_API gr_feature_val* gr_face_featureval_for_lang(const gr_face* pFace, gr_uint32 langname);
175
176
/** Get feature reference for a given feature id from a face
177
*
178
* @return a feature reference corresponding to the given id. This data is part of the gr_face and
179
* will be freed when the face is destroyed.
180
* @param pFace Font face to get information on.
181
* @param featId Feature id tag to get reference to.
182
*/
183
GR2_API const gr_feature_ref* gr_face_find_fref(const gr_face* pFace, gr_uint32 featId);
184
185
/** Returns number of feature references in a face **/
186
GR2_API gr_uint16 gr_face_n_fref(const gr_face* pFace);
187
188
/** Returns feature reference at given index in face **/
189
GR2_API const gr_feature_ref* gr_face_fref(const gr_face* pFace, gr_uint16 i);
190
191
/** Return number of languages the face knows about **/
192
GR2_API unsigned short gr_face_n_languages(const gr_face* pFace);
193
194
/** Returns a language id corresponding to a language of given index in the face **/
195
GR2_API gr_uint32 gr_face_lang_by_index(const gr_face* pFace, gr_uint16 i);
196
197
/** Destroy the given face and free its memory **/
198
GR2_API void gr_face_destroy(gr_face *face);
199
200
/** Returns the number of glyphs in the face **/
201
GR2_API unsigned short gr_face_n_glyphs(const gr_face* pFace);
202
203
/** Returns a faceinfo for the face and script **/
204
GR2_API const gr_faceinfo *gr_face_info(const gr_face *pFace, gr_uint32 script);
205
206
/** Returns whether the font supports a given Unicode character
207
*
208
* @return true if the character is supported.
209
* @param pFace face to test within
210
* @param usv Unicode Scalar Value of character to test
211
* @param script Tag of script for selecting which set of pseudo glyphs to test. May be NULL.
212
*/
213
GR2_API int gr_face_is_char_supported(const gr_face *pFace, gr_uint32 usv, gr_uint32 script);
214
215
#ifndef GRAPHITE2_NFILEFACE
216
/** Create gr_face from a font file
217
*
218
* @return gr_face that accesses a font file directly. Returns NULL on failure.
219
* @param filename Full path and filename to font file
220
* @param faceOptions Bitfile from enum gr_face_options to control face options.
221
*/
222
GR2_API gr_face* gr_make_file_face(const char *filename, unsigned int faceOptions);
223
224
/** @deprecated Since 1.3.7. This function is now an alias for gr_make_file_face().
225
*
226
* Create gr_face from a font file, with subsegment caching support.
227
*
228
* @return gr_face that accesses a font file directly. Returns NULL on failure.
229
* @param filename Full path and filename to font file
230
* @param segCacheMaxSize Specifies how big to make the cache in segments.
231
* @param faceOptions Bitfield from enum gr_face_options to control face options.
232
*/
233
GR2_DEPRECATED_API gr_face* gr_make_file_face_with_seg_cache(const char *filename, unsigned int segCacheMaxSize, unsigned int faceOptions);
234
#endif // !GRAPHITE2_NFILEFACE
235
236
/** Create a font from a face
237
*
238
* @return gr_font Call font_destroy to free this font
239
* @param ppm Resolution of the font in pixels per em
240
* @param face Face this font corresponds to. This must stay alive as long as the font is alive.
241
*/
242
GR2_API gr_font* gr_make_font(float ppm, const gr_face *face);
243
244
/** query function to find the hinted advance of a glyph
245
*
246
* @param appFontHandle is the unique information passed to gr_make_font_with_advance()
247
* @param glyphid is the glyph to retireve the hinted advance for.
248
*/
249
typedef float (*gr_advance_fn)(const void* appFontHandle, gr_uint16 glyphid);
250
251
/** struct housing function pointers to manage font hinted metrics for the
252
* graphite engine. */
253
struct gr_font_ops
254
{
255
/** size of the structure in bytes to allow for future extensibility */
256
size_t size;
257
/** a pointer to a function to retrieve the hinted
258
* advance width of a glyph which the font cannot
259
* provide without client assistance. This can be
260
* NULL to signify no horizontal hinted metrics are necessary. */
261
gr_advance_fn glyph_advance_x;
262
/** a pointer to a function to retrieve the hinted
263
* advance height of a glyph which the font cannot
264
* provide without client assistance. This can be
265
* NULL to signify no horizontal hinted metrics are necessary. */
266
gr_advance_fn glyph_advance_y;
267
};
268
typedef struct gr_font_ops gr_font_ops;
269
270
/** Creates a font with hinted advance width query functions
271
*
272
* @return gr_font to be destroyed via font_destroy
273
* @param ppm size of font in pixels per em
274
* @param appFontHandle font specific information that must stay alive as long
275
* as the font does
276
* @param font_ops pointer font specific callback structure for hinted metrics.
277
* Need only stay alive for the duration of the call.
278
* @param face the face this font corresponds to. Must stay alive as long as
279
* the font does.
280
*/
281
GR2_API gr_font* gr_make_font_with_ops(float ppm, const void* appFontHandle, const gr_font_ops * font_ops, const gr_face *face);
282
283
/** Creates a font with hinted advance width query function.
284
* This function is deprecated. Use gr_make_font_with_ops instead.
285
*
286
* @return gr_font to be destroyed via font_destroy
287
* @param ppm size of font in pixels per em
288
* @param appFontHandle font specific information that must stay alive as long
289
* as the font does
290
* @param getAdvance callback function reference that returns horizontal advance in pixels for a glyph.
291
* @param face the face this font corresponds to. Must stay alive as long as
292
* the font does.
293
*/
294
GR2_API gr_font* gr_make_font_with_advance_fn(float ppm, const void* appFontHandle, gr_advance_fn getAdvance, const gr_face *face);
295
296
/** Free a font **/
297
GR2_API void gr_font_destroy(gr_font *font);
298
299
/** get a feature value
300
*
301
* @return value of specific feature or 0 if any problems.
302
* @param pfeatureref gr_feature_ref to the feature
303
* @param feats gr_feature_val containing all the values
304
*/
305
GR2_API gr_uint16 gr_fref_feature_value(const gr_feature_ref* pfeatureref, const gr_feature_val* feats);
306
307
/** set a feature value
308
*
309
* @return false if there were any problems (value out of range, etc.)
310
* @param pfeatureref gr_feature_ref to the feature
311
* @param val value to set the feature to
312
* @param pDest the gr_feature_val containing all the values for all the features
313
*/
314
GR2_API int gr_fref_set_feature_value(const gr_feature_ref* pfeatureref, gr_uint16 val, gr_feature_val* pDest);
315
316
/** Returns the id tag for a gr_feature_ref **/
317
GR2_API gr_uint32 gr_fref_id(const gr_feature_ref* pfeatureref);
318
319
/** Returns number of values a feature may take, given a gr_feature_ref **/
320
GR2_API gr_uint16 gr_fref_n_values(const gr_feature_ref* pfeatureref);
321
322
/** Returns the value associated with a particular value in a feature
323
*
324
* @return value
325
* @param pfeatureref gr_feature_ref of the feature of interest
326
* @param settingno Index up to the return value of gr_fref_n_values() of the value
327
*/
328
GR2_API gr_int16 gr_fref_value(const gr_feature_ref* pfeatureref, gr_uint16 settingno);
329
330
/** Returns a string of the UI name of a feature
331
*
332
* @return string of the UI name, in the encoding form requested. Call gr_label_destroy() after use.
333
* @param pfeatureref gr_feature_ref of the feature
334
* @param langId This is a pointer since the face may not support a string in the requested
335
* language. The actual language of the string is returned in langId
336
* @param utf Encoding form for the string
337
* @param length Used to return the length of the string returned in bytes.
338
*/
339
GR2_API void* gr_fref_label(const gr_feature_ref* pfeatureref, gr_uint16 *langId, enum gr_encform utf, gr_uint32 *length);
340
341
/** Return a UI string for a possible value of a feature
342
*
343
* @return string of the UI name, in the encoding form requested. nul terminated. Call gr_label_destroy()
344
* after use.
345
* @param pfeatureref gr_feature_ref of the feature
346
* @param settingno Value setting index
347
* @param langId This is a pointer to the requested language. The requested language id is
348
* replaced by the actual language id of the string returned.
349
* @param utf Encoding form for the string
350
* @param length Returns the length of the string returned in bytes.
351
*/
352
GR2_API void* gr_fref_value_label(const gr_feature_ref* pfeatureref, gr_uint16 settingno/*rather than a value*/, gr_uint16 *langId, enum gr_encform utf, gr_uint32 *length);
353
354
/** Destroy a previously returned label string **/
355
GR2_API void gr_label_destroy(void * label);
356
357
/** Copies a gr_feature_val **/
358
GR2_API gr_feature_val* gr_featureval_clone(const gr_feature_val* pfeatures);
359
360
/** Destroys a gr_feature_val **/
361
GR2_API void gr_featureval_destroy(gr_feature_val *pfeatures);
362
363
#ifdef __cplusplus
364
}
365
#endif
366
367