Browse Source

Bug 25803 (patch by Simon Pepping): Fix bug occurring when a compound property

is specified (e.g. "leader-length.maximum") before its base property (e.g. "leader-length").


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197095 13f79535-47bb-0310-9956-ffa450edef68
pull/30/head
Glen Mazza 20 years ago
parent
commit
e80e494cd5
1 changed files with 23 additions and 9 deletions
  1. 23
    9
      src/java/org/apache/fop/fo/PropertyList.java

+ 23
- 9
src/java/org/apache/fop/fo/PropertyList.java View File

* @return The value if the property is explicitly set, otherwise null. * @return The value if the property is explicitly set, otherwise null.
*/ */
public Property getExplicitBaseProp(String propertyName) { public Property getExplicitBaseProp(String propertyName) {
return (Property)super.get(propertyName);
return (Property) super.get(propertyName);
} }


/** /**
} }
try { try {
Property prop = null; Property prop = null;
if (subPropertyName == null) {
if (subPropertyName == null) { // base attribute only found
/* Do nothing if the base property has already been created.
* This is e.g. the case when a compound attribute was
* specified before the base attribute; in these cases
* the base attribute was already created in
* findBaseProperty()
*/
if (getExplicitBaseProp(basePropertyName) != null) {
return;
}
prop = propertyMaker.make(this, attributeValue, parentFO); prop = propertyMaker.make(this, attributeValue, parentFO);
} else {
} else { // e.g. "leader-length.maximum"
Property baseProperty = findBaseProperty(attributes, Property baseProperty = findBaseProperty(attributes,
parentFO, basePropertyName, propertyMaker); parentFO, basePropertyName, propertyMaker);
prop = propertyMaker.make(baseProperty, subPropertyName, prop = propertyMaker.make(baseProperty, subPropertyName,
String basePropName, String basePropName,
Maker propertyMaker) Maker propertyMaker)
throws FOPException { throws FOPException {
// If the baseProperty has already been created, return it

/* If the baseProperty has already been created, return it
* e.g. <fo:leader xxxx="120pt" xxxx.maximum="200pt"... />
*/
Property baseProperty = getExplicitBaseProp(basePropName); Property baseProperty = getExplicitBaseProp(basePropName);
if (baseProperty != null) { if (baseProperty != null) {
return baseProperty; return baseProperty;
} }
// If it is specified later in this list of Attributes, create it

/* Otherwise If it is specified later in this list of Attributes, create it now
* e.g. <fo:leader xxxx.maximum="200pt" xxxx="200pt"... />
*/
String basePropertyValue = attributes.getValue(basePropName); String basePropertyValue = attributes.getValue(basePropName);
if (basePropertyValue != null) { if (basePropertyValue != null) {
int propertyId = FOPropertyMapping.getPropertyId(basePropertyValue);
int propertyId = FOPropertyMapping.getPropertyId(basePropName);
if (propertyId != -1) { if (propertyId != -1) {
baseProperty = propertyMaker.make(this, basePropertyValue, baseProperty = propertyMaker.make(this, basePropertyValue,
parentFO); parentFO);
return baseProperty; return baseProperty;
} }
} }
// Otherwise it is a compound property ??
// baseProperty = propertyMaker.makeCompound(propertyList, parentFO);
return baseProperty;
return null; // could not find base property
} }


private void handleInvalidProperty(String attributeName) { private void handleInvalidProperty(String attributeName) {

Loading…
Cancel
Save