katex 0.10.0-rc → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +214 -126
- package/README.md +18 -17
- package/cli.js +5 -1
- package/contrib/auto-render/README.md +1 -1
- package/contrib/auto-render/auto-render.js +4 -1
- package/contrib/auto-render/test/auto-render-spec.js +17 -0
- package/contrib/copy-tex/README.md +8 -2
- package/contrib/copy-tex/copy-tex.js +0 -1
- package/contrib/copy-tex/copy-tex.webpack.js +6 -0
- package/contrib/mathtex-script-type/README.md +10 -6
- package/contrib/mhchem/README.md +19 -0
- package/contrib/mhchem/mhchem.js +1695 -0
- package/contrib/mhchem/mhchem.patch +235 -0
- package/dist/README.md +18 -17
- package/dist/contrib/auto-render.js +179 -161
- package/dist/contrib/auto-render.min.js +1 -1
- package/dist/contrib/auto-render.mjs +215 -0
- package/dist/contrib/copy-tex.js +84 -62
- package/dist/contrib/copy-tex.min.css +1 -1
- package/dist/contrib/copy-tex.min.js +1 -1
- package/dist/contrib/copy-tex.mjs +85 -0
- package/dist/contrib/mathtex-script-type.js +17 -14
- package/dist/contrib/mathtex-script-type.mjs +24 -0
- package/dist/contrib/mhchem.js +3241 -0
- package/dist/contrib/mhchem.min.js +1 -0
- package/dist/contrib/mhchem.mjs +3109 -0
- package/dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Script-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/dist/katex.css +24 -9
- package/dist/katex.js +13295 -12413
- package/dist/katex.min.css +1 -1
- package/dist/katex.min.js +1 -1
- package/dist/katex.mjs +13388 -11826
- package/katex.js +1 -2
- package/package.json +60 -48
- package/src/Lexer.js +25 -25
- package/src/MacroExpander.js +0 -1
- package/src/Options.js +11 -75
- package/src/Parser.js +231 -313
- package/src/Settings.js +6 -0
- package/src/buildCommon.js +140 -103
- package/src/buildHTML.js +125 -121
- package/src/buildMathML.js +14 -4
- package/src/buildTree.js +16 -10
- package/src/delimiter.js +4 -3
- package/src/domTree.js +91 -44
- package/src/environments/array.js +120 -7
- package/src/fontMetrics.js +3 -2
- package/src/functions/arrow.js +21 -7
- package/src/functions/color.js +2 -37
- package/src/functions/delimsizing.js +18 -11
- package/src/functions/enclose.js +19 -4
- package/src/functions/environment.js +35 -4
- package/src/functions/font.js +1 -2
- package/src/functions/genfrac.js +35 -20
- package/src/functions/href.js +5 -3
- package/src/functions/includegraphics.js +146 -0
- package/src/functions/mclass.js +1 -0
- package/src/functions/op.js +21 -32
- package/src/functions/operatorname.js +1 -2
- package/src/functions/ordgroup.js +4 -0
- package/src/functions/phantom.js +7 -3
- package/src/functions/rule.js +20 -9
- package/src/functions/sizing.js +2 -4
- package/src/functions/smash.js +5 -2
- package/src/functions/sqrt.js +1 -4
- package/src/functions/styling.js +0 -1
- package/src/functions/supsub.js +6 -2
- package/src/functions/symbolsOp.js +4 -0
- package/src/functions/symbolsSpacing.js +29 -6
- package/src/functions/tag.js +20 -4
- package/src/functions/text.js +6 -4
- package/src/functions/verb.js +16 -4
- package/src/functions.js +2 -0
- package/src/katex.less +35 -12
- package/src/macros.js +161 -36
- package/src/mathMLTree.js +17 -19
- package/src/parseNode.js +27 -1
- package/src/stretchy.js +3 -1
- package/src/svgGeometry.js +1 -1
- package/src/symbols.js +39 -17
- package/src/tree.js +0 -4
- package/src/types.js +4 -3
- package/src/unicodeMake.js +1 -1
- package/src/utils.js +1 -62
- package/src/wide-character.js +2 -2
package/katex.js
CHANGED
|
@@ -22,7 +22,6 @@ import {
|
|
|
22
22
|
PathNode,
|
|
23
23
|
LineNode,
|
|
24
24
|
} from "./src/domTree";
|
|
25
|
-
import utils from "./src/utils";
|
|
26
25
|
|
|
27
26
|
import type {SettingsOptions} from "./src/Settings";
|
|
28
27
|
import type {AnyParseNode} from "./src/parseNode";
|
|
@@ -42,7 +41,7 @@ let render = function(
|
|
|
42
41
|
baseNode: Node,
|
|
43
42
|
options: SettingsOptions,
|
|
44
43
|
) {
|
|
45
|
-
|
|
44
|
+
baseNode.textContent = "";
|
|
46
45
|
const node = renderToDomTree(expression, options).toNode();
|
|
47
46
|
baseNode.appendChild(node);
|
|
48
47
|
};
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "katex",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"description": "Fast math typesetting for the web.",
|
|
5
|
-
"main": "dist/katex",
|
|
6
|
-
"
|
|
5
|
+
"main": "dist/katex.js",
|
|
6
|
+
"homepage": "https://katex.org",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "git://github.com/
|
|
9
|
+
"url": "git://github.com/KaTeX/KaTeX.git"
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
12
|
"katex.js",
|
|
@@ -17,54 +17,60 @@
|
|
|
17
17
|
],
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"devDependencies": {
|
|
20
|
-
"babel
|
|
21
|
-
"babel-
|
|
22
|
-
"babel-
|
|
23
|
-
"babel-
|
|
24
|
-
"babel-
|
|
25
|
-
"babel
|
|
20
|
+
"@babel/core": "^7.3.3",
|
|
21
|
+
"@babel/plugin-proposal-class-properties": "^7.3.3",
|
|
22
|
+
"@babel/plugin-transform-runtime": "^7.2.0",
|
|
23
|
+
"@babel/preset-env": "^7.3.1",
|
|
24
|
+
"@babel/preset-flow": "^7.0.0",
|
|
25
|
+
"@babel/register": "^7.0.0",
|
|
26
|
+
"@babel/runtime": "^7.3.1",
|
|
27
|
+
"babel-eslint": "^10.0.1",
|
|
28
|
+
"babel-jest": "^24.1.0",
|
|
29
|
+
"babel-loader": "^8.0.5",
|
|
30
|
+
"babel-plugin-istanbul": "^5.1.1",
|
|
26
31
|
"babel-plugin-version-inline": "^1.0.0",
|
|
27
|
-
"babel-preset-es2015": "^6.18.0",
|
|
28
|
-
"babel-preset-flow": "^6.23.0",
|
|
29
|
-
"babel-register": "^6.26.0",
|
|
30
32
|
"benchmark": "^2.1.4",
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"eslint
|
|
37
|
-
"eslint-plugin-
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
33
|
+
"browserslist": "^4.4.1",
|
|
34
|
+
"caniuse-lite": "^1.0.30000938",
|
|
35
|
+
"codecov": "^3.2.0",
|
|
36
|
+
"css-loader": "^2.1.0",
|
|
37
|
+
"cssnano": "^4.1.10",
|
|
38
|
+
"eslint": "^5.14.1",
|
|
39
|
+
"eslint-plugin-flowtype": "^3.4.2",
|
|
40
|
+
"eslint-plugin-react": "^7.12.4",
|
|
41
|
+
"eslint-plugin-transform-runtime-aliasing": "^2.0.0",
|
|
42
|
+
"file-loader": "^3.0.1",
|
|
43
|
+
"flow-bin": "^0.93.0",
|
|
44
|
+
"fs-extra": "^7.0.1",
|
|
45
|
+
"husky": "^1.3.1",
|
|
46
|
+
"istanbul-api": "^2.1.1",
|
|
47
|
+
"istanbul-lib-coverage": "^2.0.3",
|
|
48
|
+
"jest": "^24.1.0",
|
|
49
|
+
"jest-serializer-html": "^6.0.0",
|
|
50
|
+
"js-yaml": "^3.12.1",
|
|
46
51
|
"json-stable-stringify": "^1.0.1",
|
|
47
52
|
"jspngopt": "^0.2.0",
|
|
48
|
-
"less": "^3.0
|
|
53
|
+
"less": "^3.9.0",
|
|
49
54
|
"less-loader": "^4.1.0",
|
|
50
|
-
"mini-css-extract-plugin": "^0.
|
|
55
|
+
"mini-css-extract-plugin": "^0.5.0",
|
|
51
56
|
"mkdirp": "^0.5.1",
|
|
52
|
-
"pako": "1.0.
|
|
57
|
+
"pako": "^1.0.8",
|
|
53
58
|
"postcss-loader": "^3.0.0",
|
|
54
|
-
"query-string": "^
|
|
55
|
-
"rimraf": "^2.6.
|
|
56
|
-
"rollup": "^
|
|
57
|
-
"rollup-plugin-
|
|
59
|
+
"query-string": "^6.2.0",
|
|
60
|
+
"rimraf": "^2.6.3",
|
|
61
|
+
"rollup": "^1.2.2",
|
|
62
|
+
"rollup-plugin-alias": "^1.5.1",
|
|
63
|
+
"rollup-plugin-babel": "^4.3.2",
|
|
58
64
|
"selenium-webdriver": "^3.6.0",
|
|
59
65
|
"sri-toolbox": "^0.2.0",
|
|
60
|
-
"style-loader": "^0.
|
|
61
|
-
"stylelint": "^9.
|
|
62
|
-
"stylelint-config-standard": "^18.
|
|
63
|
-
"
|
|
64
|
-
"webpack": "^4.
|
|
65
|
-
"webpack-bundle-analyzer": "^
|
|
66
|
-
"webpack-cli": "^3.
|
|
67
|
-
"webpack-dev-server": "^3.
|
|
66
|
+
"style-loader": "^0.23.1",
|
|
67
|
+
"stylelint": "^9.10.1",
|
|
68
|
+
"stylelint-config-standard": "^18.2.0",
|
|
69
|
+
"terser-webpack-plugin": "^1.2.2",
|
|
70
|
+
"webpack": "^4.29.5",
|
|
71
|
+
"webpack-bundle-analyzer": "^3.0.4",
|
|
72
|
+
"webpack-cli": "^3.2.3",
|
|
73
|
+
"webpack-dev-server": "^3.2.0"
|
|
68
74
|
},
|
|
69
75
|
"bin": "cli.js",
|
|
70
76
|
"scripts": {
|
|
@@ -82,16 +88,16 @@
|
|
|
82
88
|
"test:perf": "yarn prestart && NODE_ENV=test node test/perf-test.js",
|
|
83
89
|
"clean": "rm -rf dist/ node_modules/",
|
|
84
90
|
"clean-install": "yarn clean && yarn",
|
|
85
|
-
"prestart": "node
|
|
91
|
+
"prestart": "node src/unicodeMake.js",
|
|
86
92
|
"start": "webpack-dev-server --hot --config webpack.dev.js",
|
|
87
93
|
"analyze": "webpack --config webpack.analyze.js",
|
|
88
94
|
"build": "yarn prestart && rimraf dist/ && mkdirp dist && cp README.md dist && rollup -c && webpack",
|
|
89
95
|
"watch": "yarn build --watch",
|
|
90
96
|
"dist": "yarn test && yarn build && yarn dist:zip",
|
|
91
|
-
"dist:zip": "
|
|
97
|
+
"dist:zip": "rimraf katex/ katex.tar.gz katex.zip && cp -R dist katex && tar czf katex.tar.gz katex && zip -rq katex.zip katex && rimraf katex/"
|
|
92
98
|
},
|
|
93
99
|
"dependencies": {
|
|
94
|
-
"commander": "^2.
|
|
100
|
+
"commander": "^2.19.0"
|
|
95
101
|
},
|
|
96
102
|
"husky": {
|
|
97
103
|
"hooks": {
|
|
@@ -104,9 +110,12 @@
|
|
|
104
110
|
"collectCoverageFrom": [
|
|
105
111
|
"src/**/*.js",
|
|
106
112
|
"contrib/**/*.js",
|
|
107
|
-
"!src/unicodeMake.js"
|
|
113
|
+
"!src/unicodeMake.js",
|
|
114
|
+
"!contrib/mhchem/**"
|
|
115
|
+
],
|
|
116
|
+
"setupFilesAfterEnv": [
|
|
117
|
+
"<rootDir>/test/setup.js"
|
|
108
118
|
],
|
|
109
|
-
"setupTestFrameworkScriptFile": "<rootDir>/test/setup.js",
|
|
110
119
|
"snapshotSerializers": [
|
|
111
120
|
"jest-serializer-html"
|
|
112
121
|
],
|
|
@@ -116,6 +125,9 @@
|
|
|
116
125
|
"testURL": "http://localhost/",
|
|
117
126
|
"transform": {
|
|
118
127
|
"^.+\\.js$": "babel-jest"
|
|
128
|
+
},
|
|
129
|
+
"moduleNameMapper": {
|
|
130
|
+
"^katex$": "<rootDir>/katex.js"
|
|
119
131
|
}
|
|
120
132
|
}
|
|
121
133
|
}
|
package/src/Lexer.js
CHANGED
|
@@ -21,7 +21,6 @@ import type Settings from "./Settings";
|
|
|
21
21
|
|
|
22
22
|
/* The following tokenRegex
|
|
23
23
|
* - matches typical whitespace (but not NBSP etc.) using its first group
|
|
24
|
-
* - matches comments (must have trailing newlines)
|
|
25
24
|
* - does not match any control character \x00-\x1f except whitespace
|
|
26
25
|
* - does not match a bare backslash
|
|
27
26
|
* - matches any ASCII character except those just mentioned
|
|
@@ -36,7 +35,6 @@ import type Settings from "./Settings";
|
|
|
36
35
|
* still reject the input.
|
|
37
36
|
*/
|
|
38
37
|
const spaceRegexString = "[ \r\n\t]";
|
|
39
|
-
const commentRegexString = "%[^\n]*(?:\n|$)";
|
|
40
38
|
const controlWordRegexString = "\\\\[a-zA-Z@]+";
|
|
41
39
|
const controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]";
|
|
42
40
|
const controlWordWhitespaceRegexString =
|
|
@@ -46,38 +44,36 @@ const controlWordWhitespaceRegex = new RegExp(
|
|
|
46
44
|
const combiningDiacriticalMarkString = "[\u0300-\u036f]";
|
|
47
45
|
export const combiningDiacriticalMarksEndRegex =
|
|
48
46
|
new RegExp(`${combiningDiacriticalMarkString}+$`);
|
|
49
|
-
const urlFunctionRegexString = "(\\\\href|\\\\url)" +
|
|
50
|
-
`(?:${spaceRegexString}*\\{((?:[^{}\\\\]|\\\\[^]|{[^{}]*})*)\\}` +
|
|
51
|
-
`|${spaceRegexString}+([^{}])` +
|
|
52
|
-
`|${spaceRegexString}*([^{}a-zA-Z]))`;
|
|
53
47
|
const tokenRegexString = `(${spaceRegexString}+)|` + // whitespace
|
|
54
|
-
|
|
55
|
-
"|[!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint
|
|
48
|
+
"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint
|
|
56
49
|
`${combiningDiacriticalMarkString}*` + // ...plus accents
|
|
57
50
|
"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair
|
|
58
51
|
`${combiningDiacriticalMarkString}*` + // ...plus accents
|
|
59
52
|
"|\\\\verb\\*([^]).*?\\3" + // \verb*
|
|
60
53
|
"|\\\\verb([^*a-zA-Z]).*?\\4" + // \verb unstarred
|
|
61
|
-
`|${urlFunctionRegexString}` + // URL arguments
|
|
62
54
|
`|${controlWordWhitespaceRegexString}` + // \macroName + spaces
|
|
63
55
|
`|${controlSymbolRegexString})`; // \\, \', etc.
|
|
64
56
|
|
|
65
|
-
// These regexs are for matching results from tokenRegex,
|
|
66
|
-
// so they do have ^ markers.
|
|
67
|
-
export const controlWordRegex = new RegExp(`^${controlWordRegexString}`);
|
|
68
|
-
export const urlFunctionRegex = new RegExp(`^${urlFunctionRegexString}`);
|
|
69
|
-
|
|
70
57
|
/** Main Lexer class */
|
|
71
58
|
export default class Lexer implements LexerInterface {
|
|
72
59
|
input: string;
|
|
73
60
|
settings: Settings;
|
|
74
61
|
tokenRegex: RegExp;
|
|
62
|
+
// category codes, only supports comment characters (14) for now
|
|
63
|
+
catcodes: {[string]: number};
|
|
75
64
|
|
|
76
65
|
constructor(input: string, settings: Settings) {
|
|
77
66
|
// Separate accents from characters
|
|
78
67
|
this.input = input;
|
|
79
68
|
this.settings = settings;
|
|
80
69
|
this.tokenRegex = new RegExp(tokenRegexString, 'g');
|
|
70
|
+
this.catcodes = {
|
|
71
|
+
"%": 14, // comment character
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
setCatcode(char: string, code: number) {
|
|
76
|
+
this.catcodes[char] = code;
|
|
81
77
|
}
|
|
82
78
|
|
|
83
79
|
/**
|
|
@@ -97,22 +93,26 @@ export default class Lexer implements LexerInterface {
|
|
|
97
93
|
}
|
|
98
94
|
let text = match[2] || " ";
|
|
99
95
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (text[0] === "%") {
|
|
107
|
-
if (text[text.length - 1] !== "\n") {
|
|
96
|
+
if (this.catcodes[text] === 14) { // comment character
|
|
97
|
+
const nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex);
|
|
98
|
+
if (nlIndex === -1) {
|
|
99
|
+
this.tokenRegex.lastIndex = input.length; // EOF
|
|
108
100
|
this.settings.reportNonstrict("commentAtEnd",
|
|
109
101
|
"% comment has no terminating newline; LaTeX would " +
|
|
110
102
|
"fail because of commenting the end of math mode (e.g. $)");
|
|
103
|
+
} else {
|
|
104
|
+
this.tokenRegex.lastIndex = nlIndex + 1;
|
|
111
105
|
}
|
|
112
106
|
return this.lex();
|
|
113
|
-
} else {
|
|
114
|
-
return new Token(text, new SourceLocation(this, pos,
|
|
115
|
-
this.tokenRegex.lastIndex));
|
|
116
107
|
}
|
|
108
|
+
|
|
109
|
+
// Trim any trailing whitespace from control word match
|
|
110
|
+
const controlMatch = text.match(controlWordWhitespaceRegex);
|
|
111
|
+
if (controlMatch) {
|
|
112
|
+
text = controlMatch[1];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return new Token(text, new SourceLocation(this, pos,
|
|
116
|
+
this.tokenRegex.lastIndex));
|
|
117
117
|
}
|
|
118
118
|
}
|
package/src/MacroExpander.js
CHANGED
package/src/Options.js
CHANGED
|
@@ -36,6 +36,10 @@ const sizeAtStyle = function(size: number, style: StyleInterface): number {
|
|
|
36
36
|
return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
+
// In these types, "" (empty string) means "no change".
|
|
40
|
+
export type FontWeight = "textbf" | "textmd" | "";
|
|
41
|
+
export type FontShape = "textit" | "textup" | "";
|
|
42
|
+
|
|
39
43
|
export type OptionsData = {
|
|
40
44
|
style: StyleInterface;
|
|
41
45
|
color?: string | void;
|
|
@@ -44,8 +48,8 @@ export type OptionsData = {
|
|
|
44
48
|
phantom?: boolean;
|
|
45
49
|
font?: string;
|
|
46
50
|
fontFamily?: string;
|
|
47
|
-
fontWeight?:
|
|
48
|
-
fontShape?:
|
|
51
|
+
fontWeight?: FontWeight;
|
|
52
|
+
fontShape?: FontShape;
|
|
49
53
|
sizeMultiplier?: number;
|
|
50
54
|
maxSize: number;
|
|
51
55
|
};
|
|
@@ -68,8 +72,8 @@ class Options {
|
|
|
68
72
|
// See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm
|
|
69
73
|
font: string;
|
|
70
74
|
fontFamily: string;
|
|
71
|
-
fontWeight:
|
|
72
|
-
fontShape:
|
|
75
|
+
fontWeight: FontWeight;
|
|
76
|
+
fontShape: FontShape;
|
|
73
77
|
sizeMultiplier: number;
|
|
74
78
|
maxSize: number;
|
|
75
79
|
_fontMetrics: FontMetrics | void;
|
|
@@ -244,7 +248,7 @@ class Options {
|
|
|
244
248
|
/**
|
|
245
249
|
* Creates a new options object with the given font weight
|
|
246
250
|
*/
|
|
247
|
-
withTextFontWeight(fontWeight:
|
|
251
|
+
withTextFontWeight(fontWeight: FontWeight): Options {
|
|
248
252
|
return this.extend({
|
|
249
253
|
fontWeight,
|
|
250
254
|
font: "",
|
|
@@ -254,7 +258,7 @@ class Options {
|
|
|
254
258
|
/**
|
|
255
259
|
* Creates a new options object with the given font weight
|
|
256
260
|
*/
|
|
257
|
-
withTextFontShape(fontShape:
|
|
261
|
+
withTextFontShape(fontShape: FontShape): Options {
|
|
258
262
|
return this.extend({
|
|
259
263
|
fontShape,
|
|
260
264
|
font: "",
|
|
@@ -295,81 +299,13 @@ class Options {
|
|
|
295
299
|
return this._fontMetrics;
|
|
296
300
|
}
|
|
297
301
|
|
|
298
|
-
/**
|
|
299
|
-
* A map of color names to CSS colors.
|
|
300
|
-
* TODO(emily): Remove this when we have real macros
|
|
301
|
-
*/
|
|
302
|
-
static colorMap = {
|
|
303
|
-
"katex-blue": "#6495ed",
|
|
304
|
-
"katex-orange": "#ffa500",
|
|
305
|
-
"katex-pink": "#ff00af",
|
|
306
|
-
"katex-red": "#df0030",
|
|
307
|
-
"katex-green": "#28ae7b",
|
|
308
|
-
"katex-gray": "gray",
|
|
309
|
-
"katex-purple": "#9d38bd",
|
|
310
|
-
"katex-blueA": "#ccfaff",
|
|
311
|
-
"katex-blueB": "#80f6ff",
|
|
312
|
-
"katex-blueC": "#63d9ea",
|
|
313
|
-
"katex-blueD": "#11accd",
|
|
314
|
-
"katex-blueE": "#0c7f99",
|
|
315
|
-
"katex-tealA": "#94fff5",
|
|
316
|
-
"katex-tealB": "#26edd5",
|
|
317
|
-
"katex-tealC": "#01d1c1",
|
|
318
|
-
"katex-tealD": "#01a995",
|
|
319
|
-
"katex-tealE": "#208170",
|
|
320
|
-
"katex-greenA": "#b6ffb0",
|
|
321
|
-
"katex-greenB": "#8af281",
|
|
322
|
-
"katex-greenC": "#74cf70",
|
|
323
|
-
"katex-greenD": "#1fab54",
|
|
324
|
-
"katex-greenE": "#0d923f",
|
|
325
|
-
"katex-goldA": "#ffd0a9",
|
|
326
|
-
"katex-goldB": "#ffbb71",
|
|
327
|
-
"katex-goldC": "#ff9c39",
|
|
328
|
-
"katex-goldD": "#e07d10",
|
|
329
|
-
"katex-goldE": "#a75a05",
|
|
330
|
-
"katex-redA": "#fca9a9",
|
|
331
|
-
"katex-redB": "#ff8482",
|
|
332
|
-
"katex-redC": "#f9685d",
|
|
333
|
-
"katex-redD": "#e84d39",
|
|
334
|
-
"katex-redE": "#bc2612",
|
|
335
|
-
"katex-maroonA": "#ffbde0",
|
|
336
|
-
"katex-maroonB": "#ff92c6",
|
|
337
|
-
"katex-maroonC": "#ed5fa6",
|
|
338
|
-
"katex-maroonD": "#ca337c",
|
|
339
|
-
"katex-maroonE": "#9e034e",
|
|
340
|
-
"katex-purpleA": "#ddd7ff",
|
|
341
|
-
"katex-purpleB": "#c6b9fc",
|
|
342
|
-
"katex-purpleC": "#aa87ff",
|
|
343
|
-
"katex-purpleD": "#7854ab",
|
|
344
|
-
"katex-purpleE": "#543b78",
|
|
345
|
-
"katex-mintA": "#f5f9e8",
|
|
346
|
-
"katex-mintB": "#edf2df",
|
|
347
|
-
"katex-mintC": "#e0e5cc",
|
|
348
|
-
"katex-grayA": "#f6f7f7",
|
|
349
|
-
"katex-grayB": "#f0f1f2",
|
|
350
|
-
"katex-grayC": "#e3e5e6",
|
|
351
|
-
"katex-grayD": "#d6d8da",
|
|
352
|
-
"katex-grayE": "#babec2",
|
|
353
|
-
"katex-grayF": "#888d93",
|
|
354
|
-
"katex-grayG": "#626569",
|
|
355
|
-
"katex-grayH": "#3b3e40",
|
|
356
|
-
"katex-grayI": "#21242c",
|
|
357
|
-
"katex-kaBlue": "#314453",
|
|
358
|
-
"katex-kaGreen": "#71B307",
|
|
359
|
-
};
|
|
360
302
|
|
|
361
303
|
/**
|
|
362
|
-
* Gets the CSS color of the current options object
|
|
363
|
-
* `colorMap`.
|
|
304
|
+
* Gets the CSS color of the current options object
|
|
364
305
|
*/
|
|
365
306
|
getColor(): string | void {
|
|
366
307
|
if (this.phantom) {
|
|
367
308
|
return "transparent";
|
|
368
|
-
} else if (
|
|
369
|
-
this.color != null &&
|
|
370
|
-
Options.colorMap.hasOwnProperty(this.color)
|
|
371
|
-
) {
|
|
372
|
-
return Options.colorMap[this.color];
|
|
373
309
|
} else {
|
|
374
310
|
return this.color;
|
|
375
311
|
}
|