docier-web 0.1.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/api/editor.d.ts +3 -0
  2. package/dist/api/editor.d.ts.map +1 -1
  3. package/dist/api/editor.js +115 -0
  4. package/dist/api/editor.js.map +1 -1
  5. package/dist/api/package-images.d.ts +8 -0
  6. package/dist/api/package-images.d.ts.map +1 -0
  7. package/dist/api/package-images.js +98 -0
  8. package/dist/api/package-images.js.map +1 -0
  9. package/dist/edit/areas/document.d.ts +16 -0
  10. package/dist/edit/areas/document.d.ts.map +1 -0
  11. package/dist/edit/areas/document.js +50 -0
  12. package/dist/edit/areas/document.js.map +1 -0
  13. package/dist/edit/areas/find.d.ts +21 -0
  14. package/dist/edit/areas/find.d.ts.map +1 -0
  15. package/dist/edit/areas/find.js +159 -0
  16. package/dist/edit/areas/find.js.map +1 -0
  17. package/dist/edit/areas/index.d.ts +2 -0
  18. package/dist/edit/areas/index.d.ts.map +1 -1
  19. package/dist/edit/areas/index.js +5 -0
  20. package/dist/edit/areas/index.js.map +1 -1
  21. package/dist/edit/areas/insert.d.ts +5 -0
  22. package/dist/edit/areas/insert.d.ts.map +1 -1
  23. package/dist/edit/areas/insert.js +9 -2
  24. package/dist/edit/areas/insert.js.map +1 -1
  25. package/dist/edit/areas/unsupported.d.ts.map +1 -1
  26. package/dist/edit/areas/unsupported.js +0 -20
  27. package/dist/edit/areas/unsupported.js.map +1 -1
  28. package/dist/edit/clipboard/html-export.d.ts +1 -0
  29. package/dist/edit/clipboard/html-export.d.ts.map +1 -1
  30. package/dist/edit/clipboard/html-export.js +3 -1
  31. package/dist/edit/clipboard/html-export.js.map +1 -1
  32. package/dist/edit/clipboard/index.d.ts +1 -1
  33. package/dist/edit/clipboard/index.d.ts.map +1 -1
  34. package/dist/edit/clipboard/index.js +1 -1
  35. package/dist/edit/clipboard/index.js.map +1 -1
  36. package/dist/edit/image-file.d.ts +26 -0
  37. package/dist/edit/image-file.d.ts.map +1 -0
  38. package/dist/edit/image-file.js +94 -0
  39. package/dist/edit/image-file.js.map +1 -0
  40. package/dist/edit/input.d.ts.map +1 -1
  41. package/dist/edit/input.js +30 -3
  42. package/dist/edit/input.js.map +1 -1
  43. package/dist/edit/mutation.d.ts +1 -0
  44. package/dist/edit/mutation.d.ts.map +1 -1
  45. package/dist/edit/mutation.js +65 -0
  46. package/dist/edit/mutation.js.map +1 -1
  47. package/dist/edit/navigation.js +3 -3
  48. package/dist/edit/navigation.js.map +1 -1
  49. package/dist/edit/positions.d.ts +2 -0
  50. package/dist/edit/positions.d.ts.map +1 -1
  51. package/dist/edit/positions.js +22 -6
  52. package/dist/edit/positions.js.map +1 -1
  53. package/dist/edit/session.d.ts.map +1 -1
  54. package/dist/edit/session.js +18 -1
  55. package/dist/edit/session.js.map +1 -1
  56. package/dist/render/document.js +1 -1
  57. package/dist/render/document.js.map +1 -1
  58. package/dist/style.css +19 -9
  59. package/dist/ui/chrome.d.ts.map +1 -1
  60. package/dist/ui/chrome.js +16 -5
  61. package/dist/ui/chrome.js.map +1 -1
  62. package/dist/ui/colour-picker.js +5 -5
  63. package/dist/ui/controls.d.ts.map +1 -1
  64. package/dist/ui/controls.js +37 -9
  65. package/dist/ui/controls.js.map +1 -1
  66. package/dist/ui/dialog.d.ts +5 -5
  67. package/dist/ui/dialog.d.ts.map +1 -1
  68. package/dist/ui/dialog.js +32 -6
  69. package/dist/ui/dialog.js.map +1 -1
  70. package/dist/ui/find-dialog.d.ts +17 -0
  71. package/dist/ui/find-dialog.d.ts.map +1 -0
  72. package/dist/ui/find-dialog.js +94 -0
  73. package/dist/ui/find-dialog.js.map +1 -0
  74. package/dist/ui/font-dialog.d.ts +14 -3
  75. package/dist/ui/font-dialog.d.ts.map +1 -1
  76. package/dist/ui/font-dialog.js +193 -33
  77. package/dist/ui/font-dialog.js.map +1 -1
  78. package/dist/ui/font-family.d.ts +3 -0
  79. package/dist/ui/font-family.d.ts.map +1 -0
  80. package/dist/ui/font-family.js +6 -0
  81. package/dist/ui/font-family.js.map +1 -0
  82. package/dist/ui/i18n.d.ts.map +1 -1
  83. package/dist/ui/i18n.js +5 -0
  84. package/dist/ui/i18n.js.map +1 -1
  85. package/dist/ui/icons.d.ts.map +1 -1
  86. package/dist/ui/icons.js +4 -0
  87. package/dist/ui/icons.js.map +1 -1
  88. package/dist/ui/image-picker.d.ts +1 -14
  89. package/dist/ui/image-picker.d.ts.map +1 -1
  90. package/dist/ui/image-picker.js +2 -53
  91. package/dist/ui/image-picker.js.map +1 -1
  92. package/dist/ui/menu-bar.d.ts +6 -0
  93. package/dist/ui/menu-bar.d.ts.map +1 -1
  94. package/dist/ui/menu-bar.js +30 -1
  95. package/dist/ui/menu-bar.js.map +1 -1
  96. package/dist/ui/menu-model.d.ts +1 -0
  97. package/dist/ui/menu-model.d.ts.map +1 -1
  98. package/dist/ui/menu-model.js +26 -33
  99. package/dist/ui/menu-model.js.map +1 -1
  100. package/dist/ui/menu.d.ts.map +1 -1
  101. package/dist/ui/menu.js +4 -0
  102. package/dist/ui/menu.js.map +1 -1
  103. package/dist/ui/styles.d.ts.map +1 -1
  104. package/dist/ui/styles.js +16 -6
  105. package/dist/ui/styles.js.map +1 -1
  106. package/dist/ui/theme.d.ts.map +1 -1
  107. package/dist/ui/theme.js +11 -0
  108. package/dist/ui/theme.js.map +1 -1
  109. package/dist/ui/types.d.ts +1 -0
  110. package/dist/ui/types.d.ts.map +1 -1
  111. package/dist/ui/types.js.map +1 -1
  112. package/package.json +1 -1
  113. package/dist/edit/search.d.ts +0 -19
  114. package/dist/edit/search.d.ts.map +0 -1
  115. package/dist/edit/search.js +0 -65
  116. package/dist/edit/search.js.map +0 -1
  117. package/dist/pdf/fonts/sfnt.d.ts +0 -83
  118. package/dist/pdf/fonts/sfnt.d.ts.map +0 -1
  119. package/dist/pdf/fonts/sfnt.js +0 -363
  120. package/dist/pdf/fonts/sfnt.js.map +0 -1
@@ -1,65 +0,0 @@
1
- import { docPos } from '../layout/index.js';
2
- import { blockText } from './positions.js';
3
- export const MAX_MATCHES = 5000;
4
- const WORD_CHARACTER = /[\p{L}\p{N}_]/u;
5
- const isWordCharacter = (text, index) => {
6
- if (index < 0 || index >= text.length)
7
- return false;
8
- const character = text.slice(index, index + 1);
9
- return WORD_CHARACTER.test(character);
10
- };
11
- const normalise = (value, matchCase) => matchCase ? value : value.toLocaleLowerCase();
12
- export const searchResult = (index, query, options = {}) => {
13
- if (query === '')
14
- return { matches: [], truncated: false };
15
- const matchCase = options.matchCase ?? false;
16
- const wholeWord = options.wholeWord ?? false;
17
- const needle = normalise(query, matchCase);
18
- const matches = [];
19
- let truncated = false;
20
- for (const span of index.paragraphs) {
21
- if (truncated)
22
- break;
23
- const text = blockText(span);
24
- if (text === '')
25
- continue;
26
- const haystack = normalise(text, matchCase);
27
- let from = 0;
28
- for (;;) {
29
- const at = haystack.indexOf(needle, from);
30
- if (at < 0)
31
- break;
32
- from = at + Math.max(1, needle.length);
33
- if (wholeWord) {
34
- if (isWordCharacter(text, at - 1))
35
- continue;
36
- if (isWordCharacter(text, at + needle.length))
37
- continue;
38
- }
39
- if (matches.length >= MAX_MATCHES) {
40
- truncated = true;
41
- break;
42
- }
43
- const start = docPos(span.start + at);
44
- matches.push({ start, end: docPos(start + query.length) });
45
- }
46
- }
47
- return { matches, truncated };
48
- };
49
- export const matchAt = (matches, pos) => matches.find((match) => match.start <= pos && match.end >= pos);
50
- export const adjacentMatch = (matches, pos, direction) => {
51
- const last = matches[matches.length - 1];
52
- if (last === undefined)
53
- return undefined;
54
- if (direction > 0) {
55
- return matches.find((match) => match.start > pos) ?? matches[0];
56
- }
57
- let found;
58
- for (const match of matches) {
59
- if (match.end >= pos)
60
- break;
61
- found = match;
62
- }
63
- return found ?? last;
64
- };
65
- //# sourceMappingURL=search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/edit/search.ts"],"names":[],"mappings":"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"}
@@ -1,83 +0,0 @@
1
- export interface TableRecord {
2
- readonly tag: string;
3
- readonly offset: number;
4
- readonly length: number;
5
- }
6
- export interface SfntHead {
7
- readonly unitsPerEm: number;
8
- readonly indexToLocFormat: number;
9
- readonly xMin: number;
10
- readonly yMin: number;
11
- readonly xMax: number;
12
- readonly yMax: number;
13
- readonly macStyle: number;
14
- }
15
- export interface SfntHhea {
16
- readonly ascender: number;
17
- readonly descender: number;
18
- readonly lineGap: number;
19
- readonly numberOfHMetrics: number;
20
- }
21
- export interface SfntOs2 {
22
- readonly version: number;
23
- readonly fsType: number;
24
- readonly weightClass: number;
25
- readonly typoAscender: number;
26
- readonly typoDescender: number;
27
- readonly typoLineGap: number;
28
- readonly capHeight: number;
29
- }
30
- export declare const SFNT_TAG: (bytes: Uint8Array, at: number) => string;
31
- export declare class Sfnt {
32
- private readonly view;
33
- private readonly tables;
34
- readonly bytes: Uint8Array;
35
- readonly isCff: boolean;
36
- constructor(bytes: Uint8Array);
37
- private require;
38
- table(tag: string): Uint8Array | undefined;
39
- has(tag: string): boolean;
40
- tagNames(): readonly string[];
41
- private u8;
42
- private i16;
43
- private u16;
44
- private i32;
45
- private u32;
46
- get head(): SfntHead;
47
- get hhea(): SfntHhea;
48
- get os2(): SfntOs2 | undefined;
49
- get italicAngle(): number;
50
- get underline(): {
51
- readonly position: number;
52
- readonly thickness: number;
53
- };
54
- get strikeout(): {
55
- readonly position: number;
56
- readonly size: number;
57
- } | undefined;
58
- isMonospaced(): boolean;
59
- get numGlyphs(): number;
60
- postScriptName(fallback: string): string;
61
- private decodeName;
62
- hasGlyf(): boolean;
63
- private locaOffset;
64
- glyphRange(glyph: number): {
65
- readonly start: number;
66
- readonly end: number;
67
- } | undefined;
68
- glyphByteLength(glyph: number): number;
69
- private static readonly ARG_1_AND_2_ARE_WORDS;
70
- private static readonly WE_HAVE_A_SCALE;
71
- private static readonly MORE_COMPONENTS;
72
- private static readonly WE_HAVE_AN_X_AND_Y_SCALE;
73
- private static readonly WE_HAVE_A_TWO_BY_TWO;
74
- compositeGlyphs(glyph: number): readonly number[];
75
- advanceWidths(): readonly number[];
76
- private cmapFormat;
77
- private bestCmap;
78
- glyphFor(codePoint: number): number;
79
- private glyphFromFormat6;
80
- private glyphFromFormat4;
81
- private glyphFromFormat12;
82
- }
83
- //# sourceMappingURL=sfnt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sfnt.d.ts","sourceRoot":"","sources":["../../../src/pdf/fonts/sfnt.ts"],"names":[],"mappings":"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"}
@@ -1,363 +0,0 @@
1
- import { PdfError } from '../errors.js';
2
- export const SFNT_TAG = (bytes, at) => {
3
- let tag = '';
4
- for (let index = 0; index < 4; index += 1)
5
- tag += String.fromCharCode(bytes[at + index] ?? 0);
6
- return tag;
7
- };
8
- const sanitizeName = (value) => value.replace(/[^A-Za-z0-9._+-]/g, '').slice(0, 63);
9
- const unreadable = (detail) => new PdfError(`the font file could not be parsed: ${detail}`, {
10
- code: 'PDF_FONT_UNREADABLE',
11
- detail,
12
- });
13
- export class Sfnt {
14
- view;
15
- tables;
16
- bytes;
17
- isCff;
18
- constructor(bytes) {
19
- this.bytes = bytes;
20
- this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
21
- this.tables = new Map();
22
- if (bytes.byteLength < 12)
23
- throw unreadable('the file is shorter than an sfnt header');
24
- const flavour = this.view.getUint32(0, false);
25
- this.isCff = flavour === 0x4f54544f;
26
- if (!this.isCff && flavour !== 0x00010000 && flavour !== 0x74727565) {
27
- throw unreadable('the file has no sfnt version');
28
- }
29
- const count = this.view.getUint16(4, false);
30
- if (12 + count * 16 > bytes.byteLength)
31
- throw unreadable('the table directory runs past the file');
32
- for (let index = 0; index < count; index += 1) {
33
- const at = 12 + index * 16;
34
- const tag = SFNT_TAG(bytes, at);
35
- const offset = this.view.getUint32(at + 8, false);
36
- const length = this.view.getUint32(at + 12, false);
37
- if (offset + length > bytes.byteLength)
38
- throw unreadable(`table "${tag}" runs past the file`);
39
- this.tables.set(tag, { tag, offset, length });
40
- }
41
- }
42
- require(tag) {
43
- const record = this.tables.get(tag);
44
- if (record === undefined)
45
- throw unreadable(`table "${tag}" is missing`);
46
- return record;
47
- }
48
- table(tag) {
49
- const record = this.tables.get(tag);
50
- if (record === undefined)
51
- return undefined;
52
- return this.bytes.subarray(record.offset, record.offset + record.length);
53
- }
54
- has(tag) {
55
- return this.tables.has(tag);
56
- }
57
- tagNames() {
58
- return [...this.tables.keys()];
59
- }
60
- u8(at) {
61
- return this.view.getUint8(at);
62
- }
63
- i16(at) {
64
- return this.view.getInt16(at, false);
65
- }
66
- u16(at) {
67
- return this.view.getUint16(at, false);
68
- }
69
- i32(at) {
70
- return this.view.getInt32(at, false);
71
- }
72
- u32(at) {
73
- return this.view.getUint32(at, false);
74
- }
75
- get head() {
76
- const at = this.require('head').offset;
77
- return {
78
- unitsPerEm: this.u16(at + 18),
79
- indexToLocFormat: this.i16(at + 50),
80
- xMin: this.i16(at + 36),
81
- yMin: this.i16(at + 38),
82
- xMax: this.i16(at + 40),
83
- yMax: this.i16(at + 42),
84
- macStyle: this.u16(at + 44),
85
- };
86
- }
87
- get hhea() {
88
- const at = this.require('hhea').offset;
89
- return {
90
- ascender: this.i16(at + 4),
91
- descender: this.i16(at + 6),
92
- lineGap: this.i16(at + 8),
93
- numberOfHMetrics: this.u16(at + 34),
94
- };
95
- }
96
- get os2() {
97
- const record = this.tables.get('OS/2');
98
- if (record === undefined)
99
- return undefined;
100
- const at = record.offset;
101
- const version = this.u16(at);
102
- const typoAscender = this.i16(at + 68);
103
- const typoDescender = this.i16(at + 70);
104
- const typoLineGap = this.i16(at + 72);
105
- const capHeight = record.length >= 90 ? this.i16(at + 88) : 0;
106
- return {
107
- version,
108
- fsType: this.u16(at + 8),
109
- weightClass: this.u16(at + 4),
110
- typoAscender,
111
- typoDescender,
112
- typoLineGap,
113
- capHeight,
114
- };
115
- }
116
- get italicAngle() {
117
- const record = this.tables.get('post');
118
- if (record === undefined || record.length < 8)
119
- return 0;
120
- return this.i32(record.offset + 4) / 65536;
121
- }
122
- get underline() {
123
- const record = this.tables.get('post');
124
- if (record === undefined || record.length < 12) {
125
- return { position: -Math.round(this.head.unitsPerEm * 0.1), thickness: Math.max(1, Math.round(this.head.unitsPerEm / 20)) };
126
- }
127
- const thickness = this.i16(record.offset + 10);
128
- return {
129
- position: this.i16(record.offset + 8),
130
- thickness: thickness > 0 ? thickness : Math.max(1, Math.round(this.head.unitsPerEm / 20)),
131
- };
132
- }
133
- get strikeout() {
134
- const record = this.tables.get('OS/2');
135
- if (record === undefined || record.length < 30)
136
- return undefined;
137
- return {
138
- position: this.i16(record.offset + 26),
139
- size: Math.max(1, this.i16(record.offset + 28)),
140
- };
141
- }
142
- isMonospaced() {
143
- const widths = this.advanceWidths();
144
- const first = widths[Math.min(widths.length - 1, 32)] ?? 0;
145
- for (let glyph = 33; glyph < Math.min(widths.length, 127); glyph += 1) {
146
- if ((widths[glyph] ?? 0) !== first)
147
- return false;
148
- }
149
- return first > 0;
150
- }
151
- get numGlyphs() {
152
- const at = this.require('maxp').offset;
153
- return this.u16(at + 4);
154
- }
155
- postScriptName(fallback) {
156
- const record = this.tables.get('name');
157
- if (record === undefined)
158
- return fallback;
159
- const count = this.u16(record.offset + 2);
160
- const storage = record.offset + this.u16(record.offset + 4);
161
- let mac;
162
- for (let index = 0; index < count; index += 1) {
163
- const at = record.offset + 6 + index * 12;
164
- if (at + 12 > this.bytes.byteLength)
165
- break;
166
- const platform = this.u16(at);
167
- const nameId = this.u16(at + 6);
168
- if (nameId !== 6)
169
- continue;
170
- const length = this.u16(at + 8);
171
- const offset = this.u16(at + 10);
172
- const text = this.decodeName(storage + offset, length, platform);
173
- if (platform === 3 && text !== '')
174
- return sanitizeName(text);
175
- if (mac === undefined && text !== '')
176
- mac = sanitizeName(text);
177
- }
178
- return mac ?? fallback;
179
- }
180
- decodeName(at, length, platform) {
181
- if (at + length > this.bytes.byteLength)
182
- return '';
183
- let out = '';
184
- if (platform === 3 || platform === 0) {
185
- for (let index = 0; index + 1 < length; index += 2)
186
- out += String.fromCharCode(this.u16(at + index));
187
- return out;
188
- }
189
- for (let index = 0; index < length; index += 1)
190
- out += String.fromCharCode(this.u8(at + index));
191
- return out;
192
- }
193
- hasGlyf() {
194
- return this.tables.has('glyf') && this.tables.has('loca');
195
- }
196
- locaOffset(glyph) {
197
- const record = this.require('loca');
198
- const format = this.head.indexToLocFormat;
199
- const numGlyphs = this.numGlyphs;
200
- const index = Math.min(Math.max(glyph, 0), numGlyphs);
201
- if (format === 0)
202
- return this.u16(record.offset + index * 2) * 2;
203
- return this.u32(record.offset + index * 4);
204
- }
205
- glyphRange(glyph) {
206
- if (!this.hasGlyf())
207
- return undefined;
208
- const record = this.require('glyf');
209
- const start = record.offset + this.locaOffset(glyph);
210
- const end = record.offset + this.locaOffset(glyph + 1);
211
- if (end <= start)
212
- return undefined;
213
- return { start, end: Math.min(end, this.bytes.byteLength) };
214
- }
215
- glyphByteLength(glyph) {
216
- const range = this.glyphRange(glyph);
217
- return range === undefined ? 0 : range.end - range.start;
218
- }
219
- static ARG_1_AND_2_ARE_WORDS = 0x0001;
220
- static WE_HAVE_A_SCALE = 0x0008;
221
- static MORE_COMPONENTS = 0x0020;
222
- static WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;
223
- static WE_HAVE_A_TWO_BY_TWO = 0x0080;
224
- compositeGlyphs(glyph) {
225
- const range = this.glyphRange(glyph);
226
- if (range === undefined)
227
- return [];
228
- if (this.i16(range.start) >= 0)
229
- return [];
230
- const out = [];
231
- let at = range.start + 10;
232
- for (;;) {
233
- if (at + 4 > range.end)
234
- break;
235
- const flags = this.u16(at);
236
- const component = this.u16(at + 2);
237
- out.push(component);
238
- at += 4;
239
- at += (flags & Sfnt.ARG_1_AND_2_ARE_WORDS) !== 0 ? 4 : 2;
240
- if ((flags & Sfnt.WE_HAVE_A_SCALE) !== 0)
241
- at += 2;
242
- else if ((flags & Sfnt.WE_HAVE_AN_X_AND_Y_SCALE) !== 0)
243
- at += 4;
244
- else if ((flags & Sfnt.WE_HAVE_A_TWO_BY_TWO) !== 0)
245
- at += 8;
246
- if ((flags & Sfnt.MORE_COMPONENTS) === 0)
247
- break;
248
- }
249
- return out;
250
- }
251
- advanceWidths() {
252
- const record = this.require('hmtx');
253
- const numberOfHMetrics = this.hhea.numberOfHMetrics;
254
- const numGlyphs = this.numGlyphs;
255
- const out = [];
256
- let last = 0;
257
- for (let glyph = 0; glyph < numGlyphs; glyph += 1) {
258
- if (glyph < numberOfHMetrics) {
259
- last = this.u16(record.offset + glyph * 4);
260
- }
261
- out.push(last);
262
- }
263
- return out;
264
- }
265
- cmapFormat(offset) {
266
- return this.u16(this.require('cmap').offset + offset);
267
- }
268
- bestCmap() {
269
- const record = this.require('cmap');
270
- const count = this.u16(record.offset + 2);
271
- let best;
272
- let bestScore = -1;
273
- for (let index = 0; index < count; index += 1) {
274
- const platform = this.u16(record.offset + 4 + index * 8);
275
- const encoding = this.u16(record.offset + 6 + index * 8);
276
- const offset = this.u32(record.offset + 8 + index * 8);
277
- const format = this.cmapFormat(offset);
278
- if (format !== 0 && format !== 4 && format !== 6 && format !== 12)
279
- continue;
280
- const unicode = platform === 3 && (encoding === 1 || encoding === 10);
281
- const score = (unicode ? 100 : 0) + (format === 12 ? 10 : 0) + (platform === 0 ? 5 : 0);
282
- if (score > bestScore) {
283
- bestScore = score;
284
- best = offset;
285
- }
286
- }
287
- return best;
288
- }
289
- glyphFor(codePoint) {
290
- const offset = this.bestCmap();
291
- if (offset === undefined)
292
- return 0;
293
- const format = this.cmapFormat(offset);
294
- if (format === 4)
295
- return this.glyphFromFormat4(offset, codePoint);
296
- if (format === 12)
297
- return this.glyphFromFormat12(offset, codePoint);
298
- if (format === 6)
299
- return this.glyphFromFormat6(offset, codePoint);
300
- if (format === 0) {
301
- if (codePoint > 0xff)
302
- return 0;
303
- return this.u8(this.require('cmap').offset + offset + 6 + codePoint);
304
- }
305
- return 0;
306
- }
307
- glyphFromFormat6(offset, codePoint) {
308
- const at = this.require('cmap').offset + offset;
309
- const first = this.u16(at + 6);
310
- const count = this.u16(at + 8);
311
- if (codePoint < first || codePoint >= first + count)
312
- return 0;
313
- return this.u16(at + 10 + (codePoint - first) * 2);
314
- }
315
- glyphFromFormat4(offset, codePoint) {
316
- if (codePoint > 0xffff)
317
- return 0;
318
- const base = this.require('cmap').offset + offset;
319
- const segCount = this.u16(base + 6) / 2;
320
- const endAt = base + 14;
321
- const startAt = endAt + segCount * 2 + 2;
322
- const deltaAt = startAt + segCount * 2;
323
- const rangeAt = deltaAt + segCount * 2;
324
- for (let segment = 0; segment < segCount; segment += 1) {
325
- const end = this.u16(endAt + segment * 2);
326
- if (end < codePoint)
327
- continue;
328
- const start = this.u16(startAt + segment * 2);
329
- if (start > codePoint)
330
- return 0;
331
- const delta = this.i16(deltaAt + segment * 2);
332
- const rangeOffset = this.u16(rangeAt + segment * 2);
333
- if (rangeOffset === 0)
334
- return (codePoint + delta) & 0xffff;
335
- const at = rangeAt + segment * 2 + rangeOffset + (codePoint - start) * 2;
336
- const glyph = this.u16(at);
337
- if (glyph === 0)
338
- return 0;
339
- return (glyph + delta) & 0xffff;
340
- }
341
- return 0;
342
- }
343
- glyphFromFormat12(offset, codePoint) {
344
- const base = this.require('cmap').offset + offset;
345
- const groups = this.u32(base + 12);
346
- let low = 0;
347
- let high = groups - 1;
348
- while (low <= high) {
349
- const middle = (low + high) >> 1;
350
- const at = base + 16 + middle * 12;
351
- const start = this.u32(at);
352
- const end = this.u32(at + 4);
353
- if (codePoint < start)
354
- high = middle - 1;
355
- else if (codePoint > end)
356
- low = middle + 1;
357
- else
358
- return this.u32(at + 8) + (codePoint - start);
359
- }
360
- return 0;
361
- }
362
- }
363
- //# sourceMappingURL=sfnt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sfnt.js","sourceRoot":"","sources":["../../../src/pdf/fonts/sfnt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAmCxC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAiB,EAAE,EAAU,EAAU,EAAE;IAChE,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC;QAAE,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9F,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAC7C,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAEtD,MAAM,UAAU,GAAG,CAAC,MAAc,EAAY,EAAE,CAC9C,IAAI,QAAQ,CAAC,sCAAsC,MAAM,EAAE,EAAE;IAC3D,IAAI,EAAE,qBAAqB;IAC3B,MAAM;CACP,CAAC,CAAC;AAEL,MAAM,OAAO,IAAI;IACE,IAAI,CAAW;IACf,MAAM,CAA2B;IACzC,KAAK,CAAa;IAClB,KAAK,CAAU;IAExB,YAAY,KAAiB;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC7C,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE;YAAE,MAAM,UAAU,CAAC,yCAAyC,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,OAAO,KAAK,UAAU,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YACpE,MAAM,UAAU,CAAC,8BAA8B,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU;YAAE,MAAM,UAAU,CAAC,wCAAwC,CAAC,CAAC;QACnG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,UAAU;gBAAE,MAAM,UAAU,CAAC,UAAU,GAAG,sBAAsB,CAAC,CAAC;YAC9F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,GAAW;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,UAAU,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,GAAW;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAEO,EAAE,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAEO,GAAG,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAEO,GAAG,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAEO,GAAG,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAEO,GAAG,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,IAAI;QACN,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QACvC,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YAC7B,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACnC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACvB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACvB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACvB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACvB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;SAC5B,CAAC;IACJ,CAAC;IAED,IAAI,IAAI;QACN,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QACvC,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3B,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YACzB,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;SACpC,CAAC;IACJ,CAAC;IAED,IAAI,GAAG;QACL,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO;YACL,OAAO;YACP,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YACxB,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC7B,YAAY;YACZ,aAAa;YACb,WAAW;YACX,SAAS;SACV,CAAC;IACJ,CAAC;IAED,IAAI,WAAW;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAC7C,CAAC;IAED,IAAI,SAAS;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC/C,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;QAC9H,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAC/C,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACrC,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;SAC1F,CAAC;IACJ,CAAC;IAED,IAAI,SAAS;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,SAAS,CAAC;QACjE,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;YACtC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,YAAY;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3D,KAAK,IAAI,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK;gBAAE,OAAO,KAAK,CAAC;QACnD,CAAC;QACD,OAAO,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,SAAS;QACX,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5D,IAAI,GAAuB,CAAC;QAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC1C,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;gBAAE,MAAM;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAChC,IAAI,MAAM,KAAK,CAAC;gBAAE,SAAS;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YACjE,IAAI,QAAQ,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE;gBAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;YAC7D,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE;gBAAE,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,GAAG,IAAI,QAAQ,CAAC;IACzB,CAAC;IAEO,UAAU,CAAC,EAAU,EAAE,MAAc,EAAE,QAAgB;QAC7D,IAAI,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QACnD,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACrC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;gBAAE,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YACrG,OAAO,GAAG,CAAC;QACb,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;YAAE,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;QAChG,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAAE,OAAO,SAAS,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,GAAG,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;IAC9D,CAAC;IAED,eAAe,CAAC,KAAa;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3D,CAAC;IAEO,MAAM,CAAU,qBAAqB,GAAG,MAAM,CAAC;IAC/C,MAAM,CAAU,eAAe,GAAG,MAAM,CAAC;IACzC,MAAM,CAAU,eAAe,GAAG,MAAM,CAAC;IACzC,MAAM,CAAU,wBAAwB,GAAG,MAAM,CAAC;IAClD,MAAM,CAAU,oBAAoB,GAAG,MAAM,CAAC;IAEtD,eAAe,CAAC,KAAa;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QAC1B,SAAS,CAAC;YACR,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG;gBAAE,MAAM;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpB,EAAE,IAAI,CAAC,CAAC;YACR,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;gBAAE,EAAE,IAAI,CAAC,CAAC;iBAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;gBAAE,EAAE,IAAI,CAAC,CAAC;iBAC3D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;gBAAE,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;gBAAE,MAAM;QAClD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,aAAa;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,GAAG,gBAAgB,EAAE,CAAC;gBAC7B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,UAAU,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACxD,CAAC;IAEO,QAAQ;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,IAAI,IAAwB,CAAC;QAC7B,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,EAAE;gBAAE,SAAS;YAC5E,MAAM,OAAO,GAAG,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,EAAE,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,SAAiB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAClE,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACpE,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAClE,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,IAAI,SAAS,GAAG,IAAI;gBAAE,OAAO,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,gBAAgB,CAAC,MAAc,EAAE,SAAiB;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,IAAI,KAAK,GAAG,KAAK;YAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAEO,gBAAgB,CAAC,MAAc,EAAE,SAAiB;QACxD,IAAI,SAAS,GAAG,MAAM;YAAE,OAAO,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC;QACvC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,GAAG,GAAG,SAAS;gBAAE,SAAS;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;YAC9C,IAAI,KAAK,GAAG,SAAS;gBAAE,OAAO,CAAC,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;YAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;YACpD,IAAI,WAAW,KAAK,CAAC;gBAAE,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC;YAC3D,MAAM,EAAE,GAAG,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACzE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAC1B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,iBAAiB,CAAC,MAAc,EAAE,SAAiB;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;QACtB,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7B,IAAI,SAAS,GAAG,KAAK;gBAAE,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;iBACpC,IAAI,SAAS,GAAG,GAAG;gBAAE,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;;gBACtC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC"}