Allow CssResource to handle identifiers containing underscores or that have a leading hyphen. Patch by: bobv Review by: cromwellian git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7413 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/build.xml b/user/build.xml index 9153f8e..2cf7c5a 100755 --- a/user/build.xml +++ b/user/build.xml
@@ -80,7 +80,7 @@ <pathelement location="${gwt.tools.lib}/jfreechart/jfreechart-1.0.3.jar" /> <pathelement location="${gwt.tools.lib}/selenium/selenium-java-client-driver.jar" /> <pathelement location="${gwt.tools.lib}/w3c/sac/sac-1.3.jar" /> - <pathelement location="${gwt.tools.lib}/w3c/flute/flute-1.3.jar" /> + <pathelement location="${gwt.tools.lib}/w3c/flute/flute-1.3-gg1.jar" /> <pathelement location="${gwt.dev.jar}" /> </classpath> </gwt.javac> @@ -132,7 +132,7 @@ <fileset dir="${javac.out}" /> <zipfileset src="${gwt.tools.lib}/tomcat/servlet-api-2.5.jar" excludes="**/*.java"/> <zipfileset src="${gwt.tools.lib}/w3c/sac/sac-1.3.jar" /> - <zipfileset src="${gwt.tools.lib}/w3c/flute/flute-1.3.jar" /> + <zipfileset src="${gwt.tools.lib}/w3c/flute/flute-1.3-gg1.jar" /> </gwt.jar> </target>
diff --git a/user/src/com/google/gwt/resources/css/GenerateCssAst.java b/user/src/com/google/gwt/resources/css/GenerateCssAst.java index afcb68e..e76e8c6 100644 --- a/user/src/com/google/gwt/resources/css/GenerateCssAst.java +++ b/user/src/com/google/gwt/resources/css/GenerateCssAst.java
@@ -796,6 +796,13 @@ assert selector.length() > 0; StringBuilder toReturn = new StringBuilder(); + + if (selector.charAt(0) == '-') { + // Allow leading hyphen + selector = selector.substring(1); + toReturn.append('-'); + } + if (!isIdentStart(selector.charAt(0))) { toReturn.append('\\'); } @@ -867,11 +874,12 @@ } private static boolean isIdentPart(char c) { - return Character.isLetterOrDigit(c) || (c == '\\') || (c == '-'); + return Character.isLetterOrDigit(c) || (c == '\\') || (c == '-') + || (c == '_'); } private static boolean isIdentStart(char c) { - return Character.isLetter(c) || (c == '\\'); + return Character.isLetter(c) || (c == '\\') || (c == '_'); } /**
diff --git a/user/src/com/google/gwt/resources/css/RtlVisitor.java b/user/src/com/google/gwt/resources/css/RtlVisitor.java index 3994231..87b13ea 100644 --- a/user/src/com/google/gwt/resources/css/RtlVisitor.java +++ b/user/src/com/google/gwt/resources/css/RtlVisitor.java
@@ -235,8 +235,11 @@ String[] parts = name.toLowerCase().split("-"); StringBuffer methodName = new StringBuffer("propertyHandler"); for (String part : parts) { - methodName.append(Character.toUpperCase(part.charAt(0))); - methodName.append(part, 1, part.length()); + if (part.length() > 0) { + // A leading hyphen, or something like foo--bar, which is weird + methodName.append(Character.toUpperCase(part.charAt(0))); + methodName.append(part, 1, part.length()); + } } try {
diff --git a/user/src/com/google/gwt/resources/css/ast/CssProperty.java b/user/src/com/google/gwt/resources/css/ast/CssProperty.java index 0d200f1..a8e431c 100644 --- a/user/src/com/google/gwt/resources/css/ast/CssProperty.java +++ b/user/src/com/google/gwt/resources/css/ast/CssProperty.java
@@ -406,6 +406,7 @@ private ListValue value; public CssProperty(String name, Value value, boolean important) { + assert name.length() > 0 : "name"; this.name = name; setValue(value); this.important = important;
diff --git a/user/test/com/google/gwt/resources/client/CSSResourceTest.java b/user/test/com/google/gwt/resources/client/CSSResourceTest.java index 1473b76..8e69a39 100644 --- a/user/test/com/google/gwt/resources/client/CSSResourceTest.java +++ b/user/test/com/google/gwt/resources/client/CSSResourceTest.java
@@ -284,7 +284,10 @@ assertTrue(text.contains("runtime:PASSED;")); // Check interestingly-named idents - assertTrue(text.contains("\\-some-wacky-extension")); + assertTrue(text.contains("-some-wacky-extension")); + assertTrue(text.contains("another-extension:-bar")); + assertTrue(text.contains("-unescaped-hyphen:-is-better")); + assertTrue(text.contains("with_underscore:_is_better")); assertTrue(text.contains("ns\\:tag")); assertTrue(text.contains("ns\\:tag:pseudo"));
diff --git a/user/test/com/google/gwt/resources/client/test.css b/user/test/com/google/gwt/resources/client/test.css index ec8cd09..0d3efdb 100644 --- a/user/test/com/google/gwt/resources/client/test.css +++ b/user/test/com/google/gwt/resources/client/test.css
@@ -109,6 +109,8 @@ div { \-some-wacky-extension : boo; another-extension: \-bar; + -unescaped-hyphen: -is-better; + with_underscore: _is_better; } div {
diff --git a/user/test/com/google/gwt/resources/css/ExtractClassNamesVisitorTest.java b/user/test/com/google/gwt/resources/css/ExtractClassNamesVisitorTest.java index 0ebaaf6..5a00a0b 100644 --- a/user/test/com/google/gwt/resources/css/ExtractClassNamesVisitorTest.java +++ b/user/test/com/google/gwt/resources/css/ExtractClassNamesVisitorTest.java
@@ -36,7 +36,8 @@ Set<String> expected = new TreeSet<String>(Arrays.asList("selector1", "selector2", "selector3", "external1", "external2", "external3", - "prefixed-selector")); + "prefixed-selector", "selector_with_underscores", + "-selector-with-hyphen")); Set<String> actual = new TreeSet<String>(v.getFoundClasses()); assertEquals(expected, actual); @@ -50,7 +51,8 @@ test(TreeLogger.NULL, "extractClassNames", false, v); Set<String> expected = new TreeSet<String>(Arrays.asList("selector1", - "selector2", "selector3", "external1", "external2", "external3")); + "selector2", "selector3", "external1", "external2", "external3", + "selector_with_underscores", "-selector-with-hyphen")); Set<String> actual = new TreeSet<String>(v.getFoundClasses()); assertEquals(expected, actual);
diff --git a/user/test/com/google/gwt/resources/css/extractClassNames_expected.css b/user/test/com/google/gwt/resources/css/extractClassNames_expected.css index 3a023ff..51027ff 100644 --- a/user/test/com/google/gwt/resources/css/extractClassNames_expected.css +++ b/user/test/com/google/gwt/resources/css/extractClassNames_expected.css
@@ -24,6 +24,12 @@ .prefixed-selector { } +.selector_with_underscores { +} + +.-selector-with-hyphen { +} + /* This is not a class selector */ fail { }
diff --git a/user/test/com/google/gwt/resources/css/extractClassNames_test.css b/user/test/com/google/gwt/resources/css/extractClassNames_test.css index 3a023ff..51027ff 100644 --- a/user/test/com/google/gwt/resources/css/extractClassNames_test.css +++ b/user/test/com/google/gwt/resources/css/extractClassNames_test.css
@@ -24,6 +24,12 @@ .prefixed-selector { } +.selector_with_underscores { +} + +.-selector-with-hyphen { +} + /* This is not a class selector */ fail { }