temml 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +1 -1
- package/dist/Temml-Asana.css +3 -0
- package/dist/Temml-Latin-Modern.css +3 -0
- package/dist/Temml-Libertinus.css +3 -0
- package/dist/Temml-Local.css +3 -0
- package/dist/Temml-STIX2.css +3 -0
- package/dist/temml.cjs +38 -26
- package/dist/temml.js +38 -26
- package/dist/temml.min.js +1 -1
- package/dist/temml.mjs +38 -26
- package/dist/temmlPostProcess.js +1 -1
- package/package.json +1 -1
- package/src/buildMathML.js +1 -3
- package/src/functions/enclose.js +20 -1
- package/src/functions/pmb.js +3 -4
- package/src/functions/symbolsOrd.js +12 -16
- package/src/macros.js +1 -1
- package/src/postProcess.js +1 -1
package/dist/temml.mjs
CHANGED
@@ -2077,8 +2077,6 @@ function buildMathML(tree, texExpression, style, settings) {
|
|
2077
2077
|
let wrapper = expression.length === 1 && tag === null && (n1 instanceof MathNode)
|
2078
2078
|
&& !(n1.type === "mstyle" && n1.attributes.mathcolor)
|
2079
2079
|
? expression[0]
|
2080
|
-
: expression.length > 1 && wrap === "none"
|
2081
|
-
? new mathMLTree.MathNode("mrow", expression)
|
2082
2080
|
: setLineBreaks(expression, wrap, settings.displayMode);
|
2083
2081
|
|
2084
2082
|
if (tag) {
|
@@ -2093,7 +2091,7 @@ function buildMathML(tree, texExpression, style, settings) {
|
|
2093
2091
|
wrapper = new mathMLTree.MathNode("semantics", [wrapper, annotation]);
|
2094
2092
|
}
|
2095
2093
|
|
2096
|
-
if (wrap !== "none") {
|
2094
|
+
if (wrap !== "none" && wrapper.children.length > 1) {
|
2097
2095
|
const maths = [];
|
2098
2096
|
for (let i = 0; i < wrapper.children.length; i++) {
|
2099
2097
|
const math = new mathMLTree.MathNode("math", [wrapper.children[i]]);
|
@@ -3907,7 +3905,7 @@ defineFunction({
|
|
3907
3905
|
|
3908
3906
|
defineFunction({
|
3909
3907
|
type: "enclose",
|
3910
|
-
names: ["\\angl", "\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\overline"
|
3908
|
+
names: ["\\angl", "\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\overline"],
|
3911
3909
|
// , "\\phase", "\\longdiv"
|
3912
3910
|
props: {
|
3913
3911
|
numArgs: 1
|
@@ -3924,6 +3922,25 @@ defineFunction({
|
|
3924
3922
|
mathmlBuilder: mathmlBuilder$8
|
3925
3923
|
});
|
3926
3924
|
|
3925
|
+
defineFunction({
|
3926
|
+
type: "enclose",
|
3927
|
+
names: ["\\underline"],
|
3928
|
+
props: {
|
3929
|
+
numArgs: 1,
|
3930
|
+
allowedInText: true
|
3931
|
+
},
|
3932
|
+
handler({ parser, funcName }, args) {
|
3933
|
+
const body = args[0];
|
3934
|
+
return {
|
3935
|
+
type: "enclose",
|
3936
|
+
mode: parser.mode,
|
3937
|
+
label: funcName,
|
3938
|
+
body
|
3939
|
+
};
|
3940
|
+
},
|
3941
|
+
mathmlBuilder: mathmlBuilder$8
|
3942
|
+
});
|
3943
|
+
|
3927
3944
|
/**
|
3928
3945
|
* All registered environments.
|
3929
3946
|
* `environments.js` exports this same dictionary again and makes it public.
|
@@ -6729,10 +6746,9 @@ defineFunction({
|
|
6729
6746
|
}
|
6730
6747
|
});
|
6731
6748
|
|
6732
|
-
// \pmb is a simulation of bold font.
|
6749
|
+
// In LaTeX, \pmb is a simulation of bold font.
|
6733
6750
|
// The version of \pmb in ambsy.sty works by typesetting three copies of the argument
|
6734
|
-
// with small offsets. We use CSS
|
6735
|
-
// It's a hack. Not as good as a real bold font. Better than nothing.
|
6751
|
+
// with small offsets. We use CSS font-weight:bold.
|
6736
6752
|
|
6737
6753
|
defineFunction({
|
6738
6754
|
type: "pmb",
|
@@ -6752,7 +6768,7 @@ defineFunction({
|
|
6752
6768
|
const inner = buildExpression(group.body, style);
|
6753
6769
|
// Wrap with an <mstyle> element.
|
6754
6770
|
const node = wrapWithMstyle(inner);
|
6755
|
-
node.setAttribute("style", "
|
6771
|
+
node.setAttribute("style", "font-weight:bold");
|
6756
6772
|
return node
|
6757
6773
|
}
|
6758
6774
|
});
|
@@ -7625,8 +7641,8 @@ const smallCaps = Object.freeze({
|
|
7625
7641
|
const numberRegEx$1 = /^\d(?:[\d,.]*\d)?$/; // Keep in sync with numberRegEx in Parser.js
|
7626
7642
|
const latinRegEx = /[A-Ba-z]/;
|
7627
7643
|
|
7628
|
-
const italicNumber = (text, variant) => {
|
7629
|
-
const mn = new mathMLTree.MathNode(
|
7644
|
+
const italicNumber = (text, variant, tag) => {
|
7645
|
+
const mn = new mathMLTree.MathNode(tag, [text]);
|
7630
7646
|
const wrapper = new mathMLTree.MathNode("mstyle", [mn]);
|
7631
7647
|
wrapper.style["font-style"] = "italic";
|
7632
7648
|
wrapper.style["font-family"] = "Cambria, 'Times New Roman', serif";
|
@@ -7676,28 +7692,24 @@ defineFunctionBuilders({
|
|
7676
7692
|
const variant = getVariant(group, style) || "normal";
|
7677
7693
|
|
7678
7694
|
let node;
|
7679
|
-
if (group.
|
7680
|
-
|
7681
|
-
if (numberRegEx$1.test(group.text)) {
|
7682
|
-
return italicNumber(text, variant)
|
7683
|
-
}
|
7684
|
-
}
|
7685
|
-
if (variant !== "normal") {
|
7686
|
-
text.text = variantChar(text.text, variant);
|
7687
|
-
}
|
7688
|
-
node = new mathMLTree.MathNode("mtext", [text]);
|
7689
|
-
} else if (numberRegEx$1.test(group.text)) {
|
7695
|
+
if (numberRegEx$1.test(group.text)) {
|
7696
|
+
const tag = group.mode === "text" ? "mtext" : "mn";
|
7690
7697
|
if (variant === "oldstylenums") {
|
7691
7698
|
const ms = new mathMLTree.MathNode("mstyle", [text], ["oldstylenums"]);
|
7692
|
-
node = new mathMLTree.MathNode(
|
7699
|
+
node = new mathMLTree.MathNode(tag, [ms]);
|
7693
7700
|
} else if (variant === "italic" || variant === "bold-italic") {
|
7694
|
-
return italicNumber(text, variant)
|
7701
|
+
return italicNumber(text, variant, tag)
|
7695
7702
|
} else {
|
7696
7703
|
if (variant !== "normal") {
|
7697
7704
|
text.text = text.text.split("").map(c => variantChar(c, variant)).join("");
|
7698
7705
|
}
|
7699
|
-
node = new mathMLTree.MathNode(
|
7706
|
+
node = new mathMLTree.MathNode(tag, [text]);
|
7700
7707
|
}
|
7708
|
+
} else if (group.mode === "text") {
|
7709
|
+
if (variant !== "normal") {
|
7710
|
+
text.text = variantChar(text.text, variant);
|
7711
|
+
}
|
7712
|
+
node = new mathMLTree.MathNode("mtext", [text]);
|
7701
7713
|
} else if (group.text === "\\prime") {
|
7702
7714
|
node = new mathMLTree.MathNode("mo", [text]);
|
7703
7715
|
// TODO: If/when Chromium uses ssty variant for prime, remove the next line.
|
@@ -8396,7 +8408,7 @@ defineMacro("\\underbar", "\\underline{\\text{#1}}");
|
|
8396
8408
|
// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
|
8397
8409
|
// We'll call \varvdots, which gets a glyph from symbols.js.
|
8398
8410
|
// The zero-width rule gets us an equivalent to the vertical 6pt kern.
|
8399
|
-
defineMacro("\\vdots", "
|
8411
|
+
defineMacro("\\vdots", "{\\varvdots\\rule{0pt}{15pt}}");
|
8400
8412
|
defineMacro("\u22ee", "\\vdots");
|
8401
8413
|
|
8402
8414
|
//////////////////////////////////////////////////////////////////////
|
@@ -12907,7 +12919,7 @@ class Style {
|
|
12907
12919
|
* https://mit-license.org/
|
12908
12920
|
*/
|
12909
12921
|
|
12910
|
-
const version = "0.9.
|
12922
|
+
const version = "0.9.2";
|
12911
12923
|
|
12912
12924
|
function postProcess(block) {
|
12913
12925
|
const labelMap = {};
|
package/dist/temmlPostProcess.js
CHANGED
package/package.json
CHANGED
package/src/buildMathML.js
CHANGED
@@ -195,8 +195,6 @@ export default function buildMathML(tree, texExpression, style, settings) {
|
|
195
195
|
let wrapper = expression.length === 1 && tag === null && (n1 instanceof MathNode)
|
196
196
|
&& !(n1.type === "mstyle" && n1.attributes.mathcolor)
|
197
197
|
? expression[0]
|
198
|
-
: expression.length > 1 && wrap === "none"
|
199
|
-
? new mathMLTree.MathNode("mrow", expression)
|
200
198
|
: setLineBreaks(expression, wrap, settings.displayMode)
|
201
199
|
|
202
200
|
if (tag) {
|
@@ -211,7 +209,7 @@ export default function buildMathML(tree, texExpression, style, settings) {
|
|
211
209
|
wrapper = new mathMLTree.MathNode("semantics", [wrapper, annotation]);
|
212
210
|
}
|
213
211
|
|
214
|
-
if (wrap !== "none") {
|
212
|
+
if (wrap !== "none" && wrapper.children.length > 1) {
|
215
213
|
const maths = []
|
216
214
|
for (let i = 0; i < wrapper.children.length; i++) {
|
217
215
|
const math = new mathMLTree.MathNode("math", [wrapper.children[i]])
|
package/src/functions/enclose.js
CHANGED
@@ -175,7 +175,7 @@ defineFunction({
|
|
175
175
|
|
176
176
|
defineFunction({
|
177
177
|
type: "enclose",
|
178
|
-
names: ["\\angl", "\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\overline"
|
178
|
+
names: ["\\angl", "\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\overline"],
|
179
179
|
// , "\\phase", "\\longdiv"
|
180
180
|
props: {
|
181
181
|
numArgs: 1
|
@@ -191,3 +191,22 @@ defineFunction({
|
|
191
191
|
},
|
192
192
|
mathmlBuilder
|
193
193
|
});
|
194
|
+
|
195
|
+
defineFunction({
|
196
|
+
type: "enclose",
|
197
|
+
names: ["\\underline"],
|
198
|
+
props: {
|
199
|
+
numArgs: 1,
|
200
|
+
allowedInText: true
|
201
|
+
},
|
202
|
+
handler({ parser, funcName }, args) {
|
203
|
+
const body = args[0];
|
204
|
+
return {
|
205
|
+
type: "enclose",
|
206
|
+
mode: parser.mode,
|
207
|
+
label: funcName,
|
208
|
+
body
|
209
|
+
};
|
210
|
+
},
|
211
|
+
mathmlBuilder
|
212
|
+
});
|
package/src/functions/pmb.js
CHANGED
@@ -2,10 +2,9 @@ import defineFunction, { ordargument } from "../defineFunction"
|
|
2
2
|
import { wrapWithMstyle } from "../mathMLTree"
|
3
3
|
import * as mml from "../buildMathML"
|
4
4
|
|
5
|
-
// \pmb is a simulation of bold font.
|
5
|
+
// In LaTeX, \pmb is a simulation of bold font.
|
6
6
|
// The version of \pmb in ambsy.sty works by typesetting three copies of the argument
|
7
|
-
// with small offsets. We use CSS
|
8
|
-
// It's a hack. Not as good as a real bold font. Better than nothing.
|
7
|
+
// with small offsets. We use CSS font-weight:bold.
|
9
8
|
|
10
9
|
defineFunction({
|
11
10
|
type: "pmb",
|
@@ -25,7 +24,7 @@ defineFunction({
|
|
25
24
|
const inner = mml.buildExpression(group.body, style)
|
26
25
|
// Wrap with an <mstyle> element.
|
27
26
|
const node = wrapWithMstyle(inner)
|
28
|
-
node.setAttribute("style", "
|
27
|
+
node.setAttribute("style", "font-weight:bold")
|
29
28
|
return node
|
30
29
|
}
|
31
30
|
})
|
@@ -10,8 +10,8 @@ import * as mml from "../buildMathML"
|
|
10
10
|
const numberRegEx = /^\d(?:[\d,.]*\d)?$/ // Keep in sync with numberRegEx in Parser.js
|
11
11
|
const latinRegEx = /[A-Ba-z]/
|
12
12
|
|
13
|
-
const italicNumber = (text, variant) => {
|
14
|
-
const mn = new mathMLTree.MathNode(
|
13
|
+
const italicNumber = (text, variant, tag) => {
|
14
|
+
const mn = new mathMLTree.MathNode(tag, [text])
|
15
15
|
const wrapper = new mathMLTree.MathNode("mstyle", [mn])
|
16
16
|
wrapper.style["font-style"] = "italic"
|
17
17
|
wrapper.style["font-family"] = "Cambria, 'Times New Roman', serif"
|
@@ -61,28 +61,24 @@ defineFunctionBuilders({
|
|
61
61
|
const variant = getVariant(group, style) || "normal"
|
62
62
|
|
63
63
|
let node
|
64
|
-
if (group.
|
65
|
-
|
66
|
-
if (numberRegEx.test(group.text)) {
|
67
|
-
return italicNumber(text, variant)
|
68
|
-
}
|
69
|
-
}
|
70
|
-
if (variant !== "normal") {
|
71
|
-
text.text = variantChar(text.text, variant)
|
72
|
-
}
|
73
|
-
node = new mathMLTree.MathNode("mtext", [text])
|
74
|
-
} else if (numberRegEx.test(group.text)) {
|
64
|
+
if (numberRegEx.test(group.text)) {
|
65
|
+
const tag = group.mode === "text" ? "mtext" : "mn"
|
75
66
|
if (variant === "oldstylenums") {
|
76
67
|
const ms = new mathMLTree.MathNode("mstyle", [text], ["oldstylenums"])
|
77
|
-
node = new mathMLTree.MathNode(
|
68
|
+
node = new mathMLTree.MathNode(tag, [ms])
|
78
69
|
} else if (variant === "italic" || variant === "bold-italic") {
|
79
|
-
return italicNumber(text, variant)
|
70
|
+
return italicNumber(text, variant, tag)
|
80
71
|
} else {
|
81
72
|
if (variant !== "normal") {
|
82
73
|
text.text = text.text.split("").map(c => variantChar(c, variant)).join("")
|
83
74
|
}
|
84
|
-
node = new mathMLTree.MathNode(
|
75
|
+
node = new mathMLTree.MathNode(tag, [text])
|
85
76
|
}
|
77
|
+
} else if (group.mode === "text") {
|
78
|
+
if (variant !== "normal") {
|
79
|
+
text.text = variantChar(text.text, variant)
|
80
|
+
}
|
81
|
+
node = new mathMLTree.MathNode("mtext", [text])
|
86
82
|
} else if (group.text === "\\prime") {
|
87
83
|
node = new mathMLTree.MathNode("mo", [text])
|
88
84
|
// TODO: If/when Chromium uses ssty variant for prime, remove the next line.
|
package/src/macros.js
CHANGED
@@ -228,7 +228,7 @@ defineMacro("\\underbar", "\\underline{\\text{#1}}");
|
|
228
228
|
// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
|
229
229
|
// We'll call \varvdots, which gets a glyph from symbols.js.
|
230
230
|
// The zero-width rule gets us an equivalent to the vertical 6pt kern.
|
231
|
-
defineMacro("\\vdots", "
|
231
|
+
defineMacro("\\vdots", "{\\varvdots\\rule{0pt}{15pt}}");
|
232
232
|
defineMacro("\u22ee", "\\vdots");
|
233
233
|
|
234
234
|
//////////////////////////////////////////////////////////////////////
|