| package org.intellij.plugins.xsltDebugger.rt.engine.local.saxon9; |
| |
| import net.sf.saxon.event.PipelineConfiguration; |
| import net.sf.saxon.serialize.Emitter; |
| import net.sf.saxon.trans.XPathException; |
| import org.intellij.plugins.xsltDebugger.rt.engine.local.OutputEventQueueImpl; |
| |
| import javax.xml.transform.stream.StreamResult; |
| import java.io.OutputStream; |
| import java.io.Writer; |
| import java.util.Properties; |
| |
| final class TracingOutputter extends Emitter { |
| private final OutputEventQueueImpl myEventQueue; |
| private final Emitter myEmitter; |
| |
| public TracingOutputter(OutputEventQueueImpl queue, Emitter emitter) { |
| myEmitter = emitter; |
| myEventQueue = queue; |
| } |
| |
| @Override |
| public void setPipelineConfiguration(PipelineConfiguration pipe) { |
| super.setPipelineConfiguration(pipe); |
| myEmitter.setPipelineConfiguration(pipe); |
| } |
| |
| @Override |
| public void setSystemId(String systemId) { |
| myEmitter.setSystemId(systemId); |
| } |
| |
| @Override |
| public void setOutputProperties(Properties details) throws XPathException { |
| myEmitter.setOutputProperties(details); |
| } |
| |
| @Override |
| public void setStreamResult(StreamResult result) throws XPathException { |
| myEmitter.setStreamResult(result); |
| } |
| |
| @Override |
| public void setWriter(Writer writer) throws XPathException { |
| myEmitter.setWriter(writer); |
| } |
| |
| @Override |
| public void setOutputStream(OutputStream stream) throws XPathException { |
| myEmitter.setOutputStream(stream); |
| } |
| |
| @Override |
| public void setUnparsedEntity(String name, String uri, String publicId) throws XPathException { |
| myEmitter.setUnparsedEntity(name, uri, publicId); |
| } |
| |
| public void open() throws XPathException { |
| myEmitter.open(); |
| } |
| |
| public void startDocument(int properties) throws XPathException { |
| myEmitter.startDocument(properties); |
| } |
| |
| public void endDocument() throws XPathException { |
| myEmitter.endDocument(); |
| } |
| |
| public void namespace(int namespaceCode, int properties) throws XPathException { |
| myEmitter.namespace(namespaceCode, properties); |
| } |
| |
| @Override |
| public void close() throws XPathException { |
| myEmitter.close(); |
| } |
| |
| public void startElement(int nameCode, int typeCode, int locationId, int properties) throws XPathException { |
| if (myEventQueue.isEnabled()) { |
| final String localName = namePool.getLocalName(nameCode); |
| final String prefix = namePool.getPrefix(nameCode); |
| myEventQueue.startElement(prefix, localName, namePool.getURI(nameCode)); |
| } |
| myEmitter.startElement(nameCode, typeCode, locationId, properties); |
| } |
| |
| |
| public void attribute(int nameCode, int typeCode, CharSequence value, int locationId, int properties) throws XPathException { |
| if (myEventQueue.isEnabled()) { |
| final String localName = namePool.getLocalName(nameCode); |
| final String prefix = namePool.getPrefix(nameCode); |
| myEventQueue.attribute(prefix, localName, namePool.getURI(nameCode), value.toString()); |
| } |
| myEmitter.attribute(nameCode, typeCode, value, locationId, properties); |
| } |
| |
| public void startContent() throws XPathException { |
| } |
| |
| public void endElement() throws XPathException { |
| myEventQueue.endElement(); |
| myEmitter.endElement(); |
| } |
| |
| public void characters(CharSequence chars, int locationId, int properties) throws XPathException { |
| myEventQueue.characters(chars.toString()); |
| myEmitter.characters(chars, locationId, properties); |
| } |
| |
| public void processingInstruction(String name, CharSequence data, int locationId, int properties) throws XPathException { |
| myEventQueue.pi(name, data.toString()); |
| myEmitter.processingInstruction(name, data, locationId, properties); |
| } |
| |
| public void comment(CharSequence content, int locationId, int properties) throws XPathException { |
| myEventQueue.comment(content.toString()); |
| myEmitter.comment(content, locationId, properties); |
| } |
| |
| public boolean usesTypeAnnotations() { |
| return false; |
| } |
| } |