- From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
- Date: Wed, 19 Apr 2006 11:28:07 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator/org/w3c/css/parser/analyzer In directory hutz:/tmp/cvs-serv26855/org/w3c/css/parser/analyzer Modified Files: CssParser.java CssParser.jj CssParserConstants.java CssParserTokenManager.java Log Message: Jean-Gui strikes back! http://www.w3.org/Bugs/Public/show_bug.cgi?id=2560 -> @media case insensitive http://www.w3.org/Bugs/Public/show_bug.cgi?id=3037 -> grammar correction http://www.w3.org/Bugs/Public/show_bug.cgi?id=2920 http://www.w3.org/Bugs/Public/show_bug.cgi?id=2800 http://www.w3.org/Bugs/Public/show_bug.cgi?id=233 http://www.w3.org/Bugs/Public/show_bug.cgi?id=2919 http://www.w3.org/Bugs/Public/show_bug.cgi?id=2446 http://www.w3.org/Bugs/Public/show_bug.cgi?id=3099 output parameter bug fixed: accepted values : * text/html and html * application/xhtml+xml and xhtml * application/soap+xml and soap12 * everything else: text/plain fixed a bug with SOAP output Index: CssParserTokenManager.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/parser/analyzer/CssParserTokenManager.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- CssParserTokenManager.java 14 Sep 2005 15:14:18 -0000 1.12 +++ CssParserTokenManager.java 19 Apr 2006 11:28:05 -0000 1.13 @@ -62,153 +62,155 @@ switch (pos) { case 0: - if ((active0 & 0xfe00000000000000L) != 0L || (active1 & 0x3fL) != 0L) - return 55; - if ((active0 & 0x2000000L) != 0L) - return 199; + if ((active0 & 0xfc00000000000000L) != 0L || (active1 & 0x7fL) != 0L) + return 56; + if ((active0 & 0x4000000L) != 0L) + return 219; [...5460 lines suppressed...] } break; } @@ -3975,14 +4061,14 @@ { switch(jjmatchedKind) { - case 1 : + case 2 : if (image == null) image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)))); else image.append(new String(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)))); image = CssParser.SPACE; break; - default : + default : break; } } Index: CssParser.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/parser/analyzer/CssParser.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- CssParser.java 14 Sep 2005 15:14:18 -0000 1.19 +++ CssParser.java 19 Apr 2006 11:28:05 -0000 1.20 @@ -88,7 +88,7 @@ protected String currentProperty; /** - * <code>true</code> if the parser should recognized Aural properties, + * <code>true</code> if the parser should recognized Aural properties, * <code>false</code> otherwise. */ protected boolean mode; @@ -101,9 +101,12 @@ static StringBuffer SPACE = new StringBuffer(" "); [...3202 lines suppressed...] } @@ -3654,7 +4437,7 @@ token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 120; i++) jj_la1[i] = -1; + for (int i = 0; i < 179; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } @@ -3773,7 +4556,7 @@ la1tokens[jj_kind] = true; jj_kind = -1; } - for (int i = 0; i < 120; i++) { + for (int i = 0; i < 179; i++) { if (jj_la1[i] == jj_gen) { for (int j = 0; j < 32; j++) { if ((jj_la1_0[i] & (1<<j)) != 0) { Index: CssParserConstants.java =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/parser/analyzer/CssParserConstants.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- CssParserConstants.java 30 Mar 2004 13:24:18 -0000 1.6 +++ CssParserConstants.java 19 Apr 2006 11:28:05 -0000 1.7 @@ -4,96 +4,97 @@ public interface CssParserConstants { int EOF = 0; - int S = 1; - int CDO = 5; - int CDC = 6; - int LBRACE = 7; - int RBRACE = 8; - int DASHMATCH = 9; - int INCLUDES = 10; - int PREFIXMATCH = 11; - int SUFFIXMATCH = 12; - int SUBSTRINGMATCH = 13; - int TILDE = 14; - int EQ = 15; - int PLUS = 16; - int MINUS = 17; - int COMMA = 18; - int SEMICOLON = 19; - int PRECEDES = 20; - int DIV = 21; - int LBRACKET = 22; - int RBRACKET = 23; - int ANY = 24; - int DOT = 25; - int LPARAN = 26; - int RPARAN = 27; - int COLON = 28; - int AND = 29; - int MEDIARESTRICTOR = 30; - int NONASCII = 31; - int H = 32; - int UNICODE = 33; - int ESCAPE = 34; - int NMSTART = 35; - int NMCHAR = 36; - int STRINGCHAR = 37; - int D = 38; - int NAME = 39; - int STRING = 40; - int IDENT = 41; - int NUMBER = 42; - int _URL = 43; - int URL = 44; - int PERCENTAGE = 45; - int LENGTH = 46; - int EMS = 47; - int EXS = 48; - int ANGLE = 49; - int TIME = 50; - int FREQ = 51; - int RESOLUTION = 52; - int DATE = 53; - int DIMEN = 54; - int HASH = 55; - int IMPORTANT_SYM = 56; - int IMPORT_SYM = 57; - int MEDIA_SYM = 58; - int PAGE_SYM = 59; - int FONT_FACE_SYM = 60; - int PREF_SYM = 61; - int COLOR_PROFILE = 62; - int CHARSET_SYM = 63; - int ATTOP = 64; - int ATRIGHT = 65; - int ATBOTTOM = 66; - int ATLEFT = 67; - int ATCOUNTER = 68; - int PHONETIC_ALPHABET_SYM = 69; - int ATKEYWORD = 70; - int RANGE0 = 71; - int RANGE1 = 72; - int RANGE2 = 73; - int RANGE3 = 74; - int RANGE4 = 75; - int RANGE5 = 76; - int RANGE6 = 77; - int RANGE = 78; - int UNI = 79; - int UNICODERANGE = 80; - int CLASS = 81; - int FUNCTION = 82; - int UNKNOWN = 83; + int SPC_CHAR = 1; + int S = 2; + int CDO = 6; + int CDC = 7; + int LBRACE = 8; + int RBRACE = 9; + int DASHMATCH = 10; + int INCLUDES = 11; + int PREFIXMATCH = 12; + int SUFFIXMATCH = 13; + int SUBSTRINGMATCH = 14; + int TILDE = 15; + int EQ = 16; + int PLUS = 17; + int MINUS = 18; + int COMMA = 19; + int SEMICOLON = 20; + int PRECEDES = 21; + int DIV = 22; + int LBRACKET = 23; + int RBRACKET = 24; + int ANY = 25; + int DOT = 26; + int LPARAN = 27; + int RPARAN = 28; + int COLON = 29; + int AND = 30; + int MEDIARESTRICTOR = 31; + int NONASCII = 32; + int H = 33; + int UNICODE = 34; + int ESCAPE = 35; + int NMSTART = 36; + int NMCHAR = 37; + int STRINGCHAR = 38; + int D = 39; + int NAME = 40; + int STRING = 41; + int IDENT = 42; + int NUMBER = 43; + int _URL = 44; + int URL = 45; + int PERCENTAGE = 46; + int LENGTH = 47; + int EMS = 48; + int EXS = 49; + int ANGLE = 50; + int TIME = 51; + int FREQ = 52; + int RESOLUTION = 53; + int DATE = 54; + int DIMEN = 55; + int HASH = 56; + int IMPORTANT_SYM = 57; + int IMPORT_SYM = 58; + int MEDIA_SYM = 59; + int PAGE_SYM = 60; + int FONT_FACE_SYM = 61; + int PREF_SYM = 62; + int COLOR_PROFILE = 63; + int CHARSET_SYM = 64; + int ATTOP = 65; + int ATRIGHT = 66; + int ATBOTTOM = 67; + int ATLEFT = 68; + int ATCOUNTER = 69; + int PHONETIC_ALPHABET_SYM = 70; + int ATKEYWORD = 71; + int RANGE0 = 72; + int RANGE1 = 73; + int RANGE2 = 74; + int RANGE3 = 75; + int RANGE4 = 76; + int RANGE5 = 77; + int RANGE6 = 78; + int RANGE = 79; + int UNI = 80; + int UNICODERANGE = 81; + int CLASS = 82; + int FUNCTION = 83; int DEFAULT = 0; int IN_COMMENT = 1; String[] tokenImage = { "<EOF>", + "\" \"", "<S>", "\"/*\"", "\"*/\"", - "<token of kind 4>", + "<token of kind 5>", "\"<!--\"", "\"-->\"", "\"{\"", @@ -172,7 +173,6 @@ "<UNICODERANGE>", "<CLASS>", "<FUNCTION>", - "<UNKNOWN>", "\"::\"", }; Index: CssParser.jj =================================================================== RCS file: /sources/public/2002/css-validator/org/w3c/css/parser/analyzer/CssParser.jj,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- CssParser.jj 14 Sep 2005 15:14:18 -0000 1.17 +++ CssParser.jj 19 Apr 2006 11:28:05 -0000 1.18 @@ -10,7 +10,7 @@ options { IGNORE_CASE = true; STATIC = false; - /* DEBUG_TOKEN_MANAGER = true; + /*DEBUG_TOKEN_MANAGER = true; DEBUG_PARSER = true; */ } @@ -119,6 +119,9 @@ static StringBuffer SPACE = new StringBuffer(" "); + // to be able to remove a ruleset if the selector is not valid + protected boolean validSelector = true; + /** * The ac for handling errors and warnings. * @@ -343,7 +346,8 @@ <DEFAULT> TOKEN : { - < S : ( [ " ", "\t" , "\n" , "\r", "\f" ] )+ > + < SPC_CHAR : " " > + |< S : ( [ "\t" , "\n" , "\r", "\f" ] )+ > { image = CssParser.SPACE; } } @@ -423,7 +427,7 @@ | < #ESCAPE : <UNICODE> | ( "\\" [ " "-"~","\200"-"\377" ] ) > | < #NMSTART : [ "a"-"z", "_" ] | <NONASCII> | <ESCAPE> > | < #NMCHAR : ["a"-"z", "0"-"9", "-", "_"] | <NONASCII> | <ESCAPE> > - | < #STRINGCHAR : [ "\t"," ","!","#","$","%","&","("-"~" ] + | < #STRINGCHAR : [ "\t"," ","!","#","$","%","&","("-"[","]"-"~" ] | "\\\n" | "\\\r\n" | <NONASCII> | <ESCAPE> > | < #D : ["0"-"9"] > | < #NAME : ( <NMCHAR> )+ > @@ -434,11 +438,11 @@ { < STRING : ( "\"" ( <STRINGCHAR> | "'" )* "\"" ) | ( "'" ( <STRINGCHAR> | "\"" )* "'" ) > - | < IDENT : <NMSTART> ( <NMCHAR> )* > + | < IDENT : ( <MINUS> )? <NMSTART> ( <NMCHAR> )* > | < NUMBER : ( <D> )+ | ( <D> )* "." ( <D> )+ > | < #_URL : [ "!","#","$","%","&","*"-"~" ] | <NONASCII> | <ESCAPE> > - | < URL : "url(" ( <S> )* - ( <STRING> | ( <_URL> )* ) ( <S> )* ")" > + | < URL : "url(" ( ( <S> |<SPC_CHAR>) )* + ( <STRING> | ( <_URL> )* ) ( ( <S> |<SPC_CHAR>) )* ")" > } <DEFAULT> @@ -473,7 +477,7 @@ <DEFAULT> TOKEN : { - < IMPORTANT_SYM : "!" ( <S> )? "important" > + < IMPORTANT_SYM : "!" ( ( <S> |<SPC_CHAR>) )? "important" > } /* RESERVED ATRULE WORDS */ @@ -486,7 +490,7 @@ | < FONT_FACE_SYM: "@font-face" > | < PREF_SYM : "@preference" > | < COLOR_PROFILE: "@color-profile" > - | < CHARSET_SYM : "@charset" > + | < CHARSET_SYM : "@charset" > | < ATTOP : "@top" > | < ATRIGHT : "@right" > | < ATBOTTOM : "@bottom" > @@ -525,11 +529,11 @@ < FUNCTION : <IDENT> "(" > } -<DEFAULT, IN_COMMENT> -TOKEN : -{ /* avoid token manager error */ - < UNKNOWN : ~[] > -} +//<DEFAULT, IN_COMMENT> +//TOKEN : +//{ /* avoid token manager error */ +// < UNKNOWN : ~[] > +//} /* * The grammar of CSS2 @@ -544,22 +548,35 @@ {} { ( charset() )? - ( <S> | ignoreStatement() )* - ( importDeclaration() ( ignoreStatement() ( <S> )* )* )* + ( <S> | <SPC_CHAR> | ignoreStatement() )* + ( importDeclaration() ( ignoreStatement() ( <S> | <SPC_CHAR> )* )* )* afterImportDeclaration() <EOF> } void charset() : -{ Token n; } +{ + Token n = null; + Token charsetToken = null; +} { - try { - <CHARSET_SYM> ( <S> )* n=<STRING> ( <S> )* ";" + try { + // @charset has a very specific syntax : + // only one space allowed between @charset and the string + charsetToken=<CHARSET_SYM> <SPC_CHAR> n=<STRING> ";" + //<CHARSET_SYM> n=<STRING> ";" { - addCharSet(n.image); + // 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")); + } + else { + addCharSet(n.image); + } } } catch (Exception e) { - addError(e, skipStatement()); + addError(e, charsetToken.image + " " + n.image + ";"); } } @@ -571,14 +588,22 @@ | ret=skipStatement() { if ((ret == null) || (ret.length() == 0)) { return; - } else { + } + // quite ugly but necessary to avoid probably a lot of changes in the + // grammar, still having a beatiful error message + else if(ret.startsWith("@charset")) { + ParseException e = + new ParseException(ac.getMsg().getString("parser.charset")); + addError(e, ret); + } + else { ParseException e = new ParseException("Parse error - Unrecognized "); addError(e, ret); } } ) - ( ignoreStatement() ( <S> )* )* )* + ( ignoreStatement() ( <S> | <SPC_CHAR> )* )* )* } void ignoreStatement() : @@ -600,7 +625,7 @@ } { try { - <IMPORT_SYM> ( <S> )* + <IMPORT_SYM> ( <S> | <SPC_CHAR> )* ( n=<STRING> { importFile = n.image.substring(1, n.image.length() -1); } @@ -614,11 +639,11 @@ } } ) - ( <S> )* + ( <S> | <SPC_CHAR> )* ( medium(media) - ( <COMMA> ( <S> )* medium(media) + ( <COMMA> ( <S> | <SPC_CHAR> )* medium(media) )* )? ";" - ( <S> )* + ( <S> | <SPC_CHAR> )* { handleImport(getURL(), importFile, media); } @@ -640,10 +665,10 @@ } { try { - <MEDIA_SYM> ( <S> )* (n=<MEDIARESTRICTOR> { newRule.addMediaRestrictor(convertIdent(n.image), ac); } ( <S> )+)? + <MEDIA_SYM> ( <S> | <SPC_CHAR> )* (n=<MEDIARESTRICTOR> { newRule.addMediaRestrictor(convertIdent(n.image), ac); } ( <S> | <SPC_CHAR> )+)? medium(newRule) - ( <COMMA> ( <S> )* medium(newRule) ( <S> )* )* - (<AND> ( <S> )* <RPARAN> ( <S> )* p=mediadeclaration() { newRule.addMediaFeature(p); } ( <S> )* <LPARAN> ( <S> )* )* + ( <COMMA> ( <S> | <SPC_CHAR> )* medium(newRule) ( <S> | <SPC_CHAR> )* )* + (<AND> ( <S> | <SPC_CHAR> )* <RPARAN> ( <S> | <SPC_CHAR> )* p=mediadeclaration() { newRule.addMediaFeature(p); } ( <S> | <SPC_CHAR> )* <LPARAN> ( <S> | <SPC_CHAR> )* )* { String media = getAtRule().toString(); @@ -663,7 +688,7 @@ newAtRule(getAtRule()); } } - <LBRACE> ( <S> )* ( ruleSet() )* <RBRACE> ( <S> )* + <LBRACE> ( <S> | <SPC_CHAR> )* ( ruleSet() )* <RBRACE> ( <S> | <SPC_CHAR> )* { if (!ac.getCssVersion().equals("css1")) { endOfAtRule(); @@ -684,7 +709,7 @@ void medium(AtRuleMedia media) : /* tv, projection, screen, ... */ {Token n;} { - n=<IDENT> ( <S> )* + n=<IDENT> ( <S> | <SPC_CHAR> )* { try { media.addMedia(convertIdent(n.image), ac); } catch (InvalidParamException e) { @@ -710,14 +735,14 @@ } { try { - <PAGE_SYM> ( <S> )* ( n=<IDENT> { newRule.setIdent(convertIdent(n.image)); } - ( <S> )* )? + <PAGE_SYM> ( <S> | <SPC_CHAR> )* ( n=<IDENT> { newRule.setIdent(convertIdent(n.image)); } + ( <S> | <SPC_CHAR> )* )? - ( pseudo_page(newRule) )? <LBRACE> ( <S> )* ( v=pageContent() + ( pseudo_page(newRule) )? <LBRACE> ( <S> | <SPC_CHAR> )* ( v=pageContent() { collectv = v; } - ) <RBRACE> ( <S> )* + ) <RBRACE> ( <S> | <SPC_CHAR> )* { if (!ac.getCssVersion().equals("css1")) { newAtRule(getAtRule()); @@ -772,8 +797,8 @@ } { try { - (n=<ATTOP> | n=<ATBOTTOM> | n=<ATLEFT> | n=<ATRIGHT> ) ( <S> )* - <LBRACE> ( <S> )* v=declarations() <RBRACE> ( <S> )* + (n=<ATTOP> | n=<ATBOTTOM> | n=<ATLEFT> | n=<ATRIGHT> ) ( <S> | <SPC_CHAR> )* + <LBRACE> ( <S> | <SPC_CHAR> )* v=declarations() <RBRACE> ( <S> | <SPC_CHAR> )* { return v; } @@ -785,7 +810,7 @@ void pseudo_page(AtRulePage page) : { Token n; } { - ":" n=<IDENT> ( <S> )* + ":" n=<IDENT> ( <S> | <SPC_CHAR> )* { try { page.setName(":" + convertIdent(n.image), ac); } catch (InvalidParamException e) { @@ -806,7 +831,7 @@ } { try { - <FONT_FACE_SYM> ( <S> )* + <FONT_FACE_SYM> ( <S> | <SPC_CHAR> )* { if (ac.getCssVersion().equals("css1")) { skipStatement(); @@ -818,7 +843,7 @@ } } - <LBRACE> ( <S> )* v=declarations() <RBRACE> ( <S> )* + <LBRACE> ( <S> | <SPC_CHAR> )* v=declarations() <RBRACE> ( <S> | <SPC_CHAR> )* { if (!ac.getCssVersion().equals("css1")) { addProperty(v); @@ -850,7 +875,7 @@ } { try { - <COLOR_PROFILE> ( <S> )* + <COLOR_PROFILE> ( <S> | <SPC_CHAR> )* { if (!ac.getCssVersion().equals("svg")) { skipStatement(); @@ -862,7 +887,7 @@ } } - <LBRACE> ( <S> )* v=declarations() <RBRACE> ( <S> )* + <LBRACE> ( <S> | <SPC_CHAR> )* v=declarations() <RBRACE> ( <S> | <SPC_CHAR> )* { if (ac.getCssVersion().equals("svg")) { addProperty(v); @@ -897,7 +922,7 @@ } { try { - <PREF_SYM> ( <S> )* + <PREF_SYM> ( <S> | <SPC_CHAR> )* { if (ac.getCssVersion().equals("css1")) { skipStatement(); @@ -909,7 +934,7 @@ } } - <LBRACE> ( <S> )* v=declarations() <RBRACE> ( <S> )* + <LBRACE> ( <S> | <SPC_CHAR> )* v=declarations() <RBRACE> ( <S> | <SPC_CHAR> )* { if (!ac.getCssVersion().equals("css1")) { addProperty(v); @@ -943,7 +968,7 @@ } { try { - <PHONETIC_ALPHABET_SYM> ( <S> )* n=<STRING> ( <S> )* ";" + <PHONETIC_ALPHABET_SYM> ( <S> | <SPC_CHAR> )* n=<STRING> ( <S> | <SPC_CHAR> )* ";" { if (!ac.getCssVersion().equals("css3")) { skipStatement(); @@ -988,8 +1013,8 @@ void operator(CssExpression expr) : {} { - "/" ( <S> )* { if (expr.getCount() > 0) expr.setOperator('/'); } -| "," ( <S> )* { if (expr.getCount() > 0) expr.setOperator(','); } + "/" ( <S> | <SPC_CHAR> )* { if (expr.getCount() > 0) expr.setOperator('/'); } +| "," ( <S> | <SPC_CHAR> )* { if (expr.getCount() > 0) expr.setOperator(','); } } /** @@ -1000,13 +1025,13 @@ char connector = ' '; } { - "+" ( <S> )* { return '+'; } - | ">" ( <S> )* { return '>'; } - | "~" ( <S> )* { return '~'; } - | <S> ( ( "+" { connector = '+'; } + "+" ( <S> | <SPC_CHAR> )* { return '+'; } + | ">" ( <S> | <SPC_CHAR> )* { return '>'; } + | "~" ( <S> | <SPC_CHAR> )* { return '~'; } + | <S> | <SPC_CHAR> ( ( "+" { connector = '+'; } | ">" { connector = '>'; } | "~" { connector = '~'; }) - ( <S> )* )? { return connector; } + ( <S> | <SPC_CHAR> )* )? { return connector; } } /** @@ -1025,7 +1050,7 @@ String property() : {Token n; } { - n=<IDENT> ( <S> )* { currentProperty = convertIdent(n.image); + n=<IDENT> ( <S> | <SPC_CHAR> )* { currentProperty = convertIdent(n.image); return currentProperty; } } @@ -1047,16 +1072,16 @@ } } - ( <COMMA> ( <S> )* + ( <COMMA> ( <S> | <SPC_CHAR> )* contextual=selector() { if (contextual != null) { context_set.addElement(contextual); } } )* - <LBRACE> ( <S> )* + <LBRACE> ( <S> | <SPC_CHAR> )* value_set=declarations() - <RBRACE> ( <S> )* + <RBRACE> ( <S> | <SPC_CHAR> )* { markRule = true; @@ -1085,11 +1110,17 @@ Vector declarations() : { + if(!validSelector) { + validSelector = true; + skip_to_matching_brace(); + return null; + } + CssProperty values; Vector value_set = new Vector(); boolean wrong_value = true; } -{ +{ ( values=declaration() { if (values != null) { value_set.addElement(values); @@ -1100,7 +1131,7 @@ currentProperty = null; } )? - ( ";" ( <S> )* + ( ";" ( <S> | <SPC_CHAR> )* ( values=declaration() { if (values != null) { value_set.addElement(values); @@ -1164,10 +1195,10 @@ //current.setConnector(comb); } current=simple_selector(current) - )* ( <S> )* + )* ( <S> | <SPC_CHAR> )* { return current; } } - catch (InvalidParamException ie) { + catch (InvalidParamException ie) { skipStatement(); removeThisRule(); ac.getFrame().addError(new CssError(ie)); @@ -1175,7 +1206,7 @@ return null; } catch (ParseException e) { - + validSelector = false; if (ac.getProfile() != null) { if(!(ac.getProfile().equals("mobile"))) { Token t = getToken(1); @@ -1217,7 +1248,7 @@ CssSelectors current; } { current=simple_selector(null) - ( ( <S> )+ + ( ( <S> | <SPC_CHAR> )+ current=simple_selector(current) )* { return current; } @@ -1377,20 +1408,20 @@ int selectorType = CssSelectors.ATTRIBUTE_ANY; } { - "[" ( <S> )* att=<IDENT> ( <S> )* + "[" ( <S> | <SPC_CHAR> )* att=<IDENT> ( <S> | <SPC_CHAR> )* ( ("=" { selectorType = CssSelectors.ATTRIBUTE_EXACT; } | <INCLUDES> { selectorType = CssSelectors.ATTRIBUTE_ONE_OF; } | <DASHMATCH> { selectorType = CssSelectors.ATTRIBUTE_BEGIN; } | <PREFIXMATCH> { selectorType = CssSelectors.ATTRIBUTE_START; } | <SUFFIXMATCH> { selectorType = CssSelectors.ATTRIBUTE_SUFFIX; } | <SUBSTRINGMATCH> { selectorType = CssSelectors.ATTRIBUTE_SUBSTR; } - ) ( <S> )* + ) ( <S> | <SPC_CHAR> )* ( val=<IDENT> { val.image = convertIdent(val.image); } | ( val=<STRING> { val.image = convertStringIndex(val.image, 1, val.image.length() -1);} ) - ( <S> )* ) )? + ( <S> | <SPC_CHAR> )* ) )? "]" { if (selectorType == CssSelectors.ATTRIBUTE_ANY) { @@ -1480,7 +1511,7 @@ ac.getFrame().addError(new CssError(e)); } } ) - | ( n=<FUNCTION> ( <S> )* (language=<NUMBER> | language=<IDENT> | language=<STRING> | param=simple_selector(null)) ( <S> )* ")" + | ( n=<FUNCTION> ( <S> | <SPC_CHAR> )* (language=<NUMBER> | language=<IDENT> | language=<STRING> | param=simple_selector(null)) ( <S> | <SPC_CHAR> )* ")" // :lang(en) is a very special case ... // since CSS3: contains(String), nth-of-type(n) and nth-child(n) and not(simple selector) too { @@ -1581,7 +1612,7 @@ } { try { - string_property=property() (":" ( <S> )* + string_property=property() (":" ( <S> | <SPC_CHAR> )* values=expr() ( important=prio() )? )? { @@ -1628,7 +1659,7 @@ } { try { - string_property=property() ":" ( <S> )* + string_property=property() ":" ( <S> | <SPC_CHAR> )* values=expr() ( important=prio() )? { try { @@ -1680,7 +1711,7 @@ boolean prio() : {} { - <IMPORTANT_SYM> ( <S> )* { return true; } + <IMPORTANT_SYM> ( <S> | <SPC_CHAR> )* { return true; } } /** @@ -1719,7 +1750,7 @@ | n=<DIMEN> { addError(new ParseException("Unknown dimension"), n.image); } | func=function() { setValue(func, exp, operator, null, FUNCTION); } - ) ( <S> )* ) + ) ( <S> | <SPC_CHAR> )* ) | (( n=<STRING> { setValue(new CssString(), exp, operator, n, STRING); } | n=<IDENT> { @@ -1753,7 +1784,7 @@ } | n=<UNICODERANGE> { setValue(new CssUnicodeRange(), exp, operator, n, UNICODERANGE); } - ) ( <S> )* ) + ) ( <S> | <SPC_CHAR> )* ) } /** @@ -1766,7 +1797,7 @@ org.w3c.css.values.ATSCColor colorATSC = new org.w3c.css.values.ATSCColor(); } { - n=<FUNCTION> ( <S> )* exp=expr() + n=<FUNCTION> ( <S> | <SPC_CHAR> )* exp=expr() ")" { if (n.image.toLowerCase().equals("rgb(")) { @@ -1842,7 +1873,6 @@ getNextToken(); tok = getToken(1); } - return s.toString().trim(); }
Received on Wednesday, 19 April 2006 11:28:12 UTC