postext 1.39.0 → 1.40.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.js +0 -8
- package/dist/__tests__/comics/frames.test.js.map +1 -1
- package/dist/__tests__/comics/textPanelsStripsSpreads.test.d.ts +2 -0
- package/dist/__tests__/comics/textPanelsStripsSpreads.test.d.ts.map +1 -0
- package/dist/__tests__/comics/textPanelsStripsSpreads.test.js +277 -0
- package/dist/__tests__/comics/textPanelsStripsSpreads.test.js.map +1 -0
- package/dist/__tests__/composed/fit.test.js +77 -0
- package/dist/__tests__/composed/fit.test.js.map +1 -1
- package/dist/__tests__/composed/frameModesChain.test.d.ts +2 -0
- package/dist/__tests__/composed/frameModesChain.test.d.ts.map +1 -0
- package/dist/__tests__/composed/frameModesChain.test.js +69 -0
- package/dist/__tests__/composed/frameModesChain.test.js.map +1 -0
- package/dist/__tests__/composed/framePictures.test.d.ts +2 -0
- package/dist/__tests__/composed/framePictures.test.d.ts.map +1 -0
- package/dist/__tests__/composed/framePictures.test.js +121 -0
- package/dist/__tests__/composed/framePictures.test.js.map +1 -0
- package/dist/__tests__/composed/frameWritingMode.test.js +79 -3
- package/dist/__tests__/composed/frameWritingMode.test.js.map +1 -1
- package/dist/__tests__/composed/labels.test.js +19 -0
- package/dist/__tests__/composed/labels.test.js.map +1 -1
- package/dist/__tests__/composed/labelsMirrored.test.d.ts +2 -0
- package/dist/__tests__/composed/labelsMirrored.test.d.ts.map +1 -0
- package/dist/__tests__/composed/labelsMirrored.test.js +128 -0
- package/dist/__tests__/composed/labelsMirrored.test.js.map +1 -0
- package/dist/__tests__/composed/measureMemo.test.d.ts +2 -0
- package/dist/__tests__/composed/measureMemo.test.d.ts.map +1 -0
- package/dist/__tests__/composed/measureMemo.test.js +45 -0
- package/dist/__tests__/composed/measureMemo.test.js.map +1 -0
- package/dist/__tests__/composedTemplates.test.js +5 -2
- package/dist/__tests__/composedTemplates.test.js.map +1 -1
- package/dist/__tests__/exports.test.js +3 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/migrate/labelsOnPictures.test.js +49 -1
- package/dist/__tests__/migrate/labelsOnPictures.test.js.map +1 -1
- package/dist/canvas-backend/composed.d.ts +2 -2
- package/dist/canvas-backend/composed.d.ts.map +1 -1
- package/dist/canvas-backend/composed.js +11 -2
- 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 +10 -1
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/canvas-backend/mirrorFrame.d.ts +19 -0
- package/dist/canvas-backend/mirrorFrame.d.ts.map +1 -1
- package/dist/canvas-backend/mirrorFrame.js +47 -0
- package/dist/canvas-backend/mirrorFrame.js.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.js +35 -26
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/comics/frames.d.ts +5 -0
- package/dist/comics/frames.d.ts.map +1 -1
- package/dist/comics/frames.js +7 -0
- package/dist/comics/frames.js.map +1 -1
- package/dist/comics/layoutPage.d.ts +5 -0
- package/dist/comics/layoutPage.d.ts.map +1 -1
- package/dist/comics/layoutPage.js +9 -0
- package/dist/comics/layoutPage.js.map +1 -1
- package/dist/comics/sourceMap.d.ts.map +1 -1
- package/dist/comics/sourceMap.js +6 -4
- package/dist/comics/sourceMap.js.map +1 -1
- package/dist/comics/spread.d.ts +6 -1
- package/dist/comics/spread.d.ts.map +1 -1
- package/dist/comics/spread.js +15 -1
- package/dist/comics/spread.js.map +1 -1
- package/dist/comics/textPanels.d.ts +30 -6
- package/dist/comics/textPanels.d.ts.map +1 -1
- package/dist/comics/textPanels.js +226 -69
- package/dist/comics/textPanels.js.map +1 -1
- package/dist/comics/transform.d.ts.map +1 -1
- package/dist/comics/transform.js +4 -2
- package/dist/comics/transform.js.map +1 -1
- package/dist/composed/labels.d.ts +9 -0
- package/dist/composed/labels.d.ts.map +1 -1
- package/dist/composed/labels.js +36 -4
- package/dist/composed/labels.js.map +1 -1
- package/dist/composed/paint.d.ts +10 -6
- package/dist/composed/paint.d.ts.map +1 -1
- package/dist/composed/paint.js +38 -7
- package/dist/composed/paint.js.map +1 -1
- package/dist/composed/sourceMap.d.ts.map +1 -1
- package/dist/composed/sourceMap.js +7 -1
- package/dist/composed/sourceMap.js.map +1 -1
- package/dist/composed/templates.d.ts.map +1 -1
- package/dist/composed/templates.js +9 -4
- package/dist/composed/templates.js.map +1 -1
- package/dist/composed/types.d.ts +9 -4
- package/dist/composed/types.d.ts.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +36 -14
- package/dist/html-backend.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/migrate/pageDesign.d.ts +6 -1
- package/dist/migrate/pageDesign.d.ts.map +1 -1
- package/dist/migrate/pageDesign.js +26 -10
- package/dist/migrate/pageDesign.js.map +1 -1
- package/dist/migrate/textToMarkdown.js +4 -3
- package/dist/migrate/textToMarkdown.js.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +67 -10
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts +11 -0
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +20 -1
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/composedLayout.d.ts.map +1 -1
- package/dist/pipeline/composedLayout.js +103 -24
- package/dist/pipeline/composedLayout.js.map +1 -1
- package/dist/pipeline/frameLayout.d.ts +5 -1
- package/dist/pipeline/frameLayout.d.ts.map +1 -1
- package/dist/pipeline/frameLayout.js +1 -0
- package/dist/pipeline/frameLayout.js.map +1 -1
- package/dist/pipeline/measureMemo.d.ts +39 -0
- package/dist/pipeline/measureMemo.d.ts.map +1 -0
- package/dist/pipeline/measureMemo.js +61 -0
- package/dist/pipeline/measureMemo.js.map +1 -0
- package/dist/pipeline/mirrorFrame.d.ts +2 -1
- package/dist/pipeline/mirrorFrame.d.ts.map +1 -1
- package/dist/pipeline/mirrorFrame.js +31 -5
- package/dist/pipeline/mirrorFrame.js.map +1 -1
- package/dist/vdt.d.ts +17 -0
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js.map +1 -1
- package/package.json +1 -1
package/dist/comics/spread.d.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* the right page's sheet set against it so that the two trim boxes meet at
|
|
11
11
|
* the spine.
|
|
12
12
|
*/
|
|
13
|
-
import type { ResolvedConfig, VDTComicPage } from '../vdt';
|
|
13
|
+
import type { BoundingBox, ResolvedConfig, VDTComicPage } from '../vdt';
|
|
14
14
|
import type { Resource } from '../types';
|
|
15
15
|
import { type ComicPageContext } from './layoutPage';
|
|
16
16
|
import type { ComicPageSource } from './types';
|
|
@@ -26,6 +26,11 @@ export interface ComicSpreadContext {
|
|
|
26
26
|
left: ComicSpreadPage;
|
|
27
27
|
right: ComicSpreadPage;
|
|
28
28
|
}
|
|
29
|
+
/** The band about the spine that lettering and text keep out of, on a
|
|
30
|
+
* half of a spread laid out by {@link layoutComicSpread} (the half of a
|
|
31
|
+
* gutter 8 mm wide that lies on its sheet, sheet px); undefined for
|
|
32
|
+
* anything else. */
|
|
33
|
+
export declare function comicSpreadGutter(comic: Pick<VDTComicPage, 'spread' | 'frame'>, dpi: number, sheetHeight: number): BoundingBox | undefined;
|
|
29
34
|
/**
|
|
30
35
|
* Lay out a spread over two facing pages: `[left, right]`, each on its own
|
|
31
36
|
* sheet. Reading direction, gutters, panel styles and bleed work as on a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spread.d.ts","sourceRoot":"","sources":["../../src/comics/spread.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"spread.d.ts","sourceRoot":"","sources":["../../src/comics/spread.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAA6C,MAAM,QAAQ,CAAC;AACnH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAA6H,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIhL,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAMtF;AAED,uDAAuD;AACvD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,eAAe,GAAG,YAAY,CAAC,CAAC;AAEvH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;;qBAGqB;AACrB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAO1I;AA0CD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,kBAAkB,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAsGlH"}
|
package/dist/comics/spread.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* the spine.
|
|
12
12
|
*/
|
|
13
13
|
import { clipPolygon, polygonBBox } from './geometry';
|
|
14
|
-
import { comicPageFrame, comicPageLayoutWarnings, comicViewerLeaf, layoutComicFrame, setComicLayoutWarnings } from './layoutPage';
|
|
14
|
+
import { comicPageFrame, comicPageLayoutWarnings, comicViewerLeaf, copyComicPanelSources, layoutComicFrame, setComicLayoutWarnings } from './layoutPage';
|
|
15
15
|
import { resolvedComics } from '../defaults/comics';
|
|
16
16
|
import { translateComicBalloon, translateComicPanel, translateComicSplitter } from './transform';
|
|
17
17
|
import { comicFramesFor } from './frames';
|
|
@@ -25,6 +25,19 @@ export function isComicSpread(source) {
|
|
|
25
25
|
const t = v.trim().toLowerCase();
|
|
26
26
|
return !(t === 'false' || t === 'no' || t === '0' || t === 'none');
|
|
27
27
|
}
|
|
28
|
+
/** The band about the spine that lettering and text keep out of, on a
|
|
29
|
+
* half of a spread laid out by {@link layoutComicSpread} (the half of a
|
|
30
|
+
* gutter 8 mm wide that lies on its sheet, sheet px); undefined for
|
|
31
|
+
* anything else. */
|
|
32
|
+
export function comicSpreadGutter(comic, dpi, sheetHeight) {
|
|
33
|
+
if (!comic.spread)
|
|
34
|
+
return undefined;
|
|
35
|
+
const half = (4 / 25.4) * dpi;
|
|
36
|
+
const reach = half + 2 * SPINE_OVERRUN;
|
|
37
|
+
return comic.spread === 'left'
|
|
38
|
+
? { x: comic.frame.x + comic.frame.width - half, y: 0, width: reach, height: sheetHeight }
|
|
39
|
+
: { x: comic.frame.x - 2 * SPINE_OVERRUN, y: 0, width: reach, height: sheetHeight };
|
|
40
|
+
}
|
|
28
41
|
/** Past the sheet's edge at the spine: a panel crossing the spine is cut
|
|
29
42
|
* this far beyond the sheet, so its border is never stroked along the
|
|
30
43
|
* spine and its picture runs into the gutter bleed. */
|
|
@@ -162,6 +175,7 @@ export function layoutComicSpread(source, given) {
|
|
|
162
175
|
balloons,
|
|
163
176
|
...(whole.id ? { id: whole.id } : {}),
|
|
164
177
|
};
|
|
178
|
+
copyComicPanelSources(whole, comic);
|
|
165
179
|
// The frames of the panels the page shows, cut and moved as they are.
|
|
166
180
|
const frames = comicFramesFor(whole, panels);
|
|
167
181
|
if (frames)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spread.js","sourceRoot":"","sources":["../../src/comics/spread.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spread.js","sourceRoot":"","sources":["../../src/comics/spread.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,14 +10,15 @@
|
|
|
10
10
|
* in its panel's frame with the composed pages' frame layout
|
|
11
11
|
* (`layoutComposedPage`, one frame filling the panel's text area), so a
|
|
12
12
|
* text panel has real paragraphs: selectable, searchable, read in order by
|
|
13
|
-
* tagged PDF and EPUB.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* tagged PDF and EPUB. A strip's text frames are laid once the strip has
|
|
14
|
+
* its place on the page ({@link layoutStripTextFrames}), a spread's on its
|
|
15
|
+
* two pages; a comic inside a container keeps its text in the flow after
|
|
16
|
+
* the comic, never lost.
|
|
17
17
|
*/
|
|
18
18
|
import type { ContentBlock } from '../parse/types';
|
|
19
19
|
import type { ResolvedCalloutStyleConfig } from '../types';
|
|
20
20
|
import type { ContentWarning, ResolvedConfig, VDTBlock, VDTComicPage, VDTPage } from '../vdt';
|
|
21
|
+
import { type BoundingBox } from '../vdt';
|
|
21
22
|
import type { ResolvedFrame } from '../composed/types';
|
|
22
23
|
import type { BoxExclusion, PlannedCallout } from '../pipeline/calloutLayout';
|
|
23
24
|
import type { FrameLayoutPass } from '../pipeline/frameLayout';
|
|
@@ -36,8 +37,10 @@ export declare const comicTextStoryKey: (panelIndex: number) => string;
|
|
|
36
37
|
* vertical page). Kept for the callers that ask. */
|
|
37
38
|
export declare function comicTextPanelsSupported(resolved?: Pick<ResolvedConfig, 'layout'> & Parameters<typeof resolvedDirection>[0]): boolean;
|
|
38
39
|
/** Why a text panel's Markdown is set in the flow instead of its frame:
|
|
39
|
-
*
|
|
40
|
-
*
|
|
40
|
+
* never since postext 1.40 (#959: strips and spreads take their text in
|
|
41
|
+
* the frames too); `'flow'` only for a caller that passes `supported`
|
|
42
|
+
* false. Undefined when its frame takes it. Kept for the callers that
|
|
43
|
+
* ask; `source` is read no more. */
|
|
41
44
|
export declare function comicTextPanelFallback(source: Pick<ComicPageSource, 'kind' | 'attrs'>, supported: boolean): 'strip' | 'spread' | 'flow' | undefined;
|
|
42
45
|
/**
|
|
43
46
|
* `blocks` with the Markdown of every text panel of a comic page set in
|
|
@@ -71,6 +74,12 @@ export interface ComicTextFramesInput {
|
|
|
71
74
|
mirrored: boolean;
|
|
72
75
|
pushGapPx: number;
|
|
73
76
|
locale?: string;
|
|
77
|
+
/** Only the text panels with these source indexes are laid (a spread
|
|
78
|
+
* gives each panel to one of its two pages); all when unset. */
|
|
79
|
+
only?: ReadonlySet<number>;
|
|
80
|
+
/** Boxes on the sheet the text keeps off (a spread's gutter), each set
|
|
81
|
+
* short where it crosses a line. */
|
|
82
|
+
avoid?: readonly BoundingBox[];
|
|
74
83
|
}
|
|
75
84
|
export interface ComicTextFramesLayout {
|
|
76
85
|
/** The frames' boxes and content, for `page.floats` and `doc.blocks`. */
|
|
@@ -86,8 +95,23 @@ export interface ComicTextFramesLayout {
|
|
|
86
95
|
* area is the panel's box inside its border and the lettering's inset;
|
|
87
96
|
* with a `box` style, the panel's box (the style's padding keeps the text
|
|
88
97
|
* off its edges).
|
|
98
|
+
*
|
|
99
|
+
* `comic` is on the sheet of `page`: a comic page, a half of a spread, or
|
|
100
|
+
* a strip moved there ({@link layoutStripTextFrames}).
|
|
89
101
|
*/
|
|
90
102
|
export declare function layoutComicTextFrames(input: ComicTextFramesInput): ComicTextFramesLayout;
|
|
103
|
+
/**
|
|
104
|
+
* The text panels of a strip (`:::strip`, #959), laid once the strip's block
|
|
105
|
+
* has its place on the page: the strip's comic stands relative to its block
|
|
106
|
+
* (`VDTBlock.comic`), so it is moved onto the sheet where the block sits
|
|
107
|
+
* ({@link flowRectToPage}), its text set there in the page's flow frame, and
|
|
108
|
+
* what the frames came to (blocks, overflow, scale, warnings) written back
|
|
109
|
+
* on the block's comic, which keeps moving with the block. `input.comic` is
|
|
110
|
+
* ignored; `block` is the strip.
|
|
111
|
+
*/
|
|
112
|
+
export declare function layoutStripTextFrames(input: Omit<ComicTextFramesInput, 'comic'> & {
|
|
113
|
+
block: Pick<VDTBlock, 'bbox' | 'comic'>;
|
|
114
|
+
}): ComicTextFramesLayout;
|
|
91
115
|
/** The least scale a text panel's `shrink` attribute lets its text take
|
|
92
116
|
* (#909): `shrink` alone, 0.5; `shrink=0.7` (or `70%`), that, kept
|
|
93
117
|
* between 0.25 and 1; undefined without it (or `shrink=false`). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textPanels.d.ts","sourceRoot":"","sources":["../../src/comics/textPanels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAmC,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAC5F,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"textPanels.d.ts","sourceRoot":"","sources":["../../src/comics/textPanels.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,20 +10,21 @@
|
|
|
10
10
|
* in its panel's frame with the composed pages' frame layout
|
|
11
11
|
* (`layoutComposedPage`, one frame filling the panel's text area), so a
|
|
12
12
|
* text panel has real paragraphs: selectable, searchable, read in order by
|
|
13
|
-
* tagged PDF and EPUB.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* tagged PDF and EPUB. A strip's text frames are laid once the strip has
|
|
14
|
+
* its place on the page ({@link layoutStripTextFrames}), a spread's on its
|
|
15
|
+
* two pages; a comic inside a container keeps its text in the flow after
|
|
16
|
+
* the comic, never lost.
|
|
17
17
|
*/
|
|
18
|
-
import { pageRectToFlow, pageToFlow } from '../vdt';
|
|
18
|
+
import { flowRectToPage, pageRectToFlow, pageToFlow } from '../vdt';
|
|
19
19
|
import { FRAME_ATTR, FRAME_STYLE_ID } from '../composed/wrap';
|
|
20
20
|
import { normalizeFrame } from '../composed/templates';
|
|
21
21
|
import { composedStories, layoutComposedPage } from '../pipeline/composedLayout';
|
|
22
|
+
import { SPAN_EMBED_STYLE_ID } from '../pipeline/spanEmbeds';
|
|
22
23
|
import { dimensionToPx } from '../units';
|
|
23
24
|
import { resolvedComics } from '../defaults/comics';
|
|
24
|
-
import { isComicSpread } from './spread';
|
|
25
25
|
import { comicBoxStyle, isComicTextPanel } from './frames';
|
|
26
|
-
import {
|
|
26
|
+
import { translateComicPage } from './transform';
|
|
27
|
+
import { comicPanelSources, copyComicPanelSources, setComicLayoutWarnings, comicPageLayoutWarnings } from './layoutPage';
|
|
27
28
|
/** `containerAttrs` key of a text panel's story box: the panel's index in
|
|
28
29
|
* its page's source (`ComicPanelSource.index`). */
|
|
29
30
|
export const COMIC_PANEL_ATTR = '__comicPanel';
|
|
@@ -42,16 +43,13 @@ export function comicTextPanelsSupported(resolved) {
|
|
|
42
43
|
return true;
|
|
43
44
|
}
|
|
44
45
|
/** Why a text panel's Markdown is set in the flow instead of its frame:
|
|
45
|
-
*
|
|
46
|
-
*
|
|
46
|
+
* never since postext 1.40 (#959: strips and spreads take their text in
|
|
47
|
+
* the frames too); `'flow'` only for a caller that passes `supported`
|
|
48
|
+
* false. Undefined when its frame takes it. Kept for the callers that
|
|
49
|
+
* ask; `source` is read no more. */
|
|
47
50
|
export function comicTextPanelFallback(source, supported) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (isComicSpread(source))
|
|
51
|
-
return 'spread';
|
|
52
|
-
if (!supported)
|
|
53
|
-
return 'flow';
|
|
54
|
-
return undefined;
|
|
51
|
+
void source;
|
|
52
|
+
return supported ? undefined : 'flow';
|
|
55
53
|
}
|
|
56
54
|
/**
|
|
57
55
|
* `blocks` with the Markdown of every text panel of a comic page set in
|
|
@@ -120,9 +118,16 @@ export function planComicTextPanels(blocks, plans) {
|
|
|
120
118
|
if (b.type !== 'directive' || !b.comic)
|
|
121
119
|
continue;
|
|
122
120
|
let end = i;
|
|
121
|
+
// A page-wide strip set where it stands is boxed (`wrapPageSpanEmbeds`):
|
|
122
|
+
// its stories follow the box's closing marker.
|
|
123
|
+
const prev = blocks[i - 1];
|
|
124
|
+
const next = blocks[i + 1];
|
|
125
|
+
if (prev?.type === 'containerStart' && prev.containerAttrs?.type === SPAN_EMBED_STYLE_ID && next?.type === 'containerEnd' && next.containerId === prev.containerId)
|
|
126
|
+
end = i + 1;
|
|
127
|
+
const lead = end;
|
|
123
128
|
for (let plan = plans.get(end + 1); plan && plan.attrs[COMIC_PANEL_ATTR] !== undefined; plan = plans.get(end + 1))
|
|
124
129
|
end = plan.endIdx;
|
|
125
|
-
if (end ===
|
|
130
|
+
if (end === lead)
|
|
126
131
|
continue;
|
|
127
132
|
const stories = composedStories(i, end + 1, plans);
|
|
128
133
|
const list = [...stories.values()];
|
|
@@ -137,6 +142,14 @@ export function planComicTextPanels(blocks, plans) {
|
|
|
137
142
|
return out;
|
|
138
143
|
}
|
|
139
144
|
const px = (v) => ({ value: v, unit: 'px' });
|
|
145
|
+
/** The first block of a laid story that sets text: where its text starts,
|
|
146
|
+
* which moves with the frame's vertical alignment. */
|
|
147
|
+
function firstTextY(blocks) {
|
|
148
|
+
for (const b of blocks)
|
|
149
|
+
if (b.type !== 'callout' && !b.hidden && b.lines.length > 0)
|
|
150
|
+
return b.bbox.y;
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
140
153
|
/**
|
|
141
154
|
* Set the text panels of a laid-out comic page in their frames: each text
|
|
142
155
|
* frame of `comic.frames` gets the blocks its story was set in
|
|
@@ -145,6 +158,9 @@ const px = (v) => ({ value: v, unit: 'px' });
|
|
|
145
158
|
* area is the panel's box inside its border and the lettering's inset;
|
|
146
159
|
* with a `box` style, the panel's box (the style's padding keeps the text
|
|
147
160
|
* off its edges).
|
|
161
|
+
*
|
|
162
|
+
* `comic` is on the sheet of `page`: a comic page, a half of a spread, or
|
|
163
|
+
* a strip moved there ({@link layoutStripTextFrames}).
|
|
148
164
|
*/
|
|
149
165
|
export function layoutComicTextFrames(input) {
|
|
150
166
|
const { comic, page, plan, resolved, dpi } = input;
|
|
@@ -156,76 +172,152 @@ export function layoutComicTextFrames(input) {
|
|
|
156
172
|
const insetPx = dimensionToPx(resolvedComics(resolved).lettering.inset, dpi);
|
|
157
173
|
const warnings = [];
|
|
158
174
|
const fence = Number(/^cm(\d+)$/.exec(comic.id ?? '')?.[1] ?? 0);
|
|
175
|
+
// The sheet's boxes to keep off, in the page's flow frame.
|
|
176
|
+
const avoid = (input.avoid ?? []).map((r) => {
|
|
177
|
+
const f = page.flow ? pageRectToFlow(page, r) : r;
|
|
178
|
+
return { x: f.x, y: f.y, width: f.width, height: f.height };
|
|
179
|
+
});
|
|
159
180
|
comic.frames.forEach((frame, fi) => {
|
|
160
181
|
const panelIndex = frame.panel ?? fi;
|
|
161
182
|
const src = sources[panelIndex];
|
|
162
183
|
if (!src || !isComicTextPanel(src))
|
|
163
184
|
return;
|
|
185
|
+
if (input.only && !input.only.has(src.index))
|
|
186
|
+
return;
|
|
164
187
|
const key = comicTextStoryKey(src.index);
|
|
165
188
|
const story = plan.stories.get(key);
|
|
166
189
|
if (!story)
|
|
167
190
|
return;
|
|
168
|
-
const panel = comic.panels[panelIndex];
|
|
191
|
+
const panel = comic.panels.find((q) => q.index === panelIndex) ?? comic.panels[panelIndex];
|
|
192
|
+
if (!panel)
|
|
193
|
+
return;
|
|
169
194
|
const box = comicBoxStyle(resolved, src.attrs.box);
|
|
170
195
|
const edge = box ? 0 : panel.border.width + insetPx;
|
|
171
196
|
const valign = src.attrs.valign?.trim().toLowerCase();
|
|
197
|
+
const aligned = valign === 'middle' || valign === 'bottom';
|
|
172
198
|
// A slanted cell: frameless text set from the top takes the whole cell,
|
|
173
|
-
// each line set short where a slant crosses it (#909)
|
|
174
|
-
//
|
|
175
|
-
//
|
|
176
|
-
|
|
177
|
-
const
|
|
178
|
-
const onSheet = { x: r.x + edge, y: r.y + edge, width: Math.max(1, r.width - 2 * edge), height: Math.max(1, r.height - 2 * edge) };
|
|
179
|
-
// The comic stands on the sheet; the text is set in the page's flow
|
|
180
|
-
// frame (#909), mirrored on a right-to-left page and turned on a
|
|
181
|
-
// vertical one (where it is set vertically).
|
|
182
|
-
const area = page.flow ? pageRectToFlow(page, onSheet) : onSheet;
|
|
199
|
+
// each line set short where a slant crosses it (#909). Text set to the
|
|
200
|
+
// middle or the foot follows the slant too, laid again with the slant
|
|
201
|
+
// moved by the room above it (#959); a box drawn round the text keeps
|
|
202
|
+
// to the widest box with straight sides inside the outline.
|
|
203
|
+
const follows = !!frame.polygon && !box;
|
|
183
204
|
const outline = follows ? (page.flow ? frame.polygon.map((q) => pageToFlow(page, q.x, q.y)) : frame.polygon) : undefined;
|
|
184
|
-
const
|
|
205
|
+
const areaOf = (r) => {
|
|
206
|
+
const onSheet = { x: r.x + edge, y: r.y + edge, width: Math.max(1, r.width - 2 * edge), height: Math.max(1, r.height - 2 * edge) };
|
|
207
|
+
// The comic stands on the sheet; the text is set in the page's flow
|
|
208
|
+
// frame (#909), mirrored on a right-to-left page and turned on a
|
|
209
|
+
// vertical one (where it is set vertically).
|
|
210
|
+
return page.flow ? pageRectToFlow(page, onSheet) : onSheet;
|
|
211
|
+
};
|
|
185
212
|
// `shrink` (#909): the text set smaller until it fits, down to half
|
|
186
213
|
// its size or the `shrink=` given; else the frames' least, 90 %.
|
|
187
214
|
const minScale = shrinkScale(src.attrs.shrink);
|
|
188
215
|
const padding = box ? undefined : { top: px(0), right: px(0), bottom: px(0), left: px(0) };
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
216
|
+
const lay = (area, shapes, verticalAlign) => {
|
|
217
|
+
const resolvedFrame = normalizeFrame({
|
|
218
|
+
name: frame.name,
|
|
219
|
+
width: 'fill',
|
|
220
|
+
height: 'fill',
|
|
221
|
+
...(box ? { style: box.id } : {}),
|
|
222
|
+
...(verticalAlign && verticalAlign !== 'top' ? { verticalAlign } : {}),
|
|
223
|
+
...(padding ? { padding } : {}),
|
|
224
|
+
...(minScale !== undefined ? { fit: { shrinkText: true, minScale } } : {}),
|
|
225
|
+
});
|
|
226
|
+
const template = {
|
|
227
|
+
id: comic.id ?? 'comic',
|
|
228
|
+
area: 'content',
|
|
229
|
+
frames: [resolvedFrame],
|
|
230
|
+
groups: [],
|
|
231
|
+
decoration: { elements: [] },
|
|
232
|
+
decorationPaths: [],
|
|
233
|
+
spread: false,
|
|
234
|
+
gutter: px(0),
|
|
235
|
+
role: 'comic',
|
|
236
|
+
chain: [comic.id ?? 'comic'],
|
|
237
|
+
configPath: '',
|
|
238
|
+
};
|
|
239
|
+
const around = [...avoid, ...shapes];
|
|
240
|
+
return layoutComposedPage({
|
|
241
|
+
pass: input.pass,
|
|
242
|
+
page,
|
|
243
|
+
template,
|
|
244
|
+
fence: { template: template.id, spread: false, attrs: {}, attrSources: {}, fenceIndex: fence, colons: 4 },
|
|
245
|
+
startIdx: plan.startIdx,
|
|
246
|
+
endIdx: plan.endIdx,
|
|
247
|
+
stories: new Map([[frame.name, story]]),
|
|
248
|
+
styleOf: input.styleOf,
|
|
249
|
+
areas: { area, page: area, bleed: area },
|
|
250
|
+
dpi,
|
|
251
|
+
emPx: input.emPx,
|
|
252
|
+
bodyOffset: input.bodyOffset,
|
|
253
|
+
mirrored: input.mirrored,
|
|
254
|
+
pushGapPx: input.pushGapPx,
|
|
255
|
+
...(around.length > 0 ? { frameExclusions: new Map([[frame.name, around]]) } : {}),
|
|
256
|
+
...(input.locale ? { locale: input.locale } : {}),
|
|
257
|
+
});
|
|
210
258
|
};
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
259
|
+
let area;
|
|
260
|
+
let out;
|
|
261
|
+
const wholeCell = () => {
|
|
262
|
+
area = areaOf(panel.bbox);
|
|
263
|
+
if (!aligned) {
|
|
264
|
+
out = lay(area, slantExclusions(outline, area, edge), undefined);
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
// The alignment depends on how many lines the slant leaves and the
|
|
268
|
+
// slant on where the text stands: the room the lines have at a height
|
|
269
|
+
// is the outline's there, so the slant is laid as if the text stood
|
|
270
|
+
// `shift` lower, and the shift is sought where the text lands (the
|
|
271
|
+
// lower the text stands, the narrower a slanted foot leaves it, the
|
|
272
|
+
// taller it is: bisection). A layout is kept only when every line lies
|
|
273
|
+
// inside the outline; none does: the straight box inside the cell.
|
|
274
|
+
const base = slantExclusions(outline, area, edge);
|
|
275
|
+
const top = firstTextY(lay(area, base, undefined).blocks);
|
|
276
|
+
if (top === undefined) {
|
|
277
|
+
out = lay(area, base, valign);
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
const align = valign;
|
|
281
|
+
const attempt = (shift) => {
|
|
282
|
+
const moved = outline.map((q) => ({ x: q.x, y: q.y - shift }));
|
|
283
|
+
const result = lay(area, slantExclusions(moved, area, edge), align);
|
|
284
|
+
const at = firstTextY(result.blocks);
|
|
285
|
+
return { result, landed: at === undefined ? shift : at - top };
|
|
286
|
+
};
|
|
287
|
+
let bestResult;
|
|
288
|
+
let bestGap = Infinity;
|
|
289
|
+
const consider = (shift, t) => {
|
|
290
|
+
const gap = Math.abs(t.landed - shift);
|
|
291
|
+
if (gap < bestGap && linesInsideOutline(t.result.blocks, outline, edge)) {
|
|
292
|
+
bestResult = t.result;
|
|
293
|
+
bestGap = gap;
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
const first = attempt(0);
|
|
297
|
+
consider(0, first);
|
|
298
|
+
if (first.landed > 1) {
|
|
299
|
+
let lo = 0;
|
|
300
|
+
let hi = area.height;
|
|
301
|
+
for (let round = 0; round < 9 && bestGap > 1; round++) {
|
|
302
|
+
const mid = (lo + hi) / 2;
|
|
303
|
+
const t = attempt(mid);
|
|
304
|
+
consider(mid, t);
|
|
305
|
+
if (t.landed > mid)
|
|
306
|
+
lo = mid;
|
|
307
|
+
else
|
|
308
|
+
hi = mid;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
if (!bestResult || bestGap > 3 * input.emPx)
|
|
312
|
+
return false;
|
|
313
|
+
out = bestResult;
|
|
314
|
+
return true;
|
|
315
|
+
};
|
|
316
|
+
if (!follows || !wholeCell()) {
|
|
317
|
+
const r = frame.polygon ? innerBox(frame.polygon, panel.bbox) : panel.bbox;
|
|
318
|
+
area = areaOf(r);
|
|
319
|
+
out = lay(area, [], aligned ? valign : undefined);
|
|
320
|
+
}
|
|
229
321
|
const set = out.composed.frames[0];
|
|
230
322
|
if (!set || !out.laid.has(frame.name))
|
|
231
323
|
return;
|
|
@@ -264,6 +356,67 @@ export function layoutComicTextFrames(input) {
|
|
|
264
356
|
setComicLayoutWarnings(comic, [...comicPageLayoutWarnings(comic), ...warnings]);
|
|
265
357
|
return { blocks, laid };
|
|
266
358
|
}
|
|
359
|
+
/** Whether every line of the text blocks lies inside a convex outline,
|
|
360
|
+
* `edge` in from it (the lines of a text laid in a slanted cell). */
|
|
361
|
+
function linesInsideOutline(blocks, outline, edge) {
|
|
362
|
+
for (const b of blocks) {
|
|
363
|
+
if (b.type === 'callout' || b.hidden)
|
|
364
|
+
continue;
|
|
365
|
+
for (const l of b.lines) {
|
|
366
|
+
const span = l.measure ?? { x: l.bbox.x, width: l.bbox.width };
|
|
367
|
+
// A line the room cannot take at all: the text did not settle.
|
|
368
|
+
if (span.width < 1)
|
|
369
|
+
return false;
|
|
370
|
+
for (const y of [l.bbox.y + 0.5, l.bbox.y + l.bbox.height - 0.5]) {
|
|
371
|
+
const c = crossing(outline, 'y', y);
|
|
372
|
+
if (!c)
|
|
373
|
+
return false;
|
|
374
|
+
if (span.x < c[0] + edge - 1 || span.x + span.width > c[1] - edge + 1)
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* The text panels of a strip (`:::strip`, #959), laid once the strip's block
|
|
383
|
+
* has its place on the page: the strip's comic stands relative to its block
|
|
384
|
+
* (`VDTBlock.comic`), so it is moved onto the sheet where the block sits
|
|
385
|
+
* ({@link flowRectToPage}), its text set there in the page's flow frame, and
|
|
386
|
+
* what the frames came to (blocks, overflow, scale, warnings) written back
|
|
387
|
+
* on the block's comic, which keeps moving with the block. `input.comic` is
|
|
388
|
+
* ignored; `block` is the strip.
|
|
389
|
+
*/
|
|
390
|
+
export function layoutStripTextFrames(input) {
|
|
391
|
+
const own = input.block.comic;
|
|
392
|
+
if (!own?.frames)
|
|
393
|
+
return { blocks: [], laid: new Set() };
|
|
394
|
+
const at = flowRectToPage(input.page, input.block.bbox);
|
|
395
|
+
const onSheet = translateComicPage(own, at.x, at.y);
|
|
396
|
+
copyComicPanelSources(own, onSheet);
|
|
397
|
+
const out = layoutComicTextFrames({ ...input, comic: onSheet });
|
|
398
|
+
if (out.laid.size === 0)
|
|
399
|
+
return out;
|
|
400
|
+
// The frames' results are position-free: they go back to the block's
|
|
401
|
+
// comic as they are.
|
|
402
|
+
own.frames = own.frames.map((f, i) => {
|
|
403
|
+
const laidFrame = onSheet.frames?.[i];
|
|
404
|
+
if (!laidFrame || laidFrame.blockIds.length === 0)
|
|
405
|
+
return f;
|
|
406
|
+
return {
|
|
407
|
+
...f,
|
|
408
|
+
blockIds: [...laidFrame.blockIds],
|
|
409
|
+
overflowPx: laidFrame.overflowPx,
|
|
410
|
+
scale: laidFrame.scale,
|
|
411
|
+
...(laidFrame.imageScale !== undefined ? { imageScale: laidFrame.imageScale } : {}),
|
|
412
|
+
...(laidFrame.styleId !== undefined ? { styleId: laidFrame.styleId } : {}),
|
|
413
|
+
};
|
|
414
|
+
});
|
|
415
|
+
const added = comicPageLayoutWarnings(onSheet);
|
|
416
|
+
if (added.length > 0)
|
|
417
|
+
setComicLayoutWarnings(own, [...comicPageLayoutWarnings(own), ...added]);
|
|
418
|
+
return out;
|
|
419
|
+
}
|
|
267
420
|
/** The least scale a text panel's `shrink` attribute lets its text take
|
|
268
421
|
* (#909): `shrink` alone, 0.5; `shrink=0.7` (or `70%`), that, kept
|
|
269
422
|
* between 0.25 and 1; undefined without it (or `shrink=false`). */
|
|
@@ -303,8 +456,12 @@ export function slantExclusions(poly, area, edge) {
|
|
|
303
456
|
lo = Math.max(lo, c[0] + edge);
|
|
304
457
|
hi = Math.min(hi, c[1] - edge);
|
|
305
458
|
}
|
|
306
|
-
|
|
459
|
+
// A band the outline does not reach (text laid as if it stood lower,
|
|
460
|
+
// past the cell's foot): no room at all.
|
|
461
|
+
if (!Number.isFinite(lo) || !Number.isFinite(hi)) {
|
|
462
|
+
left.push({ y, height: h, left: x0, right: x1 });
|
|
307
463
|
continue;
|
|
464
|
+
}
|
|
308
465
|
if (lo > x0 + 0.5)
|
|
309
466
|
left.push({ y, height: h, left: x0, right: Math.min(x1, lo) });
|
|
310
467
|
if (hi < x1 - 0.5)
|