You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by vm...@apache.org on 2008/01/22 10:03:04 UTC
svn commit: r614152 - in /maven/sandbox/trunk/doxia/doxia-module-xwiki/src:
main/java/org/apache/maven/doxia/module/xwiki/blocks/
main/java/org/apache/maven/doxia/module/xwiki/parser/
test/java/org/apache/maven/doxia/module/xwiki/ test/java/org/apache/...
Author: vmassol
Date: Tue Jan 22 01:03:02 2008
New Revision: 614152
URL: http://svn.apache.org/viewvc?rev=614152&view=rev
Log:
DOXIA-200: Add a Parser for XWiki
* Added more unit tests and fixed the macro parsing code
* Modified the Macro parsing to generate a FigureBlock when the macro is an {image} macro.
Removed:
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/MacroBlock.java
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/test/resources/figure.xwiki
Modified:
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/blocks/MacroBlock.java
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/FigureBlockParser.java
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/MacroParser.java
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/test/java/org/apache/maven/doxia/module/xwiki/XWikiParserTest.java
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/test/java/org/apache/maven/doxia/module/xwiki/parser/MacroParserTest.java
Modified: maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/blocks/MacroBlock.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/blocks/MacroBlock.java?rev=614152&r1=614151&r2=614152&view=diff
==============================================================================
--- maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/blocks/MacroBlock.java (original)
+++ maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/blocks/MacroBlock.java Tue Jan 22 01:03:02 2008
@@ -1,7 +1,5 @@
package org.apache.maven.doxia.module.xwiki.blocks;
-import org.apache.maven.doxia.module.confluence.parser.Block;
-import org.apache.maven.doxia.module.confluence.parser.FigureBlock;
import org.apache.maven.doxia.sink.Sink;
import java.util.HashMap;
@@ -25,15 +23,7 @@
public void traverse( Sink sink )
{
- if ( name.equalsIgnoreCase( "image" ) )
- {
- FigureBlock block = new FigureBlock( (String) parameters.get( "default" ), (String) null );
- block.traverse( sink );
- }
- else
- {
- // TODO
- }
+ // TODO
}
public String getName()
Modified: maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/FigureBlockParser.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/FigureBlockParser.java?rev=614152&r1=614151&r2=614152&view=diff
==============================================================================
--- maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/FigureBlockParser.java (original)
+++ maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/FigureBlockParser.java Tue Jan 22 01:03:02 2008
@@ -25,7 +25,7 @@
import org.apache.maven.doxia.util.ByLineSource;
/**
- * This parser is left for performance reasons since it's very often that an image macro is found on a line by itself.
+ * This parser is required to handle image macro not inside a paragraph (i.e. found on a line by itself).
* However note that macros (and thus this image macro) are also parsed by
* {@link org.apache.maven.doxia.module.xwiki.parser.MacroParser} when they're inside a paragraph.
*/
@@ -46,20 +46,6 @@
{
macroParser.setCompatibilityMode( isInCompatibilityMode() );
MacroParser.MacroParserResult result = macroParser.parse( line, 1 );
-
- String caption = (String) result.block.getParameters().get( "alt" );
- String location = (String) result.block.getParameters().get( "default" );
-
- if ( location == null )
- {
- location = (String) result.block.getParameters().get( "file" );
- }
-
- if ( caption == null )
- {
- return new FigureBlock( location );
- }
-
- return new FigureBlock( location, caption );
+ return result.block;
}
}
Modified: maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/MacroParser.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/MacroParser.java?rev=614152&r1=614151&r2=614152&view=diff
==============================================================================
--- maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/MacroParser.java (original)
+++ maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/MacroParser.java Tue Jan 22 01:03:02 2008
@@ -1,5 +1,7 @@
package org.apache.maven.doxia.module.xwiki.parser;
+import org.apache.maven.doxia.module.xwiki.blocks.Block;
+import org.apache.maven.doxia.module.xwiki.blocks.FigureBlock;
import org.apache.maven.doxia.module.xwiki.blocks.MacroBlock;
import org.apache.maven.doxia.parser.ParseException;
@@ -49,7 +51,7 @@
{
public int position;
- public MacroBlock block;
+ public Block block;
}
public MacroParser()
@@ -317,7 +319,13 @@
{
text.append( c );
}
- else
+ else if (isInCompatibilityMode && state == STATE_PARAM_NAME)
+ {
+ parameters.put("default", text.toString());
+ text = new StringBuffer();
+ state = STATE_PARAM_NAME;
+
+ } else
{
throw new ParseException( "Invalid position for character '|' in Macro" );
}
@@ -345,7 +353,6 @@
{
// Invalid macro, exit
state = STATE_END;
- i = position - 1;
}
else
{
@@ -356,12 +363,46 @@
i++;
}
- if ( macroName != null )
+ if (state != STATE_END || macroName == null) {
+ // This is not a valid macro. We have two choices here:
+ // 1) decide that the code is not a macro and reset the cursor position at the beginning
+ // 2) throw a parsing exception
+ // For the moment we consider that the code is not a macro (option 1)).
+ result.position = position;
+ } else
{
- result.block = new MacroBlock( macroName, parameters, content );
+ result.block = createAppropriateBlock( macroName, parameters, content );
+ result.position = i;
}
- result.position = i;
+ return result;
+ }
+
+ private Block createAppropriateBlock( String macroName, Map parameters, String content )
+ {
+ Block result;
+ if ( macroName.equals( "image" ) )
+ {
+ String caption = (String) parameters.get( "alt" );
+ String location = (String) parameters.get( "default" );
+ if ( location == null )
+ {
+ location = (String) parameters.get( "file" );
+ }
+
+ if ( caption == null )
+ {
+ result = new FigureBlock( location );
+ }
+ else
+ {
+ result = new FigureBlock( location, caption );
+ }
+ }
+ else
+ {
+ result = new MacroBlock( macroName, parameters, content );
+ }
return result;
}
Modified: maven/sandbox/trunk/doxia/doxia-module-xwiki/src/test/java/org/apache/maven/doxia/module/xwiki/XWikiParserTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/doxia/doxia-module-xwiki/src/test/java/org/apache/maven/doxia/module/xwiki/XWikiParserTest.java?rev=614152&r1=614151&r2=614152&view=diff
==============================================================================
--- maven/sandbox/trunk/doxia/doxia-module-xwiki/src/test/java/org/apache/maven/doxia/module/xwiki/XWikiParserTest.java (original)
+++ maven/sandbox/trunk/doxia/doxia-module-xwiki/src/test/java/org/apache/maven/doxia/module/xwiki/XWikiParserTest.java Tue Jan 22 01:03:02 2008
@@ -63,13 +63,9 @@
assertTrue( paraBlock.getBlocks().get( 0 ) instanceof TextBlock );
TextBlock textBlock1 = (TextBlock) paraBlock.getBlocks().get( 0 );
assertEquals( "Image inside a ", textBlock1.getText() );
-
- // TODO: Decide if generate a MacroBlock or a FigureBlock
- /*
FigureBlock figureBlock = (FigureBlock) paraBlock.getBlocks().get( 1 );
- assertEquals( "photo.jpg ", figureBlock.getLocation() );
+ assertEquals( "photo.jpg", figureBlock.getLocation() );
assertNull( figureBlock.getCaption() );
- */
TextBlock textBlock2 = (TextBlock) paraBlock.getBlocks().get( 2 );
assertEquals( " paragraph.", textBlock2.getText() );
}
Modified: maven/sandbox/trunk/doxia/doxia-module-xwiki/src/test/java/org/apache/maven/doxia/module/xwiki/parser/MacroParserTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/doxia/doxia-module-xwiki/src/test/java/org/apache/maven/doxia/module/xwiki/parser/MacroParserTest.java?rev=614152&r1=614151&r2=614152&view=diff
==============================================================================
--- maven/sandbox/trunk/doxia/doxia-module-xwiki/src/test/java/org/apache/maven/doxia/module/xwiki/parser/MacroParserTest.java (original)
+++ maven/sandbox/trunk/doxia/doxia-module-xwiki/src/test/java/org/apache/maven/doxia/module/xwiki/parser/MacroParserTest.java Tue Jan 22 01:03:02 2008
@@ -1,6 +1,8 @@
package org.apache.maven.doxia.module.xwiki.parser;
import junit.framework.TestCase;
+import org.apache.maven.doxia.module.xwiki.blocks.MacroBlock;
+import org.apache.maven.doxia.module.xwiki.blocks.FigureBlock;
public class MacroParserTest
extends TestCase
@@ -20,9 +22,9 @@
assertEquals( macro.length(), result.position );
assertNotNull( result.block );
- assertEquals( "macro", result.block.getName() );
- assertEquals( "", result.block.getContent() );
- assertTrue( result.block.getParameters().isEmpty() );
+ assertEquals( "macro", ((MacroBlock) result.block).getName() );
+ assertEquals( "", ((MacroBlock) result.block).getContent() );
+ assertTrue( ((MacroBlock) result.block).getParameters().isEmpty() );
}
public void testParseSimplestMacroWithExpandedClosingStyle()
@@ -33,9 +35,9 @@
assertEquals( macro.length(), result.position );
assertNotNull( result.block );
- assertEquals( "macro", result.block.getName() );
- assertEquals( "", result.block.getContent() );
- assertTrue( result.block.getParameters().isEmpty() );
+ assertEquals( "macro", ((MacroBlock) result.block).getName() );
+ assertEquals( "", ((MacroBlock) result.block).getContent() );
+ assertTrue( ((MacroBlock) result.block).getParameters().isEmpty() );
}
public void testParseMacroWithOneParameter()
@@ -46,10 +48,10 @@
assertEquals( macro.length(), result.position );
assertNotNull( result.block );
- assertEquals( "macro", result.block.getName() );
- assertEquals( "", result.block.getContent() );
- assertEquals( 1, result.block.getParameters().size() );
- assertEquals( "value1", result.block.getParameters().get( "param1" ) );
+ assertEquals( "macro", ((MacroBlock) result.block).getName() );
+ assertEquals( "", ((MacroBlock) result.block).getContent() );
+ assertEquals( 1, ((MacroBlock) result.block).getParameters().size() );
+ assertEquals( "value1", ((MacroBlock) result.block).getParameters().get( "param1" ) );
}
public void testParseMacroWithSeveralParameters()
@@ -60,11 +62,11 @@
assertEquals( macro.length(), result.position );
assertNotNull( result.block );
- assertEquals( "macro", result.block.getName() );
- assertEquals( "", result.block.getContent() );
- assertEquals( 2, result.block.getParameters().size() );
- assertEquals( "value1", result.block.getParameters().get( "param1" ) );
- assertEquals( "value2", result.block.getParameters().get( "param2" ) );
+ assertEquals( "macro", ((MacroBlock) result.block).getName() );
+ assertEquals( "", ((MacroBlock) result.block).getContent() );
+ assertEquals( 2, ((MacroBlock) result.block).getParameters().size() );
+ assertEquals( "value1", ((MacroBlock) result.block).getParameters().get( "param1" ) );
+ assertEquals( "value2", ((MacroBlock) result.block).getParameters().get( "param2" ) );
}
public void testParseMacroWithContent()
@@ -75,9 +77,9 @@
assertEquals( macro.length(), result.position );
assertNotNull( result.block );
- assertEquals( "macro", result.block.getName() );
- assertEquals( "Some /=|content", result.block.getContent() );
- assertEquals( 0, result.block.getParameters().size() );
+ assertEquals( "macro", ((MacroBlock) result.block).getName() );
+ assertEquals( "Some /=|content", ((MacroBlock) result.block).getContent() );
+ assertEquals( 0, ((MacroBlock) result.block).getParameters().size() );
}
public void testParseMacroWithInvalidMacroName()
@@ -100,9 +102,9 @@
assertEquals( macro.length(), result.position );
assertNotNull( result.block );
- assertEquals( "code", result.block.getName() );
- assertEquals( "Some content here", result.block.getContent() );
- assertEquals( 0, result.block.getParameters().size() );
+ assertEquals( "code", ((MacroBlock) result.block).getName() );
+ assertEquals( "Some content here", ((MacroBlock) result.block).getContent() );
+ assertEquals( 0, ((MacroBlock) result.block).getParameters().size() );
}
public void testParseOldStyleMacroInCompatibilityModeWhenSinglelineMacro()
@@ -114,9 +116,9 @@
assertEquals( macro.length(), result.position );
assertNotNull( result.block );
- assertEquals( "somesinglelinemacro", result.block.getName() );
- assertEquals( "", result.block.getContent() );
- assertEquals( 0, result.block.getParameters().size() );
+ assertEquals( "somesinglelinemacro", ((MacroBlock) result.block).getName() );
+ assertEquals( "", ((MacroBlock) result.block).getContent() );
+ assertEquals( 0, ((MacroBlock) result.block).getParameters().size() );
}
public void testParseOldStyleMacroWithDefaultParameterWithNoValue()
@@ -128,10 +130,10 @@
assertEquals( macro.length(), result.position );
assertNotNull( result.block );
- assertEquals( "macro", result.block.getName() );
- assertEquals( "", result.block.getContent() );
- assertEquals( 1, result.block.getParameters().size() );
- assertEquals( "value", result.block.getParameters().get( "default" ) );
+ assertEquals( "macro", ((MacroBlock) result.block).getName() );
+ assertEquals( "", ((MacroBlock) result.block).getContent() );
+ assertEquals( 1, ((MacroBlock) result.block).getParameters().size() );
+ assertEquals( "value", ((MacroBlock) result.block).getParameters().get( "default" ) );
}
public void testParseOldStyleMacroWithDefaultParameterWithNoValueAndOldClosingStyle()
@@ -143,9 +145,50 @@
assertEquals( macro.length(), result.position );
assertNotNull( result.block );
- assertEquals( "macro", result.block.getName() );
- assertEquals( "", result.block.getContent() );
- assertEquals( 1, result.block.getParameters().size() );
- assertEquals( "value", result.block.getParameters().get( "default" ) );
+ assertEquals( "macro", ((MacroBlock) result.block).getName() );
+ assertEquals( "", ((MacroBlock) result.block).getContent() );
+ assertEquals( 1, ((MacroBlock) result.block).getParameters().size() );
+ assertEquals( "value", ((MacroBlock) result.block).getParameters().get( "default" ) );
+ }
+
+ public void testParseImageMacroWithCaptionOldStyle()
+ throws Exception
+ {
+ parser.setCompatibilityMode( true );
+ String macro = "{image:my.png|alt=caption}";
+ MacroParser.MacroParserResult result = parser.parse( macro + " ...", 1 );
+
+ assertEquals( macro.length(), result.position );
+ assertNotNull( result.block );
+ assertTrue(result.block instanceof FigureBlock );
+ assertEquals( "my.png", ((FigureBlock) result.block).getLocation() );
+ assertEquals( "caption", ((FigureBlock) result.block).getCaption());
+ }
+
+ public void testParseImageMacroWithoutCaptionOldStyle()
+ throws Exception
+ {
+ parser.setCompatibilityMode( true );
+ String macro = "{image:my.png}";
+ MacroParser.MacroParserResult result = parser.parse( macro + " ...", 1 );
+
+ assertEquals( macro.length(), result.position );
+ assertNotNull( result.block );
+ assertTrue(result.block instanceof FigureBlock );
+ assertEquals( "my.png", ((FigureBlock) result.block).getLocation() );
+ assertNull( ((FigureBlock) result.block).getCaption());
+ }
+
+ public void testParseImageMacroNewStyle()
+ throws Exception
+ {
+ String macro = "{image:file=my.png/}";
+ MacroParser.MacroParserResult result = parser.parse( macro + " ...", 1 );
+
+ assertEquals( macro.length(), result.position );
+ assertNotNull( result.block );
+ assertTrue(result.block instanceof FigureBlock );
+ assertEquals( "my.png", ((FigureBlock) result.block).getLocation() );
+ assertNull( ((FigureBlock) result.block).getCaption());
}
}