{
if (isFunctionValue(unit) == false)
{
return null;
}
LexicalUnit parameters = unit.getParameters();
final String functionName = unit.getFunctionName();
if (parameters == null)
{
// no-parameter function include the date() function...
return new CSSFunctionValue(functionName, new CSSValue[0]);
}
if ("attr".equalsIgnoreCase(functionName))
{
return parseComplexAttrFn(unit.getParameters());
}
final ArrayList contentList = new ArrayList();
while (parameters != null)
{
if (parameters.getLexicalUnitType() == LexicalUnit.SAC_IDENT)
{
contentList.add(new CSSConstant(parameters.getStringValue()));
}
else if (parameters.getLexicalUnitType() == LexicalUnit.SAC_STRING_VALUE)
{
contentList.add(new CSSStringValue(CSSStringType.STRING,
parameters.getStringValue()));
}
else if (CSSValueFactory.isNumericValue(parameters))
{
final CSSNumericValue numericValue =
CSSValueFactory.createNumericValue(parameters);
if (numericValue == null)
{
return null;
}
contentList.add(numericValue);
}
else if (CSSValueFactory.isLengthValue(parameters))
{
final CSSNumericValue lengthValue =
CSSValueFactory.createLengthValue(parameters);
if (lengthValue == null)
{
return null;
}
contentList.add(lengthValue);
}
else if (parameters.getLexicalUnitType() == LexicalUnit.SAC_ATTR)
{
final CSSAttrFunction attrFn =
CSSValueFactory.parseAttrFunction(parameters);
if (attrFn == null)
{
return null;
}
contentList.add(attrFn);
}
else if (parameters.getLexicalUnitType() == LexicalUnit.SAC_URI)
{
final CSSStringValue uriValue = CSSValueFactory.createUriValue(
parameters);
if (uriValue == null)
{