Author: vsiveton
Date: Tue Aug  1 06:02:26 2006
New Revision: 427569

URL: http://svn.apache.org/viewvc?rev=427569&view=rev
Log:
o reviewed XdocSink and XhtmlSink for nesting items in list and add unit tests 
(thanks trygve)
o HtmlToolsTest is now a PlexusTestCase
o updated doxia-site-renderer test case
- added htmlunit 1.9 as dependency in test scope to test renderer files
- updated template and site descriptor
- added an xml test file to test nested items in list

Added:
    maven/doxia/trunk/doxia-site-renderer/src/test/resources/log4j.properties
    maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/
    maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/nestedItems.xml
Modified:
    
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
    
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
    
maven/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/module/HtmlToolsTest.java
    maven/doxia/trunk/doxia-site-renderer/pom.xml
    
maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
    maven/doxia/trunk/doxia-site-renderer/src/test/resources/default-site.vm
    maven/doxia/trunk/doxia-site-renderer/src/test/site/site.xml

Modified: 
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
--- 
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
 (original)
+++ 
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
 Tue Aug  1 06:02:26 2006
@@ -296,6 +296,7 @@
     public void list_()
     {
         markup( "</ul>" );
+        itemFlag = false;
     }
 
     public void listItem()
@@ -337,6 +338,7 @@
     public void numberedList_()
     {
         markup( "</ol>" );
+        itemFlag = false;
     }
 
     public void numberedListItem()
@@ -359,6 +361,7 @@
     public void definitionList_()
     {
         markup( "</dl>" );
+        itemFlag = false;
     }
 
     public void definedTerm()

Modified: 
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
--- 
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
 (original)
+++ 
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
 Tue Aug  1 06:02:26 2006
@@ -272,6 +272,7 @@
     public void list_()
     {
         write( "</ul>" );
+        itemFlag = false;
     }
 
     public void listItem()
@@ -313,6 +314,7 @@
     public void numberedList_()
     {
         write( "</ol>" );
+        itemFlag = false;
     }
 
     public void numberedListItem()
@@ -335,6 +337,7 @@
     public void definitionList_()
     {
         write( "</dl>" );
+        itemFlag = false;
     }
 
     public void definedTerm()

Modified: 
maven/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/module/HtmlToolsTest.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/module/HtmlToolsTest.java?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
--- 
maven/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/module/HtmlToolsTest.java
 (original)
+++ 
maven/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/module/HtmlToolsTest.java
 Tue Aug  1 06:02:26 2006
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-import junit.framework.TestCase;
+import org.codehaus.plexus.PlexusTestCase;
 
 /**
  * Test case for <code>HtmlTools</code>
@@ -25,9 +25,8 @@
  * @version $Id$
  */
 public class HtmlToolsTest
-    extends TestCase
+    extends PlexusTestCase
 {
-
     /**
      * Verify the awaited results
      */

Modified: maven/doxia/trunk/doxia-site-renderer/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/pom.xml?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/pom.xml (original)
+++ maven/doxia/trunk/doxia-site-renderer/pom.xml Tue Aug  1 06:02:26 2006
@@ -39,5 +39,11 @@
       <artifactId>doxia-decoration-model</artifactId>
       <version>1.0-alpha-8</version>
     </dependency>
+    <dependency>
+      <groupId>htmlunit</groupId>
+      <artifactId>htmlunit</artifactId>
+      <version>1.9</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>

Modified: 
maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
--- 
maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
 (original)
+++ 
maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
 Tue Aug  1 06:02:26 2006
@@ -1,7 +1,7 @@
 package org.apache.maven.doxia.siterenderer;
 
 /*
- * Copyright 2004-2005 The Apache Software Foundation.
+ * Copyright 2004-2006 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,15 +16,33 @@
  * limitations under the License.
  */
 
+import java.io.File;
+import java.io.FileReader;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
 import org.apache.maven.doxia.site.decoration.DecorationModel;
 import org.apache.maven.doxia.site.decoration.io.xpp3.DecorationXpp3Reader;
 import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
-import java.io.FileReader;
-import java.io.IOException;
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
+import com.gargoylesoftware.htmlunit.html.HtmlDefinitionDescription;
+import com.gargoylesoftware.htmlunit.html.HtmlDefinitionList;
+import com.gargoylesoftware.htmlunit.html.HtmlDefinitionTerm;
+import com.gargoylesoftware.htmlunit.html.HtmlDivision;
+import com.gargoylesoftware.htmlunit.html.HtmlElement;
+import com.gargoylesoftware.htmlunit.html.HtmlHeader2;
+import com.gargoylesoftware.htmlunit.html.HtmlHeader4;
+import com.gargoylesoftware.htmlunit.html.HtmlListItem;
+import com.gargoylesoftware.htmlunit.html.HtmlOrderedList;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlParagraph;
+import com.gargoylesoftware.htmlunit.html.HtmlUnorderedList;
 
 /**
+ * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Siveton</a>
  * @author <a href="mailto:[EMAIL PROTECTED]>Emmanuel Venisse</a>
  * @version $Id:DefaultSiteRendererTest.java 348612 2005-11-24 12:54:19 +1100 
(Thu, 24 Nov 2005) brett $
  */
@@ -54,15 +72,295 @@
     }
 
     public void testRender()
-        throws RendererException, IOException, XmlPullParserException
+        throws Exception
     {
-        DecorationModel decoration =
-            new DecorationXpp3Reader().read( new FileReader( getTestFile( 
"src/test/site/site.xml" ) ) );
+        // 
----------------------------------------------------------------------
+        // Render the site
+        // 
----------------------------------------------------------------------
+        DecorationModel decoration = new DecorationXpp3Reader()
+            .read( new FileReader( getTestFile( "src/test/site/site.xml" ) ) );
+
         SiteRenderingContext context = new SiteRenderingContext();
         context.setTemplateName( "default-site.vm" );
         context.setTemplateClassLoader( getClassLoader() );
+        context.setUsingDefaultTemplate( true );
+        Map templateProp = new HashMap();
+        templateProp.put( "outputEncoding", "UTF-8" );
+        context.setTemplateProperties( templateProp );
         context.setDecoration( decoration );
         context.addSiteDirectory( getTestFile( "src/test/site" ) );
+
         renderer.render( renderer.locateDocumentFiles( context ).values(), 
context, getTestFile( "target/output" ) );
+
+        // 
----------------------------------------------------------------------
+        // Verify specific pages
+        // 
----------------------------------------------------------------------
+        verifyCdcPage();
+        verifyNestedItemsPage();
+    }
+
+    public void verifyCdcPage()
+        throws Exception
+    {
+        File nestedItems = getTestFile( "target/output/cdc.html" );
+        assertNotNull( nestedItems );
+        assertTrue( nestedItems.exists() );
+    }
+
+    public void verifyNestedItemsPage()
+        throws Exception
+    {
+        File nestedItems = getTestFile( "target/output/nestedItems.html" );
+        assertNotNull( nestedItems );
+        assertTrue( nestedItems.exists() );
+
+        // HtmlUnit
+        WebClient webClient = new WebClient();
+        HtmlPage page = (HtmlPage) webClient.getPage( nestedItems.toURL() );
+        assertNotNull( page );
+
+        HtmlElement element = page.getHtmlElementById( "contentBox" );
+        assertNotNull( element );
+        HtmlDivision division = (HtmlDivision) element;
+        assertNotNull( division );
+
+        Iterator elementIterator = division.getAllHtmlChildElements();
+
+        HtmlAnchor a = (HtmlAnchor) elementIterator.next();
+        assertNotNull( a );
+        assertEquals( a.getAttributeValue( "name" ), "list_section" );
+
+        HtmlDivision div = (HtmlDivision) elementIterator.next();
+        assertNotNull( div );
+        assertEquals( div.getAttributeValue( "class" ), "section" );
+
+        HtmlHeader2 h2 = (HtmlHeader2) elementIterator.next();
+        assertNotNull( h2 );
+        assertEquals( h2.asText(), "List Section");
+
+        // 
----------------------------------------------------------------------
+        // Unordered lists
+        // 
----------------------------------------------------------------------
+        HtmlHeader4 h4 = (HtmlHeader4) elementIterator.next();
+        assertNotNull( h4 );
+        assertEquals( h4.asText(), "Unordered lists");
+
+        HtmlParagraph p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Below is an unordered list, followed by six 
paragraphs." );
+
+        HtmlUnorderedList ul = (HtmlUnorderedList) elementIterator.next();
+        assertNotNull( ul );
+        assertEquals( ul.getFirstChild().asText(), "" );
+
+        HtmlListItem li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 1." );
+
+        ul = (HtmlUnorderedList) elementIterator.next();
+        assertNotNull( ul );
+        assertEquals( ul.getFirstChild().asText(), "" );
+
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        // No paragraph renderer
+        assertEquals( li.getFirstChild().asText(), "Item 11." );
+        System.out.println(li.getFirstChild().asText() );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        // No paragraph renderer
+        assertEquals( li.getFirstChild().asText(), "Item 12." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 13." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 14." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 2." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 3." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 4." );
+
+        ul = (HtmlUnorderedList) elementIterator.next();
+        assertNotNull( ul );
+        assertEquals( ul.getFirstChild().asText(), "" );
+
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 41." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 42." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 43." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 44." );
+
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 1 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 2 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 3 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 4 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 5 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 6 below list." );
+
+        // 
----------------------------------------------------------------------
+        // Ordered lists
+        // 
----------------------------------------------------------------------
+        h4 = (HtmlHeader4) elementIterator.next();
+        assertNotNull( h4 );
+        assertEquals( h4.asText(), "Ordered lists");
+
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Below is an ordered list, followed by six 
paragraphs." );
+
+        HtmlOrderedList ol = (HtmlOrderedList) elementIterator.next();
+        assertNotNull( ol );
+        assertEquals( ol.getFirstChild().asText(), "" );
+
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 1." );
+
+        ol = (HtmlOrderedList) elementIterator.next();
+        assertNotNull( ol );
+        assertEquals( ol.getFirstChild().asText(), "" );
+
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 11." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 12." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 13." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 14." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 2." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 3." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 4." );
+
+        ol = (HtmlOrderedList) elementIterator.next();
+        assertNotNull( ol );
+        assertEquals( ol.getFirstChild().asText(), "" );
+
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 41." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 42." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 43." );
+        li = (HtmlListItem) elementIterator.next();
+        assertNotNull( li );
+        assertEquals( li.getFirstChild().asText(), "Item 44." );
+
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 1 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 2 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 3 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 4 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 5 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 6 below list." );
+
+        // 
----------------------------------------------------------------------
+        // Definition lists
+        // 
----------------------------------------------------------------------
+        h4 = (HtmlHeader4) elementIterator.next();
+        assertNotNull( h4 );
+        assertEquals( h4.asText(), "Definition lists");
+
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Below is a definition list, followed by six 
paragraphs." );
+
+        HtmlDefinitionList dl = (HtmlDefinitionList) elementIterator.next();
+        assertNotNull( dl );
+        assertEquals( dl.getFirstChild().asText(), "" );
+
+        HtmlDefinitionTerm dt = (HtmlDefinitionTerm) elementIterator.next();
+        assertNotNull( dt );
+        assertEquals( dt.getFirstChild().asText(), "Term 1." );
+        HtmlDefinitionDescription dd = (HtmlDefinitionDescription) 
elementIterator.next();
+        assertNotNull( dd );
+        assertEquals( dd.getFirstChild().asText(), "Description 1." );
+
+        dt = (HtmlDefinitionTerm) elementIterator.next();
+        assertNotNull( dt );
+        assertEquals( dt.getFirstChild().asText(), "Term 2." );
+        dd = (HtmlDefinitionDescription) elementIterator.next();
+        assertNotNull( dd );
+        assertEquals( dd.getFirstChild().asText(), "Description 2." );
+
+        dl = (HtmlDefinitionList) elementIterator.next();
+        assertNotNull( dl );
+        assertEquals( dl.getFirstChild().asText(), "" );
+        dt = (HtmlDefinitionTerm) elementIterator.next();
+        assertNotNull( dt );
+        assertEquals( dt.getFirstChild().asText(), "Term 21." );
+        dd = (HtmlDefinitionDescription) elementIterator.next();
+        assertNotNull( dd );
+        assertEquals( dd.getFirstChild().asText(), "Description 21." );
+
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 1 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 2 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 3 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 4 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 5 below list." );
+        p = (HtmlParagraph) elementIterator.next();
+        assertNotNull( p );
+        assertEquals( p.asText(), "Paragraph 6 below list." );
+
+        assertFalse( elementIterator.hasNext() );
     }
 }

Modified: 
maven/doxia/trunk/doxia-site-renderer/src/test/resources/default-site.vm
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/src/test/resources/default-site.vm?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/test/resources/default-site.vm 
(original)
+++ maven/doxia/trunk/doxia-site-renderer/src/test/resources/default-site.vm 
Tue Aug  1 06:02:26 2006
@@ -1,82 +1,275 @@
-#macro ( banner $id )
-    #set ( $e = $siteDescriptor.getChild( $id ) )
-    #if( $e.getChild( "href" ) )
-        #set ( $link = $e.getChild( "href" ).getValue() )
-        <a href="$link" id="$id">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+
+#macro ( banner $banner $id )
+  #if ( $banner )
+    #if( $banner.href )
+      <a href="$banner.href" id="$id">
     #else
         <span id="$id">
     #end
 
-    #if( $e.getChild( "src" ) )
-        #set ( $src = $e.getChild( "src" ).getValue() )
-        #if ( $e.getChild( "alt" ) )
-            #set ( $alt = $e.getChild( "alt" ).getValue() )
+    #if( $banner.src )
+        #set ( $src = $banner.src )
+        #if ( ! ( $src.toLowerCase().startsWith("http") || 
$src.toLowerCase().startsWith("https") ) )
+            #set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
+            #set ( $src = $src.replaceAll( "\\", "/" ) )
+        #end
+        #if ( $banner.alt )
+            #set ( $alt = $banner.alt )
         #else
             #set ( $alt = "" )
         #end
         <img src="$src" alt="$alt" />
     #else
-        $e.getChild( "name" ).getValue()
+        $banner.name
     #end
 
-    #if( $e.getChild( "href" ) )
+    #if( $banner.href )
         </a>
     #else
         </span>
     #end
-    
+  #end
 #end
 
-#macro ( links )
+#macro ( links $links )
   #set ( $counter = 0 )
-  #set ( $links = $siteDescriptor.getChild( "body" ).getChild( "links" ) )
-  #foreach( $item in $links.getChildren() )
+  #foreach( $item in $links )
     #set ( $counter = $counter + 1 )
-    <a href="$item.getAttribute( "href" )">$item.getAttribute( "name" )</a>
-    #if ( $links.getChildCount() > $counter )
-      | 
+    #set ( $currentItemHref = $PathTool.calculateLink( $item.href, 
$relativePath ) )
+    #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
+    <a href="$currentItemHref">$item.name</a>
+    #if ( $links.size() > $counter )
+      |
+    #end
+  #end
+#end
+
+#macro ( breadcrumbs $breadcrumbs )
+  #set ( $counter = 0 )
+  #foreach( $item in $breadcrumbs )
+    #set ( $counter = $counter + 1 )
+    #set ( $currentItemHref = $PathTool.calculateLink( $item.href, 
$relativePath ) )
+    #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
+
+    #if ( $currentItemHref == $alignedFileName || $currentItemHref == "" )
+      $item.name
+    #else
+      <a href="$currentItemHref">$item.name</a>
+    #end
+    #if ( $breadcrumbs.size() > $counter )
+      &gt;
+    #end
+  #end
+#end
+
+#macro ( displayTree $display $item )
+  #if ( $item && $item.items && $item.items.size() > 0 )
+    #foreach( $subitem in $item.items )
+      #set ( $subitemHref = $PathTool.calculateLink( $subitem.href, 
$relativePath ) )
+      #set ( $subitemHref = $subitemHref.replaceAll( "\\", "/" ) )
+
+      #if ( $alignedFileName == $subitemHref )
+        #set ( $display = true )
+      #end
+
+      #displayTree( $display $subitem )
     #end
   #end
 #end
 
 #macro ( menuItem $item )
-  #if ( $item.getChildCount() > 0 )
-    #set ( $collapse = "expanded" )
-  #else
-    #set ( $collapse = "none" )
+  #set ( $collapse = "none" )
+  #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath 
) )
+  #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
+
+  #if ( $item && $item.items && $item.items.size() > 0 )
+    #if ( $item.collapse == false )
+      #set ( $collapse = "expanded" )
+    #else
+      ## By default collapsed
+      #set ( $collapse = "collapsed" )
+    #end
+
+    #set ( $display = false )
+    #displayTree( $display $item )
+
+    #if ( $alignedFileName == $currentItemHref || $display )
+      #set ( $collapse = "expanded" )
+    #end
   #end
-  #set ( $currentItemHref = $PathTool.calculateLink( $item.getAttribute( 
"href" ), $relativePath ) )
   <li class="$collapse">
-    #if ( $currentFileName == $currentItemHref )
-      <strong><a href="$currentItemHref">$item.getAttribute( "name" 
)</a></strong>
+    #if ( $item.img )
+      #if ( ! ( $item.img.toLowerCase().startsWith("http") || 
$item.img.toLowerCase().startsWith("https") ) )
+        #set ( $src = $PathTool.calculateLink( $item.img, $relativePath ) )
+        #set ( $src = $item.img.replaceAll( "\\", "/" ) )
+        <img src="$src"/>
+      #else
+        <img src="$item.img" align="absbottom" style="border-width: 0"/>
+      #end
+    #end
+    #if ( $alignedFileName == $currentItemHref )
+      <strong>$item.name</strong>
     #else
-      <a href="$currentItemHref">$item.getAttribute( "name" )</a>
+      <a href="$currentItemHref">$item.name</a>
     #end
-  </li>
-  #if ( $item.getChildren() )
-    #if ( $item.getChildCount() > 0 )
+  #if ( $item && $item.items && $item.items.size() > 0 )
+    #if ( $collapse == "expanded" )
       <ul>
-        #foreach( $subitem in $item.getChildren() )
+        #foreach( $subitem in $item.items )
           #menuItem( $subitem )
         #end
       </ul>
     #end
   #end
+  </li>
 #end
 
-#macro ( mainMenu )
-  #set ( $menus = $siteDescriptor.getChild( "body" ).getChildren( "menu" ) )
+#macro ( mainMenu $menus )
   #foreach( $menu in $menus )
-    <h5>$menu.getAttribute( "name" )</h5>
+    #if ( $menu.name )
+    <h5>$menu.name</h5>
+    #end
     <ul>
-      #foreach( $item in $menu.getChildren() )
+      #foreach( $item in $menu.items )
         #menuItem( $item )
       #end
     </ul>
   #end
 #end
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+#macro ( copyright )
+  #if ( $project )
+    #set ( $currentYear = ${currentDate.year} + 1900 )
+
+    #if ( ${project.inceptionYear} && ( ${project.inceptionYear} != 
${currentYear.toString()} ) )
+      ${project.inceptionYear}-${currentYear}
+    #else
+      ${currentYear}
+    #end
+
+    #if ( ${project.organization} && ${project.organization.name} )
+      ${project.organization.name}
+    #end
+  #end
+#end
+
+#macro ( publishDate $position $publishDate $version )
+  #if ( $publishDate && $publishDate.format )
+    #set ( $format = $publishDate.format )
+  #else
+    #set ( $format = "MM/dd/yyyy" )
+  #end
+
+  $dateFormat.applyPattern( $format )
+
+  #set ( $dateToday = $dateFormat.format( $currentDate ) )
+
+  #if ( $publishDate && $publishDate.position )
+    #set ( $datePosition = $publishDate.position )
+  #else
+    #set ( $datePosition = "left" )
+  #end
+
+  #if ( $version )
+    #if ( $version.position )
+      #set ( $versionPosition = $version.position )
+    #else
+      #set ( $versionPosition = "left" )
+    #end
+  #end
+
+  #set ( $breadcrumbs = $decoration.body.breadcrumbs )
+
+  #if ( $datePosition.equalsIgnoreCase( $position ) )
+    #if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( 
$datePosition.equalsIgnoreCase( "bottom" ) ) )
+      &nbsp;| $i18n.getString( "site-renderer", $locale, 
"template.lastpublished" ): $dateToday
+      #if ( $versionPosition.equalsIgnoreCase( $position ) )
+        &nbsp;| $i18n.getString( "site-renderer", $locale, "template.version" 
): ${project.version}
+      #end
+    #elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( 
$datePosition.equalsIgnoreCase( "navigation-top" ) ) )
+      <div id="lastPublished">
+        $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): 
$dateToday
+        #if ( $versionPosition.equalsIgnoreCase( $position ) )
+          &nbsp;| $i18n.getString( "site-renderer", $locale, 
"template.version" ): ${project.version}
+        #end
+      </div>
+    #elseif ( $datePosition.equalsIgnoreCase("left") )
+      <div class="xleft">
+        $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): 
$dateToday
+        #if ( $versionPosition.equalsIgnoreCase( $position ) )
+          &nbsp;| $i18n.getString( "site-renderer", $locale, 
"template.version" ): ${project.version}
+        #end
+        #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
+          | #breadcrumbs( $breadcrumbs )
+        #end
+      </div>
+    #end
+  #elseif ( $versionPosition.equalsIgnoreCase( $position ) )
+    #if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || ( 
$versionPosition.equalsIgnoreCase( "bottom" ) ) )
+      &nbsp;| $i18n.getString( "site-renderer", $locale, "template.version" ): 
${project.version}
+    #elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) || 
( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) )
+      <div id="lastPublished">
+        $i18n.getString( "site-renderer", $locale, "template.version" ): 
${project.version}
+      </div>
+    #elseif ( $versionPosition.equalsIgnoreCase("left") )
+      <div class="xleft">
+        $i18n.getString( "site-renderer", $locale, "template.version" ): 
${project.version}
+        #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
+          | #breadcrumbs( $breadcrumbs )
+        #end
+      </div>
+    #end
+  #elseif ( $position.equalsIgnoreCase( "left" ) )
+    #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
+      <div class="xleft">
+        #breadcrumbs( $breadcrumbs )
+      </div>
+    #end
+  #end
+#end
+
+#macro ( poweredByLogo $poweredBy )
+    #if( $poweredBy )
+        #foreach ($item in $poweredBy)
+            #if( $item.href )
+                #set ( $href = $PathTool.calculateLink( $item.href, 
$relativePath ) )
+                #set ( $href = $href.replaceAll( "\\", "/" ) )
+            #else
+                #set ( $href="http://maven.apache.org/"; )
+            #end
+
+            #if( $item.name )
+                #set ( $name = $item.name )
+            #else
+                #set ( $name = $i18n.getString( "site-renderer", $locale, 
"template.builtby" )  )
+                #set ( $name = "${name} Maven"  )
+            #end
+
+            #if( $item.img )
+                #set ( $img = $item.img )
+            #else
+                #set ( $img = "images/logos/maven-feather.png" )
+            #end
+
+            <a href="$href" title="$name" id="poweredBy">
+              #set ( $img = $PathTool.calculateLink( $img, $relativePath ) )
+              #set ( $img = $img.replaceAll( "\\", "/" ) )
+              <img alt="$name" src="$img" />
+            </a>
+        #end
+        #if( $poweredBy.isEmpty() )
+          <a href="http://maven.apache.org/"; title="$i18n.getString( 
"site-renderer", $locale, "template.builtby" ) Maven" id="poweredBy">
+            <img alt="$i18n.getString( "site-renderer", $locale, 
"template.builtby" ) Maven" 
src="$relativePath/images/logos/maven-feather.png"></img>
+          </a>
+        #end
+    #else
+        <a href="http://maven.apache.org/"; title="$i18n.getString( 
"site-renderer", $locale, "template.builtby" ) Maven" id="poweredBy">
+          <img alt="$i18n.getString( "site-renderer", $locale, 
"template.builtby" ) Maven" 
src="$relativePath/images/logos/maven-feather.png"></img>
+        </a>
+    #end
+#end
+
 <html>
   <head>
     <title>$title</title>
@@ -85,33 +278,44 @@
       @import url("$relativePath/css/maven-theme.css");
       @import url("$relativePath/css/site.css");
     </style>
-    <link rel="stylesheet" href="$relativePath/style/print.css" 
type="text/css" media="print" />
+    <link rel="stylesheet" href="$relativePath/css/print.css" type="text/css" 
media="print" />
     #foreach( $author in $authors )
       <meta name="author" content="$author" />
     #end
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+    <meta http-equiv="Content-Type" content="text/html; 
charset=${outputEncoding}" />
+    #if ( $decoration.body.head )
+      #foreach( $item in $decoration.body.head.getChildren() )
+        #if ( $item.name == "script" )
+          $item.toUnescapedString()
+        #else
+          $item.toString()
+        #end
+      #end
+    #end
   </head>
   <body class="composite">
     <div id="banner">
-      #set ( $banner = "bannerLeft" )
-      #banner( $banner )
-      #set ( $banner = "bannerRight" )
-      #banner( $banner )
+      #banner( $decoration.bannerLeft "bannerLeft" )
+      #banner( $decoration.bannerRight "bannerRight" )
       <div class="clear">
         <hr/>
       </div>
     </div>
     <div id="breadcrumbs">
-      <div class="xleft">$i18n.getString( "site-plugin", $locale, 
"template.lastpublished" ): $currentDate</div>
-      <div class="xright">#links()</div>
+      #publishDate( "left" $decoration.publishDate $decoration.version )
+      <div class="xright">#links( $decoration.body.links )#publishDate( 
"right" $decoration.publishDate $decoration.version )</div>
       <div class="clear">
         <hr/>
       </div>
     </div>
-    <div id="leftColumn"><div id="navcolumn">#mainMenu()<a 
href="http://maven.apache.org/"; title="$i18n.getString( "site-plugin", $locale, 
"template.builtby" ) Maven" id="poweredBy">
-              <img alt="$i18n.getString( "site-plugin", $locale, 
"template.builtby" ) Maven" 
src="$relativePath/images/logos/maven-feather.png"></img>
-            </a>
-    </div></div>
+    <div id="leftColumn">
+      <div id="navcolumn">
+       #publishDate( "navigation-top" $decoration.publishDate 
$decoration.version )
+       #mainMenu( $decoration.body.menus )
+       #poweredByLogo( $decoration.poweredBy )
+       #publishDate( "navigation-bottom" $decoration.publishDate 
$decoration.version )
+      </div>
+    </div>
     <div id="bodyColumn">
       <div id="contentBox">
         $bodyContent
@@ -121,7 +325,7 @@
       <hr/>
     </div>
     <div id="footer">
-      <div class="xright">&#169; 2002-2005, Apache Software Foundation</div>
+      <div class="xright">&#169;#copyright()#publishDate( "bottom" 
$decoration.publishDate $decoration.version )</div>
       <div class="clear">
         <hr/>
       </div>

Added: maven/doxia/trunk/doxia-site-renderer/src/test/resources/log4j.properties
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/src/test/resources/log4j.properties?rev=427569&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/test/resources/log4j.properties 
(added)
+++ maven/doxia/trunk/doxia-site-renderer/src/test/resources/log4j.properties 
Tue Aug  1 06:02:26 2006
@@ -0,0 +1,23 @@
+# -------------------------------------------------------------------
+# Copyright 2006 The Apache Software Foundation.
+#
+# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -------------------------------------------------------------------
+
+log4j.rootCategory=INFO, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%5p [%c{1}:%L] %d{ISO8601} - 
%m%n
+
+log4j.logger.com.gargoylesoftware.htmlunit=ERROR

Modified: maven/doxia/trunk/doxia-site-renderer/src/test/site/site.xml
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/src/test/site/site.xml?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/test/site/site.xml (original)
+++ maven/doxia/trunk/doxia-site-renderer/src/test/site/site.xml Tue Aug  1 
06:02:26 2006
@@ -2,10 +2,11 @@
 <project name="Plexus">
   <bannerLeft>
     <name>Plexus</name>
+    <src>http://plexus.codehaus.org/images/plexus-logo.png</src>
     <href>http://plexus.codehaus.org</href>
   </bannerLeft>
   <bannerRight>
-    <src>http://codehaus.org/codehaus-small.png</src>
+    <src>http://media.codehaus.org/images/unity-codehaus-logo.png</src>
     <href>http://www.codehaus.org</href>
   </bannerRight>
   <body>
@@ -14,7 +15,8 @@
       <item name="The Codehaus" href="http://www.codehaus.org"/>
     </links>
     <menu name="Quick Links">
-      <item name="CDC" href="/cdc.html"/>    
+      <item name="CDC" href="/cdc.html"/>
+      <item name="nestedItems" href="/nestedItems.html"/>
     </menu>
   </body>
 </project>

Added: maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/nestedItems.xml
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/nestedItems.xml?rev=427569&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/nestedItems.xml 
(added)
+++ maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/nestedItems.xml 
Tue Aug  1 06:02:26 2006
@@ -0,0 +1,174 @@
+<?xml version="1.0"?>
+<document>
+    <properties>
+        <title>Test List Issue</title>
+    </properties>
+
+    <body>
+        <section name="List Section">
+            <h4>Unordered lists</h4>            
+            <p>
+               Below is an unordered list, followed by six paragraphs.
+            </p>
+            <ul>
+                <li>
+                    Item 1.
+                    <ul>
+                        <li>
+                            <p>Item 11.</p>
+                        </li>
+                        <li>
+                            <p>Item 12.</p>
+                        </li>
+                        <li>
+                            Item 13.
+                        </li>
+                        <li>
+                            Item 14.
+                        </li>
+                    </ul>
+                </li>
+                <li>
+                    Item 2.
+                </li>
+                <li>
+                    Item 3.
+                </li>
+                <li>
+                    Item 4.
+                    <ul>
+                        <li>
+                            Item 41.
+                        </li>
+                        <li>
+                            Item 42.
+                        </li>
+                        <li>
+                            Item 43.
+                        </li>
+                        <li>
+                            Item 44.
+                        </li>
+                    </ul>
+                </li>
+            </ul>
+            <p>
+               Paragraph 1 below list.
+            </p>
+            <p>
+               Paragraph 2 below list.
+            </p>
+            <p>
+               Paragraph 3 below list.
+            </p>
+            <p>
+               Paragraph 4 below list.
+            </p>
+            <p>
+               Paragraph 5 below list.
+            </p>
+            <p>
+               Paragraph 6 below list.
+            </p>
+
+            <h4>Ordered lists</h4>            
+            <p>
+               Below is an ordered list, followed by six paragraphs.
+            </p>
+            <ol>
+                <li>
+                    Item 1.
+                    <ol>
+                        <li>
+                            Item 11.
+                        </li>
+                        <li>
+                            Item 12.
+                        </li>
+                        <li>
+                            Item 13.
+                        </li>
+                        <li>
+                            Item 14.
+                        </li>
+                    </ol>
+                </li>
+                <li>
+                    Item 2.
+                </li>
+                <li>
+                    Item 3.
+                </li>
+                <li>
+                    Item 4.
+                    <ol>
+                        <li>
+                            Item 41.
+                        </li>
+                        <li>
+                            Item 42.
+                        </li>
+                        <li>
+                            Item 43.
+                        </li>
+                        <li>
+                            Item 44.
+                        </li>
+                    </ol>
+                </li>
+            </ol>
+            <p>
+               Paragraph 1 below list.
+            </p>
+            <p>
+               Paragraph 2 below list.
+            </p>
+            <p>
+               Paragraph 3 below list.
+            </p>
+            <p>
+               Paragraph 4 below list.
+            </p>
+            <p>
+               Paragraph 5 below list.
+            </p>
+            <p>
+               Paragraph 6 below list.
+            </p>
+            
+            <h4>Definition lists</h4>            
+            <p>
+               Below is a definition list, followed by six paragraphs.
+            </p>
+            <dl>
+                <dt>Term 1.</dt>
+                <dd>Description 1.</dd>
+                <dt>Term 2.</dt>
+                <dd>Description 2.
+                  <dl>
+                    <dt>Term 21.</dt>
+                    <dd>Description 21.</dd>
+                  </dl>
+                </dd>
+            </dl>
+            <p>
+               Paragraph 1 below list.
+            </p>
+            <p>
+               Paragraph 2 below list.
+            </p>
+            <p>
+               Paragraph 3 below list.
+            </p>
+            <p>
+               Paragraph 4 below list.
+            </p>
+            <p>
+               Paragraph 5 below list.
+            </p>
+            <p>
+               Paragraph 6 below list.
+            </p>
+        </section>
+    </body>
+</document>


Reply via email to