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