- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Fri, 28 Mar 2008 14:58:45 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/parser/analyzer In directory hutz:/tmp/cvs-serv23969 Modified Files: CssParser.jj Log Message: swtich comments from SKIP to SPECIAL_TOKEN to test in @charset that no comments exists between "@charset" and the first " Index: CssParser.jj =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/parser/analyzer/CssParser.jj,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- CssParser.jj 28 Mar 2008 08:01:49 -0000 1.37 +++ CssParser.jj 28 Mar 2008 14:58:43 -0000 1.38 @@ -10,7 +10,7 @@ options { IGNORE_CASE = true; STATIC = false; - /* DEBUG_TOKEN_MANAGER = true; +/* DEBUG_TOKEN_MANAGER = true; DEBUG_PARSER = true; */ } @@ -347,28 +347,9 @@ */ <DEFAULT> - MORE : -{ - < "/*" > : IN_COMMENT -} - -<IN_COMMENT> - SKIP : -{ - < "*/" > : DEFAULT -} - -<IN_COMMENT> - MORE : -{ - < ~[] > : IN_COMMENT -} - - -<DEFAULT> -SKIP : +SPECIAL_TOKEN : { - < #COMMENT : "/*" ( ~["*"] )* ( "*" )+ ( ~["/", "*"] ( ~["*"] )* ( "*" )+ )* "/" > + < COMMENT : "/*" ( ~["*"] )* ( "*" )+ ( ~["/", "*"] ( ~["*"] )* ( "*" )+ )* "/" > } <DEFAULT> @@ -391,7 +372,7 @@ | < #_STRING : <STRING1> | <STRING2> > | < #_INVALID : <INVALID1> | <INVALID2> > | < #_URL : ( [ "!", "#", "$", "%", "&", "*", "+", "-"-"[", "]"-"~" ] | <NONASCII> | <ESCAPE> )* > - | < #_S : ( [ " ", "\t" , "\n" , "\r", "\f" ] ( <COMMENT> )? )+ > + | < #_S : ( [ " ", "\t" , "\n" , "\r", "\f" ] )+ > | < #_W : ( <_S> )? > | < #NL : ( "\n" | "\r\n" | "\r" | "\f" ) > } @@ -509,7 +490,7 @@ /* RESERVED ATRULE WORDS */ <DEFAULT> -TOKEN : // FIXME force to be case-sensitive +TOKEN : { < CHARSET_SYM : "@charset" > } @@ -602,7 +583,7 @@ // used as an error recovery for HTML tags in CSS pages ( ( n=<HTMLSTARTTAG> | n=<HTMLENDTAG> ) { addError ( new ParseException(ac.getMsg().getString("generator.dontmixhtml")), n.image); } )* - ( charset() ";" )? + ( charset() )? ( <S> | <CDO> | <CDC> )* ( importDeclaration() ( ignoreStatement() ) )* afterImportDeclaration() @@ -618,28 +599,37 @@ Token charsetToken = null; Token space1Token = null; Token space2Token = null; + Token semicolonToken = null; + int nb_S = 0; } { try { - // There was * instead of ? in previous versions, but it's useless since - // <S> is already a + - charsetToken=<CHARSET_SYM> ( space1Token=<S> )? n=<STRING> ( space2Token=<S> )? + charsetToken=<CHARSET_SYM> ( space1Token=<S> { nb_S++;} )* + n=<STRING> ( space2Token=<S> )* semicolonToken=<SEMICOLON> { // the @charset must be at the beginning of the document if(charsetToken.beginLine != 1 || charsetToken.beginColumn != 1) { throw new ParseException( ac.getMsg().getString("parser.charset")); } - // stricter rule for CSS21 and soon for CSS3 - else if("css21".equals(ac.getCssVersion()) && - (!" ".equals(space1Token.image) || (space2Token != null && - !"".equals(space2Token.image)))) { - throw new ParseException(ac.getMsg().getString( - "parser.charsetspecial")); + // the @charset is case sensitive + if (!"@charset".equals(charsetToken.image)) { + throw new ParseException( + ac.getMsg().getString("parser.charsetspecial")); } - else { - addCharSet(n.image); + // stricter rule for CSS21 and soon for CSS3 + if ("css21".equals(ac.getCssVersion())) { + if ( (nb_S != 1) || + (!" ".equals(space1Token.image)) || + (space2Token != null && !"".equals(space2Token.image)) || + (space1Token.specialToken != null) || + (semicolonToken.specialToken != null) + ) { + throw new ParseException(ac.getMsg().getString( + "parser.charsetspecial")); + } } + addCharSet(n.image); } } catch (Exception e) { String skip = charsetToken +
Received on Friday, 28 March 2008 14:59:22 UTC