You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sa...@apache.org on 2002/06/19 00:29:28 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output OutputBase.java SAXOutput.java SAXXMLOutput.java StreamHTMLOutput.java StreamOutput.java StreamXMLOutput.java
santiagopg 2002/06/18 15:29:27
Modified: java/src/org/apache/xalan/xsltc/compiler Output.java
java/src/org/apache/xalan/xsltc/runtime/output
OutputBase.java SAXOutput.java SAXXMLOutput.java
StreamHTMLOutput.java StreamOutput.java
StreamXMLOutput.java
Log:
Fixed problem with cdata-section-elements in xsl:output and namespaces.
Revision Changes Path
1.15 +12 -1 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Output.java
Index: Output.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Output.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- Output.java 17 Jun 2002 18:37:11 -0000 1.14
+++ Output.java 18 Jun 2002 22:29:27 -0000 1.15
@@ -215,6 +215,16 @@
_cdata = null;
}
else {
+ StringBuffer expandedNames = new StringBuffer();
+ StringTokenizer tokens = new StringTokenizer(_cdata);
+
+ // Make sure to store names in expanded form
+ while (tokens.hasMoreTokens()) {
+ expandedNames.append(parser.getQName(tokens.nextToken()).toString())
+ .append(' ');
+ }
+ _cdata = expandedNames.toString();
+
outputProperties.setProperty(OutputKeys.CDATA_SECTION_ELEMENTS, _cdata);
}
@@ -348,6 +358,7 @@
int index = cpg.addMethodref(TRANSLET_CLASS,
"addCdataElement",
"(Ljava/lang/String;)V");
+
StringTokenizer tokens = new StringTokenizer(_cdata);
while (tokens.hasMoreTokens()) {
il.append(DUP);
1.7 +39 -1 xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/OutputBase.java
Index: OutputBase.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/OutputBase.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- OutputBase.java 4 Jun 2002 20:55:37 -0000 1.6
+++ OutputBase.java 18 Jun 2002 22:29:27 -0000 1.7
@@ -250,6 +250,44 @@
}
}
+ /**
+ * Use a namespace prefix to lookup a namespace URI
+ */
+ protected String lookupNamespace(String prefix) {
+ final Stack stack = (Stack)_namespaces.get(prefix);
+ return stack != null && !stack.isEmpty() ? (String)stack.peek() : null;
+ }
+
+ /**
+ * Returns the local name of a qualified name. If the name has
+ * no prefix, then it works as the identity (SAX2).
+ */
+ protected static String getLocalName(String qname) {
+ final int col = qname.lastIndexOf(':');
+ return (col > 0) ? qname.substring(col + 1) : qname;
+ }
+
+ /**
+ * Returns the URI of an element or attribute. Note that default namespaces
+ * do not apply directly to attributes.
+ */
+ protected String getNamespaceURI(String qname, boolean isElement)
+ throws TransletException
+ {
+ String uri = EMPTYSTRING;
+ int col = qname.lastIndexOf(':');
+ final String prefix = (col > 0) ? qname.substring(0, col) : EMPTYSTRING;
+
+ if (prefix != EMPTYSTRING || isElement) {
+ uri = lookupNamespace(prefix);
+ if (uri == null && !prefix.equals(XMLNS_PREFIX)) {
+ BasisLibrary.runTimeError(BasisLibrary.NAMESPACE_PREFIX_ERR,
+ qname.substring(0, col));
+ }
+ }
+ return uri;
+ }
+
// -- Temporary
public void namespace(String prefix, String uri) throws TransletException { }
public void setType(int type) { }
1.12 +1 -10 xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/SAXOutput.java
Index: SAXOutput.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/SAXOutput.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- SAXOutput.java 11 Jun 2002 20:11:18 -0000 1.11
+++ SAXOutput.java 18 Jun 2002 22:29:27 -0000 1.12
@@ -131,15 +131,6 @@
// Redefined in SAXXMLOutput
}
- /**
- * Returns the local name of a qualified name. If the name has
- * no prefix, then it works as the identity (SAX2).
- */
- protected static String getLocalName(String qname) {
- final int col = qname.lastIndexOf(':');
- return (col > 0) ? qname.substring(col + 1) : qname;
- }
-
protected void closeStartTag() throws TransletException {
}
1.11 +16 -36 xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/SAXXMLOutput.java
Index: SAXXMLOutput.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/SAXXMLOutput.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- SAXXMLOutput.java 4 Jun 2002 20:55:37 -0000 1.10
+++ SAXXMLOutput.java 18 Jun 2002 22:29:27 -0000 1.11
@@ -140,10 +140,6 @@
_elementName = elementName;
_attributes.clear();
_startTagOpen = true;
-
- if (_cdata != null && _cdata.get(elementName) != null) {
- _cdataStack.push(new Integer(_depth));
- }
}
catch (SAXException e) {
throw new TransletException(e);
@@ -312,42 +308,26 @@
try {
_startTagOpen = false;
+ final String localName = getLocalName(_elementName);
+ final String uri = getNamespaceURI(_elementName, true);
+
// Now is time to send the startElement event
- _saxHandler.startElement(getNamespaceURI(_elementName, true),
- getLocalName(_elementName), _elementName, _attributes);
+ _saxHandler.startElement(uri, localName, _elementName,
+ _attributes);
+
+ if (_cdata != null) {
+ final StringBuffer expandedName = (uri == EMPTYSTRING) ?
+ new StringBuffer(_elementName) :
+ new StringBuffer(uri).append(':').append(localName);
+
+ if (_cdata.containsKey(expandedName.toString())) {
+ _cdataStack.push(new Integer(_depth));
+ }
+ }
}
catch (SAXException e) {
throw new TransletException(e);
}
- }
-
- /**
- * Returns the URI of an element or attribute. Note that default namespaces
- * do not apply directly to attributes.
- */
- private String getNamespaceURI(String qname, boolean isElement)
- throws TransletException
- {
- String uri = EMPTYSTRING;
- int col = qname.lastIndexOf(':');
- final String prefix = (col > 0) ? qname.substring(0, col) : EMPTYSTRING;
-
- if (prefix != EMPTYSTRING || isElement) {
- uri = lookupNamespace(prefix);
- if (uri == null && !prefix.equals(XMLNS_PREFIX)) {
- BasisLibrary.runTimeError(BasisLibrary.NAMESPACE_PREFIX_ERR,
- qname.substring(0, col));
- }
- }
- return uri;
- }
-
- /**
- * Use a namespace prefix to lookup a namespace URI
- */
- private String lookupNamespace(String prefix) {
- final Stack stack = (Stack)_namespaces.get(prefix);
- return stack != null && !stack.isEmpty() ? (String)stack.peek() : null;
}
protected void closeCDATA() throws SAXException {
1.11 +2 -2 xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/StreamHTMLOutput.java
Index: StreamHTMLOutput.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/StreamHTMLOutput.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- StreamHTMLOutput.java 18 Jun 2002 18:00:12 -0000 1.10
+++ StreamHTMLOutput.java 18 Jun 2002 22:29:27 -0000 1.11
@@ -415,7 +415,7 @@
.append(_encoding).append("\">");
}
- protected void closeStartTag() {
+ protected void closeStartTag() throws TransletException {
super.closeStartTag();
// Insert <META> tag directly after <HEAD> element in HTML output
1.14 +4 -2 xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/StreamOutput.java
Index: StreamOutput.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/StreamOutput.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- StreamOutput.java 7 Jun 2002 21:51:17 -0000 1.13
+++ StreamOutput.java 18 Jun 2002 22:29:27 -0000 1.14
@@ -71,6 +71,8 @@
import java.util.Vector;
+import org.apache.xalan.xsltc.TransletException;
+
abstract class StreamOutput extends OutputBase {
protected static final String AMP = "&";
@@ -296,7 +298,7 @@
}
}
- protected void closeStartTag() {
+ protected void closeStartTag() throws TransletException {
appendAttributes();
_buffer.append('>');
_startTagOpen = false;
1.14 +22 -6 xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/StreamXMLOutput.java
Index: StreamXMLOutput.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/output/StreamXMLOutput.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- StreamXMLOutput.java 11 Jun 2002 20:11:18 -0000 1.13
+++ StreamXMLOutput.java 18 Jun 2002 22:29:27 -0000 1.14
@@ -86,6 +86,8 @@
private static final String CDATA_ESC_START = "]]>&#";
private static final String CDATA_ESC_END = ";<![CDATA[";
+ private String _elementName;
+
public StreamXMLOutput(Writer writer, String encoding) {
super(writer, encoding);
initCDATA();
@@ -124,7 +126,7 @@
}
public void startElement(String elementName) throws TransletException {
-// System.out.println("startElement = " + elementName + " _indent = " + _indent);
+// System.out.println("startElement = " + elementName);
if (_startTagOpen) {
closeStartTag();
}
@@ -151,10 +153,7 @@
_depth++;
_startTagOpen = true;
-
- if (_cdata != null && _cdata.containsKey(elementName)) {
- _cdataStack.push(new Integer(_depth));
- }
+ _elementName = elementName;
}
public void endElement(String elementName) throws TransletException {
@@ -294,6 +293,23 @@
else if (prefix != EMPTYSTRING || uri != EMPTYSTRING) {
BasisLibrary.runTimeError(BasisLibrary.STRAY_NAMESPACE_ERR,
prefix, uri);
+ }
+ }
+
+ protected void closeStartTag() throws TransletException {
+ super.closeStartTag();
+
+ if (_cdata != null) {
+ final String localName = getLocalName(_elementName);
+ final String uri = getNamespaceURI(_elementName, true);
+
+ final StringBuffer expandedName = (uri == EMPTYSTRING) ?
+ new StringBuffer(_elementName) :
+ new StringBuffer(uri).append(':').append(localName);
+
+ if (_cdata.containsKey(expandedName.toString())) {
+ _cdataStack.push(new Integer(_depth));
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org