dist/
directory of main.zip
)© 2021 Fredrick R. Brennan. Licensed under the GNU GPL v3.
Thanks to: Matthew Blanchard (MFEKstroke), Simon Cozens (FEE)
FRB American Cursive is an extremely technically complex cursive font family that consists of 50+ fonts. It is in the style of a "textbook hand", a font family used primarily for education. However, it can be used anywhere a cursive is called for. I call it an "American" cursive not out of any sense of patriotism, but out of a sense of the history of textbook hands: this font most heavily takes its design inspiration from Zaner–Bloser cursive. However, I also integrated elements of D'Nealian and Palmer Method. What this means is that FRB American Cursive is a traditional American textbook hand which puts a lot of emphasis on the idea that the writer should lift their hand from the page as seldom as possible. Using OpenType Layout, I made it so each glyph has at least 3 versions. Unlike many textbook hands, even educational ones, my font connects capital letters and lowercase letters. It connects some capital letters with eachother where possible as well.
Some styles of FRB American Cursive rely on new font technologies that may not work on all legacy systems. Especially the color fonts may not be supported on all systems. However, FRB American Cursive is a standard OpenType font family. OpenType support is absolutely mandatory mandatory for this font: there is no expectation of proper display without OpenType Layout support. The best tested target is HarfBuzz.
FRB American Cursive supports Latin and Cyrillic. Some day I hope it will also support Armenian and Greek.
As far as I know, this is the most technically advanced educational cursive font family in existence. All fonts come from a single FontForge SFD ultimately: FRBAmericanCursive.sfd
.
The fonts are free software. They are free for personal and commercial use. Much ink has been spilled about "the death of cursive" in the US, but few have taken the time to analyze the fact that all of the educational cursive computer fonts are proprietary. (Especially high quality ones, with OpenType substitution to make a flawlessly connecting word.)
This isn't your grandmother's Fontographer font. It is best to think of it as a software project and a font family combined. Over 500 lines of just my own code make the final font files. So, building is complex. Take a look at Makefile
first, if you'd wish to take the plunge, it shows which fonts use which scripts.
Like all my fonts except my earliest work, no non-free software was used at any point during development.
bash
, find
, make
, and sed
†glifpathlen
‡harfbuzz
)freetype2-demos
)† These should be standard on most Linux distributions and on Windows under MSYS2. ‡ These are Rust projects and need to be compiled by cargo and installed into your PATH.
Right now the Makefiles are expecting you to have fontmake
installed through PyPy. fontmake
is noticeably faster through PyPy, which matters quite a lot when building ≈70 fonts.
I installed it like this:
pypy3 -m pip install --user fontmake
PyPy may not be convenient for you. If not, just remove it from the Makefile's. Patch welcome to add a Python interpreter flag to the Makefile's, I didn't have time. Note that you need both CPython and PyPy, because FontForge only works via CPython and a lot of scripts early in the build process require the FontForge API. (make regen
etc.)
On make
, this is the general flow:
make regen
FRBAmericanCursive.sfd
. This file contains all of the actual splines, glyph names, and metrics. Every font is built from this file. make regen
is the first part of the Makefile, and its purpose is to generate the UFO, FRBAmericanCursive-SOURCE.ufo
. However, this UFO has diverged from how FontForge would write it, so only the glyphs folder is replaced. To edit the font OpenType Layout features (features.fea
) or the font's metadata (fontinfo.plist
), etc., it is perfectly fine for you to edit the UFO files not inside the glyphs/
directory, they won't be overwritten by the SFD data upon make regen
.
make monoline
FRBAmericanCursive-400-Regular.otf
, FRBAmericanCursive-900-Black.otf
, etc. It also runs MFEKstroke-CWS
, a constant width stroker, on each glyph in the input, along with the widths provided in build_data/monoline.tsv
. It outputs a UFO for each font into build/
as well, as the next steps need them. scripts/prepare_ufo.py
runs scripts/fudge_fontinfo.py
which changes the metadata as appropriate for each font.
make svgs
make svgs
converts all of these into .glif
format in a directory called build/COLR_glyphs
. Perhaps svgs
is a bit of a misnomer, because one layer never touches SVG: the arrows. They used to be SVG-originated, but since v1.2 now come from two passes of MFEKstroke: first, MFEKstroke-PAP
(using a single line, offset from the glyph, with a variable length decided by the scripts/make_arrows_for_glyph.py
script that calls glifpathlen
), then MFEKstroke-CWS
with a custom triangle-shaped cap to make an arrow.
make patterned
make colrcpal
can't pick them up. So, we generate them all. The process is very similar to make monoline
, except this time we're exclusively using MFEKstroke-PAP
instead of MFEKstroke-CWS
.
make colrcpal
build/COLR_glyphs
into every UFO font built so far in build/
, and then build all of them with fontmake
, without allowing fontmake
to handle the color. We use a custom fontTools script to add the actual COLR/CPAL SFNT tables, called scripts/combine_colr_cpal.py
.
make specimens
hb-view
(from HarfBuzz utilities) and SILE, a Lua typesetter that rivals LuaLaTeX. SILE generates a lot of pages for us, then pdftk
puts them all together in one document.
make dist
make
command of note for distributing a new release is this one. All it does is make WOFF2 files of all the compiled fonts in dist
and zip them up for you, ready to upload to GitHub's releases page.