sdk-world
v2026.11.05
PS2 SDK - world tier (copyleft-allowed, non-essential packages)
Toggle main menu visibility
Loading...
Searching...
No Matches
gxvmort4.c
1
/****************************************************************************
2
*
3
* gxvmort4.c
4
*
5
* TrueTypeGX/AAT mort table validation
6
* body for type4 (Non-Contextual Glyph Substitution) subtable.
7
*
8
* Copyright (C) 2005-2025 by
9
* suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
10
* David Turner, Robert Wilhelm, and Werner Lemberg.
11
*
12
* This file is part of the FreeType project, and may only be used,
13
* modified, and distributed under the terms of the FreeType project
14
* license, LICENSE.TXT. By continuing to use, modify, or distribute
15
* this file you indicate that you have read the license and
16
* understand and accept it fully.
17
*
18
*/
19
20
/****************************************************************************
21
*
22
* gxvalid is derived from both gxlayout module and otvalid module.
23
* Development of gxlayout is supported by the Information-technology
24
* Promotion Agency(IPA), Japan.
25
*
26
*/
27
28
29
#include "
gxvmort.h
"
30
31
32
/**************************************************************************
33
*
34
* The macro FT_COMPONENT is used in trace mode. It is an implicit
35
* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
36
* messages during execution.
37
*/
38
#undef FT_COMPONENT
39
#define FT_COMPONENT gxvmort
40
41
42
static
void
43
gxv_mort_subtable_type4_lookupval_validate( FT_UShort glyph,
44
GXV_LookupValueCPtr value_p,
45
GXV_Validator gxvalid )
46
{
47
FT_UNUSED( glyph );
48
49
gxv_glyphid_validate( value_p->u, gxvalid );
50
}
51
52
/*
53
+===============+ --------+
54
| lookup header | |
55
+===============+ |
56
| BinSrchHeader | |
57
+===============+ |
58
| lastGlyph[0] | |
59
+---------------+ |
60
| firstGlyph[0] | | head of lookup table
61
+---------------+ | +
62
| offset[0] | -> | offset [byte]
63
+===============+ | +
64
| lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte]
65
+---------------+ |
66
| firstGlyph[1] | |
67
+---------------+ |
68
| offset[1] | |
69
+===============+ |
70
|
71
.... |
72
|
73
16bit value array |
74
+===============+ |
75
| value | <-------+
76
....
77
*/
78
79
static
GXV_LookupValueDesc
80
gxv_mort_subtable_type4_lookupfmt4_transit(
81
FT_UShort relative_gindex,
82
GXV_LookupValueCPtr base_value_p,
83
FT_Bytes lookuptbl_limit,
84
GXV_Validator gxvalid )
85
{
86
FT_Bytes p;
87
FT_Bytes limit;
88
FT_UShort offset;
89
GXV_LookupValueDesc value;
90
91
/* XXX: check range? */
92
offset = (FT_UShort)( base_value_p->u +
93
relative_gindex * sizeof ( FT_UShort ) );
94
95
p = gxvalid->lookuptbl_head + offset;
96
limit = lookuptbl_limit;
97
98
GXV_LIMIT_CHECK( 2 );
99
value.u = FT_NEXT_USHORT( p );
100
101
return
value;
102
}
103
104
105
FT_LOCAL_DEF(
void
)
106
gxv_mort_subtable_type4_validate( FT_Bytes table,
107
FT_Bytes limit,
108
GXV_Validator gxvalid )
109
{
110
FT_Bytes p = table;
111
112
113
GXV_NAME_ENTER(
"mort chain subtable type4 "
114
"(Non-Contextual Glyph Substitution)"
);
115
116
gxvalid->lookupval_sign = GXV_LOOKUPVALUE_UNSIGNED;
117
gxvalid->lookupval_func = gxv_mort_subtable_type4_lookupval_validate;
118
gxvalid->lookupfmt4_trans = gxv_mort_subtable_type4_lookupfmt4_transit;
119
120
gxv_LookupTable_validate( p, limit, gxvalid );
121
122
GXV_EXIT;
123
}
124
125
126
/* END */
gxvmort.h
freetype
src
gxvalid
gxvmort4.c
Generated by
1.18.0