diff options
Diffstat (limited to 'src/java/org/apache/fop/fo')
-rw-r--r-- | src/java/org/apache/fop/fo/FONode.java | 46 | ||||
-rw-r--r-- | src/java/org/apache/fop/fo/FObj.java | 2 | ||||
-rw-r--r-- | src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java | 25 | ||||
-rw-r--r-- | src/java/org/apache/fop/fo/flow/Inline.java | 6 | ||||
-rw-r--r-- | src/java/org/apache/fop/fo/flow/Leader.java | 5 | ||||
-rw-r--r-- | src/java/org/apache/fop/fo/flow/Marker.java | 2 | ||||
-rw-r--r-- | src/java/org/apache/fop/fo/flow/RetrieveMarker.java | 2 | ||||
-rw-r--r-- | src/java/org/apache/fop/fo/properties/PropertyCache.java | 32 |
8 files changed, 83 insertions, 37 deletions
diff --git a/src/java/org/apache/fop/fo/FONode.java b/src/java/org/apache/fop/fo/FONode.java index 99d133f16..c66259f11 100644 --- a/src/java/org/apache/fop/fo/FONode.java +++ b/src/java/org/apache/fop/fo/FONode.java @@ -405,6 +405,27 @@ public abstract class FONode implements Cloneable { } /** + * Helper function to obtain standard usage prefix for FOP related + * namespace URIs. + * @param namespaceURI URI of node found + * (e.g., "http://www.w3.org/1999/XSL/Format") + * @return the prefix or null if none + */ + public static String getNodePrefix(String namespaceURI) { + if (namespaceURI.equals(FOElementMapping.URI)) { + return "fo"; + } else if (namespaceURI.equals(ExtensionElementMapping.URI)) { + return "fox"; + } else if (namespaceURI.equals(InternalElementMapping.URI)) { + return "foi"; + } else if (namespaceURI.equals(SVGElementMapping.URI)) { + return "svg"; + } else { + return null; + } + } + + /** * Helper function to standardize the names of all namespace URI - local * name pairs in text messages. * For readability, using fo:, fox:, svg:, for those namespaces even @@ -416,14 +437,9 @@ public abstract class FONode implements Cloneable { * with the unabbreviated URI otherwise. */ public static String getNodeString(String namespaceURI, String localName) { - if (namespaceURI.equals(FOElementMapping.URI)) { - return "fo:" + localName; - } else if (namespaceURI.equals(ExtensionElementMapping.URI)) { - return "fox:" + localName; - } else if (namespaceURI.equals(InternalElementMapping.URI)) { - return "foi:" + localName; // used FOP internally for accessibility - } else if (namespaceURI.equals(SVGElementMapping.URI)) { - return "svg:" + localName; + String prefix = getNodePrefix ( namespaceURI ); + if ( prefix != null ) { + return prefix + ":" + localName; } else { return "(Namespace URI: \"" + namespaceURI + "\", " + "Local Name: \"" + localName + "\")"; @@ -527,16 +543,22 @@ public abstract class FONode implements Cloneable { * * @param loc org.xml.sax.Locator object of the error (*not* parent node) * @param parentName the name of the parent element - * @param nsURI namespace URI of incoming invalid node - * @param lName local name (i.e., no prefix) of incoming node + * @param nsURI namespace URI of incoming offending node + * @param lName local name (i.e., no prefix) of incoming offending node * @param ruleViolated name of the rule violated (used to lookup a resource in a bundle) * @throws ValidationException the validation error provoked by the method call */ protected void invalidChildError(Locator loc, String parentName, String nsURI, String lName, String ruleViolated) throws ValidationException { - getFOValidationEventProducer().invalidChild(this, parentName, - new QName(nsURI, lName), ruleViolated, loc); + String prefix = getNodePrefix ( nsURI ); + QName qn; // qualified name of offending node + if ( prefix != null ) { + qn = new QName(nsURI, prefix, lName); + } else { + qn = new QName(nsURI, lName); + } + getFOValidationEventProducer().invalidChild(this, parentName, qn, ruleViolated, loc); } /** diff --git a/src/java/org/apache/fop/fo/FObj.java b/src/java/org/apache/fop/fo/FObj.java index f1d78acf1..241a442ab 100644 --- a/src/java/org/apache/fop/fo/FObj.java +++ b/src/java/org/apache/fop/fo/FObj.java @@ -501,7 +501,7 @@ public abstract class FObj extends FONode implements Constants { * @param lName local name (i.e., no prefix) of incoming node * @return true if a member, false if not */ - boolean isNeutralItem(String nsURI, String lName) { + protected boolean isNeutralItem(String nsURI, String lName) { return (FO_URI.equals(nsURI) && ("multi-switch".equals(lName) || "multi-properties".equals(lName) diff --git a/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java b/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java index 51ae7441d..62c821504 100644 --- a/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java +++ b/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java @@ -103,17 +103,30 @@ public abstract class AbstractRetrieveMarker extends FObjMixed { pList, newPropertyList); addChildTo(newChild, newParent); - if (newChild.getNameId() == FO_TABLE) { + switch ( newChild.getNameId() ) { + case FO_TABLE: Table t = (Table) child; cloneSubtree(t.getColumns().iterator(), - newChild, marker, newPropertyList); + newChild, marker, newPropertyList); cloneSingleNode(t.getTableHeader(), - newChild, marker, newPropertyList); + newChild, marker, newPropertyList); cloneSingleNode(t.getTableFooter(), - newChild, marker, newPropertyList); + newChild, marker, newPropertyList); + cloneSubtree(child.getChildNodes(), + newChild, marker, newPropertyList); + break; + case FO_LIST_ITEM: + ListItem li = (ListItem) child; + cloneSingleNode(li.getLabel(), + newChild, marker, newPropertyList); + cloneSingleNode(li.getBody(), + newChild, marker, newPropertyList); + break; + default: + cloneSubtree(child.getChildNodes(), + newChild, marker, newPropertyList); + break; } - cloneSubtree(child.getChildNodes(), newChild, - marker, newPropertyList); } else if (child instanceof FOText) { FOText ft = (FOText) newChild; ft.bind(parentPropertyList); diff --git a/src/java/org/apache/fop/fo/flow/Inline.java b/src/java/org/apache/fop/fo/flow/Inline.java index debf6bbf6..941850cdd 100644 --- a/src/java/org/apache/fop/fo/flow/Inline.java +++ b/src/java/org/apache/fop/fo/flow/Inline.java @@ -116,9 +116,9 @@ public class Inline extends InlineLevel { } } else if (!isBlockOrInlineItem(nsURI, localName)) { invalidChildError(loc, nsURI, localName); - } else if (!canHaveBlockLevelChildren && isBlockItem(nsURI, localName)) { - invalidChildError(loc, getParent().getName(), nsURI, getName(), - "rule.inlineContent"); + } else if (!canHaveBlockLevelChildren && isBlockItem(nsURI, localName) + && !isNeutralItem(nsURI, localName)) { + invalidChildError(loc, getName(), nsURI, localName, "rule.inlineContent"); } else { blockOrInlineItemFound = true; } diff --git a/src/java/org/apache/fop/fo/flow/Leader.java b/src/java/org/apache/fop/fo/flow/Leader.java index ce166b114..4062d6562 100644 --- a/src/java/org/apache/fop/fo/flow/Leader.java +++ b/src/java/org/apache/fop/fo/flow/Leader.java @@ -79,7 +79,8 @@ public class Leader extends InlineLevel { leaderLength = pList.get(PR_LEADER_LENGTH).getLengthRange(); leaderPattern = pList.get(PR_LEADER_PATTERN).getEnum(); leaderPatternWidth = pList.get(PR_LEADER_PATTERN_WIDTH).getLength(); - ruleThickness = pList.get(PR_RULE_THICKNESS).getLength(); + // use default rule thickness as a default + ruleThickness = getPropertyMakerFor(PR_RULE_THICKNESS).make(pList).getLength(); switch(leaderPattern) { case EN_SPACE: // use Space @@ -88,6 +89,8 @@ public class Leader extends InlineLevel { // the following properties only apply // for leader-pattern = "rule" ruleStyle = pList.get(PR_RULE_STYLE).getEnum(); + // use specified rule thickness to override default (established above) + ruleThickness = pList.get(PR_RULE_THICKNESS).getLength(); break; case EN_DOTS: break; diff --git a/src/java/org/apache/fop/fo/flow/Marker.java b/src/java/org/apache/fop/fo/flow/Marker.java index bff5fac0c..de806e986 100644 --- a/src/java/org/apache/fop/fo/flow/Marker.java +++ b/src/java/org/apache/fop/fo/flow/Marker.java @@ -59,7 +59,7 @@ public class Marker extends FObjMixed { /** {@inheritDoc} */ public void bind(PropertyList pList) throws FOPException { if (findAncestor(FO_FLOW) < 0) { - invalidChildError(locator, getParent().getName(), FO_URI, getName(), + invalidChildError(locator, getParent().getName(), FO_URI, getLocalName(), "rule.markerDescendantOfFlow"); } diff --git a/src/java/org/apache/fop/fo/flow/RetrieveMarker.java b/src/java/org/apache/fop/fo/flow/RetrieveMarker.java index 5ddc1f304..5fc70c7f2 100644 --- a/src/java/org/apache/fop/fo/flow/RetrieveMarker.java +++ b/src/java/org/apache/fop/fo/flow/RetrieveMarker.java @@ -60,7 +60,7 @@ public class RetrieveMarker extends AbstractRetrieveMarker { PropertyList pList) throws FOPException { if (findAncestor(FO_STATIC_CONTENT) < 0) { - invalidChildError(locator, getParent().getName(), FO_URI, getName(), + invalidChildError(locator, getParent().getName(), FO_URI, getLocalName(), "rule.retrieveMarkerDescendantOfStaticContent"); } else { super.processNode(elementName, locator, attlist, pList); diff --git a/src/java/org/apache/fop/fo/properties/PropertyCache.java b/src/java/org/apache/fop/fo/properties/PropertyCache.java index d08164b6c..f35ab2dad 100644 --- a/src/java/org/apache/fop/fo/properties/PropertyCache.java +++ b/src/java/org/apache/fop/fo/properties/PropertyCache.java @@ -76,20 +76,28 @@ public final class PropertyCache<T> { * (case insensitive). */ public PropertyCache() { - this.useCache = Boolean.valueOf( - System.getProperty("org.apache.fop.fo.properties.use-cache", "true")) - .booleanValue(); - if (useCache) { - map = new ConcurrentHashMap<Integer, WeakReference<T>>(); - putCounter = new AtomicInteger(); - cleanupLock = new ReentrantLock(); - hashCodeCollisionCounter = new AtomicInteger(); + boolean useCache; + try { + useCache = Boolean.valueOf( + System.getProperty("org.apache.fop.fo.properties.use-cache", "true")) + .booleanValue(); + } catch ( SecurityException e ) { + useCache = true; + LOG.info("Unable to access org.apache.fop.fo.properties.use-cache" + + " due to security restriction; defaulting to 'true'."); + } + if ( useCache ) { + this.map = new ConcurrentHashMap<Integer, WeakReference<T>>(); + this.putCounter = new AtomicInteger(); + this.cleanupLock = new ReentrantLock(); + this.hashCodeCollisionCounter = new AtomicInteger(); } else { - map = null; - putCounter = null; - cleanupLock = null; - hashCodeCollisionCounter = null; + this.map = null; + this.putCounter = null; + this.cleanupLock = null; + this.hashCodeCollisionCounter = null; } + this.useCache = useCache; } /** |