You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by zo...@apache.org on 2002/08/13 23:21:14 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/trax DOM2SAX.java TemplatesHandlerImpl.java TemplatesImpl.java TransformerFactoryImpl.java TransformerHandlerImpl.java
zongaro 2002/08/13 14:21:14
Modified: java/src/org/apache/xalan/templates Tag: XSLTC_DTM
ElemValueOf.java
java/src/org/apache/xalan/xsltc Tag: XSLTC_DTM
TransletOutputHandler.java
java/src/org/apache/xalan/xsltc/compiler Tag: XSLTC_DTM
Expression.java FunctionAvailableCall.java
ParameterRef.java VariableRef.java
java/src/org/apache/xalan/xsltc/dom Tag: XSLTC_DTM
LoadDocument.java
java/src/org/apache/xalan/xsltc/runtime Tag: XSLTC_DTM
BasisLibrary.java SAXAdapter.java TextOutput.java
TransletOutputBase.java
java/src/org/apache/xalan/xsltc/runtime/output Tag:
XSLTC_DTM SAXHTMLOutput.java
java/src/org/apache/xalan/xsltc/trax Tag: XSLTC_DTM
DOM2SAX.java TemplatesHandlerImpl.java
TemplatesImpl.java TransformerFactoryImpl.java
TransformerHandlerImpl.java
Log:
Merged in latest changes from MAIN branch.
Revision Changes Path
No revision
No revision
1.18.2.1 +5 -0 xml-xalan/java/src/org/apache/xalan/templates/ElemValueOf.java
Index: ElemValueOf.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/templates/ElemValueOf.java,v
retrieving revision 1.18
retrieving revision 1.18.2.1
diff -u -r1.18 -r1.18.2.1
--- ElemValueOf.java 24 Mar 2002 00:57:53 -0000 1.18
+++ ElemValueOf.java 13 Aug 2002 21:21:13 -0000 1.18.2.1
@@ -334,6 +334,11 @@
{
throw new TransformerException(se);
}
+ catch (RuntimeException re) {
+ TransformerException te = new TransformerException(re);
+ te.setLocator(this);
+ throw te;
+ }
finally
{
if (TransformerImpl.S_DEBUG)
No revision
No revision
1.7.10.2 +3 -1 xml-xalan/java/src/org/apache/xalan/xsltc/TransletOutputHandler.java
Index: TransletOutputHandler.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/TransletOutputHandler.java,v
retrieving revision 1.7.10.1
retrieving revision 1.7.10.2
diff -u -r1.7.10.1 -r1.7.10.2
--- TransletOutputHandler.java 29 Jul 2002 00:01:21 -0000 1.7.10.1
+++ TransletOutputHandler.java 13 Aug 2002 21:21:13 -0000 1.7.10.2
@@ -82,6 +82,8 @@
public void comment(String comment) throws TransletException;
public void processingInstruction(String target, String data)
throws TransletException;
+ public void startCDATA() throws TransletException;
+ public void endCDATA() throws TransletException;
public void setType(int type);
public void setIndent(boolean indent);
public void omitHeader(boolean value);
No revision
No revision
1.11.2.3 +2 -10 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Expression.java
Index: Expression.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Expression.java,v
retrieving revision 1.11.2.2
retrieving revision 1.11.2.3
diff -u -r1.11.2.2 -r1.11.2.3
--- Expression.java 1 Aug 2002 19:55:30 -0000 1.11.2.2
+++ Expression.java 13 Aug 2002 21:21:13 -0000 1.11.2.3
@@ -180,15 +180,7 @@
return; // nothing to do
}
- if (this instanceof VariableRefBase) {
- // The method cloneIterator() also does resetting
- final int clone =
- cpg.addInterfaceMethodref(NODE_ITERATOR,
- "cloneIterator",
- "()" + NODE_ITERATOR_SIG);
- il.append(new INVOKEINTERFACE(clone, 1));
- }
- else {
+ if ( (this instanceof VariableRefBase) == false ) {
il.append(methodGen.loadContextNode());
il.append(methodGen.setStartNode());
}
1.5.6.2 +2 -1 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FunctionAvailableCall.java
Index: FunctionAvailableCall.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FunctionAvailableCall.java,v
retrieving revision 1.5.6.1
retrieving revision 1.5.6.2
diff -u -r1.5.6.1 -r1.5.6.2
--- FunctionAvailableCall.java 29 Jul 2002 00:01:22 -0000 1.5.6.1
+++ FunctionAvailableCall.java 13 Aug 2002 21:21:13 -0000 1.5.6.2
@@ -241,6 +241,7 @@
if (_namespaceOfFunct == null ||
_namespaceOfFunct.equals(EMPTYSTRING) ||
+ _namespaceOfFunct.equals(EXT_XALAN) ||
_namespaceOfFunct.equals(TRANSLET_URI))
{
final Parser parser = getParser();
1.10.6.1 +7 -5 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ParameterRef.java
Index: ParameterRef.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ParameterRef.java,v
retrieving revision 1.10
retrieving revision 1.10.6.1
diff -u -r1.10 -r1.10.6.1
--- ParameterRef.java 1 Feb 2002 20:07:08 -0000 1.10
+++ ParameterRef.java 13 Aug 2002 21:21:13 -0000 1.10.6.1
@@ -112,10 +112,12 @@
}
if (_variable.getType() instanceof NodeSetType) {
- final int reset = cpg.addInterfaceMethodref(NODE_ITERATOR,
- "reset",
- "()"+NODE_ITERATOR_SIG);
- il.append(new INVOKEINTERFACE(reset,1));
+ // The method cloneIterator() also does resetting
+ final int clone = cpg.addInterfaceMethodref(NODE_ITERATOR,
+ "cloneIterator",
+ "()" +
+ NODE_ITERATOR_SIG);
+ il.append(new INVOKEINTERFACE(clone, 1));
}
}
1.11.6.1 +7 -5 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/VariableRef.java
Index: VariableRef.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/VariableRef.java,v
retrieving revision 1.11
retrieving revision 1.11.6.1
diff -u -r1.11 -r1.11.6.1
--- VariableRef.java 1 Feb 2002 20:07:08 -0000 1.11
+++ VariableRef.java 13 Aug 2002 21:21:13 -0000 1.11.6.1
@@ -135,10 +135,12 @@
}
if (_variable.getType() instanceof NodeSetType) {
- final int reset = cpg.addInterfaceMethodref(NODE_ITERATOR,
- "reset",
- "()"+NODE_ITERATOR_SIG);
- il.append(new INVOKEINTERFACE(reset,1));
+ // The method cloneIterator() also does resetting
+ final int clone = cpg.addInterfaceMethodref(NODE_ITERATOR,
+ "cloneIterator",
+ "()" +
+ NODE_ITERATOR_SIG);
+ il.append(new INVOKEINTERFACE(clone, 1));
}
}
No revision
No revision
1.11.10.2 +22 -13 xml-xalan/java/src/org/apache/xalan/xsltc/dom/LoadDocument.java
Index: LoadDocument.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/LoadDocument.java,v
retrieving revision 1.11.10.1
retrieving revision 1.11.10.2
diff -u -r1.11.10.1 -r1.11.10.2
--- LoadDocument.java 17 Apr 2002 18:13:44 -0000 1.11.10.1
+++ LoadDocument.java 13 Aug 2002 21:21:13 -0000 1.11.10.2
@@ -62,8 +62,9 @@
package org.apache.xalan.xsltc.dom;
-import java.io.File;
import java.net.URL;
+import java.io.File;
+import java.io.FileNotFoundException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
@@ -98,22 +99,24 @@
*/
public static DTMAxisIterator document(String uri, String base,
AbstractTranslet translet, DOM dom)
- throws Exception {
-
+ throws Exception
+ {
+ final String originalUri = uri;
MultiDOM multiplexer = (MultiDOM)dom;
// Return an empty iterator if the URI is clearly invalid
// (to prevent some unncessary MalformedURL exceptions).
- if ((uri == null) || (uri.equals("")))
+ if (uri == null || uri.equals("")) {
return(new SingletonIterator(DTM.NULL,true));
+ }
// Prepend URI base to URI (from context)
- if ((base != null) && (!base.equals(""))) {
- if ((!uri.startsWith(base)) && // unless URI contains base
- (!uri.startsWith("/")) && // unless URI is abs. file path
- (!uri.startsWith("http:/")) && // unless URI is abs. http URL
- (!uri.startsWith("file:/"))) { // unless URI is abs. file URL
- uri = base+uri;
+ if (base != null && !base.equals("")) {
+ if (!uri.startsWith(base) && // unless URI contains base
+ !uri.startsWith("/") && // unless URI is abs. file path
+ !uri.startsWith("http:/") && // unless URI is abs. http URL
+ !uri.startsWith("file:/")) { // unless URI is abs. file URL
+ uri = base + uri;
}
}
@@ -137,7 +140,11 @@
mask = multiplexer.nextMask(); // peek
if (cache != null) {
- newdom = cache.retrieveDocument(uri, mask, translet);
+ newdom = cache.retrieveDocument(originalUri, mask, translet);
+ if (newdom == null) {
+ final Exception e = new FileNotFoundException(originalUri);
+ throw new TransletException(e);
+ }
}
else
{
@@ -263,8 +270,10 @@
throw new IllegalArgumentException(err);
}
}
+ catch (TransletException e) {
+ throw e;
+ }
catch (Exception e) {
- e.printStackTrace();
throw new TransletException(e);
}
}
No revision
No revision
1.35.2.3 +8 -3 xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java
Index: BasisLibrary.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java,v
retrieving revision 1.35.2.2
retrieving revision 1.35.2.3
diff -u -r1.35.2.2 -r1.35.2.3
--- BasisLibrary.java 29 Jul 2002 00:01:28 -0000 1.35.2.2
+++ BasisLibrary.java 13 Aug 2002 21:21:13 -0000 1.35.2.3
@@ -69,6 +69,7 @@
import java.util.Locale;
import java.util.ResourceBundle;
+import java.text.NumberFormat;
import java.text.MessageFormat;
import java.text.FieldPosition;
import java.text.DecimalFormat;
@@ -869,7 +870,9 @@
private static String defaultPattern = "";
static {
- defaultFormatter = new DecimalFormat();
+ NumberFormat f = NumberFormat.getInstance(Locale.getDefault());
+ defaultFormatter = (f instanceof DecimalFormat) ?
+ (DecimalFormat) f : new DecimalFormat();
defaultFormatter.setGroupingUsed(false);
}
@@ -914,7 +917,9 @@
DecimalFormat formatter) {
try {
StringBuffer result = new StringBuffer();
- formatter.applyLocalizedPattern(pattern);
+ if (pattern != defaultPattern) {
+ formatter.applyLocalizedPattern(pattern);
+ }
//------------------------------------------------------
// bug fix # 9179 - make sure localized pattern contains
1.10.2.4 +3 -1 xml-xalan/java/src/org/apache/xalan/xsltc/runtime/SAXAdapter.java
Index: SAXAdapter.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/SAXAdapter.java,v
retrieving revision 1.10.2.3
retrieving revision 1.10.2.4
diff -u -r1.10.2.3 -r1.10.2.4
--- SAXAdapter.java 29 Jul 2002 00:01:28 -0000 1.10.2.3
+++ SAXAdapter.java 13 Aug 2002 21:21:13 -0000 1.10.2.4
@@ -193,6 +193,8 @@
}
// The SAX handler does not handle these:
+ public void startCDATA() throws TransletException {}
+ public void endCDATA() throws TransletException {}
public void setType(int type) {}
public void setHeader(String header) {}
public void setIndent(boolean indent) {}
1.54.2.2 +9 -1 xml-xalan/java/src/org/apache/xalan/xsltc/runtime/TextOutput.java
Index: TextOutput.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/TextOutput.java,v
retrieving revision 1.54.2.1
retrieving revision 1.54.2.2
diff -u -r1.54.2.1 -r1.54.2.2
--- TextOutput.java 29 Jul 2002 00:01:28 -0000 1.54.2.1
+++ TextOutput.java 13 Aug 2002 21:21:14 -0000 1.54.2.2
@@ -384,6 +384,14 @@
_cdataTagOpen = false;
}
+ public void startCDATA() throws TransletException {
+ // This class is deprecated - use runtime.output package
+ }
+
+ public void endCDATA() throws TransletException {
+ // This class is deprecated - use runtime.output package
+ }
+
/**
* Send characters to the output document
*/
1.7.10.2 +3 -1 xml-xalan/java/src/org/apache/xalan/xsltc/runtime/TransletOutputBase.java
Index: TransletOutputBase.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/TransletOutputBase.java,v
retrieving revision 1.7.10.1
retrieving revision 1.7.10.2
diff -u -r1.7.10.1 -r1.7.10.2
--- TransletOutputBase.java 29 Jul 2002 00:01:28 -0000 1.7.10.1
+++ TransletOutputBase.java 13 Aug 2002 21:21:14 -0000 1.7.10.2
@@ -85,6 +85,8 @@
throws TransletException {}
public boolean setEscaping(boolean escape)
throws TransletException { return true; }
+ public void startCDATA() throws TransletException {}
+ public void endCDATA() throws TransletException {}
public String expandQName(String withPrefix) { return(withPrefix); }
public void setType(int type) {}
public void setIndent(boolean indent) {}
No revision
No revision
1.8.4.2 +17 -19 xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/SAXHTMLOutput.java
Index: SAXHTMLOutput.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/SAXHTMLOutput.java,v
retrieving revision 1.8.4.1
retrieving revision 1.8.4.2
diff -u -r1.8.4.1 -r1.8.4.2
--- SAXHTMLOutput.java 8 Aug 2002 15:19:03 -0000 1.8.4.1
+++ SAXHTMLOutput.java 13 Aug 2002 21:21:14 -0000 1.8.4.2
@@ -140,7 +140,7 @@
if (_startTagOpen) {
closeStartTag();
}
- _saxHandler.endElement(EMPTYSTRING, EMPTYSTRING, elementName);
+ _saxHandler.endElement(EMPTYSTRING, elementName, elementName);
}
catch (SAXException e) {
throw new TransletException(e);
@@ -151,22 +151,20 @@
public void attribute(String name, final String value)
throws TransletException
{
- final String patchedName = patchName(name);
- final String localName = getLocalName(patchedName);
- final int index = _attributes.getIndex(name);
-
- if (!_startTagOpen) {
- BasisLibrary.runTimeError(BasisLibrary.STRAY_ATTRIBUTE_ERR,name);
- }
-
- if (index >= 0) {
- _attributes.setAttribute(index, EMPTYSTRING, localName,
- name, "CDATA", value);
- }
- else {
- _attributes.addAttribute(EMPTYSTRING, localName,
+ if (_startTagOpen) {
+ final String patchedName = patchName(name);
+ final String localName = getLocalName(patchedName);
+ final int index = _attributes.getIndex(name);
+
+ if (index >= 0) {
+ _attributes.setAttribute(index, EMPTYSTRING, localName,
+ name, "CDATA", value);
+ }
+ else {
+ _attributes.addAttribute(EMPTYSTRING, localName,
name, "CDATA", value);
- }
+ }
+ }
}
/**
@@ -194,8 +192,8 @@
_startTagOpen = false;
// Now is time to send the startElement event
- _saxHandler.startElement(null, _elementName, _elementName,
- _attributes);
+ _saxHandler.startElement(EMPTYSTRING, _elementName,
+ _elementName, _attributes);
}
catch (SAXException e) {
throw new TransletException(e);
No revision
No revision
1.11.2.2 +12 -2 xml-xalan/java/src/org/apache/xalan/xsltc/trax/DOM2SAX.java
Index: DOM2SAX.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/DOM2SAX.java,v
retrieving revision 1.11.2.1
retrieving revision 1.11.2.2
diff -u -r1.11.2.1 -r1.11.2.2
--- DOM2SAX.java 29 Jul 2002 00:01:29 -0000 1.11.2.1
+++ DOM2SAX.java 13 Aug 2002 21:21:14 -0000 1.11.2.2
@@ -188,7 +188,17 @@
public void parse() throws IOException, SAXException {
if (_dom != null) {
- parse(_dom);
+ boolean isIncomplete =
+ (_dom.getNodeType() != org.w3c.dom.Node.DOCUMENT_NODE);
+
+ if (isIncomplete) {
+ _sax.startDocument();
+ parse(_dom);
+ _sax.endDocument();
+ }
+ else {
+ parse(_dom);
+ }
}
}
1.5.2.2 +16 -7 xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesHandlerImpl.java
Index: TemplatesHandlerImpl.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesHandlerImpl.java,v
retrieving revision 1.5.2.1
retrieving revision 1.5.2.2
diff -u -r1.5.2.1 -r1.5.2.2
--- TemplatesHandlerImpl.java 29 Jul 2002 00:01:29 -0000 1.5.2.1
+++ TemplatesHandlerImpl.java 13 Aug 2002 21:21:14 -0000 1.5.2.2
@@ -94,16 +94,21 @@
*/
private URIResolver _uriResolver = null;
- // Temporary
- private boolean _oldOutputSystem;
+ /**
+ * A reference to the transformer factory that this templates
+ * object belongs to.
+ */
+ private TransformerFactoryImpl _tfactory = null;
/**
* Default constructor
*/
- protected TemplatesHandlerImpl(int indentNumber, boolean oldOutputSystem) {
+ protected TemplatesHandlerImpl(int indentNumber,
+ TransformerFactoryImpl tfactory)
+ {
super(null);
_indentNumber = indentNumber;
- _oldOutputSystem = oldOutputSystem;
+ _tfactory = tfactory;
}
/**
@@ -184,6 +189,10 @@
stylesheet.setSystemId(_systemId);
stylesheet.setParentStylesheet(null);
setCurrentStylesheet(stylesheet);
+
+ // Set it as top-level in the XSLTC object
+ xsltc.setStylesheet(stylesheet);
+
// Create AST under the Stylesheet element
createAST(stylesheet);
}
@@ -200,8 +209,7 @@
if (bytecodes != null) {
final TemplatesImpl templates =
new TemplatesImpl(xsltc.getBytecodes(), transletName,
- getOutputProperties(), _indentNumber,
- _oldOutputSystem);
+ getOutputProperties(), _indentNumber, _tfactory);
// Set URIResolver on templates object
if (_uriResolver != null) {
@@ -223,6 +231,7 @@
* of the location of the parsed document.
*/
public void setDocumentLocator(Locator locator) {
+ super.setDocumentLocator(locator);
setSystemId(locator.getSystemId());
}
1.10.2.2 +9 -6 xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java
Index: TemplatesImpl.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java,v
retrieving revision 1.10.2.1
retrieving revision 1.10.2.2
diff -u -r1.10.2.1 -r1.10.2.2
--- TemplatesImpl.java 29 Jul 2002 00:01:29 -0000 1.10.2.1
+++ TemplatesImpl.java 13 Aug 2002 21:21:14 -0000 1.10.2.2
@@ -128,8 +128,11 @@
*/
private URIResolver _uriResolver = null;
- // Temporary
- private boolean _oldOutputSystem;
+ /**
+ * A reference to the transformer factory that this templates
+ * object belongs to.
+ */
+ private TransformerFactoryImpl _tfactory = null;
private class TransletClassLoader extends ClassLoader {
@@ -148,13 +151,13 @@
*/
protected TemplatesImpl(byte[][] bytecodes, String transletName,
Properties outputProperties, int indentNumber,
- boolean oldOutputSystem)
+ TransformerFactoryImpl tfactory)
{
_bytecodes = bytecodes;
_name = transletName;
_outputProperties = outputProperties;
_indentNumber = indentNumber;
- _oldOutputSystem = oldOutputSystem;
+ _tfactory = tfactory;
}
public synchronized void writeExternal(ObjectOutput out)
@@ -334,7 +337,7 @@
{
final TransformerImpl transformer =
new TransformerImpl(getTransletInstance(), _outputProperties,
- _indentNumber, _oldOutputSystem);
+ _indentNumber, _tfactory);
if (_uriResolver != null) {
transformer.setURIResolver(_uriResolver);
}
1.34.2.2 +24 -64 xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java
Index: TransformerFactoryImpl.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java,v
retrieving revision 1.34.2.1
retrieving revision 1.34.2.2
diff -u -r1.34.2.1 -r1.34.2.2
--- TransformerFactoryImpl.java 29 Jul 2002 00:01:29 -0000 1.34.2.1
+++ TransformerFactoryImpl.java 13 Aug 2002 21:21:14 -0000 1.34.2.2
@@ -72,15 +72,16 @@
import java.net.MalformedURLException;
import java.util.Vector;
import java.util.Hashtable;
+import java.util.Properties;
import javax.xml.transform.*;
import javax.xml.transform.sax.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
+import javax.xml.parsers.SAXParserFactory;
+import org.xml.sax.*;
import org.w3c.dom.Document;
-import org.xml.sax.XMLFilter;
-import org.xml.sax.InputSource;
import org.apache.xalan.xsltc.Translet;
import org.apache.xalan.xsltc.runtime.AbstractTranslet;
@@ -120,21 +121,6 @@
protected static String _defaultTransletName = "GregorSamsa";
/**
- * Cache for the newTransformer() method - see method for details
- */
- private Transformer _copyTransformer = null;
-
- /**
- * XSL document for the default transformer
- */
- private static final String COPY_TRANSLET_CODE =
- "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">"+
- "<xsl:template match=\"/\">"+
- " <xsl:copy-of select=\".\"/>"+
- "</xsl:template>"+
- "</xsl:stylesheet>";
-
- /**
* This Hashtable is used to store parameters for locating
* <?xml-stylesheet ...?> processing instructions in XML docs.
*/
@@ -170,8 +156,10 @@
*/
private int _indentNumber = -1;
- // Temporary
- private boolean _oldOutputSystem = false;
+ /**
+ * A reference to an XML reader for parsing.
+ */
+ private XMLReader _xmlReader = null;
/**
* javax.xml.transform.sax.TransformerFactory implementation.
@@ -268,16 +256,6 @@
return;
}
}
- else if (name.equals("old-output")) {
- if (value instanceof Boolean) {
- _oldOutputSystem = ((Boolean) value).booleanValue();
- return;
- }
- else if (value instanceof String) {
- _oldOutputSystem = ((String) value).equalsIgnoreCase("true");
- return;
- }
- }
else if (name.equals("indent-number")) {
if (value instanceof String) {
try {
@@ -395,40 +373,12 @@
public Transformer newTransformer()
throws TransformerConfigurationException
{
- if (_copyTransformer != null) {
- if (_uriResolver != null) {
- _copyTransformer.setURIResolver(_uriResolver);
- }
- return _copyTransformer;
- }
-
- XSLTC xsltc = new XSLTC();
- if (_debug) xsltc.setDebug(true);
- if (_disableInlining) xsltc.setTemplateInlining(false);
- xsltc.init();
-
- // Compile the default copy-stylesheet
- byte[] bytes = COPY_TRANSLET_CODE.getBytes();
- ByteArrayInputStream bytestream = new ByteArrayInputStream(bytes);
- InputSource input = new InputSource(bytestream);
- input.setSystemId(_defaultTransletName);
- byte[][] bytecodes = xsltc.compile(_defaultTransletName, input);
-
- // Check that the transformation went well before returning
- if (bytecodes == null) {
- ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR);
- throw new TransformerConfigurationException(err.toString());
- }
-
- // Create a Transformer object and store for other calls
- Templates templates = new TemplatesImpl(bytecodes, _defaultTransletName,
- xsltc.getOutputProperties(), _indentNumber, _oldOutputSystem);
-
- _copyTransformer = templates.newTransformer();
+ TransformerImpl result = new TransformerImpl(new Properties(),
+ _indentNumber, this);
if (_uriResolver != null) {
- _copyTransformer.setURIResolver(_uriResolver);
+ result.setURIResolver(_uriResolver);
}
- return _copyTransformer;
+ return result;
}
/**
@@ -556,7 +506,7 @@
}
return new TemplatesImpl(bytecodes, transletName,
- xsltc.getOutputProperties(), _indentNumber, _oldOutputSystem);
+ xsltc.getOutputProperties(), _indentNumber, this);
}
/**
@@ -571,7 +521,7 @@
throws TransformerConfigurationException
{
final TemplatesHandlerImpl handler =
- new TemplatesHandlerImpl(_indentNumber, _oldOutputSystem);
+ new TemplatesHandlerImpl(_indentNumber, this);
handler.init();
if (_uriResolver != null) {
handler.setURIResolver(_uriResolver);
@@ -772,5 +722,15 @@
// Falls through
}
return null;
+ }
+
+ public XMLReader getXMLReader() throws Exception {
+ if (_xmlReader == null) {
+ final SAXParserFactory pfactory
+ = SAXParserFactory.newInstance();
+ pfactory.setNamespaceAware(true);
+ _xmlReader = pfactory.newSAXParser().getXMLReader();
+ }
+ return _xmlReader;
}
}
1.6.10.4 +93 -37 xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerHandlerImpl.java
Index: TransformerHandlerImpl.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerHandlerImpl.java,v
retrieving revision 1.6.10.3
retrieving revision 1.6.10.4
diff -u -r1.6.10.3 -r1.6.10.4
--- TransformerHandlerImpl.java 6 Aug 2002 14:40:09 -0000 1.6.10.3
+++ TransformerHandlerImpl.java 13 Aug 2002 21:21:14 -0000 1.6.10.4
@@ -63,7 +63,9 @@
package org.apache.xalan.xsltc.trax;
import org.xml.sax.*;
+import org.xml.sax.ext.LexicalHandler;
import org.xml.sax.ext.DeclHandler;
+import org.xml.sax.helpers.DefaultHandler;
import javax.xml.transform.*;
import javax.xml.transform.sax.*;
@@ -72,6 +74,7 @@
import org.apache.xml.dtm.DTMManager;
import org.apache.xalan.xsltc.Translet;
+import org.apache.xalan.xsltc.TransletOutputHandler;
import org.apache.xalan.xsltc.dom.DOMImpl;
import org.apache.xalan.xsltc.dom.SAXImpl;
import org.apache.xalan.xsltc.dom.DOMBuilder;
@@ -89,7 +92,8 @@
private AbstractTranslet _translet = null;
private String _systemId;
private SAXImpl _dom = null;
- private DOMBuilder _handler = null;
+ private ContentHandler _handler = null;
+ private LexicalHandler _lexHandler = null;
private DTDMonitor _dtd = null;
private Result _result = null;
private Locator _locator = null;
@@ -97,17 +101,30 @@
private boolean _done = false; // Set in endDocument()
/**
+ * A flag indicating whether this transformer handler implements the
+ * identity transform.
+ */
+ private boolean _isIdentity = false;
+
+ /**
* Cosntructor - pass in reference to a TransformerImpl object
*/
protected TransformerHandlerImpl(TransformerImpl transformer) {
// Save the reference to the transformer
_transformer = transformer;
- // Get a reference to the translet wrapped inside the transformer
- _translet = _transformer.getTranslet();
+ if (transformer.isIdentity()) {
+ // Set initial handler to the empty handler
+ _handler = new DefaultHandler();
+ _isIdentity = true;
+ }
+ else {
+ // Get a reference to the translet wrapped inside the transformer
+ _translet = _transformer.getTranslet();
- // Create a new DTD monitor
- _dtd = new DTDMonitor();
+ // Create a new DTD monitor
+ _dtd = new DTDMonitor();
+ }
}
/**
@@ -150,8 +167,22 @@
public void setResult(Result result) throws IllegalArgumentException {
_result = result;
- // Run the transformation now, if not already done
- if (_done) {
+ if (_isIdentity) {
+ try {
+ // Connect this object with output system directly
+ TransletOutputHandler outputHandler =
+ _transformer.getOutputHandler(result);
+ _transformer.transferOutputProperties(outputHandler);
+
+ _handler = new SAX2TO(outputHandler);
+ _lexHandler = (LexicalHandler) _handler;
+ }
+ catch (TransformerException e) {
+ _result = null;
+ }
+ }
+ else if (_done) {
+ // Run the transformation now, if not already done
try {
_transformer.setDOM(_dom);
_transformer.transform(null, _result);
@@ -184,14 +215,20 @@
throw new SAXException(err.toString());
}
- // Create an internal DOM (not W3C) and get SAX2 input handler
- DTMManager dtmManager = XSLTCDTMManager.newInstance(
+ if (!_isIdentity) {
+ // Create an internal DOM (not W3C) and get SAX2 input handler
+ DTMManager dtmManager = XSLTCDTMManager.newInstance(
org.apache.xpath.objects.XMLStringFactoryImpl.getFactory());
- // Construct the DTM using the SAX events that come through
- _dom = (SAXImpl)dtmManager.getDTM(null, false, null, true, true);
- _handler = _dom.getBuilder();
+ // Construct the DTM using the SAX events that come through
+ _dom = (SAXImpl)dtmManager.getDTM(null, false, null, true, true);
+ _handler = _dom.getBuilder();
+ _lexHandler = (LexicalHandler) _handler;
+ // Set document URI
+ _dom.setDocumentURI(_systemId);
+ }
+ // Make sure to set any document locator that was squirreled away
if (_locator != null) {
_handler.setDocumentLocator(_locator);
}
@@ -208,22 +245,24 @@
// Signal to the DOMBuilder that the document is complete
_handler.endDocument();
- // Run the transformation now if we have a reference to a Result object
- if (_result != null) {
- try {
- _transformer.setDOM(_dom);
- _transformer.setDTDMonitor(_dtd); // for id/key
- _transformer.transform(null, _result);
- }
- catch (TransformerException e) {
- throw new SAXException(e);
+ if (!_isIdentity) {
+ // Run the transformation now if we have a reference to a Result object
+ if (_result != null) {
+ try {
+ _transformer.setDOM(_dom);
+ _transformer.setDTDMonitor(_dtd); // for id/key
+ _transformer.transform(null, _result);
+ }
+ catch (TransformerException e) {
+ throw new SAXException(e);
+ }
}
- }
- // Signal that the internal DOM is build (see 'setResult()').
- _done = true;
+ // Signal that the internal DOM is built (see 'setResult()').
+ _done = true;
- // Set this DOM as the transformer's DOM
- _transformer.setDOM(_dom);
+ // Set this DOM as the transformer's DOM
+ _transformer.setDOM(_dom);
+ }
}
/**
@@ -232,7 +271,8 @@
*/
public void startElement(String uri, String localName,
String qname, Attributes attributes)
- throws SAXException {
+ throws SAXException
+ {
_handler.startElement(uri, localName, qname, attributes);
}
@@ -241,7 +281,8 @@
* Receive notification of the end of an element.
*/
public void endElement(String namespaceURI, String localName, String qname)
- throws SAXException {
+ throws SAXException
+ {
_handler.endElement(namespaceURI, localName, qname);
}
@@ -250,7 +291,8 @@
* Receive notification of a processing instruction.
*/
public void processingInstruction(String target, String data)
- throws SAXException {
+ throws SAXException
+ {
_handler.processingInstruction(target, data);
}
@@ -258,14 +300,18 @@
* Implements org.xml.sax.ext.LexicalHandler.startCDATA()
*/
public void startCDATA() throws SAXException {
- _handler.startCDATA();
+ if (_lexHandler != null) {
+ _lexHandler.startCDATA();
+ }
}
/**
* Implements org.xml.sax.ext.LexicalHandler.endCDATA()
*/
public void endCDATA() throws SAXException {
- _handler.endCDATA();
+ if (_lexHandler != null) {
+ _lexHandler.endCDATA();
+ }
}
/**
@@ -275,7 +321,9 @@
public void comment(char[] ch, int start, int length)
throws SAXException
{
- _handler.comment(ch, start, length);
+ if (_lexHandler != null) {
+ _lexHandler.comment(ch, start, length);
+ }
}
/**
@@ -332,28 +380,36 @@
public void startDTD(String name, String publicId, String systemId)
throws SAXException
{
- _handler.startDTD(name, publicId, systemId);
+ if (_lexHandler != null) {
+ _lexHandler.startDTD(name, publicId, systemId);
+ }
}
/**
* Implements org.xml.sax.ext.LexicalHandler.endDTD()
*/
public void endDTD() throws SAXException {
- _handler.endDTD();
+ if (_lexHandler != null) {
+ _lexHandler.endDTD();
+ }
}
/**
* Implements org.xml.sax.ext.LexicalHandler.startEntity()
*/
public void startEntity(String name) throws SAXException {
- _handler.startEntity(name);
+ if (_lexHandler != null) {
+ _lexHandler.startEntity(name);
+ }
}
/**
* Implements org.xml.sax.ext.LexicalHandler.endEntity()
*/
public void endEntity(String name) throws SAXException {
- _handler.endEntity(name);
+ if (_lexHandler != null) {
+ _lexHandler.endEntity(name);
+ }
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org