*
* @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.
*
}
/** {@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) {
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());
}
}
}
/** {@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) {
ft.bind(pList);
}
}
- ft.addCharacters(data, start, length, null, null);
+ ft.characters(data, start, length, null, null);
}
/** {@inheritDoc} */
import org.xml.sax.Locator;
+import org.apache.fop.apps.FOPException;
+
/**
* Class for handling generic XML from a namespace not recognized by FOP
*/
return null; //We don't know that in this case.
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
protected void addChildNode(FONode child) {
if (doc == null) {
createBasicDocument();
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);
}
}
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.
}
}
- /**
- * 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);
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;
* @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);
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;
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;
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;
* 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);
}
/**
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.
/**
* {@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));
}
/**
}
}
- /**
- * 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));
}
}
}
/** {@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));
}
}
<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.