Now the fdt will contain metadatas only, while svg, fea and charmap will be created in one single step.

This commit is contained in:
be5invis 2015-12-21 09:13:23 +08:00
parent 519b7d830a
commit 183f2f50e2
6 changed files with 71 additions and 66 deletions

View file

@ -1,19 +0,0 @@
var fs = require('fs');
var path = require('path');
var buildGlyphs = require('./buildglyphs.js');
var parameters = require('./parameters');
var argv = require('yargs').argv;
var toml = require('toml');
var parametersData = toml.parse(fs.readFileSync(path.join(path.dirname(require.main.filename), 'parameters.toml'), 'utf-8'));
var emptyFont = toml.parse(fs.readFileSync(path.join(path.dirname(require.main.filename), 'emptyfont.toml'), 'utf-8'));
var para = parameters.build(parametersData, argv._);
var fontUniqueName = para.family + ' ' + para.style + ' ' + para.version + ' (' + para.codename + ')'
console.log(' Start build font ' + fontUniqueName);
var font = buildGlyphs.build.call(emptyFont, para);
// glyf list construction
font.glyfMap = null;
console.log(' ' + fontUniqueName + " Successfully built.");
if(argv.o) fs.writeFileSync(argv.o, JSON.stringify(font));

View file

@ -1,7 +1,12 @@
var fs = require('fs'); var fs = require('fs');
var path = require('path');
var TTFWriter = require('node-sfnt').TTFWriter; var TTFWriter = require('node-sfnt').TTFWriter;
var TTF = require('node-sfnt').TTF; var TTF = require('node-sfnt').TTF;
var argv = require('yargs').argv; var argv = require('yargs').argv;
var buildGlyphs = require('./buildglyphs.js');
var parameters = require('./parameters');
var toml = require('toml');
var Glyph = require('./support/glyph'); var Glyph = require('./support/glyph');
@ -17,9 +22,18 @@ function toBuffer(arrayBuffer) {
function pad(s, n){ while(s.length < n) s = '0' + s; return s; } function pad(s, n){ while(s.length < n) s = '0' + s; return s; }
function mix(a, b, p){ return a + (b - a) * p } function mix(a, b, p){ return a + (b - a) * p }
var options = { preserveOS2Version: true }; // Font building
var font = JSON.parse(fs.readFileSync(argv._[0], 'utf-8')); var parametersData = toml.parse(fs.readFileSync(path.join(path.dirname(require.main.filename), 'parameters.toml'), 'utf-8'));
var emptyFont = toml.parse(fs.readFileSync(path.join(path.dirname(require.main.filename), 'emptyfont.toml'), 'utf-8'));
var para = parameters.build(parametersData, argv._);
var fontUniqueName = para.family + ' ' + para.style + ' ' + para.version + ' (' + para.codename + ')'
console.log(' Start build font ' + fontUniqueName);
var font = buildGlyphs.build.call(emptyFont, para);
console.log(' ' + fontUniqueName + " Successfully built.");
if(argv.charmap) { if(argv.charmap) {
console.log(' Writing character map -> ' + argv.charmap);
fs.writeFileSync(argv.charmap, JSON.stringify(font.glyf.map(function(glyph){ fs.writeFileSync(argv.charmap, JSON.stringify(font.glyf.map(function(glyph){
return [ return [
glyph.name, glyph.name,
@ -28,9 +42,10 @@ if(argv.charmap) {
] ]
})), 'utf8') })), 'utf8')
}; };
if(argv.feature) {
var featurefile = '\n\n';
if(argv.feature) {
console.log(' Writing feature file -> ' + argv.feature);
var featurefile = '\n\n';
// markGlyphs // markGlyphs
for(var key in font.features.markGlyphs){ for(var key in font.features.markGlyphs){
featurefile += '@MG_' + key + '= [' + font.features.markGlyphs[key].join(' ') + '];\n' featurefile += '@MG_' + key + '= [' + font.features.markGlyphs[key].join(' ') + '];\n'
@ -59,7 +74,10 @@ if(argv.feature) {
fs.writeFileSync(argv.feature, featurefile, 'utf8'); fs.writeFileSync(argv.feature, featurefile, 'utf8');
}; };
/*if(argv.ttf) { /*
// Currently unused
var options = { preserveOS2Version: true };
if(argv.ttf) {
var upm = (argv.upm - 0) || 1000; var upm = (argv.upm - 0) || 1000;
var upmscale = upm / font.head.unitsPerEm; var upmscale = upm / font.head.unitsPerEm;
var skew = (argv.uprightify ? 1 : 0) * Math.tan((font.post.italicAngle || 0) / 180 * Math.PI); var skew = (argv.uprightify ? 1 : 0) * Math.tan((font.post.italicAngle || 0) / 180 * Math.PI);
@ -90,9 +108,11 @@ if(argv.feature) {
font['OS/2'].sCapHeight *= upmscale; font['OS/2'].sCapHeight *= upmscale;
fs.writeFileSync(argv.ttf, toBuffer(new TTFWriter(options).write(font))); fs.writeFileSync(argv.ttf, toBuffer(new TTFWriter(options).write(font)));
};*/ };
*/
if(argv.svg) { if(argv.svg) {
console.log(' Writing outline as SVG -> ' + argv.svg);
function cov(x){ return Math.round(x * 10000) / 10000 } function cov(x){ return Math.round(x * 10000) / 10000 }
function toSVGPath(glyph){ function toSVGPath(glyph){
var buf = ''; var buf = '';
@ -170,4 +190,17 @@ if(argv.svg) {
} }
svg += '</font></defs></svg>' svg += '</font></defs></svg>'
fs.writeFileSync(argv.svg, svg, 'utf-8') fs.writeFileSync(argv.svg, svg, 'utf-8')
}; };
if(argv.meta){
console.log(' Writing metadata as JSON -> ' + argv.meta);
var glyf = font.glyf;
var glyfMap = font.glyfMap;
font.glyf = null;
font.glyfMap = null;
fs.writeFileSync(argv.meta, JSON.stringify(font));
font.glyf = glyf;
font.glyfMap = glyfMap;
}

View file

@ -8,7 +8,6 @@ PARAM_SLAB = FAST='$(FAST)' SUFFIX='$(SUFFIX)-slab' VARIANTNAME='$(VARIANTNAME)'
### Sometimes make will freak out and report ACCESS VIOLATION for me... so i have to add some repeation ### Sometimes make will freak out and report ACCESS VIOLATION for me... so i have to add some repeation
LOOPS = 0 1 2 LOOPS = 0 1 2
fdts : fdts-default fdts-slab
svgs : svgs-default svgs-slab svgs : svgs-default svgs-slab
fonts : fonts-default fonts-slab fonts : fonts-default fonts-slab
test : test-default test-slab test : test-default test-slab
@ -18,24 +17,17 @@ release : release-default release-slab
$(OBJDIR) : $(OBJDIR) :
@- mkdir $@ @- mkdir $@
# fdts
fdts-default : $(SCRIPTS) | $(OBJDIR)
@$(foreach var,$(LOOPS),$(MAKE) -s -f onegroup.mk fdts $(PARAM_DEFAULT) LOOP=$(var);)
fdts-slab : $(SCRIPTS) | $(OBJDIR)
@$(foreach var,$(LOOPS),$(MAKE) -s -f onegroup.mk fdts $(PARAM_SLAB) LOOP=$(var);)
# svgs # svgs
svgs-default : fdts-default svgs-default : $(SCRIPTS) | $(OBJDIR)
@$(MAKE) -f onegroup.mk svgs $(PARAM_DEFAULT) @$(MAKE) -f onegroup.mk svgs $(PARAM_DEFAULT)
svgs-slab : fdts-slab svgs-slab : $(SCRIPTS) | $(OBJDIR)
@$(MAKE) -f onegroup.mk svgs $(PARAM_SLAB) @$(MAKE) -f onegroup.mk svgs $(PARAM_SLAB)
# ttfs # ttfs
fonts-default : svgs-default fonts-default : $(SCRIPTS) | $(OBJDIR)
@$(MAKE) -f onegroup.mk fonts $(PARAM_DEFAULT) @$(MAKE) -f onegroup.mk fonts $(PARAM_DEFAULT)
fonts-slab : svgs-slab fonts-slab : $(SCRIPTS) | $(OBJDIR)
@$(MAKE) -f onegroup.mk fonts $(PARAM_SLAB) @$(MAKE) -f onegroup.mk fonts $(PARAM_SLAB)

View file

@ -1,6 +1,6 @@
PATELC = node ./node_modules/patel/bin/patel-c PATELC = node ./node_modules/patel/bin/patel-c
SUPPORT_FILES_FROM_aki = support/glyph.js support/spiroexpand.js support/spirokit.js parameters.js SUPPORT_FILES_FROM_aki = support/glyph.js support/spiroexpand.js support/spirokit.js parameters.js
SUPPORT_FILES = $(SUPPORT_FILES_FROM_aki) support/point.js extract.js generate.js emptyfont.toml parameters.toml support/fairify.js SUPPORT_FILES = $(SUPPORT_FILES_FROM_aki) support/point.js generator.js emptyfont.toml parameters.toml support/fairify.js
GLYPH_SEGMENTS = glyphs/common-shapes.ptl glyphs/overmarks.ptl glyphs/letters-unified-basic.ptl glyphs/letters-unified-extended.ptl glyphs/numbers.ptl glyphs/symbol-punctuation.ptl glyphs/symbol-math.ptl glyphs/symbol-geometric.ptl glyphs/symbol-other.ptl glyphs/symbol-letter.ptl glyphs/autobuilds.ptl GLYPH_SEGMENTS = glyphs/common-shapes.ptl glyphs/overmarks.ptl glyphs/letters-unified-basic.ptl glyphs/letters-unified-extended.ptl glyphs/numbers.ptl glyphs/symbol-punctuation.ptl glyphs/symbol-math.ptl glyphs/symbol-geometric.ptl glyphs/symbol-other.ptl glyphs/symbol-letter.ptl glyphs/autobuilds.ptl
SCRIPTS = $(SUPPORT_FILES) buildglyphs.js SCRIPTS = $(SUPPORT_FILES) buildglyphs.js
SCRIPTS_FROM_aki = $(SUPPORT_FILES_FROM_aki) buildglyphs.js SCRIPTS_FROM_aki = $(SUPPORT_FILES_FROM_aki) buildglyphs.js

View file

@ -39,63 +39,62 @@ PASS3 = $(subst $(OBJDIR)/,$(OBJDIR)/.pass3-,$(TARGETS))
PASS4 = $(subst $(OBJDIR)/,$(OBJDIR)/.pass4-,$(TARGETS)) PASS4 = $(subst $(OBJDIR)/,$(OBJDIR)/.pass4-,$(TARGETS))
fonts : $(TARGETS) fonts : $(TARGETS)
fdts : $(FDTS)
svgs : $(SVG0) svgs : $(SVG0)
# Pass 0 : file construction # Pass 0 : file construction
OUTPUTS = --meta $@ --feature $(subst .fdt,.ab.fea,$@) --svg $(subst .fdt,.svg,$@) --charmap $(subst .fdt,.charmap,$(subst $(OBJDIR)/.pass0-,$(OBJDIR)/,$@))
$(OBJDIR)/.pass0-$(PREFIX)-thin.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-thin.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-thin s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-thin s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS)
$(OBJDIR)/.pass0-$(PREFIX)-extralight.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-extralight.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-extralight s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-extralight s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS)
$(OBJDIR)/.pass0-$(PREFIX)-light.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-light.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-light s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-light s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS)
$(OBJDIR)/.pass0-$(PREFIX)-regular.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-regular.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-book s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-book s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS)
$(OBJDIR)/.pass0-$(PREFIX)-medium.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-medium.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-medium s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-medium s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS)
$(OBJDIR)/.pass0-$(PREFIX)-bold.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-bold.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-bold s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-bold s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS)
$(OBJDIR)/.pass0-$(PREFIX)-heavy.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-heavy.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-heavy s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-heavy s-upright $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS)
$(OBJDIR)/.pass0-$(PREFIX)-thinitalic.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-thinitalic.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-thin s-italic $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-thin s-italic $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-extralightitalic.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-extralightitalic.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-extralight s-italic $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-extralight s-italic $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-lightitalic.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-lightitalic.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-light s-italic $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-light s-italic $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-italic.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-italic.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-book s-italic $(STYLE_ITALIC) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-book s-italic $(STYLE_ITALIC) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-mediumitalic.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-mediumitalic.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-medium s-italic $(STYLE_ITALIC) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-medium s-italic $(STYLE_ITALIC) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-bolditalic.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-bolditalic.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-bold s-italic $(STYLE_ITALIC) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-bold s-italic $(STYLE_ITALIC) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-heavyitalic.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-heavyitalic.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-heavy s-italic $(STYLE_ITALIC) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-heavy s-italic $(STYLE_ITALIC) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-thinoblique.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-thinoblique.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-thin s-oblique $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-thin s-oblique $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-extralightoblique.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-extralightoblique.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-extralight s-oblique $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-extralight s-oblique $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-lightoblique.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-lightoblique.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-light s-oblique $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-light s-oblique $(STYLE_UPRIGHT) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-oblique.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-oblique.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-book s-oblique $(STYLE_oblique) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-book s-oblique $(STYLE_oblique) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-mediumoblique.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-mediumoblique.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-medium s-oblique $(STYLE_oblique) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-medium s-oblique $(STYLE_oblique) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-boldoblique.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-boldoblique.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-bold s-oblique $(STYLE_oblique) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-bold s-oblique $(STYLE_oblique) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(OBJDIR)/.pass0-$(PREFIX)-heavyoblique.fdt : $(SCRIPTS) | $(OBJDIR) $(OBJDIR)/.pass0-$(PREFIX)-heavyoblique.fdt : $(SCRIPTS) | $(OBJDIR)
$(NODE_FDT) generate -o $@ iosevka $(STYLE_COMMON) w-heavy s-oblique $(STYLE_oblique) $(STYLE_SUFFIX) $(NODE_FDT) generator iosevka $(STYLE_COMMON) w-heavy s-oblique $(STYLE_oblique) $(STYLE_SUFFIX) $(OUTPUTS) --uprightify 1
$(SVG0) : $(OBJDIR)/.pass0-%.svg : $(OBJDIR)/.pass0-%.fdt $(SVG0) : $(OBJDIR)/.pass0-%.svg : $(OBJDIR)/.pass0-%.fdt
$(NODE) extract --uprightify 1 --svg $@ $< @echo $^ "'->'" $@
$(ABFEAT) : $(OBJDIR)/.pass0-%.ab.fea : $(OBJDIR)/.pass0-%.fdt $(ABFEAT) : $(OBJDIR)/.pass0-%.ab.fea : $(OBJDIR)/.pass0-%.fdt
$(NODE) extract --feature $@ $< @echo $^ "'->'" $@
$(MAPS) : $(OBJDIR)/%.charmap : $(OBJDIR)/.pass0-%.fdt $(MAPS) : $(OBJDIR)/%.charmap : $(OBJDIR)/.pass0-%.fdt
$(NODE) extract --charmap $@ $< @echo $^ "'->'" $@
$(FEATURE) : $(OBJDIR)/.pass0-%.fea : $(OBJDIR)/.pass0-%.ab.fea features/common.fea features/uprightonly.fea $(FEATURE) : $(OBJDIR)/.pass0-%.fea : $(OBJDIR)/.pass0-%.ab.fea features/common.fea features/uprightonly.fea
cat $^ > $@ cat $^ > $@
$(FEATITA) : $(OBJDIR)/.pass0-%.fea : $(OBJDIR)/.pass0-%.ab.fea features/common.fea features/italiconly.fea $(FEATITA) : $(OBJDIR)/.pass0-%.fea : $(OBJDIR)/.pass0-%.ab.fea features/common.fea features/italiconly.fea
@ -105,7 +104,7 @@ $(FEATITA) : $(OBJDIR)/.pass0-%.fea : $(OBJDIR)/.pass0-%.ab.fea features/common.
# Pass 1 : Outline cleanup and merge # Pass 1 : Outline cleanup and merge
$(PASS1) : $(OBJDIR)/.pass1-%.ttf : pass1-cleanup.py $(OBJDIR)/.pass0-%.svg $(PASS1) : $(OBJDIR)/.pass1-%.ttf : pass1-cleanup.py $(OBJDIR)/.pass0-%.svg
fontforge -quiet -script $^ $@ $(if $(findstring italic,$@),10,$(if $(findstring oblique,$@),10,0)) $(FAST) $(SUPPRESS_ERRORS) fontforge -quiet -script $^ $@ $(if $(findstring italic,$@),10,$(if $(findstring oblique,$@),10,0)) $(FAST) $(SUPPRESS_ERRORS)
$(PASS2) : $(OBJDIR)/.pass2-%.ttf : pass2-smartround.js $(OBJDIR)/.pass1-%.ttf $(OBJDIR)/.pass0-%.fdt $(PASS2) : $(OBJDIR)/.pass2-%.ttf : pass2-addmeta.js $(OBJDIR)/.pass1-%.ttf $(OBJDIR)/.pass0-%.fdt
$(NODE) $^ -o $@ --upm $(TARGETUPM) $(NODE) $^ -o $@ --upm $(TARGETUPM)
$(PASS3) : $(OBJDIR)/.pass3-%.ttf : pass3-features.py $(OBJDIR)/.pass2-%.ttf $(OBJDIR)/.pass0-%.fea $(PASS3) : $(OBJDIR)/.pass3-%.ttf : pass3-features.py $(OBJDIR)/.pass2-%.ttf $(OBJDIR)/.pass0-%.fea
fontforge -quiet -script $^ $@ $(TARGETUPM) $(SUPPRESS_ERRORS) fontforge -quiet -script $^ $@ $(TARGETUPM) $(SUPPRESS_ERRORS)