]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Merged revisions 680369,680378 via svnmerge from
authorAdrian Cumiskey <acumiskey@apache.org>
Tue, 29 Jul 2008 08:52:31 +0000 (08:52 +0000)
committerAdrian Cumiskey <acumiskey@apache.org>
Tue, 29 Jul 2008 08:52:31 +0000 (08:52 +0000)
https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk

........
  r680369 | jeremias | 2008-07-28 15:24:51 +0100 (Mon, 28 Jul 2008) | 2 lines

  Bugzilla #45470:
  Added LayoutManagerMapping.registerMaker() to make registration of custom layout managers easier.
........
  r680378 | jeremias | 2008-07-28 16:05:14 +0100 (Mon, 28 Jul 2008) | 4 lines

  Reverted revision 670341 and replaced it with a different solution as discussed:
  addCharacters() is now deprecated and called by the new characters() method which uses start/length instead of start/end.
  Fixed bugs in the AFP and PS extensions (ArrayIndexOutOfBoundsExceptions). They were not properly changed when the interface changed.
  Discussion: http://markmail.org/message/pdgzf6odxrnhflby
........

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AFPGOCAResources@680649 13f79535-47bb-0310-9956-ffa450edef68

12 files changed:
src/java/org/apache/fop/fo/FONode.java
src/java/org/apache/fop/fo/FOText.java
src/java/org/apache/fop/fo/FOTreeBuilder.java
src/java/org/apache/fop/fo/FObjMixed.java
src/java/org/apache/fop/fo/UnknownXMLObj.java
src/java/org/apache/fop/fo/XMLObj.java
src/java/org/apache/fop/fo/pagination/bookmarks/BookmarkTitle.java
src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java
src/java/org/apache/fop/render/afp/extensions/AbstractAFPExtensionObject.java
src/java/org/apache/fop/render/ps/extensions/AbstractPSExtensionElement.java
src/java/org/apache/fop/render/ps/extensions/AbstractPSExtensionObject.java
status.xml

index 087bcf96c9675e7453639bdccd3c6fe0cd674262..07d8f472cd5f1aa0c862f8fd9a09617bc0528da9 100644 (file)
@@ -274,17 +274,36 @@ public abstract class FONode implements Cloneable {
      *
      * @param data array of characters containing text to be added
      * @param start starting array element to add
-     * @param length number of elements to add
+     * @param end ending array element to add
      * @param pList currently applicable PropertyList
      * @param locator location in the XSL-FO source file.
      * @throws FOPException if there's a problem during processing
+     * @deprecated Please override {@code #characters(char[], int, int, PropertyList, Locator)}
+     *          instead!
      */
-    protected void addCharacters(char[] data, int start, int length,
+    protected void addCharacters(char[] data, int start, int end,
                                  PropertyList pList,
                                  Locator locator) throws FOPException {
         // ignore
     }
 
+    /**
+     * Adds characters. Does nothing by default. To be overridden in subclasses
+     * that allow <code>#PCDATA</code> content.
+     *
+     * @param data array of characters containing text to be added
+     * @param start starting array element to add
+     * @param length number of elements to add
+     * @param pList currently applicable PropertyList
+     * @param locator location in the XSL-FO source file.
+     * @throws FOPException if there's a problem during processing
+     */
+    protected void characters(char[] data, int start, int length,
+                                 PropertyList pList,
+                                 Locator locator) throws FOPException {
+        addCharacters(data, start, start + length, pList, locator);
+    }
+
     /**
      * Called after processNode() is called. Subclasses can do additional processing.
      *
index eb0627b4b8a0a872deafe4d8dace91c6ce17a225..08ffa40a365f6b04bba5b32729b9cc0ca2cb7ccc 100644 (file)
@@ -93,7 +93,7 @@ public class FOText extends FONode implements CharSequence {
     }
 
     /** {@inheritDoc} */
-    protected void addCharacters(char[] data, int start, int length,
+    protected void characters(char[] data, int start, int length,
             PropertyList list, Locator locator) throws FOPException {
 
         if (this.charBuffer == null) {
index 762cd0d462a4548b2bd6674e1f68b16ca7156245..7c77f06975b67a68d42d8ff8b86e78ff5f9be36d 100644 (file)
@@ -371,7 +371,7 @@ public class FOTreeBuilder extends DefaultHandler {
         public void characters(char[] data, int start, int length)
             throws FOPException {
             if (currentFObj != null) {
-                currentFObj.addCharacters(data, start, length,
+                currentFObj.characters(data, start, length,
                         currentPropertyList, getEffectiveLocator());
             }
         }
index 64faa3253c44f9728f39cebff209137d3d469095..5dc5dd49d9aa0d0a54490a9e6ebc0a2a5165b250 100644 (file)
@@ -50,7 +50,7 @@ public abstract class FObjMixed extends FObj {
     }
 
     /** {@inheritDoc} */
-    protected void addCharacters(char[] data, int start, int length,
+    protected void characters(char[] data, int start, int length,
                                  PropertyList pList,
                                  Locator locator) throws FOPException {
         if (ft == null) {
@@ -60,7 +60,7 @@ public abstract class FObjMixed extends FObj {
                 ft.bind(pList);
             }
         }
-        ft.addCharacters(data, start, length, null, null);
+        ft.characters(data, start, length, null, null);
     }
 
     /** {@inheritDoc} */
index 4db2cf0fe0854af1f0c2b5c76e0e1c20c1238164..ac6676427ef58dc2145d6aa499a612ccd5866019 100644 (file)
@@ -21,6 +21,8 @@ package org.apache.fop.fo;
 
 import org.xml.sax.Locator;
 
+import org.apache.fop.apps.FOPException;
+
 /**
  * Class for handling generic XML from a namespace not recognized by FOP
  */
@@ -72,9 +74,7 @@ public class UnknownXMLObj extends XMLObj {
         return null; //We don't know that in this case.
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    /** {@inheritDoc} */
     protected void addChildNode(FONode child) {
         if (doc == null) {
             createBasicDocument();
@@ -82,15 +82,13 @@ public class UnknownXMLObj extends XMLObj {
         super.addChildNode(child);
     }
 
-    /**
-     *  {@inheritDoc}
-     */
-    protected void addCharacters(char data[], int start, int length,
-                                 PropertyList pList, Locator locator) {
+    /** {@inheritDoc} */
+    protected void characters(char[] data, int start, int length,
+                                 PropertyList pList, Locator locator) throws FOPException {
         if (doc == null) {
             createBasicDocument();
         }
-        super.addCharacters(data, start, length, pList, locator);
+        super.characters(data, start, length, pList, locator);
     }
 
 }
index 97aa435e73b42eb98cb7e1f97b8b1a799f1d31a0..3330f41a5ef877a33a992ad35bc2b55f8ddd57c5 100644 (file)
@@ -25,14 +25,16 @@ import java.util.HashMap;
 
 import javax.xml.parsers.DocumentBuilderFactory;
 
-import org.apache.fop.apps.FOPException;
-import org.apache.fop.datatypes.Length;
-import org.apache.fop.util.ContentHandlerFactory.ObjectBuiltListener;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.datatypes.Length;
+import org.apache.fop.util.ContentHandlerFactory.ObjectBuiltListener;
+
 /**
  * Abstract class modelling generic, non-XSL-FO XML objects. Such objects are
  * stored in a DOM.
@@ -203,17 +205,10 @@ public abstract class XMLObj extends FONode implements ObjectBuiltListener {
         }
     }
 
-    /**
-     * Add parsed characters to this object
-     *
-     * @param data array of characters contaning the text to add
-     * @param start starting array element to add
-     * @param length number of characters from the array to add
-     * @param pList the currently applicable property list
-     * @param locator location in fo source file.
-     */
-    protected void addCharacters(char[] data, int start, int length,
-                                 PropertyList pList, Locator locator) {
+    /** {@inheritDoc} */
+    protected void characters(char[] data, int start, int length,
+                                 PropertyList pList, Locator locator) throws FOPException {
+        super.characters(data, start, length, pList, locator);
         String str = new String(data, start, length);
         org.w3c.dom.Text text = doc.createTextNode(str);
         element.appendChild(text);
index fc508dc96444ec96377312cdb882e5d2fcf0ab83..028cdc7dfaceb392c2eb80581692b8d71d9ce3ed 100644 (file)
@@ -21,8 +21,8 @@ package org.apache.fop.fo.pagination.bookmarks;
 
 import org.xml.sax.Locator;
 
-import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
 import org.apache.fop.fo.ValidationException;
 
@@ -52,9 +52,10 @@ public class BookmarkTitle extends FObj {
      * @param data the character data
      * @param start the start position in the data array
      * @param length the length of the character array
+     * @param pList currently applicable PropertyList
      * @param locator location in fo source file.
      */
-    protected void addCharacters(char[] data, int start, int length,
+    protected void characters(char[] data, int start, int length,
                                  PropertyList pList,
                                  Locator locator) {
         title += new String(data, start, length);
index 26933ee4c35174cf073237074d16ecf58ac349b6..cab2dd0ba71a0256ccb6e9379360906fc2e82410 100644 (file)
 package org.apache.fop.layoutmgr;
 
 import java.util.ArrayList;
-import java.util.Map;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import org.apache.fop.area.AreaTreeHandler;
 import org.apache.fop.fo.FOElementMapping;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FOText;
@@ -65,8 +66,6 @@ import org.apache.fop.fo.pagination.PageSequence;
 import org.apache.fop.fo.pagination.SideRegion;
 import org.apache.fop.fo.pagination.StaticContent;
 import org.apache.fop.fo.pagination.Title;
-import org.apache.fop.area.AreaTreeHandler;
-
 import org.apache.fop.layoutmgr.inline.BasicLinkLayoutManager;
 import org.apache.fop.layoutmgr.inline.BidiLayoutManager;
 import org.apache.fop.layoutmgr.inline.CharacterLayoutManager;
@@ -78,8 +77,8 @@ import org.apache.fop.layoutmgr.inline.InlineLayoutManager;
 import org.apache.fop.layoutmgr.inline.InlineLevelLayoutManager;
 import org.apache.fop.layoutmgr.inline.InstreamForeignObjectLM;
 import org.apache.fop.layoutmgr.inline.LeaderLayoutManager;
-import org.apache.fop.layoutmgr.inline.PageNumberCitationLayoutManager;
 import org.apache.fop.layoutmgr.inline.PageNumberCitationLastLayoutManager;
+import org.apache.fop.layoutmgr.inline.PageNumberCitationLayoutManager;
 import org.apache.fop.layoutmgr.inline.PageNumberLayoutManager;
 import org.apache.fop.layoutmgr.inline.TextLayoutManager;
 import org.apache.fop.layoutmgr.inline.WrapperLayoutManager;
@@ -107,41 +106,50 @@ public class LayoutManagerMapping implements LayoutManagerMaker {
      * Initializes the set of maker objects associated with this LayoutManagerMapping
      */
     protected void initialize() {
-        makers.put(FOText.class, new FOTextLayoutManagerMaker());
-        makers.put(FObjMixed.class, new Maker());
-        makers.put(BidiOverride.class, new BidiOverrideLayoutManagerMaker());
-        makers.put(Inline.class, new InlineLayoutManagerMaker());
-        makers.put(Footnote.class, new FootnodeLayoutManagerMaker());
-        makers.put(InlineContainer.class,
+        registerMaker(FOText.class, new FOTextLayoutManagerMaker());
+        registerMaker(FObjMixed.class, new Maker());
+        registerMaker(BidiOverride.class, new BidiOverrideLayoutManagerMaker());
+        registerMaker(Inline.class, new InlineLayoutManagerMaker());
+        registerMaker(Footnote.class, new FootnodeLayoutManagerMaker());
+        registerMaker(InlineContainer.class,
                    new InlineContainerLayoutManagerMaker());
-        makers.put(BasicLink.class, new BasicLinkLayoutManagerMaker());
-        makers.put(Block.class, new BlockLayoutManagerMaker());
-        makers.put(Leader.class, new LeaderLayoutManagerMaker());
-        makers.put(RetrieveMarker.class, new RetrieveMarkerLayoutManagerMaker());
-        makers.put(RetrieveTableMarker.class, new Maker());
-        makers.put(Character.class, new CharacterLayoutManagerMaker());
-        makers.put(ExternalGraphic.class,
+        registerMaker(BasicLink.class, new BasicLinkLayoutManagerMaker());
+        registerMaker(Block.class, new BlockLayoutManagerMaker());
+        registerMaker(Leader.class, new LeaderLayoutManagerMaker());
+        registerMaker(RetrieveMarker.class, new RetrieveMarkerLayoutManagerMaker());
+        registerMaker(RetrieveTableMarker.class, new Maker());
+        registerMaker(Character.class, new CharacterLayoutManagerMaker());
+        registerMaker(ExternalGraphic.class,
                    new ExternalGraphicLayoutManagerMaker());
-        makers.put(BlockContainer.class,
+        registerMaker(BlockContainer.class,
                    new BlockContainerLayoutManagerMaker());
-        makers.put(ListItem.class, new ListItemLayoutManagerMaker());
-        makers.put(ListBlock.class, new ListBlockLayoutManagerMaker());
-        makers.put(InstreamForeignObject.class,
+        registerMaker(ListItem.class, new ListItemLayoutManagerMaker());
+        registerMaker(ListBlock.class, new ListBlockLayoutManagerMaker());
+        registerMaker(InstreamForeignObject.class,
                    new InstreamForeignObjectLayoutManagerMaker());
-        makers.put(PageNumber.class, new PageNumberLayoutManagerMaker());
-        makers.put(PageNumberCitation.class,
+        registerMaker(PageNumber.class, new PageNumberLayoutManagerMaker());
+        registerMaker(PageNumberCitation.class,
                    new PageNumberCitationLayoutManagerMaker());
-        makers.put(PageNumberCitationLast.class,
+        registerMaker(PageNumberCitationLast.class,
                 new PageNumberCitationLastLayoutManagerMaker());
-        makers.put(Table.class, new TableLayoutManagerMaker());
-        makers.put(TableBody.class, new Maker());
-        makers.put(TableColumn.class, new Maker());
-        makers.put(TableRow.class, new Maker());
-        makers.put(TableCell.class, new Maker());
-        makers.put(TableFooter.class, new Maker());
-        makers.put(TableHeader.class, new Maker());
-        makers.put(Wrapper.class, new WrapperLayoutManagerMaker());
-        makers.put(Title.class, new InlineLayoutManagerMaker());
+        registerMaker(Table.class, new TableLayoutManagerMaker());
+        registerMaker(TableBody.class, new Maker());
+        registerMaker(TableColumn.class, new Maker());
+        registerMaker(TableRow.class, new Maker());
+        registerMaker(TableCell.class, new Maker());
+        registerMaker(TableFooter.class, new Maker());
+        registerMaker(TableHeader.class, new Maker());
+        registerMaker(Wrapper.class, new WrapperLayoutManagerMaker());
+        registerMaker(Title.class, new InlineLayoutManagerMaker());
+    }
+
+    /**
+     * Registers a Maker class for a specific formatting object.
+     * @param clazz the formatting object class
+     * @param maker the maker for the layout manager
+     */
+    protected void registerMaker(Class clazz, Maker maker) {
+        makers.put(clazz, maker);
     }
 
     /**
index a9bbbcfcf6fc9cea22b9a84021a34bd670c2aeb7..c0e9c2c897d231eda8058a7fb665e1d70f1e9984 100644 (file)
 package org.apache.fop.render.afp.extensions;
 
 // FOP
+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;
 import org.apache.fop.fo.ValidationException;
 import org.apache.fop.fo.extensions.ExtensionAttachment;
-import org.xml.sax.Attributes;
-import org.xml.sax.Locator;
 
 /**
  * Base class for the AFP-specific extension elements.
@@ -66,10 +67,10 @@ public abstract class AbstractAFPExtensionObject extends FONode {
     /**
      * {@inheritDoc}
      */
-    protected void addCharacters(char[] data, int start, int end,
+    protected void characters(char[] data, int start, int length,
                                  PropertyList pList, Locator locator) throws FOPException {
         ((AFPExtensionAttachment)getExtensionAttachment()).setContent(
-                new String(data, start, end - start));       
+                new String(data, start, length));       
     }
 
     /**
index 14865a8c9c8260fb1a62a0e7fea08de2a21620d3..3f534af7eee22bfa10a25c64c30fcebdee32ffa5 100644 (file)
@@ -64,24 +64,16 @@ public abstract class AbstractPSExtensionElement extends FONode {
         }
     }
 
-    /**
-     * Adds characters (does nothing here)
-     * @param data array of characters containing text to be added
-     * @param start starting array element to add
-     * @param length of data array to add
-     * @param pList currently applicable PropertyList
-     * @param locator location in fo source file.
-     * @see org.apache.fop.fo.FONode#addCharacters(char[], int, int, PropertyList, Locator)
-     */
-    protected void addCharacters(char[] data, int start, int length,
+    /** {@inheritDoc} */
+    protected void characters(char[] data, int start, int length,
                                  PropertyList pList, Locator locator) {
         PSExtensionAttachment a = (PSExtensionAttachment)getExtensionAttachment();
         if (a.getContent() != null) {
             StringBuffer sb = new StringBuffer(a.getContent());
-            sb.append(data, start, length - start);
+            sb.append(data, start, length);
             a.setContent(sb.toString());
         } else {
-            a.setContent(new String(data, start, length - start));
+            a.setContent(new String(data, start, length));
         }
     }
 
index 92108b5518d43e622656ced5e7a2c518011b5692..ec90a3afd6a1672800ac45fc18055c34908e43bf 100644 (file)
@@ -54,14 +54,14 @@ public abstract class AbstractPSExtensionObject extends FONode {
     }
 
     /** {@inheritDoc} */
-    protected void addCharacters(char[] data, int start, int length,
+    protected void characters(char[] data, int start, int length,
                                  PropertyList pList, Locator locator) {
         if (setupCode.getContent() != null) {
             StringBuffer sb = new StringBuffer(setupCode.getContent());
             sb.append(data, start, length - start);
             setupCode.setContent(sb.toString());
         } else {
-            setupCode.setContent(new String(data, start, length - start));
+            setupCode.setContent(new String(data, start, length));
         }
     }
 
index 2a3b8937eccc8661889e2601c11fd62ac678dfe5..17e88d5d6889cd76b0efdb8be4248627d48f3ac6 100644 (file)
   
   <changes>
     <release version="FOP Trunk" date="TBD">
+      <action context="Layout" dev="JM" type="fix" fixes-bug="45470">
+        Added LayoutManagerMapping.registerMaker() to make registration of custom
+        layout managers easier.
+      </action>
       <action context="Layout" dev="LF" type="fix">
         Fixed absolute positioning of block-containers when specified
         using right and bottom instead of left and top.