I'm afraid that you're wrong here. It's true that s-p-m and region-body
don't directly generate reference areas but they also can't, because
they are only used as a template for each new page. For for each page
they serve as FOs that generate reference areas.

But let me give you another example where this is clearer and so you see
that your argument doesn't really count in this discussion. Please open
test/layoutengine/testcases/block-container3.xml. That test case I wrote
specifically to demostrate the effect we're discussing here. You can't
deny that block-container generates a reference area directly. So in
this test case the block inside the b-c has an effective start-indent of
20pt (10pt + 10pt) much like in Luca's example.

If you look at the checks at the end of block-container3.xml you will
realize that there is no "20000" (millipoints) anywhere. It's simply the
effect from the reference area which results in the double indent. So if
you wanted to have both text-generating blocks left-aligned at the same
position you'd have to specify start-indent="0pt" on the block-container
or on its nested block to reset the start-indent to "0pt".

BTW, I anticipated that I'd have this argument sooner or later. I was
rather baffled when I found out how it is supposed to work. So don't
worry about wasting my time in this case. I simply hope we can then put
it to rest once and for all, ideally documented in a nice Wiki or Web
page, so that if that question comes up again, we can simply point
people to that page.

(additional comments inline)

On 16.02.2005 05:02:30 Glen Mazza wrote:
> > together with the
> > parent's start-indent accumulates 100pt because each
> > of the FOs are
> > generating a reference area. 
> I don't think so here--I don't believe either fo:s-p-m
> or fo:region-body generate reference areas--indeed, I
> don't think anything located outside of
> fo:page-sequence does.  The spec says they are *used*
> to create a reference area, but they don't generate
> one themselves.  So maybe your calculations here may
> need changing--because different formulae in 5.3.2
> would hence be activated.
> Section 6.1 [1] says "There are three kinds of
> formatting objects: (1) those that generate areas, (2)
> those that return areas, but do not generate them, and
> (3) those that are used in the generation of areas."
> fo:s-p-m and fo:region-body are type (3), not type
> (1).
> fo:s-p-m text:  The fo:simple-page-master formatting
> object generates no area directly. It is used in the
> generation of pages by an fo:page-sequence. type (3)
> fo:r-b text:  The fo:region-body formatting object is
> used to generate one region-viewport-area and one
> region-reference-area whenever an
> fo:simple-page-master that has an fo:region-body as a
> child is used to generate a page.  (i.e., type 3)
> [1]
> http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo-section
> > So in your case you could specify
> > a margin="0pt" on
> > the region-body which triggers the first formula
> > given in 5.3.2. 
> Again, I don't think so because fo:region-body never
> generates a reference-area.  Hence, with no explicit
> specification of margin properites, the third set of
> formulas then activates:
> margin-corresponding = start-indent -
> inherited_value_of(start-indent) -
> padding-corresponding - border-corresponding-width
> with the additional rule that:  "If the "start-indent"
> or "end-indent" properties are not specified their
> inherited value is used in these formulae."
> Since start-indent and end-indent were not specified,
> then we have:
> margin-corresponding =
> inherited_value_of(start-indent) -
> inherited_value_of(start-indent) -
> padding-corresponding - border-corresponding-width,

This formula is only used to calculate margin-corresponding. It is not
used to calculate the effective indent. Corresponding properties should
not be used directly to do the actual calculations that define the
layout. Ask yourself: How would you decide when to use what property to
calculate the actual indents? That's why the formulas are there to
derive start|end-indent from the corresponding properties. The formula
you're refferring to here is actually used inside IndentPropertyMaker.
It is used to create the "margin-corresponding" value which is used in
the formula sets 1 and 2.

> or zero for the margin properties on fo:region-body. 
> (i.e., we just rely on the 50pt. on
> simple-page-master.)
> So Luca is correct that both fo:simple-page-masters
> should generate the same overall margins of 50 pt.
> each, no?

No. :-)

Jeremias Maerki

Reply via email to