spepping 2004/12/22 10:22:35 Modified: src/java/org/apache/fop/fo FOText.java src/java/org/apache/fop/layoutmgr ContentLayoutManager.java Log: Fixed the NPE for fo:title in FOText.createBlockPointers by returning early. Fixed the absence of output for fo:title: In ContentLM.fillArea, replace curLM.getNextBreakPoss with getNextKnuthElements, BreakPossIter with KnuthPossIter. Copied the line parameter calculations from LineLM.makeLineBreakPosition. This is only a rough patch: leaders, external graphics, page numbers cause null pointer exceptions. Revision Changes Path 1.35 +5 -3 xml-fop/src/java/org/apache/fop/fo/FOText.java Index: FOText.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FOText.java,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- FOText.java 24 Nov 2004 21:07:29 -0000 1.34 +++ FOText.java 22 Dec 2004 18:22:35 -0000 1.35 @@ -197,10 +197,12 @@ while (this.ancestorBlock == null) { ancestorFONode = ancestorFONode.parent; Class myclass = ancestorFONode.getClass(); - if (ancestorFONode instanceof Root) { + if (ancestorFONode instanceof org.apache.fop.fo.pagination.Title) { + return; + } else if (ancestorFONode instanceof Root) { getLogger().warn("Unexpected: fo:text with no fo:block ancestor"); - } - if (ancestorFONode instanceof Block) { + return; + } else if (ancestorFONode instanceof Block) { this.ancestorBlock = (Block)ancestorFONode; } } 1.17 +23 -26 xml-fop/src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java Index: ContentLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- ContentLayoutManager.java 13 Nov 2004 20:37:17 -0000 1.16 +++ ContentLayoutManager.java 22 Dec 2004 18:22:35 -0000 1.17 @@ -18,8 +18,9 @@ package org.apache.fop.layoutmgr; -import org.apache.fop.fo.FObj; import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.fo.FObj; +import org.apache.fop.fo.Constants; import org.apache.fop.fo.flow.Marker; import org.apache.fop.area.Area; import org.apache.fop.area.inline.InlineArea; @@ -72,10 +73,7 @@ public void fillArea(LayoutManager curLM) { - List childBreaks = new ArrayList(); - MinOptMax stack = new MinOptMax(); int ipd = 1000000; - BreakPoss bp; LayoutContext childLC = new LayoutContext(LayoutContext.NEW_AREA); childLC.setLeadingSpace(new SpaceSpecifier(false)); @@ -96,35 +94,35 @@ // max size of middle alignment below baseline int middlefollow = maxtb; - while (!curLM.isFinished()) { - MinOptMax lastSize = null; - if ((bp = curLM.getNextBreakPoss(childLC)) != null) { - lastSize = bp.getStackingSize(); - childBreaks.add(bp); + stackSize = 0; - if (bp.getLead() > lineLead) { - lineLead = bp.getLead(); + LinkedList contentList = + getNextKnuthElements(childLC, Constants.EN_START); + ListIterator contentIter = contentList.listIterator(); + while (contentIter.hasNext()) { + KnuthElement element = (KnuthElement) contentIter.next(); + if (element.isBox()) { + KnuthBox box = (KnuthBox) element; + if (box.getLead() > lineLead) { + lineLead = box.getLead(); } - if (bp.getTotal() > maxtb) { - maxtb = bp.getTotal(); + if (box.getTotal() > maxtb) { + maxtb = box.getTotal(); } - if (bp.getMiddle() > middlefollow) { - middlefollow = bp.getMiddle(); + // Is this needed? cf. LineLM.makeLineBreakPosition + // if (box.getMiddle() > lineLead) { + // lineLead = box.getMiddle(); + // } + if (box.getMiddle() > middlefollow) { + middlefollow = box.getMiddle(); } } - if (lastSize != null) { - stack.add(lastSize); - } } if (maxtb - lineLead > middlefollow) { middlefollow = maxtb - lineLead; } - //if(holder instanceof InlineParent) { - // ((InlineParent)holder).setHeight(lineHeight); - //} - LayoutContext lc = new LayoutContext(0); lc.setBaseline(lineLead); lc.setLineHeight(lineHeight); @@ -132,10 +130,9 @@ lc.setFlags(LayoutContext.RESOLVE_LEADING_SPACE, true); lc.setLeadingSpace(new SpaceSpecifier(false)); lc.setTrailingSpace(new SpaceSpecifier(false)); - PositionIterator breakPosIter = - new BreakPossPosIter(childBreaks, 0, childBreaks.size()); - curLM.addAreas(breakPosIter, lc); - stackSize = stack.opt; + KnuthPossPosIter contentPosIter = + new KnuthPossPosIter(contentList, 0, contentList.size()); + curLM.addAreas(contentPosIter, lc); } public void addAreas(PositionIterator posIter, LayoutContext context) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]