Re: [css3-fonts] font-variant-numeric

On 03/24/2010 06:57 PM, John Daggett wrote:
> fantasai wrote:
>
>> I'm not sure what you're getting at here. They should both be invalid, because
>> lining-nums and oldstyle-nums are mutually exclusive.
>>
>> Meaning, font-variant's grammar should be rewritten as
>>
>> normal | inherit | [<ligature-values>  ||<alternates-values>  ||<caps-value>
>>                      ||<numeric-values>   ||<east-asian-variations>  ]
>
> That has the downside that this would be invalid:
>
>    font-variant: oldstyle-nums additional-ligatures slashed-zero;
>
> This is because 'oldstyle-nums' and 'slashed-zero' are both from the
> <numeric-values>  production.
>
> Stated generally, I don't think the double-bar operator used in CSS
> grammar rules is associative:
>
>    (a || b) || c  !=  a || (b || c)
>
> In one case 'c a b' would be valid, in the other not.

Hm, that's a good point. The shorthand would need a more expanded-out
grammar to make that work.

> I guess one solution would be to simply expand out the full list of
> mutually exclusive properties but I think there's still a risk that
> cutting-and-pasting authors could accidently introduce invalid
> font-variant strings.  My initial grammar simply allowed multiple
> mutually exclusive values in the syntax and resolved it at use, with
> the later value taking precedence.

I don't think it makes sense to allow mutually exclusive values in the
syntax and then ignore one of them. We overwrite earlier declarations
with later declarations, but I don't know of any other property in which
an earlier *value* is ignored when overwritten by a later value in the
same declaration. I'd rather make it invalid, so that the author has a
clue that something's not quite right (because the UA throws out the
whole rule) and so that the validator can catch what's almost certainly
an authoring error.

~fantasai

Received on Thursday, 25 March 2010 17:53:09 UTC