How To Design A Beyond-Universal Font


UnifontEX is the culmination of 9 years of work, and it involved making a LOT of well-researched decisions. For instance, I’d originally done hinting in older versions, but hinting can be an epilepsy risk on moving text so that goes bye-bye, plus FreeType hinting in FontForge WILL mangle it. I tested it in Furnace’s FreeType. Also, I omitted bitmap tables from ALL web-usable formats to prevent OpenType Sanitizer from rejecting them. This keeps the size on par with TrueType Unifont. The DFONT has both. Also, vendor-specific formats like DFONT and EOT still have the other OS’s optimizations for either Wine use of EOT, or certain TrueType renderers on DFONT. Also, OTB has them for WSLg users. I also made all the non-upstream formats out of boredom and to cover all bases. Other decisions included having an orphan VDMX table for best compatibility and accessibility (basically, I’m happy CacheTT would not generate hdmx or LTSH tables), and I also enabled vertical text as much as possible to save Japanese Inkscape from crashing in vertical CJKV mode. I used Unifont-JP because of its higher character count, and surprisingly, no Chinese people have complained. Far from it. Basically, I made a LOT of decisions to make the font work everywhere as best as possible, including leaving gasp and OS/2 at their existing versions, allowing older renders safe usage. I also left the gasp table unaltered for accuracy.

Regarding process: I used FontForge to make Unifont-JP 15.0.06 and Unifont Upper 11.0.01 (highest you can merge without HarfBuzz-only extensions) to allow Plane 1 and have the most glyphs, removed the placeholders to fit, kept control characters to pass the BLNS test, and I also made the font show up as monospaced by setting all kinds of flags, like Panose and other OS/2 flags, and even putting Mono distinctly in the name. I also made the font use the most detailed and compatible TeX table, furthered that with the MATH table, used Vertical Metrics and the BASE table’s vertical section (and where applicable VDMX) to stop crashes in Japanese Inkscape, added JSTF (to help with justification, BASE, MATH, JSTF, and BDF tables all use values autocalculated by FontForge) added a sample text Easter egg, filled in Fontlog and Comments, Panose stuff more accurately and to make the font show as monospaced (the IBM SS Typewriter style and the Monospaced width in Panose) plus the Birdfont OFL flag (it is GPL2+OFLv1.1) and made the font generate with “Apple”, “OpenType”, “Dummy ‘DSIG’”, “Windows-compatible ‘kern’”, and the entirety of the FFTM and PfEd tables to maximize compatibility, and saved the bitmaps for DFONT to avoid browser problems. I ran it through CacheTT to get the VDMX table.

I also used two WOFF recompressors to add another Easter egg on top of WOFF’s version flag of 15.11 (to not confuse different readers instead of 15006.11001), and I shrunk it with the Zopfli-enhanced WOFF recompressor, while preserving ALL info. I also ran the TTF through TTF2EOT to get a Internet Explorer one, added one with FontForge-generated bitmap strikes (done at 16px via FontForge Mac scaling in the bitmap dialogue, also why BDF and Arduino versions exist, and yes I filled out the BDF table). I also ran it through BWTC32Key unencrypted to make WOFF3 (a homemade format), and FontForge exported WOFF2 (surprisingly it sucks compression-wise, which I didn’t expect).

I also ran the TTF2PNG version (generated in a way to output all glyphs from U+0000 to U+10FFFF sequentially while preserving slots not occupied by font characters to not need a definition file, and I used a bitmap-containing TTF as input to work around a bug in Plane 14’s bottom row of pixels of the last characters), then running THAT through GIMP to get 1bpp, and I kept the output chunks simple, and the result had a nice block size and chunk number that does not even need Random Access. I also made versions for Arduinos from the BDF with BDFconv_2_22.exe from the u8g2 Github, and I made them generate the entire font in both formats. I exported iOS Safari SVG webfonts from FontForge and made an SVGZ version via 7Z GZip if anyone wants to write a decoder. I also made the DFONT version have the bitmaps since they aren’t webfonts, and I made the OTB version usable on some older Linux systems newer than BDF-compatible ones.

I also used Neko Project 2 for Wii to get a PC-98 ANEX86.BMP replacement since the Windows version would not do this. I also made a CSS file for all webfont formats.

A LOT of research into renderer corner cases, workarounds, and possible table types was made, and I learned a LOT here. And I didn’t do any glyph edits. I even tested on multiple devices and frequently cross-checked my work. It was a LOT of work and research, but it was all worth it. Also, CSUR existed in ancient versions before I ran out of room.

This might as well be my longest and best-engineered project, because it was meticulously designed to please as many systems as possible, even archaic ones, as well as OSes that are not Mac or Windows, AND have been obsolete for even decades. This project was a wild ride. I hope you enjoy this exacting and meticulously-crafted font, and may the odds be in your favor.

Get UnifontEX

Leave a comment

Log in with itch.io to leave a comment.