1 // afblue.dat 2 // 3 // Auto-fitter data for blue strings. 4 // 5 // Copyright 2013-2018 by 6 // David Turner, Robert Wilhelm, and Werner Lemberg. 7 // 8 // This file is part of the FreeType project, and may only be used, 9 // modified, and distributed under the terms of the FreeType project 10 // license, LICENSE.TXT. By continuing to use, modify, or distribute 11 // this file you indicate that you have read the license and 12 // understand and accept it fully. 13 14 15 // This file contains data specific to blue zones. It gets processed by 16 // a script to simulate `jagged arrays', with enumeration values holding 17 // offsets into the arrays. 18 // 19 // The format of the file is rather simple: A section starts with three 20 // labels separated by whitespace and followed by a colon (everything in a 21 // single line); the first label gives the name of the enumeration template, 22 // the second the name of the array template, and the third the name of the 23 // `maximum' template. The script then fills the corresponding templates 24 // (indicated by `@' characters around the name). 25 // 26 // A section contains one or more data records. Each data record consists 27 // of two or more lines. The first line holds the enumeration name, and the 28 // remaining lines the corresponding array data. 29 // 30 // There are two possible representations for array data. 31 // 32 // - A string of characters or character clusters (for example, representing 33 // Aksharas, Devanagari syllables) in UTF-8 encoding enclosed in double 34 // quotes, using C syntax, where the elements are separated by spaces. 35 // There can be only one string per line, thus the starting and ending 36 // double quote must be the first and last character in the line, 37 // respectively, ignoring whitespace before and after the string. If 38 // there are multiple strings (in multiple lines), they are concatenated 39 // to a single string. In the output, a string gets represented as a 40 // series of singles bytes, followed by a zero byte. The enumeration 41 // values simply hold byte offsets to the start of the corresponding 42 // strings. 43 // 44 // For strings, the `maximum' template holds the maximum number of 45 // non-space characters in all strings. 46 // 47 // - Data blocks enclosed in balanced braces, which get copied verbatim and 48 // which can span multiple lines. The opening brace of a block must be 49 // the first character of a line (ignoring whitespace), and the closing 50 // brace the last (ignoring whitespace also). The script appends a comma 51 // character after each block and counts the number of blocks to set the 52 // enumeration values. 53 // 54 // For data blocks, the `maximum' template holds the maximum number of 55 // array elements. 56 // 57 // A section can contain either strings only or data blocks only. 58 // 59 // A comment line starts with `//'; it gets removed. A preprocessor 60 // directive line (using the standard syntax of `cpp') starts with `#' and 61 // gets copied verbatim to both the enumeration and the array. Whitespace 62 // outside of a string is insignificant. 63 // 64 // Preprocessor directives are ignored while the script computes maximum 65 // values; this essentially means that the maximum values can easily be too 66 // large. Given that the purpose of those values is to create local 67 // fixed-size arrays at compile time for further processing of the blue zone 68 // data, this isn't a problem. Note the final zero byte of a string is not 69 // counted. Note also that the count holds the number of UTF-8 encoded 70 // characters, not bytes. 71 72 73 // The blue zone string data, to be used in the blue stringsets below. 74 75 AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN: 76 77 AF_BLUE_STRING_ADLAM_CAPITAL_TOP 78 "𞤌 𞤅 𞤈 𞤏 𞤔 𞤚" 79 AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM 80 "𞤂 𞤖" 81 AF_BLUE_STRING_ADLAM_SMALL_TOP 82 "𞤬 𞤮 𞤻 𞤼 𞤾" 83 AF_BLUE_STRING_ADLAM_SMALL_BOTTOM 84 "𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀" 85 86 AF_BLUE_STRING_ARABIC_TOP 87 "ا إ ل ك ط ظ" 88 AF_BLUE_STRING_ARABIC_BOTTOM 89 "ت ث ط ظ ك" 90 // We don't necessarily have access to medial forms via Unicode in case 91 // Arabic presentational forms are missing. The only character that is 92 // guaranteed to have the same vertical position with joining (this is, 93 // non-isolated) forms is U+0640, ARABIC TATWEEL, which must join both 94 // round and flat curves. 95 AF_BLUE_STRING_ARABIC_JOIN 96 "ـ" 97 98 AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP 99 "Ա Մ Ւ Ս Բ Գ Դ Օ" 100 AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM 101 "Ւ Ո Դ Ճ Շ Ս Տ Օ" 102 AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER 103 "ե է ի մ վ ֆ ճ" 104 AF_BLUE_STRING_ARMENIAN_SMALL_TOP 105 "ա յ ւ ս գ շ ր օ" 106 AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM 107 "հ ո ճ ա ե ծ ս օ" 108 AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER 109 "բ ը ի լ ղ պ փ ց" 110 111 AF_BLUE_STRING_AVESTAN_TOP 112 "𐬀 𐬁 𐬐 𐬛" 113 AF_BLUE_STRING_AVESTAN_BOTTOM 114 "𐬀 𐬁" 115 116 AF_BLUE_STRING_BAMUM_TOP 117 "ꚧ ꚨ ꛛ ꛉ ꛁ ꛈ ꛫ ꛯ" 118 AF_BLUE_STRING_BAMUM_BOTTOM 119 "ꚭ ꚳ ꚶ ꛬ ꚢ ꚽ ꛯ ꛲" 120 121 AF_BLUE_STRING_BENGALI_BASE 122 "অ ড ত ন ব ভ ল ক" 123 AF_BLUE_STRING_BENGALI_TOP 124 "ই ট ঠ ি ী ৈ ৗ" 125 AF_BLUE_STRING_BENGALI_HEAD 126 "ও এ ড ত ন ব ল ক" 127 128 AF_BLUE_STRING_BUHID_TOP 129 "ᝐ ᝈ" 130 AF_BLUE_STRING_BUHID_LARGE 131 "ᝅ ᝊ ᝎ" 132 AF_BLUE_STRING_BUHID_SMALL 133 "ᝂ ᝃ ᝉ ᝌ" 134 AF_BLUE_STRING_BUHID_BOTTOM 135 "ᝀ ᝃ ᝆ ᝉ ᝋ ᝏ ᝑ" 136 137 AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP 138 "ᗜ ᖴ ᐁ ᒣ ᑫ ᑎ ᔑ ᗰ" 139 AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM 140 "ᗶ ᖵ ᒧ ᐃ ᑌ ᒍ ᔑ ᗢ" 141 AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP 142 "ᓓ ᓕ ᓀ ᓂ ᓄ ᕄ ᕆ ᘣ" 143 AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM 144 "ᕃ ᓂ ᓀ ᕂ ᓗ ᓚ ᕆ ᘣ" 145 AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP 146 "ᐪ ᙆ ᣘ ᐢ ᒾ ᣗ ᔆ" 147 AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM 148 "ᙆ ᗮ ᒻ ᐞ ᔆ ᒡ ᒢ ᓑ" 149 150 AF_BLUE_STRING_CARIAN_TOP 151 "𐊧 𐊫 𐊬 𐊭 𐊱 𐊺 𐊼 𐊿" 152 AF_BLUE_STRING_CARIAN_BOTTOM 153 "𐊣 𐊧 𐊷 𐋀 𐊫 𐊸 𐋉" 154 155 AF_BLUE_STRING_CHAKMA_TOP 156 "𑄃 𑄅 𑄉 𑄙 𑄗" 157 AF_BLUE_STRING_CHAKMA_BOTTOM 158 "𑄅 𑄛 𑄝 𑄗 𑄓" 159 AF_BLUE_STRING_CHAKMA_DESCENDER 160 "𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢" 161 162 AF_BLUE_STRING_CHEROKEE_CAPITAL 163 "Ꮖ Ꮋ Ꭼ Ꮓ Ꭴ Ꮳ Ꭶ Ꮥ" 164 AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER 165 "ꮒ ꮤ ꮶ ꭴ ꭾ ꮗ ꮝ ꮿ" 166 AF_BLUE_STRING_CHEROKEE_SMALL 167 "ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ" 168 AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER 169 "ᏸ ꮐ ꭹ ꭻ" 170 171 AF_BLUE_STRING_COPTIC_CAPITAL_TOP 172 "Ⲍ Ⲏ Ⲡ Ⳟ Ⲟ Ⲑ Ⲥ Ⳋ" 173 AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM 174 "Ⳑ Ⳙ Ⳟ Ⲏ Ⲟ Ⲑ Ⳝ Ⲱ" 175 AF_BLUE_STRING_COPTIC_SMALL_TOP 176 "ⲍ ⲏ ⲡ ⳟ ⲟ ⲑ ⲥ ⳋ" 177 AF_BLUE_STRING_COPTIC_SMALL_BOTTOM 178 "ⳑ ⳙ ⳟ ⲏ ⲟ ⲑ ⳝ Ⳓ" 179 180 AF_BLUE_STRING_CYPRIOT_TOP 181 "𐠍 𐠙 𐠳 𐠱 𐠅 𐠓 𐠣 𐠦" 182 AF_BLUE_STRING_CYPRIOT_BOTTOM 183 "𐠃 𐠊 𐠛 𐠣 𐠳 𐠵 𐠐" 184 AF_BLUE_STRING_CYPRIOT_SMALL 185 "𐠈 𐠏 𐠖" 186 187 AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP 188 "Б В Е П З О С Э" 189 AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM 190 "Б В Е Ш З О С Э" 191 AF_BLUE_STRING_CYRILLIC_SMALL 192 "х п н ш е з о с" 193 AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER 194 "р у ф" 195 196 AF_BLUE_STRING_DESERET_CAPITAL_TOP 197 "𐐂 𐐄 𐐋 𐐗 𐐑" 198 AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM 199 "𐐀 𐐂 𐐄 𐐗 𐐛" 200 AF_BLUE_STRING_DESERET_SMALL_TOP 201 "𐐪 𐐬 𐐳 𐐿 𐐹" 202 AF_BLUE_STRING_DESERET_SMALL_BOTTOM 203 "𐐨 𐐪 𐐬 𐐿 𐑃" 204 205 AF_BLUE_STRING_DEVANAGARI_BASE 206 "क म अ आ थ ध भ श" 207 AF_BLUE_STRING_DEVANAGARI_TOP 208 "ई ऐ ओ औ ि ी ो ौ" 209 // note that some fonts have extreme variation in the height of the 210 // round head elements; for this reason we also define the `base' 211 // blue zone, which must be always present 212 AF_BLUE_STRING_DEVANAGARI_HEAD 213 "क म अ आ थ ध भ श" 214 AF_BLUE_STRING_DEVANAGARI_BOTTOM 215 "ु ृ" 216 217 AF_BLUE_STRING_ETHIOPIC_TOP 218 "ሀ ሃ ዘ ፐ ማ በ ዋ ዐ" 219 AF_BLUE_STRING_ETHIOPIC_BOTTOM 220 "ለ ሐ በ ዘ ሀ ሪ ዐ ጨ" 221 222 AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP 223 "გ დ ე ვ თ ი ო ღ" 224 AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM 225 "ა ზ მ ს შ ძ ხ პ" 226 AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER 227 "ს ხ ქ ზ მ შ ჩ წ" 228 AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER 229 "ე ვ ჟ ტ უ ფ ქ ყ" 230 231 AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP 232 "Ⴑ Ⴇ Ⴙ Ⴜ Ⴄ Ⴅ Ⴓ Ⴚ" 233 AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM 234 "Ⴄ Ⴅ Ⴇ Ⴈ Ⴆ Ⴑ Ⴊ Ⴋ" 235 236 AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP 237 "ⴁ ⴗ ⴂ ⴄ ⴅ ⴇ ⴔ ⴖ" 238 AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM 239 "ⴈ ⴌ ⴖ ⴎ ⴃ ⴆ ⴋ ⴢ" 240 AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER 241 "ⴐ ⴑ ⴓ ⴕ ⴙ ⴛ ⴡ ⴣ" 242 AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER 243 "ⴄ ⴅ ⴔ ⴕ ⴁ ⴂ ⴘ ⴝ" 244 245 AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP 246 "Ⰵ Ⱄ Ⱚ Ⰴ Ⰲ Ⰺ Ⱛ Ⰻ" 247 AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM 248 "Ⰵ Ⰴ Ⰲ Ⱚ Ⱎ Ⱑ Ⰺ Ⱄ" 249 AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP 250 "ⰵ ⱄ ⱚ ⰴ ⰲ ⰺ ⱛ ⰻ" 251 AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM 252 "ⰵ ⰴ ⰲ ⱚ ⱎ ⱑ ⰺ ⱄ" 253 254 AF_BLUE_STRING_GOTHIC_TOP 255 "𐌲 𐌶 𐍀 𐍄 𐌴 𐍃 𐍈 𐌾" 256 AF_BLUE_STRING_GOTHIC_BOTTOM 257 "𐌶 𐌴 𐍃 𐍈" 258 259 AF_BLUE_STRING_GREEK_CAPITAL_TOP 260 "Γ Β Ε Ζ Θ Ο Ω" 261 AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM 262 "Β Δ Ζ Ξ Θ Ο" 263 AF_BLUE_STRING_GREEK_SMALL_BETA_TOP 264 "β θ δ ζ λ ξ" 265 AF_BLUE_STRING_GREEK_SMALL 266 "α ε ι ο π σ τ ω" 267 AF_BLUE_STRING_GREEK_SMALL_DESCENDER 268 "β γ η μ ρ φ χ ψ" 269 270 AF_BLUE_STRING_GUJARATI_TOP 271 "ત ન ઋ ઌ છ ટ ર ૦" 272 AF_BLUE_STRING_GUJARATI_BOTTOM 273 "ખ ગ ઘ ઞ ઇ ઈ ઠ જ" 274 AF_BLUE_STRING_GUJARATI_ASCENDER 275 "ઈ ઊ િ ી લી શ્ચિ જિ સી" 276 AF_BLUE_STRING_GUJARATI_DESCENDER 277 "ુ ૃ ૄ ખુ છૃ છૄ" 278 AF_BLUE_STRING_GUJARATI_DIGIT_TOP 279 "૦ ૧ ૨ ૩ ૭" 280 281 AF_BLUE_STRING_GURMUKHI_BASE 282 "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ" 283 AF_BLUE_STRING_GURMUKHI_HEAD 284 "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ" 285 AF_BLUE_STRING_GURMUKHI_TOP 286 "ਇ ਈ ਉ ਏ ਓ ੳ ਿ ੀ" 287 AF_BLUE_STRING_GURMUKHI_BOTTOM 288 "ਅ ਏ ਓ ਗ ਜ ਠ ਰ ਸ" 289 AF_BLUE_STRING_GURMUKHI_DIGIT_TOP 290 "੦ ੧ ੨ ੩ ੭" 291 292 AF_BLUE_STRING_HEBREW_TOP 293 "ב ד ה ח ך כ ם ס" 294 AF_BLUE_STRING_HEBREW_BOTTOM 295 "ב ט כ ם ס צ" 296 AF_BLUE_STRING_HEBREW_DESCENDER 297 "ק ך ן ף ץ" 298 299 AF_BLUE_STRING_KANNADA_TOP 300 "ಇ ಊ ಐ ಣ ಸಾ ನಾ ದಾ ರಾ" 301 AF_BLUE_STRING_KANNADA_BOTTOM 302 "ಅ ಉ ಎ ಲ ೦ ೨ ೬ ೭" 303 304 AF_BLUE_STRING_KAYAH_LI_TOP 305 "꤅ ꤏ ꤁ ꤋ ꤀ ꤍ" 306 AF_BLUE_STRING_KAYAH_LI_BOTTOM 307 "꤈ ꤘ ꤀ ꤍ ꤢ" 308 AF_BLUE_STRING_KAYAH_LI_ASCENDER 309 "ꤖ ꤡ" 310 AF_BLUE_STRING_KAYAH_LI_DESCENDER 311 "ꤑ ꤜ ꤞ" 312 AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER 313 "ꤑ꤬ ꤜ꤭ ꤔ꤬" 314 315 AF_BLUE_STRING_KHMER_TOP 316 "ខ ទ ន ឧ ឩ ា" 317 AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP 318 "ក្ក ក្ខ ក្គ ក្ថ" 319 AF_BLUE_STRING_KHMER_BOTTOM 320 "ខ ឃ ច ឋ ប ម យ ឲ" 321 AF_BLUE_STRING_KHMER_DESCENDER 322 "ត្រ រៀ ឲ្យ អឿ" 323 AF_BLUE_STRING_KHMER_LARGE_DESCENDER 324 "ន្ត្រៃ ង្ខ្យ ក្បៀ ច្រៀ ន្តឿ ល្បឿ" 325 326 AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP 327 "᧠ ᧡" 328 AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM 329 "᧶ ᧹" 330 331 AF_BLUE_STRING_LAO_TOP 332 "າ ດ ອ ມ ລ ວ ຣ ງ" 333 AF_BLUE_STRING_LAO_BOTTOM 334 "າ ອ ບ ຍ ຣ ຮ ວ ຢ" 335 AF_BLUE_STRING_LAO_ASCENDER 336 "ປ ຢ ຟ ຝ" 337 AF_BLUE_STRING_LAO_LARGE_ASCENDER 338 "ໂ ໄ ໃ" 339 AF_BLUE_STRING_LAO_DESCENDER 340 "ງ ຊ ຖ ຽ ໆ ຯ" 341 342 AF_BLUE_STRING_LATIN_CAPITAL_TOP 343 "T H E Z O C Q S" 344 AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM 345 "H E Z L O C U S" 346 AF_BLUE_STRING_LATIN_SMALL_F_TOP 347 "f i j k d b h" 348 AF_BLUE_STRING_LATIN_SMALL_TOP 349 "u v x z o e s c" 350 AF_BLUE_STRING_LATIN_SMALL_BOTTOM 351 "n r x z o e s c" 352 AF_BLUE_STRING_LATIN_SMALL_DESCENDER 353 "p q g j y" 354 355 // we assume that both the subscript and superscript ranges 356 // don't contain oldstyle digits (actually, most fonts probably 357 // have digits only in those ranges) 358 AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP 359 "₀ ₃ ₅ ₇ ₈" 360 AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM 361 "₀ ₁ ₂ ₃ ₈" 362 AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP 363 "ᵢ ⱼ ₕ ₖ ₗ" 364 AF_BLUE_STRING_LATIN_SUBS_SMALL 365 "ₐ ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ" 366 AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER 367 "ᵦ ᵧ ᵨ ᵩ ₚ" 368 369 AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP 370 "⁰ ³ ⁵ ⁷ ᵀ ᴴ ᴱ ᴼ" 371 AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM 372 "⁰ ¹ ² ³ ᴱ ᴸ ᴼ ᵁ" 373 AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP 374 "ᵇ ᵈ ᵏ ʰ ʲ ᶠ ⁱ" 375 AF_BLUE_STRING_LATIN_SUPS_SMALL 376 "ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ" 377 AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER 378 "ᵖ ʸ ᵍ" 379 380 AF_BLUE_STRING_LISU_TOP 381 "ꓡ ꓧ ꓱ ꓶ ꓩ ꓚ ꓵ ꓳ" 382 AF_BLUE_STRING_LISU_BOTTOM 383 "ꓕ ꓜ ꓞ ꓡ ꓛ ꓢ ꓳ ꓴ" 384 385 AF_BLUE_STRING_MALAYALAM_TOP 386 "ഒ ട ഠ റ ച പ ച്ച പ്പ" 387 AF_BLUE_STRING_MALAYALAM_BOTTOM 388 "ട ഠ ധ ശ ഘ ച ഥ ല" 389 390 AF_BLUE_STRING_MYANMAR_TOP 391 "ခ ဂ င ဒ ဝ ၥ ၊ ။" 392 AF_BLUE_STRING_MYANMAR_BOTTOM 393 "င ဎ ဒ ပ ဗ ဝ ၊ ။" 394 AF_BLUE_STRING_MYANMAR_ASCENDER 395 "ဩ ြ ၍ ၏ ၆ ါ ိ" 396 AF_BLUE_STRING_MYANMAR_DESCENDER 397 "ဉ ည ဥ ဩ ဨ ၂ ၅ ၉" 398 399 AF_BLUE_STRING_NKO_TOP 400 "ߐ ߉ ߒ ߟ ߖ ߜ ߠ ߥ" 401 AF_BLUE_STRING_NKO_BOTTOM 402 "߀ ߘ ߡ ߠ ߥ" 403 AF_BLUE_STRING_NKO_SMALL_TOP 404 "ߏ ߛ ߋ" 405 AF_BLUE_STRING_NKO_SMALL_BOTTOM 406 "ߎ ߏ ߛ ߋ" 407 408 AF_BLUE_STRING_OL_CHIKI 409 "ᱛ ᱜ ᱝ ᱡ ᱢ ᱥ" 410 411 AF_BLUE_STRING_OLD_TURKIC_TOP 412 "𐰗 𐰘 𐰧" 413 AF_BLUE_STRING_OLD_TURKIC_BOTTOM 414 "𐰉 𐰗 𐰦 𐰧" 415 416 AF_BLUE_STRING_OSAGE_CAPITAL_TOP 417 "𐒾 𐓍 𐓒 𐓓 𐒻 𐓂 𐒵 𐓆" 418 AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM 419 "𐒰 𐓍 𐓂 𐒿 𐓎 𐒹" 420 AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER 421 "𐒼 𐒽 𐒾" 422 AF_BLUE_STRING_OSAGE_SMALL_TOP 423 "𐓵 𐓶 𐓺 𐓻 𐓝 𐓣 𐓪 𐓮" 424 AF_BLUE_STRING_OSAGE_SMALL_BOTTOM 425 "𐓘 𐓚 𐓣 𐓵 𐓡 𐓧 𐓪 𐓶" 426 AF_BLUE_STRING_OSAGE_SMALL_ASCENDER 427 "𐓤 𐓦 𐓸 𐓹 𐓛" 428 AF_BLUE_STRING_OSAGE_SMALL_DESCENDER 429 "𐓤 𐓥 𐓦" 430 431 AF_BLUE_STRING_OSMANYA_TOP 432 "𐒆 𐒉 𐒐 𐒒 𐒘 𐒛 𐒠 𐒣" 433 AF_BLUE_STRING_OSMANYA_BOTTOM 434 "𐒀 𐒂 𐒆 𐒈 𐒊 𐒒 𐒠 𐒩" 435 436 AF_BLUE_STRING_SAURASHTRA_TOP 437 "ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ" 438 AF_BLUE_STRING_SAURASHTRA_BOTTOM 439 "ꢂ ꢨ ꢺ ꢤ ꢎ" 440 441 AF_BLUE_STRING_SHAVIAN_TOP 442 "𐑕 𐑙" 443 AF_BLUE_STRING_SHAVIAN_BOTTOM 444 "𐑔 𐑖 𐑗 𐑹 𐑻" 445 AF_BLUE_STRING_SHAVIAN_DESCENDER 446 "𐑟 𐑣" 447 AF_BLUE_STRING_SHAVIAN_SMALL_TOP 448 "𐑱 𐑲 𐑳 𐑴 𐑸 𐑺 𐑼" 449 AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM 450 "𐑴 𐑻 𐑹" 451 452 AF_BLUE_STRING_SINHALA_TOP 453 "ඉ ක ඝ ඳ ප ය ල ෆ" 454 AF_BLUE_STRING_SINHALA_BOTTOM 455 "එ ඔ ඝ ජ ට ථ ධ ර" 456 AF_BLUE_STRING_SINHALA_DESCENDER 457 "ද ඳ උ ල තූ තු බු දු" 458 459 AF_BLUE_STRING_SUNDANESE_TOP 460 "ᮋ ᮞ ᮮ ᮽ ᮰ ᮈ" 461 AF_BLUE_STRING_SUNDANESE_BOTTOM 462 "ᮄ ᮔ ᮕ ᮗ ᮰ ᮆ ᮈ ᮉ" 463 AF_BLUE_STRING_SUNDANESE_DESCENDER 464 "ᮼ ᳄" 465 466 AF_BLUE_STRING_TAI_VIET_TOP 467 "ꪆ ꪔ ꪒ ꪖ ꪫ" 468 AF_BLUE_STRING_TAI_VIET_BOTTOM 469 "ꪉ ꪫ ꪮ" 470 471 AF_BLUE_STRING_TAMIL_TOP 472 "உ ஒ ஓ ற ஈ க ங ச" 473 AF_BLUE_STRING_TAMIL_BOTTOM 474 "க ச ல ஶ உ ங ட ப" 475 476 AF_BLUE_STRING_TELUGU_TOP 477 "ఇ ఌ ఙ ఞ ణ ఱ ౯" 478 AF_BLUE_STRING_TELUGU_BOTTOM 479 "అ క చ ర ఽ ౨ ౬" 480 481 AF_BLUE_STRING_THAI_TOP 482 "บ เ แ อ ก า" 483 AF_BLUE_STRING_THAI_BOTTOM 484 "บ ป ษ ฯ อ ย ฮ" 485 AF_BLUE_STRING_THAI_ASCENDER 486 "ป ฝ ฟ" 487 AF_BLUE_STRING_THAI_LARGE_ASCENDER 488 "โ ใ ไ" 489 AF_BLUE_STRING_THAI_DESCENDER 490 "ฎ ฏ ฤ ฦ" 491 AF_BLUE_STRING_THAI_LARGE_DESCENDER 492 "ญ ฐ" 493 AF_BLUE_STRING_THAI_DIGIT_TOP 494 "๐ ๑ ๓" 495 496 AF_BLUE_STRING_TIFINAGH 497 "ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ" 498 499 AF_BLUE_STRING_VAI_TOP 500 "ꗍ ꘖ ꘙ ꘜ ꖜ ꖝ ꔅ ꕢ" 501 AF_BLUE_STRING_VAI_BOTTOM 502 "ꗍ ꘖ ꘙ ꗞ ꔅ ꕢ ꖜ ꔆ" 503 504 505 #ifdef AF_CONFIG_OPTION_CJK 506 507 AF_BLUE_STRING_CJK_TOP 508 "他 们 你 來 們 到 和 地" 509 " 对 對 就 席 我 时 時 會" 510 " 来 為 能 舰 說 说 这 這" 511 " 齊 |" 512 " 军 同 已 愿 既 星 是 景" 513 " 民 照 现 現 理 用 置 要" 514 " 軍 那 配 里 開 雷 露 面" 515 " 顾" 516 AF_BLUE_STRING_CJK_BOTTOM 517 "个 为 人 他 以 们 你 來" 518 " 個 們 到 和 大 对 對 就" 519 " 我 时 時 有 来 為 要 說" 520 " 说 |" 521 " 主 些 因 它 想 意 理 生" 522 " 當 看 着 置 者 自 著 裡" 523 " 过 还 进 進 過 道 還 里" 524 " 面" 525 526 #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT 527 528 AF_BLUE_STRING_CJK_LEFT 529 " 些 们 你 來 們 到 和 地" 530 " 她 将 將 就 年 得 情 最" 531 " 样 樣 理 能 說 说 这 這" 532 " 通 |" 533 " 即 吗 吧 听 呢 品 响 嗎" 534 " 师 師 收 断 斷 明 眼 間" 535 " 间 际 陈 限 除 陳 随 際" 536 " 隨" 537 AF_BLUE_STRING_CJK_RIGHT 538 "事 前 學 将 將 情 想 或" 539 " 政 斯 新 样 樣 民 沒 没" 540 " 然 特 现 現 球 第 經 谁" 541 " 起 |" 542 " 例 別 别 制 动 動 吗 嗎" 543 " 增 指 明 朝 期 构 物 确" 544 " 种 調 调 費 费 那 都 間" 545 " 间" 546 547 #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */ 548 549 #endif /* AF_CONFIG_OPTION_CJK */ 550 551 552 // The blue zone stringsets, as used in the script styles, cf. `afstyles.h'. 553 // 554 // The AF_BLUE_PROPERTY_XXX flags are defined in `afblue.h'; here some 555 // explanations. 556 // 557 // A blue zone in general is defined by a reference and an overshoot line. 558 // During the hinting process, all coordinate values between those two lines 559 // are set equal to the reference value, provided that the blue zone is not 560 // wider than 0.75 pixels (otherwise the blue zone gets ignored). All 561 // entries must have `AF_BLUE_STRING_MAX' as the final line. 562 // 563 // During the glyph analysis, edges are sorted from bottom to top, and then 564 // sequentially checked, edge by edge, against the blue zones in the order 565 // given below. 566 // 567 // 568 // latin auto-hinter 569 // ----------------- 570 // 571 // Characters in a blue string are automatically classified as having a flat 572 // (reference) or a round (overshoot) extremum. The blue zone is then set 573 // up by the mean values of all flat extrema and all round extrema, 574 // respectively. Only horizontal blue zones (i.e., adjusting vertical 575 // coordinate values) are supported. 576 // 577 // Some scripts like Khmer need character composition to get all necessary 578 // blue zones, since Unicode only provides an abstract data model that 579 // doesn't represent all possible glyph shapes. For such character 580 // clusters, the HarfBuzz library is used to convert them into the 581 // corresponding glyphs. The largest glyph element (where `largest' can be 582 // either `largest ascender' or `largest descender') then defines the 583 // corresponding flat or round extremum. 584 // 585 // For the latin auto-hinter, the overshoot should be larger than the 586 // reference for top zones, and vice versa for bottom zones. 587 // 588 // LATIN_TOP 589 // Take the maximum flat and round coordinate values of the blue string 590 // characters for computing the blue zone's reference and overshoot 591 // values. 592 // 593 // If not set, take the minimum values. 594 // 595 // Mutually exclusive with `LATIN_SUB_TOP'. 596 // 597 // LATIN_SUB_TOP 598 // For all glyphs of a character cluster, compute the maximum flat 599 // and round coordinate values of each component, then take the 600 // smallest of the maximum values. The idea is to get the top of 601 // subscript glyphs, as used in Khmer, for example. Note that 602 // this mechanism doesn't work for ordinary ligatures. 603 // 604 // This flags indicates a secondary blue zone: It gets removed if 605 // there is a non-LATIN_SUB_TOP blue zone at the same coordinate 606 // value (after scaling). 607 // 608 // Mutually exclusive with `LATIN_TOP'. 609 // 610 // LATIN_NEUTRAL 611 // Ignore round extrema and define the blue zone with flat values only. 612 // Both top and bottom of contours can match. This is useful for 613 // scripts like Devanagari where vowel signs attach to the base 614 // character and are implemented as components of composite glyphs. 615 // 616 // If not set, both round and flat extrema are taken into account. 617 // Additionally, only the top or the bottom of a contour can match, 618 // depending on the LATIN_TOP flag. 619 // 620 // Neutral blue zones should always follow non-neutral blue zones. 621 // 622 // LATIN_X_HEIGHT 623 // Scale all glyphs vertically from the corresponding script to make the 624 // reference line of this blue zone align on the grid. The scaling 625 // takes place before all other blue zones get aligned to the grid. 626 // Only one blue character string of a script style can have this flag. 627 // 628 // LATIN_LONG 629 // Apply an additional constraint for blue zone values: Don't 630 // necessarily use the extremum as-is but a segment of the topmost (or 631 // bottommost) contour that is longer than a heuristic threshold, and 632 // which is not too far away vertically from the real extremum. This 633 // ensures that small bumps in the outline are ignored (for example, the 634 // `vertical serifs' found in many Hebrew glyph designs). 635 // 636 // The segment must be at least EM/25 font units long, and the distance 637 // to the extremum must be smaller than EM/4. 638 // 639 // 640 // cjk auto-hinter 641 // --------------- 642 // 643 // Characters in a blue string are *not* automatically classified. Instead, 644 // first come the characters used for the overshoot value, then the 645 // character `|', then the characters used for the reference value 646 // (everything separated by space characters). The blue zone is then set up 647 // by the mean values of all reference values and all overshoot values, 648 // respectively. Both horizontal and vertical blue zones (i.e., adjusting 649 // vertical and horizontal coordinate values, respectively) are supported. 650 // 651 // For the cjk auto-hinter, the overshoot should be smaller than the 652 // reference for top zones, and vice versa for bottom zones. 653 // 654 // CJK_TOP 655 // Take the maximum flat and round coordinate values of the blue string 656 // characters. If not set, take the minimum values. 657 // 658 // CJK_RIGHT 659 // A synonym for CJK_TOP. If CJK_HORIZ is set, this flag indicates the 660 // right blue zone, taking horizontal maximum values. 661 // 662 // CJK_HORIZ 663 // Define a blue zone for horizontal hinting (i.e., vertical blue 664 // zones). If not set, this is a blue zone for vertical hinting. 665 666 667 AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: 668 669 AF_BLUE_STRINGSET_ADLM 670 { AF_BLUE_STRING_ADLAM_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 671 { AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0 } 672 { AF_BLUE_STRING_ADLAM_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 673 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 674 { AF_BLUE_STRING_ADLAM_SMALL_BOTTOM, 0 } 675 { AF_BLUE_STRING_MAX, 0 } 676 677 AF_BLUE_STRINGSET_ARAB 678 { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 679 { AF_BLUE_STRING_ARABIC_BOTTOM, 0 } 680 { AF_BLUE_STRING_ARABIC_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL } 681 { AF_BLUE_STRING_MAX, 0 } 682 683 AF_BLUE_STRINGSET_ARMN 684 { AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 685 { AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM, 0 } 686 { AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 687 { AF_BLUE_STRING_ARMENIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 688 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 689 { AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM, 0 } 690 { AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0 } 691 { AF_BLUE_STRING_MAX, 0 } 692 693 AF_BLUE_STRINGSET_AVST 694 { AF_BLUE_STRING_AVESTAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 695 { AF_BLUE_STRING_AVESTAN_BOTTOM, 0 } 696 { AF_BLUE_STRING_MAX, 0 } 697 698 AF_BLUE_STRINGSET_BAMU 699 { AF_BLUE_STRING_BAMUM_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 700 { AF_BLUE_STRING_BAMUM_BOTTOM, 0 } 701 { AF_BLUE_STRING_MAX, 0 } 702 703 AF_BLUE_STRINGSET_BENG 704 { AF_BLUE_STRING_BENGALI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 705 { AF_BLUE_STRING_BENGALI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP } 706 { AF_BLUE_STRING_BENGALI_BASE, AF_BLUE_PROPERTY_LATIN_TOP | 707 AF_BLUE_PROPERTY_LATIN_NEUTRAL | 708 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 709 { AF_BLUE_STRING_BENGALI_BASE, 0 } 710 { AF_BLUE_STRING_MAX, 0 } 711 712 AF_BLUE_STRINGSET_BUHD 713 { AF_BLUE_STRING_BUHID_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 714 { AF_BLUE_STRING_BUHID_LARGE, AF_BLUE_PROPERTY_LATIN_TOP } 715 { AF_BLUE_STRING_BUHID_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 716 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 717 { AF_BLUE_STRING_BUHID_BOTTOM, 0 } 718 { AF_BLUE_STRING_MAX, 0 } 719 720 AF_BLUE_STRINGSET_CAKM 721 { AF_BLUE_STRING_CHAKMA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 722 { AF_BLUE_STRING_CHAKMA_BOTTOM, 0 } 723 { AF_BLUE_STRING_CHAKMA_DESCENDER, 0 } 724 { AF_BLUE_STRING_MAX, 0 } 725 726 AF_BLUE_STRINGSET_CANS 727 { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 728 { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 } 729 { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 730 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 731 { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 } 732 { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 733 { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 } 734 { AF_BLUE_STRING_MAX, 0 } 735 736 AF_BLUE_STRINGSET_CARI 737 { AF_BLUE_STRING_CARIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 738 { AF_BLUE_STRING_CARIAN_BOTTOM, 0 } 739 { AF_BLUE_STRING_MAX, 0 } 740 741 AF_BLUE_STRINGSET_CHER 742 { AF_BLUE_STRING_CHEROKEE_CAPITAL, AF_BLUE_PROPERTY_LATIN_TOP } 743 { AF_BLUE_STRING_CHEROKEE_CAPITAL, 0 } 744 { AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 745 { AF_BLUE_STRING_CHEROKEE_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 746 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 747 { AF_BLUE_STRING_CHEROKEE_SMALL, 0 } 748 { AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0 } 749 { AF_BLUE_STRING_MAX, 0 } 750 751 AF_BLUE_STRINGSET_COPT 752 { AF_BLUE_STRING_COPTIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 753 { AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0 } 754 { AF_BLUE_STRING_COPTIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 755 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 756 { AF_BLUE_STRING_COPTIC_SMALL_BOTTOM, 0 } 757 { AF_BLUE_STRING_MAX, 0 } 758 759 AF_BLUE_STRINGSET_CPRT 760 { AF_BLUE_STRING_CYPRIOT_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 761 { AF_BLUE_STRING_CYPRIOT_BOTTOM, 0 } 762 { AF_BLUE_STRING_CYPRIOT_SMALL, AF_BLUE_PROPERTY_LATIN_TOP } 763 { AF_BLUE_STRING_CYPRIOT_SMALL, 0 } 764 { AF_BLUE_STRING_MAX, 0 } 765 766 AF_BLUE_STRINGSET_CYRL 767 { AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 768 { AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 } 769 { AF_BLUE_STRING_CYRILLIC_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 770 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 771 { AF_BLUE_STRING_CYRILLIC_SMALL, 0 } 772 { AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0 } 773 { AF_BLUE_STRING_MAX, 0 } 774 775 AF_BLUE_STRINGSET_DEVA 776 { AF_BLUE_STRING_DEVANAGARI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 777 { AF_BLUE_STRING_DEVANAGARI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP } 778 { AF_BLUE_STRING_DEVANAGARI_BASE, AF_BLUE_PROPERTY_LATIN_TOP | 779 AF_BLUE_PROPERTY_LATIN_NEUTRAL | 780 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 781 { AF_BLUE_STRING_DEVANAGARI_BASE, 0 } 782 { AF_BLUE_STRING_DEVANAGARI_BOTTOM, 0 } 783 { AF_BLUE_STRING_MAX, 0 } 784 785 AF_BLUE_STRINGSET_DSRT 786 { AF_BLUE_STRING_DESERET_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 787 { AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0 } 788 { AF_BLUE_STRING_DESERET_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 789 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 790 { AF_BLUE_STRING_DESERET_SMALL_BOTTOM, 0 } 791 { AF_BLUE_STRING_MAX, 0 } 792 793 AF_BLUE_STRINGSET_ETHI 794 { AF_BLUE_STRING_ETHIOPIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 795 { AF_BLUE_STRING_ETHIOPIC_BOTTOM, 0 } 796 { AF_BLUE_STRING_MAX, 0 } 797 798 // blue zones for Mtavruli are missing (not yet defined in Unicode) 799 AF_BLUE_STRINGSET_GEOR 800 { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 801 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 802 { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM, 0 } 803 { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 804 { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0 } 805 { AF_BLUE_STRING_MAX, 0 } 806 807 AF_BLUE_STRINGSET_GEOK 808 { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 809 { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0 } 810 { AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 811 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 812 { AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM, 0 } 813 { AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 814 { AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0 } 815 { AF_BLUE_STRING_MAX, 0 } 816 817 AF_BLUE_STRINGSET_GLAG 818 { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 819 { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0 } 820 { AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 821 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 822 { AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM, 0 } 823 { AF_BLUE_STRING_MAX, 0 } 824 825 AF_BLUE_STRINGSET_GOTH 826 { AF_BLUE_STRING_GOTHIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 827 { AF_BLUE_STRING_GOTHIC_BOTTOM, 0 } 828 { AF_BLUE_STRING_MAX, 0 } 829 830 AF_BLUE_STRINGSET_GREK 831 { AF_BLUE_STRING_GREEK_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 832 { AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0 } 833 { AF_BLUE_STRING_GREEK_SMALL_BETA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 834 { AF_BLUE_STRING_GREEK_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 835 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 836 { AF_BLUE_STRING_GREEK_SMALL, 0 } 837 { AF_BLUE_STRING_GREEK_SMALL_DESCENDER, 0 } 838 { AF_BLUE_STRING_MAX, 0 } 839 840 AF_BLUE_STRINGSET_GUJR 841 { AF_BLUE_STRING_GUJARATI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 842 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 843 { AF_BLUE_STRING_GUJARATI_BOTTOM, 0 } 844 { AF_BLUE_STRING_GUJARATI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 845 { AF_BLUE_STRING_GUJARATI_DESCENDER, 0 } 846 { AF_BLUE_STRING_GUJARATI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 847 { AF_BLUE_STRING_MAX, 0 } 848 849 AF_BLUE_STRINGSET_GURU 850 { AF_BLUE_STRING_GURMUKHI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 851 { AF_BLUE_STRING_GURMUKHI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP } 852 { AF_BLUE_STRING_GURMUKHI_BASE, AF_BLUE_PROPERTY_LATIN_TOP | 853 AF_BLUE_PROPERTY_LATIN_NEUTRAL | 854 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 855 { AF_BLUE_STRING_GURMUKHI_BOTTOM, 0 } 856 { AF_BLUE_STRING_GURMUKHI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 857 { AF_BLUE_STRING_MAX, 0 } 858 859 AF_BLUE_STRINGSET_HEBR 860 { AF_BLUE_STRING_HEBREW_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 861 AF_BLUE_PROPERTY_LATIN_LONG } 862 { AF_BLUE_STRING_HEBREW_BOTTOM, 0 } 863 { AF_BLUE_STRING_HEBREW_DESCENDER, 0 } 864 { AF_BLUE_STRING_MAX, 0 } 865 866 AF_BLUE_STRINGSET_KALI 867 { AF_BLUE_STRING_KAYAH_LI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 868 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 869 { AF_BLUE_STRING_KAYAH_LI_BOTTOM, 0 } 870 { AF_BLUE_STRING_KAYAH_LI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 871 { AF_BLUE_STRING_KAYAH_LI_DESCENDER, 0 } 872 { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0 } 873 { AF_BLUE_STRING_MAX, 0 } 874 875 AF_BLUE_STRINGSET_KHMR 876 { AF_BLUE_STRING_KHMER_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 877 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 878 { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP, AF_BLUE_PROPERTY_LATIN_SUB_TOP } 879 { AF_BLUE_STRING_KHMER_BOTTOM, 0 } 880 { AF_BLUE_STRING_KHMER_DESCENDER, 0 } 881 { AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0 } 882 { AF_BLUE_STRING_MAX, 0 } 883 884 AF_BLUE_STRINGSET_KHMS 885 { AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 886 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 887 { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 } 888 { AF_BLUE_STRING_MAX, 0 } 889 890 AF_BLUE_STRINGSET_KNDA 891 { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 892 { AF_BLUE_STRING_KANNADA_BOTTOM, 0 } 893 { AF_BLUE_STRING_MAX, 0 } 894 895 AF_BLUE_STRINGSET_LAO 896 { AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 897 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 898 { AF_BLUE_STRING_LAO_BOTTOM, 0 } 899 { AF_BLUE_STRING_LAO_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 900 { AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 901 { AF_BLUE_STRING_LAO_DESCENDER, 0 } 902 { AF_BLUE_STRING_MAX, 0 } 903 904 AF_BLUE_STRINGSET_LATN 905 { AF_BLUE_STRING_LATIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 906 { AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM, 0 } 907 { AF_BLUE_STRING_LATIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 908 { AF_BLUE_STRING_LATIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 909 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 910 { AF_BLUE_STRING_LATIN_SMALL_BOTTOM, 0 } 911 { AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 0 } 912 { AF_BLUE_STRING_MAX, 0 } 913 914 AF_BLUE_STRINGSET_LATB 915 { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 916 { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM, 0 } 917 { AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 918 { AF_BLUE_STRING_LATIN_SUBS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 919 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 920 { AF_BLUE_STRING_LATIN_SUBS_SMALL, 0 } 921 { AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0 } 922 { AF_BLUE_STRING_MAX, 0 } 923 924 AF_BLUE_STRINGSET_LATP 925 { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 926 { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM, 0 } 927 { AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 928 { AF_BLUE_STRING_LATIN_SUPS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 929 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 930 { AF_BLUE_STRING_LATIN_SUPS_SMALL, 0 } 931 { AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0 } 932 { AF_BLUE_STRING_MAX, 0 } 933 934 AF_BLUE_STRINGSET_LISU 935 { AF_BLUE_STRING_LISU_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 936 { AF_BLUE_STRING_LISU_BOTTOM, 0 } 937 { AF_BLUE_STRING_MAX, 0 } 938 939 AF_BLUE_STRINGSET_MLYM 940 { AF_BLUE_STRING_MALAYALAM_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 941 { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 } 942 { AF_BLUE_STRING_MAX, 0 } 943 944 AF_BLUE_STRINGSET_MYMR 945 { AF_BLUE_STRING_MYANMAR_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 946 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 947 { AF_BLUE_STRING_MYANMAR_BOTTOM, 0 } 948 { AF_BLUE_STRING_MYANMAR_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 949 { AF_BLUE_STRING_MYANMAR_DESCENDER, 0 } 950 { AF_BLUE_STRING_MAX, 0 } 951 952 AF_BLUE_STRINGSET_NKOO 953 { AF_BLUE_STRING_NKO_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 954 { AF_BLUE_STRING_NKO_BOTTOM, 0 } 955 { AF_BLUE_STRING_NKO_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 956 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 957 { AF_BLUE_STRING_NKO_SMALL_BOTTOM, 0 } 958 { AF_BLUE_STRING_MAX, 0 } 959 960 AF_BLUE_STRINGSET_NONE 961 { AF_BLUE_STRING_MAX, 0 } 962 963 AF_BLUE_STRINGSET_OLCK 964 { AF_BLUE_STRING_OL_CHIKI, AF_BLUE_PROPERTY_LATIN_TOP } 965 { AF_BLUE_STRING_OL_CHIKI, 0 } 966 { AF_BLUE_STRING_MAX, 0 } 967 968 AF_BLUE_STRINGSET_ORKH 969 { AF_BLUE_STRING_OLD_TURKIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 970 { AF_BLUE_STRING_OLD_TURKIC_BOTTOM, 0 } 971 { AF_BLUE_STRING_MAX, 0 } 972 973 AF_BLUE_STRINGSET_OSGE 974 { AF_BLUE_STRING_OSAGE_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 975 { AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM, 0 } 976 { AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0 } 977 { AF_BLUE_STRING_OSAGE_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 978 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 979 { AF_BLUE_STRING_OSAGE_SMALL_BOTTOM, 0 } 980 { AF_BLUE_STRING_OSAGE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 981 { AF_BLUE_STRING_OSAGE_SMALL_DESCENDER, 0 } 982 { AF_BLUE_STRING_MAX, 0 } 983 984 AF_BLUE_STRINGSET_OSMA 985 { AF_BLUE_STRING_OSMANYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 986 { AF_BLUE_STRING_OSMANYA_BOTTOM, 0 } 987 { AF_BLUE_STRING_MAX, 0 } 988 989 AF_BLUE_STRINGSET_SAUR 990 { AF_BLUE_STRING_SAURASHTRA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 991 { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0 } 992 { AF_BLUE_STRING_MAX, 0 } 993 994 AF_BLUE_STRINGSET_SHAW 995 { AF_BLUE_STRING_SHAVIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 996 { AF_BLUE_STRING_SHAVIAN_BOTTOM, 0 } 997 { AF_BLUE_STRING_SHAVIAN_DESCENDER, 0 } 998 { AF_BLUE_STRING_SHAVIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 999 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 1000 { AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0 } 1001 { AF_BLUE_STRING_MAX, 0 } 1002 1003 AF_BLUE_STRINGSET_SINH 1004 { AF_BLUE_STRING_SINHALA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1005 { AF_BLUE_STRING_SINHALA_BOTTOM, 0 } 1006 { AF_BLUE_STRING_SINHALA_DESCENDER, 0 } 1007 { AF_BLUE_STRING_MAX, 0 } 1008 1009 AF_BLUE_STRINGSET_SUND 1010 { AF_BLUE_STRING_SUNDANESE_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1011 { AF_BLUE_STRING_SUNDANESE_BOTTOM, 0 } 1012 { AF_BLUE_STRING_SUNDANESE_DESCENDER, 0 } 1013 { AF_BLUE_STRING_MAX, 0 } 1014 1015 AF_BLUE_STRINGSET_TAML 1016 { AF_BLUE_STRING_TAMIL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1017 { AF_BLUE_STRING_TAMIL_BOTTOM, 0 } 1018 { AF_BLUE_STRING_MAX, 0 } 1019 1020 AF_BLUE_STRINGSET_TAVT 1021 { AF_BLUE_STRING_TAI_VIET_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1022 { AF_BLUE_STRING_TAI_VIET_BOTTOM, 0 } 1023 { AF_BLUE_STRING_MAX, 0 } 1024 1025 AF_BLUE_STRINGSET_TELU 1026 { AF_BLUE_STRING_TELUGU_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1027 { AF_BLUE_STRING_TELUGU_BOTTOM, 0 } 1028 { AF_BLUE_STRING_MAX, 0 } 1029 1030 AF_BLUE_STRINGSET_TFNG 1031 { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP } 1032 { AF_BLUE_STRING_TIFINAGH, 0 } 1033 { AF_BLUE_STRING_MAX, 0 } 1034 1035 AF_BLUE_STRINGSET_THAI 1036 { AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 1037 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 1038 { AF_BLUE_STRING_THAI_BOTTOM, 0 } 1039 { AF_BLUE_STRING_THAI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 1040 { AF_BLUE_STRING_THAI_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 1041 { AF_BLUE_STRING_THAI_DESCENDER, 0 } 1042 { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0 } 1043 { AF_BLUE_STRING_THAI_DIGIT_TOP, 0 } 1044 { AF_BLUE_STRING_MAX, 0 } 1045 1046 AF_BLUE_STRINGSET_VAII 1047 { AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1048 { AF_BLUE_STRING_VAI_BOTTOM, 0 } 1049 { AF_BLUE_STRING_MAX, 0 } 1050 1051 #ifdef AF_CONFIG_OPTION_CJK 1052 1053 AF_BLUE_STRINGSET_HANI 1054 { AF_BLUE_STRING_CJK_TOP, AF_BLUE_PROPERTY_CJK_TOP } 1055 { AF_BLUE_STRING_CJK_BOTTOM, 0 } 1056 #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT 1057 { AF_BLUE_STRING_CJK_LEFT, AF_BLUE_PROPERTY_CJK_HORIZ } 1058 { AF_BLUE_STRING_CJK_RIGHT, AF_BLUE_PROPERTY_CJK_HORIZ | 1059 AF_BLUE_PROPERTY_CJK_RIGHT } 1060 #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */ 1061 { AF_BLUE_STRING_MAX, 0 } 1062 1063 #endif /* AF_CONFIG_OPTION_CJK */ 1064 1065 1066 // END