Subversion Repositories Kolibri OS

Rev

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

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  afindic.c                                                              */
  4. /*                                                                         */
  5. /*    Auto-fitter hinting routines for Indic scripts (body).               */
  6. /*                                                                         */
  7. /*  Copyright 2007, 2011-2013 by                                           */
  8. /*  Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>.    */
  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 "aftypes.h"
  20. #include "aflatin.h"
  21.  
  22.  
  23. #ifdef AF_CONFIG_OPTION_INDIC
  24.  
  25. #include "afindic.h"
  26. #include "aferrors.h"
  27. #include "afcjk.h"
  28.  
  29.  
  30. #ifdef AF_CONFIG_OPTION_USE_WARPER
  31. #include "afwarp.h"
  32. #endif
  33.  
  34.  
  35.   static FT_Error
  36.   af_indic_metrics_init( AF_CJKMetrics  metrics,
  37.                          FT_Face        face )
  38.   {
  39.     /* skip blue zone init in CJK routines */
  40.     FT_CharMap  oldmap = face->charmap;
  41.  
  42.  
  43.     metrics->units_per_em = face->units_per_EM;
  44.  
  45.     if ( FT_Select_Charmap( face, FT_ENCODING_UNICODE ) )
  46.       face->charmap = NULL;
  47.     else
  48.     {
  49.       af_cjk_metrics_init_widths( metrics, face );
  50. #if 0
  51.       /* either need indic specific blue_chars[] or just skip blue zones */
  52.       af_cjk_metrics_init_blues( metrics, face, af_cjk_blue_chars );
  53. #endif
  54.       af_cjk_metrics_check_digits( metrics, face );
  55.     }
  56.  
  57.     FT_Set_Charmap( face, oldmap );
  58.  
  59.     return FT_Err_Ok;
  60.   }
  61.  
  62.  
  63.   static void
  64.   af_indic_metrics_scale( AF_CJKMetrics  metrics,
  65.                           AF_Scaler      scaler )
  66.   {
  67.     /* use CJK routines */
  68.     af_cjk_metrics_scale( metrics, scaler );
  69.   }
  70.  
  71.  
  72.   static FT_Error
  73.   af_indic_hints_init( AF_GlyphHints  hints,
  74.                        AF_CJKMetrics  metrics )
  75.   {
  76.     /* use CJK routines */
  77.     return af_cjk_hints_init( hints, metrics );
  78.   }
  79.  
  80.  
  81.   static FT_Error
  82.   af_indic_hints_apply( AF_GlyphHints  hints,
  83.                         FT_Outline*    outline,
  84.                         AF_CJKMetrics  metrics )
  85.   {
  86.     /* use CJK routines */
  87.     return af_cjk_hints_apply( hints, outline, metrics );
  88.   }
  89.  
  90.  
  91.   /*************************************************************************/
  92.   /*************************************************************************/
  93.   /*****                                                               *****/
  94.   /*****                I N D I C   S C R I P T   C L A S S            *****/
  95.   /*****                                                               *****/
  96.   /*************************************************************************/
  97.   /*************************************************************************/
  98.  
  99.  
  100.   static const AF_Script_UniRangeRec  af_indic_uniranges[] =
  101.   {
  102. #if 0
  103.     AF_UNIRANGE_REC( 0x0100UL, 0xFFFFUL ),  /* why this? */
  104. #endif
  105.     AF_UNIRANGE_REC( 0x0900UL, 0x0DFFUL),    /* Indic Range */
  106.     AF_UNIRANGE_REC( 0x0F00UL, 0x0FFFUL),    /* Tibetan */
  107.     AF_UNIRANGE_REC( 0x1900UL, 0x194FUL),    /* Limbu */
  108.     AF_UNIRANGE_REC( 0x1B80UL, 0x1BBFUL),    /* Sundanese */
  109.     AF_UNIRANGE_REC( 0x1C80UL, 0x1CDFUL),    /* Meetei Mayak */
  110.     AF_UNIRANGE_REC( 0xA800UL, 0xA82FUL),    /* Syloti Nagri */
  111.     AF_UNIRANGE_REC( 0x11800UL, 0x118DFUL),  /* Sharada */
  112.     AF_UNIRANGE_REC(      0UL,      0UL)
  113.   };
  114.  
  115.  
  116.   AF_DEFINE_SCRIPT_CLASS( af_indic_script_class,
  117.     AF_SCRIPT_INDIC,
  118.     af_indic_uniranges,
  119.     'o', /* XXX */
  120.  
  121.     sizeof ( AF_CJKMetricsRec ),
  122.  
  123.     (AF_Script_InitMetricsFunc) af_indic_metrics_init,
  124.     (AF_Script_ScaleMetricsFunc)af_indic_metrics_scale,
  125.     (AF_Script_DoneMetricsFunc) NULL,
  126.  
  127.     (AF_Script_InitHintsFunc)   af_indic_hints_init,
  128.     (AF_Script_ApplyHintsFunc)  af_indic_hints_apply
  129.   )
  130.  
  131. #else /* !AF_CONFIG_OPTION_INDIC */
  132.  
  133.   static const AF_Script_UniRangeRec  af_indic_uniranges[] =
  134.   {
  135.     { 0, 0 }
  136.   };
  137.  
  138.  
  139.   AF_DEFINE_SCRIPT_CLASS( af_indic_script_class,
  140.     AF_SCRIPT_INDIC,
  141.     af_indic_uniranges,
  142.     0,
  143.  
  144.     sizeof ( AF_CJKMetricsRec ),
  145.  
  146.     (AF_Script_InitMetricsFunc) NULL,
  147.     (AF_Script_ScaleMetricsFunc)NULL,
  148.     (AF_Script_DoneMetricsFunc) NULL,
  149.  
  150.     (AF_Script_InitHintsFunc)   NULL,
  151.     (AF_Script_ApplyHintsFunc)  NULL
  152.   )
  153.  
  154. #endif /* !AF_CONFIG_OPTION_INDIC */
  155.  
  156.  
  157. /* END */
  158.