pbwest 2002/08/01 07:12:21 Modified: src/org/apache/fop/fo Tag: FOP_0-20-0_Alt-Design Properties.java Log: Added margin shorthand. Added Properties.autoOrDistance() for margin shorthand processing. Revision Changes Path No revision No revision 1.1.2.17 +128 -11 xml-fop/src/org/apache/fop/fo/Attic/Properties.java Index: Properties.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/Attic/Properties.java,v retrieving revision 1.1.2.16 retrieving revision 1.1.2.17 diff -u -r1.1.2.16 -r1.1.2.17 --- Properties.java 1 Aug 2002 03:59:56 -0000 1.1.2.16 +++ Properties.java 1 Aug 2002 14:12:20 -0000 1.1.2.17 @@ -644,6 +644,40 @@ } /** + * @param value <tt>PropertyValue</tt> the value being tested + * @param property <tt>int</tt> property index of returned value + * @return <tt>PropertyValue</t> the same value, with its property set + * to the <i>property</i> argument, if it is an Auto or a + * <tt>Numeric</tt> distance + * @exception <tt>PropertyException</tt> if the conditions are not met + */ + protected static PropertyValue autoOrDistance + (PropertyValue value, int property) + throws PropertyException + { + if (value instanceof Auto || + value instanceof Numeric && ((Numeric)value).isDistance()) { + value.setProperty(property); + return value; + } + else throw new PropertyException + ("Value not 'Auto' or a distance for " + + PropNames.getPropertyName(value.getProperty())); + } + + /** + * @param value <tt>PropertyValue</tt> the value being tested + * @return <tt>PropertyValue</t> the same value if it is an Auto or a + * <tt>Numeric</tt> distance + * @exception <tt>PropertyException</tt> if the conditions are not met + */ + protected static PropertyValue autoOrDistance(PropertyValue value) + throws PropertyException + { + return autoOrDistance(value, value.getProperty()); + } + + /** * Pseudo-property class for common border style values occurring in a * number of classes. */ @@ -2346,9 +2380,9 @@ list = new PropertyValueList(PropNames.BORDER_COLOR); list.add(top); - list.add(left); - list.add(bottom); list.add(right); + list.add(bottom); + list.add(left); // Question: if less than four colors have been specified in // the shorthand, what border-?-color properties, if any, // have been specified? @@ -2754,7 +2788,8 @@ public static PropertyValue getInitialValue(int property) throws PropertyException { - return new ColorType (PropNames.BACKGROUND_COLOR, ColorCommon.BLACK); + return + new ColorType(PropNames.BACKGROUND_COLOR, ColorCommon.BLACK); } public static final ROStringArray enums = ColorCommon.enums; @@ -2949,9 +2984,9 @@ list = new PropertyValueList(PropNames.BORDER_STYLE); list.add(top); - list.add(left); - list.add(bottom); list.add(right); + list.add(bottom); + list.add(left); // Question: if less than four styles have been specified in // the shorthand, what border-?-style properties, if any, // have been specified? @@ -3177,9 +3212,9 @@ list = new PropertyValueList(PropNames.BORDER_WIDTH); list.add(top); - list.add(left); - list.add(bottom); list.add(right); + list.add(bottom); + list.add(left); // Question: if less than four widths have been specified in // the shorthand, what border-?-width properties, if any, // have been specified? @@ -5300,6 +5335,88 @@ public static final int traitMapping = SHORTHAND_MAP; public static final int initialValueType = NOTYPE_IT; public static final int inherited = NO; + + /** + * 'value' is a PropertyValueList or an individual PropertyValue. + * + * <p>If 'value' is an individual PropertyValue, it must contain + * either + * a FromParent value, + * a FromNearestSpecified value, + * an Inherit value, + * an Auto value, + * a Numeric value which is a distance, rather than a number. + * + * <p>If 'value' is a PropertyValueList, it contains a list of + * 2 to 4 length, percentage or auto values representing margin + * dimensions. + * + * <p>The value(s) provided, if valid, are converted into a list + * containing the expansion of the shorthand. + * The first element is a value for margin-top, + * the second element is a value for margin-right, + * the third element is a value for margin-bottom, + * the fourth element is a value for margin-left. + * + * @param foTree the <tt>FOTree</tt> being built + * @param value <tt>PropertyValue</tt> returned by the parser + * @return <tt>PropertyValue</tt> the verified value + */ + public static PropertyValue verifyParsing + (FOTree foTree, PropertyValue value) + throws PropertyException + { + if ( ! (value instanceof PropertyValueList)) { + if (value instanceof Inherit + || value instanceof FromParent + || value instanceof FromNearestSpecified + ) + return PropertySets.expandAndCopySHand(value); + return PropertySets.expandAndCopySHand + (Properties.autoOrDistance(value)); + } else { + PropertyValueList list = + spaceSeparatedList((PropertyValueList)value); + PropertyValue top, left, bottom, right; + int count = list.size(); + if (count < 2 || count > 4) + throw new PropertyException + ("margin list contains " + count + " items"); + + Iterator margins = list.iterator(); + + // There must be at least two + top = Properties.autoOrDistance + ((PropertyValue)(margins.next()), PropNames.MARGIN_TOP); + left = Properties.autoOrDistance + ((PropertyValue)(margins.next()), PropNames.MARGIN_LEFT); + try { + bottom = (PropertyValue)(top.clone()); + bottom.setProperty(PropNames.MARGIN_BOTTOM); + right = (PropertyValue)(left.clone()); + right.setProperty(PropNames.MARGIN_RIGHT); + } catch (CloneNotSupportedException cnse) { + throw new PropertyException + (cnse.getMessage()); + } + + if (margins.hasNext()) + bottom = Properties.autoOrDistance( + (PropertyValue)(margins.next()), + PropNames.MARGIN_BOTTOM); + if (margins.hasNext()) + right = Properties.autoOrDistance( + (PropertyValue)(margins.next()), + PropNames.MARGIN_RIGHT); + + list = new PropertyValueList(PropNames.MARGIN); + list.add(top); + list.add(right); + list.add(bottom); + list.add(left); + return list; + } + } } public static class MarginBottom extends Properties { @@ -5310,7 +5427,7 @@ public static PropertyValue getInitialValue(int property) throws PropertyException { - return Length.makeLength (PropNames.MARGIN_BOTTOM, 0.0d, Length.PT); + return Length.makeLength(PropNames.MARGIN_BOTTOM, 0.0d, Length.PT); } public static final int inherited = NO; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]