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