- From: Julien Grand-Mourcel via cvs-syncmail <cvsmail@w3.org>
- Date: Fri, 10 Aug 2007 14:52:39 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/servlet
In directory hutz:/tmp/cvs-serv13694/org/w3c/css/servlet
Modified Files:
CssValidator.java
Log Message:
Adding a new method to parse HTML giving the text instead of the URL.
Testing if it is a CSS or an HTML file when file upload (using the extension) or direct input (looking for <style>)
Index: CssValidator.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/servlet/CssValidator.java,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- CssValidator.java 9 Aug 2007 09:31:04 -0000 1.34
+++ CssValidator.java 10 Aug 2007 14:52:36 -0000 1.35
@@ -29,6 +29,7 @@
import org.w3c.css.css.StyleReportFactory;
import org.w3c.css.css.StyleSheet;
import org.w3c.css.css.StyleSheetParser;
+import org.w3c.css.css.TagSoupStyleSheetHandler;
import org.w3c.css.error.ErrorReport;
import org.w3c.css.error.ErrorReportFactory;
import org.w3c.css.index.IndexGenerator;
@@ -338,7 +339,7 @@
}
// verbose("From " + req.getRemoteHost() +
// " (" + req.getRemoteAddr() + ") at " + (new Date()) );
-
+
if (uri != null) {
// HTML document
try {
@@ -359,31 +360,59 @@
} catch (Exception e) {
handleError(res, ac, output, uri, e, true);
}
- } else {
- Util.verbose("- TextArea Data -");
- Util.verbose(text);
- Util.verbose("- End of TextArea Data");
-
- parser = new StyleSheetParser();
-
- try {
-
- parser.parseStyleElement(ac,
- new ByteArrayInputStream(text.getBytes()),
- null, usermedium,
- new URL("file://localhost/TextArea"), 0);
-
- handleRequest(ac, res, "file://localhost/TextArea",
- parser.getStyleSheet(), output, warningLevel,
- errorReport);
- } catch (Exception e) {
- handleError(res, ac, output, "TextArea", e, false);
- }
+ } else if (text != null) {
+ String fileName = "TextArea";
+ Util.verbose("- " + fileName + " Data -");
+ Util.verbose(text);
+ Util.verbose("- End of " + fileName + " Data");
+ InputStream is = new ByteArrayInputStream(text.getBytes());
+ fileName = "file://localhost/" + fileName;
+
+ try {
+
+ if (isCSS(text)) {
+ parser = new StyleSheetParser();
+ parser.parseStyleElement(ac, is, null, usermedium,
+ new URL(fileName), 0);
+
+ handleRequest(ac, res, fileName, parser
+ .getStyleSheet(), output, warningLevel, errorReport);
+ } else {
+ // try HTML
+ TagSoupStyleSheetHandler handler = new TagSoupStyleSheetHandler(null, ac);
+ handler.parse(is, fileName);
+
+ handleRequest(ac, res, fileName, handler.getStyleSheet(), output,
+ warningLevel, errorReport);
+ }
+ } catch (ProtocolException pex) {
+ if (Util.onDebug) {
+ pex.printStackTrace();
+ }
+ res.setHeader("WWW-Authenticate", pex.getMessage());
+ res.sendError(HttpServletResponse.SC_UNAUTHORIZED);
+ } catch (Exception e) {
+ handleError(res, ac, output, fileName, e, false);
+ }
}
Util.verbose("CssValidator: Request terminated.\n");
}
/**
+ * This method is used for the direct input
+ * If the <style> tag is found, it may be an HTML entry
+ * The exception is when this tag is inside comment
+ * It might also be an HTML document with no CSS => why ?
+ * Or with only imports (we can't chack thoses imports...)
+ * @param text, the textarea to test
+ * @return <tt>false</tt> if it contains the style tag well formed
+ */
+ private boolean isCSS(String text) {
+ String anyChar = "(.|\n|\r)*";
+ return !text.toLowerCase().matches(anyChar + "<style"+anyChar+">"+anyChar+"</style>"+anyChar);
+ }
+
+ /**
* Performs the HTTP POST operation. An HTTP BAD_REQUEST error is reported
* if an error occurs. The headers that are set should include content type,
* length, and encoding. Setting content length allows the servlet to take
@@ -581,43 +610,54 @@
} else {
ac.setCssVersion("css21");
}
+ String fileName = "";
+ InputStream is = null;
+ boolean isCSS = false;
+
if (file != null && file.getSize() != 0) {
- Util.verbose("File : " + file.getName());
-
- parser = new StyleSheetParser();
-
+ fileName = file.getName();
+ Util.verbose("File : " + fileName);
+ is = file.getInputStream();
+ if (fileName.endsWith(".css"))
+ isCSS = true;
+ } else if (text != null ) {
+ fileName = "TextArea";
+ Util.verbose("- " + fileName + " Data -");
+ Util.verbose(text);
+ Util.verbose("- End of " + fileName + " Data");
+ is = new ByteArrayInputStream(text.getBytes());
+ //quick test that works in most cases to determine wether it's HTML or CSS
+ isCSS = isCSS(text);
+ }
+ fileName = "file://localhost/" + fileName;
+ //TODO: define the content-type
try {
- parser.parseStyleElement(ac, file.getInputStream(), null, null,
- new URL("file://localhost/" + file.getName()), 0);
+ //if CSS:
+
+ if (isCSS) {
+ parser = new StyleSheetParser();
+ parser.parseStyleElement(ac, is, null, usermedium,
+ new URL(fileName), 0);
+
+ handleRequest(ac, res, fileName, parser
+ .getStyleSheet(), output, warningLevel, errorReport);
+ } else {
+ // try HTML
+ TagSoupStyleSheetHandler handler = new TagSoupStyleSheetHandler(null, ac);
+ handler.parse(is, fileName);
- handleRequest(ac, res, "file://localhost/" + file.getName(), parser
- .getStyleSheet(), output, warningLevel, errorReport);
+ handleRequest(ac, res, fileName, handler.getStyleSheet(), output,
+ warningLevel, errorReport);
+ }
+ } catch (ProtocolException pex) {
+ if (Util.onDebug) {
+ pex.printStackTrace();
+ }
+ res.setHeader("WWW-Authenticate", pex.getMessage());
+ res.sendError(HttpServletResponse.SC_UNAUTHORIZED);
} catch (Exception e) {
- handleError(res, ac, output, file.getName(), e, false);
+ handleError(res, ac, output, fileName, e, false);
}
- }
- else if (text != null ){
- Util.verbose("- TextArea Data -");
- Util.verbose(text);
- Util.verbose("- End of TextArea Data");
-
- parser = new StyleSheetParser();
-
- try {
-
- parser.parseStyleElement(ac,
- new ByteArrayInputStream(text.getBytes()),
- null, usermedium,
- new URL("file://localhost/TextArea"), 0);
-
- handleRequest(ac, res, "file://localhost/TextArea",
- parser.getStyleSheet(), output, warningLevel,
- errorReport);
- } catch (Exception e) {
- handleError(res, ac, output, "TextArea", e, false);
- }
-
- }
Util.verbose("CssValidator: Request terminated.\n");
Received on Friday, 10 August 2007 14:52:43 UTC