1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* pshmod.c */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* FreeType PostScript hinter module implementation (body). */ 6*37da2899SCharles.Forsyth /* */ 7*37da2899SCharles.Forsyth /* Copyright 2001, 2002 by */ 8*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9*37da2899SCharles.Forsyth /* */ 10*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 11*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 12*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 14*37da2899SCharles.Forsyth /* understand and accept it fully. */ 15*37da2899SCharles.Forsyth /* */ 16*37da2899SCharles.Forsyth /***************************************************************************/ 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth 19*37da2899SCharles.Forsyth #include <ft2build.h> 20*37da2899SCharles.Forsyth #include FT_INTERNAL_OBJECTS_H 21*37da2899SCharles.Forsyth #include "pshrec.h" 22*37da2899SCharles.Forsyth #include "pshalgo.h" 23*37da2899SCharles.Forsyth 24*37da2899SCharles.Forsyth 25*37da2899SCharles.Forsyth /* the Postscript Hinter module structure */ 26*37da2899SCharles.Forsyth typedef struct PS_Hinter_Module_Rec_ 27*37da2899SCharles.Forsyth { 28*37da2899SCharles.Forsyth FT_ModuleRec root; 29*37da2899SCharles.Forsyth PS_HintsRec ps_hints; 30*37da2899SCharles.Forsyth 31*37da2899SCharles.Forsyth PSH_Globals_FuncsRec globals_funcs; 32*37da2899SCharles.Forsyth T1_Hints_FuncsRec t1_funcs; 33*37da2899SCharles.Forsyth T2_Hints_FuncsRec t2_funcs; 34*37da2899SCharles.Forsyth 35*37da2899SCharles.Forsyth } PS_Hinter_ModuleRec, *PS_Hinter_Module; 36*37da2899SCharles.Forsyth 37*37da2899SCharles.Forsyth 38*37da2899SCharles.Forsyth /* finalize module */ 39*37da2899SCharles.Forsyth FT_CALLBACK_DEF( void ) ps_hinter_done(PS_Hinter_Module module)40*37da2899SCharles.Forsyth ps_hinter_done( PS_Hinter_Module module ) 41*37da2899SCharles.Forsyth { 42*37da2899SCharles.Forsyth module->t1_funcs.hints = NULL; 43*37da2899SCharles.Forsyth module->t2_funcs.hints = NULL; 44*37da2899SCharles.Forsyth 45*37da2899SCharles.Forsyth ps_hints_done( &module->ps_hints ); 46*37da2899SCharles.Forsyth } 47*37da2899SCharles.Forsyth 48*37da2899SCharles.Forsyth 49*37da2899SCharles.Forsyth /* initialize module, create hints recorder and the interface */ 50*37da2899SCharles.Forsyth FT_CALLBACK_DEF( FT_Error ) ps_hinter_init(PS_Hinter_Module module)51*37da2899SCharles.Forsyth ps_hinter_init( PS_Hinter_Module module ) 52*37da2899SCharles.Forsyth { 53*37da2899SCharles.Forsyth FT_Memory memory = module->root.memory; 54*37da2899SCharles.Forsyth 55*37da2899SCharles.Forsyth 56*37da2899SCharles.Forsyth ps_hints_init( &module->ps_hints, memory ); 57*37da2899SCharles.Forsyth 58*37da2899SCharles.Forsyth psh_globals_funcs_init( &module->globals_funcs ); 59*37da2899SCharles.Forsyth 60*37da2899SCharles.Forsyth t1_hints_funcs_init( &module->t1_funcs ); 61*37da2899SCharles.Forsyth module->t1_funcs.hints = (T1_Hints)&module->ps_hints; 62*37da2899SCharles.Forsyth 63*37da2899SCharles.Forsyth t2_hints_funcs_init( &module->t2_funcs ); 64*37da2899SCharles.Forsyth module->t2_funcs.hints = (T2_Hints)&module->ps_hints; 65*37da2899SCharles.Forsyth 66*37da2899SCharles.Forsyth return 0; 67*37da2899SCharles.Forsyth } 68*37da2899SCharles.Forsyth 69*37da2899SCharles.Forsyth 70*37da2899SCharles.Forsyth /* returns global hints interface */ 71*37da2899SCharles.Forsyth FT_CALLBACK_DEF( PSH_Globals_Funcs ) pshinter_get_globals_funcs(FT_Module module)72*37da2899SCharles.Forsyth pshinter_get_globals_funcs( FT_Module module ) 73*37da2899SCharles.Forsyth { 74*37da2899SCharles.Forsyth return &((PS_Hinter_Module)module)->globals_funcs; 75*37da2899SCharles.Forsyth } 76*37da2899SCharles.Forsyth 77*37da2899SCharles.Forsyth 78*37da2899SCharles.Forsyth /* return Type 1 hints interface */ 79*37da2899SCharles.Forsyth FT_CALLBACK_DEF( T1_Hints_Funcs ) pshinter_get_t1_funcs(FT_Module module)80*37da2899SCharles.Forsyth pshinter_get_t1_funcs( FT_Module module ) 81*37da2899SCharles.Forsyth { 82*37da2899SCharles.Forsyth return &((PS_Hinter_Module)module)->t1_funcs; 83*37da2899SCharles.Forsyth } 84*37da2899SCharles.Forsyth 85*37da2899SCharles.Forsyth 86*37da2899SCharles.Forsyth /* return Type 2 hints interface */ 87*37da2899SCharles.Forsyth FT_CALLBACK_DEF( T2_Hints_Funcs ) pshinter_get_t2_funcs(FT_Module module)88*37da2899SCharles.Forsyth pshinter_get_t2_funcs( FT_Module module ) 89*37da2899SCharles.Forsyth { 90*37da2899SCharles.Forsyth return &((PS_Hinter_Module)module)->t2_funcs; 91*37da2899SCharles.Forsyth } 92*37da2899SCharles.Forsyth 93*37da2899SCharles.Forsyth 94*37da2899SCharles.Forsyth static 95*37da2899SCharles.Forsyth const PSHinter_Interface pshinter_interface = 96*37da2899SCharles.Forsyth { 97*37da2899SCharles.Forsyth pshinter_get_globals_funcs, 98*37da2899SCharles.Forsyth pshinter_get_t1_funcs, 99*37da2899SCharles.Forsyth pshinter_get_t2_funcs 100*37da2899SCharles.Forsyth }; 101*37da2899SCharles.Forsyth 102*37da2899SCharles.Forsyth 103*37da2899SCharles.Forsyth FT_CALLBACK_TABLE_DEF 104*37da2899SCharles.Forsyth const FT_Module_Class pshinter_module_class = 105*37da2899SCharles.Forsyth { 106*37da2899SCharles.Forsyth 0, 107*37da2899SCharles.Forsyth sizeof ( PS_Hinter_ModuleRec ), 108*37da2899SCharles.Forsyth "pshinter", 109*37da2899SCharles.Forsyth 0x10000L, 110*37da2899SCharles.Forsyth 0x20000L, 111*37da2899SCharles.Forsyth 112*37da2899SCharles.Forsyth &pshinter_interface, /* module-specific interface */ 113*37da2899SCharles.Forsyth 114*37da2899SCharles.Forsyth (FT_Module_Constructor)ps_hinter_init, 115*37da2899SCharles.Forsyth (FT_Module_Destructor) ps_hinter_done, 116*37da2899SCharles.Forsyth (FT_Module_Requester) 0 /* no additional interface for now */ 117*37da2899SCharles.Forsyth }; 118*37da2899SCharles.Forsyth 119*37da2899SCharles.Forsyth 120*37da2899SCharles.Forsyth /* END */ 121