Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
4349 Serge 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 , .    */
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 */