From 1dcdb8e452ba99878a26ce3fa8cd570aff3d300b Mon Sep 17 00:00:00 2001 From: hns Date: Thu, 26 Apr 2007 09:26:30 +0000 Subject: [PATCH] * Remove processed parameter feature ($(...), $[...]), as it is largely redundant. * Fix bug reported by Tobi on helma-user where nested macros in default, prefix or suffix returned something else than a string. --- src/helma/framework/core/Skin.java | 60 ++++++++---------------------- 1 file changed, 16 insertions(+), 44 deletions(-) diff --git a/src/helma/framework/core/Skin.java b/src/helma/framework/core/Skin.java index 3991661c..b38ed163 100644 --- a/src/helma/framework/core/Skin.java +++ b/src/helma/framework/core/Skin.java @@ -323,8 +323,6 @@ public final class Skin { throws Exception { if (value instanceof Macro) { return ((Macro) value).invokeAsParameter(cx); - } else if (value instanceof ProcessedParameter) { - return ((ProcessedParameter) value).process(cx.reval); } else { return value; } @@ -496,7 +494,7 @@ public final class Skin { return parse(macroOffset, true); } // add parameter - addParameter(lastParamName, parseParameter(b.toString())); + addParameter(lastParamName, b.toString()); lastParamName = null; b.setLength(0); quotechar = '\u0000'; @@ -528,7 +526,7 @@ public final class Skin { if (quotechar == '\u0000') { if (b.length() > 0) { // add parameter - addParameter(lastParamName, parseParameter(b.toString())); + addParameter(lastParamName, b.toString()); lastParamName = null; b.setLength(0); } @@ -569,7 +567,7 @@ public final class Skin { if (name == null) { name = b.toString().trim(); } else { - addParameter(lastParamName, parseParameter(b.toString())); + addParameter(lastParamName, b.toString()); } } @@ -588,17 +586,6 @@ public final class Skin { positionalParams = null; } - private Object parseParameter(String str) { - int length = str.length(); - if (length > 3 && str.charAt(0) == '$') { - if (str.charAt(1) == '[' && str.charAt(length - 1) == ']') - return new ProcessedParameter(str.substring(2, str.length()-1), 0); - else if (str.charAt(1) == '(' && str.charAt(length - 1) == ')') - return new ProcessedParameter(str.substring(2, str.length()-1), 1); - } - return str; - } - private void addParameter(String name, Object value) { if (!(value instanceof String)) { hasNestedMacros = true; @@ -1052,12 +1039,22 @@ public final class Skin { if (!containsMacros()) return this; StandardParams stdParams = new StandardParams(); - stdParams.prefix = processParameter(prefix, cx); - stdParams.suffix = processParameter(suffix, cx); - stdParams.defaultValue = processParameter(defaultValue, cx); + stdParams.prefix = renderToString(prefix, cx); + stdParams.suffix = renderToString(suffix, cx); + stdParams.defaultValue = renderToString(defaultValue, cx); return stdParams; } + String renderToString(Object obj, RenderContext cx) throws Exception { + Object value = processParameter(obj, cx); + if (value == null) + return null; + else if (value instanceof String) + return (String) value; + else + return cx.reval.scriptingEngine.toString(value); + } + } class RenderContext { @@ -1126,31 +1123,6 @@ public final class Skin { } } - /** - * Processed macro parameter - */ - class ProcessedParameter { - String value; - int type; - - ProcessedParameter(String value, int type) { - this.value = value; - this.type = type; - } - - Object process(RequestEvaluator reval) throws Exception { - switch (type) { - case 1: - Object function = app.processMacroParameter; - Object[] args = {value}; - return reval.invokeDirectFunction(null, function, args); - case 0: - default: - return reval.getResponse().getMacroHandlers().get(value); - } - } - } - /** * Exception type for unhandled macros */