// 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_BOTTOM | |
"ت ث ط ظ ك" | |
// We don't necessarily have access to medial forms via Unicode in case | |
// Arabic presentational forms are missing. The only character that is | |
// guaranteed to have the same vertical position with joining (this is, | |
// non-isolated) forms is U+0640, ARABIC TATWEEL, which must join both | |
// round and flat curves. | |
AF_BLUE_STRING_ARABIC_JOIN | |
"ـ" | |
AF_BLUE_STRING_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_LAO_TOP | |
"າ ດ ອ ມ ລ ວ ຣ ງ" | |
AF_BLUE_STRING_LAO_BOTTOM | |
"າ ອ ບ ຍ ຣ ຮ ວ ຢ" | |
AF_BLUE_STRING_LAO_ASCENDER | |
"ປ ຢ ຟ ຝ" | |
AF_BLUE_STRING_LAO_LARGE_ASCENDER | |
"ໂ ໄ ໃ" | |
AF_BLUE_STRING_LAO_DESCENDER | |
"ງ ຊ ຖ ຽ ໆ ຯ" | |
AF_BLUE_STRING_LATIN_CAPITAL_TOP | |
"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 assume that both the subscript and superscript ranges | |
// don't contain oldstyle digits (actually, most fonts probably | |
// have digits only in those ranges) | |
AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP | |
"₀₃₅₇₈" | |
AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM | |
"₀₁₂₃₈" | |
AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP | |
"ᵢⱼₕₖₗ" | |
AF_BLUE_STRING_LATIN_SUBS_SMALL | |
"ₐₑₒₓₙₛᵥᵤᵣ" | |
AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER | |
"ᵦᵧᵨᵩₚ" | |
AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP | |
"⁰³⁵⁷ᵀᴴᴱᴼ" | |
AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM | |
"⁰¹²³ᴱᴸᴼᵁ" | |
AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP | |
"ᵇᵈᵏʰʲᶠⁱ" | |
AF_BLUE_STRING_LATIN_SUPS_SMALL | |
"ᵉᵒʳˢˣᶜᶻ" | |
AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER | |
"ᵖʸᵍ" | |
// 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_BOTTOM, 0 } | |
{ AF_BLUE_STRING_ARABIC_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL } | |
{ 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_LAO | |
{ AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP | | |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT } | |
{ AF_BLUE_STRING_LAO_BOTTOM, 0 } | |
{ AF_BLUE_STRING_LAO_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } | |
{ AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP } | |
{ AF_BLUE_STRING_LAO_DESCENDER, 0 } | |
{ AF_BLUE_STRING_MAX, 0 } | |
AF_BLUE_STRINGSET_LATN | |
{ AF_BLUE_STRING_LATIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } | |
{ AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM, 0 } | |
{ AF_BLUE_STRING_LATIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } | |
{ AF_BLUE_STRING_LATIN_SMALL, 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_LATB | |
{ AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } | |
{ AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM, 0 } | |
{ AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } | |
{ AF_BLUE_STRING_LATIN_SUBS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | | |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT } | |
{ AF_BLUE_STRING_LATIN_SUBS_SMALL, 0 } | |
{ AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0 } | |
{ AF_BLUE_STRING_MAX, 0 } | |
AF_BLUE_STRINGSET_LATP | |
{ AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP } | |
{ AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM, 0 } | |
{ AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP } | |
{ AF_BLUE_STRING_LATIN_SUPS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP | | |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT } | |
{ AF_BLUE_STRING_LATIN_SUPS_SMALL, 0 } | |
{ AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0 } | |
{ AF_BLUE_STRING_MAX, 0 } | |
AF_BLUE_STRINGSET_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 |