|
From: <tri...@us...> - 2007-10-19 13:48:57
|
Revision: 33
http://staticwiki.svn.sourceforge.net/staticwiki/?rev=33&view=rev
Author: triathlon98
Date: 2007-10-19 06:48:52 -0700 (Fri, 19 Oct 2007)
Log Message:
-----------
SW-4 fix surroundmarkup renderer
Modified Paths:
--------------
trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/simple/SurroundMarkupRenderer.java
trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/renderer/simple/SurroundMarkupRendererTest.java
Modified: trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/simple/SurroundMarkupRenderer.java
===================================================================
--- trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/simple/SurroundMarkupRenderer.java 2007-10-15 09:04:54 UTC (rev 32)
+++ trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/simple/SurroundMarkupRenderer.java 2007-10-19 13:48:52 UTC (rev 33)
@@ -25,6 +25,7 @@
public class SurroundMarkupRenderer
extends WikiSubRendererAdapter
{
+ private static final char ESCAPE = '\\';
private Text markup;
private char markupStart;
private int markupLen;
@@ -56,14 +57,17 @@
int startpos = 0;
boolean inside = false;
int inputLen = input.length();
- for ( int i = 0; i < inputLen; i++ )
+ for ( int i = 0; i < inputLen ; i++ )
{
if ( input.charAt( i ) == markupStart )
{
if ( inside )
{
- if ( i + markupLen == inputLen ||
- ( i + markupLen < inputLen && !Character.isLetterOrDigit( input.charAt( i + markupLen ) ) ) )
+ char prev = 'x';
+ char next = ' ';
+ if ( i > 0 ) prev = input.charAt( i - 1 );
+ if ( i + markupLen < inputLen ) next = input.charAt( i + markupLen );
+ if ( ESCAPE != prev && Character.isLetterOrDigit( prev ) && !Character.isLetterOrDigit( next ) )
{
if ( markupLen == 1 || startsWith( input, i, markup, markupLen ) )
{
@@ -78,10 +82,13 @@
}
else
{
- if ( i == 0 || !Character.isLetterOrDigit( input.charAt( i - 1 ) ) )
+ char prev = ' ';
+ char next = 'x';
+ if ( i > 0 ) prev = input.charAt( i - 1 );
+ if ( i + markupLen < inputLen ) next = input.charAt( i + markupLen );
+ if ( ESCAPE != prev && !Character.isLetterOrDigit( prev ) && Character.isLetterOrDigit( next ) )
{
- if ( markupLen == 1 ||
- ( i + markupLen <= inputLen && startsWith( input, i, markup, markupLen ) ) )
+ if ( markupLen == 1 || startsWith( input, i, markup, markupLen ) )
{
subRender( result, input.subSequence( startpos, i ) );
startpos = i;
@@ -96,7 +103,8 @@
private boolean startsWith( CharSequence input, int offset, Text markup, int markupLen )
{
- for ( int i = 0; i < markupLen; i++ )
+ if ( offset + markupLen > input.length() ) return false;
+ for ( int i = 0; i < markupLen ; i++ )
{
if ( markup.charAt( i ) != input.charAt( offset + i ) ) return false;
}
Modified: trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/renderer/simple/SurroundMarkupRendererTest.java
===================================================================
--- trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/renderer/simple/SurroundMarkupRendererTest.java 2007-10-15 09:04:54 UTC (rev 32)
+++ trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/renderer/simple/SurroundMarkupRendererTest.java 2007-10-19 13:48:52 UTC (rev 33)
@@ -177,4 +177,37 @@
smr.render( tb, test );
assertEquals( "nothing <b>to ch??nge</b>", tb.toString() );
}
+ public void testCorrectStartEnd()
+ {
+ SurroundMarkupRenderer smr = new SurroundMarkupRenderer( "*|<b>|</b>" );
+ TextBuilder tb = TextBuilder.newInstance();
+ String test;
+
+ tb.setLength( 0 );
+ test = "Use * to *make an excerpt* bold.";
+ smr.render( tb, test );
+ assertEquals( "Use * to <b>make an excerpt</b> bold.", tb.toString() );
+
+ tb.setLength( 0 );
+ test = "To *make an excerpt* in * bold.";
+ smr.render( tb, test );
+ assertEquals( "To <b>make an excerpt</b> in * bold.", tb.toString() );
+
+ tb.setLength( 0 );
+ test = "Use *to make * an excerpt* bold.";
+ smr.render( tb, test );
+ assertEquals( "Use <b>to make * an excerpt</b> bold.", tb.toString() );
+ }
+
+ public void testEscape()
+ {
+ SurroundMarkupRenderer smr = new SurroundMarkupRenderer( "*|<b>|</b>" );
+ TextBuilder tb = TextBuilder.newInstance();
+ String test;
+
+ tb.setLength( 0 );
+ test = "this is \\*not\\* new";
+ smr.render( tb, test );
+ assertEquals( test, tb.toString() );
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|