postext 1.18.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/design/imageAltText.test.js +1 -2
- package/dist/__tests__/design/imageAltText.test.js.map +1 -1
- package/dist/__tests__/design/titleTextMarks.test.d.ts +2 -0
- package/dist/__tests__/design/titleTextMarks.test.d.ts.map +1 -0
- package/dist/__tests__/design/titleTextMarks.test.js +67 -0
- package/dist/__tests__/design/titleTextMarks.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +7 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/headingLetterSpacing.test.js +1 -1
- package/dist/__tests__/headingLetterSpacing.test.js.map +1 -1
- package/dist/__tests__/parse/citations.test.js +33 -2
- package/dist/__tests__/parse/citations.test.js.map +1 -1
- package/dist/__tests__/pipeline/bibliographyNumbering.test.d.ts +2 -0
- package/dist/__tests__/pipeline/bibliographyNumbering.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/bibliographyNumbering.test.js +100 -0
- package/dist/__tests__/pipeline/bibliographyNumbering.test.js.map +1 -0
- package/dist/__tests__/pipeline/citationAffixesCaptions.test.d.ts +2 -0
- package/dist/__tests__/pipeline/citationAffixesCaptions.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/citationAffixesCaptions.test.js +156 -0
- package/dist/__tests__/pipeline/citationAffixesCaptions.test.js.map +1 -0
- package/dist/__tests__/pipeline/closingBoxSingleColumn.test.d.ts +2 -0
- package/dist/__tests__/pipeline/closingBoxSingleColumn.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/closingBoxSingleColumn.test.js +58 -0
- package/dist/__tests__/pipeline/closingBoxSingleColumn.test.js.map +1 -0
- package/dist/__tests__/pipeline/footnoteSymbols.test.d.ts +2 -0
- package/dist/__tests__/pipeline/footnoteSymbols.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/footnoteSymbols.test.js +96 -0
- package/dist/__tests__/pipeline/footnoteSymbols.test.js.map +1 -0
- package/dist/__tests__/pipeline/inlineRefRender.test.js +18 -0
- package/dist/__tests__/pipeline/inlineRefRender.test.js.map +1 -1
- package/dist/__tests__/pipeline/inlineSpanEmbed.test.d.ts +2 -0
- package/dist/__tests__/pipeline/inlineSpanEmbed.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/inlineSpanEmbed.test.js +67 -0
- package/dist/__tests__/pipeline/inlineSpanEmbed.test.js.map +1 -0
- package/dist/__tests__/pipeline/snippetMath.test.d.ts +2 -0
- package/dist/__tests__/pipeline/snippetMath.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/snippetMath.test.js +113 -0
- package/dist/__tests__/pipeline/snippetMath.test.js.map +1 -0
- package/dist/__tests__/pipeline/spanHeadingMidPage.test.d.ts +2 -0
- package/dist/__tests__/pipeline/spanHeadingMidPage.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/spanHeadingMidPage.test.js +94 -0
- package/dist/__tests__/pipeline/spanHeadingMidPage.test.js.map +1 -0
- package/dist/__tests__/pipeline/statementNumbering.test.d.ts +2 -0
- package/dist/__tests__/pipeline/statementNumbering.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/statementNumbering.test.js +217 -0
- package/dist/__tests__/pipeline/statementNumbering.test.js.map +1 -0
- package/dist/bundle/book.js +1 -1
- package/dist/bundle/book.js.map +1 -1
- package/dist/canvas-backend/blockRender.d.ts +4 -1
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +3 -1
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.js +8 -0
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/citations/bibtex.d.ts +7 -1
- package/dist/citations/bibtex.d.ts.map +1 -1
- package/dist/citations/bibtex.js +14 -1
- package/dist/citations/bibtex.js.map +1 -1
- package/dist/citations/context.d.ts +26 -2
- package/dist/citations/context.d.ts.map +1 -1
- package/dist/citations/context.js +81 -8
- package/dist/citations/context.js.map +1 -1
- package/dist/citations/data.d.ts.map +1 -1
- package/dist/citations/data.js +3 -1
- package/dist/citations/data.js.map +1 -1
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +6 -3
- package/dist/configWarnings.js.map +1 -1
- package/dist/defaults/calloutStyles.d.ts.map +1 -1
- package/dist/defaults/calloutStyles.js +22 -0
- package/dist/defaults/calloutStyles.js.map +1 -1
- package/dist/defaults/citations.d.ts.map +1 -1
- package/dist/defaults/citations.js +4 -0
- package/dist/defaults/citations.js.map +1 -1
- package/dist/defaults/footnotes.d.ts +5 -1
- package/dist/defaults/footnotes.d.ts.map +1 -1
- package/dist/defaults/footnotes.js +38 -4
- package/dist/defaults/footnotes.js.map +1 -1
- package/dist/defaults/headings.d.ts.map +1 -1
- package/dist/defaults/headings.js +9 -0
- package/dist/defaults/headings.js.map +1 -1
- package/dist/defaults/index.d.ts +1 -1
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +1 -1
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/math.d.ts +3 -1
- package/dist/defaults/math.d.ts.map +1 -1
- package/dist/defaults/math.js +42 -1
- package/dist/defaults/math.js.map +1 -1
- package/dist/design/layout.d.ts +2 -2
- package/dist/design/layout.d.ts.map +1 -1
- package/dist/design/layout.js +6 -3
- package/dist/design/layout.js.map +1 -1
- package/dist/design/placeholders.d.ts +10 -1
- package/dist/design/placeholders.d.ts.map +1 -1
- package/dist/design/placeholders.js +7 -2
- package/dist/design/placeholders.js.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +10 -1
- package/dist/html-backend.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +3 -2
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/citations.d.ts +16 -1
- package/dist/parse/citations.d.ts.map +1 -1
- package/dist/parse/citations.js +39 -3
- package/dist/parse/citations.js.map +1 -1
- package/dist/parse/equationLabels.d.ts +16 -0
- package/dist/parse/equationLabels.d.ts.map +1 -0
- package/dist/parse/equationLabels.js +44 -0
- package/dist/parse/equationLabels.js.map +1 -0
- package/dist/parse/index.d.ts +1 -1
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js +1 -1
- package/dist/parse/index.js.map +1 -1
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +59 -8
- package/dist/parse/inlineFormatting.js.map +1 -1
- package/dist/parse/inlineMath.d.ts +6 -1
- package/dist/parse/inlineMath.d.ts.map +1 -1
- package/dist/parse/inlineMath.js +24 -1
- package/dist/parse/inlineMath.js.map +1 -1
- package/dist/parse/inlineSnippet.d.ts +26 -5
- package/dist/parse/inlineSnippet.d.ts.map +1 -1
- package/dist/parse/inlineSnippet.js +36 -7
- package/dist/parse/inlineSnippet.js.map +1 -1
- package/dist/parse/sourceMapping.d.ts.map +1 -1
- package/dist/parse/sourceMapping.js +24 -6
- package/dist/parse/sourceMapping.js.map +1 -1
- package/dist/parse/types.d.ts +4 -0
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/anchors.d.ts.map +1 -1
- package/dist/pipeline/anchors.js +6 -0
- package/dist/pipeline/anchors.js.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +119 -22
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildMeasurement.d.ts +3 -0
- package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
- package/dist/pipeline/buildMeasurement.js +1 -0
- package/dist/pipeline/buildMeasurement.js.map +1 -1
- package/dist/pipeline/citations.d.ts +20 -1
- package/dist/pipeline/citations.d.ts.map +1 -1
- package/dist/pipeline/citations.js +179 -42
- package/dist/pipeline/citations.js.map +1 -1
- package/dist/pipeline/columnBalancing.d.ts.map +1 -1
- package/dist/pipeline/columnBalancing.js +6 -1
- package/dist/pipeline/columnBalancing.js.map +1 -1
- package/dist/pipeline/continuation.d.ts.map +1 -1
- package/dist/pipeline/continuation.js +8 -1
- package/dist/pipeline/continuation.js.map +1 -1
- package/dist/pipeline/crossRefs.d.ts +3 -0
- package/dist/pipeline/crossRefs.d.ts.map +1 -1
- package/dist/pipeline/crossRefs.js +21 -1
- package/dist/pipeline/crossRefs.js.map +1 -1
- package/dist/pipeline/footnotes.d.ts +23 -5
- package/dist/pipeline/footnotes.d.ts.map +1 -1
- package/dist/pipeline/footnotes.js +23 -2
- package/dist/pipeline/footnotes.js.map +1 -1
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +26 -12
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/measureContentBlock.d.ts +3 -0
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +8 -1
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/outline.d.ts +6 -2
- package/dist/pipeline/outline.d.ts.map +1 -1
- package/dist/pipeline/outline.js +20 -3
- package/dist/pipeline/outline.js.map +1 -1
- package/dist/pipeline/placement.d.ts +12 -0
- package/dist/pipeline/placement.d.ts.map +1 -1
- package/dist/pipeline/placement.js +51 -0
- package/dist/pipeline/placement.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts +11 -1
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +28 -8
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/pipeline/resourceNumbering.d.ts +7 -1
- package/dist/pipeline/resourceNumbering.d.ts.map +1 -1
- package/dist/pipeline/resourceNumbering.js +12 -0
- package/dist/pipeline/resourceNumbering.js.map +1 -1
- package/dist/pipeline/spanEmbeds.d.ts +32 -0
- package/dist/pipeline/spanEmbeds.d.ts.map +1 -0
- package/dist/pipeline/spanEmbeds.js +94 -0
- package/dist/pipeline/spanEmbeds.js.map +1 -0
- package/dist/pipeline/statementNumbering.d.ts +93 -0
- package/dist/pipeline/statementNumbering.d.ts.map +1 -0
- package/dist/pipeline/statementNumbering.js +360 -0
- package/dist/pipeline/statementNumbering.js.map +1 -0
- package/dist/react/createLayout.d.ts.map +1 -1
- package/dist/react/createLayout.js +2 -1
- package/dist/react/createLayout.js.map +1 -1
- package/dist/types.d.ts +155 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/worker/layout.worker.js +6 -3
- package/dist/worker/layout.worker.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Labelled equations and numbered statements (#530). A `\label{eq:x}` in a
|
|
3
|
+
* display formula (on a row of an `align` or `gather`) numbers it in
|
|
4
|
+
* reading order, as LaTeX's amsmath does; a callout style with `numbering`
|
|
5
|
+
* counts its boxes as theorems, lemmas or definitions, as amsthm does, and
|
|
6
|
+
* styles naming one counter share it. Both are anchors: `\eqref{eq:x}`,
|
|
7
|
+
* `\ref{x}`, `:ref{id="x"}` and `@eq:x` print their number and link to
|
|
8
|
+
* them.
|
|
9
|
+
*
|
|
10
|
+
* Two passes over the parsed content: {@link numberStatements} counts
|
|
11
|
+
* (pure, also run by the outline and the continuation, so a book laid out
|
|
12
|
+
* one chapter at a time numbers on), {@link applyStatementNumbering}
|
|
13
|
+
* writes the numbers into the content the layout measures — a `\tag*` in
|
|
14
|
+
* the formula, a run-in label or a title on the box, the references inside
|
|
15
|
+
* formulas — and sets a style's end mark (a proof's ∎).
|
|
16
|
+
*/
|
|
17
|
+
import { TEX_LABEL_RE } from '../parse/equationLabels';
|
|
18
|
+
import { computeHeadingContext, counterResets, renderTemplateNumber } from './resourceNumbering';
|
|
19
|
+
import { headingIsNumbered } from './headingStyles';
|
|
20
|
+
import { resolvedLocale } from './config';
|
|
21
|
+
const NBSP = ' ';
|
|
22
|
+
const EMPTY_HEADING = { h1: 0, h2: 0, h3: 0, h4: 0, h5: 0, h6: 0 };
|
|
23
|
+
/** Environments whose rows (`\\`) are numbered one by one. */
|
|
24
|
+
const ROW_ENV_RE = /^\s*\\begin\{(align|alignat|flalign|gather|eqnarray)(\*?)\}(\{[^{}]*\})?([\s\S]*)\\end\{\1\2\}\s*$/;
|
|
25
|
+
const NO_NUMBER_RE = /\\(?:nonumber|notag)(?![A-Za-z])/g;
|
|
26
|
+
const HAS_NO_NUMBER_RE = /\\(?:nonumber|notag)(?![A-Za-z])/;
|
|
27
|
+
const TAG_RE = /\\tag(\*?)\s*\{([^{}]*)\}/;
|
|
28
|
+
/** The style a callout fence selects (as `pickCalloutStyle`). */
|
|
29
|
+
function calloutStyleOf(styles, type) {
|
|
30
|
+
if (styles.length === 0)
|
|
31
|
+
return undefined;
|
|
32
|
+
return (type ? styles.find((s) => s.id === type) : undefined) ?? styles[0];
|
|
33
|
+
}
|
|
34
|
+
/** A number in an equation format: `({n})` → "(3)". */
|
|
35
|
+
function formatted(format, n) {
|
|
36
|
+
return format.includes('{n}') ? format.split('{n}').join(n) : `${format}${n}`;
|
|
37
|
+
}
|
|
38
|
+
/** Text set in a `\tag*{…}` / `\text{…}`: TeX's special characters
|
|
39
|
+
* escaped. */
|
|
40
|
+
function texText(text) {
|
|
41
|
+
return text.replace(/[\\{}$#%&_^~]/g, (c) => (c === '\\' || c === '^' || c === '~' ? '' : `\\${c}`));
|
|
42
|
+
}
|
|
43
|
+
/** The rows of an environment's body: its `\\` at brace depth 0, outside
|
|
44
|
+
* any nested environment. */
|
|
45
|
+
function splitRows(body) {
|
|
46
|
+
const rows = [];
|
|
47
|
+
let depth = 0;
|
|
48
|
+
let env = 0;
|
|
49
|
+
let start = 0;
|
|
50
|
+
for (let i = 0; i < body.length; i++) {
|
|
51
|
+
const c = body[i];
|
|
52
|
+
if (c === '\\') {
|
|
53
|
+
if (body.startsWith('\\begin{', i))
|
|
54
|
+
env++;
|
|
55
|
+
else if (body.startsWith('\\end{', i))
|
|
56
|
+
env = Math.max(0, env - 1);
|
|
57
|
+
else if (body[i + 1] === '\\' && depth === 0 && env === 0) {
|
|
58
|
+
rows.push(body.slice(start, i + 2));
|
|
59
|
+
start = i + 2;
|
|
60
|
+
}
|
|
61
|
+
i++;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (c === '{')
|
|
65
|
+
depth++;
|
|
66
|
+
else if (c === '}')
|
|
67
|
+
depth = Math.max(0, depth - 1);
|
|
68
|
+
}
|
|
69
|
+
rows.push(body.slice(start));
|
|
70
|
+
return rows;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Count the labelled equations and the counted boxes of `blocks`, in
|
|
74
|
+
* reading order, from the counters `start` carries (the preceding
|
|
75
|
+
* chapters'). Pure: the content is not touched.
|
|
76
|
+
*/
|
|
77
|
+
export function numberStatements(blocks, resolved, start) {
|
|
78
|
+
const targets = new Map();
|
|
79
|
+
const tex = new Map();
|
|
80
|
+
const statements = new Map();
|
|
81
|
+
const counters = { ...(start?.counters ?? {}) };
|
|
82
|
+
const counted = resolved.calloutStyles.some((s) => s.numbering);
|
|
83
|
+
const hasLabels = blocks.some((b) => b.type === 'mathDisplay' && b.tex !== undefined && b.tex.includes('\\label'));
|
|
84
|
+
if (!counted && !hasLabels)
|
|
85
|
+
return { targets, tex, statements, counters };
|
|
86
|
+
const headings = computeHeadingContext(blocks, start?.headings, (b) => headingIsNumbered(b, resolved));
|
|
87
|
+
const digits = resolved.numerals;
|
|
88
|
+
const locale = resolvedLocale(resolved);
|
|
89
|
+
const eq = resolved.math.equationNumbering;
|
|
90
|
+
/** Advance `name` at block `i`, its value reset where `resetOn` says. */
|
|
91
|
+
const advance = (name, i, resetOn) => {
|
|
92
|
+
const heading = headings[i] ?? start?.headings ?? EMPTY_HEADING;
|
|
93
|
+
const prev = counters[name];
|
|
94
|
+
const value = prev && !counterResets(prev.heading, heading, resetOn) ? prev.counter + 1 : 1;
|
|
95
|
+
counters[name] = { counter: value, heading };
|
|
96
|
+
return value;
|
|
97
|
+
};
|
|
98
|
+
const add = (t) => {
|
|
99
|
+
if (!targets.has(t.id))
|
|
100
|
+
targets.set(t.id, t);
|
|
101
|
+
};
|
|
102
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
103
|
+
const b = blocks[i];
|
|
104
|
+
if (counted && b.type === 'containerStart' && b.containerName === 'callout' && b.containerId !== undefined) {
|
|
105
|
+
const style = calloutStyleOf(resolved.calloutStyles, b.containerAttrs?.type);
|
|
106
|
+
const numbering = style?.numbering;
|
|
107
|
+
if (!style || !numbering)
|
|
108
|
+
continue;
|
|
109
|
+
let number = '';
|
|
110
|
+
if (numbering.counter) {
|
|
111
|
+
const value = advance(numbering.counter, i, numbering.resetOn);
|
|
112
|
+
number = renderTemplateNumber(numbering.numberingTemplate, value, numbering.counterFormat, counters[numbering.counter].heading, digits, locale);
|
|
113
|
+
}
|
|
114
|
+
const head = number ? `${numbering.label}${numbering.label ? NBSP : ''}${number}` : numbering.label;
|
|
115
|
+
const note = b.containerAttrs?.title?.trim();
|
|
116
|
+
statements.set(b.containerId, { numbering, style, head, ...(note ? { note } : {}) });
|
|
117
|
+
const id = b.containerAttrs?.id?.trim();
|
|
118
|
+
if (id && number)
|
|
119
|
+
add({ id, kind: 'statement', number, label: head });
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (b.type !== 'mathDisplay' || b.tex === undefined)
|
|
123
|
+
continue;
|
|
124
|
+
if (!b.tex.includes('\\label') && !b.tex.includes('\\nonumber') && !b.tex.includes('\\notag'))
|
|
125
|
+
continue;
|
|
126
|
+
/** Number one row (or the whole formula): its first label becomes the
|
|
127
|
+
* tag, unless the row says `\nonumber` or tags itself. */
|
|
128
|
+
const numberRow = (row) => {
|
|
129
|
+
const labels = [];
|
|
130
|
+
TEX_LABEL_RE.lastIndex = 0;
|
|
131
|
+
let m;
|
|
132
|
+
while ((m = TEX_LABEL_RE.exec(row)) !== null)
|
|
133
|
+
if (m[1])
|
|
134
|
+
labels.push(m[1]);
|
|
135
|
+
const suppressed = HAS_NO_NUMBER_RE.test(row);
|
|
136
|
+
let out = row.replace(NO_NUMBER_RE, '');
|
|
137
|
+
if (labels.length === 0)
|
|
138
|
+
return out;
|
|
139
|
+
const tag = TAG_RE.exec(out);
|
|
140
|
+
let tagText = '';
|
|
141
|
+
if (tag) {
|
|
142
|
+
// An explicit tag prints as written and counts nothing: the label
|
|
143
|
+
// names what it prints.
|
|
144
|
+
const text = tag[2].trim();
|
|
145
|
+
for (const id of labels)
|
|
146
|
+
add({ id, kind: 'equation', number: text, label: tag[1] ? text : `(${text})` });
|
|
147
|
+
}
|
|
148
|
+
else if (!suppressed && eq.enabled) {
|
|
149
|
+
const value = advance('equation', i, eq.resetOn);
|
|
150
|
+
const number = renderTemplateNumber(eq.numberingTemplate, value, eq.counterFormat, counters.equation.heading, digits, locale);
|
|
151
|
+
const label = formatted(eq.format, number);
|
|
152
|
+
for (const id of labels)
|
|
153
|
+
add({ id, kind: 'equation', number, label });
|
|
154
|
+
tagText = `\\tag*{${texText(label)}}`;
|
|
155
|
+
}
|
|
156
|
+
// The first label becomes the tag where it stands (inside the row's
|
|
157
|
+
// own group, where MathJax takes a tag); the others go.
|
|
158
|
+
let first = true;
|
|
159
|
+
out = out.replace(TEX_LABEL_RE, () => {
|
|
160
|
+
const put = first ? tagText : '';
|
|
161
|
+
first = false;
|
|
162
|
+
return put;
|
|
163
|
+
});
|
|
164
|
+
return out;
|
|
165
|
+
};
|
|
166
|
+
const env = ROW_ENV_RE.exec(b.tex);
|
|
167
|
+
let rewritten;
|
|
168
|
+
if (env) {
|
|
169
|
+
const [, name, star, arg = ''] = env;
|
|
170
|
+
const body = env[4];
|
|
171
|
+
rewritten = `\\begin{${name}${star}}${arg}${splitRows(body).map(numberRow).join('')}\\end{${name}${star}}`;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
rewritten = numberRow(b.tex);
|
|
175
|
+
}
|
|
176
|
+
if (rewritten !== b.tex)
|
|
177
|
+
tex.set(b.sourceStart, rewritten);
|
|
178
|
+
}
|
|
179
|
+
return { targets, tex, statements, counters };
|
|
180
|
+
}
|
|
181
|
+
const MATH_REF_RE = /\\(eq)?ref\s*\{\s*([^{}]*?)\s*\}/g;
|
|
182
|
+
/** `\eqref{x}` / `\ref{x}` in a formula's TeX replaced by the number they
|
|
183
|
+
* name, as text. */
|
|
184
|
+
export function resolveMathRefs(tex, lookup) {
|
|
185
|
+
if (!tex.includes('ref'))
|
|
186
|
+
return tex;
|
|
187
|
+
return tex.replace(MATH_REF_RE, (_, eq, id) => {
|
|
188
|
+
const t = lookup(id);
|
|
189
|
+
const text = t ? (eq ? t.label : t.number) : eq ? '(?)' : '?';
|
|
190
|
+
return `\\text{${texText(text)}}`;
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
/** The TeX of an end mark set as a formula's tag. */
|
|
194
|
+
const MARK_TEX = {
|
|
195
|
+
'∎': '\\blacksquare',
|
|
196
|
+
'■': '\\blacksquare',
|
|
197
|
+
'▪': '\\blacksquare',
|
|
198
|
+
'□': '\\square',
|
|
199
|
+
'◻': '\\square',
|
|
200
|
+
'▫': '\\square',
|
|
201
|
+
};
|
|
202
|
+
/** Text blocks a run-in label can open. */
|
|
203
|
+
const RUN_IN_HOSTS = new Set(['paragraph', 'blockquote']);
|
|
204
|
+
/** Text blocks an end mark can close. */
|
|
205
|
+
const TEXT_HOSTS = new Set(['paragraph', 'listItem', 'blockquote']);
|
|
206
|
+
/** `block` with `spans` set before its text (the run-in label) or after it
|
|
207
|
+
* (the end mark). The new characters map to the block's first (last)
|
|
208
|
+
* source character. */
|
|
209
|
+
function withSpans(block, spans, at) {
|
|
210
|
+
const text = spans.map((s) => s.text).join('');
|
|
211
|
+
const origin = at === 'start' ? block.sourceMap[0] ?? block.sourceStart : block.sourceMap[block.sourceMap.length - 1] ?? block.sourceEnd;
|
|
212
|
+
const map = new Array(text.length).fill(origin);
|
|
213
|
+
return at === 'start'
|
|
214
|
+
? { ...block, text: text + block.text, spans: [...spans, ...block.spans], sourceMap: [...map, ...block.sourceMap] }
|
|
215
|
+
: { ...block, text: block.text + text, spans: [...block.spans, ...spans], sourceMap: [...block.sourceMap, ...map] };
|
|
216
|
+
}
|
|
217
|
+
/** A paragraph holding only `spans`, at `block`'s source position. */
|
|
218
|
+
function paragraphOf(spans, at, extra) {
|
|
219
|
+
const text = spans.map((s) => s.text).join('');
|
|
220
|
+
return { type: 'paragraph', text, spans, sourceStart: at, sourceEnd: at, sourceMap: new Array(text.length).fill(at), ...extra };
|
|
221
|
+
}
|
|
222
|
+
/** The spans of a box's run-in label: "**Theorem 2** (Bradley–Terry)**.** ". */
|
|
223
|
+
function runInSpans(s) {
|
|
224
|
+
const n = s.numbering;
|
|
225
|
+
const bodyItalic = s.style.body.italic;
|
|
226
|
+
// A span's `italic` sets it in the other face than the box's body.
|
|
227
|
+
const labelItalic = n.italic ? !bodyItalic : bodyItalic;
|
|
228
|
+
const out = [{ text: s.head, bold: n.bold, italic: labelItalic }];
|
|
229
|
+
if (s.note)
|
|
230
|
+
out.push({ text: ` (${s.note})`, bold: false, italic: bodyItalic });
|
|
231
|
+
if (n.suffix)
|
|
232
|
+
out.push({ text: n.suffix, bold: n.bold, italic: labelItalic });
|
|
233
|
+
out.push({ text: ' ', bold: false, italic: false });
|
|
234
|
+
return out;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* The content with the numbers written in (see the module comment). The
|
|
238
|
+
* blocks `numbering` counted are found by their key (a formula's source
|
|
239
|
+
* start, a fence's container id), so the content may have gained blocks
|
|
240
|
+
* since it was counted (an expanded `:::toc`). `lookup` resolves a
|
|
241
|
+
* reference inside a formula that names a target of another chapter.
|
|
242
|
+
*/
|
|
243
|
+
export function applyStatementNumbering(blocks, numbering, resolved, lookup) {
|
|
244
|
+
const marks = resolved.calloutStyles.some((s) => s.endMark.length > 0);
|
|
245
|
+
const refs = blocks.some((b) => (b.tex !== undefined && b.tex.includes('ref')) || b.spans.some((s) => s.math?.tex.includes('ref')));
|
|
246
|
+
if (numbering.tex.size === 0 && numbering.statements.size === 0 && !marks && !refs)
|
|
247
|
+
return blocks;
|
|
248
|
+
const find = (id) => numbering.targets.get(id) ?? lookup?.(id);
|
|
249
|
+
const out = [];
|
|
250
|
+
/** Open counted boxes: the index in `out` of their start, whether the
|
|
251
|
+
* run-in label is still owed, and the box's style. */
|
|
252
|
+
const open = [];
|
|
253
|
+
for (const raw of blocks) {
|
|
254
|
+
let b = raw;
|
|
255
|
+
if (b.type === 'mathDisplay' && b.tex !== undefined) {
|
|
256
|
+
const tex = resolveMathRefs(numbering.tex.get(b.sourceStart) ?? b.tex, find);
|
|
257
|
+
if (tex !== b.tex)
|
|
258
|
+
b = { ...b, tex };
|
|
259
|
+
}
|
|
260
|
+
else if (refs && b.spans.some((s) => s.math?.tex.includes('ref'))) {
|
|
261
|
+
b = { ...b, spans: b.spans.map((s) => (s.math && s.math.tex.includes('ref') ? { ...s, math: { ...s.math, tex: resolveMathRefs(s.math.tex, find) } } : s)) };
|
|
262
|
+
}
|
|
263
|
+
const top = open[open.length - 1];
|
|
264
|
+
const closing = b.type === 'containerEnd' && top !== undefined && b.containerId === top.id;
|
|
265
|
+
if (top?.owed && !closing) {
|
|
266
|
+
// The label opens the box's first paragraph; a box that opens with
|
|
267
|
+
// anything else (a list, a formula, a nested box) gets a paragraph
|
|
268
|
+
// of its own for it.
|
|
269
|
+
const owed = top.owed;
|
|
270
|
+
top.owed = undefined;
|
|
271
|
+
if (RUN_IN_HOSTS.has(b.type) && b.toc === undefined) {
|
|
272
|
+
out.push(withSpans(b, runInSpans(owed), 'start'));
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
out.push(paragraphOf(runInSpans(owed), b.sourceStart));
|
|
276
|
+
}
|
|
277
|
+
if (b.type === 'containerStart' && b.containerName === 'callout' && b.containerId !== undefined) {
|
|
278
|
+
const id = b.containerId;
|
|
279
|
+
const counted = numbering.statements.get(id);
|
|
280
|
+
const style = counted?.style ?? (marks ? calloutStyleOf(resolved.calloutStyles, b.containerAttrs?.type) : undefined);
|
|
281
|
+
if (counted && counted.numbering.placement === 'title') {
|
|
282
|
+
const title = counted.note ? `${counted.head} (${counted.note})` : counted.head;
|
|
283
|
+
b = { ...b, containerAttrs: { ...(b.containerAttrs ?? {}), title } };
|
|
284
|
+
}
|
|
285
|
+
else if (counted) {
|
|
286
|
+
// The fence's title goes into the run-in label, not over the box.
|
|
287
|
+
const attrs = { ...(b.containerAttrs ?? {}) };
|
|
288
|
+
delete attrs.title;
|
|
289
|
+
b = { ...b, containerAttrs: attrs };
|
|
290
|
+
}
|
|
291
|
+
out.push(b);
|
|
292
|
+
open.push({ id, ...(counted && counted.numbering.placement === 'runIn' ? { owed: counted } : {}), ...(style ? { style } : {}) });
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
if (closing) {
|
|
296
|
+
open.pop();
|
|
297
|
+
if (top.owed)
|
|
298
|
+
out.push(paragraphOf(runInSpans(top.owed), b.sourceStart));
|
|
299
|
+
const mark = top.style?.endMark ?? '';
|
|
300
|
+
if (mark)
|
|
301
|
+
setEndMark(out, mark, b.sourceStart, top.style.body.italic);
|
|
302
|
+
out.push(b);
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
out.push(b);
|
|
306
|
+
}
|
|
307
|
+
return out;
|
|
308
|
+
}
|
|
309
|
+
/** Set a box's end mark after the last block of `out` (the box's last
|
|
310
|
+
* child): on its last line, or a line of its own. A formula takes it as
|
|
311
|
+
* its tag when it has none. */
|
|
312
|
+
function setEndMark(out, mark, at, bodyItalic) {
|
|
313
|
+
const last = out[out.length - 1];
|
|
314
|
+
const spans = [{ text: ' ', bold: false, italic: false }, { text: mark, bold: false, italic: bodyItalic }];
|
|
315
|
+
if (last && TEXT_HOSTS.has(last.type) && last.toc === undefined && last.text.length > 0) {
|
|
316
|
+
out[out.length - 1] = { ...withSpans(last, spans, 'end'), endMark: mark };
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
const texMark = MARK_TEX[mark];
|
|
320
|
+
if (last && last.type === 'mathDisplay' && last.tex !== undefined && texMark && !/\\tag\b/.test(last.tex)) {
|
|
321
|
+
out[out.length - 1] = { ...last, tex: `${last.tex}\\tag*{$${texMark}$}` };
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
out.push({ ...paragraphOf([{ text: mark, bold: false, italic: bodyItalic }], at), endMark: mark });
|
|
325
|
+
}
|
|
326
|
+
/** The targets a book outline's counted anchors name, for references
|
|
327
|
+
* inside formulas to another chapter. */
|
|
328
|
+
export function outlineLookup(targets) {
|
|
329
|
+
if (!targets)
|
|
330
|
+
return undefined;
|
|
331
|
+
return (id) => {
|
|
332
|
+
const t = targets.get(id);
|
|
333
|
+
return t?.numberLabel ? { number: t.number, label: t.numberLabel } : undefined;
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
/** A box's end mark flush right on its block's last line (#530): the space
|
|
337
|
+
* before it widened to the measure, or, on a line the mark has to itself,
|
|
338
|
+
* a space set before it. A line read in another order (right-to-left
|
|
339
|
+
* runs) keeps its setting. */
|
|
340
|
+
export function flushEndMark(measured, mark, measureWidth) {
|
|
341
|
+
const lines = measured.lines;
|
|
342
|
+
const last = lines[lines.length - 1];
|
|
343
|
+
const segs = last?.segments;
|
|
344
|
+
if (!last || !segs || segs.length === 0 || last.order)
|
|
345
|
+
return measured;
|
|
346
|
+
const k = segs.length - 1;
|
|
347
|
+
const seg = segs[k];
|
|
348
|
+
if (seg.kind !== 'text' || seg.text !== mark)
|
|
349
|
+
return measured;
|
|
350
|
+
const extra = measureWidth - (last.bbox.x + last.bbox.width);
|
|
351
|
+
if (extra <= 0.01)
|
|
352
|
+
return measured;
|
|
353
|
+
const prev = segs[k - 1];
|
|
354
|
+
const widened = prev && prev.kind === 'space'
|
|
355
|
+
? [...segs.slice(0, k - 1), { ...prev, width: prev.width + extra, labelTab: true }, seg]
|
|
356
|
+
: [...segs.slice(0, k), { kind: 'space', text: '', width: extra, labelTab: true }, seg];
|
|
357
|
+
const line = { ...last, segments: widened, bbox: { ...last.bbox, width: last.bbox.width + extra } };
|
|
358
|
+
return { ...measured, lines: [...lines.slice(0, -1), line] };
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=statementNumbering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statementNumbering.js","sourceRoot":"","sources":["../../src/pipeline/statementNumbering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAIvD,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,IAAI,GAAG,GAAG,CAAC;AAsCjB,MAAM,aAAa,GAAoB,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAEpF,8DAA8D;AAC9D,MAAM,UAAU,GAAG,oGAAoG,CAAC;AACxH,MAAM,YAAY,GAAG,mCAAmC,CAAC;AACzD,MAAM,gBAAgB,GAAG,kCAAkC,CAAC;AAC5D,MAAM,MAAM,GAAG,2BAA2B,CAAC;AAE3C,iEAAiE;AACjE,SAAS,cAAc,CAAC,MAA6C,EAAE,IAAwB;IAC7F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,uDAAuD;AACvD,SAAS,SAAS,CAAC,MAAc,EAAE,CAAS;IAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;AAChF,CAAC;AAED;eACe;AACf,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACvG,CAAC;AAED;8BAC8B;AAC9B,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;gBAAE,GAAG,EAAE,CAAC;iBACrC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;iBAC7D,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACpC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;YACD,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aAClB,IAAI,CAAC,KAAK,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA+B,EAC/B,QAAwB,EACxB,KAAwE;IAExE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IACvD,MAAM,QAAQ,GAA0B,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;IACvE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACnH,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IAE1E,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzH,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACjC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC3C,yEAAyE;IACzE,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,CAAS,EAAE,OAAkD,EAAU,EAAE;QACtG,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,QAAQ,IAAI,aAAa,CAAC;QAChE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,CAAC,CAAgB,EAAQ,EAAE;QACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC3G,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YAC7E,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,CAAC;YACnC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS;gBAAE,SAAS;YACnC,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC/D,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,iBAAiB,EAAE,KAAK,EAAE,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACnJ,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;YACpG,MAAM,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC7C,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACrF,MAAM,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YACxC,IAAI,EAAE,IAAI,MAAM;gBAAE,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS;YAAE,SAAS;QAC9D,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,SAAS;QACxG;mEAC2D;QAC3D,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE;YACxC,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,YAAY,CAAC,SAAS,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAyB,CAAC;YAC9B,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI;gBAAE,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,GAAG,CAAC;YACpC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,GAAG,EAAE,CAAC;gBACR,kEAAkE;gBAClE,wBAAwB;gBACxB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;gBAC5B,KAAK,MAAM,EAAE,IAAI,MAAM;oBAAE,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;YAC3G,CAAC;iBAAM,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;gBACrC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;gBACjD,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC/H,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC3C,KAAK,MAAM,EAAE,IAAI,MAAM;oBAAE,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBACtE,OAAO,GAAG,UAAU,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;YACxC,CAAC;YACD,oEAAoE;YACpE,wDAAwD;YACxD,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE;gBACnC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,KAAK,GAAG,KAAK,CAAC;gBACd,OAAO,GAAG,CAAC;YACb,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QACF,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,SAAiB,CAAC;QACtB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;YACrC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;YACrB,SAAS,GAAG,WAAW,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,CAAC;QAC7G,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,SAAS,KAAK,CAAC,CAAC,GAAG;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAChD,CAAC;AAMD,MAAM,WAAW,GAAG,mCAAmC,CAAC;AAExD;qBACqB;AACrB,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,MAAqB;IAChE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAsB,EAAE,EAAU,EAAE,EAAE;QACxE,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9D,OAAO,UAAU,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qDAAqD;AACrD,MAAM,QAAQ,GAAqC;IACjD,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,UAAU;CAChB,CAAC;AAEF,2CAA2C;AAC3C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAuB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAChF,yCAAyC;AACzC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAuB,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AAE1F;;wBAEwB;AACxB,SAAS,SAAS,CAAC,KAAmB,EAAE,KAAmB,EAAE,EAAmB;IAC9E,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC;IACzI,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,EAAE,KAAK,OAAO;QACnB,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE;QACnH,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;AACxH,CAAC;AAED,sEAAsE;AACtE,SAAS,WAAW,CAAC,KAAmB,EAAE,EAAU,EAAE,KAA6B;IACjF,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,KAAK,CAAS,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;AAC1I,CAAC;AAED,gFAAgF;AAChF,SAAS,UAAU,CAAC,CAAmB;IACrC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;IACtB,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACvC,mEAAmE;IACnE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IACxD,MAAM,GAAG,GAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAChF,IAAI,CAAC,CAAC,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IAChF,IAAI,CAAC,CAAC,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC9E,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAA+B,EAC/B,SAA6B,EAC7B,QAAwB,EACxB,MAAsB;IAEtB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,MAAwB,CAAC;IACpH,MAAM,IAAI,GAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAE9E,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B;2DACuD;IACvD,MAAM,IAAI,GAAkF,EAAE,CAAC;IAC/F,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7E,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG;gBAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;QACvC,CAAC;aAAM,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACpE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9J,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3F,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1B,mEAAmE;YACnE,mEAAmE;YACnE,qBAAqB;YACrB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACtB,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC;YACrB,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpD,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClD,SAAS;YACX,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAChG,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC;YACzB,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACrH,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;gBACvD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChF,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACvE,CAAC;iBAAM,IAAI,OAAO,EAAE,CAAC;gBACnB,kEAAkE;gBAClE,MAAM,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC9C,OAAO,KAAK,CAAC,KAAK,CAAC;gBACnB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;YACtC,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACjI,SAAS;QACX,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,IAAI,GAAI,CAAC,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,GAAI,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;YACvC,IAAI,IAAI;gBAAE,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,GAAI,CAAC,KAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACZ,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;gCAEgC;AAChC,SAAS,UAAU,CAAC,GAAmB,EAAE,IAAY,EAAE,EAAU,EAAE,UAAmB;IACpF,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjC,MAAM,KAAK,GAAiB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACzH,IAAI,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxF,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1E,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1G,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,OAAO,IAAI,EAAE,CAAC;QAC1E,OAAO;IACT,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACrG,CAAC;AAED;0CAC0C;AAC1C,MAAM,UAAU,aAAa,CAAC,OAAkF;IAC9G,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,CAAC,CAAC;AACJ,CAAC;AAED;;;+BAG+B;AAC/B,MAAM,UAAU,YAAY,CAAC,QAAuB,EAAE,IAAY,EAAE,YAAoB;IACtF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,EAAE,QAAQ,CAAC;IAC5B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IACvE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IACrB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC9D,MAAM,KAAK,GAAG,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,OAAO,GAAqB,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAC7D,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;QACxF,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAC1F,MAAM,IAAI,GAAY,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,EAAE,CAAC;IAC7G,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;AAC/D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLayout.d.ts","sourceRoot":"","sources":["../../src/react/createLayout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,aAAa,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"createLayout.d.ts","sourceRoot":"","sources":["../../src/react/createLayout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,aAAa,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAM9D,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAqCpG"}
|
|
@@ -2,6 +2,7 @@ import { createElement, useEffect, useRef } from 'react';
|
|
|
2
2
|
import { buildDocument } from '../pipeline';
|
|
3
3
|
import { renderToCanvas } from '../canvas-backend';
|
|
4
4
|
import { initMathEngine, isMathReady } from '../math';
|
|
5
|
+
import { contentHasMath } from '../parse/inlineSnippet';
|
|
5
6
|
/**
|
|
6
7
|
* A React component that lays `content` out once, when it mounts, and shows
|
|
7
8
|
* every page as a `<canvas>` inside a `<div>`. Pages are painted on the main
|
|
@@ -21,7 +22,7 @@ export function createLayout(content, config) {
|
|
|
21
22
|
return;
|
|
22
23
|
let cancelled = false;
|
|
23
24
|
void (async () => {
|
|
24
|
-
if (!isMathReady() && content
|
|
25
|
+
if (!isMathReady() && contentHasMath(content)) {
|
|
25
26
|
// A failed start leaves placeholders (and the engine's warning).
|
|
26
27
|
await initMathEngine().catch((err) => console.error(err));
|
|
27
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLayout.js","sourceRoot":"","sources":["../../src/react/createLayout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAA+B,MAAM,OAAO,CAAC;AAEtF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"createLayout.js","sourceRoot":"","sources":["../../src/react/createLayout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAA+B,MAAM,OAAO,CAAC;AAEtF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AASxD;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,OAAuB,EAAE,MAAsB;IAC1E,MAAM,MAAM,GAA2B,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;QAC9D,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;QAElD,SAAS,CAAC,GAAG,EAAE;YACb,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;YACvC,IAAI,CAAC,SAAS;gBAAE,OAAO;YACvB,IAAI,SAAS,GAAG,KAAK,CAAC;YAEtB,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,IAAI,CAAC,WAAW,EAAE,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC9C,iEAAiE;oBACjE,MAAM,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrE,CAAC;gBACD,IAAI,SAAS;oBAAE,OAAO;gBACtB,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC3C,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;gBAClC,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;oBAC3B,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;oBAC5B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC7B,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;oBAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;gBACrC,CAAC;gBACD,SAAS,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,CAAC;YACtC,CAAC,CAAC,EAAE,CAAC;YAEL,OAAO,GAAG,EAAE;gBACV,SAAS,GAAG,IAAI,CAAC;gBACjB,SAAS,CAAC,eAAe,EAAE,CAAC;YAC9B,CAAC,CAAC;QACJ,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,OAAO,aAAa,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC;IAEF,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|