Author: vsiveton
Date: Wed May 27 13:21:38 2009
New Revision: 779161
URL: http://svn.apache.org/viewvc?rev=779161&view=rev
Log:
o fixed internal link ie href="#1" becomes href="#a1"
o updated tests
Modified:
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/XhtmlBaseParser.java
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/parser/XhtmlBaseParserTest.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=779161&r1=779160&r2=779161&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 May 27 13:21:38 2009
@@ -19,6 +19,11 @@
* under the License.
*/
+import java.io.Reader;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.TreeSet;
+
import javax.swing.text.html.HTML.Attribute;
import javax.swing.text.html.HTML.Tag;
@@ -64,6 +69,29 @@
/** Decoration properties, eg for texts. */
private final SinkEventAttributeSet decoration = new
SinkEventAttributeSet();
+ /** Used to add warn message when links are modified. */
+ private Set modifiedLinks;
+
+ /** {...@inheritdoc} */
+ public void parse( Reader source, Sink sink )
+ throws ParseException
+ {
+ super.parse( source, sink );
+
+ if ( getLog().isWarnEnabled() )
+ {
+ if ( this.modifiedLinks != null )
+ {
+ for ( Iterator it = this.modifiedLinks.iterator();
it.hasNext(); )
+ {
+ getLog().warn( it.next().toString() );
+ }
+
+ this.modifiedLinks = null;
+ }
+ }
+ }
+
/**
* <p>
* Goes through a common list of possible html start tags. These include
only tags that can go into
@@ -611,9 +639,10 @@
{
if ( !DoxiaUtils.isValidId( id ) )
{
- getLog().warn( "Modified invalid anchor name: " + id );
+ String linkAnchor = DoxiaUtils.encodeId( id, true );
+ addModifiedLinkMessage( id, linkAnchor );
- return DoxiaUtils.encodeId( id, true );
+ return linkAnchor;
}
return id;
@@ -639,6 +668,18 @@
if ( href != null )
{
+ int hashIndex = href.indexOf( "#" );
+ if ( hashIndex != -1 && !DoxiaUtils.isExternalLink( href ) )
+ {
+ String hash = href.substring( hashIndex + 1 );
+
+ if ( !DoxiaUtils.isValidId( hash ) )
+ {
+ href = href.substring( 0, hashIndex ) + "#" +
DoxiaUtils.encodeId( hash, true );
+
+ addModifiedLinkMessage( hash, href );
+ }
+ }
sink.link( href, attribs );
isLink = true;
}
@@ -833,4 +874,15 @@
sink.tableRows( justif, grid );
}
+
+ private void addModifiedLinkMessage( String hash, String linkAnchor )
+ {
+ if ( modifiedLinks == null )
+ {
+ modifiedLinks = new TreeSet();
+ }
+
+ String msg = "[Xhtml Parser] Modified invalid link: '" + hash + "' to
'" + linkAnchor + "'";
+ modifiedLinks.add( msg );
+ }
}
Modified:
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/parser/XhtmlBaseParserTest.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/parser/XhtmlBaseParserTest.java?rev=779161&r1=779160&r2=779161&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/parser/XhtmlBaseParserTest.java
(original)
+++
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/parser/XhtmlBaseParserTest.java
Wed May 27 13:21:38 2009
@@ -584,15 +584,44 @@
public void testAnchorLink()
throws Exception
{
- String text = "<div><a href=\"\"></a><a name=\"valid\"></a><a
id=\"1invalid\"></a></div>";
+ String text = "<div><a href=\"\"></a>" +
+ "<a href=\"valid\"></a>" +
+ "<a href=\"#1invalid\"></a>" +
+ "<a name=\"valid\"></a>" +
+ "<a name=\"1invalid\"></a>" +
+ "<a id=\"1invalid\"></a></div>";
+
parser.parse( text, sink );
Iterator it = sink.getEventList().iterator();
- assertEquals( "link", ( (SinkEventElement) it.next() ).getName() );
+ SinkEventElement element = (SinkEventElement) it.next();
+ assertEquals( "link", element.getName() );
+ assertEquals( "", element.getArgs()[0] );
+ assertEquals( "link_", ( (SinkEventElement) it.next() ).getName() );
+
+ element = (SinkEventElement) it.next();
+ assertEquals( "link", element.getName() );
+ assertEquals( "valid", element.getArgs()[0] );
+ assertEquals( "link_", ( (SinkEventElement) it.next() ).getName() );
+
+ element = (SinkEventElement) it.next();
+ assertEquals( "link", element.getName() );
+ assertEquals( "#a1invalid", element.getArgs()[0] );
assertEquals( "link_", ( (SinkEventElement) it.next() ).getName() );
- assertEquals( "anchor", ( (SinkEventElement) it.next() ).getName() );
+
+ element = (SinkEventElement) it.next();
+ assertEquals( "anchor", element.getName() );
+ assertEquals( "valid", element.getArgs()[0] );
+ assertEquals( "anchor_", ( (SinkEventElement) it.next() ).getName() );
+
+ element = (SinkEventElement) it.next();
+ assertEquals( "anchor", element.getName() );
+ assertEquals( "a1invalid", element.getArgs()[0] );
assertEquals( "anchor_", ( (SinkEventElement) it.next() ).getName() );
- assertEquals( "anchor", ( (SinkEventElement) it.next() ).getName() );
+
+ element = (SinkEventElement) it.next();
+ assertEquals( "anchor", element.getName() );
+ assertEquals( "a1invalid", element.getArgs()[0] );
assertEquals( "anchor_", ( (SinkEventElement) it.next() ).getName() );
}
}