Author: ltheussl Date: Fri May 8 19:54:51 2009 New Revision: 773072 URL: http://svn.apache.org/viewvc?rev=773072&view=rev Log: [DOXIA-301] Invalid interpretation of links' aliases in tables. Submitted by: Kornel
Added: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/table-link.confluence Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/table/TableBlockParser.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/java/org/apache/maven/doxia/module/confluence/ConfluenceParserTest.java Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/table/TableBlockParser.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/table/TableBlockParser.java?rev=773072&r1=773071&r2=773072&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/table/TableBlockParser.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/table/TableBlockParser.java Fri May 8 19:54:51 2009 @@ -19,14 +19,20 @@ * under the License. */ +import java.io.StringReader; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; +import org.apache.maven.doxia.util.ByLineReaderSource; +import org.apache.maven.doxia.module.confluence.ConfluenceMarkup; +import org.apache.maven.doxia.module.confluence.parser.FigureBlockParser; +import org.apache.maven.doxia.module.confluence.parser.ParagraphBlockParser; +import org.apache.maven.doxia.module.confluence.parser.SectionBlockParser; import org.apache.maven.doxia.util.ByLineSource; import org.apache.maven.doxia.module.confluence.parser.BlockParser; import org.apache.maven.doxia.module.confluence.parser.Block; import org.apache.maven.doxia.module.confluence.parser.BoldBlock; -import org.apache.maven.doxia.module.confluence.parser.TextBlock; import org.apache.maven.doxia.parser.ParseException; import org.codehaus.plexus.util.StringUtils; @@ -40,6 +46,10 @@ public class TableBlockParser implements BlockParser { + private static final String EMPTY_STRING = ""; + private static final String ANY_CHARACTER = ".*"; + private static final String ESCAPE_CHARACTER = "\\"; + /** {...@inheritdoc} */ public boolean accept( String line, ByLineSource source ) { @@ -65,6 +75,11 @@ List cells = new ArrayList(); + BlockParser headingParser = new SectionBlockParser(); + BlockParser figureParser = new FigureBlockParser(); + BlockParser[] subparsers = new BlockParser[] { headingParser, figureParser }; + BlockParser paragraphParser = new ParagraphBlockParser( subparsers ); + if ( l.startsWith( "||" ) ) { String[] text = StringUtils.split( l, "||" ); @@ -74,7 +89,8 @@ { List textBlocks = new ArrayList(); - textBlocks.add( new TextBlock( text[i] ) ); + textBlocks.add( ( (ParagraphBlockParser) paragraphParser ) + .visit(text[i], new ByLineReaderSource( new StringReader( EMPTY_STRING ) ), false ) ); List blocks = new ArrayList(); @@ -85,14 +101,33 @@ } else { + int it = 0; String[] text = StringUtils.split( l, "|" ); + List texts = new LinkedList(); - for ( int i = 0; i < text.length; i++ ) + while ( it < text.length ) + { + if ( text[it].matches( ANY_CHARACTER + ESCAPE_CHARACTER + + ConfluenceMarkup.LINK_START_MARKUP + ANY_CHARACTER ) + && !text[it].matches( ANY_CHARACTER + ESCAPE_CHARACTER + + ConfluenceMarkup.LINK_END_MARKUP + ANY_CHARACTER ) ) + { + texts.add( text[it] + ConfluenceMarkup.TABLE_CELL_MARKUP + text[it + 1] ); + it += 2; + continue; + } + texts.add(text[it]); + it++; + } + + Object[] pText = texts.toArray(); + for ( int i = 0; i < pText.length; i++ ) { List blocks = new ArrayList(); - blocks.add( new TextBlock( text[i] ) ); + blocks.add( ( (ParagraphBlockParser) paragraphParser ).visit( (String) pText[i], + new ByLineReaderSource( new StringReader( EMPTY_STRING ) ), false ) ); cells.add( new TableCellBlock( blocks ) ); } Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/java/org/apache/maven/doxia/module/confluence/ConfluenceParserTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/java/org/apache/maven/doxia/module/confluence/ConfluenceParserTest.java?rev=773072&r1=773071&r2=773072&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/java/org/apache/maven/doxia/module/confluence/ConfluenceParserTest.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/java/org/apache/maven/doxia/module/confluence/ConfluenceParserTest.java Fri May 8 19:54:51 2009 @@ -253,6 +253,19 @@ } /** @throws Exception */ + public void testTableWithLinks() + throws Exception + { + String result = locateAndParseTestSourceFile( "table-link" ); + + assertContainsLines( result, "begin:tableCell\nbegin:link, name: http://example.com/release.0.1.3/ex-win32-win32.x86.zip\ntext: Download\nend:link\n\n\nend:tableCell\n" ); + assertContainsLines( result, "begin:tableCell\nbegin:link, name: http://example.com/release.0.1.2/ex-win32-win32.x86.zip\ntext: http://example.com/release.0.1.2/ex-win32-win32.x86.zip\nend:link\n\n\nend:tableCell\n" ); + + // 3 links in the input + assertEquals( 4, result.split( "end:link\n" ).length ); + } + + /** @throws Exception */ public void testParagraphWithList() throws Exception { Added: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/table-link.confluence URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/table-link.confluence?rev=773072&view=auto ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/table-link.confluence (added) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/table-link.confluence Fri May 8 19:54:51 2009 @@ -0,0 +1,4 @@ +|| Version || Download || Format || +|0.1.1 |[Download|http://example.com/release.0.1.1/ex-win32-win32.x86.zip]| 12-12-2008 | zip | +|0.1.2 |[http://example.com/release.0.1.2/ex-win32-win32.x86.zip]| 04-12-2008 | zip | +|0.1.3 |[Download|http://example.com/release.0.1.3/ex-win32-win32.x86.zip]| 03-11-2008 | zip | \ No newline at end of file