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 ),
"𝟭" );
}
/**