Author: ltheussl
Date: Tue May 12 13:46:00 2009
New Revision: 773896

URL: http://svn.apache.org/viewvc?rev=773896&view=rev
Log:
[DOXIA-319] Improve toc macro for CSS

Modified:
    
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/macro/AbstractMacro.java
    
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/macro/toc/TocMacro.java
    
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/macro/toc/TocMacroTest.java

Modified: 
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/macro/AbstractMacro.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/macro/AbstractMacro.java?rev=773896&r1=773895&r2=773896&view=diff
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/macro/AbstractMacro.java
 (original)
+++ 
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/macro/AbstractMacro.java
 Tue May 12 13:46:00 2009
@@ -19,8 +19,14 @@
  * under the License.
  */
 
+import java.util.Iterator;
+import java.util.Map;
+
 import org.apache.maven.doxia.logging.Log;
 import org.apache.maven.doxia.logging.SystemStreamLog;
+import org.apache.maven.doxia.sink.SinkEventAttributeSet;
+import org.apache.maven.doxia.sink.SinkEventAttributes;
+
 import org.codehaus.plexus.util.StringUtils;
 
 /**
@@ -74,4 +80,39 @@
             throw new IllegalArgumentException( paramName + " is a required 
parameter!" );
         }
     }
+
+    /**
+     * Convert the Map of macro parameters to an AttributeSet.
+     * No check of validity is done, all parameters are added.
+     *
+     * @param parameters the macro parameters.
+     * @return a SinkEventAttributeSet containing the same parameters,
+     *  or null if parameters is null.
+     *
+     * @since 1.1.1.
+     */
+    protected static SinkEventAttributes getAttributesFromMap( Map parameters )
+    {
+        if ( parameters == null )
+        {
+            return null;
+        }
+
+        final int count = parameters.size();
+
+        if ( count <= 0 )
+        {
+            return null;
+        }
+
+        final SinkEventAttributeSet atts = new SinkEventAttributeSet( count );
+
+        for ( Iterator it = parameters.keySet().iterator(); it.hasNext(); )
+        {
+            final Object key = it.next();
+            atts.addAttribute( key, parameters.get( key ) );
+        }
+
+        return atts;
+    }
 }

Modified: 
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/macro/toc/TocMacro.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/macro/toc/TocMacro.java?rev=773896&r1=773895&r2=773896&view=diff
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/macro/toc/TocMacro.java
 (original)
+++ 
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/macro/toc/TocMacro.java
 Tue May 12 13:46:00 2009
@@ -127,29 +127,26 @@
             throw new MacroExecutionException( "ParseException: " + 
e.getMessage(), e );
         }
 
-        if ( index.getChildEntries().size() > 0 )
+        if ( index.getChildEntries().size() > 0
+                && ( ( fromDepth <= toDepth ) || ( section == 0 ) ) )
         {
-            if ( ( fromDepth <= toDepth ) || ( section == 0 ) )
-            {
-                sink.list();
-            }
+            sink.list( getAttributesFromMap( request.getParameters() ) );
 
             int i = 1;
 
             for ( Iterator it = index.getChildEntries().iterator(); 
it.hasNext(); )
             {
                 IndexEntry sectionIndex = (IndexEntry) it.next();
+
                 if ( ( i == section ) || ( section == 0 ) )
                 {
                     writeSubSectionN( sink, sectionIndex, 1 );
                 }
+
                 i++;
             }
 
-            if ( ( fromDepth <= toDepth ) || ( section == 0 ) )
-            {
-                sink.list_();
-            }
+            sink.list_();
         }
     }
 

Modified: 
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/macro/toc/TocMacroTest.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/macro/toc/TocMacroTest.java?rev=773896&r1=773895&r2=773896&view=diff
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/macro/toc/TocMacroTest.java
 (original)
+++ 
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/macro/toc/TocMacroTest.java
 Tue May 12 13:46:00 2009
@@ -30,6 +30,7 @@
 import org.apache.maven.doxia.macro.MacroExecutionException;
 import org.apache.maven.doxia.macro.MacroRequest;
 import org.apache.maven.doxia.parser.XhtmlBaseParser;
+import org.apache.maven.doxia.sink.SinkEventAttributeSet;
 import org.apache.maven.doxia.sink.SinkEventElement;
 import org.apache.maven.doxia.sink.SinkEventTestingSink;
 
@@ -109,16 +110,22 @@
         macroParameters.put( "section", "2" );
         macroParameters.put( "fromDepth", "1" );
         macroParameters.put( "toDepth", "2" );
+        macroParameters.put( "class", "myClass" );
+        macroParameters.put( "id", "myId" );
 
         sink.reset();
         request = new MacroRequest( macroParameters, basedir );
         macro.execute( sink, request );
 
         it = sink.getEventList().iterator();
-        assertEquals( "list", ( (SinkEventElement) it.next() ).getName() );
+        SinkEventElement event = (SinkEventElement) it.next();
+        assertEquals( "list", event.getName() );
+        SinkEventAttributeSet atts = (SinkEventAttributeSet) 
event.getArgs()[0];
+        assertEquals( "myId", atts.getAttribute( "id" ) );
+        assertEquals( "myClass", atts.getAttribute( "class" ) );
         assertEquals( "listItem", ( (SinkEventElement) it.next() ).getName() );
         assertEquals( "link", ( (SinkEventElement) it.next() ).getName() );
-        SinkEventElement event = (SinkEventElement) it.next();
+        event = (SinkEventElement) it.next();
         assertEquals( "text", event.getName() );
         assertEquals( "h22",  (String) event.getArgs()[0] );
         assertEquals( "link_", ( (SinkEventElement) it.next() ).getName() );


Reply via email to