Separated the upmscale
mechanism into the extract pass.
This commit is contained in:
parent
a206802e37
commit
8dc1dd9d33
|
@ -9,7 +9,7 @@ Building
|
||||||
To build Iosevka you should:
|
To build Iosevka you should:
|
||||||
|
|
||||||
1. Ensure that `node`, `FontForge`, `ttfautohint`, `ttx` and `make` are runnable in your terminal.
|
1. Ensure that `node`, `FontForge`, `ttfautohint`, `ttx` and `make` are runnable in your terminal.
|
||||||
2. Install the newest `patel-c` bt `npm install patel -g`
|
2. Install the newest `patel-c` (≥ 0.21.0) by `npm install patel -g`
|
||||||
3. Install necessary libs by `npm install`
|
3. Install necessary libs by `npm install`
|
||||||
4. `make`.
|
4. `make`.
|
||||||
|
|
||||||
|
|
|
@ -167,6 +167,7 @@ define [buildFont para recursive] : begin
|
||||||
define OPERATORSTROKE : adviceBlackness 3.2
|
define OPERATORSTROKE : adviceBlackness 3.2
|
||||||
|
|
||||||
define [adviceSSmooth y sign] : ((y - STROKE * 2) * 0.2 + STROKE) + sign * globalTransform.yx * para.smoothadjust
|
define [adviceSSmooth y sign] : ((y - STROKE * 2) * 0.2 + STROKE) + sign * globalTransform.yx * para.smoothadjust
|
||||||
|
define [adviceGlottalStopSmooth y sign] : ((y - STROKE) * 0.25 + STROKE / 2) + sign * globalTransform.yx * para.smoothadjust
|
||||||
|
|
||||||
# Anchor parameters
|
# Anchor parameters
|
||||||
define BASE 'base'
|
define BASE 'base'
|
||||||
|
@ -447,7 +448,6 @@ define [buildFont para recursive] : begin
|
||||||
|
|
||||||
# Metric metadata
|
# Metric metadata
|
||||||
# Note: we use 1000upm in design, and (1000 * upmsacle)upm in production, to avoid rounding error.
|
# Note: we use 1000upm in design, and (1000 * upmsacle)upm in production, to avoid rounding error.
|
||||||
define upmscale : fallback para.upmscale 1
|
|
||||||
|
|
||||||
let [asc : 1250 * CAP / (CAP - DESCENDER)] [desc : 1250 * DESCENDER / (CAP - DESCENDER)] : begin
|
let [asc : 1250 * CAP / (CAP - DESCENDER)] [desc : 1250 * DESCENDER / (CAP - DESCENDER)] : begin
|
||||||
set font.head.unitsPerEm 1000
|
set font.head.unitsPerEm 1000
|
||||||
|
@ -501,35 +501,6 @@ define [buildFont para recursive] : begin
|
||||||
$$include 'glyphs/symbol-other.patel'
|
$$include 'glyphs/symbol-other.patel'
|
||||||
$$include 'glyphs/autobuilds.patel'
|
$$include 'glyphs/autobuilds.patel'
|
||||||
|
|
||||||
### Zoom all glyphs by para.upmscale
|
|
||||||
|
|
||||||
set font.head.unitsPerEm : upmscale * font.head.unitsPerEm
|
|
||||||
set font.hhea.ascent : upmscale * font.hhea.ascent
|
|
||||||
set font.'OS/2'.usWinAscent : upmscale * font.'OS/2'.usWinAscent
|
|
||||||
set font.'OS/2'.sTypoAscender : upmscale * font.'OS/2'.sTypoAscender
|
|
||||||
set font.hhea.descent : upmscale * font.hhea.descent
|
|
||||||
set font.'OS/2'.usWinDescent : upmscale * font.'OS/2'.usWinDescent
|
|
||||||
set font.'OS/2'.sTypoDescender : upmscale * font.'OS/2'.sTypoDescender
|
|
||||||
set font.hhea.lineGap : upmscale * font.hhea.lineGap
|
|
||||||
set font.'OS/2'.sTypoLineGap : upmscale * font.'OS/2'.sTypoLineGap
|
|
||||||
set font.'OS/2'.sxHeight : upmscale * font.'OS/2'.sxHeight
|
|
||||||
set font.'OS/2'.sCapHeight : upmscale * font.'OS/2'.sCapHeight
|
|
||||||
|
|
||||||
if (upmscale != 1) : foreach glyph [items-of glyphList] : begin
|
|
||||||
glyph.advanceWidth = glyph.advanceWidth * upmscale
|
|
||||||
if glyph.contours: foreach contour [items-of glyph.contours] : foreach point [items-of contour] : begin
|
|
||||||
point.x = point.x * upmscale
|
|
||||||
point.y = point.y * upmscale
|
|
||||||
|
|
||||||
# We will uprightify all italic glyphs before outputing
|
|
||||||
# to prevent rounding error for common glyphs
|
|
||||||
local finalUprightify : Upright
|
|
||||||
finalUprightify.x = 0
|
|
||||||
finalUprightify.y = 0
|
|
||||||
if [not recursive] : foreach glyph [items-of glyphList] : begin
|
|
||||||
glyph.apply-transform finalUprightify
|
|
||||||
glyph.cleanup
|
|
||||||
|
|
||||||
set font.glyfMap glyphs
|
set font.glyfMap glyphs
|
||||||
return font
|
return font
|
||||||
|
|
||||||
|
|
47
extract.js
47
extract.js
|
@ -3,6 +3,8 @@ 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 Glyph = require('./support/glyph').Glyph;
|
||||||
|
|
||||||
function toBuffer(arrayBuffer) {
|
function toBuffer(arrayBuffer) {
|
||||||
var length = arrayBuffer.byteLength;
|
var length = arrayBuffer.byteLength;
|
||||||
var view = new DataView(arrayBuffer, 0, length);
|
var view = new DataView(arrayBuffer, 0, length);
|
||||||
|
@ -16,20 +18,20 @@ function pad(s, n){ while(s.length < n) s = '0' + s; return s; }
|
||||||
|
|
||||||
var options = {preserveOS2Version: true}
|
var options = {preserveOS2Version: true}
|
||||||
|
|
||||||
var ttfFont = JSON.parse(fs.readFileSync(argv._[0], 'utf-8'));
|
var font = JSON.parse(fs.readFileSync(argv._[0], 'utf-8'));
|
||||||
|
|
||||||
if(argv.charmap) {
|
if(argv.charmap) {
|
||||||
fs.writeFileSync(argv.charmap, JSON.stringify(ttfFont.glyf.map(function(glyph){ return [glyph.name, glyph.unicode, glyph.advanceWidth === 0 && glyph.anchors && Object.keys(glyph.anchors).length > 0]})), 'utf8')
|
fs.writeFileSync(argv.charmap, JSON.stringify(font.glyf.map(function(glyph){ return [glyph.name, glyph.unicode, glyph.advanceWidth === 0 && glyph.anchors && Object.keys(glyph.anchors).length > 0]})), 'utf8')
|
||||||
};
|
};
|
||||||
if(argv.feature) {
|
if(argv.feature) {
|
||||||
var featurefile = '\n\n';
|
var featurefile = '\n\n';
|
||||||
|
|
||||||
// markGlyphs
|
// markGlyphs
|
||||||
for(var key in ttfFont.features.markGlyphs){
|
for(var key in font.features.markGlyphs){
|
||||||
featurefile += '@MG_' + key + '= [' + ttfFont.features.markGlyphs[key].join(' ') + '];\n'
|
featurefile += '@MG_' + key + '= [' + font.features.markGlyphs[key].join(' ') + '];\n'
|
||||||
}
|
}
|
||||||
// mark
|
// mark
|
||||||
var mark = ttfFont.features.mark;
|
var mark = font.features.mark;
|
||||||
for(var id in mark) {
|
for(var id in mark) {
|
||||||
var lookup = mark[id];
|
var lookup = mark[id];
|
||||||
var lookupName = 'markAuto_' + id;
|
var lookupName = 'markAuto_' + id;
|
||||||
|
@ -37,14 +39,43 @@ if(argv.feature) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// mkmk
|
// mkmk
|
||||||
var mkmk = ttfFont.features.mkmk;
|
var mkmk = font.features.mkmk;
|
||||||
featurefile += 'lookup mkmkAuto {' + mkmk.marks.join(';\n') + ';\n' + mkmk.bases.join(';\n') + ';} mkmkAuto;'
|
featurefile += 'lookup mkmkAuto {' + mkmk.marks.join(';\n') + ';\n' + mkmk.bases.join(';\n') + ';} mkmkAuto;'
|
||||||
|
|
||||||
// gdef
|
// gdef
|
||||||
var gdef = ttfFont.features.gdef;
|
var gdef = font.features.gdef;
|
||||||
featurefile += '@GDEF_Simple = [' + gdef.simple.join(' \n') + '];\n@GDEF_Ligature =[' + gdef.ligature.join(' \n') + '];\n@GDEF_Mark = [' + gdef.mark.join(' \n') + '];\ntable GDEF { GlyphClassDef @GDEF_Simple, @GDEF_Ligature, @GDEF_Mark, ;} GDEF;'
|
featurefile += '@GDEF_Simple = [' + gdef.simple.join(' \n') + '];\n@GDEF_Ligature =[' + gdef.ligature.join(' \n') + '];\n@GDEF_Mark = [' + gdef.mark.join(' \n') + '];\ntable GDEF { GlyphClassDef @GDEF_Simple, @GDEF_Ligature, @GDEF_Mark, ;} GDEF;'
|
||||||
|
|
||||||
fs.writeFileSync(argv.feature, featurefile, 'utf8');
|
fs.writeFileSync(argv.feature, featurefile, 'utf8');
|
||||||
};
|
};
|
||||||
|
|
||||||
if(argv.ttf) fs.writeFileSync(argv.ttf, toBuffer(new TTFWriter(options).write(ttfFont)));
|
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);
|
||||||
|
for(var j = 0; j < font.glyf.length; j++){
|
||||||
|
var g = font.glyf[j];
|
||||||
|
g.advanceWidth *= upmscale;
|
||||||
|
if(g.contours) for(var k = 0; k < g.contours.length; k++) {
|
||||||
|
var contour = g.contours[k];
|
||||||
|
for(var p = 0; p < contour.length; p++) {
|
||||||
|
contour[p].y *= upmscale;
|
||||||
|
contour[p].x = contour[p].x * upmscale + contour[p].y * skew;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Glyph.prototype.cleanup.call(g);
|
||||||
|
}
|
||||||
|
font.head.unitsPerEm *= upmscale;
|
||||||
|
font.hhea.ascent *= upmscale;
|
||||||
|
font['OS/2'].usWinAscent *= upmscale;
|
||||||
|
font['OS/2'].sTypoAscender *= upmscale;
|
||||||
|
font.hhea.descent *= upmscale;
|
||||||
|
font['OS/2'].usWinDescent *= upmscale;
|
||||||
|
font['OS/2'].sTypoDescender *= upmscale;
|
||||||
|
font.hhea.lineGap *= upmscale;
|
||||||
|
font['OS/2'].sTypoLineGap *= upmscale;
|
||||||
|
font['OS/2'].sxHeight *= upmscale;
|
||||||
|
font['OS/2'].sCapHeight *= upmscale;
|
||||||
|
|
||||||
|
fs.writeFileSync(argv.ttf, toBuffer(new TTFWriter(options).write(font)));
|
||||||
|
}
|
|
@ -204,35 +204,34 @@ define [smallo u d l r _width _sma _smb ai] : glyph-construction
|
||||||
local sma : fallback _sma SMALLSMOOTHA
|
local sma : fallback _sma SMALLSMOOTHA
|
||||||
local smb : fallback _smb SMALLSMOOTHB
|
local smb : fallback _smb SMALLSMOOTHB
|
||||||
local mc : CORRECTION_OMIDX * width
|
local mc : CORRECTION_OMIDX * width
|
||||||
if (u - d > sma + smb)
|
if (u - d > sma + smb) : then : begin
|
||||||
then : begin
|
include : spiro
|
||||||
include : spiro
|
prepare : widths width 0
|
||||||
prepare : widths width 0
|
g4 (middle - mc) (u - O)
|
||||||
g4 (middle - mc) (u - O)
|
archv
|
||||||
archv
|
[if ai flat.ai flat] (l + O) (u - sma)
|
||||||
[if ai flat.ai flat] (l + O) (u - sma)
|
[if ai curl.ai curl] (l + O) (d + smb)
|
||||||
[if ai curl.ai curl] (l + O) (d + smb)
|
arcvh
|
||||||
arcvh
|
g4 (middle + mc) (d + O)
|
||||||
g4 (middle + mc) (d + O)
|
archv
|
||||||
archv
|
[if ai flat.ai flat] (r - O) (d + sma)
|
||||||
[if ai flat.ai flat] (r - O) (d + sma)
|
[if ai curl.ai curl] (r - O) (u - smb)
|
||||||
[if ai curl.ai curl] (r - O) (u - smb)
|
arcvh
|
||||||
arcvh
|
close
|
||||||
close
|
: else : begin
|
||||||
else : begin
|
local ymiddlea : mix d u (smb / (sma + smb))
|
||||||
local ymiddlea : mix d u (smb / (sma + smb))
|
local ymiddleb : mix d u (sma / (sma + smb))
|
||||||
local ymiddleb : mix d u (sma / (sma + smb))
|
include : spiro
|
||||||
include : spiro
|
prepare : widths width 0
|
||||||
prepare : widths width 0
|
g4 (middle - mc) (u - O)
|
||||||
g4 (middle - mc) (u - O)
|
archv
|
||||||
archv
|
g4 (l + O) ymiddlea
|
||||||
g4 (l + O) ymiddlea
|
arcvh
|
||||||
arcvh
|
g4 (middle + mc) (d + O)
|
||||||
g4 (middle + mc) (d + O)
|
archv
|
||||||
archv
|
g4 (r - O) ymiddleb
|
||||||
g4 (r - O) ymiddleb
|
arcvh
|
||||||
arcvh
|
close
|
||||||
close
|
|
||||||
|
|
||||||
|
|
||||||
define [HBar xleft xright y _fine] : glyph-construction
|
define [HBar xleft xright y _fine] : glyph-construction
|
||||||
|
@ -343,7 +342,6 @@ define [hookend y p f dontextend] : return {.type 'interpolate' .af [lambda [bef
|
||||||
# Derived subfonts
|
# Derived subfonts
|
||||||
define [Fork glyphs params] : begin
|
define [Fork glyphs params] : begin
|
||||||
local p : Object.create params
|
local p : Object.create params
|
||||||
p.upmscale = 1
|
|
||||||
local shouldBuildList {}
|
local shouldBuildList {}
|
||||||
foreach glyphid [items-of glyphs] : set shouldBuildList : shouldBuildList.concat {glyphid :: dependencyProfile.(glyphid)}
|
foreach glyphid [items-of glyphs] : set shouldBuildList : shouldBuildList.concat {glyphid :: dependencyProfile.(glyphid)}
|
||||||
local forkFont : buildFont p shouldBuildList
|
local forkFont : buildFont p shouldBuildList
|
||||||
|
|
|
@ -794,7 +794,7 @@ create-glyph 'glottalstop' : glyph-construction
|
||||||
widths.rhs
|
widths.rhs
|
||||||
g4 SB (CAP - HOOK)
|
g4 SB (CAP - HOOK)
|
||||||
hookstart CAPO
|
hookstart CAPO
|
||||||
g4 RIGHTSB (CAP - SMOOTHB)
|
g4 RIGHTSB (CAP - [adviceGlottalStopSmooth CAP 1])
|
||||||
alsothru 0.5 0.45 [widths (ESS / 2) (ESS / 2)]
|
alsothru 0.5 0.45 [widths (ESS / 2) (ESS / 2)]
|
||||||
flat (MIDDLE - HALFSTROKE * CORRECTION_HX) (XH * 0.3) [widths STROKE 0]
|
flat (MIDDLE - HALFSTROKE * CORRECTION_HX) (XH * 0.3) [widths STROKE 0]
|
||||||
curl (MIDDLE - HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
curl (MIDDLE - HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
||||||
|
@ -806,7 +806,7 @@ create-glyph 'revglottalstop' : glyph-construction
|
||||||
widths.lhs
|
widths.lhs
|
||||||
g4 RIGHTSB (CAP - HOOK)
|
g4 RIGHTSB (CAP - HOOK)
|
||||||
hookstart CAPO
|
hookstart CAPO
|
||||||
g4 SB (CAP - SMOOTHB)
|
g4 SB (CAP - [adviceGlottalStopSmooth CAP (-1)])
|
||||||
alsothru 0.5 0.45 [widths (ESS / 2) (ESS / 2)]
|
alsothru 0.5 0.45 [widths (ESS / 2) (ESS / 2)]
|
||||||
flat (MIDDLE + HALFSTROKE * CORRECTION_HX) (XH * 0.3) [widths 0 STROKE]
|
flat (MIDDLE + HALFSTROKE * CORRECTION_HX) (XH * 0.3) [widths 0 STROKE]
|
||||||
curl (MIDDLE + HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
curl (MIDDLE + HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
||||||
|
@ -818,7 +818,7 @@ create-glyph 'smallglottalstop' : glyph-construction
|
||||||
widths.rhs
|
widths.rhs
|
||||||
g4 SB (XH - HOOK)
|
g4 SB (XH - HOOK)
|
||||||
hookstart XO
|
hookstart XO
|
||||||
g4 RIGHTSB (XH - SMOOTHB)
|
g4 RIGHTSB (XH - [adviceGlottalStopSmooth XH 1])
|
||||||
alsothru 0.5 0.45 [widths (ESS / 2) (ESS / 2)]
|
alsothru 0.5 0.45 [widths (ESS / 2) (ESS / 2)]
|
||||||
flat (MIDDLE - HALFSTROKE * CORRECTION_HX) (XH * 0.15) [widths STROKE 0]
|
flat (MIDDLE - HALFSTROKE * CORRECTION_HX) (XH * 0.15) [widths STROKE 0]
|
||||||
curl (MIDDLE - HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
curl (MIDDLE - HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
||||||
|
@ -830,7 +830,7 @@ create-glyph 'invglottalstopbar' : glyph-construction
|
||||||
widths.lhs
|
widths.lhs
|
||||||
g4 RIGHTSB (XH - HOOK)
|
g4 RIGHTSB (XH - HOOK)
|
||||||
hookstart XO
|
hookstart XO
|
||||||
g4 SB (XH - SMOOTHB)
|
g4 SB (XH - [adviceGlottalStopSmooth XH 1])
|
||||||
alsothru 0.5 0.45 [widths (ESS / 2) (ESS / 2)]
|
alsothru 0.5 0.45 [widths (ESS / 2) (ESS / 2)]
|
||||||
flat (MIDDLE + HALFSTROKE * CORRECTION_HX) (XH * 0.15) [widths 0 STROKE]
|
flat (MIDDLE + HALFSTROKE * CORRECTION_HX) (XH * 0.15) [widths 0 STROKE]
|
||||||
curl (MIDDLE + HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
curl (MIDDLE + HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
||||||
|
@ -843,7 +843,7 @@ create-glyph 'fineglottalstop' : glyph-construction
|
||||||
widths.rhs (markHalfStroke * 2)
|
widths.rhs (markHalfStroke * 2)
|
||||||
g4 SB (CAP - HOOK)
|
g4 SB (CAP - HOOK)
|
||||||
hookstart CAPO
|
hookstart CAPO
|
||||||
g4 RIGHTSB (CAP - SMOOTHB)
|
g4 RIGHTSB (CAP - [adviceGlottalStopSmooth CAP 1])
|
||||||
alsothru 0.5 0.45 [widths markHalfStroke markHalfStroke]
|
alsothru 0.5 0.45 [widths markHalfStroke markHalfStroke]
|
||||||
flat (MIDDLE - HALFSTROKE * CORRECTION_HX) (XH * 0.3) [widths (markHalfStroke * 2) 0]
|
flat (MIDDLE - HALFSTROKE * CORRECTION_HX) (XH * 0.3) [widths (markHalfStroke * 2) 0]
|
||||||
curl (MIDDLE - HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
curl (MIDDLE - HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
||||||
|
@ -854,7 +854,7 @@ create-glyph 'finerevglottalstop' : glyph-construction
|
||||||
widths.lhs (markHalfStroke * 2)
|
widths.lhs (markHalfStroke * 2)
|
||||||
g4 RIGHTSB (CAP - HOOK)
|
g4 RIGHTSB (CAP - HOOK)
|
||||||
hookstart CAPO
|
hookstart CAPO
|
||||||
g4 SB (CAP - SMOOTHB)
|
g4 SB (CAP - [adviceGlottalStopSmooth CAP (-1)])
|
||||||
alsothru 0.5 0.45 [widths markHalfStroke markHalfStroke]
|
alsothru 0.5 0.45 [widths markHalfStroke markHalfStroke]
|
||||||
flat (MIDDLE + HALFSTROKE * CORRECTION_HX) (XH * 0.3) [widths 0 (markHalfStroke * 2)]
|
flat (MIDDLE + HALFSTROKE * CORRECTION_HX) (XH * 0.3) [widths 0 (markHalfStroke * 2)]
|
||||||
curl (MIDDLE + HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
curl (MIDDLE + HALFSTROKE * CORRECTION_HX) 0 [heading DOWNWARD]
|
||||||
|
|
|
@ -865,12 +865,13 @@ define [ErTail left w dohook] : glyph-construction
|
||||||
local right WIDTH
|
local right WIDTH
|
||||||
local mid : mix left right 0.5
|
local mid : mix left right 0.5
|
||||||
local rise : (WIDTH - left) * 0.3
|
local rise : (WIDTH - left) * 0.3
|
||||||
|
local sw : fallback w (markFine * 2)
|
||||||
include : spiro
|
include : spiro
|
||||||
widths.center
|
widths.center sw
|
||||||
g2 (left - markFine * 2 * CORRECTION_HX) (XH * 0.5)
|
g2 (left) (XH * 0.5)
|
||||||
g2 (mid - markFine * 2 * CORRECTION_HX) (XH * 0.5 + rise) [widths 0 STROKE]
|
g2 (mid - sw * CORRECTION_HX) (XH * 0.5 + rise) [widths 0 sw]
|
||||||
include : spiro
|
include : spiro
|
||||||
widths.rhs [fallback w (markFine * 2)]
|
widths.rhs sw
|
||||||
flat mid (XH * 0.5 + rise) [heading DOWNWARD]
|
flat mid (XH * 0.5 + rise) [heading DOWNWARD]
|
||||||
curl mid (XH * 0.5 + [if dohook 0 (rise - 1)]) [heading DOWNWARD]
|
curl mid (XH * 0.5 + [if dohook 0 (rise - 1)]) [heading DOWNWARD]
|
||||||
if dohook {[hookend (XH * 0.5 - rise)]} {[arcvh]}
|
if dohook {[hookend (XH * 0.5 - rise)]} {[arcvh]}
|
||||||
|
@ -879,20 +880,20 @@ define [ErTail left w dohook] : glyph-construction
|
||||||
|
|
||||||
create-glyph 'rhotichook' : glyph-construction
|
create-glyph 'rhotichook' : glyph-construction
|
||||||
assign-unicode 0x2DE
|
assign-unicode 0x2DE
|
||||||
include : ErTail 0 STROKE true
|
include : ErTail (-STROKE * CORRECTION_HX) STROKE true
|
||||||
create-glyph 'er' : glyph-construction
|
create-glyph 'er' : glyph-construction
|
||||||
assign-unicode 0x25A
|
assign-unicode 0x25A
|
||||||
include eMarks
|
include eMarks
|
||||||
local f : Thinner {'schwa'} 0.85
|
local f : Thinner {'schwa'} 0.85
|
||||||
include f.schwa
|
include f.schwa
|
||||||
include : ErTail (WIDTH * 0.85 - SB)
|
include : ErTail (WIDTH * 0.85 - SB - markFine * CORRECTION_HX)
|
||||||
|
|
||||||
create-glyph 'revlatinepsiloner' : glyph-construction
|
create-glyph 'revlatinepsiloner' : glyph-construction
|
||||||
assign-unicode 0x25D
|
assign-unicode 0x25D
|
||||||
include eMarks
|
include eMarks
|
||||||
local f : Thinner {'revlatinepsilon'} 0.85
|
local f : Thinner {'revlatinepsilon'} 0.85
|
||||||
include f.revlatinepsilon
|
include f.revlatinepsilon
|
||||||
include : ErTail (WIDTH * 0.85 - SB)
|
include : ErTail (WIDTH * 0.85 - SB - markFine * CORRECTION_HX)
|
||||||
|
|
||||||
# Belted
|
# Belted
|
||||||
define [Belt] : glyph-construction
|
define [Belt] : glyph-construction
|
||||||
|
|
|
@ -158,24 +158,23 @@ create-glyph 'eight' : glyph-construction
|
||||||
set-width WIDTH
|
set-width WIDTH
|
||||||
assign-unicode '8'
|
assign-unicode '8'
|
||||||
|
|
||||||
local sma : SMOOTHA * 0.975 + CORRECTION_VS * CORRECTION_HX
|
local sm : SMOOTH * 0.975
|
||||||
local smb : SMOOTHB * 0.975 - CORRECTION_VS * CORRECTION_HX
|
|
||||||
|
|
||||||
local p 0.96
|
local p 0.96
|
||||||
|
|
||||||
include : spiro
|
include : spiro
|
||||||
widths.lhs
|
widths.lhs
|
||||||
g4 (MIDDLE - CORRECTION_OMIDS + CORRECTION_VS) (CAP - O - STROKE)
|
g4 (MIDDLE) (CAP - O - STROKE) [heading RIGHTWARD]
|
||||||
archv 1
|
archv 1
|
||||||
g4 ([mix SB RIGHTSB p] - STROKE) (CAP - smb * p)
|
g4 ([mix SB RIGHTSB p] - STROKE) (CAP - sm * p) [heading DOWNWARD]
|
||||||
alsothru 0.5 0.5 [widths HALFSTROKE HALFSTROKE]
|
alsothru 0.5 0.5 [widths HALFSTROKE HALFSTROKE]
|
||||||
g4 (SB + STROKE) smb [widths 0 STROKE]
|
g4 (SB + STROKE) sm [widths.heading 0 STROKE DOWNWARD]
|
||||||
arcvh 1
|
arcvh 1
|
||||||
g4 (MIDDLE + CORRECTION_OMIDS - CORRECTION_VS) (O + STROKE)
|
g4 (MIDDLE) (O + STROKE) [heading RIGHTWARD]
|
||||||
archv 1
|
archv 1
|
||||||
g4 (RIGHTSB - STROKE) sma [widths 0 STROKE]
|
g4 (RIGHTSB - STROKE) sm [widths.heading 0 STROKE UPWARD]
|
||||||
alsothru 0.5 0.5 [widths HALFSTROKE HALFSTROKE]
|
alsothru 0.5 0.5 [widths HALFSTROKE HALFSTROKE]
|
||||||
g4 ([mix RIGHTSB SB p] + STROKE) (CAP - sma * p) [widths STROKE 0]
|
g4 ([mix RIGHTSB SB p] + STROKE) (CAP - sm * p) [widths.heading STROKE 0 UPWARD]
|
||||||
arcvh 1
|
arcvh 1
|
||||||
close
|
close
|
||||||
|
|
||||||
|
|
4
makefile
4
makefile
|
@ -1,6 +1,6 @@
|
||||||
TARGETUPM = 1000
|
TARGETUPM = 1000
|
||||||
|
|
||||||
SUPPORT_FILES = support/glyph.js support/stroke.js support/spiroexpand.js parameters.js generate.js emptyfont.toml parameters.toml
|
SUPPORT_FILES = support/glyph.js support/stroke.js support/spiroexpand.js parameters.js extract.js generate.js emptyfont.toml parameters.toml
|
||||||
GLYPH_SEGMENTS = glyphs/common-shapes.patel glyphs/overmarks.patel glyphs/latin-basic-capital.patel glyphs/latin-basic-lower.patel glyphs/greek.patel glyphs/cyrillic-basic.patel glyphs/latin-extend-basis.patel glyphs/latin-extend-decorated.patel glyphs/cyrillic-extended.patel glyphs/numbers.patel glyphs/symbol-ascii.patel glyphs/symbol-punctuation.patel glyphs/symbol-math.patel glyphs/symbol-geometric.patel glyphs/symbol-other.patel glyphs/symbol-letter.patel glyphs/autobuilds.patel
|
GLYPH_SEGMENTS = glyphs/common-shapes.patel glyphs/overmarks.patel glyphs/latin-basic-capital.patel glyphs/latin-basic-lower.patel glyphs/greek.patel glyphs/cyrillic-basic.patel glyphs/latin-extend-basis.patel glyphs/latin-extend-decorated.patel glyphs/cyrillic-extended.patel glyphs/numbers.patel glyphs/symbol-ascii.patel glyphs/symbol-punctuation.patel glyphs/symbol-math.patel glyphs/symbol-geometric.patel glyphs/symbol-other.patel glyphs/symbol-letter.patel glyphs/autobuilds.patel
|
||||||
OBJDIR = build
|
OBJDIR = build
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ $(OBJDIR)/.pass0-iosevkacc-bolditalic.fdt : $(FILES) | $(OBJDIR)
|
||||||
node generate -o $@ iosevka cc w-bold s-italic x-bolditalic
|
node generate -o $@ iosevka cc w-bold s-italic x-bolditalic
|
||||||
|
|
||||||
$(PASS0) : $(OBJDIR)/.pass0-%.ttf : $(OBJDIR)/.pass0-%.fdt
|
$(PASS0) : $(OBJDIR)/.pass0-%.ttf : $(OBJDIR)/.pass0-%.fdt
|
||||||
node extract --ttf $@ $<
|
node extract --upm 16000 --uprightify 1 --ttf $@ $<
|
||||||
$(ABFEAT) : $(OBJDIR)/.pass0-%.ab.fea : $(OBJDIR)/.pass0-%.fdt
|
$(ABFEAT) : $(OBJDIR)/.pass0-%.ab.fea : $(OBJDIR)/.pass0-%.fdt
|
||||||
node extract --feature $@ $<
|
node extract --feature $@ $<
|
||||||
$(MAPS) : $(OBJDIR)/%.charmap : $(OBJDIR)/.pass0-%.fdt
|
$(MAPS) : $(OBJDIR)/%.charmap : $(OBJDIR)/.pass0-%.fdt
|
||||||
|
|
|
@ -5,7 +5,6 @@ codename = 'Yoikata'
|
||||||
copyright = 'Copyright (c) 2015 Belleve Invis.'
|
copyright = 'Copyright (c) 2015 Belleve Invis.'
|
||||||
licence = '''This font software is licenced under the SIL Open Font Licence, Version 1.1. This is licence is avaliable with a FAQ at: http://scripts.sil.org/OFL. This font software is distributes on an 'AS IS' basis, without warranties or conditions of any kind, either express or implied. See the SIL Open Font licence fot the specific language, premissions and limitations governing your use of this font software.'''
|
licence = '''This font software is licenced under the SIL Open Font Licence, Version 1.1. This is licence is avaliable with a FAQ at: http://scripts.sil.org/OFL. This font software is distributes on an 'AS IS' basis, without warranties or conditions of any kind, either express or implied. See the SIL Open Font licence fot the specific language, premissions and limitations governing your use of this font software.'''
|
||||||
|
|
||||||
upmscale = 16
|
|
||||||
width = 500
|
width = 500
|
||||||
cap = 724
|
cap = 724
|
||||||
xheight = 530
|
xheight = 530
|
||||||
|
|
Loading…
Reference in New Issue
Block a user