| // afblue.dat |
| // |
| // Auto-fitter data for blue strings. |
| // |
| // Copyright 2013-2015 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. Space characters within the string are ignored too. 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. |
| |
| |
| // 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_ARABIC_TOP |
| "ا إ ل ك ط ظ" |
| AF_BLUE_STRING_ARABIC_JOIN |
| "ت ث ط ظ ك" |
| |
| AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP |
| "БВЕПЗОСЭ" |
| AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM |
| "БВЕШЗОСЭ" |
| AF_BLUE_STRING_CYRILLIC_SMALL |
| "хпншезос" |
| AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER |
| "руф" |
| |
| // we separate the letters with spaces to avoid ligatures; |
| // this is just for convenience to simplify reading |
| 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_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_HEBREW_TOP |
| "בדהחךכםס" |
| AF_BLUE_STRING_HEBREW_BOTTOM |
| "בטכםסצ" |
| AF_BLUE_STRING_HEBREW_DESCENDER |
| "קךןףץ" |
| |
| 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" |
| |
| // we separate the letters with spaces to avoid ligatures; |
| // this is just for convenience to simplify reading |
| 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 |
| "๐ ๑ ๓" |
| |
| |
| #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. |
| // |
| // 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. |
| // |
| // 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. 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_ARAB |
| { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP } |
| { AF_BLUE_STRING_ARABIC_JOIN, 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_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_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_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_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 } |
| |
| |
| #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 |