GithubHelp home page GithubHelp logo

arrowtype / shantell-sans Goto Github PK

View Code? Open in Web Editor NEW
358.0 8.0 6.0 712.03 MB

Shantell Sans, from Shantell Martin, is a marker-style font built for creative expression, typographic play, and animation.

Home Page: https://shantellsans.com

License: SIL Open Font License 1.1

Python 16.32% Shell 0.46% HTML 83.16% Makefile 0.06%
art font handwriting variablefonts

shantell-sans's People

Contributors

arrowtype avatar sikeiros avatar stenson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

shantell-sans's Issues

Making kerns work in all styles, for all alts

Right now, expected kerning often fails. This seems to be partly because the sources are kerned without .alt1 and .alt2 glyphs, but then these are generated in the build, and automatically added to groups with the default glyphs.

However, it seems that maybe they are being added as "exceptions," at 0?

Interestingly, the alts work fairly well in the ExtraBold style. In that source, Metrics Machine was used to make groups, and these went through the "Apply Overrides" window that shows when you make new groups in a UFO with existing kerning. But then, this groups.plist code was copied quite simply over to the other UFOs. Maybe there is more required to copy kerning groups, without also creating exceptions?

Notes for monthly update, May

Done:

  • improvements to irregular Latin
    • sizing is refined in uppercase: glyphs no longer stand out a lot as being way too small, so things look more naturally varied
  • irregular Cyrillic almost done
  • Added "SemiRegular" instances at 50% Irregularity – makes a small difference in short texts, but a very big impact in longer texts
  • Cyrillic is added to build randomization process
  • Vietnamese is finished in irregular and improved overall, with decided glyphs for combined accents
  • many upgrades to web specimen: https://next--shantell-sans-beta.netlify.app
    • scrolling
    • type tester
    • character grid
    • animations
    • play/pause control
    • footer

Aiming for:

  • Irregular Cyrillic finished (or almost completely finished)
  • Italics started
  • More resolved approach to KernOn kerning

New ideas:

  • Duplex "irregular" styles for worse spacing but improved animations (especially on web)? Or maybe this could be an axis? Not sure... Bounce is already duplexed, so for now I’m mostly just setting Irregularity statically, and animating only bounce.

Next month’s goals:

  • Finish Italics
  • Proof and refine kerning
  • Ready for release?
    • [Determine what is between here and there ... aside from the font, probably writing is a big part of this!]
    • update axis definitions, follow up in axis registry
    • follow up w/ Shantell on release blog post

Build test fonts to proof Cyrillic interpolations

Process

If you haven’t yet done so, set up the build dependencies:

Set up build dependencies (Click to expand)

Make a virtual environment:

python3 -m venv venv

Activate venv:

source venv/bin/activate

Install dependencies:

pip install -U -r requirements.txt

Each time you want to run a build, make sure you have activated the venv. The terminal will have (venv) in front of your prompt if the venv is active.

source venv/bin/activate

Then, prep the build:

python3 scripts--build/prep-build-basic.py

Build the VF:

fontmake -m sources/wght--prepped/shantell-300_800.designspace -o variable --output-dir fonts/experiments-temp/cyrillic-builds

Build the static fonts:

fontmake -m sources/wght--prepped/shantell-300_800--static.designspace -o otf -i --expand-features-to-instances --output-dir fonts/experiments-temp/cyrillic-builds/static

Further investigation for @googlefonts/fontmake/#897

I’ll use this issue to keep notes on this, then post my findings to FontMake and/or GlyphsLib.

googlefonts/fontmake#897


Okay, I’m back to my computer and I can test this out a little further.

Here’s my test procedure:

  • checkout commit after the glyphLibs conversions but before my fix/hack on the ufo2ft filters
  • check again for ufo2ft or glyphsLib entires in ufo lib(s)
  • (Maybe) go further back, and retry the glyphs roundtrip and build. Record results.

FontMake build blocker: '.LookAheadCoverage', 'ChainContextSubst' in fractions

I got the following error when trying to build a variable font with fractions for the first time:

INFO:fontTools.varLib:Merging OpenType Layout tables
fontmake: Error: In 'sources/shantell-300_800.designspace': Generating fonts from Designspace failed: (('onehalf', ('onehalf', 'onequarter')), 'str', '[0]', 'list', '.glyphs', 'Coverage', '[0]', 'list', '.LookAheadCoverage', 'ChainContextSubst', '[1]', 'Lookup', '[24]', 'list', '.Lookup', 'LookupList', '.LookupList', 'GSUB', '.table', 'table_G_S_U_B_')

This may be due to missing or incorrectly-spelled glyph names... will document fix.

Solution: the fonts were sorted differently. Once I applied "Smart Sort" to both, the VF built!

Add full, required glyph set to Shantell Sans, with placeholder glyphs to start

Goal: add all required glyphs to Shantell Sans now, with placeholder glyphs, to allow simpler collaboration via GitHub (with fewer conflicts due to added glyphs).

Approach: Write a Python script that...

  1. Takes in GF GlyphSet files as data: Latin Core, Latin Plus, Cyrillic Plus, and Cyrillic Locl
  2. Makes a list of unicodes for Latin, and one for Cyrillic (so we can mark it with another color), one for Latin without Unicodes, and one for Cyrillic without Unicodes
  3. Converts Unicode values, if needed
  4. Adds glyphs to font with unicodes, if not yet in the font
  5. Copies (and scales) glyphs from another font, to make things simpler to see & draw. Maybe Roboto Thin? (Check licensing first).
  6. Sets AGL-compatible glyph names, borrowing code from this script
  • before adding Roboto Flex placeholders, check why normal placeholders sometimes get deleted. Maybe use normal placeholders.

Bring Irregular sources up to date with full glyphset in normal sources

The normal sources now have a full (or very nearly full) glyphset, but the Irregular (AKA Organic) sources do not. This issue will list and track the work required to bring them up to date.

  • draw Ohorn, ohorn, Uhorn, uhorn
  • use glyph construction recipes to build glyphs, and to check where additional anchors are required
  • add anchors as needed
  • remove any remaining placeholder glyphs from roboto (they seemed like a good idea, but block prepolator)
  • copy currencies from normal sources

Tasks to complete for release v1.0

Font data

  • reduce filesize of "Normal" static fonts #16
  • set metric values (e.g. adjust hhea & typo metrics) – set with scripts--robofont/set-font-info-sel_fonts.py – commented below
  • Run FontBakery universal/googlefonts checks and fix flagged issues – #23

Final character additions - #5 & #23

  • one.prop – actually, add proportional figures (pnum) for 0-9, then kern
  • adjust dollar width
  • currency
  • brokenbar
  • multiply
  • minus (probably just add the unicode to hyphen)
  • divisionslash
  • softhyphen (?)
  • .notdef

Determine specific build prep

Irregular sources

  • do a pass of spacing fixes to irregular sources
  • then re-build accented characters
  • make numbers irregular in light irregular source

Kerning

  • kern punc against letters: « “ ‘ [ ( { to A–Z a–z, with closing
  • kern .case punc against uppercase
  • import updated groups to irregular sources
  • additional proofs for uc & lc kern fixes
  • kern TM against lowercase

Other fixes, all weights

  • fix incompatible zdotaccent & Zdotaccent
  • steeper Ł crossbar
  • put partial center slash in ø
  • check uppercase accents vs hhea.ascent
  • less-wide o(?) no, the os in sketches are very round or even wide ellipses
  • narrower I
  • add proportional 1 then add prop OT feature; make $ tabular width #5
  • add tabular comma and period for tnum feature
  • add ordn feature for Portugese & Spanish
  • Is the Bouncy axis too extreme? Should Semi-Bouncy be less intense? Yes, I think it should be 25 rather than 50

Other fixes in light

  • thinner quotes & comma
  • sharper Z?
  • softer M?

Other fixes in bold

  • thin out e ae oe
  • thin out M

Build fixes

  • determine why punctuation not yet kerning properly with alts against alts. Fixed with 7755897

Other release tasks

  • remove references/scans-2020_06_18 with BFG
  • updating contributing doc

Decide which diacritics to make alts of

To keep the final variable font file size to a reasonable number while still including a lot of alts, only the following glyphs get alts:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzßæÞðþẞ
0123456789!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~“”‘’

Should any more be added? Few languages include a lot of words which contain multiple instances of the same diacritic. And, repeating alts are only especially noticeable (and solveable in font features) when letters repeat within the same word.

But, potentially some of the most-common accented letters should be given alts, just to solve for common possibilities. For example, a friend told me that some Finnish names apparently have repeating accented letters. Also, maybe people are just more likely to try some accented letters in a type-tested scenario, and these should be included just to show they can be.

Maybe just cover accents used in English, as these are also probably some of the most common to appear in Common European languages?

ÉéÑñ etc...

Maybe check https://www.setuptype.com/x/cod/combinations for more?

Project Update #7

Updates

  • Finish Mac Roman character set: #8
  • Fix accent handling in scripts
  • sups, infs
  • fractions
  • arbitrary fraction code
  • non-comb accents?

Questions

  • Should we move ahead with the creative axes, or instead make italics?
    • This need was somewhat reinforced, seeing how the museum would need to use the font for invites.
    • Italics will probably be more useful, day to day, especially in text (e.g. books, even info, etc) & on the web (where text gets artificially slanted by 20deg if a font doesn’t have built-in Italic support).
    • Another option: we could perhaps expand the project scope by a bit, to add Italics on top of everything else.

Fix tcaron

It uses the incorrect caron – it should look like an apostrophe, but as of Nov 30, 2020, is the regular caron.

Make tabular numbers & currencies; make proportional number feature

The fonts have some tabular characters, to make data tables, pricing labels, etc easier to design. Tabular glyphs include:

  • numbers
  • arrows
  • currencies

Remaining tasks:

  • make dollar match tabular number width, 700
  • swap non-split-bar dollar with split one
  • make proportional figures, completely-simple one.pnum
    • kern, if necessary?
    • research: should anything else be tabular or have a tabular alternate? what would it take to add these into the build-prep...?

Generate Italics

Experiment: can we generate italic sources by duplicating and skewing original sources, well enough that they could be added into the variable font, entirely in the build?

TL;DR: No, if we only add italics as a generation step in the build, too many shapes look bad. It will be worthwhile to make some basic manual corrections to italic sources, even though it will add some complexity to the project.

File size concerns?

Character set / amount of alts

If we only give alts to characters in the English alphabet, it cuts down the filesize by quite a bit ... but then, it lacks a lot of characters. Probably not worth it?

image

AÀÁÂÃÄÅĀĂĄǍBCÇĆČDĎEÈÉÊËĒĔĘĚFGĞHIÌÍÎÏĪĬĮİJKLMNÑŃŇOÒÓÔÕÖŌŎŐPQRŔŘSŚŞŠTŤUÙÚÛÜŪŬŮŰŲǓVWXYÝŸZŹŻŽÆØǾIJŁŒΩaàáâãäåāăąǎbcçćčdďeèéêëēĕęěfgğhiìíîïīĭįjklmnñńňoòóôõöōŏőpqrŕřsśşštťuùúûüūŭůűųǔvwxyýÿzźżžßæÞðþẞ

Versus:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Axes: whether there is negative "Bounce" or not

If Bounce only goes from 0 to 100 (flat baseline to bouncy baseline), the file is about 299KB. If Bounce goes from -100 to 100, it becomes 374KB. However, this is also worth it, because it opens a much more fun set of animation possibilities. If someone doesn’t want the full axis, they should be able to trim it out.

Outliner Settings

Outliner settings for Shantell Sans:

  • 34 for light
  • 86 for extrabold

image

Add points where there are inflected curves, to have more monolinear strokes.

Also, use Curve EQ and "Balance Handles" before expanding.

image

Copy the single stroke to the background layer.

Then, outline it.

Finally, add points on vertical/horizontal extrema, then add optical adjustments where needed.

Incorporate italic sources into build

In #42, I tested generating Italics, and determined that I need to make some visual corrections.

Now, I have started doing this, with the basic A–Z, a–z, and 0–9 of ExtraBold and Light.

Next, I need to:

  • make visual corrections to irregular sources
  • make a full designspace to incorporate the italic sources
  • probably, the "bounce" step will need an additional step to "bounce" glyphs along a diagonal axis, for bouncy italics. This will probably take a bit of trigonometry to determine horizontal shifts needed.

Static build improvements

  • make build parallel where possible, with & trick
  • make sure build correctly overwrites fonts in the "Static" directory... in the latest build, the latest fonts only made it to static-OTF and static-TTF, but didn’t successful get moved to overwrite the old static fonts. This might just be a matter of starting the build by removing the build folder, so it can be made from scratch

image

Variable build was failing with fontmake 3.1.0 – start points not quite compatible

As of FontMake v3.1.0, builds were getting blocked by a compatibility check, despite working before:

ERROR:fontmake.compatibility:Fonts had differing point type in glyph yatcyr, contour 1, point 0:
ERROR:fontmake.compatibility: * Shantell Sans Light had curve
ERROR:fontmake.compatibility: * Shantell Sans ExtraBold had None
ERROR:fontmake.compatibility:Fonts had differing point type in glyph yatcyr, contour 1, point 2:
ERROR:fontmake.compatibility: * Shantell Sans Light had None
ERROR:fontmake.compatibility: * Shantell Sans ExtraBold had curve
ERROR:fontmake.compatibility:Fonts had differing point type in glyph yatcyr, contour 1, point 3:
ERROR:fontmake.compatibility: * Shantell Sans Light had curve
ERROR:fontmake.compatibility: * Shantell Sans ExtraBold had None

# etc etc etc

The cause is documented here: https://forum.robofont.com/topic/1027/why-are-some-start-points-becoming-2-how-might-i-fix-it-efficiently/12. Summary: some contours had off curve points for start points, while others had oncurve start points. This was caused by setting startpoints with FontParts, as can happen in many places: Prepolator, GlyphsApp, a script of mine to correct contour direction, and probably many more.

The solution is to run this script: roboDocs/ScaleFast#5 (comment)

Related issues I filed are:

fontTools.ufoLib.errors.UFOLibError: The glyph "guillemetleft.case" occurs in too many kerning groups.

🤖 Tying alts to default glyph kerning
Traceback (most recent call last):
  File "scripts--build/prep-wght_bnce_qurk--simplified_charset-four_alts-extra_calt.py", line 711, in <module>
    main()
  File "scripts--build/prep-wght_bnce_qurk--simplified_charset-four_alts-extra_calt.py", line 695, in main
    extendKerning(fonts)
  File "scripts--build/prep-wght_bnce_qurk--simplified_charset-four_alts-extra_calt.py", line 533, in extendKerning
    font.save()
  File "/Users/stephennixon/.local/share/virtualenvs/shantell--5GGnsPa/lib/python3.7/site-packages/fontParts/base/font.py", line 208, in save
    formatVersion=formatVersion, fileStructure=fileStructure)
  File "/Users/stephennixon/.local/share/virtualenvs/shantell--5GGnsPa/lib/python3.7/site-packages/fontParts/fontshell/font.py", line 51, in _save
    self.naked().save(path=path, formatVersion=formatVersion, structure=fileStructure)
  File "/Users/stephennixon/.local/share/virtualenvs/shantell--5GGnsPa/lib/python3.7/site-packages/defcon/objects/font.py", line 882, in save
    self._saveGroups(writer=writer, saveAs=saveAs, progressBar=progressBar)
  File "/Users/stephennixon/.local/share/virtualenvs/shantell--5GGnsPa/lib/python3.7/site-packages/defcon/objects/font.py", line 935, in _saveGroups
    self.saveGroups(writer)
  File "/Users/stephennixon/.local/share/virtualenvs/shantell--5GGnsPa/lib/python3.7/site-packages/defcon/objects/font.py", line 946, in saveGroups
    writer.writeGroups(self.groups, validate=self.groups.ufoLibWriteValidate)
  File "/Users/stephennixon/.local/share/virtualenvs/shantell--5GGnsPa/lib/python3.7/site-packages/fontTools/ufoLib/__init__.py", line 1208, in writeGroups
    raise UFOLibError(message)
fontTools.ufoLib.errors.UFOLibError: The glyph "guillemetleft.case" occurs in too many kerning groups.

This needs a bit of a deep-dive. My current guess is that the .case punctuation glyphs aren’t being made into separate groups from the regular punctuation, due to the current code in the extendKerning() function – e.g. slash is made into public.kern1.slash, but so is slash.case.

I believe this happened now because I added kerning to the .case alts since last running the build-prep, so alts made of .case punctuation need to be added to kerning groups with those parents.

  • try to replace suffix . with _
  • check: do case glyphs even need alts, or not really? Are case alts being made unintentionally? -- update: no, the case glyphs don’t get alts, and this build-prep script would have to be adjusted in several places if that were a goal.

Okay, new guess at the cause: whereas most group names exactly match primary glyph names, the guillemet groups have abbreviated names, like guil_left and guil_left_case. So, they either need special handling, or this may need to be solved in a better way.

  • do we actually need to split the glyph to find the base name? glyphBaseName = name.split(".")[0] Are these needed to catch alt1, alt2, etc? Check: do these exist yet? (Yes). Add if/else to only split suffixes with alt in them
  • rename groups to reflect real names: guil_right to guillemetright, etc, also quote_straight to quotesingle

I used print(font.groups.findGlyph("guillemetleft.case")) to print the groups that are "too many," and found that guillemetleft.case is getting put into ['public.kern1.guillemetleft', 'public.kern1.guillemetleft_case', 'public.kern2.guillemetleft', 'public.kern2.guillemetleft_case']. So, it looks like I have an over-eager kerning group adder, but it doesn’t seem too bad.

Okay, that was it: previously, I was getting the first part of any glyph name in the font, then adding that glyph to a kerning group based on that. But, this broke once glyphs like guillemetleft.case had kerning, because this loop put them into the base guillemetleft group in addition to their existing group of guillemetleft_case.

The build is back!

Fix [non-blocking] incompatible glyphs reported by fontTools.varLib during VF build

These aren't blocking the build, but they need to be fixed before the font gets shipped:

INFO:fontTools.varLib:Generating gvar
WARNING:fontTools.varLib:glyph Aring has incompatible masters; skipping
WARNING:fontTools.varLib:glyph Yukrcyr has incompatible masters; skipping
WARNING:fontTools.varLib:glyph Iocyr has incompatible masters; skipping
WARNING:fontTools.varLib:glyph lj has incompatible masters; skipping
WARNING:fontTools.varLib:glyph nj has incompatible masters; skipping
WARNING:fontTools.varLib:glyph iocyr has incompatible masters; skipping
WARNING:fontTools.varLib:glyph iukrcyr has incompatible masters; skipping
WARNING:fontTools.varLib:glyph jecyr has incompatible masters; skipping
WARNING:fontTools.varLib:glyph Lj has incompatible masters; skipping
WARNING:fontTools.varLib:glyph Nj has incompatible masters; skipping
WARNING:fontTools.varLib:glyph onequarter has incompatible masters; skipping
WARNING:fontTools.varLib:glyph onehalf has incompatible masters; skipping
WARNING:fontTools.varLib:glyph threequarters has incompatible masters; skipping
WARNING:fontTools.varLib:glyph onethird has incompatible masters; skipping
WARNING:fontTools.varLib:glyph twothirds has incompatible masters; skipping
WARNING:fontTools.varLib:glyph oneeighth has incompatible masters; skipping
WARNING:fontTools.varLib:glyph threeeighths has incompatible masters; skipping
WARNING:fontTools.varLib:glyph fiveeighths has incompatible masters; skipping
WARNING:fontTools.varLib:glyph seveneighths has incompatible masters; skipping
WARNING:fontTools.varLib:glyph bulletoperator has incompatible masters; skipping
WARNING:fontTools.varLib:glyph ijacute has incompatible masters; skipping
WARNING:fontTools.varLib:glyph fi has incompatible masters; skipping
WARNING:fontTools.varLib:glyph f_f_i has incompatible masters; skipping
WARNING:fontTools.varLib:glyph Iigrave-cy.loclBGR has incompatible masters; skipping
WARNING:fontTools.varLib:glyph Esdescender-cy.loclBSH has incompatible masters; skipping
WARNING:fontTools.varLib:glyph esdescender-cy.loclBSH has incompatible masters; skipping
WARNING:fontTools.varLib:glyph Esdescender-cy.loclCHU has incompatible masters; skipping
WARNING:fontTools.varLib:glyph esdescender-cy.loclCHU has incompatible masters; skipping
WARNING:fontTools.varLib:glyph periodcentered.case has incompatible masters; skipping
WARNING:fontTools.varLib:glyph periodcentered.loclCAT has incompatible masters; skipping
WARNING:fontTools.varLib:glyph periodcentered.loclCAT_case has incompatible masters; skipping

Determine which forms of Cyrillic letters are most likely in non-cursive handwriting, then make pangrams for writing samples

Today, we discussed what forms of the Cyrillic alphabet would be most logical for inclusion in Shantell Sans (like the Latin alphabet, there are different letterforms for "print" vs "cursive" styles of handwriting).

So, this issue is a to-do item for @sikeiros, to determine which forms of letters would seem to logically fit into Shantell Sans. Later, we should probably create a PDF including pangrams typeset or written using these letterforms, so that @shantellmartin can write & scan these letters to provide a basis for the Cyrillic type design.

A couple of aesthetic adjustments

Just noting these here so I don’t miss them

  • make v less chiseled
  • make irregular O L N a little less tiny – let Anya know to pull

Problem with `com.google.fonts/check/post_table_version`

When I run fontbakery on the normal static fonts, I get the following fail:

 >> com.google.fonts/check/post_table_version
    Font has correct post table version?
    with fonts/shantell-sans/static-TTF/ShantellSans-Normal-Regular.ttf

      Rationale:                                                                
      Apple recommends against using 'post' table format 3 under most           
      circumstances, as it can create problems with some printer drivers and    
      PDF documents. The savings in disk space usually does not justify the     
      potential loss in functionality.                                          
      Source: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html
                                                                                
      The CFF2 table does not contain glyph names, so variable OTFs should be   
      allowed to use post table version 2.                                      
                                                                                
      This check expects:                                                       
      - Version 2 for TTF or OTF CFF2 Variable fonts                            
      - Version 3 for OTF                                                       

    * FAIL: Post table should be version 2 instead of 3.0.


    Result: FAIL

I suspect this is because these normal styles are subset with pyftsubset.

I will add the arg --glyph-names to the subsetter and see whether that prevents the fail.

UPDATE: yeah, that arg fixed it.

Generate calt code to perfectly match alts generated

At 8cb053e.

As I’m trying to generate the calt code for the variable font with alts, I’m getting the following build error from FontMake:

INFO:fontTools.varLib:Merging OpenType Layout tables
fontmake: Error: In 'sources/wght_bnce_flux--smpl--prepped/shantell-wght_BNCE_FLUX--smpl.designspace': Generating fonts from Designspace failed: (('idotless', ('idotless', 'gravecomb', 'idotless', 'gravecomb', 'gravecomb', 'idotless')), 'str', '[190]', 'list', '.glyphs', 'Coverage', '[0]', 'list', '.BacktrackCoverage', 'ChainContextSubst', '[0]', 'Lookup', '[32]', 'list', '.Lookup', 'LookupList', '.LookupList', 'GSUB', '.table', 'table_G_S_U_B_')

This looks a bit like it would if I was trying to build fonts with mismatched glyph sets or sorting, but the font will build with a simpler calt feature – just not with the full one.

Full traceback of build (Click to expand)
~/type-repos/shantell  main ✗                                                                                                                                                                                                                                14m ⚑  
▶ fontmake -o variable -m sources/wght_bnce_flux--smpl--prepped/shantell-wght_BNCE_FLUX--smpl.designspace                                                                    
INFO:fontmake.font_project:Building variable font variable_ttf/shantell-wght_BNCE_FLUX--smpl-VF.ttf
INFO:ufo2ft:Pre-processing glyphs
INFO:cu2qu.ufo:New spline lengths: 1: 141, 2: 3274, 3: 1930, 4: 1023, 5: 208, 6: 50, 7: 10
INFO:ufo2ft.filters:Running DecomposeComponentsFilter on ShantellSans-Regular
INFO:ufo2ft.filters:Running DecomposeComponentsFilter on ShantellSans-ExtraBold
INFO:ufo2ft.filters:Running DecomposeComponentsFilter on ShantellSans-Regular
INFO:ufo2ft.filters:Running DecomposeComponentsFilter on ShantellSans-ExtraBold
INFO:ufo2ft.filters:Running DecomposeComponentsFilter on ShantellSans-ExtraBold
INFO:ufo2ft.filters:Running DecomposeComponentsFilter on ShantellSans-Regular
INFO:ufo2ft:Building OpenType tables for ShantellSans-Regular
INFO:ufo2ft:Building OpenType tables for ShantellSans-ExtraBold
INFO:ufo2ft:Building OpenType tables for ShantellSans-Regular
INFO:ufo2ft:Building OpenType tables for ShantellSans-ExtraBold
INFO:ufo2ft:Building OpenType tables for ShantellSans-ExtraBold
INFO:ufo2ft:Building OpenType tables for ShantellSans-Regular
INFO:ufo2ft:Building variable TTF font
INFO:fontTools.varLib:Axes:
[{'default': 300.0,
  'hidden': False,
  'labelNames': {'en': 'Weight'},
  'map': [],
  'maximum': 800.0,
  'minimum': 300.0,
  'name': 'Weight',
  'tag': 'wght'},
 {'default': 0.0,
  'hidden': False,
  'labelNames': {'en': 'Flux'},
  'map': [],
  'maximum': 100.0,
  'minimum': 0.0,
  'name': 'Flux',
  'tag': 'FLUX'},
 {'default': 0.0,
  'hidden': False,
  'labelNames': {'en': 'Bounce'},
  'map': [],
  'maximum': 200.0,
  'minimum': 0.0,
  'name': 'Bounce',
  'tag': 'BNCE'}]
INFO:fontTools.varLib:Internal master locations:
[{'Bounce': 0.0, 'Flux': 0.0, 'Weight': 300.0},
 {'Bounce': 0.0, 'Flux': 0.0, 'Weight': 800.0},
 {'Bounce': 0.0, 'Flux': 100.0, 'Weight': 300.0},
 {'Bounce': 0.0, 'Flux': 100.0, 'Weight': 800.0},
 {'Bounce': 200.0, 'Flux': 0.0, 'Weight': 800.0},
 {'Bounce': 200.0, 'Flux': 0.0, 'Weight': 300.0}]
INFO:fontTools.varLib:Internal axis supports:
{'Bounce': [0.0, 0.0, 200.0],
 'Flux': [0.0, 0.0, 100.0],
 'Weight': [300.0, 300.0, 800.0]}
INFO:fontTools.varLib:Normalized master locations:
[{'Bounce': 0.0, 'Flux': 0.0, 'Weight': 0.0},
 {'Bounce': 0.0, 'Flux': 0.0, 'Weight': 1.0},
 {'Bounce': 0.0, 'Flux': 1.0, 'Weight': 0.0},
 {'Bounce': 0.0, 'Flux': 1.0, 'Weight': 1.0},
 {'Bounce': 1.0, 'Flux': 0.0, 'Weight': 1.0},
 {'Bounce': 1.0, 'Flux': 0.0, 'Weight': 0.0}]
INFO:fontTools.varLib:Index of base master: 0
INFO:fontTools.varLib:Building variable font
INFO:fontTools.varLib:Loading master fonts
INFO:fontTools.varLib:Generating fvar
INFO:fontTools.varLib:Generating avar
INFO:fontTools.varLib:No need for avar
INFO:fontTools.varLib:Building variations tables
INFO:fontTools.varLib:Generating MVAR
INFO:fontTools.varLib:  xhgt: OS/2.sxHeight     [485, 515, 485, 515, 515, 485]
INFO:fontTools.varLib:  stro: OS/2.yStrikeoutPosition   [291, 309, 291, 309, 309, 291]
INFO:fontTools.varLib:Generating HVAR
INFO:fontTools.varLib:Merging OpenType Layout tables
fontmake: Error: In 'sources/wght_bnce_flux--smpl--prepped/shantell-wght_BNCE_FLUX--smpl.designspace': Generating fonts from Designspace failed: (('idotless', ('idotless', 'gravecomb', 'idotless', 'gravecomb', 'gravecomb', 'idotless')), 'str', '[190]', 'list', '.glyphs', 'Coverage', '[0]', 'list', '.BacktrackCoverage', 'ChainContextSubst', '[0]', 'Lookup', '[32]', 'list', '.Lookup', 'LookupList', '.LookupList', 'GSUB', '.table', 'table_G_S_U_B_')

Metadata check & fixes with FontBakery

Universal Checks

  • Add STAT table, then check with Samsa
  • correct UPM – somehow, this was set to 1050 ... maybe in the early stage of moving from Glyphs to UFO files? It should change to 1000 without issue, though
  • GFtools fixes: Fix nonhinting, remove MVAR, add DSIG
  • fix whitespace names
    • add unicode 00A0 to space glyph in sources, then remove nbspace glyph
    • test building with and without --production-names flag in fontmake – actually, it seems that --no-production-names is the needed flag
    • remove gnrl:hyphen from sources

Google Fonts checks to correct

(Some Google Fonts checks give fail or warn messages, but these are for things that are not actually problems in fonts. The ones that are important to fix will be fixed here, and Google Fonts can fix others if they deem it necessary for onboarding.)

  • exclude underscores from font filenames
  • FAIL: Missing required codepoints: 0x00A4 (CURRENCY SIGN), 0x00A6 (BROKEN BAR), 0x00AD (SOFT HYPHEN), 0x00D7 (MULTIPLICATION SIGN), 0x2212 (MINUS SIGN) and 0x2215 (DIVISION SLASH) [code: missing-codepoints] - math glyphs are left out of Unicode CLDR language support charts, but would obviously be useful. Will do these.
  • fsType bit 4 set incorrectly – add gftools fix-fstype to variable & static build scripts
  • Subfamily name for Win is missing. It must be "Light" – not sure if this actually matters, but it might, and it’s simple to change
  • INFO: The version string must ideally include a git commit hash and either a "dev" or a "release" suffix. This is a good idea, and I will set this up.
  • WARN: Glyph 0x0020 is called "uni0020": Change to "space" [code: not-recommended-0020]
  • Are there caret positions declared for every ligature?

Static fonts

  • exclude underscores from font postscript names
  • FAIL: Post table should be version 2 instead of 3.0.

And, eventually

  • make fonts export to a single fonts folder, with latest versions

Kern bouncy letters? Figure out a way to do this without unnecessary kerns.

I initially envisioned the flux & bounce axes as temporary, fun effects that could be played with for animation, interaction, and casual usage where spacing wasn’t as important as overall the fact that it was bouncy. I assumed that the build would be best if it randomized the fonts with each build, to create more variety.

However, users will inevitably want to use the maximum bounce & flux settings for something like a logo or storefront sign, and this would freeze an instance of bad spacing due to bounce as a bad look, permanently. Moreover, some uses would be extremely disrupted if bounce results are quite different between versions – making tiny "hot fixes" basically impossible to make. At the end of the day, this is still a typeface, and it needs to be possible to use and maintain in the long term.

Therefore, it is pretty important that:

  • It is possible to build fonts with repeatable results
  • It is possible to tweak kerns where needed in the bouncy & flux styles
  • Kerning in Bouncy sources should be preserved when new bouncy sources are generated.
  • Amount of bounce should also be recorded and preserved when new bouncy sources are generated.

The bounce-generation script, then, should:

  • record bounce values to each UFO’s lib.plist
  • compare Y min (?) to core UFO to check if bounces have been adjusted manually, before next build

The end result is that the build workflow should allow for randomization where desired (basically during the design phase), but also allow for improvements to be made over time, rather than be overridden.

Basic characters to add for basic English

! " # & ' ( ) * , - . / : ; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] a b c d e f g h i j k l m n o p q r s t u v w x y z § ‐ – — ‘ ’ “ ” † ‡ … ′ ″

Glyph names:

exclam quotedbl numbersign ampersand quotesingle parenleft parenright asterisk comma hyphen period slash colon semicolon question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft bracketright a b c d e f g h i j k l m n o p q r s t u v w x y z section uni2010 endash emdash quoteleft quoteright quotedblleft quotedblright dagger daggerdbl ellipsis minute second

Incorporate italic sources into build

In #42, I tested generating Italics, and determined that I need to make some visual corrections.

With 84ee1c3 I have started doing these corrections with the basic A–Z, a–z, and 0–9 of ExtraBold and Light.

Next, I need to:

  • make visual corrections to irregular sources
  • make a full designspace to incorporate the italic sources
    • incorporate into sources
    • incorporate into instances
    • make static version of designspace
  • build, and fix build script to handle italics
    • if moving forward with italics, decompose these glyphs in all sources and adjust drawings for italics
    • the prep build script needs to generate bouncy italics, with diagonal bounces along the italic angle
      • generate necessary sources
      • fix xShift for yShift

"j" shape doesn’t work well in bouncy axis, because it crashes into others

image

Possible ways to fix it:

  • Make j a (mostly) straight line
  • (Maybe?) make sure j never rises upwards on the Bounce axis, and that no other letters go down far enough to hit it... (not sure whether this is very feasible)
  • make the j have a much shorter tail in the bouncy sources? Possibly start with an alt specifically for this?
  • (Maybe?) add a spacing axis

Spacing of "e" in Irregular Light

Most likely the problem is with right sidebearing of lowercase e which affects Cyrillic as well. Glyph seems to be slightly shifted in most of pairs:
Screenshot 2022-06-20 at 13 33 36
Screenshot 2022-06-21 at 14 23 34
Screenshot 2022-06-21 at 10 16 44

Explore axis for variability / bounciness (also find the right name for it)

Goal:
Make a variable axis that goes from the relatively-normal default styles (generally meant for short text) to a style that more closely resembles the natural variability in Shantell’s handwriting.

Questions:

  • Should the styles be duplexed, or should the "handwritten" styles get more spacing, to more-closely match Shantell’s actual writing as shown in the scans?
  • How much can this be automated? How much can letters just get a bouncy baseline, vs how much will proportions have to be adjusted? Probably, a bit of both ... but it should be tested. How to test?

Four options:

  • make one light & extrabold set in which just the baseline shifts
  • make another in which each main glyph gets two alts, and these are shifted randomly
  • make another light & extrabold set in which the baseline shifts & some character shapes change
  • make another light & extrabold set in which each main glyph gets two alts, the baseline shifts, & character shapes change

Potential names:

  • Bouncy BNCY
  • Variable VARI
  • Unique UNIQ
  • Shantell SHNT
  • Optical Size (but probably not)
  • Organic ORGN
  • Human HUMN

Fix stacked accents for Vietnamese, etc

Currently, Vietnamese characters which have "stacked" accents are broken, with accents collapsed on top of one another:

image

I thought I had these working earlier, but after digging through some old commits, I realize that I hadn’t yet resolved this issue. Vietnamese characters are a recent addition, so they just need another iteration to fully work.

These are composed in the primary source fonts, so this is a problem in my build. In the build, new sources are generated with shifted glyphs and new alts, and there is a step which reconnects accents based on anchors.

There are two potential fixes to pursue:

  1. Fix the build, adding some code to better handle multiple accents and anchors.
  2. Pre-draw stacked accents as single glyphs, so that a character like is only made up of two components rather than 3.

Of these two options, route 2 seems to be the better bet:

  • It would allow me more ability to refine the spacing of these stacked accents, which is a bit fiddly to get right through glyph composition alone
  • Potentially, it would allow more flexibility in reducing the height of these accents, which can be disruptive to overall font metrics. Or, for instance, I could make .case variants for stacked accents, even though these aren’t required in other uppercase glyphs, for this typeface.
  • It would allow the already-complex current build to avoid gaining more complexity to handle a relatively small number of glyphs.
  • Even if I later find that I do need to adjust the build further to support stacked accents, the drawing improvements would remain.

Looking at the required glyphs for Vietnamese, there are actually only 8 of these stacked accents needed:

Ắắ Ằằ Ẳẳ Ẵẵ
Ấấ Ầầ Ẩẩ Ẫẫ

Roboto Flex takes this approach, using the following names (plus .case versions of them):

breveacutecomb
brevegravecomb
brevehookabovecomb
brevetildecomb
circumflexacutecomb
circumflexgravecomb
circumflexhookabovecomb
circumflextildecomb

There are also a 4 other stacked accents in Shantell Sans:

Ǻǻ Ȫȫ Ȭȭ Ȱȱ

FWIW, Roboto Flex doesn’t have premade stacked accents for these glyphs. But, I don’t think it would be a problem to use them.

Add less extreme instances

Currently, the instances for bounce and irregularity are pretty extreme. While these might work in limited situations, the most useful instances are really just normal or close to normal but a little bit different.

So, add some instances that have just a slightly amount of bounce and irregularity turned on.

Are static font folders getting nested duplicates inside themselves?

This is something I need to check on later: it seems that perhaps, the static build is nesting duplicates inside itself.

That is, fonts/Shantell Sans/Desktop/Static/OTF contained OTFs, and a directory called static-OTF, which also contained OTFs.

If this is still happening, it is a typo in scripts--build/build-static.sh.

Next characters to make

\ { } ¡ ª « º » ¿ Ð Õ Ý Þ ß ð õ ý þ Č č Đ đ Ğ ğ İ ı Ŋ ŋ Ş ş Š š Ŧ ŧ Ž ž Ǎ ǎ Ǔ ǔ Ǿ ǿ ‐ ‚ „

backslash braceleft braceright exclamdown ordfeminine guillemotleft ordmasculine guillemotright questiondown Eth Otilde Yacute Thorn germandbls eth otilde yacute thorn Ccaron ccaron Dcroat dcroat Gbreve gbreve Idotaccent dotlessi Eng eng Scedilla scedilla Scaron scaron Tbar tbar Zcaron zcaron uni01CD uni01CE uni01D3 uni01D4 Oslashacute oslashacute uni2010 quotesinglbase quotedblbase
  • Also look up Mac Roman.
  • Make Arrows

Add locl features

Glyphs for localization already exist, but these should be set up in the font features.

  • add ijacute IJacute
  • add Scommaaccent scommaaccent Tcommaaccent tcommaaccent
  • add Ldot ldot

Test KernOn for auto kerning

Autokerning may be a sensible solution for this font because:

  • it’s a font focused on fun and flexibility over stodgy precision
  • the handwritten nature makes the shapes quite varied, which makes manual kerning especially challenging
  • the "irregular" sources are very varied, which makes manual kerning start to become a little ridiculous, and somewhat pointless
  • the budget is somewhat constrained
  • If we can reduce work in kerning, we can invest it into other areas, such as improving language support, quality of Italics, and more

BUT, that is all academic until we can test how well autokerning even works! So, this issue will test and document it.

Unify system of anchors & accents in Cyrillic w/ Latin, especially for brevecomb-cyr

Currently, the brevecomb-cyr is drawn a bit differently and has different anchors than the other combining accents.

It should probably be similar, just for the benefit of keeping the sources clean and sensible for future work.

I’m not quite sure whether some or all of these discrepancies are caused by round-tripping to GlyphsApp, or from two different designers working on Latin vs Cyrillic. In any case, I’m writing this down so I remember to unify things.

Example

Here’s the Combining Breve for Cyrillic. It has a few unique features, when compared to other accents:

  • It is drawn to the right of a zero space unit, rather than in the middle (this does build into the output TTF variable font, but I’m not sure whether it would have any noticeable effect on an end user)
  • It has only a top anchor, and no _top anchor
  • Critically, the top anchor is at the bottom of it, whereas it should be on top, to allow other accents to stack onto it via a mkmk feature
  • Also critically, the _top anchor is typically used in accents to attach to a top anchor in base glyphs like e, etc

Shantell Sans Combining Breve for Cyrillic

For contrast, here is the Combining Breve for Latin:

Shantell Sans Combining Breve for Latin

To be continued!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.