From: <rb...@us...> - 2012-12-27 17:21:53
|
Revision: 7916 http://sourceforge.net/p/htmlunit/code/7916 Author: rbri Date: 2012-12-27 17:21:50 +0000 (Thu, 27 Dec 2012) Log Message: ----------- % next try switching to the new CSS3 parser Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSFontFaceRule.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSRule.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleSheet.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSSelectorTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java 2012-12-25 07:03:58 UTC (rev 7915) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java 2012-12-27 17:21:50 UTC (rev 7916) @@ -59,7 +59,7 @@ import com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleSheet; import com.gargoylesoftware.htmlunit.javascript.host.html.HTMLElement; import com.steadystate.css.parser.CSSOMParser; -import com.steadystate.css.parser.SACParserCSS21; +import com.steadystate.css.parser.SACParserCSS3; /** * Base class for nodes in the HTML DOM tree. This class is modeled after the @@ -1558,7 +1558,7 @@ errorOccured.set(true); } }; - final CSSOMParser parser = new CSSOMParser(new SACParserCSS21()); + final CSSOMParser parser = new CSSOMParser(new SACParserCSS3()); parser.setErrorHandler(errorHandler); final SelectorList selectorList = parser.parseSelectors(new InputSource(new StringReader(selectors))); // in case of error parseSelectors returns null Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSFontFaceRule.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSFontFaceRule.java 2012-12-25 07:03:58 UTC (rev 7915) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSFontFaceRule.java 2012-12-27 17:21:50 UTC (rev 7916) @@ -16,6 +16,8 @@ import java.util.regex.Pattern; +import org.apache.commons.lang3.StringUtils; + import com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxGetter; @@ -32,7 +34,7 @@ public class CSSFontFaceRule extends CSSRule { private static final Pattern REPLACEMENT_1 = Pattern.compile("font-family: ([^;]*);"); - private static final Pattern REPLACEMENT_2 = Pattern.compile("src: ([^;]*);"); + private static final Pattern REPLACEMENT_2 = Pattern.compile("src: url\\(([^;]*)\\);"); /** * Creates a new instance. JavaScript objects must have a default constructor. @@ -47,7 +49,7 @@ * @param stylesheet the Stylesheet of this rule. * @param rule the wrapped rule */ - protected CSSFontFaceRule(final CSSStyleSheet stylesheet, final org.w3c.dom.css.CSSRule rule) { + protected CSSFontFaceRule(final CSSStyleSheet stylesheet, final org.w3c.dom.css.CSSFontFaceRule rule) { super(stylesheet, rule); } @@ -61,9 +63,9 @@ @JsxGetter(@WebBrowser(BrowserName.FF)) public String getCssText() { String cssText = super.getCssText(); - cssText = cssText.replace("{ ", "{\n "); - cssText = cssText.replace("; }", ";\n}"); - cssText = cssText.replace("; ", ";\n "); + cssText = StringUtils.replace(cssText, "{", "{\n "); + cssText = StringUtils.replace(cssText, "}", ";\n}"); + cssText = StringUtils.replace(cssText, "; ", ";\n "); cssText = REPLACEMENT_1.matcher(cssText).replaceFirst("font-family: \"$1\";"); cssText = REPLACEMENT_2.matcher(cssText).replaceFirst("src: url(\"$1\");"); return cssText; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSRule.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSRule.java 2012-12-25 07:03:58 UTC (rev 7915) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSRule.java 2012-12-27 17:21:50 UTC (rev 7916) @@ -92,10 +92,6 @@ case FONT_FACE_RULE: return new CSSFontFaceRule(stylesheet, (org.w3c.dom.css.CSSFontFaceRule) rule); default: - if (rule.getCssText().startsWith("@font-face")) { - // hack for the lack of support for @font-face in the SACParserCSS21 we currently use - return new CSSFontFaceRule(stylesheet, rule); - } throw new UnsupportedOperationException("CSSRule " + rule.getClass().getName() + " is not yet supported:" + rule.getCssText()); } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java 2012-12-25 07:03:58 UTC (rev 7915) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java 2012-12-27 17:21:50 UTC (rev 7916) @@ -69,7 +69,7 @@ import com.gargoylesoftware.htmlunit.javascript.host.html.HTMLHtmlElement; import com.steadystate.css.dom.CSSValueImpl; import com.steadystate.css.parser.CSSOMParser; -import com.steadystate.css.parser.SACParserCSS21; +import com.steadystate.css.parser.SACParserCSS3; /** * A JavaScript object for a CSSStyleDeclaration. @@ -5607,7 +5607,7 @@ final InputSource source = new InputSource(new StringReader(styleAttribute)); source.setURI(uri); final ErrorHandler errorHandler = getWindow().getWebWindow().getWebClient().getCssErrorHandler(); - final CSSOMParser parser = new CSSOMParser(new SACParserCSS21()); + final CSSOMParser parser = new CSSOMParser(new SACParserCSS3()); parser.setErrorHandler(errorHandler); try { styleDeclaration_ = parser.parseStyleDeclaration(source); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleSheet.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleSheet.java 2012-12-25 07:03:58 UTC (rev 7915) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleSheet.java 2012-12-27 17:21:50 UTC (rev 7916) @@ -93,7 +93,7 @@ import com.steadystate.css.dom.CSSStyleRuleImpl; import com.steadystate.css.dom.CSSStyleSheetImpl; import com.steadystate.css.parser.CSSOMParser; -import com.steadystate.css.parser.SACParserCSS21; +import com.steadystate.css.parser.SACParserCSS3; import com.steadystate.css.parser.SelectorListImpl; import com.steadystate.css.parser.selectors.GeneralAdjacentSelectorImpl; import com.steadystate.css.parser.selectors.PrefixAttributeConditionImpl; @@ -605,7 +605,7 @@ org.w3c.dom.css.CSSStyleSheet ss; try { final ErrorHandler errorHandler = getWindow().getWebWindow().getWebClient().getCssErrorHandler(); - final CSSOMParser parser = new CSSOMParser(new SACParserCSS21()); + final CSSOMParser parser = new CSSOMParser(new SACParserCSS3()); parser.setErrorHandler(errorHandler); ss = parser.parseStyleSheet(source, null, null); } @@ -632,7 +632,7 @@ SelectorList selectors; try { final ErrorHandler errorHandler = getWindow().getWebWindow().getWebClient().getCssErrorHandler(); - final CSSOMParser parser = new CSSOMParser(new SACParserCSS21()); + final CSSOMParser parser = new CSSOMParser(new SACParserCSS3()); parser.setErrorHandler(errorHandler); selectors = parser.parseSelectors(source); // in case of error parseSelectors returns null Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSSelectorTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSSelectorTest.java 2012-12-25 07:03:58 UTC (rev 7915) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSSelectorTest.java 2012-12-27 17:21:50 UTC (rev 7916) @@ -19,6 +19,7 @@ import com.gargoylesoftware.htmlunit.BrowserRunner; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; +import com.gargoylesoftware.htmlunit.BrowserRunner.Browser; import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented; import com.gargoylesoftware.htmlunit.WebDriverTestCase; import com.gargoylesoftware.htmlunit.html.HtmlPageTest; @@ -41,7 +42,7 @@ */ @Test @Alerts("li2") - @NotYetImplemented + @NotYetImplemented(Browser.IE) public void nth_child() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head><title>First</title><script>\n" @@ -90,7 +91,7 @@ */ @Test @Alerts({ "li1", "li4", "li7", "li10" }) - @NotYetImplemented + @NotYetImplemented(Browser.IE) public void nth_child_equation() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head><title>First</title><script>\n" @@ -172,7 +173,6 @@ */ @Test @Alerts({ "1", "thing1" }) - @NotYetImplemented public void prefixAttribute() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head><title>First</title><script>\n" @@ -199,7 +199,6 @@ */ @Test @Alerts({ "1", "something" }) - @NotYetImplemented public void suffixAttribute() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head><title>First</title><script>\n" @@ -226,7 +225,6 @@ */ @Test @Alerts({ "2", "something", "thing2" }) - @NotYetImplemented public void substringAttribute() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head><title>First</title><script>\n" @@ -254,7 +252,6 @@ */ @Test @Alerts({ "1", "ul2" }) - @NotYetImplemented public void generalAdjacentSelector() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head><title>First</title><script>\n" |