Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open Sans: Version 3.000 added #2997

Merged
merged 2 commits into from
Feb 10, 2021
Merged

Conversation

m4rc1e
Copy link
Collaborator

@m4rc1e m4rc1e commented Feb 10, 2021

b440e73: [gftools-packager] Open Sans: Version 3.000 added

f6b53ed: [gftools-packager] apache/opensans remove METADATA "source". #2587

@gf-bot
Copy link

gf-bot commented Feb 10, 2021

Fontbakery report

Fontbakery version: 0.7.34

[1] Family checks
WARN: Is the command `ftxvalidator` (Apple Font Tool Suite) available?
--- Rationale ---

There's no reasonable (and legal) way to run the command `ftxvalidator` of the
Apple Font Tool Suite on a non-macOS machine. I.e. on GNU+Linux or Windows etc.

If Font Bakery is not running on an OSX machine, the machine running Font
Bakery could access `ftxvalidator` on OSX, e.g. via ssh or a remote procedure
call (rpc).

There's an ssh example implementation at:
https://github.com/googlefonts/fontbakery/blob/master/prebuilt/workarounds
/ftxvalidator/ssh-implementation/ftxvalidator


  • WARN Could not find ftxvalidator.

[16] OpenSans-Italic[wdth,wght].ttf
🔥 FAIL: Does DESCRIPTION file contain a upstream Git repo URL?
--- Rationale ---

The contents of the DESCRIPTION.en-us.html file are displayed on the Google
Fonts website in the about section of each font family specimen page.

Since all of the Google Fonts collection is composed of libre-licensed fonts,
this check enforces a policy that there must be a hypertext link in that page
directing users to the repository where the font project files are made
available.

Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or
any other git-based version control service.


  • 🔥 FAIL Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]
🔥 FAIL: Check font has a license.
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem
had no grid fitting but did have antialiasing. From 9-16 ppem, just grid
fitting. And fonts above 17ppem had both antialiasing and grid fitting toggled
on. The use of accelerated graphics cards and higher resolution screens make
this approach obsolete. Microsoft's DirectWrite pushed this even further with
much improved rendering built into the OS and apps.

In this scenario it makes sense to simply toggle all 4 flags ON for all font
sizes.


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

This setup is meant to ensure consistent rendering quality for fonts across all
devices (with different rendering/hinting capabilities).

Below is the snippet of instructions we expect to see in the fonts:
B8 01 FF    PUSHW 0x01FF
85          SCANCTRL (unconditinally turn on
                      dropout control mode)
B0 04       PUSHB 0x04
8D          SCANTYPE (enable smart dropout control)

"Smart dropout control" means activating rules 1, 2 and 5:
Rule 1: If a pixel's center falls within the glyph outline,
        that pixel is turned on.
Rule 2: If a contour falls exactly on a pixel's center,
        that pixel is turned on.
Rule 5: If a scan line between two adjacent pixel centers
        (either vertical or horizontal) is intersected
        by both an on-Transition contour and an off-Transition
        contour and neither of the pixels was already turned on
        by rules 1 and 2, turn on the pixel which is closer to
        the midpoint between the on-Transition contour and
        off-Transition contour. This is "Smart" dropout control.

For more detailed info (such as other rules not enabled in this snippet),
please refer to the TrueType Instruction Set documentation.


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: Check variable font instances have correct names

Further info can be found in our spec https://github.com/googlefonts/gf-docs/tree/master/Spec#fvar-instances [code: bad-instance-names]

🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: License URL matches License text on name table?
--- Rationale ---

A known license URL must be provided in the NameID 14 (LICENSE INFO URL) entry
of the name table.

The source of truth for this check is the licensing text found on the NameID 13
entry (LICENSE DESCRIPTION).

The string snippets used for detecting licensing terms are:
- "This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is available with a FAQ at: https://scripts.sil.org/OFL"
- "Licensed under the Apache License, Version 2.0"
- "Licensed under the Ubuntu Font Licence 1.0."


Currently accepted licenses are Apache or Open Font License.
For a small set of legacy families the Ubuntu Font License may be acceptable as
well.

When in doubt, please choose OFL for new font projects.


  • WARN Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=14] [code: http-in-license-info]
WARN: Are there caret positions declared for every ligature?
--- Rationale ---

All ligatures in a font must have corresponding caret (text cursor) positions
defined in the GDEF table, otherwhise, users may experience issues with caret
rendering.

If using GlyphsApp, ligature carets can be set directly on canvas by accessing
the `Glyph -> Set Anchors` menu option or by pressing the `Cmd+U` keyboard
shortcut.

If designing with UFOs, (as of Oct 2020) ligature carets are not yet compiled
by ufo2ft, and therefore will not build via FontMake. See
googlefonts/ufo2ft/issues/329


  • WARN This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]
WARN: A static fonts directory with at least two fonts must accompany variable fonts
--- Rationale ---

Variable font family directories kept in the google/fonts git repo may include
a static/ subdir containing static fonts.
These files are meant to be served for users that still lack support for
variable fonts in their web browsers.


  • WARN Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]
WARN: Font contains '.notdef' as its first glyph?
--- Rationale ---

The OpenType specification v1.8.2 recommends that the first glyph is the
'.notdef' glyph without a codepoint assigned and with a drawing.

https://docs.microsoft.com/en-us/typography/opentype/spec
/recom#glyph-0-the-notdef-glyph

Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR' and
'.null' glyphs. This might have been relevant for MacOS 9 applications.


  • WARN Glyph '.notdef' should contain a drawing, but it is empty. [code: empty]
WARN: Each font in set of sibling families must have the same set of vertical metrics values.
--- Rationale ---

We may want all fonts within a super-family (all sibling families) to have the
same vertical metrics so their line spacing is consistent across the
super-family.

This is an experimental extended version of
com.google.fonts/check/superfamily/vertical_metrics and for now it will only
result in WARNs.


  • WARN sTypoAscender is not the same across the super-family:
    Open Sans Regular: 2189
    Open Sans Italic: 2189
    Open Sans Condensed Bold: 1567
    Open Sans Condensed Light Italic: 1567
    Open Sans Condensed Light: 1567
  • WARN sTypoDescender is not the same across the super-family:
    Open Sans Regular: -600
    Open Sans Italic: -600
    Open Sans Condensed Bold: -492
    Open Sans Condensed Light Italic: -492
    Open Sans Condensed Light: -492
  • WARN sTypoLineGap is not the same across the super-family:
    Open Sans Regular: 0
    Open Sans Italic: 0
    Open Sans Condensed Bold: 132
    Open Sans Condensed Light Italic: 132
    Open Sans Condensed Light: 132
  • WARN usWinAscent is not the same across the super-family:
    Open Sans Regular: 2302
    Open Sans Italic: 2302
    Open Sans Condensed Bold: 2189
    Open Sans Condensed Light Italic: 2189
    Open Sans Condensed Light: 2189
  • WARN usWinDescent is not the same across the super-family:
    Open Sans Regular: 651
    Open Sans Italic: 651
    Open Sans Condensed Bold: 600
    Open Sans Condensed Light Italic: 600
    Open Sans Condensed Light: 600
WARN: Check mark characters are in GDEF mark glyph class)
--- Rationale ---

Glyphs in the GDEF mark glyph class should be non-spacing.
Spacing glyphs in the GDEF mark glyph class may have incorrect anchor
positioning that was only intended for building composite glyphs during design.


  • WARN The following spacing glyphs may be in the GDEF mark glyph class by mistake:
    acute, caroncommaaccent, cyrillicbreve, dieresistonos, grave, tonos and uni1FDE [code: spacing-mark-glyphs]
WARN: Check mark characters are in GDEF mark glyph class
--- Rationale ---

Mark characters should be in the GDEF mark glyph class.


  • WARN The following mark characters could be in the GDEF mark glyph class:
    U+0488 and U+0489 [code: mark-chars]
WARN: Check GDEF mark glyph class doesn't have characters that are not marks)
--- Rationale ---

Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned
if they have mark anchors.
Only combining mark glyphs should be in that class. Any non-mark glyph must not
be in that class, in particular spacing glyphs.


  • WARN The following non-mark characters should not be in the GDEF mark glyph class:
    U+0060, U+00B4, U+0384, U+0385 and U+1FDE [code: non-mark-chars]
WARN: Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value

[16] OpenSans[wdth,wght].ttf
🔥 FAIL: Does DESCRIPTION file contain a upstream Git repo URL?
--- Rationale ---

The contents of the DESCRIPTION.en-us.html file are displayed on the Google
Fonts website in the about section of each font family specimen page.

Since all of the Google Fonts collection is composed of libre-licensed fonts,
this check enforces a policy that there must be a hypertext link in that page
directing users to the repository where the font project files are made
available.

Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or
any other git-based version control service.


  • 🔥 FAIL Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]
🔥 FAIL: Check font has a license.
🔥 FAIL: Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?
--- Rationale ---

Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem
had no grid fitting but did have antialiasing. From 9-16 ppem, just grid
fitting. And fonts above 17ppem had both antialiasing and grid fitting toggled
on. The use of accelerated graphics cards and higher resolution screens make
this approach obsolete. Microsoft's DirectWrite pushed this even further with
much improved rendering built into the OS and apps.

In this scenario it makes sense to simply toggle all 4 flags ON for all font
sizes.


  • 🔥 FAIL Font is missing the 'gasp' table. Try exporting the font with autohinting enabled.
    If you are dealing with an unhinted font, it can be fixed by running the fonts through the command 'gftools fix-nonhinting'
    GFTools is available at https://pypi.org/project/gftools/ [code: lacks-gasp]
🔥 FAIL: Font enables smart dropout control in "prep" table instructions?
--- Rationale ---

This setup is meant to ensure consistent rendering quality for fonts across all
devices (with different rendering/hinting capabilities).

Below is the snippet of instructions we expect to see in the fonts:
B8 01 FF    PUSHW 0x01FF
85          SCANCTRL (unconditinally turn on
                      dropout control mode)
B0 04       PUSHB 0x04
8D          SCANTYPE (enable smart dropout control)

"Smart dropout control" means activating rules 1, 2 and 5:
Rule 1: If a pixel's center falls within the glyph outline,
        that pixel is turned on.
Rule 2: If a contour falls exactly on a pixel's center,
        that pixel is turned on.
Rule 5: If a scan line between two adjacent pixel centers
        (either vertical or horizontal) is intersected
        by both an on-Transition contour and an off-Transition
        contour and neither of the pixels was already turned on
        by rules 1 and 2, turn on the pixel which is closer to
        the midpoint between the on-Transition contour and
        off-Transition contour. This is "Smart" dropout control.

For more detailed info (such as other rules not enabled in this snippet),
please refer to the TrueType Instruction Set documentation.


  • 🔥 FAIL The 'prep' table does not contain TrueType instructions enabling smart dropout control. To fix, export the font with autohinting enabled, or run ttfautohint on the font, or run the gftools fix-nonhinting script. [code: lacks-smart-dropout]
🔥 FAIL: Check variable font instances have correct names

Further info can be found in our spec https://github.com/googlefonts/gf-docs/tree/master/Spec#fvar-instances [code: bad-instance-names]

🔥 FAIL: METADATA.pb: Designer is listed with the correct name on the Google Fonts catalog of designers?
WARN: DESCRIPTION.en_us.html should end in a linebreak.
--- Rationale ---

Some older text-handling tools sometimes misbehave if the last line of data in
a text file is not terminated with a newline character (also known as '\n').

We know that this is a very small detail, but for the sake of keeping all
DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts
collection, we chose to adopt the practice of placing this final linebreak char
on them.


  • WARN The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]
WARN: License URL matches License text on name table?
--- Rationale ---

A known license URL must be provided in the NameID 14 (LICENSE INFO URL) entry
of the name table.

The source of truth for this check is the licensing text found on the NameID 13
entry (LICENSE DESCRIPTION).

The string snippets used for detecting licensing terms are:
- "This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is available with a FAQ at: https://scripts.sil.org/OFL"
- "Licensed under the Apache License, Version 2.0"
- "Licensed under the Ubuntu Font Licence 1.0."


Currently accepted licenses are Apache or Open Font License.
For a small set of legacy families the Ubuntu Font License may be acceptable as
well.

When in doubt, please choose OFL for new font projects.


  • WARN Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=14] [code: http-in-license-info]
WARN: Are there caret positions declared for every ligature?
--- Rationale ---

All ligatures in a font must have corresponding caret (text cursor) positions
defined in the GDEF table, otherwhise, users may experience issues with caret
rendering.

If using GlyphsApp, ligature carets can be set directly on canvas by accessing
the `Glyph -> Set Anchors` menu option or by pressing the `Cmd+U` keyboard
shortcut.

If designing with UFOs, (as of Oct 2020) ligature carets are not yet compiled
by ufo2ft, and therefore will not build via FontMake. See
googlefonts/ufo2ft/issues/329


  • WARN This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]
WARN: A static fonts directory with at least two fonts must accompany variable fonts
--- Rationale ---

Variable font family directories kept in the google/fonts git repo may include
a static/ subdir containing static fonts.
These files are meant to be served for users that still lack support for
variable fonts in their web browsers.


  • WARN Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]
WARN: Font contains '.notdef' as its first glyph?
--- Rationale ---

The OpenType specification v1.8.2 recommends that the first glyph is the
'.notdef' glyph without a codepoint assigned and with a drawing.

https://docs.microsoft.com/en-us/typography/opentype/spec
/recom#glyph-0-the-notdef-glyph

Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR' and
'.null' glyphs. This might have been relevant for MacOS 9 applications.


  • WARN Glyph '.notdef' should contain a drawing, but it is empty. [code: empty]
WARN: Each font in set of sibling families must have the same set of vertical metrics values.
--- Rationale ---

We may want all fonts within a super-family (all sibling families) to have the
same vertical metrics so their line spacing is consistent across the
super-family.

This is an experimental extended version of
com.google.fonts/check/superfamily/vertical_metrics and for now it will only
result in WARNs.


  • WARN sTypoAscender is not the same across the super-family:
    Open Sans Regular: 2189
    Open Sans Italic: 2189
    Open Sans Condensed Bold: 1567
    Open Sans Condensed Light Italic: 1567
    Open Sans Condensed Light: 1567
  • WARN sTypoDescender is not the same across the super-family:
    Open Sans Regular: -600
    Open Sans Italic: -600
    Open Sans Condensed Bold: -492
    Open Sans Condensed Light Italic: -492
    Open Sans Condensed Light: -492
  • WARN sTypoLineGap is not the same across the super-family:
    Open Sans Regular: 0
    Open Sans Italic: 0
    Open Sans Condensed Bold: 132
    Open Sans Condensed Light Italic: 132
    Open Sans Condensed Light: 132
  • WARN usWinAscent is not the same across the super-family:
    Open Sans Regular: 2302
    Open Sans Italic: 2302
    Open Sans Condensed Bold: 2189
    Open Sans Condensed Light Italic: 2189
    Open Sans Condensed Light: 2189
  • WARN usWinDescent is not the same across the super-family:
    Open Sans Regular: 651
    Open Sans Italic: 651
    Open Sans Condensed Bold: 600
    Open Sans Condensed Light Italic: 600
    Open Sans Condensed Light: 600
WARN: Check mark characters are in GDEF mark glyph class)
--- Rationale ---

Glyphs in the GDEF mark glyph class should be non-spacing.
Spacing glyphs in the GDEF mark glyph class may have incorrect anchor
positioning that was only intended for building composite glyphs during design.


  • WARN The following spacing glyphs may be in the GDEF mark glyph class by mistake:
    cyrillicbreve, dieresistonos, tonos and uni1FDE [code: spacing-mark-glyphs]
WARN: Check mark characters are in GDEF mark glyph class
--- Rationale ---

Mark characters should be in the GDEF mark glyph class.


  • WARN The following mark characters could be in the GDEF mark glyph class:
    U+0488 and U+0489 [code: mark-chars]
WARN: Check GDEF mark glyph class doesn't have characters that are not marks)
--- Rationale ---

Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned
if they have mark anchors.
Only combining mark glyphs should be in that class. Any non-mark glyph must not
be in that class, in particular spacing glyphs.


  • WARN The following non-mark characters should not be in the GDEF mark glyph class:
    U+0384, U+0385 and U+1FDE [code: non-mark-chars]
WARN: Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value

Summary

💔 ERROR 🔥 FAIL ⚠ WARN 💤 SKIP ℹ INFO 🍞 PASS 🔎 DEBUG
0 12 21 81 15 246 0
0% 3% 6% 22% 4% 66% 0%

Note: The following loglevels were omitted in this report:

  • SKIP
  • INFO
  • PASS
  • DEBUG

@m4rc1e m4rc1e merged commit 4ebf835 into master Feb 10, 2021
@m4rc1e m4rc1e deleted the gftools_packager_apache_opensans branch February 10, 2021 17:40
@m4rc1e
Copy link
Collaborator Author

m4rc1e commented Feb 18, 2021

Summary of differences:

  • Light Italic and Italic are wider. In many cases, documents will reflow as demonstrated below.
  • A few glyphs have been redesigned (I guess they are fixes)
  • Glyphs with apostrophe like marks have had their spacing fixed e.g dcaron
  • Minimal rendering differences (imo a pass)
  • Vertical metrics values have changed. The visual appearance is the same but it may cause issues (will research further)

Desktop_Windows_10_chrome_71 0_
Win 10 Chrome 71

winxp_ie_7 0
Win XP IE 7

@m4rc1e
Copy link
Collaborator Author

m4rc1e commented Feb 18, 2021

I think these changes have occurred due to the evolution of the family and its history. Noto Sans, Open Sans and Droid Sans are all related. I assume they were created in the following order, Droid Sans, Open Sans and then Noto Sans. In order to create this family, Type Network started with Noto Sans VF. They then made some modifications in order to reduce the amount of regressions. I agree with this approach since Noto Sans fixed several issues in Open Sans.

cc @moyogo are my assumptions here correct?

@moyogo
Copy link
Collaborator

moyogo commented Feb 18, 2021

@moyogo are my assumptions here correct?

Yes that is correct.

Here's what I had noted in davelab6/opensans-1#29 (comment)

This is to test Using Noto Sans 4 masters to produce 4 masters for Open Sans.

Mapping between Open Sans weights and Noto Sans master values:

Open Sans (GF) wght Noto Sans (master) wght
Thin 26
Light 50
Regular 83
Regular 90
SemiBold 117
Bold 151 Bold 151
ExtraBold 151 Black 190

The Noto Sans master need the following changed:

  • scale UPM from 1000 to 2048
  • Update glyph set variants
    • rename g as g.alt and update g as double-storey g from Open Sans, and apply to composites.
    • swap I and I.alt and composites
    • restore IJ with descender-J
    • restore florin with descender-florin florin.ss03 -> florin.salt
    • restore missing math symbols in Roman and Italic
  • Generate masters matching Open Sans
  • Rename those masters as Open Sans
  • Merge Hebrew extension
  • Subset to match OpenSans glyph set
  • Build fonts

@RosaWagner RosaWagner added -- Needs confirmation from upstream or onboarder --- In sandbox and removed --- to_sandbox -- Needs confirmation from upstream or onboarder labels Feb 18, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants