add SDL2_ttf support
[platform/upstream/SDL.git] / extension / SDL2_ttf-2.0.14 / external / freetype-2.4.12 / src / autofit / afindic.c
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 */