2013-08-25 08:01:41 +02:00
|
|
|
|
// afblue.dat
|
|
|
|
|
//
|
|
|
|
|
// Auto-fitter data for blue strings.
|
|
|
|
|
//
|
2015-01-17 20:41:43 +01:00
|
|
|
|
// Copyright 2013-2015 by
|
2013-08-25 08:01:41 +02:00
|
|
|
|
// 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
|
2015-12-05 13:26:44 +01:00
|
|
|
|
// `maximum' template. The script then fills the corresponding templates
|
|
|
|
|
// (indicated by `@' characters around the name).
|
2013-08-25 08:01:41 +02:00
|
|
|
|
//
|
|
|
|
|
// 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.
|
|
|
|
|
//
|
2015-12-05 13:26:44 +01:00
|
|
|
|
// - A string of characters or character clusters (for example, representing
|
|
|
|
|
// Aksharas, Devanagari syllables) in UTF-8 encoding enclosed in double
|
|
|
|
|
// quotes, using C syntax, where the elements are separated by spaces.
|
|
|
|
|
// 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.
|
|
|
|
|
//
|
|
|
|
|
// For strings, the `maximum' template holds the maximum number of
|
|
|
|
|
// non-space characters in all strings.
|
2013-08-25 08:01:41 +02:00
|
|
|
|
//
|
|
|
|
|
// - 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.
|
|
|
|
|
//
|
2015-12-05 13:26:44 +01:00
|
|
|
|
// For data blocks, the `maximum' template holds the maximum number of
|
|
|
|
|
// array elements.
|
|
|
|
|
//
|
2013-08-25 08:01:41 +02:00
|
|
|
|
// 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.
|
|
|
|
|
|
|
|
|
|
|
2014-04-20 22:11:27 +02:00
|
|
|
|
// The blue zone string data, to be used in the blue stringsets below.
|
|
|
|
|
|
2013-08-25 08:01:41 +02:00
|
|
|
|
AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
|
|
|
|
|
|
2015-03-11 16:45:58 +01:00
|
|
|
|
AF_BLUE_STRING_ARABIC_TOP
|
|
|
|
|
"ا إ ل ك ط ظ"
|
2015-08-06 07:34:50 +02:00
|
|
|
|
AF_BLUE_STRING_ARABIC_BOTTOM
|
2015-03-11 16:45:58 +01:00
|
|
|
|
"ت ث ط ظ ك"
|
2015-08-06 07:34:50 +02:00
|
|
|
|
// 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
|
|
|
|
|
"ـ"
|
2015-03-11 16:45:58 +01:00
|
|
|
|
|
2014-05-01 17:24:19 +02:00
|
|
|
|
AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"Б В Е П З О С Э"
|
2014-05-01 17:24:19 +02:00
|
|
|
|
AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"Б В Е Ш З О С Э"
|
2014-05-01 17:24:19 +02:00
|
|
|
|
AF_BLUE_STRING_CYRILLIC_SMALL
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"х п н ш е з о с"
|
2014-05-01 17:24:19 +02:00
|
|
|
|
AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"р у ф"
|
2014-05-01 17:24:19 +02:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
"ु ृ"
|
2013-08-25 08:01:41 +02:00
|
|
|
|
|
2013-09-22 22:37:26 +02:00
|
|
|
|
AF_BLUE_STRING_GREEK_CAPITAL_TOP
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"Γ Β Ε Ζ Θ Ο Ω"
|
2013-09-22 22:37:26 +02:00
|
|
|
|
AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"Β Δ Ζ Ξ Θ Ο"
|
2013-09-22 22:37:26 +02:00
|
|
|
|
AF_BLUE_STRING_GREEK_SMALL_BETA_TOP
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"β θ δ ζ λ ξ"
|
2013-09-22 22:37:26 +02:00
|
|
|
|
AF_BLUE_STRING_GREEK_SMALL
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"α ε ι ο π σ τ ω"
|
2013-10-19 21:14:40 +02:00
|
|
|
|
AF_BLUE_STRING_GREEK_SMALL_DESCENDER
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"β γ η μ ρ φ χ ψ"
|
2013-09-22 22:37:26 +02:00
|
|
|
|
|
2013-08-26 20:11:24 +02:00
|
|
|
|
AF_BLUE_STRING_HEBREW_TOP
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"ב ד ה ח ך כ ם ס"
|
2013-08-26 20:11:24 +02:00
|
|
|
|
AF_BLUE_STRING_HEBREW_BOTTOM
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"ב ט כ ם ס צ"
|
2013-08-26 20:11:24 +02:00
|
|
|
|
AF_BLUE_STRING_HEBREW_DESCENDER
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"ק ך ן ף ץ"
|
2013-08-26 20:11:24 +02:00
|
|
|
|
|
2015-12-06 19:34:59 +01:00
|
|
|
|
AF_BLUE_STRING_KHMER_TOP
|
|
|
|
|
"ខ ទ ន ឧ ឩ ា"
|
2015-12-09 20:04:18 +01:00
|
|
|
|
AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP
|
|
|
|
|
"ក្ក ក្ខ ក្គ ក្ថ"
|
2015-12-06 19:34:59 +01:00
|
|
|
|
AF_BLUE_STRING_KHMER_BOTTOM
|
|
|
|
|
"ខ ឃ ច ឋ ប ម យ ឲ"
|
|
|
|
|
AF_BLUE_STRING_KHMER_DESCENDER
|
2015-12-08 09:48:50 +01:00
|
|
|
|
"ត្រ រៀ ឲ្យ អឿ"
|
2015-12-06 19:34:59 +01:00
|
|
|
|
AF_BLUE_STRING_KHMER_LARGE_DESCENDER
|
2015-12-08 09:48:50 +01:00
|
|
|
|
"ន្ត្រៃ ង្ខ្យ ក្បៀ ច្រៀ ន្តឿ ល្បឿ"
|
2015-12-06 19:34:59 +01:00
|
|
|
|
|
|
|
|
|
AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP
|
|
|
|
|
"᧠ ᧡"
|
|
|
|
|
AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM
|
|
|
|
|
"᧶ ᧹"
|
|
|
|
|
|
2015-09-28 09:45:56 +02:00
|
|
|
|
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
|
|
|
|
|
"ງ ຊ ຖ ຽ ໆ ຯ"
|
|
|
|
|
|
2014-05-01 17:24:19 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_CAPITAL_TOP
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"T H E Z O C Q S"
|
2014-05-01 17:24:19 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"H E Z L O C U S"
|
2014-05-01 17:24:19 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_SMALL_F_TOP
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"f i j k d b h"
|
2014-05-01 17:24:19 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_SMALL
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"x z r o e s c"
|
2014-05-01 17:24:19 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_SMALL_DESCENDER
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"p q g j y"
|
2014-05-01 17:24:19 +02:00
|
|
|
|
|
2015-09-04 10:28:53 +02:00
|
|
|
|
// 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
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"₀ ₃ ₅ ₇ ₈"
|
2015-09-04 10:28:53 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"₀ ₁ ₂ ₃ ₈"
|
2015-09-04 10:28:53 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"ᵢ ⱼ ₕ ₖ ₗ"
|
2015-09-04 10:28:53 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_SUBS_SMALL
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"ₐ ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ"
|
2015-09-04 10:28:53 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"ᵦ ᵧ ᵨ ᵩ ₚ"
|
2015-09-04 10:28:53 +02:00
|
|
|
|
|
|
|
|
|
AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"⁰ ³ ⁵ ⁷ ᵀ ᴴ ᴱ ᴼ"
|
2015-09-04 10:28:53 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"⁰ ¹ ² ³ ᴱ ᴸ ᴼ ᵁ"
|
2015-09-04 10:28:53 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"ᵇ ᵈ ᵏ ʰ ʲ ᶠ ⁱ"
|
2015-09-04 10:28:53 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_SUPS_SMALL
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ"
|
2015-09-04 10:28:53 +02:00
|
|
|
|
AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"ᵖ ʸ ᵍ"
|
2015-09-04 10:28:53 +02:00
|
|
|
|
|
2015-12-13 15:54:17 +01:00
|
|
|
|
AF_BLUE_STRING_MYANMAR_TOP
|
|
|
|
|
"ခ ဂ င ဒ ဝ ၥ ၊ ။"
|
|
|
|
|
AF_BLUE_STRING_MYANMAR_BOTTOM
|
|
|
|
|
"င ဎ ဒ ပ ဗ ဝ ၊ ။"
|
|
|
|
|
AF_BLUE_STRING_MYANMAR_ASCENDER
|
|
|
|
|
"ဩ ြ ၍ ၏ ၆ ါ ိ"
|
|
|
|
|
AF_BLUE_STRING_MYANMAR_DESCENDER
|
|
|
|
|
"ဉ ည ဥ ဩ ဨ ၂ ၅ ၉"
|
|
|
|
|
|
2014-10-18 11:01:14 +02:00
|
|
|
|
AF_BLUE_STRING_TELUGU_TOP
|
|
|
|
|
"ఇ ఌ ఙ ఞ ణ ఱ ౯"
|
|
|
|
|
AF_BLUE_STRING_TELUGU_BOTTOM
|
|
|
|
|
"అ క చ ర ఽ ౨ ౬"
|
|
|
|
|
|
2015-01-31 11:01:33 +01:00
|
|
|
|
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
|
|
|
|
|
"๐ ๑ ๓"
|
|
|
|
|
|
|
|
|
|
|
2013-08-25 08:01:41 +02:00
|
|
|
|
#ifdef AF_CONFIG_OPTION_CJK
|
|
|
|
|
|
2014-04-20 22:11:27 +02:00
|
|
|
|
AF_BLUE_STRING_CJK_TOP
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"他 们 你 來 們 到 和 地"
|
|
|
|
|
" 对 對 就 席 我 时 時 會"
|
|
|
|
|
" 来 為 能 舰 說 说 这 這"
|
|
|
|
|
" 齊 |"
|
|
|
|
|
" 军 同 已 愿 既 星 是 景"
|
|
|
|
|
" 民 照 现 現 理 用 置 要"
|
|
|
|
|
" 軍 那 配 里 開 雷 露 面"
|
|
|
|
|
" 顾"
|
2014-04-20 22:11:27 +02:00
|
|
|
|
AF_BLUE_STRING_CJK_BOTTOM
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"个 为 人 他 以 们 你 來"
|
|
|
|
|
" 個 們 到 和 大 对 對 就"
|
|
|
|
|
" 我 时 時 有 来 為 要 說"
|
|
|
|
|
" 说 |"
|
|
|
|
|
" 主 些 因 它 想 意 理 生"
|
|
|
|
|
" 當 看 着 置 者 自 著 裡"
|
|
|
|
|
" 过 还 进 進 過 道 還 里"
|
|
|
|
|
" 面"
|
2013-08-25 08:01:41 +02:00
|
|
|
|
|
|
|
|
|
#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
|
|
|
|
|
|
2014-04-20 22:11:27 +02:00
|
|
|
|
AF_BLUE_STRING_CJK_LEFT
|
2015-12-05 13:26:44 +01:00
|
|
|
|
" 些 们 你 來 們 到 和 地"
|
|
|
|
|
" 她 将 將 就 年 得 情 最"
|
|
|
|
|
" 样 樣 理 能 說 说 这 這"
|
|
|
|
|
" 通 |"
|
|
|
|
|
" 即 吗 吧 听 呢 品 响 嗎"
|
|
|
|
|
" 师 師 收 断 斷 明 眼 間"
|
|
|
|
|
" 间 际 陈 限 除 陳 随 際"
|
|
|
|
|
" 隨"
|
2014-04-20 22:11:27 +02:00
|
|
|
|
AF_BLUE_STRING_CJK_RIGHT
|
2015-12-05 13:26:44 +01:00
|
|
|
|
"事 前 學 将 將 情 想 或"
|
|
|
|
|
" 政 斯 新 样 樣 民 沒 没"
|
|
|
|
|
" 然 特 现 現 球 第 經 谁"
|
|
|
|
|
" 起 |"
|
|
|
|
|
" 例 別 别 制 动 動 吗 嗎"
|
|
|
|
|
" 增 指 明 朝 期 构 物 确"
|
|
|
|
|
" 种 調 调 費 费 那 都 間"
|
|
|
|
|
" 间"
|
2013-08-25 08:01:41 +02:00
|
|
|
|
|
|
|
|
|
#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
|
|
|
|
|
|
|
|
|
|
#endif /* AF_CONFIG_OPTION_CJK */
|
|
|
|
|
|
|
|
|
|
|
2014-04-20 22:11:27 +02:00
|
|
|
|
// 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.
|
|
|
|
|
//
|
2014-04-28 21:13:14 +02:00
|
|
|
|
// 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.
|
|
|
|
|
//
|
2014-04-20 22:11:27 +02:00
|
|
|
|
//
|
|
|
|
|
// 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.
|
|
|
|
|
//
|
2015-12-06 19:34:59 +01:00
|
|
|
|
// Some scripts like Khmer need character composition to get all necessary
|
|
|
|
|
// blue zones, since Unicode only provides an abstract data model that
|
|
|
|
|
// doesn't represent all possible glyph shapes. For such character
|
|
|
|
|
// clusters, the HarfBuzz library is used to convert them into the
|
|
|
|
|
// corresponding glyphs. The largest glyph element (where `largest' can be
|
|
|
|
|
// either `largest ascender' or `largest descender') then defines the
|
|
|
|
|
// corresponding flat or round extremum.
|
|
|
|
|
//
|
2014-04-20 22:11:27 +02:00
|
|
|
|
// 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
|
2014-04-28 21:13:14 +02:00
|
|
|
|
// characters for computing the blue zone's reference and overshoot
|
|
|
|
|
// values.
|
|
|
|
|
//
|
|
|
|
|
// If not set, take the minimum values.
|
|
|
|
|
//
|
2015-12-09 20:04:18 +01:00
|
|
|
|
// Mutually exclusive with `LATIN_SUB_TOP'.
|
|
|
|
|
//
|
|
|
|
|
// LATIN_SUB_TOP
|
|
|
|
|
// For all glyphs of a character cluster, compute the maximum flat
|
|
|
|
|
// and round coordinate values of each component, then take the
|
|
|
|
|
// smallest of the maximum values. The idea is to get the top of
|
|
|
|
|
// subscript glyphs, as used in Khmer, for example. Note that
|
|
|
|
|
// this mechanism doesn't work for ordinary ligatures.
|
|
|
|
|
//
|
|
|
|
|
// This flags indicates a secondary blue zone: It gets removed if
|
|
|
|
|
// there is a non-LATIN_SUB_TOP blue zone at the same coordinate
|
|
|
|
|
// value (after scaling).
|
|
|
|
|
//
|
|
|
|
|
// Mutually exclusive with `LATIN_TOP'.
|
|
|
|
|
//
|
2014-04-28 21:13:14 +02:00
|
|
|
|
// 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.
|
2014-04-20 22:11:27 +02:00
|
|
|
|
//
|
|
|
|
|
// 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
|
2015-12-05 13:26:44 +01:00
|
|
|
|
// character `|', then the characters used for the reference value
|
|
|
|
|
// (everything separated by space characters). 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.
|
2014-04-20 22:11:27 +02:00
|
|
|
|
//
|
|
|
|
|
// 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.
|
|
|
|
|
|
|
|
|
|
|
2013-08-25 08:01:41 +02:00
|
|
|
|
AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
|
|
|
|
|
|
2015-03-11 16:45:58 +01:00
|
|
|
|
AF_BLUE_STRINGSET_ARAB
|
2015-08-06 07:34:50 +02:00
|
|
|
|
{ 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 }
|
2015-03-11 16:45:58 +01:00
|
|
|
|
|
2014-05-01 17:24:19 +02:00
|
|
|
|
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 }
|
2013-08-25 08:01:41 +02:00
|
|
|
|
|
2013-09-22 22:37:26 +02:00
|
|
|
|
AF_BLUE_STRINGSET_GREK
|
2013-10-19 21:46:03 +02:00
|
|
|
|
{ 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 }
|
2013-09-22 22:37:26 +02:00
|
|
|
|
|
2013-08-26 20:11:24 +02:00
|
|
|
|
AF_BLUE_STRINGSET_HEBR
|
2013-09-11 23:08:31 +02:00
|
|
|
|
{ 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 }
|
2013-08-26 20:11:24 +02:00
|
|
|
|
|
2015-12-06 19:34:59 +01:00
|
|
|
|
AF_BLUE_STRINGSET_KHMR
|
|
|
|
|
{ AF_BLUE_STRING_KHMER_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
|
|
|
|
|
AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
|
2015-12-09 20:04:18 +01:00
|
|
|
|
{ AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP, AF_BLUE_PROPERTY_LATIN_SUB_TOP }
|
2015-12-06 19:34:59 +01:00
|
|
|
|
{ AF_BLUE_STRING_KHMER_BOTTOM, 0 }
|
|
|
|
|
{ AF_BLUE_STRING_KHMER_DESCENDER, 0 }
|
|
|
|
|
{ AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0 }
|
|
|
|
|
{ AF_BLUE_STRING_MAX, 0 }
|
|
|
|
|
|
|
|
|
|
AF_BLUE_STRINGSET_KHMS
|
|
|
|
|
{ AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
|
|
|
|
|
AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
|
|
|
|
|
{ AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 }
|
|
|
|
|
{ AF_BLUE_STRING_MAX, 0 }
|
|
|
|
|
|
2015-09-28 09:45:56 +02:00
|
|
|
|
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 }
|
|
|
|
|
|
2014-05-01 17:24:19 +02:00
|
|
|
|
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 }
|
|
|
|
|
|
2015-09-04 10:28:53 +02:00
|
|
|
|
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 }
|
|
|
|
|
|
2015-12-13 15:54:17 +01:00
|
|
|
|
AF_BLUE_STRINGSET_MYMR
|
|
|
|
|
{ AF_BLUE_STRING_MYANMAR_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
|
|
|
|
|
AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
|
|
|
|
|
{ AF_BLUE_STRING_MYANMAR_BOTTOM, 0 }
|
|
|
|
|
{ AF_BLUE_STRING_MYANMAR_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
|
|
|
|
|
{ AF_BLUE_STRING_MYANMAR_DESCENDER, 0 }
|
|
|
|
|
{ AF_BLUE_STRING_MAX, 0 }
|
|
|
|
|
|
2014-10-18 11:01:14 +02:00
|
|
|
|
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 }
|
|
|
|
|
|
2015-01-31 11:01:33 +01:00
|
|
|
|
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 }
|
|
|
|
|
|
|
|
|
|
|
2013-08-25 08:01:41 +02:00
|
|
|
|
#ifdef AF_CONFIG_OPTION_CJK
|
|
|
|
|
|
|
|
|
|
AF_BLUE_STRINGSET_HANI
|
2014-04-20 22:11:27 +02:00
|
|
|
|
{ AF_BLUE_STRING_CJK_TOP, AF_BLUE_PROPERTY_CJK_TOP }
|
|
|
|
|
{ AF_BLUE_STRING_CJK_BOTTOM, 0 }
|
2013-08-25 08:01:41 +02:00
|
|
|
|
#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
|
2014-04-20 22:11:27 +02:00
|
|
|
|
{ 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 }
|
2013-08-25 08:01:41 +02:00
|
|
|
|
#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
|
2014-04-20 22:11:27 +02:00
|
|
|
|
{ AF_BLUE_STRING_MAX, 0 }
|
2013-08-25 08:01:41 +02:00
|
|
|
|
|
|
|
|
|
#endif /* AF_CONFIG_OPTION_CJK */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// END
|