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