spepping 2004/12/24 04:06:26 Modified: src/java/org/apache/fop/apps FOUserAgent.java src/java/org/apache/fop/area AreaTreeHandler.java src/java/org/apache/fop/fo FONode.java FOText.java FObjMixed.java src/java/org/apache/fop/fo/flow BasicLink.java BidiOverride.java Block.java BlockContainer.java Character.java ExternalGraphic.java Footnote.java Inline.java InlineContainer.java InlineLevel.java InstreamForeignObject.java Leader.java ListBlock.java ListItem.java Marker.java PageNumber.java PageNumberCitation.java RetrieveMarker.java Table.java TableBody.java TableCell.java TableRow.java Wrapper.java src/java/org/apache/fop/fo/pagination Flow.java src/java/org/apache/fop/layoutmgr AbstractLayoutManager.java ContentLayoutManager.java LayoutManager.java PageSequenceLayoutManager.java Added: src/java/org/apache/fop/layoutmgr LayoutManagerMaker.java LayoutManagerMapping.java Log: This patch implements a pluggable LayoutManagers system, according to the ideas of Finn Bock and his patch in bug 30500. Created a LayoutManagerMaker interface, with method makeLayoutManagers(FONode, List), and two convenience methods on top of it. Created an implementation: LayoutManagerMapping. This is along the pattern of FOElementMapping. It creates a Map from FObj class to Maker objects. There are many static inner classes which are subclasses of Maker. Each subclass implements its own version of the make method. FOUserAgent has a setter and getter for LayoutManagerMakerOverride. AreaTreeHandler creates a LayoutManagerMaker, taking the user's override into account, using LayoutManagerMapping as the default. It has a get method for it. The LayoutManager interface has a get method for the AreaTreeHandler object, a reference to which is held in PageSequenceLM, the top of the LM tree. Revision Changes Path 1.20 +20 -1 xml-fop/src/java/org/apache/fop/apps/FOUserAgent.java Index: FOUserAgent.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/FOUserAgent.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- FOUserAgent.java 24 Oct 2004 00:03:49 -0000 1.19 +++ FOUserAgent.java 24 Dec 2004 12:06:25 -0000 1.20 @@ -37,6 +37,7 @@ // FOP import org.apache.fop.fo.ElementMapping; import org.apache.fop.fo.FOEventHandler; +import org.apache.fop.layoutmgr.LayoutManagerMaker; import org.apache.fop.pdf.PDFEncryptionParams; import org.apache.fop.render.Renderer; @@ -74,6 +75,7 @@ private InputHandler inputHandler = null; private Renderer rendererOverride = null; private FOEventHandler foEventHandlerOverride = null; + private LayoutManagerMaker lmMakerOverride = null; /* user configuration */ private Configuration userConfig = null; private Log log = LogFactory.getLog("FOP"); @@ -164,6 +166,23 @@ */ public FOEventHandler getFOEventHandlerOverride() { return this.foEventHandlerOverride; + } + + /** + * Sets an explicit LayoutManagerMaker instance which overrides the one + * defined by the AreaTreeHandler. + * @param lmMaker the LayoutManagerMaker instance + */ + public void setLayoutManagerMakerOverride(LayoutManagerMaker lmMaker) { + this.lmMakerOverride = lmMaker; + } + + /** + * Returns the overriding LayoutManagerMaker instance, if any. + * @return the overriding LayoutManagerMaker or null + */ + public LayoutManagerMaker getLayoutManagerMakerOverride() { + return this.lmMakerOverride; } /** 1.28 +24 -3 xml-fop/src/java/org/apache/fop/area/AreaTreeHandler.java Index: AreaTreeHandler.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/AreaTreeHandler.java,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- AreaTreeHandler.java 17 Dec 2004 00:19:10 -0000 1.27 +++ AreaTreeHandler.java 24 Dec 2004 12:06:25 -0000 1.28 @@ -40,6 +40,8 @@ import org.apache.fop.fo.pagination.PageSequence; import org.apache.fop.fo.pagination.Root; import org.apache.fop.layoutmgr.PageSequenceLayoutManager; +import org.apache.fop.layoutmgr.LayoutManagerMaker; +import org.apache.fop.layoutmgr.LayoutManagerMapping; /** * Area tree handler for formatting objects. @@ -72,6 +74,9 @@ // time used in rendering (for statistics) private long startTime; + // the LayoutManager maker + private LayoutManagerMaker lmMaker; + // count of number of pages rendered private int pageCount; @@ -106,6 +111,11 @@ model = new RenderPagesModel(userAgent, renderType, fontInfo, stream); + lmMaker = userAgent.getLayoutManagerMakerOverride(); + if (lmMaker == null) { + lmMaker = new LayoutManagerMapping(); + } + outputStatistics = log.isDebugEnabled(); if (outputStatistics) { @@ -123,6 +133,15 @@ } /** + * Get the LayoutManager maker for this area tree. + * + * @return LayoutManagerMaker the LayoutManager maker being used for this area tree + */ + public LayoutManagerMaker getLayoutManagerMaker() { + return lmMaker; + } + + /** * Tie a PageViewport with an ID found on a child area of the PV. * Note that an area with a given ID may be on more than one PV, hence * an ID may have more than one PV associated with it. @@ -210,8 +229,10 @@ // If no main flow, nothing to layout! if (pageSequence.getMainFlow() != null) { - PageSequenceLayoutManager pageSLM - = new PageSequenceLayoutManager(this, pageSequence); + PageSequenceLayoutManager pageSLM = + (PageSequenceLayoutManager) + getLayoutManagerMaker().makeLayoutManager(pageSequence); + pageSLM.setAreaTreeHandler(this); pageSLM.activateLayout(); } } 1.51 +0 -8 xml-fop/src/java/org/apache/fop/fo/FONode.java Index: FONode.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FONode.java,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- FONode.java 21 Dec 2004 11:28:05 -0000 1.50 +++ FONode.java 24 Dec 2004 12:06:25 -0000 1.51 @@ -371,14 +371,6 @@ } /** - * Return a LayoutManager responsible for laying out this FObj's content. - * Must override in subclasses if their content can be laid out. - * @param list the list to which the layout manager(s) should be added - */ - public void addLayoutManager(List list) { - } - - /** * Returns the name of the node * @return the name of this node */ 1.36 +0 -9 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.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- FOText.java 22 Dec 2004 18:22:35 -0000 1.35 +++ FOText.java 24 Dec 2004 12:06:25 -0000 1.36 @@ -567,13 +567,4 @@ public int getWrapOption() { return wrapOption; } - - /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - if (endIndex - startIndex > 0) { - list.add(new TextLayoutManager(this)); - } - } } 1.45 +0 -7 xml-fop/src/java/org/apache/fop/fo/FObjMixed.java Index: FObjMixed.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FObjMixed.java,v retrieving revision 1.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- FObjMixed.java 22 Dec 2004 08:54:10 -0000 1.44 +++ FObjMixed.java 24 Dec 2004 12:06:25 -0000 1.45 @@ -61,13 +61,6 @@ public CharIterator charIterator() { return new RecursiveCharIterator(this); } - - /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - // no layout manager - } } 1.35 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/BasicLink.java Index: BasicLink.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/BasicLink.java,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- BasicLink.java 29 Oct 2004 10:20:55 -0000 1.34 +++ BasicLink.java 24 Dec 2004 12:06:25 -0000 1.35 @@ -118,14 +118,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - BasicLinkLayoutManager lm = new BasicLinkLayoutManager(this); - list.add(lm); - } - - /** * Return the "internal-destination" property. */ public String getInternalDestination() { 1.25 +0 -24 xml-fop/src/java/org/apache/fop/fo/flow/BidiOverride.java Index: BidiOverride.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/BidiOverride.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- BidiOverride.java 22 Dec 2004 08:54:10 -0000 1.24 +++ BidiOverride.java 24 Dec 2004 12:06:25 -0000 1.25 @@ -132,30 +132,6 @@ blockOrInlineItemFound = true; } } - - /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - * @todo see if can/should move the child iteration logic - * to BidiLayoutManager - */ - public void addLayoutManager(List list) { - if (false) { - super.addLayoutManager(list); - } else { - ArrayList childList = new ArrayList(); - super.addLayoutManager(list); - for (int count = childList.size() - 1; count >= 0; count--) { - LayoutManager lm = (LayoutManager) childList.get(count); - if (lm.generatesInlineAreas()) { - LayoutManager blm = new BidiLayoutManager(this, - (InlineLayoutManager) lm); - list.add(blm); - } else { - list.add(lm); - } - } - } - } /** * @see org.apache.fop.fo.FObj#getName() 1.51 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/Block.java Index: Block.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/Block.java,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- Block.java 24 Nov 2004 21:07:29 -0000 1.50 +++ Block.java 24 Dec 2004 12:06:25 -0000 1.51 @@ -473,14 +473,6 @@ bNextIsLF = false; } } - - /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - BlockLayoutManager blm = new BlockLayoutManager(this); - list.add(blm); - } /** * @see org.apache.fop.fo.FONode#getName() 1.33 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/BlockContainer.java Index: BlockContainer.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/BlockContainer.java,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- BlockContainer.java 29 Oct 2004 11:19:36 -0000 1.32 +++ BlockContainer.java 24 Dec 2004 12:06:26 -0000 1.33 @@ -190,14 +190,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - BlockContainerLayoutManager blm = new BlockContainerLayoutManager(this); - list.add(blm); - } - - /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.31 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/Character.java Index: Character.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/Character.java,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- Character.java 13 Nov 2004 20:37:17 -0000 1.30 +++ Character.java 24 Dec 2004 12:06:26 -0000 1.31 @@ -234,14 +234,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - CharacterLayoutManager lm = new CharacterLayoutManager(this); - list.add(lm); - } - - /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.49 +0 -10 xml-fop/src/java/org/apache/fop/fo/flow/ExternalGraphic.java Index: ExternalGraphic.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/ExternalGraphic.java,v retrieving revision 1.48 retrieving revision 1.49 diff -u -r1.48 -r1.49 --- ExternalGraphic.java 29 Oct 2004 11:19:36 -0000 1.48 +++ ExternalGraphic.java 24 Dec 2004 12:06:26 -0000 1.49 @@ -241,16 +241,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - if (!src.equals("")) { - ExternalGraphicLayoutManager lm = new ExternalGraphicLayoutManager(this); - list.add(lm); - } - } - - /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.31 +0 -11 xml-fop/src/java/org/apache/fop/fo/flow/Footnote.java Index: Footnote.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/Footnote.java,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- Footnote.java 28 Oct 2004 10:00:21 -0000 1.30 +++ Footnote.java 24 Dec 2004 12:06:26 -0000 1.31 @@ -121,17 +121,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - if (getInlineFO() == null) { - getLogger().error("inline required in footnote"); - return; - } - getInlineFO().addLayoutManager(list); - } - - /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.37 +0 -10 xml-fop/src/java/org/apache/fop/fo/flow/Inline.java Index: Inline.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/Inline.java,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- Inline.java 22 Dec 2004 08:54:10 -0000 1.36 +++ Inline.java 24 Dec 2004 12:06:26 -0000 1.37 @@ -182,16 +182,6 @@ } /** - * @see org.apache.fop.fo.FObj#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - if (getChildNodes() != null) { - InlineLayoutManager lm = new InlineLayoutManager(this); - list.add(lm); - } - } - - /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.25 +0 -10 xml-fop/src/java/org/apache/fop/fo/flow/InlineContainer.java Index: InlineContainer.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/InlineContainer.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- InlineContainer.java 29 Oct 2004 10:20:55 -0000 1.24 +++ InlineContainer.java 24 Dec 2004 12:06:26 -0000 1.25 @@ -114,16 +114,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - ArrayList childList = new ArrayList(); - super.addLayoutManager(childList); - LayoutManager lm = new ICLayoutManager(this, childList); - list.add(lm); - } - - /** * @see org.apache.fop.fo.FONode#getName() */ public String getName() { 1.2 +1 -13 xml-fop/src/java/org/apache/fop/fo/flow/InlineLevel.java Index: InlineLevel.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/InlineLevel.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- InlineLevel.java 22 Dec 2004 08:54:10 -0000 1.1 +++ InlineLevel.java 24 Dec 2004 12:06:26 -0000 1.2 @@ -96,17 +96,5 @@ public ColorType getColor() { return color; } - - /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - if (getChildNodes() != null) { - InlineLayoutManager lm; - lm = new InlineLayoutManager(this); - list.add(lm); - } - } - } 1.36 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/InstreamForeignObject.java Index: InstreamForeignObject.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/InstreamForeignObject.java,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- InstreamForeignObject.java 24 Nov 2004 21:07:29 -0000 1.35 +++ InstreamForeignObject.java 24 Dec 2004 12:06:26 -0000 1.36 @@ -261,14 +261,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - InstreamForeignObjectLM lm = new InstreamForeignObjectLM(this); - list.add(lm); - } - - /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.51 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/Leader.java Index: Leader.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/Leader.java,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- Leader.java 22 Dec 2004 08:54:10 -0000 1.50 +++ Leader.java 24 Dec 2004 12:06:26 -0000 1.51 @@ -176,14 +176,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - LeaderLayoutManager lm = new LeaderLayoutManager(this); - list.add(lm); - } - - /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.36 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/ListBlock.java Index: ListBlock.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/ListBlock.java,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- ListBlock.java 29 Oct 2004 10:20:55 -0000 1.35 +++ ListBlock.java 24 Dec 2004 12:06:26 -0000 1.36 @@ -147,14 +147,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - ListBlockLayoutManager lm = new ListBlockLayoutManager(this); - list.add(lm); - } - - /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.35 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/ListItem.java Index: ListItem.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/ListItem.java,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- ListItem.java 29 Oct 2004 10:20:55 -0000 1.34 +++ ListItem.java 24 Dec 2004 12:06:26 -0000 1.35 @@ -155,14 +155,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - ListItemLayoutManager blm = new ListItemLayoutManager(this); - list.add(blm); - } - - /** * @return the label of the list item */ public ListItemLabel getLabel() { 1.23 +0 -7 xml-fop/src/java/org/apache/fop/fo/flow/Marker.java Index: Marker.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/Marker.java,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- Marker.java 21 Dec 2004 11:28:05 -0000 1.22 +++ Marker.java 24 Dec 2004 12:06:26 -0000 1.23 @@ -123,13 +123,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - // no layout manager - } - - /** * Return the "marker-class-name" property. */ public String getMarkerClassName() { 1.47 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/PageNumber.java Index: PageNumber.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/PageNumber.java,v retrieving revision 1.46 retrieving revision 1.47 diff -u -r1.46 -r1.47 --- PageNumber.java 29 Oct 2004 11:19:36 -0000 1.46 +++ PageNumber.java 24 Dec 2004 12:06:26 -0000 1.47 @@ -160,14 +160,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - PageNumberLayoutManager lm = new PageNumberLayoutManager(this); - list.add(lm); - } - - /** * @see org.apache.fop.fo.FONode#getName() */ public String getName() { 1.44 +0 -9 xml-fop/src/java/org/apache/fop/fo/flow/PageNumberCitation.java Index: PageNumberCitation.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/PageNumberCitation.java,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- PageNumberCitation.java 29 Oct 2004 11:19:36 -0000 1.43 +++ PageNumberCitation.java 24 Dec 2004 12:06:26 -0000 1.44 @@ -151,15 +151,6 @@ public String getRefId() { return refId; } - - /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - PageNumberCitationLayoutManager lm = - new PageNumberCitationLayoutManager(this); - list.add(lm); - } /** * @see org.apache.fop.fo.FObj#getName() 1.27 +0 -15 xml-fop/src/java/org/apache/fop/fo/flow/RetrieveMarker.java Index: RetrieveMarker.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/RetrieveMarker.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- RetrieveMarker.java 21 Dec 2004 11:28:05 -0000 1.26 +++ RetrieveMarker.java 24 Dec 2004 12:06:26 -0000 1.27 @@ -80,21 +80,6 @@ invalidChildError(loc, nsURI, localName); } - /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - * @todo remove null check when vCN() & endOfNode() implemented - */ - public void addLayoutManager(List list) { - Iterator baseIter = getChildNodes(); - if (baseIter == null) { - return; - } - while (baseIter.hasNext()) { - FONode child = (FONode) baseIter.next(); - child.addLayoutManager(list); - } - } - protected PropertyList createPropertyList(PropertyList parent, FOEventHandler foEventHandler) throws FOPException { // TODO: A special RetrieveMarkerPropertyList would be more memory 1.42 +3 -38 xml-fop/src/java/org/apache/fop/fo/flow/Table.java Index: Table.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/Table.java,v retrieving revision 1.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- Table.java 29 Oct 2004 10:20:55 -0000 1.41 +++ Table.java 24 Dec 2004 12:06:26 -0000 1.42 @@ -153,15 +153,15 @@ } } - private ArrayList getColumns() { + public ArrayList getColumns() { return columns; } - private TableBody getTableHeader() { + public TableBody getTableHeader() { return tableHeader; } - private TableBody getTableFooter() { + public TableBody getTableFooter() { return tableFooter; } @@ -184,41 +184,6 @@ */ public String getId() { return id; - } - - /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - * @todo see if can/should move much of this logic into TableLayoutManager - * and/or TableBody and TableColumn FO subclasses. - */ - public void addLayoutManager(List list) { - TableLayoutManager tlm = new TableLayoutManager(this); - ArrayList columns = getColumns(); - if (columns != null) { - ArrayList columnLMs = new ArrayList(); - ListIterator iter = columns.listIterator(); - while (iter.hasNext()) { - columnLMs.add(getTableColumnLayoutManager((TableColumn)iter.next())); - } - tlm.setColumns(columnLMs); - } - if (getTableHeader() != null) { - tlm.setTableHeader(getTableBodyLayoutManager(getTableHeader())); - } - if (getTableFooter() != null) { - tlm.setTableFooter(getTableBodyLayoutManager(getTableFooter())); - } - list.add(tlm); - } - - public Column getTableColumnLayoutManager(TableColumn node) { - Column clm = new Column(node); - return clm; - } - - public Body getTableBodyLayoutManager(TableBody node) { - Body blm = new Body(node); - return blm; } /** 1.35 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/TableBody.java Index: TableBody.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/TableBody.java,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- TableBody.java 29 Oct 2004 11:19:36 -0000 1.34 +++ TableBody.java 24 Dec 2004 12:06:26 -0000 1.35 @@ -92,14 +92,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - Body blm = new Body(this); - list.add(blm); - } - - /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.42 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/TableCell.java Index: TableCell.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/TableCell.java,v retrieving revision 1.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- TableCell.java 24 Nov 2004 21:07:29 -0000 1.41 +++ TableCell.java 24 Dec 2004 12:06:26 -0000 1.42 @@ -315,14 +315,6 @@ public int getNumberRowsSpanned() { return Math.max(numberRowsSpanned.getValue(), 1); } - - /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - Cell clm = new Cell(this); - list.add(clm); - } /** * @see org.apache.fop.fo.FObj#getName() 1.43 +0 -8 xml-fop/src/java/org/apache/fop/fo/flow/TableRow.java Index: TableRow.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/TableRow.java,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- TableRow.java 29 Oct 2004 11:19:36 -0000 1.42 +++ TableRow.java 24 Dec 2004 12:06:26 -0000 1.43 @@ -163,14 +163,6 @@ public CommonBorderPaddingBackground getCommonBorderPaddingBackground() { return commonBorderPaddingBackground; } - - /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - Row rlm = new Row(this); - list.add(rlm); - } /** * @see org.apache.fop.fo.FObj#getName() 1.19 +0 -15 xml-fop/src/java/org/apache/fop/fo/flow/Wrapper.java Index: Wrapper.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/Wrapper.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- Wrapper.java 28 Oct 2004 10:00:21 -0000 1.18 +++ Wrapper.java 24 Dec 2004 12:06:26 -0000 1.19 @@ -70,21 +70,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - * @todo remove null check when vCN() & endOfNode() implemented - */ - public void addLayoutManager(List list) { - ListIterator baseIter = getChildNodes(); - if (baseIter == null) { - return; - } - while (baseIter.hasNext()) { - FONode child = (FONode) baseIter.next(); - child.addLayoutManager(list); - } - } - - /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.38 +1 -9 xml-fop/src/java/org/apache/fop/fo/pagination/Flow.java Index: Flow.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/pagination/Flow.java,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- Flow.java 28 Oct 2004 10:00:23 -0000 1.37 +++ Flow.java 24 Dec 2004 12:06:26 -0000 1.38 @@ -139,14 +139,6 @@ } /** - * @see org.apache.fop.fo.FONode#addLayoutManager(List) - */ - public void addLayoutManager(List list) { - FlowLayoutManager lm = new FlowLayoutManager(this); - list.add(lm); - } - - /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.35 +13 -1 xml-fop/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java Index: AbstractLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- AbstractLayoutManager.java 21 Dec 2004 11:28:05 -0000 1.34 +++ AbstractLayoutManager.java 24 Dec 2004 12:06:26 -0000 1.35 @@ -23,6 +23,7 @@ import org.apache.fop.area.Area; import org.apache.fop.area.Resolvable; import org.apache.fop.area.PageViewport; +import org.apache.fop.area.AreaTreeHandler; import org.apache.fop.fo.Constants; import org.apache.fop.fo.flow.RetrieveMarker; import org.apache.fop.fo.flow.Marker; @@ -360,6 +361,16 @@ } /** + * Delegate getAreaTreeHandler to the parent layout manager. + * + * @see org.apache.fop.layoutmgr.LayoutManager + * @return the AreaTreeHandler object. + */ + public AreaTreeHandler getAreaTreeHandler() { + return parentLM.getAreaTreeHandler(); + } + + /** * Convenience method: preload a number of child LMs * @param size the requested number of child LMs * @return the list with the preloaded child LMs @@ -384,7 +395,8 @@ rm.bindMarker(marker); foNode = rm; } - foNode.addLayoutManager(newLMs); + getAreaTreeHandler().getLayoutManagerMaker(). + makeLayoutManagers(foNode, newLMs); } } return newLMs; 1.18 +27 -0 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.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- ContentLayoutManager.java 22 Dec 2004 18:22:35 -0000 1.17 +++ ContentLayoutManager.java 24 Dec 2004 12:06:26 -0000 1.18 @@ -23,6 +23,7 @@ import org.apache.fop.fo.Constants; import org.apache.fop.fo.flow.Marker; import org.apache.fop.area.Area; +import org.apache.fop.area.AreaTreeHandler; import org.apache.fop.area.inline.InlineArea; import org.apache.fop.area.Resolvable; import org.apache.fop.area.PageViewport; @@ -44,6 +45,7 @@ */ public class ContentLayoutManager implements InlineLevelLayoutManager { private FOUserAgent userAgent; + private AreaTreeHandler areaTreeHandler; private Area holder; private int stackSize; private LayoutManager parentLM; @@ -254,6 +256,31 @@ /** @see org.apache.fop.layoutmgr.LayoutManager */ public Marker retrieveMarker(String name, int pos, int boundary) { return parentLM.retrieveMarker(name, pos, boundary); + } + + /** + * Set the AreaTreeHandler. + * This is used by the PageSequenceLM for the Title, + * because it does not set itself as the parentLM. + * @param areaTreeHandler the area tree handler to add pages to + */ + public void setAreaTreeHandler(AreaTreeHandler areaTreeHandler) { + this.areaTreeHandler = areaTreeHandler; + } + + /** + * Either areaTreeHandler or parentLM should not be null. + * If areaTreeHandler is null, + * delegate getAreaTreeHandler to the parent layout manager. + * + * @see org.apache.fop.layoutmgr.LayoutManager + * @return the AreaTreeHandler object. + */ + public AreaTreeHandler getAreaTreeHandler() { + if (areaTreeHandler == null) { + areaTreeHandler = parentLM.getAreaTreeHandler(); + } + return areaTreeHandler; } /** 1.17 +6 -0 xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManager.java Index: LayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManager.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- LayoutManager.java 10 Dec 2004 10:12:21 -0000 1.16 +++ LayoutManager.java 24 Dec 2004 12:06:26 -0000 1.17 @@ -26,6 +26,7 @@ import org.apache.fop.area.Area; import org.apache.fop.area.Resolvable; import org.apache.fop.area.PageViewport; +import org.apache.fop.area.AreaTreeHandler; import org.apache.fop.fo.FObj; /** @@ -210,6 +211,11 @@ * @return the layout manaager of the retrieved marker if any */ Marker retrieveMarker(String name, int pos, int boundary); + + /** + * @return the AreaTreeHandler object. + */ + AreaTreeHandler getAreaTreeHandler(); /** * Load next child LMs, up to child LM index pos 1.20 +28 -10 xml-fop/src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java Index: PageSequenceLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- PageSequenceLayoutManager.java 22 Dec 2004 08:54:10 -0000 1.19 +++ PageSequenceLayoutManager.java 24 Dec 2004 12:06:26 -0000 1.20 @@ -128,20 +128,35 @@ * This is the top level layout manager. * It is created by the PageSequence FO. * - * @param areaTree the area tree to add pages to * @param pageseq the page sequence fo */ - public PageSequenceLayoutManager(AreaTreeHandler areaTreeHandler, PageSequence pageseq) { + public PageSequenceLayoutManager(PageSequence pageseq) { super(pageseq); fobj = pageseq; - this.areaTreeHandler = areaTreeHandler; - areaTreeModel = areaTreeHandler.getAreaTreeModel(); if (fobj.getPageSequenceMaster() != null) { fobj.getPageSequenceMaster().reset(); } } /** + * Set the AreaTreeHandler + * @param areaTreeHandler the area tree handler to add pages to + */ + public void setAreaTreeHandler(AreaTreeHandler areaTreeHandler) { + this.areaTreeHandler = areaTreeHandler; + areaTreeModel = areaTreeHandler.getAreaTreeModel(); + } + + /** + * @see org.apache.fop.layoutmgr.LayoutManager + * @return the AreaTreeHandler object + */ + public AreaTreeHandler getAreaTreeHandler() { + return areaTreeHandler; + } + + + /** * Set the page counting for this page sequence. * This sets the initial page number and the page number formatter. * @@ -174,6 +189,7 @@ ContentLayoutManager clm = new ContentLayoutManager(title); clm.setUserAgent(foTitle.getUserAgent()); + clm.setAreaTreeHandler(areaTreeHandler); // use special layout manager to add the inline areas // to the Title. @@ -891,12 +907,14 @@ */ private StaticContentLayoutManager getStaticContentLayoutManager(StaticContent sc) { StaticContentLayoutManager lm = - (StaticContentLayoutManager)staticContentLMs.get(sc.getFlowName()); - if (lm != null) { - return lm; + (StaticContentLayoutManager) + staticContentLMs.get(sc.getFlowName()); + if (lm == null) { + lm = (StaticContentLayoutManager) + getAreaTreeHandler().getLayoutManagerMaker(). + makeLayoutManager(sc); + staticContentLMs.put(sc.getFlowName(), lm); } - lm = new StaticContentLayoutManager(sc); - staticContentLMs.put(sc.getFlowName(), lm); return lm; } } 1.1 xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManagerMaker.java Index: LayoutManagerMaker.java =================================================================== /* * Copyright 2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* $Id: LayoutManagerMaker.java,v 1.1 2004/12/24 12:06:26 spepping Exp $ */ package org.apache.fop.layoutmgr; import java.util.List; import org.apache.fop.fo.FONode; public interface LayoutManagerMaker { public void makeLayoutManagers(FONode node, List lms); public LayoutManager makeLayoutManager(FONode node); public LayoutManager makeLayoutManager(FONode node, boolean checkLength); } 1.1 xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java Index: LayoutManagerMapping.java =================================================================== /* * Copyright 2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* $Id: LayoutManagerMapping.java,v 1.1 2004/12/24 12:06:26 spepping Exp $ */ package org.apache.fop.layoutmgr; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.util.ArrayList; import java.util.Map; import java.util.HashMap; import java.util.List; import java.util.ListIterator; import java.util.Iterator; import org.apache.fop.fo.FONode; import org.apache.fop.fo.FOText; import org.apache.fop.fo.FObj; import org.apache.fop.fo.FObjMixed; import org.apache.fop.fo.XMLObj; import org.apache.fop.fo.flow.BasicLink; import org.apache.fop.fo.flow.BidiOverride; import org.apache.fop.fo.flow.Block; import org.apache.fop.fo.flow.BlockContainer; import org.apache.fop.fo.flow.Character; import org.apache.fop.fo.flow.ExternalGraphic; import org.apache.fop.fo.flow.Footnote; import org.apache.fop.fo.flow.Inline; import org.apache.fop.fo.flow.InlineLevel; import org.apache.fop.fo.flow.InlineContainer; import org.apache.fop.fo.flow.InstreamForeignObject; import org.apache.fop.fo.flow.Leader; import org.apache.fop.fo.flow.ListBlock; import org.apache.fop.fo.flow.ListItem; import org.apache.fop.fo.flow.ListItemBody; import org.apache.fop.fo.flow.ListItemLabel; import org.apache.fop.fo.flow.PageNumber; import org.apache.fop.fo.flow.PageNumberCitation; import org.apache.fop.fo.flow.RetrieveMarker; import org.apache.fop.fo.flow.Table; import org.apache.fop.fo.flow.TableBody; import org.apache.fop.fo.flow.TableCell; import org.apache.fop.fo.flow.TableColumn; import org.apache.fop.fo.flow.TableFooter; import org.apache.fop.fo.flow.TableHeader; import org.apache.fop.fo.flow.TableRow; import org.apache.fop.fo.flow.Wrapper; import org.apache.fop.fo.pagination.Flow; import org.apache.fop.fo.pagination.PageSequence; import org.apache.fop.fo.pagination.StaticContent; import org.apache.fop.fo.pagination.Title; import org.apache.fop.layoutmgr.list.Item; import org.apache.fop.layoutmgr.list.ListBlockLayoutManager; import org.apache.fop.layoutmgr.list.ListItemLayoutManager; import org.apache.fop.layoutmgr.table.Body; import org.apache.fop.layoutmgr.table.Cell; import org.apache.fop.layoutmgr.table.Column; import org.apache.fop.layoutmgr.table.Row; import org.apache.fop.layoutmgr.table.TableLayoutManager; /** * The default class for creating layout managers. */ public class LayoutManagerMapping implements LayoutManagerMaker { /** logging instance */ protected static Log log = LogFactory.getLog(LayoutManagerMapping.class); /** The map of LayoutManagerMakers */ private Map makers = new HashMap(); public LayoutManagerMapping() { initialize(); } /** * Initializes the set of maker objects associated with this LayoutManagerMapping */ private void initialize() { makers.put(FOText.class, new FOTextLayoutManagerMaker()); makers.put(FObjMixed.class, new Maker()); makers.put(BidiOverride.class, new BidiOverrideLayoutManagerMaker()); makers.put(Inline.class, new InlineLayoutManagerMaker()); makers.put(Footnote.class, new FootnodeLayoutManagerMaker()); makers.put(InlineContainer.class, new InlineContainerLayoutManagerMaker()); makers.put(BasicLink.class, new BasicLinkLayoutManagerMaker()); makers.put(Block.class, new BlockLayoutManagerMaker()); makers.put(Leader.class, new LeaderLayoutManagerMaker()); makers.put(RetrieveMarker.class, new WrapperLayoutManagerMaker()); makers.put(Character.class, new CharacterLayoutManagerMaker()); makers.put(ExternalGraphic.class, new ExternalGraphicLayoutManagerMaker()); makers.put(BlockContainer.class, new BlockContainerLayoutManagerMaker()); makers.put(ListItem.class, new ListItemLayoutManagerMaker()); makers.put(ListBlock.class, new ListBlockLayoutManagerMaker()); makers.put(InstreamForeignObject.class, new InstreamForeignObjectLayoutManagerMaker()); makers.put(PageNumber.class, new PageNumberLayoutManagerMaker()); makers.put(PageNumberCitation.class, new PageNumberCitationLayoutManagerMaker()); makers.put(PageSequence.class, new PageSequenceLayoutManagerMaker()); makers.put(Table.class, new TableLayoutManagerMaker()); makers.put(TableBody.class, new TableBodyLayoutManagerMaker()); makers.put(TableColumn.class, new TableColumnLayoutManagerMaker()); makers.put(TableRow.class, new TableRowLayoutManagerMaker()); makers.put(TableCell.class, new TableCellLayoutManagerMaker()); makers.put(TableFooter.class, new TableBodyLayoutManagerMaker()); makers.put(TableHeader.class, new TableBodyLayoutManagerMaker()); makers.put(Flow.class, new FlowLayoutManagerMaker()); makers.put(StaticContent.class, new StaticContentLayoutManagerMaker()); makers.put(Wrapper.class, new WrapperLayoutManagerMaker()); makers.put(Title.class, new InlineLayoutManagerMaker()); } public void makeLayoutManagers(FONode node, List lms) { Maker maker = (Maker) makers.get(node.getClass()); if (maker == null) { log.error("No LayoutManager maker for class " + node.getClass()); } else { maker.make(node, lms); } } public LayoutManager makeLayoutManager(FONode node) { return makeLayoutManager(node, false); } public LayoutManager makeLayoutManager(FONode node, boolean checkLength) { List lms = new ArrayList(); makeLayoutManagers(node, lms); LayoutManager lm = null; if (checkLength && lms.size() != 1) { log.error("More than 1 LayoutManager for class " + node.getClass() + "; 1 was requested"); } else if (lms.size() != 0) { lm = (LayoutManager) lms.get(0); } return lm; } public static class Maker { public void make(FONode node, List lms) { // no layout manager return; } } public static class FOTextLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { FOText foText = (FOText) node; if (foText.endIndex - foText.startIndex > 0) { lms.add(new TextLayoutManager(foText)); } } } /* public static class FObjMixedLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { if (node.getChildNodes() != null) { InlineStackingLayoutManager lm; lm = new InlineStackingLayoutManager((FObjMixed) node); lms.add(lm); } } } */ public static class BidiOverrideLayoutManagerMaker extends Maker { // public static class BidiOverrideLayoutManagerMaker extends FObjMixedLayoutManagerMaker { public void make(BidiOverride node, List lms) { if (false) { // this is broken; it does nothing // it should make something like an InlineStackingLM super.make(node, lms); } else { ArrayList childList = new ArrayList(); // this is broken; it does nothing // it should make something like an InlineStackingLM super.make(node, childList); for (int count = childList.size() - 1; count >= 0; count--) { LayoutManager lm = (LayoutManager) childList.get(count); if (lm.generatesInlineAreas()) { LayoutManager blm = new BidiLayoutManager (node, (InlineLayoutManager) lm); lms.add(blm); } else { lms.add(lm); } } } } } public static class InlineLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { if (node.getChildNodes() != null) { lms.add(new InlineLayoutManager((InlineLevel) node)); } } } public static class FootnodeLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { Inline citation = ((Footnote) node).getInlineFO(); if (citation != null) { lms.add(new InlineLayoutManager(citation)); } } } public static class InlineContainerLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { ArrayList childList = new ArrayList(); super.make(node, childList); lms.add(new ICLayoutManager((InlineContainer) node, childList)); } } public static class BasicLinkLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new BasicLinkLayoutManager((BasicLink) node)); } } public static class BlockLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new BlockLayoutManager((Block) node)); } } public static class LeaderLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new LeaderLayoutManager((Leader) node)); } } public static class CharacterLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new CharacterLayoutManager((Character) node)); } } public static class ExternalGraphicLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { ExternalGraphic eg = (ExternalGraphic) node; if (!eg.getSrc().equals("")) { lms.add(new ExternalGraphicLayoutManager(eg)); } } } public static class BlockContainerLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new BlockContainerLayoutManager((BlockContainer) node)); } } public static class ListItemLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new ListItemLayoutManager((ListItem) node)); } } public static class ListBlockLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new ListBlockLayoutManager((ListBlock) node)); } } public static class InstreamForeignObjectLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new InstreamForeignObjectLM((InstreamForeignObject) node)); } } public static class PageNumberLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new PageNumberLayoutManager((PageNumber) node)); } } public static class PageNumberCitationLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new PageNumberCitationLayoutManager((PageNumberCitation) node)); } } public static class PageSequenceLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new PageSequenceLayoutManager((PageSequence) node)); } } public static class TableLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { Table table = (Table) node; TableLayoutManager tlm = new TableLayoutManager(table); ArrayList columns = table.getColumns(); if (columns != null) { ArrayList columnLMs = new ArrayList(); ListIterator iter = columns.listIterator(); while (iter.hasNext()) { columnLMs.add(new Column((TableColumn) node)); } tlm.setColumns(columnLMs); } if (table.getTableHeader() != null) { tlm.setTableHeader(new Body(table.getTableHeader())); } if (table.getTableFooter() != null) { tlm.setTableFooter(new Body(table.getTableFooter())); } lms.add(tlm); } } public static class TableBodyLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new Body((TableBody) node)); } } public static class TableColumnLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new Column((TableColumn) node)); } } public static class TableRowLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new Row((TableRow) node)); } } public static class TableCellLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new Cell((TableCell) node)); } } public static class FlowLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new FlowLayoutManager((Flow) node)); } } public static class StaticContentLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { lms.add(new StaticContentLayoutManager((StaticContent) node)); } } public class WrapperLayoutManagerMaker extends Maker { public void make(FONode node, List lms) { Iterator baseIter; baseIter = node.getChildNodes(); if (baseIter == null) { return; } while (baseIter.hasNext()) { FONode child = (FONode) baseIter.next(); makeLayoutManagers(child, lms); } } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]