- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Sun, 01 Mar 2009 09:05:51 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/parser/analyzer
In directory hutz:/tmp/cvs-serv23191
Modified Files:
CssParser.jj
Log Message:
fixes http://www.w3.org/Bugs/Public/show_bug.cgi?id=6640
The parser now uses ( charset() )* instead of ( charset() )? as the reinit
would otherwise skip to afterImportDeclaration. It uses some flags to control
the re-parsing of the same @charset token (although changing the parser state
would have been another solution)
Index: CssParser.jj
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/parser/analyzer/CssParser.jj,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -d -r1.66 -r1.67
--- CssParser.jj 25 Feb 2009 00:11:31 -0000 1.66
+++ CssParser.jj 1 Mar 2009 09:05:48 -0000 1.67
@@ -127,6 +127,7 @@
protected boolean markRule;
private boolean reinited = false;
+ private boolean charsetdeclared = false;
static StringBuilder SPACE = new StringBuilder(" ");
@@ -633,7 +634,7 @@
new ParseException(ac.getMsg().getString("generator.dontmixhtml")), n.image);
}
)*
- ( charset() )?
+ ( charset() )* // * instead of ? to capture the reinit part
( <S> | <CDO> | <CDC> )*
( importDeclaration() ( ignoreStatement() ) )*
( namespaceDeclaration() ( ignoreStatement() ) )*
@@ -659,6 +660,10 @@
charsetToken=<CHARSET_SYM> ( space1Token=<S> { nb_S++;} )*
n=<STRING> ( space2Token=<S> )* semicolonToken=<SEMICOLON>
{
+ if (charsetdeclared && !reinited) {
+ throw new ParseException(
+ ac.getMsg().getString("parser.charset"));
+ }
// the @charset must be at the beginning of the document
if(charsetToken.beginLine != 1 ||
charsetToken.beginColumn != 1) {
@@ -690,7 +695,12 @@
"parser.charsetspecial"));
}
}
- addCharSet(n.image.substring(1, n.image.length()-1));
+ if (!charsetdeclared) {
+ addCharSet(n.image.substring(1, n.image.length()-1));
+ charsetdeclared = true;
+ } else {
+ reinited = false;
+ }
}
} catch (Exception e) {
String skip = charsetToken +
@@ -712,15 +722,15 @@
}
// quite ugly but necessary to avoid probably a lot of changes in the
// grammar, still having a beautiful error message
- else if (!reinited && ret.startsWith("@charset")) {
+ else if (ret.startsWith("@charset")) {
ParseException e =
new ParseException(ac.getMsg().getString("parser.charset"));
addError(e, ret);
- } else if (!reinited && ret.startsWith("@import")) {
+ } else if (ret.startsWith("@import")) {
ParseException e =
new ParseException(ac.getMsg().getString("parser.import_not_allowed"));
addError(e, ret);
- } else if (!reinited) {
+ } else {
ParseException e =
new ParseException(ac.getMsg().getString("generator.unrecognize"));
addError(e, ret);
Received on Sunday, 1 March 2009 09:06:04 UTC