You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

46 lines
1.4 KiB

'use strict';
// See documentation here: http://www.microsoft.com/typography/otspec/maxp.htm
var _ = require('lodash');
var ByteBuffer = require('microbuffer');
// Find max points in glyph TTF contours.
function getMaxPoints(font) {
return _.max(_.map(font.glyphs, function (glyph) {
return _.reduce(glyph.ttfContours, function (sum, ctr) { return sum + ctr.length; }, 0);
}));
}
function getMaxContours(font) {
return _.max(_.map(font.glyphs, function (glyph) {
return glyph.ttfContours.length;
}));
}
function createMaxpTable(font) {
var buf = new ByteBuffer(32);
buf.writeInt32(0x10000); // version
buf.writeUint16(font.glyphs.length); // numGlyphs
buf.writeUint16(getMaxPoints(font)); // maxPoints
buf.writeUint16(getMaxContours(font)); // maxContours
buf.writeUint16(0); // maxCompositePoints
buf.writeUint16(0); // maxCompositeContours
buf.writeUint16(2); // maxZones
buf.writeUint16(0); // maxTwilightPoints
// It is unclear how to calculate maxStorage, maxFunctionDefs and maxInstructionDefs.
// These are magic constants now, with values exceeding values from FontForge
buf.writeUint16(10); // maxStorage
buf.writeUint16(10); // maxFunctionDefs
buf.writeUint16(0); // maxInstructionDefs
buf.writeUint16(255); // maxStackElements
buf.writeUint16(0); // maxSizeOfInstructions
buf.writeUint16(0); // maxComponentElements
buf.writeUint16(0); // maxComponentDepth
return buf;
}
module.exports = createMaxpTable;