lib/filigree/src/fixture/positioning.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const std = @import("std");
2 const binary = @import("binary.zig");
3 const layout_fixture = @import("layout.zig");
4
5 const appendF2Dot14 = binary.appendF2Dot14;
6 const appendI16 = binary.appendI16;
7 const appendTag = binary.appendTag;
8 const appendU16 = binary.appendU16;
9 const appendU32 = binary.appendU32;
10 const writeU16 = binary.writeU16;
11 const writeU32 = binary.writeU32;
12
13 const appendLayoutFeatureList = layout_fixture.appendLayoutFeatureList;
14 const appendLayoutFeatureListPair = layout_fixture.appendLayoutFeatureListPair;
15 const appendLayoutFeatureVariations = layout_fixture.appendLayoutFeatureVariations;
16 const appendLayoutScriptList = layout_fixture.appendLayoutScriptList;
17 const appendLayoutScriptListWithFeatures = layout_fixture.appendLayoutScriptListWithFeatures;
18
19 pub fn appendGposSingleAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
20 try appendU16(allocator, out, 1);
21 try appendU16(allocator, out, 0);
22 try appendU16(allocator, out, 10);
23 try appendU16(allocator, out, 30);
24 try appendU16(allocator, out, 44);
25
26 try appendU16(allocator, out, 1);
27 try appendTag(allocator, out, "DFLT");
28 try appendU16(allocator, out, 8);
29
30 try appendU16(allocator, out, 4);
31 try appendU16(allocator, out, 0);
32
33 try appendU16(allocator, out, 0);
34 try appendU16(allocator, out, 0xffff);
35 try appendU16(allocator, out, 1);
36 try appendU16(allocator, out, 0);
37
38 try appendU16(allocator, out, 1);
39 try appendTag(allocator, out, "dist");
40 try appendU16(allocator, out, 8);
41
42 try appendU16(allocator, out, 0);
43 try appendU16(allocator, out, 1);
44 try appendU16(allocator, out, 0);
45
46 try appendU16(allocator, out, 1);
47 try appendU16(allocator, out, 4);
48
49 try appendU16(allocator, out, 1);
50 try appendU16(allocator, out, 0);
51 try appendU16(allocator, out, 1);
52 try appendU16(allocator, out, 8);
53
54 try appendU16(allocator, out, 2);
55 try appendU16(allocator, out, 20);
56 try appendU16(allocator, out, 0x0007);
57 try appendU16(allocator, out, 2);
58 try appendI16(allocator, out, 20);
59 try appendI16(allocator, out, 30);
60 try appendI16(allocator, out, -40);
61 try appendI16(allocator, out, -10);
62 try appendI16(allocator, out, 0);
63 try appendI16(allocator, out, 0);
64
65 try appendU16(allocator, out, 1);
66 try appendU16(allocator, out, 2);
67 try appendU16(allocator, out, 'A' - 31);
68 try appendU16(allocator, out, 'B' - 31);
69 }
70
71 pub fn appendGposFeatureVariations(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
72 const header = out.items.len;
73 try appendU16(allocator, out, 1);
74 try appendU16(allocator, out, 1);
75 try appendU16(allocator, out, 0);
76 try appendU16(allocator, out, 0);
77 try appendU16(allocator, out, 0);
78 try appendU32(allocator, out, 0);
79
80 const script_list = out.items.len;
81 writeU16(out.items, header + 4, @intCast(script_list - header));
82 try appendLayoutScriptList(allocator, out);
83
84 const feature_list = out.items.len;
85 writeU16(out.items, header + 6, @intCast(feature_list - header));
86 try appendLayoutFeatureList(allocator, out, "kern", 0);
87
88 const lookup_list = out.items.len;
89 writeU16(out.items, header + 8, @intCast(lookup_list - header));
90 try appendU16(allocator, out, 2);
91 const first_lookup_offset = out.items.len;
92 try appendU16(allocator, out, 0);
93 const second_lookup_offset = out.items.len;
94 try appendU16(allocator, out, 0);
95 writeU16(out.items, first_lookup_offset, @intCast(out.items.len - lookup_list));
96 try appendGposSingleLookup(allocator, out, -40);
97 writeU16(out.items, second_lookup_offset, @intCast(out.items.len - lookup_list));
98 try appendGposSingleLookup(allocator, out, -120);
99
100 const feature_variations = out.items.len;
101 writeU32(out.items, header + 10, @intCast(feature_variations - header));
102 try appendLayoutFeatureVariations(allocator, out, feature_variations, 1);
103 }
104
105 pub fn appendGposSingleLookup(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8), x_advance: i16) !void {
106 try appendU16(allocator, out, 1);
107 try appendU16(allocator, out, 0);
108 try appendU16(allocator, out, 1);
109 try appendU16(allocator, out, 8);
110 try appendU16(allocator, out, 1);
111 try appendU16(allocator, out, 8);
112 try appendU16(allocator, out, 0x0004);
113 try appendI16(allocator, out, x_advance);
114 try appendU16(allocator, out, 1);
115 try appendU16(allocator, out, 1);
116 try appendU16(allocator, out, 'A' - 31);
117 }
118
119 pub fn appendGposSingleVariationAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
120 try appendU16(allocator, out, 1);
121 try appendU16(allocator, out, 0);
122 try appendU16(allocator, out, 10);
123 try appendU16(allocator, out, 30);
124 try appendU16(allocator, out, 44);
125
126 try appendU16(allocator, out, 1);
127 try appendTag(allocator, out, "DFLT");
128 try appendU16(allocator, out, 8);
129
130 try appendU16(allocator, out, 4);
131 try appendU16(allocator, out, 0);
132
133 try appendU16(allocator, out, 0);
134 try appendU16(allocator, out, 0xffff);
135 try appendU16(allocator, out, 1);
136 try appendU16(allocator, out, 0);
137
138 try appendU16(allocator, out, 1);
139 try appendTag(allocator, out, "dist");
140 try appendU16(allocator, out, 8);
141
142 try appendU16(allocator, out, 0);
143 try appendU16(allocator, out, 1);
144 try appendU16(allocator, out, 0);
145
146 try appendU16(allocator, out, 1);
147 try appendU16(allocator, out, 4);
148
149 try appendU16(allocator, out, 1);
150 try appendU16(allocator, out, 0);
151 try appendU16(allocator, out, 1);
152 try appendU16(allocator, out, 8);
153
154 try appendU16(allocator, out, 2);
155 try appendU16(allocator, out, 12);
156 try appendU16(allocator, out, 0x0011);
157 try appendU16(allocator, out, 1);
158 try appendI16(allocator, out, 20);
159 try appendU16(allocator, out, 18);
160
161 try appendU16(allocator, out, 1);
162 try appendU16(allocator, out, 1);
163 try appendU16(allocator, out, 'A' - 31);
164
165 try appendU16(allocator, out, 0);
166 try appendU16(allocator, out, 0);
167 try appendU16(allocator, out, 0x8000);
168 }
169
170 pub fn appendGposContextualSingleAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
171 try appendU16(allocator, out, 1);
172 try appendU16(allocator, out, 0);
173 try appendU16(allocator, out, 10);
174 try appendU16(allocator, out, 30);
175 try appendU16(allocator, out, 44);
176
177 try appendU16(allocator, out, 1);
178 try appendTag(allocator, out, "DFLT");
179 try appendU16(allocator, out, 8);
180
181 try appendU16(allocator, out, 4);
182 try appendU16(allocator, out, 0);
183
184 try appendU16(allocator, out, 0);
185 try appendU16(allocator, out, 0xffff);
186 try appendU16(allocator, out, 1);
187 try appendU16(allocator, out, 0);
188
189 try appendU16(allocator, out, 1);
190 try appendTag(allocator, out, "dist");
191 try appendU16(allocator, out, 8);
192
193 try appendU16(allocator, out, 0);
194 try appendU16(allocator, out, 1);
195 try appendU16(allocator, out, 0);
196
197 try appendU16(allocator, out, 2);
198 try appendU16(allocator, out, 6);
199 try appendU16(allocator, out, 48);
200
201 try appendU16(allocator, out, 7);
202 try appendU16(allocator, out, 0);
203 try appendU16(allocator, out, 1);
204 try appendU16(allocator, out, 8);
205
206 try appendU16(allocator, out, 3);
207 try appendU16(allocator, out, 3);
208 try appendU16(allocator, out, 1);
209 try appendU16(allocator, out, 16);
210 try appendU16(allocator, out, 22);
211 try appendU16(allocator, out, 28);
212 try appendU16(allocator, out, 1);
213 try appendU16(allocator, out, 1);
214
215 try appendU16(allocator, out, 1);
216 try appendU16(allocator, out, 1);
217 try appendU16(allocator, out, 'A' - 31);
218
219 try appendU16(allocator, out, 1);
220 try appendU16(allocator, out, 1);
221 try appendU16(allocator, out, 'B' - 31);
222
223 try appendU16(allocator, out, 1);
224 try appendU16(allocator, out, 1);
225 try appendU16(allocator, out, 'C' - 31);
226
227 try appendU16(allocator, out, 1);
228 try appendU16(allocator, out, 0);
229 try appendU16(allocator, out, 1);
230 try appendU16(allocator, out, 8);
231
232 try appendU16(allocator, out, 1);
233 try appendU16(allocator, out, 10);
234 try appendU16(allocator, out, 0x0005);
235 try appendI16(allocator, out, 50);
236 try appendI16(allocator, out, -100);
237
238 try appendU16(allocator, out, 1);
239 try appendU16(allocator, out, 1);
240 try appendU16(allocator, out, 'B' - 31);
241 }
242
243 pub fn appendGposSimpleContextualSingleAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
244 try appendU16(allocator, out, 1);
245 try appendU16(allocator, out, 0);
246 try appendU16(allocator, out, 10);
247 try appendU16(allocator, out, 30);
248 try appendU16(allocator, out, 44);
249
250 try appendU16(allocator, out, 1);
251 try appendTag(allocator, out, "DFLT");
252 try appendU16(allocator, out, 8);
253
254 try appendU16(allocator, out, 4);
255 try appendU16(allocator, out, 0);
256
257 try appendU16(allocator, out, 0);
258 try appendU16(allocator, out, 0xffff);
259 try appendU16(allocator, out, 1);
260 try appendU16(allocator, out, 0);
261
262 try appendU16(allocator, out, 1);
263 try appendTag(allocator, out, "dist");
264 try appendU16(allocator, out, 8);
265
266 try appendU16(allocator, out, 0);
267 try appendU16(allocator, out, 1);
268 try appendU16(allocator, out, 0);
269
270 try appendU16(allocator, out, 2);
271 try appendU16(allocator, out, 6);
272 try appendU16(allocator, out, 44);
273
274 try appendU16(allocator, out, 7);
275 try appendU16(allocator, out, 0);
276 try appendU16(allocator, out, 1);
277 try appendU16(allocator, out, 8);
278
279 try appendU16(allocator, out, 1);
280 try appendU16(allocator, out, 8);
281 try appendU16(allocator, out, 1);
282 try appendU16(allocator, out, 14);
283
284 try appendU16(allocator, out, 1);
285 try appendU16(allocator, out, 1);
286 try appendU16(allocator, out, 'A' - 31);
287
288 try appendU16(allocator, out, 1);
289 try appendU16(allocator, out, 4);
290
291 try appendU16(allocator, out, 3);
292 try appendU16(allocator, out, 1);
293 try appendU16(allocator, out, 'B' - 31);
294 try appendU16(allocator, out, 'C' - 31);
295 try appendU16(allocator, out, 1);
296 try appendU16(allocator, out, 1);
297
298 try appendU16(allocator, out, 1);
299 try appendU16(allocator, out, 0);
300 try appendU16(allocator, out, 1);
301 try appendU16(allocator, out, 8);
302
303 try appendU16(allocator, out, 1);
304 try appendU16(allocator, out, 10);
305 try appendU16(allocator, out, 0x0005);
306 try appendI16(allocator, out, 50);
307 try appendI16(allocator, out, -100);
308
309 try appendU16(allocator, out, 1);
310 try appendU16(allocator, out, 1);
311 try appendU16(allocator, out, 'B' - 31);
312 }
313
314 pub fn appendGposClassContextualSingleAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
315 try appendU16(allocator, out, 1);
316 try appendU16(allocator, out, 0);
317 try appendU16(allocator, out, 10);
318 try appendU16(allocator, out, 30);
319 try appendU16(allocator, out, 44);
320
321 try appendU16(allocator, out, 1);
322 try appendTag(allocator, out, "DFLT");
323 try appendU16(allocator, out, 8);
324
325 try appendU16(allocator, out, 4);
326 try appendU16(allocator, out, 0);
327
328 try appendU16(allocator, out, 0);
329 try appendU16(allocator, out, 0xffff);
330 try appendU16(allocator, out, 1);
331 try appendU16(allocator, out, 0);
332
333 try appendU16(allocator, out, 1);
334 try appendTag(allocator, out, "dist");
335 try appendU16(allocator, out, 8);
336
337 try appendU16(allocator, out, 0);
338 try appendU16(allocator, out, 1);
339 try appendU16(allocator, out, 0);
340
341 try appendU16(allocator, out, 2);
342 try appendU16(allocator, out, 6);
343 try appendU16(allocator, out, 64);
344
345 try appendU16(allocator, out, 7);
346 try appendU16(allocator, out, 0);
347 try appendU16(allocator, out, 1);
348 try appendU16(allocator, out, 8);
349
350 try appendU16(allocator, out, 2);
351 try appendU16(allocator, out, 16);
352 try appendU16(allocator, out, 22);
353 try appendU16(allocator, out, 4);
354 try appendU16(allocator, out, 0);
355 try appendU16(allocator, out, 34);
356 try appendU16(allocator, out, 0);
357 try appendU16(allocator, out, 0);
358
359 try appendU16(allocator, out, 1);
360 try appendU16(allocator, out, 1);
361 try appendU16(allocator, out, 'A' - 31);
362
363 try appendU16(allocator, out, 1);
364 try appendU16(allocator, out, 'A' - 31);
365 try appendU16(allocator, out, 3);
366 try appendU16(allocator, out, 1);
367 try appendU16(allocator, out, 2);
368 try appendU16(allocator, out, 3);
369
370 try appendU16(allocator, out, 1);
371 try appendU16(allocator, out, 4);
372
373 try appendU16(allocator, out, 3);
374 try appendU16(allocator, out, 1);
375 try appendU16(allocator, out, 2);
376 try appendU16(allocator, out, 3);
377 try appendU16(allocator, out, 1);
378 try appendU16(allocator, out, 1);
379
380 try appendU16(allocator, out, 1);
381 try appendU16(allocator, out, 0);
382 try appendU16(allocator, out, 1);
383 try appendU16(allocator, out, 8);
384
385 try appendU16(allocator, out, 1);
386 try appendU16(allocator, out, 10);
387 try appendU16(allocator, out, 0x0005);
388 try appendI16(allocator, out, 50);
389 try appendI16(allocator, out, -100);
390
391 try appendU16(allocator, out, 1);
392 try appendU16(allocator, out, 1);
393 try appendU16(allocator, out, 'B' - 31);
394 }
395
396 pub fn appendGposChainedContextualSingleAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
397 try appendU16(allocator, out, 1);
398 try appendU16(allocator, out, 0);
399 try appendU16(allocator, out, 10);
400 try appendU16(allocator, out, 30);
401 try appendU16(allocator, out, 44);
402
403 try appendU16(allocator, out, 1);
404 try appendTag(allocator, out, "DFLT");
405 try appendU16(allocator, out, 8);
406
407 try appendU16(allocator, out, 4);
408 try appendU16(allocator, out, 0);
409
410 try appendU16(allocator, out, 0);
411 try appendU16(allocator, out, 0xffff);
412 try appendU16(allocator, out, 1);
413 try appendU16(allocator, out, 0);
414
415 try appendU16(allocator, out, 1);
416 try appendTag(allocator, out, "dist");
417 try appendU16(allocator, out, 8);
418
419 try appendU16(allocator, out, 0);
420 try appendU16(allocator, out, 1);
421 try appendU16(allocator, out, 0);
422
423 try appendU16(allocator, out, 2);
424 try appendU16(allocator, out, 6);
425 try appendU16(allocator, out, 60);
426
427 try appendU16(allocator, out, 8);
428 try appendU16(allocator, out, 0);
429 try appendU16(allocator, out, 1);
430 try appendU16(allocator, out, 8);
431
432 try appendU16(allocator, out, 3);
433 try appendU16(allocator, out, 1);
434 try appendU16(allocator, out, 22);
435 try appendU16(allocator, out, 2);
436 try appendU16(allocator, out, 28);
437 try appendU16(allocator, out, 34);
438 try appendU16(allocator, out, 1);
439 try appendU16(allocator, out, 40);
440 try appendU16(allocator, out, 1);
441 try appendU16(allocator, out, 0);
442 try appendU16(allocator, out, 1);
443
444 try appendU16(allocator, out, 1);
445 try appendU16(allocator, out, 1);
446 try appendU16(allocator, out, 'A' - 31);
447
448 try appendU16(allocator, out, 1);
449 try appendU16(allocator, out, 1);
450 try appendU16(allocator, out, 'B' - 31);
451
452 try appendU16(allocator, out, 1);
453 try appendU16(allocator, out, 1);
454 try appendU16(allocator, out, 'C' - 31);
455
456 try appendU16(allocator, out, 1);
457 try appendU16(allocator, out, 1);
458 try appendU16(allocator, out, '!' - 31);
459
460 try appendU16(allocator, out, 1);
461 try appendU16(allocator, out, 0);
462 try appendU16(allocator, out, 1);
463 try appendU16(allocator, out, 8);
464
465 try appendU16(allocator, out, 1);
466 try appendU16(allocator, out, 10);
467 try appendU16(allocator, out, 0x0005);
468 try appendI16(allocator, out, 75);
469 try appendI16(allocator, out, -125);
470
471 try appendU16(allocator, out, 1);
472 try appendU16(allocator, out, 1);
473 try appendU16(allocator, out, 'B' - 31);
474 }
475
476 pub fn appendGposChainedSimpleContextualSingleAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
477 try appendU16(allocator, out, 1);
478 try appendU16(allocator, out, 0);
479 try appendU16(allocator, out, 10);
480 try appendU16(allocator, out, 30);
481 try appendU16(allocator, out, 44);
482
483 try appendU16(allocator, out, 1);
484 try appendTag(allocator, out, "DFLT");
485 try appendU16(allocator, out, 8);
486
487 try appendU16(allocator, out, 4);
488 try appendU16(allocator, out, 0);
489
490 try appendU16(allocator, out, 0);
491 try appendU16(allocator, out, 0xffff);
492 try appendU16(allocator, out, 1);
493 try appendU16(allocator, out, 0);
494
495 try appendU16(allocator, out, 1);
496 try appendTag(allocator, out, "dist");
497 try appendU16(allocator, out, 8);
498
499 try appendU16(allocator, out, 0);
500 try appendU16(allocator, out, 1);
501 try appendU16(allocator, out, 0);
502
503 try appendU16(allocator, out, 2);
504 try appendU16(allocator, out, 6);
505 try appendU16(allocator, out, 48);
506
507 try appendU16(allocator, out, 8);
508 try appendU16(allocator, out, 0);
509 try appendU16(allocator, out, 1);
510 try appendU16(allocator, out, 8);
511
512 try appendU16(allocator, out, 1);
513 try appendU16(allocator, out, 8);
514 try appendU16(allocator, out, 1);
515 try appendU16(allocator, out, 14);
516
517 try appendU16(allocator, out, 1);
518 try appendU16(allocator, out, 1);
519 try appendU16(allocator, out, 'B' - 31);
520
521 try appendU16(allocator, out, 1);
522 try appendU16(allocator, out, 4);
523
524 try appendU16(allocator, out, 1);
525 try appendU16(allocator, out, 'A' - 31);
526 try appendU16(allocator, out, 1);
527 try appendU16(allocator, out, 1);
528 try appendU16(allocator, out, 'C' - 31);
529 try appendU16(allocator, out, 1);
530 try appendU16(allocator, out, 0);
531 try appendU16(allocator, out, 1);
532
533 try appendU16(allocator, out, 1);
534 try appendU16(allocator, out, 0);
535 try appendU16(allocator, out, 1);
536 try appendU16(allocator, out, 8);
537
538 try appendU16(allocator, out, 1);
539 try appendU16(allocator, out, 10);
540 try appendU16(allocator, out, 0x0005);
541 try appendI16(allocator, out, 75);
542 try appendI16(allocator, out, -125);
543
544 try appendU16(allocator, out, 1);
545 try appendU16(allocator, out, 1);
546 try appendU16(allocator, out, 'B' - 31);
547 }
548
549 pub fn appendGposChainedClassContextualSingleAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
550 try appendU16(allocator, out, 1);
551 try appendU16(allocator, out, 0);
552 try appendU16(allocator, out, 10);
553 try appendU16(allocator, out, 30);
554 try appendU16(allocator, out, 44);
555
556 try appendU16(allocator, out, 1);
557 try appendTag(allocator, out, "DFLT");
558 try appendU16(allocator, out, 8);
559
560 try appendU16(allocator, out, 4);
561 try appendU16(allocator, out, 0);
562
563 try appendU16(allocator, out, 0);
564 try appendU16(allocator, out, 0xffff);
565 try appendU16(allocator, out, 1);
566 try appendU16(allocator, out, 0);
567
568 try appendU16(allocator, out, 1);
569 try appendTag(allocator, out, "dist");
570 try appendU16(allocator, out, 8);
571
572 try appendU16(allocator, out, 0);
573 try appendU16(allocator, out, 1);
574 try appendU16(allocator, out, 0);
575
576 try appendU16(allocator, out, 2);
577 try appendU16(allocator, out, 6);
578 try appendU16(allocator, out, 82);
579
580 try appendU16(allocator, out, 8);
581 try appendU16(allocator, out, 0);
582 try appendU16(allocator, out, 1);
583 try appendU16(allocator, out, 8);
584
585 try appendU16(allocator, out, 2);
586 try appendU16(allocator, out, 18);
587 try appendU16(allocator, out, 24);
588 try appendU16(allocator, out, 32);
589 try appendU16(allocator, out, 40);
590 try appendU16(allocator, out, 3);
591 try appendU16(allocator, out, 0);
592 try appendU16(allocator, out, 0);
593 try appendU16(allocator, out, 48);
594
595 try appendU16(allocator, out, 1);
596 try appendU16(allocator, out, 1);
597 try appendU16(allocator, out, 'B' - 31);
598
599 try appendU16(allocator, out, 1);
600 try appendU16(allocator, out, 'A' - 31);
601 try appendU16(allocator, out, 1);
602 try appendU16(allocator, out, 1);
603
604 try appendU16(allocator, out, 1);
605 try appendU16(allocator, out, 'B' - 31);
606 try appendU16(allocator, out, 1);
607 try appendU16(allocator, out, 2);
608
609 try appendU16(allocator, out, 1);
610 try appendU16(allocator, out, 'C' - 31);
611 try appendU16(allocator, out, 1);
612 try appendU16(allocator, out, 3);
613
614 try appendU16(allocator, out, 1);
615 try appendU16(allocator, out, 4);
616
617 try appendU16(allocator, out, 1);
618 try appendU16(allocator, out, 1);
619 try appendU16(allocator, out, 1);
620 try appendU16(allocator, out, 1);
621 try appendU16(allocator, out, 3);
622 try appendU16(allocator, out, 1);
623 try appendU16(allocator, out, 0);
624 try appendU16(allocator, out, 1);
625
626 try appendU16(allocator, out, 1);
627 try appendU16(allocator, out, 0);
628 try appendU16(allocator, out, 1);
629 try appendU16(allocator, out, 8);
630
631 try appendU16(allocator, out, 1);
632 try appendU16(allocator, out, 10);
633 try appendU16(allocator, out, 0x0005);
634 try appendI16(allocator, out, 75);
635 try appendI16(allocator, out, -125);
636
637 try appendU16(allocator, out, 1);
638 try appendU16(allocator, out, 1);
639 try appendU16(allocator, out, 'B' - 31);
640 }
641
642 pub fn appendGposContextualPairAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
643 try appendU16(allocator, out, 1);
644 try appendU16(allocator, out, 0);
645 try appendU16(allocator, out, 10);
646 try appendU16(allocator, out, 30);
647 try appendU16(allocator, out, 44);
648
649 try appendU16(allocator, out, 1);
650 try appendTag(allocator, out, "DFLT");
651 try appendU16(allocator, out, 8);
652
653 try appendU16(allocator, out, 4);
654 try appendU16(allocator, out, 0);
655
656 try appendU16(allocator, out, 0);
657 try appendU16(allocator, out, 0xffff);
658 try appendU16(allocator, out, 1);
659 try appendU16(allocator, out, 0);
660
661 try appendU16(allocator, out, 1);
662 try appendTag(allocator, out, "kern");
663 try appendU16(allocator, out, 8);
664
665 try appendU16(allocator, out, 0);
666 try appendU16(allocator, out, 1);
667 try appendU16(allocator, out, 0);
668
669 try appendU16(allocator, out, 2);
670 try appendU16(allocator, out, 6);
671 try appendU16(allocator, out, 48);
672
673 try appendU16(allocator, out, 7);
674 try appendU16(allocator, out, 0);
675 try appendU16(allocator, out, 1);
676 try appendU16(allocator, out, 8);
677
678 try appendU16(allocator, out, 3);
679 try appendU16(allocator, out, 3);
680 try appendU16(allocator, out, 1);
681 try appendU16(allocator, out, 16);
682 try appendU16(allocator, out, 22);
683 try appendU16(allocator, out, 28);
684 try appendU16(allocator, out, 0);
685 try appendU16(allocator, out, 1);
686
687 try appendU16(allocator, out, 1);
688 try appendU16(allocator, out, 1);
689 try appendU16(allocator, out, 'A' - 31);
690
691 try appendU16(allocator, out, 1);
692 try appendU16(allocator, out, 1);
693 try appendU16(allocator, out, 'V' - 31);
694
695 try appendU16(allocator, out, 1);
696 try appendU16(allocator, out, 1);
697 try appendU16(allocator, out, 'C' - 31);
698
699 try appendU16(allocator, out, 2);
700 try appendU16(allocator, out, 0);
701 try appendU16(allocator, out, 1);
702 try appendU16(allocator, out, 8);
703
704 try appendU16(allocator, out, 1);
705 try appendU16(allocator, out, 18);
706 try appendU16(allocator, out, 0x0004);
707 try appendU16(allocator, out, 0);
708 try appendU16(allocator, out, 1);
709 try appendU16(allocator, out, 12);
710
711 try appendU16(allocator, out, 1);
712 try appendU16(allocator, out, 'V' - 31);
713 try appendI16(allocator, out, -100);
714
715 try appendU16(allocator, out, 1);
716 try appendU16(allocator, out, 1);
717 try appendU16(allocator, out, 'A' - 31);
718 }
719
720 pub fn appendGposSimpleContextualPairAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
721 try appendU16(allocator, out, 1);
722 try appendU16(allocator, out, 0);
723 try appendU16(allocator, out, 10);
724 try appendU16(allocator, out, 30);
725 try appendU16(allocator, out, 44);
726
727 try appendU16(allocator, out, 1);
728 try appendTag(allocator, out, "DFLT");
729 try appendU16(allocator, out, 8);
730
731 try appendU16(allocator, out, 4);
732 try appendU16(allocator, out, 0);
733
734 try appendU16(allocator, out, 0);
735 try appendU16(allocator, out, 0xffff);
736 try appendU16(allocator, out, 1);
737 try appendU16(allocator, out, 0);
738
739 try appendU16(allocator, out, 1);
740 try appendTag(allocator, out, "kern");
741 try appendU16(allocator, out, 8);
742
743 try appendU16(allocator, out, 0);
744 try appendU16(allocator, out, 1);
745 try appendU16(allocator, out, 0);
746
747 try appendU16(allocator, out, 2);
748 try appendU16(allocator, out, 6);
749 try appendU16(allocator, out, 44);
750
751 try appendU16(allocator, out, 7);
752 try appendU16(allocator, out, 0);
753 try appendU16(allocator, out, 1);
754 try appendU16(allocator, out, 8);
755
756 try appendU16(allocator, out, 1);
757 try appendU16(allocator, out, 8);
758 try appendU16(allocator, out, 1);
759 try appendU16(allocator, out, 14);
760
761 try appendU16(allocator, out, 1);
762 try appendU16(allocator, out, 1);
763 try appendU16(allocator, out, 'A' - 31);
764
765 try appendU16(allocator, out, 1);
766 try appendU16(allocator, out, 4);
767
768 try appendU16(allocator, out, 3);
769 try appendU16(allocator, out, 1);
770 try appendU16(allocator, out, 'V' - 31);
771 try appendU16(allocator, out, 'C' - 31);
772 try appendU16(allocator, out, 0);
773 try appendU16(allocator, out, 1);
774
775 try appendU16(allocator, out, 2);
776 try appendU16(allocator, out, 0);
777 try appendU16(allocator, out, 1);
778 try appendU16(allocator, out, 8);
779
780 try appendU16(allocator, out, 1);
781 try appendU16(allocator, out, 18);
782 try appendU16(allocator, out, 0x0004);
783 try appendU16(allocator, out, 0);
784 try appendU16(allocator, out, 1);
785 try appendU16(allocator, out, 12);
786
787 try appendU16(allocator, out, 1);
788 try appendU16(allocator, out, 'V' - 31);
789 try appendI16(allocator, out, -100);
790
791 try appendU16(allocator, out, 1);
792 try appendU16(allocator, out, 1);
793 try appendU16(allocator, out, 'A' - 31);
794 }
795
796 pub fn appendGposClassContextualPairAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
797 try appendU16(allocator, out, 1);
798 try appendU16(allocator, out, 0);
799 try appendU16(allocator, out, 10);
800 try appendU16(allocator, out, 30);
801 try appendU16(allocator, out, 44);
802
803 try appendU16(allocator, out, 1);
804 try appendTag(allocator, out, "DFLT");
805 try appendU16(allocator, out, 8);
806
807 try appendU16(allocator, out, 4);
808 try appendU16(allocator, out, 0);
809
810 try appendU16(allocator, out, 0);
811 try appendU16(allocator, out, 0xffff);
812 try appendU16(allocator, out, 1);
813 try appendU16(allocator, out, 0);
814
815 try appendU16(allocator, out, 1);
816 try appendTag(allocator, out, "kern");
817 try appendU16(allocator, out, 8);
818
819 try appendU16(allocator, out, 0);
820 try appendU16(allocator, out, 1);
821 try appendU16(allocator, out, 0);
822
823 try appendU16(allocator, out, 2);
824 try appendU16(allocator, out, 6);
825 try appendU16(allocator, out, 64);
826
827 try appendU16(allocator, out, 7);
828 try appendU16(allocator, out, 0);
829 try appendU16(allocator, out, 1);
830 try appendU16(allocator, out, 8);
831
832 try appendU16(allocator, out, 2);
833 try appendU16(allocator, out, 16);
834 try appendU16(allocator, out, 22);
835 try appendU16(allocator, out, 4);
836 try appendU16(allocator, out, 0);
837 try appendU16(allocator, out, 34);
838 try appendU16(allocator, out, 0);
839 try appendU16(allocator, out, 0);
840
841 try appendU16(allocator, out, 1);
842 try appendU16(allocator, out, 1);
843 try appendU16(allocator, out, 'A' - 31);
844
845 try appendU16(allocator, out, 1);
846 try appendU16(allocator, out, 'A' - 31);
847 try appendU16(allocator, out, 3);
848 try appendU16(allocator, out, 1);
849 try appendU16(allocator, out, 2);
850 try appendU16(allocator, out, 3);
851
852 try appendU16(allocator, out, 1);
853 try appendU16(allocator, out, 4);
854
855 try appendU16(allocator, out, 3);
856 try appendU16(allocator, out, 1);
857 try appendU16(allocator, out, 2);
858 try appendU16(allocator, out, 3);
859 try appendU16(allocator, out, 0);
860 try appendU16(allocator, out, 1);
861
862 try appendU16(allocator, out, 2);
863 try appendU16(allocator, out, 0);
864 try appendU16(allocator, out, 1);
865 try appendU16(allocator, out, 8);
866
867 try appendU16(allocator, out, 1);
868 try appendU16(allocator, out, 18);
869 try appendU16(allocator, out, 0x0004);
870 try appendU16(allocator, out, 0);
871 try appendU16(allocator, out, 1);
872 try appendU16(allocator, out, 12);
873
874 try appendU16(allocator, out, 1);
875 try appendU16(allocator, out, 'B' - 31);
876 try appendI16(allocator, out, -100);
877
878 try appendU16(allocator, out, 1);
879 try appendU16(allocator, out, 1);
880 try appendU16(allocator, out, 'A' - 31);
881 }
882
883 pub fn appendGposChainedContextualPairAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
884 try appendU16(allocator, out, 1);
885 try appendU16(allocator, out, 0);
886 try appendU16(allocator, out, 10);
887 try appendU16(allocator, out, 30);
888 try appendU16(allocator, out, 44);
889
890 try appendU16(allocator, out, 1);
891 try appendTag(allocator, out, "DFLT");
892 try appendU16(allocator, out, 8);
893
894 try appendU16(allocator, out, 4);
895 try appendU16(allocator, out, 0);
896
897 try appendU16(allocator, out, 0);
898 try appendU16(allocator, out, 0xffff);
899 try appendU16(allocator, out, 1);
900 try appendU16(allocator, out, 0);
901
902 try appendU16(allocator, out, 1);
903 try appendTag(allocator, out, "kern");
904 try appendU16(allocator, out, 8);
905
906 try appendU16(allocator, out, 0);
907 try appendU16(allocator, out, 1);
908 try appendU16(allocator, out, 0);
909
910 try appendU16(allocator, out, 2);
911 try appendU16(allocator, out, 6);
912 try appendU16(allocator, out, 60);
913
914 try appendU16(allocator, out, 8);
915 try appendU16(allocator, out, 0);
916 try appendU16(allocator, out, 1);
917 try appendU16(allocator, out, 8);
918
919 try appendU16(allocator, out, 3);
920 try appendU16(allocator, out, 1);
921 try appendU16(allocator, out, 22);
922 try appendU16(allocator, out, 2);
923 try appendU16(allocator, out, 28);
924 try appendU16(allocator, out, 34);
925 try appendU16(allocator, out, 1);
926 try appendU16(allocator, out, 40);
927 try appendU16(allocator, out, 1);
928 try appendU16(allocator, out, 0);
929 try appendU16(allocator, out, 1);
930
931 try appendU16(allocator, out, 1);
932 try appendU16(allocator, out, 1);
933 try appendU16(allocator, out, 'A' - 31);
934
935 try appendU16(allocator, out, 1);
936 try appendU16(allocator, out, 1);
937 try appendU16(allocator, out, 'V' - 31);
938
939 try appendU16(allocator, out, 1);
940 try appendU16(allocator, out, 1);
941 try appendU16(allocator, out, 'C' - 31);
942
943 try appendU16(allocator, out, 1);
944 try appendU16(allocator, out, 1);
945 try appendU16(allocator, out, '!' - 31);
946
947 try appendU16(allocator, out, 2);
948 try appendU16(allocator, out, 0);
949 try appendU16(allocator, out, 1);
950 try appendU16(allocator, out, 8);
951
952 try appendU16(allocator, out, 1);
953 try appendU16(allocator, out, 18);
954 try appendU16(allocator, out, 0x0004);
955 try appendU16(allocator, out, 0);
956 try appendU16(allocator, out, 1);
957 try appendU16(allocator, out, 12);
958
959 try appendU16(allocator, out, 1);
960 try appendU16(allocator, out, 'C' - 31);
961 try appendI16(allocator, out, -100);
962
963 try appendU16(allocator, out, 1);
964 try appendU16(allocator, out, 1);
965 try appendU16(allocator, out, 'V' - 31);
966 }
967
968 pub fn appendGposChainedSimpleContextualPairAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
969 try appendU16(allocator, out, 1);
970 try appendU16(allocator, out, 0);
971 try appendU16(allocator, out, 10);
972 try appendU16(allocator, out, 30);
973 try appendU16(allocator, out, 44);
974
975 try appendU16(allocator, out, 1);
976 try appendTag(allocator, out, "DFLT");
977 try appendU16(allocator, out, 8);
978
979 try appendU16(allocator, out, 4);
980 try appendU16(allocator, out, 0);
981
982 try appendU16(allocator, out, 0);
983 try appendU16(allocator, out, 0xffff);
984 try appendU16(allocator, out, 1);
985 try appendU16(allocator, out, 0);
986
987 try appendU16(allocator, out, 1);
988 try appendTag(allocator, out, "kern");
989 try appendU16(allocator, out, 8);
990
991 try appendU16(allocator, out, 0);
992 try appendU16(allocator, out, 1);
993 try appendU16(allocator, out, 0);
994
995 try appendU16(allocator, out, 2);
996 try appendU16(allocator, out, 6);
997 try appendU16(allocator, out, 48);
998
999 try appendU16(allocator, out, 8);
1000 try appendU16(allocator, out, 0);
1001 try appendU16(allocator, out, 1);
1002 try appendU16(allocator, out, 8);
1003
1004 try appendU16(allocator, out, 1);
1005 try appendU16(allocator, out, 8);
1006 try appendU16(allocator, out, 1);
1007 try appendU16(allocator, out, 14);
1008
1009 try appendU16(allocator, out, 1);
1010 try appendU16(allocator, out, 1);
1011 try appendU16(allocator, out, 'B' - 31);
1012
1013 try appendU16(allocator, out, 1);
1014 try appendU16(allocator, out, 4);
1015
1016 try appendU16(allocator, out, 1);
1017 try appendU16(allocator, out, 'A' - 31);
1018 try appendU16(allocator, out, 2);
1019 try appendU16(allocator, out, 'C' - 31);
1020 try appendU16(allocator, out, 0);
1021 try appendU16(allocator, out, 1);
1022 try appendU16(allocator, out, 0);
1023 try appendU16(allocator, out, 1);
1024
1025 try appendU16(allocator, out, 2);
1026 try appendU16(allocator, out, 0);
1027 try appendU16(allocator, out, 1);
1028 try appendU16(allocator, out, 8);
1029
1030 try appendU16(allocator, out, 1);
1031 try appendU16(allocator, out, 18);
1032 try appendU16(allocator, out, 0x0004);
1033 try appendU16(allocator, out, 0);
1034 try appendU16(allocator, out, 1);
1035 try appendU16(allocator, out, 12);
1036
1037 try appendU16(allocator, out, 1);
1038 try appendU16(allocator, out, 'C' - 31);
1039 try appendI16(allocator, out, -100);
1040
1041 try appendU16(allocator, out, 1);
1042 try appendU16(allocator, out, 1);
1043 try appendU16(allocator, out, 'B' - 31);
1044 }
1045
1046 pub fn appendGposChainedClassContextualPairAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
1047 try appendU16(allocator, out, 1);
1048 try appendU16(allocator, out, 0);
1049 try appendU16(allocator, out, 10);
1050 try appendU16(allocator, out, 30);
1051 try appendU16(allocator, out, 44);
1052
1053 try appendU16(allocator, out, 1);
1054 try appendTag(allocator, out, "DFLT");
1055 try appendU16(allocator, out, 8);
1056
1057 try appendU16(allocator, out, 4);
1058 try appendU16(allocator, out, 0);
1059
1060 try appendU16(allocator, out, 0);
1061 try appendU16(allocator, out, 0xffff);
1062 try appendU16(allocator, out, 1);
1063 try appendU16(allocator, out, 0);
1064
1065 try appendU16(allocator, out, 1);
1066 try appendTag(allocator, out, "kern");
1067 try appendU16(allocator, out, 8);
1068
1069 try appendU16(allocator, out, 0);
1070 try appendU16(allocator, out, 1);
1071 try appendU16(allocator, out, 0);
1072
1073 try appendU16(allocator, out, 2);
1074 try appendU16(allocator, out, 6);
1075 try appendU16(allocator, out, 84);
1076
1077 try appendU16(allocator, out, 8);
1078 try appendU16(allocator, out, 0);
1079 try appendU16(allocator, out, 1);
1080 try appendU16(allocator, out, 8);
1081
1082 try appendU16(allocator, out, 2);
1083 try appendU16(allocator, out, 18);
1084 try appendU16(allocator, out, 24);
1085 try appendU16(allocator, out, 32);
1086 try appendU16(allocator, out, 42);
1087 try appendU16(allocator, out, 3);
1088 try appendU16(allocator, out, 0);
1089 try appendU16(allocator, out, 0);
1090 try appendU16(allocator, out, 50);
1091
1092 try appendU16(allocator, out, 1);
1093 try appendU16(allocator, out, 1);
1094 try appendU16(allocator, out, 'B' - 31);
1095
1096 try appendU16(allocator, out, 1);
1097 try appendU16(allocator, out, 'A' - 31);
1098 try appendU16(allocator, out, 1);
1099 try appendU16(allocator, out, 1);
1100
1101 try appendU16(allocator, out, 1);
1102 try appendU16(allocator, out, 'B' - 31);
1103 try appendU16(allocator, out, 2);
1104 try appendU16(allocator, out, 2);
1105 try appendU16(allocator, out, 3);
1106
1107 try appendU16(allocator, out, 1);
1108 try appendU16(allocator, out, 'C' - 31);
1109 try appendU16(allocator, out, 1);
1110 try appendU16(allocator, out, 1);
1111
1112 try appendU16(allocator, out, 1);
1113 try appendU16(allocator, out, 4);
1114
1115 try appendU16(allocator, out, 1);
1116 try appendU16(allocator, out, 1);
1117 try appendU16(allocator, out, 2);
1118 try appendU16(allocator, out, 3);
1119 try appendU16(allocator, out, 0);
1120 try appendU16(allocator, out, 1);
1121 try appendU16(allocator, out, 0);
1122 try appendU16(allocator, out, 1);
1123
1124 try appendU16(allocator, out, 2);
1125 try appendU16(allocator, out, 0);
1126 try appendU16(allocator, out, 1);
1127 try appendU16(allocator, out, 8);
1128
1129 try appendU16(allocator, out, 1);
1130 try appendU16(allocator, out, 18);
1131 try appendU16(allocator, out, 0x0004);
1132 try appendU16(allocator, out, 0);
1133 try appendU16(allocator, out, 1);
1134 try appendU16(allocator, out, 12);
1135
1136 try appendU16(allocator, out, 1);
1137 try appendU16(allocator, out, 'C' - 31);
1138 try appendI16(allocator, out, -100);
1139
1140 try appendU16(allocator, out, 1);
1141 try appendU16(allocator, out, 1);
1142 try appendU16(allocator, out, 'B' - 31);
1143 }
1144
1145 pub fn appendGposPairAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8), lookup_flag: u16) !void {
1146 try appendGposPairAdjustmentWithFeature(allocator, out, "kern", 0x0004, -80, lookup_flag);
1147 }
1148
1149 pub fn appendGposVerticalPairAdjustment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
1150 try appendGposPairAdjustmentWithFeature(allocator, out, "vkrn", 0x0008, -80, 0);
1151 }
1152
1153 pub fn appendGposPairAdjustmentWithFeature(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8), comptime feature_tag: []const u8, value_format_1: u16, adjustment: i16, lookup_flag: u16) !void {
1154 try appendU16(allocator, out, 1);
1155 try appendU16(allocator, out, 0);
1156 try appendU16(allocator, out, 10);
1157 try appendU16(allocator, out, 30);
1158 try appendU16(allocator, out, 44);
1159
1160 try appendU16(allocator, out, 1);
1161 try appendTag(allocator, out, "DFLT");
1162 try appendU16(allocator, out, 8);
1163
1164 try appendU16(allocator, out, 4);
1165 try appendU16(allocator, out, 0);
1166
1167 try appendU16(allocator, out, 0);
1168 try appendU16(allocator, out, 0xffff);
1169 try appendU16(allocator, out, 1);
1170 try appendU16(allocator, out, 0);
1171
1172 try appendU16(allocator, out, 1);
1173 try appendTag(allocator, out, feature_tag);
1174 try appendU16(allocator, out, 8);
1175
1176 try appendU16(allocator, out, 0);
1177 try appendU16(allocator, out, 1);
1178 try appendU16(allocator, out, 0);
1179
1180 try appendU16(allocator, out, 1);
1181 try appendU16(allocator, out, 4);
1182
1183 try appendU16(allocator, out, 2);
1184 try appendU16(allocator, out, lookup_flag);
1185 try appendU16(allocator, out, 1);
1186 try appendU16(allocator, out, 8);
1187
1188 try appendU16(allocator, out, 1);
1189 try appendU16(allocator, out, 18);
1190 try appendU16(allocator, out, value_format_1);
1191 try appendU16(allocator, out, 0);
1192 try appendU16(allocator, out, 1);
1193 try appendU16(allocator, out, 12);
1194
1195 try appendU16(allocator, out, 1);
1196 try appendU16(allocator, out, 'V' - 31);
1197 try appendI16(allocator, out, adjustment);
1198
1199 try appendU16(allocator, out, 1);
1200 try appendU16(allocator, out, 1);
1201 try appendU16(allocator, out, 'A' - 31);
1202 }
1203
1204 pub fn appendGposCursiveAttachment(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
1205 try appendU16(allocator, out, 1);
1206 try appendU16(allocator, out, 0);
1207 try appendU16(allocator, out, 10);
1208 try appendU16(allocator, out, 30);
1209 try appendU16(allocator, out, 44);
1210
1211 try appendU16(allocator, out, 1);
1212 try appendTag(allocator, out, "DFLT");
1213 try appendU16(allocator, out, 8);
1214
1215 try appendU16(allocator, out, 4);
1216 try appendU16(allocator, out, 0);
1217
1218 try appendU16(allocator, out, 0);
1219 try appendU16(allocator, out, 0xffff);
1220 try appendU16(allocator, out, 1);
1221 try appendU16(allocator, out, 0);
1222
1223 try appendU16(allocator, out, 1);
1224 try appendTag(allocator, out, "curs");
1225 try appendU16(allocator, out, 8);
1226
1227 try appendU16(allocator, out, 0);
1228 try appendU16(allocator, out, 1);
1229 try appendU16(allocator, out, 0);
1230
1231 try appendU16(allocator, out, 1);
1232 try appendU16(allocator, out, 4);
1233
1234 try appendU16(allocator, out, 3);
1235 try appendU16(allocator, out, 0);
1236 try appendU16(allocator, out, 1);
1237 try appendU16(allocator, out, 8);
1238
1239 try appendU16(allocator, out, 1);
1240 try appendU16(allocator, out, 14);
1241 try appendU16(allocator, out, 2);
1242 try appendU16(allocator, out, 0);
1243 try appendU16(allocator, out, 22);
1244 try appendU16(allocator, out, 28);
1245 try appendU16(allocator, out, 0);
1246
1247 try appendU16(allocator, out, 1);
1248 try appendU16(allocator, out, 2);
1249 try appendU16(allocator, out, 'A' - 31);
1250 try appendU16(allocator, out, 'B' - 31);
1251
1252 try appendU16(allocator, out, 1);
1253 try appendI16(allocator, out, 480);
1254 try appendI16(allocator, out, 300);
1255
1256 try appendU16(allocator, out, 1);
1257 try appendI16(allocator, out, 20);
1258 try appendI16(allocator, out, 200);
1259 }
1260
1261 pub fn appendGposMarkToBase(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
1262 try appendGposMarkToBaseFeature(allocator, out, "mark");
1263 }
1264
1265 pub fn appendGposMarkToBaseThenPair(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
1266 try appendU16(allocator, out, 1);
1267 try appendU16(allocator, out, 0);
1268 try appendU16(allocator, out, 10);
1269 try appendU16(allocator, out, 32);
1270 try appendU16(allocator, out, 58);
1271
1272 try appendU16(allocator, out, 1);
1273 try appendTag(allocator, out, "DFLT");
1274 try appendU16(allocator, out, 8);
1275
1276 try appendU16(allocator, out, 4);
1277 try appendU16(allocator, out, 0);
1278
1279 try appendU16(allocator, out, 0);
1280 try appendU16(allocator, out, 0xffff);
1281 try appendU16(allocator, out, 2);
1282 try appendU16(allocator, out, 0);
1283 try appendU16(allocator, out, 1);
1284
1285 try appendU16(allocator, out, 2);
1286 try appendTag(allocator, out, "kern");
1287 try appendU16(allocator, out, 14);
1288 try appendTag(allocator, out, "mark");
1289 try appendU16(allocator, out, 20);
1290
1291 try appendU16(allocator, out, 0);
1292 try appendU16(allocator, out, 1);
1293 try appendU16(allocator, out, 1);
1294
1295 try appendU16(allocator, out, 0);
1296 try appendU16(allocator, out, 1);
1297 try appendU16(allocator, out, 0);
1298
1299 try appendU16(allocator, out, 2);
1300 try appendU16(allocator, out, 6);
1301 try appendU16(allocator, out, 60);
1302
1303 try appendU16(allocator, out, 4);
1304 try appendU16(allocator, out, 0);
1305 try appendU16(allocator, out, 1);
1306 try appendU16(allocator, out, 8);
1307
1308 try appendU16(allocator, out, 1);
1309 try appendU16(allocator, out, 34);
1310 try appendU16(allocator, out, 40);
1311 try appendU16(allocator, out, 1);
1312 try appendU16(allocator, out, 12);
1313 try appendU16(allocator, out, 24);
1314
1315 try appendU16(allocator, out, 1);
1316 try appendU16(allocator, out, 0);
1317 try appendU16(allocator, out, 6);
1318
1319 try appendU16(allocator, out, 1);
1320 try appendI16(allocator, out, 100);
1321 try appendI16(allocator, out, 0);
1322
1323 try appendU16(allocator, out, 1);
1324 try appendU16(allocator, out, 4);
1325
1326 try appendU16(allocator, out, 1);
1327 try appendI16(allocator, out, 250);
1328 try appendI16(allocator, out, 700);
1329
1330 try appendU16(allocator, out, 1);
1331 try appendU16(allocator, out, 1);
1332 try appendU16(allocator, out, '^' - 31);
1333
1334 try appendU16(allocator, out, 1);
1335 try appendU16(allocator, out, 1);
1336 try appendU16(allocator, out, 'A' - 31);
1337
1338 try appendU16(allocator, out, 2);
1339 try appendU16(allocator, out, 0x0008);
1340 try appendU16(allocator, out, 1);
1341 try appendU16(allocator, out, 8);
1342
1343 try appendU16(allocator, out, 1);
1344 try appendU16(allocator, out, 18);
1345 try appendU16(allocator, out, 0x0004);
1346 try appendU16(allocator, out, 0);
1347 try appendU16(allocator, out, 1);
1348 try appendU16(allocator, out, 12);
1349
1350 try appendU16(allocator, out, 1);
1351 try appendU16(allocator, out, 'V' - 31);
1352 try appendI16(allocator, out, -80);
1353
1354 try appendU16(allocator, out, 1);
1355 try appendU16(allocator, out, 1);
1356 try appendU16(allocator, out, 'A' - 31);
1357 }
1358
1359 pub fn appendGposAboveBaseMarkPositioning(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
1360 try appendGposMarkToBaseFeature(allocator, out, "abvm");
1361 }
1362
1363 pub fn appendGposBelowBaseMarkPositioning(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
1364 try appendGposMarkToBaseFeature(allocator, out, "blwm");
1365 }
1366
1367 pub fn appendGposMarkToBaseFeature(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8), comptime feature_tag: []const u8) !void {
1368 try appendU16(allocator, out, 1);
1369 try appendU16(allocator, out, 0);
1370 try appendU16(allocator, out, 10);
1371 try appendU16(allocator, out, 30);
1372 try appendU16(allocator, out, 44);
1373
1374 try appendU16(allocator, out, 1);
1375 try appendTag(allocator, out, "DFLT");
1376 try appendU16(allocator, out, 8);
1377
1378 try appendU16(allocator, out, 4);
1379 try appendU16(allocator, out, 0);
1380
1381 try appendU16(allocator, out, 0);
1382 try appendU16(allocator, out, 0xffff);
1383 try appendU16(allocator, out, 1);
1384 try appendU16(allocator, out, 0);
1385
1386 try appendU16(allocator, out, 1);
1387 try appendTag(allocator, out, feature_tag);
1388 try appendU16(allocator, out, 8);
1389
1390 try appendU16(allocator, out, 0);
1391 try appendU16(allocator, out, 1);
1392 try appendU16(allocator, out, 0);
1393
1394 try appendU16(allocator, out, 1);
1395 try appendU16(allocator, out, 4);
1396
1397 try appendU16(allocator, out, 4);
1398 try appendU16(allocator, out, 0);
1399 try appendU16(allocator, out, 1);
1400 try appendU16(allocator, out, 8);
1401
1402 try appendU16(allocator, out, 1);
1403 try appendU16(allocator, out, 34);
1404 try appendU16(allocator, out, 40);
1405 try appendU16(allocator, out, 1);
1406 try appendU16(allocator, out, 12);
1407 try appendU16(allocator, out, 24);
1408
1409 try appendU16(allocator, out, 1);
1410 try appendU16(allocator, out, 0);
1411 try appendU16(allocator, out, 6);
1412
1413 try appendU16(allocator, out, 1);
1414 try appendI16(allocator, out, 100);
1415 try appendI16(allocator, out, 0);
1416
1417 try appendU16(allocator, out, 1);
1418 try appendU16(allocator, out, 4);
1419
1420 try appendU16(allocator, out, 1);
1421 try appendI16(allocator, out, 250);
1422 try appendI16(allocator, out, 700);
1423
1424 try appendU16(allocator, out, 1);
1425 try appendU16(allocator, out, 1);
1426 try appendU16(allocator, out, '^' - 31);
1427
1428 try appendU16(allocator, out, 1);
1429 try appendU16(allocator, out, 1);
1430 try appendU16(allocator, out, 'A' - 31);
1431 }
1432
1433 pub fn appendGposMarkToLigature(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
1434 try appendU16(allocator, out, 1);
1435 try appendU16(allocator, out, 0);
1436 try appendU16(allocator, out, 10);
1437 try appendU16(allocator, out, 30);
1438 try appendU16(allocator, out, 44);
1439
1440 try appendU16(allocator, out, 1);
1441 try appendTag(allocator, out, "DFLT");
1442 try appendU16(allocator, out, 8);
1443
1444 try appendU16(allocator, out, 4);
1445 try appendU16(allocator, out, 0);
1446
1447 try appendU16(allocator, out, 0);
1448 try appendU16(allocator, out, 0xffff);
1449 try appendU16(allocator, out, 1);
1450 try appendU16(allocator, out, 0);
1451
1452 try appendU16(allocator, out, 1);
1453 try appendTag(allocator, out, "mark");
1454 try appendU16(allocator, out, 8);
1455
1456 try appendU16(allocator, out, 0);
1457 try appendU16(allocator, out, 1);
1458 try appendU16(allocator, out, 0);
1459
1460 try appendU16(allocator, out, 1);
1461 try appendU16(allocator, out, 4);
1462
1463 try appendU16(allocator, out, 5);
1464 try appendU16(allocator, out, 0);
1465 try appendU16(allocator, out, 1);
1466 try appendU16(allocator, out, 8);
1467
1468 try appendU16(allocator, out, 1);
1469 try appendU16(allocator, out, 46);
1470 try appendU16(allocator, out, 52);
1471 try appendU16(allocator, out, 1);
1472 try appendU16(allocator, out, 12);
1473 try appendU16(allocator, out, 24);
1474
1475 try appendU16(allocator, out, 1);
1476 try appendU16(allocator, out, 0);
1477 try appendU16(allocator, out, 6);
1478
1479 try appendU16(allocator, out, 1);
1480 try appendI16(allocator, out, 100);
1481 try appendI16(allocator, out, 0);
1482
1483 try appendU16(allocator, out, 1);
1484 try appendU16(allocator, out, 4);
1485
1486 try appendU16(allocator, out, 2);
1487 try appendU16(allocator, out, 6);
1488 try appendU16(allocator, out, 12);
1489
1490 try appendU16(allocator, out, 1);
1491 try appendI16(allocator, out, 180);
1492 try appendI16(allocator, out, 700);
1493
1494 try appendU16(allocator, out, 1);
1495 try appendI16(allocator, out, 330);
1496 try appendI16(allocator, out, 650);
1497
1498 try appendU16(allocator, out, 1);
1499 try appendU16(allocator, out, 1);
1500 try appendU16(allocator, out, '^' - 31);
1501
1502 try appendU16(allocator, out, 1);
1503 try appendU16(allocator, out, 1);
1504 try appendU16(allocator, out, 96);
1505 }
1506
1507 pub fn appendGposMarkToMark(allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) !void {
1508 try appendU16(allocator, out, 1);
1509 try appendU16(allocator, out, 0);
1510 try appendU16(allocator, out, 10);
1511 try appendU16(allocator, out, 30);
1512 try appendU16(allocator, out, 44);
1513
1514 try appendU16(allocator, out, 1);
1515 try appendTag(allocator, out, "DFLT");
1516 try appendU16(allocator, out, 8);
1517
1518 try appendU16(allocator, out, 4);
1519 try appendU16(allocator, out, 0);
1520
1521 try appendU16(allocator, out, 0);
1522 try appendU16(allocator, out, 0xffff);
1523 try appendU16(allocator, out, 1);
1524 try appendU16(allocator, out, 0);
1525
1526 try appendU16(allocator, out, 1);
1527 try appendTag(allocator, out, "mkmk");
1528 try appendU16(allocator, out, 8);
1529
1530 try appendU16(allocator, out, 0);
1531 try appendU16(allocator, out, 1);
1532 try appendU16(allocator, out, 0);
1533
1534 try appendU16(allocator, out, 1);
1535 try appendU16(allocator, out, 4);
1536
1537 try appendU16(allocator, out, 6);
1538 try appendU16(allocator, out, 0);
1539 try appendU16(allocator, out, 1);
1540 try appendU16(allocator, out, 8);
1541
1542 try appendU16(allocator, out, 1);
1543 try appendU16(allocator, out, 34);
1544 try appendU16(allocator, out, 40);
1545 try appendU16(allocator, out, 1);
1546 try appendU16(allocator, out, 12);
1547 try appendU16(allocator, out, 24);
1548
1549 try appendU16(allocator, out, 1);
1550 try appendU16(allocator, out, 0);
1551 try appendU16(allocator, out, 6);
1552
1553 try appendU16(allocator, out, 1);
1554 try appendI16(allocator, out, 80);
1555 try appendI16(allocator, out, 100);
1556
1557 try appendU16(allocator, out, 1);
1558 try appendU16(allocator, out, 4);
1559
1560 try appendU16(allocator, out, 1);
1561 try appendI16(allocator, out, 100);
1562 try appendI16(allocator, out, 400);
1563
1564 try appendU16(allocator, out, 1);
1565 try appendU16(allocator, out, 1);
1566 try appendU16(allocator, out, '_' - 31);
1567
1568 try appendU16(allocator, out, 1);
1569 try appendU16(allocator, out, 1);
1570 try appendU16(allocator, out, '^' - 31);
1571 }