- From: fantasai <fantasai.lists@inkedblade.net>
- Date: Wed, 24 Mar 2010 14:31:22 -0700
- To: Bert Bos <bert@w3.org>
- CC: W3C Emailing list for WWW Style <www-style@w3.org>
On 03/24/2010 11:08 AM, Bert Bos wrote: > A recapitulation of the thread from last year: > > Zack asked what tokens exactly were allowed in 'font-family'. I replied > that I thought the intent was to allow either a string or a sequence of > identifiers. Fantasai wondered if that wasn't too limited, seeing that > the existing wording in the spec seemed to assume more. > > The thread was interrupted there, but I think she was right. CSS1 didn't > restrict the tokens at all, except for commas and white space. And the > 1998 version of CSS2 seems to only contain text that attempts to explain > the syntax, rather than restrict it. > > Originally, the design goal was that as much as possible quoting should > be avoided, so that a font name inside a STYLE attribute would not need > a double pair of quotes. ... > > Names consisting of either a single string or a sequence of identifiers > work in the sample of browsers and other programs I tested. But there > doesn't seem to be much consistency in the handling of other tokens. > > Nevertheless, given that there are a number of fonts with names that > include a number (Univers 55, 1942 Report, etc.), I'd like to allow at > least those. (We unfortunately can't allow something like "Font No. 1" > without quoting, because the dot would get detached from the "No.") I think you have a good point: I think it would be surprising to authors (it was to me when I was writing up the implications of Zack's grammar) that digits at the start of a token would need quoting or escaping. Here's an alternate proposal that allows numbers anywhere, but preserves the other identifier restrictions: 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 tokens composed of `identifier characters`_. | This means most punctuation characters 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; | | And the following declarations are valid: | | font-family: Hawaii 5-0, sans-serif; | font-family: Univers 55, sans-serif; | font-family: 1942 Report, monospace; | font-family: -3 Degrees, fantasy; | | If a sequence of unquoted tokens 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 or punctuation characters other than | hyphens: | | body { font-family: "New Century Schoolbook", serif } | <BODY STYLE="font-family: '3.14 Pie', fantasy"> | h1 { font-family: 'Etc.', serif; } | | .. `strings`: http://www.w3.org/TR/CSS21/syndata.html#strings | .. `identifier characters`: http://www.w3.org/TR/CSS21/syndata.html#characters Note that this imposes some tricky parse restrictions, since we don't have a token representing {nmchar}+. ~fantasai
Received on Wednesday, 24 March 2010 21:32:00 UTC