Author: lgawron Date: Wed Feb 23 06:41:48 2005 New Revision: 155016 URL: http://svn.apache.org/viewcvs?view=rev&rev=155016 Log: breaking down o.a.c.template.jxtg.script.Invoker
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/Substitutions.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/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/StartSet.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/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/java/org/apache/cocoon/template/jxtg/script/event/TextEvent.java Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java?view=diff&r1=155015&r2=155016 ============================================================================== --- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java (original) +++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/environment/FlowObjectModelHelper.java Wed Feb 23 06:41:48 2005 @@ -20,7 +20,6 @@ import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.components.expression.ExpressionContext; import org.apache.cocoon.components.flow.FlowHelper; -import org.apache.cocoon.environment.TemplateObjectModelHelper; /** Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/Substitutions.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/Substitutions.java?view=diff&r1=155015&r2=155016 ============================================================================== --- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/Substitutions.java (original) +++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/expression/Substitutions.java Wed Feb 23 06:41:48 2005 @@ -29,8 +29,6 @@ import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; -import org.apache.cocoon.template.jxtg.environment.ErrorHolder; - public class Substitutions { final private List substitutions; 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -24,8 +24,8 @@ import org.apache.cocoon.components.expression.ExpressionContext; import org.apache.cocoon.template.jxtg.environment.ErrorHolder; -import org.apache.cocoon.template.jxtg.environment.ValueHelper; import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.template.jxtg.environment.ValueHelper; import org.apache.cocoon.template.jxtg.expression.JXTExpression; import org.apache.cocoon.template.jxtg.script.event.Event; import org.apache.cocoon.template.jxtg.script.event.StartElement; 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -26,14 +26,14 @@ 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.script.Invoker; import org.apache.cocoon.template.jxtg.script.event.AttributeEvent; import org.apache.cocoon.template.jxtg.script.event.CopyAttribute; import org.apache.cocoon.template.jxtg.script.event.Event; -import org.apache.cocoon.template.jxtg.script.event.StartElement; import org.apache.cocoon.template.jxtg.script.event.StartDocument; +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.SubstituteAttribute; -import org.apache.cocoon.template.jxtg.script.Invoker; import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Attributes; import org.xml.sax.Locator; 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -20,10 +20,10 @@ import org.apache.cocoon.components.expression.ExpressionContext; 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.Event; 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.Invoker; import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Attributes; import org.xml.sax.Locator; 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -20,10 +20,10 @@ import org.apache.cocoon.components.expression.ExpressionContext; 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.Event; 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.Invoker; import org.apache.cocoon.xml.XMLConsumer; import org.w3c.dom.Node; import org.w3c.dom.NodeList; 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -25,11 +25,14 @@ import org.apache.cocoon.template.jxtg.environment.ExecutionContext; import org.apache.cocoon.template.jxtg.environment.LocatorFacade; 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.StartDefine; import org.apache.cocoon.template.jxtg.instruction.StartParameter; -import org.apache.cocoon.template.jxtg.script.event.*; +import org.apache.cocoon.template.jxtg.script.event.AttributeEvent; +import org.apache.cocoon.template.jxtg.script.event.CopyAttribute; +import org.apache.cocoon.template.jxtg.script.event.Event; +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.SubstituteAttribute; import org.apache.cocoon.xml.IncludeXMLConsumer; import org.apache.cocoon.xml.XMLConsumer; import org.apache.cocoon.xml.dom.DOMBuilder; @@ -48,11 +51,9 @@ private static final Attributes EMPTY_ATTRS = new AttributesImpl(); public static void execute(final XMLConsumer consumer, - ExpressionContext expressionContext, - ExecutionContext executionContext, - StartElement macroCall, - Event startEvent, Event endEvent) - throws SAXException { + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + Event startEvent, Event endEvent) throws SAXException { Event ev = startEvent; LocatorFacade loc = new LocatorFacade(ev.getLocation()); @@ -61,217 +62,84 @@ loc.setDocumentLocator(ev.getLocation()); // ContentHandler methods - if (ev instanceof Characters) { - TextEvent text = (TextEvent) ev; - Iterator iter = text.getSubstitutions().iterator(); - while (iter.hasNext()) { - Subst subst = (Subst)iter.next(); - char[] chars; - if (subst instanceof Literal) { - chars = ((Literal)subst).getCharArray(); - consumer.characters(chars, 0, chars.length); - } else { - JXTExpression expr = (JXTExpression) subst; - try { - Object val = expr.getNode(expressionContext); - executeNode(consumer, val); - } catch (Exception e) { - throw new SAXParseException(e.getMessage(), - ev.getLocation(), e); - } catch (Error err) { - throw new SAXParseException(err.getMessage(), - ev.getLocation(), - new ErrorHolder(err)); - } - } - } - } else if (ev instanceof EndDocument) { - consumer.endDocument(); - } else if (ev instanceof EndElement) { - EndElement endElement = (EndElement) ev; - StartElement startElement = endElement.getStartElement(); - consumer.endElement(startElement.getNamespaceURI(), - startElement.getLocalName(), startElement.getRaw()); - } else if (ev instanceof EndPrefixMapping) { - EndPrefixMapping endPrefixMapping = (EndPrefixMapping) ev; - consumer.endPrefixMapping(endPrefixMapping.getPrefix()); - } else if (ev instanceof IgnorableWhitespace) { - TextEvent text = (TextEvent) ev; - characters(expressionContext, executionContext, text, - new CharHandler() { - public void characters(char[] ch, int offset, int len) - throws SAXException { - consumer.ignorableWhitespace(ch, offset, len); - } - }); - } else if (ev instanceof ProcessingInstruction) { - ProcessingInstruction pi = (ProcessingInstruction) ev; - consumer.processingInstruction(pi.getTarget(), pi.getData()); - } else if (ev instanceof SkippedEntity) { - SkippedEntity skippedEntity = (SkippedEntity) ev; - consumer.skippedEntity(skippedEntity.getName()); - } else if (ev instanceof StartDocument) { - if (((StartDocument) ev).getEndDocument() != null) { - // if this isn't a document fragment - consumer.startDocument(); - } - } else if (ev instanceof StartElement) { + if (ev instanceof StartElement) { StartElement startElement = (StartElement) ev; StartDefine def = (StartDefine) executionContext .getDefinitions().get(startElement.getQname()); - if (def != null) { - Map attributeMap = new HashMap(); - Iterator i = startElement.getAttributeEvents().iterator(); - while (i.hasNext()) { - String attributeName; - Object attributeValue; - AttributeEvent attrEvent = (AttributeEvent) i.next(); - attributeName = attrEvent.getLocalName(); - if (attrEvent instanceof CopyAttribute) { - CopyAttribute copy = (CopyAttribute) attrEvent; - attributeValue = copy.getValue(); - } else if (attrEvent instanceof SubstituteAttribute) { - SubstituteAttribute substEvent = (SubstituteAttribute) attrEvent; - 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(), - ev.getLocation(), e); - } catch (Error err) { - throw new SAXParseException(err.getMessage(), - ev.getLocation(), - new ErrorHolder(err)); - } - attributeValue = val != null ? val : ""; - } else { - attributeValue = - substEvent.getSubstitutions().toString(ev.getLocation(), - expressionContext); - } - } else { - throw new Error("this shouldn't have happened"); - } - attributeMap.put(attributeName, attributeValue); - } - ExpressionContext localExpressionContext = - new ExpressionContext(expressionContext); - HashMap macro = new HashMap(); - macro.put("body", startElement); - macro.put("arguments", attributeMap); - localExpressionContext.put("macro", macro); - Iterator iter = def.getParameters().entrySet().iterator(); - while (iter.hasNext()) { - Map.Entry e = (Map.Entry) iter.next(); - String key = (String) e.getKey(); - StartParameter startParam = - (StartParameter) e.getValue(); - Object default_ = startParam.getDefaultValue(); - Object val = attributeMap.get(key); - if (val == null) { - val = default_; - } - localExpressionContext.put(key, val); - } - call(ev.getLocation(), startElement, consumer, - localExpressionContext, executionContext, - def.getBody(), def.getEndInstruction()); - ev = startElement.getEndElement().getNext(); + if (def == null) { + ev = ev.execute(consumer, expressionContext, + executionContext, macroCall, startEvent, endEvent); continue; } + + // this is a macro call + Map attributeMap = new HashMap(); Iterator i = startElement.getAttributeEvents().iterator(); - AttributesImpl attrs = new AttributesImpl(); while (i.hasNext()) { + String attributeName; + Object attributeValue; AttributeEvent attrEvent = (AttributeEvent) i.next(); + attributeName = attrEvent.getLocalName(); if (attrEvent instanceof CopyAttribute) { CopyAttribute copy = (CopyAttribute) attrEvent; - attrs.addAttribute(copy.getNamespaceURI(), - copy.getLocalName(), copy.getRaw(), - copy.getType(), copy.getValue()); + attributeValue = copy.getValue(); } else if (attrEvent instanceof SubstituteAttribute) { SubstituteAttribute substEvent = (SubstituteAttribute) attrEvent; - String attributeValue = - substEvent.getSubstitutions().toString(ev.getLocation(), - expressionContext); - attrs.addAttribute(attrEvent.getNamespaceURI(), - attrEvent.getLocalName(), attrEvent.getRaw(), - attrEvent.getType(), attributeValue); + 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(), ev + .getLocation(), e); + } catch (Error err) { + throw new SAXParseException(err.getMessage(), + ev.getLocation(), new ErrorHolder(err)); + } + attributeValue = val != null ? val : ""; + } else { + attributeValue = substEvent.getSubstitutions() + .toString(ev.getLocation(), + expressionContext); + } + } else { + throw new Error("this shouldn't have happened"); } + attributeMap.put(attributeName, attributeValue); } - consumer.startElement(startElement.getNamespaceURI(), - startElement.getLocalName(), startElement.getRaw(), - attrs); - } else if (ev instanceof StartPrefixMapping) { - StartPrefixMapping startPrefixMapping = (StartPrefixMapping) ev; - consumer.startPrefixMapping(startPrefixMapping.getPrefix(), - startPrefixMapping.getUri()); - - // LexicalHandler methods - } else if (ev instanceof EndCDATA) { - consumer.endCDATA(); - } else if (ev instanceof EndDTD) { - consumer.endDTD(); - } else if (ev instanceof EndEntity) { - consumer.endEntity(((EndEntity) ev).getName()); - } else if (ev instanceof StartCDATA) { - consumer.startCDATA(); - } else if (ev instanceof StartDTD) { - StartDTD startDTD = (StartDTD) ev; - consumer.startDTD(startDTD.getName(), startDTD.getPublicId(), - startDTD.getSystemId()); - } else if (ev instanceof StartEntity) { - consumer.startEntity(((StartEntity) ev).getName()); - - // Instructions - } else if (ev instanceof StartInstruction) { - ev = ((StartInstruction)ev).execute(consumer, - expressionContext, executionContext, - macroCall, startEvent, endEvent); - continue; - } - ev = ev.getNext(); - } - } - - interface CharHandler { - public void characters(char[] ch, int offset, int length) - throws SAXException; - } - - private static void characters(ExpressionContext expressionContext, - ExecutionContext executionContext, - TextEvent event, CharHandler handler) - throws SAXException { - Iterator iter = event.getSubstitutions().iterator(); - while (iter.hasNext()) { - Object subst = iter.next(); - char[] chars; - if (subst instanceof Literal) { - chars = ((Literal) subst).getCharArray(); - } else { - JXTExpression expr = (JXTExpression) subst; - try { - Object val = expr.getValue(expressionContext); - chars = val != null ? val.toString().toCharArray() - : ArrayUtils.EMPTY_CHAR_ARRAY; - } catch (Exception e) { - throw new SAXParseException(e.getMessage(), event - .getLocation(), e); - } catch (Error err) { - throw new SAXParseException(err.getMessage(), event - .getLocation(), new ErrorHolder(err)); + ExpressionContext localExpressionContext = new ExpressionContext( + expressionContext); + HashMap macro = new HashMap(); + macro.put("body", startElement); + macro.put("arguments", attributeMap); + localExpressionContext.put("macro", macro); + Iterator iter = def.getParameters().entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry e = (Map.Entry) iter.next(); + String key = (String) e.getKey(); + StartParameter startParam = (StartParameter) e.getValue(); + Object default_ = startParam.getDefaultValue(); + Object val = attributeMap.get(key); + if (val == null) { + val = default_; + } + localExpressionContext.put(key, val); } - } - handler.characters(chars, 0, chars.length); + call(ev.getLocation(), startElement, consumer, + localExpressionContext, executionContext, + def.getBody(), def.getEndInstruction()); + ev = startElement.getEndElement().getNext(); + } else + ev = ev.execute(consumer, expressionContext, executionContext, + macroCall, startEvent, endEvent); } } public static void executeNode(final XMLConsumer consumer, Object val) - throws SAXException { + throws SAXException { if (val instanceof Node) { executeDOM(consumer, (Node) val); @@ -292,16 +160,14 @@ } else if (val instanceof XMLizable) { ((XMLizable) val).toSAX(new IncludeXMLConsumer(consumer)); } else { - char[] ch = - val == null ? ArrayUtils.EMPTY_CHAR_ARRAY - : val.toString().toCharArray(); + char[] ch = val == null ? ArrayUtils.EMPTY_CHAR_ARRAY : val + .toString().toCharArray(); consumer.characters(ch, 0, ch.length); } } /** - * dump a DOM document, using an IncludeXMLConsumer to filter out start/end - * document events + * dump a DOM document, using an IncludeXMLConsumer to filter out start/end document events */ public static void executeDOM(final XMLConsumer consumer, Node node) throws SAXException { @@ -311,32 +177,28 @@ } private static void call(Locator location, StartElement macroCall, - final XMLConsumer consumer, - ExpressionContext expressionContext, - ExecutionContext executionContext, - Event startEvent, Event endEvent) - throws SAXException { + final XMLConsumer consumer, ExpressionContext expressionContext, + ExecutionContext executionContext, Event startEvent, Event endEvent) + throws SAXException { try { - execute(consumer, expressionContext, executionContext, - macroCall, startEvent, endEvent); + execute(consumer, expressionContext, executionContext, macroCall, + startEvent, endEvent); } catch (SAXParseException exc) { throw new SAXParseException(macroCall.getLocalName() + ": " - + exc.getMessage(), location, exc); + + exc.getMessage(), location, exc); } } public static NodeList toDOMNodeList(String elementName, - StartInstruction si, - ExpressionContext expressionContext, - ExecutionContext executionContext, - StartElement macroCall) + StartInstruction si, ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall) throws SAXException { DOMBuilder builder = new DOMBuilder(); builder.startDocument(); builder.startElement(JXTemplateGenerator.NS, elementName, elementName, - EMPTY_ATTRS); - execute(builder, expressionContext, executionContext, - macroCall, si.getNext(), si.getEndInstruction()); + EMPTY_ATTRS); + execute(builder, expressionContext, executionContext, macroCall, si + .getNext(), si.getEndInstruction()); builder.endElement(JXTemplateGenerator.NS, elementName, elementName); builder.endDocument(); Node node = builder.getDocument().getDocumentElement(); 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,12 +15,49 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import java.util.Iterator; + +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.expression.Literal; +import org.apache.cocoon.template.jxtg.expression.Subst; +import org.apache.cocoon.template.jxtg.script.Invoker; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; public class Characters extends TextEvent { public Characters(Locator location, char[] chars, int start, int length) throws SAXException { super(location, chars, start, length); + } + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + Event startEvent, Event endEvent) throws SAXException { + Iterator iter = getSubstitutions().iterator(); + while (iter.hasNext()) { + Subst subst = (Subst) iter.next(); + char[] chars; + if (subst instanceof Literal) { + chars = ((Literal) subst).getCharArray(); + consumer.characters(chars, 0, chars.length); + } else { + JXTExpression expr = (JXTExpression) subst; + try { + Object val = expr.getNode(expressionContext); + Invoker.executeNode(consumer, val); + } catch (Exception e) { + throw new SAXParseException(e.getMessage(), getLocation(), e); + } catch (Error err) { + throw new SAXParseException(err.getMessage(), getLocation(), new ErrorHolder(err)); + } + } + } + return getNext(); } } 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,10 +15,22 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class EndCDATA extends Event { public EndCDATA(Locator location) { super(location); + } + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,10 +15,23 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class EndDTD extends Event { public EndDTD(Locator location) { super(location); + } + + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,10 +15,22 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class EndDocument extends Event { public EndDocument(Locator location) { super(location); + } + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,7 +15,11 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class EndElement extends Event { public EndElement(Locator location, StartElement startElement) { @@ -27,5 +31,14 @@ public StartElement getStartElement() { return startElement; + } + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + Event startEvent, Event endEvent) throws SAXException { + consumer.endElement(startElement.getNamespaceURI(), startElement + .getLocalName(), startElement.getRaw()); + return getNext(); } } 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,7 +15,11 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class EndEntity extends Event { public EndEntity(Locator location, String name) { @@ -28,4 +32,13 @@ } private final String name; + + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,7 +15,11 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class EndPrefixMapping extends Event { public EndPrefixMapping(Locator location, String prefix) { @@ -27,5 +31,13 @@ public String getPrefix() { return prefix; + } + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -57,4 +57,12 @@ } return buf.toString(); } + + public Event execute(final XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, + StartElement macroCall, 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,6 +15,9 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; import org.xml.sax.SAXException; @@ -22,5 +25,19 @@ public IgnorableWhitespace(Locator location, char[] chars, int start, int length) throws SAXException { super(location, chars, start, length); + } + + public Event execute(final XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + Event startEvent, Event endEvent) throws SAXException { + characters(expressionContext, executionContext, this, + new CharHandler() { + public void characters(char[] ch, int offset, int len) + throws SAXException { + consumer.ignorableWhitespace(ch, offset, len); + } + }); + return getNext(); } } 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,7 +15,11 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class ProcessingInstruction extends Event { public ProcessingInstruction(Locator location, String target, String data) { @@ -34,4 +38,13 @@ private final String target; private final String data; + + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,7 +15,11 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class SkippedEntity extends Event { public SkippedEntity(Locator location, String name) { @@ -27,5 +31,13 @@ public String getName() { return name; + } + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,10 +15,22 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class StartCDATA extends Event { public StartCDATA(Locator location) { super(location); + } + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,7 +15,11 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class StartDTD extends Event { public StartDTD(Locator location, String name, String publicId, @@ -41,4 +45,12 @@ private final String name; private final String publicId; private final String systemId; + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -18,8 +18,12 @@ import java.util.HashMap; import java.util.Map; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.apache.excalibur.source.SourceValidity; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class StartDocument extends Event { public StartDocument(Locator location) { @@ -73,5 +77,14 @@ */ public Object getTemplateProperty(String name) { return getTemplateProperties().get(name); + } + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + Event startEvent, Event endEvent) throws SAXException { + if (getEndDocument() != null) + consumer.startDocument(); + return getNext(); } } 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,10 +15,14 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; +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.xml.XMLConsumer; import org.xml.sax.Attributes; import org.xml.sax.Locator; import org.xml.sax.SAXException; @@ -39,12 +43,15 @@ String qname = attrs.getQName(i); String type = attrs.getType(i); String value = attrs.getValue(i); - Substitutions substitutions = new Substitutions(getLocation(), value); + Substitutions substitutions = new Substitutions(getLocation(), + value); if (substitutions.hasSubstitutions()) { - getAttributeEvents().add(new SubstituteAttribute(uri, local, qname, type, - substitutions)); + getAttributeEvents().add( + new SubstituteAttribute(uri, local, qname, type, + substitutions)); } else { - getAttributeEvents().add(new CopyAttribute(uri, local, qname, type, value)); + getAttributeEvents().add( + new CopyAttribute(uri, local, qname, type, value)); } } this.attributes = new AttributesImpl(attrs); @@ -85,5 +92,31 @@ public void setEndElement(EndElement endElement) { this.endElement = endElement; + } + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + Event startEvent, Event endEvent) throws SAXException { + Iterator i = getAttributeEvents().iterator(); + AttributesImpl attrs = new AttributesImpl(); + while (i.hasNext()) { + AttributeEvent attrEvent = (AttributeEvent) i.next(); + if (attrEvent instanceof CopyAttribute) { + CopyAttribute copy = (CopyAttribute) attrEvent; + attrs.addAttribute(copy.getNamespaceURI(), copy.getLocalName(), + copy.getRaw(), copy.getType(), copy.getValue()); + } else if (attrEvent instanceof SubstituteAttribute) { + SubstituteAttribute substEvent = (SubstituteAttribute) attrEvent; + String attributeValue = substEvent.getSubstitutions().toString( + getLocation(), expressionContext); + attrs.addAttribute(attrEvent.getNamespaceURI(), attrEvent + .getLocalName(), attrEvent.getRaw(), attrEvent + .getType(), attributeValue); + } + } + consumer.startElement(getNamespaceURI(), getLocalName(), getRaw(), + attrs); + return getNext(); } } 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,7 +15,11 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class StartEntity extends Event { public StartEntity(Locator location, String name) { @@ -28,4 +32,12 @@ } private final String name; + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,10 +15,6 @@ */ package org.apache.cocoon.template.jxtg.script.event; -import org.apache.cocoon.components.expression.ExpressionContext; -import org.apache.cocoon.template.jxtg.environment.ExecutionContext; -import org.apache.cocoon.xml.XMLConsumer; -import org.xml.sax.SAXException; public abstract class StartInstruction extends Event { @@ -36,13 +32,5 @@ public void setEndInstruction(EndInstruction endInstruction) { this.endInstruction = endInstruction; - } - - public Event execute(final XMLConsumer consumer, - ExpressionContext expressionContext, - ExecutionContext executionContext, - StartElement macroCall, Event startEvent, Event endEvent) - throws SAXException { - return getNext(); } } 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=155015&r2=155016 ============================================================================== --- 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 Wed Feb 23 06:41:48 2005 @@ -15,7 +15,11 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import org.apache.cocoon.components.expression.ExpressionContext; +import org.apache.cocoon.template.jxtg.environment.ExecutionContext; +import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Locator; +import org.xml.sax.SAXException; public class StartPrefixMapping extends Event { public StartPrefixMapping(Locator location, String prefix, String uri) { @@ -34,4 +38,12 @@ private final String prefix; private final String uri; + + public Event execute(XMLConsumer consumer, + ExpressionContext expressionContext, + ExecutionContext executionContext, StartElement macroCall, + Event startEvent, Event endEvent) throws SAXException { + consumer.startPrefixMapping(getPrefix(), getUri()); + return getNext(); + } } Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/TextEvent.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/TextEvent.java?view=diff&r1=155015&r2=155016 ============================================================================== --- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/TextEvent.java (original) +++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/TextEvent.java Wed Feb 23 06:41:48 2005 @@ -15,9 +15,18 @@ */ package org.apache.cocoon.template.jxtg.script.event; +import java.util.Iterator; + +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.expression.Literal; import org.apache.cocoon.template.jxtg.expression.Substitutions; +import org.apache.commons.lang.ArrayUtils; import org.xml.sax.Locator; import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; public class TextEvent extends Event { public TextEvent(Locator location, char[] chars, int start, int length) @@ -38,4 +47,39 @@ public Substitutions getSubstitutions() { return substitutions; } + + interface CharHandler { + public void characters(char[] ch, int offset, int length) + throws SAXException; + } + + protected static void characters(ExpressionContext expressionContext, + ExecutionContext executionContext, + TextEvent event, CharHandler handler) + throws SAXException { + Iterator iter = event.getSubstitutions().iterator(); + while (iter.hasNext()) { + Object subst = iter.next(); + char[] chars; + if (subst instanceof Literal) { + chars = ((Literal) subst).getCharArray(); + } else { + JXTExpression expr = (JXTExpression) subst; + try { + Object val = expr.getValue(expressionContext); + chars = val != null ? val.toString().toCharArray() + : ArrayUtils.EMPTY_CHAR_ARRAY; + } catch (Exception e) { + throw new SAXParseException(e.getMessage(), event + .getLocation(), e); + } catch (Error err) { + throw new SAXParseException(err.getMessage(), event + .getLocation(), new ErrorHolder(err)); + } + } + handler.characters(chars, 0, chars.length); + } + } + + }