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.
Files changed (203) hide show
  1. package/dist/__tests__/design/imageAltText.test.js +1 -2
  2. package/dist/__tests__/design/imageAltText.test.js.map +1 -1
  3. package/dist/__tests__/design/titleTextMarks.test.d.ts +2 -0
  4. package/dist/__tests__/design/titleTextMarks.test.d.ts.map +1 -0
  5. package/dist/__tests__/design/titleTextMarks.test.js +67 -0
  6. package/dist/__tests__/design/titleTextMarks.test.js.map +1 -0
  7. package/dist/__tests__/exports.test.js +7 -0
  8. package/dist/__tests__/exports.test.js.map +1 -1
  9. package/dist/__tests__/headingLetterSpacing.test.js +1 -1
  10. package/dist/__tests__/headingLetterSpacing.test.js.map +1 -1
  11. package/dist/__tests__/parse/citations.test.js +33 -2
  12. package/dist/__tests__/parse/citations.test.js.map +1 -1
  13. package/dist/__tests__/pipeline/bibliographyNumbering.test.d.ts +2 -0
  14. package/dist/__tests__/pipeline/bibliographyNumbering.test.d.ts.map +1 -0
  15. package/dist/__tests__/pipeline/bibliographyNumbering.test.js +100 -0
  16. package/dist/__tests__/pipeline/bibliographyNumbering.test.js.map +1 -0
  17. package/dist/__tests__/pipeline/citationAffixesCaptions.test.d.ts +2 -0
  18. package/dist/__tests__/pipeline/citationAffixesCaptions.test.d.ts.map +1 -0
  19. package/dist/__tests__/pipeline/citationAffixesCaptions.test.js +156 -0
  20. package/dist/__tests__/pipeline/citationAffixesCaptions.test.js.map +1 -0
  21. package/dist/__tests__/pipeline/closingBoxSingleColumn.test.d.ts +2 -0
  22. package/dist/__tests__/pipeline/closingBoxSingleColumn.test.d.ts.map +1 -0
  23. package/dist/__tests__/pipeline/closingBoxSingleColumn.test.js +58 -0
  24. package/dist/__tests__/pipeline/closingBoxSingleColumn.test.js.map +1 -0
  25. package/dist/__tests__/pipeline/footnoteSymbols.test.d.ts +2 -0
  26. package/dist/__tests__/pipeline/footnoteSymbols.test.d.ts.map +1 -0
  27. package/dist/__tests__/pipeline/footnoteSymbols.test.js +96 -0
  28. package/dist/__tests__/pipeline/footnoteSymbols.test.js.map +1 -0
  29. package/dist/__tests__/pipeline/inlineRefRender.test.js +18 -0
  30. package/dist/__tests__/pipeline/inlineRefRender.test.js.map +1 -1
  31. package/dist/__tests__/pipeline/inlineSpanEmbed.test.d.ts +2 -0
  32. package/dist/__tests__/pipeline/inlineSpanEmbed.test.d.ts.map +1 -0
  33. package/dist/__tests__/pipeline/inlineSpanEmbed.test.js +67 -0
  34. package/dist/__tests__/pipeline/inlineSpanEmbed.test.js.map +1 -0
  35. package/dist/__tests__/pipeline/snippetMath.test.d.ts +2 -0
  36. package/dist/__tests__/pipeline/snippetMath.test.d.ts.map +1 -0
  37. package/dist/__tests__/pipeline/snippetMath.test.js +113 -0
  38. package/dist/__tests__/pipeline/snippetMath.test.js.map +1 -0
  39. package/dist/__tests__/pipeline/spanHeadingMidPage.test.d.ts +2 -0
  40. package/dist/__tests__/pipeline/spanHeadingMidPage.test.d.ts.map +1 -0
  41. package/dist/__tests__/pipeline/spanHeadingMidPage.test.js +94 -0
  42. package/dist/__tests__/pipeline/spanHeadingMidPage.test.js.map +1 -0
  43. package/dist/__tests__/pipeline/statementNumbering.test.d.ts +2 -0
  44. package/dist/__tests__/pipeline/statementNumbering.test.d.ts.map +1 -0
  45. package/dist/__tests__/pipeline/statementNumbering.test.js +217 -0
  46. package/dist/__tests__/pipeline/statementNumbering.test.js.map +1 -0
  47. package/dist/bundle/book.js +1 -1
  48. package/dist/bundle/book.js.map +1 -1
  49. package/dist/canvas-backend/blockRender.d.ts +4 -1
  50. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  51. package/dist/canvas-backend/blockRender.js +3 -1
  52. package/dist/canvas-backend/blockRender.js.map +1 -1
  53. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  54. package/dist/canvas-backend/renderResourceBlock.js +8 -0
  55. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  56. package/dist/citations/bibtex.d.ts +7 -1
  57. package/dist/citations/bibtex.d.ts.map +1 -1
  58. package/dist/citations/bibtex.js +14 -1
  59. package/dist/citations/bibtex.js.map +1 -1
  60. package/dist/citations/context.d.ts +26 -2
  61. package/dist/citations/context.d.ts.map +1 -1
  62. package/dist/citations/context.js +81 -8
  63. package/dist/citations/context.js.map +1 -1
  64. package/dist/citations/data.d.ts.map +1 -1
  65. package/dist/citations/data.js +3 -1
  66. package/dist/citations/data.js.map +1 -1
  67. package/dist/configWarnings.d.ts.map +1 -1
  68. package/dist/configWarnings.js +6 -3
  69. package/dist/configWarnings.js.map +1 -1
  70. package/dist/defaults/calloutStyles.d.ts.map +1 -1
  71. package/dist/defaults/calloutStyles.js +22 -0
  72. package/dist/defaults/calloutStyles.js.map +1 -1
  73. package/dist/defaults/citations.d.ts.map +1 -1
  74. package/dist/defaults/citations.js +4 -0
  75. package/dist/defaults/citations.js.map +1 -1
  76. package/dist/defaults/footnotes.d.ts +5 -1
  77. package/dist/defaults/footnotes.d.ts.map +1 -1
  78. package/dist/defaults/footnotes.js +38 -4
  79. package/dist/defaults/footnotes.js.map +1 -1
  80. package/dist/defaults/headings.d.ts.map +1 -1
  81. package/dist/defaults/headings.js +9 -0
  82. package/dist/defaults/headings.js.map +1 -1
  83. package/dist/defaults/index.d.ts +1 -1
  84. package/dist/defaults/index.d.ts.map +1 -1
  85. package/dist/defaults/index.js +1 -1
  86. package/dist/defaults/index.js.map +1 -1
  87. package/dist/defaults/math.d.ts +3 -1
  88. package/dist/defaults/math.d.ts.map +1 -1
  89. package/dist/defaults/math.js +42 -1
  90. package/dist/defaults/math.js.map +1 -1
  91. package/dist/design/layout.d.ts +2 -2
  92. package/dist/design/layout.d.ts.map +1 -1
  93. package/dist/design/layout.js +6 -3
  94. package/dist/design/layout.js.map +1 -1
  95. package/dist/design/placeholders.d.ts +10 -1
  96. package/dist/design/placeholders.d.ts.map +1 -1
  97. package/dist/design/placeholders.js +7 -2
  98. package/dist/design/placeholders.js.map +1 -1
  99. package/dist/html-backend.d.ts.map +1 -1
  100. package/dist/html-backend.js +10 -1
  101. package/dist/html-backend.js.map +1 -1
  102. package/dist/index.d.ts +5 -3
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +3 -2
  105. package/dist/index.js.map +1 -1
  106. package/dist/parse/blockParser.d.ts.map +1 -1
  107. package/dist/parse/blockParser.js +3 -2
  108. package/dist/parse/blockParser.js.map +1 -1
  109. package/dist/parse/citations.d.ts +16 -1
  110. package/dist/parse/citations.d.ts.map +1 -1
  111. package/dist/parse/citations.js +39 -3
  112. package/dist/parse/citations.js.map +1 -1
  113. package/dist/parse/equationLabels.d.ts +16 -0
  114. package/dist/parse/equationLabels.d.ts.map +1 -0
  115. package/dist/parse/equationLabels.js +44 -0
  116. package/dist/parse/equationLabels.js.map +1 -0
  117. package/dist/parse/index.d.ts +1 -1
  118. package/dist/parse/index.d.ts.map +1 -1
  119. package/dist/parse/index.js +1 -1
  120. package/dist/parse/index.js.map +1 -1
  121. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  122. package/dist/parse/inlineFormatting.js +59 -8
  123. package/dist/parse/inlineFormatting.js.map +1 -1
  124. package/dist/parse/inlineMath.d.ts +6 -1
  125. package/dist/parse/inlineMath.d.ts.map +1 -1
  126. package/dist/parse/inlineMath.js +24 -1
  127. package/dist/parse/inlineMath.js.map +1 -1
  128. package/dist/parse/inlineSnippet.d.ts +26 -5
  129. package/dist/parse/inlineSnippet.d.ts.map +1 -1
  130. package/dist/parse/inlineSnippet.js +36 -7
  131. package/dist/parse/inlineSnippet.js.map +1 -1
  132. package/dist/parse/sourceMapping.d.ts.map +1 -1
  133. package/dist/parse/sourceMapping.js +24 -6
  134. package/dist/parse/sourceMapping.js.map +1 -1
  135. package/dist/parse/types.d.ts +4 -0
  136. package/dist/parse/types.d.ts.map +1 -1
  137. package/dist/pipeline/anchors.d.ts.map +1 -1
  138. package/dist/pipeline/anchors.js +6 -0
  139. package/dist/pipeline/anchors.js.map +1 -1
  140. package/dist/pipeline/build.d.ts.map +1 -1
  141. package/dist/pipeline/build.js +119 -22
  142. package/dist/pipeline/build.js.map +1 -1
  143. package/dist/pipeline/buildMeasurement.d.ts +3 -0
  144. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  145. package/dist/pipeline/buildMeasurement.js +1 -0
  146. package/dist/pipeline/buildMeasurement.js.map +1 -1
  147. package/dist/pipeline/citations.d.ts +20 -1
  148. package/dist/pipeline/citations.d.ts.map +1 -1
  149. package/dist/pipeline/citations.js +179 -42
  150. package/dist/pipeline/citations.js.map +1 -1
  151. package/dist/pipeline/columnBalancing.d.ts.map +1 -1
  152. package/dist/pipeline/columnBalancing.js +6 -1
  153. package/dist/pipeline/columnBalancing.js.map +1 -1
  154. package/dist/pipeline/continuation.d.ts.map +1 -1
  155. package/dist/pipeline/continuation.js +8 -1
  156. package/dist/pipeline/continuation.js.map +1 -1
  157. package/dist/pipeline/crossRefs.d.ts +3 -0
  158. package/dist/pipeline/crossRefs.d.ts.map +1 -1
  159. package/dist/pipeline/crossRefs.js +21 -1
  160. package/dist/pipeline/crossRefs.js.map +1 -1
  161. package/dist/pipeline/footnotes.d.ts +23 -5
  162. package/dist/pipeline/footnotes.d.ts.map +1 -1
  163. package/dist/pipeline/footnotes.js +23 -2
  164. package/dist/pipeline/footnotes.js.map +1 -1
  165. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  166. package/dist/pipeline/headerFooter.js +26 -12
  167. package/dist/pipeline/headerFooter.js.map +1 -1
  168. package/dist/pipeline/measureContentBlock.d.ts +3 -0
  169. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  170. package/dist/pipeline/measureContentBlock.js +8 -1
  171. package/dist/pipeline/measureContentBlock.js.map +1 -1
  172. package/dist/pipeline/outline.d.ts +6 -2
  173. package/dist/pipeline/outline.d.ts.map +1 -1
  174. package/dist/pipeline/outline.js +20 -3
  175. package/dist/pipeline/outline.js.map +1 -1
  176. package/dist/pipeline/placement.d.ts +12 -0
  177. package/dist/pipeline/placement.d.ts.map +1 -1
  178. package/dist/pipeline/placement.js +51 -0
  179. package/dist/pipeline/placement.js.map +1 -1
  180. package/dist/pipeline/resourceLayout.d.ts +11 -1
  181. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  182. package/dist/pipeline/resourceLayout.js +28 -8
  183. package/dist/pipeline/resourceLayout.js.map +1 -1
  184. package/dist/pipeline/resourceNumbering.d.ts +7 -1
  185. package/dist/pipeline/resourceNumbering.d.ts.map +1 -1
  186. package/dist/pipeline/resourceNumbering.js +12 -0
  187. package/dist/pipeline/resourceNumbering.js.map +1 -1
  188. package/dist/pipeline/spanEmbeds.d.ts +32 -0
  189. package/dist/pipeline/spanEmbeds.d.ts.map +1 -0
  190. package/dist/pipeline/spanEmbeds.js +94 -0
  191. package/dist/pipeline/spanEmbeds.js.map +1 -0
  192. package/dist/pipeline/statementNumbering.d.ts +93 -0
  193. package/dist/pipeline/statementNumbering.d.ts.map +1 -0
  194. package/dist/pipeline/statementNumbering.js +360 -0
  195. package/dist/pipeline/statementNumbering.js.map +1 -0
  196. package/dist/react/createLayout.d.ts.map +1 -1
  197. package/dist/react/createLayout.js +2 -1
  198. package/dist/react/createLayout.js.map +1 -1
  199. package/dist/types.d.ts +155 -5
  200. package/dist/types.d.ts.map +1 -1
  201. package/dist/worker/layout.worker.js +6 -3
  202. package/dist/worker/layout.worker.js.map +1 -1
  203. 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":"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"}
@@ -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;AAK9D,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"}
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.markdown.includes('$')) {
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;AAStD;;;;;;;;;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,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrD,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"}
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"}