- From: MURAKAMI Shinyu <murakami@nadita.com>
- Date: Sun, 24 Jun 2001 22:12:52 -0400 (EDT)
- To: xsl-editors@w3.org
I received from XSL WG the disposition of comments about:
- initial value of border/padding conditionality
- start-indent and end-indent
> Disposition of Comments on XSL Candidate Recommendation
>
> Comment 11 (public comment):
> lists.w3.org/Archives/Public/xsl-editors/2000OctDec/0177.html
>
> To: xsl-editors@w3.org
> From: MURAKAMI Shinyu <murakami@nadita.com>
> Message-Id: <200011270857.GGF08768.VBLNJSNB@nadita.com>
> Date: Mon, 27 Nov 2000 08:57:18 +0900
> Subject: XSL-FO - Initial value of border/padding conditionality
[snip]
> It lacks consistency!!! Why "retain" on before/after and "discard" on
> start/end?
>
> I believe that the initial value of the .conditionality should be
> "discard" on all edges.
[snip]
> Disposition: Accepted (clarification)
>
> This question was discussed at a joint XSL/CSS face to face meeting
> and it was agreed that, even though the CSS2 recommendation does not
> state the behaviour for blocks being split one should assume the same
> rules as for inlines. The initial values have been changed to
> "discard" as you request.
OK.
> Comment 20 (public comment):
> lists.w3.org/Archives/Public/xsl-editors/2001JanMar/0029.html
>
> To: xsl-editors@w3.org
> Cc: xsl-list@lists.mulberrytech.com
> From: MURAKAMI Shinyu <murakami@nadita.com>
> Message-Id: <200101100311.EDC35279.BSLVJNNB@nadita.com>
> Date: Wed, 10 Jan 2001 03:11:39 +0900
> Subject: XSL-FO - start-indent and end-indent
>
> I've found some problems of XSL-FO CR spec about start-indent and
> end-indent.
>
> Item 1
>
> Problem 1: Formulae for indents (indent=margin+padding+border?)
[snip]
> Case 1: Indents on nested blocks
[snip]
> Disposition: Accepted (bug in spec)
>
> The formula has been corrected by adding "inherited end-indent +" and
> "inherited start-indent +" respectively.
>
> Changed text in the XSL recommendation:
>
> start-indent = inherited_value_of(start-indent) + margin-corresponding
> + padding-corresponding + border-corresponding-width
>
> end-indent = inherited_value_of(end-indent) + margin-corresponding +
> padding-corresponding + border-corresponding-width
OK.
> Item 2
>
> Case 2: Indents on blocks without margin-corresponding specified
[snip]
> Disposition: Explanation of XSL spec
>
> In XSL you have to explicitly specify margin=0 in order for the indent
> to be computed from the margin value. start- and end-indents are
> inherited properties and the traits are the indents not the margins.
> The current text has been expanded to make the computation rules
> clearer.
>
> Changed text in the XSL recommendation:
>
> The "space-before", and "space-after" properties (block-level
> formatting objects), "space-start", and "space-end" properties
> (inline-level formatting objects) are handled in the same way as the
> properties immediately above, but the corresponding absolute
> properties are in the set: "margin-top", "margin-bottom",
> "margin-left", and "margin-right".
>
> There are two more properties, "end-indent" and "start-indent"
> (block-level formatting objects) which correspond to the various
> absolute "margin" properties. For these properties, the correspondence
> is more complex and involves the corresponding "border-X-width" and
> "padding-X" properties, where X is one of "left", "right", "top" or
> "bottom". The computed values of these corresponding properties are
> determined as follows:
>
> If the corresponding absolute "margin" property is specified on the
> formatting object and the formatting object generates a reference area
> the computed value of the margin is used to calculate the computed
> value of the corresponding "Y-indent" property, where Y is either
> "start" or "end". The formulae for "start-indent" and "end-indent"
> are":
>
> start-indent = margin-corresponding
>
> end-indent = margin-corresponding
>
Has the definition of start-indent and end-indent changed?
XSL CR spec said that the start-indent is the distance from the start-
edge of the content-rectangle of the containing reference-area to the
start-edge of the content-rectangle of that block-area.
It seems to have changed as:
When start-indent is applied to a formatting object that generates a
reference area, the start-indent value is the distance from the start-
edge of the content-rectangle of the containing reference-area to the
start-edge of the border-rectangle (NOT content-rectangle) of that
contained reference-area.
I think this change is reasonable. (but is it true?)
> If the corresponding absolute "margin" property is specified on the
> formatting object and the formatting object does not generate a
> reference area, the computed value of the margin and the computed
> values of the corresponding "border-X-width" and "padding-X"
> properties are used to calculate the computed value of the
> corresponding "Y-indent" property. The formulae for "start-indent" and
> "end-indent" are:
>
> start-indent = inherited_value_of(start-indent) + margin-corresponding
> + padding-corresponding + border-corresponding-width
>
> end-indent = inherited_value_of(end-indent) + margin-corresponding +
> padding-corresponding + border-corresponding-width
>
> If the corresponding absolute margin property is not explicitly
> specified the corresponding absolute margin property is calculated
> according to the following formulae:
>
> margin-corresponding = start-indent - inherited_value_of(start-indent)
> - padding-corresponding - border-corresponding-width
>
> margin-corresponding = end-indent - inherited_value_of(end-indent) -
> padding-corresponding - border-corresponding-width
>
> NOTE:
>
> If the "start-indent" or "end-indent" properties are not specified
> their inherited value is used in these formulae.
OK. But people who learnt CSS will make mistakes. It is necessary to
emphasize: When border or padding is used, the same layout as CSS cannot
be obtained if margin or indent is not explicitly specified.
<fo:block padding-left="1in">
This text is not indented. (different from CSS)
</fo:block>
<fo:block padding-left="1in" margin-left="0in">
This text is 1in indented. (like CSS)
</fo:block>
> Item 3
>
> Problem 2: Inherited start-indent and end-indent on reference areas
[snip]
> Disposition: Explanation of why no change will be made
>
> The design approach taken for XSL was to have a simple inheritance
> model. Making this change would obviously introduce an exception to
> this model. There are many other properties that one MIGHT not want to
> inherit from e.g. a table-and-caption to the content of the cells so
> why single out indent? If one, for example, wants to center a
> table-and-caption one specifies text-align="center" for the
> table-and-caption, which inherits to the cells.
>
> There are also cases where it is necessary to be able to use the value
> of an indent value in effect outside a reference area inside it. One
> example is for "CSS side floats" where the floated object is to have
> the same indent as where the float was defined. In XSL this means that
> the indent of the content of the reference area generated by the
> fo:float should be the same as the indent of the fo in which the float
> occurred. In other cases, eg when using an "offset" style where
> paragraphs are indented, but "headings" are not, it is also more
> convenient to inherit the indents.
>
> The consensus of the working group was to not introduce this breaking
> of the inheritance as it is sometimes very useful and in the cases
> where it is not what the stylesheet author wishes it is very easy to
> make an explicit specification of the desired indent. An example,
> using attribute-sets, has been added to the specification to show this.
>
> Added text in the XSL recommendation:
>
> Input sample:
>
> <doc>
> <table>
> <caption><p>Caption for this table</p></caption>
> <tgroup cols="3" width="325pt">
> <colspec colwidth="100pt"/>
> <colspec colwidth="150pt"/>
> <colspec colwidth="75pt"/>
> <tbody>
> <row>
> <entry><p>Cell 1</p></entry>
> <entry><p>Cell 2</p></entry>
> <entry><p>Cell 3</p></entry>
> </row>
> </tbody>
> </tgroup>
> </table>
> </doc>
>
> The table and its caption is centered in the available space between
> the following indents: start-indent="100pt" and end-indent="0pt". The
> centering and indent is not desired for the content of the caption and
> the cells.
>
> XSL Stylesheet:
>
> <?xml version='1.0'?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:fo="http://www.w3.org/1999/XSL/Format"
> version='1.0'>
>
> <xsl:attribute-set name="inside-table">
> <xsl:attribute name="start-indent">0pt</xsl:attribute>
> <xsl:attribute name="text-align">start</xsl:attribute>
> </xsl:attribute-set>
>
> <xsl:template match="p">
> <fo:block>
> <xsl:apply-templates/>
> </fo:block>
> </xsl:template>
>
> <xsl:template match="table">
> <fo:table-and-caption text-align="center" start-indent="100pt">
> <xsl:apply-templates/>
> </fo:table-and-caption>
> </xsl:template>
>
> <xsl:template match="caption">
> <fo:table-caption xsl:use-attribute-sets="inside-table">
> <xsl:apply-templates/>
> </fo:table-caption>
> </xsl:template>
>
> <xsl:template match="tgroup">
> <fo:table width="{@width}" table-layout="fixed">
> <xsl:apply-templates/>
> </fo:table>
> </xsl:template>
>
> <xsl:template match="colspec">
> <fo:table-column column-width="{@colwidth}">
> <xsl:attribute name="column-number">
> <xsl:number count="colspec"/>
> </xsl:attribute>
> </fo:table-column>
> </xsl:template>
>
> <xsl:template match="tbody">
> <fo:table-body xsl:use-attribute-sets="inside-table">
> <xsl:apply-templates/>
> </fo:table-body>
> </xsl:template>
>
> <xsl:template match="row">
> <fo:table-row>
> <xsl:apply-templates/>
> </fo:table-row>
> </xsl:template>
>
> <xsl:template match="entry">
> <fo:table-cell>
> <xsl:apply-templates/>
> </fo:table-cell>
> </xsl:template>
>
> </xsl:stylesheet>
>
> Result Instance: elements and attributes in the fo: namespace
>
> <fo:table-and-caption text-align="center" start-indent="100pt">
>
> <fo:table-caption start-indent="0pt" text-align="start">
> <fo:block>Caption for this table
> </fo:block>
> </fo:table-caption>
>
> <fo:table width="325pt" table-layout="fixed">
>
> <fo:table-column column-width="100pt" column-number="1">
> </fo:table-column>
> <fo:table-column column-width="150pt" column-number="2">
> </fo:table-column>
> <fo:table-column column-width="75pt" column-number="3">
> </fo:table-column>
>
> <fo:table-body start-indent="0pt" text-align="start">
>
> <fo:table-row>
>
> <fo:table-cell>
> <fo:block>Cell 1
> </fo:block>
> </fo:table-cell>
> <fo:table-cell>
> <fo:block>Cell 2
> </fo:block>
> </fo:table-cell>
> <fo:table-cell>
> <fo:block>Cell 3
> </fo:block>
> </fo:table-cell>
>
> </fo:table-row>
>
> </fo:table-body>
>
> </fo:table>
>
> </fo:table-and-caption>
>
> Item 4
>
> Problem 3: Indents on list-item-label and list-item-body
> ========================================================
>
> As shown in the above, inherited start- and end-indent values are
> sometimes not useful and should be modified.
>
> I request the following modification for solving the problem of
> inherited
> indents on list-item-label and list-item-body (label and body overlap
> when indents are not specified).
>
> on list-item-label:
> end-indent defaults to label-end()
> on list-item-body:
> start-indent defaults to body-start()
[snip]
> Disposition: Explanation of why no change will be made
>
> The working group felt that also in this case it was better to
> preserve the simple inheritance model.
OK, the consistency is important.
Thanks,
Shinyu Murakami
Received on Monday, 25 June 2001 04:39:52 UTC