PageRenderTime 11ms CodeModel.GetById 1ms app.highlight 7ms RepoModel.GetById 2ms app.codeStats 0ms

/src/freetype/src/autofit/afindic.c

https://bitbucket.org/cabalistic/ogredeps/
C | 155 lines | 87 code | 39 blank | 29 comment | 1 complexity | bacb34d7449735d7e7fe0f6eb29fe023 MD5 | raw file
  1/***************************************************************************/
  2/*                                                                         */
  3/*  afindic.c                                                              */
  4/*                                                                         */
  5/*    Auto-fitter hinting routines for Indic scripts (body).               */
  6/*                                                                         */
  7/*  Copyright 2007, 2011 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, 0x7530 );
 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 AF_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
120    sizeof ( AF_CJKMetricsRec ),
121
122    (AF_Script_InitMetricsFunc) af_indic_metrics_init,
123    (AF_Script_ScaleMetricsFunc)af_indic_metrics_scale,
124    (AF_Script_DoneMetricsFunc) NULL,
125
126    (AF_Script_InitHintsFunc)   af_indic_hints_init,
127    (AF_Script_ApplyHintsFunc)  af_indic_hints_apply
128  )
129
130#else /* !AF_CONFIG_OPTION_INDIC */
131
132  static const AF_Script_UniRangeRec  af_indic_uniranges[] =
133  {
134    { 0, 0 }
135  };
136
137
138  AF_DEFINE_SCRIPT_CLASS( af_indic_script_class,
139    AF_SCRIPT_INDIC,
140    af_indic_uniranges,
141
142    sizeof ( AF_CJKMetricsRec ),
143
144    (AF_Script_InitMetricsFunc) NULL,
145    (AF_Script_ScaleMetricsFunc)NULL,
146    (AF_Script_DoneMetricsFunc) NULL,
147
148    (AF_Script_InitHintsFunc)   NULL,
149    (AF_Script_ApplyHintsFunc)  NULL
150  )
151
152#endif /* !AF_CONFIG_OPTION_INDIC */
153
154
155/* END */