From: Glen Mazza Date: Tue, 4 Jan 2005 00:21:47 +0000 (+0000) Subject: PR: X-Git-Tag: Root_Temp_KnuthStylePageBreaking~286 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=0f57433994428964c64cbb377c018b6324ecc384;p=xmlgraphics-fop.git PR: Obtained from: Submitted by: Reviewed by: Converted fox:outline to fo:bookmark. fox:label/fo:bookmark-title still to be done. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198221 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/examples/fo/advanced/cid-fonts.fo b/examples/fo/advanced/cid-fonts.fo index dc55f7ac9..556aa8a2d 100644 --- a/examples/fo/advanced/cid-fonts.fo +++ b/examples/fo/advanced/cid-fonts.fo @@ -17,63 +17,63 @@ - + Adding Fonts to FOP - + - + Adding additional Type 1 fonts - + Generating a font metrics file - - + + Register the fonts within FOP - - + + - + Adding additional TrueType fonts - + Generating a font metrics file - - + + TrueType collections - - + + Register the fonts within FOP - + - + - + Embedding fonts in the PDF - + - + Example embedding MSGothic - + Setup CLASSPATH - + - + Create the metrics file - + - + Edit msgothic.xml - + - + Register the font with FOP - - + + - + Japanese Examples - + diff --git a/examples/fo/basic/pdfoutline.fo b/examples/fo/basic/pdfoutline.fo index 276d61e99..ce1aa3597 100644 --- a/examples/fo/basic/pdfoutline.fo +++ b/examples/fo/basic/pdfoutline.fo @@ -60,65 +60,65 @@ This files shows next to the trivial usage of fo:block and fo:inline examples of - + What is FOP? - + - + Downloading FOP - + - + Running FOP - + Prerequisites - + Java 1.1 - + - + XML Parser - + - + XSLT Processor - + - + - + Starting FOP - + - + - + Embedding FOP - + - + What's Implemented? - - + + Limitations - - + + Bugs - - + + Compiling FOP - - + + Getting Involved - - + + FOP Relevant Specifications - - + + License - + diff --git a/src/java/org/apache/fop/area/BookmarkData.java b/src/java/org/apache/fop/area/BookmarkData.java index 23fd92583..3659d1fb1 100644 --- a/src/java/org/apache/fop/area/BookmarkData.java +++ b/src/java/org/apache/fop/area/BookmarkData.java @@ -23,7 +23,7 @@ import java.util.List; import java.util.HashMap; import org.apache.fop.fo.pagination.bookmarks.BookmarkTree; -import org.apache.fop.fo.extensions.Outline; +import org.apache.fop.fo.pagination.bookmarks.Bookmark; /** * An instance of this class is either a PDF bookmark-tree and @@ -33,8 +33,8 @@ import org.apache.fop.fo.extensions.Outline; public class BookmarkData extends OffDocumentItem implements Resolvable { private ArrayList subData = new ArrayList(); - // bookmark label - private String label = null; + // bookmark-title for this bookmark + private String bookmarkTitle = null; // ID Reference for this bookmark private String idRef; @@ -57,8 +57,8 @@ public class BookmarkData extends OffDocumentItem implements Resolvable { whenToProcess = END_OF_DOC; for (int count = 0; count < bookmarkTree.getBookmarks().size(); count++) { - Outline out = (Outline)(bookmarkTree.getBookmarks()).get(count); - addSubData(createBookmarkData(out)); + Bookmark bkmk = (Bookmark)(bookmarkTree.getBookmarks()).get(count); + addSubData(createBookmarkData(bkmk)); } } @@ -100,21 +100,21 @@ public class BookmarkData extends OffDocumentItem implements Resolvable { } /** - * Set the label for this bookmark. + * Set the title for this bookmark. * - * @param l the string label + * @param title the bookmark title */ - public void setLabel(String l) { - label = l; + public void setBookmarkTitle(String title) { + bookmarkTitle = title; } /** - * Get the label for this bookmark object. + * Get the title for this bookmark object. * - * @return the label string + * @return the bookmark title */ - public String getLabel() { - return label; + public String getBookmarkTitle() { + return bookmarkTitle; } /** @@ -195,20 +195,20 @@ public class BookmarkData extends OffDocumentItem implements Resolvable { } /** - * Create and return the bookmark data for this outline. + * Create and return the bookmark data for this bookmark * This creates a bookmark data with the destination - * and adds all the data from child outlines. + * and adds all the data from child bookmarks * - * @param outline the Outline object for which a bookmark entry should be + * @param bookmark the Bookmark object for which a bookmark entry should be * created * @return the new bookmark data */ - private BookmarkData createBookmarkData(Outline outline) { - BookmarkData data = new BookmarkData(outline.getInternalDestination()); - data.setLabel(outline.getLabel()); - for (int count = 0; count < outline.getOutlines().size(); count++) { - Outline out = (Outline)(outline.getOutlines()).get(count); - data.addSubData(createBookmarkData(out)); + private BookmarkData createBookmarkData(Bookmark bookmark) { + BookmarkData data = new BookmarkData(bookmark.getInternalDestination()); + data.setBookmarkTitle(bookmark.getBookmarkTitle()); + for (int count = 0; count < bookmark.getChildBookmarks().size(); count++) { + Bookmark bkmk = (Bookmark)(bookmark.getChildBookmarks()).get(count); + data.addSubData(createBookmarkData(bkmk)); } return data; } diff --git a/src/java/org/apache/fop/fo/Constants.java b/src/java/org/apache/fop/fo/Constants.java index 7f1d40521..192ad5560 100644 --- a/src/java/org/apache/fop/fo/Constants.java +++ b/src/java/org/apache/fop/fo/Constants.java @@ -114,7 +114,8 @@ public interface Constants { int FO_TITLE = 55; int FO_WRAPPER = 56; int FO_BOOKMARK_TREE = 57; - int FRM_OBJ_COUNT = 57; + int FO_BOOKMARK = 58; + int FRM_OBJ_COUNT = 58; // Masks int COMPOUND_SHIFT = 9; diff --git a/src/java/org/apache/fop/fo/FOElementMapping.java b/src/java/org/apache/fop/fo/FOElementMapping.java index 760adeb33..1fa266778 100644 --- a/src/java/org/apache/fop/fo/FOElementMapping.java +++ b/src/java/org/apache/fop/fo/FOElementMapping.java @@ -46,6 +46,7 @@ public class FOElementMapping extends ElementMapping { foObjs.put("declarations", new DeclarationsMaker()); foObjs.put("color-profile", new ColorProfileMaker()); foObjs.put("bookmark-tree", new BookmarkTreeMaker()); + foObjs.put("bookmark", new BookmarkMaker()); foObjs.put("page-sequence", new PageSequenceMaker()); foObjs.put("layout-master-set", new LayoutMasterSetMaker()); foObjs.put("page-sequence-master", @@ -152,6 +153,12 @@ public class FOElementMapping extends ElementMapping { } } + static class BookmarkMaker extends ElementMapping.Maker { + public FONode make(FONode parent) { + return new org.apache.fop.fo.pagination.bookmarks.Bookmark(parent); + } + } + static class PageSequenceMaker extends ElementMapping.Maker { public FONode make(FONode parent) { return new org.apache.fop.fo.pagination.PageSequence(parent); diff --git a/src/java/org/apache/fop/fo/PropertySets.java b/src/java/org/apache/fop/fo/PropertySets.java index 64e50fd13..418d23bac 100644 --- a/src/java/org/apache/fop/fo/PropertySets.java +++ b/src/java/org/apache/fop/fo/PropertySets.java @@ -202,7 +202,15 @@ public class PropertySets { elem.addProperty(Constants.PR_RENDERING_INTENT); elem = elements[Constants.FO_BOOKMARK_TREE]; -// elem.addContent(Constants.FO_BOOKMARK); + elem.addContent(Constants.FO_BOOKMARK); + + elem = elements[Constants.FO_BOOKMARK]; +// elem.addContent(Constants.FO_BOOKMARK_TITLE); + elem.addContent(Constants.FO_BOOKMARK); + elem.addProperties(CommonAccessibilityProperties); + elem.addProperty(Constants.PR_EXTERNAL_DESTINATION); + elem.addProperty(Constants.PR_INTERNAL_DESTINATION); + elem.addProperty(Constants.PR_STARTING_STATE); elem = elements[Constants.FO_PAGE_SEQUENCE]; elem.addProperty(Constants.PR_COUNTRY); diff --git a/src/java/org/apache/fop/fo/extensions/ExtensionElementMapping.java b/src/java/org/apache/fop/fo/extensions/ExtensionElementMapping.java index 16e30ef8a..3e0067d12 100644 --- a/src/java/org/apache/fop/fo/extensions/ExtensionElementMapping.java +++ b/src/java/org/apache/fop/fo/extensions/ExtensionElementMapping.java @@ -44,17 +44,10 @@ public class ExtensionElementMapping extends ElementMapping { protected void initialize() { if (foObjs == null) { foObjs = new HashMap(); - foObjs.put("outline", new O()); foObjs.put("label", new L()); } } - static class O extends ElementMapping.Maker { - public FONode make(FONode parent) { - return new Outline(parent); - } - } - static class L extends ElementMapping.Maker { public FONode make(FONode parent) { return new Label(parent); diff --git a/src/java/org/apache/fop/fo/extensions/Outline.java b/src/java/org/apache/fop/fo/extensions/Outline.java deleted file mode 100644 index a7df6327e..000000000 --- a/src/java/org/apache/fop/fo/extensions/Outline.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 1999-2004 The Apache Software Foundation. - * - * Licensed 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.fo.extensions; - -import java.util.ArrayList; - -import org.xml.sax.Attributes; -import org.xml.sax.Locator; - -import org.apache.fop.apps.FOPException; -import org.apache.fop.fo.FONode; -import org.apache.fop.fo.PropertyList; - - -/** - * The outline object for the pdf bookmark extension. - * The outline element contains a label and optionally more outlines. - */ -public class Outline extends ExtensionObj { - private Label label; - private ArrayList outlines = new ArrayList(); - - private String internalDestination; - private String externalDestination; - - /** - * Create a new outline object. - * - * @param parent the parent fo node - */ - public Outline(FONode parent) { - super(parent); - } - - /** - * The attributes on the outline object are the internal and external - * destination. One of these is required. - * - * @see org.apache.fop.fo.FObj#processNode - */ - public void processNode(String elementName, Locator locator, - Attributes attlist, PropertyList propertyList) throws FOPException - { - internalDestination = - attlist.getValue("internal-destination"); - externalDestination = - attlist.getValue("external-destination"); - if (externalDestination != null && !externalDestination.equals("")) { - getLogger().warn("fox:outline external-destination not supported currently."); - } - - if (internalDestination == null || internalDestination.equals("")) { - getLogger().warn("fox:outline requires an internal-destination."); - } - - } - - /** - * @see org.apache.fop.fo.FONode#addChildNode(FONode) - */ - protected void addChildNode(FONode obj) { - if (obj instanceof Label) { - label = (Label)obj; - } else if (obj instanceof Outline) { - outlines.add(obj); - } - } - - /** - * Get the label string. - * This gets the label string from the child label element. - * - * @return the label string or empty if not found - */ - public String getLabel() { - return label == null ? "" : label.toString(); - } - - public String getInternalDestination() { - return internalDestination; - } - - public String getExternalDestination() { - return externalDestination; - } - - public ArrayList getOutlines() { - return outlines; - } - - public String getName() { - return "(http://xml.apache.org/fop/extensions) outline"; - } -} diff --git a/src/java/org/apache/fop/fo/pagination/bookmarks/Bookmark.java b/src/java/org/apache/fop/fo/pagination/bookmarks/Bookmark.java new file mode 100644 index 000000000..4ba55d317 --- /dev/null +++ b/src/java/org/apache/fop/fo/pagination/bookmarks/Bookmark.java @@ -0,0 +1,123 @@ +/* + * Copyright 1999-2004 The Apache Software Foundation. + * + * Licensed 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.fo.pagination.bookmarks; + +import java.util.ArrayList; + +import org.xml.sax.Attributes; +import org.xml.sax.Locator; + +import org.apache.fop.apps.FOPException; +import org.apache.fop.fo.FObj; +import org.apache.fop.fo.FONode; +import org.apache.fop.fo.PropertyList; +import org.apache.fop.fo.extensions.Label; + + +/** + * The fo:bookmark formatting object, first introduced in the + * XSL 1.1 WD. Prototype version only, subject to change as + * XSL 1.1 WD evolves. + */ +public class Bookmark extends FObj { + private Label bookmarkTitle; + private ArrayList childBookmarks = new ArrayList(); + + private String internalDestination; + private String externalDestination; + + /** + * Create a new bookmark object. + * + * @param parent the parent fo node + */ + public Bookmark(FONode parent) { + super(parent); + } + + /** + * The attributes on the bookmark object are the internal and external + * destination. One of these is required. + * + * @see org.apache.fop.fo.FObj#processNode + * @todo to include all properties of fo:bookmark + */ + public void processNode(String elementName, Locator locator, + Attributes attlist, PropertyList propertyList) throws FOPException + { + internalDestination = + attlist.getValue("internal-destination"); + externalDestination = + attlist.getValue("external-destination"); + if (externalDestination != null && !externalDestination.equals("")) { + getLogger().warn("fo:bookmark external-destination not supported currently."); + } + + if (internalDestination == null || internalDestination.equals("")) { + getLogger().warn("fo:bookmark requires an internal-destination."); + } + + } + + /** + * @see org.apache.fop.fo.FONode#addChildNode(FONode) + */ + protected void addChildNode(FONode obj) { + if (obj instanceof Label) { + bookmarkTitle = (Label)obj; + } else if (obj instanceof Bookmark) { + childBookmarks.add(obj); + } + } + + /** + * Get the bookmark title for this bookmark + * + * @return the bookmark title string or an empty string if not found + */ + public String getBookmarkTitle() { + return bookmarkTitle == null ? "" : bookmarkTitle.toString(); + } + + public String getInternalDestination() { + return internalDestination; + } + + public String getExternalDestination() { + return externalDestination; + } + + public ArrayList getChildBookmarks() { + return childBookmarks; + } + + /** + * @see org.apache.fop.fo.FObj#getName() + */ + public String getName() { + return "fo:bookmark"; + } + + /** + * @see org.apache.fop.fo.FObj#getNameId() + */ + public int getNameId() { + return FO_BOOKMARK; + } +} diff --git a/src/java/org/apache/fop/fo/pagination/bookmarks/BookmarkTree.java b/src/java/org/apache/fop/fo/pagination/bookmarks/BookmarkTree.java index 43daeda05..b5af4efcf 100644 --- a/src/java/org/apache/fop/fo/pagination/bookmarks/BookmarkTree.java +++ b/src/java/org/apache/fop/fo/pagination/bookmarks/BookmarkTree.java @@ -24,8 +24,6 @@ import java.util.ArrayList; import org.xml.sax.Locator; import org.apache.fop.apps.FOPException; -import org.apache.fop.fo.extensions.ExtensionElementMapping; -import org.apache.fop.fo.extensions.Outline; import org.apache.fop.fo.FONode; import org.apache.fop.fo.FObj; import org.apache.fop.fo.PropertyList; @@ -52,7 +50,7 @@ public class BookmarkTree extends FObj { * @see org.apache.fop.fo.FONode#addChildNode(FONode) */ protected void addChildNode(FONode obj) { - if (obj instanceof Outline) { + if (obj instanceof Bookmark) { bookmarks.add(obj); } } @@ -62,7 +60,7 @@ public class BookmarkTree extends FObj { */ protected void endOfNode() throws FOPException { if (bookmarks == null) { - missingChildElementError("(fox:outline+)"); + missingChildElementError("(fo:bookmark+)"); } ((Root) parent).setBookmarkTree(this); } @@ -73,8 +71,8 @@ public class BookmarkTree extends FObj { */ protected void validateChildNode(Locator loc, String nsURI, String localName) throws ValidationException { - if (!(nsURI == ExtensionElementMapping.URI && - localName.equals("outline"))) { + if (!(nsURI == FO_URI && + localName.equals("bookmark"))) { invalidChildError(loc, nsURI, localName); } } diff --git a/src/java/org/apache/fop/render/pdf/PDFRenderer.java b/src/java/org/apache/fop/render/pdf/PDFRenderer.java index ac8450881..834333d77 100644 --- a/src/java/org/apache/fop/render/pdf/PDFRenderer.java +++ b/src/java/org/apache/fop/render/pdf/PDFRenderer.java @@ -311,10 +311,10 @@ public class PDFRenderer extends PrintRenderer { if (parentBookmarkItem == null) { PDFOutline outlineRoot = pdfDoc.getOutlineRoot(); pdfOutline = pdfDoc.getFactory().makeOutline(outlineRoot, - bookmarkItem.getLabel(), intDest, yoffset); + bookmarkItem.getBookmarkTitle(), intDest, yoffset); } else { pdfOutline = pdfDoc.getFactory().makeOutline(parentBookmarkItem, - bookmarkItem.getLabel(), intDest, yoffset); + bookmarkItem.getBookmarkTitle(), intDest, yoffset); } }