Author: vsiveton Date: Sun Aug 23 12:37:11 2009 New Revision: 806960 URL: http://svn.apache.org/viewvc?rev=806960&view=rev Log: DOXIA-343: FO: links broken if link target contains dot
o fixed links with dot and several soldius o updated test cases Modified: 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/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java 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=806960&r1=806959&r2=806960&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 Sun Aug 23 12:37:11 2009 @@ -266,14 +266,19 @@ String idName = name.replace( '\\', '/' ); // prepend "./" and strip extension + while ( idName.indexOf( "//" ) != -1 ) + { + idName = StringUtils.replace( idName, "//", "/" ); + } + if ( !idName.startsWith( "./" ) ) { idName = "./" + idName; } - if ( idName.indexOf( ".", 2 ) != -1 ) + if ( idName.substring( 2 ).lastIndexOf( "." ) != -1 ) { - idName = idName.substring( 0, idName.indexOf( ".", 2 ) ); + idName = idName.substring( 0, idName.lastIndexOf( "." ) ); } return idName; @@ -360,11 +365,17 @@ // external links writeStartTag( BASIC_LINK_TAG, "external-destination", HtmlTools.escapeHTML( name ) ); writeStartTag( INLINE_TAG, "href.external" ); + return; } - else if ( DoxiaUtils.isInternalLink( name ) ) + + while ( name.indexOf( "//" ) != -1 ) { - // internal link (ie anchor is in the same source document) + name = StringUtils.replace( name, "//", "/" ); + } + if ( DoxiaUtils.isInternalLink( name ) ) + { + // internal link (ie anchor is in the same source document) String anchor = name.substring( 1 ); if ( !DoxiaUtils.isValidId( anchor ) ) Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java?rev=806960&r1=806959&r2=806960&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java Sun Aug 23 12:37:11 2009 @@ -140,10 +140,27 @@ { sink = new FoAggregateSink( writer ); sink.link( "http://www.example.com/" ); + sink.text( "http://www.example.com/" ); + sink.link_(); sink.setDocumentName( "./folder\\docName.xml" ); sink.link( "#anchor" ); + sink.text( "#anchor" ); + sink.link_(); sink.link( "./././index.html" ); + sink.text( "./././index.html" ); + sink.link_(); sink.link( "./../download.html" ); + sink.text( "./../download.html" ); + sink.link_(); + sink.link( ".///test.html" ); + sink.text( "./test.html" ); + sink.link_(); + sink.link( "./whatsnew-1.1.html" ); + sink.text( "./whatsnew-1.1.html" ); + sink.link_(); + sink.setDocumentName( ".///whatsnew-1.1.html" ); + sink.body(); + sink.body_(); } finally { @@ -156,5 +173,8 @@ assertTrue( result.indexOf( "<fo:basic-link internal-destination=\"./folder/docName#anchor\">" ) != -1 ); assertTrue( result.indexOf( "<fo:basic-link internal-destination=\"./folder/index\">" ) != -1 ); assertTrue( result.indexOf( "<fo:basic-link internal-destination=\"./download\">" ) != -1 ); + assertTrue( result.indexOf( "<fo:basic-link internal-destination=\"./folder/test\">" ) != -1 ); + assertTrue( result.indexOf( "<fo:basic-link internal-destination=\"./folder/whatsnew-1.1\">" ) != -1 ); + assertTrue( result.indexOf( "<fo:block id=\"./whatsnew-1.1\">" ) != -1 ); } }