You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@apache.org on 2001/09/12 22:25:35 UTC

cvs commit: jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler ParserXJspSaxHandler.java

craigmcc    01/09/12 13:25:35

  Modified:    jasper/src/share/org/apache/jasper/compiler
                        ParserXJspSaxHandler.java
  Log:
  Fix for Bugzilla #3350 (character data was rearranged in output).  Patch
  by Kin-Man Chung <ki...@sun.com>
  
  PR: Bugzilla #3350
  Submitted by:	Mark Abbott <ma...@openwave.com>
  
  Revision  Changes    Path
  1.14      +17 -2     jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ParserXJspSaxHandler.java
  
  Index: ParserXJspSaxHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ParserXJspSaxHandler.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- ParserXJspSaxHandler.java	2001/04/27 18:09:31	1.13
  +++ ParserXJspSaxHandler.java	2001/09/12 20:25:35	1.14
  @@ -233,8 +233,9 @@
   
           // If previous node is a custom tag, call its
           // begin tag handler
  -        if (!name.equals("jsp:root")) {
  -            Node prevNode = (Node)stack.peek();
  +        Node prevNode = null;
  +        if (!stack.empty()) {
  +            prevNode = (Node) stack.peek();
               if (prevNode instanceof NodeTag) {
                   try {
                       processCustomTagBeginDoIt((NodeTag) prevNode, true);
  @@ -273,6 +274,16 @@
   		}
   		if (!isCustomTag) {
   		    // uninterpreted tag
  +                    // If the parent tag is also uninterpreted, then the
  +                    // characters have to be flushed, to preserve the order
  +                    // of the tags and characters that may appear in a XML
  +                    // fragment, such as <a>xyz<b></b></a>.
  +                    if ((prevNode != null) && prevNode.isUninterpretedTag() &&
  +                        (prevNode.getText() != null)) {
  +                        jspHandler.handleCharData(prevNode.start, start,
  +                                                  prevNode.getText());
  +                        prevNode.clearText();
  +                    }
   		    node.setUninterpreted(true);
   		    jspHandler.handleUninterpretedTagBegin(node.start, 
                               node.start, node.rawName, node.attrs);
  @@ -645,6 +656,10 @@
               return text == null 
   	    ? null
   	    : text.toString().toCharArray();
  +        }
  +
  +        void clearText() {
  +            text = null;
           }
   
   	boolean isRoot() {