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. |