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


Reply via email to