pbwest 2004/04/27 08:20:22
Modified: src/java/org/apache/fop/fo/properties Tag:
FOP_0-20-0_Alt-Design Property.java
src/java/org/apache/fop/fo Tag: FOP_0-20-0_Alt-Design
FONode.java
Log:
More work on border corresponding properties;
Resolving compound corresponding properties
Revision Changes Path
No revision
No revision
1.1.2.13 +61 -17 xml-fop/src/java/org/apache/fop/fo/properties/Property.java
Index: Property.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/properties/Property.java,v
retrieving revision 1.1.2.12
retrieving revision 1.1.2.13
diff -u -r1.1.2.12 -r1.1.2.13
--- Property.java 24 Apr 2004 13:43:25 -0000 1.1.2.12
+++ Property.java 27 Apr 2004 15:20:21 -0000 1.1.2.13
@@ -366,7 +366,7 @@
/**
* Do the work for the three argument refineParsing method.
- * @param property - the <tt>int</tt> property index.
+ * @param propindex - the <tt>int</tt> property index.
* @param foNode - the <tt>FONode</tt> being built
* @param value - <tt>PropertyValue</tt> returned by the parser
* @param nested - <tt>boolean</tt> indicating whether this method is
@@ -374,17 +374,17 @@
* method.
* @see #refineParsing(int,FONode,PropertyValue)
*/
- public PropertyValue refineParsing(int property,
+ public PropertyValue refineParsing(int propindex,
FONode foNode, PropertyValue value, boolean nested)
throws PropertyException
{
- //int property = value.getProperty();
- if (property != value.getProperty()) // DEBUG
+ //int propindex = value.getProperty();
+ if (propindex != value.getProperty()) // DEBUG
throw new PropertyException
("Mismatched property and value.property.");
- String propName = PropNames.getPropertyName(property);
+ String propName = PropNames.getPropertyName(propindex);
int proptype = value.getType();
- int dataTypes = PropertyConsts.pconsts.getDataTypes(property);
+ int dataTypes = PropertyConsts.pconsts.getDataTypes(propindex);
PropertyValue pv;
if ((dataTypes & AURAL) != 0)
throw new PropertyNotImplementedException
@@ -411,16 +411,16 @@
if ((dataTypes & (NCNAME | CHARACTER_T)) != 0)
return value;
if ((dataTypes & COUNTRY_T) != 0)
- return new CountryType(property, ncname);
+ return new CountryType(propindex, ncname);
if ((dataTypes & LANGUAGE_T) != 0)
- return new LanguageType(property, ncname);
+ return new LanguageType(propindex, ncname);
if ((dataTypes & SCRIPT_T) != 0)
- return new ScriptType(property, ncname);
+ return new ScriptType(propindex, ncname);
if ((dataTypes & ENUM) != 0)
- return new EnumType(property, ncname);
+ return new EnumType(propindex, ncname);
if ((dataTypes & MAPPED_LENGTH) != 0)
return (new MappedNumeric
- (foNode, property, ncname)).getMappedNumValue();
+ (foNode, propindex, ncname)).getMappedNumValue();
throw new PropertyException
("NCName value invalid for " + propName);
case PropertyValue.ENUM:
@@ -480,10 +480,54 @@
("PropertyValueList passed to Property.refineParsing for "
+ propName + "\n" + value.toString());
default:
+ // The COMPOUND test was orginally protected by the
+ // if ( ! nested) fence. Only within Font, Border and
+ // Background shorthands is refineParsing called with a
+ // nested value of 'true'. This may cause problems, in which case
+ // the COMPOUND processing will have to be repeated within the
+ // (property instanceof CorrespondingProperty) case.
+ if ((dataTypes & COMPOUND) != 0)
+ return ShorthandPropSets.expandCompoundProperty
+ (foNode.getFOTree(), value);
if ( ! nested) {
- if ((dataTypes & COMPOUND) != 0)
- return ShorthandPropSets.expandCompoundProperty
- (foNode.getFOTree(), value);
+ int correspIndex = 0;
+ Property property =
+ PropertyConsts.pconsts.getProperty(propindex);
+ if (property instanceof CorrespondingProperty) {
+ correspIndex =
+ ((CorrespondingProperty)property)
+ .getCorrespondingProperty(foNode);
+ // Note - can't call refineParsing recursively to resolve
+ // corresponding compounds, because the compound is itself
+ // a corresponding property
+ // Create a list, containing this PropertyValue on
+ // the original property, plus the value on the
+ // expansion of the corresponding property
+ PropertyValueList newlist =
+ new PropertyValueList(propindex);
+ newlist.add(value);
+ PropertyValue corresPv = null;
+ try {
+ corresPv = (PropertyValue)(value.clone());
+ } catch (CloneNotSupportedException e) {
+ throw new PropertyException(e.getMessage());
+ }
+ corresPv.setProperty(correspIndex);
+ corresPv = PropertyConsts.pconsts.refineParsing(
+ corresPv.getProperty(), foNode,
+ corresPv, IS_NESTED);
+// if it's a list, recursively refine. This will return a list
+ if (corresPv.getType() == PropertyValue.LIST) {
+ PropertyValueList pvl =
+ refineExpansionList(
+ corresPv.getProperty(), foNode,
+ (PropertyValueList)corresPv);
+ newlist.addAll(pvl);
+ } else { // single element
+ newlist.add(corresPv);
+ }
+ return newlist;
+ }
if (proptype == PropertyValue.INHERIT) {
if ((dataTypes & INHERIT) != 0)
return ((Inherit)value).resolve(foNode);
No revision
No revision
1.2.2.21 +8 -0 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.2.2.20
retrieving revision 1.2.2.21
diff -u -r1.2.2.20 -r1.2.2.21
--- FONode.java 26 Apr 2004 14:47:23 -0000 1.2.2.20
+++ FONode.java 27 Apr 2004 15:20:22 -0000 1.2.2.21
@@ -288,6 +288,14 @@
PropertyConsts.pconsts.getProperty(property);
specifiedProps.set(property);
// Handle corresponding properties here
+ // Note that the resolution of corresponding properties, like
+ // shorthands and compounds, relies on the ordering imposed by the
+ // property indices. Each property, in increasing index order, is
+ // processed as if it were the only relevant assignment. The lowest
+ // priority properties (among shorthands and their expansions,
+ // compounds and their expansions, and corresponding properties and
+ // their correspondents) are processed first, then higher priority
+ // assignments simply overwrite the earlier value assignments.
if (tempP instanceof CorrespondingProperty) {
// Update the propertySet
propertySet[property] = propval;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]