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());
     }
 }