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_GSUB_H
27#define HARFBUZZ_GSUB_H
28
29#include "harfbuzz-gdef.h"
30#include "harfbuzz-buffer.h"
31
32HB_BEGIN_HEADER
33
34/* Lookup types for glyph substitution */
35
36#define HB_GSUB_LOOKUP_SINGLE 1
37#define HB_GSUB_LOOKUP_MULTIPLE 2
38#define HB_GSUB_LOOKUP_ALTERNATE 3
39#define HB_GSUB_LOOKUP_LIGATURE 4
40#define HB_GSUB_LOOKUP_CONTEXT 5
41#define HB_GSUB_LOOKUP_CHAIN 6
42#define HB_GSUB_LOOKUP_EXTENSION 7
43#define HB_GSUB_LOOKUP_REVERSE_CHAIN 8
44
45
46/* A pointer to a function which selects the alternate glyph. `pos' is
47 the position of the glyph with index `glyphID', `num_alternates'
48 gives the number of alternates in the `alternates' array. `data'
49 points to the user-defined structure specified during a call to
50 HB_GSUB_Register_Alternate_Function(). The function must return an
51 index into the `alternates' array. */
52
53typedef HB_UShort (*HB_AltFunction)(HB_UInt pos,
54 HB_UShort glyphID,
55 HB_UShort num_alternates,
56 HB_UShort* alternates,
57 void* data );
58
59
60struct HB_GSUBHeader_
61{
62 HB_GDEFHeader* gdef;
63
64 /* the next two fields are used for an alternate substitution callback
65 function to select the proper alternate glyph. */
66
67 void* data;
68 HB_AltFunction altfunc;
69
70 HB_UInt offset;
71
72 HB_16Dot16 Version;
73
74 HB_ScriptList ScriptList;
75 HB_FeatureList FeatureList;
76 HB_LookupList LookupList;
77};
78
79typedef struct HB_GSUBHeader_ HB_GSUBHeader;
80typedef HB_GSUBHeader* HB_GSUB;
81
82
83HB_Error HB_Load_GSUB_Table( HB_Stream stream,
84 HB_GSUBHeader** gsub,
85 HB_GDEFHeader* gdef,
86 HB_Stream gdefStream );
87
88
89HB_Error HB_Done_GSUB_Table( HB_GSUBHeader* gsub );
90
91
92HB_Error HB_GSUB_Select_Script( HB_GSUBHeader* gsub,
93 HB_UInt script_tag,
94 HB_UShort* script_index );
95
96HB_Error HB_GSUB_Select_Language( HB_GSUBHeader* gsub,
97 HB_UInt language_tag,
98 HB_UShort script_index,
99 HB_UShort* language_index,
100 HB_UShort* req_feature_index );
101
102HB_Error HB_GSUB_Select_Feature( HB_GSUBHeader* gsub,
103 HB_UInt feature_tag,
104 HB_UShort script_index,
105 HB_UShort language_index,
106 HB_UShort* feature_index );
107
108
109HB_Error HB_GSUB_Query_Scripts( HB_GSUBHeader* gsub,
110 HB_UInt** script_tag_list );
111
112HB_Error HB_GSUB_Query_Languages( HB_GSUBHeader* gsub,
113 HB_UShort script_index,
114 HB_UInt** language_tag_list );
115
116HB_Error HB_GSUB_Query_Features( HB_GSUBHeader* gsub,
117 HB_UShort script_index,
118 HB_UShort language_index,
119 HB_UInt** feature_tag_list );
120
121
122HB_Error HB_GSUB_Add_Feature( HB_GSUBHeader* gsub,
123 HB_UShort feature_index,
124 HB_UInt property );
125
126HB_Error HB_GSUB_Clear_Features( HB_GSUBHeader* gsub );
127
128
129HB_Error HB_GSUB_Register_Alternate_Function( HB_GSUBHeader* gsub,
130 HB_AltFunction altfunc,
131 void* data );
132
133
134HB_Error HB_GSUB_Apply_String( HB_GSUBHeader* gsub,
135 HB_Buffer buffer );
136
137HB_END_HEADER
138
139#endif /* HARFBUZZ_GSUB_H */
140

source code of qtbase/src/3rdparty/harfbuzz/src/harfbuzz-gsub.h