a new start
This commit is contained in:
451
assets/bower_components/katex/dist/contrib/auto-render.js
vendored
Normal file
451
assets/bower_components/katex/dist/contrib/auto-render.js
vendored
Normal file
@@ -0,0 +1,451 @@
|
||||
(function webpackUniversalModuleDefinition(root, factory) {
|
||||
if (typeof exports === "object" && typeof module === "object")
|
||||
module.exports = factory(require("katex"));
|
||||
else if (typeof define === "function" && define.amd)
|
||||
define(["katex"], factory);
|
||||
else if (typeof exports === "object")
|
||||
exports["renderMathInElement"] = factory(require("katex"));
|
||||
else root["renderMathInElement"] = factory(root["katex"]);
|
||||
})(
|
||||
typeof self !== "undefined" ? self : this,
|
||||
function (__WEBPACK_EXTERNAL_MODULE__0__) {
|
||||
return /******/ (function (modules) {
|
||||
// webpackBootstrap
|
||||
/******/ // The module cache
|
||||
/******/ var installedModules = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/
|
||||
/******/ // Check if module is in cache
|
||||
/******/ if (installedModules[moduleId]) {
|
||||
/******/ return installedModules[moduleId].exports;
|
||||
/******/
|
||||
}
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = (installedModules[moduleId] = {
|
||||
/******/ i: moduleId,
|
||||
/******/ l: false,
|
||||
/******/ exports: {},
|
||||
/******/
|
||||
});
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ modules[moduleId].call(
|
||||
module.exports,
|
||||
module,
|
||||
module.exports,
|
||||
__webpack_require__,
|
||||
);
|
||||
/******/
|
||||
/******/ // Flag the module as loaded
|
||||
/******/ module.l = true;
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/
|
||||
}
|
||||
/******/
|
||||
/******/
|
||||
/******/ // expose the modules object (__webpack_modules__)
|
||||
/******/ __webpack_require__.m = modules;
|
||||
/******/
|
||||
/******/ // expose the module cache
|
||||
/******/ __webpack_require__.c = installedModules;
|
||||
/******/
|
||||
/******/ // define getter function for harmony exports
|
||||
/******/ __webpack_require__.d = function (exports, name, getter) {
|
||||
/******/ if (!__webpack_require__.o(exports, name)) {
|
||||
/******/ Object.defineProperty(exports, name, {
|
||||
enumerable: true,
|
||||
get: getter,
|
||||
});
|
||||
/******/
|
||||
}
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = function (exports) {
|
||||
/******/ if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, {
|
||||
value: "Module",
|
||||
});
|
||||
/******/
|
||||
}
|
||||
/******/ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // create a fake namespace object
|
||||
/******/ // mode & 1: value is a module id, require it
|
||||
/******/ // mode & 2: merge all properties of value into the ns
|
||||
/******/ // mode & 4: return value when already ns object
|
||||
/******/ // mode & 8|1: behave like require
|
||||
/******/ __webpack_require__.t = function (value, mode) {
|
||||
/******/ if (mode & 1) value = __webpack_require__(value);
|
||||
/******/ if (mode & 8) return value;
|
||||
/******/ if (
|
||||
mode & 4 &&
|
||||
typeof value === "object" &&
|
||||
value &&
|
||||
value.__esModule
|
||||
)
|
||||
return value;
|
||||
/******/ var ns = Object.create(null);
|
||||
/******/ __webpack_require__.r(ns);
|
||||
/******/ Object.defineProperty(ns, "default", {
|
||||
enumerable: true,
|
||||
value: value,
|
||||
});
|
||||
/******/ if (mode & 2 && typeof value != "string")
|
||||
for (var key in value)
|
||||
__webpack_require__.d(
|
||||
ns,
|
||||
key,
|
||||
function (key) {
|
||||
return value[key];
|
||||
}.bind(null, key),
|
||||
);
|
||||
/******/ return ns;
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||
/******/ __webpack_require__.n = function (module) {
|
||||
/******/ var getter =
|
||||
module && module.__esModule
|
||||
? /******/ function getDefault() {
|
||||
return module["default"];
|
||||
}
|
||||
: /******/ function getModuleExports() {
|
||||
return module;
|
||||
};
|
||||
/******/ __webpack_require__.d(getter, "a", getter);
|
||||
/******/ return getter;
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // Object.prototype.hasOwnProperty.call
|
||||
/******/ __webpack_require__.o = function (object, property) {
|
||||
return Object.prototype.hasOwnProperty.call(object, property);
|
||||
};
|
||||
/******/
|
||||
/******/ // __webpack_public_path__
|
||||
/******/ __webpack_require__.p = "";
|
||||
/******/
|
||||
/******/
|
||||
/******/ // Load entry module and return exports
|
||||
/******/ return __webpack_require__((__webpack_require__.s = 1));
|
||||
/******/
|
||||
})(
|
||||
/************************************************************************/
|
||||
/******/ [
|
||||
/* 0 */
|
||||
/***/ function (module, exports) {
|
||||
module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
|
||||
|
||||
/***/
|
||||
},
|
||||
/* 1 */
|
||||
/***/ function (module, __webpack_exports__, __webpack_require__) {
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
|
||||
// EXTERNAL MODULE: external "katex"
|
||||
var external_katex_ = __webpack_require__(0);
|
||||
var external_katex_default = /*#__PURE__*/ __webpack_require__.n(
|
||||
external_katex_,
|
||||
);
|
||||
|
||||
// CONCATENATED MODULE: ./contrib/auto-render/splitAtDelimiters.js
|
||||
/* eslint no-constant-condition:0 */
|
||||
var findEndOfMath = function findEndOfMath(
|
||||
delimiter,
|
||||
text,
|
||||
startIndex,
|
||||
) {
|
||||
// Adapted from
|
||||
// https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
|
||||
var index = startIndex;
|
||||
var braceLevel = 0;
|
||||
var delimLength = delimiter.length;
|
||||
|
||||
while (index < text.length) {
|
||||
var character = text[index];
|
||||
|
||||
if (
|
||||
braceLevel <= 0 &&
|
||||
text.slice(index, index + delimLength) === delimiter
|
||||
) {
|
||||
return index;
|
||||
} else if (character === "\\") {
|
||||
index++;
|
||||
} else if (character === "{") {
|
||||
braceLevel++;
|
||||
} else if (character === "}") {
|
||||
braceLevel--;
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
return -1;
|
||||
};
|
||||
|
||||
var splitAtDelimiters = function splitAtDelimiters(
|
||||
startData,
|
||||
leftDelim,
|
||||
rightDelim,
|
||||
display,
|
||||
) {
|
||||
var finalData = [];
|
||||
|
||||
for (var i = 0; i < startData.length; i++) {
|
||||
if (startData[i].type === "text") {
|
||||
var text = startData[i].data;
|
||||
var lookingForLeft = true;
|
||||
var currIndex = 0;
|
||||
var nextIndex = void 0;
|
||||
nextIndex = text.indexOf(leftDelim);
|
||||
|
||||
if (nextIndex !== -1) {
|
||||
currIndex = nextIndex;
|
||||
finalData.push({
|
||||
type: "text",
|
||||
data: text.slice(0, currIndex),
|
||||
});
|
||||
lookingForLeft = false;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
if (lookingForLeft) {
|
||||
nextIndex = text.indexOf(leftDelim, currIndex);
|
||||
|
||||
if (nextIndex === -1) {
|
||||
break;
|
||||
}
|
||||
|
||||
finalData.push({
|
||||
type: "text",
|
||||
data: text.slice(currIndex, nextIndex),
|
||||
});
|
||||
currIndex = nextIndex;
|
||||
} else {
|
||||
nextIndex = findEndOfMath(
|
||||
rightDelim,
|
||||
text,
|
||||
currIndex + leftDelim.length,
|
||||
);
|
||||
|
||||
if (nextIndex === -1) {
|
||||
break;
|
||||
}
|
||||
|
||||
finalData.push({
|
||||
type: "math",
|
||||
data: text.slice(currIndex + leftDelim.length, nextIndex),
|
||||
rawData: text.slice(
|
||||
currIndex,
|
||||
nextIndex + rightDelim.length,
|
||||
),
|
||||
display: display,
|
||||
});
|
||||
currIndex = nextIndex + rightDelim.length;
|
||||
}
|
||||
|
||||
lookingForLeft = !lookingForLeft;
|
||||
}
|
||||
|
||||
finalData.push({
|
||||
type: "text",
|
||||
data: text.slice(currIndex),
|
||||
});
|
||||
} else {
|
||||
finalData.push(startData[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return finalData;
|
||||
};
|
||||
|
||||
/* harmony default export */ var auto_render_splitAtDelimiters =
|
||||
splitAtDelimiters;
|
||||
// CONCATENATED MODULE: ./contrib/auto-render/auto-render.js
|
||||
/* eslint no-console:0 */
|
||||
|
||||
var auto_render_splitWithDelimiters = function splitWithDelimiters(
|
||||
text,
|
||||
delimiters,
|
||||
) {
|
||||
var data = [
|
||||
{
|
||||
type: "text",
|
||||
data: text,
|
||||
},
|
||||
];
|
||||
|
||||
for (var i = 0; i < delimiters.length; i++) {
|
||||
var delimiter = delimiters[i];
|
||||
data = auto_render_splitAtDelimiters(
|
||||
data,
|
||||
delimiter.left,
|
||||
delimiter.right,
|
||||
delimiter.display || false,
|
||||
);
|
||||
}
|
||||
|
||||
return data;
|
||||
};
|
||||
/* Note: optionsCopy is mutated by this method. If it is ever exposed in the
|
||||
* API, we should copy it before mutating.
|
||||
*/
|
||||
|
||||
var auto_render_renderMathInText = function renderMathInText(
|
||||
text,
|
||||
optionsCopy,
|
||||
) {
|
||||
var data = auto_render_splitWithDelimiters(
|
||||
text,
|
||||
optionsCopy.delimiters,
|
||||
);
|
||||
var fragment = document.createDocumentFragment();
|
||||
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (data[i].type === "text") {
|
||||
fragment.appendChild(document.createTextNode(data[i].data));
|
||||
} else {
|
||||
var span = document.createElement("span");
|
||||
var math = data[i].data; // Override any display mode defined in the settings with that
|
||||
// defined by the text itself
|
||||
|
||||
optionsCopy.displayMode = data[i].display;
|
||||
|
||||
try {
|
||||
if (optionsCopy.preProcess) {
|
||||
math = optionsCopy.preProcess(math);
|
||||
}
|
||||
|
||||
external_katex_default.a.render(math, span, optionsCopy);
|
||||
} catch (e) {
|
||||
if (!(e instanceof external_katex_default.a.ParseError)) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
optionsCopy.errorCallback(
|
||||
"KaTeX auto-render: Failed to parse `" +
|
||||
data[i].data +
|
||||
"` with ",
|
||||
e,
|
||||
);
|
||||
fragment.appendChild(
|
||||
document.createTextNode(data[i].rawData),
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
fragment.appendChild(span);
|
||||
}
|
||||
}
|
||||
|
||||
return fragment;
|
||||
};
|
||||
|
||||
var renderElem = function renderElem(elem, optionsCopy) {
|
||||
for (var i = 0; i < elem.childNodes.length; i++) {
|
||||
var childNode = elem.childNodes[i];
|
||||
|
||||
if (childNode.nodeType === 3) {
|
||||
// Text node
|
||||
var frag = auto_render_renderMathInText(
|
||||
childNode.textContent,
|
||||
optionsCopy,
|
||||
);
|
||||
i += frag.childNodes.length - 1;
|
||||
elem.replaceChild(frag, childNode);
|
||||
} else if (childNode.nodeType === 1) {
|
||||
(function () {
|
||||
// Element node
|
||||
var className = " " + childNode.className + " ";
|
||||
var shouldRender =
|
||||
optionsCopy.ignoredTags.indexOf(
|
||||
childNode.nodeName.toLowerCase(),
|
||||
) === -1 &&
|
||||
optionsCopy.ignoredClasses.every(function (x) {
|
||||
return className.indexOf(" " + x + " ") === -1;
|
||||
});
|
||||
|
||||
if (shouldRender) {
|
||||
renderElem(childNode, optionsCopy);
|
||||
}
|
||||
})();
|
||||
} // Otherwise, it's something else, and ignore it.
|
||||
}
|
||||
};
|
||||
|
||||
var renderMathInElement = function renderMathInElement(
|
||||
elem,
|
||||
options,
|
||||
) {
|
||||
if (!elem) {
|
||||
throw new Error("No element provided to render");
|
||||
}
|
||||
|
||||
var optionsCopy = {}; // Object.assign(optionsCopy, option)
|
||||
|
||||
for (var option in options) {
|
||||
if (options.hasOwnProperty(option)) {
|
||||
optionsCopy[option] = options[option];
|
||||
}
|
||||
} // default options
|
||||
|
||||
optionsCopy.delimiters = optionsCopy.delimiters || [
|
||||
{
|
||||
left: "$$",
|
||||
right: "$$",
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
left: "\\(",
|
||||
right: "\\)",
|
||||
display: false,
|
||||
}, // LaTeX uses $…$, but it ruins the display of normal `$` in text:
|
||||
// {left: "$", right: "$", display: false},
|
||||
// \[…\] must come last in this array. Otherwise, renderMathInElement
|
||||
// will search for \[ before it searches for $$ or \(
|
||||
// That makes it susceptible to finding a \\[0.3em] row delimiter and
|
||||
// treating it as if it were the start of a KaTeX math zone.
|
||||
{
|
||||
left: "\\[",
|
||||
right: "\\]",
|
||||
display: true,
|
||||
},
|
||||
];
|
||||
optionsCopy.ignoredTags = optionsCopy.ignoredTags || [
|
||||
"script",
|
||||
"noscript",
|
||||
"style",
|
||||
"textarea",
|
||||
"pre",
|
||||
"code",
|
||||
];
|
||||
optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || [];
|
||||
optionsCopy.errorCallback =
|
||||
optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different
|
||||
// math elements within a single call to `renderMathInElement`.
|
||||
|
||||
optionsCopy.macros = optionsCopy.macros || {};
|
||||
renderElem(elem, optionsCopy);
|
||||
};
|
||||
|
||||
/* harmony default export */ var auto_render = (__webpack_exports__[
|
||||
"default"
|
||||
] = renderMathInElement);
|
||||
|
||||
/***/
|
||||
},
|
||||
/******/
|
||||
],
|
||||
)["default"];
|
||||
},
|
||||
);
|
||||
197
assets/bower_components/katex/dist/contrib/auto-render.min.js
vendored
Normal file
197
assets/bower_components/katex/dist/contrib/auto-render.min.js
vendored
Normal file
@@ -0,0 +1,197 @@
|
||||
!(function (e, t) {
|
||||
"object" == typeof exports && "object" == typeof module
|
||||
? (module.exports = t(require("katex")))
|
||||
: "function" == typeof define && define.amd
|
||||
? define(["katex"], t)
|
||||
: "object" == typeof exports
|
||||
? (exports.renderMathInElement = t(require("katex")))
|
||||
: (e.renderMathInElement = t(e.katex));
|
||||
})("undefined" != typeof self ? self : this, function (e) {
|
||||
return (function (e) {
|
||||
var t = {};
|
||||
function r(n) {
|
||||
if (t[n]) return t[n].exports;
|
||||
var o = (t[n] = { i: n, l: !1, exports: {} });
|
||||
return e[n].call(o.exports, o, o.exports, r), (o.l = !0), o.exports;
|
||||
}
|
||||
return (
|
||||
(r.m = e),
|
||||
(r.c = t),
|
||||
(r.d = function (e, t, n) {
|
||||
r.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: n });
|
||||
}),
|
||||
(r.r = function (e) {
|
||||
"undefined" != typeof Symbol &&
|
||||
Symbol.toStringTag &&
|
||||
Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }),
|
||||
Object.defineProperty(e, "__esModule", { value: !0 });
|
||||
}),
|
||||
(r.t = function (e, t) {
|
||||
if ((1 & t && (e = r(e)), 8 & t)) return e;
|
||||
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
|
||||
var n = Object.create(null);
|
||||
if (
|
||||
(r.r(n),
|
||||
Object.defineProperty(n, "default", { enumerable: !0, value: e }),
|
||||
2 & t && "string" != typeof e)
|
||||
)
|
||||
for (var o in e)
|
||||
r.d(
|
||||
n,
|
||||
o,
|
||||
function (t) {
|
||||
return e[t];
|
||||
}.bind(null, o),
|
||||
);
|
||||
return n;
|
||||
}),
|
||||
(r.n = function (e) {
|
||||
var t =
|
||||
e && e.__esModule
|
||||
? function () {
|
||||
return e.default;
|
||||
}
|
||||
: function () {
|
||||
return e;
|
||||
};
|
||||
return r.d(t, "a", t), t;
|
||||
}),
|
||||
(r.o = function (e, t) {
|
||||
return Object.prototype.hasOwnProperty.call(e, t);
|
||||
}),
|
||||
(r.p = ""),
|
||||
r((r.s = 1))
|
||||
);
|
||||
})([
|
||||
function (t, r) {
|
||||
t.exports = e;
|
||||
},
|
||||
function (e, t, r) {
|
||||
"use strict";
|
||||
r.r(t);
|
||||
var n = r(0),
|
||||
o = r.n(n),
|
||||
a = function (e, t, r) {
|
||||
for (var n = r, o = 0, a = e.length; n < t.length; ) {
|
||||
var i = t[n];
|
||||
if (o <= 0 && t.slice(n, n + a) === e) return n;
|
||||
"\\" === i ? n++ : "{" === i ? o++ : "}" === i && o--, n++;
|
||||
}
|
||||
return -1;
|
||||
},
|
||||
i = function (e, t, r, n) {
|
||||
for (var o = [], i = 0; i < e.length; i++)
|
||||
if ("text" === e[i].type) {
|
||||
var l = e[i].data,
|
||||
d = !0,
|
||||
s = 0,
|
||||
f = void 0;
|
||||
for (
|
||||
-1 !== (f = l.indexOf(t)) &&
|
||||
((s = f),
|
||||
o.push({ type: "text", data: l.slice(0, s) }),
|
||||
(d = !1));
|
||||
;
|
||||
) {
|
||||
if (d) {
|
||||
if (-1 === (f = l.indexOf(t, s))) break;
|
||||
o.push({ type: "text", data: l.slice(s, f) }), (s = f);
|
||||
} else {
|
||||
if (-1 === (f = a(r, l, s + t.length))) break;
|
||||
o.push({
|
||||
type: "math",
|
||||
data: l.slice(s + t.length, f),
|
||||
rawData: l.slice(s, f + r.length),
|
||||
display: n,
|
||||
}),
|
||||
(s = f + r.length);
|
||||
}
|
||||
d = !d;
|
||||
}
|
||||
o.push({ type: "text", data: l.slice(s) });
|
||||
} else o.push(e[i]);
|
||||
return o;
|
||||
},
|
||||
l = function (e, t) {
|
||||
for (
|
||||
var r = (function (e, t) {
|
||||
for (
|
||||
var r = [{ type: "text", data: e }], n = 0;
|
||||
n < t.length;
|
||||
n++
|
||||
) {
|
||||
var o = t[n];
|
||||
r = i(r, o.left, o.right, o.display || !1);
|
||||
}
|
||||
return r;
|
||||
})(e, t.delimiters),
|
||||
n = document.createDocumentFragment(),
|
||||
a = 0;
|
||||
a < r.length;
|
||||
a++
|
||||
)
|
||||
if ("text" === r[a].type)
|
||||
n.appendChild(document.createTextNode(r[a].data));
|
||||
else {
|
||||
var l = document.createElement("span"),
|
||||
d = r[a].data;
|
||||
t.displayMode = r[a].display;
|
||||
try {
|
||||
t.preProcess && (d = t.preProcess(d)), o.a.render(d, l, t);
|
||||
} catch (e) {
|
||||
if (!(e instanceof o.a.ParseError)) throw e;
|
||||
t.errorCallback(
|
||||
"KaTeX auto-render: Failed to parse `" +
|
||||
r[a].data +
|
||||
"` with ",
|
||||
e,
|
||||
),
|
||||
n.appendChild(document.createTextNode(r[a].rawData));
|
||||
continue;
|
||||
}
|
||||
n.appendChild(l);
|
||||
}
|
||||
return n;
|
||||
};
|
||||
t.default = function (e, t) {
|
||||
if (!e) throw new Error("No element provided to render");
|
||||
var r = {};
|
||||
for (var n in t) t.hasOwnProperty(n) && (r[n] = t[n]);
|
||||
(r.delimiters = r.delimiters || [
|
||||
{ left: "$$", right: "$$", display: !0 },
|
||||
{ left: "\\(", right: "\\)", display: !1 },
|
||||
{ left: "\\[", right: "\\]", display: !0 },
|
||||
]),
|
||||
(r.ignoredTags = r.ignoredTags || [
|
||||
"script",
|
||||
"noscript",
|
||||
"style",
|
||||
"textarea",
|
||||
"pre",
|
||||
"code",
|
||||
]),
|
||||
(r.ignoredClasses = r.ignoredClasses || []),
|
||||
(r.errorCallback = r.errorCallback || console.error),
|
||||
(r.macros = r.macros || {}),
|
||||
(function e(t, r) {
|
||||
for (var n = 0; n < t.childNodes.length; n++) {
|
||||
var o = t.childNodes[n];
|
||||
if (3 === o.nodeType) {
|
||||
var a = l(o.textContent, r);
|
||||
(n += a.childNodes.length - 1), t.replaceChild(a, o);
|
||||
} else
|
||||
1 === o.nodeType &&
|
||||
(function () {
|
||||
var t = " " + o.className + " ";
|
||||
-1 === r.ignoredTags.indexOf(o.nodeName.toLowerCase()) &&
|
||||
r.ignoredClasses.every(function (e) {
|
||||
return -1 === t.indexOf(" " + e + " ");
|
||||
}) &&
|
||||
e(o, r);
|
||||
})();
|
||||
}
|
||||
})(e, r);
|
||||
};
|
||||
},
|
||||
]).default;
|
||||
});
|
||||
249
assets/bower_components/katex/dist/contrib/auto-render.mjs
vendored
Normal file
249
assets/bower_components/katex/dist/contrib/auto-render.mjs
vendored
Normal file
@@ -0,0 +1,249 @@
|
||||
import katex from "../katex.mjs";
|
||||
|
||||
/* eslint no-constant-condition:0 */
|
||||
const findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {
|
||||
// Adapted from
|
||||
// https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
|
||||
let index = startIndex;
|
||||
let braceLevel = 0;
|
||||
const delimLength = delimiter.length;
|
||||
|
||||
while (index < text.length) {
|
||||
const character = text[index];
|
||||
|
||||
if (
|
||||
braceLevel <= 0 &&
|
||||
text.slice(index, index + delimLength) === delimiter
|
||||
) {
|
||||
return index;
|
||||
} else if (character === "\\") {
|
||||
index++;
|
||||
} else if (character === "{") {
|
||||
braceLevel++;
|
||||
} else if (character === "}") {
|
||||
braceLevel--;
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
return -1;
|
||||
};
|
||||
|
||||
const splitAtDelimiters = function splitAtDelimiters(
|
||||
startData,
|
||||
leftDelim,
|
||||
rightDelim,
|
||||
display,
|
||||
) {
|
||||
const finalData = [];
|
||||
|
||||
for (let i = 0; i < startData.length; i++) {
|
||||
if (startData[i].type === "text") {
|
||||
const text = startData[i].data;
|
||||
let lookingForLeft = true;
|
||||
let currIndex = 0;
|
||||
let nextIndex;
|
||||
nextIndex = text.indexOf(leftDelim);
|
||||
|
||||
if (nextIndex !== -1) {
|
||||
currIndex = nextIndex;
|
||||
finalData.push({
|
||||
type: "text",
|
||||
data: text.slice(0, currIndex),
|
||||
});
|
||||
lookingForLeft = false;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
if (lookingForLeft) {
|
||||
nextIndex = text.indexOf(leftDelim, currIndex);
|
||||
|
||||
if (nextIndex === -1) {
|
||||
break;
|
||||
}
|
||||
|
||||
finalData.push({
|
||||
type: "text",
|
||||
data: text.slice(currIndex, nextIndex),
|
||||
});
|
||||
currIndex = nextIndex;
|
||||
} else {
|
||||
nextIndex = findEndOfMath(
|
||||
rightDelim,
|
||||
text,
|
||||
currIndex + leftDelim.length,
|
||||
);
|
||||
|
||||
if (nextIndex === -1) {
|
||||
break;
|
||||
}
|
||||
|
||||
finalData.push({
|
||||
type: "math",
|
||||
data: text.slice(currIndex + leftDelim.length, nextIndex),
|
||||
rawData: text.slice(currIndex, nextIndex + rightDelim.length),
|
||||
display: display,
|
||||
});
|
||||
currIndex = nextIndex + rightDelim.length;
|
||||
}
|
||||
|
||||
lookingForLeft = !lookingForLeft;
|
||||
}
|
||||
|
||||
finalData.push({
|
||||
type: "text",
|
||||
data: text.slice(currIndex),
|
||||
});
|
||||
} else {
|
||||
finalData.push(startData[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return finalData;
|
||||
};
|
||||
|
||||
/* eslint no-console:0 */
|
||||
|
||||
const splitWithDelimiters = function splitWithDelimiters(text, delimiters) {
|
||||
let data = [
|
||||
{
|
||||
type: "text",
|
||||
data: text,
|
||||
},
|
||||
];
|
||||
|
||||
for (let i = 0; i < delimiters.length; i++) {
|
||||
const delimiter = delimiters[i];
|
||||
data = splitAtDelimiters(
|
||||
data,
|
||||
delimiter.left,
|
||||
delimiter.right,
|
||||
delimiter.display || false,
|
||||
);
|
||||
}
|
||||
|
||||
return data;
|
||||
};
|
||||
/* Note: optionsCopy is mutated by this method. If it is ever exposed in the
|
||||
* API, we should copy it before mutating.
|
||||
*/
|
||||
|
||||
const renderMathInText = function renderMathInText(text, optionsCopy) {
|
||||
const data = splitWithDelimiters(text, optionsCopy.delimiters);
|
||||
const fragment = document.createDocumentFragment();
|
||||
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i].type === "text") {
|
||||
fragment.appendChild(document.createTextNode(data[i].data));
|
||||
} else {
|
||||
const span = document.createElement("span");
|
||||
let math = data[i].data; // Override any display mode defined in the settings with that
|
||||
// defined by the text itself
|
||||
|
||||
optionsCopy.displayMode = data[i].display;
|
||||
|
||||
try {
|
||||
if (optionsCopy.preProcess) {
|
||||
math = optionsCopy.preProcess(math);
|
||||
}
|
||||
|
||||
katex.render(math, span, optionsCopy);
|
||||
} catch (e) {
|
||||
if (!(e instanceof katex.ParseError)) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
optionsCopy.errorCallback(
|
||||
"KaTeX auto-render: Failed to parse `" + data[i].data + "` with ",
|
||||
e,
|
||||
);
|
||||
fragment.appendChild(document.createTextNode(data[i].rawData));
|
||||
continue;
|
||||
}
|
||||
|
||||
fragment.appendChild(span);
|
||||
}
|
||||
}
|
||||
|
||||
return fragment;
|
||||
};
|
||||
|
||||
const renderElem = function renderElem(elem, optionsCopy) {
|
||||
for (let i = 0; i < elem.childNodes.length; i++) {
|
||||
const childNode = elem.childNodes[i];
|
||||
|
||||
if (childNode.nodeType === 3) {
|
||||
// Text node
|
||||
const frag = renderMathInText(childNode.textContent, optionsCopy);
|
||||
i += frag.childNodes.length - 1;
|
||||
elem.replaceChild(frag, childNode);
|
||||
} else if (childNode.nodeType === 1) {
|
||||
// Element node
|
||||
const className = " " + childNode.className + " ";
|
||||
const shouldRender =
|
||||
optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) ===
|
||||
-1 &&
|
||||
optionsCopy.ignoredClasses.every(
|
||||
(x) => className.indexOf(" " + x + " ") === -1,
|
||||
);
|
||||
|
||||
if (shouldRender) {
|
||||
renderElem(childNode, optionsCopy);
|
||||
}
|
||||
} // Otherwise, it's something else, and ignore it.
|
||||
}
|
||||
};
|
||||
|
||||
const renderMathInElement = function renderMathInElement(elem, options) {
|
||||
if (!elem) {
|
||||
throw new Error("No element provided to render");
|
||||
}
|
||||
|
||||
const optionsCopy = {}; // Object.assign(optionsCopy, option)
|
||||
|
||||
for (const option in options) {
|
||||
if (options.hasOwnProperty(option)) {
|
||||
optionsCopy[option] = options[option];
|
||||
}
|
||||
} // default options
|
||||
|
||||
optionsCopy.delimiters = optionsCopy.delimiters || [
|
||||
{
|
||||
left: "$$",
|
||||
right: "$$",
|
||||
display: true,
|
||||
},
|
||||
{
|
||||
left: "\\(",
|
||||
right: "\\)",
|
||||
display: false,
|
||||
}, // LaTeX uses $…$, but it ruins the display of normal `$` in text:
|
||||
// {left: "$", right: "$", display: false},
|
||||
// \[…\] must come last in this array. Otherwise, renderMathInElement
|
||||
// will search for \[ before it searches for $$ or \(
|
||||
// That makes it susceptible to finding a \\[0.3em] row delimiter and
|
||||
// treating it as if it were the start of a KaTeX math zone.
|
||||
{
|
||||
left: "\\[",
|
||||
right: "\\]",
|
||||
display: true,
|
||||
},
|
||||
];
|
||||
optionsCopy.ignoredTags = optionsCopy.ignoredTags || [
|
||||
"script",
|
||||
"noscript",
|
||||
"style",
|
||||
"textarea",
|
||||
"pre",
|
||||
"code",
|
||||
];
|
||||
optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || [];
|
||||
optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different
|
||||
// math elements within a single call to `renderMathInElement`.
|
||||
|
||||
optionsCopy.macros = optionsCopy.macros || {};
|
||||
renderElem(elem, optionsCopy);
|
||||
};
|
||||
|
||||
export default renderMathInElement;
|
||||
13
assets/bower_components/katex/dist/contrib/copy-tex.css
vendored
Normal file
13
assets/bower_components/katex/dist/contrib/copy-tex.css
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
/* Force selection of entire .katex/.katex-display blocks, so that we can
|
||||
* copy/paste the entire source code. If you omit this CSS, partial
|
||||
* selections of a formula will work, but will copy the ugly HTML
|
||||
* representation instead of the LaTeX source code. (Full selections will
|
||||
* still produce the LaTeX source code.)
|
||||
*/
|
||||
.katex,
|
||||
.katex-display {
|
||||
user-select: all;
|
||||
-moz-user-select: all;
|
||||
-webkit-user-select: all;
|
||||
-ms-user-select: all;
|
||||
}
|
||||
271
assets/bower_components/katex/dist/contrib/copy-tex.js
vendored
Normal file
271
assets/bower_components/katex/dist/contrib/copy-tex.js
vendored
Normal file
@@ -0,0 +1,271 @@
|
||||
(function webpackUniversalModuleDefinition(root, factory) {
|
||||
if (typeof exports === "object" && typeof module === "object")
|
||||
module.exports = factory();
|
||||
else if (typeof define === "function" && define.amd) define([], factory);
|
||||
else {
|
||||
var a = factory();
|
||||
for (var i in a) (typeof exports === "object" ? exports : root)[i] = a[i];
|
||||
}
|
||||
})(typeof self !== "undefined" ? self : this, function () {
|
||||
return /******/ (function (modules) {
|
||||
// webpackBootstrap
|
||||
/******/ // The module cache
|
||||
/******/ var installedModules = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/
|
||||
/******/ // Check if module is in cache
|
||||
/******/ if (installedModules[moduleId]) {
|
||||
/******/ return installedModules[moduleId].exports;
|
||||
/******/
|
||||
}
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = (installedModules[moduleId] = {
|
||||
/******/ i: moduleId,
|
||||
/******/ l: false,
|
||||
/******/ exports: {},
|
||||
/******/
|
||||
});
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ modules[moduleId].call(
|
||||
module.exports,
|
||||
module,
|
||||
module.exports,
|
||||
__webpack_require__,
|
||||
);
|
||||
/******/
|
||||
/******/ // Flag the module as loaded
|
||||
/******/ module.l = true;
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/
|
||||
}
|
||||
/******/
|
||||
/******/
|
||||
/******/ // expose the modules object (__webpack_modules__)
|
||||
/******/ __webpack_require__.m = modules;
|
||||
/******/
|
||||
/******/ // expose the module cache
|
||||
/******/ __webpack_require__.c = installedModules;
|
||||
/******/
|
||||
/******/ // define getter function for harmony exports
|
||||
/******/ __webpack_require__.d = function (exports, name, getter) {
|
||||
/******/ if (!__webpack_require__.o(exports, name)) {
|
||||
/******/ Object.defineProperty(exports, name, {
|
||||
enumerable: true,
|
||||
get: getter,
|
||||
});
|
||||
/******/
|
||||
}
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = function (exports) {
|
||||
/******/ if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, {
|
||||
value: "Module",
|
||||
});
|
||||
/******/
|
||||
}
|
||||
/******/ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // create a fake namespace object
|
||||
/******/ // mode & 1: value is a module id, require it
|
||||
/******/ // mode & 2: merge all properties of value into the ns
|
||||
/******/ // mode & 4: return value when already ns object
|
||||
/******/ // mode & 8|1: behave like require
|
||||
/******/ __webpack_require__.t = function (value, mode) {
|
||||
/******/ if (mode & 1) value = __webpack_require__(value);
|
||||
/******/ if (mode & 8) return value;
|
||||
/******/ if (
|
||||
mode & 4 &&
|
||||
typeof value === "object" &&
|
||||
value &&
|
||||
value.__esModule
|
||||
)
|
||||
return value;
|
||||
/******/ var ns = Object.create(null);
|
||||
/******/ __webpack_require__.r(ns);
|
||||
/******/ Object.defineProperty(ns, "default", {
|
||||
enumerable: true,
|
||||
value: value,
|
||||
});
|
||||
/******/ if (mode & 2 && typeof value != "string")
|
||||
for (var key in value)
|
||||
__webpack_require__.d(
|
||||
ns,
|
||||
key,
|
||||
function (key) {
|
||||
return value[key];
|
||||
}.bind(null, key),
|
||||
);
|
||||
/******/ return ns;
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||
/******/ __webpack_require__.n = function (module) {
|
||||
/******/ var getter =
|
||||
module && module.__esModule
|
||||
? /******/ function getDefault() {
|
||||
return module["default"];
|
||||
}
|
||||
: /******/ function getModuleExports() {
|
||||
return module;
|
||||
};
|
||||
/******/ __webpack_require__.d(getter, "a", getter);
|
||||
/******/ return getter;
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // Object.prototype.hasOwnProperty.call
|
||||
/******/ __webpack_require__.o = function (object, property) {
|
||||
return Object.prototype.hasOwnProperty.call(object, property);
|
||||
};
|
||||
/******/
|
||||
/******/ // __webpack_public_path__
|
||||
/******/ __webpack_require__.p = "";
|
||||
/******/
|
||||
/******/
|
||||
/******/ // Load entry module and return exports
|
||||
/******/ return __webpack_require__((__webpack_require__.s = 1));
|
||||
/******/
|
||||
})(
|
||||
/************************************************************************/
|
||||
/******/ [
|
||||
/* 0 */
|
||||
/***/ function (module, exports, __webpack_require__) {
|
||||
// extracted by mini-css-extract-plugin
|
||||
/***/
|
||||
},
|
||||
/* 1 */
|
||||
/***/ function (module, __webpack_exports__, __webpack_require__) {
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
|
||||
// EXTERNAL MODULE: ./contrib/copy-tex/copy-tex.css
|
||||
var copy_tex = __webpack_require__(0);
|
||||
|
||||
// CONCATENATED MODULE: ./contrib/copy-tex/katex2tex.js
|
||||
// Set these to how you want inline and display math to be delimited.
|
||||
var defaultCopyDelimiters = {
|
||||
inline: ["$", "$"],
|
||||
// alternative: ['\(', '\)']
|
||||
display: ["$$", "$$"], // alternative: ['\[', '\]']
|
||||
}; // Replace .katex elements with their TeX source (<annotation> element).
|
||||
// Modifies fragment in-place. Useful for writing your own 'copy' handler,
|
||||
// as in copy-tex.js.
|
||||
|
||||
var katexReplaceWithTex = function katexReplaceWithTex(
|
||||
fragment,
|
||||
copyDelimiters,
|
||||
) {
|
||||
if (copyDelimiters === void 0) {
|
||||
copyDelimiters = defaultCopyDelimiters;
|
||||
}
|
||||
|
||||
// Remove .katex-html blocks that are preceded by .katex-mathml blocks
|
||||
// (which will get replaced below).
|
||||
var katexHtml = fragment.querySelectorAll(
|
||||
".katex-mathml + .katex-html",
|
||||
);
|
||||
|
||||
for (var i = 0; i < katexHtml.length; i++) {
|
||||
var element = katexHtml[i];
|
||||
|
||||
if (element.remove) {
|
||||
element.remove(null);
|
||||
} else {
|
||||
element.parentNode.removeChild(element);
|
||||
}
|
||||
} // Replace .katex-mathml elements with their annotation (TeX source)
|
||||
// descendant, with inline delimiters.
|
||||
|
||||
var katexMathml = fragment.querySelectorAll(".katex-mathml");
|
||||
|
||||
for (var _i = 0; _i < katexMathml.length; _i++) {
|
||||
var _element = katexMathml[_i];
|
||||
|
||||
var texSource = _element.querySelector("annotation");
|
||||
|
||||
if (texSource) {
|
||||
if (_element.replaceWith) {
|
||||
_element.replaceWith(texSource);
|
||||
} else {
|
||||
_element.parentNode.replaceChild(texSource, _element);
|
||||
}
|
||||
|
||||
texSource.innerHTML =
|
||||
copyDelimiters.inline[0] +
|
||||
texSource.innerHTML +
|
||||
copyDelimiters.inline[1];
|
||||
}
|
||||
} // Switch display math to display delimiters.
|
||||
|
||||
var displays = fragment.querySelectorAll(".katex-display annotation");
|
||||
|
||||
for (var _i2 = 0; _i2 < displays.length; _i2++) {
|
||||
var _element2 = displays[_i2];
|
||||
_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];
|
||||
}
|
||||
|
||||
return fragment;
|
||||
};
|
||||
/* harmony default export */ var katex2tex = katexReplaceWithTex;
|
||||
// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.js
|
||||
// Global copy handler to modify behavior on .katex elements.
|
||||
|
||||
document.addEventListener("copy", function (event) {
|
||||
var selection = window.getSelection();
|
||||
|
||||
if (selection.isCollapsed) {
|
||||
return; // default action OK if selection is empty
|
||||
}
|
||||
|
||||
var fragment = selection.getRangeAt(0).cloneContents();
|
||||
|
||||
if (!fragment.querySelector(".katex-mathml")) {
|
||||
return; // default action OK if no .katex-mathml elements
|
||||
} // Preserve usual HTML copy/paste behavior.
|
||||
|
||||
var html = [];
|
||||
|
||||
for (var i = 0; i < fragment.childNodes.length; i++) {
|
||||
html.push(fragment.childNodes[i].outerHTML);
|
||||
}
|
||||
|
||||
event.clipboardData.setData("text/html", html.join("")); // Rewrite plain-text version.
|
||||
|
||||
event.clipboardData.setData(
|
||||
"text/plain",
|
||||
katex2tex(fragment).textContent,
|
||||
); // Prevent normal copy handling.
|
||||
|
||||
event.preventDefault();
|
||||
});
|
||||
// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.webpack.js
|
||||
/**
|
||||
* This is the webpack entry point for KaTeX. As ECMAScript doesn't support
|
||||
* CSS modules natively, a separate entry point is used.
|
||||
*/
|
||||
|
||||
/***/
|
||||
},
|
||||
/******/
|
||||
],
|
||||
)["default"];
|
||||
});
|
||||
7
assets/bower_components/katex/dist/contrib/copy-tex.min.css
vendored
Normal file
7
assets/bower_components/katex/dist/contrib/copy-tex.min.css
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
.katex,
|
||||
.katex-display {
|
||||
user-select: all;
|
||||
-moz-user-select: all;
|
||||
-webkit-user-select: all;
|
||||
-ms-user-select: all;
|
||||
}
|
||||
126
assets/bower_components/katex/dist/contrib/copy-tex.min.js
vendored
Normal file
126
assets/bower_components/katex/dist/contrib/copy-tex.min.js
vendored
Normal file
@@ -0,0 +1,126 @@
|
||||
!(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 r in n) ("object" == typeof exports ? exports : e)[r] = n[r];
|
||||
}
|
||||
})("undefined" != typeof self ? self : this, function () {
|
||||
return (function (e) {
|
||||
var t = {};
|
||||
function n(r) {
|
||||
if (t[r]) return t[r].exports;
|
||||
var o = (t[r] = { i: r, l: !1, exports: {} });
|
||||
return e[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;
|
||||
}
|
||||
return (
|
||||
(n.m = e),
|
||||
(n.c = t),
|
||||
(n.d = function (e, t, r) {
|
||||
n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });
|
||||
}),
|
||||
(n.r = function (e) {
|
||||
"undefined" != typeof Symbol &&
|
||||
Symbol.toStringTag &&
|
||||
Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }),
|
||||
Object.defineProperty(e, "__esModule", { value: !0 });
|
||||
}),
|
||||
(n.t = function (e, t) {
|
||||
if ((1 & t && (e = n(e)), 8 & t)) return e;
|
||||
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
|
||||
var r = Object.create(null);
|
||||
if (
|
||||
(n.r(r),
|
||||
Object.defineProperty(r, "default", { enumerable: !0, value: e }),
|
||||
2 & t && "string" != typeof e)
|
||||
)
|
||||
for (var o in e)
|
||||
n.d(
|
||||
r,
|
||||
o,
|
||||
function (t) {
|
||||
return e[t];
|
||||
}.bind(null, o),
|
||||
);
|
||||
return r;
|
||||
}),
|
||||
(n.n = function (e) {
|
||||
var t =
|
||||
e && e.__esModule
|
||||
? function () {
|
||||
return e.default;
|
||||
}
|
||||
: function () {
|
||||
return e;
|
||||
};
|
||||
return n.d(t, "a", t), t;
|
||||
}),
|
||||
(n.o = function (e, t) {
|
||||
return Object.prototype.hasOwnProperty.call(e, t);
|
||||
}),
|
||||
(n.p = ""),
|
||||
n((n.s = 1))
|
||||
);
|
||||
})([
|
||||
function (e, t, n) {},
|
||||
function (e, t, n) {
|
||||
"use strict";
|
||||
n.r(t);
|
||||
n(0);
|
||||
var r = { inline: ["$", "$"], display: ["$$", "$$"] },
|
||||
o = function (e, t) {
|
||||
void 0 === t && (t = r);
|
||||
for (
|
||||
var n = e.querySelectorAll(".katex-mathml + .katex-html"), o = 0;
|
||||
o < n.length;
|
||||
o++
|
||||
) {
|
||||
var l = n[o];
|
||||
l.remove ? l.remove(null) : l.parentNode.removeChild(l);
|
||||
}
|
||||
for (
|
||||
var i = e.querySelectorAll(".katex-mathml"), a = 0;
|
||||
a < i.length;
|
||||
a++
|
||||
) {
|
||||
var u = i[a],
|
||||
f = u.querySelector("annotation");
|
||||
f &&
|
||||
(u.replaceWith
|
||||
? u.replaceWith(f)
|
||||
: u.parentNode.replaceChild(f, u),
|
||||
(f.innerHTML = t.inline[0] + f.innerHTML + t.inline[1]));
|
||||
}
|
||||
for (
|
||||
var c = e.querySelectorAll(".katex-display annotation"), d = 0;
|
||||
d < c.length;
|
||||
d++
|
||||
) {
|
||||
var p = c[d];
|
||||
p.innerHTML =
|
||||
t.display[0] +
|
||||
p.innerHTML.substr(
|
||||
t.inline[0].length,
|
||||
p.innerHTML.length - t.inline[0].length - t.inline[1].length,
|
||||
) +
|
||||
t.display[1];
|
||||
}
|
||||
return e;
|
||||
};
|
||||
document.addEventListener("copy", function (e) {
|
||||
var t = window.getSelection();
|
||||
if (!t.isCollapsed) {
|
||||
var n = t.getRangeAt(0).cloneContents();
|
||||
if (n.querySelector(".katex-mathml")) {
|
||||
for (var r = [], l = 0; l < n.childNodes.length; l++)
|
||||
r.push(n.childNodes[l].outerHTML);
|
||||
e.clipboardData.setData("text/html", r.join("")),
|
||||
e.clipboardData.setData("text/plain", o(n).textContent),
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
]).default;
|
||||
});
|
||||
98
assets/bower_components/katex/dist/contrib/copy-tex.mjs
vendored
Normal file
98
assets/bower_components/katex/dist/contrib/copy-tex.mjs
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
// Set these to how you want inline and display math to be delimited.
|
||||
const defaultCopyDelimiters = {
|
||||
inline: ["$", "$"],
|
||||
// alternative: ['\(', '\)']
|
||||
display: ["$$", "$$"], // alternative: ['\[', '\]']
|
||||
}; // Replace .katex elements with their TeX source (<annotation> element).
|
||||
// Modifies fragment in-place. Useful for writing your own 'copy' handler,
|
||||
// as in copy-tex.js.
|
||||
|
||||
const katexReplaceWithTex = function katexReplaceWithTex(
|
||||
fragment,
|
||||
copyDelimiters,
|
||||
) {
|
||||
if (copyDelimiters === void 0) {
|
||||
copyDelimiters = defaultCopyDelimiters;
|
||||
}
|
||||
|
||||
// Remove .katex-html blocks that are preceded by .katex-mathml blocks
|
||||
// (which will get replaced below).
|
||||
const katexHtml = fragment.querySelectorAll(".katex-mathml + .katex-html");
|
||||
|
||||
for (let i = 0; i < katexHtml.length; i++) {
|
||||
const element = katexHtml[i];
|
||||
|
||||
if (element.remove) {
|
||||
element.remove(null);
|
||||
} else {
|
||||
element.parentNode.removeChild(element);
|
||||
}
|
||||
} // Replace .katex-mathml elements with their annotation (TeX source)
|
||||
// descendant, with inline delimiters.
|
||||
|
||||
const katexMathml = fragment.querySelectorAll(".katex-mathml");
|
||||
|
||||
for (let i = 0; i < katexMathml.length; i++) {
|
||||
const element = katexMathml[i];
|
||||
const texSource = element.querySelector("annotation");
|
||||
|
||||
if (texSource) {
|
||||
if (element.replaceWith) {
|
||||
element.replaceWith(texSource);
|
||||
} else {
|
||||
element.parentNode.replaceChild(texSource, element);
|
||||
}
|
||||
|
||||
texSource.innerHTML =
|
||||
copyDelimiters.inline[0] +
|
||||
texSource.innerHTML +
|
||||
copyDelimiters.inline[1];
|
||||
}
|
||||
} // Switch display math to display delimiters.
|
||||
|
||||
const displays = fragment.querySelectorAll(".katex-display annotation");
|
||||
|
||||
for (let i = 0; i < displays.length; i++) {
|
||||
const element = displays[i];
|
||||
element.innerHTML =
|
||||
copyDelimiters.display[0] +
|
||||
element.innerHTML.substr(
|
||||
copyDelimiters.inline[0].length,
|
||||
element.innerHTML.length -
|
||||
copyDelimiters.inline[0].length -
|
||||
copyDelimiters.inline[1].length,
|
||||
) +
|
||||
copyDelimiters.display[1];
|
||||
}
|
||||
|
||||
return fragment;
|
||||
};
|
||||
|
||||
document.addEventListener("copy", function (event) {
|
||||
const selection = window.getSelection();
|
||||
|
||||
if (selection.isCollapsed) {
|
||||
return; // default action OK if selection is empty
|
||||
}
|
||||
|
||||
const fragment = selection.getRangeAt(0).cloneContents();
|
||||
|
||||
if (!fragment.querySelector(".katex-mathml")) {
|
||||
return; // default action OK if no .katex-mathml elements
|
||||
} // Preserve usual HTML copy/paste behavior.
|
||||
|
||||
const html = [];
|
||||
|
||||
for (let i = 0; i < fragment.childNodes.length; i++) {
|
||||
html.push(fragment.childNodes[i].outerHTML);
|
||||
}
|
||||
|
||||
event.clipboardData.setData("text/html", html.join("")); // Rewrite plain-text version.
|
||||
|
||||
event.clipboardData.setData(
|
||||
"text/plain",
|
||||
katexReplaceWithTex(fragment).textContent,
|
||||
); // Prevent normal copy handling.
|
||||
|
||||
event.preventDefault();
|
||||
});
|
||||
202
assets/bower_components/katex/dist/contrib/mathtex-script-type.js
vendored
Normal file
202
assets/bower_components/katex/dist/contrib/mathtex-script-type.js
vendored
Normal file
@@ -0,0 +1,202 @@
|
||||
(function webpackUniversalModuleDefinition(root, factory) {
|
||||
if (typeof exports === "object" && typeof module === "object")
|
||||
module.exports = factory(require("katex"));
|
||||
else if (typeof define === "function" && define.amd)
|
||||
define(["katex"], factory);
|
||||
else {
|
||||
var a =
|
||||
typeof exports === "object"
|
||||
? factory(require("katex"))
|
||||
: factory(root["katex"]);
|
||||
for (var i in a) (typeof exports === "object" ? exports : root)[i] = a[i];
|
||||
}
|
||||
})(
|
||||
typeof self !== "undefined" ? self : this,
|
||||
function (__WEBPACK_EXTERNAL_MODULE__0__) {
|
||||
return /******/ (function (modules) {
|
||||
// webpackBootstrap
|
||||
/******/ // The module cache
|
||||
/******/ var installedModules = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/
|
||||
/******/ // Check if module is in cache
|
||||
/******/ if (installedModules[moduleId]) {
|
||||
/******/ return installedModules[moduleId].exports;
|
||||
/******/
|
||||
}
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = (installedModules[moduleId] = {
|
||||
/******/ i: moduleId,
|
||||
/******/ l: false,
|
||||
/******/ exports: {},
|
||||
/******/
|
||||
});
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ modules[moduleId].call(
|
||||
module.exports,
|
||||
module,
|
||||
module.exports,
|
||||
__webpack_require__,
|
||||
);
|
||||
/******/
|
||||
/******/ // Flag the module as loaded
|
||||
/******/ module.l = true;
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/
|
||||
}
|
||||
/******/
|
||||
/******/
|
||||
/******/ // expose the modules object (__webpack_modules__)
|
||||
/******/ __webpack_require__.m = modules;
|
||||
/******/
|
||||
/******/ // expose the module cache
|
||||
/******/ __webpack_require__.c = installedModules;
|
||||
/******/
|
||||
/******/ // define getter function for harmony exports
|
||||
/******/ __webpack_require__.d = function (exports, name, getter) {
|
||||
/******/ if (!__webpack_require__.o(exports, name)) {
|
||||
/******/ Object.defineProperty(exports, name, {
|
||||
enumerable: true,
|
||||
get: getter,
|
||||
});
|
||||
/******/
|
||||
}
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = function (exports) {
|
||||
/******/ if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, {
|
||||
value: "Module",
|
||||
});
|
||||
/******/
|
||||
}
|
||||
/******/ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // create a fake namespace object
|
||||
/******/ // mode & 1: value is a module id, require it
|
||||
/******/ // mode & 2: merge all properties of value into the ns
|
||||
/******/ // mode & 4: return value when already ns object
|
||||
/******/ // mode & 8|1: behave like require
|
||||
/******/ __webpack_require__.t = function (value, mode) {
|
||||
/******/ if (mode & 1) value = __webpack_require__(value);
|
||||
/******/ if (mode & 8) return value;
|
||||
/******/ if (
|
||||
mode & 4 &&
|
||||
typeof value === "object" &&
|
||||
value &&
|
||||
value.__esModule
|
||||
)
|
||||
return value;
|
||||
/******/ var ns = Object.create(null);
|
||||
/******/ __webpack_require__.r(ns);
|
||||
/******/ Object.defineProperty(ns, "default", {
|
||||
enumerable: true,
|
||||
value: value,
|
||||
});
|
||||
/******/ if (mode & 2 && typeof value != "string")
|
||||
for (var key in value)
|
||||
__webpack_require__.d(
|
||||
ns,
|
||||
key,
|
||||
function (key) {
|
||||
return value[key];
|
||||
}.bind(null, key),
|
||||
);
|
||||
/******/ return ns;
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||
/******/ __webpack_require__.n = function (module) {
|
||||
/******/ var getter =
|
||||
module && module.__esModule
|
||||
? /******/ function getDefault() {
|
||||
return module["default"];
|
||||
}
|
||||
: /******/ function getModuleExports() {
|
||||
return module;
|
||||
};
|
||||
/******/ __webpack_require__.d(getter, "a", getter);
|
||||
/******/ return getter;
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // Object.prototype.hasOwnProperty.call
|
||||
/******/ __webpack_require__.o = function (object, property) {
|
||||
return Object.prototype.hasOwnProperty.call(object, property);
|
||||
};
|
||||
/******/
|
||||
/******/ // __webpack_public_path__
|
||||
/******/ __webpack_require__.p = "";
|
||||
/******/
|
||||
/******/
|
||||
/******/ // Load entry module and return exports
|
||||
/******/ return __webpack_require__((__webpack_require__.s = 1));
|
||||
/******/
|
||||
})(
|
||||
/************************************************************************/
|
||||
/******/ [
|
||||
/* 0 */
|
||||
/***/ function (module, exports) {
|
||||
module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
|
||||
|
||||
/***/
|
||||
},
|
||||
/* 1 */
|
||||
/***/ function (module, __webpack_exports__, __webpack_require__) {
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ =
|
||||
__webpack_require__(0);
|
||||
/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default =
|
||||
/*#__PURE__*/ __webpack_require__.n(
|
||||
katex__WEBPACK_IMPORTED_MODULE_0__,
|
||||
);
|
||||
|
||||
var scripts = document.body.getElementsByTagName("script");
|
||||
scripts = Array.prototype.slice.call(scripts);
|
||||
scripts.forEach(function (script) {
|
||||
if (!script.type || !script.type.match(/math\/tex/i)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
var display =
|
||||
script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null;
|
||||
var katexElement = document.createElement(display ? "div" : "span");
|
||||
katexElement.setAttribute(
|
||||
"class",
|
||||
display ? "equation" : "inline-equation",
|
||||
);
|
||||
|
||||
try {
|
||||
katex__WEBPACK_IMPORTED_MODULE_0___default.a.render(
|
||||
script.text,
|
||||
katexElement,
|
||||
{
|
||||
displayMode: display,
|
||||
},
|
||||
);
|
||||
} catch (err) {
|
||||
//console.error(err); linter doesn't like this
|
||||
katexElement.textContent = script.text;
|
||||
}
|
||||
|
||||
script.parentNode.replaceChild(katexElement, script);
|
||||
});
|
||||
|
||||
/***/
|
||||
},
|
||||
/******/
|
||||
],
|
||||
)["default"];
|
||||
},
|
||||
);
|
||||
89
assets/bower_components/katex/dist/contrib/mathtex-script-type.min.js
vendored
Normal file
89
assets/bower_components/katex/dist/contrib/mathtex-script-type.min.js
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
!(function (e, t) {
|
||||
if ("object" == typeof exports && "object" == typeof module)
|
||||
module.exports = t(require("katex"));
|
||||
else if ("function" == typeof define && define.amd) define(["katex"], t);
|
||||
else {
|
||||
var r = "object" == typeof exports ? t(require("katex")) : t(e.katex);
|
||||
for (var n in r) ("object" == typeof exports ? exports : e)[n] = r[n];
|
||||
}
|
||||
})("undefined" != typeof self ? self : this, function (e) {
|
||||
return (function (e) {
|
||||
var t = {};
|
||||
function r(n) {
|
||||
if (t[n]) return t[n].exports;
|
||||
var o = (t[n] = { i: n, l: !1, exports: {} });
|
||||
return e[n].call(o.exports, o, o.exports, r), (o.l = !0), o.exports;
|
||||
}
|
||||
return (
|
||||
(r.m = e),
|
||||
(r.c = t),
|
||||
(r.d = function (e, t, n) {
|
||||
r.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: n });
|
||||
}),
|
||||
(r.r = function (e) {
|
||||
"undefined" != typeof Symbol &&
|
||||
Symbol.toStringTag &&
|
||||
Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }),
|
||||
Object.defineProperty(e, "__esModule", { value: !0 });
|
||||
}),
|
||||
(r.t = function (e, t) {
|
||||
if ((1 & t && (e = r(e)), 8 & t)) return e;
|
||||
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
|
||||
var n = Object.create(null);
|
||||
if (
|
||||
(r.r(n),
|
||||
Object.defineProperty(n, "default", { enumerable: !0, value: e }),
|
||||
2 & t && "string" != typeof e)
|
||||
)
|
||||
for (var o in e)
|
||||
r.d(
|
||||
n,
|
||||
o,
|
||||
function (t) {
|
||||
return e[t];
|
||||
}.bind(null, o),
|
||||
);
|
||||
return n;
|
||||
}),
|
||||
(r.n = function (e) {
|
||||
var t =
|
||||
e && e.__esModule
|
||||
? function () {
|
||||
return e.default;
|
||||
}
|
||||
: function () {
|
||||
return e;
|
||||
};
|
||||
return r.d(t, "a", t), t;
|
||||
}),
|
||||
(r.o = function (e, t) {
|
||||
return Object.prototype.hasOwnProperty.call(e, t);
|
||||
}),
|
||||
(r.p = ""),
|
||||
r((r.s = 1))
|
||||
);
|
||||
})([
|
||||
function (t, r) {
|
||||
t.exports = e;
|
||||
},
|
||||
function (e, t, r) {
|
||||
"use strict";
|
||||
r.r(t);
|
||||
var n = r(0),
|
||||
o = r.n(n),
|
||||
u = document.body.getElementsByTagName("script");
|
||||
(u = Array.prototype.slice.call(u)).forEach(function (e) {
|
||||
if (!e.type || !e.type.match(/math\/tex/i)) return -1;
|
||||
var t = null != e.type.match(/mode\s*=\s*display(;|\s|\n|$)/),
|
||||
r = document.createElement(t ? "div" : "span");
|
||||
r.setAttribute("class", t ? "equation" : "inline-equation");
|
||||
try {
|
||||
o.a.render(e.text, r, { displayMode: t });
|
||||
} catch (t) {
|
||||
r.textContent = e.text;
|
||||
}
|
||||
e.parentNode.replaceChild(r, e);
|
||||
});
|
||||
},
|
||||
]).default;
|
||||
});
|
||||
24
assets/bower_components/katex/dist/contrib/mathtex-script-type.mjs
vendored
Normal file
24
assets/bower_components/katex/dist/contrib/mathtex-script-type.mjs
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
import katex from "../katex.mjs";
|
||||
|
||||
let scripts = document.body.getElementsByTagName("script");
|
||||
scripts = Array.prototype.slice.call(scripts);
|
||||
scripts.forEach(function (script) {
|
||||
if (!script.type || !script.type.match(/math\/tex/i)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
const display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null;
|
||||
const katexElement = document.createElement(display ? "div" : "span");
|
||||
katexElement.setAttribute("class", display ? "equation" : "inline-equation");
|
||||
|
||||
try {
|
||||
katex.render(script.text, katexElement, {
|
||||
displayMode: display,
|
||||
});
|
||||
} catch (err) {
|
||||
//console.error(err); linter doesn't like this
|
||||
katexElement.textContent = script.text;
|
||||
}
|
||||
|
||||
script.parentNode.replaceChild(katexElement, script);
|
||||
});
|
||||
3807
assets/bower_components/katex/dist/contrib/mhchem.js
vendored
Normal file
3807
assets/bower_components/katex/dist/contrib/mhchem.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1853
assets/bower_components/katex/dist/contrib/mhchem.min.js
vendored
Normal file
1853
assets/bower_components/katex/dist/contrib/mhchem.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
3493
assets/bower_components/katex/dist/contrib/mhchem.mjs
vendored
Normal file
3493
assets/bower_components/katex/dist/contrib/mhchem.mjs
vendored
Normal file
File diff suppressed because it is too large
Load Diff
896
assets/bower_components/katex/dist/contrib/render-a11y-string.js
vendored
Normal file
896
assets/bower_components/katex/dist/contrib/render-a11y-string.js
vendored
Normal file
@@ -0,0 +1,896 @@
|
||||
(function webpackUniversalModuleDefinition(root, factory) {
|
||||
if (typeof exports === "object" && typeof module === "object")
|
||||
module.exports = factory(require("katex"));
|
||||
else if (typeof define === "function" && define.amd)
|
||||
define(["katex"], factory);
|
||||
else {
|
||||
var a =
|
||||
typeof exports === "object"
|
||||
? factory(require("katex"))
|
||||
: factory(root["katex"]);
|
||||
for (var i in a) (typeof exports === "object" ? exports : root)[i] = a[i];
|
||||
}
|
||||
})(
|
||||
typeof self !== "undefined" ? self : this,
|
||||
function (__WEBPACK_EXTERNAL_MODULE__0__) {
|
||||
return /******/ (function (modules) {
|
||||
// webpackBootstrap
|
||||
/******/ // The module cache
|
||||
/******/ var installedModules = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/
|
||||
/******/ // Check if module is in cache
|
||||
/******/ if (installedModules[moduleId]) {
|
||||
/******/ return installedModules[moduleId].exports;
|
||||
/******/
|
||||
}
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = (installedModules[moduleId] = {
|
||||
/******/ i: moduleId,
|
||||
/******/ l: false,
|
||||
/******/ exports: {},
|
||||
/******/
|
||||
});
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ modules[moduleId].call(
|
||||
module.exports,
|
||||
module,
|
||||
module.exports,
|
||||
__webpack_require__,
|
||||
);
|
||||
/******/
|
||||
/******/ // Flag the module as loaded
|
||||
/******/ module.l = true;
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/
|
||||
}
|
||||
/******/
|
||||
/******/
|
||||
/******/ // expose the modules object (__webpack_modules__)
|
||||
/******/ __webpack_require__.m = modules;
|
||||
/******/
|
||||
/******/ // expose the module cache
|
||||
/******/ __webpack_require__.c = installedModules;
|
||||
/******/
|
||||
/******/ // define getter function for harmony exports
|
||||
/******/ __webpack_require__.d = function (exports, name, getter) {
|
||||
/******/ if (!__webpack_require__.o(exports, name)) {
|
||||
/******/ Object.defineProperty(exports, name, {
|
||||
enumerable: true,
|
||||
get: getter,
|
||||
});
|
||||
/******/
|
||||
}
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // define __esModule on exports
|
||||
/******/ __webpack_require__.r = function (exports) {
|
||||
/******/ if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
|
||||
/******/ Object.defineProperty(exports, Symbol.toStringTag, {
|
||||
value: "Module",
|
||||
});
|
||||
/******/
|
||||
}
|
||||
/******/ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // create a fake namespace object
|
||||
/******/ // mode & 1: value is a module id, require it
|
||||
/******/ // mode & 2: merge all properties of value into the ns
|
||||
/******/ // mode & 4: return value when already ns object
|
||||
/******/ // mode & 8|1: behave like require
|
||||
/******/ __webpack_require__.t = function (value, mode) {
|
||||
/******/ if (mode & 1) value = __webpack_require__(value);
|
||||
/******/ if (mode & 8) return value;
|
||||
/******/ if (
|
||||
mode & 4 &&
|
||||
typeof value === "object" &&
|
||||
value &&
|
||||
value.__esModule
|
||||
)
|
||||
return value;
|
||||
/******/ var ns = Object.create(null);
|
||||
/******/ __webpack_require__.r(ns);
|
||||
/******/ Object.defineProperty(ns, "default", {
|
||||
enumerable: true,
|
||||
value: value,
|
||||
});
|
||||
/******/ if (mode & 2 && typeof value != "string")
|
||||
for (var key in value)
|
||||
__webpack_require__.d(
|
||||
ns,
|
||||
key,
|
||||
function (key) {
|
||||
return value[key];
|
||||
}.bind(null, key),
|
||||
);
|
||||
/******/ return ns;
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||
/******/ __webpack_require__.n = function (module) {
|
||||
/******/ var getter =
|
||||
module && module.__esModule
|
||||
? /******/ function getDefault() {
|
||||
return module["default"];
|
||||
}
|
||||
: /******/ function getModuleExports() {
|
||||
return module;
|
||||
};
|
||||
/******/ __webpack_require__.d(getter, "a", getter);
|
||||
/******/ return getter;
|
||||
/******/
|
||||
};
|
||||
/******/
|
||||
/******/ // Object.prototype.hasOwnProperty.call
|
||||
/******/ __webpack_require__.o = function (object, property) {
|
||||
return Object.prototype.hasOwnProperty.call(object, property);
|
||||
};
|
||||
/******/
|
||||
/******/ // __webpack_public_path__
|
||||
/******/ __webpack_require__.p = "";
|
||||
/******/
|
||||
/******/
|
||||
/******/ // Load entry module and return exports
|
||||
/******/ return __webpack_require__((__webpack_require__.s = 1));
|
||||
/******/
|
||||
})(
|
||||
/************************************************************************/
|
||||
/******/ [
|
||||
/* 0 */
|
||||
/***/ function (module, exports) {
|
||||
module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
|
||||
|
||||
/***/
|
||||
},
|
||||
/* 1 */
|
||||
/***/ function (module, __webpack_exports__, __webpack_require__) {
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ =
|
||||
__webpack_require__(0);
|
||||
/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default =
|
||||
/*#__PURE__*/ __webpack_require__.n(
|
||||
katex__WEBPACK_IMPORTED_MODULE_0__,
|
||||
);
|
||||
/**
|
||||
* renderA11yString returns a readable string.
|
||||
*
|
||||
* In some cases the string will have the proper semantic math
|
||||
* meaning,:
|
||||
* renderA11yString("\\frac{1}{2}"")
|
||||
* -> "start fraction, 1, divided by, 2, end fraction"
|
||||
*
|
||||
* However, other cases do not:
|
||||
* renderA11yString("f(x) = x^2")
|
||||
* -> "f, left parenthesis, x, right parenthesis, equals, x, squared"
|
||||
*
|
||||
* The commas in the string aim to increase ease of understanding
|
||||
* when read by a screenreader.
|
||||
*/
|
||||
// NOTE: since we're importing types here these files won't actually be
|
||||
// included in the build.
|
||||
// $FlowIgnore: we import the types directly anyways
|
||||
|
||||
var stringMap = {
|
||||
"(": "left parenthesis",
|
||||
")": "right parenthesis",
|
||||
"[": "open bracket",
|
||||
"]": "close bracket",
|
||||
"\\{": "left brace",
|
||||
"\\}": "right brace",
|
||||
"\\lvert": "open vertical bar",
|
||||
"\\rvert": "close vertical bar",
|
||||
"|": "vertical bar",
|
||||
"\\uparrow": "up arrow",
|
||||
"\\Uparrow": "up arrow",
|
||||
"\\downarrow": "down arrow",
|
||||
"\\Downarrow": "down arrow",
|
||||
"\\updownarrow": "up down arrow",
|
||||
"\\leftarrow": "left arrow",
|
||||
"\\Leftarrow": "left arrow",
|
||||
"\\rightarrow": "right arrow",
|
||||
"\\Rightarrow": "right arrow",
|
||||
"\\langle": "open angle",
|
||||
"\\rangle": "close angle",
|
||||
"\\lfloor": "open floor",
|
||||
"\\rfloor": "close floor",
|
||||
"\\int": "integral",
|
||||
"\\intop": "integral",
|
||||
"\\lim": "limit",
|
||||
"\\ln": "natural log",
|
||||
"\\log": "log",
|
||||
"\\sin": "sine",
|
||||
"\\cos": "cosine",
|
||||
"\\tan": "tangent",
|
||||
"\\cot": "cotangent",
|
||||
"\\sum": "sum",
|
||||
"/": "slash",
|
||||
",": "comma",
|
||||
".": "point",
|
||||
"-": "negative",
|
||||
"+": "plus",
|
||||
"~": "tilde",
|
||||
":": "colon",
|
||||
"?": "question mark",
|
||||
"'": "apostrophe",
|
||||
"\\%": "percent",
|
||||
" ": "space",
|
||||
"\\ ": "space",
|
||||
"\\$": "dollar sign",
|
||||
"\\angle": "angle",
|
||||
"\\degree": "degree",
|
||||
"\\circ": "circle",
|
||||
"\\vec": "vector",
|
||||
"\\triangle": "triangle",
|
||||
"\\pi": "pi",
|
||||
"\\prime": "prime",
|
||||
"\\infty": "infinity",
|
||||
"\\alpha": "alpha",
|
||||
"\\beta": "beta",
|
||||
"\\gamma": "gamma",
|
||||
"\\omega": "omega",
|
||||
"\\theta": "theta",
|
||||
"\\sigma": "sigma",
|
||||
"\\lambda": "lambda",
|
||||
"\\tau": "tau",
|
||||
"\\Delta": "delta",
|
||||
"\\delta": "delta",
|
||||
"\\mu": "mu",
|
||||
"\\rho": "rho",
|
||||
"\\nabla": "del",
|
||||
"\\ell": "ell",
|
||||
"\\ldots": "dots",
|
||||
// TODO: add entries for all accents
|
||||
"\\hat": "hat",
|
||||
"\\acute": "acute",
|
||||
};
|
||||
var powerMap = {
|
||||
prime: "prime",
|
||||
degree: "degrees",
|
||||
circle: "degrees",
|
||||
2: "squared",
|
||||
3: "cubed",
|
||||
};
|
||||
var openMap = {
|
||||
"|": "open vertical bar",
|
||||
".": "",
|
||||
};
|
||||
var closeMap = {
|
||||
"|": "close vertical bar",
|
||||
".": "",
|
||||
};
|
||||
var binMap = {
|
||||
"+": "plus",
|
||||
"-": "minus",
|
||||
"\\pm": "plus minus",
|
||||
"\\cdot": "dot",
|
||||
"*": "times",
|
||||
"/": "divided by",
|
||||
"\\times": "times",
|
||||
"\\div": "divided by",
|
||||
"\\circ": "circle",
|
||||
"\\bullet": "bullet",
|
||||
};
|
||||
var relMap = {
|
||||
"=": "equals",
|
||||
"\\approx": "approximately equals",
|
||||
"≠": "does not equal",
|
||||
"\\geq": "is greater than or equal to",
|
||||
"\\ge": "is greater than or equal to",
|
||||
"\\leq": "is less than or equal to",
|
||||
"\\le": "is less than or equal to",
|
||||
">": "is greater than",
|
||||
"<": "is less than",
|
||||
"\\leftarrow": "left arrow",
|
||||
"\\Leftarrow": "left arrow",
|
||||
"\\rightarrow": "right arrow",
|
||||
"\\Rightarrow": "right arrow",
|
||||
":": "colon",
|
||||
};
|
||||
var accentUnderMap = {
|
||||
"\\underleftarrow": "left arrow",
|
||||
"\\underrightarrow": "right arrow",
|
||||
"\\underleftrightarrow": "left-right arrow",
|
||||
"\\undergroup": "group",
|
||||
"\\underlinesegment": "line segment",
|
||||
"\\utilde": "tilde",
|
||||
};
|
||||
|
||||
var buildString = function buildString(str, type, a11yStrings) {
|
||||
if (!str) {
|
||||
return;
|
||||
}
|
||||
|
||||
var ret;
|
||||
|
||||
if (type === "open") {
|
||||
ret = str in openMap ? openMap[str] : stringMap[str] || str;
|
||||
} else if (type === "close") {
|
||||
ret = str in closeMap ? closeMap[str] : stringMap[str] || str;
|
||||
} else if (type === "bin") {
|
||||
ret = binMap[str] || str;
|
||||
} else if (type === "rel") {
|
||||
ret = relMap[str] || str;
|
||||
} else {
|
||||
ret = stringMap[str] || str;
|
||||
} // If the text to add is a number and there is already a string
|
||||
// in the list and the last string is a number then we should
|
||||
// combine them into a single number
|
||||
|
||||
if (
|
||||
/^\d+$/.test(ret) &&
|
||||
a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string
|
||||
// I think we might be able to drop the nested arrays, which would make
|
||||
// this easier to type - $FlowFixMe
|
||||
/^\d+$/.test(a11yStrings[a11yStrings.length - 1])
|
||||
) {
|
||||
a11yStrings[a11yStrings.length - 1] += ret;
|
||||
} else if (ret) {
|
||||
a11yStrings.push(ret);
|
||||
}
|
||||
};
|
||||
|
||||
var buildRegion = function buildRegion(a11yStrings, callback) {
|
||||
var regionStrings = [];
|
||||
a11yStrings.push(regionStrings);
|
||||
callback(regionStrings);
|
||||
};
|
||||
|
||||
var handleObject = function handleObject(
|
||||
tree,
|
||||
a11yStrings,
|
||||
atomType,
|
||||
) {
|
||||
// Everything else is assumed to be an object...
|
||||
switch (tree.type) {
|
||||
case "accent": {
|
||||
buildRegion(a11yStrings, function (a11yStrings) {
|
||||
buildA11yStrings(tree.base, a11yStrings, atomType);
|
||||
a11yStrings.push("with");
|
||||
buildString(tree.label, "normal", a11yStrings);
|
||||
a11yStrings.push("on top");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "accentUnder": {
|
||||
buildRegion(a11yStrings, function (a11yStrings) {
|
||||
buildA11yStrings(tree.base, a11yStrings, atomType);
|
||||
a11yStrings.push("with");
|
||||
buildString(
|
||||
accentUnderMap[tree.label],
|
||||
"normal",
|
||||
a11yStrings,
|
||||
);
|
||||
a11yStrings.push("underneath");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "accent-token": {
|
||||
// Used internally by accent symbols.
|
||||
break;
|
||||
}
|
||||
|
||||
case "atom": {
|
||||
var text = tree.text;
|
||||
|
||||
switch (tree.family) {
|
||||
case "bin": {
|
||||
buildString(text, "bin", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "close": {
|
||||
buildString(text, "close", a11yStrings);
|
||||
break;
|
||||
}
|
||||
// TODO(kevinb): figure out what should be done for inner
|
||||
|
||||
case "inner": {
|
||||
buildString(tree.text, "inner", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "open": {
|
||||
buildString(text, "open", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "punct": {
|
||||
buildString(text, "punct", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "rel": {
|
||||
buildString(text, "rel", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
tree.family;
|
||||
throw new Error(
|
||||
'"' + tree.family + '" is not a valid atom type',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "color": {
|
||||
var color = tree.color.replace(/katex-/, "");
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start color " + color);
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end color " + color);
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "color-token": {
|
||||
// Used by \color, \colorbox, and \fcolorbox but not directly rendered.
|
||||
// It's a leaf node and has no children so just break.
|
||||
break;
|
||||
}
|
||||
|
||||
case "delimsizing": {
|
||||
if (tree.delim && tree.delim !== ".") {
|
||||
buildString(tree.delim, "normal", a11yStrings);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "genfrac": {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
// genfrac can have unbalanced delimiters
|
||||
var leftDelim = tree.leftDelim,
|
||||
rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption
|
||||
// hasBarLine true -> fraction, false -> binomial
|
||||
|
||||
if (tree.hasBarLine) {
|
||||
regionStrings.push("start fraction");
|
||||
leftDelim && buildString(leftDelim, "open", regionStrings);
|
||||
buildA11yStrings(tree.numer, regionStrings, atomType);
|
||||
regionStrings.push("divided by");
|
||||
buildA11yStrings(tree.denom, regionStrings, atomType);
|
||||
rightDelim &&
|
||||
buildString(rightDelim, "close", regionStrings);
|
||||
regionStrings.push("end fraction");
|
||||
} else {
|
||||
regionStrings.push("start binomial");
|
||||
leftDelim && buildString(leftDelim, "open", regionStrings);
|
||||
buildA11yStrings(tree.numer, regionStrings, atomType);
|
||||
regionStrings.push("over");
|
||||
buildA11yStrings(tree.denom, regionStrings, atomType);
|
||||
rightDelim &&
|
||||
buildString(rightDelim, "close", regionStrings);
|
||||
regionStrings.push("end binomial");
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "kern": {
|
||||
// No op: we don't attempt to present kerning information
|
||||
// to the screen reader.
|
||||
break;
|
||||
}
|
||||
|
||||
case "leftright": {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
buildString(tree.left, "open", regionStrings);
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
buildString(tree.right, "close", regionStrings);
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "leftright-right": {
|
||||
// TODO: double check that this is a no-op
|
||||
break;
|
||||
}
|
||||
|
||||
case "lap": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "mathord": {
|
||||
buildString(tree.text, "normal", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "op": {
|
||||
var body = tree.body,
|
||||
name = tree.name;
|
||||
|
||||
if (body) {
|
||||
buildA11yStrings(body, a11yStrings, atomType);
|
||||
} else if (name) {
|
||||
buildString(name, "normal", a11yStrings);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "op-token": {
|
||||
// Used internally by operator symbols.
|
||||
buildString(tree.text, atomType, a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "ordgroup": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "overline": {
|
||||
buildRegion(a11yStrings, function (a11yStrings) {
|
||||
a11yStrings.push("start overline");
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
a11yStrings.push("end overline");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "phantom": {
|
||||
a11yStrings.push("empty space");
|
||||
break;
|
||||
}
|
||||
|
||||
case "raisebox": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "rule": {
|
||||
a11yStrings.push("rectangle");
|
||||
break;
|
||||
}
|
||||
|
||||
case "sizing": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "spacing": {
|
||||
a11yStrings.push("space");
|
||||
break;
|
||||
}
|
||||
|
||||
case "styling": {
|
||||
// We ignore the styling and just pass through the contents
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "sqrt": {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
var body = tree.body,
|
||||
index = tree.index;
|
||||
|
||||
if (index) {
|
||||
var indexString = flatten(
|
||||
buildA11yStrings(index, [], atomType),
|
||||
).join(",");
|
||||
|
||||
if (indexString === "3") {
|
||||
regionStrings.push("cube root of");
|
||||
buildA11yStrings(body, regionStrings, atomType);
|
||||
regionStrings.push("end cube root");
|
||||
return;
|
||||
}
|
||||
|
||||
regionStrings.push("root");
|
||||
regionStrings.push("start index");
|
||||
buildA11yStrings(index, regionStrings, atomType);
|
||||
regionStrings.push("end index");
|
||||
return;
|
||||
}
|
||||
|
||||
regionStrings.push("square root of");
|
||||
buildA11yStrings(body, regionStrings, atomType);
|
||||
regionStrings.push("end square root");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "supsub": {
|
||||
var base = tree.base,
|
||||
sub = tree.sub,
|
||||
sup = tree.sup;
|
||||
var isLog = false;
|
||||
|
||||
if (base) {
|
||||
buildA11yStrings(base, a11yStrings, atomType);
|
||||
isLog = base.type === "op" && base.name === "\\log";
|
||||
}
|
||||
|
||||
if (sub) {
|
||||
var regionName = isLog ? "base" : "subscript";
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start " + regionName);
|
||||
buildA11yStrings(sub, regionStrings, atomType);
|
||||
regionStrings.push("end " + regionName);
|
||||
});
|
||||
}
|
||||
|
||||
if (sup) {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
var supString = flatten(
|
||||
buildA11yStrings(sup, [], atomType),
|
||||
).join(",");
|
||||
|
||||
if (supString in powerMap) {
|
||||
regionStrings.push(powerMap[supString]);
|
||||
return;
|
||||
}
|
||||
|
||||
regionStrings.push("start superscript");
|
||||
buildA11yStrings(sup, regionStrings, atomType);
|
||||
regionStrings.push("end superscript");
|
||||
});
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "text": {
|
||||
// TODO: handle other fonts
|
||||
if (tree.font === "\\textbf") {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start bold text");
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end bold text");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start text");
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end text");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "textord": {
|
||||
buildString(tree.text, atomType, a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "smash": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "enclose": {
|
||||
// TODO: create a map for these.
|
||||
// TODO: differentiate between a body with a single atom, e.g.
|
||||
// "cancel a" instead of "start cancel, a, end cancel"
|
||||
if (/cancel/.test(tree.label)) {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start cancel");
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end cancel");
|
||||
});
|
||||
break;
|
||||
} else if (/box/.test(tree.label)) {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start box");
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end box");
|
||||
});
|
||||
break;
|
||||
} else if (/sout/.test(tree.label)) {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start strikeout");
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end strikeout");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
"KaTeX-a11y: enclose node with " +
|
||||
tree.label +
|
||||
" not supported yet",
|
||||
);
|
||||
}
|
||||
|
||||
case "vphantom": {
|
||||
throw new Error("KaTeX-a11y: vphantom not implemented yet");
|
||||
}
|
||||
|
||||
case "hphantom": {
|
||||
throw new Error("KaTeX-a11y: hphantom not implemented yet");
|
||||
}
|
||||
|
||||
case "operatorname": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "array": {
|
||||
throw new Error("KaTeX-a11y: array not implemented yet");
|
||||
}
|
||||
|
||||
case "raw": {
|
||||
throw new Error("KaTeX-a11y: raw not implemented yet");
|
||||
}
|
||||
|
||||
case "size": {
|
||||
// Although there are nodes of type "size" in the parse tree, they have
|
||||
// no semantic meaning and should be ignored.
|
||||
break;
|
||||
}
|
||||
|
||||
case "url": {
|
||||
throw new Error("KaTeX-a11y: url not implemented yet");
|
||||
}
|
||||
|
||||
case "tag": {
|
||||
throw new Error("KaTeX-a11y: tag not implemented yet");
|
||||
}
|
||||
|
||||
case "verb": {
|
||||
buildString("start verbatim", "normal", a11yStrings);
|
||||
buildString(tree.body, "normal", a11yStrings);
|
||||
buildString("end verbatim", "normal", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "environment": {
|
||||
throw new Error("KaTeX-a11y: environment not implemented yet");
|
||||
}
|
||||
|
||||
case "horizBrace": {
|
||||
buildString(
|
||||
"start " + tree.label.slice(1),
|
||||
"normal",
|
||||
a11yStrings,
|
||||
);
|
||||
buildA11yStrings(tree.base, a11yStrings, atomType);
|
||||
buildString(
|
||||
"end " + tree.label.slice(1),
|
||||
"normal",
|
||||
a11yStrings,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
case "infix": {
|
||||
// All infix nodes are replace with other nodes.
|
||||
break;
|
||||
}
|
||||
|
||||
case "includegraphics": {
|
||||
throw new Error(
|
||||
"KaTeX-a11y: includegraphics not implemented yet",
|
||||
);
|
||||
}
|
||||
|
||||
case "font": {
|
||||
// TODO: callout the start/end of specific fonts
|
||||
// TODO: map \BBb{N} to "the naturals" or something like that
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "href": {
|
||||
throw new Error("KaTeX-a11y: href not implemented yet");
|
||||
}
|
||||
|
||||
case "cr": {
|
||||
// This is used by environments.
|
||||
throw new Error("KaTeX-a11y: cr not implemented yet");
|
||||
}
|
||||
|
||||
case "underline": {
|
||||
buildRegion(a11yStrings, function (a11yStrings) {
|
||||
a11yStrings.push("start underline");
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
a11yStrings.push("end underline");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "xArrow": {
|
||||
throw new Error("KaTeX-a11y: xArrow not implemented yet");
|
||||
}
|
||||
|
||||
case "mclass": {
|
||||
// \neq and \ne are macros so we let "htmlmathml" render the mathmal
|
||||
// side of things and extract the text from that.
|
||||
var _atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass
|
||||
|
||||
buildA11yStrings(tree.body, a11yStrings, _atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "mathchoice": {
|
||||
// TODO: track which which style we're using, e.g. dispaly, text, etc.
|
||||
// default to text style if even that may not be the correct style
|
||||
buildA11yStrings(tree.text, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "htmlmathml": {
|
||||
buildA11yStrings(tree.mathml, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "middle": {
|
||||
buildString(tree.delim, atomType, a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
tree.type;
|
||||
throw new Error("KaTeX a11y un-recognized type: " + tree.type);
|
||||
}
|
||||
};
|
||||
|
||||
var buildA11yStrings = function buildA11yStrings(
|
||||
tree,
|
||||
a11yStrings,
|
||||
atomType,
|
||||
) {
|
||||
if (a11yStrings === void 0) {
|
||||
a11yStrings = [];
|
||||
}
|
||||
|
||||
if (tree instanceof Array) {
|
||||
for (var i = 0; i < tree.length; i++) {
|
||||
buildA11yStrings(tree[i], a11yStrings, atomType);
|
||||
}
|
||||
} else {
|
||||
handleObject(tree, a11yStrings, atomType);
|
||||
}
|
||||
|
||||
return a11yStrings;
|
||||
};
|
||||
|
||||
var flatten = function flatten(array) {
|
||||
var result = [];
|
||||
array.forEach(function (item) {
|
||||
if (item instanceof Array) {
|
||||
result = result.concat(flatten(item));
|
||||
} else {
|
||||
result.push(item);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
};
|
||||
|
||||
var renderA11yString = function renderA11yString(text, settings) {
|
||||
var tree = katex__WEBPACK_IMPORTED_MODULE_0___default.a.__parse(
|
||||
text,
|
||||
settings,
|
||||
);
|
||||
|
||||
var a11yStrings = buildA11yStrings(tree, [], "normal");
|
||||
return flatten(a11yStrings).join(", ");
|
||||
};
|
||||
|
||||
/* harmony default export */ __webpack_exports__["default"] =
|
||||
renderA11yString;
|
||||
|
||||
/***/
|
||||
},
|
||||
/******/
|
||||
],
|
||||
)["default"];
|
||||
},
|
||||
);
|
||||
529
assets/bower_components/katex/dist/contrib/render-a11y-string.min.js
vendored
Normal file
529
assets/bower_components/katex/dist/contrib/render-a11y-string.min.js
vendored
Normal file
@@ -0,0 +1,529 @@
|
||||
!(function (e, r) {
|
||||
if ("object" == typeof exports && "object" == typeof module)
|
||||
module.exports = r(require("katex"));
|
||||
else if ("function" == typeof define && define.amd) define(["katex"], r);
|
||||
else {
|
||||
var t = "object" == typeof exports ? r(require("katex")) : r(e.katex);
|
||||
for (var a in t) ("object" == typeof exports ? exports : e)[a] = t[a];
|
||||
}
|
||||
})("undefined" != typeof self ? self : this, function (e) {
|
||||
return (function (e) {
|
||||
var r = {};
|
||||
function t(a) {
|
||||
if (r[a]) return r[a].exports;
|
||||
var o = (r[a] = { i: a, l: !1, exports: {} });
|
||||
return e[a].call(o.exports, o, o.exports, t), (o.l = !0), o.exports;
|
||||
}
|
||||
return (
|
||||
(t.m = e),
|
||||
(t.c = r),
|
||||
(t.d = function (e, r, a) {
|
||||
t.o(e, r) || Object.defineProperty(e, r, { enumerable: !0, get: a });
|
||||
}),
|
||||
(t.r = function (e) {
|
||||
"undefined" != typeof Symbol &&
|
||||
Symbol.toStringTag &&
|
||||
Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }),
|
||||
Object.defineProperty(e, "__esModule", { value: !0 });
|
||||
}),
|
||||
(t.t = function (e, r) {
|
||||
if ((1 & r && (e = t(e)), 8 & r)) return e;
|
||||
if (4 & r && "object" == typeof e && e && e.__esModule) return e;
|
||||
var a = Object.create(null);
|
||||
if (
|
||||
(t.r(a),
|
||||
Object.defineProperty(a, "default", { enumerable: !0, value: e }),
|
||||
2 & r && "string" != typeof e)
|
||||
)
|
||||
for (var o in e)
|
||||
t.d(
|
||||
a,
|
||||
o,
|
||||
function (r) {
|
||||
return e[r];
|
||||
}.bind(null, o),
|
||||
);
|
||||
return a;
|
||||
}),
|
||||
(t.n = function (e) {
|
||||
var r =
|
||||
e && e.__esModule
|
||||
? function () {
|
||||
return e.default;
|
||||
}
|
||||
: function () {
|
||||
return e;
|
||||
};
|
||||
return t.d(r, "a", r), r;
|
||||
}),
|
||||
(t.o = function (e, r) {
|
||||
return Object.prototype.hasOwnProperty.call(e, r);
|
||||
}),
|
||||
(t.p = ""),
|
||||
t((t.s = 1))
|
||||
);
|
||||
})([
|
||||
function (r, t) {
|
||||
r.exports = e;
|
||||
},
|
||||
function (e, r, t) {
|
||||
"use strict";
|
||||
t.r(r);
|
||||
var a = t(0),
|
||||
o = t.n(a),
|
||||
n = {
|
||||
"(": "left parenthesis",
|
||||
")": "right parenthesis",
|
||||
"[": "open bracket",
|
||||
"]": "close bracket",
|
||||
"\\{": "left brace",
|
||||
"\\}": "right brace",
|
||||
"\\lvert": "open vertical bar",
|
||||
"\\rvert": "close vertical bar",
|
||||
"|": "vertical bar",
|
||||
"\\uparrow": "up arrow",
|
||||
"\\Uparrow": "up arrow",
|
||||
"\\downarrow": "down arrow",
|
||||
"\\Downarrow": "down arrow",
|
||||
"\\updownarrow": "up down arrow",
|
||||
"\\leftarrow": "left arrow",
|
||||
"\\Leftarrow": "left arrow",
|
||||
"\\rightarrow": "right arrow",
|
||||
"\\Rightarrow": "right arrow",
|
||||
"\\langle": "open angle",
|
||||
"\\rangle": "close angle",
|
||||
"\\lfloor": "open floor",
|
||||
"\\rfloor": "close floor",
|
||||
"\\int": "integral",
|
||||
"\\intop": "integral",
|
||||
"\\lim": "limit",
|
||||
"\\ln": "natural log",
|
||||
"\\log": "log",
|
||||
"\\sin": "sine",
|
||||
"\\cos": "cosine",
|
||||
"\\tan": "tangent",
|
||||
"\\cot": "cotangent",
|
||||
"\\sum": "sum",
|
||||
"/": "slash",
|
||||
",": "comma",
|
||||
".": "point",
|
||||
"-": "negative",
|
||||
"+": "plus",
|
||||
"~": "tilde",
|
||||
":": "colon",
|
||||
"?": "question mark",
|
||||
"'": "apostrophe",
|
||||
"\\%": "percent",
|
||||
" ": "space",
|
||||
"\\ ": "space",
|
||||
"\\$": "dollar sign",
|
||||
"\\angle": "angle",
|
||||
"\\degree": "degree",
|
||||
"\\circ": "circle",
|
||||
"\\vec": "vector",
|
||||
"\\triangle": "triangle",
|
||||
"\\pi": "pi",
|
||||
"\\prime": "prime",
|
||||
"\\infty": "infinity",
|
||||
"\\alpha": "alpha",
|
||||
"\\beta": "beta",
|
||||
"\\gamma": "gamma",
|
||||
"\\omega": "omega",
|
||||
"\\theta": "theta",
|
||||
"\\sigma": "sigma",
|
||||
"\\lambda": "lambda",
|
||||
"\\tau": "tau",
|
||||
"\\Delta": "delta",
|
||||
"\\delta": "delta",
|
||||
"\\mu": "mu",
|
||||
"\\rho": "rho",
|
||||
"\\nabla": "del",
|
||||
"\\ell": "ell",
|
||||
"\\ldots": "dots",
|
||||
"\\hat": "hat",
|
||||
"\\acute": "acute",
|
||||
},
|
||||
s = {
|
||||
prime: "prime",
|
||||
degree: "degrees",
|
||||
circle: "degrees",
|
||||
2: "squared",
|
||||
3: "cubed",
|
||||
},
|
||||
i = { "|": "open vertical bar", ".": "" },
|
||||
l = { "|": "close vertical bar", ".": "" },
|
||||
c = {
|
||||
"+": "plus",
|
||||
"-": "minus",
|
||||
"\\pm": "plus minus",
|
||||
"\\cdot": "dot",
|
||||
"*": "times",
|
||||
"/": "divided by",
|
||||
"\\times": "times",
|
||||
"\\div": "divided by",
|
||||
"\\circ": "circle",
|
||||
"\\bullet": "bullet",
|
||||
},
|
||||
u = {
|
||||
"=": "equals",
|
||||
"\\approx": "approximately equals",
|
||||
"\u2260": "does not equal",
|
||||
"\\geq": "is greater than or equal to",
|
||||
"\\ge": "is greater than or equal to",
|
||||
"\\leq": "is less than or equal to",
|
||||
"\\le": "is less than or equal to",
|
||||
">": "is greater than",
|
||||
"<": "is less than",
|
||||
"\\leftarrow": "left arrow",
|
||||
"\\Leftarrow": "left arrow",
|
||||
"\\rightarrow": "right arrow",
|
||||
"\\Rightarrow": "right arrow",
|
||||
":": "colon",
|
||||
},
|
||||
p = {
|
||||
"\\underleftarrow": "left arrow",
|
||||
"\\underrightarrow": "right arrow",
|
||||
"\\underleftrightarrow": "left-right arrow",
|
||||
"\\undergroup": "group",
|
||||
"\\underlinesegment": "line segment",
|
||||
"\\utilde": "tilde",
|
||||
},
|
||||
d = function (e, r, t) {
|
||||
var a;
|
||||
e &&
|
||||
(/^\d+$/.test(
|
||||
(a =
|
||||
"open" === r
|
||||
? e in i
|
||||
? i[e]
|
||||
: n[e] || e
|
||||
: "close" === r
|
||||
? e in l
|
||||
? l[e]
|
||||
: n[e] || e
|
||||
: "bin" === r
|
||||
? c[e] || e
|
||||
: "rel" === r
|
||||
? u[e] || e
|
||||
: n[e] || e),
|
||||
) &&
|
||||
t.length > 0 &&
|
||||
/^\d+$/.test(t[t.length - 1])
|
||||
? (t[t.length - 1] += a)
|
||||
: a && t.push(a));
|
||||
},
|
||||
b = function (e, r) {
|
||||
var t = [];
|
||||
e.push(t), r(t);
|
||||
},
|
||||
h = function (e, r, t) {
|
||||
switch (e.type) {
|
||||
case "accent":
|
||||
b(r, function (r) {
|
||||
f(e.base, r, t),
|
||||
r.push("with"),
|
||||
d(e.label, "normal", r),
|
||||
r.push("on top");
|
||||
});
|
||||
break;
|
||||
case "accentUnder":
|
||||
b(r, function (r) {
|
||||
f(e.base, r, t),
|
||||
r.push("with"),
|
||||
d(p[e.label], "normal", r),
|
||||
r.push("underneath");
|
||||
});
|
||||
break;
|
||||
case "accent-token":
|
||||
break;
|
||||
case "atom":
|
||||
var a = e.text;
|
||||
switch (e.family) {
|
||||
case "bin":
|
||||
d(a, "bin", r);
|
||||
break;
|
||||
case "close":
|
||||
d(a, "close", r);
|
||||
break;
|
||||
case "inner":
|
||||
d(e.text, "inner", r);
|
||||
break;
|
||||
case "open":
|
||||
d(a, "open", r);
|
||||
break;
|
||||
case "punct":
|
||||
d(a, "punct", r);
|
||||
break;
|
||||
case "rel":
|
||||
d(a, "rel", r);
|
||||
break;
|
||||
default:
|
||||
throw (
|
||||
(e.family,
|
||||
new Error('"' + e.family + '" is not a valid atom type'))
|
||||
);
|
||||
}
|
||||
break;
|
||||
case "color":
|
||||
var o = e.color.replace(/katex-/, "");
|
||||
b(r, function (r) {
|
||||
r.push("start color " + o),
|
||||
f(e.body, r, t),
|
||||
r.push("end color " + o);
|
||||
});
|
||||
break;
|
||||
case "color-token":
|
||||
break;
|
||||
case "delimsizing":
|
||||
e.delim && "." !== e.delim && d(e.delim, "normal", r);
|
||||
break;
|
||||
case "genfrac":
|
||||
b(r, function (r) {
|
||||
var a = e.leftDelim,
|
||||
o = e.rightDelim;
|
||||
e.hasBarLine
|
||||
? (r.push("start fraction"),
|
||||
a && d(a, "open", r),
|
||||
f(e.numer, r, t),
|
||||
r.push("divided by"),
|
||||
f(e.denom, r, t),
|
||||
o && d(o, "close", r),
|
||||
r.push("end fraction"))
|
||||
: (r.push("start binomial"),
|
||||
a && d(a, "open", r),
|
||||
f(e.numer, r, t),
|
||||
r.push("over"),
|
||||
f(e.denom, r, t),
|
||||
o && d(o, "close", r),
|
||||
r.push("end binomial"));
|
||||
});
|
||||
break;
|
||||
case "kern":
|
||||
break;
|
||||
case "leftright":
|
||||
b(r, function (r) {
|
||||
d(e.left, "open", r), f(e.body, r, t), d(e.right, "close", r);
|
||||
});
|
||||
break;
|
||||
case "leftright-right":
|
||||
break;
|
||||
case "lap":
|
||||
f(e.body, r, t);
|
||||
break;
|
||||
case "mathord":
|
||||
d(e.text, "normal", r);
|
||||
break;
|
||||
case "op":
|
||||
var n = e.body,
|
||||
i = e.name;
|
||||
n ? f(n, r, t) : i && d(i, "normal", r);
|
||||
break;
|
||||
case "op-token":
|
||||
d(e.text, t, r);
|
||||
break;
|
||||
case "ordgroup":
|
||||
f(e.body, r, t);
|
||||
break;
|
||||
case "overline":
|
||||
b(r, function (r) {
|
||||
r.push("start overline"),
|
||||
f(e.body, r, t),
|
||||
r.push("end overline");
|
||||
});
|
||||
break;
|
||||
case "phantom":
|
||||
r.push("empty space");
|
||||
break;
|
||||
case "raisebox":
|
||||
f(e.body, r, t);
|
||||
break;
|
||||
case "rule":
|
||||
r.push("rectangle");
|
||||
break;
|
||||
case "sizing":
|
||||
f(e.body, r, t);
|
||||
break;
|
||||
case "spacing":
|
||||
r.push("space");
|
||||
break;
|
||||
case "styling":
|
||||
f(e.body, r, t);
|
||||
break;
|
||||
case "sqrt":
|
||||
b(r, function (r) {
|
||||
var a = e.body,
|
||||
o = e.index;
|
||||
if (o)
|
||||
return "3" === m(f(o, [], t)).join(",")
|
||||
? (r.push("cube root of"),
|
||||
f(a, r, t),
|
||||
void r.push("end cube root"))
|
||||
: (r.push("root"),
|
||||
r.push("start index"),
|
||||
f(o, r, t),
|
||||
void r.push("end index"));
|
||||
r.push("square root of"), f(a, r, t), r.push("end square root");
|
||||
});
|
||||
break;
|
||||
case "supsub":
|
||||
var l = e.base,
|
||||
c = e.sub,
|
||||
u = e.sup,
|
||||
h = !1;
|
||||
if (
|
||||
(l && (f(l, r, t), (h = "op" === l.type && "\\log" === l.name)),
|
||||
c)
|
||||
) {
|
||||
var y = h ? "base" : "subscript";
|
||||
b(r, function (e) {
|
||||
e.push("start " + y), f(c, e, t), e.push("end " + y);
|
||||
});
|
||||
}
|
||||
u &&
|
||||
b(r, function (e) {
|
||||
var r = m(f(u, [], t)).join(",");
|
||||
r in s
|
||||
? e.push(s[r])
|
||||
: (e.push("start superscript"),
|
||||
f(u, e, t),
|
||||
e.push("end superscript"));
|
||||
});
|
||||
break;
|
||||
case "text":
|
||||
if ("\\textbf" === e.font) {
|
||||
b(r, function (r) {
|
||||
r.push("start bold text"),
|
||||
f(e.body, r, t),
|
||||
r.push("end bold text");
|
||||
});
|
||||
break;
|
||||
}
|
||||
b(r, function (r) {
|
||||
r.push("start text"), f(e.body, r, t), r.push("end text");
|
||||
});
|
||||
break;
|
||||
case "textord":
|
||||
d(e.text, t, r);
|
||||
break;
|
||||
case "smash":
|
||||
f(e.body, r, t);
|
||||
break;
|
||||
case "enclose":
|
||||
if (/cancel/.test(e.label)) {
|
||||
b(r, function (r) {
|
||||
r.push("start cancel"), f(e.body, r, t), r.push("end cancel");
|
||||
});
|
||||
break;
|
||||
}
|
||||
if (/box/.test(e.label)) {
|
||||
b(r, function (r) {
|
||||
r.push("start box"), f(e.body, r, t), r.push("end box");
|
||||
});
|
||||
break;
|
||||
}
|
||||
if (/sout/.test(e.label)) {
|
||||
b(r, function (r) {
|
||||
r.push("start strikeout"),
|
||||
f(e.body, r, t),
|
||||
r.push("end strikeout");
|
||||
});
|
||||
break;
|
||||
}
|
||||
throw new Error(
|
||||
"KaTeX-a11y: enclose node with " +
|
||||
e.label +
|
||||
" not supported yet",
|
||||
);
|
||||
case "vphantom":
|
||||
throw new Error("KaTeX-a11y: vphantom not implemented yet");
|
||||
case "hphantom":
|
||||
throw new Error("KaTeX-a11y: hphantom not implemented yet");
|
||||
case "operatorname":
|
||||
f(e.body, r, t);
|
||||
break;
|
||||
case "array":
|
||||
throw new Error("KaTeX-a11y: array not implemented yet");
|
||||
case "raw":
|
||||
throw new Error("KaTeX-a11y: raw not implemented yet");
|
||||
case "size":
|
||||
break;
|
||||
case "url":
|
||||
throw new Error("KaTeX-a11y: url not implemented yet");
|
||||
case "tag":
|
||||
throw new Error("KaTeX-a11y: tag not implemented yet");
|
||||
case "verb":
|
||||
d("start verbatim", "normal", r),
|
||||
d(e.body, "normal", r),
|
||||
d("end verbatim", "normal", r);
|
||||
break;
|
||||
case "environment":
|
||||
throw new Error("KaTeX-a11y: environment not implemented yet");
|
||||
case "horizBrace":
|
||||
d("start " + e.label.slice(1), "normal", r),
|
||||
f(e.base, r, t),
|
||||
d("end " + e.label.slice(1), "normal", r);
|
||||
break;
|
||||
case "infix":
|
||||
break;
|
||||
case "includegraphics":
|
||||
throw new Error(
|
||||
"KaTeX-a11y: includegraphics not implemented yet",
|
||||
);
|
||||
case "font":
|
||||
f(e.body, r, t);
|
||||
break;
|
||||
case "href":
|
||||
throw new Error("KaTeX-a11y: href not implemented yet");
|
||||
case "cr":
|
||||
throw new Error("KaTeX-a11y: cr not implemented yet");
|
||||
case "underline":
|
||||
b(r, function (r) {
|
||||
r.push("start underline"),
|
||||
f(e.body, r, t),
|
||||
r.push("end underline");
|
||||
});
|
||||
break;
|
||||
case "xArrow":
|
||||
throw new Error("KaTeX-a11y: xArrow not implemented yet");
|
||||
case "mclass":
|
||||
var g = e.mclass.slice(1);
|
||||
f(e.body, r, g);
|
||||
break;
|
||||
case "mathchoice":
|
||||
f(e.text, r, t);
|
||||
break;
|
||||
case "htmlmathml":
|
||||
f(e.mathml, r, t);
|
||||
break;
|
||||
case "middle":
|
||||
d(e.delim, t, r);
|
||||
break;
|
||||
default:
|
||||
throw (
|
||||
(e.type, new Error("KaTeX a11y un-recognized type: " + e.type))
|
||||
);
|
||||
}
|
||||
},
|
||||
f = function e(r, t, a) {
|
||||
if ((void 0 === t && (t = []), r instanceof Array))
|
||||
for (var o = 0; o < r.length; o++) e(r[o], t, a);
|
||||
else h(r, t, a);
|
||||
return t;
|
||||
},
|
||||
m = function e(r) {
|
||||
var t = [];
|
||||
return (
|
||||
r.forEach(function (r) {
|
||||
r instanceof Array ? (t = t.concat(e(r))) : t.push(r);
|
||||
}),
|
||||
t
|
||||
);
|
||||
};
|
||||
r.default = function (e, r) {
|
||||
var t = o.a.__parse(e, r),
|
||||
a = f(t, [], "normal");
|
||||
return m(a).join(", ");
|
||||
};
|
||||
},
|
||||
]).default;
|
||||
});
|
||||
695
assets/bower_components/katex/dist/contrib/render-a11y-string.mjs
vendored
Normal file
695
assets/bower_components/katex/dist/contrib/render-a11y-string.mjs
vendored
Normal file
@@ -0,0 +1,695 @@
|
||||
import katex from "../katex.mjs";
|
||||
|
||||
/**
|
||||
* renderA11yString returns a readable string.
|
||||
*
|
||||
* In some cases the string will have the proper semantic math
|
||||
* meaning,:
|
||||
* renderA11yString("\\frac{1}{2}"")
|
||||
* -> "start fraction, 1, divided by, 2, end fraction"
|
||||
*
|
||||
* However, other cases do not:
|
||||
* renderA11yString("f(x) = x^2")
|
||||
* -> "f, left parenthesis, x, right parenthesis, equals, x, squared"
|
||||
*
|
||||
* The commas in the string aim to increase ease of understanding
|
||||
* when read by a screenreader.
|
||||
*/
|
||||
const stringMap = {
|
||||
"(": "left parenthesis",
|
||||
")": "right parenthesis",
|
||||
"[": "open bracket",
|
||||
"]": "close bracket",
|
||||
"\\{": "left brace",
|
||||
"\\}": "right brace",
|
||||
"\\lvert": "open vertical bar",
|
||||
"\\rvert": "close vertical bar",
|
||||
"|": "vertical bar",
|
||||
"\\uparrow": "up arrow",
|
||||
"\\Uparrow": "up arrow",
|
||||
"\\downarrow": "down arrow",
|
||||
"\\Downarrow": "down arrow",
|
||||
"\\updownarrow": "up down arrow",
|
||||
"\\leftarrow": "left arrow",
|
||||
"\\Leftarrow": "left arrow",
|
||||
"\\rightarrow": "right arrow",
|
||||
"\\Rightarrow": "right arrow",
|
||||
"\\langle": "open angle",
|
||||
"\\rangle": "close angle",
|
||||
"\\lfloor": "open floor",
|
||||
"\\rfloor": "close floor",
|
||||
"\\int": "integral",
|
||||
"\\intop": "integral",
|
||||
"\\lim": "limit",
|
||||
"\\ln": "natural log",
|
||||
"\\log": "log",
|
||||
"\\sin": "sine",
|
||||
"\\cos": "cosine",
|
||||
"\\tan": "tangent",
|
||||
"\\cot": "cotangent",
|
||||
"\\sum": "sum",
|
||||
"/": "slash",
|
||||
",": "comma",
|
||||
".": "point",
|
||||
"-": "negative",
|
||||
"+": "plus",
|
||||
"~": "tilde",
|
||||
":": "colon",
|
||||
"?": "question mark",
|
||||
"'": "apostrophe",
|
||||
"\\%": "percent",
|
||||
" ": "space",
|
||||
"\\ ": "space",
|
||||
"\\$": "dollar sign",
|
||||
"\\angle": "angle",
|
||||
"\\degree": "degree",
|
||||
"\\circ": "circle",
|
||||
"\\vec": "vector",
|
||||
"\\triangle": "triangle",
|
||||
"\\pi": "pi",
|
||||
"\\prime": "prime",
|
||||
"\\infty": "infinity",
|
||||
"\\alpha": "alpha",
|
||||
"\\beta": "beta",
|
||||
"\\gamma": "gamma",
|
||||
"\\omega": "omega",
|
||||
"\\theta": "theta",
|
||||
"\\sigma": "sigma",
|
||||
"\\lambda": "lambda",
|
||||
"\\tau": "tau",
|
||||
"\\Delta": "delta",
|
||||
"\\delta": "delta",
|
||||
"\\mu": "mu",
|
||||
"\\rho": "rho",
|
||||
"\\nabla": "del",
|
||||
"\\ell": "ell",
|
||||
"\\ldots": "dots",
|
||||
// TODO: add entries for all accents
|
||||
"\\hat": "hat",
|
||||
"\\acute": "acute",
|
||||
};
|
||||
const powerMap = {
|
||||
prime: "prime",
|
||||
degree: "degrees",
|
||||
circle: "degrees",
|
||||
2: "squared",
|
||||
3: "cubed",
|
||||
};
|
||||
const openMap = {
|
||||
"|": "open vertical bar",
|
||||
".": "",
|
||||
};
|
||||
const closeMap = {
|
||||
"|": "close vertical bar",
|
||||
".": "",
|
||||
};
|
||||
const binMap = {
|
||||
"+": "plus",
|
||||
"-": "minus",
|
||||
"\\pm": "plus minus",
|
||||
"\\cdot": "dot",
|
||||
"*": "times",
|
||||
"/": "divided by",
|
||||
"\\times": "times",
|
||||
"\\div": "divided by",
|
||||
"\\circ": "circle",
|
||||
"\\bullet": "bullet",
|
||||
};
|
||||
const relMap = {
|
||||
"=": "equals",
|
||||
"\\approx": "approximately equals",
|
||||
"≠": "does not equal",
|
||||
"\\geq": "is greater than or equal to",
|
||||
"\\ge": "is greater than or equal to",
|
||||
"\\leq": "is less than or equal to",
|
||||
"\\le": "is less than or equal to",
|
||||
">": "is greater than",
|
||||
"<": "is less than",
|
||||
"\\leftarrow": "left arrow",
|
||||
"\\Leftarrow": "left arrow",
|
||||
"\\rightarrow": "right arrow",
|
||||
"\\Rightarrow": "right arrow",
|
||||
":": "colon",
|
||||
};
|
||||
const accentUnderMap = {
|
||||
"\\underleftarrow": "left arrow",
|
||||
"\\underrightarrow": "right arrow",
|
||||
"\\underleftrightarrow": "left-right arrow",
|
||||
"\\undergroup": "group",
|
||||
"\\underlinesegment": "line segment",
|
||||
"\\utilde": "tilde",
|
||||
};
|
||||
|
||||
const buildString = (str, type, a11yStrings) => {
|
||||
if (!str) {
|
||||
return;
|
||||
}
|
||||
|
||||
let ret;
|
||||
|
||||
if (type === "open") {
|
||||
ret = str in openMap ? openMap[str] : stringMap[str] || str;
|
||||
} else if (type === "close") {
|
||||
ret = str in closeMap ? closeMap[str] : stringMap[str] || str;
|
||||
} else if (type === "bin") {
|
||||
ret = binMap[str] || str;
|
||||
} else if (type === "rel") {
|
||||
ret = relMap[str] || str;
|
||||
} else {
|
||||
ret = stringMap[str] || str;
|
||||
} // If the text to add is a number and there is already a string
|
||||
// in the list and the last string is a number then we should
|
||||
// combine them into a single number
|
||||
|
||||
if (
|
||||
/^\d+$/.test(ret) &&
|
||||
a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string
|
||||
// I think we might be able to drop the nested arrays, which would make
|
||||
// this easier to type - $FlowFixMe
|
||||
/^\d+$/.test(a11yStrings[a11yStrings.length - 1])
|
||||
) {
|
||||
a11yStrings[a11yStrings.length - 1] += ret;
|
||||
} else if (ret) {
|
||||
a11yStrings.push(ret);
|
||||
}
|
||||
};
|
||||
|
||||
const buildRegion = (a11yStrings, callback) => {
|
||||
const regionStrings = [];
|
||||
a11yStrings.push(regionStrings);
|
||||
callback(regionStrings);
|
||||
};
|
||||
|
||||
const handleObject = (tree, a11yStrings, atomType) => {
|
||||
// Everything else is assumed to be an object...
|
||||
switch (tree.type) {
|
||||
case "accent": {
|
||||
buildRegion(a11yStrings, (a11yStrings) => {
|
||||
buildA11yStrings(tree.base, a11yStrings, atomType);
|
||||
a11yStrings.push("with");
|
||||
buildString(tree.label, "normal", a11yStrings);
|
||||
a11yStrings.push("on top");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "accentUnder": {
|
||||
buildRegion(a11yStrings, (a11yStrings) => {
|
||||
buildA11yStrings(tree.base, a11yStrings, atomType);
|
||||
a11yStrings.push("with");
|
||||
buildString(accentUnderMap[tree.label], "normal", a11yStrings);
|
||||
a11yStrings.push("underneath");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "accent-token": {
|
||||
// Used internally by accent symbols.
|
||||
break;
|
||||
}
|
||||
|
||||
case "atom": {
|
||||
const text = tree.text;
|
||||
|
||||
switch (tree.family) {
|
||||
case "bin": {
|
||||
buildString(text, "bin", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "close": {
|
||||
buildString(text, "close", a11yStrings);
|
||||
break;
|
||||
}
|
||||
// TODO(kevinb): figure out what should be done for inner
|
||||
|
||||
case "inner": {
|
||||
buildString(tree.text, "inner", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "open": {
|
||||
buildString(text, "open", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "punct": {
|
||||
buildString(text, "punct", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "rel": {
|
||||
buildString(text, "rel", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
tree.family;
|
||||
throw new Error(`"${tree.family}" is not a valid atom type`);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "color": {
|
||||
const color = tree.color.replace(/katex-/, "");
|
||||
buildRegion(a11yStrings, (regionStrings) => {
|
||||
regionStrings.push("start color " + color);
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end color " + color);
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "color-token": {
|
||||
// Used by \color, \colorbox, and \fcolorbox but not directly rendered.
|
||||
// It's a leaf node and has no children so just break.
|
||||
break;
|
||||
}
|
||||
|
||||
case "delimsizing": {
|
||||
if (tree.delim && tree.delim !== ".") {
|
||||
buildString(tree.delim, "normal", a11yStrings);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "genfrac": {
|
||||
buildRegion(a11yStrings, (regionStrings) => {
|
||||
// genfrac can have unbalanced delimiters
|
||||
const leftDelim = tree.leftDelim,
|
||||
rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption
|
||||
// hasBarLine true -> fraction, false -> binomial
|
||||
|
||||
if (tree.hasBarLine) {
|
||||
regionStrings.push("start fraction");
|
||||
leftDelim && buildString(leftDelim, "open", regionStrings);
|
||||
buildA11yStrings(tree.numer, regionStrings, atomType);
|
||||
regionStrings.push("divided by");
|
||||
buildA11yStrings(tree.denom, regionStrings, atomType);
|
||||
rightDelim && buildString(rightDelim, "close", regionStrings);
|
||||
regionStrings.push("end fraction");
|
||||
} else {
|
||||
regionStrings.push("start binomial");
|
||||
leftDelim && buildString(leftDelim, "open", regionStrings);
|
||||
buildA11yStrings(tree.numer, regionStrings, atomType);
|
||||
regionStrings.push("over");
|
||||
buildA11yStrings(tree.denom, regionStrings, atomType);
|
||||
rightDelim && buildString(rightDelim, "close", regionStrings);
|
||||
regionStrings.push("end binomial");
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "kern": {
|
||||
// No op: we don't attempt to present kerning information
|
||||
// to the screen reader.
|
||||
break;
|
||||
}
|
||||
|
||||
case "leftright": {
|
||||
buildRegion(a11yStrings, (regionStrings) => {
|
||||
buildString(tree.left, "open", regionStrings);
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
buildString(tree.right, "close", regionStrings);
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "leftright-right": {
|
||||
// TODO: double check that this is a no-op
|
||||
break;
|
||||
}
|
||||
|
||||
case "lap": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "mathord": {
|
||||
buildString(tree.text, "normal", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "op": {
|
||||
const body = tree.body,
|
||||
name = tree.name;
|
||||
|
||||
if (body) {
|
||||
buildA11yStrings(body, a11yStrings, atomType);
|
||||
} else if (name) {
|
||||
buildString(name, "normal", a11yStrings);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "op-token": {
|
||||
// Used internally by operator symbols.
|
||||
buildString(tree.text, atomType, a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "ordgroup": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "overline": {
|
||||
buildRegion(a11yStrings, function (a11yStrings) {
|
||||
a11yStrings.push("start overline");
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
a11yStrings.push("end overline");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "phantom": {
|
||||
a11yStrings.push("empty space");
|
||||
break;
|
||||
}
|
||||
|
||||
case "raisebox": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "rule": {
|
||||
a11yStrings.push("rectangle");
|
||||
break;
|
||||
}
|
||||
|
||||
case "sizing": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "spacing": {
|
||||
a11yStrings.push("space");
|
||||
break;
|
||||
}
|
||||
|
||||
case "styling": {
|
||||
// We ignore the styling and just pass through the contents
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "sqrt": {
|
||||
buildRegion(a11yStrings, (regionStrings) => {
|
||||
const body = tree.body,
|
||||
index = tree.index;
|
||||
|
||||
if (index) {
|
||||
const indexString = flatten(
|
||||
buildA11yStrings(index, [], atomType),
|
||||
).join(",");
|
||||
|
||||
if (indexString === "3") {
|
||||
regionStrings.push("cube root of");
|
||||
buildA11yStrings(body, regionStrings, atomType);
|
||||
regionStrings.push("end cube root");
|
||||
return;
|
||||
}
|
||||
|
||||
regionStrings.push("root");
|
||||
regionStrings.push("start index");
|
||||
buildA11yStrings(index, regionStrings, atomType);
|
||||
regionStrings.push("end index");
|
||||
return;
|
||||
}
|
||||
|
||||
regionStrings.push("square root of");
|
||||
buildA11yStrings(body, regionStrings, atomType);
|
||||
regionStrings.push("end square root");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "supsub": {
|
||||
const base = tree.base,
|
||||
sub = tree.sub,
|
||||
sup = tree.sup;
|
||||
let isLog = false;
|
||||
|
||||
if (base) {
|
||||
buildA11yStrings(base, a11yStrings, atomType);
|
||||
isLog = base.type === "op" && base.name === "\\log";
|
||||
}
|
||||
|
||||
if (sub) {
|
||||
const regionName = isLog ? "base" : "subscript";
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push(`start ${regionName}`);
|
||||
buildA11yStrings(sub, regionStrings, atomType);
|
||||
regionStrings.push(`end ${regionName}`);
|
||||
});
|
||||
}
|
||||
|
||||
if (sup) {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
const supString = flatten(buildA11yStrings(sup, [], atomType)).join(
|
||||
",",
|
||||
);
|
||||
|
||||
if (supString in powerMap) {
|
||||
regionStrings.push(powerMap[supString]);
|
||||
return;
|
||||
}
|
||||
|
||||
regionStrings.push("start superscript");
|
||||
buildA11yStrings(sup, regionStrings, atomType);
|
||||
regionStrings.push("end superscript");
|
||||
});
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "text": {
|
||||
// TODO: handle other fonts
|
||||
if (tree.font === "\\textbf") {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start bold text");
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end bold text");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start text");
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end text");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "textord": {
|
||||
buildString(tree.text, atomType, a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "smash": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "enclose": {
|
||||
// TODO: create a map for these.
|
||||
// TODO: differentiate between a body with a single atom, e.g.
|
||||
// "cancel a" instead of "start cancel, a, end cancel"
|
||||
if (/cancel/.test(tree.label)) {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start cancel");
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end cancel");
|
||||
});
|
||||
break;
|
||||
} else if (/box/.test(tree.label)) {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start box");
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end box");
|
||||
});
|
||||
break;
|
||||
} else if (/sout/.test(tree.label)) {
|
||||
buildRegion(a11yStrings, function (regionStrings) {
|
||||
regionStrings.push("start strikeout");
|
||||
buildA11yStrings(tree.body, regionStrings, atomType);
|
||||
regionStrings.push("end strikeout");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
`KaTeX-a11y: enclose node with ${tree.label} not supported yet`,
|
||||
);
|
||||
}
|
||||
|
||||
case "vphantom": {
|
||||
throw new Error("KaTeX-a11y: vphantom not implemented yet");
|
||||
}
|
||||
|
||||
case "hphantom": {
|
||||
throw new Error("KaTeX-a11y: hphantom not implemented yet");
|
||||
}
|
||||
|
||||
case "operatorname": {
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "array": {
|
||||
throw new Error("KaTeX-a11y: array not implemented yet");
|
||||
}
|
||||
|
||||
case "raw": {
|
||||
throw new Error("KaTeX-a11y: raw not implemented yet");
|
||||
}
|
||||
|
||||
case "size": {
|
||||
// Although there are nodes of type "size" in the parse tree, they have
|
||||
// no semantic meaning and should be ignored.
|
||||
break;
|
||||
}
|
||||
|
||||
case "url": {
|
||||
throw new Error("KaTeX-a11y: url not implemented yet");
|
||||
}
|
||||
|
||||
case "tag": {
|
||||
throw new Error("KaTeX-a11y: tag not implemented yet");
|
||||
}
|
||||
|
||||
case "verb": {
|
||||
buildString(`start verbatim`, "normal", a11yStrings);
|
||||
buildString(tree.body, "normal", a11yStrings);
|
||||
buildString(`end verbatim`, "normal", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "environment": {
|
||||
throw new Error("KaTeX-a11y: environment not implemented yet");
|
||||
}
|
||||
|
||||
case "horizBrace": {
|
||||
buildString(`start ${tree.label.slice(1)}`, "normal", a11yStrings);
|
||||
buildA11yStrings(tree.base, a11yStrings, atomType);
|
||||
buildString(`end ${tree.label.slice(1)}`, "normal", a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
case "infix": {
|
||||
// All infix nodes are replace with other nodes.
|
||||
break;
|
||||
}
|
||||
|
||||
case "includegraphics": {
|
||||
throw new Error("KaTeX-a11y: includegraphics not implemented yet");
|
||||
}
|
||||
|
||||
case "font": {
|
||||
// TODO: callout the start/end of specific fonts
|
||||
// TODO: map \BBb{N} to "the naturals" or something like that
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "href": {
|
||||
throw new Error("KaTeX-a11y: href not implemented yet");
|
||||
}
|
||||
|
||||
case "cr": {
|
||||
// This is used by environments.
|
||||
throw new Error("KaTeX-a11y: cr not implemented yet");
|
||||
}
|
||||
|
||||
case "underline": {
|
||||
buildRegion(a11yStrings, function (a11yStrings) {
|
||||
a11yStrings.push("start underline");
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
a11yStrings.push("end underline");
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "xArrow": {
|
||||
throw new Error("KaTeX-a11y: xArrow not implemented yet");
|
||||
}
|
||||
|
||||
case "mclass": {
|
||||
// \neq and \ne are macros so we let "htmlmathml" render the mathmal
|
||||
// side of things and extract the text from that.
|
||||
const atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass
|
||||
|
||||
buildA11yStrings(tree.body, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "mathchoice": {
|
||||
// TODO: track which which style we're using, e.g. dispaly, text, etc.
|
||||
// default to text style if even that may not be the correct style
|
||||
buildA11yStrings(tree.text, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "htmlmathml": {
|
||||
buildA11yStrings(tree.mathml, a11yStrings, atomType);
|
||||
break;
|
||||
}
|
||||
|
||||
case "middle": {
|
||||
buildString(tree.delim, atomType, a11yStrings);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
tree.type;
|
||||
throw new Error("KaTeX a11y un-recognized type: " + tree.type);
|
||||
}
|
||||
};
|
||||
|
||||
const buildA11yStrings = function buildA11yStrings(
|
||||
tree,
|
||||
a11yStrings,
|
||||
atomType,
|
||||
) {
|
||||
if (a11yStrings === void 0) {
|
||||
a11yStrings = [];
|
||||
}
|
||||
|
||||
if (tree instanceof Array) {
|
||||
for (let i = 0; i < tree.length; i++) {
|
||||
buildA11yStrings(tree[i], a11yStrings, atomType);
|
||||
}
|
||||
} else {
|
||||
handleObject(tree, a11yStrings, atomType);
|
||||
}
|
||||
|
||||
return a11yStrings;
|
||||
};
|
||||
|
||||
const flatten = function flatten(array) {
|
||||
let result = [];
|
||||
array.forEach(function (item) {
|
||||
if (item instanceof Array) {
|
||||
result = result.concat(flatten(item));
|
||||
} else {
|
||||
result.push(item);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
};
|
||||
|
||||
const renderA11yString = function renderA11yString(text, settings) {
|
||||
const tree = katex.__parse(text, settings);
|
||||
|
||||
const a11yStrings = buildA11yStrings(tree, [], "normal");
|
||||
return flatten(a11yStrings).join(", ");
|
||||
};
|
||||
|
||||
export default renderA11yString;
|
||||
BIN
assets/bower_components/katex/dist/fonts/KaTeX_AMS-Regular.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_AMS-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_AMS-Regular.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_AMS-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_AMS-Regular.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_AMS-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Bold.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Bold.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Regular.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Bold.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Bold.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Bold.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Bold.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Bold.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Bold.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Regular.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Regular.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Regular.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Fraktur-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Bold.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Bold.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Bold.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Bold.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Bold.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Bold.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-BoldItalic.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-BoldItalic.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-BoldItalic.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-BoldItalic.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-BoldItalic.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-BoldItalic.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Italic.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Italic.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Italic.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Italic.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Italic.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Italic.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Regular.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Regular.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Regular.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Main-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-BoldItalic.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-BoldItalic.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-BoldItalic.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-BoldItalic.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-BoldItalic.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-BoldItalic.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-Italic.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-Italic.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-Italic.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-Italic.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-Italic.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Math-Italic.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Bold.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Bold.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Bold.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Bold.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Bold.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Bold.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Italic.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Italic.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Italic.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Italic.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Italic.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Italic.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Regular.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Regular.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Regular.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_SansSerif-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Script-Regular.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Script-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Script-Regular.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Script-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Script-Regular.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Script-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size1-Regular.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size1-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size1-Regular.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size1-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size1-Regular.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size1-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size2-Regular.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size2-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size2-Regular.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size2-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size2-Regular.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size2-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size3-Regular.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size3-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size3-Regular.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size3-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size3-Regular.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size3-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size4-Regular.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size4-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size4-Regular.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size4-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size4-Regular.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Size4-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Typewriter-Regular.ttf
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Typewriter-Regular.ttf
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Typewriter-Regular.woff
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Typewriter-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2
vendored
Normal file
BIN
assets/bower_components/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2
vendored
Normal file
Binary file not shown.
1074
assets/bower_components/katex/dist/katex.css
vendored
Normal file
1074
assets/bower_components/katex/dist/katex.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
20745
assets/bower_components/katex/dist/katex.js
vendored
Normal file
20745
assets/bower_components/katex/dist/katex.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1066
assets/bower_components/katex/dist/katex.min.css
vendored
Normal file
1066
assets/bower_components/katex/dist/katex.min.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
11381
assets/bower_components/katex/dist/katex.min.js
vendored
Normal file
11381
assets/bower_components/katex/dist/katex.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
18592
assets/bower_components/katex/dist/katex.mjs
vendored
Normal file
18592
assets/bower_components/katex/dist/katex.mjs
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user