summaryrefslogtreecommitdiffstats
path: root/webapp/non_npm_dependencies/katex
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/non_npm_dependencies/katex')
-rw-r--r--webapp/non_npm_dependencies/katex/LICENSE.txt27
-rw-r--r--webapp/non_npm_dependencies/katex/README.md68
-rwxr-xr-xwebapp/non_npm_dependencies/katex/cli.js32
-rw-r--r--webapp/non_npm_dependencies/katex/dist/README.md68
-rw-r--r--webapp/non_npm_dependencies/katex/dist/contrib/auto-render.min.js1
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.eotbin71656 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.ttfbin71428 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.woffbin40200 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.woff2bin33188 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.eotbin19836 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.ttfbin19588 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.woffbin12136 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff2bin10604 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.eotbin19220 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.ttfbin18960 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.woffbin11868 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2bin10396 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.eotbin36200 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.ttfbin35968 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.woffbin23388 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.woff2bin20476 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.eotbin34896 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.ttfbin34652 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.woffbin22844 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.woff2bin19868 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.eotbin60688 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.ttfbin60468 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.woffbin35480 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.woff2bin29492 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.eotbin44132 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.ttfbin43904 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.woffbin24880 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.woff2bin21032 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.eotbin68228 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.ttfbin67996 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.woffbin37620 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.woff2bin31220 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.eotbin39990 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.ttfbin39744 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.woffbin23192 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.woff2bin20036 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.eotbin41676 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.ttfbin41448 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.woffbin23820 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.woff2bin20432 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.eotbin41536 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.ttfbin41304 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.woffbin23712 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.woff2bin20344 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.eotbin34204 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.ttfbin33964 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.woffbin19196 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.woff2bin16020 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.eotbin31320 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.ttfbin31072 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.woffbin18080 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.woff2bin15152 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.eotbin30212 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.ttfbin29960 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.woffbin16744 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.woff2bin13908 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.eotbin25104 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.ttfbin24864 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.woffbin13856 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.woff2bin12276 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.eotbin13408 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.ttfbin13172 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.woffbin6980 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.woff2bin5820 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.eotbin12648 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.ttfbin12412 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.woffbin6684 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.woff2bin5560 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.eotbin8596 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.ttfbin8360 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.woffbin4776 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.woff2bin3856 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.eotbin11520 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.ttfbin11284 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.woffbin6456 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.woff2bin5172 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.eotbin35784 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.ttfbin35528 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.woffbin20712 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2bin17344 -> 0 bytes
-rw-r--r--webapp/non_npm_dependencies/katex/dist/katex.min.css1
-rw-r--r--webapp/non_npm_dependencies/katex/dist/katex.min.js4
-rw-r--r--webapp/non_npm_dependencies/katex/katex.js74
-rw-r--r--webapp/non_npm_dependencies/katex/package.json41
-rw-r--r--webapp/non_npm_dependencies/katex/src/Lexer.js162
-rw-r--r--webapp/non_npm_dependencies/katex/src/Options.js189
-rw-r--r--webapp/non_npm_dependencies/katex/src/ParseError.js40
-rw-r--r--webapp/non_npm_dependencies/katex/src/Parser.js737
-rw-r--r--webapp/non_npm_dependencies/katex/src/Settings.js28
-rw-r--r--webapp/non_npm_dependencies/katex/src/Style.js126
-rw-r--r--webapp/non_npm_dependencies/katex/src/buildCommon.js450
-rw-r--r--webapp/non_npm_dependencies/katex/src/buildHTML.js1375
-rw-r--r--webapp/non_npm_dependencies/katex/src/buildMathML.js519
-rw-r--r--webapp/non_npm_dependencies/katex/src/buildTree.js40
-rw-r--r--webapp/non_npm_dependencies/katex/src/delimiter.js542
-rw-r--r--webapp/non_npm_dependencies/katex/src/domTree.js269
-rw-r--r--webapp/non_npm_dependencies/katex/src/environments.js221
-rw-r--r--webapp/non_npm_dependencies/katex/src/fontMetrics.js147
-rw-r--r--webapp/non_npm_dependencies/katex/src/fontMetricsData.js1752
-rw-r--r--webapp/non_npm_dependencies/katex/src/functions.js569
-rw-r--r--webapp/non_npm_dependencies/katex/src/mathMLTree.js102
-rw-r--r--webapp/non_npm_dependencies/katex/src/parseData.js13
-rw-r--r--webapp/non_npm_dependencies/katex/src/parseTree.js17
-rw-r--r--webapp/non_npm_dependencies/katex/src/symbols.js620
-rw-r--r--webapp/non_npm_dependencies/katex/src/utils.js106
110 files changed, 0 insertions, 8340 deletions
diff --git a/webapp/non_npm_dependencies/katex/LICENSE.txt b/webapp/non_npm_dependencies/katex/LICENSE.txt
deleted file mode 100644
index f7b2d38cd..000000000
--- a/webapp/non_npm_dependencies/katex/LICENSE.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Khan Academy
-
-This software also uses portions of the underscore.js project, which is
-MIT licensed with the following copyright:
-
-Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
-Reporters & Editors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/webapp/non_npm_dependencies/katex/README.md b/webapp/non_npm_dependencies/katex/README.md
deleted file mode 100644
index 31cf658d8..000000000
--- a/webapp/non_npm_dependencies/katex/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# [<img src="https://khan.github.io/KaTeX/katex-logo.svg" width="130" alt="KaTeX">](https://khan.github.io/KaTeX/) [![Build Status](https://travis-ci.org/Khan/KaTeX.svg?branch=master)](https://travis-ci.org/Khan/KaTeX)
-
-[![Join the chat at https://gitter.im/Khan/KaTeX](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Khan/KaTeX?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-
-KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web.
-
- * **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](http://jsperf.com/katex-vs-mathjax/).
- * **Print quality:** KaTeX’s layout is based on Donald Knuth’s TeX, the gold standard for math typesetting.
- * **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources.
- * **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML.
-
-KaTeX supports all major browsers, including Chrome, Safari, Firefox, Opera, and IE 8 - IE 11. A list of supported commands can be on the [wiki](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX).
-
-## Usage
-
-You can [download KaTeX](https://github.com/khan/katex/releases) and host it on your server or include the `katex.min.js` and `katex.min.css` files on your page directly from a CDN:
-
-```html
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css">
-<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.js"></script>
-```
-
-#### In-browser rendering
-
-Call `katex.render` with a TeX expression and a DOM element to render into:
-
-```js
-katex.render("c = \\pm\\sqrt{a^2 + b^2}", element);
-```
-
-If KaTeX can't parse the expression, it throws a `katex.ParseError` error.
-
-#### Server side rendering or rendering to a string
-
-To generate HTML on the server or to generate an HTML string of the rendered math, you can use `katex.renderToString`:
-
-```js
-var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}");
-// '<span class="katex">...</span>'
-```
-
-Make sure to include the CSS and font files, but there is no need to include the JavaScript. Like `render`, `renderToString` throws if it can't parse the expression.
-
-#### Rendering options
-
-You can provide an object of options as the last argument to `katex.render` and `katex.renderToString`. Available options are:
-
-- `displayMode`: `boolean`. If `true` the math will be rendered in display mode, which will put the math in display style (so `\int` and `\sum` are large, for example), and will center the math on the page on its own line. If `false` the math will be rendered in inline mode. (default: `false`)
-- `throwOnError`: `boolean`. If `true`, KaTeX will throw a `ParseError` when it encounters an unsupported command. If `false`, KaTeX will render the unsupported command as text in the color given by `errorColor`. (default: `true`)
-- `errorColor`: `string`. A color string given in the format `"#XXX"` or `"#XXXXXX"`. This option determines the color which unsupported commands are rendered in. (default: `#cc0000`)
-
-For example:
-
-```js
-katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, { displayMode: true });
-```
-
-#### Automatic rendering of math on a page
-
-Math on the page can be automatically rendered using the auto-render extension. See [the Auto-render README](contrib/auto-render/README.md) for more information.
-
-## Contributing
-
-See [CONTRIBUTING.md](CONTRIBUTING.md)
-
-## License
-
-KaTeX is licensed under the [MIT License](http://opensource.org/licenses/MIT).
diff --git a/webapp/non_npm_dependencies/katex/cli.js b/webapp/non_npm_dependencies/katex/cli.js
deleted file mode 100755
index b64de377c..000000000
--- a/webapp/non_npm_dependencies/katex/cli.js
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env node
-// Simple CLI for KaTeX.
-// Reads TeX from stdin, outputs HTML to stdout.
-/* eslint no-console:0 */
-
-var katex = require("./");
-var input = "";
-
-// Skip the first two args, which are just "node" and "cli.js"
-var args = process.argv.slice(2);
-
-if (args.indexOf("--help") !== -1) {
- console.log(process.argv[0] + " " + process.argv[1] +
- " [ --help ]" +
- " [ --display-mode ]");
-
- console.log("\n" +
- "Options:");
- console.log(" --help Display this help message");
- console.log(" --display-mode Render in display mode (not inline mode)");
- process.exit();
-}
-
-process.stdin.on("data", function(chunk) {
- input += chunk.toString();
-});
-
-process.stdin.on("end", function() {
- var options = { displayMode: args.indexOf("--display-mode") !== -1 };
- var output = katex.renderToString(input, options);
- console.log(output);
-});
diff --git a/webapp/non_npm_dependencies/katex/dist/README.md b/webapp/non_npm_dependencies/katex/dist/README.md
deleted file mode 100644
index 31cf658d8..000000000
--- a/webapp/non_npm_dependencies/katex/dist/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# [<img src="https://khan.github.io/KaTeX/katex-logo.svg" width="130" alt="KaTeX">](https://khan.github.io/KaTeX/) [![Build Status](https://travis-ci.org/Khan/KaTeX.svg?branch=master)](https://travis-ci.org/Khan/KaTeX)
-
-[![Join the chat at https://gitter.im/Khan/KaTeX](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Khan/KaTeX?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-
-KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web.
-
- * **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](http://jsperf.com/katex-vs-mathjax/).
- * **Print quality:** KaTeX’s layout is based on Donald Knuth’s TeX, the gold standard for math typesetting.
- * **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources.
- * **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML.
-
-KaTeX supports all major browsers, including Chrome, Safari, Firefox, Opera, and IE 8 - IE 11. A list of supported commands can be on the [wiki](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX).
-
-## Usage
-
-You can [download KaTeX](https://github.com/khan/katex/releases) and host it on your server or include the `katex.min.js` and `katex.min.css` files on your page directly from a CDN:
-
-```html
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css">
-<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.js"></script>
-```
-
-#### In-browser rendering
-
-Call `katex.render` with a TeX expression and a DOM element to render into:
-
-```js
-katex.render("c = \\pm\\sqrt{a^2 + b^2}", element);
-```
-
-If KaTeX can't parse the expression, it throws a `katex.ParseError` error.
-
-#### Server side rendering or rendering to a string
-
-To generate HTML on the server or to generate an HTML string of the rendered math, you can use `katex.renderToString`:
-
-```js
-var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}");
-// '<span class="katex">...</span>'
-```
-
-Make sure to include the CSS and font files, but there is no need to include the JavaScript. Like `render`, `renderToString` throws if it can't parse the expression.
-
-#### Rendering options
-
-You can provide an object of options as the last argument to `katex.render` and `katex.renderToString`. Available options are:
-
-- `displayMode`: `boolean`. If `true` the math will be rendered in display mode, which will put the math in display style (so `\int` and `\sum` are large, for example), and will center the math on the page on its own line. If `false` the math will be rendered in inline mode. (default: `false`)
-- `throwOnError`: `boolean`. If `true`, KaTeX will throw a `ParseError` when it encounters an unsupported command. If `false`, KaTeX will render the unsupported command as text in the color given by `errorColor`. (default: `true`)
-- `errorColor`: `string`. A color string given in the format `"#XXX"` or `"#XXXXXX"`. This option determines the color which unsupported commands are rendered in. (default: `#cc0000`)
-
-For example:
-
-```js
-katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, { displayMode: true });
-```
-
-#### Automatic rendering of math on a page
-
-Math on the page can be automatically rendered using the auto-render extension. See [the Auto-render README](contrib/auto-render/README.md) for more information.
-
-## Contributing
-
-See [CONTRIBUTING.md](CONTRIBUTING.md)
-
-## License
-
-KaTeX is licensed under the [MIT License](http://opensource.org/licenses/MIT).
diff --git a/webapp/non_npm_dependencies/katex/dist/contrib/auto-render.min.js b/webapp/non_npm_dependencies/katex/dist/contrib/auto-render.min.js
deleted file mode 100644
index 30cc31214..000000000
--- a/webapp/non_npm_dependencies/katex/dist/contrib/auto-render.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.renderMathInElement=e()}})(function(){var e,t,r;return function n(e,t,r){function a(o,l){if(!t[o]){if(!e[o]){var f=typeof require=="function"&&require;if(!l&&f)return f(o,!0);if(i)return i(o,!0);var d=new Error("Cannot find module '"+o+"'");throw d.code="MODULE_NOT_FOUND",d}var s=t[o]={exports:{}};e[o][0].call(s.exports,function(t){var r=e[o][1][t];return a(r?r:t)},s,s.exports,n,e,t,r)}return t[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)a(r[o]);return a}({1:[function(e,t,r){var n=e("./splitAtDelimiters");var a=function(e,t){var r=[{type:"text",data:e}];for(var a=0;a<t.length;a++){var i=t[a];r=n(r,i.left,i.right,i.display||false)}return r};var i=function(e,t){var r=a(e,t);var n=document.createDocumentFragment();for(var i=0;i<r.length;i++){if(r[i].type==="text"){n.appendChild(document.createTextNode(r[i].data))}else{var o=document.createElement("span");var l=r[i].data;try{katex.render(l,o,{displayMode:r[i].display})}catch(f){if(!(f instanceof katex.ParseError)){throw f}console.error("KaTeX auto-render: Failed to parse `"+r[i].data+"` with ",f);n.appendChild(document.createTextNode(r[i].rawData));continue}n.appendChild(o)}}return n};var o=function(e,t,r){for(var n=0;n<e.childNodes.length;n++){var a=e.childNodes[n];if(a.nodeType===3){var l=i(a.textContent,t);n+=l.childNodes.length-1;e.replaceChild(l,a)}else if(a.nodeType===1){var f=r.indexOf(a.nodeName.toLowerCase())===-1;if(f){o(a,t,r)}}}};var l={delimiters:[{left:"$$",right:"$$",display:true},{left:"\\[",right:"\\]",display:true},{left:"\\(",right:"\\)",display:false}],ignoredTags:["script","noscript","style","textarea","pre","code"]};var f=function(e){var t;var r;for(var n=1,a=arguments.length;n<a;n++){t=arguments[n];for(r in t){if(Object.prototype.hasOwnProperty.call(t,r)){e[r]=t[r]}}}return e};var d=function(e,t){if(!e){throw new Error("No element provided to render")}t=f({},l,t);o(e,t.delimiters,t.ignoredTags)};t.exports=d},{"./splitAtDelimiters":2}],2:[function(e,t,r){var n=function(e,t,r){var n=r;var a=0;var i=e.length;while(n<t.length){var o=t[n];if(a<=0&&t.slice(n,n+i)===e){return n}else if(o==="\\"){n++}else if(o==="{"){a++}else if(o==="}"){a--}n++}return-1};var a=function(e,t,r,a){var i=[];for(var o=0;o<e.length;o++){if(e[o].type==="text"){var l=e[o].data;var f=true;var d=0;var s;s=l.indexOf(t);if(s!==-1){d=s;i.push({type:"text",data:l.slice(0,d)});f=false}while(true){if(f){s=l.indexOf(t,d);if(s===-1){break}i.push({type:"text",data:l.slice(d,s)});d=s}else{s=n(r,l,d+t.length);if(s===-1){break}i.push({type:"math",data:l.slice(d+t.length,s),rawData:l.slice(d,s+r.length),display:a});d=s+r.length}f=!f}i.push({type:"text",data:l.slice(d)})}else{i.push(e[o])}}return i};t.exports=a},{}]},{},[1])(1)});
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.eot
deleted file mode 100644
index 784276a3c..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.ttf
deleted file mode 100644
index 6f1e0be20..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.woff
deleted file mode 100644
index 4dded4733..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.woff2
deleted file mode 100644
index ea81079c4..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_AMS-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.eot
deleted file mode 100644
index 1a0db0c56..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.ttf
deleted file mode 100644
index b94907dad..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff
deleted file mode 100644
index 799fa8122..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff2
deleted file mode 100644
index 73bb54228..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.eot
deleted file mode 100644
index 6cc83d092..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.ttf
deleted file mode 100644
index cf51e2021..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff
deleted file mode 100644
index f5e5c6235..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2
deleted file mode 100644
index dd76d3488..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.eot
deleted file mode 100644
index 1960b1066..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.ttf
deleted file mode 100644
index 7b0790f1a..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.woff
deleted file mode 100644
index dc3257132..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.woff2
deleted file mode 100644
index fdc429227..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.eot
deleted file mode 100644
index e4e73796a..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.ttf
deleted file mode 100644
index 063bc0263..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.woff
deleted file mode 100644
index c4b18d863..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.woff2
deleted file mode 100644
index 4318d938e..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Fraktur-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.eot
deleted file mode 100644
index 80fbd0223..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.ttf
deleted file mode 100644
index 8e10722af..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.woff
deleted file mode 100644
index 43b361a60..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.woff2
deleted file mode 100644
index af57a96c1..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.eot
deleted file mode 100644
index fc770166b..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.ttf
deleted file mode 100644
index d124495d7..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.woff
deleted file mode 100644
index e623236bc..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.woff2
deleted file mode 100644
index 944e9740b..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Italic.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.eot
deleted file mode 100644
index dc60c090c..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.ttf
deleted file mode 100644
index da5797ffc..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.woff
deleted file mode 100644
index 37db672e8..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.woff2
deleted file mode 100644
index 488204248..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Main-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.eot
deleted file mode 100644
index 52c8b8c6b..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.ttf
deleted file mode 100644
index a8b527c7e..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.woff
deleted file mode 100644
index 8940e0b58..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.woff2
deleted file mode 100644
index 15cf56d34..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-BoldItalic.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.eot
deleted file mode 100644
index 64c8992c4..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.ttf
deleted file mode 100644
index 06f39d3a2..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.woff
deleted file mode 100644
index cf3b4b79e..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.woff2
deleted file mode 100644
index 5f8c4bfa4..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Italic.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.eot
deleted file mode 100644
index 5521e6a56..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.ttf
deleted file mode 100644
index 731270823..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.woff
deleted file mode 100644
index 0e2ebdf18..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.woff2
deleted file mode 100644
index ebe3d028a..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Math-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.eot
deleted file mode 100644
index 1660e76a2..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.ttf
deleted file mode 100644
index dbeb7b92a..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.woff
deleted file mode 100644
index 8f144a8bb..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.woff2
deleted file mode 100644
index 329e85557..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Bold.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.eot
deleted file mode 100644
index 289ae3ff8..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.ttf
deleted file mode 100644
index b3a2f38f2..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.woff
deleted file mode 100644
index bddf7ea65..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.woff2
deleted file mode 100644
index 5fa767bdd..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Italic.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.eot
deleted file mode 100644
index 1b38b98a1..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.ttf
deleted file mode 100644
index e4712f847..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.woff
deleted file mode 100644
index 33be36804..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.woff2
deleted file mode 100644
index 4fcb2e29a..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_SansSerif-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.eot
deleted file mode 100644
index 7870d7f31..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.ttf
deleted file mode 100644
index da4d11308..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.woff
deleted file mode 100644
index d6ae79f99..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.woff2
deleted file mode 100644
index 1b43deb45..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Script-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.eot
deleted file mode 100644
index 29950f95f..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.ttf
deleted file mode 100644
index 194466a65..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.woff
deleted file mode 100644
index 237f271ed..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.woff2
deleted file mode 100644
index 39b6f8f74..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size1-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.eot
deleted file mode 100644
index b8b0536f9..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.ttf
deleted file mode 100644
index b41b66a63..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.woff
deleted file mode 100644
index 4a3055854..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.woff2
deleted file mode 100644
index 3facec1ab..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size2-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.eot
deleted file mode 100644
index 576b864fa..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.ttf
deleted file mode 100644
index 790ddbbc5..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.woff
deleted file mode 100644
index 3a6d062e6..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.woff2
deleted file mode 100644
index 2cffafe50..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size3-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.eot
deleted file mode 100644
index c2b045fc3..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.ttf
deleted file mode 100644
index ce660aa7f..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.woff
deleted file mode 100644
index 7826c6c97..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.woff2
deleted file mode 100644
index c92189812..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Size4-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.eot b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.eot
deleted file mode 100644
index 4c178f484..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.eot
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.ttf b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.ttf
deleted file mode 100644
index b0427ad0a..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.woff b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.woff
deleted file mode 100644
index 78e990488..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.woff
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2 b/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2
deleted file mode 100644
index 618de99d4..000000000
--- a/webapp/non_npm_dependencies/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2
+++ /dev/null
Binary files differ
diff --git a/webapp/non_npm_dependencies/katex/dist/katex.min.css b/webapp/non_npm_dependencies/katex/dist/katex.min.css
deleted file mode 100644
index f688e889b..000000000
--- a/webapp/non_npm_dependencies/katex/dist/katex.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@font-face{font-family:KaTeX_AMS;src:url(fonts/KaTeX_AMS-Regular.eot);src:url(fonts/KaTeX_AMS-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_AMS-Regular.woff2) format('woff2'),url(fonts/KaTeX_AMS-Regular.woff) format('woff'),url(fonts/KaTeX_AMS-Regular.ttf) format('ttf');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Bold.eot);src:url(fonts/KaTeX_Caligraphic-Bold.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Caligraphic-Bold.woff2) format('woff2'),url(fonts/KaTeX_Caligraphic-Bold.woff) format('woff'),url(fonts/KaTeX_Caligraphic-Bold.ttf) format('ttf');font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Regular.eot);src:url(fonts/KaTeX_Caligraphic-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Caligraphic-Regular.woff2) format('woff2'),url(fonts/KaTeX_Caligraphic-Regular.woff) format('woff'),url(fonts/KaTeX_Caligraphic-Regular.ttf) format('ttf');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Bold.eot);src:url(fonts/KaTeX_Fraktur-Bold.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Fraktur-Bold.woff2) format('woff2'),url(fonts/KaTeX_Fraktur-Bold.woff) format('woff'),url(fonts/KaTeX_Fraktur-Bold.ttf) format('ttf');font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Regular.eot);src:url(fonts/KaTeX_Fraktur-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Fraktur-Regular.woff2) format('woff2'),url(fonts/KaTeX_Fraktur-Regular.woff) format('woff'),url(fonts/KaTeX_Fraktur-Regular.ttf) format('ttf');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Bold.eot);src:url(fonts/KaTeX_Main-Bold.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Main-Bold.woff2) format('woff2'),url(fonts/KaTeX_Main-Bold.woff) format('woff'),url(fonts/KaTeX_Main-Bold.ttf) format('ttf');font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Italic.eot);src:url(fonts/KaTeX_Main-Italic.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Main-Italic.woff2) format('woff2'),url(fonts/KaTeX_Main-Italic.woff) format('woff'),url(fonts/KaTeX_Main-Italic.ttf) format('ttf');font-weight:400;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Regular.eot);src:url(fonts/KaTeX_Main-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Main-Regular.woff2) format('woff2'),url(fonts/KaTeX_Main-Regular.woff) format('woff'),url(fonts/KaTeX_Main-Regular.ttf) format('ttf');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Math;src:url(fonts/KaTeX_Math-Italic.eot);src:url(fonts/KaTeX_Math-Italic.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Math-Italic.woff2) format('woff2'),url(fonts/KaTeX_Math-Italic.woff) format('woff'),url(fonts/KaTeX_Math-Italic.ttf) format('ttf');font-weight:400;font-style:italic}@font-face{font-family:KaTeX_SansSerif;src:url(fonts/KaTeX_SansSerif-Regular.eot);src:url(fonts/KaTeX_SansSerif-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_SansSerif-Regular.woff2) format('woff2'),url(fonts/KaTeX_SansSerif-Regular.woff) format('woff'),url(fonts/KaTeX_SansSerif-Regular.ttf) format('ttf');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Script;src:url(fonts/KaTeX_Script-Regular.eot);src:url(fonts/KaTeX_Script-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Script-Regular.woff2) format('woff2'),url(fonts/KaTeX_Script-Regular.woff) format('woff'),url(fonts/KaTeX_Script-Regular.ttf) format('ttf');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size1;src:url(fonts/KaTeX_Size1-Regular.eot);src:url(fonts/KaTeX_Size1-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size1-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size1-Regular.woff) format('woff'),url(fonts/KaTeX_Size1-Regular.ttf) format('ttf');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size2;src:url(fonts/KaTeX_Size2-Regular.eot);src:url(fonts/KaTeX_Size2-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size2-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size2-Regular.woff) format('woff'),url(fonts/KaTeX_Size2-Regular.ttf) format('ttf');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size3;src:url(fonts/KaTeX_Size3-Regular.eot);src:url(fonts/KaTeX_Size3-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size3-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size3-Regular.woff) format('woff'),url(fonts/KaTeX_Size3-Regular.ttf) format('ttf');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size4;src:url(fonts/KaTeX_Size4-Regular.eot);src:url(fonts/KaTeX_Size4-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Size4-Regular.woff2) format('woff2'),url(fonts/KaTeX_Size4-Regular.woff) format('woff'),url(fonts/KaTeX_Size4-Regular.ttf) format('ttf');font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Typewriter;src:url(fonts/KaTeX_Typewriter-Regular.eot);src:url(fonts/KaTeX_Typewriter-Regular.eot#iefix) format('embedded-opentype'),url(fonts/KaTeX_Typewriter-Regular.woff2) format('woff2'),url(fonts/KaTeX_Typewriter-Regular.woff) format('woff'),url(fonts/KaTeX_Typewriter-Regular.ttf) format('ttf');font-weight:400;font-style:normal}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:inline-block;text-align:initial}.katex{font:400 1.21em KaTeX_Main;line-height:1.2;white-space:nowrap;text-indent:0}.katex .katex-html{display:inline-block}.katex .katex-mathml{position:absolute;clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.katex .base,.katex .strut{display:inline-block}.katex .mathit{font-family:KaTeX_Math;font-style:italic}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .amsrm,.katex .mathbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr{font-family:KaTeX_Script}.katex .mathsf{font-family:KaTeX_SansSerif}.katex .mainit{font-family:KaTeX_Main;font-style:italic}.katex .textstyle>.mord+.mop{margin-left:.16667em}.katex .textstyle>.mord+.mbin{margin-left:.22222em}.katex .textstyle>.mord+.mrel{margin-left:.27778em}.katex .textstyle>.mop+.mop,.katex .textstyle>.mop+.mord,.katex .textstyle>.mord+.minner{margin-left:.16667em}.katex .textstyle>.mop+.mrel{margin-left:.27778em}.katex .textstyle>.mop+.minner{margin-left:.16667em}.katex .textstyle>.mbin+.minner,.katex .textstyle>.mbin+.mop,.katex .textstyle>.mbin+.mopen,.katex .textstyle>.mbin+.mord{margin-left:.22222em}.katex .textstyle>.mrel+.minner,.katex .textstyle>.mrel+.mop,.katex .textstyle>.mrel+.mopen,.katex .textstyle>.mrel+.mord{margin-left:.27778em}.katex .textstyle>.mclose+.mop{margin-left:.16667em}.katex .textstyle>.mclose+.mbin{margin-left:.22222em}.katex .textstyle>.mclose+.mrel{margin-left:.27778em}.katex .textstyle>.mclose+.minner,.katex .textstyle>.minner+.mop,.katex .textstyle>.minner+.mord,.katex .textstyle>.mpunct+.mclose,.katex .textstyle>.mpunct+.minner,.katex .textstyle>.mpunct+.mop,.katex .textstyle>.mpunct+.mopen,.katex .textstyle>.mpunct+.mord,.katex .textstyle>.mpunct+.mpunct,.katex .textstyle>.mpunct+.mrel{margin-left:.16667em}.katex .textstyle>.minner+.mbin{margin-left:.22222em}.katex .textstyle>.minner+.mrel{margin-left:.27778em}.katex .mclose+.mop,.katex .minner+.mop,.katex .mop+.mop,.katex .mop+.mord,.katex .mord+.mop,.katex .textstyle>.minner+.minner,.katex .textstyle>.minner+.mopen,.katex .textstyle>.minner+.mpunct{margin-left:.16667em}.katex .reset-textstyle.textstyle{font-size:1em}.katex .reset-textstyle.scriptstyle{font-size:.7em}.katex .reset-textstyle.scriptscriptstyle{font-size:.5em}.katex .reset-scriptstyle.textstyle{font-size:1.42857em}.katex .reset-scriptstyle.scriptstyle{font-size:1em}.katex .reset-scriptstyle.scriptscriptstyle{font-size:.71429em}.katex .reset-scriptscriptstyle.textstyle{font-size:2em}.katex .reset-scriptscriptstyle.scriptstyle{font-size:1.4em}.katex .reset-scriptscriptstyle.scriptscriptstyle{font-size:1em}.katex .style-wrap{position:relative}.katex .vlist{display:inline-block}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist .baseline-fix{display:inline-table;table-layout:fixed}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{width:100%}.katex .mfrac .frac-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .mfrac .frac-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .mspace{display:inline-block}.katex .mspace.negativethinspace{margin-left:-.16667em}.katex .mspace.thinspace{width:.16667em}.katex .mspace.mediumspace{width:.22222em}.katex .mspace.thickspace{width:.27778em}.katex .mspace.enspace{width:.5em}.katex .mspace.quad{width:1em}.katex .mspace.qquad{width:2em}.katex .llap,.katex .rlap{width:0;position:relative}.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .rlap>.inner{left:0}.katex .katex-logo .a{font-size:.75em;margin-left:-.32em;position:relative;top:-.2em}.katex .katex-logo .t{margin-left:-.23em}.katex .katex-logo .e{margin-left:-.1667em;position:relative;top:.2155em}.katex .katex-logo .x{margin-left:-.125em}.katex .rule{display:inline-block;border:0 solid;position:relative}.katex .overline .overline-line{width:100%}.katex .overline .overline-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .overline .overline-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .sqrt>.sqrt-sign{position:relative}.katex .sqrt .sqrt-line{width:100%}.katex .sqrt .sqrt-line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .sqrt .sqrt-line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer,.katex .sizing{display:inline-block}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:2em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:3.46em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:4.14em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.98em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.47142857em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.95714286em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.55714286em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.875em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.125em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.25em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.5em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.8em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.1625em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.5875em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:3.1125em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.77777778em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.88888889em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.6em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.92222222em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.3em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.76666667em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.7em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.8em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.9em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.2em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.44em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.73em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:2.07em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.49em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.58333333em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.66666667em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.75em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.83333333em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44166667em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.725em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.075em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.48611111em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.55555556em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.625em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.69444444em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.20138889em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.4375em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72916667em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.28901734em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.40462428em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.46242775em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.52023121em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.57803468em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69364162em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83236994em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.19653179em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.43930636em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.24154589em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.33816425em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.38647343em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.43478261em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.48309179em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.57971014em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69565217em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83574879em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20289855em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.20080321em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2811245em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.32128514em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.36144578em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.40160643em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48192771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57831325em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69477912em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8313253em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist>span,.katex .op-limits>.vlist>span{text-align:center}.katex .accent .accent-body>span{width:0}.katex .accent .accent-body.accent-vec>span{position:relative;left:.326em}.katex .mtable .vertical-separator{display:inline-block;margin:0 -.025em;border-right:.05em solid #000}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist{text-align:center}.katex .mtable .col-align-l>.vlist{text-align:left}.katex .mtable .col-align-r>.vlist{text-align:right} \ No newline at end of file
diff --git a/webapp/non_npm_dependencies/katex/dist/katex.min.js b/webapp/non_npm_dependencies/katex/dist/katex.min.js
deleted file mode 100644
index 18b954c5a..000000000
--- a/webapp/non_npm_dependencies/katex/dist/katex.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.katex=e()}})(function(){var e,t,r;return function a(e,t,r){function i(s,l){if(!t[s]){if(!e[s]){var o=typeof require=="function"&&require;if(!l&&o)return o(s,!0);if(n)return n(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var p=t[s]={exports:{}};e[s][0].call(p.exports,function(t){var r=e[s][1][t];return i(r?r:t)},p,p.exports,a,e,t,r)}return t[s].exports}var n=typeof require=="function"&&require;for(var s=0;s<r.length;s++)i(r[s]);return i}({1:[function(e,t,r){var a=e("./src/ParseError");var i=e("./src/Settings");var n=e("./src/buildTree");var s=e("./src/parseTree");var l=e("./src/utils");var o=function(e,t,r){l.clearNode(t);var a=new i(r);var o=s(e,a);var u=n(o,e,a).toNode();t.appendChild(u)};if(typeof document!=="undefined"){if(document.compatMode!=="CSS1Compat"){typeof console!=="undefined"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your "+"website has a suitable doctype.");o=function(){throw new a("KaTeX doesn't work in quirks mode.")}}}var u=function(e,t){var r=new i(t);var a=s(e,r);return n(a,e,r).toMarkup()};var p=function(e,t){var r=new i(t);return s(e,r)};t.exports={render:o,renderToString:u,__parse:p,ParseError:a}},{"./src/ParseError":5,"./src/Settings":7,"./src/buildTree":12,"./src/parseTree":21,"./src/utils":23}],2:[function(e,t,r){"use strict";function a(e){if(!e.__matchAtRelocatable){var t=e.source+"|()";var r="g"+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"");e.__matchAtRelocatable=new RegExp(t,r)}return e.__matchAtRelocatable}function i(e,t,r){if(e.global||e.sticky){throw new Error("matchAt(...): Only non-global regexes are supported")}var i=a(e);i.lastIndex=r;var n=i.exec(t);if(n[n.length-1]==null){n.length=n.length-1;return n}else{return null}}t.exports=i},{}],3:[function(e,t,r){var a=e("match-at");var i=e("./ParseError");function n(e){this._input=e}function s(e,t,r){this.text=e;this.data=t;this.position=r}var l=new RegExp("([ \r\n ]+)|("+"---?"+"|[!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff]"+"|[\ud800-\udbff][\udc00-\udfff]"+"|\\\\(?:[a-zA-Z]+|[^\ud800-\udfff])"+")");var o=/\s*/;n.prototype._innerLex=function(e,t){var r=this._input;if(e===r.length){return new s("EOF",null,e)}var n=a(l,r,e);if(n===null){throw new i("Unexpected character: '"+r[e]+"'",this,e)}else if(n[2]){return new s(n[2],null,e+n[2].length)}else if(t){return this._innerLex(e+n[1].length,true)}else{return new s(" ",null,e+n[1].length)}};var u=/#[a-z0-9]+|[a-z]+/i;n.prototype._innerLexColor=function(e){var t=this._input;var r=a(o,t,e)[0];e+=r.length;var n;if(n=a(u,t,e)){return new s(n[0],null,e+n[0].length)}else{throw new i("Invalid color",this,e)}};var p=/(-?)\s*(\d+(?:\.\d*)?|\.\d+)\s*([a-z]{2})/;n.prototype._innerLexSize=function(e){var t=this._input;var r=a(o,t,e)[0];e+=r.length;var n;if(n=a(p,t,e)){var l=n[3];if(l!=="em"&&l!=="ex"){throw new i("Invalid unit: '"+l+"'",this,e)}return new s(n[0],{number:+(n[1]+n[2]),unit:l},e+n[0].length)}throw new i("Invalid size",this,e)};n.prototype._innerLexWhitespace=function(e){var t=this._input;var r=a(o,t,e)[0];e+=r.length;return new s(r[0],null,e)};n.prototype.lex=function(e,t){if(t==="math"){return this._innerLex(e,true)}else if(t==="text"){return this._innerLex(e,false)}else if(t==="color"){return this._innerLexColor(e)}else if(t==="size"){return this._innerLexSize(e)}else if(t==="whitespace"){return this._innerLexWhitespace(e)}};t.exports=n},{"./ParseError":5,"match-at":2}],4:[function(e,t,r){function a(e){this.style=e.style;this.color=e.color;this.size=e.size;this.phantom=e.phantom;this.font=e.font;if(e.parentStyle===undefined){this.parentStyle=e.style}else{this.parentStyle=e.parentStyle}if(e.parentSize===undefined){this.parentSize=e.size}else{this.parentSize=e.parentSize}}a.prototype.extend=function(e){var t={style:this.style,size:this.size,color:this.color,parentStyle:this.style,parentSize:this.size,phantom:this.phantom,font:this.font};for(var r in e){if(e.hasOwnProperty(r)){t[r]=e[r]}}return new a(t)};a.prototype.withStyle=function(e){return this.extend({style:e})};a.prototype.withSize=function(e){return this.extend({size:e})};a.prototype.withColor=function(e){return this.extend({color:e})};a.prototype.withPhantom=function(){return this.extend({phantom:true})};a.prototype.withFont=function(e){return this.extend({font:e})};a.prototype.reset=function(){return this.extend({})};var i={"katex-blue":"#6495ed","katex-orange":"#ffa500","katex-pink":"#ff00af","katex-red":"#df0030","katex-green":"#28ae7b","katex-gray":"gray","katex-purple":"#9d38bd","katex-blueA":"#c7e9f1","katex-blueB":"#9cdceb","katex-blueC":"#58c4dd","katex-blueD":"#29abca","katex-blueE":"#1c758a","katex-tealA":"#acead7","katex-tealB":"#76ddc0","katex-tealC":"#5cd0b3","katex-tealD":"#55c1a7","katex-tealE":"#49a88f","katex-greenA":"#c9e2ae","katex-greenB":"#a6cf8c","katex-greenC":"#83c167","katex-greenD":"#77b05d","katex-greenE":"#699c52","katex-goldA":"#f7c797","katex-goldB":"#f9b775","katex-goldC":"#f0ac5f","katex-goldD":"#e1a158","katex-goldE":"#c78d46","katex-redA":"#f7a1a3","katex-redB":"#ff8080","katex-redC":"#fc6255","katex-redD":"#e65a4c","katex-redE":"#cf5044","katex-maroonA":"#ecabc1","katex-maroonB":"#ec92ab","katex-maroonC":"#c55f73","katex-maroonD":"#a24d61","katex-maroonE":"#94424f","katex-purpleA":"#caa3e8","katex-purpleB":"#b189c6","katex-purpleC":"#9a72ac","katex-purpleD":"#715582","katex-purpleE":"#644172","katex-mintA":"#f5f9e8","katex-mintB":"#edf2df","katex-mintC":"#e0e5cc","katex-grayA":"#fdfdfd","katex-grayB":"#f7f7f7","katex-grayC":"#eeeeee","katex-grayD":"#dddddd","katex-grayE":"#cccccc","katex-grayF":"#aaaaaa","katex-grayG":"#999999","katex-grayH":"#555555","katex-grayI":"#333333","katex-kaBlue":"#314453","katex-kaGreen":"#639b24"};a.prototype.getColor=function(){if(this.phantom){return"transparent"}else{return i[this.color]||this.color}};t.exports=a},{}],5:[function(e,t,r){function a(e,t,r){var i="KaTeX parse error: "+e;if(t!==undefined&&r!==undefined){i+=" at position "+r+": ";var n=t._input;n=n.slice(0,r)+"\u0332"+n.slice(r);var s=Math.max(0,r-15);var l=r+15;i+=n.slice(s,l)}var o=new Error(i);o.name="ParseError";o.__proto__=a.prototype;o.position=r;return o}a.prototype.__proto__=Error.prototype;t.exports=a},{}],6:[function(e,t,r){var a=e("./functions");var i=e("./environments");var n=e("./Lexer");var s=e("./symbols");var l=e("./utils");var o=e("./parseData");var u=e("./ParseError");function p(e,t){this.lexer=new n(e);this.settings=t}var h=o.ParseNode;function c(e,t){this.result=e;this.isFunction=t}p.prototype.expect=function(e,t){if(this.nextToken.text!==e){throw new u("Expected '"+e+"', got '"+this.nextToken.text+"'",this.lexer,this.nextToken.position)}if(t!==false){this.consume()}};p.prototype.consume=function(){this.pos=this.nextToken.position;this.nextToken=this.lexer.lex(this.pos,this.mode)};p.prototype.parse=function(){this.mode="math";this.pos=0;this.nextToken=this.lexer.lex(this.pos,this.mode);var e=this.parseInput();return e};p.prototype.parseInput=function(){var e=this.parseExpression(false);this.expect("EOF",false);return e};var v=["}","\\end","\\right","&","\\\\","\\cr"];p.prototype.parseExpression=function(e,t){var r=[];while(true){var a=this.nextToken;var i=this.pos;if(v.indexOf(a.text)!==-1){break}if(t&&a.text===t){break}var n=this.parseAtom();if(!n){if(!this.settings.throwOnError&&a.text[0]==="\\"){var s=this.handleUnsupportedCmd();r.push(s);i=a.position;continue}break}if(e&&n.type==="infix"){this.pos=i;this.nextToken=a;break}r.push(n)}return this.handleInfixNodes(r)};p.prototype.handleInfixNodes=function(e){var t=-1;var r;for(var a=0;a<e.length;a++){var i=e[a];if(i.type==="infix"){if(t!==-1){throw new u("only one infix operator per group",this.lexer,-1)}t=a;r=i.value.replaceWith}}if(t!==-1){var n;var s;var l=e.slice(0,t);var o=e.slice(t+1);if(l.length===1&&l[0].type==="ordgroup"){n=l[0]}else{n=new h("ordgroup",l,this.mode)}if(o.length===1&&o[0].type==="ordgroup"){s=o[0]}else{s=new h("ordgroup",o,this.mode)}var p=this.callFunction(r,[n,s],null);return[new h(p.type,p,this.mode)]}else{return e}};var m=1;p.prototype.handleSupSubscript=function(e){var t=this.nextToken.text;var r=this.pos;this.consume();var i=this.parseGroup();if(!i){if(!this.settings.throwOnError&&this.nextToken.text[0]==="\\"){return this.handleUnsupportedCmd()}else{throw new u("Expected group after '"+t+"'",this.lexer,r+1)}}else if(i.isFunction){var n=a[i.result].greediness;if(n>m){return this.parseFunction(i)}else{throw new u("Got function '"+i.result+"' with no arguments "+"as "+e,this.lexer,r+1)}}else{return i.result}};p.prototype.handleUnsupportedCmd=function(){var e=this.nextToken.text;var t=[];for(var r=0;r<e.length;r++){t.push(new h("textord",e[r],"text"))}var a=new h("text",{body:t,type:"text"},this.mode);var i=new h("color",{color:this.settings.errorColor,value:[a],type:"color"},this.mode);this.consume();return i};p.prototype.parseAtom=function(){var e=this.parseImplicitGroup();if(this.mode==="text"){return e}var t;var r;while(true){var a=this.nextToken;if(a.text==="\\limits"||a.text==="\\nolimits"){if(!e||e.type!=="op"){throw new u("Limit controls must follow a math operator",this.lexer,this.pos)}else{var i=a.text==="\\limits";e.value.limits=i;e.value.alwaysHandleSupSub=true}this.consume()}else if(a.text==="^"){if(t){throw new u("Double superscript",this.lexer,this.pos)}t=this.handleSupSubscript("superscript")}else if(a.text==="_"){if(r){throw new u("Double subscript",this.lexer,this.pos)}r=this.handleSupSubscript("subscript")}else if(a.text==="'"){var n=new h("textord","\\prime",this.mode);var s=[n];this.consume();while(this.nextToken.text==="'"){s.push(n);this.consume()}t=new h("ordgroup",s,this.mode)}else{break}}if(t||r){return new h("supsub",{base:e,sup:t,sub:r},this.mode)}else{return e}};var f=["\\tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];var d=["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"];p.prototype.parseImplicitGroup=function(){var e=this.parseSymbol();if(e==null){return this.parseFunction()}var t=e.result;var r;if(t==="\\left"){var a=this.parseFunction(e);r=this.parseExpression(false);this.expect("\\right",false);var n=this.parseFunction();return new h("leftright",{body:r,left:a.value.value,right:n.value.value},this.mode)}else if(t==="\\begin"){var s=this.parseFunction(e);var o=s.value.name;if(!i.hasOwnProperty(o)){throw new u("No such environment: "+o,this.lexer,s.value.namepos)}var p=i[o];var c=this.parseArguments("\\begin{"+o+"}",p);var v={mode:this.mode,envName:o,parser:this,lexer:this.lexer,positions:c.pop()};var m=p.handler(v,c);this.expect("\\end",false);var g=this.parseFunction();if(g.value.name!==o){throw new u("Mismatch: \\begin{"+o+"} matched "+"by \\end{"+g.value.name+"}",this.lexer)}m.position=g.position;return m}else if(l.contains(f,t)){r=this.parseExpression(false);return new h("sizing",{size:"size"+(l.indexOf(f,t)+1),value:r},this.mode)}else if(l.contains(d,t)){r=this.parseExpression(true);return new h("styling",{style:t.slice(1,t.length-5),value:r},this.mode)}else{return this.parseFunction(e)}};p.prototype.parseFunction=function(e){if(!e){e=this.parseGroup()}if(e){if(e.isFunction){var t=e.result;var r=a[t];if(this.mode==="text"&&!r.allowedInText){throw new u("Can't use function '"+t+"' in text mode",this.lexer,e.position)}var i=this.parseArguments(t,r);var n=this.callFunction(t,i,i.pop());return new h(n.type,n,this.mode)}else{return e.result}}else{return null}};p.prototype.callFunction=function(e,t,r){var i={funcName:e,parser:this,lexer:this.lexer,positions:r};return a[e].handler(i,t)};p.prototype.parseArguments=function(e,t){var r=t.numArgs+t.numOptionalArgs;if(r===0){return[[this.pos]]}var i=t.greediness;var n=[this.pos];var s=[];for(var l=0;l<r;l++){var o=t.argTypes&&t.argTypes[l];var p;if(l<t.numOptionalArgs){if(o){p=this.parseSpecialGroup(o,true)}else{p=this.parseOptionalGroup()}if(!p){s.push(null);n.push(this.pos);continue}}else{if(o){p=this.parseSpecialGroup(o)}else{p=this.parseGroup()}if(!p){if(!this.settings.throwOnError&&this.nextToken.text[0]==="\\"){p=new c(this.handleUnsupportedCmd(this.nextToken.text),false)}else{throw new u("Expected group after '"+e+"'",this.lexer,this.pos)}}}var h;if(p.isFunction){var v=a[p.result].greediness;if(v>i){h=this.parseFunction(p)}else{throw new u("Got function '"+p.result+"' as "+"argument to '"+e+"'",this.lexer,this.pos-1)}}else{h=p.result}s.push(h);n.push(this.pos)}s.push(n);return s};p.prototype.parseSpecialGroup=function(e,t){var r=this.mode;if(e==="original"){e=r}if(e==="color"||e==="size"){var a=this.nextToken;if(t&&a.text!=="["){return null}this.mode=e;this.expect(t?"[":"{");var i=this.nextToken;this.mode=r;var n;if(e==="color"){n=i.text}else{n=i.data}this.consume();this.expect(t?"]":"}");return new c(new h(e,n,r),false)}else if(e==="text"){var s=this.lexer.lex(this.pos,"whitespace");this.pos=s.position}this.mode=e;this.nextToken=this.lexer.lex(this.pos,e);var l;if(t){l=this.parseOptionalGroup()}else{l=this.parseGroup()}this.mode=r;this.nextToken=this.lexer.lex(this.pos,r);return l};p.prototype.parseGroup=function(){if(this.nextToken.text==="{"){this.consume();var e=this.parseExpression(false);this.expect("}");return new c(new h("ordgroup",e,this.mode),false)}else{return this.parseSymbol()}};p.prototype.parseOptionalGroup=function(){if(this.nextToken.text==="["){this.consume();var e=this.parseExpression(false,"]");this.expect("]");return new c(new h("ordgroup",e,this.mode),false)}else{return null}};p.prototype.parseSymbol=function(){var e=this.nextToken;if(a[e.text]){this.consume();return new c(e.text,true)}else if(s[this.mode][e.text]){this.consume();return new c(new h(s[this.mode][e.text].group,e.text,this.mode),false)}else{return null}};p.prototype.ParseNode=h;t.exports=p},{"./Lexer":3,"./ParseError":5,"./environments":15,"./functions":18,"./parseData":20,"./symbols":22,"./utils":23}],7:[function(e,t,r){function a(e,t){return e===undefined?t:e}function i(e){e=e||{};this.displayMode=a(e.displayMode,false);this.throwOnError=a(e.throwOnError,true);this.errorColor=a(e.errorColor,"#cc0000")}t.exports=i},{}],8:[function(e,t,r){function a(e,t,r,a){this.id=e;this.size=t;this.cramped=a;this.sizeMultiplier=r}a.prototype.sup=function(){return m[f[this.id]]};a.prototype.sub=function(){return m[d[this.id]]};a.prototype.fracNum=function(){return m[g[this.id]]};a.prototype.fracDen=function(){return m[y[this.id]]};a.prototype.cramp=function(){return m[b[this.id]]};a.prototype.cls=function(){return c[this.size]+(this.cramped?" cramped":" uncramped")};a.prototype.reset=function(){return v[this.size]};var i=0;var n=1;var s=2;var l=3;var o=4;var u=5;var p=6;var h=7;var c=["displaystyle textstyle","textstyle","scriptstyle","scriptscriptstyle"];var v=["reset-textstyle","reset-textstyle","reset-scriptstyle","reset-scriptscriptstyle"];var m=[new a(i,0,1,false),new a(n,0,1,true),new a(s,1,1,false),new a(l,1,1,true),new a(o,2,.7,false),new a(u,2,.7,true),new a(p,3,.5,false),new a(h,3,.5,true)];var f=[o,u,o,u,p,h,p,h];var d=[u,u,u,u,h,h,h,h];var g=[s,l,o,u,p,h,p,h];var y=[l,l,u,u,h,h,h,h];var b=[n,n,l,l,u,u,h,h];t.exports={DISPLAY:m[i],TEXT:m[s],SCRIPT:m[o],SCRIPTSCRIPT:m[p]}},{}],9:[function(e,t,r){var a=e("./domTree");var i=e("./fontMetrics");var n=e("./symbols");var s=e("./utils");var l=["\\Gamma","\\Delta","\\Theta","\\Lambda","\\Xi","\\Pi","\\Sigma","\\Upsilon","\\Phi","\\Psi","\\Omega"];var o=["\u0131","\u0237"];var u=function(e,t,r,s,l){if(n[r][e]&&n[r][e].replace){e=n[r][e].replace}var o=i.getCharacterMetrics(e,t);var u;if(o){u=new a.symbolNode(e,o.height,o.depth,o.italic,o.skew,l)}else{typeof console!=="undefined"&&console.warn("No character metrics for '"+e+"' in style '"+t+"'");u=new a.symbolNode(e,0,0,0,0,l)}if(s){u.style.color=s}return u};var p=function(e,t,r,a){if(e==="\\"||n[t][e].font==="main"){return u(e,"Main-Regular",t,r,a)}else{return u(e,"AMS-Regular",t,r,a.concat(["amsrm"]))}};var h=function(e,t,r,a,i){if(i==="mathord"){return c(e,t,r,a)}else if(i==="textord"){return u(e,"Main-Regular",t,r,a.concat(["mathrm"]))}else{throw new Error("unexpected type: "+i+" in mathDefault")}};var c=function(e,t,r,a){if(/[0-9]/.test(e.charAt(0))||s.contains(o,e)||s.contains(l,e)){return u(e,"Main-Italic",t,r,a.concat(["mainit"]))}else{return u(e,"Math-Italic",t,r,a.concat(["mathit"]))}};var v=function(e,t,r){var a=e.mode;var l=e.value;if(n[a][l]&&n[a][l].replace){l=n[a][l].replace}var p=["mord"];var v=t.getColor();var m=t.font;if(m){if(m==="mathit"||s.contains(o,l)){return c(l,a,v,p)}else{var f=w[m].fontName;if(i.getCharacterMetrics(l,f)){return u(l,f,a,v,p.concat([m]))}else{return h(l,a,v,p,r)}}}else{return h(l,a,v,p,r)}};var m=function(e){var t=0;var r=0;var a=0;if(e.children){for(var i=0;i<e.children.length;i++){if(e.children[i].height>t){t=e.children[i].height}if(e.children[i].depth>r){r=e.children[i].depth}if(e.children[i].maxFontSize>a){a=e.children[i].maxFontSize}}}e.height=t;e.depth=r;e.maxFontSize=a};var f=function(e,t,r){var i=new a.span(e,t);m(i);if(r){i.style.color=r}return i};var d=function(e){var t=new a.documentFragment(e);m(t);return t};var g=function(e,t){var r=f([],[new a.symbolNode("\u200b")]);r.style.fontSize=t/e.style.sizeMultiplier+"em";var i=f(["fontsize-ensurer","reset-"+e.size,"size5"],[r]);return i};var y=function(e,t,r,i){var n;var s;var l;if(t==="individualShift"){var o=e;e=[o[0]];n=-o[0].shift-o[0].elem.depth;s=n;for(l=1;l<o.length;l++){var u=-o[l].shift-s-o[l].elem.depth;var p=u-(o[l-1].elem.height+o[l-1].elem.depth);s=s+u;e.push({type:"kern",size:p});e.push(o[l])}}else if(t==="top"){var h=r;for(l=0;l<e.length;l++){if(e[l].type==="kern"){h-=e[l].size}else{h-=e[l].elem.height+e[l].elem.depth}}n=h}else if(t==="bottom"){n=-r}else if(t==="shift"){n=-e[0].elem.depth-r}else if(t==="firstBaseline"){n=-e[0].elem.depth}else{n=0}var c=0;for(l=0;l<e.length;l++){if(e[l].type==="elem"){c=Math.max(c,e[l].elem.maxFontSize)}}var v=g(i,c);var m=[];s=n;for(l=0;l<e.length;l++){if(e[l].type==="kern"){s+=e[l].size}else{var d=e[l].elem;var y=-d.depth-s;s+=d.height+d.depth;var b=f([],[v,d]);b.height-=y;b.depth+=y;b.style.top=y+"em";m.push(b)}}var x=f(["baseline-fix"],[v,new a.symbolNode("\u200b")]);m.push(x);var w=f(["vlist"],m);w.height=Math.max(s,w.height);w.depth=Math.max(-n,w.depth);return w};var b={size1:.5,size2:.7,size3:.8,size4:.9,size5:1,size6:1.2,size7:1.44,size8:1.73,size9:2.07,size10:2.49};var x={"\\qquad":{size:"2em",className:"qquad"},"\\quad":{size:"1em",className:"quad"},"\\enspace":{size:"0.5em",className:"enspace"},"\\;":{size:"0.277778em",className:"thickspace"},"\\:":{size:"0.22222em",className:"mediumspace"},"\\,":{size:"0.16667em",className:"thinspace"},"\\!":{size:"-0.16667em",className:"negativethinspace"}};var w={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}};t.exports={fontMap:w,makeSymbol:u,mathsym:p,makeSpan:f,makeFragment:d,makeVList:y,makeOrd:v,sizingMultiplier:b,spacingFunctions:x}},{"./domTree":14,"./fontMetrics":16,"./symbols":22,"./utils":23}],10:[function(e,t,r){var a=e("./ParseError");var i=e("./Style");var n=e("./buildCommon");var s=e("./delimiter");var l=e("./domTree");var o=e("./fontMetrics");var u=e("./utils");var p=n.makeSpan;var h=function(e,t,r){var a=[];for(var i=0;i<e.length;i++){var n=e[i];a.push(b(n,t,r));r=n}return a};var c={mathord:"mord",textord:"mord",bin:"mbin",rel:"mrel",text:"mord",open:"mopen",close:"mclose",inner:"minner",genfrac:"mord",array:"mord",spacing:"mord",punct:"mpunct",ordgroup:"mord",op:"mop",katex:"mord",overline:"mord",rule:"mord",leftright:"minner",sqrt:"mord",accent:"mord"};var v=function(e){if(e==null){return c.mathord}else if(e.type==="supsub"){return v(e.value.base)}else if(e.type==="llap"||e.type==="rlap"){return v(e.value)}else if(e.type==="color"){return v(e.value.value)}else if(e.type==="sizing"){return v(e.value.value)}else if(e.type==="styling"){return v(e.value.value)}else if(e.type==="delimsizing"){return c[e.value.delimType]}else{return c[e.type]}};var m=function(e,t){if(!e){return false}else if(e.type==="op"){return e.value.limits&&(t.style.size===i.DISPLAY.size||e.value.alwaysHandleSupSub)}else if(e.type==="accent"){return d(e.value.base)}else{return null}};var f=function(e){if(!e){return false}else if(e.type==="ordgroup"){if(e.value.length===1){return f(e.value[0])}else{return e}}else if(e.type==="color"){if(e.value.value.length===1){return f(e.value.value[0])}else{return e}}else{return e}};var d=function(e){var t=f(e);return t.type==="mathord"||t.type==="textord"||t.type==="bin"||t.type==="rel"||t.type==="inner"||t.type==="open"||t.type==="close"||t.type==="punct"};var g=function(e){return p(["sizing","reset-"+e.size,"size5",e.style.reset(),i.TEXT.cls(),"nulldelimiter"])};var y={};y.mathord=function(e,t,r){return n.makeOrd(e,t,"mathord")};y.textord=function(e,t,r){return n.makeOrd(e,t,"textord")};y.bin=function(e,t,r){var a="mbin";var i=r;while(i&&i.type==="color"){var s=i.value.value;i=s[s.length-1]}if(!r||u.contains(["mbin","mopen","mrel","mop","mpunct"],v(i))){e.type="textord";a="mord"}return n.mathsym(e.value,e.mode,t.getColor(),[a])};y.rel=function(e,t,r){return n.mathsym(e.value,e.mode,t.getColor(),["mrel"])};y.open=function(e,t,r){return n.mathsym(e.value,e.mode,t.getColor(),["mopen"])};y.close=function(e,t,r){return n.mathsym(e.value,e.mode,t.getColor(),["mclose"])};y.inner=function(e,t,r){return n.mathsym(e.value,e.mode,t.getColor(),["minner"])};y.punct=function(e,t,r){return n.mathsym(e.value,e.mode,t.getColor(),["mpunct"])};y.ordgroup=function(e,t,r){return p(["mord",t.style.cls()],h(e.value,t.reset()))};y.text=function(e,t,r){return p(["text","mord",t.style.cls()],h(e.value.body,t.reset()))};y.color=function(e,t,r){var a=h(e.value.value,t.withColor(e.value.color),r);return new n.makeFragment(a)};y.supsub=function(e,t,r){if(m(e.value.base,t)){return y[e.value.base.type](e,t,r)}var a=b(e.value.base,t.reset());var s;var u;var h;var c;if(e.value.sup){h=b(e.value.sup,t.withStyle(t.style.sup()));s=p([t.style.reset(),t.style.sup().cls()],[h])}if(e.value.sub){c=b(e.value.sub,t.withStyle(t.style.sub()));u=p([t.style.reset(),t.style.sub().cls()],[c])}var f;var g;if(d(e.value.base)){f=0;g=0}else{f=a.height-o.metrics.supDrop;g=a.depth+o.metrics.subDrop}var x;if(t.style===i.DISPLAY){x=o.metrics.sup1}else if(t.style.cramped){x=o.metrics.sup3}else{x=o.metrics.sup2}var w=i.TEXT.sizeMultiplier*t.style.sizeMultiplier;var k=.5/o.metrics.ptPerEm/w+"em";var z;if(!e.value.sup){g=Math.max(g,o.metrics.sub1,c.height-.8*o.metrics.xHeight);z=n.makeVList([{type:"elem",elem:u}],"shift",g,t);z.children[0].style.marginRight=k;if(a instanceof l.symbolNode){z.children[0].style.marginLeft=-a.italic+"em"}}else if(!e.value.sub){f=Math.max(f,x,h.depth+.25*o.metrics.xHeight);z=n.makeVList([{type:"elem",elem:s}],"shift",-f,t);z.children[0].style.marginRight=k}else{f=Math.max(f,x,h.depth+.25*o.metrics.xHeight);g=Math.max(g,o.metrics.sub2);var S=o.metrics.defaultRuleThickness;if(f-h.depth-(c.height-g)<4*S){g=4*S-(f-h.depth)+c.height;var M=.8*o.metrics.xHeight-(f-h.depth);if(M>0){f+=M;g-=M}}z=n.makeVList([{type:"elem",elem:u,shift:g},{type:"elem",elem:s,shift:-f}],"individualShift",null,t);if(a instanceof l.symbolNode){z.children[0].style.marginLeft=-a.italic+"em"}z.children[0].style.marginRight=k;z.children[1].style.marginRight=k}return p([v(e.value.base)],[a,z])};y.genfrac=function(e,t,r){var a=t.style;if(e.value.size==="display"){a=i.DISPLAY}else if(e.value.size==="text"){a=i.TEXT}var l=a.fracNum();var u=a.fracDen();var h=b(e.value.numer,t.withStyle(l));var c=p([a.reset(),l.cls()],[h]);var v=b(e.value.denom,t.withStyle(u));var m=p([a.reset(),u.cls()],[v]);var f;if(e.value.hasBarLine){f=o.metrics.defaultRuleThickness/t.style.sizeMultiplier}else{f=0}var d;var y;var x;if(a.size===i.DISPLAY.size){d=o.metrics.num1;if(f>0){y=3*f}else{y=7*o.metrics.defaultRuleThickness}x=o.metrics.denom1}else{if(f>0){d=o.metrics.num2;y=f}else{d=o.metrics.num3;y=3*o.metrics.defaultRuleThickness}x=o.metrics.denom2}var w;if(f===0){var k=d-h.depth-(v.height-x);if(k<y){d+=.5*(y-k);x+=.5*(y-k)}w=n.makeVList([{type:"elem",elem:m,shift:x},{type:"elem",elem:c,shift:-d}],"individualShift",null,t)}else{var z=o.metrics.axisHeight;if(d-h.depth-(z+.5*f)<y){d+=y-(d-h.depth-(z+.5*f))}if(z-.5*f-(v.height-x)<y){x+=y-(z-.5*f-(v.height-x))}var S=p([t.style.reset(),i.TEXT.cls(),"frac-line"]);S.height=f;var M=-(z-.5*f);w=n.makeVList([{type:"elem",elem:m,shift:x},{type:"elem",elem:S,shift:M},{type:"elem",elem:c,shift:-d}],"individualShift",null,t)}w.height*=a.sizeMultiplier/t.style.sizeMultiplier;w.depth*=a.sizeMultiplier/t.style.sizeMultiplier;var T;if(a.size===i.DISPLAY.size){T=o.metrics.delim1}else{T=o.metrics.getDelim2(a)}var q;var N;if(e.value.leftDelim==null){q=g(t)}else{q=s.customSizedDelim(e.value.leftDelim,T,true,t.withStyle(a),e.mode)}if(e.value.rightDelim==null){N=g(t)}else{N=s.customSizedDelim(e.value.rightDelim,T,true,t.withStyle(a),e.mode)}return p(["mord",t.style.reset(),a.cls()],[q,p(["mfrac"],[w]),N],t.getColor())};y.array=function(e,t,r){var i;var s;var l=e.value.body.length;var h=0;var c=new Array(l);var v=1/o.metrics.ptPerEm;var m=5*v;var f=12*v;var d=u.deflt(e.value.arraystretch,1);var g=d*f;var y=.7*g;var x=.3*g;var w=0;for(i=0;i<e.value.body.length;++i){var k=e.value.body[i];var z=y;var S=x;if(h<k.length){h=k.length}var M=new Array(k.length);for(s=0;s<k.length;++s){var T=b(k[s],t);if(S<T.depth){S=T.depth}if(z<T.height){z=T.height}M[s]=T}var q=0;if(e.value.rowGaps[i]){q=e.value.rowGaps[i].value;switch(q.unit){case"em":q=q.number;break;case"ex":q=q.number*o.metrics.emPerEx;break;default:console.error("Can't handle unit "+q.unit);q=0}if(q>0){q+=x;if(S<q){S=q}q=0}}M.height=z;M.depth=S;w+=z;M.pos=w;w+=S+q;c[i]=M}var N=w/2+o.metrics.axisHeight;var A=e.value.cols||[];var C=[];var R;var E;for(s=0,E=0;s<h||E<A.length;++s,++E){var P=A[E]||{};var D=true;while(P.type==="separator"){if(!D){R=p(["arraycolsep"],[]);R.style.width=o.metrics.doubleRuleSep+"em";C.push(R)}if(P.separator==="|"){var L=p(["vertical-separator"],[]);L.style.height=w+"em";L.style.verticalAlign=-(w-N)+"em";C.push(L)}else{throw new a("Invalid separator type: "+P.separator)}E++;P=A[E]||{};D=false}if(s>=h){continue}var O;if(s>0||e.value.hskipBeforeAndAfter){O=u.deflt(P.pregap,m);if(O!==0){R=p(["arraycolsep"],[]);R.style.width=O+"em";C.push(R)}}var I=[];for(i=0;i<l;++i){var B=c[i];var F=B[s];if(!F){continue}var _=B.pos-N;F.depth=B.depth;F.height=B.height;I.push({type:"elem",elem:F,shift:_})}I=n.makeVList(I,"individualShift",null,t);I=p(["col-align-"+(P.align||"c")],[I]);C.push(I);if(s<h-1||e.value.hskipBeforeAndAfter){O=u.deflt(P.postgap,m);if(O!==0){R=p(["arraycolsep"],[]);R.style.width=O+"em";C.push(R)}}}c=p(["mtable"],C);return p(["mord"],[c],t.getColor())};y.spacing=function(e,t,r){if(e.value==="\\ "||e.value==="\\space"||e.value===" "||e.value==="~"){return p(["mord","mspace"],[n.mathsym(e.value,e.mode)])}else{return p(["mord","mspace",n.spacingFunctions[e.value].className])}};y.llap=function(e,t,r){var a=p(["inner"],[b(e.value.body,t.reset())]);var i=p(["fix"],[]);return p(["llap",t.style.cls()],[a,i])};y.rlap=function(e,t,r){var a=p(["inner"],[b(e.value.body,t.reset())]);var i=p(["fix"],[]);return p(["rlap",t.style.cls()],[a,i])};y.op=function(e,t,r){var a;var s;var l=false;if(e.type==="supsub"){a=e.value.sup;s=e.value.sub;e=e.value.base;l=true}var h=["\\smallint"];var c=false;if(t.style.size===i.DISPLAY.size&&e.value.symbol&&!u.contains(h,e.value.body)){c=true}var v;var m=0;var f=0;if(e.value.symbol){var d=c?"Size2-Regular":"Size1-Regular";v=n.makeSymbol(e.value.body,d,"math",t.getColor(),["op-symbol",c?"large-op":"small-op","mop"]);m=(v.height-v.depth)/2-o.metrics.axisHeight*t.style.sizeMultiplier;f=v.italic}else{var g=[];for(var y=1;y<e.value.body.length;y++){g.push(n.mathsym(e.value.body[y],e.mode))}v=p(["mop"],g,t.getColor())}if(l){v=p([],[v]);var x;var w;var k;var z;if(a){var S=b(a,t.withStyle(t.style.sup()));x=p([t.style.reset(),t.style.sup().cls()],[S]);w=Math.max(o.metrics.bigOpSpacing1,o.metrics.bigOpSpacing3-S.depth)}if(s){var M=b(s,t.withStyle(t.style.sub()));k=p([t.style.reset(),t.style.sub().cls()],[M]);z=Math.max(o.metrics.bigOpSpacing2,o.metrics.bigOpSpacing4-M.height)}var T;var q;var N;if(!a){q=v.height-m;T=n.makeVList([{type:"kern",size:o.metrics.bigOpSpacing5},{type:"elem",elem:k},{type:"kern",size:z},{type:"elem",elem:v}],"top",q,t);T.children[0].style.marginLeft=-f+"em"}else if(!s){N=v.depth+m;T=n.makeVList([{type:"elem",elem:v},{type:"kern",size:w},{type:"elem",elem:x},{type:"kern",size:o.metrics.bigOpSpacing5}],"bottom",N,t);T.children[1].style.marginLeft=f+"em"}else if(!a&&!s){return v}else{N=o.metrics.bigOpSpacing5+k.height+k.depth+z+v.depth+m;T=n.makeVList([{type:"kern",size:o.metrics.bigOpSpacing5},{type:"elem",elem:k},{type:"kern",size:z},{type:"elem",elem:v},{type:"kern",size:w},{type:"elem",elem:x},{type:"kern",size:o.metrics.bigOpSpacing5}],"bottom",N,t);T.children[0].style.marginLeft=-f+"em";T.children[2].style.marginLeft=f+"em"}return p(["mop","op-limits"],[T])}else{if(e.value.symbol){v.style.top=m+"em"}return v}};y.katex=function(e,t,r){var a=p(["k"],[n.mathsym("K",e.mode)]);var i=p(["a"],[n.mathsym("A",e.mode)]);i.height=(i.height+.2)*.75;i.depth=(i.height-.2)*.75;var s=p(["t"],[n.mathsym("T",e.mode)]);var l=p(["e"],[n.mathsym("E",e.mode)]);l.height=l.height-.2155;l.depth=l.depth+.2155;var o=p(["x"],[n.mathsym("X",e.mode)]);return p(["katex-logo","mord"],[a,i,s,l,o],t.getColor())};y.overline=function(e,t,r){var a=b(e.value.body,t.withStyle(t.style.cramp()));var s=o.metrics.defaultRuleThickness/t.style.sizeMultiplier;var l=p([t.style.reset(),i.TEXT.cls(),"overline-line"]);l.height=s;l.maxFontSize=1;var u=n.makeVList([{type:"elem",elem:a},{type:"kern",size:3*s},{type:"elem",elem:l},{type:"kern",size:s}],"firstBaseline",null,t);return p(["overline","mord"],[u],t.getColor())};y.sqrt=function(e,t,r){var a=b(e.value.body,t.withStyle(t.style.cramp()));var l=o.metrics.defaultRuleThickness/t.style.sizeMultiplier;var u=p([t.style.reset(),i.TEXT.cls(),"sqrt-line"],[],t.getColor());u.height=l;u.maxFontSize=1;var h=l;if(t.style.id<i.TEXT.id){h=o.metrics.xHeight}var c=l+h/4;var v=(a.height+a.depth)*t.style.sizeMultiplier;var m=v+c+l;var f=p(["sqrt-sign"],[s.customSizedDelim("\\surd",m,false,t,e.mode)],t.getColor());var d=f.height+f.depth-l;if(d>a.height+a.depth+c){c=(c+d-a.height-a.depth)/2}var g=-(a.height+c+l)+f.height;f.style.top=g+"em";f.height-=g;f.depth+=g;var y;if(a.height===0&&a.depth===0){y=p()}else{y=n.makeVList([{type:"elem",elem:a},{type:"kern",size:c},{type:"elem",elem:u},{type:"kern",size:l}],"firstBaseline",null,t)}if(!e.value.index){return p(["sqrt","mord"],[f,y])}else{var x=b(e.value.index,t.withStyle(i.SCRIPTSCRIPT));var w=p([t.style.reset(),i.SCRIPTSCRIPT.cls()],[x]);var k=Math.max(f.height,y.height);var z=Math.max(f.depth,y.depth);var S=.6*(k-z);var M=n.makeVList([{type:"elem",elem:w}],"shift",-S,t);var T=p(["root"],[M]);return p(["sqrt","mord"],[T,f,y])}};y.sizing=function(e,t,r){var a=h(e.value.value,t.withSize(e.value.size),r);var i=p(["mord"],[p(["sizing","reset-"+t.size,e.value.size,t.style.cls()],a)]);var s=n.sizingMultiplier[e.value.size];i.maxFontSize=s*t.style.sizeMultiplier;return i};y.styling=function(e,t,r){var a={display:i.DISPLAY,text:i.TEXT,script:i.SCRIPT,scriptscript:i.SCRIPTSCRIPT};var n=a[e.value.style];
-var s=h(e.value.value,t.withStyle(n),r);return p([t.style.reset(),n.cls()],s)};y.font=function(e,t,r){var a=e.value.font;return b(e.value.body,t.withFont(a),r)};y.delimsizing=function(e,t,r){var a=e.value.value;if(a==="."){return p([c[e.value.delimType]])}return p([c[e.value.delimType]],[s.sizedDelim(a,e.value.size,t,e.mode)])};y.leftright=function(e,t,r){var a=h(e.value.body,t.reset());var i=0;var n=0;for(var l=0;l<a.length;l++){i=Math.max(a[l].height,i);n=Math.max(a[l].depth,n)}i*=t.style.sizeMultiplier;n*=t.style.sizeMultiplier;var o;if(e.value.left==="."){o=g(t)}else{o=s.leftRightDelim(e.value.left,i,n,t,e.mode)}a.unshift(o);var u;if(e.value.right==="."){u=g(t)}else{u=s.leftRightDelim(e.value.right,i,n,t,e.mode)}a.push(u);return p(["minner",t.style.cls()],a,t.getColor())};y.rule=function(e,t,r){var a=p(["mord","rule"],[],t.getColor());var i=0;if(e.value.shift){i=e.value.shift.number;if(e.value.shift.unit==="ex"){i*=o.metrics.xHeight}}var n=e.value.width.number;if(e.value.width.unit==="ex"){n*=o.metrics.xHeight}var s=e.value.height.number;if(e.value.height.unit==="ex"){s*=o.metrics.xHeight}i/=t.style.sizeMultiplier;n/=t.style.sizeMultiplier;s/=t.style.sizeMultiplier;a.style.borderRightWidth=n+"em";a.style.borderTopWidth=s+"em";a.style.bottom=i+"em";a.width=n;a.height=s+i;a.depth=-i;return a};y.accent=function(e,t,r){var a=e.value.base;var i;if(e.type==="supsub"){var s=e;e=s.value.base;a=e.value.base;s.value.base=a;i=b(s,t.reset(),r)}var l=b(a,t.withStyle(t.style.cramp()));var u;if(d(a)){var h=f(a);var c=b(h,t.withStyle(t.style.cramp()));u=c.skew}else{u=0}var v=Math.min(l.height,o.metrics.xHeight);var m=n.makeSymbol(e.value.accent,"Main-Regular","math",t.getColor());m.italic=0;var g=e.value.accent==="\\vec"?"accent-vec":null;var y=p(["accent-body",g],[p([],[m])]);y=n.makeVList([{type:"elem",elem:l},{type:"kern",size:-v},{type:"elem",elem:y}],"firstBaseline",null,t);y.children[1].style.marginLeft=2*u+"em";var x=p(["mord","accent"],[y]);if(i){i.children[0]=x;i.height=Math.max(x.height,i.height);i.classes[0]="mord";return i}else{return x}};y.phantom=function(e,t,r){var a=h(e.value.value,t.withPhantom(),r);return new n.makeFragment(a)};var b=function(e,t,r){if(!e){return p()}if(y[e.type]){var i=y[e.type](e,t,r);var s;if(t.style!==t.parentStyle){s=t.style.sizeMultiplier/t.parentStyle.sizeMultiplier;i.height*=s;i.depth*=s}if(t.size!==t.parentSize){s=n.sizingMultiplier[t.size]/n.sizingMultiplier[t.parentSize];i.height*=s;i.depth*=s}return i}else{throw new a("Got group of unknown type: '"+e.type+"'")}};var x=function(e,t){e=JSON.parse(JSON.stringify(e));var r=h(e,t);var a=p(["base",t.style.cls()],r);var i=p(["strut"]);var n=p(["strut","bottom"]);i.style.height=a.height+"em";n.style.height=a.height+a.depth+"em";n.style.verticalAlign=-a.depth+"em";var s=p(["katex-html"],[i,n,a]);s.setAttribute("aria-hidden","true");return s};t.exports=x},{"./ParseError":5,"./Style":8,"./buildCommon":9,"./delimiter":13,"./domTree":14,"./fontMetrics":16,"./utils":23}],11:[function(e,t,r){var a=e("./buildCommon");var i=e("./fontMetrics");var n=e("./mathMLTree");var s=e("./ParseError");var l=e("./symbols");var o=e("./utils");var u=a.makeSpan;var p=a.fontMap;var h=function(e,t){if(l[t][e]&&l[t][e].replace){e=l[t][e].replace}return new n.TextNode(e)};var c=function(e,t){var r=t.font;if(!r){return null}var a=e.mode;if(r==="mathit"){return"italic"}var n=e.value;if(o.contains(["\\imath","\\jmath"],n)){return null}if(l[a][n]&&l[a][n].replace){n=l[a][n].replace}var s=p[r].fontName;if(i.getCharacterMetrics(n,s)){return p[t.font].variant}return null};var v={};v.mathord=function(e,t){var r=new n.MathNode("mi",[h(e.value,e.mode)]);var a=c(e,t);if(a){r.setAttribute("mathvariant",a)}return r};v.textord=function(e,t){var r=h(e.value,e.mode);var a=c(e,t)||"normal";var i;if(/[0-9]/.test(e.value)){i=new n.MathNode("mn",[r]);if(t.font){i.setAttribute("mathvariant",a)}}else{i=new n.MathNode("mi",[r]);i.setAttribute("mathvariant",a)}return i};v.bin=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);return t};v.rel=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);return t};v.open=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);return t};v.close=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);return t};v.inner=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);return t};v.punct=function(e){var t=new n.MathNode("mo",[h(e.value,e.mode)]);t.setAttribute("separator","true");return t};v.ordgroup=function(e,t){var r=m(e.value,t);var a=new n.MathNode("mrow",r);return a};v.text=function(e,t){var r=m(e.value.body,t);var a=new n.MathNode("mtext",r);return a};v.color=function(e,t){var r=m(e.value.value,t);var a=new n.MathNode("mstyle",r);a.setAttribute("mathcolor",e.value.color);return a};v.supsub=function(e,t){var r=[f(e.value.base,t)];if(e.value.sub){r.push(f(e.value.sub,t))}if(e.value.sup){r.push(f(e.value.sup,t))}var a;if(!e.value.sub){a="msup"}else if(!e.value.sup){a="msub"}else{a="msubsup"}var i=new n.MathNode(a,r);return i};v.genfrac=function(e,t){var r=new n.MathNode("mfrac",[f(e.value.numer,t),f(e.value.denom,t)]);if(!e.value.hasBarLine){r.setAttribute("linethickness","0px")}if(e.value.leftDelim!=null||e.value.rightDelim!=null){var a=[];if(e.value.leftDelim!=null){var i=new n.MathNode("mo",[new n.TextNode(e.value.leftDelim)]);i.setAttribute("fence","true");a.push(i)}a.push(r);if(e.value.rightDelim!=null){var s=new n.MathNode("mo",[new n.TextNode(e.value.rightDelim)]);s.setAttribute("fence","true");a.push(s)}var l=new n.MathNode("mrow",a);return l}return r};v.array=function(e,t){return new n.MathNode("mtable",e.value.body.map(function(e){return new n.MathNode("mtr",e.map(function(e){return new n.MathNode("mtd",[f(e,t)])}))}))};v.sqrt=function(e,t){var r;if(e.value.index){r=new n.MathNode("mroot",[f(e.value.body,t),f(e.value.index,t)])}else{r=new n.MathNode("msqrt",[f(e.value.body,t)])}return r};v.leftright=function(e,t){var r=m(e.value.body,t);if(e.value.left!=="."){var a=new n.MathNode("mo",[h(e.value.left,e.mode)]);a.setAttribute("fence","true");r.unshift(a)}if(e.value.right!=="."){var i=new n.MathNode("mo",[h(e.value.right,e.mode)]);i.setAttribute("fence","true");r.push(i)}var s=new n.MathNode("mrow",r);return s};v.accent=function(e,t){var r=new n.MathNode("mo",[h(e.value.accent,e.mode)]);var a=new n.MathNode("mover",[f(e.value.base,t),r]);a.setAttribute("accent","true");return a};v.spacing=function(e){var t;if(e.value==="\\ "||e.value==="\\space"||e.value===" "||e.value==="~"){t=new n.MathNode("mtext",[new n.TextNode("\xa0")])}else{t=new n.MathNode("mspace");t.setAttribute("width",a.spacingFunctions[e.value].size)}return t};v.op=function(e){var t;if(e.value.symbol){t=new n.MathNode("mo",[h(e.value.body,e.mode)])}else{t=new n.MathNode("mi",[new n.TextNode(e.value.body.slice(1))])}return t};v.katex=function(e){var t=new n.MathNode("mtext",[new n.TextNode("KaTeX")]);return t};v.font=function(e,t){var r=e.value.font;return f(e.value.body,t.withFont(r))};v.delimsizing=function(e){var t=[];if(e.value.value!=="."){t.push(h(e.value.value,e.mode))}var r=new n.MathNode("mo",t);if(e.value.delimType==="open"||e.value.delimType==="close"){r.setAttribute("fence","true")}else{r.setAttribute("fence","false")}return r};v.styling=function(e,t){var r=m(e.value.value,t);var a=new n.MathNode("mstyle",r);var i={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]};var s=i[e.value.style];a.setAttribute("scriptlevel",s[0]);a.setAttribute("displaystyle",s[1]);return a};v.sizing=function(e,t){var r=m(e.value.value,t);var i=new n.MathNode("mstyle",r);i.setAttribute("mathsize",a.sizingMultiplier[e.value.size]+"em");return i};v.overline=function(e,t){var r=new n.MathNode("mo",[new n.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new n.MathNode("mover",[f(e.value.body,t),r]);a.setAttribute("accent","true");return a};v.rule=function(e){var t=new n.MathNode("mrow");return t};v.llap=function(e,t){var r=new n.MathNode("mpadded",[f(e.value.body,t)]);r.setAttribute("lspace","-1width");r.setAttribute("width","0px");return r};v.rlap=function(e,t){var r=new n.MathNode("mpadded",[f(e.value.body,t)]);r.setAttribute("width","0px");return r};v.phantom=function(e,t,r){var a=m(e.value.value,t);return new n.MathNode("mphantom",a)};var m=function(e,t){var r=[];for(var a=0;a<e.length;a++){var i=e[a];r.push(f(i,t))}return r};var f=function(e,t){if(!e){return new n.MathNode("mrow")}if(v[e.type]){return v[e.type](e,t)}else{throw new s("Got group of unknown type: '"+e.type+"'")}};var d=function(e,t,r){var a=m(e,r);var i=new n.MathNode("mrow",a);var s=new n.MathNode("annotation",[new n.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var l=new n.MathNode("semantics",[i,s]);var o=new n.MathNode("math",[l]);return u(["katex-mathml"],[o])};t.exports=d},{"./ParseError":5,"./buildCommon":9,"./fontMetrics":16,"./mathMLTree":19,"./symbols":22,"./utils":23}],12:[function(e,t,r){var a=e("./buildHTML");var i=e("./buildMathML");var n=e("./buildCommon");var s=e("./Options");var l=e("./Settings");var o=e("./Style");var u=n.makeSpan;var p=function(e,t,r){r=r||new l({});var n=o.TEXT;if(r.displayMode){n=o.DISPLAY}var p=new s({style:n,size:"size5"});var h=i(e,t,p);var c=a(e,p);var v=u(["katex"],[h,c]);if(r.displayMode){return u(["katex-display"],[v])}else{return v}};t.exports=p},{"./Options":4,"./Settings":7,"./Style":8,"./buildCommon":9,"./buildHTML":10,"./buildMathML":11}],13:[function(e,t,r){var a=e("./ParseError");var i=e("./Style");var n=e("./buildCommon");var s=e("./fontMetrics");var l=e("./symbols");var o=e("./utils");var u=n.makeSpan;var p=function(e,t){if(l.math[e]&&l.math[e].replace){return s.getCharacterMetrics(l.math[e].replace,t)}else{return s.getCharacterMetrics(e,t)}};var h=function(e,t,r){return n.makeSymbol(e,"Size"+t+"-Regular",r)};var c=function(e,t,r){var a=u(["style-wrap",r.style.reset(),t.cls()],[e]);var i=t.sizeMultiplier/r.style.sizeMultiplier;a.height*=i;a.depth*=i;a.maxFontSize=t.sizeMultiplier;return a};var v=function(e,t,r,a,i){var l=n.makeSymbol(e,"Main-Regular",i);var o=c(l,t,a);if(r){var u=(1-a.style.sizeMultiplier/t.sizeMultiplier)*s.metrics.axisHeight;o.style.top=u+"em";o.height-=u;o.depth+=u}return o};var m=function(e,t,r,a,n){var l=h(e,t,n);var o=c(u(["delimsizing","size"+t],[l],a.getColor()),i.TEXT,a);if(r){var p=(1-a.style.sizeMultiplier)*s.metrics.axisHeight;o.style.top=p+"em";o.height-=p;o.depth+=p}return o};var f=function(e,t,r){var a;if(t==="Size1-Regular"){a="delim-size1"}else if(t==="Size4-Regular"){a="delim-size4"}var i=u(["delimsizinginner",a],[u([],[n.makeSymbol(e,t,r)])]);return{type:"elem",elem:i}};var d=function(e,t,r,a,l){var o;var h;var v;var m;o=v=m=e;h=null;var d="Size1-Regular";if(e==="\\uparrow"){v=m="\u23d0"}else if(e==="\\Uparrow"){v=m="\u2016"}else if(e==="\\downarrow"){o=v="\u23d0"}else if(e==="\\Downarrow"){o=v="\u2016"}else if(e==="\\updownarrow"){o="\\uparrow";v="\u23d0";m="\\downarrow"}else if(e==="\\Updownarrow"){o="\\Uparrow";v="\u2016";m="\\Downarrow"}else if(e==="["||e==="\\lbrack"){o="\u23a1";v="\u23a2";m="\u23a3";d="Size4-Regular"}else if(e==="]"||e==="\\rbrack"){o="\u23a4";v="\u23a5";m="\u23a6";d="Size4-Regular"}else if(e==="\\lfloor"){v=o="\u23a2";m="\u23a3";d="Size4-Regular"}else if(e==="\\lceil"){o="\u23a1";v=m="\u23a2";d="Size4-Regular"}else if(e==="\\rfloor"){v=o="\u23a5";m="\u23a6";d="Size4-Regular"}else if(e==="\\rceil"){o="\u23a4";v=m="\u23a5";d="Size4-Regular"}else if(e==="("){o="\u239b";v="\u239c";m="\u239d";d="Size4-Regular"}else if(e===")"){o="\u239e";v="\u239f";m="\u23a0";d="Size4-Regular"}else if(e==="\\{"||e==="\\lbrace"){o="\u23a7";h="\u23a8";m="\u23a9";v="\u23aa";d="Size4-Regular"}else if(e==="\\}"||e==="\\rbrace"){o="\u23ab";h="\u23ac";m="\u23ad";v="\u23aa";d="Size4-Regular"}else if(e==="\\lgroup"){o="\u23a7";m="\u23a9";v="\u23aa";d="Size4-Regular"}else if(e==="\\rgroup"){o="\u23ab";m="\u23ad";v="\u23aa";d="Size4-Regular"}else if(e==="\\lmoustache"){o="\u23a7";m="\u23ad";v="\u23aa";d="Size4-Regular"}else if(e==="\\rmoustache"){o="\u23ab";m="\u23a9";v="\u23aa";d="Size4-Regular"}else if(e==="\\surd"){o="\ue001";m="\u23b7";v="\ue000";d="Size4-Regular"}var g=p(o,d);var y=g.height+g.depth;var b=p(v,d);var x=b.height+b.depth;var w=p(m,d);var k=w.height+w.depth;var z=0;var S=1;if(h!==null){var M=p(h,d);z=M.height+M.depth;S=2}var T=y+k+z;var q=Math.ceil((t-T)/(S*x));var N=T+q*S*x;var A=s.metrics.axisHeight;if(r){A*=a.style.sizeMultiplier}var C=N/2-A;var R=[];R.push(f(m,d,l));var E;if(h===null){for(E=0;E<q;E++){R.push(f(v,d,l))}}else{for(E=0;E<q;E++){R.push(f(v,d,l))}R.push(f(h,d,l));for(E=0;E<q;E++){R.push(f(v,d,l))}}R.push(f(o,d,l));var P=n.makeVList(R,"bottom",C,a);return c(u(["delimsizing","mult"],[P],a.getColor()),i.TEXT,a)};var g=["(",")","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\\lceil","\\rceil","\\surd"];var y=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\\lmoustache","\\rmoustache"];var b=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"];var x=[0,1.2,1.8,2.4,3];var w=function(e,t,r,i){if(e==="<"||e==="\\lt"){e="\\langle"}else if(e===">"||e==="\\gt"){e="\\rangle"}if(o.contains(g,e)||o.contains(b,e)){return m(e,t,false,r,i)}else if(o.contains(y,e)){return d(e,x[t],false,r,i)}else{throw new a("Illegal delimiter: '"+e+"'")}};var k=[{type:"small",style:i.SCRIPTSCRIPT},{type:"small",style:i.SCRIPT},{type:"small",style:i.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}];var z=[{type:"small",style:i.SCRIPTSCRIPT},{type:"small",style:i.SCRIPT},{type:"small",style:i.TEXT},{type:"stack"}];var S=[{type:"small",style:i.SCRIPTSCRIPT},{type:"small",style:i.SCRIPT},{type:"small",style:i.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}];var M=function(e){if(e.type==="small"){return"Main-Regular"}else if(e.type==="large"){return"Size"+e.size+"-Regular"}else if(e.type==="stack"){return"Size4-Regular"}};var T=function(e,t,r,a){var i=Math.min(2,3-a.style.size);for(var n=i;n<r.length;n++){if(r[n].type==="stack"){break}var s=p(e,M(r[n]));var l=s.height+s.depth;if(r[n].type==="small"){l*=r[n].style.sizeMultiplier}if(l>t){return r[n]}}return r[r.length-1]};var q=function(e,t,r,a,i){if(e==="<"||e==="\\lt"){e="\\langle"}else if(e===">"||e==="\\gt"){e="\\rangle"}var n;if(o.contains(b,e)){n=k}else if(o.contains(g,e)){n=S}else{n=z}var s=T(e,t,n,a);if(s.type==="small"){return v(e,s.style,r,a,i)}else if(s.type==="large"){return m(e,s.size,r,a,i)}else if(s.type==="stack"){return d(e,t,r,a,i)}};var N=function(e,t,r,a,i){var n=s.metrics.axisHeight*a.style.sizeMultiplier;var l=901;var o=5/s.metrics.ptPerEm;var u=Math.max(t-n,r+n);var p=Math.max(u/500*l,2*u-o);return q(e,p,true,a,i)};t.exports={sizedDelim:w,customSizedDelim:q,leftRightDelim:N}},{"./ParseError":5,"./Style":8,"./buildCommon":9,"./fontMetrics":16,"./symbols":22,"./utils":23}],14:[function(e,t,r){var a=e("./utils");var i=function(e){e=e.slice();for(var t=e.length-1;t>=0;t--){if(!e[t]){e.splice(t,1)}}return e.join(" ")};function n(e,t,r,a,i,n){this.classes=e||[];this.children=t||[];this.height=r||0;this.depth=a||0;this.maxFontSize=i||0;this.style=n||{};this.attributes={}}n.prototype.setAttribute=function(e,t){this.attributes[e]=t};n.prototype.toNode=function(){var e=document.createElement("span");e.className=i(this.classes);for(var t in this.style){if(Object.prototype.hasOwnProperty.call(this.style,t)){e.style[t]=this.style[t]}}for(var r in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,r)){e.setAttribute(r,this.attributes[r])}}for(var a=0;a<this.children.length;a++){e.appendChild(this.children[a].toNode())}return e};n.prototype.toMarkup=function(){var e="<span";if(this.classes.length){e+=' class="';e+=a.escape(i(this.classes));e+='"'}var t="";for(var r in this.style){if(this.style.hasOwnProperty(r)){t+=a.hyphenate(r)+":"+this.style[r]+";"}}if(t){e+=' style="'+a.escape(t)+'"'}for(var n in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,n)){e+=" "+n+'="';e+=a.escape(this.attributes[n]);e+='"'}}e+=">";for(var s=0;s<this.children.length;s++){e+=this.children[s].toMarkup()}e+="</span>";return e};function s(e,t,r,a){this.children=e||[];this.height=t||0;this.depth=r||0;this.maxFontSize=a||0}s.prototype.toNode=function(){var e=document.createDocumentFragment();for(var t=0;t<this.children.length;t++){e.appendChild(this.children[t].toNode())}return e};s.prototype.toMarkup=function(){var e="";for(var t=0;t<this.children.length;t++){e+=this.children[t].toMarkup()}return e};function l(e,t,r,a,i,n,s){this.value=e||"";this.height=t||0;this.depth=r||0;this.italic=a||0;this.skew=i||0;this.classes=n||[];this.style=s||{};this.maxFontSize=0}l.prototype.toNode=function(){var e=document.createTextNode(this.value);var t=null;if(this.italic>0){t=document.createElement("span");t.style.marginRight=this.italic+"em"}if(this.classes.length>0){t=t||document.createElement("span");t.className=i(this.classes)}for(var r in this.style){if(this.style.hasOwnProperty(r)){t=t||document.createElement("span");t.style[r]=this.style[r]}}if(t){t.appendChild(e);return t}else{return e}};l.prototype.toMarkup=function(){var e=false;var t="<span";if(this.classes.length){e=true;t+=' class="';t+=a.escape(i(this.classes));t+='"'}var r="";if(this.italic>0){r+="margin-right:"+this.italic+"em;"}for(var n in this.style){if(this.style.hasOwnProperty(n)){r+=a.hyphenate(n)+":"+this.style[n]+";"}}if(r){e=true;t+=' style="'+a.escape(r)+'"'}var s=a.escape(this.value);if(e){t+=">";t+=s;t+="</span>";return t}else{return s}};t.exports={span:n,documentFragment:s,symbolNode:l}},{"./utils":23}],15:[function(e,t,r){var a=e("./fontMetrics");var i=e("./parseData");var n=e("./ParseError");var s=i.ParseNode;function l(e,t){var r=[];var a=[r];var i=[];while(true){var l=e.parseExpression(false,null);r.push(new s("ordgroup",l,e.mode));var o=e.nextToken.text;if(o==="&"){e.consume()}else if(o==="\\end"){break}else if(o==="\\\\"||o==="\\cr"){var u=e.parseFunction();i.push(u.value.size);r=[];a.push(r)}else{var p=Math.min(e.pos+1,e.lexer._input.length);throw new n("Expected & or \\\\ or \\end",e.lexer,p)}}t.body=a;t.rowGaps=i;return new s(t.type,t,e.mode)}function o(e,r,a){if(typeof e==="string"){e=[e]}if(typeof r==="number"){r={numArgs:r}}var i={numArgs:r.numArgs||0,argTypes:r.argTypes,greediness:1,allowedInText:!!r.allowedInText,numOptionalArgs:r.numOptionalArgs||0,handler:a};for(var n=0;n<e.length;++n){t.exports[e[n]]=i}}o("array",{numArgs:1},function(e,t){var r=t[0];r=r.value.map?r.value:[r];var a=r.map(function(t){var r=t.value;if("lcr".indexOf(r)!==-1){return{type:"align",align:r}}else if(r==="|"){return{type:"separator",separator:"|"}}throw new n("Unknown column alignment: "+t.value,e.lexer,e.positions[1])});var i={type:"array",cols:a,hskipBeforeAndAfter:true};i=l(e.parser,i);return i});o(["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix"],{},function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName];var r={type:"array",hskipBeforeAndAfter:false};r=l(e.parser,r);if(t){r=new s("leftright",{body:[r],left:t[0],right:t[1]},e.mode)}return r});o("cases",{},function(e){var t={type:"array",arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:a.metrics.quad},{type:"align",align:"l",pregap:0,postgap:0}]};t=l(e.parser,t);t=new s("leftright",{body:[t],left:"\\{",right:"."},e.mode);return t});o("aligned",{},function(e){var t={type:"array",cols:[]};t=l(e.parser,t);var r=new s("ordgroup",[],e.mode);var a=0;t.value.body.forEach(function(e){var t;for(t=1;t<e.length;t+=2){e[t].value.unshift(r)}if(a<e.length){a=e.length}});for(var i=0;i<a;++i){var n="r";var o=0;if(i%2===1){n="l"}else if(i>0){o=2}t.value.cols[i]={type:"align",align:n,pregap:o,postgap:0}}return t})},{"./ParseError":5,"./fontMetrics":16,"./parseData":20}],16:[function(e,t,r){var a=e("./Style");var i=.025;var n=0;var s=0;var l=0;var o=.431;var u=1;var p=0;var h=.677;var c=.394;var v=.444;var m=.686;var f=.345;var d=.413;var g=.363;var y=.289;var b=.15;var x=.247;var w=.386;var k=.05;var z=2.39;var S=1.01;var M=.81;var T=.71;var q=.25;var N=0;var A=0;var C=0;var R=0;var E=.431;var P=1;var D=0;var L=.04;var O=.111;var I=.166;var B=.2;var F=.6;var _=.1;var V=10;var G=2/V;var H={xHeight:o,quad:u,num1:h,num2:c,num3:v,denom1:m,denom2:f,sup1:d,sup2:g,sup3:y,sub1:b,sub2:x,supDrop:w,subDrop:k,axisHeight:q,defaultRuleThickness:L,bigOpSpacing1:O,bigOpSpacing2:I,bigOpSpacing3:B,bigOpSpacing4:F,bigOpSpacing5:_,ptPerEm:V,emPerEx:o/u,doubleRuleSep:G,delim1:z,getDelim2:function(e){if(e.size===a.TEXT.size){return S}else if(e.size===a.SCRIPT.size){return M}else if(e.size===a.SCRIPTSCRIPT.size){return T}throw new Error("Unexpected style size: "+e.size)}};var X=e("./fontMetricsData");var U=function(e,t){var r=X[t][e.charCodeAt(0)];if(r){return{depth:r[0],height:r[1],italic:r[2],skew:r[3],width:r[4]}}};t.exports={metrics:H,getCharacterMetrics:U}},{"./Style":8,"./fontMetricsData":17}],17:[function(e,t,r){t.exports={"AMS-Regular":{65:[0,.68889,0,0],66:[0,.68889,0,0],67:[0,.68889,0,0],68:[0,.68889,0,0],69:[0,.68889,0,0],70:[0,.68889,0,0],71:[0,.68889,0,0],72:[0,.68889,0,0],73:[0,.68889,0,0],74:[.16667,.68889,0,0],75:[0,.68889,0,0],76:[0,.68889,0,0],77:[0,.68889,0,0],78:[0,.68889,0,0],79:[.16667,.68889,0,0],80:[0,.68889,0,0],81:[.16667,.68889,0,0],82:[0,.68889,0,0],83:[0,.68889,0,0],84:[0,.68889,0,0],85:[0,.68889,0,0],86:[0,.68889,0,0],87:[0,.68889,0,0],88:[0,.68889,0,0],89:[0,.68889,0,0],90:[0,.68889,0,0],107:[0,.68889,0,0],165:[0,.675,.025,0],174:[.15559,.69224,0,0],240:[0,.68889,0,0],295:[0,.68889,0,0],710:[0,.825,0,0],732:[0,.9,0,0],770:[0,.825,0,0],771:[0,.9,0,0],989:[.08167,.58167,0,0],1008:[0,.43056,.04028,0],8245:[0,.54986,0,0],8463:[0,.68889,0,0],8487:[0,.68889,0,0],8498:[0,.68889,0,0],8502:[0,.68889,0,0],8503:[0,.68889,0,0],8504:[0,.68889,0,0],8513:[0,.68889,0,0],8592:[-.03598,.46402,0,0],8594:[-.03598,.46402,0,0],8602:[-.13313,.36687,0,0],8603:[-.13313,.36687,0,0],8606:[.01354,.52239,0,0],8608:[.01354,.52239,0,0],8610:[.01354,.52239,0,0],8611:[.01354,.52239,0,0],8619:[0,.54986,0,0],8620:[0,.54986,0,0],8621:[-.13313,.37788,0,0],8622:[-.13313,.36687,0,0],8624:[0,.69224,0,0],8625:[0,.69224,0,0],8630:[0,.43056,0,0],8631:[0,.43056,0,0],8634:[.08198,.58198,0,0],8635:[.08198,.58198,0,0],8638:[.19444,.69224,0,0],8639:[.19444,.69224,0,0],8642:[.19444,.69224,0,0],8643:[.19444,.69224,0,0],8644:[.1808,.675,0,0],8646:[.1808,.675,0,0],8647:[.1808,.675,0,0],8648:[.19444,.69224,0,0],8649:[.1808,.675,0,0],8650:[.19444,.69224,0,0],8651:[.01354,.52239,0,0],8652:[.01354,.52239,0,0],8653:[-.13313,.36687,0,0],8654:[-.13313,.36687,0,0],8655:[-.13313,.36687,0,0],8666:[.13667,.63667,0,0],8667:[.13667,.63667,0,0],8669:[-.13313,.37788,0,0],8672:[-.064,.437,0,0],8674:[-.064,.437,0,0],8705:[0,.825,0,0],8708:[0,.68889,0,0],8709:[.08167,.58167,0,0],8717:[0,.43056,0,0],8722:[-.03598,.46402,0,0],8724:[.08198,.69224,0,0],8726:[.08167,.58167,0,0],8733:[0,.69224,0,0],8736:[0,.69224,0,0],8737:[0,.69224,0,0],8738:[.03517,.52239,0,0],8739:[.08167,.58167,0,0],8740:[.25142,.74111,0,0],8741:[.08167,.58167,0,0],8742:[.25142,.74111,0,0],8756:[0,.69224,0,0],8757:[0,.69224,0,0],8764:[-.13313,.36687,0,0],8765:[-.13313,.37788,0,0],8769:[-.13313,.36687,0,0],8770:[-.03625,.46375,0,0],8774:[.30274,.79383,0,0],8776:[-.01688,.48312,0,0],8778:[.08167,.58167,0,0],8782:[.06062,.54986,0,0],8783:[.06062,.54986,0,0],8785:[.08198,.58198,0,0],8786:[.08198,.58198,0,0],8787:[.08198,.58198,0,0],8790:[0,.69224,0,0],8791:[.22958,.72958,0,0],8796:[.08198,.91667,0,0],8806:[.25583,.75583,0,0],8807:[.25583,.75583,0,0],8808:[.25142,.75726,0,0],8809:[.25142,.75726,0,0],8812:[.25583,.75583,0,0],8814:[.20576,.70576,0,0],8815:[.20576,.70576,0,0],8816:[.30274,.79383,0,0],8817:[.30274,.79383,0,0],8818:[.22958,.72958,0,0],8819:[.22958,.72958,0,0],8822:[.1808,.675,0,0],8823:[.1808,.675,0,0],8828:[.13667,.63667,0,0],8829:[.13667,.63667,0,0],8830:[.22958,.72958,0,0],8831:[.22958,.72958,0,0],8832:[.20576,.70576,0,0],8833:[.20576,.70576,0,0],8840:[.30274,.79383,0,0],8841:[.30274,.79383,0,0],8842:[.13597,.63597,0,0],8843:[.13597,.63597,0,0],8847:[.03517,.54986,0,0],8848:[.03517,.54986,0,0],8858:[.08198,.58198,0,0],8859:[.08198,.58198,0,0],8861:[.08198,.58198,0,0],8862:[0,.675,0,0],8863:[0,.675,0,0],8864:[0,.675,0,0],8865:[0,.675,0,0],8872:[0,.69224,0,0],8873:[0,.69224,0,0],8874:[0,.69224,0,0],8876:[0,.68889,0,0],8877:[0,.68889,0,0],8878:[0,.68889,0,0],8879:[0,.68889,0,0],8882:[.03517,.54986,0,0],8883:[.03517,.54986,0,0],8884:[.13667,.63667,0,0],8885:[.13667,.63667,0,0],8888:[0,.54986,0,0],8890:[.19444,.43056,0,0],8891:[.19444,.69224,0,0],8892:[.19444,.69224,0,0],8901:[0,.54986,0,0],8903:[.08167,.58167,0,0],8905:[.08167,.58167,0,0],8906:[.08167,.58167,0,0],8907:[0,.69224,0,0],8908:[0,.69224,0,0],8909:[-.03598,.46402,0,0],8910:[0,.54986,0,0],8911:[0,.54986,0,0],8912:[.03517,.54986,0,0],8913:[.03517,.54986,0,0],8914:[0,.54986,0,0],8915:[0,.54986,0,0],8916:[0,.69224,0,0],8918:[.0391,.5391,0,0],8919:[.0391,.5391,0,0],8920:[.03517,.54986,0,0],8921:[.03517,.54986,0,0],8922:[.38569,.88569,0,0],8923:[.38569,.88569,0,0],8926:[.13667,.63667,0,0],8927:[.13667,.63667,0,0],8928:[.30274,.79383,0,0],8929:[.30274,.79383,0,0],8934:[.23222,.74111,0,0],8935:[.23222,.74111,0,0],8936:[.23222,.74111,0,0],8937:[.23222,.74111,0,0],8938:[.20576,.70576,0,0],8939:[.20576,.70576,0,0],8940:[.30274,.79383,0,0],8941:[.30274,.79383,0,0],8994:[.19444,.69224,0,0],8995:[.19444,.69224,0,0],9416:[.15559,.69224,0,0],9484:[0,.69224,0,0],9488:[0,.69224,0,0],9492:[0,.37788,0,0],9496:[0,.37788,0,0],9585:[.19444,.68889,0,0],9586:[.19444,.74111,0,0],9632:[0,.675,0,0],9633:[0,.675,0,0],9650:[0,.54986,0,0],9651:[0,.54986,0,0],9654:[.03517,.54986,0,0],9660:[0,.54986,0,0],9661:[0,.54986,0,0],9664:[.03517,.54986,0,0],9674:[.11111,.69224,0,0],9733:[.19444,.69224,0,0],10003:[0,.69224,0,0],10016:[0,.69224,0,0],10731:[.11111,.69224,0,0],10846:[.19444,.75583,0,0],10877:[.13667,.63667,0,0],10878:[.13667,.63667,0,0],10885:[.25583,.75583,0,0],10886:[.25583,.75583,0,0],10887:[.13597,.63597,0,0],10888:[.13597,.63597,0,0],10889:[.26167,.75726,0,0],10890:[.26167,.75726,0,0],10891:[.48256,.98256,0,0],10892:[.48256,.98256,0,0],10901:[.13667,.63667,0,0],10902:[.13667,.63667,0,0],10933:[.25142,.75726,0,0],10934:[.25142,.75726,0,0],10935:[.26167,.75726,0,0],10936:[.26167,.75726,0,0],10937:[.26167,.75726,0,0],10938:[.26167,.75726,0,0],10949:[.25583,.75583,0,0],10950:[.25583,.75583,0,0],10955:[.28481,.79383,0,0],10956:[.28481,.79383,0,0],57350:[.08167,.58167,0,0],57351:[.08167,.58167,0,0],57352:[.08167,.58167,0,0],57353:[0,.43056,.04028,0],57356:[.25142,.75726,0,0],57357:[.25142,.75726,0,0],57358:[.41951,.91951,0,0],57359:[.30274,.79383,0,0],57360:[.30274,.79383,0,0],57361:[.41951,.91951,0,0],57366:[.25142,.75726,0,0],57367:[.25142,.75726,0,0],57368:[.25142,.75726,0,0],57369:[.25142,.75726,0,0],57370:[.13597,.63597,0,0],57371:[.13597,.63597,0,0]},"Caligraphic-Regular":{48:[0,.43056,0,0],49:[0,.43056,0,0],50:[0,.43056,0,0],51:[.19444,.43056,0,0],52:[.19444,.43056,0,0],53:[.19444,.43056,0,0],54:[0,.64444,0,0],55:[.19444,.43056,0,0],56:[0,.64444,0,0],57:[.19444,.43056,0,0],65:[0,.68333,0,.19445],66:[0,.68333,.03041,.13889],67:[0,.68333,.05834,.13889],68:[0,.68333,.02778,.08334],69:[0,.68333,.08944,.11111],70:[0,.68333,.09931,.11111],71:[.09722,.68333,.0593,.11111],72:[0,.68333,.00965,.11111],73:[0,.68333,.07382,0],74:[.09722,.68333,.18472,.16667],75:[0,.68333,.01445,.05556],76:[0,.68333,0,.13889],77:[0,.68333,0,.13889],78:[0,.68333,.14736,.08334],79:[0,.68333,.02778,.11111],80:[0,.68333,.08222,.08334],81:[.09722,.68333,0,.11111],82:[0,.68333,0,.08334],83:[0,.68333,.075,.13889],84:[0,.68333,.25417,0],85:[0,.68333,.09931,.08334],86:[0,.68333,.08222,0],87:[0,.68333,.08222,.08334],88:[0,.68333,.14643,.13889],89:[.09722,.68333,.08222,.08334],90:[0,.68333,.07944,.13889]},"Fraktur-Regular":{33:[0,.69141,0,0],34:[0,.69141,0,0],38:[0,.69141,0,0],39:[0,.69141,0,0],40:[.24982,.74947,0,0],41:[.24982,.74947,0,0],42:[0,.62119,0,0],43:[.08319,.58283,0,0],44:[0,.10803,0,0],45:[.08319,.58283,0,0],46:[0,.10803,0,0],47:[.24982,.74947,0,0],48:[0,.47534,0,0],49:[0,.47534,0,0],50:[0,.47534,0,0],51:[.18906,.47534,0,0],52:[.18906,.47534,0,0],53:[.18906,.47534,0,0],54:[0,.69141,0,0],55:[.18906,.47534,0,0],56:[0,.69141,0,0],57:[.18906,.47534,0,0],58:[0,.47534,0,0],59:[.12604,.47534,0,0],61:[-.13099,.36866,0,0],63:[0,.69141,0,0],65:[0,.69141,0,0],66:[0,.69141,0,0],67:[0,.69141,0,0],68:[0,.69141,0,0],69:[0,.69141,0,0],70:[.12604,.69141,0,0],71:[0,.69141,0,0],72:[.06302,.69141,0,0],73:[0,.69141,0,0],74:[.12604,.69141,0,0],75:[0,.69141,0,0],76:[0,.69141,0,0],77:[0,.69141,0,0],78:[0,.69141,0,0],79:[0,.69141,0,0],80:[.18906,.69141,0,0],81:[.03781,.69141,0,0],82:[0,.69141,0,0],83:[0,.69141,0,0],84:[0,.69141,0,0],85:[0,.69141,0,0],86:[0,.69141,0,0],87:[0,.69141,0,0],88:[0,.69141,0,0],89:[.18906,.69141,0,0],90:[.12604,.69141,0,0],91:[.24982,.74947,0,0],93:[.24982,.74947,0,0],94:[0,.69141,0,0],97:[0,.47534,0,0],98:[0,.69141,0,0],99:[0,.47534,0,0],100:[0,.62119,0,0],101:[0,.47534,0,0],102:[.18906,.69141,0,0],103:[.18906,.47534,0,0],104:[.18906,.69141,0,0],105:[0,.69141,0,0],106:[0,.69141,0,0],107:[0,.69141,0,0],108:[0,.69141,0,0],109:[0,.47534,0,0],110:[0,.47534,0,0],111:[0,.47534,0,0],112:[.18906,.52396,0,0],113:[.18906,.47534,0,0],114:[0,.47534,0,0],115:[0,.47534,0,0],116:[0,.62119,0,0],117:[0,.47534,0,0],118:[0,.52396,0,0],119:[0,.52396,0,0],120:[.18906,.47534,0,0],121:[.18906,.47534,0,0],122:[.18906,.47534,0,0],8216:[0,.69141,0,0],8217:[0,.69141,0,0],58112:[0,.62119,0,0],58113:[0,.62119,0,0],58114:[.18906,.69141,0,0],58115:[.18906,.69141,0,0],58116:[.18906,.47534,0,0],58117:[0,.69141,0,0],58118:[0,.62119,0,0],58119:[0,.47534,0,0]},"Main-Bold":{33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.13333,.63333,0,0],44:[.19444,.15556,0,0],45:[0,.44444,0,0],46:[0,.15556,0,0],47:[.25,.75,0,0],48:[0,.64444,0,0],49:[0,.64444,0,0],50:[0,.64444,0,0],51:[0,.64444,0,0],52:[0,.64444,0,0],53:[0,.64444,0,0],54:[0,.64444,0,0],55:[0,.64444,0,0],56:[0,.64444,0,0],57:[0,.64444,0,0],58:[0,.44444,0,0],59:[.19444,.44444,0,0],60:[.08556,.58556,0,0],61:[-.10889,.39111,0,0],62:[.08556,.58556,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.68611,0,0],66:[0,.68611,0,0],67:[0,.68611,0,0],68:[0,.68611,0,0],69:[0,.68611,0,0],70:[0,.68611,0,0],71:[0,.68611,0,0],72:[0,.68611,0,0],73:[0,.68611,0,0],74:[0,.68611,0,0],75:[0,.68611,0,0],76:[0,.68611,0,0],77:[0,.68611,0,0],78:[0,.68611,0,0],79:[0,.68611,0,0],80:[0,.68611,0,0],81:[.19444,.68611,0,0],82:[0,.68611,0,0],83:[0,.68611,0,0],84:[0,.68611,0,0],85:[0,.68611,0,0],86:[0,.68611,.01597,0],87:[0,.68611,.01597,0],88:[0,.68611,0,0],89:[0,.68611,.02875,0],90:[0,.68611,0,0],91:[.25,.75,0,0],92:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.31,.13444,.03194,0],96:[0,.69444,0,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[0,.69444,.10903,0],103:[.19444,.44444,.01597,0],104:[0,.69444,0,0],105:[0,.69444,0,0],106:[.19444,.69444,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,0,0],114:[0,.44444,0,0],115:[0,.44444,0,0],116:[0,.63492,0,0],117:[0,.44444,0,0],118:[0,.44444,.01597,0],119:[0,.44444,.01597,0],120:[0,.44444,0,0],121:[.19444,.44444,.01597,0],122:[0,.44444,0,0],123:[.25,.75,0,0],124:[.25,.75,0,0],125:[.25,.75,0,0],126:[.35,.34444,0,0],168:[0,.69444,0,0],172:[0,.44444,0,0],175:[0,.59611,0,0],176:[0,.69444,0,0],177:[.13333,.63333,0,0],180:[0,.69444,0,0],215:[.13333,.63333,0,0],247:[.13333,.63333,0,0],305:[0,.44444,0,0],567:[.19444,.44444,0,0],710:[0,.69444,0,0],
-711:[0,.63194,0,0],713:[0,.59611,0,0],714:[0,.69444,0,0],715:[0,.69444,0,0],728:[0,.69444,0,0],729:[0,.69444,0,0],730:[0,.69444,0,0],732:[0,.69444,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.69444,0,0],772:[0,.59611,0,0],774:[0,.69444,0,0],775:[0,.69444,0,0],776:[0,.69444,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.63194,0,0],824:[.19444,.69444,0,0],915:[0,.68611,0,0],916:[0,.68611,0,0],920:[0,.68611,0,0],923:[0,.68611,0,0],926:[0,.68611,0,0],928:[0,.68611,0,0],931:[0,.68611,0,0],933:[0,.68611,0,0],934:[0,.68611,0,0],936:[0,.68611,0,0],937:[0,.68611,0,0],8211:[0,.44444,.03194,0],8212:[0,.44444,.03194,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0],8224:[.19444,.69444,0,0],8225:[.19444,.69444,0,0],8242:[0,.55556,0,0],8407:[0,.72444,.15486,0],8463:[0,.69444,0,0],8465:[0,.69444,0,0],8467:[0,.69444,0,0],8472:[.19444,.44444,0,0],8476:[0,.69444,0,0],8501:[0,.69444,0,0],8592:[-.10889,.39111,0,0],8593:[.19444,.69444,0,0],8594:[-.10889,.39111,0,0],8595:[.19444,.69444,0,0],8596:[-.10889,.39111,0,0],8597:[.25,.75,0,0],8598:[.19444,.69444,0,0],8599:[.19444,.69444,0,0],8600:[.19444,.69444,0,0],8601:[.19444,.69444,0,0],8636:[-.10889,.39111,0,0],8637:[-.10889,.39111,0,0],8640:[-.10889,.39111,0,0],8641:[-.10889,.39111,0,0],8656:[-.10889,.39111,0,0],8657:[.19444,.69444,0,0],8658:[-.10889,.39111,0,0],8659:[.19444,.69444,0,0],8660:[-.10889,.39111,0,0],8661:[.25,.75,0,0],8704:[0,.69444,0,0],8706:[0,.69444,.06389,0],8707:[0,.69444,0,0],8709:[.05556,.75,0,0],8711:[0,.68611,0,0],8712:[.08556,.58556,0,0],8715:[.08556,.58556,0,0],8722:[.13333,.63333,0,0],8723:[.13333,.63333,0,0],8725:[.25,.75,0,0],8726:[.25,.75,0,0],8727:[-.02778,.47222,0,0],8728:[-.02639,.47361,0,0],8729:[-.02639,.47361,0,0],8730:[.18,.82,0,0],8733:[0,.44444,0,0],8734:[0,.44444,0,0],8736:[0,.69224,0,0],8739:[.25,.75,0,0],8741:[.25,.75,0,0],8743:[0,.55556,0,0],8744:[0,.55556,0,0],8745:[0,.55556,0,0],8746:[0,.55556,0,0],8747:[.19444,.69444,.12778,0],8764:[-.10889,.39111,0,0],8768:[.19444,.69444,0,0],8771:[.00222,.50222,0,0],8776:[.02444,.52444,0,0],8781:[.00222,.50222,0,0],8801:[.00222,.50222,0,0],8804:[.19667,.69667,0,0],8805:[.19667,.69667,0,0],8810:[.08556,.58556,0,0],8811:[.08556,.58556,0,0],8826:[.08556,.58556,0,0],8827:[.08556,.58556,0,0],8834:[.08556,.58556,0,0],8835:[.08556,.58556,0,0],8838:[.19667,.69667,0,0],8839:[.19667,.69667,0,0],8846:[0,.55556,0,0],8849:[.19667,.69667,0,0],8850:[.19667,.69667,0,0],8851:[0,.55556,0,0],8852:[0,.55556,0,0],8853:[.13333,.63333,0,0],8854:[.13333,.63333,0,0],8855:[.13333,.63333,0,0],8856:[.13333,.63333,0,0],8857:[.13333,.63333,0,0],8866:[0,.69444,0,0],8867:[0,.69444,0,0],8868:[0,.69444,0,0],8869:[0,.69444,0,0],8900:[-.02639,.47361,0,0],8901:[-.02639,.47361,0,0],8902:[-.02778,.47222,0,0],8968:[.25,.75,0,0],8969:[.25,.75,0,0],8970:[.25,.75,0,0],8971:[.25,.75,0,0],8994:[-.13889,.36111,0,0],8995:[-.13889,.36111,0,0],9651:[.19444,.69444,0,0],9657:[-.02778,.47222,0,0],9661:[.19444,.69444,0,0],9667:[-.02778,.47222,0,0],9711:[.19444,.69444,0,0],9824:[.12963,.69444,0,0],9825:[.12963,.69444,0,0],9826:[.12963,.69444,0,0],9827:[.12963,.69444,0,0],9837:[0,.75,0,0],9838:[.19444,.69444,0,0],9839:[.19444,.69444,0,0],10216:[.25,.75,0,0],10217:[.25,.75,0,0],10815:[0,.68611,0,0],10927:[.19667,.69667,0,0],10928:[.19667,.69667,0,0]},"Main-Italic":{33:[0,.69444,.12417,0],34:[0,.69444,.06961,0],35:[.19444,.69444,.06616,0],37:[.05556,.75,.13639,0],38:[0,.69444,.09694,0],39:[0,.69444,.12417,0],40:[.25,.75,.16194,0],41:[.25,.75,.03694,0],42:[0,.75,.14917,0],43:[.05667,.56167,.03694,0],44:[.19444,.10556,0,0],45:[0,.43056,.02826,0],46:[0,.10556,0,0],47:[.25,.75,.16194,0],48:[0,.64444,.13556,0],49:[0,.64444,.13556,0],50:[0,.64444,.13556,0],51:[0,.64444,.13556,0],52:[.19444,.64444,.13556,0],53:[0,.64444,.13556,0],54:[0,.64444,.13556,0],55:[.19444,.64444,.13556,0],56:[0,.64444,.13556,0],57:[0,.64444,.13556,0],58:[0,.43056,.0582,0],59:[.19444,.43056,.0582,0],61:[-.13313,.36687,.06616,0],63:[0,.69444,.1225,0],64:[0,.69444,.09597,0],65:[0,.68333,0,0],66:[0,.68333,.10257,0],67:[0,.68333,.14528,0],68:[0,.68333,.09403,0],69:[0,.68333,.12028,0],70:[0,.68333,.13305,0],71:[0,.68333,.08722,0],72:[0,.68333,.16389,0],73:[0,.68333,.15806,0],74:[0,.68333,.14028,0],75:[0,.68333,.14528,0],76:[0,.68333,0,0],77:[0,.68333,.16389,0],78:[0,.68333,.16389,0],79:[0,.68333,.09403,0],80:[0,.68333,.10257,0],81:[.19444,.68333,.09403,0],82:[0,.68333,.03868,0],83:[0,.68333,.11972,0],84:[0,.68333,.13305,0],85:[0,.68333,.16389,0],86:[0,.68333,.18361,0],87:[0,.68333,.18361,0],88:[0,.68333,.15806,0],89:[0,.68333,.19383,0],90:[0,.68333,.14528,0],91:[.25,.75,.1875,0],93:[.25,.75,.10528,0],94:[0,.69444,.06646,0],95:[.31,.12056,.09208,0],97:[0,.43056,.07671,0],98:[0,.69444,.06312,0],99:[0,.43056,.05653,0],100:[0,.69444,.10333,0],101:[0,.43056,.07514,0],102:[.19444,.69444,.21194,0],103:[.19444,.43056,.08847,0],104:[0,.69444,.07671,0],105:[0,.65536,.1019,0],106:[.19444,.65536,.14467,0],107:[0,.69444,.10764,0],108:[0,.69444,.10333,0],109:[0,.43056,.07671,0],110:[0,.43056,.07671,0],111:[0,.43056,.06312,0],112:[.19444,.43056,.06312,0],113:[.19444,.43056,.08847,0],114:[0,.43056,.10764,0],115:[0,.43056,.08208,0],116:[0,.61508,.09486,0],117:[0,.43056,.07671,0],118:[0,.43056,.10764,0],119:[0,.43056,.10764,0],120:[0,.43056,.12042,0],121:[.19444,.43056,.08847,0],122:[0,.43056,.12292,0],126:[.35,.31786,.11585,0],163:[0,.69444,0,0],305:[0,.43056,0,.02778],567:[.19444,.43056,0,.08334],768:[0,.69444,0,0],769:[0,.69444,.09694,0],770:[0,.69444,.06646,0],771:[0,.66786,.11585,0],772:[0,.56167,.10333,0],774:[0,.69444,.10806,0],775:[0,.66786,.11752,0],776:[0,.66786,.10474,0],778:[0,.69444,0,0],779:[0,.69444,.1225,0],780:[0,.62847,.08295,0],915:[0,.68333,.13305,0],916:[0,.68333,0,0],920:[0,.68333,.09403,0],923:[0,.68333,0,0],926:[0,.68333,.15294,0],928:[0,.68333,.16389,0],931:[0,.68333,.12028,0],933:[0,.68333,.11111,0],934:[0,.68333,.05986,0],936:[0,.68333,.11111,0],937:[0,.68333,.10257,0],8211:[0,.43056,.09208,0],8212:[0,.43056,.09208,0],8216:[0,.69444,.12417,0],8217:[0,.69444,.12417,0],8220:[0,.69444,.1685,0],8221:[0,.69444,.06961,0],8463:[0,.68889,0,0]},"Main-Regular":{32:[0,0,0,0],33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.08333,.58333,0,0],44:[.19444,.10556,0,0],45:[0,.43056,0,0],46:[0,.10556,0,0],47:[.25,.75,0,0],48:[0,.64444,0,0],49:[0,.64444,0,0],50:[0,.64444,0,0],51:[0,.64444,0,0],52:[0,.64444,0,0],53:[0,.64444,0,0],54:[0,.64444,0,0],55:[0,.64444,0,0],56:[0,.64444,0,0],57:[0,.64444,0,0],58:[0,.43056,0,0],59:[.19444,.43056,0,0],60:[.0391,.5391,0,0],61:[-.13313,.36687,0,0],62:[.0391,.5391,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.68333,0,0],66:[0,.68333,0,0],67:[0,.68333,0,0],68:[0,.68333,0,0],69:[0,.68333,0,0],70:[0,.68333,0,0],71:[0,.68333,0,0],72:[0,.68333,0,0],73:[0,.68333,0,0],74:[0,.68333,0,0],75:[0,.68333,0,0],76:[0,.68333,0,0],77:[0,.68333,0,0],78:[0,.68333,0,0],79:[0,.68333,0,0],80:[0,.68333,0,0],81:[.19444,.68333,0,0],82:[0,.68333,0,0],83:[0,.68333,0,0],84:[0,.68333,0,0],85:[0,.68333,0,0],86:[0,.68333,.01389,0],87:[0,.68333,.01389,0],88:[0,.68333,0,0],89:[0,.68333,.025,0],90:[0,.68333,0,0],91:[.25,.75,0,0],92:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.31,.12056,.02778,0],96:[0,.69444,0,0],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,0],100:[0,.69444,0,0],101:[0,.43056,0,0],102:[0,.69444,.07778,0],103:[.19444,.43056,.01389,0],104:[0,.69444,0,0],105:[0,.66786,0,0],106:[.19444,.66786,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,0],112:[.19444,.43056,0,0],113:[.19444,.43056,0,0],114:[0,.43056,0,0],115:[0,.43056,0,0],116:[0,.61508,0,0],117:[0,.43056,0,0],118:[0,.43056,.01389,0],119:[0,.43056,.01389,0],120:[0,.43056,0,0],121:[.19444,.43056,.01389,0],122:[0,.43056,0,0],123:[.25,.75,0,0],124:[.25,.75,0,0],125:[.25,.75,0,0],126:[.35,.31786,0,0],160:[0,0,0,0],168:[0,.66786,0,0],172:[0,.43056,0,0],175:[0,.56778,0,0],176:[0,.69444,0,0],177:[.08333,.58333,0,0],180:[0,.69444,0,0],215:[.08333,.58333,0,0],247:[.08333,.58333,0,0],305:[0,.43056,0,0],567:[.19444,.43056,0,0],710:[0,.69444,0,0],711:[0,.62847,0,0],713:[0,.56778,0,0],714:[0,.69444,0,0],715:[0,.69444,0,0],728:[0,.69444,0,0],729:[0,.66786,0,0],730:[0,.69444,0,0],732:[0,.66786,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.66786,0,0],772:[0,.56778,0,0],774:[0,.69444,0,0],775:[0,.66786,0,0],776:[0,.66786,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.62847,0,0],824:[.19444,.69444,0,0],915:[0,.68333,0,0],916:[0,.68333,0,0],920:[0,.68333,0,0],923:[0,.68333,0,0],926:[0,.68333,0,0],928:[0,.68333,0,0],931:[0,.68333,0,0],933:[0,.68333,0,0],934:[0,.68333,0,0],936:[0,.68333,0,0],937:[0,.68333,0,0],8211:[0,.43056,.02778,0],8212:[0,.43056,.02778,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0],8224:[.19444,.69444,0,0],8225:[.19444,.69444,0,0],8230:[0,.12,0,0],8242:[0,.55556,0,0],8407:[0,.71444,.15382,0],8463:[0,.68889,0,0],8465:[0,.69444,0,0],8467:[0,.69444,0,.11111],8472:[.19444,.43056,0,.11111],8476:[0,.69444,0,0],8501:[0,.69444,0,0],8592:[-.13313,.36687,0,0],8593:[.19444,.69444,0,0],8594:[-.13313,.36687,0,0],8595:[.19444,.69444,0,0],8596:[-.13313,.36687,0,0],8597:[.25,.75,0,0],8598:[.19444,.69444,0,0],8599:[.19444,.69444,0,0],8600:[.19444,.69444,0,0],8601:[.19444,.69444,0,0],8614:[.011,.511,0,0],8617:[.011,.511,0,0],8618:[.011,.511,0,0],8636:[-.13313,.36687,0,0],8637:[-.13313,.36687,0,0],8640:[-.13313,.36687,0,0],8641:[-.13313,.36687,0,0],8652:[.011,.671,0,0],8656:[-.13313,.36687,0,0],8657:[.19444,.69444,0,0],8658:[-.13313,.36687,0,0],8659:[.19444,.69444,0,0],8660:[-.13313,.36687,0,0],8661:[.25,.75,0,0],8704:[0,.69444,0,0],8706:[0,.69444,.05556,.08334],8707:[0,.69444,0,0],8709:[.05556,.75,0,0],8711:[0,.68333,0,0],8712:[.0391,.5391,0,0],8715:[.0391,.5391,0,0],8722:[.08333,.58333,0,0],8723:[.08333,.58333,0,0],8725:[.25,.75,0,0],8726:[.25,.75,0,0],8727:[-.03472,.46528,0,0],8728:[-.05555,.44445,0,0],8729:[-.05555,.44445,0,0],8730:[.2,.8,0,0],8733:[0,.43056,0,0],8734:[0,.43056,0,0],8736:[0,.69224,0,0],8739:[.25,.75,0,0],8741:[.25,.75,0,0],8743:[0,.55556,0,0],8744:[0,.55556,0,0],8745:[0,.55556,0,0],8746:[0,.55556,0,0],8747:[.19444,.69444,.11111,0],8764:[-.13313,.36687,0,0],8768:[.19444,.69444,0,0],8771:[-.03625,.46375,0,0],8773:[-.022,.589,0,0],8776:[-.01688,.48312,0,0],8781:[-.03625,.46375,0,0],8784:[-.133,.67,0,0],8800:[.215,.716,0,0],8801:[-.03625,.46375,0,0],8804:[.13597,.63597,0,0],8805:[.13597,.63597,0,0],8810:[.0391,.5391,0,0],8811:[.0391,.5391,0,0],8826:[.0391,.5391,0,0],8827:[.0391,.5391,0,0],8834:[.0391,.5391,0,0],8835:[.0391,.5391,0,0],8838:[.13597,.63597,0,0],8839:[.13597,.63597,0,0],8846:[0,.55556,0,0],8849:[.13597,.63597,0,0],8850:[.13597,.63597,0,0],8851:[0,.55556,0,0],8852:[0,.55556,0,0],8853:[.08333,.58333,0,0],8854:[.08333,.58333,0,0],8855:[.08333,.58333,0,0],8856:[.08333,.58333,0,0],8857:[.08333,.58333,0,0],8866:[0,.69444,0,0],8867:[0,.69444,0,0],8868:[0,.69444,0,0],8869:[0,.69444,0,0],8872:[.249,.75,0,0],8900:[-.05555,.44445,0,0],8901:[-.05555,.44445,0,0],8902:[-.03472,.46528,0,0],8904:[.005,.505,0,0],8942:[.03,.9,0,0],8943:[-.19,.31,0,0],8945:[-.1,.82,0,0],8968:[.25,.75,0,0],8969:[.25,.75,0,0],8970:[.25,.75,0,0],8971:[.25,.75,0,0],8994:[-.14236,.35764,0,0],8995:[-.14236,.35764,0,0],9136:[.244,.744,0,0],9137:[.244,.744,0,0],9651:[.19444,.69444,0,0],9657:[-.03472,.46528,0,0],9661:[.19444,.69444,0,0],9667:[-.03472,.46528,0,0],9711:[.19444,.69444,0,0],9824:[.12963,.69444,0,0],9825:[.12963,.69444,0,0],9826:[.12963,.69444,0,0],9827:[.12963,.69444,0,0],9837:[0,.75,0,0],9838:[.19444,.69444,0,0],9839:[.19444,.69444,0,0],10216:[.25,.75,0,0],10217:[.25,.75,0,0],10222:[.244,.744,0,0],10223:[.244,.744,0,0],10229:[.011,.511,0,0],10230:[.011,.511,0,0],10231:[.011,.511,0,0],10232:[.024,.525,0,0],10233:[.024,.525,0,0],10234:[.024,.525,0,0],10236:[.011,.511,0,0],10815:[0,.68333,0,0],10927:[.13597,.63597,0,0],10928:[.13597,.63597,0,0]},"Math-BoldItalic":{47:[.19444,.69444,0,0],65:[0,.68611,0,0],66:[0,.68611,.04835,0],67:[0,.68611,.06979,0],68:[0,.68611,.03194,0],69:[0,.68611,.05451,0],70:[0,.68611,.15972,0],71:[0,.68611,0,0],72:[0,.68611,.08229,0],73:[0,.68611,.07778,0],74:[0,.68611,.10069,0],75:[0,.68611,.06979,0],76:[0,.68611,0,0],77:[0,.68611,.11424,0],78:[0,.68611,.11424,0],79:[0,.68611,.03194,0],80:[0,.68611,.15972,0],81:[.19444,.68611,0,0],82:[0,.68611,.00421,0],83:[0,.68611,.05382,0],84:[0,.68611,.15972,0],85:[0,.68611,.11424,0],86:[0,.68611,.25555,0],87:[0,.68611,.15972,0],88:[0,.68611,.07778,0],89:[0,.68611,.25555,0],90:[0,.68611,.06979,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[.19444,.69444,.11042,0],103:[.19444,.44444,.03704,0],104:[0,.69444,0,0],105:[0,.69326,0,0],106:[.19444,.69326,.0622,0],107:[0,.69444,.01852,0],108:[0,.69444,.0088,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,.03704,0],114:[0,.44444,.03194,0],115:[0,.44444,0,0],116:[0,.63492,0,0],117:[0,.44444,0,0],118:[0,.44444,.03704,0],119:[0,.44444,.02778,0],120:[0,.44444,0,0],121:[.19444,.44444,.03704,0],122:[0,.44444,.04213,0],915:[0,.68611,.15972,0],916:[0,.68611,0,0],920:[0,.68611,.03194,0],923:[0,.68611,0,0],926:[0,.68611,.07458,0],928:[0,.68611,.08229,0],931:[0,.68611,.05451,0],933:[0,.68611,.15972,0],934:[0,.68611,0,0],936:[0,.68611,.11653,0],937:[0,.68611,.04835,0],945:[0,.44444,0,0],946:[.19444,.69444,.03403,0],947:[.19444,.44444,.06389,0],948:[0,.69444,.03819,0],949:[0,.44444,0,0],950:[.19444,.69444,.06215,0],951:[.19444,.44444,.03704,0],952:[0,.69444,.03194,0],953:[0,.44444,0,0],954:[0,.44444,0,0],955:[0,.69444,0,0],956:[.19444,.44444,0,0],957:[0,.44444,.06898,0],958:[.19444,.69444,.03021,0],959:[0,.44444,0,0],960:[0,.44444,.03704,0],961:[.19444,.44444,0,0],962:[.09722,.44444,.07917,0],963:[0,.44444,.03704,0],964:[0,.44444,.13472,0],965:[0,.44444,.03704,0],966:[.19444,.44444,0,0],967:[.19444,.44444,0,0],968:[.19444,.69444,.03704,0],969:[0,.44444,.03704,0],977:[0,.69444,0,0],981:[.19444,.69444,0,0],982:[0,.44444,.03194,0],1009:[.19444,.44444,0,0],1013:[0,.44444,0,0]},"Math-Italic":{47:[.19444,.69444,0,0],65:[0,.68333,0,.13889],66:[0,.68333,.05017,.08334],67:[0,.68333,.07153,.08334],68:[0,.68333,.02778,.05556],69:[0,.68333,.05764,.08334],70:[0,.68333,.13889,.08334],71:[0,.68333,0,.08334],72:[0,.68333,.08125,.05556],73:[0,.68333,.07847,.11111],74:[0,.68333,.09618,.16667],75:[0,.68333,.07153,.05556],76:[0,.68333,0,.02778],77:[0,.68333,.10903,.08334],78:[0,.68333,.10903,.08334],79:[0,.68333,.02778,.08334],80:[0,.68333,.13889,.08334],81:[.19444,.68333,0,.08334],82:[0,.68333,.00773,.08334],83:[0,.68333,.05764,.08334],84:[0,.68333,.13889,.08334],85:[0,.68333,.10903,.02778],86:[0,.68333,.22222,0],87:[0,.68333,.13889,0],88:[0,.68333,.07847,.08334],89:[0,.68333,.22222,0],90:[0,.68333,.07153,.08334],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,.05556],100:[0,.69444,0,.16667],101:[0,.43056,0,.05556],102:[.19444,.69444,.10764,.16667],103:[.19444,.43056,.03588,.02778],104:[0,.69444,0,0],105:[0,.65952,0,0],106:[.19444,.65952,.05724,0],107:[0,.69444,.03148,0],108:[0,.69444,.01968,.08334],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,.05556],112:[.19444,.43056,0,.08334],113:[.19444,.43056,.03588,.08334],114:[0,.43056,.02778,.05556],115:[0,.43056,0,.05556],116:[0,.61508,0,.08334],117:[0,.43056,0,.02778],118:[0,.43056,.03588,.02778],119:[0,.43056,.02691,.08334],120:[0,.43056,0,.02778],121:[.19444,.43056,.03588,.05556],122:[0,.43056,.04398,.05556],915:[0,.68333,.13889,.08334],916:[0,.68333,0,.16667],920:[0,.68333,.02778,.08334],923:[0,.68333,0,.16667],926:[0,.68333,.07569,.08334],928:[0,.68333,.08125,.05556],931:[0,.68333,.05764,.08334],933:[0,.68333,.13889,.05556],934:[0,.68333,0,.08334],936:[0,.68333,.11,.05556],937:[0,.68333,.05017,.08334],945:[0,.43056,.0037,.02778],946:[.19444,.69444,.05278,.08334],947:[.19444,.43056,.05556,0],948:[0,.69444,.03785,.05556],949:[0,.43056,0,.08334],950:[.19444,.69444,.07378,.08334],951:[.19444,.43056,.03588,.05556],952:[0,.69444,.02778,.08334],953:[0,.43056,0,.05556],954:[0,.43056,0,0],955:[0,.69444,0,0],956:[.19444,.43056,0,.02778],957:[0,.43056,.06366,.02778],958:[.19444,.69444,.04601,.11111],959:[0,.43056,0,.05556],960:[0,.43056,.03588,0],961:[.19444,.43056,0,.08334],962:[.09722,.43056,.07986,.08334],963:[0,.43056,.03588,0],964:[0,.43056,.1132,.02778],965:[0,.43056,.03588,.02778],966:[.19444,.43056,0,.08334],967:[.19444,.43056,0,.05556],968:[.19444,.69444,.03588,.11111],969:[0,.43056,.03588,0],977:[0,.69444,0,.08334],981:[.19444,.69444,0,.08334],982:[0,.43056,.02778,0],1009:[.19444,.43056,0,.08334],1013:[0,.43056,0,.05556]},"Math-Regular":{65:[0,.68333,0,.13889],66:[0,.68333,.05017,.08334],67:[0,.68333,.07153,.08334],68:[0,.68333,.02778,.05556],69:[0,.68333,.05764,.08334],70:[0,.68333,.13889,.08334],71:[0,.68333,0,.08334],72:[0,.68333,.08125,.05556],73:[0,.68333,.07847,.11111],74:[0,.68333,.09618,.16667],75:[0,.68333,.07153,.05556],76:[0,.68333,0,.02778],77:[0,.68333,.10903,.08334],78:[0,.68333,.10903,.08334],79:[0,.68333,.02778,.08334],80:[0,.68333,.13889,.08334],81:[.19444,.68333,0,.08334],82:[0,.68333,.00773,.08334],83:[0,.68333,.05764,.08334],84:[0,.68333,.13889,.08334],85:[0,.68333,.10903,.02778],86:[0,.68333,.22222,0],87:[0,.68333,.13889,0],88:[0,.68333,.07847,.08334],89:[0,.68333,.22222,0],90:[0,.68333,.07153,.08334],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,.05556],100:[0,.69444,0,.16667],101:[0,.43056,0,.05556],102:[.19444,.69444,.10764,.16667],103:[.19444,.43056,.03588,.02778],104:[0,.69444,0,0],105:[0,.65952,0,0],106:[.19444,.65952,.05724,0],107:[0,.69444,.03148,0],108:[0,.69444,.01968,.08334],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,.05556],112:[.19444,.43056,0,.08334],113:[.19444,.43056,.03588,.08334],114:[0,.43056,.02778,.05556],115:[0,.43056,0,.05556],116:[0,.61508,0,.08334],117:[0,.43056,0,.02778],118:[0,.43056,.03588,.02778],119:[0,.43056,.02691,.08334],120:[0,.43056,0,.02778],121:[.19444,.43056,.03588,.05556],122:[0,.43056,.04398,.05556],915:[0,.68333,.13889,.08334],916:[0,.68333,0,.16667],920:[0,.68333,.02778,.08334],923:[0,.68333,0,.16667],926:[0,.68333,.07569,.08334],928:[0,.68333,.08125,.05556],931:[0,.68333,.05764,.08334],933:[0,.68333,.13889,.05556],934:[0,.68333,0,.08334],936:[0,.68333,.11,.05556],937:[0,.68333,.05017,.08334],945:[0,.43056,.0037,.02778],946:[.19444,.69444,.05278,.08334],947:[.19444,.43056,.05556,0],948:[0,.69444,.03785,.05556],949:[0,.43056,0,.08334],950:[.19444,.69444,.07378,.08334],951:[.19444,.43056,.03588,.05556],952:[0,.69444,.02778,.08334],953:[0,.43056,0,.05556],954:[0,.43056,0,0],955:[0,.69444,0,0],956:[.19444,.43056,0,.02778],957:[0,.43056,.06366,.02778],958:[.19444,.69444,.04601,.11111],959:[0,.43056,0,.05556],960:[0,.43056,.03588,0],961:[.19444,.43056,0,.08334],962:[.09722,.43056,.07986,.08334],963:[0,.43056,.03588,0],964:[0,.43056,.1132,.02778],965:[0,.43056,.03588,.02778],966:[.19444,.43056,0,.08334],967:[.19444,.43056,0,.05556],968:[.19444,.69444,.03588,.11111],969:[0,.43056,.03588,0],977:[0,.69444,0,.08334],981:[.19444,.69444,0,.08334],982:[0,.43056,.02778,0],1009:[.19444,.43056,0,.08334],1013:[0,.43056,0,.05556]},"SansSerif-Regular":{33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.08333,.58333,0,0],44:[.125,.08333,0,0],45:[0,.44444,0,0],46:[0,.08333,0,0],47:[.25,.75,0,0],48:[0,.65556,0,0],49:[0,.65556,0,0],50:[0,.65556,0,0],51:[0,.65556,0,0],52:[0,.65556,0,0],53:[0,.65556,0,0],54:[0,.65556,0,0],55:[0,.65556,0,0],56:[0,.65556,0,0],57:[0,.65556,0,0],58:[0,.44444,0,0],59:[.125,.44444,0,0],61:[-.13,.37,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.69444,0,0],66:[0,.69444,0,0],67:[0,.69444,0,0],68:[0,.69444,0,0],69:[0,.69444,0,0],70:[0,.69444,0,0],71:[0,.69444,0,0],72:[0,.69444,0,0],73:[0,.69444,0,0],74:[0,.69444,0,0],75:[0,.69444,0,0],76:[0,.69444,0,0],77:[0,.69444,0,0],78:[0,.69444,0,0],79:[0,.69444,0,0],80:[0,.69444,0,0],81:[.125,.69444,0,0],82:[0,.69444,0,0],83:[0,.69444,0,0],84:[0,.69444,0,0],85:[0,.69444,0,0],86:[0,.69444,.01389,0],87:[0,.69444,.01389,0],88:[0,.69444,0,0],89:[0,.69444,.025,0],90:[0,.69444,0,0],91:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.35,.09444,.02778,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[0,.69444,.06944,0],103:[.19444,.44444,.01389,0],104:[0,.69444,0,0],105:[0,.67937,0,0],106:[.19444,.67937,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,0,0],114:[0,.44444,.01389,0],115:[0,.44444,0,0],116:[0,.57143,0,0],117:[0,.44444,0,0],118:[0,.44444,.01389,0],119:[0,.44444,.01389,0],120:[0,.44444,0,0],121:[.19444,.44444,.01389,0],122:[0,.44444,0,0],126:[.35,.32659,0,0],305:[0,.44444,0,0],567:[.19444,.44444,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.67659,0,0],772:[0,.60889,0,0],774:[0,.69444,0,0],775:[0,.67937,0,0],776:[0,.67937,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.63194,0,0],915:[0,.69444,0,0],916:[0,.69444,0,0],920:[0,.69444,0,0],923:[0,.69444,0,0],926:[0,.69444,0,0],928:[0,.69444,0,0],931:[0,.69444,0,0],933:[0,.69444,0,0],934:[0,.69444,0,0],936:[0,.69444,0,0],937:[0,.69444,0,0],8211:[0,.44444,.02778,0],8212:[0,.44444,.02778,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0]},"Script-Regular":{65:[0,.7,.22925,0],66:[0,.7,.04087,0],67:[0,.7,.1689,0],68:[0,.7,.09371,0],69:[0,.7,.18583,0],70:[0,.7,.13634,0],71:[0,.7,.17322,0],72:[0,.7,.29694,0],73:[0,.7,.19189,0],74:[.27778,.7,.19189,0],75:[0,.7,.31259,0],76:[0,.7,.19189,0],77:[0,.7,.15981,0],78:[0,.7,.3525,0],79:[0,.7,.08078,0],80:[0,.7,.08078,0],81:[0,.7,.03305,0],82:[0,.7,.06259,0],83:[0,.7,.19189,0],84:[0,.7,.29087,0],85:[0,.7,.25815,0],86:[0,.7,.27523,0],87:[0,.7,.27523,0],88:[0,.7,.26006,0],89:[0,.7,.2939,0],90:[0,.7,.24037,0]},"Size1-Regular":{40:[.35001,.85,0,0],41:[.35001,.85,0,0],47:[.35001,.85,0,0],91:[.35001,.85,0,0],92:[.35001,.85,0,0],93:[.35001,.85,0,0],123:[.35001,.85,0,0],125:[.35001,.85,0,0],710:[0,.72222,0,0],732:[0,.72222,0,0],770:[0,.72222,0,0],771:[0,.72222,0,0],8214:[-99e-5,.601,0,0],8593:[1e-5,.6,0,0],8595:[1e-5,.6,0,0],8657:[1e-5,.6,0,0],8659:[1e-5,.6,0,0],8719:[.25001,.75,0,0],8720:[.25001,.75,0,0],8721:[.25001,.75,0,0],8730:[.35001,.85,0,0],8739:[-.00599,.606,0,0],8741:[-.00599,.606,0,0],8747:[.30612,.805,.19445,0],8748:[.306,.805,.19445,0],8749:[.306,.805,.19445,0],8750:[.30612,.805,.19445,0],8896:[.25001,.75,0,0],8897:[.25001,.75,0,0],8898:[.25001,.75,0,0],8899:[.25001,.75,0,0],8968:[.35001,.85,0,0],8969:[.35001,.85,0,0],8970:[.35001,.85,0,0],8971:[.35001,.85,0,0],9168:[-99e-5,.601,0,0],10216:[.35001,.85,0,0],10217:[.35001,.85,0,0],10752:[.25001,.75,0,0],10753:[.25001,.75,0,0],10754:[.25001,.75,0,0],10756:[.25001,.75,0,0],10758:[.25001,.75,0,0]},"Size2-Regular":{40:[.65002,1.15,0,0],41:[.65002,1.15,0,0],47:[.65002,1.15,0,0],91:[.65002,1.15,0,0],92:[.65002,1.15,0,0],93:[.65002,1.15,0,0],123:[.65002,1.15,0,0],125:[.65002,1.15,0,0],710:[0,.75,0,0],732:[0,.75,0,0],770:[0,.75,0,0],771:[0,.75,0,0],8719:[.55001,1.05,0,0],8720:[.55001,1.05,0,0],8721:[.55001,1.05,0,0],8730:[.65002,1.15,0,0],8747:[.86225,1.36,.44445,0],8748:[.862,1.36,.44445,0],8749:[.862,1.36,.44445,0],8750:[.86225,1.36,.44445,0],8896:[.55001,1.05,0,0],8897:[.55001,1.05,0,0],8898:[.55001,1.05,0,0],8899:[.55001,1.05,0,0],8968:[.65002,1.15,0,0],8969:[.65002,1.15,0,0],8970:[.65002,1.15,0,0],8971:[.65002,1.15,0,0],10216:[.65002,1.15,0,0],10217:[.65002,1.15,0,0],10752:[.55001,1.05,0,0],10753:[.55001,1.05,0,0],10754:[.55001,1.05,0,0],10756:[.55001,1.05,0,0],10758:[.55001,1.05,0,0]},"Size3-Regular":{40:[.95003,1.45,0,0],41:[.95003,1.45,0,0],47:[.95003,1.45,0,0],91:[.95003,1.45,0,0],92:[.95003,1.45,0,0],93:[.95003,1.45,0,0],123:[.95003,1.45,0,0],125:[.95003,1.45,0,0],710:[0,.75,0,0],732:[0,.75,0,0],770:[0,.75,0,0],771:[0,.75,0,0],8730:[.95003,1.45,0,0],8968:[.95003,1.45,0,0],8969:[.95003,1.45,0,0],8970:[.95003,1.45,0,0],8971:[.95003,1.45,0,0],10216:[.95003,1.45,0,0],10217:[.95003,1.45,0,0]},"Size4-Regular":{40:[1.25003,1.75,0,0],41:[1.25003,1.75,0,0],47:[1.25003,1.75,0,0],91:[1.25003,1.75,0,0],92:[1.25003,1.75,0,0],93:[1.25003,1.75,0,0],123:[1.25003,1.75,0,0],125:[1.25003,1.75,0,0],710:[0,.825,0,0],732:[0,.825,0,0],770:[0,.825,0,0],771:[0,.825,0,0],8730:[1.25003,1.75,0,0],8968:[1.25003,1.75,0,0],8969:[1.25003,1.75,0,0],8970:[1.25003,1.75,0,0],8971:[1.25003,1.75,0,0],9115:[.64502,1.155,0,0],9116:[1e-5,.6,0,0],9117:[.64502,1.155,0,0],9118:[.64502,1.155,0,0],9119:[1e-5,.6,0,0],9120:[.64502,1.155,0,0],9121:[.64502,1.155,0,0],9122:[-99e-5,.601,0,0],9123:[.64502,1.155,0,0],9124:[.64502,1.155,0,0],9125:[-99e-5,.601,0,0],9126:[.64502,1.155,0,0],9127:[1e-5,.9,0,0],9128:[.65002,1.15,0,0],9129:[.90001,0,0,0],9130:[0,.3,0,0],9131:[1e-5,.9,0,0],9132:[.65002,1.15,0,0],9133:[.90001,0,0,0],9143:[.88502,.915,0,0],10216:[1.25003,1.75,0,0],10217:[1.25003,1.75,0,0],57344:[-.00499,.605,0,0],57345:[-.00499,.605,0,0],57680:[0,.12,0,0],57681:[0,.12,0,0],57682:[0,.12,0,0],57683:[0,.12,0,0]},"Typewriter-Regular":{33:[0,.61111,0,0],34:[0,.61111,0,0],35:[0,.61111,0,0],36:[.08333,.69444,0,0],37:[.08333,.69444,0,0],38:[0,.61111,0,0],39:[0,.61111,0,0],40:[.08333,.69444,0,0],41:[.08333,.69444,0,0],42:[0,.52083,0,0],43:[-.08056,.53055,0,0],44:[.13889,.125,0,0],45:[-.08056,.53055,0,0],46:[0,.125,0,0],47:[.08333,.69444,0,0],48:[0,.61111,0,0],49:[0,.61111,0,0],50:[0,.61111,0,0],51:[0,.61111,0,0],52:[0,.61111,0,0],53:[0,.61111,0,0],54:[0,.61111,0,0],55:[0,.61111,0,0],56:[0,.61111,0,0],57:[0,.61111,0,0],58:[0,.43056,0,0],59:[.13889,.43056,0,0],60:[-.05556,.55556,0,0],61:[-.19549,.41562,0,0],62:[-.05556,.55556,0,0],63:[0,.61111,0,0],64:[0,.61111,0,0],65:[0,.61111,0,0],66:[0,.61111,0,0],67:[0,.61111,0,0],68:[0,.61111,0,0],69:[0,.61111,0,0],70:[0,.61111,0,0],71:[0,.61111,0,0],72:[0,.61111,0,0],73:[0,.61111,0,0],74:[0,.61111,0,0],75:[0,.61111,0,0],76:[0,.61111,0,0],77:[0,.61111,0,0],78:[0,.61111,0,0],79:[0,.61111,0,0],80:[0,.61111,0,0],81:[.13889,.61111,0,0],82:[0,.61111,0,0],83:[0,.61111,0,0],84:[0,.61111,0,0],85:[0,.61111,0,0],86:[0,.61111,0,0],87:[0,.61111,0,0],88:[0,.61111,0,0],89:[0,.61111,0,0],90:[0,.61111,0,0],91:[.08333,.69444,0,0],92:[.08333,.69444,0,0],93:[.08333,.69444,0,0],94:[0,.61111,0,0],95:[.09514,0,0,0],96:[0,.61111,0,0],97:[0,.43056,0,0],98:[0,.61111,0,0],99:[0,.43056,0,0],100:[0,.61111,0,0],101:[0,.43056,0,0],102:[0,.61111,0,0],103:[.22222,.43056,0,0],104:[0,.61111,0,0],105:[0,.61111,0,0],106:[.22222,.61111,0,0],107:[0,.61111,0,0],108:[0,.61111,0,0],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,0],112:[.22222,.43056,0,0],113:[.22222,.43056,0,0],114:[0,.43056,0,0],115:[0,.43056,0,0],116:[0,.55358,0,0],117:[0,.43056,0,0],118:[0,.43056,0,0],119:[0,.43056,0,0],120:[0,.43056,0,0],121:[.22222,.43056,0,0],122:[0,.43056,0,0],123:[.08333,.69444,0,0],124:[.08333,.69444,0,0],125:[.08333,.69444,0,0],126:[0,.61111,0,0],127:[0,.61111,0,0],305:[0,.43056,0,0],567:[.22222,.43056,0,0],768:[0,.61111,0,0],769:[0,.61111,0,0],770:[0,.61111,0,0],771:[0,.61111,0,0],772:[0,.56555,0,0],774:[0,.61111,0,0],776:[0,.61111,0,0],778:[0,.61111,0,0],780:[0,.56597,0,0],915:[0,.61111,0,0],916:[0,.61111,0,0],920:[0,.61111,0,0],923:[0,.61111,0,0],926:[0,.61111,0,0],928:[0,.61111,0,0],931:[0,.61111,0,0],933:[0,.61111,0,0],934:[0,.61111,0,0],936:[0,.61111,0,0],937:[0,.61111,0,0],2018:[0,.61111,0,0],2019:[0,.61111,0,0],8242:[0,.61111,0,0]}}},{}],18:[function(e,t,r){var a=e("./utils");var i=e("./ParseError");function n(e,r,a){if(typeof e==="string"){e=[e]}if(typeof r==="number"){r={numArgs:r}}var i={numArgs:r.numArgs,argTypes:r.argTypes,greediness:r.greediness===undefined?1:r.greediness,allowedInText:!!r.allowedInText,numOptionalArgs:r.numOptionalArgs||0,handler:a};for(var n=0;n<e.length;++n){t.exports[e[n]]=i}}n("\\sqrt",{numArgs:1,numOptionalArgs:1},function(e,t){var r=t[0];var a=t[1];return{type:"sqrt",body:a,index:r}});n("\\text",{numArgs:1,argTypes:["text"],greediness:2},function(e,t){var r=t[0];var a;if(r.type==="ordgroup"){a=r.value}else{a=[r]}return{type:"text",body:a}});n("\\color",{numArgs:2,allowedInText:true,greediness:3,argTypes:["color","original"]},function(e,t){var r=t[0];var a=t[1];var i;if(a.type==="ordgroup"){i=a.value}else{i=[a]}return{type:"color",color:r.value,value:i}});n("\\overline",{numArgs:1},function(e,t){var r=t[0];return{type:"overline",body:r}});n("\\rule",{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},function(e,t){var r=t[0];var a=t[1];var i=t[2];return{type:"rule",shift:r&&r.value,width:a.value,height:i.value}});n("\\KaTeX",{numArgs:0},function(e){return{type:"katex"}});n("\\phantom",{numArgs:1},function(e,t){var r=t[0];var a;if(r.type==="ordgroup"){a=r.value}else{a=[r]}return{type:"phantom",value:a}});var s={"\\bigl":{type:"open",size:1},"\\Bigl":{type:"open",size:2},"\\biggl":{type:"open",size:3},"\\Biggl":{type:"open",size:4},"\\bigr":{type:"close",size:1},"\\Bigr":{type:"close",size:2},"\\biggr":{type:"close",size:3},"\\Biggr":{type:"close",size:4},"\\bigm":{type:"rel",size:1},"\\Bigm":{type:"rel",size:2},"\\biggm":{type:"rel",size:3},"\\Biggm":{type:"rel",size:4},"\\big":{type:"textord",size:1},"\\Big":{type:"textord",size:2},"\\bigg":{type:"textord",size:3},"\\Bigg":{type:"textord",size:4}};var l=["(",")","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\\lceil","\\rceil","<",">","\\langle","\\rangle","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\\lmoustache","\\rmoustache","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];var o={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak"};n(["\\blue","\\orange","\\pink","\\red","\\green","\\gray","\\purple","\\blueA","\\blueB","\\blueC","\\blueD","\\blueE","\\tealA","\\tealB","\\tealC","\\tealD","\\tealE","\\greenA","\\greenB","\\greenC","\\greenD","\\greenE","\\goldA","\\goldB","\\goldC","\\goldD","\\goldE","\\redA","\\redB","\\redC","\\redD","\\redE","\\maroonA","\\maroonB","\\maroonC","\\maroonD","\\maroonE","\\purpleA","\\purpleB","\\purpleC","\\purpleD","\\purpleE","\\mintA","\\mintB","\\mintC","\\grayA","\\grayB","\\grayC","\\grayD","\\grayE","\\grayF","\\grayG","\\grayH","\\grayI","\\kaBlue","\\kaGreen"],{numArgs:1,allowedInText:true,greediness:3},function(e,t){var r=t[0];var a;if(r.type==="ordgroup"){a=r.value}else{a=[r]}return{type:"color",color:"katex-"+e.funcName.slice(1),value:a}});n(["\\arcsin","\\arccos","\\arctan","\\arg","\\cos","\\cosh","\\cot","\\coth","\\csc","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\tan","\\tanh"],{numArgs:0},function(e){return{type:"op",limits:false,symbol:false,body:e.funcName}});n(["\\det","\\gcd","\\inf","\\lim","\\liminf","\\limsup","\\max","\\min","\\Pr","\\sup"],{numArgs:0},function(e){return{type:"op",limits:true,symbol:false,body:e.funcName}});n(["\\int","\\iint","\\iiint","\\oint"],{numArgs:0},function(e){return{type:"op",limits:false,symbol:true,body:e.funcName}});n(["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint"],{numArgs:0},function(e){return{type:"op",limits:true,symbol:true,body:e.funcName}});n(["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom"],{numArgs:2,greediness:2},function(e,t){var r=t[0];var a=t[1];var i;var n=null;var s=null;var l="auto";switch(e.funcName){case"\\dfrac":case"\\frac":case"\\tfrac":i=true;break;case"\\dbinom":case"\\binom":case"\\tbinom":i=false;n="(";s=")";break;default:throw new Error("Unrecognized genfrac command")}switch(e.funcName){case"\\dfrac":case"\\dbinom":l="display";break;case"\\tfrac":case"\\tbinom":l="text";break}return{type:"genfrac",
-numer:r,denom:a,hasBarLine:i,leftDelim:n,rightDelim:s,size:l}});n(["\\llap","\\rlap"],{numArgs:1,allowedInText:true},function(e,t){var r=t[0];return{type:e.funcName.slice(1),body:r}});n(["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg","\\left","\\right"],{numArgs:1},function(e,t){var r=t[0];if(!a.contains(l,r.value)){throw new i("Invalid delimiter: '"+r.value+"' after '"+e.funcName+"'",e.lexer,e.positions[1])}if(e.funcName==="\\left"||e.funcName==="\\right"){return{type:"leftright",value:r.value}}else{return{type:"delimsizing",size:s[e.funcName].size,delimType:s[e.funcName].type,value:r.value}}});n(["\\tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],0,null);n(["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],0,null);n(["\\mathrm","\\mathit","\\mathbf","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],{numArgs:1,greediness:2},function(e,t){var r=t[0];var a=e.funcName;if(a in o){a=o[a]}return{type:"font",font:a.slice(1),body:r}});n(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot"],{numArgs:1},function(e,t){var r=t[0];return{type:"accent",accent:e.funcName,base:r}});n(["\\over","\\choose"],{numArgs:0},function(e){var t;switch(e.funcName){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",replaceWith:t}});n(["\\\\","\\cr"],{numArgs:0,numOptionalArgs:1,argTypes:["size"]},function(e,t){var r=t[0];return{type:"cr",size:r}});n(["\\begin","\\end"],{numArgs:1,argTypes:["text"]},function(e,t){var r=t[0];if(r.type!=="ordgroup"){throw new i("Invalid environment name",e.lexer,e.positions[1])}var a="";for(var n=0;n<r.value.length;++n){a+=r.value[n].value}return{type:"environment",name:a,namepos:e.positions[1]}})},{"./ParseError":5,"./utils":23}],19:[function(e,t,r){var a=e("./utils");function i(e,t){this.type=e;this.attributes={};this.children=t||[]}i.prototype.setAttribute=function(e,t){this.attributes[e]=t};i.prototype.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,t)){e.setAttribute(t,this.attributes[t])}}for(var r=0;r<this.children.length;r++){e.appendChild(this.children[r].toNode())}return e};i.prototype.toMarkup=function(){var e="<"+this.type;for(var t in this.attributes){if(Object.prototype.hasOwnProperty.call(this.attributes,t)){e+=" "+t+'="';e+=a.escape(this.attributes[t]);e+='"'}}e+=">";for(var r=0;r<this.children.length;r++){e+=this.children[r].toMarkup()}e+="</"+this.type+">";return e};function n(e){this.text=e}n.prototype.toNode=function(){return document.createTextNode(this.text)};n.prototype.toMarkup=function(){return a.escape(this.text)};t.exports={MathNode:i,TextNode:n}},{"./utils":23}],20:[function(e,t,r){function a(e,t,r){this.type=e;this.value=t;this.mode=r}t.exports={ParseNode:a}},{}],21:[function(e,t,r){var a=e("./Parser");var i=function(e,t){var r=new a(e,t);return r.parse()};t.exports=i},{"./Parser":6}],22:[function(e,t,r){t.exports={math:{},text:{}};function a(e,r,a,i,n){t.exports[e][n]={font:r,group:a,replace:i}}var i="math";var n="text";var s="main";var l="ams";var o="accent";var u="bin";var p="close";var h="inner";var c="mathord";var v="op";var m="open";var f="punct";var d="rel";var g="spacing";var y="textord";a(i,s,d,"\u2261","\\equiv");a(i,s,d,"\u227a","\\prec");a(i,s,d,"\u227b","\\succ");a(i,s,d,"\u223c","\\sim");a(i,s,d,"\u22a5","\\perp");a(i,s,d,"\u2aaf","\\preceq");a(i,s,d,"\u2ab0","\\succeq");a(i,s,d,"\u2243","\\simeq");a(i,s,d,"\u2223","\\mid");a(i,s,d,"\u226a","\\ll");a(i,s,d,"\u226b","\\gg");a(i,s,d,"\u224d","\\asymp");a(i,s,d,"\u2225","\\parallel");a(i,s,d,"\u22c8","\\bowtie");a(i,s,d,"\u2323","\\smile");a(i,s,d,"\u2291","\\sqsubseteq");a(i,s,d,"\u2292","\\sqsupseteq");a(i,s,d,"\u2250","\\doteq");a(i,s,d,"\u2322","\\frown");a(i,s,d,"\u220b","\\ni");a(i,s,d,"\u221d","\\propto");a(i,s,d,"\u22a2","\\vdash");a(i,s,d,"\u22a3","\\dashv");a(i,s,d,"\u220b","\\owns");a(i,s,f,".","\\ldotp");a(i,s,f,"\u22c5","\\cdotp");a(i,s,y,"#","\\#");a(i,s,y,"&","\\&");a(i,s,y,"\u2135","\\aleph");a(i,s,y,"\u2200","\\forall");a(i,s,y,"\u210f","\\hbar");a(i,s,y,"\u2203","\\exists");a(i,s,y,"\u2207","\\nabla");a(i,s,y,"\u266d","\\flat");a(i,s,y,"\u2113","\\ell");a(i,s,y,"\u266e","\\natural");a(i,s,y,"\u2663","\\clubsuit");a(i,s,y,"\u2118","\\wp");a(i,s,y,"\u266f","\\sharp");a(i,s,y,"\u2662","\\diamondsuit");a(i,s,y,"\u211c","\\Re");a(i,s,y,"\u2661","\\heartsuit");a(i,s,y,"\u2111","\\Im");a(i,s,y,"\u2660","\\spadesuit");a(i,s,y,"\u2020","\\dag");a(i,s,y,"\u2021","\\ddag");a(i,s,p,"\u23b1","\\rmoustache");a(i,s,m,"\u23b0","\\lmoustache");a(i,s,p,"\u27ef","\\rgroup");a(i,s,m,"\u27ee","\\lgroup");a(i,s,u,"\u2213","\\mp");a(i,s,u,"\u2296","\\ominus");a(i,s,u,"\u228e","\\uplus");a(i,s,u,"\u2293","\\sqcap");a(i,s,u,"\u2217","\\ast");a(i,s,u,"\u2294","\\sqcup");a(i,s,u,"\u25ef","\\bigcirc");a(i,s,u,"\u2219","\\bullet");a(i,s,u,"\u2021","\\ddagger");a(i,s,u,"\u2240","\\wr");a(i,s,u,"\u2a3f","\\amalg");a(i,s,d,"\u27f5","\\longleftarrow");a(i,s,d,"\u21d0","\\Leftarrow");a(i,s,d,"\u27f8","\\Longleftarrow");a(i,s,d,"\u27f6","\\longrightarrow");a(i,s,d,"\u21d2","\\Rightarrow");a(i,s,d,"\u27f9","\\Longrightarrow");a(i,s,d,"\u2194","\\leftrightarrow");a(i,s,d,"\u27f7","\\longleftrightarrow");a(i,s,d,"\u21d4","\\Leftrightarrow");a(i,s,d,"\u27fa","\\Longleftrightarrow");a(i,s,d,"\u21a6","\\mapsto");a(i,s,d,"\u27fc","\\longmapsto");a(i,s,d,"\u2197","\\nearrow");a(i,s,d,"\u21a9","\\hookleftarrow");a(i,s,d,"\u21aa","\\hookrightarrow");a(i,s,d,"\u2198","\\searrow");a(i,s,d,"\u21bc","\\leftharpoonup");a(i,s,d,"\u21c0","\\rightharpoonup");a(i,s,d,"\u2199","\\swarrow");a(i,s,d,"\u21bd","\\leftharpoondown");a(i,s,d,"\u21c1","\\rightharpoondown");a(i,s,d,"\u2196","\\nwarrow");a(i,s,d,"\u21cc","\\rightleftharpoons");a(i,l,d,"\u226e","\\nless");a(i,l,d,"\ue010","\\nleqslant");a(i,l,d,"\ue011","\\nleqq");a(i,l,d,"\u2a87","\\lneq");a(i,l,d,"\u2268","\\lneqq");a(i,l,d,"\ue00c","\\lvertneqq");a(i,l,d,"\u22e6","\\lnsim");a(i,l,d,"\u2a89","\\lnapprox");a(i,l,d,"\u2280","\\nprec");a(i,l,d,"\u22e0","\\npreceq");a(i,l,d,"\u22e8","\\precnsim");a(i,l,d,"\u2ab9","\\precnapprox");a(i,l,d,"\u2241","\\nsim");a(i,l,d,"\ue006","\\nshortmid");a(i,l,d,"\u2224","\\nmid");a(i,l,d,"\u22ac","\\nvdash");a(i,l,d,"\u22ad","\\nvDash");a(i,l,d,"\u22ea","\\ntriangleleft");a(i,l,d,"\u22ec","\\ntrianglelefteq");a(i,l,d,"\u228a","\\subsetneq");a(i,l,d,"\ue01a","\\varsubsetneq");a(i,l,d,"\u2acb","\\subsetneqq");a(i,l,d,"\ue017","\\varsubsetneqq");a(i,l,d,"\u226f","\\ngtr");a(i,l,d,"\ue00f","\\ngeqslant");a(i,l,d,"\ue00e","\\ngeqq");a(i,l,d,"\u2a88","\\gneq");a(i,l,d,"\u2269","\\gneqq");a(i,l,d,"\ue00d","\\gvertneqq");a(i,l,d,"\u22e7","\\gnsim");a(i,l,d,"\u2a8a","\\gnapprox");a(i,l,d,"\u2281","\\nsucc");a(i,l,d,"\u22e1","\\nsucceq");a(i,l,d,"\u22e9","\\succnsim");a(i,l,d,"\u2aba","\\succnapprox");a(i,l,d,"\u2246","\\ncong");a(i,l,d,"\ue007","\\nshortparallel");a(i,l,d,"\u2226","\\nparallel");a(i,l,d,"\u22af","\\nVDash");a(i,l,d,"\u22eb","\\ntriangleright");a(i,l,d,"\u22ed","\\ntrianglerighteq");a(i,l,d,"\ue018","\\nsupseteqq");a(i,l,d,"\u228b","\\supsetneq");a(i,l,d,"\ue01b","\\varsupsetneq");a(i,l,d,"\u2acc","\\supsetneqq");a(i,l,d,"\ue019","\\varsupsetneqq");a(i,l,d,"\u22ae","\\nVdash");a(i,l,d,"\u2ab5","\\precneqq");a(i,l,d,"\u2ab6","\\succneqq");a(i,l,d,"\ue016","\\nsubseteqq");a(i,l,u,"\u22b4","\\unlhd");a(i,l,u,"\u22b5","\\unrhd");a(i,l,d,"\u219a","\\nleftarrow");a(i,l,d,"\u219b","\\nrightarrow");a(i,l,d,"\u21cd","\\nLeftarrow");a(i,l,d,"\u21cf","\\nRightarrow");a(i,l,d,"\u21ae","\\nleftrightarrow");a(i,l,d,"\u21ce","\\nLeftrightarrow");a(i,l,d,"\u25b3","\\vartriangle");a(i,l,y,"\u210f","\\hslash");a(i,l,y,"\u25bd","\\triangledown");a(i,l,y,"\u25ca","\\lozenge");a(i,l,y,"\u24c8","\\circledS");a(i,l,y,"\xae","\\circledR");a(i,l,y,"\u2221","\\measuredangle");a(i,l,y,"\u2204","\\nexists");a(i,l,y,"\u2127","\\mho");a(i,l,y,"\u2132","\\Finv");a(i,l,y,"\u2141","\\Game");a(i,l,y,"k","\\Bbbk");a(i,l,y,"\u2035","\\backprime");a(i,l,y,"\u25b2","\\blacktriangle");a(i,l,y,"\u25bc","\\blacktriangledown");a(i,l,y,"\u25a0","\\blacksquare");a(i,l,y,"\u29eb","\\blacklozenge");a(i,l,y,"\u2605","\\bigstar");a(i,l,y,"\u2222","\\sphericalangle");a(i,l,y,"\u2201","\\complement");a(i,l,y,"\xf0","\\eth");a(i,l,y,"\u2571","\\diagup");a(i,l,y,"\u2572","\\diagdown");a(i,l,y,"\u25a1","\\square");a(i,l,y,"\u25a1","\\Box");a(i,l,y,"\u25ca","\\Diamond");a(i,l,y,"\xa5","\\yen");a(i,l,y,"\u2713","\\checkmark");a(i,l,y,"\u2136","\\beth");a(i,l,y,"\u2138","\\daleth");a(i,l,y,"\u2137","\\gimel");a(i,l,y,"\u03dd","\\digamma");a(i,l,y,"\u03f0","\\varkappa");a(i,l,m,"\u250c","\\ulcorner");a(i,l,p,"\u2510","\\urcorner");a(i,l,m,"\u2514","\\llcorner");a(i,l,p,"\u2518","\\lrcorner");a(i,l,d,"\u2266","\\leqq");a(i,l,d,"\u2a7d","\\leqslant");a(i,l,d,"\u2a95","\\eqslantless");a(i,l,d,"\u2272","\\lesssim");a(i,l,d,"\u2a85","\\lessapprox");a(i,l,d,"\u224a","\\approxeq");a(i,l,u,"\u22d6","\\lessdot");a(i,l,d,"\u22d8","\\lll");a(i,l,d,"\u2276","\\lessgtr");a(i,l,d,"\u22da","\\lesseqgtr");a(i,l,d,"\u2a8b","\\lesseqqgtr");a(i,l,d,"\u2251","\\doteqdot");a(i,l,d,"\u2253","\\risingdotseq");a(i,l,d,"\u2252","\\fallingdotseq");a(i,l,d,"\u223d","\\backsim");a(i,l,d,"\u22cd","\\backsimeq");a(i,l,d,"\u2ac5","\\subseteqq");a(i,l,d,"\u22d0","\\Subset");a(i,l,d,"\u228f","\\sqsubset");a(i,l,d,"\u227c","\\preccurlyeq");a(i,l,d,"\u22de","\\curlyeqprec");a(i,l,d,"\u227e","\\precsim");a(i,l,d,"\u2ab7","\\precapprox");a(i,l,d,"\u22b2","\\vartriangleleft");a(i,l,d,"\u22b4","\\trianglelefteq");a(i,l,d,"\u22a8","\\vDash");a(i,l,d,"\u22aa","\\Vvdash");a(i,l,d,"\u2323","\\smallsmile");a(i,l,d,"\u2322","\\smallfrown");a(i,l,d,"\u224f","\\bumpeq");a(i,l,d,"\u224e","\\Bumpeq");a(i,l,d,"\u2267","\\geqq");a(i,l,d,"\u2a7e","\\geqslant");a(i,l,d,"\u2a96","\\eqslantgtr");a(i,l,d,"\u2273","\\gtrsim");a(i,l,d,"\u2a86","\\gtrapprox");a(i,l,u,"\u22d7","\\gtrdot");a(i,l,d,"\u22d9","\\ggg");a(i,l,d,"\u2277","\\gtrless");a(i,l,d,"\u22db","\\gtreqless");a(i,l,d,"\u2a8c","\\gtreqqless");a(i,l,d,"\u2256","\\eqcirc");a(i,l,d,"\u2257","\\circeq");a(i,l,d,"\u225c","\\triangleq");a(i,l,d,"\u223c","\\thicksim");a(i,l,d,"\u2248","\\thickapprox");a(i,l,d,"\u2ac6","\\supseteqq");a(i,l,d,"\u22d1","\\Supset");a(i,l,d,"\u2290","\\sqsupset");a(i,l,d,"\u227d","\\succcurlyeq");a(i,l,d,"\u22df","\\curlyeqsucc");a(i,l,d,"\u227f","\\succsim");a(i,l,d,"\u2ab8","\\succapprox");a(i,l,d,"\u22b3","\\vartriangleright");a(i,l,d,"\u22b5","\\trianglerighteq");a(i,l,d,"\u22a9","\\Vdash");a(i,l,d,"\u2223","\\shortmid");a(i,l,d,"\u2225","\\shortparallel");a(i,l,d,"\u226c","\\between");a(i,l,d,"\u22d4","\\pitchfork");a(i,l,d,"\u221d","\\varpropto");a(i,l,d,"\u25c0","\\blacktriangleleft");a(i,l,d,"\u2234","\\therefore");a(i,l,d,"\u220d","\\backepsilon");a(i,l,d,"\u25b6","\\blacktriangleright");a(i,l,d,"\u2235","\\because");a(i,l,d,"\u22d8","\\llless");a(i,l,d,"\u22d9","\\gggtr");a(i,l,u,"\u22b2","\\lhd");a(i,l,u,"\u22b3","\\rhd");a(i,l,d,"\u2242","\\eqsim");a(i,s,d,"\u22c8","\\Join");a(i,l,d,"\u2251","\\Doteq");a(i,l,u,"\u2214","\\dotplus");a(i,l,u,"\u2216","\\smallsetminus");a(i,l,u,"\u22d2","\\Cap");a(i,l,u,"\u22d3","\\Cup");a(i,l,u,"\u2a5e","\\doublebarwedge");a(i,l,u,"\u229f","\\boxminus");a(i,l,u,"\u229e","\\boxplus");a(i,l,u,"\u22c7","\\divideontimes");a(i,l,u,"\u22c9","\\ltimes");a(i,l,u,"\u22ca","\\rtimes");a(i,l,u,"\u22cb","\\leftthreetimes");a(i,l,u,"\u22cc","\\rightthreetimes");a(i,l,u,"\u22cf","\\curlywedge");a(i,l,u,"\u22ce","\\curlyvee");a(i,l,u,"\u229d","\\circleddash");a(i,l,u,"\u229b","\\circledast");a(i,l,u,"\u22c5","\\centerdot");a(i,l,u,"\u22ba","\\intercal");a(i,l,u,"\u22d2","\\doublecap");a(i,l,u,"\u22d3","\\doublecup");a(i,l,u,"\u22a0","\\boxtimes");a(i,l,d,"\u21e2","\\dashrightarrow");a(i,l,d,"\u21e0","\\dashleftarrow");a(i,l,d,"\u21c7","\\leftleftarrows");a(i,l,d,"\u21c6","\\leftrightarrows");a(i,l,d,"\u21da","\\Lleftarrow");a(i,l,d,"\u219e","\\twoheadleftarrow");a(i,l,d,"\u21a2","\\leftarrowtail");a(i,l,d,"\u21ab","\\looparrowleft");a(i,l,d,"\u21cb","\\leftrightharpoons");a(i,l,d,"\u21b6","\\curvearrowleft");a(i,l,d,"\u21ba","\\circlearrowleft");a(i,l,d,"\u21b0","\\Lsh");a(i,l,d,"\u21c8","\\upuparrows");a(i,l,d,"\u21bf","\\upharpoonleft");a(i,l,d,"\u21c3","\\downharpoonleft");a(i,l,d,"\u22b8","\\multimap");a(i,l,d,"\u21ad","\\leftrightsquigarrow");a(i,l,d,"\u21c9","\\rightrightarrows");a(i,l,d,"\u21c4","\\rightleftarrows");a(i,l,d,"\u21a0","\\twoheadrightarrow");a(i,l,d,"\u21a3","\\rightarrowtail");a(i,l,d,"\u21ac","\\looparrowright");a(i,l,d,"\u21b7","\\curvearrowright");a(i,l,d,"\u21bb","\\circlearrowright");a(i,l,d,"\u21b1","\\Rsh");a(i,l,d,"\u21ca","\\downdownarrows");a(i,l,d,"\u21be","\\upharpoonright");a(i,l,d,"\u21c2","\\downharpoonright");a(i,l,d,"\u21dd","\\rightsquigarrow");a(i,l,d,"\u21dd","\\leadsto");a(i,l,d,"\u21db","\\Rrightarrow");a(i,l,d,"\u21be","\\restriction");a(i,s,y,"\u2018","`");a(i,s,y,"$","\\$");a(i,s,y,"%","\\%");a(i,s,y,"_","\\_");a(i,s,y,"\u2220","\\angle");a(i,s,y,"\u221e","\\infty");a(i,s,y,"\u2032","\\prime");a(i,s,y,"\u25b3","\\triangle");a(i,s,y,"\u0393","\\Gamma");a(i,s,y,"\u0394","\\Delta");a(i,s,y,"\u0398","\\Theta");a(i,s,y,"\u039b","\\Lambda");a(i,s,y,"\u039e","\\Xi");a(i,s,y,"\u03a0","\\Pi");a(i,s,y,"\u03a3","\\Sigma");a(i,s,y,"\u03a5","\\Upsilon");a(i,s,y,"\u03a6","\\Phi");a(i,s,y,"\u03a8","\\Psi");a(i,s,y,"\u03a9","\\Omega");a(i,s,y,"\xac","\\neg");a(i,s,y,"\xac","\\lnot");a(i,s,y,"\u22a4","\\top");a(i,s,y,"\u22a5","\\bot");a(i,s,y,"\u2205","\\emptyset");a(i,l,y,"\u2205","\\varnothing");a(i,s,c,"\u03b1","\\alpha");a(i,s,c,"\u03b2","\\beta");a(i,s,c,"\u03b3","\\gamma");a(i,s,c,"\u03b4","\\delta");a(i,s,c,"\u03f5","\\epsilon");a(i,s,c,"\u03b6","\\zeta");a(i,s,c,"\u03b7","\\eta");a(i,s,c,"\u03b8","\\theta");a(i,s,c,"\u03b9","\\iota");a(i,s,c,"\u03ba","\\kappa");a(i,s,c,"\u03bb","\\lambda");a(i,s,c,"\u03bc","\\mu");a(i,s,c,"\u03bd","\\nu");a(i,s,c,"\u03be","\\xi");a(i,s,c,"o","\\omicron");a(i,s,c,"\u03c0","\\pi");a(i,s,c,"\u03c1","\\rho");a(i,s,c,"\u03c3","\\sigma");a(i,s,c,"\u03c4","\\tau");a(i,s,c,"\u03c5","\\upsilon");a(i,s,c,"\u03d5","\\phi");a(i,s,c,"\u03c7","\\chi");a(i,s,c,"\u03c8","\\psi");a(i,s,c,"\u03c9","\\omega");a(i,s,c,"\u03b5","\\varepsilon");a(i,s,c,"\u03d1","\\vartheta");a(i,s,c,"\u03d6","\\varpi");a(i,s,c,"\u03f1","\\varrho");a(i,s,c,"\u03c2","\\varsigma");a(i,s,c,"\u03c6","\\varphi");a(i,s,u,"\u2217","*");a(i,s,u,"+","+");a(i,s,u,"\u2212","-");a(i,s,u,"\u22c5","\\cdot");a(i,s,u,"\u2218","\\circ");a(i,s,u,"\xf7","\\div");a(i,s,u,"\xb1","\\pm");a(i,s,u,"\xd7","\\times");a(i,s,u,"\u2229","\\cap");a(i,s,u,"\u222a","\\cup");a(i,s,u,"\u2216","\\setminus");a(i,s,u,"\u2227","\\land");a(i,s,u,"\u2228","\\lor");a(i,s,u,"\u2227","\\wedge");a(i,s,u,"\u2228","\\vee");a(i,s,y,"\u221a","\\surd");a(i,s,m,"(","(");a(i,s,m,"[","[");a(i,s,m,"\u27e8","\\langle");a(i,s,m,"\u2223","\\lvert");a(i,s,m,"\u2225","\\lVert");a(i,s,p,")",")");a(i,s,p,"]","]");a(i,s,p,"?","?");a(i,s,p,"!","!");a(i,s,p,"\u27e9","\\rangle");a(i,s,p,"\u2223","\\rvert");a(i,s,p,"\u2225","\\rVert");a(i,s,d,"=","=");a(i,s,d,"<","<");a(i,s,d,">",">");a(i,s,d,":",":");a(i,s,d,"\u2248","\\approx");a(i,s,d,"\u2245","\\cong");a(i,s,d,"\u2265","\\ge");a(i,s,d,"\u2265","\\geq");a(i,s,d,"\u2190","\\gets");a(i,s,d,">","\\gt");a(i,s,d,"\u2208","\\in");a(i,s,d,"\u2209","\\notin");a(i,s,d,"\u2282","\\subset");a(i,s,d,"\u2283","\\supset");a(i,s,d,"\u2286","\\subseteq");a(i,s,d,"\u2287","\\supseteq");a(i,l,d,"\u2288","\\nsubseteq");a(i,l,d,"\u2289","\\nsupseteq");a(i,s,d,"\u22a8","\\models");a(i,s,d,"\u2190","\\leftarrow");a(i,s,d,"\u2264","\\le");a(i,s,d,"\u2264","\\leq");a(i,s,d,"<","\\lt");a(i,s,d,"\u2260","\\ne");a(i,s,d,"\u2260","\\neq");a(i,s,d,"\u2192","\\rightarrow");a(i,s,d,"\u2192","\\to");a(i,l,d,"\u2271","\\ngeq");a(i,l,d,"\u2270","\\nleq");a(i,s,g,null,"\\!");a(i,s,g,"\xa0","\\ ");a(i,s,g,"\xa0","~");a(i,s,g,null,"\\,");a(i,s,g,null,"\\:");a(i,s,g,null,"\\;");a(i,s,g,null,"\\enspace");a(i,s,g,null,"\\qquad");a(i,s,g,null,"\\quad");a(i,s,g,"\xa0","\\space");a(i,s,f,",",",");a(i,s,f,";",";");a(i,s,f,":","\\colon");a(i,l,u,"\u22bc","\\barwedge");a(i,l,u,"\u22bb","\\veebar");a(i,s,u,"\u2299","\\odot");a(i,s,u,"\u2295","\\oplus");a(i,s,u,"\u2297","\\otimes");a(i,s,y,"\u2202","\\partial");a(i,s,u,"\u2298","\\oslash");a(i,l,u,"\u229a","\\circledcirc");a(i,l,u,"\u22a1","\\boxdot");a(i,s,u,"\u25b3","\\bigtriangleup");a(i,s,u,"\u25bd","\\bigtriangledown");a(i,s,u,"\u2020","\\dagger");a(i,s,u,"\u22c4","\\diamond");a(i,s,u,"\u22c6","\\star");a(i,s,u,"\u25c3","\\triangleleft");a(i,s,u,"\u25b9","\\triangleright");a(i,s,m,"{","\\{");a(i,s,p,"}","\\}");a(i,s,m,"{","\\lbrace");a(i,s,p,"}","\\rbrace");a(i,s,m,"[","\\lbrack");a(i,s,p,"]","\\rbrack");a(i,s,m,"\u230a","\\lfloor");a(i,s,p,"\u230b","\\rfloor");a(i,s,m,"\u2308","\\lceil");a(i,s,p,"\u2309","\\rceil");a(i,s,y,"\\","\\backslash");a(i,s,y,"\u2223","|");a(i,s,y,"\u2223","\\vert");a(i,s,y,"\u2225","\\|");a(i,s,y,"\u2225","\\Vert");a(i,s,d,"\u2191","\\uparrow");a(i,s,d,"\u21d1","\\Uparrow");a(i,s,d,"\u2193","\\downarrow");a(i,s,d,"\u21d3","\\Downarrow");a(i,s,d,"\u2195","\\updownarrow");a(i,s,d,"\u21d5","\\Updownarrow");a(i,i,v,"\u2210","\\coprod");a(i,i,v,"\u22c1","\\bigvee");a(i,i,v,"\u22c0","\\bigwedge");a(i,i,v,"\u2a04","\\biguplus");a(i,i,v,"\u22c2","\\bigcap");a(i,i,v,"\u22c3","\\bigcup");a(i,i,v,"\u222b","\\int");a(i,i,v,"\u222b","\\intop");a(i,i,v,"\u222c","\\iint");a(i,i,v,"\u222d","\\iiint");a(i,i,v,"\u220f","\\prod");a(i,i,v,"\u2211","\\sum");a(i,i,v,"\u2a02","\\bigotimes");a(i,i,v,"\u2a01","\\bigoplus");a(i,i,v,"\u2a00","\\bigodot");a(i,i,v,"\u222e","\\oint");a(i,i,v,"\u2a06","\\bigsqcup");a(i,i,v,"\u222b","\\smallint");a(i,s,h,"\u2026","\\ldots");a(i,s,h,"\u22ef","\\cdots");a(i,s,h,"\u22f1","\\ddots");a(i,s,y,"\u22ee","\\vdots");a(i,s,o,"\xb4","\\acute");a(i,s,o,"`","\\grave");a(i,s,o,"\xa8","\\ddot");a(i,s,o,"~","\\tilde");a(i,s,o,"\xaf","\\bar");a(i,s,o,"\u02d8","\\breve");a(i,s,o,"\u02c7","\\check");a(i,s,o,"^","\\hat");a(i,s,o,"\u20d7","\\vec");a(i,s,o,"\u02d9","\\dot");a(i,s,c,"\u0131","\\imath");a(i,s,c,"\u0237","\\jmath");a(n,s,g,"\xa0","\\ ");a(n,s,g,"\xa0"," ");a(n,s,g,"\xa0","~");var b;var x;var w='0123456789/@."';for(b=0;b<w.length;b++){x=w.charAt(b);a(i,s,y,x,x)}var k="0123456789`!@*()-=+[]'\";:?/.,";for(b=0;b<k.length;b++){x=k.charAt(b);a(n,s,y,x,x)}var z="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";for(b=0;b<z.length;b++){x=z.charAt(b);a(i,s,c,x,x);a(n,s,y,x,x)}},{}],23:[function(e,t,r){var a=Array.prototype.indexOf;var i=function(e,t){if(e==null){return-1}if(a&&e.indexOf===a){return e.indexOf(t)}var r=0;var i=e.length;for(;r<i;r++){if(e[r]===t){return r}}return-1};var n=function(e,t){return i(e,t)!==-1};var s=function(e,t){return e===undefined?t:e};var l=/([A-Z])/g;var o=function(e){return e.replace(l,"-$1").toLowerCase()};var u={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"};var p=/[&><"']/g;function h(e){return u[e]}function c(e){return(""+e).replace(p,h)}var v;if(typeof document!=="undefined"){var m=document.createElement("span");if("textContent"in m){v=function(e,t){e.textContent=t}}else{v=function(e,t){e.innerText=t}}}function f(e){v(e,"")}t.exports={contains:n,deflt:s,escape:c,hyphenate:o,indexOf:i,setTextContent:v,clearNode:f}},{}]},{},[1])(1)});
diff --git a/webapp/non_npm_dependencies/katex/katex.js b/webapp/non_npm_dependencies/katex/katex.js
deleted file mode 100644
index 4d64606bf..000000000
--- a/webapp/non_npm_dependencies/katex/katex.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/* eslint no-console:0 */
-/**
- * This is the main entry point for KaTeX. Here, we expose functions for
- * rendering expressions either to DOM nodes or to markup strings.
- *
- * We also expose the ParseError class to check if errors thrown from KaTeX are
- * errors in the expression, or errors in javascript handling.
- */
-
-var ParseError = require("./src/ParseError");
-var Settings = require("./src/Settings");
-
-var buildTree = require("./src/buildTree");
-var parseTree = require("./src/parseTree");
-var utils = require("./src/utils");
-
-/**
- * Parse and build an expression, and place that expression in the DOM node
- * given.
- */
-var render = function(expression, baseNode, options) {
- utils.clearNode(baseNode);
-
- var settings = new Settings(options);
-
- var tree = parseTree(expression, settings);
- var node = buildTree(tree, expression, settings).toNode();
-
- baseNode.appendChild(node);
-};
-
-// KaTeX's styles don't work properly in quirks mode. Print out an error, and
-// disable rendering.
-if (typeof document !== "undefined") {
- if (document.compatMode !== "CSS1Compat") {
- typeof console !== "undefined" && console.warn(
- "Warning: KaTeX doesn't work in quirks mode. Make sure your " +
- "website has a suitable doctype.");
-
- render = function() {
- throw new ParseError("KaTeX doesn't work in quirks mode.");
- };
- }
-}
-
-/**
- * Parse and build an expression, and return the markup for that.
- */
-var renderToString = function(expression, options) {
- var settings = new Settings(options);
-
- var tree = parseTree(expression, settings);
- return buildTree(tree, expression, settings).toMarkup();
-};
-
-/**
- * Parse an expression and return the parse tree.
- */
-var generateParseTree = function(expression, options) {
- var settings = new Settings(options);
- return parseTree(expression, settings);
-};
-
-module.exports = {
- render: render,
- renderToString: renderToString,
- /**
- * NOTE: This method is not currently recommended for public use.
- * The internal tree representation is unstable and is very likely
- * to change. Use at your own risk.
- */
- __parse: generateParseTree,
- ParseError: ParseError,
-};
diff --git a/webapp/non_npm_dependencies/katex/package.json b/webapp/non_npm_dependencies/katex/package.json
deleted file mode 100644
index 24b6c6936..000000000
--- a/webapp/non_npm_dependencies/katex/package.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "name": "katex",
- "version": "0.6.0-pre",
- "description": "Fast math typesetting for the web.",
- "main": "katex.js",
- "repository": {
- "type": "git",
- "url": "git://github.com/Khan/KaTeX.git"
- },
- "files": [
- "katex.js",
- "cli.js",
- "src/",
- "dist/"
- ],
- "license": "MIT",
- "devDependencies": {
- "browserify": "^10.2.4",
- "clean-css": "~2.2.15",
- "eslint": "^1.10.2",
- "express": "~3.3.3",
- "glob": "^5.0.15",
- "jasmine": "^2.3.2",
- "jasmine-core": "^2.3.4",
- "js-yaml": "^3.3.1",
- "jspngopt": "^0.1.0",
- "less": "~1.7.5",
- "nomnom": "^1.8.1",
- "pako": "0.2.7",
- "selenium-webdriver": "^2.46.1",
- "uglify-js": "~2.4.15"
- },
- "bin": "cli.js",
- "scripts": {
- "test": "make lint test",
- "prepublish": "make dist"
- },
- "dependencies": {
- "match-at": "^0.1.0"
- }
-}
diff --git a/webapp/non_npm_dependencies/katex/src/Lexer.js b/webapp/non_npm_dependencies/katex/src/Lexer.js
deleted file mode 100644
index 4d6697c6a..000000000
--- a/webapp/non_npm_dependencies/katex/src/Lexer.js
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * The Lexer class handles tokenizing the input in various ways. Since our
- * parser expects us to be able to backtrack, the lexer allows lexing from any
- * given starting point.
- *
- * Its main exposed function is the `lex` function, which takes a position to
- * lex from and a type of token to lex. It defers to the appropriate `_innerLex`
- * function.
- *
- * The various `_innerLex` functions perform the actual lexing of different
- * kinds.
- */
-
-var matchAt = require("match-at");
-
-var ParseError = require("./ParseError");
-
-// The main lexer class
-function Lexer(input) {
- this._input = input;
-}
-
-// The resulting token returned from `lex`.
-function Token(text, data, position) {
- this.text = text;
- this.data = data;
- this.position = position;
-}
-
-/* The following tokenRegex
- * - matches typical whitespace (but not NBSP etc.) using its first group
- * - matches symbol combinations which result in a single output character
- * - does not match any control character \x00-\x1f except whitespace
- * - does not match a bare backslash
- * - matches any ASCII character except those just mentioned
- * - does not match the BMP private use area \uE000-\uF8FF
- * - does not match bare surrogate code units
- * - matches any BMP character except for those just described
- * - matches any valid Unicode surrogate pair
- * - matches a backslash followed by one or more letters
- * - matches a backslash followed by any BMP character, including newline
- * Just because the Lexer matches something doesn't mean it's valid input:
- * If there is no matching function or symbol definition, the Parser will
- * still reject the input.
- */
-var tokenRegex = new RegExp(
- "([ \r\n\t]+)|(" + // whitespace
- "---?" + // special combinations
- "|[!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint
- "|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair
- "|\\\\(?:[a-zA-Z]+|[^\uD800-\uDFFF])" + // function name
- ")"
-);
-
-var whitespaceRegex = /\s*/;
-
-/**
- * This function lexes a single normal token. It takes a position and
- * whether it should completely ignore whitespace or not.
- */
-Lexer.prototype._innerLex = function(pos, ignoreWhitespace) {
- var input = this._input;
- if (pos === input.length) {
- return new Token("EOF", null, pos);
- }
- var match = matchAt(tokenRegex, input, pos);
- if (match === null) {
- throw new ParseError(
- "Unexpected character: '" + input[pos] + "'",
- this, pos);
- } else if (match[2]) { // matched non-whitespace
- return new Token(match[2], null, pos + match[2].length);
- } else if (ignoreWhitespace) {
- return this._innerLex(pos + match[1].length, true);
- } else { // concatenate whitespace to a single space
- return new Token(" ", null, pos + match[1].length);
- }
-};
-
-// A regex to match a CSS color (like #ffffff or BlueViolet)
-var cssColor = /#[a-z0-9]+|[a-z]+/i;
-
-/**
- * This function lexes a CSS color.
- */
-Lexer.prototype._innerLexColor = function(pos) {
- var input = this._input;
-
- // Ignore whitespace
- var whitespace = matchAt(whitespaceRegex, input, pos)[0];
- pos += whitespace.length;
-
- var match;
- if ((match = matchAt(cssColor, input, pos))) {
- // If we look like a color, return a color
- return new Token(match[0], null, pos + match[0].length);
- } else {
- throw new ParseError("Invalid color", this, pos);
- }
-};
-
-// A regex to match a dimension. Dimensions look like
-// "1.2em" or ".4pt" or "1 ex"
-var sizeRegex = /(-?)\s*(\d+(?:\.\d*)?|\.\d+)\s*([a-z]{2})/;
-
-/**
- * This function lexes a dimension.
- */
-Lexer.prototype._innerLexSize = function(pos) {
- var input = this._input;
-
- // Ignore whitespace
- var whitespace = matchAt(whitespaceRegex, input, pos)[0];
- pos += whitespace.length;
-
- var match;
- if ((match = matchAt(sizeRegex, input, pos))) {
- var unit = match[3];
- // We only currently handle "em" and "ex" units
- if (unit !== "em" && unit !== "ex") {
- throw new ParseError("Invalid unit: '" + unit + "'", this, pos);
- }
- return new Token(match[0], {
- number: +(match[1] + match[2]),
- unit: unit,
- }, pos + match[0].length);
- }
-
- throw new ParseError("Invalid size", this, pos);
-};
-
-/**
- * This function lexes a string of whitespace.
- */
-Lexer.prototype._innerLexWhitespace = function(pos) {
- var input = this._input;
-
- var whitespace = matchAt(whitespaceRegex, input, pos)[0];
- pos += whitespace.length;
-
- return new Token(whitespace[0], null, pos);
-};
-
-/**
- * This function lexes a single token starting at `pos` and of the given mode.
- * Based on the mode, we defer to one of the `_innerLex` functions.
- */
-Lexer.prototype.lex = function(pos, mode) {
- if (mode === "math") {
- return this._innerLex(pos, true);
- } else if (mode === "text") {
- return this._innerLex(pos, false);
- } else if (mode === "color") {
- return this._innerLexColor(pos);
- } else if (mode === "size") {
- return this._innerLexSize(pos);
- } else if (mode === "whitespace") {
- return this._innerLexWhitespace(pos);
- }
-};
-
-module.exports = Lexer;
diff --git a/webapp/non_npm_dependencies/katex/src/Options.js b/webapp/non_npm_dependencies/katex/src/Options.js
deleted file mode 100644
index 39ff37bfc..000000000
--- a/webapp/non_npm_dependencies/katex/src/Options.js
+++ /dev/null
@@ -1,189 +0,0 @@
-/**
- * This file contains information about the options that the Parser carries
- * around with it while parsing. Data is held in an `Options` object, and when
- * recursing, a new `Options` object can be created with the `.with*` and
- * `.reset` functions.
- */
-
-/**
- * This is the main options class. It contains the style, size, color, and font
- * of the current parse level. It also contains the style and size of the parent
- * parse level, so size changes can be handled efficiently.
- *
- * Each of the `.with*` and `.reset` functions passes its current style and size
- * as the parentStyle and parentSize of the new options class, so parent
- * handling is taken care of automatically.
- */
-function Options(data) {
- this.style = data.style;
- this.color = data.color;
- this.size = data.size;
- this.phantom = data.phantom;
- this.font = data.font;
-
- if (data.parentStyle === undefined) {
- this.parentStyle = data.style;
- } else {
- this.parentStyle = data.parentStyle;
- }
-
- if (data.parentSize === undefined) {
- this.parentSize = data.size;
- } else {
- this.parentSize = data.parentSize;
- }
-}
-
-/**
- * Returns a new options object with the same properties as "this". Properties
- * from "extension" will be copied to the new options object.
- */
-Options.prototype.extend = function(extension) {
- var data = {
- style: this.style,
- size: this.size,
- color: this.color,
- parentStyle: this.style,
- parentSize: this.size,
- phantom: this.phantom,
- font: this.font,
- };
-
- for (var key in extension) {
- if (extension.hasOwnProperty(key)) {
- data[key] = extension[key];
- }
- }
-
- return new Options(data);
-};
-
-/**
- * Create a new options object with the given style.
- */
-Options.prototype.withStyle = function(style) {
- return this.extend({
- style: style,
- });
-};
-
-/**
- * Create a new options object with the given size.
- */
-Options.prototype.withSize = function(size) {
- return this.extend({
- size: size,
- });
-};
-
-/**
- * Create a new options object with the given color.
- */
-Options.prototype.withColor = function(color) {
- return this.extend({
- color: color,
- });
-};
-
-/**
- * Create a new options object with "phantom" set to true.
- */
-Options.prototype.withPhantom = function() {
- return this.extend({
- phantom: true,
- });
-};
-
-/**
- * Create a new options objects with the give font.
- */
-Options.prototype.withFont = function(font) {
- return this.extend({
- font: font,
- });
-};
-
-/**
- * Create a new options object with the same style, size, and color. This is
- * used so that parent style and size changes are handled correctly.
- */
-Options.prototype.reset = function() {
- return this.extend({});
-};
-
-/**
- * A map of color names to CSS colors.
- * TODO(emily): Remove this when we have real macros
- */
-var colorMap = {
- "katex-blue": "#6495ed",
- "katex-orange": "#ffa500",
- "katex-pink": "#ff00af",
- "katex-red": "#df0030",
- "katex-green": "#28ae7b",
- "katex-gray": "gray",
- "katex-purple": "#9d38bd",
- "katex-blueA": "#c7e9f1",
- "katex-blueB": "#9cdceb",
- "katex-blueC": "#58c4dd",
- "katex-blueD": "#29abca",
- "katex-blueE": "#1c758a",
- "katex-tealA": "#acead7",
- "katex-tealB": "#76ddc0",
- "katex-tealC": "#5cd0b3",
- "katex-tealD": "#55c1a7",
- "katex-tealE": "#49a88f",
- "katex-greenA": "#c9e2ae",
- "katex-greenB": "#a6cf8c",
- "katex-greenC": "#83c167",
- "katex-greenD": "#77b05d",
- "katex-greenE": "#699c52",
- "katex-goldA": "#f7c797",
- "katex-goldB": "#f9b775",
- "katex-goldC": "#f0ac5f",
- "katex-goldD": "#e1a158",
- "katex-goldE": "#c78d46",
- "katex-redA": "#f7a1a3",
- "katex-redB": "#ff8080",
- "katex-redC": "#fc6255",
- "katex-redD": "#e65a4c",
- "katex-redE": "#cf5044",
- "katex-maroonA": "#ecabc1",
- "katex-maroonB": "#ec92ab",
- "katex-maroonC": "#c55f73",
- "katex-maroonD": "#a24d61",
- "katex-maroonE": "#94424f",
- "katex-purpleA": "#caa3e8",
- "katex-purpleB": "#b189c6",
- "katex-purpleC": "#9a72ac",
- "katex-purpleD": "#715582",
- "katex-purpleE": "#644172",
- "katex-mintA": "#f5f9e8",
- "katex-mintB": "#edf2df",
- "katex-mintC": "#e0e5cc",
- "katex-grayA": "#fdfdfd",
- "katex-grayB": "#f7f7f7",
- "katex-grayC": "#eeeeee",
- "katex-grayD": "#dddddd",
- "katex-grayE": "#cccccc",
- "katex-grayF": "#aaaaaa",
- "katex-grayG": "#999999",
- "katex-grayH": "#555555",
- "katex-grayI": "#333333",
- "katex-kaBlue": "#314453",
- "katex-kaGreen": "#639b24",
-};
-
-/**
- * Gets the CSS color of the current options object, accounting for the
- * `colorMap`.
- */
-Options.prototype.getColor = function() {
- if (this.phantom) {
- return "transparent";
- } else {
- return colorMap[this.color] || this.color;
- }
-};
-
-module.exports = Options;
diff --git a/webapp/non_npm_dependencies/katex/src/ParseError.js b/webapp/non_npm_dependencies/katex/src/ParseError.js
deleted file mode 100644
index 320f0bd69..000000000
--- a/webapp/non_npm_dependencies/katex/src/ParseError.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * This is the ParseError class, which is the main error thrown by KaTeX
- * functions when something has gone wrong. This is used to distinguish internal
- * errors from errors in the expression that the user provided.
- */
-function ParseError(message, lexer, position) {
- var error = "KaTeX parse error: " + message;
-
- if (lexer !== undefined && position !== undefined) {
- // If we have the input and a position, make the error a bit fancier
-
- // Prepend some information
- error += " at position " + position + ": ";
-
- // Get the input
- var input = lexer._input;
- // Insert a combining underscore at the correct position
- input = input.slice(0, position) + "\u0332" +
- input.slice(position);
-
- // Extract some context from the input and add it to the error
- var begin = Math.max(0, position - 15);
- var end = position + 15;
- error += input.slice(begin, end);
- }
-
- // Some hackery to make ParseError a prototype of Error
- // See http://stackoverflow.com/a/8460753
- var self = new Error(error);
- self.name = "ParseError";
- self.__proto__ = ParseError.prototype;
-
- self.position = position;
- return self;
-}
-
-// More hackery
-ParseError.prototype.__proto__ = Error.prototype;
-
-module.exports = ParseError;
diff --git a/webapp/non_npm_dependencies/katex/src/Parser.js b/webapp/non_npm_dependencies/katex/src/Parser.js
deleted file mode 100644
index 15b808e17..000000000
--- a/webapp/non_npm_dependencies/katex/src/Parser.js
+++ /dev/null
@@ -1,737 +0,0 @@
-/* eslint no-constant-condition:0 */
-var functions = require("./functions");
-var environments = require("./environments");
-var Lexer = require("./Lexer");
-var symbols = require("./symbols");
-var utils = require("./utils");
-
-var parseData = require("./parseData");
-var ParseError = require("./ParseError");
-
-/**
- * This file contains the parser used to parse out a TeX expression from the
- * input. Since TeX isn't context-free, standard parsers don't work particularly
- * well.
- *
- * The strategy of this parser is as such:
- *
- * The main functions (the `.parse...` ones) take a position in the current
- * parse string to parse tokens from. The lexer (found in Lexer.js, stored at
- * this.lexer) also supports pulling out tokens at arbitrary places. When
- * individual tokens are needed at a position, the lexer is called to pull out a
- * token, which is then used.
- *
- * The parser has a property called "mode" indicating the mode that
- * the parser is currently in. Currently it has to be one of "math" or
- * "text", which denotes whether the current environment is a math-y
- * one or a text-y one (e.g. inside \text). Currently, this serves to
- * limit the functions which can be used in text mode.
- *
- * The main functions then return an object which contains the useful data that
- * was parsed at its given point, and a new position at the end of the parsed
- * data. The main functions can call each other and continue the parsing by
- * using the returned position as a new starting point.
- *
- * There are also extra `.handle...` functions, which pull out some reused
- * functionality into self-contained functions.
- *
- * The earlier functions return ParseNodes.
- * The later functions (which are called deeper in the parse) sometimes return
- * ParseFuncOrArgument, which contain a ParseNode as well as some data about
- * whether the parsed object is a function which is missing some arguments, or a
- * standalone object which can be used as an argument to another function.
- */
-
-/**
- * Main Parser class
- */
-function Parser(input, settings) {
- // Make a new lexer
- this.lexer = new Lexer(input);
- // Store the settings for use in parsing
- this.settings = settings;
-}
-
-var ParseNode = parseData.ParseNode;
-
-/**
- * An initial function (without its arguments), or an argument to a function.
- * The `result` argument should be a ParseNode.
- */
-function ParseFuncOrArgument(result, isFunction) {
- this.result = result;
- // Is this a function (i.e. is it something defined in functions.js)?
- this.isFunction = isFunction;
-}
-
-/**
- * Checks a result to make sure it has the right type, and throws an
- * appropriate error otherwise.
- *
- * @param {boolean=} consume whether to consume the expected token,
- * defaults to true
- */
-Parser.prototype.expect = function(text, consume) {
- if (this.nextToken.text !== text) {
- throw new ParseError(
- "Expected '" + text + "', got '" + this.nextToken.text + "'",
- this.lexer, this.nextToken.position
- );
- }
- if (consume !== false) {
- this.consume();
- }
-};
-
-/**
- * Considers the current look ahead token as consumed,
- * and fetches the one after that as the new look ahead.
- */
-Parser.prototype.consume = function() {
- this.pos = this.nextToken.position;
- this.nextToken = this.lexer.lex(this.pos, this.mode);
-};
-
-/**
- * Main parsing function, which parses an entire input.
- *
- * @return {?Array.<ParseNode>}
- */
-Parser.prototype.parse = function() {
- // Try to parse the input
- this.mode = "math";
- this.pos = 0;
- this.nextToken = this.lexer.lex(this.pos, this.mode);
- var parse = this.parseInput();
- return parse;
-};
-
-/**
- * Parses an entire input tree.
- */
-Parser.prototype.parseInput = function() {
- // Parse an expression
- var expression = this.parseExpression(false);
- // If we succeeded, make sure there's an EOF at the end
- this.expect("EOF", false);
- return expression;
-};
-
-var endOfExpression = ["}", "\\end", "\\right", "&", "\\\\", "\\cr"];
-
-/**
- * Parses an "expression", which is a list of atoms.
- *
- * @param {boolean} breakOnInfix Should the parsing stop when we hit infix
- * nodes? This happens when functions have higher precendence
- * than infix nodes in implicit parses.
- *
- * @param {?string} breakOnToken The token that the expression should end with,
- * or `null` if something else should end the expression.
- *
- * @return {ParseNode}
- */
-Parser.prototype.parseExpression = function(breakOnInfix, breakOnToken) {
- var body = [];
- // Keep adding atoms to the body until we can't parse any more atoms (either
- // we reached the end, a }, or a \right)
- while (true) {
- var lex = this.nextToken;
- var pos = this.pos;
- if (endOfExpression.indexOf(lex.text) !== -1) {
- break;
- }
- if (breakOnToken && lex.text === breakOnToken) {
- break;
- }
- var atom = this.parseAtom();
- if (!atom) {
- if (!this.settings.throwOnError && lex.text[0] === "\\") {
- var errorNode = this.handleUnsupportedCmd();
- body.push(errorNode);
-
- pos = lex.position;
- continue;
- }
-
- break;
- }
- if (breakOnInfix && atom.type === "infix") {
- // rewind so we can parse the infix atom again
- this.pos = pos;
- this.nextToken = lex;
- break;
- }
- body.push(atom);
- }
- return this.handleInfixNodes(body);
-};
-
-/**
- * Rewrites infix operators such as \over with corresponding commands such
- * as \frac.
- *
- * There can only be one infix operator per group. If there's more than one
- * then the expression is ambiguous. This can be resolved by adding {}.
- *
- * @returns {Array}
- */
-Parser.prototype.handleInfixNodes = function(body) {
- var overIndex = -1;
- var funcName;
-
- for (var i = 0; i < body.length; i++) {
- var node = body[i];
- if (node.type === "infix") {
- if (overIndex !== -1) {
- throw new ParseError("only one infix operator per group",
- this.lexer, -1);
- }
- overIndex = i;
- funcName = node.value.replaceWith;
- }
- }
-
- if (overIndex !== -1) {
- var numerNode;
- var denomNode;
-
- var numerBody = body.slice(0, overIndex);
- var denomBody = body.slice(overIndex + 1);
-
- if (numerBody.length === 1 && numerBody[0].type === "ordgroup") {
- numerNode = numerBody[0];
- } else {
- numerNode = new ParseNode("ordgroup", numerBody, this.mode);
- }
-
- if (denomBody.length === 1 && denomBody[0].type === "ordgroup") {
- denomNode = denomBody[0];
- } else {
- denomNode = new ParseNode("ordgroup", denomBody, this.mode);
- }
-
- var value = this.callFunction(
- funcName, [numerNode, denomNode], null);
- return [new ParseNode(value.type, value, this.mode)];
- } else {
- return body;
- }
-};
-
-// The greediness of a superscript or subscript
-var SUPSUB_GREEDINESS = 1;
-
-/**
- * Handle a subscript or superscript with nice errors.
- */
-Parser.prototype.handleSupSubscript = function(name) {
- var symbol = this.nextToken.text;
- var symPos = this.pos;
- this.consume();
- var group = this.parseGroup();
-
- if (!group) {
- if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") {
- return this.handleUnsupportedCmd();
- } else {
- throw new ParseError(
- "Expected group after '" + symbol + "'",
- this.lexer,
- symPos + 1
- );
- }
- } else if (group.isFunction) {
- // ^ and _ have a greediness, so handle interactions with functions'
- // greediness
- var funcGreediness = functions[group.result].greediness;
- if (funcGreediness > SUPSUB_GREEDINESS) {
- return this.parseFunction(group);
- } else {
- throw new ParseError(
- "Got function '" + group.result + "' with no arguments " +
- "as " + name,
- this.lexer, symPos + 1);
- }
- } else {
- return group.result;
- }
-};
-
-/**
- * Converts the textual input of an unsupported command into a text node
- * contained within a color node whose color is determined by errorColor
- */
-Parser.prototype.handleUnsupportedCmd = function() {
- var text = this.nextToken.text;
- var textordArray = [];
-
- for (var i = 0; i < text.length; i++) {
- textordArray.push(new ParseNode("textord", text[i], "text"));
- }
-
- var textNode = new ParseNode(
- "text",
- {
- body: textordArray,
- type: "text",
- },
- this.mode);
-
- var colorNode = new ParseNode(
- "color",
- {
- color: this.settings.errorColor,
- value: [textNode],
- type: "color",
- },
- this.mode);
-
- this.consume();
- return colorNode;
-};
-
-/**
- * Parses a group with optional super/subscripts.
- *
- * @return {?ParseNode}
- */
-Parser.prototype.parseAtom = function() {
- // The body of an atom is an implicit group, so that things like
- // \left(x\right)^2 work correctly.
- var base = this.parseImplicitGroup();
-
- // In text mode, we don't have superscripts or subscripts
- if (this.mode === "text") {
- return base;
- }
-
- // Note that base may be empty (i.e. null) at this point.
-
- var superscript;
- var subscript;
- while (true) {
- // Lex the first token
- var lex = this.nextToken;
-
- if (lex.text === "\\limits" || lex.text === "\\nolimits") {
- // We got a limit control
- if (!base || base.type !== "op") {
- throw new ParseError(
- "Limit controls must follow a math operator",
- this.lexer, this.pos);
- } else {
- var limits = lex.text === "\\limits";
- base.value.limits = limits;
- base.value.alwaysHandleSupSub = true;
- }
- this.consume();
- } else if (lex.text === "^") {
- // We got a superscript start
- if (superscript) {
- throw new ParseError(
- "Double superscript", this.lexer, this.pos);
- }
- superscript = this.handleSupSubscript("superscript");
- } else if (lex.text === "_") {
- // We got a subscript start
- if (subscript) {
- throw new ParseError(
- "Double subscript", this.lexer, this.pos);
- }
- subscript = this.handleSupSubscript("subscript");
- } else if (lex.text === "'") {
- // We got a prime
- var prime = new ParseNode("textord", "\\prime", this.mode);
-
- // Many primes can be grouped together, so we handle this here
- var primes = [prime];
- this.consume();
- // Keep lexing tokens until we get something that's not a prime
- while (this.nextToken.text === "'") {
- // For each one, add another prime to the list
- primes.push(prime);
- this.consume();
- }
- // Put them into an ordgroup as the superscript
- superscript = new ParseNode("ordgroup", primes, this.mode);
- } else {
- // If it wasn't ^, _, or ', stop parsing super/subscripts
- break;
- }
- }
-
- if (superscript || subscript) {
- // If we got either a superscript or subscript, create a supsub
- return new ParseNode("supsub", {
- base: base,
- sup: superscript,
- sub: subscript,
- }, this.mode);
- } else {
- // Otherwise return the original body
- return base;
- }
-};
-
-// A list of the size-changing functions, for use in parseImplicitGroup
-var sizeFuncs = [
- "\\tiny", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize",
- "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge",
-];
-
-// A list of the style-changing functions, for use in parseImplicitGroup
-var styleFuncs = [
- "\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle",
-];
-
-/**
- * Parses an implicit group, which is a group that starts at the end of a
- * specified, and ends right before a higher explicit group ends, or at EOL. It
- * is used for functions that appear to affect the current style, like \Large or
- * \textrm, where instead of keeping a style we just pretend that there is an
- * implicit grouping after it until the end of the group. E.g.
- * small text {\Large large text} small text again
- * It is also used for \left and \right to get the correct grouping.
- *
- * @return {?ParseNode}
- */
-Parser.prototype.parseImplicitGroup = function() {
- var start = this.parseSymbol();
-
- if (start == null) {
- // If we didn't get anything we handle, fall back to parseFunction
- return this.parseFunction();
- }
-
- var func = start.result;
- var body;
-
- if (func === "\\left") {
- // If we see a left:
- // Parse the entire left function (including the delimiter)
- var left = this.parseFunction(start);
- // Parse out the implicit body
- body = this.parseExpression(false);
- // Check the next token
- this.expect("\\right", false);
- var right = this.parseFunction();
- return new ParseNode("leftright", {
- body: body,
- left: left.value.value,
- right: right.value.value,
- }, this.mode);
- } else if (func === "\\begin") {
- // begin...end is similar to left...right
- var begin = this.parseFunction(start);
- var envName = begin.value.name;
- if (!environments.hasOwnProperty(envName)) {
- throw new ParseError(
- "No such environment: " + envName,
- this.lexer, begin.value.namepos);
- }
- // Build the environment object. Arguments and other information will
- // be made available to the begin and end methods using properties.
- var env = environments[envName];
- var args = this.parseArguments("\\begin{" + envName + "}", env);
- var context = {
- mode: this.mode,
- envName: envName,
- parser: this,
- lexer: this.lexer,
- positions: args.pop(),
- };
- var result = env.handler(context, args);
- this.expect("\\end", false);
- var end = this.parseFunction();
- if (end.value.name !== envName) {
- throw new ParseError(
- "Mismatch: \\begin{" + envName + "} matched " +
- "by \\end{" + end.value.name + "}",
- this.lexer /* , end.value.namepos */);
- // TODO: Add position to the above line and adjust test case,
- // requires #385 to get merged first
- }
- result.position = end.position;
- return result;
- } else if (utils.contains(sizeFuncs, func)) {
- // If we see a sizing function, parse out the implict body
- body = this.parseExpression(false);
- return new ParseNode("sizing", {
- // Figure out what size to use based on the list of functions above
- size: "size" + (utils.indexOf(sizeFuncs, func) + 1),
- value: body,
- }, this.mode);
- } else if (utils.contains(styleFuncs, func)) {
- // If we see a styling function, parse out the implict body
- body = this.parseExpression(true);
- return new ParseNode("styling", {
- // Figure out what style to use by pulling out the style from
- // the function name
- style: func.slice(1, func.length - 5),
- value: body,
- }, this.mode);
- } else {
- // Defer to parseFunction if it's not a function we handle
- return this.parseFunction(start);
- }
-};
-
-/**
- * Parses an entire function, including its base and all of its arguments.
- * The base might either have been parsed already, in which case
- * it is provided as an argument, or it's the next group in the input.
- *
- * @param {ParseFuncOrArgument=} baseGroup optional as described above
- * @return {?ParseNode}
- */
-Parser.prototype.parseFunction = function(baseGroup) {
- if (!baseGroup) {
- baseGroup = this.parseGroup();
- }
-
- if (baseGroup) {
- if (baseGroup.isFunction) {
- var func = baseGroup.result;
- var funcData = functions[func];
- if (this.mode === "text" && !funcData.allowedInText) {
- throw new ParseError(
- "Can't use function '" + func + "' in text mode",
- this.lexer, baseGroup.position);
- }
-
- var args = this.parseArguments(func, funcData);
- var result = this.callFunction(func, args, args.pop());
- return new ParseNode(result.type, result, this.mode);
- } else {
- return baseGroup.result;
- }
- } else {
- return null;
- }
-};
-
-/**
- * Call a function handler with a suitable context and arguments.
- */
-Parser.prototype.callFunction = function(name, args, positions) {
- var context = {
- funcName: name,
- parser: this,
- lexer: this.lexer,
- positions: positions,
- };
- return functions[name].handler(context, args);
-};
-
-/**
- * Parses the arguments of a function or environment
- *
- * @param {string} func "\name" or "\begin{name}"
- * @param {{numArgs:number,numOptionalArgs:number|undefined}} funcData
- * @return the array of arguments, with the list of positions as last element
- */
-Parser.prototype.parseArguments = function(func, funcData) {
- var totalArgs = funcData.numArgs + funcData.numOptionalArgs;
- if (totalArgs === 0) {
- return [[this.pos]];
- }
-
- var baseGreediness = funcData.greediness;
- var positions = [this.pos];
- var args = [];
-
- for (var i = 0; i < totalArgs; i++) {
- var argType = funcData.argTypes && funcData.argTypes[i];
- var arg;
- if (i < funcData.numOptionalArgs) {
- if (argType) {
- arg = this.parseSpecialGroup(argType, true);
- } else {
- arg = this.parseOptionalGroup();
- }
- if (!arg) {
- args.push(null);
- positions.push(this.pos);
- continue;
- }
- } else {
- if (argType) {
- arg = this.parseSpecialGroup(argType);
- } else {
- arg = this.parseGroup();
- }
- if (!arg) {
- if (!this.settings.throwOnError &&
- this.nextToken.text[0] === "\\") {
- arg = new ParseFuncOrArgument(
- this.handleUnsupportedCmd(this.nextToken.text),
- false);
- } else {
- throw new ParseError(
- "Expected group after '" + func + "'",
- this.lexer, this.pos);
- }
- }
- }
- var argNode;
- if (arg.isFunction) {
- var argGreediness =
- functions[arg.result].greediness;
- if (argGreediness > baseGreediness) {
- argNode = this.parseFunction(arg);
- } else {
- throw new ParseError(
- "Got function '" + arg.result + "' as " +
- "argument to '" + func + "'",
- this.lexer, this.pos - 1);
- }
- } else {
- argNode = arg.result;
- }
- args.push(argNode);
- positions.push(this.pos);
- }
-
- args.push(positions);
-
- return args;
-};
-
-
-/**
- * Parses a group when the mode is changing. Takes a position, a new mode, and
- * an outer mode that is used to parse the outside.
- *
- * @return {?ParseFuncOrArgument}
- */
-Parser.prototype.parseSpecialGroup = function(innerMode, optional) {
- var outerMode = this.mode;
- // Handle `original` argTypes
- if (innerMode === "original") {
- innerMode = outerMode;
- }
-
- if (innerMode === "color" || innerMode === "size") {
- // color and size modes are special because they should have braces and
- // should only lex a single symbol inside
- var openBrace = this.nextToken;
- if (optional && openBrace.text !== "[") {
- // optional arguments should return null if they don't exist
- return null;
- }
- // The call to expect will lex the token after the '{' in inner mode
- this.mode = innerMode;
- this.expect(optional ? "[" : "{");
- var inner = this.nextToken;
- this.mode = outerMode;
- var data;
- if (innerMode === "color") {
- data = inner.text;
- } else {
- data = inner.data;
- }
- this.consume(); // consume the token stored in inner
- this.expect(optional ? "]" : "}");
- return new ParseFuncOrArgument(
- new ParseNode(innerMode, data, outerMode),
- false);
- } else if (innerMode === "text") {
- // text mode is special because it should ignore the whitespace before
- // it
- var whitespace = this.lexer.lex(this.pos, "whitespace");
- this.pos = whitespace.position;
- }
-
- // By the time we get here, innerMode is one of "text" or "math".
- // We switch the mode of the parser, recurse, then restore the old mode.
- this.mode = innerMode;
- this.nextToken = this.lexer.lex(this.pos, innerMode);
- var res;
- if (optional) {
- res = this.parseOptionalGroup();
- } else {
- res = this.parseGroup();
- }
- this.mode = outerMode;
- this.nextToken = this.lexer.lex(this.pos, outerMode);
- return res;
-};
-
-/**
- * Parses a group, which is either a single nucleus (like "x") or an expression
- * in braces (like "{x+y}")
- *
- * @return {?ParseFuncOrArgument}
- */
-Parser.prototype.parseGroup = function() {
- // Try to parse an open brace
- if (this.nextToken.text === "{") {
- // If we get a brace, parse an expression
- this.consume();
- var expression = this.parseExpression(false);
- // Make sure we get a close brace
- this.expect("}");
- return new ParseFuncOrArgument(
- new ParseNode("ordgroup", expression, this.mode),
- false);
- } else {
- // Otherwise, just return a nucleus
- return this.parseSymbol();
- }
-};
-
-/**
- * Parses a group, which is an expression in brackets (like "[x+y]")
- *
- * @return {?ParseFuncOrArgument}
- */
-Parser.prototype.parseOptionalGroup = function() {
- // Try to parse an open bracket
- if (this.nextToken.text === "[") {
- // If we get a brace, parse an expression
- this.consume();
- var expression = this.parseExpression(false, "]");
- // Make sure we get a close bracket
- this.expect("]");
- return new ParseFuncOrArgument(
- new ParseNode("ordgroup", expression, this.mode),
- false);
- } else {
- // Otherwise, return null,
- return null;
- }
-};
-
-/**
- * Parse a single symbol out of the string. Here, we handle both the functions
- * we have defined, as well as the single character symbols
- *
- * @return {?ParseFuncOrArgument}
- */
-Parser.prototype.parseSymbol = function() {
- var nucleus = this.nextToken;
-
- if (functions[nucleus.text]) {
- this.consume();
- // If there exists a function with this name, we return the function and
- // say that it is a function.
- return new ParseFuncOrArgument(
- nucleus.text,
- true);
- } else if (symbols[this.mode][nucleus.text]) {
- this.consume();
- // Otherwise if this is a no-argument function, find the type it
- // corresponds to in the symbols map
- return new ParseFuncOrArgument(
- new ParseNode(symbols[this.mode][nucleus.text].group,
- nucleus.text, this.mode),
- false);
- } else {
- return null;
- }
-};
-
-Parser.prototype.ParseNode = ParseNode;
-
-module.exports = Parser;
diff --git a/webapp/non_npm_dependencies/katex/src/Settings.js b/webapp/non_npm_dependencies/katex/src/Settings.js
deleted file mode 100644
index 644014504..000000000
--- a/webapp/non_npm_dependencies/katex/src/Settings.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * This is a module for storing settings passed into KaTeX. It correctly handles
- * default settings.
- */
-
-/**
- * Helper function for getting a default value if the value is undefined
- */
-function get(option, defaultValue) {
- return option === undefined ? defaultValue : option;
-}
-
-/**
- * The main Settings object
- *
- * The current options stored are:
- * - displayMode: Whether the expression should be typeset by default in
- * textstyle or displaystyle (default false)
- */
-function Settings(options) {
- // allow null options
- options = options || {};
- this.displayMode = get(options.displayMode, false);
- this.throwOnError = get(options.throwOnError, true);
- this.errorColor = get(options.errorColor, "#cc0000");
-}
-
-module.exports = Settings;
diff --git a/webapp/non_npm_dependencies/katex/src/Style.js b/webapp/non_npm_dependencies/katex/src/Style.js
deleted file mode 100644
index 10e5ef2cc..000000000
--- a/webapp/non_npm_dependencies/katex/src/Style.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * This file contains information and classes for the various kinds of styles
- * used in TeX. It provides a generic `Style` class, which holds information
- * about a specific style. It then provides instances of all the different kinds
- * of styles possible, and provides functions to move between them and get
- * information about them.
- */
-
-/**
- * The main style class. Contains a unique id for the style, a size (which is
- * the same for cramped and uncramped version of a style), a cramped flag, and a
- * size multiplier, which gives the size difference between a style and
- * textstyle.
- */
-function Style(id, size, multiplier, cramped) {
- this.id = id;
- this.size = size;
- this.cramped = cramped;
- this.sizeMultiplier = multiplier;
-}
-
-/**
- * Get the style of a superscript given a base in the current style.
- */
-Style.prototype.sup = function() {
- return styles[sup[this.id]];
-};
-
-/**
- * Get the style of a subscript given a base in the current style.
- */
-Style.prototype.sub = function() {
- return styles[sub[this.id]];
-};
-
-/**
- * Get the style of a fraction numerator given the fraction in the current
- * style.
- */
-Style.prototype.fracNum = function() {
- return styles[fracNum[this.id]];
-};
-
-/**
- * Get the style of a fraction denominator given the fraction in the current
- * style.
- */
-Style.prototype.fracDen = function() {
- return styles[fracDen[this.id]];
-};
-
-/**
- * Get the cramped version of a style (in particular, cramping a cramped style
- * doesn't change the style).
- */
-Style.prototype.cramp = function() {
- return styles[cramp[this.id]];
-};
-
-/**
- * HTML class name, like "displaystyle cramped"
- */
-Style.prototype.cls = function() {
- return sizeNames[this.size] + (this.cramped ? " cramped" : " uncramped");
-};
-
-/**
- * HTML Reset class name, like "reset-textstyle"
- */
-Style.prototype.reset = function() {
- return resetNames[this.size];
-};
-
-// IDs of the different styles
-var D = 0;
-var Dc = 1;
-var T = 2;
-var Tc = 3;
-var S = 4;
-var Sc = 5;
-var SS = 6;
-var SSc = 7;
-
-// String names for the different sizes
-var sizeNames = [
- "displaystyle textstyle",
- "textstyle",
- "scriptstyle",
- "scriptscriptstyle",
-];
-
-// Reset names for the different sizes
-var resetNames = [
- "reset-textstyle",
- "reset-textstyle",
- "reset-scriptstyle",
- "reset-scriptscriptstyle",
-];
-
-// Instances of the different styles
-var styles = [
- new Style(D, 0, 1.0, false),
- new Style(Dc, 0, 1.0, true),
- new Style(T, 1, 1.0, false),
- new Style(Tc, 1, 1.0, true),
- new Style(S, 2, 0.7, false),
- new Style(Sc, 2, 0.7, true),
- new Style(SS, 3, 0.5, false),
- new Style(SSc, 3, 0.5, true),
-];
-
-// Lookup tables for switching from one style to another
-var sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];
-var sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];
-var fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];
-var fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];
-var cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];
-
-// We only export some of the styles. Also, we don't export the `Style` class so
-// no more styles can be generated.
-module.exports = {
- DISPLAY: styles[D],
- TEXT: styles[T],
- SCRIPT: styles[S],
- SCRIPTSCRIPT: styles[SS],
-};
diff --git a/webapp/non_npm_dependencies/katex/src/buildCommon.js b/webapp/non_npm_dependencies/katex/src/buildCommon.js
deleted file mode 100644
index b60e1860a..000000000
--- a/webapp/non_npm_dependencies/katex/src/buildCommon.js
+++ /dev/null
@@ -1,450 +0,0 @@
-/* eslint no-console:0 */
-/**
- * This module contains general functions that can be used for building
- * different kinds of domTree nodes in a consistent manner.
- */
-
-var domTree = require("./domTree");
-var fontMetrics = require("./fontMetrics");
-var symbols = require("./symbols");
-var utils = require("./utils");
-
-var greekCapitals = [
- "\\Gamma",
- "\\Delta",
- "\\Theta",
- "\\Lambda",
- "\\Xi",
- "\\Pi",
- "\\Sigma",
- "\\Upsilon",
- "\\Phi",
- "\\Psi",
- "\\Omega",
-];
-
-var dotlessLetters = [
- "\u0131", // dotless i, \imath
- "\u0237", // dotless j, \jmath
-];
-
-/**
- * Makes a symbolNode after translation via the list of symbols in symbols.js.
- * Correctly pulls out metrics for the character, and optionally takes a list of
- * classes to be attached to the node.
- */
-var makeSymbol = function(value, style, mode, color, classes) {
- // Replace the value with its replaced value from symbol.js
- if (symbols[mode][value] && symbols[mode][value].replace) {
- value = symbols[mode][value].replace;
- }
-
- var metrics = fontMetrics.getCharacterMetrics(value, style);
-
- var symbolNode;
- if (metrics) {
- symbolNode = new domTree.symbolNode(
- value, metrics.height, metrics.depth, metrics.italic, metrics.skew,
- classes);
- } else {
- // TODO(emily): Figure out a good way to only print this in development
- typeof console !== "undefined" && console.warn(
- "No character metrics for '" + value + "' in style '" +
- style + "'");
- symbolNode = new domTree.symbolNode(value, 0, 0, 0, 0, classes);
- }
-
- if (color) {
- symbolNode.style.color = color;
- }
-
- return symbolNode;
-};
-
-/**
- * Makes a symbol in Main-Regular or AMS-Regular.
- * Used for rel, bin, open, close, inner, and punct.
- */
-var mathsym = function(value, mode, color, classes) {
- // Decide what font to render the symbol in by its entry in the symbols
- // table.
- // Have a special case for when the value = \ because the \ is used as a
- // textord in unsupported command errors but cannot be parsed as a regular
- // text ordinal and is therefore not present as a symbol in the symbols
- // table for text
- if (value === "\\" || symbols[mode][value].font === "main") {
- return makeSymbol(value, "Main-Regular", mode, color, classes);
- } else {
- return makeSymbol(
- value, "AMS-Regular", mode, color, classes.concat(["amsrm"]));
- }
-};
-
-/**
- * Makes a symbol in the default font for mathords and textords.
- */
-var mathDefault = function(value, mode, color, classes, type) {
- if (type === "mathord") {
- return mathit(value, mode, color, classes);
- } else if (type === "textord") {
- return makeSymbol(
- value, "Main-Regular", mode, color, classes.concat(["mathrm"]));
- } else {
- throw new Error("unexpected type: " + type + " in mathDefault");
- }
-};
-
-/**
- * Makes a symbol in the italic math font.
- */
-var mathit = function(value, mode, color, classes) {
- if (/[0-9]/.test(value.charAt(0)) ||
- // glyphs for \imath and \jmath do not exist in Math-Italic so we
- // need to use Main-Italic instead
- utils.contains(dotlessLetters, value) ||
- utils.contains(greekCapitals, value)) {
- return makeSymbol(
- value, "Main-Italic", mode, color, classes.concat(["mainit"]));
- } else {
- return makeSymbol(
- value, "Math-Italic", mode, color, classes.concat(["mathit"]));
- }
-};
-
-/**
- * Makes either a mathord or textord in the correct font and color.
- */
-var makeOrd = function(group, options, type) {
- var mode = group.mode;
- var value = group.value;
- if (symbols[mode][value] && symbols[mode][value].replace) {
- value = symbols[mode][value].replace;
- }
-
- var classes = ["mord"];
- var color = options.getColor();
-
- var font = options.font;
- if (font) {
- if (font === "mathit" || utils.contains(dotlessLetters, value)) {
- return mathit(value, mode, color, classes);
- } else {
- var fontName = fontMap[font].fontName;
- if (fontMetrics.getCharacterMetrics(value, fontName)) {
- return makeSymbol(
- value, fontName, mode, color, classes.concat([font]));
- } else {
- return mathDefault(value, mode, color, classes, type);
- }
- }
- } else {
- return mathDefault(value, mode, color, classes, type);
- }
-};
-
-/**
- * Calculate the height, depth, and maxFontSize of an element based on its
- * children.
- */
-var sizeElementFromChildren = function(elem) {
- var height = 0;
- var depth = 0;
- var maxFontSize = 0;
-
- if (elem.children) {
- for (var i = 0; i < elem.children.length; i++) {
- if (elem.children[i].height > height) {
- height = elem.children[i].height;
- }
- if (elem.children[i].depth > depth) {
- depth = elem.children[i].depth;
- }
- if (elem.children[i].maxFontSize > maxFontSize) {
- maxFontSize = elem.children[i].maxFontSize;
- }
- }
- }
-
- elem.height = height;
- elem.depth = depth;
- elem.maxFontSize = maxFontSize;
-};
-
-/**
- * Makes a span with the given list of classes, list of children, and color.
- */
-var makeSpan = function(classes, children, color) {
- var span = new domTree.span(classes, children);
-
- sizeElementFromChildren(span);
-
- if (color) {
- span.style.color = color;
- }
-
- return span;
-};
-
-/**
- * Makes a document fragment with the given list of children.
- */
-var makeFragment = function(children) {
- var fragment = new domTree.documentFragment(children);
-
- sizeElementFromChildren(fragment);
-
- return fragment;
-};
-
-/**
- * Makes an element placed in each of the vlist elements to ensure that each
- * element has the same max font size. To do this, we create a zero-width space
- * with the correct font size.
- */
-var makeFontSizer = function(options, fontSize) {
- var fontSizeInner = makeSpan([], [new domTree.symbolNode("\u200b")]);
- fontSizeInner.style.fontSize =
- (fontSize / options.style.sizeMultiplier) + "em";
-
- var fontSizer = makeSpan(
- ["fontsize-ensurer", "reset-" + options.size, "size5"],
- [fontSizeInner]);
-
- return fontSizer;
-};
-
-/**
- * Makes a vertical list by stacking elements and kerns on top of each other.
- * Allows for many different ways of specifying the positioning method.
- *
- * Arguments:
- * - children: A list of child or kern nodes to be stacked on top of each other
- * (i.e. the first element will be at the bottom, and the last at
- * the top). Element nodes are specified as
- * {type: "elem", elem: node}
- * while kern nodes are specified as
- * {type: "kern", size: size}
- * - positionType: The method by which the vlist should be positioned. Valid
- * values are:
- * - "individualShift": The children list only contains elem
- * nodes, and each node contains an extra
- * "shift" value of how much it should be
- * shifted (note that shifting is always
- * moving downwards). positionData is
- * ignored.
- * - "top": The positionData specifies the topmost point of
- * the vlist (note this is expected to be a height,
- * so positive values move up)
- * - "bottom": The positionData specifies the bottommost point
- * of the vlist (note this is expected to be a
- * depth, so positive values move down
- * - "shift": The vlist will be positioned such that its
- * baseline is positionData away from the baseline
- * of the first child. Positive values move
- * downwards.
- * - "firstBaseline": The vlist will be positioned such that
- * its baseline is aligned with the
- * baseline of the first child.
- * positionData is ignored. (this is
- * equivalent to "shift" with
- * positionData=0)
- * - positionData: Data used in different ways depending on positionType
- * - options: An Options object
- *
- */
-var makeVList = function(children, positionType, positionData, options) {
- var depth;
- var currPos;
- var i;
- if (positionType === "individualShift") {
- var oldChildren = children;
- children = [oldChildren[0]];
-
- // Add in kerns to the list of children to get each element to be
- // shifted to the correct specified shift
- depth = -oldChildren[0].shift - oldChildren[0].elem.depth;
- currPos = depth;
- for (i = 1; i < oldChildren.length; i++) {
- var diff = -oldChildren[i].shift - currPos -
- oldChildren[i].elem.depth;
- var size = diff -
- (oldChildren[i - 1].elem.height +
- oldChildren[i - 1].elem.depth);
-
- currPos = currPos + diff;
-
- children.push({type: "kern", size: size});
- children.push(oldChildren[i]);
- }
- } else if (positionType === "top") {
- // We always start at the bottom, so calculate the bottom by adding up
- // all the sizes
- var bottom = positionData;
- for (i = 0; i < children.length; i++) {
- if (children[i].type === "kern") {
- bottom -= children[i].size;
- } else {
- bottom -= children[i].elem.height + children[i].elem.depth;
- }
- }
- depth = bottom;
- } else if (positionType === "bottom") {
- depth = -positionData;
- } else if (positionType === "shift") {
- depth = -children[0].elem.depth - positionData;
- } else if (positionType === "firstBaseline") {
- depth = -children[0].elem.depth;
- } else {
- depth = 0;
- }
-
- // Make the fontSizer
- var maxFontSize = 0;
- for (i = 0; i < children.length; i++) {
- if (children[i].type === "elem") {
- maxFontSize = Math.max(maxFontSize, children[i].elem.maxFontSize);
- }
- }
- var fontSizer = makeFontSizer(options, maxFontSize);
-
- // Create a new list of actual children at the correct offsets
- var realChildren = [];
- currPos = depth;
- for (i = 0; i < children.length; i++) {
- if (children[i].type === "kern") {
- currPos += children[i].size;
- } else {
- var child = children[i].elem;
-
- var shift = -child.depth - currPos;
- currPos += child.height + child.depth;
-
- var childWrap = makeSpan([], [fontSizer, child]);
- childWrap.height -= shift;
- childWrap.depth += shift;
- childWrap.style.top = shift + "em";
-
- realChildren.push(childWrap);
- }
- }
-
- // Add in an element at the end with no offset to fix the calculation of
- // baselines in some browsers (namely IE, sometimes safari)
- var baselineFix = makeSpan(
- ["baseline-fix"], [fontSizer, new domTree.symbolNode("\u200b")]);
- realChildren.push(baselineFix);
-
- var vlist = makeSpan(["vlist"], realChildren);
- // Fix the final height and depth, in case there were kerns at the ends
- // since the makeSpan calculation won't take that in to account.
- vlist.height = Math.max(currPos, vlist.height);
- vlist.depth = Math.max(-depth, vlist.depth);
- return vlist;
-};
-
-// A table of size -> font size for the different sizing functions
-var sizingMultiplier = {
- size1: 0.5,
- size2: 0.7,
- size3: 0.8,
- size4: 0.9,
- size5: 1.0,
- size6: 1.2,
- size7: 1.44,
- size8: 1.73,
- size9: 2.07,
- size10: 2.49,
-};
-
-// A map of spacing functions to their attributes, like size and corresponding
-// CSS class
-var spacingFunctions = {
- "\\qquad": {
- size: "2em",
- className: "qquad",
- },
- "\\quad": {
- size: "1em",
- className: "quad",
- },
- "\\enspace": {
- size: "0.5em",
- className: "enspace",
- },
- "\\;": {
- size: "0.277778em",
- className: "thickspace",
- },
- "\\:": {
- size: "0.22222em",
- className: "mediumspace",
- },
- "\\,": {
- size: "0.16667em",
- className: "thinspace",
- },
- "\\!": {
- size: "-0.16667em",
- className: "negativethinspace",
- },
-};
-
-/**
- * Maps TeX font commands to objects containing:
- * - variant: string used for "mathvariant" attribute in buildMathML.js
- * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics
- */
-// A map between tex font commands an MathML mathvariant attribute values
-var fontMap = {
- // styles
- "mathbf": {
- variant: "bold",
- fontName: "Main-Bold",
- },
- "mathrm": {
- variant: "normal",
- fontName: "Main-Regular",
- },
-
- // "mathit" is missing because it requires the use of two fonts: Main-Italic
- // and Math-Italic. This is handled by a special case in makeOrd which ends
- // up calling mathit.
-
- // families
- "mathbb": {
- variant: "double-struck",
- fontName: "AMS-Regular",
- },
- "mathcal": {
- variant: "script",
- fontName: "Caligraphic-Regular",
- },
- "mathfrak": {
- variant: "fraktur",
- fontName: "Fraktur-Regular",
- },
- "mathscr": {
- variant: "script",
- fontName: "Script-Regular",
- },
- "mathsf": {
- variant: "sans-serif",
- fontName: "SansSerif-Regular",
- },
- "mathtt": {
- variant: "monospace",
- fontName: "Typewriter-Regular",
- },
-};
-
-module.exports = {
- fontMap: fontMap,
- makeSymbol: makeSymbol,
- mathsym: mathsym,
- makeSpan: makeSpan,
- makeFragment: makeFragment,
- makeVList: makeVList,
- makeOrd: makeOrd,
- sizingMultiplier: sizingMultiplier,
- spacingFunctions: spacingFunctions,
-};
diff --git a/webapp/non_npm_dependencies/katex/src/buildHTML.js b/webapp/non_npm_dependencies/katex/src/buildHTML.js
deleted file mode 100644
index dbd33a3fc..000000000
--- a/webapp/non_npm_dependencies/katex/src/buildHTML.js
+++ /dev/null
@@ -1,1375 +0,0 @@
-/* eslint no-console:0 */
-/**
- * This file does the main work of building a domTree structure from a parse
- * tree. The entry point is the `buildHTML` function, which takes a parse tree.
- * Then, the buildExpression, buildGroup, and various groupTypes functions are
- * called, to produce a final HTML tree.
- */
-
-var ParseError = require("./ParseError");
-var Style = require("./Style");
-
-var buildCommon = require("./buildCommon");
-var delimiter = require("./delimiter");
-var domTree = require("./domTree");
-var fontMetrics = require("./fontMetrics");
-var utils = require("./utils");
-
-var makeSpan = buildCommon.makeSpan;
-
-/**
- * Take a list of nodes, build them in order, and return a list of the built
- * nodes. This function handles the `prev` node correctly, and passes the
- * previous element from the list as the prev of the next element.
- */
-var buildExpression = function(expression, options, prev) {
- var groups = [];
- for (var i = 0; i < expression.length; i++) {
- var group = expression[i];
- groups.push(buildGroup(group, options, prev));
- prev = group;
- }
- return groups;
-};
-
-// List of types used by getTypeOfGroup,
-// see https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types
-var groupToType = {
- mathord: "mord",
- textord: "mord",
- bin: "mbin",
- rel: "mrel",
- text: "mord",
- open: "mopen",
- close: "mclose",
- inner: "minner",
- genfrac: "mord",
- array: "mord",
- spacing: "mord",
- punct: "mpunct",
- ordgroup: "mord",
- op: "mop",
- katex: "mord",
- overline: "mord",
- rule: "mord",
- leftright: "minner",
- sqrt: "mord",
- accent: "mord",
-};
-
-/**
- * Gets the final math type of an expression, given its group type. This type is
- * used to determine spacing between elements, and affects bin elements by
- * causing them to change depending on what types are around them. This type
- * must be attached to the outermost node of an element as a CSS class so that
- * spacing with its surrounding elements works correctly.
- *
- * Some elements can be mapped one-to-one from group type to math type, and
- * those are listed in the `groupToType` table.
- *
- * Others (usually elements that wrap around other elements) often have
- * recursive definitions, and thus call `getTypeOfGroup` on their inner
- * elements.
- */
-var getTypeOfGroup = function(group) {
- if (group == null) {
- // Like when typesetting $^3$
- return groupToType.mathord;
- } else if (group.type === "supsub") {
- return getTypeOfGroup(group.value.base);
- } else if (group.type === "llap" || group.type === "rlap") {
- return getTypeOfGroup(group.value);
- } else if (group.type === "color") {
- return getTypeOfGroup(group.value.value);
- } else if (group.type === "sizing") {
- return getTypeOfGroup(group.value.value);
- } else if (group.type === "styling") {
- return getTypeOfGroup(group.value.value);
- } else if (group.type === "delimsizing") {
- return groupToType[group.value.delimType];
- } else {
- return groupToType[group.type];
- }
-};
-
-/**
- * Sometimes, groups perform special rules when they have superscripts or
- * subscripts attached to them. This function lets the `supsub` group know that
- * its inner element should handle the superscripts and subscripts instead of
- * handling them itself.
- */
-var shouldHandleSupSub = function(group, options) {
- if (!group) {
- return false;
- } else if (group.type === "op") {
- // Operators handle supsubs differently when they have limits
- // (e.g. `\displaystyle\sum_2^3`)
- return group.value.limits &&
- (options.style.size === Style.DISPLAY.size ||
- group.value.alwaysHandleSupSub);
- } else if (group.type === "accent") {
- return isCharacterBox(group.value.base);
- } else {
- return null;
- }
-};
-
-/**
- * Sometimes we want to pull out the innermost element of a group. In most
- * cases, this will just be the group itself, but when ordgroups and colors have
- * a single element, we want to pull that out.
- */
-var getBaseElem = function(group) {
- if (!group) {
- return false;
- } else if (group.type === "ordgroup") {
- if (group.value.length === 1) {
- return getBaseElem(group.value[0]);
- } else {
- return group;
- }
- } else if (group.type === "color") {
- if (group.value.value.length === 1) {
- return getBaseElem(group.value.value[0]);
- } else {
- return group;
- }
- } else {
- return group;
- }
-};
-
-/**
- * TeXbook algorithms often reference "character boxes", which are simply groups
- * with a single character in them. To decide if something is a character box,
- * we find its innermost group, and see if it is a single character.
- */
-var isCharacterBox = function(group) {
- var baseElem = getBaseElem(group);
-
- // These are all they types of groups which hold single characters
- return baseElem.type === "mathord" ||
- baseElem.type === "textord" ||
- baseElem.type === "bin" ||
- baseElem.type === "rel" ||
- baseElem.type === "inner" ||
- baseElem.type === "open" ||
- baseElem.type === "close" ||
- baseElem.type === "punct";
-};
-
-var makeNullDelimiter = function(options) {
- return makeSpan([
- "sizing", "reset-" + options.size, "size5",
- options.style.reset(), Style.TEXT.cls(),
- "nulldelimiter",
- ]);
-};
-
-/**
- * This is a map of group types to the function used to handle that type.
- * Simpler types come at the beginning, while complicated types come afterwards.
- */
-var groupTypes = {};
-
-groupTypes.mathord = function(group, options, prev) {
- return buildCommon.makeOrd(group, options, "mathord");
-};
-
-groupTypes.textord = function(group, options, prev) {
- return buildCommon.makeOrd(group, options, "textord");
-};
-
-groupTypes.bin = function(group, options, prev) {
- var className = "mbin";
- // Pull out the most recent element. Do some special handling to find
- // things at the end of a \color group. Note that we don't use the same
- // logic for ordgroups (which count as ords).
- var prevAtom = prev;
- while (prevAtom && prevAtom.type === "color") {
- var atoms = prevAtom.value.value;
- prevAtom = atoms[atoms.length - 1];
- }
- // See TeXbook pg. 442-446, Rules 5 and 6, and the text before Rule 19.
- // Here, we determine whether the bin should turn into an ord. We
- // currently only apply Rule 5.
- if (!prev || utils.contains(["mbin", "mopen", "mrel", "mop", "mpunct"],
- getTypeOfGroup(prevAtom))) {
- group.type = "textord";
- className = "mord";
- }
-
- return buildCommon.mathsym(
- group.value, group.mode, options.getColor(), [className]);
-};
-
-groupTypes.rel = function(group, options, prev) {
- return buildCommon.mathsym(
- group.value, group.mode, options.getColor(), ["mrel"]);
-};
-
-groupTypes.open = function(group, options, prev) {
- return buildCommon.mathsym(
- group.value, group.mode, options.getColor(), ["mopen"]);
-};
-
-groupTypes.close = function(group, options, prev) {
- return buildCommon.mathsym(
- group.value, group.mode, options.getColor(), ["mclose"]);
-};
-
-groupTypes.inner = function(group, options, prev) {
- return buildCommon.mathsym(
- group.value, group.mode, options.getColor(), ["minner"]);
-};
-
-groupTypes.punct = function(group, options, prev) {
- return buildCommon.mathsym(
- group.value, group.mode, options.getColor(), ["mpunct"]);
-};
-
-groupTypes.ordgroup = function(group, options, prev) {
- return makeSpan(
- ["mord", options.style.cls()],
- buildExpression(group.value, options.reset())
- );
-};
-
-groupTypes.text = function(group, options, prev) {
- return makeSpan(["text", "mord", options.style.cls()],
- buildExpression(group.value.body, options.reset()));
-};
-
-groupTypes.color = function(group, options, prev) {
- var elements = buildExpression(
- group.value.value,
- options.withColor(group.value.color),
- prev
- );
-
- // \color isn't supposed to affect the type of the elements it contains.
- // To accomplish this, we wrap the results in a fragment, so the inner
- // elements will be able to directly interact with their neighbors. For
- // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3`
- return new buildCommon.makeFragment(elements);
-};
-
-groupTypes.supsub = function(group, options, prev) {
- // Superscript and subscripts are handled in the TeXbook on page
- // 445-446, rules 18(a-f).
-
- // Here is where we defer to the inner group if it should handle
- // superscripts and subscripts itself.
- if (shouldHandleSupSub(group.value.base, options)) {
- return groupTypes[group.value.base.type](group, options, prev);
- }
-
- var base = buildGroup(group.value.base, options.reset());
- var supmid;
- var submid;
- var sup;
- var sub;
-
- if (group.value.sup) {
- sup = buildGroup(group.value.sup,
- options.withStyle(options.style.sup()));
- supmid = makeSpan(
- [options.style.reset(), options.style.sup().cls()], [sup]);
- }
-
- if (group.value.sub) {
- sub = buildGroup(group.value.sub,
- options.withStyle(options.style.sub()));
- submid = makeSpan(
- [options.style.reset(), options.style.sub().cls()], [sub]);
- }
-
- // Rule 18a
- var supShift;
- var subShift;
- if (isCharacterBox(group.value.base)) {
- supShift = 0;
- subShift = 0;
- } else {
- supShift = base.height - fontMetrics.metrics.supDrop;
- subShift = base.depth + fontMetrics.metrics.subDrop;
- }
-
- // Rule 18c
- var minSupShift;
- if (options.style === Style.DISPLAY) {
- minSupShift = fontMetrics.metrics.sup1;
- } else if (options.style.cramped) {
- minSupShift = fontMetrics.metrics.sup3;
- } else {
- minSupShift = fontMetrics.metrics.sup2;
- }
-
- // scriptspace is a font-size-independent size, so scale it
- // appropriately
- var multiplier = Style.TEXT.sizeMultiplier *
- options.style.sizeMultiplier;
- var scriptspace =
- (0.5 / fontMetrics.metrics.ptPerEm) / multiplier + "em";
-
- var supsub;
- if (!group.value.sup) {
- // Rule 18b
- subShift = Math.max(
- subShift, fontMetrics.metrics.sub1,
- sub.height - 0.8 * fontMetrics.metrics.xHeight);
-
- supsub = buildCommon.makeVList([
- {type: "elem", elem: submid},
- ], "shift", subShift, options);
-
- supsub.children[0].style.marginRight = scriptspace;
-
- // Subscripts shouldn't be shifted by the base's italic correction.
- // Account for that by shifting the subscript back the appropriate
- // amount. Note we only do this when the base is a single symbol.
- if (base instanceof domTree.symbolNode) {
- supsub.children[0].style.marginLeft = -base.italic + "em";
- }
- } else if (!group.value.sub) {
- // Rule 18c, d
- supShift = Math.max(supShift, minSupShift,
- sup.depth + 0.25 * fontMetrics.metrics.xHeight);
-
- supsub = buildCommon.makeVList([
- {type: "elem", elem: supmid},
- ], "shift", -supShift, options);
-
- supsub.children[0].style.marginRight = scriptspace;
- } else {
- supShift = Math.max(
- supShift, minSupShift,
- sup.depth + 0.25 * fontMetrics.metrics.xHeight);
- subShift = Math.max(subShift, fontMetrics.metrics.sub2);
-
- var ruleWidth = fontMetrics.metrics.defaultRuleThickness;
-
- // Rule 18e
- if ((supShift - sup.depth) - (sub.height - subShift) <
- 4 * ruleWidth) {
- subShift = 4 * ruleWidth - (supShift - sup.depth) + sub.height;
- var psi = 0.8 * fontMetrics.metrics.xHeight -
- (supShift - sup.depth);
- if (psi > 0) {
- supShift += psi;
- subShift -= psi;
- }
- }
-
- supsub = buildCommon.makeVList([
- {type: "elem", elem: submid, shift: subShift},
- {type: "elem", elem: supmid, shift: -supShift},
- ], "individualShift", null, options);
-
- // See comment above about subscripts not being shifted
- if (base instanceof domTree.symbolNode) {
- supsub.children[0].style.marginLeft = -base.italic + "em";
- }
-
- supsub.children[0].style.marginRight = scriptspace;
- supsub.children[1].style.marginRight = scriptspace;
- }
-
- return makeSpan([getTypeOfGroup(group.value.base)],
- [base, supsub]);
-};
-
-groupTypes.genfrac = function(group, options, prev) {
- // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).
- // Figure out what style this fraction should be in based on the
- // function used
- var fstyle = options.style;
- if (group.value.size === "display") {
- fstyle = Style.DISPLAY;
- } else if (group.value.size === "text") {
- fstyle = Style.TEXT;
- }
-
- var nstyle = fstyle.fracNum();
- var dstyle = fstyle.fracDen();
-
- var numer = buildGroup(group.value.numer, options.withStyle(nstyle));
- var numerreset = makeSpan([fstyle.reset(), nstyle.cls()], [numer]);
-
- var denom = buildGroup(group.value.denom, options.withStyle(dstyle));
- var denomreset = makeSpan([fstyle.reset(), dstyle.cls()], [denom]);
-
- var ruleWidth;
- if (group.value.hasBarLine) {
- ruleWidth = fontMetrics.metrics.defaultRuleThickness /
- options.style.sizeMultiplier;
- } else {
- ruleWidth = 0;
- }
-
- // Rule 15b
- var numShift;
- var clearance;
- var denomShift;
- if (fstyle.size === Style.DISPLAY.size) {
- numShift = fontMetrics.metrics.num1;
- if (ruleWidth > 0) {
- clearance = 3 * ruleWidth;
- } else {
- clearance = 7 * fontMetrics.metrics.defaultRuleThickness;
- }
- denomShift = fontMetrics.metrics.denom1;
- } else {
- if (ruleWidth > 0) {
- numShift = fontMetrics.metrics.num2;
- clearance = ruleWidth;
- } else {
- numShift = fontMetrics.metrics.num3;
- clearance = 3 * fontMetrics.metrics.defaultRuleThickness;
- }
- denomShift = fontMetrics.metrics.denom2;
- }
-
- var frac;
- if (ruleWidth === 0) {
- // Rule 15c
- var candiateClearance =
- (numShift - numer.depth) - (denom.height - denomShift);
- if (candiateClearance < clearance) {
- numShift += 0.5 * (clearance - candiateClearance);
- denomShift += 0.5 * (clearance - candiateClearance);
- }
-
- frac = buildCommon.makeVList([
- {type: "elem", elem: denomreset, shift: denomShift},
- {type: "elem", elem: numerreset, shift: -numShift},
- ], "individualShift", null, options);
- } else {
- // Rule 15d
- var axisHeight = fontMetrics.metrics.axisHeight;
-
- if ((numShift - numer.depth) - (axisHeight + 0.5 * ruleWidth) <
- clearance) {
- numShift +=
- clearance - ((numShift - numer.depth) -
- (axisHeight + 0.5 * ruleWidth));
- }
-
- if ((axisHeight - 0.5 * ruleWidth) - (denom.height - denomShift) <
- clearance) {
- denomShift +=
- clearance - ((axisHeight - 0.5 * ruleWidth) -
- (denom.height - denomShift));
- }
-
- var mid = makeSpan(
- [options.style.reset(), Style.TEXT.cls(), "frac-line"]);
- // Manually set the height of the line because its height is
- // created in CSS
- mid.height = ruleWidth;
-
- var midShift = -(axisHeight - 0.5 * ruleWidth);
-
- frac = buildCommon.makeVList([
- {type: "elem", elem: denomreset, shift: denomShift},
- {type: "elem", elem: mid, shift: midShift},
- {type: "elem", elem: numerreset, shift: -numShift},
- ], "individualShift", null, options);
- }
-
- // Since we manually change the style sometimes (with \dfrac or \tfrac),
- // account for the possible size change here.
- frac.height *= fstyle.sizeMultiplier / options.style.sizeMultiplier;
- frac.depth *= fstyle.sizeMultiplier / options.style.sizeMultiplier;
-
- // Rule 15e
- var delimSize;
- if (fstyle.size === Style.DISPLAY.size) {
- delimSize = fontMetrics.metrics.delim1;
- } else {
- delimSize = fontMetrics.metrics.getDelim2(fstyle);
- }
-
- var leftDelim;
- var rightDelim;
- if (group.value.leftDelim == null) {
- leftDelim = makeNullDelimiter(options);
- } else {
- leftDelim = delimiter.customSizedDelim(
- group.value.leftDelim, delimSize, true,
- options.withStyle(fstyle), group.mode);
- }
- if (group.value.rightDelim == null) {
- rightDelim = makeNullDelimiter(options);
- } else {
- rightDelim = delimiter.customSizedDelim(
- group.value.rightDelim, delimSize, true,
- options.withStyle(fstyle), group.mode);
- }
-
- return makeSpan(
- ["mord", options.style.reset(), fstyle.cls()],
- [leftDelim, makeSpan(["mfrac"], [frac]), rightDelim],
- options.getColor());
-};
-
-groupTypes.array = function(group, options, prev) {
- var r;
- var c;
- var nr = group.value.body.length;
- var nc = 0;
- var body = new Array(nr);
-
- // Horizontal spacing
- var pt = 1 / fontMetrics.metrics.ptPerEm;
- var arraycolsep = 5 * pt; // \arraycolsep in article.cls
-
- // Vertical spacing
- var baselineskip = 12 * pt; // see size10.clo
- // Default \arraystretch from lttab.dtx
- // TODO(gagern): may get redefined once we have user-defined macros
- var arraystretch = utils.deflt(group.value.arraystretch, 1);
- var arrayskip = arraystretch * baselineskip;
- var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and
- var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx
-
- var totalHeight = 0;
- for (r = 0; r < group.value.body.length; ++r) {
- var inrow = group.value.body[r];
- var height = arstrutHeight; // \@array adds an \@arstrut
- var depth = arstrutDepth; // to each tow (via the template)
-
- if (nc < inrow.length) {
- nc = inrow.length;
- }
-
- var outrow = new Array(inrow.length);
- for (c = 0; c < inrow.length; ++c) {
- var elt = buildGroup(inrow[c], options);
- if (depth < elt.depth) {
- depth = elt.depth;
- }
- if (height < elt.height) {
- height = elt.height;
- }
- outrow[c] = elt;
- }
-
- var gap = 0;
- if (group.value.rowGaps[r]) {
- gap = group.value.rowGaps[r].value;
- switch (gap.unit) {
- case "em":
- gap = gap.number;
- break;
- case "ex":
- gap = gap.number * fontMetrics.metrics.emPerEx;
- break;
- default:
- console.error("Can't handle unit " + gap.unit);
- gap = 0;
- }
- if (gap > 0) { // \@argarraycr
- gap += arstrutDepth;
- if (depth < gap) {
- depth = gap; // \@xargarraycr
- }
- gap = 0;
- }
- }
-
- outrow.height = height;
- outrow.depth = depth;
- totalHeight += height;
- outrow.pos = totalHeight;
- totalHeight += depth + gap; // \@yargarraycr
- body[r] = outrow;
- }
-
- var offset = totalHeight / 2 + fontMetrics.metrics.axisHeight;
- var colDescriptions = group.value.cols || [];
- var cols = [];
- var colSep;
- var colDescrNum;
- for (c = 0, colDescrNum = 0;
- // Continue while either there are more columns or more column
- // descriptions, so trailing separators don't get lost.
- c < nc || colDescrNum < colDescriptions.length;
- ++c, ++colDescrNum) {
-
- var colDescr = colDescriptions[colDescrNum] || {};
-
- var firstSeparator = true;
- while (colDescr.type === "separator") {
- // If there is more than one separator in a row, add a space
- // between them.
- if (!firstSeparator) {
- colSep = makeSpan(["arraycolsep"], []);
- colSep.style.width =
- fontMetrics.metrics.doubleRuleSep + "em";
- cols.push(colSep);
- }
-
- if (colDescr.separator === "|") {
- var separator = makeSpan(
- ["vertical-separator"],
- []);
- separator.style.height = totalHeight + "em";
- separator.style.verticalAlign =
- -(totalHeight - offset) + "em";
-
- cols.push(separator);
- } else {
- throw new ParseError(
- "Invalid separator type: " + colDescr.separator);
- }
-
- colDescrNum++;
- colDescr = colDescriptions[colDescrNum] || {};
- firstSeparator = false;
- }
-
- if (c >= nc) {
- continue;
- }
-
- var sepwidth;
- if (c > 0 || group.value.hskipBeforeAndAfter) {
- sepwidth = utils.deflt(colDescr.pregap, arraycolsep);
- if (sepwidth !== 0) {
- colSep = makeSpan(["arraycolsep"], []);
- colSep.style.width = sepwidth + "em";
- cols.push(colSep);
- }
- }
-
- var col = [];
- for (r = 0; r < nr; ++r) {
- var row = body[r];
- var elem = row[c];
- if (!elem) {
- continue;
- }
- var shift = row.pos - offset;
- elem.depth = row.depth;
- elem.height = row.height;
- col.push({type: "elem", elem: elem, shift: shift});
- }
-
- col = buildCommon.makeVList(col, "individualShift", null, options);
- col = makeSpan(
- ["col-align-" + (colDescr.align || "c")],
- [col]);
- cols.push(col);
-
- if (c < nc - 1 || group.value.hskipBeforeAndAfter) {
- sepwidth = utils.deflt(colDescr.postgap, arraycolsep);
- if (sepwidth !== 0) {
- colSep = makeSpan(["arraycolsep"], []);
- colSep.style.width = sepwidth + "em";
- cols.push(colSep);
- }
- }
- }
- body = makeSpan(["mtable"], cols);
- return makeSpan(["mord"], [body], options.getColor());
-};
-
-groupTypes.spacing = function(group, options, prev) {
- if (group.value === "\\ " || group.value === "\\space" ||
- group.value === " " || group.value === "~") {
- // Spaces are generated by adding an actual space. Each of these
- // things has an entry in the symbols table, so these will be turned
- // into appropriate outputs.
- return makeSpan(
- ["mord", "mspace"],
- [buildCommon.mathsym(group.value, group.mode)]
- );
- } else {
- // Other kinds of spaces are of arbitrary width. We use CSS to
- // generate these.
- return makeSpan(
- ["mord", "mspace",
- buildCommon.spacingFunctions[group.value].className]);
- }
-};
-
-groupTypes.llap = function(group, options, prev) {
- var inner = makeSpan(
- ["inner"], [buildGroup(group.value.body, options.reset())]);
- var fix = makeSpan(["fix"], []);
- return makeSpan(
- ["llap", options.style.cls()], [inner, fix]);
-};
-
-groupTypes.rlap = function(group, options, prev) {
- var inner = makeSpan(
- ["inner"], [buildGroup(group.value.body, options.reset())]);
- var fix = makeSpan(["fix"], []);
- return makeSpan(
- ["rlap", options.style.cls()], [inner, fix]);
-};
-
-groupTypes.op = function(group, options, prev) {
- // Operators are handled in the TeXbook pg. 443-444, rule 13(a).
- var supGroup;
- var subGroup;
- var hasLimits = false;
- if (group.type === "supsub" ) {
- // If we have limits, supsub will pass us its group to handle. Pull
- // out the superscript and subscript and set the group to the op in
- // its base.
- supGroup = group.value.sup;
- subGroup = group.value.sub;
- group = group.value.base;
- hasLimits = true;
- }
-
- // Most operators have a large successor symbol, but these don't.
- var noSuccessor = [
- "\\smallint",
- ];
-
- var large = false;
- if (options.style.size === Style.DISPLAY.size &&
- group.value.symbol &&
- !utils.contains(noSuccessor, group.value.body)) {
-
- // Most symbol operators get larger in displaystyle (rule 13)
- large = true;
- }
-
- var base;
- var baseShift = 0;
- var slant = 0;
- if (group.value.symbol) {
- // If this is a symbol, create the symbol.
- var style = large ? "Size2-Regular" : "Size1-Regular";
- base = buildCommon.makeSymbol(
- group.value.body, style, "math", options.getColor(),
- ["op-symbol", large ? "large-op" : "small-op", "mop"]);
-
- // Shift the symbol so its center lies on the axis (rule 13). It
- // appears that our fonts have the centers of the symbols already
- // almost on the axis, so these numbers are very small. Note we
- // don't actually apply this here, but instead it is used either in
- // the vlist creation or separately when there are no limits.
- baseShift = (base.height - base.depth) / 2 -
- fontMetrics.metrics.axisHeight *
- options.style.sizeMultiplier;
-
- // The slant of the symbol is just its italic correction.
- slant = base.italic;
- } else {
- // Otherwise, this is a text operator. Build the text from the
- // operator's name.
- // TODO(emily): Add a space in the middle of some of these
- // operators, like \limsup
- var output = [];
- for (var i = 1; i < group.value.body.length; i++) {
- output.push(buildCommon.mathsym(group.value.body[i], group.mode));
- }
- base = makeSpan(["mop"], output, options.getColor());
- }
-
- if (hasLimits) {
- // IE 8 clips \int if it is in a display: inline-block. We wrap it
- // in a new span so it is an inline, and works.
- base = makeSpan([], [base]);
-
- var supmid;
- var supKern;
- var submid;
- var subKern;
- // We manually have to handle the superscripts and subscripts. This,
- // aside from the kern calculations, is copied from supsub.
- if (supGroup) {
- var sup = buildGroup(
- supGroup, options.withStyle(options.style.sup()));
- supmid = makeSpan(
- [options.style.reset(), options.style.sup().cls()], [sup]);
-
- supKern = Math.max(
- fontMetrics.metrics.bigOpSpacing1,
- fontMetrics.metrics.bigOpSpacing3 - sup.depth);
- }
-
- if (subGroup) {
- var sub = buildGroup(
- subGroup, options.withStyle(options.style.sub()));
- submid = makeSpan(
- [options.style.reset(), options.style.sub().cls()],
- [sub]);
-
- subKern = Math.max(
- fontMetrics.metrics.bigOpSpacing2,
- fontMetrics.metrics.bigOpSpacing4 - sub.height);
- }
-
- // Build the final group as a vlist of the possible subscript, base,
- // and possible superscript.
- var finalGroup;
- var top;
- var bottom;
- if (!supGroup) {
- top = base.height - baseShift;
-
- finalGroup = buildCommon.makeVList([
- {type: "kern", size: fontMetrics.metrics.bigOpSpacing5},
- {type: "elem", elem: submid},
- {type: "kern", size: subKern},
- {type: "elem", elem: base},
- ], "top", top, options);
-
- // Here, we shift the limits by the slant of the symbol. Note
- // that we are supposed to shift the limits by 1/2 of the slant,
- // but since we are centering the limits adding a full slant of
- // margin will shift by 1/2 that.
- finalGroup.children[0].style.marginLeft = -slant + "em";
- } else if (!subGroup) {
- bottom = base.depth + baseShift;
-
- finalGroup = buildCommon.makeVList([
- {type: "elem", elem: base},
- {type: "kern", size: supKern},
- {type: "elem", elem: supmid},
- {type: "kern", size: fontMetrics.metrics.bigOpSpacing5},
- ], "bottom", bottom, options);
-
- // See comment above about slants
- finalGroup.children[1].style.marginLeft = slant + "em";
- } else if (!supGroup && !subGroup) {
- // This case probably shouldn't occur (this would mean the
- // supsub was sending us a group with no superscript or
- // subscript) but be safe.
- return base;
- } else {
- bottom = fontMetrics.metrics.bigOpSpacing5 +
- submid.height + submid.depth +
- subKern +
- base.depth + baseShift;
-
- finalGroup = buildCommon.makeVList([
- {type: "kern", size: fontMetrics.metrics.bigOpSpacing5},
- {type: "elem", elem: submid},
- {type: "kern", size: subKern},
- {type: "elem", elem: base},
- {type: "kern", size: supKern},
- {type: "elem", elem: supmid},
- {type: "kern", size: fontMetrics.metrics.bigOpSpacing5},
- ], "bottom", bottom, options);
-
- // See comment above about slants
- finalGroup.children[0].style.marginLeft = -slant + "em";
- finalGroup.children[2].style.marginLeft = slant + "em";
- }
-
- return makeSpan(["mop", "op-limits"], [finalGroup]);
- } else {
- if (group.value.symbol) {
- base.style.top = baseShift + "em";
- }
-
- return base;
- }
-};
-
-groupTypes.katex = function(group, options, prev) {
- // The KaTeX logo. The offsets for the K and a were chosen to look
- // good, but the offsets for the T, E, and X were taken from the
- // definition of \TeX in TeX (see TeXbook pg. 356)
- var k = makeSpan(
- ["k"], [buildCommon.mathsym("K", group.mode)]);
- var a = makeSpan(
- ["a"], [buildCommon.mathsym("A", group.mode)]);
-
- a.height = (a.height + 0.2) * 0.75;
- a.depth = (a.height - 0.2) * 0.75;
-
- var t = makeSpan(
- ["t"], [buildCommon.mathsym("T", group.mode)]);
- var e = makeSpan(
- ["e"], [buildCommon.mathsym("E", group.mode)]);
-
- e.height = (e.height - 0.2155);
- e.depth = (e.depth + 0.2155);
-
- var x = makeSpan(
- ["x"], [buildCommon.mathsym("X", group.mode)]);
-
- return makeSpan(
- ["katex-logo", "mord"], [k, a, t, e, x], options.getColor());
-};
-
-groupTypes.overline = function(group, options, prev) {
- // Overlines are handled in the TeXbook pg 443, Rule 9.
-
- // Build the inner group in the cramped style.
- var innerGroup = buildGroup(group.value.body,
- options.withStyle(options.style.cramp()));
-
- var ruleWidth = fontMetrics.metrics.defaultRuleThickness /
- options.style.sizeMultiplier;
-
- // Create the line above the body
- var line = makeSpan(
- [options.style.reset(), Style.TEXT.cls(), "overline-line"]);
- line.height = ruleWidth;
- line.maxFontSize = 1.0;
-
- // Generate the vlist, with the appropriate kerns
- var vlist = buildCommon.makeVList([
- {type: "elem", elem: innerGroup},
- {type: "kern", size: 3 * ruleWidth},
- {type: "elem", elem: line},
- {type: "kern", size: ruleWidth},
- ], "firstBaseline", null, options);
-
- return makeSpan(["overline", "mord"], [vlist], options.getColor());
-};
-
-groupTypes.sqrt = function(group, options, prev) {
- // Square roots are handled in the TeXbook pg. 443, Rule 11.
-
- // First, we do the same steps as in overline to build the inner group
- // and line
- var inner = buildGroup(group.value.body,
- options.withStyle(options.style.cramp()));
-
- var ruleWidth = fontMetrics.metrics.defaultRuleThickness /
- options.style.sizeMultiplier;
-
- var line = makeSpan(
- [options.style.reset(), Style.TEXT.cls(), "sqrt-line"], [],
- options.getColor());
- line.height = ruleWidth;
- line.maxFontSize = 1.0;
-
- var phi = ruleWidth;
- if (options.style.id < Style.TEXT.id) {
- phi = fontMetrics.metrics.xHeight;
- }
-
- // Calculate the clearance between the body and line
- var lineClearance = ruleWidth + phi / 4;
-
- var innerHeight =
- (inner.height + inner.depth) * options.style.sizeMultiplier;
- var minDelimiterHeight = innerHeight + lineClearance + ruleWidth;
-
- // Create a \surd delimiter of the required minimum size
- var delim = makeSpan(["sqrt-sign"], [
- delimiter.customSizedDelim("\\surd", minDelimiterHeight,
- false, options, group.mode)],
- options.getColor());
-
- var delimDepth = (delim.height + delim.depth) - ruleWidth;
-
- // Adjust the clearance based on the delimiter size
- if (delimDepth > inner.height + inner.depth + lineClearance) {
- lineClearance =
- (lineClearance + delimDepth - inner.height - inner.depth) / 2;
- }
-
- // Shift the delimiter so that its top lines up with the top of the line
- var delimShift = -(inner.height + lineClearance + ruleWidth) + delim.height;
- delim.style.top = delimShift + "em";
- delim.height -= delimShift;
- delim.depth += delimShift;
-
- // We add a special case here, because even when `inner` is empty, we
- // still get a line. So, we use a simple heuristic to decide if we
- // should omit the body entirely. (note this doesn't work for something
- // like `\sqrt{\rlap{x}}`, but if someone is doing that they deserve for
- // it not to work.
- var body;
- if (inner.height === 0 && inner.depth === 0) {
- body = makeSpan();
- } else {
- body = buildCommon.makeVList([
- {type: "elem", elem: inner},
- {type: "kern", size: lineClearance},
- {type: "elem", elem: line},
- {type: "kern", size: ruleWidth},
- ], "firstBaseline", null, options);
- }
-
- if (!group.value.index) {
- return makeSpan(["sqrt", "mord"], [delim, body]);
- } else {
- // Handle the optional root index
-
- // The index is always in scriptscript style
- var root = buildGroup(
- group.value.index,
- options.withStyle(Style.SCRIPTSCRIPT));
- var rootWrap = makeSpan(
- [options.style.reset(), Style.SCRIPTSCRIPT.cls()],
- [root]);
-
- // Figure out the height and depth of the inner part
- var innerRootHeight = Math.max(delim.height, body.height);
- var innerRootDepth = Math.max(delim.depth, body.depth);
-
- // The amount the index is shifted by. This is taken from the TeX
- // source, in the definition of `\r@@t`.
- var toShift = 0.6 * (innerRootHeight - innerRootDepth);
-
- // Build a VList with the superscript shifted up correctly
- var rootVList = buildCommon.makeVList(
- [{type: "elem", elem: rootWrap}],
- "shift", -toShift, options);
- // Add a class surrounding it so we can add on the appropriate
- // kerning
- var rootVListWrap = makeSpan(["root"], [rootVList]);
-
- return makeSpan(["sqrt", "mord"], [rootVListWrap, delim, body]);
- }
-};
-
-groupTypes.sizing = function(group, options, prev) {
- // Handle sizing operators like \Huge. Real TeX doesn't actually allow
- // these functions inside of math expressions, so we do some special
- // handling.
- var inner = buildExpression(group.value.value,
- options.withSize(group.value.size), prev);
-
- var span = makeSpan(["mord"],
- [makeSpan(["sizing", "reset-" + options.size, group.value.size,
- options.style.cls()],
- inner)]);
-
- // Calculate the correct maxFontSize manually
- var fontSize = buildCommon.sizingMultiplier[group.value.size];
- span.maxFontSize = fontSize * options.style.sizeMultiplier;
-
- return span;
-};
-
-groupTypes.styling = function(group, options, prev) {
- // Style changes are handled in the TeXbook on pg. 442, Rule 3.
-
- // Figure out what style we're changing to.
- var style = {
- "display": Style.DISPLAY,
- "text": Style.TEXT,
- "script": Style.SCRIPT,
- "scriptscript": Style.SCRIPTSCRIPT,
- };
-
- var newStyle = style[group.value.style];
-
- // Build the inner expression in the new style.
- var inner = buildExpression(
- group.value.value, options.withStyle(newStyle), prev);
-
- return makeSpan([options.style.reset(), newStyle.cls()], inner);
-};
-
-groupTypes.font = function(group, options, prev) {
- var font = group.value.font;
- return buildGroup(group.value.body, options.withFont(font), prev);
-};
-
-groupTypes.delimsizing = function(group, options, prev) {
- var delim = group.value.value;
-
- if (delim === ".") {
- // Empty delimiters still count as elements, even though they don't
- // show anything.
- return makeSpan([groupToType[group.value.delimType]]);
- }
-
- // Use delimiter.sizedDelim to generate the delimiter.
- return makeSpan(
- [groupToType[group.value.delimType]],
- [delimiter.sizedDelim(
- delim, group.value.size, options, group.mode)]);
-};
-
-groupTypes.leftright = function(group, options, prev) {
- // Build the inner expression
- var inner = buildExpression(group.value.body, options.reset());
-
- var innerHeight = 0;
- var innerDepth = 0;
-
- // Calculate its height and depth
- for (var i = 0; i < inner.length; i++) {
- innerHeight = Math.max(inner[i].height, innerHeight);
- innerDepth = Math.max(inner[i].depth, innerDepth);
- }
-
- // The size of delimiters is the same, regardless of what style we are
- // in. Thus, to correctly calculate the size of delimiter we need around
- // a group, we scale down the inner size based on the size.
- innerHeight *= options.style.sizeMultiplier;
- innerDepth *= options.style.sizeMultiplier;
-
- var leftDelim;
- if (group.value.left === ".") {
- // Empty delimiters in \left and \right make null delimiter spaces.
- leftDelim = makeNullDelimiter(options);
- } else {
- // Otherwise, use leftRightDelim to generate the correct sized
- // delimiter.
- leftDelim = delimiter.leftRightDelim(
- group.value.left, innerHeight, innerDepth, options,
- group.mode);
- }
- // Add it to the beginning of the expression
- inner.unshift(leftDelim);
-
- var rightDelim;
- // Same for the right delimiter
- if (group.value.right === ".") {
- rightDelim = makeNullDelimiter(options);
- } else {
- rightDelim = delimiter.leftRightDelim(
- group.value.right, innerHeight, innerDepth, options,
- group.mode);
- }
- // Add it to the end of the expression.
- inner.push(rightDelim);
-
- return makeSpan(
- ["minner", options.style.cls()], inner, options.getColor());
-};
-
-groupTypes.rule = function(group, options, prev) {
- // Make an empty span for the rule
- var rule = makeSpan(["mord", "rule"], [], options.getColor());
-
- // Calculate the shift, width, and height of the rule, and account for units
- var shift = 0;
- if (group.value.shift) {
- shift = group.value.shift.number;
- if (group.value.shift.unit === "ex") {
- shift *= fontMetrics.metrics.xHeight;
- }
- }
-
- var width = group.value.width.number;
- if (group.value.width.unit === "ex") {
- width *= fontMetrics.metrics.xHeight;
- }
-
- var height = group.value.height.number;
- if (group.value.height.unit === "ex") {
- height *= fontMetrics.metrics.xHeight;
- }
-
- // The sizes of rules are absolute, so make it larger if we are in a
- // smaller style.
- shift /= options.style.sizeMultiplier;
- width /= options.style.sizeMultiplier;
- height /= options.style.sizeMultiplier;
-
- // Style the rule to the right size
- rule.style.borderRightWidth = width + "em";
- rule.style.borderTopWidth = height + "em";
- rule.style.bottom = shift + "em";
-
- // Record the height and width
- rule.width = width;
- rule.height = height + shift;
- rule.depth = -shift;
-
- return rule;
-};
-
-groupTypes.accent = function(group, options, prev) {
- // Accents are handled in the TeXbook pg. 443, rule 12.
- var base = group.value.base;
-
- var supsubGroup;
- if (group.type === "supsub") {
- // If our base is a character box, and we have superscripts and
- // subscripts, the supsub will defer to us. In particular, we want
- // to attach the superscripts and subscripts to the inner body (so
- // that the position of the superscripts and subscripts won't be
- // affected by the height of the accent). We accomplish this by
- // sticking the base of the accent into the base of the supsub, and
- // rendering that, while keeping track of where the accent is.
-
- // The supsub group is the group that was passed in
- var supsub = group;
- // The real accent group is the base of the supsub group
- group = supsub.value.base;
- // The character box is the base of the accent group
- base = group.value.base;
- // Stick the character box into the base of the supsub group
- supsub.value.base = base;
-
- // Rerender the supsub group with its new base, and store that
- // result.
- supsubGroup = buildGroup(
- supsub, options.reset(), prev);
- }
-
- // Build the base group
- var body = buildGroup(
- base, options.withStyle(options.style.cramp()));
-
- // Calculate the skew of the accent. This is based on the line "If the
- // nucleus is not a single character, let s = 0; otherwise set s to the
- // kern amount for the nucleus followed by the \skewchar of its font."
- // Note that our skew metrics are just the kern between each character
- // and the skewchar.
- var skew;
- if (isCharacterBox(base)) {
- // If the base is a character box, then we want the skew of the
- // innermost character. To do that, we find the innermost character:
- var baseChar = getBaseElem(base);
- // Then, we render its group to get the symbol inside it
- var baseGroup = buildGroup(
- baseChar, options.withStyle(options.style.cramp()));
- // Finally, we pull the skew off of the symbol.
- skew = baseGroup.skew;
- // Note that we now throw away baseGroup, because the layers we
- // removed with getBaseElem might contain things like \color which
- // we can't get rid of.
- // TODO(emily): Find a better way to get the skew
- } else {
- skew = 0;
- }
-
- // calculate the amount of space between the body and the accent
- var clearance = Math.min(body.height, fontMetrics.metrics.xHeight);
-
- // Build the accent
- var accent = buildCommon.makeSymbol(
- group.value.accent, "Main-Regular", "math", options.getColor());
- // Remove the italic correction of the accent, because it only serves to
- // shift the accent over to a place we don't want.
- accent.italic = 0;
-
- // The \vec character that the fonts use is a combining character, and
- // thus shows up much too far to the left. To account for this, we add a
- // specific class which shifts the accent over to where we want it.
- // TODO(emily): Fix this in a better way, like by changing the font
- var vecClass = group.value.accent === "\\vec" ? "accent-vec" : null;
-
- var accentBody = makeSpan(["accent-body", vecClass], [
- makeSpan([], [accent])]);
-
- accentBody = buildCommon.makeVList([
- {type: "elem", elem: body},
- {type: "kern", size: -clearance},
- {type: "elem", elem: accentBody},
- ], "firstBaseline", null, options);
-
- // Shift the accent over by the skew. Note we shift by twice the skew
- // because we are centering the accent, so by adding 2*skew to the left,
- // we shift it to the right by 1*skew.
- accentBody.children[1].style.marginLeft = 2 * skew + "em";
-
- var accentWrap = makeSpan(["mord", "accent"], [accentBody]);
-
- if (supsubGroup) {
- // Here, we replace the "base" child of the supsub with our newly
- // generated accent.
- supsubGroup.children[0] = accentWrap;
-
- // Since we don't rerun the height calculation after replacing the
- // accent, we manually recalculate height.
- supsubGroup.height = Math.max(accentWrap.height, supsubGroup.height);
-
- // Accents should always be ords, even when their innards are not.
- supsubGroup.classes[0] = "mord";
-
- return supsubGroup;
- } else {
- return accentWrap;
- }
-};
-
-groupTypes.phantom = function(group, options, prev) {
- var elements = buildExpression(
- group.value.value,
- options.withPhantom(),
- prev
- );
-
- // \phantom isn't supposed to affect the elements it contains.
- // See "color" for more details.
- return new buildCommon.makeFragment(elements);
-};
-
-/**
- * buildGroup is the function that takes a group and calls the correct groupType
- * function for it. It also handles the interaction of size and style changes
- * between parents and children.
- */
-var buildGroup = function(group, options, prev) {
- if (!group) {
- return makeSpan();
- }
-
- if (groupTypes[group.type]) {
- // Call the groupTypes function
- var groupNode = groupTypes[group.type](group, options, prev);
- var multiplier;
-
- // If the style changed between the parent and the current group,
- // account for the size difference
- if (options.style !== options.parentStyle) {
- multiplier = options.style.sizeMultiplier /
- options.parentStyle.sizeMultiplier;
-
- groupNode.height *= multiplier;
- groupNode.depth *= multiplier;
- }
-
- // If the size changed between the parent and the current group, account
- // for that size difference.
- if (options.size !== options.parentSize) {
- multiplier = buildCommon.sizingMultiplier[options.size] /
- buildCommon.sizingMultiplier[options.parentSize];
-
- groupNode.height *= multiplier;
- groupNode.depth *= multiplier;
- }
-
- return groupNode;
- } else {
- throw new ParseError(
- "Got group of unknown type: '" + group.type + "'");
- }
-};
-
-/**
- * Take an entire parse tree, and build it into an appropriate set of HTML
- * nodes.
- */
-var buildHTML = function(tree, options) {
- // buildExpression is destructive, so we need to make a clone
- // of the incoming tree so that it isn't accidentally changed
- tree = JSON.parse(JSON.stringify(tree));
-
- // Build the expression contained in the tree
- var expression = buildExpression(tree, options);
- var body = makeSpan(["base", options.style.cls()], expression);
-
- // Add struts, which ensure that the top of the HTML element falls at the
- // height of the expression, and the bottom of the HTML element falls at the
- // depth of the expression.
- var topStrut = makeSpan(["strut"]);
- var bottomStrut = makeSpan(["strut", "bottom"]);
-
- topStrut.style.height = body.height + "em";
- bottomStrut.style.height = (body.height + body.depth) + "em";
- // We'd like to use `vertical-align: top` but in IE 9 this lowers the
- // baseline of the box to the bottom of this strut (instead staying in the
- // normal place) so we use an absolute value for vertical-align instead
- bottomStrut.style.verticalAlign = -body.depth + "em";
-
- // Wrap the struts and body together
- var htmlNode = makeSpan(["katex-html"], [topStrut, bottomStrut, body]);
-
- htmlNode.setAttribute("aria-hidden", "true");
-
- return htmlNode;
-};
-
-module.exports = buildHTML;
diff --git a/webapp/non_npm_dependencies/katex/src/buildMathML.js b/webapp/non_npm_dependencies/katex/src/buildMathML.js
deleted file mode 100644
index f3c7c5e1c..000000000
--- a/webapp/non_npm_dependencies/katex/src/buildMathML.js
+++ /dev/null
@@ -1,519 +0,0 @@
-/**
- * This file converts a parse tree into a cooresponding MathML tree. The main
- * entry point is the `buildMathML` function, which takes a parse tree from the
- * parser.
- */
-
-var buildCommon = require("./buildCommon");
-var fontMetrics = require("./fontMetrics");
-var mathMLTree = require("./mathMLTree");
-var ParseError = require("./ParseError");
-var symbols = require("./symbols");
-var utils = require("./utils");
-
-var makeSpan = buildCommon.makeSpan;
-var fontMap = buildCommon.fontMap;
-
-/**
- * Takes a symbol and converts it into a MathML text node after performing
- * optional replacement from symbols.js.
- */
-var makeText = function(text, mode) {
- if (symbols[mode][text] && symbols[mode][text].replace) {
- text = symbols[mode][text].replace;
- }
-
- return new mathMLTree.TextNode(text);
-};
-
-/**
- * Returns the math variant as a string or null if none is required.
- */
-var getVariant = function(group, options) {
- var font = options.font;
- if (!font) {
- return null;
- }
-
- var mode = group.mode;
- if (font === "mathit") {
- return "italic";
- }
-
- var value = group.value;
- if (utils.contains(["\\imath", "\\jmath"], value)) {
- return null;
- }
-
- if (symbols[mode][value] && symbols[mode][value].replace) {
- value = symbols[mode][value].replace;
- }
-
- var fontName = fontMap[font].fontName;
- if (fontMetrics.getCharacterMetrics(value, fontName)) {
- return fontMap[options.font].variant;
- }
-
- return null;
-};
-
-/**
- * Functions for handling the different types of groups found in the parse
- * tree. Each function should take a parse group and return a MathML node.
- */
-var groupTypes = {};
-
-groupTypes.mathord = function(group, options) {
- var node = new mathMLTree.MathNode(
- "mi",
- [makeText(group.value, group.mode)]);
-
- var variant = getVariant(group, options);
- if (variant) {
- node.setAttribute("mathvariant", variant);
- }
- return node;
-};
-
-groupTypes.textord = function(group, options) {
- var text = makeText(group.value, group.mode);
-
- var variant = getVariant(group, options) || "normal";
-
- var node;
- if (/[0-9]/.test(group.value)) {
- // TODO(kevinb) merge adjacent <mn> nodes
- // do it as a post processing step
- node = new mathMLTree.MathNode("mn", [text]);
- if (options.font) {
- node.setAttribute("mathvariant", variant);
- }
- } else {
- node = new mathMLTree.MathNode("mi", [text]);
- node.setAttribute("mathvariant", variant);
- }
-
- return node;
-};
-
-groupTypes.bin = function(group) {
- var node = new mathMLTree.MathNode(
- "mo", [makeText(group.value, group.mode)]);
-
- return node;
-};
-
-groupTypes.rel = function(group) {
- var node = new mathMLTree.MathNode(
- "mo", [makeText(group.value, group.mode)]);
-
- return node;
-};
-
-groupTypes.open = function(group) {
- var node = new mathMLTree.MathNode(
- "mo", [makeText(group.value, group.mode)]);
-
- return node;
-};
-
-groupTypes.close = function(group) {
- var node = new mathMLTree.MathNode(
- "mo", [makeText(group.value, group.mode)]);
-
- return node;
-};
-
-groupTypes.inner = function(group) {
- var node = new mathMLTree.MathNode(
- "mo", [makeText(group.value, group.mode)]);
-
- return node;
-};
-
-groupTypes.punct = function(group) {
- var node = new mathMLTree.MathNode(
- "mo", [makeText(group.value, group.mode)]);
-
- node.setAttribute("separator", "true");
-
- return node;
-};
-
-groupTypes.ordgroup = function(group, options) {
- var inner = buildExpression(group.value, options);
-
- var node = new mathMLTree.MathNode("mrow", inner);
-
- return node;
-};
-
-groupTypes.text = function(group, options) {
- var inner = buildExpression(group.value.body, options);
-
- var node = new mathMLTree.MathNode("mtext", inner);
-
- return node;
-};
-
-groupTypes.color = function(group, options) {
- var inner = buildExpression(group.value.value, options);
-
- var node = new mathMLTree.MathNode("mstyle", inner);
-
- node.setAttribute("mathcolor", group.value.color);
-
- return node;
-};
-
-groupTypes.supsub = function(group, options) {
- var children = [buildGroup(group.value.base, options)];
-
- if (group.value.sub) {
- children.push(buildGroup(group.value.sub, options));
- }
-
- if (group.value.sup) {
- children.push(buildGroup(group.value.sup, options));
- }
-
- var nodeType;
- if (!group.value.sub) {
- nodeType = "msup";
- } else if (!group.value.sup) {
- nodeType = "msub";
- } else {
- nodeType = "msubsup";
- }
-
- var node = new mathMLTree.MathNode(nodeType, children);
-
- return node;
-};
-
-groupTypes.genfrac = function(group, options) {
- var node = new mathMLTree.MathNode(
- "mfrac",
- [buildGroup(group.value.numer, options),
- buildGroup(group.value.denom, options)]);
-
- if (!group.value.hasBarLine) {
- node.setAttribute("linethickness", "0px");
- }
-
- if (group.value.leftDelim != null || group.value.rightDelim != null) {
- var withDelims = [];
-
- if (group.value.leftDelim != null) {
- var leftOp = new mathMLTree.MathNode(
- "mo", [new mathMLTree.TextNode(group.value.leftDelim)]);
-
- leftOp.setAttribute("fence", "true");
-
- withDelims.push(leftOp);
- }
-
- withDelims.push(node);
-
- if (group.value.rightDelim != null) {
- var rightOp = new mathMLTree.MathNode(
- "mo", [new mathMLTree.TextNode(group.value.rightDelim)]);
-
- rightOp.setAttribute("fence", "true");
-
- withDelims.push(rightOp);
- }
-
- var outerNode = new mathMLTree.MathNode("mrow", withDelims);
-
- return outerNode;
- }
-
- return node;
-};
-
-groupTypes.array = function(group, options) {
- return new mathMLTree.MathNode(
- "mtable", group.value.body.map(function(row) {
- return new mathMLTree.MathNode(
- "mtr", row.map(function(cell) {
- return new mathMLTree.MathNode(
- "mtd", [buildGroup(cell, options)]);
- }));
- }));
-};
-
-groupTypes.sqrt = function(group, options) {
- var node;
- if (group.value.index) {
- node = new mathMLTree.MathNode(
- "mroot", [
- buildGroup(group.value.body, options),
- buildGroup(group.value.index, options),
- ]);
- } else {
- node = new mathMLTree.MathNode(
- "msqrt", [buildGroup(group.value.body, options)]);
- }
-
- return node;
-};
-
-groupTypes.leftright = function(group, options) {
- var inner = buildExpression(group.value.body, options);
-
- if (group.value.left !== ".") {
- var leftNode = new mathMLTree.MathNode(
- "mo", [makeText(group.value.left, group.mode)]);
-
- leftNode.setAttribute("fence", "true");
-
- inner.unshift(leftNode);
- }
-
- if (group.value.right !== ".") {
- var rightNode = new mathMLTree.MathNode(
- "mo", [makeText(group.value.right, group.mode)]);
-
- rightNode.setAttribute("fence", "true");
-
- inner.push(rightNode);
- }
-
- var outerNode = new mathMLTree.MathNode("mrow", inner);
-
- return outerNode;
-};
-
-groupTypes.accent = function(group, options) {
- var accentNode = new mathMLTree.MathNode(
- "mo", [makeText(group.value.accent, group.mode)]);
-
- var node = new mathMLTree.MathNode(
- "mover",
- [buildGroup(group.value.base, options),
- accentNode]);
-
- node.setAttribute("accent", "true");
-
- return node;
-};
-
-groupTypes.spacing = function(group) {
- var node;
-
- if (group.value === "\\ " || group.value === "\\space" ||
- group.value === " " || group.value === "~") {
- node = new mathMLTree.MathNode(
- "mtext", [new mathMLTree.TextNode("\u00a0")]);
- } else {
- node = new mathMLTree.MathNode("mspace");
-
- node.setAttribute(
- "width", buildCommon.spacingFunctions[group.value].size);
- }
-
- return node;
-};
-
-groupTypes.op = function(group) {
- var node;
-
- // TODO(emily): handle big operators using the `largeop` attribute
-
- if (group.value.symbol) {
- // This is a symbol. Just add the symbol.
- node = new mathMLTree.MathNode(
- "mo", [makeText(group.value.body, group.mode)]);
- } else {
- // This is a text operator. Add all of the characters from the
- // operator's name.
- // TODO(emily): Add a space in the middle of some of these
- // operators, like \limsup.
- node = new mathMLTree.MathNode(
- "mi", [new mathMLTree.TextNode(group.value.body.slice(1))]);
- }
-
- return node;
-};
-
-groupTypes.katex = function(group) {
- var node = new mathMLTree.MathNode(
- "mtext", [new mathMLTree.TextNode("KaTeX")]);
-
- return node;
-};
-
-groupTypes.font = function(group, options) {
- var font = group.value.font;
- return buildGroup(group.value.body, options.withFont(font));
-};
-
-groupTypes.delimsizing = function(group) {
- var children = [];
-
- if (group.value.value !== ".") {
- children.push(makeText(group.value.value, group.mode));
- }
-
- var node = new mathMLTree.MathNode("mo", children);
-
- if (group.value.delimType === "open" ||
- group.value.delimType === "close") {
- // Only some of the delimsizing functions act as fences, and they
- // return "open" or "close" delimTypes.
- node.setAttribute("fence", "true");
- } else {
- // Explicitly disable fencing if it's not a fence, to override the
- // defaults.
- node.setAttribute("fence", "false");
- }
-
- return node;
-};
-
-groupTypes.styling = function(group, options) {
- var inner = buildExpression(group.value.value, options);
-
- var node = new mathMLTree.MathNode("mstyle", inner);
-
- var styleAttributes = {
- "display": ["0", "true"],
- "text": ["0", "false"],
- "script": ["1", "false"],
- "scriptscript": ["2", "false"],
- };
-
- var attr = styleAttributes[group.value.style];
-
- node.setAttribute("scriptlevel", attr[0]);
- node.setAttribute("displaystyle", attr[1]);
-
- return node;
-};
-
-groupTypes.sizing = function(group, options) {
- var inner = buildExpression(group.value.value, options);
-
- var node = new mathMLTree.MathNode("mstyle", inner);
-
- // TODO(emily): This doesn't produce the correct size for nested size
- // changes, because we don't keep state of what style we're currently
- // in, so we can't reset the size to normal before changing it. Now
- // that we're passing an options parameter we should be able to fix
- // this.
- node.setAttribute(
- "mathsize", buildCommon.sizingMultiplier[group.value.size] + "em");
-
- return node;
-};
-
-groupTypes.overline = function(group, options) {
- var operator = new mathMLTree.MathNode(
- "mo", [new mathMLTree.TextNode("\u203e")]);
- operator.setAttribute("stretchy", "true");
-
- var node = new mathMLTree.MathNode(
- "mover",
- [buildGroup(group.value.body, options),
- operator]);
- node.setAttribute("accent", "true");
-
- return node;
-};
-
-groupTypes.rule = function(group) {
- // TODO(emily): Figure out if there's an actual way to draw black boxes
- // in MathML.
- var node = new mathMLTree.MathNode("mrow");
-
- return node;
-};
-
-groupTypes.llap = function(group, options) {
- var node = new mathMLTree.MathNode(
- "mpadded", [buildGroup(group.value.body, options)]);
-
- node.setAttribute("lspace", "-1width");
- node.setAttribute("width", "0px");
-
- return node;
-};
-
-groupTypes.rlap = function(group, options) {
- var node = new mathMLTree.MathNode(
- "mpadded", [buildGroup(group.value.body, options)]);
-
- node.setAttribute("width", "0px");
-
- return node;
-};
-
-groupTypes.phantom = function(group, options, prev) {
- var inner = buildExpression(group.value.value, options);
- return new mathMLTree.MathNode("mphantom", inner);
-};
-
-/**
- * Takes a list of nodes, builds them, and returns a list of the generated
- * MathML nodes. A little simpler than the HTML version because we don't do any
- * previous-node handling.
- */
-var buildExpression = function(expression, options) {
- var groups = [];
- for (var i = 0; i < expression.length; i++) {
- var group = expression[i];
- groups.push(buildGroup(group, options));
- }
- return groups;
-};
-
-/**
- * Takes a group from the parser and calls the appropriate groupTypes function
- * on it to produce a MathML node.
- */
-var buildGroup = function(group, options) {
- if (!group) {
- return new mathMLTree.MathNode("mrow");
- }
-
- if (groupTypes[group.type]) {
- // Call the groupTypes function
- return groupTypes[group.type](group, options);
- } else {
- throw new ParseError(
- "Got group of unknown type: '" + group.type + "'");
- }
-};
-
-/**
- * Takes a full parse tree and settings and builds a MathML representation of
- * it. In particular, we put the elements from building the parse tree into a
- * <semantics> tag so we can also include that TeX source as an annotation.
- *
- * Note that we actually return a domTree element with a `<math>` inside it so
- * we can do appropriate styling.
- */
-var buildMathML = function(tree, texExpression, options) {
- var expression = buildExpression(tree, options);
-
- // Wrap up the expression in an mrow so it is presented in the semantics
- // tag correctly.
- var wrapper = new mathMLTree.MathNode("mrow", expression);
-
- // Build a TeX annotation of the source
- var annotation = new mathMLTree.MathNode(
- "annotation", [new mathMLTree.TextNode(texExpression)]);
-
- annotation.setAttribute("encoding", "application/x-tex");
-
- var semantics = new mathMLTree.MathNode(
- "semantics", [wrapper, annotation]);
-
- var math = new mathMLTree.MathNode("math", [semantics]);
-
- // You can't style <math> nodes, so we wrap the node in a span.
- return makeSpan(["katex-mathml"], [math]);
-};
-
-module.exports = buildMathML;
diff --git a/webapp/non_npm_dependencies/katex/src/buildTree.js b/webapp/non_npm_dependencies/katex/src/buildTree.js
deleted file mode 100644
index 4a8c2aeda..000000000
--- a/webapp/non_npm_dependencies/katex/src/buildTree.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var buildHTML = require("./buildHTML");
-var buildMathML = require("./buildMathML");
-var buildCommon = require("./buildCommon");
-var Options = require("./Options");
-var Settings = require("./Settings");
-var Style = require("./Style");
-
-var makeSpan = buildCommon.makeSpan;
-
-var buildTree = function(tree, expression, settings) {
- settings = settings || new Settings({});
-
- var startStyle = Style.TEXT;
- if (settings.displayMode) {
- startStyle = Style.DISPLAY;
- }
-
- // Setup the default options
- var options = new Options({
- style: startStyle,
- size: "size5",
- });
-
- // `buildHTML` sometimes messes with the parse tree (like turning bins ->
- // ords), so we build the MathML version first.
- var mathMLNode = buildMathML(tree, expression, options);
- var htmlNode = buildHTML(tree, options);
-
- var katexNode = makeSpan(["katex"], [
- mathMLNode, htmlNode,
- ]);
-
- if (settings.displayMode) {
- return makeSpan(["katex-display"], [katexNode]);
- } else {
- return katexNode;
- }
-};
-
-module.exports = buildTree;
diff --git a/webapp/non_npm_dependencies/katex/src/delimiter.js b/webapp/non_npm_dependencies/katex/src/delimiter.js
deleted file mode 100644
index 168319d41..000000000
--- a/webapp/non_npm_dependencies/katex/src/delimiter.js
+++ /dev/null
@@ -1,542 +0,0 @@
-/**
- * This file deals with creating delimiters of various sizes. The TeXbook
- * discusses these routines on page 441-442, in the "Another subroutine sets box
- * x to a specified variable delimiter" paragraph.
- *
- * There are three main routines here. `makeSmallDelim` makes a delimiter in the
- * normal font, but in either text, script, or scriptscript style.
- * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,
- * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of
- * smaller pieces that are stacked on top of one another.
- *
- * The functions take a parameter `center`, which determines if the delimiter
- * should be centered around the axis.
- *
- * Then, there are three exposed functions. `sizedDelim` makes a delimiter in
- * one of the given sizes. This is used for things like `\bigl`.
- * `customSizedDelim` makes a delimiter with a given total height+depth. It is
- * called in places like `\sqrt`. `leftRightDelim` makes an appropriate
- * delimiter which surrounds an expression of a given height an depth. It is
- * used in `\left` and `\right`.
- */
-
-var ParseError = require("./ParseError");
-var Style = require("./Style");
-
-var buildCommon = require("./buildCommon");
-var fontMetrics = require("./fontMetrics");
-var symbols = require("./symbols");
-var utils = require("./utils");
-
-var makeSpan = buildCommon.makeSpan;
-
-/**
- * Get the metrics for a given symbol and font, after transformation (i.e.
- * after following replacement from symbols.js)
- */
-var getMetrics = function(symbol, font) {
- if (symbols.math[symbol] && symbols.math[symbol].replace) {
- return fontMetrics.getCharacterMetrics(
- symbols.math[symbol].replace, font);
- } else {
- return fontMetrics.getCharacterMetrics(
- symbol, font);
- }
-};
-
-/**
- * Builds a symbol in the given font size (note size is an integer)
- */
-var mathrmSize = function(value, size, mode) {
- return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode);
-};
-
-/**
- * Puts a delimiter span in a given style, and adds appropriate height, depth,
- * and maxFontSizes.
- */
-var styleWrap = function(delim, toStyle, options) {
- var span = makeSpan(
- ["style-wrap", options.style.reset(), toStyle.cls()], [delim]);
-
- var multiplier = toStyle.sizeMultiplier / options.style.sizeMultiplier;
-
- span.height *= multiplier;
- span.depth *= multiplier;
- span.maxFontSize = toStyle.sizeMultiplier;
-
- return span;
-};
-
-/**
- * Makes a small delimiter. This is a delimiter that comes in the Main-Regular
- * font, but is restyled to either be in textstyle, scriptstyle, or
- * scriptscriptstyle.
- */
-var makeSmallDelim = function(delim, style, center, options, mode) {
- var text = buildCommon.makeSymbol(delim, "Main-Regular", mode);
-
- var span = styleWrap(text, style, options);
-
- if (center) {
- var shift =
- (1 - options.style.sizeMultiplier / style.sizeMultiplier) *
- fontMetrics.metrics.axisHeight;
-
- span.style.top = shift + "em";
- span.height -= shift;
- span.depth += shift;
- }
-
- return span;
-};
-
-/**
- * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,
- * Size3, or Size4 fonts. It is always rendered in textstyle.
- */
-var makeLargeDelim = function(delim, size, center, options, mode) {
- var inner = mathrmSize(delim, size, mode);
-
- var span = styleWrap(
- makeSpan(["delimsizing", "size" + size],
- [inner], options.getColor()),
- Style.TEXT, options);
-
- if (center) {
- var shift = (1 - options.style.sizeMultiplier) *
- fontMetrics.metrics.axisHeight;
-
- span.style.top = shift + "em";
- span.height -= shift;
- span.depth += shift;
- }
-
- return span;
-};
-
-/**
- * Make an inner span with the given offset and in the given font. This is used
- * in `makeStackedDelim` to make the stacking pieces for the delimiter.
- */
-var makeInner = function(symbol, font, mode) {
- var sizeClass;
- // Apply the correct CSS class to choose the right font.
- if (font === "Size1-Regular") {
- sizeClass = "delim-size1";
- } else if (font === "Size4-Regular") {
- sizeClass = "delim-size4";
- }
-
- var inner = makeSpan(
- ["delimsizinginner", sizeClass],
- [makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]);
-
- // Since this will be passed into `makeVList` in the end, wrap the element
- // in the appropriate tag that VList uses.
- return {type: "elem", elem: inner};
-};
-
-/**
- * Make a stacked delimiter out of a given delimiter, with the total height at
- * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.
- */
-var makeStackedDelim = function(delim, heightTotal, center, options, mode) {
- // There are four parts, the top, an optional middle, a repeated part, and a
- // bottom.
- var top;
- var middle;
- var repeat;
- var bottom;
- top = repeat = bottom = delim;
- middle = null;
- // Also keep track of what font the delimiters are in
- var font = "Size1-Regular";
-
- // We set the parts and font based on the symbol. Note that we use
- // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the
- // repeats of the arrows
- if (delim === "\\uparrow") {
- repeat = bottom = "\u23d0";
- } else if (delim === "\\Uparrow") {
- repeat = bottom = "\u2016";
- } else if (delim === "\\downarrow") {
- top = repeat = "\u23d0";
- } else if (delim === "\\Downarrow") {
- top = repeat = "\u2016";
- } else if (delim === "\\updownarrow") {
- top = "\\uparrow";
- repeat = "\u23d0";
- bottom = "\\downarrow";
- } else if (delim === "\\Updownarrow") {
- top = "\\Uparrow";
- repeat = "\u2016";
- bottom = "\\Downarrow";
- } else if (delim === "[" || delim === "\\lbrack") {
- top = "\u23a1";
- repeat = "\u23a2";
- bottom = "\u23a3";
- font = "Size4-Regular";
- } else if (delim === "]" || delim === "\\rbrack") {
- top = "\u23a4";
- repeat = "\u23a5";
- bottom = "\u23a6";
- font = "Size4-Regular";
- } else if (delim === "\\lfloor") {
- repeat = top = "\u23a2";
- bottom = "\u23a3";
- font = "Size4-Regular";
- } else if (delim === "\\lceil") {
- top = "\u23a1";
- repeat = bottom = "\u23a2";
- font = "Size4-Regular";
- } else if (delim === "\\rfloor") {
- repeat = top = "\u23a5";
- bottom = "\u23a6";
- font = "Size4-Regular";
- } else if (delim === "\\rceil") {
- top = "\u23a4";
- repeat = bottom = "\u23a5";
- font = "Size4-Regular";
- } else if (delim === "(") {
- top = "\u239b";
- repeat = "\u239c";
- bottom = "\u239d";
- font = "Size4-Regular";
- } else if (delim === ")") {
- top = "\u239e";
- repeat = "\u239f";
- bottom = "\u23a0";
- font = "Size4-Regular";
- } else if (delim === "\\{" || delim === "\\lbrace") {
- top = "\u23a7";
- middle = "\u23a8";
- bottom = "\u23a9";
- repeat = "\u23aa";
- font = "Size4-Regular";
- } else if (delim === "\\}" || delim === "\\rbrace") {
- top = "\u23ab";
- middle = "\u23ac";
- bottom = "\u23ad";
- repeat = "\u23aa";
- font = "Size4-Regular";
- } else if (delim === "\\lgroup") {
- top = "\u23a7";
- bottom = "\u23a9";
- repeat = "\u23aa";
- font = "Size4-Regular";
- } else if (delim === "\\rgroup") {
- top = "\u23ab";
- bottom = "\u23ad";
- repeat = "\u23aa";
- font = "Size4-Regular";
- } else if (delim === "\\lmoustache") {
- top = "\u23a7";
- bottom = "\u23ad";
- repeat = "\u23aa";
- font = "Size4-Regular";
- } else if (delim === "\\rmoustache") {
- top = "\u23ab";
- bottom = "\u23a9";
- repeat = "\u23aa";
- font = "Size4-Regular";
- } else if (delim === "\\surd") {
- top = "\ue001";
- bottom = "\u23b7";
- repeat = "\ue000";
- font = "Size4-Regular";
- }
-
- // Get the metrics of the four sections
- var topMetrics = getMetrics(top, font);
- var topHeightTotal = topMetrics.height + topMetrics.depth;
- var repeatMetrics = getMetrics(repeat, font);
- var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;
- var bottomMetrics = getMetrics(bottom, font);
- var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;
- var middleHeightTotal = 0;
- var middleFactor = 1;
- if (middle !== null) {
- var middleMetrics = getMetrics(middle, font);
- middleHeightTotal = middleMetrics.height + middleMetrics.depth;
- middleFactor = 2; // repeat symmetrically above and below middle
- }
-
- // Calcuate the minimal height that the delimiter can have.
- // It is at least the size of the top, bottom, and optional middle combined.
- var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal;
-
- // Compute the number of copies of the repeat symbol we will need
- var repeatCount = Math.ceil(
- (heightTotal - minHeight) / (middleFactor * repeatHeightTotal));
-
- // Compute the total height of the delimiter including all the symbols
- var realHeightTotal =
- minHeight + repeatCount * middleFactor * repeatHeightTotal;
-
- // The center of the delimiter is placed at the center of the axis. Note
- // that in this context, "center" means that the delimiter should be
- // centered around the axis in the current style, while normally it is
- // centered around the axis in textstyle.
- var axisHeight = fontMetrics.metrics.axisHeight;
- if (center) {
- axisHeight *= options.style.sizeMultiplier;
- }
- // Calculate the depth
- var depth = realHeightTotal / 2 - axisHeight;
-
- // Now, we start building the pieces that will go into the vlist
-
- // Keep a list of the inner pieces
- var inners = [];
-
- // Add the bottom symbol
- inners.push(makeInner(bottom, font, mode));
-
- var i;
- if (middle === null) {
- // Add that many symbols
- for (i = 0; i < repeatCount; i++) {
- inners.push(makeInner(repeat, font, mode));
- }
- } else {
- // When there is a middle bit, we need the middle part and two repeated
- // sections
- for (i = 0; i < repeatCount; i++) {
- inners.push(makeInner(repeat, font, mode));
- }
- inners.push(makeInner(middle, font, mode));
- for (i = 0; i < repeatCount; i++) {
- inners.push(makeInner(repeat, font, mode));
- }
- }
-
- // Add the top symbol
- inners.push(makeInner(top, font, mode));
-
- // Finally, build the vlist
- var inner = buildCommon.makeVList(inners, "bottom", depth, options);
-
- return styleWrap(
- makeSpan(["delimsizing", "mult"], [inner], options.getColor()),
- Style.TEXT, options);
-};
-
-// There are three kinds of delimiters, delimiters that stack when they become
-// too large
-var stackLargeDelimiters = [
- "(", ")", "[", "\\lbrack", "]", "\\rbrack",
- "\\{", "\\lbrace", "\\}", "\\rbrace",
- "\\lfloor", "\\rfloor", "\\lceil", "\\rceil",
- "\\surd",
-];
-
-// delimiters that always stack
-var stackAlwaysDelimiters = [
- "\\uparrow", "\\downarrow", "\\updownarrow",
- "\\Uparrow", "\\Downarrow", "\\Updownarrow",
- "|", "\\|", "\\vert", "\\Vert",
- "\\lvert", "\\rvert", "\\lVert", "\\rVert",
- "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache",
-];
-
-// and delimiters that never stack
-var stackNeverDelimiters = [
- "<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt",
-];
-
-// Metrics of the different sizes. Found by looking at TeX's output of
-// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$
-// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.
-var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];
-
-/**
- * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.
- */
-var makeSizedDelim = function(delim, size, options, mode) {
- // < and > turn into \langle and \rangle in delimiters
- if (delim === "<" || delim === "\\lt") {
- delim = "\\langle";
- } else if (delim === ">" || delim === "\\gt") {
- delim = "\\rangle";
- }
-
- // Sized delimiters are never centered.
- if (utils.contains(stackLargeDelimiters, delim) ||
- utils.contains(stackNeverDelimiters, delim)) {
- return makeLargeDelim(delim, size, false, options, mode);
- } else if (utils.contains(stackAlwaysDelimiters, delim)) {
- return makeStackedDelim(
- delim, sizeToMaxHeight[size], false, options, mode);
- } else {
- throw new ParseError("Illegal delimiter: '" + delim + "'");
- }
-};
-
-/**
- * There are three different sequences of delimiter sizes that the delimiters
- * follow depending on the kind of delimiter. This is used when creating custom
- * sized delimiters to decide whether to create a small, large, or stacked
- * delimiter.
- *
- * In real TeX, these sequences aren't explicitly defined, but are instead
- * defined inside the font metrics. Since there are only three sequences that
- * are possible for the delimiters that TeX defines, it is easier to just encode
- * them explicitly here.
- */
-
-// Delimiters that never stack try small delimiters and large delimiters only
-var stackNeverDelimiterSequence = [
- {type: "small", style: Style.SCRIPTSCRIPT},
- {type: "small", style: Style.SCRIPT},
- {type: "small", style: Style.TEXT},
- {type: "large", size: 1},
- {type: "large", size: 2},
- {type: "large", size: 3},
- {type: "large", size: 4},
-];
-
-// Delimiters that always stack try the small delimiters first, then stack
-var stackAlwaysDelimiterSequence = [
- {type: "small", style: Style.SCRIPTSCRIPT},
- {type: "small", style: Style.SCRIPT},
- {type: "small", style: Style.TEXT},
- {type: "stack"},
-];
-
-// Delimiters that stack when large try the small and then large delimiters, and
-// stack afterwards
-var stackLargeDelimiterSequence = [
- {type: "small", style: Style.SCRIPTSCRIPT},
- {type: "small", style: Style.SCRIPT},
- {type: "small", style: Style.TEXT},
- {type: "large", size: 1},
- {type: "large", size: 2},
- {type: "large", size: 3},
- {type: "large", size: 4},
- {type: "stack"},
-];
-
-/**
- * Get the font used in a delimiter based on what kind of delimiter it is.
- */
-var delimTypeToFont = function(type) {
- if (type.type === "small") {
- return "Main-Regular";
- } else if (type.type === "large") {
- return "Size" + type.size + "-Regular";
- } else if (type.type === "stack") {
- return "Size4-Regular";
- }
-};
-
-/**
- * Traverse a sequence of types of delimiters to decide what kind of delimiter
- * should be used to create a delimiter of the given height+depth.
- */
-var traverseSequence = function(delim, height, sequence, options) {
- // Here, we choose the index we should start at in the sequences. In smaller
- // sizes (which correspond to larger numbers in style.size) we start earlier
- // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts
- // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2
- var start = Math.min(2, 3 - options.style.size);
- for (var i = start; i < sequence.length; i++) {
- if (sequence[i].type === "stack") {
- // This is always the last delimiter, so we just break the loop now.
- break;
- }
-
- var metrics = getMetrics(delim, delimTypeToFont(sequence[i]));
- var heightDepth = metrics.height + metrics.depth;
-
- // Small delimiters are scaled down versions of the same font, so we
- // account for the style change size.
-
- if (sequence[i].type === "small") {
- heightDepth *= sequence[i].style.sizeMultiplier;
- }
-
- // Check if the delimiter at this size works for the given height.
- if (heightDepth > height) {
- return sequence[i];
- }
- }
-
- // If we reached the end of the sequence, return the last sequence element.
- return sequence[sequence.length - 1];
-};
-
-/**
- * Make a delimiter of a given height+depth, with optional centering. Here, we
- * traverse the sequences, and create a delimiter that the sequence tells us to.
- */
-var makeCustomSizedDelim = function(delim, height, center, options, mode) {
- if (delim === "<" || delim === "\\lt") {
- delim = "\\langle";
- } else if (delim === ">" || delim === "\\gt") {
- delim = "\\rangle";
- }
-
- // Decide what sequence to use
- var sequence;
- if (utils.contains(stackNeverDelimiters, delim)) {
- sequence = stackNeverDelimiterSequence;
- } else if (utils.contains(stackLargeDelimiters, delim)) {
- sequence = stackLargeDelimiterSequence;
- } else {
- sequence = stackAlwaysDelimiterSequence;
- }
-
- // Look through the sequence
- var delimType = traverseSequence(delim, height, sequence, options);
-
- // Depending on the sequence element we decided on, call the appropriate
- // function.
- if (delimType.type === "small") {
- return makeSmallDelim(delim, delimType.style, center, options, mode);
- } else if (delimType.type === "large") {
- return makeLargeDelim(delim, delimType.size, center, options, mode);
- } else if (delimType.type === "stack") {
- return makeStackedDelim(delim, height, center, options, mode);
- }
-};
-
-/**
- * Make a delimiter for use with `\left` and `\right`, given a height and depth
- * of an expression that the delimiters surround.
- */
-var makeLeftRightDelim = function(delim, height, depth, options, mode) {
- // We always center \left/\right delimiters, so the axis is always shifted
- var axisHeight =
- fontMetrics.metrics.axisHeight * options.style.sizeMultiplier;
-
- // Taken from TeX source, tex.web, function make_left_right
- var delimiterFactor = 901;
- var delimiterExtend = 5.0 / fontMetrics.metrics.ptPerEm;
-
- var maxDistFromAxis = Math.max(
- height - axisHeight, depth + axisHeight);
-
- var totalHeight = Math.max(
- // In real TeX, calculations are done using integral values which are
- // 65536 per pt, or 655360 per em. So, the division here truncates in
- // TeX but doesn't here, producing different results. If we wanted to
- // exactly match TeX's calculation, we could do
- // Math.floor(655360 * maxDistFromAxis / 500) *
- // delimiterFactor / 655360
- // (To see the difference, compare
- // x^{x^{\left(\rule{0.1em}{0.68em}\right)}}
- // in TeX and KaTeX)
- maxDistFromAxis / 500 * delimiterFactor,
- 2 * maxDistFromAxis - delimiterExtend);
-
- // Finally, we defer to `makeCustomSizedDelim` with our calculated total
- // height
- return makeCustomSizedDelim(delim, totalHeight, true, options, mode);
-};
-
-module.exports = {
- sizedDelim: makeSizedDelim,
- customSizedDelim: makeCustomSizedDelim,
- leftRightDelim: makeLeftRightDelim,
-};
diff --git a/webapp/non_npm_dependencies/katex/src/domTree.js b/webapp/non_npm_dependencies/katex/src/domTree.js
deleted file mode 100644
index e0d8e925a..000000000
--- a/webapp/non_npm_dependencies/katex/src/domTree.js
+++ /dev/null
@@ -1,269 +0,0 @@
-/**
- * These objects store the data about the DOM nodes we create, as well as some
- * extra data. They can then be transformed into real DOM nodes with the
- * `toNode` function or HTML markup using `toMarkup`. They are useful for both
- * storing extra properties on the nodes, as well as providing a way to easily
- * work with the DOM.
- *
- * Similar functions for working with MathML nodes exist in mathMLTree.js.
- */
-
-var utils = require("./utils");
-
-/**
- * Create an HTML className based on a list of classes. In addition to joining
- * with spaces, we also remove null or empty classes.
- */
-var createClass = function(classes) {
- classes = classes.slice();
- for (var i = classes.length - 1; i >= 0; i--) {
- if (!classes[i]) {
- classes.splice(i, 1);
- }
- }
-
- return classes.join(" ");
-};
-
-/**
- * This node represents a span node, with a className, a list of children, and
- * an inline style. It also contains information about its height, depth, and
- * maxFontSize.
- */
-function span(classes, children, height, depth, maxFontSize, style) {
- this.classes = classes || [];
- this.children = children || [];
- this.height = height || 0;
- this.depth = depth || 0;
- this.maxFontSize = maxFontSize || 0;
- this.style = style || {};
- this.attributes = {};
-}
-
-/**
- * Sets an arbitrary attribute on the span. Warning: use this wisely. Not all
- * browsers support attributes the same, and having too many custom attributes
- * is probably bad.
- */
-span.prototype.setAttribute = function(attribute, value) {
- this.attributes[attribute] = value;
-};
-
-/**
- * Convert the span into an HTML node
- */
-span.prototype.toNode = function() {
- var span = document.createElement("span");
-
- // Apply the class
- span.className = createClass(this.classes);
-
- // Apply inline styles
- for (var style in this.style) {
- if (Object.prototype.hasOwnProperty.call(this.style, style)) {
- span.style[style] = this.style[style];
- }
- }
-
- // Apply attributes
- for (var attr in this.attributes) {
- if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
- span.setAttribute(attr, this.attributes[attr]);
- }
- }
-
- // Append the children, also as HTML nodes
- for (var i = 0; i < this.children.length; i++) {
- span.appendChild(this.children[i].toNode());
- }
-
- return span;
-};
-
-/**
- * Convert the span into an HTML markup string
- */
-span.prototype.toMarkup = function() {
- var markup = "<span";
-
- // Add the class
- if (this.classes.length) {
- markup += " class=\"";
- markup += utils.escape(createClass(this.classes));
- markup += "\"";
- }
-
- var styles = "";
-
- // Add the styles, after hyphenation
- for (var style in this.style) {
- if (this.style.hasOwnProperty(style)) {
- styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
- }
- }
-
- if (styles) {
- markup += " style=\"" + utils.escape(styles) + "\"";
- }
-
- // Add the attributes
- for (var attr in this.attributes) {
- if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
- markup += " " + attr + "=\"";
- markup += utils.escape(this.attributes[attr]);
- markup += "\"";
- }
- }
-
- markup += ">";
-
- // Add the markup of the children, also as markup
- for (var i = 0; i < this.children.length; i++) {
- markup += this.children[i].toMarkup();
- }
-
- markup += "</span>";
-
- return markup;
-};
-
-/**
- * This node represents a document fragment, which contains elements, but when
- * placed into the DOM doesn't have any representation itself. Thus, it only
- * contains children and doesn't have any HTML properties. It also keeps track
- * of a height, depth, and maxFontSize.
- */
-function documentFragment(children, height, depth, maxFontSize) {
- this.children = children || [];
- this.height = height || 0;
- this.depth = depth || 0;
- this.maxFontSize = maxFontSize || 0;
-}
-
-/**
- * Convert the fragment into a node
- */
-documentFragment.prototype.toNode = function() {
- // Create a fragment
- var frag = document.createDocumentFragment();
-
- // Append the children
- for (var i = 0; i < this.children.length; i++) {
- frag.appendChild(this.children[i].toNode());
- }
-
- return frag;
-};
-
-/**
- * Convert the fragment into HTML markup
- */
-documentFragment.prototype.toMarkup = function() {
- var markup = "";
-
- // Simply concatenate the markup for the children together
- for (var i = 0; i < this.children.length; i++) {
- markup += this.children[i].toMarkup();
- }
-
- return markup;
-};
-
-/**
- * A symbol node contains information about a single symbol. It either renders
- * to a single text node, or a span with a single text node in it, depending on
- * whether it has CSS classes, styles, or needs italic correction.
- */
-function symbolNode(value, height, depth, italic, skew, classes, style) {
- this.value = value || "";
- this.height = height || 0;
- this.depth = depth || 0;
- this.italic = italic || 0;
- this.skew = skew || 0;
- this.classes = classes || [];
- this.style = style || {};
- this.maxFontSize = 0;
-}
-
-/**
- * Creates a text node or span from a symbol node. Note that a span is only
- * created if it is needed.
- */
-symbolNode.prototype.toNode = function() {
- var node = document.createTextNode(this.value);
- var span = null;
-
- if (this.italic > 0) {
- span = document.createElement("span");
- span.style.marginRight = this.italic + "em";
- }
-
- if (this.classes.length > 0) {
- span = span || document.createElement("span");
- span.className = createClass(this.classes);
- }
-
- for (var style in this.style) {
- if (this.style.hasOwnProperty(style)) {
- span = span || document.createElement("span");
- span.style[style] = this.style[style];
- }
- }
-
- if (span) {
- span.appendChild(node);
- return span;
- } else {
- return node;
- }
-};
-
-/**
- * Creates markup for a symbol node.
- */
-symbolNode.prototype.toMarkup = function() {
- // TODO(alpert): More duplication than I'd like from
- // span.prototype.toMarkup and symbolNode.prototype.toNode...
- var needsSpan = false;
-
- var markup = "<span";
-
- if (this.classes.length) {
- needsSpan = true;
- markup += " class=\"";
- markup += utils.escape(createClass(this.classes));
- markup += "\"";
- }
-
- var styles = "";
-
- if (this.italic > 0) {
- styles += "margin-right:" + this.italic + "em;";
- }
- for (var style in this.style) {
- if (this.style.hasOwnProperty(style)) {
- styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
- }
- }
-
- if (styles) {
- needsSpan = true;
- markup += " style=\"" + utils.escape(styles) + "\"";
- }
-
- var escaped = utils.escape(this.value);
- if (needsSpan) {
- markup += ">";
- markup += escaped;
- markup += "</span>";
- return markup;
- } else {
- return escaped;
- }
-};
-
-module.exports = {
- span: span,
- documentFragment: documentFragment,
- symbolNode: symbolNode,
-};
diff --git a/webapp/non_npm_dependencies/katex/src/environments.js b/webapp/non_npm_dependencies/katex/src/environments.js
deleted file mode 100644
index f0fff42a5..000000000
--- a/webapp/non_npm_dependencies/katex/src/environments.js
+++ /dev/null
@@ -1,221 +0,0 @@
-/* eslint no-constant-condition:0 */
-var fontMetrics = require("./fontMetrics");
-var parseData = require("./parseData");
-var ParseError = require("./ParseError");
-
-var ParseNode = parseData.ParseNode;
-
-/**
- * Parse the body of the environment, with rows delimited by \\ and
- * columns delimited by &, and create a nested list in row-major order
- * with one group per cell.
- */
-function parseArray(parser, result) {
- var row = [];
- var body = [row];
- var rowGaps = [];
- while (true) {
- var cell = parser.parseExpression(false, null);
- row.push(new ParseNode("ordgroup", cell, parser.mode));
- var next = parser.nextToken.text;
- if (next === "&") {
- parser.consume();
- } else if (next === "\\end") {
- break;
- } else if (next === "\\\\" || next === "\\cr") {
- var cr = parser.parseFunction();
- rowGaps.push(cr.value.size);
- row = [];
- body.push(row);
- } else {
- // TODO: Clean up the following hack once #385 got merged
- var pos = Math.min(parser.pos + 1, parser.lexer._input.length);
- throw new ParseError("Expected & or \\\\ or \\end",
- parser.lexer, pos);
- }
- }
- result.body = body;
- result.rowGaps = rowGaps;
- return new ParseNode(result.type, result, parser.mode);
-}
-
-/*
- * An environment definition is very similar to a function definition:
- * it is declared with a name or a list of names, a set of properties
- * and a handler containing the actual implementation.
- *
- * The properties include:
- * - numArgs: The number of arguments after the \begin{name} function.
- * - argTypes: (optional) Just like for a function
- * - allowedInText: (optional) Whether or not the environment is allowed inside
- * text mode (default false) (not enforced yet)
- * - numOptionalArgs: (optional) Just like for a function
- * A bare number instead of that object indicates the numArgs value.
- *
- * The handler function will receive two arguments
- * - context: information and references provided by the parser
- * - args: an array of arguments passed to \begin{name}
- * The context contains the following properties:
- * - envName: the name of the environment, one of the listed names.
- * - parser: the parser object
- * - lexer: the lexer object
- * - positions: the positions associated with these arguments from args.
- * The handler must return a ParseResult.
- */
-
-function defineEnvironment(names, props, handler) {
- if (typeof names === "string") {
- names = [names];
- }
- if (typeof props === "number") {
- props = { numArgs: props };
- }
- // Set default values of environments
- var data = {
- numArgs: props.numArgs || 0,
- argTypes: props.argTypes,
- greediness: 1,
- allowedInText: !!props.allowedInText,
- numOptionalArgs: props.numOptionalArgs || 0,
- handler: handler,
- };
- for (var i = 0; i < names.length; ++i) {
- module.exports[names[i]] = data;
- }
-}
-
-// Arrays are part of LaTeX, defined in lttab.dtx so its documentation
-// is part of the source2e.pdf file of LaTeX2e source documentation.
-defineEnvironment("array", {
- numArgs: 1,
-}, function(context, args) {
- var colalign = args[0];
- colalign = colalign.value.map ? colalign.value : [colalign];
- var cols = colalign.map(function(node) {
- var ca = node.value;
- if ("lcr".indexOf(ca) !== -1) {
- return {
- type: "align",
- align: ca,
- };
- } else if (ca === "|") {
- return {
- type: "separator",
- separator: "|",
- };
- }
- throw new ParseError(
- "Unknown column alignment: " + node.value,
- context.lexer, context.positions[1]);
- });
- var res = {
- type: "array",
- cols: cols,
- hskipBeforeAndAfter: true, // \@preamble in lttab.dtx
- };
- res = parseArray(context.parser, res);
- return res;
-});
-
-// The matrix environments of amsmath builds on the array environment
-// of LaTeX, which is discussed above.
-defineEnvironment([
- "matrix",
- "pmatrix",
- "bmatrix",
- "Bmatrix",
- "vmatrix",
- "Vmatrix",
-], {
-}, function(context) {
- var delimiters = {
- "matrix": null,
- "pmatrix": ["(", ")"],
- "bmatrix": ["[", "]"],
- "Bmatrix": ["\\{", "\\}"],
- "vmatrix": ["|", "|"],
- "Vmatrix": ["\\Vert", "\\Vert"],
- }[context.envName];
- var res = {
- type: "array",
- hskipBeforeAndAfter: false, // \hskip -\arraycolsep in amsmath
- };
- res = parseArray(context.parser, res);
- if (delimiters) {
- res = new ParseNode("leftright", {
- body: [res],
- left: delimiters[0],
- right: delimiters[1],
- }, context.mode);
- }
- return res;
-});
-
-// A cases environment (in amsmath.sty) is almost equivalent to
-// \def\arraystretch{1.2}%
-// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right.
-defineEnvironment("cases", {
-}, function(context) {
- var res = {
- type: "array",
- arraystretch: 1.2,
- cols: [{
- type: "align",
- align: "l",
- pregap: 0,
- postgap: fontMetrics.metrics.quad,
- }, {
- type: "align",
- align: "l",
- pregap: 0,
- postgap: 0,
- }],
- };
- res = parseArray(context.parser, res);
- res = new ParseNode("leftright", {
- body: [res],
- left: "\\{",
- right: ".",
- }, context.mode);
- return res;
-});
-
-// An aligned environment is like the align* environment
-// except it operates within math mode.
-// Note that we assume \nomallineskiplimit to be zero,
-// so that \strut@ is the same as \strut.
-defineEnvironment("aligned", {
-}, function(context) {
- var res = {
- type: "array",
- cols: [],
- };
- res = parseArray(context.parser, res);
- var emptyGroup = new ParseNode("ordgroup", [], context.mode);
- var numCols = 0;
- res.value.body.forEach(function(row) {
- var i;
- for (i = 1; i < row.length; i += 2) {
- row[i].value.unshift(emptyGroup);
- }
- if (numCols < row.length) {
- numCols = row.length;
- }
- });
- for (var i = 0; i < numCols; ++i) {
- var align = "r";
- var pregap = 0;
- if (i % 2 === 1) {
- align = "l";
- } else if (i > 0) {
- pregap = 2; // one \qquad between columns
- }
- res.value.cols[i] = {
- type: "align",
- align: align,
- pregap: pregap,
- postgap: 0,
- };
- }
- return res;
-});
diff --git a/webapp/non_npm_dependencies/katex/src/fontMetrics.js b/webapp/non_npm_dependencies/katex/src/fontMetrics.js
deleted file mode 100644
index db9e44bfa..000000000
--- a/webapp/non_npm_dependencies/katex/src/fontMetrics.js
+++ /dev/null
@@ -1,147 +0,0 @@
-/* eslint no-unused-vars:0 */
-
-var Style = require("./Style");
-
-/**
- * This file contains metrics regarding fonts and individual symbols. The sigma
- * and xi variables, as well as the metricMap map contain data extracted from
- * TeX, TeX font metrics, and the TTF files. These data are then exposed via the
- * `metrics` variable and the getCharacterMetrics function.
- */
-
-// These font metrics are extracted from TeX by using
-// \font\a=cmmi10
-// \showthe\fontdimenX\a
-// where X is the corresponding variable number. These correspond to the font
-// parameters of the symbol fonts. In TeX, there are actually three sets of
-// dimensions, one for each of textstyle, scriptstyle, and scriptscriptstyle,
-// but we only use the textstyle ones, and scale certain dimensions accordingly.
-// See the TeXbook, page 441.
-var sigma1 = 0.025;
-var sigma2 = 0;
-var sigma3 = 0;
-var sigma4 = 0;
-var sigma5 = 0.431;
-var sigma6 = 1;
-var sigma7 = 0;
-var sigma8 = 0.677;
-var sigma9 = 0.394;
-var sigma10 = 0.444;
-var sigma11 = 0.686;
-var sigma12 = 0.345;
-var sigma13 = 0.413;
-var sigma14 = 0.363;
-var sigma15 = 0.289;
-var sigma16 = 0.150;
-var sigma17 = 0.247;
-var sigma18 = 0.386;
-var sigma19 = 0.050;
-var sigma20 = 2.390;
-var sigma21 = 1.01;
-var sigma21Script = 0.81;
-var sigma21ScriptScript = 0.71;
-var sigma22 = 0.250;
-
-// These font metrics are extracted from TeX by using
-// \font\a=cmex10
-// \showthe\fontdimenX\a
-// where X is the corresponding variable number. These correspond to the font
-// parameters of the extension fonts (family 3). See the TeXbook, page 441.
-var xi1 = 0;
-var xi2 = 0;
-var xi3 = 0;
-var xi4 = 0;
-var xi5 = 0.431;
-var xi6 = 1;
-var xi7 = 0;
-var xi8 = 0.04;
-var xi9 = 0.111;
-var xi10 = 0.166;
-var xi11 = 0.2;
-var xi12 = 0.6;
-var xi13 = 0.1;
-
-// This value determines how large a pt is, for metrics which are defined in
-// terms of pts.
-// This value is also used in katex.less; if you change it make sure the values
-// match.
-var ptPerEm = 10.0;
-
-// The space between adjacent `|` columns in an array definition. From
-// `\showthe\doublerulesep` in LaTeX.
-var doubleRuleSep = 2.0 / ptPerEm;
-
-/**
- * This is just a mapping from common names to real metrics
- */
-var metrics = {
- xHeight: sigma5,
- quad: sigma6,
- num1: sigma8,
- num2: sigma9,
- num3: sigma10,
- denom1: sigma11,
- denom2: sigma12,
- sup1: sigma13,
- sup2: sigma14,
- sup3: sigma15,
- sub1: sigma16,
- sub2: sigma17,
- supDrop: sigma18,
- subDrop: sigma19,
- axisHeight: sigma22,
- defaultRuleThickness: xi8,
- bigOpSpacing1: xi9,
- bigOpSpacing2: xi10,
- bigOpSpacing3: xi11,
- bigOpSpacing4: xi12,
- bigOpSpacing5: xi13,
- ptPerEm: ptPerEm,
- emPerEx: sigma5 / sigma6,
- doubleRuleSep: doubleRuleSep,
-
- // TODO(alpert): Missing parallel structure here. We should probably add
- // style-specific metrics for all of these.
- delim1: sigma20,
- getDelim2: function(style) {
- if (style.size === Style.TEXT.size) {
- return sigma21;
- } else if (style.size === Style.SCRIPT.size) {
- return sigma21Script;
- } else if (style.size === Style.SCRIPTSCRIPT.size) {
- return sigma21ScriptScript;
- }
- throw new Error("Unexpected style size: " + style.size);
- },
-};
-
-// This map contains a mapping from font name and character code to character
-// metrics, including height, depth, italic correction, and skew (kern from the
-// character to the corresponding \skewchar)
-// This map is generated via `make metrics`. It should not be changed manually.
-var metricMap = require("./fontMetricsData");
-
-/**
- * This function is a convenience function for looking up information in the
- * metricMap table. It takes a character as a string, and a style.
- *
- * Note: the `width` property may be undefined if fontMetricsData.js wasn't
- * built using `Make extended_metrics`.
- */
-var getCharacterMetrics = function(character, style) {
- var metrics = metricMap[style][character.charCodeAt(0)];
- if (metrics) {
- return {
- depth: metrics[0],
- height: metrics[1],
- italic: metrics[2],
- skew: metrics[3],
- width: metrics[4],
- };
- }
-};
-
-module.exports = {
- metrics: metrics,
- getCharacterMetrics: getCharacterMetrics,
-};
diff --git a/webapp/non_npm_dependencies/katex/src/fontMetricsData.js b/webapp/non_npm_dependencies/katex/src/fontMetricsData.js
deleted file mode 100644
index 957f55b87..000000000
--- a/webapp/non_npm_dependencies/katex/src/fontMetricsData.js
+++ /dev/null
@@ -1,1752 +0,0 @@
-module.exports = {
- "AMS-Regular": {
- "65": [0, 0.68889, 0, 0],
- "66": [0, 0.68889, 0, 0],
- "67": [0, 0.68889, 0, 0],
- "68": [0, 0.68889, 0, 0],
- "69": [0, 0.68889, 0, 0],
- "70": [0, 0.68889, 0, 0],
- "71": [0, 0.68889, 0, 0],
- "72": [0, 0.68889, 0, 0],
- "73": [0, 0.68889, 0, 0],
- "74": [0.16667, 0.68889, 0, 0],
- "75": [0, 0.68889, 0, 0],
- "76": [0, 0.68889, 0, 0],
- "77": [0, 0.68889, 0, 0],
- "78": [0, 0.68889, 0, 0],
- "79": [0.16667, 0.68889, 0, 0],
- "80": [0, 0.68889, 0, 0],
- "81": [0.16667, 0.68889, 0, 0],
- "82": [0, 0.68889, 0, 0],
- "83": [0, 0.68889, 0, 0],
- "84": [0, 0.68889, 0, 0],
- "85": [0, 0.68889, 0, 0],
- "86": [0, 0.68889, 0, 0],
- "87": [0, 0.68889, 0, 0],
- "88": [0, 0.68889, 0, 0],
- "89": [0, 0.68889, 0, 0],
- "90": [0, 0.68889, 0, 0],
- "107": [0, 0.68889, 0, 0],
- "165": [0, 0.675, 0.025, 0],
- "174": [0.15559, 0.69224, 0, 0],
- "240": [0, 0.68889, 0, 0],
- "295": [0, 0.68889, 0, 0],
- "710": [0, 0.825, 0, 0],
- "732": [0, 0.9, 0, 0],
- "770": [0, 0.825, 0, 0],
- "771": [0, 0.9, 0, 0],
- "989": [0.08167, 0.58167, 0, 0],
- "1008": [0, 0.43056, 0.04028, 0],
- "8245": [0, 0.54986, 0, 0],
- "8463": [0, 0.68889, 0, 0],
- "8487": [0, 0.68889, 0, 0],
- "8498": [0, 0.68889, 0, 0],
- "8502": [0, 0.68889, 0, 0],
- "8503": [0, 0.68889, 0, 0],
- "8504": [0, 0.68889, 0, 0],
- "8513": [0, 0.68889, 0, 0],
- "8592": [-0.03598, 0.46402, 0, 0],
- "8594": [-0.03598, 0.46402, 0, 0],
- "8602": [-0.13313, 0.36687, 0, 0],
- "8603": [-0.13313, 0.36687, 0, 0],
- "8606": [0.01354, 0.52239, 0, 0],
- "8608": [0.01354, 0.52239, 0, 0],
- "8610": [0.01354, 0.52239, 0, 0],
- "8611": [0.01354, 0.52239, 0, 0],
- "8619": [0, 0.54986, 0, 0],
- "8620": [0, 0.54986, 0, 0],
- "8621": [-0.13313, 0.37788, 0, 0],
- "8622": [-0.13313, 0.36687, 0, 0],
- "8624": [0, 0.69224, 0, 0],
- "8625": [0, 0.69224, 0, 0],
- "8630": [0, 0.43056, 0, 0],
- "8631": [0, 0.43056, 0, 0],
- "8634": [0.08198, 0.58198, 0, 0],
- "8635": [0.08198, 0.58198, 0, 0],
- "8638": [0.19444, 0.69224, 0, 0],
- "8639": [0.19444, 0.69224, 0, 0],
- "8642": [0.19444, 0.69224, 0, 0],
- "8643": [0.19444, 0.69224, 0, 0],
- "8644": [0.1808, 0.675, 0, 0],
- "8646": [0.1808, 0.675, 0, 0],
- "8647": [0.1808, 0.675, 0, 0],
- "8648": [0.19444, 0.69224, 0, 0],
- "8649": [0.1808, 0.675, 0, 0],
- "8650": [0.19444, 0.69224, 0, 0],
- "8651": [0.01354, 0.52239, 0, 0],
- "8652": [0.01354, 0.52239, 0, 0],
- "8653": [-0.13313, 0.36687, 0, 0],
- "8654": [-0.13313, 0.36687, 0, 0],
- "8655": [-0.13313, 0.36687, 0, 0],
- "8666": [0.13667, 0.63667, 0, 0],
- "8667": [0.13667, 0.63667, 0, 0],
- "8669": [-0.13313, 0.37788, 0, 0],
- "8672": [-0.064, 0.437, 0, 0],
- "8674": [-0.064, 0.437, 0, 0],
- "8705": [0, 0.825, 0, 0],
- "8708": [0, 0.68889, 0, 0],
- "8709": [0.08167, 0.58167, 0, 0],
- "8717": [0, 0.43056, 0, 0],
- "8722": [-0.03598, 0.46402, 0, 0],
- "8724": [0.08198, 0.69224, 0, 0],
- "8726": [0.08167, 0.58167, 0, 0],
- "8733": [0, 0.69224, 0, 0],
- "8736": [0, 0.69224, 0, 0],
- "8737": [0, 0.69224, 0, 0],
- "8738": [0.03517, 0.52239, 0, 0],
- "8739": [0.08167, 0.58167, 0, 0],
- "8740": [0.25142, 0.74111, 0, 0],
- "8741": [0.08167, 0.58167, 0, 0],
- "8742": [0.25142, 0.74111, 0, 0],
- "8756": [0, 0.69224, 0, 0],
- "8757": [0, 0.69224, 0, 0],
- "8764": [-0.13313, 0.36687, 0, 0],
- "8765": [-0.13313, 0.37788, 0, 0],
- "8769": [-0.13313, 0.36687, 0, 0],
- "8770": [-0.03625, 0.46375, 0, 0],
- "8774": [0.30274, 0.79383, 0, 0],
- "8776": [-0.01688, 0.48312, 0, 0],
- "8778": [0.08167, 0.58167, 0, 0],
- "8782": [0.06062, 0.54986, 0, 0],
- "8783": [0.06062, 0.54986, 0, 0],
- "8785": [0.08198, 0.58198, 0, 0],
- "8786": [0.08198, 0.58198, 0, 0],
- "8787": [0.08198, 0.58198, 0, 0],
- "8790": [0, 0.69224, 0, 0],
- "8791": [0.22958, 0.72958, 0, 0],
- "8796": [0.08198, 0.91667, 0, 0],
- "8806": [0.25583, 0.75583, 0, 0],
- "8807": [0.25583, 0.75583, 0, 0],
- "8808": [0.25142, 0.75726, 0, 0],
- "8809": [0.25142, 0.75726, 0, 0],
- "8812": [0.25583, 0.75583, 0, 0],
- "8814": [0.20576, 0.70576, 0, 0],
- "8815": [0.20576, 0.70576, 0, 0],
- "8816": [0.30274, 0.79383, 0, 0],
- "8817": [0.30274, 0.79383, 0, 0],
- "8818": [0.22958, 0.72958, 0, 0],
- "8819": [0.22958, 0.72958, 0, 0],
- "8822": [0.1808, 0.675, 0, 0],
- "8823": [0.1808, 0.675, 0, 0],
- "8828": [0.13667, 0.63667, 0, 0],
- "8829": [0.13667, 0.63667, 0, 0],
- "8830": [0.22958, 0.72958, 0, 0],
- "8831": [0.22958, 0.72958, 0, 0],
- "8832": [0.20576, 0.70576, 0, 0],
- "8833": [0.20576, 0.70576, 0, 0],
- "8840": [0.30274, 0.79383, 0, 0],
- "8841": [0.30274, 0.79383, 0, 0],
- "8842": [0.13597, 0.63597, 0, 0],
- "8843": [0.13597, 0.63597, 0, 0],
- "8847": [0.03517, 0.54986, 0, 0],
- "8848": [0.03517, 0.54986, 0, 0],
- "8858": [0.08198, 0.58198, 0, 0],
- "8859": [0.08198, 0.58198, 0, 0],
- "8861": [0.08198, 0.58198, 0, 0],
- "8862": [0, 0.675, 0, 0],
- "8863": [0, 0.675, 0, 0],
- "8864": [0, 0.675, 0, 0],
- "8865": [0, 0.675, 0, 0],
- "8872": [0, 0.69224, 0, 0],
- "8873": [0, 0.69224, 0, 0],
- "8874": [0, 0.69224, 0, 0],
- "8876": [0, 0.68889, 0, 0],
- "8877": [0, 0.68889, 0, 0],
- "8878": [0, 0.68889, 0, 0],
- "8879": [0, 0.68889, 0, 0],
- "8882": [0.03517, 0.54986, 0, 0],
- "8883": [0.03517, 0.54986, 0, 0],
- "8884": [0.13667, 0.63667, 0, 0],
- "8885": [0.13667, 0.63667, 0, 0],
- "8888": [0, 0.54986, 0, 0],
- "8890": [0.19444, 0.43056, 0, 0],
- "8891": [0.19444, 0.69224, 0, 0],
- "8892": [0.19444, 0.69224, 0, 0],
- "8901": [0, 0.54986, 0, 0],
- "8903": [0.08167, 0.58167, 0, 0],
- "8905": [0.08167, 0.58167, 0, 0],
- "8906": [0.08167, 0.58167, 0, 0],
- "8907": [0, 0.69224, 0, 0],
- "8908": [0, 0.69224, 0, 0],
- "8909": [-0.03598, 0.46402, 0, 0],
- "8910": [0, 0.54986, 0, 0],
- "8911": [0, 0.54986, 0, 0],
- "8912": [0.03517, 0.54986, 0, 0],
- "8913": [0.03517, 0.54986, 0, 0],
- "8914": [0, 0.54986, 0, 0],
- "8915": [0, 0.54986, 0, 0],
- "8916": [0, 0.69224, 0, 0],
- "8918": [0.0391, 0.5391, 0, 0],
- "8919": [0.0391, 0.5391, 0, 0],
- "8920": [0.03517, 0.54986, 0, 0],
- "8921": [0.03517, 0.54986, 0, 0],
- "8922": [0.38569, 0.88569, 0, 0],
- "8923": [0.38569, 0.88569, 0, 0],
- "8926": [0.13667, 0.63667, 0, 0],
- "8927": [0.13667, 0.63667, 0, 0],
- "8928": [0.30274, 0.79383, 0, 0],
- "8929": [0.30274, 0.79383, 0, 0],
- "8934": [0.23222, 0.74111, 0, 0],
- "8935": [0.23222, 0.74111, 0, 0],
- "8936": [0.23222, 0.74111, 0, 0],
- "8937": [0.23222, 0.74111, 0, 0],
- "8938": [0.20576, 0.70576, 0, 0],
- "8939": [0.20576, 0.70576, 0, 0],
- "8940": [0.30274, 0.79383, 0, 0],
- "8941": [0.30274, 0.79383, 0, 0],
- "8994": [0.19444, 0.69224, 0, 0],
- "8995": [0.19444, 0.69224, 0, 0],
- "9416": [0.15559, 0.69224, 0, 0],
- "9484": [0, 0.69224, 0, 0],
- "9488": [0, 0.69224, 0, 0],
- "9492": [0, 0.37788, 0, 0],
- "9496": [0, 0.37788, 0, 0],
- "9585": [0.19444, 0.68889, 0, 0],
- "9586": [0.19444, 0.74111, 0, 0],
- "9632": [0, 0.675, 0, 0],
- "9633": [0, 0.675, 0, 0],
- "9650": [0, 0.54986, 0, 0],
- "9651": [0, 0.54986, 0, 0],
- "9654": [0.03517, 0.54986, 0, 0],
- "9660": [0, 0.54986, 0, 0],
- "9661": [0, 0.54986, 0, 0],
- "9664": [0.03517, 0.54986, 0, 0],
- "9674": [0.11111, 0.69224, 0, 0],
- "9733": [0.19444, 0.69224, 0, 0],
- "10003": [0, 0.69224, 0, 0],
- "10016": [0, 0.69224, 0, 0],
- "10731": [0.11111, 0.69224, 0, 0],
- "10846": [0.19444, 0.75583, 0, 0],
- "10877": [0.13667, 0.63667, 0, 0],
- "10878": [0.13667, 0.63667, 0, 0],
- "10885": [0.25583, 0.75583, 0, 0],
- "10886": [0.25583, 0.75583, 0, 0],
- "10887": [0.13597, 0.63597, 0, 0],
- "10888": [0.13597, 0.63597, 0, 0],
- "10889": [0.26167, 0.75726, 0, 0],
- "10890": [0.26167, 0.75726, 0, 0],
- "10891": [0.48256, 0.98256, 0, 0],
- "10892": [0.48256, 0.98256, 0, 0],
- "10901": [0.13667, 0.63667, 0, 0],
- "10902": [0.13667, 0.63667, 0, 0],
- "10933": [0.25142, 0.75726, 0, 0],
- "10934": [0.25142, 0.75726, 0, 0],
- "10935": [0.26167, 0.75726, 0, 0],
- "10936": [0.26167, 0.75726, 0, 0],
- "10937": [0.26167, 0.75726, 0, 0],
- "10938": [0.26167, 0.75726, 0, 0],
- "10949": [0.25583, 0.75583, 0, 0],
- "10950": [0.25583, 0.75583, 0, 0],
- "10955": [0.28481, 0.79383, 0, 0],
- "10956": [0.28481, 0.79383, 0, 0],
- "57350": [0.08167, 0.58167, 0, 0],
- "57351": [0.08167, 0.58167, 0, 0],
- "57352": [0.08167, 0.58167, 0, 0],
- "57353": [0, 0.43056, 0.04028, 0],
- "57356": [0.25142, 0.75726, 0, 0],
- "57357": [0.25142, 0.75726, 0, 0],
- "57358": [0.41951, 0.91951, 0, 0],
- "57359": [0.30274, 0.79383, 0, 0],
- "57360": [0.30274, 0.79383, 0, 0],
- "57361": [0.41951, 0.91951, 0, 0],
- "57366": [0.25142, 0.75726, 0, 0],
- "57367": [0.25142, 0.75726, 0, 0],
- "57368": [0.25142, 0.75726, 0, 0],
- "57369": [0.25142, 0.75726, 0, 0],
- "57370": [0.13597, 0.63597, 0, 0],
- "57371": [0.13597, 0.63597, 0, 0],
- },
- "Caligraphic-Regular": {
- "48": [0, 0.43056, 0, 0],
- "49": [0, 0.43056, 0, 0],
- "50": [0, 0.43056, 0, 0],
- "51": [0.19444, 0.43056, 0, 0],
- "52": [0.19444, 0.43056, 0, 0],
- "53": [0.19444, 0.43056, 0, 0],
- "54": [0, 0.64444, 0, 0],
- "55": [0.19444, 0.43056, 0, 0],
- "56": [0, 0.64444, 0, 0],
- "57": [0.19444, 0.43056, 0, 0],
- "65": [0, 0.68333, 0, 0.19445],
- "66": [0, 0.68333, 0.03041, 0.13889],
- "67": [0, 0.68333, 0.05834, 0.13889],
- "68": [0, 0.68333, 0.02778, 0.08334],
- "69": [0, 0.68333, 0.08944, 0.11111],
- "70": [0, 0.68333, 0.09931, 0.11111],
- "71": [0.09722, 0.68333, 0.0593, 0.11111],
- "72": [0, 0.68333, 0.00965, 0.11111],
- "73": [0, 0.68333, 0.07382, 0],
- "74": [0.09722, 0.68333, 0.18472, 0.16667],
- "75": [0, 0.68333, 0.01445, 0.05556],
- "76": [0, 0.68333, 0, 0.13889],
- "77": [0, 0.68333, 0, 0.13889],
- "78": [0, 0.68333, 0.14736, 0.08334],
- "79": [0, 0.68333, 0.02778, 0.11111],
- "80": [0, 0.68333, 0.08222, 0.08334],
- "81": [0.09722, 0.68333, 0, 0.11111],
- "82": [0, 0.68333, 0, 0.08334],
- "83": [0, 0.68333, 0.075, 0.13889],
- "84": [0, 0.68333, 0.25417, 0],
- "85": [0, 0.68333, 0.09931, 0.08334],
- "86": [0, 0.68333, 0.08222, 0],
- "87": [0, 0.68333, 0.08222, 0.08334],
- "88": [0, 0.68333, 0.14643, 0.13889],
- "89": [0.09722, 0.68333, 0.08222, 0.08334],
- "90": [0, 0.68333, 0.07944, 0.13889],
- },
- "Fraktur-Regular": {
- "33": [0, 0.69141, 0, 0],
- "34": [0, 0.69141, 0, 0],
- "38": [0, 0.69141, 0, 0],
- "39": [0, 0.69141, 0, 0],
- "40": [0.24982, 0.74947, 0, 0],
- "41": [0.24982, 0.74947, 0, 0],
- "42": [0, 0.62119, 0, 0],
- "43": [0.08319, 0.58283, 0, 0],
- "44": [0, 0.10803, 0, 0],
- "45": [0.08319, 0.58283, 0, 0],
- "46": [0, 0.10803, 0, 0],
- "47": [0.24982, 0.74947, 0, 0],
- "48": [0, 0.47534, 0, 0],
- "49": [0, 0.47534, 0, 0],
- "50": [0, 0.47534, 0, 0],
- "51": [0.18906, 0.47534, 0, 0],
- "52": [0.18906, 0.47534, 0, 0],
- "53": [0.18906, 0.47534, 0, 0],
- "54": [0, 0.69141, 0, 0],
- "55": [0.18906, 0.47534, 0, 0],
- "56": [0, 0.69141, 0, 0],
- "57": [0.18906, 0.47534, 0, 0],
- "58": [0, 0.47534, 0, 0],
- "59": [0.12604, 0.47534, 0, 0],
- "61": [-0.13099, 0.36866, 0, 0],
- "63": [0, 0.69141, 0, 0],
- "65": [0, 0.69141, 0, 0],
- "66": [0, 0.69141, 0, 0],
- "67": [0, 0.69141, 0, 0],
- "68": [0, 0.69141, 0, 0],
- "69": [0, 0.69141, 0, 0],
- "70": [0.12604, 0.69141, 0, 0],
- "71": [0, 0.69141, 0, 0],
- "72": [0.06302, 0.69141, 0, 0],
- "73": [0, 0.69141, 0, 0],
- "74": [0.12604, 0.69141, 0, 0],
- "75": [0, 0.69141, 0, 0],
- "76": [0, 0.69141, 0, 0],
- "77": [0, 0.69141, 0, 0],
- "78": [0, 0.69141, 0, 0],
- "79": [0, 0.69141, 0, 0],
- "80": [0.18906, 0.69141, 0, 0],
- "81": [0.03781, 0.69141, 0, 0],
- "82": [0, 0.69141, 0, 0],
- "83": [0, 0.69141, 0, 0],
- "84": [0, 0.69141, 0, 0],
- "85": [0, 0.69141, 0, 0],
- "86": [0, 0.69141, 0, 0],
- "87": [0, 0.69141, 0, 0],
- "88": [0, 0.69141, 0, 0],
- "89": [0.18906, 0.69141, 0, 0],
- "90": [0.12604, 0.69141, 0, 0],
- "91": [0.24982, 0.74947, 0, 0],
- "93": [0.24982, 0.74947, 0, 0],
- "94": [0, 0.69141, 0, 0],
- "97": [0, 0.47534, 0, 0],
- "98": [0, 0.69141, 0, 0],
- "99": [0, 0.47534, 0, 0],
- "100": [0, 0.62119, 0, 0],
- "101": [0, 0.47534, 0, 0],
- "102": [0.18906, 0.69141, 0, 0],
- "103": [0.18906, 0.47534, 0, 0],
- "104": [0.18906, 0.69141, 0, 0],
- "105": [0, 0.69141, 0, 0],
- "106": [0, 0.69141, 0, 0],
- "107": [0, 0.69141, 0, 0],
- "108": [0, 0.69141, 0, 0],
- "109": [0, 0.47534, 0, 0],
- "110": [0, 0.47534, 0, 0],
- "111": [0, 0.47534, 0, 0],
- "112": [0.18906, 0.52396, 0, 0],
- "113": [0.18906, 0.47534, 0, 0],
- "114": [0, 0.47534, 0, 0],
- "115": [0, 0.47534, 0, 0],
- "116": [0, 0.62119, 0, 0],
- "117": [0, 0.47534, 0, 0],
- "118": [0, 0.52396, 0, 0],
- "119": [0, 0.52396, 0, 0],
- "120": [0.18906, 0.47534, 0, 0],
- "121": [0.18906, 0.47534, 0, 0],
- "122": [0.18906, 0.47534, 0, 0],
- "8216": [0, 0.69141, 0, 0],
- "8217": [0, 0.69141, 0, 0],
- "58112": [0, 0.62119, 0, 0],
- "58113": [0, 0.62119, 0, 0],
- "58114": [0.18906, 0.69141, 0, 0],
- "58115": [0.18906, 0.69141, 0, 0],
- "58116": [0.18906, 0.47534, 0, 0],
- "58117": [0, 0.69141, 0, 0],
- "58118": [0, 0.62119, 0, 0],
- "58119": [0, 0.47534, 0, 0],
- },
- "Main-Bold": {
- "33": [0, 0.69444, 0, 0],
- "34": [0, 0.69444, 0, 0],
- "35": [0.19444, 0.69444, 0, 0],
- "36": [0.05556, 0.75, 0, 0],
- "37": [0.05556, 0.75, 0, 0],
- "38": [0, 0.69444, 0, 0],
- "39": [0, 0.69444, 0, 0],
- "40": [0.25, 0.75, 0, 0],
- "41": [0.25, 0.75, 0, 0],
- "42": [0, 0.75, 0, 0],
- "43": [0.13333, 0.63333, 0, 0],
- "44": [0.19444, 0.15556, 0, 0],
- "45": [0, 0.44444, 0, 0],
- "46": [0, 0.15556, 0, 0],
- "47": [0.25, 0.75, 0, 0],
- "48": [0, 0.64444, 0, 0],
- "49": [0, 0.64444, 0, 0],
- "50": [0, 0.64444, 0, 0],
- "51": [0, 0.64444, 0, 0],
- "52": [0, 0.64444, 0, 0],
- "53": [0, 0.64444, 0, 0],
- "54": [0, 0.64444, 0, 0],
- "55": [0, 0.64444, 0, 0],
- "56": [0, 0.64444, 0, 0],
- "57": [0, 0.64444, 0, 0],
- "58": [0, 0.44444, 0, 0],
- "59": [0.19444, 0.44444, 0, 0],
- "60": [0.08556, 0.58556, 0, 0],
- "61": [-0.10889, 0.39111, 0, 0],
- "62": [0.08556, 0.58556, 0, 0],
- "63": [0, 0.69444, 0, 0],
- "64": [0, 0.69444, 0, 0],
- "65": [0, 0.68611, 0, 0],
- "66": [0, 0.68611, 0, 0],
- "67": [0, 0.68611, 0, 0],
- "68": [0, 0.68611, 0, 0],
- "69": [0, 0.68611, 0, 0],
- "70": [0, 0.68611, 0, 0],
- "71": [0, 0.68611, 0, 0],
- "72": [0, 0.68611, 0, 0],
- "73": [0, 0.68611, 0, 0],
- "74": [0, 0.68611, 0, 0],
- "75": [0, 0.68611, 0, 0],
- "76": [0, 0.68611, 0, 0],
- "77": [0, 0.68611, 0, 0],
- "78": [0, 0.68611, 0, 0],
- "79": [0, 0.68611, 0, 0],
- "80": [0, 0.68611, 0, 0],
- "81": [0.19444, 0.68611, 0, 0],
- "82": [0, 0.68611, 0, 0],
- "83": [0, 0.68611, 0, 0],
- "84": [0, 0.68611, 0, 0],
- "85": [0, 0.68611, 0, 0],
- "86": [0, 0.68611, 0.01597, 0],
- "87": [0, 0.68611, 0.01597, 0],
- "88": [0, 0.68611, 0, 0],
- "89": [0, 0.68611, 0.02875, 0],
- "90": [0, 0.68611, 0, 0],
- "91": [0.25, 0.75, 0, 0],
- "92": [0.25, 0.75, 0, 0],
- "93": [0.25, 0.75, 0, 0],
- "94": [0, 0.69444, 0, 0],
- "95": [0.31, 0.13444, 0.03194, 0],
- "96": [0, 0.69444, 0, 0],
- "97": [0, 0.44444, 0, 0],
- "98": [0, 0.69444, 0, 0],
- "99": [0, 0.44444, 0, 0],
- "100": [0, 0.69444, 0, 0],
- "101": [0, 0.44444, 0, 0],
- "102": [0, 0.69444, 0.10903, 0],
- "103": [0.19444, 0.44444, 0.01597, 0],
- "104": [0, 0.69444, 0, 0],
- "105": [0, 0.69444, 0, 0],
- "106": [0.19444, 0.69444, 0, 0],
- "107": [0, 0.69444, 0, 0],
- "108": [0, 0.69444, 0, 0],
- "109": [0, 0.44444, 0, 0],
- "110": [0, 0.44444, 0, 0],
- "111": [0, 0.44444, 0, 0],
- "112": [0.19444, 0.44444, 0, 0],
- "113": [0.19444, 0.44444, 0, 0],
- "114": [0, 0.44444, 0, 0],
- "115": [0, 0.44444, 0, 0],
- "116": [0, 0.63492, 0, 0],
- "117": [0, 0.44444, 0, 0],
- "118": [0, 0.44444, 0.01597, 0],
- "119": [0, 0.44444, 0.01597, 0],
- "120": [0, 0.44444, 0, 0],
- "121": [0.19444, 0.44444, 0.01597, 0],
- "122": [0, 0.44444, 0, 0],
- "123": [0.25, 0.75, 0, 0],
- "124": [0.25, 0.75, 0, 0],
- "125": [0.25, 0.75, 0, 0],
- "126": [0.35, 0.34444, 0, 0],
- "168": [0, 0.69444, 0, 0],
- "172": [0, 0.44444, 0, 0],
- "175": [0, 0.59611, 0, 0],
- "176": [0, 0.69444, 0, 0],
- "177": [0.13333, 0.63333, 0, 0],
- "180": [0, 0.69444, 0, 0],
- "215": [0.13333, 0.63333, 0, 0],
- "247": [0.13333, 0.63333, 0, 0],
- "305": [0, 0.44444, 0, 0],
- "567": [0.19444, 0.44444, 0, 0],
- "710": [0, 0.69444, 0, 0],
- "711": [0, 0.63194, 0, 0],
- "713": [0, 0.59611, 0, 0],
- "714": [0, 0.69444, 0, 0],
- "715": [0, 0.69444, 0, 0],
- "728": [0, 0.69444, 0, 0],
- "729": [0, 0.69444, 0, 0],
- "730": [0, 0.69444, 0, 0],
- "732": [0, 0.69444, 0, 0],
- "768": [0, 0.69444, 0, 0],
- "769": [0, 0.69444, 0, 0],
- "770": [0, 0.69444, 0, 0],
- "771": [0, 0.69444, 0, 0],
- "772": [0, 0.59611, 0, 0],
- "774": [0, 0.69444, 0, 0],
- "775": [0, 0.69444, 0, 0],
- "776": [0, 0.69444, 0, 0],
- "778": [0, 0.69444, 0, 0],
- "779": [0, 0.69444, 0, 0],
- "780": [0, 0.63194, 0, 0],
- "824": [0.19444, 0.69444, 0, 0],
- "915": [0, 0.68611, 0, 0],
- "916": [0, 0.68611, 0, 0],
- "920": [0, 0.68611, 0, 0],
- "923": [0, 0.68611, 0, 0],
- "926": [0, 0.68611, 0, 0],
- "928": [0, 0.68611, 0, 0],
- "931": [0, 0.68611, 0, 0],
- "933": [0, 0.68611, 0, 0],
- "934": [0, 0.68611, 0, 0],
- "936": [0, 0.68611, 0, 0],
- "937": [0, 0.68611, 0, 0],
- "8211": [0, 0.44444, 0.03194, 0],
- "8212": [0, 0.44444, 0.03194, 0],
- "8216": [0, 0.69444, 0, 0],
- "8217": [0, 0.69444, 0, 0],
- "8220": [0, 0.69444, 0, 0],
- "8221": [0, 0.69444, 0, 0],
- "8224": [0.19444, 0.69444, 0, 0],
- "8225": [0.19444, 0.69444, 0, 0],
- "8242": [0, 0.55556, 0, 0],
- "8407": [0, 0.72444, 0.15486, 0],
- "8463": [0, 0.69444, 0, 0],
- "8465": [0, 0.69444, 0, 0],
- "8467": [0, 0.69444, 0, 0],
- "8472": [0.19444, 0.44444, 0, 0],
- "8476": [0, 0.69444, 0, 0],
- "8501": [0, 0.69444, 0, 0],
- "8592": [-0.10889, 0.39111, 0, 0],
- "8593": [0.19444, 0.69444, 0, 0],
- "8594": [-0.10889, 0.39111, 0, 0],
- "8595": [0.19444, 0.69444, 0, 0],
- "8596": [-0.10889, 0.39111, 0, 0],
- "8597": [0.25, 0.75, 0, 0],
- "8598": [0.19444, 0.69444, 0, 0],
- "8599": [0.19444, 0.69444, 0, 0],
- "8600": [0.19444, 0.69444, 0, 0],
- "8601": [0.19444, 0.69444, 0, 0],
- "8636": [-0.10889, 0.39111, 0, 0],
- "8637": [-0.10889, 0.39111, 0, 0],
- "8640": [-0.10889, 0.39111, 0, 0],
- "8641": [-0.10889, 0.39111, 0, 0],
- "8656": [-0.10889, 0.39111, 0, 0],
- "8657": [0.19444, 0.69444, 0, 0],
- "8658": [-0.10889, 0.39111, 0, 0],
- "8659": [0.19444, 0.69444, 0, 0],
- "8660": [-0.10889, 0.39111, 0, 0],
- "8661": [0.25, 0.75, 0, 0],
- "8704": [0, 0.69444, 0, 0],
- "8706": [0, 0.69444, 0.06389, 0],
- "8707": [0, 0.69444, 0, 0],
- "8709": [0.05556, 0.75, 0, 0],
- "8711": [0, 0.68611, 0, 0],
- "8712": [0.08556, 0.58556, 0, 0],
- "8715": [0.08556, 0.58556, 0, 0],
- "8722": [0.13333, 0.63333, 0, 0],
- "8723": [0.13333, 0.63333, 0, 0],
- "8725": [0.25, 0.75, 0, 0],
- "8726": [0.25, 0.75, 0, 0],
- "8727": [-0.02778, 0.47222, 0, 0],
- "8728": [-0.02639, 0.47361, 0, 0],
- "8729": [-0.02639, 0.47361, 0, 0],
- "8730": [0.18, 0.82, 0, 0],
- "8733": [0, 0.44444, 0, 0],
- "8734": [0, 0.44444, 0, 0],
- "8736": [0, 0.69224, 0, 0],
- "8739": [0.25, 0.75, 0, 0],
- "8741": [0.25, 0.75, 0, 0],
- "8743": [0, 0.55556, 0, 0],
- "8744": [0, 0.55556, 0, 0],
- "8745": [0, 0.55556, 0, 0],
- "8746": [0, 0.55556, 0, 0],
- "8747": [0.19444, 0.69444, 0.12778, 0],
- "8764": [-0.10889, 0.39111, 0, 0],
- "8768": [0.19444, 0.69444, 0, 0],
- "8771": [0.00222, 0.50222, 0, 0],
- "8776": [0.02444, 0.52444, 0, 0],
- "8781": [0.00222, 0.50222, 0, 0],
- "8801": [0.00222, 0.50222, 0, 0],
- "8804": [0.19667, 0.69667, 0, 0],
- "8805": [0.19667, 0.69667, 0, 0],
- "8810": [0.08556, 0.58556, 0, 0],
- "8811": [0.08556, 0.58556, 0, 0],
- "8826": [0.08556, 0.58556, 0, 0],
- "8827": [0.08556, 0.58556, 0, 0],
- "8834": [0.08556, 0.58556, 0, 0],
- "8835": [0.08556, 0.58556, 0, 0],
- "8838": [0.19667, 0.69667, 0, 0],
- "8839": [0.19667, 0.69667, 0, 0],
- "8846": [0, 0.55556, 0, 0],
- "8849": [0.19667, 0.69667, 0, 0],
- "8850": [0.19667, 0.69667, 0, 0],
- "8851": [0, 0.55556, 0, 0],
- "8852": [0, 0.55556, 0, 0],
- "8853": [0.13333, 0.63333, 0, 0],
- "8854": [0.13333, 0.63333, 0, 0],
- "8855": [0.13333, 0.63333, 0, 0],
- "8856": [0.13333, 0.63333, 0, 0],
- "8857": [0.13333, 0.63333, 0, 0],
- "8866": [0, 0.69444, 0, 0],
- "8867": [0, 0.69444, 0, 0],
- "8868": [0, 0.69444, 0, 0],
- "8869": [0, 0.69444, 0, 0],
- "8900": [-0.02639, 0.47361, 0, 0],
- "8901": [-0.02639, 0.47361, 0, 0],
- "8902": [-0.02778, 0.47222, 0, 0],
- "8968": [0.25, 0.75, 0, 0],
- "8969": [0.25, 0.75, 0, 0],
- "8970": [0.25, 0.75, 0, 0],
- "8971": [0.25, 0.75, 0, 0],
- "8994": [-0.13889, 0.36111, 0, 0],
- "8995": [-0.13889, 0.36111, 0, 0],
- "9651": [0.19444, 0.69444, 0, 0],
- "9657": [-0.02778, 0.47222, 0, 0],
- "9661": [0.19444, 0.69444, 0, 0],
- "9667": [-0.02778, 0.47222, 0, 0],
- "9711": [0.19444, 0.69444, 0, 0],
- "9824": [0.12963, 0.69444, 0, 0],
- "9825": [0.12963, 0.69444, 0, 0],
- "9826": [0.12963, 0.69444, 0, 0],
- "9827": [0.12963, 0.69444, 0, 0],
- "9837": [0, 0.75, 0, 0],
- "9838": [0.19444, 0.69444, 0, 0],
- "9839": [0.19444, 0.69444, 0, 0],
- "10216": [0.25, 0.75, 0, 0],
- "10217": [0.25, 0.75, 0, 0],
- "10815": [0, 0.68611, 0, 0],
- "10927": [0.19667, 0.69667, 0, 0],
- "10928": [0.19667, 0.69667, 0, 0],
- },
- "Main-Italic": {
- "33": [0, 0.69444, 0.12417, 0],
- "34": [0, 0.69444, 0.06961, 0],
- "35": [0.19444, 0.69444, 0.06616, 0],
- "37": [0.05556, 0.75, 0.13639, 0],
- "38": [0, 0.69444, 0.09694, 0],
- "39": [0, 0.69444, 0.12417, 0],
- "40": [0.25, 0.75, 0.16194, 0],
- "41": [0.25, 0.75, 0.03694, 0],
- "42": [0, 0.75, 0.14917, 0],
- "43": [0.05667, 0.56167, 0.03694, 0],
- "44": [0.19444, 0.10556, 0, 0],
- "45": [0, 0.43056, 0.02826, 0],
- "46": [0, 0.10556, 0, 0],
- "47": [0.25, 0.75, 0.16194, 0],
- "48": [0, 0.64444, 0.13556, 0],
- "49": [0, 0.64444, 0.13556, 0],
- "50": [0, 0.64444, 0.13556, 0],
- "51": [0, 0.64444, 0.13556, 0],
- "52": [0.19444, 0.64444, 0.13556, 0],
- "53": [0, 0.64444, 0.13556, 0],
- "54": [0, 0.64444, 0.13556, 0],
- "55": [0.19444, 0.64444, 0.13556, 0],
- "56": [0, 0.64444, 0.13556, 0],
- "57": [0, 0.64444, 0.13556, 0],
- "58": [0, 0.43056, 0.0582, 0],
- "59": [0.19444, 0.43056, 0.0582, 0],
- "61": [-0.13313, 0.36687, 0.06616, 0],
- "63": [0, 0.69444, 0.1225, 0],
- "64": [0, 0.69444, 0.09597, 0],
- "65": [0, 0.68333, 0, 0],
- "66": [0, 0.68333, 0.10257, 0],
- "67": [0, 0.68333, 0.14528, 0],
- "68": [0, 0.68333, 0.09403, 0],
- "69": [0, 0.68333, 0.12028, 0],
- "70": [0, 0.68333, 0.13305, 0],
- "71": [0, 0.68333, 0.08722, 0],
- "72": [0, 0.68333, 0.16389, 0],
- "73": [0, 0.68333, 0.15806, 0],
- "74": [0, 0.68333, 0.14028, 0],
- "75": [0, 0.68333, 0.14528, 0],
- "76": [0, 0.68333, 0, 0],
- "77": [0, 0.68333, 0.16389, 0],
- "78": [0, 0.68333, 0.16389, 0],
- "79": [0, 0.68333, 0.09403, 0],
- "80": [0, 0.68333, 0.10257, 0],
- "81": [0.19444, 0.68333, 0.09403, 0],
- "82": [0, 0.68333, 0.03868, 0],
- "83": [0, 0.68333, 0.11972, 0],
- "84": [0, 0.68333, 0.13305, 0],
- "85": [0, 0.68333, 0.16389, 0],
- "86": [0, 0.68333, 0.18361, 0],
- "87": [0, 0.68333, 0.18361, 0],
- "88": [0, 0.68333, 0.15806, 0],
- "89": [0, 0.68333, 0.19383, 0],
- "90": [0, 0.68333, 0.14528, 0],
- "91": [0.25, 0.75, 0.1875, 0],
- "93": [0.25, 0.75, 0.10528, 0],
- "94": [0, 0.69444, 0.06646, 0],
- "95": [0.31, 0.12056, 0.09208, 0],
- "97": [0, 0.43056, 0.07671, 0],
- "98": [0, 0.69444, 0.06312, 0],
- "99": [0, 0.43056, 0.05653, 0],
- "100": [0, 0.69444, 0.10333, 0],
- "101": [0, 0.43056, 0.07514, 0],
- "102": [0.19444, 0.69444, 0.21194, 0],
- "103": [0.19444, 0.43056, 0.08847, 0],
- "104": [0, 0.69444, 0.07671, 0],
- "105": [0, 0.65536, 0.1019, 0],
- "106": [0.19444, 0.65536, 0.14467, 0],
- "107": [0, 0.69444, 0.10764, 0],
- "108": [0, 0.69444, 0.10333, 0],
- "109": [0, 0.43056, 0.07671, 0],
- "110": [0, 0.43056, 0.07671, 0],
- "111": [0, 0.43056, 0.06312, 0],
- "112": [0.19444, 0.43056, 0.06312, 0],
- "113": [0.19444, 0.43056, 0.08847, 0],
- "114": [0, 0.43056, 0.10764, 0],
- "115": [0, 0.43056, 0.08208, 0],
- "116": [0, 0.61508, 0.09486, 0],
- "117": [0, 0.43056, 0.07671, 0],
- "118": [0, 0.43056, 0.10764, 0],
- "119": [0, 0.43056, 0.10764, 0],
- "120": [0, 0.43056, 0.12042, 0],
- "121": [0.19444, 0.43056, 0.08847, 0],
- "122": [0, 0.43056, 0.12292, 0],
- "126": [0.35, 0.31786, 0.11585, 0],
- "163": [0, 0.69444, 0, 0],
- "305": [0, 0.43056, 0, 0.02778],
- "567": [0.19444, 0.43056, 0, 0.08334],
- "768": [0, 0.69444, 0, 0],
- "769": [0, 0.69444, 0.09694, 0],
- "770": [0, 0.69444, 0.06646, 0],
- "771": [0, 0.66786, 0.11585, 0],
- "772": [0, 0.56167, 0.10333, 0],
- "774": [0, 0.69444, 0.10806, 0],
- "775": [0, 0.66786, 0.11752, 0],
- "776": [0, 0.66786, 0.10474, 0],
- "778": [0, 0.69444, 0, 0],
- "779": [0, 0.69444, 0.1225, 0],
- "780": [0, 0.62847, 0.08295, 0],
- "915": [0, 0.68333, 0.13305, 0],
- "916": [0, 0.68333, 0, 0],
- "920": [0, 0.68333, 0.09403, 0],
- "923": [0, 0.68333, 0, 0],
- "926": [0, 0.68333, 0.15294, 0],
- "928": [0, 0.68333, 0.16389, 0],
- "931": [0, 0.68333, 0.12028, 0],
- "933": [0, 0.68333, 0.11111, 0],
- "934": [0, 0.68333, 0.05986, 0],
- "936": [0, 0.68333, 0.11111, 0],
- "937": [0, 0.68333, 0.10257, 0],
- "8211": [0, 0.43056, 0.09208, 0],
- "8212": [0, 0.43056, 0.09208, 0],
- "8216": [0, 0.69444, 0.12417, 0],
- "8217": [0, 0.69444, 0.12417, 0],
- "8220": [0, 0.69444, 0.1685, 0],
- "8221": [0, 0.69444, 0.06961, 0],
- "8463": [0, 0.68889, 0, 0],
- },
- "Main-Regular": {
- "32": [0, 0, 0, 0],
- "33": [0, 0.69444, 0, 0],
- "34": [0, 0.69444, 0, 0],
- "35": [0.19444, 0.69444, 0, 0],
- "36": [0.05556, 0.75, 0, 0],
- "37": [0.05556, 0.75, 0, 0],
- "38": [0, 0.69444, 0, 0],
- "39": [0, 0.69444, 0, 0],
- "40": [0.25, 0.75, 0, 0],
- "41": [0.25, 0.75, 0, 0],
- "42": [0, 0.75, 0, 0],
- "43": [0.08333, 0.58333, 0, 0],
- "44": [0.19444, 0.10556, 0, 0],
- "45": [0, 0.43056, 0, 0],
- "46": [0, 0.10556, 0, 0],
- "47": [0.25, 0.75, 0, 0],
- "48": [0, 0.64444, 0, 0],
- "49": [0, 0.64444, 0, 0],
- "50": [0, 0.64444, 0, 0],
- "51": [0, 0.64444, 0, 0],
- "52": [0, 0.64444, 0, 0],
- "53": [0, 0.64444, 0, 0],
- "54": [0, 0.64444, 0, 0],
- "55": [0, 0.64444, 0, 0],
- "56": [0, 0.64444, 0, 0],
- "57": [0, 0.64444, 0, 0],
- "58": [0, 0.43056, 0, 0],
- "59": [0.19444, 0.43056, 0, 0],
- "60": [0.0391, 0.5391, 0, 0],
- "61": [-0.13313, 0.36687, 0, 0],
- "62": [0.0391, 0.5391, 0, 0],
- "63": [0, 0.69444, 0, 0],
- "64": [0, 0.69444, 0, 0],
- "65": [0, 0.68333, 0, 0],
- "66": [0, 0.68333, 0, 0],
- "67": [0, 0.68333, 0, 0],
- "68": [0, 0.68333, 0, 0],
- "69": [0, 0.68333, 0, 0],
- "70": [0, 0.68333, 0, 0],
- "71": [0, 0.68333, 0, 0],
- "72": [0, 0.68333, 0, 0],
- "73": [0, 0.68333, 0, 0],
- "74": [0, 0.68333, 0, 0],
- "75": [0, 0.68333, 0, 0],
- "76": [0, 0.68333, 0, 0],
- "77": [0, 0.68333, 0, 0],
- "78": [0, 0.68333, 0, 0],
- "79": [0, 0.68333, 0, 0],
- "80": [0, 0.68333, 0, 0],
- "81": [0.19444, 0.68333, 0, 0],
- "82": [0, 0.68333, 0, 0],
- "83": [0, 0.68333, 0, 0],
- "84": [0, 0.68333, 0, 0],
- "85": [0, 0.68333, 0, 0],
- "86": [0, 0.68333, 0.01389, 0],
- "87": [0, 0.68333, 0.01389, 0],
- "88": [0, 0.68333, 0, 0],
- "89": [0, 0.68333, 0.025, 0],
- "90": [0, 0.68333, 0, 0],
- "91": [0.25, 0.75, 0, 0],
- "92": [0.25, 0.75, 0, 0],
- "93": [0.25, 0.75, 0, 0],
- "94": [0, 0.69444, 0, 0],
- "95": [0.31, 0.12056, 0.02778, 0],
- "96": [0, 0.69444, 0, 0],
- "97": [0, 0.43056, 0, 0],
- "98": [0, 0.69444, 0, 0],
- "99": [0, 0.43056, 0, 0],
- "100": [0, 0.69444, 0, 0],
- "101": [0, 0.43056, 0, 0],
- "102": [0, 0.69444, 0.07778, 0],
- "103": [0.19444, 0.43056, 0.01389, 0],
- "104": [0, 0.69444, 0, 0],
- "105": [0, 0.66786, 0, 0],
- "106": [0.19444, 0.66786, 0, 0],
- "107": [0, 0.69444, 0, 0],
- "108": [0, 0.69444, 0, 0],
- "109": [0, 0.43056, 0, 0],
- "110": [0, 0.43056, 0, 0],
- "111": [0, 0.43056, 0, 0],
- "112": [0.19444, 0.43056, 0, 0],
- "113": [0.19444, 0.43056, 0, 0],
- "114": [0, 0.43056, 0, 0],
- "115": [0, 0.43056, 0, 0],
- "116": [0, 0.61508, 0, 0],
- "117": [0, 0.43056, 0, 0],
- "118": [0, 0.43056, 0.01389, 0],
- "119": [0, 0.43056, 0.01389, 0],
- "120": [0, 0.43056, 0, 0],
- "121": [0.19444, 0.43056, 0.01389, 0],
- "122": [0, 0.43056, 0, 0],
- "123": [0.25, 0.75, 0, 0],
- "124": [0.25, 0.75, 0, 0],
- "125": [0.25, 0.75, 0, 0],
- "126": [0.35, 0.31786, 0, 0],
- "160": [0, 0, 0, 0],
- "168": [0, 0.66786, 0, 0],
- "172": [0, 0.43056, 0, 0],
- "175": [0, 0.56778, 0, 0],
- "176": [0, 0.69444, 0, 0],
- "177": [0.08333, 0.58333, 0, 0],
- "180": [0, 0.69444, 0, 0],
- "215": [0.08333, 0.58333, 0, 0],
- "247": [0.08333, 0.58333, 0, 0],
- "305": [0, 0.43056, 0, 0],
- "567": [0.19444, 0.43056, 0, 0],
- "710": [0, 0.69444, 0, 0],
- "711": [0, 0.62847, 0, 0],
- "713": [0, 0.56778, 0, 0],
- "714": [0, 0.69444, 0, 0],
- "715": [0, 0.69444, 0, 0],
- "728": [0, 0.69444, 0, 0],
- "729": [0, 0.66786, 0, 0],
- "730": [0, 0.69444, 0, 0],
- "732": [0, 0.66786, 0, 0],
- "768": [0, 0.69444, 0, 0],
- "769": [0, 0.69444, 0, 0],
- "770": [0, 0.69444, 0, 0],
- "771": [0, 0.66786, 0, 0],
- "772": [0, 0.56778, 0, 0],
- "774": [0, 0.69444, 0, 0],
- "775": [0, 0.66786, 0, 0],
- "776": [0, 0.66786, 0, 0],
- "778": [0, 0.69444, 0, 0],
- "779": [0, 0.69444, 0, 0],
- "780": [0, 0.62847, 0, 0],
- "824": [0.19444, 0.69444, 0, 0],
- "915": [0, 0.68333, 0, 0],
- "916": [0, 0.68333, 0, 0],
- "920": [0, 0.68333, 0, 0],
- "923": [0, 0.68333, 0, 0],
- "926": [0, 0.68333, 0, 0],
- "928": [0, 0.68333, 0, 0],
- "931": [0, 0.68333, 0, 0],
- "933": [0, 0.68333, 0, 0],
- "934": [0, 0.68333, 0, 0],
- "936": [0, 0.68333, 0, 0],
- "937": [0, 0.68333, 0, 0],
- "8211": [0, 0.43056, 0.02778, 0],
- "8212": [0, 0.43056, 0.02778, 0],
- "8216": [0, 0.69444, 0, 0],
- "8217": [0, 0.69444, 0, 0],
- "8220": [0, 0.69444, 0, 0],
- "8221": [0, 0.69444, 0, 0],
- "8224": [0.19444, 0.69444, 0, 0],
- "8225": [0.19444, 0.69444, 0, 0],
- "8230": [0, 0.12, 0, 0],
- "8242": [0, 0.55556, 0, 0],
- "8407": [0, 0.71444, 0.15382, 0],
- "8463": [0, 0.68889, 0, 0],
- "8465": [0, 0.69444, 0, 0],
- "8467": [0, 0.69444, 0, 0.11111],
- "8472": [0.19444, 0.43056, 0, 0.11111],
- "8476": [0, 0.69444, 0, 0],
- "8501": [0, 0.69444, 0, 0],
- "8592": [-0.13313, 0.36687, 0, 0],
- "8593": [0.19444, 0.69444, 0, 0],
- "8594": [-0.13313, 0.36687, 0, 0],
- "8595": [0.19444, 0.69444, 0, 0],
- "8596": [-0.13313, 0.36687, 0, 0],
- "8597": [0.25, 0.75, 0, 0],
- "8598": [0.19444, 0.69444, 0, 0],
- "8599": [0.19444, 0.69444, 0, 0],
- "8600": [0.19444, 0.69444, 0, 0],
- "8601": [0.19444, 0.69444, 0, 0],
- "8614": [0.011, 0.511, 0, 0],
- "8617": [0.011, 0.511, 0, 0],
- "8618": [0.011, 0.511, 0, 0],
- "8636": [-0.13313, 0.36687, 0, 0],
- "8637": [-0.13313, 0.36687, 0, 0],
- "8640": [-0.13313, 0.36687, 0, 0],
- "8641": [-0.13313, 0.36687, 0, 0],
- "8652": [0.011, 0.671, 0, 0],
- "8656": [-0.13313, 0.36687, 0, 0],
- "8657": [0.19444, 0.69444, 0, 0],
- "8658": [-0.13313, 0.36687, 0, 0],
- "8659": [0.19444, 0.69444, 0, 0],
- "8660": [-0.13313, 0.36687, 0, 0],
- "8661": [0.25, 0.75, 0, 0],
- "8704": [0, 0.69444, 0, 0],
- "8706": [0, 0.69444, 0.05556, 0.08334],
- "8707": [0, 0.69444, 0, 0],
- "8709": [0.05556, 0.75, 0, 0],
- "8711": [0, 0.68333, 0, 0],
- "8712": [0.0391, 0.5391, 0, 0],
- "8715": [0.0391, 0.5391, 0, 0],
- "8722": [0.08333, 0.58333, 0, 0],
- "8723": [0.08333, 0.58333, 0, 0],
- "8725": [0.25, 0.75, 0, 0],
- "8726": [0.25, 0.75, 0, 0],
- "8727": [-0.03472, 0.46528, 0, 0],
- "8728": [-0.05555, 0.44445, 0, 0],
- "8729": [-0.05555, 0.44445, 0, 0],
- "8730": [0.2, 0.8, 0, 0],
- "8733": [0, 0.43056, 0, 0],
- "8734": [0, 0.43056, 0, 0],
- "8736": [0, 0.69224, 0, 0],
- "8739": [0.25, 0.75, 0, 0],
- "8741": [0.25, 0.75, 0, 0],
- "8743": [0, 0.55556, 0, 0],
- "8744": [0, 0.55556, 0, 0],
- "8745": [0, 0.55556, 0, 0],
- "8746": [0, 0.55556, 0, 0],
- "8747": [0.19444, 0.69444, 0.11111, 0],
- "8764": [-0.13313, 0.36687, 0, 0],
- "8768": [0.19444, 0.69444, 0, 0],
- "8771": [-0.03625, 0.46375, 0, 0],
- "8773": [-0.022, 0.589, 0, 0],
- "8776": [-0.01688, 0.48312, 0, 0],
- "8781": [-0.03625, 0.46375, 0, 0],
- "8784": [-0.133, 0.67, 0, 0],
- "8800": [0.215, 0.716, 0, 0],
- "8801": [-0.03625, 0.46375, 0, 0],
- "8804": [0.13597, 0.63597, 0, 0],
- "8805": [0.13597, 0.63597, 0, 0],
- "8810": [0.0391, 0.5391, 0, 0],
- "8811": [0.0391, 0.5391, 0, 0],
- "8826": [0.0391, 0.5391, 0, 0],
- "8827": [0.0391, 0.5391, 0, 0],
- "8834": [0.0391, 0.5391, 0, 0],
- "8835": [0.0391, 0.5391, 0, 0],
- "8838": [0.13597, 0.63597, 0, 0],
- "8839": [0.13597, 0.63597, 0, 0],
- "8846": [0, 0.55556, 0, 0],
- "8849": [0.13597, 0.63597, 0, 0],
- "8850": [0.13597, 0.63597, 0, 0],
- "8851": [0, 0.55556, 0, 0],
- "8852": [0, 0.55556, 0, 0],
- "8853": [0.08333, 0.58333, 0, 0],
- "8854": [0.08333, 0.58333, 0, 0],
- "8855": [0.08333, 0.58333, 0, 0],
- "8856": [0.08333, 0.58333, 0, 0],
- "8857": [0.08333, 0.58333, 0, 0],
- "8866": [0, 0.69444, 0, 0],
- "8867": [0, 0.69444, 0, 0],
- "8868": [0, 0.69444, 0, 0],
- "8869": [0, 0.69444, 0, 0],
- "8872": [0.249, 0.75, 0, 0],
- "8900": [-0.05555, 0.44445, 0, 0],
- "8901": [-0.05555, 0.44445, 0, 0],
- "8902": [-0.03472, 0.46528, 0, 0],
- "8904": [0.005, 0.505, 0, 0],
- "8942": [0.03, 0.9, 0, 0],
- "8943": [-0.19, 0.31, 0, 0],
- "8945": [-0.1, 0.82, 0, 0],
- "8968": [0.25, 0.75, 0, 0],
- "8969": [0.25, 0.75, 0, 0],
- "8970": [0.25, 0.75, 0, 0],
- "8971": [0.25, 0.75, 0, 0],
- "8994": [-0.14236, 0.35764, 0, 0],
- "8995": [-0.14236, 0.35764, 0, 0],
- "9136": [0.244, 0.744, 0, 0],
- "9137": [0.244, 0.744, 0, 0],
- "9651": [0.19444, 0.69444, 0, 0],
- "9657": [-0.03472, 0.46528, 0, 0],
- "9661": [0.19444, 0.69444, 0, 0],
- "9667": [-0.03472, 0.46528, 0, 0],
- "9711": [0.19444, 0.69444, 0, 0],
- "9824": [0.12963, 0.69444, 0, 0],
- "9825": [0.12963, 0.69444, 0, 0],
- "9826": [0.12963, 0.69444, 0, 0],
- "9827": [0.12963, 0.69444, 0, 0],
- "9837": [0, 0.75, 0, 0],
- "9838": [0.19444, 0.69444, 0, 0],
- "9839": [0.19444, 0.69444, 0, 0],
- "10216": [0.25, 0.75, 0, 0],
- "10217": [0.25, 0.75, 0, 0],
- "10222": [0.244, 0.744, 0, 0],
- "10223": [0.244, 0.744, 0, 0],
- "10229": [0.011, 0.511, 0, 0],
- "10230": [0.011, 0.511, 0, 0],
- "10231": [0.011, 0.511, 0, 0],
- "10232": [0.024, 0.525, 0, 0],
- "10233": [0.024, 0.525, 0, 0],
- "10234": [0.024, 0.525, 0, 0],
- "10236": [0.011, 0.511, 0, 0],
- "10815": [0, 0.68333, 0, 0],
- "10927": [0.13597, 0.63597, 0, 0],
- "10928": [0.13597, 0.63597, 0, 0],
- },
- "Math-BoldItalic": {
- "47": [0.19444, 0.69444, 0, 0],
- "65": [0, 0.68611, 0, 0],
- "66": [0, 0.68611, 0.04835, 0],
- "67": [0, 0.68611, 0.06979, 0],
- "68": [0, 0.68611, 0.03194, 0],
- "69": [0, 0.68611, 0.05451, 0],
- "70": [0, 0.68611, 0.15972, 0],
- "71": [0, 0.68611, 0, 0],
- "72": [0, 0.68611, 0.08229, 0],
- "73": [0, 0.68611, 0.07778, 0],
- "74": [0, 0.68611, 0.10069, 0],
- "75": [0, 0.68611, 0.06979, 0],
- "76": [0, 0.68611, 0, 0],
- "77": [0, 0.68611, 0.11424, 0],
- "78": [0, 0.68611, 0.11424, 0],
- "79": [0, 0.68611, 0.03194, 0],
- "80": [0, 0.68611, 0.15972, 0],
- "81": [0.19444, 0.68611, 0, 0],
- "82": [0, 0.68611, 0.00421, 0],
- "83": [0, 0.68611, 0.05382, 0],
- "84": [0, 0.68611, 0.15972, 0],
- "85": [0, 0.68611, 0.11424, 0],
- "86": [0, 0.68611, 0.25555, 0],
- "87": [0, 0.68611, 0.15972, 0],
- "88": [0, 0.68611, 0.07778, 0],
- "89": [0, 0.68611, 0.25555, 0],
- "90": [0, 0.68611, 0.06979, 0],
- "97": [0, 0.44444, 0, 0],
- "98": [0, 0.69444, 0, 0],
- "99": [0, 0.44444, 0, 0],
- "100": [0, 0.69444, 0, 0],
- "101": [0, 0.44444, 0, 0],
- "102": [0.19444, 0.69444, 0.11042, 0],
- "103": [0.19444, 0.44444, 0.03704, 0],
- "104": [0, 0.69444, 0, 0],
- "105": [0, 0.69326, 0, 0],
- "106": [0.19444, 0.69326, 0.0622, 0],
- "107": [0, 0.69444, 0.01852, 0],
- "108": [0, 0.69444, 0.0088, 0],
- "109": [0, 0.44444, 0, 0],
- "110": [0, 0.44444, 0, 0],
- "111": [0, 0.44444, 0, 0],
- "112": [0.19444, 0.44444, 0, 0],
- "113": [0.19444, 0.44444, 0.03704, 0],
- "114": [0, 0.44444, 0.03194, 0],
- "115": [0, 0.44444, 0, 0],
- "116": [0, 0.63492, 0, 0],
- "117": [0, 0.44444, 0, 0],
- "118": [0, 0.44444, 0.03704, 0],
- "119": [0, 0.44444, 0.02778, 0],
- "120": [0, 0.44444, 0, 0],
- "121": [0.19444, 0.44444, 0.03704, 0],
- "122": [0, 0.44444, 0.04213, 0],
- "915": [0, 0.68611, 0.15972, 0],
- "916": [0, 0.68611, 0, 0],
- "920": [0, 0.68611, 0.03194, 0],
- "923": [0, 0.68611, 0, 0],
- "926": [0, 0.68611, 0.07458, 0],
- "928": [0, 0.68611, 0.08229, 0],
- "931": [0, 0.68611, 0.05451, 0],
- "933": [0, 0.68611, 0.15972, 0],
- "934": [0, 0.68611, 0, 0],
- "936": [0, 0.68611, 0.11653, 0],
- "937": [0, 0.68611, 0.04835, 0],
- "945": [0, 0.44444, 0, 0],
- "946": [0.19444, 0.69444, 0.03403, 0],
- "947": [0.19444, 0.44444, 0.06389, 0],
- "948": [0, 0.69444, 0.03819, 0],
- "949": [0, 0.44444, 0, 0],
- "950": [0.19444, 0.69444, 0.06215, 0],
- "951": [0.19444, 0.44444, 0.03704, 0],
- "952": [0, 0.69444, 0.03194, 0],
- "953": [0, 0.44444, 0, 0],
- "954": [0, 0.44444, 0, 0],
- "955": [0, 0.69444, 0, 0],
- "956": [0.19444, 0.44444, 0, 0],
- "957": [0, 0.44444, 0.06898, 0],
- "958": [0.19444, 0.69444, 0.03021, 0],
- "959": [0, 0.44444, 0, 0],
- "960": [0, 0.44444, 0.03704, 0],
- "961": [0.19444, 0.44444, 0, 0],
- "962": [0.09722, 0.44444, 0.07917, 0],
- "963": [0, 0.44444, 0.03704, 0],
- "964": [0, 0.44444, 0.13472, 0],
- "965": [0, 0.44444, 0.03704, 0],
- "966": [0.19444, 0.44444, 0, 0],
- "967": [0.19444, 0.44444, 0, 0],
- "968": [0.19444, 0.69444, 0.03704, 0],
- "969": [0, 0.44444, 0.03704, 0],
- "977": [0, 0.69444, 0, 0],
- "981": [0.19444, 0.69444, 0, 0],
- "982": [0, 0.44444, 0.03194, 0],
- "1009": [0.19444, 0.44444, 0, 0],
- "1013": [0, 0.44444, 0, 0],
- },
- "Math-Italic": {
- "47": [0.19444, 0.69444, 0, 0],
- "65": [0, 0.68333, 0, 0.13889],
- "66": [0, 0.68333, 0.05017, 0.08334],
- "67": [0, 0.68333, 0.07153, 0.08334],
- "68": [0, 0.68333, 0.02778, 0.05556],
- "69": [0, 0.68333, 0.05764, 0.08334],
- "70": [0, 0.68333, 0.13889, 0.08334],
- "71": [0, 0.68333, 0, 0.08334],
- "72": [0, 0.68333, 0.08125, 0.05556],
- "73": [0, 0.68333, 0.07847, 0.11111],
- "74": [0, 0.68333, 0.09618, 0.16667],
- "75": [0, 0.68333, 0.07153, 0.05556],
- "76": [0, 0.68333, 0, 0.02778],
- "77": [0, 0.68333, 0.10903, 0.08334],
- "78": [0, 0.68333, 0.10903, 0.08334],
- "79": [0, 0.68333, 0.02778, 0.08334],
- "80": [0, 0.68333, 0.13889, 0.08334],
- "81": [0.19444, 0.68333, 0, 0.08334],
- "82": [0, 0.68333, 0.00773, 0.08334],
- "83": [0, 0.68333, 0.05764, 0.08334],
- "84": [0, 0.68333, 0.13889, 0.08334],
- "85": [0, 0.68333, 0.10903, 0.02778],
- "86": [0, 0.68333, 0.22222, 0],
- "87": [0, 0.68333, 0.13889, 0],
- "88": [0, 0.68333, 0.07847, 0.08334],
- "89": [0, 0.68333, 0.22222, 0],
- "90": [0, 0.68333, 0.07153, 0.08334],
- "97": [0, 0.43056, 0, 0],
- "98": [0, 0.69444, 0, 0],
- "99": [0, 0.43056, 0, 0.05556],
- "100": [0, 0.69444, 0, 0.16667],
- "101": [0, 0.43056, 0, 0.05556],
- "102": [0.19444, 0.69444, 0.10764, 0.16667],
- "103": [0.19444, 0.43056, 0.03588, 0.02778],
- "104": [0, 0.69444, 0, 0],
- "105": [0, 0.65952, 0, 0],
- "106": [0.19444, 0.65952, 0.05724, 0],
- "107": [0, 0.69444, 0.03148, 0],
- "108": [0, 0.69444, 0.01968, 0.08334],
- "109": [0, 0.43056, 0, 0],
- "110": [0, 0.43056, 0, 0],
- "111": [0, 0.43056, 0, 0.05556],
- "112": [0.19444, 0.43056, 0, 0.08334],
- "113": [0.19444, 0.43056, 0.03588, 0.08334],
- "114": [0, 0.43056, 0.02778, 0.05556],
- "115": [0, 0.43056, 0, 0.05556],
- "116": [0, 0.61508, 0, 0.08334],
- "117": [0, 0.43056, 0, 0.02778],
- "118": [0, 0.43056, 0.03588, 0.02778],
- "119": [0, 0.43056, 0.02691, 0.08334],
- "120": [0, 0.43056, 0, 0.02778],
- "121": [0.19444, 0.43056, 0.03588, 0.05556],
- "122": [0, 0.43056, 0.04398, 0.05556],
- "915": [0, 0.68333, 0.13889, 0.08334],
- "916": [0, 0.68333, 0, 0.16667],
- "920": [0, 0.68333, 0.02778, 0.08334],
- "923": [0, 0.68333, 0, 0.16667],
- "926": [0, 0.68333, 0.07569, 0.08334],
- "928": [0, 0.68333, 0.08125, 0.05556],
- "931": [0, 0.68333, 0.05764, 0.08334],
- "933": [0, 0.68333, 0.13889, 0.05556],
- "934": [0, 0.68333, 0, 0.08334],
- "936": [0, 0.68333, 0.11, 0.05556],
- "937": [0, 0.68333, 0.05017, 0.08334],
- "945": [0, 0.43056, 0.0037, 0.02778],
- "946": [0.19444, 0.69444, 0.05278, 0.08334],
- "947": [0.19444, 0.43056, 0.05556, 0],
- "948": [0, 0.69444, 0.03785, 0.05556],
- "949": [0, 0.43056, 0, 0.08334],
- "950": [0.19444, 0.69444, 0.07378, 0.08334],
- "951": [0.19444, 0.43056, 0.03588, 0.05556],
- "952": [0, 0.69444, 0.02778, 0.08334],
- "953": [0, 0.43056, 0, 0.05556],
- "954": [0, 0.43056, 0, 0],
- "955": [0, 0.69444, 0, 0],
- "956": [0.19444, 0.43056, 0, 0.02778],
- "957": [0, 0.43056, 0.06366, 0.02778],
- "958": [0.19444, 0.69444, 0.04601, 0.11111],
- "959": [0, 0.43056, 0, 0.05556],
- "960": [0, 0.43056, 0.03588, 0],
- "961": [0.19444, 0.43056, 0, 0.08334],
- "962": [0.09722, 0.43056, 0.07986, 0.08334],
- "963": [0, 0.43056, 0.03588, 0],
- "964": [0, 0.43056, 0.1132, 0.02778],
- "965": [0, 0.43056, 0.03588, 0.02778],
- "966": [0.19444, 0.43056, 0, 0.08334],
- "967": [0.19444, 0.43056, 0, 0.05556],
- "968": [0.19444, 0.69444, 0.03588, 0.11111],
- "969": [0, 0.43056, 0.03588, 0],
- "977": [0, 0.69444, 0, 0.08334],
- "981": [0.19444, 0.69444, 0, 0.08334],
- "982": [0, 0.43056, 0.02778, 0],
- "1009": [0.19444, 0.43056, 0, 0.08334],
- "1013": [0, 0.43056, 0, 0.05556],
- },
- "Math-Regular": {
- "65": [0, 0.68333, 0, 0.13889],
- "66": [0, 0.68333, 0.05017, 0.08334],
- "67": [0, 0.68333, 0.07153, 0.08334],
- "68": [0, 0.68333, 0.02778, 0.05556],
- "69": [0, 0.68333, 0.05764, 0.08334],
- "70": [0, 0.68333, 0.13889, 0.08334],
- "71": [0, 0.68333, 0, 0.08334],
- "72": [0, 0.68333, 0.08125, 0.05556],
- "73": [0, 0.68333, 0.07847, 0.11111],
- "74": [0, 0.68333, 0.09618, 0.16667],
- "75": [0, 0.68333, 0.07153, 0.05556],
- "76": [0, 0.68333, 0, 0.02778],
- "77": [0, 0.68333, 0.10903, 0.08334],
- "78": [0, 0.68333, 0.10903, 0.08334],
- "79": [0, 0.68333, 0.02778, 0.08334],
- "80": [0, 0.68333, 0.13889, 0.08334],
- "81": [0.19444, 0.68333, 0, 0.08334],
- "82": [0, 0.68333, 0.00773, 0.08334],
- "83": [0, 0.68333, 0.05764, 0.08334],
- "84": [0, 0.68333, 0.13889, 0.08334],
- "85": [0, 0.68333, 0.10903, 0.02778],
- "86": [0, 0.68333, 0.22222, 0],
- "87": [0, 0.68333, 0.13889, 0],
- "88": [0, 0.68333, 0.07847, 0.08334],
- "89": [0, 0.68333, 0.22222, 0],
- "90": [0, 0.68333, 0.07153, 0.08334],
- "97": [0, 0.43056, 0, 0],
- "98": [0, 0.69444, 0, 0],
- "99": [0, 0.43056, 0, 0.05556],
- "100": [0, 0.69444, 0, 0.16667],
- "101": [0, 0.43056, 0, 0.05556],
- "102": [0.19444, 0.69444, 0.10764, 0.16667],
- "103": [0.19444, 0.43056, 0.03588, 0.02778],
- "104": [0, 0.69444, 0, 0],
- "105": [0, 0.65952, 0, 0],
- "106": [0.19444, 0.65952, 0.05724, 0],
- "107": [0, 0.69444, 0.03148, 0],
- "108": [0, 0.69444, 0.01968, 0.08334],
- "109": [0, 0.43056, 0, 0],
- "110": [0, 0.43056, 0, 0],
- "111": [0, 0.43056, 0, 0.05556],
- "112": [0.19444, 0.43056, 0, 0.08334],
- "113": [0.19444, 0.43056, 0.03588, 0.08334],
- "114": [0, 0.43056, 0.02778, 0.05556],
- "115": [0, 0.43056, 0, 0.05556],
- "116": [0, 0.61508, 0, 0.08334],
- "117": [0, 0.43056, 0, 0.02778],
- "118": [0, 0.43056, 0.03588, 0.02778],
- "119": [0, 0.43056, 0.02691, 0.08334],
- "120": [0, 0.43056, 0, 0.02778],
- "121": [0.19444, 0.43056, 0.03588, 0.05556],
- "122": [0, 0.43056, 0.04398, 0.05556],
- "915": [0, 0.68333, 0.13889, 0.08334],
- "916": [0, 0.68333, 0, 0.16667],
- "920": [0, 0.68333, 0.02778, 0.08334],
- "923": [0, 0.68333, 0, 0.16667],
- "926": [0, 0.68333, 0.07569, 0.08334],
- "928": [0, 0.68333, 0.08125, 0.05556],
- "931": [0, 0.68333, 0.05764, 0.08334],
- "933": [0, 0.68333, 0.13889, 0.05556],
- "934": [0, 0.68333, 0, 0.08334],
- "936": [0, 0.68333, 0.11, 0.05556],
- "937": [0, 0.68333, 0.05017, 0.08334],
- "945": [0, 0.43056, 0.0037, 0.02778],
- "946": [0.19444, 0.69444, 0.05278, 0.08334],
- "947": [0.19444, 0.43056, 0.05556, 0],
- "948": [0, 0.69444, 0.03785, 0.05556],
- "949": [0, 0.43056, 0, 0.08334],
- "950": [0.19444, 0.69444, 0.07378, 0.08334],
- "951": [0.19444, 0.43056, 0.03588, 0.05556],
- "952": [0, 0.69444, 0.02778, 0.08334],
- "953": [0, 0.43056, 0, 0.05556],
- "954": [0, 0.43056, 0, 0],
- "955": [0, 0.69444, 0, 0],
- "956": [0.19444, 0.43056, 0, 0.02778],
- "957": [0, 0.43056, 0.06366, 0.02778],
- "958": [0.19444, 0.69444, 0.04601, 0.11111],
- "959": [0, 0.43056, 0, 0.05556],
- "960": [0, 0.43056, 0.03588, 0],
- "961": [0.19444, 0.43056, 0, 0.08334],
- "962": [0.09722, 0.43056, 0.07986, 0.08334],
- "963": [0, 0.43056, 0.03588, 0],
- "964": [0, 0.43056, 0.1132, 0.02778],
- "965": [0, 0.43056, 0.03588, 0.02778],
- "966": [0.19444, 0.43056, 0, 0.08334],
- "967": [0.19444, 0.43056, 0, 0.05556],
- "968": [0.19444, 0.69444, 0.03588, 0.11111],
- "969": [0, 0.43056, 0.03588, 0],
- "977": [0, 0.69444, 0, 0.08334],
- "981": [0.19444, 0.69444, 0, 0.08334],
- "982": [0, 0.43056, 0.02778, 0],
- "1009": [0.19444, 0.43056, 0, 0.08334],
- "1013": [0, 0.43056, 0, 0.05556],
- },
- "SansSerif-Regular": {
- "33": [0, 0.69444, 0, 0],
- "34": [0, 0.69444, 0, 0],
- "35": [0.19444, 0.69444, 0, 0],
- "36": [0.05556, 0.75, 0, 0],
- "37": [0.05556, 0.75, 0, 0],
- "38": [0, 0.69444, 0, 0],
- "39": [0, 0.69444, 0, 0],
- "40": [0.25, 0.75, 0, 0],
- "41": [0.25, 0.75, 0, 0],
- "42": [0, 0.75, 0, 0],
- "43": [0.08333, 0.58333, 0, 0],
- "44": [0.125, 0.08333, 0, 0],
- "45": [0, 0.44444, 0, 0],
- "46": [0, 0.08333, 0, 0],
- "47": [0.25, 0.75, 0, 0],
- "48": [0, 0.65556, 0, 0],
- "49": [0, 0.65556, 0, 0],
- "50": [0, 0.65556, 0, 0],
- "51": [0, 0.65556, 0, 0],
- "52": [0, 0.65556, 0, 0],
- "53": [0, 0.65556, 0, 0],
- "54": [0, 0.65556, 0, 0],
- "55": [0, 0.65556, 0, 0],
- "56": [0, 0.65556, 0, 0],
- "57": [0, 0.65556, 0, 0],
- "58": [0, 0.44444, 0, 0],
- "59": [0.125, 0.44444, 0, 0],
- "61": [-0.13, 0.37, 0, 0],
- "63": [0, 0.69444, 0, 0],
- "64": [0, 0.69444, 0, 0],
- "65": [0, 0.69444, 0, 0],
- "66": [0, 0.69444, 0, 0],
- "67": [0, 0.69444, 0, 0],
- "68": [0, 0.69444, 0, 0],
- "69": [0, 0.69444, 0, 0],
- "70": [0, 0.69444, 0, 0],
- "71": [0, 0.69444, 0, 0],
- "72": [0, 0.69444, 0, 0],
- "73": [0, 0.69444, 0, 0],
- "74": [0, 0.69444, 0, 0],
- "75": [0, 0.69444, 0, 0],
- "76": [0, 0.69444, 0, 0],
- "77": [0, 0.69444, 0, 0],
- "78": [0, 0.69444, 0, 0],
- "79": [0, 0.69444, 0, 0],
- "80": [0, 0.69444, 0, 0],
- "81": [0.125, 0.69444, 0, 0],
- "82": [0, 0.69444, 0, 0],
- "83": [0, 0.69444, 0, 0],
- "84": [0, 0.69444, 0, 0],
- "85": [0, 0.69444, 0, 0],
- "86": [0, 0.69444, 0.01389, 0],
- "87": [0, 0.69444, 0.01389, 0],
- "88": [0, 0.69444, 0, 0],
- "89": [0, 0.69444, 0.025, 0],
- "90": [0, 0.69444, 0, 0],
- "91": [0.25, 0.75, 0, 0],
- "93": [0.25, 0.75, 0, 0],
- "94": [0, 0.69444, 0, 0],
- "95": [0.35, 0.09444, 0.02778, 0],
- "97": [0, 0.44444, 0, 0],
- "98": [0, 0.69444, 0, 0],
- "99": [0, 0.44444, 0, 0],
- "100": [0, 0.69444, 0, 0],
- "101": [0, 0.44444, 0, 0],
- "102": [0, 0.69444, 0.06944, 0],
- "103": [0.19444, 0.44444, 0.01389, 0],
- "104": [0, 0.69444, 0, 0],
- "105": [0, 0.67937, 0, 0],
- "106": [0.19444, 0.67937, 0, 0],
- "107": [0, 0.69444, 0, 0],
- "108": [0, 0.69444, 0, 0],
- "109": [0, 0.44444, 0, 0],
- "110": [0, 0.44444, 0, 0],
- "111": [0, 0.44444, 0, 0],
- "112": [0.19444, 0.44444, 0, 0],
- "113": [0.19444, 0.44444, 0, 0],
- "114": [0, 0.44444, 0.01389, 0],
- "115": [0, 0.44444, 0, 0],
- "116": [0, 0.57143, 0, 0],
- "117": [0, 0.44444, 0, 0],
- "118": [0, 0.44444, 0.01389, 0],
- "119": [0, 0.44444, 0.01389, 0],
- "120": [0, 0.44444, 0, 0],
- "121": [0.19444, 0.44444, 0.01389, 0],
- "122": [0, 0.44444, 0, 0],
- "126": [0.35, 0.32659, 0, 0],
- "305": [0, 0.44444, 0, 0],
- "567": [0.19444, 0.44444, 0, 0],
- "768": [0, 0.69444, 0, 0],
- "769": [0, 0.69444, 0, 0],
- "770": [0, 0.69444, 0, 0],
- "771": [0, 0.67659, 0, 0],
- "772": [0, 0.60889, 0, 0],
- "774": [0, 0.69444, 0, 0],
- "775": [0, 0.67937, 0, 0],
- "776": [0, 0.67937, 0, 0],
- "778": [0, 0.69444, 0, 0],
- "779": [0, 0.69444, 0, 0],
- "780": [0, 0.63194, 0, 0],
- "915": [0, 0.69444, 0, 0],
- "916": [0, 0.69444, 0, 0],
- "920": [0, 0.69444, 0, 0],
- "923": [0, 0.69444, 0, 0],
- "926": [0, 0.69444, 0, 0],
- "928": [0, 0.69444, 0, 0],
- "931": [0, 0.69444, 0, 0],
- "933": [0, 0.69444, 0, 0],
- "934": [0, 0.69444, 0, 0],
- "936": [0, 0.69444, 0, 0],
- "937": [0, 0.69444, 0, 0],
- "8211": [0, 0.44444, 0.02778, 0],
- "8212": [0, 0.44444, 0.02778, 0],
- "8216": [0, 0.69444, 0, 0],
- "8217": [0, 0.69444, 0, 0],
- "8220": [0, 0.69444, 0, 0],
- "8221": [0, 0.69444, 0, 0],
- },
- "Script-Regular": {
- "65": [0, 0.7, 0.22925, 0],
- "66": [0, 0.7, 0.04087, 0],
- "67": [0, 0.7, 0.1689, 0],
- "68": [0, 0.7, 0.09371, 0],
- "69": [0, 0.7, 0.18583, 0],
- "70": [0, 0.7, 0.13634, 0],
- "71": [0, 0.7, 0.17322, 0],
- "72": [0, 0.7, 0.29694, 0],
- "73": [0, 0.7, 0.19189, 0],
- "74": [0.27778, 0.7, 0.19189, 0],
- "75": [0, 0.7, 0.31259, 0],
- "76": [0, 0.7, 0.19189, 0],
- "77": [0, 0.7, 0.15981, 0],
- "78": [0, 0.7, 0.3525, 0],
- "79": [0, 0.7, 0.08078, 0],
- "80": [0, 0.7, 0.08078, 0],
- "81": [0, 0.7, 0.03305, 0],
- "82": [0, 0.7, 0.06259, 0],
- "83": [0, 0.7, 0.19189, 0],
- "84": [0, 0.7, 0.29087, 0],
- "85": [0, 0.7, 0.25815, 0],
- "86": [0, 0.7, 0.27523, 0],
- "87": [0, 0.7, 0.27523, 0],
- "88": [0, 0.7, 0.26006, 0],
- "89": [0, 0.7, 0.2939, 0],
- "90": [0, 0.7, 0.24037, 0],
- },
- "Size1-Regular": {
- "40": [0.35001, 0.85, 0, 0],
- "41": [0.35001, 0.85, 0, 0],
- "47": [0.35001, 0.85, 0, 0],
- "91": [0.35001, 0.85, 0, 0],
- "92": [0.35001, 0.85, 0, 0],
- "93": [0.35001, 0.85, 0, 0],
- "123": [0.35001, 0.85, 0, 0],
- "125": [0.35001, 0.85, 0, 0],
- "710": [0, 0.72222, 0, 0],
- "732": [0, 0.72222, 0, 0],
- "770": [0, 0.72222, 0, 0],
- "771": [0, 0.72222, 0, 0],
- "8214": [-0.00099, 0.601, 0, 0],
- "8593": [1e-05, 0.6, 0, 0],
- "8595": [1e-05, 0.6, 0, 0],
- "8657": [1e-05, 0.6, 0, 0],
- "8659": [1e-05, 0.6, 0, 0],
- "8719": [0.25001, 0.75, 0, 0],
- "8720": [0.25001, 0.75, 0, 0],
- "8721": [0.25001, 0.75, 0, 0],
- "8730": [0.35001, 0.85, 0, 0],
- "8739": [-0.00599, 0.606, 0, 0],
- "8741": [-0.00599, 0.606, 0, 0],
- "8747": [0.30612, 0.805, 0.19445, 0],
- "8748": [0.306, 0.805, 0.19445, 0],
- "8749": [0.306, 0.805, 0.19445, 0],
- "8750": [0.30612, 0.805, 0.19445, 0],
- "8896": [0.25001, 0.75, 0, 0],
- "8897": [0.25001, 0.75, 0, 0],
- "8898": [0.25001, 0.75, 0, 0],
- "8899": [0.25001, 0.75, 0, 0],
- "8968": [0.35001, 0.85, 0, 0],
- "8969": [0.35001, 0.85, 0, 0],
- "8970": [0.35001, 0.85, 0, 0],
- "8971": [0.35001, 0.85, 0, 0],
- "9168": [-0.00099, 0.601, 0, 0],
- "10216": [0.35001, 0.85, 0, 0],
- "10217": [0.35001, 0.85, 0, 0],
- "10752": [0.25001, 0.75, 0, 0],
- "10753": [0.25001, 0.75, 0, 0],
- "10754": [0.25001, 0.75, 0, 0],
- "10756": [0.25001, 0.75, 0, 0],
- "10758": [0.25001, 0.75, 0, 0],
- },
- "Size2-Regular": {
- "40": [0.65002, 1.15, 0, 0],
- "41": [0.65002, 1.15, 0, 0],
- "47": [0.65002, 1.15, 0, 0],
- "91": [0.65002, 1.15, 0, 0],
- "92": [0.65002, 1.15, 0, 0],
- "93": [0.65002, 1.15, 0, 0],
- "123": [0.65002, 1.15, 0, 0],
- "125": [0.65002, 1.15, 0, 0],
- "710": [0, 0.75, 0, 0],
- "732": [0, 0.75, 0, 0],
- "770": [0, 0.75, 0, 0],
- "771": [0, 0.75, 0, 0],
- "8719": [0.55001, 1.05, 0, 0],
- "8720": [0.55001, 1.05, 0, 0],
- "8721": [0.55001, 1.05, 0, 0],
- "8730": [0.65002, 1.15, 0, 0],
- "8747": [0.86225, 1.36, 0.44445, 0],
- "8748": [0.862, 1.36, 0.44445, 0],
- "8749": [0.862, 1.36, 0.44445, 0],
- "8750": [0.86225, 1.36, 0.44445, 0],
- "8896": [0.55001, 1.05, 0, 0],
- "8897": [0.55001, 1.05, 0, 0],
- "8898": [0.55001, 1.05, 0, 0],
- "8899": [0.55001, 1.05, 0, 0],
- "8968": [0.65002, 1.15, 0, 0],
- "8969": [0.65002, 1.15, 0, 0],
- "8970": [0.65002, 1.15, 0, 0],
- "8971": [0.65002, 1.15, 0, 0],
- "10216": [0.65002, 1.15, 0, 0],
- "10217": [0.65002, 1.15, 0, 0],
- "10752": [0.55001, 1.05, 0, 0],
- "10753": [0.55001, 1.05, 0, 0],
- "10754": [0.55001, 1.05, 0, 0],
- "10756": [0.55001, 1.05, 0, 0],
- "10758": [0.55001, 1.05, 0, 0],
- },
- "Size3-Regular": {
- "40": [0.95003, 1.45, 0, 0],
- "41": [0.95003, 1.45, 0, 0],
- "47": [0.95003, 1.45, 0, 0],
- "91": [0.95003, 1.45, 0, 0],
- "92": [0.95003, 1.45, 0, 0],
- "93": [0.95003, 1.45, 0, 0],
- "123": [0.95003, 1.45, 0, 0],
- "125": [0.95003, 1.45, 0, 0],
- "710": [0, 0.75, 0, 0],
- "732": [0, 0.75, 0, 0],
- "770": [0, 0.75, 0, 0],
- "771": [0, 0.75, 0, 0],
- "8730": [0.95003, 1.45, 0, 0],
- "8968": [0.95003, 1.45, 0, 0],
- "8969": [0.95003, 1.45, 0, 0],
- "8970": [0.95003, 1.45, 0, 0],
- "8971": [0.95003, 1.45, 0, 0],
- "10216": [0.95003, 1.45, 0, 0],
- "10217": [0.95003, 1.45, 0, 0],
- },
- "Size4-Regular": {
- "40": [1.25003, 1.75, 0, 0],
- "41": [1.25003, 1.75, 0, 0],
- "47": [1.25003, 1.75, 0, 0],
- "91": [1.25003, 1.75, 0, 0],
- "92": [1.25003, 1.75, 0, 0],
- "93": [1.25003, 1.75, 0, 0],
- "123": [1.25003, 1.75, 0, 0],
- "125": [1.25003, 1.75, 0, 0],
- "710": [0, 0.825, 0, 0],
- "732": [0, 0.825, 0, 0],
- "770": [0, 0.825, 0, 0],
- "771": [0, 0.825, 0, 0],
- "8730": [1.25003, 1.75, 0, 0],
- "8968": [1.25003, 1.75, 0, 0],
- "8969": [1.25003, 1.75, 0, 0],
- "8970": [1.25003, 1.75, 0, 0],
- "8971": [1.25003, 1.75, 0, 0],
- "9115": [0.64502, 1.155, 0, 0],
- "9116": [1e-05, 0.6, 0, 0],
- "9117": [0.64502, 1.155, 0, 0],
- "9118": [0.64502, 1.155, 0, 0],
- "9119": [1e-05, 0.6, 0, 0],
- "9120": [0.64502, 1.155, 0, 0],
- "9121": [0.64502, 1.155, 0, 0],
- "9122": [-0.00099, 0.601, 0, 0],
- "9123": [0.64502, 1.155, 0, 0],
- "9124": [0.64502, 1.155, 0, 0],
- "9125": [-0.00099, 0.601, 0, 0],
- "9126": [0.64502, 1.155, 0, 0],
- "9127": [1e-05, 0.9, 0, 0],
- "9128": [0.65002, 1.15, 0, 0],
- "9129": [0.90001, 0, 0, 0],
- "9130": [0, 0.3, 0, 0],
- "9131": [1e-05, 0.9, 0, 0],
- "9132": [0.65002, 1.15, 0, 0],
- "9133": [0.90001, 0, 0, 0],
- "9143": [0.88502, 0.915, 0, 0],
- "10216": [1.25003, 1.75, 0, 0],
- "10217": [1.25003, 1.75, 0, 0],
- "57344": [-0.00499, 0.605, 0, 0],
- "57345": [-0.00499, 0.605, 0, 0],
- "57680": [0, 0.12, 0, 0],
- "57681": [0, 0.12, 0, 0],
- "57682": [0, 0.12, 0, 0],
- "57683": [0, 0.12, 0, 0],
- },
- "Typewriter-Regular": {
- "33": [0, 0.61111, 0, 0],
- "34": [0, 0.61111, 0, 0],
- "35": [0, 0.61111, 0, 0],
- "36": [0.08333, 0.69444, 0, 0],
- "37": [0.08333, 0.69444, 0, 0],
- "38": [0, 0.61111, 0, 0],
- "39": [0, 0.61111, 0, 0],
- "40": [0.08333, 0.69444, 0, 0],
- "41": [0.08333, 0.69444, 0, 0],
- "42": [0, 0.52083, 0, 0],
- "43": [-0.08056, 0.53055, 0, 0],
- "44": [0.13889, 0.125, 0, 0],
- "45": [-0.08056, 0.53055, 0, 0],
- "46": [0, 0.125, 0, 0],
- "47": [0.08333, 0.69444, 0, 0],
- "48": [0, 0.61111, 0, 0],
- "49": [0, 0.61111, 0, 0],
- "50": [0, 0.61111, 0, 0],
- "51": [0, 0.61111, 0, 0],
- "52": [0, 0.61111, 0, 0],
- "53": [0, 0.61111, 0, 0],
- "54": [0, 0.61111, 0, 0],
- "55": [0, 0.61111, 0, 0],
- "56": [0, 0.61111, 0, 0],
- "57": [0, 0.61111, 0, 0],
- "58": [0, 0.43056, 0, 0],
- "59": [0.13889, 0.43056, 0, 0],
- "60": [-0.05556, 0.55556, 0, 0],
- "61": [-0.19549, 0.41562, 0, 0],
- "62": [-0.05556, 0.55556, 0, 0],
- "63": [0, 0.61111, 0, 0],
- "64": [0, 0.61111, 0, 0],
- "65": [0, 0.61111, 0, 0],
- "66": [0, 0.61111, 0, 0],
- "67": [0, 0.61111, 0, 0],
- "68": [0, 0.61111, 0, 0],
- "69": [0, 0.61111, 0, 0],
- "70": [0, 0.61111, 0, 0],
- "71": [0, 0.61111, 0, 0],
- "72": [0, 0.61111, 0, 0],
- "73": [0, 0.61111, 0, 0],
- "74": [0, 0.61111, 0, 0],
- "75": [0, 0.61111, 0, 0],
- "76": [0, 0.61111, 0, 0],
- "77": [0, 0.61111, 0, 0],
- "78": [0, 0.61111, 0, 0],
- "79": [0, 0.61111, 0, 0],
- "80": [0, 0.61111, 0, 0],
- "81": [0.13889, 0.61111, 0, 0],
- "82": [0, 0.61111, 0, 0],
- "83": [0, 0.61111, 0, 0],
- "84": [0, 0.61111, 0, 0],
- "85": [0, 0.61111, 0, 0],
- "86": [0, 0.61111, 0, 0],
- "87": [0, 0.61111, 0, 0],
- "88": [0, 0.61111, 0, 0],
- "89": [0, 0.61111, 0, 0],
- "90": [0, 0.61111, 0, 0],
- "91": [0.08333, 0.69444, 0, 0],
- "92": [0.08333, 0.69444, 0, 0],
- "93": [0.08333, 0.69444, 0, 0],
- "94": [0, 0.61111, 0, 0],
- "95": [0.09514, 0, 0, 0],
- "96": [0, 0.61111, 0, 0],
- "97": [0, 0.43056, 0, 0],
- "98": [0, 0.61111, 0, 0],
- "99": [0, 0.43056, 0, 0],
- "100": [0, 0.61111, 0, 0],
- "101": [0, 0.43056, 0, 0],
- "102": [0, 0.61111, 0, 0],
- "103": [0.22222, 0.43056, 0, 0],
- "104": [0, 0.61111, 0, 0],
- "105": [0, 0.61111, 0, 0],
- "106": [0.22222, 0.61111, 0, 0],
- "107": [0, 0.61111, 0, 0],
- "108": [0, 0.61111, 0, 0],
- "109": [0, 0.43056, 0, 0],
- "110": [0, 0.43056, 0, 0],
- "111": [0, 0.43056, 0, 0],
- "112": [0.22222, 0.43056, 0, 0],
- "113": [0.22222, 0.43056, 0, 0],
- "114": [0, 0.43056, 0, 0],
- "115": [0, 0.43056, 0, 0],
- "116": [0, 0.55358, 0, 0],
- "117": [0, 0.43056, 0, 0],
- "118": [0, 0.43056, 0, 0],
- "119": [0, 0.43056, 0, 0],
- "120": [0, 0.43056, 0, 0],
- "121": [0.22222, 0.43056, 0, 0],
- "122": [0, 0.43056, 0, 0],
- "123": [0.08333, 0.69444, 0, 0],
- "124": [0.08333, 0.69444, 0, 0],
- "125": [0.08333, 0.69444, 0, 0],
- "126": [0, 0.61111, 0, 0],
- "127": [0, 0.61111, 0, 0],
- "305": [0, 0.43056, 0, 0],
- "567": [0.22222, 0.43056, 0, 0],
- "768": [0, 0.61111, 0, 0],
- "769": [0, 0.61111, 0, 0],
- "770": [0, 0.61111, 0, 0],
- "771": [0, 0.61111, 0, 0],
- "772": [0, 0.56555, 0, 0],
- "774": [0, 0.61111, 0, 0],
- "776": [0, 0.61111, 0, 0],
- "778": [0, 0.61111, 0, 0],
- "780": [0, 0.56597, 0, 0],
- "915": [0, 0.61111, 0, 0],
- "916": [0, 0.61111, 0, 0],
- "920": [0, 0.61111, 0, 0],
- "923": [0, 0.61111, 0, 0],
- "926": [0, 0.61111, 0, 0],
- "928": [0, 0.61111, 0, 0],
- "931": [0, 0.61111, 0, 0],
- "933": [0, 0.61111, 0, 0],
- "934": [0, 0.61111, 0, 0],
- "936": [0, 0.61111, 0, 0],
- "937": [0, 0.61111, 0, 0],
- "2018": [0, 0.61111, 0, 0],
- "2019": [0, 0.61111, 0, 0],
- "8242": [0, 0.61111, 0, 0],
- },
-};
diff --git a/webapp/non_npm_dependencies/katex/src/functions.js b/webapp/non_npm_dependencies/katex/src/functions.js
deleted file mode 100644
index 2fa124d3b..000000000
--- a/webapp/non_npm_dependencies/katex/src/functions.js
+++ /dev/null
@@ -1,569 +0,0 @@
-var utils = require("./utils");
-var ParseError = require("./ParseError");
-
-/* This file contains a list of functions that we parse, identified by
- * the calls to defineFunction.
- *
- * The first argument to defineFunction is a single name or a list of names.
- * All functions named in such a list will share a single implementation.
- *
- * Each declared function can have associated properties, which
- * include the following:
- *
- * - numArgs: The number of arguments the function takes.
- * If this is the only property, it can be passed as a number
- * instead of an element of a properties object.
- * - argTypes: (optional) An array corresponding to each argument of the
- * function, giving the type of argument that should be parsed. Its
- * length should be equal to `numArgs + numOptionalArgs`. Valid
- * types:
- * - "size": A size-like thing, such as "1em" or "5ex"
- * - "color": An html color, like "#abc" or "blue"
- * - "original": The same type as the environment that the
- * function being parsed is in (e.g. used for the
- * bodies of functions like \color where the first
- * argument is special and the second argument is
- * parsed normally)
- * Other possible types (probably shouldn't be used)
- * - "text": Text-like (e.g. \text)
- * - "math": Normal math
- * If undefined, this will be treated as an appropriate length
- * array of "original" strings
- * - greediness: (optional) The greediness of the function to use ungrouped
- * arguments.
- *
- * E.g. if you have an expression
- * \sqrt \frac 1 2
- * since \frac has greediness=2 vs \sqrt's greediness=1, \frac
- * will use the two arguments '1' and '2' as its two arguments,
- * then that whole function will be used as the argument to
- * \sqrt. On the other hand, the expressions
- * \frac \frac 1 2 3
- * and
- * \frac \sqrt 1 2
- * will fail because \frac and \frac have equal greediness
- * and \sqrt has a lower greediness than \frac respectively. To
- * make these parse, we would have to change them to:
- * \frac {\frac 1 2} 3
- * and
- * \frac {\sqrt 1} 2
- *
- * The default value is `1`
- * - allowedInText: (optional) Whether or not the function is allowed inside
- * text mode (default false)
- * - numOptionalArgs: (optional) The number of optional arguments the function
- * should parse. If the optional arguments aren't found,
- * `null` will be passed to the handler in their place.
- * (default 0)
- *
- * The last argument is that implementation, the handler for the function(s).
- * It is called to handle these functions and their arguments.
- * It receives two arguments:
- * - context contains information and references provided by the parser
- * - args is an array of arguments obtained from TeX input
- * The context contains the following properties:
- * - funcName: the text (i.e. name) of the function, including \
- * - parser: the parser object
- * - lexer: the lexer object
- * - positions: the positions in the overall string of the function
- * and the arguments.
- * The latter three should only be used to produce error messages.
- *
- * The function should return an object with the following keys:
- * - type: The type of element that this is. This is then used in
- * buildHTML/buildMathML to determine which function
- * should be called to build this node into a DOM node
- * Any other data can be added to the object, which will be passed
- * in to the function in buildHTML/buildMathML as `group.value`.
- */
-
-function defineFunction(names, props, handler) {
- if (typeof names === "string") {
- names = [names];
- }
- if (typeof props === "number") {
- props = { numArgs: props };
- }
- // Set default values of functions
- var data = {
- numArgs: props.numArgs,
- argTypes: props.argTypes,
- greediness: (props.greediness === undefined) ? 1 : props.greediness,
- allowedInText: !!props.allowedInText,
- numOptionalArgs: props.numOptionalArgs || 0,
- handler: handler,
- };
- for (var i = 0; i < names.length; ++i) {
- module.exports[names[i]] = data;
- }
-}
-
-// A normal square root
-defineFunction("\\sqrt", {
- numArgs: 1,
- numOptionalArgs: 1,
-}, function(context, args) {
- var index = args[0];
- var body = args[1];
- return {
- type: "sqrt",
- body: body,
- index: index,
- };
-});
-
-// Some non-mathy text
-defineFunction("\\text", {
- numArgs: 1,
- argTypes: ["text"],
- greediness: 2,
-}, function(context, args) {
- var body = args[0];
- // Since the corresponding buildHTML/buildMathML function expects a
- // list of elements, we normalize for different kinds of arguments
- // TODO(emily): maybe this should be done somewhere else
- var inner;
- if (body.type === "ordgroup") {
- inner = body.value;
- } else {
- inner = [body];
- }
-
- return {
- type: "text",
- body: inner,
- };
-});
-
-// A two-argument custom color
-defineFunction("\\color", {
- numArgs: 2,
- allowedInText: true,
- greediness: 3,
- argTypes: ["color", "original"],
-}, function(context, args) {
- var color = args[0];
- var body = args[1];
- // Normalize the different kinds of bodies (see \text above)
- var inner;
- if (body.type === "ordgroup") {
- inner = body.value;
- } else {
- inner = [body];
- }
-
- return {
- type: "color",
- color: color.value,
- value: inner,
- };
-});
-
-// An overline
-defineFunction("\\overline", {
- numArgs: 1,
-}, function(context, args) {
- var body = args[0];
- return {
- type: "overline",
- body: body,
- };
-});
-
-// A box of the width and height
-defineFunction("\\rule", {
- numArgs: 2,
- numOptionalArgs: 1,
- argTypes: ["size", "size", "size"],
-}, function(context, args) {
- var shift = args[0];
- var width = args[1];
- var height = args[2];
- return {
- type: "rule",
- shift: shift && shift.value,
- width: width.value,
- height: height.value,
- };
-});
-
-// A KaTeX logo
-defineFunction("\\KaTeX", {
- numArgs: 0,
-}, function(context) {
- return {
- type: "katex",
- };
-});
-
-defineFunction("\\phantom", {
- numArgs: 1,
-}, function(context, args) {
- var body = args[0];
- var inner;
- if (body.type === "ordgroup") {
- inner = body.value;
- } else {
- inner = [body];
- }
-
- return {
- type: "phantom",
- value: inner,
- };
-});
-
-// Extra data needed for the delimiter handler down below
-var delimiterSizes = {
- "\\bigl" : {type: "open", size: 1},
- "\\Bigl" : {type: "open", size: 2},
- "\\biggl": {type: "open", size: 3},
- "\\Biggl": {type: "open", size: 4},
- "\\bigr" : {type: "close", size: 1},
- "\\Bigr" : {type: "close", size: 2},
- "\\biggr": {type: "close", size: 3},
- "\\Biggr": {type: "close", size: 4},
- "\\bigm" : {type: "rel", size: 1},
- "\\Bigm" : {type: "rel", size: 2},
- "\\biggm": {type: "rel", size: 3},
- "\\Biggm": {type: "rel", size: 4},
- "\\big" : {type: "textord", size: 1},
- "\\Big" : {type: "textord", size: 2},
- "\\bigg" : {type: "textord", size: 3},
- "\\Bigg" : {type: "textord", size: 4},
-};
-
-var delimiters = [
- "(", ")", "[", "\\lbrack", "]", "\\rbrack",
- "\\{", "\\lbrace", "\\}", "\\rbrace",
- "\\lfloor", "\\rfloor", "\\lceil", "\\rceil",
- "<", ">", "\\langle", "\\rangle", "\\lt", "\\gt",
- "\\lvert", "\\rvert", "\\lVert", "\\rVert",
- "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache",
- "/", "\\backslash",
- "|", "\\vert", "\\|", "\\Vert",
- "\\uparrow", "\\Uparrow",
- "\\downarrow", "\\Downarrow",
- "\\updownarrow", "\\Updownarrow",
- ".",
-];
-
-var fontAliases = {
- "\\Bbb": "\\mathbb",
- "\\bold": "\\mathbf",
- "\\frak": "\\mathfrak",
-};
-
-// Single-argument color functions
-defineFunction([
- "\\blue", "\\orange", "\\pink", "\\red",
- "\\green", "\\gray", "\\purple",
- "\\blueA", "\\blueB", "\\blueC", "\\blueD", "\\blueE",
- "\\tealA", "\\tealB", "\\tealC", "\\tealD", "\\tealE",
- "\\greenA", "\\greenB", "\\greenC", "\\greenD", "\\greenE",
- "\\goldA", "\\goldB", "\\goldC", "\\goldD", "\\goldE",
- "\\redA", "\\redB", "\\redC", "\\redD", "\\redE",
- "\\maroonA", "\\maroonB", "\\maroonC", "\\maroonD", "\\maroonE",
- "\\purpleA", "\\purpleB", "\\purpleC", "\\purpleD", "\\purpleE",
- "\\mintA", "\\mintB", "\\mintC",
- "\\grayA", "\\grayB", "\\grayC", "\\grayD", "\\grayE",
- "\\grayF", "\\grayG", "\\grayH", "\\grayI",
- "\\kaBlue", "\\kaGreen",
-], {
- numArgs: 1,
- allowedInText: true,
- greediness: 3,
-}, function(context, args) {
- var body = args[0];
- var atoms;
- if (body.type === "ordgroup") {
- atoms = body.value;
- } else {
- atoms = [body];
- }
-
- return {
- type: "color",
- color: "katex-" + context.funcName.slice(1),
- value: atoms,
- };
-});
-
-// There are 2 flags for operators; whether they produce limits in
-// displaystyle, and whether they are symbols and should grow in
-// displaystyle. These four groups cover the four possible choices.
-
-// No limits, not symbols
-defineFunction([
- "\\arcsin", "\\arccos", "\\arctan", "\\arg", "\\cos", "\\cosh",
- "\\cot", "\\coth", "\\csc", "\\deg", "\\dim", "\\exp", "\\hom",
- "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh",
- "\\tan", "\\tanh",
-], {
- numArgs: 0,
-}, function(context) {
- return {
- type: "op",
- limits: false,
- symbol: false,
- body: context.funcName,
- };
-});
-
-// Limits, not symbols
-defineFunction([
- "\\det", "\\gcd", "\\inf", "\\lim", "\\liminf", "\\limsup", "\\max",
- "\\min", "\\Pr", "\\sup",
-], {
- numArgs: 0,
-}, function(context) {
- return {
- type: "op",
- limits: true,
- symbol: false,
- body: context.funcName,
- };
-});
-
-// No limits, symbols
-defineFunction([
- "\\int", "\\iint", "\\iiint", "\\oint",
-], {
- numArgs: 0,
-}, function(context) {
- return {
- type: "op",
- limits: false,
- symbol: true,
- body: context.funcName,
- };
-});
-
-// Limits, symbols
-defineFunction([
- "\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap",
- "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes",
- "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint",
-], {
- numArgs: 0,
-}, function(context) {
- return {
- type: "op",
- limits: true,
- symbol: true,
- body: context.funcName,
- };
-});
-
-// Fractions
-defineFunction([
- "\\dfrac", "\\frac", "\\tfrac",
- "\\dbinom", "\\binom", "\\tbinom",
-], {
- numArgs: 2,
- greediness: 2,
-}, function(context, args) {
- var numer = args[0];
- var denom = args[1];
- var hasBarLine;
- var leftDelim = null;
- var rightDelim = null;
- var size = "auto";
-
- switch (context.funcName) {
- case "\\dfrac":
- case "\\frac":
- case "\\tfrac":
- hasBarLine = true;
- break;
- case "\\dbinom":
- case "\\binom":
- case "\\tbinom":
- hasBarLine = false;
- leftDelim = "(";
- rightDelim = ")";
- break;
- default:
- throw new Error("Unrecognized genfrac command");
- }
-
- switch (context.funcName) {
- case "\\dfrac":
- case "\\dbinom":
- size = "display";
- break;
- case "\\tfrac":
- case "\\tbinom":
- size = "text";
- break;
- }
-
- return {
- type: "genfrac",
- numer: numer,
- denom: denom,
- hasBarLine: hasBarLine,
- leftDelim: leftDelim,
- rightDelim: rightDelim,
- size: size,
- };
-});
-
-// Left and right overlap functions
-defineFunction(["\\llap", "\\rlap"], {
- numArgs: 1,
- allowedInText: true,
-}, function(context, args) {
- var body = args[0];
- return {
- type: context.funcName.slice(1),
- body: body,
- };
-});
-
-// Delimiter functions
-defineFunction([
- "\\bigl", "\\Bigl", "\\biggl", "\\Biggl",
- "\\bigr", "\\Bigr", "\\biggr", "\\Biggr",
- "\\bigm", "\\Bigm", "\\biggm", "\\Biggm",
- "\\big", "\\Big", "\\bigg", "\\Bigg",
- "\\left", "\\right",
-], {
- numArgs: 1,
-}, function(context, args) {
- var delim = args[0];
- if (!utils.contains(delimiters, delim.value)) {
- throw new ParseError(
- "Invalid delimiter: '" + delim.value + "' after '" +
- context.funcName + "'",
- context.lexer, context.positions[1]);
- }
-
- // \left and \right are caught somewhere in Parser.js, which is
- // why this data doesn't match what is in buildHTML.
- if (context.funcName === "\\left" || context.funcName === "\\right") {
- return {
- type: "leftright",
- value: delim.value,
- };
- } else {
- return {
- type: "delimsizing",
- size: delimiterSizes[context.funcName].size,
- delimType: delimiterSizes[context.funcName].type,
- value: delim.value,
- };
- }
-});
-
-// Sizing functions (handled in Parser.js explicitly, hence no handler)
-defineFunction([
- "\\tiny", "\\scriptsize", "\\footnotesize", "\\small",
- "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge",
-], 0, null);
-
-// Style changing functions (handled in Parser.js explicitly, hence no
-// handler)
-defineFunction([
- "\\displaystyle", "\\textstyle", "\\scriptstyle",
- "\\scriptscriptstyle",
-], 0, null);
-
-defineFunction([
- // styles
- "\\mathrm", "\\mathit", "\\mathbf",
-
- // families
- "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf",
- "\\mathtt",
-
- // aliases
- "\\Bbb", "\\bold", "\\frak",
-], {
- numArgs: 1,
- greediness: 2,
-}, function(context, args) {
- var body = args[0];
- var func = context.funcName;
- if (func in fontAliases) {
- func = fontAliases[func];
- }
- return {
- type: "font",
- font: func.slice(1),
- body: body,
- };
-});
-
-// Accents
-defineFunction([
- "\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve",
- "\\check", "\\hat", "\\vec", "\\dot",
- // We don't support expanding accents yet
- // "\\widetilde", "\\widehat"
-], {
- numArgs: 1,
-}, function(context, args) {
- var base = args[0];
- return {
- type: "accent",
- accent: context.funcName,
- base: base,
- };
-});
-
-// Infix generalized fractions
-defineFunction(["\\over", "\\choose"], {
- numArgs: 0,
-}, function(context) {
- var replaceWith;
- switch (context.funcName) {
- case "\\over":
- replaceWith = "\\frac";
- break;
- case "\\choose":
- replaceWith = "\\binom";
- break;
- default:
- throw new Error("Unrecognized infix genfrac command");
- }
- return {
- type: "infix",
- replaceWith: replaceWith,
- };
-});
-
-// Row breaks for aligned data
-defineFunction(["\\\\", "\\cr"], {
- numArgs: 0,
- numOptionalArgs: 1,
- argTypes: ["size"],
-}, function(context, args) {
- var size = args[0];
- return {
- type: "cr",
- size: size,
- };
-});
-
-// Environment delimiters
-defineFunction(["\\begin", "\\end"], {
- numArgs: 1,
- argTypes: ["text"],
-}, function(context, args) {
- var nameGroup = args[0];
- if (nameGroup.type !== "ordgroup") {
- throw new ParseError(
- "Invalid environment name",
- context.lexer, context.positions[1]);
- }
- var name = "";
- for (var i = 0; i < nameGroup.value.length; ++i) {
- name += nameGroup.value[i].value;
- }
- return {
- type: "environment",
- name: name,
- namepos: context.positions[1],
- };
-});
diff --git a/webapp/non_npm_dependencies/katex/src/mathMLTree.js b/webapp/non_npm_dependencies/katex/src/mathMLTree.js
deleted file mode 100644
index 86e63562c..000000000
--- a/webapp/non_npm_dependencies/katex/src/mathMLTree.js
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * These objects store data about MathML nodes. This is the MathML equivalent
- * of the types in domTree.js. Since MathML handles its own rendering, and
- * since we're mainly using MathML to improve accessibility, we don't manage
- * any of the styling state that the plain DOM nodes do.
- *
- * The `toNode` and `toMarkup` functions work simlarly to how they do in
- * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.
- */
-
-var utils = require("./utils");
-
-/**
- * This node represents a general purpose MathML node of any type. The
- * constructor requires the type of node to create (for example, `"mo"` or
- * `"mspace"`, corresponding to `<mo>` and `<mspace>` tags).
- */
-function MathNode(type, children) {
- this.type = type;
- this.attributes = {};
- this.children = children || [];
-}
-
-/**
- * Sets an attribute on a MathML node. MathML depends on attributes to convey a
- * semantic content, so this is used heavily.
- */
-MathNode.prototype.setAttribute = function(name, value) {
- this.attributes[name] = value;
-};
-
-/**
- * Converts the math node into a MathML-namespaced DOM element.
- */
-MathNode.prototype.toNode = function() {
- var node = document.createElementNS(
- "http://www.w3.org/1998/Math/MathML", this.type);
-
- for (var attr in this.attributes) {
- if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
- node.setAttribute(attr, this.attributes[attr]);
- }
- }
-
- for (var i = 0; i < this.children.length; i++) {
- node.appendChild(this.children[i].toNode());
- }
-
- return node;
-};
-
-/**
- * Converts the math node into an HTML markup string.
- */
-MathNode.prototype.toMarkup = function() {
- var markup = "<" + this.type;
-
- // Add the attributes
- for (var attr in this.attributes) {
- if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
- markup += " " + attr + "=\"";
- markup += utils.escape(this.attributes[attr]);
- markup += "\"";
- }
- }
-
- markup += ">";
-
- for (var i = 0; i < this.children.length; i++) {
- markup += this.children[i].toMarkup();
- }
-
- markup += "</" + this.type + ">";
-
- return markup;
-};
-
-/**
- * This node represents a piece of text.
- */
-function TextNode(text) {
- this.text = text;
-}
-
-/**
- * Converts the text node into a DOM text node.
- */
-TextNode.prototype.toNode = function() {
- return document.createTextNode(this.text);
-};
-
-/**
- * Converts the text node into HTML markup (which is just the text itself).
- */
-TextNode.prototype.toMarkup = function() {
- return utils.escape(this.text);
-};
-
-module.exports = {
- MathNode: MathNode,
- TextNode: TextNode,
-};
diff --git a/webapp/non_npm_dependencies/katex/src/parseData.js b/webapp/non_npm_dependencies/katex/src/parseData.js
deleted file mode 100644
index be8dd67f4..000000000
--- a/webapp/non_npm_dependencies/katex/src/parseData.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * The resulting parse tree nodes of the parse tree.
- */
-function ParseNode(type, value, mode) {
- this.type = type;
- this.value = value;
- this.mode = mode;
-}
-
-module.exports = {
- ParseNode: ParseNode,
-};
-
diff --git a/webapp/non_npm_dependencies/katex/src/parseTree.js b/webapp/non_npm_dependencies/katex/src/parseTree.js
deleted file mode 100644
index 3adba8248..000000000
--- a/webapp/non_npm_dependencies/katex/src/parseTree.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Provides a single function for parsing an expression using a Parser
- * TODO(emily): Remove this
- */
-
-var Parser = require("./Parser");
-
-/**
- * Parses an expression using a Parser, then returns the parsed result.
- */
-var parseTree = function(toParse, settings) {
- var parser = new Parser(toParse, settings);
-
- return parser.parse();
-};
-
-module.exports = parseTree;
diff --git a/webapp/non_npm_dependencies/katex/src/symbols.js b/webapp/non_npm_dependencies/katex/src/symbols.js
deleted file mode 100644
index 6170cb5e7..000000000
--- a/webapp/non_npm_dependencies/katex/src/symbols.js
+++ /dev/null
@@ -1,620 +0,0 @@
-/**
- * This file holds a list of all no-argument functions and single-character
- * symbols (like 'a' or ';').
- *
- * For each of the symbols, there are three properties they can have:
- * - font (required): the font to be used for this symbol. Either "main" (the
- normal font), or "ams" (the ams fonts).
- * - group (required): the ParseNode group type the symbol should have (i.e.
- "textord", "mathord", etc).
- See https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types
- * - replace: the character that this symbol or function should be
- * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi
- * character in the main font).
- *
- * The outermost map in the table indicates what mode the symbols should be
- * accepted in (e.g. "math" or "text").
- */
-
-module.exports = {
- math: {},
- text: {},
-};
-
-function defineSymbol(mode, font, group, replace, name) {
- module.exports[mode][name] = {
- font: font,
- group: group,
- replace: replace,
- };
-}
-
-// Some abbreviations for commonly used strings.
-// This helps minify the code, and also spotting typos using jshint.
-
-// modes:
-var math = "math";
-var text = "text";
-
-// fonts:
-var main = "main";
-var ams = "ams";
-
-// groups:
-var accent = "accent";
-var bin = "bin";
-var close = "close";
-var inner = "inner";
-var mathord = "mathord";
-var op = "op";
-var open = "open";
-var punct = "punct";
-var rel = "rel";
-var spacing = "spacing";
-var textord = "textord";
-
-// Now comes the symbol table
-
-// Relation Symbols
-defineSymbol(math, main, rel, "\u2261", "\\equiv");
-defineSymbol(math, main, rel, "\u227a", "\\prec");
-defineSymbol(math, main, rel, "\u227b", "\\succ");
-defineSymbol(math, main, rel, "\u223c", "\\sim");
-defineSymbol(math, main, rel, "\u22a5", "\\perp");
-defineSymbol(math, main, rel, "\u2aaf", "\\preceq");
-defineSymbol(math, main, rel, "\u2ab0", "\\succeq");
-defineSymbol(math, main, rel, "\u2243", "\\simeq");
-defineSymbol(math, main, rel, "\u2223", "\\mid");
-defineSymbol(math, main, rel, "\u226a", "\\ll");
-defineSymbol(math, main, rel, "\u226b", "\\gg");
-defineSymbol(math, main, rel, "\u224d", "\\asymp");
-defineSymbol(math, main, rel, "\u2225", "\\parallel");
-defineSymbol(math, main, rel, "\u22c8", "\\bowtie");
-defineSymbol(math, main, rel, "\u2323", "\\smile");
-defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq");
-defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq");
-defineSymbol(math, main, rel, "\u2250", "\\doteq");
-defineSymbol(math, main, rel, "\u2322", "\\frown");
-defineSymbol(math, main, rel, "\u220b", "\\ni");
-defineSymbol(math, main, rel, "\u221d", "\\propto");
-defineSymbol(math, main, rel, "\u22a2", "\\vdash");
-defineSymbol(math, main, rel, "\u22a3", "\\dashv");
-defineSymbol(math, main, rel, "\u220b", "\\owns");
-
-// Punctuation
-defineSymbol(math, main, punct, "\u002e", "\\ldotp");
-defineSymbol(math, main, punct, "\u22c5", "\\cdotp");
-
-// Misc Symbols
-defineSymbol(math, main, textord, "\u0023", "\\#");
-defineSymbol(math, main, textord, "\u0026", "\\&");
-defineSymbol(math, main, textord, "\u2135", "\\aleph");
-defineSymbol(math, main, textord, "\u2200", "\\forall");
-defineSymbol(math, main, textord, "\u210f", "\\hbar");
-defineSymbol(math, main, textord, "\u2203", "\\exists");
-defineSymbol(math, main, textord, "\u2207", "\\nabla");
-defineSymbol(math, main, textord, "\u266d", "\\flat");
-defineSymbol(math, main, textord, "\u2113", "\\ell");
-defineSymbol(math, main, textord, "\u266e", "\\natural");
-defineSymbol(math, main, textord, "\u2663", "\\clubsuit");
-defineSymbol(math, main, textord, "\u2118", "\\wp");
-defineSymbol(math, main, textord, "\u266f", "\\sharp");
-defineSymbol(math, main, textord, "\u2662", "\\diamondsuit");
-defineSymbol(math, main, textord, "\u211c", "\\Re");
-defineSymbol(math, main, textord, "\u2661", "\\heartsuit");
-defineSymbol(math, main, textord, "\u2111", "\\Im");
-defineSymbol(math, main, textord, "\u2660", "\\spadesuit");
-
-// Math and Text
-defineSymbol(math, main, textord, "\u2020", "\\dag");
-defineSymbol(math, main, textord, "\u2021", "\\ddag");
-
-// Large Delimiters
-defineSymbol(math, main, close, "\u23b1", "\\rmoustache");
-defineSymbol(math, main, open, "\u23b0", "\\lmoustache");
-defineSymbol(math, main, close, "\u27ef", "\\rgroup");
-defineSymbol(math, main, open, "\u27ee", "\\lgroup");
-
-// Binary Operators
-defineSymbol(math, main, bin, "\u2213", "\\mp");
-defineSymbol(math, main, bin, "\u2296", "\\ominus");
-defineSymbol(math, main, bin, "\u228e", "\\uplus");
-defineSymbol(math, main, bin, "\u2293", "\\sqcap");
-defineSymbol(math, main, bin, "\u2217", "\\ast");
-defineSymbol(math, main, bin, "\u2294", "\\sqcup");
-defineSymbol(math, main, bin, "\u25ef", "\\bigcirc");
-defineSymbol(math, main, bin, "\u2219", "\\bullet");
-defineSymbol(math, main, bin, "\u2021", "\\ddagger");
-defineSymbol(math, main, bin, "\u2240", "\\wr");
-defineSymbol(math, main, bin, "\u2a3f", "\\amalg");
-
-// Arrow Symbols
-defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow");
-defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow");
-defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow");
-defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow");
-defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow");
-defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow");
-defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow");
-defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow");
-defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow");
-defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow");
-defineSymbol(math, main, rel, "\u21a6", "\\mapsto");
-defineSymbol(math, main, rel, "\u27fc", "\\longmapsto");
-defineSymbol(math, main, rel, "\u2197", "\\nearrow");
-defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow");
-defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow");
-defineSymbol(math, main, rel, "\u2198", "\\searrow");
-defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup");
-defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup");
-defineSymbol(math, main, rel, "\u2199", "\\swarrow");
-defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown");
-defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown");
-defineSymbol(math, main, rel, "\u2196", "\\nwarrow");
-defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons");
-
-// AMS Negated Binary Relations
-defineSymbol(math, ams, rel, "\u226e", "\\nless");
-defineSymbol(math, ams, rel, "\ue010", "\\nleqslant");
-defineSymbol(math, ams, rel, "\ue011", "\\nleqq");
-defineSymbol(math, ams, rel, "\u2a87", "\\lneq");
-defineSymbol(math, ams, rel, "\u2268", "\\lneqq");
-defineSymbol(math, ams, rel, "\ue00c", "\\lvertneqq");
-defineSymbol(math, ams, rel, "\u22e6", "\\lnsim");
-defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox");
-defineSymbol(math, ams, rel, "\u2280", "\\nprec");
-defineSymbol(math, ams, rel, "\u22e0", "\\npreceq");
-defineSymbol(math, ams, rel, "\u22e8", "\\precnsim");
-defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox");
-defineSymbol(math, ams, rel, "\u2241", "\\nsim");
-defineSymbol(math, ams, rel, "\ue006", "\\nshortmid");
-defineSymbol(math, ams, rel, "\u2224", "\\nmid");
-defineSymbol(math, ams, rel, "\u22ac", "\\nvdash");
-defineSymbol(math, ams, rel, "\u22ad", "\\nvDash");
-defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft");
-defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq");
-defineSymbol(math, ams, rel, "\u228a", "\\subsetneq");
-defineSymbol(math, ams, rel, "\ue01a", "\\varsubsetneq");
-defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq");
-defineSymbol(math, ams, rel, "\ue017", "\\varsubsetneqq");
-defineSymbol(math, ams, rel, "\u226f", "\\ngtr");
-defineSymbol(math, ams, rel, "\ue00f", "\\ngeqslant");
-defineSymbol(math, ams, rel, "\ue00e", "\\ngeqq");
-defineSymbol(math, ams, rel, "\u2a88", "\\gneq");
-defineSymbol(math, ams, rel, "\u2269", "\\gneqq");
-defineSymbol(math, ams, rel, "\ue00d", "\\gvertneqq");
-defineSymbol(math, ams, rel, "\u22e7", "\\gnsim");
-defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox");
-defineSymbol(math, ams, rel, "\u2281", "\\nsucc");
-defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq");
-defineSymbol(math, ams, rel, "\u22e9", "\\succnsim");
-defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox");
-defineSymbol(math, ams, rel, "\u2246", "\\ncong");
-defineSymbol(math, ams, rel, "\ue007", "\\nshortparallel");
-defineSymbol(math, ams, rel, "\u2226", "\\nparallel");
-defineSymbol(math, ams, rel, "\u22af", "\\nVDash");
-defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright");
-defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq");
-defineSymbol(math, ams, rel, "\ue018", "\\nsupseteqq");
-defineSymbol(math, ams, rel, "\u228b", "\\supsetneq");
-defineSymbol(math, ams, rel, "\ue01b", "\\varsupsetneq");
-defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq");
-defineSymbol(math, ams, rel, "\ue019", "\\varsupsetneqq");
-defineSymbol(math, ams, rel, "\u22ae", "\\nVdash");
-defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq");
-defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq");
-defineSymbol(math, ams, rel, "\ue016", "\\nsubseteqq");
-defineSymbol(math, ams, bin, "\u22b4", "\\unlhd");
-defineSymbol(math, ams, bin, "\u22b5", "\\unrhd");
-
-// AMS Negated Arrows
-defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow");
-defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow");
-defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow");
-defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow");
-defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow");
-defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow");
-
-// AMS Misc
-defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle");
-defineSymbol(math, ams, textord, "\u210f", "\\hslash");
-defineSymbol(math, ams, textord, "\u25bd", "\\triangledown");
-defineSymbol(math, ams, textord, "\u25ca", "\\lozenge");
-defineSymbol(math, ams, textord, "\u24c8", "\\circledS");
-defineSymbol(math, ams, textord, "\u00ae", "\\circledR");
-defineSymbol(math, ams, textord, "\u2221", "\\measuredangle");
-defineSymbol(math, ams, textord, "\u2204", "\\nexists");
-defineSymbol(math, ams, textord, "\u2127", "\\mho");
-defineSymbol(math, ams, textord, "\u2132", "\\Finv");
-defineSymbol(math, ams, textord, "\u2141", "\\Game");
-defineSymbol(math, ams, textord, "\u006b", "\\Bbbk");
-defineSymbol(math, ams, textord, "\u2035", "\\backprime");
-defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle");
-defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown");
-defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare");
-defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge");
-defineSymbol(math, ams, textord, "\u2605", "\\bigstar");
-defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle");
-defineSymbol(math, ams, textord, "\u2201", "\\complement");
-defineSymbol(math, ams, textord, "\u00f0", "\\eth");
-defineSymbol(math, ams, textord, "\u2571", "\\diagup");
-defineSymbol(math, ams, textord, "\u2572", "\\diagdown");
-defineSymbol(math, ams, textord, "\u25a1", "\\square");
-defineSymbol(math, ams, textord, "\u25a1", "\\Box");
-defineSymbol(math, ams, textord, "\u25ca", "\\Diamond");
-defineSymbol(math, ams, textord, "\u00a5", "\\yen");
-defineSymbol(math, ams, textord, "\u2713", "\\checkmark");
-
-// AMS Hebrew
-defineSymbol(math, ams, textord, "\u2136", "\\beth");
-defineSymbol(math, ams, textord, "\u2138", "\\daleth");
-defineSymbol(math, ams, textord, "\u2137", "\\gimel");
-
-// AMS Greek
-defineSymbol(math, ams, textord, "\u03dd", "\\digamma");
-defineSymbol(math, ams, textord, "\u03f0", "\\varkappa");
-
-// AMS Delimiters
-defineSymbol(math, ams, open, "\u250c", "\\ulcorner");
-defineSymbol(math, ams, close, "\u2510", "\\urcorner");
-defineSymbol(math, ams, open, "\u2514", "\\llcorner");
-defineSymbol(math, ams, close, "\u2518", "\\lrcorner");
-
-// AMS Binary Relations
-defineSymbol(math, ams, rel, "\u2266", "\\leqq");
-defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant");
-defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless");
-defineSymbol(math, ams, rel, "\u2272", "\\lesssim");
-defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox");
-defineSymbol(math, ams, rel, "\u224a", "\\approxeq");
-defineSymbol(math, ams, bin, "\u22d6", "\\lessdot");
-defineSymbol(math, ams, rel, "\u22d8", "\\lll");
-defineSymbol(math, ams, rel, "\u2276", "\\lessgtr");
-defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr");
-defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr");
-defineSymbol(math, ams, rel, "\u2251", "\\doteqdot");
-defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq");
-defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq");
-defineSymbol(math, ams, rel, "\u223d", "\\backsim");
-defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq");
-defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq");
-defineSymbol(math, ams, rel, "\u22d0", "\\Subset");
-defineSymbol(math, ams, rel, "\u228f", "\\sqsubset");
-defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq");
-defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec");
-defineSymbol(math, ams, rel, "\u227e", "\\precsim");
-defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox");
-defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft");
-defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq");
-defineSymbol(math, ams, rel, "\u22a8", "\\vDash");
-defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash");
-defineSymbol(math, ams, rel, "\u2323", "\\smallsmile");
-defineSymbol(math, ams, rel, "\u2322", "\\smallfrown");
-defineSymbol(math, ams, rel, "\u224f", "\\bumpeq");
-defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq");
-defineSymbol(math, ams, rel, "\u2267", "\\geqq");
-defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant");
-defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr");
-defineSymbol(math, ams, rel, "\u2273", "\\gtrsim");
-defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox");
-defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot");
-defineSymbol(math, ams, rel, "\u22d9", "\\ggg");
-defineSymbol(math, ams, rel, "\u2277", "\\gtrless");
-defineSymbol(math, ams, rel, "\u22db", "\\gtreqless");
-defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless");
-defineSymbol(math, ams, rel, "\u2256", "\\eqcirc");
-defineSymbol(math, ams, rel, "\u2257", "\\circeq");
-defineSymbol(math, ams, rel, "\u225c", "\\triangleq");
-defineSymbol(math, ams, rel, "\u223c", "\\thicksim");
-defineSymbol(math, ams, rel, "\u2248", "\\thickapprox");
-defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq");
-defineSymbol(math, ams, rel, "\u22d1", "\\Supset");
-defineSymbol(math, ams, rel, "\u2290", "\\sqsupset");
-defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq");
-defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc");
-defineSymbol(math, ams, rel, "\u227f", "\\succsim");
-defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox");
-defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright");
-defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq");
-defineSymbol(math, ams, rel, "\u22a9", "\\Vdash");
-defineSymbol(math, ams, rel, "\u2223", "\\shortmid");
-defineSymbol(math, ams, rel, "\u2225", "\\shortparallel");
-defineSymbol(math, ams, rel, "\u226c", "\\between");
-defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork");
-defineSymbol(math, ams, rel, "\u221d", "\\varpropto");
-defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft");
-defineSymbol(math, ams, rel, "\u2234", "\\therefore");
-defineSymbol(math, ams, rel, "\u220d", "\\backepsilon");
-defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright");
-defineSymbol(math, ams, rel, "\u2235", "\\because");
-defineSymbol(math, ams, rel, "\u22d8", "\\llless");
-defineSymbol(math, ams, rel, "\u22d9", "\\gggtr");
-defineSymbol(math, ams, bin, "\u22b2", "\\lhd");
-defineSymbol(math, ams, bin, "\u22b3", "\\rhd");
-defineSymbol(math, ams, rel, "\u2242", "\\eqsim");
-defineSymbol(math, main, rel, "\u22c8", "\\Join");
-defineSymbol(math, ams, rel, "\u2251", "\\Doteq");
-
-// AMS Binary Operators
-defineSymbol(math, ams, bin, "\u2214", "\\dotplus");
-defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus");
-defineSymbol(math, ams, bin, "\u22d2", "\\Cap");
-defineSymbol(math, ams, bin, "\u22d3", "\\Cup");
-defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge");
-defineSymbol(math, ams, bin, "\u229f", "\\boxminus");
-defineSymbol(math, ams, bin, "\u229e", "\\boxplus");
-defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes");
-defineSymbol(math, ams, bin, "\u22c9", "\\ltimes");
-defineSymbol(math, ams, bin, "\u22ca", "\\rtimes");
-defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes");
-defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes");
-defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge");
-defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee");
-defineSymbol(math, ams, bin, "\u229d", "\\circleddash");
-defineSymbol(math, ams, bin, "\u229b", "\\circledast");
-defineSymbol(math, ams, bin, "\u22c5", "\\centerdot");
-defineSymbol(math, ams, bin, "\u22ba", "\\intercal");
-defineSymbol(math, ams, bin, "\u22d2", "\\doublecap");
-defineSymbol(math, ams, bin, "\u22d3", "\\doublecup");
-defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes");
-
-// AMS Arrows
-defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow");
-defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow");
-defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows");
-defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows");
-defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow");
-defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow");
-defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail");
-defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft");
-defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons");
-defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft");
-defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft");
-defineSymbol(math, ams, rel, "\u21b0", "\\Lsh");
-defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows");
-defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft");
-defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft");
-defineSymbol(math, ams, rel, "\u22b8", "\\multimap");
-defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow");
-defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows");
-defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows");
-defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow");
-defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail");
-defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright");
-defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright");
-defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright");
-defineSymbol(math, ams, rel, "\u21b1", "\\Rsh");
-defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows");
-defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright");
-defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright");
-defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow");
-defineSymbol(math, ams, rel, "\u21dd", "\\leadsto");
-defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow");
-defineSymbol(math, ams, rel, "\u21be", "\\restriction");
-
-defineSymbol(math, main, textord, "\u2018", "`");
-defineSymbol(math, main, textord, "$", "\\$");
-defineSymbol(math, main, textord, "%", "\\%");
-defineSymbol(math, main, textord, "_", "\\_");
-defineSymbol(math, main, textord, "\u2220", "\\angle");
-defineSymbol(math, main, textord, "\u221e", "\\infty");
-defineSymbol(math, main, textord, "\u2032", "\\prime");
-defineSymbol(math, main, textord, "\u25b3", "\\triangle");
-defineSymbol(math, main, textord, "\u0393", "\\Gamma");
-defineSymbol(math, main, textord, "\u0394", "\\Delta");
-defineSymbol(math, main, textord, "\u0398", "\\Theta");
-defineSymbol(math, main, textord, "\u039b", "\\Lambda");
-defineSymbol(math, main, textord, "\u039e", "\\Xi");
-defineSymbol(math, main, textord, "\u03a0", "\\Pi");
-defineSymbol(math, main, textord, "\u03a3", "\\Sigma");
-defineSymbol(math, main, textord, "\u03a5", "\\Upsilon");
-defineSymbol(math, main, textord, "\u03a6", "\\Phi");
-defineSymbol(math, main, textord, "\u03a8", "\\Psi");
-defineSymbol(math, main, textord, "\u03a9", "\\Omega");
-defineSymbol(math, main, textord, "\u00ac", "\\neg");
-defineSymbol(math, main, textord, "\u00ac", "\\lnot");
-defineSymbol(math, main, textord, "\u22a4", "\\top");
-defineSymbol(math, main, textord, "\u22a5", "\\bot");
-defineSymbol(math, main, textord, "\u2205", "\\emptyset");
-defineSymbol(math, ams, textord, "\u2205", "\\varnothing");
-defineSymbol(math, main, mathord, "\u03b1", "\\alpha");
-defineSymbol(math, main, mathord, "\u03b2", "\\beta");
-defineSymbol(math, main, mathord, "\u03b3", "\\gamma");
-defineSymbol(math, main, mathord, "\u03b4", "\\delta");
-defineSymbol(math, main, mathord, "\u03f5", "\\epsilon");
-defineSymbol(math, main, mathord, "\u03b6", "\\zeta");
-defineSymbol(math, main, mathord, "\u03b7", "\\eta");
-defineSymbol(math, main, mathord, "\u03b8", "\\theta");
-defineSymbol(math, main, mathord, "\u03b9", "\\iota");
-defineSymbol(math, main, mathord, "\u03ba", "\\kappa");
-defineSymbol(math, main, mathord, "\u03bb", "\\lambda");
-defineSymbol(math, main, mathord, "\u03bc", "\\mu");
-defineSymbol(math, main, mathord, "\u03bd", "\\nu");
-defineSymbol(math, main, mathord, "\u03be", "\\xi");
-defineSymbol(math, main, mathord, "o", "\\omicron");
-defineSymbol(math, main, mathord, "\u03c0", "\\pi");
-defineSymbol(math, main, mathord, "\u03c1", "\\rho");
-defineSymbol(math, main, mathord, "\u03c3", "\\sigma");
-defineSymbol(math, main, mathord, "\u03c4", "\\tau");
-defineSymbol(math, main, mathord, "\u03c5", "\\upsilon");
-defineSymbol(math, main, mathord, "\u03d5", "\\phi");
-defineSymbol(math, main, mathord, "\u03c7", "\\chi");
-defineSymbol(math, main, mathord, "\u03c8", "\\psi");
-defineSymbol(math, main, mathord, "\u03c9", "\\omega");
-defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon");
-defineSymbol(math, main, mathord, "\u03d1", "\\vartheta");
-defineSymbol(math, main, mathord, "\u03d6", "\\varpi");
-defineSymbol(math, main, mathord, "\u03f1", "\\varrho");
-defineSymbol(math, main, mathord, "\u03c2", "\\varsigma");
-defineSymbol(math, main, mathord, "\u03c6", "\\varphi");
-defineSymbol(math, main, bin, "\u2217", "*");
-defineSymbol(math, main, bin, "+", "+");
-defineSymbol(math, main, bin, "\u2212", "-");
-defineSymbol(math, main, bin, "\u22c5", "\\cdot");
-defineSymbol(math, main, bin, "\u2218", "\\circ");
-defineSymbol(math, main, bin, "\u00f7", "\\div");
-defineSymbol(math, main, bin, "\u00b1", "\\pm");
-defineSymbol(math, main, bin, "\u00d7", "\\times");
-defineSymbol(math, main, bin, "\u2229", "\\cap");
-defineSymbol(math, main, bin, "\u222a", "\\cup");
-defineSymbol(math, main, bin, "\u2216", "\\setminus");
-defineSymbol(math, main, bin, "\u2227", "\\land");
-defineSymbol(math, main, bin, "\u2228", "\\lor");
-defineSymbol(math, main, bin, "\u2227", "\\wedge");
-defineSymbol(math, main, bin, "\u2228", "\\vee");
-defineSymbol(math, main, textord, "\u221a", "\\surd");
-defineSymbol(math, main, open, "(", "(");
-defineSymbol(math, main, open, "[", "[");
-defineSymbol(math, main, open, "\u27e8", "\\langle");
-defineSymbol(math, main, open, "\u2223", "\\lvert");
-defineSymbol(math, main, open, "\u2225", "\\lVert");
-defineSymbol(math, main, close, ")", ")");
-defineSymbol(math, main, close, "]", "]");
-defineSymbol(math, main, close, "?", "?");
-defineSymbol(math, main, close, "!", "!");
-defineSymbol(math, main, close, "\u27e9", "\\rangle");
-defineSymbol(math, main, close, "\u2223", "\\rvert");
-defineSymbol(math, main, close, "\u2225", "\\rVert");
-defineSymbol(math, main, rel, "=", "=");
-defineSymbol(math, main, rel, "<", "<");
-defineSymbol(math, main, rel, ">", ">");
-defineSymbol(math, main, rel, ":", ":");
-defineSymbol(math, main, rel, "\u2248", "\\approx");
-defineSymbol(math, main, rel, "\u2245", "\\cong");
-defineSymbol(math, main, rel, "\u2265", "\\ge");
-defineSymbol(math, main, rel, "\u2265", "\\geq");
-defineSymbol(math, main, rel, "\u2190", "\\gets");
-defineSymbol(math, main, rel, ">", "\\gt");
-defineSymbol(math, main, rel, "\u2208", "\\in");
-defineSymbol(math, main, rel, "\u2209", "\\notin");
-defineSymbol(math, main, rel, "\u2282", "\\subset");
-defineSymbol(math, main, rel, "\u2283", "\\supset");
-defineSymbol(math, main, rel, "\u2286", "\\subseteq");
-defineSymbol(math, main, rel, "\u2287", "\\supseteq");
-defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq");
-defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq");
-defineSymbol(math, main, rel, "\u22a8", "\\models");
-defineSymbol(math, main, rel, "\u2190", "\\leftarrow");
-defineSymbol(math, main, rel, "\u2264", "\\le");
-defineSymbol(math, main, rel, "\u2264", "\\leq");
-defineSymbol(math, main, rel, "<", "\\lt");
-defineSymbol(math, main, rel, "\u2260", "\\ne");
-defineSymbol(math, main, rel, "\u2260", "\\neq");
-defineSymbol(math, main, rel, "\u2192", "\\rightarrow");
-defineSymbol(math, main, rel, "\u2192", "\\to");
-defineSymbol(math, ams, rel, "\u2271", "\\ngeq");
-defineSymbol(math, ams, rel, "\u2270", "\\nleq");
-defineSymbol(math, main, spacing, null, "\\!");
-defineSymbol(math, main, spacing, "\u00a0", "\\ ");
-defineSymbol(math, main, spacing, "\u00a0", "~");
-defineSymbol(math, main, spacing, null, "\\,");
-defineSymbol(math, main, spacing, null, "\\:");
-defineSymbol(math, main, spacing, null, "\\;");
-defineSymbol(math, main, spacing, null, "\\enspace");
-defineSymbol(math, main, spacing, null, "\\qquad");
-defineSymbol(math, main, spacing, null, "\\quad");
-defineSymbol(math, main, spacing, "\u00a0", "\\space");
-defineSymbol(math, main, punct, ",", ",");
-defineSymbol(math, main, punct, ";", ";");
-defineSymbol(math, main, punct, ":", "\\colon");
-defineSymbol(math, ams, bin, "\u22bc", "\\barwedge");
-defineSymbol(math, ams, bin, "\u22bb", "\\veebar");
-defineSymbol(math, main, bin, "\u2299", "\\odot");
-defineSymbol(math, main, bin, "\u2295", "\\oplus");
-defineSymbol(math, main, bin, "\u2297", "\\otimes");
-defineSymbol(math, main, textord, "\u2202", "\\partial");
-defineSymbol(math, main, bin, "\u2298", "\\oslash");
-defineSymbol(math, ams, bin, "\u229a", "\\circledcirc");
-defineSymbol(math, ams, bin, "\u22a1", "\\boxdot");
-defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup");
-defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown");
-defineSymbol(math, main, bin, "\u2020", "\\dagger");
-defineSymbol(math, main, bin, "\u22c4", "\\diamond");
-defineSymbol(math, main, bin, "\u22c6", "\\star");
-defineSymbol(math, main, bin, "\u25c3", "\\triangleleft");
-defineSymbol(math, main, bin, "\u25b9", "\\triangleright");
-defineSymbol(math, main, open, "{", "\\{");
-defineSymbol(math, main, close, "}", "\\}");
-defineSymbol(math, main, open, "{", "\\lbrace");
-defineSymbol(math, main, close, "}", "\\rbrace");
-defineSymbol(math, main, open, "[", "\\lbrack");
-defineSymbol(math, main, close, "]", "\\rbrack");
-defineSymbol(math, main, open, "\u230a", "\\lfloor");
-defineSymbol(math, main, close, "\u230b", "\\rfloor");
-defineSymbol(math, main, open, "\u2308", "\\lceil");
-defineSymbol(math, main, close, "\u2309", "\\rceil");
-defineSymbol(math, main, textord, "\\", "\\backslash");
-defineSymbol(math, main, textord, "\u2223", "|");
-defineSymbol(math, main, textord, "\u2223", "\\vert");
-defineSymbol(math, main, textord, "\u2225", "\\|");
-defineSymbol(math, main, textord, "\u2225", "\\Vert");
-defineSymbol(math, main, rel, "\u2191", "\\uparrow");
-defineSymbol(math, main, rel, "\u21d1", "\\Uparrow");
-defineSymbol(math, main, rel, "\u2193", "\\downarrow");
-defineSymbol(math, main, rel, "\u21d3", "\\Downarrow");
-defineSymbol(math, main, rel, "\u2195", "\\updownarrow");
-defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow");
-defineSymbol(math, math, op, "\u2210", "\\coprod");
-defineSymbol(math, math, op, "\u22c1", "\\bigvee");
-defineSymbol(math, math, op, "\u22c0", "\\bigwedge");
-defineSymbol(math, math, op, "\u2a04", "\\biguplus");
-defineSymbol(math, math, op, "\u22c2", "\\bigcap");
-defineSymbol(math, math, op, "\u22c3", "\\bigcup");
-defineSymbol(math, math, op, "\u222b", "\\int");
-defineSymbol(math, math, op, "\u222b", "\\intop");
-defineSymbol(math, math, op, "\u222c", "\\iint");
-defineSymbol(math, math, op, "\u222d", "\\iiint");
-defineSymbol(math, math, op, "\u220f", "\\prod");
-defineSymbol(math, math, op, "\u2211", "\\sum");
-defineSymbol(math, math, op, "\u2a02", "\\bigotimes");
-defineSymbol(math, math, op, "\u2a01", "\\bigoplus");
-defineSymbol(math, math, op, "\u2a00", "\\bigodot");
-defineSymbol(math, math, op, "\u222e", "\\oint");
-defineSymbol(math, math, op, "\u2a06", "\\bigsqcup");
-defineSymbol(math, math, op, "\u222b", "\\smallint");
-defineSymbol(math, main, inner, "\u2026", "\\ldots");
-defineSymbol(math, main, inner, "\u22ef", "\\cdots");
-defineSymbol(math, main, inner, "\u22f1", "\\ddots");
-defineSymbol(math, main, textord, "\u22ee", "\\vdots");
-defineSymbol(math, main, accent, "\u00b4", "\\acute");
-defineSymbol(math, main, accent, "\u0060", "\\grave");
-defineSymbol(math, main, accent, "\u00a8", "\\ddot");
-defineSymbol(math, main, accent, "\u007e", "\\tilde");
-defineSymbol(math, main, accent, "\u00af", "\\bar");
-defineSymbol(math, main, accent, "\u02d8", "\\breve");
-defineSymbol(math, main, accent, "\u02c7", "\\check");
-defineSymbol(math, main, accent, "\u005e", "\\hat");
-defineSymbol(math, main, accent, "\u20d7", "\\vec");
-defineSymbol(math, main, accent, "\u02d9", "\\dot");
-defineSymbol(math, main, mathord, "\u0131", "\\imath");
-defineSymbol(math, main, mathord, "\u0237", "\\jmath");
-
-defineSymbol(text, main, spacing, "\u00a0", "\\ ");
-defineSymbol(text, main, spacing, "\u00a0", " ");
-defineSymbol(text, main, spacing, "\u00a0", "~");
-
-// There are lots of symbols which are the same, so we add them in afterwards.
-var i;
-var ch;
-
-// All of these are textords in math mode
-var mathTextSymbols = "0123456789/@.\"";
-for (i = 0; i < mathTextSymbols.length; i++) {
- ch = mathTextSymbols.charAt(i);
- defineSymbol(math, main, textord, ch, ch);
-}
-
-// All of these are textords in text mode
-var textSymbols = "0123456789`!@*()-=+[]'\";:?/.,";
-for (i = 0; i < textSymbols.length; i++) {
- ch = textSymbols.charAt(i);
- defineSymbol(text, main, textord, ch, ch);
-}
-
-// All of these are textords in text mode, and mathords in math mode
-var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-for (i = 0; i < letters.length; i++) {
- ch = letters.charAt(i);
- defineSymbol(math, main, mathord, ch, ch);
- defineSymbol(text, main, textord, ch, ch);
-}
diff --git a/webapp/non_npm_dependencies/katex/src/utils.js b/webapp/non_npm_dependencies/katex/src/utils.js
deleted file mode 100644
index f9e57cc65..000000000
--- a/webapp/non_npm_dependencies/katex/src/utils.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * This file contains a list of utility functions which are useful in other
- * files.
- */
-
-/**
- * Provide an `indexOf` function which works in IE8, but defers to native if
- * possible.
- */
-var nativeIndexOf = Array.prototype.indexOf;
-var indexOf = function(list, elem) {
- if (list == null) {
- return -1;
- }
- if (nativeIndexOf && list.indexOf === nativeIndexOf) {
- return list.indexOf(elem);
- }
- var i = 0;
- var l = list.length;
- for (; i < l; i++) {
- if (list[i] === elem) {
- return i;
- }
- }
- return -1;
-};
-
-/**
- * Return whether an element is contained in a list
- */
-var contains = function(list, elem) {
- return indexOf(list, elem) !== -1;
-};
-
-/**
- * Provide a default value if a setting is undefined
- */
-var deflt = function(setting, defaultIfUndefined) {
- return setting === undefined ? defaultIfUndefined : setting;
-};
-
-// hyphenate and escape adapted from Facebook's React under Apache 2 license
-
-var uppercase = /([A-Z])/g;
-var hyphenate = function(str) {
- return str.replace(uppercase, "-$1").toLowerCase();
-};
-
-var ESCAPE_LOOKUP = {
- "&": "&amp;",
- ">": "&gt;",
- "<": "&lt;",
- "\"": "&quot;",
- "'": "&#x27;",
-};
-
-var ESCAPE_REGEX = /[&><"']/g;
-
-function escaper(match) {
- return ESCAPE_LOOKUP[match];
-}
-
-/**
- * Escapes text to prevent scripting attacks.
- *
- * @param {*} text Text value to escape.
- * @return {string} An escaped string.
- */
-function escape(text) {
- return ("" + text).replace(ESCAPE_REGEX, escaper);
-}
-
-/**
- * A function to set the text content of a DOM element in all supported
- * browsers. Note that we don't define this if there is no document.
- */
-var setTextContent;
-if (typeof document !== "undefined") {
- var testNode = document.createElement("span");
- if ("textContent" in testNode) {
- setTextContent = function(node, text) {
- node.textContent = text;
- };
- } else {
- setTextContent = function(node, text) {
- node.innerText = text;
- };
- }
-}
-
-/**
- * A function to clear a node.
- */
-function clearNode(node) {
- setTextContent(node, "");
-}
-
-module.exports = {
- contains: contains,
- deflt: deflt,
- escape: escape,
- hyphenate: hyphenate,
- indexOf: indexOf,
- setTextContent: setTextContent,
- clearNode: clearNode,
-};