Author: ltheussl Date: Wed Apr 29 08:05:50 2009 New Revision: 769698 URL: http://svn.apache.org/viewvc?rev=769698&view=rev Log: Restore old behavior of encoding ids: non-ASCII characters are stripped to make links more readable.
Modified: maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/XhtmlBaseParser.java maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/DoxiaUtils.java 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/DoxiaUtilsTest.java maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/util/HtmlToolsTest.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-fml/src/main/java/org/apache/maven/doxia/module/fml/FmlParser.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java Modified: maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/XhtmlBaseParser.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/XhtmlBaseParser.java?rev=769698&r1=769697&r2=769698&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/XhtmlBaseParser.java (original) +++ maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/XhtmlBaseParser.java Wed Apr 29 08:05:50 2009 @@ -663,7 +663,7 @@ { getLog().warn( "Modified invalid anchor name: " + id ); - return DoxiaUtils.encodeId( id ); + return DoxiaUtils.encodeId( id, true ); } return id; Modified: maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java?rev=769698&r1=769697&r2=769698&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java (original) +++ maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java Wed Apr 29 08:05:50 2009 @@ -1467,7 +1467,7 @@ if ( !DoxiaUtils.isValidId( id ) ) { - id = DoxiaUtils.encodeId( name ); + id = DoxiaUtils.encodeId( name, true ); getLog().warn( "Modified invalid anchor name: " + name ); } Modified: maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/DoxiaUtils.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/DoxiaUtils.java?rev=769698&r1=769697&r2=769698&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/DoxiaUtils.java (original) +++ maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/DoxiaUtils.java Wed Apr 29 08:05:50 2009 @@ -33,6 +33,8 @@ public class DoxiaUtils { + private static final int MINUS_ONE = 0xFF; + /** * Checks if the given string corresponds to an internal link, * ie it is a link to an anchor within the same document. @@ -91,6 +93,22 @@ * Construct a valid Doxia id. * * <p> + * This method is equivalent to {...@link #encodeId(java.lang.String, boolean) encodeId( id, false )}. + * </p> + * + * @param id The id to be encoded. + * @return The trimmed and encoded id, or null if id is null. + * @see #encodeId(java.lang.String, boolean) + */ + public static String encodeId( String id ) + { + return encodeId( id, false ); + } + + /** + * Construct a valid Doxia id. + * + * <p> * A valid Doxia id obeys the same constraints as an HTML ID or NAME token. * According to the <a href="http://www.w3.org/TR/html4/types.html#type-name"> * HTML 4.01 specification section 6.2 SGML basic types</a>: @@ -117,8 +135,8 @@ * <li>If the first character is not a letter, prepend the id with the letter 'a'</li> * <li>Any spaces are replaced with an underscore '_'</li> * <li> - * Any characters not matching the above pattern are replaced according to the rules - * specified in the + * Any characters not matching the above pattern are either dropped, + * or replaced according to the rules specified in the * <a href="http://www.w3.org/TR/html4/appendix/notes.html#non-ascii-chars">HTML specs</a>. * </li> * </ol> @@ -142,9 +160,13 @@ * </pre> * * @param id The id to be encoded. + * @param chop true if non-ASCII characters should be ignored. + * If false, any non-ASCII characters will be replaced as specified above. * @return The trimmed and encoded id, or null if id is null. + * + * @since 1.1.1 */ - public static String encodeId( String id ) + public static String encodeId( String id, boolean chop ) { if ( id == null ) { @@ -173,7 +195,7 @@ { buffer.append( c ); } - else + else if ( !chop ) { char[] unicode = new char[1]; byte[] bytes; @@ -190,7 +212,7 @@ for ( int j = 0; j < bytes.length; ++j ) { - String hex = Integer.toHexString( bytes[j] & 0xFF ); + String hex = byteToHex( bytes[j] ); buffer.append( '%' ); @@ -208,6 +230,19 @@ } /** + * Convert a byte to it's hexadecimal equivalent. + * + * @param b the byte value. + * @return the result of Integer.toHexString( b & 0xFF ). + * + * @since 1.1.1 + */ + public static String byteToHex( byte b ) + { + return Integer.toHexString( b & MINUS_ONE ); + } + + /** * Determines if the specified text is a valid id according to the rules * laid out in {...@link #encodeId(String)}. * 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=769698&r1=769697&r2=769698&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 Wed Apr 29 08:05:50 2009 @@ -61,6 +61,8 @@ private static final Hashtable TAG_HASHTABLE = new Hashtable( ALL_TAGS.length ); + private static final int ASCII = 0x7E; + static { for ( int i = 0; i < ALL_TAGS.length; i++ ) @@ -152,7 +154,7 @@ } else { - if ( c <= 0x7E ) + if ( c <= ASCII ) { // ASCII. buffer.append( c ); @@ -239,7 +241,7 @@ for ( int j = 0; j < bytes.length; ++j ) { - String hex = Integer.toHexString( bytes[j] & 0xFF ); + String hex = DoxiaUtils.byteToHex( bytes[j] ); encoded.append( '%' ); if ( hex.length() == 1 ) @@ -259,17 +261,18 @@ * Construct a valid id. * * <p> - * <b>Note</b>: this method is identical to {...@link DoxiaUtils#encodeId(String)}, + * <b>Note</b>: this method is identical to + * {...@link DoxiaUtils#encodeId(String,boolean) DoxiaUtils.encodeId( id, true)}, * the rules to encode an id are laid out there. * </p> * * @param id The id to be encoded. * @return The trimmed and encoded id, or null if id is null. - * @see {...@link DoxiaUtils#encodeId(java.lang.String)}. + * @see {...@link DoxiaUtils#encodeId(java.lang.String,boolean)}. */ public static String encodeId( String id ) { - return DoxiaUtils.encodeId( id ); + return DoxiaUtils.encodeId( id, true ); } /** Modified: maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/util/DoxiaUtilsTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/util/DoxiaUtilsTest.java?rev=769698&r1=769697&r2=769698&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/util/DoxiaUtilsTest.java (original) +++ maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/util/DoxiaUtilsTest.java Wed Apr 29 08:05:50 2009 @@ -156,7 +156,9 @@ assertEquals( DoxiaUtils.encodeId( "myAnchor" ), "myAnchor" ); assertEquals( DoxiaUtils.encodeId( "my&Anchor" ), "my%26Anchor" ); assertEquals( DoxiaUtils.encodeId( "HÃ¥kon" ), "H%c3%a5kon" ); + assertEquals( DoxiaUtils.encodeId( "HÃ¥kon", true ), "Hkon" ); assertEquals( DoxiaUtils.encodeId( "TheuÃl" ), "Theu%c3%9fl" ); + assertEquals( DoxiaUtils.encodeId( "TheuÃl", true ), "Theul" ); } /** 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=769698&r1=769697&r2=769698&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 Wed Apr 29 08:05:50 2009 @@ -63,8 +63,8 @@ assertEquals( HtmlTools.encodeId( "a b-c123 " ), "a_b-c123" ); assertEquals( HtmlTools.encodeId( " anchor" ), "anchor" ); assertEquals( HtmlTools.encodeId( "myAnchor" ), "myAnchor" ); - assertEquals( HtmlTools.encodeId( "HÃ¥kon" ), "H%c3%a5kon" ); - assertEquals( HtmlTools.encodeId( "TheuÃl" ), "Theu%c3%9fl" ); + assertEquals( HtmlTools.encodeId( "HÃ¥kon" ), "Hkon" ); + assertEquals( HtmlTools.encodeId( "TheuÃl" ), "Theul" ); } /** Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java?rev=769698&r1=769697&r2=769698&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java Wed Apr 29 08:05:50 2009 @@ -454,7 +454,7 @@ getLog().warn( "Modified invalid link: " + hash ); linkAnchor = linkAnchor.substring( 0, hashIndex ) + "#" - + DoxiaUtils.encodeId( hash ); + + DoxiaUtils.encodeId( hash, true ); } } Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java?rev=769698&r1=769697&r2=769698&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java Wed Apr 29 08:05:50 2009 @@ -1455,7 +1455,7 @@ if ( !DoxiaUtils.isValidId( id ) ) { - id = DoxiaUtils.encodeId( name ); + id = DoxiaUtils.encodeId( name, true ); getLog().warn( "Modified invalid anchor name: " + name ); } Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fml/src/main/java/org/apache/maven/doxia/module/fml/FmlParser.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fml/src/main/java/org/apache/maven/doxia/module/fml/FmlParser.java?rev=769698&r1=769697&r2=769698&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-fml/src/main/java/org/apache/maven/doxia/module/fml/FmlParser.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-fml/src/main/java/org/apache/maven/doxia/module/fml/FmlParser.java Wed Apr 29 08:05:50 2009 @@ -124,7 +124,7 @@ { getLog().warn( "Modified invalid id: " + currentPart.getId() ); - currentPart.setId( DoxiaUtils.encodeId( currentPart.getId() ) ); + currentPart.setId( DoxiaUtils.encodeId( currentPart.getId(), true ) ); } } else if ( parser.getName().equals( Tag.TITLE.toString() ) ) @@ -159,7 +159,7 @@ { getLog().warn( "Modified invalid id: " + currentFaq.getId() ); - currentFaq.setId( DoxiaUtils.encodeId( currentFaq.getId() ) ); + currentFaq.setId( DoxiaUtils.encodeId( currentFaq.getId(), true ) ); } } if ( parser.getName().equals( QUESTION_TAG.toString() ) ) Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java?rev=769698&r1=769697&r2=769698&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java Wed Apr 29 08:05:50 2009 @@ -263,7 +263,7 @@ if ( !DoxiaUtils.isValidId( anchor ) ) { - anchor = DoxiaUtils.encodeId( name ); + anchor = DoxiaUtils.encodeId( name, true ); getLog().warn( "[FO Sink] Modified invalid anchor name: " + name ); } @@ -301,7 +301,7 @@ if ( !DoxiaUtils.isValidId( anchor ) ) { - anchor = DoxiaUtils.encodeId( anchor ); + anchor = DoxiaUtils.encodeId( anchor, true ); getLog().warn( "[FO Sink] Modified invalid link name: " + name ); } Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java?rev=769698&r1=769697&r2=769698&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java Wed Apr 29 08:05:50 2009 @@ -940,7 +940,7 @@ if ( !DoxiaUtils.isValidId( anchor ) ) { - anchor = DoxiaUtils.encodeId( name ); + anchor = DoxiaUtils.encodeId( name, true ); getLog().warn( "[FO Sink] Modified invalid anchor name: " + name ); } @@ -975,7 +975,7 @@ if ( !DoxiaUtils.isValidId( anchor ) ) { - anchor = DoxiaUtils.encodeId( anchor ); + anchor = DoxiaUtils.encodeId( anchor, true ); getLog().warn( "[FO Sink] Modified invalid link name: " + name ); } Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java?rev=769698&r1=769697&r2=769698&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java Wed Apr 29 08:05:50 2009 @@ -1314,7 +1314,7 @@ if ( !DoxiaUtils.isValidId( id ) ) { - id = DoxiaUtils.encodeId( name ); + id = DoxiaUtils.encodeId( name, true ); getLog().warn( "Modified invalid anchor name: " + name ); }