FEZ — Font Engineering made eaZy
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.