postext 1.35.0 → 1.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__bench__/composedPage.bench.test.d.ts +2 -0
- package/dist/__bench__/composedPage.bench.test.d.ts.map +1 -0
- package/dist/__bench__/composedPage.bench.test.js +95 -0
- package/dist/__bench__/composedPage.bench.test.js.map +1 -0
- package/dist/__tests__/composed/fit.test.d.ts +2 -0
- package/dist/__tests__/composed/fit.test.d.ts.map +1 -0
- package/dist/__tests__/composed/fit.test.js +405 -0
- package/dist/__tests__/composed/fit.test.js.map +1 -0
- package/dist/__tests__/composed/layout.test.js +2 -1
- package/dist/__tests__/composed/layout.test.js.map +1 -1
- package/dist/__tests__/composed/pageMemo.test.d.ts +2 -0
- package/dist/__tests__/composed/pageMemo.test.d.ts.map +1 -0
- package/dist/__tests__/composed/pageMemo.test.js +128 -0
- package/dist/__tests__/composed/pageMemo.test.js.map +1 -0
- package/dist/__tests__/composed/sourceMap.test.d.ts +2 -0
- package/dist/__tests__/composed/sourceMap.test.d.ts.map +1 -0
- package/dist/__tests__/composed/sourceMap.test.js +369 -0
- package/dist/__tests__/composed/sourceMap.test.js.map +1 -0
- package/dist/__tests__/composed/templateFrameRects.test.d.ts +2 -0
- package/dist/__tests__/composed/templateFrameRects.test.d.ts.map +1 -0
- package/dist/__tests__/composed/templateFrameRects.test.js +37 -0
- package/dist/__tests__/composed/templateFrameRects.test.js.map +1 -0
- package/dist/__tests__/design/imageAltText.test.js +2 -1
- package/dist/__tests__/design/imageAltText.test.js.map +1 -1
- package/dist/__tests__/exports.test.js +22 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/pipeline/contourWrap.test.d.ts +2 -0
- package/dist/__tests__/pipeline/contourWrap.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/contourWrap.test.js +412 -0
- package/dist/__tests__/pipeline/contourWrap.test.js.map +1 -0
- package/dist/__tests__/toc.test.js +3 -2
- package/dist/__tests__/toc.test.js.map +1 -1
- package/dist/bundle/codec.d.ts +16 -0
- package/dist/bundle/codec.d.ts.map +1 -1
- package/dist/bundle/codec.js +44 -2
- package/dist/bundle/codec.js.map +1 -1
- package/dist/bundle/index.d.ts +1 -1
- package/dist/bundle/index.d.ts.map +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/index.js.map +1 -1
- package/dist/canvas-backend/composed.d.ts.map +1 -1
- package/dist/canvas-backend/composed.js +5 -2
- package/dist/canvas-backend/composed.js.map +1 -1
- package/dist/composed/contour.d.ts +21 -0
- package/dist/composed/contour.d.ts.map +1 -0
- package/dist/composed/contour.js +34 -0
- package/dist/composed/contour.js.map +1 -0
- package/dist/composed/geometry.d.ts +8 -0
- package/dist/composed/geometry.d.ts.map +1 -1
- package/dist/composed/geometry.js +26 -0
- package/dist/composed/geometry.js.map +1 -1
- package/dist/composed/ids.d.ts +22 -0
- package/dist/composed/ids.d.ts.map +1 -0
- package/dist/composed/ids.js +32 -0
- package/dist/composed/ids.js.map +1 -0
- package/dist/composed/pageMemo.d.ts +72 -0
- package/dist/composed/pageMemo.d.ts.map +1 -0
- package/dist/composed/pageMemo.js +287 -0
- package/dist/composed/pageMemo.js.map +1 -0
- package/dist/composed/paint.d.ts +21 -7
- package/dist/composed/paint.d.ts.map +1 -1
- package/dist/composed/paint.js +33 -5
- package/dist/composed/paint.js.map +1 -1
- package/dist/composed/reflowLog.d.ts +11 -1
- package/dist/composed/reflowLog.d.ts.map +1 -1
- package/dist/composed/reflowLog.js +45 -2
- package/dist/composed/reflowLog.js.map +1 -1
- package/dist/composed/slotChecks.d.ts.map +1 -1
- package/dist/composed/slotChecks.js +3 -1
- package/dist/composed/slotChecks.js.map +1 -1
- package/dist/composed/sourceMap.d.ts +118 -0
- package/dist/composed/sourceMap.d.ts.map +1 -0
- package/dist/composed/sourceMap.js +668 -0
- package/dist/composed/sourceMap.js.map +1 -0
- package/dist/composed/spread.d.ts.map +1 -1
- package/dist/composed/spread.js +10 -11
- package/dist/composed/spread.js.map +1 -1
- package/dist/composed/templates.d.ts +1 -0
- package/dist/composed/templates.d.ts.map +1 -1
- package/dist/composed/templates.js +4 -0
- package/dist/composed/templates.js.map +1 -1
- package/dist/composed/types.d.ts +15 -32
- package/dist/composed/types.d.ts.map +1 -1
- package/dist/composed/validate.d.ts.map +1 -1
- package/dist/composed/validate.js +3 -2
- package/dist/composed/validate.js.map +1 -1
- package/dist/composed/wrap.d.ts.map +1 -1
- package/dist/composed/wrap.js +7 -1
- package/dist/composed/wrap.js.map +1 -1
- package/dist/contour/index.d.ts +134 -0
- package/dist/contour/index.d.ts.map +1 -0
- package/dist/contour/index.js +354 -0
- package/dist/contour/index.js.map +1 -0
- package/dist/contour/png.d.ts +16 -0
- package/dist/contour/png.d.ts.map +1 -0
- package/dist/contour/png.js +173 -0
- package/dist/contour/png.js.map +1 -0
- package/dist/html-backend.js +2 -2
- package/dist/html-backend.js.map +1 -1
- package/dist/index.d.ts +12 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -3
- package/dist/index.js.map +1 -1
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +2 -0
- package/dist/measure/rich.js.map +1 -1
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +44 -3
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/types.d.ts +20 -0
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +108 -8
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildMeasurement.d.ts +7 -2
- package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
- package/dist/pipeline/buildMeasurement.js +10 -5
- package/dist/pipeline/buildMeasurement.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts +20 -14
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +20 -2
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/composedLayout.d.ts +36 -5
- package/dist/pipeline/composedLayout.d.ts.map +1 -1
- package/dist/pipeline/composedLayout.js +553 -68
- package/dist/pipeline/composedLayout.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +13 -4
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/floatPlacement.d.ts +2 -0
- package/dist/pipeline/floatPlacement.d.ts.map +1 -1
- package/dist/pipeline/floatPlacement.js +1 -0
- package/dist/pipeline/floatPlacement.js.map +1 -1
- package/dist/pipeline/frameLayout.d.ts +3 -3
- package/dist/pipeline/frameLayout.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.d.ts +9 -0
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +56 -4
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +1 -0
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/outline.d.ts.map +1 -1
- package/dist/pipeline/outline.js +2 -0
- package/dist/pipeline/outline.js.map +1 -1
- package/dist/pipeline/textWrap.d.ts +4 -1
- package/dist/pipeline/textWrap.d.ts.map +1 -1
- package/dist/pipeline/textWrap.js +17 -3
- package/dist/pipeline/textWrap.js.map +1 -1
- package/dist/pipeline/toc.d.ts.map +1 -1
- package/dist/pipeline/toc.js +1 -0
- package/dist/pipeline/toc.js.map +1 -1
- package/dist/types.d.ts +64 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +155 -11
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import { decodePngAlpha, isPng } from './png';
|
|
2
|
+
export { decodePngAlpha, isPng } from './png';
|
|
3
|
+
/** `ResourceContour.threshold` when unset. */
|
|
4
|
+
export const DEFAULT_CONTOUR_THRESHOLD = 0.5;
|
|
5
|
+
/** The most rows a picture is cut into. */
|
|
6
|
+
export const MAX_CONTOUR_ROWS = 256;
|
|
7
|
+
/** The threshold a contour reads its alpha channel at, 0 to 1. */
|
|
8
|
+
export function contourThreshold(contour) {
|
|
9
|
+
const t = contour?.threshold;
|
|
10
|
+
return typeof t === 'number' && Number.isFinite(t) ? Math.min(1, Math.max(0, t)) : DEFAULT_CONTOUR_THRESHOLD;
|
|
11
|
+
}
|
|
12
|
+
/** Whether the contour's polygon can be used: three points or more, all
|
|
13
|
+
* finite. */
|
|
14
|
+
export function contourPolygon(contour) {
|
|
15
|
+
const pts = contour?.points;
|
|
16
|
+
if (!Array.isArray(pts) || pts.length < 3)
|
|
17
|
+
return undefined;
|
|
18
|
+
return pts.every((p) => p && Number.isFinite(p.x) && Number.isFinite(p.y)) ? pts : undefined;
|
|
19
|
+
}
|
|
20
|
+
/** Whether a resource's shape is read from its alpha channel: a bitmap
|
|
21
|
+
* with no polygon whose contour does not turn the alpha channel off. */
|
|
22
|
+
export function contourWantsAlpha(resource) {
|
|
23
|
+
return resource.kind === 'bitmap' && !contourPolygon(resource.contour) && resource.contour?.alpha !== false;
|
|
24
|
+
}
|
|
25
|
+
const round4 = (n) => Math.round(n * 10000) / 10000;
|
|
26
|
+
/**
|
|
27
|
+
* Trace an alpha raster at `threshold` (0 to 1): the picture is cut into
|
|
28
|
+
* at most {@link MAX_CONTOUR_ROWS} rows, and each row keeps the leftmost
|
|
29
|
+
* and rightmost edge of the pixels at least that opaque.
|
|
30
|
+
*/
|
|
31
|
+
export function traceAlpha(raster, threshold, fileId) {
|
|
32
|
+
const { width, height, alpha } = raster;
|
|
33
|
+
const rows = Math.max(1, Math.min(height, MAX_CONTOUR_ROWS));
|
|
34
|
+
// A pixel belongs to the shape from this opacity on (at least 1: a fully
|
|
35
|
+
// transparent pixel never does).
|
|
36
|
+
const min = Math.max(1, Math.ceil(threshold * 255));
|
|
37
|
+
const spans = [];
|
|
38
|
+
for (let r = 0; r < rows; r++) {
|
|
39
|
+
const y0 = Math.floor((r * height) / rows);
|
|
40
|
+
const y1 = Math.max(y0 + 1, Math.floor(((r + 1) * height) / rows));
|
|
41
|
+
let lo = width;
|
|
42
|
+
let hi = -1;
|
|
43
|
+
for (let y = y0; y < y1; y++) {
|
|
44
|
+
const row = y * width;
|
|
45
|
+
for (let x = 0; x < lo; x++) {
|
|
46
|
+
if (alpha[row + x] >= min) {
|
|
47
|
+
lo = x;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
for (let x = width - 1; x > hi; x--) {
|
|
52
|
+
if (alpha[row + x] >= min) {
|
|
53
|
+
hi = x;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (hi < lo)
|
|
59
|
+
spans.push(-1, -1);
|
|
60
|
+
else
|
|
61
|
+
spans.push(round4(lo / width), round4((hi + 1) / width));
|
|
62
|
+
}
|
|
63
|
+
return { fileId, threshold, rows, spans };
|
|
64
|
+
}
|
|
65
|
+
/** The alpha raster of RGBA pixels; `null` when every pixel is opaque. */
|
|
66
|
+
export function alphaOfRgba(pixels) {
|
|
67
|
+
const { width, height, data } = pixels;
|
|
68
|
+
const alpha = new Uint8Array(width * height);
|
|
69
|
+
let any = false;
|
|
70
|
+
for (let i = 0; i < alpha.length; i++) {
|
|
71
|
+
const a = data[i * 4 + 3];
|
|
72
|
+
alpha[i] = a;
|
|
73
|
+
if (a < 255)
|
|
74
|
+
any = true;
|
|
75
|
+
}
|
|
76
|
+
return any ? { width, height, alpha } : null;
|
|
77
|
+
}
|
|
78
|
+
/** The pixel rows the browser decoder reads at most (a large picture is
|
|
79
|
+
* traced from a smaller copy: rows are cut at 256 anyway). */
|
|
80
|
+
const DECODE_MAX = 1024;
|
|
81
|
+
async function decodeInBrowser(bytes, mime) {
|
|
82
|
+
const g = globalThis;
|
|
83
|
+
if (!g.createImageBitmap || !g.OffscreenCanvas || typeof Blob === 'undefined')
|
|
84
|
+
return undefined;
|
|
85
|
+
try {
|
|
86
|
+
const bitmap = await g.createImageBitmap(new Blob([bytes], { type: mime }));
|
|
87
|
+
const scale = Math.min(1, DECODE_MAX / Math.max(bitmap.width, bitmap.height));
|
|
88
|
+
const w = Math.max(1, Math.round(bitmap.width * scale));
|
|
89
|
+
const h = Math.max(1, Math.round(bitmap.height * scale));
|
|
90
|
+
const ctx = new g.OffscreenCanvas(w, h).getContext('2d');
|
|
91
|
+
if (!ctx)
|
|
92
|
+
return undefined;
|
|
93
|
+
ctx.drawImage(bitmap, 0, 0, w, h);
|
|
94
|
+
bitmap.close?.();
|
|
95
|
+
return ctx.getImageData(0, 0, w, h);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Trace the alpha channel of a bitmap resource from its file's bytes, for
|
|
103
|
+
* `contour.traced` (#883). A PNG is read here, in any host; another format
|
|
104
|
+
* goes through `options.decode` (by default the browser's decoder, where
|
|
105
|
+
* there is one). `null`: the picture has no transparency (a JPEG, an
|
|
106
|
+
* opaque PNG): it has no shape and runs round its box. `undefined`: the
|
|
107
|
+
* resource asks for no alpha contour, or the file cannot be read here.
|
|
108
|
+
*/
|
|
109
|
+
export async function traceResourceContour(resource, bytes, mime, options = {}) {
|
|
110
|
+
if (!contourWantsAlpha(resource) || !resource.bitmap)
|
|
111
|
+
return undefined;
|
|
112
|
+
const fileId = resource.bitmap.fileId;
|
|
113
|
+
const threshold = contourThreshold(resource.contour);
|
|
114
|
+
const u8 = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
|
|
115
|
+
if (isPng(u8)) {
|
|
116
|
+
const raster = decodePngAlpha(u8);
|
|
117
|
+
if (raster)
|
|
118
|
+
return traceAlpha(raster, threshold, fileId);
|
|
119
|
+
if (raster === null)
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
if (/jpe?g/i.test(mime))
|
|
123
|
+
return null;
|
|
124
|
+
const pixels = await (options.decode ?? decodeInBrowser)(u8, mime);
|
|
125
|
+
if (!pixels)
|
|
126
|
+
return undefined;
|
|
127
|
+
const raster = alphaOfRgba(pixels);
|
|
128
|
+
return raster ? traceAlpha(raster, threshold, fileId) : null;
|
|
129
|
+
}
|
|
130
|
+
/** The resource with `contour.traced` set to `trace` (or cleared). */
|
|
131
|
+
export function withContourTrace(resource, trace) {
|
|
132
|
+
const { traced: _old, ...rest } = resource.contour ?? {};
|
|
133
|
+
void _old;
|
|
134
|
+
return { ...resource, contour: trace ? { ...rest, traced: trace } : rest };
|
|
135
|
+
}
|
|
136
|
+
/** Whether a trace was made from the resource's file at its threshold. */
|
|
137
|
+
function traceFits(resource, trace) {
|
|
138
|
+
if (!trace || !resource.bitmap || trace.fileId !== resource.bitmap.fileId)
|
|
139
|
+
return false;
|
|
140
|
+
if (Math.abs(trace.threshold - contourThreshold(resource.contour)) > 1e-6)
|
|
141
|
+
return false;
|
|
142
|
+
return Number.isInteger(trace.rows) && trace.rows > 0 && Array.isArray(trace.spans) && trace.spans.length === trace.rows * 2;
|
|
143
|
+
}
|
|
144
|
+
const polygonCache = new WeakMap();
|
|
145
|
+
/** A polygon (fractions of the picture) as rows: per row the extent of the
|
|
146
|
+
* polygon's intersection with it. */
|
|
147
|
+
export function polygonRows(points, rows = MAX_CONTOUR_ROWS) {
|
|
148
|
+
const cached = rows === MAX_CONTOUR_ROWS ? polygonCache.get(points) : undefined;
|
|
149
|
+
if (cached)
|
|
150
|
+
return cached;
|
|
151
|
+
const spans = [];
|
|
152
|
+
const n = points.length;
|
|
153
|
+
for (let r = 0; r < rows; r++) {
|
|
154
|
+
const y0 = r / rows;
|
|
155
|
+
const y1 = (r + 1) / rows;
|
|
156
|
+
let lo = Infinity;
|
|
157
|
+
let hi = -Infinity;
|
|
158
|
+
// The band's intersection with the polygon is bounded across by the
|
|
159
|
+
// edges clipped to the band (a vertex inside it included).
|
|
160
|
+
for (let i = 0; i < n; i++) {
|
|
161
|
+
const a = points[i];
|
|
162
|
+
const b = points[(i + 1) % n];
|
|
163
|
+
const top = Math.min(a.y, b.y);
|
|
164
|
+
const bottom = Math.max(a.y, b.y);
|
|
165
|
+
if (bottom < y0 || top > y1)
|
|
166
|
+
continue;
|
|
167
|
+
const xs = [];
|
|
168
|
+
if (Math.abs(b.y - a.y) < 1e-12) {
|
|
169
|
+
xs.push(a.x, b.x);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
const at = (y) => a.x + ((b.x - a.x) * (y - a.y)) / (b.y - a.y);
|
|
173
|
+
xs.push(at(Math.max(top, y0)), at(Math.min(bottom, y1)));
|
|
174
|
+
}
|
|
175
|
+
for (const x of xs) {
|
|
176
|
+
if (x < lo)
|
|
177
|
+
lo = x;
|
|
178
|
+
if (x > hi)
|
|
179
|
+
hi = x;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (hi < lo)
|
|
183
|
+
spans.push(-1, -1);
|
|
184
|
+
else
|
|
185
|
+
spans.push(round4(Math.max(0, Math.min(1, lo))), round4(Math.max(0, Math.min(1, hi))));
|
|
186
|
+
}
|
|
187
|
+
const out = { rows, spans };
|
|
188
|
+
if (rows === MAX_CONTOUR_ROWS)
|
|
189
|
+
polygonCache.set(points, out);
|
|
190
|
+
return out;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* The shape of a resource in rows, when it has one: its polygon, else the
|
|
194
|
+
* alpha channel its host traced (a trace of this file at this threshold).
|
|
195
|
+
* `undefined`: no shape is known (an SVG with no polygon, a bitmap whose
|
|
196
|
+
* alpha channel was not traced, or has no transparency).
|
|
197
|
+
*/
|
|
198
|
+
export function contourRowsOf(resource) {
|
|
199
|
+
const poly = contourPolygon(resource.contour);
|
|
200
|
+
if (poly)
|
|
201
|
+
return polygonRows(poly);
|
|
202
|
+
if (!contourWantsAlpha(resource))
|
|
203
|
+
return undefined;
|
|
204
|
+
const trace = resource.contour?.traced;
|
|
205
|
+
return traceFits(resource, trace) ? trace : undefined;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* The shape of a picture set on the page as `rb` (its body at
|
|
209
|
+
* `rb.bodyRect` from the block's origin, showing `rb.bodySource` of the
|
|
210
|
+
* picture: the crop within its safe area), in page px: the shape's rows
|
|
211
|
+
* inside the crop, scaled to the body; and `box` (page px), the rest of
|
|
212
|
+
* the figure (its caption and note under the picture) as bands of its own
|
|
213
|
+
* width. `undefined` when the resource
|
|
214
|
+
* has no known shape.
|
|
215
|
+
*/
|
|
216
|
+
export function contourOnPage(resource, rb, box, options) {
|
|
217
|
+
const shape = contourRowsOf(resource);
|
|
218
|
+
if (!shape)
|
|
219
|
+
return undefined;
|
|
220
|
+
const body = { x: rb.bodyRect.x + (options.originX ?? 0), y: rb.bodyRect.y + (options.originY ?? 0), width: rb.bodyRect.width, height: rb.bodyRect.height };
|
|
221
|
+
if (!(body.width > 0) || !(body.height > 0))
|
|
222
|
+
return undefined;
|
|
223
|
+
const crop = rb.bodySource ?? { x: 0, y: 0, width: 1, height: 1 };
|
|
224
|
+
if (!(crop.width > 0) || !(crop.height > 0))
|
|
225
|
+
return undefined;
|
|
226
|
+
const spans = [];
|
|
227
|
+
const push = (s) => {
|
|
228
|
+
const last = spans[spans.length - 1];
|
|
229
|
+
if (last && Math.abs(last.left - s.left) < 0.01 && Math.abs(last.right - s.right) < 0.01 && Math.abs(last.y + last.height - s.y) < 0.01) {
|
|
230
|
+
last.height = s.y + s.height - last.y;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
spans.push(s);
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
const cropRight = crop.x + crop.width;
|
|
237
|
+
const cropBottom = crop.y + crop.height;
|
|
238
|
+
for (let r = 0; r < shape.rows; r++) {
|
|
239
|
+
const l = shape.spans[r * 2];
|
|
240
|
+
const rr = shape.spans[r * 2 + 1];
|
|
241
|
+
if (l < 0 || rr < 0)
|
|
242
|
+
continue;
|
|
243
|
+
const sy0 = Math.max(crop.y, r / shape.rows);
|
|
244
|
+
const sy1 = Math.min(cropBottom, (r + 1) / shape.rows);
|
|
245
|
+
if (sy1 <= sy0)
|
|
246
|
+
continue;
|
|
247
|
+
const sl = Math.max(crop.x, l);
|
|
248
|
+
const sr = Math.min(cropRight, rr);
|
|
249
|
+
if (sr <= sl)
|
|
250
|
+
continue;
|
|
251
|
+
let u0 = (sl - crop.x) / crop.width;
|
|
252
|
+
let u1 = (sr - crop.x) / crop.width;
|
|
253
|
+
if (options.mirrored)
|
|
254
|
+
[u0, u1] = [1 - u1, 1 - u0];
|
|
255
|
+
const y = body.y + ((sy0 - crop.y) / crop.height) * body.height;
|
|
256
|
+
const yEnd = body.y + ((sy1 - crop.y) / crop.height) * body.height;
|
|
257
|
+
push({ y, height: yEnd - y, left: body.x + u0 * body.width, right: body.x + u1 * body.width });
|
|
258
|
+
}
|
|
259
|
+
if (box) {
|
|
260
|
+
// The caption and note keep their box: the figure's width, above or
|
|
261
|
+
// under the picture.
|
|
262
|
+
const bx = box.x;
|
|
263
|
+
const by = box.y;
|
|
264
|
+
const bottom = by + box.height;
|
|
265
|
+
if (body.y > by + 0.5)
|
|
266
|
+
spans.unshift({ y: by, height: body.y - by, left: bx, right: bx + box.width });
|
|
267
|
+
const bodyBottom = body.y + body.height;
|
|
268
|
+
if (bottom > bodyBottom + 0.5)
|
|
269
|
+
push({ y: bodyBottom, height: bottom - bodyBottom, left: bx, right: bx + box.width });
|
|
270
|
+
}
|
|
271
|
+
return { spans, margin: Math.max(0, options.margin), ...(options.quantum && options.quantum > 0 ? { quantum: options.quantum } : {}) };
|
|
272
|
+
}
|
|
273
|
+
/** A contour moved by `(dx, dy)`. */
|
|
274
|
+
export function shiftContour(c, dx, dy) {
|
|
275
|
+
return { ...c, spans: c.spans.map((s) => ({ y: s.y + dy, height: s.height, left: s.left + dx, right: s.right + dx })) };
|
|
276
|
+
}
|
|
277
|
+
/** A contour scaled by `s` about `(ox, oy)`: a frame's content laid out
|
|
278
|
+
* at another scale than it is painted (#858). `margin: false` keeps the
|
|
279
|
+
* margin (and the CJK quantum) as they are: they are page px already. */
|
|
280
|
+
export function scaleContourAbout(c, ox, oy, s, margin = true) {
|
|
281
|
+
return {
|
|
282
|
+
spans: c.spans.map((sp) => ({ y: oy + (sp.y - oy) * s, height: sp.height * s, left: ox + (sp.left - ox) * s, right: ox + (sp.right - ox) * s })),
|
|
283
|
+
margin: margin ? c.margin * s : c.margin,
|
|
284
|
+
...(c.quantum !== undefined ? { quantum: margin ? c.quantum * s : c.quantum } : {}),
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
/** The contour's bounds, its margin included. */
|
|
288
|
+
export function contourBounds(c) {
|
|
289
|
+
if (c.spans.length === 0)
|
|
290
|
+
return undefined;
|
|
291
|
+
let x0 = Infinity;
|
|
292
|
+
let y0 = Infinity;
|
|
293
|
+
let x1 = -Infinity;
|
|
294
|
+
let y1 = -Infinity;
|
|
295
|
+
for (const s of c.spans) {
|
|
296
|
+
x0 = Math.min(x0, s.left);
|
|
297
|
+
x1 = Math.max(x1, s.right);
|
|
298
|
+
y0 = Math.min(y0, s.y);
|
|
299
|
+
y1 = Math.max(y1, s.y + s.height);
|
|
300
|
+
}
|
|
301
|
+
const m = c.margin;
|
|
302
|
+
return { x: x0 - m, y: y0 - m, width: x1 - x0 + 2 * m, height: y1 - y0 + 2 * m };
|
|
303
|
+
}
|
|
304
|
+
/** The shape's extent across the band `[top, bottom]` of the page: the
|
|
305
|
+
* spans that lie within its margin of it. `undefined`: the band passes
|
|
306
|
+
* clear of the shape. */
|
|
307
|
+
export function contourExtent(c, top, bottom) {
|
|
308
|
+
let left = Infinity;
|
|
309
|
+
let right = -Infinity;
|
|
310
|
+
const m = c.margin;
|
|
311
|
+
for (const s of c.spans) {
|
|
312
|
+
if (s.y + s.height <= top - m + 0.01 || s.y >= bottom + m - 0.01)
|
|
313
|
+
continue;
|
|
314
|
+
if (s.left < left)
|
|
315
|
+
left = s.left;
|
|
316
|
+
if (s.right > right)
|
|
317
|
+
right = s.right;
|
|
318
|
+
}
|
|
319
|
+
return right > left ? { left: left - m, right: right + m } : undefined;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* The insets of lines `from` to `to` (0-based, of a text whose line 0's
|
|
323
|
+
* top is at `y0`, lines `lineHeight` apart) beside a shape at `side` of a
|
|
324
|
+
* measure `[x, x + width]`: each line is set short by the room the shape
|
|
325
|
+
* takes across its band (its margin included), none where it passes clear
|
|
326
|
+
* of it. Line numbers in the steps count from `firstLine`.
|
|
327
|
+
*/
|
|
328
|
+
export function contourInsetSteps(c, side, x, width, y0, lineHeight, from, to, firstLine = 0) {
|
|
329
|
+
const steps = [];
|
|
330
|
+
const right = x + width;
|
|
331
|
+
for (let li = from; li <= to; li++) {
|
|
332
|
+
const top = y0 + li * lineHeight;
|
|
333
|
+
const ext = contourExtent(c, top, top + lineHeight);
|
|
334
|
+
let inset = 0;
|
|
335
|
+
if (ext)
|
|
336
|
+
inset = side === 'left' ? ext.right - x : right - ext.left;
|
|
337
|
+
inset = Math.max(0, Math.min(width, inset));
|
|
338
|
+
if (c.quantum && inset > 0)
|
|
339
|
+
inset = Math.min(width, Math.ceil((inset - 0.01) / c.quantum) * c.quantum);
|
|
340
|
+
if (inset <= 0.01)
|
|
341
|
+
continue;
|
|
342
|
+
const last = steps[steps.length - 1];
|
|
343
|
+
const startInsetPx = side === 'left' ? inset : 0;
|
|
344
|
+
const endInsetPx = side === 'right' ? inset : 0;
|
|
345
|
+
if (last && last.toLine === firstLine + li - 1 && Math.abs(last.startInsetPx - startInsetPx) < 0.01 && Math.abs(last.endInsetPx - endInsetPx) < 0.01) {
|
|
346
|
+
last.toLine = firstLine + li;
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
steps.push({ fromLine: firstLine + li, toLine: firstLine + li, startInsetPx, endInsetPx });
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return steps;
|
|
353
|
+
}
|
|
354
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contour/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAoB,MAAM,OAAO,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAoB,MAAM,OAAO,CAAC;AAEhE,8CAA8C;AAC9C,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAC7C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAUpC,kEAAkE;AAClE,MAAM,UAAU,gBAAgB,CAAC,OAAoC;IACnE,MAAM,CAAC,GAAG,OAAO,EAAE,SAAS,CAAC;IAC7B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC;AAC/G,CAAC;AAED;cACc;AACd,MAAM,UAAU,cAAc,CAAC,OAAoC;IACjE,MAAM,GAAG,GAAG,OAAO,EAAE,MAAM,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/F,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,CAAC;AAC9G,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;AAEpE;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,SAAiB,EAAE,MAAc;IAC/E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC7D,yEAAyE;IACzE,iCAAiC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACnE,IAAI,EAAE,GAAG,KAAK,CAAC;QACf,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,GAAG,EAAE,CAAC;oBAAC,EAAE,GAAG,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAChD,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,GAAG,EAAE,CAAC;oBAAC,EAAE,GAAG,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAChD,CAAC;QACH,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;YAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC;AASD,0EAA0E;AAC1E,MAAM,UAAU,WAAW,CAAC,MAAkB;IAC5C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IAC7C,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC;QAC3B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,GAAG;YAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AASD;+DAC+D;AAC/D,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,KAAK,UAAU,eAAe,CAAC,KAAiB,EAAE,IAAY;IAC5D,MAAM,CAAC,GAAG,UAGT,CAAC;IACF,IAAI,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,eAAe,IAAI,OAAO,IAAI,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IAChG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,CAAC,KAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACxF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAkB,EAClB,KAA+B,EAC/B,IAAY,EACZ,UAA+B,EAAE;IAEjC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACtC,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,MAAM;YAAE,OAAO,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;IACnC,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,gBAAgB,CAAC,QAAkB,EAAE,KAAsC;IACzF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACzD,KAAK,IAAI,CAAC;IACV,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7E,CAAC;AAED,0EAA0E;AAC1E,SAAS,SAAS,CAAC,QAAkB,EAAE,KAA+B;IACpE,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxF,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI;QAAE,OAAO,KAAK,CAAC;IACxF,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;AAC/H,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,OAAO,EAAoD,CAAC;AAErF;sCACsC;AACtC,MAAM,UAAU,WAAW,CAAC,MAA2C,EAAE,IAAI,GAAG,gBAAgB;IAC9F,MAAM,MAAM,GAAG,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;QACpB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QAC1B,IAAI,EAAE,GAAG,QAAQ,CAAC;QAClB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC;QACnB,oEAAoE;QACpE,2DAA2D;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;YACrB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,MAAM,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE;gBAAE,SAAS;YACtC,MAAM,EAAE,GAAa,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;gBAChC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChF,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,EAAE;oBAAE,EAAE,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,GAAG,EAAE;oBAAE,EAAE,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;YAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC5B,IAAI,IAAI,KAAK,gBAAgB;QAAE,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7D,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,IAAI;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACvC,OAAO,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAiBD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAkB,EAClB,EAA0D,EAC1D,GAA4B,EAC5B,OAA6B;IAE7B,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC5J,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAClE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,CAAC,CAAiB,EAAQ,EAAE;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YACxI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,SAAS;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,GAAG,IAAI,GAAG;YAAE,SAAS;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE,IAAI,EAAE;YAAE,SAAS;QACvB,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACpC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACpC,IAAI,OAAO,CAAC,QAAQ;YAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACnE,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,GAAG,EAAE,CAAC;QACR,oEAAoE;QACpE,qBAAqB;QACrB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QACjB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QACjB,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC/B,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG;YAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACtG,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACxC,IAAI,MAAM,GAAG,UAAU,GAAG,GAAG;YAAE,IAAI,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IACvH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACzI,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,YAAY,CAAC,CAAsB,EAAE,EAAU,EAAE,EAAU;IACzE,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;AAC1H,CAAC;AAED;;0EAE0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,CAAsB,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,MAAM,GAAG,IAAI;IACxG,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChJ,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;QACxC,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpF,CAAC;AACJ,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,aAAa,CAAC,CAAsB;IAClD,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,EAAE,GAAG,QAAQ,CAAC;IAClB,IAAI,EAAE,GAAG,QAAQ,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC;IACnB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACxB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3B,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AACnF,CAAC;AAED;;0BAE0B;AAC1B,MAAM,UAAU,aAAa,CAAC,CAAsB,EAAE,GAAW,EAAE,MAAc;IAC/E,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,KAAK,GAAG,CAAC,QAAQ,CAAC;IACtB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI;YAAE,SAAS;QAC3E,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK;YAAE,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,CAAsB,EACtB,IAAsB,EACtB,CAAS,EACT,KAAa,EACb,EAAU,EACV,UAAkB,EAClB,IAAY,EACZ,EAAU,EACV,SAAS,GAAG,CAAC;IAEb,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;IACxB,KAAK,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;QACjC,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,UAAU,CAAC,CAAC;QACpD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,GAAG;YAAE,KAAK,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;QACpE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QACvG,IAAI,KAAK,IAAI,IAAI;YAAE,SAAS;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,MAAM,YAAY,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC;YACrJ,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** One byte of opacity per pixel, row by row (0 transparent, 255 opaque). */
|
|
2
|
+
export interface AlphaRaster {
|
|
3
|
+
width: number;
|
|
4
|
+
height: number;
|
|
5
|
+
alpha: Uint8Array;
|
|
6
|
+
}
|
|
7
|
+
/** Whether `bytes` start as a PNG file. */
|
|
8
|
+
export declare function isPng(bytes: Uint8Array): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* The opacity of every pixel of a PNG. `null` when the picture has no
|
|
11
|
+
* transparency at all (no alpha channel and no `tRNS` chunk: every pixel
|
|
12
|
+
* is opaque); `undefined` when the file cannot be read here (not a PNG,
|
|
13
|
+
* damaged, interlaced).
|
|
14
|
+
*/
|
|
15
|
+
export declare function decodePngAlpha(input: ArrayBuffer | Uint8Array): AlphaRaster | null | undefined;
|
|
16
|
+
//# sourceMappingURL=png.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"png.d.ts","sourceRoot":"","sources":["../../src/contour/png.ts"],"names":[],"mappings":"AAQA,6EAA6E;AAC7E,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,CAAC;CACnB;AAMD,2CAA2C;AAC3C,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAIhD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,CA2H9F"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The alpha channel of a PNG, read synchronously (#883): the shape a
|
|
3
|
+
* contour wrap runs round is traced from it in any host, the browser's
|
|
4
|
+
* layout worker and Node alike, with no canvas. Only what the trace needs
|
|
5
|
+
* is decoded: the opacity of every pixel.
|
|
6
|
+
*/
|
|
7
|
+
import { unzlibSync } from 'fflate';
|
|
8
|
+
const SIGNATURE = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
|
|
9
|
+
/** Channels per pixel by colour type. */
|
|
10
|
+
const CHANNELS = { 0: 1, 2: 3, 3: 1, 4: 2, 6: 4 };
|
|
11
|
+
/** Whether `bytes` start as a PNG file. */
|
|
12
|
+
export function isPng(bytes) {
|
|
13
|
+
if (bytes.length < 8)
|
|
14
|
+
return false;
|
|
15
|
+
for (let i = 0; i < 8; i++)
|
|
16
|
+
if (bytes[i] !== SIGNATURE[i])
|
|
17
|
+
return false;
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The opacity of every pixel of a PNG. `null` when the picture has no
|
|
22
|
+
* transparency at all (no alpha channel and no `tRNS` chunk: every pixel
|
|
23
|
+
* is opaque); `undefined` when the file cannot be read here (not a PNG,
|
|
24
|
+
* damaged, interlaced).
|
|
25
|
+
*/
|
|
26
|
+
export function decodePngAlpha(input) {
|
|
27
|
+
const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);
|
|
28
|
+
if (!isPng(bytes))
|
|
29
|
+
return undefined;
|
|
30
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
31
|
+
let width = 0;
|
|
32
|
+
let height = 0;
|
|
33
|
+
let depth = 0;
|
|
34
|
+
let type = -1;
|
|
35
|
+
let interlace = 0;
|
|
36
|
+
let trns;
|
|
37
|
+
const idat = [];
|
|
38
|
+
let at = 8;
|
|
39
|
+
while (at + 8 <= bytes.length) {
|
|
40
|
+
const len = view.getUint32(at);
|
|
41
|
+
const name = String.fromCharCode(bytes[at + 4], bytes[at + 5], bytes[at + 6], bytes[at + 7]);
|
|
42
|
+
const data = bytes.subarray(at + 8, at + 8 + len);
|
|
43
|
+
if (data.length < len)
|
|
44
|
+
return undefined;
|
|
45
|
+
if (name === 'IHDR') {
|
|
46
|
+
width = view.getUint32(at + 8);
|
|
47
|
+
height = view.getUint32(at + 12);
|
|
48
|
+
depth = bytes[at + 16];
|
|
49
|
+
type = bytes[at + 17];
|
|
50
|
+
interlace = bytes[at + 20];
|
|
51
|
+
}
|
|
52
|
+
else if (name === 'tRNS') {
|
|
53
|
+
trns = data;
|
|
54
|
+
}
|
|
55
|
+
else if (name === 'IDAT') {
|
|
56
|
+
idat.push(data);
|
|
57
|
+
}
|
|
58
|
+
else if (name === 'IEND') {
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
at += 12 + len;
|
|
62
|
+
}
|
|
63
|
+
const channels = CHANNELS[type];
|
|
64
|
+
if (!channels || width <= 0 || height <= 0 || idat.length === 0 || interlace !== 0)
|
|
65
|
+
return undefined;
|
|
66
|
+
if (![1, 2, 4, 8, 16].includes(depth))
|
|
67
|
+
return undefined;
|
|
68
|
+
const hasAlpha = type === 4 || type === 6;
|
|
69
|
+
if (!hasAlpha && !trns)
|
|
70
|
+
return null;
|
|
71
|
+
let total = 0;
|
|
72
|
+
for (const d of idat)
|
|
73
|
+
total += d.length;
|
|
74
|
+
const packed = new Uint8Array(total);
|
|
75
|
+
let off = 0;
|
|
76
|
+
for (const d of idat) {
|
|
77
|
+
packed.set(d, off);
|
|
78
|
+
off += d.length;
|
|
79
|
+
}
|
|
80
|
+
let raw;
|
|
81
|
+
try {
|
|
82
|
+
raw = unzlibSync(packed);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
const bitsPerPixel = channels * depth;
|
|
88
|
+
const stride = Math.ceil((width * bitsPerPixel) / 8);
|
|
89
|
+
const bpp = Math.max(1, bitsPerPixel >> 3);
|
|
90
|
+
if (raw.length < (stride + 1) * height)
|
|
91
|
+
return undefined;
|
|
92
|
+
const alpha = new Uint8Array(width * height);
|
|
93
|
+
let prev = new Uint8Array(stride);
|
|
94
|
+
let cur = new Uint8Array(stride);
|
|
95
|
+
const sample = (row, index) => {
|
|
96
|
+
// The `index`-th sample of the row, at the file's bit depth.
|
|
97
|
+
if (depth === 8)
|
|
98
|
+
return row[index];
|
|
99
|
+
if (depth === 16)
|
|
100
|
+
return (row[index * 2] << 8) | row[index * 2 + 1];
|
|
101
|
+
const bit = index * depth;
|
|
102
|
+
const byte = row[bit >> 3];
|
|
103
|
+
const shift = 8 - depth - (bit & 7);
|
|
104
|
+
return (byte >> shift) & ((1 << depth) - 1);
|
|
105
|
+
};
|
|
106
|
+
const max = (1 << depth) - 1;
|
|
107
|
+
const keyOf = (i) => (trns && trns.length >= (i + 1) * 2 ? (trns[i * 2] << 8) | trns[i * 2 + 1] : -1);
|
|
108
|
+
const key = type === 0 ? keyOf(0) : -1;
|
|
109
|
+
const keyRgb = type === 2 ? [keyOf(0), keyOf(1), keyOf(2)] : undefined;
|
|
110
|
+
for (let y = 0; y < height; y++) {
|
|
111
|
+
const base = y * (stride + 1);
|
|
112
|
+
const filter = raw[base];
|
|
113
|
+
for (let i = 0; i < stride; i++) {
|
|
114
|
+
const x = raw[base + 1 + i];
|
|
115
|
+
const a = i >= bpp ? cur[i - bpp] : 0;
|
|
116
|
+
const b = prev[i];
|
|
117
|
+
const c = i >= bpp ? prev[i - bpp] : 0;
|
|
118
|
+
let v;
|
|
119
|
+
switch (filter) {
|
|
120
|
+
case 0:
|
|
121
|
+
v = x;
|
|
122
|
+
break;
|
|
123
|
+
case 1:
|
|
124
|
+
v = x + a;
|
|
125
|
+
break;
|
|
126
|
+
case 2:
|
|
127
|
+
v = x + b;
|
|
128
|
+
break;
|
|
129
|
+
case 3:
|
|
130
|
+
v = x + ((a + b) >> 1);
|
|
131
|
+
break;
|
|
132
|
+
case 4: {
|
|
133
|
+
const p = a + b - c;
|
|
134
|
+
const pa = Math.abs(p - a);
|
|
135
|
+
const pb = Math.abs(p - b);
|
|
136
|
+
const pc = Math.abs(p - c);
|
|
137
|
+
v = x + (pa <= pb && pa <= pc ? a : pb <= pc ? b : c);
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
default: return undefined;
|
|
141
|
+
}
|
|
142
|
+
cur[i] = v & 0xff;
|
|
143
|
+
}
|
|
144
|
+
const row = y * width;
|
|
145
|
+
for (let px = 0; px < width; px++) {
|
|
146
|
+
let o;
|
|
147
|
+
if (type === 6)
|
|
148
|
+
o = sample(cur, px * 4 + 3);
|
|
149
|
+
else if (type === 4)
|
|
150
|
+
o = sample(cur, px * 2 + 1);
|
|
151
|
+
else if (type === 3) {
|
|
152
|
+
const idx = sample(cur, px);
|
|
153
|
+
alpha[row + px] = trns && idx < trns.length ? trns[idx] : 255;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
else if (type === 0) {
|
|
157
|
+
o = sample(cur, px) === key ? 0 : max;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const r = sample(cur, px * 3);
|
|
161
|
+
const g = sample(cur, px * 3 + 1);
|
|
162
|
+
const bl = sample(cur, px * 3 + 2);
|
|
163
|
+
o = keyRgb && r === keyRgb[0] && g === keyRgb[1] && bl === keyRgb[2] ? 0 : max;
|
|
164
|
+
}
|
|
165
|
+
alpha[row + px] = depth === 8 ? o : Math.round((o / max) * 255);
|
|
166
|
+
}
|
|
167
|
+
const t = prev;
|
|
168
|
+
prev = cur;
|
|
169
|
+
cur = t;
|
|
170
|
+
}
|
|
171
|
+
return { width, height, alpha };
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=png.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"png.js","sourceRoot":"","sources":["../../src/contour/png.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AASpC,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACnE,yCAAyC;AACzC,MAAM,QAAQ,GAA2B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAE1E,2CAA2C;AAC3C,MAAM,UAAU,KAAK,CAAC,KAAiB;IACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACxE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAA+B;IAC5D,MAAM,KAAK,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,IAA4B,CAAC;IACjC,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,OAAO,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;QACjG,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;YAAE,OAAO,SAAS,CAAC;QACxC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/B,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACjC,KAAK,GAAG,KAAK,CAAC,EAAE,GAAG,EAAE,CAAE,CAAC;YACxB,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,EAAE,CAAE,CAAC;YACvB,SAAS,GAAG,KAAK,CAAC,EAAE,GAAG,EAAE,CAAE,CAAC;QAC9B,CAAC;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM;QACR,CAAC;QACD,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACrG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnB,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC;IAClB,CAAC;IACD,IAAI,GAAe,CAAC;IACpB,IAAI,CAAC;QACH,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC;IAC3C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM;QAAE,OAAO,SAAS,CAAC;IAEzD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IAC7C,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,GAAe,EAAE,KAAa,EAAU,EAAE;QACxD,6DAA6D;QAC7D,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC,KAAK,CAAE,CAAC;QACpC,IAAI,KAAK,KAAK,EAAE;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC;QACtE,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC;QAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxH,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,CAAS,CAAC;YACd,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,CAAC;oBAAE,CAAC,GAAG,CAAC,CAAC;oBAAC,MAAM;gBACrB,KAAK,CAAC;oBAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAAC,MAAM;gBACzB,KAAK,CAAC;oBAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAAC,MAAM;gBACzB,KAAK,CAAC;oBAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAAC,MAAM;gBACtC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACP,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACpB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC3B,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtD,MAAM;gBACR,CAAC;gBACD,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,CAAC;YACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;YAClC,IAAI,CAAS,CAAC;YACd,IAAI,IAAI,KAAK,CAAC;gBAAE,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;iBACvC,IAAI,IAAI,KAAK,CAAC;gBAAE,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC5C,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC5B,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC/D,SAAS;YACX,CAAC;iBAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACtB,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnC,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACjF,CAAC;YACD,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,IAAI,GAAG,GAAG,CAAC;QACX,GAAG,GAAG,CAAC,CAAC;IACV,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC"}
|
package/dist/html-backend.js
CHANGED
|
@@ -25,7 +25,7 @@ import { isHlsMimeType, mediaFragment, videoElementAttributes, videoEmbedAllow }
|
|
|
25
25
|
import { renderComicHtml } from './htmlComic';
|
|
26
26
|
import { comicBlockOnSheet, pageComics } from './comics/transform';
|
|
27
27
|
import { altWithLabels } from './composed/labelText';
|
|
28
|
-
import { composedFrameBlockIds, composedPaintOrder, composedReadingOrder, composedSheetClip, frameClips, frameMatrix } from './composed/paint';
|
|
28
|
+
import { composedFrameBlockIds, composedPaintOrder, composedReadingOrder, composedSheetClip, frameClips, frameContentRect, frameMatrix } from './composed/paint';
|
|
29
29
|
import { taskBoxSvgBody, taskBoxText } from './taskBox';
|
|
30
30
|
/**
|
|
31
31
|
* Declarations of every box of CJK text measured with no punctuation
|
|
@@ -3050,7 +3050,7 @@ function composedFrameOpen(frame, z, facing = false) {
|
|
|
3050
3050
|
if (m)
|
|
3051
3051
|
decls.push('transform-origin:0 0', `transform:matrix(${m.map(frameNum).join(',')})`);
|
|
3052
3052
|
if (frameClips(frame)) {
|
|
3053
|
-
const { x, y, width, height } = frame
|
|
3053
|
+
const { x, y, width, height } = frameContentRect(frame);
|
|
3054
3054
|
const [l, t, r, b] = [x, y, x + width, y + height].map(frameNum);
|
|
3055
3055
|
decls.push(`clip-path:polygon(${l}px ${t}px,${r}px ${t}px,${r}px ${b}px,${l}px ${b}px)`);
|
|
3056
3056
|
}
|