@knowvah/dot-engine 2.6.5 → 2.6.7

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/index.js CHANGED
@@ -155,21 +155,21 @@ function peg$parse(input, options) {
155
155
  const peg$r22 = /^[^\n]/;
156
156
  const peg$e0 = peg$literalExpectation("{", false);
157
157
  const peg$e1 = peg$literalExpectation("}", false);
158
- const peg$e2 = peg$literalExpectation(";", false);
159
- const peg$e3 = peg$literalExpectation("=", false);
160
- const peg$e4 = peg$literalExpectation("[", false);
161
- const peg$e5 = peg$literalExpectation("]", false);
162
- const peg$e6 = peg$classExpectation([";", ","], false, false, false);
163
- const peg$e7 = peg$literalExpectation(":", false);
164
- const peg$e8 = peg$otherExpectation("edge operator");
165
- const peg$e9 = peg$literalExpectation("->", false);
166
- const peg$e10 = peg$literalExpectation("--", false);
167
- const peg$e11 = peg$literalExpectation("+", false);
168
- const peg$e12 = peg$literalExpectation('"', false);
169
- const peg$e13 = peg$literalExpectation('\\"', false);
170
- const peg$e14 = peg$literalExpectation("\\\n", false);
171
- const peg$e15 = peg$literalExpectation("\\", false);
172
- const peg$e16 = peg$anyExpectation();
158
+ const peg$e2 = peg$anyExpectation();
159
+ const peg$e3 = peg$literalExpectation(";", false);
160
+ const peg$e4 = peg$literalExpectation("=", false);
161
+ const peg$e5 = peg$literalExpectation("[", false);
162
+ const peg$e6 = peg$literalExpectation("]", false);
163
+ const peg$e7 = peg$classExpectation([";", ","], false, false, false);
164
+ const peg$e8 = peg$literalExpectation(":", false);
165
+ const peg$e9 = peg$otherExpectation("edge operator");
166
+ const peg$e10 = peg$literalExpectation("->", false);
167
+ const peg$e11 = peg$literalExpectation("--", false);
168
+ const peg$e12 = peg$literalExpectation("+", false);
169
+ const peg$e13 = peg$literalExpectation('"', false);
170
+ const peg$e14 = peg$literalExpectation('\\"', false);
171
+ const peg$e15 = peg$literalExpectation("\\\n", false);
172
+ const peg$e16 = peg$literalExpectation("\\", false);
173
173
  const peg$e17 = peg$classExpectation(['"', "\\"], true, false, false);
174
174
  const peg$e18 = peg$literalExpectation("<", false);
175
175
  const peg$e19 = peg$literalExpectation(">", false);
@@ -201,86 +201,90 @@ function peg$parse(input, options) {
201
201
  const peg$e45 = peg$classExpectation(["\n"], true, false, false);
202
202
  const peg$e46 = peg$literalExpectation("\n", false);
203
203
  const peg$e47 = peg$literalExpectation("#", false);
204
- function peg$f0(s, t, id, stmts) {
204
+ function peg$f0(s, t, id, stmts, end) {
205
205
  return {
206
206
  type: "graph",
207
207
  strict: s,
208
208
  directed: t,
209
209
  id,
210
- stmts
210
+ stmts,
211
+ end
211
212
  };
212
213
  }
213
214
  function peg$f1() {
214
- return { type: "graph", strict: false, directed: false, id: null, stmts: [] };
215
+ return { type: "graph", strict: false, directed: false, id: null, stmts: [], end: text().length };
215
216
  }
216
217
  function peg$f2() {
217
- return true;
218
+ return offset();
218
219
  }
219
220
  function peg$f3() {
220
- return false;
221
+ return true;
221
222
  }
222
223
  function peg$f4() {
223
- return true;
224
+ return false;
224
225
  }
225
226
  function peg$f5() {
227
+ return true;
228
+ }
229
+ function peg$f6() {
226
230
  return false;
227
231
  }
228
- function peg$f6(a) {
232
+ function peg$f7(a) {
229
233
  return a;
230
234
  }
231
- function peg$f7() {
235
+ function peg$f8() {
232
236
  return null;
233
237
  }
234
- function peg$f8(s) {
238
+ function peg$f9(s) {
235
239
  return s;
236
240
  }
237
- function peg$f9(stmts) {
241
+ function peg$f10(stmts) {
238
242
  return stmts;
239
243
  }
240
- function peg$f10(s) {
244
+ function peg$f11(s) {
241
245
  return s;
242
246
  }
243
- function peg$f11(s) {
247
+ function peg$f12(s) {
244
248
  return s;
245
249
  }
246
- function peg$f12(t, m, attrs) {
250
+ function peg$f13(t, m, attrs) {
247
251
  if (m) console.error("Warning: attribute macros not implemented");
248
252
  return { type: "attr", target: t, attrs };
249
253
  }
250
- function peg$f13(a) {
254
+ function peg$f14(a) {
251
255
  return { type: "assign", key: a.key, value: a.value };
252
256
  }
253
- function peg$f14() {
257
+ function peg$f15() {
254
258
  return true;
255
259
  }
256
- function peg$f15() {
260
+ function peg$f16() {
257
261
  return false;
258
262
  }
259
- function peg$f16() {
263
+ function peg$f17() {
260
264
  return "graph";
261
265
  }
262
- function peg$f17() {
266
+ function peg$f18() {
263
267
  return "node";
264
268
  }
265
- function peg$f18() {
269
+ function peg$f19() {
266
270
  return "edge";
267
271
  }
268
- function peg$f19(defs, rest) {
272
+ function peg$f20(defs, rest) {
269
273
  return defs.concat(rest);
270
274
  }
271
- function peg$f20() {
275
+ function peg$f21() {
272
276
  return [];
273
277
  }
274
- function peg$f21(a) {
278
+ function peg$f22(a) {
275
279
  return a;
276
280
  }
277
- function peg$f22(pairs) {
281
+ function peg$f23(pairs) {
278
282
  return pairs;
279
283
  }
280
- function peg$f23(k, v) {
284
+ function peg$f24(k, v) {
281
285
  return { key: k, value: v };
282
286
  }
283
- function peg$f24(head, chain, attrs) {
287
+ function peg$f25(head, chain, attrs) {
284
288
  if (chain.length > 0) {
285
289
  const nodes = [head].concat(chain);
286
290
  return { type: "edge", nodes, attrs };
@@ -291,70 +295,70 @@ function peg$parse(input, options) {
291
295
  return { type: "node", id: head, attrs };
292
296
  }
293
297
  }
294
- function peg$f25(s) {
298
+ function peg$f26(s) {
295
299
  return s;
296
300
  }
297
- function peg$f26(n) {
301
+ function peg$f27(n) {
298
302
  return n;
299
303
  }
300
- function peg$f27(id, port, compass) {
304
+ function peg$f28(id, port, compass) {
301
305
  return { id, port, compass };
302
306
  }
303
- function peg$f28(id, port) {
307
+ function peg$f29(id, port) {
304
308
  return { id, port, compass: null };
305
309
  }
306
- function peg$f29(id) {
310
+ function peg$f30(id) {
307
311
  return { id, port: null, compass: null };
308
312
  }
309
- function peg$f30(s, rest) {
313
+ function peg$f31(s, rest) {
310
314
  return [s].concat(rest);
311
315
  }
312
- function peg$f31() {
316
+ function peg$f32() {
313
317
  return [];
314
318
  }
315
- function peg$f32(id, stmts) {
319
+ function peg$f33(id, stmts) {
316
320
  return { type: "subgraph", id, stmts };
317
321
  }
318
- function peg$f33(stmts) {
322
+ function peg$f34(stmts) {
319
323
  return { type: "subgraph", id: null, stmts };
320
324
  }
321
- function peg$f34(stmts) {
325
+ function peg$f35(stmts) {
322
326
  return { type: "subgraph", id: null, stmts };
323
327
  }
324
- function peg$f35(first, s) {
328
+ function peg$f36(first, s) {
325
329
  return s;
326
330
  }
327
- function peg$f36(first, rest) {
331
+ function peg$f37(first, rest) {
328
332
  return rest.length > 0 ? first + rest.join("") : first;
329
333
  }
330
- function peg$f37(chars) {
334
+ function peg$f38(chars) {
331
335
  return chars.join("");
332
336
  }
333
- function peg$f38() {
337
+ function peg$f39() {
334
338
  return '"';
335
339
  }
336
- function peg$f39() {
340
+ function peg$f40() {
337
341
  return "";
338
342
  }
339
- function peg$f40(c) {
343
+ function peg$f41(c) {
340
344
  return "\\" + c;
341
345
  }
342
- function peg$f41(content) {
346
+ function peg$f42(content) {
343
347
  return "" + content;
344
348
  }
345
- function peg$f42(chars) {
349
+ function peg$f43(chars) {
346
350
  return chars.join("");
347
351
  }
348
- function peg$f43(nested2, content) {
352
+ function peg$f44(nested2, content) {
349
353
  return "<" + content + ">";
350
354
  }
351
- function peg$f44(n) {
355
+ function peg$f45(n) {
352
356
  return n;
353
357
  }
354
- function peg$f45(first, rest) {
358
+ function peg$f46(first, rest) {
355
359
  return first + rest.join("");
356
360
  }
357
- function peg$f46(s) {
361
+ function peg$f47(s) {
358
362
  return Array.isArray(s) ? s.flat(Infinity).filter((x) => x !== null && x !== void 0).join("") : String(s);
359
363
  }
360
364
  let peg$currPos = options.peg$currPos | 0;
@@ -530,9 +534,9 @@ function peg$parse(input, options) {
530
534
  }
531
535
  }
532
536
  if (s122 !== peg$FAILED) {
533
- s13 = peg$parse_();
537
+ s13 = peg$parseGraphEof();
534
538
  peg$savedPos = s0;
535
- s0 = peg$f0(s2, s4, s6, s10);
539
+ s0 = peg$f0(s2, s4, s6, s10, s13);
536
540
  } else {
537
541
  peg$currPos = s0;
538
542
  s0 = peg$FAILED;
@@ -562,6 +566,36 @@ function peg$parse(input, options) {
562
566
  }
563
567
  return s0;
564
568
  }
569
+ function peg$parseGraphEof() {
570
+ let s0, s12, s2;
571
+ s0 = peg$currPos;
572
+ s12 = [];
573
+ if (input.length > peg$currPos) {
574
+ s2 = input.charAt(peg$currPos);
575
+ peg$currPos++;
576
+ } else {
577
+ s2 = peg$FAILED;
578
+ if (peg$silentFails === 0) {
579
+ peg$fail(peg$e2);
580
+ }
581
+ }
582
+ while (s2 !== peg$FAILED) {
583
+ s12.push(s2);
584
+ if (input.length > peg$currPos) {
585
+ s2 = input.charAt(peg$currPos);
586
+ peg$currPos++;
587
+ } else {
588
+ s2 = peg$FAILED;
589
+ if (peg$silentFails === 0) {
590
+ peg$fail(peg$e2);
591
+ }
592
+ }
593
+ }
594
+ peg$savedPos = s0;
595
+ s12 = peg$f2();
596
+ s0 = s12;
597
+ return s0;
598
+ }
565
599
  function peg$parseOptStrict() {
566
600
  let s0, s12, s2;
567
601
  s0 = peg$currPos;
@@ -569,7 +603,7 @@ function peg$parse(input, options) {
569
603
  if (s12 !== peg$FAILED) {
570
604
  s2 = peg$parse_();
571
605
  peg$savedPos = s0;
572
- s0 = peg$f2();
606
+ s0 = peg$f3();
573
607
  } else {
574
608
  peg$currPos = s0;
575
609
  s0 = peg$FAILED;
@@ -578,7 +612,7 @@ function peg$parse(input, options) {
578
612
  s0 = peg$currPos;
579
613
  s12 = "";
580
614
  peg$savedPos = s0;
581
- s12 = peg$f3();
615
+ s12 = peg$f4();
582
616
  s0 = s12;
583
617
  }
584
618
  return s0;
@@ -589,7 +623,7 @@ function peg$parse(input, options) {
589
623
  s12 = peg$parseDigraphKw();
590
624
  if (s12 !== peg$FAILED) {
591
625
  peg$savedPos = s0;
592
- s12 = peg$f4();
626
+ s12 = peg$f5();
593
627
  }
594
628
  s0 = s12;
595
629
  if (s0 === peg$FAILED) {
@@ -597,7 +631,7 @@ function peg$parse(input, options) {
597
631
  s12 = peg$parseGraphKw();
598
632
  if (s12 !== peg$FAILED) {
599
633
  peg$savedPos = s0;
600
- s12 = peg$f5();
634
+ s12 = peg$f6();
601
635
  }
602
636
  s0 = s12;
603
637
  }
@@ -610,7 +644,7 @@ function peg$parse(input, options) {
610
644
  if (s12 !== peg$FAILED) {
611
645
  s2 = peg$parse_();
612
646
  peg$savedPos = s0;
613
- s0 = peg$f6(s12);
647
+ s0 = peg$f7(s12);
614
648
  } else {
615
649
  peg$currPos = s0;
616
650
  s0 = peg$FAILED;
@@ -619,7 +653,7 @@ function peg$parse(input, options) {
619
653
  s0 = peg$currPos;
620
654
  s12 = "";
621
655
  peg$savedPos = s0;
622
- s12 = peg$f7();
656
+ s12 = peg$f8();
623
657
  s0 = s12;
624
658
  }
625
659
  return s0;
@@ -633,7 +667,7 @@ function peg$parse(input, options) {
633
667
  if (s3 !== peg$FAILED) {
634
668
  s4 = peg$parse_();
635
669
  peg$savedPos = s2;
636
- s2 = peg$f8(s3);
670
+ s2 = peg$f9(s3);
637
671
  } else {
638
672
  peg$currPos = s2;
639
673
  s2 = peg$FAILED;
@@ -645,14 +679,14 @@ function peg$parse(input, options) {
645
679
  if (s3 !== peg$FAILED) {
646
680
  s4 = peg$parse_();
647
681
  peg$savedPos = s2;
648
- s2 = peg$f8(s3);
682
+ s2 = peg$f9(s3);
649
683
  } else {
650
684
  peg$currPos = s2;
651
685
  s2 = peg$FAILED;
652
686
  }
653
687
  }
654
688
  peg$savedPos = s0;
655
- s12 = peg$f9(s12);
689
+ s12 = peg$f10(s12);
656
690
  s0 = s12;
657
691
  return s0;
658
692
  }
@@ -669,7 +703,7 @@ function peg$parse(input, options) {
669
703
  } else {
670
704
  s4 = peg$FAILED;
671
705
  if (peg$silentFails === 0) {
672
- peg$fail(peg$e2);
706
+ peg$fail(peg$e3);
673
707
  }
674
708
  }
675
709
  if (s4 !== peg$FAILED) {
@@ -684,7 +718,7 @@ function peg$parse(input, options) {
684
718
  s3 = null;
685
719
  }
686
720
  peg$savedPos = s0;
687
- s0 = peg$f10(s12);
721
+ s0 = peg$f11(s12);
688
722
  } else {
689
723
  peg$currPos = s0;
690
724
  s0 = peg$FAILED;
@@ -701,7 +735,7 @@ function peg$parse(input, options) {
701
735
  } else {
702
736
  s4 = peg$FAILED;
703
737
  if (peg$silentFails === 0) {
704
- peg$fail(peg$e2);
738
+ peg$fail(peg$e3);
705
739
  }
706
740
  }
707
741
  if (s4 !== peg$FAILED) {
@@ -716,7 +750,7 @@ function peg$parse(input, options) {
716
750
  s3 = null;
717
751
  }
718
752
  peg$savedPos = s0;
719
- s0 = peg$f11(s12);
753
+ s0 = peg$f12(s12);
720
754
  } else {
721
755
  peg$currPos = s0;
722
756
  s0 = peg$FAILED;
@@ -735,7 +769,7 @@ function peg$parse(input, options) {
735
769
  s4 = peg$parseAttrListReq();
736
770
  if (s4 !== peg$FAILED) {
737
771
  peg$savedPos = s0;
738
- s0 = peg$f12(s12, s3, s4);
772
+ s0 = peg$f13(s12, s3, s4);
739
773
  } else {
740
774
  peg$currPos = s0;
741
775
  s0 = peg$FAILED;
@@ -753,7 +787,7 @@ function peg$parse(input, options) {
753
787
  s12 = peg$parseAttrAssignment();
754
788
  if (s12 !== peg$FAILED) {
755
789
  peg$savedPos = s0;
756
- s12 = peg$f13(s12);
790
+ s12 = peg$f14(s12);
757
791
  }
758
792
  s0 = s12;
759
793
  }
@@ -771,13 +805,13 @@ function peg$parse(input, options) {
771
805
  } else {
772
806
  s3 = peg$FAILED;
773
807
  if (peg$silentFails === 0) {
774
- peg$fail(peg$e3);
808
+ peg$fail(peg$e4);
775
809
  }
776
810
  }
777
811
  if (s3 !== peg$FAILED) {
778
812
  s4 = peg$parse_();
779
813
  peg$savedPos = s0;
780
- s0 = peg$f14();
814
+ s0 = peg$f15();
781
815
  } else {
782
816
  peg$currPos = s0;
783
817
  s0 = peg$FAILED;
@@ -790,7 +824,7 @@ function peg$parse(input, options) {
790
824
  s0 = peg$currPos;
791
825
  s12 = "";
792
826
  peg$savedPos = s0;
793
- s12 = peg$f15();
827
+ s12 = peg$f16();
794
828
  s0 = s12;
795
829
  }
796
830
  return s0;
@@ -801,7 +835,7 @@ function peg$parse(input, options) {
801
835
  s12 = peg$parseGraphKw();
802
836
  if (s12 !== peg$FAILED) {
803
837
  peg$savedPos = s0;
804
- s12 = peg$f16();
838
+ s12 = peg$f17();
805
839
  }
806
840
  s0 = s12;
807
841
  if (s0 === peg$FAILED) {
@@ -809,7 +843,7 @@ function peg$parse(input, options) {
809
843
  s12 = peg$parseNodeKw();
810
844
  if (s12 !== peg$FAILED) {
811
845
  peg$savedPos = s0;
812
- s12 = peg$f17();
846
+ s12 = peg$f18();
813
847
  }
814
848
  s0 = s12;
815
849
  if (s0 === peg$FAILED) {
@@ -817,7 +851,7 @@ function peg$parse(input, options) {
817
851
  s12 = peg$parseEdgeKw();
818
852
  if (s12 !== peg$FAILED) {
819
853
  peg$savedPos = s0;
820
- s12 = peg$f18();
854
+ s12 = peg$f19();
821
855
  }
822
856
  s0 = s12;
823
857
  }
@@ -834,7 +868,7 @@ function peg$parse(input, options) {
834
868
  } else {
835
869
  s2 = peg$FAILED;
836
870
  if (peg$silentFails === 0) {
837
- peg$fail(peg$e4);
871
+ peg$fail(peg$e5);
838
872
  }
839
873
  }
840
874
  if (s2 !== peg$FAILED) {
@@ -847,14 +881,14 @@ function peg$parse(input, options) {
847
881
  } else {
848
882
  s6 = peg$FAILED;
849
883
  if (peg$silentFails === 0) {
850
- peg$fail(peg$e5);
884
+ peg$fail(peg$e6);
851
885
  }
852
886
  }
853
887
  if (s6 !== peg$FAILED) {
854
888
  s7 = peg$parseAttrList();
855
889
  if (s7 !== peg$FAILED) {
856
890
  peg$savedPos = s0;
857
- s0 = peg$f19(s4, s7);
891
+ s0 = peg$f20(s4, s7);
858
892
  } else {
859
893
  peg$currPos = s0;
860
894
  s0 = peg$FAILED;
@@ -876,7 +910,7 @@ function peg$parse(input, options) {
876
910
  s0 = peg$currPos;
877
911
  s12 = "";
878
912
  peg$savedPos = s0;
879
- s12 = peg$f20();
913
+ s12 = peg$f21();
880
914
  s0 = s12;
881
915
  }
882
916
  return s0;
@@ -896,7 +930,7 @@ function peg$parse(input, options) {
896
930
  } else {
897
931
  s6 = peg$FAILED;
898
932
  if (peg$silentFails === 0) {
899
- peg$fail(peg$e6);
933
+ peg$fail(peg$e7);
900
934
  }
901
935
  }
902
936
  if (s6 !== peg$FAILED) {
@@ -911,7 +945,7 @@ function peg$parse(input, options) {
911
945
  s5 = null;
912
946
  }
913
947
  peg$savedPos = s2;
914
- s2 = peg$f21(s3);
948
+ s2 = peg$f22(s3);
915
949
  } else {
916
950
  peg$currPos = s2;
917
951
  s2 = peg$FAILED;
@@ -929,7 +963,7 @@ function peg$parse(input, options) {
929
963
  } else {
930
964
  s6 = peg$FAILED;
931
965
  if (peg$silentFails === 0) {
932
- peg$fail(peg$e6);
966
+ peg$fail(peg$e7);
933
967
  }
934
968
  }
935
969
  if (s6 !== peg$FAILED) {
@@ -944,14 +978,14 @@ function peg$parse(input, options) {
944
978
  s5 = null;
945
979
  }
946
980
  peg$savedPos = s2;
947
- s2 = peg$f21(s3);
981
+ s2 = peg$f22(s3);
948
982
  } else {
949
983
  peg$currPos = s2;
950
984
  s2 = peg$FAILED;
951
985
  }
952
986
  }
953
987
  peg$savedPos = s0;
954
- s12 = peg$f22(s12);
988
+ s12 = peg$f23(s12);
955
989
  s0 = s12;
956
990
  return s0;
957
991
  }
@@ -967,7 +1001,7 @@ function peg$parse(input, options) {
967
1001
  } else {
968
1002
  s3 = peg$FAILED;
969
1003
  if (peg$silentFails === 0) {
970
- peg$fail(peg$e3);
1004
+ peg$fail(peg$e4);
971
1005
  }
972
1006
  }
973
1007
  if (s3 !== peg$FAILED) {
@@ -975,7 +1009,7 @@ function peg$parse(input, options) {
975
1009
  s5 = peg$parseAtom();
976
1010
  if (s5 !== peg$FAILED) {
977
1011
  peg$savedPos = s0;
978
- s0 = peg$f23(s12, s5);
1012
+ s0 = peg$f24(s12, s5);
979
1013
  } else {
980
1014
  peg$currPos = s0;
981
1015
  s0 = peg$FAILED;
@@ -1002,7 +1036,7 @@ function peg$parse(input, options) {
1002
1036
  s5 = peg$parseAttrList();
1003
1037
  if (s5 !== peg$FAILED) {
1004
1038
  peg$savedPos = s0;
1005
- s0 = peg$f24(s12, s3, s5);
1039
+ s0 = peg$f25(s12, s3, s5);
1006
1040
  } else {
1007
1041
  peg$currPos = s0;
1008
1042
  s0 = peg$FAILED;
@@ -1023,7 +1057,7 @@ function peg$parse(input, options) {
1023
1057
  s12 = peg$parseSubgraph();
1024
1058
  if (s12 !== peg$FAILED) {
1025
1059
  peg$savedPos = s0;
1026
- s12 = peg$f25(s12);
1060
+ s12 = peg$f26(s12);
1027
1061
  }
1028
1062
  s0 = s12;
1029
1063
  if (s0 === peg$FAILED) {
@@ -1031,7 +1065,7 @@ function peg$parse(input, options) {
1031
1065
  s12 = peg$parseNode();
1032
1066
  if (s12 !== peg$FAILED) {
1033
1067
  peg$savedPos = s0;
1034
- s12 = peg$f26(s12);
1068
+ s12 = peg$f27(s12);
1035
1069
  }
1036
1070
  s0 = s12;
1037
1071
  }
@@ -1049,7 +1083,7 @@ function peg$parse(input, options) {
1049
1083
  } else {
1050
1084
  s3 = peg$FAILED;
1051
1085
  if (peg$silentFails === 0) {
1052
- peg$fail(peg$e7);
1086
+ peg$fail(peg$e8);
1053
1087
  }
1054
1088
  }
1055
1089
  if (s3 !== peg$FAILED) {
@@ -1063,7 +1097,7 @@ function peg$parse(input, options) {
1063
1097
  } else {
1064
1098
  s7 = peg$FAILED;
1065
1099
  if (peg$silentFails === 0) {
1066
- peg$fail(peg$e7);
1100
+ peg$fail(peg$e8);
1067
1101
  }
1068
1102
  }
1069
1103
  if (s7 !== peg$FAILED) {
@@ -1071,7 +1105,7 @@ function peg$parse(input, options) {
1071
1105
  s9 = peg$parseAtom();
1072
1106
  if (s9 !== peg$FAILED) {
1073
1107
  peg$savedPos = s0;
1074
- s0 = peg$f27(s12, s5, s9);
1108
+ s0 = peg$f28(s12, s5, s9);
1075
1109
  } else {
1076
1110
  peg$currPos = s0;
1077
1111
  s0 = peg$FAILED;
@@ -1103,7 +1137,7 @@ function peg$parse(input, options) {
1103
1137
  } else {
1104
1138
  s3 = peg$FAILED;
1105
1139
  if (peg$silentFails === 0) {
1106
- peg$fail(peg$e7);
1140
+ peg$fail(peg$e8);
1107
1141
  }
1108
1142
  }
1109
1143
  if (s3 !== peg$FAILED) {
@@ -1111,7 +1145,7 @@ function peg$parse(input, options) {
1111
1145
  s5 = peg$parseAtom();
1112
1146
  if (s5 !== peg$FAILED) {
1113
1147
  peg$savedPos = s0;
1114
- s0 = peg$f28(s12, s5);
1148
+ s0 = peg$f29(s12, s5);
1115
1149
  } else {
1116
1150
  peg$currPos = s0;
1117
1151
  s0 = peg$FAILED;
@@ -1129,7 +1163,7 @@ function peg$parse(input, options) {
1129
1163
  s12 = peg$parseAtom();
1130
1164
  if (s12 !== peg$FAILED) {
1131
1165
  peg$savedPos = s0;
1132
- s12 = peg$f29(s12);
1166
+ s12 = peg$f30(s12);
1133
1167
  }
1134
1168
  s0 = s12;
1135
1169
  }
@@ -1148,7 +1182,7 @@ function peg$parse(input, options) {
1148
1182
  s5 = peg$parseEdgeChain();
1149
1183
  if (s5 !== peg$FAILED) {
1150
1184
  peg$savedPos = s0;
1151
- s0 = peg$f30(s3, s5);
1185
+ s0 = peg$f31(s3, s5);
1152
1186
  } else {
1153
1187
  peg$currPos = s0;
1154
1188
  s0 = peg$FAILED;
@@ -1165,7 +1199,7 @@ function peg$parse(input, options) {
1165
1199
  s0 = peg$currPos;
1166
1200
  s12 = "";
1167
1201
  peg$savedPos = s0;
1168
- s12 = peg$f31();
1202
+ s12 = peg$f32();
1169
1203
  s0 = s12;
1170
1204
  }
1171
1205
  return s0;
@@ -1179,7 +1213,7 @@ function peg$parse(input, options) {
1179
1213
  } else {
1180
1214
  s0 = peg$FAILED;
1181
1215
  if (peg$silentFails === 0) {
1182
- peg$fail(peg$e9);
1216
+ peg$fail(peg$e10);
1183
1217
  }
1184
1218
  }
1185
1219
  if (s0 === peg$FAILED) {
@@ -1189,7 +1223,7 @@ function peg$parse(input, options) {
1189
1223
  } else {
1190
1224
  s0 = peg$FAILED;
1191
1225
  if (peg$silentFails === 0) {
1192
- peg$fail(peg$e10);
1226
+ peg$fail(peg$e11);
1193
1227
  }
1194
1228
  }
1195
1229
  }
@@ -1197,7 +1231,7 @@ function peg$parse(input, options) {
1197
1231
  if (s0 === peg$FAILED) {
1198
1232
  s12 = peg$FAILED;
1199
1233
  if (peg$silentFails === 0) {
1200
- peg$fail(peg$e8);
1234
+ peg$fail(peg$e9);
1201
1235
  }
1202
1236
  }
1203
1237
  return s0;
@@ -1236,7 +1270,7 @@ function peg$parse(input, options) {
1236
1270
  }
1237
1271
  if (s9 !== peg$FAILED) {
1238
1272
  peg$savedPos = s0;
1239
- s0 = peg$f32(s3, s7);
1273
+ s0 = peg$f33(s3, s7);
1240
1274
  } else {
1241
1275
  peg$currPos = s0;
1242
1276
  s0 = peg$FAILED;
@@ -1287,7 +1321,7 @@ function peg$parse(input, options) {
1287
1321
  }
1288
1322
  if (s7 !== peg$FAILED) {
1289
1323
  peg$savedPos = s0;
1290
- s0 = peg$f33(s5);
1324
+ s0 = peg$f34(s5);
1291
1325
  } else {
1292
1326
  peg$currPos = s0;
1293
1327
  s0 = peg$FAILED;
@@ -1331,7 +1365,7 @@ function peg$parse(input, options) {
1331
1365
  }
1332
1366
  if (s5 !== peg$FAILED) {
1333
1367
  peg$savedPos = s0;
1334
- s0 = peg$f34(s3);
1368
+ s0 = peg$f35(s3);
1335
1369
  } else {
1336
1370
  peg$currPos = s0;
1337
1371
  s0 = peg$FAILED;
@@ -1362,7 +1396,7 @@ function peg$parse(input, options) {
1362
1396
  } else {
1363
1397
  s5 = peg$FAILED;
1364
1398
  if (peg$silentFails === 0) {
1365
- peg$fail(peg$e11);
1399
+ peg$fail(peg$e12);
1366
1400
  }
1367
1401
  }
1368
1402
  if (s5 !== peg$FAILED) {
@@ -1370,7 +1404,7 @@ function peg$parse(input, options) {
1370
1404
  s7 = peg$parseQAtom();
1371
1405
  if (s7 !== peg$FAILED) {
1372
1406
  peg$savedPos = s3;
1373
- s3 = peg$f35(s12, s7);
1407
+ s3 = peg$f36(s12, s7);
1374
1408
  } else {
1375
1409
  peg$currPos = s3;
1376
1410
  s3 = peg$FAILED;
@@ -1389,7 +1423,7 @@ function peg$parse(input, options) {
1389
1423
  } else {
1390
1424
  s5 = peg$FAILED;
1391
1425
  if (peg$silentFails === 0) {
1392
- peg$fail(peg$e11);
1426
+ peg$fail(peg$e12);
1393
1427
  }
1394
1428
  }
1395
1429
  if (s5 !== peg$FAILED) {
@@ -1397,7 +1431,7 @@ function peg$parse(input, options) {
1397
1431
  s7 = peg$parseQAtom();
1398
1432
  if (s7 !== peg$FAILED) {
1399
1433
  peg$savedPos = s3;
1400
- s3 = peg$f35(s12, s7);
1434
+ s3 = peg$f36(s12, s7);
1401
1435
  } else {
1402
1436
  peg$currPos = s3;
1403
1437
  s3 = peg$FAILED;
@@ -1408,7 +1442,7 @@ function peg$parse(input, options) {
1408
1442
  }
1409
1443
  }
1410
1444
  peg$savedPos = s0;
1411
- s0 = peg$f36(s12, s2);
1445
+ s0 = peg$f37(s12, s2);
1412
1446
  } else {
1413
1447
  peg$currPos = s0;
1414
1448
  s0 = peg$FAILED;
@@ -1435,7 +1469,7 @@ function peg$parse(input, options) {
1435
1469
  } else {
1436
1470
  s12 = peg$FAILED;
1437
1471
  if (peg$silentFails === 0) {
1438
- peg$fail(peg$e12);
1472
+ peg$fail(peg$e13);
1439
1473
  }
1440
1474
  }
1441
1475
  if (s12 !== peg$FAILED) {
@@ -1451,12 +1485,12 @@ function peg$parse(input, options) {
1451
1485
  } else {
1452
1486
  s3 = peg$FAILED;
1453
1487
  if (peg$silentFails === 0) {
1454
- peg$fail(peg$e12);
1488
+ peg$fail(peg$e13);
1455
1489
  }
1456
1490
  }
1457
1491
  if (s3 !== peg$FAILED) {
1458
1492
  peg$savedPos = s0;
1459
- s0 = peg$f37(s2);
1493
+ s0 = peg$f38(s2);
1460
1494
  } else {
1461
1495
  peg$currPos = s0;
1462
1496
  s0 = peg$FAILED;
@@ -1476,12 +1510,12 @@ function peg$parse(input, options) {
1476
1510
  } else {
1477
1511
  s12 = peg$FAILED;
1478
1512
  if (peg$silentFails === 0) {
1479
- peg$fail(peg$e13);
1513
+ peg$fail(peg$e14);
1480
1514
  }
1481
1515
  }
1482
1516
  if (s12 !== peg$FAILED) {
1483
1517
  peg$savedPos = s0;
1484
- s12 = peg$f38();
1518
+ s12 = peg$f39();
1485
1519
  }
1486
1520
  s0 = s12;
1487
1521
  if (s0 === peg$FAILED) {
@@ -1492,12 +1526,12 @@ function peg$parse(input, options) {
1492
1526
  } else {
1493
1527
  s12 = peg$FAILED;
1494
1528
  if (peg$silentFails === 0) {
1495
- peg$fail(peg$e14);
1529
+ peg$fail(peg$e15);
1496
1530
  }
1497
1531
  }
1498
1532
  if (s12 !== peg$FAILED) {
1499
1533
  peg$savedPos = s0;
1500
- s12 = peg$f39();
1534
+ s12 = peg$f40();
1501
1535
  }
1502
1536
  s0 = s12;
1503
1537
  if (s0 === peg$FAILED) {
@@ -1508,7 +1542,7 @@ function peg$parse(input, options) {
1508
1542
  } else {
1509
1543
  s12 = peg$FAILED;
1510
1544
  if (peg$silentFails === 0) {
1511
- peg$fail(peg$e15);
1545
+ peg$fail(peg$e16);
1512
1546
  }
1513
1547
  }
1514
1548
  if (s12 !== peg$FAILED) {
@@ -1518,12 +1552,12 @@ function peg$parse(input, options) {
1518
1552
  } else {
1519
1553
  s2 = peg$FAILED;
1520
1554
  if (peg$silentFails === 0) {
1521
- peg$fail(peg$e16);
1555
+ peg$fail(peg$e2);
1522
1556
  }
1523
1557
  }
1524
1558
  if (s2 !== peg$FAILED) {
1525
1559
  peg$savedPos = s0;
1526
- s0 = peg$f40(s2);
1560
+ s0 = peg$f41(s2);
1527
1561
  } else {
1528
1562
  peg$currPos = s0;
1529
1563
  s0 = peg$FAILED;
@@ -1572,7 +1606,7 @@ function peg$parse(input, options) {
1572
1606
  }
1573
1607
  if (s3 !== peg$FAILED) {
1574
1608
  peg$savedPos = s0;
1575
- s0 = peg$f41(s2);
1609
+ s0 = peg$f42(s2);
1576
1610
  } else {
1577
1611
  peg$currPos = s0;
1578
1612
  s0 = peg$FAILED;
@@ -1593,7 +1627,7 @@ function peg$parse(input, options) {
1593
1627
  s2 = peg$parseHtmlChar();
1594
1628
  }
1595
1629
  peg$savedPos = s0;
1596
- s12 = peg$f42(s12);
1630
+ s12 = peg$f43(s12);
1597
1631
  s0 = s12;
1598
1632
  return s0;
1599
1633
  }
@@ -1623,7 +1657,7 @@ function peg$parse(input, options) {
1623
1657
  }
1624
1658
  if (s3 !== peg$FAILED) {
1625
1659
  peg$savedPos = s0;
1626
- s0 = peg$f43(s12, s2);
1660
+ s0 = peg$f44(s12, s2);
1627
1661
  } else {
1628
1662
  peg$currPos = s0;
1629
1663
  s0 = peg$FAILED;
@@ -1668,7 +1702,7 @@ function peg$parse(input, options) {
1668
1702
  s2 = peg$parseName();
1669
1703
  if (s2 !== peg$FAILED) {
1670
1704
  peg$savedPos = s0;
1671
- s0 = peg$f44(s2);
1705
+ s0 = peg$f45(s2);
1672
1706
  } else {
1673
1707
  peg$currPos = s0;
1674
1708
  s0 = peg$FAILED;
@@ -1716,7 +1750,7 @@ function peg$parse(input, options) {
1716
1750
  }
1717
1751
  }
1718
1752
  peg$savedPos = s0;
1719
- s0 = peg$f45(s12, s2);
1753
+ s0 = peg$f46(s12, s2);
1720
1754
  } else {
1721
1755
  peg$currPos = s0;
1722
1756
  s0 = peg$FAILED;
@@ -1874,7 +1908,7 @@ function peg$parse(input, options) {
1874
1908
  }
1875
1909
  if (s12 !== peg$FAILED) {
1876
1910
  peg$savedPos = s0;
1877
- s12 = peg$f46(s12);
1911
+ s12 = peg$f47(s12);
1878
1912
  }
1879
1913
  s0 = s12;
1880
1914
  return s0;
@@ -3149,7 +3183,7 @@ function peg$parse(input, options) {
3149
3183
  } else {
3150
3184
  s5 = peg$FAILED;
3151
3185
  if (peg$silentFails === 0) {
3152
- peg$fail(peg$e16);
3186
+ peg$fail(peg$e2);
3153
3187
  }
3154
3188
  }
3155
3189
  if (s5 !== peg$FAILED) {
@@ -3191,7 +3225,7 @@ function peg$parse(input, options) {
3191
3225
  } else {
3192
3226
  s5 = peg$FAILED;
3193
3227
  if (peg$silentFails === 0) {
3194
- peg$fail(peg$e16);
3228
+ peg$fail(peg$e2);
3195
3229
  }
3196
3230
  }
3197
3231
  if (s5 !== peg$FAILED) {
@@ -3281,7 +3315,7 @@ function peg$parse(input, options) {
3281
3315
  } else {
3282
3316
  s4 = peg$FAILED;
3283
3317
  if (peg$silentFails === 0) {
3284
- peg$fail(peg$e16);
3318
+ peg$fail(peg$e2);
3285
3319
  }
3286
3320
  }
3287
3321
  peg$silentFails--;
@@ -3358,7 +3392,7 @@ function peg$parse(input, options) {
3358
3392
  } else {
3359
3393
  s4 = peg$FAILED;
3360
3394
  if (peg$silentFails === 0) {
3361
- peg$fail(peg$e16);
3395
+ peg$fail(peg$e2);
3362
3396
  }
3363
3397
  }
3364
3398
  peg$silentFails--;
@@ -4801,8 +4835,9 @@ function parse(src) {
4801
4835
  }
4802
4836
  throw err;
4803
4837
  }
4838
+ const lexed = src.slice(0, ast.end);
4804
4839
  try {
4805
- validateEdgeOperators(src, ast.directed);
4840
+ validateEdgeOperators(lexed, ast.directed);
4806
4841
  } catch (err) {
4807
4842
  const offset = err instanceof ParseError ? err.location.offset : void 0;
4808
4843
  if (offset !== void 0) {
@@ -4811,7 +4846,7 @@ function parse(src) {
4811
4846
  }
4812
4847
  throw err;
4813
4848
  }
4814
- warnNumberAmbiguities(src, src.length);
4849
+ warnNumberAmbiguities(lexed, lexed.length);
4815
4850
  return buildFromAst(ast);
4816
4851
  }
4817
4852
 
@@ -10652,13 +10687,14 @@ function skipSpace(text, i) {
10652
10687
  return j;
10653
10688
  }
10654
10689
  var byteLength = (s) => new TextEncoder().encode(s).length;
10655
- function fedBytes(unit, isText) {
10656
- if (!isText) return byteLength(unit);
10657
- let text = unit.replace(/&([^;&<]*);/g, (m, name) => {
10690
+ function fedText(piece, endsUnit) {
10691
+ const text = piece.replace(/&([^;&<]*);/g, (m, name) => {
10658
10692
  return name.length >= 2 && Object.hasOwn(HTML_ENTITIES, name) ? `&#${HTML_ENTITIES[name]};` : m;
10659
10693
  });
10660
- if (text.endsWith("]")) text = `${text.slice(0, -1)}&#93;`;
10661
- return byteLength(text);
10694
+ return endsUnit && text.endsWith("]") ? `${text.slice(0, -1)}&#93;` : text;
10695
+ }
10696
+ function fedBytes(unit, isText) {
10697
+ return byteLength(isText ? fedText(unit, true) : unit);
10662
10698
  }
10663
10699
  function scanValue(text, j) {
10664
10700
  const q = text[j];
@@ -10760,26 +10796,45 @@ function scanMarkup(text, p) {
10760
10796
  if (c === "!") return { scan: scanDeclaration(text, p), kind: "tag" };
10761
10797
  return { scan: scanStartTag(text, p), kind: "tag" };
10762
10798
  }
10763
- function scanContent(text, base) {
10799
+ var CDATA_OPEN = "<![CDATA[";
10800
+ var CDATA_CLOSE = "]]>";
10801
+ function scanCdata(text, p, base, dataOf, tokens) {
10802
+ const close = text.indexOf(CDATA_CLOSE, p);
10803
+ const end = close < 0 ? text.length : close;
10804
+ if (end > p) tokens.push({ kind: "cdata", start: base + p, end: base + end, data: dataOf(base + p, base + end) });
10805
+ return close < 0 ? -1 : close + CDATA_CLOSE.length;
10806
+ }
10807
+ function scanText(text, p, base, tokens) {
10808
+ const e = text.indexOf("<", p);
10809
+ const end = e < 0 ? text.length : e;
10810
+ tokens.push({ kind: "text", start: base + p, end: base + end });
10811
+ return end;
10812
+ }
10813
+ function scanContent(text, base, inCdata, dataOf) {
10764
10814
  const tokens = [];
10765
10815
  let p = 0;
10816
+ let inSection = inCdata;
10766
10817
  while (p < text.length) {
10818
+ if (inSection || text.startsWith(CDATA_OPEN, p)) {
10819
+ const after2 = scanCdata(text, inSection ? p : p + CDATA_OPEN.length, base, dataOf, tokens);
10820
+ if (after2 < 0) return { tokens, consumed: text.length, inCdata: true };
10821
+ inSection = false;
10822
+ p = after2;
10823
+ continue;
10824
+ }
10767
10825
  if (text[p] !== "<") {
10768
- const e = text.indexOf("<", p);
10769
- const end = e < 0 ? text.length : e;
10770
- tokens.push({ kind: "text", start: base + p, end: base + end });
10771
- p = end;
10826
+ p = scanText(text, p, base, tokens);
10772
10827
  continue;
10773
10828
  }
10774
10829
  const { scan, kind } = scanMarkup(text, p);
10775
- if (scan.kind === "invalid") return { tokens, consumed: p, invalid: base + scan.offset };
10776
- if (scan.kind === "partial") return { tokens, consumed: p };
10830
+ if (scan.kind === "invalid") return { tokens, consumed: p, invalid: base + scan.offset, inCdata: false };
10831
+ if (scan.kind === "partial") return { tokens, consumed: p, inCdata: false };
10777
10832
  const tok = { kind, start: base + p, end: base + scan.end };
10778
10833
  if (scan.dup !== void 0) tok.dup = base + scan.dup;
10779
10834
  tokens.push(tok);
10780
10835
  p = scan.end;
10781
10836
  }
10782
- return { tokens, consumed: p };
10837
+ return { tokens, consumed: p, inCdata: inSection };
10783
10838
  }
10784
10839
  var InputBuffer = class {
10785
10840
  size = 0;
@@ -10830,24 +10885,42 @@ var ExpatFeed = class {
10830
10885
  buffer = new InputBuffer();
10831
10886
  heldStart = 0;
10832
10887
  fedEnd = 0;
10888
+ inCdata = false;
10889
+ /** Source ranges of the text units fed so far: their bytes went through findNext's rewrite. */
10890
+ textUnits = [];
10833
10891
  /** Start of the token expat still holds, or undefined when it holds nothing. */
10834
10892
  get held() {
10835
10893
  return this.heldStart < this.fedEnd ? this.heldStart : void 0;
10836
10894
  }
10837
- /** One `XML_Parse(parser, src[start, end), nbytes, 0)`. */
10838
- feed(start, end, nbytes) {
10839
- this.buffer.append(nbytes);
10895
+ /** One `XML_Parse(parser, src[start, end), nbytes, 0)`; `isText` for a text unit. */
10896
+ feed(start, end, isText) {
10897
+ if (isText) this.textUnits.push([start, end]);
10898
+ this.buffer.append(fedBytes(this.src.slice(start, end), isText));
10840
10899
  this.fedEnd = end;
10841
10900
  if (!this.buffer.enough) return { tokens: [] };
10842
10901
  const text = this.src.slice(this.heldStart, end);
10843
- const scan = scanContent(text, this.heldStart);
10902
+ const scan = scanContent(text, this.heldStart, this.inCdata, (a, b) => this.fedBetween(a, b));
10844
10903
  if (scan.invalid !== void 0) {
10845
10904
  return { tokens: scan.tokens, invalid: { message: XML_ERROR_INVALID_TOKEN, offset: scan.invalid } };
10846
10905
  }
10906
+ this.inCdata = scan.inCdata;
10847
10907
  this.heldStart += scan.consumed;
10848
10908
  this.buffer.consumedTo(byteLength(this.src.slice(this.heldStart, end)), scan.consumed > 0);
10849
10909
  return { tokens: scan.tokens };
10850
10910
  }
10911
+ /** What expat read for source offsets [start, end): text-unit pieces as findNext rewrote them. */
10912
+ fedBetween(start, end) {
10913
+ let out = "";
10914
+ let p = start;
10915
+ for (const [us, ue] of this.textUnits) {
10916
+ if (ue <= p || us >= end) continue;
10917
+ if (us > p) out += this.src.slice(p, us);
10918
+ const e = Math.min(ue, end);
10919
+ out += fedText(this.src.slice(Math.max(us, p), e), e === ue);
10920
+ p = e;
10921
+ }
10922
+ return out + this.src.slice(p, end);
10923
+ }
10851
10924
  };
10852
10925
  var XML_PREDEFINED_ENTITIES = /* @__PURE__ */ new Set(["lt", "gt", "amp", "quot", "apos"]);
10853
10926
  var ENTITY_NAME = /^[A-Za-z_:][\w.:-]*$/;
@@ -10872,6 +10945,46 @@ function parseTagChunk(chunk) {
10872
10945
  return { close, selfClose: !close && body.endsWith("/"), name };
10873
10946
  }
10874
10947
 
10948
+ // src/common/htmltable-lex-chardata.ts
10949
+ var initialCharData = () => ({ inCell: true, xb: "" });
10950
+ function startInCell(name, inCell) {
10951
+ if (name === "TABLE" || name === "TR" || name === "TH") return false;
10952
+ return name === "TD" ? true : inCell;
10953
+ }
10954
+ function endInCell(name, inCell) {
10955
+ if (name === "TABLE") return true;
10956
+ return name === "TD" ? false : inCell;
10957
+ }
10958
+ function tagInCell(st, tag) {
10959
+ const name = tag.name.toUpperCase();
10960
+ if (tag.close) {
10961
+ st.inCell = endInCell(name, st.inCell);
10962
+ return;
10963
+ }
10964
+ st.inCell = startInCell(name, st.inCell);
10965
+ if (tag.selfClose) st.inCell = endInCell(name, st.inCell);
10966
+ }
10967
+ function keepLostText(st, lost) {
10968
+ for (const t of lost) if (t.type === "text") st.xb += t.value;
10969
+ }
10970
+ function releaseXb(st, first) {
10971
+ if (st.xb === "") return;
10972
+ if (first.type === "text") first.value = st.xb + first.value;
10973
+ else if (first.type === "open" && first.tag === "TABLE") first.heldText = st.xb;
10974
+ else return;
10975
+ st.xb = "";
10976
+ }
10977
+ function cleanText(decoded) {
10978
+ return decoded.replace(/[\x00-\x1f]/g, "");
10979
+ }
10980
+ function textTokens(raw) {
10981
+ return charDataTokens(htmlEntityUTF8(raw));
10982
+ }
10983
+ function charDataTokens(decoded) {
10984
+ const clean = cleanText(decoded);
10985
+ return clean.length > 0 ? [{ type: "text", value: clean }] : [];
10986
+ }
10987
+
10875
10988
  // src/common/htmltable-lex-units.ts
10876
10989
  var UNCLOSED_COMMENT = "Warning: Unclosed comment\n";
10877
10990
  var LABEL_CLOSED = "Warning: Label closed before end of HTML element\n";
@@ -10976,20 +11089,17 @@ function parseCloseToken(inner) {
10976
11089
  checkTag(tag);
10977
11090
  return { type: "close", tag: normalizeTag(tag) };
10978
11091
  }
10979
- function cleanText(raw) {
10980
- const isKeep = (c) => c === " " || c === " " || c === "\n" || c === "\r";
10981
- return raw.replace(/[\x00-\x1f\x7f]/g, (c) => isKeep(c) ? c : "");
10982
- }
10983
- function textTokens(raw) {
10984
- const clean = htmlEntityUTF8(cleanText(raw));
10985
- return clean.length > 0 ? [{ type: "text", value: clean }] : [];
10986
- }
11092
+ var EMPTY_ELEMENTS = /* @__PURE__ */ new Set(["BR", "HR", "VR", "IMG"]);
10987
11093
  function tagTokens(text) {
10988
11094
  const inner = text.slice(1, -1).trim();
10989
11095
  if (inner.startsWith("/")) return [parseCloseToken(inner)];
10990
11096
  if (inner.endsWith("/")) {
10991
11097
  const open = parseOpenToken(inner.slice(0, -1).trim());
10992
- return [open, { type: "close", tag: open.tag }];
11098
+ if (EMPTY_ELEMENTS.has(open.tag)) return [open, { type: "close", tag: open.tag }];
11099
+ const close = { type: "close", tag: open.tag };
11100
+ if (open.warnings !== void 0) close.warnings = open.warnings;
11101
+ if (open.warn === true) close.warn = true;
11102
+ return [close];
10993
11103
  }
10994
11104
  return [parseOpenToken(inner)];
10995
11105
  }
@@ -11062,6 +11172,7 @@ function eventTokens(site) {
11062
11172
  const { src, tok, st } = site;
11063
11173
  const text = src.slice(tok.start, tok.end);
11064
11174
  if (tok.kind === "comment" || tok.kind === "pi") return [];
11175
+ if (tok.kind === "cdata") return charDataTokens(tok.data ?? "");
11065
11176
  if (tok.kind === "tag") {
11066
11177
  checkTagToken(site);
11067
11178
  return tagTokens(text);
@@ -11087,7 +11198,13 @@ function absorb(carry, lost) {
11087
11198
  function eventGroups(run, res) {
11088
11199
  const groups = [];
11089
11200
  for (const tok of res.tokens) {
11090
- const tokens = eventTokens({ src: run.src, tok, st: run.st });
11201
+ let tokens = eventTokens({ src: run.src, tok, st: run.st });
11202
+ if (tok.kind === "tag") {
11203
+ const tag = parseTagChunk(run.src.slice(tok.start, tok.end));
11204
+ if (tag !== void 0) tagInCell(run.cd, tag);
11205
+ } else if (!run.cd.inCell) {
11206
+ tokens = [];
11207
+ }
11091
11208
  if (tokens.length > 0) groups.push({ tokens, tok });
11092
11209
  }
11093
11210
  if (res.invalid !== void 0) {
@@ -11098,6 +11215,7 @@ function eventGroups(run, res) {
11098
11215
  }
11099
11216
  function deliver(run, last) {
11100
11217
  const first = last.tokens[0];
11218
+ releaseXb(run.cd, first);
11101
11219
  attachCarry(run.carry, first);
11102
11220
  const info = { src: run.src, pos: last.tok.start, end: last.tok.end, context: run.st.prev + run.st.curr };
11103
11221
  const prev = run.tokens.at(-1);
@@ -11112,7 +11230,10 @@ function deliver(run, last) {
11112
11230
  function runEvents(run, res) {
11113
11231
  const groups = eventGroups(run, res);
11114
11232
  const last = groups.pop();
11115
- for (const g of groups) absorb(run.carry, g.tokens);
11233
+ for (const g of groups) {
11234
+ absorb(run.carry, g.tokens);
11235
+ keepLostText(run.cd, g.tokens);
11236
+ }
11116
11237
  if (last !== void 0) deliver(run, last);
11117
11238
  }
11118
11239
  function appendString(into, more) {
@@ -11143,7 +11264,8 @@ function tokenizeDeferred(src, label = { start: 0, end: src.length }) {
11143
11264
  tokens: [],
11144
11265
  st: { stack: [], prev: "", curr: "" },
11145
11266
  expat: new ExpatFeed(src),
11146
- carry: { warnings: [], warn: false }
11267
+ carry: { warnings: [], warn: false },
11268
+ cd: initialCharData()
11147
11269
  };
11148
11270
  let error;
11149
11271
  try {
@@ -11152,8 +11274,7 @@ function tokenizeDeferred(src, label = { start: 0, end: src.length }) {
11152
11274
  run.st.curr = src.slice(u.start, u.end);
11153
11275
  run.carry.warnings.push(...u.warnings);
11154
11276
  if (u.warn) run.carry.warn = true;
11155
- const nbytes = fedBytes(run.st.curr, !run.st.curr.startsWith("<"));
11156
- runEvents(run, run.expat.feed(u.start, u.end, nbytes));
11277
+ runEvents(run, run.expat.feed(u.start, u.end, !run.st.curr.startsWith("<")));
11157
11278
  }
11158
11279
  const held = run.expat.held;
11159
11280
  if (held !== void 0) error = unfinishedError(run, held);
@@ -11318,7 +11439,8 @@ var tableFont = (fontStack) => {
11318
11439
  var MSG_SYNTAX_ERROR = "syntax error";
11319
11440
  var MSG_TEXT_BEFORE_TABLE = "Syntax error: non-space string used before <TABLE>";
11320
11441
  var MSG_TEXT_AFTER_TABLE = "Syntax error: non-space string used after </TABLE>";
11321
- var nonSpace = (text) => /[^ \t\n\r]/.test(text);
11442
+ var nonSpace = (text) => /[^ ]/.test(text);
11443
+ var heldNonSpace = (tbl) => tbl?.type === "open" && nonSpace(tbl.heldText ?? "");
11322
11444
  var parseError = (s, tok, message) => {
11323
11445
  if (tok !== void 0) emitWarnings(s, tok);
11324
11446
  else emitEof(s);
@@ -11339,41 +11461,29 @@ var applyBrTag = (s, t, fontStack, items) => {
11339
11461
  items.push({ br: true, brAlign: parseAlign(t.attrs["align"] ?? ""), ...fontItemProps(font) });
11340
11462
  consumeClose(s, "BR");
11341
11463
  };
11342
- var applyFontTag = (s, t, fontStack, items) => {
11343
- consume(s);
11344
- const font = fontStack[fontStack.length - 1] ?? {};
11345
- fontStack.push(mergeFontState(font, {
11346
- fontColor: t.attrs["color"],
11347
- fontFace: t.attrs["face"],
11348
- fontSize: num(t.attrs["point-size"])
11349
- }));
11464
+ var parseStyledText = (s, tag, fontStack, items) => {
11350
11465
  const inner = parseText(s, fontStack);
11351
11466
  fontStack.pop();
11352
- items.push(...inner.items);
11353
11467
  const nxt = peek(s);
11354
- if (nxt?.type === "close" && nxt.tag === "FONT") consume(s);
11468
+ if (inner.items.length === 0 || nxt?.type !== "close" || nxt.tag !== tag) {
11469
+ throw parseError(s, nxt, MSG_SYNTAX_ERROR);
11470
+ }
11471
+ items.push(...inner.items);
11472
+ consume(s);
11355
11473
  };
11356
- var applyInlineTag = (s, t, fontStack, items) => {
11474
+ var applyStyleTag = (s, t, fontStack, items) => {
11357
11475
  consume(s);
11358
- const font = fontStack[fontStack.length - 1] ?? {};
11359
- fontStack.push(mergeFontState(font, inlineFontState(t.tag, t.attrs)));
11360
- const inner = parseText(s, fontStack);
11361
- fontStack.pop();
11362
- items.push(...inner.items);
11363
- const nxt = peek(s);
11364
- if (nxt?.type === "close" && nxt.tag === t.tag) consume(s);
11476
+ const own = t.tag === "FONT" ? { fontColor: t.attrs["color"], fontFace: t.attrs["face"], fontSize: num(t.attrs["point-size"]) } : inlineFontState(t.tag, t.attrs);
11477
+ fontStack.push(mergeFontState(fontStack[fontStack.length - 1] ?? {}, own));
11478
+ parseStyledText(s, t.tag, fontStack, items);
11365
11479
  };
11366
11480
  var applyOpenTag = (s, t, fontStack, items) => {
11367
11481
  if (t.tag === "BR") {
11368
11482
  applyBrTag(s, t, fontStack, items);
11369
11483
  return true;
11370
11484
  }
11371
- if (t.tag === "FONT") {
11372
- applyFontTag(s, t, fontStack, items);
11373
- return true;
11374
- }
11375
- if (isInlineTag(t.tag)) {
11376
- applyInlineTag(s, t, fontStack, items);
11485
+ if (t.tag === "FONT" || isInlineTag(t.tag)) {
11486
+ applyStyleTag(s, t, fontStack, items);
11377
11487
  return true;
11378
11488
  }
11379
11489
  return false;
@@ -11416,7 +11526,7 @@ var parseFontTable = (s, open, fontStack) => {
11416
11526
  fontStack.push(wrapperFont(open, fontStack));
11417
11527
  const textBefore = skipStrings(s);
11418
11528
  const tblTok = peek(s);
11419
- if (textBefore && tblTok !== void 0) throw parseError(s, tblTok, MSG_TEXT_BEFORE_TABLE);
11529
+ if ((textBefore || heldNonSpace(tblTok)) && tblTok !== void 0) throw parseError(s, tblTok, MSG_TEXT_BEFORE_TABLE);
11420
11530
  const table = parseTable(s, fontStack);
11421
11531
  const textAfter = skipStrings(s);
11422
11532
  const close = peek(s);
@@ -11445,7 +11555,7 @@ var parseImgContent = (s, t, cellAttrs) => {
11445
11555
  };
11446
11556
  var scanCellTable = (s, t, fontStack, st) => {
11447
11557
  if (st.kind === "image" || st.kind === "table") throw parseError(s, t, MSG_SYNTAX_ERROR);
11448
- if (st.textNonSpace) throw parseError(s, t, MSG_TEXT_BEFORE_TABLE);
11558
+ if (st.textNonSpace || heldNonSpace(t)) throw parseError(s, t, MSG_TEXT_BEFORE_TABLE);
11449
11559
  const tbl = parseTable(s, fontStack);
11450
11560
  st.kind = "table";
11451
11561
  return [tbl];
@@ -11600,14 +11710,14 @@ var consumeRowHr = (s, rows) => {
11600
11710
  var findFirstRealToken = (tokens, start) => {
11601
11711
  for (let i = start; i < tokens.length; i++) {
11602
11712
  const tk = tokens[i];
11603
- if (tk.type !== "text" || tk.value.trim() !== "") return tk;
11713
+ if (tk.type !== "text" || nonSpace(tk.value)) return tk;
11604
11714
  }
11605
11715
  return void 0;
11606
11716
  };
11607
11717
  var skipLeadingWs = (s) => {
11608
11718
  while (true) {
11609
11719
  const nxt = peek(s);
11610
- if (!nxt || nxt.type !== "text" || nxt.value.trim() !== "") break;
11720
+ if (!nxt || nxt.type !== "text" || nonSpace(nxt.value)) break;
11611
11721
  consume(s);
11612
11722
  }
11613
11723
  };
@@ -11633,6 +11743,7 @@ var parseFontTableLabel = (s, open, fontStack) => {
11633
11743
  };
11634
11744
  var parseTableLabel = (s, fontStack) => {
11635
11745
  skipLeadingWs(s);
11746
+ if (heldNonSpace(peek(s))) throw parseError(s, peek(s), MSG_TEXT_BEFORE_TABLE);
11636
11747
  const table = parseTable(s, fontStack);
11637
11748
  finishTableLabel(s);
11638
11749
  return { kind: "table", table };