- From: Adam Twardoch (List) <list.adam@twardoch.com>
- Date: Thu, 20 Jun 2013 06:01:40 +0200
- To: "public-webfonts-wg@w3.org" <public-webfonts-wg@w3.org>
Dear list members,
Here's my proposal for what I call OFF/X -- "open font format for
exchange".
== INTRO: SPRING CLEANING ==
In the following, I'll be using SFNT as an umbrella term for all font
formats and specs which are hosted in the "sfnt" data structure (ISO
OFF, OpenType, TrueType, TrueType AAT, etc. etc.).
A web font technical profile is a set of recommendations that aims to
create a formalized subset of various aspects of the SFNT font format
which are allowed, recommended, deprecated and disallowed within that
profile. As an analogy, the ISO PDF/X is a standardized subset of the
PDF format that acts similarly. Some PDF files conform with PDF/X,
others doesn't.
SFNT (just like PDF) is a "large" format, which is very extensible, but
also has evolved over many years. There is a number of standards that
define aspects of it (the ISO OFF spec, the OpenType spec, the TrueType
spec, plus vendor-specific extensions). Some tables are mandatory,
others optional. Many tables have evolved in terms of version numbers,
there is a number of subformats for many tables, and some of them are
better supported or less well supported. On top of that, there are many
provisions in the current specs which exist due to legacy reasons --
most famously, the OpenType spec makes many provisions which allow the
fonts to be compatible with the old Windows GDI subsystem which dates
back to Windows 3.1.
Backwards compatibility has its good reasons in the desktop font world.
There is a tremendous number of environments on which SFNT fonts can be
deployed, and many operating systems, graphic rendering subsystems and
libraries, and applications, that rely on this or that aspect of the
OpenType font to behave this or that way. Some of these environments are
"out there", but will never be revisited, extended, changed.
With the OFF/X proposal, I'd like to see some big "spring cleaning"
happen. When looking for a real-life analogy, the most effective spring
cleaning you can do is when you move from one apartment or house to
another. When you put all things together into a box, and then you
unpack them in the new place, and arrange everything anew -- this gives
you the best opportunity to throw things away. (Or leave them in the
boxes unpacked and stow away in the garage -- which is effectively the
same thing).
Using this analogy for the font world: the best opportunity to do
"spring cleaning" is when we change container formats.
Historically, the SFNT fonts started as an "sfnt" resource inside of the
resource fork of an Apple font file.
SFNT fonts then went on through several container format changes. Some
of the changes only involved the change of the file extension, others
involved some larger changes. The most significant changes that are
still relevant today were:
1. Original "sfnt" resource in an Apple font file
2. TTF: The "Windows TrueType font file" which later became the
"TrueType-flavored OpenType font file"
3. OTF: The "CFF-flavored OpenType font file"
4. WOFF: The "Web Open Font Format file"
Especially when you look back at the moment when OTF was introduced, I
think it proves my point that the change of a container format is a good
chance to clean things up. For example, "out in the world", we can still
find TTF files with the OS/2 table version 1, while the majority of OTF
fonts have OS/2 table version 3 or 4. Same goes for WOFF, albeit for
somewhat different reasons (Google's OT sanitizer library, which, among
others, rejected some malformed SFNT fonts which would otherwise work
fine on desktop systems).
One key factor in this is that the change of a container format involves
"touching" the font file, i.e. converting them into the new format using
some kind of tool. Font manipulation tools get updated, so whenever we
come to a point that we need to convert some old fonts into a newer
container format, it often happens that the updated tool enforces some
upgrades and cleaning. But if the old container format (such as TTF) is
still supported, there is no need to "touch" the font files, i.e. no
need to convert, upgrade or clean.
== WOFF AS A CHANCE ==
The WOFF container is still relatively new, and we're now working on
WOFF 2.0. So there will be chances, once again, to convert (and
therefore also upgrade and clean) much of the old font data. So we could
use this opportunity to create a new set of recommendations for what
should exist inside the WOFF. Since WOFF is primarily used by web
browsers, there is also a much greater chance that the recommendations
we propose will be actually honored -- because there is a much more
limited number of web browsers than there are desktop environments.
And, since we're talking about recommendations for a NEW container
format, only the web browsers that are actively maintained need to be
concerned. "Dead meat" environments like, say, Netscape Navigator
running on Windows 95, or even Internet Explorer 7 running on Windows
XP, can be disregarded, since they won't understand the new container
format.
== OFF/X:2014 -- OPEN FONT FORMAT FOR EXCHANGE, 2014 VERSION ==
So I'd like us to start thinking about what aspects of the SFNT contents
could be formulated in a stricter way. While those recommendations could
primarily target WOFF, they don't need to be "tied hard" to it.
Developers of new desktop environments, or font creation tools, could
also use them as a reference. This is why I've tentatively called my
proposal "open font format for exchange", or OFF/X in short, taking a
clue from PDF/X in relation to PDF.
The first iteration of the OFF/X recommendation could be named
OFF/X:2014 (if we publish it in 2014 :D ), taking a clue from the ISO
way of denoting the versions using a year number after a colon. This
terminology would have the advantage that desktop fonts (in the OTF and
TTF containers) which comply with the recommendations could be referred
to as "OFF/X:2014", while web fonts that would comply could be named
"WOFF/X:2014".
The OFF/X:2014 recommendation would refer to the ISO OFF spec as its
basis, and on top of that define stricter rules as for what should be
inside the SFNT tables.
The WOFF/X:2014 recommendation would simply refer to the OFF/X:2014
recommendation for the contents, plus to the WOFF spec current at that
time (say, WOFF 2.0) for the WOFF container format. In addition,
perhaps, WOFF/X:2014 could contain some stricter rules as for the WOFF
metadata etc.
== TENTATIVE OFF/X SPECIFICS ==
Below are some issues which spontaneously come to my mind which could be
included in OFF/X. This is just an initial idea, and should be debated,
edited, extended.
== Nature of OFF/X ==
I think each item within OFF/X should define the requirement level. I
propose to adopt the widely accepted RFC 2119 for reference:
http://www.ietf.org/rfc/rfc2119.txt for the distinction between MUST,
MUST NOT, SHOULD, SHOULD NOT etc. I think there will be value in
defining both "strong" and "soft" requirements. Any font vendor or
browser vendor may choose to comply with OFF/X, and of course fonts
which not comply with OFF/X shall still work.
I think the OFF/X should state that web browsers which choose to comply
with OFF/X *MUST* support fonts which are OFF/X-compliant, but they can
also continue to support fonts which are not OFF/X compliant.
There probably need to exist two kinds of requirements:
* for the fonts (what kind of data a font must or should or must not or
should not contain)
* for the clients (e.g. which data must be used if some redundant data
cannot be removed)
== Choice of the Layout Model ==
Within SFNT, there is a number of valid Layout Models. My own
categorization of what's currently relevant is as follows:
a) TrueType: the original TrueType layout model i.e. the "kern" table as
currently defined in the OFF spec
b) OpenType: the OpenType layout model that relies on GSUB, GPOS, GDEF,
BASE, JSTF
c) AAT: the Apple-made extensions to the TrueType layout model that rely
on mort, morx, feat, extended kern, kerx etc.
d) Graphite: the SIL-made layout model
e) Microsoft MATH: mathematical layout model that relies on the MATH
table along with OpenType Layout tables
[OFF/X] My proposal is that an OFF/X:2014 font:
1. MUST use the OpenType Layout model (-> describe more specifically)
2. MUST NOT contain the "kern" table
3. (?) MUST NOT contain any tables from the AAT, Graphite or Microsoft
MATH layout models (-> list explicitly)
This certainly is a political decision, but since the CSS Fonts 3 spec
explicitly relies on the OT Layout system for --font-feature-settings, I
think it's the right call. Of course font vendors can continue to build
fonts with other layout systems -- and web browsers can support them at
their discretion. The main point is, however, that ALL web browsers
should support AT LEAST OFF/X fonts. Whether a web browser supports
anything else, is at the web browser maker's discretion.
== Choice of the Rendering Model ==
The way I see it, within SFNT, there are three major categories as how
to past, current and future Rendering Models can be categorized:
* static vs dynamic glyphs
* monochrome vs color glyphs
* outline vs bitmap glyphs
Here's a rundown of examples of different more-or-less relevant
Rendering Models and how they fit into each category. Each example
describes where the glyphs are sourced from:
a) only the glyf table as described by OpenType spec version 1.6: static
monochrome outline
b) only the CFF table as described by OpenType spec version 1.6: static
monochrome outline
c) the glyf table plus Apple-defined fvar, gvar tables: dynamic
monochrome outline
d) the CFF table as per OpenType spec version 1.2 or earlier plus from
fvar, MMSD, MMFX tables: dynamic monochrome outline (this is now removed
from the OpenType spec)
e) the bdat, bloc or EBDT, EBLC, EBSC tables: static monochrome bitmap
(typically used in combination with (a))
f) the Apple-defined sbix table: static color bitmap (not published but
supported in Mac OS X 10.7+ and iOS)
g) the Google-defined CBDT, CBLC tables: static color bitmap (published,
some initial support in Chrome)
h) the Mozilla-defined SVG table: static (?) color outline (published,
some initial support in Firefox)
i) the OpenType SVG WG proposal: dynamic (?) color outline (doesn't
really exist yet, may embrace the Mozilla proposal)
[Note: My personal view is that one of the dynamic monochrome outline
models ("MM" or "gvar") has great potential and should be resurrected.
But that's a wholly another subject matter, on which I'll send another
e-mail around, with the subject line "Idea: MM webfonts resurrection?".]
[OFF/X] My proposal is that an OFF/X:2014 font:
1. MUST use one of the static monochrome outline Rendering Models (glyf
table only or CFF table only), as those are the only ones which are
stable and widely supported.
2. MUST NOT use any other Rendering Model (-> list SFNT tables which are
DISALLOWED).
== Specific recommendations per SFNT table ==
This is very draft, and should be widely debated.
* Disallowed tables: PCLT (-> more to be added)
* cmap table
1. MUST use Unicode as its only character encoding
2. If the font supports Unicode codepoints >U+FFFF, MUST NOT contain
subtables other than PID 3 EID 10.
3. If the font only supports Unicode codepoints <U+FFFF, MUST NOT
contain subtables other than PID 2 EID 1.
4. -> Some recommendations regarding the PUA with relation to OTL.
Effectively, all situations like cmap 3.0, cmap 1.0, cmap 0.3, cmap 4.x
or cmaps 3.10 and 3.1 at the same time are DISALLOWED.
* post table
MUST use post table format 3.0.
* OS/2 table
1. MUST use version 4
2. fsSelection bit 7 must be =1.
3. fsSelection bit 8 must be =1 and the font's naming must be
WWS-compatible.
4. fsSelection bits 1, 2, 3, 4, 9 must be =0.
5. -> Some recommendations for usWeightClass/usWidthClass fields, and
the usWeightClass<250 mess should be cleaned up!
* name table
1. MUST NOT contain entries for PID/EID other than 3.1.
2. -> Some additional recommendations, which could be a bit "brave"
* OTL tables (GSUB, GPOS, JSTF)
** OTL script tags
1. MUST NOT use the script tags: beng, deva, gujr, guru, knda, mlym,
orya, taml, telu
2. MUST use one of the tags specified in -> the appropriate list
** OTL language tags
1. MUST NOT use the language tags: DHV
2. MUST use one of the tags specified in -> the appropriate list
** OTL feature tags
-> DISALLOW some unreasonable feature tags which these days should be
obsoleted (like mgrk(?))
* -> Something to be done with linespacing values in OS/2 and hhea
* -> Something for clients how to deal with redundant styling or
linespacing data etc.
...and possibly many more recommendations which will make the OFF/X:2014
format stricter, get rid of legacy stuff and eliminate as many
redundancies as possible.
All-right... So that's that from me so far. Comments welcome :)
Best,
Adam
--
May success attend your efforts,
-- Adam Twardoch
(Remove "list." from e-mail address to contact me directly.)
Received on Thursday, 20 June 2013 04:02:09 UTC