postext 1.36.0 → 1.38.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__/comics/frames.test.d.ts +2 -0
- package/dist/__tests__/comics/frames.test.d.ts.map +1 -0
- package/dist/__tests__/comics/frames.test.js +251 -0
- package/dist/__tests__/comics/frames.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/continuationRules.test.d.ts +2 -0
- package/dist/__tests__/composed/continuationRules.test.d.ts.map +1 -0
- package/dist/__tests__/composed/continuationRules.test.js +389 -0
- package/dist/__tests__/composed/continuationRules.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/coverImages.test.d.ts +2 -0
- package/dist/__tests__/composed/coverImages.test.d.ts.map +1 -0
- package/dist/__tests__/composed/coverImages.test.js +75 -0
- package/dist/__tests__/composed/coverImages.test.js.map +1 -0
- package/dist/__tests__/composed/decorationSize.test.d.ts +2 -0
- package/dist/__tests__/composed/decorationSize.test.d.ts.map +1 -0
- package/dist/__tests__/composed/decorationSize.test.js +79 -0
- package/dist/__tests__/composed/decorationSize.test.js.map +1 -0
- package/dist/__tests__/composed/emptyFrames.test.d.ts +2 -0
- package/dist/__tests__/composed/emptyFrames.test.d.ts.map +1 -0
- package/dist/__tests__/composed/emptyFrames.test.js +129 -0
- package/dist/__tests__/composed/emptyFrames.test.js.map +1 -0
- package/dist/__tests__/composed/fit.test.js +19 -10
- package/dist/__tests__/composed/fit.test.js.map +1 -1
- package/dist/__tests__/composed/groups.test.js +34 -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/outsidePrint.test.js +5 -2
- package/dist/__tests__/composed/outsidePrint.test.js.map +1 -1
- package/dist/__tests__/composed/ruledFrames.test.d.ts +2 -0
- package/dist/__tests__/composed/ruledFrames.test.d.ts.map +1 -0
- package/dist/__tests__/composed/ruledFrames.test.js +93 -0
- package/dist/__tests__/composed/ruledFrames.test.js.map +1 -0
- package/dist/__tests__/composed/sourceMap.test.js +26 -0
- package/dist/__tests__/composed/sourceMap.test.js.map +1 -1
- package/dist/__tests__/composed/spread.test.js +82 -0
- package/dist/__tests__/composed/spread.test.js.map +1 -1
- 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__/exports.test.js +23 -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/labelsOnPictures.test.d.ts +2 -0
- package/dist/__tests__/migrate/labelsOnPictures.test.d.ts.map +1 -0
- package/dist/__tests__/migrate/labelsOnPictures.test.js +114 -0
- package/dist/__tests__/migrate/labelsOnPictures.test.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__/paragraphDropCap.test.js +38 -0
- package/dist/__tests__/paragraphDropCap.test.js.map +1 -1
- 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/paragraphStyleFaces.test.js +1 -1
- package/dist/__tests__/pipeline/paragraphStyleFaces.test.js.map +1 -1
- package/dist/__tests__/resourceTypePartial.test.d.ts +2 -0
- package/dist/__tests__/resourceTypePartial.test.d.ts.map +1 -0
- package/dist/__tests__/resourceTypePartial.test.js +60 -0
- package/dist/__tests__/resourceTypePartial.test.js.map +1 -0
- package/dist/canvas-backend/composed.d.ts +8 -2
- package/dist/canvas-backend/composed.d.ts.map +1 -1
- package/dist/canvas-backend/composed.js +52 -29
- package/dist/canvas-backend/composed.js.map +1 -1
- package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
- package/dist/canvas-backend/headerFooter.js +13 -0
- package/dist/canvas-backend/headerFooter.js.map +1 -1
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +53 -24
- 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/comics/frames.d.ts +82 -0
- package/dist/comics/frames.d.ts.map +1 -0
- package/dist/comics/frames.js +182 -0
- package/dist/comics/frames.js.map +1 -0
- package/dist/comics/index.d.ts +4 -1
- package/dist/comics/index.d.ts.map +1 -1
- package/dist/comics/index.js +3 -1
- package/dist/comics/index.js.map +1 -1
- package/dist/comics/layoutPage.d.ts +9 -0
- package/dist/comics/layoutPage.d.ts.map +1 -1
- package/dist/comics/layoutPage.js +53 -68
- package/dist/comics/layoutPage.js.map +1 -1
- package/dist/comics/page.d.ts.map +1 -1
- package/dist/comics/page.js +10 -1
- package/dist/comics/page.js.map +1 -1
- package/dist/comics/sourceMap.d.ts +60 -0
- package/dist/comics/sourceMap.d.ts.map +1 -0
- package/dist/comics/sourceMap.js +166 -0
- package/dist/comics/sourceMap.js.map +1 -0
- package/dist/comics/spread.d.ts.map +1 -1
- package/dist/comics/spread.js +6 -0
- package/dist/comics/spread.js.map +1 -1
- package/dist/comics/textPanels.d.ts +113 -0
- package/dist/comics/textPanels.d.ts.map +1 -0
- package/dist/comics/textPanels.js +327 -0
- package/dist/comics/textPanels.js.map +1 -0
- package/dist/comics/transform.d.ts +6 -2
- package/dist/comics/transform.d.ts.map +1 -1
- package/dist/comics/transform.js +14 -1
- package/dist/comics/transform.js.map +1 -1
- package/dist/comics/types.d.ts +10 -0
- package/dist/comics/types.d.ts.map +1 -1
- package/dist/composed/continuation.d.ts +152 -0
- package/dist/composed/continuation.d.ts.map +1 -0
- package/dist/composed/continuation.js +189 -0
- package/dist/composed/continuation.js.map +1 -0
- package/dist/composed/groups.d.ts +3 -0
- package/dist/composed/groups.d.ts.map +1 -1
- package/dist/composed/groups.js +34 -4
- package/dist/composed/groups.js.map +1 -1
- 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 +3 -2
- package/dist/composed/pageMemo.d.ts.map +1 -1
- package/dist/composed/pageMemo.js +3 -1
- package/dist/composed/pageMemo.js.map +1 -1
- package/dist/composed/paint.d.ts +28 -3
- package/dist/composed/paint.d.ts.map +1 -1
- package/dist/composed/paint.js +48 -2
- package/dist/composed/paint.js.map +1 -1
- package/dist/composed/reflowLog.d.ts +3 -1
- package/dist/composed/reflowLog.d.ts.map +1 -1
- package/dist/composed/reflowLog.js +20 -6
- package/dist/composed/reflowLog.js.map +1 -1
- package/dist/composed/rules.d.ts +31 -0
- package/dist/composed/rules.d.ts.map +1 -0
- package/dist/composed/rules.js +45 -0
- package/dist/composed/rules.js.map +1 -0
- package/dist/composed/slotChecks.d.ts +2 -1
- package/dist/composed/slotChecks.d.ts.map +1 -1
- package/dist/composed/slotChecks.js +56 -2
- package/dist/composed/slotChecks.js.map +1 -1
- package/dist/composed/sourceMap.d.ts +0 -21
- package/dist/composed/sourceMap.d.ts.map +1 -1
- package/dist/composed/sourceMap.js +102 -8
- package/dist/composed/sourceMap.js.map +1 -1
- package/dist/composed/spread.d.ts +23 -5
- package/dist/composed/spread.d.ts.map +1 -1
- package/dist/composed/spread.js +52 -27
- package/dist/composed/spread.js.map +1 -1
- package/dist/composed/templates.d.ts +11 -0
- package/dist/composed/templates.d.ts.map +1 -1
- package/dist/composed/templates.js +51 -2
- package/dist/composed/templates.js.map +1 -1
- package/dist/composed/types.d.ts +43 -3
- package/dist/composed/types.d.ts.map +1 -1
- package/dist/composed/validate.d.ts.map +1 -1
- package/dist/composed/validate.js +5 -3
- package/dist/composed/validate.js.map +1 -1
- package/dist/configWarnings.d.ts +15 -0
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +40 -18
- package/dist/configWarnings.js.map +1 -1
- 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/headerFooter.d.ts.map +1 -1
- package/dist/defaults/headerFooter.js +4 -0
- package/dist/defaults/headerFooter.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/defaults/resourceTypes.d.ts +15 -0
- package/dist/defaults/resourceTypes.d.ts.map +1 -1
- package/dist/defaults/resourceTypes.js +39 -1
- package/dist/defaults/resourceTypes.js.map +1 -1
- package/dist/design/layout.d.ts +7 -0
- package/dist/design/layout.d.ts.map +1 -1
- package/dist/design/layout.js +109 -16
- package/dist/design/layout.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 +83 -7
- package/dist/html-backend.js.map +1 -1
- package/dist/htmlComic.d.ts +3 -0
- package/dist/htmlComic.d.ts.map +1 -1
- package/dist/htmlComic.js +2 -0
- package/dist/htmlComic.js.map +1 -1
- package/dist/index.d.ts +12 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.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 +152 -0
- package/dist/migrate/pageDesign.d.ts.map +1 -0
- package/dist/migrate/pageDesign.js +573 -0
- package/dist/migrate/pageDesign.js.map +1 -0
- package/dist/migrate/textToMarkdown.d.ts +156 -0
- package/dist/migrate/textToMarkdown.d.ts.map +1 -0
- package/dist/migrate/textToMarkdown.js +913 -0
- package/dist/migrate/textToMarkdown.js.map +1 -0
- package/dist/parse/blockParser.js +26 -0
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +388 -41
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
- package/dist/pipeline/buildMeasurement.js +12 -1
- package/dist/pipeline/buildMeasurement.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts +25 -1
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +100 -2
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/composedLayout.d.ts +16 -2
- package/dist/pipeline/composedLayout.d.ts.map +1 -1
- package/dist/pipeline/composedLayout.js +337 -70
- 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 +106 -1
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/dropCap.d.ts +5 -0
- package/dist/pipeline/dropCap.d.ts.map +1 -1
- package/dist/pipeline/dropCap.js +23 -2
- package/dist/pipeline/dropCap.js.map +1 -1
- package/dist/pipeline/frameLayout.d.ts +21 -3
- package/dist/pipeline/frameLayout.d.ts.map +1 -1
- package/dist/pipeline/frameLayout.js +52 -4
- package/dist/pipeline/frameLayout.js.map +1 -1
- package/dist/pipeline/headerFooter.d.ts +11 -1
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +210 -68
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/measureContentBlock.d.ts +1 -1
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +4 -1
- 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/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/resourceNumbering.d.ts.map +1 -1
- package/dist/pipeline/resourceNumbering.js +13 -4
- package/dist/pipeline/resourceNumbering.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/preflight.js +5 -1
- package/dist/preflight.js.map +1 -1
- package/dist/types.d.ts +45 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +228 -9
- 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,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One page model (#885, DESIGN §7): a comic page's `split` is a shorthand
|
|
3
|
+
* that generates frames. Each cell of the split tree (after its panel's
|
|
4
|
+
* `pad`) is a frame, and so is each `inset` panel (laid over the frame
|
|
5
|
+
* before it, one layer up); the frame holds the panel (its art, border and
|
|
6
|
+
* background) and, for a text panel (`::panel{text}`), the Markdown its
|
|
7
|
+
* body pours into it. The lettering stays positioned by the comics code,
|
|
8
|
+
* panel by panel, as before.
|
|
9
|
+
*
|
|
10
|
+
* The frames are those of a composed page (`VDTFrame`) with what a cut of
|
|
11
|
+
* the split needs besides: a `polygon` when a slanted line cuts the cell,
|
|
12
|
+
* and `panel`, the index of the panel the frame holds. Ids follow the
|
|
13
|
+
* composed pages' rule (#857): built from the comic fence's ordinal in its
|
|
14
|
+
* chapter and the names the Markdown gives (`cm<n>:<name>`, a panel's
|
|
15
|
+
* `id`, else `p<k>`), never from the layout, so they are the same in every
|
|
16
|
+
* locale and across relayouts.
|
|
17
|
+
*/
|
|
18
|
+
import { clipPolygon, polygonBBox } from './geometry';
|
|
19
|
+
/** A comic (page, spread or strip): `cm<n>`, `n` the ordinal of its fence
|
|
20
|
+
* among the comic fences of its chapter. */
|
|
21
|
+
export function comicElementId(fenceIndex) {
|
|
22
|
+
return `cm${fenceIndex}`;
|
|
23
|
+
}
|
|
24
|
+
/** A frame of a comic: `cm<n>:<name>`. */
|
|
25
|
+
export function comicFrameElementId(fenceIndex, name) {
|
|
26
|
+
return `cm${fenceIndex}:${name}`;
|
|
27
|
+
}
|
|
28
|
+
/** A balloon, caption or sound effect of a panel: `<frame id>:b<order>`,
|
|
29
|
+
* `order` its line's place in the panel's script. */
|
|
30
|
+
export function comicBalloonElementId(frameId, order) {
|
|
31
|
+
return `${frameId}:b${order}`;
|
|
32
|
+
}
|
|
33
|
+
/** The name of the frame of the panel laid `index`-th (0-based): the
|
|
34
|
+
* panel's `id` when it has one no frame before took, else `p<index + 1>`. */
|
|
35
|
+
export function comicFrameName(panel, index, taken) {
|
|
36
|
+
const own = panel?.attrs.id?.trim();
|
|
37
|
+
if (own && !taken.has(own) && !/[\s:]/.test(own))
|
|
38
|
+
return own;
|
|
39
|
+
return `p${index + 1}`;
|
|
40
|
+
}
|
|
41
|
+
/** Whether a panel's body is Markdown text (`::panel{text}`) rather than a
|
|
42
|
+
* lettering script. */
|
|
43
|
+
export function isComicTextPanel(panel) {
|
|
44
|
+
const v = panel?.attrs.text;
|
|
45
|
+
if (v === undefined)
|
|
46
|
+
return false;
|
|
47
|
+
const t = v.trim().toLowerCase();
|
|
48
|
+
return !(t === 'false' || t === 'no' || t === '0' || t === 'none');
|
|
49
|
+
}
|
|
50
|
+
/** The callout style a panel's `box` names (#885), or undefined (unset,
|
|
51
|
+
* or no such style: `comicPanelFrame`, reason `unknownBox`). */
|
|
52
|
+
export function comicBoxStyle(resolved, value) {
|
|
53
|
+
const id = value?.trim();
|
|
54
|
+
if (!id)
|
|
55
|
+
return undefined;
|
|
56
|
+
return resolved.calloutStyles.find((s) => s.id === id);
|
|
57
|
+
}
|
|
58
|
+
/** A cell inset by its panel's `pad`. */
|
|
59
|
+
export function padComicCell(cell, pad) {
|
|
60
|
+
if (!pad || (pad.top === 0 && pad.right === 0 && pad.bottom === 0 && pad.left === 0))
|
|
61
|
+
return cell;
|
|
62
|
+
const b = cell.bbox;
|
|
63
|
+
const x0 = b.x + pad.left;
|
|
64
|
+
const x1 = Math.max(x0, b.x + b.width - pad.right);
|
|
65
|
+
const y0 = b.y + pad.top;
|
|
66
|
+
const y1 = Math.max(y0, b.y + b.height - pad.bottom);
|
|
67
|
+
let poly = cell.polygon;
|
|
68
|
+
poly = clipPolygon(poly, { nx: -1, ny: 0, c: -x0 });
|
|
69
|
+
poly = clipPolygon(poly, { nx: 1, ny: 0, c: x1 });
|
|
70
|
+
poly = clipPolygon(poly, { nx: 0, ny: -1, c: -y0 });
|
|
71
|
+
poly = clipPolygon(poly, { nx: 0, ny: 1, c: y1 });
|
|
72
|
+
return { polygon: poly, bbox: polygonBBox(poly), rect: cell.rect };
|
|
73
|
+
}
|
|
74
|
+
/** `inset="x y w h"`: percentages (or fractions) of the previous panel's
|
|
75
|
+
* box. */
|
|
76
|
+
export function comicInsetBox(value, of) {
|
|
77
|
+
if (!value)
|
|
78
|
+
return undefined;
|
|
79
|
+
const parts = value.trim().split(/[\s,]+/).map((p) => Number(p.replace('%', '')));
|
|
80
|
+
if (parts.length !== 4 || parts.some((n) => !Number.isFinite(n)))
|
|
81
|
+
return undefined;
|
|
82
|
+
const fractions = !value.includes('%') && parts.every((n) => n <= 1);
|
|
83
|
+
const [x, y, w, h] = parts.map((n) => (fractions ? n : n / 100));
|
|
84
|
+
if (w <= 0 || h <= 0)
|
|
85
|
+
return undefined;
|
|
86
|
+
return { x: of.x + x * of.width, y: of.y + y * of.height, width: w * of.width, height: h * of.height };
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* The frames a split generates, in panel order: the cells of the split tree
|
|
90
|
+
* in reading order, each taking the next panel that is not an inset (or
|
|
91
|
+
* none), and every inset panel laid over the frame laid before it (the
|
|
92
|
+
* insets that come before a panel in the source follow the frame before
|
|
93
|
+
* that panel). `padOf` gives a panel's `pad` for the box it pads.
|
|
94
|
+
*/
|
|
95
|
+
export function comicFrameSpecs(panels, cells, padOf) {
|
|
96
|
+
const flowPanels = panels.filter((p) => !p.attrs.inset);
|
|
97
|
+
const out = [];
|
|
98
|
+
const taken = new Set();
|
|
99
|
+
const add = (cell, panel, inset) => {
|
|
100
|
+
const padded = padComicCell(cell, padOf(panel, cell.bbox));
|
|
101
|
+
const name = comicFrameName(panel, out.length, taken);
|
|
102
|
+
taken.add(name);
|
|
103
|
+
out.push({ name, polygon: padded.polygon, bbox: padded.bbox, rect: padded.rect, ...(panel ? { panel } : {}), inset, layer: inset ? 2 : 1 });
|
|
104
|
+
};
|
|
105
|
+
const layInset = (p) => {
|
|
106
|
+
const prev = out[out.length - 1];
|
|
107
|
+
const box = prev ? comicInsetBox(p.attrs.inset, prev.bbox) : undefined;
|
|
108
|
+
if (!box)
|
|
109
|
+
return;
|
|
110
|
+
const polygon = [
|
|
111
|
+
{ x: box.x, y: box.y },
|
|
112
|
+
{ x: box.x + box.width, y: box.y },
|
|
113
|
+
{ x: box.x + box.width, y: box.y + box.height },
|
|
114
|
+
{ x: box.x, y: box.y + box.height },
|
|
115
|
+
];
|
|
116
|
+
add({ polygon, bbox: polygonBBox(polygon), rect: true }, p, true);
|
|
117
|
+
};
|
|
118
|
+
let flowIndex = 0;
|
|
119
|
+
const pending = [...panels];
|
|
120
|
+
for (const cell of cells) {
|
|
121
|
+
while (pending.length > 0 && pending[0].attrs.inset)
|
|
122
|
+
layInset(pending.shift());
|
|
123
|
+
const p = flowPanels[flowIndex];
|
|
124
|
+
if (p && pending[0] === p)
|
|
125
|
+
pending.shift();
|
|
126
|
+
flowIndex++;
|
|
127
|
+
add(cell, p, false);
|
|
128
|
+
}
|
|
129
|
+
while (pending.length > 0 && pending[0].attrs.inset)
|
|
130
|
+
layInset(pending.shift());
|
|
131
|
+
return out;
|
|
132
|
+
}
|
|
133
|
+
/** The frame of a laid-out panel: its box and outline, its id and source. */
|
|
134
|
+
export function comicPanelFrame(panel, name, layer) {
|
|
135
|
+
return {
|
|
136
|
+
id: panel.frameId ?? name,
|
|
137
|
+
name,
|
|
138
|
+
rect: { ...panel.bbox },
|
|
139
|
+
rotate: 0,
|
|
140
|
+
layer,
|
|
141
|
+
scale: 1,
|
|
142
|
+
overflowPx: 0,
|
|
143
|
+
blockIds: [],
|
|
144
|
+
configPath: '',
|
|
145
|
+
sourceStart: panel.sourceStart,
|
|
146
|
+
sourceEnd: panel.sourceEnd,
|
|
147
|
+
...(isAxisRect(panel.polygon, panel.bbox) ? {} : { polygon: panel.polygon.map((p) => ({ ...p })) }),
|
|
148
|
+
panel: panel.index,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/** Whether a polygon is its own bounding box. */
|
|
152
|
+
function isAxisRect(poly, box) {
|
|
153
|
+
if (poly.length !== 4)
|
|
154
|
+
return false;
|
|
155
|
+
const eps = 0.01;
|
|
156
|
+
const onX = (x) => Math.abs(x - box.x) < eps || Math.abs(x - box.x - box.width) < eps;
|
|
157
|
+
const onY = (y) => Math.abs(y - box.y) < eps || Math.abs(y - box.y - box.height) < eps;
|
|
158
|
+
return poly.every((p) => onX(p.x) && onY(p.y));
|
|
159
|
+
}
|
|
160
|
+
/** The frames of a comic whose panels were moved or cut (a spread's half,
|
|
161
|
+
* #567): each frame of `whole` whose panel `panels` still holds, on that
|
|
162
|
+
* panel's box and outline; a text frame keeps its blocks. */
|
|
163
|
+
export function comicFramesFor(whole, panels) {
|
|
164
|
+
if (!whole.frames)
|
|
165
|
+
return undefined;
|
|
166
|
+
const byPanel = new Map(whole.frames.map((f) => [f.panel, f]));
|
|
167
|
+
const out = [];
|
|
168
|
+
for (const p of panels) {
|
|
169
|
+
const f = byPanel.get(p.index);
|
|
170
|
+
if (!f)
|
|
171
|
+
continue;
|
|
172
|
+
const g = comicPanelFrame(p, f.name, f.layer);
|
|
173
|
+
const cut = { ...f, rect: g.rect };
|
|
174
|
+
if (g.polygon)
|
|
175
|
+
cut.polygon = g.polygon;
|
|
176
|
+
else
|
|
177
|
+
delete cut.polygon;
|
|
178
|
+
out.push(cut);
|
|
179
|
+
}
|
|
180
|
+
return out;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=frames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/comics/frames.ts"],"names":[],"mappings":"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"}
|
package/dist/comics/index.d.ts
CHANGED
|
@@ -20,7 +20,10 @@ export { layoutComicStrip, comicStripPlacement, comicStripExtent, comicStripAspe
|
|
|
20
20
|
export type { ComicStripPlacement, ComicStripContext, ComicStripAlign } from './strip';
|
|
21
21
|
export { layoutComicSpread, isComicSpread } from './spread';
|
|
22
22
|
export type { ComicSpreadContext, ComicSpreadPage } from './spread';
|
|
23
|
-
export { translateComicPage, translateComicPanel, translateComicSplitter, translateComicBalloon, translateSvgPath, comicBlockOnSheet, pageComics } from './transform';
|
|
23
|
+
export { translateComicPage, translateComicPanel, translateComicSplitter, translateComicBalloon, translateComicFrame, translateSvgPath, comicBlockOnSheet, pageComics } from './transform';
|
|
24
|
+
export { comicElementId, comicFrameElementId, comicBalloonElementId, comicFrameName, isComicTextPanel, comicBoxStyle, comicFrameSpecs } from './frames';
|
|
25
|
+
export type { ComicFrameSpec } from './frames';
|
|
26
|
+
export { comicTextPanelsSupported } from './textPanels';
|
|
24
27
|
export { comicFontFamilies, markdownHasComics } from './fonts';
|
|
25
28
|
export { COMIC_RESERVED_KEYS } from './types';
|
|
26
29
|
export type { ComicPageSource, ComicPanelSource, ComicScriptItem, ComicScriptRole, ComicSourceRange, ComicTailSide } from './types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/comics/index.ts"],"names":[],"mappings":"AAAA;2DAC2D;AAC3D,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACjJ,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC9E,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtF,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/G,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAC9H,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACtO,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACtF,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtJ,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACrN,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/comics/index.ts"],"names":[],"mappings":"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"}
|
package/dist/comics/index.js
CHANGED
|
@@ -11,7 +11,9 @@ export { comicSourceWarnings } from './warnings';
|
|
|
11
11
|
export { layoutComicFrame, comicPageFrame } from './layoutPage';
|
|
12
12
|
export { layoutComicStrip, comicStripPlacement, comicStripExtent, comicStripAspect, comicSplitGrid, parseComicAspect, parseComicStripWidth, parseComicStripAlign, comicStripWidth, comicStripOffset } from './strip';
|
|
13
13
|
export { layoutComicSpread, isComicSpread } from './spread';
|
|
14
|
-
export { translateComicPage, translateComicPanel, translateComicSplitter, translateComicBalloon, translateSvgPath, comicBlockOnSheet, pageComics } from './transform';
|
|
14
|
+
export { translateComicPage, translateComicPanel, translateComicSplitter, translateComicBalloon, translateComicFrame, translateSvgPath, comicBlockOnSheet, pageComics } from './transform';
|
|
15
|
+
export { comicElementId, comicFrameElementId, comicBalloonElementId, comicFrameName, isComicTextPanel, comicBoxStyle, comicFrameSpecs } from './frames';
|
|
16
|
+
export { comicTextPanelsSupported } from './textPanels';
|
|
15
17
|
export { comicFontFamilies, markdownHasComics } from './fonts';
|
|
16
18
|
export { COMIC_RESERVED_KEYS } from './types';
|
|
17
19
|
export { comicBalloonKind, comicBalloonText, comicSpeakerName, comicBalloonGroups, comicPanelPathData, comicBorderPathData, comicRoughBorder, polygonPathData, comicPanelContinues, isComicSpreadPartner, joinComicSpread, comicBalloonMatrix, } from './paint';
|
package/dist/comics/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/comics/index.ts"],"names":[],"mappings":"AAAA;2DAC2D;AAC3D,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtF,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAE9H,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEtO,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAErN,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/comics/index.ts"],"names":[],"mappings":"AAAA;2DAC2D;AAC3D,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtF,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAE9H,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEtO,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAErN,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3L,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAExJ,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
|
|
@@ -24,6 +24,9 @@ export interface ComicPageContext {
|
|
|
24
24
|
/** Added to every source offset of `source` (the frontmatter's length:
|
|
25
25
|
* VDT offsets are in the whole Markdown). */
|
|
26
26
|
sourceOffset?: number;
|
|
27
|
+
/** The comic fence's ordinal among the comic fences of its chapter
|
|
28
|
+
* (#885): the stable ids of the comic, its frames and balloons. */
|
|
29
|
+
fenceIndex?: number;
|
|
27
30
|
/** Whether this page swaps mirrored margins (a verso of a left-bound
|
|
28
31
|
* book), for `comics.frame.margins` with `mirror`. */
|
|
29
32
|
mirrorMargins?: boolean;
|
|
@@ -70,6 +73,10 @@ export declare function comicPageFrame(ctx: Pick<ComicPageContext, 'resolved' |
|
|
|
70
73
|
/** The warnings the layout of a comic page found (`comicPanelLetterbox`,
|
|
71
74
|
* `comicBalloonOverflow`). */
|
|
72
75
|
export declare function comicPageLayoutWarnings(comic: VDTComicPage): readonly ContentWarning[];
|
|
76
|
+
/** The source of each panel of a comic laid out by {@link layoutComicFrame}
|
|
77
|
+
* (undefined for an empty cell), in panel order. Internal to the comics
|
|
78
|
+
* modules. */
|
|
79
|
+
export declare function comicPanelSources(comic: VDTComicPage): readonly (ComicPanelSource | undefined)[];
|
|
73
80
|
/** Set the layout warnings of a comic laid out in parts (each page of a
|
|
74
81
|
* spread gets those of its panels). Internal to the comics modules. */
|
|
75
82
|
export declare function setComicLayoutWarnings(comic: VDTComicPage, warnings: readonly ContentWarning[]): void;
|
|
@@ -143,6 +150,8 @@ export interface ComicFrameContext {
|
|
|
143
150
|
/** Added to every source offset of `source` (see
|
|
144
151
|
* {@link ComicPageContext.sourceOffset}). */
|
|
145
152
|
sourceOffset?: number;
|
|
153
|
+
/** See {@link ComicPageContext.fenceIndex}. */
|
|
154
|
+
fenceIndex?: number;
|
|
146
155
|
/** The page the warnings are reported on. */
|
|
147
156
|
pageIndex: number;
|
|
148
157
|
/** Regions no balloon should cover, besides those of the pictures (the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layoutPage.d.ts","sourceRoot":"","sources":["../../src/comics/layoutPage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,EAAE,oBAAoB,EAA4B,MAAM,UAAU,CAAC;AACpK,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAe,eAAe,EAAE,YAAY,EAAE,aAAa,EAAoB,OAAO,EAAY,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"layoutPage.d.ts","sourceRoot":"","sources":["../../src/comics/layoutPage.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,8 @@ import { dimensionToPx } from '../units';
|
|
|
14
14
|
import { chineseScriptOf, directionOf, isCjkLanguage, isJapaneseLanguage, presentTag } from '../locale';
|
|
15
15
|
import { comicReadingDirection, DEFAULT_LETTERING_STATIC, pickBalloonStyle, pickPanelStyle, resolvedComics } from '../defaults/comics';
|
|
16
16
|
import { comicArtCrop, comicArtPointToPage, comicArtRectToPage } from './art';
|
|
17
|
-
import {
|
|
17
|
+
import { comicGeometry, physicalSide, pointInPolygon } from './geometry';
|
|
18
|
+
import { comicBalloonElementId, comicBoxStyle, comicElementId, comicFrameElementId, comicFrameSpecs, comicPanelFrame, isComicTextPanel } from './frames';
|
|
18
19
|
import { parseComicPoint } from './script';
|
|
19
20
|
import { letterPanelDetailed } from './lettering/letter';
|
|
20
21
|
/** The leaf a comic page is laid out on when the page is not one
|
|
@@ -152,20 +153,6 @@ function pictureOf(resources, id) {
|
|
|
152
153
|
return { resource: r, kind: 'svg', fileId: r.svg.fileId, width: r.svg.width ?? 0, height: r.svg.height ?? 0 };
|
|
153
154
|
return undefined;
|
|
154
155
|
}
|
|
155
|
-
/** `inset="x y w h"`: percentages (or fractions) of the previous panel's
|
|
156
|
-
* box. */
|
|
157
|
-
function insetBox(value, of) {
|
|
158
|
-
if (!value)
|
|
159
|
-
return undefined;
|
|
160
|
-
const parts = value.trim().split(/[\s,]+/).map((p) => Number(p.replace('%', '')));
|
|
161
|
-
if (parts.length !== 4 || parts.some((n) => !Number.isFinite(n)))
|
|
162
|
-
return undefined;
|
|
163
|
-
const fractions = !value.includes('%') && parts.every((n) => n <= 1);
|
|
164
|
-
const [x, y, w, h] = parts.map((n) => (fractions ? n : n / 100));
|
|
165
|
-
if (w <= 0 || h <= 0)
|
|
166
|
-
return undefined;
|
|
167
|
-
return { x: of.x + x * of.width, y: of.y + y * of.height, width: w * of.width, height: h * of.height };
|
|
168
|
-
}
|
|
169
156
|
/** The frame of a page: the content area on the sheet, or the trim inset
|
|
170
157
|
* by `comics.frame.margins`. */
|
|
171
158
|
export function comicPageFrame(ctx, comics = resolvedComics(ctx.resolved)) {
|
|
@@ -202,6 +189,15 @@ const layoutWarnings = new WeakMap();
|
|
|
202
189
|
export function comicPageLayoutWarnings(comic) {
|
|
203
190
|
return layoutWarnings.get(comic) ?? [];
|
|
204
191
|
}
|
|
192
|
+
/** The script (or text) each laid-out panel of a comic was set from, by
|
|
193
|
+
* the comic laid out (#885): what fills a text panel's frame. */
|
|
194
|
+
const panelSourcesOf = new WeakMap();
|
|
195
|
+
/** The source of each panel of a comic laid out by {@link layoutComicFrame}
|
|
196
|
+
* (undefined for an empty cell), in panel order. Internal to the comics
|
|
197
|
+
* modules. */
|
|
198
|
+
export function comicPanelSources(comic) {
|
|
199
|
+
return panelSourcesOf.get(comic) ?? [];
|
|
200
|
+
}
|
|
205
201
|
/** Set the layout warnings of a comic laid out in parts (each page of a
|
|
206
202
|
* spread gets those of its panels). Internal to the comics modules. */
|
|
207
203
|
export function setComicLayoutWarnings(comic, warnings) {
|
|
@@ -629,6 +625,7 @@ export function layoutComicPage(source, given) {
|
|
|
629
625
|
trimBox: ctx.trimBox,
|
|
630
626
|
resources: ctx.resources,
|
|
631
627
|
...(ctx.sourceOffset !== undefined ? { sourceOffset: ctx.sourceOffset } : {}),
|
|
628
|
+
...(ctx.fenceIndex !== undefined ? { fenceIndex: ctx.fenceIndex } : {}),
|
|
632
629
|
pageIndex: ctx.page.index,
|
|
633
630
|
});
|
|
634
631
|
if (leaf)
|
|
@@ -659,23 +656,39 @@ export function layoutComicFrame(source, ctx) {
|
|
|
659
656
|
const panels = [];
|
|
660
657
|
const panelSources = [];
|
|
661
658
|
const mirrorDefault = comics.mirrorArt && direction !== comics.artDirection;
|
|
662
|
-
|
|
659
|
+
// The split generates the frames (#885): one per cell (its panel's
|
|
660
|
+
// `pad` taken off), and one per inset panel over the frame before it.
|
|
661
|
+
const specs = comicFrameSpecs(source.panels, geometry.cells, (p, box) => comicPanelPadding(p?.attrs.pad, box, direction, dpi));
|
|
662
|
+
const fence = ctx.fenceIndex ?? source.fenceIndex;
|
|
663
|
+
const buildPanel = (cell) => {
|
|
664
|
+
const p = cell.panel;
|
|
663
665
|
const style = styleOf(p);
|
|
664
666
|
const attrs = p?.attrs ?? {};
|
|
665
|
-
|
|
667
|
+
// A callout style named by `box` (#885) dresses the panel: its
|
|
668
|
+
// background, border and corner radius over the panel style's (the
|
|
669
|
+
// panel's own `border` and `bg` still win). A text panel's box is drawn
|
|
670
|
+
// by its frame, round its text: the panel then draws none.
|
|
671
|
+
const box = comicBoxStyle(resolved, attrs.box);
|
|
672
|
+
const boxDraws = box !== undefined && isComicTextPanel(p);
|
|
666
673
|
const border = attrs.border?.trim();
|
|
667
|
-
const
|
|
668
|
-
const
|
|
674
|
+
const boxBorder = box ? (box.border.enabled ? dimensionToPx(box.border.width, dpi) : 0) : undefined;
|
|
675
|
+
const borderWidth = boxDraws ? 0
|
|
676
|
+
: border === 'none' ? 0 : border ? dimensionToPx(parseComicDimension(border) ?? style.borderWidth, dpi) : boxBorder ?? dimensionToPx(style.borderWidth, dpi);
|
|
677
|
+
const bg = boxDraws ? undefined
|
|
678
|
+
: attrColor(attrs.bg, resolved.colorPalette) ?? (box ? (box.backgroundEnabled ? box.background.hex : 'transparent') : style.background.hex);
|
|
679
|
+
const borderColor = box && !border ? box.border.color.hex : style.borderColor.hex;
|
|
680
|
+
const radiusPx = dimensionToPx(box ? box.borderRadius : style.borderRadius, dpi);
|
|
669
681
|
const index = panels.length;
|
|
670
682
|
const panel = {
|
|
671
683
|
index,
|
|
672
684
|
...(attrs.id ? { id: attrs.id } : {}),
|
|
685
|
+
...(fence !== undefined ? { frameId: comicFrameElementId(fence, cell.name) } : {}),
|
|
673
686
|
sourceStart: (p?.sourceStart ?? source.sourceStart) + off,
|
|
674
687
|
sourceEnd: (p?.sourceEnd ?? source.sourceStart) + off,
|
|
675
688
|
polygon: cell.polygon,
|
|
676
689
|
bbox: cell.bbox,
|
|
677
|
-
radius: cell.rect ? Math.min(
|
|
678
|
-
border: { width: borderWidth, color:
|
|
690
|
+
radius: cell.rect ? Math.min(radiusPx, cell.bbox.width / 2, cell.bbox.height / 2) : 0,
|
|
691
|
+
border: { width: borderWidth, color: borderColor, style: borderWidth > 0 ? (box && !border ? 'solid' : style.borderStyle) : 'none' },
|
|
679
692
|
...(bg && bg !== 'transparent' ? { background: bg } : {}),
|
|
680
693
|
};
|
|
681
694
|
const fit = attrs.fit === 'contain' || attrs.fit === 'cover' ? attrs.fit : style.fit;
|
|
@@ -704,37 +717,11 @@ export function layoutComicFrame(source, ctx) {
|
|
|
704
717
|
panel.altText = alt;
|
|
705
718
|
return panel;
|
|
706
719
|
};
|
|
707
|
-
//
|
|
708
|
-
// panel before them.
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
// Inset panels that come before the next flow panel follow the panel
|
|
713
|
-
// laid out last.
|
|
714
|
-
while (pending.length > 0 && pending[0].attrs.inset)
|
|
715
|
-
layInset(pending.shift());
|
|
716
|
-
const p = flowPanels[flowIndex];
|
|
717
|
-
if (p && pending[0] === p)
|
|
718
|
-
pending.shift();
|
|
719
|
-
flowIndex++;
|
|
720
|
-
panels.push(buildPanel(cell, p));
|
|
721
|
-
panelSources.push(p);
|
|
722
|
-
}
|
|
723
|
-
while (pending.length > 0 && pending[0].attrs.inset)
|
|
724
|
-
layInset(pending.shift());
|
|
725
|
-
function layInset(p) {
|
|
726
|
-
const prev = panels[panels.length - 1];
|
|
727
|
-
const box = prev ? insetBox(p.attrs.inset, prev.bbox) : undefined;
|
|
728
|
-
if (!box)
|
|
729
|
-
return;
|
|
730
|
-
const polygon = [
|
|
731
|
-
{ x: box.x, y: box.y },
|
|
732
|
-
{ x: box.x + box.width, y: box.y },
|
|
733
|
-
{ x: box.x + box.width, y: box.y + box.height },
|
|
734
|
-
{ x: box.x, y: box.y + box.height },
|
|
735
|
-
];
|
|
736
|
-
panels.push(buildPanel({ polygon, bbox: polygonBBox(polygon), rect: true }, p));
|
|
737
|
-
panelSources.push(p);
|
|
720
|
+
// Each frame holds its panel: cells take the flow panels in reading
|
|
721
|
+
// order, inset panels sit over the panel before them.
|
|
722
|
+
for (const spec of specs) {
|
|
723
|
+
panels.push(buildPanel(spec));
|
|
724
|
+
panelSources.push(spec.panel);
|
|
738
725
|
}
|
|
739
726
|
const splitRange = source.attrSources.split;
|
|
740
727
|
const valueStart = (splitRange?.start ?? source.attrsEnd) + off;
|
|
@@ -751,27 +738,25 @@ export function layoutComicFrame(source, ctx) {
|
|
|
751
738
|
};
|
|
752
739
|
const lettered = letterPanels({ source, panels, panelSources, comics, resolved, resources, direction, sourceOffset: off, pageIndex: ctx.pageIndex, frame, bleedBox: ctx.bleedBox, ...(ctx.trimBox ? { trim: ctx.trimBox } : {}), ...(ctx.avoid ? { avoid: ctx.avoid } : {}) });
|
|
753
740
|
comic.balloons = lettered.balloons;
|
|
741
|
+
if (fence !== undefined) {
|
|
742
|
+
comic.id = comicElementId(fence);
|
|
743
|
+
comic.frames = panels.map((panel, i) => {
|
|
744
|
+
const f = comicPanelFrame(panel, specs[i].name, specs[i].layer);
|
|
745
|
+
const box = comicBoxStyle(resolved, specs[i].panel?.attrs.box);
|
|
746
|
+
return box ? { ...f, styleId: box.id } : f;
|
|
747
|
+
});
|
|
748
|
+
for (const b of comic.balloons) {
|
|
749
|
+
const owner = panels[b.panelIndex];
|
|
750
|
+
if (owner?.frameId)
|
|
751
|
+
b.elementId = comicBalloonElementId(owner.frameId, b.order);
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
754
|
warnings.push(...lettered.warnings);
|
|
755
755
|
if (warnings.length > 0)
|
|
756
756
|
layoutWarnings.set(comic, warnings);
|
|
757
|
+
panelSourcesOf.set(comic, panelSources);
|
|
757
758
|
return comic;
|
|
758
759
|
}
|
|
759
|
-
/** A cell inset by its panel's `pad`. */
|
|
760
|
-
function padCell(cell, pad) {
|
|
761
|
-
if (!pad || (pad.top === 0 && pad.right === 0 && pad.bottom === 0 && pad.left === 0))
|
|
762
|
-
return cell;
|
|
763
|
-
const b = cell.bbox;
|
|
764
|
-
const x0 = b.x + pad.left;
|
|
765
|
-
const x1 = Math.max(x0, b.x + b.width - pad.right);
|
|
766
|
-
const y0 = b.y + pad.top;
|
|
767
|
-
const y1 = Math.max(y0, b.y + b.height - pad.bottom);
|
|
768
|
-
let poly = cell.polygon;
|
|
769
|
-
poly = clipPolygon(poly, { nx: -1, ny: 0, c: -x0 });
|
|
770
|
-
poly = clipPolygon(poly, { nx: 1, ny: 0, c: x1 });
|
|
771
|
-
poly = clipPolygon(poly, { nx: 0, ny: -1, c: -y0 });
|
|
772
|
-
poly = clipPolygon(poly, { nx: 0, ny: 1, c: y1 });
|
|
773
|
-
return { polygon: poly, bbox: polygonBBox(poly), rect: cell.rect };
|
|
774
|
-
}
|
|
775
760
|
function artOf(art, crop, mirrored) {
|
|
776
761
|
return {
|
|
777
762
|
resourceId: art.resource.id,
|