21#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
30#define AF_ADJUSTMENT_DATABASE_LENGTH \
31 ( sizeof ( adjustment_database ) / \
32 sizeof ( adjustment_database[0] ) )
35#define FT_COMPONENT afadjust
43 } AF_AdjustmentDatabaseEntry;
54 static AF_AdjustmentDatabaseEntry adjustment_database[] =
57 { 0x21, AF_ADJUST_UP | AF_ADJUST_NO_HEIGHT_CHECK },
58 { 0x51, AF_IGNORE_CAPITAL_BOTTOM } ,
59 { 0x3F, AF_ADJUST_UP | AF_ADJUST_NO_HEIGHT_CHECK },
60 { 0x69, AF_ADJUST_UP },
61 { 0x6A, AF_ADJUST_UP },
64 { 0x7E, AF_ADJUST_TILDE_TOP },
68 { 0xA1, AF_ADJUST_UP },
69 { 0xA6, AF_ADJUST_UP | AF_ADJUST_NO_HEIGHT_CHECK },
70 { 0xAA, AF_ADJUST_UP },
71 { 0xBA, AF_ADJUST_UP },
72 { 0xBF, AF_ADJUST_UP },
74 { 0xC0, AF_ADJUST_UP },
75 { 0xC1, AF_ADJUST_UP },
76 { 0xC2, AF_ADJUST_UP },
77 { 0xC3, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
78 { 0xC4, AF_ADJUST_UP },
79 { 0xC5, AF_ADJUST_UP },
80 { 0xC7, AF_IGNORE_CAPITAL_BOTTOM },
81 { 0xC8, AF_ADJUST_UP },
82 { 0xC9, AF_ADJUST_UP },
83 { 0xCA, AF_ADJUST_UP },
84 { 0xCB, AF_ADJUST_UP },
85 { 0xCC, AF_ADJUST_UP },
86 { 0xCD, AF_ADJUST_UP },
87 { 0xCE, AF_ADJUST_UP },
88 { 0xCF, AF_ADJUST_UP },
90 { 0xD1, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
91 { 0xD2, AF_ADJUST_UP },
92 { 0xD3, AF_ADJUST_UP },
93 { 0xD4, AF_ADJUST_UP },
94 { 0xD5, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
95 { 0xD6, AF_ADJUST_UP },
96 { 0xD8, AF_IGNORE_CAPITAL_TOP | AF_IGNORE_CAPITAL_BOTTOM },
97 { 0xD9, AF_ADJUST_UP },
98 { 0xDA, AF_ADJUST_UP },
99 { 0xDB, AF_ADJUST_UP },
100 { 0xDC, AF_ADJUST_UP },
101 { 0xDD, AF_ADJUST_UP },
103 { 0xE0, AF_ADJUST_UP },
104 { 0xE1, AF_ADJUST_UP },
105 { 0xE2, AF_ADJUST_UP },
106 { 0xE3, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
107 { 0xE4, AF_ADJUST_UP },
108 { 0xE5, AF_ADJUST_UP },
109 { 0xE7, AF_IGNORE_SMALL_BOTTOM },
110 { 0xE8, AF_ADJUST_UP },
111 { 0xE9, AF_ADJUST_UP },
112 { 0xEA, AF_ADJUST_UP },
113 { 0xEB, AF_ADJUST_UP },
114 { 0xEC, AF_ADJUST_UP },
115 { 0xED, AF_ADJUST_UP },
116 { 0xEE, AF_ADJUST_UP },
117 { 0xEF, AF_ADJUST_UP },
119 { 0xF1, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
120 { 0xF2, AF_ADJUST_UP },
121 { 0xF3, AF_ADJUST_UP },
122 { 0xF4, AF_ADJUST_UP },
123 { 0xF5, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
124 { 0xF6, AF_ADJUST_UP },
125 { 0xF8, AF_IGNORE_SMALL_TOP | AF_IGNORE_SMALL_BOTTOM },
126 { 0xF9, AF_ADJUST_UP },
127 { 0xFA, AF_ADJUST_UP },
128 { 0xFB, AF_ADJUST_UP },
129 { 0xFC, AF_ADJUST_UP },
130 { 0xFD, AF_ADJUST_UP },
131 { 0xFF, AF_ADJUST_UP },
134 { 0x100, AF_ADJUST_UP },
135 { 0x101, AF_ADJUST_UP },
136 { 0x102, AF_ADJUST_UP },
137 { 0x103, AF_ADJUST_UP },
138 { 0x104, AF_IGNORE_CAPITAL_BOTTOM },
139 { 0x105, AF_IGNORE_SMALL_BOTTOM },
140 { 0x106, AF_ADJUST_UP },
141 { 0x107, AF_ADJUST_UP },
142 { 0x108, AF_ADJUST_UP },
143 { 0x109, AF_ADJUST_UP },
144 { 0x10A, AF_ADJUST_UP },
145 { 0x10B, AF_ADJUST_UP },
146 { 0x10C, AF_ADJUST_UP },
147 { 0x10D, AF_ADJUST_UP },
148 { 0x10E, AF_ADJUST_UP },
150 { 0x112, AF_ADJUST_UP },
151 { 0x113, AF_ADJUST_UP },
152 { 0x114, AF_ADJUST_UP },
153 { 0x115, AF_ADJUST_UP },
154 { 0x116, AF_ADJUST_UP },
155 { 0x117, AF_ADJUST_UP },
156 { 0x118, AF_IGNORE_CAPITAL_BOTTOM },
157 { 0x119, AF_IGNORE_SMALL_BOTTOM },
158 { 0x11A, AF_ADJUST_UP },
159 { 0x11B, AF_ADJUST_UP },
160 { 0x11C, AF_ADJUST_UP },
161 { 0x11D, AF_ADJUST_UP },
162 { 0x11E, AF_ADJUST_UP },
163 { 0x11F, AF_ADJUST_UP },
165 { 0x120, AF_ADJUST_UP },
166 { 0x121, AF_ADJUST_UP },
167 { 0x122, AF_ADJUST_DOWN },
168 { 0x123, AF_ADJUST_UP },
169 { 0x124, AF_ADJUST_UP },
170 { 0x125, AF_ADJUST_UP },
171 { 0x128, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
172 { 0x129, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
173 { 0x12A, AF_ADJUST_UP },
174 { 0x12B, AF_ADJUST_UP },
175 { 0x12C, AF_ADJUST_UP },
176 { 0x12D, AF_ADJUST_UP },
177 { 0x12E, AF_IGNORE_CAPITAL_BOTTOM },
178 { 0x12F, AF_ADJUST_UP | AF_IGNORE_SMALL_BOTTOM },
180 { 0x130, AF_ADJUST_UP },
181 { 0x133, AF_ADJUST_UP },
182 { 0x134, AF_ADJUST_UP },
183 { 0x135, AF_ADJUST_UP },
184 { 0x136, AF_ADJUST_DOWN },
185 { 0x137, AF_ADJUST_DOWN },
186 { 0x139, AF_ADJUST_UP },
187 { 0x13A, AF_ADJUST_UP },
188 { 0x13B, AF_ADJUST_DOWN },
189 { 0x13C, AF_ADJUST_DOWN },
191 { 0x143, AF_ADJUST_UP },
192 { 0x144, AF_ADJUST_UP },
193 { 0x145, AF_ADJUST_DOWN },
194 { 0x146, AF_ADJUST_DOWN },
195 { 0x147, AF_ADJUST_UP },
196 { 0x148, AF_ADJUST_UP },
197 { 0x14C, AF_ADJUST_UP },
198 { 0x14D, AF_ADJUST_UP },
199 { 0x14E, AF_ADJUST_UP },
200 { 0x14F, AF_ADJUST_UP },
202 { 0x150, AF_ADJUST_UP },
203 { 0x151, AF_ADJUST_UP },
204 { 0x154, AF_ADJUST_UP },
205 { 0x155, AF_ADJUST_UP },
206 { 0x156, AF_ADJUST_DOWN },
207 { 0x157, AF_ADJUST_DOWN },
208 { 0x158, AF_ADJUST_UP },
209 { 0x159, AF_ADJUST_UP },
210 { 0x15A, AF_ADJUST_UP },
211 { 0x15B, AF_ADJUST_UP },
212 { 0x15C, AF_ADJUST_UP },
213 { 0x15D, AF_ADJUST_UP },
214 { 0x15E, AF_IGNORE_CAPITAL_BOTTOM },
215 { 0x15F, AF_IGNORE_SMALL_BOTTOM },
217 { 0x160, AF_ADJUST_UP },
218 { 0x161, AF_ADJUST_UP },
219 { 0x162, AF_IGNORE_CAPITAL_BOTTOM },
220 { 0x163, AF_IGNORE_SMALL_BOTTOM },
221 { 0x164, AF_ADJUST_UP },
222 { 0x168, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
223 { 0x169, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
224 { 0x16A, AF_ADJUST_UP },
225 { 0x16B, AF_ADJUST_UP },
226 { 0x16C, AF_ADJUST_UP },
227 { 0x16D, AF_ADJUST_UP },
228 { 0x16E, AF_ADJUST_UP },
229 { 0x16F, AF_ADJUST_UP },
231 { 0x170, AF_ADJUST_UP },
232 { 0x171, AF_ADJUST_UP },
233 { 0x172, AF_IGNORE_CAPITAL_BOTTOM },
234 { 0x173, AF_IGNORE_SMALL_BOTTOM },
235 { 0x174, AF_ADJUST_UP },
236 { 0x175, AF_ADJUST_UP },
237 { 0x176, AF_ADJUST_UP },
238 { 0x177, AF_ADJUST_UP },
239 { 0x178, AF_ADJUST_UP },
240 { 0x179, AF_ADJUST_UP },
241 { 0x17A, AF_ADJUST_UP },
242 { 0x17B, AF_ADJUST_UP },
243 { 0x17C, AF_ADJUST_UP },
244 { 0x17D, AF_ADJUST_UP },
245 { 0x17E, AF_ADJUST_UP },
248 { 0x187, AF_IGNORE_CAPITAL_TOP },
249 { 0x188, AF_IGNORE_SMALL_TOP },
251 { 0x1A0, AF_IGNORE_CAPITAL_TOP },
252 { 0x1A1, AF_IGNORE_SMALL_TOP },
253 { 0x1A5, AF_IGNORE_SMALL_TOP },
254 { 0x1AB, AF_IGNORE_SMALL_BOTTOM },
255 { 0x1AE, AF_IGNORE_CAPITAL_BOTTOM },
256 { 0x1AF, AF_IGNORE_CAPITAL_TOP },
258 { 0x1B0, AF_IGNORE_SMALL_TOP },
259 { 0x1B4, AF_IGNORE_SMALL_TOP },
261 { 0x1C3, AF_ADJUST_UP | AF_ADJUST_NO_HEIGHT_CHECK },
262 { 0x1C4, AF_ADJUST_UP },
264 { 0x1C5, AF_ADJUST_UP },
265 { 0x1C6, AF_ADJUST_UP },
266 { 0x1C8, AF_ADJUST_UP },
267 { 0x1C9, AF_ADJUST_UP },
268 { 0x1CB, AF_ADJUST_UP },
270 { 0x1CC, AF_ADJUST_UP },
271 { 0x1CD, AF_ADJUST_UP },
272 { 0x1CE, AF_ADJUST_UP },
273 { 0x1CF, AF_ADJUST_UP },
275 { 0x1D0, AF_ADJUST_UP },
276 { 0x1D1, AF_ADJUST_UP },
277 { 0x1D2, AF_ADJUST_UP },
278 { 0x1D3, AF_ADJUST_UP },
279 { 0x1D4, AF_ADJUST_UP },
280 { 0x1D5, AF_ADJUST_UP2 },
281 { 0x1D6, AF_ADJUST_UP2 },
282 { 0x1D7, AF_ADJUST_UP2 },
283 { 0x1D8, AF_ADJUST_UP2 },
284 { 0x1D9, AF_ADJUST_UP2 },
285 { 0x1DA, AF_ADJUST_UP2 },
286 { 0x1DB, AF_ADJUST_UP2 },
287 { 0x1DC, AF_ADJUST_UP2 },
288 { 0x1DE, AF_ADJUST_UP2 },
289 { 0x1DF, AF_ADJUST_UP2 },
291 { 0x1E0, AF_ADJUST_UP2 },
292 { 0x1E1, AF_ADJUST_UP2 },
293 { 0x1E2, AF_ADJUST_UP },
294 { 0x1E3, AF_ADJUST_UP },
295 { 0x1E6, AF_ADJUST_UP },
296 { 0x1E7, AF_ADJUST_UP },
297 { 0x1E8, AF_ADJUST_UP },
298 { 0x1E9, AF_ADJUST_UP },
299 { 0x1EA, AF_IGNORE_CAPITAL_BOTTOM },
300 { 0x1EB, AF_IGNORE_SMALL_BOTTOM },
301 { 0x1EC, AF_ADJUST_UP | AF_IGNORE_CAPITAL_BOTTOM },
302 { 0x1ED, AF_ADJUST_UP | AF_IGNORE_SMALL_BOTTOM },
303 { 0x1EE, AF_ADJUST_UP },
304 { 0x1EF, AF_ADJUST_UP },
306 { 0x1F0, AF_ADJUST_UP },
307 { 0x1F4, AF_ADJUST_UP },
308 { 0x1F5, AF_ADJUST_UP },
309 { 0x1F8, AF_ADJUST_UP },
310 { 0x1F9, AF_ADJUST_UP },
311 { 0x1FA, AF_ADJUST_UP2 },
312 { 0x1FB, AF_ADJUST_UP2 },
313 { 0x1FC, AF_ADJUST_UP },
314 { 0x1FD, AF_ADJUST_UP },
315 { 0x1FE, AF_ADJUST_UP },
316 { 0x1FF, AF_ADJUST_UP },
318 { 0x200, AF_ADJUST_UP },
319 { 0x201, AF_ADJUST_UP },
320 { 0x202, AF_ADJUST_UP },
321 { 0x203, AF_ADJUST_UP },
322 { 0x204, AF_ADJUST_UP },
323 { 0x205, AF_ADJUST_UP },
324 { 0x206, AF_ADJUST_UP },
325 { 0x207, AF_ADJUST_UP },
326 { 0x208, AF_ADJUST_UP },
327 { 0x209, AF_ADJUST_UP },
328 { 0x20A, AF_ADJUST_UP },
329 { 0x20B, AF_ADJUST_UP },
330 { 0x20C, AF_ADJUST_UP },
331 { 0x20D, AF_ADJUST_UP },
332 { 0x20E, AF_ADJUST_UP },
333 { 0x20F, AF_ADJUST_UP },
335 { 0x210, AF_ADJUST_UP },
336 { 0x211, AF_ADJUST_UP },
337 { 0x212, AF_ADJUST_UP },
338 { 0x213, AF_ADJUST_UP },
339 { 0x214, AF_ADJUST_UP },
340 { 0x215, AF_ADJUST_UP },
341 { 0x216, AF_ADJUST_UP },
342 { 0x217, AF_ADJUST_UP },
343 { 0x218, AF_ADJUST_DOWN },
344 { 0x219, AF_ADJUST_DOWN },
345 { 0x21A, AF_ADJUST_DOWN },
346 { 0x21B, AF_ADJUST_DOWN },
347 { 0x21E, AF_ADJUST_UP },
348 { 0x21F, AF_ADJUST_UP },
350 { 0x224, AF_IGNORE_CAPITAL_BOTTOM },
351 { 0x225, AF_IGNORE_SMALL_BOTTOM },
352 { 0x226, AF_ADJUST_UP },
353 { 0x227, AF_ADJUST_UP },
354 { 0x228, AF_IGNORE_CAPITAL_BOTTOM },
355 { 0x229, AF_IGNORE_SMALL_BOTTOM },
356 { 0x22A, AF_ADJUST_UP2 },
357 { 0x22B, AF_ADJUST_UP2 },
358 { 0x22C, AF_ADJUST_UP2 },
359 { 0x22D, AF_ADJUST_UP2 },
360 { 0x22E, AF_ADJUST_UP },
361 { 0x22F, AF_ADJUST_UP },
363 { 0x230, AF_ADJUST_UP2 },
364 { 0x231, AF_ADJUST_UP2 },
365 { 0x232, AF_ADJUST_UP },
366 { 0x233, AF_ADJUST_UP },
367 { 0x23A, AF_IGNORE_CAPITAL_TOP | AF_IGNORE_CAPITAL_BOTTOM },
368 { 0x23B, AF_IGNORE_CAPITAL_TOP | AF_IGNORE_CAPITAL_BOTTOM },
369 { 0x23F, AF_IGNORE_SMALL_BOTTOM },
371 { 0x240, AF_IGNORE_SMALL_BOTTOM },
372 { 0x249, AF_ADJUST_UP },
375 { 0x256, AF_IGNORE_SMALL_BOTTOM },
377 { 0x260, AF_IGNORE_SMALL_TOP },
378 { 0x267, AF_IGNORE_SMALL_BOTTOM },
379 { 0x268, AF_ADJUST_UP },
381 { 0x272, AF_IGNORE_SMALL_BOTTOM },
382 { 0x273, AF_IGNORE_SMALL_BOTTOM },
383 { 0x27B, AF_IGNORE_SMALL_BOTTOM },
384 { 0x27D, AF_IGNORE_SMALL_BOTTOM },
386 { 0x282, AF_IGNORE_SMALL_BOTTOM },
387 { 0x288, AF_IGNORE_SMALL_BOTTOM },
389 { 0x290, AF_IGNORE_SMALL_BOTTOM },
390 { 0x29B, AF_IGNORE_SMALL_TOP },
392 { 0x2A0, AF_IGNORE_SMALL_TOP },
395 { 0x2B2, AF_ADJUST_UP },
396 { 0x2B5, AF_IGNORE_SMALL_BOTTOM },
399 { 0x390, AF_ADJUST_UP2 },
401 { 0x3AA, AF_ADJUST_UP },
402 { 0x3AB, AF_ADJUST_UP },
403 { 0x3AC, AF_ADJUST_UP },
404 { 0x3AD, AF_ADJUST_UP },
405 { 0x3AE, AF_ADJUST_UP },
406 { 0x3AF, AF_ADJUST_UP },
408 { 0x3B0, AF_ADJUST_UP2 },
410 { 0x3CA, AF_ADJUST_UP },
411 { 0x3CB, AF_ADJUST_UP },
412 { 0x3CC, AF_ADJUST_UP },
413 { 0x3CD, AF_ADJUST_UP },
414 { 0x3CE, AF_ADJUST_UP },
415 { 0x3CF, AF_IGNORE_CAPITAL_BOTTOM },
417 { 0x3D4, AF_ADJUST_UP },
418 { 0x3D7, AF_IGNORE_SMALL_BOTTOM },
419 { 0x3D9, AF_IGNORE_SMALL_BOTTOM },
421 { 0x3E2, AF_IGNORE_CAPITAL_BOTTOM },
422 { 0x3E3, AF_IGNORE_SMALL_BOTTOM },
424 { 0x3F3, AF_ADJUST_UP },
427 { 0x400, AF_ADJUST_UP },
428 { 0x401, AF_ADJUST_UP },
429 { 0x403, AF_ADJUST_UP },
430 { 0x407, AF_ADJUST_UP },
431 { 0x40C, AF_ADJUST_UP },
432 { 0x40D, AF_ADJUST_UP },
433 { 0x40E, AF_ADJUST_UP },
434 { 0x40F, AF_IGNORE_CAPITAL_BOTTOM },
436 { 0x419, AF_ADJUST_UP },
438 { 0x426, AF_IGNORE_CAPITAL_BOTTOM },
439 { 0x429, AF_IGNORE_CAPITAL_BOTTOM },
441 { 0x439, AF_ADJUST_UP },
443 { 0x446, AF_IGNORE_SMALL_BOTTOM },
444 { 0x449, AF_IGNORE_SMALL_BOTTOM },
446 { 0x450, AF_ADJUST_UP },
447 { 0x451, AF_ADJUST_UP },
448 { 0x453, AF_ADJUST_UP },
449 { 0x456, AF_ADJUST_UP },
450 { 0x457, AF_ADJUST_UP },
451 { 0x458, AF_ADJUST_UP },
452 { 0x45C, AF_ADJUST_UP },
453 { 0x45D, AF_ADJUST_UP },
454 { 0x45E, AF_ADJUST_UP },
455 { 0x45F, AF_IGNORE_SMALL_BOTTOM },
457 { 0x476, AF_ADJUST_UP },
458 { 0x477, AF_ADJUST_UP },
459 { 0x47C, AF_ADJUST_UP2 },
460 { 0x47D, AF_ADJUST_UP2 },
461 { 0x47E, AF_ADJUST_UP },
462 { 0x47F, AF_ADJUST_UP },
464 { 0x480, AF_IGNORE_CAPITAL_BOTTOM },
465 { 0x481, AF_IGNORE_SMALL_BOTTOM },
466 { 0x48A, AF_ADJUST_UP | AF_IGNORE_CAPITAL_BOTTOM },
467 { 0x48B, AF_ADJUST_UP | AF_IGNORE_SMALL_BOTTOM },
469 { 0x490, AF_IGNORE_CAPITAL_TOP },
470 { 0x491, AF_IGNORE_SMALL_TOP },
471 { 0x496, AF_IGNORE_CAPITAL_BOTTOM },
472 { 0x497, AF_IGNORE_SMALL_BOTTOM },
473 { 0x498, AF_IGNORE_CAPITAL_BOTTOM },
474 { 0x499, AF_IGNORE_SMALL_BOTTOM },
475 { 0x49A, AF_IGNORE_CAPITAL_BOTTOM },
476 { 0x49B, AF_IGNORE_SMALL_BOTTOM },
478 { 0x4A2, AF_IGNORE_CAPITAL_BOTTOM },
479 { 0x4A3, AF_IGNORE_SMALL_BOTTOM },
480 { 0x4AA, AF_IGNORE_CAPITAL_BOTTOM },
481 { 0x4AB, AF_IGNORE_SMALL_BOTTOM },
482 { 0x4AC, AF_IGNORE_CAPITAL_BOTTOM },
483 { 0x4AD, AF_IGNORE_SMALL_BOTTOM },
485 { 0x4B2, AF_IGNORE_CAPITAL_BOTTOM },
486 { 0x4B3, AF_IGNORE_SMALL_BOTTOM },
487 { 0x4B4, AF_IGNORE_CAPITAL_BOTTOM },
488 { 0x4B5, AF_IGNORE_SMALL_BOTTOM },
489 { 0x4B6, AF_IGNORE_CAPITAL_BOTTOM },
490 { 0x4B7, AF_IGNORE_SMALL_BOTTOM },
491 { 0x4BE, AF_IGNORE_CAPITAL_BOTTOM },
492 { 0x4BF, AF_IGNORE_SMALL_BOTTOM },
494 { 0x4C1, AF_ADJUST_UP },
495 { 0x4C2, AF_ADJUST_UP },
496 { 0x4C5, AF_IGNORE_CAPITAL_BOTTOM },
497 { 0x4C6, AF_IGNORE_SMALL_BOTTOM },
498 { 0x4C9, AF_IGNORE_CAPITAL_BOTTOM },
499 { 0x4CA, AF_IGNORE_SMALL_BOTTOM },
500 { 0x4CB, AF_IGNORE_CAPITAL_BOTTOM },
501 { 0x4CC, AF_IGNORE_SMALL_BOTTOM },
502 { 0x4CD, AF_IGNORE_CAPITAL_BOTTOM },
503 { 0x4CE, AF_IGNORE_SMALL_BOTTOM },
505 { 0x4D0, AF_ADJUST_UP },
506 { 0x4D1, AF_ADJUST_UP },
507 { 0x4D2, AF_ADJUST_UP },
508 { 0x4D3, AF_ADJUST_UP },
509 { 0x4D6, AF_ADJUST_UP },
510 { 0x4D7, AF_ADJUST_UP },
511 { 0x4DA, AF_ADJUST_UP },
512 { 0x4DB, AF_ADJUST_UP },
513 { 0x4DC, AF_ADJUST_UP },
514 { 0x4DD, AF_ADJUST_UP },
515 { 0x4DE, AF_ADJUST_UP },
516 { 0x4DF, AF_ADJUST_UP },
518 { 0x4E2, AF_ADJUST_UP },
519 { 0x4E3, AF_ADJUST_UP },
520 { 0x4E4, AF_ADJUST_UP },
521 { 0x4E5, AF_ADJUST_UP },
522 { 0x4E6, AF_ADJUST_UP },
523 { 0x4E7, AF_ADJUST_UP },
524 { 0x4EA, AF_ADJUST_UP },
525 { 0x4EB, AF_ADJUST_UP },
526 { 0x4EC, AF_ADJUST_UP },
527 { 0x4ED, AF_ADJUST_UP },
528 { 0x4EE, AF_ADJUST_UP },
529 { 0x4EF, AF_ADJUST_UP },
531 { 0x4F0, AF_ADJUST_UP },
532 { 0x4F1, AF_ADJUST_UP },
533 { 0x4F2, AF_ADJUST_UP },
534 { 0x4F3, AF_ADJUST_UP },
535 { 0x4F4, AF_ADJUST_UP },
536 { 0x4F5, AF_ADJUST_UP },
537 { 0x4F6, AF_IGNORE_CAPITAL_BOTTOM },
538 { 0x4F7, AF_IGNORE_SMALL_BOTTOM },
539 { 0x4F8, AF_ADJUST_UP },
540 { 0x4F9, AF_ADJUST_UP },
541 { 0x4FA, AF_IGNORE_CAPITAL_BOTTOM },
542 { 0x4FB, AF_IGNORE_SMALL_BOTTOM },
545 { 0x506, AF_IGNORE_CAPITAL_BOTTOM },
546 { 0x507, AF_IGNORE_SMALL_BOTTOM },
548 { 0x524, AF_IGNORE_CAPITAL_BOTTOM },
549 { 0x525, AF_IGNORE_SMALL_BOTTOM },
550 { 0x526, AF_IGNORE_CAPITAL_BOTTOM },
551 { 0x527, AF_IGNORE_SMALL_BOTTOM },
552 { 0x52E, AF_IGNORE_CAPITAL_BOTTOM },
553 { 0x52F, AF_IGNORE_SMALL_BOTTOM },
556 { 0x13A5, AF_ADJUST_UP },
559 { 0x1D09, AF_ADJUST_DOWN },
561 { 0x1D4E, AF_ADJUST_DOWN },
563 { 0x1D51, AF_IGNORE_SMALL_BOTTOM },
565 { 0x1D62, AF_ADJUST_UP },
568 { 0x1D80, AF_IGNORE_SMALL_BOTTOM },
569 { 0x1D81, AF_IGNORE_SMALL_BOTTOM },
570 { 0x1D82, AF_IGNORE_SMALL_BOTTOM },
571 { 0x1D84, AF_IGNORE_SMALL_BOTTOM },
572 { 0x1D85, AF_IGNORE_SMALL_BOTTOM },
573 { 0x1D86, AF_IGNORE_SMALL_BOTTOM },
574 { 0x1D87, AF_IGNORE_SMALL_BOTTOM },
575 { 0x1D89, AF_IGNORE_SMALL_BOTTOM },
576 { 0x1D8A, AF_IGNORE_SMALL_BOTTOM },
577 { 0x1D8C, AF_IGNORE_SMALL_BOTTOM },
578 { 0x1D8D, AF_IGNORE_SMALL_BOTTOM },
579 { 0x1D8E, AF_IGNORE_SMALL_BOTTOM },
580 { 0x1D8F, AF_IGNORE_SMALL_BOTTOM },
582 { 0x1D90, AF_IGNORE_SMALL_BOTTOM },
583 { 0x1D91, AF_IGNORE_SMALL_BOTTOM },
584 { 0x1D92, AF_IGNORE_SMALL_BOTTOM },
585 { 0x1D93, AF_IGNORE_SMALL_BOTTOM },
586 { 0x1D94, AF_IGNORE_SMALL_BOTTOM },
587 { 0x1D95, AF_IGNORE_SMALL_BOTTOM },
588 { 0x1D96, AF_ADJUST_UP | AF_IGNORE_SMALL_BOTTOM },
589 { 0x1D97, AF_IGNORE_SMALL_BOTTOM },
590 { 0x1D98, AF_IGNORE_SMALL_BOTTOM },
591 { 0x1D99, AF_IGNORE_SMALL_BOTTOM },
592 { 0x1D9A, AF_IGNORE_SMALL_BOTTOM },
594 { 0x1DA4, AF_ADJUST_UP },
595 { 0x1DA8, AF_ADJUST_UP },
596 { 0x1DA9, AF_IGNORE_SMALL_BOTTOM },
597 { 0x1DAA, AF_IGNORE_SMALL_BOTTOM },
598 { 0x1DAC, AF_IGNORE_SMALL_BOTTOM },
599 { 0x1DAE, AF_IGNORE_SMALL_BOTTOM },
600 { 0x1DAF, AF_IGNORE_SMALL_BOTTOM },
602 { 0x1DB3, AF_IGNORE_SMALL_BOTTOM },
603 { 0x1DB5, AF_IGNORE_SMALL_BOTTOM },
604 { 0x1DBC, AF_IGNORE_SMALL_BOTTOM },
607 { 0x1E00, AF_ADJUST_DOWN },
608 { 0x1E01, AF_ADJUST_DOWN },
609 { 0x1E02, AF_ADJUST_UP },
610 { 0x1E03, AF_ADJUST_UP },
611 { 0x1E04, AF_ADJUST_DOWN },
612 { 0x1E05, AF_ADJUST_DOWN },
613 { 0x1E06, AF_ADJUST_DOWN },
614 { 0x1E07, AF_ADJUST_DOWN },
615 { 0x1E08, AF_ADJUST_UP | AF_IGNORE_CAPITAL_BOTTOM },
616 { 0x1E09, AF_ADJUST_UP | AF_IGNORE_SMALL_BOTTOM },
617 { 0x1E0A, AF_ADJUST_UP },
618 { 0x1E0B, AF_ADJUST_UP },
619 { 0x1E0C, AF_ADJUST_DOWN },
620 { 0x1E0D, AF_ADJUST_DOWN },
621 { 0x1E0E, AF_ADJUST_DOWN },
622 { 0x1E0F, AF_ADJUST_DOWN },
624 { 0x1E10, AF_ADJUST_DOWN },
625 { 0x1E11, AF_ADJUST_DOWN },
626 { 0x1E12, AF_ADJUST_DOWN },
627 { 0x1E13, AF_ADJUST_DOWN },
628 { 0x1E14, AF_ADJUST_UP2 },
629 { 0x1E15, AF_ADJUST_UP2 },
630 { 0x1E16, AF_ADJUST_UP2 },
631 { 0x1E17, AF_ADJUST_UP2 },
632 { 0x1E18, AF_ADJUST_DOWN },
633 { 0x1E19, AF_ADJUST_DOWN },
634 { 0x1E1A, AF_ADJUST_DOWN | AF_ADJUST_TILDE_BOTTOM },
635 { 0x1E1B, AF_ADJUST_DOWN | AF_ADJUST_TILDE_BOTTOM },
636 { 0x1E1C, AF_ADJUST_UP | AF_IGNORE_CAPITAL_BOTTOM },
637 { 0x1E1D, AF_ADJUST_UP | AF_IGNORE_SMALL_BOTTOM },
638 { 0x1E1E, AF_ADJUST_UP },
639 { 0x1E1F, AF_ADJUST_UP },
641 { 0x1E20, AF_ADJUST_UP },
642 { 0x1E21, AF_ADJUST_UP },
643 { 0x1E22, AF_ADJUST_UP },
644 { 0x1E23, AF_ADJUST_UP },
645 { 0x1E24, AF_ADJUST_DOWN },
646 { 0x1E25, AF_ADJUST_DOWN },
647 { 0x1E26, AF_ADJUST_UP },
648 { 0x1E27, AF_ADJUST_UP },
649 { 0x1E28, AF_IGNORE_CAPITAL_BOTTOM },
650 { 0x1E29, AF_IGNORE_SMALL_BOTTOM },
651 { 0x1E2A, AF_ADJUST_DOWN },
652 { 0x1E2B, AF_ADJUST_DOWN },
653 { 0x1E2C, AF_ADJUST_DOWN | AF_ADJUST_TILDE_BOTTOM },
654 { 0x1E2D, AF_ADJUST_UP | AF_ADJUST_DOWN | AF_ADJUST_TILDE_BOTTOM },
655 { 0x1E2E, AF_ADJUST_UP2 },
656 { 0x1E2F, AF_ADJUST_UP2 },
658 { 0x1E30, AF_ADJUST_UP },
659 { 0x1E31, AF_ADJUST_UP },
660 { 0x1E32, AF_ADJUST_DOWN },
661 { 0x1E33, AF_ADJUST_DOWN },
662 { 0x1E34, AF_ADJUST_DOWN },
663 { 0x1E35, AF_ADJUST_DOWN },
664 { 0x1E36, AF_ADJUST_DOWN },
665 { 0x1E37, AF_ADJUST_DOWN },
666 { 0x1E38, AF_ADJUST_UP | AF_ADJUST_DOWN },
667 { 0x1E39, AF_ADJUST_UP | AF_ADJUST_DOWN },
668 { 0x1E3A, AF_ADJUST_DOWN },
669 { 0x1E3B, AF_ADJUST_DOWN },
670 { 0x1E3C, AF_ADJUST_DOWN },
671 { 0x1E3D, AF_ADJUST_DOWN },
672 { 0x1E3E, AF_ADJUST_UP },
673 { 0x1E3F, AF_ADJUST_UP },
675 { 0x1E40, AF_ADJUST_UP },
676 { 0x1E41, AF_ADJUST_UP },
677 { 0x1E42, AF_ADJUST_DOWN },
678 { 0x1E43, AF_ADJUST_DOWN },
679 { 0x1E44, AF_ADJUST_UP },
680 { 0x1E45, AF_ADJUST_UP },
681 { 0x1E46, AF_ADJUST_DOWN },
682 { 0x1E47, AF_ADJUST_DOWN },
683 { 0x1E48, AF_ADJUST_DOWN },
684 { 0x1E49, AF_ADJUST_DOWN },
685 { 0x1E4A, AF_ADJUST_DOWN },
686 { 0x1E4B, AF_ADJUST_DOWN },
687 { 0x1E4C, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP2 },
688 { 0x1E4D, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP2 },
689 { 0x1E4E, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP2 },
690 { 0x1E4F, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP2 },
692 { 0x1E50, AF_ADJUST_UP2 },
693 { 0x1E51, AF_ADJUST_UP2 },
694 { 0x1E52, AF_ADJUST_UP2 },
695 { 0x1E53, AF_ADJUST_UP2 },
696 { 0x1E54, AF_ADJUST_UP },
697 { 0x1E55, AF_ADJUST_UP },
698 { 0x1E56, AF_ADJUST_UP },
699 { 0x1E57, AF_ADJUST_UP },
700 { 0x1E58, AF_ADJUST_UP },
701 { 0x1E59, AF_ADJUST_UP },
702 { 0x1E5A, AF_ADJUST_DOWN },
703 { 0x1E5B, AF_ADJUST_DOWN },
704 { 0x1E5C, AF_ADJUST_UP | AF_ADJUST_DOWN },
705 { 0x1E5D, AF_ADJUST_UP | AF_ADJUST_DOWN },
706 { 0x1E5E, AF_ADJUST_DOWN },
707 { 0x1E5F, AF_ADJUST_DOWN },
709 { 0x1E60, AF_ADJUST_UP },
710 { 0x1E61, AF_ADJUST_UP },
711 { 0x1E62, AF_ADJUST_DOWN },
712 { 0x1E63, AF_ADJUST_DOWN },
713 { 0x1E64, AF_ADJUST_UP },
714 { 0x1E65, AF_ADJUST_UP },
715 { 0x1E66, AF_ADJUST_UP },
716 { 0x1E67, AF_ADJUST_UP },
717 { 0x1E68, AF_ADJUST_UP | AF_ADJUST_DOWN },
718 { 0x1E69, AF_ADJUST_UP | AF_ADJUST_DOWN },
719 { 0x1E6A, AF_ADJUST_UP },
720 { 0x1E6B, AF_ADJUST_UP },
721 { 0x1E6C, AF_ADJUST_DOWN },
722 { 0x1E6D, AF_ADJUST_DOWN },
723 { 0x1E6E, AF_ADJUST_DOWN },
724 { 0x1E6F, AF_ADJUST_DOWN },
726 { 0x1E70, AF_ADJUST_DOWN },
727 { 0x1E71, AF_ADJUST_DOWN },
728 { 0x1E72, AF_ADJUST_DOWN },
729 { 0x1E73, AF_ADJUST_DOWN },
730 { 0x1E74, AF_ADJUST_DOWN | AF_ADJUST_TILDE_BOTTOM },
731 { 0x1E75, AF_ADJUST_DOWN | AF_ADJUST_TILDE_BOTTOM },
732 { 0x1E76, AF_ADJUST_DOWN },
733 { 0x1E77, AF_ADJUST_DOWN },
734 { 0x1E78, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP2 },
735 { 0x1E79, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP2 },
736 { 0x1E7A, AF_ADJUST_UP2 },
737 { 0x1E7B, AF_ADJUST_UP2 },
738 { 0x1E7C, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
739 { 0x1E7D, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
740 { 0x1E7E, AF_ADJUST_DOWN },
741 { 0x1E7F, AF_ADJUST_DOWN },
743 { 0x1E80, AF_ADJUST_UP },
744 { 0x1E81, AF_ADJUST_UP },
745 { 0x1E82, AF_ADJUST_UP },
746 { 0x1E83, AF_ADJUST_UP },
747 { 0x1E84, AF_ADJUST_UP },
748 { 0x1E85, AF_ADJUST_UP },
749 { 0x1E86, AF_ADJUST_UP },
750 { 0x1E87, AF_ADJUST_UP },
751 { 0x1E88, AF_ADJUST_DOWN },
752 { 0x1E89, AF_ADJUST_DOWN },
753 { 0x1E8A, AF_ADJUST_UP },
754 { 0x1E8B, AF_ADJUST_UP },
755 { 0x1E8C, AF_ADJUST_UP },
756 { 0x1E8D, AF_ADJUST_UP },
757 { 0x1E8E, AF_ADJUST_UP },
758 { 0x1E8F, AF_ADJUST_UP },
760 { 0x1E90, AF_ADJUST_UP },
761 { 0x1E91, AF_ADJUST_UP },
762 { 0x1E92, AF_ADJUST_DOWN },
763 { 0x1E93, AF_ADJUST_DOWN },
764 { 0x1E94, AF_ADJUST_DOWN },
765 { 0x1E95, AF_ADJUST_DOWN },
766 { 0x1E96, AF_ADJUST_DOWN },
767 { 0x1E97, AF_ADJUST_UP },
768 { 0x1E98, AF_ADJUST_UP },
769 { 0x1E99, AF_ADJUST_UP },
770 { 0x1E9A, AF_ADJUST_UP },
771 { 0x1E9B, AF_ADJUST_UP },
773 { 0x1EA0, AF_ADJUST_DOWN },
774 { 0x1EA1, AF_ADJUST_DOWN },
775 { 0x1EA2, AF_ADJUST_UP },
776 { 0x1EA3, AF_ADJUST_UP },
777 { 0x1EA4, AF_ADJUST_UP2 },
778 { 0x1EA5, AF_ADJUST_UP2 },
779 { 0x1EA6, AF_ADJUST_UP2 },
780 { 0x1EA7, AF_ADJUST_UP2 },
781 { 0x1EA8, AF_ADJUST_UP2 },
782 { 0x1EA9, AF_ADJUST_UP2 },
783 { 0x1EAA, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
784 { 0x1EAB, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
785 { 0x1EAC, AF_ADJUST_UP | AF_ADJUST_DOWN },
786 { 0x1EAD, AF_ADJUST_UP | AF_ADJUST_DOWN },
787 { 0x1EAE, AF_ADJUST_UP2 },
788 { 0x1EAF, AF_ADJUST_UP2 },
790 { 0x1EB0, AF_ADJUST_UP2 },
791 { 0x1EB1, AF_ADJUST_UP2 },
792 { 0x1EB2, AF_ADJUST_UP2 },
793 { 0x1EB3, AF_ADJUST_UP2 },
794 { 0x1EB4, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
795 { 0x1EB5, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
796 { 0x1EB6, AF_ADJUST_UP | AF_ADJUST_DOWN },
797 { 0x1EB7, AF_ADJUST_UP | AF_ADJUST_DOWN },
798 { 0x1EB8, AF_ADJUST_DOWN },
799 { 0x1EB9, AF_ADJUST_DOWN },
800 { 0x1EBA, AF_ADJUST_UP },
801 { 0x1EBB, AF_ADJUST_UP },
802 { 0x1EBC, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
803 { 0x1EBD, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
804 { 0x1EBE, AF_ADJUST_UP2 },
805 { 0x1EBF, AF_ADJUST_UP2 },
807 { 0x1EC0, AF_ADJUST_UP2 },
808 { 0x1EC1, AF_ADJUST_UP2 },
809 { 0x1EC2, AF_ADJUST_UP2 },
810 { 0x1EC3, AF_ADJUST_UP2 },
811 { 0x1EC4, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
812 { 0x1EC5, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
813 { 0x1EC6, AF_ADJUST_UP | AF_ADJUST_DOWN },
814 { 0x1EC7, AF_ADJUST_UP | AF_ADJUST_DOWN },
815 { 0x1EC8, AF_ADJUST_UP },
816 { 0x1EC9, AF_ADJUST_UP },
817 { 0x1ECA, AF_ADJUST_DOWN },
818 { 0x1ECB, AF_ADJUST_UP | AF_ADJUST_DOWN },
819 { 0x1ECC, AF_ADJUST_DOWN },
820 { 0x1ECD, AF_ADJUST_DOWN },
821 { 0x1ECE, AF_ADJUST_UP },
822 { 0x1ECF, AF_ADJUST_UP },
824 { 0x1ED0, AF_ADJUST_UP2 },
825 { 0x1ED1, AF_ADJUST_UP2 },
826 { 0x1ED2, AF_ADJUST_UP2 },
827 { 0x1ED3, AF_ADJUST_UP2 },
828 { 0x1ED4, AF_ADJUST_UP2 },
829 { 0x1ED5, AF_ADJUST_UP2 },
830 { 0x1ED6, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
831 { 0x1ED7, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
832 { 0x1ED8, AF_ADJUST_UP | AF_ADJUST_DOWN },
833 { 0x1ED9, AF_ADJUST_UP | AF_ADJUST_DOWN },
834 { 0x1EDA, AF_ADJUST_UP | AF_IGNORE_CAPITAL_TOP },
835 { 0x1EDB, AF_ADJUST_UP | AF_IGNORE_SMALL_TOP },
836 { 0x1EDC, AF_ADJUST_UP | AF_IGNORE_CAPITAL_TOP },
837 { 0x1EDD, AF_ADJUST_UP | AF_IGNORE_SMALL_TOP },
838 { 0x1EDE, AF_ADJUST_UP | AF_IGNORE_CAPITAL_TOP },
839 { 0x1EDF, AF_ADJUST_UP | AF_IGNORE_SMALL_TOP },
841 { 0x1EE0, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP | AF_IGNORE_CAPITAL_TOP },
842 { 0x1EE1, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP | AF_IGNORE_SMALL_TOP },
843 { 0x1EE2, AF_ADJUST_DOWN | AF_IGNORE_CAPITAL_TOP },
844 { 0x1EE3, AF_ADJUST_DOWN | AF_IGNORE_SMALL_TOP },
845 { 0x1EE4, AF_ADJUST_DOWN },
846 { 0x1EE5, AF_ADJUST_DOWN },
847 { 0x1EE6, AF_ADJUST_UP },
848 { 0x1EE7, AF_ADJUST_UP },
849 { 0x1EE8, AF_ADJUST_UP | AF_IGNORE_CAPITAL_TOP },
850 { 0x1EE9, AF_ADJUST_UP | AF_IGNORE_SMALL_TOP },
851 { 0x1EEA, AF_ADJUST_UP | AF_IGNORE_CAPITAL_TOP },
852 { 0x1EEB, AF_ADJUST_UP | AF_IGNORE_SMALL_TOP },
853 { 0x1EEC, AF_ADJUST_UP | AF_IGNORE_CAPITAL_TOP },
854 { 0x1EED, AF_ADJUST_UP | AF_IGNORE_SMALL_TOP },
855 { 0x1EEE, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP | AF_IGNORE_CAPITAL_TOP },
856 { 0x1EEF, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP | AF_IGNORE_SMALL_TOP },
858 { 0x1EF0, AF_ADJUST_DOWN | AF_IGNORE_CAPITAL_TOP },
859 { 0x1EF1, AF_ADJUST_DOWN | AF_IGNORE_SMALL_TOP },
860 { 0x1EF2, AF_ADJUST_UP },
861 { 0x1EF3, AF_ADJUST_UP },
862 { 0x1EF4, AF_ADJUST_DOWN },
863 { 0x1EF5, AF_ADJUST_DOWN },
864 { 0x1EF6, AF_ADJUST_UP },
865 { 0x1EF7, AF_ADJUST_UP },
866 { 0x1EF8, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
867 { 0x1EF9, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
870 { 0x1F00, AF_ADJUST_UP },
871 { 0x1F01, AF_ADJUST_UP },
872 { 0x1F02, AF_ADJUST_UP },
873 { 0x1F03, AF_ADJUST_UP },
874 { 0x1F04, AF_ADJUST_UP },
875 { 0x1F05, AF_ADJUST_UP },
876 { 0x1F06, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
877 { 0x1F07, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
879 { 0x1F10, AF_ADJUST_UP },
880 { 0x1F11, AF_ADJUST_UP },
881 { 0x1F12, AF_ADJUST_UP },
882 { 0x1F13, AF_ADJUST_UP },
883 { 0x1F14, AF_ADJUST_UP },
884 { 0x1F15, AF_ADJUST_UP },
886 { 0x1F20, AF_ADJUST_UP },
887 { 0x1F21, AF_ADJUST_UP },
888 { 0x1F22, AF_ADJUST_UP },
889 { 0x1F23, AF_ADJUST_UP },
890 { 0x1F24, AF_ADJUST_UP },
891 { 0x1F25, AF_ADJUST_UP },
892 { 0x1F26, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
893 { 0x1F27, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
895 { 0x1F30, AF_ADJUST_UP },
896 { 0x1F31, AF_ADJUST_UP },
897 { 0x1F32, AF_ADJUST_UP },
898 { 0x1F33, AF_ADJUST_UP },
899 { 0x1F34, AF_ADJUST_UP },
900 { 0x1F35, AF_ADJUST_UP },
901 { 0x1F36, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
902 { 0x1F37, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
904 { 0x1F40, AF_ADJUST_UP },
905 { 0x1F41, AF_ADJUST_UP },
906 { 0x1F42, AF_ADJUST_UP },
907 { 0x1F43, AF_ADJUST_UP },
908 { 0x1F44, AF_ADJUST_UP },
909 { 0x1F45, AF_ADJUST_UP },
911 { 0x1F50, AF_ADJUST_UP },
912 { 0x1F51, AF_ADJUST_UP },
913 { 0x1F52, AF_ADJUST_UP },
914 { 0x1F53, AF_ADJUST_UP },
915 { 0x1F54, AF_ADJUST_UP },
916 { 0x1F55, AF_ADJUST_UP },
917 { 0x1F56, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
918 { 0x1F57, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
920 { 0x1F60, AF_ADJUST_UP },
921 { 0x1F61, AF_ADJUST_UP },
922 { 0x1F62, AF_ADJUST_UP },
923 { 0x1F63, AF_ADJUST_UP },
924 { 0x1F64, AF_ADJUST_UP },
925 { 0x1F65, AF_ADJUST_UP },
926 { 0x1F66, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
927 { 0x1F67, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
929 { 0x1F70, AF_ADJUST_UP },
930 { 0x1F71, AF_ADJUST_UP },
931 { 0x1F72, AF_ADJUST_UP },
932 { 0x1F73, AF_ADJUST_UP },
933 { 0x1F74, AF_ADJUST_UP },
934 { 0x1F75, AF_ADJUST_UP },
935 { 0x1F76, AF_ADJUST_UP },
936 { 0x1F77, AF_ADJUST_UP },
937 { 0x1F78, AF_ADJUST_UP },
938 { 0x1F79, AF_ADJUST_UP },
939 { 0x1F7A, AF_ADJUST_UP },
940 { 0x1F7B, AF_ADJUST_UP },
941 { 0x1F7C, AF_ADJUST_UP },
942 { 0x1F7D, AF_ADJUST_UP },
944 { 0x1F80, AF_ADJUST_UP | AF_ADJUST_DOWN },
945 { 0x1F81, AF_ADJUST_UP | AF_ADJUST_DOWN },
946 { 0x1F82, AF_ADJUST_UP | AF_ADJUST_DOWN },
947 { 0x1F83, AF_ADJUST_UP | AF_ADJUST_DOWN },
948 { 0x1F84, AF_ADJUST_UP | AF_ADJUST_DOWN },
949 { 0x1F85, AF_ADJUST_UP | AF_ADJUST_DOWN },
950 { 0x1F86, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP | AF_ADJUST_DOWN },
951 { 0x1F87, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP | AF_ADJUST_DOWN },
952 { 0x1F88, AF_ADJUST_DOWN },
953 { 0x1F89, AF_ADJUST_DOWN },
954 { 0x1F8A, AF_ADJUST_DOWN },
955 { 0x1F8B, AF_ADJUST_DOWN },
956 { 0x1F8C, AF_ADJUST_DOWN },
957 { 0x1F8D, AF_ADJUST_DOWN },
958 { 0x1F8E, AF_ADJUST_DOWN },
959 { 0x1F8F, AF_ADJUST_DOWN },
961 { 0x1F90, AF_ADJUST_UP | AF_ADJUST_DOWN },
962 { 0x1F91, AF_ADJUST_UP | AF_ADJUST_DOWN },
963 { 0x1F92, AF_ADJUST_UP | AF_ADJUST_DOWN },
964 { 0x1F93, AF_ADJUST_UP | AF_ADJUST_DOWN },
965 { 0x1F94, AF_ADJUST_UP | AF_ADJUST_DOWN },
966 { 0x1F95, AF_ADJUST_UP | AF_ADJUST_DOWN },
967 { 0x1F96, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP | AF_ADJUST_DOWN },
968 { 0x1F97, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP | AF_ADJUST_DOWN },
969 { 0x1F98, AF_ADJUST_DOWN },
970 { 0x1F99, AF_ADJUST_DOWN },
971 { 0x1F9A, AF_ADJUST_DOWN },
972 { 0x1F9B, AF_ADJUST_DOWN },
973 { 0x1F9C, AF_ADJUST_DOWN },
974 { 0x1F9D, AF_ADJUST_DOWN },
975 { 0x1F9E, AF_ADJUST_DOWN },
976 { 0x1F9F, AF_ADJUST_DOWN },
978 { 0x1FA0, AF_ADJUST_UP | AF_ADJUST_DOWN },
979 { 0x1FA1, AF_ADJUST_UP | AF_ADJUST_DOWN },
980 { 0x1FA2, AF_ADJUST_UP | AF_ADJUST_DOWN },
981 { 0x1FA3, AF_ADJUST_UP | AF_ADJUST_DOWN },
982 { 0x1FA4, AF_ADJUST_UP | AF_ADJUST_DOWN },
983 { 0x1FA5, AF_ADJUST_UP | AF_ADJUST_DOWN },
984 { 0x1FA6, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP | AF_ADJUST_DOWN },
985 { 0x1FA7, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP | AF_ADJUST_DOWN },
986 { 0x1FA8, AF_ADJUST_DOWN },
987 { 0x1FA9, AF_ADJUST_DOWN },
988 { 0x1FAA, AF_ADJUST_DOWN },
989 { 0x1FAB, AF_ADJUST_DOWN },
990 { 0x1FAC, AF_ADJUST_DOWN },
991 { 0x1FAD, AF_ADJUST_DOWN },
992 { 0x1FAE, AF_ADJUST_DOWN },
993 { 0x1FAF, AF_ADJUST_DOWN },
995 { 0x1FB0, AF_ADJUST_UP },
996 { 0x1FB1, AF_ADJUST_UP },
997 { 0x1FB2, AF_ADJUST_UP | AF_ADJUST_DOWN },
998 { 0x1FB3, AF_ADJUST_DOWN },
999 { 0x1FB4, AF_ADJUST_UP | AF_ADJUST_DOWN },
1000 { 0x1FB6, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
1001 { 0x1FB7, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP | AF_ADJUST_DOWN },
1002 { 0x1FB8, AF_ADJUST_UP },
1003 { 0x1FB9, AF_ADJUST_UP },
1004 { 0x1FBC, AF_ADJUST_DOWN },
1006 { 0x1FC2, AF_ADJUST_UP | AF_ADJUST_DOWN },
1007 { 0x1FC3, AF_ADJUST_DOWN },
1008 { 0x1FC4, AF_ADJUST_UP | AF_ADJUST_DOWN },
1009 { 0x1FC6, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
1010 { 0x1FC7, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP | AF_ADJUST_DOWN },
1011 { 0x1FCC, AF_ADJUST_DOWN },
1013 { 0x1FD0, AF_ADJUST_UP },
1014 { 0x1FD1, AF_ADJUST_UP },
1015 { 0x1FD2, AF_ADJUST_UP2 },
1016 { 0x1FD3, AF_ADJUST_UP2 },
1017 { 0x1FD6, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
1018 { 0x1FD7, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
1019 { 0x1FD8, AF_ADJUST_UP },
1020 { 0x1FD9, AF_ADJUST_UP },
1022 { 0x1FE0, AF_ADJUST_UP },
1023 { 0x1FE1, AF_ADJUST_UP },
1024 { 0x1FE2, AF_ADJUST_UP2 },
1025 { 0x1FE3, AF_ADJUST_UP2 },
1026 { 0x1FE4, AF_ADJUST_UP },
1027 { 0x1FE5, AF_ADJUST_UP },
1028 { 0x1FE6, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
1029 { 0x1FE7, AF_ADJUST_UP2 | AF_ADJUST_TILDE_TOP },
1030 { 0x1FE8, AF_ADJUST_UP },
1031 { 0x1FE9, AF_ADJUST_UP },
1032 { 0x1FF2, AF_ADJUST_UP | AF_ADJUST_DOWN },
1033 { 0x1FF3, AF_ADJUST_DOWN },
1034 { 0x1FF4, AF_ADJUST_UP | AF_ADJUST_DOWN },
1035 { 0x1FF6, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP },
1036 { 0x1FF7, AF_ADJUST_UP | AF_ADJUST_TILDE_TOP | AF_ADJUST_DOWN },
1037 { 0x1FFC, AF_ADJUST_DOWN },
1040 { 0x203C, AF_ADJUST_UP | AF_ADJUST_NO_HEIGHT_CHECK },
1041 { 0x203D, AF_ADJUST_UP | AF_ADJUST_NO_HEIGHT_CHECK },
1043 { 0x2047, AF_ADJUST_UP | AF_ADJUST_NO_HEIGHT_CHECK },
1044 { 0x2048, AF_ADJUST_UP | AF_ADJUST_NO_HEIGHT_CHECK },
1045 { 0x2049, AF_ADJUST_UP | AF_ADJUST_NO_HEIGHT_CHECK },
1048 { 0x2071, AF_ADJUST_UP },
1051 { 0x20AB, AF_ADJUST_DOWN },
1053 { 0x20C0, AF_ADJUST_DOWN },
1056 { 0x2170, AF_ADJUST_UP },
1057 { 0x2171, AF_ADJUST_UP },
1058 { 0x2172, AF_ADJUST_UP },
1059 { 0x2173, AF_ADJUST_UP },
1060 { 0x2175, AF_ADJUST_UP },
1061 { 0x2176, AF_ADJUST_UP },
1062 { 0x2177, AF_ADJUST_UP },
1063 { 0x2178, AF_ADJUST_UP },
1064 { 0x217A, AF_ADJUST_UP },
1065 { 0x217B, AF_ADJUST_UP },
1068 { 0x2C64, AF_IGNORE_CAPITAL_BOTTOM } ,
1069 { 0x2C67, AF_IGNORE_CAPITAL_BOTTOM } ,
1070 { 0x2C68, AF_IGNORE_SMALL_BOTTOM } ,
1071 { 0x2C69, AF_IGNORE_CAPITAL_BOTTOM } ,
1072 { 0x2C6A, AF_IGNORE_SMALL_BOTTOM } ,
1073 { 0x2C6B, AF_IGNORE_CAPITAL_BOTTOM } ,
1074 { 0x2C6C, AF_IGNORE_SMALL_BOTTOM } ,
1075 { 0x2C6E, AF_IGNORE_CAPITAL_BOTTOM } ,
1077 { 0x2C7C, AF_ADJUST_UP },
1078 { 0x2C7E, AF_IGNORE_CAPITAL_BOTTOM } ,
1079 { 0x2C7F, AF_IGNORE_CAPITAL_BOTTOM } ,
1082 { 0x2CC2, AF_ADJUST_UP },
1083 { 0x2CC3, AF_ADJUST_UP },
1086 { 0x2E18, AF_ADJUST_UP },
1088 { 0x2E2E, AF_ADJUST_UP | AF_ADJUST_NO_HEIGHT_CHECK },
1091 { 0xA640, AF_IGNORE_CAPITAL_BOTTOM } ,
1092 { 0xA641, AF_IGNORE_SMALL_BOTTOM } ,
1093 { 0xA642, AF_IGNORE_CAPITAL_BOTTOM } ,
1094 { 0xA643, AF_IGNORE_SMALL_BOTTOM } ,
1096 { 0xA680, AF_IGNORE_CAPITAL_TOP } ,
1097 { 0xA681, AF_IGNORE_SMALL_TOP } ,
1098 { 0xA688, AF_IGNORE_CAPITAL_BOTTOM } ,
1099 { 0xA689, AF_IGNORE_SMALL_BOTTOM } ,
1100 { 0xA68A, AF_IGNORE_CAPITAL_BOTTOM } ,
1101 { 0xA68B, AF_IGNORE_SMALL_BOTTOM } ,
1102 { 0xA68E, AF_IGNORE_CAPITAL_BOTTOM } ,
1103 { 0xA68F, AF_IGNORE_SMALL_BOTTOM } ,
1105 { 0xA690, AF_IGNORE_CAPITAL_BOTTOM } ,
1106 { 0xA691, AF_IGNORE_SMALL_BOTTOM } ,
1107 { 0xA696, AF_IGNORE_CAPITAL_BOTTOM } ,
1108 { 0xA697, AF_IGNORE_SMALL_BOTTOM } ,
1111 { 0xA726, AF_IGNORE_CAPITAL_BOTTOM } ,
1112 { 0xA727, AF_IGNORE_SMALL_BOTTOM } ,
1114 { 0xA756, AF_IGNORE_CAPITAL_BOTTOM } ,
1115 { 0xA758, AF_IGNORE_CAPITAL_BOTTOM } ,
1117 { 0xA771, AF_IGNORE_SMALL_BOTTOM } ,
1118 { 0xA772, AF_IGNORE_SMALL_BOTTOM } ,
1119 { 0xA773, AF_IGNORE_SMALL_BOTTOM } ,
1120 { 0xA774, AF_IGNORE_SMALL_BOTTOM } ,
1121 { 0xA776, AF_IGNORE_SMALL_BOTTOM } ,
1123 { 0xA790, AF_IGNORE_CAPITAL_BOTTOM } ,
1124 { 0xA791, AF_IGNORE_SMALL_BOTTOM } ,
1125 { 0xA794, AF_IGNORE_SMALL_BOTTOM } ,
1126 { 0xA795, AF_IGNORE_SMALL_BOTTOM } ,
1128 { 0xA7C0, AF_IGNORE_CAPITAL_TOP | AF_IGNORE_CAPITAL_BOTTOM },
1129 { 0xA7C1, AF_IGNORE_SMALL_TOP | AF_IGNORE_SMALL_BOTTOM },
1130 { 0xA7C4, AF_IGNORE_CAPITAL_BOTTOM } ,
1131 { 0xA7C5, AF_IGNORE_CAPITAL_BOTTOM } ,
1132 { 0xA7C6, AF_IGNORE_CAPITAL_BOTTOM } ,
1133 { 0xA7CC, AF_IGNORE_CAPITAL_TOP | AF_IGNORE_CAPITAL_BOTTOM },
1134 { 0xA7CD, AF_IGNORE_SMALL_TOP | AF_IGNORE_SMALL_BOTTOM },
1137 { 0xAB3C, AF_IGNORE_SMALL_BOTTOM } ,
1139 { 0xAB46, AF_IGNORE_SMALL_BOTTOM } ,
1141 { 0xAB5C, AF_IGNORE_SMALL_BOTTOM } ,
1143 { 0xAB66, AF_IGNORE_SMALL_BOTTOM } ,
1144 { 0xAB67, AF_IGNORE_SMALL_BOTTOM } ,
1148 FT_LOCAL_DEF( FT_UInt32 )
1149 af_adjustment_database_lookup( FT_UInt32 codepoint )
1153 FT_Offset high = AF_ADJUSTMENT_DATABASE_LENGTH - 1;
1156 while ( high >= low )
1158 FT_Offset mid = ( low + high ) / 2;
1159 FT_UInt32 mid_codepoint = adjustment_database[mid].codepoint;
1162 if ( mid_codepoint < codepoint )
1164 else if ( mid_codepoint > codepoint )
1167 return adjustment_database[mid].flags;
1174#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
1177 add_substitute( FT_Int glyph_idx,
1179 FT_UInt32 codepoint,
1180 FT_Hash reverse_map,
1186 FT_Int first_substitute = (FT_Int)( value & 0xFFFF );
1188 FT_UInt used = reverse_map->used;
1205 error = ft_hash_num_insert_no_overwrite( first_substitute, codepoint,
1206 reverse_map, memory );
1210 if ( reverse_map->used > used )
1212 size_t* subst = ft_hash_num_lookup( first_substitute, subst_map );
1217 error = add_substitute( first_substitute, *subst, codepoint,
1218 reverse_map, subst_map, memory );
1225 if ( value & 0xFFFF0000U )
1227 FT_UInt num_substitutes = value >> 16;
1232 for ( i = 1; i <= num_substitutes; i++ )
1234 FT_Int idx = glyph_idx + (FT_Int)( i << 16 );
1235 size_t* substitute = ft_hash_num_lookup( idx, subst_map );
1238 used = reverse_map->used;
1240 error = ft_hash_num_insert_no_overwrite( *substitute,
1247 if ( reverse_map->used > used )
1249 size_t* subst = ft_hash_num_lookup( *substitute, subst_map );
1254 error = add_substitute( *substitute, *subst, codepoint,
1255 reverse_map, subst_map, memory );
1276 FT_LOCAL_DEF( FT_Error )
1277 af_reverse_character_map_new( FT_Hash *map,
1278 AF_StyleMetrics metrics )
1282 AF_FaceGlobals globals = metrics->globals;
1283 FT_Face face = globals->face;
1284 FT_Memory memory = face->memory;
1286 FT_CharMap old_charmap;
1288 FT_UInt32 codepoint;
1292 FT_TRACE4((
"af_reverse_character_map_new:"
1293 " building reverse character map (style `%s')\n",
1294 af_style_names[metrics->style_class->style] ));
1300 old_charmap = face->charmap;
1302 if ( ( error = find_unicode_charmap( face ) ) )
1306 if ( FT_QNEW( *map ) )
1309 error = ft_hash_num_init( *map, memory );
1314 for ( i = 0; i < AF_ADJUSTMENT_DATABASE_LENGTH; i++ )
1345 codepoint = adjustment_database[i].codepoint;
1347 cmap_glyph = (FT_Int)FT_Get_Char_Index( face, codepoint );
1348 if ( cmap_glyph == 0 )
1351 error = ft_hash_num_insert( cmap_glyph, codepoint, *map, memory );
1356#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
1358 if ( ft_hb_enabled( globals ) )
1363 hb_set_t *gsub_lookups;
1366 unsigned int script_count = 1;
1367 hb_tag_t script_tags[2] = { HB_TAG_NONE, HB_TAG_NONE };
1369 FT_Hash subst_map = NULL;
1381 hb_font = globals->hb_font;
1382 hb_face = hb( font_get_face )( hb_font );
1384 gsub_lookups = hb( set_create )();
1386 script = af_hb_scripts[metrics->style_class->script];
1388 hb( ot_tags_from_script_and_language )( script, NULL,
1389 &script_count, script_tags,
1393 hb( ot_layout_collect_lookups )( hb_face,
1395 script_tags, NULL, NULL,
1398#ifdef FT_DEBUG_LEVEL_TRACE
1400 FT_Bool have_idx = FALSE;
1403 FT_TRACE4((
" GSUB lookups to check:\n" ));
1406 idx = HB_SET_VALUE_INVALID;
1407 while ( hb( set_next )( gsub_lookups, &idx ) )
1408 if ( globals->gsub_lookups_single_alternate[idx] )
1411 FT_TRACE4((
" %u", idx ));
1414 FT_TRACE4((
" (none)" ));
1415 FT_TRACE4((
"\n" ));
1417 FT_TRACE4((
"\n" ));
1421 if ( FT_QNEW( subst_map ) )
1424 error = ft_hash_num_init( subst_map, memory );
1428 idx = HB_SET_VALUE_INVALID;
1429 while ( hb( set_next )( gsub_lookups, &idx ) )
1431 FT_UInt32 offset = globals->gsub_lookups_single_alternate[idx];
1440 af_map_lookup( globals, subst_map, offset );
1469 while ( ft_hash_num_iterator( &hash_idx,
1478 if ( (FT_UInt)glyph_idx & 0xFFFF0000U )
1482 val = ft_hash_num_lookup( glyph_idx, *map );
1488 error = add_substitute( glyph_idx, value, codepoint,
1489 *map, subst_map, memory );
1495 hb( set_destroy )( gsub_lookups );
1497 ft_hash_num_free( subst_map, memory );
1498 FT_FREE( subst_map );
1506 FT_TRACE4((
" reverse character map built successfully"
1507 " with %u entries\n", ( *map )->used ));
1509#ifdef FT_DEBUG_LEVEL_TRACE
1515 FT_TRACE7((
" gidx code flags\n" ));
1517 FT_TRACE7((
" ------------------------------\n" ));
1519 for ( cnt = 0; cnt < globals->glyph_count; cnt++ )
1524 const char* flag_names[] =
1534 "above-bottom tilde",
1536 "ignore capital top",
1537 "ignore capital bottom",
1539 "ignore small bottom",
1541 size_t flag_names_size =
sizeof ( flag_names ) /
sizeof (
char* );
1549 val = ft_hash_num_lookup( (FT_Int)cnt, *map );
1554 adj_type = af_adjustment_database_lookup( codepoint );
1561 for ( j = 0; j < flag_names_size; j++ )
1563 if ( adj_type & (1 << j ) )
1568 strcat( flag_str,
", " );
1569 strcat( flag_str, flag_names[j] );
1573 FT_TRACE7((
" %5u 0x%04X %s\n", cnt, codepoint, flag_str ));
1581 face->charmap = old_charmap;
1585 FT_TRACE4((
" error while building reverse character map."
1586 " Using blank map.\n" ));
1589 ft_hash_num_free( *map, memory );
1600 FT_LOCAL_DEF( FT_Error )
1601 af_reverse_character_map_done( FT_Hash map,
1605 ft_hash_num_free( map, memory );