c8ebf5e784907e11fa225e16e85169e03c1fb11e
[platform/upstream/freetype2.git] / src / autofit / afranges.c
1 /****************************************************************************
2  *
3  * afranges.c
4  *
5  *   Auto-fitter Unicode script ranges (body).
6  *
7  * Copyright (C) 2013-2020 by
8  * David Turner, Robert Wilhelm, and Werner Lemberg.
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 "afranges.h"
20
21   /*
22    * The algorithm for assigning properties and styles to the `glyph_styles'
23    * array is as follows (cf. the implementation in
24    * `af_face_globals_compute_style_coverage').
25    *
26    *   Walk over all scripts (as listed in `afscript.h').
27    *
28    *   For a given script, walk over all styles (as listed in `afstyles.h').
29    *   The order of styles is important and should be as follows.
30    *
31    *   - First come styles based on OpenType features (small caps, for
32    *     example).  Since features rely on glyph indices, thus completely
33    *     bypassing character codes, no properties are assigned.
34    *
35    *   - Next comes the default style, using the character ranges as defined
36    *     below.  This also assigns properties.
37    *
38    *   Note that there also exist fallback scripts, mainly covering
39    *   superscript and subscript glyphs of a script that are not present as
40    *   OpenType features.  Fallback scripts are defined below, also
41    *   assigning properties; they are applied after the corresponding
42    *   script.
43    *
44    */
45
46
47   /* XXX Check base character ranges again:                        */
48   /*     Right now, they are quickly derived by visual inspection. */
49   /*     I can imagine that fine-tuning is necessary.              */
50
51   /* for the auto-hinter, a `non-base character' is something that should */
52   /* not be affected by blue zones, regardless of whether this is a       */
53   /* spacing or no-spacing glyph                                          */
54
55   /* the `af_xxxx_nonbase_uniranges' ranges must be strict subsets */
56   /* of the corresponding `af_xxxx_uniranges' ranges               */
57
58
59   const AF_Script_UniRangeRec  af_adlm_uniranges[] =
60   {
61     AF_UNIRANGE_REC( 0x1E900, 0x1E95F ),   /* Adlam */
62     AF_UNIRANGE_REC(       0,       0 )
63   };
64
65   const AF_Script_UniRangeRec  af_adlm_nonbase_uniranges[] =
66   {
67     AF_UNIRANGE_REC( 0x1D944, 0x1E94A ),
68     AF_UNIRANGE_REC(       0,       0 )
69   };
70
71
72   const AF_Script_UniRangeRec  af_arab_uniranges[] =
73   {
74     AF_UNIRANGE_REC(  0x0600,  0x06FF ),  /* Arabic                                 */
75     AF_UNIRANGE_REC(  0x0750,  0x07FF ),  /* Arabic Supplement                      */
76     AF_UNIRANGE_REC(  0x08A0,  0x08FF ),  /* Arabic Extended-A                      */
77     AF_UNIRANGE_REC(  0xFB50,  0xFDFF ),  /* Arabic Presentation Forms-A            */
78     AF_UNIRANGE_REC(  0xFE70,  0xFEFF ),  /* Arabic Presentation Forms-B            */
79     AF_UNIRANGE_REC( 0x1EE00, 0x1EEFF ),  /* Arabic Mathematical Alphabetic Symbols */
80     AF_UNIRANGE_REC(       0,       0 )
81   };
82
83   const AF_Script_UniRangeRec  af_arab_nonbase_uniranges[] =
84   {
85     AF_UNIRANGE_REC(  0x0600,  0x0605 ),
86     AF_UNIRANGE_REC(  0x0610,  0x061A ),
87     AF_UNIRANGE_REC(  0x064B,  0x065F ),
88     AF_UNIRANGE_REC(  0x0670,  0x0670 ),
89     AF_UNIRANGE_REC(  0x06D6,  0x06DC ),
90     AF_UNIRANGE_REC(  0x06DF,  0x06E4 ),
91     AF_UNIRANGE_REC(  0x06E7,  0x06E8 ),
92     AF_UNIRANGE_REC(  0x06EA,  0x06ED ),
93     AF_UNIRANGE_REC(  0x08D4,  0x08E1 ),
94     AF_UNIRANGE_REC(  0x08D3,  0x08FF ),
95     AF_UNIRANGE_REC(  0xFBB2,  0xFBC1 ),
96     AF_UNIRANGE_REC(  0xFE70,  0xFE70 ),
97     AF_UNIRANGE_REC(  0xFE72,  0xFE72 ),
98     AF_UNIRANGE_REC(  0xFE74,  0xFE74 ),
99     AF_UNIRANGE_REC(  0xFE76,  0xFE76 ),
100     AF_UNIRANGE_REC(  0xFE78,  0xFE78 ),
101     AF_UNIRANGE_REC(  0xFE7A,  0xFE7A ),
102     AF_UNIRANGE_REC(  0xFE7C,  0xFE7C ),
103     AF_UNIRANGE_REC(  0xFE7E,  0xFE7E ),
104     AF_UNIRANGE_REC(       0,       0 )
105   };
106
107
108   const AF_Script_UniRangeRec  af_armn_uniranges[] =
109   {
110     AF_UNIRANGE_REC(  0x0530,  0x058F ),  /* Armenian                          */
111     AF_UNIRANGE_REC(  0xFB13,  0xFB17 ),  /* Alphab. Present. Forms (Armenian) */
112     AF_UNIRANGE_REC(       0,       0 )
113   };
114
115   const AF_Script_UniRangeRec  af_armn_nonbase_uniranges[] =
116   {
117     AF_UNIRANGE_REC(  0x0559,  0x055F ),
118     AF_UNIRANGE_REC(       0,       0 )
119   };
120
121
122   const AF_Script_UniRangeRec  af_avst_uniranges[] =
123   {
124     AF_UNIRANGE_REC( 0x10B00,  0x10B3F ),  /* Avestan */
125     AF_UNIRANGE_REC(       0,        0 )
126   };
127
128   const AF_Script_UniRangeRec  af_avst_nonbase_uniranges[] =
129   {
130     AF_UNIRANGE_REC( 0x10B39,  0x10B3F ),
131     AF_UNIRANGE_REC(       0,        0 )
132   };
133
134
135   const AF_Script_UniRangeRec  af_bamu_uniranges[] =
136   {
137     AF_UNIRANGE_REC( 0xA6A0,   0xA6FF ),   /* Bamum */
138 #if 0
139     /* The characters in the Bamum supplement are pictograms, */
140     /* not (directly) related to the syllabic Bamum script    */
141     AF_UNIRANGE_REC( 0x16800, 0x16A3F ),   /* Bamum Supplement */
142 #endif
143     AF_UNIRANGE_REC(       0,       0 )
144   };
145
146   const AF_Script_UniRangeRec  af_bamu_nonbase_uniranges[] =
147   {
148     AF_UNIRANGE_REC(  0xA6F0,  0xA6F1 ),
149     AF_UNIRANGE_REC(       0,       0 )
150   };
151
152
153   const AF_Script_UniRangeRec  af_beng_uniranges[] =
154   {
155     AF_UNIRANGE_REC(  0x0980,  0x09FF ),  /* Bengali */
156     AF_UNIRANGE_REC(       0,       0 )
157   };
158
159   const AF_Script_UniRangeRec  af_beng_nonbase_uniranges[] =
160   {
161     AF_UNIRANGE_REC(  0x0981,  0x0981 ),
162     AF_UNIRANGE_REC(  0x09BC,  0x09BC ),
163     AF_UNIRANGE_REC(  0x09C1,  0x09C4 ),
164     AF_UNIRANGE_REC(  0x09CD,  0x09CD ),
165     AF_UNIRANGE_REC(  0x09E2,  0x09E3 ),
166     AF_UNIRANGE_REC(  0x09FE,  0x09FE ),
167     AF_UNIRANGE_REC(       0,       0 )
168   };
169
170
171   const AF_Script_UniRangeRec  af_buhd_uniranges[] =
172   {
173     AF_UNIRANGE_REC(  0x1740,  0x175F ),   /* Buhid */
174     AF_UNIRANGE_REC(       0,       0 )
175   };
176
177   const AF_Script_UniRangeRec  af_buhd_nonbase_uniranges[] =
178   {
179     AF_UNIRANGE_REC(  0x1752,  0x1753 ),
180     AF_UNIRANGE_REC(       0,       0 )
181   };
182
183
184   const AF_Script_UniRangeRec  af_cakm_uniranges[] =
185   {
186     AF_UNIRANGE_REC( 0x11100, 0x1114F ),   /* Chakma */
187     AF_UNIRANGE_REC(       0,       0 )
188   };
189
190   const AF_Script_UniRangeRec  af_cakm_nonbase_uniranges[] =
191   {
192     AF_UNIRANGE_REC( 0x11100, 0x11102 ),
193     AF_UNIRANGE_REC( 0x11127, 0x11134 ),
194     AF_UNIRANGE_REC( 0x11146, 0x11146 ),
195     AF_UNIRANGE_REC(       0,       0 )
196   };
197
198
199   const AF_Script_UniRangeRec  af_cans_uniranges[] =
200   {
201     AF_UNIRANGE_REC(  0x1400,  0x167F ), /* Unified Canadian Aboriginal Syllabics          */
202     AF_UNIRANGE_REC(  0x18B0,  0x18FF ), /* Unified Canadian Aboriginal Syllabics Extended */
203     AF_UNIRANGE_REC(       0,       0 )
204   };
205
206   const AF_Script_UniRangeRec  af_cans_nonbase_uniranges[] =
207   {
208     AF_UNIRANGE_REC( 0, 0 )
209   };
210
211
212   const AF_Script_UniRangeRec  af_cari_uniranges[] =
213   {
214     AF_UNIRANGE_REC( 0x102A0, 0x102DF ),   /* Carian */
215     AF_UNIRANGE_REC(       0,       0 )
216   };
217
218   const AF_Script_UniRangeRec  af_cari_nonbase_uniranges[] =
219   {
220     AF_UNIRANGE_REC( 0, 0 )
221   };
222
223
224   const AF_Script_UniRangeRec  af_cher_uniranges[] =
225   {
226     AF_UNIRANGE_REC(  0x13A0,  0x13FF ),  /* Cherokee            */
227     AF_UNIRANGE_REC(  0xAB70,  0xABBF ),  /* Cherokee Supplement */
228     AF_UNIRANGE_REC(       0,       0 )
229   };
230
231   const AF_Script_UniRangeRec  af_cher_nonbase_uniranges[] =
232   {
233     AF_UNIRANGE_REC( 0, 0 )
234   };
235
236
237   const AF_Script_UniRangeRec  af_copt_uniranges[] =
238   {
239     AF_UNIRANGE_REC(  0x2C80,  0x2CFF ),   /* Coptic */
240     AF_UNIRANGE_REC(       0,       0 )
241   };
242
243   const AF_Script_UniRangeRec  af_copt_nonbase_uniranges[] =
244   {
245     AF_UNIRANGE_REC(  0x2CEF,  0x2CF1 ),
246     AF_UNIRANGE_REC(       0,       0 )
247   };
248
249
250   const AF_Script_UniRangeRec  af_cprt_uniranges[] =
251   {
252     AF_UNIRANGE_REC( 0x10800, 0x1083F ),   /* Cypriot */
253     AF_UNIRANGE_REC(       0,       0 )
254   };
255
256   const AF_Script_UniRangeRec  af_cprt_nonbase_uniranges[] =
257   {
258     AF_UNIRANGE_REC( 0, 0 )
259   };
260
261
262   const AF_Script_UniRangeRec  af_cyrl_uniranges[] =
263   {
264     AF_UNIRANGE_REC(  0x0400,  0x04FF ),  /* Cyrillic            */
265     AF_UNIRANGE_REC(  0x0500,  0x052F ),  /* Cyrillic Supplement */
266     AF_UNIRANGE_REC(  0x2DE0,  0x2DFF ),  /* Cyrillic Extended-A */
267     AF_UNIRANGE_REC(  0xA640,  0xA69F ),  /* Cyrillic Extended-B */
268     AF_UNIRANGE_REC(  0x1C80,  0x1C8F ),  /* Cyrillic Extended-C */
269     AF_UNIRANGE_REC(       0,       0 )
270   };
271
272   const AF_Script_UniRangeRec  af_cyrl_nonbase_uniranges[] =
273   {
274     AF_UNIRANGE_REC(  0x0483,  0x0489 ),
275     AF_UNIRANGE_REC(  0x2DE0,  0x2DFF ),
276     AF_UNIRANGE_REC(  0xA66F,  0xA67F ),
277     AF_UNIRANGE_REC(  0xA69E,  0xA69F ),
278     AF_UNIRANGE_REC(       0,       0 )
279   };
280
281
282   /* There are some characters in the Devanagari Unicode block that are    */
283   /* generic to Indic scripts; we omit them so that their presence doesn't */
284   /* trigger Devanagari.                                                   */
285
286   const AF_Script_UniRangeRec  af_deva_uniranges[] =
287   {
288     AF_UNIRANGE_REC(  0x0900,  0x093B ),  /* Devanagari          */
289     /* omitting U+093C nukta */
290     AF_UNIRANGE_REC(  0x093D,  0x0950 ),  /* ... continued       */
291     /* omitting U+0951 udatta, U+0952 anudatta */
292     AF_UNIRANGE_REC(  0x0953,  0x0963 ),  /* ... continued       */
293     /* omitting U+0964 danda, U+0965 double danda */
294     AF_UNIRANGE_REC(  0x0966,  0x097F ),  /* ... continued       */
295     AF_UNIRANGE_REC(  0x20B9,  0x20B9 ),  /* (new) Rupee sign    */
296     AF_UNIRANGE_REC(  0xA8E0,  0xA8FF ),  /* Devanagari Extended */
297     AF_UNIRANGE_REC(       0,       0 )
298   };
299
300   const AF_Script_UniRangeRec  af_deva_nonbase_uniranges[] =
301   {
302     AF_UNIRANGE_REC(  0x0900,  0x0902 ),
303     AF_UNIRANGE_REC(  0x093A,  0x093A ),
304     AF_UNIRANGE_REC(  0x0941,  0x0948 ),
305     AF_UNIRANGE_REC(  0x094D,  0x094D ),
306     AF_UNIRANGE_REC(  0x0953,  0x0957 ),
307     AF_UNIRANGE_REC(  0x0962,  0x0963 ),
308     AF_UNIRANGE_REC(  0xA8E0,  0xA8F1 ),
309     AF_UNIRANGE_REC(  0xA8FF,  0xA8FF ),
310     AF_UNIRANGE_REC(       0,       0 )
311   };
312
313
314   const AF_Script_UniRangeRec  af_dsrt_uniranges[] =
315   {
316     AF_UNIRANGE_REC( 0x10400, 0x1044F ),  /* Deseret */
317     AF_UNIRANGE_REC(       0,       0 )
318   };
319
320   const AF_Script_UniRangeRec  af_dsrt_nonbase_uniranges[] =
321   {
322     AF_UNIRANGE_REC( 0, 0 )
323   };
324
325
326   const AF_Script_UniRangeRec  af_ethi_uniranges[] =
327   {
328     AF_UNIRANGE_REC(  0x1200,  0x137F ),  /* Ethiopic            */
329     AF_UNIRANGE_REC(  0x1380,  0x139F ),  /* Ethiopic Supplement */
330     AF_UNIRANGE_REC(  0x2D80,  0x2DDF ),  /* Ethiopic Extended   */
331     AF_UNIRANGE_REC(  0xAB00,  0xAB2F ),  /* Ethiopic Extended-A */
332     AF_UNIRANGE_REC(       0,       0 )
333   };
334
335   const AF_Script_UniRangeRec  af_ethi_nonbase_uniranges[] =
336   {
337     AF_UNIRANGE_REC(  0x135D,  0x135F ),
338     AF_UNIRANGE_REC(       0,       0 )
339   };
340
341
342   const AF_Script_UniRangeRec  af_geor_uniranges[] =
343   {
344     AF_UNIRANGE_REC(  0x10D0,  0x10FF ),  /* Georgian (Mkhedruli)          */
345     AF_UNIRANGE_REC(  0x1C90,  0x1CBF ),  /* Georgian Extended (Mtavruli)  */
346     AF_UNIRANGE_REC(       0,       0 )
347   };
348
349   const AF_Script_UniRangeRec  af_geor_nonbase_uniranges[] =
350   {
351     AF_UNIRANGE_REC( 0, 0 )
352   };
353
354
355   const AF_Script_UniRangeRec  af_geok_uniranges[] =
356   {
357     /* Khutsuri */
358     AF_UNIRANGE_REC(  0x10A0,  0x10CD ),  /* Georgian (Asomtavruli)         */
359     AF_UNIRANGE_REC(  0x2D00,  0x2D2D ),  /* Georgian Supplement (Nuskhuri) */
360     AF_UNIRANGE_REC(       0,       0 )
361   };
362
363   const AF_Script_UniRangeRec  af_geok_nonbase_uniranges[] =
364   {
365     AF_UNIRANGE_REC( 0, 0 )
366   };
367
368
369   const AF_Script_UniRangeRec  af_glag_uniranges[] =
370   {
371     AF_UNIRANGE_REC(  0x2C00,  0x2C5F ),  /* Glagolitic */
372     AF_UNIRANGE_REC( 0x1E000, 0x1E02F ),  /* Glagolitic Supplement */
373     AF_UNIRANGE_REC(       0,       0 )
374   };
375
376   const AF_Script_UniRangeRec  af_glag_nonbase_uniranges[] =
377   {
378     AF_UNIRANGE_REC( 0x1E000, 0x1E02F ),
379     AF_UNIRANGE_REC(       0,       0 )
380   };
381
382
383   const AF_Script_UniRangeRec  af_goth_uniranges[] =
384   {
385     AF_UNIRANGE_REC( 0x10330, 0x1034F ),   /* Gothic */
386     AF_UNIRANGE_REC(       0,       0 )
387   };
388
389   const AF_Script_UniRangeRec  af_goth_nonbase_uniranges[] =
390   {
391     AF_UNIRANGE_REC( 0, 0 )
392   };
393
394
395   const AF_Script_UniRangeRec  af_grek_uniranges[] =
396   {
397     AF_UNIRANGE_REC(  0x0370,  0x03FF ),  /* Greek and Coptic */
398     AF_UNIRANGE_REC(  0x1F00,  0x1FFF ),  /* Greek Extended   */
399     AF_UNIRANGE_REC(       0,       0 )
400   };
401
402   const AF_Script_UniRangeRec  af_grek_nonbase_uniranges[] =
403   {
404     AF_UNIRANGE_REC(  0x037A,  0x037A ),
405     AF_UNIRANGE_REC(  0x0384,  0x0385 ),
406     AF_UNIRANGE_REC(  0x1FBD,  0x1FC1 ),
407     AF_UNIRANGE_REC(  0x1FCD,  0x1FCF ),
408     AF_UNIRANGE_REC(  0x1FDD,  0x1FDF ),
409     AF_UNIRANGE_REC(  0x1FED,  0x1FEF ),
410     AF_UNIRANGE_REC(  0x1FFD,  0x1FFE ),
411     AF_UNIRANGE_REC(       0,       0 )
412   };
413
414
415   const AF_Script_UniRangeRec  af_gujr_uniranges[] =
416   {
417     AF_UNIRANGE_REC(  0x0A80,  0x0AFF ),  /* Gujarati */
418     AF_UNIRANGE_REC(       0,       0 )
419   };
420
421   const AF_Script_UniRangeRec  af_gujr_nonbase_uniranges[] =
422   {
423     AF_UNIRANGE_REC(  0x0A81,  0x0A82 ),
424     AF_UNIRANGE_REC(  0x0ABC,  0x0ABC ),
425     AF_UNIRANGE_REC(  0x0AC1,  0x0AC8 ),
426     AF_UNIRANGE_REC(  0x0ACD,  0x0ACD ),
427     AF_UNIRANGE_REC(  0x0AE2,  0x0AE3 ),
428     AF_UNIRANGE_REC(  0x0AFA,  0x0AFF ),
429     AF_UNIRANGE_REC(       0,       0 )
430   };
431
432
433   const AF_Script_UniRangeRec  af_guru_uniranges[] =
434   {
435     AF_UNIRANGE_REC(  0x0A00,  0x0A7F ),  /* Gurmukhi */
436     AF_UNIRANGE_REC(       0,       0 )
437   };
438
439   const AF_Script_UniRangeRec  af_guru_nonbase_uniranges[] =
440   {
441     AF_UNIRANGE_REC(  0x0A01,  0x0A02 ),
442     AF_UNIRANGE_REC(  0x0A3C,  0x0A3C ),
443     AF_UNIRANGE_REC(  0x0A41,  0x0A51 ),
444     AF_UNIRANGE_REC(  0x0A70,  0x0A71 ),
445     AF_UNIRANGE_REC(  0x0A75,  0x0A75 ),
446     AF_UNIRANGE_REC(       0,       0 )
447   };
448
449
450   const AF_Script_UniRangeRec  af_hebr_uniranges[] =
451   {
452     AF_UNIRANGE_REC(  0x0590,  0x05FF ),  /* Hebrew                          */
453     AF_UNIRANGE_REC(  0xFB1D,  0xFB4F ),  /* Alphab. Present. Forms (Hebrew) */
454     AF_UNIRANGE_REC(       0,       0 )
455   };
456
457   const AF_Script_UniRangeRec  af_hebr_nonbase_uniranges[] =
458   {
459     AF_UNIRANGE_REC(  0x0591,  0x05BF ),
460     AF_UNIRANGE_REC(  0x05C1,  0x05C2 ),
461     AF_UNIRANGE_REC(  0x05C4,  0x05C5 ),
462     AF_UNIRANGE_REC(  0x05C7,  0x05C7 ),
463     AF_UNIRANGE_REC(  0xFB1E,  0xFB1E ),
464     AF_UNIRANGE_REC(       0,       0 )
465   };
466
467
468   const AF_Script_UniRangeRec  af_kali_uniranges[] =
469   {
470     AF_UNIRANGE_REC(  0xA900,  0xA92F ),   /* Kayah Li */
471     AF_UNIRANGE_REC(       0,       0 )
472   };
473
474   const AF_Script_UniRangeRec  af_kali_nonbase_uniranges[] =
475   {
476     AF_UNIRANGE_REC(  0xA926,  0xA92D ),
477     AF_UNIRANGE_REC(       0,       0 )
478   };
479
480
481   const AF_Script_UniRangeRec  af_knda_uniranges[] =
482   {
483     AF_UNIRANGE_REC(  0x0C80,  0x0CFF ),  /* Kannada */
484     AF_UNIRANGE_REC(       0,       0 )
485   };
486
487   const AF_Script_UniRangeRec  af_knda_nonbase_uniranges[] =
488   {
489     AF_UNIRANGE_REC(  0x0C81,  0x0C81 ),
490     AF_UNIRANGE_REC(  0x0CBC,  0x0CBC ),
491     AF_UNIRANGE_REC(  0x0CBF,  0x0CBF ),
492     AF_UNIRANGE_REC(  0x0CC6,  0x0CC6 ),
493     AF_UNIRANGE_REC(  0x0CCC,  0x0CCD ),
494     AF_UNIRANGE_REC(  0x0CE2,  0x0CE3 ),
495     AF_UNIRANGE_REC(       0,       0 )
496   };
497
498
499   const AF_Script_UniRangeRec  af_khmr_uniranges[] =
500   {
501     AF_UNIRANGE_REC(  0x1780,  0x17FF ),  /* Khmer */
502     AF_UNIRANGE_REC(       0,       0 )
503   };
504
505   const AF_Script_UniRangeRec  af_khmr_nonbase_uniranges[] =
506   {
507     AF_UNIRANGE_REC(  0x17B7,  0x17BD ),
508     AF_UNIRANGE_REC(  0x17C6,  0x17C6 ),
509     AF_UNIRANGE_REC(  0x17C9,  0x17D3 ),
510     AF_UNIRANGE_REC(  0x17DD,  0x17DD ),
511     AF_UNIRANGE_REC(       0,       0 )
512   };
513
514
515   const AF_Script_UniRangeRec  af_khms_uniranges[] =
516   {
517     AF_UNIRANGE_REC(  0x19E0,  0x19FF ),  /* Khmer Symbols */
518     AF_UNIRANGE_REC(       0,       0 )
519   };
520
521   const AF_Script_UniRangeRec  af_khms_nonbase_uniranges[] =
522   {
523     AF_UNIRANGE_REC( 0, 0 )
524   };
525
526
527   const AF_Script_UniRangeRec  af_lao_uniranges[] =
528   {
529     AF_UNIRANGE_REC(  0x0E80,  0x0EFF ),  /* Lao */
530     AF_UNIRANGE_REC(       0,       0 )
531   };
532
533   const AF_Script_UniRangeRec  af_lao_nonbase_uniranges[] =
534   {
535     AF_UNIRANGE_REC(  0x0EB1,  0x0EB1 ),
536     AF_UNIRANGE_REC(  0x0EB4,  0x0EBC ),
537     AF_UNIRANGE_REC(  0x0EC8,  0x0ECD ),
538     AF_UNIRANGE_REC(       0,       0 )
539   };
540
541
542   const AF_Script_UniRangeRec  af_latn_uniranges[] =
543   {
544     AF_UNIRANGE_REC(  0x0020,  0x007F ),  /* Basic Latin (no control chars)         */
545     AF_UNIRANGE_REC(  0x00A0,  0x00A9 ),  /* Latin-1 Supplement (no control chars)  */
546     AF_UNIRANGE_REC(  0x00AB,  0x00B1 ),  /* ... continued                          */
547     AF_UNIRANGE_REC(  0x00B4,  0x00B8 ),  /* ... continued                          */
548     AF_UNIRANGE_REC(  0x00BB,  0x00FF ),  /* ... continued                          */
549     AF_UNIRANGE_REC(  0x0100,  0x017F ),  /* Latin Extended-A                       */
550     AF_UNIRANGE_REC(  0x0180,  0x024F ),  /* Latin Extended-B                       */
551     AF_UNIRANGE_REC(  0x0250,  0x02AF ),  /* IPA Extensions                         */
552     AF_UNIRANGE_REC(  0x02B9,  0x02DF ),  /* Spacing Modifier Letters               */
553     AF_UNIRANGE_REC(  0x02E5,  0x02FF ),  /* ... continued                          */
554     AF_UNIRANGE_REC(  0x0300,  0x036F ),  /* Combining Diacritical Marks            */
555     AF_UNIRANGE_REC(  0x1AB0,  0x1ABE ),  /* Combining Diacritical Marks Extended   */
556     AF_UNIRANGE_REC(  0x1D00,  0x1D2B ),  /* Phonetic Extensions                    */
557     AF_UNIRANGE_REC(  0x1D6B,  0x1D77 ),  /* ... continued                          */
558     AF_UNIRANGE_REC(  0x1D79,  0x1D7F ),  /* ... continued                          */
559     AF_UNIRANGE_REC(  0x1D80,  0x1D9A ),  /* Phonetic Extensions Supplement         */
560     AF_UNIRANGE_REC(  0x1DC0,  0x1DFF ),  /* Combining Diacritical Marks Supplement */
561     AF_UNIRANGE_REC(  0x1E00,  0x1EFF ),  /* Latin Extended Additional              */
562     AF_UNIRANGE_REC(  0x2000,  0x206F ),  /* General Punctuation                    */
563     AF_UNIRANGE_REC(  0x20A0,  0x20B8 ),  /* Currency Symbols ...                   */
564     AF_UNIRANGE_REC(  0x20BA,  0x20CF ),  /* ... except new Rupee sign              */
565     AF_UNIRANGE_REC(  0x2150,  0x218F ),  /* Number Forms                           */
566     AF_UNIRANGE_REC(  0x2C60,  0x2C7B ),  /* Latin Extended-C                       */
567     AF_UNIRANGE_REC(  0x2C7E,  0x2C7F ),  /* ... continued                          */
568     AF_UNIRANGE_REC(  0x2E00,  0x2E7F ),  /* Supplemental Punctuation               */
569     AF_UNIRANGE_REC(  0xA720,  0xA76F ),  /* Latin Extended-D                       */
570     AF_UNIRANGE_REC(  0xA771,  0xA7F7 ),  /* ... continued                          */
571     AF_UNIRANGE_REC(  0xA7FA,  0xA7FF ),  /* ... continued                          */
572     AF_UNIRANGE_REC(  0xAB30,  0xAB5B ),  /* Latin Extended-E                       */
573     AF_UNIRANGE_REC(  0xAB60,  0xAB6F ),  /* ... continued                          */
574     AF_UNIRANGE_REC(  0xFB00,  0xFB06 ),  /* Alphab. Present. Forms (Latin Ligs)    */
575     AF_UNIRANGE_REC( 0x1D400, 0x1D7FF ),  /* Mathematical Alphanumeric Symbols      */
576     AF_UNIRANGE_REC(       0,       0 )
577   };
578
579   const AF_Script_UniRangeRec  af_latn_nonbase_uniranges[] =
580   {
581     AF_UNIRANGE_REC(  0x005E,  0x0060 ),
582     AF_UNIRANGE_REC(  0x007E,  0x007E ),
583     AF_UNIRANGE_REC(  0x00A8,  0x00A9 ),
584     AF_UNIRANGE_REC(  0x00AE,  0x00B0 ),
585     AF_UNIRANGE_REC(  0x00B4,  0x00B4 ),
586     AF_UNIRANGE_REC(  0x00B8,  0x00B8 ),
587     AF_UNIRANGE_REC(  0x00BC,  0x00BE ),
588     AF_UNIRANGE_REC(  0x02B9,  0x02DF ),
589     AF_UNIRANGE_REC(  0x02E5,  0x02FF ),
590     AF_UNIRANGE_REC(  0x0300,  0x036F ),
591     AF_UNIRANGE_REC(  0x1AB0,  0x1ABE ),
592     AF_UNIRANGE_REC(  0x1DC0,  0x1DFF ),
593     AF_UNIRANGE_REC(  0x2017,  0x2017 ),
594     AF_UNIRANGE_REC(  0x203E,  0x203E ),
595     AF_UNIRANGE_REC(  0xA788,  0xA788 ),
596     AF_UNIRANGE_REC(  0xA7F8,  0xA7FA ),
597     AF_UNIRANGE_REC(       0,       0 )
598   };
599
600
601   const AF_Script_UniRangeRec  af_latb_uniranges[] =
602   {
603     AF_UNIRANGE_REC(  0x1D62,  0x1D6A ),  /* some small subscript letters   */
604     AF_UNIRANGE_REC(  0x2080,  0x209C ),  /* subscript digits and letters   */
605     AF_UNIRANGE_REC(  0x2C7C,  0x2C7C ),  /* latin subscript small letter j */
606     AF_UNIRANGE_REC(       0,       0 )
607   };
608
609   const AF_Script_UniRangeRec  af_latb_nonbase_uniranges[] =
610   {
611     AF_UNIRANGE_REC( 0, 0 )
612   };
613
614
615   const AF_Script_UniRangeRec  af_latp_uniranges[] =
616   {
617     AF_UNIRANGE_REC(  0x00AA,  0x00AA ),  /* feminine ordinal indicator          */
618     AF_UNIRANGE_REC(  0x00B2,  0x00B3 ),  /* superscript two and three           */
619     AF_UNIRANGE_REC(  0x00B9,  0x00BA ),  /* superscript one, masc. ord. indic.  */
620     AF_UNIRANGE_REC(  0x02B0,  0x02B8 ),  /* some latin superscript mod. letters */
621     AF_UNIRANGE_REC(  0x02E0,  0x02E4 ),  /* some IPA modifier letters           */
622     AF_UNIRANGE_REC(  0x1D2C,  0x1D61 ),  /* latin superscript modifier letters  */
623     AF_UNIRANGE_REC(  0x1D78,  0x1D78 ),  /* modifier letter cyrillic en         */
624     AF_UNIRANGE_REC(  0x1D9B,  0x1DBF ),  /* more modifier letters               */
625     AF_UNIRANGE_REC(  0x2070,  0x207F ),  /* superscript digits and letters      */
626     AF_UNIRANGE_REC(  0x2C7D,  0x2C7D ),  /* modifier letter capital v           */
627     AF_UNIRANGE_REC(  0xA770,  0xA770 ),  /* modifier letter us                  */
628     AF_UNIRANGE_REC(  0xA7F8,  0xA7F9 ),  /* more modifier letters               */
629     AF_UNIRANGE_REC(  0xAB5C,  0xAB5F ),  /* more modifier letters               */
630     AF_UNIRANGE_REC(       0,       0 )
631   };
632
633   const AF_Script_UniRangeRec  af_latp_nonbase_uniranges[] =
634   {
635     AF_UNIRANGE_REC( 0, 0 )
636   };
637
638
639   const AF_Script_UniRangeRec  af_lisu_uniranges[] =
640   {
641     AF_UNIRANGE_REC(  0xA4D0,  0xA4FF ),    /* Lisu */
642     AF_UNIRANGE_REC(       0,       0 )
643   };
644
645   const AF_Script_UniRangeRec  af_lisu_nonbase_uniranges[] =
646   {
647     AF_UNIRANGE_REC( 0, 0 )
648   };
649
650
651   const AF_Script_UniRangeRec  af_mlym_uniranges[] =
652   {
653     AF_UNIRANGE_REC(  0x0D00,  0x0D7F ),  /* Malayalam */
654     AF_UNIRANGE_REC(       0,       0 )
655   };
656
657   const AF_Script_UniRangeRec  af_mlym_nonbase_uniranges[] =
658   {
659     AF_UNIRANGE_REC(  0x0D00,  0x0D01 ),
660     AF_UNIRANGE_REC(  0x0D3B,  0x0D3C ),
661     AF_UNIRANGE_REC(  0x0D4D,  0x0D4E ),
662     AF_UNIRANGE_REC(  0x0D62,  0x0D63 ),
663     AF_UNIRANGE_REC(       0,       0 )
664   };
665
666
667   const AF_Script_UniRangeRec  af_medf_uniranges[] =
668   {
669     AF_UNIRANGE_REC( 0x16E40, 0x16E9F ),  /* Medefaidrin */
670     AF_UNIRANGE_REC(       0,       0 )
671   };
672
673   const AF_Script_UniRangeRec  af_medf_nonbase_uniranges[] =
674   {
675     AF_UNIRANGE_REC(       0,       0 )
676   };
677
678
679   const AF_Script_UniRangeRec  af_mong_uniranges[] =
680   {
681     AF_UNIRANGE_REC(  0x1800,  0x18AF ),  /* Mongolian            */
682     AF_UNIRANGE_REC( 0x11660, 0x1167F ),  /* Mongolian Supplement */
683     AF_UNIRANGE_REC(       0,       0 )
684   };
685
686   const AF_Script_UniRangeRec  af_mong_nonbase_uniranges[] =
687   {
688     AF_UNIRANGE_REC(  0x1885,  0x1886 ),
689     AF_UNIRANGE_REC(  0x18A9,  0x18A9 ),
690     AF_UNIRANGE_REC(       0,       0 )
691   };
692
693
694   const AF_Script_UniRangeRec  af_mymr_uniranges[] =
695   {
696     AF_UNIRANGE_REC(  0x1000,  0x109F ),    /* Myanmar            */
697     AF_UNIRANGE_REC(  0xA9E0,  0xA9FF ),    /* Myanmar Extended-B */
698     AF_UNIRANGE_REC(  0xAA60,  0xAA7F ),    /* Myanmar Extended-A */
699     AF_UNIRANGE_REC(       0,       0 )
700   };
701
702   const AF_Script_UniRangeRec  af_mymr_nonbase_uniranges[] =
703   {
704     AF_UNIRANGE_REC(  0x102D,  0x1030 ),
705     AF_UNIRANGE_REC(  0x1032,  0x1037 ),
706     AF_UNIRANGE_REC(  0x103A,  0x103A ),
707     AF_UNIRANGE_REC(  0x103D,  0x103E ),
708     AF_UNIRANGE_REC(  0x1058,  0x1059 ),
709     AF_UNIRANGE_REC(  0x105E,  0x1060 ),
710     AF_UNIRANGE_REC(  0x1071,  0x1074 ),
711     AF_UNIRANGE_REC(  0x1082,  0x1082 ),
712     AF_UNIRANGE_REC(  0x1085,  0x1086 ),
713     AF_UNIRANGE_REC(  0x108D,  0x108D ),
714     AF_UNIRANGE_REC(  0xA9E5,  0xA9E5 ),
715     AF_UNIRANGE_REC(  0xAA7C,  0xAA7C ),
716     AF_UNIRANGE_REC(       0,       0 )
717   };
718
719
720   const AF_Script_UniRangeRec  af_nkoo_uniranges[] =
721   {
722     AF_UNIRANGE_REC(  0x07C0,  0x07FF ),    /* N'Ko */
723     AF_UNIRANGE_REC(       0,       0 )
724   };
725
726   const AF_Script_UniRangeRec  af_nkoo_nonbase_uniranges[] =
727   {
728     AF_UNIRANGE_REC(  0x07EB,  0x07F5 ),
729     AF_UNIRANGE_REC(  0x07FD,  0x07FD ),
730     AF_UNIRANGE_REC(       0,       0 )
731   };
732
733
734   const AF_Script_UniRangeRec  af_none_uniranges[] =
735   {
736     AF_UNIRANGE_REC( 0, 0 )
737   };
738
739   const AF_Script_UniRangeRec  af_none_nonbase_uniranges[] =
740   {
741     AF_UNIRANGE_REC( 0, 0 )
742   };
743
744
745   const AF_Script_UniRangeRec  af_olck_uniranges[] =
746   {
747     AF_UNIRANGE_REC(  0x1C50,  0x1C7F ),    /* Ol Chiki */
748     AF_UNIRANGE_REC(       0,       0 )
749   };
750
751   const AF_Script_UniRangeRec  af_olck_nonbase_uniranges[] =
752   {
753     AF_UNIRANGE_REC( 0, 0 )
754   };
755
756
757   const AF_Script_UniRangeRec  af_orkh_uniranges[] =
758   {
759     AF_UNIRANGE_REC( 0x10C00, 0x10C4F ),    /* Old Turkic */
760     AF_UNIRANGE_REC(       0,       0 )
761   };
762
763   const AF_Script_UniRangeRec  af_orkh_nonbase_uniranges[] =
764   {
765     AF_UNIRANGE_REC( 0, 0 )
766   };
767
768
769   const AF_Script_UniRangeRec  af_osge_uniranges[] =
770   {
771     AF_UNIRANGE_REC( 0x104B0, 0x104FF ),    /* Osage */
772     AF_UNIRANGE_REC(       0,       0 )
773   };
774
775   const AF_Script_UniRangeRec  af_osge_nonbase_uniranges[] =
776   {
777     AF_UNIRANGE_REC( 0, 0 )
778   };
779
780
781   const AF_Script_UniRangeRec  af_osma_uniranges[] =
782   {
783     AF_UNIRANGE_REC( 0x10480, 0x104AF ),   /* Osmanya */
784     AF_UNIRANGE_REC(       0,       0 )
785   };
786
787   const AF_Script_UniRangeRec  af_osma_nonbase_uniranges[] =
788   {
789     AF_UNIRANGE_REC( 0, 0 )
790   };
791
792
793   const AF_Script_UniRangeRec  af_rohg_uniranges[] =
794   {
795     AF_UNIRANGE_REC( 0x10D00, 0x10D3F ),   /* Hanifi Rohingya */
796     AF_UNIRANGE_REC(       0,       0 )
797   };
798
799   const AF_Script_UniRangeRec  af_rohg_nonbase_uniranges[] =
800   {
801     AF_UNIRANGE_REC( 0, 0 )
802   };
803
804
805   const AF_Script_UniRangeRec  af_saur_uniranges[] =
806   {
807     AF_UNIRANGE_REC(  0xA880,  0xA8DF ),   /* Saurashtra */
808     AF_UNIRANGE_REC(       0,       0 )
809   };
810
811   const AF_Script_UniRangeRec  af_saur_nonbase_uniranges[] =
812   {
813     AF_UNIRANGE_REC(  0xA880,  0xA881 ),
814     AF_UNIRANGE_REC(  0xA8B4,  0xA8C5 ),
815     AF_UNIRANGE_REC(       0,       0 )
816   };
817
818
819   const AF_Script_UniRangeRec  af_shaw_uniranges[] =
820   {
821     AF_UNIRANGE_REC( 0x10450, 0x1047F ),   /* Shavian */
822     AF_UNIRANGE_REC(       0,       0 )
823   };
824
825   const AF_Script_UniRangeRec  af_shaw_nonbase_uniranges[] =
826   {
827     AF_UNIRANGE_REC( 0, 0 )
828   };
829
830
831   const AF_Script_UniRangeRec  af_sinh_uniranges[] =
832   {
833     AF_UNIRANGE_REC(  0x0D80,  0x0DFF ),  /* Sinhala */
834     AF_UNIRANGE_REC(       0,       0 )
835   };
836
837   const AF_Script_UniRangeRec  af_sinh_nonbase_uniranges[] =
838   {
839     AF_UNIRANGE_REC(  0x0DCA,  0x0DCA ),
840     AF_UNIRANGE_REC(  0x0DD2,  0x0DD6 ),
841     AF_UNIRANGE_REC(       0,       0 )
842   };
843
844
845   const AF_Script_UniRangeRec  af_sund_uniranges[] =
846   {
847     AF_UNIRANGE_REC(  0x1B80,  0x1BBF ), /* Sundanese            */
848     AF_UNIRANGE_REC(  0x1CC0,  0x1CCF ), /* Sundanese Supplement */
849     AF_UNIRANGE_REC(       0,       0 )
850   };
851
852   const AF_Script_UniRangeRec  af_sund_nonbase_uniranges[] =
853   {
854     AF_UNIRANGE_REC(  0x1B80,  0x1B82 ),
855     AF_UNIRANGE_REC(  0x1BA1,  0x1BAD ),
856     AF_UNIRANGE_REC(       0,       0 )
857   };
858
859
860   const AF_Script_UniRangeRec  af_taml_uniranges[] =
861   {
862     AF_UNIRANGE_REC(  0x0B80,  0x0BFF ),  /* Tamil */
863     AF_UNIRANGE_REC(       0,       0 )
864   };
865
866   const AF_Script_UniRangeRec  af_taml_nonbase_uniranges[] =
867   {
868     AF_UNIRANGE_REC(  0x0B82,  0x0B82 ),
869     AF_UNIRANGE_REC(  0x0BC0,  0x0BC2 ),
870     AF_UNIRANGE_REC(  0x0BCD,  0x0BCD ),
871     AF_UNIRANGE_REC(       0,       0 )
872   };
873
874
875   const AF_Script_UniRangeRec  af_tavt_uniranges[] =
876   {
877     AF_UNIRANGE_REC(  0xAA80,  0xAADF ),   /* Tai Viet */
878     AF_UNIRANGE_REC(       0,       0 )
879   };
880
881   const AF_Script_UniRangeRec  af_tavt_nonbase_uniranges[] =
882   {
883     AF_UNIRANGE_REC(  0xAAB0,  0xAAB0 ),
884     AF_UNIRANGE_REC(  0xAAB2,  0xAAB4 ),
885     AF_UNIRANGE_REC(  0xAAB7,  0xAAB8 ),
886     AF_UNIRANGE_REC(  0xAABE,  0xAABF ),
887     AF_UNIRANGE_REC(  0xAAC1,  0xAAC1 ),
888     AF_UNIRANGE_REC(       0,       0 )
889   };
890
891
892   const AF_Script_UniRangeRec  af_telu_uniranges[] =
893   {
894     AF_UNIRANGE_REC(  0x0C00,  0x0C7F ),  /* Telugu */
895     AF_UNIRANGE_REC(       0,       0 )
896   };
897
898   const AF_Script_UniRangeRec  af_telu_nonbase_uniranges[] =
899   {
900     AF_UNIRANGE_REC(  0x0C00,  0x0C00 ),
901     AF_UNIRANGE_REC(  0x0C04,  0x0C04 ),
902     AF_UNIRANGE_REC(  0x0C3E,  0x0C40 ),
903     AF_UNIRANGE_REC(  0x0C46,  0x0C56 ),
904     AF_UNIRANGE_REC(  0x0C62,  0x0C63 ),
905     AF_UNIRANGE_REC(       0,       0 )
906   };
907
908
909   const AF_Script_UniRangeRec  af_thai_uniranges[] =
910   {
911     AF_UNIRANGE_REC(  0x0E00,  0x0E7F ),  /* Thai */
912     AF_UNIRANGE_REC(       0,       0 )
913   };
914
915   const AF_Script_UniRangeRec  af_thai_nonbase_uniranges[] =
916   {
917     AF_UNIRANGE_REC(  0x0E31,  0x0E31 ),
918     AF_UNIRANGE_REC(  0x0E34,  0x0E3A ),
919     AF_UNIRANGE_REC(  0x0E47,  0x0E4E ),
920     AF_UNIRANGE_REC(       0,       0 )
921   };
922
923
924   const AF_Script_UniRangeRec  af_tfng_uniranges[] =
925   {
926     AF_UNIRANGE_REC(  0x2D30,  0x2D7F ),   /* Tifinagh */
927     AF_UNIRANGE_REC(       0,       0 )
928   };
929
930   const AF_Script_UniRangeRec  af_tfng_nonbase_uniranges[] =
931   {
932     AF_UNIRANGE_REC( 0, 0 )
933   };
934
935
936   const AF_Script_UniRangeRec  af_vaii_uniranges[] =
937   {
938     AF_UNIRANGE_REC(  0xA500,  0xA63F ),   /* Vai */
939     AF_UNIRANGE_REC(       0,       0 )
940   };
941
942   const AF_Script_UniRangeRec  af_vaii_nonbase_uniranges[] =
943   {
944     AF_UNIRANGE_REC( 0, 0 )
945   };
946
947
948 #ifdef AF_CONFIG_OPTION_INDIC
949
950   const AF_Script_UniRangeRec  af_limb_uniranges[] =
951   {
952     AF_UNIRANGE_REC(  0x1900,  0x194F ),  /* Limbu */
953     AF_UNIRANGE_REC(       0,       0 )
954   };
955
956   const AF_Script_UniRangeRec  af_limb_nonbase_uniranges[] =
957   {
958     AF_UNIRANGE_REC(  0x1920,  0x1922 ),
959     AF_UNIRANGE_REC(  0x1927,  0x1934 ),
960     AF_UNIRANGE_REC(  0x1937,  0x193B ),
961     AF_UNIRANGE_REC(       0,       0 )
962   };
963
964
965   const AF_Script_UniRangeRec  af_orya_uniranges[] =
966   {
967     AF_UNIRANGE_REC(  0x0B00,  0x0B7F ),  /* Oriya */
968     AF_UNIRANGE_REC(       0,       0 )
969   };
970
971   const AF_Script_UniRangeRec  af_orya_nonbase_uniranges[] =
972   {
973     AF_UNIRANGE_REC(  0x0B01,  0x0B02 ),
974     AF_UNIRANGE_REC(  0x0B3C,  0x0B3C ),
975     AF_UNIRANGE_REC(  0x0B3F,  0x0B3F ),
976     AF_UNIRANGE_REC(  0x0B41,  0x0B44 ),
977     AF_UNIRANGE_REC(  0x0B4D,  0x0B56 ),
978     AF_UNIRANGE_REC(  0x0B62,  0x0B63 ),
979     AF_UNIRANGE_REC(       0,       0 )
980   };
981
982
983   const AF_Script_UniRangeRec  af_sylo_uniranges[] =
984   {
985     AF_UNIRANGE_REC(  0xA800,  0xA82F ),  /* Syloti Nagri */
986     AF_UNIRANGE_REC(       0,       0 )
987   };
988
989   const AF_Script_UniRangeRec  af_sylo_nonbase_uniranges[] =
990   {
991     AF_UNIRANGE_REC(  0xA802,  0xA802 ),
992     AF_UNIRANGE_REC(  0xA806,  0xA806 ),
993     AF_UNIRANGE_REC(  0xA80B,  0xA80B ),
994     AF_UNIRANGE_REC(  0xA825,  0xA826 ),
995     AF_UNIRANGE_REC(       0,       0 )
996   };
997
998
999   const AF_Script_UniRangeRec  af_tibt_uniranges[] =
1000   {
1001     AF_UNIRANGE_REC(  0x0F00,  0x0FFF ),  /* Tibetan */
1002     AF_UNIRANGE_REC(       0,       0 )
1003   };
1004
1005   const AF_Script_UniRangeRec  af_tibt_nonbase_uniranges[] =
1006   {
1007     AF_UNIRANGE_REC(  0x0F18,  0x0F19 ),
1008     AF_UNIRANGE_REC(  0x0F35,  0x0F35 ),
1009     AF_UNIRANGE_REC(  0x0F37,  0x0F37 ),
1010     AF_UNIRANGE_REC(  0x0F39,  0x0F39 ),
1011     AF_UNIRANGE_REC(  0x0F3E,  0x0F3F ),
1012     AF_UNIRANGE_REC(  0x0F71,  0x0F7E ),
1013     AF_UNIRANGE_REC(  0x0F80,  0x0F84 ),
1014     AF_UNIRANGE_REC(  0x0F86,  0x0F87 ),
1015     AF_UNIRANGE_REC(  0x0F8D,  0x0FBC ),
1016     AF_UNIRANGE_REC(       0,       0 )
1017   };
1018
1019 #endif /* !AF_CONFIG_OPTION_INDIC */
1020
1021 #ifdef AF_CONFIG_OPTION_CJK
1022
1023   /* this corresponds to Unicode 6.0 */
1024
1025   const AF_Script_UniRangeRec  af_hani_uniranges[] =
1026   {
1027     AF_UNIRANGE_REC(  0x1100,  0x11FF ),  /* Hangul Jamo                             */
1028     AF_UNIRANGE_REC(  0x2E80,  0x2EFF ),  /* CJK Radicals Supplement                 */
1029     AF_UNIRANGE_REC(  0x2F00,  0x2FDF ),  /* Kangxi Radicals                         */
1030     AF_UNIRANGE_REC(  0x2FF0,  0x2FFF ),  /* Ideographic Description Characters      */
1031     AF_UNIRANGE_REC(  0x3000,  0x303F ),  /* CJK Symbols and Punctuation             */
1032     AF_UNIRANGE_REC(  0x3040,  0x309F ),  /* Hiragana                                */
1033     AF_UNIRANGE_REC(  0x30A0,  0x30FF ),  /* Katakana                                */
1034     AF_UNIRANGE_REC(  0x3100,  0x312F ),  /* Bopomofo                                */
1035     AF_UNIRANGE_REC(  0x3130,  0x318F ),  /* Hangul Compatibility Jamo               */
1036     AF_UNIRANGE_REC(  0x3190,  0x319F ),  /* Kanbun                                  */
1037     AF_UNIRANGE_REC(  0x31A0,  0x31BF ),  /* Bopomofo Extended                       */
1038     AF_UNIRANGE_REC(  0x31C0,  0x31EF ),  /* CJK Strokes                             */
1039     AF_UNIRANGE_REC(  0x31F0,  0x31FF ),  /* Katakana Phonetic Extensions            */
1040     AF_UNIRANGE_REC(  0x3300,  0x33FF ),  /* CJK Compatibility                       */
1041     AF_UNIRANGE_REC(  0x3400,  0x4DBF ),  /* CJK Unified Ideographs Extension A      */
1042     AF_UNIRANGE_REC(  0x4DC0,  0x4DFF ),  /* Yijing Hexagram Symbols                 */
1043     AF_UNIRANGE_REC(  0x4E00,  0x9FFF ),  /* CJK Unified Ideographs                  */
1044     AF_UNIRANGE_REC(  0xA960,  0xA97F ),  /* Hangul Jamo Extended-A                  */
1045     AF_UNIRANGE_REC(  0xAC00,  0xD7AF ),  /* Hangul Syllables                        */
1046     AF_UNIRANGE_REC(  0xD7B0,  0xD7FF ),  /* Hangul Jamo Extended-B                  */
1047     AF_UNIRANGE_REC(  0xF900,  0xFAFF ),  /* CJK Compatibility Ideographs            */
1048     AF_UNIRANGE_REC(  0xFE10,  0xFE1F ),  /* Vertical forms                          */
1049     AF_UNIRANGE_REC(  0xFE30,  0xFE4F ),  /* CJK Compatibility Forms                 */
1050     AF_UNIRANGE_REC(  0xFF00,  0xFFEF ),  /* Halfwidth and Fullwidth Forms           */
1051     AF_UNIRANGE_REC( 0x1B000, 0x1B0FF ),  /* Kana Supplement                         */
1052     AF_UNIRANGE_REC( 0x1B100, 0x1B12F ),  /* Kana Extended-A                         */
1053     AF_UNIRANGE_REC( 0x1D300, 0x1D35F ),  /* Tai Xuan Hing Symbols                   */
1054     AF_UNIRANGE_REC( 0x20000, 0x2A6DF ),  /* CJK Unified Ideographs Extension B      */
1055     AF_UNIRANGE_REC( 0x2A700, 0x2B73F ),  /* CJK Unified Ideographs Extension C      */
1056     AF_UNIRANGE_REC( 0x2B740, 0x2B81F ),  /* CJK Unified Ideographs Extension D      */
1057     AF_UNIRANGE_REC( 0x2B820, 0x2CEAF ),  /* CJK Unified Ideographs Extension E      */
1058     AF_UNIRANGE_REC( 0x2CEB0, 0x2EBEF ),  /* CJK Unified Ideographs Extension F      */
1059     AF_UNIRANGE_REC( 0x2F800, 0x2FA1F ),  /* CJK Compatibility Ideographs Supplement */
1060     AF_UNIRANGE_REC(       0,       0 )
1061   };
1062
1063   const AF_Script_UniRangeRec  af_hani_nonbase_uniranges[] =
1064   {
1065     AF_UNIRANGE_REC(  0x302A,  0x302F ),
1066     AF_UNIRANGE_REC(  0x3190,  0x319F ),
1067     AF_UNIRANGE_REC(       0,       0 )
1068   };
1069
1070 #endif /* !AF_CONFIG_OPTION_CJK */
1071
1072 /* END */