Author: ltheussl
Date: Tue Oct 30 06:35:44 2007
New Revision: 590067
URL: http://svn.apache.org/viewvc?rev=590067&view=rev
Log:
[DOXIA-182] confluence support for img macro
Submitted by: Dave Syer
Added:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/FigureBlock.java
(with props)
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/FigureBlockParser.java
(with props)
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/figure.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/ChildBlocksBuilder.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=590067&r1=590066&r2=590067&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
Tue Oct 30 06:35:44 2007
@@ -26,6 +26,7 @@
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.FigureBlockParser;
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;
@@ -50,24 +51,21 @@
public class ConfluenceParser
extends AbstractTextParser
{
-
private BlockParser[] parsers;
public ConfluenceParser()
{
BlockParser headingParser = new SectionBlockParser();
+ BlockParser figureParser = new FigureBlockParser();
BlockParser verbatimParser = new VerbatimBlockParser();
BlockParser horizontalRuleParser = new HorizontalRuleBlockParser();
BlockParser paragraphParser = new ParagraphBlockParser();
BlockParser listParser = new ListBlockParser();
BlockParser tableParser = new TableBlockParser();
- parsers = new BlockParser[]{headingParser, verbatimParser,
horizontalRuleParser, listParser, tableParser,
- paragraphParser};
+ parsers = new BlockParser[] { headingParser, figureParser,
verbatimParser, horizontalRuleParser, listParser,
+ tableParser, paragraphParser };
}
-
- //TODO: (empty line) Produces a new paragraph
- //TODO: better support for anchors
public List parse( ByLineSource source )
throws ParseException
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/ChildBlocksBuilder.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/ChildBlocksBuilder.java?rev=590067&r1=590066&r2=590067&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/ChildBlocksBuilder.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/ChildBlocksBuilder.java
Tue Oct 30 06:35:44 2007
@@ -23,6 +23,8 @@
import java.util.Arrays;
import java.util.List;
+import org.apache.maven.doxia.parser.ParseException;
+import org.apache.maven.doxia.util.ByLineSource;
import org.codehaus.plexus.util.StringUtils;
/**
@@ -110,7 +112,7 @@
break;
case '{':
- if ( input.charAt( i + 1 ) == '{' ) // it's monospaced
+ if ( charAt( input, i ) == '{' ) // it's monospaced
{
i++;
}
@@ -122,7 +124,7 @@
// System.out.println( "line = " + line );
- if ( input.length() > i + 1 && input.charAt( i + 1 ) ==
'}' )
+ if ( charAt( input, i ) == '}' )
{
i++;
TextBlock tb = new TextBlock( text.toString() );
@@ -148,7 +150,7 @@
// System.out.println( "line = " + line );
- if ( input.charAt( i + 1 ) == '\\' )
+ if ( charAt( input, i ) == '\\' )
{
i++;
text = addTextBlockIfNecessary( blocks, text );
@@ -174,6 +176,11 @@
return blocks;
}
+ private static char charAt( String input, int i )
+ {
+ return input.length() > i + 1 ? input.charAt( i + 1 ) : '\0';
+ }
+
private StringBuffer addTextBlockIfNecessary( List blocks, StringBuffer
text )
{
if ( text.length() == 0 )
@@ -182,5 +189,56 @@
}
blocks.add( new TextBlock( text.toString() ) );
return new StringBuffer();
+ }
+
+ /**
+ * Slurp lines from the source starting with the given line appending them
together into a StringBuffer until an
+ * empty line is reached, and while the source contains more lines. The
result can be passed to the
+ * [EMAIL PROTECTED] #getBlocks(String)} method.
+ *
+ * @param line the first line
+ * @param source the source to read new lines from
+ * @return a StringBuffer appended with lines
+ * @throws ParseException
+ */
+ public String appendUntilEmptyLine( ByLineSource source )
+ throws ParseException
+ {
+ StringBuffer text = new StringBuffer();
+
+ String line;
+
+ while ( ( line = source.getNextLine() ) != null )
+ {
+
+ if ( line.trim().length() == 0 )
+ {
+ break;
+ }
+
+ if ( text.length() == 0 )
+ {
+ text.append( line.trim() );
+ }
+ else
+ {
+ text.append( " " + line.trim() );
+ }
+
+ }
+ // 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
+ // by the list parser.
+
+ return text.toString();
}
}
Added:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/FigureBlock.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/FigureBlock.java?rev=590067&view=auto
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/FigureBlock.java
(added)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/FigureBlock.java
Tue Oct 30 06:35:44 2007
@@ -0,0 +1,58 @@
+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;
+
+public class FigureBlock
+ implements Block
+{
+
+ private String location;
+
+ private String caption;
+
+ public FigureBlock( String location )
+ {
+ this.location = location;
+ }
+
+ public FigureBlock( String image, String caption )
+ {
+ this.location = image;
+ this.caption = caption;
+ }
+
+ public void traverse( Sink sink )
+ {
+ sink.figure();
+ sink.figureGraphics( location );
+
+ if ( caption != null && caption.length() > 0 )
+ {
+ sink.figureCaption();
+ new TextBlock( caption ).traverse( sink );
+ sink.figureCaption_();
+ }
+
+ sink.figure_();
+ }
+
+}
Propchange:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/FigureBlock.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/FigureBlock.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/FigureBlockParser.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/FigureBlockParser.java?rev=590067&view=auto
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/FigureBlockParser.java
(added)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/FigureBlockParser.java
Tue Oct 30 06:35:44 2007
@@ -0,0 +1,56 @@
+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.parser.ParseException;
+import org.apache.maven.doxia.util.ByLineSource;
+
+public class FigureBlockParser
+ implements BlockParser
+{
+ public boolean accept( String line, ByLineSource source )
+ {
+ return line.startsWith( "!" ) && line.lastIndexOf( "!" ) > 1;
+ }
+
+ public Block visit( String line, ByLineSource source )
+ throws ParseException
+ {
+ String image = line.substring( 1, line.lastIndexOf( "!" ) );
+ line = line.substring( line.lastIndexOf( "!" ) + 1 ).trim();
+
+ if ( line.startsWith( "\\\\" ) )
+ {
+ // ignore linebreak at start of caption
+ line = line.substring( 2 );
+ }
+
+ ChildBlocksBuilder builder = new ChildBlocksBuilder();
+
+ String caption = line + builder.appendUntilEmptyLine( source );
+
+ if ( caption.trim().length() > 0 )
+ {
+ return new FigureBlock( image, caption );
+ }
+
+ return new FigureBlock( image );
+ }
+}
Propchange:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/main/java/org/apache/maven/doxia/module/confluence/parser/FigureBlockParser.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/FigureBlockParser.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=590067&r1=590066&r2=590067&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
Tue Oct 30 06:35:44 2007
@@ -35,42 +35,9 @@
throws ParseException
{
- StringBuffer text = new StringBuffer();
-
- do
- {
-
- if ( line.trim().length() == 0 )
- {
- break;
- }
-
- if ( text.length() == 0 )
- {
- text.append( line.trim() );
- }
- else
- {
- text.append( " " + line.trim() );
- }
-
- }
- // 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
- // by the list parser.
- while ( ( line = source.getNextLine() ) != null );
-
ChildBlocksBuilder builder = new ChildBlocksBuilder();
-
+ StringBuffer text = new StringBuffer( line );
+ text.append( builder.appendUntilEmptyLine( source ) );
return new ParagraphBlock( builder.getBlocks( text.toString() ) );
}
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=590067&r1=590066&r2=590067&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
Tue Oct 30 06:35:44 2007
@@ -207,6 +207,29 @@
assertEquals( 2, result.split( "end:verbatim\n" ).length );
}
+ /** @throws Exception */
+ public void testFigure()
+ throws Exception
+ {
+ String result = locateAndParseTestSourceFile( "figure" );
+
+ assertContainsLines( result, "begin:figure\nfigureGraphics, name:
images/photo.jpg\nend:figure\n" );
+ assertContainsLines( result, "attempted inline !image.jpg! (should
fail)" );
+ // this isn't ideal... Doxia captions are not the same as what people
would use to add text to a confluence
+ assertContainsLines( result, "figureGraphics, name: images/photo.jpg\n"
+ + "begin:figureCaption\ntext: With caption on same line\n" +
"end:figureCaption" );
+ assertContainsLines( result, "figureGraphics, name:
images/nolinebreak.jpg\n"
+ + "begin:figureCaption\ntext: With caption
underneath and no linebreak\nend:figureCaption" );
+ // ignore linebreak after figure insert...
+ assertContainsLines( result, "figureGraphics, name:
images/linebreak.jpg\n"
+ + "begin:figureCaption\ntext: With caption
underneath and linebreak\nend:figureCaption" );
+ // ignore formtting in caption...
+ assertContainsLines( result, "figureGraphics, name: images/bold.jpg\n"
+ + "begin:figureCaption\ntext: With *bold* caption
underneath\nend:figureCaption" );
+ // 2 paragraphs in the input... (the figures do not go in a paragraph
by analogy with AptParser)
+ assertEquals( 3, result.split( "end:paragraph\n" ).length );
+ }
+
private void assertContainsLines( String message, String result, String
lines )
{
lines = StringUtils.replace( lines, "\n", EOL );
Added:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/figure.confluence
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/figure.confluence?rev=590067&view=auto
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/figure.confluence
(added)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/figure.confluence
Tue Oct 30 06:35:44 2007
@@ -0,0 +1,16 @@
+Simple paragraph.
+
+!images/photo.jpg!
+
+Simple paragraph with attempted inline !image.jpg! (should fail).
+
+!images/photo.jpg! With caption on same line
+
+!images/linebreak.jpg!\\
+With caption underneath and linebreak
+
+!images/nolinebreak.jpg!
+With caption underneath and no linebreak
+
+!images/bold.jpg!
+With *bold* caption underneath