FieldIndexOutOfBoundsException, InvalidElementException, IOException {
final int openingBracket = fieldName.indexOf('(');
if (openingBracket > 0) {
final int closingBracket = fieldName.lastIndexOf(')');
if (closingBracket == -1) {
throw new InvalidElementException("Unmatched brackets");
}
final String functionName = fieldName.substring(0, openingBracket);
RenderingFunction<Object, ?> function = renderingFunctions.getNamedFunctions().get(functionName);
if (function == null) {
throw new InvalidElementException("No such function: " + functionName);
}
String innerFieldName = fieldName.substring(openingBracket + 1, closingBracket);
Object[] argumentValues = getArgumentValues(innerFieldName,arrayPos);
return function.process(argumentValues);
}