Author: ltheussl
Date: Mon Sep 24 07:09:57 2007
New Revision: 578816
URL: http://svn.apache.org/viewvc?rev=578816&view=rev
Log:
Add pdf bookmarks
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoMarkup.java
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoSinkTest.java
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java?rev=578816&r1=578815&r2=578816&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java
Mon Sep 24 07:09:57 2007
@@ -26,6 +26,7 @@
import javax.swing.text.html.HTML.Tag;
import org.apache.maven.doxia.docrenderer.document.DocumentMeta;
+import org.apache.maven.doxia.docrenderer.document.DocumentModel;
import org.apache.maven.doxia.docrenderer.document.DocumentTOC;
import org.apache.maven.doxia.docrenderer.document.DocumentTOCItem;
import org.apache.maven.doxia.util.HtmlTools;
@@ -39,6 +40,8 @@
*/
public class FoAggregateSink extends FoSink
{
+ /** The document model to be used by this sink. */
+ private DocumentModel docModel;
/** Counts the current chapter level. */
private int chapter = 0;
@@ -171,6 +174,17 @@
}
/**
+ * Sets the DocumentModel to be used by this sink. The DocumentModel
provides all the meta-information
+ * required to render a document, eg settings for the cover page, table of
contents, etc.
+ *
+ * @param model the DocumentModel.
+ */
+ public void setDocumentModel( DocumentModel model )
+ {
+ this.docModel = model;
+ }
+
+ /**
* Translates the given name to a usable id.
* Prepends "./" and strips any extension.
*
@@ -579,12 +593,22 @@
}
/**
- * Writes a table of contents.
- *
- * @param toc The DocumentTOC object that contains all information for the
table of contents.
+ * Writes a table of contents. The DocumentModel has to contain a
DocumentTOC for this to work.
*/
- public void toc( DocumentTOC toc )
+ public void toc()
{
+ if ( this.docModel == null )
+ {
+ return;
+ }
+
+ DocumentTOC toc = docModel.getToc();
+
+ if ( toc == null )
+ {
+ return;
+ }
+
writeln( "<fo:page-sequence master-reference=\"toc\"
initial-page-number=\"1\" format=\"i\">" );
regionBefore( toc.getName() );
regionAfter( getFooterText() );
@@ -636,12 +660,61 @@
}
/**
- * Writes a cover page.
- *
- * @param meta The DocumentMeta object that contains all information for
the cover page.
+ * Writes a fo:bookmark-tree. The DocumentModel has to contain a
DocumentTOC for this to work.
+ */
+ protected void pdfBookmarks()
+ {
+ if ( this.docModel == null )
+ {
+ return;
+ }
+
+ DocumentTOC toc = docModel.getToc();
+
+ if ( toc == null )
+ {
+ return;
+ }
+
+ writeStartTag( BOOKMARK_TREE_TAG, "" );
+
+ for ( Iterator k = toc.getItems().iterator(); k.hasNext(); )
+ {
+ DocumentTOCItem tocItem = (DocumentTOCItem) k.next();
+
+ String ref = getIdName( tocItem.getRef() );
+
+ writeStartTag( BOOKMARK_TAG, "internal-destination", ref );
+
+ writeStartTag( BOOKMARK_TITLE_TAG, "" );
+
+ write( tocItem.getName() );
+
+ writeEndTag( BOOKMARK_TITLE_TAG );
+
+ writeEndTag( BOOKMARK_TAG );
+ }
+
+ writeEndTag( BOOKMARK_TREE_TAG );
+ }
+
+ /**
+ * Writes a cover page. The DocumentModel has to contain a DocumentMeta
for this to work.
*/
- public void coverPage( DocumentMeta meta )
+ public void coverPage()
{
+ if ( this.docModel == null )
+ {
+ return;
+ }
+
+ DocumentMeta meta = docModel.getMeta();
+
+ if ( meta == null )
+ {
+ return;
+ }
+
String title = meta.getTitle();
String author = meta.getAuthor();
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoMarkup.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoMarkup.java?rev=578816&r1=578815&r2=578816&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoMarkup.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoMarkup.java
Mon Sep 24 07:09:57 2007
@@ -298,4 +298,33 @@
}
};
+ /** FO tag for <code>bookmark-tree</code>. */
+ Tag BOOKMARK_TREE_TAG = new Tag()
+ {
+ /** [EMAIL PROTECTED] */
+ public String toString()
+ {
+ return "bookmark-tree";
+ }
+ };
+
+ /** FO tag for <code>bookmark</code>. */
+ Tag BOOKMARK_TAG = new Tag()
+ {
+ /** [EMAIL PROTECTED] */
+ public String toString()
+ {
+ return "bookmark";
+ }
+ };
+
+ /** FO tag for <code>bookmark-title</code>. */
+ Tag BOOKMARK_TITLE_TAG = new Tag()
+ {
+ /** [EMAIL PROTECTED] */
+ public String toString()
+ {
+ return "bookmark-title";
+ }
+ };
}
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java?rev=578816&r1=578815&r2=578816&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java
Mon Sep 24 07:09:57 2007
@@ -934,6 +934,8 @@
writeEndTag( SIMPLE_PAGE_MASTER_TAG );
writeEndTag( LAYOUT_MASTER_SET_TAG );
+
+ pdfBookmarks();
}
/**
@@ -1175,4 +1177,11 @@
// do nothing, overridden by AggregateSink
}
+ /**
+ * Writes a fo:bookmark-tree. By default does nothing, gets overridden by
AggregateSink.
+ */
+ protected void pdfBookmarks()
+ {
+ // do nothing, overridden by AggregateSink
+ }
}
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoSinkTest.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoSinkTest.java?rev=578816&r1=578815&r2=578816&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoSinkTest.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoSinkTest.java
Mon Sep 24 07:09:57 2007
@@ -23,6 +23,7 @@
import java.io.Writer;
import org.apache.maven.doxia.docrenderer.document.DocumentMeta;
+import org.apache.maven.doxia.docrenderer.document.DocumentModel;
import org.apache.maven.doxia.docrenderer.document.DocumentTOC;
import org.apache.maven.doxia.docrenderer.document.DocumentTOCItem;
@@ -65,11 +66,13 @@
{
FoAggregateSink fosink = new FoAggregateSink( getTestWriter(
"aggregate" ) );
+ fosink.setDocumentModel( getModel() );
+
fosink.beginDocument();
- fosink.coverPage( getMeta() );
+ fosink.coverPage();
- fosink.toc( getToc() );
+ fosink.toc();
fosink.setDocumentName( "doc1" );
fosink.setDocumentTitle( "Document 1" );
@@ -84,6 +87,14 @@
// then generate PDF
fo2pdf( "aggregate" );
+ }
+
+ private DocumentModel getModel()
+ {
+ DocumentModel model = new DocumentModel();
+ model.setToc( getToc() );
+ model.setMeta( getMeta() );
+ return model ;
}
private DocumentMeta getMeta()