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 */ |