- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Wed, 24 Mar 2010 08:45:56 -0700
- To: fantasai <fantasai.lists@inkedblade.net>
- Cc: Bert Bos <bert@w3.org>, W3C Emailing list for WWW Style <www-style@w3.org>
On Wed, Mar 24, 2010 at 1:12 AM, fantasai <fantasai.lists@inkedblade.net> wrote:
> On 04/22/2009 06:43 AM, Bert Bos wrote:
>>
>> On Tuesday 21 April 2009, Zack Weinberg wrote:
>>>
>>> Mozilla has a bug report[1] requesting that this:
>>>
>>> font-family: "lucida" grande;
>>>
>>> be treated as equivalent to this:
>>>
>>> font-family: lucida grande;
>>>
>>> There is no formal grammar for<family-name> and the prose does not
>>> say whether some-but-not-all tokens of a family-name can be quoted.
>>> Matter of fact, it doesn't really explain what the grammar is at all
>>> - it just says that certain punctuation characters must be \-escaped
>>> if they appear unquoted in a family-name.
>>>
>>> My preferred reading of the spec would disallow partial quotation,
>>> but what I really care about as an implementor is that there be an
>>> unambiguous, ideally formal, grammar for every nonterminal.
>>
>> Partially quoted names were not among the original use cases. Maybe it's
>> possible to read the spec as syntactically allowing them, but it
>> certainly doesn't define what they mean.
>>
>> The intent can, I think, be captured by this annotated grammar:
>>
>> Value: [ [<family-name> |<generic-family> ] [ ,<family-name> |
>> <generic-family> ]* ] | inherit;
>> <generic-family>: serif | sans-serif | cursive | fantasy | monospace;
>> <family-name>: STRING | IDENT+; /* see restriction below */
>>
>> where the restriction is that<family-name> cannot be one of the single
>> IDENTs serif, sans-serif, cursive, fantasy, monospace, inherit, default
>> or initial.
>
> Proposed changes:
>
> Replace the paragraphs
> # If an unquoted font family name ... converted to a single space.
> with the following text:
>
> | Font family names must either given quoted as strings_, or unquoted as
> | a sequence of one or more identifiers_. This means most punctuation
> | characters and digits at the start of each token must be escaped in
> | unquoted font family names.
> |
> | For example, the following declarations are invalid:
> |
> | font-family: Red/Black, sans-serif;
> | font-family: "Lucida" Grande, sans-serif;
> | font-family: Ahem!, sans-serif;
> | font-family: test@foo, sans-serif;
> | font-family: #POUND, sans-serif;
> | font-fmaily: Hawaii 5-0, sans-serif;
> |
> | If a sequence of identifiers is given as a font family name, the
> | computed value is the name converted to a string by joining all the
> | identifiers in the sequence by single spaces.
> |
> | To avoid mistakes in escaping, is recommended to quote font family
> | names that contain white space, digits, or punctuation characters
> | other than hyphens:
> |
> | body { font-family: "New Century Schoolbook", serif }
> | <BODY STYLE="font-family: '21st Century', fantasy">
> |
> | .. `strings`: http://www.w3.org/TR/CSS21/syndata.html#strings
> | .. `identifier characters`:
> http://www.w3.org/TR/CSS21/syndata.html#characters
>
> (I would also suggest tucking the whole thing under the <family-name>
> type definition.)
>
> Note that this changes the prose to be more in line with the Appendix G
> grammar, and thus introduces additional constraints that were not in the
> prose before. Most of them are already honored by a majority of the UAs,
> though. (Arron and I checked.)
I approve. Seems very clear.
~TJ
Received on Wednesday, 24 March 2010 15:46:52 UTC