Re: [css3-values] proposal for handling division and units in calc() [ACTION-205]

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