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