Home | History | Annotate | Download | only in autofit
      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 (at) redhat.com>, <b.rahul.pm (at) 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