1fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/***************************************************************************/ 2fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* */ 3fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* sfntpic.c */ 4fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* */ 5fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* The FreeType position independent code services for sfnt module. */ 6fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* */ 70a0c22569deab933df21127e75db5c81f724f292Werner Lemberg/* Copyright 2009-2018 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 (鈴木俊哉) void 33c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Destroy_Class_sfnt_services( FT_Library library, 34c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_ServiceDescRec* clazz ); 35c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 36c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_bdf( FT_Service_BDFRec* clazz ); 37c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 38c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_interface( FT_Library library, 39c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) SFNT_Interface* clazz ); 40c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 41c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_glyph_dict( 42c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Library library, 43c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Service_GlyphDictRec* clazz ); 44c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 45c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_ps_name( 46c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Library library, 47c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Service_PsFontNameRec* clazz ); 48c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 49c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_tt_service_get_cmap_info( 50c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Library library, 51c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Service_TTCMapsRec* clazz ); 52c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 53c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_sfnt_table( 54c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Service_SFNT_TableRec* clazz ); 55fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 565ea06ce0174a95f48b28efdba297672ae5d89981Werner Lemberg 57fb429ec409348501f6ab1932b39ee2d612723198Oran Agra /* forward declaration of PIC init functions from ttcmap.c */ 58c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Error 59c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Create_Class_tt_cmap_classes( FT_Library library, 60c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) TT_CMap_Class** output_class ); 61c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) void 62c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Destroy_Class_tt_cmap_classes( FT_Library library, 63c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) TT_CMap_Class* clazz ); 64fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 65665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg 66fb429ec409348501f6ab1932b39ee2d612723198Oran Agra void 67c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) sfnt_module_class_pic_free( FT_Library library ) 68fb429ec409348501f6ab1932b39ee2d612723198Oran Agra { 69c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_PIC_Container* pic_container = &library->pic_container; 70665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg FT_Memory memory = library->memory; 71c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 72c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 73fb429ec409348501f6ab1932b39ee2d612723198Oran Agra if ( pic_container->sfnt ) 74fb429ec409348501f6ab1932b39ee2d612723198Oran Agra { 75c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) sfntModulePIC* container = (sfntModulePIC*)pic_container->sfnt; 76c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 77c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 78c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) if ( container->sfnt_services ) 79c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Destroy_Class_sfnt_services( library, 80c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) container->sfnt_services ); 81fb429ec409348501f6ab1932b39ee2d612723198Oran Agra container->sfnt_services = NULL; 82665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg 83c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) if ( container->tt_cmap_classes ) 84c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Destroy_Class_tt_cmap_classes( library, 85c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) container->tt_cmap_classes ); 86fb429ec409348501f6ab1932b39ee2d612723198Oran Agra container->tt_cmap_classes = NULL; 87665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg 88fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_FREE( container ); 89fb429ec409348501f6ab1932b39ee2d612723198Oran Agra pic_container->sfnt = NULL; 90fb429ec409348501f6ab1932b39ee2d612723198Oran Agra } 91fb429ec409348501f6ab1932b39ee2d612723198Oran Agra } 92fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 93fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 94fb429ec409348501f6ab1932b39ee2d612723198Oran Agra FT_Error 955ea06ce0174a95f48b28efdba297672ae5d89981Werner Lemberg sfnt_module_class_pic_init( FT_Library library ) 96fb429ec409348501f6ab1932b39ee2d612723198Oran Agra { 97f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg FT_PIC_Container* pic_container = &library->pic_container; 98e3c9301581a450fae5db73a3b94b10ed6a0aeb5eWerner Lemberg FT_Error error = FT_Err_Ok; 99328aa3b203fc061c207fb01e9cbabea7cb3c9272Werner Lemberg sfntModulePIC* container = NULL; 100665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg FT_Memory memory = library->memory; 101f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg 102fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 103fb429ec409348501f6ab1932b39ee2d612723198Oran Agra /* allocate pointer, clear and set global container pointer */ 1045ea06ce0174a95f48b28efdba297672ae5d89981Werner Lemberg if ( FT_ALLOC( container, sizeof ( *container ) ) ) 105fb429ec409348501f6ab1932b39ee2d612723198Oran Agra return error; 106f765e4403cae51d2b0f5e603eb3993c05fcb4fdaWerner Lemberg FT_MEM_SET( container, 0, sizeof ( *container ) ); 107fb429ec409348501f6ab1932b39ee2d612723198Oran Agra pic_container->sfnt = container; 108fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 109665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg /* initialize pointer table - */ 110665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg /* this is how the module usually expects this data */ 111c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) error = FT_Create_Class_sfnt_services( library, 112c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) &container->sfnt_services ); 113c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) if ( error ) 114fb429ec409348501f6ab1932b39ee2d612723198Oran Agra goto Exit; 115665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg 116c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) error = FT_Create_Class_tt_cmap_classes( library, 117c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) &container->tt_cmap_classes ); 118c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) if ( error ) 119fb429ec409348501f6ab1932b39ee2d612723198Oran Agra goto Exit; 120c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) 121c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_glyph_dict( 122c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) library, &container->sfnt_service_glyph_dict ); 123c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_ps_name( 124c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) library, &container->sfnt_service_ps_name ); 125c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_tt_service_get_cmap_info( 126c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) library, &container->tt_service_get_cmap_info ); 127c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_sfnt_table( 128c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) &container->sfnt_service_sfnt_table ); 129fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#ifdef TT_CONFIG_OPTION_BDF 130c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_service_bdf( &container->sfnt_service_bdf ); 131fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#endif 132c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) FT_Init_Class_sfnt_interface( library, &container->sfnt_interface ); 133fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 134665c65bf86f625b329d9290bd4aae45415443b97Werner Lemberg Exit: 135c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) if ( error ) 136c24f77ac766092b31617f030e08f5fcbeb08509bSuzuki, Toshiya (鈴木俊哉) sfnt_module_class_pic_free( library ); 137fb429ec409348501f6ab1932b39ee2d612723198Oran Agra return error; 138fb429ec409348501f6ab1932b39ee2d612723198Oran Agra } 139fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 140fb429ec409348501f6ab1932b39ee2d612723198Oran Agra#endif /* FT_CONFIG_OPTION_PIC */ 141fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 142fb429ec409348501f6ab1932b39ee2d612723198Oran Agra 143fb429ec409348501f6ab1932b39ee2d612723198Oran Agra/* END */ 144