temml 0.10.14 → 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/README.md +1 -1
- package/dist/Temml-Asana.css +0 -146
- package/dist/Temml-Latin-Modern.css +0 -147
- package/dist/Temml-Libertinus.css +0 -147
- package/dist/Temml-Local.css +0 -146
- package/dist/Temml-STIX2.css +0 -146
- package/dist/temml.cjs +126 -25
- package/dist/temml.d.ts +60 -0
- package/dist/temml.js +126 -25
- package/dist/temml.min.js +1 -1
- package/dist/temml.mjs +126 -25
- package/dist/temmlPostProcess.js +1 -1
- package/package.json +4 -2
- package/src/buildMathML.js +1 -3
- package/src/environments/array.js +95 -23
- package/src/functions/enclose.js +24 -3
- package/src/postProcess.js +1 -1
- package/src/symbols.js +4 -0
- package/temml.js +6 -0
    
        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);
         | 
| @@ -2132,9 +2136,7 @@ var temml = (function () { | |
| 2132 2136 | 
             
                }
         | 
| 2133 2137 | 
             
                if (settings.displayMode) {
         | 
| 2134 2138 | 
             
                  math.setAttribute("display", "block");
         | 
| 2135 | 
            -
                  math.style.display = math | 
| 2136 | 
            -
                    ? "inline"
         | 
| 2137 | 
            -
                    : "block math"; // necessary in Chromium.
         | 
| 2139 | 
            +
                  math.style.display = "block math"; // necessary in Chromium.
         | 
| 2138 2140 | 
             
                  // Firefox and Safari do not recognize display: "block math".
         | 
| 2139 2141 | 
             
                  // Set a class so that the CSS file can set display: block.
         | 
| 2140 2142 | 
             
                  math.classes = ["tml-display"];
         | 
| @@ -3825,10 +3827,20 @@ var temml = (function () { | |
| 3825 3827 | 
             
                    node.style.borderBottom = "0.065em solid";
         | 
| 3826 3828 | 
             
                    break
         | 
| 3827 3829 | 
             
                  case "\\cancel":
         | 
| 3828 | 
            -
                    node. | 
| 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%);`;
         | 
| 3829 3836 | 
             
                    break
         | 
| 3830 3837 | 
             
                  case "\\bcancel":
         | 
| 3831 | 
            -
                    node. | 
| 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%);`;
         | 
| 3832 3844 | 
             
                    break
         | 
| 3833 3845 | 
             
                  /*
         | 
| 3834 3846 | 
             
                  case "\\longdiv":
         | 
| @@ -3872,7 +3884,18 @@ var temml = (function () { | |
| 3872 3884 | 
             
                    break
         | 
| 3873 3885 | 
             
                  }
         | 
| 3874 3886 | 
             
                  case "\\xcancel":
         | 
| 3875 | 
            -
                    node. | 
| 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) {
         | 
| @@ -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. | 
| 4329 | 
            +
                      mtr.children.forEach(cell => { cell.style.borderTop = "0.15em double"; });
         | 
| 4307 4330 | 
             
                    } else {
         | 
| 4308 | 
            -
                      mtr. | 
| 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. | 
| 4338 | 
            +
                      mtr.children.forEach(cell => { cell.style.borderBottom = "0.15em double"; });
         | 
| 4314 4339 | 
             
                    } else {
         | 
| 4315 | 
            -
                      mtr. | 
| 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 | 
            -
             | 
| 4347 | 
            +
             | 
| 4321 4348 | 
             
                if (group.envClasses.length > 0) {
         | 
| 4322 | 
            -
                   | 
| 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: [" | 
| 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 | 
            -
                 | 
| 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 ( | 
| 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 ( | 
| 4485 | 
            -
                  res.envClasses.push(" | 
| 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 | 
| 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: [" | 
| 4836 | 
            +
                    envClasses: ["abut", "jot"],
         | 
| 4742 4837 | 
             
                    addEqnNum: context.envName === "gather",
         | 
| 4743 4838 | 
             
                    emptySingleRow: true,
         | 
| 4744 4839 | 
             
                    leqno: context.parser.settings.leqno
         | 
| @@ -11002,7 +11097,7 @@ var temml = (function () { | |
| 11002 11097 | 
             
               * https://mit-license.org/
         | 
| 11003 11098 | 
             
               */
         | 
| 11004 11099 |  | 
| 11005 | 
            -
              const version = "0.10. | 
| 11100 | 
            +
              const version = "0.10.15";
         | 
| 11006 11101 |  | 
| 11007 11102 | 
             
              function postProcess(block) {
         | 
| 11008 11103 | 
             
                const labelMap = {};
         | 
| @@ -11053,6 +11148,7 @@ var temml = (function () { | |
| 11053 11148 | 
             
              /* eslint no-console:0 */
         | 
| 11054 11149 |  | 
| 11055 11150 | 
             
              /**
         | 
| 11151 | 
            +
               * @type {import('./temml').render}
         | 
| 11056 11152 | 
             
               * Parse and build an expression, and place that expression in the DOM node
         | 
| 11057 11153 | 
             
               * given.
         | 
| 11058 11154 | 
             
               */
         | 
| @@ -11090,6 +11186,7 @@ var temml = (function () { | |
| 11090 11186 | 
             
              }
         | 
| 11091 11187 |  | 
| 11092 11188 | 
             
              /**
         | 
| 11189 | 
            +
               * @type {import('./temml').renderToString}
         | 
| 11093 11190 | 
             
               * Parse and build an expression, and return the markup for that.
         | 
| 11094 11191 | 
             
               */
         | 
| 11095 11192 | 
             
              const renderToString = function(expression, options) {
         | 
| @@ -11098,6 +11195,7 @@ var temml = (function () { | |
| 11098 11195 | 
             
              };
         | 
| 11099 11196 |  | 
| 11100 11197 | 
             
              /**
         | 
| 11198 | 
            +
               * @type {import('./temml').generateParseTree}
         | 
| 11101 11199 | 
             
               * Parse an expression and return the parse tree.
         | 
| 11102 11200 | 
             
               */
         | 
| 11103 11201 | 
             
              const generateParseTree = function(expression, options) {
         | 
| @@ -11106,6 +11204,7 @@ var temml = (function () { | |
| 11106 11204 | 
             
              };
         | 
| 11107 11205 |  | 
| 11108 11206 | 
             
              /**
         | 
| 11207 | 
            +
               * @type {import('./temml').definePreamble}
         | 
| 11109 11208 | 
             
               * Take an expression which contains a preamble.
         | 
| 11110 11209 | 
             
               * Parse it and return the macros.
         | 
| 11111 11210 | 
             
               */
         | 
| @@ -11138,6 +11237,7 @@ var temml = (function () { | |
| 11138 11237 | 
             
              };
         | 
| 11139 11238 |  | 
| 11140 11239 | 
             
              /**
         | 
| 11240 | 
            +
               * @type {import('./temml').renderToMathMLTree}
         | 
| 11141 11241 | 
             
               * Generates and returns the Temml build tree. This is used for advanced
         | 
| 11142 11242 | 
             
               * use cases (like rendering to custom output).
         | 
| 11143 11243 | 
             
               */
         | 
| @@ -11155,6 +11255,7 @@ var temml = (function () { | |
| 11155 11255 | 
             
                }
         | 
| 11156 11256 | 
             
              };
         | 
| 11157 11257 |  | 
| 11258 | 
            +
              /** @type {import('./temml').default} */
         | 
| 11158 11259 | 
             
              var temml = {
         | 
| 11159 11260 | 
             
                /**
         | 
| 11160 11261 | 
             
                 * Current Temml version
         |