All Downloads are FREE. Search and download functionalities are using the official Maven repository.

w3c.css.values.CssURL Maven / Gradle / Ivy

There is a newer version: 1.0.8
Show newest version
//
// $Id$
// From Philippe Le Hegaret ([email protected])
//
// (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$ */ 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; value = urlname; full = null; if (!urlHeading.startsWith("url")) throw new InvalidParamException("url", s, ac); // special case for data url... if (urlname.startsWith("data:")) { // no more processing. value = checkDataURL(urlname); return; } // 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); } } private String checkDataURL(String source) { StringBuilder sb = new StringBuilder(); // here we just escape < and >, we might do more validation // like base64 encoding checks, when necessary for (char c : source.toCharArray()) { switch (c) { case '<': sb.append("%3c"); break; case '>': sb.append("%3e"); break; default: sb.append(c); } } return sb.toString(); } /** * 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)); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy