1 // afblue.dat
   2 //
   3 //   Auto-fitter data for blue strings.
   4 //
   5 // Copyright (C) 2013-2019 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 (this 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_MONGOLIAN_TOP_BASE
 396     "ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ ‍ᡡ‍ ‍ᡳ‍"
 397   AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE
 398     "ᡃ"
 399 
 400   AF_BLUE_STRING_MYANMAR_TOP
 401     "ခ ဂ င ဒ ဝ ၥ ၊ ။"
 402   AF_BLUE_STRING_MYANMAR_BOTTOM
 403     "င ဎ ဒ ပ ဗ ဝ ၊ ။"
 404   AF_BLUE_STRING_MYANMAR_ASCENDER
 405     "ဩ ြ ၍ ၏ ၆ ါ ိ"
 406   AF_BLUE_STRING_MYANMAR_DESCENDER
 407     "ဉ ည ဥ ဩ ဨ ၂ ၅ ၉"
 408 
 409   AF_BLUE_STRING_NKO_TOP
 410     "ߐ ߉ ߒ ߟ ߖ ߜ ߠ ߥ"
 411   AF_BLUE_STRING_NKO_BOTTOM
 412     "߀ ߘ ߡ ߠ ߥ"
 413   AF_BLUE_STRING_NKO_SMALL_TOP
 414     "ߏ ߛ ߋ"
 415   AF_BLUE_STRING_NKO_SMALL_BOTTOM
 416     "ߎ ߏ ߛ ߋ"
 417 
 418   AF_BLUE_STRING_OL_CHIKI
 419     "ᱛ ᱜ ᱝ ᱡ ᱢ ᱥ"
 420 
 421   AF_BLUE_STRING_OLD_TURKIC_TOP
 422     "𐰗 𐰘 𐰧"
 423   AF_BLUE_STRING_OLD_TURKIC_BOTTOM
 424     "𐰉 𐰗 𐰦 𐰧"
 425 
 426   AF_BLUE_STRING_OSAGE_CAPITAL_TOP
 427     "𐒾 𐓍 𐓒 𐓓 𐒻 𐓂 𐒵 𐓆"
 428   AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM
 429     "𐒰 𐓍 𐓂 𐒿 𐓎 𐒹"
 430   AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER
 431     "𐒼 𐒽 𐒾"
 432   AF_BLUE_STRING_OSAGE_SMALL_TOP
 433     "𐓵 𐓶 𐓺 𐓻 𐓝 𐓣 𐓪 𐓮"
 434   AF_BLUE_STRING_OSAGE_SMALL_BOTTOM
 435     "𐓘 𐓚 𐓣 𐓵 𐓡 𐓧 𐓪 𐓶"
 436   AF_BLUE_STRING_OSAGE_SMALL_ASCENDER
 437     "𐓤 𐓦 𐓸 𐓹 𐓛"
 438   AF_BLUE_STRING_OSAGE_SMALL_DESCENDER
 439     "𐓤 𐓥 𐓦"
 440 
 441   AF_BLUE_STRING_OSMANYA_TOP
 442     "𐒆 𐒉 𐒐 𐒒 𐒘 𐒛 𐒠 𐒣"
 443   AF_BLUE_STRING_OSMANYA_BOTTOM
 444     "𐒀 𐒂 𐒆 𐒈 𐒊 𐒒 𐒠 𐒩"
 445 
 446   AF_BLUE_STRING_SAURASHTRA_TOP
 447     "ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ"
 448   AF_BLUE_STRING_SAURASHTRA_BOTTOM
 449     "ꢂ ꢨ ꢺ ꢤ ꢎ"
 450 
 451   AF_BLUE_STRING_SHAVIAN_TOP
 452     "𐑕 𐑙"
 453   AF_BLUE_STRING_SHAVIAN_BOTTOM
 454     "𐑔 𐑖 𐑗 𐑹 𐑻"
 455   AF_BLUE_STRING_SHAVIAN_DESCENDER
 456     "𐑟 𐑣"
 457   AF_BLUE_STRING_SHAVIAN_SMALL_TOP
 458     "𐑱 𐑲 𐑳 𐑴 𐑸 𐑺 𐑼"
 459   AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM
 460     "𐑴 𐑻 𐑹"
 461 
 462   AF_BLUE_STRING_SINHALA_TOP
 463     "ඉ ක ඝ ඳ ප ය ල ෆ"
 464   AF_BLUE_STRING_SINHALA_BOTTOM
 465     "එ ඔ ඝ ජ ට ථ ධ ර"
 466   AF_BLUE_STRING_SINHALA_DESCENDER
 467     "ද ඳ උ ල තූ තු බු දු"
 468 
 469   AF_BLUE_STRING_SUNDANESE_TOP
 470     "ᮋ ᮞ ᮮ ᮽ ᮰ ᮈ"
 471   AF_BLUE_STRING_SUNDANESE_BOTTOM
 472     "ᮄ ᮔ ᮕ ᮗ ᮰ ᮆ ᮈ ᮉ"
 473   AF_BLUE_STRING_SUNDANESE_DESCENDER
 474     "ᮼ ᳄"
 475 
 476   AF_BLUE_STRING_TAI_VIET_TOP
 477     "ꪆ ꪔ ꪒ ꪖ ꪫ"
 478   AF_BLUE_STRING_TAI_VIET_BOTTOM
 479     "ꪉ ꪫ ꪮ"
 480 
 481   AF_BLUE_STRING_TAMIL_TOP
 482     "உ ஒ ஓ ற ஈ க ங ச"
 483   AF_BLUE_STRING_TAMIL_BOTTOM
 484     "க ச ல ஶ உ ங ட ப"
 485 
 486   AF_BLUE_STRING_TELUGU_TOP
 487     "ఇ ఌ ఙ ఞ ణ ఱ ౯"
 488   AF_BLUE_STRING_TELUGU_BOTTOM
 489     "అ క చ ర ఽ ౨ ౬"
 490 
 491   AF_BLUE_STRING_THAI_TOP
 492     "บ เ แ อ ก า"
 493   AF_BLUE_STRING_THAI_BOTTOM
 494     "บ ป ษ ฯ อ ย ฮ"
 495   AF_BLUE_STRING_THAI_ASCENDER
 496     "ป ฝ ฟ"
 497   AF_BLUE_STRING_THAI_LARGE_ASCENDER
 498     "โ ใ ไ"
 499   AF_BLUE_STRING_THAI_DESCENDER
 500     "ฎ ฏ ฤ ฦ"
 501   AF_BLUE_STRING_THAI_LARGE_DESCENDER
 502     "ญ ฐ"
 503   AF_BLUE_STRING_THAI_DIGIT_TOP
 504     "๐ ๑ ๓"
 505 
 506   AF_BLUE_STRING_TIFINAGH
 507     "ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ"
 508 
 509   AF_BLUE_STRING_VAI_TOP
 510     "ꗍ ꘖ ꘙ ꘜ ꖜ ꖝ ꔅ ꕢ"
 511   AF_BLUE_STRING_VAI_BOTTOM
 512     "ꗍ ꘖ ꘙ ꗞ ꔅ ꕢ ꖜ ꔆ"
 513 
 514 
 515 #ifdef AF_CONFIG_OPTION_CJK
 516 
 517   AF_BLUE_STRING_CJK_TOP
 518     "他 们 你 來 們 到 和 地"
 519     " 对 對 就 席 我 时 時 會"
 520     " 来 為 能 舰 說 说 这 這"
 521     " 齊 |"
 522     " 军 同 已 愿 既 星 是 景"
 523     " 民 照 现 現 理 用 置 要"
 524     " 軍 那 配 里 開 雷 露 面"
 525     " 顾"
 526   AF_BLUE_STRING_CJK_BOTTOM
 527     "个 为 人 他 以 们 你 來"
 528     " 個 們 到 和 大 对 對 就"
 529     " 我 时 時 有 来 為 要 說"
 530     " 说 |"
 531     " 主 些 因 它 想 意 理 生"
 532     " 當 看 着 置 者 自 著 裡"
 533     " 过 还 进 進 過 道 還 里"
 534     " 面"
 535 
 536 #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
 537 
 538   AF_BLUE_STRING_CJK_LEFT
 539     " 些 们 你 來 們 到 和 地"
 540     " 她 将 將 就 年 得 情 最"
 541     " 样 樣 理 能 說 说 这 這"
 542     " 通 |"
 543     " 即 吗 吧 听 呢 品 响 嗎"
 544     " 师 師 收 断 斷 明 眼 間"
 545     " 间 际 陈 限 除 陳 随 際"
 546     " 隨"
 547   AF_BLUE_STRING_CJK_RIGHT
 548     "事 前 學 将 將 情 想 或"
 549     " 政 斯 新 样 樣 民 沒 没"
 550     " 然 特 现 現 球 第 經 谁"
 551     " 起 |"
 552     " 例 別 别 制 动 動 吗 嗎"
 553     " 增 指 明 朝 期 构 物 确"
 554     " 种 調 调 費 费 那 都 間"
 555     " 间"
 556 
 557 #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
 558 
 559 #endif /* AF_CONFIG_OPTION_CJK                */
 560 
 561 
 562 // The blue zone stringsets, as used in the script styles, cf. `afstyles.h'.
 563 //
 564 // The AF_BLUE_PROPERTY_XXX flags are defined in `afblue.h'; here some
 565 // explanations.
 566 //
 567 // A blue zone in general is defined by a reference and an overshoot line.
 568 // During the hinting process, all coordinate values between those two lines
 569 // are set equal to the reference value, provided that the blue zone is not
 570 // wider than 0.75 pixels (otherwise the blue zone gets ignored).  All
 571 // entries must have `AF_BLUE_STRING_MAX' as the final line.
 572 //
 573 // During the glyph analysis, edges are sorted from bottom to top, and then
 574 // sequentially checked, edge by edge, against the blue zones in the order
 575 // given below.
 576 //
 577 //
 578 // latin auto-hinter
 579 // -----------------
 580 //
 581 // Characters in a blue string are automatically classified as having a flat
 582 // (reference) or a round (overshoot) extremum.  The blue zone is then set
 583 // up by the mean values of all flat extrema and all round extrema,
 584 // respectively.  Only horizontal blue zones (i.e., adjusting vertical
 585 // coordinate values) are supported.
 586 //
 587 // Some scripts like Khmer need character composition to get all necessary
 588 // blue zones, since Unicode only provides an abstract data model that
 589 // doesn't represent all possible glyph shapes.  For such character
 590 // clusters, the HarfBuzz library is used to convert them into the
 591 // corresponding glyphs.  The largest glyph element (where `largest' can be
 592 // either `largest ascender' or `largest descender') then defines the
 593 // corresponding flat or round extremum.
 594 //
 595 // For the latin auto-hinter, the overshoot should be larger than the
 596 // reference for top zones, and vice versa for bottom zones.
 597 //
 598 //   LATIN_TOP
 599 //     Take the maximum flat and round coordinate values of the blue string
 600 //     characters for computing the blue zone's reference and overshoot
 601 //     values.
 602 //
 603 //     If not set, take the minimum values.
 604 //
 605 //     Mutually exclusive with `LATIN_SUB_TOP'.
 606 //
 607 //   LATIN_SUB_TOP
 608 //     For all glyphs of a character cluster, compute the maximum flat
 609 //     and round coordinate values of each component, then take the
 610 //     smallest of the maximum values.  The idea is to get the top of
 611 //     subscript glyphs, as used in Khmer, for example.  Note that
 612 //     this mechanism doesn't work for ordinary ligatures.
 613 //
 614 //     This flags indicates a secondary blue zone: It gets removed if
 615 //     there is a non-LATIN_SUB_TOP blue zone at the same coordinate
 616 //     value (after scaling).
 617 //
 618 //     Mutually exclusive with `LATIN_TOP'.
 619 //
 620 //   LATIN_NEUTRAL
 621 //     Ignore round extrema and define the blue zone with flat values only.
 622 //     Both top and bottom of contours can match.  This is useful for
 623 //     scripts like Devanagari where vowel signs attach to the base
 624 //     character and are implemented as components of composite glyphs.
 625 //
 626 //     If not set, both round and flat extrema are taken into account.
 627 //     Additionally, only the top or the bottom of a contour can match,
 628 //     depending on the LATIN_TOP flag.
 629 //
 630 //     Neutral blue zones should always follow non-neutral blue zones.
 631 //
 632 //   LATIN_X_HEIGHT
 633 //     Scale all glyphs vertically from the corresponding script to make the
 634 //     reference line of this blue zone align on the grid.  The scaling
 635 //     takes place before all other blue zones get aligned to the grid.
 636 //     Only one blue character string of a script style can have this flag.
 637 //
 638 //   LATIN_LONG
 639 //     Apply an additional constraint for blue zone values: Don't
 640 //     necessarily use the extremum as-is but a segment of the topmost (or
 641 //     bottommost) contour that is longer than a heuristic threshold, and
 642 //     which is not too far away vertically from the real extremum.  This
 643 //     ensures that small bumps in the outline are ignored (for example, the
 644 //     `vertical serifs' found in many Hebrew glyph designs).
 645 //
 646 //     The segment must be at least EM/25 font units long, and the distance
 647 //     to the extremum must be smaller than EM/4.
 648 //
 649 //
 650 // cjk auto-hinter
 651 // ---------------
 652 //
 653 // Characters in a blue string are *not* automatically classified.  Instead,
 654 // first come the characters used for the overshoot value, then the
 655 // character `|', then the characters used for the reference value
 656 // (everything separated by space characters).  The blue zone is then set up
 657 // by the mean values of all reference values and all overshoot values,
 658 // respectively.  Both horizontal and vertical blue zones (i.e., adjusting
 659 // vertical and horizontal coordinate values, respectively) are supported.
 660 //
 661 // For the cjk auto-hinter, the overshoot should be smaller than the
 662 // reference for top zones, and vice versa for bottom zones.
 663 //
 664 //   CJK_TOP
 665 //     Take the maximum flat and round coordinate values of the blue string
 666 //     characters.  If not set, take the minimum values.
 667 //
 668 //   CJK_RIGHT
 669 //     A synonym for CJK_TOP.  If CJK_HORIZ is set, this flag indicates the
 670 //     right blue zone, taking horizontal maximum values.
 671 //
 672 //   CJK_HORIZ
 673 //     Define a blue zone for horizontal hinting (i.e., vertical blue
 674 //     zones).  If not set, this is a blue zone for vertical hinting.
 675 
 676 
 677 AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
 678 
 679   AF_BLUE_STRINGSET_ADLM
 680     { AF_BLUE_STRING_ADLAM_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
 681     { AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0                                 }
 682     { AF_BLUE_STRING_ADLAM_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
 683                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 684     { AF_BLUE_STRING_ADLAM_SMALL_BOTTOM,   0                                 }
 685     { AF_BLUE_STRING_MAX,                  0                                 }
 686 
 687   AF_BLUE_STRINGSET_ARAB
 688     { AF_BLUE_STRING_ARABIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP     }
 689     { AF_BLUE_STRING_ARABIC_BOTTOM, 0                              }
 690     { AF_BLUE_STRING_ARABIC_JOIN,   AF_BLUE_PROPERTY_LATIN_NEUTRAL }
 691     { AF_BLUE_STRING_MAX,           0                              }
 692 
 693   AF_BLUE_STRINGSET_ARMN
 694     { AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
 695     { AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM,  0                                 }
 696     { AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
 697     { AF_BLUE_STRING_ARMENIAN_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
 698                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 699     { AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM,    0                                 }
 700     { AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0                                 }
 701     { AF_BLUE_STRING_MAX,                      0                                 }
 702 
 703   AF_BLUE_STRINGSET_AVST
 704     { AF_BLUE_STRING_AVESTAN_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
 705     { AF_BLUE_STRING_AVESTAN_BOTTOM, 0                          }
 706     { AF_BLUE_STRING_MAX,            0                          }
 707 
 708   AF_BLUE_STRINGSET_BAMU
 709     { AF_BLUE_STRING_BAMUM_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
 710     { AF_BLUE_STRING_BAMUM_BOTTOM, 0                          }
 711     { AF_BLUE_STRING_MAX,          0                          }
 712 
 713   AF_BLUE_STRINGSET_BENG
 714     { AF_BLUE_STRING_BENGALI_TOP,  AF_BLUE_PROPERTY_LATIN_TOP        }
 715     { AF_BLUE_STRING_BENGALI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP        }
 716     { AF_BLUE_STRING_BENGALI_BASE, AF_BLUE_PROPERTY_LATIN_TOP      |
 717                                    AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
 718                                    AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 719     { AF_BLUE_STRING_BENGALI_BASE, 0                                 }
 720     { AF_BLUE_STRING_MAX,          0                                 }
 721 
 722   AF_BLUE_STRINGSET_BUHD
 723     { AF_BLUE_STRING_BUHID_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
 724     { AF_BLUE_STRING_BUHID_LARGE,  AF_BLUE_PROPERTY_LATIN_TOP        }
 725     { AF_BLUE_STRING_BUHID_SMALL,  AF_BLUE_PROPERTY_LATIN_TOP      |
 726                                    AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 727     { AF_BLUE_STRING_BUHID_BOTTOM, 0                                 }
 728     { AF_BLUE_STRING_MAX,          0                                 }
 729 
 730   AF_BLUE_STRINGSET_CAKM
 731     { AF_BLUE_STRING_CHAKMA_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
 732     { AF_BLUE_STRING_CHAKMA_BOTTOM,    0                          }
 733     { AF_BLUE_STRING_CHAKMA_DESCENDER, 0                          }
 734     { AF_BLUE_STRING_MAX,              0                          }
 735 
 736   AF_BLUE_STRINGSET_CANS
 737     { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP,             AF_BLUE_PROPERTY_LATIN_TOP        }
 738     { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM,          0                                 }
 739     { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
 740                                                          AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 741     { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM,    0                                 }
 742     { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP,        AF_BLUE_PROPERTY_LATIN_TOP        }
 743     { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM,     0                                 }
 744     { AF_BLUE_STRING_MAX,                                0                                 }
 745 
 746   AF_BLUE_STRINGSET_CARI
 747     { AF_BLUE_STRING_CARIAN_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
 748     { AF_BLUE_STRING_CARIAN_BOTTOM, 0                          }
 749     { AF_BLUE_STRING_MAX,           0                          }
 750 
 751   AF_BLUE_STRINGSET_CHER
 752     { AF_BLUE_STRING_CHEROKEE_CAPITAL,         AF_BLUE_PROPERTY_LATIN_TOP        }
 753     { AF_BLUE_STRING_CHEROKEE_CAPITAL,         0                                 }
 754     { AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
 755     { AF_BLUE_STRING_CHEROKEE_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
 756                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 757     { AF_BLUE_STRING_CHEROKEE_SMALL,           0                                 }
 758     { AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0                                 }
 759     { AF_BLUE_STRING_MAX,                      0                                 }
 760 
 761   AF_BLUE_STRINGSET_COPT
 762     { AF_BLUE_STRING_COPTIC_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
 763     { AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0                                 }
 764     { AF_BLUE_STRING_COPTIC_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
 765                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 766     { AF_BLUE_STRING_COPTIC_SMALL_BOTTOM,   0                                 }
 767     { AF_BLUE_STRING_MAX,                   0                                 }
 768 
 769   AF_BLUE_STRINGSET_CPRT
 770     { AF_BLUE_STRING_CYPRIOT_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
 771     { AF_BLUE_STRING_CYPRIOT_BOTTOM, 0                          }
 772     { AF_BLUE_STRING_CYPRIOT_SMALL,  AF_BLUE_PROPERTY_LATIN_TOP }
 773     { AF_BLUE_STRING_CYPRIOT_SMALL,  0                          }
 774     { AF_BLUE_STRING_MAX,            0                          }
 775 
 776   AF_BLUE_STRINGSET_CYRL
 777     { AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
 778     { AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM,  0                                 }
 779     { AF_BLUE_STRING_CYRILLIC_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
 780                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 781     { AF_BLUE_STRING_CYRILLIC_SMALL,           0                                 }
 782     { AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0                                 }
 783     { AF_BLUE_STRING_MAX,                      0                                 }
 784 
 785   AF_BLUE_STRINGSET_DEVA
 786     { AF_BLUE_STRING_DEVANAGARI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
 787     { AF_BLUE_STRING_DEVANAGARI_HEAD,   AF_BLUE_PROPERTY_LATIN_TOP        }
 788     { AF_BLUE_STRING_DEVANAGARI_BASE,   AF_BLUE_PROPERTY_LATIN_TOP      |
 789                                         AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
 790                                         AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 791     { AF_BLUE_STRING_DEVANAGARI_BASE,   0                                 }
 792     { AF_BLUE_STRING_DEVANAGARI_BOTTOM, 0                                 }
 793     { AF_BLUE_STRING_MAX,               0                                 }
 794 
 795   AF_BLUE_STRINGSET_DSRT
 796     { AF_BLUE_STRING_DESERET_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
 797     { AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0                                 }
 798     { AF_BLUE_STRING_DESERET_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
 799                                              AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 800     { AF_BLUE_STRING_DESERET_SMALL_BOTTOM,   0                                 }
 801     { AF_BLUE_STRING_MAX,                    0                                 }
 802 
 803   AF_BLUE_STRINGSET_ETHI
 804     { AF_BLUE_STRING_ETHIOPIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
 805     { AF_BLUE_STRING_ETHIOPIC_BOTTOM, 0                          }
 806     { AF_BLUE_STRING_MAX,             0                          }
 807 
 808   AF_BLUE_STRINGSET_GEOR
 809     { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
 810                                                    AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 811     { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM,    0                                 }
 812     { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
 813     { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0                                 }
 814     { AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP,        AF_BLUE_PROPERTY_LATIN_TOP        }
 815     { AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM,     0                                 }
 816     { AF_BLUE_STRING_MAX,                          0                                 }
 817 
 818   AF_BLUE_STRINGSET_GEOK
 819     { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
 820     { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0                                 }
 821     { AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
 822                                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 823     { AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM,    0                                 }
 824     { AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
 825     { AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0                                 }
 826     { AF_BLUE_STRING_MAX,                         0                                 }
 827 
 828   AF_BLUE_STRINGSET_GLAG
 829     { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
 830     { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0                                 }
 831     { AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
 832                                                 AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 833     { AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM,   0                                 }
 834     { AF_BLUE_STRING_MAX,                       0                                 }
 835 
 836   AF_BLUE_STRINGSET_GOTH
 837     { AF_BLUE_STRING_GOTHIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
 838     { AF_BLUE_STRING_GOTHIC_BOTTOM, 0                          }
 839     { AF_BLUE_STRING_MAX,           0                          }
 840 
 841   AF_BLUE_STRINGSET_GREK
 842     { AF_BLUE_STRING_GREEK_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
 843     { AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM,  0                                 }
 844     { AF_BLUE_STRING_GREEK_SMALL_BETA_TOP,  AF_BLUE_PROPERTY_LATIN_TOP        }
 845     { AF_BLUE_STRING_GREEK_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
 846                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 847     { AF_BLUE_STRING_GREEK_SMALL,           0                                 }
 848     { AF_BLUE_STRING_GREEK_SMALL_DESCENDER, 0                                 }
 849     { AF_BLUE_STRING_MAX,                   0                                 }
 850 
 851   AF_BLUE_STRINGSET_GUJR
 852     { AF_BLUE_STRING_GUJARATI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
 853                                          AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 854     { AF_BLUE_STRING_GUJARATI_BOTTOM,    0                                 }
 855     { AF_BLUE_STRING_GUJARATI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
 856     { AF_BLUE_STRING_GUJARATI_DESCENDER, 0                                 }
 857     { AF_BLUE_STRING_GUJARATI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP        }
 858     { AF_BLUE_STRING_MAX,                0                                 }
 859 
 860   AF_BLUE_STRINGSET_GURU
 861     { AF_BLUE_STRING_GURMUKHI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP        }
 862     { AF_BLUE_STRING_GURMUKHI_HEAD,      AF_BLUE_PROPERTY_LATIN_TOP        }
 863     { AF_BLUE_STRING_GURMUKHI_BASE,      AF_BLUE_PROPERTY_LATIN_TOP      |
 864                                          AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
 865                                          AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 866     { AF_BLUE_STRING_GURMUKHI_BOTTOM,    0                                 }
 867     { AF_BLUE_STRING_GURMUKHI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP        }
 868     { AF_BLUE_STRING_MAX,                0                                 }
 869 
 870   AF_BLUE_STRINGSET_HEBR
 871     { AF_BLUE_STRING_HEBREW_TOP,       AF_BLUE_PROPERTY_LATIN_TOP  |
 872                                        AF_BLUE_PROPERTY_LATIN_LONG   }
 873     { AF_BLUE_STRING_HEBREW_BOTTOM,    0                             }
 874     { AF_BLUE_STRING_HEBREW_DESCENDER, 0                             }
 875     { AF_BLUE_STRING_MAX,              0                             }
 876 
 877   AF_BLUE_STRINGSET_KALI
 878     { AF_BLUE_STRING_KAYAH_LI_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
 879                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 880     { AF_BLUE_STRING_KAYAH_LI_BOTTOM,          0                                 }
 881     { AF_BLUE_STRING_KAYAH_LI_ASCENDER,        AF_BLUE_PROPERTY_LATIN_TOP        }
 882     { AF_BLUE_STRING_KAYAH_LI_DESCENDER,       0                                 }
 883     { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0                                 }
 884     { AF_BLUE_STRING_MAX,                      0                                 }
 885 
 886   AF_BLUE_STRINGSET_KHMR
 887     { AF_BLUE_STRING_KHMER_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
 888                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 889     { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP,   AF_BLUE_PROPERTY_LATIN_SUB_TOP    }
 890     { AF_BLUE_STRING_KHMER_BOTTOM,          0                                 }
 891     { AF_BLUE_STRING_KHMER_DESCENDER,       0                                 }
 892     { AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0                                 }
 893     { AF_BLUE_STRING_MAX,                   0                                 }
 894 
 895   AF_BLUE_STRINGSET_KHMS
 896     { AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
 897                                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 898     { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0                                 }
 899     { AF_BLUE_STRING_MAX,                         0                                 }
 900 
 901   AF_BLUE_STRINGSET_KNDA
 902     { AF_BLUE_STRING_KANNADA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
 903     { AF_BLUE_STRING_KANNADA_BOTTOM, 0                          }
 904     { AF_BLUE_STRING_MAX,            0                          }
 905 
 906   AF_BLUE_STRINGSET_LAO
 907     { AF_BLUE_STRING_LAO_TOP,            AF_BLUE_PROPERTY_LATIN_TOP      |
 908                                          AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 909     { AF_BLUE_STRING_LAO_BOTTOM,         0                                 }
 910     { AF_BLUE_STRING_LAO_ASCENDER,       AF_BLUE_PROPERTY_LATIN_TOP        }
 911     { AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP        }
 912     { AF_BLUE_STRING_LAO_DESCENDER,      0                                 }
 913     { AF_BLUE_STRING_MAX,                0                                 }
 914 
 915   AF_BLUE_STRINGSET_LATN
 916     { AF_BLUE_STRING_LATIN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
 917     { AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM,  0                                 }
 918     { AF_BLUE_STRING_LATIN_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
 919     { AF_BLUE_STRING_LATIN_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
 920                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 921     { AF_BLUE_STRING_LATIN_SMALL_BOTTOM,    0                                 }
 922     { AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 0                                 }
 923     { AF_BLUE_STRING_MAX,                   0                                 }
 924 
 925   AF_BLUE_STRINGSET_LATB
 926     { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
 927     { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM,  0                                 }
 928     { AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
 929     { AF_BLUE_STRING_LATIN_SUBS_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
 930                                                  AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 931     { AF_BLUE_STRING_LATIN_SUBS_SMALL,           0                                 }
 932     { AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0                                 }
 933     { AF_BLUE_STRING_MAX,                        0                                 }
 934 
 935   AF_BLUE_STRINGSET_LATP
 936     { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
 937     { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM,  0                                 }
 938     { AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
 939     { AF_BLUE_STRING_LATIN_SUPS_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
 940                                                  AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 941     { AF_BLUE_STRING_LATIN_SUPS_SMALL,           0                                 }
 942     { AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0                                 }
 943     { AF_BLUE_STRING_MAX,                        0                                 }
 944 
 945   AF_BLUE_STRINGSET_LISU
 946     { AF_BLUE_STRING_LISU_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
 947     { AF_BLUE_STRING_LISU_BOTTOM, 0                          }
 948     { AF_BLUE_STRING_MAX,         0                          }
 949 
 950   AF_BLUE_STRINGSET_MLYM
 951     { AF_BLUE_STRING_MALAYALAM_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
 952     { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0                          }
 953     { AF_BLUE_STRING_MAX,              0                          }
 954 
 955   AF_BLUE_STRINGSET_MONG
 956     { AF_BLUE_STRING_MONGOLIAN_TOP_BASE,    AF_BLUE_PROPERTY_LATIN_TOP }
 957     { AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE, 0                          }
 958     { AF_BLUE_STRING_MAX,                   0                          }
 959 
 960   AF_BLUE_STRINGSET_MYMR
 961     { AF_BLUE_STRING_MYANMAR_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
 962                                         AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 963     { AF_BLUE_STRING_MYANMAR_BOTTOM,    0                                 }
 964     { AF_BLUE_STRING_MYANMAR_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
 965     { AF_BLUE_STRING_MYANMAR_DESCENDER, 0                                 }
 966     { AF_BLUE_STRING_MAX,               0                                 }
 967 
 968   AF_BLUE_STRINGSET_NKOO
 969     { AF_BLUE_STRING_NKO_TOP,          AF_BLUE_PROPERTY_LATIN_TOP        }
 970     { AF_BLUE_STRING_NKO_BOTTOM,       0                                 }
 971     { AF_BLUE_STRING_NKO_SMALL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
 972                                        AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
 973     { AF_BLUE_STRING_NKO_SMALL_BOTTOM, 0                                 }
 974     { AF_BLUE_STRING_MAX,              0                                 }
 975 
 976   AF_BLUE_STRINGSET_NONE
 977     { AF_BLUE_STRING_MAX, 0 }
 978 
 979   AF_BLUE_STRINGSET_OLCK
 980     { AF_BLUE_STRING_OL_CHIKI, AF_BLUE_PROPERTY_LATIN_TOP }
 981     { AF_BLUE_STRING_OL_CHIKI, 0                          }
 982     { AF_BLUE_STRING_MAX,      0                          }
 983 
 984   AF_BLUE_STRINGSET_ORKH
 985     { AF_BLUE_STRING_OLD_TURKIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
 986     { AF_BLUE_STRING_OLD_TURKIC_BOTTOM, 0                          }
 987     { AF_BLUE_STRING_MAX,               0                          }
 988 
 989   AF_BLUE_STRINGSET_OSGE
 990     { AF_BLUE_STRING_OSAGE_CAPITAL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP       }
 991     { AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM,    0                                }
 992     { AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0                                }
 993     { AF_BLUE_STRING_OSAGE_SMALL_TOP,         AF_BLUE_PROPERTY_LATIN_TOP     |
 994                                               AF_BLUE_PROPERTY_LATIN_X_HEIGHT  }
 995     { AF_BLUE_STRING_OSAGE_SMALL_BOTTOM,      0                                }
 996     { AF_BLUE_STRING_OSAGE_SMALL_ASCENDER,    AF_BLUE_PROPERTY_LATIN_TOP       }
 997     { AF_BLUE_STRING_OSAGE_SMALL_DESCENDER,   0                                }
 998     { AF_BLUE_STRING_MAX,                     0                                }
 999 
1000   AF_BLUE_STRINGSET_OSMA
1001     { AF_BLUE_STRING_OSMANYA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1002     { AF_BLUE_STRING_OSMANYA_BOTTOM, 0                          }
1003     { AF_BLUE_STRING_MAX,            0                          }
1004 
1005   AF_BLUE_STRINGSET_SAUR
1006     { AF_BLUE_STRING_SAURASHTRA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1007     { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0                          }
1008     { AF_BLUE_STRING_MAX,               0                          }
1009 
1010   AF_BLUE_STRINGSET_SHAW
1011     { AF_BLUE_STRING_SHAVIAN_TOP,          AF_BLUE_PROPERTY_LATIN_TOP        }
1012     { AF_BLUE_STRING_SHAVIAN_BOTTOM,       0                                 }
1013     { AF_BLUE_STRING_SHAVIAN_DESCENDER,    0                                 }
1014     { AF_BLUE_STRING_SHAVIAN_SMALL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
1015                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
1016     { AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0                                 }
1017     { AF_BLUE_STRING_MAX,                  0                                 }
1018 
1019   AF_BLUE_STRINGSET_SINH
1020     { AF_BLUE_STRING_SINHALA_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
1021     { AF_BLUE_STRING_SINHALA_BOTTOM,    0                          }
1022     { AF_BLUE_STRING_SINHALA_DESCENDER, 0                          }
1023     { AF_BLUE_STRING_MAX,               0                          }
1024 
1025   AF_BLUE_STRINGSET_SUND
1026     { AF_BLUE_STRING_SUNDANESE_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
1027     { AF_BLUE_STRING_SUNDANESE_BOTTOM,    0                          }
1028     { AF_BLUE_STRING_SUNDANESE_DESCENDER, 0                          }
1029     { AF_BLUE_STRING_MAX,                 0                          }
1030 
1031   AF_BLUE_STRINGSET_TAML
1032     { AF_BLUE_STRING_TAMIL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1033     { AF_BLUE_STRING_TAMIL_BOTTOM, 0                          }
1034     { AF_BLUE_STRING_MAX,          0                          }
1035 
1036   AF_BLUE_STRINGSET_TAVT
1037     { AF_BLUE_STRING_TAI_VIET_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1038     { AF_BLUE_STRING_TAI_VIET_BOTTOM, 0                          }
1039     { AF_BLUE_STRING_MAX,             0                          }
1040 
1041   AF_BLUE_STRINGSET_TELU
1042     { AF_BLUE_STRING_TELUGU_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1043     { AF_BLUE_STRING_TELUGU_BOTTOM, 0                          }
1044     { AF_BLUE_STRING_MAX,           0                          }
1045 
1046   AF_BLUE_STRINGSET_TFNG
1047     { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }
1048     { AF_BLUE_STRING_TIFINAGH, 0                          }
1049     { AF_BLUE_STRING_MAX,      0                          }
1050 
1051   AF_BLUE_STRINGSET_THAI
1052     { AF_BLUE_STRING_THAI_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
1053                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
1054     { AF_BLUE_STRING_THAI_BOTTOM,          0                                 }
1055     { AF_BLUE_STRING_THAI_ASCENDER,        AF_BLUE_PROPERTY_LATIN_TOP        }
1056     { AF_BLUE_STRING_THAI_LARGE_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
1057     { AF_BLUE_STRING_THAI_DESCENDER,       0                                 }
1058     { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0                                 }
1059     { AF_BLUE_STRING_THAI_DIGIT_TOP,       0                                 }
1060     { AF_BLUE_STRING_MAX,                  0                                 }
1061 
1062   AF_BLUE_STRINGSET_VAII
1063     { AF_BLUE_STRING_VAI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1064     { AF_BLUE_STRING_VAI_BOTTOM, 0                          }
1065     { AF_BLUE_STRING_MAX,        0                          }
1066 
1067 #ifdef AF_CONFIG_OPTION_CJK
1068 
1069   AF_BLUE_STRINGSET_HANI
1070     { AF_BLUE_STRING_CJK_TOP,    AF_BLUE_PROPERTY_CJK_TOP     }
1071     { AF_BLUE_STRING_CJK_BOTTOM, 0                            }
1072 #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
1073     { AF_BLUE_STRING_CJK_LEFT,   AF_BLUE_PROPERTY_CJK_HORIZ   }
1074     { AF_BLUE_STRING_CJK_RIGHT,  AF_BLUE_PROPERTY_CJK_HORIZ |
1075                                  AF_BLUE_PROPERTY_CJK_RIGHT   }
1076 #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
1077     { AF_BLUE_STRING_MAX,        0                            }
1078 
1079 #endif /* AF_CONFIG_OPTION_CJK                */
1080 
1081 
1082 // END