Source code
Revision control
Copy as Markdown
Other Tools
// 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