saxonhe-9.4.0.7/src/main/java/ 0000755 0001750 0001750 00000000000 12213124740 015640 5 ustar mathieu mathieu saxonhe-9.4.0.7/src/main/java/net/ 0000755 0001750 0001750 00000000000 12213124633 016427 5 ustar mathieu mathieu saxonhe-9.4.0.7/src/main/java/net/sf/ 0000755 0001750 0001750 00000000000 12213124633 017037 5 ustar mathieu mathieu saxonhe-9.4.0.7/src/main/java/net/sf/saxon/ 0000755 0001750 0001750 00000000000 12213124737 020174 5 ustar mathieu mathieu saxonhe-9.4.0.7/src/main/java/net/sf/saxon/evpull/ 0000755 0001750 0001750 00000000000 12213124725 021500 5 ustar mathieu mathieu saxonhe-9.4.0.7/src/main/java/net/sf/saxon/evpull/EventMappingIterator.java 0000644 0001750 0001750 00000004502 11671711573 026465 0 ustar mathieu mathieu package net.sf.saxon.evpull; import net.sf.saxon.om.Item; import net.sf.saxon.om.SequenceIterator; import net.sf.saxon.trans.XPathException; /** * MappingIterator merges a sequence of sequences into a single sequence. * It takes as inputs an iteration, and a mapping function to be * applied to each Item returned by that iteration. The mapping function itself * returns another iteration. The result is an iteration of iterators. To convert this * int a single flat iterator over a uniform sequence of events, the result must be wrapped * in an {@link EventStackIterator}
*/
public final class EventMappingIterator implements EventIterator {
private SequenceIterator base;
private EventMappingFunction action;
/**
* Construct a MappingIterator that will apply a specified MappingFunction to
* each Item returned by the base iterator.
* @param base the base iterator
* @param action the mapping function to be applied
*/
public EventMappingIterator(SequenceIterator base, EventMappingFunction action) {
this.base = base;
this.action = action;
}
/*@Nullable*/ public PullEvent next() throws XPathException {
Item nextSource = base.next();
return (nextSource == null ? null : action.map(nextSource));
}
/**
* Determine whether the EventIterator returns a flat sequence of events, or whether it can return
* nested event iterators
*
* @return true if the next() method is guaranteed never to return an EventIterator
*/
public boolean isFlatSequence() {
return false;
}
}
//
// The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License");
// you may not use this file except in compliance with the License. You may obtain a copy of the
// License at http://www.mozilla.org/MPL/
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied.
// See the License for the specific language governing rights and limitations under the License.
//
// The Original Code is: all this file
//
// The Initial Developer of the Original Code is Saxonica Limited.
// Portions created by ___ are Copyright (C) ___. All rights reserved.
//
// Contributor(s):
// saxonhe-9.4.0.7/src/main/java/net/sf/saxon/evpull/EndElementEvent.java 0000644 0001750 0001750 00000002063 11671711573 025400 0 ustar mathieu mathieu package net.sf.saxon.evpull;
/**
* Pull event representing the end of an element node
*/
public class EndElementEvent implements PullEvent {
private final static EndElementEvent THE_INSTANCE = new EndElementEvent();
public static EndElementEvent getInstance() {
return THE_INSTANCE;
}
private EndElementEvent() {
}
}
//
// The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License");
// you may not use this file except in compliance with the License. You may obtain a copy of the
// License at http://www.mozilla.org/MPL/
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied.
// See the License for the specific language governing rights and limitations under the License.
//
// The Original Code is: all this file
//
// The Initial Developer of the Original Code is Saxonica Limited.
// Portions created by ___ are Copyright (C) ___. All rights reserved.
//
// Contributor(s):
// saxonhe-9.4.0.7/src/main/java/net/sf/saxon/evpull/PullEventTracer.java 0000644 0001750 0001750 00000012160 11671711573 025434 0 ustar mathieu mathieu package net.sf.saxon.evpull;
import net.sf.saxon.Configuration;
import net.sf.saxon.event.PipelineConfiguration;
import net.sf.saxon.om.DocumentInfo;
import net.sf.saxon.om.NamePool;
import net.sf.saxon.om.NodeInfo;
import net.sf.saxon.pattern.NodeKindTest;
import net.sf.saxon.trans.XPathException;
import net.sf.saxon.tree.util.FastStringBuffer;
import net.sf.saxon.type.Type;
import net.sf.saxon.value.AtomicValue;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.PrintStream;
/**
* Diagnostic class to display the sequence of events reported by an EventIterator
*/
public class PullEventTracer implements EventIterator {
private EventIterator base;
private String label = ("PET" + hashCode()).substring(0, 8) + ": ";
private PrintStream out;
//@SuppressWarnings({"FieldCanBeLocal"})
private NamePool pool;
/**
* Create a tracer for pull events
* @param base the event iterator whose events are to be traced
* @param config the Saxon configuration
*/
public PullEventTracer(EventIterator base, Configuration config) {
this.base = base;
pool = config.getNamePool();
out = config.getStandardErrorOutput();
}
/**
* Get the next event in the sequence
*
* @return the next event, or null when the sequence is exhausted. Note that since an EventIterator is
* itself a PullEvent, this method may return a nested iterator.
* @throws net.sf.saxon.trans.XPathException
* if a dynamic evaluation error occurs
*/
/*@Nullable*/ public PullEvent next() throws XPathException {
PullEvent pe = base.next();
if (pe == null) {
return null;
}
if (pe instanceof StartDocumentEvent) {
out.println(label + "StartDocument");
label = " " + label;
} else if (pe instanceof StartElementEvent) {
out.println(label + "StartElement " + ((StartElementEvent)pe).getElementName().getDisplayName());
label = " " + label;
} else if (pe instanceof EndDocumentEvent) {
label = label.substring(2);
out.println(label + "EndDocument");
} else if (pe instanceof EndElementEvent) {
label = label.substring(2);
out.println(label + "EndElement");
} else if (pe instanceof NodeInfo) {
FastStringBuffer fsb = new FastStringBuffer(FastStringBuffer.SMALL);
fsb.append(label);
int kind = ((NodeInfo)pe).getNodeKind();
fsb.append(NodeKindTest.toString(kind));
if (kind == Type.ELEMENT || kind == Type.ATTRIBUTE) {
fsb.append(' ');
fsb.append(((NodeInfo)pe).getDisplayName());
}
fsb.append(" \"");
fsb.append(((NodeInfo)pe).getStringValueCS());
fsb.append('"');
out.println(fsb.toString());
} else if (pe instanceof AtomicValue) {
out.println(label + Type.displayTypeName((AtomicValue)pe) + ' ' + pe);
} else if (pe instanceof EventIterator) {
out.println(label + "** NESTED ITERATOR **");
} else {
out.println(label + pe.getClass().getName());
}
return pe;
}
/**
* Determine whether the EventIterator returns a flat sequence of events, or whether it can return
* nested event iterators
*
* @return true if the next() method is guaranteed never to return an EventIterator
*/
public boolean isFlatSequence() {
return base.isFlatSequence();
}
/**
* Main method for testing only
* @param args not used
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Configuration config = new Configuration();
DocumentInfo doc = config.buildDocument(new StreamSource(new File("c:/MyJava/samples/data/books.xml")));
PipelineConfiguration pipe = config.makePipelineConfiguration();
pipe.setHostLanguage(Configuration.XQUERY);
EventIterator e = new Decomposer(new SingletonEventIterator(doc), pipe);
e = EventStackIterator.flatten(e);
e = new PullEventTracer(e, config);
while (true) {
PullEvent pe = e.next();
if (pe == null) {
break;
}
}
}
}
//
// The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License");
// you may not use this file except in compliance with the License. You may obtain a copy of the
// License at http://www.mozilla.org/MPL/
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied.
// See the License for the specific language governing rights and limitations under the License.
//
// The Original Code is: all this file
//
// The Initial Developer of the Original Code is Saxonica Limited.
// Portions created by ___ are Copyright (C) ___. All rights reserved.
//
// Contributor(s):
// saxonhe-9.4.0.7/src/main/java/net/sf/saxon/evpull/StaxToEventBridge.java 0000644 0001750 0001750 00000052752 11671711573 025731 0 ustar mathieu mathieu package net.sf.saxon.evpull;
import net.sf.saxon.Configuration;
import net.sf.saxon.event.NamespaceReducer;
import net.sf.saxon.event.PipelineConfiguration;
import net.sf.saxon.event.SaxonLocator;
import net.sf.saxon.event.SourceLocationProvider;
import net.sf.saxon.expr.parser.ExpressionLocation;
import net.sf.saxon.om.FingerprintedQName;
import net.sf.saxon.om.NamePool;
import net.sf.saxon.om.NoNamespaceName;
import net.sf.saxon.pull.UnparsedEntity;
import net.sf.saxon.serialize.XMLEmitter;
import net.sf.saxon.trans.SaxonErrorCode;
import net.sf.saxon.trans.XPathException;
import net.sf.saxon.tree.tiny.CharSlice;
import net.sf.saxon.tree.util.Orphan;
import net.sf.saxon.type.Type;
import net.sf.saxon.type.Untyped;
import net.sf.saxon.value.Whitespace;
import javax.xml.stream.*;
import javax.xml.stream.events.EntityDeclaration;
import javax.xml.transform.TransformerException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
/**
* This class implements the Saxon EventIterator API on top of a standard StAX parser
* (or any other StAX XMLStreamReader implementation)
*/
public class StaxToEventBridge implements EventIterator, SaxonLocator, SourceLocationProvider {
private Configuration config;
private XMLStreamReader reader;
private PipelineConfiguration pipe;
/*@Nullable*/ private List unparsedEntities = null;
PullEvent currentEvent = null;
int depth = 0;
boolean ignoreIgnorable = false;
/**
* Create a new instance of the class
*/
public StaxToEventBridge() {
}
/**
* Supply an input stream containing XML to be parsed. A StAX parser is created using
* the JAXP XMLInputFactory.
* @param systemId The Base URI of the input document
* @param inputStream the stream containing the XML to be parsed
* @throws net.sf.saxon.trans.XPathException if an error occurs creating the StAX parser
*/
public void setInputStream(String systemId, InputStream inputStream) throws XPathException {
try {
XMLInputFactory factory = XMLInputFactory.newInstance();
//XMLInputFactory factory = new WstxInputFactory();
factory.setXMLReporter(new StaxErrorReporter());
reader = factory.createXMLStreamReader(systemId, inputStream);
} catch (XMLStreamException e) {
throw new XPathException(e);
}
}
/**
* Supply an XMLStreamReader: the events reported by this XMLStreamReader will be translated
* into EventIterator events
* @param reader the supplier of XML events, typically an XML parser
*/
public void setXMLStreamReader(XMLStreamReader reader) {
this.reader = reader;
}
/**
* Set configuration information. This must only be called before any events
* have been read.
* @param pipe the pipeline configuration
*/
public void setPipelineConfiguration(PipelineConfiguration pipe) {
this.pipe = new PipelineConfiguration(pipe);
this.pipe.setLocationProvider(this);
config = pipe.getConfiguration();
ignoreIgnorable = config.getStripsWhiteSpace() != Whitespace.NONE;
}
/**
* Get configuration information.
* @return the pipeline configuration
*/
public PipelineConfiguration getPipelineConfiguration() {
return pipe;
}
/**
* Get the XMLStreamReader used by this StaxBridge. This is available only after
* setInputStream() or setXMLStreamReader() has been called
* @return the instance of XMLStreamReader allocated when setInputStream() was called,
* or the instance supplied directly to setXMLStreamReader()
*/
public XMLStreamReader getXMLStreamReader() {
return reader;
}
/**
* Get the name pool
* @return the name pool
*/
public NamePool getNamePool() {
return pipe.getConfiguration().getNamePool();
}
/**
* Get the next event
* @return the next event; or null to indicate the end of the event stream
*/
public PullEvent next() throws XPathException {
if (currentEvent == null) {
// StAX isn't reporting START_DOCUMENT so we supply it ourselves
currentEvent = StartDocumentEvent.getInstance();
return currentEvent;
}
if (currentEvent instanceof EndDocumentEvent) {
try {
reader.close();
} catch (XMLStreamException e) {
//
}
return null;
}
try {
if (reader.hasNext()) {
int event = reader.next();
//System.err.println("Read event " + event);
currentEvent = translate(event);
} else {
currentEvent = null;
}
} catch (XMLStreamException e) {
String message = e.getMessage();
// Following code recognizes the messages produced by the Sun Zephyr parser
if (message.startsWith("ParseError at")) {
int c = message.indexOf("\nMessage: ");
if (c > 0) {
message = message.substring(c + 10);
}
}
XPathException err = new XPathException("Error reported by XML parser: " + message);
err.setErrorCode(SaxonErrorCode.SXXP0003);
err.setLocator(translateLocation(e.getLocation()));
throw err;
}
return currentEvent;
}
/**
* Translate a StAX event into a Saxon PullEvent
* @param event the StAX event
* @return the Saxon PullEvent
* @throws XPathException
*/
private PullEvent translate(int event) throws XPathException {
//System.err.println("EVENT " + event);
switch (event) {
case XMLStreamConstants.ATTRIBUTE:
return next(); // attributes are reported as part of StartElement
case XMLStreamConstants.CDATA:
case XMLStreamConstants.CHARACTERS:
if (depth == 0 && reader.isWhiteSpace()) {
return next();
} else {
Orphan o = new Orphan(config);
o.setNodeKind(Type.TEXT);
CharSlice value = new CharSlice(
reader.getTextCharacters(), reader.getTextStart(), reader.getTextLength());
o.setStringValue(value);
return o;
}
case XMLStreamConstants.COMMENT: {
Orphan o = new Orphan(config);
o.setNodeKind(Type.COMMENT);
CharSlice value = new CharSlice(
reader.getTextCharacters(), reader.getTextStart(), reader.getTextLength());
o.setStringValue(value);
return o;
}
case XMLStreamConstants.DTD:
unparsedEntities = (List)reader.getProperty("javax.xml.stream.entities");
return next();
case XMLStreamConstants.END_DOCUMENT:
return EndDocumentEvent.getInstance();
case XMLStreamConstants.END_ELEMENT:
depth--;
return EndElementEvent.getInstance();
case XMLStreamConstants.ENTITY_DECLARATION:
return next();
case XMLStreamConstants.ENTITY_REFERENCE:
return next();
case XMLStreamConstants.NAMESPACE:
return next(); // namespaces are reported as part of StartElement
case XMLStreamConstants.NOTATION_DECLARATION:
return next();
case XMLStreamConstants.PROCESSING_INSTRUCTION:{
Orphan o = new Orphan(config);
o.setNodeKind(Type.PROCESSING_INSTRUCTION);
String local = reader.getPITarget();
o.setNodeName(new NoNamespaceName(local));
o.setStringValue(reader.getText());
return o;
}
case XMLStreamConstants.SPACE:
if (depth == 0) {
return next();
} else if (ignoreIgnorable) {
// (Brave attempt, but Woodstox doesn't seem to report ignorable whitespace)
return next();
} else {
Orphan o = new Orphan(config);
o.setNodeKind(Type.TEXT);
o.setStringValue(reader.getText());
return o;
}
case XMLStreamConstants.START_DOCUMENT:
return next(); // we supplied the START_DOCUMENT ourselves
case XMLStreamConstants.START_ELEMENT:
depth++;
StartElementEvent see = new StartElementEvent(pipe);
String elocal = reader.getLocalName();
String euri = reader.getNamespaceURI();
String eprefix = reader.getPrefix();
if (eprefix == null) {
eprefix = "";
}
if (euri == null) {
euri = "";
}
see.setElementName(new FingerprintedQName(eprefix, euri, elocal));
see.setTypeCode(Untyped.getInstance());
int attCount = reader.getAttributeCount();
for (int index=0; index
The return value is the public identifier of the document * entity or of the external parsed entity in which the markup * triggering the event appears.
* * @return A string containing the public identifier, or * null if none is available. * @see #getSystemId */ public String getPublicId() { return reader.getLocation().getPublicId(); } /** * Return the system identifier for the current document event. * *The return value is the system identifier of the document * entity or of the external parsed entity in which the markup * triggering the event appears.
* *If the system identifier is a URL, the parser must resolve it * fully before passing it to the application. For example, a file * name must always be provided as a file:... URL, and other * kinds of relative URI are also resolved against their bases.
* * @return A string containing the system identifier, or null * if none is available. * @see #getPublicId */ public String getSystemId() { return reader.getLocation().getSystemId(); } /** * Return the line number where the current document event ends. * Lines are delimited by line ends, which are defined in * the XML specification. * *Warning: The return value from the method * is intended only as an approximation for the sake of diagnostics; * it is not intended to provide sufficient information * to edit the character content of the original XML document. * In some cases, these "line" numbers match what would be displayed * as columns, and in others they may not match the source text * due to internal entity expansion.
* *The return value is an approximation of the line number * in the document entity or external parsed entity where the * markup triggering the event appears.
* *If possible, the SAX driver should provide the line position * of the first character after the text associated with the document * event. The first line is line 1.
* * @return The line number, or -1 if none is available. * @see #getColumnNumber */ public int getLineNumber() { return reader.getLocation().getLineNumber(); } /** * Return the column number where the current document event ends. * This is one-based number of Javachar
values since
* the last line end.
*
* Warning: The return value from the method * is intended only as an approximation for the sake of diagnostics; * it is not intended to provide sufficient information * to edit the character content of the original XML document. * For example, when lines contain combining character sequences, wide * characters, surrogate pairs, or bi-directional text, the value may * not correspond to the column in a text editor's display.
* *The return value is an approximation of the column number * in the document entity or external parsed entity where the * markup triggering the event appears.
* *If possible, the SAX driver should provide the line position * of the first character after the text associated with the document * event. The first column in each line is column 1.
* * @return The column number, or -1 if none is available. * @see #getLineNumber */ public int getColumnNumber() { return reader.getLocation().getColumnNumber(); } public String getSystemId(long locationId) { return getSystemId(); } public int getLineNumber(long locationId) { return getLineNumber(); } public int getColumnNumber(long locationId) { return getColumnNumber(); } /** * Get a list of unparsed entities. * * @return a list of unparsed entities, or null if the information is not available, or * an empty list if there are no unparsed entities. Each item in the list will * be an instance of {@link net.sf.saxon.pull.UnparsedEntity} */ public List getUnparsedEntities() { if (unparsedEntities == null) { return null; } List list = new ArrayList(unparsedEntities.size()); for (int i=0; iThe resulting sequence is decomposed, but not flat (it will contain nested EventIterators). To flatten * it, use {@link EventStackIterator#flatten(EventIterator)}
*/ public class Decomposer implements EventIterator { private EventIterator base; private PipelineConfiguration pipe; /** * Create a Decomposer, which turns an event sequence into fully decomposed form * @param base the base sequence, which may be fully composed, fully decomposed, or * anything in between * @param pipe the Saxon pipeline configuration */ public Decomposer(EventIterator base, PipelineConfiguration pipe) { this.pipe = pipe; this.base = EventStackIterator.flatten(base); } /** * Create a Decomposer which returns the sequence of events corresponding to * a particular node * @param node the node to be decomposed * @param pipe the Saxon pipeline configuration */ public Decomposer(NodeInfo node, PipelineConfiguration pipe) { this.pipe = pipe; base = new SingletonEventIterator(node); } /** * Get the next event in the sequence * * @return the next event, or null when the sequence is exhausted. Note that since an EventIterator is * itself a PullEvent, this method may return a nested iterator. * @throws net.sf.saxon.trans.XPathException * if a dynamic evaluation error occurs */ public PullEvent next() throws XPathException { PullEvent pe = base.next(); if (pe instanceof NodeInfo) { NodeInfo node = (NodeInfo)pe; switch (node.getNodeKind()) { case Type.DOCUMENT: { if (node instanceof TinyNodeImpl) { return new TinyTreeEventIterator(((TinyNodeImpl)node), pipe); } else { SequenceIterator content = node.iterateAxis(Axis.CHILD); EventIterator contentEvents = new EventIteratorOverSequence(content); return new BracketedDocumentIterator( new Decomposer(contentEvents, pipe)); } } case Type.ELEMENT: { if (node instanceof TinyNodeImpl) { return new TinyTreeEventIterator(((TinyNodeImpl)node), pipe); } else { SequenceIterator content = node.iterateAxis(Axis.CHILD); EventIterator contentEvents = new EventIteratorOverSequence(content); StartElementEvent see = new StartElementEvent(pipe); see.setElementName(new NameOfNode(node)); see.setTypeCode(node.getSchemaType()); see.setLocalNamespaces(node.getDeclaredNamespaces(null)); AxisIterator atts = node.iterateAxis(Axis.ATTRIBUTE); while (true) { NodeInfo att = atts.next(); if (att == null) { break; } see.addAttribute(att); } return new BracketedElementIterator( see, new Decomposer(contentEvents, pipe), EndElementEvent.getInstance()); } } default: return node; } } else { return pe; } } /** * Determine whether the EventIterator returns a flat sequence of events, or whether it can return * nested event iterators * * @return true if the next() method is guaranteed never to return an EventIterator */ public boolean isFlatSequence() { return false; } } // // The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); // you may not use this file except in compliance with the License. You may obtain a copy of the // License at http://www.mozilla.org/MPL/ // // Software distributed under the License is distributed on an "AS IS" basis, // WITHOUT WARRANTY OF ANY KIND, either express or implied. // See the License for the specific language governing rights and limitations under the License. // // The Original Code is: all this file // // The Initial Developer of the Original Code is Saxonica Limited. // Portions created by ___ are Copyright (C) ___. All rights reserved. // // Contributor(s): // saxonhe-9.4.0.7/src/main/java/net/sf/saxon/evpull/BracketedDocumentIterator.java 0000644 0001750 0001750 00000005720 11671711573 027456 0 ustar mathieu mathieu package net.sf.saxon.evpull; import net.sf.saxon.trans.XPathException; /** * The class is an EventIterator that handles the events arising from a document node constructor: * that is, the start/end event pair for the document node, bracketing a sequence of events for the * content of the document. * *This class does not normalize the content (for example by merging adjacent text nodes). That is the job * of the {@link ComplexContentProcessor}.
* */ public class BracketedDocumentIterator implements EventIterator { private EventIterator content; private int state = INITIAL_STATE; private static final int INITIAL_STATE = 0; private static final int PROCESSING_CHILDREN = 1; private static final int EXHAUSTED = 2; /** * Constructor * @param content iterator that delivers the content of the document */ public BracketedDocumentIterator(EventIterator content) { this.content = EventStackIterator.flatten(content); state = 0; } /** * Get the next event in the sequence * @return the next event, or null when the sequence is exhausted * @throws net.sf.saxon.trans.XPathException if a dynamic evaluation error occurs */ /*@Nullable*/ public PullEvent next() throws XPathException { switch (state) { case INITIAL_STATE: state = PROCESSING_CHILDREN; return StartDocumentEvent.getInstance(); case PROCESSING_CHILDREN: PullEvent pe = content.next(); if (pe == null) { state = EXHAUSTED; return EndDocumentEvent.getInstance(); } else { return pe; } case EXHAUSTED: return null; default: throw new AssertionError("BracketedDocumentIterator state " + state); } } /** * Determine whether the EventIterator returns a flat sequence of events, or whether it can return * nested event iterators * * @return true if the next() method is guaranteed never to return an EventIterator */ public boolean isFlatSequence() { return true; } } // // The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License"); // you may not use this file except in compliance with the License. You may obtain a copy of the // License at http://www.mozilla.org/MPL/ // // Software distributed under the License is distributed on an "AS IS" basis, // WITHOUT WARRANTY OF ANY KIND, either express or implied. // See the License for the specific language governing rights and limitations under the License. // // The Original Code is: all this file // // The Initial Developer of the Original Code is Saxonica Limited. // Portions created by ___ are Copyright (C) ___. All rights reserved. // // Contributor(s): // saxonhe-9.4.0.7/src/main/java/net/sf/saxon/evpull/PullEvent.java 0000644 0001750 0001750 00000002031 11671711573 024267 0 ustar mathieu mathieu package net.sf.saxon.evpull; /** * A PullEvent is one of the following: * *