jekyll-theme-hydejack 9.0.2 → 9.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/_config.yml +5 -4
- data/_includes/body/breadcrumbs.html +19 -0
- data/_includes/body/footer.html +1 -1
- data/_includes/body/index.html +3 -2
- data/_includes/body/main.html +1 -0
- data/_includes/body/nav.html +3 -3
- data/_includes/body/scripts.html +2 -2
- data/_includes/body/sidebar.html +1 -1
- data/_includes/components/dingbat.html +12 -0
- data/_includes/components/hy-img.html +1 -1
- data/_includes/components/post.html +35 -9
- data/_includes/components/tag-list.html +24 -24
- data/_includes/head/links-static.html +3 -2
- data/_includes/head/meta-static.html +1 -1
- data/_includes/head/scripts.html +7 -2
- data/_includes/head/styles-inline.html +1 -1
- data/_includes/head/styles-no-inline.html +1 -1
- data/_includes/header.txt +1 -1
- data/_includes/scripts.html +33 -0
- data/_includes/scripts/load-js.min.js +1 -1
- data/_includes/scripts/nomodule.min.js +1 -1
- data/_includes/smart-url +10 -1
- data/_includes/styles/page-style.scss +1 -0
- data/_includes/styles/style.scss +1 -0
- data/_includes/styles/variables.scss +10 -6
- data/_includes/templates/animation.html +1 -0
- data/_includes/templates/index.html +20 -2
- data/_layouts/about.html +4 -1
- data/_layouts/base.html +3 -12
- data/_layouts/compress.html +1 -1
- data/_layouts/list.html +1 -1
- data/_layouts/page.html +4 -2
- data/_layouts/plain.html +29 -0
- data/_layouts/post.html +6 -1
- data/_sass/_mixins.scss +26 -3
- data/_sass/_tippy.scss +40 -0
- data/_sass/html.scss +1 -7
- data/_sass/hydejack/__inline__/_base.scss +23 -4
- data/_sass/hydejack/__inline__/_content.scss +8 -5
- data/_sass/hydejack/__inline__/_sidebar.scss +18 -4
- data/_sass/hydejack/__inline__/_toc.scss +11 -11
- data/_sass/hydejack/__inline__/_utilities.scss +25 -0
- data/_sass/hydejack/__link__/_base.scss +9 -2
- data/_sass/hydejack/__link__/_break-layout.scss +8 -1
- data/_sass/hydejack/__link__/_content.scss +10 -4
- data/_sass/hydejack/__link__/_images.scss +1 -1
- data/_sass/hydejack/__link__/_sidebar.scss +15 -5
- data/_sass/hydejack/__link__/_toc.scss +4 -2
- data/_sass/hydejack/__link__/_utilities.scss +25 -0
- data/_sass/hydejack/_base.pre.scss +38 -8
- data/_sass/hydejack/_break-layout.pre.scss +8 -1
- data/_sass/hydejack/_content.pre.scss +12 -12
- data/_sass/hydejack/_images.pre.scss +1 -1
- data/_sass/hydejack/_sidebar.pre.scss +29 -5
- data/_sass/hydejack/_toc.pre.scss +14 -14
- data/_sass/hydejack/_utilities.pre.scss +25 -0
- data/_sass/pooleparty/__inline__/_base.scss +2 -0
- data/_sass/pooleparty/__inline__/_code.scss +1 -1
- data/_sass/pooleparty/__inline__/_message.scss +2 -2
- data/_sass/pooleparty/__inline__/_posts.scss +19 -3
- data/_sass/pooleparty/__inline__/_type.scss +4 -2
- data/_sass/pooleparty/__link__/_code.scss +138 -27
- data/_sass/pooleparty/__link__/_footnotes.scss +2 -1
- data/_sass/pooleparty/__link__/_posts.scss +12 -0
- data/_sass/pooleparty/__link__/_read-more.scss +1 -0
- data/_sass/pooleparty/__link__/_table.scss +30 -36
- data/_sass/pooleparty/__link__/_type.scss +4 -2
- data/_sass/pooleparty/_base.pre.scss +2 -0
- data/_sass/pooleparty/_code.pre.scss +138 -27
- data/_sass/pooleparty/_footnotes.pre.scss +2 -1
- data/_sass/pooleparty/_message.pre.scss +2 -2
- data/_sass/pooleparty/_posts.pre.scss +31 -3
- data/_sass/pooleparty/_read-more.pre.scss +1 -0
- data/_sass/pooleparty/_table.pre.scss +30 -36
- data/_sass/pooleparty/_type.pre.scss +6 -4
- data/_sass/tippyjs/_mixins.scss +25 -0
- data/_sass/tippyjs/_vars.scss +6 -0
- data/_sass/tippyjs/animations/fade.scss +8 -0
- data/_sass/tippyjs/index.scss +90 -0
- data/assets/bower.json +2 -1
- data/assets/bower_components/MathJax/.bower.json +5 -5
- data/assets/bower_components/MathJax/es5/a11y/assistive-mml.js +1 -1
- data/assets/bower_components/MathJax/es5/a11y/complexity.js +1 -1
- data/assets/bower_components/MathJax/es5/a11y/explorer.js +1 -1
- data/assets/bower_components/MathJax/es5/a11y/semantic-enrich.js +1 -1
- data/assets/bower_components/MathJax/es5/adaptors/liteDOM.js +1 -1
- data/assets/bower_components/MathJax/es5/core.js +1 -1
- data/assets/bower_components/MathJax/es5/input/asciimath.js +1 -1
- data/assets/bower_components/MathJax/es5/input/mml.js +1 -1
- data/assets/bower_components/MathJax/es5/input/mml/entities.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex-base.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex-full.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/action.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/all-packages.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/ams.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/amscd.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/autoload.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/bbox.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/boldsymbol.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/braket.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/bussproofs.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/cancel.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/color.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/colorV2.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/configMacros.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/enclose.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/extpfeil.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/html.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/mhchem.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/newcommand.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/noerrors.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/noundefined.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/physics.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/require.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/tagFormat.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/textmacros.js +1 -0
- data/assets/bower_components/MathJax/es5/input/tex/extensions/unicode.js +1 -1
- data/assets/bower_components/MathJax/es5/input/tex/extensions/verb.js +1 -1
- data/assets/bower_components/MathJax/es5/latest.js +1 -1
- data/assets/bower_components/MathJax/es5/loader.js +1 -1
- data/assets/bower_components/MathJax/es5/mml-chtml.js +1 -1
- data/assets/bower_components/MathJax/es5/mml-svg.js +1 -1
- data/assets/bower_components/MathJax/es5/node-main.js +1 -1
- data/assets/bower_components/MathJax/es5/output/chtml.js +1 -1
- data/assets/bower_components/MathJax/es5/output/chtml/fonts/tex.js +1 -1
- data/assets/bower_components/MathJax/es5/output/svg.js +1 -1
- data/assets/bower_components/MathJax/es5/output/svg/fonts/tex.js +1 -1
- data/assets/bower_components/MathJax/es5/sre/mathmaps/de.js +104 -0
- data/assets/bower_components/MathJax/es5/sre/mathmaps/en.js +11 -5
- data/assets/bower_components/MathJax/es5/sre/mathmaps/es.js +1 -1
- data/assets/bower_components/MathJax/es5/sre/mathmaps/mathmaps_ie.js +117 -9
- data/assets/bower_components/MathJax/es5/sre/mathmaps/nemeth.js +3 -3
- data/assets/bower_components/MathJax/es5/sre/sre-node.js +11 -0
- data/assets/bower_components/MathJax/es5/sre/sre_browser.js +1110 -1186
- data/assets/bower_components/MathJax/es5/startup.js +1 -1
- data/assets/bower_components/MathJax/es5/tex-chtml-full.js +1 -1
- data/assets/bower_components/MathJax/es5/tex-chtml.js +1 -1
- data/assets/bower_components/MathJax/es5/tex-mml-chtml.js +1 -1
- data/assets/bower_components/MathJax/es5/tex-mml-svg.js +1 -1
- data/assets/bower_components/MathJax/es5/tex-svg-full.js +1 -1
- data/assets/bower_components/MathJax/es5/tex-svg.js +1 -1
- data/assets/bower_components/MathJax/es5/ui/menu.js +1 -1
- data/assets/bower_components/MathJax/es5/ui/safe.js +1 -0
- data/assets/bower_components/MathJax/package.json +3 -3
- data/assets/bower_components/katex/.bower.json +7 -6
- data/assets/bower_components/katex/dist/contrib/render-a11y-string.js +858 -0
- data/assets/bower_components/katex/dist/contrib/render-a11y-string.min.js +1 -0
- data/assets/bower_components/katex/dist/contrib/render-a11y-string.mjs +741 -0
- data/assets/bower_components/katex/dist/katex.css +1 -10
- data/assets/bower_components/katex/dist/katex.js +1228 -612
- data/assets/bower_components/katex/dist/katex.min.css +1 -1
- data/assets/bower_components/katex/dist/katex.min.js +1 -1
- data/assets/bower_components/katex/dist/katex.mjs +1270 -591
- data/assets/bower_components/katex/docs/cli.md.template +21 -0
- data/assets/bower_components/katex/flow-typed/npm/jest_v24.x.x.js +1201 -0
- data/assets/bower_components/katex/yarn.lock +233 -172
- data/assets/css/{hydejack-9.0.2.css → hydejack-9.1.2.css} +0 -0
- data/assets/icomoon/fonts/icomoon.eot +0 -0
- data/assets/icomoon/fonts/icomoon.svg +6 -3
- data/assets/icomoon/fonts/icomoon.ttf +0 -0
- data/assets/icomoon/fonts/icomoon.woff +0 -0
- data/assets/icomoon/selection.json +1 -1
- data/assets/icomoon/style.css +17 -8
- data/assets/icons/favicon.ico +0 -0
- data/assets/icons/icon-128x128.png +0 -0
- data/assets/icons/icon-144x144.png +0 -0
- data/assets/icons/icon-152x152.png +0 -0
- data/assets/icons/icon-192x192.png +0 -0
- data/assets/icons/icon-384x384.png +0 -0
- data/assets/icons/icon-512x512.png +0 -0
- data/assets/icons/icon-72x72.png +0 -0
- data/assets/icons/icon-96x96.png +0 -0
- data/assets/img/logo.png +0 -0
- data/assets/img/sidebar-bg.jpg +0 -0
- data/assets/img/swipe.svg +1 -22
- data/assets/js/LEGACY-clap-button-hydejack-9.1.2.js +14 -0
- data/assets/js/LEGACY-drawer-hydejack-9.1.2.js +14 -0
- data/assets/js/{LEGACY-fetch-hydejack-9.0.2.js → LEGACY-fetch-hydejack-9.1.2.js} +2 -2
- data/assets/js/LEGACY-hydejack-9.1.2.js +27 -0
- data/assets/js/LEGACY-navbar-hydejack-9.1.2.js +14 -0
- data/assets/js/LEGACY-push-state-hydejack-9.1.2.js +14 -0
- data/assets/js/{resize-observer-hydejack-9.0.2.js → LEGACY-resize-observer-hydejack-9.1.2.js} +2 -2
- data/assets/js/{LEGACY-shadydom-hydejack-9.0.2.js → LEGACY-shadydom-hydejack-9.1.2.js} +2 -2
- data/assets/js/LEGACY-vendors~clap-button-hydejack-9.1.2.js +182 -0
- data/assets/js/LEGACY-vendors~drawer-hydejack-9.1.2.js +48 -0
- data/assets/js/LEGACY-vendors~drawer~push-state-hydejack-9.1.2.js +214 -0
- data/assets/js/LEGACY-vendors~fetch-hydejack-9.1.2.js +14 -0
- data/assets/js/LEGACY-vendors~intersection-observer-hydejack-9.1.2.js +14 -0
- data/assets/js/LEGACY-vendors~push-state-hydejack-9.1.2.js +34 -0
- data/assets/js/LEGACY-vendors~shadydom-hydejack-9.1.2.js +155 -0
- data/assets/js/{LEGACY-vendors~webanimations-hydejack-9.0.2.js → LEGACY-vendors~webanimations-hydejack-9.1.2.js} +2 -2
- data/assets/js/{LEGACY-vendors~webcomponents-hydejack-9.0.2.js → LEGACY-vendors~webcomponents-hydejack-9.1.2.js} +4 -4
- data/assets/js/{LEGACY-webcomponents-hydejack-9.0.2.js → LEGACY-webcomponents-hydejack-9.1.2.js} +2 -2
- data/assets/js/clap-button-hydejack-9.1.2.js +14 -0
- data/assets/js/drawer-hydejack-9.1.2.js +14 -0
- data/assets/js/{shadydom-hydejack-9.0.2.js → fetch-hydejack-9.1.2.js} +2 -2
- data/assets/js/hydejack-9.1.2.js +28 -0
- data/assets/js/navbar-hydejack-9.1.2.js +14 -0
- data/assets/js/push-state-hydejack-9.1.2.js +14 -0
- data/assets/js/{LEGACY-resize-observer-hydejack-9.0.2.js → resize-observer-hydejack-9.1.2.js} +2 -2
- data/assets/js/shadydom-hydejack-9.1.2.js +14 -0
- data/assets/js/vendors~clap-button-hydejack-9.1.2.js +222 -0
- data/assets/js/vendors~drawer-hydejack-9.1.2.js +48 -0
- data/assets/js/vendors~drawer~push-state-hydejack-9.1.2.js +163 -0
- data/assets/js/vendors~fetch-hydejack-9.1.2.js +14 -0
- data/assets/js/vendors~intersection-observer-hydejack-9.1.2.js +14 -0
- data/assets/js/vendors~push-state-hydejack-9.1.2.js +34 -0
- data/assets/js/vendors~shadydom-hydejack-9.1.2.js +146 -0
- data/assets/js/{vendors~webanimations-hydejack-9.0.2.js → vendors~webanimations-hydejack-9.1.2.js} +2 -2
- data/assets/js/{webcomponents-hydejack-9.0.2.js → webcomponents-hydejack-9.1.2.js} +2 -2
- data/assets/site.webmanifest +1 -1
- data/assets/version.json +2 -2
- metadata +59 -38
- data/_includes/templates/back.html +0 -6
- data/_includes/templates/forward.html +0 -6
- data/assets/js/LEGACY-drawer-hydejack-9.0.2.js +0 -14
- data/assets/js/LEGACY-hydejack-9.0.2.js +0 -28
- data/assets/js/LEGACY-navbar-hydejack-9.0.2.js +0 -14
- data/assets/js/LEGACY-push-state-hydejack-9.0.2.js +0 -14
- data/assets/js/LEGACY-vendors~drawer-hydejack-9.0.2.js +0 -47
- data/assets/js/LEGACY-vendors~drawer~push-state-hydejack-9.0.2.js +0 -215
- data/assets/js/LEGACY-vendors~fetch-hydejack-9.0.2.js +0 -14
- data/assets/js/LEGACY-vendors~intersection-observer-hydejack-9.0.2.js +0 -14
- data/assets/js/LEGACY-vendors~push-state-hydejack-9.0.2.js +0 -33
- data/assets/js/LEGACY-vendors~shadydom-hydejack-9.0.2.js +0 -155
- data/assets/js/drawer-hydejack-9.0.2.js +0 -14
- data/assets/js/fetch-hydejack-9.0.2.js +0 -14
- data/assets/js/hydejack-9.0.2.js +0 -28
- data/assets/js/navbar-hydejack-9.0.2.js +0 -14
- data/assets/js/push-state-hydejack-9.0.2.js +0 -14
- data/assets/js/vendors~drawer-hydejack-9.0.2.js +0 -47
- data/assets/js/vendors~drawer~push-state-hydejack-9.0.2.js +0 -163
- data/assets/js/vendors~intersection-observer-hydejack-9.0.2.js +0 -14
- data/assets/js/vendors~push-state-hydejack-9.0.2.js +0 -33
- data/assets/js/vendors~shadydom-hydejack-9.0.2.js +0 -146
@@ -129,7 +129,7 @@
|
|
129
129
|
-ms-high-contrast-adjust: none !important;
|
130
130
|
}
|
131
131
|
.katex .katex-version::after {
|
132
|
-
content: "0.
|
132
|
+
content: "0.11.1";
|
133
133
|
}
|
134
134
|
.katex .katex-mathml {
|
135
135
|
position: absolute;
|
@@ -333,10 +333,6 @@
|
|
333
333
|
margin-left: 0.27777778em;
|
334
334
|
margin-right: -0.55555556em;
|
335
335
|
}
|
336
|
-
.katex .sizing,
|
337
|
-
.katex .fontsize-ensurer {
|
338
|
-
display: inline-block;
|
339
|
-
}
|
340
336
|
.katex .sizing.reset-size1.size1,
|
341
337
|
.katex .fontsize-ensurer.reset-size1.size1 {
|
342
338
|
font-size: 1em;
|
@@ -872,13 +868,8 @@
|
|
872
868
|
}
|
873
869
|
.katex .mtable .vertical-separator {
|
874
870
|
display: inline-block;
|
875
|
-
margin: 0 -0.025em;
|
876
|
-
border-right: 0.05em solid;
|
877
871
|
min-width: 1px;
|
878
872
|
}
|
879
|
-
.katex .mtable .vs-dashed {
|
880
|
-
border-right: 0.05em dashed;
|
881
|
-
}
|
882
873
|
.katex .mtable .arraycolsep {
|
883
874
|
display: inline-block;
|
884
875
|
}
|
@@ -362,13 +362,23 @@ var assert = function assert(value) {
|
|
362
362
|
|
363
363
|
return value;
|
364
364
|
};
|
365
|
+
/**
|
366
|
+
* Return the protocol of a URL, or "_relative" if the URL does not specify a
|
367
|
+
* protocol (and thus is relative).
|
368
|
+
*/
|
369
|
+
|
370
|
+
var protocolFromUrl = function protocolFromUrl(url) {
|
371
|
+
var protocol = /^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(url);
|
372
|
+
return protocol != null ? protocol[1] : "_relative";
|
373
|
+
};
|
365
374
|
/* harmony default export */ var utils = ({
|
366
375
|
contains: contains,
|
367
376
|
deflt: deflt,
|
368
377
|
escape: utils_escape,
|
369
378
|
hyphenate: hyphenate,
|
370
379
|
getBaseElem: getBaseElem,
|
371
|
-
isCharacterBox: utils_isCharacterBox
|
380
|
+
isCharacterBox: utils_isCharacterBox,
|
381
|
+
protocolFromUrl: protocolFromUrl
|
372
382
|
});
|
373
383
|
// CONCATENATED MODULE: ./src/Settings.js
|
374
384
|
/* eslint no-console:0 */
|
@@ -396,29 +406,33 @@ var Settings_Settings =
|
|
396
406
|
function () {
|
397
407
|
function Settings(options) {
|
398
408
|
this.displayMode = void 0;
|
409
|
+
this.output = void 0;
|
399
410
|
this.leqno = void 0;
|
400
411
|
this.fleqn = void 0;
|
401
412
|
this.throwOnError = void 0;
|
402
413
|
this.errorColor = void 0;
|
403
414
|
this.macros = void 0;
|
415
|
+
this.minRuleThickness = void 0;
|
404
416
|
this.colorIsTextColor = void 0;
|
405
417
|
this.strict = void 0;
|
418
|
+
this.trust = void 0;
|
406
419
|
this.maxSize = void 0;
|
407
420
|
this.maxExpand = void 0;
|
408
|
-
this.allowedProtocols = void 0;
|
409
421
|
// allow null options
|
410
422
|
options = options || {};
|
411
423
|
this.displayMode = utils.deflt(options.displayMode, false);
|
424
|
+
this.output = utils.deflt(options.output, "htmlAndMathml");
|
412
425
|
this.leqno = utils.deflt(options.leqno, false);
|
413
426
|
this.fleqn = utils.deflt(options.fleqn, false);
|
414
427
|
this.throwOnError = utils.deflt(options.throwOnError, true);
|
415
428
|
this.errorColor = utils.deflt(options.errorColor, "#cc0000");
|
416
429
|
this.macros = options.macros || {};
|
430
|
+
this.minRuleThickness = Math.max(0, utils.deflt(options.minRuleThickness, 0));
|
417
431
|
this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false);
|
418
432
|
this.strict = utils.deflt(options.strict, "warn");
|
433
|
+
this.trust = utils.deflt(options.trust, false);
|
419
434
|
this.maxSize = Math.max(0, utils.deflt(options.maxSize, Infinity));
|
420
435
|
this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000));
|
421
|
-
this.allowedProtocols = utils.deflt(options.allowedProtocols, ["http", "https", "mailto", "_relative"]);
|
422
436
|
}
|
423
437
|
/**
|
424
438
|
* Report nonstrict (non-LaTeX-compatible) input.
|
@@ -485,12 +499,30 @@ function () {
|
|
485
499
|
typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]"));
|
486
500
|
return false;
|
487
501
|
}
|
502
|
+
}
|
503
|
+
/**
|
504
|
+
* Check whether to test potentially dangerous input, and return
|
505
|
+
* `true` (trusted) or `false` (untrusted). The sole argument `context`
|
506
|
+
* should be an object with `command` field specifying the relevant LaTeX
|
507
|
+
* command (as a string starting with `\`), and any other arguments, etc.
|
508
|
+
* If `context` has a `url` field, a `protocol` field will automatically
|
509
|
+
* get added by this function (changing the specified object).
|
510
|
+
*/
|
511
|
+
;
|
512
|
+
|
513
|
+
_proto.isTrusted = function isTrusted(context) {
|
514
|
+
if (context.url && !context.protocol) {
|
515
|
+
context.protocol = utils.protocolFromUrl(context.url);
|
516
|
+
}
|
517
|
+
|
518
|
+
var trust = typeof this.trust === "function" ? this.trust(context) : this.trust;
|
519
|
+
return Boolean(trust);
|
488
520
|
};
|
489
521
|
|
490
522
|
return Settings;
|
491
523
|
}();
|
492
524
|
|
493
|
-
|
525
|
+
|
494
526
|
// CONCATENATED MODULE: ./src/Style.js
|
495
527
|
/**
|
496
528
|
* This file contains information and classes for the various kinds of styles
|
@@ -721,25 +753,97 @@ function supportedCodepoint(codepoint) {
|
|
721
753
|
}
|
722
754
|
// CONCATENATED MODULE: ./src/svgGeometry.js
|
723
755
|
/**
|
724
|
-
* This file provides support to domTree.js
|
756
|
+
* This file provides support to domTree.js and delimiter.js.
|
725
757
|
* It's a storehouse of path geometry for SVG images.
|
726
758
|
*/
|
727
759
|
// In all paths below, the viewBox-to-em scale is 1000:1.
|
728
|
-
var hLinePad = 80; // padding above a sqrt viniculum.
|
729
|
-
|
730
|
-
|
760
|
+
var hLinePad = 80; // padding above a sqrt viniculum. Prevents image cropping.
|
761
|
+
// The viniculum of a \sqrt can be made thicker by a KaTeX rendering option.
|
762
|
+
// Think of variable extraViniculum as two detours in the SVG path.
|
763
|
+
// The detour begins at the lower left of the area labeled extraViniculum below.
|
764
|
+
// The detour proceeds one extraViniculum distance up and slightly to the right,
|
765
|
+
// displacing the radiused corner between surd and viniculum. The radius is
|
766
|
+
// traversed as usual, then the detour resumes. It goes right, to the end of
|
767
|
+
// the very long viniculumn, then down one extraViniculum distance,
|
768
|
+
// after which it resumes regular path geometry for the radical.
|
769
|
+
|
770
|
+
/* viniculum
|
771
|
+
/
|
772
|
+
/▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraViniculum
|
773
|
+
/ █████████████████████←0.04em (40 unit) std viniculum thickness
|
774
|
+
/ /
|
775
|
+
/ /
|
776
|
+
/ /\
|
777
|
+
/ / surd
|
778
|
+
*/
|
779
|
+
|
780
|
+
var sqrtMain = function sqrtMain(extraViniculum, hLinePad) {
|
731
781
|
// sqrtMain path geometry is from glyph U221A in the font KaTeX Main
|
732
|
-
|
733
|
-
|
782
|
+
return "M95," + (622 + extraViniculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraViniculum / 2.075 + " -" + extraViniculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraViniculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
|
783
|
+
};
|
784
|
+
|
785
|
+
var sqrtSize1 = function sqrtSize1(extraViniculum, hLinePad) {
|
734
786
|
// size1 is from glyph U221A in the font KaTeX_Size1-Regular
|
735
|
-
|
787
|
+
return "M263," + (601 + extraViniculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraViniculum / 2.084 + " -" + extraViniculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraViniculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
|
788
|
+
};
|
789
|
+
|
790
|
+
var sqrtSize2 = function sqrtSize2(extraViniculum, hLinePad) {
|
736
791
|
// size2 is from glyph U221A in the font KaTeX_Size2-Regular
|
737
|
-
|
738
|
-
|
792
|
+
return "M983 " + (10 + extraViniculum + hLinePad) + "\nl" + extraViniculum / 3.13 + " -" + extraViniculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraViniculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z";
|
793
|
+
};
|
794
|
+
|
795
|
+
var sqrtSize3 = function sqrtSize3(extraViniculum, hLinePad) {
|
739
796
|
// size3 is from glyph U221A in the font KaTeX_Size3-Regular
|
740
|
-
|
797
|
+
return "M424," + (2398 + extraViniculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraViniculum / 4.223 + " -" + extraViniculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraViniculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraViniculum) + " " + hLinePad + "\nh400000v" + (40 + extraViniculum) + "h-400000z";
|
798
|
+
};
|
799
|
+
|
800
|
+
var sqrtSize4 = function sqrtSize4(extraViniculum, hLinePad) {
|
741
801
|
// size4 is from glyph U221A in the font KaTeX_Size4-Regular
|
742
|
-
|
802
|
+
return "M473," + (2713 + extraViniculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraViniculum / 5.298 + " -" + extraViniculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraViniculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "H1017.7z";
|
803
|
+
};
|
804
|
+
|
805
|
+
var sqrtTall = function sqrtTall(extraViniculum, hLinePad, viewBoxHeight) {
|
806
|
+
// sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular
|
807
|
+
// One path edge has a variable length. It runs vertically from the viniculumn
|
808
|
+
// to a point near (14 units) the bottom of the surd. The viniculum
|
809
|
+
// is normally 40 units thick. So the length of the line in question is:
|
810
|
+
var vertSegment = viewBoxHeight - 54 - hLinePad - extraViniculum;
|
811
|
+
return "M702 " + (extraViniculum + hLinePad) + "H400000" + (40 + extraViniculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraViniculum) + "H742z";
|
812
|
+
};
|
813
|
+
|
814
|
+
var sqrtPath = function sqrtPath(size, extraViniculum, viewBoxHeight) {
|
815
|
+
extraViniculum = 1000 * extraViniculum; // Convert from document ems to viewBox.
|
816
|
+
|
817
|
+
var path = "";
|
818
|
+
|
819
|
+
switch (size) {
|
820
|
+
case "sqrtMain":
|
821
|
+
path = sqrtMain(extraViniculum, hLinePad);
|
822
|
+
break;
|
823
|
+
|
824
|
+
case "sqrtSize1":
|
825
|
+
path = sqrtSize1(extraViniculum, hLinePad);
|
826
|
+
break;
|
827
|
+
|
828
|
+
case "sqrtSize2":
|
829
|
+
path = sqrtSize2(extraViniculum, hLinePad);
|
830
|
+
break;
|
831
|
+
|
832
|
+
case "sqrtSize3":
|
833
|
+
path = sqrtSize3(extraViniculum, hLinePad);
|
834
|
+
break;
|
835
|
+
|
836
|
+
case "sqrtSize4":
|
837
|
+
path = sqrtSize4(extraViniculum, hLinePad);
|
838
|
+
break;
|
839
|
+
|
840
|
+
case "sqrtTall":
|
841
|
+
path = sqrtTall(extraViniculum, hLinePad, viewBoxHeight);
|
842
|
+
}
|
843
|
+
|
844
|
+
return path;
|
845
|
+
};
|
846
|
+
var svgGeometry_path = {
|
743
847
|
// The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
|
744
848
|
doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",
|
745
849
|
// doublerightarrow is from glyph U+21D2 in font KaTeX Main
|
@@ -817,9 +921,6 @@ var svgGeometry_path = {
|
|
817
921
|
shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",
|
818
922
|
shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"
|
819
923
|
};
|
820
|
-
/* harmony default export */ var svgGeometry = ({
|
821
|
-
path: svgGeometry_path
|
822
|
-
});
|
823
924
|
// CONCATENATED MODULE: ./src/tree.js
|
824
925
|
|
825
926
|
|
@@ -1383,7 +1484,7 @@ function () {
|
|
1383
1484
|
this.pathName = void 0;
|
1384
1485
|
this.alternate = void 0;
|
1385
1486
|
this.pathName = pathName;
|
1386
|
-
this.alternate = alternate; // Used only for
|
1487
|
+
this.alternate = alternate; // Used only for \sqrt
|
1387
1488
|
}
|
1388
1489
|
|
1389
1490
|
var _proto6 = PathNode.prototype;
|
@@ -1395,7 +1496,7 @@ function () {
|
|
1395
1496
|
if (this.alternate) {
|
1396
1497
|
node.setAttribute("d", this.alternate);
|
1397
1498
|
} else {
|
1398
|
-
node.setAttribute("d",
|
1499
|
+
node.setAttribute("d", svgGeometry_path[this.pathName]);
|
1399
1500
|
}
|
1400
1501
|
|
1401
1502
|
return node;
|
@@ -1405,7 +1506,7 @@ function () {
|
|
1405
1506
|
if (this.alternate) {
|
1406
1507
|
return "<path d='" + this.alternate + "'/>";
|
1407
1508
|
} else {
|
1408
|
-
return "<path d='" +
|
1509
|
+
return "<path d='" + svgGeometry_path[this.pathName] + "'/>";
|
1409
1510
|
}
|
1410
1511
|
};
|
1411
1512
|
|
@@ -3695,7 +3796,15 @@ var sigmasAndXis = {
|
|
3695
3796
|
ptPerEm: [10.0, 10.0, 10.0],
|
3696
3797
|
// The space between adjacent `|` columns in an array definition. From
|
3697
3798
|
// `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.
|
3698
|
-
doubleRuleSep: [0.2, 0.2, 0.2]
|
3799
|
+
doubleRuleSep: [0.2, 0.2, 0.2],
|
3800
|
+
// The width of separator lines in {array} environments. From
|
3801
|
+
// `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.
|
3802
|
+
arrayRuleWidth: [0.04, 0.04, 0.04],
|
3803
|
+
// Two values from LaTeX source2e:
|
3804
|
+
fboxsep: [0.3, 0.3, 0.3],
|
3805
|
+
// 3 pt / ptPerEm
|
3806
|
+
fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm
|
3807
|
+
|
3699
3808
|
}; // This map contains a mapping from font name and character code to character
|
3700
3809
|
// metrics, including height, depth, italic correction, and skew (kern from the
|
3701
3810
|
// character to the corresponding \skewchar)
|
@@ -4147,7 +4256,7 @@ defineSymbol(symbols_math, ams, symbols_textord, "\u2136", "\\beth", true);
|
|
4147
4256
|
defineSymbol(symbols_math, ams, symbols_textord, "\u2138", "\\daleth", true);
|
4148
4257
|
defineSymbol(symbols_math, ams, symbols_textord, "\u2137", "\\gimel", true); // AMS Greek
|
4149
4258
|
|
4150
|
-
defineSymbol(symbols_math, ams, symbols_textord, "\u03DD", "\\digamma");
|
4259
|
+
defineSymbol(symbols_math, ams, symbols_textord, "\u03DD", "\\digamma", true);
|
4151
4260
|
defineSymbol(symbols_math, ams, symbols_textord, "\u03F0", "\\varkappa"); // AMS Delimiters
|
4152
4261
|
|
4153
4262
|
defineSymbol(symbols_math, ams, symbols_open, "\u250C", "\\ulcorner", true);
|
@@ -4895,6 +5004,7 @@ function () {
|
|
4895
5004
|
this.fontShape = void 0;
|
4896
5005
|
this.sizeMultiplier = void 0;
|
4897
5006
|
this.maxSize = void 0;
|
5007
|
+
this.minRuleThickness = void 0;
|
4898
5008
|
this._fontMetrics = void 0;
|
4899
5009
|
this.style = data.style;
|
4900
5010
|
this.color = data.color;
|
@@ -4907,6 +5017,7 @@ function () {
|
|
4907
5017
|
this.fontShape = data.fontShape || '';
|
4908
5018
|
this.sizeMultiplier = sizeMultipliers[this.size - 1];
|
4909
5019
|
this.maxSize = data.maxSize;
|
5020
|
+
this.minRuleThickness = data.minRuleThickness;
|
4910
5021
|
this._fontMetrics = undefined;
|
4911
5022
|
}
|
4912
5023
|
/**
|
@@ -4928,7 +5039,8 @@ function () {
|
|
4928
5039
|
fontFamily: this.fontFamily,
|
4929
5040
|
fontWeight: this.fontWeight,
|
4930
5041
|
fontShape: this.fontShape,
|
4931
|
-
maxSize: this.maxSize
|
5042
|
+
maxSize: this.maxSize,
|
5043
|
+
minRuleThickness: this.minRuleThickness
|
4932
5044
|
};
|
4933
5045
|
|
4934
5046
|
for (var key in extension) {
|
@@ -5325,7 +5437,7 @@ var buildCommon_makeSymbol = function makeSymbol(value, fontName, mode, options,
|
|
5325
5437
|
symbolNode = new domTree_SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);
|
5326
5438
|
} else {
|
5327
5439
|
// TODO(emily): Figure out a good way to only print this in development
|
5328
|
-
typeof console !== "undefined" && console.warn("No character metrics for '" + value + "' in style '" + fontName + "'");
|
5440
|
+
typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'"));
|
5329
5441
|
symbolNode = new domTree_SymbolNode(value, 0, 0, 0, 0, 0, classes);
|
5330
5442
|
}
|
5331
5443
|
|
@@ -5348,8 +5460,6 @@ var buildCommon_makeSymbol = function makeSymbol(value, fontName, mode, options,
|
|
5348
5460
|
/**
|
5349
5461
|
* Makes a symbol in Main-Regular or AMS-Regular.
|
5350
5462
|
* Used for rel, bin, open, close, inner, and punct.
|
5351
|
-
*
|
5352
|
-
* TODO(#953): Make `options` mandatory and always pass it in.
|
5353
5463
|
*/
|
5354
5464
|
|
5355
5465
|
|
@@ -5365,7 +5475,7 @@ var buildCommon_mathsym = function mathsym(value, mode, options, classes) {
|
|
5365
5475
|
// text ordinal and is therefore not present as a symbol in the symbols
|
5366
5476
|
// table for text, as well as a special case for boldsymbol because it
|
5367
5477
|
// can be used for bold + and -
|
5368
|
-
if (options
|
5478
|
+
if (options.font === "boldsymbol" && buildCommon_lookupSymbol(value, "Main-Bold", mode).metrics) {
|
5369
5479
|
return buildCommon_makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"]));
|
5370
5480
|
} else if (value === "\\" || src_symbols[mode][value].font === "main") {
|
5371
5481
|
return buildCommon_makeSymbol(value, "Main-Regular", mode, options, classes);
|
@@ -5629,7 +5739,7 @@ var buildCommon_makeSvgSpan = function makeSvgSpan(classes, children, options, s
|
|
5629
5739
|
|
5630
5740
|
var makeLineSpan = function makeLineSpan(className, options, thickness) {
|
5631
5741
|
var line = buildCommon_makeSpan([className], [], options);
|
5632
|
-
line.height = thickness || options.fontMetrics().defaultRuleThickness;
|
5742
|
+
line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);
|
5633
5743
|
line.style.borderBottomWidth = line.height + "em";
|
5634
5744
|
line.maxFontSize = 1.0;
|
5635
5745
|
return line;
|
@@ -6198,7 +6308,6 @@ var _htmlGroupBuilders = {};
|
|
6198
6308
|
var _mathmlGroupBuilders = {};
|
6199
6309
|
function defineFunction(_ref) {
|
6200
6310
|
var type = _ref.type,
|
6201
|
-
nodeType = _ref.nodeType,
|
6202
6311
|
names = _ref.names,
|
6203
6312
|
props = _ref.props,
|
6204
6313
|
handler = _ref.handler,
|
@@ -6214,15 +6323,10 @@ function defineFunction(_ref) {
|
|
6214
6323
|
allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,
|
6215
6324
|
numOptionalArgs: props.numOptionalArgs || 0,
|
6216
6325
|
infix: !!props.infix,
|
6217
|
-
consumeMode: props.consumeMode,
|
6218
6326
|
handler: handler
|
6219
6327
|
};
|
6220
6328
|
|
6221
6329
|
for (var i = 0; i < names.length; ++i) {
|
6222
|
-
// TODO: The value type of _functions should be a type union of all
|
6223
|
-
// possible `FunctionSpec<>` possibilities instead of `FunctionSpec<*>`,
|
6224
|
-
// which is an existential type.
|
6225
|
-
// $FlowFixMe
|
6226
6330
|
_functions[names[i]] = data;
|
6227
6331
|
}
|
6228
6332
|
|
@@ -6287,7 +6391,7 @@ var buildHTML_makeSpan = buildCommon.makeSpan; // Binary atoms (first class `mbi
|
|
6287
6391
|
|
6288
6392
|
var binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"];
|
6289
6393
|
var binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"];
|
6290
|
-
var
|
6394
|
+
var styleMap = {
|
6291
6395
|
"display": src_Style.DISPLAY,
|
6292
6396
|
"text": src_Style.TEXT,
|
6293
6397
|
"script": src_Style.SCRIPT,
|
@@ -6346,7 +6450,7 @@ var buildHTML_buildExpression = function buildExpression(expression, options, is
|
|
6346
6450
|
} else if (node.type === "sizing") {
|
6347
6451
|
glueOptions = options.havingSize(node.size);
|
6348
6452
|
} else if (node.type === "styling") {
|
6349
|
-
glueOptions = options.havingStyle(
|
6453
|
+
glueOptions = options.havingStyle(styleMap[node.style]);
|
6350
6454
|
}
|
6351
6455
|
} // Dummy spans for determining spacings between surrounding atoms.
|
6352
6456
|
// If `expression` has no atoms on the left or right, class "leftmost"
|
@@ -6406,6 +6510,7 @@ var traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev
|
|
6406
6510
|
|
6407
6511
|
if (partialGroup) {
|
6408
6512
|
// Recursive DFS
|
6513
|
+
// $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array
|
6409
6514
|
traverseNonSpaceNodes(partialGroup.children, callback, prev);
|
6410
6515
|
continue;
|
6411
6516
|
} // Ignore explicit spaces (e.g., \;, \,) when determining what implicit
|
@@ -6946,6 +7051,19 @@ var buildMathML_getVariant = function getVariant(group, options) {
|
|
6946
7051
|
return "italic";
|
6947
7052
|
} else if (font === "boldsymbol") {
|
6948
7053
|
return "bold-italic";
|
7054
|
+
} else if (font === "mathbf") {
|
7055
|
+
return "bold";
|
7056
|
+
} else if (font === "mathbb") {
|
7057
|
+
return "double-struck";
|
7058
|
+
} else if (font === "mathfrak") {
|
7059
|
+
return "fraktur";
|
7060
|
+
} else if (font === "mathscr" || font === "mathcal") {
|
7061
|
+
// MathML makes no distinction between script and caligrahpic
|
7062
|
+
return "script";
|
7063
|
+
} else if (font === "mathsf") {
|
7064
|
+
return "sans-serif";
|
7065
|
+
} else if (font === "mathtt") {
|
7066
|
+
return "monospace";
|
6949
7067
|
}
|
6950
7068
|
|
6951
7069
|
var text = group.text;
|
@@ -6972,42 +7090,55 @@ var buildMathML_getVariant = function getVariant(group, options) {
|
|
6972
7090
|
* <mtext> tag.
|
6973
7091
|
*/
|
6974
7092
|
|
6975
|
-
var buildMathML_buildExpression = function buildExpression(expression, options) {
|
7093
|
+
var buildMathML_buildExpression = function buildExpression(expression, options, isOrdgroup) {
|
7094
|
+
if (expression.length === 1) {
|
7095
|
+
var group = buildMathML_buildGroup(expression[0], options);
|
7096
|
+
|
7097
|
+
if (isOrdgroup && group instanceof mathMLTree_MathNode && group.type === "mo") {
|
7098
|
+
// When TeX writers want to suppress spacing on an operator,
|
7099
|
+
// they often put the operator by itself inside braces.
|
7100
|
+
group.setAttribute("lspace", "0em");
|
7101
|
+
group.setAttribute("rspace", "0em");
|
7102
|
+
}
|
7103
|
+
|
7104
|
+
return [group];
|
7105
|
+
}
|
7106
|
+
|
6976
7107
|
var groups = [];
|
6977
7108
|
var lastGroup;
|
6978
7109
|
|
6979
7110
|
for (var i = 0; i < expression.length; i++) {
|
6980
|
-
var
|
7111
|
+
var _group = buildMathML_buildGroup(expression[i], options);
|
6981
7112
|
|
6982
|
-
if (
|
7113
|
+
if (_group instanceof mathMLTree_MathNode && lastGroup instanceof mathMLTree_MathNode) {
|
6983
7114
|
// Concatenate adjacent <mtext>s
|
6984
|
-
if (
|
7115
|
+
if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {
|
6985
7116
|
var _lastGroup$children;
|
6986
7117
|
|
6987
|
-
(_lastGroup$children = lastGroup.children).push.apply(_lastGroup$children,
|
7118
|
+
(_lastGroup$children = lastGroup.children).push.apply(_lastGroup$children, _group.children);
|
6988
7119
|
|
6989
7120
|
continue; // Concatenate adjacent <mn>s
|
6990
|
-
} else if (
|
7121
|
+
} else if (_group.type === 'mn' && lastGroup.type === 'mn') {
|
6991
7122
|
var _lastGroup$children2;
|
6992
7123
|
|
6993
|
-
(_lastGroup$children2 = lastGroup.children).push.apply(_lastGroup$children2,
|
7124
|
+
(_lastGroup$children2 = lastGroup.children).push.apply(_lastGroup$children2, _group.children);
|
6994
7125
|
|
6995
7126
|
continue; // Concatenate <mn>...</mn> followed by <mi>.</mi>
|
6996
|
-
} else if (
|
6997
|
-
var child =
|
7127
|
+
} else if (_group.type === 'mi' && _group.children.length === 1 && lastGroup.type === 'mn') {
|
7128
|
+
var child = _group.children[0];
|
6998
7129
|
|
6999
7130
|
if (child instanceof mathMLTree_TextNode && child.text === '.') {
|
7000
7131
|
var _lastGroup$children3;
|
7001
7132
|
|
7002
|
-
(_lastGroup$children3 = lastGroup.children).push.apply(_lastGroup$children3,
|
7133
|
+
(_lastGroup$children3 = lastGroup.children).push.apply(_lastGroup$children3, _group.children);
|
7003
7134
|
|
7004
7135
|
continue;
|
7005
7136
|
}
|
7006
7137
|
} else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {
|
7007
7138
|
var lastChild = lastGroup.children[0];
|
7008
7139
|
|
7009
|
-
if (lastChild instanceof mathMLTree_TextNode && lastChild.text === "\u0338" && (
|
7010
|
-
var _child =
|
7140
|
+
if (lastChild instanceof mathMLTree_TextNode && lastChild.text === "\u0338" && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) {
|
7141
|
+
var _child = _group.children[0];
|
7011
7142
|
|
7012
7143
|
if (_child instanceof mathMLTree_TextNode && _child.text.length > 0) {
|
7013
7144
|
// Overlay with combining character long solidus
|
@@ -7018,8 +7149,8 @@ var buildMathML_buildExpression = function buildExpression(expression, options)
|
|
7018
7149
|
}
|
7019
7150
|
}
|
7020
7151
|
|
7021
|
-
groups.push(
|
7022
|
-
lastGroup =
|
7152
|
+
groups.push(_group);
|
7153
|
+
lastGroup = _group;
|
7023
7154
|
}
|
7024
7155
|
|
7025
7156
|
return groups;
|
@@ -7029,8 +7160,8 @@ var buildMathML_buildExpression = function buildExpression(expression, options)
|
|
7029
7160
|
* if there's more than one. Returns a single node instead of an array.
|
7030
7161
|
*/
|
7031
7162
|
|
7032
|
-
var buildExpressionRow = function buildExpressionRow(expression, options) {
|
7033
|
-
return buildMathML_makeRow(buildMathML_buildExpression(expression, options));
|
7163
|
+
var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {
|
7164
|
+
return buildMathML_makeRow(buildMathML_buildExpression(expression, options, isOrdgroup));
|
7034
7165
|
};
|
7035
7166
|
/**
|
7036
7167
|
* Takes a group from the parser and calls the appropriate groupBuilders function
|
@@ -7059,7 +7190,7 @@ var buildMathML_buildGroup = function buildGroup(group, options) {
|
|
7059
7190
|
* we can do appropriate styling.
|
7060
7191
|
*/
|
7061
7192
|
|
7062
|
-
function buildMathML(tree, texExpression, options) {
|
7193
|
+
function buildMathML(tree, texExpression, options, forMathmlOnly) {
|
7063
7194
|
var expression = buildMathML_buildExpression(tree, options); // Wrap up the expression in an mrow so it is presented in the semantics
|
7064
7195
|
// tag correctly, unless it's a single <mrow> or <mtable>.
|
7065
7196
|
|
@@ -7075,13 +7206,15 @@ function buildMathML(tree, texExpression, options) {
|
|
7075
7206
|
var annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]);
|
7076
7207
|
annotation.setAttribute("encoding", "application/x-tex");
|
7077
7208
|
var semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]);
|
7078
|
-
var math = new mathMLTree.MathNode("math", [semantics]);
|
7209
|
+
var math = new mathMLTree.MathNode("math", [semantics]);
|
7210
|
+
math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); // You can't style <math> nodes, so we wrap the node in a span.
|
7079
7211
|
// NOTE: The span class is not typed to have <math> nodes as children, and
|
7080
7212
|
// we don't want to make the children type more generic since the children
|
7081
7213
|
// of span are expected to have more fields in `buildHtml` contexts.
|
7082
|
-
// $FlowFixMe
|
7083
7214
|
|
7084
|
-
|
7215
|
+
var wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe
|
7216
|
+
|
7217
|
+
return buildCommon.makeSpan([wrapperClass], [math]);
|
7085
7218
|
}
|
7086
7219
|
// CONCATENATED MODULE: ./src/buildTree.js
|
7087
7220
|
|
@@ -7094,7 +7227,8 @@ function buildMathML(tree, texExpression, options) {
|
|
7094
7227
|
var buildTree_optionsFromSettings = function optionsFromSettings(settings) {
|
7095
7228
|
return new src_Options({
|
7096
7229
|
style: settings.displayMode ? src_Style.DISPLAY : src_Style.TEXT,
|
7097
|
-
maxSize: settings.maxSize
|
7230
|
+
maxSize: settings.maxSize,
|
7231
|
+
minRuleThickness: settings.minRuleThickness
|
7098
7232
|
});
|
7099
7233
|
};
|
7100
7234
|
|
@@ -7118,9 +7252,21 @@ var buildTree_displayWrap = function displayWrap(node, settings) {
|
|
7118
7252
|
|
7119
7253
|
var buildTree_buildTree = function buildTree(tree, expression, settings) {
|
7120
7254
|
var options = buildTree_optionsFromSettings(settings);
|
7121
|
-
var
|
7122
|
-
|
7123
|
-
|
7255
|
+
var katexNode;
|
7256
|
+
|
7257
|
+
if (settings.output === "mathml") {
|
7258
|
+
return buildMathML(tree, expression, options, true);
|
7259
|
+
} else if (settings.output === "html") {
|
7260
|
+
var htmlNode = buildHTML(tree, options);
|
7261
|
+
katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
|
7262
|
+
} else {
|
7263
|
+
var mathMLNode = buildMathML(tree, expression, options, false);
|
7264
|
+
|
7265
|
+
var _htmlNode = buildHTML(tree, options);
|
7266
|
+
|
7267
|
+
katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, _htmlNode]);
|
7268
|
+
}
|
7269
|
+
|
7124
7270
|
return buildTree_displayWrap(katexNode, settings);
|
7125
7271
|
};
|
7126
7272
|
var buildTree_buildHTMLTree = function buildHTMLTree(tree, expression, settings) {
|
@@ -7558,7 +7704,11 @@ var accent_htmlBuilder = function htmlBuilder(grp, options) {
|
|
7558
7704
|
accent = buildCommon.staticSvg("vec", options);
|
7559
7705
|
width = buildCommon.svgData.vec[1];
|
7560
7706
|
} else {
|
7561
|
-
accent = buildCommon.
|
7707
|
+
accent = buildCommon.makeOrd({
|
7708
|
+
mode: group.mode,
|
7709
|
+
text: group.label
|
7710
|
+
}, options, "textord");
|
7711
|
+
accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to
|
7562
7712
|
// shift the accent over to a place we don't want.
|
7563
7713
|
|
7564
7714
|
accent.italic = 0;
|
@@ -7985,7 +8135,12 @@ defineFunction({
|
|
7985
8135
|
handler: function handler(_ref2, args) {
|
7986
8136
|
var parser = _ref2.parser,
|
7987
8137
|
breakOnTokenText = _ref2.breakOnTokenText;
|
7988
|
-
var color = assertNodeType(args[0], "color-token").color; //
|
8138
|
+
var color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current
|
8139
|
+
// color, mimicking the behavior of color.sty.
|
8140
|
+
// This is currently used just to correctly color a \right
|
8141
|
+
// that follows a \color command.
|
8142
|
+
|
8143
|
+
parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored.
|
7989
8144
|
|
7990
8145
|
var body = parser.parseExpression(true, breakOnTokenText);
|
7991
8146
|
return {
|
@@ -8105,6 +8260,7 @@ defineFunction({
|
|
8105
8260
|
|
8106
8261
|
|
8107
8262
|
|
8263
|
+
|
8108
8264
|
/**
|
8109
8265
|
* Get the metrics for a given symbol and font, after transformation (i.e.
|
8110
8266
|
* after following replacement from symbols.js)
|
@@ -8208,13 +8364,18 @@ var delimiter_makeInner = function makeInner(symbol, font, mode) {
|
|
8208
8364
|
type: "elem",
|
8209
8365
|
elem: inner
|
8210
8366
|
};
|
8367
|
+
}; // Helper for makeStackedDelim
|
8368
|
+
|
8369
|
+
|
8370
|
+
var lap = {
|
8371
|
+
type: "kern",
|
8372
|
+
size: -0.005
|
8211
8373
|
};
|
8212
8374
|
/**
|
8213
8375
|
* Make a stacked delimiter out of a given delimiter, with the total height at
|
8214
8376
|
* least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.
|
8215
8377
|
*/
|
8216
8378
|
|
8217
|
-
|
8218
8379
|
var delimiter_makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {
|
8219
8380
|
// There are four parts, the top, an optional middle, a repeated part, and a
|
8220
8381
|
// bottom.
|
@@ -8335,7 +8496,7 @@ var delimiter_makeStackedDelim = function makeStackedDelim(delim, heightTotal, c
|
|
8335
8496
|
|
8336
8497
|
var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need
|
8337
8498
|
|
8338
|
-
var repeatCount = Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal)); // Compute the total height of the delimiter including all the symbols
|
8499
|
+
var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols
|
8339
8500
|
|
8340
8501
|
var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note
|
8341
8502
|
// that in this context, "center" means that the delimiter should be
|
@@ -8349,7 +8510,15 @@ var delimiter_makeStackedDelim = function makeStackedDelim(delim, heightTotal, c
|
|
8349
8510
|
} // Calculate the depth
|
8350
8511
|
|
8351
8512
|
|
8352
|
-
var depth = realHeightTotal / 2 - axisHeight; //
|
8513
|
+
var depth = realHeightTotal / 2 - axisHeight; // This function differs from the TeX procedure in one way.
|
8514
|
+
// We shift each repeat element downwards by 0.005em, to prevent a gap
|
8515
|
+
// due to browser floating point rounding error.
|
8516
|
+
// Then, at the last element-to element joint, we add one extra repeat
|
8517
|
+
// element to cover the gap created by the shifts.
|
8518
|
+
// Find the shift needed to align the upper end of the extra element at a point
|
8519
|
+
// 0.005em above the lower end of the top element.
|
8520
|
+
|
8521
|
+
var shiftOfExtraElement = (repeatCount + 1) * 0.005 - repeatHeightTotal; // Now, we start building the pieces that will go into the vlist
|
8353
8522
|
// Keep a list of the inner pieces
|
8354
8523
|
|
8355
8524
|
var inners = []; // Add the bottom symbol
|
@@ -8359,23 +8528,43 @@ var delimiter_makeStackedDelim = function makeStackedDelim(delim, heightTotal, c
|
|
8359
8528
|
if (middle === null) {
|
8360
8529
|
// Add that many symbols
|
8361
8530
|
for (var i = 0; i < repeatCount; i++) {
|
8531
|
+
inners.push(lap); // overlap
|
8532
|
+
|
8362
8533
|
inners.push(delimiter_makeInner(repeat, font, mode));
|
8363
8534
|
}
|
8364
8535
|
} else {
|
8365
8536
|
// When there is a middle bit, we need the middle part and two repeated
|
8366
8537
|
// sections
|
8367
8538
|
for (var _i = 0; _i < repeatCount; _i++) {
|
8539
|
+
inners.push(lap);
|
8368
8540
|
inners.push(delimiter_makeInner(repeat, font, mode));
|
8369
|
-
}
|
8541
|
+
} // Insert one extra repeat element.
|
8542
|
+
|
8543
|
+
|
8544
|
+
inners.push({
|
8545
|
+
type: "kern",
|
8546
|
+
size: shiftOfExtraElement
|
8547
|
+
});
|
8548
|
+
inners.push(delimiter_makeInner(repeat, font, mode));
|
8549
|
+
inners.push(lap); // Now insert the middle of the brace.
|
8370
8550
|
|
8371
8551
|
inners.push(delimiter_makeInner(middle, font, mode));
|
8372
8552
|
|
8373
8553
|
for (var _i2 = 0; _i2 < repeatCount; _i2++) {
|
8554
|
+
inners.push(lap);
|
8374
8555
|
inners.push(delimiter_makeInner(repeat, font, mode));
|
8375
8556
|
}
|
8376
|
-
} //
|
8557
|
+
} // To cover the gap create by the overlaps, insert one more repeat element,
|
8558
|
+
// at a position that juts 0.005 above the bottom of the top element.
|
8377
8559
|
|
8378
8560
|
|
8561
|
+
inners.push({
|
8562
|
+
type: "kern",
|
8563
|
+
size: shiftOfExtraElement
|
8564
|
+
});
|
8565
|
+
inners.push(delimiter_makeInner(repeat, font, mode));
|
8566
|
+
inners.push(lap); // Add the top symbol
|
8567
|
+
|
8379
8568
|
inners.push(delimiter_makeInner(top, font, mode)); // Finally, build the vlist
|
8380
8569
|
|
8381
8570
|
var newOptions = options.havingBaseStyle(src_Style.TEXT);
|
@@ -8393,19 +8582,9 @@ var vbPad = 80; // padding above the surd, measured inside the viewBox.
|
|
8393
8582
|
|
8394
8583
|
var emPad = 0.08; // padding, in ems, measured in the document.
|
8395
8584
|
|
8396
|
-
var delimiter_sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, options) {
|
8397
|
-
var
|
8398
|
-
|
8399
|
-
if (sqrtName === "sqrtTall") {
|
8400
|
-
// sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular
|
8401
|
-
// One path edge has a variable length. It runs from the viniculumn
|
8402
|
-
// to a point near (14 units) the bottom of the surd. The viniculum
|
8403
|
-
// is 40 units thick. So the length of the line in question is:
|
8404
|
-
var vertSegment = viewBoxHeight - 54 - vbPad;
|
8405
|
-
alternate = "M702 " + vbPad + "H400000v40H742v" + vertSegment + "l-4 4-4 4c-.667.7\n-2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1h-12l-28-84c-16.667-52-96.667\n-294.333-240-727l-212 -643 -85 170c-4-3.333-8.333-7.667-13 -13l-13-13l77-155\n 77-156c66 199.333 139 419.667 219 661 l218 661zM702 " + vbPad + "H400000v40H742z";
|
8406
|
-
}
|
8407
|
-
|
8408
|
-
var pathNode = new domTree_PathNode(sqrtName, alternate);
|
8585
|
+
var delimiter_sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraViniculum, options) {
|
8586
|
+
var path = sqrtPath(sqrtName, extraViniculum, viewBoxHeight);
|
8587
|
+
var pathNode = new domTree_PathNode(sqrtName, path);
|
8409
8588
|
var svg = new SvgNode([pathNode], {
|
8410
8589
|
// Note: 1000:1 ratio of viewBox to document em width.
|
8411
8590
|
"width": "400em",
|
@@ -8427,7 +8606,10 @@ var makeSqrtImage = function makeSqrtImage(height, options) {
|
|
8427
8606
|
|
8428
8607
|
var delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);
|
8429
8608
|
var sizeMultiplier = newOptions.sizeMultiplier; // default
|
8430
|
-
//
|
8609
|
+
// The standard sqrt SVGs each have a 0.04em thick viniculum.
|
8610
|
+
// If Settings.minRuleThickness is larger than that, we add extraViniculum.
|
8611
|
+
|
8612
|
+
var extraViniculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.
|
8431
8613
|
|
8432
8614
|
var span;
|
8433
8615
|
var spanHeight = 0;
|
@@ -8441,7 +8623,8 @@ var makeSqrtImage = function makeSqrtImage(height, options) {
|
|
8441
8623
|
|
8442
8624
|
if (delim.type === "small") {
|
8443
8625
|
// Get an SVG that is derived from glyph U+221A in font KaTeX-Main.
|
8444
|
-
|
8626
|
+
// 1000 unit normal glyph height.
|
8627
|
+
viewBoxHeight = 1000 + 1000 * extraViniculum + vbPad;
|
8445
8628
|
|
8446
8629
|
if (height < 1.0) {
|
8447
8630
|
sizeMultiplier = 1.0; // mimic a \textfont radical
|
@@ -8449,26 +8632,26 @@ var makeSqrtImage = function makeSqrtImage(height, options) {
|
|
8449
8632
|
sizeMultiplier = 0.7; // mimic a \scriptfont radical
|
8450
8633
|
}
|
8451
8634
|
|
8452
|
-
spanHeight = (1.0 + emPad) / sizeMultiplier;
|
8453
|
-
texHeight = 1.00 / sizeMultiplier;
|
8454
|
-
span = delimiter_sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, options);
|
8635
|
+
spanHeight = (1.0 + extraViniculum + emPad) / sizeMultiplier;
|
8636
|
+
texHeight = (1.00 + extraViniculum) / sizeMultiplier;
|
8637
|
+
span = delimiter_sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraViniculum, options);
|
8455
8638
|
span.style.minWidth = "0.853em";
|
8456
8639
|
advanceWidth = 0.833 / sizeMultiplier; // from the font.
|
8457
8640
|
} else if (delim.type === "large") {
|
8458
8641
|
// These SVGs come from fonts: KaTeX_Size1, _Size2, etc.
|
8459
8642
|
viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];
|
8460
|
-
texHeight = sizeToMaxHeight[delim.size] / sizeMultiplier;
|
8461
|
-
spanHeight = (sizeToMaxHeight[delim.size] + emPad) / sizeMultiplier;
|
8462
|
-
span = delimiter_sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, options);
|
8643
|
+
texHeight = (sizeToMaxHeight[delim.size] + extraViniculum) / sizeMultiplier;
|
8644
|
+
spanHeight = (sizeToMaxHeight[delim.size] + extraViniculum + emPad) / sizeMultiplier;
|
8645
|
+
span = delimiter_sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraViniculum, options);
|
8463
8646
|
span.style.minWidth = "1.02em";
|
8464
8647
|
advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.
|
8465
8648
|
} else {
|
8466
8649
|
// Tall sqrt. In TeX, this would be stacked using multiple glyphs.
|
8467
8650
|
// We'll use a single SVG to accomplish the same thing.
|
8468
|
-
spanHeight = height + emPad;
|
8469
|
-
texHeight = height;
|
8470
|
-
viewBoxHeight = Math.floor(1000 * height) + vbPad;
|
8471
|
-
span = delimiter_sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, options);
|
8651
|
+
spanHeight = height + extraViniculum + emPad;
|
8652
|
+
texHeight = height + extraViniculum;
|
8653
|
+
viewBoxHeight = Math.floor(1000 * height + extraViniculum) + vbPad;
|
8654
|
+
span = delimiter_sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraViniculum, options);
|
8472
8655
|
span.style.minWidth = "0.742em";
|
8473
8656
|
advanceWidth = 1.056;
|
8474
8657
|
}
|
@@ -8482,7 +8665,7 @@ var makeSqrtImage = function makeSqrtImage(height, options) {
|
|
8482
8665
|
// This actually should depend on the chosen font -- e.g. \boldmath
|
8483
8666
|
// should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and
|
8484
8667
|
// have thicker rules.
|
8485
|
-
ruleWidth: options.fontMetrics().sqrtRuleThickness * sizeMultiplier
|
8668
|
+
ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraViniculum) * sizeMultiplier
|
8486
8669
|
};
|
8487
8670
|
}; // There are three kinds of delimiters, delimiters that stack when they become
|
8488
8671
|
// too large
|
@@ -8874,10 +9057,18 @@ defineFunction({
|
|
8874
9057
|
// \left case below triggers parsing of \right in
|
8875
9058
|
// `const right = parser.parseFunction();`
|
8876
9059
|
// uses this return value.
|
9060
|
+
var color = context.parser.gullet.macros.get("\\current@color");
|
9061
|
+
|
9062
|
+
if (color && typeof color !== "string") {
|
9063
|
+
throw new src_ParseError("\\current@color set to non-string in \\right");
|
9064
|
+
}
|
9065
|
+
|
8877
9066
|
return {
|
8878
9067
|
type: "leftright-right",
|
8879
9068
|
mode: context.parser.mode,
|
8880
|
-
delim: checkDelimiter(args[0], context).text
|
9069
|
+
delim: checkDelimiter(args[0], context).text,
|
9070
|
+
color: color // undefined if not set via \color
|
9071
|
+
|
8881
9072
|
};
|
8882
9073
|
}
|
8883
9074
|
});
|
@@ -8903,7 +9094,8 @@ defineFunction({
|
|
8903
9094
|
mode: parser.mode,
|
8904
9095
|
body: body,
|
8905
9096
|
left: delim.text,
|
8906
|
-
right: right.delim
|
9097
|
+
right: right.delim,
|
9098
|
+
rightColor: right.color
|
8907
9099
|
};
|
8908
9100
|
},
|
8909
9101
|
htmlBuilder: function htmlBuilder(group, options) {
|
@@ -8960,12 +9152,13 @@ defineFunction({
|
|
8960
9152
|
}
|
8961
9153
|
}
|
8962
9154
|
|
8963
|
-
var rightDelim; // Same for the right delimiter
|
9155
|
+
var rightDelim; // Same for the right delimiter, but using color specified by \color
|
8964
9156
|
|
8965
9157
|
if (group.right === ".") {
|
8966
9158
|
rightDelim = makeNullDelimiter(options, ["mclose"]);
|
8967
9159
|
} else {
|
8968
|
-
|
9160
|
+
var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;
|
9161
|
+
rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]);
|
8969
9162
|
} // Add it to the end of the expression.
|
8970
9163
|
|
8971
9164
|
|
@@ -8985,6 +9178,11 @@ defineFunction({
|
|
8985
9178
|
if (group.right !== ".") {
|
8986
9179
|
var rightNode = new mathMLTree.MathNode("mo", [buildMathML_makeText(group.right, group.mode)]);
|
8987
9180
|
rightNode.setAttribute("fence", "true");
|
9181
|
+
|
9182
|
+
if (group.rightColor) {
|
9183
|
+
rightNode.setAttribute("mathcolor", group.rightColor);
|
9184
|
+
}
|
9185
|
+
|
8988
9186
|
inner.push(rightNode);
|
8989
9187
|
}
|
8990
9188
|
|
@@ -9087,16 +9285,25 @@ var enclose_htmlBuilder = function htmlBuilder(group, options) {
|
|
9087
9285
|
} // Add vertical padding
|
9088
9286
|
|
9089
9287
|
|
9090
|
-
var vertPad = 0;
|
9091
|
-
// ref: cancel package: \advance\totalheight2\p@ % "+2"
|
9288
|
+
var vertPad = 0;
|
9289
|
+
var ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2"
|
9092
9290
|
|
9093
9291
|
if (/box/.test(label)) {
|
9094
|
-
|
9292
|
+
ruleThickness = Math.max(options.fontMetrics().fboxrule, // default
|
9293
|
+
options.minRuleThickness // User override.
|
9294
|
+
);
|
9295
|
+
vertPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness);
|
9095
9296
|
} else {
|
9096
9297
|
vertPad = isSingleChar ? 0.2 : 0;
|
9097
9298
|
}
|
9098
9299
|
|
9099
9300
|
img = stretchy.encloseSpan(inner, label, vertPad, options);
|
9301
|
+
|
9302
|
+
if (/fbox|boxed|fcolorbox/.test(label)) {
|
9303
|
+
img.style.borderStyle = "solid";
|
9304
|
+
img.style.borderWidth = ruleThickness + "em";
|
9305
|
+
}
|
9306
|
+
|
9100
9307
|
imgShift = inner.depth + vertPad;
|
9101
9308
|
|
9102
9309
|
if (group.backgroundColor) {
|
@@ -9157,6 +9364,7 @@ var enclose_htmlBuilder = function htmlBuilder(group, options) {
|
|
9157
9364
|
};
|
9158
9365
|
|
9159
9366
|
var enclose_mathmlBuilder = function mathmlBuilder(group, options) {
|
9367
|
+
var fboxsep = 0;
|
9160
9368
|
var node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildMathML_buildGroup(group.body, options)]);
|
9161
9369
|
|
9162
9370
|
switch (group.label) {
|
@@ -9180,14 +9388,17 @@ var enclose_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
9180
9388
|
case "\\colorbox":
|
9181
9389
|
// <menclose> doesn't have a good notation option. So use <mpadded>
|
9182
9390
|
// instead. Set some attributes that come included with <menclose>.
|
9183
|
-
|
9184
|
-
node.setAttribute("
|
9185
|
-
node.setAttribute("
|
9391
|
+
fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;
|
9392
|
+
node.setAttribute("width", "+" + 2 * fboxsep + "pt");
|
9393
|
+
node.setAttribute("height", "+" + 2 * fboxsep + "pt");
|
9394
|
+
node.setAttribute("lspace", fboxsep + "pt"); //
|
9186
9395
|
|
9187
|
-
node.setAttribute("voffset", "
|
9396
|
+
node.setAttribute("voffset", fboxsep + "pt");
|
9188
9397
|
|
9189
9398
|
if (group.label === "\\fcolorbox") {
|
9190
|
-
var thk = options.fontMetrics().
|
9399
|
+
var thk = Math.max(options.fontMetrics().fboxrule, // default
|
9400
|
+
options.minRuleThickness // user override
|
9401
|
+
);
|
9191
9402
|
node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor));
|
9192
9403
|
}
|
9193
9404
|
|
@@ -9262,7 +9473,7 @@ defineFunction({
|
|
9262
9473
|
names: ["\\fbox"],
|
9263
9474
|
props: {
|
9264
9475
|
numArgs: 1,
|
9265
|
-
argTypes: ["
|
9476
|
+
argTypes: ["hbox"],
|
9266
9477
|
allowedInText: true
|
9267
9478
|
},
|
9268
9479
|
handler: function handler(_ref3, args) {
|
@@ -9350,18 +9561,19 @@ function defineEnvironment(_ref) {
|
|
9350
9561
|
|
9351
9562
|
|
9352
9563
|
|
9564
|
+
|
9353
9565
|
function getHLines(parser) {
|
9354
9566
|
// Return an array. The array length = number of hlines.
|
9355
9567
|
// Each element in the array tells if the line is dashed.
|
9356
9568
|
var hlineInfo = [];
|
9357
9569
|
parser.consumeSpaces();
|
9358
|
-
var nxt = parser.
|
9570
|
+
var nxt = parser.fetch().text;
|
9359
9571
|
|
9360
9572
|
while (nxt === "\\hline" || nxt === "\\hdashline") {
|
9361
9573
|
parser.consume();
|
9362
9574
|
hlineInfo.push(nxt === "\\hdashline");
|
9363
9575
|
parser.consumeSpaces();
|
9364
|
-
nxt = parser.
|
9576
|
+
nxt = parser.fetch().text;
|
9365
9577
|
}
|
9366
9578
|
|
9367
9579
|
return hlineInfo;
|
@@ -9397,8 +9609,10 @@ function parseArray(parser, _ref, style) {
|
|
9397
9609
|
throw new src_ParseError("Invalid \\arraystretch: " + stretch);
|
9398
9610
|
}
|
9399
9611
|
}
|
9400
|
-
}
|
9612
|
+
} // Start group for first cell
|
9613
|
+
|
9401
9614
|
|
9615
|
+
parser.gullet.beginGroup();
|
9402
9616
|
var row = [];
|
9403
9617
|
var body = [row];
|
9404
9618
|
var rowGaps = [];
|
@@ -9408,7 +9622,10 @@ function parseArray(parser, _ref, style) {
|
|
9408
9622
|
|
9409
9623
|
while (true) {
|
9410
9624
|
// eslint-disable-line no-constant-condition
|
9625
|
+
// Parse each cell in its own group (namespace)
|
9411
9626
|
var cell = parser.parseExpression(false, "\\cr");
|
9627
|
+
parser.gullet.endGroup();
|
9628
|
+
parser.gullet.beginGroup();
|
9412
9629
|
cell = {
|
9413
9630
|
type: "ordgroup",
|
9414
9631
|
mode: parser.mode,
|
@@ -9425,7 +9642,7 @@ function parseArray(parser, _ref, style) {
|
|
9425
9642
|
}
|
9426
9643
|
|
9427
9644
|
row.push(cell);
|
9428
|
-
var next = parser.
|
9645
|
+
var next = parser.fetch().text;
|
9429
9646
|
|
9430
9647
|
if (next === "&") {
|
9431
9648
|
parser.consume();
|
@@ -9452,7 +9669,10 @@ function parseArray(parser, _ref, style) {
|
|
9452
9669
|
} else {
|
9453
9670
|
throw new src_ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken);
|
9454
9671
|
}
|
9455
|
-
}
|
9672
|
+
} // End cell group
|
9673
|
+
|
9674
|
+
|
9675
|
+
parser.gullet.endGroup(); // End array group defining \\
|
9456
9676
|
|
9457
9677
|
parser.gullet.endGroup();
|
9458
9678
|
return {
|
@@ -9486,11 +9706,24 @@ var array_htmlBuilder = function htmlBuilder(group, options) {
|
|
9486
9706
|
var hLinesBeforeRow = group.hLinesBeforeRow;
|
9487
9707
|
var nc = 0;
|
9488
9708
|
var body = new Array(nr);
|
9489
|
-
var hlines = [];
|
9709
|
+
var hlines = [];
|
9710
|
+
var ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em.
|
9711
|
+
options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.
|
9712
|
+
); // Horizontal spacing
|
9490
9713
|
|
9491
9714
|
var pt = 1 / options.fontMetrics().ptPerEm;
|
9492
|
-
var arraycolsep = 5 * pt; // \arraycolsep in article.cls
|
9493
|
-
|
9715
|
+
var arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls
|
9716
|
+
|
9717
|
+
if (group.colSeparationType && group.colSeparationType === "small") {
|
9718
|
+
// We're in a {smallmatrix}. Default column space is \thickspace,
|
9719
|
+
// i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.
|
9720
|
+
// But that needs adjustment because LaTeX applies \scriptstyle to the
|
9721
|
+
// entire array, including the colspace, but this function applies
|
9722
|
+
// \scriptstyle only inside each element.
|
9723
|
+
var localMultiplier = options.havingStyle(src_Style.SCRIPT).sizeMultiplier;
|
9724
|
+
arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);
|
9725
|
+
} // Vertical spacing
|
9726
|
+
|
9494
9727
|
|
9495
9728
|
var baselineskip = 12 * pt; // see size10.clo
|
9496
9729
|
// Default \jot from ltmath.dtx
|
@@ -9602,17 +9835,15 @@ var array_htmlBuilder = function htmlBuilder(group, options) {
|
|
9602
9835
|
cols.push(colSep);
|
9603
9836
|
}
|
9604
9837
|
|
9605
|
-
if (colDescr.separator === "|") {
|
9838
|
+
if (colDescr.separator === "|" || colDescr.separator === ":") {
|
9839
|
+
var lineType = colDescr.separator === "|" ? "solid" : "dashed";
|
9606
9840
|
var separator = buildCommon.makeSpan(["vertical-separator"], [], options);
|
9607
9841
|
separator.style.height = totalHeight + "em";
|
9842
|
+
separator.style.borderRightWidth = ruleThickness + "em";
|
9843
|
+
separator.style.borderRightStyle = lineType;
|
9844
|
+
separator.style.margin = "0 -" + ruleThickness / 2 + "em";
|
9608
9845
|
separator.style.verticalAlign = -(totalHeight - offset) + "em";
|
9609
9846
|
cols.push(separator);
|
9610
|
-
} else if (colDescr.separator === ":") {
|
9611
|
-
var _separator = buildCommon.makeSpan(["vertical-separator", "vs-dashed"], [], options);
|
9612
|
-
|
9613
|
-
_separator.style.height = totalHeight + "em";
|
9614
|
-
_separator.style.verticalAlign = -(totalHeight - offset) + "em";
|
9615
|
-
cols.push(_separator);
|
9616
9847
|
} else {
|
9617
9848
|
throw new src_ParseError("Invalid separator type: " + colDescr.separator);
|
9618
9849
|
}
|
@@ -9679,8 +9910,8 @@ var array_htmlBuilder = function htmlBuilder(group, options) {
|
|
9679
9910
|
body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any.
|
9680
9911
|
|
9681
9912
|
if (hlines.length > 0) {
|
9682
|
-
var line = buildCommon.makeLineSpan("hline", options,
|
9683
|
-
var dashes = buildCommon.makeLineSpan("hdashline", options,
|
9913
|
+
var line = buildCommon.makeLineSpan("hline", options, ruleThickness);
|
9914
|
+
var dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness);
|
9684
9915
|
var vListElems = [{
|
9685
9916
|
type: "elem",
|
9686
9917
|
elem: body,
|
@@ -9737,7 +9968,8 @@ var array_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
9737
9968
|
// The 0.16 and 0.09 values are found emprically. They produce an array
|
9738
9969
|
// similar to LaTeX and in which content does not interfere with \hines.
|
9739
9970
|
|
9740
|
-
var gap =
|
9971
|
+
var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}
|
9972
|
+
: 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);
|
9741
9973
|
table.setAttribute("rowspacing", gap + "em"); // MathML table lines go only between cells.
|
9742
9974
|
// To place a line on an edge we'll use <menclose>, if necessary.
|
9743
9975
|
|
@@ -9801,6 +10033,8 @@ var array_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
9801
10033
|
table.setAttribute("columnspacing", spacing.trim());
|
9802
10034
|
} else if (group.colSeparationType === "alignat") {
|
9803
10035
|
table.setAttribute("columnspacing", "0em");
|
10036
|
+
} else if (group.colSeparationType === "small") {
|
10037
|
+
table.setAttribute("columnspacing", "0.2778em");
|
9804
10038
|
} else {
|
9805
10039
|
table.setAttribute("columnspacing", "1em");
|
9806
10040
|
} // Address \hline and \hdashline
|
@@ -9820,13 +10054,18 @@ var array_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
9820
10054
|
table.setAttribute("rowlines", rowLines.trim());
|
9821
10055
|
}
|
9822
10056
|
|
9823
|
-
if (menclose
|
9824
|
-
|
9825
|
-
|
9826
|
-
|
9827
|
-
|
9828
|
-
|
10057
|
+
if (menclose !== "") {
|
10058
|
+
table = new mathMLTree.MathNode("menclose", [table]);
|
10059
|
+
table.setAttribute("notation", menclose.trim());
|
10060
|
+
}
|
10061
|
+
|
10062
|
+
if (group.arraystretch && group.arraystretch < 1) {
|
10063
|
+
// A small array. Wrap in scriptstyle so row gap is not too large.
|
10064
|
+
table = new mathMLTree.MathNode("mstyle", [table]);
|
10065
|
+
table.setAttribute("scriptlevel", "1");
|
9829
10066
|
}
|
10067
|
+
|
10068
|
+
return table;
|
9830
10069
|
}; // Convenience function for aligned and alignedat environments.
|
9831
10070
|
|
9832
10071
|
|
@@ -9992,11 +10231,74 @@ defineEnvironment({
|
|
9992
10231
|
mode: context.mode,
|
9993
10232
|
body: [res],
|
9994
10233
|
left: delimiters[0],
|
9995
|
-
right: delimiters[1]
|
10234
|
+
right: delimiters[1],
|
10235
|
+
rightColor: undefined // \right uninfluenced by \color in array
|
10236
|
+
|
9996
10237
|
} : res;
|
9997
10238
|
},
|
9998
10239
|
htmlBuilder: array_htmlBuilder,
|
9999
10240
|
mathmlBuilder: array_mathmlBuilder
|
10241
|
+
});
|
10242
|
+
defineEnvironment({
|
10243
|
+
type: "array",
|
10244
|
+
names: ["smallmatrix"],
|
10245
|
+
props: {
|
10246
|
+
numArgs: 0
|
10247
|
+
},
|
10248
|
+
handler: function handler(context) {
|
10249
|
+
var payload = {
|
10250
|
+
arraystretch: 0.5
|
10251
|
+
};
|
10252
|
+
var res = parseArray(context.parser, payload, "script");
|
10253
|
+
res.colSeparationType = "small";
|
10254
|
+
return res;
|
10255
|
+
},
|
10256
|
+
htmlBuilder: array_htmlBuilder,
|
10257
|
+
mathmlBuilder: array_mathmlBuilder
|
10258
|
+
});
|
10259
|
+
defineEnvironment({
|
10260
|
+
type: "array",
|
10261
|
+
names: ["subarray"],
|
10262
|
+
props: {
|
10263
|
+
numArgs: 1
|
10264
|
+
},
|
10265
|
+
handler: function handler(context, args) {
|
10266
|
+
// Parsing of {subarray} is similar to {array}
|
10267
|
+
var symNode = checkSymbolNodeType(args[0]);
|
10268
|
+
var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body;
|
10269
|
+
var cols = colalign.map(function (nde) {
|
10270
|
+
var node = assertSymbolNodeType(nde);
|
10271
|
+
var ca = node.text; // {subarray} only recognizes "l" & "c"
|
10272
|
+
|
10273
|
+
if ("lc".indexOf(ca) !== -1) {
|
10274
|
+
return {
|
10275
|
+
type: "align",
|
10276
|
+
align: ca
|
10277
|
+
};
|
10278
|
+
}
|
10279
|
+
|
10280
|
+
throw new src_ParseError("Unknown column alignment: " + ca, nde);
|
10281
|
+
});
|
10282
|
+
|
10283
|
+
if (cols.length > 1) {
|
10284
|
+
throw new src_ParseError("{subarray} can contain only one column");
|
10285
|
+
}
|
10286
|
+
|
10287
|
+
var res = {
|
10288
|
+
cols: cols,
|
10289
|
+
hskipBeforeAndAfter: false,
|
10290
|
+
arraystretch: 0.5
|
10291
|
+
};
|
10292
|
+
res = parseArray(context.parser, res, "script");
|
10293
|
+
|
10294
|
+
if (res.body[0].length > 1) {
|
10295
|
+
throw new src_ParseError("{subarray} can contain only one column");
|
10296
|
+
}
|
10297
|
+
|
10298
|
+
return res;
|
10299
|
+
},
|
10300
|
+
htmlBuilder: array_htmlBuilder,
|
10301
|
+
mathmlBuilder: array_mathmlBuilder
|
10000
10302
|
}); // A cases environment (in amsmath.sty) is almost equivalent to
|
10001
10303
|
// \def\arraystretch{1.2}%
|
10002
10304
|
// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right.
|
@@ -10036,7 +10338,8 @@ defineEnvironment({
|
|
10036
10338
|
mode: context.mode,
|
10037
10339
|
body: [res],
|
10038
10340
|
left: "\\{",
|
10039
|
-
right: "."
|
10341
|
+
right: ".",
|
10342
|
+
rightColor: undefined
|
10040
10343
|
};
|
10041
10344
|
},
|
10042
10345
|
htmlBuilder: array_htmlBuilder,
|
@@ -10189,6 +10492,7 @@ defineFunction({
|
|
10189
10492
|
|
10190
10493
|
|
10191
10494
|
|
10495
|
+
|
10192
10496
|
var mclass_makeSpan = buildCommon.makeSpan;
|
10193
10497
|
|
10194
10498
|
function mclass_htmlBuilder(group, options) {
|
@@ -10197,8 +10501,44 @@ function mclass_htmlBuilder(group, options) {
|
|
10197
10501
|
}
|
10198
10502
|
|
10199
10503
|
function mclass_mathmlBuilder(group, options) {
|
10504
|
+
var node;
|
10200
10505
|
var inner = buildMathML_buildExpression(group.body, options);
|
10201
|
-
|
10506
|
+
|
10507
|
+
if (group.mclass === "minner") {
|
10508
|
+
return mathMLTree.newDocumentFragment(inner);
|
10509
|
+
} else if (group.mclass === "mord") {
|
10510
|
+
if (group.isCharacterBox) {
|
10511
|
+
node = inner[0];
|
10512
|
+
node.type = "mi";
|
10513
|
+
} else {
|
10514
|
+
node = new mathMLTree.MathNode("mi", inner);
|
10515
|
+
}
|
10516
|
+
} else {
|
10517
|
+
if (group.isCharacterBox) {
|
10518
|
+
node = inner[0];
|
10519
|
+
node.type = "mo";
|
10520
|
+
} else {
|
10521
|
+
node = new mathMLTree.MathNode("mo", inner);
|
10522
|
+
} // Set spacing based on what is the most likely adjacent atom type.
|
10523
|
+
// See TeXbook p170.
|
10524
|
+
|
10525
|
+
|
10526
|
+
if (group.mclass === "mbin") {
|
10527
|
+
node.attributes.lspace = "0.22em"; // medium space
|
10528
|
+
|
10529
|
+
node.attributes.rspace = "0.22em";
|
10530
|
+
} else if (group.mclass === "mpunct") {
|
10531
|
+
node.attributes.lspace = "0em";
|
10532
|
+
node.attributes.rspace = "0.17em"; // thinspace
|
10533
|
+
} else if (group.mclass === "mopen" || group.mclass === "mclose") {
|
10534
|
+
node.attributes.lspace = "0em";
|
10535
|
+
node.attributes.rspace = "0em";
|
10536
|
+
} // MathML <mo> default space is 5/18 em, so <mrel> needs no action.
|
10537
|
+
// Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo
|
10538
|
+
|
10539
|
+
}
|
10540
|
+
|
10541
|
+
return node;
|
10202
10542
|
} // Math class commands except \mathop
|
10203
10543
|
|
10204
10544
|
|
@@ -10216,7 +10556,9 @@ defineFunction({
|
|
10216
10556
|
type: "mclass",
|
10217
10557
|
mode: parser.mode,
|
10218
10558
|
mclass: "m" + funcName.substr(5),
|
10219
|
-
|
10559
|
+
// TODO(kevinb): don't prefix with 'm'
|
10560
|
+
body: defineFunction_ordargument(body),
|
10561
|
+
isCharacterBox: utils.isCharacterBox(body)
|
10220
10562
|
};
|
10221
10563
|
},
|
10222
10564
|
htmlBuilder: mclass_htmlBuilder,
|
@@ -10249,7 +10591,8 @@ defineFunction({
|
|
10249
10591
|
type: "mclass",
|
10250
10592
|
mode: parser.mode,
|
10251
10593
|
mclass: binrelClass(args[0]),
|
10252
|
-
body: [args[1]]
|
10594
|
+
body: [args[1]],
|
10595
|
+
isCharacterBox: utils.isCharacterBox(args[1])
|
10253
10596
|
};
|
10254
10597
|
}
|
10255
10598
|
}); // Build a relation or stacked op by placing one symbol on top of another
|
@@ -10295,7 +10638,8 @@ defineFunction({
|
|
10295
10638
|
type: "mclass",
|
10296
10639
|
mode: parser.mode,
|
10297
10640
|
mclass: mclass,
|
10298
|
-
body: [supsub]
|
10641
|
+
body: [supsub],
|
10642
|
+
isCharacterBox: utils.isCharacterBox(supsub)
|
10299
10643
|
};
|
10300
10644
|
},
|
10301
10645
|
htmlBuilder: mclass_htmlBuilder,
|
@@ -10308,6 +10652,7 @@ defineFunction({
|
|
10308
10652
|
|
10309
10653
|
|
10310
10654
|
|
10655
|
+
|
10311
10656
|
var font_htmlBuilder = function htmlBuilder(group, options) {
|
10312
10657
|
var font = group.font;
|
10313
10658
|
var newOptions = options.withFont(font);
|
@@ -10365,7 +10710,8 @@ defineFunction({
|
|
10365
10710
|
},
|
10366
10711
|
handler: function handler(_ref2, args) {
|
10367
10712
|
var parser = _ref2.parser;
|
10368
|
-
var body = args[0];
|
10713
|
+
var body = args[0];
|
10714
|
+
var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the
|
10369
10715
|
// argument's bin|rel|ord status
|
10370
10716
|
|
10371
10717
|
return {
|
@@ -10377,7 +10723,8 @@ defineFunction({
|
|
10377
10723
|
mode: parser.mode,
|
10378
10724
|
font: "boldsymbol",
|
10379
10725
|
body: body
|
10380
|
-
}]
|
10726
|
+
}],
|
10727
|
+
isCharacterBox: isCharacterBox
|
10381
10728
|
};
|
10382
10729
|
}
|
10383
10730
|
}); // Old font changing functions
|
@@ -11067,6 +11414,14 @@ defineFunction({
|
|
11067
11414
|
var parser = _ref.parser;
|
11068
11415
|
var body = args[1];
|
11069
11416
|
var href = assertNodeType(args[0], "url").url;
|
11417
|
+
|
11418
|
+
if (!parser.settings.isTrusted({
|
11419
|
+
command: "\\href",
|
11420
|
+
url: href
|
11421
|
+
})) {
|
11422
|
+
return parser.formatUnsupportedCmd("\\href");
|
11423
|
+
}
|
11424
|
+
|
11070
11425
|
return {
|
11071
11426
|
type: "href",
|
11072
11427
|
mode: parser.mode,
|
@@ -11100,6 +11455,14 @@ defineFunction({
|
|
11100
11455
|
handler: function handler(_ref2, args) {
|
11101
11456
|
var parser = _ref2.parser;
|
11102
11457
|
var href = assertNodeType(args[0], "url").url;
|
11458
|
+
|
11459
|
+
if (!parser.settings.isTrusted({
|
11460
|
+
command: "\\url",
|
11461
|
+
url: href
|
11462
|
+
})) {
|
11463
|
+
return parser.formatUnsupportedCmd("\\url");
|
11464
|
+
}
|
11465
|
+
|
11103
11466
|
var chars = [];
|
11104
11467
|
|
11105
11468
|
for (var i = 0; i < href.length; i++) {
|
@@ -11159,64 +11522,243 @@ defineFunction({
|
|
11159
11522
|
return buildExpressionRow(group.mathml, options);
|
11160
11523
|
}
|
11161
11524
|
});
|
11162
|
-
// CONCATENATED MODULE: ./src/functions/
|
11163
|
-
// Horizontal spacing commands
|
11525
|
+
// CONCATENATED MODULE: ./src/functions/includegraphics.js
|
11164
11526
|
|
11165
11527
|
|
11166
11528
|
|
11167
11529
|
|
11168
|
-
|
11530
|
+
|
11531
|
+
|
11532
|
+
|
11533
|
+
var includegraphics_sizeData = function sizeData(str) {
|
11534
|
+
if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) {
|
11535
|
+
// str is a number with no unit specified.
|
11536
|
+
// default unit is bp, per graphix package.
|
11537
|
+
return {
|
11538
|
+
number: +str,
|
11539
|
+
unit: "bp"
|
11540
|
+
};
|
11541
|
+
} else {
|
11542
|
+
var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str);
|
11543
|
+
|
11544
|
+
if (!match) {
|
11545
|
+
throw new src_ParseError("Invalid size: '" + str + "' in \\includegraphics");
|
11546
|
+
}
|
11547
|
+
|
11548
|
+
var data = {
|
11549
|
+
number: +(match[1] + match[2]),
|
11550
|
+
// sign + magnitude, cast to number
|
11551
|
+
unit: match[3]
|
11552
|
+
};
|
11553
|
+
|
11554
|
+
if (!validUnit(data)) {
|
11555
|
+
throw new src_ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics.");
|
11556
|
+
}
|
11557
|
+
|
11558
|
+
return data;
|
11559
|
+
}
|
11560
|
+
};
|
11169
11561
|
|
11170
11562
|
defineFunction({
|
11171
|
-
type: "
|
11172
|
-
names: ["\\
|
11563
|
+
type: "includegraphics",
|
11564
|
+
names: ["\\includegraphics"],
|
11173
11565
|
props: {
|
11174
11566
|
numArgs: 1,
|
11175
|
-
|
11176
|
-
|
11567
|
+
numOptionalArgs: 1,
|
11568
|
+
argTypes: ["raw", "url"],
|
11569
|
+
allowedInText: false
|
11177
11570
|
},
|
11178
|
-
handler: function handler(_ref, args) {
|
11179
|
-
var parser = _ref.parser
|
11180
|
-
|
11181
|
-
|
11571
|
+
handler: function handler(_ref, args, optArgs) {
|
11572
|
+
var parser = _ref.parser;
|
11573
|
+
var width = {
|
11574
|
+
number: 0,
|
11575
|
+
unit: "em"
|
11576
|
+
};
|
11577
|
+
var height = {
|
11578
|
+
number: 0.9,
|
11579
|
+
unit: "em"
|
11580
|
+
}; // sorta character sized.
|
11581
|
+
|
11582
|
+
var totalheight = {
|
11583
|
+
number: 0,
|
11584
|
+
unit: "em"
|
11585
|
+
};
|
11586
|
+
var alt = "";
|
11182
11587
|
|
11183
|
-
if (
|
11184
|
-
var
|
11588
|
+
if (optArgs[0]) {
|
11589
|
+
var attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string.
|
11185
11590
|
|
11186
|
-
var
|
11591
|
+
var attributes = attributeStr.split(",");
|
11187
11592
|
|
11188
|
-
|
11189
|
-
|
11190
|
-
parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units"));
|
11191
|
-
}
|
11593
|
+
for (var i = 0; i < attributes.length; i++) {
|
11594
|
+
var keyVal = attributes[i].split("=");
|
11192
11595
|
|
11193
|
-
if (
|
11194
|
-
|
11195
|
-
|
11196
|
-
|
11197
|
-
|
11198
|
-
|
11199
|
-
|
11596
|
+
if (keyVal.length === 2) {
|
11597
|
+
var str = keyVal[1].trim();
|
11598
|
+
|
11599
|
+
switch (keyVal[0].trim()) {
|
11600
|
+
case "alt":
|
11601
|
+
alt = str;
|
11602
|
+
break;
|
11603
|
+
|
11604
|
+
case "width":
|
11605
|
+
width = includegraphics_sizeData(str);
|
11606
|
+
break;
|
11607
|
+
|
11608
|
+
case "height":
|
11609
|
+
height = includegraphics_sizeData(str);
|
11610
|
+
break;
|
11611
|
+
|
11612
|
+
case "totalheight":
|
11613
|
+
totalheight = includegraphics_sizeData(str);
|
11614
|
+
break;
|
11615
|
+
|
11616
|
+
default:
|
11617
|
+
throw new src_ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics.");
|
11618
|
+
}
|
11200
11619
|
}
|
11201
11620
|
}
|
11202
11621
|
}
|
11203
11622
|
|
11623
|
+
var src = assertNodeType(args[0], "url").url;
|
11624
|
+
|
11625
|
+
if (alt === "") {
|
11626
|
+
// No alt given. Use the file name. Strip away the path.
|
11627
|
+
alt = src;
|
11628
|
+
alt = alt.replace(/^.*[\\/]/, '');
|
11629
|
+
alt = alt.substring(0, alt.lastIndexOf('.'));
|
11630
|
+
}
|
11631
|
+
|
11632
|
+
if (!parser.settings.isTrusted({
|
11633
|
+
command: "\\includegraphics",
|
11634
|
+
url: src
|
11635
|
+
})) {
|
11636
|
+
return parser.formatUnsupportedCmd("\\includegraphics");
|
11637
|
+
}
|
11638
|
+
|
11204
11639
|
return {
|
11205
|
-
type: "
|
11640
|
+
type: "includegraphics",
|
11206
11641
|
mode: parser.mode,
|
11207
|
-
|
11642
|
+
alt: alt,
|
11643
|
+
width: width,
|
11644
|
+
height: height,
|
11645
|
+
totalheight: totalheight,
|
11646
|
+
src: src
|
11208
11647
|
};
|
11209
11648
|
},
|
11210
11649
|
htmlBuilder: function htmlBuilder(group, options) {
|
11211
|
-
|
11212
|
-
|
11213
|
-
|
11214
|
-
|
11215
|
-
|
11216
|
-
|
11217
|
-
}
|
11218
|
-
|
11219
|
-
|
11650
|
+
var height = units_calculateSize(group.height, options);
|
11651
|
+
var depth = 0;
|
11652
|
+
|
11653
|
+
if (group.totalheight.number > 0) {
|
11654
|
+
depth = units_calculateSize(group.totalheight, options) - height;
|
11655
|
+
depth = Number(depth.toFixed(2));
|
11656
|
+
}
|
11657
|
+
|
11658
|
+
var width = 0;
|
11659
|
+
|
11660
|
+
if (group.width.number > 0) {
|
11661
|
+
width = units_calculateSize(group.width, options);
|
11662
|
+
}
|
11663
|
+
|
11664
|
+
var style = {
|
11665
|
+
height: height + depth + "em"
|
11666
|
+
};
|
11667
|
+
|
11668
|
+
if (width > 0) {
|
11669
|
+
style.width = width + "em";
|
11670
|
+
}
|
11671
|
+
|
11672
|
+
if (depth > 0) {
|
11673
|
+
style.verticalAlign = -depth + "em";
|
11674
|
+
}
|
11675
|
+
|
11676
|
+
var node = new domTree_Img(group.src, group.alt, style);
|
11677
|
+
node.height = height;
|
11678
|
+
node.depth = depth;
|
11679
|
+
return node;
|
11680
|
+
},
|
11681
|
+
mathmlBuilder: function mathmlBuilder(group, options) {
|
11682
|
+
var node = new mathMLTree.MathNode("mglyph", []);
|
11683
|
+
node.setAttribute("alt", group.alt);
|
11684
|
+
var height = units_calculateSize(group.height, options);
|
11685
|
+
var depth = 0;
|
11686
|
+
|
11687
|
+
if (group.totalheight.number > 0) {
|
11688
|
+
depth = units_calculateSize(group.totalheight, options) - height;
|
11689
|
+
depth = depth.toFixed(2);
|
11690
|
+
node.setAttribute("valign", "-" + depth + "em");
|
11691
|
+
}
|
11692
|
+
|
11693
|
+
node.setAttribute("height", height + depth + "em");
|
11694
|
+
|
11695
|
+
if (group.width.number > 0) {
|
11696
|
+
var width = units_calculateSize(group.width, options);
|
11697
|
+
node.setAttribute("width", width + "em");
|
11698
|
+
}
|
11699
|
+
|
11700
|
+
node.setAttribute("src", group.src);
|
11701
|
+
return node;
|
11702
|
+
}
|
11703
|
+
});
|
11704
|
+
// CONCATENATED MODULE: ./src/functions/kern.js
|
11705
|
+
// Horizontal spacing commands
|
11706
|
+
|
11707
|
+
|
11708
|
+
|
11709
|
+
|
11710
|
+
// TODO: \hskip and \mskip should support plus and minus in lengths
|
11711
|
+
|
11712
|
+
defineFunction({
|
11713
|
+
type: "kern",
|
11714
|
+
names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"],
|
11715
|
+
props: {
|
11716
|
+
numArgs: 1,
|
11717
|
+
argTypes: ["size"],
|
11718
|
+
allowedInText: true
|
11719
|
+
},
|
11720
|
+
handler: function handler(_ref, args) {
|
11721
|
+
var parser = _ref.parser,
|
11722
|
+
funcName = _ref.funcName;
|
11723
|
+
var size = assertNodeType(args[0], "size");
|
11724
|
+
|
11725
|
+
if (parser.settings.strict) {
|
11726
|
+
var mathFunction = funcName[1] === 'm'; // \mkern, \mskip
|
11727
|
+
|
11728
|
+
var muUnit = size.value.unit === 'mu';
|
11729
|
+
|
11730
|
+
if (mathFunction) {
|
11731
|
+
if (!muUnit) {
|
11732
|
+
parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units"));
|
11733
|
+
}
|
11734
|
+
|
11735
|
+
if (parser.mode !== "math") {
|
11736
|
+
parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode");
|
11737
|
+
}
|
11738
|
+
} else {
|
11739
|
+
// !mathFunction
|
11740
|
+
if (muUnit) {
|
11741
|
+
parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units");
|
11742
|
+
}
|
11743
|
+
}
|
11744
|
+
}
|
11745
|
+
|
11746
|
+
return {
|
11747
|
+
type: "kern",
|
11748
|
+
mode: parser.mode,
|
11749
|
+
dimension: size.value
|
11750
|
+
};
|
11751
|
+
},
|
11752
|
+
htmlBuilder: function htmlBuilder(group, options) {
|
11753
|
+
return buildCommon.makeGlue(group.dimension, options);
|
11754
|
+
},
|
11755
|
+
mathmlBuilder: function mathmlBuilder(group, options) {
|
11756
|
+
var dimension = units_calculateSize(group.dimension, options);
|
11757
|
+
return new mathMLTree.SpaceNode(dimension);
|
11758
|
+
}
|
11759
|
+
});
|
11760
|
+
// CONCATENATED MODULE: ./src/functions/lap.js
|
11761
|
+
// Horizontal overlap functions
|
11220
11762
|
|
11221
11763
|
|
11222
11764
|
|
@@ -11297,8 +11839,7 @@ defineFunction({
|
|
11297
11839
|
props: {
|
11298
11840
|
numArgs: 0,
|
11299
11841
|
allowedInText: true,
|
11300
|
-
allowedInMath: false
|
11301
|
-
consumeMode: "math"
|
11842
|
+
allowedInMath: false
|
11302
11843
|
},
|
11303
11844
|
handler: function handler(_ref, args) {
|
11304
11845
|
var funcName = _ref.funcName,
|
@@ -11306,12 +11847,9 @@ defineFunction({
|
|
11306
11847
|
var outerMode = parser.mode;
|
11307
11848
|
parser.switchMode("math");
|
11308
11849
|
var close = funcName === "\\(" ? "\\)" : "$";
|
11309
|
-
var body = parser.parseExpression(false, close);
|
11310
|
-
|
11311
|
-
|
11312
|
-
parser.expect(close, false);
|
11850
|
+
var body = parser.parseExpression(false, close);
|
11851
|
+
parser.expect(close);
|
11313
11852
|
parser.switchMode(outerMode);
|
11314
|
-
parser.consume();
|
11315
11853
|
return {
|
11316
11854
|
type: "styling",
|
11317
11855
|
mode: parser.mode,
|
@@ -11387,6 +11925,123 @@ defineFunction({
|
|
11387
11925
|
return buildExpressionRow(body, options);
|
11388
11926
|
}
|
11389
11927
|
});
|
11928
|
+
// CONCATENATED MODULE: ./src/functions/utils/assembleSupSub.js
|
11929
|
+
|
11930
|
+
|
11931
|
+
// For an operator with limits, assemble the base, sup, and sub into a span.
|
11932
|
+
var assembleSupSub_assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift) {
|
11933
|
+
// IE 8 clips \int if it is in a display: inline-block. We wrap it
|
11934
|
+
// in a new span so it is an inline, and works.
|
11935
|
+
base = buildCommon.makeSpan([], [base]);
|
11936
|
+
var sub;
|
11937
|
+
var sup; // We manually have to handle the superscripts and subscripts. This,
|
11938
|
+
// aside from the kern calculations, is copied from supsub.
|
11939
|
+
|
11940
|
+
if (supGroup) {
|
11941
|
+
var elem = buildHTML_buildGroup(supGroup, options.havingStyle(style.sup()), options);
|
11942
|
+
sup = {
|
11943
|
+
elem: elem,
|
11944
|
+
kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)
|
11945
|
+
};
|
11946
|
+
}
|
11947
|
+
|
11948
|
+
if (subGroup) {
|
11949
|
+
var _elem = buildHTML_buildGroup(subGroup, options.havingStyle(style.sub()), options);
|
11950
|
+
|
11951
|
+
sub = {
|
11952
|
+
elem: _elem,
|
11953
|
+
kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)
|
11954
|
+
};
|
11955
|
+
} // Build the final group as a vlist of the possible subscript, base,
|
11956
|
+
// and possible superscript.
|
11957
|
+
|
11958
|
+
|
11959
|
+
var finalGroup;
|
11960
|
+
|
11961
|
+
if (sup && sub) {
|
11962
|
+
var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;
|
11963
|
+
finalGroup = buildCommon.makeVList({
|
11964
|
+
positionType: "bottom",
|
11965
|
+
positionData: bottom,
|
11966
|
+
children: [{
|
11967
|
+
type: "kern",
|
11968
|
+
size: options.fontMetrics().bigOpSpacing5
|
11969
|
+
}, {
|
11970
|
+
type: "elem",
|
11971
|
+
elem: sub.elem,
|
11972
|
+
marginLeft: -slant + "em"
|
11973
|
+
}, {
|
11974
|
+
type: "kern",
|
11975
|
+
size: sub.kern
|
11976
|
+
}, {
|
11977
|
+
type: "elem",
|
11978
|
+
elem: base
|
11979
|
+
}, {
|
11980
|
+
type: "kern",
|
11981
|
+
size: sup.kern
|
11982
|
+
}, {
|
11983
|
+
type: "elem",
|
11984
|
+
elem: sup.elem,
|
11985
|
+
marginLeft: slant + "em"
|
11986
|
+
}, {
|
11987
|
+
type: "kern",
|
11988
|
+
size: options.fontMetrics().bigOpSpacing5
|
11989
|
+
}]
|
11990
|
+
}, options);
|
11991
|
+
} else if (sub) {
|
11992
|
+
var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note
|
11993
|
+
// that we are supposed to shift the limits by 1/2 of the slant,
|
11994
|
+
// but since we are centering the limits adding a full slant of
|
11995
|
+
// margin will shift by 1/2 that.
|
11996
|
+
|
11997
|
+
finalGroup = buildCommon.makeVList({
|
11998
|
+
positionType: "top",
|
11999
|
+
positionData: top,
|
12000
|
+
children: [{
|
12001
|
+
type: "kern",
|
12002
|
+
size: options.fontMetrics().bigOpSpacing5
|
12003
|
+
}, {
|
12004
|
+
type: "elem",
|
12005
|
+
elem: sub.elem,
|
12006
|
+
marginLeft: -slant + "em"
|
12007
|
+
}, {
|
12008
|
+
type: "kern",
|
12009
|
+
size: sub.kern
|
12010
|
+
}, {
|
12011
|
+
type: "elem",
|
12012
|
+
elem: base
|
12013
|
+
}]
|
12014
|
+
}, options);
|
12015
|
+
} else if (sup) {
|
12016
|
+
var _bottom = base.depth + baseShift;
|
12017
|
+
|
12018
|
+
finalGroup = buildCommon.makeVList({
|
12019
|
+
positionType: "bottom",
|
12020
|
+
positionData: _bottom,
|
12021
|
+
children: [{
|
12022
|
+
type: "elem",
|
12023
|
+
elem: base
|
12024
|
+
}, {
|
12025
|
+
type: "kern",
|
12026
|
+
size: sup.kern
|
12027
|
+
}, {
|
12028
|
+
type: "elem",
|
12029
|
+
elem: sup.elem,
|
12030
|
+
marginLeft: slant + "em"
|
12031
|
+
}, {
|
12032
|
+
type: "kern",
|
12033
|
+
size: options.fontMetrics().bigOpSpacing5
|
12034
|
+
}]
|
12035
|
+
}, options);
|
12036
|
+
} else {
|
12037
|
+
// This case probably shouldn't occur (this would mean the
|
12038
|
+
// supsub was sending us a group with no superscript or
|
12039
|
+
// subscript) but be safe.
|
12040
|
+
return base;
|
12041
|
+
}
|
12042
|
+
|
12043
|
+
return buildCommon.makeSpan(["mop", "op-limits"], [finalGroup], options);
|
12044
|
+
};
|
11390
12045
|
// CONCATENATED MODULE: ./src/functions/op.js
|
11391
12046
|
// Limits, symbols
|
11392
12047
|
|
@@ -11398,6 +12053,7 @@ defineFunction({
|
|
11398
12053
|
|
11399
12054
|
|
11400
12055
|
|
12056
|
+
|
11401
12057
|
// Most operators have a large successor symbol, but these don't.
|
11402
12058
|
var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also
|
11403
12059
|
// "supsub" since some of them (like \int) can affect super/subscripting.
|
@@ -11488,7 +12144,7 @@ var op_htmlBuilder = function htmlBuilder(grp, options) {
|
|
11488
12144
|
var output = [];
|
11489
12145
|
|
11490
12146
|
for (var i = 1; i < group.name.length; i++) {
|
11491
|
-
output.push(buildCommon.mathsym(group.name[i], group.mode));
|
12147
|
+
output.push(buildCommon.mathsym(group.name[i], group.mode, options));
|
11492
12148
|
}
|
11493
12149
|
|
11494
12150
|
base = buildCommon.makeSpan(["mop"], output, options);
|
@@ -11512,117 +12168,7 @@ var op_htmlBuilder = function htmlBuilder(grp, options) {
|
|
11512
12168
|
}
|
11513
12169
|
|
11514
12170
|
if (hasLimits) {
|
11515
|
-
|
11516
|
-
// in a new span so it is an inline, and works.
|
11517
|
-
base = buildCommon.makeSpan([], [base]);
|
11518
|
-
var sub;
|
11519
|
-
var sup; // We manually have to handle the superscripts and subscripts. This,
|
11520
|
-
// aside from the kern calculations, is copied from supsub.
|
11521
|
-
|
11522
|
-
if (supGroup) {
|
11523
|
-
var elem = buildHTML_buildGroup(supGroup, options.havingStyle(style.sup()), options);
|
11524
|
-
sup = {
|
11525
|
-
elem: elem,
|
11526
|
-
kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)
|
11527
|
-
};
|
11528
|
-
}
|
11529
|
-
|
11530
|
-
if (subGroup) {
|
11531
|
-
var _elem = buildHTML_buildGroup(subGroup, options.havingStyle(style.sub()), options);
|
11532
|
-
|
11533
|
-
sub = {
|
11534
|
-
elem: _elem,
|
11535
|
-
kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)
|
11536
|
-
};
|
11537
|
-
} // Build the final group as a vlist of the possible subscript, base,
|
11538
|
-
// and possible superscript.
|
11539
|
-
|
11540
|
-
|
11541
|
-
var finalGroup;
|
11542
|
-
|
11543
|
-
if (sup && sub) {
|
11544
|
-
var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;
|
11545
|
-
finalGroup = buildCommon.makeVList({
|
11546
|
-
positionType: "bottom",
|
11547
|
-
positionData: bottom,
|
11548
|
-
children: [{
|
11549
|
-
type: "kern",
|
11550
|
-
size: options.fontMetrics().bigOpSpacing5
|
11551
|
-
}, {
|
11552
|
-
type: "elem",
|
11553
|
-
elem: sub.elem,
|
11554
|
-
marginLeft: -slant + "em"
|
11555
|
-
}, {
|
11556
|
-
type: "kern",
|
11557
|
-
size: sub.kern
|
11558
|
-
}, {
|
11559
|
-
type: "elem",
|
11560
|
-
elem: base
|
11561
|
-
}, {
|
11562
|
-
type: "kern",
|
11563
|
-
size: sup.kern
|
11564
|
-
}, {
|
11565
|
-
type: "elem",
|
11566
|
-
elem: sup.elem,
|
11567
|
-
marginLeft: slant + "em"
|
11568
|
-
}, {
|
11569
|
-
type: "kern",
|
11570
|
-
size: options.fontMetrics().bigOpSpacing5
|
11571
|
-
}]
|
11572
|
-
}, options);
|
11573
|
-
} else if (sub) {
|
11574
|
-
var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note
|
11575
|
-
// that we are supposed to shift the limits by 1/2 of the slant,
|
11576
|
-
// but since we are centering the limits adding a full slant of
|
11577
|
-
// margin will shift by 1/2 that.
|
11578
|
-
|
11579
|
-
finalGroup = buildCommon.makeVList({
|
11580
|
-
positionType: "top",
|
11581
|
-
positionData: top,
|
11582
|
-
children: [{
|
11583
|
-
type: "kern",
|
11584
|
-
size: options.fontMetrics().bigOpSpacing5
|
11585
|
-
}, {
|
11586
|
-
type: "elem",
|
11587
|
-
elem: sub.elem,
|
11588
|
-
marginLeft: -slant + "em"
|
11589
|
-
}, {
|
11590
|
-
type: "kern",
|
11591
|
-
size: sub.kern
|
11592
|
-
}, {
|
11593
|
-
type: "elem",
|
11594
|
-
elem: base
|
11595
|
-
}]
|
11596
|
-
}, options);
|
11597
|
-
} else if (sup) {
|
11598
|
-
var _bottom = base.depth + baseShift;
|
11599
|
-
|
11600
|
-
finalGroup = buildCommon.makeVList({
|
11601
|
-
positionType: "bottom",
|
11602
|
-
positionData: _bottom,
|
11603
|
-
children: [{
|
11604
|
-
type: "elem",
|
11605
|
-
elem: base
|
11606
|
-
}, {
|
11607
|
-
type: "kern",
|
11608
|
-
size: sup.kern
|
11609
|
-
}, {
|
11610
|
-
type: "elem",
|
11611
|
-
elem: sup.elem,
|
11612
|
-
marginLeft: slant + "em"
|
11613
|
-
}, {
|
11614
|
-
type: "kern",
|
11615
|
-
size: options.fontMetrics().bigOpSpacing5
|
11616
|
-
}]
|
11617
|
-
}, options);
|
11618
|
-
} else {
|
11619
|
-
// This case probably shouldn't occur (this would mean the
|
11620
|
-
// supsub was sending us a group with no superscript or
|
11621
|
-
// subscript) but be safe.
|
11622
|
-
return base;
|
11623
|
-
}
|
11624
|
-
|
11625
|
-
return buildCommon.makeSpan(["mop", "op-limits"], [finalGroup], options);
|
12171
|
+
return assembleSupSub_assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);
|
11626
12172
|
} else {
|
11627
12173
|
if (baseShift) {
|
11628
12174
|
base.style.position = "relative";
|
@@ -11649,8 +12195,6 @@ var op_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
11649
12195
|
} else {
|
11650
12196
|
// This is a text operator. Add all of the characters from the
|
11651
12197
|
// operator's name.
|
11652
|
-
// TODO(emily): Add a space in the middle of some of these
|
11653
|
-
// operators, like \limsup.
|
11654
12198
|
node = new mathMLTree_MathNode("mi", [new mathMLTree_TextNode(group.name.slice(1))]); // Append an <mo>⁡</mo>.
|
11655
12199
|
// ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4
|
11656
12200
|
|
@@ -11819,114 +12363,158 @@ defineFunction({
|
|
11819
12363
|
|
11820
12364
|
|
11821
12365
|
|
11822
|
-
// \operatorname
|
11823
|
-
// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@
|
11824
12366
|
|
11825
|
-
defineFunction({
|
11826
|
-
type: "operatorname",
|
11827
|
-
names: ["\\operatorname"],
|
11828
|
-
props: {
|
11829
|
-
numArgs: 1
|
11830
|
-
},
|
11831
|
-
handler: function handler(_ref, args) {
|
11832
|
-
var parser = _ref.parser;
|
11833
|
-
var body = args[0];
|
11834
|
-
return {
|
11835
|
-
type: "operatorname",
|
11836
|
-
mode: parser.mode,
|
11837
|
-
body: defineFunction_ordargument(body)
|
11838
|
-
};
|
11839
|
-
},
|
11840
|
-
htmlBuilder: function htmlBuilder(group, options) {
|
11841
|
-
if (group.body.length > 0) {
|
11842
|
-
var body = group.body.map(function (child) {
|
11843
|
-
// $FlowFixMe: Check if the node has a string `text` property.
|
11844
|
-
var childText = child.text;
|
11845
12367
|
|
11846
|
-
if (typeof childText === "string") {
|
11847
|
-
return {
|
11848
|
-
type: "textord",
|
11849
|
-
mode: child.mode,
|
11850
|
-
text: childText
|
11851
|
-
};
|
11852
|
-
} else {
|
11853
|
-
return child;
|
11854
|
-
}
|
11855
|
-
}); // Consolidate function names into symbol characters.
|
11856
12368
|
|
11857
|
-
|
12369
|
+
// NOTE: Unlike most `htmlBuilder`s, this one handles not only
|
12370
|
+
// "operatorname", but also "supsub" since \operatorname* can
|
12371
|
+
var operatorname_htmlBuilder = function htmlBuilder(grp, options) {
|
12372
|
+
// Operators are handled in the TeXbook pg. 443-444, rule 13(a).
|
12373
|
+
var supGroup;
|
12374
|
+
var subGroup;
|
12375
|
+
var hasLimits = false;
|
12376
|
+
var group;
|
12377
|
+
var supSub = checkNodeType(grp, "supsub");
|
11858
12378
|
|
11859
|
-
|
11860
|
-
|
12379
|
+
if (supSub) {
|
12380
|
+
// If we have limits, supsub will pass us its group to handle. Pull
|
12381
|
+
// out the superscript and subscript and set the group to the op in
|
12382
|
+
// its base.
|
12383
|
+
supGroup = supSub.sup;
|
12384
|
+
subGroup = supSub.sub;
|
12385
|
+
group = assertNodeType(supSub.base, "operatorname");
|
12386
|
+
hasLimits = true;
|
12387
|
+
} else {
|
12388
|
+
group = assertNodeType(grp, "operatorname");
|
12389
|
+
}
|
11861
12390
|
|
11862
|
-
|
11863
|
-
|
11864
|
-
|
11865
|
-
|
11866
|
-
|
12391
|
+
var base;
|
12392
|
+
|
12393
|
+
if (group.body.length > 0) {
|
12394
|
+
var body = group.body.map(function (child) {
|
12395
|
+
// $FlowFixMe: Check if the node has a string `text` property.
|
12396
|
+
var childText = child.text;
|
12397
|
+
|
12398
|
+
if (typeof childText === "string") {
|
12399
|
+
return {
|
12400
|
+
type: "textord",
|
12401
|
+
mode: child.mode,
|
12402
|
+
text: childText
|
12403
|
+
};
|
12404
|
+
} else {
|
12405
|
+
return child;
|
11867
12406
|
}
|
12407
|
+
}); // Consolidate function names into symbol characters.
|
11868
12408
|
|
11869
|
-
|
11870
|
-
|
11871
|
-
|
12409
|
+
var expression = buildHTML_buildExpression(body, options.withFont("mathrm"), true);
|
12410
|
+
|
12411
|
+
for (var i = 0; i < expression.length; i++) {
|
12412
|
+
var child = expression[i];
|
12413
|
+
|
12414
|
+
if (child instanceof domTree_SymbolNode) {
|
12415
|
+
// Per amsopn package,
|
12416
|
+
// change minus to hyphen and \ast to asterisk
|
12417
|
+
child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
|
12418
|
+
}
|
11872
12419
|
}
|
11873
|
-
},
|
11874
|
-
mathmlBuilder: function mathmlBuilder(group, options) {
|
11875
|
-
// The steps taken here are similar to the html version.
|
11876
|
-
var expression = buildMathML_buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction?
|
11877
12420
|
|
11878
|
-
|
12421
|
+
base = buildCommon.makeSpan(["mop"], expression, options);
|
12422
|
+
} else {
|
12423
|
+
base = buildCommon.makeSpan(["mop"], [], options);
|
12424
|
+
}
|
11879
12425
|
|
11880
|
-
|
11881
|
-
|
11882
|
-
|
11883
|
-
|
11884
|
-
|
11885
|
-
|
11886
|
-
case "mi":
|
11887
|
-
case "mn":
|
11888
|
-
case "ms":
|
11889
|
-
case "mspace":
|
11890
|
-
case "mtext":
|
11891
|
-
break;
|
11892
|
-
// Do nothing yet.
|
12426
|
+
if (hasLimits) {
|
12427
|
+
return assembleSupSub_assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);
|
12428
|
+
} else {
|
12429
|
+
return base;
|
12430
|
+
}
|
12431
|
+
};
|
11893
12432
|
|
11894
|
-
|
11895
|
-
|
11896
|
-
|
12433
|
+
var operatorname_mathmlBuilder = function mathmlBuilder(group, options) {
|
12434
|
+
// The steps taken here are similar to the html version.
|
12435
|
+
var expression = buildMathML_buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction?
|
11897
12436
|
|
11898
|
-
|
11899
|
-
child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
|
11900
|
-
} else {
|
11901
|
-
isAllString = false;
|
11902
|
-
}
|
12437
|
+
var isAllString = true; // default
|
11903
12438
|
|
11904
|
-
|
12439
|
+
for (var i = 0; i < expression.length; i++) {
|
12440
|
+
var node = expression[i];
|
12441
|
+
|
12442
|
+
if (node instanceof mathMLTree.SpaceNode) {// Do nothing
|
12443
|
+
} else if (node instanceof mathMLTree.MathNode) {
|
12444
|
+
switch (node.type) {
|
12445
|
+
case "mi":
|
12446
|
+
case "mn":
|
12447
|
+
case "ms":
|
12448
|
+
case "mspace":
|
12449
|
+
case "mtext":
|
12450
|
+
break;
|
12451
|
+
// Do nothing yet.
|
12452
|
+
|
12453
|
+
case "mo":
|
12454
|
+
{
|
12455
|
+
var child = node.children[0];
|
12456
|
+
|
12457
|
+
if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {
|
12458
|
+
child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*");
|
12459
|
+
} else {
|
12460
|
+
isAllString = false;
|
11905
12461
|
}
|
11906
12462
|
|
11907
|
-
|
11908
|
-
|
11909
|
-
|
11910
|
-
|
11911
|
-
|
12463
|
+
break;
|
12464
|
+
}
|
12465
|
+
|
12466
|
+
default:
|
12467
|
+
isAllString = false;
|
11912
12468
|
}
|
12469
|
+
} else {
|
12470
|
+
isAllString = false;
|
11913
12471
|
}
|
12472
|
+
}
|
11914
12473
|
|
11915
|
-
|
11916
|
-
|
11917
|
-
|
11918
|
-
|
11919
|
-
|
11920
|
-
|
11921
|
-
|
12474
|
+
if (isAllString) {
|
12475
|
+
// Write a single TextNode instead of multiple nested tags.
|
12476
|
+
var word = expression.map(function (node) {
|
12477
|
+
return node.toText();
|
12478
|
+
}).join("");
|
12479
|
+
expression = [new mathMLTree.TextNode(word)];
|
12480
|
+
}
|
12481
|
+
|
12482
|
+
var identifier = new mathMLTree.MathNode("mi", expression);
|
12483
|
+
identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as ⁡
|
12484
|
+
// ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp
|
11922
12485
|
|
11923
|
-
|
11924
|
-
identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as ⁡
|
11925
|
-
// ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp
|
12486
|
+
var operator = new mathMLTree.MathNode("mo", [buildMathML_makeText("\u2061", "text")]);
|
11926
12487
|
|
11927
|
-
|
12488
|
+
if (group.parentIsSupSub) {
|
12489
|
+
return new mathMLTree.MathNode("mo", [identifier, operator]);
|
12490
|
+
} else {
|
11928
12491
|
return mathMLTree.newDocumentFragment([identifier, operator]);
|
11929
12492
|
}
|
12493
|
+
}; // \operatorname
|
12494
|
+
// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@
|
12495
|
+
|
12496
|
+
|
12497
|
+
defineFunction({
|
12498
|
+
type: "operatorname",
|
12499
|
+
names: ["\\operatorname", "\\operatorname*"],
|
12500
|
+
props: {
|
12501
|
+
numArgs: 1
|
12502
|
+
},
|
12503
|
+
handler: function handler(_ref, args) {
|
12504
|
+
var parser = _ref.parser,
|
12505
|
+
funcName = _ref.funcName;
|
12506
|
+
var body = args[0];
|
12507
|
+
return {
|
12508
|
+
type: "operatorname",
|
12509
|
+
mode: parser.mode,
|
12510
|
+
body: defineFunction_ordargument(body),
|
12511
|
+
alwaysHandleSupSub: funcName === "\\operatorname*",
|
12512
|
+
limits: false,
|
12513
|
+
parentIsSupSub: false
|
12514
|
+
};
|
12515
|
+
},
|
12516
|
+
htmlBuilder: operatorname_htmlBuilder,
|
12517
|
+
mathmlBuilder: operatorname_mathmlBuilder
|
11930
12518
|
});
|
11931
12519
|
// CONCATENATED MODULE: ./src/functions/ordgroup.js
|
11932
12520
|
|
@@ -11943,7 +12531,7 @@ defineFunctionBuilders({
|
|
11943
12531
|
return buildCommon.makeSpan(["mord"], buildHTML_buildExpression(group.body, options, true), options);
|
11944
12532
|
},
|
11945
12533
|
mathmlBuilder: function mathmlBuilder(group, options) {
|
11946
|
-
return buildExpressionRow(group.body, options);
|
12534
|
+
return buildExpressionRow(group.body, options, true);
|
11947
12535
|
}
|
11948
12536
|
});
|
11949
12537
|
// CONCATENATED MODULE: ./src/functions/overline.js
|
@@ -11974,6 +12562,7 @@ defineFunction({
|
|
11974
12562
|
|
11975
12563
|
var line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns
|
11976
12564
|
|
12565
|
+
var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;
|
11977
12566
|
var vlist = buildCommon.makeVList({
|
11978
12567
|
positionType: "firstBaseline",
|
11979
12568
|
children: [{
|
@@ -11981,13 +12570,13 @@ defineFunction({
|
|
11981
12570
|
elem: innerGroup
|
11982
12571
|
}, {
|
11983
12572
|
type: "kern",
|
11984
|
-
size: 3 *
|
12573
|
+
size: 3 * defaultRuleThickness
|
11985
12574
|
}, {
|
11986
12575
|
type: "elem",
|
11987
12576
|
elem: line
|
11988
12577
|
}, {
|
11989
12578
|
type: "kern",
|
11990
|
-
size:
|
12579
|
+
size: defaultRuleThickness
|
11991
12580
|
}]
|
11992
12581
|
}, options);
|
11993
12582
|
return buildCommon.makeSpan(["mord", "overline"], [vlist], options);
|
@@ -12110,77 +12699,6 @@ defineFunction({
|
|
12110
12699
|
return node;
|
12111
12700
|
}
|
12112
12701
|
});
|
12113
|
-
// CONCATENATED MODULE: ./src/functions/sizing.js
|
12114
|
-
|
12115
|
-
|
12116
|
-
|
12117
|
-
|
12118
|
-
|
12119
|
-
function sizingGroup(value, options, baseOptions) {
|
12120
|
-
var inner = buildHTML_buildExpression(value, options, false);
|
12121
|
-
var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize
|
12122
|
-
// manually. Handle nested size changes.
|
12123
|
-
|
12124
|
-
for (var i = 0; i < inner.length; i++) {
|
12125
|
-
var pos = inner[i].classes.indexOf("sizing");
|
12126
|
-
|
12127
|
-
if (pos < 0) {
|
12128
|
-
Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));
|
12129
|
-
} else if (inner[i].classes[pos + 1] === "reset-size" + options.size) {
|
12130
|
-
// This is a nested size change: e.g., inner[i] is the "b" in
|
12131
|
-
// `\Huge a \small b`. Override the old size (the `reset-` class)
|
12132
|
-
// but not the new size.
|
12133
|
-
inner[i].classes[pos + 1] = "reset-size" + baseOptions.size;
|
12134
|
-
}
|
12135
|
-
|
12136
|
-
inner[i].height *= multiplier;
|
12137
|
-
inner[i].depth *= multiplier;
|
12138
|
-
}
|
12139
|
-
|
12140
|
-
return buildCommon.makeFragment(inner);
|
12141
|
-
}
|
12142
|
-
var sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"];
|
12143
|
-
var sizing_htmlBuilder = function htmlBuilder(group, options) {
|
12144
|
-
// Handle sizing operators like \Huge. Real TeX doesn't actually allow
|
12145
|
-
// these functions inside of math expressions, so we do some special
|
12146
|
-
// handling.
|
12147
|
-
var newOptions = options.havingSize(group.size);
|
12148
|
-
return sizingGroup(group.body, newOptions, options);
|
12149
|
-
};
|
12150
|
-
defineFunction({
|
12151
|
-
type: "sizing",
|
12152
|
-
names: sizeFuncs,
|
12153
|
-
props: {
|
12154
|
-
numArgs: 0,
|
12155
|
-
allowedInText: true
|
12156
|
-
},
|
12157
|
-
handler: function handler(_ref, args) {
|
12158
|
-
var breakOnTokenText = _ref.breakOnTokenText,
|
12159
|
-
funcName = _ref.funcName,
|
12160
|
-
parser = _ref.parser;
|
12161
|
-
var body = parser.parseExpression(false, breakOnTokenText);
|
12162
|
-
return {
|
12163
|
-
type: "sizing",
|
12164
|
-
mode: parser.mode,
|
12165
|
-
// Figure out what size to use based on the list of functions above
|
12166
|
-
size: sizeFuncs.indexOf(funcName) + 1,
|
12167
|
-
body: body
|
12168
|
-
};
|
12169
|
-
},
|
12170
|
-
htmlBuilder: sizing_htmlBuilder,
|
12171
|
-
mathmlBuilder: function mathmlBuilder(group, options) {
|
12172
|
-
var newOptions = options.havingSize(group.size);
|
12173
|
-
var inner = buildMathML_buildExpression(group.body, newOptions);
|
12174
|
-
var node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size
|
12175
|
-
// changes, because we don't keep state of what style we're currently
|
12176
|
-
// in, so we can't reset the size to normal before changing it. Now
|
12177
|
-
// that we're passing an options parameter we should be able to fix
|
12178
|
-
// this.
|
12179
|
-
|
12180
|
-
node.setAttribute("mathsize", newOptions.sizeMultiplier + "em");
|
12181
|
-
return node;
|
12182
|
-
}
|
12183
|
-
});
|
12184
12702
|
// CONCATENATED MODULE: ./src/functions/raisebox.js
|
12185
12703
|
|
12186
12704
|
|
@@ -12195,7 +12713,7 @@ defineFunction({
|
|
12195
12713
|
names: ["\\raisebox"],
|
12196
12714
|
props: {
|
12197
12715
|
numArgs: 2,
|
12198
|
-
argTypes: ["size", "
|
12716
|
+
argTypes: ["size", "hbox"],
|
12199
12717
|
allowedInText: true
|
12200
12718
|
},
|
12201
12719
|
handler: function handler(_ref, args) {
|
@@ -12210,21 +12728,7 @@ defineFunction({
|
|
12210
12728
|
};
|
12211
12729
|
},
|
12212
12730
|
htmlBuilder: function htmlBuilder(group, options) {
|
12213
|
-
var
|
12214
|
-
type: "text",
|
12215
|
-
mode: group.mode,
|
12216
|
-
body: defineFunction_ordargument(group.body),
|
12217
|
-
font: "mathrm" // simulate \textrm
|
12218
|
-
|
12219
|
-
};
|
12220
|
-
var sizedText = {
|
12221
|
-
type: "sizing",
|
12222
|
-
mode: group.mode,
|
12223
|
-
body: [text],
|
12224
|
-
size: 6 // simulate \normalsize
|
12225
|
-
|
12226
|
-
};
|
12227
|
-
var body = sizing_htmlBuilder(sizedText, options);
|
12731
|
+
var body = buildHTML_buildGroup(group.body, options);
|
12228
12732
|
var dy = units_calculateSize(group.dy, options);
|
12229
12733
|
return buildCommon.makeVList({
|
12230
12734
|
positionType: "shift",
|
@@ -12312,6 +12816,77 @@ defineFunction({
|
|
12312
12816
|
return wrapper;
|
12313
12817
|
}
|
12314
12818
|
});
|
12819
|
+
// CONCATENATED MODULE: ./src/functions/sizing.js
|
12820
|
+
|
12821
|
+
|
12822
|
+
|
12823
|
+
|
12824
|
+
|
12825
|
+
function sizingGroup(value, options, baseOptions) {
|
12826
|
+
var inner = buildHTML_buildExpression(value, options, false);
|
12827
|
+
var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize
|
12828
|
+
// manually. Handle nested size changes.
|
12829
|
+
|
12830
|
+
for (var i = 0; i < inner.length; i++) {
|
12831
|
+
var pos = inner[i].classes.indexOf("sizing");
|
12832
|
+
|
12833
|
+
if (pos < 0) {
|
12834
|
+
Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));
|
12835
|
+
} else if (inner[i].classes[pos + 1] === "reset-size" + options.size) {
|
12836
|
+
// This is a nested size change: e.g., inner[i] is the "b" in
|
12837
|
+
// `\Huge a \small b`. Override the old size (the `reset-` class)
|
12838
|
+
// but not the new size.
|
12839
|
+
inner[i].classes[pos + 1] = "reset-size" + baseOptions.size;
|
12840
|
+
}
|
12841
|
+
|
12842
|
+
inner[i].height *= multiplier;
|
12843
|
+
inner[i].depth *= multiplier;
|
12844
|
+
}
|
12845
|
+
|
12846
|
+
return buildCommon.makeFragment(inner);
|
12847
|
+
}
|
12848
|
+
var sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"];
|
12849
|
+
var sizing_htmlBuilder = function htmlBuilder(group, options) {
|
12850
|
+
// Handle sizing operators like \Huge. Real TeX doesn't actually allow
|
12851
|
+
// these functions inside of math expressions, so we do some special
|
12852
|
+
// handling.
|
12853
|
+
var newOptions = options.havingSize(group.size);
|
12854
|
+
return sizingGroup(group.body, newOptions, options);
|
12855
|
+
};
|
12856
|
+
defineFunction({
|
12857
|
+
type: "sizing",
|
12858
|
+
names: sizeFuncs,
|
12859
|
+
props: {
|
12860
|
+
numArgs: 0,
|
12861
|
+
allowedInText: true
|
12862
|
+
},
|
12863
|
+
handler: function handler(_ref, args) {
|
12864
|
+
var breakOnTokenText = _ref.breakOnTokenText,
|
12865
|
+
funcName = _ref.funcName,
|
12866
|
+
parser = _ref.parser;
|
12867
|
+
var body = parser.parseExpression(false, breakOnTokenText);
|
12868
|
+
return {
|
12869
|
+
type: "sizing",
|
12870
|
+
mode: parser.mode,
|
12871
|
+
// Figure out what size to use based on the list of functions above
|
12872
|
+
size: sizeFuncs.indexOf(funcName) + 1,
|
12873
|
+
body: body
|
12874
|
+
};
|
12875
|
+
},
|
12876
|
+
htmlBuilder: sizing_htmlBuilder,
|
12877
|
+
mathmlBuilder: function mathmlBuilder(group, options) {
|
12878
|
+
var newOptions = options.havingSize(group.size);
|
12879
|
+
var inner = buildMathML_buildExpression(group.body, newOptions);
|
12880
|
+
var node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size
|
12881
|
+
// changes, because we don't keep state of what style we're currently
|
12882
|
+
// in, so we can't reset the size to normal before changing it. Now
|
12883
|
+
// that we're passing an options parameter we should be able to fix
|
12884
|
+
// this.
|
12885
|
+
|
12886
|
+
node.setAttribute("mathsize", newOptions.sizeMultiplier + "em");
|
12887
|
+
return node;
|
12888
|
+
}
|
12889
|
+
});
|
12315
12890
|
// CONCATENATED MODULE: ./src/functions/smash.js
|
12316
12891
|
// smash, with optional [tb], as in AMS
|
12317
12892
|
|
@@ -12587,15 +13162,7 @@ defineFunction({
|
|
12587
13162
|
},
|
12588
13163
|
mathmlBuilder: function mathmlBuilder(group, options) {
|
12589
13164
|
// Figure out what style we're changing to.
|
12590
|
-
|
12591
|
-
// This will be easier of handling of styling nodes is in the same file.
|
12592
|
-
var styleMap = {
|
12593
|
-
"display": src_Style.DISPLAY,
|
12594
|
-
"text": src_Style.TEXT,
|
12595
|
-
"script": src_Style.SCRIPT,
|
12596
|
-
"scriptscript": src_Style.SCRIPTSCRIPT
|
12597
|
-
};
|
12598
|
-
var newStyle = styleMap[group.style];
|
13165
|
+
var newStyle = styling_styleMap[group.style];
|
12599
13166
|
var newOptions = options.havingStyle(newStyle);
|
12600
13167
|
var inner = buildMathML_buildExpression(group.body, newOptions);
|
12601
13168
|
var node = new mathMLTree.MathNode("mstyle", inner);
|
@@ -12625,6 +13192,7 @@ defineFunction({
|
|
12625
13192
|
|
12626
13193
|
|
12627
13194
|
|
13195
|
+
|
12628
13196
|
/**
|
12629
13197
|
* Sometimes, groups perform special rules when they have superscripts or
|
12630
13198
|
* subscripts attached to them. This function lets the `supsub` group know that
|
@@ -12642,6 +13210,10 @@ var supsub_htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {
|
|
12642
13210
|
// (e.g. `\displaystyle\sum_2^3`)
|
12643
13211
|
var delegate = base.limits && (options.style.size === src_Style.DISPLAY.size || base.alwaysHandleSupSub);
|
12644
13212
|
return delegate ? op_htmlBuilder : null;
|
13213
|
+
} else if (base.type === "operatorname") {
|
13214
|
+
var _delegate = base.alwaysHandleSupSub && (options.style.size === src_Style.DISPLAY.size || base.limits);
|
13215
|
+
|
13216
|
+
return _delegate ? operatorname_htmlBuilder : null;
|
12645
13217
|
} else if (base.type === "accent") {
|
12646
13218
|
return utils.isCharacterBox(base.base) ? accent_htmlBuilder : null;
|
12647
13219
|
} else if (base.type === "horizBrace") {
|
@@ -12812,7 +13384,7 @@ defineFunctionBuilders({
|
|
12812
13384
|
}
|
12813
13385
|
}
|
12814
13386
|
|
12815
|
-
if (group.base && group.base.type === "op") {
|
13387
|
+
if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) {
|
12816
13388
|
group.base.parentIsSupSub = true;
|
12817
13389
|
}
|
12818
13390
|
|
@@ -12835,6 +13407,8 @@ defineFunctionBuilders({
|
|
12835
13407
|
|
12836
13408
|
if (base && base.type === "op" && base.limits && (options.style === src_Style.DISPLAY || base.alwaysHandleSupSub)) {
|
12837
13409
|
nodeType = "mover";
|
13410
|
+
} else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === src_Style.DISPLAY)) {
|
13411
|
+
nodeType = "mover";
|
12838
13412
|
} else {
|
12839
13413
|
nodeType = "msup";
|
12840
13414
|
}
|
@@ -12843,6 +13417,8 @@ defineFunctionBuilders({
|
|
12843
13417
|
|
12844
13418
|
if (_base && _base.type === "op" && _base.limits && (options.style === src_Style.DISPLAY || _base.alwaysHandleSupSub)) {
|
12845
13419
|
nodeType = "munder";
|
13420
|
+
} else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options.style === src_Style.DISPLAY)) {
|
13421
|
+
nodeType = "munder";
|
12846
13422
|
} else {
|
12847
13423
|
nodeType = "msub";
|
12848
13424
|
}
|
@@ -12851,6 +13427,8 @@ defineFunctionBuilders({
|
|
12851
13427
|
|
12852
13428
|
if (_base2 && _base2.type === "op" && _base2.limits && options.style === src_Style.DISPLAY) {
|
12853
13429
|
nodeType = "munderover";
|
13430
|
+
} else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options.style === src_Style.DISPLAY || _base2.limits)) {
|
13431
|
+
nodeType = "munderover";
|
12854
13432
|
} else {
|
12855
13433
|
nodeType = "msubsup";
|
12856
13434
|
}
|
@@ -13083,8 +13661,7 @@ defineFunction({
|
|
13083
13661
|
numArgs: 1,
|
13084
13662
|
argTypes: ["text"],
|
13085
13663
|
greediness: 2,
|
13086
|
-
allowedInText: true
|
13087
|
-
consumeMode: "text"
|
13664
|
+
allowedInText: true
|
13088
13665
|
},
|
13089
13666
|
handler: function handler(_ref, args) {
|
13090
13667
|
var parser = _ref.parser,
|
@@ -13135,18 +13712,19 @@ defineFunction({
|
|
13135
13712
|
|
13136
13713
|
var line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns
|
13137
13714
|
|
13715
|
+
var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;
|
13138
13716
|
var vlist = buildCommon.makeVList({
|
13139
13717
|
positionType: "top",
|
13140
13718
|
positionData: innerGroup.height,
|
13141
13719
|
children: [{
|
13142
13720
|
type: "kern",
|
13143
|
-
size:
|
13721
|
+
size: defaultRuleThickness
|
13144
13722
|
}, {
|
13145
13723
|
type: "elem",
|
13146
13724
|
elem: line
|
13147
13725
|
}, {
|
13148
13726
|
type: "kern",
|
13149
|
-
size: 3 *
|
13727
|
+
size: 3 * defaultRuleThickness
|
13150
13728
|
}, {
|
13151
13729
|
type: "elem",
|
13152
13730
|
elem: innerGroup
|
@@ -13236,8 +13814,7 @@ var functions = _functions;
|
|
13236
13814
|
|
13237
13815
|
|
13238
13816
|
|
13239
|
-
|
13240
|
-
// import "./functions/includegraphics";
|
13817
|
+
|
13241
13818
|
|
13242
13819
|
|
13243
13820
|
|
@@ -13308,7 +13885,8 @@ combiningDiacriticalMarkString + "*") + // ...plus accents
|
|
13308
13885
|
"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + ( // surrogate pair
|
13309
13886
|
combiningDiacriticalMarkString + "*") + // ...plus accents
|
13310
13887
|
"|\\\\verb\\*([^]).*?\\3" + // \verb*
|
13311
|
-
"|\\\\verb([^*a-zA-Z]).*?\\4" +
|
13888
|
+
"|\\\\verb([^*a-zA-Z]).*?\\4" + // \verb unstarred
|
13889
|
+
"|\\\\operatorname\\*" + ( // \operatorname*
|
13312
13890
|
"|" + controlWordWhitespaceRegexString) + ( // \macroName + spaces
|
13313
13891
|
"|" + controlSymbolRegexString + ")"); // \\, \', etc.
|
13314
13892
|
|
@@ -13911,7 +14489,9 @@ defineMacro("\\varSigma", "\\mathit{\\Sigma}");
|
|
13911
14489
|
defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}");
|
13912
14490
|
defineMacro("\\varPhi", "\\mathit{\\Phi}");
|
13913
14491
|
defineMacro("\\varPsi", "\\mathit{\\Psi}");
|
13914
|
-
defineMacro("\\varOmega", "\\mathit{\\Omega}");
|
14492
|
+
defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray}
|
14493
|
+
|
14494
|
+
defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript
|
13915
14495
|
// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax}
|
13916
14496
|
|
13917
14497
|
defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}}
|
@@ -14128,10 +14708,11 @@ defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5
|
|
14128
14708
|
defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");
|
14129
14709
|
defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}");
|
14130
14710
|
defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); // \pmb -- A simulation of bold.
|
14131
|
-
//
|
14132
|
-
//
|
14711
|
+
// The version in ambsy.sty works by typesetting three copies of the argument
|
14712
|
+
// with small offsets. We use two copies. We omit the vertical offset because
|
14713
|
+
// of rendering problems that makeVList encounters in Safari.
|
14133
14714
|
|
14134
|
-
defineMacro("\\pmb", "\\html@mathml{
|
14715
|
+
defineMacro("\\pmb", "\\html@mathml{" + "\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}" + "{\\mathbf{#1}}"); //////////////////////////////////////////////////////////////////////
|
14135
14716
|
// LaTeX source2e
|
14136
14717
|
// \\ defaults to \newline, but changes to \cr within array environment
|
14137
14718
|
|
@@ -14152,13 +14733,13 @@ defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5e
|
|
14152
14733
|
// \TeX}
|
14153
14734
|
// This code aligns the top of the A with the T (from the perspective of TeX's
|
14154
14735
|
// boxes, though visually the A appears to extend above slightly).
|
14155
|
-
// We compute the corresponding \raisebox when A is rendered
|
14156
|
-
//
|
14736
|
+
// We compute the corresponding \raisebox when A is rendered in \normalsize
|
14737
|
+
// \scriptstyle, which has a scale factor of 0.7 (see Options.js).
|
14157
14738
|
|
14158
14739
|
var latexRaiseA = fontMetricsData['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular']["A".charCodeAt(0)][1] + "em";
|
14159
|
-
defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\
|
14740
|
+
defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo
|
14160
14741
|
|
14161
|
-
defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\
|
14742
|
+
defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace}
|
14162
14743
|
// \def\@hspace#1{\hskip #1\relax}
|
14163
14744
|
// \def\@hspacer#1{\vrule \@width\z@\nobreak
|
14164
14745
|
// \hskip #1\hskip \z@skip}
|
@@ -14236,8 +14817,8 @@ defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentc
|
|
14236
14817
|
defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts
|
14237
14818
|
|
14238
14819
|
defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");
|
14239
|
-
defineMacro("\\limsup", "\\DOTSB\\
|
14240
|
-
defineMacro("\\liminf", "\\DOTSB\\
|
14820
|
+
defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}");
|
14821
|
+
defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); //////////////////////////////////////////////////////////////////////
|
14241
14822
|
// MathML alternates for KaTeX glyphs in the Unicode private area
|
14242
14823
|
|
14243
14824
|
defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}");
|
@@ -14345,15 +14926,16 @@ defineMacro("\\Zeta", "\\mathrm{Z}"); //////////////////////////////////////////
|
|
14345
14926
|
// statmath.sty
|
14346
14927
|
// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf
|
14347
14928
|
|
14348
|
-
defineMacro("\\argmin", "\\DOTSB\\
|
14349
|
-
defineMacro("\\argmax", "\\DOTSB\\
|
14929
|
+
defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}");
|
14930
|
+
defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}");
|
14931
|
+
defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); // Custom Khan Academy colors, should be moved to an optional package
|
14350
14932
|
|
14351
14933
|
defineMacro("\\blue", "\\textcolor{##6495ed}{#1}");
|
14352
14934
|
defineMacro("\\orange", "\\textcolor{##ffa500}{#1}");
|
14353
14935
|
defineMacro("\\pink", "\\textcolor{##ff00af}{#1}");
|
14354
14936
|
defineMacro("\\red", "\\textcolor{##df0030}{#1}");
|
14355
14937
|
defineMacro("\\green", "\\textcolor{##28ae7b}{#1}");
|
14356
|
-
defineMacro("\\gray", "\\textcolor{gray}{
|
14938
|
+
defineMacro("\\gray", "\\textcolor{gray}{#1}");
|
14357
14939
|
defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}");
|
14358
14940
|
defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}");
|
14359
14941
|
defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}");
|
@@ -15509,7 +16091,6 @@ function () {
|
|
15509
16091
|
|
15510
16092
|
|
15511
16093
|
|
15512
|
-
|
15513
16094
|
/**
|
15514
16095
|
* This file contains the parser used to parse out a TeX expression from the
|
15515
16096
|
* input. Since TeX isn't context-free, standard parsers don't work particularly
|
@@ -15571,8 +16152,8 @@ function () {
|
|
15571
16152
|
consume = true;
|
15572
16153
|
}
|
15573
16154
|
|
15574
|
-
if (this.
|
15575
|
-
throw new src_ParseError("Expected '" + text + "', got '" + this.
|
16155
|
+
if (this.fetch().text !== text) {
|
16156
|
+
throw new src_ParseError("Expected '" + text + "', got '" + this.fetch().text + "'", this.fetch());
|
15576
16157
|
}
|
15577
16158
|
|
15578
16159
|
if (consume) {
|
@@ -15580,13 +16161,26 @@ function () {
|
|
15580
16161
|
}
|
15581
16162
|
}
|
15582
16163
|
/**
|
15583
|
-
*
|
15584
|
-
* and fetches the one after that as the new look ahead.
|
16164
|
+
* Discards the current lookahead token, considering it consumed.
|
15585
16165
|
*/
|
15586
16166
|
;
|
15587
16167
|
|
15588
16168
|
_proto.consume = function consume() {
|
15589
|
-
this.nextToken =
|
16169
|
+
this.nextToken = null;
|
16170
|
+
}
|
16171
|
+
/**
|
16172
|
+
* Return the current lookahead token, or if there isn't one (at the
|
16173
|
+
* beginning, or if the previous lookahead token was consume()d),
|
16174
|
+
* fetch the next token as the new lookahead token and return it.
|
16175
|
+
*/
|
16176
|
+
;
|
16177
|
+
|
16178
|
+
_proto.fetch = function fetch() {
|
16179
|
+
if (this.nextToken == null) {
|
16180
|
+
this.nextToken = this.gullet.expandNextToken();
|
16181
|
+
}
|
16182
|
+
|
16183
|
+
return this.nextToken;
|
15590
16184
|
}
|
15591
16185
|
/**
|
15592
16186
|
* Switches between "text" and "math" modes.
|
@@ -15614,10 +16208,9 @@ function () {
|
|
15614
16208
|
} // Try to parse the input
|
15615
16209
|
|
15616
16210
|
|
15617
|
-
this.consume();
|
15618
16211
|
var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end
|
15619
16212
|
|
15620
|
-
this.expect("EOF"
|
16213
|
+
this.expect("EOF"); // End the group namespace for the expression
|
15621
16214
|
|
15622
16215
|
this.gullet.endGroup();
|
15623
16216
|
return parse;
|
@@ -15633,7 +16226,7 @@ function () {
|
|
15633
16226
|
this.consumeSpaces();
|
15634
16227
|
}
|
15635
16228
|
|
15636
|
-
var lex = this.
|
16229
|
+
var lex = this.fetch();
|
15637
16230
|
|
15638
16231
|
if (Parser.endOfExpression.indexOf(lex.text) !== -1) {
|
15639
16232
|
break;
|
@@ -15733,12 +16326,10 @@ function () {
|
|
15733
16326
|
* Handle a subscript or superscript with nice errors.
|
15734
16327
|
*/
|
15735
16328
|
_proto.handleSupSubscript = function handleSupSubscript(name) {
|
15736
|
-
var symbolToken = this.
|
16329
|
+
var symbolToken = this.fetch();
|
15737
16330
|
var symbol = symbolToken.text;
|
15738
16331
|
this.consume();
|
15739
|
-
this.
|
15740
|
-
|
15741
|
-
var group = this.parseGroup(name, false, Parser.SUPSUB_GREEDINESS);
|
16332
|
+
var group = this.parseGroup(name, false, Parser.SUPSUB_GREEDINESS, undefined, undefined, true); // ignore spaces before sup/subscript argument
|
15742
16333
|
|
15743
16334
|
if (!group) {
|
15744
16335
|
throw new src_ParseError("Expected group after '" + symbol + "'", symbolToken);
|
@@ -15752,8 +16343,7 @@ function () {
|
|
15752
16343
|
*/
|
15753
16344
|
;
|
15754
16345
|
|
15755
|
-
_proto.
|
15756
|
-
var text = this.nextToken.text;
|
16346
|
+
_proto.formatUnsupportedCmd = function formatUnsupportedCmd(text) {
|
15757
16347
|
var textordArray = [];
|
15758
16348
|
|
15759
16349
|
for (var i = 0; i < text.length; i++) {
|
@@ -15775,7 +16365,6 @@ function () {
|
|
15775
16365
|
color: this.settings.errorColor,
|
15776
16366
|
body: [textNode]
|
15777
16367
|
};
|
15778
|
-
this.consume();
|
15779
16368
|
return colorNode;
|
15780
16369
|
}
|
15781
16370
|
/**
|
@@ -15800,7 +16389,7 @@ function () {
|
|
15800
16389
|
// Guaranteed in math mode, so eat any spaces first.
|
15801
16390
|
this.consumeSpaces(); // Lex the first token
|
15802
16391
|
|
15803
|
-
var lex = this.
|
16392
|
+
var lex = this.fetch();
|
15804
16393
|
|
15805
16394
|
if (lex.text === "\\limits" || lex.text === "\\nolimits") {
|
15806
16395
|
// We got a limit control
|
@@ -15811,7 +16400,15 @@ function () {
|
|
15811
16400
|
opNode.limits = limits;
|
15812
16401
|
opNode.alwaysHandleSupSub = true;
|
15813
16402
|
} else {
|
15814
|
-
|
16403
|
+
opNode = checkNodeType(base, "operatorname");
|
16404
|
+
|
16405
|
+
if (opNode && opNode.alwaysHandleSupSub) {
|
16406
|
+
var _limits = lex.text === "\\limits";
|
16407
|
+
|
16408
|
+
opNode.limits = _limits;
|
16409
|
+
} else {
|
16410
|
+
throw new src_ParseError("Limit controls must follow a math operator", lex);
|
16411
|
+
}
|
15815
16412
|
}
|
15816
16413
|
|
15817
16414
|
this.consume();
|
@@ -15844,7 +16441,7 @@ function () {
|
|
15844
16441
|
var primes = [prime];
|
15845
16442
|
this.consume(); // Keep lexing tokens until we get something that's not a prime
|
15846
16443
|
|
15847
|
-
while (this.
|
16444
|
+
while (this.fetch().text === "'") {
|
15848
16445
|
// For each one, add another prime to the list
|
15849
16446
|
primes.push(prime);
|
15850
16447
|
this.consume();
|
@@ -15852,7 +16449,7 @@ function () {
|
|
15852
16449
|
// superscript in with the primes.
|
15853
16450
|
|
15854
16451
|
|
15855
|
-
if (this.
|
16452
|
+
if (this.fetch().text === "^") {
|
15856
16453
|
primes.push(this.handleSupSubscript("superscript"));
|
15857
16454
|
} // Put everything into an ordgroup as the superscript
|
15858
16455
|
|
@@ -15891,7 +16488,7 @@ function () {
|
|
15891
16488
|
|
15892
16489
|
_proto.parseFunction = function parseFunction(breakOnTokenText, name, // For error reporting.
|
15893
16490
|
greediness) {
|
15894
|
-
var token = this.
|
16491
|
+
var token = this.fetch();
|
15895
16492
|
var func = token.text;
|
15896
16493
|
var funcData = src_functions[func];
|
15897
16494
|
|
@@ -15899,29 +16496,14 @@ function () {
|
|
15899
16496
|
return null;
|
15900
16497
|
}
|
15901
16498
|
|
16499
|
+
this.consume(); // consume command token
|
16500
|
+
|
15902
16501
|
if (greediness != null && funcData.greediness <= greediness) {
|
15903
16502
|
throw new src_ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token);
|
15904
16503
|
} else if (this.mode === "text" && !funcData.allowedInText) {
|
15905
16504
|
throw new src_ParseError("Can't use function '" + func + "' in text mode", token);
|
15906
16505
|
} else if (this.mode === "math" && funcData.allowedInMath === false) {
|
15907
16506
|
throw new src_ParseError("Can't use function '" + func + "' in math mode", token);
|
15908
|
-
} // hyperref package sets the catcode of % as an active character
|
15909
|
-
|
15910
|
-
|
15911
|
-
if (funcData.argTypes && funcData.argTypes[0] === "url") {
|
15912
|
-
this.gullet.lexer.setCatcode("%", 13);
|
15913
|
-
} // Consume the command token after possibly switching to the
|
15914
|
-
// mode specified by the function (for instant mode switching),
|
15915
|
-
// and then immediately switch back.
|
15916
|
-
|
15917
|
-
|
15918
|
-
if (funcData.consumeMode) {
|
15919
|
-
var oldMode = this.mode;
|
15920
|
-
this.switchMode(funcData.consumeMode);
|
15921
|
-
this.consume();
|
15922
|
-
this.switchMode(oldMode);
|
15923
|
-
} else {
|
15924
|
-
this.consume();
|
15925
16507
|
}
|
15926
16508
|
|
15927
16509
|
var _this$parseArguments = this.parseArguments(func, funcData),
|
@@ -15977,22 +16559,14 @@ function () {
|
|
15977
16559
|
// put spaces between the arguments (e.g., ‘\row x n’), because
|
15978
16560
|
// TeX doesn’t use single spaces as undelimited arguments."
|
15979
16561
|
|
15980
|
-
|
15981
|
-
this.consumeSpaces();
|
15982
|
-
} // Also consume leading spaces in math mode, as parseSymbol
|
16562
|
+
var consumeSpaces = i > 0 && !isOptional || // Also consume leading spaces in math mode, as parseSymbol
|
15983
16563
|
// won't know what to do with them. This can only happen with
|
15984
16564
|
// macros, e.g. \frac\foo\foo where \foo expands to a space symbol.
|
15985
|
-
// In LaTeX, the \foo's get treated as (blank) arguments
|
16565
|
+
// In LaTeX, the \foo's get treated as (blank) arguments.
|
15986
16566
|
// In KaTeX, for now, both spaces will get consumed.
|
15987
16567
|
// TODO(edemaine)
|
15988
|
-
|
15989
|
-
|
15990
|
-
if (i === 0 && !isOptional && this.mode === "math") {
|
15991
|
-
this.consumeSpaces();
|
15992
|
-
}
|
15993
|
-
|
15994
|
-
var nextToken = this.nextToken;
|
15995
|
-
var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional, baseGreediness);
|
16568
|
+
i === 0 && !isOptional && this.mode === "math";
|
16569
|
+
var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional, baseGreediness, consumeSpaces);
|
15996
16570
|
|
15997
16571
|
if (!arg) {
|
15998
16572
|
if (isOptional) {
|
@@ -16000,7 +16574,7 @@ function () {
|
|
16000
16574
|
continue;
|
16001
16575
|
}
|
16002
16576
|
|
16003
|
-
throw new src_ParseError("Expected group after '" + func + "'",
|
16577
|
+
throw new src_ParseError("Expected group after '" + func + "'", this.fetch());
|
16004
16578
|
}
|
16005
16579
|
|
16006
16580
|
(isOptional ? optArgs : args).push(arg);
|
@@ -16016,24 +16590,56 @@ function () {
|
|
16016
16590
|
*/
|
16017
16591
|
;
|
16018
16592
|
|
16019
|
-
_proto.parseGroupOfType = function parseGroupOfType(name, type, optional, greediness) {
|
16593
|
+
_proto.parseGroupOfType = function parseGroupOfType(name, type, optional, greediness, consumeSpaces) {
|
16020
16594
|
switch (type) {
|
16021
16595
|
case "color":
|
16596
|
+
if (consumeSpaces) {
|
16597
|
+
this.consumeSpaces();
|
16598
|
+
}
|
16599
|
+
|
16022
16600
|
return this.parseColorGroup(optional);
|
16023
16601
|
|
16024
16602
|
case "size":
|
16603
|
+
if (consumeSpaces) {
|
16604
|
+
this.consumeSpaces();
|
16605
|
+
}
|
16606
|
+
|
16025
16607
|
return this.parseSizeGroup(optional);
|
16026
16608
|
|
16027
16609
|
case "url":
|
16028
|
-
return this.parseUrlGroup(optional);
|
16610
|
+
return this.parseUrlGroup(optional, consumeSpaces);
|
16029
16611
|
|
16030
16612
|
case "math":
|
16031
16613
|
case "text":
|
16032
|
-
return this.parseGroup(name, optional, greediness, undefined, type);
|
16614
|
+
return this.parseGroup(name, optional, greediness, undefined, type, consumeSpaces);
|
16615
|
+
|
16616
|
+
case "hbox":
|
16617
|
+
{
|
16618
|
+
// hbox argument type wraps the argument in the equivalent of
|
16619
|
+
// \hbox, which is like \text but switching to \textstyle size.
|
16620
|
+
var group = this.parseGroup(name, optional, greediness, undefined, "text", consumeSpaces);
|
16621
|
+
|
16622
|
+
if (!group) {
|
16623
|
+
return group;
|
16624
|
+
}
|
16625
|
+
|
16626
|
+
var styledGroup = {
|
16627
|
+
type: "styling",
|
16628
|
+
mode: group.mode,
|
16629
|
+
body: [group],
|
16630
|
+
style: "text" // simulate \textstyle
|
16631
|
+
|
16632
|
+
};
|
16633
|
+
return styledGroup;
|
16634
|
+
}
|
16033
16635
|
|
16034
16636
|
case "raw":
|
16035
16637
|
{
|
16036
|
-
if (
|
16638
|
+
if (consumeSpaces) {
|
16639
|
+
this.consumeSpaces();
|
16640
|
+
}
|
16641
|
+
|
16642
|
+
if (optional && this.fetch().text === "{") {
|
16037
16643
|
return null;
|
16038
16644
|
}
|
16039
16645
|
|
@@ -16046,22 +16652,26 @@ function () {
|
|
16046
16652
|
string: token.text
|
16047
16653
|
};
|
16048
16654
|
} else {
|
16049
|
-
throw new src_ParseError("Expected raw group", this.
|
16655
|
+
throw new src_ParseError("Expected raw group", this.fetch());
|
16050
16656
|
}
|
16051
16657
|
}
|
16052
16658
|
|
16053
16659
|
case "original":
|
16054
16660
|
case null:
|
16055
16661
|
case undefined:
|
16056
|
-
return this.parseGroup(name, optional, greediness);
|
16662
|
+
return this.parseGroup(name, optional, greediness, undefined, undefined, consumeSpaces);
|
16057
16663
|
|
16058
16664
|
default:
|
16059
|
-
throw new src_ParseError("Unknown group type as " + name, this.
|
16665
|
+
throw new src_ParseError("Unknown group type as " + name, this.fetch());
|
16060
16666
|
}
|
16061
|
-
}
|
16667
|
+
}
|
16668
|
+
/**
|
16669
|
+
* Discard any space tokens, fetching the next non-space token.
|
16670
|
+
*/
|
16671
|
+
;
|
16062
16672
|
|
16063
16673
|
_proto.consumeSpaces = function consumeSpaces() {
|
16064
|
-
while (this.
|
16674
|
+
while (this.fetch().text === " ") {
|
16065
16675
|
this.consume();
|
16066
16676
|
}
|
16067
16677
|
}
|
@@ -16075,17 +16685,14 @@ function () {
|
|
16075
16685
|
optional, raw) {
|
16076
16686
|
var groupBegin = optional ? "[" : "{";
|
16077
16687
|
var groupEnd = optional ? "]" : "}";
|
16078
|
-
var
|
16688
|
+
var beginToken = this.fetch();
|
16079
16689
|
|
16080
|
-
if (
|
16690
|
+
if (beginToken.text !== groupBegin) {
|
16081
16691
|
if (optional) {
|
16082
16692
|
return null;
|
16083
|
-
} else if (raw &&
|
16084
|
-
// allow a single character in raw string group
|
16085
|
-
this.gullet.lexer.setCatcode("%", 14); // reset the catcode of %
|
16086
|
-
|
16693
|
+
} else if (raw && beginToken.text !== "EOF" && /[^{}[\]]/.test(beginToken.text)) {
|
16087
16694
|
this.consume();
|
16088
|
-
return
|
16695
|
+
return beginToken;
|
16089
16696
|
}
|
16090
16697
|
}
|
16091
16698
|
|
@@ -16093,13 +16700,14 @@ function () {
|
|
16093
16700
|
this.mode = "text";
|
16094
16701
|
this.expect(groupBegin);
|
16095
16702
|
var str = "";
|
16096
|
-
var firstToken = this.
|
16703
|
+
var firstToken = this.fetch();
|
16097
16704
|
var nested = 0; // allow nested braces in raw string group
|
16098
16705
|
|
16099
16706
|
var lastToken = firstToken;
|
16707
|
+
var nextToken;
|
16100
16708
|
|
16101
|
-
while (
|
16102
|
-
switch (
|
16709
|
+
while ((nextToken = this.fetch()).text !== groupEnd || raw && nested > 0) {
|
16710
|
+
switch (nextToken.text) {
|
16103
16711
|
case "EOF":
|
16104
16712
|
throw new src_ParseError("Unexpected end of input in " + modeName, firstToken.range(lastToken, str));
|
16105
16713
|
|
@@ -16112,15 +16720,13 @@ function () {
|
|
16112
16720
|
break;
|
16113
16721
|
}
|
16114
16722
|
|
16115
|
-
lastToken =
|
16723
|
+
lastToken = nextToken;
|
16116
16724
|
str += lastToken.text;
|
16117
16725
|
this.consume();
|
16118
16726
|
}
|
16119
16727
|
|
16120
|
-
this.mode = outerMode;
|
16121
|
-
this.gullet.lexer.setCatcode("%", 14); // reset the catcode of %
|
16122
|
-
|
16123
16728
|
this.expect(groupEnd);
|
16729
|
+
this.mode = outerMode;
|
16124
16730
|
return firstToken.range(lastToken, str);
|
16125
16731
|
}
|
16126
16732
|
/**
|
@@ -16133,12 +16739,13 @@ function () {
|
|
16133
16739
|
_proto.parseRegexGroup = function parseRegexGroup(regex, modeName) {
|
16134
16740
|
var outerMode = this.mode;
|
16135
16741
|
this.mode = "text";
|
16136
|
-
var firstToken = this.
|
16742
|
+
var firstToken = this.fetch();
|
16137
16743
|
var lastToken = firstToken;
|
16138
16744
|
var str = "";
|
16745
|
+
var nextToken;
|
16139
16746
|
|
16140
|
-
while (this.
|
16141
|
-
lastToken =
|
16747
|
+
while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) {
|
16748
|
+
lastToken = nextToken;
|
16142
16749
|
str += lastToken.text;
|
16143
16750
|
this.consume();
|
16144
16751
|
}
|
@@ -16192,7 +16799,7 @@ function () {
|
|
16192
16799
|
var res;
|
16193
16800
|
var isBlank = false;
|
16194
16801
|
|
16195
|
-
if (!optional && this.
|
16802
|
+
if (!optional && this.fetch().text !== "{") {
|
16196
16803
|
res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size");
|
16197
16804
|
} else {
|
16198
16805
|
res = this.parseStringGroup("size", optional);
|
@@ -16235,13 +16842,18 @@ function () {
|
|
16235
16842
|
};
|
16236
16843
|
}
|
16237
16844
|
/**
|
16238
|
-
* Parses an URL, checking escaped letters and allowed protocols
|
16845
|
+
* Parses an URL, checking escaped letters and allowed protocols,
|
16846
|
+
* and setting the catcode of % as an active character (as in \hyperref).
|
16239
16847
|
*/
|
16240
16848
|
;
|
16241
16849
|
|
16242
|
-
_proto.parseUrlGroup = function parseUrlGroup(optional) {
|
16850
|
+
_proto.parseUrlGroup = function parseUrlGroup(optional, consumeSpaces) {
|
16851
|
+
this.gullet.lexer.setCatcode("%", 13); // active character
|
16852
|
+
|
16243
16853
|
var res = this.parseStringGroup("url", optional, true); // get raw string
|
16244
16854
|
|
16855
|
+
this.gullet.lexer.setCatcode("%", 14); // comment character
|
16856
|
+
|
16245
16857
|
if (!res) {
|
16246
16858
|
return null;
|
16247
16859
|
} // hyperref package allows backslashes alone in href, but doesn't
|
@@ -16251,14 +16863,6 @@ function () {
|
|
16251
16863
|
|
16252
16864
|
|
16253
16865
|
var url = res.text.replace(/\\([#$%&~_^{}])/g, '$1');
|
16254
|
-
var protocol = /^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(url);
|
16255
|
-
protocol = protocol != null ? protocol[1] : "_relative";
|
16256
|
-
var allowed = this.settings.allowedProtocols;
|
16257
|
-
|
16258
|
-
if (!utils.contains(allowed, "*") && !utils.contains(allowed, protocol)) {
|
16259
|
-
throw new src_ParseError("Forbidden protocol '" + protocol + "'", res);
|
16260
|
-
}
|
16261
|
-
|
16262
16866
|
return {
|
16263
16867
|
type: "url",
|
16264
16868
|
mode: this.mode,
|
@@ -16280,26 +16884,35 @@ function () {
|
|
16280
16884
|
;
|
16281
16885
|
|
16282
16886
|
_proto.parseGroup = function parseGroup(name, // For error reporting.
|
16283
|
-
optional, greediness, breakOnTokenText, mode) {
|
16887
|
+
optional, greediness, breakOnTokenText, mode, consumeSpaces) {
|
16888
|
+
// Switch to specified mode
|
16284
16889
|
var outerMode = this.mode;
|
16285
|
-
var firstToken = this.nextToken;
|
16286
|
-
var text = firstToken.text; // Switch to specified mode
|
16287
16890
|
|
16288
16891
|
if (mode) {
|
16289
16892
|
this.switchMode(mode);
|
16290
|
-
}
|
16893
|
+
} // Consume spaces if requested, crucially *after* we switch modes,
|
16894
|
+
// so that the next non-space token is parsed in the correct mode.
|
16895
|
+
|
16291
16896
|
|
16292
|
-
|
16897
|
+
if (consumeSpaces) {
|
16898
|
+
this.consumeSpaces();
|
16899
|
+
} // Get first token
|
16900
|
+
|
16901
|
+
|
16902
|
+
var firstToken = this.fetch();
|
16903
|
+
var text = firstToken.text;
|
16293
16904
|
var result; // Try to parse an open brace or \begingroup
|
16294
16905
|
|
16295
16906
|
if (optional ? text === "[" : text === "{" || text === "\\begingroup") {
|
16296
|
-
|
16907
|
+
this.consume();
|
16908
|
+
var groupEnd = Parser.endOfGroup[text]; // Start a new group namespace
|
16297
16909
|
|
16298
16910
|
this.gullet.beginGroup(); // If we get a brace, parse an expression
|
16299
16911
|
|
16300
|
-
this.consume();
|
16301
16912
|
var expression = this.parseExpression(false, groupEnd);
|
16302
|
-
var lastToken = this.
|
16913
|
+
var lastToken = this.fetch(); // Check that we got a matching closing brace
|
16914
|
+
|
16915
|
+
this.expect(groupEnd); // End group namespace
|
16303
16916
|
|
16304
16917
|
this.gullet.endGroup();
|
16305
16918
|
result = {
|
@@ -16326,18 +16939,14 @@ function () {
|
|
16326
16939
|
throw new src_ParseError("Undefined control sequence: " + text, firstToken);
|
16327
16940
|
}
|
16328
16941
|
|
16329
|
-
result = this.
|
16942
|
+
result = this.formatUnsupportedCmd(text);
|
16943
|
+
this.consume();
|
16330
16944
|
}
|
16331
16945
|
} // Switch mode back
|
16332
16946
|
|
16333
16947
|
|
16334
16948
|
if (mode) {
|
16335
16949
|
this.switchMode(outerMode);
|
16336
|
-
} // Make sure we got a close brace
|
16337
|
-
|
16338
|
-
|
16339
|
-
if (groupEnd) {
|
16340
|
-
this.expect(groupEnd);
|
16341
16950
|
}
|
16342
16951
|
|
16343
16952
|
return result;
|
@@ -16393,12 +17002,12 @@ function () {
|
|
16393
17002
|
}
|
16394
17003
|
/**
|
16395
17004
|
* Parse a single symbol out of the string. Here, we handle single character
|
16396
|
-
* symbols and special functions like
|
17005
|
+
* symbols and special functions like \verb.
|
16397
17006
|
*/
|
16398
17007
|
;
|
16399
17008
|
|
16400
17009
|
_proto.parseSymbol = function parseSymbol() {
|
16401
|
-
var nucleus = this.
|
17010
|
+
var nucleus = this.fetch();
|
16402
17011
|
var text = nucleus.text;
|
16403
17012
|
|
16404
17013
|
if (/^\\verb[^a-zA-Z]/.test(text)) {
|
@@ -16491,11 +17100,18 @@ function () {
|
|
16491
17100
|
} else if (this.mode === "math") {
|
16492
17101
|
this.settings.reportNonstrict("unicodeTextInMathMode", "Unicode text character \"" + text[0] + "\" used in math mode", nucleus);
|
16493
17102
|
}
|
16494
|
-
}
|
17103
|
+
} // All nonmathematical Unicode characters are rendered as if they
|
17104
|
+
// are in text mode (wrapped in \text) because that's what it
|
17105
|
+
// takes to render them in LaTeX. Setting `mode: this.mode` is
|
17106
|
+
// another natural choice (the user requested math mode), but
|
17107
|
+
// this makes it more difficult for getCharacterMetrics() to
|
17108
|
+
// distinguish Unicode characters without metrics and those for
|
17109
|
+
// which we want to simulate the letter M.
|
17110
|
+
|
16495
17111
|
|
16496
17112
|
symbol = {
|
16497
17113
|
type: "textord",
|
16498
|
-
mode:
|
17114
|
+
mode: "text",
|
16499
17115
|
loc: SourceLocation.range(nucleus),
|
16500
17116
|
text: text
|
16501
17117
|
};
|
@@ -16653,7 +17269,7 @@ var renderToString = function renderToString(expression, options) {
|
|
16653
17269
|
|
16654
17270
|
|
16655
17271
|
var katex_generateParseTree = function generateParseTree(expression, options) {
|
16656
|
-
var settings = new
|
17272
|
+
var settings = new Settings_Settings(options);
|
16657
17273
|
return src_parseTree(expression, settings);
|
16658
17274
|
};
|
16659
17275
|
/**
|
@@ -16680,7 +17296,7 @@ var katex_renderError = function renderError(error, expression, options) {
|
|
16680
17296
|
|
16681
17297
|
|
16682
17298
|
var katex_renderToDomTree = function renderToDomTree(expression, options) {
|
16683
|
-
var settings = new
|
17299
|
+
var settings = new Settings_Settings(options);
|
16684
17300
|
|
16685
17301
|
try {
|
16686
17302
|
var tree = src_parseTree(expression, settings);
|
@@ -16696,7 +17312,7 @@ var katex_renderToDomTree = function renderToDomTree(expression, options) {
|
|
16696
17312
|
|
16697
17313
|
|
16698
17314
|
var katex_renderToHTMLTree = function renderToHTMLTree(expression, options) {
|
16699
|
-
var settings = new
|
17315
|
+
var settings = new Settings_Settings(options);
|
16700
17316
|
|
16701
17317
|
try {
|
16702
17318
|
var tree = src_parseTree(expression, settings);
|
@@ -16710,7 +17326,7 @@ var katex_renderToHTMLTree = function renderToHTMLTree(expression, options) {
|
|
16710
17326
|
/**
|
16711
17327
|
* Current KaTeX version
|
16712
17328
|
*/
|
16713
|
-
version: "0.
|
17329
|
+
version: "0.11.1",
|
16714
17330
|
|
16715
17331
|
/**
|
16716
17332
|
* Renders the given LaTeX into an HTML+MathML combination, and adds
|