From: <tri...@us...> - 2007-08-09 18:09:46
|
Revision: 6 http://staticwiki.svn.sourceforge.net/staticwiki/?rev=6&view=rev Author: triathlon98 Date: 2007-08-09 11:09:43 -0700 (Thu, 09 Aug 2007) Log Message: ----------- fix problems when rendering from reader to writer Modified Paths: -------------- trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/WikiRendererAdapter.java Added Paths: ----------- trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/WikiRendererTest.java Modified: trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/WikiRendererAdapter.java =================================================================== --- trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/WikiRendererAdapter.java 2007-08-08 08:57:54 UTC (rev 5) +++ trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/WikiRendererAdapter.java 2007-08-09 18:09:43 UTC (rev 6) @@ -55,6 +55,9 @@ throws WikiException, IOException { TextBuilder tb = TextBuilder.newInstance(); + + int character; + while ( ( character = reader.read() ) >= 0 ) tb.append( (char) character ); render( tb, writer ); } Added: trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/WikiRendererTest.java =================================================================== --- trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/WikiRendererTest.java (rev 0) +++ trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/WikiRendererTest.java 2007-08-09 18:09:43 UTC (rev 6) @@ -0,0 +1,46 @@ +package org.staticwiki.wiki; + +import junit.framework.TestCase; + +import java.io.StringReader; +import java.io.StringWriter; + +/** + * Test for the WikiRenderer class + * + * @author Joachim Van der Auwera <jo...@pr...> + */ +public class WikiRendererTest + extends TestCase +{ + private static WikiContext context; + private static WikiRenderer renderer; + + protected void setUp() + throws Exception + { + super.setUp(); + if ( context == null ) + { + context = new DefaultWikiContext(); + renderer = new DefaultWikiRenderer( context ); + } + } + + public void testString() + throws Exception + { + String test = "bla bla"; + String result = renderer.render( test ); + assertEquals( "<div class=\"wiki\">" + test + "</div>", result ); + } + public void testReader() + throws Exception + { + String test = "bla bla"; + StringReader sr = new StringReader( test ); + StringWriter sw = new StringWriter(); + renderer.render( sr, sw ); + assertEquals( "<div class=\"wiki\">" + test + "</div>", sw.getBuffer().toString() ); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tri...@us...> - 2007-08-20 09:45:36
|
Revision: 12 http://staticwiki.svn.sourceforge.net/staticwiki/?rev=12&view=rev Author: triathlon98 Date: 2007-08-20 02:34:08 -0700 (Mon, 20 Aug 2007) Log Message: ----------- support "----" to include a horizontal rule Modified Paths: -------------- trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/ParagraphLineHandler.java trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/QuoteLineHandler.java trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/WikiLineContext.java trunk/staticwiki-renderer/src/main/macro/org/staticwiki/wiki/WikiRenderPipeline.txt Added Paths: ----------- trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/RuleLineHandler.java trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/renderer/line/RuleLineRendererTest.java Modified: trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/ParagraphLineHandler.java =================================================================== --- trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/ParagraphLineHandler.java 2007-08-17 13:58:17 UTC (rev 11) +++ trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/ParagraphLineHandler.java 2007-08-20 09:34:08 UTC (rev 12) @@ -45,7 +45,8 @@ } else { - result.append( context.getParagraphBreak() ); + if ( !context.isSuppressBreak() ) result.append( context.getParagraphBreak() ); + context.setSuppressBreak( false ); } subRenderer.subRender( result, line ); } Modified: trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/QuoteLineHandler.java =================================================================== --- trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/QuoteLineHandler.java 2007-08-17 13:58:17 UTC (rev 11) +++ trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/QuoteLineHandler.java 2007-08-20 09:34:08 UTC (rev 12) @@ -25,6 +25,7 @@ { private static String BLOCKQUOTE_START = "<blockquote><p>"; private static String BLOCKQUOTE_END = "</p></blockquote>"; + private static String BLOCKQUOTE_BREAK = "<br />"; public boolean render( TextBuilder result, CharSequence line, WikiSubRenderer subRenderer, WikiLineContext context ) { @@ -32,7 +33,7 @@ { context.flush( result ); context.setNewParagraph( true ); - context.setParagraphBreak( BLOCKQUOTE_END ); + context.setParagraphBreak( BLOCKQUOTE_BREAK ); context.setParagraphEnd( BLOCKQUOTE_END ); result.append( BLOCKQUOTE_START ); subRenderer.subRender( result, line.subSequence( 4, line.length() ) ); Added: trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/RuleLineHandler.java =================================================================== --- trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/RuleLineHandler.java (rev 0) +++ trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/RuleLineHandler.java 2007-08-20 09:34:08 UTC (rev 12) @@ -0,0 +1,49 @@ +/** + * This file is part of the staticwiki project. + * + * The contents of this file are subject to the GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * (the "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at http://www.fsf.org/licenses/lgpl.html + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + * ANY KIND, either express or implied. See the License for the specific language governing rights and + * limitations under the License. + */ + +package org.staticwiki.wiki.renderer.line; + +import javolution.lang.TextBuilder; +import org.staticwiki.wiki.renderer.WikiSubRenderer; + +/** + * Render a horizontal rule, triggered by having (four or more) dashes at the beginning of the line. + * + * @author <a href="mailto:jo...@pr...">Joachim Van der Auwera</a> + */ +public class RuleLineHandler + implements WikiLineHandler +{ + private static String RULE = "<hr />"; + + public boolean render( TextBuilder result, CharSequence line, WikiSubRenderer subRenderer, WikiLineContext context ) + { + if ( line.length() >= 4 && '-' == line.charAt( 0 ) && '-' == line.charAt( 1 ) && '-' == line.charAt( 2 ) && + '-' == line.charAt( 3 ) ) + { + int pos = 4; + // extra dashes at the start are allowed + while ( pos < line.length() && '-' == line.charAt( pos ) ) pos++; + // only spaces after that are allowed + while ( pos < line.length() && Character.isWhitespace( line.charAt( pos ) ) ) pos++; + + if ( pos >= line.length() ) + { + result.append( RULE ); + context.setSuppressBreak( true ); + return true; + } + } + return false; + } + +} Modified: trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/WikiLineContext.java =================================================================== --- trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/WikiLineContext.java 2007-08-17 13:58:17 UTC (rev 11) +++ trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/renderer/line/WikiLineContext.java 2007-08-20 09:34:08 UTC (rev 12) @@ -24,6 +24,7 @@ String paragraphBreak = "<br />"; String paragraphEnd; boolean newParagraph = true; + boolean suppressBreak = false; public boolean isNewParagraph() { @@ -55,6 +56,16 @@ this.paragraphEnd = paragraphEnd; } + public boolean isSuppressBreak() + { + return suppressBreak; + } + + public void setSuppressBreak( boolean suppressBreak ) + { + this.suppressBreak = suppressBreak; + } + public void flush( TextBuilder result ) { if ( paragraphEnd != null ) result.append( paragraphEnd ); Modified: trunk/staticwiki-renderer/src/main/macro/org/staticwiki/wiki/WikiRenderPipeline.txt =================================================================== --- trunk/staticwiki-renderer/src/main/macro/org/staticwiki/wiki/WikiRenderPipeline.txt 2007-08-17 13:58:17 UTC (rev 11) +++ trunk/staticwiki-renderer/src/main/macro/org/staticwiki/wiki/WikiRenderPipeline.txt 2007-08-20 09:34:08 UTC (rev 12) @@ -1,12 +1,13 @@ org.staticwiki.wiki.renderer.line.LineRenderer org.staticwiki.wiki.renderer.line.HeaderLineHandler org.staticwiki.wiki.renderer.line.QuoteLineHandler +org.staticwiki.wiki.renderer.line.RuleLineHandler org.staticwiki.wiki.renderer.line.ParagraphLineHandler org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|*|<b>|</b> org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|_|<em>|</em> org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|??|<cite>|</cite> org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|-|<strikethrough>|</strikethrough> -org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|+|<em>|</u> +org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|+|<u>|</u> org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|^|<sup>|</sup> org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|~|<sub>|</sub> org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|%|<tt class="monospaced">|</tt> Added: trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/renderer/line/RuleLineRendererTest.java =================================================================== --- trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/renderer/line/RuleLineRendererTest.java (rev 0) +++ trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/renderer/line/RuleLineRendererTest.java 2007-08-20 09:34:08 UTC (rev 12) @@ -0,0 +1,67 @@ +/** + * This file is part of the staticwiki project. + * + * The contents of this file are subject to the GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * (the "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at http://www.fsf.org/licenses/lgpl.html + * + * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + * ANY KIND, either express or implied. See the License for the specific language governing rights and + * limitations under the License. + */ + +package org.staticwiki.wiki.renderer.line; + +import javolution.lang.TextBuilder; +import junit.framework.TestCase; +import org.staticwiki.wiki.WikiRenderer; +import org.staticwiki.wiki.WikiFactory; + +/** + * Some simple tests for the rule line renderer, see whether it renders the rule in the correct cases. + * + * @author <a href="mailto:jo...@pr...">Joachim Van der Auwera</a> + */ +public class RuleLineRendererTest + extends TestCase +{ + public void testNoRule() throws Exception + { + RuleLineHandler rlh=new RuleLineHandler(); + TextBuilder res = TextBuilder.newInstance(); + WikiLineContext context = new WikiLineContext(); + + assertFalse( rlh.render( res, "", null, context) ); + assertFalse( rlh.render( res, "---", null, context) ); + assertFalse( rlh.render( res, "---- -", null, context) ); + assertFalse( rlh.render( res, "----x", null, context) ); + assertFalse( rlh.render( res, "-----x", null, context) ); + } + + public void testIsRule() throws Exception + { + RuleLineHandler rlh=new RuleLineHandler(); + TextBuilder res = TextBuilder.newInstance(); + WikiLineContext context = new WikiLineContext(); + + assertTrue( rlh.render( res, "----", null, context) ); + assertTrue( rlh.render( res, "-----", null, context) ); + assertTrue( rlh.render( res, "------- ", null, context) ); + assertTrue( rlh.render( res, "-----\t\t ", null, context) ); + } + + public void testRuleWiki() + throws Exception + { + String test = "I want some simple text to verify\n" + + "----\n" + + "That including a rule works"; + String result = "<div class=\"wiki\"><p>I want some simple text to verify" + + "<hr />" + + "That including a rule works</p></div>"; + WikiRenderer wr = WikiFactory.getWikiRenderer(); + String got = wr.render( test ); + assertEquals( result, got ); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tri...@us...> - 2007-08-22 14:38:04
|
Revision: 15 http://staticwiki.svn.sourceforge.net/staticwiki/?rev=15&view=rev Author: triathlon98 Date: 2007-08-22 07:38:00 -0700 (Wed, 22 Aug 2007) Log Message: ----------- fix problems in MarkupSplitter Modified Paths: -------------- trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/MarkupSplitter.java trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/MarkupSplitterTest.java Modified: trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/MarkupSplitter.java =================================================================== --- trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/MarkupSplitter.java 2007-08-22 10:34:20 UTC (rev 14) +++ trunk/staticwiki-renderer/src/main/java/org/staticwiki/wiki/MarkupSplitter.java 2007-08-22 14:38:00 UTC (rev 15) @@ -19,16 +19,18 @@ * Splits a string, providing 2 characters like '!' and '!', '[' and ']' as separators * * @author Florin + * @author <a href="mailto:jo...@pr...">Joachim Van der Auwera</a> */ public class MarkupSplitter implements Iterator<CharSequence>, Iterable<CharSequence> { - CharSequence data; - CharSequence markup; - int curPos; - int nextPos; - char markupBegin, markupEnd; - boolean inside; + protected CharSequence data; + protected char markupBegin, markupEnd; + protected int nextPos; + protected int foundPart, nextPart; + protected int inBegin, inEnd; + protected int outBegin, outEnd; + protected boolean hasNextCalled; public MarkupSplitter( CharSequence input, char markupBegin, char markupEnd ) { @@ -39,43 +41,74 @@ public boolean hasNext() { - markup = null; + if ( data == null ) return false; - nextPos = curPos; - char terminator=(inside)?markupEnd:markupBegin; + if ( foundPart > nextPart ) return true; // we already know the answer - while ( nextPos < data.length() ) + if ( ( foundPart & 1 ) == 1 ) { - char c = data.charAt( nextPos ); - if ( c == terminator ) + // check whether there is an "inside" part + if ( inEnd == 0 || inBegin > data.length() ) return false; + foundPart++; + } + else + { + if ( nextPos >= data.length() ) return false; + outBegin = nextPos; + while ( nextPos < data.length() ) { - break; + char c = data.charAt( nextPos ); + if ( c == markupBegin ) break; + nextPos++; } + outEnd = nextPos; nextPos++; + inBegin = nextPos; + while ( nextPos < data.length() ) + { + char c = data.charAt( nextPos ); + if ( c == markupEnd ) break; + nextPos++; + } + if ( nextPos == data.length() ) + { + outEnd = nextPos; + inBegin = inEnd = 0; + } + else + { + inEnd = nextPos; + nextPos++; + } + foundPart++; } - if ( nextPos<data.length() || !inside ) - { - markup = data.subSequence( curPos, nextPos ); - nextPos++; - return true; - } - return false; + return true; } public boolean isNextInsideMarkup() { - return inside; + return ( ( nextPart & 1 ) == 1 ); } public CharSequence next() { - if ( markup != null ) + if ( nextPart == foundPart ) { - curPos = nextPos; - inside=!inside; - return markup; + if ( !hasNext() ) throw new NoSuchElementException(); } - throw new NoSuchElementException(); + CharSequence res; + if ( ( nextPart & 1 ) == 1 ) + { + // inside part + res = data.subSequence( inBegin, inEnd ); + } + else + { + // outside part + res = data.subSequence( outBegin, outEnd ); + } + nextPart++; + return res; } public void remove() Modified: trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/MarkupSplitterTest.java =================================================================== --- trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/MarkupSplitterTest.java 2007-08-22 10:34:20 UTC (rev 14) +++ trunk/staticwiki-renderer/src/test/java/org/staticwiki/wiki/MarkupSplitterTest.java 2007-08-22 14:38:00 UTC (rev 15) @@ -16,29 +16,72 @@ import java.util.List; import java.util.ArrayList; +import java.util.NoSuchElementException; /** * Test for MarkupSplitter * * @author Florin + * @author <a href="mailto:jo...@pr...">Joachim Van der Auwera</a> */ public class MarkupSplitterTest extends TestCase { + public void testNullHasNext() + { + MarkupSplitter splitter = new MarkupSplitter( null, 'x', 'y' ); + assertFalse( splitter.hasNext() ); + } + + public void testNullNext() + { + MarkupSplitter splitter = new MarkupSplitter( null, 'x', 'y' ); + try + { + splitter.next(); + fail( "should have failed" ); + } + catch ( NoSuchElementException nse ) + {/* correct */} + } + + public void testMultipleHasNext() + { + MarkupSplitter splitter = new MarkupSplitter( "aaa", 'x', 'y' ); + assertTrue( splitter.hasNext() ); + assertTrue( splitter.hasNext() ); + assertTrue( splitter.hasNext() ); + assertEquals( "aaa", splitter.next() ); + assertFalse( splitter.hasNext() ); + } + + public void testNextOnly() + { + MarkupSplitter splitter = new MarkupSplitter( "here is no image", '!', '!' ); + assertEquals( "here is no image", splitter.next() ); + try + { + splitter.next(); + fail( "should have failed" ); + } + catch ( NoSuchElementException nse ) + {/* correct */} + } + public void testDifferentBeginEnd() { MarkupSplitter splitter = - new MarkupSplitter( "here is a link [the link] and another one: [other link]", '[', ']' ); + new MarkupSplitter( "here is a link [the link] and another [other link] one", '[', ']' ); List<String> itemsToRender = new ArrayList<String>(); List<String> itemsToCopy = new ArrayList<String>(); getItems( splitter, itemsToRender, itemsToCopy ); - assertEquals( itemsToRender.size(), 2 ); - assertEquals( itemsToCopy.size(), 3 ); - assertEquals( itemsToRender.get( 0 ), "the link" ); - assertEquals( itemsToRender.get( 1 ), "other link" ); - assertEquals( itemsToCopy.get( 0 ), "here is a link " ); - assertEquals( itemsToCopy.get( 1 ), " and another one: " ); - assertEquals( itemsToCopy.get( 2 ), "" ); + assertEquals( 2, itemsToRender.size() ); + assertEquals( 3, itemsToCopy.size() ); + assertEquals( "the link", itemsToRender.get( 0 ) ); + assertEquals( "other link", itemsToRender.get( 1 ) ); + assertEquals( "here is a link ", itemsToCopy.get( 0 ) ); + assertEquals( " and another ", itemsToCopy.get( 1 ) ); + assertEquals( " one", itemsToCopy.get( 2 ) ); } public void testSameBeginEnd() @@ -48,57 +91,54 @@ List<String> itemsToRender = new ArrayList<String>(); List<String> itemsToCopy = new ArrayList<String>(); getItems( splitter, itemsToRender, itemsToCopy ); - assertEquals( itemsToRender.size(), 2 ); - assertEquals( itemsToCopy.size(), 3 ); - assertEquals( itemsToRender.get( 0 ), "theimage.jpg" ); - assertEquals( itemsToRender.get( 1 ), "otherimage.jpg" ); - assertEquals( itemsToCopy.get( 0 ), "here is an image " ); - assertEquals( itemsToCopy.get( 1 ), " and another one: " ); - assertEquals( itemsToCopy.get( 2 ), "" ); + assertEquals( 2, itemsToRender.size() ); + assertEquals( 2, itemsToCopy.size() ); + assertEquals( "theimage.jpg", itemsToRender.get( 0 ) ); + assertEquals( "otherimage.jpg", itemsToRender.get( 1 ) ); + assertEquals( "here is an image ", itemsToCopy.get( 0 ) ); + assertEquals( " and another one: ", itemsToCopy.get( 1 ) ); } public void testDifferentBeginEndMessedUp() { MarkupSplitter splitter = - new MarkupSplitter( - "[]here is a link [the [link] and another one: [other link[] and another one, not closed [aaa", '[', - ']' ); + new MarkupSplitter( "[]here is a link [the [link] another [other link[] and unclosed [aaa", '[', ']' ); List<String> itemsToRender = new ArrayList<String>(); List<String> itemsToCopy = new ArrayList<String>(); getItems( splitter, itemsToRender, itemsToCopy ); - assertEquals( itemsToRender.size(), 3 ); - assertEquals( itemsToCopy.size(), 4 ); + assertEquals( 3, itemsToRender.size() ); + assertEquals( 4, itemsToCopy.size() ); - assertEquals( itemsToRender.get( 0 ), "" ); - assertEquals( itemsToRender.get( 1 ), "the [link" ); - assertEquals( itemsToRender.get( 2 ), "other link[" ); + assertEquals( "", itemsToRender.get( 0 ), "" ); + assertEquals( "the [link", itemsToRender.get( 1 ) ); + assertEquals( "other link[", itemsToRender.get( 2 ) ); - assertEquals( itemsToCopy.get( 0 ), "" ); - assertEquals( itemsToCopy.get( 1 ), "here is a link " ); - assertEquals( itemsToCopy.get( 2 ), " and another one: " ); - assertEquals( itemsToCopy.get( 3 ), " and another one, not closed " ); + assertEquals( "", itemsToCopy.get( 0 ) ); + assertEquals( "here is a link ", itemsToCopy.get( 1 ) ); + assertEquals( " another ", itemsToCopy.get( 2 ) ); + assertEquals( " and unclosed [aaa", itemsToCopy.get( 3 ) ); } public void testSameBeginEndMessedUp() { MarkupSplitter splitter = - new MarkupSplitter( "!!here is an image !theim!age.jpg! and !another one, not closed: !otherimage.jpg", '!', '!' ); + new MarkupSplitter( "!!here is an image !theim!age.jpg! and !another unclosed: !otherimage.jpg", '!', '!' ); List<String> itemsToRender = new ArrayList<String>(); List<String> itemsToCopy = new ArrayList<String>(); getItems( splitter, itemsToRender, itemsToCopy ); - assertEquals( itemsToRender.size(), 3 ); - assertEquals( itemsToCopy.size(), 4 ); + assertEquals( 3, itemsToRender.size() ); + assertEquals( 4, itemsToCopy.size() ); - assertEquals( itemsToRender.get( 0 ), "" ); - assertEquals( itemsToRender.get( 1 ), "theim" ); - assertEquals( itemsToRender.get( 2 ), " and " ); + assertEquals( "", itemsToRender.get( 0 ) ); + assertEquals( "theim", itemsToRender.get( 1 ) ); + assertEquals( " and ", itemsToRender.get( 2 ) ); - assertEquals( itemsToCopy.get(0), ""); - assertEquals( itemsToCopy.get(1), "here is an image "); - assertEquals( itemsToCopy.get(2), "age.jpg"); - assertEquals( itemsToCopy.get(3), "another one, not closed: "); + assertEquals( "", itemsToCopy.get( 0 ) ); + assertEquals( "here is an image ", itemsToCopy.get( 1 ) ); + assertEquals( "age.jpg", itemsToCopy.get( 2 ) ); + assertEquals( "another unclosed: !otherimage.jpg", itemsToCopy.get( 3 ) ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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. |
From: <tri...@us...> - 2007-10-22 15:01:52
|
Revision: 35 http://staticwiki.svn.sourceforge.net/staticwiki/?rev=35&view=rev Author: triathlon98 Date: 2007-10-22 08:01:46 -0700 (Mon, 22 Oct 2007) Log Message: ----------- more documentation Modified Paths: -------------- trunk/staticwiki-renderer/src/main/macro/org/staticwiki/wiki/macro/panel.properties trunk/staticwiki-renderer/src/site/wiki/architecture.wiki Added Paths: ----------- trunk/staticwiki-renderer/src/site/site.xml Modified: trunk/staticwiki-renderer/src/main/macro/org/staticwiki/wiki/macro/panel.properties =================================================================== --- trunk/staticwiki-renderer/src/main/macro/org/staticwiki/wiki/macro/panel.properties 2007-10-19 14:13:28 UTC (rev 34) +++ trunk/staticwiki-renderer/src/main/macro/org/staticwiki/wiki/macro/panel.properties 2007-10-22 15:01:46 UTC (rev 35) @@ -1,2 +1,2 @@ hasBody=true -template=quote +template=panel Added: trunk/staticwiki-renderer/src/site/site.xml =================================================================== --- trunk/staticwiki-renderer/src/site/site.xml (rev 0) +++ trunk/staticwiki-renderer/src/site/site.xml 2007-10-22 15:01:46 UTC (rev 35) @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="staticwiki"> + <skin> + <groupId>be.progs</groupId> + <artifactId>maven-site-skin</artifactId> + <version>1.0</version> + </skin> + + <publishDate format="yyyy-MM-dd"/> + + <bannerLeft> + <name>staticwiki</name> + <src>http://www.staticwiki.org/images/logo.png</src> + <href>http://www.staticwiki.org/</href> + </bannerLeft> + + <body> + <links> + <item name="staticwiki" href="http://www.staticwiki.org/"/> + <item name="equanda" href="http://www.equanda.org/"/> + </links> + + <menu name="staticwiki"> + <item name="Introduction" href="index.html"/> + <item name="Architecture" href="architecture.html"/> + </menu> + + <menu ref="modules"/> + <menu ref="reports"/> + + </body> + + <poweredBy> + <logo name="maven" href="http://maven.apache.org/" + img="http://maven.apache.org/images/logos/maven-feather.png"/> + <logo name="sourceforge" href="http://sf.net/projects/staticwiki/" + img="http://sourceforge.net/sflogo.php?group_id=staticwiki&type=1"/> + </poweredBy> + +</project> \ No newline at end of file Modified: trunk/staticwiki-renderer/src/site/wiki/architecture.wiki =================================================================== --- trunk/staticwiki-renderer/src/site/wiki/architecture.wiki 2007-10-19 14:13:28 UTC (rev 34) +++ trunk/staticwiki-renderer/src/site/wiki/architecture.wiki 2007-10-22 15:01:46 UTC (rev 35) @@ -1,14 +1,19 @@ h1. Wiki Rendering -The wiki rendering Is basically done in two distinct steps +The wiki rendering is basically done in two distinct steps * macro handling, splitting the wiki up in macros and handling those -This is mainly done because macros can choose whether or not they want their content to have wiki rendering applied to them or not (for example, code macros typically do not want this). * normal wiki markup processing +This is mainly done because macros can choose whether or not they want their content to have wiki rendering applied to them or not (for example, code macros typically do not want this). + + h2. Macro rendering +The context is split in stuff between the macros and the macros themselves. The entire wiki is considered as being inside a "WIKI" macro. It is preceded by the rendered result of the "WIKI-PREFIX" macro, and at the end the "WIKI-SUFFIX" macro is rendered. This allows flexible handling of headers and/or footers in the rendered wiki. + The MacroLoader is used try to load the macro definition. The DefaultMacroLoader loads the definitions from the classpath (org.staticwiki.wiki.macro._macroname_.properties). At this moment all macros are actually implemented as velocity templates. The template name is part of the macro definition, and the TemplateLoader actually loads the template. The DefaultTemplateLoader loads the templates from the classpath (org.staticwiki.wiki.macro._templatename_.vm). +Macro names are case dependen, but note that the default wiki handling uses the convention that builtin macros (like "ERROR") have a capitalized name. The macro has the following structure {code} @@ -19,4 +24,38 @@ * _hasBody_ : indicates whether the macro has a body or not (that is, whether a closing tag is required or not). * _template_ : name of the template, as passed the the TemplateLoader. -h2. Wiki markup processing \ No newline at end of file +The macro itself is a velocity template, and the user can choose whether to use wiki rendering for the content or not. +For example the _quote_ macro uses wiki rendering +{code} +<blockquote>$context.render($macro)</blockquote> +{code} +While the _code_ macro does not. +{code} +<pre>$macro</pre> +{code} + +h2. Wiki markup processing + +The standard wiki processing is configured using the org.staticwiki.wiki.WikiRenderPipeline.txt, which has content like the following. +{code} +org.staticwiki.wiki.renderer.line.LineRenderer +org.staticwiki.wiki.renderer.line.HeaderLineHandler +org.staticwiki.wiki.renderer.line.QuoteLineHandler +org.staticwiki.wiki.renderer.line.RuleLineHandler +org.staticwiki.wiki.renderer.line.ListLineHandler +org.staticwiki.wiki.renderer.line.ParagraphLineHandler +org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|*|<b>|</b> +org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|_|<em>|</em> +org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|??|<cite>|</cite> +org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|-|<strikethrough>|</strikethrough> +org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|+|<u>|</u> +org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|^|<sup>|</sup> +org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|~|<sub>|</sub> +org.staticwiki.wiki.renderer.simple.SurroundMarkupRenderer|%|<tt class="monospaced">|</tt> +org.staticwiki.wiki.renderer.simple.ImageRenderer +org.staticwiki.wiki.renderer.simple.LinkRenderer +org.staticwiki.wiki.renderer.simple.EscapeUnescapeRenderer +{code} +The renderers are put in the wiki rendering pipeline. +The list can contain both WikiSubRenderer or WikiLineHandler implementations. In the latter case, they are added in the previous WikiLineHandlerContainer in the pipeline. +Note that the order is (very) important. For example the EscapeUnescapeRenderer has to be at the end as this assures no html code can be directly inserted in the wiki content. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |