OpenType 1.7 new "OS/2" size-range requires "name" table addition
Karsten Luecke
karsten.luecke at kltf.de
Thu Mar 26 08:35:32 CET 2015
Hello all.
Microsoft has just published the specification for OpenType 1.7:
http://www.microsoft.com/typography/otspec>
It specifies a new version of the "OS/2" table which has two additional
entries, "usLowerOpticalPointSize" and "usUpperOpticalPointSize". They
define the range of sizes for which a font has been designed:
http://www.microsoft.com/typography/otspec170/os2.htm#lps
http://www.microsoft.com/typography/otspec170/os2.htm#ups
These two new entries would be an elegant way to enrich a font family
with optical size specific designs. For every style, for every optical
size specific design, there would be a separate font.
Unfortunately, the mechanism is broken right from the start because it
is incompletely defined, or rather, not defined at all. Determining a
font's size range is only half the thing. Defining how the size range
definition participates in font identification, and hence interacts with
"name" table records, is the other half that is missing.
I would suggest a simple solution:
* * *
a)
Add three new "name" table NameIDs:
1) NameID 25: Size-aware Typographic Family name.
2) NameID 26: Size-aware Typographic Subfamily name.
Essentially the same as NameIDs 16 and 17, except that there is no
mention of anything size specific in these names. Size specific
information are exclusively provided in the new "OS/2" entries. Usually,
proper optical size specific font would be selected automatically based
on the font size determined by the user.
3) NameID 27: Size name.
This may be helpful for applications which want expose an optical size
name in the UI so users can choose an optical size manually.
The "OS/2" specification for "usLowerOpticalPointSize" and
"usUpperOpticalPointSize" needs to refer to the "name" specification for
NameIDs 25–27, and vice versa.
b)
Extend the OpenType specification's recommendations, either directly in
the "name" table specification or in the Recommendations document, to
make sure type designers and font makers do not get overwhelmed by so
many name table records to deal with.
In the end, font naming remains simple. One may get away with using as
few as two or – if a family serves optical sizes – three pairs of
family/style records. All one needs to do is stick to a few
recommendations or guidelines:
1) Set up the family such that NameID 17 is WWS-conformant right away.
Any style parameter outside WWS must be part of NameID 16.
-> That way NameIDs 21 and 22 can be omitted right away.
2) Since only Regular/Bold/Italic/BoldItalic are accepted in NameID 2,
anything in NameID 17 which is not one of these four will move to NameID
1. Note: This includes fancy style names!
3) Even though Microsoft's WWS-mechanism allows having both Italic and
Oblique styles in fonts, do not do this. Make Italic and forget about
Oblique.
Only if optical sizes are involved:
4a) Exclude optical size name additions from new NameIDs 25 and 26.
-> Up-to-date font engines know that it is new "OS/2" entries that make
the difference.
4b) Include optical size name additions in NameIDs 1 and 2 and NameIDs
16 and 17. (And in NameIDs 21 and 22 if present, but again, try to avoid
them.)
-> Old font engines that don't know about new "OS/2" entires simply sees
a different(ly
named) family per each optical size range.
Fancy style names:
5) Avoid fancy style names as they are – obviously – not WWS conformant.
See 2) in case you cannot avoid them.
c)
[Please use monospaced font for what follows.]
Example:
| range | ID 24 | ID 25 | ID 26 || ID 16 | ID 17
|| ID 1 | ID 2 |
|-------|--------|-----------------|-------||-------------|-----------------||------------------|---------|
| 0- 8 | MyFont | Regular | Note || MyFont Note | Regular
|| MyFont Note | Regular |
| 9-13 | MyFont | Regular | Text || MyFont Text | Regular
|| MyFont Text | Regular |
| 14-x | MyFont | Regular | Head || MyFont Head | Regular
|| MyFont Head | Regular |
|-------|--------|-----------------|-------||-------------|-----------------||------------------|---------|
| 0- 8 | MyFont | Italic | Note || MyFont Note | Italic
|| MyFont Note | Italic |
| 9-13 | MyFont | Italic | Text || MyFont Text | Italic
|| MyFont Text | Italic |
| 14-x | MyFont | Italic | Head || MyFont Head | Italic
|| MyFont Head | Italic |
|-------|--------|-----------------|-------||-------------|-----------------||------------------|---------|
| 0- 8 | MyFont | SemiBold | Note || MyFont Note | SemiBold
|| MyFont SmBd Note | Regular |
| 9-13 | MyFont | SemiBold | Text || MyFont Text | SemiBold
|| MyFont SmBd Text | Regular |
| 14-x | MyFont | SemiBold | Head || MyFont Head | SemiBold
|| MyFont SmBd Head | Regular |
|-------|--------|-----------------|-------||-------------|-----------------||------------------|---------|
| 0- 8 | MyFont | SemiBold Italic | Note || MyFont Note | SemiBold
Italic || MyFont SmBd Note | Italic |
| 9-13 | MyFont | SemiBold Italic | Text || MyFont Text | SemiBold
Italic || MyFont SmBd Text | Italic |
| 14-x | MyFont | SemiBold Italic | Head || MyFont Head | SemiBold
Italic || MyFont SmBd Head | Italic |
|-------|--------|-----------------|-------||-------------|-----------------||------------------|---------|
What you get in applications' font menus:
i) Application is aware of sizes:
MyFont > Regular
Italic
SemiBold
SemiBold Italic
No size info mentioned since choice is made automatically by the
application.
ii) Application is aware of sizes, designer software:
MyFont > Regular
Italic
SemiBold
SemiBold Italic
Optical sizes are offered in a separate popup. (Greyed out with non-size
font families.)
If NameID 26 is not defined in "name", use "OS/2" size range as a name,
turning it into a string like "8–12".
iii) In oldstyle applications, aware of Typographic names:
MyFont Note > Regular
Italic
SemiBold
SemiBold Italic
MyFont Text > Regular
Italic
SemiBold
SemiBold Italic
MyFont Head > Regular
Italic
SemiBold
SemiBold Italic
New "OS/2" entries are ignored.
iv) In legacy applications, not aware of Typographic names:
MyFont SmBd Note > Regular (default)
Italic (via "I" button)
MyFont SmBd Text > Regular (default)
Italic (via "I" button)
MyFont SmBd Head > Regular (default)
Italic (via "I" button)
MyFont Note > Regular (default)
Italic (via "I" button)
MyFont Text > Regular (default)
Italic (via "I" button)
MyFont Head > Regular (default)
Italic (via "I" button)
New "OS/2" entries are ignored.
* * *
While I sympathize with the idea of coming up with a completely new way
of identifying fonts, the damage has been done already when rushing to
specify half the thing. Designers who feel tempted to make use of these
new "OS/2" entries will by definition produce buggy fonts. For this
reason, I think, a backward compatible solution needs to be presented
sooner rather than later.
Best wishes,
Karsten Lücke
More information about the mpeg-otspec
mailing list