mirror of
https://github.com/tonsky/FiraCode.git
synced 2024-08-17 08:50:47 +03:00
resolve and document fontbakery FAILs
This commit is contained in:
parent
7919f1e099
commit
6ee86a64b8
@ -234,11 +234,11 @@ capHeight = 1374;
|
|||||||
customParameters = (
|
customParameters = (
|
||||||
{
|
{
|
||||||
name = typoAscender;
|
name = typoAscender;
|
||||||
value = 1870;
|
value = 1980;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = typoDescender;
|
name = typoDescender;
|
||||||
value = -530;
|
value = -644;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = typoLineGap;
|
name = typoLineGap;
|
||||||
@ -246,19 +246,19 @@ value = 0;
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = winAscent;
|
name = winAscent;
|
||||||
value = 1870;
|
value = 2164;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = winDescent;
|
name = winDescent;
|
||||||
value = 530;
|
value = 1000;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = hheaAscender;
|
name = hheaAscender;
|
||||||
value = 1870;
|
value = 1980;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = hheaDescender;
|
name = hheaDescender;
|
||||||
value = -530;
|
value = -644;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = hheaLineGap;
|
name = hheaLineGap;
|
||||||
@ -300,11 +300,11 @@ capHeight = 1386;
|
|||||||
customParameters = (
|
customParameters = (
|
||||||
{
|
{
|
||||||
name = typoAscender;
|
name = typoAscender;
|
||||||
value = 1870;
|
value = 1980;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = typoDescender;
|
name = typoDescender;
|
||||||
value = -530;
|
value = -644;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = typoLineGap;
|
name = typoLineGap;
|
||||||
@ -312,19 +312,19 @@ value = 0;
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = winAscent;
|
name = winAscent;
|
||||||
value = 1870;
|
value = 2164;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = winDescent;
|
name = winDescent;
|
||||||
value = 530;
|
value = 1000;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = hheaAscender;
|
name = hheaAscender;
|
||||||
value = 1870;
|
value = 1980;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = hheaDescender;
|
name = hheaDescender;
|
||||||
value = -530;
|
value = -644;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = hheaLineGap;
|
name = hheaLineGap;
|
||||||
@ -107244,6 +107244,10 @@ name = "Remove Features";
|
|||||||
value = (
|
value = (
|
||||||
cpsp
|
cpsp
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = weightClass;
|
||||||
|
value = 300;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
interpolationWeight = 62;
|
interpolationWeight = 62;
|
||||||
@ -107260,6 +107264,10 @@ name = "Remove Features";
|
|||||||
value = (
|
value = (
|
||||||
cpsp
|
cpsp
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = weightClass;
|
||||||
|
value = 400;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
interpolationWeight = 84;
|
interpolationWeight = 84;
|
||||||
@ -107270,11 +107278,10 @@ instanceInterpolations = {
|
|||||||
name = Regular;
|
name = Regular;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
exports = 0;
|
|
||||||
customParameters = (
|
customParameters = (
|
||||||
{
|
{
|
||||||
name = weightClass;
|
name = weightClass;
|
||||||
value = 900;
|
value = 450;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = "Remove Features";
|
name = "Remove Features";
|
||||||
@ -107289,6 +107296,7 @@ instanceInterpolations = {
|
|||||||
"B67F0F2D-EC95-4CB8-966E-23AE86958A69" = 0.64583;
|
"B67F0F2D-EC95-4CB8-966E-23AE86958A69" = 0.64583;
|
||||||
};
|
};
|
||||||
name = Retina;
|
name = Retina;
|
||||||
|
weightClass = Normal;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
customParameters = (
|
customParameters = (
|
||||||
@ -107297,6 +107305,10 @@ name = "Remove Features";
|
|||||||
value = (
|
value = (
|
||||||
cpsp
|
cpsp
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = weightClass;
|
||||||
|
value = 500;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
interpolationWeight = 112;
|
interpolationWeight = 112;
|
||||||
@ -107334,6 +107346,10 @@ name = "Remove Features";
|
|||||||
value = (
|
value = (
|
||||||
cpsp
|
cpsp
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = weightClass;
|
||||||
|
value = 700;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
interpolationWeight = 158;
|
interpolationWeight = 158;
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,57 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.32">
|
|
||||||
|
|
||||||
<OS_2>
|
|
||||||
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
|
||||||
will be recalculated by the compiler -->
|
|
||||||
<version value="4"/>
|
|
||||||
<xAvgCharWidth value="600"/>
|
|
||||||
<usWeightClass value="400"/>
|
|
||||||
<usWidthClass value="5"/>
|
|
||||||
<fsType value="00000000 00000000"/>
|
|
||||||
<ySubscriptXSize value="650"/>
|
|
||||||
<ySubscriptYSize value="600"/>
|
|
||||||
<ySubscriptXOffset value="0"/>
|
|
||||||
<ySubscriptYOffset value="75"/>
|
|
||||||
<ySuperscriptXSize value="650"/>
|
|
||||||
<ySuperscriptYSize value="600"/>
|
|
||||||
<ySuperscriptXOffset value="0"/>
|
|
||||||
<ySuperscriptYOffset value="350"/>
|
|
||||||
<yStrikeoutSize value="50"/>
|
|
||||||
<yStrikeoutPosition value="315"/>
|
|
||||||
<sFamilyClass value="0"/>
|
|
||||||
<panose>
|
|
||||||
<bFamilyType value="0"/>
|
|
||||||
<bSerifStyle value="0"/>
|
|
||||||
<bWeight value="0"/>
|
|
||||||
<bProportion value="0"/>
|
|
||||||
<bContrast value="0"/>
|
|
||||||
<bStrokeVariation value="0"/>
|
|
||||||
<bArmStyle value="0"/>
|
|
||||||
<bLetterForm value="0"/>
|
|
||||||
<bMidline value="0"/>
|
|
||||||
<bXHeight value="0"/>
|
|
||||||
</panose>
|
|
||||||
<ulUnicodeRange1 value="11100000 00000000 00000010 11101111"/>
|
|
||||||
<ulUnicodeRange2 value="01010010 00000000 11111000 11111011"/>
|
|
||||||
<ulUnicodeRange3 value="00000000 00000000 00000000 00001000"/>
|
|
||||||
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
|
|
||||||
<achVendID value="CTDB"/>
|
|
||||||
<fsSelection value="00000000 11000000"/>
|
|
||||||
<usFirstCharIndex value="13"/>
|
|
||||||
<usLastCharIndex value="65535"/>
|
|
||||||
<sTypoAscender value="935"/>
|
|
||||||
<sTypoDescender value="-265"/>
|
|
||||||
<sTypoLineGap value="0"/>
|
|
||||||
<usWinAscent value="935"/>
|
|
||||||
<usWinDescent value="265"/>
|
|
||||||
<ulCodePageRange1 value="01100000 00000000 00000000 10011111"/>
|
|
||||||
<ulCodePageRange2 value="11011111 11010111 00000000 00000000"/>
|
|
||||||
<sxHeight value="525"/>
|
|
||||||
<sCapHeight value="687"/>
|
|
||||||
<usDefaultChar value="0"/>
|
|
||||||
<usBreakChar value="32"/>
|
|
||||||
<usMaxContext value="5"/>
|
|
||||||
</OS_2>
|
|
||||||
|
|
||||||
</ttFont>
|
|
@ -267,11 +267,10 @@ But instead we have got: 'Copyright 2012-2015 The Mozilla Foundation, Telefonica
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
<details>
|
<details>
|
||||||
<summary>🔥 <b>FAIL:</b> Checking OS/2 usWinAscent & usWinDescent.</summary>
|
<summary>🔥 <b>FAIL:</b> Variable font weight coordinates must be multiples of 100.</summary>
|
||||||
|
|
||||||
* [com.google.fonts/check/family/win_ascent_and_descent](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/family/win_ascent_and_descent)
|
* [com.google.fonts/check/varfont_weight_instances](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/varfont_weight_instances)
|
||||||
* 🔥 **FAIL** OS/2.usWinAscent value should be equal or greater than 2100, but got 1870 instead [code: ascent]
|
* 🔥 **FAIL** Found an variable font instance with 'wght'=450.0. This should instead be a multiple of 100.
|
||||||
* 🔥 **FAIL** OS/2.usWinDescent value should be equal or greater than 1000, but got 530 instead [code: descent]
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
<details>
|
<details>
|
||||||
@ -444,9 +443,9 @@ But instead we have got: 'Copyright 2012-2015 The Mozilla Foundation, Telefonica
|
|||||||
|
|
||||||
| | FiraCode-Light.ttf |
|
| | FiraCode-Light.ttf |
|
||||||
|:--- | ---:|
|
|:--- | ---:|
|
||||||
| Dehinted Size | 238.0kb |
|
| Dehinted Size | 238.1kb |
|
||||||
| Hinted Size | 236.1kb |
|
| Hinted Size | 236.1kb |
|
||||||
| Increase | -1996 bytes |
|
| Increase | -1992 bytes |
|
||||||
| Change | -0.8 % |
|
| Change | -0.8 % |
|
||||||
|
|
||||||
|
|
||||||
@ -494,7 +493,7 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||||||
<summary>ℹ <b>INFO:</b> Font contains all required tables?</summary>
|
<summary>ℹ <b>INFO:</b> Font contains all required tables?</summary>
|
||||||
|
|
||||||
* [com.google.fonts/check/required_tables](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/required_tables)
|
* [com.google.fonts/check/required_tables](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/required_tables)
|
||||||
* ℹ **INFO** This font contains the following optional tables [GPOS, gasp, DSIG, loca, GSUB, prep]
|
* ℹ **INFO** This font contains the following optional tables [GSUB, loca, GPOS, DSIG, gasp, prep]
|
||||||
* 🍞 **PASS** Font contains all required tables.
|
* 🍞 **PASS** Font contains all required tables.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@ -808,6 +807,13 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||||||
* [com.google.fonts/check/varfont/has_HVAR](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/varfont/has_HVAR)
|
* [com.google.fonts/check/varfont/has_HVAR](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/varfont/has_HVAR)
|
||||||
* 🍞 **PASS** This variable font contains an HVAR table.
|
* 🍞 **PASS** This variable font contains an HVAR table.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
<details>
|
||||||
|
<summary>🍞 <b>PASS:</b> Checking OS/2 usWinAscent & usWinDescent.</summary>
|
||||||
|
|
||||||
|
* [com.google.fonts/check/family/win_ascent_and_descent](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/family/win_ascent_and_descent)
|
||||||
|
* 🍞 **PASS** OS/2 usWinAscent & usWinDescent values look good!
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
<details>
|
<details>
|
||||||
<summary>🍞 <b>PASS:</b> Checking OS/2 Metrics match hhea Metrics.</summary>
|
<summary>🍞 <b>PASS:</b> Checking OS/2 Metrics match hhea Metrics.</summary>
|
||||||
@ -850,13 +856,6 @@ The version string must ideally include a git commit hash and either a 'dev' or
|
|||||||
* [com.google.fonts/check/varfont_has_instances](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/varfont_has_instances)
|
* [com.google.fonts/check/varfont_has_instances](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/varfont_has_instances)
|
||||||
* 🍞 **PASS** OK
|
* 🍞 **PASS** OK
|
||||||
|
|
||||||
</details>
|
|
||||||
<details>
|
|
||||||
<summary>🍞 <b>PASS:</b> Variable font weight coordinates must be multiples of 100.</summary>
|
|
||||||
|
|
||||||
* [com.google.fonts/check/varfont_weight_instances](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/varfont_weight_instances)
|
|
||||||
* 🍞 **PASS** OK
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
<details>
|
<details>
|
||||||
<summary>🍞 <b>PASS:</b> Checking with ftxvalidator.</summary>
|
<summary>🍞 <b>PASS:</b> Checking with ftxvalidator.</summary>
|
||||||
|
@ -1,49 +1,9 @@
|
|||||||
# QA Notes – checking & polishing Fira Code for Google Fonts
|
# QA Notes – checking & polishing Fira Code for Google Fonts
|
||||||
|
|
||||||
- [ ] autohint static TTFs
|
- [x] autohint static TTFs
|
||||||
|
|
||||||
## Checks to resolve
|
## Checks to resolve
|
||||||
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>🔥 <b>FAIL:</b> Variable font weight coordinates must be multiples of 100.</summary>
|
|
||||||
|
|
||||||
* [com.google.fonts/check/varfont_weight_instances](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/varfont_weight_instances)
|
|
||||||
* 🔥 **FAIL** Found an variable font instance with 'wght'=450.0. This should instead be a multiple of 100.
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
- (fontmake also started to fail, as "Retina" instance was given a custom param of `weightClass: 900`)
|
|
||||||
|
|
||||||
- [x] uncheck "Retina" instance as `is active` instance
|
|
||||||
- [ ] file issue with FontBakery to ask Dave/Marc about this `450` weight "Retina" instance
|
|
||||||
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>🔥 <b>FAIL:</b> Checking OS/2 usWinAscent & usWinDescent.</summary>
|
|
||||||
|
|
||||||
* [com.google.fonts/check/family/win_ascent_and_descent](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/family/win_ascent_and_descent)
|
|
||||||
* 🔥 **FAIL** OS/2.usWinAscent value should be equal or greater than 1050, but got 935 instead [code: ascent]
|
|
||||||
* 🔥 **FAIL** OS/2.usWinDescent value should be equal or greater than 500, but got 265 instead [code: descent]
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
- [ ] run script to correct vertical metrics, recheck
|
|
||||||
|
|
||||||
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><b>[119] FiraCode-Light.ttf</b></summary>
|
|
||||||
<details>
|
|
||||||
<summary>🔥 <b>FAIL:</b> Checking file is named canonically.</summary>
|
|
||||||
|
|
||||||
* [com.google.fonts/check/canonical_filename](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/canonical_filename)
|
|
||||||
* 🔥 **FAIL** This is a variable font, but it is using a naming scheme typical of a static font.
|
|
||||||
* 🔥 **FAIL** Please change the font filename to use one of the following valid suffixes for variable fonts: VF, Italic-VF, Roman-VF
|
|
||||||
|
|
||||||
</details>
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔥 <b>FAIL:</b> Checking OS/2 usWeightClass.</summary>
|
<summary>🔥 <b>FAIL:</b> Checking OS/2 usWeightClass.</summary>
|
||||||
|
|
||||||
@ -52,6 +12,8 @@
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
- [ ] explore to find why this would be happening ...
|
||||||
|
- Encode Sans gets an OS/2 usWeightClass of `100`, matching its default instance.
|
||||||
|
|
||||||
======================================================================================
|
======================================================================================
|
||||||
|
|
||||||
@ -69,7 +31,22 @@ But instead we have got: 'Copyright 2012-2015 The Mozilla Foundation, Telefonica
|
|||||||
- additionally, it's unclear how the original copyright on Fira Mono & Fira Code should best be integrated to credit all designers involved
|
- additionally, it's unclear how the original copyright on Fira Mono & Fira Code should best be integrated to credit all designers involved
|
||||||
|
|
||||||
- [x] file issue on fontbakery (https://github.com/googlefonts/fontbakery/issues/2419)
|
- [x] file issue on fontbakery (https://github.com/googlefonts/fontbakery/issues/2419)
|
||||||
- [ ] confirm that current approach is fine (https://github.com/google/fonts/issues/1460#issuecomment-476713822)
|
- [x] confirm that current approach is fine (https://github.com/google/fonts/issues/1460#issuecomment-476713822) (seems okay, based on Hangouts discussion)
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>[119] FiraCode-Light.ttf</b></summary>
|
||||||
|
<details>
|
||||||
|
<summary>🔥 <b>FAIL:</b> Checking file is named canonically.</summary>
|
||||||
|
|
||||||
|
* [com.google.fonts/check/canonical_filename](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/canonical_filename)
|
||||||
|
* 🔥 **FAIL** This is a variable font, but it is using a naming scheme typical of a static font.
|
||||||
|
* 🔥 **FAIL** Please change the font filename to use one of the following valid suffixes for variable fonts: VF, Italic-VF, Roman-VF
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- [x] ask if/when this is changing (via hangouts) – Marc: "We’ll batch the vfs once they’ve implemented it"
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
@ -103,3 +80,62 @@ But instead we have got: 'Copyright 2012-2015 The Mozilla Foundation, Telefonica
|
|||||||
- [x] remove © symbol
|
- [x] remove © symbol
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>[31] Family checks</b></summary>
|
||||||
|
<details>
|
||||||
|
<summary>🔥 <b>FAIL:</b> METADATA.pb: According Google Fonts standards, families should have a Regular style.</summary>
|
||||||
|
|
||||||
|
* [com.google.fonts/check/metadata/has_regular](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/metadata/has_regular)
|
||||||
|
* 🔥 **FAIL** This family lacks a Regular (style: normal and weight: 400) as required by Google Fonts standards.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- [x] this issue is already filed with fontbakery (https://github.com/googlefonts/fontbakery/issues/2378)
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>🔥 <b>FAIL:</b> Checking OS/2 usWinAscent & usWinDescent.</summary>
|
||||||
|
|
||||||
|
* [com.google.fonts/check/family/win_ascent_and_descent](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/family/win_ascent_and_descent)
|
||||||
|
* 🔥 **FAIL** OS/2.usWinAscent value should be equal or greater than 1050, but got 935 instead [code: ascent]
|
||||||
|
* 🔥 **FAIL** OS/2.usWinDescent value should be equal or greater than 500, but got 265 instead [code: descent]
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- [x] run script to correct vertical metrics, recheck
|
||||||
|
- [x] ~~add issue~~ issue exists to gf-docs to update vertical metrics to recommendation at https://github.com/googlefonts/fontbakery/issues/2164#issuecomment-436595886 (will track / manage separately)
|
||||||
|
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>🔥 <b>FAIL:</b> Glyph names are all valid?</summary>
|
||||||
|
|
||||||
|
* [com.google.fonts/check/valid_glyphnames](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/valid_glyphnames)
|
||||||
|
* 🔥 **FAIL** The following glyph names do not comply with naming conventions: ['numbersign_numbersign_numbersign.liga', 'numbersign_numbersign_numbersign_numbersign.liga', 'numbersign_underscore_parenleft.liga', 'backslash_backslash_backslash.rem', 'numbersign_numbersign_numbersign.liga.rem', 'numbersign_numbersign_numbersign_numbersign.liga.rem', 'semicolon_semicolon_semicolon.rem', 'quadrantUpperLeftAndLowerLeftAndLowerRight', 'quadrantUpperLeftAndUpperRightAndLowerLeft', 'quadrantUpperLeftAndUpperRightAndLowerRight', 'quadrantUpperRightAndLowerLeftAndLowerRight', 'whiteSquareWithUpperLeftQuadrant', 'whiteSquareWithLowerLeftQuadrant', 'whiteSquareWithLowerRightQuadrant', 'whiteSquareWithUpperRightQuadrant', 'asciitilde_asciitilde_greater.liga', 'ampersand_ampersand_ampersand.rem', 'asciitilde_asciitilde_asciitilde.rem'] A glyph name may be up to 31 characters in length, must be entirely comprised of characters from the following set: A-Z a-z 0-9 .(period) _(underscore). and must not start with a digit or period. There are a few exceptions such as the special character ".notdef". The glyph names "twocents", "a1", and "_" are all valid, while "2cents" and ".twocents" are not.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- [x] issue filed at https://github.com/tonsky/FiraCode/issues/730 – I'm guessing this won't cause any real issues on the web fonts.
|
||||||
|
- I'll leave these glyphs as they are for now, and let @tonsky handle it if it seems to be the cause of an actual user issue
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>🔥 <b>FAIL:</b> Variable font weight coordinates must be multiples of 100.</summary>
|
||||||
|
|
||||||
|
* [com.google.fonts/check/varfont_weight_instances](https://github.com/googlefonts/fontbakery/search?q=com.google.fonts/check/varfont_weight_instances)
|
||||||
|
* 🔥 **FAIL** Found an variable font instance with 'wght'=450.0. This should instead be a multiple of 100.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- (fontmake also started to fail, as "Retina" instance was given a custom param of `weightClass: 900`)
|
||||||
|
|
||||||
|
- [x] uncheck "Retina" instance as `is active` instance
|
||||||
|
- [x] file issue with FontBakery to ask Dave/Marc about this `450` weight "Retina" instance (https://github.com/googlefonts/fontbakery/issues/2420)-
|
||||||
|
- [x] change if you find a better approach to keep Retina without disrupting builds / Regular weight
|
||||||
|
- To set up the instance in GlyhpsApp such that it exports a font as expected: "Retina" gets a custom parameter of `weightClass: 450`, and a glyphs menu-weight of "Normal." Tested in axis-praxis, it seems to work well. All instances have a `weightClass` custom parameter.
|
||||||
|
|
||||||
|
----------------------------
|
113
googlefonts-qa/scripts/set-vertical-metrics.py
Normal file
113
googlefonts-qa/scripts/set-vertical-metrics.py
Normal file
@ -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 (actually, that source must be updated to better recommendations found at https://github.com/googlefonts/fontbakery/issues/2164#issuecomment-436595886)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user