1 /***************************************************************************/ 2 /* */ 3 /* ftmodapi.h */ 4 /* */ 5 /* FreeType modules public interface (specification). */ 6 /* */ 7 /* Copyright 1996-2003, 2006, 2008-2010, 2012, 2013 by */ 8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9 /* */ 10 /* This file is part of the FreeType project, and may only be used, */ 11 /* modified, and distributed under the terms of the FreeType project */ 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13 /* this file you indicate that you have read the license and */ 14 /* understand and accept it fully. */ 15 /* */ 16 /***************************************************************************/ 17 18 19 #ifndef __FTMODAPI_H__ 20 #define __FTMODAPI_H__ 21 22 23 #include <ft2build.h> 24 #include FT_FREETYPE_H 25 26 #ifdef FREETYPE_H 27 #error "freetype.h of FreeType 1 has been loaded!" 28 #error "Please fix the directory search order for header files" 29 #error "so that freetype.h of FreeType 2 is found first." 30 #endif 31 32 33 FT_BEGIN_HEADER 34 35 36 /*************************************************************************/ 37 /* */ 38 /* <Section> */ 39 /* module_management */ 40 /* */ 41 /* <Title> */ 42 /* Module Management */ 43 /* */ 44 /* <Abstract> */ 45 /* How to add, upgrade, remove, and control modules from FreeType. */ 46 /* */ 47 /* <Description> */ 48 /* The definitions below are used to manage modules within FreeType. */ 49 /* Modules can be added, upgraded, and removed at runtime. */ 50 /* Additionally, some module properties can be controlled also. */ 51 /* */ 52 /* Here is a list of possible values of the `module_name' field in */ 53 /* the @FT_Module_Class structure. */ 54 /* */ 55 /* { */ 56 /* autofitter */ 57 /* bdf */ 58 /* cff */ 59 /* gxvalid */ 60 /* otvalid */ 61 /* pcf */ 62 /* pfr */ 63 /* psaux */ 64 /* pshinter */ 65 /* psnames */ 66 /* raster1, raster5 */ 67 /* sfnt */ 68 /* smooth, smooth-lcd, smooth-lcdv */ 69 /* truetype */ 70 /* type1 */ 71 /* type42 */ 72 /* t1cid */ 73 /* winfonts */ 74 /* } */ 75 /* */ 76 /* Note that the FreeType Cache sub-system is not a FreeType module. */ 77 /* */ 78 /*************************************************************************/ 79 80 81 /* module bit flags */ 82 #define FT_MODULE_FONT_DRIVER 1 /* this module is a font driver */ 83 #define FT_MODULE_RENDERER 2 /* this module is a renderer */ 84 #define FT_MODULE_HINTER 4 /* this module is a glyph hinter */ 85 #define FT_MODULE_STYLER 8 /* this module is a styler */ 86 87 #define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */ 88 /* scalable fonts */ 89 #define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */ 90 /* support vector outlines */ 91 #define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */ 92 /* own hinter */ 93 94 95 /* deprecated values */ 96 #define ft_module_font_driver FT_MODULE_FONT_DRIVER 97 #define ft_module_renderer FT_MODULE_RENDERER 98 #define ft_module_hinter FT_MODULE_HINTER 99 #define ft_module_styler FT_MODULE_STYLER 100 101 #define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE 102 #define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES 103 #define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER 104 105 106 typedef FT_Pointer FT_Module_Interface; 107 108 109 /*************************************************************************/ 110 /* */ 111 /* <FuncType> */ 112 /* FT_Module_Constructor */ 113 /* */ 114 /* <Description> */ 115 /* A function used to initialize (not create) a new module object. */ 116 /* */ 117 /* <Input> */ 118 /* module :: The module to initialize. */ 119 /* */ 120 typedef FT_Error 121 (*FT_Module_Constructor)( FT_Module module ); 122 123 124 /*************************************************************************/ 125 /* */ 126 /* <FuncType> */ 127 /* FT_Module_Destructor */ 128 /* */ 129 /* <Description> */ 130 /* A function used to finalize (not destroy) a given module object. */ 131 /* */ 132 /* <Input> */ 133 /* module :: The module to finalize. */ 134 /* */ 135 typedef void 136 (*FT_Module_Destructor)( FT_Module module ); 137 138 139 /*************************************************************************/ 140 /* */ 141 /* <FuncType> */ 142 /* FT_Module_Requester */ 143 /* */ 144 /* <Description> */ 145 /* A function used to query a given module for a specific interface. */ 146 /* */ 147 /* <Input> */ 148 /* module :: The module to be searched. */ 149 /* */ 150 /* name :: The name of the interface in the module. */ 151 /* */ 152 typedef FT_Module_Interface 153 (*FT_Module_Requester)( FT_Module module, 154 const char* name ); 155 156 157 /*************************************************************************/ 158 /* */ 159 /* <Struct> */ 160 /* FT_Module_Class */ 161 /* */ 162 /* <Description> */ 163 /* The module class descriptor. */ 164 /* */ 165 /* <Fields> */ 166 /* module_flags :: Bit flags describing the module. */ 167 /* */ 168 /* module_size :: The size of one module object/instance in */ 169 /* bytes. */ 170 /* */ 171 /* module_name :: The name of the module. */ 172 /* */ 173 /* module_version :: The version, as a 16.16 fixed number */ 174 /* (major.minor). */ 175 /* */ 176 /* module_requires :: The version of FreeType this module requires, */ 177 /* as a 16.16 fixed number (major.minor). Starts */ 178 /* at version 2.0, i.e., 0x20000. */ 179 /* */ 180 /* module_init :: The initializing function. */ 181 /* */ 182 /* module_done :: The finalizing function. */ 183 /* */ 184 /* get_interface :: The interface requesting function. */ 185 /* */ 186 typedef struct FT_Module_Class_ 187 { 188 FT_ULong module_flags; 189 FT_Long module_size; 190 const FT_String* module_name; 191 FT_Fixed module_version; 192 FT_Fixed module_requires; 193 194 const void* module_interface; 195 196 FT_Module_Constructor module_init; 197 FT_Module_Destructor module_done; 198 FT_Module_Requester get_interface; 199 200 } FT_Module_Class; 201 202 203 /*************************************************************************/ 204 /* */ 205 /* <Function> */ 206 /* FT_Add_Module */ 207 /* */ 208 /* <Description> */ 209 /* Add a new module to a given library instance. */ 210 /* */ 211 /* <InOut> */ 212 /* library :: A handle to the library object. */ 213 /* */ 214 /* <Input> */ 215 /* clazz :: A pointer to class descriptor for the module. */ 216 /* */ 217 /* <Return> */ 218 /* FreeType error code. 0~means success. */ 219 /* */ 220 /* <Note> */ 221 /* An error will be returned if a module already exists by that name, */ 222 /* or if the module requires a version of FreeType that is too great. */ 223 /* */ 224 FT_EXPORT( FT_Error ) 225 FT_Add_Module( FT_Library library, 226 const FT_Module_Class* clazz ); 227 228 229 /*************************************************************************/ 230 /* */ 231 /* <Function> */ 232 /* FT_Get_Module */ 233 /* */ 234 /* <Description> */ 235 /* Find a module by its name. */ 236 /* */ 237 /* <Input> */ 238 /* library :: A handle to the library object. */ 239 /* */ 240 /* module_name :: The module's name (as an ASCII string). */ 241 /* */ 242 /* <Return> */ 243 /* A module handle. 0~if none was found. */ 244 /* */ 245 /* <Note> */ 246 /* FreeType's internal modules aren't documented very well, and you */ 247 /* should look up the source code for details. */ 248 /* */ 249 FT_EXPORT( FT_Module ) 250 FT_Get_Module( FT_Library library, 251 const char* module_name ); 252 253 254 /*************************************************************************/ 255 /* */ 256 /* <Function> */ 257 /* FT_Remove_Module */ 258 /* */ 259 /* <Description> */ 260 /* Remove a given module from a library instance. */ 261 /* */ 262 /* <InOut> */ 263 /* library :: A handle to a library object. */ 264 /* */ 265 /* <Input> */ 266 /* module :: A handle to a module object. */ 267 /* */ 268 /* <Return> */ 269 /* FreeType error code. 0~means success. */ 270 /* */ 271 /* <Note> */ 272 /* The module object is destroyed by the function in case of success. */ 273 /* */ 274 FT_EXPORT( FT_Error ) 275 FT_Remove_Module( FT_Library library, 276 FT_Module module ); 277 278 279 /********************************************************************** 280 * 281 * @function: 282 * FT_Property_Set 283 * 284 * @description: 285 * Set a property for a given module. 286 * 287 * @input: 288 * library :: 289 * A handle to the library the module is part of. 290 * 291 * module_name :: 292 * The module name. 293 * 294 * property_name :: 295 * The property name. Properties are described in the `Synopsis' 296 * subsection of the module's documentation. 297 * 298 * Note that only a few modules have properties. 299 * 300 * value :: 301 * A generic pointer to a variable or structure that gives the new 302 * value of the property. The exact definition of `value' is 303 * dependent on the property; see the `Synopsis' subsection of the 304 * module's documentation. 305 * 306 * @return: 307 * FreeType error code. 0~means success. 308 * 309 * @note: 310 * If `module_name' isn't a valid module name, or `property_name' 311 * doesn't specify a valid property, or if `value' doesn't represent a 312 * valid value for the given property, an error is returned. 313 * 314 * The following example sets property `bar' (a simple integer) in 315 * module `foo' to value~1. 316 * 317 * { 318 * FT_UInt bar; 319 * 320 * 321 * bar = 1; 322 * FT_Property_Set( library, "foo", "bar", &bar ); 323 * } 324 * 325 * Note that the FreeType Cache sub-system doesn't recognize module 326 * property changes. To avoid glyph lookup confusion within the cache 327 * you should call @FTC_Manager_Reset to completely flush the cache if 328 * a module property gets changed after @FTC_Manager_New has been 329 * called. 330 * 331 * It is not possible to set properties of the FreeType Cache 332 * sub-system itself with FT_Property_Set; use @FTC_Property_Set 333 * instead. 334 * 335 * @since: 336 * 2.4.11 337 * 338 */ 339 FT_EXPORT( FT_Error ) 340 FT_Property_Set( FT_Library library, 341 const FT_String* module_name, 342 const FT_String* property_name, 343 const void* value ); 344 345 346 /********************************************************************** 347 * 348 * @function: 349 * FT_Property_Get 350 * 351 * @description: 352 * Get a module's property value. 353 * 354 * @input: 355 * library :: 356 * A handle to the library the module is part of. 357 * 358 * module_name :: 359 * The module name. 360 * 361 * property_name :: 362 * The property name. Properties are described in the `Synopsis' 363 * subsection of the module's documentation. 364 * 365 * @inout: 366 * value :: 367 * A generic pointer to a variable or structure that gives the 368 * value of the property. The exact definition of `value' is 369 * dependent on the property; see the `Synopsis' subsection of the 370 * module's documentation. 371 * 372 * @return: 373 * FreeType error code. 0~means success. 374 * 375 * @note: 376 * If `module_name' isn't a valid module name, or `property_name' 377 * doesn't specify a valid property, or if `value' doesn't represent a 378 * valid value for the given property, an error is returned. 379 * 380 * The following example gets property `baz' (a range) in module `foo'. 381 * 382 * { 383 * typedef range_ 384 * { 385 * FT_Int32 min; 386 * FT_Int32 max; 387 * 388 * } range; 389 * 390 * range baz; 391 * 392 * 393 * FT_Property_Get( library, "foo", "baz", &baz ); 394 * } 395 * 396 * It is not possible to retrieve properties of the FreeType Cache 397 * sub-system with FT_Property_Get; use @FTC_Property_Get instead. 398 * 399 * @since: 400 * 2.4.11 401 * 402 */ 403 FT_EXPORT( FT_Error ) 404 FT_Property_Get( FT_Library library, 405 const FT_String* module_name, 406 const FT_String* property_name, 407 void* value ); 408 409 410 /*************************************************************************/ 411 /* */ 412 /* <Function> */ 413 /* FT_Reference_Library */ 414 /* */ 415 /* <Description> */ 416 /* A counter gets initialized to~1 at the time an @FT_Library */ 417 /* structure is created. This function increments the counter. */ 418 /* @FT_Done_Library then only destroys a library if the counter is~1, */ 419 /* otherwise it simply decrements the counter. */ 420 /* */ 421 /* This function helps in managing life-cycles of structures that */ 422 /* reference @FT_Library objects. */ 423 /* */ 424 /* <Input> */ 425 /* library :: A handle to a target library object. */ 426 /* */ 427 /* <Return> */ 428 /* FreeType error code. 0~means success. */ 429 /* */ 430 /* <Since> */ 431 /* 2.4.2 */ 432 /* */ 433 FT_EXPORT( FT_Error ) 434 FT_Reference_Library( FT_Library library ); 435 436 437 /*************************************************************************/ 438 /* */ 439 /* <Function> */ 440 /* FT_New_Library */ 441 /* */ 442 /* <Description> */ 443 /* This function is used to create a new FreeType library instance */ 444 /* from a given memory object. It is thus possible to use libraries */ 445 /* with distinct memory allocators within the same program. */ 446 /* */ 447 /* Normally, you would call this function (followed by a call to */ 448 /* @FT_Add_Default_Modules or a series of calls to @FT_Add_Module) */ 449 /* instead of @FT_Init_FreeType to initialize the FreeType library. */ 450 /* */ 451 /* Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a */ 452 /* library instance. */ 453 /* */ 454 /* <Input> */ 455 /* memory :: A handle to the original memory object. */ 456 /* */ 457 /* <Output> */ 458 /* alibrary :: A pointer to handle of a new library object. */ 459 /* */ 460 /* <Return> */ 461 /* FreeType error code. 0~means success. */ 462 /* */ 463 /* <Note> */ 464 /* See the discussion of reference counters in the description of */ 465 /* @FT_Reference_Library. */ 466 /* */ 467 FT_EXPORT( FT_Error ) 468 FT_New_Library( FT_Memory memory, 469 FT_Library *alibrary ); 470 471 472 /*************************************************************************/ 473 /* */ 474 /* <Function> */ 475 /* FT_Done_Library */ 476 /* */ 477 /* <Description> */ 478 /* Discard a given library object. This closes all drivers and */ 479 /* discards all resource objects. */ 480 /* */ 481 /* <Input> */ 482 /* library :: A handle to the target library. */ 483 /* */ 484 /* <Return> */ 485 /* FreeType error code. 0~means success. */ 486 /* */ 487 /* <Note> */ 488 /* See the discussion of reference counters in the description of */ 489 /* @FT_Reference_Library. */ 490 /* */ 491 FT_EXPORT( FT_Error ) 492 FT_Done_Library( FT_Library library ); 493 494 /* */ 495 496 typedef void 497 (*FT_DebugHook_Func)( void* arg ); 498 499 500 /*************************************************************************/ 501 /* */ 502 /* <Function> */ 503 /* FT_Set_Debug_Hook */ 504 /* */ 505 /* <Description> */ 506 /* Set a debug hook function for debugging the interpreter of a font */ 507 /* format. */ 508 /* */ 509 /* <InOut> */ 510 /* library :: A handle to the library object. */ 511 /* */ 512 /* <Input> */ 513 /* hook_index :: The index of the debug hook. You should use the */ 514 /* values defined in `ftobjs.h', e.g., */ 515 /* `FT_DEBUG_HOOK_TRUETYPE'. */ 516 /* */ 517 /* debug_hook :: The function used to debug the interpreter. */ 518 /* */ 519 /* <Note> */ 520 /* Currently, four debug hook slots are available, but only two (for */ 521 /* the TrueType and the Type~1 interpreter) are defined. */ 522 /* */ 523 /* Since the internal headers of FreeType are no longer installed, */ 524 /* the symbol `FT_DEBUG_HOOK_TRUETYPE' isn't available publicly. */ 525 /* This is a bug and will be fixed in a forthcoming release. */ 526 /* */ 527 FT_EXPORT( void ) 528 FT_Set_Debug_Hook( FT_Library library, 529 FT_UInt hook_index, 530 FT_DebugHook_Func debug_hook ); 531 532 533 /*************************************************************************/ 534 /* */ 535 /* <Function> */ 536 /* FT_Add_Default_Modules */ 537 /* */ 538 /* <Description> */ 539 /* Add the set of default drivers to a given library object. */ 540 /* This is only useful when you create a library object with */ 541 /* @FT_New_Library (usually to plug a custom memory manager). */ 542 /* */ 543 /* <InOut> */ 544 /* library :: A handle to a new library object. */ 545 /* */ 546 FT_EXPORT( void ) 547 FT_Add_Default_Modules( FT_Library library ); 548 549 550 551 /************************************************************************** 552 * 553 * @section: 554 * truetype_engine 555 * 556 * @title: 557 * The TrueType Engine 558 * 559 * @abstract: 560 * TrueType bytecode support. 561 * 562 * @description: 563 * This section contains a function used to query the level of TrueType 564 * bytecode support compiled in this version of the library. 565 * 566 */ 567 568 569 /************************************************************************** 570 * 571 * @enum: 572 * FT_TrueTypeEngineType 573 * 574 * @description: 575 * A list of values describing which kind of TrueType bytecode 576 * engine is implemented in a given FT_Library instance. It is used 577 * by the @FT_Get_TrueType_Engine_Type function. 578 * 579 * @values: 580 * FT_TRUETYPE_ENGINE_TYPE_NONE :: 581 * The library doesn't implement any kind of bytecode interpreter. 582 * 583 * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED :: 584 * The library implements a bytecode interpreter that doesn't 585 * support the patented operations of the TrueType virtual machine. 586 * 587 * Its main use is to load certain Asian fonts that position and 588 * scale glyph components with bytecode instructions. It produces 589 * bad output for most other fonts. 590 * 591 * FT_TRUETYPE_ENGINE_TYPE_PATENTED :: 592 * The library implements a bytecode interpreter that covers 593 * the full instruction set of the TrueType virtual machine (this 594 * was governed by patents until May 2010, hence the name). 595 * 596 * @since: 597 * 2.2 598 * 599 */ 600 typedef enum FT_TrueTypeEngineType_ 601 { 602 FT_TRUETYPE_ENGINE_TYPE_NONE = 0, 603 FT_TRUETYPE_ENGINE_TYPE_UNPATENTED, 604 FT_TRUETYPE_ENGINE_TYPE_PATENTED 605 606 } FT_TrueTypeEngineType; 607 608 609 /************************************************************************** 610 * 611 * @func: 612 * FT_Get_TrueType_Engine_Type 613 * 614 * @description: 615 * Return an @FT_TrueTypeEngineType value to indicate which level of 616 * the TrueType virtual machine a given library instance supports. 617 * 618 * @input: 619 * library :: 620 * A library instance. 621 * 622 * @return: 623 * A value indicating which level is supported. 624 * 625 * @since: 626 * 2.2 627 * 628 */ 629 FT_EXPORT( FT_TrueTypeEngineType ) 630 FT_Get_TrueType_Engine_Type( FT_Library library ); 631 632 633 /* */ 634 635 636 FT_END_HEADER 637 638 #endif /* __FTMODAPI_H__ */ 639 640 641 /* END */ 642