66 lines
2.1 KiB
Plaintext
66 lines
2.1 KiB
Plaintext
// The `OS/2` table contains metrics required in OpenType fonts.
|
|
// https://www.microsoft.com/typography/OTSPEC/os2.htm
|
|
|
|
import parse from '../parse';
|
|
|
|
// Parse the OS/2 and Windows metrics `OS/2` table
|
|
function parseOS2Table(data, start) {
|
|
const os2 = {};
|
|
const p = new parse.Parser(data, start);
|
|
os2.version = p.parseUShort();
|
|
os2.xAvgCharWidth = p.parseShort();
|
|
os2.usWeightClass = p.parseUShort();
|
|
os2.usWidthClass = p.parseUShort();
|
|
os2.fsType = p.parseUShort();
|
|
os2.ySubscriptXSize = p.parseShort();
|
|
os2.ySubscriptYSize = p.parseShort();
|
|
os2.ySubscriptXOffset = p.parseShort();
|
|
os2.ySubscriptYOffset = p.parseShort();
|
|
os2.ySuperscriptXSize = p.parseShort();
|
|
os2.ySuperscriptYSize = p.parseShort();
|
|
os2.ySuperscriptXOffset = p.parseShort();
|
|
os2.ySuperscriptYOffset = p.parseShort();
|
|
os2.yStrikeoutSize = p.parseShort();
|
|
os2.yStrikeoutPosition = p.parseShort();
|
|
os2.sFamilyClass = p.parseShort();
|
|
os2.panose = [];
|
|
for (let i = 0; i < 10; i++) {
|
|
os2.panose[i] = p.parseByte();
|
|
}
|
|
|
|
os2.ulUnicodeRange1 = p.parseULong();
|
|
os2.ulUnicodeRange2 = p.parseULong();
|
|
os2.ulUnicodeRange3 = p.parseULong();
|
|
os2.ulUnicodeRange4 = p.parseULong();
|
|
os2.achVendID = String.fromCharCode(
|
|
p.parseByte(),
|
|
p.parseByte(),
|
|
p.parseByte(),
|
|
p.parseByte()
|
|
);
|
|
os2.fsSelection = p.parseUShort();
|
|
os2.usFirstCharIndex = p.parseUShort();
|
|
os2.usLastCharIndex = p.parseUShort();
|
|
os2.sTypoAscender = p.parseShort();
|
|
os2.sTypoDescender = p.parseShort();
|
|
os2.sTypoLineGap = p.parseShort();
|
|
os2.usWinAscent = p.parseUShort();
|
|
os2.usWinDescent = p.parseUShort();
|
|
if (os2.version >= 1) {
|
|
os2.ulCodePageRange1 = p.parseULong();
|
|
os2.ulCodePageRange2 = p.parseULong();
|
|
}
|
|
|
|
if (os2.version >= 2) {
|
|
os2.sxHeight = p.parseShort();
|
|
os2.sCapHeight = p.parseShort();
|
|
os2.usDefaultChar = p.parseUShort();
|
|
os2.usBreakChar = p.parseUShort();
|
|
os2.usMaxContent = p.parseUShort();
|
|
}
|
|
|
|
return os2;
|
|
}
|
|
|
|
export default { parse: parseOS2Table };
|