temml 0.10.14 → 0.10.16

Sign up to get free protection for your applications and to get access to all the features.
package/dist/temml.js CHANGED
@@ -479,7 +479,7 @@ var temml = (function () {
479
479
  }
480
480
  }
481
481
 
482
- /**
482
+ /*
483
483
  * This node represents an image embed (<img>) element.
484
484
  */
485
485
  class Img {
@@ -524,7 +524,7 @@ var temml = (function () {
524
524
  markup += ` style="${utils.escape(styles)}"`;
525
525
  }
526
526
 
527
- markup += "/>";
527
+ markup += ">";
528
528
  return markup;
529
529
  }
530
530
  }
@@ -700,6 +700,34 @@ var temml = (function () {
700
700
  * This file provides support for building horizontal stretchy elements.
701
701
  */
702
702
 
703
+ // TODO: Remove when Chromium stretches \widetilde & \widehat
704
+ const estimatedWidth = node => {
705
+ let width = 0;
706
+ if (node.body) {
707
+ for (const item of node.body) {
708
+ width += estimatedWidth(item);
709
+ }
710
+ } else if (node.type === "supsub") {
711
+ width += estimatedWidth(node.base);
712
+ if (node.sub) { width += 0.7 * estimatedWidth(node.sub); }
713
+ if (node.sup) { width += 0.7 * estimatedWidth(node.sup); }
714
+ } else if (node.type === "mathord" || node.type === "textord") {
715
+ for (const ch of node.text.split('')) {
716
+ const codePoint = ch.codePointAt(0);
717
+ if ((0x60 < codePoint && codePoint < 0x7B) || (0x03B0 < codePoint && codePoint < 0x3CA)) {
718
+ width += 0.56; // lower case latin or greek. Use advance width of letter n
719
+ } else if (0x2F < codePoint && codePoint < 0x3A) {
720
+ width += 0.50; // numerals.
721
+ } else {
722
+ width += 0.92; // advance width of letter M
723
+ }
724
+ }
725
+ } else {
726
+ width += 1.0;
727
+ }
728
+ return width
729
+ };
730
+
703
731
  const stretchyCodePoint = {
704
732
  widehat: "^",
705
733
  widecheck: "ˇ",
@@ -757,8 +785,27 @@ var temml = (function () {
757
785
  return node
758
786
  };
759
787
 
788
+ const crookedWides = ["\\widetilde", "\\widehat", "\\widecheck", "\\utilde"];
789
+
790
+ // TODO: Remove when Chromium stretches \widetilde & \widehat
791
+ const accentNode = (group) => {
792
+ const mo = mathMLnode(group.label);
793
+ if (crookedWides.includes(group.label)) {
794
+ const width = estimatedWidth(group.base);
795
+ if (1 < width && width < 1.6) {
796
+ mo.classes.push("tml-crooked-2");
797
+ } else if (1.6 <= width && width < 2.5) {
798
+ mo.classes.push("tml-crooked-3");
799
+ } else if (2.5 <= width) {
800
+ mo.classes.push("tml-crooked-4");
801
+ }
802
+ }
803
+ return mo
804
+ };
805
+
760
806
  var stretchy = {
761
- mathMLnode
807
+ mathMLnode,
808
+ accentNode
762
809
  };
763
810
 
764
811
  /**
@@ -974,6 +1021,10 @@ var temml = (function () {
974
1021
  defineSymbol(math, mathord, "\u220E", "\\QED", true);
975
1022
  defineSymbol(math, mathord, "\u2030", "\\permil", true);
976
1023
  defineSymbol(text, textord, "\u2030", "\\permil");
1024
+ defineSymbol(math, mathord, "\u2609", "\\astrosun", true);
1025
+ defineSymbol(math, mathord, "\u263c", "\\sun", true);
1026
+ defineSymbol(math, mathord, "\u263e", "\\leftmoon", true);
1027
+ defineSymbol(math, mathord, "\u263d", "\\rightmoon", true);
977
1028
 
978
1029
  // AMS Negated Binary Relations
979
1030
  defineSymbol(math, rel, "\u226e", "\\nless", true);
@@ -1052,6 +1103,8 @@ var temml = (function () {
1052
1103
  defineSymbol(math, textord, "\u2132", "\\Finv", true);
1053
1104
  defineSymbol(math, textord, "\u2141", "\\Game", true);
1054
1105
  defineSymbol(math, textord, "\u2035", "\\backprime");
1106
+ defineSymbol(math, textord, "\u2036", "\\backdprime");
1107
+ defineSymbol(math, textord, "\u2037", "\\backtrprime");
1055
1108
  defineSymbol(math, textord, "\u25b2", "\\blacktriangle");
1056
1109
  defineSymbol(math, textord, "\u25bc", "\\blacktriangledown");
1057
1110
  defineSymbol(math, textord, "\u25a0", "\\blacksquare");
@@ -1255,6 +1308,9 @@ var temml = (function () {
1255
1308
  defineSymbol(math, textord, "\u2220", "\\angle", true);
1256
1309
  defineSymbol(math, textord, "\u221e", "\\infty", true);
1257
1310
  defineSymbol(math, textord, "\u2032", "\\prime");
1311
+ defineSymbol(math, textord, "\u2033", "\\dprime");
1312
+ defineSymbol(math, textord, "\u2034", "\\trprime");
1313
+ defineSymbol(math, textord, "\u2057", "\\qprime");
1258
1314
  defineSymbol(math, textord, "\u25b3", "\\triangle");
1259
1315
  defineSymbol(text, textord, "\u0391", "\\Alpha", true);
1260
1316
  defineSymbol(text, textord, "\u0392", "\\Beta", true);
@@ -1434,7 +1490,8 @@ var temml = (function () {
1434
1490
  defineSymbol(math, bin, "\u22bc", "\\barwedge", true);
1435
1491
  defineSymbol(math, bin, "\u22bb", "\\veebar", true);
1436
1492
  defineSymbol(math, bin, "\u2299", "\\odot", true);
1437
- defineSymbol(math, bin, "\u2295", "\\oplus", true);
1493
+ // Firefox turns ⊕ into an emoji. So append \uFE0E. Define Unicode character in macros, not here.
1494
+ defineSymbol(math, bin, "\u2295\uFE0E", "\\oplus");
1438
1495
  defineSymbol(math, bin, "\u2297", "\\otimes", true);
1439
1496
  defineSymbol(math, textord, "\u2202", "\\partial", true);
1440
1497
  defineSymbol(math, bin, "\u2298", "\\oslash", true);
@@ -1665,6 +1722,8 @@ var temml = (function () {
1665
1722
  defineSymbol(math, mathord, ch, ch);
1666
1723
  defineSymbol(text, textord, ch, ch);
1667
1724
  }
1725
+ // Prevent Firefox from using a dotless i.
1726
+ defineSymbol(text, textord, "i\uFE0E", "i");
1668
1727
 
1669
1728
  // Some more letters in Unicode Basic Multilingual Plane.
1670
1729
  const narrow = "ÇÐÞçþℂℍℕℙℚℝℤℎℏℊℋℌℐℑℒℓ℘ℛℜℬℰℱℳℭℨ";
@@ -2132,9 +2191,7 @@ var temml = (function () {
2132
2191
  }
2133
2192
  if (settings.displayMode) {
2134
2193
  math.setAttribute("display", "block");
2135
- math.style.display = math.children.length === 1 && math.children[0].type === "mtable"
2136
- ? "inline"
2137
- : "block math"; // necessary in Chromium.
2194
+ math.style.display = "block math"; // necessary in Chromium.
2138
2195
  // Firefox and Safari do not recognize display: "block math".
2139
2196
  // Set a class so that the CSS file can set display: block.
2140
2197
  math.classes = ["tml-display"];
@@ -2144,7 +2201,7 @@ var temml = (function () {
2144
2201
 
2145
2202
  const mathmlBuilder$a = (group, style) => {
2146
2203
  const accentNode = group.isStretchy
2147
- ? stretchy.mathMLnode(group.label)
2204
+ ? stretchy.accentNode(group)
2148
2205
  : new mathMLTree.MathNode("mo", [makeText(group.label, group.mode)]);
2149
2206
 
2150
2207
  if (group.label === "\\vec") {
@@ -2164,25 +2221,21 @@ var temml = (function () {
2164
2221
  return node;
2165
2222
  };
2166
2223
 
2167
- const NON_STRETCHY_ACCENT_REGEX = new RegExp(
2168
- [
2169
- "\\acute",
2170
- "\\grave",
2171
- "\\ddot",
2172
- "\\dddot",
2173
- "\\ddddot",
2174
- "\\tilde",
2175
- "\\bar",
2176
- "\\breve",
2177
- "\\check",
2178
- "\\hat",
2179
- "\\vec",
2180
- "\\dot",
2181
- "\\mathring"
2182
- ]
2183
- .map((accent) => `\\${accent}`)
2184
- .join("|")
2185
- );
2224
+ const nonStretchyAccents = new Set([
2225
+ "\\acute",
2226
+ "\\grave",
2227
+ "\\ddot",
2228
+ "\\dddot",
2229
+ "\\ddddot",
2230
+ "\\tilde",
2231
+ "\\bar",
2232
+ "\\breve",
2233
+ "\\check",
2234
+ "\\hat",
2235
+ "\\vec",
2236
+ "\\dot",
2237
+ "\\mathring"
2238
+ ]);
2186
2239
 
2187
2240
  // Accents
2188
2241
  defineFunction({
@@ -2220,7 +2273,7 @@ var temml = (function () {
2220
2273
  handler: (context, args) => {
2221
2274
  const base = normalizeArgument(args[0]);
2222
2275
 
2223
- const isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);
2276
+ const isStretchy = !nonStretchyAccents.has(context.funcName);
2224
2277
 
2225
2278
  return {
2226
2279
  type: "accent",
@@ -2258,7 +2311,6 @@ var temml = (function () {
2258
2311
  mode: mode,
2259
2312
  label: context.funcName,
2260
2313
  isStretchy: false,
2261
- isShifty: true,
2262
2314
  base: base
2263
2315
  };
2264
2316
  },
@@ -2288,7 +2340,7 @@ var temml = (function () {
2288
2340
  };
2289
2341
  },
2290
2342
  mathmlBuilder: (group, style) => {
2291
- const accentNode = stretchy.mathMLnode(group.label);
2343
+ const accentNode = stretchy.accentNode(group);
2292
2344
  accentNode.style["math-depth"] = 0;
2293
2345
  const node = new mathMLTree.MathNode("munder", [
2294
2346
  buildGroup$1(group.base, style),
@@ -3825,10 +3877,20 @@ var temml = (function () {
3825
3877
  node.style.borderBottom = "0.065em solid";
3826
3878
  break
3827
3879
  case "\\cancel":
3828
- node.classes.push("cancel");
3880
+ node.style.background = `linear-gradient(to top left,
3881
+ rgba(0,0,0,0) 0%,
3882
+ rgba(0,0,0,0) calc(50% - 0.06em),
3883
+ rgba(0,0,0,1) 50%,
3884
+ rgba(0,0,0,0) calc(50% + 0.06em),
3885
+ rgba(0,0,0,0) 100%);`;
3829
3886
  break
3830
3887
  case "\\bcancel":
3831
- node.classes.push("bcancel");
3888
+ node.style.background = `linear-gradient(to top right,
3889
+ rgba(0,0,0,0) 0%,
3890
+ rgba(0,0,0,0) calc(50% - 0.06em),
3891
+ rgba(0,0,0,1) 50%,
3892
+ rgba(0,0,0,0) calc(50% + 0.06em),
3893
+ rgba(0,0,0,0) 100%);`;
3832
3894
  break
3833
3895
  /*
3834
3896
  case "\\longdiv":
@@ -3872,7 +3934,18 @@ var temml = (function () {
3872
3934
  break
3873
3935
  }
3874
3936
  case "\\xcancel":
3875
- node.classes.push("xcancel");
3937
+ node.style.background = `linear-gradient(to top left,
3938
+ rgba(0,0,0,0) 0%,
3939
+ rgba(0,0,0,0) calc(50% - 0.06em),
3940
+ rgba(0,0,0,1) 50%,
3941
+ rgba(0,0,0,0) calc(50% + 0.06em),
3942
+ rgba(0,0,0,0) 100%),
3943
+ linear-gradient(to top right,
3944
+ rgba(0,0,0,0) 0%,
3945
+ rgba(0,0,0,0) calc(50% - 0.06em),
3946
+ rgba(0,0,0,1) 50%,
3947
+ rgba(0,0,0,0) calc(50% + 0.06em),
3948
+ rgba(0,0,0,0) 100%);`;
3876
3949
  break
3877
3950
  }
3878
3951
  if (group.backgroundColor) {
@@ -4303,24 +4376,98 @@ var temml = (function () {
4303
4376
  // Write horizontal rules
4304
4377
  if (i === 0 && hlines[0].length > 0) {
4305
4378
  if (hlines[0].length === 2) {
4306
- mtr.classes.push("tml-top-double");
4379
+ mtr.children.forEach(cell => { cell.style.borderTop = "0.15em double"; });
4307
4380
  } else {
4308
- mtr.classes.push(hlines[0][0] ? "tml-top-dashed" : "tml-top-solid");
4381
+ mtr.children.forEach(cell => {
4382
+ cell.style.borderTop = hlines[0][0] ? "0.06em dashed" : "0.06em solid";
4383
+ });
4309
4384
  }
4310
4385
  }
4311
4386
  if (hlines[i + 1].length > 0) {
4312
4387
  if (hlines[i + 1].length === 2) {
4313
- mtr.classes.push("tml-hline-double");
4388
+ mtr.children.forEach(cell => { cell.style.borderBottom = "0.15em double"; });
4314
4389
  } else {
4315
- mtr.classes.push(hlines[i + 1][0] ? "tml-hline-dashed" : "tml-hline-solid");
4390
+ mtr.children.forEach(cell => {
4391
+ cell.style.borderBottom = hlines[i + 1][0] ? "0.06em dashed" : "0.06em solid";
4392
+ });
4316
4393
  }
4317
4394
  }
4318
4395
  tbl.push(mtr);
4319
4396
  }
4320
- let table = new mathMLTree.MathNode("mtable", tbl);
4397
+
4321
4398
  if (group.envClasses.length > 0) {
4322
- table.classes = group.envClasses.map(e => "tml-" + e);
4399
+ const pad = group.envClasses.includes("jot")
4400
+ ? "0.7" // 0.5ex + 0.09em top & bot padding
4401
+ : group.envClasses.includes("small")
4402
+ ? "0.35"
4403
+ : "0.5"; // 0.5ex default top & bot padding
4404
+ const sidePadding = group.envClasses.includes("abut")
4405
+ ? "0"
4406
+ : group.envClasses.includes("cases")
4407
+ ? "0"
4408
+ : group.envClasses.includes("small")
4409
+ ? "0.1389"
4410
+ : group.envClasses.includes("cd")
4411
+ ? "0.25"
4412
+ : "0.4"; // default side padding
4413
+
4414
+ const numCols = tbl.length === 0 ? 0 : tbl[0].children.length;
4415
+
4416
+ const sidePad = (j, hand) => {
4417
+ if (j === 0 && hand === 0) { return "0" }
4418
+ if (j === numCols - 1 && hand === 1) { return "0" }
4419
+ if (group.envClasses[0] !== "align") { return sidePadding }
4420
+ if (hand === 1) { return "0" }
4421
+ if (group.addEqnNum) {
4422
+ return (j % 2) ? "1" : "0"
4423
+ } else {
4424
+ return (j % 2) ? "0" : "1"
4425
+ }
4426
+ };
4427
+
4428
+ // Padding
4429
+ for (let i = 0; i < tbl.length; i++) {
4430
+ for (let j = 0; j < tbl[i].children.length; j++) {
4431
+ tbl[i].children[j].style.padding = `${pad}ex ${sidePad(j, 1)}em ${pad}ex ${sidePad(j, 0)}em`;
4432
+ }
4433
+ }
4434
+
4435
+ // Justification
4436
+ const align = group.envClasses.includes("align") || group.envClasses.includes("alignat");
4437
+ for (let i = 0; i < tbl.length; i++) {
4438
+ const row = tbl[i];
4439
+ if (align) {
4440
+ for (let j = 0; j < row.children.length; j++) {
4441
+ // Chromium does not recognize text-align: left. Use -webkit-
4442
+ // TODO: Remove -webkit- when Chromium no longer needs it.
4443
+ row.children[j].style.textAlign = "-webkit-" + (j % 2 ? "left" : "right");
4444
+ }
4445
+ if (group.addEqnNum) {
4446
+ const k = group.leqno ? 0 : row.children.length - 1;
4447
+ row.children[k].style.textAlign = "-webkit-" + (group.leqno ? "left" : "right");
4448
+ }
4449
+ }
4450
+ if (row.children.length > 1 && group.envClasses.includes("cases")) {
4451
+ row.children[1].style.padding = row.children[1].style.padding.replace(/0em$/, "1em");
4452
+ }
4453
+
4454
+ if (group.envClasses.includes("cases") || group.envClasses.includes("subarray")) {
4455
+ for (const cell of row.children) {
4456
+ cell.style.textAlign = "-webkit-" + "left";
4457
+ }
4458
+ }
4459
+ }
4460
+ } else {
4461
+ // Set zero padding on side of the matrix
4462
+ for (let i = 0; i < tbl.length; i++) {
4463
+ tbl[i].children[0].style.paddingLeft = "0em";
4464
+ if (tbl[i].children.length === tbl[0].children.length) {
4465
+ tbl[i].children[tbl[i].children.length - 1].style.paddingRight = "0em";
4466
+ }
4467
+ }
4323
4468
  }
4469
+
4470
+ let table = new mathMLTree.MathNode("mtable", tbl);
4324
4471
  if (group.scriptLevel === "display") { table.setAttribute("displaystyle", "true"); }
4325
4472
 
4326
4473
  if (group.addEqnNum || group.envClasses.includes("multline")) {
@@ -4400,6 +4547,8 @@ var temml = (function () {
4400
4547
  align = "left " + (align.length > 0 ? align : "center ") + "right ";
4401
4548
  }
4402
4549
  if (align) {
4550
+ // Firefox reads this attribute, not the -webkit-left|right written above.
4551
+ // TODO: When Chrome no longer needs "-webkit-", use CSS and delete the next line.
4403
4552
  table.setAttribute("columnalign", align.trim());
4404
4553
  }
4405
4554
 
@@ -4424,7 +4573,7 @@ var temml = (function () {
4424
4573
  cols,
4425
4574
  addEqnNum: context.envName === "align" || context.envName === "alignat",
4426
4575
  emptySingleRow: true,
4427
- envClasses: ["jot", "abut"], // set row spacing & provisional column spacing
4576
+ envClasses: ["abut", "jot"], // set row spacing & provisional column spacing
4428
4577
  maxNumCols: context.envName === "split" ? 2 : undefined,
4429
4578
  leqno: context.parser.settings.leqno
4430
4579
  },
@@ -4442,18 +4591,22 @@ var temml = (function () {
4442
4591
  // binary. This behavior is implemented in amsmath's \start@aligned.
4443
4592
  let numMaths;
4444
4593
  let numCols = 0;
4445
- if (args[0] && args[0].type === "ordgroup") {
4594
+ const isAlignedAt = context.envName.indexOf("at") > -1;
4595
+ if (args[0] && isAlignedAt) {
4596
+ // alignat environment takes an argument w/ number of columns
4446
4597
  let arg0 = "";
4447
4598
  for (let i = 0; i < args[0].body.length; i++) {
4448
4599
  const textord = assertNodeType(args[0].body[i], "textord");
4449
4600
  arg0 += textord.text;
4450
4601
  }
4602
+ if (isNaN(arg0)) {
4603
+ throw new ParseError("The alignat enviroment requires a numeric first argument.")
4604
+ }
4451
4605
  numMaths = Number(arg0);
4452
4606
  numCols = numMaths * 2;
4453
4607
  }
4454
- const isAligned = !numCols;
4455
4608
  res.body.forEach(function(row) {
4456
- if (!isAligned) {
4609
+ if (isAlignedAt) {
4457
4610
  // Case 1
4458
4611
  const curMaths = row.length / 2;
4459
4612
  if (numMaths < curMaths) {
@@ -4481,14 +4634,10 @@ var temml = (function () {
4481
4634
  align: align
4482
4635
  };
4483
4636
  }
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
4637
+ if (context.envName === "split") ; else if (isAlignedAt) {
4638
+ res.envClasses.push("alignat"); // Sets justification
4490
4639
  } else {
4491
- res.envClasses.push("aligned"); // Sets justification
4640
+ res.envClasses[0] = "align"; // Sets column spacing & justification
4492
4641
  }
4493
4642
  return res;
4494
4643
  };
@@ -4738,7 +4887,7 @@ var temml = (function () {
4738
4887
  }
4739
4888
  const res = {
4740
4889
  cols: [],
4741
- envClasses: ["jot", "abut"],
4890
+ envClasses: ["abut", "jot"],
4742
4891
  addEqnNum: context.envName === "gather",
4743
4892
  emptySingleRow: true,
4744
4893
  leqno: context.parser.settings.leqno
@@ -7237,7 +7386,14 @@ var temml = (function () {
7237
7386
  }
7238
7387
 
7239
7388
  if (group.sup) {
7240
- children.push(buildGroup$1(group.sup, childStyle));
7389
+ const sup = buildGroup$1(group.sup, childStyle);
7390
+ const testNode = sup.type === "mrow" ? sup.children[0] : sup;
7391
+ if ((testNode.type === "mo" && testNode.classes.includes("tml-prime"))
7392
+ && group.base && group.base.text && group.base.text === "f") {
7393
+ // Chromium does not address italic correction on prime. Prevent f′ from overlapping.
7394
+ testNode.classes.push("prime-pad");
7395
+ }
7396
+ children.push(sup);
7241
7397
  }
7242
7398
 
7243
7399
  let nodeType;
@@ -7703,6 +7859,8 @@ var temml = (function () {
7703
7859
 
7704
7860
  const numberRegEx = /^\d(?:[\d,.]*\d)?$/;
7705
7861
  const latinRegEx = /[A-Ba-z]/;
7862
+ const primes = new Set(["\\prime", "\\dprime", "\\trprime", "\\qprime",
7863
+ "\\backprime", "\\backdprime", "\\backtrprime"]);
7706
7864
 
7707
7865
  const italicNumber = (text, variant, tag) => {
7708
7866
  const mn = new mathMLTree.MathNode(tag, [text]);
@@ -7770,7 +7928,7 @@ var temml = (function () {
7770
7928
  text.text = variantChar(text.text, variant);
7771
7929
  }
7772
7930
  node = new mathMLTree.MathNode("mtext", [text]);
7773
- } else if (group.text === "\\prime") {
7931
+ } else if (primes.has(group.text)) {
7774
7932
  node = new mathMLTree.MathNode("mo", [text]);
7775
7933
  // TODO: If/when Chromium uses ssty variant for prime, remove the next line.
7776
7934
  node.classes.push("tml-prime");
@@ -8424,6 +8582,9 @@ var temml = (function () {
8424
8582
  // This macro provides a better rendering.
8425
8583
  defineMacro("\\surd", '\\sqrt{\\vphantom{|}}');
8426
8584
 
8585
+ // See comment for \oplus in symbols.js.
8586
+ defineMacro("\u2295", "\\oplus");
8587
+
8427
8588
  defineMacro("\\hbox", "\\text{#1}");
8428
8589
 
8429
8590
  // Per TeXbook p.122, "/" gets zero operator spacing.
@@ -10804,7 +10965,6 @@ var temml = (function () {
10804
10965
  loc: SourceLocation.range(nucleus),
10805
10966
  label: command,
10806
10967
  isStretchy: false,
10807
- isShifty: true,
10808
10968
  base: symbol
10809
10969
  };
10810
10970
  }
@@ -11002,7 +11162,7 @@ var temml = (function () {
11002
11162
  * https://mit-license.org/
11003
11163
  */
11004
11164
 
11005
- const version = "0.10.14";
11165
+ const version = "0.10.16";
11006
11166
 
11007
11167
  function postProcess(block) {
11008
11168
  const labelMap = {};
@@ -11053,6 +11213,7 @@ var temml = (function () {
11053
11213
  /* eslint no-console:0 */
11054
11214
 
11055
11215
  /**
11216
+ * @type {import('./temml').render}
11056
11217
  * Parse and build an expression, and place that expression in the DOM node
11057
11218
  * given.
11058
11219
  */
@@ -11090,6 +11251,7 @@ var temml = (function () {
11090
11251
  }
11091
11252
 
11092
11253
  /**
11254
+ * @type {import('./temml').renderToString}
11093
11255
  * Parse and build an expression, and return the markup for that.
11094
11256
  */
11095
11257
  const renderToString = function(expression, options) {
@@ -11098,6 +11260,7 @@ var temml = (function () {
11098
11260
  };
11099
11261
 
11100
11262
  /**
11263
+ * @type {import('./temml').generateParseTree}
11101
11264
  * Parse an expression and return the parse tree.
11102
11265
  */
11103
11266
  const generateParseTree = function(expression, options) {
@@ -11106,6 +11269,7 @@ var temml = (function () {
11106
11269
  };
11107
11270
 
11108
11271
  /**
11272
+ * @type {import('./temml').definePreamble}
11109
11273
  * Take an expression which contains a preamble.
11110
11274
  * Parse it and return the macros.
11111
11275
  */
@@ -11138,6 +11302,7 @@ var temml = (function () {
11138
11302
  };
11139
11303
 
11140
11304
  /**
11305
+ * @type {import('./temml').renderToMathMLTree}
11141
11306
  * Generates and returns the Temml build tree. This is used for advanced
11142
11307
  * use cases (like rendering to custom output).
11143
11308
  */
@@ -11155,6 +11320,7 @@ var temml = (function () {
11155
11320
  }
11156
11321
  };
11157
11322
 
11323
+ /** @type {import('./temml').default} */
11158
11324
  var temml = {
11159
11325
  /**
11160
11326
  * Current Temml version