
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
678 lines
16 KiB
JavaScript
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
|
|
};
|