From c070baf45dffa82018c856a1bde21a144c181cae Mon Sep 17 00:00:00 2001 From: William Victor Mote Date: Wed, 10 Sep 2003 18:42:22 +0000 Subject: [PATCH] add InlineAreaVisitor interface to make Area Tree more independent of Rendering git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@196900 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/fop/area/inline/Character.java | 31 +++--- .../apache/fop/area/inline/InlineArea.java | 31 +++--- .../fop/area/inline/InlineAreaVisitor.java | 103 ++++++++++++++++++ .../apache/fop/area/inline/InlineParent.java | 30 ++--- .../org/apache/fop/area/inline/Leader.java | 31 +++--- .../org/apache/fop/area/inline/Space.java | 32 +++--- .../org/apache/fop/area/inline/Viewport.java | 30 ++--- src/java/org/apache/fop/area/inline/Word.java | 31 +++--- .../apache/fop/render/AbstractRenderer.java | 79 +++++++++++++- .../apache/fop/render/xml/XMLRenderer.java | 2 +- 10 files changed, 287 insertions(+), 113 deletions(-) create mode 100644 src/java/org/apache/fop/area/inline/InlineAreaVisitor.java diff --git a/src/java/org/apache/fop/area/inline/Character.java b/src/java/org/apache/fop/area/inline/Character.java index 2135162e6..e1eacd682 100644 --- a/src/java/org/apache/fop/area/inline/Character.java +++ b/src/java/org/apache/fop/area/inline/Character.java @@ -3,34 +3,34 @@ * ============================================================================ * The Apache Software License, Version 1.1 * ============================================================================ - * + * * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modifica- * tion, are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. - * + * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: "This product includes software * developed by the Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. - * + * * 4. The names "FOP" and "Apache Software Foundation" must not be used to * endorse or promote products derived from this software without prior * written permission. For written permission, please contact * apache@apache.org. - * + * * 5. Products derived from this software may not be called "Apache", nor may * "Apache" appear in their name, without prior written permission of the * Apache Software Foundation. - * + * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE @@ -42,16 +42,14 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ============================================================================ - * + * * This software consists of voluntary contributions made by many individuals * on behalf of the Apache Software Foundation and was originally created by * James Tauber . For more information on the Apache * Software Foundation, please see . - */ + */ package org.apache.fop.area.inline; -import org.apache.fop.render.Renderer; - /** * Single character inline area. * This inline area holds a single character. @@ -69,12 +67,13 @@ public class Character extends InlineArea { } /** - * Render this inline area. + * Handle InlineAreaVisitor request by passing this back to it. * - * @param renderer the renderer to render this character area + * @param visitor the InlineAreaVisitor wishing to process this. + * @see org.apache.fop.area.inline.InlineAreaVisitor */ - public void render(Renderer renderer) { - renderer.renderCharacter(this); + public void acceptVisitor(InlineAreaVisitor visitor) { + visitor.serveVisitor(this); } /** diff --git a/src/java/org/apache/fop/area/inline/InlineArea.java b/src/java/org/apache/fop/area/inline/InlineArea.java index 572f69b3c..87e4207ff 100644 --- a/src/java/org/apache/fop/area/inline/InlineArea.java +++ b/src/java/org/apache/fop/area/inline/InlineArea.java @@ -3,34 +3,34 @@ * ============================================================================ * The Apache Software License, Version 1.1 * ============================================================================ - * + * * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modifica- * tion, are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. - * + * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: "This product includes software * developed by the Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. - * + * * 4. The names "FOP" and "Apache Software Foundation" must not be used to * endorse or promote products derived from this software without prior * written permission. For written permission, please contact * apache@apache.org. - * + * * 5. Products derived from this software may not be called "Apache", nor may * "Apache" appear in their name, without prior written permission of the * Apache Software Foundation. - * + * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE @@ -42,17 +42,16 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ============================================================================ - * + * * This software consists of voluntary contributions made by many individuals * on behalf of the Apache Software Foundation and was originally created by * James Tauber . For more information on the Apache * Software Foundation, please see . - */ + */ package org.apache.fop.area.inline; import org.apache.fop.area.Area; import org.apache.fop.area.Trait; -import org.apache.fop.render.Renderer; import org.apache.fop.traits.BorderProps; /** @@ -76,14 +75,14 @@ public class InlineArea extends Area { protected int verticalPosition = 0; /** - * Render this inline area. + * Handle a visitor (usually a renderer) for this inline area. * Inline areas that extend this class are expected - * to implement this method to render themselves in - * the renderer. + * to pass themselves back to the visitor so that the visitor can process + * them, usually by rendering them. * - * @param renderer the renderer to render this inline area + * @param visitor the InlineAreaVisitor that will process this */ - public void render(Renderer renderer) { + public void acceptVisitor(InlineAreaVisitor visitor) { } /** diff --git a/src/java/org/apache/fop/area/inline/InlineAreaVisitor.java b/src/java/org/apache/fop/area/inline/InlineAreaVisitor.java new file mode 100644 index 000000000..35e7a4a42 --- /dev/null +++ b/src/java/org/apache/fop/area/inline/InlineAreaVisitor.java @@ -0,0 +1,103 @@ +/* + * $Id$ + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by the Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "FOP" and "Apache Software Foundation" must not be used to + * endorse or promote products derived from this software without prior + * written permission. For written permission, please contact + * apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", nor may + * "Apache" appear in their name, without prior written permission of the + * Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * ============================================================================ + * + * This software consists of voluntary contributions made by many individuals + * on behalf of the Apache Software Foundation and was originally created by + * James Tauber . For more information on the Apache + * Software Foundation, please see . + */ +package org.apache.fop.area.inline; + +/** + *

Implements the GoF Visitor design pattern to allow access to inline areas + * without knowing what subclass of InlineArea is being accessed. This is used + * primarily to keep the area tree classes isolated from any classes (typically + * renderers) that might need access to them.

+ */ +public interface InlineAreaVisitor { + + /** + * Handle a visitor request to process an inline viewport. + * + * @param viewport The viewport area + */ + void serveVisitor(Viewport viewport); + + /** + * Handle a visitor request to process an inline word. + * + * @param area The word area + */ + void serveVisitor(Word area); + + /** + * Handle a visitor request to process an inline parent area. + * + * @param ip The inline parent area + */ + void serveVisitor(InlineParent ip); + + /** + * Handle a visitor request to process an inline character. + * + * @param ch The inline character + */ + void serveVisitor(org.apache.fop.area.inline.Character ch); + + /** + * Handle a visitor request to process an inline space. + * + * @param space The inline space + */ + void serveVisitor(Space space); + + /** + * Handle a visitor request to process an inline leader area. + * + * @param area The inline leader area. + */ + void serveVisitor(Leader area); + +} diff --git a/src/java/org/apache/fop/area/inline/InlineParent.java b/src/java/org/apache/fop/area/inline/InlineParent.java index 8b79f15cb..e8f93c3f8 100644 --- a/src/java/org/apache/fop/area/inline/InlineParent.java +++ b/src/java/org/apache/fop/area/inline/InlineParent.java @@ -3,34 +3,34 @@ * ============================================================================ * The Apache Software License, Version 1.1 * ============================================================================ - * + * * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modifica- * tion, are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. - * + * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: "This product includes software * developed by the Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. - * + * * 4. The names "FOP" and "Apache Software Foundation" must not be used to * endorse or promote products derived from this software without prior * written permission. For written permission, please contact * apache@apache.org. - * + * * 5. Products derived from this software may not be called "Apache", nor may * "Apache" appear in their name, without prior written permission of the * Apache Software Foundation. - * + * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE @@ -42,16 +42,15 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ============================================================================ - * + * * This software consists of voluntary contributions made by many individuals * on behalf of the Apache Software Foundation and was originally created by * James Tauber . For more information on the Apache * Software Foundation, please see . - */ + */ package org.apache.fop.area.inline; import org.apache.fop.area.Area; -import org.apache.fop.render.Renderer; import java.util.List; import java.util.ArrayList; @@ -78,12 +77,13 @@ public class InlineParent extends InlineArea { } /** - * Render this area. + * Handle InlineAreaVisitor request by passing this back to it. * - * @param renderer the renderer to render this area in + * @param visitor the InlineAreaVisitor wishing to process this. + * @see org.apache.fop.area.inline.InlineAreaVisitor */ - public void render(Renderer renderer) { - renderer.renderInlineParent(this); + public void acceptVisitor(InlineAreaVisitor visitor) { + visitor.serveVisitor(this); } /** diff --git a/src/java/org/apache/fop/area/inline/Leader.java b/src/java/org/apache/fop/area/inline/Leader.java index 6f045510b..dd503bcd8 100644 --- a/src/java/org/apache/fop/area/inline/Leader.java +++ b/src/java/org/apache/fop/area/inline/Leader.java @@ -3,34 +3,34 @@ * ============================================================================ * The Apache Software License, Version 1.1 * ============================================================================ - * + * * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modifica- * tion, are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. - * + * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: "This product includes software * developed by the Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. - * + * * 4. The names "FOP" and "Apache Software Foundation" must not be used to * endorse or promote products derived from this software without prior * written permission. For written permission, please contact * apache@apache.org. - * + * * 5. Products derived from this software may not be called "Apache", nor may * "Apache" appear in their name, without prior written permission of the * Apache Software Foundation. - * + * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE @@ -42,15 +42,14 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ============================================================================ - * + * * This software consists of voluntary contributions made by many individuals * on behalf of the Apache Software Foundation and was originally created by * James Tauber . For more information on the Apache * Software Foundation, please see . - */ + */ package org.apache.fop.area.inline; -import org.apache.fop.render.Renderer; import org.apache.fop.fo.properties.RuleStyle; /** @@ -110,12 +109,14 @@ public class Leader extends InlineArea { } /** - * Render this leader in the current renderer. + * Handle InlineAreaVisitor request by passing this back to it. * - * @param renderer the renderer to render this inline area + * @param visitor the InlineAreaVisitor wishing to process this. + * @see org.apache.fop.area.inline.InlineAreaVisitor */ - public void render(Renderer renderer) { - renderer.renderLeader(this); + public void acceptVisitor(InlineAreaVisitor visitor) { + visitor.serveVisitor(this); } + } diff --git a/src/java/org/apache/fop/area/inline/Space.java b/src/java/org/apache/fop/area/inline/Space.java index a4391d6af..92095eb82 100644 --- a/src/java/org/apache/fop/area/inline/Space.java +++ b/src/java/org/apache/fop/area/inline/Space.java @@ -3,34 +3,34 @@ * ============================================================================ * The Apache Software License, Version 1.1 * ============================================================================ - * + * * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modifica- * tion, are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. - * + * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: "This product includes software * developed by the Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. - * + * * 4. The names "FOP" and "Apache Software Foundation" must not be used to * endorse or promote products derived from this software without prior * written permission. For written permission, please contact * apache@apache.org. - * + * * 5. Products derived from this software may not be called "Apache", nor may * "Apache" appear in their name, without prior written permission of the * Apache Software Foundation. - * + * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE @@ -42,16 +42,14 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ============================================================================ - * + * * This software consists of voluntary contributions made by many individuals * on behalf of the Apache Software Foundation and was originally created by * James Tauber . For more information on the Apache * Software Foundation, please see . - */ + */ package org.apache.fop.area.inline; -import org.apache.fop.render.Renderer; - /** * Inline space area. * This is used for adding a inline space to the output. @@ -59,11 +57,13 @@ import org.apache.fop.render.Renderer; public class Space extends InlineArea { /** - * Render this inlien space area. + * Handle InlineAreaVisitor request by passing this back to it. * - * @param renderer the renderer to render this inline area + * @param visitor the InlineAreaVisitor wishing to process this. + * @see org.apache.fop.area.inline.InlineAreaVisitor */ - public void render(Renderer renderer) { - renderer.renderInlineSpace(this); + public void acceptVisitor(InlineAreaVisitor visitor) { + visitor.serveVisitor(this); } + } diff --git a/src/java/org/apache/fop/area/inline/Viewport.java b/src/java/org/apache/fop/area/inline/Viewport.java index e9a736d4b..6c01afb3f 100644 --- a/src/java/org/apache/fop/area/inline/Viewport.java +++ b/src/java/org/apache/fop/area/inline/Viewport.java @@ -3,34 +3,34 @@ * ============================================================================ * The Apache Software License, Version 1.1 * ============================================================================ - * + * * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modifica- * tion, are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. - * + * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: "This product includes software * developed by the Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. - * + * * 4. The names "FOP" and "Apache Software Foundation" must not be used to * endorse or promote products derived from this software without prior * written permission. For written permission, please contact * apache@apache.org. - * + * * 5. Products derived from this software may not be called "Apache", nor may * "Apache" appear in their name, without prior written permission of the * Apache Software Foundation. - * + * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE @@ -42,16 +42,15 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ============================================================================ - * + * * This software consists of voluntary contributions made by many individuals * on behalf of the Apache Software Foundation and was originally created by * James Tauber . For more information on the Apache * Software Foundation, please see . - */ + */ package org.apache.fop.area.inline; import org.apache.fop.area.Area; -import org.apache.fop.render.Renderer; import java.io.IOException; import java.awt.geom.Rectangle2D; @@ -126,12 +125,13 @@ public class Viewport extends InlineArea { } /** - * Render this inline area. + * Handle InlineAreaVisitor request by passing this back to it. * - * @param renderer the renderer to render this inline area + * @param visitor the InlineAreaVisitor wishing to process this. + * @see org.apache.fop.area.inline.InlineAreaVisitor */ - public void render(Renderer renderer) { - renderer.renderViewport(this); + public void acceptVisitor(InlineAreaVisitor visitor) { + visitor.serveVisitor(this); } private void writeObject(java.io.ObjectOutputStream out) diff --git a/src/java/org/apache/fop/area/inline/Word.java b/src/java/org/apache/fop/area/inline/Word.java index 2977c3310..462cf0bc3 100644 --- a/src/java/org/apache/fop/area/inline/Word.java +++ b/src/java/org/apache/fop/area/inline/Word.java @@ -3,34 +3,34 @@ * ============================================================================ * The Apache Software License, Version 1.1 * ============================================================================ - * + * * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modifica- * tion, are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. - * + * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: "This product includes software * developed by the Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. - * + * * 4. The names "FOP" and "Apache Software Foundation" must not be used to * endorse or promote products derived from this software without prior * written permission. For written permission, please contact * apache@apache.org. - * + * * 5. Products derived from this software may not be called "Apache", nor may * "Apache" appear in their name, without prior written permission of the * Apache Software Foundation. - * + * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE @@ -42,16 +42,14 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ============================================================================ - * + * * This software consists of voluntary contributions made by many individuals * on behalf of the Apache Software Foundation and was originally created by * James Tauber . For more information on the Apache * Software Foundation, please see . - */ + */ package org.apache.fop.area.inline; -import org.apache.fop.render.Renderer; - /** * A word inline area. * This is really a collection character inline areas collected together @@ -71,12 +69,13 @@ public class Word extends InlineArea { } /** - * Render the word to the renderer. + * Handle InlineAreaVisitor request by passing this back to it. * - * @param renderer the renderer to render this word + * @param visitor the InlineAreaVisitor wishing to process this. + * @see org.apache.fop.area.inline.InlineAreaVisitor */ - public void render(Renderer renderer) { - renderer.renderWord(this); + public void acceptVisitor(InlineAreaVisitor visitor) { + visitor.serveVisitor(this); } /** diff --git a/src/java/org/apache/fop/render/AbstractRenderer.java b/src/java/org/apache/fop/render/AbstractRenderer.java index aa7874a1c..3609fbeeb 100644 --- a/src/java/org/apache/fop/render/AbstractRenderer.java +++ b/src/java/org/apache/fop/render/AbstractRenderer.java @@ -84,6 +84,7 @@ import org.apache.fop.area.inline.Container; import org.apache.fop.area.inline.ForeignObject; import org.apache.fop.area.inline.Image; import org.apache.fop.area.inline.InlineArea; +import org.apache.fop.area.inline.InlineAreaVisitor; import org.apache.fop.area.inline.InlineParent; import org.apache.fop.area.inline.Leader; import org.apache.fop.area.inline.Space; @@ -106,7 +107,7 @@ import org.apache.avalon.framework.configuration.ConfigurationException; * handle viewports. This keeps track of the current block and inline position. */ public abstract class AbstractRenderer extends AbstractLogEnabled - implements Renderer, Configurable { + implements Renderer, Configurable, InlineAreaVisitor { /** * user agent @@ -552,7 +553,7 @@ public abstract class AbstractRenderer extends AbstractLogEnabled for (int count = 0; count < children.size(); count++) { InlineArea inline = (InlineArea) children.get(count); - inline.render(this); + inline.acceptVisitor(this); } } @@ -640,7 +641,7 @@ public abstract class AbstractRenderer extends AbstractLogEnabled int saveIP = currentBlockIPPosition; Iterator iter = ip.getChildAreas().iterator(); while (iter.hasNext()) { - ((InlineArea) iter.next()).render(this); + ((InlineArea) iter.next()).acceptVisitor(this); } currentBlockIPPosition = saveIP + ip.getWidth(); } @@ -738,5 +739,77 @@ public abstract class AbstractRenderer extends AbstractLogEnabled } } + /** + * Render the specified Viewport. + * Required by InlineAreaVisitor interface, which is used to determine which + * InlineArea subclass should be rendered. + * + * @param viewport The Viewport area to be rendered + * @see org.apache.fop.area.inline.InlineAreaVisitor + */ + public void serveVisitor(Viewport viewport) { + renderViewport(viewport); + } + + /** + * Render the specified Word. + * Required by InlineAreaVisitor interface, which is used to determine which + * InlineArea subclass should be rendered. + * + * @param area The Word area to be rendered + * @see org.apache.fop.area.inline.InlineAreaVisitor + */ + public void serveVisitor(Word area) { + renderWord(area); + } + + /** + * Render the specified InlineParent. + * Required by InlineAreaVisitor interface, which is used to determine which + * InlineArea subclass should be rendered. + * + * @param ip The InlineParent area to be rendered + * @see org.apache.fop.area.inline.InlineAreaVisitor + */ + public void serveVisitor(InlineParent ip) { + renderInlineParent(ip); + } + + /** + * Render the specified Character. + * Required by InlineAreaVisitor interface, which is used to determine which + * InlineArea subclass should be rendered. + * + * @param ch The Character area to be rendered + * @see org.apache.fop.area.inline.InlineAreaVisitor + */ + public void serveVisitor(org.apache.fop.area.inline.Character ch) { + renderCharacter(ch); + } + + /** + * Render the specified Space. + * Required by InlineAreaVisitor interface, which is used to determine which + * InlineArea subclass should be rendered. + * + * @param space The Space area to be rendered + * @see org.apache.fop.area.inline.InlineAreaVisitor + */ + public void serveVisitor(Space space) { + renderInlineSpace(space); + } + + /** + * Render the specified Leader. + * Required by InlineAreaVisitor interface, which is used to determine which + * InlineArea subclass should be rendered. + * + * @param area The Leader area to be rendered + * @see org.apache.fop.area.inline.InlineAreaVisitor + */ + public void serveVisitor(Leader area) { + renderLeader(area); + } + } diff --git a/src/java/org/apache/fop/render/xml/XMLRenderer.java b/src/java/org/apache/fop/render/xml/XMLRenderer.java index 43f065cf9..1fc288488 100644 --- a/src/java/org/apache/fop/render/xml/XMLRenderer.java +++ b/src/java/org/apache/fop/render/xml/XMLRenderer.java @@ -274,7 +274,7 @@ public class XMLRenderer extends AbstractRenderer { for (int count = 0; count < children.size(); count++) { InlineArea inline = (InlineArea) children.get(count); - inline.render(this); + inline.acceptVisitor(this); } writeEndTag(""); -- 2.39.5