ooxml-core 1.13.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PptxHandler-OGLITB3F.cjs +12 -0
- package/dist/{PptxHandler-FIN6XDTI.mjs → PptxHandler-R5BVKEBW.mjs} +3 -3
- package/dist/PptxHandler-UKAA5T5U.mjs +3 -0
- package/dist/PresentationBuilder-4AF3PZHG.cjs +20 -0
- package/dist/PresentationBuilder-54QGEZ2F.mjs +3 -0
- package/dist/PresentationBuilder-W67DIJBV.mjs +7 -0
- package/dist/automation/docx.d.ts +18 -0
- package/dist/automation/docx.d.ts.map +1 -1
- package/dist/automation/index.cjs +21297 -8338
- package/dist/automation/index.d.ts +1 -0
- package/dist/automation/index.d.ts.map +1 -1
- package/dist/automation/index.mjs +21294 -8339
- package/dist/automation/node.cjs +66 -6
- package/dist/automation/node.d.ts +10 -0
- package/dist/automation/node.d.ts.map +1 -1
- package/dist/automation/node.mjs +67 -7
- package/dist/automation/outline.d.ts +29 -0
- package/dist/automation/outline.d.ts.map +1 -0
- package/dist/automation/xlsx.d.ts +21 -0
- package/dist/automation/xlsx.d.ts.map +1 -1
- package/dist/chart/auto-title.d.ts +31 -0
- package/dist/chart/auto-title.d.ts.map +1 -0
- package/dist/chart/axis-format.d.ts +13 -0
- package/dist/chart/axis-format.d.ts.map +1 -0
- package/dist/chart/bubble-radius.d.ts +30 -0
- package/dist/chart/bubble-radius.d.ts.map +1 -0
- package/dist/chart/error-bar-amount.d.ts +22 -0
- package/dist/chart/error-bar-amount.d.ts.map +1 -0
- package/dist/chart/hierarchy.d.ts +69 -0
- package/dist/chart/hierarchy.d.ts.map +1 -0
- package/dist/chart/index.cjs +2377 -527
- package/dist/chart/index.d.ts +12 -0
- package/dist/chart/index.d.ts.map +1 -1
- package/dist/chart/index.mjs +2338 -528
- package/dist/chart/model-analysis.d.ts +66 -0
- package/dist/chart/model-analysis.d.ts.map +1 -0
- package/dist/chart/model-series.d.ts +5 -0
- package/dist/chart/model-series.d.ts.map +1 -1
- package/dist/chart/number-format-pattern.d.ts +35 -0
- package/dist/chart/number-format-pattern.d.ts.map +1 -0
- package/dist/chart/number-format.d.ts +21 -0
- package/dist/chart/number-format.d.ts.map +1 -0
- package/dist/chart/parse-analysis.d.ts +13 -0
- package/dist/chart/parse-analysis.d.ts.map +1 -0
- package/dist/chart/parse-series.d.ts +1 -1
- package/dist/chart/parse-series.d.ts.map +1 -1
- package/dist/chart/parse-util.d.ts +2 -0
- package/dist/chart/parse-util.d.ts.map +1 -1
- package/dist/chart/render/chart-svg-analysis.d.ts +7 -0
- package/dist/chart/render/chart-svg-analysis.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-bars.d.ts +5 -0
- package/dist/chart/render/chart-svg-bars.d.ts.map +1 -1
- package/dist/chart/render/chart-svg-cartesian.d.ts +7 -2
- package/dist/chart/render/chart-svg-cartesian.d.ts.map +1 -1
- package/dist/chart/render/chart-svg-hierarchy.d.ts +5 -0
- package/dist/chart/render/chart-svg-hierarchy.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-plots.d.ts +5 -0
- package/dist/chart/render/chart-svg-plots.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-stock.d.ts +4 -0
- package/dist/chart/render/chart-svg-stock.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-waterfall.d.ts +4 -0
- package/dist/chart/render/chart-svg-waterfall.d.ts.map +1 -0
- package/dist/chart/render/chart-svg-xy.d.ts +4 -0
- package/dist/chart/render/chart-svg-xy.d.ts.map +1 -0
- package/dist/chart/render/chart-svg.d.ts +1 -1
- package/dist/chart/render/chart-svg.d.ts.map +1 -1
- package/dist/chart/render/chart-value-axis.d.ts +6 -1
- package/dist/chart/render/chart-value-axis.d.ts.map +1 -1
- package/dist/chart/render/chart-view-analysis.d.ts +30 -0
- package/dist/chart/render/chart-view-analysis.d.ts.map +1 -0
- package/dist/chart/render/chart-view-ex.d.ts +24 -0
- package/dist/chart/render/chart-view-ex.d.ts.map +1 -0
- package/dist/chart/render/chart-view-families.d.ts +10 -0
- package/dist/chart/render/chart-view-families.d.ts.map +1 -0
- package/dist/chart/render/chart-view-series.d.ts +36 -0
- package/dist/chart/render/chart-view-series.d.ts.map +1 -0
- package/dist/chart/render/chart-view-stock.d.ts +23 -0
- package/dist/chart/render/chart-view-stock.d.ts.map +1 -0
- package/dist/chart/render/chart-view.d.ts +49 -18
- package/dist/chart/render/chart-view.d.ts.map +1 -1
- package/dist/chart/render/index.d.ts +2 -0
- package/dist/chart/render/index.d.ts.map +1 -1
- package/dist/chart/render/render-space.d.ts +6 -1
- package/dist/chart/render/render-space.d.ts.map +1 -1
- package/dist/chart/render/summary-analysis.d.ts +11 -0
- package/dist/chart/render/summary-analysis.d.ts.map +1 -0
- package/dist/chart/render/summary-from-chartex.d.ts +11 -0
- package/dist/chart/render/summary-from-chartex.d.ts.map +1 -0
- package/dist/chart/render/summary-from-space.d.ts.map +1 -1
- package/dist/chart/render/summary.d.ts +86 -3
- package/dist/chart/render/summary.d.ts.map +1 -1
- package/dist/chart/stock-candles.d.ts +72 -0
- package/dist/chart/stock-candles.d.ts.map +1 -0
- package/dist/chart/style-palette.d.ts +29 -0
- package/dist/chart/style-palette.d.ts.map +1 -0
- package/dist/chart/sunburst-arcs.d.ts +41 -0
- package/dist/chart/sunburst-arcs.d.ts.map +1 -0
- package/dist/chart/trendline-fit.d.ts +39 -0
- package/dist/chart/trendline-fit.d.ts.map +1 -0
- package/dist/chart/waterfall.d.ts +31 -0
- package/dist/chart/waterfall.d.ts.map +1 -0
- package/dist/chart/write-analysis.d.ts +12 -0
- package/dist/chart/write-analysis.d.ts.map +1 -0
- package/dist/chart/write-series.d.ts.map +1 -1
- package/dist/{chunk-UAY26XOI.mjs → chunk-2EBMHIGJ.mjs} +1303 -994
- package/dist/{chunk-O6NIA4NG.mjs → chunk-7ZIZFJXT.mjs} +7392 -6581
- package/dist/{chunk-6DELVMYB.mjs → chunk-EMZIHAOH.mjs} +20558 -19733
- package/dist/{chunk-TVE6UIJF.mjs → chunk-HU36GIYM.mjs} +691 -208
- package/dist/{chunk-H2FRDUNV.mjs → chunk-JFMIPOPV.mjs} +868 -585
- package/dist/chunk-M4XLF4R7.mjs +387 -0
- package/dist/{chunk-G5PQKHCG.mjs → chunk-NWAQEXBK.mjs} +1 -1
- package/dist/{chunk-B2JBBAEQ.mjs → chunk-OPBZBSJF.mjs} +1 -1
- package/dist/{chunk-7QZGRB3T.cjs → chunk-X7MGZQ6C.cjs} +1321 -995
- package/dist/{chunk-IT3U6QD6.cjs → chunk-ZWI7MTLF.cjs} +11275 -10461
- package/dist/crypto/decrypt.d.ts +17 -3
- package/dist/crypto/decrypt.d.ts.map +1 -1
- package/dist/crypto/encryption-info.d.ts.map +1 -1
- package/dist/crypto/index.cjs +252 -78
- package/dist/crypto/index.d.ts +19 -4
- package/dist/crypto/index.d.ts.map +1 -1
- package/dist/crypto/index.mjs +252 -79
- package/dist/crypto/key-derivation.d.ts +2 -3
- package/dist/crypto/key-derivation.d.ts.map +1 -1
- package/dist/crypto/validate.d.ts +22 -0
- package/dist/crypto/validate.d.ts.map +1 -0
- package/dist/diagram/engine/layout-def-parse.d.ts.map +1 -1
- package/dist/diagram/engine/pres-tree.d.ts.map +1 -1
- package/dist/diagram/index.cjs +102 -52
- package/dist/diagram/index.mjs +102 -52
- package/dist/digest/index.cjs +23 -11
- package/dist/digest/index.d.ts +2 -1
- package/dist/digest/index.d.ts.map +1 -1
- package/dist/digest/index.mjs +21 -12
- package/dist/digest/password-hash.d.ts +19 -5
- package/dist/digest/password-hash.d.ts.map +1 -1
- package/dist/digest/timing-safe.d.ts +7 -0
- package/dist/digest/timing-safe.d.ts.map +1 -0
- package/dist/docx/block-parser.d.ts.map +1 -1
- package/dist/docx/chart-paint.d.ts.map +1 -1
- package/dist/docx/chart.d.ts +10 -2
- package/dist/docx/chart.d.ts.map +1 -1
- package/dist/docx/content-control-edit.d.ts +26 -0
- package/dist/docx/content-control-edit.d.ts.map +1 -0
- package/dist/docx/content-control-model.d.ts +51 -0
- package/dist/docx/content-control-model.d.ts.map +1 -0
- package/dist/docx/content-control.d.ts +9 -0
- package/dist/docx/content-control.d.ts.map +1 -0
- package/dist/docx/default-styles.d.ts.map +1 -1
- package/dist/docx/drawing.d.ts.map +1 -1
- package/dist/docx/embedded.cjs +9932 -935
- package/dist/docx/embedded.mjs +9932 -935
- package/dist/docx/equation.d.ts +7 -3
- package/dist/docx/equation.d.ts.map +1 -1
- package/dist/docx/index.cjs +14117 -1513
- package/dist/docx/index.d.ts +6 -0
- package/dist/docx/index.d.ts.map +1 -1
- package/dist/docx/index.mjs +14093 -1514
- package/dist/docx/inline-model.d.ts +3 -0
- package/dist/docx/inline-model.d.ts.map +1 -1
- package/dist/docx/layout/adapt-floats.d.ts +3 -3
- package/dist/docx/layout/adapt-floats.d.ts.map +1 -1
- package/dist/docx/layout/adapter.d.ts.map +1 -1
- package/dist/docx/layout/equation-object.d.ts +7 -0
- package/dist/docx/layout/equation-object.d.ts.map +1 -0
- package/dist/docx/layout/floats.d.ts +8 -0
- package/dist/docx/layout/floats.d.ts.map +1 -1
- package/dist/docx/layout/incremental-layout.d.ts +39 -0
- package/dist/docx/layout/incremental-layout.d.ts.map +1 -0
- package/dist/docx/layout/index.cjs +14177 -1707
- package/dist/docx/layout/index.d.ts +2 -2
- package/dist/docx/layout/index.d.ts.map +1 -1
- package/dist/docx/layout/index.mjs +14176 -1708
- package/dist/docx/layout/input.d.ts +4 -0
- package/dist/docx/layout/input.d.ts.map +1 -1
- package/dist/docx/layout/layout-session.d.ts +13 -2
- package/dist/docx/layout/layout-session.d.ts.map +1 -1
- package/dist/docx/layout/layout.d.ts +1 -1
- package/dist/docx/layout/layout.d.ts.map +1 -1
- package/dist/docx/layout/line-metrics.d.ts.map +1 -1
- package/dist/docx/layout/page-cursor.d.ts +1 -1
- package/dist/docx/layout/page-cursor.d.ts.map +1 -1
- package/dist/docx/layout/page-fields.d.ts +3 -1
- package/dist/docx/layout/page-fields.d.ts.map +1 -1
- package/dist/docx/layout/result.d.ts +14 -1
- package/dist/docx/layout/result.d.ts.map +1 -1
- package/dist/docx/layout/section-flow.d.ts +11 -1
- package/dist/docx/layout/section-flow.d.ts.map +1 -1
- package/dist/docx/ligatures.d.ts +2 -0
- package/dist/docx/ligatures.d.ts.map +1 -1
- package/dist/docx/load/index.cjs +12709 -3590
- package/dist/docx/load/index.mjs +12709 -3590
- package/dist/docx/model-paragraph.d.ts +3 -0
- package/dist/docx/model-paragraph.d.ts.map +1 -1
- package/dist/docx/model-run.d.ts +3 -0
- package/dist/docx/model-run.d.ts.map +1 -1
- package/dist/docx/model.d.ts +3 -0
- package/dist/docx/model.d.ts.map +1 -1
- package/dist/docx/numbering-parse.d.ts.map +1 -1
- package/dist/docx/numbering-text.d.ts.map +1 -1
- package/dist/docx/package-limits.d.ts +6 -0
- package/dist/docx/package-limits.d.ts.map +1 -0
- package/dist/docx/parse-content-control.d.ts +28 -0
- package/dist/docx/parse-content-control.d.ts.map +1 -0
- package/dist/docx/parse-table.d.ts.map +1 -1
- package/dist/docx/parse.d.ts.map +1 -1
- package/dist/docx/save.d.ts.map +1 -1
- package/dist/docx/shape-model.d.ts +31 -0
- package/dist/docx/shape-model.d.ts.map +1 -0
- package/dist/docx/shape-palette.d.ts +19 -0
- package/dist/docx/shape-palette.d.ts.map +1 -0
- package/dist/docx/shape-parse.d.ts +16 -0
- package/dist/docx/shape-parse.d.ts.map +1 -0
- package/dist/docx/shape-svg.d.ts +20 -0
- package/dist/docx/shape-svg.d.ts.map +1 -0
- package/dist/docx/table-model.d.ts +4 -0
- package/dist/docx/table-model.d.ts.map +1 -1
- package/dist/docx/ui/content-control-commands.d.ts +37 -0
- package/dist/docx/ui/content-control-commands.d.ts.map +1 -0
- package/dist/docx/ui/content-control-guard.d.ts +8 -0
- package/dist/docx/ui/content-control-guard.d.ts.map +1 -0
- package/dist/docx/ui/content-control-spans.d.ts +19 -0
- package/dist/docx/ui/content-control-spans.d.ts.map +1 -0
- package/dist/docx/ui/index.cjs +3132 -506
- package/dist/docx/ui/index.d.ts +3 -0
- package/dist/docx/ui/index.d.ts.map +1 -1
- package/dist/docx/ui/index.mjs +3117 -507
- package/dist/docx/ui/inline-content-schema.d.ts.map +1 -1
- package/dist/docx/ui/paragraph-attributes.d.ts.map +1 -1
- package/dist/docx/ui/ribbon-action-ids.d.ts +1 -1
- package/dist/docx/ui/ribbon-action-ids.d.ts.map +1 -1
- package/dist/docx/ui/run-adapter.d.ts.map +1 -1
- package/dist/docx/ui/run-compare.d.ts.map +1 -1
- package/dist/docx/ui/run-mark-properties.d.ts.map +1 -1
- package/dist/docx/ui/run-marks.d.ts.map +1 -1
- package/dist/docx/ui/schema-marks.d.ts +16 -1
- package/dist/docx/ui/schema-marks.d.ts.map +1 -1
- package/dist/docx/ui/table-structure-guard.d.ts.map +1 -1
- package/dist/docx/write-block-placement.d.ts +9 -0
- package/dist/docx/write-block-placement.d.ts.map +1 -0
- package/dist/docx/write-content-control.d.ts +12 -0
- package/dist/docx/write-content-control.d.ts.map +1 -0
- package/dist/docx/write-drawing.d.ts +2 -0
- package/dist/docx/write-drawing.d.ts.map +1 -1
- package/dist/docx/write-inline.d.ts.map +1 -1
- package/dist/docx/write-paragraph.d.ts.map +1 -1
- package/dist/docx/write-shape.d.ts +16 -0
- package/dist/docx/write-shape.d.ts.map +1 -0
- package/dist/docx/write-table.d.ts.map +1 -1
- package/dist/docx/write.d.ts.map +1 -1
- package/dist/drawingml/index.cjs +24 -0
- package/dist/drawingml/index.mjs +24 -0
- package/dist/geometry/index.cjs +322 -48
- package/dist/geometry/index.d.ts +1 -0
- package/dist/geometry/index.d.ts.map +1 -1
- package/dist/geometry/index.mjs +318 -49
- package/dist/geometry/preset-shape-definitions-table.d.ts.map +1 -1
- package/dist/geometry/shape-gallery-catalog.d.ts +32 -0
- package/dist/geometry/shape-gallery-catalog.d.ts.map +1 -0
- package/dist/index.cjs +4603 -1631
- package/dist/index.mjs +4603 -1631
- package/dist/math/equation-gallery.d.ts +10 -0
- package/dist/math/equation-gallery.d.ts.map +1 -0
- package/dist/math/index.cjs +777 -139
- package/dist/math/index.d.ts +3 -0
- package/dist/math/index.d.ts.map +1 -1
- package/dist/math/index.mjs +772 -140
- package/dist/math/latex-omml-siblings.d.ts.map +1 -1
- package/dist/math/latex-to-omml.d.ts.map +1 -1
- package/dist/math/omml-box-grouped.d.ts +9 -0
- package/dist/math/omml-box-grouped.d.ts.map +1 -0
- package/dist/math/omml-box-layout.d.ts +15 -0
- package/dist/math/omml-box-layout.d.ts.map +1 -0
- package/dist/math/omml-box-structures.d.ts +7 -0
- package/dist/math/omml-box-structures.d.ts.map +1 -0
- package/dist/math/omml-box.d.ts +85 -0
- package/dist/math/omml-box.d.ts.map +1 -0
- package/dist/math/omml-dom.d.ts.map +1 -1
- package/dist/math/omml-mathml-converters.d.ts.map +1 -1
- package/dist/math/omml-svg.d.ts +14 -0
- package/dist/math/omml-svg.d.ts.map +1 -0
- package/dist/math/omml-to-xml.d.ts +10 -0
- package/dist/math/omml-to-xml.d.ts.map +1 -0
- package/dist/opc/embedded-packages.d.ts.map +1 -1
- package/dist/opc/index.cjs +257 -22
- package/dist/opc/index.d.ts +1 -0
- package/dist/opc/index.d.ts.map +1 -1
- package/dist/opc/index.mjs +251 -23
- package/dist/opc/package.d.ts.map +1 -1
- package/dist/opc/signature/detection.d.ts +22 -6
- package/dist/opc/signature/detection.d.ts.map +1 -1
- package/dist/opc/signature/index.d.ts +1 -1
- package/dist/opc/signature/index.d.ts.map +1 -1
- package/dist/opc/signature/xml-utils.d.ts.map +1 -1
- package/dist/opc/zip-limits.d.ts +52 -0
- package/dist/opc/zip-limits.d.ts.map +1 -0
- package/dist/pptx/automation/index.cjs +3232 -1916
- package/dist/pptx/automation/index.d.ts +4 -4
- package/dist/pptx/automation/index.mjs +6 -6
- package/dist/pptx/chunks/{elements-DmbzOhFu.d.ts → elements-Cadkqht8.d.ts} +162 -10
- package/dist/pptx/chunks/elements-Cadkqht8.d.ts.map +1 -0
- package/dist/pptx/chunks/{index-BmvOxbsh.d.ts → index-CJI2EugA.d.ts} +27 -9
- package/dist/pptx/chunks/index-CJI2EugA.d.ts.map +1 -0
- package/dist/pptx/chunks/{index-Cija6Dih.d.ts → index-CozqpSPL.d.ts} +137 -5
- package/dist/pptx/chunks/index-CozqpSPL.d.ts.map +1 -0
- package/dist/pptx/chunks/inspection-status-DjiWd_Aa.d.ts.map +1 -1
- package/dist/pptx/chunks/{text-operations-sXxhsKDd.d.ts → text-operations-C3L9xrqx.d.ts} +2 -2
- package/dist/pptx/chunks/{text-operations-sXxhsKDd.d.ts.map → text-operations-C3L9xrqx.d.ts.map} +1 -1
- package/dist/pptx/cli/index.cjs +3156 -1848
- package/dist/pptx/cli/index.d.ts +1 -1
- package/dist/pptx/cli/index.mjs +5 -5
- package/dist/pptx/converter/index.cjs +87 -54
- package/dist/pptx/converter/index.d.ts +1 -1
- package/dist/pptx/converter/index.mjs +3 -3
- package/dist/pptx/editor/render/find-replace.cjs +14 -14
- package/dist/pptx/editor/render/find-replace.d.ts +2 -2
- package/dist/pptx/editor/render/find-replace.mjs +1 -1
- package/dist/pptx/editor/render/slide-operations.cjs +8 -8
- package/dist/pptx/editor/render/slide-operations.mjs +2 -2
- package/dist/pptx/editor/render/text-runs-style-patch.d.ts +1 -1
- package/dist/pptx/editor/render/text-style-scope.d.ts +1 -1
- package/dist/pptx/index.cjs +4105 -2075
- package/dist/pptx/index.d.ts +5 -5
- package/dist/pptx/index.mjs +6 -6
- package/dist/pptx/signature-node/index.cjs +342 -65
- package/dist/pptx/signature-node/index.d.ts +12 -1
- package/dist/pptx/signature-node/index.d.ts.map +1 -1
- package/dist/pptx/signature-node/index.mjs +112 -52
- package/dist/teams/activity-feed.d.ts +19 -0
- package/dist/teams/activity-feed.d.ts.map +1 -0
- package/dist/teams/activity-state.d.ts +12 -0
- package/dist/teams/activity-state.d.ts.map +1 -0
- package/dist/teams/activity.d.ts +52 -0
- package/dist/teams/activity.d.ts.map +1 -0
- package/dist/teams/calendar.d.ts +57 -0
- package/dist/teams/calendar.d.ts.map +1 -0
- package/dist/teams/chat-actions.d.ts +20 -0
- package/dist/teams/chat-actions.d.ts.map +1 -0
- package/dist/teams/chat-rooms.d.ts +42 -0
- package/dist/teams/chat-rooms.d.ts.map +1 -0
- package/dist/teams/chat-view.d.ts +56 -0
- package/dist/teams/chat-view.d.ts.map +1 -0
- package/dist/teams/chat.d.ts +19 -3
- package/dist/teams/chat.d.ts.map +1 -1
- package/dist/teams/chats.d.ts +52 -0
- package/dist/teams/chats.d.ts.map +1 -0
- package/dist/teams/ics-timezone.d.ts +17 -0
- package/dist/teams/ics-timezone.d.ts.map +1 -0
- package/dist/teams/ics.d.ts +20 -0
- package/dist/teams/ics.d.ts.map +1 -0
- package/dist/teams/index.cjs +7442 -3211
- package/dist/teams/index.d.ts +23 -0
- package/dist/teams/index.d.ts.map +1 -1
- package/dist/teams/index.mjs +7336 -3212
- package/dist/teams/meeting-actions.d.ts +31 -0
- package/dist/teams/meeting-actions.d.ts.map +1 -0
- package/dist/teams/meeting-exceptions.d.ts +28 -0
- package/dist/teams/meeting-exceptions.d.ts.map +1 -0
- package/dist/teams/meeting-reminders.d.ts +13 -0
- package/dist/teams/meeting-reminders.d.ts.map +1 -0
- package/dist/teams/meetings.d.ts +81 -0
- package/dist/teams/meetings.d.ts.map +1 -0
- package/dist/teams/mention-text.d.ts +11 -0
- package/dist/teams/mention-text.d.ts.map +1 -0
- package/dist/teams/mentions.d.ts +68 -0
- package/dist/teams/mentions.d.ts.map +1 -0
- package/dist/teams/model.d.ts +7 -0
- package/dist/teams/model.d.ts.map +1 -1
- package/dist/teams/notifications.d.ts +21 -0
- package/dist/teams/notifications.d.ts.map +1 -0
- package/dist/teams/recurrence-calendar.d.ts +41 -0
- package/dist/teams/recurrence-calendar.d.ts.map +1 -0
- package/dist/teams/recurrence.d.ts +18 -0
- package/dist/teams/recurrence.d.ts.map +1 -0
- package/dist/teams/roster.d.ts +12 -0
- package/dist/teams/roster.d.ts.map +1 -0
- package/dist/teams/server-config.d.ts +23 -2
- package/dist/teams/server-config.d.ts.map +1 -1
- package/dist/teams/server-session.d.ts +38 -0
- package/dist/teams/server-session.d.ts.map +1 -0
- package/dist/teams/shared-chat.d.ts +83 -0
- package/dist/teams/shared-chat.d.ts.map +1 -0
- package/dist/teams/store.d.ts +58 -4
- package/dist/teams/store.d.ts.map +1 -1
- package/dist/teams/sync-transport.d.ts +12 -0
- package/dist/teams/sync-transport.d.ts.map +1 -0
- package/dist/teams/time-zone.d.ts +32 -0
- package/dist/teams/time-zone.d.ts.map +1 -0
- package/dist/teams/view.d.ts +3 -0
- package/dist/teams/view.d.ts.map +1 -1
- package/dist/teams/workspace.d.ts +13 -2
- package/dist/teams/workspace.d.ts.map +1 -1
- package/dist/visio/edit-connector-follow.d.ts +15 -0
- package/dist/visio/edit-connector-follow.d.ts.map +1 -0
- package/dist/visio/edit-connector-obstacles.d.ts +9 -3
- package/dist/visio/edit-connector-obstacles.d.ts.map +1 -1
- package/dist/visio/edit-connector-reroute.d.ts.map +1 -1
- package/dist/visio/edit-connector.d.ts.map +1 -1
- package/dist/visio/edit-master-add.d.ts +37 -0
- package/dist/visio/edit-master-add.d.ts.map +1 -0
- package/dist/visio/edit-master-drop.d.ts +6 -0
- package/dist/visio/edit-master-drop.d.ts.map +1 -1
- package/dist/visio/edit-recalculate-index.d.ts +5 -0
- package/dist/visio/edit-recalculate-index.d.ts.map +1 -1
- package/dist/visio/edit-recalculate-values.d.ts.map +1 -1
- package/dist/visio/edit-stencil-connector-layout.d.ts +2 -0
- package/dist/visio/edit-stencil-connector-layout.d.ts.map +1 -1
- package/dist/visio/edit-stencil-connector.d.ts +1 -0
- package/dist/visio/edit-stencil-connector.d.ts.map +1 -1
- package/dist/visio/edit-stencil-import.d.ts +10 -0
- package/dist/visio/edit-stencil-import.d.ts.map +1 -0
- package/dist/visio/edit-stencil-line.d.ts +29 -0
- package/dist/visio/edit-stencil-line.d.ts.map +1 -0
- package/dist/visio/edit-stencil-master.d.ts +3 -8
- package/dist/visio/edit-stencil-master.d.ts.map +1 -1
- package/dist/visio/edit.d.ts.map +1 -1
- package/dist/visio/formula-evaluate.d.ts.map +1 -1
- package/dist/visio/formula-math-functions.d.ts +11 -0
- package/dist/visio/formula-math-functions.d.ts.map +1 -0
- package/dist/visio/formula-text-functions.d.ts +23 -0
- package/dist/visio/formula-text-functions.d.ts.map +1 -0
- package/dist/visio/formula.d.ts.map +1 -1
- package/dist/visio/index.cjs +2552 -1833
- package/dist/visio/index.d.ts +1 -0
- package/dist/visio/index.d.ts.map +1 -1
- package/dist/visio/index.mjs +2552 -1834
- package/dist/visio/parser.d.ts +6 -0
- package/dist/visio/parser.d.ts.map +1 -1
- package/dist/visio/stencil-file.d.ts +14 -0
- package/dist/visio/stencil-file.d.ts.map +1 -0
- package/dist/visio/ui/index.cjs +2398 -1679
- package/dist/visio/ui/index.mjs +2398 -1680
- package/dist/visio/ui/master-drop.d.ts +10 -0
- package/dist/visio/ui/master-drop.d.ts.map +1 -1
- package/dist/xlsx/edit/cell-values.d.ts.map +1 -1
- package/dist/xlsx/edit/clipboard-html-parse.d.ts +4 -0
- package/dist/xlsx/edit/clipboard-html-parse.d.ts.map +1 -1
- package/dist/xlsx/edit/data-table.d.ts +38 -0
- package/dist/xlsx/edit/data-table.d.ts.map +1 -0
- package/dist/xlsx/edit/drawings.d.ts.map +1 -1
- package/dist/xlsx/edit/goal-seek.d.ts +30 -0
- package/dist/xlsx/edit/goal-seek.d.ts.map +1 -0
- package/dist/xlsx/edit/goal-solver.d.ts +20 -0
- package/dist/xlsx/edit/goal-solver.d.ts.map +1 -0
- package/dist/xlsx/edit/history.d.ts +1 -1
- package/dist/xlsx/edit/history.d.ts.map +1 -1
- package/dist/xlsx/edit/index.d.ts +5 -0
- package/dist/xlsx/edit/index.d.ts.map +1 -1
- package/dist/xlsx/edit/input-text.d.ts.map +1 -1
- package/dist/xlsx/edit/pivots.d.ts +2 -1
- package/dist/xlsx/edit/pivots.d.ts.map +1 -1
- package/dist/xlsx/edit/scenarios.d.ts +41 -0
- package/dist/xlsx/edit/scenarios.d.ts.map +1 -0
- package/dist/xlsx/edit/session.d.ts.map +1 -1
- package/dist/xlsx/edit/slicers.d.ts +34 -0
- package/dist/xlsx/edit/slicers.d.ts.map +1 -0
- package/dist/xlsx/edit/table-edits.d.ts.map +1 -1
- package/dist/xlsx/edit/timelines.d.ts +26 -0
- package/dist/xlsx/edit/timelines.d.ts.map +1 -0
- package/dist/xlsx/edit/types.d.ts +39 -0
- package/dist/xlsx/edit/types.d.ts.map +1 -1
- package/dist/xlsx/formula/context.d.ts +13 -0
- package/dist/xlsx/formula/context.d.ts.map +1 -1
- package/dist/xlsx/formula/engine.d.ts.map +1 -1
- package/dist/xlsx/formula/evaluator.d.ts.map +1 -1
- package/dist/xlsx/formula/functions/helpers.d.ts +3 -2
- package/dist/xlsx/formula/functions/helpers.d.ts.map +1 -1
- package/dist/xlsx/formula/functions/text-regex.d.ts +8 -0
- package/dist/xlsx/formula/functions/text-regex.d.ts.map +1 -1
- package/dist/xlsx/formula/functions/text.d.ts.map +1 -1
- package/dist/xlsx/formula/functions/wildcard.d.ts +8 -0
- package/dist/xlsx/formula/functions/wildcard.d.ts.map +1 -0
- package/dist/xlsx/formula/values.d.ts +9 -0
- package/dist/xlsx/formula/values.d.ts.map +1 -1
- package/dist/xlsx/index.cjs +9203 -3496
- package/dist/xlsx/index.d.ts +1 -0
- package/dist/xlsx/index.d.ts.map +1 -1
- package/dist/xlsx/index.mjs +9117 -3496
- package/dist/xlsx/layout/chart-view.d.ts.map +1 -1
- package/dist/xlsx/layout/header-footer-edit.d.ts +16 -0
- package/dist/xlsx/layout/header-footer-edit.d.ts.map +1 -0
- package/dist/xlsx/layout/index.d.ts +3 -0
- package/dist/xlsx/layout/index.d.ts.map +1 -1
- package/dist/xlsx/layout/page-break-view.d.ts +39 -0
- package/dist/xlsx/layout/page-break-view.d.ts.map +1 -0
- package/dist/xlsx/layout/page-view.d.ts +69 -0
- package/dist/xlsx/layout/page-view.d.ts.map +1 -0
- package/dist/xlsx/layout/ref-evaluator.d.ts.map +1 -1
- package/dist/xlsx/load/index.cjs +4486 -1970
- package/dist/xlsx/load/index.mjs +4485 -1969
- package/dist/xlsx/model-pivots.d.ts +105 -6
- package/dist/xlsx/model-pivots.d.ts.map +1 -1
- package/dist/xlsx/model-slicers.d.ts +146 -0
- package/dist/xlsx/model-slicers.d.ts.map +1 -0
- package/dist/xlsx/model-whatif.d.ts +51 -0
- package/dist/xlsx/model-whatif.d.ts.map +1 -0
- package/dist/xlsx/model.d.ts +26 -1
- package/dist/xlsx/model.d.ts.map +1 -1
- package/dist/xlsx/pivot/admission.d.ts.map +1 -1
- package/dist/xlsx/pivot/aggregate.d.ts +18 -6
- package/dist/xlsx/pivot/aggregate.d.ts.map +1 -1
- package/dist/xlsx/pivot/axes.d.ts +11 -0
- package/dist/xlsx/pivot/axes.d.ts.map +1 -0
- package/dist/xlsx/pivot/cache-xml.d.ts.map +1 -1
- package/dist/xlsx/pivot/columns.d.ts +54 -0
- package/dist/xlsx/pivot/columns.d.ts.map +1 -0
- package/dist/xlsx/pivot/data.d.ts +9 -3
- package/dist/xlsx/pivot/data.d.ts.map +1 -1
- package/dist/xlsx/pivot/date-axes.d.ts +12 -0
- package/dist/xlsx/pivot/date-axes.d.ts.map +1 -0
- package/dist/xlsx/pivot/date-group-read.d.ts +11 -0
- package/dist/xlsx/pivot/date-group-read.d.ts.map +1 -0
- package/dist/xlsx/pivot/date-groups.d.ts +65 -0
- package/dist/xlsx/pivot/date-groups.d.ts.map +1 -0
- package/dist/xlsx/pivot/date-read.d.ts +10 -0
- package/dist/xlsx/pivot/date-read.d.ts.map +1 -0
- package/dist/xlsx/pivot/dates.d.ts +17 -0
- package/dist/xlsx/pivot/dates.d.ts.map +1 -0
- package/dist/xlsx/pivot/group-read.d.ts +9 -0
- package/dist/xlsx/pivot/group-read.d.ts.map +1 -0
- package/dist/xlsx/pivot/groups.d.ts +31 -0
- package/dist/xlsx/pivot/groups.d.ts.map +1 -0
- package/dist/xlsx/pivot/index.d.ts +8 -0
- package/dist/xlsx/pivot/index.d.ts.map +1 -1
- package/dist/xlsx/pivot/item-filters-read.d.ts +7 -0
- package/dist/xlsx/pivot/item-filters-read.d.ts.map +1 -0
- package/dist/xlsx/pivot/item-filters.d.ts +23 -0
- package/dist/xlsx/pivot/item-filters.d.ts.map +1 -0
- package/dist/xlsx/pivot/measures.d.ts +3 -8
- package/dist/xlsx/pivot/measures.d.ts.map +1 -1
- package/dist/xlsx/pivot/nested.d.ts +10 -0
- package/dist/xlsx/pivot/nested.d.ts.map +1 -0
- package/dist/xlsx/pivot/page-filter-admission.d.ts.map +1 -1
- package/dist/xlsx/pivot/page-filter.d.ts.map +1 -1
- package/dist/xlsx/pivot/read.d.ts +2 -1
- package/dist/xlsx/pivot/read.d.ts.map +1 -1
- package/dist/xlsx/pivot/subtotal-read.d.ts +9 -0
- package/dist/xlsx/pivot/subtotal-read.d.ts.map +1 -0
- package/dist/xlsx/pivot/subtotals.d.ts +28 -0
- package/dist/xlsx/pivot/subtotals.d.ts.map +1 -0
- package/dist/xlsx/pivot/table-xml.d.ts +1 -1
- package/dist/xlsx/pivot/table-xml.d.ts.map +1 -1
- package/dist/xlsx/pivot/values-axis.d.ts +9 -6
- package/dist/xlsx/pivot/values-axis.d.ts.map +1 -1
- package/dist/xlsx/read/chart-ex.d.ts +9 -0
- package/dist/xlsx/read/chart-ex.d.ts.map +1 -0
- package/dist/xlsx/read/chart.d.ts.map +1 -1
- package/dist/xlsx/read/drawing.d.ts.map +1 -1
- package/dist/xlsx/read/load.d.ts.map +1 -1
- package/dist/xlsx/read/package.d.ts +2 -1
- package/dist/xlsx/read/package.d.ts.map +1 -1
- package/dist/xlsx/read/scenarios.d.ts +4 -0
- package/dist/xlsx/read/scenarios.d.ts.map +1 -0
- package/dist/xlsx/read/sheet-data.d.ts.map +1 -1
- package/dist/xlsx/read/sheet-props.d.ts.map +1 -1
- package/dist/xlsx/read/tables.d.ts +3 -0
- package/dist/xlsx/read/tables.d.ts.map +1 -1
- package/dist/xlsx/read/worksheet.d.ts.map +1 -1
- package/dist/xlsx/slicer/book.d.ts +16 -0
- package/dist/xlsx/slicer/book.d.ts.map +1 -0
- package/dist/xlsx/slicer/frame.d.ts +14 -0
- package/dist/xlsx/slicer/frame.d.ts.map +1 -0
- package/dist/xlsx/slicer/index.d.ts +10 -0
- package/dist/xlsx/slicer/index.d.ts.map +1 -0
- package/dist/xlsx/slicer/items.d.ts +30 -0
- package/dist/xlsx/slicer/items.d.ts.map +1 -0
- package/dist/xlsx/slicer/layout.d.ts +67 -0
- package/dist/xlsx/slicer/layout.d.ts.map +1 -0
- package/dist/xlsx/slicer/read-slicers.d.ts +11 -0
- package/dist/xlsx/slicer/read-slicers.d.ts.map +1 -0
- package/dist/xlsx/slicer/read-timelines.d.ts +5 -0
- package/dist/xlsx/slicer/read-timelines.d.ts.map +1 -0
- package/dist/xlsx/slicer/read.d.ts +26 -0
- package/dist/xlsx/slicer/read.d.ts.map +1 -0
- package/dist/xlsx/slicer/select.d.ts +10 -0
- package/dist/xlsx/slicer/select.d.ts.map +1 -0
- package/dist/xlsx/slicer/styles.d.ts +36 -0
- package/dist/xlsx/slicer/styles.d.ts.map +1 -0
- package/dist/xlsx/slicer/table-filter.d.ts +28 -0
- package/dist/xlsx/slicer/table-filter.d.ts.map +1 -0
- package/dist/xlsx/slicer/timeline-periods.d.ts +35 -0
- package/dist/xlsx/slicer/timeline-periods.d.ts.map +1 -0
- package/dist/xlsx/slicer/timeline-view.d.ts +60 -0
- package/dist/xlsx/slicer/timeline-view.d.ts.map +1 -0
- package/dist/xlsx/slicer/write-plan.d.ts +31 -0
- package/dist/xlsx/slicer/write-plan.d.ts.map +1 -0
- package/dist/xlsx/slicer/write-timeline.d.ts +7 -0
- package/dist/xlsx/slicer/write-timeline.d.ts.map +1 -0
- package/dist/xlsx/slicer/write-xml.d.ts +17 -0
- package/dist/xlsx/slicer/write-xml.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/index.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/i18n/pivots.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/i18n/print-layout.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/i18n/slicers.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/slicers.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/what-if.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/what-if.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/icons.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/slicers.d.ts +37 -0
- package/dist/xlsx/ui/commands/slicers.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/what-if.d.ts +4 -0
- package/dist/xlsx/ui/commands/what-if.d.ts.map +1 -0
- package/dist/xlsx/ui/commands.d.ts +2 -0
- package/dist/xlsx/ui/commands.d.ts.map +1 -1
- package/dist/xlsx/ui/index.cjs +4142 -1570
- package/dist/xlsx/ui/index.d.ts +2 -0
- package/dist/xlsx/ui/index.d.ts.map +1 -1
- package/dist/xlsx/ui/index.mjs +4137 -1571
- package/dist/xlsx/ui/locales/de/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/en/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/es/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/fr/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/locales/zh-CN/shell.d.ts.map +1 -1
- package/dist/xlsx/ui/ribbon/tabs/review-view.d.ts.map +1 -1
- package/dist/xlsx/write/carried-refs.d.ts.map +1 -1
- package/dist/xlsx/write/drawing.d.ts.map +1 -1
- package/dist/xlsx/write/package-writer.d.ts +2 -0
- package/dist/xlsx/write/package-writer.d.ts.map +1 -1
- package/dist/xlsx/write/save.d.ts.map +1 -1
- package/dist/xlsx/write/scenarios.d.ts +4 -0
- package/dist/xlsx/write/scenarios.d.ts.map +1 -0
- package/dist/xlsx/write/sheet-data.d.ts.map +1 -1
- package/dist/xlsx/write/sheet-parts.d.ts +1 -0
- package/dist/xlsx/write/sheet-parts.d.ts.map +1 -1
- package/dist/xlsx/write/sheet-props.d.ts.map +1 -1
- package/dist/xlsx/write/table-patch.d.ts.map +1 -1
- package/dist/xlsx/write/tables.d.ts.map +1 -1
- package/dist/xlsx/write/worksheet.d.ts.map +1 -1
- package/dist/xml/index.cjs +28 -0
- package/dist/xml/index.mjs +27 -1
- package/dist/xml/namespaces.d.ts +2 -0
- package/dist/xml/namespaces.d.ts.map +1 -1
- package/dist/xml/xml.d.ts +15 -0
- package/dist/xml/xml.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/PptxHandler-RWTOUCLC.mjs +0 -3
- package/dist/PptxHandler-UU4ZCT6H.cjs +0 -12
- package/dist/chunk-KBIJI6P5.mjs +0 -166
- package/dist/pptx/chunks/elements-DmbzOhFu.d.ts.map +0 -1
- package/dist/pptx/chunks/index-BmvOxbsh.d.ts.map +0 -1
- package/dist/pptx/chunks/index-Cija6Dih.d.ts.map +0 -1
- package/dist/xlsx/pivot/hierarchy-first.d.ts +0 -21
- package/dist/xlsx/pivot/hierarchy-first.d.ts.map +0 -1
- package/dist/xlsx/pivot/hierarchy.d.ts +0 -5
- package/dist/xlsx/pivot/hierarchy.d.ts.map +0 -1
package/dist/math/index.mjs
CHANGED
|
@@ -77,13 +77,13 @@ function mergeSiblings(nodes) {
|
|
|
77
77
|
for (const [key] of entries) {
|
|
78
78
|
counts.set(key, (counts.get(key) ?? 0) + 1);
|
|
79
79
|
}
|
|
80
|
-
const ordered =
|
|
80
|
+
const ordered = /* @__PURE__ */ Object.create(null);
|
|
81
81
|
for (const [position, [key, value]] of entries.entries()) {
|
|
82
82
|
ordered[(counts.get(key) ?? 0) > 1 ? orderedXmlKey(key, position) : key] = value;
|
|
83
83
|
}
|
|
84
84
|
return ordered;
|
|
85
85
|
}
|
|
86
|
-
const result =
|
|
86
|
+
const result = /* @__PURE__ */ Object.create(null);
|
|
87
87
|
for (const [key, value] of entries) {
|
|
88
88
|
if (result[key]) {
|
|
89
89
|
const existing = result[key];
|
|
@@ -336,7 +336,7 @@ var REVERSE_ESCAPE = {
|
|
|
336
336
|
// math/latex-to-omml-constructs.ts
|
|
337
337
|
function parseScriptArgs(ctx) {
|
|
338
338
|
const args = { sub: [], sup: [], hasSub: false, hasSup: false };
|
|
339
|
-
for (let
|
|
339
|
+
for (let round2 = 0; round2 < 2; round2++) {
|
|
340
340
|
while (ctx.peek()?.type === "whitespace") {
|
|
341
341
|
ctx.next();
|
|
342
342
|
}
|
|
@@ -538,7 +538,7 @@ function readEnvName(ctx) {
|
|
|
538
538
|
}
|
|
539
539
|
function parseEnvBody(ctx) {
|
|
540
540
|
const rows = [];
|
|
541
|
-
let
|
|
541
|
+
let row2 = [];
|
|
542
542
|
let cell = [];
|
|
543
543
|
while (ctx.peek()) {
|
|
544
544
|
const tok = ctx.peek();
|
|
@@ -549,15 +549,15 @@ function parseEnvBody(ctx) {
|
|
|
549
549
|
}
|
|
550
550
|
if (tok.type === "command" && tok.value === "\\\\") {
|
|
551
551
|
ctx.next();
|
|
552
|
-
|
|
553
|
-
rows.push(
|
|
554
|
-
|
|
552
|
+
row2.push(cell);
|
|
553
|
+
rows.push(row2);
|
|
554
|
+
row2 = [];
|
|
555
555
|
cell = [];
|
|
556
556
|
continue;
|
|
557
557
|
}
|
|
558
558
|
if (tok.type === "text" && tok.value === "&") {
|
|
559
559
|
ctx.next();
|
|
560
|
-
|
|
560
|
+
row2.push(cell);
|
|
561
561
|
cell = [];
|
|
562
562
|
continue;
|
|
563
563
|
}
|
|
@@ -566,9 +566,9 @@ function parseEnvBody(ctx) {
|
|
|
566
566
|
cell.push(atom);
|
|
567
567
|
}
|
|
568
568
|
}
|
|
569
|
-
if (cell.length > 0 ||
|
|
570
|
-
|
|
571
|
-
rows.push(
|
|
569
|
+
if (cell.length > 0 || row2.length > 0) {
|
|
570
|
+
row2.push(cell);
|
|
571
|
+
rows.push(row2);
|
|
572
572
|
}
|
|
573
573
|
return rows;
|
|
574
574
|
}
|
|
@@ -602,9 +602,9 @@ function parseEnvironment(ctx) {
|
|
|
602
602
|
const rows = parseEnvBody(ctx);
|
|
603
603
|
const matrixDelims = MATRIX_ENVS[name];
|
|
604
604
|
if (matrixDelims) {
|
|
605
|
-
const
|
|
605
|
+
const matrix2 = buildMatrix(ctx, rows);
|
|
606
606
|
const [open, close] = matrixDelims;
|
|
607
|
-
return open || close ? wrapDelimited(ctx,
|
|
607
|
+
return open || close ? wrapDelimited(ctx, matrix2, open, close) : matrix2;
|
|
608
608
|
}
|
|
609
609
|
if (name === "cases") {
|
|
610
610
|
return wrapDelimited(ctx, buildEqArr(ctx, rows), "{", "");
|
|
@@ -996,11 +996,11 @@ function matrixEnvFor(open, close) {
|
|
|
996
996
|
});
|
|
997
997
|
}
|
|
998
998
|
function rowsToLatex(emit, rows) {
|
|
999
|
-
return rows.map((
|
|
999
|
+
return rows.map((row2) => emit.children(row2)).join(" \\\\ ");
|
|
1000
1000
|
}
|
|
1001
1001
|
function matrixToLatex(emit, node, env) {
|
|
1002
1002
|
const rows = ensureArr(node["m:mr"]).map(
|
|
1003
|
-
(
|
|
1003
|
+
(row2) => ensureArr(row2["m:e"]).map((cell) => emit.children(cell)).join(" & ")
|
|
1004
1004
|
);
|
|
1005
1005
|
return `\\begin{${env}}${rows.join(" \\\\ ")}\\end{${env}}`;
|
|
1006
1006
|
}
|
|
@@ -1090,7 +1090,7 @@ function radicalToLatex(node) {
|
|
|
1090
1090
|
function funcNameToLatex(fName) {
|
|
1091
1091
|
const sole = soleChild(fName);
|
|
1092
1092
|
let nameNode = null;
|
|
1093
|
-
let
|
|
1093
|
+
let scripts2 = "";
|
|
1094
1094
|
if (sole?.tag === "m:r") {
|
|
1095
1095
|
nameNode = sole.node;
|
|
1096
1096
|
} else if (sole && ["m:sSub", "m:sSup", "m:sSubSup", "m:limLow", "m:limUpp"].includes(sole.tag)) {
|
|
@@ -1099,7 +1099,7 @@ function funcNameToLatex(fName) {
|
|
|
1099
1099
|
nameNode = inner.node;
|
|
1100
1100
|
const sub = arg(sole.node, sole.tag === "m:limLow" ? "m:lim" : "m:sub");
|
|
1101
1101
|
const sup = arg(sole.node, sole.tag === "m:limUpp" ? "m:lim" : "m:sup");
|
|
1102
|
-
|
|
1102
|
+
scripts2 = `${sub ? `_{${sub}}` : ""}${sup ? `^{${sup}}` : ""}`;
|
|
1103
1103
|
}
|
|
1104
1104
|
}
|
|
1105
1105
|
if (!nameNode) {
|
|
@@ -1107,7 +1107,7 @@ function funcNameToLatex(fName) {
|
|
|
1107
1107
|
}
|
|
1108
1108
|
const name = readRunText(nameNode).trim();
|
|
1109
1109
|
const spelled = FUNC_NAMES.has(name) ? `\\${name}` : `\\operatorname{${escapeTextArgument(name)}}`;
|
|
1110
|
-
return `${spelled}${
|
|
1110
|
+
return `${spelled}${scripts2}`;
|
|
1111
1111
|
}
|
|
1112
1112
|
function accentToLatex(node) {
|
|
1113
1113
|
const raw = attrVal(childNode(childNode(node, "m:accPr"), "m:chr")) || "\u0302";
|
|
@@ -1215,14 +1215,27 @@ function convertOmmlToLatex(omml) {
|
|
|
1215
1215
|
}
|
|
1216
1216
|
|
|
1217
1217
|
// math/latex-to-omml.ts
|
|
1218
|
+
var MAX_NESTING_DEPTH = 512;
|
|
1218
1219
|
var LatexParser = class {
|
|
1219
1220
|
tokens;
|
|
1220
1221
|
pos = 0;
|
|
1221
1222
|
/** Set for one `parseAtom` call: the atom is a bare script argument and takes no scripts of its own. */
|
|
1222
1223
|
bare = false;
|
|
1224
|
+
/** Current group nesting; bounded so hostile input cannot exhaust the call stack. */
|
|
1225
|
+
depth = 0;
|
|
1223
1226
|
constructor(tokens) {
|
|
1224
1227
|
this.tokens = tokens;
|
|
1225
1228
|
}
|
|
1229
|
+
nest(parse) {
|
|
1230
|
+
if (++this.depth > MAX_NESTING_DEPTH) {
|
|
1231
|
+
throw new Error(`LaTeX nesting exceeds ${MAX_NESTING_DEPTH} levels`);
|
|
1232
|
+
}
|
|
1233
|
+
try {
|
|
1234
|
+
return parse();
|
|
1235
|
+
} finally {
|
|
1236
|
+
this.depth--;
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1226
1239
|
peek() {
|
|
1227
1240
|
return this.tokens[this.pos];
|
|
1228
1241
|
}
|
|
@@ -1237,6 +1250,9 @@ var LatexParser = class {
|
|
|
1237
1250
|
return tok;
|
|
1238
1251
|
}
|
|
1239
1252
|
parseGroup() {
|
|
1253
|
+
return this.nest(() => this.readGroup());
|
|
1254
|
+
}
|
|
1255
|
+
readGroup() {
|
|
1240
1256
|
this.expect("group_start");
|
|
1241
1257
|
const nodes = [];
|
|
1242
1258
|
while (this.peek() && this.peek().type !== "group_end") {
|
|
@@ -1260,6 +1276,9 @@ var LatexParser = class {
|
|
|
1260
1276
|
}
|
|
1261
1277
|
/** Parse atoms up to and including the closing brace of the current group. */
|
|
1262
1278
|
parseGroupRest() {
|
|
1279
|
+
return this.nest(() => this.readGroupRest());
|
|
1280
|
+
}
|
|
1281
|
+
readGroupRest() {
|
|
1263
1282
|
const nodes = [];
|
|
1264
1283
|
while (this.peek() && this.peek().type !== "group_end") {
|
|
1265
1284
|
const node = this.parseAtom();
|
|
@@ -1278,10 +1297,12 @@ var LatexParser = class {
|
|
|
1278
1297
|
if (this.peek()?.type === "group_start") {
|
|
1279
1298
|
return this.parseGroup();
|
|
1280
1299
|
}
|
|
1281
|
-
this.
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1300
|
+
return this.nest(() => {
|
|
1301
|
+
this.bare = true;
|
|
1302
|
+
const atom = this.parseAtom();
|
|
1303
|
+
this.bare = false;
|
|
1304
|
+
return atom ? [atom] : [];
|
|
1305
|
+
});
|
|
1285
1306
|
}
|
|
1286
1307
|
wrapE(nodes) {
|
|
1287
1308
|
if (nodes.length === 1) {
|
|
@@ -1302,7 +1323,7 @@ var LatexParser = class {
|
|
|
1302
1323
|
return null;
|
|
1303
1324
|
}
|
|
1304
1325
|
if (tok.type === "whitespace") {
|
|
1305
|
-
this.next();
|
|
1326
|
+
while (this.peek()?.type === "whitespace") this.next();
|
|
1306
1327
|
return this.parseAtom();
|
|
1307
1328
|
}
|
|
1308
1329
|
const bare = this.bare;
|
|
@@ -1380,70 +1401,6 @@ function convertLatexToOmml(latex) {
|
|
|
1380
1401
|
};
|
|
1381
1402
|
}
|
|
1382
1403
|
|
|
1383
|
-
// math/omml-color.ts
|
|
1384
|
-
function getOmmlMathColor(node) {
|
|
1385
|
-
if (!node || typeof node !== "object") {
|
|
1386
|
-
return void 0;
|
|
1387
|
-
}
|
|
1388
|
-
const drawingRunProperties = node["a:rPr"];
|
|
1389
|
-
if (drawingRunProperties && typeof drawingRunProperties === "object") {
|
|
1390
|
-
const solidFill = drawingRunProperties["a:solidFill"];
|
|
1391
|
-
const srgbColor = solidFill && typeof solidFill === "object" ? solidFill["a:srgbClr"] : void 0;
|
|
1392
|
-
const value = srgbColor?.["@_val"];
|
|
1393
|
-
if (typeof value === "string" && /^[0-9a-f]{6}$/iu.test(value)) {
|
|
1394
|
-
return `#${value.toUpperCase()}`;
|
|
1395
|
-
}
|
|
1396
|
-
}
|
|
1397
|
-
for (const value of Object.values(node)) {
|
|
1398
|
-
if (Array.isArray(value)) {
|
|
1399
|
-
for (const child2 of value) {
|
|
1400
|
-
if (child2 && typeof child2 === "object") {
|
|
1401
|
-
const color = getOmmlMathColor(child2);
|
|
1402
|
-
if (color) {
|
|
1403
|
-
return color;
|
|
1404
|
-
}
|
|
1405
|
-
}
|
|
1406
|
-
}
|
|
1407
|
-
} else if (value && typeof value === "object") {
|
|
1408
|
-
const color = getOmmlMathColor(value);
|
|
1409
|
-
if (color) {
|
|
1410
|
-
return color;
|
|
1411
|
-
}
|
|
1412
|
-
}
|
|
1413
|
-
}
|
|
1414
|
-
return void 0;
|
|
1415
|
-
}
|
|
1416
|
-
function getOmmlMathFontSize(node) {
|
|
1417
|
-
if (!node || typeof node !== "object") {
|
|
1418
|
-
return void 0;
|
|
1419
|
-
}
|
|
1420
|
-
const drawingRunProperties = node["a:rPr"];
|
|
1421
|
-
if (drawingRunProperties && typeof drawingRunProperties === "object") {
|
|
1422
|
-
const size = Number(drawingRunProperties["@_sz"]);
|
|
1423
|
-
if (Number.isFinite(size) && size > 0) {
|
|
1424
|
-
return size / 100;
|
|
1425
|
-
}
|
|
1426
|
-
}
|
|
1427
|
-
for (const value of Object.values(node)) {
|
|
1428
|
-
if (Array.isArray(value)) {
|
|
1429
|
-
for (const child2 of value) {
|
|
1430
|
-
if (child2 && typeof child2 === "object") {
|
|
1431
|
-
const size = getOmmlMathFontSize(child2);
|
|
1432
|
-
if (size) {
|
|
1433
|
-
return size;
|
|
1434
|
-
}
|
|
1435
|
-
}
|
|
1436
|
-
}
|
|
1437
|
-
} else if (value && typeof value === "object") {
|
|
1438
|
-
const size = getOmmlMathFontSize(value);
|
|
1439
|
-
if (size) {
|
|
1440
|
-
return size;
|
|
1441
|
-
}
|
|
1442
|
-
}
|
|
1443
|
-
}
|
|
1444
|
-
return void 0;
|
|
1445
|
-
}
|
|
1446
|
-
|
|
1447
1404
|
// math/omml-mathml-helpers.ts
|
|
1448
1405
|
function child(node, key) {
|
|
1449
1406
|
if (!node) {
|
|
@@ -1629,13 +1586,722 @@ var DELIM_END_MAP = {
|
|
|
1629
1586
|
"\u230B": "\u230B"
|
|
1630
1587
|
};
|
|
1631
1588
|
|
|
1589
|
+
// math/omml-to-xml.ts
|
|
1590
|
+
var OMML_NAMESPACE = "http://schemas.openxmlformats.org/officeDocument/2006/math";
|
|
1591
|
+
var escapeAttribute = (value) => escapeXml(value).replace(/"/g, """);
|
|
1592
|
+
function element(tag, value) {
|
|
1593
|
+
if (value === void 0 || value === null) return "";
|
|
1594
|
+
if (Array.isArray(value)) return value.map((item) => element(tag, item)).join("");
|
|
1595
|
+
if (typeof value !== "object") {
|
|
1596
|
+
const text = String(value);
|
|
1597
|
+
const space = tag === "m:t" && /^\s|\s$/.test(text) ? ' xml:space="preserve"' : "";
|
|
1598
|
+
return `<${tag}${space}>${escapeXml(text)}</${tag}>`;
|
|
1599
|
+
}
|
|
1600
|
+
const node = value;
|
|
1601
|
+
let attributes = "";
|
|
1602
|
+
let content = "";
|
|
1603
|
+
for (const key of Object.keys(node)) {
|
|
1604
|
+
if (key.startsWith("@_")) {
|
|
1605
|
+
attributes += ` ${tag === "m:t" ? "" : "m:"}${key.slice(2)}="${escapeAttribute(String(node[key]))}"`;
|
|
1606
|
+
} else if (key === "#text") {
|
|
1607
|
+
content += escapeXml(String(node[key]));
|
|
1608
|
+
} else content += element(stripXmlOrderSuffix(key), node[key]);
|
|
1609
|
+
}
|
|
1610
|
+
if (tag === "m:t" && /^\s|\s$/.test(content) && !attributes) attributes = ' xml:space="preserve"';
|
|
1611
|
+
return content ? `<${tag}${attributes}>${content}</${tag}>` : `<${tag}${attributes}/>`;
|
|
1612
|
+
}
|
|
1613
|
+
function ommlToXml(tree) {
|
|
1614
|
+
const markup = Object.keys(tree).map((key) => element(stripXmlOrderSuffix(key), tree[key])).join("");
|
|
1615
|
+
return markup.replace(/^<([\w:]+)/, `<$1 xmlns:m="${OMML_NAMESPACE}"`);
|
|
1616
|
+
}
|
|
1617
|
+
function latexToOmmlXml(latex, display) {
|
|
1618
|
+
const tree = convertLatexToOmml(latex);
|
|
1619
|
+
const para = tree["m:oMathPara"];
|
|
1620
|
+
const math = para?.["m:oMath"];
|
|
1621
|
+
if (!math) return void 0;
|
|
1622
|
+
return ommlToXml(display ? tree : { "m:oMath": math });
|
|
1623
|
+
}
|
|
1624
|
+
|
|
1625
|
+
// math/omml-box.ts
|
|
1626
|
+
var AXIS = 0.25;
|
|
1627
|
+
var emptyBox = () => ({ width: 0, ascent: 0, descent: 0, prims: [] });
|
|
1628
|
+
function scriptStyle(style) {
|
|
1629
|
+
return {
|
|
1630
|
+
...style,
|
|
1631
|
+
level: style.level + 1,
|
|
1632
|
+
size: style.level >= 2 ? style.size : style.size * 0.7
|
|
1633
|
+
};
|
|
1634
|
+
}
|
|
1635
|
+
function shifted(prims, dx, dy) {
|
|
1636
|
+
return prims.map((prim) => {
|
|
1637
|
+
switch (prim.kind) {
|
|
1638
|
+
case "text":
|
|
1639
|
+
return { ...prim, x: prim.x + dx, y: prim.y + dy };
|
|
1640
|
+
case "line":
|
|
1641
|
+
return { ...prim, x1: prim.x1 + dx, x2: prim.x2 + dx, y1: prim.y1 + dy, y2: prim.y2 + dy };
|
|
1642
|
+
case "rect":
|
|
1643
|
+
return { ...prim, x: prim.x + dx, y: prim.y + dy };
|
|
1644
|
+
default:
|
|
1645
|
+
return { ...prim, d: translatePath(prim.d, dx, dy) };
|
|
1646
|
+
}
|
|
1647
|
+
});
|
|
1648
|
+
}
|
|
1649
|
+
function translatePath(d, dx, dy) {
|
|
1650
|
+
return d.replace(
|
|
1651
|
+
/([ML])\s*(-?[\d.]+)[ ,]+(-?[\d.]+)/g,
|
|
1652
|
+
(_m, cmd, x, y) => `${cmd}${round(Number(x) + dx)} ${round(Number(y) + dy)}`
|
|
1653
|
+
);
|
|
1654
|
+
}
|
|
1655
|
+
var round = (value) => Math.round(value * 100) / 100;
|
|
1656
|
+
function row(boxes, gap = 0) {
|
|
1657
|
+
const result = emptyBox();
|
|
1658
|
+
let x = 0;
|
|
1659
|
+
for (const box of boxes) {
|
|
1660
|
+
if (result.prims.length || x > 0) x += gap;
|
|
1661
|
+
result.prims.push(...shifted(box.prims, x, 0));
|
|
1662
|
+
x += box.width;
|
|
1663
|
+
result.ascent = Math.max(result.ascent, box.ascent);
|
|
1664
|
+
result.descent = Math.max(result.descent, box.descent);
|
|
1665
|
+
}
|
|
1666
|
+
result.width = x;
|
|
1667
|
+
return result;
|
|
1668
|
+
}
|
|
1669
|
+
function placed(box, dx, dy) {
|
|
1670
|
+
return {
|
|
1671
|
+
width: box.width,
|
|
1672
|
+
ascent: box.ascent - dy,
|
|
1673
|
+
descent: box.descent + dy,
|
|
1674
|
+
prims: shifted(box.prims, dx, dy)
|
|
1675
|
+
};
|
|
1676
|
+
}
|
|
1677
|
+
function overlay(parts) {
|
|
1678
|
+
const result = emptyBox();
|
|
1679
|
+
for (const { box, x, y } of parts) {
|
|
1680
|
+
result.prims.push(...shifted(box.prims, x, y));
|
|
1681
|
+
result.width = Math.max(result.width, x + box.width);
|
|
1682
|
+
result.ascent = Math.max(result.ascent, box.ascent - y);
|
|
1683
|
+
result.descent = Math.max(result.descent, box.descent + y);
|
|
1684
|
+
}
|
|
1685
|
+
return result;
|
|
1686
|
+
}
|
|
1687
|
+
var RELATIONS = new Set("=\u2260<>\u2264\u2265\u2248\u2261\u226A\u226B\u2208\u2209\u2282\u2283\u2286\u2287\u2192\u2190\u2194\u21D2\u21D0\u21D4\u221D\u2245\u223C\u2243".split(""));
|
|
1688
|
+
var BINARY = new Set("+\u2212-\xD7\xF7\xB7\xB1\u2213\u222A\u2229\u2227\u2228\u2295\u2297\u2218\u2217".split(""));
|
|
1689
|
+
var isRelation = (ch) => RELATIONS.has(ch);
|
|
1690
|
+
var isBinary = (ch) => BINARY.has(ch);
|
|
1691
|
+
function glyphEm(ch, bold) {
|
|
1692
|
+
let em;
|
|
1693
|
+
if (/[iIjl|!.,;:'`]/.test(ch)) em = ch === "I" ? 0.36 : 0.3;
|
|
1694
|
+
else if (/[ftr]/.test(ch)) em = 0.38;
|
|
1695
|
+
else if (/[mwMW@]/.test(ch)) em = ch === "m" ? 0.82 : 0.86;
|
|
1696
|
+
else if (/[A-Z]/.test(ch)) em = 0.66;
|
|
1697
|
+
else if (/[a-z]/.test(ch)) em = 0.52;
|
|
1698
|
+
else if (/[0-9]/.test(ch)) em = 0.5;
|
|
1699
|
+
else if (/[()[\]{}]/.test(ch)) em = 0.34;
|
|
1700
|
+
else if (ch === " ") em = 0.25;
|
|
1701
|
+
else if (isRelation(ch) || isBinary(ch)) em = 0.7;
|
|
1702
|
+
else if (/[Ͱ-Ͽ]/.test(ch)) em = 0.58;
|
|
1703
|
+
else if (/[⺀-鿿-]/.test(ch)) em = 1;
|
|
1704
|
+
else em = 0.6;
|
|
1705
|
+
return bold ? em * 1.08 : em;
|
|
1706
|
+
}
|
|
1707
|
+
var isOn2 = (value) => value === "1" || value === "on" || value === "true";
|
|
1708
|
+
function glyph(text, size, stretch = 1) {
|
|
1709
|
+
const width = Array.from(text).reduce((sum, ch) => sum + glyphEm(ch, false), 0) * size;
|
|
1710
|
+
const box = emptyBox();
|
|
1711
|
+
box.width = width;
|
|
1712
|
+
box.ascent = size * 0.78 * stretch;
|
|
1713
|
+
box.descent = size * 0.22 * stretch;
|
|
1714
|
+
box.prims.push({
|
|
1715
|
+
kind: "text",
|
|
1716
|
+
x: 0,
|
|
1717
|
+
y: 0,
|
|
1718
|
+
text,
|
|
1719
|
+
size,
|
|
1720
|
+
italic: false,
|
|
1721
|
+
bold: false,
|
|
1722
|
+
fit: width,
|
|
1723
|
+
...stretch > 1 ? { stretch } : {}
|
|
1724
|
+
});
|
|
1725
|
+
return box;
|
|
1726
|
+
}
|
|
1727
|
+
function scripts(base, sub, sup, style) {
|
|
1728
|
+
const raise = Math.max(style.size * 0.4, base.ascent - style.size * 0.3);
|
|
1729
|
+
const drop = Math.max(style.size * 0.2, base.descent + style.size * 0.12);
|
|
1730
|
+
const parts = [{ box: base, x: 0, y: 0 }];
|
|
1731
|
+
let width = base.width;
|
|
1732
|
+
if (sup) {
|
|
1733
|
+
const y = -Math.max(raise, sup.descent + style.size * 0.25);
|
|
1734
|
+
parts.push({ box: sup, x: base.width + 1, y });
|
|
1735
|
+
width = Math.max(width, base.width + 1 + sup.width);
|
|
1736
|
+
}
|
|
1737
|
+
if (sub) {
|
|
1738
|
+
const y = Math.max(drop, sub.ascent - style.size * 0.1);
|
|
1739
|
+
parts.push({ box: sub, x: base.width + 1, y });
|
|
1740
|
+
width = Math.max(width, base.width + 1 + sub.width);
|
|
1741
|
+
}
|
|
1742
|
+
const box = overlay(parts);
|
|
1743
|
+
box.width = width;
|
|
1744
|
+
return box;
|
|
1745
|
+
}
|
|
1746
|
+
|
|
1747
|
+
// math/omml-box-grouped.ts
|
|
1748
|
+
var NARY = /* @__PURE__ */ new Set(["\u2211", "\u220F", "\u2210", "\u22C0", "\u22C1", "\u22C2", "\u22C3"]);
|
|
1749
|
+
function nary(node, style, ctx) {
|
|
1750
|
+
const pr = child(node, "m:naryPr");
|
|
1751
|
+
const chr = val(child(pr, "m:chr")) || "\u222B";
|
|
1752
|
+
const big = NARY.has(chr) ? 1.4 : 1.6;
|
|
1753
|
+
const op = glyph(chr, style.size * big);
|
|
1754
|
+
op.ascent = style.size * 0.78 * (big > 1.5 ? 1.5 : 1.25);
|
|
1755
|
+
op.descent = style.size * (big > 1.5 ? 0.55 : 0.4);
|
|
1756
|
+
const limits = (val(child(pr, "m:limLoc")) || (NARY.has(chr) ? "undOvr" : "subSup")) === "undOvr";
|
|
1757
|
+
const sub = isOn2(val(child(pr, "m:subHide"))) ? void 0 : ctx.layout(child(node, "m:sub"), ctx.script(style));
|
|
1758
|
+
const sup = isOn2(val(child(pr, "m:supHide"))) ? void 0 : ctx.layout(child(node, "m:sup"), ctx.script(style));
|
|
1759
|
+
const hasSub = Boolean(sub?.width);
|
|
1760
|
+
const hasSup = Boolean(sup?.width);
|
|
1761
|
+
let head;
|
|
1762
|
+
if (limits && (hasSub || hasSup)) {
|
|
1763
|
+
const width = Math.max(op.width, sub?.width ?? 0, sup?.width ?? 0);
|
|
1764
|
+
const parts = [{ box: op, x: (width - op.width) / 2, y: 0 }];
|
|
1765
|
+
if (hasSup)
|
|
1766
|
+
parts.push({
|
|
1767
|
+
box: sup,
|
|
1768
|
+
x: (width - sup.width) / 2,
|
|
1769
|
+
y: -(op.ascent + sup.descent + style.size * 0.05)
|
|
1770
|
+
});
|
|
1771
|
+
if (hasSub)
|
|
1772
|
+
parts.push({
|
|
1773
|
+
box: sub,
|
|
1774
|
+
x: (width - sub.width) / 2,
|
|
1775
|
+
y: op.descent + sub.ascent + style.size * 0.05
|
|
1776
|
+
});
|
|
1777
|
+
head = overlay(parts);
|
|
1778
|
+
head.width = width;
|
|
1779
|
+
} else head = scripts(op, hasSub ? sub : void 0, hasSup ? sup : void 0, style);
|
|
1780
|
+
const body = ctx.layout(child(node, "m:e"), style);
|
|
1781
|
+
return row([head, body], style.size * 0.12);
|
|
1782
|
+
}
|
|
1783
|
+
var MATCHING_OPEN = {
|
|
1784
|
+
"(": "(",
|
|
1785
|
+
"[": "[",
|
|
1786
|
+
"{": "{",
|
|
1787
|
+
"|": "|",
|
|
1788
|
+
"\u2016": "\u2016",
|
|
1789
|
+
"\u27E8": "\u27E8",
|
|
1790
|
+
"\u2308": "\u2308",
|
|
1791
|
+
"\u230A": "\u230A"
|
|
1792
|
+
};
|
|
1793
|
+
function delimiter(node, style, ctx) {
|
|
1794
|
+
const pr = child(node, "m:dPr");
|
|
1795
|
+
const begin = child(pr, "m:begChr")["@_val"] === void 0 ? "(" : val(child(pr, "m:begChr"));
|
|
1796
|
+
const end = child(pr, "m:endChr")["@_val"] === void 0 ? ")" : val(child(pr, "m:endChr"));
|
|
1797
|
+
const separator = val(child(pr, "m:sepChr")) || "|";
|
|
1798
|
+
const cells = ensureArray(node["m:e"]).map((cell) => ctx.layout(cell, style));
|
|
1799
|
+
const parts = [];
|
|
1800
|
+
cells.forEach((cell, index) => {
|
|
1801
|
+
if (index > 0) parts.push(glyph(separator, style.size));
|
|
1802
|
+
parts.push(cell);
|
|
1803
|
+
});
|
|
1804
|
+
const content = row(parts, style.size * 0.05);
|
|
1805
|
+
const tall = (content.ascent + content.descent) / style.size;
|
|
1806
|
+
const stretch = Math.max(1, tall / 1);
|
|
1807
|
+
const open = begin ? glyph(MATCHING_OPEN[begin] ?? begin, style.size, stretch) : emptyBox();
|
|
1808
|
+
const close = end ? glyph(end, style.size, stretch) : emptyBox();
|
|
1809
|
+
return row([open, content, close], style.size * 0.04);
|
|
1810
|
+
}
|
|
1811
|
+
function matrix(node, style, ctx) {
|
|
1812
|
+
const rows = ensureArray(node["m:mr"]).map(
|
|
1813
|
+
(mr) => ensureArray(mr["m:e"]).map((cell) => ctx.layout(cell, style))
|
|
1814
|
+
);
|
|
1815
|
+
const columns = Math.max(0, ...rows.map((cells) => cells.length));
|
|
1816
|
+
const widths = Array.from(
|
|
1817
|
+
{ length: columns },
|
|
1818
|
+
(_, c) => Math.max(0, ...rows.map((cells) => cells[c]?.width ?? 0))
|
|
1819
|
+
);
|
|
1820
|
+
const gapX = style.size * 0.8;
|
|
1821
|
+
const gapY = style.size * 0.3;
|
|
1822
|
+
const result = emptyBox();
|
|
1823
|
+
let y = 0;
|
|
1824
|
+
const heights = rows.map((cells) => ({
|
|
1825
|
+
a: Math.max(style.size * 0.78, ...cells.map((cell) => cell.ascent)),
|
|
1826
|
+
d: Math.max(style.size * 0.22, ...cells.map((cell) => cell.descent))
|
|
1827
|
+
}));
|
|
1828
|
+
const total = heights.reduce((sum, h) => sum + h.a + h.d, 0) + gapY * Math.max(0, rows.length - 1);
|
|
1829
|
+
y = -(total / 2) + style.size * AXIS;
|
|
1830
|
+
rows.forEach((cells, r) => {
|
|
1831
|
+
const h = heights[r];
|
|
1832
|
+
y += h.a;
|
|
1833
|
+
let x = 0;
|
|
1834
|
+
cells.forEach((cell, c) => {
|
|
1835
|
+
result.prims.push(...shifted(cell.prims, x + (widths[c] - cell.width) / 2, y));
|
|
1836
|
+
x += widths[c] + gapX;
|
|
1837
|
+
});
|
|
1838
|
+
y += h.d + gapY;
|
|
1839
|
+
});
|
|
1840
|
+
result.width = widths.reduce((sum, w) => sum + w, 0) + gapX * Math.max(0, columns - 1);
|
|
1841
|
+
result.ascent = total / 2 + style.size * AXIS;
|
|
1842
|
+
result.descent = total / 2 - style.size * AXIS;
|
|
1843
|
+
return result;
|
|
1844
|
+
}
|
|
1845
|
+
function above(base, mark, style) {
|
|
1846
|
+
const width = Math.max(base.width, mark.width);
|
|
1847
|
+
const box = overlay([
|
|
1848
|
+
{ box: base, x: (width - base.width) / 2, y: 0 },
|
|
1849
|
+
{
|
|
1850
|
+
box: mark,
|
|
1851
|
+
x: (width - mark.width) / 2,
|
|
1852
|
+
y: -(base.ascent + mark.descent + style.size * 0.04)
|
|
1853
|
+
}
|
|
1854
|
+
]);
|
|
1855
|
+
box.width = width;
|
|
1856
|
+
return box;
|
|
1857
|
+
}
|
|
1858
|
+
function below(base, mark, style) {
|
|
1859
|
+
const width = Math.max(base.width, mark.width);
|
|
1860
|
+
const box = overlay([
|
|
1861
|
+
{ box: base, x: (width - base.width) / 2, y: 0 },
|
|
1862
|
+
{ box: mark, x: (width - mark.width) / 2, y: base.descent + mark.ascent + style.size * 0.04 }
|
|
1863
|
+
]);
|
|
1864
|
+
box.width = width;
|
|
1865
|
+
return box;
|
|
1866
|
+
}
|
|
1867
|
+
|
|
1868
|
+
// math/omml-box-structures.ts
|
|
1869
|
+
function fraction(node, style, ctx) {
|
|
1870
|
+
const type = val(child(child(node, "m:fPr"), "m:type"));
|
|
1871
|
+
const inner = ctx.script({ ...style, level: Math.min(style.level, 0) });
|
|
1872
|
+
const small = style.level === 0 ? { ...style, size: style.size * 0.9 } : inner;
|
|
1873
|
+
const num = ctx.layout(child(node, "m:num"), small);
|
|
1874
|
+
const den = ctx.layout(child(node, "m:den"), small);
|
|
1875
|
+
if (type === "lin") {
|
|
1876
|
+
const slash = glyph("/", style.size);
|
|
1877
|
+
return row([num, slash, den]);
|
|
1878
|
+
}
|
|
1879
|
+
const gap = style.size * 0.12;
|
|
1880
|
+
const axis = style.size * AXIS;
|
|
1881
|
+
const width = Math.max(num.width, den.width) + style.size * 0.2;
|
|
1882
|
+
const bar = type === "noBar" ? [] : [
|
|
1883
|
+
{
|
|
1884
|
+
kind: "line",
|
|
1885
|
+
x1: 0,
|
|
1886
|
+
x2: width,
|
|
1887
|
+
y1: -axis,
|
|
1888
|
+
y2: -axis,
|
|
1889
|
+
width: Math.max(0.8, style.size * 0.05)
|
|
1890
|
+
}
|
|
1891
|
+
];
|
|
1892
|
+
const box = overlay([
|
|
1893
|
+
{ box: num, x: (width - num.width) / 2, y: -(axis + gap + num.descent) },
|
|
1894
|
+
{ box: den, x: (width - den.width) / 2, y: -axis + gap + den.ascent }
|
|
1895
|
+
]);
|
|
1896
|
+
box.width = width;
|
|
1897
|
+
box.prims.push(...bar);
|
|
1898
|
+
return box;
|
|
1899
|
+
}
|
|
1900
|
+
function radical(node, style, ctx) {
|
|
1901
|
+
const content = ctx.layout(child(node, "m:e"), style);
|
|
1902
|
+
const hide = isOn2(val(child(child(node, "m:radPr"), "m:degHide")));
|
|
1903
|
+
const degree = hide ? void 0 : ctx.layout(child(node, "m:deg"), { ...ctx.script(ctx.script(style)) });
|
|
1904
|
+
const gap = style.size * 0.12;
|
|
1905
|
+
const top = -(content.ascent + gap);
|
|
1906
|
+
const bottom = content.descent + style.size * 0.05;
|
|
1907
|
+
const height = bottom - top;
|
|
1908
|
+
const sign = style.size * 0.55;
|
|
1909
|
+
const lead = degree && degree.width ? Math.max(0, degree.width - sign * 0.4) : 0;
|
|
1910
|
+
const x0 = lead;
|
|
1911
|
+
const d = `M${round(x0)} ${round(top + height * 0.58)} L${round(x0 + sign * 0.22)} ${round(top + height * 0.52)} L${round(x0 + sign * 0.5)} ${round(bottom)} L${round(x0 + sign)} ${round(top)} L${round(x0 + sign + content.width + style.size * 0.1)} ${round(top)}`;
|
|
1912
|
+
const parts = [{ box: content, x: x0 + sign + style.size * 0.05, y: 0 }];
|
|
1913
|
+
const box = overlay(parts);
|
|
1914
|
+
box.ascent = Math.max(box.ascent, -top);
|
|
1915
|
+
box.descent = Math.max(box.descent, bottom);
|
|
1916
|
+
box.width = x0 + sign + content.width + style.size * 0.15;
|
|
1917
|
+
box.prims.push({ kind: "path", d, width: Math.max(0.8, style.size * 0.06) });
|
|
1918
|
+
if (degree) box.prims.push(...shifted(degree.prims, 0, top + height * 0.35 - degree.descent));
|
|
1919
|
+
return box;
|
|
1920
|
+
}
|
|
1921
|
+
function layoutStructure(tag, node, style, ctx) {
|
|
1922
|
+
const arg2 = (name, next = style) => ctx.layout(child(node, name), next);
|
|
1923
|
+
const small = () => ctx.script(style);
|
|
1924
|
+
switch (tag) {
|
|
1925
|
+
case "m:f":
|
|
1926
|
+
return fraction(node, style, ctx);
|
|
1927
|
+
case "m:rad":
|
|
1928
|
+
return radical(node, style, ctx);
|
|
1929
|
+
case "m:sSup":
|
|
1930
|
+
return scripts(arg2("m:e"), void 0, arg2("m:sup", small()), style);
|
|
1931
|
+
case "m:sSub":
|
|
1932
|
+
return scripts(arg2("m:e"), arg2("m:sub", small()), void 0, style);
|
|
1933
|
+
case "m:sSubSup":
|
|
1934
|
+
return scripts(arg2("m:e"), arg2("m:sub", small()), arg2("m:sup", small()), style);
|
|
1935
|
+
case "m:sPre": {
|
|
1936
|
+
const pre = scripts(emptyBox(), arg2("m:sub", small()), arg2("m:sup", small()), style);
|
|
1937
|
+
return row([pre, arg2("m:e")], 1);
|
|
1938
|
+
}
|
|
1939
|
+
case "m:nary":
|
|
1940
|
+
return nary(node, style, ctx);
|
|
1941
|
+
case "m:d":
|
|
1942
|
+
return delimiter(node, style, ctx);
|
|
1943
|
+
case "m:m":
|
|
1944
|
+
return matrix(node, style, ctx);
|
|
1945
|
+
case "m:acc": {
|
|
1946
|
+
const chr = val(child(child(node, "m:accPr"), "m:chr")) || "\u0302";
|
|
1947
|
+
const mark = glyph(
|
|
1948
|
+
chr === "\u0302" ? "^" : chr === "\u0303" ? "~" : chr === "\u0304" ? "\xAF" : chr,
|
|
1949
|
+
style.size * 0.8
|
|
1950
|
+
);
|
|
1951
|
+
mark.ascent = style.size * 0.2;
|
|
1952
|
+
mark.descent = 0;
|
|
1953
|
+
return above(arg2("m:e"), mark, style);
|
|
1954
|
+
}
|
|
1955
|
+
case "m:bar": {
|
|
1956
|
+
const base = arg2("m:e");
|
|
1957
|
+
const under = val(child(child(node, "m:barPr"), "m:pos")) === "bot";
|
|
1958
|
+
const y = under ? base.descent + style.size * 0.08 : -(base.ascent + style.size * 0.08);
|
|
1959
|
+
const box = overlay([{ box: base, x: 0, y: 0 }]);
|
|
1960
|
+
box.prims.push({
|
|
1961
|
+
kind: "line",
|
|
1962
|
+
x1: 0,
|
|
1963
|
+
x2: base.width,
|
|
1964
|
+
y1: y,
|
|
1965
|
+
y2: y,
|
|
1966
|
+
width: Math.max(0.8, style.size * 0.05)
|
|
1967
|
+
});
|
|
1968
|
+
box.ascent = Math.max(box.ascent, under ? 0 : -y);
|
|
1969
|
+
box.descent = Math.max(box.descent, under ? y : 0);
|
|
1970
|
+
return box;
|
|
1971
|
+
}
|
|
1972
|
+
case "m:limLow":
|
|
1973
|
+
return below(arg2("m:e"), arg2("m:lim", small()), style);
|
|
1974
|
+
case "m:limUpp":
|
|
1975
|
+
return above(arg2("m:e"), arg2("m:lim", small()), style);
|
|
1976
|
+
case "m:groupChr": {
|
|
1977
|
+
const pr = child(node, "m:groupChrPr");
|
|
1978
|
+
const mark = glyph(val(child(pr, "m:chr")) || "\u23DF", style.size);
|
|
1979
|
+
mark.ascent = style.size * 0.2;
|
|
1980
|
+
mark.descent = style.size * 0.1;
|
|
1981
|
+
return val(child(pr, "m:pos")) === "top" ? above(arg2("m:e"), mark, style) : below(arg2("m:e"), mark, style);
|
|
1982
|
+
}
|
|
1983
|
+
case "m:eqArr": {
|
|
1984
|
+
const lines = ensureArray(node["m:e"]).map((line) => ctx.layout(line, style));
|
|
1985
|
+
const result = emptyBox();
|
|
1986
|
+
const gap = style.size * 0.25;
|
|
1987
|
+
const total = lines.reduce((sum, line) => sum + line.ascent + line.descent, 0) + gap * Math.max(0, lines.length - 1);
|
|
1988
|
+
let y = -(total / 2) + style.size * AXIS;
|
|
1989
|
+
for (const line of lines) {
|
|
1990
|
+
y += line.ascent;
|
|
1991
|
+
result.prims.push(...shifted(line.prims, 0, y));
|
|
1992
|
+
result.width = Math.max(result.width, line.width);
|
|
1993
|
+
y += line.descent + gap;
|
|
1994
|
+
}
|
|
1995
|
+
result.ascent = total / 2 + style.size * AXIS;
|
|
1996
|
+
result.descent = total / 2 - style.size * AXIS;
|
|
1997
|
+
return result;
|
|
1998
|
+
}
|
|
1999
|
+
case "m:func": {
|
|
2000
|
+
const name = arg2("m:fName", { ...style, plain: true });
|
|
2001
|
+
return row([name, arg2("m:e")], style.size * 0.17);
|
|
2002
|
+
}
|
|
2003
|
+
case "m:borderBox": {
|
|
2004
|
+
const inner = arg2("m:e");
|
|
2005
|
+
const pad = style.size * 0.15;
|
|
2006
|
+
const box = placed(inner, pad, 0);
|
|
2007
|
+
box.width = inner.width + pad * 2;
|
|
2008
|
+
box.ascent += pad;
|
|
2009
|
+
box.descent += pad;
|
|
2010
|
+
box.prims.push({
|
|
2011
|
+
kind: "rect",
|
|
2012
|
+
x: 0,
|
|
2013
|
+
y: -box.ascent,
|
|
2014
|
+
w: box.width,
|
|
2015
|
+
h: box.ascent + box.descent,
|
|
2016
|
+
width: 0.8
|
|
2017
|
+
});
|
|
2018
|
+
return box;
|
|
2019
|
+
}
|
|
2020
|
+
case "m:box":
|
|
2021
|
+
case "m:phant":
|
|
2022
|
+
return arg2("m:e");
|
|
2023
|
+
default:
|
|
2024
|
+
return ctx.layout(node, style);
|
|
2025
|
+
}
|
|
2026
|
+
}
|
|
2027
|
+
|
|
2028
|
+
// math/omml-box-layout.ts
|
|
2029
|
+
var isOn3 = (value) => value === "1" || value === "on" || value === "true";
|
|
2030
|
+
var isUnaryContext = (ch) => isRelation(ch) || isBinary(ch) || /[([{,;:]/.test(ch);
|
|
2031
|
+
function lastCharOf(node) {
|
|
2032
|
+
const text = readText(node);
|
|
2033
|
+
return text ? Array.from(text).at(-1) ?? "" : "";
|
|
2034
|
+
}
|
|
2035
|
+
function layoutRun(node, style, atStart) {
|
|
2036
|
+
const text = readText(node);
|
|
2037
|
+
if (!text) return emptyBox();
|
|
2038
|
+
const rPr = child(node, "m:rPr");
|
|
2039
|
+
const sty = val(child(rPr, "m:sty"));
|
|
2040
|
+
const plain = style.plain || isOn3(val(child(rPr, "m:nor"))) || sty === "p" || sty === "b";
|
|
2041
|
+
const bold = Boolean(style.bold) || sty === "b" || sty === "bi";
|
|
2042
|
+
const boxes = [];
|
|
2043
|
+
let index = 0;
|
|
2044
|
+
let previous = atStart ? "(" : "x";
|
|
2045
|
+
for (const raw of Array.from(text)) {
|
|
2046
|
+
const ch = raw === "-" ? "\u2212" : raw;
|
|
2047
|
+
const italic = !plain && /[A-Za-zα-ω]/.test(ch);
|
|
2048
|
+
const unary = index === 0 ? atStart : isUnaryContext(previous);
|
|
2049
|
+
const spaced = style.level > 0 ? 0 : isRelation(ch) ? 0.28 : isBinary(ch) && !unary ? 0.22 : 0;
|
|
2050
|
+
previous = ch;
|
|
2051
|
+
const width = glyphEm(ch, bold) * style.size;
|
|
2052
|
+
const pad = spaced * style.size;
|
|
2053
|
+
const box = emptyBox();
|
|
2054
|
+
box.width = width + pad * 2;
|
|
2055
|
+
box.ascent = style.size * 0.78;
|
|
2056
|
+
box.descent = style.size * 0.22;
|
|
2057
|
+
if (ch !== " " || width)
|
|
2058
|
+
box.prims.push({
|
|
2059
|
+
kind: "text",
|
|
2060
|
+
x: pad,
|
|
2061
|
+
y: 0,
|
|
2062
|
+
text: ch,
|
|
2063
|
+
size: style.size,
|
|
2064
|
+
italic,
|
|
2065
|
+
bold,
|
|
2066
|
+
fit: width
|
|
2067
|
+
});
|
|
2068
|
+
boxes.push(box);
|
|
2069
|
+
index++;
|
|
2070
|
+
}
|
|
2071
|
+
return mergeText(row(boxes));
|
|
2072
|
+
}
|
|
2073
|
+
function mergeText(box) {
|
|
2074
|
+
const merged = [];
|
|
2075
|
+
for (const prim of box.prims) {
|
|
2076
|
+
const last = merged.at(-1);
|
|
2077
|
+
if (prim.kind === "text" && last?.kind === "text" && last.italic === prim.italic && last.bold === prim.bold && last.size === prim.size && last.y === prim.y && Math.abs(last.x + last.fit - prim.x) < 0.01)
|
|
2078
|
+
merged[merged.length - 1] = {
|
|
2079
|
+
...last,
|
|
2080
|
+
text: last.text + prim.text,
|
|
2081
|
+
fit: last.fit + prim.fit
|
|
2082
|
+
};
|
|
2083
|
+
else merged.push(prim);
|
|
2084
|
+
}
|
|
2085
|
+
return { ...box, prims: merged };
|
|
2086
|
+
}
|
|
2087
|
+
function layoutChildren(node, style) {
|
|
2088
|
+
const boxes = [];
|
|
2089
|
+
let last = "";
|
|
2090
|
+
for (const key of Object.keys(node)) {
|
|
2091
|
+
if (key.startsWith("@_") || key === "#text") continue;
|
|
2092
|
+
const tag = stripXmlOrderSuffix(key);
|
|
2093
|
+
for (const item of ensureArray(node[key])) {
|
|
2094
|
+
const atStart = boxes.length === 0 || last !== "" && isUnaryContext(last);
|
|
2095
|
+
boxes.push(layoutElement(tag, item, style, atStart));
|
|
2096
|
+
last = tag === "m:r" ? lastCharOf(item) : "";
|
|
2097
|
+
}
|
|
2098
|
+
}
|
|
2099
|
+
return row(boxes);
|
|
2100
|
+
}
|
|
2101
|
+
function layoutElement(tag, node, style, atStart) {
|
|
2102
|
+
if (tag === "m:r") return layoutRun(node, style, atStart);
|
|
2103
|
+
if (tag === "m:oMath" || tag === "m:oMathPara") return layoutChildren(node, style);
|
|
2104
|
+
if (/Pr$/.test(tag) || tag === "m:ctrlPr") return emptyBox();
|
|
2105
|
+
return layoutStructure(tag, node, style, { layout: layoutChildren, script: scriptStyle });
|
|
2106
|
+
}
|
|
2107
|
+
function layoutEquation(root, sizePx) {
|
|
2108
|
+
const box = layoutChildren(root, { level: 0, size: sizePx });
|
|
2109
|
+
const pad = 1;
|
|
2110
|
+
const ascent = Math.max(box.ascent, sizePx * 0.78) + pad;
|
|
2111
|
+
const descent = Math.max(box.descent, sizePx * 0.22) + pad;
|
|
2112
|
+
return {
|
|
2113
|
+
box: { ...box, prims: shifted(box.prims, pad, 0), ascent, descent },
|
|
2114
|
+
widthPx: round(Math.max(box.width, sizePx * 0.5) + pad * 2),
|
|
2115
|
+
heightPx: round(ascent + descent),
|
|
2116
|
+
descentPx: round(descent)
|
|
2117
|
+
};
|
|
2118
|
+
}
|
|
2119
|
+
var DEFAULT_XML_LIMITS = {
|
|
2120
|
+
maxDepth: 512,
|
|
2121
|
+
maxNodes: 5e6
|
|
2122
|
+
};
|
|
2123
|
+
var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
|
|
2124
|
+
function checkXmlLimits(xml, label, limits = {}) {
|
|
2125
|
+
const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
|
|
2126
|
+
const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
|
|
2127
|
+
let depth = 0;
|
|
2128
|
+
let nodes = 0;
|
|
2129
|
+
for (const match of xml.matchAll(MARKUP_RE)) {
|
|
2130
|
+
const [, closing, name, selfClosing] = match;
|
|
2131
|
+
if (name === void 0) continue;
|
|
2132
|
+
if (closing) {
|
|
2133
|
+
depth--;
|
|
2134
|
+
continue;
|
|
2135
|
+
}
|
|
2136
|
+
nodes++;
|
|
2137
|
+
if (nodes > maxNodes) throw new Error(`${label} XML exceeds the limit of ${maxNodes} elements`);
|
|
2138
|
+
if (!selfClosing && ++depth > maxDepth)
|
|
2139
|
+
throw new Error(`${label} XML exceeds the nesting depth limit of ${maxDepth}`);
|
|
2140
|
+
}
|
|
2141
|
+
}
|
|
2142
|
+
function parseXml(xml, options = {}) {
|
|
2143
|
+
const label = options.label ?? "OOXML";
|
|
2144
|
+
if (/<!DOCTYPE|<!ENTITY/i.test(xml))
|
|
2145
|
+
throw new Error(`${label} XML with DTD or entity declarations is not supported`);
|
|
2146
|
+
checkXmlLimits(xml, label, options.limits);
|
|
2147
|
+
let parseError = "";
|
|
2148
|
+
let parsed;
|
|
2149
|
+
try {
|
|
2150
|
+
parsed = new DOMParser({
|
|
2151
|
+
onError: (level, message) => {
|
|
2152
|
+
if (level !== "warning") parseError = message;
|
|
2153
|
+
}
|
|
2154
|
+
}).parseFromString(xml, "application/xml");
|
|
2155
|
+
} catch (error) {
|
|
2156
|
+
throw new Error(
|
|
2157
|
+
`Invalid ${label} XML: ${error instanceof Error ? error.message : String(error)}`,
|
|
2158
|
+
{ cause: error }
|
|
2159
|
+
);
|
|
2160
|
+
}
|
|
2161
|
+
if (parseError || !parsed.documentElement)
|
|
2162
|
+
throw new Error(`Invalid ${label} XML: ${parseError || "missing root element"}`);
|
|
2163
|
+
return parsed;
|
|
2164
|
+
}
|
|
2165
|
+
var isElement = (node) => node.nodeType === 1;
|
|
2166
|
+
var elements = (parent) => Array.from(parent.childNodes).filter(isElement);
|
|
2167
|
+
|
|
2168
|
+
// math/omml-dom.ts
|
|
2169
|
+
var PREFIXES = {
|
|
2170
|
+
"http://schemas.openxmlformats.org/officeDocument/2006/math": "m",
|
|
2171
|
+
"http://purl.oclc.org/ooxml/officeDocument/math": "m",
|
|
2172
|
+
"http://schemas.openxmlformats.org/drawingml/2006/main": "a",
|
|
2173
|
+
"http://schemas.openxmlformats.org/wordprocessingml/2006/main": "w"
|
|
2174
|
+
};
|
|
2175
|
+
var MAX_DEPTH = 512;
|
|
2176
|
+
function ommlFromElement(element2) {
|
|
2177
|
+
const visit = (node, depth) => {
|
|
2178
|
+
if (depth > MAX_DEPTH) throw new Error(`OMML nesting exceeds ${MAX_DEPTH} levels`);
|
|
2179
|
+
const prefix = PREFIXES[node.namespaceURI ?? ""];
|
|
2180
|
+
const name = prefix ? `${prefix}:${node.localName}` : node.tagName;
|
|
2181
|
+
const body = mergeSiblings(elements(node).map((child2) => visit(child2, depth + 1)));
|
|
2182
|
+
for (const attribute of Array.from(node.attributes)) {
|
|
2183
|
+
if (attribute.namespaceURI === "http://www.w3.org/2000/xmlns/") continue;
|
|
2184
|
+
body[`@_${attribute.localName}`] = attribute.value;
|
|
2185
|
+
}
|
|
2186
|
+
const text = Array.from(node.childNodes).filter((child2) => child2.nodeType === 3 || child2.nodeType === 4).map((child2) => child2.nodeValue ?? "").join("");
|
|
2187
|
+
if (text && (!elements(node).length || text.trim())) body["#text"] = text;
|
|
2188
|
+
return { [name]: body };
|
|
2189
|
+
};
|
|
2190
|
+
return visit(element2, 1);
|
|
2191
|
+
}
|
|
2192
|
+
function parseOmml(xml) {
|
|
2193
|
+
return ommlFromElement(parseXml(xml, { label: "OMML" }).documentElement);
|
|
2194
|
+
}
|
|
2195
|
+
|
|
2196
|
+
// math/omml-svg.ts
|
|
2197
|
+
var FONT_FAMILY = "'Cambria Math','STIX Two Math','Latin Modern Math','Times New Roman',serif";
|
|
2198
|
+
function primMarkup(prim) {
|
|
2199
|
+
switch (prim.kind) {
|
|
2200
|
+
case "text": {
|
|
2201
|
+
const attrs = [
|
|
2202
|
+
`font-size="${round(prim.size)}"`,
|
|
2203
|
+
prim.italic ? 'font-style="italic"' : "",
|
|
2204
|
+
prim.bold ? 'font-weight="bold"' : "",
|
|
2205
|
+
Array.from(prim.text).length > 1 ? `textLength="${round(prim.fit)}" lengthAdjust="spacing"` : ""
|
|
2206
|
+
].filter(Boolean);
|
|
2207
|
+
const at = prim.stretch ? `transform="translate(${round(prim.x)} ${round(prim.y)}) scale(1 ${round(prim.stretch)})"` : `x="${round(prim.x)}" y="${round(prim.y)}"`;
|
|
2208
|
+
return `<text ${at} ${attrs.join(" ")}>${escapeXml(prim.text)}</text>`;
|
|
2209
|
+
}
|
|
2210
|
+
case "line":
|
|
2211
|
+
return `<line x1="${round(prim.x1)}" y1="${round(prim.y1)}" x2="${round(prim.x2)}" y2="${round(prim.y2)}" stroke="currentColor" stroke-width="${round(prim.width)}"/>`;
|
|
2212
|
+
case "rect":
|
|
2213
|
+
return `<rect x="${round(prim.x)}" y="${round(prim.y)}" width="${round(prim.w)}" height="${round(prim.h)}" fill="none" stroke="currentColor" stroke-width="${round(prim.width)}"/>`;
|
|
2214
|
+
default:
|
|
2215
|
+
return `<path d="${prim.d}" fill="none" stroke="currentColor" stroke-width="${round(prim.width)}" stroke-linejoin="round"/>`;
|
|
2216
|
+
}
|
|
2217
|
+
}
|
|
2218
|
+
function drawOmmlTree(root, sizePx, label = "") {
|
|
2219
|
+
const { box, widthPx, heightPx, descentPx } = layoutEquation(root, sizePx);
|
|
2220
|
+
if (!box.prims.length) return void 0;
|
|
2221
|
+
const body = box.prims.map(primMarkup).join("");
|
|
2222
|
+
const aria = label ? ` aria-label="${escapeXml(label).replace(/"/g, """)}"` : "";
|
|
2223
|
+
const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${widthPx}" height="${heightPx}" viewBox="0 0 ${widthPx} ${heightPx}" role="img"${aria}><g font-family="${FONT_FAMILY}" fill="currentColor" transform="translate(0 ${round(box.ascent)})">${body}</g></svg>`;
|
|
2224
|
+
return { svg, widthPx, heightPx, descentPx };
|
|
2225
|
+
}
|
|
2226
|
+
function drawEquation(omml, sizePx, label = "") {
|
|
2227
|
+
try {
|
|
2228
|
+
return drawOmmlTree(parseOmml(omml), sizePx, label);
|
|
2229
|
+
} catch {
|
|
2230
|
+
return void 0;
|
|
2231
|
+
}
|
|
2232
|
+
}
|
|
2233
|
+
|
|
2234
|
+
// math/omml-color.ts
|
|
2235
|
+
function getOmmlMathColor(node) {
|
|
2236
|
+
if (!node || typeof node !== "object") {
|
|
2237
|
+
return void 0;
|
|
2238
|
+
}
|
|
2239
|
+
const drawingRunProperties = node["a:rPr"];
|
|
2240
|
+
if (drawingRunProperties && typeof drawingRunProperties === "object") {
|
|
2241
|
+
const solidFill = drawingRunProperties["a:solidFill"];
|
|
2242
|
+
const srgbColor = solidFill && typeof solidFill === "object" ? solidFill["a:srgbClr"] : void 0;
|
|
2243
|
+
const value = srgbColor?.["@_val"];
|
|
2244
|
+
if (typeof value === "string" && /^[0-9a-f]{6}$/iu.test(value)) {
|
|
2245
|
+
return `#${value.toUpperCase()}`;
|
|
2246
|
+
}
|
|
2247
|
+
}
|
|
2248
|
+
for (const value of Object.values(node)) {
|
|
2249
|
+
if (Array.isArray(value)) {
|
|
2250
|
+
for (const child2 of value) {
|
|
2251
|
+
if (child2 && typeof child2 === "object") {
|
|
2252
|
+
const color = getOmmlMathColor(child2);
|
|
2253
|
+
if (color) {
|
|
2254
|
+
return color;
|
|
2255
|
+
}
|
|
2256
|
+
}
|
|
2257
|
+
}
|
|
2258
|
+
} else if (value && typeof value === "object") {
|
|
2259
|
+
const color = getOmmlMathColor(value);
|
|
2260
|
+
if (color) {
|
|
2261
|
+
return color;
|
|
2262
|
+
}
|
|
2263
|
+
}
|
|
2264
|
+
}
|
|
2265
|
+
return void 0;
|
|
2266
|
+
}
|
|
2267
|
+
function getOmmlMathFontSize(node) {
|
|
2268
|
+
if (!node || typeof node !== "object") {
|
|
2269
|
+
return void 0;
|
|
2270
|
+
}
|
|
2271
|
+
const drawingRunProperties = node["a:rPr"];
|
|
2272
|
+
if (drawingRunProperties && typeof drawingRunProperties === "object") {
|
|
2273
|
+
const size = Number(drawingRunProperties["@_sz"]);
|
|
2274
|
+
if (Number.isFinite(size) && size > 0) {
|
|
2275
|
+
return size / 100;
|
|
2276
|
+
}
|
|
2277
|
+
}
|
|
2278
|
+
for (const value of Object.values(node)) {
|
|
2279
|
+
if (Array.isArray(value)) {
|
|
2280
|
+
for (const child2 of value) {
|
|
2281
|
+
if (child2 && typeof child2 === "object") {
|
|
2282
|
+
const size = getOmmlMathFontSize(child2);
|
|
2283
|
+
if (size) {
|
|
2284
|
+
return size;
|
|
2285
|
+
}
|
|
2286
|
+
}
|
|
2287
|
+
}
|
|
2288
|
+
} else if (value && typeof value === "object") {
|
|
2289
|
+
const size = getOmmlMathFontSize(value);
|
|
2290
|
+
if (size) {
|
|
2291
|
+
return size;
|
|
2292
|
+
}
|
|
2293
|
+
}
|
|
2294
|
+
}
|
|
2295
|
+
return void 0;
|
|
2296
|
+
}
|
|
2297
|
+
|
|
1632
2298
|
// math/omml-mathml-converters.ts
|
|
1633
2299
|
function convertRun(node) {
|
|
1634
2300
|
const text = readText(node);
|
|
1635
2301
|
if (text.length === 0) {
|
|
1636
2302
|
return "";
|
|
1637
2303
|
}
|
|
1638
|
-
const escaped = escapeXml(text);
|
|
2304
|
+
const escaped = escapeXml(text === "-" ? "\u2212" : text);
|
|
1639
2305
|
const rPr = child(node, "m:rPr");
|
|
1640
2306
|
const norVal = val(child(rPr, "m:nor"));
|
|
1641
2307
|
const isNormal = norVal === "1" || norVal === "on" || norVal === "true";
|
|
@@ -1756,8 +2422,8 @@ function convertDelimiter(node, cc) {
|
|
|
1756
2422
|
function convertMatrix(node, cc) {
|
|
1757
2423
|
const rows = ensureArray(node["m:mr"]);
|
|
1758
2424
|
const tableRows = [];
|
|
1759
|
-
for (const
|
|
1760
|
-
const cells = ensureArray(
|
|
2425
|
+
for (const row2 of rows) {
|
|
2426
|
+
const cells = ensureArray(row2["m:e"]);
|
|
1761
2427
|
const tdParts = [];
|
|
1762
2428
|
for (const cell of cells) {
|
|
1763
2429
|
tdParts.push(`<mtd><mrow>${cc(cell)}</mrow></mtd>`);
|
|
@@ -1932,55 +2598,21 @@ function ommlToMathml(omml) {
|
|
|
1932
2598
|
}
|
|
1933
2599
|
return convertOmmlToMathMl(omml);
|
|
1934
2600
|
}
|
|
1935
|
-
function parseXml(xml, options = {}) {
|
|
1936
|
-
const label = options.label ?? "OOXML";
|
|
1937
|
-
if (/<!DOCTYPE|<!ENTITY/i.test(xml))
|
|
1938
|
-
throw new Error(`${label} XML with DTD or entity declarations is not supported`);
|
|
1939
|
-
let parseError = "";
|
|
1940
|
-
let parsed;
|
|
1941
|
-
try {
|
|
1942
|
-
parsed = new DOMParser({
|
|
1943
|
-
onError: (level, message) => {
|
|
1944
|
-
if (level !== "warning") parseError = message;
|
|
1945
|
-
}
|
|
1946
|
-
}).parseFromString(xml, "application/xml");
|
|
1947
|
-
} catch (error) {
|
|
1948
|
-
throw new Error(
|
|
1949
|
-
`Invalid ${label} XML: ${error instanceof Error ? error.message : String(error)}`,
|
|
1950
|
-
{ cause: error }
|
|
1951
|
-
);
|
|
1952
|
-
}
|
|
1953
|
-
if (parseError || !parsed.documentElement)
|
|
1954
|
-
throw new Error(`Invalid ${label} XML: ${parseError || "missing root element"}`);
|
|
1955
|
-
return parsed;
|
|
1956
|
-
}
|
|
1957
|
-
var isElement = (node) => node.nodeType === 1;
|
|
1958
|
-
var elements = (parent) => Array.from(parent.childNodes).filter(isElement);
|
|
1959
2601
|
|
|
1960
|
-
// math/
|
|
1961
|
-
var
|
|
1962
|
-
"
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
}
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
}
|
|
1976
|
-
const text = Array.from(node.childNodes).filter((child2) => child2.nodeType === 3 || child2.nodeType === 4).map((child2) => child2.nodeValue ?? "").join("");
|
|
1977
|
-
if (text && (!elements(node).length || text.trim())) body["#text"] = text;
|
|
1978
|
-
return { [name]: body };
|
|
1979
|
-
};
|
|
1980
|
-
return visit(element);
|
|
1981
|
-
}
|
|
1982
|
-
function parseOmml(xml) {
|
|
1983
|
-
return ommlFromElement(parseXml(xml, { label: "OMML" }).documentElement);
|
|
1984
|
-
}
|
|
2602
|
+
// math/equation-gallery.ts
|
|
2603
|
+
var EQUATION_GALLERY = [
|
|
2604
|
+
{ id: "area", name: "Area of Circle", latex: "A = \\pi r^{2}" },
|
|
2605
|
+
{
|
|
2606
|
+
id: "quadratic",
|
|
2607
|
+
name: "Quadratic Formula",
|
|
2608
|
+
latex: "x = \\frac{-b \\pm \\sqrt{b^{2} - 4ac}}{2a}"
|
|
2609
|
+
},
|
|
2610
|
+
{ id: "pythagorean", name: "Pythagorean Theorem", latex: "a^{2} + b^{2} = c^{2}" },
|
|
2611
|
+
{
|
|
2612
|
+
id: "binomial",
|
|
2613
|
+
name: "Binomial Theorem",
|
|
2614
|
+
latex: "(x + a)^{n} = \\sum_{k=0}^{n} \\binom{n}{k} x^{k} a^{n-k}"
|
|
2615
|
+
}
|
|
2616
|
+
];
|
|
1985
2617
|
|
|
1986
|
-
export { ACCENT_ALIASES, ACCENT_MAP, DELIM_MAP, EQARR_ENVS, ESCAPE_MAP, FUNC_NAMES, GREEK_MAP, LIMIT_FUNC_NAMES, MATRIX_ENVS, NARY_MAP, OPERATOR_MAP, REVERSE_ACCENT, REVERSE_DELIM, REVERSE_ESCAPE, REVERSE_GREEK, REVERSE_NARY, REVERSE_OPERATOR, applyScripts, attrVal, buildPrescript, childNode, collectText, contentKeys, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, delimiterToLatex, ensureArr, eqArrToLatex, escapeChar, escapeMathText, escapeTextArgument, getOmmlMathColor, getOmmlMathFontSize, hasAttr, isOn, isSingleAtom, matrixToLatex, mergeSiblings, naryToLatex, ommlFromElement, ommlToMathml, parseAccent, parseBar, parseBoxed, parseCommand, parseDelimiter, parseEnvironment, parseFuncApplication, parseGroupChr, parseNary, parseOmml, parseOperatorName, parsePhantom, parsePrescript, parseScriptArgs, parseTextArgument, parseUnderOverset, readRunText, rowsToLatex, soleChild, tokenize, tryParseScripts, wrapDelimited };
|
|
2618
|
+
export { ACCENT_ALIASES, ACCENT_MAP, DELIM_MAP, EQARR_ENVS, EQUATION_GALLERY, ESCAPE_MAP, FUNC_NAMES, GREEK_MAP, LIMIT_FUNC_NAMES, MATRIX_ENVS, NARY_MAP, OMML_NAMESPACE, OPERATOR_MAP, REVERSE_ACCENT, REVERSE_DELIM, REVERSE_ESCAPE, REVERSE_GREEK, REVERSE_NARY, REVERSE_OPERATOR, applyScripts, attrVal, buildPrescript, childNode, collectText, contentKeys, convertLatexToOmml, convertOmmlToLatex, convertOmmlToMathMl, delimiterToLatex, drawEquation, drawOmmlTree, ensureArr, eqArrToLatex, escapeChar, escapeMathText, escapeTextArgument, getOmmlMathColor, getOmmlMathFontSize, hasAttr, isOn, isSingleAtom, latexToOmmlXml, matrixToLatex, mergeSiblings, naryToLatex, ommlFromElement, ommlToMathml, ommlToXml, parseAccent, parseBar, parseBoxed, parseCommand, parseDelimiter, parseEnvironment, parseFuncApplication, parseGroupChr, parseNary, parseOmml, parseOperatorName, parsePhantom, parsePrescript, parseScriptArgs, parseTextArgument, parseUnderOverset, readRunText, rowsToLatex, soleChild, tokenize, tryParseScripts, wrapDelimited };
|