On Fri, Sep 09, 2005 at 02:04:08PM +0200, Luca Furini wrote:
> Luca Furini wrote:
> 
> For example, if we have this LM tree
> 
>            Outer BlockLM
>                  |
>     +------------+------------+
>     |            |            |
> BlockLM 1    BlockLM 2    BlockLM 3
>                  |
>           +------+-----+
>           |            |
>       BlockLM A    BlockLM B
> 
> BlockLM1.getNextKnuthElements() would return to the outer BlockLM only the 
> elements representing its block content, without any space.
> 
> In order to decide which elements it has to create, the outer BlockLM 
> could have some lines like:
> 
> (currentChild = BlockLM 1
>  nextChild = BlockLM 2)
> 
> space1 = currentChild.getSpaceAfter();
> space2 = nextChild.getSpaceBefore();
> if (this.mustKeepTogether()
>     || currentChild.mustKeepWithNext() && !nextChild.hasBreakBefore()
>     || !currentChild.hasBreakAfter() && nextChild.mustKeepWithPrevious) {
>     // there cannot be a break between the two children,
>     createElementsForSpace(resolve(space1, space2, false, false));
> } else {
>     // there can be a break between the children
>     createElementsForSpace(resolve(space1, null, false, true),
>                            resolve(null, space2, true, false),
>                            resolve(space1, space2, false, false));
> }

This is a good idea. Each LM would invoke this whenever it steps from
one child to another. Only the top level LM would also invoke it for
its before and after edges.

I would think of a different treatment of the spaces (space specifiers):
List spaces = new List(currentChild.getSpacesAfter(),
  nextChild.getSpacesBefore());
createElementsForSpaces(spaces);

createElementsForSpaces would create a single glue and a single
penalty, because all space specifiers in a single block stacking
constraint need to be considered together to calculate the space
value. Resolution and creating elements go together, as a penalty must
be created to reflect the influence of a page break.

Regards, Simon

-- 
Simon Pepping
home page: http://www.leverkruid.nl

Reply via email to