temml 0.10.29 → 0.10.31
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 +2 -2
- package/dist/temml.cjs +18 -6
- package/dist/temml.js +18 -6
- package/dist/temml.min.js +1 -1
- package/dist/temml.mjs +18 -6
- package/dist/temmlPostProcess.js +1 -1
- package/package.json +5 -5
- package/src/Parser.js +1 -0
- package/src/functions/color.js +2 -0
- package/src/functions/delimsizing.js +14 -5
- package/src/postProcess.js +1 -1
package/README.md
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
|
3
3
|
| Library | Minified JavaScript + CSS |
|
4
4
|
|:--------------|:-------------------------:|
|
5
|
-
| Temml |
|
5
|
+
| Temml | 158 KB |
|
6
6
|
| MathJax 2.7.5 | 338 KB |
|
7
7
|
| KaTeX | 280 KB |
|
8
8
|
| TeXZilla | 168 KB |
|
9
9
|
|
10
10
|
As a futher advantage, Temml can use local system fonts. The minimum Temml installation serves a font file that is only 10kb. Sadly, Chromium has some rendering bugs when using system fonts. It
|
11
|
-
|
11
|
+
works better with the Latin Modern font, a 380 KB file.
|
12
12
|
|
13
13
|
Temml’s coverage of LaTeX functions is as good as MathJax, slightly better than KaTeX 0.16.0 and substantially better than TeXZilla. See a [detailed coverage comparison](https://temml.org/docs/en/comparison.html).
|
14
14
|
|
package/dist/temml.cjs
CHANGED
@@ -3391,6 +3391,7 @@ defineFunction({
|
|
3391
3391
|
type: "color",
|
3392
3392
|
mode: parser.mode,
|
3393
3393
|
color,
|
3394
|
+
isTextColor: true,
|
3394
3395
|
body: ordargument(body)
|
3395
3396
|
}
|
3396
3397
|
},
|
@@ -3423,6 +3424,7 @@ defineFunction({
|
|
3423
3424
|
type: "color",
|
3424
3425
|
mode: parser.mode,
|
3425
3426
|
color,
|
3427
|
+
isTextColor: false,
|
3426
3428
|
body
|
3427
3429
|
}
|
3428
3430
|
},
|
@@ -3866,10 +3868,8 @@ function checkDelimiter(delim, context) {
|
|
3866
3868
|
if (symDelim && delimiters.includes(symDelim.text)) {
|
3867
3869
|
// If a character is not in the MathML operator dictionary, it will not stretch.
|
3868
3870
|
// Replace such characters w/characters that will stretch.
|
3869
|
-
if (["/", "\u2044"].includes(symDelim.text)) { symDelim.text = "\u2215"; }
|
3870
3871
|
if (["<", "\\lt"].includes(symDelim.text)) { symDelim.text = "⟨"; }
|
3871
3872
|
if ([">", "\\gt"].includes(symDelim.text)) { symDelim.text = "⟩"; }
|
3872
|
-
if (symDelim.text === "\\backslash") { symDelim.text = "\u2216"; }
|
3873
3873
|
return symDelim;
|
3874
3874
|
} else if (symDelim) {
|
3875
3875
|
throw new ParseError(`Invalid delimiter '${symDelim.text}' after '${context.funcName}'`, delim);
|
@@ -3878,6 +3878,9 @@ function checkDelimiter(delim, context) {
|
|
3878
3878
|
}
|
3879
3879
|
}
|
3880
3880
|
|
3881
|
+
// / \
|
3882
|
+
const needExplicitStretch = ["\u002F", "\u005C", "\\backslash", "\\vert", "|"];
|
3883
|
+
|
3881
3884
|
defineFunction({
|
3882
3885
|
type: "delimsizing",
|
3883
3886
|
names: [
|
@@ -3930,8 +3933,7 @@ defineFunction({
|
|
3930
3933
|
// defaults.
|
3931
3934
|
node.setAttribute("fence", "false");
|
3932
3935
|
}
|
3933
|
-
if (group.delim
|
3934
|
-
group.delim === "|" || group.delim.indexOf("arrow") > -1) {
|
3936
|
+
if (needExplicitStretch.includes(group.delim) || group.delim.indexOf("arrow") > -1) {
|
3935
3937
|
// We have to explicitly set stretchy to true.
|
3936
3938
|
node.setAttribute("stretchy", "true");
|
3937
3939
|
}
|
@@ -4017,7 +4019,7 @@ defineFunction({
|
|
4017
4019
|
const leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]);
|
4018
4020
|
leftNode.setAttribute("fence", "true");
|
4019
4021
|
leftNode.setAttribute("form", "prefix");
|
4020
|
-
if (group.left === "\
|
4022
|
+
if (group.left === "/" || group.left === "\u005C" || group.left.indexOf("arrow") > -1) {
|
4021
4023
|
leftNode.setAttribute("stretchy", "true");
|
4022
4024
|
}
|
4023
4025
|
inner.unshift(leftNode);
|
@@ -4029,6 +4031,15 @@ defineFunction({
|
|
4029
4031
|
if (group.right === "\u2216" || group.right.indexOf("arrow") > -1) {
|
4030
4032
|
rightNode.setAttribute("stretchy", "true");
|
4031
4033
|
}
|
4034
|
+
if (group.body.length > 0) {
|
4035
|
+
const lastElement = group.body[group.body.length - 1];
|
4036
|
+
if (lastElement.type === "color" && !lastElement.isTextColor) {
|
4037
|
+
// \color is a switch. If the last element is of type "color" then
|
4038
|
+
// the user set the \color switch and left it on.
|
4039
|
+
// A \right delimiter turns the switch off, but the delimiter itself gets the color.
|
4040
|
+
rightNode.setAttribute("mathcolor", lastElement.color);
|
4041
|
+
}
|
4042
|
+
}
|
4032
4043
|
inner.push(rightNode);
|
4033
4044
|
|
4034
4045
|
return makeRow(inner);
|
@@ -12494,6 +12505,7 @@ class Parser {
|
|
12494
12505
|
*/
|
12495
12506
|
parseExpression(breakOnInfix, breakOnTokenText, breakOnMiddle) {
|
12496
12507
|
const body = [];
|
12508
|
+
this.prevAtomType = "";
|
12497
12509
|
// Keep adding atoms to the body until we can't parse any more atoms (either
|
12498
12510
|
// we reached the end, a }, or a \right)
|
12499
12511
|
while (true) {
|
@@ -13491,7 +13503,7 @@ class Style {
|
|
13491
13503
|
* https://mit-license.org/
|
13492
13504
|
*/
|
13493
13505
|
|
13494
|
-
const version = "0.10.
|
13506
|
+
const version = "0.10.31";
|
13495
13507
|
|
13496
13508
|
function postProcess(block) {
|
13497
13509
|
const labelMap = {};
|
package/dist/temml.js
CHANGED
@@ -3392,6 +3392,7 @@ var temml = (function () {
|
|
3392
3392
|
type: "color",
|
3393
3393
|
mode: parser.mode,
|
3394
3394
|
color,
|
3395
|
+
isTextColor: true,
|
3395
3396
|
body: ordargument(body)
|
3396
3397
|
}
|
3397
3398
|
},
|
@@ -3424,6 +3425,7 @@ var temml = (function () {
|
|
3424
3425
|
type: "color",
|
3425
3426
|
mode: parser.mode,
|
3426
3427
|
color,
|
3428
|
+
isTextColor: false,
|
3427
3429
|
body
|
3428
3430
|
}
|
3429
3431
|
},
|
@@ -3867,10 +3869,8 @@ var temml = (function () {
|
|
3867
3869
|
if (symDelim && delimiters.includes(symDelim.text)) {
|
3868
3870
|
// If a character is not in the MathML operator dictionary, it will not stretch.
|
3869
3871
|
// Replace such characters w/characters that will stretch.
|
3870
|
-
if (["/", "\u2044"].includes(symDelim.text)) { symDelim.text = "\u2215"; }
|
3871
3872
|
if (["<", "\\lt"].includes(symDelim.text)) { symDelim.text = "⟨"; }
|
3872
3873
|
if ([">", "\\gt"].includes(symDelim.text)) { symDelim.text = "⟩"; }
|
3873
|
-
if (symDelim.text === "\\backslash") { symDelim.text = "\u2216"; }
|
3874
3874
|
return symDelim;
|
3875
3875
|
} else if (symDelim) {
|
3876
3876
|
throw new ParseError(`Invalid delimiter '${symDelim.text}' after '${context.funcName}'`, delim);
|
@@ -3879,6 +3879,9 @@ var temml = (function () {
|
|
3879
3879
|
}
|
3880
3880
|
}
|
3881
3881
|
|
3882
|
+
// / \
|
3883
|
+
const needExplicitStretch = ["\u002F", "\u005C", "\\backslash", "\\vert", "|"];
|
3884
|
+
|
3882
3885
|
defineFunction({
|
3883
3886
|
type: "delimsizing",
|
3884
3887
|
names: [
|
@@ -3931,8 +3934,7 @@ var temml = (function () {
|
|
3931
3934
|
// defaults.
|
3932
3935
|
node.setAttribute("fence", "false");
|
3933
3936
|
}
|
3934
|
-
if (group.delim
|
3935
|
-
group.delim === "|" || group.delim.indexOf("arrow") > -1) {
|
3937
|
+
if (needExplicitStretch.includes(group.delim) || group.delim.indexOf("arrow") > -1) {
|
3936
3938
|
// We have to explicitly set stretchy to true.
|
3937
3939
|
node.setAttribute("stretchy", "true");
|
3938
3940
|
}
|
@@ -4018,7 +4020,7 @@ var temml = (function () {
|
|
4018
4020
|
const leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]);
|
4019
4021
|
leftNode.setAttribute("fence", "true");
|
4020
4022
|
leftNode.setAttribute("form", "prefix");
|
4021
|
-
if (group.left === "\
|
4023
|
+
if (group.left === "/" || group.left === "\u005C" || group.left.indexOf("arrow") > -1) {
|
4022
4024
|
leftNode.setAttribute("stretchy", "true");
|
4023
4025
|
}
|
4024
4026
|
inner.unshift(leftNode);
|
@@ -4030,6 +4032,15 @@ var temml = (function () {
|
|
4030
4032
|
if (group.right === "\u2216" || group.right.indexOf("arrow") > -1) {
|
4031
4033
|
rightNode.setAttribute("stretchy", "true");
|
4032
4034
|
}
|
4035
|
+
if (group.body.length > 0) {
|
4036
|
+
const lastElement = group.body[group.body.length - 1];
|
4037
|
+
if (lastElement.type === "color" && !lastElement.isTextColor) {
|
4038
|
+
// \color is a switch. If the last element is of type "color" then
|
4039
|
+
// the user set the \color switch and left it on.
|
4040
|
+
// A \right delimiter turns the switch off, but the delimiter itself gets the color.
|
4041
|
+
rightNode.setAttribute("mathcolor", lastElement.color);
|
4042
|
+
}
|
4043
|
+
}
|
4033
4044
|
inner.push(rightNode);
|
4034
4045
|
|
4035
4046
|
return makeRow(inner);
|
@@ -10581,6 +10592,7 @@ var temml = (function () {
|
|
10581
10592
|
*/
|
10582
10593
|
parseExpression(breakOnInfix, breakOnTokenText, breakOnMiddle) {
|
10583
10594
|
const body = [];
|
10595
|
+
this.prevAtomType = "";
|
10584
10596
|
// Keep adding atoms to the body until we can't parse any more atoms (either
|
10585
10597
|
// we reached the end, a }, or a \right)
|
10586
10598
|
while (true) {
|
@@ -11578,7 +11590,7 @@ var temml = (function () {
|
|
11578
11590
|
* https://mit-license.org/
|
11579
11591
|
*/
|
11580
11592
|
|
11581
|
-
const version = "0.10.
|
11593
|
+
const version = "0.10.31";
|
11582
11594
|
|
11583
11595
|
function postProcess(block) {
|
11584
11596
|
const labelMap = {};
|