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