Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.h
38918 views
1
/*
2
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3
*
4
* This code is free software; you can redistribute it and/or modify it
5
* under the terms of the GNU General Public License version 2 only, as
6
* published by the Free Software Foundation. Oracle designates this
7
* particular file as subject to the "Classpath" exception as provided
8
* by Oracle in the LICENSE file that accompanied this code.
9
*
10
* This code is distributed in the hope that it will be useful, but WITHOUT
11
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13
* version 2 for more details (a copy is included in the LICENSE file that
14
* accompanied this code).
15
*
16
* You should have received a copy of the GNU General Public License version
17
* 2 along with this work; if not, write to the Free Software Foundation,
18
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19
*
20
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21
* or visit www.oracle.com if you need additional information or have any
22
* questions.
23
*
24
*/
25
26
/*
27
*
28
* (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
29
*
30
*/
31
32
#ifndef __CONTEXTUALSUBSTITUTIONSUBTABLES_H
33
#define __CONTEXTUALSUBSTITUTIONSUBTABLES_H
34
35
/**
36
* \file
37
* \internal
38
*/
39
40
#include "LETypes.h"
41
#include "LEFontInstance.h"
42
#include "OpenTypeTables.h"
43
#include "GlyphSubstitutionTables.h"
44
#include "GlyphIterator.h"
45
#include "LookupProcessor.h"
46
#include "LETableReference.h"
47
48
U_NAMESPACE_BEGIN
49
50
struct SubstitutionLookupRecord
51
{
52
le_uint16 sequenceIndex;
53
le_uint16 lookupListIndex;
54
};
55
56
struct ContextualSubstitutionBase : GlyphSubstitutionSubtable
57
{
58
static le_bool matchGlyphIDs(
59
const LEReferenceToArrayOf<TTGlyphID> &glyphArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
60
le_bool backtrack = FALSE);
61
62
static le_bool matchGlyphClasses(
63
const LEReferenceToArrayOf<le_uint16> &classArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
64
const LEReferenceTo<ClassDefinitionTable> &classDefinitionTable, LEErrorCode &success, le_bool backtrack = FALSE);
65
66
static le_bool matchGlyphCoverages(
67
const LEReferenceToArrayOf<Offset> &coverageTableOffsetArray, le_uint16 glyphCount,
68
GlyphIterator *glyphIterator, const LETableReference& offsetBase, LEErrorCode &success, le_bool backtrack = FALSE);
69
70
/**
71
* little shim to wrap the Offset array in range checking
72
* @private
73
*/
74
static le_bool matchGlyphCoverages(
75
const Offset *coverageTableOffsetArray, le_uint16 glyphCount,
76
GlyphIterator *glyphIterator, const LETableReference& offsetBase, LEErrorCode &success, le_bool backtrack = FALSE) {
77
LEReferenceToArrayOf<Offset> ref(offsetBase, success, coverageTableOffsetArray, glyphCount);
78
if( LE_FAILURE(success) ) { return FALSE; }
79
return matchGlyphCoverages(ref, glyphCount, glyphIterator, offsetBase, success, backtrack);
80
}
81
82
static void applySubstitutionLookups(
83
const LookupProcessor *lookupProcessor,
84
const LEReferenceToArrayOf<SubstitutionLookupRecord>& substLookupRecordArray,
85
le_uint16 substCount,
86
GlyphIterator *glyphIterator,
87
const LEFontInstance *fontInstance,
88
le_int32 position,
89
LEErrorCode& success);
90
};
91
92
struct ContextualSubstitutionSubtable : ContextualSubstitutionBase
93
{
94
le_uint32 process(const LETableReference &base, const LookupProcessor *lookupProcessor,
95
GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
96
};
97
98
struct ContextualSubstitutionFormat1Subtable : ContextualSubstitutionSubtable
99
{
100
le_uint16 subRuleSetCount;
101
Offset subRuleSetTableOffsetArray[ANY_NUMBER];
102
103
le_uint32 process(const LETableReference &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
104
const LEFontInstance *fontInstance, LEErrorCode& success) const;
105
};
106
LE_VAR_ARRAY(ContextualSubstitutionFormat1Subtable, subRuleSetTableOffsetArray)
107
108
109
struct SubRuleSetTable
110
{
111
le_uint16 subRuleCount;
112
Offset subRuleTableOffsetArray[ANY_NUMBER];
113
114
};
115
LE_VAR_ARRAY(SubRuleSetTable, subRuleTableOffsetArray)
116
117
// NOTE: Multiple variable size arrays!!
118
struct SubRuleTable
119
{
120
le_uint16 glyphCount;
121
le_uint16 substCount;
122
TTGlyphID inputGlyphArray[ANY_NUMBER];
123
//SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
124
};
125
LE_VAR_ARRAY(SubRuleTable, inputGlyphArray)
126
127
struct ContextualSubstitutionFormat2Subtable : ContextualSubstitutionSubtable
128
{
129
Offset classDefTableOffset;
130
le_uint16 subClassSetCount;
131
Offset subClassSetTableOffsetArray[ANY_NUMBER];
132
133
le_uint32 process(const LETableReference &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
134
};
135
LE_VAR_ARRAY(ContextualSubstitutionFormat2Subtable, subClassSetTableOffsetArray)
136
137
138
struct SubClassSetTable
139
{
140
le_uint16 subClassRuleCount;
141
Offset subClassRuleTableOffsetArray[ANY_NUMBER];
142
};
143
LE_VAR_ARRAY(SubClassSetTable, subClassRuleTableOffsetArray)
144
145
146
// NOTE: Multiple variable size arrays!!
147
struct SubClassRuleTable
148
{
149
le_uint16 glyphCount;
150
le_uint16 substCount;
151
le_uint16 classArray[ANY_NUMBER];
152
//SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
153
};
154
LE_VAR_ARRAY(SubClassRuleTable, classArray)
155
156
157
// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
158
// it has an array of coverage tables instead of a single coverage table...
159
//
160
// NOTE: Multiple variable size arrays!!
161
struct ContextualSubstitutionFormat3Subtable
162
{
163
le_uint16 substFormat;
164
le_uint16 glyphCount;
165
le_uint16 substCount;
166
Offset coverageTableOffsetArray[ANY_NUMBER];
167
//SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
168
169
le_uint32 process(const LETableReference &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
170
const LEFontInstance *fontInstance, LEErrorCode& success) const;
171
};
172
LE_VAR_ARRAY(ContextualSubstitutionFormat3Subtable, coverageTableOffsetArray)
173
174
struct ChainingContextualSubstitutionSubtable : ContextualSubstitutionBase
175
{
176
le_uint32 process(const LEReferenceTo<ChainingContextualSubstitutionSubtable> &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
177
const LEFontInstance *fontInstance, LEErrorCode& success) const;
178
};
179
180
struct ChainingContextualSubstitutionFormat1Subtable : ChainingContextualSubstitutionSubtable
181
{
182
le_uint16 chainSubRuleSetCount;
183
Offset chainSubRuleSetTableOffsetArray[ANY_NUMBER];
184
185
le_uint32 process(const LETableReference &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
186
const LEFontInstance *fontInstance, LEErrorCode& success) const;
187
};
188
LE_VAR_ARRAY(ChainingContextualSubstitutionFormat1Subtable, chainSubRuleSetTableOffsetArray)
189
190
191
struct ChainSubRuleSetTable
192
{
193
le_uint16 chainSubRuleCount;
194
Offset chainSubRuleTableOffsetArray[ANY_NUMBER];
195
196
};
197
LE_VAR_ARRAY(ChainSubRuleSetTable, chainSubRuleTableOffsetArray)
198
199
// NOTE: Multiple variable size arrays!!
200
struct ChainSubRuleTable
201
{
202
le_uint16 backtrackGlyphCount;
203
TTGlyphID backtrackGlyphArray[ANY_NUMBER];
204
//le_uint16 inputGlyphCount;
205
//TTGlyphID inputGlyphArray[ANY_NUMBER];
206
//le_uint16 lookaheadGlyphCount;
207
//TTGlyphID lookaheadGlyphArray[ANY_NUMBER];
208
//le_uint16 substCount;
209
//SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
210
};
211
LE_VAR_ARRAY(ChainSubRuleTable, backtrackGlyphArray)
212
213
struct ChainingContextualSubstitutionFormat2Subtable : ChainingContextualSubstitutionSubtable
214
{
215
Offset backtrackClassDefTableOffset;
216
Offset inputClassDefTableOffset;
217
Offset lookaheadClassDefTableOffset;
218
le_uint16 chainSubClassSetCount;
219
Offset chainSubClassSetTableOffsetArray[ANY_NUMBER];
220
221
le_uint32 process(const LETableReference &base, const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
222
const LEFontInstance *fontInstance, LEErrorCode& success) const;
223
};
224
LE_VAR_ARRAY(ChainingContextualSubstitutionFormat2Subtable, chainSubClassSetTableOffsetArray)
225
226
struct ChainSubClassSetTable
227
{
228
le_uint16 chainSubClassRuleCount;
229
Offset chainSubClassRuleTableOffsetArray[ANY_NUMBER];
230
};
231
LE_VAR_ARRAY(ChainSubClassSetTable, chainSubClassRuleTableOffsetArray)
232
233
234
// NOTE: Multiple variable size arrays!!
235
struct ChainSubClassRuleTable
236
{
237
le_uint16 backtrackGlyphCount;
238
le_uint16 backtrackClassArray[ANY_NUMBER];
239
//le_uint16 inputGlyphCount;
240
//le_uint16 inputClassArray[ANY_NUMBER];
241
//le_uint16 lookaheadGlyphCount;
242
//le_uint16 lookaheadClassArray[ANY_NUMBER];
243
//le_uint16 substCount;
244
//SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
245
};
246
LE_VAR_ARRAY(ChainSubClassRuleTable, backtrackClassArray)
247
248
// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
249
// it has arrays of coverage tables instead of a single coverage table...
250
//
251
// NOTE: Multiple variable size arrays!!
252
struct ChainingContextualSubstitutionFormat3Subtable
253
{
254
le_uint16 substFormat;
255
le_uint16 backtrackGlyphCount;
256
Offset backtrackCoverageTableOffsetArray[ANY_NUMBER];
257
//le_uint16 inputGlyphCount;
258
//Offset inputCoverageTableOffsetArray[ANY_NUMBER];
259
//le_uint16 lookaheadGlyphCount;
260
//le_uint16 lookaheadCoverageTableOffsetArray[ANY_NUMBER];
261
//le_uint16 substCount;
262
//SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
263
264
le_uint32 process(const LETableReference &base, const LookupProcessor *lookupProcessor,
265
GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
266
};
267
LE_VAR_ARRAY(ChainingContextualSubstitutionFormat3Subtable, backtrackCoverageTableOffsetArray)
268
269
270
U_NAMESPACE_END
271
#endif
272
273