diff options
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | gnu/javax/swing/text/html/css/CSSParser.java | 23 | ||||
-rw-r--r-- | gnu/javax/swing/text/html/css/CSSParserCallback.java | 2 | ||||
-rw-r--r-- | javax/swing/text/html/BlockView.java | 16 | ||||
-rw-r--r-- | javax/swing/text/html/StyleSheet.java | 33 |
5 files changed, 76 insertions, 17 deletions
@@ -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. |