1 /***************************************************************************/ 2 /* */ 3 /* ftmodapi.h */ 4 /* */ 5 /* FreeType modules public interface (specification). */ 6 /* */ 7 /* Copyright 1996-2001, 2002, 2003, 2006, 2008, 2009 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, and remove 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 /* */ 51 /*************************************************************************/ 52 53 54 /* module bit flags */ 55 #define FT_MODULE_FONT_DRIVER 1 /* this module is a font driver */ 56 #define FT_MODULE_RENDERER 2 /* this module is a renderer */ 57 #define FT_MODULE_HINTER 4 /* this module is a glyph hinter */ 58 #define FT_MODULE_STYLER 8 /* this module is a styler */ 59 60 #define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */ 61 /* scalable fonts */ 62 #define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */ 63 /* support vector outlines */ 64 #define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */ 65 /* own hinter */ 66 67 68 /* deprecated values */ 69 #define ft_module_font_driver FT_MODULE_FONT_DRIVER 70 #define ft_module_renderer FT_MODULE_RENDERER 71 #define ft_module_hinter FT_MODULE_HINTER 72 #define ft_module_styler FT_MODULE_STYLER 73 74 #define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE 75 #define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES 76 #define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER 77 78 79 typedef FT_Pointer FT_Module_Interface; 80 81 82 /*************************************************************************/ 83 /* */ 84 /* <FuncType> */ 85 /* FT_Module_Constructor */ 86 /* */ 87 /* <Description> */ 88 /* A function used to initialize (not create) a new module object. */ 89 /* */ 90 /* <Input> */ 91 /* module :: The module to initialize. */ 92 /* */ 93 typedef FT_Error 94 (*FT_Module_Constructor)( FT_Module module ); 95 96 97 /*************************************************************************/ 98 /* */ 99 /* <FuncType> */ 100 /* FT_Module_Destructor */ 101 /* */ 102 /* <Description> */ 103 /* A function used to finalize (not destroy) a given module object. */ 104 /* */ 105 /* <Input> */ 106 /* module :: The module to finalize. */ 107 /* */ 108 typedef void 109 (*FT_Module_Destructor)( FT_Module module ); 110 111 112 /*************************************************************************/ 113 /* */ 114 /* <FuncType> */ 115 /* FT_Module_Requester */ 116 /* */ 117 /* <Description> */ 118 /* A function used to query a given module for a specific interface. */ 119 /* */ 120 /* <Input> */ 121 /* module :: The module to finalize. */ 122 /* */ 123 /* name :: The name of the interface in the module. */ 124 /* */ 125 typedef FT_Module_Interface 126 (*FT_Module_Requester)( FT_Module module, 127 const char* name ); 128 129 130 /*************************************************************************/ 131 /* */ 132 /* <Struct> */ 133 /* FT_Module_Class */ 134 /* */ 135 /* <Description> */ 136 /* The module class descriptor. */ 137 /* */ 138 /* <Fields> */ 139 /* module_flags :: Bit flags describing the module. */ 140 /* */ 141 /* module_size :: The size of one module object/instance in */ 142 /* bytes. */ 143 /* */ 144 /* module_name :: The name of the module. */ 145 /* */ 146 /* module_version :: The version, as a 16.16 fixed number */ 147 /* (major.minor). */ 148 /* */ 149 /* module_requires :: The version of FreeType this module requires, */ 150 /* as a 16.16 fixed number (major.minor). Starts */ 151 /* at version 2.0, i.e., 0x20000. */ 152 /* */ 153 /* module_init :: The initializing function. */ 154 /* */ 155 /* module_done :: The finalizing function. */ 156 /* */ 157 /* get_interface :: The interface requesting function. */ 158 /* */ 159 typedef struct FT_Module_Class_ 160 { 161 FT_ULong module_flags; 162 FT_Long module_size; 163 const FT_String* module_name; 164 FT_Fixed module_version; 165 FT_Fixed module_requires; 166 167 const void* module_interface; 168 169 FT_Module_Constructor module_init; 170 FT_Module_Destructor module_done; 171 FT_Module_Requester get_interface; 172 173 } FT_Module_Class; 174 175 176 /*************************************************************************/ 177 /* */ 178 /* <Function> */ 179 /* FT_Add_Module */ 180 /* */ 181 /* <Description> */ 182 /* Add a new module to a given library instance. */ 183 /* */ 184 /* <InOut> */ 185 /* library :: A handle to the library object. */ 186 /* */ 187 /* <Input> */ 188 /* clazz :: A pointer to class descriptor for the module. */ 189 /* */ 190 /* <Return> */ 191 /* FreeType error code. 0~means success. */ 192 /* */ 193 /* <Note> */ 194 /* An error will be returned if a module already exists by that name, */ 195 /* or if the module requires a version of FreeType that is too great. */ 196 /* */ 197 FT_EXPORT( FT_Error ) 198 FT_Add_Module( FT_Library library, 199 const FT_Module_Class* clazz ); 200 201 202 /*************************************************************************/ 203 /* */ 204 /* <Function> */ 205 /* FT_Get_Module */ 206 /* */ 207 /* <Description> */ 208 /* Find a module by its name. */ 209 /* */ 210 /* <Input> */ 211 /* library :: A handle to the library object. */ 212 /* */ 213 /* module_name :: The module's name (as an ASCII string). */ 214 /* */ 215 /* <Return> */ 216 /* A module handle. 0~if none was found. */ 217 /* */ 218 /* <Note> */ 219 /* FreeType's internal modules aren't documented very well, and you */ 220 /* should look up the source code for details. */ 221 /* */ 222 FT_EXPORT( FT_Module ) 223 FT_Get_Module( FT_Library library, 224 const char* module_name ); 225 226 227 /*************************************************************************/ 228 /* */ 229 /* <Function> */ 230 /* FT_Remove_Module */ 231 /* */ 232 /* <Description> */ 233 /* Remove a given module from a library instance. */ 234 /* */ 235 /* <InOut> */ 236 /* library :: A handle to a library object. */ 237 /* */ 238 /* <Input> */ 239 /* module :: A handle to a module object. */ 240 /* */ 241 /* <Return> */ 242 /* FreeType error code. 0~means success. */ 243 /* */ 244 /* <Note> */ 245 /* The module object is destroyed by the function in case of success. */ 246 /* */ 247 FT_EXPORT( FT_Error ) 248 FT_Remove_Module( FT_Library library, 249 FT_Module module ); 250 251 252 /*************************************************************************/ 253 /* */ 254 /* <Function> */ 255 /* FT_New_Library */ 256 /* */ 257 /* <Description> */ 258 /* This function is used to create a new FreeType library instance */ 259 /* from a given memory object. It is thus possible to use libraries */ 260 /* with distinct memory allocators within the same program. */ 261 /* */ 262 /* Normally, you would call this function (followed by a call to */ 263 /* @FT_Add_Default_Modules or a series of calls to @FT_Add_Module) */ 264 /* instead of @FT_Init_FreeType to initialize the FreeType library. */ 265 /* */ 266 /* <Input> */ 267 /* memory :: A handle to the original memory object. */ 268 /* */ 269 /* <Output> */ 270 /* alibrary :: A pointer to handle of a new library object. */ 271 /* */ 272 /* <Return> */ 273 /* FreeType error code. 0~means success. */ 274 /* */ 275 FT_EXPORT( FT_Error ) 276 FT_New_Library( FT_Memory memory, 277 FT_Library *alibrary ); 278 279 280 /*************************************************************************/ 281 /* */ 282 /* <Function> */ 283 /* FT_Done_Library */ 284 /* */ 285 /* <Description> */ 286 /* Discard a given library object. This closes all drivers and */ 287 /* discards all resource objects. */ 288 /* */ 289 /* <Input> */ 290 /* library :: A handle to the target library. */ 291 /* */ 292 /* <Return> */ 293 /* FreeType error code. 0~means success. */ 294 /* */ 295 FT_EXPORT( FT_Error ) 296 FT_Done_Library( FT_Library library ); 297 298 /* */ 299 300 typedef void 301 (*FT_DebugHook_Func)( void* arg ); 302 303 304 /*************************************************************************/ 305 /* */ 306 /* <Function> */ 307 /* FT_Set_Debug_Hook */ 308 /* */ 309 /* <Description> */ 310 /* Set a debug hook function for debugging the interpreter of a font */ 311 /* format. */ 312 /* */ 313 /* <InOut> */ 314 /* library :: A handle to the library object. */ 315 /* */ 316 /* <Input> */ 317 /* hook_index :: The index of the debug hook. You should use the */ 318 /* values defined in `ftobjs.h', e.g., */ 319 /* `FT_DEBUG_HOOK_TRUETYPE'. */ 320 /* */ 321 /* debug_hook :: The function used to debug the interpreter. */ 322 /* */ 323 /* <Note> */ 324 /* Currently, four debug hook slots are available, but only two (for */ 325 /* the TrueType and the Type~1 interpreter) are defined. */ 326 /* */ 327 /* Since the internal headers of FreeType are no longer installed, */ 328 /* the symbol `FT_DEBUG_HOOK_TRUETYPE' isn't available publicly. */ 329 /* This is a bug and will be fixed in a forthcoming release. */ 330 /* */ 331 FT_EXPORT( void ) 332 FT_Set_Debug_Hook( FT_Library library, 333 FT_UInt hook_index, 334 FT_DebugHook_Func debug_hook ); 335 336 337 /*************************************************************************/ 338 /* */ 339 /* <Function> */ 340 /* FT_Add_Default_Modules */ 341 /* */ 342 /* <Description> */ 343 /* Add the set of default drivers to a given library object. */ 344 /* This is only useful when you create a library object with */ 345 /* @FT_New_Library (usually to plug a custom memory manager). */ 346 /* */ 347 /* <InOut> */ 348 /* library :: A handle to a new library object. */ 349 /* */ 350 FT_EXPORT( void ) 351 FT_Add_Default_Modules( FT_Library library ); 352 353 354 355 /************************************************************************** 356 * 357 * @section: 358 * truetype_engine 359 * 360 * @title: 361 * The TrueType Engine 362 * 363 * @abstract: 364 * TrueType bytecode support. 365 * 366 * @description: 367 * This section contains a function used to query the level of TrueType 368 * bytecode support compiled in this version of the library. 369 * 370 */ 371 372 373 /************************************************************************** 374 * 375 * @enum: 376 * FT_TrueTypeEngineType 377 * 378 * @description: 379 * A list of values describing which kind of TrueType bytecode 380 * engine is implemented in a given FT_Library instance. It is used 381 * by the @FT_Get_TrueType_Engine_Type function. 382 * 383 * @values: 384 * FT_TRUETYPE_ENGINE_TYPE_NONE :: 385 * The library doesn't implement any kind of bytecode interpreter. 386 * 387 * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED :: 388 * The library implements a bytecode interpreter that doesn't 389 * support the patented operations of the TrueType virtual machine. 390 * 391 * Its main use is to load certain Asian fonts which position and 392 * scale glyph components with bytecode instructions. It produces 393 * bad output for most other fonts. 394 * 395 * FT_TRUETYPE_ENGINE_TYPE_PATENTED :: 396 * The library implements a bytecode interpreter that covers 397 * the full instruction set of the TrueType virtual machine. 398 * See the file `docs/PATENTS' for legal aspects. 399 * 400 * @since: 401 * 2.2 402 * 403 */ 404 typedef enum FT_TrueTypeEngineType_ 405 { 406 FT_TRUETYPE_ENGINE_TYPE_NONE = 0, 407 FT_TRUETYPE_ENGINE_TYPE_UNPATENTED, 408 FT_TRUETYPE_ENGINE_TYPE_PATENTED 409 410 } FT_TrueTypeEngineType; 411 412 413 /************************************************************************** 414 * 415 * @func: 416 * FT_Get_TrueType_Engine_Type 417 * 418 * @description: 419 * Return an @FT_TrueTypeEngineType value to indicate which level of 420 * the TrueType virtual machine a given library instance supports. 421 * 422 * @input: 423 * library :: 424 * A library instance. 425 * 426 * @return: 427 * A value indicating which level is supported. 428 * 429 * @since: 430 * 2.2 431 * 432 */ 433 FT_EXPORT( FT_TrueTypeEngineType ) 434 FT_Get_TrueType_Engine_Type( FT_Library library ); 435 436 437 /* */ 438 439 440 FT_END_HEADER 441 442 #endif /* __FTMODAPI_H__ */ 443 444 445 /* END */ 446