ReactOS  0.4.15-dev-1207-g698a8e6
gxvlcar.c
Go to the documentation of this file.
1 /***************************************************************************/
2 /* */
3 /* gxvlcar.c */
4 /* */
5 /* TrueTypeGX/AAT lcar table validation (body). */
6 /* */
7 /* Copyright 2004-2018 by */
8 /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
9 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
10 /* */
11 /* This file is part of the FreeType project, and may only be used, */
12 /* modified, and distributed under the terms of the FreeType project */
13 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
14 /* this file you indicate that you have read the license and */
15 /* understand and accept it fully. */
16 /* */
17 /***************************************************************************/
18 
19 /***************************************************************************/
20 /* */
21 /* gxvalid is derived from both gxlayout module and otvalid module. */
22 /* Development of gxlayout is supported by the Information-technology */
23 /* Promotion Agency(IPA), Japan. */
24 /* */
25 /***************************************************************************/
26 
27 
28 #include "gxvalid.h"
29 #include "gxvcommn.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 trace_gxvlcar
40 
41 
42  /*************************************************************************/
43  /*************************************************************************/
44  /***** *****/
45  /***** Data and Types *****/
46  /***** *****/
47  /*************************************************************************/
48  /*************************************************************************/
49 
50  typedef struct GXV_lcar_DataRec_
51  {
53 
55 
56 
57 #define GXV_LCAR_DATA( FIELD ) GXV_TABLE_DATA( lcar, FIELD )
58 
59 
60  /*************************************************************************/
61  /*************************************************************************/
62  /***** *****/
63  /***** UTILITY FUNCTIONS *****/
64  /***** *****/
65  /*************************************************************************/
66  /*************************************************************************/
67 
68  static void
70  FT_UShort glyph,
71  GXV_Validator gxvalid )
72  {
73  GXV_NAME_ENTER( "partial" );
74 
75  if ( GXV_LCAR_DATA( format ) != 1 )
76  goto Exit;
77 
78  gxv_ctlPoint_validate( glyph, (FT_UShort)partial, gxvalid );
79 
80  Exit:
81  GXV_EXIT;
82  }
83 
84 
85  static void
87  GXV_LookupValueCPtr value_p,
88  GXV_Validator gxvalid )
89  {
90  FT_Bytes p = gxvalid->root->base + value_p->u;
91  FT_Bytes limit = gxvalid->root->limit;
93  FT_Short partial;
94  FT_UShort i;
95 
96 
97  GXV_NAME_ENTER( "element in lookupTable" );
98 
99  GXV_LIMIT_CHECK( 2 );
100  count = FT_NEXT_USHORT( p );
101 
102  GXV_LIMIT_CHECK( 2 * count );
103  for ( i = 0; i < count; i++ )
104  {
105  partial = FT_NEXT_SHORT( p );
106  gxv_lcar_partial_validate( partial, glyph, gxvalid );
107  }
108 
109  GXV_EXIT;
110  }
111 
112 
113  /*
114  +------ lcar --------------------+
115  | |
116  | +===============+ |
117  | | lookup header | |
118  | +===============+ |
119  | | BinSrchHeader | |
120  | +===============+ |
121  | | lastGlyph[0] | |
122  | +---------------+ |
123  | | firstGlyph[0] | | head of lcar sfnt table
124  | +---------------+ | +
125  | | offset[0] | -> | offset [byte]
126  | +===============+ | +
127  | | lastGlyph[1] | | (glyphID - firstGlyph) * 2 [byte]
128  | +---------------+ |
129  | | firstGlyph[1] | |
130  | +---------------+ |
131  | | offset[1] | |
132  | +===============+ |
133  | |
134  | .... |
135  | |
136  | 16bit value array |
137  | +===============+ |
138  +------| value | <-------+
139  | ....
140  |
141  |
142  |
143  |
144  |
145  +----> lcar values...handled by lcar callback function
146  */
147 
148  static GXV_LookupValueDesc
150  GXV_LookupValueCPtr base_value_p,
151  FT_Bytes lookuptbl_limit,
152  GXV_Validator gxvalid )
153  {
154  FT_Bytes p;
155  FT_Bytes limit;
158 
159  FT_UNUSED( lookuptbl_limit );
160 
161  /* XXX: check range? */
162  offset = (FT_UShort)( base_value_p->u +
163  relative_gindex * sizeof ( FT_UShort ) );
164  p = gxvalid->root->base + offset;
165  limit = gxvalid->root->limit;
166 
167  GXV_LIMIT_CHECK ( 2 );
168  value.u = FT_NEXT_USHORT( p );
169 
170  return value;
171  }
172 
173 
174  /*************************************************************************/
175  /*************************************************************************/
176  /***** *****/
177  /***** lcar TABLE *****/
178  /***** *****/
179  /*************************************************************************/
180  /*************************************************************************/
181 
182  FT_LOCAL_DEF( void )
184  FT_Face face,
185  FT_Validator ftvalid )
186  {
187  FT_Bytes p = table;
188  FT_Bytes limit = 0;
189  GXV_ValidatorRec gxvalidrec;
190  GXV_Validator gxvalid = &gxvalidrec;
191 
192  GXV_lcar_DataRec lcarrec;
193  GXV_lcar_Data lcar = &lcarrec;
194 
196 
197 
198  gxvalid->root = ftvalid;
199  gxvalid->table_data = lcar;
200  gxvalid->face = face;
201 
202  FT_TRACE3(( "validating `lcar' table\n" ));
203  GXV_INIT;
204 
205  GXV_LIMIT_CHECK( 4 + 2 );
206  version = FT_NEXT_LONG( p );
208 
209  if ( version != 0x00010000UL)
211 
212  if ( GXV_LCAR_DATA( format ) > 1 )
214 
218  gxv_LookupTable_validate( p, limit, gxvalid );
219 
220  FT_TRACE4(( "\n" ));
221  }
222 
223 
224 /* END */
gxv_lcar_validate(FT_Bytes table, FT_Face face, FT_Validator ftvalid)
Definition: gxvlcar.c:183
#define FT_NEXT_LONG(buffer)
Definition: ftstream.h:235
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
#define FT_INVALID_FORMAT
Definition: ftvalid.h:142
#define GXV_NAME_ENTER(name)
Definition: gxvcommn.h:301
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLintptr offset
Definition: glext.h:5920
GLenum GLsizei GLenum GLenum const GLvoid * table
Definition: glext.h:5644
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GXV_LookupValue_SignSpec lookupval_sign
Definition: gxvcommn.h:246
GLint limit
Definition: glext.h:10326
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
struct GXV_lcar_DataRec_ * GXV_lcar_Data
GXV_Lookup_Fmt4_Transit_Func lookupfmt4_trans
Definition: gxvcommn.h:248
GXV_Lookup_Value_Validate_Func lookupval_func
Definition: gxvcommn.h:247
gxv_LookupTable_validate(FT_Bytes table, FT_Bytes limit, GXV_Validator gxvalid)
Definition: gxvcommn.c:755
#define FT_TRACE4(varformat)
Definition: ftdebug.h:161
void * table_data
Definition: gxvcommn.h:242
static void gxv_lcar_partial_validate(FT_Short partial, FT_UShort glyph, GXV_Validator gxvalid)
Definition: gxvlcar.c:69
static const WCHAR version[]
Definition: asmname.c:66
#define GXV_EXIT
Definition: gxvcommn.h:302
static void gxv_lcar_LookupValue_validate(FT_UShort glyph, GXV_LookupValueCPtr value_p, GXV_Validator gxvalid)
Definition: gxvlcar.c:86
#define FT_LOCAL_DEF(x)
Definition: ftconfig.h:388
FT_Validator root
Definition: gxvcommn.h:239
static void Exit(void)
Definition: sock.c:1331
typedefFT_BEGIN_HEADER struct FT_ValidatorRec_ volatile * FT_Validator
Definition: ftvalid.h:42
union value::@490 u
WORD face[3]
Definition: mesh.c:4747
const FT_Byte * FT_Bytes
Definition: fttypes.h:165
FT_UShort format
Definition: gxvlcar.c:52
#define GXV_LCAR_DATA(FIELD)
Definition: gxvlcar.c:57
gxv_ctlPoint_validate(FT_UShort gid, FT_UShort ctl_point, GXV_Validator gxvalid)
Definition: gxvcommn.c:846
signed short FT_Short
Definition: fttypes.h:198
GLsizei const GLfloat * value
Definition: glext.h:6069
#define FT_NEXT_USHORT(buffer)
Definition: ftstream.h:226
#define FT_TRACE3(varformat)
Definition: ftdebug.h:160
signed long FT_Fixed
Definition: fttypes.h:288
struct GXV_lcar_DataRec_ GXV_lcar_DataRec
#define FT_NEXT_SHORT(buffer)
Definition: ftstream.h:223
static GXV_LookupValueDesc gxv_lcar_LookupFmt4_transit(FT_UShort relative_gindex, GXV_LookupValueCPtr base_value_p, FT_Bytes lookuptbl_limit, GXV_Validator gxvalid)
Definition: gxvlcar.c:149
GLfloat GLfloat p
Definition: glext.h:8902
unsigned short FT_UShort
Definition: fttypes.h:209
#define GXV_INIT
Definition: gxvcommn.h:300
#define FT_UNUSED(arg)
Definition: ftconfig.h:101
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
#define GXV_LIMIT_CHECK(_count)
Definition: gxvcommn.h:272