Author: lgawron
Date: Fri Feb 25 08:16:53 2005
New Revision: 155340

URL: http://svn.apache.org/viewcvs?view=rev&rev=155340
Log:
introduced:
<jx:call macro="${macroName}">
  <jx:withParam name="param1" value="${val}">
  <body>here</body>
</jx:call>

Added:
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/MacroContext.java
   (with props)
Modified:
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartCall.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartChoose.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartComment.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartDefine.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartEval.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartEvalBody.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartForEach.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartFormatDate.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartFormatNumber.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartIf.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartImport.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartOut.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartParameterInstance.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartSet.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartTemplate.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Characters.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndCDATA.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndDTD.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndDocument.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndElement.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndEntity.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndPrefixMapping.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/IgnorableWhitespace.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/ProcessingInstruction.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/SkippedEntity.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartCDATA.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDTD.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDocument.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartElement.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEntity.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartInstruction.java
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartPrefixMapping.java
    
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/JXTemplateGeneratorTestCase.java
    
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/jxMacro-output.xml
    
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/jxMacro.xml

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/JXTemplateGenerator.java
 Fri Feb 25 08:16:53 2005
@@ -37,7 +37,6 @@
 import org.apache.cocoon.template.jxtg.script.ScriptManager;
 import org.apache.cocoon.template.jxtg.script.event.Event;
 import org.apache.cocoon.template.jxtg.script.event.StartDocument;
-import org.apache.cocoon.template.jxtg.script.event.StartElement;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.apache.excalibur.source.SourceValidity;
 import org.xml.sax.SAXException;
@@ -114,11 +113,10 @@
      */
     public void generate() throws IOException, SAXException,
             ProcessingException {
-        performGeneration(this.xmlConsumer, null, this.startDocument, null);
+        performGeneration(this.xmlConsumer, this.startDocument, null);
     }
 
-    public void performGeneration(final XMLConsumer consumer,
-                                  StartElement macroCall, Event startEvent, 
Event endEvent)
+    public void performGeneration(final XMLConsumer consumer, Event 
startEvent, Event endEvent)
             throws SAXException {
         ((Map)expressionContext.get("cocoon")).put("consumer", consumer);
         Invoker.execute(this.xmlConsumer, this.expressionContext,

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/TransformerAdapter.java
 Fri Feb 25 08:16:53 2005
@@ -53,7 +53,7 @@
 
         public void endDocument() throws SAXException {
             super.endDocument();
-            gen.performGeneration(gen.getConsumer(), null, getStartEvent(), 
null);
+            gen.performGeneration(gen.getConsumer(), getStartEvent(), null);
         }
 
         void setConsumer(XMLConsumer consumer) {

Added: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/MacroContext.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/MacroContext.java?view=auto&rev=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/MacroContext.java
 (added)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/MacroContext.java
 Fri Feb 25 08:16:53 2005
@@ -0,0 +1,33 @@
+/*
+ * Created on 2005-02-25
+ */
+package org.apache.cocoon.template.jxtg.instruction;
+
+import org.apache.cocoon.template.jxtg.script.event.Event;
+
+/**
+ * @author lgawron
+ */
+public class MacroContext {
+    private final String macroQName;
+    private final Event bodyStart;
+    private final Event bodyEnd;
+
+    public MacroContext(String macroQName, Event bodyStart, Event bodyEnd) {
+        this.macroQName = macroQName;
+        this.bodyStart = bodyStart;
+        this.bodyEnd = bodyEnd;
+    }
+
+    public Event getBodyEnd() {
+        return bodyEnd;
+    }
+
+    public Event getBodyStart() {
+        return bodyStart;
+    }
+
+    public String getMacroQName() {
+        return macroQName;
+    }
+}

Propchange: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/MacroContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/MacroContext.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartCall.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartCall.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartCall.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartCall.java
 Fri Feb 25 08:16:53 2005
@@ -21,30 +21,39 @@
 import java.util.Stack;
 
 import org.apache.cocoon.components.expression.ExpressionContext;
+import org.apache.cocoon.template.jxtg.environment.ErrorHolder;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.expression.JXTExpression;
 import org.apache.cocoon.template.jxtg.script.Invoker;
 import org.apache.cocoon.template.jxtg.script.event.AttributeEvent;
+import org.apache.cocoon.template.jxtg.script.event.Characters;
 import org.apache.cocoon.template.jxtg.script.event.Event;
+import org.apache.cocoon.template.jxtg.script.event.IgnorableWhitespace;
 import org.apache.cocoon.template.jxtg.script.event.StartElement;
 import org.apache.cocoon.template.jxtg.script.event.StartInstruction;
+import org.apache.cocoon.template.jxtg.script.event.TextEvent;
 import org.apache.cocoon.xml.XMLConsumer;
+import org.apache.commons.lang.StringUtils;
 import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
 
 public class StartCall extends StartInstruction {
-//    private JXTExpression macroName;
+    private Object macro;
+    private JXTExpression targetNamespace;
     private Map parameters;
-    private StartElement body;
-    private StartDefine definition;
+    private Event body;
 
-    public StartCall(StartDefine definition, StartElement body)
+    public StartCall(StartDefine definition, StartElement startElement)
             throws SAXException {
-        super(body.getLocation());
+        super(startElement);
         this.parameters = new HashMap();
-        setBody(body);
+        setBody(startElement);
+        setNext(startElement.getNext());
         setDefinition(definition);
 
-        Iterator i = this.body.getAttributeEvents().iterator();
+        Iterator i = startElement.getAttributeEvents().iterator();
         while (i.hasNext()) {
             AttributeEvent attrEvent = (AttributeEvent) i.next();
             addParameterInstance(attrEvent);
@@ -54,20 +63,25 @@
     public StartCall(StartElement raw, Attributes attrs, Stack stack)
             throws SAXException {
         super(raw);
-//        Locator locator = getLocation();
-//        String name = attrs.getValue("macro");
-//        if (name == null) {
-//            throw new SAXParseException("if: \"test\" is required", locator,
-//                    null);
-//        }
-//        this.macroName = JXTExpression.compileExpr(name, "call: \"macro\": ",
-//                locator);
         this.parameters = new HashMap();
+        Locator locator = getLocation();
+
+        String name = attrs.getValue("macro");
+        if (name == null) {
+            throw new SAXParseException("if: \"test\" is required", locator,
+                    null);
+        }
+        this.macro = JXTExpression.compileExpr(name, "call: \"macro\": ",
+                locator);
+
+        String namespace = StringUtils.defaultString(attrs
+                .getValue("targetNamespace"));
+        this.targetNamespace = JXTExpression.compileExpr(namespace,
+                "call: \"targetNamespace\": ", locator);
     }
 
     public void setDefinition(StartDefine definition) {
-        this.definition = definition;
-        setEndInstruction(definition.getEndInstruction());
+        this.macro = definition;
     }
 
     public void addParameterInstance(AttributeEvent attributeEvent)
@@ -79,7 +93,7 @@
 
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         Map attributeMap = new HashMap();
         Iterator i = parameters.keySet().iterator();
@@ -97,7 +111,9 @@
         macro.put("arguments", attributeMap);
         localExpressionContext.put("macro", macro);
 
-        Iterator iter = this.definition.getParameters().entrySet().iterator();
+        StartDefine definition = resolveMacroDefinition(expressionContext,
+                executionContext);
+        Iterator iter = definition.getParameters().entrySet().iterator();
         while (iter.hasNext()) {
             Map.Entry e = (Map.Entry) iter.next();
             String key = (String) e.getKey();
@@ -109,18 +125,120 @@
             }
             localExpressionContext.put(key, val);
         }
-        Invoker.call(getLocation(), this.body, consumer,
-                localExpressionContext, executionContext, definition.getBody(),
-                definition.getEndInstruction());
-        // ev = startElement.getEndElement().getNext();
-        return getNext();
+
+        Event macroBodyStart = getNext();
+        Event macroBodyEnd = null;
+
+        if (getEndInstruction() != null)
+            macroBodyEnd = getEndInstruction();
+        else
+            macroBodyEnd = getStartElement().getEndElement();
+        
+        MacroContext newMacroContext = new MacroContext(definition.getQname(),
+                macroBodyStart, macroBodyEnd);
+        try {
+            Invoker.execute(consumer, localExpressionContext, executionContext,
+                    newMacroContext, definition.getBody(), definition
+                            .getEndInstruction());
+        } catch (SAXParseException exc) {
+            throw new SAXParseException(newMacroContext.getMacroQName() + ": "
+                    + exc.getMessage(), location, exc);
+        }
+
+        if (getEndInstruction() != null)
+            return getEndInstruction().getNext();
+        else
+            return getStartElement().getEndElement().getNext();
+    }
+
+    /**
+     * @param executionContext
+     * @return
+     * @throws SAXParseException
+     */
+    private StartDefine resolveMacroDefinition(
+            ExpressionContext expressionContext,
+            ExecutionContext executionContext) throws SAXParseException {
+        if (this.macro instanceof StartDefine)
+            return (StartDefine) macro;
+
+        Object macroName;
+        Object namespace;
+        JXTExpression macroNameExpression = (JXTExpression) macro;
+        try {
+            macroName = macroNameExpression.getValue(expressionContext);
+            namespace = targetNamespace.getValue(expressionContext);
+            if (namespace == null)
+                namespace = "";
+        } catch (Exception e) {
+            throw new SAXParseException(e.getMessage(), getLocation(), e);
+        } catch (Error err) {
+            throw new SAXParseException(err.getMessage(), getLocation(),
+                    new ErrorHolder(err));
+        }
+        StartDefine definition = (StartDefine) executionContext
+                .getDefinitions()
+                .get("{" + namespace.toString() + "}" + macroName.toString());
+        if (definition == null)
+            throw new SAXParseException("no macro definition: " + macroName,
+                    getLocation());
+        return definition;
     }
 
     /**
      * @param startElement
      */
-    public void setBody(StartElement startElement) {
-        this.body = startElement;
-        setNext(startElement.getEndElement().getNext());
+    public void setBody(Event body) {
+        this.body = body;
+
+    }
+
+    public void endNotify() throws SAXException {
+        // FIXME: copy/pasted from StartDefine (almost)
+        Event e = next;
+        boolean params = true;
+        while (e != this.getEndInstruction()) {
+            if (e instanceof StartParameterInstance) {
+                StartParameterInstance startParamInstance = 
(StartParameterInstance) e;
+                if (!params) {
+                    throw new SAXParseException(
+                            "<parameter value> not allowed here: \""
+                                    + startParamInstance.name + "\"",
+                            startParamInstance.getLocation(), null);
+                }
+                Object prev = this.parameters.put(startParamInstance.name,
+                        startParamInstance);
+                if (prev != null) {
+                    throw new SAXParseException("duplicate parameter value: \""
+                            + startParamInstance.name + "\"", location, null);
+                }
+                e = startParamInstance.getEndInstruction();
+            } else if (e instanceof IgnorableWhitespace) {
+                // EMPTY
+            } else if (e instanceof Characters) {
+                // check for whitespace
+                char[] ch = ((TextEvent) e).getRaw();
+                int len = ch.length;
+                for (int i = 0; i < len; i++) {
+                    if (!Character.isWhitespace(ch[i])) {
+                        if (params) {
+                            params = false;
+                            this.body = e;
+                        }
+                        break;
+                    }
+                }
+            } else {
+                if (params) {
+                    params = false;
+                    this.body = e;
+                }
+            }
+            e = e.getNext();
+        }
+        if (this.body == null) {
+            this.body = this.getEndInstruction();
+        }
+        setNext(this.body);
     }
 }

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartChoose.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartChoose.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartChoose.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartChoose.java
 Fri Feb 25 08:16:53 2005
@@ -39,7 +39,7 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         StartWhen startWhen = this.firstChoice;
         while (startWhen != null) {
@@ -57,7 +57,7 @@
             }
             if (result) {
                 Invoker.execute(consumer, expressionContext, executionContext,
-                                macroCall, startWhen.getNext(),
+                                macroContext, startWhen.getNext(),
                                 startWhen.getEndInstruction());
                 break;
             }
@@ -65,7 +65,7 @@
         }
         if (startWhen == null && this.otherwise != null) {
             Invoker.execute(consumer, expressionContext, executionContext,
-                            macroCall, this.otherwise.getNext(),
+                            macroContext, this.otherwise.getNext(),
                             this.otherwise.getEndInstruction());
         }
         return getEndInstruction().getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartComment.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartComment.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartComment.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartComment.java
 Fri Feb 25 08:16:53 2005
@@ -41,13 +41,13 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         // Parse the body of the comment
         NodeList nodeList =
             Invoker.toDOMNodeList("comment", this,
                                   expressionContext, executionContext,
-                                  macroCall);
+                                  macroContext);
         // JXPath doesn't handle NodeList, so convert it to an array
         int len = nodeList.getLength();
         final StringBuffer buf = new StringBuffer();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartDefine.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartDefine.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartDefine.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartDefine.java
 Fri Feb 25 08:16:53 2005
@@ -63,7 +63,7 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         executionContext.getDefinitions().put(this.qname, this);
         return getEndInstruction().getNext();
@@ -127,7 +127,7 @@
         return body;
     }
 
-    private String getQname() {
+    public String getQname() {
         return qname;
     }
 }

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartEval.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartEval.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartEval.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartEval.java
 Fri Feb 25 08:16:53 2005
@@ -44,7 +44,7 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         try {
             Object val = this.value.getNode(expressionContext);
@@ -52,8 +52,11 @@
                 throw new Exception("macro invocation required instead of: " + 
val);
             }
             StartElement call = (StartElement) val;
+            
+            //FIXME: eval does not allow to call macro providing macro body
+            MacroContext newMacroContext = new MacroContext( call.getQname(), 
null, null );
             Invoker.execute(consumer, expressionContext, executionContext,
-                            call, call.getNext(), call.getEndElement());
+                            newMacroContext, call.getNext(), 
call.getEndElement());
         } catch (Exception exc) {
             throw new SAXParseException(exc.getMessage(), getLocation(), exc);
         } catch (Error err) {

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartEvalBody.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartEvalBody.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartEvalBody.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartEvalBody.java
 Fri Feb 25 08:16:53 2005
@@ -36,11 +36,11 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         try {
             Invoker.execute(consumer, expressionContext, executionContext,
-                            null, macroCall.getNext(), 
macroCall.getEndElement());
+                            null, macroContext.getBodyStart(), 
macroContext.getBodyEnd());
         } catch (Exception exc) {
             throw new SAXParseException(exc.getMessage(), getLocation(), exc);
         } catch (Error err) {

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartForEach.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartForEach.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartForEach.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartForEach.java
 Fri Feb 25 08:16:53 2005
@@ -74,7 +74,7 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         Iterator iter = null;
         int begin, end, step;
@@ -131,7 +131,7 @@
                 status.setLast((i == end || !iter.hasNext()));
             }
             Invoker.execute(consumer, localExpressionContext, executionContext,
-                            macroCall, getNext(), getEndInstruction());
+                            macroContext, getNext(), getEndInstruction());
             // Skip rows
             skipCounter = step;
             while (--skipCounter > 0 && iter.hasNext()) {

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartFormatDate.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartFormatDate.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartFormatDate.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartFormatDate.java
 Fri Feb 25 08:16:53 2005
@@ -69,7 +69,7 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         try {
             String result = format(expressionContext);

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartFormatNumber.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartFormatNumber.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartFormatNumber.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartFormatNumber.java
 Fri Feb 25 08:16:53 2005
@@ -97,7 +97,7 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         try {
             String result = format(expressionContext);

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartIf.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartIf.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartIf.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartIf.java
 Fri Feb 25 08:16:53 2005
@@ -51,7 +51,7 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
 
         Object val;

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartImport.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartImport.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartImport.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartImport.java
 Fri Feb 25 08:16:53 2005
@@ -78,7 +78,7 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         String uri;
         AttributeEvent e = this.uri;
@@ -132,7 +132,7 @@
         }
         try {
             Invoker.execute(consumer, expressionContext, executionContext,
-                            macroCall, doc.getNext(), doc.getEndDocument());
+                            macroContext, doc.getNext(), doc.getEndDocument());
         } catch (Exception exc) {
             throw new SAXParseException(
                                         "Exception occurred in imported 
template " + uri

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartOut.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartOut.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartOut.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartOut.java
 Fri Feb 25 08:16:53 2005
@@ -53,7 +53,7 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         Object val;
         try {

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartParameterInstance.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartParameterInstance.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartParameterInstance.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartParameterInstance.java
 Fri Feb 25 08:16:53 2005
@@ -59,7 +59,7 @@
     }
 
     public StartParameterInstance(AttributeEvent event) {
-        super( (Locator) null );
+        super((Locator) null);
         this.name = event.getLocalName();
         this.value = event;
     }
@@ -70,33 +70,38 @@
 
     public Object getValue(ExpressionContext expressionContext)
             throws SAXException {
-        if (this.value instanceof CopyAttribute) {
+        if (this.value instanceof JXTExpression)
+            return getExpressionValue((JXTExpression) this.value,
+                    expressionContext);
+        else if (this.value instanceof CopyAttribute) {
             CopyAttribute copy = (CopyAttribute) this.value;
             return copy.getValue();
         } else if (this.value instanceof SubstituteAttribute) {
             SubstituteAttribute substEvent = (SubstituteAttribute) this.value;
             if (substEvent.getSubstitutions().size() == 1
-                    && substEvent.getSubstitutions().get(0) instanceof 
JXTExpression) {
-                JXTExpression expr = (JXTExpression) substEvent
-                        .getSubstitutions().get(0);
-                Object val;
-                try {
-                    val = expr.getNode(expressionContext);
-                } catch (Exception e) {
-                    throw new SAXParseException(e.getMessage(), getLocation(),
-                            e);
-                } catch (Error err) {
-                    throw new SAXParseException(err.getMessage(),
-                            getLocation(), new ErrorHolder(err));
-                }
-                return val != null ? val : "";
-            } else {
+                    && substEvent.getSubstitutions().get(0) instanceof 
JXTExpression)
+                return getExpressionValue((JXTExpression) substEvent
+                        .getSubstitutions().get(0), expressionContext);
+            else
                 return substEvent.getSubstitutions().toString(getLocation(),
                         expressionContext);
-            }
+
         } else {
             throw new Error("this shouldn't have happened");
         }
+    }
 
+    private Object getExpressionValue(JXTExpression expr,
+            ExpressionContext expressionContext) throws SAXException {
+        Object val;
+        try {
+            val = expr.getNode(expressionContext);
+        } catch (Exception e) {
+            throw new SAXParseException(e.getMessage(), getLocation(), e);
+        } catch (Error err) {
+            throw new SAXParseException(err.getMessage(), getLocation(),
+                    new ErrorHolder(err));
+        }
+        return val != null ? val : "";
     }
 }

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartSet.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartSet.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartSet.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartSet.java
 Fri Feb 25 08:16:53 2005
@@ -59,7 +59,7 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
 
         Object value = null;
@@ -78,7 +78,7 @@
             NodeList nodeList =
                 Invoker.toDOMNodeList("set", this,
                                       expressionContext, executionContext,
-                                      macroCall);
+                                      macroContext);
             // JXPath doesn't handle NodeList, so convert it to an array
             int len = nodeList.getLength();
             Node[] nodeArr = new Node[len];

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartTemplate.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartTemplate.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartTemplate.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/instruction/StartTemplate.java
 Fri Feb 25 08:16:53 2005
@@ -33,7 +33,7 @@
 
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext, ExecutionContext 
executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         // EMPTY
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Invoker.java
 Fri Feb 25 08:16:53 2005
@@ -19,6 +19,7 @@
 import org.apache.cocoon.template.jxtg.JXTemplateGenerator;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
 import org.apache.cocoon.template.jxtg.environment.LocatorFacade;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.template.jxtg.instruction.StartCall;
 import org.apache.cocoon.template.jxtg.instruction.StartDefine;
 import org.apache.cocoon.template.jxtg.script.event.Event;
@@ -33,9 +34,7 @@
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.Attributes;
-import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
 import org.xml.sax.helpers.AttributesImpl;
 
 public class Invoker {
@@ -43,7 +42,7 @@
 
     public static void execute(final XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
 
         Event ev = startEvent;
@@ -59,16 +58,16 @@
                         .getDefinitions().get(startElement.getQname());
                 if (def == null) {
                     ev = ev.execute(consumer, expressionContext,
-                            executionContext, macroCall, startEvent, endEvent);
+                            executionContext, macroContext, startEvent, 
endEvent);
                     continue;
                 }
 
                 StartCall call = new StartCall( def, startElement );
                 ev = call.execute(consumer, expressionContext,
-                        executionContext, macroCall, startEvent, endEvent);
+                        executionContext, macroContext, startEvent, endEvent);
             } else
                 ev = ev.execute(consumer, expressionContext, executionContext,
-                        macroCall, startEvent, endEvent);
+                        macroContext, startEvent, endEvent);
         }
     }
 
@@ -110,28 +109,15 @@
         streamer.stream(node);
     }
 
-    public static void call(Locator location, StartElement macroCall,
-            final XMLConsumer consumer, ExpressionContext expressionContext,
-            ExecutionContext executionContext, Event startEvent, Event 
endEvent)
-            throws SAXException {
-        try {
-            execute(consumer, expressionContext, executionContext, macroCall,
-                    startEvent, endEvent);
-        } catch (SAXParseException exc) {
-            throw new SAXParseException(macroCall.getLocalName() + ": "
-                    + exc.getMessage(), location, exc);
-        }
-    }
-
     public static NodeList toDOMNodeList(String elementName,
             StartInstruction si, ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall)
+            ExecutionContext executionContext, MacroContext macroContext)
             throws SAXException {
         DOMBuilder builder = new DOMBuilder();
         builder.startDocument();
         builder.startElement(JXTemplateGenerator.NS, elementName, elementName,
                 EMPTY_ATTRS);
-        execute(builder, expressionContext, executionContext, macroCall, si
+        execute(builder, expressionContext, executionContext, macroContext, si
                 .getNext(), si.getEndInstruction());
         builder.endElement(JXTemplateGenerator.NS, elementName, elementName);
         builder.endDocument();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java
 Fri Feb 25 08:16:53 2005
@@ -68,6 +68,8 @@
                     .getName());
             registerInstruction("formatDate", StartFormatDate.class.getName());
             registerInstruction("comment", StartComment.class.getName());
+            registerInstruction("call", StartCall.class.getName());
+            registerInstruction("withParam", 
StartParameterInstance.class.getName());
         } catch (Exception e) {
             // we'll do something more professional with that when the 
configuration moves
             // to the sitemap

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Characters.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Characters.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Characters.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Characters.java
 Fri Feb 25 08:16:53 2005
@@ -23,6 +23,7 @@
 import org.apache.cocoon.template.jxtg.expression.JXTExpression;
 import org.apache.cocoon.template.jxtg.expression.Literal;
 import org.apache.cocoon.template.jxtg.expression.Subst;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.template.jxtg.script.Invoker;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
@@ -37,7 +38,7 @@
 
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         Iterator iter = getSubstitutions().iterator();
         while (iter.hasNext()) {

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndCDATA.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndCDATA.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndCDATA.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndCDATA.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -28,7 +29,7 @@
     
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.endCDATA();
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndDTD.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndDTD.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndDTD.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndDTD.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -29,7 +30,7 @@
     
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.endDTD();
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndDocument.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndDocument.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndDocument.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndDocument.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -28,7 +29,7 @@
     
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.endDocument();
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndElement.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndElement.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndElement.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndElement.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -35,7 +36,7 @@
 
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.endElement(startElement.getNamespaceURI(), startElement
                 .getLocalName(), startElement.getRaw());

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndEntity.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndEntity.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndEntity.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndEntity.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -36,7 +37,7 @@
     
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.endEntity( getName() );
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndPrefixMapping.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndPrefixMapping.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndPrefixMapping.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/EndPrefixMapping.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -35,7 +36,7 @@
 
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.endPrefixMapping(getPrefix());
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/Event.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -61,7 +62,7 @@
     public Event execute(final XMLConsumer consumer,
                          ExpressionContext expressionContext,
                          ExecutionContext executionContext,
-                         StartElement macroCall, Event startEvent, Event 
endEvent) 
+                         MacroContext macroContext, Event startEvent, Event 
endEvent) 
         throws SAXException {
         return getNext();
     }

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/IgnorableWhitespace.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/IgnorableWhitespace.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/IgnorableWhitespace.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/IgnorableWhitespace.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -29,7 +30,7 @@
 
     public Event execute(final XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
             characters(expressionContext, executionContext, this,
                 new CharHandler() {

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/ProcessingInstruction.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/ProcessingInstruction.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/ProcessingInstruction.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/ProcessingInstruction.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -42,7 +43,7 @@
     
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.processingInstruction(getTarget(), getData());
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/SkippedEntity.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/SkippedEntity.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/SkippedEntity.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/SkippedEntity.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -35,7 +36,7 @@
 
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.skippedEntity(getName());
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartCDATA.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartCDATA.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartCDATA.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartCDATA.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -28,7 +29,7 @@
     
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.startCDATA();
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDTD.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDTD.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDTD.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDTD.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -48,7 +49,7 @@
 
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.startDTD(getName(), getPublicId(), getSystemId());
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDocument.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDocument.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDocument.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDocument.java
 Fri Feb 25 08:16:53 2005
@@ -20,6 +20,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.apache.excalibur.source.SourceValidity;
 import org.xml.sax.Locator;
@@ -81,7 +82,7 @@
 
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         if (getEndDocument() != null)
             consumer.startDocument();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartElement.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartElement.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartElement.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartElement.java
 Fri Feb 25 08:16:53 2005
@@ -22,6 +22,7 @@
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
 import org.apache.cocoon.template.jxtg.expression.Substitutions;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
@@ -96,7 +97,7 @@
 
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         Iterator i = getAttributeEvents().iterator();
         AttributesImpl attrs = new AttributesImpl();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEntity.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEntity.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEntity.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEntity.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -35,7 +36,7 @@
 
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.startEntity(getName());
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartInstruction.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartInstruction.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartInstruction.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartInstruction.java
 Fri Feb 25 08:16:53 2005
@@ -29,7 +29,7 @@
         this.startElement = startElement;
     }
 
-    private final StartElement startElement;
+    protected final StartElement startElement;
     private EndInstruction endInstruction;
 
     public EndInstruction getEndInstruction() {
@@ -42,5 +42,9 @@
 
     public void endNotify() throws SAXException {
         return;
+    }
+
+    public StartElement getStartElement() {
+        return startElement;
     }
 }

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartPrefixMapping.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartPrefixMapping.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartPrefixMapping.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartPrefixMapping.java
 Fri Feb 25 08:16:53 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.template.jxtg.environment.ExecutionContext;
+import org.apache.cocoon.template.jxtg.instruction.MacroContext;
 import org.apache.cocoon.xml.XMLConsumer;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -41,7 +42,7 @@
 
     public Event execute(XMLConsumer consumer,
             ExpressionContext expressionContext,
-            ExecutionContext executionContext, StartElement macroCall,
+            ExecutionContext executionContext, MacroContext macroContext,
             Event startEvent, Event endEvent) throws SAXException {
         consumer.startPrefixMapping(getPrefix(), getUri());
         return getNext();

Modified: 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/JXTemplateGeneratorTestCase.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/JXTemplateGeneratorTestCase.java?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/JXTemplateGeneratorTestCase.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/JXTemplateGeneratorTestCase.java
 Fri Feb 25 08:16:53 2005
@@ -23,6 +23,8 @@
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.cocoon.SitemapComponentTestCase;
 import org.apache.cocoon.components.flow.FlowHelper;
+import org.apache.cocoon.xml.XMLUtils;
+import org.w3c.dom.Document;
 
 public class JXTemplateGeneratorTestCase extends SitemapComponentTestCase {
     private Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_WARN);
@@ -106,15 +108,19 @@
         String inputURI = docBase + "jxMacro.xml";
         String outputURI = docBase + "jxMacro-output.xml";
 
-        assertEqual(load(outputURI), generate(JX, inputURI, EMPTY_PARAMS));
+        Document expected = load(outputURI);
+        getLogger().error( XMLUtils.serializeNode( expected ) );
+        Document actual = generate(JX, inputURI, EMPTY_PARAMS);
+        getLogger().error( XMLUtils.serializeNode( actual ) );
+        assertEqual( expected, actual );
     }
 
-    public void testJXDynamicMacro() throws Exception {
-        String inputURI = docBase + "jxDynamicMacro.xml";
-        String outputURI = docBase + "jxDynamicMacro-output.xml";
-
-        assertEqual(load(outputURI), generate(JX, inputURI, EMPTY_PARAMS));
-    }
+//    public void testJXDynamicMacro() throws Exception {
+//        String inputURI = docBase + "jxDynamicMacro.xml";
+//        String outputURI = docBase + "jxDynamicMacro-output.xml";
+//
+//        assertEqual(load(outputURI), generate(JX, inputURI, EMPTY_PARAMS));
+//    }
 
     public void testJXSet() throws Exception {
         String inputURI = docBase + "jxSet.xml";

Modified: 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/jxMacro-output.xml
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/jxMacro-output.xml?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/jxMacro-output.xml
 (original)
+++ 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/jxMacro-output.xml
 Fri Feb 25 08:16:53 2005
@@ -1,9 +1,13 @@
 <?xml version="1.0"?>
-
 <root>
-  <m>
-    <macroTest a="foo">
-      <content b="3"/>
-    </macroTest>
-  </m>
+       <m>
+               <macroTest a="foo">
+                       <content b="3"/>
+               </macroTest>
+       </m>
+       <n>
+               <macroTest a="bar">
+                       <content b="5"/>
+               </macroTest>
+       </n>
 </root>

Modified: 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/jxMacro.xml
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/jxMacro.xml?view=diff&r1=155339&r2=155340
==============================================================================
--- 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/jxMacro.xml
 (original)
+++ 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/jxMacro.xml
 Fri Feb 25 08:16:53 2005
@@ -1,15 +1,21 @@
 <?xml version="1.0"?>
-
 <root xmlns:jx="http://apache.org/cocoon/templates/jx/1.0";>
-  <jx:macro name="d">
-    <jx:parameter name="p"/>
-    <macroTest a="${p}">
-      <jx:evalBody/>
-    </macroTest>
-  </jx:macro>
-  <m>
-    <d p="foo">
-      <content b="${1+2}"/>
-    </d>
-  </m>
+       <jx:macro name="d">
+               <jx:parameter name="p"/>
+               <macroTest a="${p}">
+                       <jx:evalBody/>
+               </macroTest>
+       </jx:macro>
+       <m>
+               <d p="foo">
+                       <content b="${1+2}"/>
+               </d>
+       </m>
+       <n>
+               <jx:set var="macroName" value="d"/>
+               <jx:call macro="${macroName}">
+                       <jx:withParam name="p" value="bar"/>
+                       <content b="${2+3}"/>
+               </jx:call>
+       </n>
 </root>


Reply via email to