Author: rfscholte
Date: Sat Jan 23 20:25:03 2016
New Revision: 1726451

URL: http://svn.apache.org/viewvc?rev=1726451&view=rev
Log:
[DOXIA-508] Format characters are interpreted in monospaced text
Patch provided by Mark Schenk, review and adjusted by Robert Scholte

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
    
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/nested-format.confluence

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=1726451&r1=1726450&r2=1726451&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
 Sat Jan 23 20:25:03 2016
@@ -89,6 +89,10 @@ public class ChildBlocksBuilder
                         specialBlocks = getList( new BoldBlock( getChildren( 
text, specialBlocks ) ), specialBlocks );
                         text = new StringBuilder();
                     }
+                    else if ( insideMonospaced )
+                    {
+                        text.append( c );
+                    }
                     else
                     {
                         text = addTextBlockIfNecessary( blocks, specialBlocks, 
text );
@@ -103,9 +107,9 @@ public class ChildBlocksBuilder
                         specialBlocks = getList( new ItalicBlock( getChildren( 
text, specialBlocks ) ), specialBlocks );
                         text = new StringBuilder();
                     }
-                    else if ( insideLink )
+                    else if ( insideLink || insideMonospaced )
                     {
-                        text.append( '_' );    
+                        text.append( c );
                     }
                     else
                     {
@@ -121,7 +125,7 @@ public class ChildBlocksBuilder
                         blocks.add( new LinethroughBlock( text.toString() ) );
                         text = new StringBuilder();
                     }
-                    else if ( insideLink )
+                    else if ( insideLink || insideMonospaced )
                     {
                         text.append( c );    
                     }
@@ -138,7 +142,7 @@ public class ChildBlocksBuilder
                         blocks.add( new UnderlineBlock( text.toString() ) );
                         text = new StringBuilder();
                     }
-                    else if ( insideLink )
+                    else if ( insideLink || insideMonospaced )
                     {
                         text.append( c );    
                     }
@@ -155,7 +159,7 @@ public class ChildBlocksBuilder
                         blocks.add( new SubBlock( text.toString() ) );
                         text = new StringBuilder();
                     }
-                    else if ( insideLink )
+                    else if ( insideLink || insideMonospaced )
                     {
                         text.append( c );    
                     }
@@ -172,7 +176,7 @@ public class ChildBlocksBuilder
                         blocks.add( new SupBlock( text.toString() ) );
                         text = new StringBuilder();
                     }
-                    else if ( insideLink )
+                    else if ( insideLink || insideMonospaced )
                     {
                         text.append( c );    
                     }
@@ -183,8 +187,15 @@ public class ChildBlocksBuilder
                     }
                     break;
                 case '[':
-                    insideLink = true;
-                    text = addTextBlockIfNecessary( blocks, specialBlocks, 
text );
+                    if ( insideMonospaced )
+                    {
+                        text.append( c );
+                    }
+                    else
+                    {
+                        insideLink = true;
+                        text = addTextBlockIfNecessary( blocks, specialBlocks, 
text );
+                    }
                     break;
                 case ']':
                     if ( insideLink )
@@ -269,24 +280,31 @@ public class ChildBlocksBuilder
                         text = new StringBuilder();
                         insideLink = false;
                     }
+                    else if ( insideMonospaced )
+                    {
+                        text.append( c );
+                    }
 
                     break;
                 case '{':
-
-                    text = addTextBlockIfNecessary( blocks, specialBlocks, 
text );
-
-                    if ( nextChar( input, i ) == '{' ) // it's monospaced
+                    if ( insideMonospaced )
                     {
-                        i++;
-                        insideMonospaced = true;
+                        text.append( c );
+                    }
+                    else
+                    {
+                        text = addTextBlockIfNecessary( blocks, specialBlocks, 
text );
+
+                        if ( nextChar( input, i ) == '{' ) // it's monospaced
+                        {
+                            i++;
+                            insideMonospaced = true;
+                        }
                     }
                     // else it's a confluence macro...
 
                     break;
                 case '}':
-
-                    // System.out.println( "line = " + line );
-
                     if ( nextChar( input, i ) == '}' )
                     {
                         i++;
@@ -295,6 +313,10 @@ public class ChildBlocksBuilder
                                                  specialBlocks );
                         text = new StringBuilder();
                     }
+                    else if ( insideMonospaced )
+                    {
+                        text.append( c );
+                    }
                     else
                     {
                         String name = 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=1726451&r1=1726450&r2=1726451&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
 Sat Jan 23 20:25:03 2016
@@ -408,14 +408,24 @@ public class ConfluenceParserTest
         assertContainsLines( result, "text: A paragraph with 
\nbegin:bold\ntext: bold \nbegin:italic\ntext: italic\nend:italic" );
         assertContainsLines( result, "begin:italic\ntext: italic 
\nbegin:bold\ntext: bold\nend:bold" );
         assertContainsLines( result, "begin:bold\ntext: bold 
\nbegin:monospaced\ntext: monospaced\nend:monospaced" );
-        // 2 paragraphs in the input...
-        assertEquals( 3, result.split( "end:paragraph\n" ).length );
+        assertContainsLines( result, "begin:monospaced\ntext: 
monospaced-with-dashes\nend:monospaced");
+        assertContainsLines( result, "begin:monospaced\ntext: 
monospaced_with_underscores\nend:monospaced");
+        assertContainsLines( result, "begin:monospaced\ntext: 
monospaced*with*stars\nend:monospaced");
+        assertContainsLines( result, "begin:monospaced\ntext: 
monospaced+with+plus\nend:monospaced");
+        assertContainsLines( result, "begin:monospaced\ntext: 
monospaced~with~tilde\nend:monospaced");
+        assertContainsLines( result, "begin:monospaced\ntext: 
monospaced^with^circumflex^accent\nend:monospaced");
+        assertContainsLines( result, "begin:monospaced\ntext: 
monospaced[with]brackets\nend:monospaced");
+        assertContainsLines( result, "begin:monospaced\ntext: 
monospaced{with}curly{brackets\nend:monospaced");
+        assertContainsLines( result, "begin:monospaced\ntext: 
monospaced\\\\\\with\\\\backslashes\nend:monospaced");
+
+        // 3 paragraphs in the input...
+        assertEquals( 4, result.split( "end:paragraph\n" ).length );
         // 6 bolds in the input...
         assertEquals( 7, result.split( "end:bold\n" ).length );
         // 4 italics in the input...
         assertEquals( 5, result.split( "end:italic\n" ).length );
-        // 2 monospaced in the input...
-        assertEquals( 3, result.split( "end:monospaced\n" ).length );
+        // 11 monospaced in the input...
+        assertEquals( 12, result.split( "end:monospaced\n" ).length );
     }
 
     /** @throws Exception */

Modified: 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/nested-format.confluence
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/nested-format.confluence?rev=1726451&r1=1726450&r2=1726451&view=diff
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/nested-format.confluence
 (original)
+++ 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-confluence/src/test/resources/nested-format.confluence
 Sat Jan 23 20:25:03 2016
@@ -3,4 +3,6 @@ A paragraph with *_bold italic_* _*itali
 
 A paragraph with *bold _italic_* _italic *bold*_ *bold {{monospaced}}*
 
+A paragraph with {{monospaced-with-dashes}} {{monospaced_with_underscores}} 
{{monospaced*with*stars}} {{monospaced+with+plus}} {{monospaced~with~tilde}} 
{{monospaced^with^circumflex^accent}} {{monospaced[with]brackets}} 
{{monospaced{with}curly{brackets}} {{monospaced\\\with\\backslashes}}
+
 


Reply via email to