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 );
         }