scribble-math/fontMetrics.js
Emily Eisenberg 9fc357b8a1 Add italic correction
Summary: Add margin to the right of characters that have italic correction.

Test Plan:
Look at `f'` and `C'` before and after. Note that they both now look
good at small font sizes (like 17pt).

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3534
2013-08-14 10:51:09 -07:00

678 lines
16 KiB
JavaScript

// These font metrics are extracted from TeX
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 = 0.101;
var sigma22 = 0.250;
var xi1 = 0;
var xi2 = 0;
var xi3 = 0;
var xi4 = 0;
var xi5 = .431;
var xi6 = 1;
var xi7 = 0;
var xi8 = .04;
var xi9 = .111;
var xi10 = .166;
var xi11 = .2;
var xi12 = .6;
var xi13 = .1;
// 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,
delim1: sigma20,
delim2: sigma21,
axisHeight: sigma22,
defaultRuleThickness: xi8,
bigOpSpacing1: xi9,
bigOpSpacing2: xi10,
bigOpSpacing3: xi11,
bigOpSpacing4: xi12,
bigOpSpacing5: xi13
};
// This map is generated by metrics/metric_parse.py
var metricMap = {
"roman": {
"italicCorrection": {
"\u2218": 0.0,
"\u03a5": 0.0,
"$": 0.0,
"\u03a9": 0.0,
"(": 0.0,
",": 0.0,
"0": 0.0,
"4": 0.0,
"8": 0.0,
"<": 0.0,
"@": 0.0,
"D": 0.0,
"H": 0.0,
"L": 0.0,
"P": 0.0,
"T": 0.0,
"\u00d7": 0.0,
"X": 0.0,
"\u2264": 0.0,
"`": 0.0,
"d": 0.0,
"h": 0.0,
"l": 0.0,
"p": 0.0,
"t": 0.0,
"\u00f7": 0.0,
"x": 0.0,
"|": 0.0,
"\u2192": 0.0,
"\u2217": 0.0,
"\u039e": 0.0,
"\u00a0": 0.0,
"\u03a6": 0.0,
"+": 0.0,
"/": 0.0,
"3": 0.0,
"7": 0.0,
";": 0.0,
"?": 0.0,
"C": 0.0,
"G": 0.0,
"K": 0.0,
"O": 0.0,
"S": 0.0,
"W": 0.0,
"[": 0.0,
"c": 0.0,
"g": 0.0,
"\u2032": 0.0,
"k": 0.0,
"o": 0.0,
"s": 0.0,
"w": 0.0,
"\u0393": 0.0,
"\u2212": 0.0,
"\u039b": 0.0,
"\u221e": 0.0,
"\u03a3": 0.0,
"\"": 0.0,
".": 0.0,
"\u00b1": 0.0,
"2": 0.0,
"6": 0.0,
":": 0.0,
">": 0.0,
"B": 0.0,
"\u22c5": 0.0,
"F": 0.0,
"J": 0.0,
"N": 0.0,
"R": 0.0,
"V": 0.0,
"\u2265": 0.0,
"Z": 0.0,
"b": 0.0,
"f": 0.052,
"j": 0.0,
"n": 0.0,
"r": 0.0,
"v": 0.0,
"z": 0.0,
"\u2190": 0.0,
"\u0394": 0.0,
"\u0398": 0.0,
"!": 0.0,
"\u03a0": 0.0,
")": 0.0,
"\u03a8": 0.0,
"1": 0.0,
"5": 0.0,
"9": 0.0,
"=": 0.0,
"A": 0.0,
"E": 0.0,
"I": 0.0,
"M": 0.0,
"Q": 0.0,
"U": 0.0,
"Y": 0.0,
"]": 0.0,
"a": 0.0,
"e": 0.0,
"i": 0.0,
"m": 0.0,
"q": 0.0,
"u": 0.0,
"y": 0.0
},
"depth": {
"\u2218": 0.0,
"\u03a5": 0.0,
"$": 0.056,
"\u03a9": 0.0,
"(": 0.25,
",": 0.193,
"0": 0.022,
"4": 0.0,
"8": 0.022,
"<": 0.04,
"@": 0.011,
"D": 0.0,
"H": 0.0,
"L": 0.0,
"P": 0.0,
"T": 0.0,
"\u00d7": 0.0,
"X": 0.0,
"\u2264": 0.137,
"`": 0.0,
"d": 0.011,
"h": 0.0,
"l": 0.0,
"p": 0.194,
"t": 0.011,
"\u00f7": 0.029,
"x": 0.0,
"|": 0.25,
"\u2192": 0.011,
"\u2217": 0.0,
"\u039e": 0.0,
"\u00a0": 0.0,
"\u03a6": 0.0,
"+": 0.083,
"/": 0.25,
"3": 0.022,
"7": 0.022,
";": 0.193,
"?": 0.0,
"C": 0.022,
"G": 0.022,
"K": 0.0,
"O": 0.022,
"S": 0.022,
"W": 0.022,
"[": 0.25,
"c": 0.011,
"g": 0.206,
"\u2032": 0.0,
"k": 0.0,
"o": 0.011,
"s": 0.011,
"w": 0.011,
"\u0393": 0.0,
"\u2212": 0.0,
"\u039b": 0.0,
"\u221e": 0.011,
"\u03a3": 0.0,
"\"": 0.0,
".": 0.0,
"\u00b1": 0.0,
"2": 0.0,
"6": 0.022,
":": 0.0,
">": 0.04,
"B": 0.0,
"\u22c5": 0.0,
"F": 0.0,
"J": 0.022,
"N": 0.0,
"R": 0.022,
"V": 0.022,
"\u2265": 0.137,
"Z": 0.0,
"b": 0.011,
"f": 0.0,
"j": 0.205,
"n": 0.0,
"r": 0.0,
"v": 0.011,
"z": 0.0,
"\u2190": 0.011,
"\u0394": 0.0,
"\u0398": 0.022,
"!": 0.0,
"\u03a0": 0.0,
")": 0.25,
"\u03a8": 0.0,
"1": 0.0,
"5": 0.022,
"9": 0.022,
"=": 0.0,
"A": 0.0,
"E": 0.0,
"I": 0.0,
"M": 0.0,
"Q": 0.194,
"U": 0.022,
"Y": 0.0,
"]": 0.25,
"a": 0.011,
"e": 0.011,
"i": 0.0,
"m": 0.0,
"q": 0.194,
"u": 0.011,
"y": 0.205
},
"height": {
"\u2218": 0.444,
"\u03a5": 0.705,
"$": 0.75,
"\u03a9": 0.705,
"(": 0.75,
",": 0.106,
"0": 0.666,
"4": 0.677,
"8": 0.666,
"<": 0.54,
"@": 0.705,
"D": 0.683,
"H": 0.683,
"L": 0.683,
"P": 0.683,
"T": 0.677,
"\u00d7": 0.491,
"X": 0.683,
"\u2264": 0.636,
"`": 0.693,
"d": 0.694,
"h": 0.694,
"l": 0.694,
"p": 0.442,
"t": 0.615,
"\u00f7": 0.529,
"x": 0.431,
"|": 0.75,
"\u2192": 0.511,
"\u2217": 0.465,
"\u039e": 0.677,
"\u00a0": 0.0,
"\u03a6": 0.683,
"+": 0.583,
"/": 0.75,
"3": 0.666,
"7": 0.676,
";": 0.431,
"?": 0.705,
"C": 0.705,
"G": 0.705,
"K": 0.683,
"O": 0.705,
"S": 0.705,
"W": 0.683,
"[": 0.75,
"c": 0.448,
"g": 0.453,
"\u2032": 0.559,
"k": 0.694,
"o": 0.448,
"s": 0.448,
"w": 0.431,
"\u0393": 0.68,
"\u2212": 0.27,
"\u039b": 0.716,
"\u221e": 0.442,
"\u03a3": 0.683,
"\"": 0.694,
".": 0.106,
"\u00b1": 0.666,
"2": 0.666,
"6": 0.666,
":": 0.431,
">": 0.54,
"B": 0.683,
"\u22c5": 0.303,
"F": 0.68,
"J": 0.683,
"N": 0.683,
"R": 0.683,
"V": 0.683,
"\u2265": 0.636,
"Z": 0.683,
"b": 0.694,
"f": 0.705,
"j": 0.669,
"n": 0.442,
"r": 0.442,
"v": 0.431,
"z": 0.431,
"\u2190": 0.511,
"\u0394": 0.716,
"\u0398": 0.705,
"!": 0.716,
"\u03a0": 0.68,
")": 0.75,
"\u03a8": 0.683,
"1": 0.666,
"5": 0.666,
"9": 0.666,
"=": 0.367,
"A": 0.716,
"E": 0.68,
"I": 0.683,
"M": 0.683,
"Q": 0.705,
"U": 0.683,
"Y": 0.683,
"]": 0.75,
"a": 0.448,
"e": 0.448,
"i": 0.669,
"m": 0.442,
"q": 0.442,
"u": 0.442,
"y": 0.431
}
},
"slanted": {
"italicCorrection": {},
"depth": {},
"height": {}
},
"bold": {
"italicCorrection": {},
"depth": {},
"height": {}
},
"italic": {
"italicCorrection": {
"A": 0.0,
"V": 0.186,
"C": 0.046,
"B": 0.0,
"x": 0.0,
"E": 0.026,
"D": 0.0,
"q": 0.006,
"G": 0.0,
"F": 0.106,
"\u03b1": 0.0,
"I": 0.058,
"\u03b3": 0.026,
"\u03b2": 0.01,
"\u03b5": 0.0,
"\u03b4": 0.008,
"\u03b7": 0.0,
"\u03b6": 0.037,
"\u03b9": 0.0,
"\u03b8": 0.0,
"\u03bb": 0.0,
"\u03ba": 0.0,
"\u03bd": 0.031,
"\u03bc": 0.0,
"\u03be": 0.009,
"\u03c1": 0.0,
"\u03c0": 0.0,
"\u03c3": 0.0,
"\u03c2": 0.047,
"\u03c5": 0.0,
"\u03c4": 0.074,
"\u03c7": 0.0,
"\u03c6": 0.0,
"\u03c9": 0.0,
"\u03c8": 0.0,
"K": 0.04,
"J": 0.079,
"M": 0.074,
"L": 0.0,
"O": 0.0,
"N": 0.078,
"\u03d1": 0.0,
"P": 0.112,
"S": 0.032,
"R": 0.0,
"\u03d5": 0.0,
"T": 0.12,
"W": 0.104,
"\u03d6": 0.0,
"Y": 0.182,
"X": 0.023,
"w": 0.0,
"Z": 0.041,
"a": 0.0,
"Q": 0.0,
"c": 0.0,
"b": 0.0,
"e": 0.0,
"d": 0.0,
"g": 0.0,
"f": 0.063,
"i": 0.0,
"h": 0.0,
"k": 0.0,
"j": 0.0,
"m": 0.0,
"l": 0.0,
"o": 0.0,
"n": 0.0,
"\u03f1": 0.0,
"p": 0.0,
"s": 0.0,
"r": 0.0,
"u": 0.0,
"t": 0.0,
"H": 0.05,
"v": 0.0,
"y": 0.0,
"U": 0.078,
"z": 0.002
},
"depth": {
"A": 0.0,
"V": 0.022,
"C": 0.022,
"B": 0.0,
"x": 0.011,
"E": 0.0,
"D": 0.0,
"q": 0.194,
"G": 0.022,
"F": 0.0,
"\u03b1": 0.011,
"I": 0.0,
"\u03b3": 0.215,
"\u03b2": 0.194,
"\u03b5": 0.022,
"\u03b4": 0.012,
"\u03b7": 0.216,
"\u03b6": 0.205,
"\u03b9": 0.011,
"\u03b8": 0.011,
"\u03bb": 0.013,
"\u03ba": 0.011,
"\u03bd": 0.0,
"\u03bc": 0.216,
"\u03be": 0.205,
"\u03c1": 0.216,
"\u03c0": 0.011,
"\u03c3": 0.011,
"\u03c2": 0.108,
"\u03c5": 0.011,
"\u03c4": 0.012,
"\u03c7": 0.205,
"\u03c6": 0.218,
"\u03c9": 0.011,
"\u03c8": 0.205,
"K": 0.0,
"J": 0.022,
"M": 0.0,
"L": 0.0,
"O": 0.022,
"N": 0.0,
"\u03d1": 0.011,
"P": 0.0,
"S": 0.022,
"R": 0.022,
"\u03d5": 0.205,
"T": 0.0,
"W": 0.022,
"\u03d6": 0.011,
"Y": 0.0,
"X": 0.0,
"w": 0.011,
"Z": 0.0,
"a": 0.011,
"Q": 0.194,
"c": 0.011,
"b": 0.011,
"e": 0.011,
"d": 0.011,
"g": 0.205,
"f": 0.205,
"i": 0.011,
"h": 0.011,
"k": 0.011,
"j": 0.205,
"m": 0.011,
"l": 0.011,
"o": 0.011,
"n": 0.011,
"\u03f1": 0.194,
"p": 0.194,
"s": 0.011,
"r": 0.011,
"u": 0.011,
"t": 0.011,
"H": 0.0,
"v": 0.011,
"y": 0.205,
"U": 0.022,
"z": 0.011
},
"height": {
"A": 0.716,
"V": 0.683,
"C": 0.705,
"B": 0.683,
"x": 0.442,
"E": 0.68,
"D": 0.683,
"q": 0.442,
"G": 0.705,
"F": 0.68,
"\u03b1": 0.442,
"I": 0.683,
"\u03b3": 0.442,
"\u03b2": 0.706,
"\u03b5": 0.453,
"\u03b4": 0.711,
"\u03b7": 0.442,
"\u03b6": 0.697,
"\u03b9": 0.442,
"\u03b8": 0.705,
"\u03bb": 0.694,
"\u03ba": 0.442,
"\u03bd": 0.442,
"\u03bc": 0.442,
"\u03be": 0.697,
"\u03c1": 0.442,
"\u03c0": 0.431,
"\u03c3": 0.431,
"\u03c2": 0.442,
"\u03c5": 0.442,
"\u03c4": 0.431,
"\u03c7": 0.442,
"\u03c6": 0.442,
"\u03c9": 0.442,
"\u03c8": 0.694,
"K": 0.683,
"J": 0.683,
"M": 0.683,
"L": 0.683,
"O": 0.705,
"N": 0.683,
"\u03d1": 0.705,
"P": 0.683,
"S": 0.705,
"R": 0.683,
"\u03d5": 0.694,
"T": 0.677,
"W": 0.683,
"\u03d6": 0.431,
"Y": 0.683,
"X": 0.683,
"w": 0.442,
"Z": 0.683,
"a": 0.442,
"Q": 0.705,
"c": 0.442,
"b": 0.694,
"e": 0.442,
"d": 0.694,
"g": 0.442,
"f": 0.705,
"i": 0.661,
"h": 0.694,
"k": 0.694,
"j": 0.661,
"m": 0.442,
"l": 0.694,
"o": 0.442,
"n": 0.442,
"\u03f1": 0.442,
"p": 0.442,
"s": 0.442,
"r": 0.442,
"u": 0.442,
"t": 0.626,
"H": 0.683,
"v": 0.442,
"y": 0.442,
"U": 0.683,
"z": 0.442
}
},
"typewriter": {
"italicCorrection": {},
"depth": {},
"height": {}
}
};
var getCharacterMetrics = function(character, style) {
if (character in metricMap[style].height) {
return {
height: metricMap[style].height[character],
depth: metricMap[style].depth[character],
italicCorrection: metricMap[style].italicCorrection[character]
};
} else {
return null;
}
};
module.exports = {
metrics: metrics,
getCharacterMetrics: getCharacterMetrics
};