postext 1.22.2 → 1.23.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__/bundle.test.js +1 -1
- package/dist/__tests__/codeBlocks.test.d.ts +2 -0
- package/dist/__tests__/codeBlocks.test.d.ts.map +1 -0
- package/dist/__tests__/codeBlocks.test.js +550 -0
- package/dist/__tests__/codeBlocks.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +19 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/hardBreaks.test.d.ts +2 -0
- package/dist/__tests__/hardBreaks.test.d.ts.map +1 -0
- package/dist/__tests__/hardBreaks.test.js +226 -0
- package/dist/__tests__/hardBreaks.test.js.map +1 -0
- package/dist/__tests__/headingInlineMarks.test.js +1 -1
- package/dist/__tests__/headingLetterSpacing.test.js +1 -1
- package/dist/__tests__/headingLetterSpacing.test.js.map +1 -1
- package/dist/__tests__/lineNumbers.test.d.ts +2 -0
- package/dist/__tests__/lineNumbers.test.d.ts.map +1 -0
- package/dist/__tests__/lineNumbers.test.js +304 -0
- package/dist/__tests__/lineNumbers.test.js.map +1 -0
- package/dist/__tests__/mathSizeMigration.test.js +2 -2
- package/dist/__tests__/paragraphDropCap.test.d.ts +2 -0
- package/dist/__tests__/paragraphDropCap.test.d.ts.map +1 -0
- package/dist/__tests__/paragraphDropCap.test.js +442 -0
- package/dist/__tests__/paragraphDropCap.test.js.map +1 -0
- package/dist/__tests__/paragraphStyleIndent.test.js +26 -2
- package/dist/__tests__/paragraphStyleIndent.test.js.map +1 -1
- package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js +1 -1
- package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js +1 -1
- package/dist/__tests__/pipeline/colonListRoom.test.js +1 -1
- package/dist/__tests__/pipeline/compoundBreaks.test.js +1 -1
- package/dist/__tests__/pipeline/dashBreaks.test.js +1 -1
- package/dist/__tests__/pipeline/headingSplitOrphans.test.js +1 -1
- package/dist/__tests__/pipeline/inlineFigureSpace.test.js +1 -1
- package/dist/__tests__/pipeline/paragraphContainerTail.test.js +1 -1
- package/dist/__tests__/pipeline/paragraphStyleFaces.test.js +7 -1
- package/dist/__tests__/pipeline/paragraphStyleFaces.test.js.map +1 -1
- package/dist/__tests__/pipeline/raggedOptimal.test.js +1 -1
- package/dist/__tests__/tabStops.test.d.ts +2 -0
- package/dist/__tests__/tabStops.test.d.ts.map +1 -0
- package/dist/__tests__/tabStops.test.js +394 -0
- package/dist/__tests__/tabStops.test.js.map +1 -0
- package/dist/__tests__/verseLines.test.d.ts +2 -0
- package/dist/__tests__/verseLines.test.d.ts.map +1 -0
- package/dist/__tests__/verseLines.test.js +375 -0
- package/dist/__tests__/verseLines.test.js.map +1 -0
- package/dist/bundle/configVersion.d.ts +77 -7
- package/dist/bundle/configVersion.d.ts.map +1 -1
- package/dist/bundle/configVersion.js +239 -5
- package/dist/bundle/configVersion.js.map +1 -1
- package/dist/bundle/index.d.ts +1 -1
- package/dist/bundle/index.d.ts.map +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/index.js.map +1 -1
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +39 -5
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +3 -0
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/cjkMarks.js +1 -1
- package/dist/cjkMarks.js.map +1 -1
- package/dist/code/highlight.d.ts +34 -0
- package/dist/code/highlight.d.ts.map +1 -0
- package/dist/code/highlight.js +406 -0
- package/dist/code/highlight.js.map +1 -0
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +192 -3
- package/dist/configWarnings.js.map +1 -1
- package/dist/defaults/bodyText.d.ts.map +1 -1
- package/dist/defaults/bodyText.js +25 -0
- package/dist/defaults/bodyText.js.map +1 -1
- package/dist/defaults/calloutStyles.d.ts.map +1 -1
- package/dist/defaults/calloutStyles.js +7 -0
- package/dist/defaults/calloutStyles.js.map +1 -1
- package/dist/defaults/codeStyle.d.ts +29 -0
- package/dist/defaults/codeStyle.d.ts.map +1 -0
- package/dist/defaults/codeStyle.js +284 -0
- package/dist/defaults/codeStyle.js.map +1 -0
- package/dist/defaults/dropCap.d.ts +49 -0
- package/dist/defaults/dropCap.d.ts.map +1 -0
- package/dist/defaults/dropCap.js +66 -0
- package/dist/defaults/dropCap.js.map +1 -0
- package/dist/defaults/headings.d.ts +1 -1
- package/dist/defaults/headings.d.ts.map +1 -1
- package/dist/defaults/headings.js +11 -0
- package/dist/defaults/headings.js.map +1 -1
- package/dist/defaults/index.d.ts +3 -0
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +19 -0
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/lineNumbers.d.ts +19 -0
- package/dist/defaults/lineNumbers.d.ts.map +1 -0
- package/dist/defaults/lineNumbers.js +101 -0
- package/dist/defaults/lineNumbers.js.map +1 -0
- package/dist/defaults/paragraphStyles.d.ts.map +1 -1
- package/dist/defaults/paragraphStyles.js +20 -0
- package/dist/defaults/paragraphStyles.js.map +1 -1
- package/dist/defaults/tabStops.d.ts +29 -0
- package/dist/defaults/tabStops.d.ts.map +1 -0
- package/dist/defaults/tabStops.js +94 -0
- package/dist/defaults/tabStops.js.map +1 -0
- package/dist/defaults/verse.d.ts +10 -0
- package/dist/defaults/verse.d.ts.map +1 -0
- package/dist/defaults/verse.js +52 -0
- package/dist/defaults/verse.js.map +1 -0
- package/dist/fonts/usage.d.ts +7 -0
- package/dist/fonts/usage.d.ts.map +1 -1
- package/dist/fonts/usage.js +71 -0
- package/dist/fonts/usage.js.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +85 -11
- package/dist/html-backend.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/measure/bidiLines.js +2 -2
- package/dist/measure/bidiLines.js.map +1 -1
- package/dist/measure/cache.js +2 -2
- package/dist/measure/cache.js.map +1 -1
- package/dist/measure/cjkCompose.d.ts.map +1 -1
- package/dist/measure/cjkCompose.js +5 -5
- package/dist/measure/cjkCompose.js.map +1 -1
- package/dist/measure/hardBreaks.d.ts +46 -0
- package/dist/measure/hardBreaks.d.ts.map +1 -0
- package/dist/measure/hardBreaks.js +216 -0
- package/dist/measure/hardBreaks.js.map +1 -0
- package/dist/measure/index.d.ts +1 -0
- package/dist/measure/index.d.ts.map +1 -1
- package/dist/measure/index.js +1 -0
- package/dist/measure/index.js.map +1 -1
- package/dist/measure/leader.d.ts +20 -0
- package/dist/measure/leader.d.ts.map +1 -0
- package/dist/measure/leader.js +46 -0
- package/dist/measure/leader.js.map +1 -0
- package/dist/measure/links.js +1 -1
- package/dist/measure/links.js.map +1 -1
- package/dist/measure/plain.d.ts.map +1 -1
- package/dist/measure/plain.js +18 -25
- package/dist/measure/plain.js.map +1 -1
- package/dist/measure/rich.d.ts +19 -0
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +211 -38
- package/dist/measure/rich.js.map +1 -1
- package/dist/measure/tabs.d.ts +103 -0
- package/dist/measure/tabs.d.ts.map +1 -0
- package/dist/measure/tabs.js +123 -0
- package/dist/measure/tabs.js.map +1 -0
- package/dist/measure/types.d.ts +26 -2
- package/dist/measure/types.d.ts.map +1 -1
- package/dist/measure/types.js +23 -3
- package/dist/measure/types.js.map +1 -1
- package/dist/parse/blockParser.d.ts +13 -6
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +457 -87
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/codeFence.d.ts +18 -0
- package/dist/parse/codeFence.d.ts.map +1 -0
- package/dist/parse/codeFence.js +52 -0
- package/dist/parse/codeFence.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.map +1 -1
- package/dist/parse/indexMarks.d.ts +3 -1
- package/dist/parse/indexMarks.d.ts.map +1 -1
- package/dist/parse/indexMarks.js +22 -2
- package/dist/parse/indexMarks.js.map +1 -1
- package/dist/parse/inlineFormatting.d.ts +50 -0
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +94 -0
- package/dist/parse/inlineFormatting.js.map +1 -1
- package/dist/parse/sourceMapping.d.ts.map +1 -1
- package/dist/parse/sourceMapping.js +65 -1
- package/dist/parse/sourceMapping.js.map +1 -1
- package/dist/parse/types.d.ts +144 -9
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +143 -18
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
- package/dist/pipeline/buildBlockKind.js +60 -1
- package/dist/pipeline/buildBlockKind.js.map +1 -1
- package/dist/pipeline/buildHelpers.d.ts +3 -0
- package/dist/pipeline/buildHelpers.d.ts.map +1 -1
- package/dist/pipeline/buildHelpers.js +7 -2
- package/dist/pipeline/buildHelpers.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +33 -2
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/chips.d.ts.map +1 -1
- package/dist/pipeline/chips.js +4 -0
- package/dist/pipeline/chips.js.map +1 -1
- package/dist/pipeline/codeBlocks.d.ts +38 -0
- package/dist/pipeline/codeBlocks.d.ts.map +1 -0
- package/dist/pipeline/codeBlocks.js +146 -0
- package/dist/pipeline/codeBlocks.js.map +1 -0
- package/dist/pipeline/codeInline.d.ts +22 -0
- package/dist/pipeline/codeInline.d.ts.map +1 -0
- package/dist/pipeline/codeInline.js +93 -0
- package/dist/pipeline/codeInline.js.map +1 -0
- package/dist/pipeline/codeLines.d.ts +91 -0
- package/dist/pipeline/codeLines.d.ts.map +1 -0
- package/dist/pipeline/codeLines.js +399 -0
- package/dist/pipeline/codeLines.js.map +1 -0
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +8 -1
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts +9 -0
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +60 -2
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/continuation.d.ts.map +1 -1
- package/dist/pipeline/continuation.js +9 -2
- package/dist/pipeline/continuation.js.map +1 -1
- package/dist/pipeline/dropCap.d.ts +128 -0
- package/dist/pipeline/dropCap.d.ts.map +1 -0
- package/dist/pipeline/dropCap.js +412 -0
- package/dist/pipeline/dropCap.js.map +1 -0
- package/dist/pipeline/hardBreaks.d.ts +19 -0
- package/dist/pipeline/hardBreaks.d.ts.map +1 -0
- package/dist/pipeline/hardBreaks.js +36 -0
- package/dist/pipeline/hardBreaks.js.map +1 -0
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +4 -1
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/lineNumbers.d.ts +37 -0
- package/dist/pipeline/lineNumbers.d.ts.map +1 -0
- package/dist/pipeline/lineNumbers.js +441 -0
- package/dist/pipeline/lineNumbers.js.map +1 -0
- package/dist/pipeline/measureContentBlock.d.ts +31 -5
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +274 -68
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/partPalette.d.ts +1 -1
- package/dist/pipeline/partPalette.d.ts.map +1 -1
- package/dist/pipeline/partPalette.js +24 -2
- package/dist/pipeline/partPalette.js.map +1 -1
- package/dist/pipeline/styles.d.ts +18 -2
- package/dist/pipeline/styles.d.ts.map +1 -1
- package/dist/pipeline/styles.js +15 -3
- package/dist/pipeline/styles.js.map +1 -1
- package/dist/pipeline/tabs.d.ts +35 -0
- package/dist/pipeline/tabs.d.ts.map +1 -0
- package/dist/pipeline/tabs.js +99 -0
- package/dist/pipeline/tabs.js.map +1 -0
- package/dist/pipeline/toc.d.ts.map +1 -1
- package/dist/pipeline/toc.js +3 -38
- package/dist/pipeline/toc.js.map +1 -1
- package/dist/pipeline/verseLines.d.ts +78 -0
- package/dist/pipeline/verseLines.d.ts.map +1 -0
- package/dist/pipeline/verseLines.js +245 -0
- package/dist/pipeline/verseLines.js.map +1 -0
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +1 -0
- package/dist/preflight.js.map +1 -1
- package/dist/types.d.ts +560 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +240 -7
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js +6 -0
- package/dist/vdt.js.map +1 -1
- package/dist/word/docxRead.d.ts.map +1 -1
- package/dist/word/docxRead.js +15 -0
- package/dist/word/docxRead.js.map +1 -1
- package/dist/word/inline.d.ts +6 -1
- package/dist/word/inline.d.ts.map +1 -1
- package/dist/word/inline.js +35 -1
- package/dist/word/inline.js.map +1 -1
- package/dist/word/model.d.ts +14 -0
- package/dist/word/model.d.ts.map +1 -1
- package/dist/word/model.js.map +1 -1
- package/dist/word/template.d.ts +12 -3
- package/dist/word/template.d.ts.map +1 -1
- package/dist/word/template.js +13 -3
- package/dist/word/template.js.map +1 -1
- package/dist/word/toDocx.d.ts.map +1 -1
- package/dist/word/toDocx.js +52 -8
- package/dist/word/toDocx.js.map +1 -1
- package/dist/word/toMarkdown.d.ts +5 -1
- package/dist/word/toMarkdown.d.ts.map +1 -1
- package/dist/word/toMarkdown.js +117 -6
- package/dist/word/toMarkdown.js.map +1 -1
- package/dist/word/word.test.js +124 -2
- package/dist/word/word.test.js.map +1 -1
- package/dist/worker/fonts.d.ts +2 -1
- package/dist/worker/fonts.d.ts.map +1 -1
- package/dist/worker/fonts.js +6 -2
- package/dist/worker/fonts.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
// Line numbers in the margin (#621). A pass over the finished layout:
|
|
2
|
+
// once a pass has placed every line and stamped its page labels, the
|
|
3
|
+
// lines are walked in reading order (page by page, column by column, top
|
|
4
|
+
// to bottom), counted, and every Nth one gets its number in a design slot
|
|
5
|
+
// of its page (`VDTPage.lineNumbers`). The numbers are painted where the
|
|
6
|
+
// layout leaves room for them and never move a line, so balancing and
|
|
7
|
+
// re-breaks cannot invalidate them: each pass counts its own layout.
|
|
8
|
+
//
|
|
9
|
+
// What is counted (`lineNumbers.count`):
|
|
10
|
+
// - `'verse'`: the lines of `:::verse` poems, once per line of verse — a
|
|
11
|
+
// turnover (`VDTLine.verseLine.turnover`, the ʿajuz of a staggered
|
|
12
|
+
// bayt) takes no number;
|
|
13
|
+
// - `'all'`: every line of body paragraphs, list items, quotations and
|
|
14
|
+
// verse.
|
|
15
|
+
// Never: headings, captions, tables and pictures, display maths, design
|
|
16
|
+
// text, notes, the contents and the index, and the text of a callout —
|
|
17
|
+
// unless the paragraph style the text is set in says `lineNumbers: true`
|
|
18
|
+
// (a style with `lineNumbers: false` is never counted).
|
|
19
|
+
//
|
|
20
|
+
// The count starts again at `lineNumbers.restart` (a chapter, a section,
|
|
21
|
+
// a page, a poem), at a `:::numbering{lines=N}` directive, and at a poem
|
|
22
|
+
// whose fence sets `lineStart=N`.
|
|
23
|
+
import { createBoundingBox, flowRectToPage, pageIsVertical, } from '../vdt';
|
|
24
|
+
import { buildFontString } from '../measure';
|
|
25
|
+
import { measureTextWidth } from '../measure/canvas';
|
|
26
|
+
import { dimensionToPx } from '../units';
|
|
27
|
+
import { formatNumeral, parseNumberFormat } from '../numbering';
|
|
28
|
+
import { isRtlScriptChar } from '../bidi';
|
|
29
|
+
import { resolvedLocale } from './config';
|
|
30
|
+
/** A whole number ≥ `min` written in a directive attribute. */
|
|
31
|
+
function wholeAttr(value, min) {
|
|
32
|
+
if (value === undefined)
|
|
33
|
+
return undefined;
|
|
34
|
+
const n = Number(value.trim());
|
|
35
|
+
return Number.isInteger(n) && n >= min ? n : undefined;
|
|
36
|
+
}
|
|
37
|
+
/** The numbering a poem's fence asks for. */
|
|
38
|
+
export function poemNumbering(attrs) {
|
|
39
|
+
const numbered = attrs?.numbered?.trim().toLowerCase();
|
|
40
|
+
const interval = wholeAttr(attrs?.interval, 1);
|
|
41
|
+
const lineStart = wholeAttr(attrs?.lineStart, 0);
|
|
42
|
+
return {
|
|
43
|
+
numbered: numbered !== 'false' && numbered !== 'no' && numbered !== '0',
|
|
44
|
+
...(interval !== undefined ? { interval } : {}),
|
|
45
|
+
...(lineStart !== undefined ? { lineStart } : {}),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** The poem a content block sets, as numbered in the document (bayt
|
|
49
|
+
* poems, one block each, are numbered after their index). */
|
|
50
|
+
function poemKey(block, index) {
|
|
51
|
+
return block.verse?.stanza ? block.verse.stanza.poem : -1 - index;
|
|
52
|
+
}
|
|
53
|
+
/** Whether a content block opens a poem. */
|
|
54
|
+
function opensPoem(block) {
|
|
55
|
+
return block.verse !== undefined && (block.verse.stanza === undefined || block.verse.stanza.index === 0);
|
|
56
|
+
}
|
|
57
|
+
/** The events of `blocks`, by content index. */
|
|
58
|
+
function lineCountEvents(blocks) {
|
|
59
|
+
const events = new Map();
|
|
60
|
+
const push = (i, e) => {
|
|
61
|
+
const list = events.get(i);
|
|
62
|
+
if (list)
|
|
63
|
+
list.push(e);
|
|
64
|
+
else
|
|
65
|
+
events.set(i, [e]);
|
|
66
|
+
};
|
|
67
|
+
blocks.forEach((b, i) => {
|
|
68
|
+
if (b.type === 'heading' && b.level)
|
|
69
|
+
push(i, { kind: 'heading', level: b.level });
|
|
70
|
+
else if (b.type === 'directive' && b.directiveName === 'numbering') {
|
|
71
|
+
const next = wholeAttr(b.directiveAttrs?.lines, 0);
|
|
72
|
+
if (next !== undefined)
|
|
73
|
+
push(i, { kind: 'numbering', next });
|
|
74
|
+
}
|
|
75
|
+
else if (opensPoem(b)) {
|
|
76
|
+
const { lineStart } = poemNumbering(b.verse.attrs);
|
|
77
|
+
push(i, { kind: 'poem', poem: poemKey(b, i), ...(lineStart !== undefined ? { lineStart } : {}) });
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return events;
|
|
81
|
+
}
|
|
82
|
+
/** The running count: the last number given, whether the next counted
|
|
83
|
+
* line is the first after a restart, and whether the count restarted. */
|
|
84
|
+
class LineCounter {
|
|
85
|
+
cfg;
|
|
86
|
+
value;
|
|
87
|
+
fresh;
|
|
88
|
+
restarted = false;
|
|
89
|
+
constructor(cfg, inherited) {
|
|
90
|
+
this.cfg = cfg;
|
|
91
|
+
const continues = inherited !== undefined && cfg.restart !== 'page' && cfg.restart !== 'poem';
|
|
92
|
+
this.value = continues ? inherited : cfg.startAt - 1;
|
|
93
|
+
this.fresh = !continues;
|
|
94
|
+
if (!continues && inherited !== undefined)
|
|
95
|
+
this.restarted = true;
|
|
96
|
+
}
|
|
97
|
+
/** Start again so that the next line is numbered `next`. */
|
|
98
|
+
restart(next = this.cfg.startAt) {
|
|
99
|
+
this.value = next - 1;
|
|
100
|
+
this.fresh = true;
|
|
101
|
+
this.restarted = true;
|
|
102
|
+
}
|
|
103
|
+
apply(e) {
|
|
104
|
+
if (e.kind === 'numbering')
|
|
105
|
+
this.restart(e.next);
|
|
106
|
+
else if (e.kind === 'heading') {
|
|
107
|
+
if ((this.cfg.restart === 'chapter' && e.level === 1) || (this.cfg.restart === 'section' && e.level <= 2))
|
|
108
|
+
this.restart();
|
|
109
|
+
}
|
|
110
|
+
else if (e.lineStart !== undefined)
|
|
111
|
+
this.restart(e.lineStart);
|
|
112
|
+
else if (this.cfg.restart === 'poem')
|
|
113
|
+
this.restart();
|
|
114
|
+
}
|
|
115
|
+
/** Count one line: its number, and whether it is printed. */
|
|
116
|
+
next(interval) {
|
|
117
|
+
this.value += 1;
|
|
118
|
+
const first = this.fresh;
|
|
119
|
+
this.fresh = false;
|
|
120
|
+
return { n: this.value, printed: this.value % interval === 0 || (first && this.cfg.numberFirst) };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/** Whether the text of a paragraph style is counted: its own
|
|
124
|
+
* `lineNumbers`, else `fallback`. */
|
|
125
|
+
function styleCounts(resolved, styleId, fallback) {
|
|
126
|
+
if (!styleId)
|
|
127
|
+
return fallback;
|
|
128
|
+
const own = resolved.paragraphStyles.find((s) => s.id === styleId)?.lineNumbers;
|
|
129
|
+
return own ?? fallback;
|
|
130
|
+
}
|
|
131
|
+
/** Blocks whose lines are never counted. */
|
|
132
|
+
function neverCounted(block) {
|
|
133
|
+
return block.type === 'heading' || block.type === 'resource' || block.type === 'mathDisplay' || block.type === 'callout'
|
|
134
|
+
|| block.hidden === true || block.designOverlay !== undefined
|
|
135
|
+
|| block.footnoteNote !== undefined || block.tocEntry !== undefined || block.tocPart !== undefined
|
|
136
|
+
|| block.indexLevel !== undefined || block.bibEntry !== undefined || block.comic !== undefined;
|
|
137
|
+
}
|
|
138
|
+
/** How the lines of `block` are counted: not at all, as verse (a line of
|
|
139
|
+
* verse once, its turnovers not), or line by line (prose). */
|
|
140
|
+
function blockCounting(block, raw, resolved, cfg) {
|
|
141
|
+
if (neverCounted(block))
|
|
142
|
+
return 'none';
|
|
143
|
+
const styleId = block.paragraphStyleId;
|
|
144
|
+
// A box's text is counted only when its style opts in.
|
|
145
|
+
if (block.containerId !== undefined) {
|
|
146
|
+
if (!styleCounts(resolved, styleId, false))
|
|
147
|
+
return 'none';
|
|
148
|
+
return raw?.verse ? 'verse' : 'prose';
|
|
149
|
+
}
|
|
150
|
+
if (raw?.verse) {
|
|
151
|
+
if (!poemNumbering(raw.verse.attrs).numbered)
|
|
152
|
+
return 'none';
|
|
153
|
+
return styleCounts(resolved, styleId, true) ? 'verse' : 'none';
|
|
154
|
+
}
|
|
155
|
+
return styleCounts(resolved, styleId, cfg.count === 'all') ? 'prose' : 'none';
|
|
156
|
+
}
|
|
157
|
+
/** Whether a line of a poem takes a number: a line of verse, not a
|
|
158
|
+
* turnover or the second line of a staggered bayt. */
|
|
159
|
+
function isLineOfVerse(line) {
|
|
160
|
+
if (line.verseLine)
|
|
161
|
+
return !line.verseLine.turnover;
|
|
162
|
+
if (line.verse)
|
|
163
|
+
return line.verse.part !== 'ajuz';
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
/** The overlaps of side-column numbers with floats, per document. */
|
|
167
|
+
const overlapWarnings = new WeakMap();
|
|
168
|
+
/** The `lineNumberOverlap` warnings of the last pass laid out as `doc`. */
|
|
169
|
+
export function lineNumberWarnings(doc) {
|
|
170
|
+
return overlapWarnings.get(doc) ?? [];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Count the lines of `doc` and set the numbers of the printed ones in
|
|
174
|
+
* `page.lineNumbers` (with `page.lineNumberMarks`), and the last number in
|
|
175
|
+
* `doc.lastLineNumber`. `blocks` are the parsed content blocks the layout
|
|
176
|
+
* was built from (`VDTBlock.contentIndex` points into them);
|
|
177
|
+
* `continuation.lineNumber` is the number the count goes on from. A
|
|
178
|
+
* vertical document gets no numbers.
|
|
179
|
+
*/
|
|
180
|
+
export function buildLineNumbers(doc, blocks, continuation) {
|
|
181
|
+
const resolved = doc.config;
|
|
182
|
+
const cfg = resolved.lineNumbers;
|
|
183
|
+
if (!cfg?.enabled || resolved.layout.writingMode === 'vertical-rl')
|
|
184
|
+
return;
|
|
185
|
+
const dpi = resolved.page.dpi;
|
|
186
|
+
const bodyPx = dimensionToPx(resolved.bodyText.fontSize, dpi);
|
|
187
|
+
const sizePx = dimensionToPx(cfg.fontSize, dpi, bodyPx);
|
|
188
|
+
const gapPx = dimensionToPx(cfg.gap, dpi, sizePx);
|
|
189
|
+
const font = buildFontString(cfg.fontFamily, sizePx, cfg.fontWeight === 400 ? 'normal' : String(cfg.fontWeight), cfg.italic ? 'italic' : 'normal');
|
|
190
|
+
const style = parseNumberFormat(cfg.format, resolvedLocale(resolved)) ?? 'decimal';
|
|
191
|
+
const events = lineCountEvents(blocks);
|
|
192
|
+
const eventIndices = [...events.keys()].sort((a, b) => a - b);
|
|
193
|
+
let nextEvent = 0;
|
|
194
|
+
const counter = new LineCounter(cfg, continuation?.lineNumber);
|
|
195
|
+
const poems = new Map();
|
|
196
|
+
const warnings = [];
|
|
197
|
+
const offset = doc.pageIndexOffset ?? 0;
|
|
198
|
+
for (const page of doc.pages) {
|
|
199
|
+
if (pageIsVertical(page))
|
|
200
|
+
continue;
|
|
201
|
+
if (cfg.restart === 'page')
|
|
202
|
+
counter.restart();
|
|
203
|
+
const pending = [];
|
|
204
|
+
for (const column of page.columns) {
|
|
205
|
+
if (column.kind === 'side')
|
|
206
|
+
continue;
|
|
207
|
+
for (const block of column.blocks) {
|
|
208
|
+
const c = block.contentIndex;
|
|
209
|
+
if (c !== undefined) {
|
|
210
|
+
while (nextEvent < eventIndices.length && eventIndices[nextEvent] <= c) {
|
|
211
|
+
for (const e of events.get(eventIndices[nextEvent]))
|
|
212
|
+
counter.apply(e);
|
|
213
|
+
nextEvent++;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const raw = c !== undefined ? blocks[c] : undefined;
|
|
217
|
+
const counting = blockCounting(block, raw, resolved, cfg);
|
|
218
|
+
if (counting === 'none')
|
|
219
|
+
continue;
|
|
220
|
+
let interval = cfg.interval;
|
|
221
|
+
if (raw?.verse) {
|
|
222
|
+
const key = poemKey(raw, c);
|
|
223
|
+
let poem = poems.get(key);
|
|
224
|
+
if (!poem) {
|
|
225
|
+
poem = poemNumbering(raw.verse.attrs);
|
|
226
|
+
poems.set(key, poem);
|
|
227
|
+
}
|
|
228
|
+
interval = poem.interval ?? interval;
|
|
229
|
+
}
|
|
230
|
+
block.lines.forEach((line, lineIndex) => {
|
|
231
|
+
if (counting === 'verse' ? !isLineOfVerse(line) : line.text.length === 0 && !line.segments?.length)
|
|
232
|
+
return;
|
|
233
|
+
const { n, printed } = counter.next(interval);
|
|
234
|
+
if (!printed)
|
|
235
|
+
return;
|
|
236
|
+
pending.push({
|
|
237
|
+
mark: { number: n, label: formatNumeral(n, style, resolved.numerals), columnIndex: column.index, blockId: block.id, lineIndex },
|
|
238
|
+
baseline: line.baseline,
|
|
239
|
+
column,
|
|
240
|
+
line,
|
|
241
|
+
block,
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (pending.length > 0)
|
|
247
|
+
placeNumbers(page, pending, { cfg, resolved, font, sizePx, gapPx, offset, warnings });
|
|
248
|
+
}
|
|
249
|
+
doc.lastLineNumber = counter.value;
|
|
250
|
+
if (counter.restarted)
|
|
251
|
+
doc.lineNumberRestarted = true;
|
|
252
|
+
if (warnings.length > 0)
|
|
253
|
+
overlapWarnings.set(doc, warnings);
|
|
254
|
+
}
|
|
255
|
+
/** The physical side of a column the numbers of `position` stand on
|
|
256
|
+
* (`'side'` is placed apart). */
|
|
257
|
+
function sideFor(position, page, ctx) {
|
|
258
|
+
const recto = (page.index + ctx.offset) % 2 === 0;
|
|
259
|
+
const outerRight = recto !== (ctx.resolved.page.binding === 'right');
|
|
260
|
+
const rtl = ctx.resolved.direction === 'rtl';
|
|
261
|
+
switch (position) {
|
|
262
|
+
case 'left': return 'left';
|
|
263
|
+
case 'right': return 'right';
|
|
264
|
+
case 'inner': return outerRight ? 'left' : 'right';
|
|
265
|
+
case 'start': return rtl ? 'right' : 'left';
|
|
266
|
+
case 'end': return rtl ? 'left' : 'right';
|
|
267
|
+
default: return outerRight ? 'right' : 'left';
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/** Set the numbers of one page in its slot. */
|
|
271
|
+
function placeNumbers(page, pending, ctx) {
|
|
272
|
+
const { cfg, font, sizePx, gapPx } = ctx;
|
|
273
|
+
const widths = pending.map((p) => measureTextWidth(p.mark.label, font));
|
|
274
|
+
const widest = Math.max(...widths);
|
|
275
|
+
const ascent = sizePx * 0.8;
|
|
276
|
+
const physical = new Map();
|
|
277
|
+
const rectOf = (col) => {
|
|
278
|
+
let r = physical.get(col);
|
|
279
|
+
if (!r) {
|
|
280
|
+
r = flowRectToPage(page, col.bbox);
|
|
281
|
+
physical.set(col, r);
|
|
282
|
+
}
|
|
283
|
+
return r;
|
|
284
|
+
};
|
|
285
|
+
const sideColumns = page.columns.filter((c) => c.kind === 'side');
|
|
286
|
+
// Text columns side by side in one band.
|
|
287
|
+
const bandColumns = (col) => page.columns
|
|
288
|
+
.filter((c) => (c.kind ?? 'text') === 'text' && (c.band ?? 0) === (col.band ?? 0))
|
|
289
|
+
.sort((a, b) => rectOf(a).x - rectOf(b).x);
|
|
290
|
+
const sideRule = (col) => {
|
|
291
|
+
const base = sideFor(cfg.position === 'side' ? 'outer' : cfg.position, page, ctx);
|
|
292
|
+
if ((col.kind ?? 'text') !== 'text')
|
|
293
|
+
return base;
|
|
294
|
+
const band = bandColumns(col);
|
|
295
|
+
if (band.length < 2)
|
|
296
|
+
return base;
|
|
297
|
+
const at = band.indexOf(col);
|
|
298
|
+
if (cfg.multiColumn === 'gutter')
|
|
299
|
+
return at === 0 ? 'right' : 'left';
|
|
300
|
+
if (cfg.multiColumn === 'outer-edges') {
|
|
301
|
+
if (at === 0)
|
|
302
|
+
return 'left';
|
|
303
|
+
if (at === band.length - 1)
|
|
304
|
+
return 'right';
|
|
305
|
+
}
|
|
306
|
+
return base;
|
|
307
|
+
};
|
|
308
|
+
// The side column beside a text column, when numbers go there.
|
|
309
|
+
const sideColumnOf = (col, baseline) => {
|
|
310
|
+
if (cfg.position !== 'side' || sideColumns.length === 0)
|
|
311
|
+
return undefined;
|
|
312
|
+
return sideColumns.find((s) => {
|
|
313
|
+
const r = rectOf(s);
|
|
314
|
+
return baseline >= r.y && baseline <= r.y + r.height;
|
|
315
|
+
}) ?? sideColumns.find((s) => (s.band ?? 0) === (col.band ?? 0)) ?? sideColumns[0];
|
|
316
|
+
};
|
|
317
|
+
const floats = cfg.position === 'side'
|
|
318
|
+
? [...(page.floats ?? []), ...sideColumns.flatMap((s) => s.blocks)].map((b) => ({ block: b, rect: flowRectToPage(page, b.bbox) }))
|
|
319
|
+
: [];
|
|
320
|
+
const textBlocks = [];
|
|
321
|
+
const marks = [];
|
|
322
|
+
pending.forEach((p, i) => {
|
|
323
|
+
const w = widths[i];
|
|
324
|
+
const col = rectOf(p.column);
|
|
325
|
+
const side = sideColumnOf(p.column, p.baseline);
|
|
326
|
+
let x;
|
|
327
|
+
if (side) {
|
|
328
|
+
const s = rectOf(side);
|
|
329
|
+
if (s.x >= col.x) {
|
|
330
|
+
// The side column on the right: flush with its left edge.
|
|
331
|
+
x = cfg.align === 'right' ? s.x + widest - w : s.x;
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
const edge = s.x + s.width;
|
|
335
|
+
x = cfg.align === 'left' ? edge - widest : edge - w;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
else if (sideRule(p.column) === 'left') {
|
|
339
|
+
const edge = col.x - gapPx;
|
|
340
|
+
x = cfg.align === 'left' ? edge - widest : edge - w;
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
const edge = col.x + col.width + gapPx;
|
|
344
|
+
x = cfg.align === 'right' ? edge + widest - w : edge;
|
|
345
|
+
}
|
|
346
|
+
const bbox = createBoundingBox(x, p.baseline - ascent, w, sizePx);
|
|
347
|
+
if (side) {
|
|
348
|
+
const hit = floats.find((f) => f.rect.x < bbox.x + bbox.width && bbox.x < f.rect.x + f.rect.width
|
|
349
|
+
&& f.rect.y < bbox.y + bbox.height && bbox.y < f.rect.y + f.rect.height);
|
|
350
|
+
if (hit) {
|
|
351
|
+
const start = p.line.sourceStart ?? p.block.sourceStart;
|
|
352
|
+
const end = p.line.sourceEnd ?? p.block.sourceEnd;
|
|
353
|
+
ctx.warnings.push({
|
|
354
|
+
kind: 'lineNumberOverlap',
|
|
355
|
+
number: p.mark.label,
|
|
356
|
+
pageIndex: page.index,
|
|
357
|
+
...(start !== undefined && end !== undefined ? { sourceStart: start, sourceEnd: end } : {}),
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
const label = p.mark.label;
|
|
362
|
+
const rtl = [...label].some((ch) => isRtlScriptChar(ch.codePointAt(0)));
|
|
363
|
+
textBlocks.push({
|
|
364
|
+
kind: 'text',
|
|
365
|
+
bbox,
|
|
366
|
+
fontString: font,
|
|
367
|
+
color: cfg.color.hex,
|
|
368
|
+
lines: [{
|
|
369
|
+
text: label,
|
|
370
|
+
xOffset: 0,
|
|
371
|
+
baselineY: p.baseline,
|
|
372
|
+
width: w,
|
|
373
|
+
...(rtl ? { runs: [{ text: label, fontString: font, width: w, rtl: true }] } : {}),
|
|
374
|
+
}],
|
|
375
|
+
clip: false,
|
|
376
|
+
artifact: true,
|
|
377
|
+
...(rtl ? { direction: 'rtl' } : {}),
|
|
378
|
+
});
|
|
379
|
+
marks.push(p.mark);
|
|
380
|
+
});
|
|
381
|
+
const left = Math.min(...textBlocks.map((b) => b.bbox.x));
|
|
382
|
+
const top = Math.min(...textBlocks.map((b) => b.bbox.y));
|
|
383
|
+
const right = Math.max(...textBlocks.map((b) => b.bbox.x + b.bbox.width));
|
|
384
|
+
const bottom = Math.max(...textBlocks.map((b) => b.bbox.y + b.bbox.height));
|
|
385
|
+
page.lineNumbers = { bbox: createBoundingBox(left, top, right - left, bottom - top), blocks: textBlocks };
|
|
386
|
+
page.lineNumberMarks = marks;
|
|
387
|
+
}
|
|
388
|
+
/** Recolour the numbers of the pages whose part or section palette
|
|
389
|
+
* overrides the entry `lineNumbers.color` links to. */
|
|
390
|
+
export function recolorLineNumbers(doc, palettes) {
|
|
391
|
+
const linked = doc.config.lineNumbers?.color.paletteId;
|
|
392
|
+
if (!linked)
|
|
393
|
+
return;
|
|
394
|
+
for (const page of doc.pages) {
|
|
395
|
+
const hex = palettes[page.index]?.[linked];
|
|
396
|
+
if (!hex || !page.lineNumbers)
|
|
397
|
+
continue;
|
|
398
|
+
for (const b of page.lineNumbers.blocks)
|
|
399
|
+
if (b.kind === 'text')
|
|
400
|
+
b.color = hex;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* The number of the last line of verse in `blocks` (#621), counted from
|
|
405
|
+
* `before` as the layout counts it, when `lineNumbers` counts verse: a
|
|
406
|
+
* book laid out one chapter at a time hands it on (`continuationAfter`).
|
|
407
|
+
* Undefined when the count does not depend on the text alone (line
|
|
408
|
+
* numbers off, or every line counted, which only the layout knows), so
|
|
409
|
+
* the caller keeps what it had.
|
|
410
|
+
*/
|
|
411
|
+
export function lastVerseLineNumber(blocks, resolved, before) {
|
|
412
|
+
const cfg = resolved.lineNumbers;
|
|
413
|
+
if (!cfg?.enabled || cfg.count !== 'verse' || cfg.restart === 'page' || resolved.layout.writingMode === 'vertical-rl')
|
|
414
|
+
return undefined;
|
|
415
|
+
// Prose styles that opt in are counted line by line: only the layout
|
|
416
|
+
// knows their lines.
|
|
417
|
+
if (resolved.paragraphStyles.some((s) => s.lineNumbers === true))
|
|
418
|
+
return undefined;
|
|
419
|
+
const counter = new LineCounter(cfg, before);
|
|
420
|
+
const events = lineCountEvents(blocks);
|
|
421
|
+
let insideBox = 0;
|
|
422
|
+
blocks.forEach((b, i) => {
|
|
423
|
+
for (const e of events.get(i) ?? [])
|
|
424
|
+
counter.apply(e);
|
|
425
|
+
if (b.type === 'containerStart' && b.containerName === 'callout')
|
|
426
|
+
insideBox++;
|
|
427
|
+
else if (b.type === 'containerEnd' && b.containerName === 'callout')
|
|
428
|
+
insideBox = Math.max(0, insideBox - 1);
|
|
429
|
+
if (!b.verse || !poemNumbering(b.verse.attrs).numbered)
|
|
430
|
+
return;
|
|
431
|
+
// A poem in a box is counted only when its style opts in.
|
|
432
|
+
const styleId = b.verse.attrs.style?.trim();
|
|
433
|
+
if (!styleCounts(resolved, styleId, insideBox === 0))
|
|
434
|
+
return;
|
|
435
|
+
const lines = b.verse.stanza ? b.verse.stanza.lines.length : b.text.split('\n').filter((l) => l.trim().length > 0).length;
|
|
436
|
+
for (let k = 0; k < lines; k++)
|
|
437
|
+
counter.next(1);
|
|
438
|
+
});
|
|
439
|
+
return counter.value;
|
|
440
|
+
}
|
|
441
|
+
//# sourceMappingURL=lineNumbers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineNumbers.js","sourceRoot":"","sources":["../../src/pipeline/lineNumbers.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,8 @@ import { type BlockKind, type BlockKindContext } from './buildBlockKind';
|
|
|
17
17
|
import { type AnchorRefContext } from './resourceLayout';
|
|
18
18
|
import type { ResourceNumberingMap } from './resourceNumbering';
|
|
19
19
|
import type { CaptionCitations } from './citations';
|
|
20
|
+
import { type MeasuredDropCap } from './dropCap';
|
|
21
|
+
import type { VDTBlock } from '../vdt';
|
|
20
22
|
/** Everything `measureContentBlock` needs that is constant across one
|
|
21
23
|
* placement pass. Built once before the loop; `blockIdx` and the paragraph
|
|
22
24
|
* style override are per-call (see `measureContentBlock` arguments). */
|
|
@@ -52,6 +54,17 @@ export interface BlockMeasureContext extends Omit<BlockKindContext, 'blockIdx' |
|
|
|
52
54
|
* script (Arabic…), which is set without it. The build reports them
|
|
53
55
|
* (`joiningScriptLetterSpacing`). */
|
|
54
56
|
joiningLetterSpacing?: Set<number>;
|
|
57
|
+
/** Filled by the measurement: the content indices of the paragraphs a
|
|
58
|
+
* drop cap was meant to open and could not as configured (#623), and
|
|
59
|
+
* why; the build reports them (`dropCap` content warnings). */
|
|
60
|
+
dropCapNotes?: Map<number, DropCapNote>;
|
|
61
|
+
}
|
|
62
|
+
/** Why a paragraph's drop cap was not set as configured (see
|
|
63
|
+
* `BlockMeasureContext.dropCapNotes`). */
|
|
64
|
+
export interface DropCapNote {
|
|
65
|
+
reason: 'shortParagraph' | 'joiningScript' | 'verticalText' | 'noLetter' | 'split';
|
|
66
|
+
handling?: 'reserve' | 'shrink' | 'skip';
|
|
67
|
+
lines?: number;
|
|
55
68
|
}
|
|
56
69
|
export interface MeasuredContentBlock {
|
|
57
70
|
kind: BlockKind;
|
|
@@ -68,6 +81,15 @@ export interface MeasuredContentBlock {
|
|
|
68
81
|
/** Tracking the text was measured with (px per glyph), when column
|
|
69
82
|
* balancing asked for it — renderers must paint the block with it. */
|
|
70
83
|
letterSpacingPx?: number;
|
|
84
|
+
/** A paragraph a drop cap opens (#623): the letter, relative to the
|
|
85
|
+
* column. Its lines were set short of it. */
|
|
86
|
+
dropCap?: MeasuredDropCap;
|
|
87
|
+
/** A code listing (#624): its language, numbers and fit (see
|
|
88
|
+
* `VDTBlock.code`). */
|
|
89
|
+
code?: NonNullable<VDTBlock['code']>;
|
|
90
|
+
/** A code listing set from the far side of a mirrored frame (#624): its
|
|
91
|
+
* block reads left to right. */
|
|
92
|
+
direction?: 'ltr';
|
|
71
93
|
}
|
|
72
94
|
export interface MeasureContentBlockOptions {
|
|
73
95
|
/** Column-balancing "run a paragraph long" — Knuth-Plass looseness. Left
|
|
@@ -103,11 +125,15 @@ export interface MeasureContentBlockOptions {
|
|
|
103
125
|
fromLine: number;
|
|
104
126
|
columnWidth: number;
|
|
105
127
|
}[];
|
|
128
|
+
/** Internal to the drop cap (#623): the paragraph measured again set
|
|
129
|
+
* without it (`skip`), with the initial over `lines` lines (a short
|
|
130
|
+
* paragraph's `'shrink'`), or with a lead-in of `leadInWords` words
|
|
131
|
+
* (the first line's, counted by the first setting). */
|
|
132
|
+
dropCap?: {
|
|
133
|
+
skip?: true;
|
|
134
|
+
lines?: number;
|
|
135
|
+
leadInWords?: number;
|
|
136
|
+
};
|
|
106
137
|
}
|
|
107
|
-
/**
|
|
108
|
-
* Resolve and measure one content block at `columnWidth`. Returns `null` when
|
|
109
|
-
* there is nothing to place inline: empty text, an unknown resource id, or a
|
|
110
|
-
* resource that floats to a page band.
|
|
111
|
-
*/
|
|
112
138
|
export declare function measureContentBlock(rawBlock: ContentBlock, blockIdx: number, columnWidth: number, ctx: BlockMeasureContext, opts?: MeasureContentBlockOptions): MeasuredContentBlock | null;
|
|
113
139
|
//# sourceMappingURL=measureContentBlock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"measureContentBlock.d.ts","sourceRoot":"","sources":["../../src/pipeline/measureContentBlock.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAW,MAAM,QAAQ,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAO3C,OAAO,EAA+C,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"measureContentBlock.d.ts","sourceRoot":"","sources":["../../src/pipeline/measureContentBlock.ts"],"names":[],"mappings":"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"}
|