diff --git a/makefile b/makefile index 8384c6d..dfd95f7 100644 --- a/makefile +++ b/makefile @@ -15,6 +15,7 @@ FEATURE = $(subst .ttf,.fea,$(subst $(OBJDIR)/,$(OBJDIR)/.pass0-,$(TARGETS))) PASS1 = $(subst $(OBJDIR)/,$(OBJDIR)/.pass1-,$(TARGETS)) PASS2 = $(subst $(OBJDIR)/,$(OBJDIR)/.pass2-,$(TARGETS)) PASS3 = $(subst $(OBJDIR)/,$(OBJDIR)/.pass3-,$(TARGETS)) +PASS4 = $(subst $(OBJDIR)/,$(OBJDIR)/.pass4-,$(TARGETS)) FILES = $(SUPPORT_FILES) buildglyphs.js @@ -51,8 +52,10 @@ $(PASS2) : $(OBJDIR)/.pass2-%.ttf : pass2-smartround.js $(OBJDIR)/.pass1-%.ttf node $^ $@ --upm $(TARGETUPM) $(PASS3) : $(OBJDIR)/.pass3-%.ttf : pass3-finalize.py $(OBJDIR)/.pass2-%.ttf fontforge -quiet -script $^ $@ $(TARGETUPM) -$(TARGETS) : $(OBJDIR)/%.ttf : $(OBJDIR)/.pass3-%.ttf +$(PASS4) : $(OBJDIR)/.pass4-%.ttf : $(OBJDIR)/.pass3-%.ttf ttfautohint $< $@ +$(TARGETS) : $(OBJDIR)/%.ttf : pass4-fixmeta.js $(OBJDIR)/.pass4-%.ttf + node $^ $@ update : $(FILES) diff --git a/pass4-fixmeta.js b/pass4-fixmeta.js new file mode 100644 index 0000000..6abde61 --- /dev/null +++ b/pass4-fixmeta.js @@ -0,0 +1,39 @@ +var fs = require('fs'); +var TTFReader = require('node-sfnt').TTFReader; +var TTFWriter = require('node-sfnt').TTFWriter; +function toArrayBuffer(buffer) { + var length = buffer.length; + var view = new DataView(new ArrayBuffer(length), 0, length); + for (var i = 0, l = length; i < l; i++) { + view.setUint8(i, buffer[i], false); + } + return view.buffer; +} +function toBuffer(arrayBuffer) { + var length = arrayBuffer.byteLength; + var view = new DataView(arrayBuffer, 0, length); + var buffer = new Buffer(length); + for (var i = 0, l = length; i < l; i++) { + buffer[i] = view.getUint8(i, false); + } + return buffer; +} + +var options = {preserveOS2Version: true, preserveXAvgCharWidth: true, writeUnknownTables: true, hinting: true} + +function readttf(file) { + var data = fs.readFileSync(file); + var buffer = toArrayBuffer(data); + var ttf = (new TTFReader(options)).read(buffer); + return ttf; +} + +function writettf(ttf, file){ + var buffer = new TTFWriter(options).write(ttf); + fs.writeFileSync(file, toBuffer(buffer)); +} + +var ttf = readttf(process.argv[2]); +// Fixes xAvgCharWidth +if(process.argv[3]) ttf['OS/2'].xAvgCharWidth = ttf.head.unitsPerEm / 2; // 0.5em +fs.writeFileSync(process.argv[3], toBuffer(new TTFWriter(options).write(ttf))); \ No newline at end of file