js.documents 14.4.45 → 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 +3 -3
package/dist/hsqldb/rowformat.js
CHANGED
|
@@ -5,29 +5,46 @@ var HsqldbRowFormatError = class extends Error {
|
|
|
5
5
|
this.name = "HsqldbRowFormatError";
|
|
6
6
|
}
|
|
7
7
|
};
|
|
8
|
+
const SQL_CHAR = 1;
|
|
9
|
+
const SQL_NUMERIC = 2;
|
|
10
|
+
const SQL_DECIMAL = 3;
|
|
11
|
+
const SQL_INTEGER = 4;
|
|
12
|
+
const SQL_SMALLINT = 5;
|
|
13
|
+
const SQL_FLOAT = 6;
|
|
14
|
+
const SQL_REAL = 7;
|
|
15
|
+
const SQL_DOUBLE = 8;
|
|
16
|
+
const SQL_VARCHAR = 12;
|
|
17
|
+
const SQL_BOOLEAN_BIT = 16;
|
|
18
|
+
const SQL_DATE = 91;
|
|
19
|
+
const SQL_TIME = 92;
|
|
20
|
+
const SQL_TIMESTAMP = 93;
|
|
21
|
+
const SQL_VARCHAR_IGNORECASE = 100;
|
|
22
|
+
const SQL_BIGINT = -5;
|
|
23
|
+
const SQL_TINYINT = -6;
|
|
24
|
+
const SQL_LONGVARCHAR = -1;
|
|
8
25
|
const SQL_TYPE_NAME_TO_CODE = {
|
|
9
|
-
INTEGER:
|
|
10
|
-
INT:
|
|
11
|
-
IDENTITY:
|
|
12
|
-
DOUBLE:
|
|
13
|
-
FLOAT:
|
|
14
|
-
REAL:
|
|
15
|
-
VARCHAR:
|
|
16
|
-
CHAR:
|
|
17
|
-
CHARACTER:
|
|
18
|
-
LONGVARCHAR:
|
|
19
|
-
VARCHAR_IGNORECASE:
|
|
20
|
-
DATE:
|
|
21
|
-
TIME:
|
|
22
|
-
TIMESTAMP:
|
|
23
|
-
DATETIME:
|
|
24
|
-
DECIMAL:
|
|
25
|
-
NUMERIC:
|
|
26
|
-
BIT:
|
|
27
|
-
BOOLEAN:
|
|
28
|
-
TINYINT:
|
|
29
|
-
SMALLINT:
|
|
30
|
-
BIGINT:
|
|
26
|
+
INTEGER: SQL_INTEGER,
|
|
27
|
+
INT: SQL_INTEGER,
|
|
28
|
+
IDENTITY: SQL_INTEGER,
|
|
29
|
+
DOUBLE: SQL_DOUBLE,
|
|
30
|
+
FLOAT: SQL_FLOAT,
|
|
31
|
+
REAL: SQL_REAL,
|
|
32
|
+
VARCHAR: SQL_VARCHAR,
|
|
33
|
+
CHAR: SQL_CHAR,
|
|
34
|
+
CHARACTER: SQL_CHAR,
|
|
35
|
+
LONGVARCHAR: SQL_LONGVARCHAR,
|
|
36
|
+
VARCHAR_IGNORECASE: SQL_VARCHAR_IGNORECASE,
|
|
37
|
+
DATE: SQL_DATE,
|
|
38
|
+
TIME: SQL_TIME,
|
|
39
|
+
TIMESTAMP: SQL_TIMESTAMP,
|
|
40
|
+
DATETIME: SQL_TIMESTAMP,
|
|
41
|
+
DECIMAL: SQL_DECIMAL,
|
|
42
|
+
NUMERIC: SQL_NUMERIC,
|
|
43
|
+
BIT: SQL_BOOLEAN_BIT,
|
|
44
|
+
BOOLEAN: SQL_BOOLEAN_BIT,
|
|
45
|
+
TINYINT: SQL_TINYINT,
|
|
46
|
+
SMALLINT: SQL_SMALLINT,
|
|
47
|
+
BIGINT: SQL_BIGINT
|
|
31
48
|
};
|
|
32
49
|
const UNSUPPORTED_SQL_TYPE_NAMES = /* @__PURE__ */ new Set([
|
|
33
50
|
"BINARY",
|
|
@@ -85,46 +102,62 @@ var HsqldbDataCursor = class {
|
|
|
85
102
|
return slice;
|
|
86
103
|
}
|
|
87
104
|
};
|
|
105
|
+
const HIGH_BIT = 128;
|
|
106
|
+
const UTF8_CONTINUATION_MASK = 192;
|
|
107
|
+
const UTF8_TWO_BYTE_LEAD_NIBBLE_LOW = 12;
|
|
108
|
+
const UTF8_TWO_BYTE_LEAD_NIBBLE_HIGH = 13;
|
|
109
|
+
const UTF8_TWO_BYTE_DATA_MASK = 31;
|
|
110
|
+
const UTF8_THREE_BYTE_LEAD_NIBBLE = 14;
|
|
111
|
+
const UTF8_THREE_BYTE_DATA_MASK = 15;
|
|
112
|
+
const UTF8_CONTINUATION_DATA_MASK = 63;
|
|
113
|
+
const UTF8_CONTINUATION_BITS = 6;
|
|
114
|
+
const UTF8_THREE_BYTE_SEQUENCE_LENGTH = 3;
|
|
115
|
+
const HEX_RADIX = 16;
|
|
116
|
+
const NIBBLE_BITS = 4;
|
|
88
117
|
function readModifiedUtf8(bytes) {
|
|
89
118
|
let result = "";
|
|
90
119
|
let i = 0;
|
|
91
120
|
while (i < bytes.length) {
|
|
92
121
|
const b0 = bytes[i];
|
|
93
122
|
if (b0 === void 0) throw new HsqldbRowFormatError("truncated modified-UTF-8 byte sequence");
|
|
94
|
-
if (b0 > 0 && b0 <
|
|
123
|
+
if (b0 > 0 && b0 < HIGH_BIT) {
|
|
95
124
|
result += String.fromCharCode(b0);
|
|
96
125
|
i += 1;
|
|
97
126
|
continue;
|
|
98
127
|
}
|
|
99
|
-
const leadNibble = b0 >>
|
|
100
|
-
if (leadNibble ===
|
|
128
|
+
const leadNibble = b0 >> NIBBLE_BITS;
|
|
129
|
+
if (leadNibble === UTF8_TWO_BYTE_LEAD_NIBBLE_LOW || leadNibble === UTF8_TWO_BYTE_LEAD_NIBBLE_HIGH) {
|
|
101
130
|
const b1 = bytes[i + 1];
|
|
102
|
-
if (b1 === void 0 || (b1 &
|
|
103
|
-
result += String.fromCharCode((b0 &
|
|
131
|
+
if (b1 === void 0 || (b1 & UTF8_CONTINUATION_MASK) !== HIGH_BIT) throw new HsqldbRowFormatError("malformed modified-UTF-8 2-byte sequence");
|
|
132
|
+
result += String.fromCharCode((b0 & UTF8_TWO_BYTE_DATA_MASK) << UTF8_CONTINUATION_BITS | b1 & UTF8_CONTINUATION_DATA_MASK);
|
|
104
133
|
i += 2;
|
|
105
134
|
continue;
|
|
106
135
|
}
|
|
107
|
-
if (leadNibble ===
|
|
136
|
+
if (leadNibble === UTF8_THREE_BYTE_LEAD_NIBBLE) {
|
|
108
137
|
const b1 = bytes[i + 1];
|
|
109
138
|
const b2 = bytes[i + 2];
|
|
110
|
-
if (b1 === void 0 || b2 === void 0 || (b1 &
|
|
111
|
-
result += String.fromCharCode((b0 &
|
|
112
|
-
i +=
|
|
139
|
+
if (b1 === void 0 || b2 === void 0 || (b1 & UTF8_CONTINUATION_MASK) !== HIGH_BIT || (b2 & UTF8_CONTINUATION_MASK) !== HIGH_BIT) throw new HsqldbRowFormatError("malformed modified-UTF-8 3-byte sequence");
|
|
140
|
+
result += String.fromCharCode((b0 & UTF8_THREE_BYTE_DATA_MASK) << 12 | (b1 & UTF8_CONTINUATION_DATA_MASK) << UTF8_CONTINUATION_BITS | b2 & UTF8_CONTINUATION_DATA_MASK);
|
|
141
|
+
i += UTF8_THREE_BYTE_SEQUENCE_LENGTH;
|
|
113
142
|
continue;
|
|
114
143
|
}
|
|
115
|
-
throw new HsqldbRowFormatError(`malformed modified-UTF-8 lead byte 0x${b0.toString(
|
|
144
|
+
throw new HsqldbRowFormatError(`malformed modified-UTF-8 lead byte 0x${b0.toString(HEX_RADIX)}`);
|
|
116
145
|
}
|
|
117
146
|
return result;
|
|
118
147
|
}
|
|
148
|
+
const ZERO_BIGINT = 0n;
|
|
149
|
+
const ONE_BIGINT = 1n;
|
|
150
|
+
const BITS_PER_BYTE = 8;
|
|
151
|
+
const BITS_PER_BYTE_BIGINT = 8n;
|
|
119
152
|
function signedBigIntFromBytes(bytes) {
|
|
120
|
-
if (bytes.length === 0) return
|
|
121
|
-
let magnitude =
|
|
122
|
-
for (const byte of bytes) magnitude = magnitude <<
|
|
153
|
+
if (bytes.length === 0) return ZERO_BIGINT;
|
|
154
|
+
let magnitude = ZERO_BIGINT;
|
|
155
|
+
for (const byte of bytes) magnitude = magnitude << BITS_PER_BYTE_BIGINT | BigInt(byte);
|
|
123
156
|
const firstByte = bytes[0];
|
|
124
|
-
return firstByte !== void 0 && (firstByte &
|
|
157
|
+
return firstByte !== void 0 && (firstByte & HIGH_BIT) !== 0 ? magnitude - (ONE_BIGINT << BigInt(BITS_PER_BYTE * bytes.length)) : magnitude;
|
|
125
158
|
}
|
|
126
159
|
function exactDecimalDigits(unscaled, scale) {
|
|
127
|
-
const isNegative = unscaled <
|
|
160
|
+
const isNegative = unscaled < ZERO_BIGINT;
|
|
128
161
|
const magnitudeDigits = (isNegative ? -unscaled : unscaled).toString();
|
|
129
162
|
const sign = isNegative ? "-" : "";
|
|
130
163
|
if (scale <= 0) return `${sign}${magnitudeDigits}${"0".repeat(-scale)}`;
|
|
@@ -193,73 +226,76 @@ function calendarFieldsAt(epochMillis, timeZone) {
|
|
|
193
226
|
seconds: requiredPart(parts, "second", timeZone)
|
|
194
227
|
};
|
|
195
228
|
}
|
|
229
|
+
const MILLIS_PER_SECOND_BIGINT = 1000n;
|
|
196
230
|
function millisOfSecond(epochMillis) {
|
|
197
|
-
return Number((epochMillis %
|
|
231
|
+
return Number((epochMillis % MILLIS_PER_SECOND_BIGINT + MILLIS_PER_SECOND_BIGINT) % MILLIS_PER_SECOND_BIGINT);
|
|
198
232
|
}
|
|
199
233
|
function formatDate(epochMillis, timeZone) {
|
|
200
234
|
const { year, month, day } = calendarFieldsAt(epochMillis, timeZone);
|
|
201
235
|
return `${year}-${pad2(month)}-${pad2(day)}`;
|
|
202
236
|
}
|
|
237
|
+
const MILLIS_DIGIT_WIDTH = 3;
|
|
203
238
|
function formatTime(epochMillis, timeZone) {
|
|
204
239
|
const { hours, minutes, seconds } = calendarFieldsAt(epochMillis, timeZone);
|
|
205
240
|
const base = `${pad2(hours)}:${pad2(minutes)}:${pad2(seconds)}`;
|
|
206
241
|
const millis = millisOfSecond(epochMillis);
|
|
207
|
-
return millis === 0 ? base : `${base}.${String(millis).padStart(
|
|
242
|
+
return millis === 0 ? base : `${base}.${String(millis).padStart(MILLIS_DIGIT_WIDTH, "0")}`;
|
|
208
243
|
}
|
|
244
|
+
const NANOS_DIGIT_WIDTH = 9;
|
|
209
245
|
function formatTimestamp(epochMillis, nanos, timeZone) {
|
|
210
246
|
const { year, month, day, hours, minutes, seconds } = calendarFieldsAt(epochMillis, timeZone);
|
|
211
247
|
const base = `${year}-${pad2(month)}-${pad2(day)} ${pad2(hours)}:${pad2(minutes)}:${pad2(seconds)}`;
|
|
212
|
-
return nanos === 0 ? base : `${base}.${String(nanos).padStart(
|
|
248
|
+
return nanos === 0 ? base : `${base}.${String(nanos).padStart(NANOS_DIGIT_WIDTH, "0")}`;
|
|
213
249
|
}
|
|
214
250
|
function readHsqldbColumnValue(cursor, typeCode, options) {
|
|
215
251
|
if (cursor.readUint8() === 0) return { kind: "empty" };
|
|
216
252
|
switch (typeCode) {
|
|
217
|
-
case
|
|
218
|
-
case
|
|
219
|
-
case
|
|
220
|
-
case
|
|
253
|
+
case SQL_CHAR:
|
|
254
|
+
case SQL_VARCHAR:
|
|
255
|
+
case SQL_LONGVARCHAR:
|
|
256
|
+
case SQL_VARCHAR_IGNORECASE: {
|
|
221
257
|
const byteLength = cursor.readInt32();
|
|
222
258
|
return {
|
|
223
259
|
kind: "string",
|
|
224
260
|
value: readModifiedUtf8(cursor.readBytes(byteLength))
|
|
225
261
|
};
|
|
226
262
|
}
|
|
227
|
-
case
|
|
228
|
-
case
|
|
263
|
+
case SQL_SMALLINT:
|
|
264
|
+
case SQL_TINYINT: return {
|
|
229
265
|
kind: "number",
|
|
230
266
|
value: cursor.readInt16()
|
|
231
267
|
};
|
|
232
|
-
case
|
|
268
|
+
case SQL_INTEGER: return {
|
|
233
269
|
kind: "number",
|
|
234
270
|
value: cursor.readInt32()
|
|
235
271
|
};
|
|
236
|
-
case
|
|
237
|
-
case
|
|
238
|
-
case
|
|
239
|
-
case
|
|
272
|
+
case SQL_BIGINT: return numericCellValue(cursor.readBigInt64(), 0);
|
|
273
|
+
case SQL_FLOAT:
|
|
274
|
+
case SQL_REAL:
|
|
275
|
+
case SQL_DOUBLE: return {
|
|
240
276
|
kind: "number",
|
|
241
277
|
value: cursor.readFloat64()
|
|
242
278
|
};
|
|
243
|
-
case
|
|
244
|
-
case
|
|
279
|
+
case SQL_NUMERIC:
|
|
280
|
+
case SQL_DECIMAL: {
|
|
245
281
|
const byteLength = cursor.readInt32();
|
|
246
282
|
const magnitudeBytes = cursor.readBytes(byteLength);
|
|
247
283
|
const scale = cursor.readInt32();
|
|
248
284
|
return numericCellValue(signedBigIntFromBytes(magnitudeBytes), scale);
|
|
249
285
|
}
|
|
250
|
-
case
|
|
286
|
+
case SQL_BOOLEAN_BIT: return {
|
|
251
287
|
kind: "boolean",
|
|
252
288
|
value: cursor.readUint8() !== 0
|
|
253
289
|
};
|
|
254
|
-
case
|
|
290
|
+
case SQL_DATE: return {
|
|
255
291
|
kind: "date",
|
|
256
292
|
value: formatDate(cursor.readBigInt64(), options?.timeZone)
|
|
257
293
|
};
|
|
258
|
-
case
|
|
294
|
+
case SQL_TIME: return {
|
|
259
295
|
kind: "time",
|
|
260
296
|
value: formatTime(cursor.readBigInt64(), options?.timeZone)
|
|
261
297
|
};
|
|
262
|
-
case
|
|
298
|
+
case SQL_TIMESTAMP: return {
|
|
263
299
|
kind: "date",
|
|
264
300
|
value: formatTimestamp(cursor.readBigInt64(), cursor.readInt32(), options?.timeZone)
|
|
265
301
|
};
|
package/dist/hsqldb/script.cjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
//#region src/hsqldb/script.ts
|
|
3
|
+
const PERCENT_SCALE = 100;
|
|
3
4
|
var HsqldbScriptParseError = class extends Error {
|
|
4
5
|
statement;
|
|
5
6
|
constructor(message, statement) {
|
|
@@ -15,7 +16,7 @@ function truncateForMessage(statement) {
|
|
|
15
16
|
function displayTextFor(value) {
|
|
16
17
|
switch (value.kind) {
|
|
17
18
|
case "number": return String(value.value);
|
|
18
|
-
case "percentage": return `${value.value *
|
|
19
|
+
case "percentage": return `${value.value * PERCENT_SCALE}%`;
|
|
19
20
|
case "currency": return value.currency === void 0 ? String(value.value) : `${value.value} ${value.currency}`;
|
|
20
21
|
case "boolean": return value.value ? "TRUE" : "FALSE";
|
|
21
22
|
case "date":
|
package/dist/hsqldb/script.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
//#region src/hsqldb/script.ts
|
|
2
|
+
const PERCENT_SCALE = 100;
|
|
2
3
|
var HsqldbScriptParseError = class extends Error {
|
|
3
4
|
statement;
|
|
4
5
|
constructor(message, statement) {
|
|
@@ -14,7 +15,7 @@ function truncateForMessage(statement) {
|
|
|
14
15
|
function displayTextFor(value) {
|
|
15
16
|
switch (value.kind) {
|
|
16
17
|
case "number": return String(value.value);
|
|
17
|
-
case "percentage": return `${value.value *
|
|
18
|
+
case "percentage": return `${value.value * PERCENT_SCALE}%`;
|
|
18
19
|
case "currency": return value.currency === void 0 ? String(value.value) : `${value.value} ${value.currency}`;
|
|
19
20
|
case "boolean": return value.value ? "TRUE" : "FALSE";
|
|
20
21
|
case "date":
|
package/dist/latex/lower.cjs
CHANGED
|
@@ -3,6 +3,7 @@ const require_latex_temml = require("./temml.cjs");
|
|
|
3
3
|
const require_latex_symbols = require("./symbols.cjs");
|
|
4
4
|
const require_latex_rational = require("./rational.cjs");
|
|
5
5
|
//#region src/latex/lower.ts
|
|
6
|
+
const RELATION_SUBSCRIPT_MIN_NODES = 3;
|
|
6
7
|
const BINARY_ATOM_OPERATORS = {
|
|
7
8
|
"+": "math:add",
|
|
8
9
|
"-": "math:subtract",
|
|
@@ -523,7 +524,7 @@ function readBinder(node, context) {
|
|
|
523
524
|
const sub = nodesOfScript(node.sub);
|
|
524
525
|
const sup = nodesOfScript(node.sup);
|
|
525
526
|
const upper = sup === void 0 ? implicitBound(context) : lowerNodeList(sup, context);
|
|
526
|
-
if ((sub?.length ?? 0) >=
|
|
527
|
+
if ((sub?.length ?? 0) >= RELATION_SUBSCRIPT_MIN_NODES) {
|
|
527
528
|
const first = sub?.[0];
|
|
528
529
|
const relation = sub?.[1];
|
|
529
530
|
const rest = sub?.slice(2) ?? [];
|
package/dist/latex/lower.js
CHANGED
|
@@ -2,6 +2,7 @@ import { isTemmlNode, parseLatex } from "./temml.js";
|
|
|
2
2
|
import { SymbolResolver, glyphOfSymbolText } from "./symbols.js";
|
|
3
3
|
import { decimalToRational } from "./rational.js";
|
|
4
4
|
//#region src/latex/lower.ts
|
|
5
|
+
const RELATION_SUBSCRIPT_MIN_NODES = 3;
|
|
5
6
|
const BINARY_ATOM_OPERATORS = {
|
|
6
7
|
"+": "math:add",
|
|
7
8
|
"-": "math:subtract",
|
|
@@ -522,7 +523,7 @@ function readBinder(node, context) {
|
|
|
522
523
|
const sub = nodesOfScript(node.sub);
|
|
523
524
|
const sup = nodesOfScript(node.sup);
|
|
524
525
|
const upper = sup === void 0 ? implicitBound(context) : lowerNodeList(sup, context);
|
|
525
|
-
if ((sub?.length ?? 0) >=
|
|
526
|
+
if ((sub?.length ?? 0) >= RELATION_SUBSCRIPT_MIN_NODES) {
|
|
526
527
|
const first = sub?.[0];
|
|
527
528
|
const relation = sub?.[1];
|
|
528
529
|
const rest = sub?.slice(2) ?? [];
|
package/dist/latex/rational.cjs
CHANGED
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
//#region src/latex/rational.ts
|
|
3
|
+
const BIGINT_ZERO = 0n;
|
|
4
|
+
const BIGINT_ONE = 1n;
|
|
5
|
+
const BIGINT_TEN = 10n;
|
|
3
6
|
function gcd(a, b) {
|
|
4
7
|
let x = a;
|
|
5
8
|
let y = b;
|
|
6
|
-
while (y !==
|
|
9
|
+
while (y !== BIGINT_ZERO) {
|
|
7
10
|
const next = x % y;
|
|
8
11
|
x = y;
|
|
9
12
|
y = next;
|
|
10
13
|
}
|
|
11
|
-
return x ===
|
|
14
|
+
return x === BIGINT_ZERO ? BIGINT_ONE : x;
|
|
12
15
|
}
|
|
13
16
|
function decimalToRational(literal) {
|
|
14
17
|
const point = literal.indexOf(".");
|
|
15
18
|
const digits = point === -1 ? literal : literal.slice(0, point) + literal.slice(point + 1);
|
|
16
19
|
if (!/^\d+$/.test(digits) || literal.includes(".", point + 1)) return;
|
|
17
20
|
const denominatorPower = point === -1 ? 0 : literal.length - point - 1;
|
|
18
|
-
return reduceRational(BigInt(digits),
|
|
21
|
+
return reduceRational(BigInt(digits), BIGINT_TEN ** BigInt(denominatorPower));
|
|
19
22
|
}
|
|
20
23
|
function reduceRational(numerator, denominator) {
|
|
21
24
|
const divisor = gcd(numerator, denominator);
|
package/dist/latex/rational.js
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
//#region src/latex/rational.ts
|
|
2
|
+
const BIGINT_ZERO = 0n;
|
|
3
|
+
const BIGINT_ONE = 1n;
|
|
4
|
+
const BIGINT_TEN = 10n;
|
|
2
5
|
function gcd(a, b) {
|
|
3
6
|
let x = a;
|
|
4
7
|
let y = b;
|
|
5
|
-
while (y !==
|
|
8
|
+
while (y !== BIGINT_ZERO) {
|
|
6
9
|
const next = x % y;
|
|
7
10
|
x = y;
|
|
8
11
|
y = next;
|
|
9
12
|
}
|
|
10
|
-
return x ===
|
|
13
|
+
return x === BIGINT_ZERO ? BIGINT_ONE : x;
|
|
11
14
|
}
|
|
12
15
|
function decimalToRational(literal) {
|
|
13
16
|
const point = literal.indexOf(".");
|
|
14
17
|
const digits = point === -1 ? literal : literal.slice(0, point) + literal.slice(point + 1);
|
|
15
18
|
if (!/^\d+$/.test(digits) || literal.includes(".", point + 1)) return;
|
|
16
19
|
const denominatorPower = point === -1 ? 0 : literal.length - point - 1;
|
|
17
|
-
return reduceRational(BigInt(digits),
|
|
20
|
+
return reduceRational(BigInt(digits), BIGINT_TEN ** BigInt(denominatorPower));
|
|
18
21
|
}
|
|
19
22
|
function reduceRational(numerator, denominator) {
|
|
20
23
|
const divisor = gcd(numerator, denominator);
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
//#region src/layout/cell-typing.ts
|
|
3
|
+
const YEAR_DIGITS = 4;
|
|
4
|
+
const MONTH_DAY_DIGITS = 2;
|
|
5
|
+
const MONTH_ABBREVIATION_LENGTH = 3;
|
|
6
|
+
const COMMA_GROUP_LENGTH = 4;
|
|
3
7
|
const CURRENCY_SYMBOLS = /* @__PURE__ */ new Map([
|
|
4
8
|
["$", void 0],
|
|
5
9
|
["¥", void 0],
|
|
@@ -22,7 +26,7 @@ const MONTH_NAMES = new Map([
|
|
|
22
26
|
"october",
|
|
23
27
|
"november",
|
|
24
28
|
"december"
|
|
25
|
-
].flatMap((name, index) => [[name, index + 1], [name.slice(0,
|
|
29
|
+
].flatMap((name, index) => [[name, index + 1], [name.slice(0, MONTH_ABBREVIATION_LENGTH), index + 1]]));
|
|
26
30
|
const BOOLEAN_LITERALS = /* @__PURE__ */ new Map([["true", true], ["false", false]]);
|
|
27
31
|
const AMBIGUOUS_BOOLEAN_WORDS = /* @__PURE__ */ new Set([
|
|
28
32
|
"yes",
|
|
@@ -48,7 +52,7 @@ function parseNumericLiteral(text) {
|
|
|
48
52
|
if (grouped?.groups !== void 0) {
|
|
49
53
|
const { sign, lead, groups, fraction } = grouped.groups;
|
|
50
54
|
if (lead.length > 1 && lead.startsWith("0")) return { declined: "leading-zero-digits" };
|
|
51
|
-
if (groups.length /
|
|
55
|
+
if (groups.length / COMMA_GROUP_LENGTH === 1 && fraction === void 0) return { declined: "ambiguous-grouping-separator" };
|
|
52
56
|
return {
|
|
53
57
|
canonicalDecimal: `${sign === "-" ? "-" : ""}${lead}${groups.replaceAll(",", "")}${fraction === void 0 ? "" : `.${fraction}`}`,
|
|
54
58
|
grouped: true
|
|
@@ -126,7 +130,7 @@ function isRealCalendarDate(year, month, day) {
|
|
|
126
130
|
return probe.getUTCFullYear() === year && probe.getUTCMonth() === month - 1 && probe.getUTCDate() === day;
|
|
127
131
|
}
|
|
128
132
|
function isoDateValue(year, month, day) {
|
|
129
|
-
return `${String(year).padStart(
|
|
133
|
+
return `${String(year).padStart(YEAR_DIGITS, "0")}-${String(month).padStart(MONTH_DAY_DIGITS, "0")}-${String(day).padStart(MONTH_DAY_DIGITS, "0")}`;
|
|
130
134
|
}
|
|
131
135
|
function inferDate(text) {
|
|
132
136
|
const iso = ISO_DATE_PATTERN.exec(text);
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
//#region src/layout/cell-typing.ts
|
|
2
|
+
const YEAR_DIGITS = 4;
|
|
3
|
+
const MONTH_DAY_DIGITS = 2;
|
|
4
|
+
const MONTH_ABBREVIATION_LENGTH = 3;
|
|
5
|
+
const COMMA_GROUP_LENGTH = 4;
|
|
2
6
|
const CURRENCY_SYMBOLS = /* @__PURE__ */ new Map([
|
|
3
7
|
["$", void 0],
|
|
4
8
|
["¥", void 0],
|
|
@@ -21,7 +25,7 @@ const MONTH_NAMES = new Map([
|
|
|
21
25
|
"october",
|
|
22
26
|
"november",
|
|
23
27
|
"december"
|
|
24
|
-
].flatMap((name, index) => [[name, index + 1], [name.slice(0,
|
|
28
|
+
].flatMap((name, index) => [[name, index + 1], [name.slice(0, MONTH_ABBREVIATION_LENGTH), index + 1]]));
|
|
25
29
|
const BOOLEAN_LITERALS = /* @__PURE__ */ new Map([["true", true], ["false", false]]);
|
|
26
30
|
const AMBIGUOUS_BOOLEAN_WORDS = /* @__PURE__ */ new Set([
|
|
27
31
|
"yes",
|
|
@@ -47,7 +51,7 @@ function parseNumericLiteral(text) {
|
|
|
47
51
|
if (grouped?.groups !== void 0) {
|
|
48
52
|
const { sign, lead, groups, fraction } = grouped.groups;
|
|
49
53
|
if (lead.length > 1 && lead.startsWith("0")) return { declined: "leading-zero-digits" };
|
|
50
|
-
if (groups.length /
|
|
54
|
+
if (groups.length / COMMA_GROUP_LENGTH === 1 && fraction === void 0) return { declined: "ambiguous-grouping-separator" };
|
|
51
55
|
return {
|
|
52
56
|
canonicalDecimal: `${sign === "-" ? "-" : ""}${lead}${groups.replaceAll(",", "")}${fraction === void 0 ? "" : `.${fraction}`}`,
|
|
53
57
|
grouped: true
|
|
@@ -125,7 +129,7 @@ function isRealCalendarDate(year, month, day) {
|
|
|
125
129
|
return probe.getUTCFullYear() === year && probe.getUTCMonth() === month - 1 && probe.getUTCDate() === day;
|
|
126
130
|
}
|
|
127
131
|
function isoDateValue(year, month, day) {
|
|
128
|
-
return `${String(year).padStart(
|
|
132
|
+
return `${String(year).padStart(YEAR_DIGITS, "0")}-${String(month).padStart(MONTH_DAY_DIGITS, "0")}-${String(day).padStart(MONTH_DAY_DIGITS, "0")}`;
|
|
129
133
|
}
|
|
130
134
|
function inferDate(text) {
|
|
131
135
|
const iso = ISO_DATE_PATTERN.exec(text);
|
|
@@ -20,6 +20,8 @@ const ZERO_MARGINS = {
|
|
|
20
20
|
leftPt: 0
|
|
21
21
|
};
|
|
22
22
|
const LINE_BASELINE_TOLERANCE_FACTOR = .5;
|
|
23
|
+
const AFM_UNITS_PER_EM = 1e3;
|
|
24
|
+
const HALF_POINT_BUCKET_PT = .5;
|
|
23
25
|
function sharesBaseline(anchor, item) {
|
|
24
26
|
return (0, pdf_codec_text_group.runsShareBaseline)(anchor, item, { baselineToleranceEm: LINE_BASELINE_TOLERANCE_FACTOR });
|
|
25
27
|
}
|
|
@@ -151,8 +153,8 @@ function textItemVerticalExtent(item) {
|
|
|
151
153
|
const { standardName } = (0, pdf_codec_fonts.resolveStandardFont)(item.font.family, item.font.weight === "bold", item.font.style === "italic");
|
|
152
154
|
const metrics = pdf_codec_afm_widths.STANDARD_METRICS[standardName];
|
|
153
155
|
return {
|
|
154
|
-
ascentPt: metrics.ascender /
|
|
155
|
-
descentPt: Math.abs(metrics.descender) /
|
|
156
|
+
ascentPt: metrics.ascender / AFM_UNITS_PER_EM * item.sizePt,
|
|
157
|
+
descentPt: Math.abs(metrics.descender) / AFM_UNITS_PER_EM * item.sizePt
|
|
156
158
|
};
|
|
157
159
|
}
|
|
158
160
|
function textItemToContentRun(item) {
|
|
@@ -232,7 +234,7 @@ function modeOf(values, bucketSize) {
|
|
|
232
234
|
return bestBucket;
|
|
233
235
|
}
|
|
234
236
|
function modalLineGap(gaps) {
|
|
235
|
-
const counts = bucketCounts(gaps,
|
|
237
|
+
const counts = bucketCounts(gaps, HALF_POINT_BUCKET_PT);
|
|
236
238
|
let bestBucket = gaps[0];
|
|
237
239
|
let bestCount = 0;
|
|
238
240
|
for (const [bucket, count] of counts) if (count > bestCount) {
|
|
@@ -245,7 +247,7 @@ const PARAGRAPH_GAP_MULTIPLIER = 1.25;
|
|
|
245
247
|
const NOMINAL_LINE_SPACING_RATIO = 1.2;
|
|
246
248
|
const MIN_LINES_FOR_GAP_MODE = 3;
|
|
247
249
|
function estimateModalLineSpacing(lines) {
|
|
248
|
-
if (lines.length < MIN_LINES_FOR_GAP_MODE) return modeOf(lines.map((l) => l.items[0].sizePt),
|
|
250
|
+
if (lines.length < MIN_LINES_FOR_GAP_MODE) return modeOf(lines.map((l) => l.items[0].sizePt), HALF_POINT_BUCKET_PT) * NOMINAL_LINE_SPACING_RATIO;
|
|
249
251
|
const gaps = [];
|
|
250
252
|
for (let i = 1; i < lines.length; i++) gaps.push(lines[i - 1].baselineY - lines[i].baselineY);
|
|
251
253
|
return modalLineGap(gaps);
|
|
@@ -288,14 +290,14 @@ function dropHiddenLayerContent(doc) {
|
|
|
288
290
|
}))
|
|
289
291
|
};
|
|
290
292
|
}
|
|
291
|
-
const HEADING_LEVELS =
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
]);
|
|
293
|
+
const HEADING_LEVELS = new Map([
|
|
294
|
+
"H1",
|
|
295
|
+
"H2",
|
|
296
|
+
"H3",
|
|
297
|
+
"H4",
|
|
298
|
+
"H5",
|
|
299
|
+
"H6"
|
|
300
|
+
].map((tag, index) => [tag, index + 1]));
|
|
299
301
|
const DIVISION_TYPES = /* @__PURE__ */ new Set([
|
|
300
302
|
"Part",
|
|
301
303
|
"Sect",
|
|
@@ -350,10 +352,10 @@ function headingSizeLevels(doc) {
|
|
|
350
352
|
const sizes = [];
|
|
351
353
|
for (const page of doc.pages) for (const item of page.items) if (item.kind === "text" && hasVisibleText(item.text)) sizes.push(item.sizePt);
|
|
352
354
|
if (sizes.length === 0) return /* @__PURE__ */ new Map();
|
|
353
|
-
const bodySizePt = modeOf(sizes,
|
|
355
|
+
const bodySizePt = modeOf(sizes, HALF_POINT_BUCKET_PT);
|
|
354
356
|
const headingBuckets = /* @__PURE__ */ new Set();
|
|
355
357
|
for (const size of sizes) {
|
|
356
|
-
const bucket = Math.round(size /
|
|
358
|
+
const bucket = Math.round(size / HALF_POINT_BUCKET_PT) * HALF_POINT_BUCKET_PT;
|
|
357
359
|
if (bucket - bodySizePt >= HEADING_MIN_SIZE_DELTA_PT) headingBuckets.add(bucket);
|
|
358
360
|
}
|
|
359
361
|
const levels = /* @__PURE__ */ new Map();
|
|
@@ -363,7 +365,7 @@ function headingSizeLevels(doc) {
|
|
|
363
365
|
return levels;
|
|
364
366
|
}
|
|
365
367
|
function headingLevelOf(paragraph, levels) {
|
|
366
|
-
return levels.get(modeOf(paragraph.lines.flatMap((line) => line.items).filter((item) => hasVisibleText(item.text)).map((item) => item.sizePt),
|
|
368
|
+
return levels.get(modeOf(paragraph.lines.flatMap((line) => line.items).filter((item) => hasVisibleText(item.text)).map((item) => item.sizePt), HALF_POINT_BUCKET_PT));
|
|
367
369
|
}
|
|
368
370
|
function samePageSize(a, b) {
|
|
369
371
|
return a.widthPt === b.widthPt && a.heightPt === b.heightPt;
|
|
@@ -19,6 +19,8 @@ const ZERO_MARGINS = {
|
|
|
19
19
|
leftPt: 0
|
|
20
20
|
};
|
|
21
21
|
const LINE_BASELINE_TOLERANCE_FACTOR = .5;
|
|
22
|
+
const AFM_UNITS_PER_EM = 1e3;
|
|
23
|
+
const HALF_POINT_BUCKET_PT = .5;
|
|
22
24
|
function sharesBaseline(anchor, item) {
|
|
23
25
|
return runsShareBaseline(anchor, item, { baselineToleranceEm: LINE_BASELINE_TOLERANCE_FACTOR });
|
|
24
26
|
}
|
|
@@ -150,8 +152,8 @@ function textItemVerticalExtent(item) {
|
|
|
150
152
|
const { standardName } = resolveStandardFont(item.font.family, item.font.weight === "bold", item.font.style === "italic");
|
|
151
153
|
const metrics = STANDARD_METRICS[standardName];
|
|
152
154
|
return {
|
|
153
|
-
ascentPt: metrics.ascender /
|
|
154
|
-
descentPt: Math.abs(metrics.descender) /
|
|
155
|
+
ascentPt: metrics.ascender / AFM_UNITS_PER_EM * item.sizePt,
|
|
156
|
+
descentPt: Math.abs(metrics.descender) / AFM_UNITS_PER_EM * item.sizePt
|
|
155
157
|
};
|
|
156
158
|
}
|
|
157
159
|
function textItemToContentRun(item) {
|
|
@@ -231,7 +233,7 @@ function modeOf(values, bucketSize) {
|
|
|
231
233
|
return bestBucket;
|
|
232
234
|
}
|
|
233
235
|
function modalLineGap(gaps) {
|
|
234
|
-
const counts = bucketCounts(gaps,
|
|
236
|
+
const counts = bucketCounts(gaps, HALF_POINT_BUCKET_PT);
|
|
235
237
|
let bestBucket = gaps[0];
|
|
236
238
|
let bestCount = 0;
|
|
237
239
|
for (const [bucket, count] of counts) if (count > bestCount) {
|
|
@@ -244,7 +246,7 @@ const PARAGRAPH_GAP_MULTIPLIER = 1.25;
|
|
|
244
246
|
const NOMINAL_LINE_SPACING_RATIO = 1.2;
|
|
245
247
|
const MIN_LINES_FOR_GAP_MODE = 3;
|
|
246
248
|
function estimateModalLineSpacing(lines) {
|
|
247
|
-
if (lines.length < MIN_LINES_FOR_GAP_MODE) return modeOf(lines.map((l) => l.items[0].sizePt),
|
|
249
|
+
if (lines.length < MIN_LINES_FOR_GAP_MODE) return modeOf(lines.map((l) => l.items[0].sizePt), HALF_POINT_BUCKET_PT) * NOMINAL_LINE_SPACING_RATIO;
|
|
248
250
|
const gaps = [];
|
|
249
251
|
for (let i = 1; i < lines.length; i++) gaps.push(lines[i - 1].baselineY - lines[i].baselineY);
|
|
250
252
|
return modalLineGap(gaps);
|
|
@@ -287,14 +289,14 @@ function dropHiddenLayerContent(doc) {
|
|
|
287
289
|
}))
|
|
288
290
|
};
|
|
289
291
|
}
|
|
290
|
-
const HEADING_LEVELS =
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
]);
|
|
292
|
+
const HEADING_LEVELS = new Map([
|
|
293
|
+
"H1",
|
|
294
|
+
"H2",
|
|
295
|
+
"H3",
|
|
296
|
+
"H4",
|
|
297
|
+
"H5",
|
|
298
|
+
"H6"
|
|
299
|
+
].map((tag, index) => [tag, index + 1]));
|
|
298
300
|
const DIVISION_TYPES = /* @__PURE__ */ new Set([
|
|
299
301
|
"Part",
|
|
300
302
|
"Sect",
|
|
@@ -349,10 +351,10 @@ function headingSizeLevels(doc) {
|
|
|
349
351
|
const sizes = [];
|
|
350
352
|
for (const page of doc.pages) for (const item of page.items) if (item.kind === "text" && hasVisibleText(item.text)) sizes.push(item.sizePt);
|
|
351
353
|
if (sizes.length === 0) return /* @__PURE__ */ new Map();
|
|
352
|
-
const bodySizePt = modeOf(sizes,
|
|
354
|
+
const bodySizePt = modeOf(sizes, HALF_POINT_BUCKET_PT);
|
|
353
355
|
const headingBuckets = /* @__PURE__ */ new Set();
|
|
354
356
|
for (const size of sizes) {
|
|
355
|
-
const bucket = Math.round(size /
|
|
357
|
+
const bucket = Math.round(size / HALF_POINT_BUCKET_PT) * HALF_POINT_BUCKET_PT;
|
|
356
358
|
if (bucket - bodySizePt >= HEADING_MIN_SIZE_DELTA_PT) headingBuckets.add(bucket);
|
|
357
359
|
}
|
|
358
360
|
const levels = /* @__PURE__ */ new Map();
|
|
@@ -362,7 +364,7 @@ function headingSizeLevels(doc) {
|
|
|
362
364
|
return levels;
|
|
363
365
|
}
|
|
364
366
|
function headingLevelOf(paragraph, levels) {
|
|
365
|
-
return levels.get(modeOf(paragraph.lines.flatMap((line) => line.items).filter((item) => hasVisibleText(item.text)).map((item) => item.sizePt),
|
|
367
|
+
return levels.get(modeOf(paragraph.lines.flatMap((line) => line.items).filter((item) => hasVisibleText(item.text)).map((item) => item.sizePt), HALF_POINT_BUCKET_PT));
|
|
366
368
|
}
|
|
367
369
|
function samePageSize(a, b) {
|
|
368
370
|
return a.widthPt === b.widthPt && a.heightPt === b.heightPt;
|
package/dist/layout/shared.cjs
CHANGED
|
@@ -6,6 +6,7 @@ let document_schema_js = require("document-schema.js");
|
|
|
6
6
|
let byte_codec = require("byte-codec");
|
|
7
7
|
let pdf_codec_layout = require("pdf-codec/layout");
|
|
8
8
|
//#region src/layout/shared.ts
|
|
9
|
+
const HEX_RADIX = 16;
|
|
9
10
|
function stampFrame(node, pageIndex, box) {
|
|
10
11
|
const frame = {
|
|
11
12
|
pageIndex,
|
|
@@ -200,7 +201,7 @@ function decodeImageDimensions(format, bytes) {
|
|
|
200
201
|
function registerImage(block, images) {
|
|
201
202
|
if (block.format === "svg" || block.format === "gif") throw new Error(`registerImage: an image block in ${block.format} format cannot be laid out to PDF — pdf-codec's own LayoutImageAsset registry (and its writer, byte-codec's image encoders) supports png and jpeg only`);
|
|
202
203
|
const bytes = (0, ooxml_js.base64ToBytes)(block.base64);
|
|
203
|
-
const imageId = `img${(0, byte_codec.crc32)(bytes).toString(
|
|
204
|
+
const imageId = `img${(0, byte_codec.crc32)(bytes).toString(HEX_RADIX)}`;
|
|
204
205
|
if (!(imageId in images)) {
|
|
205
206
|
const { widthPx, heightPx } = decodeImageDimensions(block.format, bytes);
|
|
206
207
|
images[imageId] = {
|
package/dist/layout/shared.js
CHANGED
|
@@ -5,6 +5,7 @@ import { COLOR_BLACK, DEFAULT_LAYOUT_FONT, tableCellColumnSpan, walkTableGrid }
|
|
|
5
5
|
import { crc32, decodePng, readJpegInfo } from "byte-codec";
|
|
6
6
|
import { LAYOUT_FORMAT_VERSION } from "pdf-codec/layout";
|
|
7
7
|
//#region src/layout/shared.ts
|
|
8
|
+
const HEX_RADIX = 16;
|
|
8
9
|
function stampFrame(node, pageIndex, box) {
|
|
9
10
|
const frame = {
|
|
10
11
|
pageIndex,
|
|
@@ -199,7 +200,7 @@ function decodeImageDimensions(format, bytes) {
|
|
|
199
200
|
function registerImage(block, images) {
|
|
200
201
|
if (block.format === "svg" || block.format === "gif") throw new Error(`registerImage: an image block in ${block.format} format cannot be laid out to PDF — pdf-codec's own LayoutImageAsset registry (and its writer, byte-codec's image encoders) supports png and jpeg only`);
|
|
201
202
|
const bytes = base64ToBytes(block.base64);
|
|
202
|
-
const imageId = `img${crc32(bytes).toString(
|
|
203
|
+
const imageId = `img${crc32(bytes).toString(HEX_RADIX)}`;
|
|
203
204
|
if (!(imageId in images)) {
|
|
204
205
|
const { widthPx, heightPx } = decodeImageDimensions(block.format, bytes);
|
|
205
206
|
images[imageId] = {
|
package/dist/layout/sheets.cjs
CHANGED
|
@@ -6,6 +6,7 @@ const require_layout_shared = require("./shared.cjs");
|
|
|
6
6
|
const require_ports_abort = require("../ports/abort.cjs");
|
|
7
7
|
let document_schema_js = require("document-schema.js");
|
|
8
8
|
//#region src/layout/sheets.ts
|
|
9
|
+
const PERCENT_SCALE = 100;
|
|
9
10
|
function anchoredFormulas(sheet) {
|
|
10
11
|
const resolved = [];
|
|
11
12
|
for (const object of sheet.embeddedObjects ?? []) {
|
|
@@ -102,7 +103,7 @@ function computeHeaderGutter(printSettings, range, measurer) {
|
|
|
102
103
|
};
|
|
103
104
|
}
|
|
104
105
|
function resolveScale(printSettings, availableWidthPt, availableHeightPt, totalContentWidthPt, totalContentHeightPt) {
|
|
105
|
-
if (printSettings.scalePercent !== void 0) return Math.max(printSettings.scalePercent /
|
|
106
|
+
if (printSettings.scalePercent !== void 0) return Math.max(printSettings.scalePercent / PERCENT_SCALE, MINIMUM_SCALE);
|
|
106
107
|
if (printSettings.fitToPages !== void 0) {
|
|
107
108
|
const budgetWidthPt = availableWidthPt * printSettings.fitToPages.width;
|
|
108
109
|
const budgetHeightPt = availableHeightPt * printSettings.fitToPages.height;
|