e0abd386f9facb92f9c1901e60e449e0a2abadcf
[platform/upstream/freetype2.git] / src / pshinter / pshmod.c
1 /****************************************************************************
2  *
3  * pshmod.c
4  *
5  *   FreeType PostScript hinter module implementation (body).
6  *
7  * Copyright (C) 2001-2020 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 #include <freetype/internal/ftobjs.h>
20 #include "pshrec.h"
21 #include "pshalgo.h"
22 #include "pshmod.h"
23
24
25   /* the Postscript Hinter module structure */
26   typedef struct  PS_Hinter_Module_Rec_
27   {
28     FT_ModuleRec          root;
29     PS_HintsRec           ps_hints;
30
31     PSH_Globals_FuncsRec  globals_funcs;
32     T1_Hints_FuncsRec     t1_funcs;
33     T2_Hints_FuncsRec     t2_funcs;
34
35   } PS_Hinter_ModuleRec, *PS_Hinter_Module;
36
37
38   /* finalize module */
39   FT_CALLBACK_DEF( void )
40   ps_hinter_done( PS_Hinter_Module  module )
41   {
42     module->t1_funcs.hints = NULL;
43     module->t2_funcs.hints = NULL;
44
45     ps_hints_done( &module->ps_hints );
46   }
47
48
49   /* initialize module, create hints recorder and the interface */
50   FT_CALLBACK_DEF( FT_Error )
51   ps_hinter_init( PS_Hinter_Module  module )
52   {
53     FT_Memory  memory = module->root.memory;
54     void*      ph     = &module->ps_hints;
55
56
57     ps_hints_init( &module->ps_hints, memory );
58
59     psh_globals_funcs_init( &module->globals_funcs );
60
61     t1_hints_funcs_init( &module->t1_funcs );
62     module->t1_funcs.hints = (T1_Hints)ph;
63
64     t2_hints_funcs_init( &module->t2_funcs );
65     module->t2_funcs.hints = (T2_Hints)ph;
66
67     return 0;
68   }
69
70
71   /* returns global hints interface */
72   FT_CALLBACK_DEF( PSH_Globals_Funcs )
73   pshinter_get_globals_funcs( FT_Module  module )
74   {
75     return &((PS_Hinter_Module)module)->globals_funcs;
76   }
77
78
79   /* return Type 1 hints interface */
80   FT_CALLBACK_DEF( T1_Hints_Funcs )
81   pshinter_get_t1_funcs( FT_Module  module )
82   {
83     return &((PS_Hinter_Module)module)->t1_funcs;
84   }
85
86
87   /* return Type 2 hints interface */
88   FT_CALLBACK_DEF( T2_Hints_Funcs )
89   pshinter_get_t2_funcs( FT_Module  module )
90   {
91     return &((PS_Hinter_Module)module)->t2_funcs;
92   }
93
94
95   FT_DEFINE_PSHINTER_INTERFACE(
96     pshinter_interface,
97
98     pshinter_get_globals_funcs,
99     pshinter_get_t1_funcs,
100     pshinter_get_t2_funcs
101   )
102
103
104   FT_DEFINE_MODULE(
105     pshinter_module_class,
106
107     0,
108     sizeof ( PS_Hinter_ModuleRec ),
109     "pshinter",
110     0x10000L,
111     0x20000L,
112
113     &pshinter_interface,        /* module-specific interface */
114
115     (FT_Module_Constructor)ps_hinter_init,  /* module_init   */
116     (FT_Module_Destructor) ps_hinter_done,  /* module_done   */
117     (FT_Module_Requester)  NULL             /* get_interface */
118   )
119
120 /* END */