| /* CSS.java -- Provides CSS attributes | |
| Copyright (C) 2005 Free Software Foundation, Inc. | |
| This file is part of GNU Classpath. | |
| GNU Classpath is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published by | |
| the Free Software Foundation; either version 2, or (at your option) | |
| any later version. | |
| GNU Classpath is distributed in the hope that it will be useful, but | |
| WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| General Public License for more details. | |
| You should have received a copy of the GNU General Public License | |
| along with GNU Classpath; see the file COPYING. If not, write to the | |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
| 02110-1301 USA. | |
| Linking this library statically or dynamically with other modules is | |
| making a combined work based on this library. Thus, the terms and | |
| conditions of the GNU General Public License cover the whole | |
| combination. | |
| As a special exception, the copyright holders of this library give you | |
| permission to link this library with independent modules to produce an | |
| executable, regardless of the license terms of these independent | |
| modules, and to copy and distribute the resulting executable under | |
| terms of your choice, provided that you also meet, for each linked | |
| independent module, the terms and conditions of the license of that | |
| module. An independent module is a module which is not derived from | |
| or based on this library. If you modify this library, you may extend | |
| this exception to your version of the library, but you are not | |
| obligated to do so. If you do not wish to do so, delete this | |
| exception statement from your version. */ | |
| package javax.swing.text.html; | |
| import gnu.javax.swing.text.html.css.BorderStyle; | |
| import gnu.javax.swing.text.html.css.BorderWidth; | |
| import gnu.javax.swing.text.html.css.CSSColor; | |
| import gnu.javax.swing.text.html.css.FontSize; | |
| import gnu.javax.swing.text.html.css.FontStyle; | |
| import gnu.javax.swing.text.html.css.FontWeight; | |
| import gnu.javax.swing.text.html.css.Length; | |
| import java.io.Serializable; | |
| import java.util.HashMap; | |
| import java.util.StringTokenizer; | |
| import javax.swing.text.MutableAttributeSet; | |
| /** | |
| * Provides CSS attributes to be used by the HTML view classes. The constants | |
| * defined here are used as keys for text attributes for use in | |
| * {@link javax.swing.text.AttributeSet}s of {@link javax.swing.text.Element}s. | |
| * | |
| * @author Roman Kennke (kennke@aicas.com) | |
| */ | |
| public class CSS implements Serializable | |
| { | |
| /** | |
| * Returns an array of all CSS attributes. | |
| * | |
| * @return All available CSS.Attribute objects. | |
| */ | |
| public static CSS.Attribute[] getAllAttributeKeys() | |
| { | |
| Object[] src = Attribute.attributeMap.values().toArray(); | |
| CSS.Attribute[] dst = new CSS.Attribute[ src.length ]; | |
| System.arraycopy(src, 0, dst, 0, src.length); | |
| return dst; | |
| } | |
| /** | |
| * Returns an a given CSS attribute. | |
| * | |
| * @param name - The name of the attribute. | |
| * @return The CSS attribute with the given name, or <code>null</code> if | |
| * no attribute with that name exists. | |
| */ | |
| public static CSS.Attribute getAttribute(String name) | |
| { | |
| return (CSS.Attribute)Attribute.attributeMap.get( name ); | |
| } | |
| public static final class Attribute | |
| { | |
| /** | |
| * The CSS attribute 'background'. | |
| */ | |
| public static final Attribute BACKGROUND = | |
| new Attribute("background", false, null); | |
| /** | |
| * The CSS attribute 'background-attachment'. | |
| */ | |
| public static final Attribute BACKGROUND_ATTACHMENT = | |
| new Attribute("background-attachment", false, "scroll"); | |
| /** | |
| * The CSS attribute 'background-color'. | |
| */ | |
| public static final Attribute BACKGROUND_COLOR = | |
| new Attribute("background-color", false, "transparent"); | |
| /** | |
| * The CSS attribute 'background-image'. | |
| */ | |
| public static final Attribute BACKGROUND_IMAGE = | |
| new Attribute("background-image", false, "none"); | |
| /** | |
| * The CSS attribute 'background-position'. | |
| */ | |
| public static final Attribute BACKGROUND_POSITION = | |
| new Attribute("background-position", false, null); | |
| /** | |
| * The CSS attribute 'background-repeat'. | |
| */ | |
| public static final Attribute BACKGROUND_REPEAT = | |
| new Attribute("background-repeat", false, "repeat"); | |
| /** | |
| * The CSS attribute 'border'. | |
| */ | |
| public static final Attribute BORDER = new Attribute("border", false, null); | |
| /** | |
| * The CSS attribute 'border-bottom'. | |
| */ | |
| public static final Attribute BORDER_BOTTOM = | |
| new Attribute("border-bottom", false, null); | |
| /** | |
| * The CSS attribute 'border-bottom-width'. | |
| */ | |
| public static final Attribute BORDER_BOTTOM_WIDTH = | |
| new Attribute("border-bottom-width", false, "medium"); | |
| /** | |
| * The CSS attribute 'border-color'. | |
| */ | |
| public static final Attribute BORDER_COLOR = | |
| new Attribute("border-color", false, "black"); | |
| /** | |
| * The CSS attribute 'border-left'. | |
| */ | |
| public static final Attribute BORDER_LEFT = | |
| new Attribute("border-left", false, null); | |
| /** | |
| * The CSS attribute 'border-left-width'. | |
| */ | |
| public static final Attribute BORDER_LEFT_WIDTH = | |
| new Attribute("border-left-width", false, "medium"); | |
| /** | |
| * The CSS attribute 'border-right'. | |
| */ | |
| public static final Attribute BORDER_RIGHT = | |
| new Attribute("border-right", false, null); | |
| /** | |
| * The CSS attribute 'border-right-width'. | |
| */ | |
| public static final Attribute BORDER_RIGHT_WIDTH = | |
| new Attribute("border-right-width", false, "medium"); | |
| /** | |
| * The CSS attribute 'border-style'. | |
| */ | |
| public static final Attribute BORDER_STYLE = | |
| new Attribute("border-style", false, "none"); | |
| /** | |
| * The CSS attribute 'border-top'. | |
| */ | |
| public static final Attribute BORDER_TOP = | |
| new Attribute("border-top", false, null); | |
| /** | |
| * The CSS attribute 'border-top-width'. | |
| */ | |
| public static final Attribute BORDER_TOP_WIDTH = | |
| new Attribute("border-top-width", false, "medium"); | |
| /** | |
| * The CSS attribute 'border-width'. | |
| */ | |
| public static final Attribute BORDER_WIDTH = | |
| new Attribute("border-width", false, "medium"); | |
| /** | |
| * The CSS attribute 'clear'. | |
| */ | |
| public static final Attribute CLEAR = new Attribute("clear", false, "none"); | |
| /** | |
| * The CSS attribute 'color'. | |
| */ | |
| public static final Attribute COLOR = new Attribute("color", true, "black"); | |
| /** | |
| * The CSS attribute 'display'. | |
| */ | |
| public static final Attribute DISPLAY = | |
| new Attribute("display", false, "block"); | |
| /** | |
| * The CSS attribute 'float'. | |
| */ | |
| public static final Attribute FLOAT = new Attribute("float", false, "none"); | |
| /** | |
| * The CSS attribute 'font'. | |
| */ | |
| public static final Attribute FONT = new Attribute("font", true, null); | |
| /** | |
| * The CSS attribute 'font-family'. | |
| */ | |
| public static final Attribute FONT_FAMILY = | |
| new Attribute("font-family", true, null); | |
| /** | |
| * The CSS attribute 'font-size'. | |
| */ | |
| public static final Attribute FONT_SIZE = | |
| new Attribute("font-size", true, "medium"); | |
| /** | |
| * The CSS attribute 'font-style'. | |
| */ | |
| public static final Attribute FONT_STYLE = | |
| new Attribute("font-style", true, "normal"); | |
| /** | |
| * The CSS attribute 'font-variant'. | |
| */ | |
| public static final Attribute FONT_VARIANT = | |
| new Attribute("font-variant", true, "normal"); | |
| /** | |
| * The CSS attribute 'font-weight'. | |
| */ | |
| public static final Attribute FONT_WEIGHT = | |
| new Attribute("font-weight", true, "normal"); | |
| /** | |
| * The CSS attribute 'height'. | |
| */ | |
| public static final Attribute HEIGHT = | |
| new Attribute("height", false, "auto"); | |
| /** | |
| * The CSS attribute 'letter-spacing'. | |
| */ | |
| public static final Attribute LETTER_SPACING = | |
| new Attribute("letter-spacing", true, "normal"); | |
| /** | |
| * The CSS attribute 'line-height'. | |
| */ | |
| public static final Attribute LINE_HEIGHT = | |
| new Attribute("line-height", true, "normal"); | |
| /** | |
| * The CSS attribute 'list-style'. | |
| */ | |
| public static final Attribute LIST_STYLE = | |
| new Attribute("list-style", true, null); | |
| /** | |
| * The CSS attribute 'list-style-image'. | |
| */ | |
| public static final Attribute LIST_STYLE_IMAGE = | |
| new Attribute("list-style-image", true, "none"); | |
| /** | |
| * The CSS attribute 'list-style-position'. | |
| */ | |
| public static final Attribute LIST_STYLE_POSITION = | |
| new Attribute("list-style-position", true, "outside"); | |
| /** | |
| * The CSS attribute 'list-style-type'. | |
| */ | |
| public static final Attribute LIST_STYLE_TYPE = | |
| new Attribute("list-style-type", true, "disc"); | |
| /** | |
| * The CSS attribute 'margin'. | |
| */ | |
| public static final Attribute MARGIN = new Attribute("margin", false, null); | |
| /** | |
| * The CSS attribute 'margin-bottom'. | |
| */ | |
| public static final Attribute MARGIN_BOTTOM = | |
| new Attribute("margin-bottom", false, "0"); | |
| /** | |
| * The CSS attribute 'margin-left'. | |
| */ | |
| public static final Attribute MARGIN_LEFT = | |
| new Attribute("margin-left", false, "0"); | |
| /** | |
| * The CSS attribute 'margin-right'. | |
| */ | |
| public static final Attribute MARGIN_RIGHT = | |
| new Attribute("margin-right", false, "0"); | |
| /** | |
| * The CSS attribute 'margin-top'. | |
| */ | |
| public static final Attribute MARGIN_TOP = | |
| new Attribute("margin-top", false, "0"); | |
| /** | |
| * The CSS attribute 'padding'. | |
| */ | |
| public static final Attribute PADDING = | |
| new Attribute("padding", false, null); | |
| /** | |
| * The CSS attribute 'padding-bottom'. | |
| */ | |
| public static final Attribute PADDING_BOTTOM = | |
| new Attribute("padding-bottom", false, "0"); | |
| /** | |
| * The CSS attribute 'padding-left'. | |
| */ | |
| public static final Attribute PADDING_LEFT = | |
| new Attribute("padding-left", false, "0"); | |
| /** | |
| * The CSS attribute 'padding-right'. | |
| */ | |
| public static final Attribute PADDING_RIGHT = | |
| new Attribute("padding-right", false, "0"); | |
| /** | |
| * The CSS attribute 'padding-top'. | |
| */ | |
| public static final Attribute PADDING_TOP = | |
| new Attribute("padding-top", false, "0"); | |
| /** | |
| * The CSS attribute 'text-align'. | |
| */ | |
| public static final Attribute TEXT_ALIGN = | |
| new Attribute("text-align", true, null); | |
| /** | |
| * The CSS attribute 'text-decoration'. | |
| */ | |
| public static final Attribute TEXT_DECORATION = | |
| new Attribute("text-decoration", true, "none"); | |
| /** | |
| * The CSS attribute 'text-indent'. | |
| */ | |
| public static final Attribute TEXT_INDENT = | |
| new Attribute("text-indent", true, "0"); | |
| /** | |
| * The CSS attribute 'text-transform'. | |
| */ | |
| public static final Attribute TEXT_TRANSFORM = | |
| new Attribute("text-transform", true, "none"); | |
| /** | |
| * The CSS attribute 'vertical-align'. | |
| */ | |
| public static final Attribute VERTICAL_ALIGN = | |
| new Attribute("vertical-align", false, "baseline"); | |
| /** | |
| * The CSS attribute 'white-space'. | |
| */ | |
| public static final Attribute WHITE_SPACE = | |
| new Attribute("white-space", true, "normal"); | |
| /** | |
| * The CSS attribute 'width'. | |
| */ | |
| public static final Attribute WIDTH = | |
| new Attribute("width", false, "auto"); | |
| /** | |
| * The CSS attribute 'word-spacing'. | |
| */ | |
| public static final Attribute WORD_SPACING = | |
| new Attribute("word-spacing", true, "normal"); | |
| // Some GNU Classpath specific extensions. | |
| static final Attribute BORDER_TOP_STYLE = | |
| new Attribute("border-top-style", false, null); | |
| static final Attribute BORDER_BOTTOM_STYLE = | |
| new Attribute("border-bottom-style", false, null); | |
| static final Attribute BORDER_LEFT_STYLE = | |
| new Attribute("border-left-style", false, null); | |
| static final Attribute BORDER_RIGHT_STYLE = | |
| new Attribute("border-right-style", false, null); | |
| static final Attribute BORDER_TOP_COLOR = | |
| new Attribute("border-top-color", false, null); | |
| static final Attribute BORDER_BOTTOM_COLOR = | |
| new Attribute("border-bottom-color", false, null); | |
| static final Attribute BORDER_LEFT_COLOR = | |
| new Attribute("border-left-color", false, null); | |
| static final Attribute BORDER_RIGHT_COLOR = | |
| new Attribute("border-right-color", false, null); | |
| static final Attribute BORDER_SPACING = | |
| new Attribute("border-spacing", false, null); | |
| static final Attribute POSITION = | |
| new Attribute("position", false, null); | |
| static final Attribute LEFT = | |
| new Attribute("left", false, null); | |
| static final Attribute RIGHT = | |
| new Attribute("right", false, null); | |
| static final Attribute TOP = | |
| new Attribute("top", false, null); | |
| static final Attribute BOTTOM = | |
| new Attribute("bottom", false, null); | |
| /** | |
| * The attribute string. | |
| */ | |
| String attStr; | |
| /** | |
| * Indicates if this attribute should be inherited from it's parent or | |
| * not. | |
| */ | |
| boolean isInherited; | |
| /** | |
| * A default value for this attribute if one exists, otherwise null. | |
| */ | |
| String defaultValue; | |
| /** | |
| * A HashMap of all attributes. | |
| */ | |
| static HashMap attributeMap; | |
| /** | |
| * Creates a new Attribute instance with the specified values. | |
| * | |
| * @param attr the attribute string | |
| * @param inherited if the attribute should be inherited or not | |
| * @param def a default value; may be <code>null</code> | |
| */ | |
| Attribute(String attr, boolean inherited, String def) | |
| { | |
| attStr = attr; | |
| isInherited = inherited; | |
| defaultValue = def; | |
| if( attributeMap == null) | |
| attributeMap = new HashMap(); | |
| attributeMap.put( attr, this ); | |
| } | |
| /** | |
| * Returns the string representation of this attribute as specified | |
| * in the CSS specification. | |
| */ | |
| public String toString() | |
| { | |
| return attStr; | |
| } | |
| /** | |
| * Returns <code>true</code> if the attribute should be inherited from | |
| * the parent, <code>false</code> otherwise. | |
| * | |
| * @return <code>true</code> if the attribute should be inherited from | |
| * the parent, <code>false</code> otherwise | |
| */ | |
| public boolean isInherited() | |
| { | |
| return isInherited; | |
| } | |
| /** | |
| * Returns the default value of this attribute if one exists, | |
| * <code>null</code> otherwise. | |
| * | |
| * @return the default value of this attribute if one exists, | |
| * <code>null</code> otherwise | |
| */ | |
| public String getDefaultValue() | |
| { | |
| return defaultValue; | |
| } | |
| } | |
| /** | |
| * Maps attribute values (String) to some converter class, based on the | |
| * key. | |
| * | |
| * @param att the key | |
| * @param v the value | |
| * | |
| * @return the wrapped value | |
| */ | |
| static Object getValue(Attribute att, String v) | |
| { | |
| Object o; | |
| if (att == Attribute.FONT_SIZE) | |
| o = new FontSize(v); | |
| else if (att == Attribute.FONT_WEIGHT) | |
| o = new FontWeight(v); | |
| else if (att == Attribute.FONT_STYLE) | |
| o = new FontStyle(v); | |
| else if (att == Attribute.COLOR || att == Attribute.BACKGROUND_COLOR | |
| || att == Attribute.BORDER_COLOR | |
| || att == Attribute.BORDER_TOP_COLOR | |
| || att == Attribute.BORDER_BOTTOM_COLOR | |
| || att == Attribute.BORDER_LEFT_COLOR | |
| || att == Attribute.BORDER_RIGHT_COLOR) | |
| o = new CSSColor(v); | |
| else if (att == Attribute.MARGIN || att == Attribute.MARGIN_BOTTOM | |
| || att == Attribute.MARGIN_LEFT || att == Attribute.MARGIN_RIGHT | |
| || att == Attribute.MARGIN_TOP || att == Attribute.WIDTH | |
| || att == Attribute.HEIGHT | |
| || att == Attribute.PADDING || att == Attribute.PADDING_BOTTOM | |
| || att == Attribute.PADDING_LEFT || att == Attribute.PADDING_RIGHT | |
| || att == Attribute.PADDING_TOP | |
| || att == Attribute.LEFT || att == Attribute.RIGHT | |
| || att == Attribute.TOP || att == Attribute.BOTTOM) | |
| o = new Length(v); | |
| else if (att == Attribute.BORDER_WIDTH || att == Attribute.BORDER_TOP_WIDTH | |
| || att == Attribute.BORDER_LEFT_WIDTH | |
| || att == Attribute.BORDER_RIGHT_WIDTH | |
| || att == Attribute.BORDER_BOTTOM_WIDTH) | |
| o = new BorderWidth(v); | |
| else | |
| o = v; | |
| return o; | |
| } | |
| static void addInternal(MutableAttributeSet atts, Attribute a, String v) | |
| { | |
| if (a == Attribute.BACKGROUND) | |
| parseBackgroundShorthand(atts, v); | |
| else if (a == Attribute.PADDING) | |
| parsePaddingShorthand(atts, v); | |
| else if (a == Attribute.MARGIN) | |
| parseMarginShorthand(atts, v); | |
| else if (a == Attribute.BORDER || a == Attribute.BORDER_LEFT | |
| || a == Attribute.BORDER_RIGHT || a == Attribute.BORDER_TOP | |
| || a == Attribute.BORDER_BOTTOM) | |
| parseBorderShorthand(atts, v, a); | |
| } | |
| /** | |
| * Parses the background shorthand and translates it to more specific | |
| * background attributes. | |
| * | |
| * @param atts the attributes | |
| * @param v the value | |
| */ | |
| private static void parseBackgroundShorthand(MutableAttributeSet atts, | |
| String v) | |
| { | |
| StringTokenizer tokens = new StringTokenizer(v, " "); | |
| while (tokens.hasMoreElements()) | |
| { | |
| String token = tokens.nextToken(); | |
| if (CSSColor.isValidColor(token)) | |
| atts.addAttribute(Attribute.BACKGROUND_COLOR, | |
| new CSSColor(token)); | |
| } | |
| } | |
| /** | |
| * Parses the padding shorthand and translates to the specific padding | |
| * values. | |
| * | |
| * @param atts the attributes | |
| * @param v the actual value | |
| */ | |
| private static void parsePaddingShorthand(MutableAttributeSet atts, String v) | |
| { | |
| StringTokenizer tokens = new StringTokenizer(v, " "); | |
| int numTokens = tokens.countTokens(); | |
| if (numTokens == 1) | |
| { | |
| Length l = new Length(tokens.nextToken()); | |
| atts.addAttribute(Attribute.PADDING_BOTTOM, l); | |
| atts.addAttribute(Attribute.PADDING_LEFT, l); | |
| atts.addAttribute(Attribute.PADDING_RIGHT, l); | |
| atts.addAttribute(Attribute.PADDING_TOP, l); | |
| } | |
| else if (numTokens == 2) | |
| { | |
| Length l1 = new Length(tokens.nextToken()); | |
| Length l2 = new Length(tokens.nextToken()); | |
| atts.addAttribute(Attribute.PADDING_BOTTOM, l1); | |
| atts.addAttribute(Attribute.PADDING_TOP, l1); | |
| atts.addAttribute(Attribute.PADDING_LEFT, l2); | |
| atts.addAttribute(Attribute.PADDING_RIGHT, l2); | |
| } | |
| else if (numTokens == 3) | |
| { | |
| Length l1 = new Length(tokens.nextToken()); | |
| Length l2 = new Length(tokens.nextToken()); | |
| Length l3 = new Length(tokens.nextToken()); | |
| atts.addAttribute(Attribute.PADDING_TOP, l1); | |
| atts.addAttribute(Attribute.PADDING_LEFT, l2); | |
| atts.addAttribute(Attribute.PADDING_RIGHT, l2); | |
| atts.addAttribute(Attribute.PADDING_BOTTOM, l3); | |
| } | |
| else | |
| { | |
| Length l1 = new Length(tokens.nextToken()); | |
| Length l2 = new Length(tokens.nextToken()); | |
| Length l3 = new Length(tokens.nextToken()); | |
| Length l4 = new Length(tokens.nextToken()); | |
| atts.addAttribute(Attribute.PADDING_TOP, l1); | |
| atts.addAttribute(Attribute.PADDING_RIGHT, l2); | |
| atts.addAttribute(Attribute.PADDING_BOTTOM, l3); | |
| atts.addAttribute(Attribute.PADDING_LEFT, l4); | |
| } | |
| } | |
| /** | |
| * Parses the margin shorthand and translates to the specific margin | |
| * values. | |
| * | |
| * @param atts the attributes | |
| * @param v the actual value | |
| */ | |
| private static void parseMarginShorthand(MutableAttributeSet atts, String v) | |
| { | |
| StringTokenizer tokens = new StringTokenizer(v, " "); | |
| int numTokens = tokens.countTokens(); | |
| if (numTokens == 1) | |
| { | |
| Length l = new Length(tokens.nextToken()); | |
| atts.addAttribute(Attribute.MARGIN_BOTTOM, l); | |
| atts.addAttribute(Attribute.MARGIN_LEFT, l); | |
| atts.addAttribute(Attribute.MARGIN_RIGHT, l); | |
| atts.addAttribute(Attribute.MARGIN_TOP, l); | |
| } | |
| else if (numTokens == 2) | |
| { | |
| Length l1 = new Length(tokens.nextToken()); | |
| Length l2 = new Length(tokens.nextToken()); | |
| atts.addAttribute(Attribute.MARGIN_BOTTOM, l1); | |
| atts.addAttribute(Attribute.MARGIN_TOP, l1); | |
| atts.addAttribute(Attribute.MARGIN_LEFT, l2); | |
| atts.addAttribute(Attribute.MARGIN_RIGHT, l2); | |
| } | |
| else if (numTokens == 3) | |
| { | |
| Length l1 = new Length(tokens.nextToken()); | |
| Length l2 = new Length(tokens.nextToken()); | |
| Length l3 = new Length(tokens.nextToken()); | |
| atts.addAttribute(Attribute.MARGIN_TOP, l1); | |
| atts.addAttribute(Attribute.MARGIN_LEFT, l2); | |
| atts.addAttribute(Attribute.MARGIN_RIGHT, l2); | |
| atts.addAttribute(Attribute.MARGIN_BOTTOM, l3); | |
| } | |
| else | |
| { | |
| Length l1 = new Length(tokens.nextToken()); | |
| Length l2 = new Length(tokens.nextToken()); | |
| Length l3 = new Length(tokens.nextToken()); | |
| Length l4 = new Length(tokens.nextToken()); | |
| atts.addAttribute(Attribute.MARGIN_TOP, l1); | |
| atts.addAttribute(Attribute.MARGIN_RIGHT, l2); | |
| atts.addAttribute(Attribute.MARGIN_BOTTOM, l3); | |
| atts.addAttribute(Attribute.MARGIN_LEFT, l4); | |
| } | |
| } | |
| /** | |
| * Parses the CSS border shorthand attribute and translates it to the | |
| * more specific border attributes. | |
| * | |
| * @param atts the attribute | |
| * @param value the value | |
| */ | |
| private static void parseBorderShorthand(MutableAttributeSet atts, | |
| String value, Attribute cssAtt) | |
| { | |
| StringTokenizer tokens = new StringTokenizer(value, " "); | |
| while (tokens.hasMoreTokens()) | |
| { | |
| String token = tokens.nextToken(); | |
| if (BorderStyle.isValidStyle(token)) | |
| { | |
| if (cssAtt == Attribute.BORDER_LEFT || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_LEFT_STYLE, token); | |
| if (cssAtt == Attribute.BORDER_RIGHT || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_RIGHT_STYLE, token); | |
| if (cssAtt == Attribute.BORDER_BOTTOM || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_BOTTOM_STYLE, token); | |
| if (cssAtt == Attribute.BORDER_TOP || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_TOP_STYLE, token); | |
| } | |
| else if (BorderWidth.isValid(token)) | |
| { | |
| BorderWidth w = new BorderWidth(token); | |
| if (cssAtt == Attribute.BORDER_LEFT || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_LEFT_WIDTH, w); | |
| if (cssAtt == Attribute.BORDER_RIGHT || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_RIGHT_WIDTH, w); | |
| if (cssAtt == Attribute.BORDER_BOTTOM || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_BOTTOM_WIDTH, w); | |
| if (cssAtt == Attribute.BORDER_TOP || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_TOP_WIDTH, w); | |
| } | |
| else if (CSSColor.isValidColor(token)) | |
| { | |
| CSSColor c = new CSSColor(token); | |
| if (cssAtt == Attribute.BORDER_LEFT || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_LEFT_COLOR, c); | |
| if (cssAtt == Attribute.BORDER_RIGHT || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_RIGHT_COLOR, c); | |
| if (cssAtt == Attribute.BORDER_BOTTOM || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_BOTTOM_COLOR, c); | |
| if (cssAtt == Attribute.BORDER_TOP || cssAtt == Attribute.BORDER) | |
| atts.addAttribute(Attribute.BORDER_TOP_COLOR, c); | |
| } | |
| } | |
| } | |
| } |