I spent the last couple of weeks developing a Variable Font version of the infamous Adobe Blank, and the open source project, named Adobe Blank VF & Friends, was released yesterday evening. But, before I detail what makes the Variable Font versions special, besides being Variable Fonts, let’s briefly go over the history of Adobe Blank and Adobe Blank 2.
Adobe Blank
First released in 2013 as open source, Adobe Blank simply maps all 1,111,998 Unicode code points to non-spacing and non-marking glyphs. What made the project interesting for me was to find the right balance between the number of glyphs and the size of the 'cmap' table. When mapping over a million code points, this becomes a valid concern. After some experimentation, I found that 2,049 glyphs was the sweet spot that resulted in 'CFF ' and 'cmap' tables of a relatively small size.
Adobe Blank 2
Adobe Blank 2, which was first released in 2015, is a two-glyph version of Adobe Blank that includes a Format 13 (Many-to-one range mappings) 'cmap' subtable that maps all 1,111,998 Unicode code points to GID+1. At the time, there was no convenient way to create a Format 13 subtable, so I used ttx, and supplied the actual hex values of the compiled subtable. The current version of ttx can successfully compile a Format 13 subtable by explicitly specifying all 1,111,998 mappings.
That then brings us to the Variable Font versions…
Adobe Blank VF & Adobe Black VF
Unlike Adobe Blank and Adobe Blank 2 that are CID-keyed and specify the special-purpose Adobe-Identity-0 ROS (Registry, Ordering, and Supplement), the Variable Font versions are not CID-keyed, because the name- versus CID-keyed distinction does not exist in the 'CFF2' table that is used for Variable Fonts.
Like Adobe Blank, Format 4 (Segment mapping to delta values) and Format 12 (Segmented coverage) 'cmap' subtables are included. The former subtable includes 63,454 mappings. The latter includes all 1,111,998 mappings.
I originally developed a marking version, named Adobe Black VF, in order to visually test its two design axes, 'wdth' (Width) and 'HGHT' (Height), and later figured that it serves as an excellent test font. The latter axis tag is all uppercase, because it is not yet registered. In keeping with the spirit of Adobe Blank in terms of being non-spacing, the default value of its two axes is zero (0). As the axis values increase, with 1000 being the maximum value, the horizontal or vertical advance also increases as appropriate.
What really makes these Variable Fonts special is the presence of the 'VVAR' (Vertical Metrics Variations) table, which is necessary to accommodate the variable metrics that are associated with the 'HGHT' axis. The AFDKO (Adobe Font Development Kit for OpenType) tools only recently started to support this table.
It is best to use the marking version, Adobe Black VF, to explore how the 'wdth' and 'HGHT' axes are expected to behave in horizontal and vertical writing modes:
Axis | Horizontal | Vertical |
---|---|---|
wdth | The glyph and its horizontal advance expand along the X-axis to the right from the horizontal origin as the value increases | The glyph expands along the X-axis from the center of the em-box to its left and right edges as the value increases |
HGHT | The glyph expands along the Y-axis from the center of the em-box to its top and bottom edges as the value increases | The glyph and its vertical advance expand along the Y-axis downward from the vertical origin as the value increases |
The five-frame animated image below shows how the two axes behave in horizontal writing mode, starting from axis values that are zero (0), alternately incrementing 'wdth' then 'HGHT' to 500 then to 1000 (surrounded by 1000×1000 cyan-colored boxes to better demonstrate the varying horizontal advances):
The five-frame animated image below illustrates the same, but in vertical writing mode, again starting from axis values that are zero (0), but alternately incrementing 'HGHT' then 'wdth' to 500 then to 1000:
Neat, eh?
Adobe Blank 2 VF & Adobe Black 2 VF
Like Adobe Blank 2, a Format 13 'cmap' subtable is used to map all 1,111,998 Unicode code points to GID+1. Adobe Blank 2 VF and Adobe Black 2 VF are otherwise identical to Adobe Blank VF and Adobe Black VF, and should be used only in environments that support the Format 13 'cmap' subtable.
Enjoy!