@reidelsaltres/pureper 0.1.123 → 0.1.124
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.
|
@@ -11,8 +11,15 @@
|
|
|
11
11
|
* const fragment = parser.parseToDOM(templateString, scopeObject);
|
|
12
12
|
*/
|
|
13
13
|
export default class HMLEParser {
|
|
14
|
+
private deferredBlocksStack;
|
|
15
|
+
private deferredBlockCounter;
|
|
14
16
|
private static extractBalancedBraces;
|
|
15
17
|
private static extractBalancedParens;
|
|
18
|
+
private static isIdentifierStart;
|
|
19
|
+
private static isIdentifierPart;
|
|
20
|
+
private static transformDefStatements;
|
|
21
|
+
private static extractDefStatement;
|
|
22
|
+
private static extractDefExpression;
|
|
16
23
|
private static rules;
|
|
17
24
|
private static domRules;
|
|
18
25
|
variables: Record<string, unknown>;
|
|
@@ -43,6 +50,8 @@ export default class HMLEParser {
|
|
|
43
50
|
* @returns Processed HTML string
|
|
44
51
|
*/
|
|
45
52
|
parse(content: string, scope?: Record<string, any>): string;
|
|
53
|
+
private deferBlock;
|
|
54
|
+
private restoreDeferredBlocks;
|
|
46
55
|
/**
|
|
47
56
|
* Stage 2: Process DOM rules on a fragment
|
|
48
57
|
* Walks all elements and applies DOM rules based on attributes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HMLEParser.d.ts","sourceRoot":"","sources":["../../src/foundation/HMLEParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8BH,MAAM,CAAC,OAAO,OAAO,UAAU;
|
|
1
|
+
{"version":3,"file":"HMLEParser.d.ts","sourceRoot":"","sources":["../../src/foundation/HMLEParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8BH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,oBAAoB,CAAK;IAEjC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAcpC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAapC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAIhC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAI/B,OAAO,CAAC,MAAM,CAAC,sBAAsB;IA0HrC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAwBlC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAmHnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAoOlB;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAwIrB;IAEK,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAE/C;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKtD;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;IACI,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;IAWxE;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;;;;OAKG;IACI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAuDlE,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,qBAAqB;IAW7B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;;;OAKG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,gBAAgB;IAajF;;;;;OAKG;IACI,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;IAK1G;;;;;;OAMG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IAM7F;;;;;;OAMG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IAO/F;;;OAGG;IACI,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;CAI/E"}
|
|
@@ -29,6 +29,8 @@ class HMLEDOMRule {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
export default class HMLEParser {
|
|
32
|
+
deferredBlocksStack = [];
|
|
33
|
+
deferredBlockCounter = 0;
|
|
32
34
|
// Extract balanced braces { ... }
|
|
33
35
|
static extractBalancedBraces(content, start) {
|
|
34
36
|
if (content[start] !== '{')
|
|
@@ -63,6 +65,264 @@ export default class HMLEParser {
|
|
|
63
65
|
return null;
|
|
64
66
|
return { block: content.slice(start + 1, i - 1), end: i };
|
|
65
67
|
}
|
|
68
|
+
static isIdentifierStart(ch) {
|
|
69
|
+
return /[A-Za-z_$]/.test(ch);
|
|
70
|
+
}
|
|
71
|
+
static isIdentifierPart(ch) {
|
|
72
|
+
return /[A-Za-z0-9_$]/.test(ch);
|
|
73
|
+
}
|
|
74
|
+
static transformDefStatements(code) {
|
|
75
|
+
if (!code.includes('def'))
|
|
76
|
+
return code;
|
|
77
|
+
let result = '';
|
|
78
|
+
let i = 0;
|
|
79
|
+
const len = code.length;
|
|
80
|
+
let inSingle = false;
|
|
81
|
+
let inDouble = false;
|
|
82
|
+
let inTemplate = false;
|
|
83
|
+
let inLineComment = false;
|
|
84
|
+
let inBlockComment = false;
|
|
85
|
+
let escape = false;
|
|
86
|
+
while (i < len) {
|
|
87
|
+
const ch = code[i];
|
|
88
|
+
if (inLineComment) {
|
|
89
|
+
result += ch;
|
|
90
|
+
if (ch === '\n')
|
|
91
|
+
inLineComment = false;
|
|
92
|
+
i++;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (inBlockComment) {
|
|
96
|
+
result += ch;
|
|
97
|
+
if (ch === '*' && code[i + 1] === '/') {
|
|
98
|
+
result += '/';
|
|
99
|
+
i += 2;
|
|
100
|
+
inBlockComment = false;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
i++;
|
|
104
|
+
}
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (inSingle) {
|
|
108
|
+
result += ch;
|
|
109
|
+
if (!escape && ch === '\\') {
|
|
110
|
+
escape = true;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
if (!escape && ch === "'")
|
|
114
|
+
inSingle = false;
|
|
115
|
+
escape = false;
|
|
116
|
+
}
|
|
117
|
+
i++;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (inDouble) {
|
|
121
|
+
result += ch;
|
|
122
|
+
if (!escape && ch === '\\') {
|
|
123
|
+
escape = true;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
if (!escape && ch === '"')
|
|
127
|
+
inDouble = false;
|
|
128
|
+
escape = false;
|
|
129
|
+
}
|
|
130
|
+
i++;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (inTemplate) {
|
|
134
|
+
result += ch;
|
|
135
|
+
if (!escape && ch === '\\') {
|
|
136
|
+
escape = true;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
if (!escape && ch === '`')
|
|
140
|
+
inTemplate = false;
|
|
141
|
+
escape = false;
|
|
142
|
+
}
|
|
143
|
+
i++;
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (ch === '/' && code[i + 1] === '/') {
|
|
147
|
+
inLineComment = true;
|
|
148
|
+
result += ch;
|
|
149
|
+
i++;
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (ch === '/' && code[i + 1] === '*') {
|
|
153
|
+
inBlockComment = true;
|
|
154
|
+
result += ch;
|
|
155
|
+
i++;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (ch === "'") {
|
|
159
|
+
inSingle = true;
|
|
160
|
+
result += ch;
|
|
161
|
+
i++;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (ch === '"') {
|
|
165
|
+
inDouble = true;
|
|
166
|
+
result += ch;
|
|
167
|
+
i++;
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (ch === '`') {
|
|
171
|
+
inTemplate = true;
|
|
172
|
+
result += ch;
|
|
173
|
+
i++;
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (code.startsWith('def', i) && (i === 0 || !HMLEParser.isIdentifierPart(code[i - 1])) && (i + 3 >= len || /\s/.test(code[i + 3]))) {
|
|
177
|
+
const defResult = HMLEParser.extractDefStatement(code, i);
|
|
178
|
+
if (defResult) {
|
|
179
|
+
result += defResult.replacement;
|
|
180
|
+
i = defResult.nextIndex;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
result += ch;
|
|
185
|
+
i++;
|
|
186
|
+
}
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
static extractDefStatement(code, start) {
|
|
190
|
+
const len = code.length;
|
|
191
|
+
let i = start + 3;
|
|
192
|
+
while (i < len && /\s/.test(code[i]))
|
|
193
|
+
i++;
|
|
194
|
+
if (i >= len || !HMLEParser.isIdentifierStart(code[i]))
|
|
195
|
+
return null;
|
|
196
|
+
const nameStart = i;
|
|
197
|
+
i++;
|
|
198
|
+
while (i < len && HMLEParser.isIdentifierPart(code[i]))
|
|
199
|
+
i++;
|
|
200
|
+
const name = code.slice(nameStart, i);
|
|
201
|
+
while (i < len && /\s/.test(code[i]))
|
|
202
|
+
i++;
|
|
203
|
+
if (i >= len || code[i] !== '=')
|
|
204
|
+
return null;
|
|
205
|
+
i++; // skip '='
|
|
206
|
+
while (i < len && /\s/.test(code[i]))
|
|
207
|
+
i++;
|
|
208
|
+
const exprInfo = HMLEParser.extractDefExpression(code, i);
|
|
209
|
+
if (!exprInfo)
|
|
210
|
+
return null;
|
|
211
|
+
const replacement = `(void __hmle_def__("${name}", (${exprInfo.expression})))` + (exprInfo.terminatedWithSemicolon ? ';' : '');
|
|
212
|
+
return { replacement, nextIndex: exprInfo.nextIndex };
|
|
213
|
+
}
|
|
214
|
+
static extractDefExpression(code, start) {
|
|
215
|
+
const len = code.length;
|
|
216
|
+
let i = start;
|
|
217
|
+
let depthParen = 0;
|
|
218
|
+
let depthBrace = 0;
|
|
219
|
+
let depthBracket = 0;
|
|
220
|
+
let inSingle = false;
|
|
221
|
+
let inDouble = false;
|
|
222
|
+
let inTemplate = false;
|
|
223
|
+
let inLineComment = false;
|
|
224
|
+
let inBlockComment = false;
|
|
225
|
+
let escape = false;
|
|
226
|
+
while (i < len) {
|
|
227
|
+
const ch = code[i];
|
|
228
|
+
if (inLineComment) {
|
|
229
|
+
if (ch === '\n')
|
|
230
|
+
inLineComment = false;
|
|
231
|
+
i++;
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
if (inBlockComment) {
|
|
235
|
+
if (ch === '*' && code[i + 1] === '/') {
|
|
236
|
+
i += 2;
|
|
237
|
+
inBlockComment = false;
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
i++;
|
|
241
|
+
}
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
if (inSingle) {
|
|
245
|
+
if (!escape && ch === '\\') {
|
|
246
|
+
escape = true;
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
if (!escape && ch === "'")
|
|
250
|
+
inSingle = false;
|
|
251
|
+
escape = false;
|
|
252
|
+
}
|
|
253
|
+
i++;
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
if (inDouble) {
|
|
257
|
+
if (!escape && ch === '\\') {
|
|
258
|
+
escape = true;
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
if (!escape && ch === '"')
|
|
262
|
+
inDouble = false;
|
|
263
|
+
escape = false;
|
|
264
|
+
}
|
|
265
|
+
i++;
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
if (inTemplate) {
|
|
269
|
+
if (!escape && ch === '\\') {
|
|
270
|
+
escape = true;
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
if (!escape && ch === '`')
|
|
274
|
+
inTemplate = false;
|
|
275
|
+
escape = false;
|
|
276
|
+
}
|
|
277
|
+
i++;
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
if (ch === '/' && code[i + 1] === '/') {
|
|
281
|
+
inLineComment = true;
|
|
282
|
+
i += 2;
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
if (ch === '/' && code[i + 1] === '*') {
|
|
286
|
+
inBlockComment = true;
|
|
287
|
+
i += 2;
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
if (ch === "'") {
|
|
291
|
+
inSingle = true;
|
|
292
|
+
i++;
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
if (ch === '"') {
|
|
296
|
+
inDouble = true;
|
|
297
|
+
i++;
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
if (ch === '`') {
|
|
301
|
+
inTemplate = true;
|
|
302
|
+
i++;
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
if (ch === '(')
|
|
306
|
+
depthParen++;
|
|
307
|
+
else if (ch === ')')
|
|
308
|
+
depthParen = Math.max(0, depthParen - 1);
|
|
309
|
+
else if (ch === '{')
|
|
310
|
+
depthBrace++;
|
|
311
|
+
else if (ch === '}')
|
|
312
|
+
depthBrace = Math.max(0, depthBrace - 1);
|
|
313
|
+
else if (ch === '[')
|
|
314
|
+
depthBracket++;
|
|
315
|
+
else if (ch === ']')
|
|
316
|
+
depthBracket = Math.max(0, depthBracket - 1);
|
|
317
|
+
if (ch === ';' && depthParen === 0 && depthBrace === 0 && depthBracket === 0) {
|
|
318
|
+
const expression = code.slice(start, i).trim();
|
|
319
|
+
return { expression, nextIndex: i + 1, terminatedWithSemicolon: true };
|
|
320
|
+
}
|
|
321
|
+
i++;
|
|
322
|
+
}
|
|
323
|
+
const expression = code.slice(start).trim();
|
|
324
|
+
return { expression, nextIndex: len, terminatedWithSemicolon: false };
|
|
325
|
+
}
|
|
66
326
|
// Predefined rules processed in order
|
|
67
327
|
static rules = [
|
|
68
328
|
// Rule: @for (item in items) { ... }
|
|
@@ -83,8 +343,9 @@ export default class HMLEParser {
|
|
|
83
343
|
if (!extracted)
|
|
84
344
|
return match[0];
|
|
85
345
|
const inner = extracted.block;
|
|
86
|
-
// Support numeric literal or expression that resolves to a number
|
|
346
|
+
// Support numeric literal or expression that resolves to a number/iterable
|
|
87
347
|
let arr = [];
|
|
348
|
+
let unresolvedIterable = false;
|
|
88
349
|
// If the iterable part is a plain number literal, use it directly
|
|
89
350
|
if (/^\d+$/.test(iterableExpr)) {
|
|
90
351
|
const n = parseInt(iterableExpr, 10);
|
|
@@ -92,17 +353,31 @@ export default class HMLEParser {
|
|
|
92
353
|
}
|
|
93
354
|
else {
|
|
94
355
|
const resolved = parser.resolveExpression(iterableExpr, scope);
|
|
95
|
-
if (
|
|
356
|
+
if (resolved == null) {
|
|
357
|
+
unresolvedIterable = true;
|
|
358
|
+
}
|
|
359
|
+
else if (typeof resolved === 'number' && isFinite(resolved)) {
|
|
96
360
|
const n = Math.max(0, Math.floor(resolved));
|
|
97
361
|
arr = Array.from({ length: n }, (_, i) => i);
|
|
98
362
|
}
|
|
99
363
|
else if (Array.isArray(resolved)) {
|
|
100
364
|
arr = resolved;
|
|
101
365
|
}
|
|
366
|
+
else if (typeof resolved[Symbol.iterator] === 'function') {
|
|
367
|
+
arr = Array.from(resolved);
|
|
368
|
+
}
|
|
369
|
+
else if (typeof resolved === 'object' && typeof resolved.length === 'number') {
|
|
370
|
+
arr = Array.from(resolved);
|
|
371
|
+
}
|
|
102
372
|
else {
|
|
103
373
|
arr = [];
|
|
104
374
|
}
|
|
105
375
|
}
|
|
376
|
+
if (unresolvedIterable) {
|
|
377
|
+
const fullBlock = input.slice(match.index, extracted.end);
|
|
378
|
+
const placeholder = parser.deferBlock(fullBlock);
|
|
379
|
+
return { text: placeholder, end: extracted.end };
|
|
380
|
+
}
|
|
106
381
|
const parts = [];
|
|
107
382
|
for (let i = 0; i < arr.length; i++) {
|
|
108
383
|
const item = arr[i];
|
|
@@ -125,17 +400,70 @@ export default class HMLEParser {
|
|
|
125
400
|
const extracted = HMLEParser.extractBalancedParens(input, blockStart);
|
|
126
401
|
if (!extracted)
|
|
127
402
|
return match[0];
|
|
128
|
-
const
|
|
403
|
+
const originalCode = extracted.block;
|
|
404
|
+
const code = HMLEParser.transformDefStatements(originalCode);
|
|
129
405
|
const ctx = parser.buildContext(scope);
|
|
406
|
+
const assignToScope = (prop, value) => {
|
|
407
|
+
ctx[prop] = value;
|
|
408
|
+
if (scope)
|
|
409
|
+
scope[prop] = value;
|
|
410
|
+
else
|
|
411
|
+
parser.variables[prop] = value;
|
|
412
|
+
return value;
|
|
413
|
+
};
|
|
414
|
+
ctx.__hmle_def__ = (prop, value) => assignToScope(prop, value);
|
|
415
|
+
const execCtx = new Proxy(ctx, {
|
|
416
|
+
set(target, prop, value) {
|
|
417
|
+
target[prop] = value;
|
|
418
|
+
return true;
|
|
419
|
+
},
|
|
420
|
+
get(target, prop) {
|
|
421
|
+
return target[prop];
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
// Prepare code transformation rules:
|
|
425
|
+
// - If the code is a single assignment (no semicolons), execute it but suppress output
|
|
426
|
+
// - If code contains multiple statements separated by semicolons, transform so the
|
|
427
|
+
// last non-empty statement becomes a returned value so it is printed
|
|
428
|
+
let processedCode = code;
|
|
429
|
+
let suppressOutput = false;
|
|
430
|
+
const trimmedCode = code.trim();
|
|
431
|
+
if (trimmedCode.indexOf(';') === -1) {
|
|
432
|
+
// No semicolons: detect simple assignment like `a = 1` or `a += 1` and suppress output
|
|
433
|
+
// Match assignment ops (=, +=, -=, *=, /=, %=)
|
|
434
|
+
if (/^[A-Za-z_$][A-Za-z0-9_$]*\s*(?:[+\-*/%]?=)\s*[\s\S]+$/.test(trimmedCode)) {
|
|
435
|
+
suppressOutput = true;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
// Multi-statement: if the user used an explicit `return` anywhere,
|
|
440
|
+
// wrap original code in an IIFE so that `return` works as expected.
|
|
441
|
+
if (/\breturn\b/.test(code)) {
|
|
442
|
+
processedCode = '(function(){' + code + '})()';
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
// Fallback: return the last non-empty statement's value
|
|
446
|
+
const parts = code.split(';');
|
|
447
|
+
let last = parts.length - 1;
|
|
448
|
+
while (last >= 0 && parts[last].trim() === '')
|
|
449
|
+
last--;
|
|
450
|
+
if (last >= 0) {
|
|
451
|
+
const head = parts.slice(0, last).join(';');
|
|
452
|
+
const lastExpr = parts[last];
|
|
453
|
+
// Build a small IIFE that runs the head and returns the last expression's value
|
|
454
|
+
processedCode = '(function(){' + (head ? head + ';' : '') + ' return (' + lastExpr + '); })()';
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
130
458
|
let result;
|
|
131
459
|
try {
|
|
132
|
-
const fn = new Function('with(this){ return (' +
|
|
133
|
-
result = fn.call(
|
|
460
|
+
const fn = new Function('with(this){ return (' + processedCode + '); }');
|
|
461
|
+
result = fn.call(execCtx);
|
|
134
462
|
}
|
|
135
463
|
catch (e) {
|
|
136
464
|
try {
|
|
137
|
-
const fn2 = new Function('with(this){ ' +
|
|
138
|
-
result = fn2.call(
|
|
465
|
+
const fn2 = new Function('with(this){ ' + processedCode + ' }');
|
|
466
|
+
result = fn2.call(execCtx);
|
|
139
467
|
}
|
|
140
468
|
catch (e2) {
|
|
141
469
|
return { text: '', end: extracted.end };
|
|
@@ -145,7 +473,12 @@ export default class HMLEParser {
|
|
|
145
473
|
let finalEnd = extracted.end;
|
|
146
474
|
if (input[extracted.end] === ')')
|
|
147
475
|
finalEnd = extracted.end + 1;
|
|
148
|
-
|
|
476
|
+
// If result is non-primitive (object/function) or null/undefined - do not print
|
|
477
|
+
let finalText = '';
|
|
478
|
+
if (!suppressOutput && result != null && typeof result !== 'object' && typeof result !== 'function') {
|
|
479
|
+
finalText = parser.stringifyValue(result);
|
|
480
|
+
}
|
|
481
|
+
return { text: finalText, end: finalEnd };
|
|
149
482
|
}),
|
|
150
483
|
// Rule: @( code ) — single-paren expression
|
|
151
484
|
new HMLEParserRule(/@\(/g, (parser, match, input, scope) => {
|
|
@@ -153,23 +486,72 @@ export default class HMLEParser {
|
|
|
153
486
|
const extracted = HMLEParser.extractBalancedParens(input, blockStart);
|
|
154
487
|
if (!extracted)
|
|
155
488
|
return match[0];
|
|
156
|
-
const
|
|
489
|
+
const originalCode = extracted.block;
|
|
490
|
+
const code = HMLEParser.transformDefStatements(originalCode);
|
|
157
491
|
const ctx = parser.buildContext(scope);
|
|
492
|
+
const assignToScope = (prop, value) => {
|
|
493
|
+
ctx[prop] = value;
|
|
494
|
+
if (scope)
|
|
495
|
+
scope[prop] = value;
|
|
496
|
+
else
|
|
497
|
+
parser.variables[prop] = value;
|
|
498
|
+
return value;
|
|
499
|
+
};
|
|
500
|
+
ctx.__hmle_def__ = (prop, value) => assignToScope(prop, value);
|
|
501
|
+
const execCtx = new Proxy(ctx, {
|
|
502
|
+
set(target, prop, value) {
|
|
503
|
+
target[prop] = value;
|
|
504
|
+
return true;
|
|
505
|
+
},
|
|
506
|
+
get(target, prop) {
|
|
507
|
+
return target[prop];
|
|
508
|
+
}
|
|
509
|
+
});
|
|
510
|
+
// Prepare processed code / suppression rules similar to double-paren handling
|
|
511
|
+
let processedCode = code;
|
|
512
|
+
let suppressOutput = false;
|
|
513
|
+
const trimmedCode = code.trim();
|
|
514
|
+
if (trimmedCode.indexOf(';') === -1) {
|
|
515
|
+
if (/^[A-Za-z_$][A-Za-z0-9_$]*\s*(?:[+\-*/%]?=)\s*[\s\S]+$/.test(trimmedCode)) {
|
|
516
|
+
suppressOutput = true;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
else {
|
|
520
|
+
// Multi-statement -> if explicit return used, wrap as-is in IIFE
|
|
521
|
+
if (/\breturn\b/.test(code)) {
|
|
522
|
+
processedCode = '(function(){' + code + '})()';
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
const parts = code.split(';');
|
|
526
|
+
let last = parts.length - 1;
|
|
527
|
+
while (last >= 0 && parts[last].trim() === '')
|
|
528
|
+
last--;
|
|
529
|
+
if (last >= 0) {
|
|
530
|
+
const head = parts.slice(0, last).join(';');
|
|
531
|
+
const lastExpr = parts[last];
|
|
532
|
+
processedCode = '(function(){' + (head ? head + ';' : '') + ' return (' + lastExpr + '); })()';
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
158
536
|
let result;
|
|
159
537
|
try {
|
|
160
|
-
const fn = new Function('with(this){ return (' +
|
|
161
|
-
result = fn.call(
|
|
538
|
+
const fn = new Function('with(this){ return (' + processedCode + '); }');
|
|
539
|
+
result = fn.call(execCtx);
|
|
162
540
|
}
|
|
163
541
|
catch (e) {
|
|
164
542
|
try {
|
|
165
|
-
const fn2 = new Function('with(this){ ' +
|
|
166
|
-
result = fn2.call(
|
|
543
|
+
const fn2 = new Function('with(this){ ' + processedCode + ' }');
|
|
544
|
+
result = fn2.call(execCtx);
|
|
167
545
|
}
|
|
168
546
|
catch (e2) {
|
|
169
547
|
return { text: '', end: extracted.end };
|
|
170
548
|
}
|
|
171
549
|
}
|
|
172
|
-
|
|
550
|
+
let finalText = '';
|
|
551
|
+
if (!suppressOutput && result != null && typeof result !== 'object' && typeof result !== 'function') {
|
|
552
|
+
finalText = parser.stringifyValue(result);
|
|
553
|
+
}
|
|
554
|
+
return { text: finalText, end: extracted.end };
|
|
173
555
|
}),
|
|
174
556
|
];
|
|
175
557
|
// Stage 2: DOM rules for attribute processing
|
|
@@ -381,34 +763,69 @@ export default class HMLEParser {
|
|
|
381
763
|
*/
|
|
382
764
|
parse(content, scope) {
|
|
383
765
|
let working = content;
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
lastIndex =
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
766
|
+
const maxPasses = 5;
|
|
767
|
+
let pass = 0;
|
|
768
|
+
const deferredBlocks = new Map();
|
|
769
|
+
this.deferredBlocksStack.push(deferredBlocks);
|
|
770
|
+
try {
|
|
771
|
+
while (pass < maxPasses) {
|
|
772
|
+
let passChanged = false;
|
|
773
|
+
deferredBlocks.clear();
|
|
774
|
+
for (const rule of HMLEParser.rules) {
|
|
775
|
+
const pattern = rule.pattern;
|
|
776
|
+
let result = '';
|
|
777
|
+
let lastIndex = 0;
|
|
778
|
+
let match;
|
|
779
|
+
pattern.lastIndex = 0;
|
|
780
|
+
while ((match = pattern.exec(working)) !== null) {
|
|
781
|
+
result += working.slice(lastIndex, match.index);
|
|
782
|
+
const out = rule.replacer(this, match, working, scope);
|
|
783
|
+
if (typeof out === 'string') {
|
|
784
|
+
result += out;
|
|
785
|
+
lastIndex = match.index + match[0].length;
|
|
786
|
+
}
|
|
787
|
+
else {
|
|
788
|
+
result += out.text;
|
|
789
|
+
lastIndex = out.end;
|
|
790
|
+
}
|
|
791
|
+
pattern.lastIndex = lastIndex;
|
|
792
|
+
}
|
|
793
|
+
result += working.slice(lastIndex);
|
|
794
|
+
if (result !== working) {
|
|
795
|
+
passChanged = true;
|
|
796
|
+
working = result;
|
|
797
|
+
}
|
|
402
798
|
}
|
|
403
|
-
|
|
404
|
-
|
|
799
|
+
working = this.restoreDeferredBlocks(working);
|
|
800
|
+
if (!passChanged)
|
|
801
|
+
break;
|
|
802
|
+
pass++;
|
|
405
803
|
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
804
|
+
}
|
|
805
|
+
finally {
|
|
806
|
+
this.deferredBlocksStack.pop();
|
|
409
807
|
}
|
|
410
808
|
return working;
|
|
411
809
|
}
|
|
810
|
+
deferBlock(content) {
|
|
811
|
+
const stack = this.deferredBlocksStack[this.deferredBlocksStack.length - 1];
|
|
812
|
+
if (!stack)
|
|
813
|
+
return content;
|
|
814
|
+
const token = `__HMLE_PENDING_BLOCK_${this.deferredBlockCounter++}__`;
|
|
815
|
+
stack.set(token, content);
|
|
816
|
+
return token;
|
|
817
|
+
}
|
|
818
|
+
restoreDeferredBlocks(text) {
|
|
819
|
+
const stack = this.deferredBlocksStack[this.deferredBlocksStack.length - 1];
|
|
820
|
+
if (!stack || stack.size === 0)
|
|
821
|
+
return text;
|
|
822
|
+
let restored = text;
|
|
823
|
+
for (const [token, content] of stack.entries()) {
|
|
824
|
+
restored = restored.replace(token, content);
|
|
825
|
+
}
|
|
826
|
+
stack.clear();
|
|
827
|
+
return restored;
|
|
828
|
+
}
|
|
412
829
|
/**
|
|
413
830
|
* Stage 2: Process DOM rules on a fragment
|
|
414
831
|
* Walks all elements and applies DOM rules based on attributes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HMLEParser.js","sourceRoot":"","sources":["../../src/foundation/HMLEParser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HMLEParser.js","sourceRoot":"","sources":["../../src/foundation/HMLEParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,8BAA8B;AAC9B,MAAM,cAAc;IACT,OAAO,CAAS;IAChB,QAAQ,CAAqI;IAEpJ,YACI,OAAe,EACf,QAA4I;QAE5I,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ;AAED,oDAAoD;AACpD,MAAM,WAAW;IACN,WAAW,CAAS;IACpB,SAAS,CAA2I;IAE3J,YACI,WAAmB,EACnB,SAAmJ;QAEnJ,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;CACJ;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;IACnB,mBAAmB,GAA+B,EAAE,CAAC;IACrD,oBAAoB,GAAG,CAAC,CAAC;IACjC,kCAAkC;IAC1B,MAAM,CAAC,qBAAqB,CAAC,OAAe,EAAE,KAAa;QAC/D,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBAC3B,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;YACrC,CAAC,EAAE,CAAC;QACR,CAAC;QACD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC9D,CAAC;IAED,uCAAuC;IAC/B,MAAM,CAAC,qBAAqB,CAAC,OAAe,EAAE,KAAa;QAC/D,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBAC3B,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;YACrC,CAAC,EAAE,CAAC;QACR,CAAC;QACD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC9D,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,EAAU;QACvC,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,EAAU;QACtC,OAAO,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAEO,MAAM,CAAC,sBAAsB,CAAC,IAAY;QAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEnB,IAAI,aAAa,EAAE,CAAC;gBAChB,MAAM,IAAI,EAAE,CAAC;gBACb,IAAI,EAAE,KAAK,IAAI;oBAAE,aAAa,GAAG,KAAK,CAAC;gBACvC,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,cAAc,EAAE,CAAC;gBACjB,MAAM,IAAI,EAAE,CAAC;gBACb,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACpC,MAAM,IAAI,GAAG,CAAC;oBACd,CAAC,IAAI,CAAC,CAAC;oBACP,cAAc,GAAG,KAAK,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACJ,CAAC,EAAE,CAAC;gBACR,CAAC;gBACD,SAAS;YACb,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACX,MAAM,IAAI,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBACzB,MAAM,GAAG,IAAI,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,GAAG;wBAAE,QAAQ,GAAG,KAAK,CAAC;oBAC5C,MAAM,GAAG,KAAK,CAAC;gBACnB,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACX,MAAM,IAAI,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBACzB,MAAM,GAAG,IAAI,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,GAAG;wBAAE,QAAQ,GAAG,KAAK,CAAC;oBAC5C,MAAM,GAAG,KAAK,CAAC;gBACnB,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBACb,MAAM,IAAI,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBACzB,MAAM,GAAG,IAAI,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,GAAG;wBAAE,UAAU,GAAG,KAAK,CAAC;oBAC9C,MAAM,GAAG,KAAK,CAAC;gBACnB,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpC,aAAa,GAAG,IAAI,CAAC;gBACrB,MAAM,IAAI,EAAE,CAAC;gBACb,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpC,cAAc,GAAG,IAAI,CAAC;gBACtB,MAAM,IAAI,EAAE,CAAC;gBACb,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACb,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM,IAAI,EAAE,CAAC;gBACb,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACb,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM,IAAI,EAAE,CAAC;gBACb,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACb,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM,IAAI,EAAE,CAAC;gBACb,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClI,MAAM,SAAS,GAAG,UAAU,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1D,IAAI,SAAS,EAAE,CAAC;oBACZ,MAAM,IAAI,SAAS,CAAC,WAAW,CAAC;oBAChC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC;oBACxB,SAAS;gBACb,CAAC;YACL,CAAC;YAED,MAAM,IAAI,EAAE,CAAC;YACb,CAAC,EAAE,CAAC;QACR,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAAC,IAAY,EAAE,KAAa;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAElB,OAAO,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAEpE,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,CAAC,EAAE,CAAC;QACJ,OAAO,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEtC,OAAO,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAC7C,CAAC,EAAE,CAAC,CAAC,WAAW;QAChB,OAAO,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,EAAE,CAAC;QAE1C,MAAM,QAAQ,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,MAAM,WAAW,GAAG,uBAAuB,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/H,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC1D,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,IAAY,EAAE,KAAa;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,GAAG,KAAK,CAAC;QACd,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEnB,IAAI,aAAa,EAAE,CAAC;gBAChB,IAAI,EAAE,KAAK,IAAI;oBAAE,aAAa,GAAG,KAAK,CAAC;gBACvC,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,cAAc,EAAE,CAAC;gBACjB,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACpC,CAAC,IAAI,CAAC,CAAC;oBACP,cAAc,GAAG,KAAK,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACJ,CAAC,EAAE,CAAC;gBACR,CAAC;gBACD,SAAS;YACb,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBACzB,MAAM,GAAG,IAAI,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,GAAG;wBAAE,QAAQ,GAAG,KAAK,CAAC;oBAC5C,MAAM,GAAG,KAAK,CAAC;gBACnB,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBACzB,MAAM,GAAG,IAAI,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,GAAG;wBAAE,QAAQ,GAAG,KAAK,CAAC;oBAC5C,MAAM,GAAG,KAAK,CAAC;gBACnB,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBACzB,MAAM,GAAG,IAAI,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,GAAG;wBAAE,UAAU,GAAG,KAAK,CAAC;oBAC9C,MAAM,GAAG,KAAK,CAAC;gBACnB,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpC,aAAa,GAAG,IAAI,CAAC;gBACrB,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpC,cAAc,GAAG,IAAI,CAAC;gBACtB,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACb,QAAQ,GAAG,IAAI,CAAC;gBAChB,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACb,QAAQ,GAAG,IAAI,CAAC;gBAChB,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACb,UAAU,GAAG,IAAI,CAAC;gBAClB,CAAC,EAAE,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,IAAI,EAAE,KAAK,GAAG;gBAAE,UAAU,EAAE,CAAC;iBACxB,IAAI,EAAE,KAAK,GAAG;gBAAE,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;iBACzD,IAAI,EAAE,KAAK,GAAG;gBAAE,UAAU,EAAE,CAAC;iBAC7B,IAAI,EAAE,KAAK,GAAG;gBAAE,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;iBACzD,IAAI,EAAE,KAAK,GAAG;gBAAE,YAAY,EAAE,CAAC;iBAC/B,IAAI,EAAE,KAAK,GAAG;gBAAE,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;YAElE,IAAI,EAAE,KAAK,GAAG,IAAI,UAAU,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;gBAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC;YAC3E,CAAC;YAED,CAAC,EAAE,CAAC;QACR,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC;IAC1E,CAAC;IAED,sCAAsC;IAC9B,MAAM,CAAC,KAAK,GAAqB;QACrC,qCAAqC;QACrC,oGAAoG;QACpG,YAAY;QACZ,iCAAiC;QACjC,sCAAsC;QACtC,2BAA2B;QAC3B,IAAI,cAAc,CAAC,mIAAmI,EAClJ,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,2EAA2E;YAC3E,sEAAsE;YACtE,kEAAkE;YAClE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,kBAAkB;YAExE,MAAM,SAAS,GAAG,UAAU,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;YAEhC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YAC9B,2EAA2E;YAC3E,IAAI,GAAG,GAAU,EAAE,CAAC;YACpB,IAAI,kBAAkB,GAAG,KAAK,CAAC;YAC/B,kEAAkE;YAClE,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBACrC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACJ,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBAC/D,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;oBACnB,kBAAkB,GAAG,IAAI,CAAC;gBAC9B,CAAC;qBAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC5C,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACjC,GAAG,GAAG,QAAQ,CAAC;gBACnB,CAAC;qBAAM,IAAI,OAAQ,QAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE,CAAC;oBAClE,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAyB,CAAC,CAAC;gBAChD,CAAC;qBAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAQ,QAAgB,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACtF,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAA0B,CAAC,CAAC;gBACjD,CAAC;qBAAM,CAAC;oBACJ,GAAG,GAAG,EAAE,CAAC;gBACb,CAAC;YACL,CAAC;YAED,IAAI,kBAAkB,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACjD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;YACrD,CAAC;YAED,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,SAA8B,CAAC;gBACnC,6EAA6E;gBAC7E,IAAI,WAAW,EAAE,CAAC;oBACd,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnF,CAAC;qBAAM,CAAC;oBACJ,yCAAyC;oBACzC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjE,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;YAC/C,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;QAC1D,CAAC,CACJ;QAED,2DAA2D;QAC3D,IAAI,cAAc,CAAC,QAAQ,EACvB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,sBAAsB;YAE5E,MAAM,SAAS,GAAG,UAAU,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;YAEhC,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;YACrC,MAAM,IAAI,GAAG,UAAU,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,KAAU,EAAE,EAAE;gBAC9C,GAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBAC3B,IAAI,KAAK;oBAAG,KAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;;oBACnC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBACpC,OAAO,KAAK,CAAC;YACjB,CAAC,CAAC;YACD,GAAW,CAAC,YAAY,GAAG,CAAC,IAAY,EAAE,KAAU,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrF,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE;gBAC3B,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK;oBAClB,MAAc,CAAC,IAAW,CAAC,GAAG,KAAK,CAAC;oBACrC,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,GAAG,CAAC,MAAM,EAAE,IAAI;oBACZ,OAAQ,MAAc,CAAC,IAAW,CAAC,CAAC;gBACxC,CAAC;aACJ,CAAC,CAAC;YACH,qCAAqC;YACrC,uFAAuF;YACvF,mFAAmF;YACnF,uEAAuE;YACvE,IAAI,aAAa,GAAG,IAAI,CAAC;YACzB,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAEhC,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClC,uFAAuF;gBACvF,+CAA+C;gBAC/C,IAAI,uDAAuD,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC5E,cAAc,GAAG,IAAI,CAAC;gBAC1B,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,mEAAmE;gBACnE,oEAAoE;gBACpE,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,aAAa,GAAG,cAAc,GAAG,IAAI,GAAG,MAAM,CAAC;gBACnD,CAAC;qBAAM,CAAC;oBACJ,wDAAwD;oBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC9B,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC5B,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;wBAAE,IAAI,EAAE,CAAC;oBACtD,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;wBACZ,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC7B,gFAAgF;wBAChF,aAAa,GAAG,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;oBACnG,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAI,MAAW,CAAC;YAChB,IAAI,CAAC;gBACD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,sBAAsB,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC;gBACzE,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC;oBACD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,cAAc,GAAG,aAAa,GAAG,IAAI,CAAC,CAAC;oBAChE,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBAAC,OAAO,EAAE,EAAE,CAAC;oBACV,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;gBAC5C,CAAC;YACL,CAAC;YAED,4BAA4B;YAC5B,IAAI,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC;YAC7B,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG;gBAAE,QAAQ,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;YAE/D,gFAAgF;YAChF,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClG,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QAC9C,CAAC,CACJ;QAED,4CAA4C;QAC5C,IAAI,cAAc,CAAC,MAAM,EACrB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,gBAAgB;YAEtE,MAAM,SAAS,GAAG,UAAU,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;YAEhC,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;YACrC,MAAM,IAAI,GAAG,UAAU,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,KAAU,EAAE,EAAE;gBAC9C,GAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBAC3B,IAAI,KAAK;oBAAG,KAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;;oBACnC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBACpC,OAAO,KAAK,CAAC;YACjB,CAAC,CAAC;YACD,GAAW,CAAC,YAAY,GAAG,CAAC,IAAY,EAAE,KAAU,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrF,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE;gBAC3B,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK;oBAClB,MAAc,CAAC,IAAW,CAAC,GAAG,KAAK,CAAC;oBACrC,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,GAAG,CAAC,MAAM,EAAE,IAAI;oBACZ,OAAQ,MAAc,CAAC,IAAW,CAAC,CAAC;gBACxC,CAAC;aACJ,CAAC,CAAC;YACH,8EAA8E;YAC9E,IAAI,aAAa,GAAG,IAAI,CAAC;YACzB,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAEhC,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClC,IAAI,uDAAuD,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC5E,cAAc,GAAG,IAAI,CAAC;gBAC1B,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,iEAAiE;gBACjE,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,aAAa,GAAG,cAAc,GAAG,IAAI,GAAG,MAAM,CAAC;gBACnD,CAAC;qBAAM,CAAC;oBACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC9B,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC5B,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;wBAAE,IAAI,EAAE,CAAC;oBACtD,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;wBACZ,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC7B,aAAa,GAAG,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;oBACnG,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAI,MAAW,CAAC;YAChB,IAAI,CAAC;gBACD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,sBAAsB,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC;gBACzE,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC;oBACD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,cAAc,GAAG,aAAa,GAAG,IAAI,CAAC,CAAC;oBAChE,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBAAC,OAAO,EAAE,EAAE,CAAC;oBACV,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;gBAC5C,CAAC;YACL,CAAC;YAED,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClG,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;QACnD,CAAC,CACJ;KACJ,CAAC;IAEF,8CAA8C;IACtC,MAAM,CAAC,QAAQ,GAAkB;QACrC,0DAA0D;QAC1D,yCAAyC;QACzC,iFAAiF;QACjF,IAAI,WAAW,CAAC,sBAAsB,EAClC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACnD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,qBAAqB;YAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,wBAAwB;YAChD,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAEvC,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;gBAC7B,wBAAwB;gBACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5E,IAAI,CAAC;oBACD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;oBACtD,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,OAAO,CAAC,KAAK,CAAC,4BAA4B,SAAS,YAAY,EAAE,CAAC,CAAC,CAAC;gBACxE,CAAC;YACL,CAAC,CAAC;YAEF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7C,oCAAoC;QACxC,CAAC,CACJ;QAED,wDAAwD;QACxD,qCAAqC;QACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA4BI;QAEJ,+CAA+C;QAC/C,+BAA+B;QAC/B,IAAI,WAAW,CAAC,YAAY,EACxB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACnD,yEAAyE;YACzE,yEAAyE;YACzE,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,OAA2B,CAAC;YAChC,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC3D,IAAI,OAAO,SAAS,KAAK,QAAQ;oBAAE,OAAO,GAAG,SAAS,CAAC;qBAClD,IAAI,SAAS,IAAI,IAAI;oBAAE,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;;oBACnD,OAAO,GAAG,SAAS,CAAC,CAAC,iCAAiC;YAC/D,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,KAAK,EAAE,CAAC;oBACP,KAAa,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;gBACxC,CAAC;YACL,CAAC;YAED,2EAA2E;YAC3E,qCAAqC;QACzC,CAAC,CACJ;QAED,0DAA0D;QAC1D,qCAAqC;QACrC;;;;;;;;;;;;;;YAcI;QAEJ,sDAAsD;QACtD,qCAAqC;QACrC;;;;;;;;;;;;YAYI;QAEJ,iDAAiD;QACjD,8BAA8B;QAC9B;;;;;;;;;;;;;YAaI;KACP,CAAC;IAEK,SAAS,GAA4B,EAAE,CAAC;IAE/C;;OAEG;IACI,WAAW,CAAC,IAAY,EAAE,KAAc;QAC3C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,KAA2B;QAC5C,MAAM,GAAG,GAAwB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnE,IAAI,KAAK,EAAE,CAAC;YACR,sBAAsB;YACtB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1B,+CAA+C;YAC/C,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;gBACzC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClD,IAAI,GAAG,KAAK,aAAa,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,UAAU,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;wBAC7E,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtC,CAAC;gBACL,CAAC;gBACD,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACI,iBAAiB,CAAC,IAAY,EAAE,KAA2B;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,GAAG,GAAQ,QAAQ,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,GAAG,IAAI,IAAI;gBAAE,OAAO,SAAS,CAAC;YAClC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,GAAQ;QAC3B,IAAI,GAAG,IAAI,IAAI;YAAE,OAAO,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QACxC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAY,EAAE,GAAwB;QAC5D,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,sBAAsB,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;YAChE,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC;gBACD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;gBACvD,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACV,OAAO,SAAS,CAAC;YACrB,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,OAAe,EAAE,KAA2B;QACrD,IAAI,OAAO,GAAG,OAAO,CAAC;QACtB,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;QACjD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE9C,IAAI,CAAC;YACD,OAAO,IAAI,GAAG,SAAS,EAAE,CAAC;gBACtB,IAAI,WAAW,GAAG,KAAK,CAAC;gBACxB,cAAc,CAAC,KAAK,EAAE,CAAC;gBAEvB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;oBAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC7B,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,IAAI,SAAS,GAAG,CAAC,CAAC;oBAClB,IAAI,KAA6B,CAAC;oBAElC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;oBACtB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBAC9C,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;wBAEhD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;wBAEvD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;4BAC1B,MAAM,IAAI,GAAG,CAAC;4BACd,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;wBAC9C,CAAC;6BAAM,CAAC;4BACJ,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC;4BACnB,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC;wBACxB,CAAC;wBAED,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;oBAClC,CAAC;oBAED,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAEnC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;wBACrB,WAAW,GAAG,IAAI,CAAC;wBACnB,OAAO,GAAG,MAAM,CAAC;oBACrB,CAAC;gBACL,CAAC;gBAED,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAE9C,IAAI,CAAC,WAAW;oBAAE,MAAM;gBACxB,IAAI,EAAE,CAAC;YACX,CAAC;QACL,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC;QACnC,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,UAAU,CAAC,OAAe;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK;YAAE,OAAO,OAAO,CAAC;QAC3B,MAAM,KAAK,GAAG,wBAAwB,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC;QACtE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,qBAAqB,CAAC,IAAY;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,QAAoC,EAAE,KAA2B;QACrF,MAAM,QAAQ,GAAG,QAAQ,YAAY,gBAAgB;YACjD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEhE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,gEAAgE;YAChE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,sBAAsB;gBACtB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;oBACrC,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;oBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC/C,IAAI,KAAK,EAAE,CAAC;wBACR,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;wBACnE,MAAM,CAAC,8BAA8B;oBACzC,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,UAAU,CAAC,OAAe,EAAE,KAA2B;QAC1D,6BAA6B;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;QAElC,0BAA0B;QAC1B,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEtC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACI,cAAc,CAA8B,OAAe,EAAE,KAA2B;QAC3F,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjD,OAAO,QAAQ,CAAC,iBAA6B,CAAC;IAClD,CAAC;IAED;;;;;;OAMG;IACI,cAAc,CAAC,OAAe,EAAE,MAAe,EAAE,KAA2B;QAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACI,eAAe,CAAC,OAAe,EAAE,OAAgB,EAAE,KAA2B;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjD,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,OAAgB,EAAE,KAA2B;QAC9D,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC;IACnB,CAAC"}
|
package/package.json
CHANGED
|
@@ -40,6 +40,8 @@ class HMLEDOMRule {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
export default class HMLEParser {
|
|
43
|
+
private deferredBlocksStack: Array<Map<string, string>> = [];
|
|
44
|
+
private deferredBlockCounter = 0;
|
|
43
45
|
// Extract balanced braces { ... }
|
|
44
46
|
private static extractBalancedBraces(content: string, start: number): { block: string; end: number } | null {
|
|
45
47
|
if (content[start] !== '{') return null;
|
|
@@ -68,6 +70,274 @@ export default class HMLEParser {
|
|
|
68
70
|
return { block: content.slice(start + 1, i - 1), end: i };
|
|
69
71
|
}
|
|
70
72
|
|
|
73
|
+
private static isIdentifierStart(ch: string): boolean {
|
|
74
|
+
return /[A-Za-z_$]/.test(ch);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private static isIdentifierPart(ch: string): boolean {
|
|
78
|
+
return /[A-Za-z0-9_$]/.test(ch);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
private static transformDefStatements(code: string): string {
|
|
82
|
+
if (!code.includes('def')) return code;
|
|
83
|
+
|
|
84
|
+
let result = '';
|
|
85
|
+
let i = 0;
|
|
86
|
+
const len = code.length;
|
|
87
|
+
let inSingle = false;
|
|
88
|
+
let inDouble = false;
|
|
89
|
+
let inTemplate = false;
|
|
90
|
+
let inLineComment = false;
|
|
91
|
+
let inBlockComment = false;
|
|
92
|
+
let escape = false;
|
|
93
|
+
|
|
94
|
+
while (i < len) {
|
|
95
|
+
const ch = code[i];
|
|
96
|
+
|
|
97
|
+
if (inLineComment) {
|
|
98
|
+
result += ch;
|
|
99
|
+
if (ch === '\n') inLineComment = false;
|
|
100
|
+
i++;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (inBlockComment) {
|
|
105
|
+
result += ch;
|
|
106
|
+
if (ch === '*' && code[i + 1] === '/') {
|
|
107
|
+
result += '/';
|
|
108
|
+
i += 2;
|
|
109
|
+
inBlockComment = false;
|
|
110
|
+
} else {
|
|
111
|
+
i++;
|
|
112
|
+
}
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (inSingle) {
|
|
117
|
+
result += ch;
|
|
118
|
+
if (!escape && ch === '\\') {
|
|
119
|
+
escape = true;
|
|
120
|
+
} else {
|
|
121
|
+
if (!escape && ch === "'") inSingle = false;
|
|
122
|
+
escape = false;
|
|
123
|
+
}
|
|
124
|
+
i++;
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (inDouble) {
|
|
129
|
+
result += ch;
|
|
130
|
+
if (!escape && ch === '\\') {
|
|
131
|
+
escape = true;
|
|
132
|
+
} else {
|
|
133
|
+
if (!escape && ch === '"') inDouble = false;
|
|
134
|
+
escape = false;
|
|
135
|
+
}
|
|
136
|
+
i++;
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (inTemplate) {
|
|
141
|
+
result += ch;
|
|
142
|
+
if (!escape && ch === '\\') {
|
|
143
|
+
escape = true;
|
|
144
|
+
} else {
|
|
145
|
+
if (!escape && ch === '`') inTemplate = false;
|
|
146
|
+
escape = false;
|
|
147
|
+
}
|
|
148
|
+
i++;
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (ch === '/' && code[i + 1] === '/') {
|
|
153
|
+
inLineComment = true;
|
|
154
|
+
result += ch;
|
|
155
|
+
i++;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (ch === '/' && code[i + 1] === '*') {
|
|
160
|
+
inBlockComment = true;
|
|
161
|
+
result += ch;
|
|
162
|
+
i++;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (ch === "'") {
|
|
167
|
+
inSingle = true;
|
|
168
|
+
result += ch;
|
|
169
|
+
i++;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (ch === '"') {
|
|
174
|
+
inDouble = true;
|
|
175
|
+
result += ch;
|
|
176
|
+
i++;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (ch === '`') {
|
|
181
|
+
inTemplate = true;
|
|
182
|
+
result += ch;
|
|
183
|
+
i++;
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (code.startsWith('def', i) && (i === 0 || !HMLEParser.isIdentifierPart(code[i - 1])) && (i + 3 >= len || /\s/.test(code[i + 3]))) {
|
|
188
|
+
const defResult = HMLEParser.extractDefStatement(code, i);
|
|
189
|
+
if (defResult) {
|
|
190
|
+
result += defResult.replacement;
|
|
191
|
+
i = defResult.nextIndex;
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
result += ch;
|
|
197
|
+
i++;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private static extractDefStatement(code: string, start: number): { replacement: string; nextIndex: number } | null {
|
|
204
|
+
const len = code.length;
|
|
205
|
+
let i = start + 3;
|
|
206
|
+
|
|
207
|
+
while (i < len && /\s/.test(code[i])) i++;
|
|
208
|
+
if (i >= len || !HMLEParser.isIdentifierStart(code[i])) return null;
|
|
209
|
+
|
|
210
|
+
const nameStart = i;
|
|
211
|
+
i++;
|
|
212
|
+
while (i < len && HMLEParser.isIdentifierPart(code[i])) i++;
|
|
213
|
+
const name = code.slice(nameStart, i);
|
|
214
|
+
|
|
215
|
+
while (i < len && /\s/.test(code[i])) i++;
|
|
216
|
+
if (i >= len || code[i] !== '=') return null;
|
|
217
|
+
i++; // skip '='
|
|
218
|
+
while (i < len && /\s/.test(code[i])) i++;
|
|
219
|
+
|
|
220
|
+
const exprInfo = HMLEParser.extractDefExpression(code, i);
|
|
221
|
+
if (!exprInfo) return null;
|
|
222
|
+
|
|
223
|
+
const replacement = `(void __hmle_def__("${name}", (${exprInfo.expression})))` + (exprInfo.terminatedWithSemicolon ? ';' : '');
|
|
224
|
+
return { replacement, nextIndex: exprInfo.nextIndex };
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
private static extractDefExpression(code: string, start: number): { expression: string; nextIndex: number; terminatedWithSemicolon: boolean } | null {
|
|
228
|
+
const len = code.length;
|
|
229
|
+
let i = start;
|
|
230
|
+
let depthParen = 0;
|
|
231
|
+
let depthBrace = 0;
|
|
232
|
+
let depthBracket = 0;
|
|
233
|
+
let inSingle = false;
|
|
234
|
+
let inDouble = false;
|
|
235
|
+
let inTemplate = false;
|
|
236
|
+
let inLineComment = false;
|
|
237
|
+
let inBlockComment = false;
|
|
238
|
+
let escape = false;
|
|
239
|
+
|
|
240
|
+
while (i < len) {
|
|
241
|
+
const ch = code[i];
|
|
242
|
+
|
|
243
|
+
if (inLineComment) {
|
|
244
|
+
if (ch === '\n') inLineComment = false;
|
|
245
|
+
i++;
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (inBlockComment) {
|
|
250
|
+
if (ch === '*' && code[i + 1] === '/') {
|
|
251
|
+
i += 2;
|
|
252
|
+
inBlockComment = false;
|
|
253
|
+
} else {
|
|
254
|
+
i++;
|
|
255
|
+
}
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if (inSingle) {
|
|
260
|
+
if (!escape && ch === '\\') {
|
|
261
|
+
escape = true;
|
|
262
|
+
} else {
|
|
263
|
+
if (!escape && ch === "'") inSingle = false;
|
|
264
|
+
escape = false;
|
|
265
|
+
}
|
|
266
|
+
i++;
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
if (inDouble) {
|
|
271
|
+
if (!escape && ch === '\\') {
|
|
272
|
+
escape = true;
|
|
273
|
+
} else {
|
|
274
|
+
if (!escape && ch === '"') inDouble = false;
|
|
275
|
+
escape = false;
|
|
276
|
+
}
|
|
277
|
+
i++;
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
if (inTemplate) {
|
|
282
|
+
if (!escape && ch === '\\') {
|
|
283
|
+
escape = true;
|
|
284
|
+
} else {
|
|
285
|
+
if (!escape && ch === '`') inTemplate = false;
|
|
286
|
+
escape = false;
|
|
287
|
+
}
|
|
288
|
+
i++;
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
if (ch === '/' && code[i + 1] === '/') {
|
|
293
|
+
inLineComment = true;
|
|
294
|
+
i += 2;
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (ch === '/' && code[i + 1] === '*') {
|
|
299
|
+
inBlockComment = true;
|
|
300
|
+
i += 2;
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
if (ch === "'") {
|
|
305
|
+
inSingle = true;
|
|
306
|
+
i++;
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
if (ch === '"') {
|
|
311
|
+
inDouble = true;
|
|
312
|
+
i++;
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (ch === '`') {
|
|
317
|
+
inTemplate = true;
|
|
318
|
+
i++;
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
if (ch === '(') depthParen++;
|
|
323
|
+
else if (ch === ')') depthParen = Math.max(0, depthParen - 1);
|
|
324
|
+
else if (ch === '{') depthBrace++;
|
|
325
|
+
else if (ch === '}') depthBrace = Math.max(0, depthBrace - 1);
|
|
326
|
+
else if (ch === '[') depthBracket++;
|
|
327
|
+
else if (ch === ']') depthBracket = Math.max(0, depthBracket - 1);
|
|
328
|
+
|
|
329
|
+
if (ch === ';' && depthParen === 0 && depthBrace === 0 && depthBracket === 0) {
|
|
330
|
+
const expression = code.slice(start, i).trim();
|
|
331
|
+
return { expression, nextIndex: i + 1, terminatedWithSemicolon: true };
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
i++;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
const expression = code.slice(start).trim();
|
|
338
|
+
return { expression, nextIndex: len, terminatedWithSemicolon: false };
|
|
339
|
+
}
|
|
340
|
+
|
|
71
341
|
// Predefined rules processed in order
|
|
72
342
|
private static rules: HMLEParserRule[] = [
|
|
73
343
|
// Rule: @for (item in items) { ... }
|
|
@@ -90,24 +360,37 @@ export default class HMLEParser {
|
|
|
90
360
|
if (!extracted) return match[0];
|
|
91
361
|
|
|
92
362
|
const inner = extracted.block;
|
|
93
|
-
// Support numeric literal or expression that resolves to a number
|
|
363
|
+
// Support numeric literal or expression that resolves to a number/iterable
|
|
94
364
|
let arr: any[] = [];
|
|
365
|
+
let unresolvedIterable = false;
|
|
95
366
|
// If the iterable part is a plain number literal, use it directly
|
|
96
367
|
if (/^\d+$/.test(iterableExpr)) {
|
|
97
368
|
const n = parseInt(iterableExpr, 10);
|
|
98
369
|
arr = Array.from({ length: Math.max(0, n) }, (_, i) => i);
|
|
99
370
|
} else {
|
|
100
371
|
const resolved = parser.resolveExpression(iterableExpr, scope);
|
|
101
|
-
if (
|
|
372
|
+
if (resolved == null) {
|
|
373
|
+
unresolvedIterable = true;
|
|
374
|
+
} else if (typeof resolved === 'number' && isFinite(resolved)) {
|
|
102
375
|
const n = Math.max(0, Math.floor(resolved));
|
|
103
376
|
arr = Array.from({ length: n }, (_, i) => i);
|
|
104
377
|
} else if (Array.isArray(resolved)) {
|
|
105
378
|
arr = resolved;
|
|
379
|
+
} else if (typeof (resolved as any)[Symbol.iterator] === 'function') {
|
|
380
|
+
arr = Array.from(resolved as Iterable<any>);
|
|
381
|
+
} else if (typeof resolved === 'object' && typeof (resolved as any).length === 'number') {
|
|
382
|
+
arr = Array.from(resolved as ArrayLike<any>);
|
|
106
383
|
} else {
|
|
107
384
|
arr = [];
|
|
108
385
|
}
|
|
109
386
|
}
|
|
110
387
|
|
|
388
|
+
if (unresolvedIterable) {
|
|
389
|
+
const fullBlock = input.slice(match.index, extracted.end);
|
|
390
|
+
const placeholder = parser.deferBlock(fullBlock);
|
|
391
|
+
return { text: placeholder, end: extracted.end };
|
|
392
|
+
}
|
|
393
|
+
|
|
111
394
|
const parts: string[] = [];
|
|
112
395
|
for (let i = 0; i < arr.length; i++) {
|
|
113
396
|
const item = arr[i];
|
|
@@ -134,16 +417,66 @@ export default class HMLEParser {
|
|
|
134
417
|
const extracted = HMLEParser.extractBalancedParens(input, blockStart);
|
|
135
418
|
if (!extracted) return match[0];
|
|
136
419
|
|
|
137
|
-
const
|
|
420
|
+
const originalCode = extracted.block;
|
|
421
|
+
const code = HMLEParser.transformDefStatements(originalCode);
|
|
138
422
|
const ctx = parser.buildContext(scope);
|
|
423
|
+
const assignToScope = (prop: string, value: any) => {
|
|
424
|
+
(ctx as any)[prop] = value;
|
|
425
|
+
if (scope) (scope as any)[prop] = value;
|
|
426
|
+
else parser.variables[prop] = value;
|
|
427
|
+
return value;
|
|
428
|
+
};
|
|
429
|
+
(ctx as any).__hmle_def__ = (prop: string, value: any) => assignToScope(prop, value);
|
|
430
|
+
const execCtx = new Proxy(ctx, {
|
|
431
|
+
set(target, prop, value) {
|
|
432
|
+
(target as any)[prop as any] = value;
|
|
433
|
+
return true;
|
|
434
|
+
},
|
|
435
|
+
get(target, prop) {
|
|
436
|
+
return (target as any)[prop as any];
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
// Prepare code transformation rules:
|
|
440
|
+
// - If the code is a single assignment (no semicolons), execute it but suppress output
|
|
441
|
+
// - If code contains multiple statements separated by semicolons, transform so the
|
|
442
|
+
// last non-empty statement becomes a returned value so it is printed
|
|
443
|
+
let processedCode = code;
|
|
444
|
+
let suppressOutput = false;
|
|
445
|
+
const trimmedCode = code.trim();
|
|
446
|
+
|
|
447
|
+
if (trimmedCode.indexOf(';') === -1) {
|
|
448
|
+
// No semicolons: detect simple assignment like `a = 1` or `a += 1` and suppress output
|
|
449
|
+
// Match assignment ops (=, +=, -=, *=, /=, %=)
|
|
450
|
+
if (/^[A-Za-z_$][A-Za-z0-9_$]*\s*(?:[+\-*/%]?=)\s*[\s\S]+$/.test(trimmedCode)) {
|
|
451
|
+
suppressOutput = true;
|
|
452
|
+
}
|
|
453
|
+
} else {
|
|
454
|
+
// Multi-statement: if the user used an explicit `return` anywhere,
|
|
455
|
+
// wrap original code in an IIFE so that `return` works as expected.
|
|
456
|
+
if (/\breturn\b/.test(code)) {
|
|
457
|
+
processedCode = '(function(){' + code + '})()';
|
|
458
|
+
} else {
|
|
459
|
+
// Fallback: return the last non-empty statement's value
|
|
460
|
+
const parts = code.split(';');
|
|
461
|
+
let last = parts.length - 1;
|
|
462
|
+
while (last >= 0 && parts[last].trim() === '') last--;
|
|
463
|
+
if (last >= 0) {
|
|
464
|
+
const head = parts.slice(0, last).join(';');
|
|
465
|
+
const lastExpr = parts[last];
|
|
466
|
+
// Build a small IIFE that runs the head and returns the last expression's value
|
|
467
|
+
processedCode = '(function(){' + (head ? head + ';' : '') + ' return (' + lastExpr + '); })()';
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
139
472
|
let result: any;
|
|
140
473
|
try {
|
|
141
|
-
const fn = new Function('with(this){ return (' +
|
|
142
|
-
result = fn.call(
|
|
474
|
+
const fn = new Function('with(this){ return (' + processedCode + '); }');
|
|
475
|
+
result = fn.call(execCtx);
|
|
143
476
|
} catch (e) {
|
|
144
477
|
try {
|
|
145
|
-
const fn2 = new Function('with(this){ ' +
|
|
146
|
-
result = fn2.call(
|
|
478
|
+
const fn2 = new Function('with(this){ ' + processedCode + ' }');
|
|
479
|
+
result = fn2.call(execCtx);
|
|
147
480
|
} catch (e2) {
|
|
148
481
|
return { text: '', end: extracted.end };
|
|
149
482
|
}
|
|
@@ -153,7 +486,12 @@ export default class HMLEParser {
|
|
|
153
486
|
let finalEnd = extracted.end;
|
|
154
487
|
if (input[extracted.end] === ')') finalEnd = extracted.end + 1;
|
|
155
488
|
|
|
156
|
-
|
|
489
|
+
// If result is non-primitive (object/function) or null/undefined - do not print
|
|
490
|
+
let finalText = '';
|
|
491
|
+
if (!suppressOutput && result != null && typeof result !== 'object' && typeof result !== 'function') {
|
|
492
|
+
finalText = parser.stringifyValue(result);
|
|
493
|
+
}
|
|
494
|
+
return { text: finalText, end: finalEnd };
|
|
157
495
|
}
|
|
158
496
|
),
|
|
159
497
|
|
|
@@ -165,22 +503,68 @@ export default class HMLEParser {
|
|
|
165
503
|
const extracted = HMLEParser.extractBalancedParens(input, blockStart);
|
|
166
504
|
if (!extracted) return match[0];
|
|
167
505
|
|
|
168
|
-
const
|
|
506
|
+
const originalCode = extracted.block;
|
|
507
|
+
const code = HMLEParser.transformDefStatements(originalCode);
|
|
169
508
|
const ctx = parser.buildContext(scope);
|
|
509
|
+
const assignToScope = (prop: string, value: any) => {
|
|
510
|
+
(ctx as any)[prop] = value;
|
|
511
|
+
if (scope) (scope as any)[prop] = value;
|
|
512
|
+
else parser.variables[prop] = value;
|
|
513
|
+
return value;
|
|
514
|
+
};
|
|
515
|
+
(ctx as any).__hmle_def__ = (prop: string, value: any) => assignToScope(prop, value);
|
|
516
|
+
const execCtx = new Proxy(ctx, {
|
|
517
|
+
set(target, prop, value) {
|
|
518
|
+
(target as any)[prop as any] = value;
|
|
519
|
+
return true;
|
|
520
|
+
},
|
|
521
|
+
get(target, prop) {
|
|
522
|
+
return (target as any)[prop as any];
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
// Prepare processed code / suppression rules similar to double-paren handling
|
|
526
|
+
let processedCode = code;
|
|
527
|
+
let suppressOutput = false;
|
|
528
|
+
const trimmedCode = code.trim();
|
|
529
|
+
|
|
530
|
+
if (trimmedCode.indexOf(';') === -1) {
|
|
531
|
+
if (/^[A-Za-z_$][A-Za-z0-9_$]*\s*(?:[+\-*/%]?=)\s*[\s\S]+$/.test(trimmedCode)) {
|
|
532
|
+
suppressOutput = true;
|
|
533
|
+
}
|
|
534
|
+
} else {
|
|
535
|
+
// Multi-statement -> if explicit return used, wrap as-is in IIFE
|
|
536
|
+
if (/\breturn\b/.test(code)) {
|
|
537
|
+
processedCode = '(function(){' + code + '})()';
|
|
538
|
+
} else {
|
|
539
|
+
const parts = code.split(';');
|
|
540
|
+
let last = parts.length - 1;
|
|
541
|
+
while (last >= 0 && parts[last].trim() === '') last--;
|
|
542
|
+
if (last >= 0) {
|
|
543
|
+
const head = parts.slice(0, last).join(';');
|
|
544
|
+
const lastExpr = parts[last];
|
|
545
|
+
processedCode = '(function(){' + (head ? head + ';' : '') + ' return (' + lastExpr + '); })()';
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
|
|
170
550
|
let result: any;
|
|
171
551
|
try {
|
|
172
|
-
const fn = new Function('with(this){ return (' +
|
|
173
|
-
result = fn.call(
|
|
552
|
+
const fn = new Function('with(this){ return (' + processedCode + '); }');
|
|
553
|
+
result = fn.call(execCtx);
|
|
174
554
|
} catch (e) {
|
|
175
555
|
try {
|
|
176
|
-
const fn2 = new Function('with(this){ ' +
|
|
177
|
-
result = fn2.call(
|
|
556
|
+
const fn2 = new Function('with(this){ ' + processedCode + ' }');
|
|
557
|
+
result = fn2.call(execCtx);
|
|
178
558
|
} catch (e2) {
|
|
179
559
|
return { text: '', end: extracted.end };
|
|
180
560
|
}
|
|
181
561
|
}
|
|
182
562
|
|
|
183
|
-
|
|
563
|
+
let finalText = '';
|
|
564
|
+
if (!suppressOutput && result != null && typeof result !== 'object' && typeof result !== 'function') {
|
|
565
|
+
finalText = parser.stringifyValue(result);
|
|
566
|
+
}
|
|
567
|
+
return { text: finalText, end: extracted.end };
|
|
184
568
|
}
|
|
185
569
|
),
|
|
186
570
|
];
|
|
@@ -404,41 +788,78 @@ export default class HMLEParser {
|
|
|
404
788
|
*/
|
|
405
789
|
public parse(content: string, scope?: Record<string, any>): string {
|
|
406
790
|
let working = content;
|
|
791
|
+
const maxPasses = 5;
|
|
792
|
+
let pass = 0;
|
|
793
|
+
const deferredBlocks = new Map<string, string>();
|
|
794
|
+
this.deferredBlocksStack.push(deferredBlocks);
|
|
407
795
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
796
|
+
try {
|
|
797
|
+
while (pass < maxPasses) {
|
|
798
|
+
let passChanged = false;
|
|
799
|
+
deferredBlocks.clear();
|
|
800
|
+
|
|
801
|
+
for (const rule of HMLEParser.rules) {
|
|
802
|
+
const pattern = rule.pattern;
|
|
803
|
+
let result = '';
|
|
804
|
+
let lastIndex = 0;
|
|
805
|
+
let match: RegExpExecArray | null;
|
|
806
|
+
|
|
807
|
+
pattern.lastIndex = 0;
|
|
808
|
+
while ((match = pattern.exec(working)) !== null) {
|
|
809
|
+
result += working.slice(lastIndex, match.index);
|
|
810
|
+
|
|
811
|
+
const out = rule.replacer(this, match, working, scope);
|
|
812
|
+
|
|
813
|
+
if (typeof out === 'string') {
|
|
814
|
+
result += out;
|
|
815
|
+
lastIndex = match.index + match[0].length;
|
|
816
|
+
} else {
|
|
817
|
+
result += out.text;
|
|
818
|
+
lastIndex = out.end;
|
|
819
|
+
}
|
|
413
820
|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
while ((match = pattern.exec(working)) !== null) {
|
|
417
|
-
// Append text before this match
|
|
418
|
-
result += working.slice(lastIndex, match.index);
|
|
821
|
+
pattern.lastIndex = lastIndex;
|
|
822
|
+
}
|
|
419
823
|
|
|
420
|
-
|
|
824
|
+
result += working.slice(lastIndex);
|
|
421
825
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
result += out.text;
|
|
427
|
-
lastIndex = out.end;
|
|
826
|
+
if (result !== working) {
|
|
827
|
+
passChanged = true;
|
|
828
|
+
working = result;
|
|
829
|
+
}
|
|
428
830
|
}
|
|
429
831
|
|
|
430
|
-
|
|
431
|
-
pattern.lastIndex = lastIndex;
|
|
432
|
-
}
|
|
832
|
+
working = this.restoreDeferredBlocks(working);
|
|
433
833
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
834
|
+
if (!passChanged) break;
|
|
835
|
+
pass++;
|
|
836
|
+
}
|
|
837
|
+
} finally {
|
|
838
|
+
this.deferredBlocksStack.pop();
|
|
437
839
|
}
|
|
438
840
|
|
|
439
841
|
return working;
|
|
440
842
|
}
|
|
441
843
|
|
|
844
|
+
private deferBlock(content: string): string {
|
|
845
|
+
const stack = this.deferredBlocksStack[this.deferredBlocksStack.length - 1];
|
|
846
|
+
if (!stack) return content;
|
|
847
|
+
const token = `__HMLE_PENDING_BLOCK_${this.deferredBlockCounter++}__`;
|
|
848
|
+
stack.set(token, content);
|
|
849
|
+
return token;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
private restoreDeferredBlocks(text: string): string {
|
|
853
|
+
const stack = this.deferredBlocksStack[this.deferredBlocksStack.length - 1];
|
|
854
|
+
if (!stack || stack.size === 0) return text;
|
|
855
|
+
let restored = text;
|
|
856
|
+
for (const [token, content] of stack.entries()) {
|
|
857
|
+
restored = restored.replace(token, content);
|
|
858
|
+
}
|
|
859
|
+
stack.clear();
|
|
860
|
+
return restored;
|
|
861
|
+
}
|
|
862
|
+
|
|
442
863
|
/**
|
|
443
864
|
* Stage 2: Process DOM rules on a fragment
|
|
444
865
|
* Walks all elements and applies DOM rules based on attributes
|