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() );