Author: ltheussl
Date: Sun Oct 28 12:42:31 2007
New Revision: 589403

URL: http://svn.apache.org/viewvc?rev=589403&view=rev
Log:
[DOXIA-173] add anchor support
Submitted by: Dave Syer

Added:
    
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/anchor.confluence
    
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/unknown-macro.confluence
Modified:
    
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/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/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=589403&r1=589402&r2=589403&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
 Sun Oct 28 12:42:31 2007
@@ -66,8 +66,7 @@
                     }
                     else
                     {
-                        blocks.add( new TextBlock( text.toString() ) );
-                        text = new StringBuffer();
+                        text = addTextBlockIfNecessary( blocks, text );
                         insideBold = true;
                     }
 
@@ -81,16 +80,14 @@
                     }
                     else
                     {
-                        blocks.add( new TextBlock( text.toString() ) );
-                        text = new StringBuffer();
+                        text = addTextBlockIfNecessary( blocks, text );
                         insideItalic = true;
                     }
 
                     break;
                 case '[':
                     insideLink = true;
-                    blocks.add( new TextBlock( text.toString() ) );
-                    text = new StringBuffer();
+                    text = addTextBlockIfNecessary( blocks, text );
                     break;
                 case ']':
                     if ( insideLink )
@@ -113,16 +110,12 @@
                     break;
                 case '{':
 
-                    if ( input.charAt( i + 1 ) == '{' )
+                    if ( input.charAt( i + 1 ) == '{' ) // it's monospaced
                     {
                         i++;
-                        blocks.add( new TextBlock( text.toString() ) );
-                        text = new StringBuffer();
-                    }
-                    else
-                    {
-                        text.append( c );
                     }
+                    // else it's a confluence macro...
+                    text = addTextBlockIfNecessary( blocks, text );
 
                     break;
                 case '}':
@@ -138,7 +131,16 @@
                     }
                     else
                     {
-                        text.append( c );
+                        String name = text.toString();
+                        if ( name.startsWith( "anchor:" ) )
+                        {
+                            blocks.add( new AnchorBlock( name.substring( 
"anchor:".length() ) ) );
+                        }
+                        else
+                        {
+                            blocks.add( new TextBlock( "{" + name + "}" ) );
+                        }
+                        text = new StringBuffer();
                     }
 
                     break;
@@ -149,8 +151,7 @@
                     if ( input.charAt( i + 1 ) == '\\' )
                     {
                         i++;
-                        blocks.add( new TextBlock( text.toString() ) );
-                        text = new StringBuffer();
+                        text = addTextBlockIfNecessary( blocks, text );
                         blocks.add( new LinebreakBlock() );
                     }
                     else
@@ -171,5 +172,15 @@
         }
 
         return blocks;
+    }
+
+    private StringBuffer addTextBlockIfNecessary( List blocks, StringBuffer 
text )
+    {
+        if ( text.length() == 0 )
+        {
+            return text;
+        }
+        blocks.add( new TextBlock( text.toString() ) );
+        return new StringBuffer();
     }
 }

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=589403&r1=589402&r2=589403&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
 Sun Oct 28 12:42:31 2007
@@ -171,6 +171,28 @@
         assertEquals( 6, result.split( "end:listItem\n" ).length );
     }
 
+    /** @throws Exception */
+    public void testAnchor()
+        throws Exception
+    {
+        String result = locateAndParseTestSourceFile( "anchor" );
+ 
+        assertContainsLines( result, "begin:paragraph\nbegin:anchor, name: 
start\nend:anchor" );
+        assertContainsLines( result, "begin:anchor, name: middle\nend:anchor" 
);
+        assertContainsLines( result, "begin:paragraph\ntext: Simple 
paragraph\nbegin:anchor, name: end\nend:anchor" );
+         // 3 anchors in the input...
+        assertEquals( 4, result.split( "end:anchor\n" ).length );
+    }
+
+    /** @throws Exception */
+    public void testUnknownMacro()
+        throws Exception
+    {
+        String result = locateAndParseTestSourceFile( "unknown-macro" );
+ 
+        assertContainsLines( result, "begin:paragraph\ntext: {unknown:start}" 
);
+   }
+
     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/anchor.confluence
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/anchor.confluence?rev=589403&view=auto
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/anchor.confluence
 (added)
+++ 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/anchor.confluence
 Sun Oct 28 12:42:31 2007
@@ -0,0 +1,7 @@
+h1. Section Title
+
+{anchor:start}Simple paragraph.
+
+Simple paragraph{anchor:end}.
+
+Simple {anchor:middle} paragraph.

Added: 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/unknown-macro.confluence
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/unknown-macro.confluence?rev=589403&view=auto
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/unknown-macro.confluence
 (added)
+++ 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/unknown-macro.confluence
 Sun Oct 28 12:42:31 2007
@@ -0,0 +1,5 @@
+{unknown:start}Simple paragraph.
+
+Simple paragraph{unknown:end}.
+
+Simple {unknown:middle} paragraph.


Reply via email to