Author: ltheussl Date: Fri Oct 26 02:13:56 2007 New Revision: 588573 URL: http://svn.apache.org/viewvc?rev=588573&view=rev Log: DOXIA-169: fix line breaks. Thanks to Dave Syer.
Added: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/LinebreakBlock.java (with props) maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/linebreak.confluence Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/ParagraphBlockParser.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/ConfluenceParser.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/ConfluenceParser.java?rev=588573&r1=588572&r2=588573&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/ConfluenceParser.java Fri Oct 26 02:13:56 2007 @@ -19,24 +19,24 @@ * under the License. */ -import org.apache.maven.doxia.util.ByLineReaderSource; -import org.apache.maven.doxia.util.ByLineSource; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + import org.apache.maven.doxia.module.confluence.parser.Block; import org.apache.maven.doxia.module.confluence.parser.BlockParser; -import org.apache.maven.doxia.module.confluence.parser.SectionBlockParser; +import org.apache.maven.doxia.module.confluence.parser.HorizontalRuleBlockParser; import org.apache.maven.doxia.module.confluence.parser.ParagraphBlockParser; +import org.apache.maven.doxia.module.confluence.parser.SectionBlockParser; import org.apache.maven.doxia.module.confluence.parser.VerbatimBlockParser; -import org.apache.maven.doxia.module.confluence.parser.HorizontalRuleBlockParser; -import org.apache.maven.doxia.module.confluence.parser.table.TableBlockParser; import org.apache.maven.doxia.module.confluence.parser.list.ListBlockParser; +import org.apache.maven.doxia.module.confluence.parser.table.TableBlockParser; import org.apache.maven.doxia.parser.AbstractTextParser; import org.apache.maven.doxia.parser.ParseException; import org.apache.maven.doxia.sink.Sink; - -import java.io.Reader; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; +import org.apache.maven.doxia.util.ByLineReaderSource; +import org.apache.maven.doxia.util.ByLineSource; /** * Parse the <a href="http://www.atlassian.com/software/confluence/">Confluence</a>. @@ -50,6 +50,7 @@ public class ConfluenceParser extends AbstractTextParser { + private BlockParser[] parsers; public ConfluenceParser() @@ -66,7 +67,6 @@ } //TODO: (empty line) Produces a new paragraph - //TODO: \\ Creates a line break. Not often needed, most of the time Confluence will guess new lines for you appropriately. //TODO: better support for anchors public List parse( ByLineSource source ) Added: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/LinebreakBlock.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/LinebreakBlock.java?rev=588573&view=auto ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/LinebreakBlock.java (added) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/LinebreakBlock.java Fri Oct 26 02:13:56 2007 @@ -0,0 +1,35 @@ +package org.apache.maven.doxia.module.confluence.parser; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.maven.doxia.sink.Sink; + +/** + * @author Dave Syer + * @since 1.0 + */ +public class LinebreakBlock + implements Block +{ + public void traverse( Sink sink ) + { + sink.lineBreak(); + } +} Propchange: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/LinebreakBlock.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/LinebreakBlock.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/ParagraphBlockParser.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/ParagraphBlockParser.java?rev=588573&r1=588572&r2=588573&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/ParagraphBlockParser.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/ParagraphBlockParser.java Fri Oct 26 02:13:56 2007 @@ -20,16 +20,17 @@ */ import java.util.ArrayList; -import java.util.List; import java.util.Arrays; +import java.util.List; -import org.apache.maven.doxia.util.ByLineSource; import org.apache.maven.doxia.parser.ParseException; +import org.apache.maven.doxia.util.ByLineSource; import org.codehaus.plexus.util.StringUtils; public class ParagraphBlockParser implements BlockParser { + public boolean accept( String line, ByLineSource source ) { return true; @@ -48,6 +49,7 @@ do { + if ( line.trim().length() == 0 ) { break; @@ -63,7 +65,7 @@ if ( insideBold ) { TextBlock tb = new TextBlock( text.toString() ); - blocks.add( new BoldBlock( Arrays.asList( new Block[]{tb} ) ) ); + blocks.add( new BoldBlock( Arrays.asList( new Block[] { tb } ) ) ); text = new StringBuffer(); } else @@ -78,7 +80,7 @@ if ( insideItalic ) { TextBlock tb = new TextBlock( text.toString() ); - blocks.add( new ItalicBlock( Arrays.asList( new Block[]{tb} ) ) ); + blocks.add( new ItalicBlock( Arrays.asList( new Block[] { tb } ) ) ); text = new StringBuffer(); } else @@ -129,13 +131,13 @@ break; case '}': - //System.out.println( "line = " + line ); + // System.out.println( "line = " + line ); if ( line.charAt( i + 1 ) == '}' ) { i++; TextBlock tb = new TextBlock( text.toString() ); - blocks.add( new MonospaceBlock( Arrays.asList( new Block[]{tb} ) ) ); + blocks.add( new MonospaceBlock( Arrays.asList( new Block[] { tb } ) ) ); text = new StringBuffer(); } else @@ -144,19 +146,39 @@ } break; + case '\\': + + // System.out.println( "line = " + line ); + + if ( line.charAt( i + 1 ) == '\\' ) + { + i++; + blocks.add( new TextBlock( text.toString() ) ); + text = new StringBuffer(); + blocks.add( new LinebreakBlock() ); + } + else + { + text.append( line.charAt( i + 1 ) ); + } + + break; default: text.append( c ); } } } - // TODO: instead of just flying along we should probably test new lines in the other parsers - // to make sure there aren't things that should be handled by other parsers. For example, right + // TODO: instead of just flying along we should probably test new lines + // in the other parsers + // to make sure there aren't things that should be handled by other + // parsers. For example, right // now: // Blah blah blah blah // # one // # two // - // Will not get processed correctly. This parser will try to deal with it when it should be handled + // Will not get processed correctly. This parser will try to deal with + // it when it should be handled // by the list parser. while ( ( line = source.getNextLine() ) != null ); 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=588573&r1=588572&r2=588573&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 Oct 26 02:13:56 2007 @@ -19,13 +19,20 @@ * under the License. */ +import java.io.Reader; +import java.io.StringWriter; +import java.io.Writer; + import org.apache.maven.doxia.parser.AbstractParserTest; import org.apache.maven.doxia.parser.Parser; +import org.apache.maven.doxia.sink.Sink; +import org.apache.maven.doxia.sink.TextSink; /** * Test class for ConfluenceParser. */ -public class ConfluenceParserTest extends AbstractParserTest +public class ConfluenceParserTest + extends AbstractParserTest { private ConfluenceParser parser; @@ -49,5 +56,51 @@ { return "confluence"; } + + /** @throws Exception */ + public void testLineBreak() + throws Exception + { + String lineBreak = getLineBreakString(); + + StringWriter output = null; + Reader reader = null; + Writer writer = null; + + try + { + output = new StringWriter(); + reader = getTestReader( "linebreak", outputExtension() ); + writer = getTestWriter( "linebreak", "txt" ); + + Sink sink = new TextSink( output ); + createParser().parse( reader, sink ); + + // write to file + String expected = output.toString(); + writer.write( expected ); + writer.flush(); + + assertTrue( expected.indexOf( "Line" + EOL + lineBreak ) != -1 ); + assertTrue( expected.indexOf( "with 2" + EOL + lineBreak ) != -1 ); + assertTrue( expected.indexOf( "inline" + EOL + lineBreak ) != -1 ); + } + finally + { + output.close(); + reader.close(); + writer.close(); + } + } + + private String getLineBreakString() + { + StringWriter output = new StringWriter(); + Sink sink = new TextSink( output ); + sink.lineBreak(); + + return output.toString(); + } + } Added: maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/linebreak.confluence URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/linebreak.confluence?rev=588573&view=auto ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/linebreak.confluence (added) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/linebreak.confluence Fri Oct 26 02:13:56 2007 @@ -0,0 +1,5 @@ +Line\\ +break. + +Line\\with 2\\inline\\ +Breaks. \ No newline at end of file