tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

afblue.dat (48975B)


      1 // afblue.dat
      2 //
      3 //   Auto-fitter data for blue strings.
      4 //
      5 // Copyright (C) 2013-2025 by
      6 // David Turner, Robert Wilhelm, and Werner Lemberg.
      7 //
      8 // This file is part of the FreeType project, and may only be used,
      9 // modified, and distributed under the terms of the FreeType project
     10 // license, LICENSE.TXT.  By continuing to use, modify, or distribute
     11 // this file you indicate that you have read the license and
     12 // understand and accept it fully.
     13 
     14 
     15 // This file contains data specific to blue zones.  It gets processed by
     16 // a script to simulate `jagged arrays', with enumeration values holding
     17 // offsets into the arrays.
     18 //
     19 // The format of the file is rather simple:  A section starts with three
     20 // labels separated by whitespace and followed by a colon (everything in a
     21 // single line); the first label gives the name of the enumeration template,
     22 // the second the name of the array template, and the third the name of the
     23 // `maximum' template.  The script then fills the corresponding templates
     24 // (indicated by `@' characters around the name).
     25 //
     26 // A section contains one or more data records.  Each data record consists
     27 // of two or more lines.  The first line holds the enumeration name, and the
     28 // remaining lines the corresponding array data.
     29 //
     30 // There are two possible representations for array data.
     31 //
     32 // - A string of characters or character clusters (for example, representing
     33 //   Aksharas, Devanagari syllables) in UTF-8 encoding enclosed in double
     34 //   quotes, using C syntax, where the elements are separated by spaces.
     35 //   There can be only one string per line, thus the starting and ending
     36 //   double quote must be the first and last character in the line,
     37 //   respectively, ignoring whitespace before and after the string.  If
     38 //   there are multiple strings (in multiple lines), they are concatenated
     39 //   to a single string.  In the output, a string gets represented as a
     40 //   series of singles bytes, followed by a zero byte.  The enumeration
     41 //   values simply hold byte offsets to the start of the corresponding
     42 //   strings.
     43 //
     44 //   For strings, the `maximum' template holds the maximum number of
     45 //   non-space characters in all strings.
     46 //
     47 // - Data blocks enclosed in balanced braces, which get copied verbatim and
     48 //   which can span multiple lines.  The opening brace of a block must be
     49 //   the first character of a line (ignoring whitespace), and the closing
     50 //   brace the last (ignoring whitespace also).  The script appends a comma
     51 //   character after each block and counts the number of blocks to set the
     52 //   enumeration values.
     53 //
     54 //   For data blocks, the `maximum' template holds the maximum number of
     55 //   array elements.
     56 //
     57 // A section can contain either strings only or data blocks only.
     58 //
     59 // A comment line starts with `//'; it gets removed.  A preprocessor
     60 // directive line (using the standard syntax of `cpp') starts with `#' and
     61 // gets copied verbatim to both the enumeration and the array.  Whitespace
     62 // outside of a string is insignificant.
     63 //
     64 // Preprocessor directives are ignored while the script computes maximum
     65 // values; this essentially means that the maximum values can easily be too
     66 // large.  Given that the purpose of those values is to create local
     67 // fixed-size arrays at compile time for further processing of the blue zone
     68 // data, this isn't a problem.  Note the final zero byte of a string is not
     69 // counted.  Note also that the count holds the number of UTF-8 encoded
     70 // characters, not bytes.
     71 
     72 
     73 // The blue zone string data, to be used in the blue stringsets below.
     74 
     75 AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
     76 
     77   AF_BLUE_STRING_ADLAM_CAPITAL_TOP
     78     "𞤌 𞤅 𞤈 𞤏 𞤔 𞤚"
     79   AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM
     80     "𞤂 𞤖"
     81   AF_BLUE_STRING_ADLAM_SMALL_TOP
     82     "𞤬 𞤮 𞤻 𞤼 𞤾"
     83   AF_BLUE_STRING_ADLAM_SMALL_BOTTOM
     84     "𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀"
     85 
     86   AF_BLUE_STRING_ARABIC_TOP
     87     "ا إ ل ك ط ظ"
     88   AF_BLUE_STRING_ARABIC_BOTTOM
     89     "ت ث ط ظ ك"
     90   // We don't necessarily have access to medial forms via Unicode in case
     91   // Arabic presentational forms are missing.  The only character that is
     92   // guaranteed to have the same vertical position with joining (that is,
     93   // non-isolated) forms is U+0640, ARABIC TATWEEL, which must join both
     94   // round and flat curves.
     95   AF_BLUE_STRING_ARABIC_JOIN
     96     "ـ"
     97 
     98   AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP
     99     "Ա Մ Ւ Ս Բ Գ Դ Օ"
    100   AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM
    101     "Ւ Ո Դ Ճ Շ Ս Տ Օ"
    102   AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER
    103     "ե է ի մ վ ֆ ճ"
    104   AF_BLUE_STRING_ARMENIAN_SMALL_TOP
    105     "ա յ ւ ս գ շ ր օ"
    106   AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM
    107     "հ ո ճ ա ե ծ ս օ"
    108   AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER
    109     "բ ը ի լ ղ պ փ ց"
    110 
    111   AF_BLUE_STRING_AVESTAN_TOP
    112     "𐬀 𐬁 𐬐 𐬛"
    113   AF_BLUE_STRING_AVESTAN_BOTTOM
    114     "𐬀 𐬁"
    115 
    116   AF_BLUE_STRING_BAMUM_TOP
    117     "ꚧ ꚨ ꛛ ꛉ ꛁ ꛈ ꛫ ꛯ"
    118   AF_BLUE_STRING_BAMUM_BOTTOM
    119     "ꚭ ꚳ ꚶ ꛬ ꚢ ꚽ ꛯ ꛲"
    120 
    121   AF_BLUE_STRING_BENGALI_BASE
    122     "অ ড ত ন ব ভ ল ক"
    123   AF_BLUE_STRING_BENGALI_TOP
    124     "ই ট ঠ ি ী ৈ ৗ"
    125   AF_BLUE_STRING_BENGALI_HEAD
    126     "ও এ ড ত ন ব ল ক"
    127 
    128   AF_BLUE_STRING_BUHID_TOP
    129     "ᝐ ᝈ"
    130   AF_BLUE_STRING_BUHID_LARGE
    131     "ᝅ ᝊ ᝎ"
    132   AF_BLUE_STRING_BUHID_SMALL
    133     "ᝂ ᝃ ᝉ ᝌ"
    134   AF_BLUE_STRING_BUHID_BOTTOM
    135     "ᝀ ᝃ ᝆ ᝉ ᝋ ᝏ ᝑ"
    136 
    137   AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP
    138     "ᗜ ᖴ ᐁ ᒣ ᑫ ᑎ ᔑ ᗰ"
    139   AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM
    140     "ᗶ ᖵ ᒧ ᐃ ᑌ ᒍ ᔑ ᗢ"
    141   AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP
    142     "ᓓ ᓕ ᓀ ᓂ ᓄ ᕄ ᕆ ᘣ"
    143   AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM
    144     "ᕃ ᓂ ᓀ ᕂ ᓗ ᓚ ᕆ ᘣ"
    145   AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP
    146     "ᐪ ᙆ ᣘ ᐢ ᒾ ᣗ ᔆ"
    147   AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM
    148     "ᙆ ᗮ ᒻ ᐞ ᔆ ᒡ ᒢ ᓑ"
    149 
    150   AF_BLUE_STRING_CARIAN_TOP
    151     "𐊧 𐊫 𐊬 𐊭 𐊱 𐊺 𐊼 𐊿"
    152   AF_BLUE_STRING_CARIAN_BOTTOM
    153     "𐊣 𐊧 𐊷 𐋀 𐊫 𐊸 𐋉"
    154 
    155   AF_BLUE_STRING_CHAKMA_TOP
    156     "𑄃 𑄅 𑄉 𑄙 𑄗"
    157   AF_BLUE_STRING_CHAKMA_BOTTOM
    158     "𑄅 𑄛 𑄝 𑄗 𑄓"
    159   AF_BLUE_STRING_CHAKMA_DESCENDER
    160     "𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢"
    161 
    162   AF_BLUE_STRING_CHEROKEE_CAPITAL
    163     "Ꮖ Ꮋ Ꭼ Ꮓ Ꭴ Ꮳ Ꭶ Ꮥ"
    164   AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER
    165     "ꮒ ꮤ ꮶ ꭴ ꭾ ꮗ ꮝ ꮿ"
    166   AF_BLUE_STRING_CHEROKEE_SMALL
    167     "ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ"
    168   AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER
    169     "ᏸ ꮐ ꭹ ꭻ"
    170 
    171   AF_BLUE_STRING_COPTIC_CAPITAL_TOP
    172     "Ⲍ Ⲏ Ⲡ Ⳟ Ⲟ Ⲑ Ⲥ Ⳋ"
    173   AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM
    174     "Ⳑ Ⳙ Ⳟ Ⲏ Ⲟ Ⲑ Ⳝ Ⲱ"
    175   AF_BLUE_STRING_COPTIC_SMALL_TOP
    176     "ⲍ ⲏ ⲡ ⳟ ⲟ ⲑ ⲥ ⳋ"
    177   AF_BLUE_STRING_COPTIC_SMALL_BOTTOM
    178     "ⳑ ⳙ ⳟ ⲏ ⲟ ⲑ ⳝ Ⳓ"
    179 
    180   AF_BLUE_STRING_CYPRIOT_TOP
    181     "𐠍 𐠙 𐠳 𐠱 𐠅 𐠓 𐠣 𐠦"
    182   AF_BLUE_STRING_CYPRIOT_BOTTOM
    183     "𐠃 𐠊 𐠛 𐠣 𐠳 𐠵 𐠐"
    184   AF_BLUE_STRING_CYPRIOT_SMALL
    185     "𐠈 𐠏 𐠖"
    186 
    187   AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP
    188     "Б В Е П З О С Э"
    189   AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM
    190     "Б В Е Ш З О С Э"
    191   AF_BLUE_STRING_CYRILLIC_SMALL
    192     "х п н ш е з о с"
    193   AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER
    194     "р у ф"
    195 
    196   AF_BLUE_STRING_DESERET_CAPITAL_TOP
    197     "𐐂 𐐄 𐐋 𐐗 𐐑"
    198   AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM
    199     "𐐀 𐐂 𐐄 𐐗 𐐛"
    200   AF_BLUE_STRING_DESERET_SMALL_TOP
    201     "𐐪 𐐬 𐐳 𐐿 𐐹"
    202   AF_BLUE_STRING_DESERET_SMALL_BOTTOM
    203     "𐐨 𐐪 𐐬 𐐿 𐑃"
    204 
    205   AF_BLUE_STRING_DEVANAGARI_BASE
    206     "क न म उ छ ट ठ ड"
    207   AF_BLUE_STRING_DEVANAGARI_TOP
    208     "ई ऐ ओ औ ि ी ो ौ"
    209   // note that some fonts have extreme variation in the height of the
    210   // round head elements; for this reason we also define the `base'
    211   // blue zone, which must be always present
    212   AF_BLUE_STRING_DEVANAGARI_HEAD
    213     "क म अ आ थ ध भ श"
    214   AF_BLUE_STRING_DEVANAGARI_BOTTOM
    215     "ु ृ"
    216 
    217   AF_BLUE_STRING_ETHIOPIC_TOP
    218     "ሀ ሃ ዘ ፐ ማ በ ዋ ዐ"
    219   AF_BLUE_STRING_ETHIOPIC_BOTTOM
    220     "ለ ሐ በ ዘ ሀ ሪ ዐ ጨ"
    221 
    222   AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP
    223     "გ დ ე ვ თ ი ო ღ"
    224   AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM
    225     "ა ზ მ ს შ ძ ხ პ"
    226   AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER
    227     "ს ხ ქ ზ მ შ ჩ წ"
    228   AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER
    229     "ე ვ ჟ ტ უ ფ ქ ყ"
    230 
    231   AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP
    232     "Ⴑ Ⴇ Ⴙ Ⴜ Ⴄ Ⴅ Ⴓ Ⴚ"
    233   AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM
    234     "Ⴄ Ⴅ Ⴇ Ⴈ Ⴆ Ⴑ Ⴊ Ⴋ"
    235 
    236   AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP
    237     "ⴁ ⴗ ⴂ ⴄ ⴅ ⴇ ⴔ ⴖ"
    238   AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM
    239     "ⴈ ⴌ ⴖ ⴎ ⴃ ⴆ ⴋ ⴢ"
    240   AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER
    241     "ⴐ ⴑ ⴓ ⴕ ⴙ ⴛ ⴡ ⴣ"
    242   AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER
    243     "ⴄ ⴅ ⴔ ⴕ ⴁ ⴂ ⴘ ⴝ"
    244 
    245   AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP
    246     "Ნ Ჟ Ჳ Ჸ Გ Ე Ო Ჴ"
    247   AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM
    248     "Ი Ჲ Ო Ჩ Მ Შ Ჯ Ჽ"
    249 
    250   AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP
    251     "Ⰵ Ⱄ Ⱚ Ⰴ Ⰲ Ⰺ Ⱛ Ⰻ"
    252   AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM
    253     "Ⰵ Ⰴ Ⰲ Ⱚ Ⱎ Ⱑ Ⰺ Ⱄ"
    254   AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP
    255     "ⰵ ⱄ ⱚ ⰴ ⰲ ⰺ ⱛ ⰻ"
    256   AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM
    257     "ⰵ ⰴ ⰲ ⱚ ⱎ ⱑ ⰺ ⱄ"
    258 
    259   AF_BLUE_STRING_GOTHIC_TOP
    260     "𐌲 𐌶 𐍀 𐍄 𐌴 𐍃 𐍈 𐌾"
    261   AF_BLUE_STRING_GOTHIC_BOTTOM
    262     "𐌶 𐌴 𐍃 𐍈"
    263 
    264   AF_BLUE_STRING_GREEK_CAPITAL_TOP
    265     "Γ Β Ε Ζ Θ Ο Ω"
    266   AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM
    267     "Β Δ Ζ Ξ Θ Ο"
    268   AF_BLUE_STRING_GREEK_SMALL_BETA_TOP
    269     "β θ δ ζ λ ξ"
    270   AF_BLUE_STRING_GREEK_SMALL
    271     "α ε ι ο π σ τ ω"
    272   AF_BLUE_STRING_GREEK_SMALL_DESCENDER
    273     "β γ η μ ρ φ χ ψ"
    274 
    275   AF_BLUE_STRING_GUJARATI_TOP
    276     "ત ન ઋ ઌ છ ટ ર ૦"
    277   AF_BLUE_STRING_GUJARATI_BOTTOM
    278     "ખ ગ ઘ ઞ ઇ ઈ ઠ જ"
    279   AF_BLUE_STRING_GUJARATI_ASCENDER
    280     "ઈ ઊ િ ી લી શ્ચિ જિ સી"
    281   AF_BLUE_STRING_GUJARATI_DESCENDER
    282     "ુ ૃ ૄ ખુ છૃ છૄ"
    283   AF_BLUE_STRING_GUJARATI_DIGIT_TOP
    284     "૦ ૧ ૨ ૩ ૭"
    285 
    286   AF_BLUE_STRING_GURMUKHI_BASE
    287     "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
    288   AF_BLUE_STRING_GURMUKHI_HEAD
    289     "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
    290   AF_BLUE_STRING_GURMUKHI_TOP
    291     "ਇ ਈ ਉ ਏ ਓ ੳ ਿ ੀ"
    292   AF_BLUE_STRING_GURMUKHI_BOTTOM
    293     "ਅ ਏ ਓ ਗ ਜ ਠ ਰ ਸ"
    294   AF_BLUE_STRING_GURMUKHI_DIGIT_TOP
    295     "੦ ੧ ੨ ੩ ੭"
    296 
    297   AF_BLUE_STRING_HEBREW_TOP
    298     "ב ד ה ח ך כ ם ס"
    299   AF_BLUE_STRING_HEBREW_BOTTOM
    300     "ב ט כ ם ס צ"
    301   AF_BLUE_STRING_HEBREW_DESCENDER
    302     "ק ך ן ף ץ"
    303 
    304   AF_BLUE_STRING_KANNADA_TOP
    305     "ಇ ಊ ಐ ಣ ಸಾ ನಾ ದಾ ರಾ"
    306   AF_BLUE_STRING_KANNADA_BOTTOM
    307     "ಅ ಉ ಎ ಲ ೦ ೨ ೬ ೭"
    308 
    309   AF_BLUE_STRING_KAYAH_LI_TOP
    310     "꤅ ꤏ ꤁ ꤋ ꤀ ꤍ"
    311   AF_BLUE_STRING_KAYAH_LI_BOTTOM
    312     "꤈ ꤘ ꤀ ꤍ ꤢ"
    313   AF_BLUE_STRING_KAYAH_LI_ASCENDER
    314     "ꤖ ꤡ"
    315   AF_BLUE_STRING_KAYAH_LI_DESCENDER
    316     "ꤑ ꤜ ꤞ"
    317   AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER
    318     "ꤑ꤬ ꤜ꤭ ꤔ꤬"
    319 
    320   AF_BLUE_STRING_KHMER_TOP
    321     "ខ ទ ន ឧ ឩ ា"
    322   AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP
    323     "ក្ក ក្ខ ក្គ ក្ថ"
    324   AF_BLUE_STRING_KHMER_BOTTOM
    325     "ខ ឃ ច ឋ ប ម យ ឲ"
    326   AF_BLUE_STRING_KHMER_DESCENDER
    327     "ត្រ រៀ ឲ្យ អឿ"
    328   AF_BLUE_STRING_KHMER_LARGE_DESCENDER
    329     "ន្ត្រៃ ង្ខ្យ ក្បៀ ច្រៀ ន្តឿ ល្បឿ"
    330 
    331   AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP
    332     "᧠ ᧡"
    333   AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM
    334     "᧶ ᧹"
    335 
    336   AF_BLUE_STRING_LAO_TOP
    337     "າ ດ ອ ມ ລ ວ ຣ ງ"
    338   AF_BLUE_STRING_LAO_BOTTOM
    339     "າ ອ ບ ຍ ຣ ຮ ວ ຢ"
    340   AF_BLUE_STRING_LAO_ASCENDER
    341     "ປ ຢ ຟ ຝ"
    342   AF_BLUE_STRING_LAO_LARGE_ASCENDER
    343     "ໂ ໄ ໃ"
    344   AF_BLUE_STRING_LAO_DESCENDER
    345     "ງ ຊ ຖ ຽ ໆ ຯ"
    346 
    347   AF_BLUE_STRING_LATIN_CAPITAL_TOP
    348     "T H E Z O C Q S"
    349   AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM
    350     "H E Z L O C U S"
    351   AF_BLUE_STRING_LATIN_SMALL_F_TOP
    352     "f i j k d b h"
    353   AF_BLUE_STRING_LATIN_SMALL_TOP
    354     "u v x z o e s c"
    355   AF_BLUE_STRING_LATIN_SMALL_BOTTOM
    356     "n r x z o e s c"
    357   AF_BLUE_STRING_LATIN_SMALL_DESCENDER
    358     "p q g j y"
    359 
    360   // we assume that both the subscript and superscript ranges
    361   // don't contain oldstyle digits (actually, most fonts probably
    362   // have digits only in those ranges)
    363   AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP
    364     "₀ ₃ ₅ ₇ ₈"
    365   AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM
    366     "₀ ₁ ₂ ₃ ₈"
    367   AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP
    368     "ᵢ ⱼ ₕ ₖ ₗ"
    369   AF_BLUE_STRING_LATIN_SUBS_SMALL
    370     "ₐ ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ"
    371   AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER
    372     "ᵦ ᵧ ᵨ ᵩ ₚ"
    373 
    374   AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP
    375     "⁰ ³ ⁵ ⁷ ᵀ ᴴ ᴱ ᴼ"
    376   AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM
    377     "⁰ ¹ ² ³ ᴱ ᴸ ᴼ ᵁ"
    378   AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP
    379     "ᵇ ᵈ ᵏ ʰ ʲ ᶠ ⁱ"
    380   AF_BLUE_STRING_LATIN_SUPS_SMALL
    381     "ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ"
    382   AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER
    383     "ᵖ ʸ ᵍ"
    384 
    385   AF_BLUE_STRING_LISU_TOP
    386     "ꓡ ꓧ ꓱ ꓶ ꓩ ꓚ ꓵ ꓳ"
    387   AF_BLUE_STRING_LISU_BOTTOM
    388     "ꓕ ꓜ ꓞ ꓡ ꓛ ꓢ ꓳ ꓴ"
    389 
    390   AF_BLUE_STRING_MALAYALAM_TOP
    391     "ഒ ട ഠ റ ച പ ച്ച പ്പ"
    392   AF_BLUE_STRING_MALAYALAM_BOTTOM
    393     "ട ഠ ധ ശ ഘ ച ഥ ല"
    394 
    395   AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP
    396     "𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹟"
    397   AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM
    398     "𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹒 𖹓"
    399   AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP
    400     "𖹤 𖹬 𖹧 𖹴 𖹶 𖹾"
    401   AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP
    402     "𖹠 𖹡 𖹢 𖹹 𖹳 𖹮"
    403   AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM
    404     "𖹠 𖹡 𖹢 𖹳 𖹭 𖹽"
    405   AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER
    406     "𖹥 𖹨 𖹩"
    407   AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP
    408     "𖺀 𖺅 𖺈 𖺄 𖺍"
    409 
    410   AF_BLUE_STRING_MONGOLIAN_TOP_BASE
    411     "ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ ‍ᡡ‍ ‍ᡳ‍"
    412   AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE
    413     "ᡃ"
    414 
    415   AF_BLUE_STRING_MYANMAR_TOP
    416     "ခ ဂ င ဒ ဝ ၥ ၊ ။"
    417   AF_BLUE_STRING_MYANMAR_BOTTOM
    418     "င ဎ ဒ ပ ဗ ဝ ၊ ။"
    419   AF_BLUE_STRING_MYANMAR_ASCENDER
    420     "ဩ ြ ၍ ၏ ၆ ါ ိ"
    421   AF_BLUE_STRING_MYANMAR_DESCENDER
    422     "ဉ ည ဥ ဩ ဨ ၂ ၅ ၉"
    423 
    424   AF_BLUE_STRING_NKO_TOP
    425     "ߐ ߉ ߒ ߟ ߖ ߜ ߠ ߥ"
    426   AF_BLUE_STRING_NKO_BOTTOM
    427     "߀ ߘ ߡ ߠ ߥ"
    428   AF_BLUE_STRING_NKO_SMALL_TOP
    429     "ߏ ߛ ߋ"
    430   AF_BLUE_STRING_NKO_SMALL_BOTTOM
    431     "ߎ ߏ ߛ ߋ"
    432 
    433   AF_BLUE_STRING_OL_CHIKI
    434     "ᱛ ᱜ ᱝ ᱡ ᱢ ᱥ"
    435 
    436   AF_BLUE_STRING_OLD_TURKIC_TOP
    437     "𐰗 𐰘 𐰧"
    438   AF_BLUE_STRING_OLD_TURKIC_BOTTOM
    439     "𐰉 𐰗 𐰦 𐰧"
    440 
    441   AF_BLUE_STRING_OSAGE_CAPITAL_TOP
    442     "𐒾 𐓍 𐓒 𐓓 𐒻 𐓂 𐒵 𐓆"
    443   AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM
    444     "𐒰 𐓍 𐓂 𐒿 𐓎 𐒹"
    445   AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER
    446     "𐒼 𐒽 𐒾"
    447   AF_BLUE_STRING_OSAGE_SMALL_TOP
    448     "𐓵 𐓶 𐓺 𐓻 𐓝 𐓣 𐓪 𐓮"
    449   AF_BLUE_STRING_OSAGE_SMALL_BOTTOM
    450     "𐓘 𐓚 𐓣 𐓵 𐓡 𐓧 𐓪 𐓶"
    451   AF_BLUE_STRING_OSAGE_SMALL_ASCENDER
    452     "𐓤 𐓦 𐓸 𐓹 𐓛"
    453   AF_BLUE_STRING_OSAGE_SMALL_DESCENDER
    454     "𐓤 𐓥 𐓦"
    455 
    456   AF_BLUE_STRING_OSMANYA_TOP
    457     "𐒆 𐒉 𐒐 𐒒 𐒘 𐒛 𐒠 𐒣"
    458   AF_BLUE_STRING_OSMANYA_BOTTOM
    459     "𐒀 𐒂 𐒆 𐒈 𐒊 𐒒 𐒠 𐒩"
    460 
    461   AF_BLUE_STRING_ROHINGYA_TOP
    462     "𐴃 𐴀 𐴆 𐴖 𐴕"
    463   AF_BLUE_STRING_ROHINGYA_BOTTOM
    464     "𐴔 𐴖 𐴕 𐴑 𐴐"
    465   AF_BLUE_STRING_ROHINGYA_JOIN
    466     "ـ"
    467 
    468   AF_BLUE_STRING_SAURASHTRA_TOP
    469     "ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ"
    470   AF_BLUE_STRING_SAURASHTRA_BOTTOM
    471     "ꢂ ꢨ ꢺ ꢤ ꢎ"
    472 
    473   AF_BLUE_STRING_SHAVIAN_TOP
    474     "𐑕 𐑙"
    475   AF_BLUE_STRING_SHAVIAN_BOTTOM
    476     "𐑔 𐑖 𐑗 𐑹 𐑻"
    477   AF_BLUE_STRING_SHAVIAN_DESCENDER
    478     "𐑟 𐑣"
    479   AF_BLUE_STRING_SHAVIAN_SMALL_TOP
    480     "𐑱 𐑲 𐑳 𐑴 𐑸 𐑺 𐑼"
    481   AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM
    482     "𐑴 𐑻 𐑹"
    483 
    484   AF_BLUE_STRING_SINHALA_TOP
    485     "ඉ ක ඝ ඳ ප ය ල ෆ"
    486   AF_BLUE_STRING_SINHALA_BOTTOM
    487     "එ ඔ ඝ ජ ට ථ ධ ර"
    488   AF_BLUE_STRING_SINHALA_DESCENDER
    489     "ද ඳ උ ල තූ තු බු දු"
    490 
    491   AF_BLUE_STRING_SUNDANESE_TOP
    492     "ᮋ ᮞ ᮮ ᮽ ᮰ ᮈ"
    493   AF_BLUE_STRING_SUNDANESE_BOTTOM
    494     "ᮄ ᮔ ᮕ ᮗ ᮰ ᮆ ᮈ ᮉ"
    495   AF_BLUE_STRING_SUNDANESE_DESCENDER
    496     "ᮼ ᳄"
    497 
    498   AF_BLUE_STRING_TAI_VIET_TOP
    499     "ꪆ ꪔ ꪒ ꪖ ꪫ"
    500   AF_BLUE_STRING_TAI_VIET_BOTTOM
    501     "ꪉ ꪫ ꪮ"
    502 
    503   AF_BLUE_STRING_TAMIL_TOP
    504     "உ ஒ ஓ ற ஈ க ங ச"
    505   AF_BLUE_STRING_TAMIL_BOTTOM
    506     "க ச ல ஶ உ ங ட ப"
    507 
    508   AF_BLUE_STRING_TELUGU_TOP
    509     "ఇ ఌ ఙ ఞ ణ ఱ ౯"
    510   AF_BLUE_STRING_TELUGU_BOTTOM
    511     "అ క చ ర ఽ ౨ ౬"
    512 
    513   AF_BLUE_STRING_THAI_TOP
    514     "บ เ แ อ ก า"
    515   AF_BLUE_STRING_THAI_BOTTOM
    516     "บ ป ษ ฯ อ ย ฮ"
    517   AF_BLUE_STRING_THAI_ASCENDER
    518     "ป ฝ ฟ"
    519   AF_BLUE_STRING_THAI_LARGE_ASCENDER
    520     "โ ใ ไ"
    521   AF_BLUE_STRING_THAI_DESCENDER
    522     "ฎ ฏ ฤ ฦ"
    523   AF_BLUE_STRING_THAI_LARGE_DESCENDER
    524     "ญ ฐ"
    525   AF_BLUE_STRING_THAI_DIGIT_TOP
    526     "๐ ๑ ๓"
    527 
    528   AF_BLUE_STRING_TIFINAGH
    529     "ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ"
    530 
    531   AF_BLUE_STRING_VAI_TOP
    532     "ꗍ ꘖ ꘙ ꘜ ꖜ ꖝ ꔅ ꕢ"
    533   AF_BLUE_STRING_VAI_BOTTOM
    534     "ꗍ ꘖ ꘙ ꗞ ꔅ ꕢ ꖜ ꔆ"
    535 
    536 
    537 #ifdef AF_CONFIG_OPTION_CJK
    538 
    539   AF_BLUE_STRING_CJK_TOP
    540     "他 们 你 來 們 到 和 地"
    541     " 对 對 就 席 我 时 時 會"
    542     " 来 為 能 舰 說 说 这 這"
    543     " 齊 |"
    544     " 军 同 已 愿 既 星 是 景"
    545     " 民 照 现 現 理 用 置 要"
    546     " 軍 那 配 里 開 雷 露 面"
    547     " 顾"
    548   AF_BLUE_STRING_CJK_BOTTOM
    549     "个 为 人 他 以 们 你 來"
    550     " 個 們 到 和 大 对 對 就"
    551     " 我 时 時 有 来 為 要 說"
    552     " 说 |"
    553     " 主 些 因 它 想 意 理 生"
    554     " 當 看 着 置 者 自 著 裡"
    555     " 过 还 进 進 過 道 還 里"
    556     " 面"
    557 
    558 #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
    559 
    560   AF_BLUE_STRING_CJK_LEFT
    561     " 些 们 你 來 們 到 和 地"
    562     " 她 将 將 就 年 得 情 最"
    563     " 样 樣 理 能 說 说 这 這"
    564     " 通 |"
    565     " 即 吗 吧 听 呢 品 响 嗎"
    566     " 师 師 收 断 斷 明 眼 間"
    567     " 间 际 陈 限 除 陳 随 際"
    568     " 隨"
    569   AF_BLUE_STRING_CJK_RIGHT
    570     "事 前 學 将 將 情 想 或"
    571     " 政 斯 新 样 樣 民 沒 没"
    572     " 然 特 现 現 球 第 經 谁"
    573     " 起 |"
    574     " 例 別 别 制 动 動 吗 嗎"
    575     " 增 指 明 朝 期 构 物 确"
    576     " 种 調 调 費 费 那 都 間"
    577     " 间"
    578 
    579 #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
    580 
    581 #endif /* AF_CONFIG_OPTION_CJK                */
    582 
    583 
    584 // The blue zone stringsets, as used in the script styles, cf. `afstyles.h'.
    585 //
    586 // The AF_BLUE_PROPERTY_XXX flags are defined in `afblue.h'; here some
    587 // explanations.
    588 //
    589 // A blue zone in general is defined by a reference and an overshoot line.
    590 // During the hinting process, all coordinate values between those two lines
    591 // are set equal to the reference value, provided that the blue zone is not
    592 // wider than 0.75 pixels (otherwise the blue zone gets ignored).  All
    593 // entries must have `AF_BLUE_STRING_MAX' as the final line.
    594 //
    595 // During the glyph analysis, edges are sorted from bottom to top, and then
    596 // sequentially checked, edge by edge, against the blue zones in the order
    597 // given below.
    598 //
    599 //
    600 // latin auto-hinter
    601 // -----------------
    602 //
    603 // Characters in a blue string are automatically classified as having a flat
    604 // (reference) or a round (overshoot) extremum.  The blue zone is then set
    605 // up by the mean values of all flat extrema and all round extrema,
    606 // respectively.  Only horizontal blue zones (i.e., adjusting vertical
    607 // coordinate values) are supported.
    608 //
    609 // Some scripts like Khmer need character composition to get all necessary
    610 // blue zones, since Unicode only provides an abstract data model that
    611 // doesn't represent all possible glyph shapes.  For such character
    612 // clusters, the HarfBuzz library is used to convert them into the
    613 // corresponding glyphs.  The largest glyph element (where `largest' can be
    614 // either `largest ascender' or `largest descender') then defines the
    615 // corresponding flat or round extremum.
    616 //
    617 // For the latin auto-hinter, the overshoot should be larger than the
    618 // reference for top zones, and vice versa for bottom zones.
    619 //
    620 //   LATIN_TOP
    621 //     Take the maximum flat and round coordinate values of the blue string
    622 //     characters for computing the blue zone's reference and overshoot
    623 //     values.
    624 //
    625 //     If not set, take the minimum values.
    626 //
    627 //     Mutually exclusive with `LATIN_SUB_TOP'.
    628 //
    629 //   LATIN_SUB_TOP
    630 //     For all glyphs of a character cluster, compute the maximum flat
    631 //     and round coordinate values of each component, then take the
    632 //     smallest of the maximum values.  The idea is to get the top of
    633 //     subscript glyphs, as used in Khmer, for example.  Note that
    634 //     this mechanism doesn't work for ordinary ligatures.
    635 //
    636 //     This flags indicates a secondary blue zone: It gets removed if
    637 //     there is a non-LATIN_SUB_TOP blue zone at the same coordinate
    638 //     value (after scaling).
    639 //
    640 //     Mutually exclusive with `LATIN_TOP'.
    641 //
    642 //   LATIN_NEUTRAL
    643 //     Ignore round extrema and define the blue zone with flat values only.
    644 //     Both top and bottom of contours can match.  This is useful for
    645 //     scripts like Devanagari where vowel signs attach to the base
    646 //     character and are implemented as components of composite glyphs.
    647 //
    648 //     If not set, both round and flat extrema are taken into account.
    649 //     Additionally, only the top or the bottom of a contour can match,
    650 //     depending on the LATIN_TOP flag.
    651 //
    652 //     Neutral blue zones should always follow non-neutral blue zones.
    653 //
    654 //   LATIN_X_HEIGHT
    655 //     Scale all glyphs vertically from the corresponding script to make the
    656 //     reference line of this blue zone align on the grid.  The scaling
    657 //     takes place before all other blue zones get aligned to the grid.
    658 //     Only one blue character string of a script style can have this flag.
    659 //
    660 //   LATIN_LONG
    661 //     Apply an additional constraint for blue zone values: Don't
    662 //     necessarily use the extremum as-is but a segment of the topmost (or
    663 //     bottommost) contour that is longer than a heuristic threshold, and
    664 //     which is not too far away vertically from the real extremum.  This
    665 //     ensures that small bumps in the outline are ignored (for example, the
    666 //     `vertical serifs' found in many Hebrew glyph designs).
    667 //
    668 //     The segment must be at least EM/25 font units long, and the distance
    669 //     to the extremum must be smaller than EM/4.
    670 //
    671 //
    672 // cjk auto-hinter
    673 // ---------------
    674 //
    675 // Characters in a blue string are *not* automatically classified.  Instead,
    676 // first come the characters used for the overshoot value, then the
    677 // character `|', then the characters used for the reference value
    678 // (everything separated by space characters).  The blue zone is then set up
    679 // by the mean values of all reference values and all overshoot values,
    680 // respectively.  Both horizontal and vertical blue zones (i.e., adjusting
    681 // vertical and horizontal coordinate values, respectively) are supported.
    682 //
    683 // For the cjk auto-hinter, the overshoot should be smaller than the
    684 // reference for top zones, and vice versa for bottom zones.
    685 //
    686 //   CJK_TOP
    687 //     Take the maximum flat and round coordinate values of the blue string
    688 //     characters.  If not set, take the minimum values.
    689 //
    690 //   CJK_RIGHT
    691 //     A synonym for CJK_TOP.  If CJK_HORIZ is set, this flag indicates the
    692 //     right blue zone, taking horizontal maximum values.
    693 //
    694 //   CJK_HORIZ
    695 //     Define a blue zone for horizontal hinting (i.e., vertical blue
    696 //     zones).  If not set, this is a blue zone for vertical hinting.
    697 
    698 
    699 AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
    700 
    701   AF_BLUE_STRINGSET_ADLM
    702     { AF_BLUE_STRING_ADLAM_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP            }
    703     { AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
    704     { AF_BLUE_STRING_ADLAM_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
    705                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
    706     { AF_BLUE_STRING_ADLAM_SMALL_BOTTOM,   AF_BLUE_PROPERTY_LATIN_SMALL_BOTTOM   }
    707     { AF_BLUE_STRING_MAX,                  0                                     }
    708 
    709   AF_BLUE_STRINGSET_ARAB
    710     { AF_BLUE_STRING_ARABIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP     }
    711     { AF_BLUE_STRING_ARABIC_BOTTOM, 0                              }
    712     { AF_BLUE_STRING_ARABIC_JOIN,   AF_BLUE_PROPERTY_LATIN_NEUTRAL }
    713     { AF_BLUE_STRING_MAX,           0                              }
    714 
    715   AF_BLUE_STRINGSET_ARMN
    716     { AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP            }
    717     { AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM,  AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
    718     { AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP            }
    719     { AF_BLUE_STRING_ARMENIAN_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
    720                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
    721     { AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM,    AF_BLUE_PROPERTY_LATIN_SMALL_BOTTOM   }
    722     { AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0                                     }
    723     { AF_BLUE_STRING_MAX,                      0                                     }
    724 
    725   AF_BLUE_STRINGSET_AVST
    726     { AF_BLUE_STRING_AVESTAN_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
    727     { AF_BLUE_STRING_AVESTAN_BOTTOM, 0                          }
    728     { AF_BLUE_STRING_MAX,            0                          }
    729 
    730   AF_BLUE_STRINGSET_BAMU
    731     { AF_BLUE_STRING_BAMUM_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
    732     { AF_BLUE_STRING_BAMUM_BOTTOM, 0                          }
    733     { AF_BLUE_STRING_MAX,          0                          }
    734 
    735   AF_BLUE_STRINGSET_BENG
    736     { AF_BLUE_STRING_BENGALI_TOP,  AF_BLUE_PROPERTY_LATIN_TOP        }
    737     { AF_BLUE_STRING_BENGALI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP        }
    738     { AF_BLUE_STRING_BENGALI_BASE, AF_BLUE_PROPERTY_LATIN_TOP      |
    739                                    AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
    740                                    AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    741     { AF_BLUE_STRING_BENGALI_BASE, 0                                 }
    742     { AF_BLUE_STRING_MAX,          0                                 }
    743 
    744   AF_BLUE_STRINGSET_BUHD
    745     { AF_BLUE_STRING_BUHID_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
    746     { AF_BLUE_STRING_BUHID_LARGE,  AF_BLUE_PROPERTY_LATIN_TOP        }
    747     { AF_BLUE_STRING_BUHID_SMALL,  AF_BLUE_PROPERTY_LATIN_TOP      |
    748                                    AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    749     { AF_BLUE_STRING_BUHID_BOTTOM, 0                                 }
    750     { AF_BLUE_STRING_MAX,          0                                 }
    751 
    752   AF_BLUE_STRINGSET_CAKM
    753     { AF_BLUE_STRING_CHAKMA_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
    754     { AF_BLUE_STRING_CHAKMA_BOTTOM,    0                          }
    755     { AF_BLUE_STRING_CHAKMA_DESCENDER, 0                          }
    756     { AF_BLUE_STRING_MAX,              0                          }
    757 
    758   AF_BLUE_STRINGSET_CANS
    759     { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP,          AF_BLUE_PROPERTY_LATIN_TOP          }
    760     { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM,       0                                   }
    761     { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
    762                                                       AF_BLUE_PROPERTY_LATIN_X_HEIGHT     }
    763     { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, AF_BLUE_PROPERTY_LATIN_SMALL_BOTTOM }
    764     { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP,     AF_BLUE_PROPERTY_LATIN_TOP          }
    765     { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM,  0                                   }
    766     { AF_BLUE_STRING_MAX,                             0                                   }
    767 
    768   AF_BLUE_STRINGSET_CARI
    769     { AF_BLUE_STRING_CARIAN_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
    770     { AF_BLUE_STRING_CARIAN_BOTTOM, 0                          }
    771     { AF_BLUE_STRING_MAX,           0                          }
    772 
    773   AF_BLUE_STRINGSET_CHER
    774     { AF_BLUE_STRING_CHEROKEE_CAPITAL,         AF_BLUE_PROPERTY_LATIN_TOP        }
    775     { AF_BLUE_STRING_CHEROKEE_CAPITAL,         0                                 }
    776     { AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
    777     { AF_BLUE_STRING_CHEROKEE_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
    778                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    779     { AF_BLUE_STRING_CHEROKEE_SMALL,           0                                 }
    780     { AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0                                 }
    781     { AF_BLUE_STRING_MAX,                      0                                 }
    782 
    783   AF_BLUE_STRINGSET_COPT
    784     { AF_BLUE_STRING_COPTIC_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP            }
    785     { AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
    786     { AF_BLUE_STRING_COPTIC_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
    787                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
    788     { AF_BLUE_STRING_COPTIC_SMALL_BOTTOM,   AF_BLUE_PROPERTY_LATIN_SMALL_BOTTOM   }
    789     { AF_BLUE_STRING_MAX,                   0                                     }
    790 
    791   AF_BLUE_STRINGSET_CPRT
    792     { AF_BLUE_STRING_CYPRIOT_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
    793     { AF_BLUE_STRING_CYPRIOT_BOTTOM, 0                          }
    794     { AF_BLUE_STRING_CYPRIOT_SMALL,  AF_BLUE_PROPERTY_LATIN_TOP }
    795     { AF_BLUE_STRING_CYPRIOT_SMALL,  0                          }
    796     { AF_BLUE_STRING_MAX,            0                          }
    797 
    798   AF_BLUE_STRINGSET_CYRL
    799     { AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP            }
    800     { AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM,  AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
    801     { AF_BLUE_STRING_CYRILLIC_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
    802                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
    803     { AF_BLUE_STRING_CYRILLIC_SMALL,           0                                     }
    804     { AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0                                     }
    805     { AF_BLUE_STRING_MAX,                      0                                     }
    806 
    807   AF_BLUE_STRINGSET_DEVA
    808     { AF_BLUE_STRING_DEVANAGARI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
    809     { AF_BLUE_STRING_DEVANAGARI_HEAD,   AF_BLUE_PROPERTY_LATIN_TOP        }
    810     { AF_BLUE_STRING_DEVANAGARI_BASE,   AF_BLUE_PROPERTY_LATIN_TOP      |
    811                                         AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
    812                                         AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    813     { AF_BLUE_STRING_DEVANAGARI_BASE,   0                                 }
    814     { AF_BLUE_STRING_DEVANAGARI_BOTTOM, 0                                 }
    815     { AF_BLUE_STRING_MAX,               0                                 }
    816 
    817   AF_BLUE_STRINGSET_DSRT
    818     { AF_BLUE_STRING_DESERET_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP            }
    819     { AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM, AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
    820     { AF_BLUE_STRING_DESERET_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
    821                                              AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
    822     { AF_BLUE_STRING_DESERET_SMALL_BOTTOM,   AF_BLUE_PROPERTY_LATIN_SMALL_BOTTOM   }
    823     { AF_BLUE_STRING_MAX,                    0                                     }
    824 
    825   AF_BLUE_STRINGSET_ETHI
    826     { AF_BLUE_STRING_ETHIOPIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
    827     { AF_BLUE_STRING_ETHIOPIC_BOTTOM, 0                          }
    828     { AF_BLUE_STRING_MAX,             0                          }
    829 
    830   AF_BLUE_STRINGSET_GEOR
    831     { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
    832                                                    AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    833     { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM,    0                                 }
    834     { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
    835     { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0                                 }
    836     { AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP,        AF_BLUE_PROPERTY_LATIN_TOP        }
    837     { AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM,     0                                 }
    838     { AF_BLUE_STRING_MAX,                          0                                 }
    839 
    840   AF_BLUE_STRINGSET_GEOK
    841     { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
    842     { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0                                 }
    843     { AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
    844                                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    845     { AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM,    0                                 }
    846     { AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
    847     { AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0                                 }
    848     { AF_BLUE_STRING_MAX,                         0                                 }
    849 
    850   AF_BLUE_STRINGSET_GLAG
    851     { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP            }
    852     { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
    853     { AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
    854                                                 AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
    855     { AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM,   AF_BLUE_PROPERTY_LATIN_SMALL_BOTTOM   }
    856     { AF_BLUE_STRING_MAX,                       0                                     }
    857 
    858   AF_BLUE_STRINGSET_GOTH
    859     { AF_BLUE_STRING_GOTHIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
    860     { AF_BLUE_STRING_GOTHIC_BOTTOM, 0                          }
    861     { AF_BLUE_STRING_MAX,           0                          }
    862 
    863   AF_BLUE_STRINGSET_GREK
    864     { AF_BLUE_STRING_GREEK_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP            }
    865     { AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM,  AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
    866     { AF_BLUE_STRING_GREEK_SMALL_BETA_TOP,  AF_BLUE_PROPERTY_LATIN_TOP            }
    867     { AF_BLUE_STRING_GREEK_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
    868                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
    869     { AF_BLUE_STRING_GREEK_SMALL,           0                                     }
    870     { AF_BLUE_STRING_GREEK_SMALL_DESCENDER, 0                                     }
    871     { AF_BLUE_STRING_MAX,                   0                                     }
    872 
    873   AF_BLUE_STRINGSET_GUJR
    874     { AF_BLUE_STRING_GUJARATI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
    875                                          AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    876     { AF_BLUE_STRING_GUJARATI_BOTTOM,    0                                 }
    877     { AF_BLUE_STRING_GUJARATI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
    878     { AF_BLUE_STRING_GUJARATI_DESCENDER, 0                                 }
    879     { AF_BLUE_STRING_GUJARATI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP        }
    880     { AF_BLUE_STRING_MAX,                0                                 }
    881 
    882   AF_BLUE_STRINGSET_GURU
    883     { AF_BLUE_STRING_GURMUKHI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP        }
    884     { AF_BLUE_STRING_GURMUKHI_HEAD,      AF_BLUE_PROPERTY_LATIN_TOP        }
    885     { AF_BLUE_STRING_GURMUKHI_BASE,      AF_BLUE_PROPERTY_LATIN_TOP      |
    886                                          AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
    887                                          AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    888     { AF_BLUE_STRING_GURMUKHI_BOTTOM,    0                                 }
    889     { AF_BLUE_STRING_GURMUKHI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP        }
    890     { AF_BLUE_STRING_MAX,                0                                 }
    891 
    892   AF_BLUE_STRINGSET_HEBR
    893     { AF_BLUE_STRING_HEBREW_TOP,       AF_BLUE_PROPERTY_LATIN_TOP  |
    894                                        AF_BLUE_PROPERTY_LATIN_LONG   }
    895     { AF_BLUE_STRING_HEBREW_BOTTOM,    0                             }
    896     { AF_BLUE_STRING_HEBREW_DESCENDER, 0                             }
    897     { AF_BLUE_STRING_MAX,              0                             }
    898 
    899   AF_BLUE_STRINGSET_KNDA
    900     { AF_BLUE_STRING_KANNADA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
    901     { AF_BLUE_STRING_KANNADA_BOTTOM, 0                          }
    902     { AF_BLUE_STRING_MAX,            0                          }
    903 
    904   AF_BLUE_STRINGSET_KALI
    905     { AF_BLUE_STRING_KAYAH_LI_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
    906                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    907     { AF_BLUE_STRING_KAYAH_LI_BOTTOM,          0                                 }
    908     { AF_BLUE_STRING_KAYAH_LI_ASCENDER,        AF_BLUE_PROPERTY_LATIN_TOP        }
    909     { AF_BLUE_STRING_KAYAH_LI_DESCENDER,       0                                 }
    910     { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0                                 }
    911     { AF_BLUE_STRING_MAX,                      0                                 }
    912 
    913   AF_BLUE_STRINGSET_KHMR
    914     { AF_BLUE_STRING_KHMER_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
    915                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    916     { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP,   AF_BLUE_PROPERTY_LATIN_SUB_TOP    }
    917     { AF_BLUE_STRING_KHMER_BOTTOM,          0                                 }
    918     { AF_BLUE_STRING_KHMER_DESCENDER,       0                                 }
    919     { AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0                                 }
    920     { AF_BLUE_STRING_MAX,                   0                                 }
    921 
    922   AF_BLUE_STRINGSET_KHMS
    923     { AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
    924                                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    925     { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0                                 }
    926     { AF_BLUE_STRING_MAX,                         0                                 }
    927 
    928   AF_BLUE_STRINGSET_LAO
    929     { AF_BLUE_STRING_LAO_TOP,            AF_BLUE_PROPERTY_LATIN_TOP      |
    930                                          AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    931     { AF_BLUE_STRING_LAO_BOTTOM,         0                                 }
    932     { AF_BLUE_STRING_LAO_ASCENDER,       AF_BLUE_PROPERTY_LATIN_TOP        }
    933     { AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP        }
    934     { AF_BLUE_STRING_LAO_DESCENDER,      0                                 }
    935     { AF_BLUE_STRING_MAX,                0                                 }
    936 
    937   AF_BLUE_STRINGSET_LATN
    938     { AF_BLUE_STRING_LATIN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP            }
    939     { AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM,  AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
    940     { AF_BLUE_STRING_LATIN_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP            }
    941     { AF_BLUE_STRING_LATIN_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
    942                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
    943     { AF_BLUE_STRING_LATIN_SMALL_BOTTOM,    AF_BLUE_PROPERTY_LATIN_SMALL_BOTTOM   }
    944     { AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 0                                     }
    945     { AF_BLUE_STRING_MAX,                   0                                     }
    946 
    947   AF_BLUE_STRINGSET_LATB
    948     { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP            }
    949     { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM,  AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
    950     { AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP            }
    951     { AF_BLUE_STRING_LATIN_SUBS_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
    952                                                  AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
    953     { AF_BLUE_STRING_LATIN_SUBS_SMALL,           0                                     }
    954     { AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0                                     }
    955     { AF_BLUE_STRING_MAX,                        0                                     }
    956 
    957   AF_BLUE_STRINGSET_LATP
    958     { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP            }
    959     { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM,  AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
    960     { AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP            }
    961     { AF_BLUE_STRING_LATIN_SUPS_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
    962                                                  AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
    963     { AF_BLUE_STRING_LATIN_SUPS_SMALL,           0                                     }
    964     { AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0                                     }
    965     { AF_BLUE_STRING_MAX,                        0                                     }
    966 
    967   AF_BLUE_STRINGSET_LISU
    968     { AF_BLUE_STRING_LISU_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
    969     { AF_BLUE_STRING_LISU_BOTTOM, 0                          }
    970     { AF_BLUE_STRING_MAX,         0                          }
    971 
    972   AF_BLUE_STRINGSET_MLYM
    973     { AF_BLUE_STRING_MALAYALAM_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
    974     { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0                          }
    975     { AF_BLUE_STRING_MAX,              0                          }
    976 
    977   AF_BLUE_STRINGSET_MEDF
    978     { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP            }
    979     { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM,  AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
    980     { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP            }
    981     { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
    982                                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
    983     { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM,    AF_BLUE_PROPERTY_LATIN_SMALL_BOTTOM   }
    984     { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER, 0                                     }
    985     { AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP,       AF_BLUE_PROPERTY_LATIN_TOP            }
    986     { AF_BLUE_STRING_MAX,                         0                                     }
    987 
    988   AF_BLUE_STRINGSET_MONG
    989     { AF_BLUE_STRING_MONGOLIAN_TOP_BASE,    AF_BLUE_PROPERTY_LATIN_TOP }
    990     { AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE, 0                          }
    991     { AF_BLUE_STRING_MAX,                   0                          }
    992 
    993   AF_BLUE_STRINGSET_MYMR
    994     { AF_BLUE_STRING_MYANMAR_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
    995                                         AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
    996     { AF_BLUE_STRING_MYANMAR_BOTTOM,    0                                 }
    997     { AF_BLUE_STRING_MYANMAR_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
    998     { AF_BLUE_STRING_MYANMAR_DESCENDER, 0                                 }
    999     { AF_BLUE_STRING_MAX,               0                                 }
   1000 
   1001   AF_BLUE_STRINGSET_NKOO
   1002     { AF_BLUE_STRING_NKO_TOP,          AF_BLUE_PROPERTY_LATIN_TOP          }
   1003     { AF_BLUE_STRING_NKO_BOTTOM,       0                                   }
   1004     { AF_BLUE_STRING_NKO_SMALL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
   1005                                        AF_BLUE_PROPERTY_LATIN_X_HEIGHT     }
   1006     { AF_BLUE_STRING_NKO_SMALL_BOTTOM, AF_BLUE_PROPERTY_LATIN_SMALL_BOTTOM }
   1007     { AF_BLUE_STRING_MAX,              0                                   }
   1008 
   1009   AF_BLUE_STRINGSET_NONE
   1010     { AF_BLUE_STRING_MAX, 0 }
   1011 
   1012   AF_BLUE_STRINGSET_OLCK
   1013     { AF_BLUE_STRING_OL_CHIKI, AF_BLUE_PROPERTY_LATIN_TOP }
   1014     { AF_BLUE_STRING_OL_CHIKI, 0                          }
   1015     { AF_BLUE_STRING_MAX,      0                          }
   1016 
   1017   AF_BLUE_STRINGSET_ORKH
   1018     { AF_BLUE_STRING_OLD_TURKIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
   1019     { AF_BLUE_STRING_OLD_TURKIC_BOTTOM, 0                          }
   1020     { AF_BLUE_STRING_MAX,               0                          }
   1021 
   1022   AF_BLUE_STRINGSET_OSGE
   1023     { AF_BLUE_STRING_OSAGE_CAPITAL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP            }
   1024     { AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM,    AF_BLUE_PROPERTY_LATIN_CAPITAL_BOTTOM }
   1025     { AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0                                     }
   1026     { AF_BLUE_STRING_OSAGE_SMALL_TOP,         AF_BLUE_PROPERTY_LATIN_TOP      |
   1027                                               AF_BLUE_PROPERTY_LATIN_X_HEIGHT       }
   1028     { AF_BLUE_STRING_OSAGE_SMALL_BOTTOM,      AF_BLUE_PROPERTY_LATIN_SMALL_BOTTOM   }
   1029     { AF_BLUE_STRING_OSAGE_SMALL_ASCENDER,    AF_BLUE_PROPERTY_LATIN_TOP            }
   1030     { AF_BLUE_STRING_OSAGE_SMALL_DESCENDER,   0                                     }
   1031     { AF_BLUE_STRING_MAX,                     0                                     }
   1032 
   1033   AF_BLUE_STRINGSET_OSMA
   1034     { AF_BLUE_STRING_OSMANYA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
   1035     { AF_BLUE_STRING_OSMANYA_BOTTOM, 0                          }
   1036     { AF_BLUE_STRING_MAX,            0                          }
   1037 
   1038   AF_BLUE_STRINGSET_ROHG
   1039     { AF_BLUE_STRING_ROHINGYA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP     }
   1040     { AF_BLUE_STRING_ROHINGYA_BOTTOM, 0                              }
   1041     { AF_BLUE_STRING_ROHINGYA_JOIN,   AF_BLUE_PROPERTY_LATIN_NEUTRAL }
   1042     { AF_BLUE_STRING_MAX,             0                              }
   1043 
   1044   AF_BLUE_STRINGSET_SAUR
   1045     { AF_BLUE_STRING_SAURASHTRA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
   1046     { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0                          }
   1047     { AF_BLUE_STRING_MAX,               0                          }
   1048 
   1049   AF_BLUE_STRINGSET_SHAW
   1050     { AF_BLUE_STRING_SHAVIAN_TOP,          AF_BLUE_PROPERTY_LATIN_TOP          }
   1051     { AF_BLUE_STRING_SHAVIAN_BOTTOM,       0                                   }
   1052     { AF_BLUE_STRING_SHAVIAN_DESCENDER,    0                                   }
   1053     { AF_BLUE_STRING_SHAVIAN_SMALL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
   1054                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT     }
   1055     { AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, AF_BLUE_PROPERTY_LATIN_SMALL_BOTTOM }
   1056     { AF_BLUE_STRING_MAX,                  0                                   }
   1057 
   1058   AF_BLUE_STRINGSET_SINH
   1059     { AF_BLUE_STRING_SINHALA_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
   1060     { AF_BLUE_STRING_SINHALA_BOTTOM,    0                          }
   1061     { AF_BLUE_STRING_SINHALA_DESCENDER, 0                          }
   1062     { AF_BLUE_STRING_MAX,               0                          }
   1063 
   1064   AF_BLUE_STRINGSET_SUND
   1065     { AF_BLUE_STRING_SUNDANESE_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
   1066     { AF_BLUE_STRING_SUNDANESE_BOTTOM,    0                          }
   1067     { AF_BLUE_STRING_SUNDANESE_DESCENDER, 0                          }
   1068     { AF_BLUE_STRING_MAX,                 0                          }
   1069 
   1070   AF_BLUE_STRINGSET_TAML
   1071     { AF_BLUE_STRING_TAMIL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
   1072     { AF_BLUE_STRING_TAMIL_BOTTOM, 0                          }
   1073     { AF_BLUE_STRING_MAX,          0                          }
   1074 
   1075   AF_BLUE_STRINGSET_TAVT
   1076     { AF_BLUE_STRING_TAI_VIET_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
   1077     { AF_BLUE_STRING_TAI_VIET_BOTTOM, 0                          }
   1078     { AF_BLUE_STRING_MAX,             0                          }
   1079 
   1080   AF_BLUE_STRINGSET_TELU
   1081     { AF_BLUE_STRING_TELUGU_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
   1082     { AF_BLUE_STRING_TELUGU_BOTTOM, 0                          }
   1083     { AF_BLUE_STRING_MAX,           0                          }
   1084 
   1085   AF_BLUE_STRINGSET_THAI
   1086     { AF_BLUE_STRING_THAI_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
   1087                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
   1088     { AF_BLUE_STRING_THAI_BOTTOM,          0                                 }
   1089     { AF_BLUE_STRING_THAI_ASCENDER,        AF_BLUE_PROPERTY_LATIN_TOP        }
   1090     { AF_BLUE_STRING_THAI_LARGE_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
   1091     { AF_BLUE_STRING_THAI_DESCENDER,       0                                 }
   1092     { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0                                 }
   1093     { AF_BLUE_STRING_THAI_DIGIT_TOP,       0                                 }
   1094     { AF_BLUE_STRING_MAX,                  0                                 }
   1095 
   1096   AF_BLUE_STRINGSET_TFNG
   1097     { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }
   1098     { AF_BLUE_STRING_TIFINAGH, 0                          }
   1099     { AF_BLUE_STRING_MAX,      0                          }
   1100 
   1101   AF_BLUE_STRINGSET_VAII
   1102     { AF_BLUE_STRING_VAI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
   1103     { AF_BLUE_STRING_VAI_BOTTOM, 0                          }
   1104     { AF_BLUE_STRING_MAX,        0                          }
   1105 
   1106 #ifdef AF_CONFIG_OPTION_CJK
   1107 
   1108   AF_BLUE_STRINGSET_HANI
   1109     { AF_BLUE_STRING_CJK_TOP,    AF_BLUE_PROPERTY_CJK_TOP     }
   1110     { AF_BLUE_STRING_CJK_BOTTOM, 0                            }
   1111 #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
   1112     { AF_BLUE_STRING_CJK_LEFT,   AF_BLUE_PROPERTY_CJK_HORIZ   }
   1113     { AF_BLUE_STRING_CJK_RIGHT,  AF_BLUE_PROPERTY_CJK_HORIZ |
   1114                                  AF_BLUE_PROPERTY_CJK_RIGHT   }
   1115 #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
   1116     { AF_BLUE_STRING_MAX,        0                            }
   1117 
   1118 #endif /* AF_CONFIG_OPTION_CJK                */
   1119 
   1120 
   1121 // END