postext 1.20.2 → 1.21.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__/color.test.d.ts +2 -0
- package/dist/__tests__/color.test.d.ts.map +1 -0
- package/dist/__tests__/color.test.js +110 -0
- package/dist/__tests__/color.test.js.map +1 -0
- package/dist/__tests__/comics/build.test.js +4 -3
- package/dist/__tests__/comics/build.test.js.map +1 -1
- package/dist/__tests__/comics/canvas.test.js +21 -2
- package/dist/__tests__/comics/canvas.test.js.map +1 -1
- package/dist/__tests__/comics/config.test.js +62 -0
- package/dist/__tests__/comics/config.test.js.map +1 -1
- package/dist/__tests__/comics/geometry.test.js +9 -2
- package/dist/__tests__/comics/geometry.test.js.map +1 -1
- package/dist/__tests__/comics/html.test.js +31 -0
- package/dist/__tests__/comics/html.test.js.map +1 -1
- package/dist/__tests__/comics/readingDirection.test.d.ts +2 -0
- package/dist/__tests__/comics/readingDirection.test.d.ts.map +1 -0
- package/dist/__tests__/comics/readingDirection.test.js +95 -0
- package/dist/__tests__/comics/readingDirection.test.js.map +1 -0
- package/dist/__tests__/comics/skew.test.d.ts +2 -0
- package/dist/__tests__/comics/skew.test.d.ts.map +1 -0
- package/dist/__tests__/comics/skew.test.js +57 -0
- package/dist/__tests__/comics/skew.test.js.map +1 -0
- package/dist/__tests__/comics/strip.test.js +186 -6
- package/dist/__tests__/comics/strip.test.js.map +1 -1
- package/dist/__tests__/exports.test.js +43 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/pipeline/resourceNumbering.test.js +33 -1
- package/dist/__tests__/pipeline/resourceNumbering.test.js.map +1 -1
- package/dist/__tests__/preflight.test.d.ts +2 -0
- package/dist/__tests__/preflight.test.d.ts.map +1 -0
- package/dist/__tests__/preflight.test.js +115 -0
- package/dist/__tests__/preflight.test.js.map +1 -0
- package/dist/__tests__/printConfig.test.d.ts +2 -0
- package/dist/__tests__/printConfig.test.d.ts.map +1 -0
- package/dist/__tests__/printConfig.test.js +44 -0
- package/dist/__tests__/printConfig.test.js.map +1 -0
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +36 -1
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/comic.d.ts +2 -1
- package/dist/canvas-backend/comic.d.ts.map +1 -1
- package/dist/canvas-backend/comic.js +6 -9
- package/dist/canvas-backend/comic.js.map +1 -1
- package/dist/color/authored.d.ts +9 -0
- package/dist/color/authored.d.ts.map +1 -0
- package/dist/color/authored.js +31 -0
- package/dist/color/authored.js.map +1 -0
- package/dist/color/catalogue.d.ts +29 -0
- package/dist/color/catalogue.d.ts.map +1 -0
- package/dist/color/catalogue.js +52 -0
- package/dist/color/catalogue.js.map +1 -0
- package/dist/color/icc.d.ts +68 -0
- package/dist/color/icc.d.ts.map +1 -0
- package/dist/color/icc.js +533 -0
- package/dist/color/icc.js.map +1 -0
- package/dist/color/index.d.ts +6 -0
- package/dist/color/index.d.ts.map +1 -0
- package/dist/color/index.js +6 -0
- package/dist/color/index.js.map +1 -0
- package/dist/color/srgbProfile.d.ts +8 -0
- package/dist/color/srgbProfile.d.ts.map +1 -0
- package/dist/color/srgbProfile.js +86 -0
- package/dist/color/srgbProfile.js.map +1 -0
- package/dist/color/transform.d.ts +73 -0
- package/dist/color/transform.d.ts.map +1 -0
- package/dist/color/transform.js +329 -0
- package/dist/color/transform.js.map +1 -0
- package/dist/comics/index.d.ts +3 -3
- package/dist/comics/index.d.ts.map +1 -1
- package/dist/comics/index.js +2 -2
- package/dist/comics/index.js.map +1 -1
- package/dist/comics/layoutPage.d.ts +8 -4
- package/dist/comics/layoutPage.d.ts.map +1 -1
- package/dist/comics/layoutPage.js +17 -9
- package/dist/comics/layoutPage.js.map +1 -1
- package/dist/comics/lettering/__tests__/letterPanel.test.js +19 -9
- package/dist/comics/lettering/__tests__/letterPanel.test.js.map +1 -1
- package/dist/comics/lettering/letter.js +13 -7
- package/dist/comics/lettering/letter.js.map +1 -1
- package/dist/comics/lettering/placement.d.ts +2 -0
- package/dist/comics/lettering/placement.d.ts.map +1 -1
- package/dist/comics/lettering/placement.js.map +1 -1
- package/dist/comics/lettering/types.d.ts +5 -0
- package/dist/comics/lettering/types.d.ts.map +1 -1
- package/dist/comics/paint.d.ts +6 -0
- package/dist/comics/paint.d.ts.map +1 -1
- package/dist/comics/paint.js +23 -0
- package/dist/comics/paint.js.map +1 -1
- package/dist/comics/script.d.ts.map +1 -1
- package/dist/comics/script.js +4 -1
- package/dist/comics/script.js.map +1 -1
- package/dist/comics/strip.d.ts +50 -3
- package/dist/comics/strip.d.ts.map +1 -1
- package/dist/comics/strip.js +55 -5
- package/dist/comics/strip.js.map +1 -1
- package/dist/comics/types.d.ts +3 -0
- package/dist/comics/types.d.ts.map +1 -1
- package/dist/configWarnings.d.ts +1 -1
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +93 -4
- package/dist/configWarnings.js.map +1 -1
- package/dist/defaults/comics.d.ts +48 -1
- package/dist/defaults/comics.d.ts.map +1 -1
- package/dist/defaults/comics.js +77 -8
- package/dist/defaults/comics.js.map +1 -1
- package/dist/defaults/index.d.ts +2 -1
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +10 -1
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/page.d.ts +12 -6
- package/dist/defaults/page.d.ts.map +1 -1
- package/dist/defaults/page.js +15 -9
- package/dist/defaults/page.js.map +1 -1
- package/dist/defaults/print.d.ts +13 -0
- package/dist/defaults/print.d.ts.map +1 -0
- package/dist/defaults/print.js +147 -0
- package/dist/defaults/print.js.map +1 -0
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +46 -2
- package/dist/html-backend.js.map +1 -1
- package/dist/htmlComic.d.ts.map +1 -1
- package/dist/htmlComic.js +8 -3
- package/dist/htmlComic.js.map +1 -1
- package/dist/index.d.ts +11 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/locale.d.ts +9 -0
- package/dist/locale.d.ts.map +1 -1
- package/dist/locale.js +11 -0
- package/dist/locale.js.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +211 -36
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts +5 -0
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +36 -3
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +13 -2
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +8 -0
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/crossRefs.d.ts.map +1 -1
- package/dist/pipeline/crossRefs.js +2 -1
- package/dist/pipeline/crossRefs.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts +51 -2
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +96 -51
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/pipeline/resourceNumbering.d.ts +5 -0
- package/dist/pipeline/resourceNumbering.d.ts.map +1 -1
- package/dist/pipeline/resourceNumbering.js +34 -5
- package/dist/pipeline/resourceNumbering.js.map +1 -1
- package/dist/pipeline/spanEmbeds.d.ts +6 -1
- package/dist/pipeline/spanEmbeds.d.ts.map +1 -1
- package/dist/pipeline/spanEmbeds.js +18 -3
- package/dist/pipeline/spanEmbeds.js.map +1 -1
- package/dist/preflight.d.ts +89 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +314 -0
- package/dist/preflight.js.map +1 -0
- package/dist/types.d.ts +167 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +47 -5
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js.map +1 -1
- package/icc/README.md +43 -0
- package/icc/fogra27.icc +0 -0
- package/icc/fogra28.icc +0 -0
- package/icc/fogra29.icc +0 -0
- package/icc/fogra30.icc +0 -0
- package/icc/fogra39.icc +0 -0
- package/icc/fogra40.icc +0 -0
- package/icc/fogra45.icc +0 -0
- package/icc/fogra47.icc +0 -0
- package/icc/fogra51.icc +0 -0
- package/icc/fogra52.icc +0 -0
- package/icc/gracol2006.icc +0 -0
- package/icc/ifra26.icc +0 -0
- package/icc/snap2007.icc +0 -0
- package/icc/swop3.icc +0 -0
- package/icc/swop5.icc +0 -0
- package/package.json +4 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAe,mBAAmB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAA+B,WAAW,EAAW,MAAM,OAAO,CAAC;AAC5F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKzD,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,CACA;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAC7E;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACvF;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;CAAE,CACjF,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B;4CACwC;IACxC,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B;8DAC0D;IAC1D,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAChC;;qDAEiD;IACjD,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrE;wCACoC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAqCD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,gBAAqB,GAAG,cAAc,EAAE,CA2OpG"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Print preflight (#605): what a printer would reject in a laid-out
|
|
3
|
+
* document, found on the VDT so it runs as soon as a page is laid out —
|
|
4
|
+
* the Sandbox shows it in Review, and a Node pipeline can fail a build on
|
|
5
|
+
* it.
|
|
6
|
+
*
|
|
7
|
+
* - Pictures whose effective resolution at their printed size (pixels per
|
|
8
|
+
* inch, crop included) falls under `print.preflight.minImageResolution`
|
|
9
|
+
* (critical under `criticalImageResolution`): figures, table-cell
|
|
10
|
+
* pictures, design images, comic panels.
|
|
11
|
+
* - RGB pictures in a CMYK job (converted on export, or kept RGB by a
|
|
12
|
+
* PDF/X-4 that does not convert them), when the host says which
|
|
13
|
+
* pictures are RGB (`imageColor`).
|
|
14
|
+
* - Rules, borders and strokes thinner than `minRuleWidth`.
|
|
15
|
+
* - Text under `smallTextSize` set with more than one ink.
|
|
16
|
+
* - Colours whose separation exceeds the ink limit.
|
|
17
|
+
* - Text inside the safe zone near the trim, and boxes or pictures that
|
|
18
|
+
* stop short of the trim by less than `bleedSnap` without bleeding.
|
|
19
|
+
*/
|
|
20
|
+
import { authoredCmykColors } from './color/authored';
|
|
21
|
+
import { resolvePrintConfig } from './defaults/print';
|
|
22
|
+
import { dimensionToPx } from './units';
|
|
23
|
+
const MM_PER_IN = 25.4;
|
|
24
|
+
const EPS = 0.5;
|
|
25
|
+
function fontSizePx(fontString) {
|
|
26
|
+
const m = fontString ? /(\d+(?:\.\d+)?)px/.exec(fontString) : null;
|
|
27
|
+
return m ? Number(m[1]) : undefined;
|
|
28
|
+
}
|
|
29
|
+
function hex6(color) {
|
|
30
|
+
if (!color)
|
|
31
|
+
return undefined;
|
|
32
|
+
const c = color.trim().toLowerCase();
|
|
33
|
+
if (/^#[0-9a-f]{6}([0-9a-f]{2})?$/.test(c))
|
|
34
|
+
return c.slice(0, 7);
|
|
35
|
+
if (/^#[0-9a-f]{3}([0-9a-f])?$/.test(c))
|
|
36
|
+
return `#${c[1]}${c[1]}${c[2]}${c[2]}${c[3]}${c[3]}`;
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
function isTransparent(color) {
|
|
40
|
+
if (!color)
|
|
41
|
+
return true;
|
|
42
|
+
const c = color.trim().toLowerCase();
|
|
43
|
+
return c === 'transparent' || /^#[0-9a-f]{6}00$/.test(c) || /^#[0-9a-f]{3}0$/.test(c);
|
|
44
|
+
}
|
|
45
|
+
/** Pixel sizes by file id. */
|
|
46
|
+
function bitmapSizes(doc, resources) {
|
|
47
|
+
const out = new Map();
|
|
48
|
+
const note = (r) => {
|
|
49
|
+
const b = r?.bitmap;
|
|
50
|
+
if (r && b && b.width > 0 && b.height > 0 && !out.has(b.fileId))
|
|
51
|
+
out.set(b.fileId, { w: b.width, h: b.height, id: r.id });
|
|
52
|
+
};
|
|
53
|
+
for (const r of resources ?? [])
|
|
54
|
+
note(r);
|
|
55
|
+
for (const block of doc.blocks)
|
|
56
|
+
note(block.resourceBlock?.resource);
|
|
57
|
+
for (const page of doc.pages)
|
|
58
|
+
for (const f of page.floats ?? [])
|
|
59
|
+
note(f.resourceBlock?.resource);
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
export function preflightDocument(doc, options = {}) {
|
|
63
|
+
const print = options.print ?? doc.config.print ?? resolvePrintConfig();
|
|
64
|
+
const pf = print.preflight;
|
|
65
|
+
if (!pf.enabled)
|
|
66
|
+
return [];
|
|
67
|
+
const dpi = doc.config.page.dpi;
|
|
68
|
+
const pxToPt = (px) => (px / dpi) * 72;
|
|
69
|
+
const pxToMm = (px) => (px / dpi) * MM_PER_IN;
|
|
70
|
+
const offset = doc.pageIndexOffset ?? 0;
|
|
71
|
+
const cmykJob = options.cmyk ?? print.standard !== 'none';
|
|
72
|
+
const sizes = bitmapSizes(doc, options.resources);
|
|
73
|
+
const authored = authoredCmykColors(doc.config);
|
|
74
|
+
const minRulePx = dimensionToPx(pf.minRuleWidth, dpi);
|
|
75
|
+
const smallTextPx = dimensionToPx(pf.smallTextSize, dpi);
|
|
76
|
+
const safePx = dimensionToPx(pf.safeZone, dpi);
|
|
77
|
+
const snapPx = dimensionToPx(pf.bleedSnap, dpi);
|
|
78
|
+
const out = [];
|
|
79
|
+
const t = options.transform;
|
|
80
|
+
const separation = (hex) => {
|
|
81
|
+
const exact = authored.get(hex);
|
|
82
|
+
if (exact)
|
|
83
|
+
return exact;
|
|
84
|
+
if (!t)
|
|
85
|
+
return undefined;
|
|
86
|
+
const r = parseInt(hex.slice(1, 3), 16) / 255;
|
|
87
|
+
const g = parseInt(hex.slice(3, 5), 16) / 255;
|
|
88
|
+
const b = parseInt(hex.slice(5, 7), 16) / 255;
|
|
89
|
+
const k = t.fromRgb(r, g, b);
|
|
90
|
+
return { c: k.c * 100, m: k.m * 100, y: k.y * 100, k: k.k * 100 };
|
|
91
|
+
};
|
|
92
|
+
const inkCount = (hex) => {
|
|
93
|
+
const sep = separation(hex);
|
|
94
|
+
if (sep)
|
|
95
|
+
return [sep.c, sep.m, sep.y, sep.k].filter((v) => v > EPS).length;
|
|
96
|
+
const neutral = hex.slice(1, 3) === hex.slice(3, 5) && hex.slice(3, 5) === hex.slice(5, 7);
|
|
97
|
+
return neutral ? 1 : 3;
|
|
98
|
+
};
|
|
99
|
+
// Ink coverage, once per colour.
|
|
100
|
+
const coverageSeen = new Set();
|
|
101
|
+
const checkCoverage = (color, pageIndex, rect) => {
|
|
102
|
+
const hex = hex6(color);
|
|
103
|
+
if (!hex || !cmykJob || coverageSeen.has(hex))
|
|
104
|
+
return;
|
|
105
|
+
coverageSeen.add(hex);
|
|
106
|
+
const sep = separation(hex);
|
|
107
|
+
if (!sep)
|
|
108
|
+
return;
|
|
109
|
+
const coverage = sep.c + sep.m + sep.y + sep.k;
|
|
110
|
+
if (coverage > print.inkLimit + EPS) {
|
|
111
|
+
out.push({ kind: 'inkLimit', severity: 'warning', pageIndex, color: hex, coverage: Math.round(coverage), limit: print.inkLimit, ...(rect ? { rect } : {}) });
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
const checkImage = (fileId, placedW, placedH, fracW, fracH, pageIndex, rect, resourceId, src) => {
|
|
115
|
+
if (!fileId)
|
|
116
|
+
return;
|
|
117
|
+
const size = sizes.get(fileId);
|
|
118
|
+
const source = src?.start !== undefined ? { sourceStart: src.start, ...(src.end !== undefined ? { sourceEnd: src.end } : {}) } : {};
|
|
119
|
+
const rid = resourceId ?? size?.id;
|
|
120
|
+
if (size && placedW > 0 && placedH > 0) {
|
|
121
|
+
const ppi = Math.min((size.w * fracW) / (placedW / dpi), (size.h * fracH) / (placedH / dpi));
|
|
122
|
+
if (ppi < pf.minImageResolution - EPS) {
|
|
123
|
+
out.push({
|
|
124
|
+
kind: 'lowImageResolution',
|
|
125
|
+
severity: ppi < pf.criticalImageResolution - EPS ? 'critical' : 'warning',
|
|
126
|
+
pageIndex, rect, fileId, ppi: Math.round(ppi), minimum: pf.minImageResolution,
|
|
127
|
+
...(rid ? { resourceId: rid } : {}), ...source,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (cmykJob && options.imageColor?.(fileId) === 'rgb') {
|
|
132
|
+
const converted = print.standard === 'pdfx1a' || print.convertImages;
|
|
133
|
+
out.push({ kind: 'rgbImage', severity: converted ? 'info' : 'warning', pageIndex, rect, fileId, converted, ...(rid ? { resourceId: rid } : {}), ...source });
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
const checkRule = (widthPx, color, pageIndex, rect) => {
|
|
137
|
+
if (widthPx <= 0 || isTransparent(color))
|
|
138
|
+
return;
|
|
139
|
+
if (widthPx < minRulePx - 1e-6) {
|
|
140
|
+
out.push({ kind: 'thinRule', severity: 'warning', pageIndex, rect, widthPt: Math.round(pxToPt(widthPx) * 100) / 100, minimumPt: Math.round(pxToPt(minRulePx) * 100) / 100, color: hex6(color) ?? String(color) });
|
|
141
|
+
}
|
|
142
|
+
checkCoverage(color, pageIndex, rect);
|
|
143
|
+
};
|
|
144
|
+
for (const page of doc.pages) {
|
|
145
|
+
const pageIndex = page.index + offset;
|
|
146
|
+
const trim = {
|
|
147
|
+
x: doc.trimOffset,
|
|
148
|
+
y: doc.trimOffset,
|
|
149
|
+
width: page.width - 2 * doc.trimOffset,
|
|
150
|
+
height: page.height - 2 * doc.trimOffset,
|
|
151
|
+
};
|
|
152
|
+
const flowPage = !!page.flow;
|
|
153
|
+
// --- text: small multi-ink text, coverage, safe zone
|
|
154
|
+
const smallSeen = new Set();
|
|
155
|
+
const checkLines = (lines, blockFont, blockColor, src, absolute) => {
|
|
156
|
+
let safeIssue;
|
|
157
|
+
for (const line of lines) {
|
|
158
|
+
const segs = line.segments ?? [];
|
|
159
|
+
const runs = segs.length > 0
|
|
160
|
+
? segs.filter((s) => s.kind === 'text' && s.text.trim()).map((s) => ({ font: s.fontString ?? blockFont, color: s.color ?? blockColor, text: s.text }))
|
|
161
|
+
: line.text.trim() ? [{ font: blockFont, color: blockColor, text: line.text }] : [];
|
|
162
|
+
for (const run of runs) {
|
|
163
|
+
const hex = hex6(run.color);
|
|
164
|
+
if (!hex)
|
|
165
|
+
continue;
|
|
166
|
+
checkCoverage(hex, pageIndex, absolute ? line.bbox : undefined);
|
|
167
|
+
const size = fontSizePx(run.font);
|
|
168
|
+
if (size === undefined || size >= smallTextPx - 1e-6)
|
|
169
|
+
continue;
|
|
170
|
+
const inks = inkCount(hex);
|
|
171
|
+
if (inks <= 1)
|
|
172
|
+
continue;
|
|
173
|
+
const key = `${hex}|${size}`;
|
|
174
|
+
if (smallSeen.has(key))
|
|
175
|
+
continue;
|
|
176
|
+
smallSeen.add(key);
|
|
177
|
+
out.push({
|
|
178
|
+
kind: 'smallProcessText', severity: 'warning', pageIndex,
|
|
179
|
+
sizePt: Math.round(pxToPt(size) * 10) / 10, inks, color: hex, text: run.text.trim().slice(0, 40),
|
|
180
|
+
...(absolute ? { rect: line.bbox } : {}),
|
|
181
|
+
...(src.start !== undefined ? { sourceStart: src.start, ...(src.end !== undefined ? { sourceEnd: src.end } : {}) } : {}),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
if (absolute && !flowPage && line.text.trim()) {
|
|
185
|
+
const b = line.bbox;
|
|
186
|
+
const d = Math.min(b.x - trim.x, b.y - trim.y, trim.x + trim.width - (b.x + b.width), trim.y + trim.height - (b.y + b.height));
|
|
187
|
+
// Inside the trim but within the safe zone.
|
|
188
|
+
if (d < safePx - 1e-6 && d > -safePx && (!safeIssue || d < safeIssue.d))
|
|
189
|
+
safeIssue = { d, text: line.text.trim().slice(0, 40), rect: b };
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (safeIssue) {
|
|
193
|
+
out.push({
|
|
194
|
+
kind: 'safeZone', severity: 'warning', pageIndex, rect: safeIssue.rect,
|
|
195
|
+
distanceMm: Math.round(pxToMm(Math.max(0, safeIssue.d)) * 10) / 10, safeZoneMm: Math.round(pxToMm(safePx) * 10) / 10, text: safeIssue.text,
|
|
196
|
+
...(src.start !== undefined ? { sourceStart: src.start, ...(src.end !== undefined ? { sourceEnd: src.end } : {}) } : {}),
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
// --- boxes / pictures that stop just short of the trim
|
|
201
|
+
const checkNearTrim = (rect) => {
|
|
202
|
+
if (flowPage || snapPx <= 0)
|
|
203
|
+
return;
|
|
204
|
+
const gaps = [
|
|
205
|
+
[rect.x - trim.x, 'left'],
|
|
206
|
+
[rect.y - trim.y, 'top'],
|
|
207
|
+
[trim.x + trim.width - (rect.x + rect.width), 'right'],
|
|
208
|
+
[trim.y + trim.height - (rect.y + rect.height), 'bottom'],
|
|
209
|
+
];
|
|
210
|
+
for (const [gap, edge] of gaps) {
|
|
211
|
+
if (gap > 1e-3 && gap < snapPx) {
|
|
212
|
+
out.push({ kind: 'nearTrim', severity: 'warning', pageIndex, rect, gapMm: Math.round(pxToMm(gap) * 10) / 10, edge });
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
const checkSlot = (slot) => {
|
|
218
|
+
for (const b of slot?.blocks ?? []) {
|
|
219
|
+
if (b.kind === 'rule') {
|
|
220
|
+
checkRule(b.thicknessPx, b.color, pageIndex, b.bbox);
|
|
221
|
+
}
|
|
222
|
+
else if (b.kind === 'box') {
|
|
223
|
+
if (b.box.borderWidthPx > 0 && b.box.borderColor)
|
|
224
|
+
checkRule(b.box.borderWidthPx, b.box.borderColor, pageIndex, b.bbox);
|
|
225
|
+
if (!isTransparent(b.box.backgroundColor)) {
|
|
226
|
+
checkCoverage(b.box.backgroundColor, pageIndex, b.bbox);
|
|
227
|
+
checkNearTrim(b.bbox);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else if (b.kind === 'image') {
|
|
231
|
+
if (b.imageKind !== 'svg')
|
|
232
|
+
checkImage(b.fileId, b.bbox.width, b.bbox.height, 1, 1, pageIndex, b.bbox);
|
|
233
|
+
checkNearTrim(b.bbox);
|
|
234
|
+
}
|
|
235
|
+
else if (b.kind === 'text') {
|
|
236
|
+
const hex = hex6(b.color);
|
|
237
|
+
if (b.box && !isTransparent(b.box.backgroundColor))
|
|
238
|
+
checkCoverage(b.box.backgroundColor, pageIndex, b.bbox);
|
|
239
|
+
if (!hex)
|
|
240
|
+
continue;
|
|
241
|
+
checkCoverage(hex, pageIndex, b.bbox);
|
|
242
|
+
const size = fontSizePx(b.fontString);
|
|
243
|
+
const inks = inkCount(hex);
|
|
244
|
+
if (size !== undefined && size < smallTextPx - 1e-6 && inks > 1) {
|
|
245
|
+
out.push({
|
|
246
|
+
kind: 'smallProcessText', severity: 'warning', pageIndex, rect: b.bbox,
|
|
247
|
+
sizePt: Math.round(pxToPt(size) * 10) / 10, inks, color: hex, text: (b.sourceText ?? '').trim().slice(0, 40),
|
|
248
|
+
...(b.sourceStart !== undefined ? { sourceStart: b.sourceStart, ...(b.sourceEnd !== undefined ? { sourceEnd: b.sourceEnd } : {}) } : {}),
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
const checkComic = (comic) => {
|
|
255
|
+
for (const panel of comic?.panels ?? []) {
|
|
256
|
+
if (panel.border.style !== 'none')
|
|
257
|
+
checkRule(panel.border.width, panel.border.color, pageIndex, panel.bbox);
|
|
258
|
+
for (const art of [panel.art, panel.pop]) {
|
|
259
|
+
if (!art || art.kind !== 'bitmap')
|
|
260
|
+
continue;
|
|
261
|
+
const size = sizes.get(art.fileId);
|
|
262
|
+
checkImage(art.fileId, art.box.width, art.box.height, size ? art.source.width / size.w : 1, size ? art.source.height / size.h : 1, pageIndex, art.box, art.resourceId, { start: panel.sourceStart, end: panel.sourceEnd });
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
const blocks = [...page.columns.flatMap((c) => c.blocks), ...(page.floats ?? []), ...page.marginNotes];
|
|
267
|
+
for (const block of blocks) {
|
|
268
|
+
if (block.hidden)
|
|
269
|
+
continue;
|
|
270
|
+
const src = { start: block.sourceStart, end: block.sourceEnd };
|
|
271
|
+
checkLines(block.lines, block.fontString, block.color, src, true);
|
|
272
|
+
const rb = block.resourceBlock;
|
|
273
|
+
if (rb) {
|
|
274
|
+
if (rb.captionLines.length > 0)
|
|
275
|
+
checkLines(rb.captionLines, rb.captionFontString, rb.captionColor, src, false);
|
|
276
|
+
const body = { x: block.bbox.x + rb.bodyRect.x, y: block.bbox.y + rb.bodyRect.y, width: rb.bodyRect.width, height: rb.bodyRect.height };
|
|
277
|
+
if (rb.kind === 'bitmap') {
|
|
278
|
+
const s = rb.bodySource;
|
|
279
|
+
checkImage(rb.fileId, rb.bodyRect.width, rb.bodyRect.height, s?.width ?? 1, s?.height ?? 1, pageIndex, body, rb.resource.id, src);
|
|
280
|
+
checkNearTrim(body);
|
|
281
|
+
}
|
|
282
|
+
const table = rb.table;
|
|
283
|
+
if (table) {
|
|
284
|
+
if (table.borderWidthPx > 0)
|
|
285
|
+
checkRule(table.borderWidthPx, table.borderColor, pageIndex, body);
|
|
286
|
+
for (const cell of table.cells ?? []) {
|
|
287
|
+
const img = cell.image;
|
|
288
|
+
if (img && img.kind === 'bitmap')
|
|
289
|
+
checkImage(img.fileId, img.rect.width, img.rect.height, 1, 1, pageIndex, body, img.resourceId, src);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
checkSlot(block.designOverlay);
|
|
294
|
+
checkComic(block.comic);
|
|
295
|
+
}
|
|
296
|
+
if (page.columnRule?.enabled && page.columns.length > 1) {
|
|
297
|
+
checkRule(page.columnRule.lineWidthPx, page.columnRule.color, pageIndex, page.contentArea);
|
|
298
|
+
}
|
|
299
|
+
checkSlot(page.header);
|
|
300
|
+
checkSlot(page.footer);
|
|
301
|
+
checkSlot(page.openerBand);
|
|
302
|
+
checkComic(page.comic);
|
|
303
|
+
}
|
|
304
|
+
// The rich-black recipe against the limit.
|
|
305
|
+
if (cmykJob && print.black.richBlack) {
|
|
306
|
+
const rb = print.black.richBlackColor;
|
|
307
|
+
const coverage = rb.c + rb.m + rb.y + rb.k;
|
|
308
|
+
if (coverage > print.inkLimit + EPS) {
|
|
309
|
+
out.push({ kind: 'inkLimit', severity: 'warning', pageIndex: offset, color: 'rich-black', coverage: Math.round(coverage), limit: print.inkLimit });
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return out;
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA2CxC,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,GAAG,GAAG,GAAG,CAAC;AAEhB,SAAS,UAAU,CAAC,UAA8B;IAChD,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtC,CAAC;AAED,SAAS,IAAI,CAAC,KAAyB;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,CAAC,KAAK,aAAa,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,8BAA8B;AAC9B,SAAS,WAAW,CAAC,GAAgB,EAAE,SAA0C;IAC/E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAgD,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,CAAuB,EAAE,EAAE;QACvC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5H,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,SAAS,IAAI,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM;QAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACpE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK;QAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE;YAAE,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACjG,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAgB,EAAE,UAA4B,EAAE;IAChF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,kBAAkB,EAAE,CAAC;IACxE,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC;IAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAE5B,MAAM,UAAU,GAAG,CAAC,GAAW,EAA2B,EAAE;QAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;QAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;QAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;IACpE,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAU,EAAE;QACvC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;QAC3E,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3F,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,iCAAiC;IACjC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAE,SAAiB,EAAE,IAAkB,EAAE,EAAE;QACzF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QACtD,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC/C,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC;YACpC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/J,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,MAA0B,EAAE,OAAe,EAAE,OAAe,EAAE,KAAa,EAAE,KAAa,EAAE,SAAiB,EAAE,IAAiB,EAAE,UAAmB,EAAE,GAAsC,EAAE,EAAE;QACnN,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpI,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,EAAE,EAAE,CAAC;QACnC,IAAI,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;YAC7F,IAAI,GAAG,GAAG,EAAE,CAAC,kBAAkB,GAAG,GAAG,EAAE,CAAC;gBACtC,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,oBAAoB;oBAC1B,QAAQ,EAAE,GAAG,GAAG,EAAE,CAAC,uBAAuB,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;oBACzE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,kBAAkB;oBAC7E,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM;iBAC/C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;YACtD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa,CAAC;YACrE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC/J,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,KAAyB,EAAE,SAAiB,EAAE,IAAiB,EAAE,EAAE;QACrG,IAAI,OAAO,IAAI,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC;YAAE,OAAO;QACjD,IAAI,OAAO,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpN,CAAC;QACD,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACtC,MAAM,IAAI,GAAgB;YACxB,CAAC,EAAE,GAAG,CAAC,UAAU;YACjB,CAAC,EAAE,GAAG,CAAC,UAAU;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU;YACtC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU;SACzC,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAE7B,sDAAsD;QACtD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,UAAU,GAAG,CAAC,KAAyB,EAAE,SAAiB,EAAE,UAAkB,EAAE,GAAqC,EAAE,QAAiB,EAAE,EAAE;YAChJ,IAAI,SAAqE,CAAC;YAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;oBAC1B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBACtJ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC5B,IAAI,CAAC,GAAG;wBAAE,SAAS;oBACnB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAChE,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAClC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,WAAW,GAAG,IAAI;wBAAE,SAAS;oBAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC3B,IAAI,IAAI,IAAI,CAAC;wBAAE,SAAS;oBACxB,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;oBAC7B,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,SAAS;oBACjC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACnB,GAAG,CAAC,IAAI,CAAC;wBACP,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;wBACxD,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;wBAChG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACxC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACzH,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,QAAQ,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;oBACpB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC/H,4CAA4C;oBAC5C,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wBAAE,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC3I,CAAC;YACH,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI;oBACtE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI;oBAC1I,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACzH,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,wDAAwD;QACxD,MAAM,aAAa,GAAG,CAAC,IAAiB,EAAE,EAAE;YAC1C,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC;gBAAE,OAAO;YACpC,MAAM,IAAI,GAAyD;gBACjE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC;gBACzB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;gBACxB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;gBACtD,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;aAC1D,CAAC;YACF,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC/B,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,MAAM,EAAE,CAAC;oBAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrH,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,IAA+B,EAAE,EAAE;YACpD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACtB,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBACvD,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW;wBAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBACvH,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;wBAC1C,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;wBACxD,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC9B,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK;wBAAE,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBACtG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC1B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;wBAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC5G,IAAI,CAAC,GAAG;wBAAE,SAAS;oBACnB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBACtC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC3B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG,WAAW,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;wBAChE,GAAG,CAAC,IAAI,CAAC;4BACP,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;4BACtE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;4BAC5G,GAAG,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBACzI,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,KAA+B,EAAE,EAAE;YACrD,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM;oBAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5G,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;wBAAE,SAAS;oBAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACnC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC7N,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACvG,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,MAAM;gBAAE,SAAS;YAC3B,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/D,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAClE,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC;YAC/B,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;oBAAE,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC/G,MAAM,IAAI,GAAgB,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrJ,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACzB,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;oBACxB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBAClI,aAAa,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;gBACD,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;gBACvB,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC;wBAAE,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBAChG,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;wBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;wBACvB,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;4BAAE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;oBACxI,CAAC;gBACH,CAAC;YACH,CAAC;YACD,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC/B,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7F,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,2CAA2C;IAC3C,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC;QACtC,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC;YACpC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrJ,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -650,6 +650,11 @@ export type ColorModel = 'hex' | 'rgb' | 'cmyk' | 'hsl';
|
|
|
650
650
|
export interface ColorValue {
|
|
651
651
|
hex: string;
|
|
652
652
|
model: ColorModel;
|
|
653
|
+
/** The exact process values of a colour authored in CMYK (`model:
|
|
654
|
+
* 'cmyk'`), percent: a CMYK print render (`print`, or a `'cmyk'` PDF
|
|
655
|
+
* colour space) sets them as they are instead of separating `hex`,
|
|
656
|
+
* which is their screen rendering. */
|
|
657
|
+
cmyk?: CmykPercent;
|
|
653
658
|
/** The `colorPalette` entry this colour follows, wherever it sits in the
|
|
654
659
|
* configuration (designs, callout labels and the `:ref` colour
|
|
655
660
|
* included): the entry's `hex` / `model` win, and the ones stored here
|
|
@@ -756,8 +761,13 @@ export interface PageConfig {
|
|
|
756
761
|
* margin is on its right, and viewers show the pairs `[3 | 2]`. With
|
|
757
762
|
* mirrored margins the recto therefore swaps `left` and `right`: `left`
|
|
758
763
|
* stays the inner margin. `'auto'` (the default) is `'right'` when
|
|
759
|
-
* `layout.writingMode` is `'vertical-rl'
|
|
760
|
-
* left (`PostextConfig.direction`),
|
|
764
|
+
* `layout.writingMode` is `'vertical-rl'`, when the document runs right
|
|
765
|
+
* to left (`PostextConfig.direction`), or when the config has a
|
|
766
|
+
* `comics` section whose comics read right to left
|
|
767
|
+
* (`comics.readingDirection` resolved, `comicReadingDirection`: a
|
|
768
|
+
* manga, a Japanese or Traditional Chinese edition of a Western comic),
|
|
769
|
+
* else `'left'`. The `comics` section decides, not the `:::page` blocks
|
|
770
|
+
* of a chapter, so every chapter of a book is bound alike. Book-level:
|
|
761
771
|
* a heading style's own `layout` never changes it. */
|
|
762
772
|
binding?: PageBinding;
|
|
763
773
|
}
|
|
@@ -782,7 +792,8 @@ export interface ResolvedPageConfig {
|
|
|
782
792
|
lineWidth: Dimension;
|
|
783
793
|
};
|
|
784
794
|
pageNumbering: ResolvedPageNumberingConfig;
|
|
785
|
-
/** `binding` resolved: `'auto'` is `'right'` in a vertical document
|
|
795
|
+
/** `binding` resolved: `'auto'` is `'right'` in a vertical document, a
|
|
796
|
+
* right-to-left one and a comic book read right to left. */
|
|
786
797
|
binding: 'left' | 'right';
|
|
787
798
|
}
|
|
788
799
|
/** How the body is divided into columns. `'single'`, `'double'` and
|
|
@@ -4180,6 +4191,133 @@ export interface ResolvedCjkConfig {
|
|
|
4180
4191
|
kunten: ResolvedCjkKuntenConfig;
|
|
4181
4192
|
}
|
|
4182
4193
|
export type PdfColorSpace = 'rgb' | 'cmyk' | 'grayscale';
|
|
4194
|
+
/** The PDF/X flavour postext-pdf writes: none (an ordinary PDF), PDF/X-1a
|
|
4195
|
+
* (CMYK only, no transparency; PDF/X-1a:2003) or PDF/X-4 (transparency
|
|
4196
|
+
* kept, colour-managed; PDF/X-4:2010). */
|
|
4197
|
+
export type PdfXStandard = 'none' | 'pdfx1a' | 'pdfx4';
|
|
4198
|
+
/** How colours outside the output gamut are mapped: relative colorimetric
|
|
4199
|
+
* (in-gamut colours stay exact, paper white = white) or perceptual (the
|
|
4200
|
+
* whole gamut is compressed). */
|
|
4201
|
+
export type PrintRenderingIntent = 'relative' | 'perceptual';
|
|
4202
|
+
/** A CMYK recipe in percent (0..100 each). */
|
|
4203
|
+
export interface CmykPercent {
|
|
4204
|
+
c: number;
|
|
4205
|
+
m: number;
|
|
4206
|
+
y: number;
|
|
4207
|
+
k: number;
|
|
4208
|
+
}
|
|
4209
|
+
/** How black prints in a CMYK job. */
|
|
4210
|
+
export interface PrintBlackConfig {
|
|
4211
|
+
/** Black and grey (neutral) colours print with black ink only, never as
|
|
4212
|
+
* a four-colour grey. Defaults to true. */
|
|
4213
|
+
kOnlyNeutrals?: boolean;
|
|
4214
|
+
/** 100 % K text and strokes overprint (no knock-out, so misregistration
|
|
4215
|
+
* never shows a white halo). Defaults to true. */
|
|
4216
|
+
overprint?: boolean;
|
|
4217
|
+
/** Large black areas (backgrounds, bands, boxes, shapes whose smaller
|
|
4218
|
+
* side reaches `richBlackMinSize`) print in rich black instead of
|
|
4219
|
+
* K only. Text never does. Defaults to true. */
|
|
4220
|
+
richBlack?: boolean;
|
|
4221
|
+
/** The rich-black recipe. Defaults to C60 M40 Y40 K100. */
|
|
4222
|
+
richBlackColor?: CmykPercent;
|
|
4223
|
+
/** The smaller side an area needs to print in rich black. Defaults to
|
|
4224
|
+
* 6 mm. */
|
|
4225
|
+
richBlackMinSize?: Dimension;
|
|
4226
|
+
}
|
|
4227
|
+
export interface ResolvedPrintBlackConfig {
|
|
4228
|
+
kOnlyNeutrals: boolean;
|
|
4229
|
+
overprint: boolean;
|
|
4230
|
+
richBlack: boolean;
|
|
4231
|
+
richBlackColor: CmykPercent;
|
|
4232
|
+
richBlackMinSize: Dimension;
|
|
4233
|
+
}
|
|
4234
|
+
/** Thresholds of the print preflight (the Sandbox's Review panel, and
|
|
4235
|
+
* `preflightDocument`). */
|
|
4236
|
+
export interface PrintPreflightConfig {
|
|
4237
|
+
/** Run the checks. Defaults to true. */
|
|
4238
|
+
enabled?: boolean;
|
|
4239
|
+
/** Placed images below this effective resolution (pixels per inch at
|
|
4240
|
+
* their printed size) get a warning. Defaults to 300. */
|
|
4241
|
+
minImageResolution?: number;
|
|
4242
|
+
/** Below this they are critical. Defaults to 150. */
|
|
4243
|
+
criticalImageResolution?: number;
|
|
4244
|
+
/** Rules and strokes thinner than this get a warning. Defaults to
|
|
4245
|
+
* 0.25 pt. */
|
|
4246
|
+
minRuleWidth?: Dimension;
|
|
4247
|
+
/** Text smaller than this printed with more than one ink (a process
|
|
4248
|
+
* colour, rich black) gets a warning. Defaults to 9 pt. */
|
|
4249
|
+
smallTextSize?: Dimension;
|
|
4250
|
+
/** Distance inside the trim where text and important elements risk the
|
|
4251
|
+
* cut. Defaults to 5 mm. */
|
|
4252
|
+
safeZone?: Dimension;
|
|
4253
|
+
/** Backgrounds, pictures and bands whose edge stops this close to the
|
|
4254
|
+
* trim without reaching the bleed should bleed. Defaults to 3 mm. */
|
|
4255
|
+
bleedSnap?: Dimension;
|
|
4256
|
+
/** Report fonts a placed PDF print master does not embed. Defaults to
|
|
4257
|
+
* true. */
|
|
4258
|
+
checkFonts?: boolean;
|
|
4259
|
+
}
|
|
4260
|
+
export interface ResolvedPrintPreflightConfig {
|
|
4261
|
+
enabled: boolean;
|
|
4262
|
+
minImageResolution: number;
|
|
4263
|
+
criticalImageResolution: number;
|
|
4264
|
+
minRuleWidth: Dimension;
|
|
4265
|
+
smallTextSize: Dimension;
|
|
4266
|
+
safeZone: Dimension;
|
|
4267
|
+
bleedSnap: Dimension;
|
|
4268
|
+
checkFonts: boolean;
|
|
4269
|
+
}
|
|
4270
|
+
/** An ICC output profile the user uploaded (their printer's), stored
|
|
4271
|
+
* out-of-band like a font or a picture. */
|
|
4272
|
+
export interface CustomOutputProfile {
|
|
4273
|
+
/** The profile's name (its `desc` tag, or the file name). */
|
|
4274
|
+
name: string;
|
|
4275
|
+
/** Identifier of the stored `.icc` file. */
|
|
4276
|
+
fileId: string;
|
|
4277
|
+
/** The printing condition's registry name when the profile is one
|
|
4278
|
+
* (e.g. `FOGRA51`), for the PDF/X OutputConditionIdentifier; else
|
|
4279
|
+
* `Custom`. */
|
|
4280
|
+
registryName?: string;
|
|
4281
|
+
/** Total ink limit of the condition, percent. */
|
|
4282
|
+
inkLimit?: number;
|
|
4283
|
+
}
|
|
4284
|
+
/** Print production: the PDF/X standard, the output profile CMYK is
|
|
4285
|
+
* separated with, how black prints, and the preflight thresholds. Layout
|
|
4286
|
+
* ignores it; postext-pdf and the preflight read it. */
|
|
4287
|
+
export interface PrintConfig {
|
|
4288
|
+
/** PDF/X flavour. Defaults to `'none'`. Any PDF/X standard writes CMYK
|
|
4289
|
+
* through the output profile whatever `pdfGeneration.colorSpace` says. */
|
|
4290
|
+
standard?: PdfXStandard;
|
|
4291
|
+
/** The output profile, by catalogue id (`OUTPUT_PROFILES`), or
|
|
4292
|
+
* `'custom'` for `customProfile`. Defaults to `'fogra39'`. */
|
|
4293
|
+
outputProfile?: string;
|
|
4294
|
+
customProfile?: CustomOutputProfile;
|
|
4295
|
+
/** Defaults to `'relative'`. */
|
|
4296
|
+
renderingIntent?: PrintRenderingIntent;
|
|
4297
|
+
/** Map sRGB black to the darkest printable black (relative intent).
|
|
4298
|
+
* Defaults to true. */
|
|
4299
|
+
blackPointCompensation?: boolean;
|
|
4300
|
+
/** Convert RGB pictures to the output CMYK. PDF/X-1a always does; in
|
|
4301
|
+
* PDF/X-4 false keeps them RGB, tagged sRGB, for the printer's RIP.
|
|
4302
|
+
* Defaults to true. */
|
|
4303
|
+
convertImages?: boolean;
|
|
4304
|
+
/** Total area coverage limit, percent. Defaults to the profile's. */
|
|
4305
|
+
inkLimit?: number;
|
|
4306
|
+
black?: PrintBlackConfig;
|
|
4307
|
+
preflight?: PrintPreflightConfig;
|
|
4308
|
+
}
|
|
4309
|
+
export interface ResolvedPrintConfig {
|
|
4310
|
+
standard: PdfXStandard;
|
|
4311
|
+
outputProfile: string;
|
|
4312
|
+
customProfile?: CustomOutputProfile;
|
|
4313
|
+
renderingIntent: PrintRenderingIntent;
|
|
4314
|
+
blackPointCompensation: boolean;
|
|
4315
|
+
convertImages: boolean;
|
|
4316
|
+
/** The configured limit, else the profile's. */
|
|
4317
|
+
inkLimit: number;
|
|
4318
|
+
black: ResolvedPrintBlackConfig;
|
|
4319
|
+
preflight: ResolvedPrintPreflightConfig;
|
|
4320
|
+
}
|
|
4183
4321
|
/** How postext-pdf writes the file. Layout ignores it; the VDT carries it
|
|
4184
4322
|
* (`doc.config.pdfGeneration`), and `renderToPdf` takes each setting from
|
|
4185
4323
|
* its own options first, then from here (the first document's, for a
|
|
@@ -5088,10 +5226,15 @@ export interface ResolvedIndexConfig {
|
|
|
5088
5226
|
}
|
|
5089
5227
|
/** The direction the panels of a comic page are read in: `'ltr'` (Western
|
|
5090
5228
|
* comics: the first panel of a tier at the left), `'rtl'` (manga and
|
|
5091
|
-
* Arabic comics: at the right), `'auto'`:
|
|
5092
|
-
* document (an Arabic edition
|
|
5093
|
-
*
|
|
5094
|
-
*
|
|
5229
|
+
* Arabic comics: at the right), `'auto'`: the direction of the edition's
|
|
5230
|
+
* language, `'rtl'` in a right-to-left document (an Arabic edition), in
|
|
5231
|
+
* a vertical one and in a Japanese or Traditional Chinese one
|
|
5232
|
+
* (`comicsLocaleDirection`): a Japanese edition of a Western comic reads
|
|
5233
|
+
* right to left. Otherwise the direction the art was drawn for
|
|
5234
|
+
* (`artDirection`): a manga reads right to left in any language, a
|
|
5235
|
+
* Western comic left to right in English, Simplified Chinese or Korean.
|
|
5236
|
+
* With `page.binding: 'auto'` a book whose comics read right to left is
|
|
5237
|
+
* bound on the right. A page's `direction` attribute wins. */
|
|
5095
5238
|
export type ComicReadingDirection = 'auto' | 'ltr' | 'rtl';
|
|
5096
5239
|
/** How a panel's border is drawn: a clean stroke, none, or a hand-drawn
|
|
5097
5240
|
* line (a stroke that wobbles, seeded from the panel, so the same page
|
|
@@ -5263,6 +5406,12 @@ export interface BalloonStyleConfig {
|
|
|
5263
5406
|
haloColor?: ColorValue;
|
|
5264
5407
|
/** Rotation in degrees (sound effects). */
|
|
5265
5408
|
rotate?: number;
|
|
5409
|
+
/** Lean of the letters' upright strokes, degrees (sound effects, text
|
|
5410
|
+
* written on the art): positive leans them forward like italic, negative
|
|
5411
|
+
* back. Applied before `rotate`, about the same centre, so a title on a
|
|
5412
|
+
* book cover seen in perspective follows both the cover's top edge
|
|
5413
|
+
* (`rotate`) and its sides (`skew`). Default `0`. */
|
|
5414
|
+
skew?: number;
|
|
5266
5415
|
}
|
|
5267
5416
|
export interface ResolvedBalloonStyleConfig {
|
|
5268
5417
|
id: string;
|
|
@@ -5288,6 +5437,7 @@ export interface ResolvedBalloonStyleConfig {
|
|
|
5288
5437
|
fontScale: number;
|
|
5289
5438
|
align: 'center' | 'start';
|
|
5290
5439
|
rotate: number;
|
|
5440
|
+
skew: number;
|
|
5291
5441
|
/** Unset: the lettering's. */
|
|
5292
5442
|
fontFamily?: string;
|
|
5293
5443
|
bold?: boolean;
|
|
@@ -5316,9 +5466,15 @@ export interface ComicCastMember {
|
|
|
5316
5466
|
* panel styles, the lettering, the balloon styles and the cast. Only
|
|
5317
5467
|
* documents with comic pages read it. */
|
|
5318
5468
|
export interface ComicsConfig {
|
|
5319
|
-
/**
|
|
5469
|
+
/** The order panels are read in (see {@link ComicReadingDirection}).
|
|
5470
|
+
* Default `'auto'`: the edition's language decides (right to left in
|
|
5471
|
+
* Arabic, Japanese, Traditional Chinese and vertical documents), else
|
|
5472
|
+
* {@link artDirection}. */
|
|
5320
5473
|
readingDirection?: ComicReadingDirection;
|
|
5321
|
-
/** The direction the art was drawn for
|
|
5474
|
+
/** The direction the art was drawn for: what `'auto'` reads in when the
|
|
5475
|
+
* edition's language has no direction of its own, and what
|
|
5476
|
+
* {@link mirrorArt} compares the page's direction with. Default
|
|
5477
|
+
* `'ltr'`. */
|
|
5322
5478
|
artDirection?: 'ltr' | 'rtl';
|
|
5323
5479
|
/** Mirror the pictures of a page read in the other direction than
|
|
5324
5480
|
* {@link artDirection} (a panel opts out with `mirror=false`). Default
|
|
@@ -5490,6 +5646,8 @@ export interface PostextConfig {
|
|
|
5490
5646
|
* lettering, cast. */
|
|
5491
5647
|
comics?: ComicsConfig;
|
|
5492
5648
|
pdfGeneration?: PdfGenerationConfig;
|
|
5649
|
+
/** Print production: PDF/X, output profile, black, preflight. */
|
|
5650
|
+
print?: PrintConfig;
|
|
5493
5651
|
colorPalette?: ColorPaletteEntry[];
|
|
5494
5652
|
/** User-provided font families. Referenced the same way as Google Fonts:
|
|
5495
5653
|
* set `bodyText.fontFamily` (or any other font-family field) to the
|