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 ), "ä" ); + assertEquals( HtmlTools.escapeHTML( "\u00e4", false ), "ä" ); + assertEquals( HtmlTools.escapeHTML( "\uD835\uDFED", false ), "𝟭" ); } /**