Skip to main content

FEZ — Font Engineering made eaZy

fez

I wear a fez now. Fezzes are cool.

The FEZ language is implemented via a Python library, fontFeatures. This format improves over Adobe FEA (.fea) in several important ways, and compiles to FEA or to raw GPOS/GSUB binary tables.

FEZ Quickstart

Class definition is a time consuming element of writing FEA code. FEZ allows regular expressions to be used to define classes; each glyph name in the font is tested against the regular expression, and the glyphs added:

DefineClass @sc = /\.sc$/;

Ran as:

fez2fea tests/LibertinusSans-Regular.otf test.fez

Results in:

@sc = [parenleft.sc parenright.sc bracketleft.sc bracketright.sc ...];

Simple replacement can be done as easily as:

DefineClass @sc = /\.sc$/;
DefineClass @sc_able = @sc~sc;

Feature smcp {
	Substitute @sc_able -> @sc;
};

Quite complex classes can be built. All the glyphs which have a smallcap and alternate form:

DefineClass @sc_and_alt_able = /.*/ and hasglyph(/$/ .alt) and hasglyph(/$/ .sc);

Returning:

@sc_and_alt_able = [h y germandbls];

FEZ can even do substitutions impossible in FEA. For example:

DefineClass @digits =    U+0031=>U+0039; # this is range(U+0031, U+0039) inclusive
DefineClass @encircled = U+2474=>U+247C;

# Un-CJK parenthesize
Feature ss01 {
	Substitute @encircled -> parenleft @digits parenright;
};

Gives us:

feature ss01 {
    lookup Routine_1 {
            sub uni2474 by parenleft one parenright;
            sub uni2475 by parenleft two parenright;
            sub uni2476 by parenleft three parenright;
            sub uni2477 by parenleft four parenright;
            sub uni2478 by parenleft five parenright;
            sub uni2479 by parenleft six parenright;
            sub uni247A by parenleft seven parenright;
            sub uni247B by parenleft eight parenright;
            sub uni247C by parenleft nine parenright;
    } Routine_1;
} ss01;

FEZ can do much more; see the standard verbs documentation and the optional plugins. Writing your own plugins is as simple as defining its grammar, verb, and adding a class with an action() method.

Contributors

See the CONTRIBUTORS.txt file for the full list of contributors. Major contributions are described below:

  • FEZ was originally written by Simon Cozens
  • Fred Brennan contributed a new parser and documentation updates

Metadata

Release files for fez-language 1.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fez-language 1.4.0
File Size Uploaded Provenance Actions
fez-language-1.4.0.tar.gz 902.4 kB Without provenance Details for fez-language-1.4.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for fez-language 1.4.0
File Interpreter ABI Platform Actions
fez_language-1.4.0-py3-none-any.whl Python 3 none any Details for fez_language-1.4.0-py3-none-any.whl

Total release size: 952.8 kB

Release files / fez-language-1.4.0.tar.gz

Download URL fez-language-1.4.0.tar.gz
Size 902.4 kB
Tags Source
SHA-256 checksum
How to use checksums
81e84b491800dc0af0a94fa1b2283c40e7f711e3da023169b03464da1c76aee1
BLAKE2b-256 checksum
How to use checksums
6d4f2ea6fcf659151fed208179b3e1681dd5a92a4c2255db746e2b033fe8c451
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.15

Release files / fez_language-1.4.0-py3-none-any.whl

Download URL fez_language-1.4.0-py3-none-any.whl
Size 50.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4640dce3f8bf133b377d00b4c72687bd8d1ad7f6eac802886addfb6b050e3d02
BLAKE2b-256 checksum
How to use checksums
cf7cbe997b4a18d8290c5486b74d147d343f7f71c7d6803c4ac6ce787f258da5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.15

Security for fez-language 1.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page