Author: ltheussl Date: Thu Jun 4 12:20:55 2009 New Revision: 781717 URL: http://svn.apache.org/viewvc?rev=781717&view=rev Log: [DOXIA-184, DOXIA-321] Fix figure handling in docbook parser and sink
Modified: maven/doxia/doxia/trunk/doxia-book/src/test/java/org/apache/maven/doxia/book/services/renderer/docbook/DocBookBookSinkTest.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookSinkTest.java Modified: maven/doxia/doxia/trunk/doxia-book/src/test/java/org/apache/maven/doxia/book/services/renderer/docbook/DocBookBookSinkTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-book/src/test/java/org/apache/maven/doxia/book/services/renderer/docbook/DocBookBookSinkTest.java?rev=781717&r1=781716&r2=781717&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-book/src/test/java/org/apache/maven/doxia/book/services/renderer/docbook/DocBookBookSinkTest.java (original) +++ maven/doxia/doxia/trunk/doxia-book/src/test/java/org/apache/maven/doxia/book/services/renderer/docbook/DocBookBookSinkTest.java Thu Jun 4 12:20:55 2009 @@ -21,6 +21,8 @@ import java.io.Writer; +import java.util.Locale; + import javax.swing.text.MutableAttributeSet; import javax.swing.text.SimpleAttributeSet; @@ -29,6 +31,9 @@ import org.apache.maven.doxia.sink.Sink; import org.apache.maven.doxia.sink.SinkUtils; +import org.apache.maven.doxia.util.DoxiaUtils; +import org.codehaus.plexus.util.FileUtils; + /** * Test the book path of the DockBook sink * @author Dave Syer @@ -375,10 +380,11 @@ /** {...@inheritdoc} */ protected String getFigureBlock( String source, String caption ) { - // TODO: fix source - return "<figure><title>" + caption - + "</title><mediaobject><imageobject><imagedata fileref=\"figure.jpg.jpeg\" format=\"JPEG\" /></imageobject></mediaobject>" - + "</figure>"; + String format = FileUtils.extension( source ).toUpperCase( Locale.ENGLISH ); + + return "<mediaobject><imageobject>" + + "<imagedata fileref=\"" + source + "\" format=\"" + format + "\" />" + + "</imageobject><caption><para>" + caption + "</para></caption></mediaobject>"; } /** {...@inheritdoc} */ @@ -422,13 +428,14 @@ /** {...@inheritdoc} */ protected String getAnchorBlock( String anchor ) { - return "<anchor id=\"" + anchor + "\" />" + anchor; + return "<anchor id=\"" + anchor + "\" />" + anchor + "<!-- anchor_end -->"; } /** {...@inheritdoc} */ protected String getLinkBlock( String link, String text ) { - return "<link linkend=\"" + link + "\">" + text + "</link>"; + String linkend = DoxiaUtils.isInternalLink( link ) ? link.substring( 1 ) : link; + return "<link linkend=\"" + linkend + "\">" + text + "</link>"; } /** {...@inheritdoc} */ Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java?rev=781717&r1=781716&r2=781717&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java Thu Jun 4 12:20:55 2009 @@ -176,27 +176,30 @@ { sink.definedTerm(); } - else if ( parser.getName().equals( SimplifiedDocbookMarkup.FIGURE_TAG.toString() ) ) + else if ( parser.getName().equals( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ) ) { handleFigureStart( sink, parser); } - else if ( parser.getName().equals( SimplifiedDocbookMarkup.IMAGEOBJECT_TAG.toString() ) ) + else if ( parser.getName().equals( SimplifiedDocbookMarkup.IMAGEOBJECT_TAG.toString() ) + || parser.getName().equals( SimplifiedDocbookMarkup.FIGURE_TAG.toString() ) + || parser.getName().equals( SimplifiedDocbookMarkup.THEAD_TAG.toString() ) + || parser.getName().equals( SimplifiedDocbookMarkup.ARTICLEINFO_TAG.toString() ) ) { - handleImageObjectStart( parser, sink ); + parent.push( parser.getName() ); + } + else if ( parser.getName().equals( SimplifiedDocbookMarkup.IMAGEDATA_TAG.toString() ) ) + { + handleImageDataStart( parser, sink ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ) ) { - handleCaptionStart(sink); + handleCaptionStart( parser, sink ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) || parser.getName().equals( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) ) { handleTableStart( sink, parser); } - else if ( parser.getName().equals( SimplifiedDocbookMarkup.THEAD_TAG.toString() ) ) - { - parent.push( parser.getName() ); - } else if ( parser.getName().equals( SimplifiedDocbookMarkup.TR_TAG.toString() ) || parser.getName().equals( SimplifiedDocbookMarkup.ROW_TAG.toString() ) ) { @@ -214,7 +217,7 @@ } else if ( parser.getName().equals( SimplifiedDocbookMarkup.PARA_TAG.toString() ) ) { - sink.paragraph(); + handleParaStart( sink ); } else if ( VERBATIM_ELEMENTS.contains( parser.getName() ) ) { @@ -276,10 +279,6 @@ { handleXrefStart( parser, sink ); } - else if ( parser.getName().equals( SimplifiedDocbookMarkup.ARTICLEINFO_TAG.toString() ) ) - { - parent.push( parser.getName() ); - } else { if ( !ignorable( parser.getName() ) ) @@ -347,11 +346,18 @@ { sink.definedTerm_(); } - else if ( parser.getName().equals( SimplifiedDocbookMarkup.FIGURE_TAG.toString() ) ) + else if ( parser.getName().equals( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ) ) { sink.figure_(); parent.pop(); } + else if ( parser.getName().equals( SimplifiedDocbookMarkup.IMAGEOBJECT_TAG.toString() ) + || parser.getName().equals( SimplifiedDocbookMarkup.FIGURE_TAG.toString() ) + || parser.getName().equals( SimplifiedDocbookMarkup.THEAD_TAG.toString() ) + || parser.getName().equals( SimplifiedDocbookMarkup.ARTICLEINFO_TAG.toString() ) ) + { + parent.pop(); + } else if ( parser.getName().equals( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ) ) { handleCaptionEnd(sink); @@ -363,10 +369,6 @@ //TODO handle tgroups parent.pop(); } - else if ( parser.getName().equals( SimplifiedDocbookMarkup.THEAD_TAG.toString() ) ) - { - parent.pop(); - } else if ( parser.getName().equals( SimplifiedDocbookMarkup.TR_TAG.toString() ) || parser.getName().equals( SimplifiedDocbookMarkup.ROW_TAG.toString() ) ) { @@ -384,7 +386,7 @@ } else if ( parser.getName().equals( SimplifiedDocbookMarkup.PARA_TAG.toString() ) ) { - sink.paragraph_(); + handleParaEnd( sink ); } else if ( VERBATIM_ELEMENTS.contains( parser.getName() ) ) { @@ -444,10 +446,6 @@ sink.link_(); } } - else if ( parser.getName().equals( SimplifiedDocbookMarkup.ARTICLEINFO_TAG.toString() ) ) - { - parent.pop(); - } } /** {...@inheritdoc} */ @@ -509,22 +507,26 @@ return null; } - private void handleCaptionStart( Sink sink ) + private void handleCaptionStart( XmlPullParser parser, Sink sink ) { - if ( isParent( SimplifiedDocbookMarkup.FIGURE_TAG.toString() ) ) + if ( isParent( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ) ) { - sink.figureCaption(); + sink.figureCaption( null ); } else if ( isParent( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) || isParent( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) ) { sink.tableCaption(); } + + parent.push( parser.getName() ); } private void handleCaptionEnd( Sink sink ) { - if ( isParent( SimplifiedDocbookMarkup.FIGURE_TAG.toString() ) ) + parent.pop(); + + if ( isParent( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ) ) { sink.figureCaption_(); } @@ -552,7 +554,7 @@ private void handleFigureStart( Sink sink, XmlPullParser parser ) { - sink.figure(); + sink.figure( null ); parent.push( parser.getName() ); } @@ -591,15 +593,10 @@ } } - private void handleImageObjectStart( XmlPullParser parser, Sink sink ) + private void handleImageDataStart( XmlPullParser parser, Sink sink ) { String fileref = getAttributeValue( parser, "fileref" ); - - if ( fileref != null ) - { - sink.figureGraphics( fileref ); - parent.push( parser.getName() ); - } + sink.figureGraphics( fileref, null ); } private void handleItemizedListStart( Sink sink, XmlPullParser parser ) @@ -668,6 +665,22 @@ parent.push( parser.getName() ); } + private void handleParaEnd( Sink sink ) + { + if ( !isParent( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ) ) + { + sink.paragraph_(); + } + } + + private void handleParaStart( Sink sink ) + { + if ( !isParent( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ) ) + { + sink.paragraph(); + } + } + private void handleTableStart( Sink sink, XmlPullParser parser ) { sink.table(); @@ -677,12 +690,7 @@ private void handleTitleStart( Sink sink ) { - // TODO: title in abstract, authorblurb, bibliography, bibliodiv, bibliomset, appendix - if ( isParent( SimplifiedDocbookMarkup.FIGURE_TAG.toString() ) ) - { - sink.figureCaption(); - } - else if ( isParent( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) + if ( isParent( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) || isParent( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) ) { sink.tableCaption(); @@ -696,16 +704,15 @@ { sink.sectionTitle( level, null ); } - // else ignore + else + { + sink.bold(); + } } private void handleTitleEnd( Sink sink ) { - if ( isParent( SimplifiedDocbookMarkup.FIGURE_TAG.toString() ) ) - { - sink.figureCaption_(); - } - else if ( isParent( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) + if ( isParent( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) || isParent( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) ) { sink.tableCaption_(); @@ -719,7 +726,10 @@ { sink.title_(); } - // else ignore + else + { + sink.bold_(); + } } private void handleUlinkStart( XmlPullParser parser, Sink sink ) @@ -753,7 +763,10 @@ private boolean ignorable( String name ) { - return name.equals( SimplifiedDocbookMarkup.ANCHOR_TAG.toString() ); + return name.equals( SimplifiedDocbookMarkup.ANCHOR_TAG.toString() ) + || name.equals( SimplifiedDocbookMarkup.IMAGEOBJECT_TAG.toString() ) + || name.equals( SimplifiedDocbookMarkup.PHRASE_TAG.toString() ) + || name.equals( SimplifiedDocbookMarkup.TEXTOBJECT_TAG.toString() ); } /** Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java?rev=781717&r1=781716&r2=781717&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java Thu Jun 4 12:20:55 2009 @@ -1091,9 +1091,15 @@ } /** {...@inheritdoc} */ + public void figure() + { + writeStartTag( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG ); + } + + /** {...@inheritdoc} */ public void figure_() { - graphicElement(); + writeEndTag( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG ); } /** @@ -1104,6 +1110,7 @@ * @see SimplifiedDocbookMarkup#IMAGEDATA_TAG * @see SimplifiedDocbookMarkup#FORMAT_ATTRIBUTE * @see SimplifiedDocbookMarkup#FILEREF_ATTRIBUTE + * @deprecated do not use! */ protected void graphicElement() { @@ -1134,8 +1141,17 @@ /** {...@inheritdoc} */ public void figureGraphics( String name ) { - // TODO: extension? - graphicsFileName = name + ".jpeg"; + String format = FileUtils.extension( name ).toUpperCase( Locale.ENGLISH ); + + writeStartTag( SimplifiedDocbookMarkup.IMAGEOBJECT_TAG ); + + MutableAttributeSet att = new SimpleAttributeSet(); + att.addAttribute( SimplifiedDocbookMarkup.FORMAT_ATTRIBUTE, format ); + att.addAttribute( SimplifiedDocbookMarkup.FILEREF_ATTRIBUTE, HtmlTools.escapeHTML( name, true ) ); + + writeSimpleTag( SimplifiedDocbookMarkup.IMAGEDATA_TAG, att ); + + writeEndTag( SimplifiedDocbookMarkup.IMAGEOBJECT_TAG ); } /** @@ -1145,8 +1161,8 @@ */ public void figureCaption() { - writeStartTag( SimplifiedDocbookMarkup.FIGURE_TAG ); - writeStartTag( SimplifiedDocbookMarkup.TITLE_TAG ); + writeStartTag( SimplifiedDocbookMarkup.CAPTION_TAG ); + writeStartTag( SimplifiedDocbookMarkup.PARA_TAG ); } /** @@ -1156,9 +1172,8 @@ */ public void figureCaption_() { - writeEndTag( SimplifiedDocbookMarkup.TITLE_TAG ); - graphicElement(); - writeEndTag( SimplifiedDocbookMarkup.FIGURE_TAG ); + writeEndTag( SimplifiedDocbookMarkup.PARA_TAG ); + writeEndTag( SimplifiedDocbookMarkup.CAPTION_TAG ); } /** {...@inheritdoc} */ Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookSinkTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookSinkTest.java?rev=781717&r1=781716&r2=781717&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookSinkTest.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookSinkTest.java Thu Jun 4 12:20:55 2009 @@ -21,6 +21,8 @@ import java.io.Writer; +import java.util.Locale; + import javax.swing.text.MutableAttributeSet; import javax.swing.text.SimpleAttributeSet; @@ -29,6 +31,8 @@ import org.apache.maven.doxia.sink.SinkUtils; import org.apache.maven.doxia.util.DoxiaUtils; +import org.codehaus.plexus.util.FileUtils; + /** * @author <a href="mailto:ja...@maven.org">Jason van Zyl</a> * @version $Id$ @@ -145,10 +149,11 @@ /** {...@inheritdoc} */ protected String getFigureBlock( String source, String caption ) { - // TODO: fix source - return "<figure><title>" + caption - + "</title><mediaobject><imageobject><imagedata fileref=\"figure.jpg.jpeg\" format=\"JPEG\" /></imageobject></mediaobject>" - + "</figure>"; + String format = FileUtils.extension( source ).toUpperCase( Locale.ENGLISH ); + + return "<mediaobject><imageobject>" + + "<imagedata fileref=\"" + source + "\" format=\"" + format + "\" />" + + "</imageobject><caption><para>" + caption + "</para></caption></mediaobject>"; } /** {...@inheritdoc} */