- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Tue, 12 Jul 2005 13:44:55 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/css
In directory hutz:/tmp/cvs-serv5353
Modified Files:
StyleReportSOAP12.java
Log Message:
Fixed bug 750
http://www.w3.org/Bugs/Public/show_bug.cgi?id=750
Solved lots of encoding issues.
Index: StyleReportSOAP12.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/css/StyleReportSOAP12.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- StyleReportSOAP12.java 4 Dec 2003 19:12:05 -0000 1.5
+++ StyleReportSOAP12.java 12 Jul 2005 13:44:53 -0000 1.6
@@ -5,91 +5,94 @@
package org.w3c.css.css;
-import java.io.PrintWriter;
-import java.io.IOException;
import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintWriter;
import java.net.URL;
-import java.util.Hashtable;
-import java.util.Properties;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Locale;
import java.util.StringTokenizer;
-import java.util.Date;
import java.util.TimeZone;
-import java.util.Locale;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
import java.util.Vector;
-import org.w3c.css.parser.analyzer.ParseException;
-import org.w3c.css.parser.CssParseException;
-import org.w3c.css.parser.Errors;
import org.w3c.css.parser.CssError;
import org.w3c.css.parser.CssErrorToken;
-import org.w3c.css.parser.CssFouffa;
+import org.w3c.css.parser.CssParseException;
import org.w3c.css.parser.CssPrinterStyle;
import org.w3c.css.parser.CssSelectors;
-import org.w3c.css.parser.CssSelectorsConstant;
-import org.w3c.css.parser.AtRule;
-import org.w3c.css.parser.AtRulePage;
-import org.w3c.css.parser.AtRuleMedia;
-import org.w3c.css.parser.AtRuleFontFace;
+import org.w3c.css.parser.Errors;
import org.w3c.css.properties.CssProperty;
+import org.w3c.css.util.ApplContext;
import org.w3c.css.util.InvalidParamException;
-import org.w3c.css.util.SortedHashtable;
-import org.w3c.css.util.Warnings;
-import org.w3c.css.util.Warning;
+import org.w3c.css.util.Utf8Properties;
import org.w3c.css.util.Util;
-import org.w3c.css.util.ApplContext;
+import org.w3c.css.util.Warning;
+import org.w3c.css.util.Warnings;
/**
* @version $Revision$
*/
-public final class StyleReportSOAP12 extends StyleReport
- implements CssPrinterStyle {
+public final class StyleReportSOAP12 extends StyleReport implements
+CssPrinterStyle {
StyleSheet style;
+
Vector items;
+
Warnings warnings;
+
Errors errors;
+
ApplContext ac;
private CssSelectors selector;
+
private CssProperty property;
+
private PrintWriter out;
+
private int warningLevel;
- private Properties general;
- private static Properties availableFormat;
- private static Properties availablePropertiesURL;
+ private Utf8Properties general;
+
+ private static Utf8Properties availableFormat;
+
+ private static Utf8Properties availablePropertiesURL;
+
private static Hashtable formats = new Hashtable();
+
int counter = 0;
+ private final static String DEFAULT_CHARSET = "utf-8";
+
/**
* Create a new StyleSheetGenerator
*
- * @param title The title for the generated document
- * @param style The style sheet
- * @param document The name of the source file
- * @param warningLevel If you want to reduce warning output.
- * (-1 means no warnings)
+ * @param title
+ * The title for the generated document
+ * @param style
+ * The style sheet
+ * @param document
+ * The name of the source file
+ * @param warningLevel
+ * If you want to reduce warning output. (-1 means no warnings)
*/
- public StyleReportSOAP12(ApplContext ac,
- String title,
- StyleSheet style,
- String document,
- int warningLevel) {
-
+ public StyleReportSOAP12(ApplContext ac, String title, StyleSheet style,
+ String document, int warningLevel) {
if (document == null) {
document = "soap12.en";
}
if (Util.onDebug) {
- System.err.println( "document format is " + document );
+ System.err.println("document format is " + document);
}
this.ac = ac;
this.style = style;
- general = new Properties(setDocumentBase(getDocumentName(ac,
- document)));
+ general = new Utf8Properties(setDocumentBase(getDocumentName(ac, document)));
general.put("file-title", title);
warnings = style.getWarnings();
errors = style.getErrors();
@@ -98,25 +101,23 @@
this.warningLevel = warningLevel;
general.put("cssversion", ac.getCssVersion());
- general.put("errors-count",
- Integer.toString(errors.getErrorCount()));
- general.put("warnings-count",
- Integer.toString(warnings.getWarningCount()));
- general.put("rules-count",
- Integer.toString(items.size()));
- general.put("isvalid",(errors.getErrorCount() == 0) ? "true":"false");
+ general.put("errors-count", Integer.toString(errors.getErrorCount()));
+ general.put("warnings-count", Integer.toString(warnings
+ .getWarningCount()));
+ general.put("rules-count", Integer.toString(items.size()));
+ general.put("isvalid", (errors.getErrorCount() == 0) ? "true"
+ : "false");
if (ac.getContentEncoding() != null) {
- general.put("encoding",
- " encoding=\""+ac.getContentEncoding()+"\" ");
+ general.put("encoding", " encoding=\"" + ac.getContentEncoding()
+ + "\" ");
} else {
- general.put("encoding"," ");
+ general.put("encoding", " ");
}
if (errors.getErrorCount() == 0) {
desactivateError();
}
- if ((errors.getErrorCount() != 0)
- || (!title.startsWith("http://"))) {
+ if ((errors.getErrorCount() != 0) || (!title.startsWith("http://"))) {
general.put("no-errors", "");
}
if (style.charset == null) {
@@ -139,21 +140,19 @@
general.put("no-error-or-warning", "");
}
- if (Util.onDebug) general.list(System.err);
+ if (Util.onDebug)
+ general.list(System.err);
DateFormat df = null;
if (ac.getLang() != null) {
try {
- df = DateFormat
- .getDateTimeInstance(DateFormat.FULL,
- DateFormat.FULL,
- new Locale(ac.getLang().substring(0, 2),
- "US"));
+ df = DateFormat.getDateTimeInstance(DateFormat.FULL,
+ DateFormat.FULL, new Locale(ac.getLang()
+ .substring(0, 2), "US"));
} catch (Exception e) {
df = DateFormat.getDateTimeInstance(DateFormat.FULL,
- DateFormat.FULL,
- Locale.US);
+ DateFormat.FULL, Locale.US);
}
}
if (df != null) {
@@ -161,8 +160,8 @@
} else {
general.put("today", new Date().toString());
}
- SimpleDateFormat formatter
- = new SimpleDateFormat ("yyyy.MM.dd'T'hh:mm:ss'Z'");
+ SimpleDateFormat formatter = new SimpleDateFormat(
+ "yyyy.MM.dd'T'hh:mm:ss'Z'");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
general.put("currentdate", formatter.format(new Date()));
}
@@ -193,7 +192,7 @@
}
public void print(CssProperty property) {
- Properties prop = new Properties(general);
+ Utf8Properties prop = new Utf8Properties(general);
prop.put("property-name", property.getPropertyName().toString());
prop.put("property-value", property.toString());
@@ -206,8 +205,8 @@
public void produceParseException(CssParseException error) {
if (error.getContexts() != null && error.getContexts().size() != 0) {
StringBuffer buf = new StringBuffer();
- for (Enumeration e = error.getContexts().elements();
- e.hasMoreElements();) {
+ for (Enumeration e = error.getContexts().elements(); e
+ .hasMoreElements();) {
Object t = e.nextElement();
if (t != null) {
buf.append(t);
@@ -216,52 +215,59 @@
}
}
if (buf.length() != 0) {
- out.print("parse-error</m:errortype>\n<m:context>");
+ out.print("parse-error</m:errortype>\n\t\t\t<m:context>");
out.print(buf);
out.print("</m:context>\n");
}
}
+ else {
+ out.print("parse-error</m:errortype>\n");
+ }
String name = error.getProperty();
if ((name != null) && (getURLProperty(name) != null)) {
- out.print("<m:property>");
+ out.print("\t\t\t<m:property>");
out.print(name);
out.print("</m:property>\n");
}
if ((error.getException() != null) && (error.getMessage() != null)) {
if (error.isParseException()) {
- out.print("<m:message>");
+ out.print("\t\t\t<m:message>");
out.print(queryReplace(error.getMessage()));
out.print("</m:message>\n");
} else {
Exception ex = error.getException();
if (ex instanceof NumberFormatException) {
- out.print("<m:errorsubtype>invalid-number"+
- "</m:error-subtype>\n");
+ out.print("\t\t\t<m:errorsubtype>invalid-number"
+ + "</m:error-subtype>\n");
} else {
- out.print("<m:message>");
+ out.print("\t\t\t<m:message>");
out.print(queryReplace(ex.getMessage()));
out.print("</m:message>\n");
}
}
if (error.getSkippedString() != null) {
- out.print("<m:skippedstring>");
+ out.print("\t\t\t<m:skippedstring>");
out.print(queryReplace(error.getSkippedString()));
out.print("</m:skippedstring>\n");
} else if (error.getExp() != null) {
- out.print("<m:expression>\n<m:start>");
+ out.print("\t\t\t<m:expression>\n\t\t\t\t<m:start>");
out.print(queryReplace(error.getExp().toStringFromStart()));
- out.print("</m:start>\n<m:end>");
+ out.print("</m:start>\n\t\t\t\t<m:end>");
out.print(queryReplace(error.getExp().toString()));
- out.print("</m:end>\n</m:expression>\n");
+ out.print("</m:end>\n\t\t\t</m:expression>\n");
}
} else {
- out.print("<m:errorsubtype>unrecognized</m:errorsubtype>\n");
- out.print("<m:skippedstring>");
+ out.print("\t\t\t<m:errorsubtype>unrecognized</m:errorsubtype>\n");
+ out.print("\t\t\t<m:skippedstring>");
out.print(queryReplace(error.getSkippedString()));
out.print("</m:skippedstring>\n");
}
}
+ /**
+ * Produce SOAP elements for all the errors found
+ * in the StyleSheet <i>style</i>
+ */
public void produceError() {
String oldSourceFile = null;
boolean open = false;
@@ -269,8 +275,7 @@
try {
if (errors.getErrorCount() != 0) {
int i = 0;
- for (CssError[] error = errors.getErrors();
- i < error.length; i++) {
+ for (CssError[] error = errors.getErrors(); i < error.length; i++) {
Exception ex = error[i].getException();
String file = error[i].getSourceFile();
if (!file.equals(oldSourceFile)) {
@@ -281,51 +286,51 @@
out.print("<m:errorlist>\n");
open = true;
}
- out.print("<m:error>\n<m:line>\n");
+ out.print("\t\t<m:error>\n\t\t\t<m:line>");
out.print(error[i].getLine());
- out.print("</m:line>\n<m:errortype>");
+ out.print("</m:line>\n\t\t\t<m:errortype>");
if (ex instanceof FileNotFoundException) {
out.print("not-found");
- out.print("</m:errortype>\n<m:message>");
+ out.print("</m:errortype>\n\t\t\t<m:message>");
out.print(ex.getMessage());
out.print("</m:message>\n");
} else if (ex instanceof CssParseException) {
produceParseException((CssParseException) ex);
} else if (ex instanceof InvalidParamException) {
out.print("invalid-parameter");
- out.print("</m:errortype>\n<m:message>");
+ out.print("</m:errortype>\n\t\t\t<m:message>");
out.print(queryReplace(ex.getMessage()));
- out.print("</m:message>\n");
+ out.print("\t\t\t</m:message>\n");
} else if (ex instanceof IOException) {
out.print("IOException</m:errortype>\n");
- out.print("<m:message>");
+ out.print("\t\t\t<m:message>");
out.print(queryReplace(ex.getMessage()));
- out.print("</m:message>\n");
+ out.print("\t\t\t</m:message>\n");
} else if (error[i] instanceof CssErrorToken) {
out.print("csserror</m:errortype>");
CssErrorToken terror = (CssErrorToken) error[i];
- out.print("\n<m:description>");
+ out.print("\n\t\t\t\t<m:description>");
out.print(terror.getErrorDescription());
out.print("</m:description>\n");
- out.print("<m:skippedstring>");
+ out.print("\t\t\t\t<m:skippedstring>");
out.print(terror.getSkippedString());
out.print("</m:skippedstring>\n");
} else {
out.print("uncaught");
- out.print("</m:errortype>\n<m:message>");
+ out.print("</m:errortype>\n\t\t\t<m:message>");
out.print(queryReplace(ex.getMessage()));
out.print("</m:message>\n");
if (ex instanceof NullPointerException) {
// ohoh, a bug
out.print("nullpointer");
- out.print("</m:errortype>\n<m:message>");
+ out.print("</m:errortype>\n\t\t\t<m:message>");
ex.printStackTrace(out);
out.print("</m:message>\n");
}
}
- out.print("</m:error>\n");
+ out.print("\t\t</m:error>\n");
}
- out.print("</m:errorlist>");
+ out.print("\t</m:errorlist>");
}
} catch (Exception e) {
out.print("<m:processingerror>");
@@ -335,6 +340,10 @@
}
}
+ /**
+ * Produce SOAP elements for all the warnings found
+ * in the StyleSheet <i>style</i>
+ */
public void produceWarning() {
boolean open = false;
String oldSourceFile = "";
@@ -344,8 +353,7 @@
if (warnings.getWarningCount() != 0) {
int i = 0;
warnings.sort();
- for (Warning[] warning = warnings.getWarnings();
- i < warning.length; i++) {
+ for (Warning[] warning = warnings.getWarnings(); i < warning.length; i++) {
Warning warn = warning[i];
if (warn.getLevel() <= warningLevel) {
@@ -357,8 +365,8 @@
out.print("<m:warninglist>\n");
open = true;
}
- if (warn.getLine() != oldLine ||
- !warn.getWarningMessage().equals(oldMessage)) {
+ if (warn.getLine() != oldLine
+ || !warn.getWarningMessage().equals(oldMessage)) {
oldLine = warn.getLine();
oldMessage = warn.getWarningMessage();
out.print("<m:warning>\n<m:line>");
@@ -368,13 +376,13 @@
// if (warn.getLevel() != 0) {
// ret.append(" Level : ");
// ret.append(warn.getLevel());
- //}
+ // }
out.print("<m:level>");
out.print(warn.getLevel());
out.print("</m:level>\n");
-// out.print("<message>");
-// out.print(oldMessage);
-// out.print("</message>\n");
+ // out.print("<message>");
+ // out.print(oldMessage);
+ // out.print("</message>\n");
if (warn.getContext() != null) {
out.print("<m:context>");
out.print(warn.getContext());
@@ -394,6 +402,12 @@
}
}
+ /*
+ * Replace all occurences of < and > in a String with
+ * their html values: < and >
+ * @param s the String with < and >
+ * @return the corresponding String with < and > replacing < and >
+ */
private String queryReplace(String s) {
if (s != null) {
int len = s.length();
@@ -419,18 +433,17 @@
return processStyle(general.getProperty(s), general);
}
- private String processStyle(String str, Properties prop) {
+ private String processStyle(String str, Utf8Properties prop) {
try {
int i = 0;
while ((i = str.indexOf("<!-- #", i)) >= 0) {
int lastIndexOfEntity = str.indexOf("-->", i);
- String entity =
- str.substring(i+6,
- lastIndexOfEntity - 1).toLowerCase();
+ String entity = str.substring(i + 6, lastIndexOfEntity - 1)
+ .toLowerCase();
if (entity.equals("rule")) {
out.print(str.substring(0, i));
- str = str.substring(lastIndexOfEntity+3);
+ str = str.substring(lastIndexOfEntity + 3);
i = 0;
produceStyleSheet();
} else if (entity.equals("selectors")) {
@@ -438,50 +451,51 @@
// contextuals selectors
String value = prop.getProperty(entity);
if (value != null) {
- str = str.substring(0, i) + value +
- str.substring(lastIndexOfEntity+3);
+ str = str.substring(0, i) + value
+ + str.substring(lastIndexOfEntity + 3);
} else {
i += 6; // skip this unknown entity
}
} else {
- str = str.substring(lastIndexOfEntity+3);
+ str = str.substring(lastIndexOfEntity + 3);
i = 0;
}
} else if (entity.equals("selector")) {
- str = str.substring(lastIndexOfEntity+3);
+ str = str.substring(lastIndexOfEntity + 3);
i = 0;
} else if (entity.equals("charset")) {
- str = str.substring(lastIndexOfEntity+3);
+ out.print(str.substring(0, i));
+ str = str.substring(lastIndexOfEntity + 3);
i = 0;
- out.print(style.charset);
+ out.print(ac.getContentEncoding());
} else if (entity.equals("declaration")) {
- str = str.substring(lastIndexOfEntity+3);
+ str = str.substring(lastIndexOfEntity + 3);
i = 0;
} else if (entity.equals("warning")) {
out.print(str.substring(0, i));
- str = str.substring(lastIndexOfEntity+3);
+ str = str.substring(lastIndexOfEntity + 3);
i = 0;
produceWarning();
} else if (entity.equals("error")) {
out.print(str.substring(0, i));
- str = str.substring(lastIndexOfEntity+3);
+ str = str.substring(lastIndexOfEntity + 3);
i = 0;
produceError();
} else if (entity.equals("hook-html-validator")) {
out.print(str.substring(0, i));
- str = str.substring(lastIndexOfEntity+3);
+ str = str.substring(lastIndexOfEntity + 3);
i = 0;
if (style.getType().equals("text/html")) {
out.println(ac.getMsg().getGeneratorString("doc-html",
- general.get("file-title").toString()));
+ general.get("file-title").toString()));
} else {
out.println(ac.getMsg().getGeneratorString("doc"));
}
} else {
String value = prop.getProperty(entity);
if (value != null) {
- str = str.substring(0, i) + value +
- str.substring(lastIndexOfEntity+3);
+ str = str.substring(0, i) + value
+ + str.substring(lastIndexOfEntity + 3);
} else {
i += 6; // skip this unknown entity
}
@@ -495,39 +509,43 @@
}
}
+ /**
+ * List the available output formats on a PrintWriter
+ * @param out the PrintWriter used to write the listing
+ */
public final static void printAvailableFormat(PrintWriter out) {
Enumeration e = availableFormat.propertyNames();
- out.println( " -- listing available output format --" );
+ out.println(" -- listing available output format --");
while (e.hasMoreElements()) {
String key = ((String) e.nextElement()).toLowerCase();
- out.println( "Format : " + key );
- out.println( " File : " + getDocumentName(null, key) );
+ out.println("Format : " + key);
+ out.println(" File : " + getDocumentName(null, key));
}
out.flush();
}
- private Properties setDocumentBase(String document) {
- Properties properties = (Properties) formats.get(document);
+ private Utf8Properties setDocumentBase(String document) {
+ Utf8Properties properties = (Utf8Properties) formats.get(document);
if (properties == null) {
URL url;
- properties = new Properties();
+ properties = new Utf8Properties();
try {
url = StyleSheetGenerator.class.getResource(document);
java.io.InputStream f = url.openStream();
properties.load(f);
f.close();
- properties.put("author","www-validator-css");
+ properties.put("author", "www-validator-css");
properties.put("author-email", "Email.html");
} catch (Exception e) {
System.err.println("org.w3c.css.css.StyleSheetGenerator: "
+ "couldn't load properties " + document);
- System.err.println(" " + e.toString() );
+ System.err.println(" " + e.toString());
printAvailableFormat(new PrintWriter(System.err));
}
formats.put(document, properties);
}
- return new Properties(properties);
+ return new Utf8Properties(properties);
}
private final static String getDocumentName(ApplContext ac,
@@ -547,8 +565,8 @@
if (minusIndex != -1) {
// suppressed -cn in zh-cn (example)
l = l.substring(0, minusIndex);
- document = availableFormat.getProperty(documentName
- + "." + l);
+ document = availableFormat.getProperty(documentName + "."
+ + l);
}
if (document != null) {
break;
@@ -559,8 +577,8 @@
document = availableFormat.getProperty(documentName);
}
if (document == null) {
- System.err.println( "Unable to find " +
- documentName + " output format" );
+ System.err.println("Unable to find " + documentName
+ + " output format");
return documentName;
} else {
return document;
@@ -573,7 +591,8 @@
static {
URL url;
- availableFormat = new Properties();
+ // the different available output formats
+ availableFormat = new Utf8Properties();
try {
url = StyleSheetGenerator.class.getResource("format.properties");
java.io.InputStream f = url.openStream();
@@ -582,10 +601,10 @@
} catch (Exception e) {
System.err.println("org.w3c.css.css.StyleSheetGenerator: "
+ "couldn't load format properties ");
- System.err.println(" " + e.toString() );
+ System.err.println(" " + e.toString());
}
-
- availablePropertiesURL = new Properties();
+ // links to properties documentation
+ availablePropertiesURL = new Utf8Properties();
try {
url = StyleSheetGenerator.class.getResource("urls.properties");
java.io.InputStream f = url.openStream();
@@ -594,7 +613,7 @@
} catch (Exception e) {
System.err.println("org.w3c.css.css.StyleSheetGenerator: "
+ "couldn't load URLs properties ");
- System.err.println(" " + e.toString() );
+ System.err.println(" " + e.toString());
}
}
}
Received on Tuesday, 12 July 2005 13:45:49 UTC