You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mo...@apache.org on 2001/05/21 17:13:24 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/runtime SAXAdapter.java TextOutput.java TransletOutputBase.java
morten 01/05/21 08:13:24
Modified: java/src/org/apache/xalan/xsltc TransletOutputHandler.java
java/src/org/apache/xalan/xsltc/compiler LiteralElement.java
XslAttribute.java XslElement.java
java/src/org/apache/xalan/xsltc/compiler/util
MethodGenerator.java
java/src/org/apache/xalan/xsltc/dom DOMImpl.java
java/src/org/apache/xalan/xsltc/runtime SAXAdapter.java
TextOutput.java TransletOutputBase.java
Log:
Performance: Improved the way in which translets pass namespace declarations
to the output post-processor. Previously this was done by constructing a
"xmlns:<prefix>" string for the attribute name and an "<uri>" string for the
attribute value, and then passing the two strings to the handlers
attribute() method. The output handler now as a namespace() method that
receives the prefix/uri pair as two separate, clean strings.
PR: none
Obtained from: n/a
Submitted by: morten@xml.apache.org
Reviewed by: morten@xml.apache.org
Revision Changes Path
1.3 +2 -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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TransletOutputHandler.java 2001/05/17 14:28:50 1.2
+++ TransletOutputHandler.java 2001/05/21 15:12:14 1.3
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: TransletOutputHandler.java,v 1.2 2001/05/17 14:28:50 tmiller Exp $
+ * @(#)$Id: TransletOutputHandler.java,v 1.3 2001/05/21 15:12:14 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -75,6 +75,7 @@
public void endElement(String elementName) throws TransletException;
public void attribute(String attributeName, String attributeValue)
throws TransletException;
+ public void namespace(String prefix, String uri) throws TransletException;
public void comment(String comment) throws TransletException;
public void processingInstruction(String target, String data)
throws TransletException;
1.4 +11 -11 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LiteralElement.java
Index: LiteralElement.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LiteralElement.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- LiteralElement.java 2001/05/02 10:24:53 1.3
+++ LiteralElement.java 2001/05/21 15:12:26 1.4
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: LiteralElement.java,v 1.3 2001/05/02 10:24:53 morten Exp $
+ * @(#)$Id: LiteralElement.java,v 1.4 2001/05/21 15:12:26 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -82,6 +82,9 @@
private Hashtable _accessedPrefixes = null;
private LiteralElement _parent;
+ private final static String XMLNS_STRING = "xmlns";
+ private final static String EMPTY_STRING = "";
+
/**
* Returns the QName for this literal element
*/
@@ -158,9 +161,9 @@
// Treat default namespace as "" and not null
if (prefix == null)
- prefix = "";
- else if (prefix.equals("xmlns"))
- return("xmlns:"+localname);
+ prefix = EMPTY_STRING;
+ else if (prefix.equals(XMLNS_STRING))
+ return(XMLNS_STRING);
// Check if we must translate the prefix
final String alternative = stable.lookupPrefixAlias(prefix);
@@ -177,7 +180,7 @@
registerNamespace(prefix,uri,stable,false);
// Construct the new name for the element (may be unchanged)
- if (!prefix.equals(""))
+ if (!prefix.equals(EMPTY_STRING))
return(prefix+":"+localname);
else
return(localname);
@@ -228,7 +231,7 @@
else {
// Namespace declarations are handled separately !!!
final String name = translateQName(qname,stable);
- if (!name.startsWith("xmlns"))
+ if (name != XMLNS_STRING)
addElement(new LiteralAttribute(name, val, parser));
}
}
@@ -295,12 +298,9 @@
final String prefix = (String)e.nextElement();
final String uri = (String)_accessedPrefixes.get(prefix);
il.append(methodGen.loadHandler());
- if (prefix.equals(""))
- il.append(new PUSH(cpg,"xmlns"));
- else
- il.append(new PUSH(cpg,"xmlns:"+prefix));
+ il.append(new PUSH(cpg,prefix));
il.append(new PUSH(cpg,uri));
- il.append(methodGen.attribute());
+ il.append(methodGen.namespace());
}
}
1.3 +3 -6 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslAttribute.java
Index: XslAttribute.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslAttribute.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XslAttribute.java 2001/05/02 10:25:20 1.2
+++ XslAttribute.java 2001/05/21 15:12:31 1.3
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: XslAttribute.java,v 1.2 2001/05/02 10:25:20 morten Exp $
+ * @(#)$Id: XslAttribute.java,v 1.3 2001/05/21 15:12:31 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -201,12 +201,9 @@
if (_namespace != null) {
// public void attribute(final String name, final String value)
il.append(methodGen.loadHandler());
- if (_prefix == "")
- il.append(new PUSH(cpg,"xmlns"));
- else
- il.append(new PUSH(cpg,"xmlns:"+_prefix));
+ il.append(new PUSH(cpg,_prefix));
_namespace.translate(classGen,methodGen);
- il.append(methodGen.attribute());
+ il.append(methodGen.namespace());
}
// Save the current handler base on the stack
1.4 +3 -6 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslElement.java
Index: XslElement.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslElement.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XslElement.java 2001/05/02 10:25:22 1.3
+++ XslElement.java 2001/05/21 15:12:33 1.4
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: XslElement.java,v 1.3 2001/05/02 10:25:22 morten Exp $
+ * @(#)$Id: XslElement.java,v 1.4 2001/05/21 15:12:33 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -197,12 +197,9 @@
if (_namespace != null) {
// public void attribute(final String name, final String value)
il.append(methodGen.loadHandler());
- if (_namespacePrefix == "")
- il.append(new PUSH(cpg,"xmlns"));
- else
- il.append(new PUSH(cpg,"xmlns:"+_namespacePrefix));
+ il.append(new PUSH(cpg,_namespacePrefix));
_namespace.translate(classGen,methodGen);
- il.append(methodGen.attribute());
+ il.append(methodGen.namespace());
}
}
1.2 +15 -1 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/MethodGenerator.java
Index: MethodGenerator.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/MethodGenerator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MethodGenerator.java 2001/04/17 18:52:16 1.1
+++ MethodGenerator.java 2001/05/21 15:12:51 1.2
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: MethodGenerator.java,v 1.1 2001/04/17 18:52:16 sboag Exp $
+ * @(#)$Id: MethodGenerator.java,v 1.2 2001/05/21 15:12:51 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -95,6 +95,7 @@
private final Instruction _startDocument;
private final Instruction _endDocument;
private final Instruction _attribute;
+ private final Instruction _namespace;
private final Instruction _setStartNode;
private final Instruction _nextNode;
@@ -134,6 +135,15 @@
+ STRING_SIG
+ ")V");
_attribute = new INVOKEINTERFACE(attribute, 3);
+
+ final int namespace =
+ cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "namespace",
+ "("
+ + STRING_SIG
+ + STRING_SIG
+ + ")V");
+ _namespace = new INVOKEINTERFACE(namespace, 3);
int index = cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
"startDocument",
@@ -293,6 +303,10 @@
public final Instruction attribute() {
return _attribute;
+ }
+
+ public final Instruction namespace() {
+ return _namespace;
}
public Instruction loadCurrentNode() {
1.7 +2 -3 xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java
Index: DOMImpl.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- DOMImpl.java 2001/05/21 09:42:43 1.6
+++ DOMImpl.java 2001/05/21 15:13:00 1.7
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: DOMImpl.java,v 1.6 2001/05/21 09:42:43 morten Exp $
+ * @(#)$Id: DOMImpl.java,v 1.7 2001/05/21 15:13:00 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -2229,7 +2229,7 @@
if (col > 0) {
final String prefix = generateNamespacePrefix();
handler.startElement(prefix+':'+name.substring(col+1));
- handler.attribute("xmlns:"+prefix, name.substring(0,col));
+ handler.namespace(prefix, name.substring(0,col));
}
else {
handler.startElement(name);
@@ -2246,8 +2246,7 @@
}
else {
final String prefix = generateNamespacePrefix();
- handler.attribute("xmlns:"+prefix,
- aname.substring(0,col));
+ handler.namespace(prefix,aname.substring(0,col));
handler.attribute(prefix+':'+aname.substring(col+1),
makeStringValue(attr));
}
1.4 +6 -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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SAXAdapter.java 2001/05/17 14:27:42 1.3
+++ SAXAdapter.java 2001/05/21 15:13:08 1.4
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: SAXAdapter.java,v 1.3 2001/05/17 14:27:42 tmiller Exp $
+ * @(#)$Id: SAXAdapter.java,v 1.4 2001/05/21 15:13:08 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -145,6 +145,11 @@
}
}
+ public void namespace(String prefix, String uri)
+ throws TransletException {
+ // ???
+ }
+
public void comment(String comment) throws TransletException {
try {
maybeEmitStartElement();
1.5 +8 -14 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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TextOutput.java 2001/05/17 14:27:44 1.4
+++ TextOutput.java 2001/05/21 15:13:11 1.5
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: TextOutput.java,v 1.4 2001/05/17 14:27:44 tmiller Exp $
+ * @(#)$Id: TextOutput.java,v 1.5 2001/05/21 15:13:11 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -552,7 +552,7 @@
if (_startTagOpen) {
// Intercept namespace declarations and handle them separately
if (name.startsWith("xmlns"))
- declareNamespace(name,value);
+ namespace(name.substring(6),value);
else
_attributes.add(name,escapeChars(value));
}
@@ -720,23 +720,17 @@
* declaration will not be include if the namespace is already in scope
* with the same prefix.
*/
- public void declareNamespace(final String name, final String uri)
+ public void namespace(final String prefix, final String uri)
throws TransletException {
try {
- if (_startTagOpen) {
- if (name.indexOf(':') == -1)
- pushNamespace(EMPTYSTRING,uri);
- else
- pushNamespace(name.substring(6),uri);
- }
- else if (_cdataTagOpen) {
+ if (_startTagOpen)
+ pushNamespace(prefix, uri);
+ else if (_cdataTagOpen)
throw new TransletException("namespace declaration within "+
"CDATA element");
- }
- else {
- throw new TransletException("namespace declaration '"+name+
+ else
+ throw new TransletException("namespace declaration '"+prefix+
"'='"+uri+"' outside of element");
- }
}
catch (SAXException e) {
throw new TransletException(e);
1.3 +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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TransletOutputBase.java 2001/05/17 14:27:47 1.2
+++ TransletOutputBase.java 2001/05/21 15:13:14 1.3
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: TransletOutputBase.java,v 1.2 2001/05/17 14:27:47 tmiller Exp $
+ * @(#)$Id: TransletOutputBase.java,v 1.3 2001/05/21 15:13:14 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -74,6 +74,8 @@
public void startElement(String elementName) throws TransletException {}
public void endElement(String elementName) throws TransletException {}
public void attribute(String attributeName, String attributeValue)
+ throws TransletException {}
+ public void namespace(String prefix, String uri)
throws TransletException {}
public void comment(String comment) throws TransletException {}
public void processingInstruction(String target, String data)
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org