Automatically generate a BASE table

An idea. Currently there is the CJK Guide custom parameter which allows you to establish the Ideographic Character Face while working on East Asian font projects. The value set here provides all the relevant information necessary to generate a standard BASE table.

20111222140102

And since the CJK Guide parameter is set on a master-by-master basis, you’re actually able given sufficient information to vary the BASE table across a variable axis. :slight_smile:

Obviously there is still the option to include the BASE table as a Prefix item, but automatically generating one would be handy.

1 Like

I’ll have a look at the base table, soon. You don’t happen to have a small .otf that has a BASE table with those values?

Sure. I cropped an instance of Noto Sans CJK and provided a Glyphs version (with the CJK Guide included) as well as an exported TTF with the original BASE table merged back in.
BASE_sample.zip (13.1 KB)

Adobe uses this structure for the BASE table in AFDKO:

table BASE {
  HorizAxis.BaseTagList     icfb  icft  ideo  romn;
  HorizAxis.BaseScriptList  
                DFLT  ideo   -74   834  -120     0,
                hani  ideo   -74   834  -120     0,
                kana  ideo   -74   834  -120     0,
                latn  romn   -74   834  -120     0,
                cyrl  romn   -74   834  -120     0,
                grek  romn   -74   834  -120     0;

  VertAxis.BaseTagList      icfb  icft  ideo  romn;
  VertAxis.BaseScriptList 
                DFLT  ideo    46   954     0   120,
                hani  ideo    46   954     0   120,
                kana  ideo    46   954     0   120,
                latn  romn    46   954     0   120,
                cyrl  romn    46   954     0   120,
                grek  romn    46   954     0   120;
} BASE;

You can see the ideo is -120, aligning with the descender value. In this font, the Ideographic Character Face (ICF) value is 46, which is also represented by the CJK Guide. So to calculate the relevant fields, ICFB is -120+46 (-74) and ICFT is 1000-120-46 (834).

A similar calculation can be made for the vertical setting, except that ICFB is just 46 (0+46), and ICFT is 1000-46. And the Roman baseline is 120 above the bottom of the ideograph (0), so it is just 120.

There are a variety of possible baseline tags available.

A couple of additional bits and bobs that come out of this investigation—it would be useful to be able to set the CJK guide unequally—which is to say to have it be slightly different on the top/bottom vs the sides. While this may not be as common, it is not out of the realm of possibility. I also wonder if it would be useful to be able to customize the em-square dimensions to be able to fully customize the CJK design process.

I was one of the originators of the BASE table entries for CJK layout (‘ideo’, ‘idtp’, ‘icft’ and ‘icfb’). Before they existed, CJK fonts lacked any consistent ideographic embox metrics, and text engines needed their own heuristics to calculate them font by font, or simply suffer the consequences of using the font origin for aligning different runs on the line.

The ‘ideo’ and ‘idtp’ BASE table entries correspond to the bottom and top of the ideographic embox of the font, and thus are to be used to set the line height for that font when using embox-style layout. I consider them to be required for all Chinese and Japanese fonts, so that a consistent glyph alignment and line height can be achieved across all fonts.

1 Like

becomes

Another use for the BASE ‘ideo’ and ‘idtp’ metrics is to allow the designers of non-CJK fonts to tell the engine how their non-CJK fonts’ glyphs should be positioned relative to ideographs in other fonts (and perhaps scaled up or down so their emboxes match).

The ideographic character face metrics (‘icft’ and ‘icfb’) are to be used as stand-ins for the “average” ideograph’s bounding box. These can then show what size ideograph (relative to the embox) with which a given font is designed to be used. Kana-only fonts could include these BASE table entries. When included in a font containing ideographs, the entries are useful to characterize the average character face of the ideographs quickly and allow for use in grids or other glyph alignment scenarios.

1 Like

I’d like to add a use case from the Latin font side.
I found that all Adobe fonts — not just CJK fonts — include a BASE table. For example, Adobe Garamond Pro contains:
BASE.horizAxis.ideo: -170
BASE.horizAxis.latn: -170

This value of -170 corresponds to the bottom of the em square, allowing InDesign to correctly align Latin fonts with CJK ideographs in mixed-composition settings.
The BASE table is not exclusive to CJK fonts — it is part of Adobe’s broader multilingual typography strategy, ensuring consistent baseline alignment across scripts. Supporting BASE table round-tripping in Glyphs v3 should be considered essential for high-quality font production, not just for CJK fonts but for any font designed with multilingual co-composition in mind.
In Glyphs v2, this table was preserved on export. In v3, it is silently dropped with “Unsupported table ‘BASE’; ignoring.” This is a regression that affects professional font workflows.