3392 lines · 126.3 KB · Java
RawDownload
/* * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.  Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */package javax.swing.text.html; import java.awt.Color;import java.awt.Font;import java.awt.GraphicsEnvironment;import java.awt.Toolkit;import java.awt.HeadlessException;import java.awt.Image;import java.io.*;import java.lang.reflect.Method;import java.net.URL;import java.net.MalformedURLException;import java.util.Enumeration;import java.util.Hashtable;import java.util.Vector;import java.util.Locale;import javax.swing.ImageIcon;import javax.swing.SizeRequirements;import javax.swing.text.*; /** * Defines a set of * <a href="http://www.w3.org/TR/REC-CSS1">CSS attributes</a> * as a typesafe enumeration.  The HTML View implementations use * CSS attributes to determine how they will render. This also defines * methods to map between CSS/HTML/StyleConstants. Any shorthand * properties, such as font, are mapped to the intrinsic properties. * <p>The following describes the CSS properties that are suppored by the * rendering engine: * <ul><li>font-family *   <li>font-style *   <li>font-size (supports relative units) *   <li>font-weight *   <li>font *   <li>color *   <li>background-color (with the exception of transparent) *   <li>background-image *   <li>background-repeat *   <li>background-position *   <li>background *   <li>text-decoration (with the exception of blink and overline) *   <li>vertical-align (only sup and super) *   <li>text-align (justify is treated as center) *   <li>margin-top *   <li>margin-right *   <li>margin-bottom *   <li>margin-left *   <li>margin *   <li>padding-top *   <li>padding-right *   <li>padding-bottom *   <li>padding-left *   <li>padding *   <li>border-top-style *   <li>border-right-style *   <li>border-bottom-style *   <li>border-left-style *   <li>border-style (only supports inset, outset and none) *   <li>border-top-color *   <li>border-right-color *   <li>border-bottom-color *   <li>border-left-color *   <li>border-color *   <li>list-style-image *   <li>list-style-type *   <li>list-style-position * </ul> * The following are modeled, but currently not rendered. * <ul><li>font-variant *   <li>background-attachment (background always treated as scroll) *   <li>word-spacing *   <li>letter-spacing *   <li>text-indent *   <li>text-transform *   <li>line-height *   <li>border-top-width (this is used to indicate if a border should be used) *   <li>border-right-width *   <li>border-bottom-width *   <li>border-left-width *   <li>border-width *   <li>border-top *   <li>border-right *   <li>border-bottom *   <li>border-left *   <li>border *   <li>width *   <li>height *   <li>float *   <li>clear *   <li>display *   <li>white-space *   <li>list-style * </ul> * <p><b>Note: for the time being we do not fully support relative units, * unless noted, so that * p { margin-top: 10% } will be treated as if no margin-top was specified. * * @author  Timothy Prinzing * @author  Scott Violet * @see StyleSheet */public class CSS implements Serializable {     /**     * Definitions to be used as a key on AttributeSet's     * that might hold CSS attributes.  Since this is a     * closed set (i.e. defined exactly by the specification),     * it is final and cannot be extended.     */    public static final class Attribute {         private Attribute(String name, String defaultValue, boolean inherited) {            this.name = name;            this.defaultValue = defaultValue;            this.inherited = inherited;        }         /**         * The string representation of the attribute.  This         * should exactly match the string specified in the         * CSS specification.         */        public String toString() {            return name;        }         /**         * Fetch the default value for the attribute.         * If there is no default value (such as for         * composite attributes), null will be returned.         */        public String getDefaultValue() {            return defaultValue;        }         /**         * Indicates if the attribute should be inherited         * from the parent or not.         */        public boolean isInherited() {            return inherited;        }         private String name;        private String defaultValue;        private boolean inherited;          public static final Attribute BACKGROUND =            new Attribute("background", null, false);         public static final Attribute BACKGROUND_ATTACHMENT =            new Attribute("background-attachment", "scroll", false);         public static final Attribute BACKGROUND_COLOR =            new Attribute("background-color", "transparent", false);         public static final Attribute BACKGROUND_IMAGE =            new Attribute("background-image", "none", false);         public static final Attribute BACKGROUND_POSITION =            new Attribute("background-position", null, false);         public static final Attribute BACKGROUND_REPEAT =            new Attribute("background-repeat", "repeat", false);         public static final Attribute BORDER =            new Attribute("border", null, false);         public static final Attribute BORDER_BOTTOM =            new Attribute("border-bottom", null, false);         public static final Attribute BORDER_BOTTOM_COLOR =            new Attribute("border-bottom-color", null, false);         public static final Attribute BORDER_BOTTOM_STYLE =            new Attribute("border-bottom-style", "none", false);         public static final Attribute BORDER_BOTTOM_WIDTH =            new Attribute("border-bottom-width", "medium", false);         public static final Attribute BORDER_COLOR =            new Attribute("border-color", null, false);         public static final Attribute BORDER_LEFT =            new Attribute("border-left", null, false);         public static final Attribute BORDER_LEFT_COLOR =            new Attribute("border-left-color", null, false);         public static final Attribute BORDER_LEFT_STYLE =            new Attribute("border-left-style", "none", false);         public static final Attribute BORDER_LEFT_WIDTH =            new Attribute("border-left-width", "medium", false);         public static final Attribute BORDER_RIGHT =            new Attribute("border-right", null, false);         public static final Attribute BORDER_RIGHT_COLOR =            new Attribute("border-right-color", null, false);         public static final Attribute BORDER_RIGHT_STYLE =            new Attribute("border-right-style", "none", false);         public static final Attribute BORDER_RIGHT_WIDTH =            new Attribute("border-right-width", "medium", false);         public static final Attribute BORDER_STYLE =            new Attribute("border-style", "none", false);         public static final Attribute BORDER_TOP =            new Attribute("border-top", null, false);         public static final Attribute BORDER_TOP_COLOR =            new Attribute("border-top-color", null, false);         public static final Attribute BORDER_TOP_STYLE =            new Attribute("border-top-style", "none", false);         public static final Attribute BORDER_TOP_WIDTH =            new Attribute("border-top-width", "medium", false);         public static final Attribute BORDER_WIDTH =            new Attribute("border-width", "medium", false);         public static final Attribute CLEAR =            new Attribute("clear", "none", false);         public static final Attribute COLOR =            new Attribute("color", "black", true);         public static final Attribute DISPLAY =            new Attribute("display", "block", false);         public static final Attribute FLOAT =            new Attribute("float", "none", false);         public static final Attribute FONT =            new Attribute("font", null, true);         public static final Attribute FONT_FAMILY =            new Attribute("font-family", null, true);         public static final Attribute FONT_SIZE =            new Attribute("font-size", "medium", true);         public static final Attribute FONT_STYLE =            new Attribute("font-style", "normal", true);         public static final Attribute FONT_VARIANT =            new Attribute("font-variant", "normal", true);         public static final Attribute FONT_WEIGHT =            new Attribute("font-weight", "normal", true);         public static final Attribute HEIGHT =            new Attribute("height", "auto", false);         public static final Attribute LETTER_SPACING =            new Attribute("letter-spacing", "normal", true);         public static final Attribute LINE_HEIGHT =            new Attribute("line-height", "normal", true);         public static final Attribute LIST_STYLE =            new Attribute("list-style", null, true);         public static final Attribute LIST_STYLE_IMAGE =            new Attribute("list-style-image", "none", true);         public static final Attribute LIST_STYLE_POSITION =            new Attribute("list-style-position", "outside", true);         public static final Attribute LIST_STYLE_TYPE =            new Attribute("list-style-type", "disc", true);         public static final Attribute MARGIN =            new Attribute("margin", null, false);         public static final Attribute MARGIN_BOTTOM =            new Attribute("margin-bottom", "0", false);         public static final Attribute MARGIN_LEFT =            new Attribute("margin-left", "0", false);         public static final Attribute MARGIN_RIGHT =            new Attribute("margin-right", "0", false);         /*         * made up css attributes to describe orientation depended         * margins. used for <dir>, <menu>, <ul> etc. see         * 5088268 for more details         */        static final Attribute MARGIN_LEFT_LTR =            new Attribute("margin-left-ltr",                          Integer.toString(Integer.MIN_VALUE), false);         static final Attribute MARGIN_LEFT_RTL =            new Attribute("margin-left-rtl",                          Integer.toString(Integer.MIN_VALUE), false);         static final Attribute MARGIN_RIGHT_LTR =            new Attribute("margin-right-ltr",                          Integer.toString(Integer.MIN_VALUE), false);         static final Attribute MARGIN_RIGHT_RTL =            new Attribute("margin-right-rtl",                          Integer.toString(Integer.MIN_VALUE), false);          public static final Attribute MARGIN_TOP =            new Attribute("margin-top", "0", false);         public static final Attribute PADDING =            new Attribute("padding", null, false);         public static final Attribute PADDING_BOTTOM =            new Attribute("padding-bottom", "0", false);         public static final Attribute PADDING_LEFT =            new Attribute("padding-left", "0", false);         public static final Attribute PADDING_RIGHT =            new Attribute("padding-right", "0", false);         public static final Attribute PADDING_TOP =            new Attribute("padding-top", "0", false);         public static final Attribute TEXT_ALIGN =            new Attribute("text-align", null, true);         public static final Attribute TEXT_DECORATION =            new Attribute("text-decoration", "none", true);         public static final Attribute TEXT_INDENT =            new Attribute("text-indent", "0", true);         public static final Attribute TEXT_TRANSFORM =            new Attribute("text-transform", "none", true);         public static final Attribute VERTICAL_ALIGN =            new Attribute("vertical-align", "baseline", false);         public static final Attribute WORD_SPACING =            new Attribute("word-spacing", "normal", true);         public static final Attribute WHITE_SPACE =            new Attribute("white-space", "normal", true);         public static final Attribute WIDTH =            new Attribute("width", "auto", false);         /*public*/ static final Attribute BORDER_SPACING =            new Attribute("border-spacing", "0", true);         /*public*/ static final Attribute CAPTION_SIDE =            new Attribute("caption-side", "left", true);         // All possible CSS attribute keys.        static final Attribute[] allAttributes = {            BACKGROUND, BACKGROUND_ATTACHMENT, BACKGROUND_COLOR,            BACKGROUND_IMAGE, BACKGROUND_POSITION, BACKGROUND_REPEAT,            BORDER, BORDER_BOTTOM, BORDER_BOTTOM_WIDTH, BORDER_COLOR,            BORDER_LEFT, BORDER_LEFT_WIDTH, BORDER_RIGHT, BORDER_RIGHT_WIDTH,            BORDER_STYLE, BORDER_TOP, BORDER_TOP_WIDTH, BORDER_WIDTH,            BORDER_TOP_STYLE, BORDER_RIGHT_STYLE, BORDER_BOTTOM_STYLE,            BORDER_LEFT_STYLE,            BORDER_TOP_COLOR, BORDER_RIGHT_COLOR, BORDER_BOTTOM_COLOR,            BORDER_LEFT_COLOR,            CLEAR, COLOR, DISPLAY, FLOAT, FONT, FONT_FAMILY, FONT_SIZE,            FONT_STYLE, FONT_VARIANT, FONT_WEIGHT, HEIGHT, LETTER_SPACING,            LINE_HEIGHT, LIST_STYLE, LIST_STYLE_IMAGE, LIST_STYLE_POSITION,            LIST_STYLE_TYPE, MARGIN, MARGIN_BOTTOM, MARGIN_LEFT, MARGIN_RIGHT,            MARGIN_TOP, PADDING, PADDING_BOTTOM, PADDING_LEFT, PADDING_RIGHT,            PADDING_TOP, TEXT_ALIGN, TEXT_DECORATION, TEXT_INDENT, TEXT_TRANSFORM,            VERTICAL_ALIGN, WORD_SPACING, WHITE_SPACE, WIDTH,            BORDER_SPACING, CAPTION_SIDE,            MARGIN_LEFT_LTR, MARGIN_LEFT_RTL, MARGIN_RIGHT_LTR, MARGIN_RIGHT_RTL        };         private static final Attribute[] ALL_MARGINS =                { MARGIN_TOP, MARGIN_RIGHT, MARGIN_BOTTOM, MARGIN_LEFT };        private static final Attribute[] ALL_PADDING =                { PADDING_TOP, PADDING_RIGHT, PADDING_BOTTOM, PADDING_LEFT };        private static final Attribute[] ALL_BORDER_WIDTHS =                { BORDER_TOP_WIDTH, BORDER_RIGHT_WIDTH, BORDER_BOTTOM_WIDTH,                  BORDER_LEFT_WIDTH };        private static final Attribute[] ALL_BORDER_STYLES =                { BORDER_TOP_STYLE, BORDER_RIGHT_STYLE, BORDER_BOTTOM_STYLE,                  BORDER_LEFT_STYLE };        private static final Attribute[] ALL_BORDER_COLORS =                { BORDER_TOP_COLOR, BORDER_RIGHT_COLOR, BORDER_BOTTOM_COLOR,                  BORDER_LEFT_COLOR };     }     static final class Value {         private Value(String name) {            this.name = name;        }         /**         * The string representation of the attribute.  This         * should exactly match the string specified in the         * CSS specification.         */        public String toString() {            return name;        }         static final Value INHERITED = new Value("inherited");        static final Value NONE = new Value("none");        static final Value HIDDEN = new Value("hidden");        static final Value DOTTED = new Value("dotted");        static final Value DASHED = new Value("dashed");        static final Value SOLID = new Value("solid");        static final Value DOUBLE = new Value("double");        static final Value GROOVE = new Value("groove");        static final Value RIDGE = new Value("ridge");        static final Value INSET = new Value("inset");        static final Value OUTSET = new Value("outset");        // Lists.        static final Value DISC = new Value("disc");        static final Value CIRCLE = new Value("circle");        static final Value SQUARE = new Value("square");        static final Value DECIMAL = new Value("decimal");        static final Value LOWER_ROMAN = new Value("lower-roman");        static final Value UPPER_ROMAN = new Value("upper-roman");        static final Value LOWER_ALPHA = new Value("lower-alpha");        static final Value UPPER_ALPHA = new Value("upper-alpha");        // background-repeat        static final Value BACKGROUND_NO_REPEAT = new Value("no-repeat");        static final Value BACKGROUND_REPEAT = new Value("repeat");        static final Value BACKGROUND_REPEAT_X = new Value("repeat-x");        static final Value BACKGROUND_REPEAT_Y = new Value("repeat-y");        // background-attachment        static final Value BACKGROUND_SCROLL = new Value("scroll");        static final Value BACKGROUND_FIXED = new Value("fixed");         private String name;         static final Value[] allValues = {            INHERITED, NONE, DOTTED, DASHED, SOLID, DOUBLE, GROOVE,            RIDGE, INSET, OUTSET, DISC, CIRCLE, SQUARE, DECIMAL,            LOWER_ROMAN, UPPER_ROMAN, LOWER_ALPHA, UPPER_ALPHA,            BACKGROUND_NO_REPEAT, BACKGROUND_REPEAT,            BACKGROUND_REPEAT_X, BACKGROUND_REPEAT_Y,            BACKGROUND_FIXED, BACKGROUND_FIXED        };    }     public CSS() {        baseFontSize = baseFontSizeIndex + 1;        // setup the css conversion table        valueConvertor = new Hashtable<Object, Object>();        valueConvertor.put(CSS.Attribute.FONT_SIZE, new FontSize());        valueConvertor.put(CSS.Attribute.FONT_FAMILY, new FontFamily());        valueConvertor.put(CSS.Attribute.FONT_WEIGHT, new FontWeight());        Object bs = new BorderStyle();        valueConvertor.put(CSS.Attribute.BORDER_TOP_STYLE, bs);        valueConvertor.put(CSS.Attribute.BORDER_RIGHT_STYLE, bs);        valueConvertor.put(CSS.Attribute.BORDER_BOTTOM_STYLE, bs);        valueConvertor.put(CSS.Attribute.BORDER_LEFT_STYLE, bs);        Object cv = new ColorValue();        valueConvertor.put(CSS.Attribute.COLOR, cv);        valueConvertor.put(CSS.Attribute.BACKGROUND_COLOR, cv);        valueConvertor.put(CSS.Attribute.BORDER_TOP_COLOR, cv);        valueConvertor.put(CSS.Attribute.BORDER_RIGHT_COLOR, cv);        valueConvertor.put(CSS.Attribute.BORDER_BOTTOM_COLOR, cv);        valueConvertor.put(CSS.Attribute.BORDER_LEFT_COLOR, cv);        Object lv = new LengthValue();        valueConvertor.put(CSS.Attribute.MARGIN_TOP, lv);        valueConvertor.put(CSS.Attribute.MARGIN_BOTTOM, lv);        valueConvertor.put(CSS.Attribute.MARGIN_LEFT, lv);

Lines 1–500 of 3392.