Now the fdt will contain metadatas only, while svg, fea and charmap will be created in one single step.
This commit is contained in:
parent
519b7d830a
commit
183f2f50e2
6 changed files with 71 additions and 66 deletions
19
generate.js
19
generate.js
|
@ -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));
|
|
@ -1,7 +1,12 @@
|
|||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
var TTFWriter = require('node-sfnt').TTFWriter;
|
||||
var TTF = require('node-sfnt').TTF;
|
||||
var argv = require('yargs').argv;
|
||||
var buildGlyphs = require('./buildglyphs.js');
|
||||
var parameters = require('./parameters');
|
||||
var toml = require('toml');
|
||||
|
||||
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 mix(a, b, p){ return a + (b - a) * p }
|
||||
|
||||
var options = { preserveOS2Version: true };
|
||||
var font = JSON.parse(fs.readFileSync(argv._[0], 'utf-8'));
|
||||
// Font building
|
||||
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) {
|
||||
console.log(' Writing character map -> ' + argv.charmap);
|
||||
fs.writeFileSync(argv.charmap, JSON.stringify(font.glyf.map(function(glyph){
|
||||
return [
|
||||
glyph.name,
|
||||
|
@ -28,9 +42,10 @@ if(argv.charmap) {
|
|||
]
|
||||
})), 'utf8')
|
||||
};
|
||||
if(argv.feature) {
|
||||
var featurefile = '\n\n';
|
||||
|
||||
if(argv.feature) {
|
||||
console.log(' Writing feature file -> ' + argv.feature);
|
||||
var featurefile = '\n\n';
|
||||
// markGlyphs
|
||||
for(var key in font.features.markGlyphs){
|
||||
featurefile += '@MG_' + key + '= [' + font.features.markGlyphs[key].join(' ') + '];\n'
|
||||
|
@ -59,7 +74,10 @@ if(argv.feature) {
|
|||
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 upmscale = upm / font.head.unitsPerEm;
|
||||
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;
|
||||
|
||||
fs.writeFileSync(argv.ttf, toBuffer(new TTFWriter(options).write(font)));
|
||||
};*/
|
||||
};
|
||||
*/
|
||||
|
||||
if(argv.svg) {
|
||||
console.log(' Writing outline as SVG -> ' + argv.svg);
|
||||
function cov(x){ return Math.round(x * 10000) / 10000 }
|
||||
function toSVGPath(glyph){
|
||||
var buf = '';
|
||||
|
@ -170,4 +190,17 @@ if(argv.svg) {
|
|||
}
|
||||
svg += '</font></defs></svg>'
|
||||
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;
|
||||
}
|
16
makefile
16
makefile
|
@ -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
|
||||
LOOPS = 0 1 2
|
||||
|
||||
fdts : fdts-default fdts-slab
|
||||
svgs : svgs-default svgs-slab
|
||||
fonts : fonts-default fonts-slab
|
||||
test : test-default test-slab
|
||||
|
@ -18,24 +17,17 @@ release : release-default release-slab
|
|||
$(OBJDIR) :
|
||||
@- 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-default : fdts-default
|
||||
svgs-default : $(SCRIPTS) | $(OBJDIR)
|
||||
@$(MAKE) -f onegroup.mk svgs $(PARAM_DEFAULT)
|
||||
svgs-slab : fdts-slab
|
||||
svgs-slab : $(SCRIPTS) | $(OBJDIR)
|
||||
@$(MAKE) -f onegroup.mk svgs $(PARAM_SLAB)
|
||||
|
||||
|
||||
# ttfs
|
||||
fonts-default : svgs-default
|
||||
fonts-default : $(SCRIPTS) | $(OBJDIR)
|
||||
@$(MAKE) -f onegroup.mk fonts $(PARAM_DEFAULT)
|
||||
fonts-slab : svgs-slab
|
||||
fonts-slab : $(SCRIPTS) | $(OBJDIR)
|
||||
@$(MAKE) -f onegroup.mk fonts $(PARAM_SLAB)
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
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 = $(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
|
||||
SCRIPTS = $(SUPPORT_FILES) buildglyphs.js
|
||||
SCRIPTS_FROM_aki = $(SUPPORT_FILES_FROM_aki) buildglyphs.js
|
||||
|
|
53
onegroup.mk
53
onegroup.mk
|
@ -39,63 +39,62 @@ PASS3 = $(subst $(OBJDIR)/,$(OBJDIR)/.pass3-,$(TARGETS))
|
|||
PASS4 = $(subst $(OBJDIR)/,$(OBJDIR)/.pass4-,$(TARGETS))
|
||||
|
||||
fonts : $(TARGETS)
|
||||
|
||||
fdts : $(FDTS)
|
||||
svgs : $(SVG0)
|
||||
|
||||
|
||||
# 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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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)
|
||||
$(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
|
||||
$(NODE) extract --uprightify 1 --svg $@ $<
|
||||
@echo $^ "'->'" $@
|
||||
$(ABFEAT) : $(OBJDIR)/.pass0-%.ab.fea : $(OBJDIR)/.pass0-%.fdt
|
||||
$(NODE) extract --feature $@ $<
|
||||
@echo $^ "'->'" $@
|
||||
$(MAPS) : $(OBJDIR)/%.charmap : $(OBJDIR)/.pass0-%.fdt
|
||||
$(NODE) extract --charmap $@ $<
|
||||
@echo $^ "'->'" $@
|
||||
$(FEATURE) : $(OBJDIR)/.pass0-%.fea : $(OBJDIR)/.pass0-%.ab.fea features/common.fea features/uprightonly.fea
|
||||
cat $^ > $@
|
||||
$(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
|
||||
$(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)
|
||||
$(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)
|
||||
$(PASS3) : $(OBJDIR)/.pass3-%.ttf : pass3-features.py $(OBJDIR)/.pass2-%.ttf $(OBJDIR)/.pass0-%.fea
|
||||
fontforge -quiet -script $^ $@ $(TARGETUPM) $(SUPPRESS_ERRORS)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue