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
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;
|
|
|