// // $Id: CssURL.java,v 1.8 2012/02/23 14:28:10 ylafon Exp $ // From Philippe Le Hegaret (Philippe.Le_Hegaret@sophia.inria.fr) // // (c) COPYRIGHT MIT and INRIA, 1997. // Please first read the full copyright statement in file COPYRIGHT.html package org.w3c.css.values; import org.w3c.css.util.ApplContext; import org.w3c.css.util.HTTPURL; import org.w3c.css.util.InvalidParamException; import java.net.MalformedURLException; import java.net.URL; /** *

*    URL *

*

* A Uniform Resource Locator (URL) is identified with a functional notation: *

 * BODY { background: url(http://www.bg.com/pinkish.gif) }
 * 
*

* The format of a URL value is 'url(' followed by optional white space followed * by an optional single quote (') or double quote (") character followed by * the URL itself (as defined in [11]) followed by an optional * single quote (') or double quote (") character followed by optional whitespace * followed by ')'. Quote characters that are not part of the URL itself must * be balanced. *

* Parentheses, commas, whitespace characters, single quotes (') and double * quotes (") appearing in a URL must be escaped with a backslash: '\(', '\)', * '\,'. *

* Partial URLs are interpreted relative to the source of the style sheet, not * relative to the document: *

 * BODY { background: url(yellow) }
 * 
* See also *

* [11] T Berners-Lee, L Masinter, M McCahill: "Uniform * Resource Locators (URL)", RFC * 1738, CERN, Xerox Corporation, University of Minnesota, December 1994 * * @version $Revision: 1.8 $ */ public class CssURL extends CssValue { public static final int type = CssTypes.CSS_URL; public final int getType() { return type; } String value; String full = null; URL base; URL urlValue = null; /** * Set the value of this URL. * * @param s the string representation of the URL. * @param ac For errors and warnings reports. * @throws InvalidParamException The unit is incorrect * @deprecated */ public void set(String s, ApplContext ac) throws InvalidParamException { throw new InvalidParamException("Deprecated method invocation", ac); } /** * Set the value of this URL. * * @param s the string representation of the URL. * @param ac For errors and warnings reports. * @param base the base location of the style sheet * @throws InvalidParamException The unit is incorrect */ public void set(String s, ApplContext ac, URL base) throws InvalidParamException { String urlHeading = s.substring(0, 3).toLowerCase(); String urlname = s.substring(4, s.length() - 1).trim(); this.base = base; // try { // CssString convert = new CssString(); // convert.set(urlname, ac); // value = (String) convert.get(); // } catch (InvalidParamException e) { value = urlname; full = null; // } if (!urlHeading.startsWith("url")) throw new InvalidParamException("url", s, ac); // now add the URL to the list of seen URLs in the context try { ac.addLinkedURI(getURL()); } catch (MalformedURLException mex) { // error? throw an exception throw new InvalidParamException("url", s, ac); } } /** * Get the internal value. */ public Object get() { return value; } /** * Returns the URL * * @return the URL * @throws java.net.MalformedURLException (self explanatory) */ public URL getURL() throws MalformedURLException { if (urlValue == null) { urlValue = HTTPURL.getURL(base, value); } return urlValue; } /** * Returns a string representation of the object. */ public String toString() { if (full != null) { return full; } StringBuilder sb = new StringBuilder("url("); sb.append(value).append(')'); return full = sb.toString(); } /** * Compares two values for equality. * * @param url The other value. */ public boolean equals(Object url) { return (url instanceof CssURL && value.equals(((CssURL) url).value)); } }