bckfnn 2004/10/19 05:52:09 Modified: examples/plan/src/org/apache/fop/plan PlanElement.java src/java/org/apache/fop/fo FONode.java FOTreeBuilder.java FObj.java UnknownXMLObj.java XMLObj.java src/java/org/apache/fop/fo/extensions/svg SVGElement.java Log: Second phase of performance improvement. Pass the propertyList into processNode(..) and addCharacters(..). PR: 31699 Revision Changes Path 1.8 +6 -3 xml-fop/examples/plan/src/org/apache/fop/plan/PlanElement.java Index: PlanElement.java =================================================================== RCS file: /home/cvs/xml-fop/examples/plan/src/org/apache/fop/plan/PlanElement.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- PlanElement.java 14 Aug 2004 16:26:08 -0000 1.7 +++ PlanElement.java 19 Oct 2004 12:52:09 -0000 1.8 @@ -21,6 +21,7 @@ import java.awt.geom.Point2D; import org.apache.fop.fo.FONode; +import org.apache.fop.fo.PropertyList; import org.w3c.dom.Document; import org.xml.sax.Attributes; @@ -48,8 +49,10 @@ * @see org.apache.fop.fo.FONode#processNode */ public void processNode(String elementName, Locator locator, - Attributes attlist) throws SAXParseException { - super.processNode(elementName, locator, attlist); + Attributes attlist, PropertyList propertyList) + throws SAXParseException + { + super.processNode(elementName, locator, attlist, propertyList); createBasicDocument(); } 1.48 +3 -1 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.47 retrieving revision 1.48 diff -u -r1.47 -r1.48 --- FONode.java 18 Oct 2004 20:15:19 -0000 1.47 +++ FONode.java 19 Oct 2004 12:52:09 -0000 1.48 @@ -107,7 +107,8 @@ * @param attlist Collection of attributes passed to us from the parser. * @throws SAXParseException for errors or inconsistencies in the attributes */ - public void processNode(String elementName, Locator locator, Attributes attlist) throws SAXParseException { + public void processNode(String elementName, Locator locator, + Attributes attlist, PropertyList parent) throws SAXParseException { System.out.println("name = " + elementName); } @@ -143,6 +144,7 @@ * @param locator location in fo source file. */ protected void addCharacters(char data[], int start, int length, + PropertyList pList, Locator locator) throws SAXParseException { // ignore } 1.55 +16 -3 xml-fop/src/java/org/apache/fop/fo/FOTreeBuilder.java Index: FOTreeBuilder.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FOTreeBuilder.java,v retrieving revision 1.54 retrieving revision 1.55 diff -u -r1.54 -r1.55 --- FOTreeBuilder.java 10 Oct 2004 12:24:02 -0000 1.54 +++ FOTreeBuilder.java 19 Oct 2004 12:52:09 -0000 1.55 @@ -80,6 +80,11 @@ protected FONode currentFObj = null; /** + * Current propertyList for the node being handled. + */ + protected PropertyList currentPropertyList; + + /** * The class that handles formatting and rendering to a stream * ([EMAIL PROTECTED]) */ @@ -188,7 +193,7 @@ public void characters(char[] data, int start, int length) throws SAXParseException { if (currentFObj != null) { - currentFObj.addCharacters(data, start, start + length, locator); + currentFObj.addCharacters(data, start, start + length, currentPropertyList, locator); } } @@ -226,6 +231,7 @@ /* the node found in the FO document */ FONode foNode; + PropertyList propertyList; // Check to ensure first node encountered is an fo:root if (rootFObj == null) { @@ -250,7 +256,9 @@ try { foNode = fobjMaker.make(currentFObj); - foNode.processNode(localName, locator, attlist); + propertyList = foNode.createPropertyList(currentPropertyList, foEventHandler); + foNode.processNode(localName, locator, attlist, propertyList); + foNode.startOfNode(); } catch (IllegalArgumentException e) { throw new SAXException(e); } @@ -263,6 +271,9 @@ } currentFObj = foNode; + if (propertyList != null) { + currentPropertyList = propertyList; + } } /** @@ -277,6 +288,9 @@ throw e; } + if (currentPropertyList.getFObj() == currentFObj) { + currentPropertyList = currentPropertyList.getParentPropertyList(); + } currentFObj = currentFObj.getParent(); } @@ -341,7 +355,6 @@ rootFObj = null; foEventHandler = null; } - } // code stolen from org.apache.batik.util and modified slightly 1.80 +7 -112 xml-fop/src/java/org/apache/fop/fo/FObj.java Index: FObj.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FObj.java,v retrieving revision 1.79 retrieving revision 1.80 diff -u -r1.79 -r1.80 --- FObj.java 18 Oct 2004 20:15:19 -0000 1.79 +++ FObj.java 19 Oct 2004 12:52:09 -0000 1.80 @@ -97,9 +97,12 @@ * @see org.apache.fop.fo.FONode#processNode */ public void processNode(String elementName, Locator locator, - Attributes attlist) throws SAXParseException { + Attributes attlist, PropertyList pList) throws SAXParseException { setLocator(locator); - addProperties(attlist); + propertyList.addAttributesToList(attlist); + propertyList.setWritingMode(); + bind(propertyList); + propMgr = new PropertyManager(propertyList); } /** @@ -107,7 +110,8 @@ */ protected PropertyList createPropertyList(PropertyList parent, FOEventHandler foEventHandler) throws SAXParseException { //return foEventHandler.getPropertyListMaker().make(this, parent); - return null; + propertyList = new StaticPropertyList(this, parent); + return propertyList; } /** @@ -140,49 +144,6 @@ } /** - * Set properties for this FO based on node attributes - * @param attlist Collection of attributes passed to us from the parser. - */ - protected void addProperties(Attributes attlist) throws SAXParseException { - FObj parentFO = findNearestAncestorFObj(); - PropertyList parentPL = null; - - if (parentFO != null) { - parentPL = parentFO.getPropertiesForNamespace(FO_URI); - } - - propertyList = new PropertyList(this, parentPL, FO_URI); - propertyList.addAttributesToList(attlist); - propMgr = new PropertyManager(propertyList); - setWritingMode(); - - // if this FO can have a PR_ID, make sure it is unique - if (PropertySets.canHaveId(getNameId())) { - setupID(); - } - } - - /** - * Setup the id for this formatting object. - * Most formatting objects can have an id that can be referenced. - * This methods checks that the id isn't already used by another - * fo and sets the id attribute of this object. - */ - private void setupID() throws SAXParseException { - String str = getPropString(PR_ID); - if (str != null && !str.equals("")) { - Set idrefs = getFOEventHandler().getIDReferences(); - if (!idrefs.contains(str)) { - idrefs.add(str); - } else { - throw new SAXParseException("Property id \"" + str + - "\" previously used; id values must be unique" + - " in document.", locator); - } - } - } - - /** * Returns Out Of Line FO Descendant indicator. * @return true if Out of Line FO or Out Of Line descendant, false otherwise */ @@ -280,61 +241,6 @@ return (FObj) par; } - /** - * Find nearest ancestor which generates Reference Areas. - * - * @param includeSelf Set to true to consider the current FObj as an - * "ancestor". Set to false to only return a true ancestor. - * @param returnRoot Supposing a condition where no appropriate ancestor - * FObj is found, setting returnRoot to true will return the FObj with no - * parent (presumably the root FO). Otherwise, null will be returned. - * Note that this will override a false setting for includeSelf, and return - * the current node if it is the root FO. Setting returnRoot to true should - * always return a valid FObj. - * @return FObj of the nearest ancestor that generates Reference Areas - * and fits the parameters. - */ - private FObj findNearestAncestorGeneratingRAs(boolean includeSelf, - boolean returnRoot) { - FObj p = this; - if (includeSelf && p.generatesReferenceAreas()) { - return p; - } - FObj parent = p.findNearestAncestorFObj(); - if (parent == null && returnRoot) { - return p; - } - do { - p = parent; - parent = p.findNearestAncestorFObj(); - } while (parent != null && !p.generatesReferenceAreas()); - if (p.generatesReferenceAreas()) { - return p; - } - // if we got here, it is because parent is null - if (returnRoot) { - return p; - } else { - return null; - } - } - - /** - * For a given namespace, determine whether the properties of this object - * match that namespace. - * @param nameSpaceURI the namespace URI to be tested against - * @return this.propertyList, if the namespaces match; otherwise, null - */ - public PropertyList getPropertiesForNamespace(String nameSpaceURI) { - if (this.propertyList == null) { - return null; - } - if (!nameSpaceURI.equals(this.propertyList.getNameSpace())) { - return null; - } - return this.propertyList; - } - /* This section is the implemenation of the property context. */ /** @@ -386,17 +292,6 @@ */ public boolean generatesReferenceAreas() { return false; - } - - /** - * Set writing mode for this FO. - * Use that from the nearest ancestor, including self, which generates - * reference areas, or from root FO if no ancestor found. - */ - protected void setWritingMode() { - FObj p = findNearestAncestorGeneratingRAs(true, true); - this.propertyList.setWritingMode( - p.getPropEnum(PR_WRITING_MODE)); } /** 1.12 +2 -2 xml-fop/src/java/org/apache/fop/fo/UnknownXMLObj.java Index: UnknownXMLObj.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/UnknownXMLObj.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- UnknownXMLObj.java 6 Sep 2004 20:54:59 -0000 1.11 +++ UnknownXMLObj.java 19 Oct 2004 12:52:09 -0000 1.12 @@ -82,11 +82,11 @@ * @see XMLObj#addCharacters */ protected void addCharacters(char data[], int start, int length, - Locator locator) { + PropertyList pList, Locator locator) { if (doc == null) { createBasicDocument(); } - super.addCharacters(data, start, length, locator); + super.addCharacters(data, start, length, pList, locator); } } 1.18 +2 -2 xml-fop/src/java/org/apache/fop/fo/XMLObj.java Index: XMLObj.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/XMLObj.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- XMLObj.java 5 Sep 2004 04:00:52 -0000 1.17 +++ XMLObj.java 19 Oct 2004 12:52:09 -0000 1.18 @@ -69,7 +69,7 @@ * @see org.apache.fop.fo.FONode#processNode */ public void processNode(String elementName, Locator locator, - Attributes attlist) throws SAXParseException { + Attributes attlist, PropertyList propertyList) throws SAXParseException { setLocator(locator); name = elementName; attr = attlist; @@ -211,7 +211,7 @@ * @param locator location in fo source file. */ protected void addCharacters(char data[], int start, int length, - Locator locator) { + PropertyList pList, Locator locator) { String str = new String(data, start, length - start); org.w3c.dom.Text text = doc.createTextNode(str); element.appendChild(text); 1.12 +4 -3 xml-fop/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java Index: SVGElement.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- SVGElement.java 4 Aug 2004 22:21:03 -0000 1.11 +++ SVGElement.java 19 Oct 2004 12:52:09 -0000 1.12 @@ -20,6 +20,7 @@ // FOP import org.apache.fop.fo.FONode; +import org.apache.fop.fo.PropertyList; import org.apache.batik.dom.svg.SVGOMDocument; import org.apache.batik.dom.svg.SVGOMElement; @@ -61,8 +62,8 @@ * @see org.apache.fop.fo.FONode#processNode */ public void processNode(String elementName, Locator locator, - Attributes attlist) throws SAXParseException { - super.processNode(elementName, locator, attlist); + Attributes attlist, PropertyList propertyList) throws SAXParseException { + super.processNode(elementName, locator, attlist, propertyList); init(); }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]