Author: vsiveton
Date: Tue May 12 11:05:47 2009
New Revision: 773851

URL: http://svn.apache.org/viewvc?rev=773851&view=rev
Log:
DOXIA-134: Apt parser issues

o added multiline and linebreak support in table cells
o added test case

Modified:
    
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-apt/src/test/java/org/apache/maven/doxia/module/apt/AptParserTest.java

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=773851&r1=773850&r2=773851&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
 Tue May 12 11:05:47 2009
@@ -2380,18 +2380,26 @@
                             continue;
                         }
                         processedGrid = false;
-                        cellLine = replaceAll( cellLine, "\\ ", "\\240" );
+                        cellLine = replaceAll( cellLine, "\\", "\\240" );
                         cellLine = cellLine.trim();
 
                         StringBuffer cell = cells[i];
-
                         if ( cellLine.length() > 0 )
                         {
-                            if ( cell.length() > 0 )
-                            // Implicit lineBreak if multi-line cell.
+                            // line break in table cells
+                            if ( cell.toString().trim().endsWith( "\\240" ) )
                             {
                                 cell.append( "\\\n" );
                             }
+                            else
+                            {
+                                if ( cell.length() != 0 )
+                                {
+                                    // Always add a space for multi line 
tables cells
+                                    cell.append( " " );
+                                }
+                            }
+
                             cell.append( cellLine );
                         }
 

Modified: 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptParserTest.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptParserTest.java?rev=773851&r1=773850&r2=773851&view=diff
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptParserTest.java
 (original)
+++ 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptParserTest.java
 Tue May 12 11:05:47 2009
@@ -247,6 +247,217 @@
         assertFalse( it.hasNext() );
     }
 
+    /** @throws Exception  */
+    public void testMultiLinesInTableCells()
+        throws Exception
+    {
+        String text = "*----------*--------------+----------------:" + EOL +
+                " cell 1, | cell 1,2       | cell 1,3" + EOL +
+                " 1       |                | " + EOL +
+                "*----------*--------------+----------------:" + EOL +
+                " cell 2,1 | cell 2,       | cell 2,3" + EOL +
+                "          | 2             |" + EOL +
+                "*----------*--------------+----------------:" + EOL +
+                " cell 3,1 | cell 3,2      | cell 3," + EOL +
+                "          |               | 3" + EOL +
+                "*----------*--------------+----------------:" + EOL;
+
+        SinkEventTestingSink sink = new SinkEventTestingSink();
+
+        parser.parse( text, sink );
+
+        Iterator it = sink.getEventList().iterator();
+
+        assertEquals( "head", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "head_", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "body", ( (SinkEventElement) it.next() ).getName() );
+
+        assertEquals( "table", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "tableRows", ( (SinkEventElement) it.next() ).getName() 
);
+
+        assertEquals( "tableRow", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        SinkEventElement element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 1, 1", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 1,2", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 1,3", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableRow_", ( (SinkEventElement) it.next() ).getName() 
);
+
+        assertEquals( "tableRow", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 2,1", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 2, 2", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 2,3", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableRow_", ( (SinkEventElement) it.next() ).getName() 
);
+
+        assertEquals( "tableRow", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 3,1", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 3,2", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 3, 3", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableRow_", ( (SinkEventElement) it.next() ).getName() 
);
+
+        assertEquals( "tableRows_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "table_", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "body_", ( (SinkEventElement) it.next() ).getName() );
+
+        assertFalse( it.hasNext() );
+    }
+
+    /** @throws Exception  */
+    public void testLineBreakInTableCells()
+        throws Exception
+    {
+        String text = "*----------*--------------+----------------:" + EOL +
+                " cell 1,\\ | cell 1,2       | cell 1,3" + EOL +
+                " 1       |                | " + EOL +
+                "*----------*--------------+----------------:" + EOL +
+                " cell 2,1 | cell 2,\\     | cell 2,3" + EOL +
+                "          | 2             |" + EOL +
+                "*----------*--------------+----------------:" + EOL +
+                " cell 3,1 | cell 3,2      | cell 3,\\" + EOL +
+                "          |               | 3" + EOL +
+                "*----------*--------------+----------------:" + EOL;
+
+        SinkEventTestingSink sink = new SinkEventTestingSink();
+
+        parser.parse( text, sink );
+
+        Iterator it = sink.getEventList().iterator();
+
+        assertEquals( "head", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "head_", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "body", ( (SinkEventElement) it.next() ).getName() );
+
+        assertEquals( "table", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "tableRows", ( (SinkEventElement) it.next() ).getName() 
);
+
+        assertEquals( "tableRow", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        SinkEventElement element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 1,\u00A0", element.getArgs()[0] );
+        assertEquals( "lineBreak", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "1", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 1,2", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 1,3", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableRow_", ( (SinkEventElement) it.next() ).getName() 
);
+
+        assertEquals( "tableRow", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 2,1", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 2,\u00A0", element.getArgs()[0] );
+        assertEquals( "lineBreak", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "2", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 2,3", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableRow_", ( (SinkEventElement) it.next() ).getName() 
);
+
+        assertEquals( "tableRow", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 3,1", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 3,2", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableCell", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "cell 3,\u00A0", element.getArgs()[0] );
+        assertEquals( "lineBreak", ( (SinkEventElement) it.next() ).getName() 
);
+        element = (SinkEventElement) it.next();
+        assertEquals( "text", element.getName() );
+        assertNotNull( element.getArgs()[0] );
+        assertEquals( "3", element.getArgs()[0] );
+        assertEquals( "tableCell_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "tableRow_", ( (SinkEventElement) it.next() ).getName() 
);
+
+        assertEquals( "tableRows_", ( (SinkEventElement) it.next() ).getName() 
);
+        assertEquals( "table_", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "body_", ( (SinkEventElement) it.next() ).getName() );
+
+        assertFalse( it.hasNext() );
+    }
+
     /** {...@inheritdoc} */
     protected String outputExtension()
     {


Reply via email to