summaryrefslogtreecommitdiffstats
path: root/src/autofit/afblue.dat
blob: d488f3faea6922ce65563ab9c6dda9f3d5d721e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
//  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