Discover more from hrbrmstr's Daily Drop
Drop #302 (2023-07-25): Typography Tuesday
The Terrible Secret of OpenType Glyph Substitution; What’s The Best Font?; Resist[fonts] Are [Far From] Useless!
We're back in typographic wonk-land for today's font featurette. But, we won't leave you in un-kerned despair. After we discuss parts of the underbelly of modern font stacks, we'll lighten the discourse a bit and, hopefully, leave you in a better place than when you engaged with today's Drop.
The Terrible Secret of OpenType Glyph Substitution
As we've noted before in various Drops, OpenType is a scalable computer font format developed jointly by Microsoft and Adobe, derived from TrueType and retaining its basic structure while adding intricate data structures for describing typographic behavior. One of the key features of OpenType fonts is the ability to perform glyph substitution (GSUB). This feature allows for the selection of the most appropriate character for a particular context, such as standard or discretionary ligatures, swashes, or other special characters.
The GSUB table in OpenType provides data for substituting glyphs for appropriate rendering of scripts or advanced typographic effects, such as ligatures. Glyph substitution is essential in many language systems, like Arabic, where the glyph shape depicting a character varies according to its position in a word or text string. In other language systems, glyph substitutes are aesthetic options for the user, such as the use of ligature glyphs in the English language.
This sounds all neat and tidy, but in this older post, “The Terrible Secret of OpenType Glyph Substitution”, Matthew Skala suggests that this is nowhere near as clean cut as the spec might suggest.
Understanding OpenType glyph substitution can be a surprisingly challenging task. This difficulty arises from its peculiar substitution language which is declarative, making it an oddball in the world of imperative programming languages. The syntax of the feature file, which forms the core of this language, is designed to specify substitution rules. These rules work by recognizing particular input sequences and replacing them with alternative ones.
The complexity is further complicated by the fact that the order in which these substitution rules are applied is of paramount importance. The reason for this is that each rule modifies the output of its predecessor. It's akin to a chain reaction where each step lays the groundwork for the following one. As someone who is used to the similar declarative nature of firewall rulesets, I don't find this as odd as those who have remained sane might find it to be.
These substitution rules are inherently limited by their inability to match backwards in the input. Once a successful match has been made, the input pointer exclusively moves forward. Permitting the input pointer to move backwards would equip the substitution language with Turing completeness, allowing for infinite loops, which is an outcome we would prefer to avoid for the sake of efficiency.
To provide a means of reusability, OpenType allows the definition of named lookups. These are essentially sets of substitution rules that have been named for ease of reference. What's more, these lookup names can be invoked directly within substitution rules. This action applies the rules associated with the lookups to a part of the input, streamlining the process.
In order to be used in substitutions, glyphs need to be classified into specific categories: base, ligature, mark, or component. This categorization is crucial to the functioning of the substitution rules.
Substitution rules can be made more specific through the use of restrictions (because we need even more complexity, right?). For instance, they can be locked out based on scripts and language systems. This ensures that each rule is only applied where appropriate. The language also provides the “ignore” keyword, which allows the specification of exception patterns. These patterns block other substitution matches, providing a level of control and specificity to the substitution process.
While I may have summed up the overall oddness and “grrr-ness” of “GSUB”, Matthew will take you on a far more detailed journey. Thankfully, most readers are on the “I just use fonts” side of this whole thing, where you just get to use the fruits of those who were driven mad by the complexity of our modern, digital typography landscape.
What’s The Best Font?
Fonts are, in a way, the unseen architects of communication. They play a pivotal role in shaping our perception of any given text. In the same way an artist might wield a brush, typefaces convey a spectrum of style, emotion, and authority with every curve and line they draw. Unsurprisingly, there isn't a “one-size-fits-all” solution in the world of typography. Instead, fonts engage different readers based on an array of factors, be it age, vision, or the familiarity that comes with years — or, even, decades — of reading.
Of all places, the Washington Post decided to challenge us all with a fairly serious question: “What’s your type?”. This posit requires some serious consideration!
The understated elegance of serif fonts, such as the noble “Times New Roman”, makes them the favored choice for prolonged reading. Their distinctive hooks and tails guide the eyes smoothly through blocks of text, helping to reduce fatigue. On the other end of the spectrum, sans serif fonts, such as the venerable Arial, stand bold and unadorned, their crispness making them perfect for headlines and snippets of text that demand immediate attention.
Yet, it's not just the style that matters, but also the characteristics of the font. The proportion, contrast, and letter spacing, as well as the 'x-height' — i.e., the height of lowercase letters — have substantial impacts on both legibility and readability. Quite remarkably, our choice of font can boost or cut down reading speed by as much as 35%, a statistic that resonates particularly with avid readers and speed racers alike.
The “best” font for an individual often lies buried in the nuances of our personal histories. Factors such as the era and place in which we've grown up, and the kind of text we're most used to reading, can shape our font preferences. For example, older individuals (like your humble Drop author) typically find sans serif fonts like Garamond, Montserrat, and Palatino more comfortable to read, navigating through these typefaces with remarkable swiftness.
To wax poetically for a moment, one might argue that, much like eyeglasses, we each require a unique “font prescription” to view text with optimum clarity. Simplicity reigns supreme in this context, with simpler fonts frequently offering the most legible and functional results.
So, what's the best way to find your perfect match in this world of typefaces? The answer is much the same as in any other area of life: experimentation. Dabble in the wide array of fonts that exist, and you'll soon find the one that feels as comfortable as a favorite sweater, enhancing your reading experience in ways you may never have imagined.
Resist[fonts] Is [Far From] Useless!
Resist Sans and Resist Mono are two versatile and highly functional font families that cater to a wide range of design applications. Both fonts were designed by Evgeny Tantsurin and published by Groteskly Yours
Resist Sans is a free-spirited neo-grotesque font that embodies both the innate desire for revolt and a tendency towards uniformity. It comes in 28 styles, including two versions: Display and Text. Each is available in seven weights, making it incredibly adaptable for various design applications. There are some free versions available from the aforelinked sites.
Resist Mono is a monospaced font family that borrows the most distinct features of its sibling. It was developed to be a functional and highly legible font, which is especially important in coding. Resist Mono features 'true' italics that look more natural and visually appealing.
The font family comes in 16 styles (14 static fonts) and two variable fonts. Each font contains over 1,300 glyphs!!!! This includes letters, small capitals, numbers, punctuation, symbols, etc. Resist Mono supports more than 200 Latin-based languages and has extensive Cyrillic support for languages like Russian, Bulgarian, Ukrainian, and many more. In addition to this, Resist Mono also includes special Powerline symbols for coding.
While not completely “free”, each of these families has a distinctive nature that I suspect many-a-Drop reader will find compelling enough to part with some coin for.
Have a fontastic Tuesday! ☮