- From: L. David Baron <dbaron@dbaron.org>
- Date: Mon, 9 Aug 2010 17:12:07 -0700
- To: Håkon Wium Lie <howcome@opera.com>
- Cc: www-style@w3.org

On Tuesday 2010-08-10 01:05 +0200, Håkon Wium Lie wrote: > Also sprach L. David Baron: > > > > 4. Leaf values inside a calc() expression must all be either (a) > > > > numbers or (b) legal values for the property, or things that > > > > would be legal values if it weren't for range restrictions (such > > > > as the restriction that 'width' accepts only positive values). > > > > > > How about percentages? > > > > Percentages should be accepted when they are allowed values for the > > property, just like any other units. > > That works for percentages. However, we must somehow prohibit keywords > and such from being accepted, e.g.: > > calc(inherit) > > I'd like to see the text quoted above (as 4.) merged with this text: > > The semantic constraints are as follows: The context of the > expression imposes a <em>target type</em>, which is one of length, frequency, > angle, time, or number. Any PERCENTAGE token in the expression has the > target type. The NUMBER tokens are of type number, and the DIMENSION > tokens have types of their units ('cm' is length, 'deg' is angle > etc.). At each operator, the types of the left and right side have to > be compared and, if compatible, they yield a <em>result type</em>, roughly as > follows (the following ignores precedence rules on the operators for > simplicity): > > But I think you can do it better than me. How about replacing this portion of the above paragraph: The context of the expression imposes a target type, which is one of length, frequency, angle, time, or number. Any PERCENTAGE token in the expression has the target type. The NUMBER tokens are of type number, and the DIMENSION tokens have types of their units (‘cm’ is length, ‘deg’ is angle etc.). with: The context of the expression imposes a target type, which is one of length, frequency, angle, time, or number. NUMBER tokens are of type number. DIMENSION tokens have types of their units (‘cm’ is length, ‘deg’ is angle etc.); any DIMENSION whose type does not match the target type is not allowed and must be a parse error. If percentages are accepted in that context and convertible to the target type, a PERCENTAGE token in the expression has the target type; otherwise percentages are not allowed and must be a parse error. And then adding, below, the following two paragraphs: The value resulting from an expression must be clamped to the range allowed in the target context. For example, 'width: calc(5px - 10px)' is equivalent to 'width: 0px' since widths smaller than 0px are not allowed. Note: Except for range restrictions, all values allowed inside an expression are either numbers or values that are permitted in the context of the expression. -David -- L. David Baron http://dbaron.org/ Mozilla Corporation http://www.mozilla.com/

Received on Tuesday, 10 August 2010 00:12:51 UTC