documents.js 1.60.3 → 1.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +84 -44
- package/dist/{blr-types-CYYC3yYU.d.cts → blr-types-DVgO1DQ9.d.cts} +1 -1
- package/dist/{blr-types-CYYC3yYU.d.ts → blr-types-DVgO1DQ9.d.ts} +1 -1
- package/dist/convert/capability.cjs +1 -0
- package/dist/convert/capability.d.cts +1 -1
- package/dist/convert/capability.d.ts +1 -1
- package/dist/convert/capability.js +1 -0
- package/dist/convert/convert.cjs +29 -27
- package/dist/convert/convert.d.cts +9 -3
- package/dist/convert/convert.d.ts +9 -3
- package/dist/convert/convert.js +29 -27
- package/dist/edit/docx/content.cjs +75 -13
- package/dist/edit/docx/content.d.cts +8 -2
- package/dist/edit/docx/content.d.ts +8 -2
- package/dist/edit/docx/content.js +75 -13
- package/dist/edit/docx/paragraph.cjs +14 -0
- package/dist/edit/docx/paragraph.d.cts +5 -0
- package/dist/edit/docx/paragraph.d.ts +5 -0
- package/dist/edit/docx/paragraph.js +14 -0
- package/dist/edit/docx/run.cjs +1 -1
- package/dist/edit/docx/run.js +1 -1
- package/dist/edit/docx/table.cjs +41 -0
- package/dist/edit/docx/table.d.cts +7 -1
- package/dist/edit/docx/table.d.ts +7 -1
- package/dist/edit/docx/table.js +42 -1
- package/dist/edit/geometry.cjs +38 -0
- package/dist/edit/geometry.d.cts +7 -0
- package/dist/edit/geometry.d.ts +7 -0
- package/dist/edit/geometry.js +36 -0
- package/dist/edit/odg/content.cjs +15 -12
- package/dist/edit/odg/content.js +15 -12
- package/dist/edit/odg/editor.d.cts +1 -1
- package/dist/edit/odg/editor.d.ts +1 -1
- package/dist/edit/odg/page.d.cts +3 -3
- package/dist/edit/odg/page.d.ts +3 -3
- package/dist/edit/odg/vector.cjs +22 -13
- package/dist/edit/odg/vector.d.cts +1 -1
- package/dist/edit/odg/vector.d.ts +1 -1
- package/dist/edit/odg/vector.js +23 -14
- package/dist/edit/odp/content.cjs +15 -0
- package/dist/edit/odp/content.js +16 -1
- package/dist/edit/odp/editor.d.cts +1 -1
- package/dist/edit/odp/editor.d.ts +1 -1
- package/dist/edit/odp/image.d.cts +1 -1
- package/dist/edit/odp/image.d.ts +1 -1
- package/dist/edit/odp/shape.cjs +11 -30
- package/dist/edit/odp/shape.d.cts +2 -2
- package/dist/edit/odp/shape.d.ts +2 -2
- package/dist/edit/odp/shape.js +13 -33
- package/dist/edit/odp/slide.cjs +11 -0
- package/dist/edit/odp/slide.d.cts +14 -4
- package/dist/edit/odp/slide.d.ts +14 -4
- package/dist/edit/odp/slide.js +12 -1
- package/dist/edit/odt/content.cjs +56 -16
- package/dist/edit/odt/content.d.cts +4 -2
- package/dist/edit/odt/content.d.ts +4 -2
- package/dist/edit/odt/content.js +56 -17
- package/dist/edit/odt/editor.d.cts +1 -1
- package/dist/edit/odt/editor.d.ts +1 -1
- package/dist/edit/odt/table.cjs +36 -0
- package/dist/edit/odt/table.d.cts +1 -36
- package/dist/edit/odt/table.d.ts +1 -36
- package/dist/edit/odt/table.js +37 -1
- package/dist/edit/pptx/content.cjs +71 -3
- package/dist/edit/pptx/content.js +71 -3
- package/dist/edit/pptx/editor.d.cts +1 -1
- package/dist/edit/pptx/editor.d.ts +1 -1
- package/dist/edit/pptx/image.d.cts +1 -1
- package/dist/edit/pptx/image.d.ts +1 -1
- package/dist/edit/pptx/shape.cjs +23 -1
- package/dist/edit/pptx/shape.d.cts +2 -2
- package/dist/edit/pptx/shape.d.ts +2 -2
- package/dist/edit/pptx/shape.js +23 -3
- package/dist/edit/pptx/slide.cjs +10 -1
- package/dist/edit/pptx/slide.d.cts +11 -4
- package/dist/edit/pptx/slide.d.ts +11 -4
- package/dist/edit/pptx/slide.js +10 -1
- package/dist/edit/pptx/table.cjs +136 -0
- package/dist/edit/pptx/table.d.cts +2 -0
- package/dist/edit/pptx/table.d.ts +2 -0
- package/dist/edit/pptx/table.js +131 -0
- package/dist/firebird/backup.d.cts +1 -1
- package/dist/firebird/backup.d.ts +1 -1
- package/dist/firebird/blr-types.cjs +2 -2
- package/dist/firebird/blr-types.d.cts +1 -1
- package/dist/firebird/blr-types.d.ts +1 -1
- package/dist/firebird/blr-types.js +2 -2
- package/dist/firebird/data.cjs +68 -14
- package/dist/firebird/data.d.cts +1 -1
- package/dist/firebird/data.d.ts +1 -1
- package/dist/firebird/data.js +68 -14
- package/dist/firebird/schema.cjs +13 -1
- package/dist/firebird/schema.d.cts +1 -1
- package/dist/firebird/schema.d.ts +1 -1
- package/dist/firebird/schema.js +13 -1
- package/dist/{geometry-DvwdrIij.d.cts → geometry-DaJr8yQW.d.cts} +2 -2
- package/dist/{geometry-DvwdrIij.d.ts → geometry-DaJr8yQW.d.ts} +2 -2
- package/dist/hsqldb/binary-script.cjs +154 -0
- package/dist/hsqldb/binary-script.d.cts +15 -0
- package/dist/hsqldb/binary-script.d.ts +15 -0
- package/dist/hsqldb/binary-script.js +151 -0
- package/dist/hsqldb/cache.cjs +18 -11
- package/dist/hsqldb/cache.d.cts +9 -4
- package/dist/hsqldb/cache.d.ts +9 -4
- package/dist/hsqldb/cache.js +18 -11
- package/dist/hsqldb/rowformat.cjs +60 -16
- package/dist/hsqldb/rowformat.d.cts +2 -21
- package/dist/hsqldb/rowformat.d.ts +2 -21
- package/dist/hsqldb/rowformat.js +60 -17
- package/dist/{image-BZDy72Jb.d.cts → image-7snmKIxn.d.cts} +1 -1
- package/dist/{image-B-xQWYYS.d.ts → image-Cs8xF753.d.ts} +1 -1
- package/dist/{image-CeqwL-Qs.d.ts → image-DHcA9kaK.d.ts} +1 -1
- package/dist/{image-DWX6cNOD.d.cts → image-M5SezZVI.d.cts} +1 -1
- package/dist/index.cjs +54 -3
- package/dist/index.d.cts +28 -20
- package/dist/index.d.ts +27 -19
- package/dist/index.js +13 -4
- package/dist/layout/cell-typing.cjs +209 -0
- package/dist/layout/cell-typing.d.cts +22 -0
- package/dist/layout/cell-typing.d.ts +22 -0
- package/dist/layout/cell-typing.js +208 -0
- package/dist/layout/drawing.cjs +193 -17
- package/dist/layout/drawing.js +193 -17
- package/dist/layout/engine.cjs +46 -29
- package/dist/layout/engine.d.cts +0 -2
- package/dist/layout/engine.d.ts +0 -2
- package/dist/layout/engine.js +47 -30
- package/dist/layout/lattice.cjs +139 -0
- package/dist/layout/lattice.d.cts +20 -0
- package/dist/layout/lattice.d.ts +20 -0
- package/dist/layout/lattice.js +135 -0
- package/dist/layout/reconstruct.cjs +176 -113
- package/dist/layout/reconstruct.d.cts +2 -0
- package/dist/layout/reconstruct.d.ts +2 -0
- package/dist/layout/reconstruct.js +173 -110
- package/dist/layout/shared.cjs +52 -0
- package/dist/layout/shared.d.cts +4 -2
- package/dist/layout/shared.d.ts +4 -2
- package/dist/layout/shared.js +51 -1
- package/dist/layout/sheets.cjs +45 -11
- package/dist/layout/sheets.js +46 -12
- package/dist/layout/slides.cjs +7 -7
- package/dist/layout/slides.d.cts +0 -3
- package/dist/layout/slides.d.ts +0 -3
- package/dist/layout/slides.js +7 -7
- package/dist/markdown/write.cjs +19 -6
- package/dist/markdown/write.js +19 -6
- package/dist/mathml/layout.cjs +43 -9
- package/dist/mathml/layout.d.cts +1 -1
- package/dist/mathml/layout.d.ts +1 -1
- package/dist/mathml/layout.js +43 -9
- package/dist/mathml/variant.cjs +48 -5
- package/dist/mathml/variant.js +48 -5
- package/dist/model/embedded-drawing.cjs +32 -0
- package/dist/model/embedded-drawing.d.cts +8 -0
- package/dist/model/embedded-drawing.d.ts +8 -0
- package/dist/model/embedded-drawing.js +30 -0
- package/dist/model/formula.cjs +31 -0
- package/dist/model/formula.d.cts +6 -6
- package/dist/model/formula.d.ts +6 -6
- package/dist/model/formula.js +27 -0
- package/dist/model/geometry.d.cts +1 -1
- package/dist/model/geometry.d.ts +1 -1
- package/dist/model/paint-order.cjs +15 -0
- package/dist/model/paint-order.d.cts +14 -0
- package/dist/model/paint-order.d.ts +14 -0
- package/dist/model/paint-order.js +14 -0
- package/dist/odb/components.cjs +12 -0
- package/dist/odb/components.d.cts +6 -0
- package/dist/odb/components.d.ts +6 -0
- package/dist/odb/components.js +10 -0
- package/dist/odb/read.cjs +11 -7
- package/dist/odb/read.d.cts +3 -2
- package/dist/odb/read.d.ts +3 -2
- package/dist/odb/read.js +11 -7
- package/dist/odf/formula/detect.cjs +86 -18
- package/dist/odf/formula/detect.d.cts +10 -6
- package/dist/odf/formula/detect.d.ts +10 -6
- package/dist/odf/formula/detect.js +86 -19
- package/dist/odf/formula/read.cjs +4 -16
- package/dist/odf/formula/read.d.cts +4 -8
- package/dist/odf/formula/read.d.ts +4 -8
- package/dist/odf/formula/read.js +5 -17
- package/dist/odf/odp/read.cjs +9 -19
- package/dist/odf/odp/read.d.cts +2 -7
- package/dist/odf/odp/read.d.ts +2 -7
- package/dist/odf/odp/read.js +10 -20
- package/dist/odf/odt/read.cjs +63 -23
- package/dist/odf/odt/read.d.cts +2 -7
- package/dist/odf/odt/read.d.ts +2 -7
- package/dist/odf/odt/read.js +64 -24
- package/dist/omml/write.cjs +258 -0
- package/dist/omml/write.d.cts +2 -0
- package/dist/omml/write.d.ts +2 -0
- package/dist/omml/write.js +256 -0
- package/dist/rowformat-Cl2exlEh.d.cts +25 -0
- package/dist/rowformat-Cl2exlEh.d.ts +25 -0
- package/dist/{schema-Acco3Ezi.d.cts → schema-BeR_KJ0X.d.cts} +3 -1
- package/dist/{schema-VkAA6pF5.d.ts → schema-CSKwSb_v.d.ts} +3 -1
- package/dist/{shape-BUfjw5eZ.d.cts → shape-BhkP6HB8.d.cts} +6 -2
- package/dist/{shape-CTkl6kt8.d.ts → shape-BkVcwPcf.d.ts} +6 -2
- package/dist/{shape-BfN3m52m.d.ts → shape-CVXedeL7.d.ts} +3 -2
- package/dist/{shape-CN2ycxOo.d.cts → shape-CXZ6fejV.d.cts} +3 -2
- package/dist/table-C3CPZ--2.d.cts +35 -0
- package/dist/table-DjYcNOFm.d.cts +44 -0
- package/dist/table-DqfqMkVq.d.ts +44 -0
- package/dist/table-DvS_7UQS.d.ts +35 -0
- package/dist/{vector-ClohqsOe.d.cts → vector-Puuqu_IT.d.cts} +4 -0
- package/dist/{vector-ClohqsOe.d.ts → vector-Puuqu_IT.d.ts} +4 -0
- package/dist/write-DuyfnbL_.d.cts +16 -0
- package/dist/write-Zqwx6pka.d.ts +16 -0
- package/package.json +4 -4
- package/dist/odf/formula/placeholder.cjs +0 -36
- package/dist/odf/formula/placeholder.d.cts +0 -14
- package/dist/odf/formula/placeholder.d.ts +0 -14
- package/dist/odf/formula/placeholder.js +0 -36
package/dist/layout/sheets.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { flipY } from "../model/geometry.js";
|
|
1
2
|
import { COLOR_BLACK as COLOR_BLACK$1, rgbHexToColor } from "../model/color.js";
|
|
2
3
|
import { DEFAULT_LAYOUT_FONT } from "../model/style.js";
|
|
3
|
-
import { alignmentOffsetPt, lineNaturalHeightPt, sumColumnWidthsPt, toStyledRuns } from "./shared.js";
|
|
4
|
+
import { alignmentOffsetPt, lineNaturalHeightPt, pushCellBorderLines, sumColumnWidthsPt, toStyledRuns } from "./shared.js";
|
|
4
5
|
import { throwIfAborted } from "../ports/abort.js";
|
|
5
6
|
import { LAYOUT_FORMAT_VERSION } from "document-schema.js";
|
|
6
7
|
import { wrapRunsToWidth } from "pdf-codec";
|
|
@@ -183,15 +184,39 @@ function axisSpanSizePt(axis, startIndex, span) {
|
|
|
183
184
|
if (startPosition === void 0) return 0;
|
|
184
185
|
return sumColumnWidthsPt(axis.sizesPt, startPosition, span);
|
|
185
186
|
}
|
|
186
|
-
function
|
|
187
|
+
function resolveCellFrame(cell, columnAxis, rowAxis, gridLeftXPt, gridTopYDownPt) {
|
|
187
188
|
const columnPosition = columnAxis.positionByIndex.get(cell.column);
|
|
188
189
|
const rowPosition = rowAxis.positionByIndex.get(cell.row);
|
|
189
190
|
if (columnPosition === void 0 || rowPosition === void 0) return;
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
191
|
+
return {
|
|
192
|
+
xPt: gridLeftXPt + columnAxis.offsetsPt[columnPosition],
|
|
193
|
+
yPt: gridTopYDownPt + rowAxis.offsetsPt[rowPosition],
|
|
194
|
+
widthPt: axisSpanSizePt(columnAxis, cell.column, cell.colSpan ?? 1),
|
|
195
|
+
heightPt: axisSpanSizePt(rowAxis, cell.row, cell.rowSpan ?? 1)
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function renderCellBackground(cell, frameYDown, pageHeightPt, out) {
|
|
199
|
+
if (cell.background === void 0) return;
|
|
200
|
+
const flipped = flipY(frameYDown, pageHeightPt);
|
|
201
|
+
out.push({
|
|
202
|
+
kind: "rect",
|
|
203
|
+
xPt: flipped.xPt,
|
|
204
|
+
yPt: flipped.yPt,
|
|
205
|
+
widthPt: flipped.widthPt,
|
|
206
|
+
heightPt: flipped.heightPt,
|
|
207
|
+
fill: cell.background,
|
|
208
|
+
sourcePath: cell.sourcePath
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
const DEFAULT_CELL_VERTICAL_ALIGNMENT = "bottom";
|
|
212
|
+
function verticalLineTopYDownPt(verticalAlignment, cellTopYDownPt, cellHeightPt, lineHeightPt) {
|
|
213
|
+
if (verticalAlignment === "top") return cellTopYDownPt + CELL_TEXT_PADDING_PT;
|
|
214
|
+
if (verticalAlignment === "middle") return cellTopYDownPt + Math.max(CELL_TEXT_PADDING_PT, (cellHeightPt - lineHeightPt) / 2);
|
|
215
|
+
return cellTopYDownPt + Math.max(CELL_TEXT_PADDING_PT, cellHeightPt - CELL_TEXT_PADDING_PT - lineHeightPt);
|
|
216
|
+
}
|
|
217
|
+
function renderCellText(cell, frameYDown, rowCells, columnAxis, pageHeightPt, measurer, out) {
|
|
218
|
+
const { xPt: xLeftPt, yPt: yTopDownPt, widthPt: ownWidthPt, heightPt } = frameYDown;
|
|
219
|
+
const alignment = cell.alignment ?? defaultAlignmentForValue(cell.value.kind);
|
|
195
220
|
const numericLike = isNumericLikeValue(cell.value.kind);
|
|
196
221
|
const styledRuns = cellStyledRuns(cell);
|
|
197
222
|
const naturalLine = wrapRunsToWidth(styledRuns, measurer, Number.POSITIVE_INFINITY)[0];
|
|
@@ -221,7 +246,7 @@ function renderCellText(cell, rowCells, columnAxis, rowAxis, gridLeftXPt, gridTo
|
|
|
221
246
|
const alignOffsetPt = alignmentOffsetPt(alignment, availableWidthPt, lineWidthPt);
|
|
222
247
|
const textStartXPt = xLeftPt + CELL_TEXT_PADDING_PT + alignOffsetPt;
|
|
223
248
|
const lineHeightPt = lineNaturalHeightPt(naturalLine, measurer, styledRuns[0]);
|
|
224
|
-
const baselineYDownPt =
|
|
249
|
+
const baselineYDownPt = verticalLineTopYDownPt(cell.verticalAlignment ?? DEFAULT_CELL_VERTICAL_ALIGNMENT, yTopDownPt, heightPt, lineHeightPt) + naturalLine.ascentPt;
|
|
225
250
|
for (const fragment of fragments) {
|
|
226
251
|
const textItem = {
|
|
227
252
|
kind: "text",
|
|
@@ -381,18 +406,27 @@ function convertSheetToPages(sheet, measurer, signal, out) {
|
|
|
381
406
|
const gridTopYDownPt = margins.topPt + gutter.heightPt;
|
|
382
407
|
const gridWidthPt = columnAxis.offsetsPt[columnAxis.offsetsPt.length - 1];
|
|
383
408
|
const gridHeightPt = rowAxis.offsetsPt[rowAxis.offsetsPt.length - 1];
|
|
384
|
-
const
|
|
385
|
-
|
|
386
|
-
|
|
409
|
+
const backgroundItems = [];
|
|
410
|
+
const borderItems = [];
|
|
411
|
+
const textItems = [];
|
|
387
412
|
for (const rowIndex of rowAxis.indices) {
|
|
388
413
|
const rowCells = cellsByRow.get(rowIndex);
|
|
389
414
|
if (rowCells === void 0) continue;
|
|
390
415
|
for (const [columnIndex, cell] of rowCells) {
|
|
391
416
|
throwIfAborted(signal);
|
|
392
417
|
if (!columnAxis.positionByIndex.has(columnIndex) || hiddenColumnIndices.has(columnIndex) || hiddenRowIndices.has(cell.row)) continue;
|
|
393
|
-
|
|
418
|
+
const cellFrame = resolveCellFrame(cell, columnAxis, rowAxis, gridLeftXPt, gridTopYDownPt);
|
|
419
|
+
if (cellFrame === void 0) continue;
|
|
420
|
+
renderCellBackground(cell, cellFrame, pageSize.heightPt, backgroundItems);
|
|
421
|
+
if (cell.borders !== void 0) pushCellBorderLines(cell.borders, cellFrame, pageSize.heightPt, cell.sourcePath, borderItems);
|
|
422
|
+
renderCellText(cell, cellFrame, rowCells, columnAxis, pageSize.heightPt, measurer, textItems);
|
|
394
423
|
}
|
|
395
424
|
}
|
|
425
|
+
const items = [...backgroundItems];
|
|
426
|
+
if (printSettings.gridlines) renderGridlines(gridLeftXPt, gridTopYDownPt, gridWidthPt, gridHeightPt, columnAxis.offsetsPt, rowAxis.offsetsPt, pageSize.heightPt, items);
|
|
427
|
+
items.push(...borderItems);
|
|
428
|
+
if (printSettings.headers) renderHeaderLabels(gutter, columnAxis, rowAxis, gridLeftXPt, gridTopYDownPt, pageSize.heightPt, measurer, items);
|
|
429
|
+
items.push(...textItems);
|
|
396
430
|
out.push({
|
|
397
431
|
widthPt: pageSize.widthPt,
|
|
398
432
|
heightPt: pageSize.heightPt,
|
package/dist/layout/slides.cjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_model_geometry = require("../model/geometry.cjs");
|
|
3
|
+
const require_model_formula = require("../model/formula.cjs");
|
|
3
4
|
const require_mathml_layout = require("../mathml/layout.cjs");
|
|
4
5
|
const require_layout_shared = require("./shared.cjs");
|
|
5
6
|
let document_schema_js = require("document-schema.js");
|
|
@@ -115,11 +116,11 @@ function layoutTable(table, contentLeftXDown, contentWidthPt, startYDown, slideH
|
|
|
115
116
|
return cursorYDown;
|
|
116
117
|
}
|
|
117
118
|
function layoutShapeFormula(block, flippedFrame, formulaContext) {
|
|
118
|
-
const
|
|
119
|
-
if (
|
|
119
|
+
const formula = require_model_formula.formulaOfBlock(block);
|
|
120
|
+
if (formula === void 0 || formula.mathml.length === 0) return;
|
|
120
121
|
const sizePt = formulaSizePtFromFrame(block.frame.heightPt);
|
|
121
122
|
const metrics = (0, pdf_codec.loadMathFont)().metricsAt(sizePt);
|
|
122
|
-
const { box } = require_mathml_layout.layoutFormula(
|
|
123
|
+
const { box } = require_mathml_layout.layoutFormula(formula.mathml, {
|
|
123
124
|
metrics,
|
|
124
125
|
sizePt,
|
|
125
126
|
color: document_schema_js.COLOR_BLACK
|
|
@@ -160,10 +161,9 @@ function convertShape(shape, slideHeightPt, measurer, images, out, formulaContex
|
|
|
160
161
|
} else if (block.kind === "table") cursorYDown = layoutTable(block, contentLeftXDown, contentWidthPt, cursorYDown, slideHeightPt, placement, measurer, out);
|
|
161
162
|
else if (block.kind === "embeddedObject" && block.objectKind === "formula" && formulaContext !== void 0) layoutShapeFormula(block, flippedFrame, formulaContext);
|
|
162
163
|
}
|
|
163
|
-
function convertSlide(slide, slideIndex, measurer, images,
|
|
164
|
+
function convertSlide(slide, slideIndex, measurer, images, positioned) {
|
|
164
165
|
const items = [];
|
|
165
|
-
const formulaContext =
|
|
166
|
-
formulas,
|
|
166
|
+
const formulaContext = {
|
|
167
167
|
pageIndex: slideIndex,
|
|
168
168
|
positioned
|
|
169
169
|
};
|
|
@@ -178,7 +178,7 @@ function convertSlide(slide, slideIndex, measurer, images, formulas, positioned)
|
|
|
178
178
|
function convertPresentationToLayout(doc, options) {
|
|
179
179
|
const images = {};
|
|
180
180
|
const formulas = [];
|
|
181
|
-
const pages = doc.slides.map((slide, slideIndex) => convertSlide(slide, slideIndex, options.measurer, images,
|
|
181
|
+
const pages = doc.slides.map((slide, slideIndex) => convertSlide(slide, slideIndex, options.measurer, images, formulas));
|
|
182
182
|
return {
|
|
183
183
|
document: {
|
|
184
184
|
formatVersion: document_schema_js.LAYOUT_FORMAT_VERSION,
|
package/dist/layout/slides.d.cts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { EmbeddedFormula } from "../model/formula.cjs";
|
|
2
1
|
import { ContentDocument, ContentShape, LayoutDocument, LayoutImageAsset, LayoutItem } from "document-schema.js";
|
|
3
2
|
import { PositionedFormula, TextMeasurer } from "pdf-codec";
|
|
4
3
|
//#region src/layout/slides.d.ts
|
|
5
4
|
interface SlidesLayoutOptions {
|
|
6
5
|
readonly measurer: TextMeasurer;
|
|
7
|
-
readonly formulas?: ReadonlyMap<string, EmbeddedFormula>;
|
|
8
6
|
}
|
|
9
7
|
interface PresentationLayoutResult {
|
|
10
8
|
readonly document: LayoutDocument;
|
|
@@ -14,7 +12,6 @@ type PresentationContentDocument = Extract<ContentDocument, {
|
|
|
14
12
|
kind: 'presentation';
|
|
15
13
|
}>;
|
|
16
14
|
interface ShapeFormulaContext {
|
|
17
|
-
readonly formulas: ReadonlyMap<string, EmbeddedFormula>;
|
|
18
15
|
readonly pageIndex: number;
|
|
19
16
|
readonly positioned: PositionedFormula[];
|
|
20
17
|
}
|
package/dist/layout/slides.d.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { EmbeddedFormula } from "../model/formula.js";
|
|
2
1
|
import { ContentDocument, ContentShape, LayoutDocument, LayoutImageAsset, LayoutItem } from "document-schema.js";
|
|
3
2
|
import { PositionedFormula, TextMeasurer } from "pdf-codec";
|
|
4
3
|
//#region src/layout/slides.d.ts
|
|
5
4
|
interface SlidesLayoutOptions {
|
|
6
5
|
readonly measurer: TextMeasurer;
|
|
7
|
-
readonly formulas?: ReadonlyMap<string, EmbeddedFormula>;
|
|
8
6
|
}
|
|
9
7
|
interface PresentationLayoutResult {
|
|
10
8
|
readonly document: LayoutDocument;
|
|
@@ -14,7 +12,6 @@ type PresentationContentDocument = Extract<ContentDocument, {
|
|
|
14
12
|
kind: 'presentation';
|
|
15
13
|
}>;
|
|
16
14
|
interface ShapeFormulaContext {
|
|
17
|
-
readonly formulas: ReadonlyMap<string, EmbeddedFormula>;
|
|
18
15
|
readonly pageIndex: number;
|
|
19
16
|
readonly positioned: PositionedFormula[];
|
|
20
17
|
}
|
package/dist/layout/slides.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { flipY } from "../model/geometry.js";
|
|
2
|
+
import { formulaOfBlock } from "../model/formula.js";
|
|
2
3
|
import { layoutFormula } from "../mathml/layout.js";
|
|
3
4
|
import { alignmentOffsetPt, effectiveStyledRuns, estimateRowHeightPt, lineNaturalHeightPt, registerImage, sumColumnWidthsPt } from "./shared.js";
|
|
4
5
|
import { COLOR_BLACK, LAYOUT_FORMAT_VERSION } from "document-schema.js";
|
|
@@ -114,11 +115,11 @@ function layoutTable(table, contentLeftXDown, contentWidthPt, startYDown, slideH
|
|
|
114
115
|
return cursorYDown;
|
|
115
116
|
}
|
|
116
117
|
function layoutShapeFormula(block, flippedFrame, formulaContext) {
|
|
117
|
-
const
|
|
118
|
-
if (
|
|
118
|
+
const formula = formulaOfBlock(block);
|
|
119
|
+
if (formula === void 0 || formula.mathml.length === 0) return;
|
|
119
120
|
const sizePt = formulaSizePtFromFrame(block.frame.heightPt);
|
|
120
121
|
const metrics = loadMathFont().metricsAt(sizePt);
|
|
121
|
-
const { box } = layoutFormula(
|
|
122
|
+
const { box } = layoutFormula(formula.mathml, {
|
|
122
123
|
metrics,
|
|
123
124
|
sizePt,
|
|
124
125
|
color: COLOR_BLACK
|
|
@@ -159,10 +160,9 @@ function convertShape(shape, slideHeightPt, measurer, images, out, formulaContex
|
|
|
159
160
|
} else if (block.kind === "table") cursorYDown = layoutTable(block, contentLeftXDown, contentWidthPt, cursorYDown, slideHeightPt, placement, measurer, out);
|
|
160
161
|
else if (block.kind === "embeddedObject" && block.objectKind === "formula" && formulaContext !== void 0) layoutShapeFormula(block, flippedFrame, formulaContext);
|
|
161
162
|
}
|
|
162
|
-
function convertSlide(slide, slideIndex, measurer, images,
|
|
163
|
+
function convertSlide(slide, slideIndex, measurer, images, positioned) {
|
|
163
164
|
const items = [];
|
|
164
|
-
const formulaContext =
|
|
165
|
-
formulas,
|
|
165
|
+
const formulaContext = {
|
|
166
166
|
pageIndex: slideIndex,
|
|
167
167
|
positioned
|
|
168
168
|
};
|
|
@@ -177,7 +177,7 @@ function convertSlide(slide, slideIndex, measurer, images, formulas, positioned)
|
|
|
177
177
|
function convertPresentationToLayout(doc, options) {
|
|
178
178
|
const images = {};
|
|
179
179
|
const formulas = [];
|
|
180
|
-
const pages = doc.slides.map((slide, slideIndex) => convertSlide(slide, slideIndex, options.measurer, images,
|
|
180
|
+
const pages = doc.slides.map((slide, slideIndex) => convertSlide(slide, slideIndex, options.measurer, images, formulas));
|
|
181
181
|
return {
|
|
182
182
|
document: {
|
|
183
183
|
formatVersion: LAYOUT_FORMAT_VERSION,
|
package/dist/markdown/write.cjs
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_model_formula = require("../model/formula.cjs");
|
|
3
|
+
const require_model_embedded_drawing = require("../model/embedded-drawing.cjs");
|
|
2
4
|
let markdown_codec = require("markdown-codec");
|
|
3
5
|
//#region src/markdown/write.ts
|
|
4
6
|
function toLegacyEmbeddedDocument(document) {
|
|
@@ -12,16 +14,27 @@ function toLegacyBlock(block) {
|
|
|
12
14
|
...row,
|
|
13
15
|
cells: row.cells.map((cell) => ({
|
|
14
16
|
...cell,
|
|
15
|
-
blocks: cell.blocks
|
|
17
|
+
blocks: toLegacyBlocks(cell.blocks)
|
|
16
18
|
}))
|
|
17
19
|
}))
|
|
18
20
|
};
|
|
19
|
-
if (block.kind === "embeddedObject")
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
if (block.kind === "embeddedObject") {
|
|
22
|
+
if (require_model_embedded_drawing.drawingOfBlock(block) !== void 0) return;
|
|
23
|
+
const formula = require_model_formula.formulaOfBlock(block);
|
|
24
|
+
if (formula !== void 0) return {
|
|
25
|
+
kind: "paragraph",
|
|
26
|
+
runs: [{ text: require_model_formula.formulaPlaceholderText(formula) }]
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
...block,
|
|
30
|
+
document: toLegacyEmbeddedDocument(block.document)
|
|
31
|
+
};
|
|
32
|
+
}
|
|
23
33
|
return block;
|
|
24
34
|
}
|
|
35
|
+
function toLegacyBlocks(blocks) {
|
|
36
|
+
return blocks.map(toLegacyBlock).filter((block) => block !== void 0);
|
|
37
|
+
}
|
|
25
38
|
function toLegacyWordprocessingDocument(document) {
|
|
26
39
|
return {
|
|
27
40
|
kind: "wordprocessing",
|
|
@@ -29,7 +42,7 @@ function toLegacyWordprocessingDocument(document) {
|
|
|
29
42
|
metadata: document.metadata,
|
|
30
43
|
sections: document.sections.map((section) => ({
|
|
31
44
|
...section,
|
|
32
|
-
blocks: section.blocks
|
|
45
|
+
blocks: toLegacyBlocks(section.blocks)
|
|
33
46
|
}))
|
|
34
47
|
};
|
|
35
48
|
}
|
package/dist/markdown/write.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { formulaOfBlock, formulaPlaceholderText } from "../model/formula.js";
|
|
2
|
+
import { drawingOfBlock } from "../model/embedded-drawing.js";
|
|
1
3
|
import { MarkdownUnsupportedDocumentKindError, writeMarkdown } from "markdown-codec";
|
|
2
4
|
//#region src/markdown/write.ts
|
|
3
5
|
function toLegacyEmbeddedDocument(document) {
|
|
@@ -11,16 +13,27 @@ function toLegacyBlock(block) {
|
|
|
11
13
|
...row,
|
|
12
14
|
cells: row.cells.map((cell) => ({
|
|
13
15
|
...cell,
|
|
14
|
-
blocks: cell.blocks
|
|
16
|
+
blocks: toLegacyBlocks(cell.blocks)
|
|
15
17
|
}))
|
|
16
18
|
}))
|
|
17
19
|
};
|
|
18
|
-
if (block.kind === "embeddedObject")
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
if (block.kind === "embeddedObject") {
|
|
21
|
+
if (drawingOfBlock(block) !== void 0) return;
|
|
22
|
+
const formula = formulaOfBlock(block);
|
|
23
|
+
if (formula !== void 0) return {
|
|
24
|
+
kind: "paragraph",
|
|
25
|
+
runs: [{ text: formulaPlaceholderText(formula) }]
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
...block,
|
|
29
|
+
document: toLegacyEmbeddedDocument(block.document)
|
|
30
|
+
};
|
|
31
|
+
}
|
|
22
32
|
return block;
|
|
23
33
|
}
|
|
34
|
+
function toLegacyBlocks(blocks) {
|
|
35
|
+
return blocks.map(toLegacyBlock).filter((block) => block !== void 0);
|
|
36
|
+
}
|
|
24
37
|
function toLegacyWordprocessingDocument(document) {
|
|
25
38
|
return {
|
|
26
39
|
kind: "wordprocessing",
|
|
@@ -28,7 +41,7 @@ function toLegacyWordprocessingDocument(document) {
|
|
|
28
41
|
metadata: document.metadata,
|
|
29
42
|
sections: document.sections.map((section) => ({
|
|
30
43
|
...section,
|
|
31
|
-
blocks: section.blocks
|
|
44
|
+
blocks: toLegacyBlocks(section.blocks)
|
|
32
45
|
}))
|
|
33
46
|
};
|
|
34
47
|
}
|
package/dist/mathml/layout.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_mathml_compose = require("./compose.cjs");
|
|
3
2
|
const require_mathml_length = require("./length.cjs");
|
|
4
3
|
const require_mathml_nodes = require("./nodes.cjs");
|
|
5
4
|
const require_mathml_operators = require("./operators.cjs");
|
|
6
|
-
const require_mathml_radical = require("./radical.cjs");
|
|
7
5
|
const require_mathml_variant = require("./variant.cjs");
|
|
6
|
+
const require_mathml_compose = require("./compose.cjs");
|
|
7
|
+
const require_mathml_radical = require("./radical.cjs");
|
|
8
8
|
//#region src/mathml/layout.ts
|
|
9
9
|
function rootContext(options, diagnostics) {
|
|
10
10
|
return {
|
|
@@ -142,16 +142,23 @@ function layoutScripts(base, subscript, superscript, ctx) {
|
|
|
142
142
|
items
|
|
143
143
|
};
|
|
144
144
|
}
|
|
145
|
-
function layoutUnderOver(base, under, over, ctx) {
|
|
145
|
+
function layoutUnderOver(base, under, over, ctx, accentAttachment = {}) {
|
|
146
146
|
const gapPt = ctx.metrics.stackGapMinPt;
|
|
147
147
|
const overHeightPt = over === void 0 ? 0 : gapPt + over.heightPt;
|
|
148
148
|
const underHeightPt = under === void 0 ? 0 : gapPt + under.heightPt;
|
|
149
149
|
const ascentPt = base.ascentPt + overHeightPt;
|
|
150
150
|
const descentPt = base.descentPt + underHeightPt;
|
|
151
151
|
const widthPt = Math.max(base.widthPt, under?.widthPt ?? 0, over?.widthPt ?? 0);
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
if (
|
|
152
|
+
const baseXPt = (widthPt - base.widthPt) / 2;
|
|
153
|
+
const items = [...require_mathml_compose.placeChild(base, baseXPt, 0, ascentPt)];
|
|
154
|
+
if (over !== void 0) {
|
|
155
|
+
const overXPt = accentAttachment.overXPt === void 0 ? (widthPt - over.widthPt) / 2 : baseXPt + accentAttachment.overXPt - over.widthPt / 2;
|
|
156
|
+
items.push(...require_mathml_compose.placeChild(over, overXPt, -(base.ascentPt + gapPt + over.descentPt), ascentPt));
|
|
157
|
+
}
|
|
158
|
+
if (under !== void 0) {
|
|
159
|
+
const underXPt = accentAttachment.underXPt === void 0 ? (widthPt - under.widthPt) / 2 : baseXPt + accentAttachment.underXPt - under.widthPt / 2;
|
|
160
|
+
items.push(...require_mathml_compose.placeChild(under, underXPt, base.descentPt + gapPt + under.ascentPt, ascentPt));
|
|
161
|
+
}
|
|
155
162
|
return {
|
|
156
163
|
widthPt,
|
|
157
164
|
ascentPt,
|
|
@@ -163,6 +170,26 @@ function layoutUnderOver(base, under, over, ctx) {
|
|
|
163
170
|
function isMovableLimitsOperator(element) {
|
|
164
171
|
return require_mathml_nodes.elementLocalName(element) === "mo" && require_mathml_operators.operatorProperties(require_mathml_nodes.textContent(element).trim()).movablelimits;
|
|
165
172
|
}
|
|
173
|
+
function resolveTopAccentXPt(baseElement, ctx) {
|
|
174
|
+
const name = require_mathml_nodes.elementLocalName(baseElement);
|
|
175
|
+
let rawText;
|
|
176
|
+
let intrinsicDefault;
|
|
177
|
+
if (name === "mi") {
|
|
178
|
+
rawText = require_mathml_nodes.textContent(baseElement);
|
|
179
|
+
intrinsicDefault = miIntrinsicDefault(rawText);
|
|
180
|
+
} else if (name === "mn" || name === "mtext") {
|
|
181
|
+
rawText = require_mathml_nodes.textContent(baseElement);
|
|
182
|
+
intrinsicDefault = "normal";
|
|
183
|
+
} else if (name === "mo") {
|
|
184
|
+
rawText = require_mathml_nodes.textContent(baseElement).trim();
|
|
185
|
+
intrinsicDefault = "normal";
|
|
186
|
+
} else return;
|
|
187
|
+
const codePoints = [...require_mathml_variant.applyMathVariant(rawText, tokenVariant(baseElement, intrinsicDefault, ctx))];
|
|
188
|
+
if (codePoints.length !== 1) return;
|
|
189
|
+
const codePoint = codePoints[0]?.codePointAt(0);
|
|
190
|
+
if (codePoint === void 0) return;
|
|
191
|
+
return ctx.metrics.glyph(codePoint, ctx.sizePt)?.topAccentXPt;
|
|
192
|
+
}
|
|
166
193
|
function layoutUnderOverElement(element, kind, ctx) {
|
|
167
194
|
const children = require_mathml_nodes.elementChildren(element);
|
|
168
195
|
const baseElement = children[0];
|
|
@@ -176,9 +203,16 @@ function layoutUnderOverElement(element, kind, ctx) {
|
|
|
176
203
|
}
|
|
177
204
|
const base = layoutNode(baseElement, ctx);
|
|
178
205
|
const scriptCtx = scriptContext(ctx, false);
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
206
|
+
const isAccent = require_mathml_nodes.attrValue(element, "accent") === "true";
|
|
207
|
+
const isAccentUnder = require_mathml_nodes.attrValue(element, "accentunder") === "true";
|
|
208
|
+
const topAccentXPt = isAccent || isAccentUnder ? resolveTopAccentXPt(baseElement, ctx) : void 0;
|
|
209
|
+
const accentAttachment = {
|
|
210
|
+
overXPt: isAccent ? topAccentXPt : void 0,
|
|
211
|
+
underXPt: isAccentUnder ? topAccentXPt : void 0
|
|
212
|
+
};
|
|
213
|
+
if (kind === "munder") return layoutUnderOver(base, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), void 0, ctx, accentAttachment);
|
|
214
|
+
if (kind === "mover") return layoutUnderOver(base, void 0, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), ctx, accentAttachment);
|
|
215
|
+
return layoutUnderOver(base, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), children[2] === void 0 ? void 0 : layoutNode(children[2], scriptCtx), ctx, accentAttachment);
|
|
182
216
|
}
|
|
183
217
|
function layoutFraction(element, ctx) {
|
|
184
218
|
const children = require_mathml_nodes.elementChildren(element);
|
package/dist/mathml/layout.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { r as MathMlNode } from "../nodes-pArN9ilm.cjs";
|
|
1
2
|
import { MathBox, MathColor, MathDiagnostic, MathLayoutResult } from "./layout-types.cjs";
|
|
2
3
|
import { MathFontMetrics } from "./metrics.cjs";
|
|
3
|
-
import { r as MathMlNode } from "../nodes-pArN9ilm.cjs";
|
|
4
4
|
import { MathVariant } from "./variant.cjs";
|
|
5
5
|
//#region src/mathml/layout.d.ts
|
|
6
6
|
interface LayoutFormulaOptions {
|
package/dist/mathml/layout.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { r as MathMlNode } from "../nodes-pArN9ilm.js";
|
|
1
2
|
import { MathBox, MathColor, MathDiagnostic, MathLayoutResult } from "./layout-types.js";
|
|
2
3
|
import { MathFontMetrics } from "./metrics.js";
|
|
3
|
-
import { r as MathMlNode } from "../nodes-pArN9ilm.js";
|
|
4
4
|
import { MathVariant } from "./variant.js";
|
|
5
5
|
//#region src/mathml/layout.d.ts
|
|
6
6
|
interface LayoutFormulaOptions {
|
package/dist/mathml/layout.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { EMPTY_BOX, concatBoxesHorizontally, placeChild, shiftItems } from "./compose.js";
|
|
2
1
|
import { parseMathLength } from "./length.js";
|
|
3
2
|
import { attrValue, elementChildren, elementLocalName, isMathMlElement, textContent } from "./nodes.js";
|
|
4
3
|
import { operatorProperties } from "./operators.js";
|
|
5
|
-
import { buildRadicalSign } from "./radical.js";
|
|
6
4
|
import { applyMathVariant, isMathVariant } from "./variant.js";
|
|
5
|
+
import { EMPTY_BOX, concatBoxesHorizontally, placeChild, shiftItems } from "./compose.js";
|
|
6
|
+
import { buildRadicalSign } from "./radical.js";
|
|
7
7
|
//#region src/mathml/layout.ts
|
|
8
8
|
function rootContext(options, diagnostics) {
|
|
9
9
|
return {
|
|
@@ -141,16 +141,23 @@ function layoutScripts(base, subscript, superscript, ctx) {
|
|
|
141
141
|
items
|
|
142
142
|
};
|
|
143
143
|
}
|
|
144
|
-
function layoutUnderOver(base, under, over, ctx) {
|
|
144
|
+
function layoutUnderOver(base, under, over, ctx, accentAttachment = {}) {
|
|
145
145
|
const gapPt = ctx.metrics.stackGapMinPt;
|
|
146
146
|
const overHeightPt = over === void 0 ? 0 : gapPt + over.heightPt;
|
|
147
147
|
const underHeightPt = under === void 0 ? 0 : gapPt + under.heightPt;
|
|
148
148
|
const ascentPt = base.ascentPt + overHeightPt;
|
|
149
149
|
const descentPt = base.descentPt + underHeightPt;
|
|
150
150
|
const widthPt = Math.max(base.widthPt, under?.widthPt ?? 0, over?.widthPt ?? 0);
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
if (
|
|
151
|
+
const baseXPt = (widthPt - base.widthPt) / 2;
|
|
152
|
+
const items = [...placeChild(base, baseXPt, 0, ascentPt)];
|
|
153
|
+
if (over !== void 0) {
|
|
154
|
+
const overXPt = accentAttachment.overXPt === void 0 ? (widthPt - over.widthPt) / 2 : baseXPt + accentAttachment.overXPt - over.widthPt / 2;
|
|
155
|
+
items.push(...placeChild(over, overXPt, -(base.ascentPt + gapPt + over.descentPt), ascentPt));
|
|
156
|
+
}
|
|
157
|
+
if (under !== void 0) {
|
|
158
|
+
const underXPt = accentAttachment.underXPt === void 0 ? (widthPt - under.widthPt) / 2 : baseXPt + accentAttachment.underXPt - under.widthPt / 2;
|
|
159
|
+
items.push(...placeChild(under, underXPt, base.descentPt + gapPt + under.ascentPt, ascentPt));
|
|
160
|
+
}
|
|
154
161
|
return {
|
|
155
162
|
widthPt,
|
|
156
163
|
ascentPt,
|
|
@@ -162,6 +169,26 @@ function layoutUnderOver(base, under, over, ctx) {
|
|
|
162
169
|
function isMovableLimitsOperator(element) {
|
|
163
170
|
return elementLocalName(element) === "mo" && operatorProperties(textContent(element).trim()).movablelimits;
|
|
164
171
|
}
|
|
172
|
+
function resolveTopAccentXPt(baseElement, ctx) {
|
|
173
|
+
const name = elementLocalName(baseElement);
|
|
174
|
+
let rawText;
|
|
175
|
+
let intrinsicDefault;
|
|
176
|
+
if (name === "mi") {
|
|
177
|
+
rawText = textContent(baseElement);
|
|
178
|
+
intrinsicDefault = miIntrinsicDefault(rawText);
|
|
179
|
+
} else if (name === "mn" || name === "mtext") {
|
|
180
|
+
rawText = textContent(baseElement);
|
|
181
|
+
intrinsicDefault = "normal";
|
|
182
|
+
} else if (name === "mo") {
|
|
183
|
+
rawText = textContent(baseElement).trim();
|
|
184
|
+
intrinsicDefault = "normal";
|
|
185
|
+
} else return;
|
|
186
|
+
const codePoints = [...applyMathVariant(rawText, tokenVariant(baseElement, intrinsicDefault, ctx))];
|
|
187
|
+
if (codePoints.length !== 1) return;
|
|
188
|
+
const codePoint = codePoints[0]?.codePointAt(0);
|
|
189
|
+
if (codePoint === void 0) return;
|
|
190
|
+
return ctx.metrics.glyph(codePoint, ctx.sizePt)?.topAccentXPt;
|
|
191
|
+
}
|
|
165
192
|
function layoutUnderOverElement(element, kind, ctx) {
|
|
166
193
|
const children = elementChildren(element);
|
|
167
194
|
const baseElement = children[0];
|
|
@@ -175,9 +202,16 @@ function layoutUnderOverElement(element, kind, ctx) {
|
|
|
175
202
|
}
|
|
176
203
|
const base = layoutNode(baseElement, ctx);
|
|
177
204
|
const scriptCtx = scriptContext(ctx, false);
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
205
|
+
const isAccent = attrValue(element, "accent") === "true";
|
|
206
|
+
const isAccentUnder = attrValue(element, "accentunder") === "true";
|
|
207
|
+
const topAccentXPt = isAccent || isAccentUnder ? resolveTopAccentXPt(baseElement, ctx) : void 0;
|
|
208
|
+
const accentAttachment = {
|
|
209
|
+
overXPt: isAccent ? topAccentXPt : void 0,
|
|
210
|
+
underXPt: isAccentUnder ? topAccentXPt : void 0
|
|
211
|
+
};
|
|
212
|
+
if (kind === "munder") return layoutUnderOver(base, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), void 0, ctx, accentAttachment);
|
|
213
|
+
if (kind === "mover") return layoutUnderOver(base, void 0, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), ctx, accentAttachment);
|
|
214
|
+
return layoutUnderOver(base, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), children[2] === void 0 ? void 0 : layoutNode(children[2], scriptCtx), ctx, accentAttachment);
|
|
181
215
|
}
|
|
182
216
|
function layoutFraction(element, ctx) {
|
|
183
217
|
const children = elementChildren(element);
|
package/dist/mathml/variant.cjs
CHANGED
|
@@ -824,7 +824,13 @@ const GREEK_VARIANTS = {
|
|
|
824
824
|
120538
|
|
825
825
|
],
|
|
826
826
|
nabla: 120513,
|
|
827
|
-
partial: 120539
|
|
827
|
+
partial: 120539,
|
|
828
|
+
epsilon: 120540,
|
|
829
|
+
theta: 120541,
|
|
830
|
+
kappa: 120542,
|
|
831
|
+
phi: 120543,
|
|
832
|
+
rho: 120544,
|
|
833
|
+
pi: 120545
|
|
828
834
|
},
|
|
829
835
|
italic: {
|
|
830
836
|
upper: [
|
|
@@ -880,7 +886,13 @@ const GREEK_VARIANTS = {
|
|
|
880
886
|
120596
|
|
881
887
|
],
|
|
882
888
|
nabla: 120571,
|
|
883
|
-
partial: 120597
|
|
889
|
+
partial: 120597,
|
|
890
|
+
epsilon: 120598,
|
|
891
|
+
theta: 120599,
|
|
892
|
+
kappa: 120600,
|
|
893
|
+
phi: 120601,
|
|
894
|
+
rho: 120602,
|
|
895
|
+
pi: 120603
|
|
884
896
|
},
|
|
885
897
|
"bold-italic": {
|
|
886
898
|
upper: [
|
|
@@ -936,7 +948,13 @@ const GREEK_VARIANTS = {
|
|
|
936
948
|
120654
|
|
937
949
|
],
|
|
938
950
|
nabla: 120629,
|
|
939
|
-
partial: 120655
|
|
951
|
+
partial: 120655,
|
|
952
|
+
epsilon: 120656,
|
|
953
|
+
theta: 120657,
|
|
954
|
+
kappa: 120658,
|
|
955
|
+
phi: 120659,
|
|
956
|
+
rho: 120660,
|
|
957
|
+
pi: 120661
|
|
940
958
|
},
|
|
941
959
|
"bold-sans-serif": {
|
|
942
960
|
upper: [
|
|
@@ -992,7 +1010,13 @@ const GREEK_VARIANTS = {
|
|
|
992
1010
|
120712
|
|
993
1011
|
],
|
|
994
1012
|
nabla: 120687,
|
|
995
|
-
partial: 120713
|
|
1013
|
+
partial: 120713,
|
|
1014
|
+
epsilon: 120714,
|
|
1015
|
+
theta: 120715,
|
|
1016
|
+
kappa: 120716,
|
|
1017
|
+
phi: 120717,
|
|
1018
|
+
rho: 120718,
|
|
1019
|
+
pi: 120719
|
|
996
1020
|
},
|
|
997
1021
|
"sans-serif-bold-italic": {
|
|
998
1022
|
upper: [
|
|
@@ -1048,9 +1072,23 @@ const GREEK_VARIANTS = {
|
|
|
1048
1072
|
120770
|
|
1049
1073
|
],
|
|
1050
1074
|
nabla: 120745,
|
|
1051
|
-
partial: 120771
|
|
1075
|
+
partial: 120771,
|
|
1076
|
+
epsilon: 120772,
|
|
1077
|
+
theta: 120773,
|
|
1078
|
+
kappa: 120774,
|
|
1079
|
+
phi: 120775,
|
|
1080
|
+
rho: 120776,
|
|
1081
|
+
pi: 120777
|
|
1052
1082
|
}
|
|
1053
1083
|
};
|
|
1084
|
+
const GREEK_SYMBOL_BASES = /* @__PURE__ */ new Map([
|
|
1085
|
+
[1013, "epsilon"],
|
|
1086
|
+
[977, "theta"],
|
|
1087
|
+
[1008, "kappa"],
|
|
1088
|
+
[981, "phi"],
|
|
1089
|
+
[1009, "rho"],
|
|
1090
|
+
[982, "pi"]
|
|
1091
|
+
]);
|
|
1054
1092
|
const DIGIT_VARIANTS = {
|
|
1055
1093
|
bold: [
|
|
1056
1094
|
120782,
|
|
@@ -1124,6 +1162,11 @@ function mapMathVariant(codePoint, variant) {
|
|
|
1124
1162
|
if (greekLowerIndex !== -1) return GREEK_VARIANTS[variant]?.lower[greekLowerIndex] ?? codePoint;
|
|
1125
1163
|
if (codePoint === 8711) return GREEK_VARIANTS[variant]?.nabla ?? codePoint;
|
|
1126
1164
|
if (codePoint === 8706) return GREEK_VARIANTS[variant]?.partial ?? codePoint;
|
|
1165
|
+
const symbolField = GREEK_SYMBOL_BASES.get(codePoint);
|
|
1166
|
+
if (symbolField !== void 0) {
|
|
1167
|
+
const entry = GREEK_VARIANTS[variant];
|
|
1168
|
+
return entry === void 0 ? codePoint : entry[symbolField];
|
|
1169
|
+
}
|
|
1127
1170
|
return codePoint;
|
|
1128
1171
|
}
|
|
1129
1172
|
function applyMathVariant(text, variant) {
|