Author: ltheussl Date: Tue May 19 10:06:09 2009 New Revision: 776258 URL: http://svn.apache.org/viewvc?rev=776258&view=rev Log: [DOXIASITETOOLS-24] SiteRendererSink swallows formatting in section titles. Also fix anchor generation for section titles.
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/AptVerifier.java maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/EntitiesVerifier.java maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/FaqVerifier.java maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/NestedItemsVerifier.java maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/resources/site/apt/apt.apt 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=776258&r1=776257&r2=776258&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 May 19 10:06:09 2009 @@ -25,7 +25,6 @@ import java.util.List; import javax.swing.text.html.HTML.Attribute; -import javax.swing.text.html.HTML.Tag; import org.apache.maven.doxia.module.xhtml.XhtmlSink; import org.apache.maven.doxia.sink.render.RenderingContext; @@ -53,6 +52,8 @@ private final StringWriter headWriter; + private StringBuffer sectionTitleBuffer; + private boolean sectionHasID; private final Writer writer; @@ -216,105 +217,32 @@ setHeadFlag( true ); } - /** {...@inheritdoc} */ - public void sectionTitle( int level, SinkEventAttributes attributes ) + protected void onSectionTitle( int depth, SinkEventAttributes attributes ) { - if ( level == SECTION_LEVEL_1 || level == SECTION_LEVEL_2 ) - { - // TODO: why are section titles written in head mode? - setHeadFlag( true ); + this.sectionTitleBuffer = new StringBuffer(); + sectionHasID = ( attributes != null && attributes.isDefined ( Attribute.ID.toString() ) ); - sectionHasID = ( attributes != null && attributes.isDefined ( Attribute.ID.toString() ) ); - } - else - { - super.sectionTitle( level, attributes ); - } + super.onSectionTitle( depth, attributes ); } /** {...@inheritdoc} */ - public void sectionTitle_( int level ) + protected void onSectionTitle_( int depth ) { - if ( level == SECTION_LEVEL_1 || level == SECTION_LEVEL_2 ) - { - String sectionTitle = ""; - - if ( getTextBuffer().length() > 0 ) - { - sectionTitle = getTextBuffer().toString(); - } - - resetTextBuffer(); - - // TODO: why are section titles written in head mode? - setHeadFlag( false ); - - writeStartTag( level == SECTION_LEVEL_1 ? Tag.H2 : Tag.H3 ); + String sectionTitle = sectionTitleBuffer.toString(); + this.sectionTitleBuffer = null; - if ( !sectionHasID && !StringUtils.isEmpty( sectionTitle ) ) - { - anchor( HtmlTools.encodeId( sectionTitle ) ); - anchor_(); - } - else - { - sectionHasID = false; - } - - text( sectionTitle ); - writeEndTag( level == SECTION_LEVEL_1 ? Tag.H2 : Tag.H3 ); + if ( !sectionHasID && !StringUtils.isEmpty( sectionTitle ) ) + { + anchor( HtmlTools.encodeId( sectionTitle ) ); + anchor_(); } else { - super.sectionTitle_( level ); + sectionHasID = false; } - } - /** - * {...@inheritdoc} - * - * Sets the head flag to true so the title text is buffered until the closing tag. - * @see org.apache.maven.doxia.sink.XhtmlBaseSink#sectionTitle1() - */ - public void sectionTitle1() - { - sectionTitle( SECTION_LEVEL_1, null ); - } - - /** - * {...@inheritdoc} - * - * Writes out a sectionTitle1 block, including an anchor that is constructed from the - * buffered title text via {...@link org.apache.maven.doxia.util.HtmlTools#encodeId(String)}. - * @see org.apache.maven.doxia.sink.XhtmlBaseSink#sectionTitle1_() - */ - public void sectionTitle1_() - { - sectionTitle_( SECTION_LEVEL_1 ); - } - - /** - * {...@inheritdoc} - * - * Sets the head flag to true so the title text is buffered until the closing tag. - * @see org.apache.maven.doxia.sink.XhtmlBaseSink#sectionTitle2() - */ - public void sectionTitle2() - { - sectionTitle( SECTION_LEVEL_2, null ); - } - - /** - * {...@inheritdoc} - * - * Writes out a sectionTitle2 block, including an anchor that is constructed from the - * buffered title text via {...@link org.apache.maven.doxia.util.HtmlTools#encodeId(String)}. - * @see org.apache.maven.doxia.sink.XhtmlBaseSink#sectionTitle2_() - */ - public void sectionTitle2_() - { - sectionTitle_( SECTION_LEVEL_2 ); + super.onSectionTitle_( depth ); } /** @@ -329,6 +257,18 @@ } /** {...@inheritdoc} */ + public void text( String text ) + { + if ( sectionTitleBuffer != null ) + { + // this implies we're inside a section title, collect text events for anchor generation + sectionTitleBuffer.append( text ); + } + + super.text( text ); + } + + /** {...@inheritdoc} */ protected void write( String text ) { if ( isHeadFlag() ) Modified: maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/AptVerifier.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/AptVerifier.java?rev=776258&r1=776257&r2=776258&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/AptVerifier.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/AptVerifier.java Tue May 19 10:06:09 2009 @@ -23,14 +23,16 @@ import com.gargoylesoftware.htmlunit.html.HtmlDivision; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlHeader2; +import com.gargoylesoftware.htmlunit.html.HtmlHeader3; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlParagraph; +import com.gargoylesoftware.htmlunit.html.UnknownHtmlElement; import java.util.Iterator; /** - * + * Verifies apt transformations. * * @author ltheussl * @version $Id$ @@ -98,5 +100,64 @@ a = (HtmlAnchor) elementIterator.next(); assertEquals( "/index.html", a.getAttributeValue( "href" ) ); + + div = (HtmlDivision) elementIterator.next(); + assertEquals( "section", div.getAttributeValue( "class" ) ); + + h2 = (HtmlHeader2) elementIterator.next(); + assertNotNull( h2 ); + assertEquals( "Section formatting: italic bold mono", h2.asText().trim() ); + + UnknownHtmlElement unknown = (UnknownHtmlElement) elementIterator.next(); + assertEquals( "i", unknown.getTagName() ); + assertEquals( "italic", unknown.asText().trim() ); + + unknown = (UnknownHtmlElement) elementIterator.next(); + assertEquals( "b", unknown.getTagName() ); + assertEquals( "bold", unknown.asText().trim() ); + + unknown = (UnknownHtmlElement) elementIterator.next(); + assertEquals( "tt", unknown.getTagName() ); + assertEquals( "mono", unknown.asText().trim() ); + + a = (HtmlAnchor) elementIterator.next(); + assertEquals( "Section_formatting:_italic_bold_mono", a.getAttributeValue( "name" ) ); + + div = (HtmlDivision) elementIterator.next(); + assertEquals( "section", div.getAttributeValue( "class" ) ); + + HtmlHeader3 h3 = (HtmlHeader3) elementIterator.next(); + assertNotNull( h3 ); + assertEquals( "SubSection formatting: italic bold mono", h3.asText().trim() ); + + unknown = (UnknownHtmlElement) elementIterator.next(); + assertEquals( "i", unknown.getTagName() ); + assertEquals( "italic", unknown.asText().trim() ); + + unknown = (UnknownHtmlElement) elementIterator.next(); + assertEquals( "b", unknown.getTagName() ); + assertEquals( "bold", unknown.asText().trim() ); + + unknown = (UnknownHtmlElement) elementIterator.next(); + assertEquals( "tt", unknown.getTagName() ); + assertEquals( "mono", unknown.asText().trim() ); + + a = (HtmlAnchor) elementIterator.next(); + assertEquals( "SubSection_formatting:_italic_bold_mono", a.getAttributeValue( "name" ) ); + + p = (HtmlParagraph) elementIterator.next(); + assertNotNull( p ); + + unknown = (UnknownHtmlElement) elementIterator.next(); + assertEquals( "i", unknown.getTagName() ); + assertEquals( "italic", unknown.asText().trim() ); + + unknown = (UnknownHtmlElement) elementIterator.next(); + assertEquals( "b", unknown.getTagName() ); + assertEquals( "bold", unknown.asText().trim() ); + + unknown = (UnknownHtmlElement) elementIterator.next(); + assertEquals( "tt", unknown.getTagName() ); + assertEquals( "mono", unknown.asText().trim() ); } } Modified: maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/EntitiesVerifier.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/EntitiesVerifier.java?rev=776258&r1=776257&r2=776258&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/EntitiesVerifier.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/EntitiesVerifier.java Tue May 19 10:06:09 2009 @@ -123,6 +123,10 @@ assertNotNull( h4 ); assertEquals( h4.asText().trim(), "Entities" ); + a = (HtmlAnchor) elementIterator.next(); + assertNotNull( a ); + assertEquals( a.getAttributeValue( "name" ), "Entities" ); + div = (HtmlDivision) elementIterator.next(); HtmlHeader3 h3 = (HtmlHeader3) elementIterator.next(); @@ -167,6 +171,10 @@ assertNotNull( h4 ); assertEquals( h4.asText().trim(), "CDATA" ); + a = (HtmlAnchor) elementIterator.next(); + assertNotNull( a ); + assertEquals( a.getAttributeValue( "name" ), "CDATA" ); + div = (HtmlDivision) elementIterator.next(); assertNotNull( div ); assertEquals( div.getAttributeValue( "class" ), "source" ); Modified: maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/FaqVerifier.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/FaqVerifier.java?rev=776258&r1=776257&r2=776258&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/FaqVerifier.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/FaqVerifier.java Tue May 19 10:06:09 2009 @@ -69,6 +69,9 @@ assertEquals( h2.asText().trim(), "Oft Asked Questions" ); HtmlAnchor a = (HtmlAnchor) elementIterator.next(); + assertEquals( a.getAttributeValue( "name" ), "top" ); + + a = (HtmlAnchor) elementIterator.next(); assertEquals( a.getAttributeValue( "name" ), "Oft_Asked_Questions" ); HtmlParagraph p = (HtmlParagraph) elementIterator.next(); Modified: maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/NestedItemsVerifier.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/NestedItemsVerifier.java?rev=776258&r1=776257&r2=776258&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/NestedItemsVerifier.java (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/NestedItemsVerifier.java Tue May 19 10:06:09 2009 @@ -90,6 +90,10 @@ assertNotNull( h4 ); assertEquals( h4.asText().trim(), "Unordered lists" ); + a = (HtmlAnchor) elementIterator.next(); + assertNotNull( a ); + assertEquals( a.getAttributeValue( "name" ), "Unordered_lists" ); + HtmlParagraph p = (HtmlParagraph) elementIterator.next(); assertNotNull( p ); assertEquals( p.asText().trim(), "Below is an unordered list, followed by six paragraphs." ); @@ -176,6 +180,10 @@ assertNotNull( h4 ); assertEquals( h4.asText().trim(), "Ordered lists" ); + a = (HtmlAnchor) elementIterator.next(); + assertNotNull( a ); + assertEquals( a.getAttributeValue( "name" ), "Ordered_lists" ); + p = (HtmlParagraph) elementIterator.next(); assertNotNull( p ); assertEquals( p.asText().trim(), "Below is an ordered list, followed by six paragraphs." ); @@ -258,6 +266,10 @@ assertNotNull( h4 ); assertEquals( h4.asText().trim(), "Definition lists" ); + a = (HtmlAnchor) elementIterator.next(); + assertNotNull( a ); + assertEquals( a.getAttributeValue( "name" ), "Definition_lists" ); + p = (HtmlParagraph) elementIterator.next(); assertNotNull( p ); assertEquals( p.asText().trim(), "Below is a definition list, followed by six paragraphs." ); Modified: maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/resources/site/apt/apt.apt URL: http://svn.apache.org/viewvc/maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/resources/site/apt/apt.apt?rev=776258&r1=776257&r2=776258&view=diff ============================================================================== --- maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/resources/site/apt/apt.apt (original) +++ maven/doxia/doxia-sitetools/trunk/doxia-site-renderer/src/test/resources/site/apt/apt.apt Tue May 19 10:06:09 2009 @@ -38,6 +38,12 @@ Link to {{{./cdc.html}other document}} and within {{{cdc.html}same document}}. Link to {{{/index.html}root document}}. +Section formatting: <italic> <<bold>> <<<mono>>> + +* SubSection formatting: <italic> <<bold>> <<<mono>>> + + <italic> <<bold>> <<<mono>>> + TOC Macro %{toc}