W3C home > Mailing lists > Public > www-validator-cvs@w3.org > October 2011

2002/css-validator/org/w3c/css/parser/analyzer CssParser.java,1.77,1.78 CssParser.jj,1.76,1.77 CssParserConstants.java,1.16,1.17 CssParserTokenManager.java,1.39,1.40

From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
Date: Fri, 21 Oct 2011 01:49:11 +0000
To: www-validator-cvs@w3.org
Message-Id: <E1RH4Ev-0007YM-VO@lionel-hutz.w3.org>
Update of /sources/public/2002/css-validator/org/w3c/css/parser/analyzer
In directory hutz:/tmp/cvs-serv28700/org/w3c/css/parser/analyzer

Modified Files:
	CssParser.java CssParser.jj CssParserConstants.java 
	CssParserTokenManager.java 
Log Message:
redone the Media Features of media queries, up to date per http://www.w3.org/TR/2010/CR-css3-mediaqueries-20100727/, todo, parsing of media in HTML form

Index: CssParserTokenManager.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/parser/analyzer/CssParserTokenManager.java,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -d -r1.39 -r1.40
--- CssParserTokenManager.java	14 Sep 2011 16:31:49 -0000	1.39
+++ CssParserTokenManager.java	21 Oct 2011 01:49:09 -0000	1.40
@@ -28,7 +28,8 @@
 import org.w3c.css.parser.CssSelectors;
 import org.w3c.css.parser.CssParseException;
 import org.w3c.css.parser.AtRule;
-import org.w3c.css.parser.AtRuleMedia;
+import org.w3c.css.media.AtRuleMedia;
+import org.w3c.css.media.MediaFeature;
 import org.w3c.css.parser.AtRuleFontFace;
 import org.w3c.css.parser.AtRulePage;
 import org.w3c.css.parser.AtRulePreference;
@@ -77,46 +78,46 @@
    switch(curChar)
[...1360 lines suppressed...]
                   if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 36)
-                     kind = 36;
+                  if (kind > 37)
+                     kind = 37;
                   jjCheckNAddTwoStates(428, 429);
                   break;
                case 443:
@@ -6085,8 +6086,8 @@
 "", null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, "\74\41\55\55", "\55\55\76", 
 null, "\174\75", null, null, null, null, null, null, null, null, null, null, null, 
-"\175", "\136\75", "\44\75", "\52\75", "\75", "\55", "\73", "\57", "\133", "\135", 
-"\52", "\56", "\51", "\50", "\72", null, null, null, null, null, null, null, null, 
+null, "\175", "\136\75", "\44\75", "\52\75", "\75", "\55", "\73", "\57", "\133", 
+"\135", "\52", "\56", "\51", "\50", "\72", null, null, null, null, null, null, null, 
 null, null, null, null, null, null, "\72\72", null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, "\174", };

Index: CssParser.jj
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/parser/analyzer/CssParser.jj,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -d -r1.76 -r1.77
--- CssParser.jj	29 Sep 2011 09:08:58 -0000	1.76
+++ CssParser.jj	21 Oct 2011 01:49:09 -0000	1.77
@@ -11,10 +11,10 @@
     IGNORE_CASE  = true;
     STATIC = false;
     UNICODE_INPUT = true;
-   /*    
+    /*
           DEBUG_TOKEN_MANAGER = true; 
 	  DEBUG_PARSER = true;      
-   */ 
+    */
 }
 
 PARSER_BEGIN(CssParser)
@@ -50,7 +50,8 @@
 import org.w3c.css.parser.CssSelectors;
 import org.w3c.css.parser.CssParseException;
 import org.w3c.css.parser.AtRule;
-import org.w3c.css.parser.AtRuleMedia;
+import org.w3c.css.media.AtRuleMedia;
+import org.w3c.css.media.MediaFeature;
 import org.w3c.css.parser.AtRuleFontFace;
 import org.w3c.css.parser.AtRulePage;
 import org.w3c.css.parser.AtRulePreference;
@@ -95,7 +96,7 @@
 					'c', 'd', 'e', 'f' };
     // the current atRule
     protected AtRule atRule;
-    protected String mediaDeclaration = "off";
+    protected boolean mediaDeclaration = false;
 
     /**
      * The URL of the document
@@ -159,7 +160,7 @@
      *
      * @param mediaDeclaration indicator if in a media expression list or not
      */
-    public void setMediaDeclaration(String mediadeclaration) {
+    public void setMediaDeclaration(boolean mediadeclaration) {
         this.mediaDeclaration = mediadeclaration;
     }
 
@@ -168,7 +169,7 @@
      *
      * @return the value of the attribute
      */
-    public String getMediaDeclaration() {
+    public boolean hasMediaDeclaration() {
     	return mediaDeclaration;
     }
 
@@ -270,6 +271,26 @@
 	throws InvalidParamException;
 
     /**
+     * Assign an expression to a mediafeature.
+     * This function create a new mediafeature
+     * with <code>featureName</code> and assign to it the expression.
+     * <p>
+     * A subclass must provide an implementation of this method.
+     *
+     * @param  featureName  the name of the media feature
+     * @param  expr    the expression representation of values
+     *
+     * @return           <code>null</code>or a property
+     *
+     * @see              org.w3c.css.css.CssProperty
+     */
+    public abstract MediaFeature handleMediaFeature(String mediaFeature,
+						                            CssExpression expr)
+	       throws InvalidParamException;
+
+
+
+    /**
      * Adds a ArrayList of properties to a selector.
      * <p>
      * A subclass must provide an implementation of this method. 
@@ -449,6 +470,11 @@
     < AND : "and" > 
 }  
 
+TOKEN [IGNORE_CASE] :
+{
+    < MEDIARESTRICTOR : "only" | "not" >
+}
+
 <DEFAULT>
 TOKEN :
 {
@@ -487,12 +513,6 @@
 <DEFAULT>
 TOKEN [IGNORE_CASE] :
 {
-    < MEDIARESTRICTOR : "only" | "not" >
-}
-
-<DEFAULT>
-TOKEN [IGNORE_CASE] :
-{
   < URL         : "url(" ( <S> )* ( <STRING> | <_URL>  ) ( <S> )* ")" >
 }
 
@@ -547,7 +567,7 @@
   | < FONT_FACE_SYM         : "@font-face" >
   | < PREF_SYM              : "@preference" >
   | < COLOR_PROFILE         : "@color-profile" >
-  | < ATTOP	            : "@top" >
+  | < ATTOP	                : "@top" >
   | < ATRIGHT               : "@right" >
   | < ATBOTTOM              : "@bottom" >
   | < ATLEFT                : "@left" >
@@ -803,7 +823,7 @@
  */
 void importDeclaration() :
 {Token n;
-    AtRuleMedia media = new AtRuleMedia();
+    AtRuleMedia media = AtRuleMedia.getInstance(ac.getCssVersion());
     CssValue val; 
     String importFile;
     boolean is_url = false;
@@ -827,9 +847,7 @@
 	    } 
 	    )
 	    ( <S> )*
-	    ( medium(media) 
-	      ( <COMMA> ( <S> )* medium(media) 
-		)* )? <SEMICOLON> 
+	    ( mediaquerylist(media) )? <SEMICOLON>
 	    ( <S> )*
 	    { 
 		handleImport(getURL(), importFile, is_url, media);
@@ -845,7 +863,7 @@
 void media() :
 {
     AtRule old = getAtRule();
-    AtRuleMedia newRule = new AtRuleMedia();
+    AtRuleMedia newRule = AtRuleMedia.getInstance(ac.getCssVersion());
     setAtRule(newRule);
     Token n;
     CssProperty p = null;
@@ -853,62 +871,88 @@
 }
 {
     try {
-	<MEDIA_SYM> ( <S> )*
-            // <CSS3>
-	    (n=<MEDIARESTRICTOR> { newRule.addMediaRestrictor(convertIdent(n.image), ac); } ( <S> )+)? 
-	    medium(newRule) 
-            // </CSS3>
-	    ( <COMMA> ( <S> )* medium(newRule) )* 
-            // <CSS3>
-	    (<AND> ( <S> )* <RPARAN> ( <S> )* p=mediadeclaration() { newRule.addMediaFeature(p); } <LPARAN> ( <S> )* )*
-            // </CSS3>
-   
+	n=<MEDIA_SYM> ( <S> )*
+        mediaquerylist(newRule)
 	    {
-		String media = getAtRule().toString();
-		if (ac.getMedium() != null && 
-		    !(media.equals(ac.getMedium())) &&
-		    !(ac.getMedium().equals("all"))) {
+		    String media = getAtRule().toString();
+		    if (ac.getMedium() != null &&
+		        !(media.equals(ac.getMedium())) &&
+		        !(ac.getMedium().equals("all"))) {
 		 
-		    ac.getFrame().addWarning("noothermedium", 
-					     getAtRule().toString());
-		}
-		if (isCss1) {
-		    skipStatement();
-		    addError(new InvalidParamException("noatruleyet", "", ac),
-			     getAtRule().toString());
-		} else {
-		    newAtRule(getAtRule());
-		}
+		        ac.getFrame().addWarning("noothermedium", getAtRule().toString());
+		    }
+		    if (isCss1) {
+		        skipStatement();
+		        addError(new InvalidParamException("noatruleyet", "", ac),
+			         getAtRule().toString());
+		    } else {
+		        newAtRule(getAtRule());
+		    }
 	    }
 	<LBRACE> ( <S> )* ( ruleSet() )* <RBRACE> ( <S> )*
 	     {
-		 if (!isCss1) {
-		     endOfAtRule();
-		 }
+		     if (!isCss1) {
+		         endOfAtRule();
+		     }
 	     }
     } catch (ParseException e) {
-	if (!isCss1) {
-	    addError(e, skipStatement()); 
-	}
-    } finally {
-	setAtRule(old);
+	    if (!isCss1) {
+	        addError(e, skipStatement());
+	    }
+	} finally {
+	    setAtRule(old);
     }
 }
 
-/**
- * @exception ParseException exception during the parse
- */
-void medium(AtRuleMedia media) : /* tv, projection, screen, ... */
-{Token n;}
+
+void mediaquerylist(AtRuleMedia mediaRule) :
 {
-    n=<IDENT> ( <S> )*
-    {
-	try {
-	    media.addMedia(convertIdent(n.image), ac); 
-	} catch (InvalidParamException e) {
-	    CssError error = new CssError(getSourceFile(), getLine(), e);
-	    ac.getFrame().addError(error);	
-	}
+  CssVersion v = ac.getCssVersion();
+  boolean isCss1 =  (v == CssVersion.CSS1);
+}
+{
+   mediaquery(mediaRule)
+   ( <COMMA> ( <S> )* mediaquery(mediaRule) )*
+}
+
+void mediaquery(AtRuleMedia mediaRule) :
+{
+  CssVersion v = ac.getCssVersion();
+  boolean isCss1 =  (v == CssVersion.CSS1);
+  Token n;
+  String mediarestrictor = null;
+}
+{
+   ( ( (n=<MEDIARESTRICTOR> {
+            mediarestrictor = convertIdent(n.image);
+       } ( <S> )+ )?
+   n=<IDENT> { mediaRule.addMedia(mediarestrictor, convertIdent(n.image), ac); } ( <S> )*
+   (<AND> ( <S> )+ mediaexpression(mediaRule, false) )* ) |
+   (mediaexpression(mediaRule, true) (<AND> ( <S> )+ mediaexpression(mediaRule, false) )* ) ) {
+
+   }
+}
+
+void mediaexpression(AtRuleMedia mediaRule, boolean defaultMedia) :
+{
+  CssVersion v = ac.getCssVersion();
+  boolean isCss1 =  (v == CssVersion.CSS1);
+  CssExpression val = null;
+  String mediaFeatureName = null;
+  Token n;
+}
+{
+    <RPARAN> ( <S> )* n=<IDENT> {
+    // here we add the default media if not present
+       if (defaultMedia) {
+           mediaRule.addMedia(null, null, ac);
+       }
+       mediaFeatureName = convertIdent(n.image); }
+    ( <S> )*
+    ( <COLON> ( <S> )* val=expr() )?
+    <LPARAN>  ( <S> )*  {
+        MediaFeature mf = handleMediaFeature(mediaFeatureName, val);
+        mediaRule.addMediaFeature(mf, ac);
     }
 }
 
@@ -1414,7 +1458,7 @@
 			    throw new InvalidParamException("nocomb", "+", ac);
 		    }
 		}
-		// FIXME should be >= css3
+		// if version < CSS3, ~ is undefined
 		if (ac.getCssVersion().compareTo(CssVersion.CSS3) < 0) {
 		    if (comb == '~') {
 			    throw new InvalidParamException("nocomb", "~", ac);
@@ -1922,7 +1966,7 @@
 { String string_property;
   CssExpression values = null;
   boolean important = false;
-  setMediaDeclaration("on");
+  setMediaDeclaration(true);
 }
 {
 try {
@@ -1958,7 +2002,7 @@
      skipAfterExpression(e);
      return null;
  } finally {
-     setMediaDeclaration("off");
+     setMediaDeclaration(false);
  }
 }
 

Index: CssParser.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/parser/analyzer/CssParser.java,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -d -r1.77 -r1.78
--- CssParser.java	4 Oct 2011 13:05:22 -0000	1.77
+++ CssParser.java	21 Oct 2011 01:49:09 -0000	1.78
@@ -30,7 +30,8 @@
 import org.w3c.css.parser.CssSelectors;
 import org.w3c.css.parser.CssParseException;
 import org.w3c.css.parser.AtRule;
-import org.w3c.css.parser.AtRuleMedia;
+import org.w3c.css.media.AtRuleMedia;
+import org.w3c.css.media.MediaFeature;
 import org.w3c.css.parser.AtRuleFontFace;
 import org.w3c.css.parser.AtRulePage;
 import org.w3c.css.parser.AtRulePreference;
@@ -75,7 +76,7 @@
                                         'c', 'd', 'e', 'f' };
[...1948 lines suppressed...]
   }
 
@@ -3868,7 +3952,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 130; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 134; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -3985,7 +4069,7 @@
       la1tokens[jj_kind] = true;
       jj_kind = -1;
     }
-    for (int i = 0; i < 130; i++) {
+    for (int i = 0; i < 134; 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.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- CssParserConstants.java	17 Dec 2009 16:08:11 -0000	1.16
+++ CssParserConstants.java	21 Oct 2011 01:49:09 -0000	1.17
@@ -73,47 +73,47 @@
   /** RegularExpression Id. */
   int AND = 31;
   /** RegularExpression Id. */
-  int STRING = 32;
+  int MEDIARESTRICTOR = 32;
   /** RegularExpression Id. */
-  int INVALID = 33;
+  int STRING = 33;
   /** RegularExpression Id. */
-  int IDENT = 34;
+  int INVALID = 34;
   /** RegularExpression Id. */
-  int HASHIDENT = 35;
+  int IDENT = 35;
   /** RegularExpression Id. */
-  int HASH = 36;
+  int HASHIDENT = 36;
   /** RegularExpression Id. */
-  int RBRACE = 37;
+  int HASH = 37;
   /** RegularExpression Id. */
-  int PREFIXMATCH = 38;
+  int RBRACE = 38;
   /** RegularExpression Id. */
-  int SUFFIXMATCH = 39;
+  int PREFIXMATCH = 39;
   /** RegularExpression Id. */
-  int SUBSTRINGMATCH = 40;
+  int SUFFIXMATCH = 40;
   /** RegularExpression Id. */
-  int EQ = 41;
+  int SUBSTRINGMATCH = 41;
   /** RegularExpression Id. */
-  int MINUS = 42;
+  int EQ = 42;
   /** RegularExpression Id. */
-  int SEMICOLON = 43;
+  int MINUS = 43;
   /** RegularExpression Id. */
-  int DIV = 44;
+  int SEMICOLON = 44;
   /** RegularExpression Id. */
-  int LBRACKET = 45;
+  int DIV = 45;
   /** RegularExpression Id. */
-  int RBRACKET = 46;
+  int LBRACKET = 46;
   /** RegularExpression Id. */
-  int ANY = 47;
+  int RBRACKET = 47;
   /** RegularExpression Id. */
-  int DOT = 48;
+  int ANY = 48;
   /** RegularExpression Id. */
-  int LPARAN = 49;
+  int DOT = 49;
   /** RegularExpression Id. */
-  int RPARAN = 50;
+  int LPARAN = 50;
   /** RegularExpression Id. */
-  int COLON = 51;
+  int RPARAN = 51;
   /** RegularExpression Id. */
-  int MEDIARESTRICTOR = 52;
+  int COLON = 52;
   /** RegularExpression Id. */
   int URL = 53;
   /** RegularExpression Id. */
@@ -242,6 +242,7 @@
     "<COMMA>",
     "<TILDE>",
     "\"and\"",
+    "<MEDIARESTRICTOR>",
     "<STRING>",
     "<INVALID>",
     "<IDENT>",
@@ -262,7 +263,6 @@
     "\")\"",
     "\"(\"",
     "\":\"",
-    "<MEDIARESTRICTOR>",
     "<URL>",
     "<LENGTH>",
     "<EMS>",
Received on Friday, 21 October 2011 01:49:49 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:17:47 UTC