emf-converter 4.4.7 → 4.4.9
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/browser.js +230 -102
- package/dist/browser.mjs +230 -102
- package/dist/index.js +234 -106
- package/dist/index.mjs +234 -106
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1369,21 +1369,21 @@ var require_decoder = __commonJS({
|
|
|
1369
1369
|
successiveACState = 0;
|
|
1370
1370
|
}
|
|
1371
1371
|
}
|
|
1372
|
-
function decodeMcu(component2,
|
|
1372
|
+
function decodeMcu(component2, decode4, mcu2, row, col) {
|
|
1373
1373
|
var mcuRow = mcu2 / mcusPerLine | 0;
|
|
1374
1374
|
var mcuCol = mcu2 % mcusPerLine;
|
|
1375
1375
|
var blockRow = mcuRow * component2.v + row;
|
|
1376
1376
|
var blockCol = mcuCol * component2.h + col;
|
|
1377
1377
|
if (component2.blocks[blockRow] === void 0 && opts.tolerantDecoding)
|
|
1378
1378
|
return;
|
|
1379
|
-
|
|
1379
|
+
decode4(component2, component2.blocks[blockRow][blockCol]);
|
|
1380
1380
|
}
|
|
1381
|
-
function decodeBlock(component2,
|
|
1381
|
+
function decodeBlock(component2, decode4, mcu2) {
|
|
1382
1382
|
var blockRow = mcu2 / component2.blocksPerLine | 0;
|
|
1383
1383
|
var blockCol = mcu2 % component2.blocksPerLine;
|
|
1384
1384
|
if (component2.blocks[blockRow] === void 0 && opts.tolerantDecoding)
|
|
1385
1385
|
return;
|
|
1386
|
-
|
|
1386
|
+
decode4(component2, component2.blocks[blockRow][blockCol]);
|
|
1387
1387
|
}
|
|
1388
1388
|
var componentsLength = components.length;
|
|
1389
1389
|
var component, i, j, k, n;
|
|
@@ -2104,12 +2104,12 @@ var require_decoder = __commonJS({
|
|
|
2104
2104
|
return constructor;
|
|
2105
2105
|
})();
|
|
2106
2106
|
if (typeof module !== "undefined") {
|
|
2107
|
-
module.exports =
|
|
2107
|
+
module.exports = decode3;
|
|
2108
2108
|
} else if (typeof window !== "undefined") {
|
|
2109
2109
|
window["jpeg-js"] = window["jpeg-js"] || {};
|
|
2110
|
-
window["jpeg-js"].decode =
|
|
2110
|
+
window["jpeg-js"].decode = decode3;
|
|
2111
2111
|
}
|
|
2112
|
-
function
|
|
2112
|
+
function decode3(jpegData, userOpts = {}) {
|
|
2113
2113
|
var defaultOpts = {
|
|
2114
2114
|
// "undefined" means "Choose whether to transform colors based on the image’s color model."
|
|
2115
2115
|
colorTransform: void 0,
|
|
@@ -2161,10 +2161,10 @@ var require_decoder = __commonJS({
|
|
|
2161
2161
|
var require_jpeg_js = __commonJS({
|
|
2162
2162
|
"node_modules/jpeg-js/index.js"(exports, module) {
|
|
2163
2163
|
var encode2 = require_encoder();
|
|
2164
|
-
var
|
|
2164
|
+
var decode3 = require_decoder();
|
|
2165
2165
|
module.exports = {
|
|
2166
2166
|
encode: encode2,
|
|
2167
|
-
decode:
|
|
2167
|
+
decode: decode3
|
|
2168
2168
|
};
|
|
2169
2169
|
}
|
|
2170
2170
|
});
|
|
@@ -4762,8 +4762,8 @@ var require_deflate2 = __commonJS({
|
|
|
4762
4762
|
var Z_DEFAULT_COMPRESSION = -1;
|
|
4763
4763
|
var Z_DEFAULT_STRATEGY = 0;
|
|
4764
4764
|
var Z_DEFLATED = 8;
|
|
4765
|
-
function Deflate(
|
|
4766
|
-
if (!(this instanceof Deflate)) return new Deflate(
|
|
4765
|
+
function Deflate(options2) {
|
|
4766
|
+
if (!(this instanceof Deflate)) return new Deflate(options2);
|
|
4767
4767
|
this.options = utils.assign({
|
|
4768
4768
|
level: Z_DEFAULT_COMPRESSION,
|
|
4769
4769
|
method: Z_DEFLATED,
|
|
@@ -4772,7 +4772,7 @@ var require_deflate2 = __commonJS({
|
|
|
4772
4772
|
memLevel: 8,
|
|
4773
4773
|
strategy: Z_DEFAULT_STRATEGY,
|
|
4774
4774
|
to: ""
|
|
4775
|
-
},
|
|
4775
|
+
}, options2 || {});
|
|
4776
4776
|
var opt = this.options;
|
|
4777
4777
|
if (opt.raw && opt.windowBits > 0) {
|
|
4778
4778
|
opt.windowBits = -opt.windowBits;
|
|
@@ -4880,23 +4880,23 @@ var require_deflate2 = __commonJS({
|
|
|
4880
4880
|
this.err = status;
|
|
4881
4881
|
this.msg = this.strm.msg;
|
|
4882
4882
|
};
|
|
4883
|
-
function deflate(input,
|
|
4884
|
-
var deflator = new Deflate(
|
|
4883
|
+
function deflate(input, options2) {
|
|
4884
|
+
var deflator = new Deflate(options2);
|
|
4885
4885
|
deflator.push(input, true);
|
|
4886
4886
|
if (deflator.err) {
|
|
4887
4887
|
throw deflator.msg || msg[deflator.err];
|
|
4888
4888
|
}
|
|
4889
4889
|
return deflator.result;
|
|
4890
4890
|
}
|
|
4891
|
-
function deflateRaw(input,
|
|
4892
|
-
|
|
4893
|
-
|
|
4894
|
-
return deflate(input,
|
|
4891
|
+
function deflateRaw(input, options2) {
|
|
4892
|
+
options2 = options2 || {};
|
|
4893
|
+
options2.raw = true;
|
|
4894
|
+
return deflate(input, options2);
|
|
4895
4895
|
}
|
|
4896
|
-
function gzip(input,
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
return deflate(input,
|
|
4896
|
+
function gzip(input, options2) {
|
|
4897
|
+
options2 = options2 || {};
|
|
4898
|
+
options2.gzip = true;
|
|
4899
|
+
return deflate(input, options2);
|
|
4900
4900
|
}
|
|
4901
4901
|
exports.Deflate = Deflate;
|
|
4902
4902
|
exports.deflate = deflate;
|
|
@@ -6759,13 +6759,13 @@ var require_inflate2 = __commonJS({
|
|
|
6759
6759
|
var ZStream = require_zstream();
|
|
6760
6760
|
var GZheader = require_gzheader();
|
|
6761
6761
|
var toString = Object.prototype.toString;
|
|
6762
|
-
function Inflate(
|
|
6763
|
-
if (!(this instanceof Inflate)) return new Inflate(
|
|
6762
|
+
function Inflate(options2) {
|
|
6763
|
+
if (!(this instanceof Inflate)) return new Inflate(options2);
|
|
6764
6764
|
this.options = utils.assign({
|
|
6765
6765
|
chunkSize: 16384,
|
|
6766
6766
|
windowBits: 0,
|
|
6767
6767
|
to: ""
|
|
6768
|
-
},
|
|
6768
|
+
}, options2 || {});
|
|
6769
6769
|
var opt = this.options;
|
|
6770
6770
|
if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {
|
|
6771
6771
|
opt.windowBits = -opt.windowBits;
|
|
@@ -6773,7 +6773,7 @@ var require_inflate2 = __commonJS({
|
|
|
6773
6773
|
opt.windowBits = -15;
|
|
6774
6774
|
}
|
|
6775
6775
|
}
|
|
6776
|
-
if (opt.windowBits >= 0 && opt.windowBits < 16 && !(
|
|
6776
|
+
if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options2 && options2.windowBits)) {
|
|
6777
6777
|
opt.windowBits += 32;
|
|
6778
6778
|
}
|
|
6779
6779
|
if (opt.windowBits > 15 && opt.windowBits < 48) {
|
|
@@ -6901,18 +6901,18 @@ var require_inflate2 = __commonJS({
|
|
|
6901
6901
|
this.err = status;
|
|
6902
6902
|
this.msg = this.strm.msg;
|
|
6903
6903
|
};
|
|
6904
|
-
function inflate(input,
|
|
6905
|
-
var inflator = new Inflate(
|
|
6904
|
+
function inflate(input, options2) {
|
|
6905
|
+
var inflator = new Inflate(options2);
|
|
6906
6906
|
inflator.push(input, true);
|
|
6907
6907
|
if (inflator.err) {
|
|
6908
6908
|
throw inflator.msg || msg[inflator.err];
|
|
6909
6909
|
}
|
|
6910
6910
|
return inflator.result;
|
|
6911
6911
|
}
|
|
6912
|
-
function inflateRaw(input,
|
|
6913
|
-
|
|
6914
|
-
|
|
6915
|
-
return inflate(input,
|
|
6912
|
+
function inflateRaw(input, options2) {
|
|
6913
|
+
options2 = options2 || {};
|
|
6914
|
+
options2.raw = true;
|
|
6915
|
+
return inflate(input, options2);
|
|
6916
6916
|
}
|
|
6917
6917
|
exports.Inflate = Inflate;
|
|
6918
6918
|
exports.inflate = inflate;
|
|
@@ -10045,7 +10045,7 @@ function inflateZlibSync(input) {
|
|
|
10045
10045
|
bitCnt -= n;
|
|
10046
10046
|
return v;
|
|
10047
10047
|
};
|
|
10048
|
-
const
|
|
10048
|
+
const decode3 = (h) => {
|
|
10049
10049
|
let code = 0;
|
|
10050
10050
|
let first = 0;
|
|
10051
10051
|
let index = 0;
|
|
@@ -10103,7 +10103,7 @@ function inflateZlibSync(input) {
|
|
|
10103
10103
|
const clh = buildHuffman(cl, 19);
|
|
10104
10104
|
const lens = new Uint8Array(hlit + hdist);
|
|
10105
10105
|
for (let i = 0; i < hlit + hdist; ) {
|
|
10106
|
-
const sym =
|
|
10106
|
+
const sym = decode3(clh);
|
|
10107
10107
|
if (sym < 16) {
|
|
10108
10108
|
lens[i++] = sym;
|
|
10109
10109
|
} else if (sym === 16) {
|
|
@@ -10123,7 +10123,7 @@ function inflateZlibSync(input) {
|
|
|
10123
10123
|
throw new Error("inflate: invalid block type");
|
|
10124
10124
|
}
|
|
10125
10125
|
for (; ; ) {
|
|
10126
|
-
const sym =
|
|
10126
|
+
const sym = decode3(lit);
|
|
10127
10127
|
if (sym < 256) {
|
|
10128
10128
|
need(1);
|
|
10129
10129
|
out[outLen++] = sym;
|
|
@@ -10132,7 +10132,7 @@ function inflateZlibSync(input) {
|
|
|
10132
10132
|
} else {
|
|
10133
10133
|
const li = sym - 257;
|
|
10134
10134
|
const len = LENGTH_BASE[li] + bits(LENGTH_EXTRA[li]);
|
|
10135
|
-
const di =
|
|
10135
|
+
const di = decode3(dist);
|
|
10136
10136
|
const d = DIST_BASE[di] + bits(DIST_EXTRA[di]);
|
|
10137
10137
|
need(len);
|
|
10138
10138
|
for (let k = 0; k < len; k++) {
|
|
@@ -10312,15 +10312,74 @@ async function decodePng(bytes) {
|
|
|
10312
10312
|
return { width, height, data: out };
|
|
10313
10313
|
}
|
|
10314
10314
|
|
|
10315
|
-
// src/
|
|
10315
|
+
// src/jpeg-decoder.ts
|
|
10316
10316
|
var import_jpeg_js = __toESM(require_jpeg_js());
|
|
10317
|
+
var options = { useTArray: true, formatAsRGBA: true, maxResolutionInMP: 67.108864, maxMemoryUsageInMB: 512 };
|
|
10318
|
+
function decodeJpegPixels(bytes, colorTransform) {
|
|
10319
|
+
let sampling = [];
|
|
10320
|
+
let adobeTransform;
|
|
10321
|
+
let adobeOffset = -1;
|
|
10322
|
+
for (let position = 2; position + 4 <= bytes.length; ) {
|
|
10323
|
+
if (bytes[position] !== 255) break;
|
|
10324
|
+
if (bytes[position + 1] === 255) {
|
|
10325
|
+
position++;
|
|
10326
|
+
continue;
|
|
10327
|
+
}
|
|
10328
|
+
const marker = bytes[position + 1];
|
|
10329
|
+
if (marker === 218 || marker === 217) break;
|
|
10330
|
+
const length = bytes[position + 2] * 256 + bytes[position + 3];
|
|
10331
|
+
if (length < 2 || position + length + 2 > bytes.length) break;
|
|
10332
|
+
const start = position + 4;
|
|
10333
|
+
if ([192, 193, 194].includes(marker) && length >= 8) {
|
|
10334
|
+
const count = bytes[start + 5];
|
|
10335
|
+
if (length >= 8 + 3 * count) sampling = Array.from({ length: count }, (_, i) => ({ id: bytes[start + 6 + i * 3], h: bytes[start + 7 + i * 3] >> 4, v: bytes[start + 7 + i * 3] & 15 }));
|
|
10336
|
+
}
|
|
10337
|
+
if (marker === 238 && length >= 14 && String.fromCharCode(...bytes.subarray(start, start + 5)) === "Adobe") {
|
|
10338
|
+
adobeOffset = start + 11;
|
|
10339
|
+
adobeTransform = bytes[adobeOffset];
|
|
10340
|
+
}
|
|
10341
|
+
position += length + 2;
|
|
10342
|
+
}
|
|
10343
|
+
const transform = colorTransform ?? (adobeTransform !== void 0 ? adobeTransform !== 0 : !sampling.every((component, i) => component.id === [82, 71, 66][i]));
|
|
10344
|
+
if (sampling.length !== 3 || !transform) return (0, import_jpeg_js.decode)(bytes, { ...options, colorTransform: sampling.length === 3 ? transform : colorTransform });
|
|
10345
|
+
const maxH = Math.max(...sampling.map((c) => c.h)), maxV = Math.max(...sampling.map((c) => c.v));
|
|
10346
|
+
if (sampling.some((c) => !c.h || !c.v || maxH % c.h || maxV % c.v)) return (0, import_jpeg_js.decode)(bytes, { ...options, colorTransform });
|
|
10347
|
+
let encoded = bytes;
|
|
10348
|
+
if (adobeTransform) {
|
|
10349
|
+
encoded = bytes.slice();
|
|
10350
|
+
encoded[adobeOffset] = 0;
|
|
10351
|
+
}
|
|
10352
|
+
const raw = (0, import_jpeg_js.decode)(encoded, { ...options, colorTransform: false });
|
|
10353
|
+
const { width, height } = raw;
|
|
10354
|
+
const data = new Uint8Array(raw.data.length);
|
|
10355
|
+
const sample2 = (x, y, channel) => {
|
|
10356
|
+
const sx = maxH / sampling[channel].h, sy = maxV / sampling[channel].v;
|
|
10357
|
+
const px = Math.max(0, Math.min(Math.ceil(width / sx) - 1, (x + 0.5) / sx - 0.5));
|
|
10358
|
+
const py = Math.max(0, Math.min(Math.ceil(height / sy) - 1, (y + 0.5) / sy - 0.5));
|
|
10359
|
+
const ix = Math.floor(px), iy = Math.floor(py), fx = px - ix, fy = py - iy;
|
|
10360
|
+
const at = (xx, yy) => raw.data[(Math.min(height - 1, yy * sy) * width + Math.min(width - 1, xx * sx)) * 4 + channel];
|
|
10361
|
+
return (1 - fy) * ((1 - fx) * at(ix, iy) + fx * at(ix + 1, iy)) + fy * ((1 - fx) * at(ix, iy + 1) + fx * at(ix + 1, iy + 1));
|
|
10362
|
+
};
|
|
10363
|
+
const byte = (value) => Math.max(0, Math.min(255, Math.round(value)));
|
|
10364
|
+
for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
|
|
10365
|
+
const luma = sample2(x, y, 0), cb = sample2(x, y, 1) - 128, cr = sample2(x, y, 2) - 128;
|
|
10366
|
+
const offset = (y * width + x) * 4;
|
|
10367
|
+
data[offset] = byte(luma + 1.402 * cr);
|
|
10368
|
+
data[offset + 1] = byte(luma - 0.3441363 * cb - 0.71413636 * cr);
|
|
10369
|
+
data[offset + 2] = byte(luma + 1.772 * cb);
|
|
10370
|
+
data[offset + 3] = 255;
|
|
10371
|
+
}
|
|
10372
|
+
return { ...raw, data };
|
|
10373
|
+
}
|
|
10374
|
+
|
|
10375
|
+
// src/image-codec-fallback.ts
|
|
10317
10376
|
var import_gifuct_js = __toESM(require_lib2());
|
|
10318
10377
|
var UTIF = __toESM(require_UTIF());
|
|
10319
10378
|
|
|
10320
10379
|
// src/tiff-group3.ts
|
|
10321
10380
|
function normalizeGroup3(buffer, page) {
|
|
10322
|
-
const
|
|
10323
|
-
if (!Array.isArray(page.t259) || page.t259[0] !== 3 || (
|
|
10381
|
+
const options2 = Array.isArray(page.t292) ? Number(page.t292[0]) : 0;
|
|
10382
|
+
if (!Array.isArray(page.t259) || page.t259[0] !== 3 || (options2 & 3) !== 0) return buffer;
|
|
10324
10383
|
const offsets = page.t273, lengths = page.t279;
|
|
10325
10384
|
if (!Array.isArray(offsets) || !Array.isArray(lengths) || offsets.length !== lengths.length) return buffer;
|
|
10326
10385
|
const source = new Uint8Array(buffer);
|
|
@@ -10354,16 +10413,50 @@ function normalizeGroup3(buffer, page) {
|
|
|
10354
10413
|
return offset;
|
|
10355
10414
|
});
|
|
10356
10415
|
page.t279 = strips.map((strip) => strip.length);
|
|
10357
|
-
page.t292 = [
|
|
10416
|
+
page.t292 = [options2 | 1];
|
|
10358
10417
|
return normalized.buffer;
|
|
10359
10418
|
}
|
|
10360
10419
|
|
|
10420
|
+
// src/tiff-jpeg.ts
|
|
10421
|
+
function decodeJpegTiff(bytes, page) {
|
|
10422
|
+
const values = (tag2) => Array.isArray(page[tag2]) ? page[tag2].map(Number) : [];
|
|
10423
|
+
const first = (tag2, fallback = 0) => values(tag2)[0] ?? fallback;
|
|
10424
|
+
const photo = first("t262");
|
|
10425
|
+
if (first("t259") !== 7 || photo !== 2 && photo !== 6 || first("t277") !== 3 || first("t284", 1) !== 1 || values("t258").some((v) => v !== 8)) return null;
|
|
10426
|
+
const width = first("t256"), height = first("t257");
|
|
10427
|
+
const tiled = !!page.t322;
|
|
10428
|
+
const blockWidth = tiled ? first("t322") : width;
|
|
10429
|
+
const blockHeight = tiled ? first("t323") : first("t278", height);
|
|
10430
|
+
if (!Number.isInteger(blockWidth) || !Number.isInteger(blockHeight) || blockWidth <= 0 || blockHeight <= 0 || blockWidth > 8192 || blockHeight > 8192) throw new Error("Invalid TIFF JPEG block");
|
|
10431
|
+
const offsets = values(tiled ? "t324" : "t273");
|
|
10432
|
+
const lengths = values(tiled ? "t325" : "t279");
|
|
10433
|
+
const columns = Math.ceil(width / blockWidth), rows = Math.ceil(height / blockHeight);
|
|
10434
|
+
if (offsets.length !== columns * rows || lengths.length !== offsets.length) throw new Error("Invalid TIFF JPEG offsets");
|
|
10435
|
+
const tables = page.t347 instanceof Uint8Array ? page.t347 : new Uint8Array(values("t347"));
|
|
10436
|
+
const tableLength = tables.length >= 2 && tables[tables.length - 2] === 255 && tables[tables.length - 1] === 217 ? tables.length - 2 : tables.length;
|
|
10437
|
+
const result = new Uint8ClampedArray(width * height * 4);
|
|
10438
|
+
for (let block = 0; block < offsets.length; block++) {
|
|
10439
|
+
const offset = offsets[block], length = lengths[block];
|
|
10440
|
+
if (!Number.isInteger(offset) || !Number.isInteger(length) || offset < 0 || length <= 0 || offset + length > bytes.length) throw new Error("Invalid TIFF JPEG data");
|
|
10441
|
+
const skip = tableLength && bytes[offset] === 255 && bytes[offset + 1] === 216 ? 2 : 0;
|
|
10442
|
+
const jpeg = new Uint8Array(tableLength + length - skip);
|
|
10443
|
+
jpeg.set(tables.subarray(0, tableLength));
|
|
10444
|
+
jpeg.set(bytes.subarray(offset + skip, offset + length), tableLength);
|
|
10445
|
+
const decoded = decodeJpegPixels(jpeg, photo === 6);
|
|
10446
|
+
const x = block % columns * blockWidth, y = Math.floor(block / columns) * blockHeight;
|
|
10447
|
+
const copyWidth = Math.min(blockWidth, width - x), copyHeight = Math.min(blockHeight, height - y);
|
|
10448
|
+
if (decoded.width !== blockWidth || decoded.height < copyHeight || decoded.height > blockHeight) throw new Error("Invalid TIFF JPEG dimensions");
|
|
10449
|
+
for (let row = 0; row < copyHeight; row++) result.set(decoded.data.subarray(row * decoded.width * 4, (row * decoded.width + copyWidth) * 4), ((y + row) * width + x) * 4);
|
|
10450
|
+
}
|
|
10451
|
+
return result;
|
|
10452
|
+
}
|
|
10453
|
+
|
|
10361
10454
|
// src/image-codec-fallback.ts
|
|
10362
10455
|
var validSize = (w, h) => Number.isInteger(w) && Number.isInteger(h) && w > 0 && h > 0 && w <= 8192 && h <= 8192;
|
|
10363
10456
|
function decodeImageCodecFallback(bytes) {
|
|
10364
10457
|
try {
|
|
10365
10458
|
if (bytes[0] === 255 && bytes[1] === 216) {
|
|
10366
|
-
const p = (
|
|
10459
|
+
const p = decodeJpegPixels(bytes);
|
|
10367
10460
|
return validSize(p.width, p.height) ? { ...p, data: new Uint8ClampedArray(p.data) } : null;
|
|
10368
10461
|
}
|
|
10369
10462
|
if (bytes.length >= 13 && String.fromCharCode(...bytes.subarray(0, 6)).match(/^GIF8[79]a$/)) {
|
|
@@ -10397,6 +10490,9 @@ function decodeImageCodecFallback(bytes) {
|
|
|
10397
10490
|
const pages = UTIF.decode(buffer);
|
|
10398
10491
|
const page = pages.find((p) => p.t256 && p.t257);
|
|
10399
10492
|
if (!page || !Array.isArray(page.t256) || !Array.isArray(page.t257) || !validSize(Number(page.t256[0]), Number(page.t257[0]))) return null;
|
|
10493
|
+
const jpeg = decodeJpegTiff(new Uint8Array(buffer), page);
|
|
10494
|
+
if (jpeg) return { data: jpeg, width: Number(page.t256[0]), height: Number(page.t257[0]) };
|
|
10495
|
+
if (Array.isArray(page.t259) && page.t259[0] === 32946) page.t259 = [8];
|
|
10400
10496
|
UTIF.decodeImage(normalizeGroup3(buffer, page), page);
|
|
10401
10497
|
const width = page.width, height = page.height;
|
|
10402
10498
|
if (!validSize(width, height)) return null;
|
|
@@ -14315,13 +14411,13 @@ function writeJsx(node, depth, out, rootSpread) {
|
|
|
14315
14411
|
}
|
|
14316
14412
|
out.push(`${pad}</${node.tag}>`);
|
|
14317
14413
|
}
|
|
14318
|
-
function svgTreeToJsx(node,
|
|
14319
|
-
const name =
|
|
14414
|
+
function svgTreeToJsx(node, options2 = {}) {
|
|
14415
|
+
const name = options2.componentName ?? "Metafile";
|
|
14320
14416
|
if (!/^[A-Z][A-Za-z0-9_$]*$/.test(name)) {
|
|
14321
14417
|
throw new TypeError(`svgTreeToJsx: componentName must be a PascalCase identifier, got ${JSON.stringify(name)}`);
|
|
14322
14418
|
}
|
|
14323
|
-
const ts =
|
|
14324
|
-
const spread =
|
|
14419
|
+
const ts = options2.typescript ?? true;
|
|
14420
|
+
const spread = options2.spreadProps ?? true;
|
|
14325
14421
|
const body = [];
|
|
14326
14422
|
writeJsx(node, 2, body, spread);
|
|
14327
14423
|
const params = spread ? ts ? "props: SVGProps<SVGSVGElement>" : "props" : "";
|
|
@@ -15764,11 +15860,11 @@ function mirror(p, n) {
|
|
|
15764
15860
|
}
|
|
15765
15861
|
return p;
|
|
15766
15862
|
}
|
|
15767
|
-
function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false) {
|
|
15863
|
+
function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false, fullVertical = false, edgeWidth = w, edgeHeight = h) {
|
|
15768
15864
|
const k = blurKernel(radius);
|
|
15769
15865
|
const taps = (k.length - 1) / 2;
|
|
15770
|
-
const horizontalIndex =
|
|
15771
|
-
const verticalIndex =
|
|
15866
|
+
const horizontalIndex = taps >= edgeWidth ? (x) => Math.max(0, Math.min(w - 1, x)) : (x) => mirror(x, w);
|
|
15867
|
+
const verticalIndex = taps >= edgeHeight ? (y) => Math.max(0, Math.min(h - 1, y)) : (y) => mirror(y, h);
|
|
15772
15868
|
const out = new Float64Array(w * h * 4);
|
|
15773
15869
|
for (let y = 0; y < h; y++) {
|
|
15774
15870
|
const row = y * w * 4;
|
|
@@ -15794,7 +15890,7 @@ function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false) {
|
|
|
15794
15890
|
}
|
|
15795
15891
|
if (taps > 0 && vRow >= 0 && vRow < h) {
|
|
15796
15892
|
const horizontal = out.slice();
|
|
15797
|
-
const endRow = Math.min(h, vRow +
|
|
15893
|
+
const endRow = fullVertical ? h : Math.min(h, vRow + Math.ceil(h / w));
|
|
15798
15894
|
for (let row = vRow; row < endRow; row++) {
|
|
15799
15895
|
const col = new Float64Array(w * 4);
|
|
15800
15896
|
for (let j = -taps; j <= taps; j++) {
|
|
@@ -15812,14 +15908,46 @@ function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false) {
|
|
|
15812
15908
|
}
|
|
15813
15909
|
return out;
|
|
15814
15910
|
}
|
|
15911
|
+
function blurReduction(radius) {
|
|
15912
|
+
return radius < 20 ? 1 : radius < 40 ? 2 : radius <= 80 ? 4 : radius < 160 ? 8 : 16;
|
|
15913
|
+
}
|
|
15914
|
+
function effectBlur(src, width, height, radius) {
|
|
15915
|
+
const factor = blurReduction(radius);
|
|
15916
|
+
if (factor === 1 || (width < 4 || height < 4) && (width % factor !== 0 || height % factor !== 0)) {
|
|
15917
|
+
return gdipBlur(src, width, height, radius);
|
|
15918
|
+
}
|
|
15919
|
+
const w = Math.ceil(width / factor);
|
|
15920
|
+
const h = Math.ceil(height / factor);
|
|
15921
|
+
const reduced = new Uint8ClampedArray(w * h * 4);
|
|
15922
|
+
for (let y = 0; y < h; y++) for (let x = 0; x < w; x++) {
|
|
15923
|
+
const x1 = Math.min(width, (x + 1) * factor), y1 = Math.min(height, (y + 1) * factor);
|
|
15924
|
+
const count = (x1 - x * factor) * (y1 - y * factor);
|
|
15925
|
+
for (let c = 0; c < 4; c++) {
|
|
15926
|
+
let sum = 0;
|
|
15927
|
+
for (let yy = y * factor; yy < y1; yy++) for (let xx = x * factor; xx < x1; xx++) sum += src[(yy * width + xx) * 4 + c];
|
|
15928
|
+
reduced[(y * w + x) * 4 + c] = Math.floor(sum / count);
|
|
15929
|
+
}
|
|
15930
|
+
}
|
|
15931
|
+
const filtered = gdipBlur(reduced, w, h, radius / factor, 0, false, true, Math.floor(width / factor), Math.floor(height / factor));
|
|
15932
|
+
for (let i = 0; i < filtered.length; i++) filtered[i] = Math.round(filtered[i]);
|
|
15933
|
+
const out = new Float64Array(src.length);
|
|
15934
|
+
for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
|
|
15935
|
+
const px = clamp((x + 0.5) / factor - 0.5, 0, w - 1), py = clamp((y + 0.5) / factor - 0.5, 0, h - 1);
|
|
15936
|
+
const ix = Math.floor(px), iy = Math.floor(py), fx = px - ix, fy = py - iy;
|
|
15937
|
+
const a = (iy * w + ix) * 4, b = (iy * w + Math.min(w - 1, ix + 1)) * 4;
|
|
15938
|
+
const d = (Math.min(h - 1, iy + 1) * w + ix) * 4, e = (Math.min(h - 1, iy + 1) * w + Math.min(w - 1, ix + 1)) * 4;
|
|
15939
|
+
for (let c = 0; c < 4; c++) out[(y * width + x) * 4 + c] = Math.round((1 - fy) * ((1 - fx) * filtered[a + c] + fx * filtered[b + c]) + fy * ((1 - fx) * filtered[d + c] + fx * filtered[e + c]));
|
|
15940
|
+
}
|
|
15941
|
+
return out;
|
|
15942
|
+
}
|
|
15815
15943
|
function applyBlur(src, w, h, radius) {
|
|
15816
|
-
return Uint8ClampedArray.from(
|
|
15944
|
+
return Uint8ClampedArray.from(effectBlur(src, w, h, radius), Math.round);
|
|
15817
15945
|
}
|
|
15818
15946
|
function sharpenGain(_radius, amount) {
|
|
15819
15947
|
return roundHalfDown(64 * amount / (250 - 2 * amount)) / 64;
|
|
15820
15948
|
}
|
|
15821
15949
|
function applySharpen(src, w, h, radius, amount) {
|
|
15822
|
-
const blurred =
|
|
15950
|
+
const blurred = effectBlur(src, w, h, radius);
|
|
15823
15951
|
const gain = sharpenGain(radius, amount);
|
|
15824
15952
|
const out = new Uint8ClampedArray(src);
|
|
15825
15953
|
for (let i = 0; i < src.length; i += 4) {
|
|
@@ -18641,11 +18769,11 @@ function capFigures(path, closeAll) {
|
|
|
18641
18769
|
}, [1, 0, 0, 1, 0, 0]);
|
|
18642
18770
|
return closeAll ? figures.map((f) => ({ ...f, closed: true })) : figures;
|
|
18643
18771
|
}
|
|
18644
|
-
function customCapGeometry(figures, width, start, end,
|
|
18772
|
+
function customCapGeometry(figures, width, start, end, options2 = {}) {
|
|
18645
18773
|
const out = [];
|
|
18646
18774
|
const capped = [];
|
|
18647
18775
|
const polygons = [];
|
|
18648
|
-
const minFill =
|
|
18776
|
+
const minFill = options2.minFillScale ?? 2;
|
|
18649
18777
|
for (const fig of figures) {
|
|
18650
18778
|
if (fig.closed || !start && !end) {
|
|
18651
18779
|
out.push(fig);
|
|
@@ -18698,7 +18826,7 @@ function customCapGeometry(figures, width, start, end, options = {}) {
|
|
|
18698
18826
|
const pen = {
|
|
18699
18827
|
// GDI+'s widener never makes an outline thinner than one device pixel.
|
|
18700
18828
|
half: Math.max(ws, 1) / 2,
|
|
18701
|
-
join: (
|
|
18829
|
+
join: (options2.widenJoin ?? ((j) => j))(cap.strokeJoin),
|
|
18702
18830
|
miterLimit: 10,
|
|
18703
18831
|
startCap: cap.strokeStartCap,
|
|
18704
18832
|
endCap: cap.strokeEndCap,
|
|
@@ -18708,7 +18836,7 @@ function customCapGeometry(figures, width, start, end, options = {}) {
|
|
|
18708
18836
|
compound: null,
|
|
18709
18837
|
inset: false
|
|
18710
18838
|
};
|
|
18711
|
-
polygons.push(...(
|
|
18839
|
+
polygons.push(...(options2.widen ?? widenFigures)(capFigures(placed, false), pen).map((q) => q.reverse()));
|
|
18712
18840
|
}
|
|
18713
18841
|
};
|
|
18714
18842
|
if (start) {
|
|
@@ -20423,7 +20551,7 @@ var BLEND_MODES = /* @__PURE__ */ new Set([
|
|
|
20423
20551
|
"luminosity"
|
|
20424
20552
|
]);
|
|
20425
20553
|
var SvgContext = class {
|
|
20426
|
-
constructor(width, height,
|
|
20554
|
+
constructor(width, height, options2 = {}) {
|
|
20427
20555
|
this.nextId = 0;
|
|
20428
20556
|
this.stack = [];
|
|
20429
20557
|
/** The current path, in DEVICE space (see `canvas-path.ts`). */
|
|
@@ -20434,9 +20562,9 @@ var SvgContext = class {
|
|
|
20434
20562
|
this.group = null;
|
|
20435
20563
|
this.images = [];
|
|
20436
20564
|
this.canvas = { width, height, svgContext: this };
|
|
20437
|
-
this.shadow =
|
|
20438
|
-
this.imageResampling =
|
|
20439
|
-
this.idPrefix =
|
|
20565
|
+
this.shadow = options2.shadow ?? null;
|
|
20566
|
+
this.imageResampling = options2.imageResampling ?? "renderer";
|
|
20567
|
+
this.idPrefix = options2.idPrefix ?? "emf-";
|
|
20440
20568
|
this.state = {
|
|
20441
20569
|
transform: [...IDENTITY3],
|
|
20442
20570
|
fillStyle: "#000000",
|
|
@@ -21439,7 +21567,7 @@ var SvgContext = class {
|
|
|
21439
21567
|
* Encodes every pending raster payload and returns the finished `<svg>`
|
|
21440
21568
|
* tree. Call once, after replay (and deferred images) are complete.
|
|
21441
21569
|
*/
|
|
21442
|
-
async toTree(
|
|
21570
|
+
async toTree(options2 = {}) {
|
|
21443
21571
|
const cache2 = /* @__PURE__ */ new Map();
|
|
21444
21572
|
for (const img of this.images) {
|
|
21445
21573
|
let url = cache2.get(img.payload);
|
|
@@ -21451,7 +21579,7 @@ var SvgContext = class {
|
|
|
21451
21579
|
}
|
|
21452
21580
|
const { width, height } = this.canvas;
|
|
21453
21581
|
const attrs = { xmlns: "http://www.w3.org/2000/svg" };
|
|
21454
|
-
if (
|
|
21582
|
+
if (options2.includeSize ?? true) {
|
|
21455
21583
|
attrs.width = width;
|
|
21456
21584
|
attrs.height = height;
|
|
21457
21585
|
}
|
|
@@ -32276,12 +32404,12 @@ function drawWithFontEngine(rCtx, offset, dataOff, nChars, offString, viewEnd) {
|
|
|
32276
32404
|
if (!fonts) {
|
|
32277
32405
|
return false;
|
|
32278
32406
|
}
|
|
32279
|
-
const
|
|
32407
|
+
const options2 = view.getUint32(dataOff + 44, true);
|
|
32280
32408
|
const codes = [];
|
|
32281
32409
|
for (let i = 0; i < nChars; i++) {
|
|
32282
32410
|
codes.push(view.getUint16(offset + offString + i * 2, true));
|
|
32283
32411
|
}
|
|
32284
|
-
const pdy = (
|
|
32412
|
+
const pdy = (options2 & ETO_PDY) !== 0;
|
|
32285
32413
|
const raw = readDxArray(view, offset, dataOff, pdy ? nChars * 2 : nChars, viewEnd);
|
|
32286
32414
|
let dx = raw;
|
|
32287
32415
|
let dy = null;
|
|
@@ -32295,10 +32423,10 @@ function drawWithFontEngine(rCtx, offset, dataOff, nChars, offString, viewEnd) {
|
|
|
32295
32423
|
}
|
|
32296
32424
|
const adv = drawGdiTextCall(ctx, fonts, state, {
|
|
32297
32425
|
codes,
|
|
32298
|
-
glyphIndices: (
|
|
32426
|
+
glyphIndices: (options2 & ETO_GLYPH_INDEX) !== 0,
|
|
32299
32427
|
x: view.getInt32(dataOff + 28, true),
|
|
32300
32428
|
y: view.getInt32(dataOff + 32, true),
|
|
32301
|
-
options,
|
|
32429
|
+
options: options2,
|
|
32302
32430
|
rect: {
|
|
32303
32431
|
left: view.getInt32(dataOff + 48, true),
|
|
32304
32432
|
top: view.getInt32(dataOff + 52, true),
|
|
@@ -32440,7 +32568,7 @@ function handleExtTextOutW(rCtx, offset, dataOff, recSize) {
|
|
|
32440
32568
|
}
|
|
32441
32569
|
return true;
|
|
32442
32570
|
}
|
|
32443
|
-
function drawTextCall(rCtx, x, y, codes,
|
|
32571
|
+
function drawTextCall(rCtx, x, y, codes, options2, rect, dx) {
|
|
32444
32572
|
const n = codes.length;
|
|
32445
32573
|
const offString = 76;
|
|
32446
32574
|
const offDx = offString + n * 2 + 3 & -4;
|
|
@@ -32449,7 +32577,7 @@ function drawTextCall(rCtx, x, y, codes, options, rect, dx) {
|
|
|
32449
32577
|
const view = new DataView(new ArrayBuffer(size));
|
|
32450
32578
|
view.setUint32(44, n, true);
|
|
32451
32579
|
view.setUint32(48, offString, true);
|
|
32452
|
-
view.setUint32(52,
|
|
32580
|
+
view.setUint32(52, options2, true);
|
|
32453
32581
|
view.setInt32(36, x, true);
|
|
32454
32582
|
view.setInt32(40, y, true);
|
|
32455
32583
|
view.setInt32(56, rect[0], true);
|
|
@@ -32493,7 +32621,7 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
|
|
|
32493
32621
|
const e = arrayStart + i * 40;
|
|
32494
32622
|
const x = view.getInt32(e, true), y = view.getInt32(e + 4, true);
|
|
32495
32623
|
const n = view.getUint32(e + 8, true), offString = view.getUint32(e + 12, true);
|
|
32496
|
-
const
|
|
32624
|
+
const options2 = view.getUint32(e + 16, true);
|
|
32497
32625
|
const rect = [view.getInt32(e + 20, true), view.getInt32(e + 24, true), view.getInt32(e + 28, true), view.getInt32(e + 32, true)];
|
|
32498
32626
|
const offDx = view.getUint32(e + 36, true);
|
|
32499
32627
|
const unit = wide ? 2 : 1;
|
|
@@ -32501,13 +32629,13 @@ function handlePolyText(rCtx, offset, dataOff, recSize, wide) {
|
|
|
32501
32629
|
const ansi = wide ? null : readAnsiRecord(view, offset + offString, n, charSet);
|
|
32502
32630
|
const codes = wide ? Array.from({ length: n }, (_, j) => view.getUint16(offset + offString + j * 2, true)) : ansi.codes;
|
|
32503
32631
|
let dx = null;
|
|
32504
|
-
const pdy = (
|
|
32632
|
+
const pdy = (options2 & ETO_PDY) !== 0;
|
|
32505
32633
|
const dxCount = n * (pdy ? 2 : 1);
|
|
32506
32634
|
if (offDx && offDx <= end - offset && dxCount <= Math.floor((end - (offset + offDx)) / 4)) {
|
|
32507
32635
|
dx = Array.from({ length: dxCount }, (_, j) => view.getInt32(offset + offDx + j * 4, true));
|
|
32508
32636
|
if (!wide) dx = collapseAnsiDx(dx, ansi.byteLengths, pdy);
|
|
32509
32637
|
}
|
|
32510
|
-
drawTextCall(rCtx, x, y, codes,
|
|
32638
|
+
drawTextCall(rCtx, x, y, codes, options2, rect, dx);
|
|
32511
32639
|
}
|
|
32512
32640
|
return true;
|
|
32513
32641
|
}
|
|
@@ -32516,13 +32644,13 @@ function handleSmallTextOut(rCtx, offset, dataOff, recSize) {
|
|
|
32516
32644
|
const end = Math.min(view.byteLength, offset + recSize);
|
|
32517
32645
|
if (recSize < 36) return true;
|
|
32518
32646
|
const x = view.getInt32(dataOff, true), y = view.getInt32(dataOff + 4, true);
|
|
32519
|
-
const n = view.getUint32(dataOff + 8, true),
|
|
32520
|
-
const small = (
|
|
32647
|
+
const n = view.getUint32(dataOff + 8, true), options2 = view.getUint32(dataOff + 12, true);
|
|
32648
|
+
const small = (options2 & 512) !== 0, noRect = (options2 & 256) !== 0;
|
|
32521
32649
|
const base = dataOff + 28 + (noRect ? 0 : 16);
|
|
32522
32650
|
if (base > end || n > Math.floor((end - base) / (small ? 1 : 2))) return true;
|
|
32523
32651
|
const rect = noRect ? [0, 0, 0, 0] : [view.getInt32(dataOff + 28, true), view.getInt32(dataOff + 32, true), view.getInt32(dataOff + 36, true), view.getInt32(dataOff + 40, true)];
|
|
32524
32652
|
const codes = small ? Array.from({ length: n }, (_, i) => view.getUint8(base + i)) : Array.from({ length: n }, (_, i) => view.getUint16(base + i * 2, true));
|
|
32525
|
-
drawTextCall(rCtx, x, y, codes,
|
|
32653
|
+
drawTextCall(rCtx, x, y, codes, options2, rect, null);
|
|
32526
32654
|
return true;
|
|
32527
32655
|
}
|
|
32528
32656
|
function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
|
|
@@ -32536,20 +32664,20 @@ function handleEmfGdiDrawTextRecord(rCtx, recType, offset, dataOff, recSize) {
|
|
|
32536
32664
|
const end = Math.min(view.byteLength, offset + recSize);
|
|
32537
32665
|
if (recSize < 76) return true;
|
|
32538
32666
|
const x = view.getInt32(dataOff + 28, true), y = view.getInt32(dataOff + 32, true);
|
|
32539
|
-
const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true),
|
|
32667
|
+
const n = view.getUint32(dataOff + 36, true), strOff = view.getUint32(dataOff + 40, true), options2 = view.getUint32(dataOff + 44, true);
|
|
32540
32668
|
if (!strOff || strOff > end - offset) return true;
|
|
32541
32669
|
if (n > end - (offset + strOff)) return true;
|
|
32542
32670
|
const ansi = readAnsiRecord(view, offset + strOff, n, state.fontDetails?.charSet ?? 1);
|
|
32543
32671
|
const rect = [view.getInt32(dataOff + 48, true), view.getInt32(dataOff + 52, true), view.getInt32(dataOff + 56, true), view.getInt32(dataOff + 60, true)];
|
|
32544
32672
|
const offDx = view.getUint32(dataOff + 64, true);
|
|
32545
32673
|
let dx = null;
|
|
32546
|
-
const pdy = (
|
|
32674
|
+
const pdy = (options2 & ETO_PDY) !== 0;
|
|
32547
32675
|
const dxCount = n * (pdy ? 2 : 1);
|
|
32548
32676
|
if (offDx && offDx <= end - offset && dxCount <= Math.floor((end - (offset + offDx)) / 4)) {
|
|
32549
32677
|
dx = Array.from({ length: dxCount }, (_, i) => view.getInt32(offset + offDx + i * 4, true));
|
|
32550
32678
|
dx = collapseAnsiDx(dx, ansi.byteLengths, pdy);
|
|
32551
32679
|
}
|
|
32552
|
-
drawTextCall(rCtx, x, y, ansi.codes,
|
|
32680
|
+
drawTextCall(rCtx, x, y, ansi.codes, options2, rect, dx);
|
|
32553
32681
|
return true;
|
|
32554
32682
|
}
|
|
32555
32683
|
return false;
|
|
@@ -33530,8 +33658,8 @@ function widenBracketPath(rCtx) {
|
|
|
33530
33658
|
if (rCtx.inPath || !rCtx.rasterPath || (state.penStyle & 15) === 5) {
|
|
33531
33659
|
return;
|
|
33532
33660
|
}
|
|
33533
|
-
const
|
|
33534
|
-
const polys = widenPath(rCtx.rasterPath,
|
|
33661
|
+
const options2 = penIsCosmetic(rCtx) ? { width: 16, cap: "round", join: "round", miterLimit: state.miterLimit ?? 10 } : penWidenOptions(rCtx);
|
|
33662
|
+
const polys = widenPath(rCtx.rasterPath, options2);
|
|
33535
33663
|
const path = new GdiRasterPath();
|
|
33536
33664
|
for (const poly of polys) {
|
|
33537
33665
|
if (poly.length < 4) {
|
|
@@ -36312,7 +36440,7 @@ function replayEmfRecords(view, ctx, bounds, canvasW, canvasH, dpiScale = 1, rep
|
|
|
36312
36440
|
}
|
|
36313
36441
|
return allDeferredImages;
|
|
36314
36442
|
}
|
|
36315
|
-
function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas,
|
|
36443
|
+
function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas, options2) {
|
|
36316
36444
|
const view = new DataView(bytes);
|
|
36317
36445
|
const header = parseEmfHeader(view);
|
|
36318
36446
|
if (!header) {
|
|
@@ -36323,11 +36451,11 @@ function replayNestedEmf(bytes, ctx, canvasW, canvasH, toCanvas, options) {
|
|
|
36323
36451
|
const left = -e / a;
|
|
36324
36452
|
const top = -f / d;
|
|
36325
36453
|
const bounds2 = { left, top, right: left + canvasW / a, bottom: top + canvasH / d };
|
|
36326
|
-
return replayEmfRecords(view, ctx, bounds2, canvasW, canvasH, 1,
|
|
36454
|
+
return replayEmfRecords(view, ctx, bounds2, canvasW, canvasH, 1, options2);
|
|
36327
36455
|
}
|
|
36328
36456
|
const bounds = { left: 0, top: 0, right: canvasW, bottom: canvasH };
|
|
36329
36457
|
return replayEmfRecords(view, ctx, bounds, canvasW, canvasH, 1, {
|
|
36330
|
-
...
|
|
36458
|
+
...options2,
|
|
36331
36459
|
plusBaseTransform: toCanvas,
|
|
36332
36460
|
gdiDrawing: false
|
|
36333
36461
|
});
|
|
@@ -37871,8 +37999,8 @@ function wmfExtTextOut(p, dataOff, recEnd) {
|
|
|
37871
37999
|
const y = view.getInt16(dataOff, true);
|
|
37872
38000
|
const x = view.getInt16(dataOff + 2, true);
|
|
37873
38001
|
const n = view.getInt16(dataOff + 4, true);
|
|
37874
|
-
const
|
|
37875
|
-
const hasRect = (
|
|
38002
|
+
const options2 = view.getUint16(dataOff + 6, true);
|
|
38003
|
+
const hasRect = (options2 & (ETO_OPAQUE | ETO_CLIPPED)) !== 0;
|
|
37876
38004
|
const strOff = dataOff + 8 + (hasRect ? 8 : 0);
|
|
37877
38005
|
const rect = hasRect && dataOff + 16 <= recEnd ? [view.getInt16(dataOff + 8, true), view.getInt16(dataOff + 10, true), view.getInt16(dataOff + 12, true), view.getInt16(dataOff + 14, true)] : null;
|
|
37878
38006
|
const count = Math.max(0, n);
|
|
@@ -37892,12 +38020,12 @@ function wmfExtTextOut(p, dataOff, recEnd) {
|
|
|
37892
38020
|
}
|
|
37893
38021
|
}
|
|
37894
38022
|
if (count === 0) {
|
|
37895
|
-
if (rect &&
|
|
37896
|
-
playText(p, { x, y, bytes: [32], options, rect, dx: [0] });
|
|
38023
|
+
if (rect && options2 & ETO_OPAQUE) {
|
|
38024
|
+
playText(p, { x, y, bytes: [32], options: options2, rect, dx: [0] });
|
|
37897
38025
|
}
|
|
37898
38026
|
return;
|
|
37899
38027
|
}
|
|
37900
|
-
playText(p, { x, y, bytes, options, rect, dx });
|
|
38028
|
+
playText(p, { x, y, bytes, options: options2, rect, dx });
|
|
37901
38029
|
}
|
|
37902
38030
|
|
|
37903
38031
|
// src/wmf-replay.ts
|
|
@@ -38367,7 +38495,7 @@ function replayWmfRecords(view, ctx, header, canvasW, canvasH, replayOptions = {
|
|
|
38367
38495
|
|
|
38368
38496
|
// src/emf-converter.ts
|
|
38369
38497
|
var MAX_METAFILE_RECURSION = 3;
|
|
38370
|
-
async function replayMetafile(buffer,
|
|
38498
|
+
async function replayMetafile(buffer, options2, createSurface) {
|
|
38371
38499
|
emfLog(`replayMetafile: input buffer ${buffer.byteLength} bytes`);
|
|
38372
38500
|
if (buffer.byteLength >= 16) {
|
|
38373
38501
|
const hdrBytes = new Uint8Array(buffer, 0, 16);
|
|
@@ -38375,7 +38503,7 @@ async function replayMetafile(buffer, options, createSurface) {
|
|
|
38375
38503
|
`replayMetafile: first 16 bytes: [${Array.from(hdrBytes).map((b) => b.toString(16).padStart(2, "0")).join(" ")}]`
|
|
38376
38504
|
);
|
|
38377
38505
|
}
|
|
38378
|
-
const opts =
|
|
38506
|
+
const opts = options2 ?? {};
|
|
38379
38507
|
const dpiScale = opts.dpiScale ?? DEFAULT_DPI_SCALE;
|
|
38380
38508
|
let view = new DataView(buffer);
|
|
38381
38509
|
let emfHeader = null;
|
|
@@ -38581,12 +38709,12 @@ async function processDeferredImages(ctx, deferredImages, recursionDepth) {
|
|
|
38581
38709
|
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
38582
38710
|
return complete;
|
|
38583
38711
|
}
|
|
38584
|
-
async function convertMetafileToDataUrl(buffer,
|
|
38712
|
+
async function convertMetafileToDataUrl(buffer, options2, recursionDepth = 0) {
|
|
38585
38713
|
await ensureNodeCanvasModule();
|
|
38586
38714
|
if (recursionDepth > MAX_METAFILE_RECURSION) {
|
|
38587
38715
|
return null;
|
|
38588
38716
|
}
|
|
38589
|
-
const opts = { ...
|
|
38717
|
+
const opts = { ...options2, gdiAntialias: options2?.gdiAntialias ?? false };
|
|
38590
38718
|
let canvas = null;
|
|
38591
38719
|
const result = await replayMetafile(buffer, opts, (w, h) => {
|
|
38592
38720
|
const setup = createCanvas(
|
|
@@ -38655,7 +38783,7 @@ async function resampleExact(bytes, spec, surface) {
|
|
|
38655
38783
|
}
|
|
38656
38784
|
return resampleImage(pixels.data, pixels.width, pixels.height, spec, { w: surface.width, h: surface.height });
|
|
38657
38785
|
}
|
|
38658
|
-
async function processDeferredImagesSvg(svg, deferredImages,
|
|
38786
|
+
async function processDeferredImagesSvg(svg, deferredImages, options2, recursionDepth) {
|
|
38659
38787
|
for (let idx = 0; idx < deferredImages.length; idx++) {
|
|
38660
38788
|
let img = deferredImages[idx];
|
|
38661
38789
|
try {
|
|
@@ -38678,7 +38806,7 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
|
|
|
38678
38806
|
}
|
|
38679
38807
|
const nested = await convertMetafileToSvgTree(
|
|
38680
38808
|
bytes,
|
|
38681
|
-
{ ...
|
|
38809
|
+
{ ...options2, includeSize: true, idPrefix: void 0 },
|
|
38682
38810
|
recursionDepth + 1
|
|
38683
38811
|
);
|
|
38684
38812
|
if (nested) {
|
|
@@ -38715,7 +38843,7 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
|
|
|
38715
38843
|
continue;
|
|
38716
38844
|
}
|
|
38717
38845
|
const slot = img.svgSlot ?? svg.reserveSlot();
|
|
38718
|
-
if (img.resample &&
|
|
38846
|
+
if (img.resample && options2.imageResampling === "exact" && !img.isMetafile) {
|
|
38719
38847
|
const block = await resampleExact(bytes, img.resample, svg.canvas);
|
|
38720
38848
|
if (block) {
|
|
38721
38849
|
svg.fillSlot(slot, { kind: "rgba", data: block.rgba, width: block.w, height: block.h }, [1, 0, 0, 1, 0, 0], block.x, block.y, block.w, block.h);
|
|
@@ -38735,16 +38863,16 @@ async function processDeferredImagesSvg(svg, deferredImages, options, recursionD
|
|
|
38735
38863
|
}
|
|
38736
38864
|
}
|
|
38737
38865
|
}
|
|
38738
|
-
async function convertMetafileToSvgTree(buffer,
|
|
38739
|
-
const svg = await replayToSvgContext(buffer,
|
|
38740
|
-
return svg ? svg.toTree({ includeSize:
|
|
38866
|
+
async function convertMetafileToSvgTree(buffer, options2, recursionDepth = 0) {
|
|
38867
|
+
const svg = await replayToSvgContext(buffer, options2, recursionDepth);
|
|
38868
|
+
return svg ? svg.toTree({ includeSize: options2?.includeSize }) : null;
|
|
38741
38869
|
}
|
|
38742
|
-
async function replayToSvgContext(buffer,
|
|
38870
|
+
async function replayToSvgContext(buffer, options2, recursionDepth = 0) {
|
|
38743
38871
|
await ensureNodeCanvasModule();
|
|
38744
38872
|
if (recursionDepth > MAX_METAFILE_RECURSION) {
|
|
38745
38873
|
return null;
|
|
38746
38874
|
}
|
|
38747
|
-
const opts =
|
|
38875
|
+
const opts = options2 ?? {};
|
|
38748
38876
|
const dpiScale = opts.dpiScale ?? DEFAULT_DPI_SCALE;
|
|
38749
38877
|
const idPrefix = opts.idPrefix ?? `emf${++svgDocumentCounter}-`;
|
|
38750
38878
|
let svg = null;
|
|
@@ -38761,18 +38889,18 @@ async function replayToSvgContext(buffer, options, recursionDepth = 0) {
|
|
|
38761
38889
|
await processDeferredImagesSvg(target, result.deferredImages, opts, recursionDepth);
|
|
38762
38890
|
return target;
|
|
38763
38891
|
}
|
|
38764
|
-
async function convertMetafileToSvg(buffer,
|
|
38765
|
-
const tree = await convertMetafileToSvgTree(buffer,
|
|
38892
|
+
async function convertMetafileToSvg(buffer, options2) {
|
|
38893
|
+
const tree = await convertMetafileToSvgTree(buffer, options2);
|
|
38766
38894
|
return tree ? svgTreeToString(tree) : null;
|
|
38767
38895
|
}
|
|
38768
|
-
async function convertMetafileToSvgDataUrl(buffer,
|
|
38769
|
-
const markup = await convertMetafileToSvg(buffer,
|
|
38896
|
+
async function convertMetafileToSvgDataUrl(buffer, options2) {
|
|
38897
|
+
const markup = await convertMetafileToSvg(buffer, options2);
|
|
38770
38898
|
return markup ? svgMarkupToDataUrl(markup) : null;
|
|
38771
38899
|
}
|
|
38772
38900
|
|
|
38773
38901
|
// src/load-system-fonts.ts
|
|
38774
38902
|
var FONT_FILE = /\.(ttf|ttc|fon|fnt)$/i;
|
|
38775
|
-
async function loadSystemFonts(
|
|
38903
|
+
async function loadSystemFonts(options2 = {}) {
|
|
38776
38904
|
if (typeof process === "undefined" || !process.versions?.node) {
|
|
38777
38905
|
return [];
|
|
38778
38906
|
}
|
|
@@ -38798,8 +38926,8 @@ async function loadSystemFonts(options = {}) {
|
|
|
38798
38926
|
} catch {
|
|
38799
38927
|
return [];
|
|
38800
38928
|
}
|
|
38801
|
-
const dirs =
|
|
38802
|
-
const maxDepth =
|
|
38929
|
+
const dirs = options2.dirs ?? defaultFontDirs(path, os);
|
|
38930
|
+
const maxDepth = options2.maxDepth ?? 4;
|
|
38803
38931
|
const files = [];
|
|
38804
38932
|
const seen = /* @__PURE__ */ new Set();
|
|
38805
38933
|
const walk2 = async (dir, depth) => {
|
|
@@ -38817,7 +38945,7 @@ async function loadSystemFonts(options = {}) {
|
|
|
38817
38945
|
}
|
|
38818
38946
|
} else if (FONT_FILE.test(e.name)) {
|
|
38819
38947
|
const key = full.toLowerCase();
|
|
38820
|
-
if (!seen.has(key) && (!
|
|
38948
|
+
if (!seen.has(key) && (!options2.filter || options2.filter(full, e.name.toLowerCase()))) {
|
|
38821
38949
|
seen.add(key);
|
|
38822
38950
|
files.push(full);
|
|
38823
38951
|
}
|