antonio     2004/06/27 19:40:10

  Modified:    .        status.xml
               src/java/org/apache/cocoon/generation
                        JXTemplateGenerator.java
               src/webapp/samples/flow/jxcalc/screens getNumberA.xml
  Log:
  Fix Bug #27133: JxTemplateGenerator eats backslash-characters
  
  Revision  Changes    Path
  1.376     +4 -1      cocoon-2.1/status.xml
  
  Index: status.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/status.xml,v
  retrieving revision 1.375
  retrieving revision 1.376
  diff -u -r1.375 -r1.376
  --- status.xml        27 Jun 2004 17:40:10 -0000      1.375
  +++ status.xml        28 Jun 2004 02:40:10 -0000      1.376
  @@ -204,6 +204,9 @@
   
     <changes>
    <release version="@version@" date="@date@">
  +   <action dev="AG" type="fix" fixes-bug="27133">
  +     Fix JxTemplateGenerator eats backslash-characters
  +   </action>
      <action dev="AG" type="fix" fixes-bug="25083">
        Add new &lt;jx:comment&gt; tag. XML comments are no more parsed. Sample:
        
  
  
  
  1.49      +52 -74    
cocoon-2.1/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java
  
  Index: JXTemplateGenerator.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- JXTemplateGenerator.java  27 Jun 2004 17:40:10 -0000      1.48
  +++ JXTemplateGenerator.java  28 Jun 2004 02:40:10 -0000      1.49
  @@ -1039,39 +1039,30 @@
                               } else {
                                   buf.append(c);
                               }
  -                        } else {
  -                            if (c == '\\') {
  -                                ch = in.read();
  -                                if (ch == -1) {
  -                                    buf.append('\\');
  -                                } else {
  -                                    buf.append((char)ch);
  -                                }
  -                            } else if (c == '$' || c == '#') {
  -                                ch = in.read();
  -                                if (ch == '{') {
  -                                    xpath = c == '#';
  -                                    inExpr = true;
  -                                    if (buf.length() > 0) {
  -                                        char[] charArray =
  -                                            new char[buf.length()];
  -
  -                                        buf.getChars(0, buf.length(),
  -                                                     charArray, 0);
  -                                        substitutions.add(charArray);
  -                                        buf.setLength(0);
  -                                    }
  -                                    continue top;
  -                                } else {
  -                                    buf.append(c);
  -                                    if (ch != -1) {
  -                                        c = (char)ch;
  -                                        continue processChar;
  -                                    }
  +                        } else if (c == '$' || c == '#') {
  +                            ch = in.read();
  +                            if (ch == '{') {
  +                                xpath = c == '#';
  +                                inExpr = true;
  +                                if (buf.length() > 0) {
  +                                    char[] charArray =
  +                                        new char[buf.length()];
  +
  +                                    buf.getChars(0, buf.length(),
  +                                                 charArray, 0);
  +                                    substitutions.add(charArray);
  +                                    buf.setLength(0);
                                   }
  +                                continue top;
                               } else {
                                   buf.append(c);
  +                                if (ch != -1) {
  +                                    c = (char)ch;
  +                                    continue processChar;
  +                                }
                               }
  +                        } else {
  +                            buf.append(c);
                           }
                           break;
                       }
  @@ -1273,34 +1264,25 @@
                                   } else {
                                       buf.append(c);
                                   }
  -                            } else {
  -                                if (c == '\\') {
  -                                    ch = in.read();
  -                                    if (ch == -1) {
  -                                        buf.append('\\');
  -                                    } else {
  -                                        buf.append((char)ch);
  -                                    }
  -                                } if (c == '$' || c == '#') {
  -                                    ch = in.read();
  -                                    if (ch == '{') {
  -                                        if (buf.length() > 0) {
  -                                            substEvents.add(new 
Literal(buf.toString()));
  -                                            buf.setLength(0);
  -                                        }
  -                                        inExpr = true;
  -                                        xpath = c == '#';
  -                                        continue top;
  -                                    } else {
  -                                        buf.append(c);
  -                                        if (ch != -1) {
  -                                            c = (char)ch;
  -                                            continue processChar;
  -                                        }
  +                            } else if (c == '$' || c == '#') {
  +                                ch = in.read();
  +                                if (ch == '{') {
  +                                    if (buf.length() > 0) {
  +                                        substEvents.add(new 
Literal(buf.toString()));
  +                                        buf.setLength(0);
                                       }
  +                                    inExpr = true;
  +                                    xpath = c == '#';
  +                                    continue top;
                                   } else {
                                       buf.append(c);
  +                                    if (ch != -1) {
  +                                        c = (char)ch;
  +                                        continue processChar;
  +                                    }
                                   }
  +                            } else {
  +                                buf.append(c);
                               }
                               break;
                           }
  @@ -3161,15 +3143,7 @@
                                                   ev.location, exc);
                   }
                   if (value == null) {
  -                    DOMBuilder builder = new DOMBuilder();
  -                    builder.startDocument();
  -                    builder.startElement(NS, "set", "set", EMPTY_ATTRS);
  -                    execute(builder, jexlContext, jxpathContext, macroCall,
  -                            startSet.next, startSet.endInstruction);
  -                    builder.endElement(NS, "set", "set");
  -                    builder.endDocument();
  -                    Node node = builder.getDocument().getDocumentElement();
  -                    NodeList nodeList = node.getChildNodes();
  +                    NodeList nodeList = toDOMNodeList("set", startSet, 
jexlContext, macroCall);
                       // JXPath doesn't handle NodeList, so convert it to an 
array
                       int len = nodeList.getLength();
                       Node[] nodeArr = new Node[len];
  @@ -3384,17 +3358,8 @@
               } else if (ev instanceof StartComment) {
                   StartComment startJXComment = (StartComment)ev;
                   // Parse the body of the comment
  -                DOMBuilder builder = new DOMBuilder();
  -                builder.startDocument();
  -                builder.startElement(NS, "comment", "comment", EMPTY_ATTRS);
  -                execute(builder, jexlContext, jxpathContext, macroCall,
  -                        startJXComment.next, startJXComment.endInstruction);
  -                builder.endElement(NS, "comment", "comment");
  -                builder.endDocument();
  -                Node node = builder.getDocument().getDocumentElement();
  -                NodeList nodeList = node.getChildNodes();
  -                // JXPath doesn't handle NodeList, so convert
  -                // it to an array
  +                NodeList nodeList = toDOMNodeList("comment", startJXComment, 
jexlContext, macroCall);
  +                // JXPath doesn't handle NodeList, so convert it to an array
                   int len = nodeList.getLength();
                   final StringBuffer buf = new StringBuffer();
                   Properties omit = XMLUtils.createPropertiesForXML(true);
  @@ -3669,5 +3634,18 @@
           if (startEvent == null)
                return null;
           return startEvent.templateProperties.get(propertyName);
  +     }
  +     
  +     private NodeList toDOMNodeList(String elementName, StartInstruction si,
  +             MyJexlContext jexlContext, StartElement macroCall) throws 
SAXException{
  +        DOMBuilder builder = new DOMBuilder();
  +        builder.startDocument();
  +        builder.startElement(NS, elementName, elementName, EMPTY_ATTRS);
  +        execute(builder, jexlContext, jxpathContext, macroCall,
  +                si.next, si.endInstruction);
  +        builder.endElement(NS, elementName, elementName);
  +        builder.endDocument();
  +        Node node = builder.getDocument().getDocumentElement();
  +        return node.getChildNodes();
        }
   }
  
  
  
  1.6       +5 -3      
cocoon-2.1/src/webapp/samples/flow/jxcalc/screens/getNumberA.xml
  
  Index: getNumberA.xml
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/webapp/samples/flow/jxcalc/screens/getNumberA.xml,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- getNumberA.xml    27 Jun 2004 17:40:10 -0000      1.5
  +++ getNumberA.xml    28 Jun 2004 02:40:10 -0000      1.6
  @@ -32,8 +32,10 @@
       <content>
         <jx:comment>
                The "comment" tag allows to insert comments in the result file.
  -             JXTemplate Expresions are parsed. Sample:
  -     This is the continuation id: #{$cocoon/continuation/id}
  +             JXTemplate Expresions are parsed. Samples:
  +
  +         This is the continuation id: #{$cocoon/continuation/id}
  +         A backslash dir reference: d:\cocoon\
         </jx:comment>
         <form method="post" action="continue.#{$cocoon/continuation/id}">
           <para>Enter value of <strong>a</strong>: <input type="text" 
name="a"/></para>
  
  
  

Reply via email to