Automatic Feature Code must include vert in vrt2

vrt2 must contain vert all. However, Automatic Feature Code currently does not include vert in vrt2. it must be included.

Thanks for the input.

I had another look, the vrt2 spec stipulates:

ATM/NT 4.1 and the Windows 2000 OTF driver impose the following requirements for an OpenType font with CFF outlines to be used for vertical writing: the ‘vrt2’ feature must be present in the GSUB table, it must comprises a single lookup of LookupType 1 and LookupFlag 0, and the lookup must have a single subtable. The predecessor feature, ‘vert’, is ignored.

… and further:

Feature interaction: Overrides the ‘vert’ (Vertical Writing) feature, which is a subset of this one. May be used in addition to any other feature.

And the vert spec says:

Note that layout engines that instead depend on the font to supply pre-rotated glyphs for all sideways glyphs should use the ‘vrt2’ feature in lieu of ‘vert’ and ‘vrtr’. Because ‘vrt2’ supplies pre-rotated glyphs, the ‘vert’ feature should never be used with ‘vrt2’, but it may be used in addition to any other feature.

If I understand that correctly, the two should not simply be synced.


This is Adobe’s AJ1 GSUB file. vrt2 contains the entire vert. Actually vrt2 specification class such as NSTextView ignores vert. vrt2 must contain the entire vert.

Does that font contain pre-rotated glyphs?

Of course. Adobe-Japan1 contain many pre-rotated glyphs.


There are two methods of vertical layout: the vert method and the vrt2 method. Use only one layout system.

  • The vert method is used by Adobe and web browsers, and does not use the vrt2 table.
  • The vrt2 method is used by Microsoft Office and NSTextVew, and does not use the vert table.

In particular, Japanese fonts are required to support both of these.

My friend @monokano is absolutely correct.

The ‘vert’ GSUB feature includes everything but the substitutions for the pre-rotated glyphs, which is effectively everything that is not full-width. The ‘vrt2’ GSUB feature should inherit all ‘vert’ substitutions, then specifies additional substitutions for the pre-rotated glyphs.

An app or layout engine must choose between ‘vert’ and ‘vrt2’. Both cannot be enabled.

At this point, due to UAX #50, Unicode Vertical Text Layout, the ‘vrt2’ GSUB feature is effectively deprecated. Fonts that do not include pre-rotated glyphs, such as the Source Han, Noto CJK, and Ten Mincho families, still include the ‘vrt2’ GSUB feature, because Microsoft apps depend on its mere presence for vertical layout to work correctly. For such fonts, the ‘vrt2’ GSUB feature is either a clone of the ‘vert’ feature, or a subset. The reason why it would be a subset is that the ‘vrt2’ feature is constrained to include only one lookup, whereas the ‘vert’ feature has no such constraint.


vrt2 requires both all vert code and .rotat code. If you understand the vrt2 spec and the vert spec well, you will reach this conclusion.

Many Japanese users are very troubled because the current specification of is wrong.

I’ll fix this. Thank you for the explanation.

1 Like

I’m glad this will finally be fixed. Thank you a lot!

For future reference, I’ll leave here a link to the duplicate thread.

Japanese users will be rescued. Thank you!

I have confirmed that this bug has been fixed as expected. I am very happy!