summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--javax/swing/text/html/HTMLDocument.java46
-rw-r--r--javax/swing/text/html/StyleSheet.java21
3 files changed, 67 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 8c43a0dc5..758ffec14 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2006-11-03 Roman Kennke <kennke@aicas.com>
+
+ * javax/swing/text/html/StyleSheet.java
+ (addRule): Implemented.
+ * javax/swing/text/html/HTMLDocument.java
+ (HTMLReader.inStyleTag): New field.
+ (HTMLReader.styles): New field.
+ (HTMLReader.HeadAction.end): Implemented to read all stylesheets,
+ if any.
+ (HTMLReader.StyleAction.start): Set inStyleTag flag.
+ (HTMLReader.StyleAction.end): Set inStyleTag flag.
+ (HTMLReader.handleText): When inside a style tag, add
+ content to the styles array.
+
2006-11-02 Roman Kennke <kennke@aicas.com>
* javax/swing/text/html/FormView.java
diff --git a/javax/swing/text/html/HTMLDocument.java b/javax/swing/text/html/HTMLDocument.java
index 2ff0fd097..b2342944f 100644
--- a/javax/swing/text/html/HTMLDocument.java
+++ b/javax/swing/text/html/HTMLDocument.java
@@ -44,6 +44,7 @@ import gnu.javax.swing.text.html.parser.htmlAttributeSet;
import java.io.IOException;
import java.io.StringReader;
import java.net.URL;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Stack;
import java.util.Vector;
@@ -568,6 +569,21 @@ public class HTMLDocument extends DefaultStyledDocument
*/
boolean inPreTag = false;
+ /**
+ * This is true when we are inside a style tag. This will add text
+ * content inside this style tag beeing parsed as CSS.
+ *
+ * This is package private to avoid accessor methods.
+ */
+ boolean inStyleTag = false;
+
+ /**
+ * This contains all stylesheets that are somehow read, either
+ * via embedded style tags, or via linked stylesheets. The
+ * elements will be String objects containing a stylesheet each.
+ */
+ ArrayList styles;
+
void print (String line)
{
if (debug)
@@ -932,9 +948,17 @@ public class HTMLDocument extends DefaultStyledDocument
public void end(HTML.Tag t)
throws NotImplementedException
{
- // FIXME: Implement.
- print ("HeadAction.end not implemented: "+t);
- super.end(t);
+ // We read in all the stylesheets that are embedded or referenced
+ // inside the header.
+ if (styles != null)
+ {
+ int numStyles = styles.size();
+ for (int i = 0; i < numStyles; i++)
+ {
+ String style = (String) styles.get(i);
+ getStyleSheet().addRule(style);
+ }
+ }
}
}
@@ -1012,7 +1036,7 @@ public class HTMLDocument extends DefaultStyledDocument
print ("MetaAction.end not implemented");
}
}
-
+
class StyleAction extends TagAction
{
/**
@@ -1020,10 +1044,8 @@ public class HTMLDocument extends DefaultStyledDocument
* of tags associated with this Action.
*/
public void start(HTML.Tag t, MutableAttributeSet a)
- throws NotImplementedException
{
- // FIXME: Implement.
- print ("StyleAction.start not implemented");
+ inStyleTag = true;
}
/**
@@ -1031,10 +1053,8 @@ public class HTMLDocument extends DefaultStyledDocument
* with this Action.
*/
public void end(HTML.Tag t)
- throws NotImplementedException
{
- // FIXME: Implement.
- print ("StyleAction.end not implemented");
+ inStyleTag = false;
}
}
@@ -1240,6 +1260,12 @@ public class HTMLDocument extends DefaultStyledDocument
{
if (inPreTag)
preContent(data);
+ else if (inStyleTag)
+ {
+ if (styles == null)
+ styles = new ArrayList();
+ styles.add(new String(data));
+ }
else
addContent(data, 0, data.length);
diff --git a/javax/swing/text/html/StyleSheet.java b/javax/swing/text/html/StyleSheet.java
index c21fc064a..562203e75 100644
--- a/javax/swing/text/html/StyleSheet.java
+++ b/javax/swing/text/html/StyleSheet.java
@@ -38,7 +38,6 @@ exception statement from your version. */
package javax.swing.text.html;
-import gnu.classpath.NotImplementedException;
import gnu.javax.swing.text.html.css.CSSColor;
import gnu.javax.swing.text.html.css.CSSParser;
import gnu.javax.swing.text.html.css.CSSParserCallback;
@@ -53,6 +52,7 @@ import java.awt.Graphics;
import java.io.IOException;
import java.io.Reader;
import java.io.Serializable;
+import java.io.StringReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
@@ -94,8 +94,10 @@ public class StyleSheet extends StyleContext
/**
* Parses CSS stylesheets using the parser in gnu/javax/swing/html/css.
+ *
+ * This is package private to avoid accessor methods.
*/
- private class CSSStyleSheetParserCallback
+ class CSSStyleSheetParserCallback
implements CSSParserCallback
{
/**
@@ -405,9 +407,20 @@ public class StyleSheet extends StyleContext
* @param rule - the rule to add to the sheet
*/
public void addRule(String rule)
- throws NotImplementedException
{
- // FIXME: Implement.
+ CSSStyleSheetParserCallback cb = new CSSStyleSheetParserCallback();
+ // FIXME: Handle ref.
+ StringReader in = new StringReader(rule);
+ CSSParser parser = new CSSParser(in, cb);
+ try
+ {
+ parser.parse();
+ }
+ catch (IOException ex)
+ {
+ // Shouldn't happen. And if, then we
+ assert false;
+ }
}
/**