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

2002/css-validator/org/w3c/css/parser CssPropertyFactory.java,1.33,1.34

From: Yves Lafon via cvs-syncmail <cvsmail@w3.org>
Date: Thu, 04 Oct 2012 13:23:11 +0000
To: www-validator-cvs@w3.org
Message-Id: <E1TJlOR-0002Zd-Ic@lionel-hutz.w3.org>
Update of /sources/public/2002/css-validator/org/w3c/css/parser
In directory hutz:/tmp/cvs-serv9771/parser

Modified Files:
	CssPropertyFactory.java 
Log Message:
safety for media check + vendor extension

Index: CssPropertyFactory.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/parser/CssPropertyFactory.java,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- CssPropertyFactory.java	4 Aug 2012 21:17:03 -0000	1.33
+++ CssPropertyFactory.java	4 Oct 2012 13:23:09 -0000	1.34
@@ -32,156 +32,161 @@
  */
 public class CssPropertyFactory implements Cloneable {
 
-    // all recognized properties are here.
-    private Utf8Properties properties;
+	// all recognized properties are here.
+	private Utf8Properties properties;
 
-    //all used profiles are here (in the priority order)
-    private static String[] SORTEDPROFILES = PropertiesLoader.getProfiles();
+	//all used profiles are here (in the priority order)
+	private static String[] SORTEDPROFILES = PropertiesLoader.getProfiles();
 
-    // private Utf8Properties allprops;
+	// private Utf8Properties allprops;
 
-    // does not seem to be used
-    // private String usermedium;
+	// does not seem to be used
+	// private String usermedium;
 
-    public CssPropertyFactory getClone() {
-        try {
-            return (CssPropertyFactory) clone();
-        } catch (CloneNotSupportedException ex) {
-            ex.printStackTrace();
-            return null;
-        }
-    }
+	public CssPropertyFactory getClone() {
+		try {
+			return (CssPropertyFactory) clone();
+		} catch (CloneNotSupportedException ex) {
+			ex.printStackTrace();
+			return null;
+		}
+	}
 
-    /**
-     * Create a new CssPropertyFactory
-     */
-    public CssPropertyFactory(String profile) {
-        properties = PropertiesLoader.getProfile(profile);
-        // It's not good to have null properties :-/
-        if (properties == null) {
-            throw new NullPointerException();
-        }
-    }
+	/**
+	 * Create a new CssPropertyFactory
+	 */
+	public CssPropertyFactory(String profile) {
+		properties = PropertiesLoader.getProfile(profile);
+		// It's not good to have null properties :-/
+		if (properties == null) {
+			throw new NullPointerException();
+		}
+	}
 
-    public String getProperty(String name) {
-        return properties.getProperty(name);
-    }
+	public String getProperty(String name) {
+		return properties.getProperty(name);
+	}
 
-    private ArrayList<String> getMediaList(String media) {
-        ArrayList<String> list = new ArrayList<String>();
-        String medium;
-        StringTokenizer tok = new StringTokenizer(media, ",");
+	private ArrayList<String> getMediaList(String media) {
+		ArrayList<String> list = new ArrayList<String>();
+		String medium;
+		StringTokenizer tok = new StringTokenizer(media, ",");
 
-        while (tok.hasMoreTokens()) {
-            medium = tok.nextToken();
-            medium = medium.trim();
-            list.add(medium);
-        }
-        return list;
-    }
+		while (tok.hasMoreTokens()) {
+			medium = tok.nextToken();
+			medium = medium.trim();
+			list.add(medium);
+		}
+		return list;
+	}
 
-    // bug: FIXME
-    // @media screen and (min-width: 400px) and (max-width: 700px), print {
-    // a {
-    // border: 0;
-    // }
-    // }
-    public synchronized MediaFeature createMediaFeature(ApplContext ac, AtRule atRule, String feature,
-                                                        CssExpression expression) throws Exception {
-        String modifier = null;
-        String classname;
-        int dashpos = feature.indexOf('-');
-        feature = feature.toLowerCase();
+	// bug: FIXME
+	// @media screen and (min-width: 400px) and (max-width: 700px), print {
+	// a {
+	// border: 0;
+	// }
+	// }
+	public synchronized MediaFeature createMediaFeature(ApplContext ac, AtRule atRule, String feature,
+														CssExpression expression) throws Exception {
+		String modifier = null;
+		String classname;
+		int dashpos = feature.indexOf('-');
+		feature = feature.toLowerCase();
 
-        if (dashpos != -1) {
-            if (dashpos == 0) {
-                // vendor media?
-                try {
-                    AtRuleMedia atRuleMedia = (AtRuleMedia) atRule;
-                    // I don't know this property
-                    // TODO get the latest media it applies to
-                    throw new InvalidParamException("noexistence-media", feature,
-                            atRuleMedia.getCurrentMedia(), ac);
-                } catch (ClassCastException cce) {
-                    // I don't know this property
-                    throw new InvalidParamException("noexistence", feature, "not media @rule", ac);
-                }
-            }
-            modifier = feature.substring(0, dashpos);
-            // clash between feature name and modifier...
-            // link min-width and color-index, so we check we have min- or max-
-            if (modifier.equals("min") || modifier.equals("max")) {
-                feature = feature.substring(dashpos + 1);
-            } else {
-                // back to normal
-                modifier = null;
-            }
-        }
+		if (dashpos != -1) {
+			if (dashpos == 0) {
+				// vendor media?
+				try {
+					AtRuleMedia atRuleMedia = (AtRuleMedia) atRule;
+					// I don't know this property
+					// TODO get the latest media it applies to
+					throw new InvalidParamException("noexistence-media", feature,
+							atRuleMedia.getCurrentMedia(), ac);
+				} catch (ClassCastException cce) {
+					// I don't know this property
+					throw new InvalidParamException("noexistence", feature, "not media @rule", ac);
+				}
+			}
+			modifier = feature.substring(0, dashpos);
+			// clash between feature name and modifier...
+			// link min-width and color-index, so we check we have min- or max-
+			if (modifier.equals("min") || modifier.equals("max")) {
+				feature = feature.substring(dashpos + 1);
+			} else {
+				// back to normal
+				modifier = null;
+			}
+		}
 
-        classname = properties.getProperty("mediafeature" + "." + feature.toLowerCase());
-        if (classname == null) {
-            try {
-                AtRuleMedia atRuleMedia = (AtRuleMedia) atRule;
-                // I don't know this property
-                // TODO get the latest media it applies to
-                throw new InvalidParamException("noexistence-media", feature,
-                        atRuleMedia.getCurrentMedia(), ac);
-            } catch (ClassCastException cce) {
-                // I don't know this property
-                throw new InvalidParamException("noexistence", feature, "not media @rule", ac);
-            }
-        }
+		classname = properties.getProperty("mediafeature" + "." + feature.toLowerCase());
+		if (classname == null) {
+			try {
+				AtRuleMedia atRuleMedia = (AtRuleMedia) atRule;
+				// I don't know this property
+				// TODO get the latest media it applies to
+				throw new InvalidParamException("noexistence-media", feature,
+						atRuleMedia.getCurrentMedia(), ac);
+			} catch (ClassCastException cce) {
+				// I don't know this property
+				throw new InvalidParamException("noexistence", feature, "not media @rule", ac);
+			}
+		}
 
-        try {
-            // create an instance of your property class
-            Class expressionclass = CssExpression.class;
-            if (expression != null) {
-                expressionclass = expression.getClass();
-            }
-            // Maybe it will be necessary to add the check parameter as for
-            // create property, so... FIXME
-            Class[] parametersType = {ac.getClass(), String.class, expressionclass};
-            Constructor constructor = Class.forName(classname).getConstructor(parametersType);
-            Object[] parameters = {ac, modifier, expression};
-            // invoke the constructor
-            return (MediaFeature) constructor.newInstance(parameters);
-        } catch (InvocationTargetException e) {
-            // catch InvalidParamException
-            Exception ex = (Exception) e.getTargetException();
-            throw ex;
-        }
-    }
+		try {
+			// create an instance of your property class
+			Class expressionclass = CssExpression.class;
+			if (expression != null) {
+				expressionclass = expression.getClass();
+			}
+			// Maybe it will be necessary to add the check parameter as for
+			// create property, so... FIXME
+			Class[] parametersType = {ac.getClass(), String.class, expressionclass};
+			Constructor constructor = Class.forName(classname).getConstructor(parametersType);
+			Object[] parameters = {ac, modifier, expression};
+			// invoke the constructor
+			return (MediaFeature) constructor.newInstance(parameters);
+		} catch (InvocationTargetException e) {
+			// catch InvalidParamException
+			Exception ex = (Exception) e.getTargetException();
+			throw ex;
+		}
+	}
 
-    public synchronized CssProperty createProperty(ApplContext ac, AtRule atRule, String property,
-                                                   CssExpression expression) throws Exception {
-        String classname = null;
-        AtRuleMedia atRuleMedia;
-        String media = null;
+	public synchronized CssProperty createProperty(ApplContext ac, AtRule atRule, String property,
+												   CssExpression expression) throws Exception {
+		String classname = null;
+		AtRuleMedia atRuleMedia;
+		String media = null;
 
-        try {
-            atRuleMedia = (AtRuleMedia) atRule;
-            // TODO FIXME in fact, it should use a vector of media instead of extracting
-            // only one media, so let's use kludges
-            for (Media m : atRuleMedia.getMediaList()) {
-                if (!m.getNot()) {
-                    media = m.getMedia();
-                    break;
-                }
-            }
-        } catch (ClassCastException cce) {
-            media = "all";
-        }
-        classname = setClassName(atRule, media, ac, property);
+		if (ac.getTreatVendorExtensionsAsWarnings()) {
+			if (isVendorExtension(property)) {
+				throw new WarningParamException("vendor-extension", property);
+			}
+			if (expression.hasVendorExtensions()) {
+				throw new WarningParamException("vendor-extension", expression.toStringFromStart());
+			}
+		}
 
-        // the property does not exist in this profile
-        // this is an error... or a warning if it exists in another profile
-        if (classname == null) {
-            if (ac.getTreatVendorExtensionsAsWarnings() &&
-                    isVendorExtension(property)) {
-                throw new WarningParamException("vendor-extension", property);
-            }
-            ArrayList<String> pfsOk = new ArrayList<String>();
-            String spec = ac.getPropertyKey();
+		try {
+			atRuleMedia = (AtRuleMedia) atRule;
+			// TODO FIXME in fact, it should use a vector of media instead of extracting
+			// only one media, so let's use kludges
+			for (Media m : atRuleMedia.getMediaList()) {
+				if (!m.getNot()) {
+					media = m.getMedia();
+					break;
+				}
+			}
+		} catch (ClassCastException cce) {
+			media = "all";
+		}
+		classname = setClassName(atRule, media, ac, property);
+
+		// the property does not exist in this profile
+		// this is an error... or a warning if it exists in another profile
+		if (classname == null) {
+			ArrayList<String> pfsOk = new ArrayList<String>();
+			String spec = ac.getPropertyKey();
 
 			for (String p : SORTEDPROFILES) {
 				if (!p.equals(spec) && PropertiesLoader.getProfile(p).containsKey(property)) {
@@ -189,90 +194,94 @@
 				}
 			}
 
-            if (pfsOk.size() > 0) {
-                if (ac.getCssProfile() == CssProfile.NONE) {
-                    String latestVersion = pfsOk.get(pfsOk.size() - 1);
-                    CssVersion v = CssVersion.resolve(ac, latestVersion);
-                    // should always be true... otherwise there is an issue...
-                    if (v.compareTo(ac.getCssVersion()) > 0) {
-                        ac.getFrame().addWarning("noexistence", new String[]{property, ac.getMsg().getString(ac.getPropertyKey()), pfsOk.toString()});
-                        ac.setCssVersion(v);
-                    }
-                    classname = setClassName(atRule, media, ac, property);
-                } else {
+			if (pfsOk.size() > 0) {
+				if (ac.getCssProfile() == CssProfile.NONE) {
+					String latestVersion = pfsOk.get(pfsOk.size() - 1);
+					CssVersion v = CssVersion.resolve(ac, latestVersion);
+					// should always be true... otherwise there is an issue...
+					if (v.compareTo(ac.getCssVersion()) > 0) {
+						ac.getFrame().addWarning("noexistence", new String[]{property, ac.getMsg().getString(ac.getPropertyKey()), pfsOk.toString()});
+						ac.setCssVersion(v);
+					}
+					classname = setClassName(atRule, media, ac, property);
+				} else {
 
-                    /*
-                    // This should be uncommented when no-profile in enabled
-                    if (ac.getProfileString().equals("none")) {
-                    // the last one should be the best one to use
-                    String	pf = (String) pfsOk.get(pfsOk.size()-1),
-                    old_pf = ac.getCssVersionString();
-                    ac.setCssVersion(pf);
-                    ac.getFrame().addWarning("noexistence", new String[] { property, ac.getMsg().getString(old_pf), pfsOk.toString() });
-                    classname = setClassName(atRule, media, ac, property);
-                    ac.setCssVersion(old_pf);
-                    }
-                    else
-                    */
-                    throw new InvalidParamException("noexistence", new String[]{property, ac.getMsg().getString(ac.getPropertyKey()), pfsOk.toString()}, ac);
-                }
-            } else {
-                throw new InvalidParamException("noexistence-at-all", property, ac);
-            }
-        }
+					/*
+										// This should be uncommented when no-profile in enabled
+										if (ac.getProfileString().equals("none")) {
+										// the last one should be the best one to use
+										String	pf = (String) pfsOk.get(pfsOk.size()-1),
+										old_pf = ac.getCssVersionString();
+										ac.setCssVersion(pf);
+										ac.getFrame().addWarning("noexistence", new String[] { property, ac.getMsg().getString(old_pf), pfsOk.toString() });
+										classname = setClassName(atRule, media, ac, property);
+										ac.setCssVersion(old_pf);
+										}
+										else
+										*/
+					throw new InvalidParamException("noexistence", new String[]{property, ac.getMsg().getString(ac.getPropertyKey()), pfsOk.toString()}, ac);
+				}
+			} else {
+				throw new InvalidParamException("noexistence-at-all", property, ac);
+			}
+		}
 
-        CssIdent initial = CssIdent.getIdent("initial");
+		CssIdent initial = CssIdent.getIdent("initial");
 
-        try {
-            if ((ac.getCssVersion().compareTo(CssVersion.CSS3) >= 0) && (expression.getCount() == 1)
-                    && expression.getValue().equals(initial)) {
-                // create an instance of your property class
-                Class[] parametersType = {};
-                Constructor constructor = Class.forName(classname).getConstructor(parametersType);
-                Object[] parameters = {};
-                // invoke the constructor
-                return (CssProperty) constructor.newInstance(parameters);
-            } else {
-                // create an instance of your property class
-                Class[] parametersType = {ac.getClass(), expression.getClass(), boolean.class};
-                Constructor constructor = Class.forName(classname).getConstructor(parametersType);
-                Object[] parameters = {ac, expression, Boolean.TRUE};
-                // invoke the constructor
-                return (CssProperty) constructor.newInstance(parameters);
+		try {
+			if ((ac.getCssVersion().compareTo(CssVersion.CSS3) >= 0) && (expression.getCount() == 1)
+					&& expression.getValue().equals(initial)) {
+				// create an instance of your property class
+				Class[] parametersType = {};
+				Constructor constructor = Class.forName(classname).getConstructor(parametersType);
+				Object[] parameters = {};
+				// invoke the constructor
+				return (CssProperty) constructor.newInstance(parameters);
+			} else {
+				// create an instance of your property class
+				Class[] parametersType = {ac.getClass(), expression.getClass(), boolean.class};
+				Constructor constructor = Class.forName(classname).getConstructor(parametersType);
+				Object[] parameters = {ac, expression, Boolean.TRUE};
+				// invoke the constructor
+				return (CssProperty) constructor.newInstance(parameters);
 
-            }
-        } catch (InvocationTargetException e) {
-            // catch InvalidParamException
-            Exception ex = (Exception) e.getTargetException();
-            throw ex;
-        }
-    }
+			}
+		} catch (InvocationTargetException e) {
+			// catch InvalidParamException
+			Exception ex = (Exception) e.getTargetException();
+			//	uncomment for debug - ex.printStackTrace();
+			throw ex;
+		}
+	}
 
-    private String setClassName(AtRule atRule, String media, ApplContext ac, String property) {
-        String className;
-        if (atRule instanceof AtRuleMedia) {
-            className = PropertiesLoader.getProfile(ac.getPropertyKey()).getProperty(property);
-            // a list of media has been specified
-            if (className != null && media != null && !media.equals("all")) {
-                String propMedia = PropertiesLoader.mediaProperties.getProperty(property);
-                ArrayList<String> list = getMediaList(media);
-                for (String medium : list) {
-                    if (propMedia.indexOf(medium.toLowerCase()) == -1 && !propMedia.equals("all")) {
-                        ac.getFrame().addWarning("noexistence-media", new String[]{property, medium + " (" + propMedia + ")"});
-                    }
-                }
-            }
-        } else {
+	private String setClassName(AtRule atRule, String media, ApplContext ac, String property) {
+		String className;
+		if (atRule instanceof AtRuleMedia) {
+			className = PropertiesLoader.getProfile(ac.getPropertyKey()).getProperty(property);
+			// a list of media has been specified
+			if (className != null && media != null && !media.equals("all")) {
+				String propMedia = PropertiesLoader.mediaProperties.getProperty(property);
+				if (propMedia == null) {
+					return className;
+				}
+				ArrayList<String> list = getMediaList(media);
+				for (String medium : list) {
+					if (propMedia.indexOf(medium.toLowerCase()) == -1 && !propMedia.equals("all")) {
+						ac.getFrame().addWarning("noexistence-media", new String[]{property, medium + " (" + propMedia + ")"});
+					}
+				}
+			}
+		} else {
 			StringBuilder sb = new StringBuilder();
 			// construct the property key
 			sb.append('@').append(atRule.keyword()).append('.').append(property);
-            className = PropertiesLoader.getProfile(ac.getPropertyKey()).getProperty(sb.toString());
-        }
-        return className;
-    }
+			className = PropertiesLoader.getProfile(ac.getPropertyKey()).getProperty(sb.toString());
+		}
+		return className;
+	}
 
-    private boolean isVendorExtension(String property) {
-        return property.length() > 0 &&
-                (property.charAt(0) == '-' || property.charAt(0) == '_');
-    }
+	private boolean isVendorExtension(String property) {
+		return property.length() > 0 &&
+				(property.charAt(0) == '-' || property.charAt(0) == '_');
+	}
 }
Received on Thursday, 4 October 2012 13:23:13 UTC

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