sfntpic.c revision 4b733517d77856d192c5929dbbff449b813dc23a
1fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/***************************************************************************/ 2fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* */ 3fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* sfntpic.c */ 4fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* */ 5fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* The FreeType position independent code services for sfnt module. */ 6fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* */ 7f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg/* Copyright 2009, 2010 by */ 8fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* Oran Agra and Mickey Gabel. */ 9fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* */ 10fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* This file is part of the FreeType project, and may only be used, */ 11fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* modified, and distributed under the terms of the FreeType project */ 12fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* this file you indicate that you have read the license and */ 14fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* understand and accept it fully. */ 15fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* */ 16fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/***************************************************************************/ 17fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 18fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 19fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#include <ft2build.h> 20fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#include FT_FREETYPE_H 21fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#include FT_INTERNAL_OBJECTS_H 22fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#include "sfntpic.h" 234b733517d77856d192c5929dbbff449b813dc23aSuzuki, Toshiya (鈴木俊哉)#include "sferrors.h" 24fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 25fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#ifdef FT_CONFIG_OPTION_PIC 26fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 27fb429ec409348501f6ab1932b39ee2d612723198Oran Agra /* forward declaration of PIC init functions from sfdriver.c */ 28fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Error FT_Create_Class_sfnt_services( FT_Library, FT_ServiceDescRec**); 29fb429ec409348501f6ab1932b39ee2d612723198Oran Agra void FT_Destroy_Class_sfnt_services( FT_Library, FT_ServiceDescRec*); 30fb429ec409348501f6ab1932b39ee2d612723198Oran Agra void FT_Init_Class_sfnt_service_bdf( FT_Service_BDFRec*); 31fb429ec409348501f6ab1932b39ee2d612723198Oran Agra void FT_Init_Class_sfnt_interface( FT_Library, SFNT_Interface*); 32fb429ec409348501f6ab1932b39ee2d612723198Oran Agra void FT_Init_Class_sfnt_service_glyph_dict( FT_Library, FT_Service_GlyphDictRec*); 33fb429ec409348501f6ab1932b39ee2d612723198Oran Agra void FT_Init_Class_sfnt_service_ps_name( FT_Library, FT_Service_PsFontNameRec*); 34fb429ec409348501f6ab1932b39ee2d612723198Oran Agra void FT_Init_Class_tt_service_get_cmap_info( FT_Library, FT_Service_TTCMapsRec*); 35fb429ec409348501f6ab1932b39ee2d612723198Oran Agra void FT_Init_Class_sfnt_service_sfnt_table( FT_Service_SFNT_TableRec*); 36fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 37fb429ec409348501f6ab1932b39ee2d612723198Oran Agra /* forward declaration of PIC init functions from ttcmap.c */ 38fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Error FT_Create_Class_tt_cmap_classes( FT_Library, TT_CMap_Class**); 39fb429ec409348501f6ab1932b39ee2d612723198Oran Agra void FT_Destroy_Class_tt_cmap_classes( FT_Library, TT_CMap_Class*); 40fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 41fb429ec409348501f6ab1932b39ee2d612723198Oran Agra void 42fb429ec409348501f6ab1932b39ee2d612723198Oran Agra sfnt_module_class_pic_free( FT_Library library ) 43fb429ec409348501f6ab1932b39ee2d612723198Oran Agra { 44fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_PIC_Container* pic_container = &library->pic_container; 45fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Memory memory = library->memory; 46fb429ec409348501f6ab1932b39ee2d612723198Oran Agra if ( pic_container->sfnt ) 47fb429ec409348501f6ab1932b39ee2d612723198Oran Agra { 48fb429ec409348501f6ab1932b39ee2d612723198Oran Agra sfntModulePIC* container = (sfntModulePIC*)pic_container->sfnt; 49fb429ec409348501f6ab1932b39ee2d612723198Oran Agra if(container->sfnt_services) 50fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Destroy_Class_sfnt_services(library, container->sfnt_services); 51fb429ec409348501f6ab1932b39ee2d612723198Oran Agra container->sfnt_services = NULL; 52fb429ec409348501f6ab1932b39ee2d612723198Oran Agra if(container->tt_cmap_classes) 53fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Destroy_Class_tt_cmap_classes(library, container->tt_cmap_classes); 54fb429ec409348501f6ab1932b39ee2d612723198Oran Agra container->tt_cmap_classes = NULL; 55fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_FREE( container ); 56fb429ec409348501f6ab1932b39ee2d612723198Oran Agra pic_container->sfnt = NULL; 57fb429ec409348501f6ab1932b39ee2d612723198Oran Agra } 58fb429ec409348501f6ab1932b39ee2d612723198Oran Agra } 59fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 60fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 61fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Error 62fb429ec409348501f6ab1932b39ee2d612723198Oran Agra sfnt_module_class_pic_init( FT_Library library ) 63fb429ec409348501f6ab1932b39ee2d612723198Oran Agra { 64f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg FT_PIC_Container* pic_container = &library->pic_container; 65f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg FT_Error error = SFNT_Err_Ok; 66f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg sfntModulePIC* container; 67f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg FT_Memory memory = library->memory; 68f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg 69fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 70fb429ec409348501f6ab1932b39ee2d612723198Oran Agra /* allocate pointer, clear and set global container pointer */ 71fb429ec409348501f6ab1932b39ee2d612723198Oran Agra if ( FT_ALLOC ( container, sizeof ( *container ) ) ) 72fb429ec409348501f6ab1932b39ee2d612723198Oran Agra return error; 73f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg FT_MEM_SET( container, 0, sizeof ( *container ) ); 74fb429ec409348501f6ab1932b39ee2d612723198Oran Agra pic_container->sfnt = container; 75fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 76fb429ec409348501f6ab1932b39ee2d612723198Oran Agra /* initialize pointer table - this is how the module usually expects this data */ 77fb429ec409348501f6ab1932b39ee2d612723198Oran Agra error = FT_Create_Class_sfnt_services(library, &container->sfnt_services); 78fb429ec409348501f6ab1932b39ee2d612723198Oran Agra if(error) 79fb429ec409348501f6ab1932b39ee2d612723198Oran Agra goto Exit; 80fb429ec409348501f6ab1932b39ee2d612723198Oran Agra error = FT_Create_Class_tt_cmap_classes(library, &container->tt_cmap_classes); 81fb429ec409348501f6ab1932b39ee2d612723198Oran Agra if(error) 82fb429ec409348501f6ab1932b39ee2d612723198Oran Agra goto Exit; 83fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Init_Class_sfnt_service_glyph_dict(library, &container->sfnt_service_glyph_dict); 84fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Init_Class_sfnt_service_ps_name(library, &container->sfnt_service_ps_name); 85fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Init_Class_tt_service_get_cmap_info(library, &container->tt_service_get_cmap_info); 86fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Init_Class_sfnt_service_sfnt_table(&container->sfnt_service_sfnt_table); 87fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#ifdef TT_CONFIG_OPTION_BDF 88fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Init_Class_sfnt_service_bdf(&container->sfnt_service_bdf); 89fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#endif 90fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Init_Class_sfnt_interface(library, &container->sfnt_interface); 91fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 92fb429ec409348501f6ab1932b39ee2d612723198Oran AgraExit: 93fb429ec409348501f6ab1932b39ee2d612723198Oran Agra if(error) 94fb429ec409348501f6ab1932b39ee2d612723198Oran Agra sfnt_module_class_pic_free(library); 95fb429ec409348501f6ab1932b39ee2d612723198Oran Agra return error; 96fb429ec409348501f6ab1932b39ee2d612723198Oran Agra } 97fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 98fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 99fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 100fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#endif /* FT_CONFIG_OPTION_PIC */ 101fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 102fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 103fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* END */ 104