- All Implemented Interfaces:
Serializable
,AbstractDocument.AttributeContext
public class StyleSheet extends StyleContext
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
implementation 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.
- Implementation 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
Nested Classes Modifier and Type Class Description static class
StyleSheet.BoxPainter
Class to carry out some of the duties of CSS formatting.static class
StyleSheet.ListPainter
Class to carry out some of the duties of CSS list formatting.Nested classes/interfaces declared in class javax.swing.text.StyleContext
StyleContext.NamedStyle, StyleContext.SmallAttributeSet
-
Field Summary
-
Constructor Summary
Constructors Constructor Description StyleSheet()
Construct a StyleSheet -
Method Summary
Modifier and Type Method Description AttributeSet
addAttribute(AttributeSet old, Object key, Object value)
Adds an attribute to the given set, and returns the new representative set.AttributeSet
addAttributes(AttributeSet old, AttributeSet attr)
Adds a set of attributes to the element.void
addCSSAttribute(MutableAttributeSet attr, CSS.Attribute key, String value)
Adds a CSS attribute to the given set.boolean
addCSSAttributeFromHTML(MutableAttributeSet attr, CSS.Attribute key, String value)
Adds a CSS attribute to the given set.void
addRule(String rule)
Adds a set of rules to the sheet.void
addStyleSheet(StyleSheet ss)
Adds the rules from the StyleSheetss
to those of the receiver.protected MutableAttributeSet
createLargeAttributeSet(AttributeSet a)
Creates a large set of attributes that should trade off space for time.protected StyleContext.SmallAttributeSet
createSmallAttributeSet(AttributeSet a)
Creates a compact set of attributes that might be shared.Color
getBackground(AttributeSet a)
Takes a set of attributes and turn it into a background color specification.URL
getBase()
Returns the base.StyleSheet.BoxPainter
getBoxPainter(AttributeSet a)
Fetches the box formatter to use for the given set of CSS attributes.AttributeSet
getDeclaration(String decl)
Translates a CSS declaration to an AttributeSet that represents the CSS declaration.Font
getFont(AttributeSet a)
Fetches the font to use for the given set of attributes.Color
getForeground(AttributeSet a)
Takes a set of attributes and turn it into a foreground color specification.static int
getIndexOfSize(float pt)
Returns the index of HTML/CSS size model.StyleSheet.ListPainter
getListPainter(AttributeSet a)
Fetches the list formatter to use for the given set of CSS attributes.float
getPointSize(int index)
Returns the point size, given a size index.float
getPointSize(String size)
Given a string such as "+2", "-2", or "2", returns a point size value.Style
getRule(String selector)
Fetches the rule that best matches the selector given in string form.Style
getRule(HTML.Tag t, Element e)
Fetches the style to use to render the given type of HTML tag.StyleSheet[]
getStyleSheets()
Returns an array of the linked StyleSheets.AttributeSet
getViewAttributes(View v)
Fetches a set of attributes to use in the view for displaying.void
importStyleSheet(URL url)
Imports a style sheet fromurl
.void
loadRules(Reader in, URL ref)
Loads a set of rules that have been specified in terms of CSS1 grammar.AttributeSet
removeAttribute(AttributeSet old, Object key)
Removes an attribute from the set.AttributeSet
removeAttributes(AttributeSet old, Enumeration<?> names)
Removes a set of attributes for the element.AttributeSet
removeAttributes(AttributeSet old, AttributeSet attrs)
Removes a set of attributes.void
removeStyle(String nm)
Removes a named style previously added to the document.void
removeStyleSheet(StyleSheet ss)
Removes the StyleSheetss
from those of the receiver.void
setBase(URL base)
Sets the base.void
setBaseFontSize(int sz)
Sets the base font size, with valid values between 1 and 7.void
setBaseFontSize(String size)
Sets the base font size from the passed in String.Color
stringToColor(String string)
Converts a color string such as "RED" or "#NNNNNN" to a Color.AttributeSet
translateHTMLToCSS(AttributeSet htmlAttrSet)
Converts a set of HTML attributes to an equivalent set of CSS attributes.Methods declared in class javax.swing.text.StyleContext
addChangeListener, addStyle, getChangeListeners, getCompressionThreshold, getDefaultStyleContext, getEmptySet, getFont, getFontMetrics, getStaticAttribute, getStaticAttributeKey, getStyle, getStyleNames, readAttributes, readAttributeSet, reclaim, registerStaticAttributeKey, removeChangeListener, toString, writeAttributes, writeAttributeSet
-
Constructor Details
-
StyleSheet
public StyleSheet()Construct a StyleSheet
-
-
Method Details
-
getRule
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.- Parameters:
t
- the type to translate to visual attributese
- the element representing the tag; the element can be used to determine the nesting for situations where the attributes will differ if nested inside of other elements- Returns:
- the set of CSS attributes to use to render the tag
-
getRule
Fetches the rule that best matches the selector given in string form. Whereselector
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".
- Parameters:
selector
- a space separated String of the element names.- Returns:
- the rule that best matches the selector.
-
addRule
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.- Parameters:
rule
- a set of rules
-
getDeclaration
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.- Parameters:
decl
- a CSS declaration- Returns:
- a set of attributes that represents the CSS declaration.
-
loadRules
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.- Parameters:
in
- the stream to read the CSS grammar fromref
- the reference URL. This value represents the location of the stream and may be null. All relative URLs specified in the stream will be based upon this parameter.- Throws:
IOException
- if I/O error occured.
-
getViewAttributes
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.- Parameters:
v
- a view- Returns:
- the of attributes
-
removeStyle
Removes a named style previously added to the document.- Overrides:
removeStyle
in classStyleContext
- Parameters:
nm
- the name of the style to remove
-
addStyleSheet
Adds the rules from the StyleSheetss
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.- Parameters:
ss
- a StyleSheet- Since:
- 1.3
-
removeStyleSheet
Removes the StyleSheetss
from those of the receiver.- Parameters:
ss
- a StyleSheet- Since:
- 1.3
-
getStyleSheets
Returns an array of the linked StyleSheets. Will return null if there are no linked StyleSheets.- Returns:
- an array of StyleSheets.
- Since:
- 1.3
-
importStyleSheet
Imports a style sheet fromurl
. 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.- Parameters:
url
- an url- Since:
- 1.3
-
setBase
Sets the base. All import statements that are relative, will be relative tobase
.- Parameters:
base
- a base.- Since:
- 1.3
-
getBase
Returns the base.- Returns:
- the base.
- Since:
- 1.3
-
addCSSAttribute
Adds a CSS attribute to the given set.- Parameters:
attr
- a set of attributeskey
- a CSS propertyvalue
- an HTML attribute value- Since:
- 1.3
-
addCSSAttributeFromHTML
Adds a CSS attribute to the given set.- Parameters:
attr
- a set of attributeskey
- a CSS propertyvalue
- an HTML attribute value- Returns:
true
if an HTML attributevalue
can be converted to a CSS attribute, false otherwise.- Since:
- 1.3
-
translateHTMLToCSS
Converts a set of HTML attributes to an equivalent set of CSS attributes.- Parameters:
htmlAttrSet
- AttributeSet containing the HTML attributes.- Returns:
- the set of CSS attributes.
-
addAttribute
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).- Specified by:
addAttribute
in interfaceAbstractDocument.AttributeContext
- Overrides:
addAttribute
in classStyleContext
- Parameters:
old
- the old attribute setkey
- the non-null attribute keyvalue
- the attribute value- Returns:
- the updated attribute set
- See Also:
MutableAttributeSet.addAttribute(java.lang.Object, java.lang.Object)
-
addAttributes
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.- Specified by:
addAttributes
in interfaceAbstractDocument.AttributeContext
- Overrides:
addAttributes
in classStyleContext
- Parameters:
old
- the old attribute setattr
- the attributes to add- Returns:
- the updated attribute set
- See Also:
MutableAttributeSet.addAttribute(java.lang.Object, java.lang.Object)
-
removeAttribute
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.- Specified by:
removeAttribute
in interfaceAbstractDocument.AttributeContext
- Overrides:
removeAttribute
in classStyleContext
- Parameters:
old
- the old set of attributeskey
- the non-null attribute name- Returns:
- the updated attribute set
- See Also:
MutableAttributeSet.removeAttribute(java.lang.Object)
-
removeAttributes
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.- Specified by:
removeAttributes
in interfaceAbstractDocument.AttributeContext
- Overrides:
removeAttributes
in classStyleContext
- Parameters:
old
- the old attribute setnames
- the attribute names- Returns:
- the updated attribute set
- See Also:
MutableAttributeSet.removeAttributes(java.util.Enumeration<?>)
-
removeAttributes
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.- Specified by:
removeAttributes
in interfaceAbstractDocument.AttributeContext
- Overrides:
removeAttributes
in classStyleContext
- Parameters:
old
- the old attribute setattrs
- the attributes- Returns:
- the updated attribute set
- See Also:
MutableAttributeSet.removeAttributes(java.util.Enumeration<?>)
-
createSmallAttributeSet
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.- Overrides:
createSmallAttributeSet
in classStyleContext
- Parameters:
a
- The set of attributes to be represented in the the compact form.- Returns:
- a compact set of attributes that might be shared
-
createLargeAttributeSet
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.- Overrides:
createLargeAttributeSet
in classStyleContext
- Parameters:
a
- The set of attributes to be represented in the the larger form.- Returns:
- a large set of attributes that should trade off space for time
-
getFont
Fetches the font to use for the given set of attributes.- Overrides:
getFont
in classStyleContext
- Parameters:
a
- the attribute set- Returns:
- the font
-
getForeground
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.- Overrides:
getForeground
in classStyleContext
- Parameters:
a
- the set of attributes- Returns:
- the color
-
getBackground
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.- Overrides:
getBackground
in classStyleContext
- Parameters:
a
- the set of attributes- Returns:
- the color
-
getBoxPainter
Fetches the box formatter to use for the given set of CSS attributes.- Parameters:
a
- a set of CSS attributes- Returns:
- the box formatter.
-
getListPainter
Fetches the list formatter to use for the given set of CSS attributes.- Parameters:
a
- a set of CSS attributes- Returns:
- the list formatter.
-
setBaseFontSize
public void setBaseFontSize(int sz)Sets the base font size, with valid values between 1 and 7.- Parameters:
sz
- a font size.
-
setBaseFontSize
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 identify a relative font size such as +1 or -2.- Parameters:
size
- a font size.
-
getIndexOfSize
public static int getIndexOfSize(float pt)Returns the index of HTML/CSS size model.- Parameters:
pt
- a size of point- Returns:
- the index of HTML/CSS size model.
-
getPointSize
public float getPointSize(int index)Returns the point size, given a size index.- Parameters:
index
- a size index- Returns:
- the point size value.
-
getPointSize
Given a string such as "+2", "-2", or "2", returns a point size value.- Parameters:
size
- a CSS string describing font size- Returns:
- the point size value.
-
stringToColor
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.- Parameters:
string
- color string such as "RED" or "#NNNNNN"- Returns:
- the color
-