OLD | NEW |
| (Empty) |
1 /***************************************************************************/ | |
2 /* */ | |
3 /* cffpic.c */ | |
4 /* */ | |
5 /* The FreeType position independent code services for cff module. */ | |
6 /* */ | |
7 /* Copyright 2009, 2010, 2012, 2013 by */ | |
8 /* Oran Agra and Mickey Gabel. */ | |
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 "../../include/ft2build.h" | |
20 #include "../../include/freetype/freetype.h" | |
21 #include "../../include/freetype/internal/ftobjs.h" | |
22 #include "cffcmap.h" | |
23 #include "cffpic.h" | |
24 #include "cfferrs.h" | |
25 | |
26 | |
27 #ifdef FT_CONFIG_OPTION_PIC | |
28 | |
29 /* forward declaration of PIC init functions from cffdrivr.c */ | |
30 FT_Error | |
31 FT_Create_Class_cff_services( FT_Library library, | |
32 FT_ServiceDescRec** output_class ); | |
33 void | |
34 FT_Destroy_Class_cff_services( FT_Library library, | |
35 FT_ServiceDescRec* clazz ); | |
36 void | |
37 FT_Init_Class_cff_service_ps_info( FT_Library library, | |
38 FT_Service_PsInfoRec* clazz ); | |
39 void | |
40 FT_Init_Class_cff_service_glyph_dict( FT_Library library, | |
41 FT_Service_GlyphDictRec* clazz ); | |
42 void | |
43 FT_Init_Class_cff_service_ps_name( FT_Library library, | |
44 FT_Service_PsFontNameRec* clazz ); | |
45 void | |
46 FT_Init_Class_cff_service_get_cmap_info( FT_Library library, | |
47 FT_Service_TTCMapsRec* clazz ); | |
48 void | |
49 FT_Init_Class_cff_service_cid_info( FT_Library library, | |
50 FT_Service_CIDRec* clazz ); | |
51 | |
52 /* forward declaration of PIC init functions from cffparse.c */ | |
53 FT_Error | |
54 FT_Create_Class_cff_field_handlers( FT_Library library, | |
55 CFF_Field_Handler** output_class ); | |
56 void | |
57 FT_Destroy_Class_cff_field_handlers( FT_Library library, | |
58 CFF_Field_Handler* clazz ); | |
59 | |
60 | |
61 void | |
62 cff_driver_class_pic_free( FT_Library library ) | |
63 { | |
64 FT_PIC_Container* pic_container = &library->pic_container; | |
65 FT_Memory memory = library->memory; | |
66 | |
67 | |
68 if ( pic_container->cff ) | |
69 { | |
70 CffModulePIC* container = (CffModulePIC*)pic_container->cff; | |
71 | |
72 | |
73 if ( container->cff_services ) | |
74 FT_Destroy_Class_cff_services( library, | |
75 container->cff_services ); | |
76 container->cff_services = NULL; | |
77 if ( container->cff_field_handlers ) | |
78 FT_Destroy_Class_cff_field_handlers( | |
79 library, container->cff_field_handlers ); | |
80 container->cff_field_handlers = NULL; | |
81 FT_FREE( container ); | |
82 pic_container->cff = NULL; | |
83 } | |
84 } | |
85 | |
86 | |
87 FT_Error | |
88 cff_driver_class_pic_init( FT_Library library ) | |
89 { | |
90 FT_PIC_Container* pic_container = &library->pic_container; | |
91 FT_Error error = FT_Err_Ok; | |
92 CffModulePIC* container = NULL; | |
93 FT_Memory memory = library->memory; | |
94 | |
95 | |
96 /* allocate pointer, clear and set global container pointer */ | |
97 if ( FT_ALLOC ( container, sizeof ( *container ) ) ) | |
98 return error; | |
99 FT_MEM_SET( container, 0, sizeof ( *container ) ); | |
100 pic_container->cff = container; | |
101 | |
102 /* initialize pointer table - */ | |
103 /* this is how the module usually expects this data */ | |
104 error = FT_Create_Class_cff_services( library, | |
105 &container->cff_services ); | |
106 if ( error ) | |
107 goto Exit; | |
108 | |
109 error = FT_Create_Class_cff_field_handlers( | |
110 library, &container->cff_field_handlers ); | |
111 if ( error ) | |
112 goto Exit; | |
113 | |
114 FT_Init_Class_cff_service_ps_info( | |
115 library, &container->cff_service_ps_info ); | |
116 FT_Init_Class_cff_service_glyph_dict( | |
117 library, &container->cff_service_glyph_dict ); | |
118 FT_Init_Class_cff_service_ps_name( | |
119 library, &container->cff_service_ps_name ); | |
120 FT_Init_Class_cff_service_get_cmap_info( | |
121 library, &container->cff_service_get_cmap_info ); | |
122 FT_Init_Class_cff_service_cid_info( | |
123 library, &container->cff_service_cid_info ); | |
124 FT_Init_Class_cff_cmap_encoding_class_rec( | |
125 library, &container->cff_cmap_encoding_class_rec ); | |
126 FT_Init_Class_cff_cmap_unicode_class_rec( | |
127 library, &container->cff_cmap_unicode_class_rec ); | |
128 | |
129 Exit: | |
130 if ( error ) | |
131 cff_driver_class_pic_free( library ); | |
132 return error; | |
133 } | |
134 | |
135 #endif /* FT_CONFIG_OPTION_PIC */ | |
136 | |
137 | |
138 /* END */ | |
OLD | NEW |