js.documents 14.4.46 → 14.4.47
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/convert/composition.cjs +9 -4
- package/dist/convert/composition.js +9 -4
- package/dist/convert/variant-bridges.cjs +2 -1
- package/dist/convert/variant-bridges.js +2 -1
- package/dist/csv/records.cjs +2 -1
- package/dist/csv/records.js +2 -1
- package/dist/edit/geometry.cjs +2 -1
- package/dist/edit/geometry.js +2 -1
- package/dist/edit/odg/svg-path.cjs +2 -1
- package/dist/edit/odg/svg-path.js +2 -1
- package/dist/edit/ods/cell.cjs +2 -1
- package/dist/edit/ods/cell.js +2 -1
- package/dist/edit/pdf/util.cjs +2 -1
- package/dist/edit/pdf/util.js +2 -1
- package/dist/firebird/data.cjs +2 -1
- package/dist/firebird/data.js +2 -1
- package/dist/firebird/date.cjs +40 -21
- package/dist/firebird/date.js +40 -21
- package/dist/firebird/reader.cjs +30 -19
- package/dist/firebird/reader.js +30 -19
- package/dist/hsqldb/binary-script.cjs +5 -4
- package/dist/hsqldb/binary-script.js +5 -4
- package/dist/hsqldb/cache.cjs +4 -2
- package/dist/hsqldb/cache.js +4 -2
- package/dist/hsqldb/rowformat.cjs +93 -57
- package/dist/hsqldb/rowformat.js +93 -57
- package/dist/hsqldb/script.cjs +2 -1
- package/dist/hsqldb/script.js +2 -1
- package/dist/latex/lower.cjs +2 -1
- package/dist/latex/lower.js +2 -1
- package/dist/latex/rational.cjs +6 -3
- package/dist/latex/rational.js +6 -3
- package/dist/layout/cell-typing.cjs +7 -3
- package/dist/layout/cell-typing.js +7 -3
- package/dist/layout/reconstruct.cjs +17 -15
- package/dist/layout/reconstruct.js +17 -15
- package/dist/layout/shared.cjs +2 -1
- package/dist/layout/shared.js +2 -1
- package/dist/layout/sheets.cjs +2 -1
- package/dist/layout/sheets.js +2 -1
- package/dist/mathml/layout.cjs +11 -5
- package/dist/mathml/layout.js +11 -5
- package/dist/mathml/length.cjs +12 -10
- package/dist/mathml/length.js +12 -10
- package/dist/mathml/operators.cjs +7 -3
- package/dist/mathml/operators.js +7 -3
- package/dist/mathml/variant.cjs +116 -1142
- package/dist/mathml/variant.js +116 -1142
- package/dist/model/bytes.cjs +9 -16
- package/dist/model/bytes.js +9 -16
- package/dist/model/geometry.cjs +2 -1
- package/dist/model/geometry.js +2 -1
- package/dist/odb/read.cjs +10 -2
- package/dist/odb/read.js +10 -2
- package/dist/svg/paint.cjs +177 -749
- package/dist/svg/paint.js +177 -749
- package/dist/svg/path.cjs +11 -6
- package/dist/svg/path.js +11 -6
- package/dist/svg/read.cjs +7 -3
- package/dist/svg/read.js +8 -4
- package/dist/svg/transform.cjs +11 -7
- package/dist/svg/transform.js +11 -7
- package/dist/svg/units.cjs +9 -5
- package/dist/svg/units.d.cts +2 -1
- package/dist/svg/units.d.ts +2 -1
- package/dist/svg/units.js +9 -6
- package/package.json +2 -2
package/dist/svg/path.cjs
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
//#region src/svg/path.ts
|
|
3
|
+
const CUBIC_CONTROL_STEP = 2 / 3;
|
|
4
|
+
const PI_RADIANS_IN_DEGREES = 180;
|
|
5
|
+
const KAPPA_NUMERATOR = 4;
|
|
6
|
+
const KAPPA_DENOMINATOR = 3;
|
|
7
|
+
const KAPPA_ARG_QUARTER = 4;
|
|
3
8
|
const PATH_NUMBER = /[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/y;
|
|
4
9
|
var PathScanner = class {
|
|
5
10
|
source;
|
|
@@ -68,11 +73,11 @@ function addQuad(cursor, acc, control, to) {
|
|
|
68
73
|
y: cursor.y
|
|
69
74
|
};
|
|
70
75
|
addCubic(cursor, acc, {
|
|
71
|
-
x: from.x +
|
|
72
|
-
y: from.y +
|
|
76
|
+
x: from.x + CUBIC_CONTROL_STEP * (control.x - from.x),
|
|
77
|
+
y: from.y + CUBIC_CONTROL_STEP * (control.y - from.y)
|
|
73
78
|
}, {
|
|
74
|
-
x: to.x +
|
|
75
|
-
y: to.y +
|
|
79
|
+
x: to.x + CUBIC_CONTROL_STEP * (control.x - to.x),
|
|
80
|
+
y: to.y + CUBIC_CONTROL_STEP * (control.y - to.y)
|
|
76
81
|
}, to);
|
|
77
82
|
cursor.lastQuadControl = control;
|
|
78
83
|
}
|
|
@@ -85,7 +90,7 @@ function addArc(cursor, acc, rx, ry, xRotDeg, largeArc, sweep, to) {
|
|
|
85
90
|
if (from.x !== to.x || from.y !== to.y) addLine(cursor, acc, to);
|
|
86
91
|
return;
|
|
87
92
|
}
|
|
88
|
-
const xRot = xRotDeg * Math.PI /
|
|
93
|
+
const xRot = xRotDeg * Math.PI / PI_RADIANS_IN_DEGREES;
|
|
89
94
|
const cosRot = Math.cos(xRot);
|
|
90
95
|
const sinRot = Math.sin(xRot);
|
|
91
96
|
const dx = (from.x - to.x) / 2;
|
|
@@ -120,7 +125,7 @@ function addArc(cursor, acc, rx, ry, xRotDeg, largeArc, sweep, to) {
|
|
|
120
125
|
else if (sweep === 1 && deltaTheta < 0) deltaTheta += 2 * Math.PI;
|
|
121
126
|
const segmentCount = Math.max(1, Math.ceil(Math.abs(deltaTheta) / (Math.PI / 2)));
|
|
122
127
|
const deltaPerSegment = deltaTheta / segmentCount;
|
|
123
|
-
const kappa =
|
|
128
|
+
const kappa = KAPPA_NUMERATOR / KAPPA_DENOMINATOR * Math.tan(deltaPerSegment / KAPPA_ARG_QUARTER);
|
|
124
129
|
const pointAt = (t) => ({
|
|
125
130
|
x: cx + rx * cosRot * Math.cos(t) - ry * sinRot * Math.sin(t),
|
|
126
131
|
y: cy + rx * sinRot * Math.cos(t) + ry * cosRot * Math.sin(t)
|
package/dist/svg/path.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
//#region src/svg/path.ts
|
|
2
|
+
const CUBIC_CONTROL_STEP = 2 / 3;
|
|
3
|
+
const PI_RADIANS_IN_DEGREES = 180;
|
|
4
|
+
const KAPPA_NUMERATOR = 4;
|
|
5
|
+
const KAPPA_DENOMINATOR = 3;
|
|
6
|
+
const KAPPA_ARG_QUARTER = 4;
|
|
2
7
|
const PATH_NUMBER = /[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/y;
|
|
3
8
|
var PathScanner = class {
|
|
4
9
|
source;
|
|
@@ -67,11 +72,11 @@ function addQuad(cursor, acc, control, to) {
|
|
|
67
72
|
y: cursor.y
|
|
68
73
|
};
|
|
69
74
|
addCubic(cursor, acc, {
|
|
70
|
-
x: from.x +
|
|
71
|
-
y: from.y +
|
|
75
|
+
x: from.x + CUBIC_CONTROL_STEP * (control.x - from.x),
|
|
76
|
+
y: from.y + CUBIC_CONTROL_STEP * (control.y - from.y)
|
|
72
77
|
}, {
|
|
73
|
-
x: to.x +
|
|
74
|
-
y: to.y +
|
|
78
|
+
x: to.x + CUBIC_CONTROL_STEP * (control.x - to.x),
|
|
79
|
+
y: to.y + CUBIC_CONTROL_STEP * (control.y - to.y)
|
|
75
80
|
}, to);
|
|
76
81
|
cursor.lastQuadControl = control;
|
|
77
82
|
}
|
|
@@ -84,7 +89,7 @@ function addArc(cursor, acc, rx, ry, xRotDeg, largeArc, sweep, to) {
|
|
|
84
89
|
if (from.x !== to.x || from.y !== to.y) addLine(cursor, acc, to);
|
|
85
90
|
return;
|
|
86
91
|
}
|
|
87
|
-
const xRot = xRotDeg * Math.PI /
|
|
92
|
+
const xRot = xRotDeg * Math.PI / PI_RADIANS_IN_DEGREES;
|
|
88
93
|
const cosRot = Math.cos(xRot);
|
|
89
94
|
const sinRot = Math.sin(xRot);
|
|
90
95
|
const dx = (from.x - to.x) / 2;
|
|
@@ -119,7 +124,7 @@ function addArc(cursor, acc, rx, ry, xRotDeg, largeArc, sweep, to) {
|
|
|
119
124
|
else if (sweep === 1 && deltaTheta < 0) deltaTheta += 2 * Math.PI;
|
|
120
125
|
const segmentCount = Math.max(1, Math.ceil(Math.abs(deltaTheta) / (Math.PI / 2)));
|
|
121
126
|
const deltaPerSegment = deltaTheta / segmentCount;
|
|
122
|
-
const kappa =
|
|
127
|
+
const kappa = KAPPA_NUMERATOR / KAPPA_DENOMINATOR * Math.tan(deltaPerSegment / KAPPA_ARG_QUARTER);
|
|
123
128
|
const pointAt = (t) => ({
|
|
124
129
|
x: cx + rx * cosRot * Math.cos(t) - ry * sinRot * Math.sin(t),
|
|
125
130
|
y: cy + rx * sinRot * Math.cos(t) + ry * cosRot * Math.sin(t)
|
package/dist/svg/read.cjs
CHANGED
|
@@ -6,14 +6,18 @@ const require_svg_transform = require("./transform.cjs");
|
|
|
6
6
|
let ooxml_js = require("ooxml.js");
|
|
7
7
|
let odf_js = require("odf.js");
|
|
8
8
|
//#region src/svg/read.ts
|
|
9
|
+
const ASPECT_DISPLAY_DECIMALS = 4;
|
|
10
|
+
const ASPECT_COMPARE_TOLERANCE = 1e-6;
|
|
9
11
|
var SvgMissingRootElementError = class extends Error {
|
|
10
12
|
constructor() {
|
|
11
13
|
super("svg text must contain an <svg> root element");
|
|
12
14
|
this.name = "SvgMissingRootElementError";
|
|
13
15
|
}
|
|
14
16
|
};
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
+
const DEFAULT_VIEWPORT_WIDTH_PX = 300;
|
|
18
|
+
const DEFAULT_VIEWPORT_HEIGHT_PX = 150;
|
|
19
|
+
const DEFAULT_WIDTH_PT = DEFAULT_VIEWPORT_WIDTH_PX * require_svg_units.PT_PER_PX;
|
|
20
|
+
const DEFAULT_HEIGHT_PT = DEFAULT_VIEWPORT_HEIGHT_PX * require_svg_units.PT_PER_PX;
|
|
17
21
|
const KAPPA = 4 / 3 * (Math.SQRT2 - 1);
|
|
18
22
|
function localName(tag) {
|
|
19
23
|
return tag.slice(tag.indexOf(":") + 1);
|
|
@@ -629,7 +633,7 @@ function resolveRootGeometry(root, state) {
|
|
|
629
633
|
if (preserveAspectRatio.trim() !== "none") {
|
|
630
634
|
const viewBoxAspect = viewBox.width / viewBox.height;
|
|
631
635
|
const pageAspect = widthPt / heightPt;
|
|
632
|
-
if (Math.abs(viewBoxAspect - pageAspect) >
|
|
636
|
+
if (Math.abs(viewBoxAspect - pageAspect) > ASPECT_COMPARE_TOLERANCE * Math.max(viewBoxAspect, pageAspect)) report(state, "svg/preserve-aspect-ratio-stretched", `viewBox aspect ${viewBoxAspect.toFixed(ASPECT_DISPLAY_DECIMALS)} stretched onto page aspect ${pageAspect.toFixed(ASPECT_DISPLAY_DECIMALS)} under preserveAspectRatio="${preserveAspectRatio.trim()}" (letterboxing is out of scope)`);
|
|
633
637
|
}
|
|
634
638
|
const sx = widthPt / viewBox.width;
|
|
635
639
|
const sy = heightPt / viewBox.height;
|
package/dist/svg/read.js
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { parseSvgDashStyle, parseSvgPaint } from "./paint.js";
|
|
2
2
|
import { parseSvgPathData } from "./path.js";
|
|
3
|
-
import { parseSvgLengthPt, parseSvgUserUnits, parseSvgViewBox } from "./units.js";
|
|
3
|
+
import { PT_PER_PX, parseSvgLengthPt, parseSvgUserUnits, parseSvgViewBox } from "./units.js";
|
|
4
4
|
import { applyMatrix, composeMatrices, isAxisAligned, isNonReflectingSimilarity, meanScaleFactor, parseSvgTransform, similarityRotationDeg } from "./transform.js";
|
|
5
5
|
import { decodeEntities } from "ooxml.js";
|
|
6
6
|
import { parseXml } from "odf.js";
|
|
7
7
|
//#region src/svg/read.ts
|
|
8
|
+
const ASPECT_DISPLAY_DECIMALS = 4;
|
|
9
|
+
const ASPECT_COMPARE_TOLERANCE = 1e-6;
|
|
8
10
|
var SvgMissingRootElementError = class extends Error {
|
|
9
11
|
constructor() {
|
|
10
12
|
super("svg text must contain an <svg> root element");
|
|
11
13
|
this.name = "SvgMissingRootElementError";
|
|
12
14
|
}
|
|
13
15
|
};
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
+
const DEFAULT_VIEWPORT_WIDTH_PX = 300;
|
|
17
|
+
const DEFAULT_VIEWPORT_HEIGHT_PX = 150;
|
|
18
|
+
const DEFAULT_WIDTH_PT = DEFAULT_VIEWPORT_WIDTH_PX * PT_PER_PX;
|
|
19
|
+
const DEFAULT_HEIGHT_PT = DEFAULT_VIEWPORT_HEIGHT_PX * PT_PER_PX;
|
|
16
20
|
const KAPPA = 4 / 3 * (Math.SQRT2 - 1);
|
|
17
21
|
function localName(tag) {
|
|
18
22
|
return tag.slice(tag.indexOf(":") + 1);
|
|
@@ -628,7 +632,7 @@ function resolveRootGeometry(root, state) {
|
|
|
628
632
|
if (preserveAspectRatio.trim() !== "none") {
|
|
629
633
|
const viewBoxAspect = viewBox.width / viewBox.height;
|
|
630
634
|
const pageAspect = widthPt / heightPt;
|
|
631
|
-
if (Math.abs(viewBoxAspect - pageAspect) >
|
|
635
|
+
if (Math.abs(viewBoxAspect - pageAspect) > ASPECT_COMPARE_TOLERANCE * Math.max(viewBoxAspect, pageAspect)) report(state, "svg/preserve-aspect-ratio-stretched", `viewBox aspect ${viewBoxAspect.toFixed(ASPECT_DISPLAY_DECIMALS)} stretched onto page aspect ${pageAspect.toFixed(ASPECT_DISPLAY_DECIMALS)} under preserveAspectRatio="${preserveAspectRatio.trim()}" (letterboxing is out of scope)`);
|
|
632
636
|
}
|
|
633
637
|
const sx = widthPt / viewBox.width;
|
|
634
638
|
const sy = heightPt / viewBox.height;
|
package/dist/svg/transform.cjs
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
//#region src/svg/transform.ts
|
|
3
|
+
const PI_RADIANS_IN_DEGREES = 180;
|
|
4
|
+
const SIMILARITY_AXIS_TOLERANCE = 1e-9;
|
|
5
|
+
const ROTATE_WITH_CENTRE_ARGUMENT_COUNT = 3;
|
|
6
|
+
const MATRIX_ARGUMENT_COUNT = 6;
|
|
3
7
|
const IDENTITY_MATRIX = {
|
|
4
8
|
a: 1,
|
|
5
9
|
b: 0,
|
|
@@ -43,10 +47,10 @@ function isAxisAligned(m) {
|
|
|
43
47
|
function isNonReflectingSimilarity(m) {
|
|
44
48
|
if (isAxisAligned(m)) return true;
|
|
45
49
|
if (m.a * m.d - m.b * m.c < 0) return false;
|
|
46
|
-
return Math.abs(m.a * m.a + m.b * m.b - (m.c * m.c + m.d * m.d)) <
|
|
50
|
+
return Math.abs(m.a * m.a + m.b * m.b - (m.c * m.c + m.d * m.d)) < SIMILARITY_AXIS_TOLERANCE;
|
|
47
51
|
}
|
|
48
52
|
function similarityRotationDeg(m) {
|
|
49
|
-
return Math.atan2(m.b, m.a) *
|
|
53
|
+
return Math.atan2(m.b, m.a) * PI_RADIANS_IN_DEGREES / Math.PI;
|
|
50
54
|
}
|
|
51
55
|
const TRANSFORM_NUMBER = /[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/y;
|
|
52
56
|
const TRANSFORM_FUNCTIONS = [
|
|
@@ -98,8 +102,8 @@ function matrixFromFunction(name, args) {
|
|
|
98
102
|
};
|
|
99
103
|
}
|
|
100
104
|
case "rotate": {
|
|
101
|
-
if (args.length !== 1 && args.length !==
|
|
102
|
-
const radians = args[0] * Math.PI /
|
|
105
|
+
if (args.length !== 1 && args.length !== ROTATE_WITH_CENTRE_ARGUMENT_COUNT) return;
|
|
106
|
+
const radians = args[0] * Math.PI / PI_RADIANS_IN_DEGREES;
|
|
103
107
|
const cos = Math.cos(radians);
|
|
104
108
|
const sin = Math.sin(radians);
|
|
105
109
|
const rotation = {
|
|
@@ -134,7 +138,7 @@ function matrixFromFunction(name, args) {
|
|
|
134
138
|
return {
|
|
135
139
|
a: 1,
|
|
136
140
|
b: 0,
|
|
137
|
-
c: Math.tan(args[0] * Math.PI /
|
|
141
|
+
c: Math.tan(args[0] * Math.PI / PI_RADIANS_IN_DEGREES),
|
|
138
142
|
d: 1,
|
|
139
143
|
e: 0,
|
|
140
144
|
f: 0
|
|
@@ -143,14 +147,14 @@ function matrixFromFunction(name, args) {
|
|
|
143
147
|
if (args.length !== 1) return;
|
|
144
148
|
return {
|
|
145
149
|
a: 1,
|
|
146
|
-
b: Math.tan(args[0] * Math.PI /
|
|
150
|
+
b: Math.tan(args[0] * Math.PI / PI_RADIANS_IN_DEGREES),
|
|
147
151
|
c: 0,
|
|
148
152
|
d: 1,
|
|
149
153
|
e: 0,
|
|
150
154
|
f: 0
|
|
151
155
|
};
|
|
152
156
|
case "matrix":
|
|
153
|
-
if (args.length !==
|
|
157
|
+
if (args.length !== MATRIX_ARGUMENT_COUNT) return;
|
|
154
158
|
return {
|
|
155
159
|
a: args[0],
|
|
156
160
|
b: args[1],
|
package/dist/svg/transform.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
//#region src/svg/transform.ts
|
|
2
|
+
const PI_RADIANS_IN_DEGREES = 180;
|
|
3
|
+
const SIMILARITY_AXIS_TOLERANCE = 1e-9;
|
|
4
|
+
const ROTATE_WITH_CENTRE_ARGUMENT_COUNT = 3;
|
|
5
|
+
const MATRIX_ARGUMENT_COUNT = 6;
|
|
2
6
|
const IDENTITY_MATRIX = {
|
|
3
7
|
a: 1,
|
|
4
8
|
b: 0,
|
|
@@ -42,10 +46,10 @@ function isAxisAligned(m) {
|
|
|
42
46
|
function isNonReflectingSimilarity(m) {
|
|
43
47
|
if (isAxisAligned(m)) return true;
|
|
44
48
|
if (m.a * m.d - m.b * m.c < 0) return false;
|
|
45
|
-
return Math.abs(m.a * m.a + m.b * m.b - (m.c * m.c + m.d * m.d)) <
|
|
49
|
+
return Math.abs(m.a * m.a + m.b * m.b - (m.c * m.c + m.d * m.d)) < SIMILARITY_AXIS_TOLERANCE;
|
|
46
50
|
}
|
|
47
51
|
function similarityRotationDeg(m) {
|
|
48
|
-
return Math.atan2(m.b, m.a) *
|
|
52
|
+
return Math.atan2(m.b, m.a) * PI_RADIANS_IN_DEGREES / Math.PI;
|
|
49
53
|
}
|
|
50
54
|
const TRANSFORM_NUMBER = /[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/y;
|
|
51
55
|
const TRANSFORM_FUNCTIONS = [
|
|
@@ -97,8 +101,8 @@ function matrixFromFunction(name, args) {
|
|
|
97
101
|
};
|
|
98
102
|
}
|
|
99
103
|
case "rotate": {
|
|
100
|
-
if (args.length !== 1 && args.length !==
|
|
101
|
-
const radians = args[0] * Math.PI /
|
|
104
|
+
if (args.length !== 1 && args.length !== ROTATE_WITH_CENTRE_ARGUMENT_COUNT) return;
|
|
105
|
+
const radians = args[0] * Math.PI / PI_RADIANS_IN_DEGREES;
|
|
102
106
|
const cos = Math.cos(radians);
|
|
103
107
|
const sin = Math.sin(radians);
|
|
104
108
|
const rotation = {
|
|
@@ -133,7 +137,7 @@ function matrixFromFunction(name, args) {
|
|
|
133
137
|
return {
|
|
134
138
|
a: 1,
|
|
135
139
|
b: 0,
|
|
136
|
-
c: Math.tan(args[0] * Math.PI /
|
|
140
|
+
c: Math.tan(args[0] * Math.PI / PI_RADIANS_IN_DEGREES),
|
|
137
141
|
d: 1,
|
|
138
142
|
e: 0,
|
|
139
143
|
f: 0
|
|
@@ -142,14 +146,14 @@ function matrixFromFunction(name, args) {
|
|
|
142
146
|
if (args.length !== 1) return;
|
|
143
147
|
return {
|
|
144
148
|
a: 1,
|
|
145
|
-
b: Math.tan(args[0] * Math.PI /
|
|
149
|
+
b: Math.tan(args[0] * Math.PI / PI_RADIANS_IN_DEGREES),
|
|
146
150
|
c: 0,
|
|
147
151
|
d: 1,
|
|
148
152
|
e: 0,
|
|
149
153
|
f: 0
|
|
150
154
|
};
|
|
151
155
|
case "matrix":
|
|
152
|
-
if (args.length !==
|
|
156
|
+
if (args.length !== MATRIX_ARGUMENT_COUNT) return;
|
|
153
157
|
return {
|
|
154
158
|
a: args[0],
|
|
155
159
|
b: args[1],
|
package/dist/svg/units.cjs
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
//#region src/svg/units.ts
|
|
3
3
|
const PT_PER_PX = .75;
|
|
4
|
-
const PT_PER_MM = 72 / 25.4;
|
|
5
|
-
const PT_PER_CM = 720 / 25.4;
|
|
6
4
|
const PT_PER_IN = 72;
|
|
5
|
+
const PT_PER_MM = PT_PER_IN / 25.4;
|
|
6
|
+
const PT_PER_CM = PT_PER_MM * 10;
|
|
7
|
+
const PT_PER_PC = 12;
|
|
8
|
+
const Q_PER_CM = 40;
|
|
9
|
+
const VIEWBOX_COMPONENT_COUNT = 4;
|
|
7
10
|
const SVG_NUMBER_PATTERN = /^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?$/;
|
|
8
11
|
const SVG_LENGTH_PATTERN = /^([+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?)(px|pt|mm|cm|in|pc|q|em|ex|%)?$/;
|
|
9
12
|
function parseSvgLengthPt(raw) {
|
|
@@ -19,8 +22,8 @@ function parseSvgLengthPt(raw) {
|
|
|
19
22
|
case "mm": return value * PT_PER_MM;
|
|
20
23
|
case "cm": return value * PT_PER_CM;
|
|
21
24
|
case "in": return value * PT_PER_IN;
|
|
22
|
-
case "pc": return value *
|
|
23
|
-
case "q": return value * PT_PER_CM /
|
|
25
|
+
case "pc": return value * PT_PER_PC;
|
|
26
|
+
case "q": return value * (PT_PER_CM / Q_PER_CM);
|
|
24
27
|
default: return;
|
|
25
28
|
}
|
|
26
29
|
}
|
|
@@ -31,7 +34,7 @@ function parseSvgUserUnits(raw) {
|
|
|
31
34
|
function parseSvgViewBox(raw) {
|
|
32
35
|
if (raw === void 0) return;
|
|
33
36
|
const parts = raw.trim().replace(/,/g, " ").split(/\s+/);
|
|
34
|
-
if (parts.length !==
|
|
37
|
+
if (parts.length !== VIEWBOX_COMPONENT_COUNT) return;
|
|
35
38
|
const numbers = parts.map((part) => SVG_NUMBER_PATTERN.test(part) ? Number(part) : NaN);
|
|
36
39
|
if (!numbers.every((value) => Number.isFinite(value)) || numbers[2] < 0 || numbers[3] < 0) return;
|
|
37
40
|
return {
|
|
@@ -42,6 +45,7 @@ function parseSvgViewBox(raw) {
|
|
|
42
45
|
};
|
|
43
46
|
}
|
|
44
47
|
//#endregion
|
|
48
|
+
exports.PT_PER_PX = PT_PER_PX;
|
|
45
49
|
exports.parseSvgLengthPt = parseSvgLengthPt;
|
|
46
50
|
exports.parseSvgUserUnits = parseSvgUserUnits;
|
|
47
51
|
exports.parseSvgViewBox = parseSvgViewBox;
|
package/dist/svg/units.d.cts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
//#region src/svg/units.d.ts
|
|
2
|
+
declare const PT_PER_PX = 0.75;
|
|
2
3
|
declare function parseSvgLengthPt(raw: string | undefined): number | undefined;
|
|
3
4
|
declare function parseSvgUserUnits(raw: string | undefined): number | undefined;
|
|
4
5
|
interface SvgViewBox {
|
|
@@ -9,4 +10,4 @@ interface SvgViewBox {
|
|
|
9
10
|
}
|
|
10
11
|
declare function parseSvgViewBox(raw: string | undefined): SvgViewBox | undefined;
|
|
11
12
|
//#endregion
|
|
12
|
-
export { SvgViewBox, parseSvgLengthPt, parseSvgUserUnits, parseSvgViewBox };
|
|
13
|
+
export { PT_PER_PX, SvgViewBox, parseSvgLengthPt, parseSvgUserUnits, parseSvgViewBox };
|
package/dist/svg/units.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
//#region src/svg/units.d.ts
|
|
2
|
+
declare const PT_PER_PX = 0.75;
|
|
2
3
|
declare function parseSvgLengthPt(raw: string | undefined): number | undefined;
|
|
3
4
|
declare function parseSvgUserUnits(raw: string | undefined): number | undefined;
|
|
4
5
|
interface SvgViewBox {
|
|
@@ -9,4 +10,4 @@ interface SvgViewBox {
|
|
|
9
10
|
}
|
|
10
11
|
declare function parseSvgViewBox(raw: string | undefined): SvgViewBox | undefined;
|
|
11
12
|
//#endregion
|
|
12
|
-
export { SvgViewBox, parseSvgLengthPt, parseSvgUserUnits, parseSvgViewBox };
|
|
13
|
+
export { PT_PER_PX, SvgViewBox, parseSvgLengthPt, parseSvgUserUnits, parseSvgViewBox };
|
package/dist/svg/units.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
//#region src/svg/units.ts
|
|
2
2
|
const PT_PER_PX = .75;
|
|
3
|
-
const PT_PER_MM = 72 / 25.4;
|
|
4
|
-
const PT_PER_CM = 720 / 25.4;
|
|
5
3
|
const PT_PER_IN = 72;
|
|
4
|
+
const PT_PER_MM = PT_PER_IN / 25.4;
|
|
5
|
+
const PT_PER_CM = PT_PER_MM * 10;
|
|
6
|
+
const PT_PER_PC = 12;
|
|
7
|
+
const Q_PER_CM = 40;
|
|
8
|
+
const VIEWBOX_COMPONENT_COUNT = 4;
|
|
6
9
|
const SVG_NUMBER_PATTERN = /^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?$/;
|
|
7
10
|
const SVG_LENGTH_PATTERN = /^([+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?)(px|pt|mm|cm|in|pc|q|em|ex|%)?$/;
|
|
8
11
|
function parseSvgLengthPt(raw) {
|
|
@@ -18,8 +21,8 @@ function parseSvgLengthPt(raw) {
|
|
|
18
21
|
case "mm": return value * PT_PER_MM;
|
|
19
22
|
case "cm": return value * PT_PER_CM;
|
|
20
23
|
case "in": return value * PT_PER_IN;
|
|
21
|
-
case "pc": return value *
|
|
22
|
-
case "q": return value * PT_PER_CM /
|
|
24
|
+
case "pc": return value * PT_PER_PC;
|
|
25
|
+
case "q": return value * (PT_PER_CM / Q_PER_CM);
|
|
23
26
|
default: return;
|
|
24
27
|
}
|
|
25
28
|
}
|
|
@@ -30,7 +33,7 @@ function parseSvgUserUnits(raw) {
|
|
|
30
33
|
function parseSvgViewBox(raw) {
|
|
31
34
|
if (raw === void 0) return;
|
|
32
35
|
const parts = raw.trim().replace(/,/g, " ").split(/\s+/);
|
|
33
|
-
if (parts.length !==
|
|
36
|
+
if (parts.length !== VIEWBOX_COMPONENT_COUNT) return;
|
|
34
37
|
const numbers = parts.map((part) => SVG_NUMBER_PATTERN.test(part) ? Number(part) : NaN);
|
|
35
38
|
if (!numbers.every((value) => Number.isFinite(value)) || numbers[2] < 0 || numbers[3] < 0) return;
|
|
36
39
|
return {
|
|
@@ -41,4 +44,4 @@ function parseSvgViewBox(raw) {
|
|
|
41
44
|
};
|
|
42
45
|
}
|
|
43
46
|
//#endregion
|
|
44
|
-
export { parseSvgLengthPt, parseSvgUserUnits, parseSvgViewBox };
|
|
47
|
+
export { PT_PER_PX, parseSvgLengthPt, parseSvgUserUnits, parseSvgViewBox };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "js.documents",
|
|
3
|
-
"version": "14.4.
|
|
3
|
+
"version": "14.4.47",
|
|
4
4
|
"description": "Bidirectional docx/pptx <-> PDF conversion and a read+write editable OOXML document model, built on ooxml.js and Zod 4 codecs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"markdown-codec": "11.1.12",
|
|
87
87
|
"odf.js": "11.1.12",
|
|
88
88
|
"ooxml.js": "12.2.26",
|
|
89
|
-
"pdf-codec": "5.2.
|
|
89
|
+
"pdf-codec": "5.2.28",
|
|
90
90
|
"ppt-codec": "2.2.19",
|
|
91
91
|
"rtf-codec": "8.1.20",
|
|
92
92
|
"temml": "0.13.4",
|