diff options
author | Andreas L. Delmelle <adelmelle@apache.org> | 2011-02-01 20:47:54 +0000 |
---|---|---|
committer | Andreas L. Delmelle <adelmelle@apache.org> | 2011-02-01 20:47:54 +0000 |
commit | 0bf6f2900d0198f0af1974fd2bc6d4310093b21a (patch) | |
tree | f1edcb83a5698a32cb57c0188e69bda2109fa423 /src | |
parent | d8261a197b2d8cd10c3f171f2a3ca7e9f04f1302 (diff) | |
download | xmlgraphics-fop-0bf6f2900d0198f0af1974fd2bc6d4310093b21a.tar.gz xmlgraphics-fop-0bf6f2900d0198f0af1974fd2bc6d4310093b21a.zip |
Small cleanup: extract TextDecorationMaker, move validation into convertProperty() and eliminate unnecessary TextDecorationProperty
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1066198 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
3 files changed, 125 insertions, 169 deletions
diff --git a/src/java/org/apache/fop/fo/FOPropertyMapping.java b/src/java/org/apache/fop/fo/FOPropertyMapping.java index c32aca0f0..cf4eef3a5 100644 --- a/src/java/org/apache/fop/fo/FOPropertyMapping.java +++ b/src/java/org/apache/fop/fo/FOPropertyMapping.java @@ -62,7 +62,7 @@ import org.apache.fop.fo.properties.SpacePropertyMaker; import org.apache.fop.fo.properties.SpacingPropertyMaker; import org.apache.fop.fo.properties.StringProperty; import org.apache.fop.fo.properties.TableBorderPrecedence; -import org.apache.fop.fo.properties.TextDecorationProperty; +import org.apache.fop.fo.properties.TextDecorationMaker; import org.apache.fop.fo.properties.ToBeImplementedProperty; import org.apache.fop.fo.properties.URIProperty; import org.apache.fop.fo.properties.VerticalAlignShorthandParser; @@ -1695,7 +1695,7 @@ public final class FOPropertyMapping implements Constants { // text-decoration //m = new EnumProperty.Maker(PR_TEXT_DECORATION); - m = new TextDecorationProperty.Maker(PR_TEXT_DECORATION); + m = new TextDecorationMaker(PR_TEXT_DECORATION); m.setInherited(false); m.addEnum("none", getEnumProperty(EN_NONE, "NONE")); m.addEnum("underline", getEnumProperty(EN_UNDERLINE, "UNDERLINE")); diff --git a/src/java/org/apache/fop/fo/properties/TextDecorationMaker.java b/src/java/org/apache/fop/fo/properties/TextDecorationMaker.java new file mode 100644 index 000000000..de26934a0 --- /dev/null +++ b/src/java/org/apache/fop/fo/properties/TextDecorationMaker.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id$ */ + +package org.apache.fop.fo.properties; + +import java.util.List; + +import org.apache.fop.fo.Constants; +import org.apache.fop.fo.FObj; +import org.apache.fop.fo.PropertyList; +import org.apache.fop.fo.expr.NCnameProperty; +import org.apache.fop.fo.expr.PropertyException; + +/** + * Dedicated {@link org.apache.fop.fo.properties.PropertyMaker} for handling the + * <a href="http://www.w3.org/TR/xsl/#text-decoration"><code>text-decoration</code></a> + * property. + */ +public class TextDecorationMaker extends ListProperty.Maker { + + /** + * Create a maker for the given property id. + * @param propId id of the property for which a maker should be created + */ + public TextDecorationMaker(int propId) { + super(propId); + } + + /** + * {@inheritDoc} + * Add validation rules for the <code>text-decoration</code> property. + */ + @Override + public Property convertProperty(Property p, + PropertyList propertyList, + FObj fo) + throws PropertyException { + + ListProperty listProp = (ListProperty) super.convertProperty(p, propertyList, fo); + List lst = listProp.getList(); + boolean none = false; + boolean under = false; + boolean over = false; + boolean through = false; + boolean blink = false; + int enumValue; + for (int i = lst.size(); --i >= 0;) { + Property prop = (Property)lst.get(i); + if (prop instanceof NCnameProperty) { + prop = checkEnumValues(prop.getString()); + lst.set(i, prop); + } + enumValue = prop.getEnum(); + switch (enumValue) { + case Constants.EN_NONE: + if (under | over | through | blink) { + throw new PropertyException("Invalid combination of values"); + } + none = true; + break; + case Constants.EN_UNDERLINE: + case Constants.EN_NO_UNDERLINE: + case Constants.EN_OVERLINE: + case Constants.EN_NO_OVERLINE: + case Constants.EN_LINE_THROUGH: + case Constants.EN_NO_LINE_THROUGH: + case Constants.EN_BLINK: + case Constants.EN_NO_BLINK: + if (none) { + throw new PropertyException + ("'none' specified, no additional values allowed"); + } + switch (enumValue) { + case Constants.EN_UNDERLINE: + case Constants.EN_NO_UNDERLINE: + if (!under) { + under = true; + continue; + } + case Constants.EN_OVERLINE: + case Constants.EN_NO_OVERLINE: + if (!over) { + over = true; + continue; + } + case Constants.EN_LINE_THROUGH: + case Constants.EN_NO_LINE_THROUGH: + if (!through) { + through = true; + continue; + } + case Constants.EN_BLINK: + case Constants.EN_NO_BLINK: + if (!blink) { + blink = true; + continue; + } + default: + throw new PropertyException("Invalid combination of values"); + } + default: + throw new PropertyException("Invalid value specified: " + prop); + } + } + return listProp; + } +} diff --git a/src/java/org/apache/fop/fo/properties/TextDecorationProperty.java b/src/java/org/apache/fop/fo/properties/TextDecorationProperty.java deleted file mode 100644 index bcd41fb20..000000000 --- a/src/java/org/apache/fop/fo/properties/TextDecorationProperty.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* $Id$ */ - -package org.apache.fop.fo.properties; - -import java.util.Iterator; -import java.util.List; - -import org.apache.fop.fo.Constants; -import org.apache.fop.fo.FObj; -import org.apache.fop.fo.PropertyList; -import org.apache.fop.fo.expr.NCnameProperty; -import org.apache.fop.fo.expr.PropertyException; - -/** - * Special list property for text-decoration. - */ -public class TextDecorationProperty extends ListProperty { - - /** - * Inner class for creating instances of ListProperty - */ - public static class Maker extends PropertyMaker { - - /** - * @param propId ID of the property for which Maker should be created - */ - public Maker(int propId) { - super(propId); - } - - /** - * {@inheritDoc} - */ - public Property convertProperty(Property p, - PropertyList propertyList, FObj fo) - throws PropertyException { - if (p instanceof TextDecorationProperty) { - return p; - } else { - if (p instanceof ListProperty) { - ListProperty lst = (ListProperty)p; - lst = checkEnums(lst); - return new TextDecorationProperty((ListProperty)p); - } else if (p instanceof EnumProperty) { - ListProperty lst = new ListProperty(p); - return new TextDecorationProperty(lst); - } else { - throw new PropertyException("Cannot convert anything other " - + "than a list property, got a " + p.getClass().getName()); - } - } - } - - private ListProperty checkEnums(ListProperty lst) throws PropertyException { - List l = lst.getList(); - for (int i = 0; i < l.size(); i++) { - Property prop = (Property)l.get(i); - if (prop instanceof EnumProperty) { - //skip - } else if (prop instanceof NCnameProperty) { - Property propEnum = checkEnumValues(((NCnameProperty)prop).getString()); - if (propEnum == null) { - throw new PropertyException("Illegal enum value: " + prop.getString()); - } - l.set(i, propEnum); - } else { - throw new PropertyException("Invalid content for text-decoration " - + "property: " + prop); - } - } - return lst; - } - - } - - /** - * Constructs a new instance by converting a ListProperty. - * @param listProp the ListProperty to be converted - * @throws PropertyException in case the conversion fails - */ - public TextDecorationProperty(ListProperty listProp) throws PropertyException { - List lst = listProp.getList(); - boolean none = false; - boolean under = false; - boolean over = false; - boolean through = false; - boolean blink = false; - Iterator i = lst.iterator(); - while (i.hasNext()) { - Property prop = (Property)i.next(); - switch (prop.getEnum()) { - case Constants.EN_NONE: - if (under | over | through | blink) { - throw new PropertyException( - "Invalid combination of values"); - } - none = true; - break; - case Constants.EN_UNDERLINE: - case Constants.EN_NO_UNDERLINE: - if (none) { - throw new PropertyException - ("'none' specified, no additional values allowed"); - } - if (under) { - throw new PropertyException("Invalid combination of values"); - } - under = true; - break; - case Constants.EN_OVERLINE: - case Constants.EN_NO_OVERLINE: - if (none) { - throw new PropertyException - ("'none' specified, no additional values allowed"); - } - if (over) { - throw new PropertyException("Invalid combination of values"); - } - over = true; - break; - case Constants.EN_LINE_THROUGH: - case Constants.EN_NO_LINE_THROUGH: - if (none) { - throw new PropertyException - ("'none' specified, no additional values allowed"); - } - if (through) { - throw new PropertyException("Invalid combination of values"); - } - through = true; - break; - case Constants.EN_BLINK: - case Constants.EN_NO_BLINK: - if (none) { - throw new PropertyException - ("'none' specified, no additional values allowed"); - } - if (blink) { - throw new PropertyException("Invalid combination of values"); - } - blink = true; - break; - default: - throw new PropertyException("Invalid value specified: " + prop); - } - addProperty(prop); - } - } - -} |