-Original Message-
From: Glen Mazza [mailto:[EMAIL PROTECTED]
--- Luca Furini [EMAIL PROTECTED] wrote:
My first impression is that I would find somewhat
strange that the *page* breaking is not in the
*Page*SequenceLM! :-)
Well, under our current philosophy, our LM's map to
the formatting object (here, the page sequence), not
the areas they generate. I was reminded a bit on that
a few weeks ago by Andreas and Simon.
You may recall, I recommended at the time that we have
BodyRegionLM and a SideRegionLM instead of a FLM and a
StaticContentLM. Under this scenario, PSLM controls
complete page-by-page layout, and delegates to the
BRLM and SRLM to do the body region or side areas.
But if we have an FLM instead, my thinking is that
it should perhaps process the entire
fo:flow--including the creation of multiple
page-viewport-areas in order to consume that flow.
Hmm.. This does seem to be one of those situations where the logic could be
placed anywhere. However, taking into account Luca's remarks, I would be
inclined to see it as:
The PSLM creates the page-viewports, and passes them on to
1. the FLM --which controls layout of a subset of the areas
generated by descendants of the fo:flow
(ultimately also floats/footnotes)
2. the SCLMs --which control layout of the areas generated
by the descendants of the fo:static-contents
(+ possible retrieved markers from the subset processed
by the FLM)
In this respect, the page-breaking logic is already at its most appropriate
place.
The FLM needs only a part of the total page-vp, so it makes sense to handle
the creation/initialization of the viewport one level up.
A more serious comment is that some formatting
objects (footnotes and before floats) generates
page-level-out-of-line-areas, whose placement,
according to the recommendation (4.2.5), is
controlled by the fo:page-sequence ancestor;
snip /
As for location controlled by the fo:page-sequence
ancestor, that could simply mean that the
fo:page-sequence defines the page margins and the side
region dimensions. The footnote is just above the
region-after, and before-floats are just below the
region-before, hence the fo:page-sequence determines
its location. This wouldn't necessarily mean that the
actual layout of these objects needs to be done by the
PSLM.
Indeed not. After all, both before-floats and footnotes *are* descendants of
an fo:flow (assigned to the region-body, IIC --see constraints for fo:float
w/ float=before and footnotes(*))
so, if the PSLM must handle footnotes and before floats
(influencing the available bpd for the normal areas) it
must handle the whole page breaking process.
No, the FLM must handle the footnotes and before-floats, but the PSLM must
handle the page-breaking...
Since the out-of-line objects are constrained to the flow (region-body), it
is not necessary to handle their processing higher up.
Well, the available maximum bpd can be accessed from
the area.BodyRegion child of the PageViewport--this
value is calculated automatically upon initialization
of a PageViewport. As you can see from section
6.10.1.3[1], these two areas consume space from the
main-reference-area. So it appears that all that
would be necessary is for the FLM to create a
PageViewport, and if a flow has a before-float or
footnote, reduce that bpd for the regular
normal-reference-areas. (Also, to add the
footnote/before-float separators in.)
The _creation_ of the page-viewports should be done by the PSLM, while
_dividing_ the assigned region-viewport's bpd over floats, footnotes and/or
block content is up to the FLM.
Cheers,
Andreas
(*) http://www.w3.org/TR/xsl/slice6.html#fo_float
http://www.w3.org/TR/xsl/slice6.html#fo_footnote