svg2ttf
Version:
Converts SVG font to TTF font
46 lines (37 loc) • 1.46 kB
JavaScript
// 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