Author: vmassol
Date: Fri Jan 18 03:32:27 2008
New Revision: 613132
URL: http://svn.apache.org/viewvc?rev=613132&view=rev
Log:
DOXIA-200: Add a Parser for XWiki
* Add support for parameter values with no name when in compatibility mode
(e.g. {image:image.jpg})
Modified:
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/ChildBlocksBuilder.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/MacroBlock.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/parser/MacroParserTest.java
Modified:
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/ChildBlocksBuilder.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/ChildBlocksBuilder.java?rev=613132&r1=613131&r2=613132&view=diff
==============================================================================
---
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/ChildBlocksBuilder.java
(original)
+++
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/ChildBlocksBuilder.java
Fri Jan 18 03:32:27 2008
@@ -147,7 +147,7 @@
break;
case '{':
text = addTextBlockIfNecessary( blocks, specialBlocks,
text );
- i = macroParser.parse( input, i + 1, blocks );
+ i = macroParser.parse( input, i + 1, blocks ) - 2;
break;
case '\\':
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=613132&r1=613131&r2=613132&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
Fri Jan 18 03:32:27 2008
@@ -25,6 +25,11 @@
import org.apache.maven.doxia.parser.ParseException;
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.
+ * However note that macros (and thus this image macro) are also parsed by
+ * [EMAIL PROTECTED] org.apache.maven.doxia.module.xwiki.parser.MacroParser}
when they're inside a paragraph.
+ */
public class FigureBlockParser
implements BlockParser
{
Modified:
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/MacroBlock.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/MacroBlock.java?rev=613132&r1=613131&r2=613132&view=diff
==============================================================================
---
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/MacroBlock.java
(original)
+++
maven/sandbox/trunk/doxia/doxia-module-xwiki/src/main/java/org/apache/maven/doxia/module/xwiki/parser/MacroBlock.java
Fri Jan 18 03:32:27 2008
@@ -26,7 +26,8 @@
public void before( Sink sink )
{
-
+ // TODO: Make sure to generate existing events for some macros like
for example for the image macro we should
+ // send the same events as the one sent by the FigureBlock block.
}
public void after( Sink sink )
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=613132&r1=613131&r2=613132&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
Fri Jan 18 03:32:27 2008
@@ -121,6 +121,20 @@
{
text.append( c );
}
+ else if (isInCompatibilityMode && state ==
STATE_PARAM_NAME)
+ {
+ if ( charAt( input, i ) == '}' )
+ {
+ // In compatibility mode, allow a parameter
without value
+ i++;
+ parameters.put( "default", text.toString() );
+ state = STATE_END;
+ }
+ else
+ {
+ throw new ParseException( "Character '/' is not
valid in parameter names" );
+ }
+ }
else
{
throw new ParseException( "Invalid position for
character '/' in Macro" );
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=613132&r1=613131&r2=613132&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
Fri Jan 18 03:32:27 2008
@@ -136,4 +136,21 @@
assertEquals( "", macroBlock.getContent() );
assertEquals( 0, macroBlock.getParameters().size() );
}
+
+ public void testParseOldStyleMacroWithDefaultParameterWithNoValue()
+ throws Exception
+ {
+ parser.setCompatibilityMode( true );
+ List blocks = new ArrayList();
+ String macro = "{macro:value/}";
+ int pos = parser.parse( macro + " ...", 1, blocks );
+
+ assertEquals( macro.length(), pos );
+ assertEquals( 1, blocks.size() );
+ MacroBlock macroBlock = (MacroBlock) blocks.get( 0 );
+ assertEquals( "macro", macroBlock.getName() );
+ assertEquals( "", macroBlock.getContent() );
+ assertEquals( 1, macroBlock.getParameters().size() );
+ assertEquals( "value", macroBlock.getParameters().get( "default" ) );
+ }
}