Home » openjdk-7 » javax » swing » text » html » [javadoc | source]
javax.swing.text.html
public class: StyleSheet [javadoc | source]
java.lang.Object
   javax.swing.text.StyleContext
      javax.swing.text.html.StyleSheet

All Implemented Interfaces:
    AttributeContext, Serializable

Direct Known Subclasses:
    StyleSheetUIResource

Support for defining the visual characteristics of HTML views being rendered. The StyleSheet is used to translate the HTML model into visual characteristics. This enables views to be customized by a look-and-feel, multiple views over the same model can be rendered differently, etc. This can be thought of as a CSS rule repository. The key for CSS attributes is an object of type CSS.Attribute. The type of the value is up to the StyleSheet implementation, but the toString method is required to return a string representation of CSS value.

The primary entry point for HTML View implementations to get their attributes is the getViewAttributes method. This should be implemented to establish the desired policy used to associate attributes with the view. Each HTMLEditorKit (i.e. and therefore each associated JEditorPane) can have its own StyleSheet, but by default one sheet will be shared by all of the HTMLEditorKit instances. HTMLDocument instance can also have a StyleSheet, which holds the document-specific CSS specifications.

In order for Views to store less state and therefore be more lightweight, the StyleSheet can act as a factory for painters that handle some of the rendering tasks. This allows implementations to determine what they want to cache and have the sharing potentially at the level that a selector is common to multiple views. Since the StyleSheet may be used by views over multiple documents and typically the HTML attributes don't effect the selector being used, the potential for sharing is significant.

The rules are stored as named styles, and other information is stored to translate the context of an element to a rule quickly. The following code fragment will display the named styles, and therefore the CSS rules contained.

 
  import java.util.*;
  import javax.swing.text.*;
  import javax.swing.text.html.*;
 
  public class ShowStyles {
 
      public static void main(String[] args) {
        HTMLEditorKit kit = new HTMLEditorKit();
        HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
        StyleSheet styles = doc.getStyleSheet();
 
        Enumeration rules = styles.getStyleNames();
        while (rules.hasMoreElements()) {
            String name = (String) rules.nextElement();
            Style rule = styles.getStyle(name);
            System.out.println(rule.toString());
        }
        System.exit(0);
      }
  }
 

The semantics for when a CSS style should overide visual attributes defined by an element are not well defined. For example, the html <body bgcolor=red> makes the body have a red background. But if the html file also contains the CSS rule body { background: blue } it becomes less clear as to what color the background of the body should be. The current implemention gives visual attributes defined in the element the highest precedence, that is they are always checked before any styles. Therefore, in the previous example the background would have a red color as the body element defines the background color to be red.

As already mentioned this supports CSS. We don't support the full CSS spec. Refer to the javadoc of the CSS class to see what properties we support. The two major CSS parsing related concepts we do not currently support are pseudo selectors, such as A:link { color: red }, and the important modifier.

Note: This implementation is currently incomplete. It can be replaced with alternative implementations that are complete. Future versions of this class will provide better CSS support.

Nested Class Summary:
class  StyleSheet.LargeConversionSet  Large set of attributes that does conversion of requests for attributes of type StyleConstants. 
class  StyleSheet.SmallConversionSet  Small set of attributes that does conversion of requests for attributes of type StyleConstants. 
public static class  StyleSheet.BoxPainter  Class to carry out some of the duties of CSS formatting. Implementations of this class enable views to present the CSS formatting while not knowing anything about how the CSS values are being cached.

As a delegate of Views, this object is responsible for the insets of a View and making sure the background is maintained according to the CSS attributes. 

public static class  StyleSheet.ListPainter  Class to carry out some of the duties of CSS list formatting. Implementations of this class enable views to present the CSS formatting while not knowing anything about how the CSS values are being cached. 
static class  StyleSheet.BackgroundImagePainter  Paints the background image. 
class  StyleSheet.ViewAttributeSet  A subclass of MuxingAttributeSet that translates between CSS and HTML and StyleConstants. The AttributeSets used are the CSS rules that match the Views Elements. 
static class  StyleSheet.ResolvedStyle  A subclass of MuxingAttributeSet that implements Style. Currently the MutableAttributeSet methods are unimplemented, that is they do nothing. 
static class  StyleSheet.SelectorMapping  SelectorMapping contains a specifitiy, as an integer, and an associated Style. It can also reference children SelectorMappings, so that it behaves like a tree.

This is not thread safe, it is assumed the caller will take the necessary precations if this is to be used in a threaded environment. 

class  StyleSheet.CssParser  Default parser for CSS specifications that get loaded into the StyleSheet.

This class is NOT thread safe, do not ask it to parse while it is in the middle of parsing. 

Field Summary
static final  Border noBorder     
static final  int DEFAULT_FONT_SIZE     
static final  int[] sizeMapDefault    The HTML/CSS size model has seven slots that one can assign sizes to. 
Fields inherited from javax.swing.text.StyleContext:
DEFAULT_STYLE,  THRESHOLD
Constructor:
 public StyleSheet() 
Method from javax.swing.text.html.StyleSheet Summary:
addAttribute,   addAttributes,   addCSSAttribute,   addCSSAttributeFromHTML,   addRule,   addRule,   addStyleSheet,   cleanSelectorString,   convertAttributeSet,   createLargeAttributeSet,   createSmallAttributeSet,   getBackground,   getBackgroundImage,   getBase,   getBoxPainter,   getDeclaration,   getFont,   getForeground,   getIndexOfSize,   getListPainter,   getPointSize,   getPointSize,   getRule,   getRule,   getSimpleSelectors,   getSizeMap,   getSpecificity,   getStyleSheets,   getViewAttributes,   importStyleSheet,   isW3CLengthUnits,   loadRules,   rebaseSizeMap,   removeAttribute,   removeAttributes,   removeAttributes,   removeStyle,   removeStyleSheet,   setBase,   setBaseFontSize,   setBaseFontSize,   stringToColor,   translateHTMLToCSS
Methods from javax.swing.text.StyleContext:
addAttribute,   addAttributes,   addChangeListener,   addStyle,   createLargeAttributeSet,   createSmallAttributeSet,   getBackground,   getChangeListeners,   getCompressionThreshold,   getDefaultStyleContext,   getEmptySet,   getFont,   getFont,   getFontMetrics,   getForeground,   getImmutableUniqueSet,   getMutableAttributeSet,   getStaticAttribute,   getStaticAttributeKey,   getStyle,   getStyleNames,   readAttributeSet,   readAttributes,   reclaim,   registerStaticAttributeKey,   removeAttribute,   removeAttributes,   removeAttributes,   removeChangeListener,   removeStyle,   removeUnusedSets,   toString,   writeAttributeSet,   writeAttributes
Methods from java.lang.Object:
clone,   equals,   finalize,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from javax.swing.text.html.StyleSheet Detail:
 public AttributeSet addAttribute(AttributeSet old,
    Object key,
    Object value) 
    Adds an attribute to the given set, and returns the new representative set. This is reimplemented to convert StyleConstant attributes to CSS prior to forwarding to the superclass behavior. The StyleConstants attribute has no corresponding CSS entry, the StyleConstants attribute is stored (but will likely be unused).
 public AttributeSet addAttributes(AttributeSet old,
    AttributeSet attr) 
    Adds a set of attributes to the element. If any of these attributes are StyleConstants attributes, they will be converted to CSS prior to forwarding to the superclass behavior.
 public  void addCSSAttribute(MutableAttributeSet attr,
    Attribute key,
    String value) 
    Adds a CSS attribute to the given set.
 public boolean addCSSAttributeFromHTML(MutableAttributeSet attr,
    Attribute key,
    String value) 
    Adds a CSS attribute to the given set.
 public  void addRule(String rule) 
    Adds a set of rules to the sheet. The rules are expected to be in valid CSS format. Typically this would be called as a result of parsing a <style> tag.
  void addRule(String[] selector,
    AttributeSet declaration,
    boolean isLinked) 
    Adds a rule into the StyleSheet.
 public  void addStyleSheet(StyleSheet ss) 
    Adds the rules from the StyleSheet ss to those of the receiver. ss's rules will override the rules of any previously added style sheets. An added StyleSheet will never override the rules of the receiving style sheet.
 String cleanSelectorString(String selector) 
    Returns a string that only has one space between simple selectors, which may be the passed in String.
 AttributeSet convertAttributeSet(AttributeSet a) 
    Converts a set of attributes (if necessary) so that any attributes that were specified as StyleConstants attributes and have a CSS mapping, will be converted to CSS attributes.
 protected MutableAttributeSet createLargeAttributeSet(AttributeSet a) 
    Creates a large set of attributes that should trade off space for time. This set will not be shared. This is a hook for subclasses that want to alter the behavior of the larger attribute storage format (which is SimpleAttributeSet by default). This can be reimplemented to return a MutableAttributeSet that provides some sort of attribute conversion.
 protected SmallAttributeSet createSmallAttributeSet(AttributeSet a) 
    Creates a compact set of attributes that might be shared. This is a hook for subclasses that want to alter the behavior of SmallAttributeSet. This can be reimplemented to return an AttributeSet that provides some sort of attribute conversion.
 public Color getBackground(AttributeSet a) 
    Takes a set of attributes and turn it into a background color specification. This might be used to specify things like brighter, more hue, etc.
 ImageIcon getBackgroundImage(AttributeSet attr) 
    Returns the ImageIcon to draw in the background for attr.
 public URL getBase() 
    Returns the base.
 public BoxPainter getBoxPainter(AttributeSet a) 
    Fetches the box formatter to use for the given set of CSS attributes.
 public AttributeSet getDeclaration(String decl) 
    Translates a CSS declaration to an AttributeSet that represents the CSS declaration. Typically this would be called as a result of encountering an HTML style attribute.
 public Font getFont(AttributeSet a) 
    Fetches the font to use for the given set of attributes.
 public Color getForeground(AttributeSet a) 
    Takes a set of attributes and turn it into a foreground color specification. This might be used to specify things like brighter, more hue, etc.
 public static int getIndexOfSize(float pt) 
 public ListPainter getListPainter(AttributeSet a) 
    Fetches the list formatter to use for the given set of CSS attributes.
 public float getPointSize(int index) 
    Returns the point size, given a size index.
 public float getPointSize(String size) 
    Given a string such as "+2", "-2", or "2", returns a point size value.
 public Style getRule(String selector) 
    Fetches the rule that best matches the selector given in string form. Where selector is a space separated String of the element names. For example, selector might be 'html body tr td''

    The attributes of the returned Style will change as rules are added and removed. That is if you to ask for a rule with a selector "table p" and a new rule was added with a selector of "p" the returned Style would include the new attributes from the rule "p".

 public Style getRule(Tag t,
    Element e) 
    Fetches the style to use to render the given type of HTML tag. The element given is representing the tag and can be used to determine the nesting for situations where the attributes will differ if nesting inside of elements.
 String[] getSimpleSelectors(String selector) 
    Returns the simple selectors that comprise selector.
 int[] getSizeMap() 
 static int getSpecificity(String selector) 
    Returns the specificity of the passed in String. It assumes the passed in string doesn't contain junk, that is each selector is separated by a space and each selector at most contains one . or one #. A simple selector has a weight of 1, an id selector has a weight of 100, and a class selector has a weight of 10000.
 public StyleSheet[] getStyleSheets() 
    Returns an array of the linked StyleSheets. Will return null if there are no linked StyleSheets.
 public AttributeSet getViewAttributes(View v) 
    Fetches a set of attributes to use in the view for displaying. This is basically a set of attributes that can be used for View.getAttributes.
 public  void importStyleSheet(URL url) 
    Imports a style sheet from url. The resulting rules are directly added to the receiver. If you do not want the rules to become part of the receiver, create a new StyleSheet and use addStyleSheet to link it in.
 boolean isW3CLengthUnits() 
 public  void loadRules(Reader in,
    URL ref) throws IOException 
    Loads a set of rules that have been specified in terms of CSS1 grammar. If there are collisions with existing rules, the newly specified rule will win.
  void rebaseSizeMap(int base) 
 public AttributeSet removeAttribute(AttributeSet old,
    Object key) 
    Removes an attribute from the set. If the attribute is a StyleConstants attribute, the request will be converted to a CSS attribute prior to forwarding to the superclass behavior.
 public AttributeSet removeAttributes(AttributeSet old,
    Enumeration<?> names) 
    Removes a set of attributes for the element. If any of the attributes is a StyleConstants attribute, the request will be converted to a CSS attribute prior to forwarding to the superclass behavior.
 public AttributeSet removeAttributes(AttributeSet old,
    AttributeSet attrs) 
    Removes a set of attributes. If any of the attributes is a StyleConstants attribute, the request will be converted to a CSS attribute prior to forwarding to the superclass behavior.
 public  void removeStyle(String nm) 
    Removes a named style previously added to the document.
 public  void removeStyleSheet(StyleSheet ss) 
    Removes the StyleSheet ss from those of the receiver.
 public  void setBase(URL base) 
    Sets the base. All import statements that are relative, will be relative to base.
 public  void setBaseFontSize(int sz) 
    Sets the base font size, with valid values between 1 and 7.
 public  void setBaseFontSize(String size) 
    Sets the base font size from the passed in String. The string can either identify a specific font size, with legal values between 1 and 7, or identifiy a relative font size such as +1 or -2.
 public Color stringToColor(String string) 
    Converts a color string such as "RED" or "#NNNNNN" to a Color. Note: This will only convert the HTML3.2 color strings or a string of length 7; otherwise, it will return null.
 public AttributeSet translateHTMLToCSS(AttributeSet htmlAttrSet) 
    Converts a set of HTML attributes to an equivalent set of CSS attributes.