pbwest 2002/11/26 18:52:08 Modified: src/org/apache/fop/fo/properties Tag: FOP_0-20-0_Alt-Design BorderColor.java Log: Now extends ColorTransparent. Extracted processList() from refineParsing(). Fixed getColor() to try enumerated color before logging warning and attempting system-color. Revision Changes Path No revision No revision 1.1.2.4 +78 -66 xml-fop/src/org/apache/fop/fo/properties/Attic/BorderColor.java Index: BorderColor.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/properties/Attic/BorderColor.java,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -r1.1.2.3 -r1.1.2.4 --- BorderColor.java 31 Oct 2002 01:52:08 -0000 1.1.2.3 +++ BorderColor.java 27 Nov 2002 02:52:08 -0000 1.1.2.4 @@ -6,15 +6,17 @@ import org.apache.fop.datatypes.PropertyValue; import org.apache.fop.datatypes.ColorType; import org.apache.fop.datatypes.NCName; +import org.apache.fop.datatypes.EnumType; import org.apache.fop.fo.FONode; import org.apache.fop.fo.PropNames; import org.apache.fop.fo.ShorthandPropSets; import org.apache.fop.fo.properties.Property; +import org.apache.fop.messaging.MessageHandler; import java.util.Map; import java.util.Iterator; -public class BorderColor extends Property { +public class BorderColor extends ColorTransparent { public static final int dataTypes = SHORTHAND; public static final int traitMapping = SHORTHAND_MAP; public static final int initialValueType = NOTYPE_IT; @@ -78,75 +80,68 @@ return refineExpansionList(PropNames.BORDER_COLOR, foNode, ShorthandPropSets.expandAndCopySHand(value)); } - if (type == PropertyValue.COLOR_TYPE) - return refineExpansionList(PropNames.BORDER_COLOR, foNode, - ShorthandPropSets.expandAndCopySHand(value)); - if (type == PropertyValue.NCNAME) { - // Must be a standard color - ColorType color; - try { - color = new ColorType(PropNames.BORDER_COLOR, - ((NCName)value).getNCName()); - } catch (PropertyException e) { - throw new PropertyException - (((NCName)value).getNCName() + - " not a standard color for border-color"); - } - return refineExpansionList(PropNames.BORDER_COLOR, foNode, - ShorthandPropSets.expandAndCopySHand(color)); - } - else throw new PropertyException - ("Invalid " + value.getClass().getName() + - " value for border-color"); + // Form a list and pass to processList + PropertyValueList tmpList = new PropertyValueList(propindex); + tmpList.add(value); + return processList(tmpList); } else { if (nested) throw new PropertyException ("PropertyValueList invalid for nested border-color " + "refineParsing() method"); - // List may contain only multiple color specifiers - // i.e. ColorTypes or NCNames specifying a standard color or - // 'transparent'. - PropertyValueList list = - spaceSeparatedList((PropertyValueList)value); - ColorType top, left, bottom, right; - int count = list.size(); - if (count < 2 || count > 4) - throw new PropertyException - ("border-color list contains " + count + " items"); - - Iterator colors = list.iterator(); - - // There must be at least two - top = getColor((PropertyValue)(colors.next())); - right = getColor((PropertyValue)(colors.next())); - try { - bottom = (ColorType)(top.clone()); - left = (ColorType)(right.clone()); - } catch (CloneNotSupportedException cnse) { - throw new PropertyException - ("clone() not supported on ColorType"); - } + return processList(spaceSeparatedList((PropertyValueList)value)); + } + } + + private PropertyValueList processList(PropertyValueList list) + throws PropertyException + { + // List may contain only multiple color specifiers + // i.e. ColorTypes or NCNames specifying a standard color or + // 'transparent'. + ColorType top, left, bottom, right; + int count = list.size(); + if (count < 1 || count > 4) + throw new PropertyException + ("border-color list contains " + count + " items"); - if (colors.hasNext()) bottom - = getColor((PropertyValue)(colors.next())); - if (colors.hasNext()) left - = getColor((PropertyValue)(colors.next())); - - // Set the properties for each - top.setProperty(PropNames.BORDER_TOP_COLOR); - right.setProperty(PropNames.BORDER_RIGHT_COLOR); - bottom.setProperty(PropNames.BORDER_BOTTOM_COLOR); - left.setProperty(PropNames.BORDER_LEFT_COLOR); - - list = new PropertyValueList(PropNames.BORDER_COLOR); - list.add(top); - 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? - return list; + Iterator colors = list.iterator(); + + // There must be at least one + top = getColor((PropertyValue)(colors.next())); + + try { + if (colors.hasNext()) + right = getColor((PropertyValue)(colors.next())); + else + right = (ColorType)(top.clone()); + + bottom = (ColorType)(top.clone()); + left = (ColorType)(right.clone()); + } catch (CloneNotSupportedException cnse) { + throw new PropertyException + ("clone() not supported on ColorType"); } + + if (colors.hasNext()) + bottom = getColor((PropertyValue)(colors.next())); + if (colors.hasNext()) + left = getColor((PropertyValue)(colors.next())); + + // Set the properties for each + top.setProperty(PropNames.BORDER_TOP_COLOR); + right.setProperty(PropNames.BORDER_RIGHT_COLOR); + bottom.setProperty(PropNames.BORDER_BOTTOM_COLOR); + left.setProperty(PropNames.BORDER_LEFT_COLOR); + + list = new PropertyValueList(PropNames.BORDER_COLOR); + list.add(top); + 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? + return list; } /** @@ -171,13 +166,30 @@ + PropNames.getPropertyName(property)); // We have an NCName - hope it''s a color NCName ncname = (NCName)value; + // Must be a standard color + EnumType enum = null; + ColorType color = null; + String name = ncname.getNCName(); try { - return new ColorType(property, ncname.getNCName()); + try { + enum = new EnumType(PropNames.BORDER_COLOR, name); + } catch (PropertyException e) { + System.out.println("PropertyException: " + e.getMessage()); + MessageHandler.logln(name + + " is not a standard color for border-color." + + " Trying as a system-color."); + } + if (enum != null) + color = new ColorType(PropNames.BORDER_COLOR, + enum.getEnumValue()); + else + color = new ColorType(PropNames.BORDER_COLOR, name); } catch (PropertyException e) { throw new PropertyException - (ncname.getNCName() + " instead of color for " + (name + " not a standard or system color for " + PropNames.getPropertyName(property)); } + return color; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]