temml 0.10.13 → 0.10.15

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/temml.js CHANGED
@@ -974,6 +974,10 @@ var temml = (function () {
974
974
  defineSymbol(math, mathord, "\u220E", "\\QED", true);
975
975
  defineSymbol(math, mathord, "\u2030", "\\permil", true);
976
976
  defineSymbol(text, textord, "\u2030", "\\permil");
977
+ defineSymbol(math, mathord, "\u2609", "\\astrosun", true);
978
+ defineSymbol(math, mathord, "\u263c", "\\sun", true);
979
+ defineSymbol(math, mathord, "\u263e", "\\leftmoon", true);
980
+ defineSymbol(math, mathord, "\u263d", "\\rightmoon", true);
977
981
 
978
982
  // AMS Negated Binary Relations
979
983
  defineSymbol(math, rel, "\u226e", "\\nless", true);
@@ -1118,6 +1122,7 @@ var temml = (function () {
1118
1122
  defineSymbol(math, rel, "\u22b2", "\\vartriangleleft");
1119
1123
  defineSymbol(math, rel, "\u22b4", "\\trianglelefteq");
1120
1124
  defineSymbol(math, rel, "\u22a8", "\\vDash", true);
1125
+ defineSymbol(math, rel, "\u22ab", "\\VDash", true);
1121
1126
  defineSymbol(math, rel, "\u22aa", "\\Vvdash", true);
1122
1127
  defineSymbol(math, rel, "\u2323", "\\smallsmile");
1123
1128
  defineSymbol(math, rel, "\u2322", "\\smallfrown");
@@ -1767,13 +1772,16 @@ var temml = (function () {
1767
1772
  * much of this module.
1768
1773
  */
1769
1774
 
1775
+ const openDelims = "([{⌊⌈⟨⟮⎰⟦⦃";
1776
+ const closeDelims = ")]}⌋⌉⟩⟯⎱⟦⦄";
1777
+
1770
1778
  function setLineBreaks(expression, wrapMode, isDisplayMode) {
1771
1779
  const mtrs = [];
1772
1780
  let mrows = [];
1773
1781
  let block = [];
1774
1782
  let numTopLevelEquals = 0;
1775
- let canBeBIN = false; // The first node cannot be an infix binary operator.
1776
1783
  let i = 0;
1784
+ let level = 0;
1777
1785
  while (i < expression.length) {
1778
1786
  while (expression[i] instanceof DocumentFragment) {
1779
1787
  expression.splice(i, 1, ...expression[i].children); // Expand the fragment.
@@ -1796,7 +1804,12 @@ var temml = (function () {
1796
1804
  }
1797
1805
  block.push(node);
1798
1806
  if (node.type && node.type === "mo" && node.children.length === 1) {
1799
- if (wrapMode === "=" && node.children[0].text === "=") {
1807
+ const ch = node.children[0].text;
1808
+ if (openDelims.indexOf(ch) > -1) {
1809
+ level += 1;
1810
+ } else if (closeDelims.indexOf(ch) > -1) {
1811
+ level -= 1;
1812
+ } else if (level === 0 && wrapMode === "=" && ch === "=") {
1800
1813
  numTopLevelEquals += 1;
1801
1814
  if (numTopLevelEquals > 1) {
1802
1815
  block.pop();
@@ -1805,59 +1818,48 @@ var temml = (function () {
1805
1818
  mrows.push(element);
1806
1819
  block = [node];
1807
1820
  }
1808
- } else if (wrapMode === "tex") {
1809
- // This may be a place for a soft line break.
1810
- if (canBeBIN && !node.attributes.form) {
1811
- // Check if the following node is a \nobreak text node, e.g. "~""
1812
- const next = i < expression.length - 1 ? expression[i + 1] : null;
1813
- let glueIsFreeOfNobreak = true;
1814
- if (
1815
- !(
1816
- next &&
1817
- next.type === "mtext" &&
1818
- next.attributes.linebreak &&
1819
- next.attributes.linebreak === "nobreak"
1820
- )
1821
- ) {
1822
- // We may need to start a new block.
1823
- // First, put any post-operator glue on same line as operator.
1824
- for (let j = i + 1; j < expression.length; j++) {
1825
- const nd = expression[j];
1821
+ } else if (level === 0 && wrapMode === "tex") {
1822
+ // Check if the following node is a \nobreak text node, e.g. "~""
1823
+ const next = i < expression.length - 1 ? expression[i + 1] : null;
1824
+ let glueIsFreeOfNobreak = true;
1825
+ if (
1826
+ !(
1827
+ next &&
1828
+ next.type === "mtext" &&
1829
+ next.attributes.linebreak &&
1830
+ next.attributes.linebreak === "nobreak"
1831
+ )
1832
+ ) {
1833
+ // We may need to start a new block.
1834
+ // First, put any post-operator glue on same line as operator.
1835
+ for (let j = i + 1; j < expression.length; j++) {
1836
+ const nd = expression[j];
1837
+ if (
1838
+ nd.type &&
1839
+ nd.type === "mspace" &&
1840
+ !(nd.attributes.linebreak && nd.attributes.linebreak === "newline")
1841
+ ) {
1842
+ block.push(nd);
1843
+ i += 1;
1826
1844
  if (
1827
- nd.type &&
1828
- nd.type === "mspace" &&
1829
- !(nd.attributes.linebreak && nd.attributes.linebreak === "newline")
1845
+ nd.attributes &&
1846
+ nd.attributes.linebreak &&
1847
+ nd.attributes.linebreak === "nobreak"
1830
1848
  ) {
1831
- block.push(nd);
1832
- i += 1;
1833
- if (
1834
- nd.attributes &&
1835
- nd.attributes.linebreak &&
1836
- nd.attributes.linebreak === "nobreak"
1837
- ) {
1838
- glueIsFreeOfNobreak = false;
1839
- }
1840
- } else {
1841
- break;
1849
+ glueIsFreeOfNobreak = false;
1842
1850
  }
1851
+ } else {
1852
+ break;
1843
1853
  }
1844
1854
  }
1845
- if (glueIsFreeOfNobreak) {
1846
- // Start a new block. (Insert a soft linebreak.)
1847
- const element = new mathMLTree.MathNode("mrow", block);
1848
- mrows.push(element);
1849
- block = [];
1850
- }
1851
- canBeBIN = false;
1852
1855
  }
1853
- const isOpenDelimiter = node.attributes.form && node.attributes.form === "prefix";
1854
- // Any operator that follows an open delimiter is unary.
1855
- canBeBIN = !(node.attributes.separator || isOpenDelimiter);
1856
- } else {
1857
- canBeBIN = true;
1856
+ if (glueIsFreeOfNobreak) {
1857
+ // Start a new block. (Insert a soft linebreak.)
1858
+ const element = new mathMLTree.MathNode("mrow", block);
1859
+ mrows.push(element);
1860
+ block = [];
1861
+ }
1858
1862
  }
1859
- } else {
1860
- canBeBIN = true;
1861
1863
  }
1862
1864
  i += 1;
1863
1865
  }
@@ -2134,9 +2136,10 @@ var temml = (function () {
2134
2136
  }
2135
2137
  if (settings.displayMode) {
2136
2138
  math.setAttribute("display", "block");
2137
- math.style.display = math.children.length === 1 && math.children[0].type === "mtable"
2138
- ? "inline"
2139
- : "block math";
2139
+ math.style.display = "block math"; // necessary in Chromium.
2140
+ // Firefox and Safari do not recognize display: "block math".
2141
+ // Set a class so that the CSS file can set display: block.
2142
+ math.classes = ["tml-display"];
2140
2143
  }
2141
2144
  return math;
2142
2145
  }
@@ -3665,10 +3668,9 @@ var temml = (function () {
3665
3668
  // so we have to explicitly set stretchy to true.
3666
3669
  node.setAttribute("stretchy", "true");
3667
3670
  }
3668
-
3669
3671
  node.setAttribute("symmetric", "true"); // Needed for tall arrows in Firefox.
3670
3672
  node.setAttribute("minsize", sizeToMaxHeight[group.size] + "em");
3671
- // Don't set the maxsize attribute. It's broken in Chromium.
3673
+ node.setAttribute("maxsize", sizeToMaxHeight[group.size] + "em");
3672
3674
  return node;
3673
3675
  }
3674
3676
  });
@@ -3803,34 +3805,42 @@ var temml = (function () {
3803
3805
 
3804
3806
  const mathmlBuilder$8 = (group, style) => {
3805
3807
  let node;
3806
- if (group.label.indexOf("colorbox") > -1) {
3807
- // Chrome mpadded +width attribute is broken. Insert <mspace>
3808
- node = new mathMLTree.MathNode("mpadded", [
3808
+ if (group.label.indexOf("colorbox") > -1 || group.label === "\\boxed") {
3809
+ // MathML core does not support +width attribute in <mpadded>.
3810
+ // Firefox does not reliably add side padding.
3811
+ // Insert <mspace>
3812
+ node = new mathMLTree.MathNode("mrow", [
3809
3813
  padding$1(),
3810
3814
  buildGroup$1(group.body, style),
3811
3815
  padding$1()
3812
3816
  ]);
3813
3817
  } else {
3814
- node = new mathMLTree.MathNode("menclose", [buildGroup$1(group.body, style)]);
3818
+ node = new mathMLTree.MathNode("mrow", [buildGroup$1(group.body, style)]);
3815
3819
  }
3816
3820
  switch (group.label) {
3817
3821
  case "\\overline":
3818
- node.setAttribute("notation", "top");
3819
3822
  node.style.padding = "0.1em 0 0 0";
3820
3823
  node.style.borderTop = "0.065em solid";
3821
3824
  break
3822
3825
  case "\\underline":
3823
- node.setAttribute("notation", "bottom");
3824
3826
  node.style.padding = "0 0 0.1em 0";
3825
3827
  node.style.borderBottom = "0.065em solid";
3826
3828
  break
3827
3829
  case "\\cancel":
3828
- node.setAttribute("notation", "updiagonalstrike");
3829
- node.classes.push("cancel");
3830
+ node.style.background = `linear-gradient(to top left,
3831
+ rgba(0,0,0,0) 0%,
3832
+ rgba(0,0,0,0) calc(50% - 0.06em),
3833
+ rgba(0,0,0,1) 50%,
3834
+ rgba(0,0,0,0) calc(50% + 0.06em),
3835
+ rgba(0,0,0,0) 100%);`;
3830
3836
  break
3831
3837
  case "\\bcancel":
3832
- node.setAttribute("notation", "downdiagonalstrike");
3833
- node.classes.push("bcancel");
3838
+ node.style.background = `linear-gradient(to top right,
3839
+ rgba(0,0,0,0) 0%,
3840
+ rgba(0,0,0,0) calc(50% - 0.06em),
3841
+ rgba(0,0,0,1) 50%,
3842
+ rgba(0,0,0,0) calc(50% + 0.06em),
3843
+ rgba(0,0,0,0) 100%);`;
3834
3844
  break
3835
3845
  /*
3836
3846
  case "\\longdiv":
@@ -3840,18 +3850,21 @@ var temml = (function () {
3840
3850
  node.setAttribute("notation", "phasorangle");
3841
3851
  break */
3842
3852
  case "\\angl":
3843
- node.setAttribute("notation", "actuarial");
3844
3853
  node.style.padding = "0.03889em 0.03889em 0 0.03889em";
3845
3854
  node.style.borderTop = "0.049em solid";
3846
3855
  node.style.borderRight = "0.049em solid";
3847
3856
  node.style.marginRight = "0.03889em";
3848
3857
  break
3849
3858
  case "\\sout":
3850
- node.setAttribute("notation", "horizontalstrike");
3851
3859
  node.style["text-decoration"] = "line-through 0.08em solid";
3852
3860
  break
3861
+ case "\\boxed":
3862
+ // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} from amsmath.sty
3863
+ node.style = { padding: "3pt 0 3pt 0", border: "1px solid" };
3864
+ node.setAttribute("scriptlevel", "0");
3865
+ node.setAttribute("displaystyle", "true");
3866
+ break
3853
3867
  case "\\fbox":
3854
- node.setAttribute("notation", "box");
3855
3868
  node.style = { padding: "3pt", border: "1px solid" };
3856
3869
  break
3857
3870
  case "\\fcolorbox":
@@ -3871,8 +3884,18 @@ var temml = (function () {
3871
3884
  break
3872
3885
  }
3873
3886
  case "\\xcancel":
3874
- node.setAttribute("notation", "updiagonalstrike downdiagonalstrike");
3875
- node.classes.push("xcancel");
3887
+ node.style.background = `linear-gradient(to top left,
3888
+ rgba(0,0,0,0) 0%,
3889
+ rgba(0,0,0,0) calc(50% - 0.06em),
3890
+ rgba(0,0,0,1) 50%,
3891
+ rgba(0,0,0,0) calc(50% + 0.06em),
3892
+ rgba(0,0,0,0) 100%),
3893
+ linear-gradient(to top right,
3894
+ rgba(0,0,0,0) 0%,
3895
+ rgba(0,0,0,0) calc(50% - 0.06em),
3896
+ rgba(0,0,0,1) 50%,
3897
+ rgba(0,0,0,0) calc(50% + 0.06em),
3898
+ rgba(0,0,0,0) 100%);`;
3876
3899
  break
3877
3900
  }
3878
3901
  if (group.backgroundColor) {
@@ -3966,7 +3989,7 @@ var temml = (function () {
3966
3989
 
3967
3990
  defineFunction({
3968
3991
  type: "enclose",
3969
- names: ["\\angl", "\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\overline"],
3992
+ names: ["\\angl", "\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\overline", "\\boxed"],
3970
3993
  // , "\\phase", "\\longdiv"
3971
3994
  props: {
3972
3995
  numArgs: 1
@@ -4303,24 +4326,94 @@ var temml = (function () {
4303
4326
  // Write horizontal rules
4304
4327
  if (i === 0 && hlines[0].length > 0) {
4305
4328
  if (hlines[0].length === 2) {
4306
- mtr.classes.push("tml-top-double");
4329
+ mtr.children.forEach(cell => { cell.style.borderTop = "0.15em double"; });
4307
4330
  } else {
4308
- mtr.classes.push(hlines[0][0] ? "tml-top-dashed" : "tml-top-solid");
4331
+ mtr.children.forEach(cell => {
4332
+ cell.style.borderTop = hlines[0][0] ? "0.06em dashed" : "0.06em solid";
4333
+ });
4309
4334
  }
4310
4335
  }
4311
4336
  if (hlines[i + 1].length > 0) {
4312
4337
  if (hlines[i + 1].length === 2) {
4313
- mtr.classes.push("tml-hline-double");
4338
+ mtr.children.forEach(cell => { cell.style.borderBottom = "0.15em double"; });
4314
4339
  } else {
4315
- mtr.classes.push(hlines[i + 1][0] ? "tml-hline-dashed" : "tml-hline-solid");
4340
+ mtr.children.forEach(cell => {
4341
+ cell.style.borderBottom = hlines[i + 1][0] ? "0.06em dashed" : "0.06em solid";
4342
+ });
4316
4343
  }
4317
4344
  }
4318
4345
  tbl.push(mtr);
4319
4346
  }
4320
- let table = new mathMLTree.MathNode("mtable", tbl);
4347
+
4321
4348
  if (group.envClasses.length > 0) {
4322
- table.classes = group.envClasses.map(e => "tml-" + e);
4349
+ const pad = group.envClasses.includes("jot")
4350
+ ? "0.7" // 0.5ex + 0.09em top & bot padding
4351
+ : group.envClasses.includes("small")
4352
+ ? "0.35"
4353
+ : "0.5"; // 0.5ex default top & bot padding
4354
+ const sidePadding = group.envClasses.includes("abut")
4355
+ ? "0"
4356
+ : group.envClasses.includes("cases")
4357
+ ? "0"
4358
+ : group.envClasses.includes("small")
4359
+ ? "0.1389"
4360
+ : group.envClasses.includes("cd")
4361
+ ? "0.25"
4362
+ : "0.4"; // default side padding
4363
+
4364
+ const numCols = tbl.length === 0 ? 0 : tbl[0].children.length;
4365
+
4366
+ const sidePad = (j, hand) => {
4367
+ if (j === 0 && hand === 0) { return "0" }
4368
+ if (j === numCols - 1 && hand === 1) { return "0" }
4369
+ if (group.envClasses[0] !== "align") { return sidePadding }
4370
+ if (hand === 1) { return "0" }
4371
+ if (group.addEqnNum) {
4372
+ return (j % 2) ? "1" : "0"
4373
+ } else {
4374
+ return (j % 2) ? "0" : "1"
4375
+ }
4376
+ };
4377
+
4378
+ // Padding
4379
+ for (let i = 0; i < tbl.length; i++) {
4380
+ for (let j = 0; j < tbl[i].children.length; j++) {
4381
+ tbl[i].children[j].style.padding = `${pad}ex ${sidePad(j, 1)}em ${pad}ex ${sidePad(j, 0)}em`;
4382
+ }
4383
+ }
4384
+
4385
+ // Justification
4386
+ const align = group.envClasses.includes("align") || group.envClasses.includes("alignat");
4387
+ for (let i = 0; i < tbl.length; i++) {
4388
+ const row = tbl[i];
4389
+ if (align) {
4390
+ for (let j = 0; j < row.children.length; j++) {
4391
+ // Chromium does not recognize text-align: left. Use -webkit-
4392
+ // TODO: Remove -webkit- when Chromium no longer needs it.
4393
+ row.children[j].style.textAlign = "-webkit-" + (j % 2 ? "left" : "right");
4394
+ }
4395
+ }
4396
+ if (row.children.length > 1 && group.envClasses.includes("cases")) {
4397
+ row.children[1].style.padding = row.children[1].style.padding.replace(/0em$/, "1em");
4398
+ }
4399
+
4400
+ if (group.envClasses.includes("cases") || group.envClasses.includes("subarray")) {
4401
+ for (const cell of row.children) {
4402
+ cell.style.textAlign = "-webkit-" + "left";
4403
+ }
4404
+ }
4405
+ }
4406
+ } else {
4407
+ // Set zero padding on side of the matrix
4408
+ for (let i = 0; i < tbl.length; i++) {
4409
+ tbl[i].children[0].style.paddingLeft = "0em";
4410
+ if (tbl[i].children.length === tbl[0].children.length) {
4411
+ tbl[i].children[tbl[i].children.length - 1].style.paddingRight = "0em";
4412
+ }
4413
+ }
4323
4414
  }
4415
+
4416
+ let table = new mathMLTree.MathNode("mtable", tbl);
4324
4417
  if (group.scriptLevel === "display") { table.setAttribute("displaystyle", "true"); }
4325
4418
 
4326
4419
  if (group.addEqnNum || group.envClasses.includes("multline")) {
@@ -4400,6 +4493,8 @@ var temml = (function () {
4400
4493
  align = "left " + (align.length > 0 ? align : "center ") + "right ";
4401
4494
  }
4402
4495
  if (align) {
4496
+ // Firefox reads this attribute, not the -webkit-left|right written above.
4497
+ // TODO: When Chrome no longer needs "-webkit-", use CSS and delete the next line.
4403
4498
  table.setAttribute("columnalign", align.trim());
4404
4499
  }
4405
4500
 
@@ -4424,7 +4519,7 @@ var temml = (function () {
4424
4519
  cols,
4425
4520
  addEqnNum: context.envName === "align" || context.envName === "alignat",
4426
4521
  emptySingleRow: true,
4427
- envClasses: ["jot", "abut"], // set row spacing & provisional column spacing
4522
+ envClasses: ["abut", "jot"], // set row spacing & provisional column spacing
4428
4523
  maxNumCols: context.envName === "split" ? 2 : undefined,
4429
4524
  leqno: context.parser.settings.leqno
4430
4525
  },
@@ -4442,18 +4537,22 @@ var temml = (function () {
4442
4537
  // binary. This behavior is implemented in amsmath's \start@aligned.
4443
4538
  let numMaths;
4444
4539
  let numCols = 0;
4445
- if (args[0] && args[0].type === "ordgroup") {
4540
+ const isAlignedAt = context.envName.indexOf("at") > -1;
4541
+ if (args[0] && isAlignedAt) {
4542
+ // alignat environment takes an argument w/ number of columns
4446
4543
  let arg0 = "";
4447
4544
  for (let i = 0; i < args[0].body.length; i++) {
4448
4545
  const textord = assertNodeType(args[0].body[i], "textord");
4449
4546
  arg0 += textord.text;
4450
4547
  }
4548
+ if (isNaN(arg0)) {
4549
+ throw new ParseError("The alignat enviroment requires a numeric first argument.")
4550
+ }
4451
4551
  numMaths = Number(arg0);
4452
4552
  numCols = numMaths * 2;
4453
4553
  }
4454
- const isAligned = !numCols;
4455
4554
  res.body.forEach(function(row) {
4456
- if (!isAligned) {
4555
+ if (isAlignedAt) {
4457
4556
  // Case 1
4458
4557
  const curMaths = row.length / 2;
4459
4558
  if (numMaths < curMaths) {
@@ -4481,14 +4580,10 @@ var temml = (function () {
4481
4580
  align: align
4482
4581
  };
4483
4582
  }
4484
- if (context.envName === "split") ; else if (context.envName.indexOf("ed") > -1) {
4485
- res.envClasses.push("aligned"); // Sets justification
4486
- } else if (isAligned) {
4487
- res.envClasses[1] = context.envName === "align*"
4488
- ? "align-star"
4489
- : "align"; // Sets column spacing & justification
4583
+ if (context.envName === "split") ; else if (isAlignedAt) {
4584
+ res.envClasses.push("alignat"); // Sets justification
4490
4585
  } else {
4491
- res.envClasses.push("aligned"); // Sets justification
4586
+ res.envClasses[0] = "align"; // Sets column spacing & justification
4492
4587
  }
4493
4588
  return res;
4494
4589
  };
@@ -4738,7 +4833,7 @@ var temml = (function () {
4738
4833
  }
4739
4834
  const res = {
4740
4835
  cols: [],
4741
- envClasses: ["jot", "abut"],
4836
+ envClasses: ["abut", "jot"],
4742
4837
  addEqnNum: context.envName === "gather",
4743
4838
  emptySingleRow: true,
4744
4839
  leqno: context.parser.settings.leqno
@@ -6832,8 +6927,6 @@ var temml = (function () {
6832
6927
  }
6833
6928
  });
6834
6929
 
6835
- const sign = num => num >= 0 ? "+" : "-";
6836
-
6837
6930
  // \raise, \lower, and \raisebox
6838
6931
 
6839
6932
  const mathmlBuilder = (group, style) => {
@@ -6841,11 +6934,13 @@ var temml = (function () {
6841
6934
  const node = new mathMLTree.MathNode("mpadded", [buildGroup$1(group.body, newStyle)]);
6842
6935
  const dy = calculateSize(group.dy, style);
6843
6936
  node.setAttribute("voffset", dy.number + dy.unit);
6844
- const dyAbs = Math.abs(dy.number);
6845
- // The next two lines do not work in Chromium.
6846
- // TODO: Find some other way to adjust height and depth.
6847
- node.setAttribute("height", sign(dy.number) + dyAbs + dy.unit);
6848
- node.setAttribute("depth", sign(-dy.number) + dyAbs + dy.unit);
6937
+ // Add padding, which acts to increase height in Chromium.
6938
+ // TODO: Figure out some way to change height in Firefox w/o breaking Chromium.
6939
+ if (dy.number > 0) {
6940
+ node.style.padding = dy.number + dy.unit + " 0 0 0";
6941
+ } else {
6942
+ node.style.padding = "0 0 " + Math.abs(dy.number) + dy.unit + " 0";
6943
+ }
6849
6944
  return node
6850
6945
  };
6851
6946
 
@@ -8474,9 +8569,6 @@ var temml = (function () {
8474
8569
  //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray}
8475
8570
  defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}");
8476
8571
 
8477
- // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}}
8478
- defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}");
8479
-
8480
8572
  // \def\iff{\DOTSB\;\Longleftrightarrow\;}
8481
8573
  // \def\implies{\DOTSB\;\Longrightarrow\;}
8482
8574
  // \def\impliedby{\DOTSB\;\Longleftarrow\;}
@@ -8725,7 +8817,7 @@ var temml = (function () {
8725
8817
  defineMacro(
8726
8818
  "\\Temml",
8727
8819
  // eslint-disable-next-line max-len
8728
- "\\textrm{T}\\kern-0.2em\\lower{0.2em}\\textrm{E}\\kern-0.08em{\\textrm{M}\\kern-0.08em\\raise{0.2em}\\textrm{M}\\kern-0.08em\\textrm{L}}"
8820
+ "\\textrm{T}\\kern-0.2em\\lower{0.2em}{\\textrm{E}}\\kern-0.08em{\\textrm{M}\\kern-0.08em\\raise{0.2em}\\textrm{M}\\kern-0.08em\\textrm{L}}"
8729
8821
  );
8730
8822
 
8731
8823
  // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace}
@@ -11005,7 +11097,7 @@ var temml = (function () {
11005
11097
  * https://mit-license.org/
11006
11098
  */
11007
11099
 
11008
- const version = "0.10.13";
11100
+ const version = "0.10.15";
11009
11101
 
11010
11102
  function postProcess(block) {
11011
11103
  const labelMap = {};
@@ -11056,6 +11148,7 @@ var temml = (function () {
11056
11148
  /* eslint no-console:0 */
11057
11149
 
11058
11150
  /**
11151
+ * @type {import('./temml').render}
11059
11152
  * Parse and build an expression, and place that expression in the DOM node
11060
11153
  * given.
11061
11154
  */
@@ -11093,6 +11186,7 @@ var temml = (function () {
11093
11186
  }
11094
11187
 
11095
11188
  /**
11189
+ * @type {import('./temml').renderToString}
11096
11190
  * Parse and build an expression, and return the markup for that.
11097
11191
  */
11098
11192
  const renderToString = function(expression, options) {
@@ -11101,6 +11195,7 @@ var temml = (function () {
11101
11195
  };
11102
11196
 
11103
11197
  /**
11198
+ * @type {import('./temml').generateParseTree}
11104
11199
  * Parse an expression and return the parse tree.
11105
11200
  */
11106
11201
  const generateParseTree = function(expression, options) {
@@ -11109,6 +11204,7 @@ var temml = (function () {
11109
11204
  };
11110
11205
 
11111
11206
  /**
11207
+ * @type {import('./temml').definePreamble}
11112
11208
  * Take an expression which contains a preamble.
11113
11209
  * Parse it and return the macros.
11114
11210
  */
@@ -11141,6 +11237,7 @@ var temml = (function () {
11141
11237
  };
11142
11238
 
11143
11239
  /**
11240
+ * @type {import('./temml').renderToMathMLTree}
11144
11241
  * Generates and returns the Temml build tree. This is used for advanced
11145
11242
  * use cases (like rendering to custom output).
11146
11243
  */
@@ -11158,6 +11255,7 @@ var temml = (function () {
11158
11255
  }
11159
11256
  };
11160
11257
 
11258
+ /** @type {import('./temml').default} */
11161
11259
  var temml = {
11162
11260
  /**
11163
11261
  * Current Temml version