Home | History | Annotate | Download | only in autofit
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  afranges.c                                                             */
      4 /*                                                                         */
      5 /*    Auto-fitter Unicode script ranges (body).                            */
      6 /*                                                                         */
      7 /*  Copyright 2013-2017 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 `ta_xxxx_nonbase_uniranges' ranges must be strict subsets */
     56   /* of the corresponding `ta_xxxx_uniranges' ranges               */
     57 
     58 
     59   const AF_Script_UniRangeRec  af_arab_uniranges[] =
     60   {
     61     AF_UNIRANGE_REC(  0x0600,  0x06FF ),  /* Arabic                                 */
     62     AF_UNIRANGE_REC(  0x0750,  0x07FF ),  /* Arabic Supplement                      */
     63     AF_UNIRANGE_REC(  0x08A0,  0x08FF ),  /* Arabic Extended-A                      */
     64     AF_UNIRANGE_REC(  0xFB50,  0xFDFF ),  /* Arabic Presentation Forms-A            */
     65     AF_UNIRANGE_REC(  0xFE70,  0xFEFF ),  /* Arabic Presentation Forms-B            */
     66     AF_UNIRANGE_REC( 0x1EE00, 0x1EEFF ),  /* Arabic Mathematical Alphabetic Symbols */
     67     AF_UNIRANGE_REC(       0,       0 )
     68   };
     69 
     70   const AF_Script_UniRangeRec  af_arab_nonbase_uniranges[] =
     71   {
     72     AF_UNIRANGE_REC(  0x0600,  0x0605 ),
     73     AF_UNIRANGE_REC(  0x0610,  0x061A ),
     74     AF_UNIRANGE_REC(  0x064B,  0x065F ),
     75     AF_UNIRANGE_REC(  0x0670,  0x0670 ),
     76     AF_UNIRANGE_REC(  0x06D6,  0x06DC ),
     77     AF_UNIRANGE_REC(  0x06DF,  0x06E4 ),
     78     AF_UNIRANGE_REC(  0x06E7,  0x06E8 ),
     79     AF_UNIRANGE_REC(  0x06EA,  0x06ED ),
     80     AF_UNIRANGE_REC(  0x08D4,  0x08E1 ),
     81     AF_UNIRANGE_REC(  0x08E3,  0x08FF ),
     82     AF_UNIRANGE_REC(  0xFBB2,  0xFBC1 ),
     83     AF_UNIRANGE_REC(  0xFE70,  0xFE70 ),
     84     AF_UNIRANGE_REC(  0xFE72,  0xFE72 ),
     85     AF_UNIRANGE_REC(  0xFE74,  0xFE74 ),
     86     AF_UNIRANGE_REC(  0xFE76,  0xFE76 ),
     87     AF_UNIRANGE_REC(  0xFE78,  0xFE78 ),
     88     AF_UNIRANGE_REC(  0xFE7A,  0xFE7A ),
     89     AF_UNIRANGE_REC(  0xFE7C,  0xFE7C ),
     90     AF_UNIRANGE_REC(  0xFE7E,  0xFE7E ),
     91     AF_UNIRANGE_REC(       0,       0 )
     92   };
     93 
     94 
     95   const AF_Script_UniRangeRec  af_armn_uniranges[] =
     96   {
     97     AF_UNIRANGE_REC(  0x0530,  0x058F ),  /* Armenian                          */
     98     AF_UNIRANGE_REC(  0xFB13,  0xFB17 ),  /* Alphab. Present. Forms (Armenian) */
     99     AF_UNIRANGE_REC(       0,       0 )
    100   };
    101 
    102   const AF_Script_UniRangeRec  af_armn_nonbase_uniranges[] =
    103   {
    104     AF_UNIRANGE_REC(  0x0559,  0x055F ),
    105     AF_UNIRANGE_REC(       0,       0 )
    106   };
    107 
    108 
    109   const AF_Script_UniRangeRec  af_beng_uniranges[] =
    110   {
    111     AF_UNIRANGE_REC(  0x0980,  0x09FF ),  /* Bengali */
    112     AF_UNIRANGE_REC(       0,       0 )
    113   };
    114 
    115   const AF_Script_UniRangeRec  af_beng_nonbase_uniranges[] =
    116   {
    117     AF_UNIRANGE_REC(  0x0981,  0x0981 ),
    118     AF_UNIRANGE_REC(  0x09BC,  0x09BC ),
    119     AF_UNIRANGE_REC(  0x09C1,  0x09C4 ),
    120     AF_UNIRANGE_REC(  0x09CD,  0x09CD ),
    121     AF_UNIRANGE_REC(  0x09E2,  0x09E3 ),
    122     AF_UNIRANGE_REC(       0,       0 )
    123   };
    124 
    125 
    126   const AF_Script_UniRangeRec  af_cher_uniranges[] =
    127   {
    128     AF_UNIRANGE_REC(  0x13A0,  0x13FF ),  /* Cherokee            */
    129     AF_UNIRANGE_REC(  0xAB70,  0xABBF ),  /* Cherokee Supplement */
    130     AF_UNIRANGE_REC(       0,       0 )
    131   };
    132 
    133   const AF_Script_UniRangeRec  af_cher_nonbase_uniranges[] =
    134   {
    135     AF_UNIRANGE_REC( 0, 0 )
    136   };
    137 
    138 
    139   const AF_Script_UniRangeRec  af_cyrl_uniranges[] =
    140   {
    141     AF_UNIRANGE_REC(  0x0400,  0x04FF ),  /* Cyrillic            */
    142     AF_UNIRANGE_REC(  0x0500,  0x052F ),  /* Cyrillic Supplement */
    143     AF_UNIRANGE_REC(  0x2DE0,  0x2DFF ),  /* Cyrillic Extended-A */
    144     AF_UNIRANGE_REC(  0xA640,  0xA69F ),  /* Cyrillic Extended-B */
    145     AF_UNIRANGE_REC(  0x1C80,  0x1C8F ),  /* Cyrillic Extended-C */
    146     AF_UNIRANGE_REC(       0,       0 )
    147   };
    148 
    149   const AF_Script_UniRangeRec  af_cyrl_nonbase_uniranges[] =
    150   {
    151     AF_UNIRANGE_REC(  0x0483,  0x0489 ),
    152     AF_UNIRANGE_REC(  0x2DE0,  0x2DFF ),
    153     AF_UNIRANGE_REC(  0xA66F,  0xA67F ),
    154     AF_UNIRANGE_REC(  0xA69E,  0xA69F ),
    155     AF_UNIRANGE_REC(       0,       0 )
    156   };
    157 
    158 
    159   /* There are some characters in the Devanagari Unicode block that are    */
    160   /* generic to Indic scripts; we omit them so that their presence doesn't */
    161   /* trigger Devanagari.                                                   */
    162 
    163   const AF_Script_UniRangeRec  af_deva_uniranges[] =
    164   {
    165     AF_UNIRANGE_REC(  0x0900,  0x093B ),  /* Devanagari          */
    166     /* omitting U+093C nukta */
    167     AF_UNIRANGE_REC(  0x093D,  0x0950 ),  /* ... continued       */
    168     /* omitting U+0951 udatta, U+0952 anudatta */
    169     AF_UNIRANGE_REC(  0x0953,  0x0963 ),  /* ... continued       */
    170     /* omitting U+0964 danda, U+0965 double danda */
    171     AF_UNIRANGE_REC(  0x0966,  0x097F ),  /* ... continued       */
    172     AF_UNIRANGE_REC(  0x20B9,  0x20B9 ),  /* (new) Rupee sign    */
    173     AF_UNIRANGE_REC(  0xA8E0,  0xA8FF ),  /* Devanagari Extended */
    174     AF_UNIRANGE_REC(       0,       0 )
    175   };
    176 
    177   const AF_Script_UniRangeRec  af_deva_nonbase_uniranges[] =
    178   {
    179     AF_UNIRANGE_REC(  0x0900,  0x0902 ),
    180     AF_UNIRANGE_REC(  0x093A,  0x093A ),
    181     AF_UNIRANGE_REC(  0x0941,  0x0948 ),
    182     AF_UNIRANGE_REC(  0x094D,  0x094D ),
    183     AF_UNIRANGE_REC(  0x0953,  0x0957 ),
    184     AF_UNIRANGE_REC(  0x0962,  0x0963 ),
    185     AF_UNIRANGE_REC(  0xA8E0,  0xA8F1 ),
    186     AF_UNIRANGE_REC(       0,       0 )
    187   };
    188 
    189 
    190   const AF_Script_UniRangeRec  af_ethi_uniranges[] =
    191   {
    192     AF_UNIRANGE_REC(  0x1200,  0x137F ),  /* Ethiopic            */
    193     AF_UNIRANGE_REC(  0x1380,  0x139F ),  /* Ethiopic Supplement */
    194     AF_UNIRANGE_REC(  0x2D80,  0x2DDF ),  /* Ethiopic Extended   */
    195     AF_UNIRANGE_REC(  0xAB00,  0xAB2F ),  /* Ethiopic Extended-A */
    196     AF_UNIRANGE_REC(       0,       0 )
    197   };
    198 
    199   const AF_Script_UniRangeRec  af_ethi_nonbase_uniranges[] =
    200   {
    201     AF_UNIRANGE_REC(  0x135D,  0x135F ),
    202     AF_UNIRANGE_REC(       0,       0 )
    203   };
    204 
    205 
    206   const AF_Script_UniRangeRec  af_geor_uniranges[] =
    207   {
    208     AF_UNIRANGE_REC(  0x10D0,  0x10FF ),  /* Georgian (Mkhedruli) */
    209 #if 0
    210     /* the following range is proposed for inclusion in Unicode */
    211     AF_UNIRANGE_REC(  0x1C90,  0x1CBF ),  /* Georgian (Mtavruli)  */
    212 #endif
    213     AF_UNIRANGE_REC(       0,       0 )
    214   };
    215 
    216   const AF_Script_UniRangeRec  af_geor_nonbase_uniranges[] =
    217   {
    218     AF_UNIRANGE_REC( 0, 0 )
    219   };
    220 
    221 
    222   const AF_Script_UniRangeRec  af_geok_uniranges[] =
    223   {
    224     /* Khutsuri */
    225     AF_UNIRANGE_REC(  0x10A0,  0x10CD ),  /* Georgian (Asomtavruli) */
    226     AF_UNIRANGE_REC(  0x2D00,  0x2D2D ),  /* Georgian (Nuskhuri)    */
    227     AF_UNIRANGE_REC(       0,       0 )
    228   };
    229 
    230   const AF_Script_UniRangeRec  af_geok_nonbase_uniranges[] =
    231   {
    232     AF_UNIRANGE_REC( 0, 0 )
    233   };
    234 
    235 
    236   const AF_Script_UniRangeRec  af_grek_uniranges[] =
    237   {
    238     AF_UNIRANGE_REC(  0x0370,  0x03FF ),  /* Greek and Coptic */
    239     AF_UNIRANGE_REC(  0x1F00,  0x1FFF ),  /* Greek Extended   */
    240     AF_UNIRANGE_REC(       0,       0 )
    241   };
    242 
    243   const AF_Script_UniRangeRec  af_grek_nonbase_uniranges[] =
    244   {
    245     AF_UNIRANGE_REC(  0x037A,  0x037A ),
    246     AF_UNIRANGE_REC(  0x0384,  0x0385 ),
    247     AF_UNIRANGE_REC(  0x1FBD,  0x1FC1 ),
    248     AF_UNIRANGE_REC(  0x1FCD,  0x1FCF ),
    249     AF_UNIRANGE_REC(  0x1FDD,  0x1FDF ),
    250     AF_UNIRANGE_REC(  0x1FED,  0x1FEF ),
    251     AF_UNIRANGE_REC(  0x1FFD,  0x1FFE ),
    252     AF_UNIRANGE_REC(       0,       0 )
    253   };
    254 
    255 
    256   const AF_Script_UniRangeRec  af_gujr_uniranges[] =
    257   {
    258     AF_UNIRANGE_REC(  0x0A80,  0x0AFF ),  /* Gujarati */
    259     AF_UNIRANGE_REC(       0,       0 )
    260   };
    261 
    262   const AF_Script_UniRangeRec  af_gujr_nonbase_uniranges[] =
    263   {
    264     AF_UNIRANGE_REC(  0x0A81,  0x0A82 ),
    265     AF_UNIRANGE_REC(  0x0ABC,  0x0ABC ),
    266     AF_UNIRANGE_REC(  0x0AC1,  0x0AC8 ),
    267     AF_UNIRANGE_REC(  0x0ACD,  0x0ACD ),
    268     AF_UNIRANGE_REC(  0x0AE2,  0x0AE3 ),
    269     AF_UNIRANGE_REC(       0,       0 )
    270   };
    271 
    272 
    273   const AF_Script_UniRangeRec  af_guru_uniranges[] =
    274   {
    275     AF_UNIRANGE_REC(  0x0A00,  0x0A7F ),  /* Gurmukhi */
    276     AF_UNIRANGE_REC(       0,       0 )
    277   };
    278 
    279   const AF_Script_UniRangeRec  af_guru_nonbase_uniranges[] =
    280   {
    281     AF_UNIRANGE_REC(  0x0A01,  0x0A02 ),
    282     AF_UNIRANGE_REC(  0x0A3C,  0x0A3C ),
    283     AF_UNIRANGE_REC(  0x0A41,  0x0A51 ),
    284     AF_UNIRANGE_REC(  0x0A70,  0x0A71 ),
    285     AF_UNIRANGE_REC(  0x0A75,  0x0A75 ),
    286     AF_UNIRANGE_REC(       0,       0 )
    287   };
    288 
    289 
    290   const AF_Script_UniRangeRec  af_hebr_uniranges[] =
    291   {
    292     AF_UNIRANGE_REC(  0x0590,  0x05FF ),  /* Hebrew                          */
    293     AF_UNIRANGE_REC(  0xFB1D,  0xFB4F ),  /* Alphab. Present. Forms (Hebrew) */
    294     AF_UNIRANGE_REC(       0,       0 )
    295   };
    296 
    297   const AF_Script_UniRangeRec  af_hebr_nonbase_uniranges[] =
    298   {
    299     AF_UNIRANGE_REC(  0x0591,  0x05BF ),
    300     AF_UNIRANGE_REC(  0x05C1,  0x05C2 ),
    301     AF_UNIRANGE_REC(  0x05C4,  0x05C5 ),
    302     AF_UNIRANGE_REC(  0x05C7,  0x05C7 ),
    303     AF_UNIRANGE_REC(  0xFB1E,  0xFB1E ),
    304     AF_UNIRANGE_REC(       0,       0 )
    305   };
    306 
    307 
    308   const AF_Script_UniRangeRec  af_knda_uniranges[] =
    309   {
    310     AF_UNIRANGE_REC(  0x0C80,  0x0CFF ),  /* Kannada */
    311     AF_UNIRANGE_REC(       0,       0 )
    312   };
    313 
    314   const AF_Script_UniRangeRec  af_knda_nonbase_uniranges[] =
    315   {
    316     AF_UNIRANGE_REC(  0x0C81,  0x0C81 ),
    317     AF_UNIRANGE_REC(  0x0CBC,  0x0CBC ),
    318     AF_UNIRANGE_REC(  0x0CBF,  0x0CBF ),
    319     AF_UNIRANGE_REC(  0x0CC6,  0x0CC6 ),
    320     AF_UNIRANGE_REC(  0x0CCC,  0x0CCD ),
    321     AF_UNIRANGE_REC(  0x0CE2,  0x0CE3 ),
    322     AF_UNIRANGE_REC(       0,       0 )
    323   };
    324 
    325 
    326   const AF_Script_UniRangeRec  af_khmr_uniranges[] =
    327   {
    328     AF_UNIRANGE_REC(  0x1780,  0x17FF ),  /* Khmer */
    329     AF_UNIRANGE_REC(       0,       0 )
    330   };
    331 
    332   const AF_Script_UniRangeRec  af_khmr_nonbase_uniranges[] =
    333   {
    334     AF_UNIRANGE_REC(  0x17B7,  0x17BD ),
    335     AF_UNIRANGE_REC(  0x17C6,  0x17C6 ),
    336     AF_UNIRANGE_REC(  0x17C9,  0x17D3 ),
    337     AF_UNIRANGE_REC(  0x17DD,  0x17DD ),
    338     AF_UNIRANGE_REC(       0,       0 )
    339   };
    340 
    341 
    342   const AF_Script_UniRangeRec  af_khms_uniranges[] =
    343   {
    344     AF_UNIRANGE_REC(  0x19E0,  0x19FF ),  /* Khmer Symbols */
    345     AF_UNIRANGE_REC(       0,       0 )
    346   };
    347 
    348   const AF_Script_UniRangeRec  af_khms_nonbase_uniranges[] =
    349   {
    350     AF_UNIRANGE_REC( 0, 0 )
    351   };
    352 
    353 
    354   const AF_Script_UniRangeRec  af_lao_uniranges[] =
    355   {
    356     AF_UNIRANGE_REC(  0x0E80,  0x0EFF ),  /* Lao */
    357     AF_UNIRANGE_REC(       0,       0 )
    358   };
    359 
    360   const AF_Script_UniRangeRec  af_lao_nonbase_uniranges[] =
    361   {
    362     AF_UNIRANGE_REC(  0x0EB1,  0x0EB1 ),
    363     AF_UNIRANGE_REC(  0x0EB4,  0x0EBC ),
    364     AF_UNIRANGE_REC(  0x0EC8,  0x0ECD ),
    365     AF_UNIRANGE_REC(       0,       0 )
    366   };
    367 
    368 
    369   const AF_Script_UniRangeRec  af_latn_uniranges[] =
    370   {
    371     AF_UNIRANGE_REC(  0x0020,  0x007F ),  /* Basic Latin (no control chars)         */
    372     AF_UNIRANGE_REC(  0x00A0,  0x00A9 ),  /* Latin-1 Supplement (no control chars)  */
    373     AF_UNIRANGE_REC(  0x00AB,  0x00B1 ),  /* ... continued                          */
    374     AF_UNIRANGE_REC(  0x00B4,  0x00B8 ),  /* ... continued                          */
    375     AF_UNIRANGE_REC(  0x00BB,  0x00FF ),  /* ... continued                          */
    376     AF_UNIRANGE_REC(  0x0100,  0x017F ),  /* Latin Extended-A                       */
    377     AF_UNIRANGE_REC(  0x0180,  0x024F ),  /* Latin Extended-B                       */
    378     AF_UNIRANGE_REC(  0x0250,  0x02AF ),  /* IPA Extensions                         */
    379     AF_UNIRANGE_REC(  0x02B9,  0x02DF ),  /* Spacing Modifier Letters               */
    380     AF_UNIRANGE_REC(  0x02E5,  0x02FF ),  /* ... continued                          */
    381     AF_UNIRANGE_REC(  0x0300,  0x036F ),  /* Combining Diacritical Marks            */
    382     AF_UNIRANGE_REC(  0x1AB0,  0x1ABE ),  /* Combining Diacritical Marks Extended   */
    383     AF_UNIRANGE_REC(  0x1D00,  0x1D2B ),  /* Phonetic Extensions                    */
    384     AF_UNIRANGE_REC(  0x1D6B,  0x1D77 ),  /* ... continued                          */
    385     AF_UNIRANGE_REC(  0x1D79,  0x1D7F ),  /* ... continued                          */
    386     AF_UNIRANGE_REC(  0x1D80,  0x1D9A ),  /* Phonetic Extensions Supplement         */
    387     AF_UNIRANGE_REC(  0x1DC0,  0x1DFF ),  /* Combining Diacritical Marks Supplement */
    388     AF_UNIRANGE_REC(  0x1E00,  0x1EFF ),  /* Latin Extended Additional              */
    389     AF_UNIRANGE_REC(  0x2000,  0x206F ),  /* General Punctuation                    */
    390     AF_UNIRANGE_REC(  0x20A0,  0x20B8 ),  /* Currency Symbols ...                   */
    391     AF_UNIRANGE_REC(  0x20BA,  0x20CF ),  /* ... except new Rupee sign              */
    392     AF_UNIRANGE_REC(  0x2150,  0x218F ),  /* Number Forms                           */
    393     AF_UNIRANGE_REC(  0x2C60,  0x2C7B ),  /* Latin Extended-C                       */
    394     AF_UNIRANGE_REC(  0x2C7E,  0x2C7F ),  /* ... continued                          */
    395     AF_UNIRANGE_REC(  0x2E00,  0x2E7F ),  /* Supplemental Punctuation               */
    396     AF_UNIRANGE_REC(  0xA720,  0xA76F ),  /* Latin Extended-D                       */
    397     AF_UNIRANGE_REC(  0xA771,  0xA7F7 ),  /* ... continued                          */
    398     AF_UNIRANGE_REC(  0xA7FA,  0xA7FF ),  /* ... continued                          */
    399     AF_UNIRANGE_REC(  0xAB30,  0xAB5B ),  /* Latin Extended-E                       */
    400     AF_UNIRANGE_REC(  0xAB60,  0xAB6F ),  /* ... continued                          */
    401     AF_UNIRANGE_REC(  0xFB00,  0xFB06 ),  /* Alphab. Present. Forms (Latin Ligs)    */
    402     AF_UNIRANGE_REC( 0x1D400, 0x1D7FF ),  /* Mathematical Alphanumeric Symbols      */
    403     AF_UNIRANGE_REC(       0,       0 )
    404   };
    405 
    406   const AF_Script_UniRangeRec  af_latn_nonbase_uniranges[] =
    407   {
    408     AF_UNIRANGE_REC(  0x005E,  0x0060 ),
    409     AF_UNIRANGE_REC(  0x007E,  0x007E ),
    410     AF_UNIRANGE_REC(  0x00A8,  0x00A9 ),
    411     AF_UNIRANGE_REC(  0x00AE,  0x00B0 ),
    412     AF_UNIRANGE_REC(  0x00B4,  0x00B4 ),
    413     AF_UNIRANGE_REC(  0x00B8,  0x00B8 ),
    414     AF_UNIRANGE_REC(  0x00BC,  0x00BE ),
    415     AF_UNIRANGE_REC(  0x02B9,  0x02DF ),
    416     AF_UNIRANGE_REC(  0x02E5,  0x02FF ),
    417     AF_UNIRANGE_REC(  0x0300,  0x036F ),
    418     AF_UNIRANGE_REC(  0x1AB0,  0x1ABE ),
    419     AF_UNIRANGE_REC(  0x1DC0,  0x1DFF ),
    420     AF_UNIRANGE_REC(  0x2017,  0x2017 ),
    421     AF_UNIRANGE_REC(  0x203E,  0x203E ),
    422     AF_UNIRANGE_REC(  0xA788,  0xA788 ),
    423     AF_UNIRANGE_REC(  0xA7F8,  0xA7FA ),
    424     AF_UNIRANGE_REC(       0,       0 )
    425   };
    426 
    427 
    428   const AF_Script_UniRangeRec  af_latb_uniranges[] =
    429   {
    430     AF_UNIRANGE_REC(  0x1D62,  0x1D6A ),  /* some small subscript letters   */
    431     AF_UNIRANGE_REC(  0x2080,  0x209C ),  /* subscript digits and letters   */
    432     AF_UNIRANGE_REC(  0x2C7C,  0x2C7C ),  /* latin subscript small letter j */
    433     AF_UNIRANGE_REC(       0,       0 )
    434   };
    435 
    436   const AF_Script_UniRangeRec  af_latb_nonbase_uniranges[] =
    437   {
    438     AF_UNIRANGE_REC( 0, 0 )
    439   };
    440 
    441 
    442   const AF_Script_UniRangeRec  af_latp_uniranges[] =
    443   {
    444     AF_UNIRANGE_REC(  0x00AA,  0x00AA ),  /* feminine ordinal indicator          */
    445     AF_UNIRANGE_REC(  0x00B2,  0x00B3 ),  /* superscript two and three           */
    446     AF_UNIRANGE_REC(  0x00B9,  0x00BA ),  /* superscript one, masc. ord. indic.  */
    447     AF_UNIRANGE_REC(  0x02B0,  0x02B8 ),  /* some latin superscript mod. letters */
    448     AF_UNIRANGE_REC(  0x02E0,  0x02E4 ),  /* some IPA modifier letters           */
    449     AF_UNIRANGE_REC(  0x1D2C,  0x1D61 ),  /* latin superscript modifier letters  */
    450     AF_UNIRANGE_REC(  0x1D78,  0x1D78 ),  /* modifier letter cyrillic en         */
    451     AF_UNIRANGE_REC(  0x1D9B,  0x1DBF ),  /* more modifier letters               */
    452     AF_UNIRANGE_REC(  0x2070,  0x207F ),  /* superscript digits and letters      */
    453     AF_UNIRANGE_REC(  0x2C7D,  0x2C7D ),  /* modifier letter capital v           */
    454     AF_UNIRANGE_REC(  0xA770,  0xA770 ),  /* modifier letter us                  */
    455     AF_UNIRANGE_REC(  0xA7F8,  0xA7F9 ),  /* more modifier letters               */
    456     AF_UNIRANGE_REC(  0xAB5C,  0xAB5F ),  /* more modifier letters               */
    457     AF_UNIRANGE_REC(       0,       0 )
    458   };
    459 
    460   const AF_Script_UniRangeRec  af_latp_nonbase_uniranges[] =
    461   {
    462     AF_UNIRANGE_REC( 0, 0 )
    463   };
    464 
    465 
    466   const AF_Script_UniRangeRec  af_mlym_uniranges[] =
    467   {
    468     AF_UNIRANGE_REC(  0x0D00,  0x0D7F ),  /* Malayalam */
    469     AF_UNIRANGE_REC(       0,       0 )
    470   };
    471 
    472   const AF_Script_UniRangeRec  af_mlym_nonbase_uniranges[] =
    473   {
    474     AF_UNIRANGE_REC(  0x0D01,  0x0D01 ),
    475     AF_UNIRANGE_REC(  0x0D4D,  0x0D4E ),
    476     AF_UNIRANGE_REC(  0x0D62,  0x0D63 ),
    477     AF_UNIRANGE_REC(       0,       0 )
    478   };
    479 
    480 
    481   const AF_Script_UniRangeRec  af_mymr_uniranges[] =
    482   {
    483     AF_UNIRANGE_REC( 0x1000, 0x109F ),    /* Myanmar            */
    484     AF_UNIRANGE_REC( 0xA9E0, 0xA9FF ),    /* Myanmar Extended-B */
    485     AF_UNIRANGE_REC( 0xAA60, 0xAA7F ),    /* Myanmar Extended-A */
    486     AF_UNIRANGE_REC(      0,      0 )
    487   };
    488 
    489   const AF_Script_UniRangeRec  af_mymr_nonbase_uniranges[] =
    490   {
    491     AF_UNIRANGE_REC( 0x102D, 0x1030 ),
    492     AF_UNIRANGE_REC( 0x1032, 0x1037 ),
    493     AF_UNIRANGE_REC( 0x103A, 0x103A ),
    494     AF_UNIRANGE_REC( 0x103D, 0x103E ),
    495     AF_UNIRANGE_REC( 0x1058, 0x1059 ),
    496     AF_UNIRANGE_REC( 0x105E, 0x1060 ),
    497     AF_UNIRANGE_REC( 0x1071, 0x1074 ),
    498     AF_UNIRANGE_REC( 0x1082, 0x1082 ),
    499     AF_UNIRANGE_REC( 0x1085, 0x1086 ),
    500     AF_UNIRANGE_REC( 0x108D, 0x108D ),
    501     AF_UNIRANGE_REC( 0xA9E5, 0xA9E5 ),
    502     AF_UNIRANGE_REC( 0xAA7C, 0xAA7C ),
    503     AF_UNIRANGE_REC(      0,      0 )
    504   };
    505 
    506 
    507   const AF_Script_UniRangeRec  af_none_uniranges[] =
    508   {
    509     AF_UNIRANGE_REC( 0, 0 )
    510   };
    511 
    512   const AF_Script_UniRangeRec  af_none_nonbase_uniranges[] =
    513   {
    514     AF_UNIRANGE_REC( 0, 0 )
    515   };
    516 
    517 
    518   const AF_Script_UniRangeRec  af_sinh_uniranges[] =
    519   {
    520     AF_UNIRANGE_REC(  0x0D80,  0x0DFF ),  /* Sinhala */
    521     AF_UNIRANGE_REC(       0,       0 )
    522   };
    523 
    524   const AF_Script_UniRangeRec  af_sinh_nonbase_uniranges[] =
    525   {
    526     AF_UNIRANGE_REC(  0x0DCA,  0x0DCA ),
    527     AF_UNIRANGE_REC(  0x0DD2,  0x0DD6 ),
    528     AF_UNIRANGE_REC(       0,       0 )
    529   };
    530 
    531 
    532   const AF_Script_UniRangeRec  af_taml_uniranges[] =
    533   {
    534     AF_UNIRANGE_REC(  0x0B80,  0x0BFF ),  /* Tamil */
    535     AF_UNIRANGE_REC(       0,       0 )
    536   };
    537 
    538   const AF_Script_UniRangeRec  af_taml_nonbase_uniranges[] =
    539   {
    540     AF_UNIRANGE_REC(  0x0B82,  0x0B82 ),
    541     AF_UNIRANGE_REC(  0x0BC0,  0x0BC2 ),
    542     AF_UNIRANGE_REC(  0x0BCD,  0x0BCD ),
    543     AF_UNIRANGE_REC(       0,       0 )
    544   };
    545 
    546 
    547   const AF_Script_UniRangeRec  af_telu_uniranges[] =
    548   {
    549     AF_UNIRANGE_REC(  0x0C00,  0x0C7F ),  /* Telugu */
    550     AF_UNIRANGE_REC(       0,       0 )
    551   };
    552 
    553   const AF_Script_UniRangeRec  af_telu_nonbase_uniranges[] =
    554   {
    555     AF_UNIRANGE_REC(  0x0C00,  0x0C00 ),
    556     AF_UNIRANGE_REC(  0x0C3E,  0x0C40 ),
    557     AF_UNIRANGE_REC(  0x0C46,  0x0C56 ),
    558     AF_UNIRANGE_REC(  0x0C62,  0x0C63 ),
    559     AF_UNIRANGE_REC(       0,       0 )
    560   };
    561 
    562 
    563   const AF_Script_UniRangeRec  af_thai_uniranges[] =
    564   {
    565     AF_UNIRANGE_REC(  0x0E00,  0x0E7F ),  /* Thai */
    566     AF_UNIRANGE_REC(       0,       0 )
    567   };
    568 
    569   const AF_Script_UniRangeRec  af_thai_nonbase_uniranges[] =
    570   {
    571     AF_UNIRANGE_REC(  0x0E31,  0x0E31 ),
    572     AF_UNIRANGE_REC(  0x0E34,  0x0E3A ),
    573     AF_UNIRANGE_REC(  0x0E47,  0x0E4E ),
    574     AF_UNIRANGE_REC(       0,       0 )
    575   };
    576 
    577 
    578 #ifdef AF_CONFIG_OPTION_INDIC
    579 
    580   const AF_Script_UniRangeRec  af_limb_uniranges[] =
    581   {
    582     AF_UNIRANGE_REC(  0x1900,  0x194F ),  /* Limbu */
    583     AF_UNIRANGE_REC(       0,       0 )
    584   };
    585 
    586   const AF_Script_UniRangeRec  af_limb_nonbase_uniranges[] =
    587   {
    588     AF_UNIRANGE_REC(  0x1920,  0x1922 ),
    589     AF_UNIRANGE_REC(  0x1927,  0x1934 ),
    590     AF_UNIRANGE_REC(  0x1937,  0x193B ),
    591     AF_UNIRANGE_REC(       0,       0 )
    592   };
    593 
    594 
    595   const AF_Script_UniRangeRec  af_orya_uniranges[] =
    596   {
    597     AF_UNIRANGE_REC(  0x0B00,  0x0B7F ),  /* Oriya */
    598     AF_UNIRANGE_REC(       0,       0 )
    599   };
    600 
    601   const AF_Script_UniRangeRec  af_orya_nonbase_uniranges[] =
    602   {
    603     AF_UNIRANGE_REC(  0x0B01,  0x0B02 ),
    604     AF_UNIRANGE_REC(  0x0B3C,  0x0B3C ),
    605     AF_UNIRANGE_REC(  0x0B3F,  0x0B3F ),
    606     AF_UNIRANGE_REC(  0x0B41,  0x0B44 ),
    607     AF_UNIRANGE_REC(  0x0B4D,  0x0B56 ),
    608     AF_UNIRANGE_REC(  0x0B62,  0x0B63 ),
    609     AF_UNIRANGE_REC(       0,       0 )
    610   };
    611 
    612 
    613   const AF_Script_UniRangeRec  af_sund_uniranges[] =
    614   {
    615     AF_UNIRANGE_REC(  0x1B80,  0x1BBF ),  /* Sundanese            */
    616     AF_UNIRANGE_REC(  0x1CC0,  0x1CCF ),  /* Sundanese Supplement */
    617     AF_UNIRANGE_REC(       0,       0 )
    618   };
    619 
    620   const AF_Script_UniRangeRec  af_sund_nonbase_uniranges[] =
    621   {
    622     AF_UNIRANGE_REC(  0x1B80,  0x1B82 ),
    623     AF_UNIRANGE_REC(  0x1BA1,  0x1BAD ),
    624     AF_UNIRANGE_REC(       0,       0 )
    625   };
    626 
    627 
    628   const AF_Script_UniRangeRec  af_sylo_uniranges[] =
    629   {
    630     AF_UNIRANGE_REC(  0xA800,  0xA82F ),  /* Syloti Nagri */
    631     AF_UNIRANGE_REC(       0,       0 )
    632   };
    633 
    634   const AF_Script_UniRangeRec  af_sylo_nonbase_uniranges[] =
    635   {
    636     AF_UNIRANGE_REC(  0xA802,  0xA802 ),
    637     AF_UNIRANGE_REC(  0xA806,  0xA806 ),
    638     AF_UNIRANGE_REC(  0xA80B,  0xA80B ),
    639     AF_UNIRANGE_REC(  0xA825,  0xA826 ),
    640     AF_UNIRANGE_REC(       0,       0 )
    641   };
    642 
    643 
    644   const AF_Script_UniRangeRec  af_tibt_uniranges[] =
    645   {
    646     AF_UNIRANGE_REC(  0x0F00,  0x0FFF ),  /* Tibetan */
    647     AF_UNIRANGE_REC(       0,       0 )
    648   };
    649 
    650   const AF_Script_UniRangeRec  af_tibt_nonbase_uniranges[] =
    651   {
    652     AF_UNIRANGE_REC(  0x0F18,  0x0F19 ),
    653     AF_UNIRANGE_REC(  0x0F35,  0x0F35 ),
    654     AF_UNIRANGE_REC(  0x0F37,  0x0F37 ),
    655     AF_UNIRANGE_REC(  0x0F39,  0x0F39 ),
    656     AF_UNIRANGE_REC(  0x0F3E,  0x0F3F ),
    657     AF_UNIRANGE_REC(  0x0F71,  0x0F7E ),
    658     AF_UNIRANGE_REC(  0x0F80,  0x0F84 ),
    659     AF_UNIRANGE_REC(  0x0F86,  0x0F87 ),
    660     AF_UNIRANGE_REC(  0x0F8D,  0x0FBC ),
    661     AF_UNIRANGE_REC(       0,       0 )
    662   };
    663 
    664 #endif /* !AF_CONFIG_OPTION_INDIC */
    665 
    666 #ifdef AF_CONFIG_OPTION_CJK
    667 
    668   /* this corresponds to Unicode 6.0 */
    669 
    670   const AF_Script_UniRangeRec  af_hani_uniranges[] =
    671   {
    672     AF_UNIRANGE_REC(  0x1100,  0x11FF ),  /* Hangul Jamo                             */
    673     AF_UNIRANGE_REC(  0x2E80,  0x2EFF ),  /* CJK Radicals Supplement                 */
    674     AF_UNIRANGE_REC(  0x2F00,  0x2FDF ),  /* Kangxi Radicals                         */
    675     AF_UNIRANGE_REC(  0x2FF0,  0x2FFF ),  /* Ideographic Description Characters      */
    676     AF_UNIRANGE_REC(  0x3000,  0x303F ),  /* CJK Symbols and Punctuation             */
    677     AF_UNIRANGE_REC(  0x3040,  0x309F ),  /* Hiragana                                */
    678     AF_UNIRANGE_REC(  0x30A0,  0x30FF ),  /* Katakana                                */
    679     AF_UNIRANGE_REC(  0x3100,  0x312F ),  /* Bopomofo                                */
    680     AF_UNIRANGE_REC(  0x3130,  0x318F ),  /* Hangul Compatibility Jamo               */
    681     AF_UNIRANGE_REC(  0x3190,  0x319F ),  /* Kanbun                                  */
    682     AF_UNIRANGE_REC(  0x31A0,  0x31BF ),  /* Bopomofo Extended                       */
    683     AF_UNIRANGE_REC(  0x31C0,  0x31EF ),  /* CJK Strokes                             */
    684     AF_UNIRANGE_REC(  0x31F0,  0x31FF ),  /* Katakana Phonetic Extensions            */
    685     AF_UNIRANGE_REC(  0x3300,  0x33FF ),  /* CJK Compatibility                       */
    686     AF_UNIRANGE_REC(  0x3400,  0x4DBF ),  /* CJK Unified Ideographs Extension A      */
    687     AF_UNIRANGE_REC(  0x4DC0,  0x4DFF ),  /* Yijing Hexagram Symbols                 */
    688     AF_UNIRANGE_REC(  0x4E00,  0x9FFF ),  /* CJK Unified Ideographs                  */
    689     AF_UNIRANGE_REC(  0xA960,  0xA97F ),  /* Hangul Jamo Extended-A                  */
    690     AF_UNIRANGE_REC(  0xAC00,  0xD7AF ),  /* Hangul Syllables                        */
    691     AF_UNIRANGE_REC(  0xD7B0,  0xD7FF ),  /* Hangul Jamo Extended-B                  */
    692     AF_UNIRANGE_REC(  0xF900,  0xFAFF ),  /* CJK Compatibility Ideographs            */
    693     AF_UNIRANGE_REC(  0xFE10,  0xFE1F ),  /* Vertical forms                          */
    694     AF_UNIRANGE_REC(  0xFE30,  0xFE4F ),  /* CJK Compatibility Forms                 */
    695     AF_UNIRANGE_REC(  0xFF00,  0xFFEF ),  /* Halfwidth and Fullwidth Forms           */
    696     AF_UNIRANGE_REC( 0x1B000, 0x1B0FF ),  /* Kana Supplement                         */
    697     AF_UNIRANGE_REC( 0x1D300, 0x1D35F ),  /* Tai Xuan Hing Symbols                   */
    698     AF_UNIRANGE_REC( 0x20000, 0x2A6DF ),  /* CJK Unified Ideographs Extension B      */
    699     AF_UNIRANGE_REC( 0x2A700, 0x2B73F ),  /* CJK Unified Ideographs Extension C      */
    700     AF_UNIRANGE_REC( 0x2B740, 0x2B81F ),  /* CJK Unified Ideographs Extension D      */
    701     AF_UNIRANGE_REC( 0x2F800, 0x2FA1F ),  /* CJK Compatibility Ideographs Supplement */
    702     AF_UNIRANGE_REC(       0,       0 )
    703   };
    704 
    705   const AF_Script_UniRangeRec  af_hani_nonbase_uniranges[] =
    706   {
    707     AF_UNIRANGE_REC(  0x302A,  0x302F ),
    708     AF_UNIRANGE_REC(  0x3190,  0x319F ),
    709     AF_UNIRANGE_REC(       0,       0 )
    710   };
    711 
    712 #endif /* !AF_CONFIG_OPTION_CJK */
    713 
    714 /* END */
    715