temml 0.10.22 → 0.10.23
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-Fira.css +152 -0
- package/dist/temml.cjs +40 -5
- package/dist/temml.js +40 -5
- package/dist/temml.min.js +1 -1
- package/dist/temml.mjs +40 -5
- package/dist/temmlPostProcess.js +1 -1
- package/package.json +1 -1
- package/src/buildMathML.js +7 -4
- package/src/functions/font.js +30 -1
- package/src/postProcess.js +1 -1
- package/src/symbols.js +3 -0
package/README.md
CHANGED
@@ -0,0 +1,152 @@
|
|
1
|
+
/*
|
2
|
+
Fira Math fonts are released under the SIL OPEN FONT LICENSE Version 1.1.
|
3
|
+
|
4
|
+
The Fira Math WOFF2 font has been obtained from
|
5
|
+
http://www.gust.org.pl/projects/e-foundry/
|
6
|
+
|
7
|
+
The Temml.woff2 is a clone of KaTeX_Script-Regular, except that the code points
|
8
|
+
have been changed from ASCII to Unicode Mathematical Alphanumeric Symbols Script capitals,
|
9
|
+
Unicode range 1D49C to 1D4B5.
|
10
|
+
*/
|
11
|
+
|
12
|
+
@font-face {
|
13
|
+
font-family: 'Temml';
|
14
|
+
src: url('Temml.woff2') format('woff2');
|
15
|
+
font-weight: normal;
|
16
|
+
font-style: normal;
|
17
|
+
}
|
18
|
+
|
19
|
+
@font-face {
|
20
|
+
font-family: Fira Math;
|
21
|
+
src: url('FiraMath-Regular.woff2');
|
22
|
+
}
|
23
|
+
|
24
|
+
math {
|
25
|
+
font-style: normal;
|
26
|
+
font-weight: normal;
|
27
|
+
line-height: normal;
|
28
|
+
font-size-adjust: none;
|
29
|
+
text-indent: 0;
|
30
|
+
text-transform: none;
|
31
|
+
letter-spacing: normal;
|
32
|
+
word-wrap: normal;
|
33
|
+
direction: ltr;
|
34
|
+
}
|
35
|
+
|
36
|
+
math * {
|
37
|
+
border-color: currentColor;
|
38
|
+
}
|
39
|
+
|
40
|
+
math {
|
41
|
+
font-family: "Fira Math", math;
|
42
|
+
}
|
43
|
+
|
44
|
+
/* Next line is active in Firefox and Safari.
|
45
|
+
* Not in Chromium, which recognizes display: "block math" written inline. */
|
46
|
+
math.tml-display { display: block; }
|
47
|
+
|
48
|
+
*.mathscr {
|
49
|
+
font-family: "Temml";
|
50
|
+
}
|
51
|
+
|
52
|
+
/* Chromium prime alignment */
|
53
|
+
mo.tml-prime {
|
54
|
+
font-family: Temml;
|
55
|
+
}
|
56
|
+
|
57
|
+
mrow.tml-cancel {
|
58
|
+
background: linear-gradient(to top left,
|
59
|
+
rgba(0,0,0,0) 0%,
|
60
|
+
rgba(0,0,0,0) calc(50% - 0.06em),
|
61
|
+
rgba(0,0,0,1) 50%,
|
62
|
+
rgba(0,0,0,0) calc(50% + 0.06em),
|
63
|
+
rgba(0,0,0,0) 100%);
|
64
|
+
}
|
65
|
+
|
66
|
+
mrow.tml-bcancel {
|
67
|
+
background: linear-gradient(to top right,
|
68
|
+
rgba(0,0,0,0) 0%,
|
69
|
+
rgba(0,0,0,0) calc(50% - 0.06em),
|
70
|
+
rgba(0,0,0,1) 50%,
|
71
|
+
rgba(0,0,0,0) calc(50% + 0.06em),
|
72
|
+
rgba(0,0,0,0) 100%);
|
73
|
+
}
|
74
|
+
|
75
|
+
mrow.tml-xcancel {
|
76
|
+
background: linear-gradient(to top left,
|
77
|
+
rgba(0,0,0,0) 0%,
|
78
|
+
rgba(0,0,0,0) calc(50% - 0.06em),
|
79
|
+
rgba(0,0,0,1) 50%,
|
80
|
+
rgba(0,0,0,0) calc(50% + 0.06em),
|
81
|
+
rgba(0,0,0,0) 100%),
|
82
|
+
linear-gradient(to top right,
|
83
|
+
rgba(0,0,0,0) 0%,
|
84
|
+
rgba(0,0,0,0) calc(50% - 0.06em),
|
85
|
+
rgba(0,0,0,1) 50%,
|
86
|
+
rgba(0,0,0,0) calc(50% + 0.06em),
|
87
|
+
rgba(0,0,0,0) 100%)
|
88
|
+
}
|
89
|
+
|
90
|
+
/* Prevent f' from overlapping in Chromium */
|
91
|
+
mo.prime-pad {
|
92
|
+
padding-left: 0.08em;
|
93
|
+
}
|
94
|
+
|
95
|
+
/* Array cell justification in Firefox & WebKit */
|
96
|
+
.tml-right {
|
97
|
+
text-align: right;
|
98
|
+
}
|
99
|
+
.tml-left {
|
100
|
+
text-align: left;
|
101
|
+
}
|
102
|
+
|
103
|
+
/* Stretch \widetilde & set array cell justification in Chromium */
|
104
|
+
@supports (not (-webkit-backdrop-filter: blur(1px))) and (not (-moz-appearance: none)) {
|
105
|
+
.tml-crooked-2 {
|
106
|
+
transform: scale(2.0, 1.1)
|
107
|
+
}
|
108
|
+
.tml-crooked-3 {
|
109
|
+
transform: scale(3.0, 1.3)
|
110
|
+
}
|
111
|
+
.tml-crooked-4 {
|
112
|
+
transform: scale(4.0, 1.4)
|
113
|
+
}
|
114
|
+
.tml-right {
|
115
|
+
text-align: -webkit-right;
|
116
|
+
}
|
117
|
+
.tml-left {
|
118
|
+
text-align: -webkit-left;
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
/* Adjust WebKit accents */
|
123
|
+
@supports (-webkit-backdrop-filter: blur(1px)) {
|
124
|
+
.tml-xshift { transform: translate(0px, 0.45em) }
|
125
|
+
.tml-capshift { transform: translate(0px, 0.35em) }
|
126
|
+
}
|
127
|
+
|
128
|
+
/* flex-wrap for line-breaking in Chromium */
|
129
|
+
math {
|
130
|
+
display: inline-flex;
|
131
|
+
flex-wrap: wrap;
|
132
|
+
align-items: baseline;
|
133
|
+
}
|
134
|
+
math > mrow {
|
135
|
+
padding: 0.5ex 0ex;
|
136
|
+
}
|
137
|
+
|
138
|
+
/* Avoid flex-wrap in Firefox */
|
139
|
+
@-moz-document url-prefix() {
|
140
|
+
math { display: inline; }
|
141
|
+
math > mrow { padding: 0 }
|
142
|
+
}
|
143
|
+
|
144
|
+
/* AMS environment auto-numbering via CSS counter. */
|
145
|
+
.tml-eqn::before {
|
146
|
+
counter-increment: tmlEqnNo;
|
147
|
+
content: "(" counter(tmlEqnNo) ")";
|
148
|
+
}
|
149
|
+
|
150
|
+
body {
|
151
|
+
counter-reset: tmlEqnNo;
|
152
|
+
}
|
package/dist/temml.cjs
CHANGED
@@ -1026,6 +1026,7 @@ defineSymbol(math, mathord, "\u2609", "\\astrosun", true);
|
|
1026
1026
|
defineSymbol(math, mathord, "\u263c", "\\sun", true);
|
1027
1027
|
defineSymbol(math, mathord, "\u263e", "\\leftmoon", true);
|
1028
1028
|
defineSymbol(math, mathord, "\u263d", "\\rightmoon", true);
|
1029
|
+
defineSymbol(math, mathord, "\u2295", "\\Earth");
|
1029
1030
|
|
1030
1031
|
// AMS Negated Binary Relations
|
1031
1032
|
defineSymbol(math, rel, "\u226e", "\\nless", true);
|
@@ -1253,6 +1254,8 @@ defineSymbol(math, bin, "\u27d5", "\\leftouterjoin", true);
|
|
1253
1254
|
defineSymbol(math, bin, "\u27d6", "\\rightouterjoin", true);
|
1254
1255
|
defineSymbol(math, bin, "\u27d7", "\\fullouterjoin", true);
|
1255
1256
|
|
1257
|
+
defineSymbol(math, bin, "\u2238", "\\dotminus", true); // stix
|
1258
|
+
|
1256
1259
|
// AMS Arrows
|
1257
1260
|
// Note: unicode-math maps \u21e2 to their own function \rightdasharrow.
|
1258
1261
|
// We'll map it to AMS function \dashrightarrow. It produces the same atom.
|
@@ -2021,9 +2024,11 @@ const consolidateText = mrow => {
|
|
2021
2024
|
};
|
2022
2025
|
|
2023
2026
|
const numberRegEx$1 = /^[0-9]$/;
|
2024
|
-
const
|
2025
|
-
return (node.type === "
|
2026
|
-
|
2027
|
+
const isDotOrComma = (node, followingNode) => {
|
2028
|
+
return ((node.type === "textord" && node.text === ".") ||
|
2029
|
+
(node.type === "atom" && node.text === ",")) &&
|
2030
|
+
// Don't consolidate if there is a space after the comma.
|
2031
|
+
node.loc && followingNode.loc && node.loc.end === followingNode.loc.start
|
2027
2032
|
};
|
2028
2033
|
const consolidateNumbers = expression => {
|
2029
2034
|
// Consolidate adjacent numbers. We want to return <mn>1,506.3</mn>,
|
@@ -2046,7 +2051,8 @@ const consolidateNumbers = expression => {
|
|
2046
2051
|
|
2047
2052
|
// Determine if numeral groups are separated by a comma or dot.
|
2048
2053
|
for (let i = nums.length - 1; i > 0; i--) {
|
2049
|
-
if (nums[i - 1].end === nums[i].start - 2 &&
|
2054
|
+
if (nums[i - 1].end === nums[i].start - 2 &&
|
2055
|
+
isDotOrComma(expression[nums[i].start - 1], expression[nums[i].start])) {
|
2050
2056
|
// Merge the two groups.
|
2051
2057
|
nums[i - 1].end = nums[i].end;
|
2052
2058
|
nums.splice(i, 1);
|
@@ -5112,6 +5118,21 @@ defineFunction({
|
|
5112
5118
|
}
|
5113
5119
|
});
|
5114
5120
|
|
5121
|
+
const isLongVariableName = (group, font) => {
|
5122
|
+
if (font !== "mathrm" || group.body.type !== "ordgroup" || group.body.body.length === 1) {
|
5123
|
+
return false
|
5124
|
+
}
|
5125
|
+
if (group.body.body[0].type !== "mathord") { return false }
|
5126
|
+
for (let i = 1; i < group.body.body.length; i++) {
|
5127
|
+
const parseNodeType = group.body.body[i].type;
|
5128
|
+
if (!(parseNodeType === "mathord" ||
|
5129
|
+
(parseNodeType === "textord" && !isNaN(group.body.body[i].text)))) {
|
5130
|
+
return false
|
5131
|
+
}
|
5132
|
+
}
|
5133
|
+
return true
|
5134
|
+
};
|
5135
|
+
|
5115
5136
|
const mathmlBuilder$6 = (group, style) => {
|
5116
5137
|
const font = group.font;
|
5117
5138
|
const newStyle = style.withFont(font);
|
@@ -5123,6 +5144,20 @@ const mathmlBuilder$6 = (group, style) => {
|
|
5123
5144
|
return mathGroup
|
5124
5145
|
}
|
5125
5146
|
// Check if it is possible to consolidate elements into a single <mi> element.
|
5147
|
+
if (isLongVariableName(group, font)) {
|
5148
|
+
// This is a \mathrm{…} group. It gets special treatment because symbolsOrd.js
|
5149
|
+
// wraps <mi> elements with <mrow>s to work around a Firefox bug.
|
5150
|
+
const mi = mathGroup.children[0].children[0];
|
5151
|
+
delete mi.attributes.mathvariant;
|
5152
|
+
for (let i = 1; i < mathGroup.children.length; i++) {
|
5153
|
+
mi.children[0].text += mathGroup.children[i].type === "mn"
|
5154
|
+
? mathGroup.children[i].children[0].text
|
5155
|
+
: mathGroup.children[i].children[0].children[0].text;
|
5156
|
+
}
|
5157
|
+
// Wrap in a <mrow> to prevent the same Firefox bug.
|
5158
|
+
const bogus = new mathMLTree.MathNode("mtext", new mathMLTree.TextNode("\u200b"));
|
5159
|
+
return new mathMLTree.MathNode("mrow", [bogus, mi])
|
5160
|
+
}
|
5126
5161
|
let canConsolidate = mathGroup.children[0].type === "mo";
|
5127
5162
|
for (let i = 1; i < mathGroup.children.length; i++) {
|
5128
5163
|
if (mathGroup.children[i].type === "mo" && font === "boldsymbol") {
|
@@ -13188,7 +13223,7 @@ class Style {
|
|
13188
13223
|
* https://mit-license.org/
|
13189
13224
|
*/
|
13190
13225
|
|
13191
|
-
const version = "0.10.
|
13226
|
+
const version = "0.10.23";
|
13192
13227
|
|
13193
13228
|
function postProcess(block) {
|
13194
13229
|
const labelMap = {};
|
package/dist/temml.js
CHANGED
@@ -1027,6 +1027,7 @@ var temml = (function () {
|
|
1027
1027
|
defineSymbol(math, mathord, "\u263c", "\\sun", true);
|
1028
1028
|
defineSymbol(math, mathord, "\u263e", "\\leftmoon", true);
|
1029
1029
|
defineSymbol(math, mathord, "\u263d", "\\rightmoon", true);
|
1030
|
+
defineSymbol(math, mathord, "\u2295", "\\Earth");
|
1030
1031
|
|
1031
1032
|
// AMS Negated Binary Relations
|
1032
1033
|
defineSymbol(math, rel, "\u226e", "\\nless", true);
|
@@ -1254,6 +1255,8 @@ var temml = (function () {
|
|
1254
1255
|
defineSymbol(math, bin, "\u27d6", "\\rightouterjoin", true);
|
1255
1256
|
defineSymbol(math, bin, "\u27d7", "\\fullouterjoin", true);
|
1256
1257
|
|
1258
|
+
defineSymbol(math, bin, "\u2238", "\\dotminus", true); // stix
|
1259
|
+
|
1257
1260
|
// AMS Arrows
|
1258
1261
|
// Note: unicode-math maps \u21e2 to their own function \rightdasharrow.
|
1259
1262
|
// We'll map it to AMS function \dashrightarrow. It produces the same atom.
|
@@ -2022,9 +2025,11 @@ var temml = (function () {
|
|
2022
2025
|
};
|
2023
2026
|
|
2024
2027
|
const numberRegEx$1 = /^[0-9]$/;
|
2025
|
-
const
|
2026
|
-
return (node.type === "
|
2027
|
-
|
2028
|
+
const isDotOrComma = (node, followingNode) => {
|
2029
|
+
return ((node.type === "textord" && node.text === ".") ||
|
2030
|
+
(node.type === "atom" && node.text === ",")) &&
|
2031
|
+
// Don't consolidate if there is a space after the comma.
|
2032
|
+
node.loc && followingNode.loc && node.loc.end === followingNode.loc.start
|
2028
2033
|
};
|
2029
2034
|
const consolidateNumbers = expression => {
|
2030
2035
|
// Consolidate adjacent numbers. We want to return <mn>1,506.3</mn>,
|
@@ -2047,7 +2052,8 @@ var temml = (function () {
|
|
2047
2052
|
|
2048
2053
|
// Determine if numeral groups are separated by a comma or dot.
|
2049
2054
|
for (let i = nums.length - 1; i > 0; i--) {
|
2050
|
-
if (nums[i - 1].end === nums[i].start - 2 &&
|
2055
|
+
if (nums[i - 1].end === nums[i].start - 2 &&
|
2056
|
+
isDotOrComma(expression[nums[i].start - 1], expression[nums[i].start])) {
|
2051
2057
|
// Merge the two groups.
|
2052
2058
|
nums[i - 1].end = nums[i].end;
|
2053
2059
|
nums.splice(i, 1);
|
@@ -5113,6 +5119,21 @@ var temml = (function () {
|
|
5113
5119
|
}
|
5114
5120
|
});
|
5115
5121
|
|
5122
|
+
const isLongVariableName = (group, font) => {
|
5123
|
+
if (font !== "mathrm" || group.body.type !== "ordgroup" || group.body.body.length === 1) {
|
5124
|
+
return false
|
5125
|
+
}
|
5126
|
+
if (group.body.body[0].type !== "mathord") { return false }
|
5127
|
+
for (let i = 1; i < group.body.body.length; i++) {
|
5128
|
+
const parseNodeType = group.body.body[i].type;
|
5129
|
+
if (!(parseNodeType === "mathord" ||
|
5130
|
+
(parseNodeType === "textord" && !isNaN(group.body.body[i].text)))) {
|
5131
|
+
return false
|
5132
|
+
}
|
5133
|
+
}
|
5134
|
+
return true
|
5135
|
+
};
|
5136
|
+
|
5116
5137
|
const mathmlBuilder$6 = (group, style) => {
|
5117
5138
|
const font = group.font;
|
5118
5139
|
const newStyle = style.withFont(font);
|
@@ -5124,6 +5145,20 @@ var temml = (function () {
|
|
5124
5145
|
return mathGroup
|
5125
5146
|
}
|
5126
5147
|
// Check if it is possible to consolidate elements into a single <mi> element.
|
5148
|
+
if (isLongVariableName(group, font)) {
|
5149
|
+
// This is a \mathrm{…} group. It gets special treatment because symbolsOrd.js
|
5150
|
+
// wraps <mi> elements with <mrow>s to work around a Firefox bug.
|
5151
|
+
const mi = mathGroup.children[0].children[0];
|
5152
|
+
delete mi.attributes.mathvariant;
|
5153
|
+
for (let i = 1; i < mathGroup.children.length; i++) {
|
5154
|
+
mi.children[0].text += mathGroup.children[i].type === "mn"
|
5155
|
+
? mathGroup.children[i].children[0].text
|
5156
|
+
: mathGroup.children[i].children[0].children[0].text;
|
5157
|
+
}
|
5158
|
+
// Wrap in a <mrow> to prevent the same Firefox bug.
|
5159
|
+
const bogus = new mathMLTree.MathNode("mtext", new mathMLTree.TextNode("\u200b"));
|
5160
|
+
return new mathMLTree.MathNode("mrow", [bogus, mi])
|
5161
|
+
}
|
5127
5162
|
let canConsolidate = mathGroup.children[0].type === "mo";
|
5128
5163
|
for (let i = 1; i < mathGroup.children.length; i++) {
|
5129
5164
|
if (mathGroup.children[i].type === "mo" && font === "boldsymbol") {
|
@@ -11289,7 +11324,7 @@ var temml = (function () {
|
|
11289
11324
|
* https://mit-license.org/
|
11290
11325
|
*/
|
11291
11326
|
|
11292
|
-
const version = "0.10.
|
11327
|
+
const version = "0.10.23";
|
11293
11328
|
|
11294
11329
|
function postProcess(block) {
|
11295
11330
|
const labelMap = {};
|