pbwest 2002/06/27 20:24:42 Modified: src/org/apache/fop/fo Tag: FOP_0-20-0_Alt-Design PropertySets.java Log: Added methods to support shorthand expansion Revision Changes Path No revision No revision 1.1.2.7 +92 -17 xml-fop/src/org/apache/fop/fo/Attic/PropertySets.java Index: PropertySets.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/Attic/PropertySets.java,v retrieving revision 1.1.2.6 retrieving revision 1.1.2.7 diff -u -r1.1.2.6 -r1.1.2.7 --- PropertySets.java 27 Jun 2002 12:55:18 -0000 1.1.2.6 +++ PropertySets.java 28 Jun 2002 03:24:42 -0000 1.1.2.7 @@ -15,6 +15,9 @@ import java.util.Set; import java.util.HashSet; import java.util.HashMap; +import java.util.List; +import java.util.ListIterator; +import java.util.Arrays; import java.util.Collections; import org.apache.fop.fo.expr.PropertyException; @@ -637,8 +640,8 @@ /** * Array of <i>ROIntArray</i> <b>in same order as <i>shorthands</></b> * <i>ROIntArray</i>. - * <p><b>TODO:</b> Full paranoia mode requires that this array - * be expressed in a new data type <i>ROIntROArray</i>. + * If a public view of this is required, use + * Collections.unmodifiableList(Arrays.asList(shorthandExpansions)) */ private static final ROIntArray[] shorthandExpansions = { backgroundExpansion @@ -668,6 +671,29 @@ }; /** + * @param property <tt>int</tt> property index + * @return <tt>ROIntArray</tt> containing the expansion list for + * this shorthand. + * @exception <tt>PropertyException</tt> if this is not a valid + * shorthand property + */ + public static ROIntArray getSHandExpansionSet(int property) + throws PropertyException + { + // Is the property of the argument a shorthand? + Integer sHIndex = + (Integer)(shorthandMap.get(Ints.consts.get(property))); + if (sHIndex == null) { + String propname = PropNames.getPropertyName(property); + throw new PropertyException + (propname + " not a shorthand property"); + } + // Get the array of indices of the properties in the + // expansion of this shorthand + return shorthandExpansions[property]; + } + + /** * Expand the shorthand property associated with the * <tt>PropertyValue</tt> argument by copying the given value for each * property in the expansion. The <em>property</em> field of each @@ -685,18 +711,7 @@ { // The property associated with this PropertyValue int property = value.getProperty(); - // Is the property of the argument a shorthand? - Integer sHIndex = - (Integer)(shorthandMap.get(Ints.consts.get(property))); - if (sHIndex == null) { - String propname = PropNames.getPropertyName(property); - throw new PropertyException - (propname + " not a shorthand property"); - } - - // Get the array of indices of the properties in the - // expansion of this shorthand - ROIntArray expansion = shorthandExpansions[property]; + ROIntArray expansion = getSHandExpansionSet(property); PropertyValueList list = new PropertyValueList(property); for (int i = 0; i < expansion.length; i++) { int expandedProp = expansion.get(i); @@ -712,6 +727,66 @@ list.add(expandedPropValue); } return list; + } + + /** + * Generate a list of the intial values of each property in a + * shorthand expansion + * @param foTree the <tt>FOTree</tt> for which properties are being + * processed + * @param property <tt>int</tt> property index + * @return <tt>PropertyValueList</tt> containing the intial value + * expansions for the (shorthand) property + * @exception <tt>PropertyException</tt> + */ + public static PropertyValueList initialValueExpansion + (FOTree foTree, int property) + throws PropertyException + { + ROIntArray expansion = getSHandExpansionSet(property); + PropertyValueList list = new PropertyValueList(property); + for (int i = 0; i < expansion.length; i++) { + int expandedProp = expansion.get(i); + PropertyValue expandedPropValue; + PropertyValue specified = + foTree.getInitialValue(expandedProp).getSpecified(); + // The PropertyValue must be cloneable + try { + expandedPropValue = (PropertyValue)(specified.clone()); + } catch (CloneNotSupportedException e) { + throw new PropertyException(e.getMessage()); + } + + list.add(expandedPropValue); + } + return list; + } + + /** + * Given a shorthand expansion list and a <tt>PropertyValue</tt>, + * override the list element corresponding to the <tt>PropertyValue</tt>. + * Correspondence is based on the <em>property</em> field of the + * <tt>PropertyValue</tt>. + * @param list the expansion <tt>PropertyValueList</tt> + * @param value the overriding <tt>PropertyValue</tt> + * @return <tt>PropertyValueList</tt> the new list + */ + public static PropertyValueList overrideSHandElement + (PropertyValueList expansionList, PropertyValue element) + throws PropertyException + { + int elementProp = element.getProperty(); + ListIterator elements = expansionList.listIterator(); + while (elements.hasNext()) { + PropertyValue next = (PropertyValue)(elements.next()); + if (next.getProperty() == elementProp) { + elements.set(element); + return expansionList; + } + } + throw new PropertyException + ("Unmatched property " + elementProp + + " in expansion list for " + expansionList.getProperty()); } private PropertySets (){}
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]