Added metadata generation procedure.
This commit is contained in:
parent
89c3d4ecfe
commit
cd8f1b2302
9 changed files with 2603 additions and 2518 deletions
3
buildglyphs-final.patel
Normal file
3
buildglyphs-final.patel
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
|
||||||
|
return font
|
||||||
|
}
|
|
@ -1,69 +1,14 @@
|
||||||
define font [require './empty.json']
|
|
||||||
exports.font = font
|
|
||||||
|
|
||||||
define glyphList font.glyf
|
|
||||||
define glyphs (.'.notdef' glyphList.0)
|
|
||||||
|
|
||||||
|
|
||||||
define Glyph [require './support/glyph'].Glyph
|
define Glyph [require './support/glyph'].Glyph
|
||||||
define Stroke [require './support/stroke'].Stroke
|
define Stroke [require './support/stroke'].Stroke
|
||||||
|
|
||||||
define para_regular (
|
define [exports.build para] : begin {
|
||||||
.width 500
|
|
||||||
.stroke 80
|
|
||||||
.dotsize 125
|
|
||||||
.sb 60
|
|
||||||
.cap 771
|
|
||||||
.xheight 560
|
|
||||||
.hook 145
|
|
||||||
.ahook 135
|
|
||||||
.shook 100
|
|
||||||
.rhook 75
|
|
||||||
.smooth 192
|
|
||||||
.smallsmooth 242
|
|
||||||
.smoothadjust 100
|
|
||||||
.o [-8]
|
|
||||||
.oxhook 0
|
|
||||||
.descender [-178]
|
|
||||||
.kappa 0.515
|
|
||||||
.italicangle 0
|
|
||||||
.barpos 0.45
|
|
||||||
.gbarpos 0.37
|
|
||||||
.longserif 175
|
|
||||||
.accent 175
|
|
||||||
.tbalance 70
|
|
||||||
.tbalance2 30
|
|
||||||
.rbalance 25
|
|
||||||
)
|
|
||||||
|
|
||||||
define para_bold : Object.create para_regular
|
define variantSelector para.variantSelector
|
||||||
para_bold.sb = 50
|
|
||||||
para_bold.stroke = 120
|
|
||||||
para_bold.dotsize = 160
|
|
||||||
para_bold.barpos = 0.42
|
|
||||||
para_bold.hook = 150
|
|
||||||
para_bold.ahook = 100
|
|
||||||
para_bold.oxhook = 0
|
|
||||||
para_bold.kappa_hook = 0.7
|
|
||||||
para_bold.kappa_ahook = 0.60
|
|
||||||
para_bold.jbalance = 60
|
|
||||||
para_bold.tbalance = 60
|
|
||||||
para_bold.rbalance = 18
|
|
||||||
|
|
||||||
define para_italic : Object.create para_regular
|
define font [require './empty.json']
|
||||||
para_italic.italicangle = 10
|
|
||||||
para_italic.tbalance = 70
|
|
||||||
para_italic.rbalance = 30
|
|
||||||
|
|
||||||
define para_bolditalic : Object.create para_bold
|
define glyphList font.glyf
|
||||||
para_bolditalic.italicangle = 10
|
define glyphs (.'.notdef' glyphList.0)
|
||||||
para_bolditalic.tbalance = 90
|
|
||||||
|
|
||||||
para = para_italic
|
|
||||||
|
|
||||||
define variantSelector (
|
|
||||||
.zero 'slashed'
|
|
||||||
)
|
|
||||||
|
|
||||||
define globalTransform (
|
define globalTransform (
|
||||||
.xx 1
|
.xx 1
|
||||||
|
@ -162,6 +107,20 @@ define ifMarks (.anchors (.above markAboveCap.anchors.above .below markBe
|
||||||
|
|
||||||
Stroke.bindParameters para
|
Stroke.bindParameters para
|
||||||
|
|
||||||
|
set font.name.fontFamily para.family
|
||||||
|
set font.name.fontSubFamily para.style
|
||||||
|
set font.name.preferredFamily para.family
|
||||||
|
set font.name.preferredSubFamily para.style
|
||||||
|
set font.name.uniqueSubFamily : para.family + ' ' + para.style + ' ' + para.version
|
||||||
|
set font.name.version para.version
|
||||||
|
set font.name.fullName : para.family + ' ' + para.style
|
||||||
|
set font.name.postScriptName : font.name.fullName.replace [regex ' ' 'g'] '-'
|
||||||
|
set font.name.copyright para.copyright
|
||||||
|
set font.'OS/2'.usWeightClass para.weight
|
||||||
|
set font.'OS/2'.bProportion 9 # Monospaced
|
||||||
|
|
||||||
|
### Font names
|
||||||
|
|
||||||
### Useful shapes
|
### Useful shapes
|
||||||
define [Ring u d l r] : begin {
|
define [Ring u d l r] : begin {
|
||||||
local my [[u + d] / 2]
|
local my [[u + d] / 2]
|
2416
buildglyphs.js
Normal file
2416
buildglyphs.js
Normal file
File diff suppressed because it is too large
Load diff
|
@ -9,7 +9,14 @@
|
||||||
{"contours":[[{"x":34,"y":0,"onCurve":true},{"x":34,"y":682,"onCurve":true},{"x":306,"y":682,"onCurve":true},{"x":306,"y":0,"onCurve":true}],[{"x":68,"y":34,"onCurve":true},{"x":272,"y":34,"onCurve":true},{"x":272,"y":648,"onCurve":true},{"x":68,"y":648,"onCurve":true}]],"advanceWidth":500,"name":".notdef"}
|
{"contours":[[{"x":34,"y":0,"onCurve":true},{"x":34,"y":682,"onCurve":true},{"x":306,"y":682,"onCurve":true},{"x":306,"y":0,"onCurve":true}],[{"x":68,"y":34,"onCurve":true},{"x":272,"y":34,"onCurve":true},{"x":272,"y":648,"onCurve":true},{"x":68,"y":648,"onCurve":true}]],"advanceWidth":500,"name":".notdef"}
|
||||||
],
|
],
|
||||||
"cmap":{},
|
"cmap":{},
|
||||||
"name":{"fontFamily":"fonteditor","fontSubFamily":"Medium","uniqueSubFamily":"FontEditor 1.0 : fonteditor : 6-10-2014","fullName":"fonteditor","version":"Version 1.0","postScriptName":"fonteditor"},
|
"name":{
|
||||||
|
"fontFamily": "node-sfnt",
|
||||||
|
"fontSubFamily": "regular",
|
||||||
|
"uniqueSubFamily": "node-sfnt blank font",
|
||||||
|
"fullName": "node-sfnt",
|
||||||
|
"version": "Version 1.0",
|
||||||
|
"postScriptName": "node-sfnt"
|
||||||
|
},
|
||||||
"hhea":{"version":1,"ascent":812,"descent":-212,"lineGap":92,"advanceWidthMax":374,"minLeftSideBearing":34,"minRightSideBearing":68,"xMaxExtent":306,"caretSlopeRise":1,"caretSlopeRun":0,"caretOffset":0,"reserved0":0,"reserved1":0,"reserved2":0,"reserved3":0,"metricDataFormat":0,"numOfLongHorMetrics":1},
|
"hhea":{"version":1,"ascent":812,"descent":-212,"lineGap":92,"advanceWidthMax":374,"minLeftSideBearing":34,"minRightSideBearing":68,"xMaxExtent":306,"caretSlopeRise":1,"caretSlopeRun":0,"caretOffset":0,"reserved0":0,"reserved1":0,"reserved2":0,"reserved3":0,"metricDataFormat":0,"numOfLongHorMetrics":1},
|
||||||
"post":{"italicAngle":0,"postoints":65411,"underlinePosition":50,"underlineThickness":0,"isFixedPitch":0,"minMemType42":0,"maxMemType42":0,"minMemType1":0,"maxMemType1":1,"format":2},
|
"post":{"italicAngle":0,"postoints":65411,"underlinePosition":50,"underlineThickness":0,"isFixedPitch":0,"minMemType42":0,"maxMemType42":0,"minMemType1":0,"maxMemType1":1,"format":2},
|
||||||
"OS/2":{"version":4,"xAvgCharWidth":1031,"usWeightClass":400,"usWidthClass":5,"fsType":0,"ySubscriptXSize":665,"ySubscriptYSize":716,"ySubscriptXOffset":0,"ySubscriptYOffset":143,"ySuperscriptXSize":665,"ySuperscriptYSize":716,"ySuperscriptXOffset":0,"ySuperscriptYOffset":491,"yStrikeoutSize":51,"yStrikeoutPosition":265,"sFamilyClass":0,"bFamilyType":2,"bSerifStyle":0,"bWeight":6,"bProportion":3,"bContrast":0,"bStrokeVariation":0,"bArmStyle":0,"bLetterform":0,"bMidline":0,"bXHeight":0,"ulUnicodeRange1":1,"ulUnicodeRange2":268435456,"ulUnicodeRange3":0,"ulUnicodeRange4":0,"achVendID":"PfEd","fsSelection":192,"usFirstCharIndex":0,"usLastCharIndex":0,"sTypoAscender":812,"sTypoDescender":-212,"sTypoLineGap":92,"usWinAscent":812,"usWinDescent":212,"ulCodePageRange1":1,"ulCodePageRange2":0,"sxHeight":792,"sCapHeight":0,"usDefaultChar":0,"usBreakChar":32,"usMaxContext":1}
|
"OS/2":{"version":4,"xAvgCharWidth":1031,"usWeightClass":400,"usWidthClass":5,"fsType":0,"ySubscriptXSize":665,"ySubscriptYSize":716,"ySubscriptXOffset":0,"ySubscriptYOffset":143,"ySuperscriptXSize":665,"ySuperscriptYSize":716,"ySuperscriptXOffset":0,"ySuperscriptYOffset":491,"yStrikeoutSize":51,"yStrikeoutPosition":265,"sFamilyClass":0,"bFamilyType":2,"bSerifStyle":0,"bWeight":6,"bProportion":3,"bContrast":0,"bStrokeVariation":0,"bArmStyle":0,"bLetterform":0,"bMidline":0,"bXHeight":0,"ulUnicodeRange1":1,"ulUnicodeRange2":268435456,"ulUnicodeRange3":0,"ulUnicodeRange4":0,"achVendID":"PfEd","fsSelection":192,"usFirstCharIndex":0,"usLastCharIndex":0,"sTypoAscender":812,"sTypoDescender":-212,"sTypoLineGap":92,"usWinAscent":812,"usWinDescent":212,"ulCodePageRange1":1,"ulCodePageRange2":0,"sxHeight":792,"sCapHeight":0,"usDefaultChar":0,"usBreakChar":32,"usMaxContext":1}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var font = require('./font.js');
|
var buildGlyphs = require('./buildglyphs.js');
|
||||||
|
var parameters = require('./parameters');
|
||||||
var TTFWriter = require('node-sfnt').TTFWriter;
|
var TTFWriter = require('node-sfnt').TTFWriter;
|
||||||
var TTF = require('node-sfnt').TTF;
|
var TTF = require('node-sfnt').TTF;
|
||||||
|
|
||||||
|
@ -48,4 +49,7 @@ function writettf(ttf, file){
|
||||||
fs.writeFileSync(file, toBuffer(buffer));
|
fs.writeFileSync(file, toBuffer(buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.writeFileSync(process.argv[2], toBuffer(new TTFWriter(options).write(font.font)));
|
var variant = process.argv[2]
|
||||||
|
var outputPath = process.argv[3]
|
||||||
|
|
||||||
|
fs.writeFileSync(outputPath, toBuffer(new TTFWriter(options).write(buildGlyphs.build(parameters[variant]))));
|
23
makefile
23
makefile
|
@ -1,11 +1,26 @@
|
||||||
JSFILES = support/glyph.js support/stroke.js
|
SUPPORT_FILES = support/glyph.js support/stroke.js parameters.js
|
||||||
|
GLYPH_SEGMENTS = glyphs/latin-capital.patel glyphs/latin-lower.patel
|
||||||
|
|
||||||
all : $(JSFILES) font.js
|
FILES = $(SUPPORT_FILES) buildglyphs.js
|
||||||
|
|
||||||
$(JSFILES) :
|
fonts : update codex-regular.ttf codex-bold.ttf codex-italic.ttf codex-bolditalic.ttf
|
||||||
|
|
||||||
|
codex-regular.ttf : $(FILES)
|
||||||
|
node generate regular $@
|
||||||
|
codex-bold.ttf : $(FILES)
|
||||||
|
node generate bold $@
|
||||||
|
codex-italic.ttf : $(FILES)
|
||||||
|
node generate italic $@
|
||||||
|
codex-bolditalic.ttf : $(FILES)
|
||||||
|
node generate bolditalic $@
|
||||||
|
|
||||||
|
update : $(FILES)
|
||||||
|
|
||||||
|
$(SUPPORT_FILES) :
|
||||||
patel-c $< -o $@
|
patel-c $< -o $@
|
||||||
|
|
||||||
font.js : font.patel glyphs/latin-capital.patel glyphs/latin-lower.patel
|
buildglyphs.js : buildglyphs-intro.patel $(GLYPH_SEGMENTS) buildglyphs-final.patel
|
||||||
cat $^ | patel-c -o $@
|
cat $^ | patel-c -o $@
|
||||||
support/glyph.js : support/glyph.patel
|
support/glyph.js : support/glyph.patel
|
||||||
support/stroke.js : support/stroke.patel
|
support/stroke.js : support/stroke.patel
|
||||||
|
parameters.js : parameters.patel
|
64
parameters.js
Normal file
64
parameters.js
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
{
|
||||||
|
var r0_regular, r0_bold, r0_italic, r0_bolditalic;
|
||||||
|
r0_regular = {
|
||||||
|
'width': 500,
|
||||||
|
'stroke': 80,
|
||||||
|
'dotsize': 125,
|
||||||
|
'sb': 60,
|
||||||
|
'cap': 771,
|
||||||
|
'xheight': 560,
|
||||||
|
'hook': 145,
|
||||||
|
'ahook': 135,
|
||||||
|
'shook': 100,
|
||||||
|
'rhook': 75,
|
||||||
|
'smooth': 192,
|
||||||
|
'smallsmooth': 242,
|
||||||
|
'smoothadjust': 100,
|
||||||
|
'o': -8,
|
||||||
|
'oxhook': 0,
|
||||||
|
'descender': -178,
|
||||||
|
'kappa': 0.515,
|
||||||
|
'italicangle': 0,
|
||||||
|
'barpos': 0.45,
|
||||||
|
'gbarpos': 0.37,
|
||||||
|
'longserif': 175,
|
||||||
|
'accent': 175,
|
||||||
|
'tbalance': 70,
|
||||||
|
'tbalance2': 30,
|
||||||
|
'rbalance': 25,
|
||||||
|
'family': 'Codex HW',
|
||||||
|
'style': 'Regular',
|
||||||
|
'weight': 400,
|
||||||
|
'version': 'r0.0.1',
|
||||||
|
'variantSelector': {},
|
||||||
|
'copyright': 'Copyright (c) 2015 Belleve Invis.'
|
||||||
|
};
|
||||||
|
r0_bold = Object['create'](r0_regular);
|
||||||
|
r0_bold['sb'] = 50;
|
||||||
|
r0_bold['stroke'] = 120;
|
||||||
|
r0_bold['dotsize'] = 160;
|
||||||
|
r0_bold['barpos'] = 0.42;
|
||||||
|
r0_bold['hook'] = 150;
|
||||||
|
r0_bold['ahook'] = 100;
|
||||||
|
r0_bold['oxhook'] = 0;
|
||||||
|
r0_bold['kappa_hook'] = 0.7;
|
||||||
|
r0_bold['kappa_ahook'] = 0.6;
|
||||||
|
r0_bold['jbalance'] = 60;
|
||||||
|
r0_bold['tbalance'] = 60;
|
||||||
|
r0_bold['rbalance'] = 18;
|
||||||
|
r0_bold['style'] = 'Bold';
|
||||||
|
r0_bold['weight'] = 600;
|
||||||
|
r0_italic = Object['create'](r0_regular);
|
||||||
|
r0_italic['italicangle'] = 10;
|
||||||
|
r0_italic['tbalance'] = 70;
|
||||||
|
r0_italic['rbalance'] = 30;
|
||||||
|
r0_italic['style'] = 'Italic';
|
||||||
|
r0_bolditalic = Object['create'](r0_bold);
|
||||||
|
r0_bolditalic['italicangle'] = 10;
|
||||||
|
r0_bolditalic['tbalance'] = 90;
|
||||||
|
r0_bolditalic['style'] = 'BoldItalic';
|
||||||
|
exports['regular'] = r0_regular;
|
||||||
|
exports['bold'] = r0_bold;
|
||||||
|
exports['italic'] = r0_italic;
|
||||||
|
exports['bolditalic'] = r0_bolditalic;
|
||||||
|
}
|
67
parameters.patel
Normal file
67
parameters.patel
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
define regular (
|
||||||
|
.width 500
|
||||||
|
.stroke 80
|
||||||
|
.dotsize 125
|
||||||
|
.sb 60
|
||||||
|
.cap 771
|
||||||
|
.xheight 560
|
||||||
|
.hook 145
|
||||||
|
.ahook 135
|
||||||
|
.shook 100
|
||||||
|
.rhook 75
|
||||||
|
.smooth 192
|
||||||
|
.smallsmooth 242
|
||||||
|
.smoothadjust 100
|
||||||
|
.o [-8]
|
||||||
|
.oxhook 0
|
||||||
|
.descender [-178]
|
||||||
|
.kappa 0.515
|
||||||
|
.italicangle 0
|
||||||
|
.barpos 0.45
|
||||||
|
.gbarpos 0.37
|
||||||
|
.longserif 175
|
||||||
|
.accent 175
|
||||||
|
.tbalance 70
|
||||||
|
.tbalance2 30
|
||||||
|
.rbalance 25
|
||||||
|
|
||||||
|
.family 'Codex HW'
|
||||||
|
.style 'Regular'
|
||||||
|
.weight 400
|
||||||
|
.version 'r0.0.1'
|
||||||
|
.variantSelector (.)
|
||||||
|
.copyright 'Copyright (c) 2015 Belleve Invis.'
|
||||||
|
)
|
||||||
|
|
||||||
|
define bold : Object.create regular
|
||||||
|
bold.sb = 50
|
||||||
|
bold.stroke = 120
|
||||||
|
bold.dotsize = 160
|
||||||
|
bold.barpos = 0.42
|
||||||
|
bold.hook = 150
|
||||||
|
bold.ahook = 100
|
||||||
|
bold.oxhook = 0
|
||||||
|
bold.kappa_hook = 0.7
|
||||||
|
bold.kappa_ahook = 0.60
|
||||||
|
bold.jbalance = 60
|
||||||
|
bold.tbalance = 60
|
||||||
|
bold.rbalance = 18
|
||||||
|
bold.style = 'Bold'
|
||||||
|
bold.weight = 600
|
||||||
|
|
||||||
|
define italic : Object.create regular
|
||||||
|
italic.italicangle = 10
|
||||||
|
italic.tbalance = 70
|
||||||
|
italic.rbalance = 30
|
||||||
|
italic.style = 'Italic'
|
||||||
|
|
||||||
|
define bolditalic : Object.create bold
|
||||||
|
bolditalic.italicangle = 10
|
||||||
|
bolditalic.tbalance = 90
|
||||||
|
bolditalic.style = 'BoldItalic'
|
||||||
|
|
||||||
|
|
||||||
|
exports.regular = regular
|
||||||
|
exports.bold = bold
|
||||||
|
exports.italic = italic
|
||||||
|
exports.bolditalic = bolditalic
|
Loading…
Add table
Add a link
Reference in a new issue