+++ /dev/null
-/*
- * $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 <jtauber@jtauber.com>. For more information on the Apache
- * Software Foundation, please see <http://www.apache.org/>.
- */
-package org.apache.fop.area.inline;
-
-/**
- * <p>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.</p>
- */
-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 inline text.
- *
- * @param area The text area
- */
- void serveVisitor(TextArea 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);
-
-}
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;
* handle viewports. This keeps track of the current block and inline position.
*/
public abstract class AbstractRenderer extends AbstractLogEnabled
- implements Renderer, Configurable, InlineAreaVisitor, Constants {
+ implements Renderer, Configurable, Constants {
/**
* user agent
for (int count = 0; count < children.size(); count++) {
InlineArea inline = (InlineArea) children.get(count);
- inline.acceptVisitor(this);
+ renderInlineArea(inline);
}
}
+ protected void renderInlineArea(InlineArea inlineArea) {
+ if (inlineArea instanceof TextArea) {
+ renderText((TextArea) inlineArea);
+ } else if (inlineArea instanceof InlineParent) {
+ renderInlineParent((InlineParent) inlineArea);
+ } else if (inlineArea instanceof Space) {
+ renderInlineSpace((Space) inlineArea);
+ } else if (inlineArea instanceof Character) {
+ renderCharacter((Character) inlineArea);
+ } else if (inlineArea instanceof Viewport) {
+ renderViewport((Viewport) inlineArea);
+ } else if (inlineArea instanceof Leader) {
+ renderLeader((Leader) inlineArea);
+ }
+ }
+
+
+ /** @see org.apache.fop.render.Renderer */
+ public void renderCharacter(Character ch) {
+ currentBlockIPPosition += ch.getWidth();
+ }
+
+ /** @see org.apache.fop.render.Renderer */
+ public void renderInlineSpace(Space space) {
+ // an inline space moves the inline progression position
+ // for the current block by the width or height of the space
+ // it may also have styling (only on this object) that needs
+ // handling
+ currentBlockIPPosition += space.getWidth();
+ }
+
+ /** @see org.apache.fop.render.Renderer */
+ public void renderLeader(Leader area) {
+ currentBlockIPPosition += area.getWidth();
+ }
+
+ /** @see org.apache.fop.render.Renderer */
+ public void renderText(TextArea text) {
+ currentBlockIPPosition += text.getWidth();
+ }
+
+ /** @see org.apache.fop.render.Renderer */
+ public void renderInlineParent(InlineParent ip) {
+ int saveIP = currentBlockIPPosition;
+ Iterator iter = ip.getChildAreas().iterator();
+ while (iter.hasNext()) {
+ renderInlineArea((InlineArea) iter.next());
+ }
+ currentBlockIPPosition = saveIP + ip.getWidth();
+ }
+
/** @see org.apache.fop.render.Renderer */
public void renderViewport(Viewport viewport) {
Area content = viewport.getContent();
// Some renderers (ex. Text) don't support foreign objects.
}
- /** @see org.apache.fop.render.Renderer */
- public void renderCharacter(Character ch) {
- currentBlockIPPosition += ch.getWidth();
- }
-
- /** @see org.apache.fop.render.Renderer */
- public void renderInlineSpace(Space space) {
- // an inline space moves the inline progression position
- // for the current block by the width or height of the space
- // it may also have styling (only on this object) that needs
- // handling
- currentBlockIPPosition += space.getWidth();
- }
-
- /** @see org.apache.fop.render.Renderer */
- public void renderLeader(Leader area) {
- currentBlockIPPosition += area.getWidth();
- }
-
- /** @see org.apache.fop.render.Renderer */
- public void renderText(TextArea text) {
- currentBlockIPPosition += text.getWidth();
- }
-
- /** @see org.apache.fop.render.Renderer */
- public void renderInlineParent(InlineParent ip) {
- int saveIP = currentBlockIPPosition;
- Iterator iter = ip.getChildAreas().iterator();
- while (iter.hasNext()) {
- ((InlineArea) iter.next()).acceptVisitor(this);
- }
- currentBlockIPPosition = saveIP + ip.getWidth();
- }
-
/**
* Set the default xml handler for the given mime type.
* @param mime MIME type
+ "No handler defined for XML: " + namespace);
}
}
-
- /**
- * 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 Text.
- * Required by InlineAreaVisitor interface, which is used to determine which
- * InlineArea subclass should be rendered.
- *
- * @param area The Text area to be rendered
- * @see org.apache.fop.area.inline.InlineAreaVisitor
- */
- public void serveVisitor(TextArea area) {
- renderText(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);
- }
-
}