Author: vsiveton
Date: Mon May 18 14:21:29 2009
New Revision: 775964

URL: http://svn.apache.org/viewvc?rev=775964&view=rev
Log:
o update escapeHTML() to take care of high surrogate char ie 𝟭
o added test case

Modified:
    
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/HtmlTools.java
    
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/util/HtmlToolsTest.java

Modified: 
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/HtmlTools.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/HtmlTools.java?rev=775964&r1=775963&r2=775964&view=diff
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/HtmlTools.java
 (original)
+++ 
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/HtmlTools.java
 Mon May 18 14:21:29 2009
@@ -28,7 +28,7 @@
 import org.apache.commons.lang.StringEscapeUtils;
 
 import org.apache.maven.doxia.markup.HtmlMarkup;
-
+import org.apache.xerces.util.XMLChar;
 
 /**
  * The <code>HtmlTools</code> class defines methods to HTML handling.
@@ -134,7 +134,7 @@
 
         for ( int i = 0; i < length; ++i )
         {
-            char c = text.charAt( i );
+            char c = text.charAt(i);
             switch ( c )
             {
                 case '<':
@@ -163,8 +163,31 @@
                         }
                         else
                         {
-                            buffer.append( "&#" );
-                            buffer.append( (int) c );
+                            buffer.append( "&#x" );
+                            if ( XMLChar.isHighSurrogate( c ) )
+                            {
+                                int c2 = text.charAt( ++i );
+                                if ( XMLChar.isLowSurrogate( c2 ) )
+                                {
+                                    int sup = XMLChar.supplemental( c, (char) 
c2 );
+                                    if ( !XMLChar.isValid( sup ) )
+                                    {
+                                        throw new IllegalArgumentException( 
"Invalid XML character "
+                                            + Integer.toString( sup, 16 ) + " 
in " + text );
+                                    }
+
+                                    buffer.append( Integer.toHexString( sup ) 
);
+                                }
+                                else
+                                {
+                                    throw new IllegalArgumentException( 
"Invalid XML character "
+                                        + Integer.toString( c2, 16 ) + " in " 
+ text );
+                                }
+                            }
+                            else
+                            {
+                                buffer.append( Integer.toHexString( c ) );
+                            }
                             buffer.append( ';' );
                         }
                     }

Modified: 
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/util/HtmlToolsTest.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/util/HtmlToolsTest.java?rev=775964&r1=775963&r2=775964&view=diff
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/util/HtmlToolsTest.java
 (original)
+++ 
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/util/HtmlToolsTest.java
 Mon May 18 14:21:29 2009
@@ -45,7 +45,8 @@
 
         // xml mode
         assertEquals( HtmlTools.escapeHTML( "\u00e4", true ), "\u00e4" );
-        assertEquals( HtmlTools.escapeHTML( "\u00e4", false ), "&#228;" );
+        assertEquals( HtmlTools.escapeHTML( "\u00e4", false ), "&#xe4;" );
+        assertEquals( HtmlTools.escapeHTML( "\uD835\uDFED", false ), 
"&#x1d7ed;" );
     }
 
     /**


Reply via email to