diff options
author | Jeremias Maerki <jeremias@apache.org> | 2008-08-12 15:30:54 +0000 |
---|---|---|
committer | Jeremias Maerki <jeremias@apache.org> | 2008-08-12 15:30:54 +0000 |
commit | caa63bfe8a10c2d3629a384ec6627eebfc1e302f (patch) | |
tree | 028bc3743fec01abb251b37e92c956f5ad98d081 /src/java/org/apache/fop | |
parent | e714868660adf4707400d5a6d7b1bd9da0db2e1a (diff) | |
download | xmlgraphics-fop-caa63bfe8a10c2d3629a384ec6627eebfc1e302f.tar.gz xmlgraphics-fop-caa63bfe8a10c2d3629a384ec6627eebfc1e302f.zip |
Widened "bookmarks" to "document-navigation" to fit named destination into this namespace as both bookmarks and named destinations share some action types.
Added support for named destinations (no implementation for PDF and no tests, yet).
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AreaTreeNewDesign@685181 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/fop')
-rw-r--r-- | src/java/org/apache/fop/render/intermediate/IFRenderer.java | 11 | ||||
-rw-r--r-- | src/java/org/apache/fop/render/intermediate/extensions/Bookmark.java | 2 | ||||
-rw-r--r-- | src/java/org/apache/fop/render/intermediate/extensions/BookmarkTree.java | 2 | ||||
-rw-r--r-- | src/java/org/apache/fop/render/intermediate/extensions/DocumentNavigationExtensionConstants.java (renamed from src/java/org/apache/fop/render/intermediate/extensions/BookmarkExtensionConstants.java) | 10 | ||||
-rw-r--r-- | src/java/org/apache/fop/render/intermediate/extensions/DocumentNavigationExtensionHandlerFactory.java (renamed from src/java/org/apache/fop/render/intermediate/extensions/BookmarkExtensionHandlerFactory.java) | 36 | ||||
-rw-r--r-- | src/java/org/apache/fop/render/intermediate/extensions/GoToXYAction.java | 2 | ||||
-rw-r--r-- | src/java/org/apache/fop/render/intermediate/extensions/NamedDestination.java | 85 | ||||
-rw-r--r-- | src/java/org/apache/fop/render/intermediate/extensions/URIAction.java | 2 |
8 files changed, 127 insertions, 23 deletions
diff --git a/src/java/org/apache/fop/render/intermediate/IFRenderer.java b/src/java/org/apache/fop/render/intermediate/IFRenderer.java index 345854cde..703b035d1 100644 --- a/src/java/org/apache/fop/render/intermediate/IFRenderer.java +++ b/src/java/org/apache/fop/render/intermediate/IFRenderer.java @@ -83,6 +83,7 @@ import org.apache.fop.render.Renderer; import org.apache.fop.render.intermediate.extensions.Bookmark; import org.apache.fop.render.intermediate.extensions.BookmarkTree; import org.apache.fop.render.intermediate.extensions.GoToXYAction; +import org.apache.fop.render.intermediate.extensions.NamedDestination; import org.apache.fop.render.pdf.PDFEventProducer; /** @@ -269,10 +270,12 @@ public class IFRenderer extends AbstractPathOrientedRenderer { PageViewport pv = dd.getPageViewport(); if (pv != null) { GoToXYAction action = getGoToActionForID(targetID, pv.getPageIndex()); - /* - pdfDoc.getFactory().makeDestination( - dd.getIDRef(), gt.makeReference()); - */ + NamedDestination namedDestination = new NamedDestination(targetID, action); + try { + painter.handleExtensionObject(namedDestination); + } catch (IFException ife) { + handleIFException(ife); + } } else { //Warning already issued by AreaTreeHandler (debug level is sufficient) log.debug("Unresolved destination item received: " + dd.getIDRef()); diff --git a/src/java/org/apache/fop/render/intermediate/extensions/Bookmark.java b/src/java/org/apache/fop/render/intermediate/extensions/Bookmark.java index a96bbd0ff..446da6ef9 100644 --- a/src/java/org/apache/fop/render/intermediate/extensions/Bookmark.java +++ b/src/java/org/apache/fop/render/intermediate/extensions/Bookmark.java @@ -34,7 +34,7 @@ import org.apache.fop.util.XMLUtil; /** * This class is a bookmark element for use in the intermediate format. */ -public class Bookmark implements XMLizable, BookmarkExtensionConstants { +public class Bookmark implements XMLizable, DocumentNavigationExtensionConstants { private String title; private boolean show; diff --git a/src/java/org/apache/fop/render/intermediate/extensions/BookmarkTree.java b/src/java/org/apache/fop/render/intermediate/extensions/BookmarkTree.java index 8ecd87103..77e9726b3 100644 --- a/src/java/org/apache/fop/render/intermediate/extensions/BookmarkTree.java +++ b/src/java/org/apache/fop/render/intermediate/extensions/BookmarkTree.java @@ -32,7 +32,7 @@ import org.apache.xmlgraphics.util.XMLizable; /** * This class is the root of the bookmark tree for use in the intermediate format. */ -public class BookmarkTree implements XMLizable, BookmarkExtensionConstants { +public class BookmarkTree implements XMLizable, DocumentNavigationExtensionConstants { private List bookmarks = new java.util.ArrayList(); diff --git a/src/java/org/apache/fop/render/intermediate/extensions/BookmarkExtensionConstants.java b/src/java/org/apache/fop/render/intermediate/extensions/DocumentNavigationExtensionConstants.java index 184c71dbe..a8f458f97 100644 --- a/src/java/org/apache/fop/render/intermediate/extensions/BookmarkExtensionConstants.java +++ b/src/java/org/apache/fop/render/intermediate/extensions/DocumentNavigationExtensionConstants.java @@ -24,17 +24,21 @@ import org.apache.xmlgraphics.util.QName; import org.apache.fop.render.intermediate.IFConstants; /** - * Constants for the IF bookmark extension. + * Constants for the IF document-level navigation extension. */ -public interface BookmarkExtensionConstants { +public interface DocumentNavigationExtensionConstants { /** Namespace URI for the bookmark extension */ - String NAMESPACE = IFConstants.NAMESPACE + "/bookmarks"; + String NAMESPACE = IFConstants.NAMESPACE + "/document-navigation"; /** the bookmark-tree element */ QName BOOKMARK_TREE = new QName(NAMESPACE, "bookmark-tree"); /** the bookmark element */ QName BOOKMARK = new QName(NAMESPACE, "bookmark"); + + /** the named-destination element */ + QName NAMED_DESTINATION = new QName(NAMESPACE, "named-destination"); + /** the goto-xy element */ QName GOTO_XY = new QName(NAMESPACE, "goto-xy"); /** the goto-uri element */ diff --git a/src/java/org/apache/fop/render/intermediate/extensions/BookmarkExtensionHandlerFactory.java b/src/java/org/apache/fop/render/intermediate/extensions/DocumentNavigationExtensionHandlerFactory.java index ac3f9563a..2822ff2ad 100644 --- a/src/java/org/apache/fop/render/intermediate/extensions/BookmarkExtensionHandlerFactory.java +++ b/src/java/org/apache/fop/render/intermediate/extensions/DocumentNavigationExtensionHandlerFactory.java @@ -35,13 +35,13 @@ import org.apache.fop.util.ContentHandlerFactory; import org.apache.fop.util.XMLUtil; /** - * Factory for the ContentHandler that handles the IF bookmarks namespace. + * Factory for the ContentHandler that handles the IF document navigation namespace. */ -public class BookmarkExtensionHandlerFactory - implements ContentHandlerFactory, BookmarkExtensionConstants { +public class DocumentNavigationExtensionHandlerFactory + implements ContentHandlerFactory, DocumentNavigationExtensionConstants { /** Logger instance */ - protected static Log log = LogFactory.getLog(BookmarkExtensionHandlerFactory.class); + protected static Log log = LogFactory.getLog(DocumentNavigationExtensionHandlerFactory.class); /** {@inheritDoc} */ public String[] getSupportedNamespaces() { @@ -50,17 +50,16 @@ public class BookmarkExtensionHandlerFactory /** {@inheritDoc} */ public ContentHandler createContentHandler() { - return new BookmarkExtensionHandler(); + return new Handler(); } - private static class BookmarkExtensionHandler extends DefaultHandler + private static class Handler extends DefaultHandler implements ContentHandlerFactory.ObjectSource { private StringBuffer content = new StringBuffer(); - //private Attributes lastAttributes; private Stack objectStack = new Stack(); - private BookmarkTree bookmarkTree; + private Object objectBuilt; private ObjectBuiltListener listener; /** {@inheritDoc} */ @@ -69,10 +68,10 @@ public class BookmarkExtensionHandlerFactory boolean handled = false; if (NAMESPACE.equals(uri)) { if (BOOKMARK_TREE.getLocalName().equals(localName)) { - if (bookmarkTree != null) { + if (!objectStack.isEmpty()) { throw new SAXException(localName + " must be the root element!"); } - bookmarkTree = new BookmarkTree(); + BookmarkTree bookmarkTree = new BookmarkTree(); objectStack.push(bookmarkTree); } else if (BOOKMARK.getLocalName().equals(localName)) { String title = attributes.getValue("title"); @@ -91,6 +90,13 @@ public class BookmarkExtensionHandlerFactory ((Bookmark)o).addChildBookmark(b); } objectStack.push(b); + } else if (NAMED_DESTINATION.getLocalName().equals(localName)) { + if (!objectStack.isEmpty()) { + throw new SAXException(localName + " must be the root element!"); + } + String name = attributes.getValue("name"); + NamedDestination dest = new NamedDestination(name, null); + objectStack.push(dest); } else if (GOTO_XY.getLocalName().equals(localName)) { int pageIndex = XMLUtil.getAttributeAsInt(attributes, "page-index"); int x = XMLUtil.getAttributeAsInt(attributes, "x"); @@ -130,6 +136,10 @@ public class BookmarkExtensionHandlerFactory } else { objectStack.pop(); } + } else if (NAMED_DESTINATION.getLocalName().equals(localName)) { + AbstractAction action = (AbstractAction)objectStack.pop(); + NamedDestination dest = (NamedDestination)objectStack.peek(); + dest.setAction(action); } } content.setLength(0); // Reset text buffer (see characters()) @@ -142,14 +152,16 @@ public class BookmarkExtensionHandlerFactory /** {@inheritDoc} */ public void endDocument() throws SAXException { + this.objectBuilt = objectStack.pop(); + assert objectStack.isEmpty(); if (listener != null) { - listener.notifyObjectBuilt(getObject()); + listener.notifyObjectBuilt(this.objectBuilt); } } /** {@inheritDoc} */ public Object getObject() { - return bookmarkTree; + return objectBuilt; } /** {@inheritDoc} */ diff --git a/src/java/org/apache/fop/render/intermediate/extensions/GoToXYAction.java b/src/java/org/apache/fop/render/intermediate/extensions/GoToXYAction.java index ef6d9c2a6..67cd5b592 100644 --- a/src/java/org/apache/fop/render/intermediate/extensions/GoToXYAction.java +++ b/src/java/org/apache/fop/render/intermediate/extensions/GoToXYAction.java @@ -30,7 +30,7 @@ import org.apache.fop.util.XMLUtil; /** * Action class which represents a "go-to" action to an absolute coordinate on a page. */ -public class GoToXYAction extends AbstractAction implements BookmarkExtensionConstants { +public class GoToXYAction extends AbstractAction implements DocumentNavigationExtensionConstants { private int pageIndex; private Point targetLocation; diff --git a/src/java/org/apache/fop/render/intermediate/extensions/NamedDestination.java b/src/java/org/apache/fop/render/intermediate/extensions/NamedDestination.java new file mode 100644 index 000000000..85b6aca19 --- /dev/null +++ b/src/java/org/apache/fop/render/intermediate/extensions/NamedDestination.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id$ */ + +package org.apache.fop.render.intermediate.extensions; + +import org.xml.sax.ContentHandler; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.AttributesImpl; + +import org.apache.xmlgraphics.util.XMLizable; + +import org.apache.fop.util.XMLConstants; + +/** + * This class is a named destination element for use in the intermediate format. + */ +public class NamedDestination implements XMLizable, DocumentNavigationExtensionConstants { + + private String name; + private AbstractAction action; + + /** + * Creates a new named destination. + * @param name the destination's name + * @param action the action performed when the destination is selected + */ + public NamedDestination(String name, AbstractAction action) { + this.name = name; + this.action = action; + } + + /** + * Returns the destination's name. + * @return the name + */ + public String getName() { + return this.name; + } + + /** + * Returns the action performed when the destination is selected. + * @return the action + */ + public AbstractAction getAction() { + return this.action; + } + + /** + * Sets the action performed when the destination is selected. + * @param action the action + */ + public void setAction(AbstractAction action) { + this.action = action; + } + + /** {@inheritDoc} */ + public void toSAX(ContentHandler handler) throws SAXException { + AttributesImpl atts = new AttributesImpl(); + atts.addAttribute(null, "name", "name", XMLConstants.CDATA, getName()); + handler.startElement(NAMED_DESTINATION.getNamespaceURI(), + NAMED_DESTINATION.getLocalName(), NAMED_DESTINATION.getQName(), atts); + if (getAction() != null) { + getAction().toSAX(handler); + } + handler.endElement(NAMED_DESTINATION.getNamespaceURI(), + NAMED_DESTINATION.getLocalName(), NAMED_DESTINATION.getQName()); + } + +} diff --git a/src/java/org/apache/fop/render/intermediate/extensions/URIAction.java b/src/java/org/apache/fop/render/intermediate/extensions/URIAction.java index c5d56d9a4..e3020dac3 100644 --- a/src/java/org/apache/fop/render/intermediate/extensions/URIAction.java +++ b/src/java/org/apache/fop/render/intermediate/extensions/URIAction.java @@ -29,7 +29,7 @@ import org.apache.fop.util.XMLUtil; * Action class which represents a "URI" action, i.e. an action that will call up an external * resource identified by a URI. */ -public class URIAction extends AbstractAction implements BookmarkExtensionConstants { +public class URIAction extends AbstractAction implements DocumentNavigationExtensionConstants { private String uri; |