gmazza 2005/03/04 16:32:25 Modified: src/java/org/apache/fop/fo/flow TableBody.java Table.java TableFooter.java TableHeader.java src/java/org/apache/fop/layoutmgr PageSequenceLayoutManager.java src/java/org/apache/fop/area MainReference.java src/java/org/apache/fop/fo FONode.java Log: Validation for fo:table and fo:table-header added, some minor simplifications in other places. Revision Changes Path 1.41 +26 -32 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.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- TableBody.java 2 Mar 2005 21:03:25 -0000 1.40 +++ TableBody.java 5 Mar 2005 00:32:25 -0000 1.41 @@ -102,7 +102,10 @@ getParent().removeChild(this); } } - convertCellsToRows(); + if (tableCellsFound) { + convertCellsToRows(); + } + savedPropertyList = null; //Release reference } /** @@ -140,44 +143,35 @@ /** * If table-cells are used as direct children of a table-body|header|footer - * they are replace in this method by proper table-rows. + * they are replaced in this method by proper table-rows. * @throws FOPException if there's a problem binding the TableRows properties. */ private void convertCellsToRows() throws FOPException { - try { - if (childNodes == null - || childNodes.size() == 0 - || childNodes.get(0) instanceof TableRow) { - return; + //getLogger().debug("Converting cells to rows..."); + List cells = (List)childNodes.clone(); + childNodes.clear(); + Iterator i = cells.iterator(); + TableRow row = null; + while (i.hasNext()) { + TableCell cell = (TableCell)i.next(); + if (cell.startsRow() && (row != null)) { + childNodes.add(row); + row = null; } - //getLogger().debug("Converting cells to rows..."); - List cells = (List)childNodes.clone(); - childNodes.clear(); - Iterator i = cells.iterator(); - TableRow row = null; - while (i.hasNext()) { - TableCell cell = (TableCell)i.next(); - if (cell.startsRow() && (row != null)) { - childNodes.add(row); - row = null; - } - if (row == null) { - row = new TableRow(this); - PropertyList pList = new StaticPropertyList(row, savedPropertyList); - pList.setWritingMode(); - row.bind(pList); - } - row.addReplacedCell(cell); - if (cell.endsRow()) { - childNodes.add(row); - row = null; - } + if (row == null) { + row = new TableRow(this); + PropertyList pList = new StaticPropertyList(row, savedPropertyList); + pList.setWritingMode(); + row.bind(pList); } - if (row != null) { + row.addReplacedCell(cell); + if (cell.endsRow()) { childNodes.add(row); + row = null; } - } finally { - savedPropertyList = null; //Release reference + } + if (row != null) { + childNodes.add(row); } } 1.50 +59 -1 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.49 retrieving revision 1.50 diff -u -r1.49 -r1.50 --- Table.java 15 Feb 2005 19:30:51 -0000 1.49 +++ Table.java 5 Mar 2005 00:32:25 -0000 1.50 @@ -18,6 +18,8 @@ package org.apache.fop.fo.flow; +import org.xml.sax.Locator; + import java.util.List; import org.apache.fop.apps.FOPException; @@ -25,6 +27,7 @@ import org.apache.fop.fo.FObj; import org.apache.fop.fo.PropertyList; import org.apache.fop.fo.StaticPropertyList; +import org.apache.fop.fo.ValidationException; import org.apache.fop.fo.properties.CommonAccessibility; import org.apache.fop.fo.properties.CommonAural; import org.apache.fop.fo.properties.CommonBorderPaddingBackground; @@ -73,7 +76,13 @@ protected List columns = null; private TableBody tableHeader = null; private TableBody tableFooter = null; - + + /** used for validation */ + private boolean tableColumnFound = false; + private boolean tableHeaderFound = false; + private boolean tableFooterFound = false; + private boolean tableBodyFound = false; + /** * Default table-column used when no columns are specified. It is used * to handle inheritance (especially visibility) and defaults properly. */ @@ -136,6 +145,55 @@ checkId(id); getFOEventHandler().startTable(this); } + + /** + * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String) + * XSL Content Model: (marker*,table-column*,table-header?,table-footer?,table-body+) + */ + protected void validateChildNode(Locator loc, String nsURI, String localName) + throws ValidationException { + if (nsURI == FO_URI) { + if (localName.equals("marker")) { + if (tableColumnFound || tableHeaderFound || tableFooterFound + || tableBodyFound) { + nodesOutOfOrderError(loc, "fo:marker", + "(table-column*,table-header?,table-footer?,table-body+)"); + } + } else if (localName.equals("table-column")) { + tableColumnFound = true; + if (tableHeaderFound || tableFooterFound || tableBodyFound) { + nodesOutOfOrderError(loc, "fo:table-column", + "(table-header?,table-footer?,table-body+)"); + } + } else if (localName.equals("table-header")) { + if (tableHeaderFound) { + tooManyNodesError(loc, "table-header"); + } else { + tableHeaderFound = true; + if (tableFooterFound || tableBodyFound) { + nodesOutOfOrderError(loc, "fo:table-header", + "(table-footer?,table-body+)"); + } + } + } else if (localName.equals("table-footer")) { + if (tableFooterFound) { + tooManyNodesError(loc, "table-footer"); + } else { + tableFooterFound = true; + if (tableBodyFound) { + nodesOutOfOrderError(loc, "fo:table-footer", + "(table-body+)"); + } + } + } else if (localName.equals("table-body")) { + tableBodyFound = true; + } else { + invalidChildError(loc, nsURI, localName); + } + } else { + invalidChildError(loc, nsURI, localName); + } + } /** * @see org.apache.fop.fo.FONode#endOfNode 1.14 +1 -3 xml-fop/src/java/org/apache/fop/fo/flow/TableFooter.java Index: TableFooter.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/TableFooter.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- TableFooter.java 2 Mar 2005 21:03:25 -0000 1.13 +++ TableFooter.java 5 Mar 2005 00:32:25 -0000 1.14 @@ -19,11 +19,9 @@ package org.apache.fop.fo.flow; // FOP +import org.apache.fop.apps.FOPException; import org.apache.fop.fo.FONode; -import org.xml.sax.Locator; -import org.apache.fop.apps.FOPException; -import org.apache.fop.fo.ValidationException; /** * Class modelling the fo:table-footer object. 1.12 +20 -0 xml-fop/src/java/org/apache/fop/fo/flow/TableHeader.java Index: TableHeader.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/TableHeader.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- TableHeader.java 25 Aug 2004 05:03:06 -0000 1.11 +++ TableHeader.java 5 Mar 2005 00:32:25 -0000 1.12 @@ -19,8 +19,10 @@ package org.apache.fop.fo.flow; // FOP +import org.apache.fop.apps.FOPException; import org.apache.fop.fo.FONode; + /** * Class modelling the fo:table-header object. * @todo implement validateChildNode() @@ -35,6 +37,24 @@ } /** + * @see org.apache.fop.fo.FONode#startOfNode + */ + protected void startOfNode() throws FOPException { +// getFOEventHandler().startHeader(this); + } + + /** + * @see org.apache.fop.fo.FONode#endOfNode + */ + protected void endOfNode() throws FOPException { +// getFOEventHandler().endHeader(this); + if (!(tableRowsFound || tableCellsFound)) { + missingChildElementError("marker* (table-row+|table-cell+)"); + } +// convertCellsToRows(); + } + + /** * @see org.apache.fop.fo.FObj#getName() */ public String getName() { 1.39 +2 -4 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.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- PageSequenceLayoutManager.java 1 Mar 2005 00:11:03 -0000 1.38 +++ PageSequenceLayoutManager.java 5 Mar 2005 00:32:25 -0000 1.39 @@ -704,9 +704,7 @@ } private void createBodyMainReferenceArea() { - MainReference mainRef = new MainReference(); - mainRef.addTrait(Trait.IS_REFERENCE_AREA, Boolean.TRUE); - curBody.setMainReference(mainRef); + curBody.setMainReference(new MainReference()); } private Flow createFlow() { 1.4 +7 -0 xml-fop/src/java/org/apache/fop/area/MainReference.java Index: MainReference.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/MainReference.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- MainReference.java 27 May 2004 10:52:33 -0000 1.3 +++ MainReference.java 5 Mar 2005 00:32:25 -0000 1.4 @@ -32,6 +32,13 @@ private boolean isEmpty = true; /** + * Constructor + */ + public MainReference() { + addTrait(Trait.IS_REFERENCE_AREA, Boolean.TRUE); + } + + /** * Add a span area to this area. * * @param span the span area to add 1.55 +5 -4 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.54 retrieving revision 1.55 diff -u -r1.54 -r1.55 --- FONode.java 23 Feb 2005 22:04:01 -0000 1.54 +++ FONode.java 5 Mar 2005 00:32:25 -0000 1.55 @@ -292,8 +292,9 @@ */ protected void tooManyNodesError(Locator loc, String nsURI, String lName) throws ValidationException { - throw new ValidationException(errorText(loc) + getName() + ", only one " - + getNodeString(nsURI, lName) + " may be declared.", loc); + throw new ValidationException(errorText(loc) + "For " + getName() + + ", only one " + getNodeString(nsURI, lName) + " may be declared.", + loc); } /** @@ -305,8 +306,8 @@ */ protected void tooManyNodesError(Locator loc, String offendingNode) throws ValidationException { - throw new ValidationException(errorText(loc) + getName() + ", only one " - + offendingNode + " may be declared.", loc); + throw new ValidationException(errorText(loc) + "For " + getName() + + ", only one " + offendingNode + " may be declared.", loc); } /**
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]