You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by tm...@apache.org on 2002/03/27 22:06:22 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom DOMBuilder.java DOMImpl.java
tmiller 02/03/27 13:06:22
Modified: java/src/org/apache/xalan/xsltc/dom DOMBuilder.java
DOMImpl.java
Log:
bug 2951 fix
Revision Changes Path
1.2 +2 -2 xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMBuilder.java
Index: DOMBuilder.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMBuilder.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DOMBuilder.java 12 Sep 2001 10:02:25 -0000 1.1
+++ DOMBuilder.java 27 Mar 2002 21:06:22 -0000 1.2
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: DOMBuilder.java,v 1.1 2001/09/12 10:02:25 morten Exp $
+ * @(#)$Id: DOMBuilder.java,v 1.2 2002/03/27 21:06:22 tmiller Exp $
*
* The Apache Software License, Version 1.1
*
@@ -64,4 +64,4 @@
import org.xml.sax.ContentHandler;
import org.xml.sax.ext.LexicalHandler;
-public interface DOMBuilder extends ContentHandler, LexicalHandler { }
+public interface DOMBuilder extends ExtendedSAX { }
1.67 +60 -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.66
retrieving revision 1.67
diff -u -r1.66 -r1.67
--- DOMImpl.java 13 Feb 2002 13:02:57 -0000 1.66
+++ DOMImpl.java 27 Mar 2002 21:06:22 -0000 1.67
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: DOMImpl.java,v 1.66 2002/02/13 13:02:57 tmiller Exp $
+ * @(#)$Id: DOMImpl.java,v 1.67 2002/03/27 21:06:22 tmiller Exp $
*
* The Apache Software License, Version 1.1
*
@@ -136,6 +136,9 @@
// Tracks which textnodes are whitespaces and which are not
private BitArray _whitespace; // takes xml:space into acc.
+ // Tracks which textnodes are not escaped
+ private BitArray _dontEscape = null;
+
// The URI to this document
private String _documentURI;
@@ -1980,6 +1983,7 @@
case ROOT:
return getNodeValue(_offsetOrChild[node]);
case TEXT:
+ // GTM - add escapign code here too.
case COMMENT:
return makeStringValue(node);
case PROCESSING_INSTRUCTION:
@@ -2162,6 +2166,13 @@
out.writeObject(_whitespace);
+ if (_dontEscape != null) {
+ out.writeObject(_dontEscape);
+ }
+ else {
+ out.writeObject(new BitArray(0));
+ }
+
out.flush();
}
@@ -2190,6 +2201,11 @@
_whitespace = (BitArray)in.readObject();
+ _dontEscape = (BitArray)in.readObject();
+ if (_dontEscape.size() == 0) {
+ _dontEscape = null;
+ }
+
_types = setupMapping(_namesArray);
}
@@ -2614,9 +2630,23 @@
_lengthOrAttr[node]));
break;
case TEXT:
+ boolean last = false;
+ boolean escapeBit = false;
+
+ if (_dontEscape != null) {
+ escapeBit = _dontEscape.getBit(node);
+ if (escapeBit) {
+ last = handler.setEscaping(false);
+ }
+ }
+
handler.characters(_text,
_offsetOrChild[node],
_lengthOrAttr[node]);
+
+ if (_dontEscape != null && escapeBit) {
+ handler.setEscaping(last);
+ }
break;
case ATTRIBUTE:
shallowCopy(node, handler);
@@ -2694,9 +2724,11 @@
case ROOT: // do nothing
return EMPTYSTRING;
case TEXT:
+
handler.characters(_text,
_offsetOrChild[node],
_lengthOrAttr[node]);
+
return null;
case PROCESSING_INSTRUCTION:
copyPI(node, handler);
@@ -2899,8 +2931,7 @@
* DOM builder's interface is pure SAX2 (must investigate)
*/
public TransletOutputHandler getOutputDomBuilder() {
- DOMBuilder builder = getBuilder();
- return new SAXAdapter(builder, builder);
+ return new SAXAdapter(new DOMBuilderImpl());
}
/**
@@ -2960,6 +2991,9 @@
private static final String XMLSPACE_STRING = "xml:space";
private static final String PRESERVE_STRING = "preserve";
+ private boolean _escaping = true;
+ private boolean _disableEscaping = false;
+
/**
* Default constructor for the DOMBuiler class
*/
@@ -3170,6 +3204,7 @@
*/
private int makeTextNode(boolean isWhitespace) {
if (_currentOffset > _baseOffset) {
+
final int node = nextNode();
final int limit = _currentOffset;
// Tag as whitespace node if the parser tells us that it is...
@@ -3188,6 +3223,14 @@
_type[node] = TEXT;
linkChildren(node);
storeTextRef(node);
+
+ if (_disableEscaping) {
+ if (_dontEscape == null) {
+ _dontEscape = new BitArray(_whitespace.size());
+ }
+ _dontEscape.setBit(node);
+ _disableEscaping = false;
+ }
return node;
}
return -1;
@@ -3280,6 +3323,9 @@
}
System.arraycopy(ch, start, _text, _currentOffset, length);
_currentOffset += length;
+
+ _disableEscaping = !_escaping;
+
}
/**
@@ -3587,6 +3633,11 @@
// Resize the '_whitespace' array (a BitArray instance)
_whitespace.resize(newSize);
+ // Resize the '_dontEscape' array (a BitArray instance)
+ if (_dontEscape != null) {
+ _dontEscape.resize(newSize);
+ }
+
// Resize the '_prefix' array
final short[] newPrefix = new short[newSize];
System.arraycopy(_prefix, 0, newPrefix, 0, length);
@@ -3655,6 +3706,12 @@
System.arraycopy(_length, 0, _lengthOrAttr, dst, len);
}
}
+
+ public boolean setEscaping(boolean value) {
+ final boolean temp = _escaping;
+ _escaping = value;
+ return temp;
+ }
} // end of DOMBuilder
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org