tcurdt      2003/10/07 08:13:20

  Modified:    src/java/org/apache/cocoon/components/language/markup/xsp
                        XSLTExtension.java
               src/java/org/apache/cocoon/components/language/markup/xsp/java
                        xsp.xsl
               src/java/org/apache/cocoon/components/language/programming/java
                        JavaLanguage.java
               
src/java/org/apache/cocoon/components/language/programming/javascript
                        JavascriptLanguage.java
  Log:
  always encode to UTF-8 but only sometimes quote as Java String,
  fixes bug #18900
  
  Revision  Changes    Path
  1.2       +48 -15    
cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/XSLTExtension.java
  
  Index: XSLTExtension.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/XSLTExtension.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XSLTExtension.java        9 Mar 2003 00:08:54 -0000       1.1
  +++ XSLTExtension.java        7 Oct 2003 15:13:20 -0000       1.2
  @@ -61,14 +61,15 @@
   
       /**
        * Escapes '"' and '\' characters in a String (add a '\' before them) so 
that it can
  -     * be inserted in java source.
  +     * be inserted in java source + quote special characters as utf-8
        */
  -    public static String escapeString(String string) {
  +    public static String escapeJavaString(String string) {
           char chr[] = string.toCharArray();
           StringBuffer buffer = new StringBuffer();
   
           for (int i = 0; i < chr.length; i++) {
  -            switch (chr[i]) {
  +            char c = chr[i];
  +            switch (c) {
                   case '\t':
                       buffer.append("\\t");
                       break;
  @@ -87,23 +88,49 @@
                   case '"':
                   case '\\':
                       buffer.append('\\');
  -                    buffer.append(chr[i]);
  +                    buffer.append(c);
                       break;
                   default:
  -                    if (' ' <= chr[i] && chr[i] <= 127) {
  -                        buffer.append(chr[i]);
  +                    if (' ' <= c && c <= 127) {
  +                        buffer.append(c);
                       } else {
                           buffer.append("\\u");
  -                        buffer.append(int2digit(chr[i] >> 12));
  -                        buffer.append(int2digit(chr[i] >> 8));
  -                        buffer.append(int2digit(chr[i] >> 4));
  -                        buffer.append(int2digit(chr[i]));
  +                        buffer.append(int2digit(c >> 12));
  +                        buffer.append(int2digit(c >> 8));
  +                        buffer.append(int2digit(c >> 4));
  +                        buffer.append(int2digit(c));
                       }
                       break;
               }
           }
   
  -        return buffer.toString();
  +        final String encoded = buffer.toString();
  +        return encoded;
  +    }
  +
  +    /**
  +     * quote special characters as utf-8
  +     * TC: it's code doublication but that way we don't
  +     *     have to iterate through the StringBuffer twice
  +     */
  +    public static String escapeString(String string) {
  +        char chr[] = string.toCharArray();
  +        StringBuffer buffer = new StringBuffer();
  +        for (int i = 0; i < chr.length; i++) {
  +            char c = chr[i];
  +            if (c <= 127) {
  +                buffer.append(c);
  +            } else {
  +                buffer.append("\\u");
  +                buffer.append(int2digit(c >> 12));
  +                buffer.append(int2digit(c >> 8));
  +                buffer.append(int2digit(c >> 4));
  +                buffer.append(int2digit(c));
  +            }
  +        }
  +
  +        final String encoded = buffer.toString();
  +        return encoded;
       }
   
       private static char int2digit(int x) {
  @@ -120,11 +147,15 @@
           return escapeString(string);
       }
   
  +    public String escapeJava(String string) {
  +        return escapeJavaString(string);
  +    }
  +
  +
       /**
        * Counts amount of spaces in the input line from the beginning
        * to the first new line symbol and returns a string with this
        * amount of spaces.
  -     */
       public String prefix(String string) {
           char chr[] = string.toCharArray();
           int i;
  @@ -154,12 +185,12 @@
           }
           return buffer.toString();
       }
  +     */
   
       /**
        * Counts amount of spaces in the input line from the end
        * to the last new line symbol and returns a string with this
        * amount of spaces.
  -     */
       public String suffix(String string) {
           char chr[] = string.toCharArray();
   
  @@ -179,4 +210,6 @@
           }
           return buffer.toString();
       }
  -}
  +     */
  +
  + }
  
  
  
  1.4       +4 -4      
cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/java/xsp.xsl
  
  Index: xsp.xsl
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/java/xsp.xsl,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- xsp.xsl   13 Jul 2003 17:16:54 -0000      1.3
  +++ xsp.xsl   7 Oct 2003 15:13:20 -0000       1.4
  @@ -516,10 +516,10 @@
     <xsl:template match="text()">
       <xsl:choose>
         <xsl:when test="namespace-uri(..) = $xsp-uri and (local-name(..) = 
'logic' or local-name(..) = 'expr')">
  -        <xsl:value-of select="."/>
  +        <xsl:value-of select="XSLTExtension:escape($extension, .)"/>
         </xsl:when>
         <xsl:otherwise>
  -        this.characters("<xsl:value-of 
select="XSLTExtension:escape($extension, .)"/>");
  +        this.characters("<xsl:value-of 
select="XSLTExtension:escapeJava($extension, .)"/>");
         </xsl:otherwise>
       </xsl:choose>
     </xsl:template>
  
  
  
  1.3       +2 -2      
cocoon-2.1/src/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java
  
  Index: JavaLanguage.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JavaLanguage.java 20 Mar 2003 04:12:49 -0000      1.2
  +++ JavaLanguage.java 7 Oct 2003 15:13:20 -0000       1.3
  @@ -268,7 +268,7 @@
        * @return The escaped string
        */
       public String quoteString(String constant) {
  -        return XSLTExtension.escapeString(constant);
  +        return XSLTExtension.escapeJavaString(constant);
       }
   
       /**
  
  
  
  1.2       +2 -2      
cocoon-2.1/src/java/org/apache/cocoon/components/language/programming/javascript/JavascriptLanguage.java
  
  Index: JavascriptLanguage.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/programming/javascript/JavascriptLanguage.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- JavascriptLanguage.java   9 Mar 2003 00:09:01 -0000       1.1
  +++ JavascriptLanguage.java   7 Oct 2003 15:13:20 -0000       1.2
  @@ -159,7 +159,7 @@
       }
   
       public String quoteString(String constant) {
  -        return XSLTExtension.escapeString(constant);
  +        return XSLTExtension.escapeJavaString(constant);
       }
   
       /**
  
  
  

Reply via email to