sfntpic.c revision e3c9301581a450fae5db73a3b94b10ed6a0aeb5e
1fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/***************************************************************************/ 2fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* */ 3fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* sfntpic.c */ 4fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* */ 5fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* The FreeType position independent code services for sfnt module. */ 6fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* */ 7e3c9301581a450fae5db73a3b94b10ed6a0aeb5eWerner Lemberg/* Copyright 2009, 2010, 2012, 2013 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 25665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg 26fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#ifdef FT_CONFIG_OPTION_PIC 27fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 28fb429ec409348501f6ab1932b39ee2d612723198Oran Agra /* forward declaration of PIC init functions from sfdriver.c */ 29c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Error 30c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Create_Class_sfnt_services( FT_Library library, 31328aa3b203fc061c207fb01e9cbabea7cb3c9272Werner Lemberg FT_ServiceDescRec** output_class ); 32c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 33c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 34c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Destroy_Class_sfnt_services( FT_Library library, 35c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_ServiceDescRec* clazz ); 36c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 37c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 38c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_bdf( FT_Service_BDFRec* clazz ); 39c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 40c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 41c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_interface( FT_Library library, 42c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) SFNT_Interface* clazz ); 43c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 44c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 45c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_glyph_dict( 46c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Library library, 47c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Service_GlyphDictRec* clazz ); 48c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 49c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 50c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_ps_name( 51c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Library library, 52c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Service_PsFontNameRec* clazz ); 53c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 54c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 55c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_tt_service_get_cmap_info( 56c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Library library, 57c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Service_TTCMapsRec* clazz ); 58c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 59c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 60c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_sfnt_table( 61c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Service_SFNT_TableRec* clazz ); 62fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 63fb429ec409348501f6ab1932b39ee2d612723198Oran Agra /* forward declaration of PIC init functions from ttcmap.c */ 64c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Error 65c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Create_Class_tt_cmap_classes( FT_Library library, 66c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) TT_CMap_Class** output_class ); 67c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 68c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 69c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Destroy_Class_tt_cmap_classes( FT_Library library, 70c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) TT_CMap_Class* clazz ); 71fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 72665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg 73fb429ec409348501f6ab1932b39ee2d612723198Oran Agra void 74c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) sfnt_module_class_pic_free( FT_Library library ) 75fb429ec409348501f6ab1932b39ee2d612723198Oran Agra { 76c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_PIC_Container* pic_container = &library->pic_container; 77665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg FT_Memory memory = library->memory; 78c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 79c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 80fb429ec409348501f6ab1932b39ee2d612723198Oran Agra if ( pic_container->sfnt ) 81fb429ec409348501f6ab1932b39ee2d612723198Oran Agra { 82c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) sfntModulePIC* container = (sfntModulePIC*)pic_container->sfnt; 83c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 84c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 85c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) if ( container->sfnt_services ) 86c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Destroy_Class_sfnt_services( library, 87c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) container->sfnt_services ); 88fb429ec409348501f6ab1932b39ee2d612723198Oran Agra container->sfnt_services = NULL; 89665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg 90c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) if ( container->tt_cmap_classes ) 91c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Destroy_Class_tt_cmap_classes( library, 92c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) container->tt_cmap_classes ); 93fb429ec409348501f6ab1932b39ee2d612723198Oran Agra container->tt_cmap_classes = NULL; 94665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg 95fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_FREE( container ); 96fb429ec409348501f6ab1932b39ee2d612723198Oran Agra pic_container->sfnt = NULL; 97fb429ec409348501f6ab1932b39ee2d612723198Oran Agra } 98fb429ec409348501f6ab1932b39ee2d612723198Oran Agra } 99fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 100fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 101fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Error 102665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg sfnt_module_class_pic_init( FT_Library library ) 103fb429ec409348501f6ab1932b39ee2d612723198Oran Agra { 104f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg FT_PIC_Container* pic_container = &library->pic_container; 105e3c9301581a450fae5db73a3b94b10ed6a0aeb5eWerner Lemberg FT_Error error = FT_Err_Ok; 106328aa3b203fc061c207fb01e9cbabea7cb3c9272Werner Lemberg sfntModulePIC* container = NULL; 107665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg FT_Memory memory = library->memory; 108f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg 109fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 110fb429ec409348501f6ab1932b39ee2d612723198Oran Agra /* allocate pointer, clear and set global container pointer */ 111fb429ec409348501f6ab1932b39ee2d612723198Oran Agra if ( FT_ALLOC ( container, sizeof ( *container ) ) ) 112fb429ec409348501f6ab1932b39ee2d612723198Oran Agra return error; 113f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg FT_MEM_SET( container, 0, sizeof ( *container ) ); 114fb429ec409348501f6ab1932b39ee2d612723198Oran Agra pic_container->sfnt = container; 115fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 116665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg /* initialize pointer table - */ 117665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg /* this is how the module usually expects this data */ 118c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) error = FT_Create_Class_sfnt_services( library, 119c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) &container->sfnt_services ); 120c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) if ( error ) 121fb429ec409348501f6ab1932b39ee2d612723198Oran Agra goto Exit; 122665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg 123c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) error = FT_Create_Class_tt_cmap_classes( library, 124c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) &container->tt_cmap_classes ); 125c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) if ( error ) 126fb429ec409348501f6ab1932b39ee2d612723198Oran Agra goto Exit; 127c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 128c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_glyph_dict( 129c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) library, &container->sfnt_service_glyph_dict ); 130c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_ps_name( 131c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) library, &container->sfnt_service_ps_name ); 132c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_tt_service_get_cmap_info( 133c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) library, &container->tt_service_get_cmap_info ); 134c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_sfnt_table( 135c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) &container->sfnt_service_sfnt_table ); 136fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#ifdef TT_CONFIG_OPTION_BDF 137c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_bdf( &container->sfnt_service_bdf ); 138fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#endif 139c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_interface( library, &container->sfnt_interface ); 140fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 141665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg Exit: 142c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) if ( error ) 143c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) sfnt_module_class_pic_free( library ); 144fb429ec409348501f6ab1932b39ee2d612723198Oran Agra return error; 145fb429ec409348501f6ab1932b39ee2d612723198Oran Agra } 146fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 147fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#endif /* FT_CONFIG_OPTION_PIC */ 148fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 149fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 150fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* END */ 151