1// afblue.dat
2//
3//   Auto-fitter data for blue strings.
4//
5// Copyright (C) 2013-2021 by
6// David Turner, Robert Wilhelm, and Werner Lemberg.
7//
8// This file is part of the FreeType project, and may only be used,
9// modified, and distributed under the terms of the FreeType project
10// license, LICENSE.TXT.  By continuing to use, modify, or distribute
11// this file you indicate that you have read the license and
12// understand and accept it fully.
13
14
15// This file contains data specific to blue zones.  It gets processed by
16// a script to simulate `jagged arrays', with enumeration values holding
17// offsets into the arrays.
18//
19// The format of the file is rather simple:  A section starts with three
20// labels separated by whitespace and followed by a colon (everything in a
21// single line); the first label gives the name of the enumeration template,
22// the second the name of the array template, and the third the name of the
23// `maximum' template.  The script then fills the corresponding templates
24// (indicated by `@' characters around the name).
25//
26// A section contains one or more data records.  Each data record consists
27// of two or more lines.  The first line holds the enumeration name, and the
28// remaining lines the corresponding array data.
29//
30// There are two possible representations for array data.
31//
32// - A string of characters or character clusters (for example, representing
33//   Aksharas, Devanagari syllables) in UTF-8 encoding enclosed in double
34//   quotes, using C syntax, where the elements are separated by spaces.
35//   There can be only one string per line, thus the starting and ending
36//   double quote must be the first and last character in the line,
37//   respectively, ignoring whitespace before and after the string.  If
38//   there are multiple strings (in multiple lines), they are concatenated
39//   to a single string.  In the output, a string gets represented as a
40//   series of singles bytes, followed by a zero byte.  The enumeration
41//   values simply hold byte offsets to the start of the corresponding
42//   strings.
43//
44//   For strings, the `maximum' template holds the maximum number of
45//   non-space characters in all strings.
46//
47// - Data blocks enclosed in balanced braces, which get copied verbatim and
48//   which can span multiple lines.  The opening brace of a block must be
49//   the first character of a line (ignoring whitespace), and the closing
50//   brace the last (ignoring whitespace also).  The script appends a comma
51//   character after each block and counts the number of blocks to set the
52//   enumeration values.
53//
54//   For data blocks, the `maximum' template holds the maximum number of
55//   array elements.
56//
57// A section can contain either strings only or data blocks only.
58//
59// A comment line starts with `//'; it gets removed.  A preprocessor
60// directive line (using the standard syntax of `cpp') starts with `#' and
61// gets copied verbatim to both the enumeration and the array.  Whitespace
62// outside of a string is insignificant.
63//
64// Preprocessor directives are ignored while the script computes maximum
65// values; this essentially means that the maximum values can easily be too
66// large.  Given that the purpose of those values is to create local
67// fixed-size arrays at compile time for further processing of the blue zone
68// data, this isn't a problem.  Note the final zero byte of a string is not
69// counted.  Note also that the count holds the number of UTF-8 encoded
70// characters, not bytes.
71
72
73// The blue zone string data, to be used in the blue stringsets below.
74
75AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
76
77  AF_BLUE_STRING_ADLAM_CAPITAL_TOP
78    "�� �� �� �� �� ��"
79  AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM
80    "�� ��"
81  AF_BLUE_STRING_ADLAM_SMALL_TOP
82    "�� �� �� �� ��"
83  AF_BLUE_STRING_ADLAM_SMALL_BOTTOM
84    "�� �� �� �� �� �� �� ��"
85
86  AF_BLUE_STRING_ARABIC_TOP
87    "ا إ ل ك ط ظ"
88  AF_BLUE_STRING_ARABIC_BOTTOM
89    "ت ث ط ظ ك"
90  // We don't necessarily have access to medial forms via Unicode in case
91  // Arabic presentational forms are missing.  The only character that is
92  // guaranteed to have the same vertical position with joining (this is,
93  // non-isolated) forms is U+0640, ARABIC TATWEEL, which must join both
94  // round and flat curves.
95  AF_BLUE_STRING_ARABIC_JOIN
96    "ـ"
97
98  AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP
99    "Ա Մ Ւ Ս Բ Գ Դ Օ"
100  AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM
101    "Ւ Ո Դ Ճ Շ Ս Տ Օ"
102  AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER
103    "ե է ի մ վ ֆ ճ"
104  AF_BLUE_STRING_ARMENIAN_SMALL_TOP
105    "ա յ ւ ս գ շ ր օ"
106  AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM
107    "հ ո ճ ա ե ծ ս օ"
108  AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER
109    "բ ը ի լ ղ պ փ ց"
110
111  AF_BLUE_STRING_AVESTAN_TOP
112    "�� �� �� ��"
113  AF_BLUE_STRING_AVESTAN_BOTTOM
114    "�� ��"
115
116  AF_BLUE_STRING_BAMUM_TOP
117    "ꚧ ꚨ ꛛ ꛉ ꛁ ꛈ ꛫ ꛯ"
118  AF_BLUE_STRING_BAMUM_BOTTOM
119    "ꚭ ꚳ ꚶ ꛬ ꚢ ꚽ ꛯ ꛲"
120
121  AF_BLUE_STRING_BENGALI_BASE
122    "অ ড ত ন ব ভ ল ক"
123  AF_BLUE_STRING_BENGALI_TOP
124    "ই ট ঠ ি ী ৈ ৗ"
125  AF_BLUE_STRING_BENGALI_HEAD
126    "ও এ ড ত ন ব ল ক"
127
128  AF_BLUE_STRING_BUHID_TOP
129    "ᝐ ᝈ"
130  AF_BLUE_STRING_BUHID_LARGE
131    "ᝅ ᝊ ᝎ"
132  AF_BLUE_STRING_BUHID_SMALL
133    "ᝂ ᝃ ᝉ ᝌ"
134  AF_BLUE_STRING_BUHID_BOTTOM
135    "ᝀ ᝃ ᝆ ᝉ ᝋ ᝏ ᝑ"
136
137  AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP
138    "ᗜ ᖴ ᐁ ᒣ ᑫ ᑎ ᔑ ᗰ"
139  AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM
140    "ᗶ ᖵ ᒧ ᐃ ᑌ ᒍ ᔑ ᗢ"
141  AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP
142    "ᓓ ᓕ ᓀ ᓂ ᓄ ᕄ ᕆ ᘣ"
143  AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM
144    "ᕃ ᓂ ᓀ ᕂ ᓗ ᓚ ᕆ ᘣ"
145  AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP
146    "ᐪ ᙆ ᣘ ᐢ ᒾ ᣗ ᔆ"
147  AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM
148    "ᙆ ᗮ ᒻ ᐞ ᔆ ᒡ ᒢ ᓑ"
149
150  AF_BLUE_STRING_CARIAN_TOP
151    "�� �� �� �� �� �� �� ��"
152  AF_BLUE_STRING_CARIAN_BOTTOM
153    "�� �� �� �� �� �� ��"
154
155  AF_BLUE_STRING_CHAKMA_TOP
156    "�� �� �� �� ��"
157  AF_BLUE_STRING_CHAKMA_BOTTOM
158    "�� �� �� �� ��"
159  AF_BLUE_STRING_CHAKMA_DESCENDER
160    "������ ������ ������ ������ ������"
161
162  AF_BLUE_STRING_CHEROKEE_CAPITAL
163    "Ꮖ Ꮋ Ꭼ Ꮓ Ꭴ Ꮳ Ꭶ Ꮥ"
164  AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER
165    "ꮒ ꮤ ꮶ ꭴ ꭾ ꮗ ꮝ ꮿ"
166  AF_BLUE_STRING_CHEROKEE_SMALL
167    "ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ"
168  AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER
169    "ᏸ ꮐ ꭹ ꭻ"
170
171  AF_BLUE_STRING_COPTIC_CAPITAL_TOP
172    "Ⲍ Ⲏ Ⲡ Ⳟ Ⲟ Ⲑ Ⲥ Ⳋ"
173  AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM
174    "Ⳑ Ⳙ Ⳟ Ⲏ Ⲟ Ⲑ Ⳝ Ⲱ"
175  AF_BLUE_STRING_COPTIC_SMALL_TOP
176    "ⲍ ⲏ ⲡ ⳟ ⲟ ⲑ ⲥ ⳋ"
177  AF_BLUE_STRING_COPTIC_SMALL_BOTTOM
178    "ⳑ ⳙ ⳟ ⲏ ⲟ ⲑ ⳝ Ⳓ"
179
180  AF_BLUE_STRING_CYPRIOT_TOP
181    "�� �� �� �� �� �� �� ��"
182  AF_BLUE_STRING_CYPRIOT_BOTTOM
183    "�� �� �� �� �� �� ��"
184  AF_BLUE_STRING_CYPRIOT_SMALL
185    "�� �� ��"
186
187  AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP
188    "Б В Е П З О С Э"
189  AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM
190    "Б В Е Ш З О С Э"
191  AF_BLUE_STRING_CYRILLIC_SMALL
192    "х п н ш е з о с"
193  AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER
194    "р у ф"
195
196  AF_BLUE_STRING_DESERET_CAPITAL_TOP
197    "�� �� �� �� ��"
198  AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM
199    "�� �� �� �� ��"
200  AF_BLUE_STRING_DESERET_SMALL_TOP
201    "�� �� �� �� ��"
202  AF_BLUE_STRING_DESERET_SMALL_BOTTOM
203    "�� �� �� �� ��"
204
205  AF_BLUE_STRING_DEVANAGARI_BASE
206    "क न म उ छ ट ठ ड"
207  AF_BLUE_STRING_DEVANAGARI_TOP
208    "ई ऐ ओ औ ि ी ो ौ"
209  // note that some fonts have extreme variation in the height of the
210  // round head elements; for this reason we also define the `base'
211  // blue zone, which must be always present
212  AF_BLUE_STRING_DEVANAGARI_HEAD
213    "क म अ आ थ ध भ श"
214  AF_BLUE_STRING_DEVANAGARI_BOTTOM
215    "ु ृ"
216
217  AF_BLUE_STRING_ETHIOPIC_TOP
218    "ሀ ሃ ዘ ፐ ማ በ ዋ ዐ"
219  AF_BLUE_STRING_ETHIOPIC_BOTTOM
220    "ለ ሐ በ ዘ ሀ ሪ ዐ ጨ"
221
222  AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP
223    "გ დ ე ვ თ ი ო ღ"
224  AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM
225    "ა ზ მ ს შ ძ ხ პ"
226  AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER
227    "ს ხ ქ ზ მ შ ჩ წ"
228  AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER
229    "ე ვ ჟ ტ უ ფ ქ ყ"
230
231  AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP
232    "Ⴑ Ⴇ Ⴙ Ⴜ Ⴄ Ⴅ Ⴓ Ⴚ"
233  AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM
234    "Ⴄ Ⴅ Ⴇ Ⴈ Ⴆ Ⴑ Ⴊ Ⴋ"
235
236  AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP
237    "ⴁ ⴗ ⴂ ⴄ ⴅ ⴇ ⴔ ⴖ"
238  AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM
239    "ⴈ ⴌ ⴖ ⴎ ⴃ ⴆ ⴋ ⴢ"
240  AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER
241    "ⴐ ⴑ ⴓ ⴕ ⴙ ⴛ ⴡ ⴣ"
242  AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER
243    "ⴄ ⴅ ⴔ ⴕ ⴁ ⴂ ⴘ ⴝ"
244
245  AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP
246    "Ნ Ჟ Ჳ Ჸ Გ Ე Ო Ჴ"
247  AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM
248    "Ი Ჲ Ო Ჩ Მ Შ Ჯ Ჽ"
249
250  AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP
251    "Ⰵ Ⱄ Ⱚ Ⰴ Ⰲ Ⰺ Ⱛ Ⰻ"
252  AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM
253    "Ⰵ Ⰴ Ⰲ Ⱚ Ⱎ Ⱑ Ⰺ Ⱄ"
254  AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP
255    "ⰵ ⱄ ⱚ ⰴ ⰲ ⰺ ⱛ ⰻ"
256  AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM
257    "ⰵ ⰴ ⰲ ⱚ ⱎ ⱑ ⰺ ⱄ"
258
259  AF_BLUE_STRING_GOTHIC_TOP
260    "�� �� �� �� �� �� �� ��"
261  AF_BLUE_STRING_GOTHIC_BOTTOM
262    "�� �� �� ��"
263
264  AF_BLUE_STRING_GREEK_CAPITAL_TOP
265    "Γ Β Ε Ζ Θ Ο Ω"
266  AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM
267    "Β Δ Ζ Ξ Θ Ο"
268  AF_BLUE_STRING_GREEK_SMALL_BETA_TOP
269    "β θ δ ζ λ ξ"
270  AF_BLUE_STRING_GREEK_SMALL
271    "α ε ι ο π σ τ ω"
272  AF_BLUE_STRING_GREEK_SMALL_DESCENDER
273    "β γ η μ ρ φ χ ψ"
274
275  AF_BLUE_STRING_GUJARATI_TOP
276    "ત ન ઋ ઌ છ ટ ર ૦"
277  AF_BLUE_STRING_GUJARATI_BOTTOM
278    "ખ ગ ઘ ઞ ઇ ઈ ઠ જ"
279  AF_BLUE_STRING_GUJARATI_ASCENDER
280    "ઈ ઊ િ ી લી શ્ચિ જિ સી"
281  AF_BLUE_STRING_GUJARATI_DESCENDER
282    "ુ ૃ ૄ ખુ છૃ છૄ"
283  AF_BLUE_STRING_GUJARATI_DIGIT_TOP
284    "૦ ૧ ૨ ૩ ૭"
285
286  AF_BLUE_STRING_GURMUKHI_BASE
287    "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
288  AF_BLUE_STRING_GURMUKHI_HEAD
289    "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
290  AF_BLUE_STRING_GURMUKHI_TOP
291    "ਇ ਈ ਉ ਏ ਓ ੳ ਿ ੀ"
292  AF_BLUE_STRING_GURMUKHI_BOTTOM
293    "ਅ ਏ ਓ ਗ ਜ ਠ ਰ ਸ"
294  AF_BLUE_STRING_GURMUKHI_DIGIT_TOP
295    "੦ ੧ ੨ ੩ ੭"
296
297  AF_BLUE_STRING_HEBREW_TOP
298    "ב ד ה ח ך כ ם ס"
299  AF_BLUE_STRING_HEBREW_BOTTOM
300    "ב ט כ ם ס צ"
301  AF_BLUE_STRING_HEBREW_DESCENDER
302    "ק ך ן ף ץ"
303
304  AF_BLUE_STRING_KANNADA_TOP
305    "ಇ ಊ ಐ ಣ ಸಾ ನಾ ದಾ ರಾ"
306  AF_BLUE_STRING_KANNADA_BOTTOM
307    "ಅ ಉ ಎ ಲ ೦ ೨ ೬ ೭"
308
309  AF_BLUE_STRING_KAYAH_LI_TOP
310    "꤅ ꤏ ꤁ ꤋ ꤀ ꤍ"
311  AF_BLUE_STRING_KAYAH_LI_BOTTOM
312    "꤈ ꤘ ꤀ ꤍ ꤢ"
313  AF_BLUE_STRING_KAYAH_LI_ASCENDER
314    "ꤖ ꤡ"
315  AF_BLUE_STRING_KAYAH_LI_DESCENDER
316    "ꤑ ꤜ ꤞ"
317  AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER
318    "ꤑ꤬ ꤜ꤭ ꤔ꤬"
319
320  AF_BLUE_STRING_KHMER_TOP
321    "ខ ទ ន ឧ ឩ ា"
322  AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP
323    "ក្ក ក្ខ ក្គ ក្ថ"
324  AF_BLUE_STRING_KHMER_BOTTOM
325    "ខ ឃ ច ឋ ប ម យ ឲ"
326  AF_BLUE_STRING_KHMER_DESCENDER
327    "ត្រ រៀ ឲ្យ អឿ"
328  AF_BLUE_STRING_KHMER_LARGE_DESCENDER
329    "ន្ត្រៃ ង្ខ្យ ក្បៀ ច្រៀ ន្តឿ ល្បឿ"
330
331  AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP
332    "᧠ ᧡"
333  AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM
334    "᧶ ᧹"
335
336  AF_BLUE_STRING_LAO_TOP
337    "າ ດ ອ ມ ລ ວ ຣ ງ"
338  AF_BLUE_STRING_LAO_BOTTOM
339    "າ ອ ບ ຍ ຣ ຮ ວ ຢ"
340  AF_BLUE_STRING_LAO_ASCENDER
341    "ປ ຢ ຟ ຝ"
342  AF_BLUE_STRING_LAO_LARGE_ASCENDER
343    "ໂ ໄ ໃ"
344  AF_BLUE_STRING_LAO_DESCENDER
345    "ງ ຊ ຖ ຽ ໆ ຯ"
346
347  AF_BLUE_STRING_LATIN_CAPITAL_TOP
348    "T H E Z O C Q S"
349  AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM
350    "H E Z L O C U S"
351  AF_BLUE_STRING_LATIN_SMALL_F_TOP
352    "f i j k d b h"
353  AF_BLUE_STRING_LATIN_SMALL_TOP
354    "u v x z o e s c"
355  AF_BLUE_STRING_LATIN_SMALL_BOTTOM
356    "n r x z o e s c"
357  AF_BLUE_STRING_LATIN_SMALL_DESCENDER
358    "p q g j y"
359
360  // we assume that both the subscript and superscript ranges
361  // don't contain oldstyle digits (actually, most fonts probably
362  // have digits only in those ranges)
363  AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP
364    "₀ ₃ ₅ ₇ ₈"
365  AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM
366    "₀ ₁ ₂ ₃ ₈"
367  AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP
368    "ᵢ ⱼ ₕ ₖ ₗ"
369  AF_BLUE_STRING_LATIN_SUBS_SMALL
370    "ₐ ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ"
371  AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER
372    "ᵦ ᵧ ᵨ ᵩ ₚ"
373
374  AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP
375    "⁰ ³ ⁵ ⁷ ᵀ ᴴ ᴱ ᴼ"
376  AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM
377    "⁰ ¹ ² ³ ᴱ ᴸ ᴼ ᵁ"
378  AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP
379    "ᵇ ᵈ ᵏ ʰ ʲ ᶠ ⁱ"
380  AF_BLUE_STRING_LATIN_SUPS_SMALL
381    "ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ"
382  AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER
383    "ᵖ ʸ ᵍ"
384
385  AF_BLUE_STRING_LISU_TOP
386    "ꓡ ꓧ ꓱ ꓶ ꓩ ꓚ ꓵ ꓳ"
387  AF_BLUE_STRING_LISU_BOTTOM
388    "ꓕ ꓜ ꓞ ꓡ ꓛ ꓢ ꓳ ꓴ"
389
390  AF_BLUE_STRING_MALAYALAM_TOP
391    "ഒ ട ഠ റ ച പ ച്ച പ്പ"
392  AF_BLUE_STRING_MALAYALAM_BOTTOM
393    "ട ഠ ധ ശ ഘ ച ഥ ല"
394
395  AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP
396    "�� �� �� �� �� �� ��"
397  AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM
398    "�� �� �� �� �� �� �� ��"
399  AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP
400    "�� �� �� �� �� ��"
401  AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP
402    "�� �� �� �� �� ��"
403  AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM
404    "�� �� �� �� �� ��"
405  AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER
406    "�� �� ��"
407  AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP
408    "�� �� �� �� ��"
409
410  AF_BLUE_STRING_MONGOLIAN_TOP_BASE
411    "ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ ‍ᡡ‍ ‍ᡳ‍"
412  AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE
413    "ᡃ"
414
415  AF_BLUE_STRING_MYANMAR_TOP
416    "ခ ဂ င ဒ ဝ ၥ ၊ ။"
417  AF_BLUE_STRING_MYANMAR_BOTTOM
418    "င ဎ ဒ ပ ဗ ဝ ၊ ။"
419  AF_BLUE_STRING_MYANMAR_ASCENDER
420    "ဩ ြ ၍ ၏ ၆ ါ ိ"
421  AF_BLUE_STRING_MYANMAR_DESCENDER
422    "ဉ ည ဥ ဩ ဨ ၂ ၅ ၉"
423
424  AF_BLUE_STRING_NKO_TOP
425    "ߐ ߉ ߒ ߟ ߖ ߜ ߠ ߥ"
426  AF_BLUE_STRING_NKO_BOTTOM
427    "߀ ߘ ߡ ߠ ߥ"
428  AF_BLUE_STRING_NKO_SMALL_TOP
429    "ߏ ߛ ߋ"
430  AF_BLUE_STRING_NKO_SMALL_BOTTOM
431    "ߎ ߏ ߛ ߋ"
432
433  AF_BLUE_STRING_OL_CHIKI
434    "ᱛ ᱜ ᱝ ᱡ ᱢ ᱥ"
435
436  AF_BLUE_STRING_OLD_TURKIC_TOP
437    "�� �� ��"
438  AF_BLUE_STRING_OLD_TURKIC_BOTTOM
439    "�� �� �� ��"
440
441  AF_BLUE_STRING_OSAGE_CAPITAL_TOP
442    "�� �� �� �� �� �� �� ��"
443  AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM
444    "�� �� �� �� �� ��"
445  AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER
446    "�� �� ��"
447  AF_BLUE_STRING_OSAGE_SMALL_TOP
448    "�� �� �� �� �� �� �� ��"
449  AF_BLUE_STRING_OSAGE_SMALL_BOTTOM
450    "�� �� �� �� �� �� �� ��"
451  AF_BLUE_STRING_OSAGE_SMALL_ASCENDER
452    "�� �� �� �� ��"
453  AF_BLUE_STRING_OSAGE_SMALL_DESCENDER
454    "�� �� ��"
455
456  AF_BLUE_STRING_OSMANYA_TOP
457    "�� �� �� �� �� �� �� ��"
458  AF_BLUE_STRING_OSMANYA_BOTTOM
459    "�� �� �� �� �� �� �� ��"
460
461  AF_BLUE_STRING_ROHINGYA_TOP
462    "�� �� �� �� ��"
463  AF_BLUE_STRING_ROHINGYA_BOTTOM
464    "�� �� �� �� ��"
465  AF_BLUE_STRING_ROHINGYA_JOIN
466    "ـ"
467
468  AF_BLUE_STRING_SAURASHTRA_TOP
469    "ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ"
470  AF_BLUE_STRING_SAURASHTRA_BOTTOM
471    "ꢂ ꢨ ꢺ ꢤ ꢎ"
472
473  AF_BLUE_STRING_SHAVIAN_TOP
474    "�� ��"
475  AF_BLUE_STRING_SHAVIAN_BOTTOM
476    "�� �� �� �� ��"
477  AF_BLUE_STRING_SHAVIAN_DESCENDER
478    "�� ��"
479  AF_BLUE_STRING_SHAVIAN_SMALL_TOP
480    "�� �� �� �� �� �� ��"
481  AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM
482    "�� �� ��"
483
484  AF_BLUE_STRING_SINHALA_TOP
485    "ඉ ක ඝ ඳ ප ය ල ෆ"
486  AF_BLUE_STRING_SINHALA_BOTTOM
487    "එ ඔ ඝ ජ ට ථ ධ ර"
488  AF_BLUE_STRING_SINHALA_DESCENDER
489    "ද ඳ උ ල තූ තු බු දු"
490
491  AF_BLUE_STRING_SUNDANESE_TOP
492    "ᮋ ᮞ ᮮ ᮽ ᮰ ᮈ"
493  AF_BLUE_STRING_SUNDANESE_BOTTOM
494    "ᮄ ᮔ ᮕ ᮗ ᮰ ᮆ ᮈ ᮉ"
495  AF_BLUE_STRING_SUNDANESE_DESCENDER
496    "ᮼ ᳄"
497
498  AF_BLUE_STRING_TAI_VIET_TOP
499    "ꪆ ꪔ ꪒ ꪖ ꪫ"
500  AF_BLUE_STRING_TAI_VIET_BOTTOM
501    "ꪉ ꪫ ꪮ"
502
503  AF_BLUE_STRING_TAMIL_TOP
504    "உ ஒ ஓ ற ஈ க ங ச"
505  AF_BLUE_STRING_TAMIL_BOTTOM
506    "க ச ல ஶ உ ங ட ப"
507
508  AF_BLUE_STRING_TELUGU_TOP
509    "ఇ ఌ ఙ ఞ ణ ఱ ౯"
510  AF_BLUE_STRING_TELUGU_BOTTOM
511    "అ క చ ర ఽ ౨ ౬"
512
513  AF_BLUE_STRING_THAI_TOP
514    "บ เ แ อ ก า"
515  AF_BLUE_STRING_THAI_BOTTOM
516    "บ ป ษ ฯ อ ย ฮ"
517  AF_BLUE_STRING_THAI_ASCENDER
518    "ป ฝ ฟ"
519  AF_BLUE_STRING_THAI_LARGE_ASCENDER
520    "โ ใ ไ"
521  AF_BLUE_STRING_THAI_DESCENDER
522    "ฎ ฏ ฤ ฦ"
523  AF_BLUE_STRING_THAI_LARGE_DESCENDER
524    "ญ ฐ"
525  AF_BLUE_STRING_THAI_DIGIT_TOP
526    "๐ ๑ ๓"
527
528  AF_BLUE_STRING_TIFINAGH
529    "ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ"
530
531  AF_BLUE_STRING_VAI_TOP
532    "ꗍ ꘖ ꘙ ꘜ ꖜ ꖝ ꔅ ꕢ"
533  AF_BLUE_STRING_VAI_BOTTOM
534    "ꗍ ꘖ ꘙ ꗞ ꔅ ꕢ ꖜ ꔆ"
535
536
537#ifdef AF_CONFIG_OPTION_CJK
538
539  AF_BLUE_STRING_CJK_TOP
540    "他 们 你 來 們 到 和 地"
541    " 对 對 就 席 我 时 時 會"
542    " 来 為 能 舰 說 说 这 這"
543    " 齊 |"
544    " 军 同 已 愿 既 星 是 景"
545    " 民 照 现 現 理 用 置 要"
546    " 軍 那 配 里 開 雷 露 面"
547    " 顾"
548  AF_BLUE_STRING_CJK_BOTTOM
549    "个 为 人 他 以 们 你 來"
550    " 個 們 到 和 大 对 對 就"
551    " 我 时 時 有 来 為 要 說"
552    " 说 |"
553    " 主 些 因 它 想 意 理 生"
554    " 當 看 着 置 者 自 著 裡"
555    " 过 还 进 進 過 道 還 里"
556    " 面"
557
558#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
559
560  AF_BLUE_STRING_CJK_LEFT
561    " 些 们 你 來 們 到 和 地"
562    " 她 将 將 就 年 得 情 最"
563    " 样 樣 理 能 說 说 这 這"
564    " 通 |"
565    " 即 吗 吧 听 呢 品 响 嗎"
566    " 师 師 收 断 斷 明 眼 間"
567    " 间 际 陈 限 除 陳 随 際"
568    " 隨"
569  AF_BLUE_STRING_CJK_RIGHT
570    "事 前 學 将 將 情 想 或"
571    " 政 斯 新 样 樣 民 沒 没"
572    " 然 特 现 現 球 第 經 谁"
573    " 起 |"
574    " 例 別 别 制 动 動 吗 嗎"
575    " 增 指 明 朝 期 构 物 确"
576    " 种 調 调 費 费 那 都 間"
577    " 间"
578
579#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
580
581#endif /* AF_CONFIG_OPTION_CJK                */
582
583
584// The blue zone stringsets, as used in the script styles, cf. `afstyles.h'.
585//
586// The AF_BLUE_PROPERTY_XXX flags are defined in `afblue.h'; here some
587// explanations.
588//
589// A blue zone in general is defined by a reference and an overshoot line.
590// During the hinting process, all coordinate values between those two lines
591// are set equal to the reference value, provided that the blue zone is not
592// wider than 0.75 pixels (otherwise the blue zone gets ignored).  All
593// entries must have `AF_BLUE_STRING_MAX' as the final line.
594//
595// During the glyph analysis, edges are sorted from bottom to top, and then
596// sequentially checked, edge by edge, against the blue zones in the order
597// given below.
598//
599//
600// latin auto-hinter
601// -----------------
602//
603// Characters in a blue string are automatically classified as having a flat
604// (reference) or a round (overshoot) extremum.  The blue zone is then set
605// up by the mean values of all flat extrema and all round extrema,
606// respectively.  Only horizontal blue zones (i.e., adjusting vertical
607// coordinate values) are supported.
608//
609// Some scripts like Khmer need character composition to get all necessary
610// blue zones, since Unicode only provides an abstract data model that
611// doesn't represent all possible glyph shapes.  For such character
612// clusters, the HarfBuzz library is used to convert them into the
613// corresponding glyphs.  The largest glyph element (where `largest' can be
614// either `largest ascender' or `largest descender') then defines the
615// corresponding flat or round extremum.
616//
617// For the latin auto-hinter, the overshoot should be larger than the
618// reference for top zones, and vice versa for bottom zones.
619//
620//   LATIN_TOP
621//     Take the maximum flat and round coordinate values of the blue string
622//     characters for computing the blue zone's reference and overshoot
623//     values.
624//
625//     If not set, take the minimum values.
626//
627//     Mutually exclusive with `LATIN_SUB_TOP'.
628//
629//   LATIN_SUB_TOP
630//     For all glyphs of a character cluster, compute the maximum flat
631//     and round coordinate values of each component, then take the
632//     smallest of the maximum values.  The idea is to get the top of
633//     subscript glyphs, as used in Khmer, for example.  Note that
634//     this mechanism doesn't work for ordinary ligatures.
635//
636//     This flags indicates a secondary blue zone: It gets removed if
637//     there is a non-LATIN_SUB_TOP blue zone at the same coordinate
638//     value (after scaling).
639//
640//     Mutually exclusive with `LATIN_TOP'.
641//
642//   LATIN_NEUTRAL
643//     Ignore round extrema and define the blue zone with flat values only.
644//     Both top and bottom of contours can match.  This is useful for
645//     scripts like Devanagari where vowel signs attach to the base
646//     character and are implemented as components of composite glyphs.
647//
648//     If not set, both round and flat extrema are taken into account.
649//     Additionally, only the top or the bottom of a contour can match,
650//     depending on the LATIN_TOP flag.
651//
652//     Neutral blue zones should always follow non-neutral blue zones.
653//
654//   LATIN_X_HEIGHT
655//     Scale all glyphs vertically from the corresponding script to make the
656//     reference line of this blue zone align on the grid.  The scaling
657//     takes place before all other blue zones get aligned to the grid.
658//     Only one blue character string of a script style can have this flag.
659//
660//   LATIN_LONG
661//     Apply an additional constraint for blue zone values: Don't
662//     necessarily use the extremum as-is but a segment of the topmost (or
663//     bottommost) contour that is longer than a heuristic threshold, and
664//     which is not too far away vertically from the real extremum.  This
665//     ensures that small bumps in the outline are ignored (for example, the
666//     `vertical serifs' found in many Hebrew glyph designs).
667//
668//     The segment must be at least EM/25 font units long, and the distance
669//     to the extremum must be smaller than EM/4.
670//
671//
672// cjk auto-hinter
673// ---------------
674//
675// Characters in a blue string are *not* automatically classified.  Instead,
676// first come the characters used for the overshoot value, then the
677// character `|', then the characters used for the reference value
678// (everything separated by space characters).  The blue zone is then set up
679// by the mean values of all reference values and all overshoot values,
680// respectively.  Both horizontal and vertical blue zones (i.e., adjusting
681// vertical and horizontal coordinate values, respectively) are supported.
682//
683// For the cjk auto-hinter, the overshoot should be smaller than the
684// reference for top zones, and vice versa for bottom zones.
685//
686//   CJK_TOP
687//     Take the maximum flat and round coordinate values of the blue string
688//     characters.  If not set, take the minimum values.
689//
690//   CJK_RIGHT
691//     A synonym for CJK_TOP.  If CJK_HORIZ is set, this flag indicates the
692//     right blue zone, taking horizontal maximum values.
693//
694//   CJK_HORIZ
695//     Define a blue zone for horizontal hinting (i.e., vertical blue
696//     zones).  If not set, this is a blue zone for vertical hinting.
697
698
699AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
700
701  AF_BLUE_STRINGSET_ADLM
702    { AF_BLUE_STRING_ADLAM_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
703    { AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0                                 }
704    { AF_BLUE_STRING_ADLAM_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
705                                           AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
706    { AF_BLUE_STRING_ADLAM_SMALL_BOTTOM,   0                                 }
707    { AF_BLUE_STRING_MAX,                  0                                 }
708
709  AF_BLUE_STRINGSET_ARAB
710    { AF_BLUE_STRING_ARABIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP     }
711    { AF_BLUE_STRING_ARABIC_BOTTOM, 0                              }
712    { AF_BLUE_STRING_ARABIC_JOIN,   AF_BLUE_PROPERTY_LATIN_NEUTRAL }
713    { AF_BLUE_STRING_MAX,           0                              }
714
715  AF_BLUE_STRINGSET_ARMN
716    { AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
717    { AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM,  0                                 }
718    { AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
719    { AF_BLUE_STRING_ARMENIAN_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
720                                               AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
721    { AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM,    0                                 }
722    { AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0                                 }
723    { AF_BLUE_STRING_MAX,                      0                                 }
724
725  AF_BLUE_STRINGSET_AVST
726    { AF_BLUE_STRING_AVESTAN_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
727    { AF_BLUE_STRING_AVESTAN_BOTTOM, 0                          }
728    { AF_BLUE_STRING_MAX,            0                          }
729
730  AF_BLUE_STRINGSET_BAMU
731    { AF_BLUE_STRING_BAMUM_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
732    { AF_BLUE_STRING_BAMUM_BOTTOM, 0                          }
733    { AF_BLUE_STRING_MAX,          0                          }
734
735  AF_BLUE_STRINGSET_BENG
736    { AF_BLUE_STRING_BENGALI_TOP,  AF_BLUE_PROPERTY_LATIN_TOP        }
737    { AF_BLUE_STRING_BENGALI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP        }
738    { AF_BLUE_STRING_BENGALI_BASE, AF_BLUE_PROPERTY_LATIN_TOP      |
739                                   AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
740                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
741    { AF_BLUE_STRING_BENGALI_BASE, 0                                 }
742    { AF_BLUE_STRING_MAX,          0                                 }
743
744  AF_BLUE_STRINGSET_BUHD
745    { AF_BLUE_STRING_BUHID_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
746    { AF_BLUE_STRING_BUHID_LARGE,  AF_BLUE_PROPERTY_LATIN_TOP        }
747    { AF_BLUE_STRING_BUHID_SMALL,  AF_BLUE_PROPERTY_LATIN_TOP      |
748                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
749    { AF_BLUE_STRING_BUHID_BOTTOM, 0                                 }
750    { AF_BLUE_STRING_MAX,          0                                 }
751
752  AF_BLUE_STRINGSET_CAKM
753    { AF_BLUE_STRING_CHAKMA_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
754    { AF_BLUE_STRING_CHAKMA_BOTTOM,    0                          }
755    { AF_BLUE_STRING_CHAKMA_DESCENDER, 0                          }
756    { AF_BLUE_STRING_MAX,              0                          }
757
758  AF_BLUE_STRINGSET_CANS
759    { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP,          AF_BLUE_PROPERTY_LATIN_TOP        }
760    { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM,       0                                 }
761    { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
762                                                      AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
763    { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0                                 }
764    { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
765    { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM,  0                                 }
766    { AF_BLUE_STRING_MAX,                             0                                 }
767
768  AF_BLUE_STRINGSET_CARI
769    { AF_BLUE_STRING_CARIAN_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
770    { AF_BLUE_STRING_CARIAN_BOTTOM, 0                          }
771    { AF_BLUE_STRING_MAX,           0                          }
772
773  AF_BLUE_STRINGSET_CHER
774    { AF_BLUE_STRING_CHEROKEE_CAPITAL,         AF_BLUE_PROPERTY_LATIN_TOP        }
775    { AF_BLUE_STRING_CHEROKEE_CAPITAL,         0                                 }
776    { AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
777    { AF_BLUE_STRING_CHEROKEE_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
778                                               AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
779    { AF_BLUE_STRING_CHEROKEE_SMALL,           0                                 }
780    { AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0                                 }
781    { AF_BLUE_STRING_MAX,                      0                                 }
782
783  AF_BLUE_STRINGSET_COPT
784    { AF_BLUE_STRING_COPTIC_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
785    { AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0                                 }
786    { AF_BLUE_STRING_COPTIC_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
787                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
788    { AF_BLUE_STRING_COPTIC_SMALL_BOTTOM,   0                                 }
789    { AF_BLUE_STRING_MAX,                   0                                 }
790
791  AF_BLUE_STRINGSET_CPRT
792    { AF_BLUE_STRING_CYPRIOT_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
793    { AF_BLUE_STRING_CYPRIOT_BOTTOM, 0                          }
794    { AF_BLUE_STRING_CYPRIOT_SMALL,  AF_BLUE_PROPERTY_LATIN_TOP }
795    { AF_BLUE_STRING_CYPRIOT_SMALL,  0                          }
796    { AF_BLUE_STRING_MAX,            0                          }
797
798  AF_BLUE_STRINGSET_CYRL
799    { AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
800    { AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM,  0                                 }
801    { AF_BLUE_STRING_CYRILLIC_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
802                                               AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
803    { AF_BLUE_STRING_CYRILLIC_SMALL,           0                                 }
804    { AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER, 0                                 }
805    { AF_BLUE_STRING_MAX,                      0                                 }
806
807  AF_BLUE_STRINGSET_DEVA
808    { AF_BLUE_STRING_DEVANAGARI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
809    { AF_BLUE_STRING_DEVANAGARI_HEAD,   AF_BLUE_PROPERTY_LATIN_TOP        }
810    { AF_BLUE_STRING_DEVANAGARI_BASE,   AF_BLUE_PROPERTY_LATIN_TOP      |
811                                        AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
812                                        AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
813    { AF_BLUE_STRING_DEVANAGARI_BASE,   0                                 }
814    { AF_BLUE_STRING_DEVANAGARI_BOTTOM, 0                                 }
815    { AF_BLUE_STRING_MAX,               0                                 }
816
817  AF_BLUE_STRINGSET_DSRT
818    { AF_BLUE_STRING_DESERET_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
819    { AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0                                 }
820    { AF_BLUE_STRING_DESERET_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
821                                             AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
822    { AF_BLUE_STRING_DESERET_SMALL_BOTTOM,   0                                 }
823    { AF_BLUE_STRING_MAX,                    0                                 }
824
825  AF_BLUE_STRINGSET_ETHI
826    { AF_BLUE_STRING_ETHIOPIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
827    { AF_BLUE_STRING_ETHIOPIC_BOTTOM, 0                          }
828    { AF_BLUE_STRING_MAX,             0                          }
829
830  AF_BLUE_STRINGSET_GEOR
831    { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
832                                                   AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
833    { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM,    0                                 }
834    { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
835    { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0                                 }
836    { AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP,        AF_BLUE_PROPERTY_LATIN_TOP        }
837    { AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM,     0                                 }
838    { AF_BLUE_STRING_MAX,                          0                                 }
839
840  AF_BLUE_STRINGSET_GEOK
841    { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
842    { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0                                 }
843    { AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
844                                                  AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
845    { AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM,    0                                 }
846    { AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
847    { AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0                                 }
848    { AF_BLUE_STRING_MAX,                         0                                 }
849
850  AF_BLUE_STRINGSET_GLAG
851    { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP        }
852    { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0                                 }
853    { AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP,      AF_BLUE_PROPERTY_LATIN_TOP      |
854                                                AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
855    { AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM,   0                                 }
856    { AF_BLUE_STRING_MAX,                       0                                 }
857
858  AF_BLUE_STRINGSET_GOTH
859    { AF_BLUE_STRING_GOTHIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
860    { AF_BLUE_STRING_GOTHIC_BOTTOM, 0                          }
861    { AF_BLUE_STRING_MAX,           0                          }
862
863  AF_BLUE_STRINGSET_GREK
864    { AF_BLUE_STRING_GREEK_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
865    { AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM,  0                                 }
866    { AF_BLUE_STRING_GREEK_SMALL_BETA_TOP,  AF_BLUE_PROPERTY_LATIN_TOP        }
867    { AF_BLUE_STRING_GREEK_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
868                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
869    { AF_BLUE_STRING_GREEK_SMALL,           0                                 }
870    { AF_BLUE_STRING_GREEK_SMALL_DESCENDER, 0                                 }
871    { AF_BLUE_STRING_MAX,                   0                                 }
872
873  AF_BLUE_STRINGSET_GUJR
874    { AF_BLUE_STRING_GUJARATI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
875                                         AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
876    { AF_BLUE_STRING_GUJARATI_BOTTOM,    0                                 }
877    { AF_BLUE_STRING_GUJARATI_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
878    { AF_BLUE_STRING_GUJARATI_DESCENDER, 0                                 }
879    { AF_BLUE_STRING_GUJARATI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP        }
880    { AF_BLUE_STRING_MAX,                0                                 }
881
882  AF_BLUE_STRINGSET_GURU
883    { AF_BLUE_STRING_GURMUKHI_TOP,       AF_BLUE_PROPERTY_LATIN_TOP        }
884    { AF_BLUE_STRING_GURMUKHI_HEAD,      AF_BLUE_PROPERTY_LATIN_TOP        }
885    { AF_BLUE_STRING_GURMUKHI_BASE,      AF_BLUE_PROPERTY_LATIN_TOP      |
886                                         AF_BLUE_PROPERTY_LATIN_NEUTRAL  |
887                                         AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
888    { AF_BLUE_STRING_GURMUKHI_BOTTOM,    0                                 }
889    { AF_BLUE_STRING_GURMUKHI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP        }
890    { AF_BLUE_STRING_MAX,                0                                 }
891
892  AF_BLUE_STRINGSET_HEBR
893    { AF_BLUE_STRING_HEBREW_TOP,       AF_BLUE_PROPERTY_LATIN_TOP  |
894                                       AF_BLUE_PROPERTY_LATIN_LONG   }
895    { AF_BLUE_STRING_HEBREW_BOTTOM,    0                             }
896    { AF_BLUE_STRING_HEBREW_DESCENDER, 0                             }
897    { AF_BLUE_STRING_MAX,              0                             }
898
899  AF_BLUE_STRINGSET_KNDA
900    { AF_BLUE_STRING_KANNADA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
901    { AF_BLUE_STRING_KANNADA_BOTTOM, 0                          }
902    { AF_BLUE_STRING_MAX,            0                          }
903
904  AF_BLUE_STRINGSET_KALI
905    { AF_BLUE_STRING_KAYAH_LI_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
906                                               AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
907    { AF_BLUE_STRING_KAYAH_LI_BOTTOM,          0                                 }
908    { AF_BLUE_STRING_KAYAH_LI_ASCENDER,        AF_BLUE_PROPERTY_LATIN_TOP        }
909    { AF_BLUE_STRING_KAYAH_LI_DESCENDER,       0                                 }
910    { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0                                 }
911    { AF_BLUE_STRING_MAX,                      0                                 }
912
913  AF_BLUE_STRINGSET_KHMR
914    { AF_BLUE_STRING_KHMER_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
915                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
916    { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP,   AF_BLUE_PROPERTY_LATIN_SUB_TOP    }
917    { AF_BLUE_STRING_KHMER_BOTTOM,          0                                 }
918    { AF_BLUE_STRING_KHMER_DESCENDER,       0                                 }
919    { AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0                                 }
920    { AF_BLUE_STRING_MAX,                   0                                 }
921
922  AF_BLUE_STRINGSET_KHMS
923    { AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
924                                                  AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
925    { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0                                 }
926    { AF_BLUE_STRING_MAX,                         0                                 }
927
928  AF_BLUE_STRINGSET_LAO
929    { AF_BLUE_STRING_LAO_TOP,            AF_BLUE_PROPERTY_LATIN_TOP      |
930                                         AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
931    { AF_BLUE_STRING_LAO_BOTTOM,         0                                 }
932    { AF_BLUE_STRING_LAO_ASCENDER,       AF_BLUE_PROPERTY_LATIN_TOP        }
933    { AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP        }
934    { AF_BLUE_STRING_LAO_DESCENDER,      0                                 }
935    { AF_BLUE_STRING_MAX,                0                                 }
936
937  AF_BLUE_STRINGSET_LATN
938    { AF_BLUE_STRING_LATIN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
939    { AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM,  0                                 }
940    { AF_BLUE_STRING_LATIN_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
941    { AF_BLUE_STRING_LATIN_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
942                                            AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
943    { AF_BLUE_STRING_LATIN_SMALL_BOTTOM,    0                                 }
944    { AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 0                                 }
945    { AF_BLUE_STRING_MAX,                   0                                 }
946
947  AF_BLUE_STRINGSET_LATB
948    { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
949    { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM,  0                                 }
950    { AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
951    { AF_BLUE_STRING_LATIN_SUBS_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
952                                                 AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
953    { AF_BLUE_STRING_LATIN_SUBS_SMALL,           0                                 }
954    { AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0                                 }
955    { AF_BLUE_STRING_MAX,                        0                                 }
956
957  AF_BLUE_STRINGSET_LATP
958    { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
959    { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM,  0                                 }
960    { AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
961    { AF_BLUE_STRING_LATIN_SUPS_SMALL,           AF_BLUE_PROPERTY_LATIN_TOP      |
962                                                 AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
963    { AF_BLUE_STRING_LATIN_SUPS_SMALL,           0                                 }
964    { AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0                                 }
965    { AF_BLUE_STRING_MAX,                        0                                 }
966
967  AF_BLUE_STRINGSET_LISU
968    { AF_BLUE_STRING_LISU_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
969    { AF_BLUE_STRING_LISU_BOTTOM, 0                          }
970    { AF_BLUE_STRING_MAX,         0                          }
971
972  AF_BLUE_STRINGSET_MLYM
973    { AF_BLUE_STRING_MALAYALAM_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
974    { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0                          }
975    { AF_BLUE_STRING_MAX,              0                          }
976
977  AF_BLUE_STRINGSET_MEDF
978    { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
979    { AF_BLUE_STRING_MEDEFAIDRIN_CAPITAL_BOTTOM,  0                                 }
980    { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
981    { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
982                                                  AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
983    { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_BOTTOM,    0                                 }
984    { AF_BLUE_STRING_MEDEFAIDRIN_SMALL_DESCENDER, 0                                 }
985    { AF_BLUE_STRING_MEDEFAIDRIN_DIGIT_TOP,       AF_BLUE_PROPERTY_LATIN_TOP        }
986    { AF_BLUE_STRING_MAX,                         0                                 }
987
988  AF_BLUE_STRINGSET_MONG
989    { AF_BLUE_STRING_MONGOLIAN_TOP_BASE,    AF_BLUE_PROPERTY_LATIN_TOP }
990    { AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE, 0                          }
991    { AF_BLUE_STRING_MAX,                   0                          }
992
993  AF_BLUE_STRINGSET_MYMR
994    { AF_BLUE_STRING_MYANMAR_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
995                                        AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
996    { AF_BLUE_STRING_MYANMAR_BOTTOM,    0                                 }
997    { AF_BLUE_STRING_MYANMAR_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
998    { AF_BLUE_STRING_MYANMAR_DESCENDER, 0                                 }
999    { AF_BLUE_STRING_MAX,               0                                 }
1000
1001  AF_BLUE_STRINGSET_NKOO
1002    { AF_BLUE_STRING_NKO_TOP,          AF_BLUE_PROPERTY_LATIN_TOP        }
1003    { AF_BLUE_STRING_NKO_BOTTOM,       0                                 }
1004    { AF_BLUE_STRING_NKO_SMALL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
1005                                       AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
1006    { AF_BLUE_STRING_NKO_SMALL_BOTTOM, 0                                 }
1007    { AF_BLUE_STRING_MAX,              0                                 }
1008
1009  AF_BLUE_STRINGSET_NONE
1010    { AF_BLUE_STRING_MAX, 0 }
1011
1012  AF_BLUE_STRINGSET_OLCK
1013    { AF_BLUE_STRING_OL_CHIKI, AF_BLUE_PROPERTY_LATIN_TOP }
1014    { AF_BLUE_STRING_OL_CHIKI, 0                          }
1015    { AF_BLUE_STRING_MAX,      0                          }
1016
1017  AF_BLUE_STRINGSET_ORKH
1018    { AF_BLUE_STRING_OLD_TURKIC_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1019    { AF_BLUE_STRING_OLD_TURKIC_BOTTOM, 0                          }
1020    { AF_BLUE_STRING_MAX,               0                          }
1021
1022  AF_BLUE_STRINGSET_OSGE
1023    { AF_BLUE_STRING_OSAGE_CAPITAL_TOP,       AF_BLUE_PROPERTY_LATIN_TOP       }
1024    { AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM,    0                                }
1025    { AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0                                }
1026    { AF_BLUE_STRING_OSAGE_SMALL_TOP,         AF_BLUE_PROPERTY_LATIN_TOP     |
1027                                              AF_BLUE_PROPERTY_LATIN_X_HEIGHT  }
1028    { AF_BLUE_STRING_OSAGE_SMALL_BOTTOM,      0                                }
1029    { AF_BLUE_STRING_OSAGE_SMALL_ASCENDER,    AF_BLUE_PROPERTY_LATIN_TOP       }
1030    { AF_BLUE_STRING_OSAGE_SMALL_DESCENDER,   0                                }
1031    { AF_BLUE_STRING_MAX,                     0                                }
1032
1033  AF_BLUE_STRINGSET_OSMA
1034    { AF_BLUE_STRING_OSMANYA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1035    { AF_BLUE_STRING_OSMANYA_BOTTOM, 0                          }
1036    { AF_BLUE_STRING_MAX,            0                          }
1037
1038  AF_BLUE_STRINGSET_ROHG
1039    { AF_BLUE_STRING_ROHINGYA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP     }
1040    { AF_BLUE_STRING_ROHINGYA_BOTTOM, 0                              }
1041    { AF_BLUE_STRING_ROHINGYA_JOIN,   AF_BLUE_PROPERTY_LATIN_NEUTRAL }
1042    { AF_BLUE_STRING_MAX,             0                              }
1043
1044  AF_BLUE_STRINGSET_SAUR
1045    { AF_BLUE_STRING_SAURASHTRA_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1046    { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0                          }
1047    { AF_BLUE_STRING_MAX,               0                          }
1048
1049  AF_BLUE_STRINGSET_SHAW
1050    { AF_BLUE_STRING_SHAVIAN_TOP,          AF_BLUE_PROPERTY_LATIN_TOP        }
1051    { AF_BLUE_STRING_SHAVIAN_BOTTOM,       0                                 }
1052    { AF_BLUE_STRING_SHAVIAN_DESCENDER,    0                                 }
1053    { AF_BLUE_STRING_SHAVIAN_SMALL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP      |
1054                                           AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
1055    { AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0                                 }
1056    { AF_BLUE_STRING_MAX,                  0                                 }
1057
1058  AF_BLUE_STRINGSET_SINH
1059    { AF_BLUE_STRING_SINHALA_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
1060    { AF_BLUE_STRING_SINHALA_BOTTOM,    0                          }
1061    { AF_BLUE_STRING_SINHALA_DESCENDER, 0                          }
1062    { AF_BLUE_STRING_MAX,               0                          }
1063
1064  AF_BLUE_STRINGSET_SUND
1065    { AF_BLUE_STRING_SUNDANESE_TOP,       AF_BLUE_PROPERTY_LATIN_TOP }
1066    { AF_BLUE_STRING_SUNDANESE_BOTTOM,    0                          }
1067    { AF_BLUE_STRING_SUNDANESE_DESCENDER, 0                          }
1068    { AF_BLUE_STRING_MAX,                 0                          }
1069
1070  AF_BLUE_STRINGSET_TAML
1071    { AF_BLUE_STRING_TAMIL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1072    { AF_BLUE_STRING_TAMIL_BOTTOM, 0                          }
1073    { AF_BLUE_STRING_MAX,          0                          }
1074
1075  AF_BLUE_STRINGSET_TAVT
1076    { AF_BLUE_STRING_TAI_VIET_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1077    { AF_BLUE_STRING_TAI_VIET_BOTTOM, 0                          }
1078    { AF_BLUE_STRING_MAX,             0                          }
1079
1080  AF_BLUE_STRINGSET_TELU
1081    { AF_BLUE_STRING_TELUGU_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1082    { AF_BLUE_STRING_TELUGU_BOTTOM, 0                          }
1083    { AF_BLUE_STRING_MAX,           0                          }
1084
1085  AF_BLUE_STRINGSET_THAI
1086    { AF_BLUE_STRING_THAI_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
1087                                           AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
1088    { AF_BLUE_STRING_THAI_BOTTOM,          0                                 }
1089    { AF_BLUE_STRING_THAI_ASCENDER,        AF_BLUE_PROPERTY_LATIN_TOP        }
1090    { AF_BLUE_STRING_THAI_LARGE_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
1091    { AF_BLUE_STRING_THAI_DESCENDER,       0                                 }
1092    { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0                                 }
1093    { AF_BLUE_STRING_THAI_DIGIT_TOP,       0                                 }
1094    { AF_BLUE_STRING_MAX,                  0                                 }
1095
1096  AF_BLUE_STRINGSET_TFNG
1097    { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }
1098    { AF_BLUE_STRING_TIFINAGH, 0                          }
1099    { AF_BLUE_STRING_MAX,      0                          }
1100
1101  AF_BLUE_STRINGSET_VAII
1102    { AF_BLUE_STRING_VAI_TOP,    AF_BLUE_PROPERTY_LATIN_TOP }
1103    { AF_BLUE_STRING_VAI_BOTTOM, 0                          }
1104    { AF_BLUE_STRING_MAX,        0                          }
1105
1106#ifdef AF_CONFIG_OPTION_CJK
1107
1108  AF_BLUE_STRINGSET_HANI
1109    { AF_BLUE_STRING_CJK_TOP,    AF_BLUE_PROPERTY_CJK_TOP     }
1110    { AF_BLUE_STRING_CJK_BOTTOM, 0                            }
1111#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
1112    { AF_BLUE_STRING_CJK_LEFT,   AF_BLUE_PROPERTY_CJK_HORIZ   }
1113    { AF_BLUE_STRING_CJK_RIGHT,  AF_BLUE_PROPERTY_CJK_HORIZ |
1114                                 AF_BLUE_PROPERTY_CJK_RIGHT   }
1115#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
1116    { AF_BLUE_STRING_MAX,        0                            }
1117
1118#endif /* AF_CONFIG_OPTION_CJK                */
1119
1120
1121// END
1122