RIP, Vernon...
[ttfautohint.git] / lib / tablue.dat
blobb5c7f4d428841d700c0e4460de0b52a7dc3a857f
1 // tablue.dat
2 //
3 // Auto-fitter data for blue strings.
4 //
5 // Copyright (C) 2013-2016 by Werner Lemberg.
6 //
7 // This file is part of the ttfautohint library, and may only be used,
8 // modified, and distributed under the terms given in `COPYING'. By
9 // continuing to use, modify, or distribute this file you indicate that you
10 // have read `COPYING' and understand and accept it fully.
12 // The file `COPYING' mentioned in the previous paragraph is distributed
13 // with the ttfautohint library.
15 // originally file `afblue.dat' (2013-Sep-22) from FreeType */
18 // This file contains data specific to blue zones. It gets processed by
19 // a script to simulate `jagged arrays', with enumeration values holding
20 // offsets into the arrays.
22 // The format of the file is rather simple: A section starts with three
23 // labels separated by whitespace and followed by a colon (everything in a
24 // single line); the first label gives the name of the enumeration template,
25 // the second the name of the array template, and the third the name of the
26 // `maximum' template. The script then fills the corresponding templates
27 // (indicated by `@' characters around the name).
29 // A section contains one or more data records. Each data record consists
30 // of two or more lines. The first line holds the enumeration name, and the
31 // remaining lines the corresponding array data.
33 // There are two possible representations for array data.
35 // - A string of characters or character clusters (for example, representing
36 // Aksharas, Devanagari syllables) in UTF-8 encoding enclosed in double
37 // quotes, using C syntax, where the elements are separated by spaces.
38 // There can be only one string per line, thus the starting and ending
39 // double quote must be the first and last character in the line,
40 // respectively, ignoring whitespace before and after the string. If
41 // there are multiple strings (in multiple lines), they are concatenated
42 // to a single string. In the output, a string gets represented as a
43 // series of singles bytes, followed by a zero byte. The enumeration
44 // values simply hold byte offsets to the start of the corresponding
45 // strings.
47 // For strings, the `maximum' template holds the maximum number of
48 // non-space characters in all strings.
50 // - Data blocks enclosed in balanced braces, which get copied verbatim and
51 // which can span multiple lines. The opening brace of a block must be
52 // the first character of a line (ignoring whitespace), and the closing
53 // brace the last (ignoring whitespace also). The script appends a comma
54 // character after each block and counts the number of blocks to set the
55 // enumeration values.
57 // For data blocks, the `maximum' template holds the maximum number of
58 // array elements.
60 // A section can contain either strings only or data blocks only.
62 // A comment line starts with `//'; it gets removed. A preprocessor
63 // directive line (using the standard syntax of `cpp') starts with `#' and
64 // gets copied verbatim to both the enumeration and the array. Whitespace
65 // outside of a string is insignificant.
67 // Preprocessor directives are ignored while the script computes maximum
68 // values; this essentially means that the maximum values can easily be too
69 // large. Given that the purpose of those values is to create local
70 // fixed-size arrays at compile time for further processing of the blue zone
71 // data, this isn't a problem. Note the the final zero byte of a string is
72 // not counted. Note also that the count holds the number of UTF-8 encoded
73 // characters, not bytes.
76 // The blue zone string data, to be used in the blue stringsets below.
78 TA_BLUE_STRING_ENUM TA_BLUE_STRINGS_ARRAY TA_BLUE_STRING_MAX_LEN:
80 TA_BLUE_STRING_ARABIC_TOP
81 "ا إ ل ك ط ظ"
82 TA_BLUE_STRING_ARABIC_BOTTOM
83 "ت ث ط ظ ك"
84 // We don't necessarily have access to medial forms via Unicode in case
85 // Arabic presentational forms are missing. The only character that is
86 // guaranteed to have the same vertical position with joining (this is,
87 // non-isolated) forms is U+0640, ARABIC TATWEEL, which must join both
88 // round and flat curves.
89 TA_BLUE_STRING_ARABIC_JOIN
90 "ـ"
92 TA_BLUE_STRING_ARMENIAN_CAPITAL_TOP
93 "Ա Մ Ւ Փ Բ Գ Դ Օ"
94 TA_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM
95 "Ւ Ո Փ Ճ Շ Ս Տ Օ"
96 TA_BLUE_STRING_ARMENIAN_SMALL_ASCENDER
97 "ե է ի մ վ փ ֆ փ"
98 TA_BLUE_STRING_ARMENIAN_SMALL_TOP
99 "ա յ ւ ս գ ջ ր օ"
100 TA_BLUE_STRING_ARMENIAN_SMALL_BOTTOM
101 "հ ո ճ ա ե ծ ս օ"
102 TA_BLUE_STRING_ARMENIAN_SMALL_DESCENDER
103 "բ ը ի լ ղ պ փ ց"
105 TA_BLUE_STRING_BENGALI_BASE
106 "অ ড ত ন ব ভ ল ক"
107 TA_BLUE_STRING_BENGALI_TOP
108 "ই ট ঠ ি ী ৈ ৗ"
109 TA_BLUE_STRING_BENGALI_HEAD
110 "ও এ ড ত ন ব ল ক"
112 TA_BLUE_STRING_CHEROKEE_CAPITAL
113 "Ꮖ Ꮋ Ꭼ Ꮓ Ꭴ Ꮳ Ꭶ Ꮥ"
114 TA_BLUE_STRING_CHEROKEE_SMALL_ASCENDER
115 "ꮒ ꮤ ꮶ ꭴ ꭾ ꮗ ꮝ ꮿ"
116 TA_BLUE_STRING_CHEROKEE_SMALL
117 "ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ"
118 TA_BLUE_STRING_CHEROKEE_SMALL_DESCENDER
119 "ᏸ ꮐ ꭹ ꭻ"
121 TA_BLUE_STRING_CYRILLIC_CAPITAL_TOP
122 "Б В Е П З О С Э"
123 TA_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM
124 "Б В Е Ш З О С Э"
125 TA_BLUE_STRING_CYRILLIC_SMALL
126 "х п н ш е з о с"
127 TA_BLUE_STRING_CYRILLIC_SMALL_DESCENDER
128 "р у ф"
130 TA_BLUE_STRING_DEVANAGARI_BASE
131 "क न म उ छ ट ठ ड"
132 TA_BLUE_STRING_DEVANAGARI_TOP
133 "ई ऐ ओ औ ि ी ो ौ"
134 // note that some fonts have extreme variation in the height of the
135 // round head elements; for this reason we also define the `base'
136 // blue zone, which must be always present
137 TA_BLUE_STRING_DEVANAGARI_HEAD
138 "क म अ आ थ ध भ श"
139 TA_BLUE_STRING_DEVANAGARI_BOTTOM
140 "ु ृ"
142 TA_BLUE_STRING_ETHIOPIC_TOP
143 "ሀ ሃ ዘ ፐ ማ በ ዋ ዐ"
144 TA_BLUE_STRING_ETHIOPIC_BOTTOM
145 "ለ ሐ በ ዘ ሀ ሪ ዐ ጨ"
147 TA_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP
148 "გ დ ე ვ თ ი ო ღ"
149 TA_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM
150 "ა ზ მ ს შ ძ ხ პ"
151 TA_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER
152 "ს ხ ქ ზ მ შ ჩ წ"
153 TA_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER
154 "ე ვ ჟ ტ უ ფ ქ ყ"
156 TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP
157 "Ⴑ Ⴇ Ⴙ Ⴜ Ⴄ Ⴅ Ⴓ Ⴚ"
158 TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM
159 "Ⴄ Ⴅ Ⴇ Ⴈ Ⴆ Ⴑ Ⴊ Ⴋ"
161 TA_BLUE_STRING_GEORGIAN_NUSKHURI_TOP
162 "ⴁ ⴗ ⴂ ⴄ ⴅ ⴇ ⴔ ⴖ"
163 TA_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM
164 "ⴈ ⴌ ⴖ ⴎ ⴃ ⴆ ⴋ ⴢ"
165 TA_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER
166 "ⴐ ⴑ ⴓ ⴕ ⴙ ⴛ ⴡ ⴣ"
167 TA_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER
168 "ⴄ ⴅ ⴔ ⴕ ⴁ ⴂ ⴘ ⴝ"
170 TA_BLUE_STRING_GREEK_CAPITAL_TOP
171 "Γ Β Ε Ζ Θ Ο Ω"
172 TA_BLUE_STRING_GREEK_CAPITAL_BOTTOM
173 "Β Δ Ζ Ξ Θ Ο"
174 TA_BLUE_STRING_GREEK_SMALL_BETA_TOP
175 "β θ δ ζ λ ξ"
176 TA_BLUE_STRING_GREEK_SMALL
177 "α ε ι ο π σ τ ω"
178 TA_BLUE_STRING_GREEK_SMALL_DESCENDER
179 "β γ η μ ρ φ χ ψ"
181 TA_BLUE_STRING_GUJARATI_TOP
182 "ત ન ઋ ઌ છ ટ ર ૦"
183 TA_BLUE_STRING_GUJARATI_BOTTOM
184 "ખ ગ ઘ ઞ ઇ ઈ ઠ જ"
185 TA_BLUE_STRING_GUJARATI_ASCENDER
186 "ઈ ઊ િ ી લી શ્ચિ જિ સી"
187 TA_BLUE_STRING_GUJARATI_DESCENDER
188 "ુ ૃ ૄ ખુ છૃ છૄ"
189 TA_BLUE_STRING_GUJARATI_DIGIT_TOP
190 "૦ ૧ ૨ ૩ ૭"
192 TA_BLUE_STRING_GURMUKHI_BASE
193 "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
194 TA_BLUE_STRING_GURMUKHI_HEAD
195 "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
196 TA_BLUE_STRING_GURMUKHI_TOP
197 "ਇ ਈ ਉ ਏ ਓ ੳ ਿ ੀ"
198 TA_BLUE_STRING_GURMUKHI_BOTTOM
199 "ਅ ਏ ਓ ਗ ਜ ਠ ਰ ਸ"
200 TA_BLUE_STRING_GURMUKHI_DIGIT_TOP
201 "੦ ੧ ੨ ੩ ੭"
203 TA_BLUE_STRING_HEBREW_TOP
204 "ב ד ה ח ך כ ם ס"
205 TA_BLUE_STRING_HEBREW_BOTTOM
206 "ב ט כ ם ס צ"
207 TA_BLUE_STRING_HEBREW_DESCENDER
208 "ק ך ן ף ץ"
210 TA_BLUE_STRING_KANNADA_TOP
211 "ಇ ಊ ಐ ಣ ಸಾ ನಾ ದಾ ರಾ"
212 TA_BLUE_STRING_KANNADA_BOTTOM
213 "ಅ ಉ ಎ ಲ ೦ ೨ ೬ ೭"
215 TA_BLUE_STRING_KHMER_TOP
216 "ខ ទ ន ឧ ឩ ា"
217 TA_BLUE_STRING_KHMER_SUBSCRIPT_TOP
218 "ក្ក ក្ខ ក្គ ក្ថ"
219 TA_BLUE_STRING_KHMER_BOTTOM
220 "ខ ឃ ច ឋ ប ម យ ឲ"
221 TA_BLUE_STRING_KHMER_DESCENDER
222 "ត្រ រៀ ឲ្យ អឿ"
223 TA_BLUE_STRING_KHMER_LARGE_DESCENDER
224 "ន្ត្រៃ ង្ខ្យ ក្បៀ ច្រៀ ន្តឿ ល្បឿ"
226 TA_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP
227 "᧠ ᧡"
228 TA_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM
229 "᧶ ᧹"
231 TA_BLUE_STRING_LAO_TOP
232 "າ ດ ອ ມ ລ ວ ຣ ງ"
233 TA_BLUE_STRING_LAO_BOTTOM
234 "າ ອ ບ ຍ ຣ ຮ ວ ຢ"
235 TA_BLUE_STRING_LAO_ASCENDER
236 "ປ ຢ ຟ ຝ"
237 TA_BLUE_STRING_LAO_LARGE_ASCENDER
238 "ໂ ໄ ໃ"
239 TA_BLUE_STRING_LAO_DESCENDER
240 "ງ ຊ ຖ ຽ ໆ ຯ"
242 TA_BLUE_STRING_LATIN_CAPITAL_TOP
243 "T H E Z O C Q S"
244 TA_BLUE_STRING_LATIN_CAPITAL_BOTTOM
245 "H E Z L O C U S"
246 TA_BLUE_STRING_LATIN_SMALL_F_TOP
247 "f i j k d b h"
248 TA_BLUE_STRING_LATIN_SMALL
249 "x z r o e s c"
250 TA_BLUE_STRING_LATIN_SMALL_DESCENDER
251 "p q g j y"
253 // we assume that both the subscript and superscript ranges
254 // don't contain oldstyle digits (actually, most fonts probably
255 // have digits only in those ranges)
256 TA_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP
257 "₀ ₃ ₅ ₇ ₈"
258 TA_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM
259 "₀ ₁ ₂ ₃ ₈"
260 TA_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP
261 "ᵢ ⱼ ₕ ₖ ₗ"
262 TA_BLUE_STRING_LATIN_SUBS_SMALL
263 "ₐ ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ"
264 TA_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER
265 "ᵦ ᵧ ᵨ ᵩ ₚ"
267 TA_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP
268 "⁰ ³ ⁵ ⁷ ᵀ ᴴ ᴱ ᴼ"
269 TA_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM
270 "⁰ ¹ ² ³ ᴱ ᴸ ᴼ ᵁ"
271 TA_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP
272 "ᵇ ᵈ ᵏ ʰ ʲ ᶠ ⁱ"
273 TA_BLUE_STRING_LATIN_SUPS_SMALL
274 "ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ"
275 TA_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER
276 "ᵖ ʸ ᵍ"
278 TA_BLUE_STRING_MALAYALAM_TOP
279 "ഒ ട ഠ റ ച പ ച്ച പ്പ"
280 TA_BLUE_STRING_MALAYALAM_BOTTOM
281 "ട ഠ ധ ശ ഘ ച ഥ ല"
283 TA_BLUE_STRING_MYANMAR_TOP
284 "ခ ဂ င ဒ ဝ ၥ ၊ ။"
285 TA_BLUE_STRING_MYANMAR_BOTTOM
286 "င ဎ ဒ ပ ဗ ဝ ၊ ။"
287 TA_BLUE_STRING_MYANMAR_ASCENDER
288 "ဩ ြ ၍ ၏ ၆ ါ ိ"
289 TA_BLUE_STRING_MYANMAR_DESCENDER
290 "ဉ ည ဥ ဩ ဨ ၂ ၅ ၉"
292 TA_BLUE_STRING_SINHALA_TOP
293 "ඉ ක ඝ ඳ ප ය ල ෆ"
294 TA_BLUE_STRING_SINHALA_BOTTOM
295 "එ ඔ ඝ ජ ට ථ ධ ර"
296 TA_BLUE_STRING_SINHALA_DESCENDER
297 "ද ඳ උ ල තූ තු බු දු"
299 TA_BLUE_STRING_TAMIL_TOP
300 "உ ஒ ஓ ற ஈ க ங ச"
301 TA_BLUE_STRING_TAMIL_BOTTOM
302 "க ச ல ஶ உ ங ட ப"
304 TA_BLUE_STRING_TELUGU_TOP
305 "ఇ ఌ ఙ ఞ ణ ఱ ౯"
306 TA_BLUE_STRING_TELUGU_BOTTOM
307 "అ క చ ర ఽ ౨ ౬"
309 TA_BLUE_STRING_THAI_TOP
310 "บ เ แ อ ก า"
311 TA_BLUE_STRING_THAI_BOTTOM
312 "บ ป ษ ฯ อ ย ฮ"
313 TA_BLUE_STRING_THAI_ASCENDER
314 "ป ฝ ฟ"
315 TA_BLUE_STRING_THAI_LARGE_ASCENDER
316 "โ ใ ไ"
317 TA_BLUE_STRING_THAI_DESCENDER
318 "ฎ ฏ ฤ ฦ"
319 TA_BLUE_STRING_THAI_LARGE_DESCENDER
320 "ญ ฐ"
321 TA_BLUE_STRING_THAI_DIGIT_TOP
322 "๐ ๑ ๓"
324 // The blue zone stringsets, as used in the script styles, cf. `tastyles.h'.
326 // The TA_BLUE_PROPERTY_XXX flags are defined in `tablue.h'; here some
327 // explanations.
329 // A blue zone in general is defined by a reference and an overshoot line.
330 // During the hinting process, all coordinate values between those two lines
331 // are set equal to the reference value, provided that the blue zone is not
332 // wider than 0.75 pixels (otherwise the blue zone gets ignored). All
333 // entries must have `TA_BLUE_STRING_MAX' as the final line.
335 // During the glyph analysis, edges are sorted from bottom to top, and then
336 // sequentially checked, edge by edge, against the blue zones in the order
337 // given below.
340 // latin auto-hinter
341 // -----------------
343 // Characters in a blue string are automatically classified as having a flat
344 // (reference) or a round (overshoot) extremum. The blue zone is then set
345 // up by the mean values of all flat extrema and all round extrema,
346 // respectively. Only horizontal blue zones (i.e., adjusting vertical
347 // coordinate values) are supported.
349 // Some scripts like Khmer need character composition to get all necessary
350 // blue zones, since Unicode only provides an abstract data model that
351 // doesn't represent all possible glyph shapes. For such character
352 // clusters, the HarfBuzz library is used to convert them into the
353 // corresponding glyphs. The largest glyph element (where `largest' can be
354 // either `largest ascender' or `largest descender') then defines the
355 // corresponding flat or round extremum.
357 // For the latin auto-hinter, the overshoot should be larger than the
358 // reference for top zones, and vice versa for bottom zones.
360 // LATIN_TOP
361 // Take the maximum flat and round coordinate values of the blue string
362 // characters for computing the blue zone's reference and overshoot
363 // values.
365 // If not set, take the minimum values.
367 // Mutually exclusive with `LATIN_SUB_TOP'.
369 // LATIN_SUB_TOP
370 // For all glyphs of a character cluster, compute the maximum flat
371 // and round coordinate values of each component, then take the
372 // smallest of the maximum values. The idea is to get the top of
373 // subscript glyphs, as used in Khmer, for example. Note that
374 // this mechanism doesn't work for ordinary ligatures.
376 // This flags indicates a secondary blue zone: It gets removed if
377 // there is a non-LATIN_SUB_TOP blue zone at the same coordinate
378 // value (after scaling).
380 // Mutually exclusive with `LATIN_TOP'.
382 // LATIN_NEUTRAL
383 // Ignore round extrema and define the blue zone with flat values only.
384 // Both top and bottom of contours can match. This is useful for
385 // scripts like Devanagari where vowel signs attach to the base
386 // character and are implemented as components of composite glyphs.
388 // If not set, both round and flat extrema are taken into account.
389 // Additionally, only the top or the bottom of a contour can match,
390 // depending on the LATIN_TOP flag.
392 // Neutral blue zones should always follow non-neutral blue zones.
394 // LATIN_X_HEIGHT
395 // Scale all glyphs vertically from the corresponding script to make the
396 // reference line of this blue zone align on the grid. The scaling
397 // takes place before all other blue zones get aligned to the grid.
398 // Only one blue character string of a script style can have this flag.
400 // LATIN_LONG
401 // Apply an additional constraint for blue zone values: Don't
402 // necessarily use the extremum as-is but a segment of the topmost (or
403 // bottommost) contour that is longer than a heuristic threshold, and
404 // which is not too far away vertically from the real extremum. This
405 // ensures that small bumps in the outline are ignored (for example, the
406 // `vertical serifs' found in many Hebrew glyph designs).
408 // The segment must be at least EM/25 font units long, and the distance
409 // to the extremum must be smaller than EM/4.
412 TA_BLUE_STRINGSET_ENUM TA_BLUE_STRINGSETS_ARRAY TA_BLUE_STRINGSET_MAX_LEN:
414 TA_BLUE_STRINGSET_ARAB
415 { TA_BLUE_STRING_ARABIC_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
416 { TA_BLUE_STRING_ARABIC_BOTTOM, 0 }
417 { TA_BLUE_STRING_ARABIC_JOIN, TA_BLUE_PROPERTY_LATIN_NEUTRAL }
418 { TA_BLUE_STRING_MAX, 0 }
420 TA_BLUE_STRINGSET_ARMN
421 { TA_BLUE_STRING_ARMENIAN_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
422 { TA_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM, 0 }
423 { TA_BLUE_STRING_ARMENIAN_SMALL_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }
424 { TA_BLUE_STRING_ARMENIAN_SMALL_TOP, TA_BLUE_PROPERTY_LATIN_TOP |
425 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
426 { TA_BLUE_STRING_ARMENIAN_SMALL_BOTTOM, 0 }
427 { TA_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0 }
428 { TA_BLUE_STRING_MAX, 0 }
430 TA_BLUE_STRINGSET_BENG
431 { TA_BLUE_STRING_BENGALI_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
432 { TA_BLUE_STRING_BENGALI_HEAD, TA_BLUE_PROPERTY_LATIN_TOP }
433 { TA_BLUE_STRING_BENGALI_BASE, TA_BLUE_PROPERTY_LATIN_TOP |
434 TA_BLUE_PROPERTY_LATIN_NEUTRAL |
435 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
436 { TA_BLUE_STRING_BENGALI_BASE, 0 }
437 { TA_BLUE_STRING_MAX, 0 }
439 TA_BLUE_STRINGSET_CHER
440 { TA_BLUE_STRING_CHEROKEE_CAPITAL, TA_BLUE_PROPERTY_LATIN_TOP }
441 { TA_BLUE_STRING_CHEROKEE_CAPITAL, 0 }
442 { TA_BLUE_STRING_CHEROKEE_SMALL_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }
443 { TA_BLUE_STRING_CHEROKEE_SMALL, TA_BLUE_PROPERTY_LATIN_TOP |
444 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
445 { TA_BLUE_STRING_CHEROKEE_SMALL, 0 }
446 { TA_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0 }
447 { TA_BLUE_STRING_MAX, 0 }
449 TA_BLUE_STRINGSET_CYRL
450 { TA_BLUE_STRING_CYRILLIC_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
451 { TA_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 }
452 { TA_BLUE_STRING_CYRILLIC_SMALL, TA_BLUE_PROPERTY_LATIN_TOP |
453 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
454 { TA_BLUE_STRING_CYRILLIC_SMALL, 0 }
455 { TA_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0 }
456 { TA_BLUE_STRING_MAX, 0 }
458 TA_BLUE_STRINGSET_DEVA
459 { TA_BLUE_STRING_DEVANAGARI_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
460 { TA_BLUE_STRING_DEVANAGARI_HEAD, TA_BLUE_PROPERTY_LATIN_TOP }
461 { TA_BLUE_STRING_DEVANAGARI_BASE, TA_BLUE_PROPERTY_LATIN_TOP |
462 TA_BLUE_PROPERTY_LATIN_NEUTRAL |
463 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
464 { TA_BLUE_STRING_DEVANAGARI_BASE, 0 }
465 { TA_BLUE_STRING_DEVANAGARI_BOTTOM, 0 }
466 { TA_BLUE_STRING_MAX, 0 }
468 TA_BLUE_STRINGSET_ETHI
469 { TA_BLUE_STRING_ETHIOPIC_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
470 { TA_BLUE_STRING_ETHIOPIC_BOTTOM, 0 }
471 { TA_BLUE_STRING_MAX, 0 }
473 // blue zones for Mtavruli are missing (not yet defined in Unicode)
474 TA_BLUE_STRINGSET_GEOR
475 { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP, TA_BLUE_PROPERTY_LATIN_TOP |
476 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
477 { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM, 0 }
478 { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }
479 { TA_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0 }
480 { TA_BLUE_STRING_MAX, 0 }
482 TA_BLUE_STRINGSET_GEOK
483 { TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
484 { TA_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0 }
485 { TA_BLUE_STRING_GEORGIAN_NUSKHURI_TOP, TA_BLUE_PROPERTY_LATIN_TOP |
486 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
487 { TA_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM, 0 }
488 { TA_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }
489 { TA_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0 }
490 { TA_BLUE_STRING_MAX, 0 }
492 TA_BLUE_STRINGSET_GREK
493 { TA_BLUE_STRING_GREEK_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
494 { TA_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0 }
495 { TA_BLUE_STRING_GREEK_SMALL_BETA_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
496 { TA_BLUE_STRING_GREEK_SMALL, TA_BLUE_PROPERTY_LATIN_TOP |
497 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
498 { TA_BLUE_STRING_GREEK_SMALL, 0 }
499 { TA_BLUE_STRING_GREEK_SMALL_DESCENDER, 0 }
500 { TA_BLUE_STRING_MAX, 0 }
502 TA_BLUE_STRINGSET_GUJR
503 { TA_BLUE_STRING_GUJARATI_TOP, TA_BLUE_PROPERTY_LATIN_TOP |
504 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
505 { TA_BLUE_STRING_GUJARATI_BOTTOM, 0 }
506 { TA_BLUE_STRING_GUJARATI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }
507 { TA_BLUE_STRING_GUJARATI_DESCENDER, 0 }
508 { TA_BLUE_STRING_GUJARATI_DIGIT_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
509 { TA_BLUE_STRING_MAX, 0 }
511 TA_BLUE_STRINGSET_GURU
512 { TA_BLUE_STRING_GURMUKHI_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
513 { TA_BLUE_STRING_GURMUKHI_HEAD, TA_BLUE_PROPERTY_LATIN_TOP }
514 { TA_BLUE_STRING_GURMUKHI_BASE, TA_BLUE_PROPERTY_LATIN_TOP |
515 TA_BLUE_PROPERTY_LATIN_NEUTRAL |
516 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
517 { TA_BLUE_STRING_GURMUKHI_BOTTOM, 0 }
518 { TA_BLUE_STRING_GURMUKHI_DIGIT_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
519 { TA_BLUE_STRING_MAX, 0 }
521 TA_BLUE_STRINGSET_HEBR
522 { TA_BLUE_STRING_HEBREW_TOP, TA_BLUE_PROPERTY_LATIN_TOP |
523 TA_BLUE_PROPERTY_LATIN_LONG }
524 { TA_BLUE_STRING_HEBREW_BOTTOM, 0 }
525 { TA_BLUE_STRING_HEBREW_DESCENDER, 0 }
526 { TA_BLUE_STRING_MAX, 0 }
528 TA_BLUE_STRINGSET_KNDA
529 { TA_BLUE_STRING_KANNADA_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
530 { TA_BLUE_STRING_KANNADA_BOTTOM, 0 }
531 { TA_BLUE_STRING_MAX, 0 }
533 TA_BLUE_STRINGSET_KHMR
534 { TA_BLUE_STRING_KHMER_TOP, TA_BLUE_PROPERTY_LATIN_TOP |
535 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
536 { TA_BLUE_STRING_KHMER_SUBSCRIPT_TOP, TA_BLUE_PROPERTY_LATIN_SUB_TOP }
537 { TA_BLUE_STRING_KHMER_BOTTOM, 0 }
538 { TA_BLUE_STRING_KHMER_DESCENDER, 0 }
539 { TA_BLUE_STRING_KHMER_LARGE_DESCENDER, 0 }
540 { TA_BLUE_STRING_MAX, 0 }
542 TA_BLUE_STRINGSET_KHMS
543 { TA_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP, TA_BLUE_PROPERTY_LATIN_TOP |
544 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
545 { TA_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 }
546 { TA_BLUE_STRING_MAX, 0 }
548 TA_BLUE_STRINGSET_LAO
549 { TA_BLUE_STRING_LAO_TOP, TA_BLUE_PROPERTY_LATIN_TOP |
550 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
551 { TA_BLUE_STRING_LAO_BOTTOM, 0 }
552 { TA_BLUE_STRING_LAO_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }
553 { TA_BLUE_STRING_LAO_LARGE_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }
554 { TA_BLUE_STRING_LAO_DESCENDER, 0 }
555 { TA_BLUE_STRING_MAX, 0 }
557 TA_BLUE_STRINGSET_LATN
558 { TA_BLUE_STRING_LATIN_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
559 { TA_BLUE_STRING_LATIN_CAPITAL_BOTTOM, 0 }
560 { TA_BLUE_STRING_LATIN_SMALL_F_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
561 { TA_BLUE_STRING_LATIN_SMALL, TA_BLUE_PROPERTY_LATIN_TOP |
562 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
563 { TA_BLUE_STRING_LATIN_SMALL, 0 }
564 { TA_BLUE_STRING_LATIN_SMALL_DESCENDER, 0 }
565 { TA_BLUE_STRING_MAX, 0 }
567 TA_BLUE_STRINGSET_LATB
568 { TA_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
569 { TA_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM, 0 }
570 { TA_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
571 { TA_BLUE_STRING_LATIN_SUBS_SMALL, TA_BLUE_PROPERTY_LATIN_TOP |
572 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
573 { TA_BLUE_STRING_LATIN_SUBS_SMALL, 0 }
574 { TA_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0 }
575 { TA_BLUE_STRING_MAX, 0 }
577 TA_BLUE_STRINGSET_LATP
578 { TA_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
579 { TA_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM, 0 }
580 { TA_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
581 { TA_BLUE_STRING_LATIN_SUPS_SMALL, TA_BLUE_PROPERTY_LATIN_TOP |
582 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
583 { TA_BLUE_STRING_LATIN_SUPS_SMALL, 0 }
584 { TA_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0 }
585 { TA_BLUE_STRING_MAX, 0 }
587 TA_BLUE_STRINGSET_MLYM
588 { TA_BLUE_STRING_MALAYALAM_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
589 { TA_BLUE_STRING_MALAYALAM_BOTTOM, 0 }
590 { TA_BLUE_STRING_MAX, 0 }
592 TA_BLUE_STRINGSET_MYMR
593 { TA_BLUE_STRING_MYANMAR_TOP, TA_BLUE_PROPERTY_LATIN_TOP |
594 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
595 { TA_BLUE_STRING_MYANMAR_BOTTOM, 0 }
596 { TA_BLUE_STRING_MYANMAR_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }
597 { TA_BLUE_STRING_MYANMAR_DESCENDER, 0 }
598 { TA_BLUE_STRING_MAX, 0 }
600 TA_BLUE_STRINGSET_NONE
601 { TA_BLUE_STRING_MAX, 0 }
603 TA_BLUE_STRINGSET_SINH
604 { TA_BLUE_STRING_SINHALA_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
605 { TA_BLUE_STRING_SINHALA_BOTTOM, 0 }
606 { TA_BLUE_STRING_SINHALA_DESCENDER, 0 }
607 { TA_BLUE_STRING_MAX, 0 }
609 TA_BLUE_STRINGSET_TAML
610 { TA_BLUE_STRING_TAMIL_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
611 { TA_BLUE_STRING_TAMIL_BOTTOM, 0 }
612 { TA_BLUE_STRING_MAX, 0 }
614 TA_BLUE_STRINGSET_TELU
615 { TA_BLUE_STRING_TELUGU_TOP, TA_BLUE_PROPERTY_LATIN_TOP }
616 { TA_BLUE_STRING_TELUGU_BOTTOM, 0 }
617 { TA_BLUE_STRING_MAX, 0 }
619 TA_BLUE_STRINGSET_THAI
620 { TA_BLUE_STRING_THAI_TOP, TA_BLUE_PROPERTY_LATIN_TOP |
621 TA_BLUE_PROPERTY_LATIN_X_HEIGHT }
622 { TA_BLUE_STRING_THAI_BOTTOM, 0 }
623 { TA_BLUE_STRING_THAI_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }
624 { TA_BLUE_STRING_THAI_LARGE_ASCENDER, TA_BLUE_PROPERTY_LATIN_TOP }
625 { TA_BLUE_STRING_THAI_DESCENDER, 0 }
626 { TA_BLUE_STRING_THAI_LARGE_DESCENDER, 0 }
627 { TA_BLUE_STRING_THAI_DIGIT_TOP, 0 }
628 { TA_BLUE_STRING_MAX, 0 }
630 // END