Scunthorpe Sans

This article is a repost promoting content originally published elsewhere. See more things Dan's reposted.

( )

 A s*** font that f***ing censors bad language automatically.

This is pretty beautiful, in a sick-and-wrong way. It’s a font which contains ligatures that can be automatically used by supported software. But instead of ligatures for things like æ and œ, this font replaces the letters of common swear words with a glyph that looks like a censor bar. So it’s an automatically-self-censoring font.

Better yet, the authors were aware of the Scunthorpe problem and attempted to mitigate it; this also provides the font’s name. Unfortunately it’s not possible to do so perfectly without adding ligatures for just about every dictionary word individually (now that would be a font) so words like shitake and cockerel still get censored. And even where the mitigation works, it produces other problems: e.g. the use of the ligature Scunthorpe means that the word cannot be broken e.g. hyphenated across two lines. Nor will letter counters work properly.

But I don’t think anybody’s suggesting that this font should actually see mainstream use. Right?

Text Rendering Hates You

This article is a repost promoting content originally published elsewhere. See more things Dan's reposted.

( )

Rendering text, how hard could it be? As it turns out, incredibly hard! To my knowledge, literally no system renders text “perfectly”. It’s all best-effort, although some efforts are more important than others.

Just so you have an idea for how a typical text-rendering pipeline works, here’s a quick sketch:

  1. Styling (parse markup, query system for fonts)
  2. Layout (break text into lines)
  3. Shaping (compute the glyphs in a line and their positions)
  4. Rasterization (rasterize needed glyphs into an atlas/cache)
  5. Composition (copy glyphs from the atlas to their desired positions)

Unfortunately, these steps aren’t as clean as they might seem.

Delightful dive into the variety of issues that face developers who have to implement text rendering. Turns out this is, and might always remain, an unsolved issue.