@knowvah/dot-engine 2.6.6 → 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.
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The htmllex state characterData reads: `ctx->inCell`, which the element
3
+ * handlers set, and `ctx->xb`, the buffer it appends to. Every handler assigns
4
+ * `ctx->tok`, so when one `XML_Parse` call fires several events only the last
5
+ * token reaches the parser, but characters an earlier event appended stay in
6
+ * xb: they lead the next string the parser reduces, or count in the table
7
+ * rule's nonSpace check.
8
+ *
9
+ * @see lib/common/htmllex.c:startElement
10
+ * @see lib/common/htmllex.c:endElement
11
+ * @see lib/common/htmllex.c:characterData
12
+ */
13
+ import type { TagChunk } from './htmltable-lex-expat.js';
14
+ import type { Token } from './htmltable-types.js';
15
+ /** `ctx->inCell`, and the text in `ctx->xb` that no token carried to the parser. */
16
+ export interface CharDataState {
17
+ inCell: boolean;
18
+ xb: string;
19
+ }
20
+ /** initHTMLlexer: text is kept until the first TABLE or TR. @see lib/common/htmllex.c:initHTMLlexer */
21
+ export declare const initialCharData: () => CharDataState;
22
+ /** Run a tag's element handlers on inCell; `<X/>` runs startElement, then endElement. */
23
+ export declare function tagInCell(st: CharDataState, tag: TagChunk): void;
24
+ /** Keep the text of tokens a later event in the same call overwrote. */
25
+ export declare function keepLostText(st: CharDataState, lost: readonly Token[]): void;
26
+ /**
27
+ * Hand xb's kept text to the token the parser is about to get: a string
28
+ * starts with it, and a TABLE carries it for the table rule's nonSpace check.
29
+ * Any other token leaves it in xb for the next of those.
30
+ * @see lib/common/htmlparse.y:table
31
+ */
32
+ export declare function releaseXb(st: CharDataState, first: Token): void;
33
+ /** The text token of a text run, if anything is left after cleaning. */
34
+ export declare function textTokens(raw: string): Token[];
35
+ /** characterData on what expat decoded: a T_string when any character survives. */
36
+ export declare function charDataTokens(decoded: string): Token[];
37
+ //# sourceMappingURL=htmltable-lex-chardata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmltable-lex-chardata.d.ts","sourceRoot":"","sources":["../../src/common/htmltable-lex-chardata.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,uGAAuG;AACvG,eAAO,MAAM,eAAe,QAAO,aAA2C,CAAC;AAc/E,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAQhE;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,KAAK,EAAE,GAAG,IAAI,CAE5E;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAM/D;AAYD,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,CAQ/C;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,CAGvD"}
@@ -16,9 +16,11 @@
16
16
  export declare const XML_ERROR_INVALID_TOKEN = "not well-formed (invalid token)";
17
17
  /** One complete expat token of the content: its extent in the label source. */
18
18
  export interface ExpatToken {
19
- kind: 'text' | 'tag' | 'comment' | 'pi';
19
+ kind: 'text' | 'tag' | 'comment' | 'pi' | 'cdata';
20
20
  start: number;
21
21
  end: number;
22
+ /** A `cdata` token's character data, as expat reports it (no entity decoding). */
23
+ data?: string;
22
24
  /** Offset of the second occurrence of an attribute name in a start tag. */
23
25
  dup?: number;
24
26
  }
@@ -32,12 +34,7 @@ export interface ExpatResult {
32
34
  tokens: ExpatToken[];
33
35
  invalid?: ExpatInvalid;
34
36
  }
35
- /**
36
- * The number of bytes C passes to `XML_Parse` for a text unit: the buffer
37
- * `findNext` filled (named entities rewritten as `&#N;`, see `scanEntity`)
38
- * with a trailing `]` escaped (`protect_rsqb`). Other units go as written.
39
- * @see lib/common/htmllex.c:protect_rsqb
40
- */
37
+ /** The number of bytes C passes to `XML_Parse` for a unit; other than text units go as written. */
41
38
  export declare function fedBytes(unit: string, isText: boolean): number;
42
39
  /** The parser state across `XML_Parse` calls on one label. */
43
40
  export declare class ExpatFeed {
@@ -45,11 +42,16 @@ export declare class ExpatFeed {
45
42
  private readonly buffer;
46
43
  private heldStart;
47
44
  private fedEnd;
45
+ private inCdata;
46
+ /** Source ranges of the text units fed so far: their bytes went through findNext's rewrite. */
47
+ private readonly textUnits;
48
48
  constructor(src: string);
49
49
  /** Start of the token expat still holds, or undefined when it holds nothing. */
50
50
  get held(): number | undefined;
51
- /** One `XML_Parse(parser, src[start, end), nbytes, 0)`. */
52
- feed(start: number, end: number, nbytes: number): ExpatResult;
51
+ /** One `XML_Parse(parser, src[start, end), nbytes, 0)`; `isText` for a text unit. */
52
+ feed(start: number, end: number, isText: boolean): ExpatResult;
53
+ /** What expat read for source offsets [start, end): text-unit pieces as findNext rewrote them. */
54
+ private fedBetween;
53
55
  }
54
56
  /** Offset of the first `&name;` that scanEntity leaves for expat to reject. */
55
57
  export declare function findUndefinedEntity(text: string): number;
@@ -1 +1 @@
1
- {"version":3,"file":"htmltable-lex-expat.d.ts","sourceRoot":"","sources":["../../src/common/htmltable-lex-expat.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AAIH,wDAAwD;AACxD,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAOzE,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAyBD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAO9D;AAmND,8DAA8D;AAC9D,qBAAa,SAAS;IAKR,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAK;gBAEU,GAAG,EAAE,MAAM;IAExC,gFAAgF;IAChF,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAE7B;IAED,2DAA2D;IAC3D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;CAa9D;AAOD,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAOjE"}
1
+ {"version":3,"file":"htmltable-lex-expat.d.ts","sourceRoot":"","sources":["../../src/common/htmltable-lex-expat.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AAIH,wDAAwD;AACxD,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAOzE,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAyCD,mGAAmG;AACnG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAE9D;AAuPD,8DAA8D;AAC9D,qBAAa,SAAS;IAQR,OAAO,CAAC,QAAQ,CAAC,GAAG;IAPhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,+FAA+F;IAC/F,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;gBAErC,GAAG,EAAE,MAAM;IAExC,gFAAgF;IAChF,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAE7B;IAED,qFAAqF;IACrF,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,WAAW;IAgB9D,kGAAkG;IAClG,OAAO,CAAC,UAAU;CAYnB;AAOD,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAOjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"htmltable-lex.d.ts","sourceRoot":"","sources":["../../src/common/htmltable-lex.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAwB,KAAK,EAAE,MAAM,sBAAsB,CAAC;AASrF,YAAY,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAyIlD;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,cAAc;IAC9C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;gBAE5B,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE;CAKzE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAG5F;AA2CD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAIlG;AAgJD,yFAAyF;AACzF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AA+BD,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,uFAAuF;IACvF,GAAG,CAAC,EAAE,WAAW,CAAC;CACnB;AAOD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,UAA0C,GAAG,cAAc,CA0B/G;AAED,yCAAyC;AACzC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,CAI7C"}
1
+ {"version":3,"file":"htmltable-lex.d.ts","sourceRoot":"","sources":["../../src/common/htmltable-lex.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAwB,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAUrF,YAAY,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAiIlD;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,cAAc;IAC9C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;gBAE5B,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE;CAKzE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAG5F;AA2CD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAIlG;AA8JD,yFAAyF;AACzF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AA+BD,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,uFAAuF;IACvF,GAAG,CAAC,EAAE,WAAW,CAAC;CACnB;AAOD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,UAA0C,GAAG,cAAc,CAyB/G;AAED,yCAAyC;AACzC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,CAI7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"htmltable-parse.d.ts","sourceRoot":"","sources":["../../src/common/htmltable-parse.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAIV,SAAS,EAET,SAAS,EACT,QAAQ,EAIT,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAgH3D,wDAAwD;AACxD,eAAO,MAAM,SAAS,GAAI,GAAG,UAAU,EAAE,WAAW,SAAS,EAAE,KAAG,QAejE,CAAC;AAqRF,0EAA0E;AAC1E,eAAO,MAAM,UAAU,GAAI,GAAG,UAAU,EAAE,WAAW,SAAS,EAAE,KAAG,SAkBlE,CAAC;AA2GF,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,MAAM,EACX,YAAW,CAAC,IAAI,EAAE,MAAM,KAAK,IAAmC,KAC/D,eAgBF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,SACC,CAAC"}
1
+ {"version":3,"file":"htmltable-parse.d.ts","sourceRoot":"","sources":["../../src/common/htmltable-parse.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAIV,SAAS,EAET,SAAS,EACT,QAAQ,EAIT,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AA6G3D,wDAAwD;AACxD,eAAO,MAAM,SAAS,GAAI,GAAG,UAAU,EAAE,WAAW,SAAS,EAAE,KAAG,QAejE,CAAC;AAqRF,0EAA0E;AAC1E,eAAO,MAAM,UAAU,GAAI,GAAG,UAAU,EAAE,WAAW,SAAS,EAAE,KAAG,SAkBlE,CAAC;AA4GF,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,MAAM,EACX,YAAW,CAAC,IAAI,EAAE,MAAM,KAAK,IAAmC,KAC/D,eAgBF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,SACC,CAAC"}
@@ -251,6 +251,8 @@ export interface OpenToken extends LexerOutput {
251
251
  type: 'open';
252
252
  tag: string;
253
253
  attrs: Record<string, string>;
254
+ /** On a TABLE: `ctx->xb` text no token carried, read by the table rule's nonSpace. */
255
+ heldText?: string;
254
256
  }
255
257
  /** @see lib/common/htmllex.c:endElement */
256
258
  export interface CloseToken extends LexerOutput {
@@ -1 +1 @@
1
- {"version":3,"file":"htmltable-types.d.ts","sourceRoot":"","sources":["../../src/common/htmltable-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"htmltable-types.d.ts","sourceRoot":"","sources":["../../src/common/htmltable-types.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -10687,13 +10687,14 @@ function skipSpace(text, i) {
10687
10687
  return j;
10688
10688
  }
10689
10689
  var byteLength = (s) => new TextEncoder().encode(s).length;
10690
- function fedBytes(unit, isText) {
10691
- if (!isText) return byteLength(unit);
10692
- let text = unit.replace(/&([^;&<]*);/g, (m, name) => {
10690
+ function fedText(piece, endsUnit) {
10691
+ const text = piece.replace(/&([^;&<]*);/g, (m, name) => {
10693
10692
  return name.length >= 2 && Object.hasOwn(HTML_ENTITIES, name) ? `&#${HTML_ENTITIES[name]};` : m;
10694
10693
  });
10695
- if (text.endsWith("]")) text = `${text.slice(0, -1)}&#93;`;
10696
- 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);
10697
10698
  }
10698
10699
  function scanValue(text, j) {
10699
10700
  const q = text[j];
@@ -10795,26 +10796,45 @@ function scanMarkup(text, p) {
10795
10796
  if (c === "!") return { scan: scanDeclaration(text, p), kind: "tag" };
10796
10797
  return { scan: scanStartTag(text, p), kind: "tag" };
10797
10798
  }
10798
- 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) {
10799
10814
  const tokens = [];
10800
10815
  let p = 0;
10816
+ let inSection = inCdata;
10801
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
+ }
10802
10825
  if (text[p] !== "<") {
10803
- const e = text.indexOf("<", p);
10804
- const end = e < 0 ? text.length : e;
10805
- tokens.push({ kind: "text", start: base + p, end: base + end });
10806
- p = end;
10826
+ p = scanText(text, p, base, tokens);
10807
10827
  continue;
10808
10828
  }
10809
10829
  const { scan, kind } = scanMarkup(text, p);
10810
- if (scan.kind === "invalid") return { tokens, consumed: p, invalid: base + scan.offset };
10811
- 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 };
10812
10832
  const tok = { kind, start: base + p, end: base + scan.end };
10813
10833
  if (scan.dup !== void 0) tok.dup = base + scan.dup;
10814
10834
  tokens.push(tok);
10815
10835
  p = scan.end;
10816
10836
  }
10817
- return { tokens, consumed: p };
10837
+ return { tokens, consumed: p, inCdata: inSection };
10818
10838
  }
10819
10839
  var InputBuffer = class {
10820
10840
  size = 0;
@@ -10865,24 +10885,42 @@ var ExpatFeed = class {
10865
10885
  buffer = new InputBuffer();
10866
10886
  heldStart = 0;
10867
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 = [];
10868
10891
  /** Start of the token expat still holds, or undefined when it holds nothing. */
10869
10892
  get held() {
10870
10893
  return this.heldStart < this.fedEnd ? this.heldStart : void 0;
10871
10894
  }
10872
- /** One `XML_Parse(parser, src[start, end), nbytes, 0)`. */
10873
- feed(start, end, nbytes) {
10874
- 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));
10875
10899
  this.fedEnd = end;
10876
10900
  if (!this.buffer.enough) return { tokens: [] };
10877
10901
  const text = this.src.slice(this.heldStart, end);
10878
- const scan = scanContent(text, this.heldStart);
10902
+ const scan = scanContent(text, this.heldStart, this.inCdata, (a, b) => this.fedBetween(a, b));
10879
10903
  if (scan.invalid !== void 0) {
10880
10904
  return { tokens: scan.tokens, invalid: { message: XML_ERROR_INVALID_TOKEN, offset: scan.invalid } };
10881
10905
  }
10906
+ this.inCdata = scan.inCdata;
10882
10907
  this.heldStart += scan.consumed;
10883
10908
  this.buffer.consumedTo(byteLength(this.src.slice(this.heldStart, end)), scan.consumed > 0);
10884
10909
  return { tokens: scan.tokens };
10885
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
+ }
10886
10924
  };
10887
10925
  var XML_PREDEFINED_ENTITIES = /* @__PURE__ */ new Set(["lt", "gt", "amp", "quot", "apos"]);
10888
10926
  var ENTITY_NAME = /^[A-Za-z_:][\w.:-]*$/;
@@ -10907,6 +10945,46 @@ function parseTagChunk(chunk) {
10907
10945
  return { close, selfClose: !close && body.endsWith("/"), name };
10908
10946
  }
10909
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
+
10910
10988
  // src/common/htmltable-lex-units.ts
10911
10989
  var UNCLOSED_COMMENT = "Warning: Unclosed comment\n";
10912
10990
  var LABEL_CLOSED = "Warning: Label closed before end of HTML element\n";
@@ -11011,20 +11089,17 @@ function parseCloseToken(inner) {
11011
11089
  checkTag(tag);
11012
11090
  return { type: "close", tag: normalizeTag(tag) };
11013
11091
  }
11014
- function cleanText(raw) {
11015
- const isKeep = (c) => c === " " || c === " " || c === "\n" || c === "\r";
11016
- return raw.replace(/[\x00-\x1f\x7f]/g, (c) => isKeep(c) ? c : "");
11017
- }
11018
- function textTokens(raw) {
11019
- const clean = htmlEntityUTF8(cleanText(raw));
11020
- return clean.length > 0 ? [{ type: "text", value: clean }] : [];
11021
- }
11092
+ var EMPTY_ELEMENTS = /* @__PURE__ */ new Set(["BR", "HR", "VR", "IMG"]);
11022
11093
  function tagTokens(text) {
11023
11094
  const inner = text.slice(1, -1).trim();
11024
11095
  if (inner.startsWith("/")) return [parseCloseToken(inner)];
11025
11096
  if (inner.endsWith("/")) {
11026
11097
  const open = parseOpenToken(inner.slice(0, -1).trim());
11027
- 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];
11028
11103
  }
11029
11104
  return [parseOpenToken(inner)];
11030
11105
  }
@@ -11097,6 +11172,7 @@ function eventTokens(site) {
11097
11172
  const { src, tok, st } = site;
11098
11173
  const text = src.slice(tok.start, tok.end);
11099
11174
  if (tok.kind === "comment" || tok.kind === "pi") return [];
11175
+ if (tok.kind === "cdata") return charDataTokens(tok.data ?? "");
11100
11176
  if (tok.kind === "tag") {
11101
11177
  checkTagToken(site);
11102
11178
  return tagTokens(text);
@@ -11122,7 +11198,13 @@ function absorb(carry, lost) {
11122
11198
  function eventGroups(run, res) {
11123
11199
  const groups = [];
11124
11200
  for (const tok of res.tokens) {
11125
- 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
+ }
11126
11208
  if (tokens.length > 0) groups.push({ tokens, tok });
11127
11209
  }
11128
11210
  if (res.invalid !== void 0) {
@@ -11133,6 +11215,7 @@ function eventGroups(run, res) {
11133
11215
  }
11134
11216
  function deliver(run, last) {
11135
11217
  const first = last.tokens[0];
11218
+ releaseXb(run.cd, first);
11136
11219
  attachCarry(run.carry, first);
11137
11220
  const info = { src: run.src, pos: last.tok.start, end: last.tok.end, context: run.st.prev + run.st.curr };
11138
11221
  const prev = run.tokens.at(-1);
@@ -11147,7 +11230,10 @@ function deliver(run, last) {
11147
11230
  function runEvents(run, res) {
11148
11231
  const groups = eventGroups(run, res);
11149
11232
  const last = groups.pop();
11150
- 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
+ }
11151
11237
  if (last !== void 0) deliver(run, last);
11152
11238
  }
11153
11239
  function appendString(into, more) {
@@ -11178,7 +11264,8 @@ function tokenizeDeferred(src, label = { start: 0, end: src.length }) {
11178
11264
  tokens: [],
11179
11265
  st: { stack: [], prev: "", curr: "" },
11180
11266
  expat: new ExpatFeed(src),
11181
- carry: { warnings: [], warn: false }
11267
+ carry: { warnings: [], warn: false },
11268
+ cd: initialCharData()
11182
11269
  };
11183
11270
  let error;
11184
11271
  try {
@@ -11187,8 +11274,7 @@ function tokenizeDeferred(src, label = { start: 0, end: src.length }) {
11187
11274
  run.st.curr = src.slice(u.start, u.end);
11188
11275
  run.carry.warnings.push(...u.warnings);
11189
11276
  if (u.warn) run.carry.warn = true;
11190
- const nbytes = fedBytes(run.st.curr, !run.st.curr.startsWith("<"));
11191
- runEvents(run, run.expat.feed(u.start, u.end, nbytes));
11277
+ runEvents(run, run.expat.feed(u.start, u.end, !run.st.curr.startsWith("<")));
11192
11278
  }
11193
11279
  const held = run.expat.held;
11194
11280
  if (held !== void 0) error = unfinishedError(run, held);
@@ -11353,7 +11439,8 @@ var tableFont = (fontStack) => {
11353
11439
  var MSG_SYNTAX_ERROR = "syntax error";
11354
11440
  var MSG_TEXT_BEFORE_TABLE = "Syntax error: non-space string used before <TABLE>";
11355
11441
  var MSG_TEXT_AFTER_TABLE = "Syntax error: non-space string used after </TABLE>";
11356
- var nonSpace = (text) => /[^ \t\n\r]/.test(text);
11442
+ var nonSpace = (text) => /[^ ]/.test(text);
11443
+ var heldNonSpace = (tbl) => tbl?.type === "open" && nonSpace(tbl.heldText ?? "");
11357
11444
  var parseError = (s, tok, message) => {
11358
11445
  if (tok !== void 0) emitWarnings(s, tok);
11359
11446
  else emitEof(s);
@@ -11374,41 +11461,29 @@ var applyBrTag = (s, t, fontStack, items) => {
11374
11461
  items.push({ br: true, brAlign: parseAlign(t.attrs["align"] ?? ""), ...fontItemProps(font) });
11375
11462
  consumeClose(s, "BR");
11376
11463
  };
11377
- var applyFontTag = (s, t, fontStack, items) => {
11378
- consume(s);
11379
- const font = fontStack[fontStack.length - 1] ?? {};
11380
- fontStack.push(mergeFontState(font, {
11381
- fontColor: t.attrs["color"],
11382
- fontFace: t.attrs["face"],
11383
- fontSize: num(t.attrs["point-size"])
11384
- }));
11464
+ var parseStyledText = (s, tag, fontStack, items) => {
11385
11465
  const inner = parseText(s, fontStack);
11386
11466
  fontStack.pop();
11387
- items.push(...inner.items);
11388
11467
  const nxt = peek(s);
11389
- 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);
11390
11473
  };
11391
- var applyInlineTag = (s, t, fontStack, items) => {
11474
+ var applyStyleTag = (s, t, fontStack, items) => {
11392
11475
  consume(s);
11393
- const font = fontStack[fontStack.length - 1] ?? {};
11394
- fontStack.push(mergeFontState(font, inlineFontState(t.tag, t.attrs)));
11395
- const inner = parseText(s, fontStack);
11396
- fontStack.pop();
11397
- items.push(...inner.items);
11398
- const nxt = peek(s);
11399
- 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);
11400
11479
  };
11401
11480
  var applyOpenTag = (s, t, fontStack, items) => {
11402
11481
  if (t.tag === "BR") {
11403
11482
  applyBrTag(s, t, fontStack, items);
11404
11483
  return true;
11405
11484
  }
11406
- if (t.tag === "FONT") {
11407
- applyFontTag(s, t, fontStack, items);
11408
- return true;
11409
- }
11410
- if (isInlineTag(t.tag)) {
11411
- applyInlineTag(s, t, fontStack, items);
11485
+ if (t.tag === "FONT" || isInlineTag(t.tag)) {
11486
+ applyStyleTag(s, t, fontStack, items);
11412
11487
  return true;
11413
11488
  }
11414
11489
  return false;
@@ -11451,7 +11526,7 @@ var parseFontTable = (s, open, fontStack) => {
11451
11526
  fontStack.push(wrapperFont(open, fontStack));
11452
11527
  const textBefore = skipStrings(s);
11453
11528
  const tblTok = peek(s);
11454
- 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);
11455
11530
  const table = parseTable(s, fontStack);
11456
11531
  const textAfter = skipStrings(s);
11457
11532
  const close = peek(s);
@@ -11480,7 +11555,7 @@ var parseImgContent = (s, t, cellAttrs) => {
11480
11555
  };
11481
11556
  var scanCellTable = (s, t, fontStack, st) => {
11482
11557
  if (st.kind === "image" || st.kind === "table") throw parseError(s, t, MSG_SYNTAX_ERROR);
11483
- 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);
11484
11559
  const tbl = parseTable(s, fontStack);
11485
11560
  st.kind = "table";
11486
11561
  return [tbl];
@@ -11635,14 +11710,14 @@ var consumeRowHr = (s, rows) => {
11635
11710
  var findFirstRealToken = (tokens, start) => {
11636
11711
  for (let i = start; i < tokens.length; i++) {
11637
11712
  const tk = tokens[i];
11638
- if (tk.type !== "text" || tk.value.trim() !== "") return tk;
11713
+ if (tk.type !== "text" || nonSpace(tk.value)) return tk;
11639
11714
  }
11640
11715
  return void 0;
11641
11716
  };
11642
11717
  var skipLeadingWs = (s) => {
11643
11718
  while (true) {
11644
11719
  const nxt = peek(s);
11645
- if (!nxt || nxt.type !== "text" || nxt.value.trim() !== "") break;
11720
+ if (!nxt || nxt.type !== "text" || nonSpace(nxt.value)) break;
11646
11721
  consume(s);
11647
11722
  }
11648
11723
  };
@@ -11668,6 +11743,7 @@ var parseFontTableLabel = (s, open, fontStack) => {
11668
11743
  };
11669
11744
  var parseTableLabel = (s, fontStack) => {
11670
11745
  skipLeadingWs(s);
11746
+ if (heldNonSpace(peek(s))) throw parseError(s, peek(s), MSG_TEXT_BEFORE_TABLE);
11671
11747
  const table = parseTable(s, fontStack);
11672
11748
  finishTableLabel(s);
11673
11749
  return { kind: "table", table };