375 lines
15 KiB
Plaintext
375 lines
15 KiB
Plaintext
// 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
|