Spaces:
Running
on
T4
Running
on
T4
| /** | |
| * 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; | |