Skip to main content

The FEZ language: Font Engineering made eaZy

Project description

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 plugins documentation. Writing your own plugins is as simple as defining its grammar, verb, and adding a class with an action() method.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fez-language-1.2.0.tar.gz (32.6 kB view details)

Uploaded Source

Built Distribution

fez_language-1.2.0-py3-none-any.whl (41.6 kB view details)

Uploaded Python 3

File details

Details for the file fez-language-1.2.0.tar.gz.

File metadata

  • Download URL: fez-language-1.2.0.tar.gz
  • Upload date:
  • Size: 32.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.9.7

File hashes

Hashes for fez-language-1.2.0.tar.gz
Algorithm Hash digest
SHA256 a84ee7c097815a89d39de7ad3d6db18e0c321e839df53a1a5a2238b200ed18e9
MD5 e8c3f2aaefddf62b68e08a18ee11d802
BLAKE2b-256 b2164955f534bd7ca18cf2f21ed73b2ab4595a55bdc086d5448fbaa3bf3d862a

See more details on using hashes here.

File details

Details for the file fez_language-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: fez_language-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 41.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.9.7

File hashes

Hashes for fez_language-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8ddf7f71c21100884b5d914edd8b8869318535bc3294ebef99beb73d2bdfd3d4
MD5 3afb46c4b055886b36c1c9d2c57795ef
BLAKE2b-256 7e2f996f8499a530f327d94fa7cedce4feabe5578453d9b82cf9d83910000b12

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page