1295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/***************************************************************************/ 2295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* */ 3295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* cffpic.c */ 4295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* */ 5295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* The FreeType position independent code services for cff module. */ 6295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* */ 7a2527749993cb7f25560e4b1266787f1874435d4Jungshik Shin/* Copyright 2009-2017 by */ 8295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* Oran Agra and Mickey Gabel. */ 9295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* */ 10295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* This file is part of the FreeType project, and may only be used, */ 11295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* modified, and distributed under the terms of the FreeType project */ 12295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* this file you indicate that you have read the license and */ 14295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* understand and accept it fully. */ 15295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* */ 16295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/***************************************************************************/ 17295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 18295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 19295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include <ft2build.h> 20295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include FT_FREETYPE_H 21295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include FT_INTERNAL_OBJECTS_H 2241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#include "cffcmap.h" 23295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include "cffpic.h" 2441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#include "cfferrs.h" 25295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 26727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 27295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifdef FT_CONFIG_OPTION_PIC 28295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 29295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* forward declaration of PIC init functions from cffdrivr.c */ 3041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Error 31727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Create_Class_cff_services( FT_Library library, 32727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_ServiceDescRec** output_class ); 3341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier void 34727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Destroy_Class_cff_services( FT_Library library, 35727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_ServiceDescRec* clazz ); 3641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier void 37727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Init_Class_cff_service_ps_info( FT_Library library, 38727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Service_PsInfoRec* clazz ); 3941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier void 40727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Init_Class_cff_service_glyph_dict( FT_Library library, 41727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Service_GlyphDictRec* clazz ); 4241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier void 43727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Init_Class_cff_service_ps_name( FT_Library library, 44727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Service_PsFontNameRec* clazz ); 4541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier void 46727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Init_Class_cff_service_get_cmap_info( FT_Library library, 47727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Service_TTCMapsRec* clazz ); 4841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier void 49727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Init_Class_cff_service_cid_info( FT_Library library, 50727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Service_CIDRec* clazz ); 51295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 52295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* forward declaration of PIC init functions from cffparse.c */ 5341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Error 54727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Create_Class_cff_field_handlers( FT_Library library, 55727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease CFF_Field_Handler** output_class ); 5641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier void 57727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Destroy_Class_cff_field_handlers( FT_Library library, 58727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease CFF_Field_Handler* clazz ); 59727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 60295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 61295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner void 6241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier cff_driver_class_pic_free( FT_Library library ) 63295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 6441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_PIC_Container* pic_container = &library->pic_container; 65727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Memory memory = library->memory; 6641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 6741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 68295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( pic_container->cff ) 69295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 70727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease CffModulePIC* container = (CffModulePIC*)pic_container->cff; 7141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 7241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 7341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( container->cff_services ) 7441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Destroy_Class_cff_services( library, 7541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier container->cff_services ); 76295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner container->cff_services = NULL; 7741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( container->cff_field_handlers ) 7841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Destroy_Class_cff_field_handlers( 7941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library, container->cff_field_handlers ); 80295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner container->cff_field_handlers = NULL; 81295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_FREE( container ); 82295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner pic_container->cff = NULL; 83295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 84295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 85295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 86aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich 87295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Error 88aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich cff_driver_class_pic_init( FT_Library library ) 89295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 90aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich FT_PIC_Container* pic_container = &library->pic_container; 91727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Error error = FT_Err_Ok; 92727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease CffModulePIC* container = NULL; 93aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich FT_Memory memory = library->memory; 94aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich 95295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 96295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* allocate pointer, clear and set global container pointer */ 97295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( FT_ALLOC ( container, sizeof ( *container ) ) ) 98295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return error; 99aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich FT_MEM_SET( container, 0, sizeof ( *container ) ); 100295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner pic_container->cff = container; 101295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 102727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* initialize pointer table - */ 103727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* this is how the module usually expects this data */ 10441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier error = FT_Create_Class_cff_services( library, 10541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier &container->cff_services ); 10641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( error ) 107295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner goto Exit; 108727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 10941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier error = FT_Create_Class_cff_field_handlers( 11041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library, &container->cff_field_handlers ); 11141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( error ) 112295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner goto Exit; 113727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 11441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Init_Class_cff_service_ps_info( 11541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library, &container->cff_service_ps_info ); 11641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Init_Class_cff_service_glyph_dict( 11741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library, &container->cff_service_glyph_dict ); 11841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Init_Class_cff_service_ps_name( 11941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library, &container->cff_service_ps_name ); 12041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Init_Class_cff_service_get_cmap_info( 12141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library, &container->cff_service_get_cmap_info ); 12241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Init_Class_cff_service_cid_info( 12341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library, &container->cff_service_cid_info ); 12441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Init_Class_cff_cmap_encoding_class_rec( 12541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library, &container->cff_cmap_encoding_class_rec ); 12641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Init_Class_cff_cmap_unicode_class_rec( 12741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library, &container->cff_cmap_unicode_class_rec ); 128727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 129727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease Exit: 13041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( error ) 13141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier cff_driver_class_pic_free( library ); 132295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return error; 133295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 134295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 135295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif /* FT_CONFIG_OPTION_PIC */ 136295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 137295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 138295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* END */ 139