From: Jay Bryant Date: Sun, 1 Apr 2007 14:48:54 +0000 (+0000) Subject: changes to support named destination X-Git-Tag: fop-0_94~158 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b95c8c02da88175ed295d94637591baaed8edf8f;p=xmlgraphics-fop.git changes to support named destination git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@524602 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/fop/fo/extensions/destination/Destination.java b/src/java/org/apache/fop/fo/extensions/destination/Destination.java new file mode 100644 index 000000000..b16962b74 --- /dev/null +++ b/src/java/org/apache/fop/fo/extensions/destination/Destination.java @@ -0,0 +1,79 @@ +package org.apache.fop.fo.extensions.destination; + +import org.apache.fop.fo.ValidationException; +import org.apache.fop.apps.FOPException; +import org.apache.fop.fo.PropertyList; +import org.apache.fop.fo.FOEventHandler; +import org.apache.fop.fo.FONode; +import org.apache.fop.fo.FObj; +import org.apache.fop.fo.pagination.Root; +import org.apache.fop.fo.extensions.ExtensionElementMapping; + +import org.xml.sax.Attributes; +import org.xml.sax.Locator; + +/** + * Class for named destinations in PDF. + */ +public class Destination extends FObj { + + String internalDestination; + Root root; + + /** + * Constructs a Destination object (called by Maker). + * + * @param parent the parent formatting object + */ + public Destination(FONode parent) { + super(parent); + root = parent.getRoot(); + } + + /** + * @see org.apache.fop.fo.FObj#bind(PropertyList) + */ + public void bind(PropertyList pList) throws FOPException { + internalDestination = pList.get(PR_INTERNAL_DESTINATION).getString(); + if (internalDestination.length() == 0) { + attributeError("Missing attribute: internal-destination must be specified."); + } + } + + /** + * @see org.apache.fop.fo.FONode#endOfNode + */ + protected void endOfNode() throws FOPException { + root.addDestination(this); + } + + /** + * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String) + XSL/FOP: empty + */ + protected void validateChildNode(Locator loc, String nsURI, String localName) + throws ValidationException { + invalidChildError(loc, nsURI, localName); + } + + public String getInternalDestination() { + return internalDestination; + } + + /** @see org.apache.fop.fo.FONode#getNamespaceURI() */ + public String getNamespaceURI() { + return ExtensionElementMapping.URI; + } + + /** @see org.apache.fop.fo.FONode#getNormalNamespacePrefix() */ + public String getNormalNamespacePrefix() { + return "fox"; + } + + /** @see org.apache.fop.fo.FONode#getLocalName() */ + public String getLocalName() { + return "destination"; + } + +} + diff --git a/src/java/org/apache/fop/fo/extensions/destination/DestinationElementMapping.java b/src/java/org/apache/fop/fo/extensions/destination/DestinationElementMapping.java new file mode 100644 index 000000000..8e9d926f5 --- /dev/null +++ b/src/java/org/apache/fop/fo/extensions/destination/DestinationElementMapping.java @@ -0,0 +1,70 @@ +package org.apache.fop.fo.extensions.destination; + +import java.util.HashMap; +import java.util.Set; + +import org.apache.fop.fo.FONode; +import org.apache.fop.fo.ElementMapping; +import org.apache.fop.fo.extensions.ExtensionElementMapping; +import org.apache.fop.util.QName; + +import org.apache.fop.fo.extensions.destination.Destination; + +/** + * Set up the destination element mapping. + */ +public class DestinationElementMapping extends ElementMapping { + + /** + * The FOP extension namespace URI + */ + public static final String URI = ExtensionElementMapping.URI; + + private static final Set propertyAttributes = new java.util.HashSet(); + + static { + //The extension property (fox:*) for named destinations + propertyAttributes.add("internal-destination"); + } + + /** + * Constructor. + */ + public DestinationElementMapping() { + namespaceURI = URI; + } + + /** + * @see org.apache.fop.fo.ElementMapping#initialize() + */ + protected void initialize() { + if (foObjs == null) { + foObjs = new HashMap(); + foObjs.put("destination", new DestinationMaker()); + } + } + + static class DestinationMaker extends ElementMapping.Maker { + public FONode make(FONode parent) { + return new Destination(parent); + } + } + + /** + * @see org.apache.fop.fo.ElementMapping#getStandardPrefix() + */ + public String getStandardPrefix() { + return "fox"; + } + + /** + * @see org.apache.fop.fo.ElementMapping#isAttributeProperty(org.apache.fop.util.QName) + */ + public boolean isAttributeProperty(QName attributeName) { + if (!URI.equals(attributeName.getNamespaceURI())) { + throw new IllegalArgumentException("The namespace URIs don't match"); + } + return propertyAttributes.contains(attributeName.getLocalName()); + } + +} diff --git a/src/java/org/apache/fop/fo/extensions/destination/package.html b/src/java/org/apache/fop/fo/extensions/destination/package.html new file mode 100644 index 000000000..10157e862 --- /dev/null +++ b/src/java/org/apache/fop/fo/extensions/destination/package.html @@ -0,0 +1,22 @@ + + +org.apache.fop.destination Package + +

Classes to support named destinations (only relevant for PDF output)

+ + \ No newline at end of file