@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.
- package/dist/common/htmltable-lex-chardata.d.ts +37 -0
- package/dist/common/htmltable-lex-chardata.d.ts.map +1 -0
- package/dist/common/htmltable-lex-expat.d.ts +11 -9
- package/dist/common/htmltable-lex-expat.d.ts.map +1 -1
- package/dist/common/htmltable-lex.d.ts.map +1 -1
- package/dist/common/htmltable-parse.d.ts.map +1 -1
- package/dist/common/htmltable-types.d.ts +2 -0
- package/dist/common/htmltable-types.d.ts.map +1 -1
- package/dist/index.js +136 -60
- package/dist/index.js.map +4 -4
- package/dist/render.js +136 -60
- package/dist/render.js.map +4 -4
- package/package.json +1 -1
- package/src/common/htmltable-lex-chardata.ts +95 -0
- package/src/common/htmltable-lex-expat.ts +84 -21
- package/src/common/htmltable-lex.ts +33 -27
- package/src/common/htmltable-parse.ts +30 -32
- package/src/common/htmltable-types.ts +2 -0
|
@@ -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,
|
|
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;
|
|
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;
|
|
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;
|
|
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
|
|
10691
|
-
|
|
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
|
-
|
|
10696
|
-
|
|
10694
|
+
return endsUnit && text.endsWith("]") ? `${text.slice(0, -1)}]` : 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
|
-
|
|
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
|
-
|
|
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,
|
|
10874
|
-
this.
|
|
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
|
-
|
|
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
|
-
|
|
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)
|
|
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
|
-
|
|
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) => /[^
|
|
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
|
|
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
|
|
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
|
|
11474
|
+
var applyStyleTag = (s, t, fontStack, items) => {
|
|
11392
11475
|
consume(s);
|
|
11393
|
-
const
|
|
11394
|
-
fontStack.push(mergeFontState(
|
|
11395
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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 };
|