W3C home > Mailing lists > Public > www-font@w3.org > July to September 2009

Re: [css3-fonts] Comments on @font-face: local(...)

From: Thomas Phinney <tphinney@cal.berkeley.edu>
Date: Thu, 20 Aug 2009 21:01:28 -0700
Message-ID: <f49ae6ac0908202101m4c1ba01n7e86993ce9fb1e3f@mail.gmail.com>
To: John Daggett <jdaggett@mozilla.com>
Cc: Erik Dahlström <ed@opera.com>, W3C Style List <www-style@w3.org>, www-font@w3.org
I am of course a broken record on this issue, but...

Why deal with locale-based differences in font family and style names,
but not platform-based differences?

I am still perturbed that a font is family = "Glurbish Light" and
style = "Bold" in Windows GDI but family = "Glurbish" and style =
"Semibold" on Mac OS X, and I think it's a problem. It can be solved
either partially or completely (depending on how ambitious and complex
one wants to be) if there's a spec for what user agents are supposed
to do across platforms.

Regards,

T

2009/8/20 John Daggett <jdaggett@mozilla.com>:
> Erik Dahlstrom wrote:
>
>> Yes I see from the definition of <family-name> that there are special
>> rules for how to parse it when it's unquoted. I'm simply wondering if
>> that has any nasty consequences, take for example a family-name like
>> "}; * display: none;". That would be fine and wouldn't need either
>> escaping nor quotemarks?
>>
>> Allowing the string to contain ")" can probably also be confusing. Let
>> me rephrase my question: would allowing the unquoted and more-or-less
>> unrestricted strings cause problems for user agents that don't support
>> @font-face or would the error-handling rules of CSS take care of it?
>
> I see your point, I think it makes sense to define the syntax of the
> single name enclosed within local() to follow the rules for a single
> name within a font-family list, since font-family has the same set of
> problems with characters like }, ;, etc and since the whole reason for
> allowing quotes to be omitted is to match the use of font family names.
> It makes sense to explicitly define characters that need to be quoted to
> prevent problems on older platforms.
>
> There's still one very tricky internationalization issue here, more
> clearly defining non-English font name lookup, both for font family
> names and for names used in local().  Support for localized family name
> lookup across browsers is sketchy currently. With most Latin fonts this
> isn't an issue since the font data doesn't contain localizations of
> family names, Arial uses the same family name across locales.  But this
> is an issue for CJK fonts, some platforms only match localized family
> names when the OS and/or user locale is set to that locale, which leads
> to inconsistency across browsers/platforms.
>
> There's a similar issue with local() because style names are localized
> in *lots* of languages and the set of localized names often changes with
> font version (e.g. the font data for "Arial Bold" has localized
> fullnames "Arial Negreta", "Arial Gras", etc. and set of names is
> different on Win XP, Vista, Win7).  I think it makes sense to simply use
> the English name as the "canonical name" for local() lookup, since
> Microsoft suggests that OpenType fonts always contain this and allows
> English name lookup under all localized versions of Windows. This was
> discussed briefly at the CSS March F2F but I still haven't put clear
> wording into the spec.  Not the ideal from an internalization standpoint
> and it would be somewhat inconsistent with localized font family name
> usage but it would assure fewer hiccups across implementations/platforms.
>
>> Minor nit: I'd like it very much if all the definitions had id's and
>> were linked to from where they were used in the spec, one example is
>> the <family-name> production which is used from a bunch of different
>> places.
>
> Makes sense, I've been meaning to clean up internal links in the spec.
>
>> What about a case like this:
>>    @font-face { src: local(foo) }
>>
>> Does the spec forbid conforming UA:s from using that font since it
>> doesn't have a defined family-name in the @font-face rule? I couldn't
>> find such wording, though it is implied that that's the desired
>> behavior.
>
> Right, both font-family and src descriptors are required in @font-face
> rules; without properly formed font-family and src descriptors an
> @font-face rule is omitted completely.  The spec should state that more
> clearly.
>
> One ever so subtle ripple here is that even if the loading of all fonts
> listed in the src list fails, the font matching behavior does *not* match
> a situation where the @font-face rule is omitted.
>
>  @font-face {
>    font-family: BodyTextFont;
>    src: local(RegularFont), url(fonts/RegularFont.ttf);
>  }
>
>  body { font-family: BodyTextFont, Times, Georgia, serif; }
>
> If a given user happens to have a font with a family name "BodyTextFont"
> on their system it should *never* be used in the example above; either a
> locally available RegularFont or a downloaded version of Regular font
> will be used.  If both of these are available or fail to load, fallback
> to "Times, Georgia, serif" should occur.  The locally available version
> of BodyTextFont should *not* be used unless it is defined as the local
> version of serif or as a general default font.  Conversely, the use of
> BodyTextFont should not affect default font display except in cases
> where a user agent explicitly allows definition of serif and sans-serif
> via @font-face rules.
>
> Testcases for this:
> http://people.mozilla.org/~jdaggett/font-face/name-collision.html
> http://people.mozilla.org/~jdaggett/font-face/name-collision-bad-url.html
>
> No user agent currently does this correctly. :(  And the spec should
> probably have better wording and an example to illustrate this.
>
>>> Whether a local face or a downloaded face is used, this is a family
>>> with a single face, the style matching is the same in either case.
>>
>> That sounds good. Are you saying that it's fully defined by the font
>> matching algorithm in section 5? IMHO the wording is quite loose for
>> step 3, nothing there says how a font is "labeled" with particular
>> properties, would be nice if that could be made more explicit.
>
> Agreed, the font matching algorithm wording is definitely too loose
> currently and should explicitly note how synthetic rendering affects
> matching behavior.
>
>>> Fake slanting, double striking, these are all hacks. Synthetic faces
>>> suck, I take that as a given.  This is not confined to @font-face
>>> fonts, either local or downloaded, it's the same for normal platform
>>> fonts; they don't render the same across browsers.  Saying it's "not
>>> always possible" is wrong, it's just not always easy to coax API's to
>>> do what you want (oh I do so love Windows GDI). But I think
>>> differences in synthetic rendering of @font-face defined faces is
>>> completely under author control; define four faces for a given family
>>> and you'll never see synthetic rendering!!
>>
>> That's acceptable, how about adding an (informative) authoring note to
>> that effect in the spec?
>
> That sounds like a great idea.
>
> John Daggett
> Mozilla Japan
>
>



-- 
"Men occasionally stumble over the truth, but most of them pick themselves up
and hurry off as if nothing ever happened."
- Sir Winston Churchill
Received on Friday, 21 August 2009 04:02:13 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Saturday, 11 June 2011 00:14:03 GMT