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_GEORGIAN_MTAVRULI_TOP 246 " " 247 AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM 248 " " 249 250 AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP 251 " " 252 AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM 253 " " 254 AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP 255 " " 256 AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM 257 " " 258 259 AF_BLUE_STRING_GOTHIC_TOP 260 " " 261 AF_BLUE_STRING_GOTHIC_BOTTOM 262 " " 263 264 AF_BLUE_STRING_GREEK_CAPITAL_TOP 265 " " 266 AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM 267 " " 268 AF_BLUE_STRING_GREEK_SMALL_BETA_TOP 269 " " 270 AF_BLUE_STRING_GREEK_SMALL 271 " " 272 AF_BLUE_STRING_GREEK_SMALL_DESCENDER 273 " " 274 275 AF_BLUE_STRING_GUJARATI_TOP 276 " " 277 AF_BLUE_STRING_GUJARATI_BOTTOM 278 " " 279 AF_BLUE_STRING_GUJARATI_ASCENDER 280 " " 281 AF_BLUE_STRING_GUJARATI_DESCENDER 282 " " 283 AF_BLUE_STRING_GUJARATI_DIGIT_TOP 284 " " 285 286 AF_BLUE_STRING_GURMUKHI_BASE 287 " " 288 AF_BLUE_STRING_GURMUKHI_HEAD 289 " " 290 AF_BLUE_STRING_GURMUKHI_TOP 291 " " 292 AF_BLUE_STRING_GURMUKHI_BOTTOM 293 " " 294 AF_BLUE_STRING_GURMUKHI_DIGIT_TOP 295 " " 296 297 AF_BLUE_STRING_HEBREW_TOP 298 " " 299 AF_BLUE_STRING_HEBREW_BOTTOM 300 " " 301 AF_BLUE_STRING_HEBREW_DESCENDER 302 " " 303 304 AF_BLUE_STRING_KANNADA_TOP 305 " " 306 AF_BLUE_STRING_KANNADA_BOTTOM 307 " " 308 309 AF_BLUE_STRING_KAYAH_LI_TOP 310 " " 311 AF_BLUE_STRING_KAYAH_LI_BOTTOM 312 " " 313 AF_BLUE_STRING_KAYAH_LI_ASCENDER 314 " " 315 AF_BLUE_STRING_KAYAH_LI_DESCENDER 316 " " 317 AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER 318 " " 319 320 AF_BLUE_STRING_KHMER_TOP 321 " " 322 AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP 323 " " 324 AF_BLUE_STRING_KHMER_BOTTOM 325 " " 326 AF_BLUE_STRING_KHMER_DESCENDER 327 " " 328 AF_BLUE_STRING_KHMER_LARGE_DESCENDER 329 " " 330 331 AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP 332 " " 333 AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM 334 " " 335 336 AF_BLUE_STRING_LAO_TOP 337 " " 338 AF_BLUE_STRING_LAO_BOTTOM 339 " " 340 AF_BLUE_STRING_LAO_ASCENDER 341 " " 342 AF_BLUE_STRING_LAO_LARGE_ASCENDER 343 " " 344 AF_BLUE_STRING_LAO_DESCENDER 345 " " 346 347 AF_BLUE_STRING_LATIN_CAPITAL_TOP 348 "T H E Z O C Q S" 349 AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM 350 "H E Z L O C U S" 351 AF_BLUE_STRING_LATIN_SMALL_F_TOP 352 "f i j k d b h" 353 AF_BLUE_STRING_LATIN_SMALL_TOP 354 "u v x z o e s c" 355 AF_BLUE_STRING_LATIN_SMALL_BOTTOM 356 "n r x z o e s c" 357 AF_BLUE_STRING_LATIN_SMALL_DESCENDER 358 "p q g j y" 359 360 // we assume that both the subscript and superscript ranges 361 // don't contain oldstyle digits (actually, most fonts probably 362 // have digits only in those ranges) 363 AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP 364 " " 365 AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM 366 " " 367 AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP 368 " " 369 AF_BLUE_STRING_LATIN_SUBS_SMALL 370 " " 371 AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER 372 " " 373 374 AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP 375 " " 376 AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM 377 " " 378 AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP 379 " " 380 AF_BLUE_STRING_LATIN_SUPS_SMALL 381 " " 382 AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER 383 " " 384 385 AF_BLUE_STRING_LISU_TOP 386 " " 387 AF_BLUE_STRING_LISU_BOTTOM 388 " " 389 390 AF_BLUE_STRING_MALAYALAM_TOP 391 " " 392 AF_BLUE_STRING_MALAYALAM_BOTTOM 393 " " 394 395 AF_BLUE_STRING_MYANMAR_TOP 396 " " 397 AF_BLUE_STRING_MYANMAR_BOTTOM 398 " " 399 AF_BLUE_STRING_MYANMAR_ASCENDER 400 " " 401 AF_BLUE_STRING_MYANMAR_DESCENDER 402 " " 403 404 AF_BLUE_STRING_NKO_TOP 405 " " 406 AF_BLUE_STRING_NKO_BOTTOM 407 " " 408 AF_BLUE_STRING_NKO_SMALL_TOP 409 " " 410 AF_BLUE_STRING_NKO_SMALL_BOTTOM 411 " " 412 413 AF_BLUE_STRING_OL_CHIKI 414 " " 415 416 AF_BLUE_STRING_OLD_TURKIC_TOP 417 " " 418 AF_BLUE_STRING_OLD_TURKIC_BOTTOM 419 " " 420 421 AF_BLUE_STRING_OSAGE_CAPITAL_TOP 422 " " 423 AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM 424 " " 425 AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER 426 " " 427 AF_BLUE_STRING_OSAGE_SMALL_TOP 428 " " 429 AF_BLUE_STRING_OSAGE_SMALL_BOTTOM 430 " " 431 AF_BLUE_STRING_OSAGE_SMALL_ASCENDER 432 " " 433 AF_BLUE_STRING_OSAGE_SMALL_DESCENDER 434 " " 435 436 AF_BLUE_STRING_OSMANYA_TOP 437 " " 438 AF_BLUE_STRING_OSMANYA_BOTTOM 439 " " 440 441 AF_BLUE_STRING_SAURASHTRA_TOP 442 " " 443 AF_BLUE_STRING_SAURASHTRA_BOTTOM 444 " " 445 446 AF_BLUE_STRING_SHAVIAN_TOP 447 " " 448 AF_BLUE_STRING_SHAVIAN_BOTTOM 449 " " 450 AF_BLUE_STRING_SHAVIAN_DESCENDER 451 " " 452 AF_BLUE_STRING_SHAVIAN_SMALL_TOP 453 " " 454 AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM 455 " " 456 457 AF_BLUE_STRING_SINHALA_TOP 458 " " 459 AF_BLUE_STRING_SINHALA_BOTTOM 460 " " 461 AF_BLUE_STRING_SINHALA_DESCENDER 462 " " 463 464 AF_BLUE_STRING_SUNDANESE_TOP 465 " " 466 AF_BLUE_STRING_SUNDANESE_BOTTOM 467 " " 468 AF_BLUE_STRING_SUNDANESE_DESCENDER 469 " " 470 471 AF_BLUE_STRING_TAI_VIET_TOP 472 " " 473 AF_BLUE_STRING_TAI_VIET_BOTTOM 474 " " 475 476 AF_BLUE_STRING_TAMIL_TOP 477 " " 478 AF_BLUE_STRING_TAMIL_BOTTOM 479 " " 480 481 AF_BLUE_STRING_TELUGU_TOP 482 " " 483 AF_BLUE_STRING_TELUGU_BOTTOM 484 " " 485 486 AF_BLUE_STRING_THAI_TOP 487 " " 488 AF_BLUE_STRING_THAI_BOTTOM 489 " " 490 AF_BLUE_STRING_THAI_ASCENDER 491 " " 492 AF_BLUE_STRING_THAI_LARGE_ASCENDER 493 " " 494 AF_BLUE_STRING_THAI_DESCENDER 495 " " 496 AF_BLUE_STRING_THAI_LARGE_DESCENDER 497 " " 498 AF_BLUE_STRING_THAI_DIGIT_TOP 499 " " 500 501 AF_BLUE_STRING_TIFINAGH 502 " " 503 504 AF_BLUE_STRING_VAI_TOP 505 " " 506 AF_BLUE_STRING_VAI_BOTTOM 507 " " 508 509 510 #ifdef AF_CONFIG_OPTION_CJK 511 512 AF_BLUE_STRING_CJK_TOP 513 " " 514 " " 515 " " 516 " |" 517 " " 518 " " 519 " " 520 " " 521 AF_BLUE_STRING_CJK_BOTTOM 522 " " 523 " " 524 " " 525 " |" 526 " " 527 " " 528 " " 529 " " 530 531 #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT 532 533 AF_BLUE_STRING_CJK_LEFT 534 " " 535 " " 536 " " 537 " |" 538 " " 539 " " 540 " " 541 " " 542 AF_BLUE_STRING_CJK_RIGHT 543 " " 544 " " 545 " " 546 " |" 547 " " 548 " " 549 " " 550 " " 551 552 #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */ 553 554 #endif /* AF_CONFIG_OPTION_CJK */ 555 556 557 // The blue zone stringsets, as used in the script styles, cf. `afstyles.h'. 558 // 559 // The AF_BLUE_PROPERTY_XXX flags are defined in `afblue.h'; here some 560 // explanations. 561 // 562 // A blue zone in general is defined by a reference and an overshoot line. 563 // During the hinting process, all coordinate values between those two lines 564 // are set equal to the reference value, provided that the blue zone is not 565 // wider than 0.75 pixels (otherwise the blue zone gets ignored). All 566 // entries must have `AF_BLUE_STRING_MAX' as the final line. 567 // 568 // During the glyph analysis, edges are sorted from bottom to top, and then 569 // sequentially checked, edge by edge, against the blue zones in the order 570 // given below. 571 // 572 // 573 // latin auto-hinter 574 // ----------------- 575 // 576 // Characters in a blue string are automatically classified as having a flat 577 // (reference) or a round (overshoot) extremum. The blue zone is then set 578 // up by the mean values of all flat extrema and all round extrema, 579 // respectively. Only horizontal blue zones (i.e., adjusting vertical 580 // coordinate values) are supported. 581 // 582 // Some scripts like Khmer need character composition to get all necessary 583 // blue zones, since Unicode only provides an abstract data model that 584 // doesn't represent all possible glyph shapes. For such character 585 // clusters, the HarfBuzz library is used to convert them into the 586 // corresponding glyphs. The largest glyph element (where `largest' can be 587 // either `largest ascender' or `largest descender') then defines the 588 // corresponding flat or round extremum. 589 // 590 // For the latin auto-hinter, the overshoot should be larger than the 591 // reference for top zones, and vice versa for bottom zones. 592 // 593 // LATIN_TOP 594 // Take the maximum flat and round coordinate values of the blue string 595 // characters for computing the blue zone's reference and overshoot 596 // values. 597 // 598 // If not set, take the minimum values. 599 // 600 // Mutually exclusive with `LATIN_SUB_TOP'. 601 // 602 // LATIN_SUB_TOP 603 // For all glyphs of a character cluster, compute the maximum flat 604 // and round coordinate values of each component, then take the 605 // smallest of the maximum values. The idea is to get the top of 606 // subscript glyphs, as used in Khmer, for example. Note that 607 // this mechanism doesn't work for ordinary ligatures. 608 // 609 // This flags indicates a secondary blue zone: It gets removed if 610 // there is a non-LATIN_SUB_TOP blue zone at the same coordinate 611 // value (after scaling). 612 // 613 // Mutually exclusive with `LATIN_TOP'. 614 // 615 // LATIN_NEUTRAL 616 // Ignore round extrema and define the blue zone with flat values only. 617 // Both top and bottom of contours can match. This is useful for 618 // scripts like Devanagari where vowel signs attach to the base 619 // character and are implemented as components of composite glyphs. 620 // 621 // If not set, both round and flat extrema are taken into account. 622 // Additionally, only the top or the bottom of a contour can match, 623 // depending on the LATIN_TOP flag. 624 // 625 // Neutral blue zones should always follow non-neutral blue zones. 626 // 627 // LATIN_X_HEIGHT 628 // Scale all glyphs vertically from the corresponding script to make the 629 // reference line of this blue zone align on the grid. The scaling 630 // takes place before all other blue zones get aligned to the grid. 631 // Only one blue character string of a script style can have this flag. 632 // 633 // LATIN_LONG 634 // Apply an additional constraint for blue zone values: Don't 635 // necessarily use the extremum as-is but a segment of the topmost (or 636 // bottommost) contour that is longer than a heuristic threshold, and 637 // which is not too far away vertically from the real extremum. This 638 // ensures that small bumps in the outline are ignored (for example, the 639 // `vertical serifs' found in many Hebrew glyph designs). 640 // 641 // The segment must be at least EM/25 font units long, and the distance 642 // to the extremum must be smaller than EM/4. 643 // 644 // 645 // cjk auto-hinter 646 // --------------- 647 // 648 // Characters in a blue string are *not* automatically classified. Instead, 649 // first come the characters used for the overshoot value, then the 650 // character `|', then the characters used for the reference value 651 // (everything separated by space characters). The blue zone is then set up 652 // by the mean values of all reference values and all overshoot values, 653 // respectively. Both horizontal and vertical blue zones (i.e., adjusting 654 // vertical and horizontal coordinate values, respectively) are supported. 655 // 656 // For the cjk auto-hinter, the overshoot should be smaller than the 657 // reference for top zones, and vice versa for bottom zones. 658 // 659 // CJK_TOP 660 // Take the maximum flat and round coordinate values of the blue string 661 // characters. If not set, take the minimum values. 662 // 663 // CJK_RIGHT 664 // A synonym for CJK_TOP. If CJK_HORIZ is set, this flag indicates the 665 // right blue zone, taking horizontal maximum values. 666 // 667 // CJK_HORIZ 668 // Define a blue zone for horizontal hinting (i.e., vertical blue 669 // zones). If not set, this is a blue zone for vertical hinting. 670 671 672 AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: 673 674 AF_BLUE_STRINGSET_ADLM 675 { AF_BLUE_STRING_ADLAM_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 676 { AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0 } 677 { AF_BLUE_STRING_ADLAM_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 678 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 679 { AF_BLUE_STRING_ADLAM_SMALL_BOTTOM, 0 } 680 { AF_BLUE_STRING_MAX, 0 } 681 682 AF_BLUE_STRINGSET_ARAB 683 { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 684 { AF_BLUE_STRING_ARABIC_BOTTOM, 0 } 685 { AF_BLUE_STRING_ARABIC_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL } 686 { AF_BLUE_STRING_MAX, 0 } 687 688 AF_BLUE_STRINGSET_ARMN 689 { AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 690 { AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM, 0 } 691 { AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 692 { AF_BLUE_STRING_ARMENIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 693 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 694 { AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM, 0 } 695 { AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0 } 696 { AF_BLUE_STRING_MAX, 0 } 697 698 AF_BLUE_STRINGSET_AVST 699 { AF_BLUE_STRING_AVESTAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 700 { AF_BLUE_STRING_AVESTAN_BOTTOM, 0 } 701 { AF_BLUE_STRING_MAX, 0 } 702 703 AF_BLUE_STRINGSET_BAMU 704 { AF_BLUE_STRING_BAMUM_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 705 { AF_BLUE_STRING_BAMUM_BOTTOM, 0 } 706 { AF_BLUE_STRING_MAX, 0 } 707 708 AF_BLUE_STRINGSET_BENG 709 { AF_BLUE_STRING_BENGALI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 710 { AF_BLUE_STRING_BENGALI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP } 711 { AF_BLUE_STRING_BENGALI_BASE, AF_BLUE_PROPERTY_LATIN_TOP | 712 AF_BLUE_PROPERTY_LATIN_NEUTRAL | 713 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 714 { AF_BLUE_STRING_BENGALI_BASE, 0 } 715 { AF_BLUE_STRING_MAX, 0 } 716 717 AF_BLUE_STRINGSET_BUHD 718 { AF_BLUE_STRING_BUHID_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 719 { AF_BLUE_STRING_BUHID_LARGE, AF_BLUE_PROPERTY_LATIN_TOP } 720 { AF_BLUE_STRING_BUHID_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 721 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 722 { AF_BLUE_STRING_BUHID_BOTTOM, 0 } 723 { AF_BLUE_STRING_MAX, 0 } 724 725 AF_BLUE_STRINGSET_CAKM 726 { AF_BLUE_STRING_CHAKMA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 727 { AF_BLUE_STRING_CHAKMA_BOTTOM, 0 } 728 { AF_BLUE_STRING_CHAKMA_DESCENDER, 0 } 729 { AF_BLUE_STRING_MAX, 0 } 730 731 AF_BLUE_STRINGSET_CANS 732 { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 733 { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 } 734 { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 735 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 736 { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 } 737 { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 738 { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 } 739 { AF_BLUE_STRING_MAX, 0 } 740 741 AF_BLUE_STRINGSET_CARI 742 { AF_BLUE_STRING_CARIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 743 { AF_BLUE_STRING_CARIAN_BOTTOM, 0 } 744 { AF_BLUE_STRING_MAX, 0 } 745 746 AF_BLUE_STRINGSET_CHER 747 { AF_BLUE_STRING_CHEROKEE_CAPITAL, AF_BLUE_PROPERTY_LATIN_TOP } 748 { AF_BLUE_STRING_CHEROKEE_CAPITAL, 0 } 749 { AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 750 { AF_BLUE_STRING_CHEROKEE_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 751 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 752 { AF_BLUE_STRING_CHEROKEE_SMALL, 0 } 753 { AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0 } 754 { AF_BLUE_STRING_MAX, 0 } 755 756 AF_BLUE_STRINGSET_COPT 757 { AF_BLUE_STRING_COPTIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 758 { AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0 } 759 { AF_BLUE_STRING_COPTIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 760 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 761 { AF_BLUE_STRING_COPTIC_SMALL_BOTTOM, 0 } 762 { AF_BLUE_STRING_MAX, 0 } 763 764 AF_BLUE_STRINGSET_CPRT 765 { AF_BLUE_STRING_CYPRIOT_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 766 { AF_BLUE_STRING_CYPRIOT_BOTTOM, 0 } 767 { AF_BLUE_STRING_CYPRIOT_SMALL, AF_BLUE_PROPERTY_LATIN_TOP } 768 { AF_BLUE_STRING_CYPRIOT_SMALL, 0 } 769 { AF_BLUE_STRING_MAX, 0 } 770 771 AF_BLUE_STRINGSET_CYRL 772 { AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 773 { AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 } 774 { AF_BLUE_STRING_CYRILLIC_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 775 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 776 { AF_BLUE_STRING_CYRILLIC_SMALL, 0 } 777 { AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0 } 778 { AF_BLUE_STRING_MAX, 0 } 779 780 AF_BLUE_STRINGSET_DEVA 781 { AF_BLUE_STRING_DEVANAGARI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 782 { AF_BLUE_STRING_DEVANAGARI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP } 783 { AF_BLUE_STRING_DEVANAGARI_BASE, AF_BLUE_PROPERTY_LATIN_TOP | 784 AF_BLUE_PROPERTY_LATIN_NEUTRAL | 785 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 786 { AF_BLUE_STRING_DEVANAGARI_BASE, 0 } 787 { AF_BLUE_STRING_DEVANAGARI_BOTTOM, 0 } 788 { AF_BLUE_STRING_MAX, 0 } 789 790 AF_BLUE_STRINGSET_DSRT 791 { AF_BLUE_STRING_DESERET_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 792 { AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0 } 793 { AF_BLUE_STRING_DESERET_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 794 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 795 { AF_BLUE_STRING_DESERET_SMALL_BOTTOM, 0 } 796 { AF_BLUE_STRING_MAX, 0 } 797 798 AF_BLUE_STRINGSET_ETHI 799 { AF_BLUE_STRING_ETHIOPIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 800 { AF_BLUE_STRING_ETHIOPIC_BOTTOM, 0 } 801 { AF_BLUE_STRING_MAX, 0 } 802 803 AF_BLUE_STRINGSET_GEOR 804 { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 805 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 806 { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM, 0 } 807 { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 808 { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0 } 809 { AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 810 { AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM, 0 } 811 { AF_BLUE_STRING_MAX, 0 } 812 813 AF_BLUE_STRINGSET_GEOK 814 { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 815 { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0 } 816 { AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 817 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 818 { AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM, 0 } 819 { AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 820 { AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0 } 821 { AF_BLUE_STRING_MAX, 0 } 822 823 AF_BLUE_STRINGSET_GLAG 824 { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 825 { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0 } 826 { AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 827 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 828 { AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM, 0 } 829 { AF_BLUE_STRING_MAX, 0 } 830 831 AF_BLUE_STRINGSET_GOTH 832 { AF_BLUE_STRING_GOTHIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 833 { AF_BLUE_STRING_GOTHIC_BOTTOM, 0 } 834 { AF_BLUE_STRING_MAX, 0 } 835 836 AF_BLUE_STRINGSET_GREK 837 { AF_BLUE_STRING_GREEK_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 838 { AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0 } 839 { AF_BLUE_STRING_GREEK_SMALL_BETA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 840 { AF_BLUE_STRING_GREEK_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 841 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 842 { AF_BLUE_STRING_GREEK_SMALL, 0 } 843 { AF_BLUE_STRING_GREEK_SMALL_DESCENDER, 0 } 844 { AF_BLUE_STRING_MAX, 0 } 845 846 AF_BLUE_STRINGSET_GUJR 847 { AF_BLUE_STRING_GUJARATI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 848 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 849 { AF_BLUE_STRING_GUJARATI_BOTTOM, 0 } 850 { AF_BLUE_STRING_GUJARATI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 851 { AF_BLUE_STRING_GUJARATI_DESCENDER, 0 } 852 { AF_BLUE_STRING_GUJARATI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 853 { AF_BLUE_STRING_MAX, 0 } 854 855 AF_BLUE_STRINGSET_GURU 856 { AF_BLUE_STRING_GURMUKHI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 857 { AF_BLUE_STRING_GURMUKHI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP } 858 { AF_BLUE_STRING_GURMUKHI_BASE, AF_BLUE_PROPERTY_LATIN_TOP | 859 AF_BLUE_PROPERTY_LATIN_NEUTRAL | 860 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 861 { AF_BLUE_STRING_GURMUKHI_BOTTOM, 0 } 862 { AF_BLUE_STRING_GURMUKHI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 863 { AF_BLUE_STRING_MAX, 0 } 864 865 AF_BLUE_STRINGSET_HEBR 866 { AF_BLUE_STRING_HEBREW_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 867 AF_BLUE_PROPERTY_LATIN_LONG } 868 { AF_BLUE_STRING_HEBREW_BOTTOM, 0 } 869 { AF_BLUE_STRING_HEBREW_DESCENDER, 0 } 870 { AF_BLUE_STRING_MAX, 0 } 871 872 AF_BLUE_STRINGSET_KALI 873 { AF_BLUE_STRING_KAYAH_LI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 874 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 875 { AF_BLUE_STRING_KAYAH_LI_BOTTOM, 0 } 876 { AF_BLUE_STRING_KAYAH_LI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 877 { AF_BLUE_STRING_KAYAH_LI_DESCENDER, 0 } 878 { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0 } 879 { AF_BLUE_STRING_MAX, 0 } 880 881 AF_BLUE_STRINGSET_KHMR 882 { AF_BLUE_STRING_KHMER_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 883 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 884 { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP, AF_BLUE_PROPERTY_LATIN_SUB_TOP } 885 { AF_BLUE_STRING_KHMER_BOTTOM, 0 } 886 { AF_BLUE_STRING_KHMER_DESCENDER, 0 } 887 { AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0 } 888 { AF_BLUE_STRING_MAX, 0 } 889 890 AF_BLUE_STRINGSET_KHMS 891 { AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 892 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 893 { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 } 894 { AF_BLUE_STRING_MAX, 0 } 895 896 AF_BLUE_STRINGSET_KNDA 897 { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 898 { AF_BLUE_STRING_KANNADA_BOTTOM, 0 } 899 { AF_BLUE_STRING_MAX, 0 } 900 901 AF_BLUE_STRINGSET_LAO 902 { AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 903 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 904 { AF_BLUE_STRING_LAO_BOTTOM, 0 } 905 { AF_BLUE_STRING_LAO_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 906 { AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 907 { AF_BLUE_STRING_LAO_DESCENDER, 0 } 908 { AF_BLUE_STRING_MAX, 0 } 909 910 AF_BLUE_STRINGSET_LATN 911 { AF_BLUE_STRING_LATIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 912 { AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM, 0 } 913 { AF_BLUE_STRING_LATIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 914 { AF_BLUE_STRING_LATIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 915 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 916 { AF_BLUE_STRING_LATIN_SMALL_BOTTOM, 0 } 917 { AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 0 } 918 { AF_BLUE_STRING_MAX, 0 } 919 920 AF_BLUE_STRINGSET_LATB 921 { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 922 { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM, 0 } 923 { AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 924 { AF_BLUE_STRING_LATIN_SUBS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 925 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 926 { AF_BLUE_STRING_LATIN_SUBS_SMALL, 0 } 927 { AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0 } 928 { AF_BLUE_STRING_MAX, 0 } 929 930 AF_BLUE_STRINGSET_LATP 931 { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 932 { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM, 0 } 933 { AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 934 { AF_BLUE_STRING_LATIN_SUPS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | 935 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 936 { AF_BLUE_STRING_LATIN_SUPS_SMALL, 0 } 937 { AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0 } 938 { AF_BLUE_STRING_MAX, 0 } 939 940 AF_BLUE_STRINGSET_LISU 941 { AF_BLUE_STRING_LISU_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 942 { AF_BLUE_STRING_LISU_BOTTOM, 0 } 943 { AF_BLUE_STRING_MAX, 0 } 944 945 AF_BLUE_STRINGSET_MLYM 946 { AF_BLUE_STRING_MALAYALAM_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 947 { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 } 948 { AF_BLUE_STRING_MAX, 0 } 949 950 AF_BLUE_STRINGSET_MYMR 951 { AF_BLUE_STRING_MYANMAR_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 952 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 953 { AF_BLUE_STRING_MYANMAR_BOTTOM, 0 } 954 { AF_BLUE_STRING_MYANMAR_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 955 { AF_BLUE_STRING_MYANMAR_DESCENDER, 0 } 956 { AF_BLUE_STRING_MAX, 0 } 957 958 AF_BLUE_STRINGSET_NKOO 959 { AF_BLUE_STRING_NKO_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 960 { AF_BLUE_STRING_NKO_BOTTOM, 0 } 961 { AF_BLUE_STRING_NKO_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 962 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 963 { AF_BLUE_STRING_NKO_SMALL_BOTTOM, 0 } 964 { AF_BLUE_STRING_MAX, 0 } 965 966 AF_BLUE_STRINGSET_NONE 967 { AF_BLUE_STRING_MAX, 0 } 968 969 AF_BLUE_STRINGSET_OLCK 970 { AF_BLUE_STRING_OL_CHIKI, AF_BLUE_PROPERTY_LATIN_TOP } 971 { AF_BLUE_STRING_OL_CHIKI, 0 } 972 { AF_BLUE_STRING_MAX, 0 } 973 974 AF_BLUE_STRINGSET_ORKH 975 { AF_BLUE_STRING_OLD_TURKIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 976 { AF_BLUE_STRING_OLD_TURKIC_BOTTOM, 0 } 977 { AF_BLUE_STRING_MAX, 0 } 978 979 AF_BLUE_STRINGSET_OSGE 980 { AF_BLUE_STRING_OSAGE_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 981 { AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM, 0 } 982 { AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0 } 983 { AF_BLUE_STRING_OSAGE_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 984 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 985 { AF_BLUE_STRING_OSAGE_SMALL_BOTTOM, 0 } 986 { AF_BLUE_STRING_OSAGE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 987 { AF_BLUE_STRING_OSAGE_SMALL_DESCENDER, 0 } 988 { AF_BLUE_STRING_MAX, 0 } 989 990 AF_BLUE_STRINGSET_OSMA 991 { AF_BLUE_STRING_OSMANYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 992 { AF_BLUE_STRING_OSMANYA_BOTTOM, 0 } 993 { AF_BLUE_STRING_MAX, 0 } 994 995 AF_BLUE_STRINGSET_SAUR 996 { AF_BLUE_STRING_SAURASHTRA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 997 { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0 } 998 { AF_BLUE_STRING_MAX, 0 } 999 1000 AF_BLUE_STRINGSET_SHAW 1001 { AF_BLUE_STRING_SHAVIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1002 { AF_BLUE_STRING_SHAVIAN_BOTTOM, 0 } 1003 { AF_BLUE_STRING_SHAVIAN_DESCENDER, 0 } 1004 { AF_BLUE_STRING_SHAVIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 1005 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 1006 { AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0 } 1007 { AF_BLUE_STRING_MAX, 0 } 1008 1009 AF_BLUE_STRINGSET_SINH 1010 { AF_BLUE_STRING_SINHALA_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1011 { AF_BLUE_STRING_SINHALA_BOTTOM, 0 } 1012 { AF_BLUE_STRING_SINHALA_DESCENDER, 0 } 1013 { AF_BLUE_STRING_MAX, 0 } 1014 1015 AF_BLUE_STRINGSET_SUND 1016 { AF_BLUE_STRING_SUNDANESE_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1017 { AF_BLUE_STRING_SUNDANESE_BOTTOM, 0 } 1018 { AF_BLUE_STRING_SUNDANESE_DESCENDER, 0 } 1019 { AF_BLUE_STRING_MAX, 0 } 1020 1021 AF_BLUE_STRINGSET_TAML 1022 { AF_BLUE_STRING_TAMIL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1023 { AF_BLUE_STRING_TAMIL_BOTTOM, 0 } 1024 { AF_BLUE_STRING_MAX, 0 } 1025 1026 AF_BLUE_STRINGSET_TAVT 1027 { AF_BLUE_STRING_TAI_VIET_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1028 { AF_BLUE_STRING_TAI_VIET_BOTTOM, 0 } 1029 { AF_BLUE_STRING_MAX, 0 } 1030 1031 AF_BLUE_STRINGSET_TELU 1032 { AF_BLUE_STRING_TELUGU_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1033 { AF_BLUE_STRING_TELUGU_BOTTOM, 0 } 1034 { AF_BLUE_STRING_MAX, 0 } 1035 1036 AF_BLUE_STRINGSET_TFNG 1037 { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP } 1038 { AF_BLUE_STRING_TIFINAGH, 0 } 1039 { AF_BLUE_STRING_MAX, 0 } 1040 1041 AF_BLUE_STRINGSET_THAI 1042 { AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP | 1043 AF_BLUE_PROPERTY_LATIN_X_HEIGHT } 1044 { AF_BLUE_STRING_THAI_BOTTOM, 0 } 1045 { AF_BLUE_STRING_THAI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 1046 { AF_BLUE_STRING_THAI_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } 1047 { AF_BLUE_STRING_THAI_DESCENDER, 0 } 1048 { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0 } 1049 { AF_BLUE_STRING_THAI_DIGIT_TOP, 0 } 1050 { AF_BLUE_STRING_MAX, 0 } 1051 1052 AF_BLUE_STRINGSET_VAII 1053 { AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP } 1054 { AF_BLUE_STRING_VAI_BOTTOM, 0 } 1055 { AF_BLUE_STRING_MAX, 0 } 1056 1057 #ifdef AF_CONFIG_OPTION_CJK 1058 1059 AF_BLUE_STRINGSET_HANI 1060 { AF_BLUE_STRING_CJK_TOP, AF_BLUE_PROPERTY_CJK_TOP } 1061 { AF_BLUE_STRING_CJK_BOTTOM, 0 } 1062 #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT 1063 { AF_BLUE_STRING_CJK_LEFT, AF_BLUE_PROPERTY_CJK_HORIZ } 1064 { AF_BLUE_STRING_CJK_RIGHT, AF_BLUE_PROPERTY_CJK_HORIZ | 1065 AF_BLUE_PROPERTY_CJK_RIGHT } 1066 #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */ 1067 { AF_BLUE_STRING_MAX, 0 } 1068 1069 #endif /* AF_CONFIG_OPTION_CJK */ 1070 1071 1072 // END 1073