mirror of
https://github.com/Smaug123/KaTeX
synced 2025-10-06 11:48:41 +00:00
This is part 3 or 3. The first two pull requests added font metrics, HTML rendering, and screenshot tests.
190 lines
4.8 KiB
JavaScript
190 lines
4.8 KiB
JavaScript
/**
|
|
* 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;
|