@tabnas/parser 0.2.0 → 0.3.0

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.
package/dist/merge.js ADDED
@@ -0,0 +1,482 @@
1
+ "use strict";
2
+ /* Copyright (c) 2013-2026 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.mergeInstances = mergeInstances;
5
+ const defaults_1 = require("./defaults");
6
+ // Plain-object check for the options walk. Option trees are built by
7
+ // deep() from literals (and occasionally Object.create(null)), so both
8
+ // Object-constructed and null-prototype objects count.
9
+ function isplain(v) {
10
+ if (null == v || 'object' !== typeof v || Array.isArray(v)) {
11
+ return false;
12
+ }
13
+ const proto = Object.getPrototypeOf(v);
14
+ return null === proto || proto === Object.prototype;
15
+ }
16
+ // Leaf equality for option values: functions by reference, RegExp by
17
+ // source+flags, arrays element-wise, plain objects key-wise (for
18
+ // object-valued array elements), everything else by Object.is (so NaN
19
+ // equals NaN, matching values like result.fail entries).
20
+ function leafeq(u, v) {
21
+ if (Object.is(u, v)) {
22
+ return true;
23
+ }
24
+ if (u instanceof RegExp && v instanceof RegExp) {
25
+ return u.source === v.source && u.flags === v.flags;
26
+ }
27
+ if (Array.isArray(u) && Array.isArray(v)) {
28
+ return u.length === v.length && u.every((e, i) => leafeq(e, v[i]));
29
+ }
30
+ if (isplain(u) && isplain(v)) {
31
+ const uk = Object.keys(u);
32
+ const vk = Object.keys(v);
33
+ return (uk.length === vk.length && uk.every((k) => leafeq(u[k], v[k])));
34
+ }
35
+ return false;
36
+ }
37
+ // Commutative option merge: values present in only one tree, or equal
38
+ // in both, merge cleanly; where the trees disagree, the side that
39
+ // still equals the shared default loses; both sides non-default and
40
+ // unequal is a genuine grammar conflict and throws naming the path.
41
+ function mergeOptionTrees(av, bv, dv, path) {
42
+ if (undefined === av) {
43
+ return bv;
44
+ }
45
+ if (undefined === bv) {
46
+ return av;
47
+ }
48
+ if (isplain(av) && isplain(bv)) {
49
+ const out = {};
50
+ const bkeys = Object.keys(bv);
51
+ const union = [
52
+ ...Object.keys(av),
53
+ ...bkeys.filter((k) => !(k in av)),
54
+ ];
55
+ for (const k of union) {
56
+ const merged = mergeOptionTrees(av[k], bv[k], isplain(dv) ? dv[k] : undefined, [...path, k]);
57
+ if (undefined !== merged) {
58
+ out[k] = merged;
59
+ }
60
+ }
61
+ return out;
62
+ }
63
+ if (leafeq(av, bv)) {
64
+ return av;
65
+ }
66
+ if (leafeq(av, dv)) {
67
+ return bv;
68
+ }
69
+ if (leafeq(bv, dv)) {
70
+ return av;
71
+ }
72
+ throw new Error('merge: conflicting option values at ' + path.join('.'));
73
+ }
74
+ // Two fixed-token names claiming one source string would make
75
+ // configure() silently drop one of them — refuse instead.
76
+ function checkFixedTokenSources(options) {
77
+ const token = options.fixed?.token;
78
+ if (null == token) {
79
+ return;
80
+ }
81
+ const bysrc = {};
82
+ for (const name of Object.keys(token)) {
83
+ const src = token[name];
84
+ if (null != bysrc[src] && bysrc[src] !== name) {
85
+ throw new Error('merge: fixed tokens ' + bysrc[src] + ' and ' + name +
86
+ ' both claim source ' + JSON.stringify(src));
87
+ }
88
+ bysrc[src] = name;
89
+ }
90
+ }
91
+ // De-share match.token matcher objects. configure() annotates each
92
+ // matcher (RegExp or function) in place with the instance's `tin$`
93
+ // (utility.ts) — a matcher object shared between the merged options
94
+ // and a source instance would have its annotation overwritten when
95
+ // the merged instance configures, silently corrupting the source's
96
+ // lexer. RegExps are cloned (keeping the user-set `eager$` opt-out);
97
+ // function-form matchers get a delegating wrapper.
98
+ function deshareMatchTokens(options) {
99
+ const token = options.match?.token;
100
+ if (null == token) {
101
+ return;
102
+ }
103
+ const fresh = {};
104
+ for (const name of Object.keys(token)) {
105
+ const m = token[name];
106
+ if (m instanceof RegExp) {
107
+ const re = new RegExp(m.source, m.flags);
108
+ if (m.eager$) {
109
+ re.eager$ = true;
110
+ }
111
+ fresh[name] = re;
112
+ }
113
+ else if ('function' === typeof m) {
114
+ const wrapped = (lex, rule, tI) => m(lex, rule, tI);
115
+ if (m.eager$) {
116
+ wrapped.eager$ = true;
117
+ }
118
+ fresh[name] = wrapped;
119
+ }
120
+ else {
121
+ fresh[name] = m;
122
+ }
123
+ }
124
+ options.match.token = fresh;
125
+ }
126
+ // Rebuild the lex matcher registry with keys inserted in (order, name)
127
+ // order. configure() sorts matchers by `order` with a stable sort, so
128
+ // insertion order decides ties — this makes the merged matcher
129
+ // sequence deterministic regardless of merge direction.
130
+ function orderLexMatch(options) {
131
+ const match = options.lex?.match;
132
+ if (null == match) {
133
+ return;
134
+ }
135
+ const names = Object.keys(match).sort((a, b) => {
136
+ const oa = match[a]?.order ?? 0;
137
+ const ob = match[b]?.order ?? 0;
138
+ return oa !== ob ? oa - ob : a < b ? -1 : a > b ? 1 : 0;
139
+ });
140
+ const ordered = {};
141
+ for (const name of names) {
142
+ ordered[name] = match[name];
143
+ }
144
+ options.lex.match = ordered;
145
+ }
146
+ // Translate one `s` entry from the source Tin space to token names.
147
+ // String entries (token or tokenset names) pass through; the merged
148
+ // instance re-resolves them at normalization time.
149
+ function untin(entry, cfg) {
150
+ const name = (tin) => {
151
+ const n = cfg.t[tin];
152
+ if (null == n) {
153
+ throw new Error('merge: unknown token tin: ' + tin);
154
+ }
155
+ return n;
156
+ };
157
+ if ('number' === typeof entry) {
158
+ return name(entry);
159
+ }
160
+ if (Array.isArray(entry)) {
161
+ return entry.map((e) => ('number' === typeof e ? name(e) : e));
162
+ }
163
+ return entry;
164
+ }
165
+ // Presence vector deciding "complexity" order between alts whose
166
+ // token sequences are identical: more complex first, compared
167
+ // element-wise in this fixed field order.
168
+ function altComplexity(alt) {
169
+ return [
170
+ alt.c ? 1 : 0,
171
+ alt.e ? 1 : 0,
172
+ alt.h ? 1 : 0,
173
+ alt.b ? 1 : 0,
174
+ alt.n ? Object.keys(alt.n).length : 0,
175
+ alt.a ? 1 : 0,
176
+ alt.u ? 1 : 0,
177
+ alt.k ? 1 : 0,
178
+ alt.p ? 1 : 0,
179
+ alt.r ? 1 : 0,
180
+ ];
181
+ }
182
+ // Build the portable form of a normalized alt. The canonical
183
+ // per-position key is the sorted, space-joined token-name expansion of
184
+ // that position (uniform over single tokens, tokensets, and Tin-array
185
+ // subsets), computed from the source-resolved alt.t tables.
186
+ function portable(alt, cfg, tag) {
187
+ const t = alt.t || [];
188
+ const keys = t.map((tins) => tins
189
+ .map((tin) => cfg.t[tin])
190
+ .sort()
191
+ .join(' '));
192
+ const clone = { ...alt };
193
+ delete clone.t;
194
+ delete clone.S;
195
+ delete clone.sN;
196
+ clone.s =
197
+ alt.s && alt.s.length
198
+ ? alt.s.map((entry) => untin(entry, cfg))
199
+ : null;
200
+ clone.g = [...(alt.g || [])];
201
+ if (alt.n) {
202
+ clone.n = { ...alt.n };
203
+ }
204
+ if (alt.u) {
205
+ clone.u = { ...alt.u };
206
+ }
207
+ if (alt.k) {
208
+ clone.k = { ...alt.k };
209
+ }
210
+ return {
211
+ alt: clone,
212
+ keys,
213
+ complexity: altComplexity(alt),
214
+ gkey: (alt.g || []).join(','),
215
+ tag,
216
+ };
217
+ }
218
+ // The interleave comparator (<0 means a first):
219
+ // 1. first differing position: lexicographic token-name order;
220
+ // 2. one sequence a prefix of the other: longer first (so empty-s
221
+ // catch-all alts sort last);
222
+ // 3. identical sequences: more complex first, then group tags;
223
+ // 4. finally the source tag — never equal across the two parsers, so
224
+ // the order is total and independent of merge direction.
225
+ function compareAlts(a, b) {
226
+ const n = Math.min(a.keys.length, b.keys.length);
227
+ for (let i = 0; i < n; i++) {
228
+ if (a.keys[i] !== b.keys[i]) {
229
+ return a.keys[i] < b.keys[i] ? -1 : 1;
230
+ }
231
+ }
232
+ if (a.keys.length !== b.keys.length) {
233
+ return b.keys.length - a.keys.length;
234
+ }
235
+ for (let i = 0; i < a.complexity.length; i++) {
236
+ const d = b.complexity[i] - a.complexity[i];
237
+ if (0 !== d) {
238
+ return d;
239
+ }
240
+ }
241
+ if (a.gkey !== b.gkey) {
242
+ return a.gkey < b.gkey ? -1 : 1;
243
+ }
244
+ return a.tag < b.tag ? -1 : a.tag > b.tag ? 1 : 0;
245
+ }
246
+ // Function-field equality for dedupe: reference identity, or — since
247
+ // every plugin run creates fresh closures, so two instances that
248
+ // installed the same plugin never share references — identical source
249
+ // text. Source equality is blind to captured environments, which is
250
+ // why the callers below restrict it to cases where that cannot change
251
+ // parse behavior.
252
+ function fneq(u, v) {
253
+ if (u === v) {
254
+ return true;
255
+ }
256
+ return ('function' === typeof u &&
257
+ 'function' === typeof v &&
258
+ u.toString() === v.toString());
259
+ }
260
+ // Identical alts (same token keys and group tags, same behavior
261
+ // fields, same data props by value) are emitted once — the
262
+ // shared-base-plugin case, where both instances installed the same
263
+ // grammar plugin. Fields compare by reference or by function source;
264
+ // for the source path the alts must be unconditioned (or share one
265
+ // condition reference): with no condition the first of two
266
+ // identical-sequence alts always wins the match and the second is
267
+ // unreachable, so the dedupe cannot change behavior even if the
268
+ // source-equal closures captured different environments.
269
+ function identicalAlts(a, b) {
270
+ if (a.keys.length !== b.keys.length ||
271
+ !a.keys.every((k, i) => k === b.keys[i]) ||
272
+ a.gkey !== b.gkey) {
273
+ return false;
274
+ }
275
+ if (a.alt.c !== b.alt.c && (a.alt.c || b.alt.c)) {
276
+ return false;
277
+ }
278
+ return (fneq(a.alt.a, b.alt.a) &&
279
+ fneq(a.alt.h, b.alt.h) &&
280
+ fneq(a.alt.e, b.alt.e) &&
281
+ (a.alt.b === b.alt.b || fneq(a.alt.b, b.alt.b)) &&
282
+ (a.alt.p === b.alt.p || fneq(a.alt.p, b.alt.p)) &&
283
+ (a.alt.r === b.alt.r || fneq(a.alt.r, b.alt.r)) &&
284
+ leafeq(a.alt.n, b.alt.n) &&
285
+ leafeq(a.alt.u, b.alt.u) &&
286
+ leafeq(a.alt.k, b.alt.k));
287
+ }
288
+ // Standard two-pointer merge: each source list stays internally
289
+ // stable (original alt order is preserved relative to itself), the
290
+ // comparator only decides interleaving across the two lists. Dedupe
291
+ // runs first, position-independently: an alt of y identical to ANY
292
+ // alt of x is dropped (x is the canonical smaller-tag side, so the
293
+ // outcome is direction-independent) — head-only comparison would miss
294
+ // shared-base alts shifted by each side's own additions.
295
+ function interleave(xs, ys) {
296
+ const yy = ys.filter((y) => !xs.some((x) => identicalAlts(x, y)));
297
+ const out = [];
298
+ let i = 0;
299
+ let j = 0;
300
+ while (i < xs.length && j < yy.length) {
301
+ if (compareAlts(xs[i], yy[j]) <= 0) {
302
+ out.push(xs[i++]);
303
+ }
304
+ else {
305
+ out.push(yy[j++]);
306
+ }
307
+ }
308
+ while (i < xs.length) {
309
+ out.push(xs[i++]);
310
+ }
311
+ while (j < yy.length) {
312
+ out.push(yy[j++]);
313
+ }
314
+ return out;
315
+ }
316
+ // Extract the portable rule records of one instance. fnref keys are
317
+ // renamed '@x' -> '@<tag>:x' so the two parsers' named actions cannot
318
+ // collide; the '<tag>:' infix can never match the reserved
319
+ // '@<rulename>-<phase>' lifecycle pattern, so renamed entries never
320
+ // auto-install (the already-installed bo/ao/bc/ac arrays are carried
321
+ // verbatim instead). '$'-refs are engine builtins — identical
322
+ // references on both sides — and stay unprefixed.
323
+ function ruleRecords(tn, tag) {
324
+ const internal = tn.internal();
325
+ const cfg = internal.config;
326
+ const rsm = internal.parser.rule();
327
+ const records = {};
328
+ for (const name of Object.keys(rsm)) {
329
+ const def = rsm[name].def;
330
+ const fnref = {};
331
+ for (const key of Object.keys(def.fnref)) {
332
+ if (key.includes('$')) {
333
+ fnref[key] = def.fnref[key];
334
+ }
335
+ else {
336
+ fnref['@' + tag + ':' + key.substring(1)] = def.fnref[key];
337
+ }
338
+ }
339
+ records[name] = {
340
+ fnref,
341
+ bo: [...def.bo],
342
+ ao: [...def.ao],
343
+ bc: [...def.bc],
344
+ ac: [...def.ac],
345
+ open: def.open.map((alt) => portable(alt, cfg, tag)),
346
+ close: def.close.map((alt) => portable(alt, cfg, tag)),
347
+ };
348
+ }
349
+ return records;
350
+ }
351
+ // Concatenate lifecycle actions in canonical (tag) order, deduping by
352
+ // function identity or source text so a handler contributed by a
353
+ // plugin both instances installed (fresh closures per plugin run, same
354
+ // source) installs once — otherwise e.g. a shared base grammar's
355
+ // element handler would append every element twice. Source equality
356
+ // cannot see captured environments; a handler whose behavior differs
357
+ // only via its closure environment dedupes to the smaller-tag side's
358
+ // copy (documented).
359
+ function concatActions(xs, ys) {
360
+ const out = [...xs];
361
+ for (const fn of ys) {
362
+ if (!out.some((existing) => fneq(existing, fn))) {
363
+ out.push(fn);
364
+ }
365
+ }
366
+ return out;
367
+ }
368
+ // Fresh alt clone per plugin invocation: normalt mutates alts in
369
+ // place (match tables, sorted g), and the synthetic plugin re-runs on
370
+ // make()-derived children, which must not share alt objects.
371
+ function cloneAlt(alt) {
372
+ const out = { ...alt };
373
+ out.s = Array.isArray(alt.s) ? [...alt.s] : alt.s;
374
+ out.g = [...(alt.g || [])];
375
+ if (alt.n) {
376
+ out.n = { ...alt.n };
377
+ }
378
+ if (alt.u) {
379
+ out.u = { ...alt.u };
380
+ }
381
+ if (alt.k) {
382
+ out.k = { ...alt.k };
383
+ }
384
+ return out;
385
+ }
386
+ // Merge two instances into a new one. `makeInstance` is injected by
387
+ // tabnas.ts (avoids an import cycle) and builds a fresh instance from
388
+ // the merged options — deliberately not make() from either side, so
389
+ // the result cannot depend on argument order.
390
+ function mergeInstances(a, b, makeInstance) {
391
+ const tagOf = (tn, which) => {
392
+ const tag = tn.internal().merged.tag;
393
+ if (null == tag || '' === tag || '-' === tag) {
394
+ throw new Error('merge: the ' + which + ' instance needs a tag option ' +
395
+ '(used to prefix its named actions)');
396
+ }
397
+ return String(tag);
398
+ };
399
+ const tagA = tagOf(a, 'first');
400
+ const tagB = tagOf(b, 'second');
401
+ if (tagA === tagB) {
402
+ throw new Error('merge: instance tags must differ, both are ' +
403
+ JSON.stringify(tagA));
404
+ }
405
+ // Canonical order by tag: everything below is independent of which
406
+ // instance was the merge receiver.
407
+ const [x, y] = tagA < tagB ? [a, b] : [b, a];
408
+ const [tagX, tagY] = tagA < tagB ? [tagA, tagB] : [tagB, tagA];
409
+ // `tag` is computed for the result and `plugins` is handled by the
410
+ // synthetic plugin below — neither takes part in the conflict walk.
411
+ const strip = (tree) => {
412
+ const { tag, plugins, ...rest } = tree;
413
+ return rest;
414
+ };
415
+ const mergedOptions = mergeOptionTrees(strip(x.internal().merged), strip(y.internal().merged), defaults_1.defaults, []);
416
+ mergedOptions.tag = tagX + '~' + tagY;
417
+ checkFixedTokenSources(mergedOptions);
418
+ deshareMatchTokens(mergedOptions);
419
+ orderLexMatch(mergedOptions);
420
+ const xRecords = ruleRecords(x, tagX);
421
+ const yRecords = ruleRecords(y, tagY);
422
+ const ruleNames = [
423
+ ...Object.keys(xRecords),
424
+ ...Object.keys(yRecords).filter((n) => !(n in xRecords)),
425
+ ].sort();
426
+ const empty = {
427
+ fnref: {}, bo: [], ao: [], bc: [], ac: [], open: [], close: [],
428
+ };
429
+ const records = {};
430
+ for (const name of ruleNames) {
431
+ const xr = xRecords[name] || empty;
432
+ const yr = yRecords[name] || empty;
433
+ records[name] = {
434
+ fnref: { ...xr.fnref, ...yr.fnref },
435
+ bo: concatActions(xr.bo, yr.bo),
436
+ ao: concatActions(xr.ao, yr.ao),
437
+ bc: concatActions(xr.bc, yr.bc),
438
+ ac: concatActions(xr.ac, yr.ac),
439
+ open: interleave(xr.open, yr.open),
440
+ close: interleave(xr.close, yr.close),
441
+ };
442
+ }
443
+ // Synthetic plugin carrying the merged grammar. Installing rules
444
+ // via a plugin (rather than directly) keeps make() derivation
445
+ // working: children rebuild their rules by re-running plugins.
446
+ // fnref entries are assigned directly (not via rs.fnref()) so the
447
+ // renamed keys never trigger lifecycle auto-install; the lifecycle
448
+ // arrays carry the already-installed handlers.
449
+ const mergedGrammar = function (tn) {
450
+ for (const name of ruleNames) {
451
+ const rec = records[name];
452
+ tn.rule(name, (rs) => {
453
+ Object.assign(rs.def.fnref, rec.fnref);
454
+ rs.def.bo.push(...rec.bo);
455
+ rs.def.ao.push(...rec.ao);
456
+ rs.def.bc.push(...rec.bc);
457
+ rs.def.ac.push(...rec.ac);
458
+ if (0 < rec.open.length) {
459
+ rs.open(rec.open.map((p) => cloneAlt(p.alt)), { append: true });
460
+ }
461
+ if (0 < rec.close.length) {
462
+ rs.close(rec.close.map((p) => cloneAlt(p.alt)), { append: true });
463
+ }
464
+ });
465
+ }
466
+ };
467
+ Object.defineProperty(mergedGrammar, 'name', { value: 'merged' });
468
+ const out = makeInstance(mergedOptions);
469
+ out.use(mergedGrammar);
470
+ // Event subscribers carry over too, in canonical order.
471
+ const sub = out.internal().sub;
472
+ const xSub = x.internal().sub;
473
+ const ySub = y.internal().sub;
474
+ for (const kind of ['lex', 'rule']) {
475
+ const combined = [...(xSub[kind] || []), ...(ySub[kind] || [])];
476
+ if (0 < combined.length) {
477
+ sub[kind] = [...(sub[kind] || []), ...combined];
478
+ }
479
+ }
480
+ return out;
481
+ }
482
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":";AAAA,yDAAyD;;AAqmBhD,wCAAc;AAnlBvB,yCAAqC;AA4BrC,qEAAqE;AACrE,uEAAuE;AACvE,uDAAuD;AACvD,SAAS,OAAO,CAAC,CAAM;IACrB,IAAI,IAAI,IAAI,CAAC,IAAI,QAAQ,KAAK,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;IACtC,OAAO,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,CAAA;AACrD,CAAC;AAGD,qEAAqE;AACrE,iEAAiE;AACjE,sEAAsE;AACtE,yDAAyD;AACzD,SAAS,MAAM,CAAC,CAAM,EAAE,CAAM;IAC5B,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC,YAAY,MAAM,IAAI,CAAC,YAAY,MAAM,EAAE,CAAC;QAC/C,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAA;IACrD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACzB,OAAO,CACL,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/D,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAGD,sEAAsE;AACtE,kEAAkE;AAClE,oEAAoE;AACpE,oEAAoE;AACpE,SAAS,gBAAgB,CACvB,EAAO,EACP,EAAO,EACP,EAAO,EACP,IAAc;IAEd,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAwB,EAAE,CAAA;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC7B,MAAM,KAAK,GAAG;YACZ,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SACnC,CAAA;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,gBAAgB,CAC7B,EAAE,CAAC,CAAC,CAAC,EACL,EAAE,CAAC,CAAC,CAAC,EACL,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAC/B,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CACb,CAAA;YACD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;YACjB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sCAAsC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CACxD,CAAA;AACH,CAAC;AAGD,8DAA8D;AAC9D,0DAA0D;AAC1D,SAAS,sBAAsB,CAAC,OAA4B;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAA;IAClC,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QAClB,OAAM;IACR,CAAC;IACD,MAAM,KAAK,GAA2B,EAAE,CAAA;IACxC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,sBAAsB,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI;gBACpD,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAC5C,CAAA;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;IACnB,CAAC;AACH,CAAC;AAGD,mEAAmE;AACnE,mEAAmE;AACnE,oEAAoE;AACpE,mEAAmE;AACnE,mEAAmE;AACnE,qEAAqE;AACrE,mDAAmD;AACnD,SAAS,kBAAkB,CAAC,OAA4B;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAA;IAClC,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QAClB,OAAM;IACR,CAAC;IACD,MAAM,KAAK,GAAwB,EAAE,CAAA;IACrC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;QACrB,IAAI,CAAC,YAAY,MAAM,EAAE,CAAC;YACxB,MAAM,EAAE,GAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;YAC7C,IAAK,CAAS,CAAC,MAAM,EAAE,CAAC;gBACtB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAA;YAClB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QAClB,CAAC;aAAM,IAAI,UAAU,KAAK,OAAO,CAAC,EAAE,CAAC;YACnC,MAAM,OAAO,GAAQ,CAAC,GAAQ,EAAE,IAAS,EAAE,EAAW,EAAE,EAAE,CACxD,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;YAClB,IAAK,CAAS,CAAC,MAAM,EAAE,CAAC;gBACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAA;YACvB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAA;AAC7B,CAAC;AAGD,uEAAuE;AACvE,sEAAsE;AACtE,+DAA+D;AAC/D,wDAAwD;AACxD,SAAS,aAAa,CAAC,OAA4B;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAA;IAChC,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QAClB,OAAM;IACR,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAA;QAC/B,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAA;QAC/B,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IACF,MAAM,OAAO,GAAwB,EAAE,CAAA;IACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAA;AAC7B,CAAC;AAGD,oEAAoE;AACpE,oEAAoE;AACpE,mDAAmD;AACnD,SAAS,KAAK,CAAC,KAAU,EAAE,GAAW;IACpC,MAAM,IAAI,GAAG,CAAC,GAAQ,EAAE,EAAE;QACxB,MAAM,CAAC,GAAI,GAAG,CAAC,CAAS,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAA;QACrD,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;IACD,IAAI,QAAQ,KAAK,OAAO,KAAK,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,KAAY,CAAC,CAAA;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACvE,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAGD,iEAAiE;AACjE,8DAA8D;AAC9D,0CAA0C;AAC1C,SAAS,aAAa,CAAC,GAAQ;IAC7B,OAAO;QACL,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACd,CAAA;AACH,CAAC;AAGD,6DAA6D;AAC7D,uEAAuE;AACvE,sEAAsE;AACtE,4DAA4D;AAC5D,SAAS,QAAQ,CAAC,GAAQ,EAAE,GAAW,EAAE,GAAW;IAClD,MAAM,CAAC,GAAY,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1B,IAAI;SACD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAE,GAAG,CAAC,CAAS,CAAC,GAAG,CAAC,CAAC;SACjC,IAAI,EAAE;SACN,IAAI,CAAC,GAAG,CAAC,CACb,CAAA;IAED,MAAM,KAAK,GAAwB,EAAE,GAAG,GAAG,EAAE,CAAA;IAC7C,OAAO,KAAK,CAAC,CAAC,CAAA;IACd,OAAO,KAAK,CAAC,CAAC,CAAA;IACd,OAAO,KAAK,CAAC,EAAE,CAAA;IAEf,KAAK,CAAC,CAAC;QACL,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;YACnB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAA;IACV,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC5B,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAA;IACxB,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAA;IACxB,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAA;IACxB,CAAC;IAED,OAAO;QACL,GAAG,EAAE,KAAK;QACV,IAAI;QACJ,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC;QAC9B,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,GAAG;KACJ,CAAA;AACH,CAAC;AAGD,gDAAgD;AAChD,+DAA+D;AAC/D,kEAAkE;AAClE,gCAAgC;AAChC,+DAA+D;AAC/D,qEAAqE;AACrE,4DAA4D;AAC5D,SAAS,WAAW,CAAC,CAAc,EAAE,CAAc;IACjD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;IACtC,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC3C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,CAAA;QACV,CAAC;IACH,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC;IACD,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnD,CAAC;AAGD,qEAAqE;AACrE,iEAAiE;AACjE,sEAAsE;AACtE,oEAAoE;AACpE,sEAAsE;AACtE,kBAAkB;AAClB,SAAS,IAAI,CAAC,CAAM,EAAE,CAAM;IAC1B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,CACL,UAAU,KAAK,OAAO,CAAC;QACvB,UAAU,KAAK,OAAO,CAAC;QACvB,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,CAC9B,CAAA;AACH,CAAC;AAGD,gEAAgE;AAChE,2DAA2D;AAC3D,mEAAmE;AACnE,qEAAqE;AACrE,mEAAmE;AACnE,2DAA2D;AAC3D,kEAAkE;AAClE,gEAAgE;AAChE,yDAAyD;AACzD,SAAS,aAAa,CAAC,CAAc,EAAE,CAAc;IACnD,IACE,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM;QAC/B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EACjB,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,CACL,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CACzB,CAAA;AACH,CAAC;AAGD,gEAAgE;AAChE,mEAAmE;AACnE,oEAAoE;AACpE,mEAAmE;AACnE,mEAAmE;AACnE,sEAAsE;AACtE,yDAAyD;AACzD,SAAS,UAAU,CACjB,EAAiB,EACjB,EAAiB;IAEjB,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACjE,MAAM,GAAG,GAAkB,EAAE,CAAA;IAC7B,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACnB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACnB,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACnB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAGD,oEAAoE;AACpE,sEAAsE;AACtE,2DAA2D;AAC3D,oEAAoE;AACpE,qEAAqE;AACrE,8DAA8D;AAC9D,kDAAkD;AAClD,SAAS,WAAW,CAClB,EAAU,EACV,GAAW;IAEX,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAA;IAC3B,MAAM,GAAG,GAAwB,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAS,CAAA;IAE9D,MAAM,OAAO,GAA+B,EAAE,CAAA;IAC9C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAA;QACzB,MAAM,KAAK,GAA6B,EAAE,CAAA;QAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC7B,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG;YACd,KAAK;YACL,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YACf,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YACf,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YACf,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7D,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;SAChE,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAGD,sEAAsE;AACtE,iEAAiE;AACjE,uEAAuE;AACvE,iEAAiE;AACjE,oEAAoE;AACpE,qEAAqE;AACrE,qEAAqE;AACrE,qBAAqB;AACrB,SAAS,aAAa,CAAC,EAAc,EAAE,EAAc;IACnD,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;IACnB,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAGD,iEAAiE;AACjE,sEAAsE;AACtE,6DAA6D;AAC7D,SAAS,QAAQ,CAAC,GAAwB;IACxC,MAAM,GAAG,GAAwB,EAAE,GAAG,GAAG,EAAE,CAAA;IAC3C,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACjD,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC1B,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAA;IACtB,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAA;IACtB,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAA;IACtB,CAAC;IACD,OAAO,GAAc,CAAA;AACvB,CAAC;AAGD,oEAAoE;AACpE,sEAAsE;AACtE,oEAAoE;AACpE,8CAA8C;AAC9C,SAAS,cAAc,CACrB,CAAS,EACT,CAAS,EACT,YAAgD;IAEhD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,KAAa,EAAU,EAAE;QAClD,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,GAAG,CAAA;QACpC,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,aAAa,GAAG,KAAK,GAAG,+BAA+B;gBACvD,oCAAoC,CACrC,CAAA;QACH,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC/B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,6CAA6C;YAC7C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CACrB,CAAA;IACH,CAAC;IAED,mEAAmE;IACnE,mCAAmC;IACnC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5C,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAE9D,mEAAmE;IACnE,oEAAoE;IACpE,MAAM,KAAK,GAAG,CAAC,IAAyB,EAAE,EAAE;QAC1C,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;QACtC,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IACD,MAAM,aAAa,GAAwB,gBAAgB,CACzD,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAC1B,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAC1B,mBAAQ,EACR,EAAE,CACH,CAAA;IACD,aAAa,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAA;IAErC,sBAAsB,CAAC,aAAa,CAAC,CAAA;IACrC,kBAAkB,CAAC,aAAa,CAAC,CAAA;IACjC,aAAa,CAAC,aAAa,CAAC,CAAA;IAE5B,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IACrC,MAAM,SAAS,GAAG;QAChB,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxB,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;KACzD,CAAC,IAAI,EAAE,CAAA;IAER,MAAM,KAAK,GAAe;QACxB,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;KAC/D,CAAA;IACD,MAAM,OAAO,GAA+B,EAAE,CAAA;IAC9C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAA;QAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAA;QAClC,OAAO,CAAC,IAAI,CAAC,GAAG;YACd,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;YACnC,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC/B,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC/B,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC/B,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC/B,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;YAClC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;SACtC,CAAA;IACH,CAAC;IAED,iEAAiE;IACjE,8DAA8D;IAC9D,+DAA+D;IAC/D,kEAAkE;IAClE,mEAAmE;IACnE,+CAA+C;IAC/C,MAAM,aAAa,GAAG,UAAU,EAAU;QACxC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;YACzB,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAO,EAAE,EAAE;gBACxB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;gBACtC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;gBACzB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;gBACzB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;gBACzB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;gBACzB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACxB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;gBACjE,CAAC;gBACD,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBACzB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;gBACnE,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAA;IACD,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;IAEjE,MAAM,GAAG,GAAG,YAAY,CAAC,aAA8B,CAAC,CAAA;IACxD,GAAG,CAAC,GAAG,CAAC,aAAoB,CAAC,CAAA;IAE7B,wDAAwD;IACxD,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAA;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAA;IAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAA;IAC7B,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAU,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC/D,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAQ,CAAA;QACxD,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
package/dist/parser.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { Config, TabnasOptions, RuleDefiner, RuleSpec, RuleSpecMap, Tabnas } from './types';
2
2
  import { makeRule, makeRuleSpec } from './rules';
3
3
  declare class Parser {
4
+ #private;
4
5
  options: TabnasOptions;
5
6
  cfg: Config;
6
7
  rsm: RuleSpecMap;
package/dist/parser.js CHANGED
@@ -12,6 +12,11 @@ Object.defineProperty(exports, "makeRule", { enumerable: true, get: function ()
12
12
  Object.defineProperty(exports, "makeRuleSpec", { enumerable: true, get: function () { return rules_1.makeRuleSpec; } });
13
13
  // Rule-driven parser: start() parses from scratch, clone() makes a child sibling.
14
14
  class Parser {
15
+ // Per-Parser caches for per-parse setup that depends only on cfg.
16
+ // options()/make() build a fresh Parser (makeParser/clone), so these
17
+ // never outlive the configuration they were built from.
18
+ #nrspec; // Empty spec backing the NORULE sentinel.
19
+ #srcfmt; // Debug source formatter.
15
20
  constructor(options, cfg, j) {
16
21
  this.rsm = {}; // Rule specs keyed by rule name.
17
22
  this.options = options;
@@ -44,6 +49,7 @@ class Parser {
44
49
  start(src, tabnas, meta, parent_ctx) {
45
50
  let root;
46
51
  let endtkn = (0, lexer_1.makeToken)('#ZZ', (0, utility_1.tokenize)('#ZZ', this.cfg), undefined, types_1.EMPTY, (0, lexer_1.makePoint)(-1));
52
+ let bdtin = (0, utility_1.tokenize)('#BD', this.cfg);
47
53
  let notoken = (0, lexer_1.makeNoToken)();
48
54
  // Build the per-parse Context. NORULE is patched in once we have
49
55
  // the actual no-rule sentinel — the constructor uses NOTOKEN as a
@@ -58,15 +64,19 @@ class Parser {
58
64
  inst: () => tabnas,
59
65
  sub: tabnas.internal().sub,
60
66
  rsm: this.rsm,
61
- F: (0, utility_1.srcfmt)(this.cfg),
67
+ F: (this.#srcfmt ??= (0, utility_1.srcfmt)(this.cfg)),
62
68
  NOTOKEN: notoken,
63
69
  NORULE: {},
64
70
  });
65
71
  // Merge in any caller-supplied parent_ctx (plugin tests use this
66
72
  // to seed `meta` or other fields). `deep` mutates the class
67
73
  // instance in place, so getters/setters and methods survive.
68
- (0, utility_1.deep)(ctx, parent_ctx);
69
- let norule = (0, rules_1.makeNoRule)(this.ji, ctx);
74
+ if (null != parent_ctx) {
75
+ (0, utility_1.deep)(ctx, parent_ctx);
76
+ }
77
+ // The no-rule sentinel Rule is per-parse, but its (empty) spec is
78
+ // immutable and cfg-scoped, so build the spec once per Parser.
79
+ let norule = (0, rules_1.makeRule)((this.#nrspec ??= (0, rules_1.makeRuleSpec)(this.ji, this.cfg, {})), ctx);
70
80
  ctx.NORULE = norule;
71
81
  ctx.rule = norule;
72
82
  // makelog(ctx, meta)
@@ -83,7 +93,13 @@ class Parser {
83
93
  throw new error_1.TabnasError(utility_1.S.unexpected, { src }, ctx.t0, norule, ctx);
84
94
  }
85
95
  }
86
- let lex = (0, utility_1.badlex)((0, lexer_1.makeLex)(ctx), (0, utility_1.tokenize)('#BD', this.cfg), ctx);
96
+ // Bad tokens are converted to throws by the engine's own token
97
+ // consumers (the parse_alts fetch loop, and the trailing-content
98
+ // check below) rather than by wrapping lex.next in a closure — the
99
+ // old badlex wrapper cost a bind + closure + Lex shape transition
100
+ // per parse and an extra call frame per token. The exported badlex
101
+ // helper remains for standalone-lexer users.
102
+ let lex = (0, lexer_1.makeLex)(ctx);
87
103
  // Stash lex on ctx so ctx.rewind can push tokens back onto the
88
104
  // lexer's pending-token queue.
89
105
  ctx.lex = lex;
@@ -97,7 +113,10 @@ class Parser {
97
113
  // rule open and close, and for each rule on each char to be
98
114
  // virtual (like map, list), and double for safety margin (allows
99
115
  // lots of backtracking), and apply a multipler option as a get-out-of-jail.
100
- let maxr = 2 * (0, utility_1.keys)(this.rsm).length * lex.src.length * 2 * ctx.cfg.rule.maxmul;
116
+ let rsmCount = 0;
117
+ for (let _rn in this.rsm)
118
+ rsmCount++;
119
+ let maxr = 2 * rsmCount * lex.src.length * 2 * ctx.cfg.rule.maxmul;
101
120
  // Process rules on tokens
102
121
  let kI = 0;
103
122
  // This loop is the heart of the engine. Keep processing rule
@@ -114,7 +133,17 @@ class Parser {
114
133
  kI++;
115
134
  }
116
135
  // TODO: option to allow trailing content
117
- if (endtkn.tin !== lex.next(rule).tin) {
136
+ const endtry = lex.next(rule);
137
+ if (bdtin === endtry.tin) {
138
+ // A bad token in trailing content carries its own error code
139
+ // (e.g. unterminated_string), matching the old badlex wrapper.
140
+ let details = {};
141
+ if (null != endtry.use) {
142
+ details.use = endtry.use;
143
+ }
144
+ throw new error_1.TabnasError(endtry.why || utility_1.S.unexpected, details, endtry, rule, ctx);
145
+ }
146
+ if (endtkn.tin !== endtry.tin) {
118
147
  throw new error_1.TabnasError(utility_1.S.unexpected, {}, ctx.t0, norule, ctx);
119
148
  }
120
149
  // NOTE: by returning root, we get implicit closing of maps and lists.
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}