- From: fantasai <fantasai.lists@inkedblade.net>
- Date: Wed, 24 Mar 2010 01:12:14 -0700
- To: Bert Bos <bert@w3.org>
- CC: W3C Emailing list for WWW Style <www-style@w3.org>
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.)
> (The spec is not worded very well with respect to 'default'
> and 'initial', implying that it is somehow obvious that they are
> reserved, although it is only obvious if you've read CSS3 Values And
> Units...)
(This should have been addressed in the last publication.)
~fantasai
Received on Wednesday, 24 March 2010 08:12:49 UTC