vrshoot

annotate libs/ft2static/freetype/internal/sfnt.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 /* sfnt.h */
nuclear@0 4 /* */
nuclear@0 5 /* High-level `sfnt' driver interface (specification). */
nuclear@0 6 /* */
nuclear@0 7 /* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by */
nuclear@0 8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
nuclear@0 9 /* */
nuclear@0 10 /* This file is part of the FreeType project, and may only be used, */
nuclear@0 11 /* modified, and distributed under the terms of the FreeType project */
nuclear@0 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
nuclear@0 13 /* this file you indicate that you have read the license and */
nuclear@0 14 /* understand and accept it fully. */
nuclear@0 15 /* */
nuclear@0 16 /***************************************************************************/
nuclear@0 17
nuclear@0 18
nuclear@0 19 #ifndef __SFNT_H__
nuclear@0 20 #define __SFNT_H__
nuclear@0 21
nuclear@0 22
nuclear@0 23 #include <ft2build.h>
nuclear@0 24 #include FT_INTERNAL_DRIVER_H
nuclear@0 25 #include FT_INTERNAL_TRUETYPE_TYPES_H
nuclear@0 26
nuclear@0 27
nuclear@0 28 FT_BEGIN_HEADER
nuclear@0 29
nuclear@0 30
nuclear@0 31 /*************************************************************************/
nuclear@0 32 /* */
nuclear@0 33 /* <FuncType> */
nuclear@0 34 /* TT_Init_Face_Func */
nuclear@0 35 /* */
nuclear@0 36 /* <Description> */
nuclear@0 37 /* First part of the SFNT face object initialization. This finds */
nuclear@0 38 /* the face in a SFNT file or collection, and load its format tag in */
nuclear@0 39 /* face->format_tag. */
nuclear@0 40 /* */
nuclear@0 41 /* <Input> */
nuclear@0 42 /* stream :: The input stream. */
nuclear@0 43 /* */
nuclear@0 44 /* face :: A handle to the target face object. */
nuclear@0 45 /* */
nuclear@0 46 /* face_index :: The index of the TrueType font, if we are opening a */
nuclear@0 47 /* collection. */
nuclear@0 48 /* */
nuclear@0 49 /* num_params :: The number of additional parameters. */
nuclear@0 50 /* */
nuclear@0 51 /* params :: Optional additional parameters. */
nuclear@0 52 /* */
nuclear@0 53 /* <Return> */
nuclear@0 54 /* FreeType error code. 0 means success. */
nuclear@0 55 /* */
nuclear@0 56 /* <Note> */
nuclear@0 57 /* The stream cursor must be at the font file's origin. */
nuclear@0 58 /* */
nuclear@0 59 /* This function recognizes fonts embedded in a `TrueType */
nuclear@0 60 /* collection'. */
nuclear@0 61 /* */
nuclear@0 62 /* Once the format tag has been validated by the font driver, it */
nuclear@0 63 /* should then call the TT_Load_Face_Func() callback to read the rest */
nuclear@0 64 /* of the SFNT tables in the object. */
nuclear@0 65 /* */
nuclear@0 66 typedef FT_Error
nuclear@0 67 (*TT_Init_Face_Func)( FT_Stream stream,
nuclear@0 68 TT_Face face,
nuclear@0 69 FT_Int face_index,
nuclear@0 70 FT_Int num_params,
nuclear@0 71 FT_Parameter* params );
nuclear@0 72
nuclear@0 73
nuclear@0 74 /*************************************************************************/
nuclear@0 75 /* */
nuclear@0 76 /* <FuncType> */
nuclear@0 77 /* TT_Load_Face_Func */
nuclear@0 78 /* */
nuclear@0 79 /* <Description> */
nuclear@0 80 /* Second part of the SFNT face object initialization. This loads */
nuclear@0 81 /* the common SFNT tables (head, OS/2, maxp, metrics, etc.) in the */
nuclear@0 82 /* face object. */
nuclear@0 83 /* */
nuclear@0 84 /* <Input> */
nuclear@0 85 /* stream :: The input stream. */
nuclear@0 86 /* */
nuclear@0 87 /* face :: A handle to the target face object. */
nuclear@0 88 /* */
nuclear@0 89 /* face_index :: The index of the TrueType font, if we are opening a */
nuclear@0 90 /* collection. */
nuclear@0 91 /* */
nuclear@0 92 /* num_params :: The number of additional parameters. */
nuclear@0 93 /* */
nuclear@0 94 /* params :: Optional additional parameters. */
nuclear@0 95 /* */
nuclear@0 96 /* <Return> */
nuclear@0 97 /* FreeType error code. 0 means success. */
nuclear@0 98 /* */
nuclear@0 99 /* <Note> */
nuclear@0 100 /* This function must be called after TT_Init_Face_Func(). */
nuclear@0 101 /* */
nuclear@0 102 typedef FT_Error
nuclear@0 103 (*TT_Load_Face_Func)( FT_Stream stream,
nuclear@0 104 TT_Face face,
nuclear@0 105 FT_Int face_index,
nuclear@0 106 FT_Int num_params,
nuclear@0 107 FT_Parameter* params );
nuclear@0 108
nuclear@0 109
nuclear@0 110 /*************************************************************************/
nuclear@0 111 /* */
nuclear@0 112 /* <FuncType> */
nuclear@0 113 /* TT_Done_Face_Func */
nuclear@0 114 /* */
nuclear@0 115 /* <Description> */
nuclear@0 116 /* A callback used to delete the common SFNT data from a face. */
nuclear@0 117 /* */
nuclear@0 118 /* <Input> */
nuclear@0 119 /* face :: A handle to the target face object. */
nuclear@0 120 /* */
nuclear@0 121 /* <Note> */
nuclear@0 122 /* This function does NOT destroy the face object. */
nuclear@0 123 /* */
nuclear@0 124 typedef void
nuclear@0 125 (*TT_Done_Face_Func)( TT_Face face );
nuclear@0 126
nuclear@0 127
nuclear@0 128 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
nuclear@0 129
nuclear@0 130 /*************************************************************************/
nuclear@0 131 /* */
nuclear@0 132 /* <FuncType> */
nuclear@0 133 /* TT_Load_SFNT_HeaderRec_Func */
nuclear@0 134 /* */
nuclear@0 135 /* <Description> */
nuclear@0 136 /* Loads the header of a SFNT font file. Supports collections. */
nuclear@0 137 /* */
nuclear@0 138 /* <Input> */
nuclear@0 139 /* face :: A handle to the target face object. */
nuclear@0 140 /* */
nuclear@0 141 /* stream :: The input stream. */
nuclear@0 142 /* */
nuclear@0 143 /* face_index :: The index of the TrueType font, if we are opening a */
nuclear@0 144 /* collection. */
nuclear@0 145 /* */
nuclear@0 146 /* <Output> */
nuclear@0 147 /* sfnt :: The SFNT header. */
nuclear@0 148 /* */
nuclear@0 149 /* <Return> */
nuclear@0 150 /* FreeType error code. 0 means success. */
nuclear@0 151 /* */
nuclear@0 152 /* <Note> */
nuclear@0 153 /* The stream cursor must be at the font file's origin. */
nuclear@0 154 /* */
nuclear@0 155 /* This function recognizes fonts embedded in a `TrueType */
nuclear@0 156 /* collection'. */
nuclear@0 157 /* */
nuclear@0 158 /* This function checks that the header is valid by looking at the */
nuclear@0 159 /* values of `search_range', `entry_selector', and `range_shift'. */
nuclear@0 160 /* */
nuclear@0 161 typedef FT_Error
nuclear@0 162 (*TT_Load_SFNT_HeaderRec_Func)( TT_Face face,
nuclear@0 163 FT_Stream stream,
nuclear@0 164 FT_Long face_index,
nuclear@0 165 SFNT_Header sfnt );
nuclear@0 166
nuclear@0 167
nuclear@0 168 /*************************************************************************/
nuclear@0 169 /* */
nuclear@0 170 /* <FuncType> */
nuclear@0 171 /* TT_Load_Directory_Func */
nuclear@0 172 /* */
nuclear@0 173 /* <Description> */
nuclear@0 174 /* Loads the table directory into a face object. */
nuclear@0 175 /* */
nuclear@0 176 /* <Input> */
nuclear@0 177 /* face :: A handle to the target face object. */
nuclear@0 178 /* */
nuclear@0 179 /* stream :: The input stream. */
nuclear@0 180 /* */
nuclear@0 181 /* sfnt :: The SFNT header. */
nuclear@0 182 /* */
nuclear@0 183 /* <Return> */
nuclear@0 184 /* FreeType error code. 0 means success. */
nuclear@0 185 /* */
nuclear@0 186 /* <Note> */
nuclear@0 187 /* The stream cursor must be on the first byte after the 4-byte font */
nuclear@0 188 /* format tag. This is the case just after a call to */
nuclear@0 189 /* TT_Load_Format_Tag(). */
nuclear@0 190 /* */
nuclear@0 191 typedef FT_Error
nuclear@0 192 (*TT_Load_Directory_Func)( TT_Face face,
nuclear@0 193 FT_Stream stream,
nuclear@0 194 SFNT_Header sfnt );
nuclear@0 195
nuclear@0 196 #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
nuclear@0 197
nuclear@0 198
nuclear@0 199 /*************************************************************************/
nuclear@0 200 /* */
nuclear@0 201 /* <FuncType> */
nuclear@0 202 /* TT_Load_Any_Func */
nuclear@0 203 /* */
nuclear@0 204 /* <Description> */
nuclear@0 205 /* Load any font table into client memory. */
nuclear@0 206 /* */
nuclear@0 207 /* <Input> */
nuclear@0 208 /* face :: The face object to look for. */
nuclear@0 209 /* */
nuclear@0 210 /* tag :: The tag of table to load. Use the value 0 if you want */
nuclear@0 211 /* to access the whole font file, else set this parameter */
nuclear@0 212 /* to a valid TrueType table tag that you can forge with */
nuclear@0 213 /* the MAKE_TT_TAG macro. */
nuclear@0 214 /* */
nuclear@0 215 /* offset :: The starting offset in the table (or the file if */
nuclear@0 216 /* tag == 0). */
nuclear@0 217 /* */
nuclear@0 218 /* length :: The address of the decision variable: */
nuclear@0 219 /* */
nuclear@0 220 /* If length == NULL: */
nuclear@0 221 /* Loads the whole table. Returns an error if */
nuclear@0 222 /* `offset' == 0! */
nuclear@0 223 /* */
nuclear@0 224 /* If *length == 0: */
nuclear@0 225 /* Exits immediately; returning the length of the given */
nuclear@0 226 /* table or of the font file, depending on the value of */
nuclear@0 227 /* `tag'. */
nuclear@0 228 /* */
nuclear@0 229 /* If *length != 0: */
nuclear@0 230 /* Loads the next `length' bytes of table or font, */
nuclear@0 231 /* starting at offset `offset' (in table or font too). */
nuclear@0 232 /* */
nuclear@0 233 /* <Output> */
nuclear@0 234 /* buffer :: The address of target buffer. */
nuclear@0 235 /* */
nuclear@0 236 /* <Return> */
nuclear@0 237 /* TrueType error code. 0 means success. */
nuclear@0 238 /* */
nuclear@0 239 typedef FT_Error
nuclear@0 240 (*TT_Load_Any_Func)( TT_Face face,
nuclear@0 241 FT_ULong tag,
nuclear@0 242 FT_Long offset,
nuclear@0 243 FT_Byte *buffer,
nuclear@0 244 FT_ULong* length );
nuclear@0 245
nuclear@0 246
nuclear@0 247 /*************************************************************************/
nuclear@0 248 /* */
nuclear@0 249 /* <FuncType> */
nuclear@0 250 /* TT_Find_SBit_Image_Func */
nuclear@0 251 /* */
nuclear@0 252 /* <Description> */
nuclear@0 253 /* Check whether an embedded bitmap (an `sbit') exists for a given */
nuclear@0 254 /* glyph, at a given strike. */
nuclear@0 255 /* */
nuclear@0 256 /* <Input> */
nuclear@0 257 /* face :: The target face object. */
nuclear@0 258 /* */
nuclear@0 259 /* glyph_index :: The glyph index. */
nuclear@0 260 /* */
nuclear@0 261 /* strike_index :: The current strike index. */
nuclear@0 262 /* */
nuclear@0 263 /* <Output> */
nuclear@0 264 /* arange :: The SBit range containing the glyph index. */
nuclear@0 265 /* */
nuclear@0 266 /* astrike :: The SBit strike containing the glyph index. */
nuclear@0 267 /* */
nuclear@0 268 /* aglyph_offset :: The offset of the glyph data in `EBDT' table. */
nuclear@0 269 /* */
nuclear@0 270 /* <Return> */
nuclear@0 271 /* FreeType error code. 0 means success. Returns */
nuclear@0 272 /* SFNT_Err_Invalid_Argument if no sbit exists for the requested */
nuclear@0 273 /* glyph. */
nuclear@0 274 /* */
nuclear@0 275 typedef FT_Error
nuclear@0 276 (*TT_Find_SBit_Image_Func)( TT_Face face,
nuclear@0 277 FT_UInt glyph_index,
nuclear@0 278 FT_ULong strike_index,
nuclear@0 279 TT_SBit_Range *arange,
nuclear@0 280 TT_SBit_Strike *astrike,
nuclear@0 281 FT_ULong *aglyph_offset );
nuclear@0 282
nuclear@0 283
nuclear@0 284 /*************************************************************************/
nuclear@0 285 /* */
nuclear@0 286 /* <FuncType> */
nuclear@0 287 /* TT_Load_SBit_Metrics_Func */
nuclear@0 288 /* */
nuclear@0 289 /* <Description> */
nuclear@0 290 /* Get the big metrics for a given embedded bitmap. */
nuclear@0 291 /* */
nuclear@0 292 /* <Input> */
nuclear@0 293 /* stream :: The input stream. */
nuclear@0 294 /* */
nuclear@0 295 /* range :: The SBit range containing the glyph. */
nuclear@0 296 /* */
nuclear@0 297 /* <Output> */
nuclear@0 298 /* big_metrics :: A big SBit metrics structure for the glyph. */
nuclear@0 299 /* */
nuclear@0 300 /* <Return> */
nuclear@0 301 /* FreeType error code. 0 means success. */
nuclear@0 302 /* */
nuclear@0 303 /* <Note> */
nuclear@0 304 /* The stream cursor must be positioned at the glyph's offset within */
nuclear@0 305 /* the `EBDT' table before the call. */
nuclear@0 306 /* */
nuclear@0 307 /* If the image format uses variable metrics, the stream cursor is */
nuclear@0 308 /* positioned just after the metrics header in the `EBDT' table on */
nuclear@0 309 /* function exit. */
nuclear@0 310 /* */
nuclear@0 311 typedef FT_Error
nuclear@0 312 (*TT_Load_SBit_Metrics_Func)( FT_Stream stream,
nuclear@0 313 TT_SBit_Range range,
nuclear@0 314 TT_SBit_Metrics metrics );
nuclear@0 315
nuclear@0 316
nuclear@0 317 /*************************************************************************/
nuclear@0 318 /* */
nuclear@0 319 /* <FuncType> */
nuclear@0 320 /* TT_Load_SBit_Image_Func */
nuclear@0 321 /* */
nuclear@0 322 /* <Description> */
nuclear@0 323 /* Load a given glyph sbit image from the font resource. This also */
nuclear@0 324 /* returns its metrics. */
nuclear@0 325 /* */
nuclear@0 326 /* <Input> */
nuclear@0 327 /* face :: */
nuclear@0 328 /* The target face object. */
nuclear@0 329 /* */
nuclear@0 330 /* strike_index :: */
nuclear@0 331 /* The strike index. */
nuclear@0 332 /* */
nuclear@0 333 /* glyph_index :: */
nuclear@0 334 /* The current glyph index. */
nuclear@0 335 /* */
nuclear@0 336 /* load_flags :: */
nuclear@0 337 /* The current load flags. */
nuclear@0 338 /* */
nuclear@0 339 /* stream :: */
nuclear@0 340 /* The input stream. */
nuclear@0 341 /* */
nuclear@0 342 /* <Output> */
nuclear@0 343 /* amap :: */
nuclear@0 344 /* The target pixmap. */
nuclear@0 345 /* */
nuclear@0 346 /* ametrics :: */
nuclear@0 347 /* A big sbit metrics structure for the glyph image. */
nuclear@0 348 /* */
nuclear@0 349 /* <Return> */
nuclear@0 350 /* FreeType error code. 0 means success. Returns an error if no */
nuclear@0 351 /* glyph sbit exists for the index. */
nuclear@0 352 /* */
nuclear@0 353 /* <Note> */
nuclear@0 354 /* The `map.buffer' field is always freed before the glyph is loaded. */
nuclear@0 355 /* */
nuclear@0 356 typedef FT_Error
nuclear@0 357 (*TT_Load_SBit_Image_Func)( TT_Face face,
nuclear@0 358 FT_ULong strike_index,
nuclear@0 359 FT_UInt glyph_index,
nuclear@0 360 FT_UInt load_flags,
nuclear@0 361 FT_Stream stream,
nuclear@0 362 FT_Bitmap *amap,
nuclear@0 363 TT_SBit_MetricsRec *ametrics );
nuclear@0 364
nuclear@0 365
nuclear@0 366 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
nuclear@0 367
nuclear@0 368 /*************************************************************************/
nuclear@0 369 /* */
nuclear@0 370 /* <FuncType> */
nuclear@0 371 /* TT_Set_SBit_Strike_OldFunc */
nuclear@0 372 /* */
nuclear@0 373 /* <Description> */
nuclear@0 374 /* Select an sbit strike for a given size request. */
nuclear@0 375 /* */
nuclear@0 376 /* <Input> */
nuclear@0 377 /* face :: The target face object. */
nuclear@0 378 /* */
nuclear@0 379 /* req :: The size request. */
nuclear@0 380 /* */
nuclear@0 381 /* <Output> */
nuclear@0 382 /* astrike_index :: The index of the sbit strike. */
nuclear@0 383 /* */
nuclear@0 384 /* <Return> */
nuclear@0 385 /* FreeType error code. 0 means success. Returns an error if no */
nuclear@0 386 /* sbit strike exists for the selected ppem values. */
nuclear@0 387 /* */
nuclear@0 388 typedef FT_Error
nuclear@0 389 (*TT_Set_SBit_Strike_OldFunc)( TT_Face face,
nuclear@0 390 FT_UInt x_ppem,
nuclear@0 391 FT_UInt y_ppem,
nuclear@0 392 FT_ULong* astrike_index );
nuclear@0 393
nuclear@0 394
nuclear@0 395 /*************************************************************************/
nuclear@0 396 /* */
nuclear@0 397 /* <FuncType> */
nuclear@0 398 /* TT_CharMap_Load_Func */
nuclear@0 399 /* */
nuclear@0 400 /* <Description> */
nuclear@0 401 /* Loads a given TrueType character map into memory. */
nuclear@0 402 /* */
nuclear@0 403 /* <Input> */
nuclear@0 404 /* face :: A handle to the parent face object. */
nuclear@0 405 /* */
nuclear@0 406 /* stream :: A handle to the current stream object. */
nuclear@0 407 /* */
nuclear@0 408 /* <InOut> */
nuclear@0 409 /* cmap :: A pointer to a cmap object. */
nuclear@0 410 /* */
nuclear@0 411 /* <Return> */
nuclear@0 412 /* FreeType error code. 0 means success. */
nuclear@0 413 /* */
nuclear@0 414 /* <Note> */
nuclear@0 415 /* The function assumes that the stream is already in use (i.e., */
nuclear@0 416 /* opened). In case of error, all partially allocated tables are */
nuclear@0 417 /* released. */
nuclear@0 418 /* */
nuclear@0 419 typedef FT_Error
nuclear@0 420 (*TT_CharMap_Load_Func)( TT_Face face,
nuclear@0 421 void* cmap,
nuclear@0 422 FT_Stream input );
nuclear@0 423
nuclear@0 424
nuclear@0 425 /*************************************************************************/
nuclear@0 426 /* */
nuclear@0 427 /* <FuncType> */
nuclear@0 428 /* TT_CharMap_Free_Func */
nuclear@0 429 /* */
nuclear@0 430 /* <Description> */
nuclear@0 431 /* Destroys a character mapping table. */
nuclear@0 432 /* */
nuclear@0 433 /* <Input> */
nuclear@0 434 /* face :: A handle to the parent face object. */
nuclear@0 435 /* */
nuclear@0 436 /* cmap :: A handle to a cmap object. */
nuclear@0 437 /* */
nuclear@0 438 /* <Return> */
nuclear@0 439 /* FreeType error code. 0 means success. */
nuclear@0 440 /* */
nuclear@0 441 typedef FT_Error
nuclear@0 442 (*TT_CharMap_Free_Func)( TT_Face face,
nuclear@0 443 void* cmap );
nuclear@0 444
nuclear@0 445 #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
nuclear@0 446
nuclear@0 447
nuclear@0 448 /*************************************************************************/
nuclear@0 449 /* */
nuclear@0 450 /* <FuncType> */
nuclear@0 451 /* TT_Set_SBit_Strike_Func */
nuclear@0 452 /* */
nuclear@0 453 /* <Description> */
nuclear@0 454 /* Select an sbit strike for a given size request. */
nuclear@0 455 /* */
nuclear@0 456 /* <Input> */
nuclear@0 457 /* face :: The target face object. */
nuclear@0 458 /* */
nuclear@0 459 /* req :: The size request. */
nuclear@0 460 /* */
nuclear@0 461 /* <Output> */
nuclear@0 462 /* astrike_index :: The index of the sbit strike. */
nuclear@0 463 /* */
nuclear@0 464 /* <Return> */
nuclear@0 465 /* FreeType error code. 0 means success. Returns an error if no */
nuclear@0 466 /* sbit strike exists for the selected ppem values. */
nuclear@0 467 /* */
nuclear@0 468 typedef FT_Error
nuclear@0 469 (*TT_Set_SBit_Strike_Func)( TT_Face face,
nuclear@0 470 FT_Size_Request req,
nuclear@0 471 FT_ULong* astrike_index );
nuclear@0 472
nuclear@0 473
nuclear@0 474 /*************************************************************************/
nuclear@0 475 /* */
nuclear@0 476 /* <FuncType> */
nuclear@0 477 /* TT_Load_Strike_Metrics_Func */
nuclear@0 478 /* */
nuclear@0 479 /* <Description> */
nuclear@0 480 /* Load the metrics of a given strike. */
nuclear@0 481 /* */
nuclear@0 482 /* <Input> */
nuclear@0 483 /* face :: The target face object. */
nuclear@0 484 /* */
nuclear@0 485 /* strike_index :: The strike index. */
nuclear@0 486 /* */
nuclear@0 487 /* <Output> */
nuclear@0 488 /* metrics :: the metrics of the strike. */
nuclear@0 489 /* */
nuclear@0 490 /* <Return> */
nuclear@0 491 /* FreeType error code. 0 means success. Returns an error if no */
nuclear@0 492 /* such sbit strike exists. */
nuclear@0 493 /* */
nuclear@0 494 typedef FT_Error
nuclear@0 495 (*TT_Load_Strike_Metrics_Func)( TT_Face face,
nuclear@0 496 FT_ULong strike_index,
nuclear@0 497 FT_Size_Metrics* metrics );
nuclear@0 498
nuclear@0 499
nuclear@0 500 /*************************************************************************/
nuclear@0 501 /* */
nuclear@0 502 /* <FuncType> */
nuclear@0 503 /* TT_Get_PS_Name_Func */
nuclear@0 504 /* */
nuclear@0 505 /* <Description> */
nuclear@0 506 /* Get the PostScript glyph name of a glyph. */
nuclear@0 507 /* */
nuclear@0 508 /* <Input> */
nuclear@0 509 /* idx :: The glyph index. */
nuclear@0 510 /* */
nuclear@0 511 /* PSname :: The address of a string pointer. Will be NULL in case */
nuclear@0 512 /* of error, otherwise it is a pointer to the glyph name. */
nuclear@0 513 /* */
nuclear@0 514 /* You must not modify the returned string! */
nuclear@0 515 /* */
nuclear@0 516 /* <Output> */
nuclear@0 517 /* FreeType error code. 0 means success. */
nuclear@0 518 /* */
nuclear@0 519 typedef FT_Error
nuclear@0 520 (*TT_Get_PS_Name_Func)( TT_Face face,
nuclear@0 521 FT_UInt idx,
nuclear@0 522 FT_String** PSname );
nuclear@0 523
nuclear@0 524
nuclear@0 525 /*************************************************************************/
nuclear@0 526 /* */
nuclear@0 527 /* <FuncType> */
nuclear@0 528 /* TT_Load_Metrics_Func */
nuclear@0 529 /* */
nuclear@0 530 /* <Description> */
nuclear@0 531 /* Load a metrics table, which is a table with a horizontal and a */
nuclear@0 532 /* vertical version. */
nuclear@0 533 /* */
nuclear@0 534 /* <Input> */
nuclear@0 535 /* face :: A handle to the target face object. */
nuclear@0 536 /* */
nuclear@0 537 /* stream :: The input stream. */
nuclear@0 538 /* */
nuclear@0 539 /* vertical :: A boolean flag. If set, load the vertical one. */
nuclear@0 540 /* */
nuclear@0 541 /* <Return> */
nuclear@0 542 /* FreeType error code. 0 means success. */
nuclear@0 543 /* */
nuclear@0 544 typedef FT_Error
nuclear@0 545 (*TT_Load_Metrics_Func)( TT_Face face,
nuclear@0 546 FT_Stream stream,
nuclear@0 547 FT_Bool vertical );
nuclear@0 548
nuclear@0 549
nuclear@0 550 /*************************************************************************/
nuclear@0 551 /* */
nuclear@0 552 /* <FuncType> */
nuclear@0 553 /* TT_Get_Metrics_Func */
nuclear@0 554 /* */
nuclear@0 555 /* <Description> */
nuclear@0 556 /* Load the horizontal or vertical header in a face object. */
nuclear@0 557 /* */
nuclear@0 558 /* <Input> */
nuclear@0 559 /* face :: A handle to the target face object. */
nuclear@0 560 /* */
nuclear@0 561 /* stream :: The input stream. */
nuclear@0 562 /* */
nuclear@0 563 /* vertical :: A boolean flag. If set, load vertical metrics. */
nuclear@0 564 /* */
nuclear@0 565 /* <Return> */
nuclear@0 566 /* FreeType error code. 0 means success. */
nuclear@0 567 /* */
nuclear@0 568 typedef FT_Error
nuclear@0 569 (*TT_Get_Metrics_Func)( TT_Face face,
nuclear@0 570 FT_Bool vertical,
nuclear@0 571 FT_UInt gindex,
nuclear@0 572 FT_Short* abearing,
nuclear@0 573 FT_UShort* aadvance );
nuclear@0 574
nuclear@0 575
nuclear@0 576 /*************************************************************************/
nuclear@0 577 /* */
nuclear@0 578 /* <FuncType> */
nuclear@0 579 /* TT_Load_Table_Func */
nuclear@0 580 /* */
nuclear@0 581 /* <Description> */
nuclear@0 582 /* Load a given TrueType table. */
nuclear@0 583 /* */
nuclear@0 584 /* <Input> */
nuclear@0 585 /* face :: A handle to the target face object. */
nuclear@0 586 /* */
nuclear@0 587 /* stream :: The input stream. */
nuclear@0 588 /* */
nuclear@0 589 /* <Return> */
nuclear@0 590 /* FreeType error code. 0 means success. */
nuclear@0 591 /* */
nuclear@0 592 /* <Note> */
nuclear@0 593 /* The function uses `face->goto_table' to seek the stream to the */
nuclear@0 594 /* start of the table, except while loading the font directory. */
nuclear@0 595 /* */
nuclear@0 596 typedef FT_Error
nuclear@0 597 (*TT_Load_Table_Func)( TT_Face face,
nuclear@0 598 FT_Stream stream );
nuclear@0 599
nuclear@0 600
nuclear@0 601 /*************************************************************************/
nuclear@0 602 /* */
nuclear@0 603 /* <FuncType> */
nuclear@0 604 /* TT_Free_Table_Func */
nuclear@0 605 /* */
nuclear@0 606 /* <Description> */
nuclear@0 607 /* Free a given TrueType table. */
nuclear@0 608 /* */
nuclear@0 609 /* <Input> */
nuclear@0 610 /* face :: A handle to the target face object. */
nuclear@0 611 /* */
nuclear@0 612 typedef void
nuclear@0 613 (*TT_Free_Table_Func)( TT_Face face );
nuclear@0 614
nuclear@0 615
nuclear@0 616 /*
nuclear@0 617 * @functype:
nuclear@0 618 * TT_Face_GetKerningFunc
nuclear@0 619 *
nuclear@0 620 * @description:
nuclear@0 621 * Return the horizontal kerning value between two glyphs.
nuclear@0 622 *
nuclear@0 623 * @input:
nuclear@0 624 * face :: A handle to the source face object.
nuclear@0 625 * left_glyph :: The left glyph index.
nuclear@0 626 * right_glyph :: The right glyph index.
nuclear@0 627 *
nuclear@0 628 * @return:
nuclear@0 629 * The kerning value in font units.
nuclear@0 630 */
nuclear@0 631 typedef FT_Int
nuclear@0 632 (*TT_Face_GetKerningFunc)( TT_Face face,
nuclear@0 633 FT_UInt left_glyph,
nuclear@0 634 FT_UInt right_glyph );
nuclear@0 635
nuclear@0 636
nuclear@0 637 /*************************************************************************/
nuclear@0 638 /* */
nuclear@0 639 /* <Struct> */
nuclear@0 640 /* SFNT_Interface */
nuclear@0 641 /* */
nuclear@0 642 /* <Description> */
nuclear@0 643 /* This structure holds pointers to the functions used to load and */
nuclear@0 644 /* free the basic tables that are required in a `sfnt' font file. */
nuclear@0 645 /* */
nuclear@0 646 /* <Fields> */
nuclear@0 647 /* Check the various xxx_Func() descriptions for details. */
nuclear@0 648 /* */
nuclear@0 649 typedef struct SFNT_Interface_
nuclear@0 650 {
nuclear@0 651 TT_Loader_GotoTableFunc goto_table;
nuclear@0 652
nuclear@0 653 TT_Init_Face_Func init_face;
nuclear@0 654 TT_Load_Face_Func load_face;
nuclear@0 655 TT_Done_Face_Func done_face;
nuclear@0 656 FT_Module_Requester get_interface;
nuclear@0 657
nuclear@0 658 TT_Load_Any_Func load_any;
nuclear@0 659
nuclear@0 660 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
nuclear@0 661 TT_Load_SFNT_HeaderRec_Func load_sfnt_header;
nuclear@0 662 TT_Load_Directory_Func load_directory;
nuclear@0 663 #endif
nuclear@0 664
nuclear@0 665 /* these functions are called by `load_face' but they can also */
nuclear@0 666 /* be called from external modules, if there is a need to do so */
nuclear@0 667 TT_Load_Table_Func load_head;
nuclear@0 668 TT_Load_Metrics_Func load_hhea;
nuclear@0 669 TT_Load_Table_Func load_cmap;
nuclear@0 670 TT_Load_Table_Func load_maxp;
nuclear@0 671 TT_Load_Table_Func load_os2;
nuclear@0 672 TT_Load_Table_Func load_post;
nuclear@0 673
nuclear@0 674 TT_Load_Table_Func load_name;
nuclear@0 675 TT_Free_Table_Func free_name;
nuclear@0 676
nuclear@0 677 /* optional tables */
nuclear@0 678 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
nuclear@0 679 TT_Load_Table_Func load_hdmx_stub;
nuclear@0 680 TT_Free_Table_Func free_hdmx_stub;
nuclear@0 681 #endif
nuclear@0 682
nuclear@0 683 /* this field was called `load_kerning' up to version 2.1.10 */
nuclear@0 684 TT_Load_Table_Func load_kern;
nuclear@0 685
nuclear@0 686 TT_Load_Table_Func load_gasp;
nuclear@0 687 TT_Load_Table_Func load_pclt;
nuclear@0 688
nuclear@0 689 /* see `ttload.h'; this field was called `load_bitmap_header' up to */
nuclear@0 690 /* version 2.1.10 */
nuclear@0 691 TT_Load_Table_Func load_bhed;
nuclear@0 692
nuclear@0 693 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
nuclear@0 694
nuclear@0 695 /* see `ttsbit.h' */
nuclear@0 696 TT_Set_SBit_Strike_OldFunc set_sbit_strike_stub;
nuclear@0 697 TT_Load_Table_Func load_sbits_stub;
nuclear@0 698
nuclear@0 699 /*
nuclear@0 700 * The following two fields appeared in version 2.1.8, and were placed
nuclear@0 701 * between `load_sbits' and `load_sbit_image'. We support them as a
nuclear@0 702 * special exception since they are used by Xfont library within the
nuclear@0 703 * X.Org xserver, and because the probability that other rogue clients
nuclear@0 704 * use the other version 2.1.7 fields below is _extremely_ low.
nuclear@0 705 *
nuclear@0 706 * Note that this forces us to disable an interesting memory-saving
nuclear@0 707 * optimization though...
nuclear@0 708 */
nuclear@0 709
nuclear@0 710 TT_Find_SBit_Image_Func find_sbit_image;
nuclear@0 711 TT_Load_SBit_Metrics_Func load_sbit_metrics;
nuclear@0 712
nuclear@0 713 #endif
nuclear@0 714
nuclear@0 715 TT_Load_SBit_Image_Func load_sbit_image;
nuclear@0 716
nuclear@0 717 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
nuclear@0 718 TT_Free_Table_Func free_sbits_stub;
nuclear@0 719 #endif
nuclear@0 720
nuclear@0 721 /* see `ttpost.h' */
nuclear@0 722 TT_Get_PS_Name_Func get_psname;
nuclear@0 723 TT_Free_Table_Func free_psnames;
nuclear@0 724
nuclear@0 725 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
nuclear@0 726 TT_CharMap_Load_Func load_charmap_stub;
nuclear@0 727 TT_CharMap_Free_Func free_charmap_stub;
nuclear@0 728 #endif
nuclear@0 729
nuclear@0 730 /* starting here, the structure differs from version 2.1.7 */
nuclear@0 731
nuclear@0 732 /* this field was introduced in version 2.1.8, named `get_psname' */
nuclear@0 733 TT_Face_GetKerningFunc get_kerning;
nuclear@0 734
nuclear@0 735 /* new elements introduced after version 2.1.10 */
nuclear@0 736
nuclear@0 737 /* load the font directory, i.e., the offset table and */
nuclear@0 738 /* the table directory */
nuclear@0 739 TT_Load_Table_Func load_font_dir;
nuclear@0 740 TT_Load_Metrics_Func load_hmtx;
nuclear@0 741
nuclear@0 742 TT_Load_Table_Func load_eblc;
nuclear@0 743 TT_Free_Table_Func free_eblc;
nuclear@0 744
nuclear@0 745 TT_Set_SBit_Strike_Func set_sbit_strike;
nuclear@0 746 TT_Load_Strike_Metrics_Func load_strike_metrics;
nuclear@0 747
nuclear@0 748 TT_Get_Metrics_Func get_metrics;
nuclear@0 749
nuclear@0 750 } SFNT_Interface;
nuclear@0 751
nuclear@0 752
nuclear@0 753 /* transitional */
nuclear@0 754 typedef SFNT_Interface* SFNT_Service;
nuclear@0 755
nuclear@0 756 #ifndef FT_CONFIG_OPTION_PIC
nuclear@0 757
nuclear@0 758 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
nuclear@0 759 #define FT_DEFINE_DRIVERS_OLD_INTERNAL(a) \
nuclear@0 760 a,
nuclear@0 761 #else
nuclear@0 762 #define FT_DEFINE_DRIVERS_OLD_INTERNAL(a)
nuclear@0 763 #endif
nuclear@0 764 #define FT_INTERNAL(a) \
nuclear@0 765 a,
nuclear@0 766
nuclear@0 767 #define FT_DEFINE_SFNT_INTERFACE(class_, \
nuclear@0 768 goto_table_, init_face_, load_face_, done_face_, get_interface_, \
nuclear@0 769 load_any_, load_sfnt_header_, load_directory_, load_head_, \
nuclear@0 770 load_hhea_, load_cmap_, load_maxp_, load_os2_, load_post_, \
nuclear@0 771 load_name_, free_name_, load_hdmx_stub_, free_hdmx_stub_, \
nuclear@0 772 load_kern_, load_gasp_, load_pclt_, load_bhed_, \
nuclear@0 773 set_sbit_strike_stub_, load_sbits_stub_, find_sbit_image_, \
nuclear@0 774 load_sbit_metrics_, load_sbit_image_, free_sbits_stub_, \
nuclear@0 775 get_psname_, free_psnames_, load_charmap_stub_, free_charmap_stub_, \
nuclear@0 776 get_kerning_, load_font_dir_, load_hmtx_, load_eblc_, free_eblc_, \
nuclear@0 777 set_sbit_strike_, load_strike_metrics_, get_metrics_ ) \
nuclear@0 778 static const SFNT_Interface class_ = \
nuclear@0 779 { \
nuclear@0 780 FT_INTERNAL(goto_table_) \
nuclear@0 781 FT_INTERNAL(init_face_) \
nuclear@0 782 FT_INTERNAL(load_face_) \
nuclear@0 783 FT_INTERNAL(done_face_) \
nuclear@0 784 FT_INTERNAL(get_interface_) \
nuclear@0 785 FT_INTERNAL(load_any_) \
nuclear@0 786 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sfnt_header_) \
nuclear@0 787 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_directory_) \
nuclear@0 788 FT_INTERNAL(load_head_) \
nuclear@0 789 FT_INTERNAL(load_hhea_) \
nuclear@0 790 FT_INTERNAL(load_cmap_) \
nuclear@0 791 FT_INTERNAL(load_maxp_) \
nuclear@0 792 FT_INTERNAL(load_os2_) \
nuclear@0 793 FT_INTERNAL(load_post_) \
nuclear@0 794 FT_INTERNAL(load_name_) \
nuclear@0 795 FT_INTERNAL(free_name_) \
nuclear@0 796 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_hdmx_stub_) \
nuclear@0 797 FT_DEFINE_DRIVERS_OLD_INTERNAL(free_hdmx_stub_) \
nuclear@0 798 FT_INTERNAL(load_kern_) \
nuclear@0 799 FT_INTERNAL(load_gasp_) \
nuclear@0 800 FT_INTERNAL(load_pclt_) \
nuclear@0 801 FT_INTERNAL(load_bhed_) \
nuclear@0 802 FT_DEFINE_DRIVERS_OLD_INTERNAL(set_sbit_strike_stub_) \
nuclear@0 803 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbits_stub_) \
nuclear@0 804 FT_DEFINE_DRIVERS_OLD_INTERNAL(find_sbit_image_) \
nuclear@0 805 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbit_metrics_) \
nuclear@0 806 FT_INTERNAL(load_sbit_image_) \
nuclear@0 807 FT_DEFINE_DRIVERS_OLD_INTERNAL(free_sbits_stub_) \
nuclear@0 808 FT_INTERNAL(get_psname_) \
nuclear@0 809 FT_INTERNAL(free_psnames_) \
nuclear@0 810 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_charmap_stub_) \
nuclear@0 811 FT_DEFINE_DRIVERS_OLD_INTERNAL(free_charmap_stub_) \
nuclear@0 812 FT_INTERNAL(get_kerning_) \
nuclear@0 813 FT_INTERNAL(load_font_dir_) \
nuclear@0 814 FT_INTERNAL(load_hmtx_) \
nuclear@0 815 FT_INTERNAL(load_eblc_) \
nuclear@0 816 FT_INTERNAL(free_eblc_) \
nuclear@0 817 FT_INTERNAL(set_sbit_strike_) \
nuclear@0 818 FT_INTERNAL(load_strike_metrics_) \
nuclear@0 819 FT_INTERNAL(get_metrics_) \
nuclear@0 820 };
nuclear@0 821
nuclear@0 822 #else /* FT_CONFIG_OPTION_PIC */
nuclear@0 823
nuclear@0 824 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
nuclear@0 825 #define FT_DEFINE_DRIVERS_OLD_INTERNAL(a, a_) \
nuclear@0 826 clazz->a = a_;
nuclear@0 827 #else
nuclear@0 828 #define FT_DEFINE_DRIVERS_OLD_INTERNAL(a, a_)
nuclear@0 829 #endif
nuclear@0 830 #define FT_INTERNAL(a, a_) \
nuclear@0 831 clazz->a = a_;
nuclear@0 832
nuclear@0 833 #define FT_DEFINE_SFNT_INTERFACE(class_, \
nuclear@0 834 goto_table_, init_face_, load_face_, done_face_, get_interface_, \
nuclear@0 835 load_any_, load_sfnt_header_, load_directory_, load_head_, \
nuclear@0 836 load_hhea_, load_cmap_, load_maxp_, load_os2_, load_post_, \
nuclear@0 837 load_name_, free_name_, load_hdmx_stub_, free_hdmx_stub_, \
nuclear@0 838 load_kern_, load_gasp_, load_pclt_, load_bhed_, \
nuclear@0 839 set_sbit_strike_stub_, load_sbits_stub_, find_sbit_image_, \
nuclear@0 840 load_sbit_metrics_, load_sbit_image_, free_sbits_stub_, \
nuclear@0 841 get_psname_, free_psnames_, load_charmap_stub_, free_charmap_stub_, \
nuclear@0 842 get_kerning_, load_font_dir_, load_hmtx_, load_eblc_, free_eblc_, \
nuclear@0 843 set_sbit_strike_, load_strike_metrics_, get_metrics_ ) \
nuclear@0 844 void \
nuclear@0 845 FT_Init_Class_##class_( FT_Library library, SFNT_Interface* clazz ) \
nuclear@0 846 { \
nuclear@0 847 FT_UNUSED(library); \
nuclear@0 848 FT_INTERNAL(goto_table,goto_table_) \
nuclear@0 849 FT_INTERNAL(init_face,init_face_) \
nuclear@0 850 FT_INTERNAL(load_face,load_face_) \
nuclear@0 851 FT_INTERNAL(done_face,done_face_) \
nuclear@0 852 FT_INTERNAL(get_interface,get_interface_) \
nuclear@0 853 FT_INTERNAL(load_any,load_any_) \
nuclear@0 854 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sfnt_header,load_sfnt_header_) \
nuclear@0 855 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_directory,load_directory_) \
nuclear@0 856 FT_INTERNAL(load_head,load_head_) \
nuclear@0 857 FT_INTERNAL(load_hhea,load_hhea_) \
nuclear@0 858 FT_INTERNAL(load_cmap,load_cmap_) \
nuclear@0 859 FT_INTERNAL(load_maxp,load_maxp_) \
nuclear@0 860 FT_INTERNAL(load_os2,load_os2_) \
nuclear@0 861 FT_INTERNAL(load_post,load_post_) \
nuclear@0 862 FT_INTERNAL(load_name,load_name_) \
nuclear@0 863 FT_INTERNAL(free_name,free_name_) \
nuclear@0 864 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_hdmx_stub,load_hdmx_stub_) \
nuclear@0 865 FT_DEFINE_DRIVERS_OLD_INTERNAL(free_hdmx_stub,free_hdmx_stub_) \
nuclear@0 866 FT_INTERNAL(load_kern,load_kern_) \
nuclear@0 867 FT_INTERNAL(load_gasp,load_gasp_) \
nuclear@0 868 FT_INTERNAL(load_pclt,load_pclt_) \
nuclear@0 869 FT_INTERNAL(load_bhed,load_bhed_) \
nuclear@0 870 FT_DEFINE_DRIVERS_OLD_INTERNAL(set_sbit_strike_stub,set_sbit_strike_stub_) \
nuclear@0 871 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbits_stub,load_sbits_stub_) \
nuclear@0 872 FT_DEFINE_DRIVERS_OLD_INTERNAL(find_sbit_image,find_sbit_image_) \
nuclear@0 873 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbit_metrics,load_sbit_metrics_) \
nuclear@0 874 FT_INTERNAL(load_sbit_image,load_sbit_image_) \
nuclear@0 875 FT_DEFINE_DRIVERS_OLD_INTERNAL(free_sbits_stub,free_sbits_stub_) \
nuclear@0 876 FT_INTERNAL(get_psname,get_psname_) \
nuclear@0 877 FT_INTERNAL(free_psnames,free_psnames_) \
nuclear@0 878 FT_DEFINE_DRIVERS_OLD_INTERNAL(load_charmap_stub,load_charmap_stub_) \
nuclear@0 879 FT_DEFINE_DRIVERS_OLD_INTERNAL(free_charmap_stub,free_charmap_stub_) \
nuclear@0 880 FT_INTERNAL(get_kerning,get_kerning_) \
nuclear@0 881 FT_INTERNAL(load_font_dir,load_font_dir_) \
nuclear@0 882 FT_INTERNAL(load_hmtx,load_hmtx_) \
nuclear@0 883 FT_INTERNAL(load_eblc,load_eblc_) \
nuclear@0 884 FT_INTERNAL(free_eblc,free_eblc_) \
nuclear@0 885 FT_INTERNAL(set_sbit_strike,set_sbit_strike_) \
nuclear@0 886 FT_INTERNAL(load_strike_metrics,load_strike_metrics_) \
nuclear@0 887 FT_INTERNAL(get_metrics,get_metrics_) \
nuclear@0 888 }
nuclear@0 889
nuclear@0 890 #endif /* FT_CONFIG_OPTION_PIC */
nuclear@0 891
nuclear@0 892 FT_END_HEADER
nuclear@0 893
nuclear@0 894 #endif /* __SFNT_H__ */
nuclear@0 895
nuclear@0 896
nuclear@0 897 /* END */