Edit

kc3-lang/freetype/src/autofit/afblue.dat

Branch :

  • Show log

    Commit

  • Author : Alexei Podtelezhnikov
    Date : 2024-01-27 11:11:22
    Hash : 47574f7e
    Message : Update all copyright notices.

  • src/autofit/afblue.dat
  • // afblue.dat
    //
    //   Auto-fitter data for blue strings.
    //
    // Copyright (C) 2013-2024 by
    // David Turner, Robert Wilhelm, and Werner Lemberg.
    //
    // This file is part of the FreeType project, and may only be used,
    // modified, and distributed under the terms of the FreeType project
    // license, LICENSE.TXT.  By continuing to use, modify, or distribute
    // this file you indicate that you have read the license and
    // understand and accept it fully.
    
    
    // This file contains data specific to blue zones.  It gets processed by
    // a script to simulate `jagged arrays', with enumeration values holding
    // offsets into the arrays.
    //
    // The format of the file is rather simple:  A section starts with three
    // labels separated by whitespace and followed by a colon (everything in a
    // single line); the first label gives the name of the enumeration template,
    // the second the name of the array template, and the third the name of the
    // `maximum' template.  The script then fills the corresponding templates
    // (indicated by `@' characters around the name).
    //
    // A section contains one or more data records.  Each data record consists
    // of two or more lines.  The first line holds the enumeration name, and the
    // remaining lines the corresponding array data.
    //
    // There are two possible representations for array data.
    //
    // - A string of characters or character clusters (for example, representing
    //   Aksharas, Devanagari syllables) in UTF-8 encoding enclosed in double
    //   quotes, using C syntax, where the elements are separated by spaces.
    //   There can be only one string per line, thus the starting and ending
    //   double quote must be the first and last character in the line,
    //   respectively, ignoring whitespace before and after the string.  If
    //   there are multiple strings (in multiple lines), they are concatenated
    //   to a single string.  In the output, a string gets represented as a
    //   series of singles bytes, followed by a zero byte.  The enumeration
    //   values simply hold byte offsets to the start of the corresponding
    //   strings.
    //
    //   For strings, the `maximum' template holds the maximum number of
    //   non-space characters in all strings.
    //
    // - Data blocks enclosed in balanced braces, which get copied verbatim and
    //   which can span multiple lines.  The opening brace of a block must be
    //   the first character of a line (ignoring whitespace), and the closing
    //   brace the last (ignoring whitespace also).  The script appends a comma
    //   character after each block and counts the number of blocks to set the
    //   enumeration values.
    //
    //   For data blocks, the `maximum' template holds the maximum number of
    //   array elements.
    //
    // A section can contain either strings only or data blocks only.
    //
    // A comment line starts with `//'; it gets removed.  A preprocessor
    // directive line (using the standard syntax of `cpp') starts with `#' and
    // gets copied verbatim to both the enumeration and the array.  Whitespace
    // outside of a string is insignificant.
    //
    // Preprocessor directives are ignored while the script computes maximum
    // values; this essentially means that the maximum values can easily be too
    // large.  Given that the purpose of those values is to create local
    // fixed-size arrays at compile time for further processing of the blue zone
    // data, this isn't a problem.  Note the final zero byte of a string is not
    // counted.  Note also that the count holds the number of UTF-8 encoded
    // characters, not bytes.
    
    
    // The blue zone string data, to be used in the blue stringsets below.
    
    AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
    
      AF_BLUE_STRING_ADLAM_CAPITAL_TOP
        "𞤌 𞤅 𞤈 𞤏 𞤔 𞤚"
      AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM
        "𞤂 𞤖"
      AF_BLUE_STRING_ADLAM_SMALL_TOP
        "𞤬 𞤮 𞤻 𞤼 𞤾"
      AF_BLUE_STRING_ADLAM_SMALL_BOTTOM
        "𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀"
    
      AF_BLUE_STRING_ARABIC_TOP
        "ا إ ل ك ط ظ"
      AF_BLUE_STRING_ARABIC_BOTTOM
        "ت ث ط ظ ك"
      // We don't necessarily have access to medial forms via Unicode in case
      // Arabic presentational forms are missing.  The only character that is
      // guaranteed to have the same vertical position with joining (that is,
      // non-isolated) forms is U+0640, ARABIC TATWEEL, which must join both
      // round and flat curves.
      AF_BLUE_STRING_ARABIC_JOIN
        "ـ"
    
      AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP
        "Ա Մ Ւ Ս Բ Գ Դ Օ"
      AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM
        "Ւ Ո Դ Ճ Շ Ս Տ Օ"
      AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER
        "ե է ի մ վ ֆ ճ"
      AF_BLUE_STRING_ARMENIAN_SMALL_TOP
        "ա յ ւ ս գ շ ր օ"
      AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM
        "հ ո ճ ա ե ծ ս օ"
      AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER
        "բ ը ի լ ղ պ փ ց"
    
      AF_BLUE_STRING_AVESTAN_TOP
        "𐬀 𐬁 𐬐 𐬛"
      AF_BLUE_STRING_AVESTAN_BOTTOM
        "𐬀 𐬁"
    
      AF_BLUE_STRING_BAMUM_TOP
        "ꚧ ꚨ ꛛ ꛉ ꛁ ꛈ ꛫ ꛯ"
      AF_BLUE_STRING_BAMUM_BOTTOM
        "ꚭ ꚳ ꚶ ꛬ ꚢ ꚽ ꛯ ꛲"
    
      AF_BLUE_STRING_BENGALI_BASE
        "অ ড ত ন ব ভ ল ক"
      AF_BLUE_STRING_BENGALI_TOP
        "ই ট ঠ ি ী ৈ ৗ"
      AF_BLUE_STRING_BENGALI_HEAD
        "ও এ ড ত ন ব ল ক"
    
      AF_BLUE_STRING_BUHID_TOP
        "ᝐ ᝈ"
      AF_BLUE_STRING_BUHID_LARGE
        "ᝅ ᝊ ᝎ"
      AF_BLUE_STRING_BUHID_SMALL
        "ᝂ ᝃ ᝉ ᝌ"
      AF_BLUE_STRING_BUHID_BOTTOM
        "ᝀ ᝃ ᝆ ᝉ ᝋ ᝏ ᝑ"
    
      AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP
        "ᗜ ᖴ ᐁ ᒣ ᑫ ᑎ ᔑ ᗰ"
      AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM
        "ᗶ ᖵ ᒧ ᐃ ᑌ ᒍ ᔑ ᗢ"
      AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP
        "ᓓ ᓕ ᓀ ᓂ ᓄ ᕄ ᕆ ᘣ"
      AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM
        "ᕃ ᓂ ᓀ ᕂ ᓗ ᓚ ᕆ ᘣ"
      AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP
        "ᐪ ᙆ ᣘ ᐢ ᒾ ᣗ ᔆ"
      AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM
        "ᙆ ᗮ ᒻ ᐞ ᔆ ᒡ ᒢ ᓑ"
    
      AF_BLUE_STRING_CARIAN_TOP
        "𐊧 𐊫 𐊬 𐊭 𐊱 𐊺 𐊼 𐊿"
      AF_BLUE_STRING_CARIAN_BOTTOM
        "𐊣 𐊧 𐊷 𐋀 𐊫 𐊸 𐋉"
    
      AF_BLUE_STRING_CHAKMA_TOP
        "𑄃 𑄅 𑄉 𑄙 𑄗"
      AF_BLUE_STRING_CHAKMA_BOTTOM
        "𑄅 𑄛 𑄝 𑄗 𑄓"
      AF_BLUE_STRING_CHAKMA_DESCENDER
        "𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢"
    
      AF_BLUE_STRING_CHEROKEE_CAPITAL
        "Ꮖ Ꮋ Ꭼ Ꮓ Ꭴ Ꮳ Ꭶ Ꮥ"
      AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER
        "ꮒ ꮤ ꮶ ꭴ ꭾ ꮗ ꮝ ꮿ"
      AF_BLUE_STRING_CHEROKEE_SMALL
        "ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ"
      AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER
        "ᏸ ꮐ ꭹ ꭻ"
    
      AF_BLUE_STRING_COPTIC_CAPITAL_TOP
        "Ⲍ Ⲏ Ⲡ Ⳟ Ⲟ Ⲑ Ⲥ Ⳋ"
      AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM
        "Ⳑ Ⳙ Ⳟ Ⲏ Ⲟ Ⲑ Ⳝ Ⲱ"
      AF_BLUE_STRING_COPTIC_SMALL_TOP
        "ⲍ ⲏ ⲡ ⳟ ⲟ ⲑ ⲥ ⳋ"
      AF_BLUE_STRING_COPTIC_SMALL_BOTTOM
        "ⳑ ⳙ ⳟ ⲏ ⲟ ⲑ ⳝ Ⳓ"
    
      AF_BLUE_STRING_CYPRIOT_TOP
        "𐠍 𐠙 𐠳 𐠱 𐠅 𐠓 𐠣 𐠦"
      AF_BLUE_STRING_CYPRIOT_BOTTOM
        "𐠃 𐠊 𐠛 𐠣 𐠳 𐠵 𐠐"
      AF_BLUE_STRING_CYPRIOT_SMALL
        "𐠈 𐠏 𐠖"
    
      AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP
        "Б В Е П З О С Э"
      AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM
        "Б В Е Ш З О С Э"
      AF_BLUE_STRING_CYRILLIC_SMALL
        "х п н ш е з о с"
      AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER
        "р у ф"
    
      AF_BLUE_STRING_DESERET_CAPITAL_TOP
        "𐐂 𐐄 𐐋 𐐗 𐐑"
      AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM
        "𐐀 𐐂 𐐄 𐐗 𐐛"
      AF_BLUE_STRING_DESERET_SMALL_TOP
        "𐐪 𐐬 𐐳 𐐿 𐐹"
      AF_BLUE_STRING_DESERET_SMALL_BOTTOM
        "𐐨 𐐪 𐐬 𐐿 𐑃"
    
      AF_BLUE_STRING_DEVANAGARI_BASE
        "क न म उ छ ट ठ ड"
      AF_BLUE_STRING_DEVANAGARI_TOP
        "ई ऐ ओ औ ि ी ो ौ"
      // note that some fonts have extreme variation in the height of the
      // round head elements; for this reason we also define the `base'
      // blue zone, which must be always present
      AF_BLUE_STRING_DEVANAGARI_HEAD
        "क म अ आ थ ध भ श"
      AF_BLUE_STRING_DEVANAGARI_BOTTOM
        "ु ृ"
    
      AF_BLUE_STRING_ETHIOPIC_TOP
        "ሀ ሃ ዘ ፐ ማ በ ዋ ዐ"
      AF_BLUE_STRING_ETHIOPIC_BOTTOM
        "ለ ሐ በ ዘ ሀ ሪ ዐ ጨ"
    
      AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP
        "გ დ ე ვ თ ი ო ღ"
      AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM
        "ა ზ მ ს შ ძ ხ პ"
      AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER
        "ს ხ ქ ზ მ შ ჩ წ"
      AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER
        "ე ვ ჟ ტ უ ფ ქ ყ"
    
      AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP
        "Ⴑ Ⴇ Ⴙ Ⴜ Ⴄ Ⴅ Ⴓ Ⴚ"
      AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM
        "Ⴄ Ⴅ Ⴇ Ⴈ Ⴆ Ⴑ Ⴊ Ⴋ"
    
      AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP
        "ⴁ ⴗ ⴂ ⴄ ⴅ ⴇ ⴔ ⴖ"
      AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM
        "ⴈ ⴌ ⴖ ⴎ ⴃ ⴆ ⴋ ⴢ"
      AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER
        "ⴐ ⴑ ⴓ ⴕ ⴙ ⴛ ⴡ ⴣ"
      AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER
        "ⴄ ⴅ ⴔ ⴕ ⴁ ⴂ ⴘ ⴝ"
    
      AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP
        "Ნ Ჟ Ჳ Ჸ Გ Ე Ო Ჴ"
      AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM
        "Ი Ჲ Ო Ჩ Მ Შ Ჯ Ჽ"
    
      AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP
        "Ⰵ Ⱄ Ⱚ Ⰴ Ⰲ Ⰺ Ⱛ Ⰻ"
      AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM
        "Ⰵ Ⰴ Ⰲ Ⱚ Ⱎ Ⱑ Ⰺ Ⱄ"
      AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP
        "ⰵ ⱄ ⱚ ⰴ ⰲ ⰺ ⱛ ⰻ"
      AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM
        "ⰵ ⰴ ⰲ ⱚ ⱎ ⱑ ⰺ ⱄ"
    
      AF_BLUE_STRING_GOTHIC_TOP
        "𐌲 𐌶 𐍀 𐍄 𐌴 𐍃 𐍈 𐌾"
      AF_BLUE_STRING_GOTHIC_BOTTOM
        "𐌶 𐌴 𐍃 𐍈"
    
      AF_BLUE_STRING_GREEK_CAPITAL_TOP
        "Γ Β Ε Ζ Θ Ο Ω"
      AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM
        "Β Δ Ζ Ξ Θ Ο"
      AF_BLUE_STRING_GREEK_SMALL_BETA_TOP
        "β θ δ ζ λ ξ"
      AF_BLUE_STRING_GREEK_SMALL
        "α ε ι ο π σ τ ω"
      AF_BLUE_STRING_GREEK_SMALL_DESCENDER
        "β γ η μ ρ φ χ ψ"
    
      AF_BLUE_STRING_GUJARATI_TOP
        "ત ન ઋ ઌ છ ટ ર ૦"
      AF_BLUE_STRING_GUJARATI_BOTTOM
        "ખ ગ ઘ ઞ ઇ ઈ ઠ જ"
      AF_BLUE_STRING_GUJARATI_ASCENDER
        "ઈ ઊ િ ી લી શ્ચિ જિ સી"
      AF_BLUE_STRING_GUJARATI_DESCENDER
        "ુ ૃ ૄ ખુ છૃ છૄ"
      AF_BLUE_STRING_GUJARATI_DIGIT_TOP
        "૦ ૧ ૨ ૩ ૭"
    
      AF_BLUE_STRING_GURMUKHI_BASE
        "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
      AF_BLUE_STRING_GURMUKHI_HEAD
        "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
      AF_BLUE_STRING_GURMUKHI_TOP
        "ਇ ਈ ਉ ਏ ਓ ੳ ਿ ੀ"
      AF_BLUE_STRING_GURMUKHI_BOTTOM
        "ਅ ਏ ਓ ਗ ਜ ਠ ਰ ਸ"
      AF_BLUE_STRING_GURMUKHI_DIGIT_TOP
        "੦ ੧ ੨ ੩ ੭"
    
      AF_BLUE_STRING_HEBREW_TOP
        "ב ד ה ח ך כ ם ס"
      AF_BLUE_STRING_HEBREW_BOTTOM
        "ב ט כ ם ס צ"
      AF_BLUE_STRING_HEBREW_DESCENDER
        "ק ך ן ף ץ"
    
      AF_BLUE_STRING_KANNADA_TOP
        "ಇ ಊ ಐ ಣ ಸಾ ನಾ ದಾ ರಾ"
      AF_BLUE_STRING_KANNADA_BOTTOM
        "ಅ ಉ ಎ ಲ ೦ ೨ ೬ ೭"
    
      AF_BLUE_STRING_KAYAH_LI_TOP
        "꤅ ꤏ ꤁ ꤋ ꤀ ꤍ"
      AF_BLUE_STRING_KAYAH_LI_BOTTOM
        "꤈ ꤘ ꤀ ꤍ ꤢ"
      AF_BLUE_STRING_KAYAH_LI_ASCENDER
        "ꤖ ꤡ"
      AF_BLUE_STRING_KAYAH_LI_DESCENDER
        "ꤑ ꤜ ꤞ"
      AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER
        "ꤑ꤬ ꤜ꤭ ꤔ꤬"
    
      AF_BLUE_STRING_KHMER_TOP
        "ខ ទ ន ឧ ឩ ា"
      AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP
        "ក្ក ក្ខ ក្គ ក្ថ"
      AF_BLUE_STRING_KHMER_BOTTOM
        "ខ ឃ ច ឋ ប ម យ ឲ"
      AF_BLUE_STRING_KHMER_DESCENDER
        "ត្រ រៀ ឲ្យ អឿ"
      AF_BLUE_STRING_KHMER_LARGE_DESCENDER
        "ន្ត្រៃ ង្ខ្យ ក្បៀ ច្រៀ ន្តឿ ល្បឿ"
    
      AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP
        "᧠ ᧡"
      AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM
        "᧶ ᧹"
    
      AF_BLUE_STRING_LAO_TOP
        "າ ດ ອ ມ ລ ວ ຣ ງ"
      AF_BLUE_STRING_LAO_BOTTOM
        "າ ອ ບ ຍ ຣ ຮ ວ ຢ"
      AF_BLUE_STRING_LAO_ASCENDER
        "ປ ຢ ຟ ຝ"
      AF_BLUE_STRING_LAO_LARGE_ASCENDER
        "ໂ ໄ ໃ"
      AF_BLUE_STRING_LAO_DESCENDER
        "ງ ຊ ຖ ຽ ໆ ຯ"
    
      AF_BLUE_STRING_LATIN_CAPITAL_TOP
        "T H E Z O C Q S"
      AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM
        "H E Z L O C U S"
      AF_BLUE_STRING_LATIN_SMALL_F_TOP
        "f i j k d b h"
      AF_BLUE_STRING_LATIN_SMALL_TOP
        "u v x z o e s c"
      AF_BLUE_STRING_LATIN_SMALL_BOTTOM
        "n r x z o e s c"
      AF_BLUE_STRING_LATIN_SMALL_DESCENDER
        "p q g j y"
    
      // we assume that both the subscript and superscript ranges
      // don't contain oldstyle digits (actually, most fonts probably
      // have digits only in those ranges)
      AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP
        "₀ ₃ ₅ ₇ ₈"
      AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM
        "₀ ₁ ₂ ₃ ₈"
      AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP
        "ᵢ ⱼ ₕ ₖ ₗ"
      AF_BLUE_STRING_LATIN_SUBS_SMALL
        "ₐ ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ"
      AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER
        "ᵦ ᵧ ᵨ ᵩ ₚ"
    
      AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP
        "⁰ ³ ⁵ ⁷ ᵀ ᴴ ᴱ ᴼ"
      AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM
        "⁰ ¹ ² ³ ᴱ ᴸ ᴼ ᵁ"
      AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP
        "ᵇ ᵈ ᵏ ʰ ʲ ᶠ ⁱ"
      AF_BLUE_STRING_LATIN_SUPS_SMALL
        "ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ"
      AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER
        "ᵖ ʸ ᵍ"
    
      AF_BLUE_STRING_LISU_TOP
        "ꓡ ꓧ ꓱ ꓶ ꓩ ꓚ ꓵ ꓳ"
      AF_BLUE_STRING_LISU_BOTTOM
        "ꓕ ꓜ ꓞ ꓡ ꓛ ꓢ ꓳ ꓴ"
    
      AF_BLUE_STRING_MALAYALAM_TOP
        "ഒ ട ഠ റ ച പ ച്ച പ്പ"
      AF_BLUE_STRING_MALAYALAM_BOTTOM
        "ട ഠ ധ ശ ഘ ച ഥ ല"
    
      AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP
        "𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹟"
      AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM
        "𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹒 𖹓"
      AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP
        "𖹤 𖹬 𖹧 𖹴 𖹶 𖹾"
      AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP
        "𖹠 𖹡 𖹢 𖹹 𖹳 𖹮"
      AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM
        "𖹠 𖹡 𖹢 𖹳 𖹭 𖹽"
      AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER
        "𖹥 𖹨 𖹩"
      AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP
        "𖺀 𖺅 𖺈 𖺄 𖺍"
    
      AF_BLUE_STRING_MONGOLIAN_TOP_BASE
        "ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ ‍ᡡ‍ ‍ᡳ‍"
      AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE
        "ᡃ"
    
      AF_BLUE_STRING_MYANMAR_TOP
        "ခ ဂ င ဒ ဝ ၥ ၊ ။"
      AF_BLUE_STRING_MYANMAR_BOTTOM
        "င ဎ ဒ ပ ဗ ဝ ၊ ။"
      AF_BLUE_STRING_MYANMAR_ASCENDER
        "ဩ ြ ၍ ၏ ၆ ါ ိ"
      AF_BLUE_STRING_MYANMAR_DESCENDER
        "ဉ ည ဥ ဩ ဨ ၂ ၅ ၉"
    
      AF_BLUE_STRING_NKO_TOP
        "ߐ ߉ ߒ ߟ ߖ ߜ ߠ ߥ"
      AF_BLUE_STRING_NKO_BOTTOM
        "߀ ߘ ߡ ߠ ߥ"
      AF_BLUE_STRING_NKO_SMALL_TOP
        "ߏ ߛ ߋ"
      AF_BLUE_STRING_NKO_SMALL_BOTTOM
        "ߎ ߏ ߛ ߋ"
    
      AF_BLUE_STRING_OL_CHIKI
        "ᱛ ᱜ ᱝ ᱡ ᱢ ᱥ"
    
      AF_BLUE_STRING_OLD_TURKIC_TOP
        "𐰗 𐰘 𐰧"
      AF_BLUE_STRING_OLD_TURKIC_BOTTOM
        "𐰉 𐰗 𐰦 𐰧"
    
      AF_BLUE_STRING_OSAGE_CAPITAL_TOP
        "𐒾 𐓍 𐓒 𐓓 𐒻 𐓂 𐒵 𐓆"
      AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM
        "𐒰 𐓍 𐓂 𐒿 𐓎 𐒹"
      AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER
        "𐒼 𐒽 𐒾"
      AF_BLUE_STRING_OSAGE_SMALL_TOP
        "𐓵 𐓶 𐓺 𐓻 𐓝 𐓣 𐓪 𐓮"
      AF_BLUE_STRING_OSAGE_SMALL_BOTTOM
        "𐓘 𐓚 𐓣 𐓵 𐓡 𐓧 𐓪 𐓶"
      AF_BLUE_STRING_OSAGE_SMALL_ASCENDER
        "𐓤 𐓦 𐓸 𐓹 𐓛"
      AF_BLUE_STRING_OSAGE_SMALL_DESCENDER
        "𐓤 𐓥 𐓦"
    
      AF_BLUE_STRING_OSMANYA_TOP
        "𐒆 𐒉 𐒐 𐒒 𐒘 𐒛 𐒠 𐒣"
      AF_BLUE_STRING_OSMANYA_BOTTOM
        "𐒀 𐒂 𐒆 𐒈 𐒊 𐒒 𐒠 𐒩"
    
      AF_BLUE_STRING_ROHINGYA_TOP
        "𐴃 𐴀 𐴆 𐴖 𐴕"
      AF_BLUE_STRING_ROHINGYA_BOTTOM
        "𐴔 𐴖 𐴕 𐴑 𐴐"
      AF_BLUE_STRING_ROHINGYA_JOIN
        "ـ"
    
      AF_BLUE_STRING_SAURASHTRA_TOP
        "ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ"
      AF_BLUE_STRING_SAURASHTRA_BOTTOM
        "ꢂ ꢨ ꢺ ꢤ ꢎ"
    
      AF_BLUE_STRING_SHAVIAN_TOP
        "𐑕 𐑙"
      AF_BLUE_STRING_SHAVIAN_BOTTOM
        "𐑔 𐑖 𐑗 𐑹 𐑻"
      AF_BLUE_STRING_SHAVIAN_DESCENDER
        "𐑟 𐑣"
      AF_BLUE_STRING_SHAVIAN_SMALL_TOP
        "𐑱 𐑲 𐑳 𐑴 𐑸 𐑺 𐑼"
      AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM
        "𐑴 𐑻 𐑹"
    
      AF_BLUE_STRING_SINHALA_TOP
        "ඉ ක ඝ ඳ ප ය ල ෆ"
      AF_BLUE_STRING_SINHALA_BOTTOM
        "එ ඔ ඝ ජ ට ථ ධ ර"
      AF_BLUE_STRING_SINHALA_DESCENDER
        "ද ඳ උ ල තූ තු බු දු"
    
      AF_BLUE_STRING_SUNDANESE_TOP
        "ᮋ ᮞ ᮮ ᮽ ᮰ ᮈ"
      AF_BLUE_STRING_SUNDANESE_BOTTOM
        "ᮄ ᮔ ᮕ ᮗ ᮰ ᮆ ᮈ ᮉ"
      AF_BLUE_STRING_SUNDANESE_DESCENDER
        "ᮼ ᳄"
    
      AF_BLUE_STRING_TAI_VIET_TOP
        "ꪆ ꪔ ꪒ ꪖ ꪫ"
      AF_BLUE_STRING_TAI_VIET_BOTTOM
        "ꪉ ꪫ ꪮ"
    
      AF_BLUE_STRING_TAMIL_TOP
        "உ ஒ ஓ ற ஈ க ங ச"
      AF_BLUE_STRING_TAMIL_BOTTOM
        "க ச ல ஶ உ ங ட ப"
    
      AF_BLUE_STRING_TELUGU_TOP
        "ఇ ఌ ఙ ఞ ణ ఱ ౯"
      AF_BLUE_STRING_TELUGU_BOTTOM
        "అ క చ ర ఽ ౨ ౬"
    
      AF_BLUE_STRING_THAI_TOP
        "บ เ แ อ ก า"
      AF_BLUE_STRING_THAI_BOTTOM
        "บ ป ษ ฯ อ ย ฮ"
      AF_BLUE_STRING_THAI_ASCENDER
        "ป ฝ ฟ"
      AF_BLUE_STRING_THAI_LARGE_ASCENDER
        "โ ใ ไ"
      AF_BLUE_STRING_THAI_DESCENDER
        "ฎ ฏ ฤ ฦ"
      AF_BLUE_STRING_THAI_LARGE_DESCENDER
        "ญ ฐ"
      AF_BLUE_STRING_THAI_DIGIT_TOP
        "๐ ๑ ๓"
    
      AF_BLUE_STRING_TIFINAGH
        "ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ"
    
      AF_BLUE_STRING_VAI_TOP
        "ꗍ ꘖ ꘙ ꘜ ꖜ ꖝ ꔅ ꕢ"
      AF_BLUE_STRING_VAI_BOTTOM
        "ꗍ ꘖ ꘙ ꗞ ꔅ ꕢ ꖜ ꔆ"
    
    
    #ifdef AF_CONFIG_OPTION_CJK
    
      AF_BLUE_STRING_CJK_TOP
        "他 们 你 來 們 到 和 地"
        " 对 對 就 席 我 时 時 會"
        " 来 為 能 舰 說 说 这 這"
        " 齊 |"
        " 军 同 已 愿 既 星 是 景"
        " 民 照 现 現 理 用 置 要"
        " 軍 那 配 里 開 雷 露 面"
        " 顾"
      AF_BLUE_STRING_CJK_BOTTOM
        "个 为 人 他 以 们 你 來"
        " 個 們 到 和 大 对 對 就"
        " 我 时 時 有 来 為 要 說"
        " 说 |"
        " 主 些 因 它 想 意 理 生"
        " 當 看 着 置 者 自 著 裡"
        " 过 还 进 進 過 道 還 里"
        " 面"
    
    #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
    
      AF_BLUE_STRING_CJK_LEFT
        " 些 们 你 來 們 到 和 地"
        " 她 将 將 就 年 得 情 最"
        " 样 樣 理 能 說 说 这 這"
        " 通 |"
        " 即 吗 吧 听 呢 品 响 嗎"
        " 师 師 收 断 斷 明 眼 間"
        " 间 际 陈 限 除 陳 随 際"
        " 隨"
      AF_BLUE_STRING_CJK_RIGHT
        "事 前 學 将 將 情 想 或"
        " 政 斯 新 样 樣 民 沒 没"
        " 然 特 现 現 球 第 經 谁"
        " 起 |"
        " 例 別 别 制 动 動 吗 嗎"
        " 增 指 明 朝 期 构 物 确"
        " 种 調 调 費 费 那 都 間"
        " 间"
    
    #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
    
    #endif /* AF_CONFIG_OPTION_CJK                */
    
    
    // The blue zone stringsets, as used in the script styles, cf. `afstyles.h'.
    //
    // The AF_BLUE_PROPERTY_XXX flags are defined in `afblue.h'; here some
    // explanations.
    //
    // A blue zone in general is defined by a reference and an overshoot line.
    // During the hinting process, all coordinate values between those two lines
    // are set equal to the reference value, provided that the blue zone is not
    // wider than 0.75 pixels (otherwise the blue zone gets ignored).  All
    // entries must have `AF_BLUE_STRING_MAX' as the final line.
    //
    // During the glyph analysis, edges are sorted from bottom to top, and then
    // sequentially checked, edge by edge, against the blue zones in the order
    // given below.
    //
    //
    // latin auto-hinter
    // -----------------
    //
    // Characters in a blue string are automatically classified as having a flat
    // (reference) or a round (overshoot) extremum.  The blue zone is then set
    // up by the mean values of all flat extrema and all round extrema,
    // respectively.  Only horizontal blue zones (i.e., adjusting vertical
    // coordinate values) are supported.
    //
    // Some scripts like Khmer need character composition to get all necessary
    // blue zones, since Unicode only provides an abstract data model that
    // doesn't represent all possible glyph shapes.  For such character
    // clusters, the HarfBuzz library is used to convert them into the
    // corresponding glyphs.  The largest glyph element (where `largest' can be
    // either `largest ascender' or `largest descender') then defines the
    // corresponding flat or round extremum.
    //
    // For the latin auto-hinter, the overshoot should be larger than the
    // reference for top zones, and vice versa for bottom zones.
    //
    //   LATIN_TOP
    //     Take the maximum flat and round coordinate values of the blue string
    //     characters for computing the blue zone's reference and overshoot
    //     values.
    //
    //     If not set, take the minimum values.
    //
    //     Mutually exclusive with `LATIN_SUB_TOP'.
    //
    //   LATIN_SUB_TOP
    //     For all glyphs of a character cluster, compute the maximum flat
    //     and round coordinate values of each component, then take the
    //     smallest of the maximum values.  The idea is to get the top of
    //     subscript glyphs, as used in Khmer, for example.  Note that
    //     this mechanism doesn't work for ordinary ligatures.
    //
    //     This flags indicates a secondary blue zone: It gets removed if
    //     there is a non-LATIN_SUB_TOP blue zone at the same coordinate
    //     value (after scaling).
    //
    //     Mutually exclusive with `LATIN_TOP'.
    //
    //   LATIN_NEUTRAL
    //     Ignore round extrema and define the blue zone with flat values only.
    //     Both top and bottom of contours can match.  This is useful for
    //     scripts like Devanagari where vowel signs attach to the base
    //     character and are implemented as components of composite glyphs.
    //
    //     If not set, both round and flat extrema are taken into account.
    //     Additionally, only the top or the bottom of a contour can match,
    //     depending on the LATIN_TOP flag.
    //
    //     Neutral blue zones should always follow non-neutral blue zones.
    //
    //   LATIN_X_HEIGHT
    //     Scale all glyphs vertically from the corresponding script to make the
    //     reference line of this blue zone align on the grid.  The scaling
    //     takes place before all other blue zones get aligned to the grid.
    //     Only one blue character string of a script style can have this flag.
    //
    //   LATIN_LONG
    //     Apply an additional constraint for blue zone values: Don't
    //     necessarily use the extremum as-is but a segment of the topmost (or
    //     bottommost) contour that is longer than a heuristic threshold, and
    //     which is not too far away vertically from the real extremum.  This
    //     ensures that small bumps in the outline are ignored (for example, the
    //     `vertical serifs' found in many Hebrew glyph designs).
    //
    //     The segment must be at least EM/25 font units long, and the distance
    //     to the extremum must be smaller than EM/4.
    //
    //
    // cjk auto-hinter
    // ---------------
    //
    // Characters in a blue string are *not* automatically classified.  Instead,
    // first come the characters used for the overshoot value, then the
    // character `|', then the characters used for the reference value
    // (everything separated by space characters).  The blue zone is then set up
    // by the mean values of all reference values and all overshoot values,
    // respectively.  Both horizontal and vertical blue zones (i.e., adjusting
    // vertical and horizontal coordinate values, respectively) are supported.
    //
    // For the cjk auto-hinter, the overshoot should be smaller than the
    // reference for top zones, and vice versa for bottom zones.
    //
    //   CJK_TOP
    //     Take the maximum flat and round coordinate values of the blue string
    //     characters.  If not set, take the minimum values.
    //
    //   CJK_RIGHT
    //     A synonym for CJK_TOP.  If CJK_HORIZ is set, this flag indicates the
    //     right blue zone, taking horizontal maximum values.
    //
    //   CJK_HORIZ
    //     Define a blue zone for horizontal hinting (i.e., vertical blue
    //     zones).  If not set, this is a blue zone for vertical hinting.
    
    
    AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
    
      AF_BLUE_STRINGSET_ADLM
        { AF_BLUE_STRING_ADLAM_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0                                 }
        { AF_BLUE_STRING_ADLAM_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
                                               AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_ADLAM_SMALL_BOTTOM,   0                                 }
        { AF_BLUE_STRING_MAX,                  0                                 }
    
      AF_BLUE_STRINGSET_ARAB
        { AF_BLUE_STRING_ARABIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP     }
        { AF_BLUE_STRING_ARABIC_BOTTOM, 0                              }
        { AF_BLUE_STRING_ARABIC_JOIN,   AF_BLUE_PROPERTY_LATIN_NEUTRAL }
        { AF_BLUE_STRING_MAX,           0                              }
    
      AF_BLUE_STRINGSET_ARMN
        { AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM,  0                                 }
        { AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_ARMENIAN_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
                                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM,    0                                 }
        { AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MAX,                      0                                 }
    
      AF_BLUE_STRINGSET_AVST
        { AF_BLUE_STRING_AVESTAN_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_AVESTAN_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,            0                          }
    
      AF_BLUE_STRINGSET_BAMU
        { AF_BLUE_STRING_BAMUM_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_BAMUM_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,          0                          }
    
      AF_BLUE_STRINGSET_BENG
        { AF_BLUE_STRING_BENGALI_TOP,  AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_BENGALI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_BENGALI_BASE, AF_BLUE_PROPERTY_LATIN_TOP      |
                                       AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
                                       AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_BENGALI_BASE, 0                                 }
        { AF_BLUE_STRING_MAX,          0                                 }
    
      AF_BLUE_STRINGSET_BUHD
        { AF_BLUE_STRING_BUHID_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_BUHID_LARGE,  AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_BUHID_SMALL,  AF_BLUE_PROPERTY_LATIN_TOP      |
                                       AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_BUHID_BOTTOM, 0                                 }
        { AF_BLUE_STRING_MAX,          0                                 }
    
      AF_BLUE_STRINGSET_CAKM
        { AF_BLUE_STRING_CHAKMA_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_CHAKMA_BOTTOM,    0                          }
        { AF_BLUE_STRING_CHAKMA_DESCENDER, 0                          }
        { AF_BLUE_STRING_MAX,              0                          }
    
      AF_BLUE_STRINGSET_CANS
        { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP,          AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM,       0                                 }
        { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
                                                          AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0                                 }
        { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM,  0                                 }
        { AF_BLUE_STRING_MAX,                             0                                 }
    
      AF_BLUE_STRINGSET_CARI
        { AF_BLUE_STRING_CARIAN_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_CARIAN_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,           0                          }
    
      AF_BLUE_STRINGSET_CHER
        { AF_BLUE_STRING_CHEROKEE_CAPITAL,         AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_CHEROKEE_CAPITAL,         0                                 }
        { AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_CHEROKEE_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
                                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_CHEROKEE_SMALL,           0                                 }
        { AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MAX,                      0                                 }
    
      AF_BLUE_STRINGSET_COPT
        { AF_BLUE_STRING_COPTIC_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0                                 }
        { AF_BLUE_STRING_COPTIC_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_COPTIC_SMALL_BOTTOM,   0                                 }
        { AF_BLUE_STRING_MAX,                   0                                 }
    
      AF_BLUE_STRINGSET_CPRT
        { AF_BLUE_STRING_CYPRIOT_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_CYPRIOT_BOTTOM, 0                          }
        { AF_BLUE_STRING_CYPRIOT_SMALL,  AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_CYPRIOT_SMALL,  0                          }
        { AF_BLUE_STRING_MAX,            0                          }
    
      AF_BLUE_STRINGSET_CYRL
        { AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM,  0                                 }
        { AF_BLUE_STRING_CYRILLIC_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
                                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_CYRILLIC_SMALL,           0                                 }
        { AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MAX,                      0                                 }
    
      AF_BLUE_STRINGSET_DEVA
        { AF_BLUE_STRING_DEVANAGARI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_DEVANAGARI_HEAD,   AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_DEVANAGARI_BASE,   AF_BLUE_PROPERTY_LATIN_TOP      |
                                            AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_DEVANAGARI_BASE,   0                                 }
        { AF_BLUE_STRING_DEVANAGARI_BOTTOM, 0                                 }
        { AF_BLUE_STRING_MAX,               0                                 }
    
      AF_BLUE_STRINGSET_DSRT
        { AF_BLUE_STRING_DESERET_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0                                 }
        { AF_BLUE_STRING_DESERET_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
                                                 AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_DESERET_SMALL_BOTTOM,   0                                 }
        { AF_BLUE_STRING_MAX,                    0                                 }
    
      AF_BLUE_STRINGSET_ETHI
        { AF_BLUE_STRING_ETHIOPIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_ETHIOPIC_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,             0                          }
    
      AF_BLUE_STRINGSET_GEOR
        { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
                                                       AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM,    0                                 }
        { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0                                 }
        { AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP,        AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM,     0                                 }
        { AF_BLUE_STRING_MAX,                          0                                 }
    
      AF_BLUE_STRINGSET_GEOK
        { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0                                 }
        { AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
                                                      AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM,    0                                 }
        { AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MAX,                         0                                 }
    
      AF_BLUE_STRINGSET_GLAG
        { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0                                 }
        { AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
                                                    AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM,   0                                 }
        { AF_BLUE_STRING_MAX,                       0                                 }
    
      AF_BLUE_STRINGSET_GOTH
        { AF_BLUE_STRING_GOTHIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_GOTHIC_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,           0                          }
    
      AF_BLUE_STRINGSET_GREK
        { AF_BLUE_STRING_GREEK_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM,  0                                 }
        { AF_BLUE_STRING_GREEK_SMALL_BETA_TOP,  AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_GREEK_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_GREEK_SMALL,           0                                 }
        { AF_BLUE_STRING_GREEK_SMALL_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MAX,                   0                                 }
    
      AF_BLUE_STRINGSET_GUJR
        { AF_BLUE_STRING_GUJARATI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_GUJARATI_BOTTOM,    0                                 }
        { AF_BLUE_STRING_GUJARATI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_GUJARATI_DESCENDER, 0                                 }
        { AF_BLUE_STRING_GUJARATI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_MAX,                0                                 }
    
      AF_BLUE_STRINGSET_GURU
        { AF_BLUE_STRING_GURMUKHI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_GURMUKHI_HEAD,      AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_GURMUKHI_BASE,      AF_BLUE_PROPERTY_LATIN_TOP      |
                                             AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_GURMUKHI_BOTTOM,    0                                 }
        { AF_BLUE_STRING_GURMUKHI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_MAX,                0                                 }
    
      AF_BLUE_STRINGSET_HEBR
        { AF_BLUE_STRING_HEBREW_TOP,       AF_BLUE_PROPERTY_LATIN_TOP  |
                                           AF_BLUE_PROPERTY_LATIN_LONG   }
        { AF_BLUE_STRING_HEBREW_BOTTOM,    0                             }
        { AF_BLUE_STRING_HEBREW_DESCENDER, 0                             }
        { AF_BLUE_STRING_MAX,              0                             }
    
      AF_BLUE_STRINGSET_KNDA
        { AF_BLUE_STRING_KANNADA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_KANNADA_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,            0                          }
    
      AF_BLUE_STRINGSET_KALI
        { AF_BLUE_STRING_KAYAH_LI_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
                                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_KAYAH_LI_BOTTOM,          0                                 }
        { AF_BLUE_STRING_KAYAH_LI_ASCENDER,        AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_KAYAH_LI_DESCENDER,       0                                 }
        { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MAX,                      0                                 }
    
      AF_BLUE_STRINGSET_KHMR
        { AF_BLUE_STRING_KHMER_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP,   AF_BLUE_PROPERTY_LATIN_SUB_TOP    }
        { AF_BLUE_STRING_KHMER_BOTTOM,          0                                 }
        { AF_BLUE_STRING_KHMER_DESCENDER,       0                                 }
        { AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MAX,                   0                                 }
    
      AF_BLUE_STRINGSET_KHMS
        { AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
                                                      AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0                                 }
        { AF_BLUE_STRING_MAX,                         0                                 }
    
      AF_BLUE_STRINGSET_LAO
        { AF_BLUE_STRING_LAO_TOP,            AF_BLUE_PROPERTY_LATIN_TOP      |
                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_LAO_BOTTOM,         0                                 }
        { AF_BLUE_STRING_LAO_ASCENDER,       AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_LAO_DESCENDER,      0                                 }
        { AF_BLUE_STRING_MAX,                0                                 }
    
      AF_BLUE_STRINGSET_LATN
        { AF_BLUE_STRING_LATIN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM,  0                                 }
        { AF_BLUE_STRING_LATIN_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_LATIN_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_LATIN_SMALL_BOTTOM,    0                                 }
        { AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MAX,                   0                                 }
    
      AF_BLUE_STRINGSET_LATB
        { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM,  0                                 }
        { AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_LATIN_SUBS_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
                                                     AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_LATIN_SUBS_SMALL,           0                                 }
        { AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MAX,                        0                                 }
    
      AF_BLUE_STRINGSET_LATP
        { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM,  0                                 }
        { AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_LATIN_SUPS_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
                                                     AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_LATIN_SUPS_SMALL,           0                                 }
        { AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MAX,                        0                                 }
    
      AF_BLUE_STRINGSET_LISU
        { AF_BLUE_STRING_LISU_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_LISU_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,         0                          }
    
      AF_BLUE_STRINGSET_MLYM
        { AF_BLUE_STRING_MALAYALAM_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,              0                          }
    
      AF_BLUE_STRINGSET_MEDF
        { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM,  0                                 }
        { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
                                                      AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM,    0                                 }
        { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP,       AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_MAX,                         0                                 }
    
      AF_BLUE_STRINGSET_MONG
        { AF_BLUE_STRING_MONGOLIAN_TOP_BASE,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE, 0                          }
        { AF_BLUE_STRING_MAX,                   0                          }
    
      AF_BLUE_STRINGSET_MYMR
        { AF_BLUE_STRING_MYANMAR_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_MYANMAR_BOTTOM,    0                                 }
        { AF_BLUE_STRING_MYANMAR_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_MYANMAR_DESCENDER, 0                                 }
        { AF_BLUE_STRING_MAX,               0                                 }
    
      AF_BLUE_STRINGSET_NKOO
        { AF_BLUE_STRING_NKO_TOP,          AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_NKO_BOTTOM,       0                                 }
        { AF_BLUE_STRING_NKO_SMALL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
                                           AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_NKO_SMALL_BOTTOM, 0                                 }
        { AF_BLUE_STRING_MAX,              0                                 }
    
      AF_BLUE_STRINGSET_NONE
        { AF_BLUE_STRING_MAX, 0 }
    
      AF_BLUE_STRINGSET_OLCK
        { AF_BLUE_STRING_OL_CHIKI, AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_OL_CHIKI, 0                          }
        { AF_BLUE_STRING_MAX,      0                          }
    
      AF_BLUE_STRINGSET_ORKH
        { AF_BLUE_STRING_OLD_TURKIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_OLD_TURKIC_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,               0                          }
    
      AF_BLUE_STRINGSET_OSGE
        { AF_BLUE_STRING_OSAGE_CAPITAL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP       }
        { AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM,    0                                }
        { AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0                                }
        { AF_BLUE_STRING_OSAGE_SMALL_TOP,         AF_BLUE_PROPERTY_LATIN_TOP     |
                                                  AF_BLUE_PROPERTY_LATIN_X_HEIGHT  }
        { AF_BLUE_STRING_OSAGE_SMALL_BOTTOM,      0                                }
        { AF_BLUE_STRING_OSAGE_SMALL_ASCENDER,    AF_BLUE_PROPERTY_LATIN_TOP       }
        { AF_BLUE_STRING_OSAGE_SMALL_DESCENDER,   0                                }
        { AF_BLUE_STRING_MAX,                     0                                }
    
      AF_BLUE_STRINGSET_OSMA
        { AF_BLUE_STRING_OSMANYA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_OSMANYA_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,            0                          }
    
      AF_BLUE_STRINGSET_ROHG
        { AF_BLUE_STRING_ROHINGYA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP     }
        { AF_BLUE_STRING_ROHINGYA_BOTTOM, 0                              }
        { AF_BLUE_STRING_ROHINGYA_JOIN,   AF_BLUE_PROPERTY_LATIN_NEUTRAL }
        { AF_BLUE_STRING_MAX,             0                              }
    
      AF_BLUE_STRINGSET_SAUR
        { AF_BLUE_STRING_SAURASHTRA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,               0                          }
    
      AF_BLUE_STRINGSET_SHAW
        { AF_BLUE_STRING_SHAVIAN_TOP,          AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_SHAVIAN_BOTTOM,       0                                 }
        { AF_BLUE_STRING_SHAVIAN_DESCENDER,    0                                 }
        { AF_BLUE_STRING_SHAVIAN_SMALL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
                                               AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0                                 }
        { AF_BLUE_STRING_MAX,                  0                                 }
    
      AF_BLUE_STRINGSET_SINH
        { AF_BLUE_STRING_SINHALA_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_SINHALA_BOTTOM,    0                          }
        { AF_BLUE_STRING_SINHALA_DESCENDER, 0                          }
        { AF_BLUE_STRING_MAX,               0                          }
    
      AF_BLUE_STRINGSET_SUND
        { AF_BLUE_STRING_SUNDANESE_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_SUNDANESE_BOTTOM,    0                          }
        { AF_BLUE_STRING_SUNDANESE_DESCENDER, 0                          }
        { AF_BLUE_STRING_MAX,                 0                          }
    
      AF_BLUE_STRINGSET_TAML
        { AF_BLUE_STRING_TAMIL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_TAMIL_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,          0                          }
    
      AF_BLUE_STRINGSET_TAVT
        { AF_BLUE_STRING_TAI_VIET_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_TAI_VIET_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,             0                          }
    
      AF_BLUE_STRINGSET_TELU
        { AF_BLUE_STRING_TELUGU_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_TELUGU_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,           0                          }
    
      AF_BLUE_STRINGSET_THAI
        { AF_BLUE_STRING_THAI_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
                                               AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
        { AF_BLUE_STRING_THAI_BOTTOM,          0                                 }
        { AF_BLUE_STRING_THAI_ASCENDER,        AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_THAI_LARGE_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
        { AF_BLUE_STRING_THAI_DESCENDER,       0                                 }
        { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0                                 }
        { AF_BLUE_STRING_THAI_DIGIT_TOP,       0                                 }
        { AF_BLUE_STRING_MAX,                  0                                 }
    
      AF_BLUE_STRINGSET_TFNG
        { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_TIFINAGH, 0                          }
        { AF_BLUE_STRING_MAX,      0                          }
    
      AF_BLUE_STRINGSET_VAII
        { AF_BLUE_STRING_VAI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
        { AF_BLUE_STRING_VAI_BOTTOM, 0                          }
        { AF_BLUE_STRING_MAX,        0                          }
    
    #ifdef AF_CONFIG_OPTION_CJK
    
      AF_BLUE_STRINGSET_HANI
        { AF_BLUE_STRING_CJK_TOP,    AF_BLUE_PROPERTY_CJK_TOP     }
        { AF_BLUE_STRING_CJK_BOTTOM, 0                            }
    #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
        { AF_BLUE_STRING_CJK_LEFT,   AF_BLUE_PROPERTY_CJK_HORIZ   }
        { AF_BLUE_STRING_CJK_RIGHT,  AF_BLUE_PROPERTY_CJK_HORIZ |
                                     AF_BLUE_PROPERTY_CJK_RIGHT   }
    #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
        { AF_BLUE_STRING_MAX,        0                            }
    
    #endif /* AF_CONFIG_OPTION_CJK                */
    
    
    // END