1/* Pango
2 * pango-ot.h:
3 *
4 * Copyright (C) 2000,2007 Red Hat Software
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
15 *
16 * You should have received a copy of the GNU Library General Public
17 * License along with this library; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
20 */
21
22#ifndef __PANGO_OT_H__
23#define __PANGO_OT_H__
24
25/* Deprecated. Use HarfBuzz directly! */
26
27#include <pango/pangofc-font.h>
28#include <pango/pango-glyph.h>
29#include <pango/pango-font.h>
30#include <pango/pango-script.h>
31#include <pango/pango-language.h>
32
33#include <ft2build.h>
34#include FT_FREETYPE_H
35
36G_BEGIN_DECLS
37
38#ifndef PANGO_DISABLE_DEPRECATED
39
40/**
41 * PangoOTTag:
42 *
43 * The `PangoOTTag` typedef is used to represent TrueType and OpenType
44 * four letter tags inside Pango. Use PANGO_OT_TAG_MAKE()
45 * or PANGO_OT_TAG_MAKE_FROM_STRING() macros to create PangoOTTags manually.
46 */
47typedef guint32 PangoOTTag;
48
49/**
50 * PANGO_OT_TAG_MAKE:
51 * @c1: First character.
52 * @c2: Second character.
53 * @c3: Third character.
54 * @c4: Fourth character.
55 *
56 * Creates a `PangoOTTag` from four characters. This is similar and
57 * compatible with the FT_MAKE_TAG() macro from FreeType.
58 */
59/**
60 * PANGO_OT_TAG_MAKE_FROM_STRING:
61 * @s: The string representation of the tag.
62 *
63 * Creates a `PangoOTTag` from a string. The string should be at least
64 * four characters long (pad with space characters if needed), and need
65 * not be nul-terminated. This is a convenience wrapper around
66 * PANGO_OT_TAG_MAKE(), but cannot be used in certain situations, for
67 * example, as a switch expression, as it dereferences pointers.
68 */
69#define PANGO_OT_TAG_MAKE(c1,c2,c3,c4) ((PangoOTTag) FT_MAKE_TAG (c1, c2, c3, c4))
70#define PANGO_OT_TAG_MAKE_FROM_STRING(s) (PANGO_OT_TAG_MAKE(((const char *) s)[0], \
71 ((const char *) s)[1], \
72 ((const char *) s)[2], \
73 ((const char *) s)[3]))
74
75typedef struct _PangoOTInfo PangoOTInfo;
76typedef struct _PangoOTBuffer PangoOTBuffer;
77typedef struct _PangoOTGlyph PangoOTGlyph;
78typedef struct _PangoOTRuleset PangoOTRuleset;
79typedef struct _PangoOTFeatureMap PangoOTFeatureMap;
80typedef struct _PangoOTRulesetDescription PangoOTRulesetDescription;
81
82/**
83 * PangoOTTableType:
84 * @PANGO_OT_TABLE_GSUB: The GSUB table.
85 * @PANGO_OT_TABLE_GPOS: The GPOS table.
86 *
87 * The PangoOTTableType enumeration values are used to
88 * identify the various OpenType tables in the
89 * pango_ot_info_… functions.
90 */
91typedef enum
92{
93 PANGO_OT_TABLE_GSUB,
94 PANGO_OT_TABLE_GPOS
95} PangoOTTableType;
96
97/**
98 * PANGO_OT_ALL_GLYPHS:
99 *
100 * This is used as the property bit in pango_ot_ruleset_add_feature() when a
101 * feature should be applied to all glyphs.
102 *
103 * Since: 1.16
104 */
105/**
106 * PANGO_OT_NO_FEATURE:
107 *
108 * This is used as a feature index that represent no feature, that is, should be
109 * skipped. It may be returned as feature index by pango_ot_info_find_feature()
110 * if the feature is not found, and pango_ot_ruleset_add_feature() function
111 * automatically skips this value, so no special handling is required by the user.
112 *
113 * Since: 1.18
114 */
115/**
116 * PANGO_OT_NO_SCRIPT:
117 *
118 * This is used as a script index that represent no script, that is, when the
119 * requested script was not found, and a default ('DFLT') script was not found
120 * either. It may be returned as script index by pango_ot_info_find_script()
121 * if the script or a default script are not found, all other functions
122 * taking a script index essentially return if the input script index is
123 * this value, so no special handling is required by the user.
124 *
125 * Since: 1.18
126 */
127/**
128 * PANGO_OT_DEFAULT_LANGUAGE:
129 *
130 * This is used as the language index in pango_ot_info_find_feature() when
131 * the default language system of the script is desired.
132 *
133 * It is also returned by pango_ot_info_find_language() if the requested language
134 * is not found, or the requested language tag was PANGO_OT_TAG_DEFAULT_LANGUAGE.
135 * The end result is that one can always call pango_ot_tag_from_language()
136 * followed by pango_ot_info_find_language() and pass the result to
137 * pango_ot_info_find_feature() without having to worry about falling back to
138 * default language system explicitly.
139 *
140 * Since: 1.16
141 */
142#define PANGO_OT_ALL_GLYPHS ((guint) 0xFFFF)
143#define PANGO_OT_NO_FEATURE ((guint) 0xFFFF)
144#define PANGO_OT_NO_SCRIPT ((guint) 0xFFFF)
145#define PANGO_OT_DEFAULT_LANGUAGE ((guint) 0xFFFF)
146
147/**
148 * PANGO_OT_TAG_DEFAULT_SCRIPT:
149 *
150 * This is a `PangoOTTag` representing the special script tag 'DFLT'. It is
151 * returned as script tag by pango_ot_tag_from_script() if the requested script
152 * is not found.
153 *
154 * Since: 1.18
155 */
156/**
157 * PANGO_OT_TAG_DEFAULT_LANGUAGE:
158 *
159 * This is a `PangoOTTag` representing a special language tag 'dflt'. It is
160 * returned as language tag by pango_ot_tag_from_language() if the requested
161 * language is not found. It is safe to pass this value to
162 * pango_ot_info_find_language() as that function falls back to returning default
163 * language-system if the requested language tag is not found.
164 *
165 * Since: 1.18
166 */
167#define PANGO_OT_TAG_DEFAULT_SCRIPT PANGO_OT_TAG_MAKE ('D', 'F', 'L', 'T')
168#define PANGO_OT_TAG_DEFAULT_LANGUAGE PANGO_OT_TAG_MAKE ('d', 'f', 'l', 't')
169
170/* Note that this must match hb_glyph_info_t */
171/**
172 * PangoOTGlyph:
173 * @glyph: the glyph itself.
174 * @properties: the properties value, identifying which features should be
175 * applied on this glyph. See pango_ot_ruleset_add_feature().
176 * @cluster: the cluster that this glyph belongs to.
177 * @component: a component value, set by the OpenType layout engine.
178 * @ligID: a ligature index value, set by the OpenType layout engine.
179 * @internal: for Pango internal use
180 *
181 * The `PangoOTGlyph` structure represents a single glyph together with
182 * information used for OpenType layout processing of the glyph.
183 * It contains the following fields.
184 */
185struct _PangoOTGlyph
186{
187 guint32 glyph;
188 guint properties;
189 guint cluster;
190 gushort component;
191 gushort ligID;
192
193 guint internal;
194};
195
196/**
197 * PangoOTFeatureMap:
198 * @feature_name: feature tag in represented as four-letter ASCII string.
199 * @property_bit: the property bit to use for this feature. See
200 * pango_ot_ruleset_add_feature() for details.
201 *
202 * The `PangoOTFeatureMap` typedef is used to represent an OpenType
203 * feature with the property bit associated with it. The feature tag is
204 * represented as a char array instead of a `PangoOTTag` for convenience.
205 *
206 * Since: 1.18
207 */
208struct _PangoOTFeatureMap
209{
210 char feature_name[5];
211 gulong property_bit;
212};
213
214/**
215 * PangoOTRulesetDescription:
216 * @script: a `PangoScript`
217 * @language: a `PangoLanguage`
218 * @static_gsub_features: (nullable): static map of GSUB features
219 * @n_static_gsub_features: length of @static_gsub_features, or 0.
220 * @static_gpos_features: (nullable): static map of GPOS features
221 * @n_static_gpos_features: length of @static_gpos_features, or 0.
222 * @other_features: (nullable): map of extra features to add to both
223 * GSUB and GPOS. Unlike the static maps, this pointer need not
224 * live beyond the life of function calls taking this struct.
225 * @n_other_features: length of @other_features, or 0.
226 *
227 * The `PangoOTRuleset` structure holds all the information needed
228 * to build a complete `PangoOTRuleset` from an OpenType font.
229 * The main use of this struct is to act as the key for a per-font
230 * hash of rulesets. The user populates a ruleset description and
231 * gets the ruleset using pango_ot_ruleset_get_for_description()
232 * or create a new one using pango_ot_ruleset_new_from_description().
233 *
234 * Since: 1.18
235 */
236struct _PangoOTRulesetDescription {
237 PangoScript script;
238 PangoLanguage *language;
239 const PangoOTFeatureMap *static_gsub_features;
240 guint n_static_gsub_features;
241 const PangoOTFeatureMap *static_gpos_features;
242 guint n_static_gpos_features;
243 const PangoOTFeatureMap *other_features;
244 guint n_other_features;
245};
246
247#ifdef __GI_SCANNER__
248#define PANGO_OT_TYPE_INFO (pango_ot_info_get_type ())
249#define PANGO_OT_INFO(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_OT_TYPE_INFO, PangoOTInfo))
250#define PANGO_OT_IS_INFO(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_OT_TYPE_INFO))
251#else
252#define PANGO_TYPE_OT_INFO (pango_ot_info_get_type ())
253#define PANGO_OT_INFO(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_OT_INFO, PangoOTInfo))
254#define PANGO_IS_OT_INFO(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_OT_INFO))
255#endif
256
257PANGO_DEPRECATED
258GType pango_ot_info_get_type (void) G_GNUC_CONST;
259
260#ifdef __GI_SCANNER__
261#define PANGO_OT_TYPE_RULESET (pango_ot_ruleset_get_type ())
262#define PANGO_OT_RULESET(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_OT_TYPE_RULESET, PangoOTRuleset))
263#define PANGO_OT_IS_RULESET(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_OT_TYPE_RULESET))
264#else
265#define PANGO_TYPE_OT_RULESET (pango_ot_ruleset_get_type ())
266#define PANGO_OT_RULESET(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_OT_RULESET, PangoOTRuleset))
267#define PANGO_IS_OT_RULESET(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_OT_RULESET))
268#endif
269
270PANGO_DEPRECATED
271GType pango_ot_ruleset_get_type (void) G_GNUC_CONST;
272
273
274PANGO_DEPRECATED
275PangoOTInfo *pango_ot_info_get (FT_Face face);
276
277PANGO_DEPRECATED
278gboolean pango_ot_info_find_script (PangoOTInfo *info,
279 PangoOTTableType table_type,
280 PangoOTTag script_tag,
281 guint *script_index);
282
283PANGO_DEPRECATED
284gboolean pango_ot_info_find_language (PangoOTInfo *info,
285 PangoOTTableType table_type,
286 guint script_index,
287 PangoOTTag language_tag,
288 guint *language_index,
289 guint *required_feature_index);
290PANGO_DEPRECATED
291gboolean pango_ot_info_find_feature (PangoOTInfo *info,
292 PangoOTTableType table_type,
293 PangoOTTag feature_tag,
294 guint script_index,
295 guint language_index,
296 guint *feature_index);
297
298PANGO_DEPRECATED
299PangoOTTag *pango_ot_info_list_scripts (PangoOTInfo *info,
300 PangoOTTableType table_type);
301PANGO_DEPRECATED
302PangoOTTag *pango_ot_info_list_languages (PangoOTInfo *info,
303 PangoOTTableType table_type,
304 guint script_index,
305 PangoOTTag language_tag);
306PANGO_DEPRECATED
307PangoOTTag *pango_ot_info_list_features (PangoOTInfo *info,
308 PangoOTTableType table_type,
309 PangoOTTag tag,
310 guint script_index,
311 guint language_index);
312
313#ifdef __GI_SCANNER__
314#define PANGO_OT_TYPE_BUFFER (pango_ot_buffer_get_type())
315#else
316#define PANGO_TYPE_OT_BUFFER (pango_ot_buffer_get_type())
317#endif
318
319PANGO_DEPRECATED
320GType pango_ot_buffer_get_type (void) G_GNUC_CONST;
321
322PANGO_DEPRECATED
323PangoOTBuffer *pango_ot_buffer_new (PangoFcFont *font);
324PANGO_DEPRECATED
325void pango_ot_buffer_destroy (PangoOTBuffer *buffer);
326PANGO_DEPRECATED
327void pango_ot_buffer_clear (PangoOTBuffer *buffer);
328PANGO_DEPRECATED
329void pango_ot_buffer_set_rtl (PangoOTBuffer *buffer,
330 gboolean rtl);
331PANGO_DEPRECATED
332void pango_ot_buffer_add_glyph (PangoOTBuffer *buffer,
333 guint glyph,
334 guint properties,
335 guint cluster);
336PANGO_DEPRECATED
337void pango_ot_buffer_get_glyphs (const PangoOTBuffer *buffer,
338 PangoOTGlyph **glyphs,
339 int *n_glyphs);
340PANGO_DEPRECATED
341void pango_ot_buffer_output (const PangoOTBuffer *buffer,
342 PangoGlyphString *glyphs);
343
344PANGO_DEPRECATED
345void pango_ot_buffer_set_zero_width_marks (PangoOTBuffer *buffer,
346 gboolean zero_width_marks);
347
348PANGO_DEPRECATED
349const PangoOTRuleset *pango_ot_ruleset_get_for_description (PangoOTInfo *info,
350 const PangoOTRulesetDescription *desc);
351PANGO_DEPRECATED
352PangoOTRuleset *pango_ot_ruleset_new (PangoOTInfo *info);
353PANGO_DEPRECATED
354PangoOTRuleset *pango_ot_ruleset_new_for (PangoOTInfo *info,
355 PangoScript script,
356 PangoLanguage *language);
357PANGO_DEPRECATED
358PangoOTRuleset *pango_ot_ruleset_new_from_description (PangoOTInfo *info,
359 const PangoOTRulesetDescription *desc);
360PANGO_DEPRECATED
361void pango_ot_ruleset_add_feature (PangoOTRuleset *ruleset,
362 PangoOTTableType table_type,
363 guint feature_index,
364 gulong property_bit);
365PANGO_DEPRECATED
366gboolean pango_ot_ruleset_maybe_add_feature (PangoOTRuleset *ruleset,
367 PangoOTTableType table_type,
368 PangoOTTag feature_tag,
369 gulong property_bit);
370PANGO_DEPRECATED
371guint pango_ot_ruleset_maybe_add_features (PangoOTRuleset *ruleset,
372 PangoOTTableType table_type,
373 const PangoOTFeatureMap *features,
374 guint n_features);
375PANGO_DEPRECATED
376guint pango_ot_ruleset_get_feature_count (const PangoOTRuleset *ruleset,
377 guint *n_gsub_features,
378 guint *n_gpos_features);
379
380PANGO_DEPRECATED
381void pango_ot_ruleset_substitute (const PangoOTRuleset *ruleset,
382 PangoOTBuffer *buffer);
383
384PANGO_DEPRECATED
385void pango_ot_ruleset_position (const PangoOTRuleset *ruleset,
386 PangoOTBuffer *buffer);
387
388PANGO_DEPRECATED
389PangoScript pango_ot_tag_to_script (PangoOTTag script_tag) G_GNUC_CONST;
390
391PANGO_DEPRECATED
392PangoOTTag pango_ot_tag_from_script (PangoScript script) G_GNUC_CONST;
393
394PANGO_DEPRECATED
395PangoLanguage *pango_ot_tag_to_language (PangoOTTag language_tag) G_GNUC_CONST;
396
397PANGO_DEPRECATED
398PangoOTTag pango_ot_tag_from_language (PangoLanguage *language) G_GNUC_CONST;
399
400#ifdef __GI_SCANNER__
401#define PANGO_OT_TYPE_RULESET_DESCRIPTION (pango_ot_ruleset_description_get_type())
402#else
403#define PANGO_TYPE_OT_RULESET_DESCRIPTION (pango_ot_ruleset_description_get_type())
404#endif
405
406PANGO_DEPRECATED
407GType pango_ot_ruleset_description_get_type (void) G_GNUC_CONST;
408
409PANGO_DEPRECATED
410guint pango_ot_ruleset_description_hash (const PangoOTRulesetDescription *desc) G_GNUC_PURE;
411
412PANGO_DEPRECATED
413gboolean pango_ot_ruleset_description_equal (const PangoOTRulesetDescription *desc1,
414 const PangoOTRulesetDescription *desc2) G_GNUC_PURE;
415
416PANGO_DEPRECATED
417PangoOTRulesetDescription *pango_ot_ruleset_description_copy (const PangoOTRulesetDescription *desc);
418
419PANGO_DEPRECATED
420void pango_ot_ruleset_description_free (PangoOTRulesetDescription *desc);
421
422
423#endif /* PANGO_DISABLE_DEPRECATED */
424
425G_END_DECLS
426
427#endif /* __PANGO_OT_H__ */
428

source code of gtk/subprojects/pango/pango/pango-ot.h