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