Tofu, or not Tofu

News|Adobe Blogs|Dr. Ken Lunde 2016-05-20 15:35:58

One of my more popular open source fonts is Adobe Blank, and to a less extent the related Adobe Blank 2 because it uses a 'cmap' table format, Format 13, that is not broadly supported. Actually, Adobe Blank provides absolutely nothing, because it maps all 1,111,998 Unicode code points to a range of 2,048 non-spacing and non-marking glyphs, yet such a font is useful for particular scenarios, such as addressing the FOUT (Flash Of Unstyled Text) problem.

Allow me to introduce Adobe NotDef, which is modeled after Adobe Blank in that it covers all of Unicode and maps to a range of 2,048 glyphs, but differs in that the functional glyphs are spacing and marking. The original suggestion for Adobe NotDef came from Dave Crossland. The glyphs match the shape and advance width of the standard Adobe .notdef glyph that is invoked in environments that do not support font fallback when the selected font does not include a glyph for a particular character, and as Dave wrote, Adobe NotDef is useful for font fallback purposes in that it can be used to prevent the display of non-standard .notdef glyphs that may be present in some fonts in the font fallback chain.

All 2,048 functional glyphs in Adobe Blank specify the following short charstring that represents a zero-unit horizontal advance with no subpaths:

0 width


On the other hand, all 2,048 functional glyphs in Adobe NotDef, along with the .notdef glyph itself (CID+0), specify the following charstring that represents a 1000-unit horizontal advance with five subpaths:

1000 width

100-120 move 900-120 line 900 880 line 100 880 line

500 421 move 182 830 line 818 830 line

532 380 move 850 789 line 850-29 line

182-70 move 500 339 line 818-70 line

150 789 move 468 380 line 150-29 line


Thanks to subroutinization, there is little or no bloat in the CFF for these 2,048 glyphs. In fact, Adobe Blank and Adobe NotDef are approximately 20K in size, and differ in size by less than 2K.

The Introducing Adobe Blank and Adobe Blank Redux blog articles provide some background about the Unicode coverage and the reason why 2,048 functional glyphs are included, so I won't repeat the details here.

There is a bit of history about the .notdef glyph that is used for Adobe NotDef. Prior to the deployment of OpenType/CFF fonts, Adobe Type 1 fonts, to include its CJK ones, used a spacing and non-marking .notdef glyph. In order to make more explicit the presence of characters for which the selected font lacks a glyph, a marking and obvious .notdef glyph was designed and employed. The .notdef glyph used in Adobe NotDef has been included in Adobe's OpenType/CFF fonts from their very early releases, and my own notes suggest that this goes back as far as 1998.

Edited on 2016-05-24to add that my long time manager, David Lemon, is the person who originally designed this glyph, which was meant to convey a clearer "glyph not available" message than a blank or tofu-like shape.

Anyway, enjoy Adobe NotDef!