package com.nwalsh.saxon; import java.util.Stack; import java.util.StringTokenizer; import org.xml.sax.*; import org.w3c.dom.*; import javax.xml.transform.TransformerException; import com.icl.saxon.Context; import com.icl.saxon.expr.*; import com.icl.saxon.expr.FragmentValue; import com.icl.saxon.Controller; import com.icl.saxon.functions.Extensions; import com.icl.saxon.om.*; import com.icl.saxon.output.*; import com.icl.saxon.pattern.*; import com.icl.saxon.tree.*; /** * <p>A Saxon 6.0 Emitter that clones its input.</p> * * <p>$Id: CopyEmitter.java,v 1.1 2001/07/16 21:23:57 nwalsh Exp $</p> * * <p>Copyright (C) 2000 Norman Walsh.</p> * * <p>This class provides a * <a href="http://users.iclway.co.uk/mhkay/saxon/">Saxon 6.*</a> * implementation of an emitter that manufactures a cloned result * tree fragment.</p> * * <p>The purpose of this emitter is to provide something for * CalloutEmitter and NumberLinesEmitter to extend. * This emitter simply copies all input to a new result tree fragment.</p> * * <p><b>Change Log:</b></p> * <dl> * <dt>1.0</dt> * <dd><p>Initial release.</p></dd> * </dl> * * @see CalloutEmitter * @see NumberLinesEmitter * * @author Norman Walsh * <a href="mailto:ndw@nwalsh.com">ndw@nwalsh.com</a> * * @version $Id: CopyEmitter.java,v 1.1 2001/07/16 21:23:57 nwalsh Exp $ * */ public class CopyEmitter extends com.icl.saxon.output.Emitter { /** The result tree fragment containing the copied fragment. */ protected FragmentValue rtf = null; protected Emitter rtfEmitter = null; /** <p>The namePool.</p> * * <p>Copied from the caller, it should be the runtime name pool.</p> */ protected NamePool namePool = null; /** <p>Constructor for the CopyEmitter.</p> * * @param namePool The name pool to use for constructing elements and attributes. */ public CopyEmitter(Controller controller, NamePool namePool) { rtf = new FragmentValue(controller); rtfEmitter = rtf.getEmitter(); this.namePool = namePool; } /** * <p>Return the result tree fragment constructed by replaying events * through this emitter.</p> */ public FragmentValue getResultTreeFragment() { return rtf; } /** Copy characters. */ public void characters(char[] chars, int start, int len) throws TransformerException { rtfEmitter.characters(chars, start, len); } /** Copy comments. */ public void comment(char[] chars, int start, int length) throws TransformerException { rtfEmitter.comment(chars, start, length); } /** Copy end document events. */ public void endDocument() throws TransformerException { rtfEmitter.endDocument(); } /** Copy end element events. */ public void endElement(int nameCode) throws TransformerException { rtfEmitter.endElement(nameCode); } /** Copy processing instructions. */ public void processingInstruction(java.lang.String name, java.lang.String data) throws TransformerException { rtfEmitter.processingInstruction(name, data); } /** Copy set document locator events. */ public void setDocumentLocator(org.xml.sax.Locator locator) { rtfEmitter.setDocumentLocator(locator); } /** Copy set escaping events. */ public void setEscaping(boolean escaping) throws TransformerException { rtfEmitter.setEscaping(escaping); } /** Copy set name pool events. */ public void setNamePool(NamePool namePool) { rtfEmitter.setNamePool(namePool); } /** Copy set unparsed entity events. */ public void setUnparsedEntity(java.lang.String name, java.lang.String uri) throws TransformerException { rtfEmitter.setUnparsedEntity(name, uri); } /** Copy set writer events. */ public void setWriter(java.io.Writer writer) { rtfEmitter.setWriter(writer); } /** Copy start document events. */ public void startDocument() throws TransformerException { rtfEmitter.startDocument(); } /** Copy start element events. */ public void startElement(int nameCode, org.xml.sax.Attributes attributes, int[] namespaces, int nscount) throws TransformerException { rtfEmitter.startElement(nameCode, attributes, namespaces, nscount); } }