// afblue.dat // // Auto-fitter data for blue strings. // // Copyright 2013 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, holding the size of the largest array element. 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 in UTF-8 encoding enclosed in double quotes, // using C syntax. 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. // // - 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. // // 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 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. AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN: AF_BLUE_STRING_LATIN_CAPITAL_TOP "THEZOCQS" AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM "HEZLOCUS" AF_BLUE_STRING_LATIN_SMALL_F_TOP "fijkdbh" AF_BLUE_STRING_LATIN_SMALL "xzroesc" AF_BLUE_STRING_LATIN_SMALL_DESCENDER "pqgjy" 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_CYRILLIC_CAPITAL_TOP "БВЕПЗОСЭ" AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM "БВЕШЗОСЭ" AF_BLUE_STRING_CYRILLIC_SMALL "хпншезос" AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER "руф" AF_BLUE_STRING_HEBREW_TOP "בדהחךכםס" AF_BLUE_STRING_HEBREW_BOTTOM "בטכםסצ" AF_BLUE_STRING_HEBREW_DESCENDER "קךןףץ" #ifdef AF_CONFIG_OPTION_CJK AF_BLUE_STRING_CJK_TOP_FILL "他们你來們到和地" "对對就席我时時會" "来為能舰說说这這" "齊" AF_BLUE_STRING_CJK_TOP_UNFILL "军同已愿既星是景" "民照现現理用置要" "軍那配里開雷露面" "顾" AF_BLUE_STRING_CJK_BOTTOM_FILL "个为人他以们你來" "個們到和大对對就" "我时時有来為要說" "说" AF_BLUE_STRING_CJK_BOTTOM_UNFILL "主些因它想意理生" "當看着置者自著裡" "过还进進過道還里" "面" #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT AF_BLUE_STRING_CJK_LEFT_FILL "些们你來們到和地" "她将將就年得情最" "样樣理能說说这這" "通" AF_BLUE_STRING_CJK_LEFT_UNFILL "即吗吧听呢品响嗎" "师師收断斷明眼間" "间际陈限除陳随際" "隨" AF_BLUE_STRING_CJK_RIGHT_FILL "事前學将將情想或" "政斯新样樣民沒没" "然特现現球第經谁" "起" AF_BLUE_STRING_CJK_RIGHT_UNFILL "例別别制动動吗嗎" "增指明朝期构物确" "种調调費费那都間" "间" #endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */ #endif /* AF_CONFIG_OPTION_CJK */ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN: 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, AF_BLUE_PROPERTY_LATIN_TOP | AF_BLUE_PROPERTY_LATIN_X_HEIGHT } { AF_BLUE_STRING_LATIN_SMALL, 0 } { AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 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_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_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 } #ifdef AF_CONFIG_OPTION_CJK AF_BLUE_STRINGSET_HANI { AF_BLUE_STRING_CJK_TOP_FILL, AF_BLUE_PROPERTY_CJK_TOP | AF_BLUE_PROPERTY_CJK_FILL } { AF_BLUE_STRING_CJK_TOP_UNFILL, AF_BLUE_PROPERTY_CJK_TOP } { AF_BLUE_STRING_CJK_BOTTOM_FILL, AF_BLUE_PROPERTY_CJK_FILL } { AF_BLUE_STRING_CJK_BOTTOM_UNFILL, 0 } #ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT { AF_BLUE_STRING_CJK_LEFT_FILL, AF_BLUE_PROPERTY_CJK_HORIZ | AF_BLUE_PROPERTY_CJK_FILL } { AF_BLUE_STRING_CJK_LEFT_UNFILL, AF_BLUE_PROPERTY_CJK_HORIZ } { AF_BLUE_STRING_CJK_RIGHT_FILL, AF_BLUE_PROPERTY_CJK_HORIZ | AF_BLUE_PROPERTY_CJK_RIGHT | AF_BLUE_PROPERTY_CJK_FILL } { AF_BLUE_STRING_CJK_RIGHT_UNFILL, 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