Author: ltheussl Date: Tue Oct 18 08:27:44 2011 New Revision: 1185529 URL: http://svn.apache.org/viewvc?rev=1185529&view=rev Log: [DOXIA-448] Div class attribute replicated to nested h2 element
Modified: maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/sink/SiteRendererSink.java maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/AttributesVerifier.java maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/resources/site/xdoc/attributes.xml maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/XhtmlBaseSinkTest.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocParserTest.java Modified: maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/sink/SiteRendererSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/sink/SiteRendererSink.java?rev=1185529&r1=1185528&r2=1185529&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/sink/SiteRendererSink.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/sink/SiteRendererSink.java Tue Oct 18 08:27:44 2011 @@ -58,7 +58,7 @@ public class SiteRendererSink private boolean sectionHasID; - private boolean sectionTitle; + private boolean isSectionTitle; private Set<String> anchorsInSectionTitle; @@ -92,6 +92,7 @@ public class SiteRendererSink } /** {@inheritDoc} */ + @Override public void title_() { if ( getTextBuffer().length() > 0 ) @@ -108,6 +109,7 @@ public class SiteRendererSink * Do nothing. * @see org.apache.maven.doxia.module.xhtml.XhtmlSink#title() */ + @Override public void title() { // nop @@ -124,6 +126,7 @@ public class SiteRendererSink } /** {@inheritDoc} */ + @Override public void author_() { if ( getTextBuffer().length() > 0 ) @@ -147,6 +150,7 @@ public class SiteRendererSink } /** {@inheritDoc} */ + @Override public void date_() { if ( getTextBuffer().length() > 0 ) @@ -173,6 +177,7 @@ public class SiteRendererSink * Do nothing. * @see org.apache.maven.doxia.module.xhtml.XhtmlSink#body_() */ + @Override public void body_() { // nop @@ -184,6 +189,7 @@ public class SiteRendererSink * Do nothing. * @see org.apache.maven.doxia.module.xhtml.XhtmlSink#body() */ + @Override public void body() { // nop @@ -212,22 +218,25 @@ public class SiteRendererSink } /** {@inheritDoc} */ + @Override public void head_() { setHeadFlag( false ); } /** {@inheritDoc} */ + @Override public void head() { setHeadFlag( true ); } /** {@inheritDoc} */ + @Override public void anchor( String name, SinkEventAttributes attributes ) { super.anchor( name, attributes ); - if ( sectionTitle ) + if ( isSectionTitle ) { if ( anchorsInSectionTitle == null ) { @@ -236,18 +245,20 @@ public class SiteRendererSink anchorsInSectionTitle.add( name ); } } - + /** {@inheritDoc} */ + @Override protected void onSectionTitle( int depth, SinkEventAttributes attributes ) { this.sectionTitleBuffer = new StringBuffer(); sectionHasID = ( attributes != null && attributes.isDefined ( Attribute.ID.toString() ) ); - sectionTitle = true; + isSectionTitle = true; super.onSectionTitle( depth, attributes ); } /** {@inheritDoc} */ + @Override protected void onSectionTitle_( int depth ) { String sectionTitle = sectionTitleBuffer.toString(); @@ -267,7 +278,7 @@ public class SiteRendererSink sectionHasID = false; } - this.sectionTitle = false; + this.isSectionTitle = false; anchorsInSectionTitle = null; super.onSectionTitle_( depth ); } @@ -284,6 +295,7 @@ public class SiteRendererSink } /** {@inheritDoc} */ + @Override public void text( String text ) { if ( sectionTitleBuffer != null ) @@ -296,11 +308,14 @@ public class SiteRendererSink } /** {@inheritDoc} */ + @Override protected void write( String text ) { + String txt = text; + if ( isHeadFlag() ) { - headWriter.write( unifyEOLs( text ) ); + headWriter.write( unifyEOLs( txt ) ); return; } @@ -311,14 +326,14 @@ public class SiteRendererSink if ( relativePathToBasedir == null ) { - text = StringUtils.replace( text, "$relativePath", "." ); + txt = StringUtils.replace( txt, "$relativePath", "." ); } else { - text = StringUtils.replace( text, "$relativePath", relativePathToBasedir ); + txt = StringUtils.replace( txt, "$relativePath", relativePathToBasedir ); } } - super.write( text ); + super.write( txt ); } } Modified: maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/AttributesVerifier.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/AttributesVerifier.java?rev=1185529&r1=1185528&r2=1185529&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/AttributesVerifier.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/AttributesVerifier.java Tue Oct 18 08:27:44 2011 @@ -212,6 +212,8 @@ public class AttributesVerifier assertEquals( "section", div.getAttribute( "class" ) ); h2 = (HtmlHeading2) elementIterator.next(); assertEquals( "Section with id", h2.asText().trim() ); + a = (HtmlAnchor) elementIterator.next(); + assertEquals( "Section_with_id", a.getAttribute( "name" ) ); a = (HtmlAnchor) elementIterator.next(); assertEquals( "subsection-id", a.getAttribute( "name" ) ); @@ -219,6 +221,30 @@ public class AttributesVerifier assertEquals( "section", div.getAttribute( "class" ) ); h3 = (HtmlHeading3) elementIterator.next(); assertEquals( "Subsection with id", h3.asText().trim() ); + a = (HtmlAnchor) elementIterator.next(); + assertEquals( "Subsection_with_id", a.getAttribute( "name" ) ); + + a = (HtmlAnchor) elementIterator.next(); + assertEquals( "foo", a.getAttribute( "name" ) ); + div = (HtmlDivision) elementIterator.next(); + assertEquals( "bar", div.getAttribute( "class" ) ); + assertEquals( "foo", div.getAttribute( "id" ) ); + h2 = (HtmlHeading2) elementIterator.next(); + assertEquals( "Section name", h2.asText().trim() ); + assertEquals( "", h2.getAttribute( "class" ) ); + a = (HtmlAnchor) elementIterator.next(); + assertEquals( "Section_name", a.getAttribute( "name" ) ); + + a = (HtmlAnchor) elementIterator.next(); + assertEquals( "subfoo", a.getAttribute( "name" ) ); + div = (HtmlDivision) elementIterator.next(); + assertEquals( "subbar", div.getAttribute( "class" ) ); + assertEquals( "subfoo", div.getAttribute( "id" ) ); + h3 = (HtmlHeading3) elementIterator.next(); + assertEquals( "Subsection name", h3.asText().trim() ); + assertEquals( "", h3.getAttribute( "class" ) ); + a = (HtmlAnchor) elementIterator.next(); + assertEquals( "Subsection_name", a.getAttribute( "name" ) ); assertFalse( elementIterator.hasNext() ); } Modified: maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/resources/site/xdoc/attributes.xml URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/resources/site/xdoc/attributes.xml?rev=1185529&r1=1185528&r2=1185529&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/resources/site/xdoc/attributes.xml (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/resources/site/xdoc/attributes.xml Tue Oct 18 08:27:44 2011 @@ -83,5 +83,11 @@ </subsection> </section> + <!-- DOXIA-448 --> + <section name="Section name" id="foo" class="bar"> + <subsection name="Subsection name" id="subfoo" class="subbar"> + </subsection> + </section> + </body> </document> Modified: maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java?rev=1185529&r1=1185528&r2=1185529&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java (original) +++ maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java Tue Oct 18 08:27:44 2011 @@ -486,7 +486,6 @@ public class XhtmlBaseSink att.addAttributes( SinkUtils.filterAttributes( attributes, SinkUtils.SINK_BASE_ATTRIBUTES ) ); - att.removeAttribute( Attribute.ID.toString() ); writeStartTag( HtmlMarkup.DIV, att ); } } Modified: maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/XhtmlBaseSinkTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/XhtmlBaseSinkTest.java?rev=1185529&r1=1185528&r2=1185529&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/XhtmlBaseSinkTest.java (original) +++ maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/XhtmlBaseSinkTest.java Tue Oct 18 08:27:44 2011 @@ -23,6 +23,7 @@ import java.io.StringWriter; import java.io.Writer; import javax.swing.text.html.HTML.Attribute; + import org.codehaus.plexus.PlexusTestCase; /** @@ -211,6 +212,32 @@ public class XhtmlBaseSinkTest } /** + * Test of section method, of class XhtmlBaseSink. + */ + public void testSectionAttributes() + { + final int level = XhtmlBaseSink.SECTION_LEVEL_1; + final SinkEventAttributeSet set = new SinkEventAttributeSet( + new String[] {"name", "section name", "class", "foo", "id", "bar"} ); + + try + { + sink = new XhtmlBaseSink( writer ); + + sink.section( level, set ); + sink.sectionTitle( level, null ); + sink.sectionTitle_( level ); + sink.section_( level ); + } + finally + { + sink.close(); + } + + assertEquals( "<div class=\"foo\" id=\"bar\"><h2></h2></div>", writer.toString() ); + } + + /** * Test of section1 method, of class XhtmlBaseSink. */ public void testSection1() Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java?rev=1185529&r1=1185528&r2=1185529&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java Tue Oct 18 08:27:44 2011 @@ -476,7 +476,7 @@ public class XdocParser } sink.section( level, attribs ); - sink.sectionTitle( level, attribs ); + sink.sectionTitle( level, null ); sink.text( HtmlTools.unescapeHTML( parser.getAttributeValue( null, Attribute.NAME.toString() ) ) ); sink.sectionTitle_( level ); } Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocParserTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocParserTest.java?rev=1185529&r1=1185528&r2=1185529&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocParserTest.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocParserTest.java Tue Oct 18 08:27:44 2011 @@ -31,6 +31,7 @@ import org.apache.maven.doxia.parser.Abs import org.apache.maven.doxia.parser.ParseException; import org.apache.maven.doxia.parser.Parser; import org.apache.maven.doxia.sink.Sink; +import org.apache.maven.doxia.sink.SinkEventAttributeSet; import org.apache.maven.doxia.sink.SinkEventElement; import org.apache.maven.doxia.sink.SinkEventTestingSink; @@ -258,6 +259,40 @@ public class XdocParserTest } /** @throws Exception */ + public void testSectionAttributes() + throws Exception + { + // DOXIA-448 + String text = "<section name=\"section name\" class=\"foo\" id=\"bar\"></section>"; + + SinkEventTestingSink sink = new SinkEventTestingSink(); + + parser.parse( text, sink ); + + Iterator<SinkEventElement> it = sink.getEventList().iterator(); + + assertEquals( "anchor", ( it.next() ).getName() ); + assertEquals( "anchor_", ( it.next() ).getName() ); + + SinkEventElement next = it.next(); + assertEquals( "section1", next.getName() ); + SinkEventAttributeSet set = (SinkEventAttributeSet) next.getArgs()[0]; + assertEquals( 3, set.getAttributeCount() ); + assertTrue( set.containsAttribute( "name", "section name" ) ); + assertTrue( set.containsAttribute( "class", "foo" ) ); + assertTrue( set.containsAttribute( "id", "bar" ) ); + + next = it.next(); + assertEquals( "sectionTitle1", next.getName() ); + assertNull( (SinkEventAttributeSet) next.getArgs()[0] ); + + assertEquals( "text", ( it.next() ).getName() ); + assertEquals( "sectionTitle1_", ( it.next() ).getName() ); + assertEquals( "section1_", ( it.next() ).getName() ); + assertFalse( it.hasNext() ); + } + + /** @throws Exception */ public void testNestedSectionsEventsList() throws Exception {