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() {