1 /***************************************************************************/ 2 /* */ 3 /* afpic.c */ 4 /* */ 5 /* The FreeType position independent code services for autofit module. */ 6 /* */ 7 /* Copyright 2009, 2010, 2011 by */ 8 /* Oran Agra and Mickey Gabel. */ 9 /* */ 10 /* This file is part of the FreeType project, and may only be used, */ 11 /* modified, and distributed under the terms of the FreeType project */ 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13 /* this file you indicate that you have read the license and */ 14 /* understand and accept it fully. */ 15 /* */ 16 /***************************************************************************/ 17 18 19 #include <ft2build.h> 20 #include FT_FREETYPE_H 21 #include FT_INTERNAL_OBJECTS_H 22 #include "afpic.h" 23 24 #ifdef FT_CONFIG_OPTION_PIC 25 26 /* forward declaration of PIC init functions from afmodule.c */ 27 void FT_Init_Class_af_autofitter_service( FT_Library, 28 FT_AutoHinter_ServiceRec* ); 29 30 /* forward declaration of PIC init functions from script classes */ 31 #include "aflatin.h" 32 #include "aflatin2.h" 33 #include "afcjk.h" 34 #include "afdummy.h" 35 #include "afindic.h" 36 37 void 38 autofit_module_class_pic_free( FT_Library library ) 39 { 40 FT_PIC_Container* pic_container = &library->pic_container; 41 FT_Memory memory = library->memory; 42 43 44 if ( pic_container->autofit ) 45 { 46 FT_FREE( pic_container->autofit ); 47 pic_container->autofit = NULL; 48 } 49 } 50 51 52 FT_Error 53 autofit_module_class_pic_init( FT_Library library ) 54 { 55 FT_PIC_Container* pic_container = &library->pic_container; 56 FT_UInt ss; 57 FT_Error error = AF_Err_Ok; 58 AFModulePIC* container; 59 FT_Memory memory = library->memory; 60 61 62 /* allocate pointer, clear and set global container pointer */ 63 if ( FT_ALLOC ( container, sizeof ( *container ) ) ) 64 return error; 65 FT_MEM_SET( container, 0, sizeof ( *container ) ); 66 pic_container->autofit = container; 67 68 /* initialize pointer table - */ 69 /* this is how the module usually expects this data */ 70 for ( ss = 0 ; ss < AF_SCRIPT_CLASSES_REC_COUNT ; ss++ ) 71 { 72 container->af_script_classes[ss] = 73 &container->af_script_classes_rec[ss]; 74 } 75 container->af_script_classes[AF_SCRIPT_CLASSES_COUNT - 1] = NULL; 76 77 /* add call to initialization function when you add new scripts */ 78 ss = 0; 79 FT_Init_Class_af_dummy_script_class( 80 &container->af_script_classes_rec[ss++] ); 81 #ifdef FT_OPTION_AUTOFIT2 82 FT_Init_Class_af_latin2_script_class( 83 &container->af_script_classes_rec[ss++] ); 84 #endif 85 FT_Init_Class_af_latin_script_class( 86 &container->af_script_classes_rec[ss++] ); 87 FT_Init_Class_af_cjk_script_class( 88 &container->af_script_classes_rec[ss++] ); 89 FT_Init_Class_af_indic_script_class( 90 &container->af_script_classes_rec[ss++] ); 91 92 FT_Init_Class_af_autofitter_service( 93 library, &container->af_autofitter_service ); 94 95 /* Exit: */ 96 97 if ( error ) 98 autofit_module_class_pic_free( library ); 99 return error; 100 } 101 102 103 #endif /* FT_CONFIG_OPTION_PIC */ 104 105 106 /* END */ 107