You are viewing a plain text version of this content. The canonical link for it is here.
Posted to doxia-commits@maven.apache.org by lt...@apache.org on 2009/04/29 10:05:53 UTC
svn commit: r769698 - in /maven/doxia/doxia/trunk:
doxia-core/src/main/java/org/apache/maven/doxia/parser/
doxia-core/src/main/java/org/apache/maven/doxia/sink/
doxia-core/src/main/java/org/apache/maven/doxia/util/
doxia-core/src/test/java/org/apache/m...
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 );
}