postext 1.35.1 → 1.37.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/__bench__/composedPage.bench.test.d.ts +2 -0
- package/dist/__bench__/composedPage.bench.test.d.ts.map +1 -0
- package/dist/__bench__/composedPage.bench.test.js +95 -0
- package/dist/__bench__/composedPage.bench.test.js.map +1 -0
- package/dist/__tests__/composed/continuation.test.d.ts +2 -0
- package/dist/__tests__/composed/continuation.test.d.ts.map +1 -0
- package/dist/__tests__/composed/continuation.test.js +352 -0
- package/dist/__tests__/composed/continuation.test.js.map +1 -0
- package/dist/__tests__/composed/contrast.test.d.ts +2 -0
- package/dist/__tests__/composed/contrast.test.d.ts.map +1 -0
- package/dist/__tests__/composed/contrast.test.js +124 -0
- package/dist/__tests__/composed/contrast.test.js.map +1 -0
- package/dist/__tests__/composed/corpus.test.js +7 -1
- package/dist/__tests__/composed/corpus.test.js.map +1 -1
- package/dist/__tests__/composed/fit.test.d.ts +2 -0
- package/dist/__tests__/composed/fit.test.d.ts.map +1 -0
- package/dist/__tests__/composed/fit.test.js +408 -0
- package/dist/__tests__/composed/fit.test.js.map +1 -0
- package/dist/__tests__/composed/groups.test.js +14 -0
- package/dist/__tests__/composed/groups.test.js.map +1 -1
- package/dist/__tests__/composed/headingDesigns.test.d.ts +2 -0
- package/dist/__tests__/composed/headingDesigns.test.d.ts.map +1 -0
- package/dist/__tests__/composed/headingDesigns.test.js +262 -0
- package/dist/__tests__/composed/headingDesigns.test.js.map +1 -0
- package/dist/__tests__/composed/labels.test.d.ts +2 -0
- package/dist/__tests__/composed/labels.test.d.ts.map +1 -0
- package/dist/__tests__/composed/labels.test.js +326 -0
- package/dist/__tests__/composed/labels.test.js.map +1 -0
- package/dist/__tests__/composed/layout.test.js +2 -1
- package/dist/__tests__/composed/layout.test.js.map +1 -1
- package/dist/__tests__/composed/outsidePrint.test.js +5 -2
- package/dist/__tests__/composed/outsidePrint.test.js.map +1 -1
- package/dist/__tests__/composed/pageMemo.test.d.ts +2 -0
- package/dist/__tests__/composed/pageMemo.test.d.ts.map +1 -0
- package/dist/__tests__/composed/pageMemo.test.js +128 -0
- package/dist/__tests__/composed/pageMemo.test.js.map +1 -0
- package/dist/__tests__/composed/sourceMap.test.d.ts +2 -0
- package/dist/__tests__/composed/sourceMap.test.d.ts.map +1 -0
- package/dist/__tests__/composed/sourceMap.test.js +395 -0
- package/dist/__tests__/composed/sourceMap.test.js.map +1 -0
- package/dist/__tests__/composed/spreadLabels.test.d.ts +2 -0
- package/dist/__tests__/composed/spreadLabels.test.d.ts.map +1 -0
- package/dist/__tests__/composed/spreadLabels.test.js +131 -0
- package/dist/__tests__/composed/spreadLabels.test.js.map +1 -0
- package/dist/__tests__/composed/templateFrameRects.test.d.ts +2 -0
- package/dist/__tests__/composed/templateFrameRects.test.d.ts.map +1 -0
- package/dist/__tests__/composed/templateFrameRects.test.js +37 -0
- package/dist/__tests__/composed/templateFrameRects.test.js.map +1 -0
- package/dist/__tests__/design/imageAltText.test.js +2 -1
- package/dist/__tests__/design/imageAltText.test.js.map +1 -1
- package/dist/__tests__/exports.test.js +33 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/migrate/fixtures/textbookPort.d.ts +14 -0
- package/dist/__tests__/migrate/fixtures/textbookPort.d.ts.map +1 -0
- package/dist/__tests__/migrate/fixtures/textbookPort.js +116 -0
- package/dist/__tests__/migrate/fixtures/textbookPort.js.map +1 -0
- package/dist/__tests__/migrate/textToMarkdown.test.d.ts +2 -0
- package/dist/__tests__/migrate/textToMarkdown.test.d.ts.map +1 -0
- package/dist/__tests__/migrate/textToMarkdown.test.js +268 -0
- package/dist/__tests__/migrate/textToMarkdown.test.js.map +1 -0
- package/dist/__tests__/paragraphStyleLetterSpacing.test.d.ts +2 -0
- package/dist/__tests__/paragraphStyleLetterSpacing.test.d.ts.map +1 -0
- package/dist/__tests__/paragraphStyleLetterSpacing.test.js +89 -0
- package/dist/__tests__/paragraphStyleLetterSpacing.test.js.map +1 -0
- package/dist/__tests__/pictureBelowPrintSize.test.d.ts +2 -0
- package/dist/__tests__/pictureBelowPrintSize.test.d.ts.map +1 -0
- package/dist/__tests__/pictureBelowPrintSize.test.js +82 -0
- package/dist/__tests__/pictureBelowPrintSize.test.js.map +1 -0
- package/dist/__tests__/pipeline/contourWrap.test.d.ts +2 -0
- package/dist/__tests__/pipeline/contourWrap.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/contourWrap.test.js +412 -0
- package/dist/__tests__/pipeline/contourWrap.test.js.map +1 -0
- package/dist/__tests__/pipeline/paragraphStyleFaces.test.js +1 -1
- package/dist/__tests__/pipeline/paragraphStyleFaces.test.js.map +1 -1
- package/dist/__tests__/toc.test.js +3 -2
- package/dist/__tests__/toc.test.js.map +1 -1
- package/dist/bundle/codec.d.ts +16 -0
- package/dist/bundle/codec.d.ts.map +1 -1
- package/dist/bundle/codec.js +44 -2
- package/dist/bundle/codec.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/composed.d.ts +5 -2
- package/dist/canvas-backend/composed.d.ts.map +1 -1
- package/dist/canvas-backend/composed.js +10 -5
- package/dist/canvas-backend/composed.js.map +1 -1
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +37 -19
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.d.ts +5 -1
- package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.js +60 -1
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/composed/continuation.d.ts +102 -0
- package/dist/composed/continuation.d.ts.map +1 -0
- package/dist/composed/continuation.js +87 -0
- package/dist/composed/continuation.js.map +1 -0
- package/dist/composed/contour.d.ts +21 -0
- package/dist/composed/contour.d.ts.map +1 -0
- package/dist/composed/contour.js +34 -0
- package/dist/composed/contour.js.map +1 -0
- package/dist/composed/geometry.d.ts +8 -0
- package/dist/composed/geometry.d.ts.map +1 -1
- package/dist/composed/geometry.js +26 -0
- package/dist/composed/geometry.js.map +1 -1
- package/dist/composed/ids.d.ts +22 -0
- package/dist/composed/ids.d.ts.map +1 -0
- package/dist/composed/ids.js +32 -0
- package/dist/composed/ids.js.map +1 -0
- package/dist/composed/labels.d.ts +154 -0
- package/dist/composed/labels.d.ts.map +1 -0
- package/dist/composed/labels.js +524 -0
- package/dist/composed/labels.js.map +1 -0
- package/dist/composed/pageMemo.d.ts +73 -0
- package/dist/composed/pageMemo.d.ts.map +1 -0
- package/dist/composed/pageMemo.js +289 -0
- package/dist/composed/pageMemo.js.map +1 -0
- package/dist/composed/paint.d.ts +29 -9
- package/dist/composed/paint.d.ts.map +1 -1
- package/dist/composed/paint.js +41 -7
- package/dist/composed/paint.js.map +1 -1
- package/dist/composed/reflowLog.d.ts +14 -2
- package/dist/composed/reflowLog.d.ts.map +1 -1
- package/dist/composed/reflowLog.js +64 -7
- package/dist/composed/reflowLog.js.map +1 -1
- package/dist/composed/slotChecks.d.ts.map +1 -1
- package/dist/composed/slotChecks.js +3 -1
- package/dist/composed/slotChecks.js.map +1 -1
- package/dist/composed/sourceMap.d.ts +97 -0
- package/dist/composed/sourceMap.d.ts.map +1 -0
- package/dist/composed/sourceMap.js +748 -0
- package/dist/composed/sourceMap.js.map +1 -0
- package/dist/composed/spread.d.ts +3 -0
- package/dist/composed/spread.d.ts.map +1 -1
- package/dist/composed/spread.js +11 -12
- package/dist/composed/spread.js.map +1 -1
- package/dist/composed/templates.d.ts +1 -0
- package/dist/composed/templates.d.ts.map +1 -1
- package/dist/composed/templates.js +4 -0
- package/dist/composed/templates.js.map +1 -1
- package/dist/composed/types.d.ts +15 -32
- package/dist/composed/types.d.ts.map +1 -1
- package/dist/composed/validate.d.ts.map +1 -1
- package/dist/composed/validate.js +3 -2
- package/dist/composed/validate.js.map +1 -1
- package/dist/composed/wrap.d.ts.map +1 -1
- package/dist/composed/wrap.js +7 -1
- package/dist/composed/wrap.js.map +1 -1
- package/dist/configWarnings.d.ts +15 -0
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +29 -17
- package/dist/configWarnings.js.map +1 -1
- package/dist/contour/index.d.ts +134 -0
- package/dist/contour/index.d.ts.map +1 -0
- package/dist/contour/index.js +354 -0
- package/dist/contour/index.js.map +1 -0
- package/dist/contour/png.d.ts +16 -0
- package/dist/contour/png.d.ts.map +1 -0
- package/dist/contour/png.js +173 -0
- package/dist/contour/png.js.map +1 -0
- package/dist/contrast.d.ts +5 -3
- package/dist/contrast.d.ts.map +1 -1
- package/dist/contrast.js +46 -5
- package/dist/contrast.js.map +1 -1
- package/dist/defaults/paragraphStyles.d.ts +1 -1
- package/dist/defaults/paragraphStyles.d.ts.map +1 -1
- package/dist/defaults/paragraphStyles.js +5 -1
- package/dist/defaults/paragraphStyles.js.map +1 -1
- package/dist/design/slots.d.ts +12 -10
- package/dist/design/slots.d.ts.map +1 -1
- package/dist/design/slots.js +26 -2
- package/dist/design/slots.js.map +1 -1
- package/dist/fonts/faces.d.ts.map +1 -1
- package/dist/fonts/faces.js +6 -0
- package/dist/fonts/faces.js.map +1 -1
- package/dist/highlightMarks.d.ts.map +1 -1
- package/dist/highlightMarks.js +6 -0
- package/dist/highlightMarks.js.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +42 -4
- package/dist/html-backend.js.map +1 -1
- package/dist/index.d.ts +18 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -4
- package/dist/index.js.map +1 -1
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +2 -0
- package/dist/measure/rich.js.map +1 -1
- package/dist/migrate/markdownRuns.d.ts +70 -0
- package/dist/migrate/markdownRuns.d.ts.map +1 -0
- package/dist/migrate/markdownRuns.js +215 -0
- package/dist/migrate/markdownRuns.js.map +1 -0
- package/dist/migrate/pageDesign.d.ts +119 -0
- package/dist/migrate/pageDesign.d.ts.map +1 -0
- package/dist/migrate/pageDesign.js +446 -0
- package/dist/migrate/pageDesign.js.map +1 -0
- package/dist/migrate/textToMarkdown.d.ts +124 -0
- package/dist/migrate/textToMarkdown.d.ts.map +1 -0
- package/dist/migrate/textToMarkdown.js +716 -0
- package/dist/migrate/textToMarkdown.js.map +1 -0
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +44 -3
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/types.d.ts +20 -0
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +298 -30
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildMeasurement.d.ts +7 -2
- package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
- package/dist/pipeline/buildMeasurement.js +21 -5
- package/dist/pipeline/buildMeasurement.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts +39 -14
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +50 -4
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/composedLayout.d.ts +51 -6
- package/dist/pipeline/composedLayout.d.ts.map +1 -1
- package/dist/pipeline/composedLayout.js +633 -78
- package/dist/pipeline/composedLayout.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts +15 -0
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +98 -4
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/floatPlacement.d.ts +2 -0
- package/dist/pipeline/floatPlacement.d.ts.map +1 -1
- package/dist/pipeline/floatPlacement.js +1 -0
- package/dist/pipeline/floatPlacement.js.map +1 -1
- package/dist/pipeline/frameLayout.d.ts +7 -4
- package/dist/pipeline/frameLayout.d.ts.map +1 -1
- package/dist/pipeline/frameLayout.js +5 -2
- package/dist/pipeline/frameLayout.js.map +1 -1
- package/dist/pipeline/headerFooter.d.ts +20 -1
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +225 -70
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +1 -0
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/mirrorFrame.d.ts.map +1 -1
- package/dist/pipeline/mirrorFrame.js +25 -2
- package/dist/pipeline/mirrorFrame.js.map +1 -1
- package/dist/pipeline/outline.d.ts.map +1 -1
- package/dist/pipeline/outline.js +2 -0
- package/dist/pipeline/outline.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts +28 -0
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +21 -0
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/pipeline/styles.d.ts +1 -1
- package/dist/pipeline/styles.d.ts.map +1 -1
- package/dist/pipeline/styles.js +4 -0
- package/dist/pipeline/styles.js.map +1 -1
- package/dist/pipeline/textWrap.d.ts +4 -1
- package/dist/pipeline/textWrap.d.ts.map +1 -1
- package/dist/pipeline/textWrap.js +17 -3
- package/dist/pipeline/textWrap.js.map +1 -1
- package/dist/pipeline/toc.d.ts.map +1 -1
- package/dist/pipeline/toc.js +1 -0
- package/dist/pipeline/toc.js.map +1 -1
- package/dist/types.d.ts +77 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +290 -15
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js.map +1 -1
- package/dist/word/toDocx.d.ts.map +1 -1
- package/dist/word/toDocx.js +14 -0
- package/dist/word/toDocx.js.map +1 -1
- package/dist/word/word.test.js +11 -1
- package/dist/word/word.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pages of a chapter that a heading style's running head dressed
|
|
3
|
+
* (#874): where each run of Markdown under a migrated page design starts and
|
|
4
|
+
* ends, page by page, so the migration can wrap it in a `::::page{template}`
|
|
5
|
+
* fence. A line scanner, not the parser: it only has to know headings, the
|
|
6
|
+
* fences that open and close containers, code blocks and page breaks, and it
|
|
7
|
+
* keeps every other line byte for byte.
|
|
8
|
+
*/
|
|
9
|
+
const HEADING_RE = /^(#{1,6})[ \t]+([^ \t].*)?$/;
|
|
10
|
+
const FENCE_RE = /^(:{3,})(?:[ \t]*([A-Za-z][\w-]*))?(?:[ \t]*(\{.*\}))?$/;
|
|
11
|
+
const CODE_RE = /^[ \t]{0,3}(`{3,}|~{3,})/;
|
|
12
|
+
/** Containers, and the blocks the parser reads whole up to a bare `:::`. */
|
|
13
|
+
const OPENS = new Set(['callout', 'paragraphs', 'part', 'columns', 'paper', 'frame', 'references', 'verse', 'figure', 'page', 'strip']);
|
|
14
|
+
/** Directives that close a run when they stand at the top level: a part
|
|
15
|
+
* page, the contents, a composed page already there, the index. */
|
|
16
|
+
const CLOSES = new Set(['part', 'toc', 'index', 'bibliography', 'numbering']);
|
|
17
|
+
/** The `{…}` attributes of a heading line: `key="v"`, `key='v'`, `key=v`,
|
|
18
|
+
* `#id`, `.class` (ignored) and bare words. */
|
|
19
|
+
export function parseAttrBlock(raw) {
|
|
20
|
+
const attrs = {};
|
|
21
|
+
const tokens = {};
|
|
22
|
+
const re = /([A-Za-z_][\w.:-]*)\s*=\s*("([^"]*)"|'([^']*)'|([^\s"']+))|#([\w-]+)|\.([\w-]+)|([A-Za-z_][\w-]*)/g;
|
|
23
|
+
for (let m = re.exec(raw); m; m = re.exec(raw)) {
|
|
24
|
+
if (m[1] !== undefined) {
|
|
25
|
+
attrs[m[1]] = m[3] ?? m[4] ?? m[5] ?? '';
|
|
26
|
+
tokens[m[1]] = m[0];
|
|
27
|
+
}
|
|
28
|
+
else if (m[6] !== undefined) {
|
|
29
|
+
attrs.id = m[6];
|
|
30
|
+
tokens.id = m[0];
|
|
31
|
+
}
|
|
32
|
+
else if (m[8] !== undefined) {
|
|
33
|
+
attrs[m[8]] = '';
|
|
34
|
+
tokens[m[8]] = m[0];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return { attrs, tokens };
|
|
38
|
+
}
|
|
39
|
+
/** A heading's text and trailing attribute block. */
|
|
40
|
+
export function readHeading(line, index) {
|
|
41
|
+
const m = line.match(HEADING_RE);
|
|
42
|
+
if (!m)
|
|
43
|
+
return null;
|
|
44
|
+
let title = (m[2] ?? '').trimEnd();
|
|
45
|
+
let attrsRaw;
|
|
46
|
+
if (title.endsWith('}')) {
|
|
47
|
+
const open = title.lastIndexOf('{');
|
|
48
|
+
if (open >= 0) {
|
|
49
|
+
attrsRaw = title.slice(open + 1, -1);
|
|
50
|
+
title = title.slice(0, open).trimEnd();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const { attrs, tokens } = attrsRaw !== undefined ? parseAttrBlock(attrsRaw) : { attrs: {}, tokens: {} };
|
|
54
|
+
return { line: index, level: m[1].length, title, ...(attrsRaw !== undefined ? { attrsRaw } : {}), attrs, attrTokens: tokens };
|
|
55
|
+
}
|
|
56
|
+
const blank = (s) => s === undefined || s.trim() === '';
|
|
57
|
+
/** Find the runs of a chapter's Markdown under the page designs `designOf`
|
|
58
|
+
* names. A run opens at a heading whose style is migrated and goes on
|
|
59
|
+
* while the headings that follow belong to the same design (or are
|
|
60
|
+
* unstyled and deeper than the one that opened it); a heading of another
|
|
61
|
+
* style, a part, the contents, a composed page fence or the chapter's end
|
|
62
|
+
* close it. Inside a run a page break, or a heading that breaks the page,
|
|
63
|
+
* starts the run's next page. Only top-level lines count: what sits in a
|
|
64
|
+
* container or a code block is carried along. */
|
|
65
|
+
export function scanChapter(markdown, opts) {
|
|
66
|
+
const lines = markdown.split('\n');
|
|
67
|
+
const headings = [];
|
|
68
|
+
const runs = [];
|
|
69
|
+
const breaks = [];
|
|
70
|
+
/** Colons of each open fence (3 for containers, 4+ for composed pages). */
|
|
71
|
+
const stack = [];
|
|
72
|
+
let code = null;
|
|
73
|
+
let run = null;
|
|
74
|
+
let page = null;
|
|
75
|
+
/** A page break met in a run, waiting for what follows it. */
|
|
76
|
+
let pendingBreak = null;
|
|
77
|
+
const closeRun = (endLine) => {
|
|
78
|
+
if (!run)
|
|
79
|
+
return;
|
|
80
|
+
// Trailing blank lines stay outside.
|
|
81
|
+
let end = endLine;
|
|
82
|
+
while (end > run.startLine && blank(lines[end]))
|
|
83
|
+
end--;
|
|
84
|
+
if (page)
|
|
85
|
+
page.endLine = Math.max(page.startLine, Math.min(page.endLine, end));
|
|
86
|
+
run.endLine = end;
|
|
87
|
+
runs.push({ design: run.design, startLine: run.startLine, endLine: run.endLine, pages: run.pages });
|
|
88
|
+
run = null;
|
|
89
|
+
page = null;
|
|
90
|
+
};
|
|
91
|
+
const startPage = (line) => {
|
|
92
|
+
if (!run)
|
|
93
|
+
return;
|
|
94
|
+
// The page before ends at its last line of content (`endLine` follows
|
|
95
|
+
// the content lines, never a page break or a blank line).
|
|
96
|
+
page = { startLine: line, endLine: line, headings: [] };
|
|
97
|
+
run.pages.push(page);
|
|
98
|
+
};
|
|
99
|
+
for (let i = 0; i < lines.length; i++) {
|
|
100
|
+
const raw = lines[i];
|
|
101
|
+
const line = raw.replace(/\r$/, '');
|
|
102
|
+
const trimmed = line.trim();
|
|
103
|
+
if (code !== null) {
|
|
104
|
+
if (trimmed.startsWith(code))
|
|
105
|
+
code = null;
|
|
106
|
+
if (page)
|
|
107
|
+
page.endLine = i;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const codeOpen = line.match(CODE_RE);
|
|
111
|
+
if (codeOpen) {
|
|
112
|
+
code = codeOpen[1].slice(0, 3);
|
|
113
|
+
if (pendingBreak !== null && run) {
|
|
114
|
+
startPage(i);
|
|
115
|
+
pendingBreak = null;
|
|
116
|
+
}
|
|
117
|
+
if (page)
|
|
118
|
+
page.endLine = i;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const fence = trimmed.match(FENCE_RE);
|
|
122
|
+
const top = stack.length === 0;
|
|
123
|
+
if (fence) {
|
|
124
|
+
const colons = fence[1].length;
|
|
125
|
+
const name = fence[2];
|
|
126
|
+
if (!name) {
|
|
127
|
+
// A bare fence closes the innermost one it matches.
|
|
128
|
+
if (stack.length > 0 && (stack[stack.length - 1] === colons || (colons === 3 && stack[stack.length - 1] === 3)))
|
|
129
|
+
stack.pop();
|
|
130
|
+
if (page)
|
|
131
|
+
page.endLine = i;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (top && name === 'pagebreak') {
|
|
135
|
+
if (run) {
|
|
136
|
+
pendingBreak = i;
|
|
137
|
+
}
|
|
138
|
+
else if (/^:{3}pagebreak[ \t]*$/.test(trimmed)) {
|
|
139
|
+
breaks.push(i);
|
|
140
|
+
}
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (top && (colons >= 4 || CLOSES.has(name))) {
|
|
144
|
+
if (run)
|
|
145
|
+
closeRun(pendingBreak !== null ? pendingBreak - 1 : i - 1);
|
|
146
|
+
if (pendingBreak !== null) {
|
|
147
|
+
breaks.push(pendingBreak);
|
|
148
|
+
pendingBreak = null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (top && pendingBreak !== null && run) {
|
|
152
|
+
startPage(i);
|
|
153
|
+
pendingBreak = null;
|
|
154
|
+
}
|
|
155
|
+
if (colons >= 4 || OPENS.has(name))
|
|
156
|
+
stack.push(colons >= 4 ? colons : 3);
|
|
157
|
+
if (page)
|
|
158
|
+
page.endLine = i;
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (top) {
|
|
162
|
+
const h = readHeading(line, i);
|
|
163
|
+
if (h) {
|
|
164
|
+
headings.push(h);
|
|
165
|
+
const design = h.attrs.style !== undefined ? opts.designOf(h.attrs.style) : undefined;
|
|
166
|
+
if (run) {
|
|
167
|
+
const same = design !== undefined && design === run.design;
|
|
168
|
+
const deeper = h.attrs.style === undefined && h.level > run.level;
|
|
169
|
+
if (same || deeper) {
|
|
170
|
+
if (pendingBreak !== null || (same && opts.breaksPage(h) && page && page.headings.length > 0))
|
|
171
|
+
startPage(i);
|
|
172
|
+
pendingBreak = null;
|
|
173
|
+
page.headings.push(h);
|
|
174
|
+
page.endLine = i;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
closeRun(pendingBreak !== null ? pendingBreak - 1 : i - 1);
|
|
178
|
+
if (pendingBreak !== null)
|
|
179
|
+
breaks.push(pendingBreak);
|
|
180
|
+
pendingBreak = null;
|
|
181
|
+
}
|
|
182
|
+
if (design !== undefined) {
|
|
183
|
+
run = { design, startLine: i, endLine: i, pages: [], level: h.level };
|
|
184
|
+
startPage(i);
|
|
185
|
+
page.headings.push(h);
|
|
186
|
+
}
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (!blank(line) && pendingBreak !== null && run) {
|
|
190
|
+
startPage(i);
|
|
191
|
+
pendingBreak = null;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (page && !blank(line))
|
|
195
|
+
page.endLine = i;
|
|
196
|
+
}
|
|
197
|
+
if (run)
|
|
198
|
+
closeRun(pendingBreak !== null ? pendingBreak - 1 : lines.length - 1);
|
|
199
|
+
if (pendingBreak !== null)
|
|
200
|
+
breaks.push(pendingBreak);
|
|
201
|
+
// Bare page breaks next to a run: only blank lines between.
|
|
202
|
+
const dropBreaks = breaks.filter((b) => {
|
|
203
|
+
const near = (from, step) => {
|
|
204
|
+
for (let j = from; j >= 0 && j < lines.length; j += step)
|
|
205
|
+
if (!blank(lines[j]))
|
|
206
|
+
return j;
|
|
207
|
+
return null;
|
|
208
|
+
};
|
|
209
|
+
const before = near(b - 1, -1);
|
|
210
|
+
const after = near(b + 1, 1);
|
|
211
|
+
return runs.some((r) => r.endLine === before || r.startLine === after);
|
|
212
|
+
});
|
|
213
|
+
return { lines, headings, runs, dropBreaks };
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=markdownRuns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdownRuns.js","sourceRoot":"","sources":["../../src/migrate/markdownRuns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmDH,MAAM,UAAU,GAAG,6BAA6B,CAAC;AACjD,MAAM,QAAQ,GAAG,yDAAyD,CAAC;AAC3E,MAAM,OAAO,GAAG,0BAA0B,CAAC;AAC3C,4EAA4E;AAC5E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACxI;oEACoE;AACpE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;AAE9E;gDACgD;AAChD,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,EAAE,GAAG,oGAAoG,CAAC;IAChH,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACvB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAa;IACrD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACnC,IAAI,QAA4B,CAAC;IACjC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxG,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACjI,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,CAAqB,EAAW,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAErF;;;;;;;kDAOkD;AAClD,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,IAAiB;IAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,2EAA2E;IAC3E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,GAAG,GAAG,IAA8C,CAAC;IACzD,IAAI,IAAI,GAAG,IAAsB,CAAC;IAClC,8DAA8D;IAC9D,IAAI,YAAY,GAAG,IAAqB,CAAC;IAEzC,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAQ,EAAE;QACzC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,qCAAqC;QACrC,IAAI,GAAG,GAAG,OAAO,CAAC;QAClB,OAAO,GAAG,GAAG,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAAE,GAAG,EAAE,CAAC;QACvD,IAAI,IAAI;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/E,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACpG,GAAG,GAAG,IAAI,CAAC;QACX,IAAI,GAAG,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAQ,EAAE;QACvC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,sEAAsE;QACtE,0DAA0D;QAC1D,IAAI,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACxD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACtB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,IAAI,GAAG,IAAI,CAAC;YAC1C,IAAI,IAAI;gBAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChC,IAAI,YAAY,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC;gBAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAAC,YAAY,GAAG,IAAI,CAAC;YAAC,CAAC;YACxE,IAAI,IAAI;gBAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;QAC/B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;YAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,oDAAoD;gBACpD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBAAE,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC7H,IAAI,IAAI;oBAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,IAAI,GAAG,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBAChC,IAAI,GAAG,EAAE,CAAC;oBACR,YAAY,GAAG,CAAC,CAAC;gBACnB,CAAC;qBAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACjD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC7C,IAAI,GAAG;oBAAE,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpE,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC1B,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,IAAI,YAAY,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC;gBAC/C,SAAS,CAAC,CAAC,CAAC,CAAC;gBACb,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;YACD,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,IAAI;gBAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,EAAE,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjB,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtF,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC;oBAC3D,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;oBAClE,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;wBACnB,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;4BAAE,SAAS,CAAC,CAAC,CAAC,CAAC;wBAC5G,YAAY,GAAG,IAAI,CAAC;wBACpB,IAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACvB,IAAK,CAAC,OAAO,GAAG,CAAC,CAAC;wBAClB,SAAS;oBACX,CAAC;oBACD,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC3D,IAAI,YAAY,KAAK,IAAI;wBAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACrD,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;gBACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,GAAG,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;oBACtE,SAAS,CAAC,CAAC,CAAC,CAAC;oBACb,IAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC;gBACjD,SAAS,CAAC,CAAC,CAAC,CAAC;gBACb,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;QACD,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,GAAG;QAAE,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/E,IAAI,YAAY,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAErD,4DAA4D;IAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,IAAY,EAAiB,EAAE;YACzD,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI;gBAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAC;YACzF,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One page design of a book that keeps its text in heading styles (#874):
|
|
3
|
+
* the elements of a style's running head split into the text that moves to
|
|
4
|
+
* the Markdown (grouped into frames by geometry and look) and the
|
|
5
|
+
* decoration that stays in the configuration. Pure; lengths in mm.
|
|
6
|
+
*/
|
|
7
|
+
import type { ChipStyleConfig, ColorValue, DesignElement, DesignTextElement, Dimension } from '../types';
|
|
8
|
+
import type { PageSide } from '../composed/types';
|
|
9
|
+
/** The look of a design text a paragraph style has to reproduce. */
|
|
10
|
+
export interface TextLook {
|
|
11
|
+
fontFamily?: string;
|
|
12
|
+
fontSize: Dimension;
|
|
13
|
+
fontWeight: number;
|
|
14
|
+
italic: boolean;
|
|
15
|
+
color?: ColorValue;
|
|
16
|
+
align: 'left' | 'center' | 'right' | 'justify' | 'start' | 'end';
|
|
17
|
+
/** Leading as a multiple of the size. */
|
|
18
|
+
lineHeight: number;
|
|
19
|
+
uppercase: boolean;
|
|
20
|
+
hyphenate: boolean;
|
|
21
|
+
direction?: 'ltr' | 'rtl';
|
|
22
|
+
writingMode?: 'vertical-rl';
|
|
23
|
+
/** Tracking in ems of the text's size (#907); absent when none. */
|
|
24
|
+
letterSpacing?: Dimension;
|
|
25
|
+
}
|
|
26
|
+
/** A text element that moves to the Markdown. */
|
|
27
|
+
export interface TextPiece {
|
|
28
|
+
id: string;
|
|
29
|
+
side?: PageSide;
|
|
30
|
+
/** Top-left on the trim, mm; only for elements anchored to the page's
|
|
31
|
+
* top-left (the others keep their placement and are never merged). */
|
|
32
|
+
x?: number;
|
|
33
|
+
y?: number;
|
|
34
|
+
width?: number;
|
|
35
|
+
/** Estimated height (lines × leading). */
|
|
36
|
+
height?: number;
|
|
37
|
+
/** The height is the text's own lines (no line was guessed to wrap). */
|
|
38
|
+
heightSure?: boolean;
|
|
39
|
+
lineMm: number;
|
|
40
|
+
look: TextLook;
|
|
41
|
+
lookKey: string;
|
|
42
|
+
element: DesignTextElement;
|
|
43
|
+
/** The text as Markdown lines (inline marks kept, chips for highlights). */
|
|
44
|
+
lines: string[];
|
|
45
|
+
chars: number;
|
|
46
|
+
notes: string[];
|
|
47
|
+
}
|
|
48
|
+
/** A frame the migration writes: one or more pieces of one look, under one
|
|
49
|
+
* another at an even spacing. */
|
|
50
|
+
export interface PlannedFrame {
|
|
51
|
+
side?: PageSide;
|
|
52
|
+
pieces: TextPiece[];
|
|
53
|
+
look: TextLook;
|
|
54
|
+
lookKey: string;
|
|
55
|
+
/** mm between pieces (paragraph spacing). */
|
|
56
|
+
gap: number;
|
|
57
|
+
width?: number;
|
|
58
|
+
/** Assigned when templates are built. */
|
|
59
|
+
name?: string;
|
|
60
|
+
/** Geometry key for template sharing. */
|
|
61
|
+
key: string;
|
|
62
|
+
}
|
|
63
|
+
export interface DesignInput {
|
|
64
|
+
key: string;
|
|
65
|
+
elements: DesignElement[];
|
|
66
|
+
/** The slot each element comes from (same order as `elements`). */
|
|
67
|
+
origins: ('header' | 'footer')[];
|
|
68
|
+
page: {
|
|
69
|
+
width: number;
|
|
70
|
+
height: number;
|
|
71
|
+
};
|
|
72
|
+
isContent: (content: string) => boolean;
|
|
73
|
+
/** Existing chip styles, matched by background colour for highlights. */
|
|
74
|
+
chipStyles: readonly ChipStyleConfig[];
|
|
75
|
+
highlightsToChips: boolean;
|
|
76
|
+
merge: boolean;
|
|
77
|
+
}
|
|
78
|
+
export interface PlannedDesign {
|
|
79
|
+
key: string;
|
|
80
|
+
frames: PlannedFrame[];
|
|
81
|
+
/** Elements that stay, in their order (anchors to moved text remapped
|
|
82
|
+
* once frames have names: see {@link remapDecorationAnchors}). */
|
|
83
|
+
decoration: DesignElement[];
|
|
84
|
+
/** Element id → index of the frame its text went to. */
|
|
85
|
+
movedTo: Map<string, number>;
|
|
86
|
+
/** Elements that stay in the template's own running heads: anchored
|
|
87
|
+
* to the slot's container (or the outer margin), or to such an element. */
|
|
88
|
+
header: DesignElement[];
|
|
89
|
+
footer: DesignElement[];
|
|
90
|
+
/** The full-page picture, replaced by `{attr.background}`. */
|
|
91
|
+
background?: string;
|
|
92
|
+
/** Text elements left in the decoration, and why. */
|
|
93
|
+
kept: {
|
|
94
|
+
id: string;
|
|
95
|
+
reason: 'placeholder' | 'anchor';
|
|
96
|
+
}[];
|
|
97
|
+
/** Highlight boxes turned into chips. */
|
|
98
|
+
chips: number;
|
|
99
|
+
/** Chip styles this design needs that the book lacks, by id. */
|
|
100
|
+
newChipStyles: Map<string, ChipStyleConfig>;
|
|
101
|
+
notes: string[];
|
|
102
|
+
movedChars: number;
|
|
103
|
+
movedElements: number;
|
|
104
|
+
}
|
|
105
|
+
/** A length in mm; `em` against `emMm`. */
|
|
106
|
+
export declare function toMm(d: Dimension | undefined, emMm?: number): number | undefined;
|
|
107
|
+
/** A design text's look. */
|
|
108
|
+
export declare function lookOf(el: DesignTextElement): TextLook;
|
|
109
|
+
/** Whether a design text holds a placeholder (`{pageNumber}`, `{attr.x}`). */
|
|
110
|
+
export declare function hasPlaceholder(content: string): boolean;
|
|
111
|
+
/** The Markdown of a frame's paragraph: the lines joined by forced breaks
|
|
112
|
+
* (a backslash at the end of the line; ` \\ ` on the same line when the
|
|
113
|
+
* next one would start a block). */
|
|
114
|
+
export declare function joinLines(lines: readonly string[]): string;
|
|
115
|
+
/** Split one page design. */
|
|
116
|
+
export declare function planDesign(input: DesignInput): PlannedDesign;
|
|
117
|
+
/** Decoration anchors that named a text now in a frame name the frame. */
|
|
118
|
+
export declare function remapDecorationAnchors(decoration: DesignElement[], movedTo: Map<string, number>, frames: readonly PlannedFrame[]): DesignElement[];
|
|
119
|
+
//# sourceMappingURL=pageDesign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageDesign.d.ts","sourceRoot":"","sources":["../../src/migrate/pageDesign.ts"],"names":[],"mappings":"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"}
|