summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Kennke <roman@kennke.org>2006-11-16 16:07:13 +0000
committerRoman Kennke <roman@kennke.org>2006-11-16 16:07:13 +0000
commit4974bf3cd2889569efbcfc422afa78171f75e78d (patch)
tree0af50bbc981e43c2107ba13e2787db54c5144396
parent63cd013ae30b6b4db963ae282e484b7edaa97f63 (diff)
downloadclasspath-4974bf3cd2889569efbcfc422afa78171f75e78d.tar.gz
2006-11-16 Roman Kennke <kennke@aicas.com>
* gnu/javax/swing/text/html/css/CSSParser.java (parseRuleset): Support 'combined' selectors. (main): Adapt callback for combined selectors support. * gnu/javax/swing/text/html/css/CSSParserCallback.java (startStatement): Take selector array as argument, to support combined selectors. * javax/swing/text/html/BlockView.java (calculateMinorAxisRequirements): Fetch and apply alignment. * javax/swing/text/html/StyleSheet.java (CSSStyle): Inverted the constants for correct precedence. (CSSStyleSheetParserCallback.styles): New field. Stores the current styles. (CSSStyleSheetParserCallback.style): Removed. (CSSStyleSheetParserCallback.declaration): Update multiple styles. (CSSStyleSheetParserCallback.end): Push multiple styles. (CSSStyleSheetParserCallback.start): Initialize multiple styles.
-rw-r--r--ChangeLog19
-rw-r--r--gnu/javax/swing/text/html/css/CSSParser.java23
-rw-r--r--gnu/javax/swing/text/html/css/CSSParserCallback.java2
-rw-r--r--javax/swing/text/html/BlockView.java16
-rw-r--r--javax/swing/text/html/StyleSheet.java33
5 files changed, 76 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index fc6ee6bb2..79d2e9154 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,24 @@
2006-11-16 Roman Kennke <kennke@aicas.com>
+ * gnu/javax/swing/text/html/css/CSSParser.java
+ (parseRuleset): Support 'combined' selectors.
+ (main): Adapt callback for combined selectors support.
+ * gnu/javax/swing/text/html/css/CSSParserCallback.java
+ (startStatement): Take selector array as argument, to
+ support combined selectors.
+ * javax/swing/text/html/BlockView.java
+ (calculateMinorAxisRequirements): Fetch and apply alignment.
+ * javax/swing/text/html/StyleSheet.java
+ (CSSStyle): Inverted the constants for correct precedence.
+ (CSSStyleSheetParserCallback.styles): New field. Stores the current
+ styles.
+ (CSSStyleSheetParserCallback.style): Removed.
+ (CSSStyleSheetParserCallback.declaration): Update multiple styles.
+ (CSSStyleSheetParserCallback.end): Push multiple styles.
+ (CSSStyleSheetParserCallback.start): Initialize multiple styles.
+
+2006-11-16 Roman Kennke <kennke@aicas.com>
+
* javax/swing/text/FlowView.java
(LogicalView.getPreferredSpan): Calculate maximum correctly.
* javax/swing/text/GlyphView.java
diff --git a/gnu/javax/swing/text/html/css/CSSParser.java b/gnu/javax/swing/text/html/css/CSSParser.java
index 0d68457a3..753782378 100644
--- a/gnu/javax/swing/text/html/css/CSSParser.java
+++ b/gnu/javax/swing/text/html/css/CSSParser.java
@@ -45,6 +45,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.util.StringTokenizer;
/**
* A parser for CSS stylesheets.
@@ -158,7 +159,15 @@ public class CSSParser
{
StringBuilder selector = new StringBuilder();
parseSelector(selector);
- callback.startStatement(new Selector(selector.toString()));
+ StringTokenizer selSplitter =
+ new StringTokenizer(selector.toString(), ",");
+ Selector[] sels = new Selector[selSplitter.countTokens()];
+ for (int i = 0; selSplitter.hasMoreTokens(); i++)
+ {
+ String sel = selSplitter.nextToken().trim();
+ sels[i] = new Selector(sel);
+ }
+ callback.startStatement(sels);
// Read any number of whitespace.
int token;
do
@@ -458,9 +467,17 @@ public class CSSParser
InputStreamReader r = new InputStreamReader(bin);
CSSParserCallback cb = new CSSParserCallback()
{
- public void startStatement(Selector selector)
+ public void startStatement(Selector[] selector)
{
- System.out.println("startStatement: " + selector);
+ System.out.print("startStatement: ");
+ for (int i = 0; i < selector.length; i++)
+ {
+ System.out.print(selector[i]);
+ if (i < selector.length - 1)
+ System.out.print(',');
+ else
+ System.out.println();
+ }
}
public void endStatement()
{
diff --git a/gnu/javax/swing/text/html/css/CSSParserCallback.java b/gnu/javax/swing/text/html/css/CSSParserCallback.java
index b62baddfc..f49ffa232 100644
--- a/gnu/javax/swing/text/html/css/CSSParserCallback.java
+++ b/gnu/javax/swing/text/html/css/CSSParserCallback.java
@@ -62,7 +62,7 @@ public interface CSSParserCallback
*
* @param selector the selector of the statement.
*/
- void startStatement(Selector selector);
+ void startStatement(Selector[] selector);
/**
* Signals the end of a statement.
diff --git a/javax/swing/text/html/BlockView.java b/javax/swing/text/html/BlockView.java
index d7519ef9a..2e781412c 100644
--- a/javax/swing/text/html/BlockView.java
+++ b/javax/swing/text/html/BlockView.java
@@ -171,6 +171,22 @@ public class BlockView extends BoxView
}
else
r = super.calculateMinorAxisRequirements(axis, r);
+
+ // Apply text alignment if appropriate.
+ if (axis == X_AXIS)
+ {
+ Object o = getAttributes().getAttribute(CSS.Attribute.TEXT_ALIGN);
+ if (o != null)
+ {
+ String al = o.toString().trim();
+ if (al.equals("center"))
+ r.alignment = 0.5f;
+ else if (al.equals("right"))
+ r.alignment = 1.0f;
+ else
+ r.alignment = 0.0f;
+ }
+ }
return r;
}
diff --git a/javax/swing/text/html/StyleSheet.java b/javax/swing/text/html/StyleSheet.java
index 72cf7044f..150b27426 100644
--- a/javax/swing/text/html/StyleSheet.java
+++ b/javax/swing/text/html/StyleSheet.java
@@ -107,9 +107,9 @@ public class StyleSheet extends StyleContext
implements CSSParserCallback
{
/**
- * The current style.
+ * The current styles.
*/
- private CSSStyle style;
+ private CSSStyle[] styles;
/**
* The precedence of the stylesheet to be parsed.
@@ -133,9 +133,11 @@ public class StyleSheet extends StyleContext
*
* @param sel the selector
*/
- public void startStatement(Selector sel)
+ public void startStatement(Selector[] sel)
{
- style = new CSSStyle(precedence, sel);
+ styles = new CSSStyle[sel.length];
+ for (int i = 0; i < sel.length; i++)
+ styles[i] = new CSSStyle(precedence, sel[i]);
}
/**
@@ -143,8 +145,9 @@ public class StyleSheet extends StyleContext
*/
public void endStatement()
{
- css.add(style);
- style = null;
+ for (int i = 0; i < styles.length; i++)
+ css.add(styles[i]);
+ styles = null;
}
/**
@@ -157,9 +160,13 @@ public class StyleSheet extends StyleContext
{
CSS.Attribute cssAtt = CSS.getAttribute(property);
Object val = CSS.getValue(cssAtt, value);
- CSS.addInternal(style, cssAtt, value);
- if (cssAtt != null)
- style.addAttribute(cssAtt, val);
+ for (int i = 0; i < styles.length; i++)
+ {
+ CSSStyle style = styles[i];
+ CSS.addInternal(style, cssAtt, value);
+ if (cssAtt != null)
+ style.addAttribute(cssAtt, val);
+ }
}
}
@@ -172,11 +179,11 @@ public class StyleSheet extends StyleContext
implements Style, Comparable
{
- static final int PREC_UA = 400000;
- static final int PREC_NORM = 300000;
+ static final int PREC_UA = 0;
+ static final int PREC_NORM = 100000;
static final int PREC_AUTHOR_NORMAL = 200000;
- static final int PREC_AUTHOR_IMPORTANT = 100000;
- static final int PREC_USER_IMPORTANT = 0;
+ static final int PREC_AUTHOR_IMPORTANT = 300000;
+ static final int PREC_USER_IMPORTANT = 400000;
/**
* The priority of this style when matching CSS selectors.