git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1066198 13f79535-47bb-0310-9956-ffa450edef68tags/fop-1_1rc1old
@@ -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")); |
@@ -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; | |||
} | |||
} |
@@ -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); | |||
} | |||
} | |||
} |