Index: src/main/java/org/apache/maven/doxia/module/confluence/parser/table/TableBlockParser.java =================================================================== --- src/main/java/org/apache/maven/doxia/module/confluence/parser/table/TableBlockParser.java (revision 754544) +++ src/main/java/org/apache/maven/doxia/module/confluence/parser/table/TableBlockParser.java (working copy) @@ -19,92 +19,121 @@ * 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.util.ByLineSource; +import org.apache.maven.doxia.module.confluence.ConfluenceMarkup; 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.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.parser.ParseException; import org.codehaus.plexus.util.StringUtils; - /** * Parse tables - * + * * @author Juan F. Codagnone * @version $Id$ */ -public class TableBlockParser - implements BlockParser -{ - /** {@inheritDoc} */ - public boolean accept( String line, ByLineSource source ) - { - return line.startsWith( "|" ); - } +public class TableBlockParser implements BlockParser { - /** {@inheritDoc} */ - public Block visit( String line, ByLineSource source ) - throws ParseException - { - if ( !accept( line, source ) ) - { - throw new IllegalAccessError( "call accept before this ;)" ); - } + private static final String EMPTY_STRING = ""; + private static final String ANY_CHARACTER = ".*"; + private static final String ESCAPE_CHARACTER = "\\"; - List rows = new ArrayList(); + /** {@inheritDoc} */ + public boolean accept(String line, ByLineSource source) { + return line.startsWith(ConfluenceMarkup.TABLE_CELL_MARKUP); + } - String l = line; + /** {@inheritDoc} */ + public Block visit(String line, ByLineSource source) throws ParseException { + if (!accept(line, source)) { + throw new IllegalAccessError("call accept before this ;)"); + } - do - { - l = l.substring( 0, l.lastIndexOf( "|" ) ); + List rows = new ArrayList(); - List cells = new ArrayList(); + String l = line; - if ( l.startsWith( "||" ) ) - { - String[] text = StringUtils.split( l, "||" ); + do { + l = l.substring(0, l + .lastIndexOf(ConfluenceMarkup.TABLE_CELL_MARKUP)); + List cells = new ArrayList(); - for ( int i = 0; i < text.length; i++ ) - { - List textBlocks = new ArrayList(); + BlockParser headingParser = new SectionBlockParser(); + BlockParser figureParser = new FigureBlockParser(); + BlockParser[] subparsers = new BlockParser[] { headingParser, + figureParser }; + BlockParser paragraphParser = new ParagraphBlockParser(subparsers); - textBlocks.add( new TextBlock( text[i] ) ); + if (l.startsWith("||")) { + String[] text = StringUtils.split(l, "||"); - List blocks = new ArrayList(); + for (int i = 0; i < text.length; i++) { + List textBlocks = new ArrayList(); - blocks.add( new BoldBlock( textBlocks ) ); + textBlocks.add(paragraphParser.visit(text[i], + new ByLineReaderSource(new StringReader( + EMPTY_STRING)))); - cells.add( new TableCellHeaderBlock( blocks ) ); - } - } - else - { - String[] text = StringUtils.split( l, "|" ); + List blocks = new ArrayList(); + blocks.add(new BoldBlock(textBlocks)); - for ( int i = 0; i < text.length; i++ ) - { - List blocks = new ArrayList(); + cells.add(new TableCellHeaderBlock(blocks)); + } + } else { + int it = 0; + String[] pText = StringUtils.split(l, + ConfluenceMarkup.TABLE_CELL_MARKUP); + List texts = new LinkedList(); + while (it < pText.length) { + if (pText[it].matches(ANY_CHARACTER + ESCAPE_CHARACTER + + ConfluenceMarkup.LINK_START_MARKUP + + ANY_CHARACTER) + && !pText[it].matches(ANY_CHARACTER + + ESCAPE_CHARACTER + + ConfluenceMarkup.LINK_END_MARKUP + + ANY_CHARACTER)) { + texts.add(pText[it] + + ConfluenceMarkup.TABLE_CELL_MARKUP + + pText[it + 1]); + it += 2; + continue; + } + texts.add(pText[it]); + it++; + } - blocks.add( new TextBlock( text[i] ) ); + Object[] text = texts.toArray(); - cells.add( new TableCellBlock( blocks ) ); - } - } + for (int i = 0; i < text.length; i++) { + List blocks = new ArrayList(); - rows.add( new TableRowBlock( cells ) ); - } + blocks.add(paragraphParser.visit((String)text[i], + new ByLineReaderSource(new StringReader( + EMPTY_STRING)))); - while ( ( l = source.getNextLine() ) != null && accept( l, source ) ); + cells.add(new TableCellBlock(blocks)); + } + } - assert rows.size() >= 1; + rows.add(new TableRowBlock(cells)); + } - return new TableBlock( rows ); - } + while ((l = source.getNextLine()) != null && accept(l, source)); + + assert rows.size() >= 1; + + return new TableBlock(rows); + } } Index: src/main/java/org/apache/maven/doxia/module/confluence/parser/ParagraphBlock.java =================================================================== --- src/main/java/org/apache/maven/doxia/module/confluence/parser/ParagraphBlock.java (revision 754544) +++ src/main/java/org/apache/maven/doxia/module/confluence/parser/ParagraphBlock.java (working copy) @@ -30,21 +30,31 @@ class ParagraphBlock extends AbstractFatherBlock { + + private boolean generateParagraphTags = true; + ParagraphBlock( List blocks ) throws IllegalArgumentException { super( blocks ); } + + ParagraphBlock(List blocks, boolean generateParagraphTags) throws IllegalArgumentException { + super(blocks); + this.generateParagraphTags = generateParagraphTags; + } /** {@inheritDoc} */ public void before( Sink sink ) { - sink.paragraph(); + if (this.generateParagraphTags) + sink.paragraph(); } /** {@inheritDoc} */ public void after( Sink sink ) { - sink.paragraph_(); + if (this.generateParagraphTags) + sink.paragraph_(); } } Index: src/main/java/org/apache/maven/doxia/module/confluence/parser/ParagraphBlockParser.java =================================================================== --- src/main/java/org/apache/maven/doxia/module/confluence/parser/ParagraphBlockParser.java (revision 754544) +++ src/main/java/org/apache/maven/doxia/module/confluence/parser/ParagraphBlockParser.java (working copy) @@ -49,6 +49,15 @@ return true; } + public Block visit(String line, ByLineSource source, boolean generateParagraphTags) throws ParseException { + if (generateParagraphTags) + return this.visit(line, source); + else { + ChildBlocksBuilder builder = new ChildBlocksBuilder(appendUntilEmptyLine(line, source)); + return new ParagraphBlock(builder.getBlocks(), generateParagraphTags); + } + } + /** {@inheritDoc} */ public Block visit( String line, ByLineSource source ) throws ParseException