aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/fop/fo
diff options
context:
space:
mode:
authorVincent Hennebert <vhennebert@apache.org>2012-04-13 16:49:35 +0000
committerVincent Hennebert <vhennebert@apache.org>2012-04-13 16:49:35 +0000
commita438a377ef974181a4b0a71f9d399e31f654588b (patch)
tree0eb9720c40f65c19437f731db0b34483e9f9b545 /src/java/org/apache/fop/fo
parent55c1f8be3cf6da96f690f34743d47ecee95243bb (diff)
parent50b34f584998b9083b07ec018d84dd38b96e732c (diff)
downloadxmlgraphics-fop-a438a377ef974181a4b0a71f9d399e31f654588b.tar.gz
xmlgraphics-fop-a438a377ef974181a4b0a71f9d399e31f654588b.zip
Merged changes from trunk up to rev. 1325806
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_TrueTypeInPostScript@1325839 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/fop/fo')
-rw-r--r--src/java/org/apache/fop/fo/FONode.java46
-rw-r--r--src/java/org/apache/fop/fo/FObj.java2
-rw-r--r--src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java25
-rw-r--r--src/java/org/apache/fop/fo/flow/Inline.java6
-rw-r--r--src/java/org/apache/fop/fo/flow/Leader.java5
-rw-r--r--src/java/org/apache/fop/fo/flow/Marker.java2
-rw-r--r--src/java/org/apache/fop/fo/flow/RetrieveMarker.java2
-rw-r--r--src/java/org/apache/fop/fo/properties/PropertyCache.java32
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;
}
/**