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