Home | History | Annotate | Download | only in autofit
      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