From: Jeremias Maerki Date: Wed, 10 Aug 2005 14:59:56 +0000 (+0000) Subject: Restored breakability of block-level content in inlines: X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=3def9e834966adfb00a0d2cbac9c5b1b07fe99c1;p=xmlgraphics-fop.git Restored breakability of block-level content in inlines: Treat block sequences diffently from inline sequences. A block sequence's elements should not be combined to a single box as this removes breakability. The elements are now simply wrapped and handled separately in the previously disabled code part in addAreas(). git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/inlineblock@231255 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/fop/area/LineArea.java b/src/java/org/apache/fop/area/LineArea.java index 12a5fb61c..593b9077e 100644 --- a/src/java/org/apache/fop/area/LineArea.java +++ b/src/java/org/apache/fop/area/LineArea.java @@ -91,5 +91,19 @@ public class LineArea extends Area { public int getStartIndent() { return startIndent; } + + /** + * Updates the extents of the line area from its children. + */ + public void updateExtentsFromChildren() { + int ipd = 0; + int bpd = 0; + for (int i = 0, len = inlineAreas.size(); i < len; i++) { + ipd = Math.max(ipd, ((InlineArea)inlineAreas.get(i)).getAllocIPD()); + bpd += ((InlineArea)inlineAreas.get(i)).getAllocBPD(); + } + setIPD(ipd); + setBPD(bpd); + } } diff --git a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java index 50013dfc2..f51e6af2b 100644 --- a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java @@ -37,6 +37,7 @@ import org.apache.fop.layoutmgr.KnuthSequence; import org.apache.fop.layoutmgr.LayoutContext; import org.apache.fop.layoutmgr.LayoutManager; import org.apache.fop.layoutmgr.LeafPosition; +import org.apache.fop.layoutmgr.NonLeafPosition; import org.apache.fop.layoutmgr.Position; import org.apache.fop.layoutmgr.PositionIterator; import org.apache.fop.layoutmgr.SpaceSpecifier; @@ -1079,7 +1080,20 @@ public class LineLayoutManager extends InlineStackingLayoutManager lineLayouts = (LineLayoutPossibilities)lineLayoutsList.get(p); KnuthSequence seq = (KnuthSequence) knuthParagraphs.get(p); - if (seq.isInlineSequence() && alignment == EN_JUSTIFY) { + if (!seq.isInlineSequence()) { + LinkedList targetList = new LinkedList(); + ListIterator listIter = seq.listIterator(); + while (listIter.hasNext()) { + KnuthElement tempElement; + tempElement = (KnuthElement) listIter.next(); + if (tempElement.getLayoutManager() != this) { + tempElement.setPosition(new NonLeafPosition(this, + tempElement.getPosition())); + } + targetList.add(tempElement); + } + returnList.addAll(targetList); + } else if (seq.isInlineSequence() && alignment == EN_JUSTIFY) { /* justified vertical alignment (not in the XSL FO recommendation): create a multi-layout sequence whose elements will contain a conventional Position */ @@ -1651,8 +1665,8 @@ public class LineLayoutManager extends InlineStackingLayoutManager lineArea.setBPD(lineArea.getBPD() + context.getSpaceAfter()); } parentLM.addChildArea(lineArea); -/* } else if (pos instanceof NonLeafPosition) { - // LineBreakPosition inside a nested block; + } else if (pos instanceof NonLeafPosition) { + // Nested block-level content; // go down the LM stack again; // collect all consecutive NonLeafPosition objects, // "unwrap" them and put the child positions in a new list. @@ -1661,7 +1675,7 @@ public class LineLayoutManager extends InlineStackingLayoutManager innerPosition = ((NonLeafPosition) pos).getPosition(); positionList.add(innerPosition); while (parentIter.hasNext()) { - pos = (Position) parentIter.getPos(parentIter.peekNext()); + pos = (Position)parentIter.peekNext(); if (!(pos instanceof NonLeafPosition)) { break; } @@ -1697,8 +1711,9 @@ public class LineLayoutManager extends InlineStackingLayoutManager blocklc.setLeadingSpace(blocklc.getTrailingSpace()); blocklc.setTrailingSpace(new SpaceSpecifier(false)); } + lineArea.updateExtentsFromChildren(); parentLM.addChildArea(lineArea); -*/ } else { + } else { // pos was the Position inside a penalty item, nothing to do } }