vrshoot

annotate libs/ft2static/freetype/internal/psaux.h @ 0:b2f14e535253

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 01 Feb 2014 19:58:19 +0200
parents
children
rev   line source
nuclear@0 1 /***************************************************************************/
nuclear@0 2 /* */
nuclear@0 3 /* psaux.h */
nuclear@0 4 /* */
nuclear@0 5 /* Auxiliary functions and data structures related to PostScript fonts */
nuclear@0 6 /* (specification). */
nuclear@0 7 /* */
nuclear@0 8 /* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008, 2009 by */
nuclear@0 9 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
nuclear@0 10 /* */
nuclear@0 11 /* This file is part of the FreeType project, and may only be used, */
nuclear@0 12 /* modified, and distributed under the terms of the FreeType project */
nuclear@0 13 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
nuclear@0 14 /* this file you indicate that you have read the license and */
nuclear@0 15 /* understand and accept it fully. */
nuclear@0 16 /* */
nuclear@0 17 /***************************************************************************/
nuclear@0 18
nuclear@0 19
nuclear@0 20 #ifndef __PSAUX_H__
nuclear@0 21 #define __PSAUX_H__
nuclear@0 22
nuclear@0 23
nuclear@0 24 #include <ft2build.h>
nuclear@0 25 #include FT_INTERNAL_OBJECTS_H
nuclear@0 26 #include FT_INTERNAL_TYPE1_TYPES_H
nuclear@0 27 #include FT_SERVICE_POSTSCRIPT_CMAPS_H
nuclear@0 28
nuclear@0 29
nuclear@0 30 FT_BEGIN_HEADER
nuclear@0 31
nuclear@0 32
nuclear@0 33 /*************************************************************************/
nuclear@0 34 /*************************************************************************/
nuclear@0 35 /***** *****/
nuclear@0 36 /***** T1_TABLE *****/
nuclear@0 37 /***** *****/
nuclear@0 38 /*************************************************************************/
nuclear@0 39 /*************************************************************************/
nuclear@0 40
nuclear@0 41
nuclear@0 42 typedef struct PS_TableRec_* PS_Table;
nuclear@0 43 typedef const struct PS_Table_FuncsRec_* PS_Table_Funcs;
nuclear@0 44
nuclear@0 45
nuclear@0 46 /*************************************************************************/
nuclear@0 47 /* */
nuclear@0 48 /* <Struct> */
nuclear@0 49 /* PS_Table_FuncsRec */
nuclear@0 50 /* */
nuclear@0 51 /* <Description> */
nuclear@0 52 /* A set of function pointers to manage PS_Table objects. */
nuclear@0 53 /* */
nuclear@0 54 /* <Fields> */
nuclear@0 55 /* table_init :: Used to initialize a table. */
nuclear@0 56 /* */
nuclear@0 57 /* table_done :: Finalizes resp. destroy a given table. */
nuclear@0 58 /* */
nuclear@0 59 /* table_add :: Adds a new object to a table. */
nuclear@0 60 /* */
nuclear@0 61 /* table_release :: Releases table data, then finalizes it. */
nuclear@0 62 /* */
nuclear@0 63 typedef struct PS_Table_FuncsRec_
nuclear@0 64 {
nuclear@0 65 FT_Error
nuclear@0 66 (*init)( PS_Table table,
nuclear@0 67 FT_Int count,
nuclear@0 68 FT_Memory memory );
nuclear@0 69
nuclear@0 70 void
nuclear@0 71 (*done)( PS_Table table );
nuclear@0 72
nuclear@0 73 FT_Error
nuclear@0 74 (*add)( PS_Table table,
nuclear@0 75 FT_Int idx,
nuclear@0 76 void* object,
nuclear@0 77 FT_PtrDist length );
nuclear@0 78
nuclear@0 79 void
nuclear@0 80 (*release)( PS_Table table );
nuclear@0 81
nuclear@0 82 } PS_Table_FuncsRec;
nuclear@0 83
nuclear@0 84
nuclear@0 85 /*************************************************************************/
nuclear@0 86 /* */
nuclear@0 87 /* <Struct> */
nuclear@0 88 /* PS_TableRec */
nuclear@0 89 /* */
nuclear@0 90 /* <Description> */
nuclear@0 91 /* A PS_Table is a simple object used to store an array of objects in */
nuclear@0 92 /* a single memory block. */
nuclear@0 93 /* */
nuclear@0 94 /* <Fields> */
nuclear@0 95 /* block :: The address in memory of the growheap's block. This */
nuclear@0 96 /* can change between two object adds, due to */
nuclear@0 97 /* reallocation. */
nuclear@0 98 /* */
nuclear@0 99 /* cursor :: The current top of the grow heap within its block. */
nuclear@0 100 /* */
nuclear@0 101 /* capacity :: The current size of the heap block. Increments by */
nuclear@0 102 /* 1kByte chunks. */
nuclear@0 103 /* */
nuclear@0 104 /* max_elems :: The maximum number of elements in table. */
nuclear@0 105 /* */
nuclear@0 106 /* num_elems :: The current number of elements in table. */
nuclear@0 107 /* */
nuclear@0 108 /* elements :: A table of element addresses within the block. */
nuclear@0 109 /* */
nuclear@0 110 /* lengths :: A table of element sizes within the block. */
nuclear@0 111 /* */
nuclear@0 112 /* memory :: The object used for memory operations */
nuclear@0 113 /* (alloc/realloc). */
nuclear@0 114 /* */
nuclear@0 115 /* funcs :: A table of method pointers for this object. */
nuclear@0 116 /* */
nuclear@0 117 typedef struct PS_TableRec_
nuclear@0 118 {
nuclear@0 119 FT_Byte* block; /* current memory block */
nuclear@0 120 FT_Offset cursor; /* current cursor in memory block */
nuclear@0 121 FT_Offset capacity; /* current size of memory block */
nuclear@0 122 FT_Long init;
nuclear@0 123
nuclear@0 124 FT_Int max_elems;
nuclear@0 125 FT_Int num_elems;
nuclear@0 126 FT_Byte** elements; /* addresses of table elements */
nuclear@0 127 FT_PtrDist* lengths; /* lengths of table elements */
nuclear@0 128
nuclear@0 129 FT_Memory memory;
nuclear@0 130 PS_Table_FuncsRec funcs;
nuclear@0 131
nuclear@0 132 } PS_TableRec;
nuclear@0 133
nuclear@0 134
nuclear@0 135 /*************************************************************************/
nuclear@0 136 /*************************************************************************/
nuclear@0 137 /***** *****/
nuclear@0 138 /***** T1 FIELDS & TOKENS *****/
nuclear@0 139 /***** *****/
nuclear@0 140 /*************************************************************************/
nuclear@0 141 /*************************************************************************/
nuclear@0 142
nuclear@0 143 typedef struct PS_ParserRec_* PS_Parser;
nuclear@0 144
nuclear@0 145 typedef struct T1_TokenRec_* T1_Token;
nuclear@0 146
nuclear@0 147 typedef struct T1_FieldRec_* T1_Field;
nuclear@0 148
nuclear@0 149
nuclear@0 150 /* simple enumeration type used to identify token types */
nuclear@0 151 typedef enum T1_TokenType_
nuclear@0 152 {
nuclear@0 153 T1_TOKEN_TYPE_NONE = 0,
nuclear@0 154 T1_TOKEN_TYPE_ANY,
nuclear@0 155 T1_TOKEN_TYPE_STRING,
nuclear@0 156 T1_TOKEN_TYPE_ARRAY,
nuclear@0 157 T1_TOKEN_TYPE_KEY, /* aka `name' */
nuclear@0 158
nuclear@0 159 /* do not remove */
nuclear@0 160 T1_TOKEN_TYPE_MAX
nuclear@0 161
nuclear@0 162 } T1_TokenType;
nuclear@0 163
nuclear@0 164
nuclear@0 165 /* a simple structure used to identify tokens */
nuclear@0 166 typedef struct T1_TokenRec_
nuclear@0 167 {
nuclear@0 168 FT_Byte* start; /* first character of token in input stream */
nuclear@0 169 FT_Byte* limit; /* first character after the token */
nuclear@0 170 T1_TokenType type; /* type of token */
nuclear@0 171
nuclear@0 172 } T1_TokenRec;
nuclear@0 173
nuclear@0 174
nuclear@0 175 /* enumeration type used to identify object fields */
nuclear@0 176 typedef enum T1_FieldType_
nuclear@0 177 {
nuclear@0 178 T1_FIELD_TYPE_NONE = 0,
nuclear@0 179 T1_FIELD_TYPE_BOOL,
nuclear@0 180 T1_FIELD_TYPE_INTEGER,
nuclear@0 181 T1_FIELD_TYPE_FIXED,
nuclear@0 182 T1_FIELD_TYPE_FIXED_1000,
nuclear@0 183 T1_FIELD_TYPE_STRING,
nuclear@0 184 T1_FIELD_TYPE_KEY,
nuclear@0 185 T1_FIELD_TYPE_BBOX,
nuclear@0 186 T1_FIELD_TYPE_INTEGER_ARRAY,
nuclear@0 187 T1_FIELD_TYPE_FIXED_ARRAY,
nuclear@0 188 T1_FIELD_TYPE_CALLBACK,
nuclear@0 189
nuclear@0 190 /* do not remove */
nuclear@0 191 T1_FIELD_TYPE_MAX
nuclear@0 192
nuclear@0 193 } T1_FieldType;
nuclear@0 194
nuclear@0 195
nuclear@0 196 typedef enum T1_FieldLocation_
nuclear@0 197 {
nuclear@0 198 T1_FIELD_LOCATION_CID_INFO,
nuclear@0 199 T1_FIELD_LOCATION_FONT_DICT,
nuclear@0 200 T1_FIELD_LOCATION_FONT_EXTRA,
nuclear@0 201 T1_FIELD_LOCATION_FONT_INFO,
nuclear@0 202 T1_FIELD_LOCATION_PRIVATE,
nuclear@0 203 T1_FIELD_LOCATION_BBOX,
nuclear@0 204 T1_FIELD_LOCATION_LOADER,
nuclear@0 205 T1_FIELD_LOCATION_FACE,
nuclear@0 206 T1_FIELD_LOCATION_BLEND,
nuclear@0 207
nuclear@0 208 /* do not remove */
nuclear@0 209 T1_FIELD_LOCATION_MAX
nuclear@0 210
nuclear@0 211 } T1_FieldLocation;
nuclear@0 212
nuclear@0 213
nuclear@0 214 typedef void
nuclear@0 215 (*T1_Field_ParseFunc)( FT_Face face,
nuclear@0 216 FT_Pointer parser );
nuclear@0 217
nuclear@0 218
nuclear@0 219 /* structure type used to model object fields */
nuclear@0 220 typedef struct T1_FieldRec_
nuclear@0 221 {
nuclear@0 222 const char* ident; /* field identifier */
nuclear@0 223 T1_FieldLocation location;
nuclear@0 224 T1_FieldType type; /* type of field */
nuclear@0 225 T1_Field_ParseFunc reader;
nuclear@0 226 FT_UInt offset; /* offset of field in object */
nuclear@0 227 FT_Byte size; /* size of field in bytes */
nuclear@0 228 FT_UInt array_max; /* maximal number of elements for */
nuclear@0 229 /* array */
nuclear@0 230 FT_UInt count_offset; /* offset of element count for */
nuclear@0 231 /* arrays; must not be zero if in */
nuclear@0 232 /* use -- in other words, a */
nuclear@0 233 /* `num_FOO' element must not */
nuclear@0 234 /* start the used structure if we */
nuclear@0 235 /* parse a `FOO' array */
nuclear@0 236 FT_UInt dict; /* where we expect it */
nuclear@0 237 } T1_FieldRec;
nuclear@0 238
nuclear@0 239 #define T1_FIELD_DICT_FONTDICT ( 1 << 0 ) /* also FontInfo and FDArray */
nuclear@0 240 #define T1_FIELD_DICT_PRIVATE ( 1 << 1 )
nuclear@0 241
nuclear@0 242
nuclear@0 243
nuclear@0 244 #define T1_NEW_SIMPLE_FIELD( _ident, _type, _fname, _dict ) \
nuclear@0 245 { \
nuclear@0 246 _ident, T1CODE, _type, \
nuclear@0 247 0, \
nuclear@0 248 FT_FIELD_OFFSET( _fname ), \
nuclear@0 249 FT_FIELD_SIZE( _fname ), \
nuclear@0 250 0, 0, \
nuclear@0 251 _dict \
nuclear@0 252 },
nuclear@0 253
nuclear@0 254 #define T1_NEW_CALLBACK_FIELD( _ident, _reader, _dict ) \
nuclear@0 255 { \
nuclear@0 256 _ident, T1CODE, T1_FIELD_TYPE_CALLBACK, \
nuclear@0 257 (T1_Field_ParseFunc)_reader, \
nuclear@0 258 0, 0, \
nuclear@0 259 0, 0, \
nuclear@0 260 _dict \
nuclear@0 261 },
nuclear@0 262
nuclear@0 263 #define T1_NEW_TABLE_FIELD( _ident, _type, _fname, _max, _dict ) \
nuclear@0 264 { \
nuclear@0 265 _ident, T1CODE, _type, \
nuclear@0 266 0, \
nuclear@0 267 FT_FIELD_OFFSET( _fname ), \
nuclear@0 268 FT_FIELD_SIZE_DELTA( _fname ), \
nuclear@0 269 _max, \
nuclear@0 270 FT_FIELD_OFFSET( num_ ## _fname ), \
nuclear@0 271 _dict \
nuclear@0 272 },
nuclear@0 273
nuclear@0 274 #define T1_NEW_TABLE_FIELD2( _ident, _type, _fname, _max, _dict ) \
nuclear@0 275 { \
nuclear@0 276 _ident, T1CODE, _type, \
nuclear@0 277 0, \
nuclear@0 278 FT_FIELD_OFFSET( _fname ), \
nuclear@0 279 FT_FIELD_SIZE_DELTA( _fname ), \
nuclear@0 280 _max, 0, \
nuclear@0 281 _dict \
nuclear@0 282 },
nuclear@0 283
nuclear@0 284
nuclear@0 285 #define T1_FIELD_BOOL( _ident, _fname, _dict ) \
nuclear@0 286 T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_BOOL, _fname, _dict )
nuclear@0 287
nuclear@0 288 #define T1_FIELD_NUM( _ident, _fname, _dict ) \
nuclear@0 289 T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_INTEGER, _fname, _dict )
nuclear@0 290
nuclear@0 291 #define T1_FIELD_FIXED( _ident, _fname, _dict ) \
nuclear@0 292 T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_FIXED, _fname, _dict )
nuclear@0 293
nuclear@0 294 #define T1_FIELD_FIXED_1000( _ident, _fname, _dict ) \
nuclear@0 295 T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_FIXED_1000, _fname, \
nuclear@0 296 _dict )
nuclear@0 297
nuclear@0 298 #define T1_FIELD_STRING( _ident, _fname, _dict ) \
nuclear@0 299 T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_STRING, _fname, _dict )
nuclear@0 300
nuclear@0 301 #define T1_FIELD_KEY( _ident, _fname, _dict ) \
nuclear@0 302 T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_KEY, _fname, _dict )
nuclear@0 303
nuclear@0 304 #define T1_FIELD_BBOX( _ident, _fname, _dict ) \
nuclear@0 305 T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_BBOX, _fname, _dict )
nuclear@0 306
nuclear@0 307
nuclear@0 308 #define T1_FIELD_NUM_TABLE( _ident, _fname, _fmax, _dict ) \
nuclear@0 309 T1_NEW_TABLE_FIELD( _ident, T1_FIELD_TYPE_INTEGER_ARRAY, \
nuclear@0 310 _fname, _fmax, _dict )
nuclear@0 311
nuclear@0 312 #define T1_FIELD_FIXED_TABLE( _ident, _fname, _fmax, _dict ) \
nuclear@0 313 T1_NEW_TABLE_FIELD( _ident, T1_FIELD_TYPE_FIXED_ARRAY, \
nuclear@0 314 _fname, _fmax, _dict )
nuclear@0 315
nuclear@0 316 #define T1_FIELD_NUM_TABLE2( _ident, _fname, _fmax, _dict ) \
nuclear@0 317 T1_NEW_TABLE_FIELD2( _ident, T1_FIELD_TYPE_INTEGER_ARRAY, \
nuclear@0 318 _fname, _fmax, _dict )
nuclear@0 319
nuclear@0 320 #define T1_FIELD_FIXED_TABLE2( _ident, _fname, _fmax, _dict ) \
nuclear@0 321 T1_NEW_TABLE_FIELD2( _ident, T1_FIELD_TYPE_FIXED_ARRAY, \
nuclear@0 322 _fname, _fmax, _dict )
nuclear@0 323
nuclear@0 324 #define T1_FIELD_CALLBACK( _ident, _name, _dict ) \
nuclear@0 325 T1_NEW_CALLBACK_FIELD( _ident, _name, _dict )
nuclear@0 326
nuclear@0 327
nuclear@0 328 /*************************************************************************/
nuclear@0 329 /*************************************************************************/
nuclear@0 330 /***** *****/
nuclear@0 331 /***** T1 PARSER *****/
nuclear@0 332 /***** *****/
nuclear@0 333 /*************************************************************************/
nuclear@0 334 /*************************************************************************/
nuclear@0 335
nuclear@0 336 typedef const struct PS_Parser_FuncsRec_* PS_Parser_Funcs;
nuclear@0 337
nuclear@0 338 typedef struct PS_Parser_FuncsRec_
nuclear@0 339 {
nuclear@0 340 void
nuclear@0 341 (*init)( PS_Parser parser,
nuclear@0 342 FT_Byte* base,
nuclear@0 343 FT_Byte* limit,
nuclear@0 344 FT_Memory memory );
nuclear@0 345
nuclear@0 346 void
nuclear@0 347 (*done)( PS_Parser parser );
nuclear@0 348
nuclear@0 349 void
nuclear@0 350 (*skip_spaces)( PS_Parser parser );
nuclear@0 351 void
nuclear@0 352 (*skip_PS_token)( PS_Parser parser );
nuclear@0 353
nuclear@0 354 FT_Long
nuclear@0 355 (*to_int)( PS_Parser parser );
nuclear@0 356 FT_Fixed
nuclear@0 357 (*to_fixed)( PS_Parser parser,
nuclear@0 358 FT_Int power_ten );
nuclear@0 359
nuclear@0 360 FT_Error
nuclear@0 361 (*to_bytes)( PS_Parser parser,
nuclear@0 362 FT_Byte* bytes,
nuclear@0 363 FT_Offset max_bytes,
nuclear@0 364 FT_Long* pnum_bytes,
nuclear@0 365 FT_Bool delimiters );
nuclear@0 366
nuclear@0 367 FT_Int
nuclear@0 368 (*to_coord_array)( PS_Parser parser,
nuclear@0 369 FT_Int max_coords,
nuclear@0 370 FT_Short* coords );
nuclear@0 371 FT_Int
nuclear@0 372 (*to_fixed_array)( PS_Parser parser,
nuclear@0 373 FT_Int max_values,
nuclear@0 374 FT_Fixed* values,
nuclear@0 375 FT_Int power_ten );
nuclear@0 376
nuclear@0 377 void
nuclear@0 378 (*to_token)( PS_Parser parser,
nuclear@0 379 T1_Token token );
nuclear@0 380 void
nuclear@0 381 (*to_token_array)( PS_Parser parser,
nuclear@0 382 T1_Token tokens,
nuclear@0 383 FT_UInt max_tokens,
nuclear@0 384 FT_Int* pnum_tokens );
nuclear@0 385
nuclear@0 386 FT_Error
nuclear@0 387 (*load_field)( PS_Parser parser,
nuclear@0 388 const T1_Field field,
nuclear@0 389 void** objects,
nuclear@0 390 FT_UInt max_objects,
nuclear@0 391 FT_ULong* pflags );
nuclear@0 392
nuclear@0 393 FT_Error
nuclear@0 394 (*load_field_table)( PS_Parser parser,
nuclear@0 395 const T1_Field field,
nuclear@0 396 void** objects,
nuclear@0 397 FT_UInt max_objects,
nuclear@0 398 FT_ULong* pflags );
nuclear@0 399
nuclear@0 400 } PS_Parser_FuncsRec;
nuclear@0 401
nuclear@0 402
nuclear@0 403 /*************************************************************************/
nuclear@0 404 /* */
nuclear@0 405 /* <Struct> */
nuclear@0 406 /* PS_ParserRec */
nuclear@0 407 /* */
nuclear@0 408 /* <Description> */
nuclear@0 409 /* A PS_Parser is an object used to parse a Type 1 font very quickly. */
nuclear@0 410 /* */
nuclear@0 411 /* <Fields> */
nuclear@0 412 /* cursor :: The current position in the text. */
nuclear@0 413 /* */
nuclear@0 414 /* base :: Start of the processed text. */
nuclear@0 415 /* */
nuclear@0 416 /* limit :: End of the processed text. */
nuclear@0 417 /* */
nuclear@0 418 /* error :: The last error returned. */
nuclear@0 419 /* */
nuclear@0 420 /* memory :: The object used for memory operations (alloc/realloc). */
nuclear@0 421 /* */
nuclear@0 422 /* funcs :: A table of functions for the parser. */
nuclear@0 423 /* */
nuclear@0 424 typedef struct PS_ParserRec_
nuclear@0 425 {
nuclear@0 426 FT_Byte* cursor;
nuclear@0 427 FT_Byte* base;
nuclear@0 428 FT_Byte* limit;
nuclear@0 429 FT_Error error;
nuclear@0 430 FT_Memory memory;
nuclear@0 431
nuclear@0 432 PS_Parser_FuncsRec funcs;
nuclear@0 433
nuclear@0 434 } PS_ParserRec;
nuclear@0 435
nuclear@0 436
nuclear@0 437 /*************************************************************************/
nuclear@0 438 /*************************************************************************/
nuclear@0 439 /***** *****/
nuclear@0 440 /***** T1 BUILDER *****/
nuclear@0 441 /***** *****/
nuclear@0 442 /*************************************************************************/
nuclear@0 443 /*************************************************************************/
nuclear@0 444
nuclear@0 445
nuclear@0 446 typedef struct T1_BuilderRec_* T1_Builder;
nuclear@0 447
nuclear@0 448
nuclear@0 449 typedef FT_Error
nuclear@0 450 (*T1_Builder_Check_Points_Func)( T1_Builder builder,
nuclear@0 451 FT_Int count );
nuclear@0 452
nuclear@0 453 typedef void
nuclear@0 454 (*T1_Builder_Add_Point_Func)( T1_Builder builder,
nuclear@0 455 FT_Pos x,
nuclear@0 456 FT_Pos y,
nuclear@0 457 FT_Byte flag );
nuclear@0 458
nuclear@0 459 typedef FT_Error
nuclear@0 460 (*T1_Builder_Add_Point1_Func)( T1_Builder builder,
nuclear@0 461 FT_Pos x,
nuclear@0 462 FT_Pos y );
nuclear@0 463
nuclear@0 464 typedef FT_Error
nuclear@0 465 (*T1_Builder_Add_Contour_Func)( T1_Builder builder );
nuclear@0 466
nuclear@0 467 typedef FT_Error
nuclear@0 468 (*T1_Builder_Start_Point_Func)( T1_Builder builder,
nuclear@0 469 FT_Pos x,
nuclear@0 470 FT_Pos y );
nuclear@0 471
nuclear@0 472 typedef void
nuclear@0 473 (*T1_Builder_Close_Contour_Func)( T1_Builder builder );
nuclear@0 474
nuclear@0 475
nuclear@0 476 typedef const struct T1_Builder_FuncsRec_* T1_Builder_Funcs;
nuclear@0 477
nuclear@0 478 typedef struct T1_Builder_FuncsRec_
nuclear@0 479 {
nuclear@0 480 void
nuclear@0 481 (*init)( T1_Builder builder,
nuclear@0 482 FT_Face face,
nuclear@0 483 FT_Size size,
nuclear@0 484 FT_GlyphSlot slot,
nuclear@0 485 FT_Bool hinting );
nuclear@0 486
nuclear@0 487 void
nuclear@0 488 (*done)( T1_Builder builder );
nuclear@0 489
nuclear@0 490 T1_Builder_Check_Points_Func check_points;
nuclear@0 491 T1_Builder_Add_Point_Func add_point;
nuclear@0 492 T1_Builder_Add_Point1_Func add_point1;
nuclear@0 493 T1_Builder_Add_Contour_Func add_contour;
nuclear@0 494 T1_Builder_Start_Point_Func start_point;
nuclear@0 495 T1_Builder_Close_Contour_Func close_contour;
nuclear@0 496
nuclear@0 497 } T1_Builder_FuncsRec;
nuclear@0 498
nuclear@0 499
nuclear@0 500 /* an enumeration type to handle charstring parsing states */
nuclear@0 501 typedef enum T1_ParseState_
nuclear@0 502 {
nuclear@0 503 T1_Parse_Start,
nuclear@0 504 T1_Parse_Have_Width,
nuclear@0 505 T1_Parse_Have_Moveto,
nuclear@0 506 T1_Parse_Have_Path
nuclear@0 507
nuclear@0 508 } T1_ParseState;
nuclear@0 509
nuclear@0 510
nuclear@0 511 /*************************************************************************/
nuclear@0 512 /* */
nuclear@0 513 /* <Structure> */
nuclear@0 514 /* T1_BuilderRec */
nuclear@0 515 /* */
nuclear@0 516 /* <Description> */
nuclear@0 517 /* A structure used during glyph loading to store its outline. */
nuclear@0 518 /* */
nuclear@0 519 /* <Fields> */
nuclear@0 520 /* memory :: The current memory object. */
nuclear@0 521 /* */
nuclear@0 522 /* face :: The current face object. */
nuclear@0 523 /* */
nuclear@0 524 /* glyph :: The current glyph slot. */
nuclear@0 525 /* */
nuclear@0 526 /* loader :: XXX */
nuclear@0 527 /* */
nuclear@0 528 /* base :: The base glyph outline. */
nuclear@0 529 /* */
nuclear@0 530 /* current :: The current glyph outline. */
nuclear@0 531 /* */
nuclear@0 532 /* max_points :: maximum points in builder outline */
nuclear@0 533 /* */
nuclear@0 534 /* max_contours :: Maximal number of contours in builder outline. */
nuclear@0 535 /* */
nuclear@0 536 /* pos_x :: The horizontal translation (if composite glyph). */
nuclear@0 537 /* */
nuclear@0 538 /* pos_y :: The vertical translation (if composite glyph). */
nuclear@0 539 /* */
nuclear@0 540 /* left_bearing :: The left side bearing point. */
nuclear@0 541 /* */
nuclear@0 542 /* advance :: The horizontal advance vector. */
nuclear@0 543 /* */
nuclear@0 544 /* bbox :: Unused. */
nuclear@0 545 /* */
nuclear@0 546 /* parse_state :: An enumeration which controls the charstring */
nuclear@0 547 /* parsing state. */
nuclear@0 548 /* */
nuclear@0 549 /* load_points :: If this flag is not set, no points are loaded. */
nuclear@0 550 /* */
nuclear@0 551 /* no_recurse :: Set but not used. */
nuclear@0 552 /* */
nuclear@0 553 /* metrics_only :: A boolean indicating that we only want to compute */
nuclear@0 554 /* the metrics of a given glyph, not load all of its */
nuclear@0 555 /* points. */
nuclear@0 556 /* */
nuclear@0 557 /* funcs :: An array of function pointers for the builder. */
nuclear@0 558 /* */
nuclear@0 559 typedef struct T1_BuilderRec_
nuclear@0 560 {
nuclear@0 561 FT_Memory memory;
nuclear@0 562 FT_Face face;
nuclear@0 563 FT_GlyphSlot glyph;
nuclear@0 564 FT_GlyphLoader loader;
nuclear@0 565 FT_Outline* base;
nuclear@0 566 FT_Outline* current;
nuclear@0 567
nuclear@0 568 FT_Pos pos_x;
nuclear@0 569 FT_Pos pos_y;
nuclear@0 570
nuclear@0 571 FT_Vector left_bearing;
nuclear@0 572 FT_Vector advance;
nuclear@0 573
nuclear@0 574 FT_BBox bbox; /* bounding box */
nuclear@0 575 T1_ParseState parse_state;
nuclear@0 576 FT_Bool load_points;
nuclear@0 577 FT_Bool no_recurse;
nuclear@0 578
nuclear@0 579 FT_Bool metrics_only;
nuclear@0 580
nuclear@0 581 void* hints_funcs; /* hinter-specific */
nuclear@0 582 void* hints_globals; /* hinter-specific */
nuclear@0 583
nuclear@0 584 T1_Builder_FuncsRec funcs;
nuclear@0 585
nuclear@0 586 } T1_BuilderRec;
nuclear@0 587
nuclear@0 588
nuclear@0 589 /*************************************************************************/
nuclear@0 590 /*************************************************************************/
nuclear@0 591 /***** *****/
nuclear@0 592 /***** T1 DECODER *****/
nuclear@0 593 /***** *****/
nuclear@0 594 /*************************************************************************/
nuclear@0 595 /*************************************************************************/
nuclear@0 596
nuclear@0 597 #if 0
nuclear@0 598
nuclear@0 599 /*************************************************************************/
nuclear@0 600 /* */
nuclear@0 601 /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
nuclear@0 602 /* calls during glyph loading. */
nuclear@0 603 /* */
nuclear@0 604 #define T1_MAX_SUBRS_CALLS 8
nuclear@0 605
nuclear@0 606
nuclear@0 607 /*************************************************************************/
nuclear@0 608 /* */
nuclear@0 609 /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */
nuclear@0 610 /* minimum of 16 is required. */
nuclear@0 611 /* */
nuclear@0 612 #define T1_MAX_CHARSTRINGS_OPERANDS 32
nuclear@0 613
nuclear@0 614 #endif /* 0 */
nuclear@0 615
nuclear@0 616
nuclear@0 617 typedef struct T1_Decoder_ZoneRec_
nuclear@0 618 {
nuclear@0 619 FT_Byte* cursor;
nuclear@0 620 FT_Byte* base;
nuclear@0 621 FT_Byte* limit;
nuclear@0 622
nuclear@0 623 } T1_Decoder_ZoneRec, *T1_Decoder_Zone;
nuclear@0 624
nuclear@0 625
nuclear@0 626 typedef struct T1_DecoderRec_* T1_Decoder;
nuclear@0 627 typedef const struct T1_Decoder_FuncsRec_* T1_Decoder_Funcs;
nuclear@0 628
nuclear@0 629
nuclear@0 630 typedef FT_Error
nuclear@0 631 (*T1_Decoder_Callback)( T1_Decoder decoder,
nuclear@0 632 FT_UInt glyph_index );
nuclear@0 633
nuclear@0 634
nuclear@0 635 typedef struct T1_Decoder_FuncsRec_
nuclear@0 636 {
nuclear@0 637 FT_Error
nuclear@0 638 (*init)( T1_Decoder decoder,
nuclear@0 639 FT_Face face,
nuclear@0 640 FT_Size size,
nuclear@0 641 FT_GlyphSlot slot,
nuclear@0 642 FT_Byte** glyph_names,
nuclear@0 643 PS_Blend blend,
nuclear@0 644 FT_Bool hinting,
nuclear@0 645 FT_Render_Mode hint_mode,
nuclear@0 646 T1_Decoder_Callback callback );
nuclear@0 647
nuclear@0 648 void
nuclear@0 649 (*done)( T1_Decoder decoder );
nuclear@0 650
nuclear@0 651 FT_Error
nuclear@0 652 (*parse_charstrings)( T1_Decoder decoder,
nuclear@0 653 FT_Byte* base,
nuclear@0 654 FT_UInt len );
nuclear@0 655
nuclear@0 656 } T1_Decoder_FuncsRec;
nuclear@0 657
nuclear@0 658
nuclear@0 659 typedef struct T1_DecoderRec_
nuclear@0 660 {
nuclear@0 661 T1_BuilderRec builder;
nuclear@0 662
nuclear@0 663 FT_Long stack[T1_MAX_CHARSTRINGS_OPERANDS];
nuclear@0 664 FT_Long* top;
nuclear@0 665
nuclear@0 666 T1_Decoder_ZoneRec zones[T1_MAX_SUBRS_CALLS + 1];
nuclear@0 667 T1_Decoder_Zone zone;
nuclear@0 668
nuclear@0 669 FT_Service_PsCMaps psnames; /* for seac */
nuclear@0 670 FT_UInt num_glyphs;
nuclear@0 671 FT_Byte** glyph_names;
nuclear@0 672
nuclear@0 673 FT_Int lenIV; /* internal for sub routine calls */
nuclear@0 674 FT_UInt num_subrs;
nuclear@0 675 FT_Byte** subrs;
nuclear@0 676 FT_PtrDist* subrs_len; /* array of subrs length (optional) */
nuclear@0 677
nuclear@0 678 FT_Matrix font_matrix;
nuclear@0 679 FT_Vector font_offset;
nuclear@0 680
nuclear@0 681 FT_Int flex_state;
nuclear@0 682 FT_Int num_flex_vectors;
nuclear@0 683 FT_Vector flex_vectors[7];
nuclear@0 684
nuclear@0 685 PS_Blend blend; /* for multiple master support */
nuclear@0 686
nuclear@0 687 FT_Render_Mode hint_mode;
nuclear@0 688
nuclear@0 689 T1_Decoder_Callback parse_callback;
nuclear@0 690 T1_Decoder_FuncsRec funcs;
nuclear@0 691
nuclear@0 692 FT_Long* buildchar;
nuclear@0 693 FT_UInt len_buildchar;
nuclear@0 694
nuclear@0 695 FT_Bool seac;
nuclear@0 696
nuclear@0 697 } T1_DecoderRec;
nuclear@0 698
nuclear@0 699
nuclear@0 700 /*************************************************************************/
nuclear@0 701 /*************************************************************************/
nuclear@0 702 /***** *****/
nuclear@0 703 /***** AFM PARSER *****/
nuclear@0 704 /***** *****/
nuclear@0 705 /*************************************************************************/
nuclear@0 706 /*************************************************************************/
nuclear@0 707
nuclear@0 708 typedef struct AFM_ParserRec_* AFM_Parser;
nuclear@0 709
nuclear@0 710 typedef struct AFM_Parser_FuncsRec_
nuclear@0 711 {
nuclear@0 712 FT_Error
nuclear@0 713 (*init)( AFM_Parser parser,
nuclear@0 714 FT_Memory memory,
nuclear@0 715 FT_Byte* base,
nuclear@0 716 FT_Byte* limit );
nuclear@0 717
nuclear@0 718 void
nuclear@0 719 (*done)( AFM_Parser parser );
nuclear@0 720
nuclear@0 721 FT_Error
nuclear@0 722 (*parse)( AFM_Parser parser );
nuclear@0 723
nuclear@0 724 } AFM_Parser_FuncsRec;
nuclear@0 725
nuclear@0 726
nuclear@0 727 typedef struct AFM_StreamRec_* AFM_Stream;
nuclear@0 728
nuclear@0 729
nuclear@0 730 /*************************************************************************/
nuclear@0 731 /* */
nuclear@0 732 /* <Struct> */
nuclear@0 733 /* AFM_ParserRec */
nuclear@0 734 /* */
nuclear@0 735 /* <Description> */
nuclear@0 736 /* An AFM_Parser is a parser for the AFM files. */
nuclear@0 737 /* */
nuclear@0 738 /* <Fields> */
nuclear@0 739 /* memory :: The object used for memory operations (alloc and */
nuclear@0 740 /* realloc). */
nuclear@0 741 /* */
nuclear@0 742 /* stream :: This is an opaque object. */
nuclear@0 743 /* */
nuclear@0 744 /* FontInfo :: The result will be stored here. */
nuclear@0 745 /* */
nuclear@0 746 /* get_index :: A user provided function to get a glyph index by its */
nuclear@0 747 /* name. */
nuclear@0 748 /* */
nuclear@0 749 typedef struct AFM_ParserRec_
nuclear@0 750 {
nuclear@0 751 FT_Memory memory;
nuclear@0 752 AFM_Stream stream;
nuclear@0 753
nuclear@0 754 AFM_FontInfo FontInfo;
nuclear@0 755
nuclear@0 756 FT_Int
nuclear@0 757 (*get_index)( const char* name,
nuclear@0 758 FT_Offset len,
nuclear@0 759 void* user_data );
nuclear@0 760
nuclear@0 761 void* user_data;
nuclear@0 762
nuclear@0 763 } AFM_ParserRec;
nuclear@0 764
nuclear@0 765
nuclear@0 766 /*************************************************************************/
nuclear@0 767 /*************************************************************************/
nuclear@0 768 /***** *****/
nuclear@0 769 /***** TYPE1 CHARMAPS *****/
nuclear@0 770 /***** *****/
nuclear@0 771 /*************************************************************************/
nuclear@0 772 /*************************************************************************/
nuclear@0 773
nuclear@0 774 typedef const struct T1_CMap_ClassesRec_* T1_CMap_Classes;
nuclear@0 775
nuclear@0 776 typedef struct T1_CMap_ClassesRec_
nuclear@0 777 {
nuclear@0 778 FT_CMap_Class standard;
nuclear@0 779 FT_CMap_Class expert;
nuclear@0 780 FT_CMap_Class custom;
nuclear@0 781 FT_CMap_Class unicode;
nuclear@0 782
nuclear@0 783 } T1_CMap_ClassesRec;
nuclear@0 784
nuclear@0 785
nuclear@0 786 /*************************************************************************/
nuclear@0 787 /*************************************************************************/
nuclear@0 788 /***** *****/
nuclear@0 789 /***** PSAux Module Interface *****/
nuclear@0 790 /***** *****/
nuclear@0 791 /*************************************************************************/
nuclear@0 792 /*************************************************************************/
nuclear@0 793
nuclear@0 794 typedef struct PSAux_ServiceRec_
nuclear@0 795 {
nuclear@0 796 /* don't use `PS_Table_Funcs' and friends to avoid compiler warnings */
nuclear@0 797 const PS_Table_FuncsRec* ps_table_funcs;
nuclear@0 798 const PS_Parser_FuncsRec* ps_parser_funcs;
nuclear@0 799 const T1_Builder_FuncsRec* t1_builder_funcs;
nuclear@0 800 const T1_Decoder_FuncsRec* t1_decoder_funcs;
nuclear@0 801
nuclear@0 802 void
nuclear@0 803 (*t1_decrypt)( FT_Byte* buffer,
nuclear@0 804 FT_Offset length,
nuclear@0 805 FT_UShort seed );
nuclear@0 806
nuclear@0 807 T1_CMap_Classes t1_cmap_classes;
nuclear@0 808
nuclear@0 809 /* fields after this comment line were added after version 2.1.10 */
nuclear@0 810 const AFM_Parser_FuncsRec* afm_parser_funcs;
nuclear@0 811
nuclear@0 812 } PSAux_ServiceRec, *PSAux_Service;
nuclear@0 813
nuclear@0 814 /* backwards-compatible type definition */
nuclear@0 815 typedef PSAux_ServiceRec PSAux_Interface;
nuclear@0 816
nuclear@0 817
nuclear@0 818 /*************************************************************************/
nuclear@0 819 /*************************************************************************/
nuclear@0 820 /***** *****/
nuclear@0 821 /***** Some convenience functions *****/
nuclear@0 822 /***** *****/
nuclear@0 823 /*************************************************************************/
nuclear@0 824 /*************************************************************************/
nuclear@0 825
nuclear@0 826 #define IS_PS_NEWLINE( ch ) \
nuclear@0 827 ( (ch) == '\r' || \
nuclear@0 828 (ch) == '\n' )
nuclear@0 829
nuclear@0 830 #define IS_PS_SPACE( ch ) \
nuclear@0 831 ( (ch) == ' ' || \
nuclear@0 832 IS_PS_NEWLINE( ch ) || \
nuclear@0 833 (ch) == '\t' || \
nuclear@0 834 (ch) == '\f' || \
nuclear@0 835 (ch) == '\0' )
nuclear@0 836
nuclear@0 837 #define IS_PS_SPECIAL( ch ) \
nuclear@0 838 ( (ch) == '/' || \
nuclear@0 839 (ch) == '(' || (ch) == ')' || \
nuclear@0 840 (ch) == '<' || (ch) == '>' || \
nuclear@0 841 (ch) == '[' || (ch) == ']' || \
nuclear@0 842 (ch) == '{' || (ch) == '}' || \
nuclear@0 843 (ch) == '%' )
nuclear@0 844
nuclear@0 845 #define IS_PS_DELIM( ch ) \
nuclear@0 846 ( IS_PS_SPACE( ch ) || \
nuclear@0 847 IS_PS_SPECIAL( ch ) )
nuclear@0 848
nuclear@0 849 #define IS_PS_DIGIT( ch ) \
nuclear@0 850 ( (ch) >= '0' && (ch) <= '9' )
nuclear@0 851
nuclear@0 852 #define IS_PS_XDIGIT( ch ) \
nuclear@0 853 ( IS_PS_DIGIT( ch ) || \
nuclear@0 854 ( (ch) >= 'A' && (ch) <= 'F' ) || \
nuclear@0 855 ( (ch) >= 'a' && (ch) <= 'f' ) )
nuclear@0 856
nuclear@0 857 #define IS_PS_BASE85( ch ) \
nuclear@0 858 ( (ch) >= '!' && (ch) <= 'u' )
nuclear@0 859
nuclear@0 860 #define IS_PS_TOKEN( cur, limit, token ) \
nuclear@0 861 ( (char)(cur)[0] == (token)[0] && \
nuclear@0 862 ( (cur) + sizeof ( (token) ) == (limit) || \
nuclear@0 863 ( (cur) + sizeof( (token) ) < (limit) && \
nuclear@0 864 IS_PS_DELIM( (cur)[sizeof ( (token) ) - 1] ) ) ) && \
nuclear@0 865 ft_strncmp( (char*)(cur), (token), sizeof ( (token) ) - 1 ) == 0 )
nuclear@0 866
nuclear@0 867
nuclear@0 868 FT_END_HEADER
nuclear@0 869
nuclear@0 870 #endif /* __PSAUX_H__ */
nuclear@0 871
nuclear@0 872
nuclear@0 873 /* END */