From 771c13d82d8c9a6ec09c30bcd3fd68b8d12297b6 Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 25 Jan 2005 16:43:08 +0000 Subject: [PATCH] * Implement macro comments as <% // ..... %> * Display an error message for unhandled global macros --- src/helma/framework/core/Skin.java | 43 +++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/src/helma/framework/core/Skin.java b/src/helma/framework/core/Skin.java index 2d8b2570..30ea66f6 100644 --- a/src/helma/framework/core/Skin.java +++ b/src/helma/framework/core/Skin.java @@ -197,6 +197,8 @@ public final class Skin { String defaultValue; int encoding = ENCODE_NONE; Map parameters = null; + // comment macros are silently dropped during rendering + boolean isCommentMacro = false; public Macro(int start, int end) { this.start = start; @@ -210,6 +212,19 @@ public final class Skin { for (int i = start + 2; i < (end - 2); i++) { switch (source[i]) { + + case '/': + + b.append(source[i]); + escape = false; + + if (state == HANDLER && "//".equals(b.toString())) { + isCommentMacro = true; + return; + } + + break; + case '.': if (state == HANDLER) { @@ -218,6 +233,7 @@ public final class Skin { state = MACRO; } else { b.append(source[i]); + escape = false; } break; @@ -283,6 +299,7 @@ public final class Skin { state = PARAMNAME; } else if (state == PARAMVALUE) { b.append(source[i]); + escape = false; } else { b.setLength(0); } @@ -297,6 +314,7 @@ public final class Skin { state = PARAMVALUE; } else { b.append(source[i]); + escape = false; } break; @@ -372,9 +390,12 @@ public final class Skin { public void render(RequestEvaluator reval, Object thisObject, Map paramObject, Map handlerCache) throws RedirectException, UnsupportedEncodingException { - if ((sandbox != null) && !sandbox.contains(fullName)) { - //String h = (handler == null) ? "global" : handler; + // immediately return for comment macros + if (isCommentMacro) { + return; + } + if ((sandbox != null) && !sandbox.contains(fullName)) { reval.res.write("[Macro " + fullName + " not allowed in sandbox]"); return; @@ -518,16 +539,24 @@ public final class Skin { writeResponse(value, buffer, false); } } else { - // System.err.println ("Getting macro from property"); - Object value = reval.scriptingEngine.get(handlerObject, name); + // for unhandled global macros display error message, + // otherwise try property lookup + if (handlerObject == null) { + String msg = "[Macro unhandled: " + fullName + "]"; + reval.res.write(" " + msg + " "); + app.logEvent(msg); - writeResponse(value, reval.res.getBuffer(), true); + } else { + Object value = reval.scriptingEngine.get(handlerObject, name); + writeResponse(value, reval.res.getBuffer(), true); + } } - } else { - String msg = "[HopMacro unhandled: " + fullName + "]"; + } else { + String msg = "[Macro unhandled: " + fullName + "]"; reval.res.write(" " + msg + " "); app.logEvent(msg); + } } catch (RedirectException redir) { throw redir;