Sirs,
I find the definition of compound datatypes very confusing. Fom an
implementation point of view, I find myself treating the compound
types not as datatypes but as another form of shorthand, whose major
difference from the existing shorthand properties is in the handling
of inheritance.
"Shorthand properties do not inherit from the shorthand on the
parent. Instead the individual properties that the shorthand expands
into may inherit." 5.2
On the other hand, 5.11 has: "Compound values of properties are
inherited as a unit and not as individual components."
In other respects, compounds parallel shorthands. "The compound
datatypes, such as space, are represented in the result tree as
multiple attributes." In other words, the compounds expand into
individual properties, like the shorthands.
It seems to me that when talking about a datatype, one expects to be
specifying the kind of data that may be assigned to particular
attributes/properties. Compounds are not datatypes in that sense.
They partially specify the name of the attribute, and specify the type
of data which may be assigned to those attributes. In my limited
experience, I have never encountered such a datatype before, and I was
very confused by them.
<length-conditional>
I have a few specific questions about this compound. It occurs in
association with the relative edge width specifications for border and
padding, and in a few other places.
When the compounds are discussed, the examples of <space> and <keep>
are used. In those cases, a single assignment to the compound implies
a series of assignments to each of the component properties. So
space-before="4.0pt"
is equivalent to a specification of
space-before.minimum="4.0pt"
space-before.optimum="4.0pt"
space-before.maximum="4.0pt"
space-before.precedence="0"
space-before.conditionality="discard"
Similarly with <keep>.
What about border-before-width? The legal values for
border-before-width are specified as
<border-width>|<length-conditional>|inherit
<border-width> is defined in 7.7.21 "border-top-width" to have the
possible values "thin", "medium", "thick" or <length>.
<length-conditional>, as is explained in 7.7.9 "border-before-width",
has .length and .conditionality components, with an initial value for
.conditionality of "discard". However, according to Appendix C, the
initial value for border-before-width is "medium". There is no
mention of .conditionality.
Given these definitions, what am I to make of an assignment like
border-before-width="10pt"? Is this a <border-width> or a
<length-conditional>? To what do I assign the "10pt"?
border-before-width or border-before-width.length or both? Does any
such assignment to border-before-width imply an assignment to
border-before-width.length and border-before-width.conditionality as
well?
This question is more involved because of corresponding properties.
In an lr-tb environment, border-top-width is a corresponding
property. But <length-conditional> is not defined for
border-top-width. Does the fact that computed values percolate to
corresponding properties imply that
border-top-width="10pt"
will have the effect of setting computed values of
border-top-width="10pt"
border-before-width="10pt"
border-before-width.length="10pt"
border-before-width.conditionality="discard"
?
Similar questions may well arise in respect of other compound
"datatypes".
Yours faithfully,
Peter West
--
Peter B. West pbwest@powerup.com.au http://powerup.com.au/~pbwest
"Lord, to whom shall we go?"