katex 0.12.0 → 0.13.3
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/CHANGELOG.md +112 -0
- package/LICENSE +1 -1
- package/README.md +8 -7
- package/contrib/auto-render/auto-render.js +12 -19
- package/contrib/auto-render/index.html +9 -3
- package/contrib/auto-render/splitAtDelimiters.js +44 -61
- package/contrib/auto-render/test/auto-render-spec.js +88 -52
- package/contrib/copy-tex/README.md +5 -9
- package/contrib/copy-tex/copy-tex.css +0 -3
- package/contrib/mathtex-script-type/README.md +5 -5
- package/contrib/mhchem/README.md +4 -2
- package/contrib/render-a11y-string/render-a11y-string.js +31 -2
- package/contrib/render-a11y-string/test/render-a11y-string-spec.js +23 -0
- package/dist/README.md +8 -7
- package/dist/contrib/auto-render.js +148 -171
- package/dist/contrib/auto-render.min.js +1 -1
- package/dist/contrib/auto-render.mjs +91 -95
- package/dist/contrib/copy-tex.css +3 -3
- package/dist/contrib/copy-tex.js +11 -108
- package/dist/contrib/copy-tex.min.css +1 -1
- package/dist/contrib/copy-tex.min.js +1 -1
- package/dist/contrib/copy-tex.mjs +21 -20
- package/dist/contrib/mathtex-script-type.js +66 -91
- package/dist/contrib/mathtex-script-type.min.js +1 -1
- package/dist/contrib/mathtex-script-type.mjs +3 -3
- package/dist/contrib/mhchem.js +70 -95
- package/dist/contrib/mhchem.min.js +1 -1
- package/dist/contrib/mhchem.mjs +2 -2
- package/dist/contrib/render-a11y-string.js +97 -92
- package/dist/contrib/render-a11y-string.min.js +1 -1
- package/dist/contrib/render-a11y-string.mjs +86 -45
- package/dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Script-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/dist/katex.css +66 -10
- package/dist/katex.js +2714 -1950
- package/dist/katex.min.css +1 -1
- package/dist/katex.min.js +1 -1
- package/dist/katex.mjs +3162 -2372
- package/katex.js +4 -3
- package/package.json +69 -59
- package/src/Lexer.js +4 -2
- package/src/MacroExpander.js +117 -37
- package/src/Options.js +2 -2
- package/src/ParseError.js +1 -1
- package/src/Parser.js +100 -159
- package/src/Settings.js +2 -2
- package/src/Style.js +4 -4
- package/src/Token.js +1 -1
- package/src/buildCommon.js +12 -5
- package/src/buildHTML.js +11 -0
- package/src/buildMathML.js +6 -0
- package/src/defineEnvironment.js +0 -3
- package/src/defineFunction.js +15 -22
- package/src/delimiter.js +61 -57
- package/src/domTree.js +1 -1
- package/src/environments/array.js +223 -35
- package/src/environments/cd.js +312 -0
- package/src/fontMetrics.js +1 -1
- package/src/fontMetricsData.js +2076 -0
- package/src/fonts/.gitignore +9 -0
- package/src/fonts/Makefile +139 -0
- package/src/fonts/default.cfg +20 -0
- package/src/fonts/generate_fonts.py +61 -0
- package/src/fonts/lib/Extra.otf +0 -0
- package/src/fonts/lib/Space.ttx +234 -0
- package/src/fonts/makeBlacker +49 -0
- package/src/fonts/makeFF +2003 -0
- package/src/fonts/xbbold.mf +182 -0
- package/src/fonts.less +64 -0
- package/src/functions/accent.js +3 -2
- package/src/functions/arrow.js +8 -2
- package/src/functions/color.js +4 -4
- package/src/functions/cr.js +7 -25
- package/src/functions/def.js +50 -24
- package/src/functions/delimsizing.js +8 -0
- package/src/functions/enclose.js +80 -12
- package/src/functions/environment.js +1 -1
- package/src/functions/font.js +3 -4
- package/src/functions/genfrac.js +36 -11
- package/src/functions/hbox.js +39 -0
- package/src/functions/kern.js +1 -0
- package/src/functions/mathchoice.js +1 -0
- package/src/functions/mclass.js +2 -1
- package/src/functions/op.js +3 -7
- package/src/functions/operatorname.js +1 -1
- package/src/functions/raisebox.js +0 -1
- package/src/functions/styling.js +1 -0
- package/src/functions/supsub.js +1 -3
- package/src/functions/symbolsOrd.js +0 -2
- package/src/functions/text.js +2 -3
- package/src/functions/vcenter.js +44 -0
- package/src/functions.js +3 -0
- package/src/katex.less +69 -16
- package/src/macros.js +42 -6
- package/src/mathMLTree.js +16 -1
- package/src/metrics/.gitignore +1 -0
- package/src/metrics/README.md +23 -0
- package/src/metrics/extract_tfms.py +114 -0
- package/src/metrics/extract_ttfs.py +119 -0
- package/src/metrics/format_json.py +28 -0
- package/src/metrics/mapping.pl +1224 -0
- package/src/metrics/parse_tfm.py +211 -0
- package/src/parseNode.js +29 -1
- package/src/parseTree.js +6 -0
- package/src/stretchy.js +12 -5
- package/src/svgGeometry.js +33 -4
- package/src/symbols.js +5 -3
- package/src/types.js +3 -2
- package/src/unicodeScripts.js +5 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import katex from '../katex.mjs';
|
|
2
2
|
|
|
3
3
|
/* eslint no-constant-condition:0 */
|
|
4
|
-
|
|
4
|
+
var findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {
|
|
5
5
|
// Adapted from
|
|
6
6
|
// https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
var index = startIndex;
|
|
8
|
+
var braceLevel = 0;
|
|
9
|
+
var delimLength = delimiter.length;
|
|
10
10
|
|
|
11
11
|
while (index < text.length) {
|
|
12
|
-
|
|
12
|
+
var character = text[index];
|
|
13
13
|
|
|
14
14
|
if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {
|
|
15
15
|
return index;
|
|
@@ -27,92 +27,68 @@ const findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {
|
|
|
27
27
|
return -1;
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
for (let i = 0; i < startData.length; i++) {
|
|
34
|
-
if (startData[i].type === "text") {
|
|
35
|
-
const text = startData[i].data;
|
|
36
|
-
let lookingForLeft = true;
|
|
37
|
-
let currIndex = 0;
|
|
38
|
-
let nextIndex;
|
|
39
|
-
nextIndex = text.indexOf(leftDelim);
|
|
40
|
-
|
|
41
|
-
if (nextIndex !== -1) {
|
|
42
|
-
currIndex = nextIndex;
|
|
43
|
-
finalData.push({
|
|
44
|
-
type: "text",
|
|
45
|
-
data: text.slice(0, currIndex)
|
|
46
|
-
});
|
|
47
|
-
lookingForLeft = false;
|
|
48
|
-
}
|
|
30
|
+
var escapeRegex = function escapeRegex(string) {
|
|
31
|
+
return string.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
32
|
+
};
|
|
49
33
|
|
|
50
|
-
|
|
51
|
-
if (lookingForLeft) {
|
|
52
|
-
nextIndex = text.indexOf(leftDelim, currIndex);
|
|
53
|
-
|
|
54
|
-
if (nextIndex === -1) {
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
finalData.push({
|
|
59
|
-
type: "text",
|
|
60
|
-
data: text.slice(currIndex, nextIndex)
|
|
61
|
-
});
|
|
62
|
-
currIndex = nextIndex;
|
|
63
|
-
} else {
|
|
64
|
-
nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
|
|
65
|
-
|
|
66
|
-
if (nextIndex === -1) {
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
finalData.push({
|
|
71
|
-
type: "math",
|
|
72
|
-
data: text.slice(currIndex + leftDelim.length, nextIndex),
|
|
73
|
-
rawData: text.slice(currIndex, nextIndex + rightDelim.length),
|
|
74
|
-
display: display
|
|
75
|
-
});
|
|
76
|
-
currIndex = nextIndex + rightDelim.length;
|
|
77
|
-
}
|
|
34
|
+
var amsRegex = /^\\begin{/;
|
|
78
35
|
|
|
79
|
-
|
|
80
|
-
|
|
36
|
+
var splitAtDelimiters = function splitAtDelimiters(text, delimiters) {
|
|
37
|
+
var index;
|
|
38
|
+
var data = [];
|
|
39
|
+
var regexLeft = new RegExp("(" + delimiters.map(x => escapeRegex(x.left)).join("|") + ")");
|
|
81
40
|
|
|
82
|
-
|
|
41
|
+
while (true) {
|
|
42
|
+
index = text.search(regexLeft);
|
|
43
|
+
|
|
44
|
+
if (index === -1) {
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (index > 0) {
|
|
49
|
+
data.push({
|
|
83
50
|
type: "text",
|
|
84
|
-
data: text.slice(
|
|
51
|
+
data: text.slice(0, index)
|
|
85
52
|
});
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
}
|
|
53
|
+
text = text.slice(index); // now text starts with delimiter
|
|
54
|
+
} // ... so this always succeeds:
|
|
90
55
|
|
|
91
|
-
return finalData;
|
|
92
|
-
};
|
|
93
56
|
|
|
94
|
-
|
|
57
|
+
var i = delimiters.findIndex(delim => text.startsWith(delim.left));
|
|
58
|
+
index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length);
|
|
95
59
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
60
|
+
if (index === -1) {
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
var rawData = text.slice(0, index + delimiters[i].right.length);
|
|
65
|
+
var math = amsRegex.test(rawData) ? rawData : text.slice(delimiters[i].left.length, index);
|
|
66
|
+
data.push({
|
|
67
|
+
type: "math",
|
|
68
|
+
data: math,
|
|
69
|
+
rawData,
|
|
70
|
+
display: delimiters[i].display
|
|
71
|
+
});
|
|
72
|
+
text = text.slice(index + delimiters[i].right.length);
|
|
73
|
+
}
|
|
101
74
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
75
|
+
if (text !== "") {
|
|
76
|
+
data.push({
|
|
77
|
+
type: "text",
|
|
78
|
+
data: text
|
|
79
|
+
});
|
|
105
80
|
}
|
|
106
81
|
|
|
107
82
|
return data;
|
|
108
83
|
};
|
|
84
|
+
|
|
85
|
+
/* eslint no-console:0 */
|
|
109
86
|
/* Note: optionsCopy is mutated by this method. If it is ever exposed in the
|
|
110
87
|
* API, we should copy it before mutating.
|
|
111
88
|
*/
|
|
112
89
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const data = splitWithDelimiters(text, optionsCopy.delimiters);
|
|
90
|
+
var renderMathInText = function renderMathInText(text, optionsCopy) {
|
|
91
|
+
var data = splitAtDelimiters(text, optionsCopy.delimiters);
|
|
116
92
|
|
|
117
93
|
if (data.length === 1 && data[0].type === 'text') {
|
|
118
94
|
// There is no formula in the text.
|
|
@@ -121,14 +97,14 @@ const renderMathInText = function renderMathInText(text, optionsCopy) {
|
|
|
121
97
|
return null;
|
|
122
98
|
}
|
|
123
99
|
|
|
124
|
-
|
|
100
|
+
var fragment = document.createDocumentFragment();
|
|
125
101
|
|
|
126
|
-
for (
|
|
102
|
+
for (var i = 0; i < data.length; i++) {
|
|
127
103
|
if (data[i].type === "text") {
|
|
128
104
|
fragment.appendChild(document.createTextNode(data[i].data));
|
|
129
105
|
} else {
|
|
130
|
-
|
|
131
|
-
|
|
106
|
+
var span = document.createElement("span");
|
|
107
|
+
var math = data[i].data; // Override any display mode defined in the settings with that
|
|
132
108
|
// defined by the text itself
|
|
133
109
|
|
|
134
110
|
optionsCopy.displayMode = data[i].display;
|
|
@@ -156,39 +132,41 @@ const renderMathInText = function renderMathInText(text, optionsCopy) {
|
|
|
156
132
|
return fragment;
|
|
157
133
|
};
|
|
158
134
|
|
|
159
|
-
|
|
160
|
-
for (
|
|
161
|
-
|
|
135
|
+
var renderElem = function renderElem(elem, optionsCopy) {
|
|
136
|
+
for (var i = 0; i < elem.childNodes.length; i++) {
|
|
137
|
+
var childNode = elem.childNodes[i];
|
|
162
138
|
|
|
163
139
|
if (childNode.nodeType === 3) {
|
|
164
140
|
// Text node
|
|
165
|
-
|
|
141
|
+
var frag = renderMathInText(childNode.textContent, optionsCopy);
|
|
166
142
|
|
|
167
143
|
if (frag) {
|
|
168
144
|
i += frag.childNodes.length - 1;
|
|
169
145
|
elem.replaceChild(frag, childNode);
|
|
170
146
|
}
|
|
171
147
|
} else if (childNode.nodeType === 1) {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
148
|
+
(function () {
|
|
149
|
+
// Element node
|
|
150
|
+
var className = ' ' + childNode.className + ' ';
|
|
151
|
+
var shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(x => className.indexOf(' ' + x + ' ') === -1);
|
|
175
152
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
153
|
+
if (shouldRender) {
|
|
154
|
+
renderElem(childNode, optionsCopy);
|
|
155
|
+
}
|
|
156
|
+
})();
|
|
179
157
|
} // Otherwise, it's something else, and ignore it.
|
|
180
158
|
|
|
181
159
|
}
|
|
182
160
|
};
|
|
183
161
|
|
|
184
|
-
|
|
162
|
+
var renderMathInElement = function renderMathInElement(elem, options) {
|
|
185
163
|
if (!elem) {
|
|
186
164
|
throw new Error("No element provided to render");
|
|
187
165
|
}
|
|
188
166
|
|
|
189
|
-
|
|
167
|
+
var optionsCopy = {}; // Object.assign(optionsCopy, option)
|
|
190
168
|
|
|
191
|
-
for (
|
|
169
|
+
for (var option in options) {
|
|
192
170
|
if (options.hasOwnProperty(option)) {
|
|
193
171
|
optionsCopy[option] = options[option];
|
|
194
172
|
}
|
|
@@ -205,11 +183,29 @@ const renderMathInElement = function renderMathInElement(elem, options) {
|
|
|
205
183
|
display: false
|
|
206
184
|
}, // LaTeX uses $…$, but it ruins the display of normal `$` in text:
|
|
207
185
|
// {left: "$", right: "$", display: false},
|
|
208
|
-
//
|
|
209
|
-
//
|
|
210
|
-
// That makes it susceptible to finding a \\[0.3em] row delimiter and
|
|
211
|
-
// treating it as if it were the start of a KaTeX math zone.
|
|
186
|
+
// $ must come after $$
|
|
187
|
+
// Render AMS environments even if outside $$…$$ delimiters.
|
|
212
188
|
{
|
|
189
|
+
left: "\\begin{equation}",
|
|
190
|
+
right: "\\end{equation}",
|
|
191
|
+
display: true
|
|
192
|
+
}, {
|
|
193
|
+
left: "\\begin{align}",
|
|
194
|
+
right: "\\end{align}",
|
|
195
|
+
display: true
|
|
196
|
+
}, {
|
|
197
|
+
left: "\\begin{alignat}",
|
|
198
|
+
right: "\\end{alignat}",
|
|
199
|
+
display: true
|
|
200
|
+
}, {
|
|
201
|
+
left: "\\begin{gather}",
|
|
202
|
+
right: "\\end{gather}",
|
|
203
|
+
display: true
|
|
204
|
+
}, {
|
|
205
|
+
left: "\\begin{CD}",
|
|
206
|
+
right: "\\end{CD}",
|
|
207
|
+
display: true
|
|
208
|
+
}, {
|
|
213
209
|
left: "\\[",
|
|
214
210
|
right: "\\]",
|
|
215
211
|
display: true
|
package/dist/contrib/copy-tex.js
CHANGED
|
@@ -8,109 +8,11 @@
|
|
|
8
8
|
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
|
|
9
9
|
}
|
|
10
10
|
})((typeof self !== 'undefined' ? self : this), function() {
|
|
11
|
-
return /******/ (function(
|
|
12
|
-
/******/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
/******/ function __webpack_require__(moduleId) {
|
|
17
|
-
/******/
|
|
18
|
-
/******/ // Check if module is in cache
|
|
19
|
-
/******/ if(installedModules[moduleId]) {
|
|
20
|
-
/******/ return installedModules[moduleId].exports;
|
|
21
|
-
/******/ }
|
|
22
|
-
/******/ // Create a new module (and put it into the cache)
|
|
23
|
-
/******/ var module = installedModules[moduleId] = {
|
|
24
|
-
/******/ i: moduleId,
|
|
25
|
-
/******/ l: false,
|
|
26
|
-
/******/ exports: {}
|
|
27
|
-
/******/ };
|
|
28
|
-
/******/
|
|
29
|
-
/******/ // Execute the module function
|
|
30
|
-
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
31
|
-
/******/
|
|
32
|
-
/******/ // Flag the module as loaded
|
|
33
|
-
/******/ module.l = true;
|
|
34
|
-
/******/
|
|
35
|
-
/******/ // Return the exports of the module
|
|
36
|
-
/******/ return module.exports;
|
|
37
|
-
/******/ }
|
|
38
|
-
/******/
|
|
39
|
-
/******/
|
|
40
|
-
/******/ // expose the modules object (__webpack_modules__)
|
|
41
|
-
/******/ __webpack_require__.m = modules;
|
|
42
|
-
/******/
|
|
43
|
-
/******/ // expose the module cache
|
|
44
|
-
/******/ __webpack_require__.c = installedModules;
|
|
45
|
-
/******/
|
|
46
|
-
/******/ // define getter function for harmony exports
|
|
47
|
-
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
48
|
-
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
49
|
-
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
50
|
-
/******/ }
|
|
51
|
-
/******/ };
|
|
52
|
-
/******/
|
|
53
|
-
/******/ // define __esModule on exports
|
|
54
|
-
/******/ __webpack_require__.r = function(exports) {
|
|
55
|
-
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
56
|
-
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
57
|
-
/******/ }
|
|
58
|
-
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
59
|
-
/******/ };
|
|
60
|
-
/******/
|
|
61
|
-
/******/ // create a fake namespace object
|
|
62
|
-
/******/ // mode & 1: value is a module id, require it
|
|
63
|
-
/******/ // mode & 2: merge all properties of value into the ns
|
|
64
|
-
/******/ // mode & 4: return value when already ns object
|
|
65
|
-
/******/ // mode & 8|1: behave like require
|
|
66
|
-
/******/ __webpack_require__.t = function(value, mode) {
|
|
67
|
-
/******/ if(mode & 1) value = __webpack_require__(value);
|
|
68
|
-
/******/ if(mode & 8) return value;
|
|
69
|
-
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
70
|
-
/******/ var ns = Object.create(null);
|
|
71
|
-
/******/ __webpack_require__.r(ns);
|
|
72
|
-
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
73
|
-
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
74
|
-
/******/ return ns;
|
|
75
|
-
/******/ };
|
|
76
|
-
/******/
|
|
77
|
-
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
78
|
-
/******/ __webpack_require__.n = function(module) {
|
|
79
|
-
/******/ var getter = module && module.__esModule ?
|
|
80
|
-
/******/ function getDefault() { return module['default']; } :
|
|
81
|
-
/******/ function getModuleExports() { return module; };
|
|
82
|
-
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
83
|
-
/******/ return getter;
|
|
84
|
-
/******/ };
|
|
85
|
-
/******/
|
|
86
|
-
/******/ // Object.prototype.hasOwnProperty.call
|
|
87
|
-
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
88
|
-
/******/
|
|
89
|
-
/******/ // __webpack_public_path__
|
|
90
|
-
/******/ __webpack_require__.p = "";
|
|
91
|
-
/******/
|
|
92
|
-
/******/
|
|
93
|
-
/******/ // Load entry module and return exports
|
|
94
|
-
/******/ return __webpack_require__(__webpack_require__.s = 1);
|
|
95
|
-
/******/ })
|
|
96
|
-
/************************************************************************/
|
|
97
|
-
/******/ ([
|
|
98
|
-
/* 0 */
|
|
99
|
-
/***/ (function(module, exports, __webpack_require__) {
|
|
100
|
-
|
|
101
|
-
// extracted by mini-css-extract-plugin
|
|
102
|
-
|
|
103
|
-
/***/ }),
|
|
104
|
-
/* 1 */
|
|
105
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
106
|
-
|
|
107
|
-
"use strict";
|
|
108
|
-
__webpack_require__.r(__webpack_exports__);
|
|
109
|
-
|
|
110
|
-
// EXTERNAL MODULE: ./contrib/copy-tex/copy-tex.css
|
|
111
|
-
var copy_tex = __webpack_require__(0);
|
|
112
|
-
|
|
113
|
-
// CONCATENATED MODULE: ./contrib/copy-tex/katex2tex.js
|
|
11
|
+
return /******/ (function() { // webpackBootstrap
|
|
12
|
+
/******/ "use strict";
|
|
13
|
+
var __webpack_exports__ = {};
|
|
14
|
+
|
|
15
|
+
;// CONCATENATED MODULE: ./contrib/copy-tex/katex2tex.js
|
|
114
16
|
// Set these to how you want inline and display math to be delimited.
|
|
115
17
|
var defaultCopyDelimiters = {
|
|
116
18
|
inline: ['$', '$'],
|
|
@@ -171,7 +73,7 @@ var katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters)
|
|
|
171
73
|
return fragment;
|
|
172
74
|
};
|
|
173
75
|
/* harmony default export */ var katex2tex = (katexReplaceWithTex);
|
|
174
|
-
|
|
76
|
+
;// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.js
|
|
175
77
|
// Global copy handler to modify behavior on .katex elements.
|
|
176
78
|
|
|
177
79
|
document.addEventListener('copy', function (event) {
|
|
@@ -200,14 +102,15 @@ document.addEventListener('copy', function (event) {
|
|
|
200
102
|
|
|
201
103
|
event.preventDefault();
|
|
202
104
|
});
|
|
203
|
-
|
|
105
|
+
;// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.webpack.js
|
|
204
106
|
/**
|
|
205
107
|
* This is the webpack entry point for KaTeX. As ECMAScript doesn't support
|
|
206
108
|
* CSS modules natively, a separate entry point is used.
|
|
207
109
|
*/
|
|
208
110
|
|
|
209
111
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
/******/
|
|
112
|
+
__webpack_exports__ = __webpack_exports__.default;
|
|
113
|
+
/******/ return __webpack_exports__;
|
|
114
|
+
/******/ })()
|
|
115
|
+
;
|
|
213
116
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.katex,.katex-display{user-select:all;-moz-user-select:all;-
|
|
1
|
+
.katex,.katex-display{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var
|
|
1
|
+
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var l in n)("object"==typeof exports?exports:e)[l]=n[l]}}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={},t={inline:["$","$"],display:["$$","$$"]},n=function(e,n){void 0===n&&(n=t);for(var l=e.querySelectorAll(".katex-mathml + .katex-html"),r=0;r<l.length;r++){var i=l[r];i.remove?i.remove(null):i.parentNode.removeChild(i)}for(var o=e.querySelectorAll(".katex-mathml"),a=0;a<o.length;a++){var d=o[a],f=d.querySelector("annotation");f&&(d.replaceWith?d.replaceWith(f):d.parentNode.replaceChild(f,d),f.innerHTML=n.inline[0]+f.innerHTML+n.inline[1])}for(var c=e.querySelectorAll(".katex-display annotation"),s=0;s<c.length;s++){var p=c[s];p.innerHTML=n.display[0]+p.innerHTML.substr(n.inline[0].length,p.innerHTML.length-n.inline[0].length-n.inline[1].length)+n.display[1]}return e};return document.addEventListener("copy",(function(e){var t=window.getSelection();if(!t.isCollapsed){var l=t.getRangeAt(0).cloneContents();if(l.querySelector(".katex-mathml")){for(var r=[],i=0;i<l.childNodes.length;i++)r.push(l.childNodes[i].outerHTML);e.clipboardData.setData("text/html",r.join("")),e.clipboardData.setData("text/plain",n(l).textContent),e.preventDefault()}}})),e=e.default}()}));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Set these to how you want inline and display math to be delimited.
|
|
2
|
-
|
|
2
|
+
var defaultCopyDelimiters = {
|
|
3
3
|
inline: ['$', '$'],
|
|
4
4
|
// alternative: ['\(', '\)']
|
|
5
5
|
display: ['$$', '$$'] // alternative: ['\[', '\]']
|
|
@@ -8,17 +8,17 @@ const defaultCopyDelimiters = {
|
|
|
8
8
|
// Modifies fragment in-place. Useful for writing your own 'copy' handler,
|
|
9
9
|
// as in copy-tex.js.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
var katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters) {
|
|
12
12
|
if (copyDelimiters === void 0) {
|
|
13
13
|
copyDelimiters = defaultCopyDelimiters;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
// Remove .katex-html blocks that are preceded by .katex-mathml blocks
|
|
17
17
|
// (which will get replaced below).
|
|
18
|
-
|
|
18
|
+
var katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html');
|
|
19
19
|
|
|
20
|
-
for (
|
|
21
|
-
|
|
20
|
+
for (var i = 0; i < katexHtml.length; i++) {
|
|
21
|
+
var element = katexHtml[i];
|
|
22
22
|
|
|
23
23
|
if (element.remove) {
|
|
24
24
|
element.remove(null);
|
|
@@ -29,17 +29,18 @@ const katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiter
|
|
|
29
29
|
// descendant, with inline delimiters.
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
var katexMathml = fragment.querySelectorAll('.katex-mathml');
|
|
33
33
|
|
|
34
|
-
for (
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
for (var _i = 0; _i < katexMathml.length; _i++) {
|
|
35
|
+
var _element = katexMathml[_i];
|
|
36
|
+
|
|
37
|
+
var texSource = _element.querySelector('annotation');
|
|
37
38
|
|
|
38
39
|
if (texSource) {
|
|
39
|
-
if (
|
|
40
|
-
|
|
40
|
+
if (_element.replaceWith) {
|
|
41
|
+
_element.replaceWith(texSource);
|
|
41
42
|
} else {
|
|
42
|
-
|
|
43
|
+
_element.parentNode.replaceChild(texSource, _element);
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1];
|
|
@@ -47,33 +48,33 @@ const katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiter
|
|
|
47
48
|
} // Switch display math to display delimiters.
|
|
48
49
|
|
|
49
50
|
|
|
50
|
-
|
|
51
|
+
var displays = fragment.querySelectorAll('.katex-display annotation');
|
|
51
52
|
|
|
52
|
-
for (
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
for (var _i2 = 0; _i2 < displays.length; _i2++) {
|
|
54
|
+
var _element2 = displays[_i2];
|
|
55
|
+
_element2.innerHTML = copyDelimiters.display[0] + _element2.innerHTML.substr(copyDelimiters.inline[0].length, _element2.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1];
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
return fragment;
|
|
58
59
|
};
|
|
59
60
|
|
|
60
61
|
document.addEventListener('copy', function (event) {
|
|
61
|
-
|
|
62
|
+
var selection = window.getSelection();
|
|
62
63
|
|
|
63
64
|
if (selection.isCollapsed) {
|
|
64
65
|
return; // default action OK if selection is empty
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
var fragment = selection.getRangeAt(0).cloneContents();
|
|
68
69
|
|
|
69
70
|
if (!fragment.querySelector('.katex-mathml')) {
|
|
70
71
|
return; // default action OK if no .katex-mathml elements
|
|
71
72
|
} // Preserve usual HTML copy/paste behavior.
|
|
72
73
|
|
|
73
74
|
|
|
74
|
-
|
|
75
|
+
var html = [];
|
|
75
76
|
|
|
76
|
-
for (
|
|
77
|
+
for (var i = 0; i < fragment.childNodes.length; i++) {
|
|
77
78
|
html.push(fragment.childNodes[i].outerHTML);
|
|
78
79
|
}
|
|
79
80
|
|