Re: [RFC] target font model on Freedesktop systems

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Le mercredi 24 juillet 2019 à 14:37 +0200, Kevin Kofler a écrit :

Hi, Kevin

Thank you for taking the time to answer,

> Nicolas Mailhot wrote:
> > 2. fontconfig strives to hide all the legacy ways to designate
> > different
> > parts of this ideal font, and strives to expose a single "font"
> > objet no
> > matter what quirks exist in individual font files. We stop exposing
> > lots
> > of weird quirky bits right and left, that need manual assembling by
> > users, or glue-ing with TEX macros.
> > 
> > No foo variable, foo hebrew, foo narrow, foo caption, just a single
> > foo
> > with different available features (full variability or fixed states
> > on
> > the default axis, real upstream provided states or fakes generated
> > by
> > fontconfig at pango’s request[5], etc)
> 
> While such a model sounds really nice in theory, especially if
> missing 
> variants can be synthesized (e.g., automatic slanting to provide
> italic 
> versions where no native one is available), I am worried about some
> of the 
> practical implications:

Those are all real problems, but not directly related to the proposal.

The core of the proposal is agreeing to expose existing font file
capabilities to apps and users in an uniform way, instead of blindly
relaying whatever custom capability ID mix each font project came up
with.

>From an end-user point of view that manifests as applying uniform font
naming conventions. But, that also has consequences on the way we
structure fontconfig config files, on API design between font-using
libs, where we split font packages, how we present them in software
catalogs, etc

It will not magically add missing coverage to font files. As you
pointed out we already have fonts where narrow has less coverage than
bold italic for example. We also have fonts were coverage regressed
after updates (Cantarell dumped cyrillic some years ago for example; it
sucked to have existing Russian documents using Cantarell).

It will not magically add good font selectors to all apps. We’ve been
shipping DejaVu Sans as one of our main font families for a dozen year
at least and some apps have still not bothered with a font selector
able to handle it.

It will be surprising to humans, that expect everything to be neat and
tidy. Things have not been neat and tidy for quite a long time fonts-
side. It’s obscured by the naming mess in current fonts, if we fix the
mess the un-tidiness will become obvious to everyone.

Yet, breaking (bad) habits is sometimes necessary. People objected
stridently to fontconfig, because it enabled substituting missing
glyphs, and that was breaking their mental model. Now even Microsoft is
doing it in Windows. 

Humans will just have to get used that, a clean convenient uniform
naming, does not imply that the font file themselves are free of holes,
that different faces of a font may have different coverage levels. We
can fix the naming at the lib level we can not fix the coverage, except
by substitution and interpolation. It’s no different from how migration
to vector fonts was managed twenty years ago. Vector and bitmap fonts
appeared the same in selectors. Vector fonts allowed selecting any size
you wanted, bitmap fonts only a specific subset.

While synthesis is an obvious next step (after all variable fonts are
just interpolating internally between fixed points) it is not included
in the proposal.

The proposal is just to agree on a common exposition format, regardless
of the mess original font files are, regardless of the mess the app-
side of font handling is. If you want to be fancy you can decline the
exposition format at several levels of tech (pretend everything is
Postscript, with a single face per font, pretend everything is first-
gen TrueType, with just Normal/Bold/Italic/Bold Italic, pretend
variability does not exist, etc). That‘s for fontconfig maintainers to
decide. (IMHO, it’s pretty pointless to add fake old-style naming APIs
to fontconfig, apps that won't bother supporting new fonts, are not
going to use new API calls, even to keep in the past.)

Agreeing on a common exposition format, at the fontconfig level, means
that interested apps target this format in their devs, instead of
waiting for the font catalog to magically become coherent (it never has
been and never will be).

It means that users do not have to remember "I want to write in
Syldavian script, in A font it’s included in “A Syldavian”, in B font
it’s in “B not-Bordurian”, in C font it’s directly named C, except for
last year’s C where it was stashed in C phantasyeuropean. And app X
names them all some way, and app Y another way."

With an uniform exposition format fontconfig collects all the A B and C
fragments available and presents them as A B or C, hiding the mutable
fragment names.

If it is not handled at the fontconfig level, workarounds will start
appearing at app or lib level. Or, we'll have more and more of
proposals like “make variability work for noto in pango, let other
fonts libs and apps fend for themselves”.

And getting it all done right is years of work at all levels of the
text stack. Some fonts will get fixed faster. Some apps and libs will
take advantage of the result before others. Some wierd corner case will
take a lot of time to get right (I think fontconfig is still adding
bitmap-related quirks for example).

But, it won’t get done faster if we don’t agree now on the end target.

One thing the last decade convinced me of, it that neither font
projects, nor apps, are going to handle us this target on a platter. It
needs to be driven by fontconfig and integrators.

Regards,

-- 
Nicolas Mailhot
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux