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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to