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.
Files changed (216) hide show
  1. package/README.md +84 -44
  2. package/dist/{blr-types-CYYC3yYU.d.cts → blr-types-DVgO1DQ9.d.cts} +1 -1
  3. package/dist/{blr-types-CYYC3yYU.d.ts → blr-types-DVgO1DQ9.d.ts} +1 -1
  4. package/dist/convert/capability.cjs +1 -0
  5. package/dist/convert/capability.d.cts +1 -1
  6. package/dist/convert/capability.d.ts +1 -1
  7. package/dist/convert/capability.js +1 -0
  8. package/dist/convert/convert.cjs +29 -27
  9. package/dist/convert/convert.d.cts +9 -3
  10. package/dist/convert/convert.d.ts +9 -3
  11. package/dist/convert/convert.js +29 -27
  12. package/dist/edit/docx/content.cjs +75 -13
  13. package/dist/edit/docx/content.d.cts +8 -2
  14. package/dist/edit/docx/content.d.ts +8 -2
  15. package/dist/edit/docx/content.js +75 -13
  16. package/dist/edit/docx/paragraph.cjs +14 -0
  17. package/dist/edit/docx/paragraph.d.cts +5 -0
  18. package/dist/edit/docx/paragraph.d.ts +5 -0
  19. package/dist/edit/docx/paragraph.js +14 -0
  20. package/dist/edit/docx/run.cjs +1 -1
  21. package/dist/edit/docx/run.js +1 -1
  22. package/dist/edit/docx/table.cjs +41 -0
  23. package/dist/edit/docx/table.d.cts +7 -1
  24. package/dist/edit/docx/table.d.ts +7 -1
  25. package/dist/edit/docx/table.js +42 -1
  26. package/dist/edit/geometry.cjs +38 -0
  27. package/dist/edit/geometry.d.cts +7 -0
  28. package/dist/edit/geometry.d.ts +7 -0
  29. package/dist/edit/geometry.js +36 -0
  30. package/dist/edit/odg/content.cjs +15 -12
  31. package/dist/edit/odg/content.js +15 -12
  32. package/dist/edit/odg/editor.d.cts +1 -1
  33. package/dist/edit/odg/editor.d.ts +1 -1
  34. package/dist/edit/odg/page.d.cts +3 -3
  35. package/dist/edit/odg/page.d.ts +3 -3
  36. package/dist/edit/odg/vector.cjs +22 -13
  37. package/dist/edit/odg/vector.d.cts +1 -1
  38. package/dist/edit/odg/vector.d.ts +1 -1
  39. package/dist/edit/odg/vector.js +23 -14
  40. package/dist/edit/odp/content.cjs +15 -0
  41. package/dist/edit/odp/content.js +16 -1
  42. package/dist/edit/odp/editor.d.cts +1 -1
  43. package/dist/edit/odp/editor.d.ts +1 -1
  44. package/dist/edit/odp/image.d.cts +1 -1
  45. package/dist/edit/odp/image.d.ts +1 -1
  46. package/dist/edit/odp/shape.cjs +11 -30
  47. package/dist/edit/odp/shape.d.cts +2 -2
  48. package/dist/edit/odp/shape.d.ts +2 -2
  49. package/dist/edit/odp/shape.js +13 -33
  50. package/dist/edit/odp/slide.cjs +11 -0
  51. package/dist/edit/odp/slide.d.cts +14 -4
  52. package/dist/edit/odp/slide.d.ts +14 -4
  53. package/dist/edit/odp/slide.js +12 -1
  54. package/dist/edit/odt/content.cjs +56 -16
  55. package/dist/edit/odt/content.d.cts +4 -2
  56. package/dist/edit/odt/content.d.ts +4 -2
  57. package/dist/edit/odt/content.js +56 -17
  58. package/dist/edit/odt/editor.d.cts +1 -1
  59. package/dist/edit/odt/editor.d.ts +1 -1
  60. package/dist/edit/odt/table.cjs +36 -0
  61. package/dist/edit/odt/table.d.cts +1 -36
  62. package/dist/edit/odt/table.d.ts +1 -36
  63. package/dist/edit/odt/table.js +37 -1
  64. package/dist/edit/pptx/content.cjs +71 -3
  65. package/dist/edit/pptx/content.js +71 -3
  66. package/dist/edit/pptx/editor.d.cts +1 -1
  67. package/dist/edit/pptx/editor.d.ts +1 -1
  68. package/dist/edit/pptx/image.d.cts +1 -1
  69. package/dist/edit/pptx/image.d.ts +1 -1
  70. package/dist/edit/pptx/shape.cjs +23 -1
  71. package/dist/edit/pptx/shape.d.cts +2 -2
  72. package/dist/edit/pptx/shape.d.ts +2 -2
  73. package/dist/edit/pptx/shape.js +23 -3
  74. package/dist/edit/pptx/slide.cjs +10 -1
  75. package/dist/edit/pptx/slide.d.cts +11 -4
  76. package/dist/edit/pptx/slide.d.ts +11 -4
  77. package/dist/edit/pptx/slide.js +10 -1
  78. package/dist/edit/pptx/table.cjs +136 -0
  79. package/dist/edit/pptx/table.d.cts +2 -0
  80. package/dist/edit/pptx/table.d.ts +2 -0
  81. package/dist/edit/pptx/table.js +131 -0
  82. package/dist/firebird/backup.d.cts +1 -1
  83. package/dist/firebird/backup.d.ts +1 -1
  84. package/dist/firebird/blr-types.cjs +2 -2
  85. package/dist/firebird/blr-types.d.cts +1 -1
  86. package/dist/firebird/blr-types.d.ts +1 -1
  87. package/dist/firebird/blr-types.js +2 -2
  88. package/dist/firebird/data.cjs +68 -14
  89. package/dist/firebird/data.d.cts +1 -1
  90. package/dist/firebird/data.d.ts +1 -1
  91. package/dist/firebird/data.js +68 -14
  92. package/dist/firebird/schema.cjs +13 -1
  93. package/dist/firebird/schema.d.cts +1 -1
  94. package/dist/firebird/schema.d.ts +1 -1
  95. package/dist/firebird/schema.js +13 -1
  96. package/dist/{geometry-DvwdrIij.d.cts → geometry-DaJr8yQW.d.cts} +2 -2
  97. package/dist/{geometry-DvwdrIij.d.ts → geometry-DaJr8yQW.d.ts} +2 -2
  98. package/dist/hsqldb/binary-script.cjs +154 -0
  99. package/dist/hsqldb/binary-script.d.cts +15 -0
  100. package/dist/hsqldb/binary-script.d.ts +15 -0
  101. package/dist/hsqldb/binary-script.js +151 -0
  102. package/dist/hsqldb/cache.cjs +18 -11
  103. package/dist/hsqldb/cache.d.cts +9 -4
  104. package/dist/hsqldb/cache.d.ts +9 -4
  105. package/dist/hsqldb/cache.js +18 -11
  106. package/dist/hsqldb/rowformat.cjs +60 -16
  107. package/dist/hsqldb/rowformat.d.cts +2 -21
  108. package/dist/hsqldb/rowformat.d.ts +2 -21
  109. package/dist/hsqldb/rowformat.js +60 -17
  110. package/dist/{image-BZDy72Jb.d.cts → image-7snmKIxn.d.cts} +1 -1
  111. package/dist/{image-B-xQWYYS.d.ts → image-Cs8xF753.d.ts} +1 -1
  112. package/dist/{image-CeqwL-Qs.d.ts → image-DHcA9kaK.d.ts} +1 -1
  113. package/dist/{image-DWX6cNOD.d.cts → image-M5SezZVI.d.cts} +1 -1
  114. package/dist/index.cjs +54 -3
  115. package/dist/index.d.cts +28 -20
  116. package/dist/index.d.ts +27 -19
  117. package/dist/index.js +13 -4
  118. package/dist/layout/cell-typing.cjs +209 -0
  119. package/dist/layout/cell-typing.d.cts +22 -0
  120. package/dist/layout/cell-typing.d.ts +22 -0
  121. package/dist/layout/cell-typing.js +208 -0
  122. package/dist/layout/drawing.cjs +193 -17
  123. package/dist/layout/drawing.js +193 -17
  124. package/dist/layout/engine.cjs +46 -29
  125. package/dist/layout/engine.d.cts +0 -2
  126. package/dist/layout/engine.d.ts +0 -2
  127. package/dist/layout/engine.js +47 -30
  128. package/dist/layout/lattice.cjs +139 -0
  129. package/dist/layout/lattice.d.cts +20 -0
  130. package/dist/layout/lattice.d.ts +20 -0
  131. package/dist/layout/lattice.js +135 -0
  132. package/dist/layout/reconstruct.cjs +176 -113
  133. package/dist/layout/reconstruct.d.cts +2 -0
  134. package/dist/layout/reconstruct.d.ts +2 -0
  135. package/dist/layout/reconstruct.js +173 -110
  136. package/dist/layout/shared.cjs +52 -0
  137. package/dist/layout/shared.d.cts +4 -2
  138. package/dist/layout/shared.d.ts +4 -2
  139. package/dist/layout/shared.js +51 -1
  140. package/dist/layout/sheets.cjs +45 -11
  141. package/dist/layout/sheets.js +46 -12
  142. package/dist/layout/slides.cjs +7 -7
  143. package/dist/layout/slides.d.cts +0 -3
  144. package/dist/layout/slides.d.ts +0 -3
  145. package/dist/layout/slides.js +7 -7
  146. package/dist/markdown/write.cjs +19 -6
  147. package/dist/markdown/write.js +19 -6
  148. package/dist/mathml/layout.cjs +43 -9
  149. package/dist/mathml/layout.d.cts +1 -1
  150. package/dist/mathml/layout.d.ts +1 -1
  151. package/dist/mathml/layout.js +43 -9
  152. package/dist/mathml/variant.cjs +48 -5
  153. package/dist/mathml/variant.js +48 -5
  154. package/dist/model/embedded-drawing.cjs +32 -0
  155. package/dist/model/embedded-drawing.d.cts +8 -0
  156. package/dist/model/embedded-drawing.d.ts +8 -0
  157. package/dist/model/embedded-drawing.js +30 -0
  158. package/dist/model/formula.cjs +31 -0
  159. package/dist/model/formula.d.cts +6 -6
  160. package/dist/model/formula.d.ts +6 -6
  161. package/dist/model/formula.js +27 -0
  162. package/dist/model/geometry.d.cts +1 -1
  163. package/dist/model/geometry.d.ts +1 -1
  164. package/dist/model/paint-order.cjs +15 -0
  165. package/dist/model/paint-order.d.cts +14 -0
  166. package/dist/model/paint-order.d.ts +14 -0
  167. package/dist/model/paint-order.js +14 -0
  168. package/dist/odb/components.cjs +12 -0
  169. package/dist/odb/components.d.cts +6 -0
  170. package/dist/odb/components.d.ts +6 -0
  171. package/dist/odb/components.js +10 -0
  172. package/dist/odb/read.cjs +11 -7
  173. package/dist/odb/read.d.cts +3 -2
  174. package/dist/odb/read.d.ts +3 -2
  175. package/dist/odb/read.js +11 -7
  176. package/dist/odf/formula/detect.cjs +86 -18
  177. package/dist/odf/formula/detect.d.cts +10 -6
  178. package/dist/odf/formula/detect.d.ts +10 -6
  179. package/dist/odf/formula/detect.js +86 -19
  180. package/dist/odf/formula/read.cjs +4 -16
  181. package/dist/odf/formula/read.d.cts +4 -8
  182. package/dist/odf/formula/read.d.ts +4 -8
  183. package/dist/odf/formula/read.js +5 -17
  184. package/dist/odf/odp/read.cjs +9 -19
  185. package/dist/odf/odp/read.d.cts +2 -7
  186. package/dist/odf/odp/read.d.ts +2 -7
  187. package/dist/odf/odp/read.js +10 -20
  188. package/dist/odf/odt/read.cjs +63 -23
  189. package/dist/odf/odt/read.d.cts +2 -7
  190. package/dist/odf/odt/read.d.ts +2 -7
  191. package/dist/odf/odt/read.js +64 -24
  192. package/dist/omml/write.cjs +258 -0
  193. package/dist/omml/write.d.cts +2 -0
  194. package/dist/omml/write.d.ts +2 -0
  195. package/dist/omml/write.js +256 -0
  196. package/dist/rowformat-Cl2exlEh.d.cts +25 -0
  197. package/dist/rowformat-Cl2exlEh.d.ts +25 -0
  198. package/dist/{schema-Acco3Ezi.d.cts → schema-BeR_KJ0X.d.cts} +3 -1
  199. package/dist/{schema-VkAA6pF5.d.ts → schema-CSKwSb_v.d.ts} +3 -1
  200. package/dist/{shape-BUfjw5eZ.d.cts → shape-BhkP6HB8.d.cts} +6 -2
  201. package/dist/{shape-CTkl6kt8.d.ts → shape-BkVcwPcf.d.ts} +6 -2
  202. package/dist/{shape-BfN3m52m.d.ts → shape-CVXedeL7.d.ts} +3 -2
  203. package/dist/{shape-CN2ycxOo.d.cts → shape-CXZ6fejV.d.cts} +3 -2
  204. package/dist/table-C3CPZ--2.d.cts +35 -0
  205. package/dist/table-DjYcNOFm.d.cts +44 -0
  206. package/dist/table-DqfqMkVq.d.ts +44 -0
  207. package/dist/table-DvS_7UQS.d.ts +35 -0
  208. package/dist/{vector-ClohqsOe.d.cts → vector-Puuqu_IT.d.cts} +4 -0
  209. package/dist/{vector-ClohqsOe.d.ts → vector-Puuqu_IT.d.ts} +4 -0
  210. package/dist/write-DuyfnbL_.d.cts +16 -0
  211. package/dist/write-Zqwx6pka.d.ts +16 -0
  212. package/package.json +4 -4
  213. package/dist/odf/formula/placeholder.cjs +0 -36
  214. package/dist/odf/formula/placeholder.d.cts +0 -14
  215. package/dist/odf/formula/placeholder.d.ts +0 -14
  216. package/dist/odf/formula/placeholder.js +0 -36
@@ -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 renderCellText(cell, rowCells, columnAxis, rowAxis, gridLeftXPt, gridTopYDownPt, pageHeightPt, measurer, out) {
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
- const ownWidthPt = axisSpanSizePt(columnAxis, cell.column, cell.colSpan ?? 1);
191
- const heightPt = axisSpanSizePt(rowAxis, cell.row, cell.rowSpan ?? 1);
192
- const xLeftPt = gridLeftXPt + columnAxis.offsetsPt[columnPosition];
193
- const yTopDownPt = gridTopYDownPt + rowAxis.offsetsPt[rowPosition];
194
- const alignment = defaultAlignmentForValue(cell.value.kind);
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 = yTopDownPt + Math.max(CELL_TEXT_PADDING_PT, heightPt - CELL_TEXT_PADDING_PT - lineHeightPt) + naturalLine.ascentPt;
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 items = [];
385
- if (printSettings.gridlines) renderGridlines(gridLeftXPt, gridTopYDownPt, gridWidthPt, gridHeightPt, columnAxis.offsetsPt, rowAxis.offsetsPt, pageSize.heightPt, items);
386
- if (printSettings.headers) renderHeaderLabels(gutter, columnAxis, rowAxis, gridLeftXPt, gridTopYDownPt, pageSize.heightPt, measurer, items);
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
- renderCellText(cell, rowCells, columnAxis, rowAxis, gridLeftXPt, gridTopYDownPt, pageSize.heightPt, measurer, items);
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,
@@ -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 embedded = block.sourcePath === void 0 ? void 0 : formulaContext.formulas.get(block.sourcePath);
119
- if (embedded === void 0) return;
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(embedded.mathml, {
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, formulas, positioned) {
164
+ function convertSlide(slide, slideIndex, measurer, images, positioned) {
164
165
  const items = [];
165
- const formulaContext = formulas === void 0 ? void 0 : {
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, options.formulas, formulas));
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,
@@ -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
  }
@@ -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
  }
@@ -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 embedded = block.sourcePath === void 0 ? void 0 : formulaContext.formulas.get(block.sourcePath);
118
- if (embedded === void 0) return;
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(embedded.mathml, {
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, formulas, positioned) {
163
+ function convertSlide(slide, slideIndex, measurer, images, positioned) {
163
164
  const items = [];
164
- const formulaContext = formulas === void 0 ? void 0 : {
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, options.formulas, formulas));
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,
@@ -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.map(toLegacyBlock)
17
+ blocks: toLegacyBlocks(cell.blocks)
16
18
  }))
17
19
  }))
18
20
  };
19
- if (block.kind === "embeddedObject") return {
20
- ...block,
21
- document: toLegacyEmbeddedDocument(block.document)
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.map(toLegacyBlock)
45
+ blocks: toLegacyBlocks(section.blocks)
33
46
  }))
34
47
  };
35
48
  }
@@ -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.map(toLegacyBlock)
16
+ blocks: toLegacyBlocks(cell.blocks)
15
17
  }))
16
18
  }))
17
19
  };
18
- if (block.kind === "embeddedObject") return {
19
- ...block,
20
- document: toLegacyEmbeddedDocument(block.document)
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.map(toLegacyBlock)
44
+ blocks: toLegacyBlocks(section.blocks)
32
45
  }))
33
46
  };
34
47
  }
@@ -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 items = [...require_mathml_compose.placeChild(base, (widthPt - base.widthPt) / 2, 0, ascentPt)];
153
- if (over !== void 0) items.push(...require_mathml_compose.placeChild(over, (widthPt - over.widthPt) / 2, -(base.ascentPt + gapPt + over.descentPt), ascentPt));
154
- if (under !== void 0) items.push(...require_mathml_compose.placeChild(under, (widthPt - under.widthPt) / 2, base.descentPt + gapPt + under.ascentPt, ascentPt));
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
- if (kind === "munder") return layoutUnderOver(base, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), void 0, ctx);
180
- if (kind === "mover") return layoutUnderOver(base, void 0, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), ctx);
181
- return layoutUnderOver(base, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), children[2] === void 0 ? void 0 : layoutNode(children[2], scriptCtx), ctx);
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);
@@ -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 {
@@ -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 {
@@ -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 items = [...placeChild(base, (widthPt - base.widthPt) / 2, 0, ascentPt)];
152
- if (over !== void 0) items.push(...placeChild(over, (widthPt - over.widthPt) / 2, -(base.ascentPt + gapPt + over.descentPt), ascentPt));
153
- if (under !== void 0) items.push(...placeChild(under, (widthPt - under.widthPt) / 2, base.descentPt + gapPt + under.ascentPt, ascentPt));
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
- if (kind === "munder") return layoutUnderOver(base, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), void 0, ctx);
179
- if (kind === "mover") return layoutUnderOver(base, void 0, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), ctx);
180
- return layoutUnderOver(base, children[1] === void 0 ? void 0 : layoutNode(children[1], scriptCtx), children[2] === void 0 ? void 0 : layoutNode(children[2], scriptCtx), ctx);
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);
@@ -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) {