summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Nixon <swr410@gmail.com>2019-03-27 21:37:34 +0300
committerRasmus <rasmus@notion.se>2019-03-27 21:37:34 +0300
commitfb79b9ee890272c29bfd1a56531eb33cc578198c (patch)
treece65f117fc0829dca79368c78df904de3f7db546
parent3488601548fc20b1a6533b1a172eef83f04e5feb (diff)
downloadinter-fb79b9ee890272c29bfd1a56531eb33cc578198c.tar.xz
Use vert metrics script to fix line heights issue #124 (#141)
-rw-r--r--misc/glyphs-scripts/set-vertical-metrics.py113
-rw-r--r--src/Inter.glyphs126
2 files changed, 226 insertions, 13 deletions
diff --git a/misc/glyphs-scripts/set-vertical-metrics.py b/misc/glyphs-scripts/set-vertical-metrics.py
new file mode 100644
index 000000000..1ae3b6cb9
--- /dev/null
+++ b/misc/glyphs-scripts/set-vertical-metrics.py
@@ -0,0 +1,113 @@
+#MenuTitle: Set Vertical Metric Params
+# -*- coding: utf-8 -*-
+
+font = Glyphs.font
+
+print(font)
+
+__doc__="""
+ Assumes the masters keep the same vertical metrics.
+
+ I am not sure whether winAscent and winDescent should be different between masters,
+ otherwise, but you should check if that's the case before using this script
+ on a font where min/max heights are different between styles.
+
+ Useful when created; may or may not match the latest Google Fonts vertical metrics standards.
+"""
+
+font = Glyphs.font
+
+
+
+caps = ["A", "Aacute", "Abreve", "Acircumflex", "Adieresis", "Agrave", "Amacron", "Aogonek", "Aring", "Aringacute", "Atilde", "AE", "AEacute", "B", "C", "Cacute", "Ccaron", "Ccedilla", "Ccircumflex", "Cdotaccent", "D", "Eth", "Dcaron", "Dcroat", "Ddotbelow", "E", "Eacute", "Ebreve", "Ecaron", "Ecircumflex", "Edieresis", "Edotaccent", "Edotbelow", "Egrave", "Emacron", "Eogonek", "Etilde", "F", "G", "Gbreve", "Gcircumflex", "Gcommaaccent", "Gdotaccent", "H", "Hbar", "Hcircumflex", "Hdotbelow", "I", "IJ", "Iacute", "Ibreve", "Icircumflex", "Idieresis", "Idotaccent", "Idotbelow", "Igrave", "Imacron", "Iogonek", "Itilde", "J", "Jcircumflex", "K", "Kcommaaccent", "L", "Lacute", "Lcaron", "Lcommaaccent", "Ldot", "Lslash", "M", "N", "Nacute", "Ncaron", "Ncommaaccent", "Ndotaccent", "Eng", "Ntilde", "O", "Oacute", "Obreve", "Ocircumflex", "Odieresis", "Odotbelow", "Ograve", "Ohungarumlaut", "Omacron", "Oogonek", "Oslash", "Oslashacute", "Otilde", "OE", "P", "Thorn", "Q", "R", "Racute", "Rcaron", "Rcommaaccent", "Rdotbelow", "S", "Sacute", "Scaron", "Scircumflex", "Sdotbelow", "Schwa", "T", "Tbar", "Tcaron", "Tdotbelow", "U", "Uacute", "Ubreve", "Ucircumflex", "Udieresis", "Udotbelow", "Ugrave", "Uhungarumlaut", "Umacron", "Uogonek", "Uring", "Utilde", "V", "W", "Wacute", "Wcircumflex", "Wdieresis", "Wgrave", "X", "Y", "Yacute", "Ycircumflex", "Ydieresis", "Ygrave", "Ytilde", "Z", "Zacute", "Zcaron", "Zdotaccent", "Zdotbelow", "uni015E", "uni0162", "uni01C4", "uni01C5", "uni01C7", "uni01C8", "uni01CA", "uni01CB", "uni01F1", "uni01F2", "uni0218", "uni021A" ]
+lowercase = ["a", "aacute", "abreve", "acircumflex", "adieresis", "agrave", "amacron", "aogonek", "aring", "aringacute", "atilde", "ae", "aeacute", "b", "c", "cacute", "ccaron", "ccedilla", "ccircumflex", "cdotaccent", "d", "eth", "dcaron", "dcroat", "ddotbelow", "e", "eacute", "ebreve", "ecaron", "ecircumflex", "edieresis", "edotaccent", "edotbelow", "egrave", "emacron", "eogonek", "etilde", "schwa", "f", "g", "gbreve", "gcircumflex", "gcommaaccent", "gdotaccent", "h", "hbar", "hcircumflex", "hdotbelow", "i", "dotlessi", "iacute", "ibreve", "icircumflex", "idieresis", "idotbelow", "igrave", "ij", "imacron", "iogonek", "itilde", "j", "dotlessj", "jcircumflex", "k", "kcommaaccent", "kgreenlandic", "l", "lacute", "lcaron", "lcommaaccent", "ldot", "lslash", "m", "n", "nacute", "napostrophe", "ncaron", "ncommaaccent", "ndotaccent", "eng", "ntilde", "o", "oacute", "obreve", "ocircumflex", "odieresis", "odotbelow", "ograve", "ohungarumlaut", "omacron", "oogonek", "oslash", "oslashacute", "otilde", "oe", "p", "thorn", "q", "r", "racute", "rcaron", "rcommaaccent", "rdotbelow", "s", "sacute", "scaron", "scircumflex", "sdotbelow", "germandbls", "t", "tbar", "tcaron", "tdotbelow", "u", "uacute", "ubreve", "ucircumflex", "udieresis", "udotbelow", "ugrave", "uhungarumlaut", "umacron", "uni015F", "uni0163", "uni01C6", "uni01C9", "uni01CC", "uni01F3", "uni0219", "uni021B", "uogonek", "uring", "utilde", "v", "w", "wacute", "wcircumflex", "wdieresis", "wgrave", "x", "y", "yacute", "ycircumflex", "ydieresis", "ygrave", "ytilde", "z", "zacute", "zcaron", "zdotaccent", "zdotbelow", "c_t", "f_b", "f_f", "f_f_b", "f_f_h", "f_f_i", "f_f_j", "f_f_k", "f_f_l", "f_f_t", "f_h", "f_i", "f_j", "f_k", "f_l", "f_t", "s_t", ]
+
+# starter values
+mainMaxDescent = 0
+mainMaxDescentGlyph = ""
+maxDescent = 0
+mainMaxAscent = 0
+mainMaxAscentGlyph = ""
+maxAscent = 0
+
+# find highest and lowest point in font
+for glyph in font.glyphs:
+
+ # get total yMax and yMin, for win values
+ for layer in glyph.layers:
+
+ # get descender of current layer
+ descent = layer.bounds.origin.y
+
+ # get ascender of current layer
+ ascent = layer.bounds.size.height + descent
+
+ # if descent/ascent of current layer is greater than previous max descents/ascents, update the max descent/ascent
+ if descent <= maxDescent:
+ maxDescent = descent
+ maxDescentGlyph = glyph.name
+
+ if ascent >= maxAscent:
+ maxAscent = ascent
+ maxAscentGlyph = glyph.name
+
+ # get descender of current layer
+ descent = layer.bounds.origin.y
+
+ # get ascender of current layer (total height of layer, subtracting value of descender)
+ ascent = layer.bounds.size.height + descent
+
+ # get maximums of only letters in list vars, for typo and hhea values
+ if glyph.name in caps:
+
+ for layer in glyph.layers:
+ if ascent >= mainMaxAscent:
+ mainMaxAscent = ascent
+ mainMaxAscentGlyph = glyph.name
+
+
+ if glyph.name in lowercase:
+ # if descent/ascent of current layer is greater than previous max descents/ascents, update the max descent/ascent
+ if descent <= mainMaxDescent:
+ mainMaxDescent = descent
+ mainMaxDescentGlyph = glyph.name
+
+
+
+
+# check values for sanity
+print(maxDescentGlyph, maxDescent, maxAscentGlyph, maxAscent)
+
+# make lineGap so that the total of `ascent + descent + lineGap` equals 120% of UPM size
+
+UPM = font.upm
+
+totalSize = maxAscent + abs(maxDescent)
+
+# lineGap = int((UPM * 1.2)) - totalSize
+
+# print(UPM, UPM * 1.2, totalSize, lineGap)
+
+## use highest/lowest points to set custom parameters for winAscent and winDescent
+## following vertical metric schema from https://github.com/googlefonts/gf-docs/tree/master/VerticalMetrics
+
+font.customParameters["Use Typo Metrics"] = True
+
+for master in font.masters:
+
+ # Win Ascent/Descent = Font bbox yMax/yMin
+ master.customParameters["winAscent"] = maxAscent
+ master.customParameters["winDescent"] = abs(maxDescent)
+
+ typoLineGap = 0
+ master.customParameters["typoLineGap"] = typoLineGap
+ master.customParameters["hheaLineGap"] = typoLineGap
+
+ typoDescender = mainMaxDescent
+ master.customParameters["typoDescender"] = typoDescender
+ master.customParameters["hheaDescender"] = typoDescender
+
+ typoAscender = mainMaxAscent
+ master.customParameters["typoAscender"] = typoAscender
+ master.customParameters["hheaAscender"] = typoAscender
+
diff --git a/src/Inter.glyphs b/src/Inter.glyphs
index d6fd6fea1..6048c5540 100644
--- a/src/Inter.glyphs
+++ b/src/Inter.glyphs
@@ -1,5 +1,5 @@
{
-.appVersion = "1209";
+.appVersion = "1219";
DisplayStrings = (
"/leftArrow/leftHookArrow/rightHookArrow/arrowtableft/arrowtabright/pageup/pagedown \012/returnsymbol/carriagereturn/downTipRightArrow/upTipLeftArrow/upTipRightArrow/rightCornerDownArrow/upWhiteArrow/capslock \012/deleteleft/clear/deleteright/upBlackArrow/brokenCircleNorthWestArrow/anticlockwiseOpenCircleArrow/clockwiseOpenCircleArrow \012/placeofinterestsign/upWhiteArrow/control/projective/option/alternativekeysymbol/ejectsymbol",
"/leftArrow /returnsymbol/carriagereturn/downTipRightArrow"
@@ -1949,6 +1949,10 @@ value = "C698F293-3EC0-4A5A-A3A0-0FDB1F5CF265";
{
name = note;
value = "Sidebearings of thin: 1.3x those of regular";
+},
+{
+name = "Use Typo Metrics";
+value = 1;
}
);
date = "2016-12-04 18:21:54 +0000";
@@ -2117,7 +2121,7 @@ custom = Thin;
customParameters = (
{
name = typoAscender;
-value = 2708;
+value = 3076;
},
{
name = typoLineGap;
@@ -2125,7 +2129,7 @@ value = 0;
},
{
name = hheaAscender;
-value = 2708;
+value = 3076;
},
{
name = hheaLineGap;
@@ -2157,6 +2161,22 @@ value = (
{
name = "Master Icon Glyph Name";
value = L;
+},
+{
+name = winAscent;
+value = 3146;
+},
+{
+name = winDescent;
+value = 1196;
+},
+{
+name = typoDescender;
+value = -944;
+},
+{
+name = hheaDescender;
+value = -944;
}
);
descender = -660;
@@ -2220,7 +2240,7 @@ custom = "Thin Italic";
customParameters = (
{
name = typoAscender;
-value = 2708;
+value = 3076;
},
{
name = typoLineGap;
@@ -2228,7 +2248,7 @@ value = 0;
},
{
name = hheaAscender;
-value = 2708;
+value = 3076;
},
{
name = hheaLineGap;
@@ -2260,6 +2280,22 @@ value = (
{
name = "Master Icon Glyph Name";
value = i;
+},
+{
+name = winAscent;
+value = 3146;
+},
+{
+name = winDescent;
+value = 1196;
+},
+{
+name = typoDescender;
+value = -944;
+},
+{
+name = hheaDescender;
+value = -944;
}
);
descender = -660;
@@ -2322,7 +2358,7 @@ capHeight = 2048;
customParameters = (
{
name = typoAscender;
-value = 2708;
+value = 3076;
},
{
name = typoLineGap;
@@ -2330,7 +2366,7 @@ value = 0;
},
{
name = hheaAscender;
-value = 2708;
+value = 3076;
},
{
name = hheaLineGap;
@@ -2362,6 +2398,22 @@ value = (
0,
4
);
+},
+{
+name = winAscent;
+value = 3146;
+},
+{
+name = winDescent;
+value = 1196;
+},
+{
+name = typoDescender;
+value = -944;
+},
+{
+name = hheaDescender;
+value = -944;
}
);
descender = -660;
@@ -2428,7 +2480,7 @@ custom = Italic;
customParameters = (
{
name = typoAscender;
-value = 2708;
+value = 3076;
},
{
name = typoLineGap;
@@ -2436,7 +2488,7 @@ value = 0;
},
{
name = hheaAscender;
-value = 2708;
+value = 3076;
},
{
name = hheaLineGap;
@@ -2468,6 +2520,22 @@ value = (
0,
4
);
+},
+{
+name = winAscent;
+value = 3146;
+},
+{
+name = winDescent;
+value = 1196;
+},
+{
+name = typoDescender;
+value = -944;
+},
+{
+name = hheaDescender;
+value = -944;
}
);
descender = -660;
@@ -2527,7 +2595,7 @@ custom = Black;
customParameters = (
{
name = typoAscender;
-value = 2708;
+value = 3076;
},
{
name = typoLineGap;
@@ -2535,7 +2603,7 @@ value = 0;
},
{
name = hheaAscender;
-value = 2708;
+value = 3076;
},
{
name = hheaLineGap;
@@ -2567,6 +2635,22 @@ value = (
{
name = "Master Icon Glyph Name";
value = B;
+},
+{
+name = winAscent;
+value = 3146;
+},
+{
+name = winDescent;
+value = 1196;
+},
+{
+name = typoDescender;
+value = -944;
+},
+{
+name = hheaDescender;
+value = -944;
}
);
descender = -660;
@@ -2631,7 +2715,7 @@ custom = "Black Italic";
customParameters = (
{
name = typoAscender;
-value = 2708;
+value = 3076;
},
{
name = typoLineGap;
@@ -2639,7 +2723,7 @@ value = 0;
},
{
name = hheaAscender;
-value = 2708;
+value = 3076;
},
{
name = hheaLineGap;
@@ -2671,6 +2755,22 @@ value = (
{
name = "Master Icon Glyph Name";
value = i;
+},
+{
+name = winAscent;
+value = 3146;
+},
+{
+name = winDescent;
+value = 1196;
+},
+{
+name = typoDescender;
+value = -944;
+},
+{
+name = hheaDescender;
+value = -944;
}
);
descender = -660;