Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  afpic.c                                                                */
  4. /*                                                                         */
  5. /*    The FreeType position independent code services for autofit module.  */
  6. /*                                                                         */
  7. /*  Copyright 2009-2013 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. #include "aferrors.h"
  24.  
  25.  
  26. #ifdef FT_CONFIG_OPTION_PIC
  27.  
  28.   /* forward declaration of PIC init functions from afmodule.c */
  29.   FT_Error
  30.   FT_Create_Class_af_services( FT_Library           library,
  31.                                FT_ServiceDescRec**  output_class );
  32.  
  33.   void
  34.   FT_Destroy_Class_af_services( FT_Library          library,
  35.                                 FT_ServiceDescRec*  clazz );
  36.  
  37.   void
  38.   FT_Init_Class_af_service_properties( FT_Service_PropertiesRec*  clazz );
  39.  
  40.   void FT_Init_Class_af_autofitter_interface(
  41.     FT_Library                   library,
  42.     FT_AutoHinter_InterfaceRec*  clazz );
  43.  
  44.  
  45.   /* forward declaration of PIC init functions from script classes */
  46. #include "aflatin.h"
  47. #ifdef FT_OPTION_AUTOFIT2
  48. #include "aflatin2.h"
  49. #endif
  50. #include "afcjk.h"
  51. #include "afdummy.h"
  52. #include "afindic.h"
  53.  
  54.  
  55.   void
  56.   autofit_module_class_pic_free( FT_Library  library )
  57.   {
  58.     FT_PIC_Container*  pic_container = &library->pic_container;
  59.     FT_Memory          memory        = library->memory;
  60.  
  61.  
  62.     if ( pic_container->autofit )
  63.     {
  64.       AFModulePIC*  container = (AFModulePIC*)pic_container->autofit;
  65.  
  66.  
  67.       if ( container->af_services )
  68.         FT_Destroy_Class_af_services( library,
  69.                                       container->af_services );
  70.       container->af_services = NULL;
  71.  
  72.       FT_FREE( container );
  73.       pic_container->autofit = NULL;
  74.     }
  75.   }
  76.  
  77.  
  78.   FT_Error
  79.   autofit_module_class_pic_init( FT_Library  library )
  80.   {
  81.     FT_PIC_Container*  pic_container = &library->pic_container;
  82.     FT_UInt            ss;
  83.     FT_Error           error         = FT_Err_Ok;
  84.     AFModulePIC*       container     = NULL;
  85.     FT_Memory          memory        = library->memory;
  86.  
  87.  
  88.     /* allocate pointer, clear and set global container pointer */
  89.     if ( FT_ALLOC ( container, sizeof ( *container ) ) )
  90.       return error;
  91.     FT_MEM_SET( container, 0, sizeof ( *container ) );
  92.     pic_container->autofit = container;
  93.  
  94.     /* initialize pointer table -                       */
  95.     /* this is how the module usually expects this data */
  96.     error = FT_Create_Class_af_services( library,
  97.                                          &container->af_services );
  98.     if ( error )
  99.       goto Exit;
  100.  
  101.     FT_Init_Class_af_service_properties( &container->af_service_properties );
  102.  
  103.     for ( ss = 0 ; ss < AF_SCRIPT_CLASSES_REC_COUNT ; ss++ )
  104.     {
  105.       container->af_script_classes[ss] =
  106.         &container->af_script_classes_rec[ss];
  107.     }
  108.     container->af_script_classes[AF_SCRIPT_CLASSES_COUNT - 1] = NULL;
  109.  
  110.     /* add call to initialization function when you add new scripts */
  111.     ss = 0;
  112.     FT_Init_Class_af_dummy_script_class(
  113.       &container->af_script_classes_rec[ss++] );
  114. #ifdef FT_OPTION_AUTOFIT2
  115.     FT_Init_Class_af_latin2_script_class(
  116.       &container->af_script_classes_rec[ss++] );
  117. #endif
  118.     FT_Init_Class_af_latin_script_class(
  119.       &container->af_script_classes_rec[ss++] );
  120.     FT_Init_Class_af_cjk_script_class(
  121.       &container->af_script_classes_rec[ss++] );
  122.     FT_Init_Class_af_indic_script_class(
  123.       &container->af_script_classes_rec[ss++] );
  124.  
  125.     FT_Init_Class_af_autofitter_interface(
  126.       library, &container->af_autofitter_interface );
  127.  
  128.   Exit:
  129.     if ( error )
  130.       autofit_module_class_pic_free( library );
  131.     return error;
  132.   }
  133.  
  134. #endif /* FT_CONFIG_OPTION_PIC */
  135.  
  136.  
  137. /* END */
  138.