You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ke...@apache.org on 2002/02/21 10:54:28 UTC

cvs commit: xml-fop/src/org/apache/fop/svg PDFGraphics2D.java

keiron      02/02/21 01:54:28

  Modified:    src/org/apache/fop/apps Driver.java
               src/org/apache/fop/area/inline Space.java
               src/org/apache/fop/fo FOUserAgent.java
               src/org/apache/fop/fo/flow Character.java
                        ExternalGraphic.java InstreamForeignObject.java
                        Leader.java Wrapper.java
               src/org/apache/fop/image AbstractFopImage.java BmpImage.java
                        EPSImage.java FopImage.java FopImageConsumer.java
                        GifImage.java ImageArea.java JAIImage.java
                        JimiImage.java JpegImage.java SVGImage.java
               src/org/apache/fop/image/analyser AbstractImageReader.java
                        BMPReader.java EPSReader.java GIFReader.java
                        ImageReader.java ImageReaderFactory.java
                        JPEGReader.java PNGReader.java SVGReader.java
                        TIFFReader.java
               src/org/apache/fop/pdf PDFXObject.java
               src/org/apache/fop/render/ps PSGraphics2D.java
                        PSRenderer.java
               src/org/apache/fop/svg PDFGraphics2D.java
  Added:       src/org/apache/fop/image ImageCache.java ImageFactory.java
                        ImageLoader.java
  Removed:     src/org/apache/fop/image FopImageException.java
                        FopImageFactory.java
  Log:
  some preliminary changes to image handling
  Images are put into a cache, different cahces are possible
  if information is required it needs to be explicitly loaded
  
  Revision  Changes    Path
  1.42      +4 -2      xml-fop/src/org/apache/fop/apps/Driver.java
  
  Index: Driver.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/apps/Driver.java,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- Driver.java	8 Jan 2002 09:52:16 -0000	1.41
  +++ Driver.java	21 Feb 2002 09:54:26 -0000	1.42
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Driver.java,v 1.41 2002/01/08 09:52:16 keiron Exp $
  + * $Id: Driver.java,v 1.42 2002/02/21 09:54:26 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -205,7 +205,9 @@
       }
   
       private FOUserAgent getUserAgent() {
  -        return new FOUserAgent();
  +        FOUserAgent ua = new FOUserAgent();
  +        ua.setLogger(log);
  +        return ua;
       }
   
       public void setLogger(Logger logger) {
  
  
  
  1.2       +3 -1      xml-fop/src/org/apache/fop/area/inline/Space.java
  
  Index: Space.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/inline/Space.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Space.java	22 Oct 2001 09:30:31 -0000	1.1
  +++ Space.java	21 Feb 2002 09:54:26 -0000	1.2
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Space.java,v 1.1 2001/10/22 09:30:31 keiron Exp $
  + * $Id: Space.java,v 1.2 2002/02/21 09:54:26 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -10,6 +10,8 @@
   import org.apache.fop.render.Renderer;
   
   public class Space extends Stretch {
  +    public boolean collapse = true;
  +    public boolean fixed = false;
   
       public void render(Renderer renderer) {
           renderer.renderInlineSpace(this);
  
  
  
  1.5       +11 -1     xml-fop/src/org/apache/fop/fo/FOUserAgent.java
  
  Index: FOUserAgent.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FOUserAgent.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FOUserAgent.java	8 Jan 2002 09:52:16 -0000	1.4
  +++ FOUserAgent.java	21 Feb 2002 09:54:26 -0000	1.5
  @@ -1,5 +1,5 @@
   /*
  - * $Id: FOUserAgent.java,v 1.4 2002/01/08 09:52:16 keiron Exp $
  + * $Id: FOUserAgent.java,v 1.5 2002/02/21 09:54:26 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -9,6 +9,7 @@
   
   import org.apache.fop.render.XMLHandler;
   import org.apache.fop.render.RendererContext;
  +import org.apache.log.Logger;
   
   import org.w3c.dom.*;
   
  @@ -32,6 +33,15 @@
   public class FOUserAgent {
       HashMap defaults = new HashMap();
       HashMap handlers = new HashMap();
  +    Logger log;
  +
  +    public void setLogger(Logger logger) {
  +        log = logger;
  +    }
  +
  +    public Logger getLogger() {
  +        return log;
  +    }
   
       /**
        * Set the default xml handler for the given mime type.
  
  
  
  1.17      +21 -65    xml-fop/src/org/apache/fop/fo/flow/Character.java
  
  Index: Character.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Character.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- Character.java	22 Nov 2001 07:11:39 -0000	1.16
  +++ Character.java	21 Feb 2002 09:54:26 -0000	1.17
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Character.java,v 1.16 2001/11/22 07:11:39 keiron Exp $
  + * $Id: Character.java,v 1.17 2002/02/21 09:54:26 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -11,13 +11,18 @@
   import org.apache.fop.fo.*;
   import org.apache.fop.fo.properties.*;
   import org.apache.fop.datatypes.ColorType;
  -import org.apache.fop.layout.BlockArea;
  -import org.apache.fop.layout.*;
  -import org.apache.fop.layout.inline.InlineArea;
   import org.apache.fop.fo.FObj;
   import org.apache.fop.layout.FontState;
  -import org.apache.fop.layout.LineArea;
  +import org.apache.fop.layout.AuralProps;
  +import org.apache.fop.layout.BorderAndPadding;
  +import org.apache.fop.layout.BackgroundProps;
  +import org.apache.fop.layout.HyphenationProps;
  +import org.apache.fop.layout.MarginInlineProps;
  +import org.apache.fop.layout.RelativePositionProps;
   import org.apache.fop.apps.FOPException;
  +import org.apache.fop.area.inline.InlineArea;
  +import org.apache.fop.layoutmgr.LayoutManager;
  +import org.apache.fop.layoutmgr.LeafNodeLayoutManager;
   
   
   /**
  @@ -43,14 +48,17 @@
           super(parent);
       }
   
  -    public Status layout(Area area) throws FOPException {
  -        BlockArea blockArea;
  -        if (!(area instanceof BlockArea)) {
  -            log.warn("currently Character can only be in a BlockArea");
  -            return new Status(Status.OK);
  -        }
  -        blockArea = (BlockArea)area;
  -        boolean textDecoration;
  +    public LayoutManager getLayoutManager() {
  +        LeafNodeLayoutManager lm = new LeafNodeLayoutManager(this);
  +        lm.setCurrentArea(getInlineArea());
  +        return lm;
  +    }
  +
  +    protected InlineArea getInlineArea() {
  +        return null;
  +    }
  +
  +    public void setup() throws FOPException {
   
           // Common Aural Properties
           AuralProps mAurProps = propMgr.getAuralProps();
  @@ -94,58 +102,6 @@
           // this.properties.get("text-shadow");
           // this.properties.get("text-transform");
           // this.properties.get("word-spacing");
  -
  -        // color properties
  -        ColorType c = this.properties.get("color").getColorType();
  -        float red = c.red();
  -        float green = c.green();
  -        float blue = c.blue();
  -
  -        int whiteSpaceCollapse =
  -            this.properties.get("white-space-collapse").getEnum();
  -        int wrapOption = ((FObj)this.parent).properties.get("wrap-option").getEnum();
  -
  -        int tmp = this.properties.get("text-decoration").getEnum();
  -        if (tmp == org.apache.fop.fo.properties.TextDecoration.UNDERLINE) {
  -            textDecoration = true;
  -        } else {
  -            textDecoration = false;
  -        }
  -
  -        // Character specific properties
  -        characterValue = this.properties.get("character").getCharacter();
  -
  -
  -        // initialize id
  -        String id = this.properties.get("id").getString();
  -        blockArea.getIDReferences().initializeID(id, blockArea);
  -
  -        LineArea la = blockArea.getCurrentLineArea();
  -        if (la == null) {
  -            return new Status(Status.AREA_FULL_NONE);
  -        }
  -        la.changeFont(propMgr.getFontState(area.getFontInfo()));
  -        la.changeColor(red, green, blue);
  -        la.changeWrapOption(wrapOption);
  -        la.changeWhiteSpaceCollapse(whiteSpaceCollapse);
  -        blockArea.setupLinkSet(this.getLinkSet());
  -        int result = la.addCharacter(characterValue, this.getLinkSet(),
  -                                     textDecoration);
  -        if (result == Character.DOESNOT_FIT) {
  -            la = blockArea.createNextLineArea();
  -            if (la == null) {
  -                return new Status(Status.AREA_FULL_NONE);
  -            }
  -            la.changeFont(propMgr.getFontState(area.getFontInfo()));
  -            la.changeColor(red, green, blue);
  -            la.changeWrapOption(wrapOption);
  -            la.changeWhiteSpaceCollapse(whiteSpaceCollapse);
  -            blockArea.setupLinkSet(this.getLinkSet());
  -            la.addCharacter(characterValue, this.getLinkSet(),
  -                            textDecoration);
  -        }
  -        return new Status(Status.OK);
  -
       }
   
       public CharIterator charIterator() {
  
  
  
  1.17      +63 -203   xml-fop/src/org/apache/fop/fo/flow/ExternalGraphic.java
  
  Index: ExternalGraphic.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/ExternalGraphic.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- ExternalGraphic.java	14 Nov 2001 13:45:44 -0000	1.16
  +++ ExternalGraphic.java	21 Feb 2002 09:54:26 -0000	1.17
  @@ -1,5 +1,5 @@
   /*
  - * $Id: ExternalGraphic.java,v 1.16 2001/11/14 13:45:44 keiron Exp $
  + * $Id: ExternalGraphic.java,v 1.17 2002/02/21 09:54:26 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -13,13 +13,18 @@
   import org.apache.fop.layout.*;
   import org.apache.fop.apps.FOPException;
   import org.apache.fop.image.*;
  +import org.apache.fop.area.inline.InlineArea;
  +import org.apache.fop.layoutmgr.LayoutManager;
  +import org.apache.fop.layoutmgr.LeafNodeLayoutManager;
  +import org.apache.fop.area.inline.Image;
  +import org.apache.fop.area.inline.Viewport;
   
   // Java
   import java.net.URL;
   import java.net.MalformedURLException;
   
   public class ExternalGraphic extends FObj {
  -
  +    String url;
       int breakAfter;
       int breakBefore;
       int align;
  @@ -38,212 +43,67 @@
           super(parent);
       }
   
  -    public Status layout(Area area) throws FOPException {
  -
  -        if (this.marker == START) {
  -
  -            // Common Accessibility Properties
  -            AccessibilityProps mAccProps = propMgr.getAccessibilityProps();
  -
  -            // Common Aural Properties
  -            AuralProps mAurProps = propMgr.getAuralProps();
  -
  -            // Common Border, Padding, and Background Properties
  -            BorderAndPadding bap = propMgr.getBorderAndPadding();
  -            BackgroundProps bProps = propMgr.getBackgroundProps();
  -
  -            // Common Margin Properties-Inline
  -            MarginInlineProps mProps = propMgr.getMarginInlineProps();
  -
  -            // Common Relative Position Properties
  -            RelativePositionProps mRelProps = propMgr.getRelativePositionProps();
  -
  -            // this.properties.get("alignment-adjust");
  -            // this.properties.get("alignment-baseline");
  -            // this.properties.get("baseline-shift");
  -            // this.properties.get("block-progression-dimension");
  -            // this.properties.get("content-height");
  -            // this.properties.get("content-type");
  -            // this.properties.get("content-width");
  -            // this.properties.get("display-align");
  -            // this.properties.get("dominant-baseline");
  -            // this.properties.get("height");
  -            // this.properties.get("id");
  -            // this.properties.get("inline-progression-dimension");
  -            // this.properties.get("keep-with-next");
  -            // this.properties.get("keep-with-previous");
  -            // this.properties.get("line-height");
  -            // this.properties.get("line-height-shift-adjustment");
  -            // this.properties.get("overflow");
  -            // this.properties.get("scaling");
  -            // this.properties.get("scaling-method");
  -            // this.properties.get("src");
  -            // this.properties.get("text-align");
  -            // this.properties.get("width");
  -
  -            // FIXME
  -            this.align = this.properties.get("text-align").getEnum();
  -
  -            this.startIndent =
  -                this.properties.get("start-indent").getLength().mvalue();
  -            this.endIndent =
  -                this.properties.get("end-indent").getLength().mvalue();
  -
  -            this.spaceBefore =
  -                this.properties.get("space-before.optimum").getLength().mvalue();
  -            this.spaceAfter =
  -                this.properties.get("space-after.optimum").getLength().mvalue();
  -
  -            this.src = this.properties.get("src").getString();
  -
  -            this.width = this.properties.get("width").getLength().mvalue();
  -
  -            this.height = this.properties.get("height").getLength().mvalue();
  -
  -            this.id = this.properties.get("id").getString();
  -
  -            area.getIDReferences().createID(id);
  -            /*
  -             * if (area instanceof BlockArea) {
  -             * area.end();
  -             * }
  -             * if (this.isInTableCell) {
  -             * startIndent += forcedStartOffset;
  -             * endIndent = area.getAllocationWidth() - forcedWidth -
  -             * forcedStartOffset;
  -             * }
  -             */
  -            this.marker = 0;
  -        }
  -
  -        try {
  -            FopImage img = FopImageFactory.Make(src);
  -            // if width / height needs to be computed
  -            if ((width == 0) || (height == 0)) {
  -                // aspect ratio
  -                double imgWidth = img.getWidth();
  -                double imgHeight = img.getHeight();
  -                if ((width == 0) && (height == 0)) {
  -                    width = (int)((imgWidth * 1000d));
  -                    height = (int)((imgHeight * 1000d));
  -                } else if (height == 0) {
  -                    height = (int)((imgHeight * ((double)width)) / imgWidth);
  -                } else if (width == 0) {
  -                    width = (int)((imgWidth * ((double)height)) / imgHeight);
  -                }
  -            }
  -
  -            // scale image if it doesn't fit in the area/page
  -            // Need to be more tested...
  -            double ratio = ((double)width) / ((double)height);
  -            int areaWidth = area.getAllocationWidth() - startIndent
  -                            - endIndent;
  -            int pageHeight = area.getPage().getBody().getMaxHeight()
  -                             - spaceBefore;
  -            if (height > pageHeight) {
  -                height = pageHeight;
  -                width = (int)(ratio * ((double)height));
  -            }
  -            if (width > areaWidth) {
  -                width = areaWidth;
  -                height = (int)(((double)width) / ratio);
  -            }
  -
  -            if (area.spaceLeft() < (height + spaceBefore)) {
  -                return new Status(Status.AREA_FULL_NONE);
  -            }
  -
  -            this.imageArea =
  -                new ImageArea(propMgr.getFontState(area.getFontInfo()), img,
  -                              area.getAllocationWidth(), width, height,
  -                              startIndent, endIndent, align);
  -
  -            if ((spaceBefore != 0) && (this.marker == 0)) {
  -                area.addDisplaySpace(spaceBefore);
  -            }
  -
  -            if (marker == 0) {
  -                // configure id
  -                area.getIDReferences().configureID(id, area);
  -            }
  -
  -            imageArea.start();
  -            imageArea.end();
  -            // area.addChild(imageArea);
  -            // area.increaseHeight(imageArea.getHeight());
  -
  -            if (spaceAfter != 0) {
  -                area.addDisplaySpace(spaceAfter);
  -            }
  -            if (breakBefore == BreakBefore.PAGE
  -                    || ((spaceBefore + imageArea.getHeight())
  -                        > area.spaceLeft())) {
  -                return new Status(Status.FORCE_PAGE_BREAK);
  -            }
  -
  -            if (breakBefore == BreakBefore.ODD_PAGE) {
  -                return new Status(Status.FORCE_PAGE_BREAK_ODD);
  -            }
  -
  -            if (breakBefore == BreakBefore.EVEN_PAGE) {
  -                return new Status(Status.FORCE_PAGE_BREAK_EVEN);
  -            }
  -
  -
  -            if (area instanceof BlockArea) {
  -                BlockArea ba = (BlockArea)area;
  -                LineArea la = ba.getCurrentLineArea();
  -                if (la == null) {
  -                    return new Status(Status.AREA_FULL_NONE);
  -                }
  -                la.addPending();
  -                if (imageArea.getContentWidth() > la.getRemainingWidth()) {
  -                    la = ba.createNextLineArea();
  -                    if (la == null) {
  -                        return new Status(Status.AREA_FULL_NONE);
  -                    }
  -                }
  -                la.addInlineArea(imageArea);
  -            } else {
  -                area.addChild(imageArea);
  -                area.increaseHeight(imageArea.getContentHeight());
  -            }
  -            imageArea.setPage(area.getPage());
  -
  -            if (breakAfter == BreakAfter.PAGE) {
  -                this.marker = BREAK_AFTER;
  -                return new Status(Status.FORCE_PAGE_BREAK);
  -            }
  -
  -            if (breakAfter == BreakAfter.ODD_PAGE) {
  -                this.marker = BREAK_AFTER;
  -                return new Status(Status.FORCE_PAGE_BREAK_ODD);
  -            }
  -
  -            if (breakAfter == BreakAfter.EVEN_PAGE) {
  -                this.marker = BREAK_AFTER;
  -                return new Status(Status.FORCE_PAGE_BREAK_EVEN);
  -            }
  -
  -
  +    public LayoutManager getLayoutManager() {
  +        LeafNodeLayoutManager lm = new LeafNodeLayoutManager(this);
  +        lm.setCurrentArea(getInlineArea());
  +        return lm;
  +    }
   
  +    protected InlineArea getInlineArea() {
  +        url = ImageFactory.getURL(url);
  +        // if we need to load this image to get its size
  +        // FopImage fopimage = ImageFactory.getImage(url, userAgent);
  +        // if(fopimage == null) {
  +        // error
  +        // }
  +        // if(!fopimage.load(FopImage.DIMENSIONS)) {
  +        // error
  +        // }
  +        Image imArea = new Image(url);
  +        Viewport vp = new Viewport(imArea);
  +        return vp;
  +    }
   
  +    public void setup() throws FOPException {
   
  -        } catch (MalformedURLException urlex) {
  -            // bad URL
  -            log.error("Error while creating area : "
  -                                   + urlex.getMessage());
  -        } catch (FopImageException imgex) {
  -            // image error
  -            log.error("Error while creating area : "
  -                                   + imgex.getMessage());
  -        }
  +        // Common Accessibility Properties
  +        AccessibilityProps mAccProps = propMgr.getAccessibilityProps();
   
  -        // if (area instanceof BlockArea) {
  -        // area.start();
  -        // }
  +        // Common Aural Properties 
  +        AuralProps mAurProps = propMgr.getAuralProps();
   
  -        return new Status(Status.OK);
  +        // Common Border, Padding, and Background Properties
  +        BorderAndPadding bap = propMgr.getBorderAndPadding();
  +        BackgroundProps bProps = propMgr.getBackgroundProps();
  +
  +        // Common Margin Properties-Inline
  +        MarginInlineProps mProps = propMgr.getMarginInlineProps();
  +
  +        // Common Relative Position Properties
  +        RelativePositionProps mRelProps = propMgr.getRelativePositionProps();
  +
  +        // this.properties.get("alignment-adjust");
  +        // this.properties.get("alignment-baseline");
  +        // this.properties.get("baseline-shift");
  +        // this.properties.get("block-progression-dimension");
  +        // this.properties.get("content-height");
  +        // this.properties.get("content-type");
  +        // this.properties.get("content-width");
  +        // this.properties.get("display-align");
  +        // this.properties.get("dominant-baseline");
  +        // this.properties.get("height");
  +        // this.properties.get("id");
  +        // this.properties.get("inline-progression-dimension");
  +        // this.properties.get("keep-with-next");
  +        // this.properties.get("keep-with-previous");
  +        // this.properties.get("line-height");
  +        // this.properties.get("line-height-shift-adjustment");
  +        // this.properties.get("overflow");
  +        // this.properties.get("scaling");
  +        // this.properties.get("scaling-method");
  +        // this.properties.get("src");
  +        // this.properties.get("text-align");
  +        // this.properties.get("width");
       }
   
   }
  
  
  
  1.20      +5 -24     xml-fop/src/org/apache/fop/fo/flow/InstreamForeignObject.java
  
  Index: InstreamForeignObject.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/InstreamForeignObject.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- InstreamForeignObject.java	8 Jan 2002 09:52:16 -0000	1.19
  +++ InstreamForeignObject.java	21 Feb 2002 09:54:26 -0000	1.20
  @@ -1,5 +1,5 @@
   /*
  - * $Id: InstreamForeignObject.java,v 1.19 2002/01/08 09:52:16 keiron Exp $
  + * $Id: InstreamForeignObject.java,v 1.20 2002/02/21 09:54:26 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -23,7 +23,7 @@
   import org.apache.fop.layout.RelativePositionProps;
   import org.apache.fop.apps.FOPException;
   import org.apache.fop.layoutmgr.LayoutManager;
  -import org.apache.fop.layoutmgr.SplitContext;
  +import org.apache.fop.layoutmgr.LeafNodeLayoutManager;
   
   import org.w3c.dom.Document;
   
  @@ -58,28 +58,9 @@
       }
   
       public LayoutManager getLayoutManager() {
  -        return new LayoutManager() {
  -            LayoutManager lm;
  -            public void generateAreas() {
  -                lm.addChild(getInlineArea());
  -            }
  -
  -            public Area getParentArea (Area childArea) {
  -                return null;
  -            }
  -
  -            public void addChild (Area childArea) {
  -            }
  -
  -            public boolean splitArea(Area areaToSplit, SplitContext context) {
  -                return false;
  -            }
  -
  -            public void setParentLM(LayoutManager lm) {
  -                this.lm = lm;
  -            }
  -
  -        };
  +        LeafNodeLayoutManager lm = new LeafNodeLayoutManager(this);
  +        lm.setCurrentArea(getInlineArea());
  +        return lm;
       }
   
       /**
  
  
  
  1.17      +14 -1     xml-fop/src/org/apache/fop/fo/flow/Leader.java
  
  Index: Leader.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Leader.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- Leader.java	8 Jan 2002 09:52:16 -0000	1.16
  +++ Leader.java	21 Feb 2002 09:54:26 -0000	1.17
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Leader.java,v 1.16 2002/01/08 09:52:16 keiron Exp $
  + * $Id: Leader.java,v 1.17 2002/02/21 09:54:26 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -11,12 +11,15 @@
   import org.apache.fop.fo.*;
   import org.apache.fop.fo.properties.*;
   import org.apache.fop.datatypes.*;
  +import org.apache.fop.area.inline.InlineArea;
   import org.apache.fop.layout.*;
   import org.apache.fop.layout.BlockArea;
   import org.apache.fop.layout.inline.LeaderArea;
   import org.apache.fop.layout.LineArea;
   import org.apache.fop.layout.FontState;
   import org.apache.fop.apps.FOPException;
  +import org.apache.fop.layoutmgr.LayoutManager;
  +import org.apache.fop.layoutmgr.LeafNodeLayoutManager;
   
   /**
    * Implements fo:leader; main property of leader leader-pattern.
  @@ -27,6 +30,16 @@
   
       public Leader(FONode parent) {
           super(parent);
  +    }
  +
  +    public LayoutManager getLayoutManager() {
  +        LeafNodeLayoutManager lm = new LeafNodeLayoutManager(this);
  +        lm.setCurrentArea(getInlineArea());
  +        return lm;
  +    }
  +
  +    protected InlineArea getInlineArea() {
  +        return null;
       }
   
       public Status layout(Area area) throws FOPException {
  
  
  
  1.7       +1 -2      xml-fop/src/org/apache/fop/fo/flow/Wrapper.java
  
  Index: Wrapper.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Wrapper.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Wrapper.java	9 Nov 2001 11:32:38 -0000	1.6
  +++ Wrapper.java	21 Feb 2002 09:54:26 -0000	1.7
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Wrapper.java,v 1.6 2001/11/09 11:32:38 keiron Exp $
  + * $Id: Wrapper.java,v 1.7 2002/02/21 09:54:26 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -25,7 +25,6 @@
   
       public Wrapper(FONode parent) {
           super(parent);
  -        // check that this occurs inside an fo:flow
       }
   
   }
  
  
  
  1.6       +49 -97    xml-fop/src/org/apache/fop/image/AbstractFopImage.java
  
  Index: AbstractFopImage.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/AbstractFopImage.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- AbstractFopImage.java	18 Sep 2001 08:17:07 -0000	1.5
  +++ AbstractFopImage.java	21 Feb 2002 09:54:27 -0000	1.6
  @@ -1,5 +1,5 @@
   /*
  - * $Id: AbstractFopImage.java,v 1.5 2001/09/18 08:17:07 keiron Exp $
  + * $Id: AbstractFopImage.java,v 1.6 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -8,7 +8,6 @@
   package org.apache.fop.image;
   
   // Java
  -import java.util.Hashtable;
   import java.net.URL;
   
   // FOP
  @@ -17,6 +16,7 @@
   import org.apache.fop.pdf.PDFFilter;
   import org.apache.fop.image.analyser.ImageReaderFactory;
   import org.apache.fop.image.analyser.ImageReader;
  +import org.apache.fop.fo.FOUserAgent;
   
   /**
    * Base class to implement the FopImage interface.
  @@ -25,6 +25,7 @@
    * @see FopImage
    */
   public abstract class AbstractFopImage implements FopImage {
  +    protected int loaded = 0;
   
       /**
        * Image width (in pixel).
  @@ -91,49 +92,53 @@
        * </UL>
        * The image data isn't kept in memory.
        * @param href image URL
  -     * @return a new FopImage object
  -     * @exception FopImageException an error occured during initialization
  -     */
  -    public AbstractFopImage(URL href) throws FopImageException {
  -        this.m_href = href;
  -        try {
  -            this.m_imageReader =
  -                ImageReaderFactory.Make(this.m_href.toExternalForm(),
  -                                        this.m_href.openStream());
  -        } catch (Exception e) {
  -            throw new FopImageException(e.getMessage());
  -        }
  -        this.m_width = this.m_imageReader.getWidth();
  -        this.m_height = this.m_imageReader.getHeight();
  -    }
  -
  -    /**
  -     * Constructor.
  -     * Construct a new FopImage object and initialize its default properties:
  -     * <UL>
  -     * <LI>image width
  -     * <LI>image height
  -     * </UL>
  -     * The image data isn't kept in memory.
  -     * @param href image URL
        * imgReader ImageReader object
        * @return a new FopImage object
  -     * @exception FopImageException an error occured during initialization
        */
  -    public AbstractFopImage(URL href,
  -                            ImageReader imgReader) throws FopImageException {
  +    public AbstractFopImage(URL href, ImageReader imgReader) {
           this.m_href = href;
           this.m_imageReader = imgReader;
           this.m_width = this.m_imageReader.getWidth();
           this.m_height = this.m_imageReader.getHeight();
  +        loaded = loaded & DIMENSIONS;
  +    }
  +
  +    public String getMimeType() {
  +        return m_imageReader.getMimeType();
       }
   
       /**
        * Load image data and initialize its properties.
  -     * Subclasses need to implement this method.
  -     * @exception FopImageException an error occured during loading
        */
  -    abstract protected void loadImage() throws FopImageException;
  +    public synchronized boolean load(int type, FOUserAgent ua) {
  +        if((loaded & type) != 0) {
  +            return true;
  +        }
  +        boolean success = true;
  +        if(((type & DIMENSIONS) != 0) && ((loaded & DIMENSIONS) == 0)) {
  +            success = success && loadDimensions(ua);
  +
  +            if(!success) {
  +                return false;
  +            }
  +            loaded = loaded & DIMENSIONS;
  +        }
  +        if(((type & BITMAP) != 0) && ((loaded & BITMAP) == 0)) {
  +            success = success && loadBitmap(ua);
  +            if(success) {
  +                loaded = loaded & BITMAP;
  +            }
  +        }
  +        return success;
  +    }
  +
  +    protected boolean loadDimensions(FOUserAgent ua) {
  +        return false;
  +    }
  +
  +    protected boolean loadBitmap(FOUserAgent ua) {
  +        return false;
  +    }
   
       /**
        * Return the image URL.
  @@ -146,148 +151,95 @@
       /**
        * Return the image width.
        * @return the image width
  -     * @exception FopImageException an error occured during property retriaval
        */
  -    public int getWidth() throws FopImageException {
  -        if (this.m_width == 0)
  -            this.loadImage();
  -
  +    public int getWidth() {
           return this.m_width;
       }
   
       /**
        * Return the image height.
        * @return the image height
  -     * @exception FopImageException an error occured during property retriaval
        */
  -    public int getHeight() throws FopImageException {
  -        if (this.m_height == 0)
  -            this.loadImage();
  -
  +    public int getHeight() {
           return this.m_height;
       }
   
       /**
        * Return the image color space.
        * @return the image color space (org.apache.fop.datatypes.ColorSpace)
  -     * @exception FopImageException an error occured during property retriaval
        */
  -    public ColorSpace getColorSpace() throws FopImageException {
  -        if (this.m_colorSpace == null)
  -            this.loadImage();
  -
  +    public ColorSpace getColorSpace() {
           return this.m_colorSpace;
       }
   
       /**
        * Return the number of bits per pixel.
        * @return number of bits per pixel
  -     * @exception FopImageException an error occured during property retriaval
        */
  -    public int getBitsPerPixel() throws FopImageException {
  -        if (this.m_bitsPerPixel == 0)
  -            this.loadImage();
  -
  +    public int getBitsPerPixel() {
           return this.m_bitsPerPixel;
       }
   
       /**
        * Return the image transparency.
        * @return true if the image is transparent
  -     * @exception FopImageException an error occured during property retriaval
        */
  -    public boolean isTransparent() throws FopImageException {
  +    public boolean isTransparent() {
           return this.m_isTransparent;
       }
   
       /**
        * Return the transparent color.
        * @return the transparent color (org.apache.fop.pdf.PDFColor)
  -     * @exception FopImageException an error occured during property retriaval
        */
  -    public PDFColor getTransparentColor() throws FopImageException {
  +    public PDFColor getTransparentColor() {
           return this.m_transparentColor;
       }
   
       /**
        * Return the image data (uncompressed).
        * @return the image data
  -     * @exception FopImageException an error occured during loading
        */
  -    public byte[] getBitmaps() throws FopImageException {
  -        if (this.m_bitmaps == null)
  -            this.loadImage();
  -
  +    public byte[] getBitmaps() {
           return this.m_bitmaps;
       }
   
       /**
        * Return the image data size (uncompressed).
        * @return the image data size
  -     * @exception FopImageException an error occured during loading
        */
  -    public int getBitmapsSize() throws FopImageException {
  -        if (this.m_bitmapsSize == 0)
  -            this.loadImage();
  -
  +    public int getBitmapsSize() {
           return this.m_bitmapsSize;
       }
   
       /**
        * Return the original image data (compressed).
        * @return the original image data
  -     * @exception FopImageException an error occured during loading
        */
  -    public byte[] getRessourceBytes() throws FopImageException {
  +    public byte[] getRessourceBytes() {
           return null;
       }
   
       /**
        * Return the original image data size (compressed).
        * @return the original image data size
  -     * @exception FopImageException an error occured during loading
        */
  -    public int getRessourceBytesSize() throws FopImageException {
  +    public int getRessourceBytesSize() {
           return 0;
       }
   
       /**
        * Return the original image compression type.
        * @return the original image compression type (org.apache.fop.pdf.PDFFilter)
  -     * @exception FopImageException an error occured during loading
        */
  -    public PDFFilter getPDFFilter() throws FopImageException {
  +    public PDFFilter getPDFFilter() {
   
           /*
            * Added by Eric Dalquist
            * Using the bitsPerPixel var as our flag since many imges will
            * have a null m_compressionType even after being loaded
            */
  -        if (this.m_bitsPerPixel == 0)
  -            this.loadImage();
  -
           return m_compressionType;
  -    }
  -
  -    /**
  -     * Free all ressource.
  -     */
  -    public void close() {
  -        /*
  -         * For the moment, only release the bitmaps (image areas
  -         * can share the same FopImage object)
  -         * Thus, even if it had been called, other properties
  -         * are still available.
  -         */
  -        // this.m_width = 0;
  -        // this.m_height = 0;
  -        // this.m_href = null;
  -        // this.m_colorSpace = null;
  -        // this.m_bitsPerPixel = 0;
  -        this.m_bitmaps = null;
  -        this.m_bitmapsSize = 0;
  -        // this.m_isTransparent = false;
  -        // this.m_transparentColor = null;
       }
   
   }
  
  
  
  1.4       +67 -64    xml-fop/src/org/apache/fop/image/BmpImage.java
  
  Index: BmpImage.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/BmpImage.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BmpImage.java	30 Jul 2001 20:29:26 -0000	1.3
  +++ BmpImage.java	21 Feb 2002 09:54:27 -0000	1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: BmpImage.java,v 1.3 2001/07/30 20:29:26 tore Exp $
  + * $Id: BmpImage.java,v 1.4 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -23,20 +23,16 @@
   import org.apache.fop.datatypes.ColorSpace;
   import org.apache.fop.pdf.PDFColor;
   import org.apache.fop.image.analyser.ImageReader;
  +import org.apache.fop.fo.FOUserAgent;
   
   public class BmpImage extends AbstractFopImage {
  -    public BmpImage(URL href) throws FopImageException {
  -        super(href);
  -    }
  -
  -    public BmpImage(URL href,
  -                    ImageReader imgReader) throws FopImageException {
  +    public BmpImage(URL href, ImageReader imgReader) {
           super(href, imgReader);
       }
   
  -    protected void loadImage() throws FopImageException {
  +    protected boolean loadBitmap(FOUserAgent ua) {
           int wpos = 18;
  -        int hpos = 22;    // offset positioning for w and height in  bmp files
  +        int hpos = 22; // offset positioning for w and height in  bmp files
           int[] headermap = new int[54];
           int filepos = 0;
           InputStream file = null;
  @@ -63,8 +59,8 @@
                           if (input == -1)
                               eof = true;
                           else if (count2 >= 0) {
  -                            palette[countr * 3 + count2] = (byte)(input
  -                                                                  & 0xFF);
  +                            palette[countr * 3 + count2] =
  +                              (byte)(input & 0xFF);
                           }
                           count2--;
                           filepos++;
  @@ -73,35 +69,37 @@
                   }
               }
           } catch (IOException e) {
  -            throw new FopImageException("Error while loading image "
  -                                        + this.m_href.toString() + " : "
  -                                        + e.getClass() + " - "
  -                                        + e.getMessage());
  +            ua.getLogger().error("Error while loading image "
  +                                         + this.m_href.toString() + " : "
  +                                         + e.getClass() + " - "
  +                                         + e.getMessage(), e);
  +            return false;
           }
           // gets h & w from headermap
  -        this.m_width = headermap[wpos] + headermap[wpos + 1] * 256
  -                       + headermap[wpos + 2] * 256 * 256
  -                       + headermap[wpos + 3] * 256 * 256 * 256;
  -        this.m_height = headermap[hpos] + headermap[hpos + 1] * 256
  -                        + headermap[hpos + 2] * 256 * 256
  -                        + headermap[hpos + 3] * 256 * 256 * 256;
  -
  -        int imagestart = headermap[10] + headermap[11] * 256
  -                         + headermap[12] * 256 * 256
  -                         + headermap[13] * 256 * 256 * 256;
  +        this.m_width = headermap[wpos] + headermap[wpos + 1] * 256 +
  +                       headermap[wpos + 2] * 256 * 256 +
  +                       headermap[wpos + 3] * 256 * 256 * 256;
  +        this.m_height = headermap[hpos] + headermap[hpos + 1] * 256 +
  +                        headermap[hpos + 2] * 256 * 256 +
  +                        headermap[hpos + 3] * 256 * 256 * 256;
  +
  +        int imagestart = headermap[10] + headermap[11] * 256 +
  +                         headermap[12] * 256 * 256 + headermap[13] * 256 * 256 * 256;
           this.m_bitsPerPixel = headermap[28];
           this.m_colorSpace = new ColorSpace(ColorSpace.DEVICE_RGB);
  -        int bytes;
  +        int bytes = 0;
           if (this.m_bitsPerPixel == 1)
               bytes = (this.m_width + 7) / 8;
           else if (this.m_bitsPerPixel == 24)
               bytes = this.m_width * 3;
           else if (this.m_bitsPerPixel == 4 || this.m_bitsPerPixel == 8)
               bytes = this.m_width / (8 / this.m_bitsPerPixel);
  -        else
  -            throw new FopImageException("Image (" + this.m_href.toString()
  -                                        + ") has " + this.m_bitsPerPixel
  -                                        + " which is not a supported BMP format.");
  +        else {
  +            ua.getLogger().error("Image (" + this.m_href.toString()
  +                                         + ") has " + this.m_bitsPerPixel
  +                                         + " which is not a supported BMP format.");
  +            return false;
  +        }
           if ((bytes & 0x03) != 0) {
               bytes |= 0x03;
               bytes++;
  @@ -120,10 +118,11 @@
                   temp[count++] = input;
               file.close();
           } catch (IOException e) {
  -            throw new FopImageException("Error while loading image "
  -                                        + this.m_href.toString() + " : "
  -                                        + e.getClass() + " - "
  -                                        + e.getMessage());
  +            ua.getLogger().error("Error while loading image "
  +                                         + this.m_href.toString() + " : "
  +                                         + e.getClass() + " - "
  +                                         + e.getMessage(), e);
  +            return false;
           }
   
           for (int i = 0; i < this.m_height; i++) {
  @@ -135,44 +134,46 @@
                   if (this.m_bitsPerPixel == 24 && x < this.m_width) {
                       int countr = 2;
                       do {
  -                        this.m_bitmaps[3 * (i * this.m_width + x) + countr] =
  -                            (byte)(temp[(this.m_height - i - 1) * bytes + j]
  -                                   & 0xFF);
  +                        this.m_bitmaps[3 * (i * this.m_width + x) +
  +                                       countr] =
  +                                         (byte)(temp[(this.m_height - i - 1) *
  +                                                     bytes + j] & 0xFF);
                           j++;
  -                    } while (--countr >= 0);
  +                    } while (--countr >= 0)
  +                        ;
                       x++;
                   } else if (this.m_bitsPerPixel == 1) {
  -                    for (int countr = 0; countr < 8 && x < this.m_width;
  -                            countr++) {
  +                    for (int countr = 0;
  +                            countr < 8 && x < this.m_width; countr++) {
                           if ((p & 0x80) != 0) {
  -                            this.m_bitmaps[3 * (i * this.m_width + x)] =
  -                                (byte)0xFF;
  -                            this.m_bitmaps[3 * (i * this.m_width + x) + 1] =
  -                                (byte)0xFF;
  -                            this.m_bitmaps[3 * (i * this.m_width + x) + 2] =
  -                                (byte)0xFF;
  +                            this.m_bitmaps[3 *
  +                                           (i * this.m_width + x)] = (byte) 0xFF;
  +                            this.m_bitmaps[3 * (i * this.m_width + x) +
  +                                           1] = (byte) 0xFF;
  +                            this.m_bitmaps[3 * (i * this.m_width + x) +
  +                                           2] = (byte) 0xFF;
                           } else {
  -                            this.m_bitmaps[3 * (i * this.m_width + x)] =
  -                                (byte)0;
  -                            this.m_bitmaps[3 * (i * this.m_width + x) + 1] =
  -                                (byte)0;
  -                            this.m_bitmaps[3 * (i * this.m_width + x) + 2] =
  -                                (byte)0;
  +                            this.m_bitmaps[3 *
  +                                           (i * this.m_width + x)] = (byte) 0;
  +                            this.m_bitmaps[3 * (i * this.m_width + x) +
  +                                           1] = (byte) 0;
  +                            this.m_bitmaps[3 * (i * this.m_width + x) +
  +                                           2] = (byte) 0;
                           }
                           p <<= 1;
                           x++;
                       }
                       j++;
                   } else if (this.m_bitsPerPixel == 4) {
  -                    for (int countr = 0; countr < 2 && x < this.m_width;
  -                            countr++) {
  +                    for (int countr = 0;
  +                            countr < 2 && x < this.m_width; countr++) {
                           int pal = ((p & 0xF0) >> 4) * 3;
                           this.m_bitmaps[3 * (i * this.m_width + x)] =
  -                            palette[pal];
  -                        this.m_bitmaps[3 * (i * this.m_width + x) + 1] =
  -                            palette[pal + 1];
  -                        this.m_bitmaps[3 * (i * this.m_width + x) + 2] =
  -                            palette[pal + 2];
  +                          palette[pal];
  +                        this.m_bitmaps[3 * (i * this.m_width + x) +
  +                                       1] = palette[pal + 1];
  +                        this.m_bitmaps[3 * (i * this.m_width + x) +
  +                                       2] = palette[pal + 2];
                           p <<= 4;
                           x++;
                       }
  @@ -181,11 +182,11 @@
                       if (x < this.m_width) {
                           p *= 3;
                           this.m_bitmaps[3 * (i * this.m_width + x)] =
  -                            palette[p];
  -                        this.m_bitmaps[3 * (i * this.m_width + x) + 1] =
  -                            palette[p + 1];
  -                        this.m_bitmaps[3 * (i * this.m_width + x) + 2] =
  -                            palette[p + 2];
  +                          palette[p];
  +                        this.m_bitmaps[3 * (i * this.m_width + x) +
  +                                       1] = palette[p + 1];
  +                        this.m_bitmaps[3 * (i * this.m_width + x) +
  +                                       2] = palette[p + 2];
                           j++;
                           x++;
                       } else
  @@ -199,6 +200,8 @@
           // m_bitsPerPixel to 8. If I do not do this Acrobat is unable to read the resultant PDF,
           // so we will hardcode this...
           this.m_bitsPerPixel = 8;
  +
  +        return true;
       }
   
   }
  
  
  
  1.4       +22 -32    xml-fop/src/org/apache/fop/image/EPSImage.java
  
  Index: EPSImage.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/EPSImage.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EPSImage.java	22 Nov 2001 08:30:36 -0000	1.3
  +++ EPSImage.java	21 Feb 2002 09:54:27 -0000	1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: EPSImage.java,v 1.3 2001/11/22 08:30:36 keiron Exp $
  + * $Id: EPSImage.java,v 1.4 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -31,64 +31,54 @@
   public class EPSImage extends AbstractFopImage {
       private String docName;
       private int[] bbox;
  -    
  +
       private byte[] epsImage = null;
       private EPSReader epsReader = null;
  -    
  -	/**
  -         * Initialize docName and bounding box
  -         */
  +
  +    /**
  +     * Initialize docName and bounding box
  +     */
       private void init(URL href) {
           bbox = new int[4];
           bbox[0] = 0;
           bbox[1] = 0;
           bbox[2] = 0;
           bbox[3] = 0;
  -        
  +
           docName = href.toString();
       }
  -    
  -	/**
  -         * Return the name of the eps
  -         */
  +
  +    /**
  +     * Return the name of the eps
  +     */
       public String getDocName() {
           return docName;
       }
  -    
  -	/**
  -         * Return the bounding box
  -         */
  +
  +    /**
  +     * Return the bounding box
  +     */
       public int[] getBBox() {
           return bbox;
       }
  -    
  -    public EPSImage(URL href) throws FopImageException {
  -        super(href);
  -        init(href);
  -    }
  -    
  -    public EPSImage(URL href,
  -                    ImageReader imgReader) throws FopImageException {
  +
  +    public EPSImage(URL href, ImageReader imgReader) {
           super(href, imgReader);
           init(href);
           if (imgReader instanceof EPSReader) {
  -            EPSReader eimgReader = (EPSReader)imgReader;
  +            EPSReader eimgReader = (EPSReader) imgReader;
               epsReader = eimgReader;
               epsImage = eimgReader.getEpsFile();
               m_bitmaps = epsImage;
               bbox = eimgReader.getBBox();
           }
       }
  -    
  -    protected void loadImage() throws FopImageException {
  -            // Image is loaded in reader
  -    }
  -    
  -    public byte[] getEPSImage() throws FopImageException {
  -       	if (epsImage == null) {
  +
  +    public byte[] getEPSImage() {
  +        if (epsImage == null) {
               //log.error("ERROR LOADING EXTERNAL EPS");
           }
           return epsImage;
       }
  -    
  +
   }
  
  
  
  1.9       +27 -24    xml-fop/src/org/apache/fop/image/FopImage.java
  
  Index: FopImage.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/FopImage.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- FopImage.java	30 Jul 2001 20:29:26 -0000	1.8
  +++ FopImage.java	21 Feb 2002 09:54:27 -0000	1.9
  @@ -1,5 +1,5 @@
   /*
  - * $Id: FopImage.java,v 1.8 2001/07/30 20:29:26 tore Exp $
  + * $Id: FopImage.java,v 1.9 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -13,50 +13,53 @@
   import org.apache.fop.datatypes.ColorSpace;
   import org.apache.fop.pdf.PDFColor;
   import org.apache.fop.pdf.PDFFilter;
  +import org.apache.fop.fo.FOUserAgent;
   
   public interface FopImage {
  -    // Init the object.
  -    // If href protocol isn't file://, can load the entire image
  -    // and keep it in memory.
  -    // Should cache the input stream, and load data when needed.
  -    // public FopImage(URL href) throws FopImageException;
  -
  -    // Get image general properties.
  -    // Methods throw exception because they can retrieve data
  -    // when needed.
  +    public static final int DIMENSIONS = 1;
  +    public static final int ORIGINAL_DATA = 2;
  +    public static final int BITMAP = 4;
  +
  +    public String getMimeType();
  +
  +    /**
  +     * Load particular inforamtion for this image
  +     * This must be called before attempting to get
  +     * the information.
  +     * @return boolean true if the information could be loaded
  +     */
  +    public boolean load(int type, FOUserAgent ua);
   
       // Ressource location
       public String getURL();
   
       // image size
  -    public int getWidth() throws FopImageException;
  -    public int getHeight() throws FopImageException;
  +    public int getWidth();
  +    public int getHeight();
   
       // DeviceGray, DeviceRGB, or DeviceCMYK
  -    public ColorSpace getColorSpace() throws FopImageException;
  +    public ColorSpace getColorSpace();
   
       // bits per pixel
  -    public int getBitsPerPixel() throws FopImageException;
  +    public int getBitsPerPixel();
   
       // For transparent images
  -    public boolean isTransparent() throws FopImageException;
  -    public PDFColor getTransparentColor() throws FopImageException;
  +    public boolean isTransparent();
  +    public PDFColor getTransparentColor();
   
       // get the image bytes, and bytes properties
   
       // get uncompressed image bytes
  -    public byte[] getBitmaps() throws FopImageException;
  +    public byte[] getBitmaps();
       // width * (bitsPerPixel / 8) * height, no ?
  -    public int getBitmapsSize() throws FopImageException;
  +    public int getBitmapsSize();
   
       // get compressed image bytes
       // I don't know if we really need it, nor if it
       // should be changed...
  -    public byte[] getRessourceBytes() throws FopImageException;
  -    public int getRessourceBytesSize() throws FopImageException;
  +    public byte[] getRessourceBytes();
  +    public int getRessourceBytesSize();
       // return null if no corresponding PDFFilter
  -    public PDFFilter getPDFFilter() throws FopImageException;
  -
  -    // release memory
  -    public void close();
  +    public PDFFilter getPDFFilter();
   }
  +
  
  
  
  1.6       +8 -9      xml-fop/src/org/apache/fop/image/FopImageConsumer.java
  
  Index: FopImageConsumer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/FopImageConsumer.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- FopImageConsumer.java	22 Nov 2001 07:42:05 -0000	1.5
  +++ FopImageConsumer.java	21 Feb 2002 09:54:27 -0000	1.6
  @@ -1,5 +1,5 @@
   /*
  - * $Id: FopImageConsumer.java,v 1.5 2001/11/22 07:42:05 keiron Exp $
  + * $Id: FopImageConsumer.java,v 1.6 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -56,8 +56,8 @@
            */
           synchronized (this.imageStatus) {
               // Need to stop status if image done
  -            if (imageStatus.intValue() != ImageConsumer.STATICIMAGEDONE
  -                && imageStatus.intValue() != ImageConsumer.SINGLEFRAMEDONE)
  +            if (imageStatus.intValue() != ImageConsumer.STATICIMAGEDONE &&
  +                    imageStatus.intValue() != ImageConsumer.SINGLEFRAMEDONE)
                   this.imageStatus = new Integer(status);
           }
       }
  @@ -96,8 +96,8 @@
               if (this.imageStatus.intValue() == ImageConsumer.IMAGEERROR)
                   throw new Exception("Image error");
   
  -            if (imageStatus.intValue() == ImageConsumer.STATICIMAGEDONE
  -                || imageStatus.intValue() == ImageConsumer.SINGLEFRAMEDONE)
  +            if (imageStatus.intValue() == ImageConsumer.STATICIMAGEDONE ||
  +                    imageStatus.intValue() == ImageConsumer.SINGLEFRAMEDONE)
                   return true;
   
               return false;
  @@ -119,8 +119,7 @@
       public int[] getImage() throws Exception {
           int tmpMap[] = new int[this.width * this.height];
           PixelGrabber pg = new PixelGrabber(this.ip, 0, 0, this.width,
  -                                           this.height, tmpMap, 0,
  -                                           this.width);
  +                                           this.height, tmpMap, 0, this.width);
           pg.setDimensions(this.width, this.height);
           pg.setColorModel(this.cm);
           pg.setHints(this.hints);
  @@ -128,8 +127,8 @@
           try {
               pg.grabPixels();
           } catch (InterruptedException intex) {
  -            throw new Exception("Image grabbing interrupted : "
  -                                + intex.getMessage());
  +            throw new Exception("Image grabbing interrupted : " +
  +                                intex.getMessage());
           }
           return tmpMap;
       }
  
  
  
  1.2       +41 -41    xml-fop/src/org/apache/fop/image/GifImage.java
  
  Index: GifImage.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/GifImage.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- GifImage.java	18 Sep 2001 08:17:07 -0000	1.1
  +++ GifImage.java	21 Feb 2002 09:54:27 -0000	1.2
  @@ -1,5 +1,5 @@
   /*
  - * $Id: GifImage.java,v 1.1 2001/09/18 08:17:07 keiron Exp $
  + * $Id: GifImage.java,v 1.2 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -17,6 +17,7 @@
   import org.apache.fop.datatypes.ColorSpace;
   import org.apache.fop.pdf.PDFColor;
   import org.apache.fop.image.analyser.ImageReader;
  +import org.apache.fop.fo.FOUserAgent;
   
   /**
    * FopImage object for GIF images, using Java native classes.
  @@ -26,19 +27,14 @@
    * @see FopImage
    */
   public class GifImage extends AbstractFopImage {
  -    public GifImage(URL href) throws FopImageException {
  -        super(href);
  -    }
  -
  -    public GifImage(URL href,
  -                        ImageReader imgReader) throws FopImageException {
  +    public GifImage(URL href, ImageReader imgReader) {
           super(href, imgReader);
       }
   
  -    protected void loadImage() throws FopImageException {
  +    protected boolean loadBitmap(FOUserAgent ua) {
           int[] tmpMap = null;
           try {
  -            ImageProducer ip = (ImageProducer)this.m_href.getContent();
  +            ImageProducer ip = (ImageProducer) this.m_href.getContent();
               FopImageConsumer consumer = new FopImageConsumer(ip);
               ip.startProduction(consumer);
   
  @@ -54,8 +50,9 @@
               try {
                   tmpMap = consumer.getImage();
               } catch (Exception ex) {
  -                throw new FopImageException("Image grabbing interrupted : "
  -                                            + ex.getMessage());
  +                ua.getLogger().error("Image grabbing interrupted : "
  +                                             + ex.getMessage(), ex);
  +                return false;
               }
   
               ColorModel cm = consumer.getColorModel();
  @@ -63,34 +60,34 @@
               // this.m_bitsPerPixel = cm.getPixelSize();
               this.m_colorSpace = new ColorSpace(ColorSpace.DEVICE_RGB);
               if (cm.hasAlpha()) {
  -                int transparencyType =
  -                    cm.getTransparency();    // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT
  +                int transparencyType = cm.getTransparency(); // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT
                   if (transparencyType == java.awt.Transparency.OPAQUE) {
                       this.m_isTransparent = false;
  -                } else if (transparencyType
  -                           == java.awt.Transparency.BITMASK) {
  +                } else if (transparencyType ==
  +                    java.awt.Transparency.BITMASK) {
                       if (cm instanceof IndexColorModel) {
                           this.m_isTransparent = false;
  -                        byte[] alphas =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        byte[] reds =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        byte[] greens =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        byte[] blues =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        ((IndexColorModel)cm).getAlphas(alphas);
  -                        ((IndexColorModel)cm).getReds(reds);
  -                        ((IndexColorModel)cm).getGreens(greens);
  -                        ((IndexColorModel)cm).getBlues(blues);
  +                        byte[] alphas = new byte[
  +                                          ((IndexColorModel) cm).getMapSize()];
  +                        byte[] reds = new byte[
  +                                        ((IndexColorModel) cm).getMapSize()];
  +                        byte[] greens = new byte[
  +                                          ((IndexColorModel) cm).getMapSize()];
  +                        byte[] blues = new byte[
  +                                         ((IndexColorModel) cm).getMapSize()];
  +                        ((IndexColorModel) cm).getAlphas(alphas);
  +                        ((IndexColorModel) cm).getReds(reds);
  +                        ((IndexColorModel) cm).getGreens(greens);
  +                        ((IndexColorModel) cm).getBlues(blues);
                           for (int i = 0;
  -                                i < ((IndexColorModel)cm).getMapSize(); i++) {
  +                                i < ((IndexColorModel) cm).getMapSize();
  +                                i++) {
                               if ((alphas[i] & 0xFF) == 0) {
                                   this.m_isTransparent = true;
  -                                this.m_transparentColor =
  -                                    new PDFColor((int)(reds[i] & 0xFF),
  -                                                 (int)(greens[i] & 0xFF),
  -                                                 (int)(blues[i] & 0xFF));
  +                                this.m_transparentColor = new PDFColor(
  +                                                            (int)(reds[i] & 0xFF),
  +                                                            (int)(greens[i] & 0xFF),
  +                                                            (int)(blues[i] & 0xFF));
                                   break;
                               }
                           }
  @@ -116,10 +113,11 @@
                   this.m_isTransparent = false;
               }
           } catch (Exception ex) {
  -            throw new FopImageException("Error while loading image "
  -                                        + this.m_href.toString() + " : "
  -                                        + ex.getClass() + " - "
  -                                        + ex.getMessage());
  +            ua.getLogger().error("Error while loading image "
  +                                         + this.m_href.toString() + " : "
  +                                         + ex.getClass() + " - "
  +                                         + ex.getMessage(), ex);
  +            return false;
           }
   
           // Should take care of the ColorSpace and bitsPerPixel
  @@ -131,13 +129,15 @@
                   int r = (p >> 16) & 0xFF;
                   int g = (p >> 8) & 0xFF;
                   int b = (p) & 0xFF;
  -                this.m_bitmaps[3 * (i * this.m_width + j)] = (byte)(r & 0xFF);
  -                this.m_bitmaps[3 * (i * this.m_width + j) + 1] = (byte)(g
  -                        & 0xFF);
  -                this.m_bitmaps[3 * (i * this.m_width + j) + 2] = (byte)(b
  -                        & 0xFF);
  +                this.m_bitmaps[3 * (i * this.m_width + j)] =
  +                  (byte)(r & 0xFF);
  +                this.m_bitmaps[3 * (i * this.m_width + j) + 1] =
  +                  (byte)(g & 0xFF);
  +                this.m_bitmaps[3 * (i * this.m_width + j) + 2] =
  +                  (byte)(b & 0xFF);
               }
           }
  +        return true;
       }
   
   }
  
  
  
  1.12      +4 -7      xml-fop/src/org/apache/fop/image/ImageArea.java
  
  Index: ImageArea.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/ImageArea.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- ImageArea.java	9 Nov 2001 11:32:41 -0000	1.11
  +++ ImageArea.java	21 Feb 2002 09:54:27 -0000	1.12
  @@ -1,5 +1,5 @@
   /*
  - * $Id: ImageArea.java,v 1.11 2001/11/09 11:32:41 keiron Exp $
  + * $Id: ImageArea.java,v 1.12 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -13,9 +13,6 @@
   
   import org.apache.fop.render.Renderer;
   
  -import java.util.Vector;
  -import java.util.Enumeration;
  -
   public class ImageArea extends InlineArea {
   
       protected int xOffset = 0;
  @@ -24,9 +21,9 @@
       protected FopImage image;
   
   
  -    public ImageArea(FontState fontState, FopImage img, int AllocationWidth,
  -                     int width, int height, int startIndent, int endIndent,
  -                     int align) {
  +    public ImageArea(FontState fontState, FopImage img,
  +                     int AllocationWidth, int width, int height,
  +                     int startIndent, int endIndent, int align) {
           super(fontState, width, 0, 0, 0);
           this.currentHeight = height;
           this.contentRectangleWidth = width;
  
  
  
  1.3       +41 -42    xml-fop/src/org/apache/fop/image/JAIImage.java
  
  Index: JAIImage.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/JAIImage.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JAIImage.java	30 Jul 2001 20:29:26 -0000	1.2
  +++ JAIImage.java	21 Feb 2002 09:54:27 -0000	1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: JAIImage.java,v 1.2 2001/07/30 20:29:26 tore Exp $
  + * $Id: JAIImage.java,v 1.3 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -34,16 +34,15 @@
    * @see FopImage
    */
   public class JAIImage extends AbstractFopImage {
  -    public JAIImage(URL href) throws FopImageException {
  +    public JAIImage(URL href) {
           super(href);
       }
   
  -    public JAIImage(URL href,
  -                    ImageReader imgReader) throws FopImageException {
  +    public JAIImage(URL href, ImageReader imgReader) {
           super(href, imgReader);
       }
   
  -    protected void loadImage() throws FopImageException {
  +    protected void loadImage() {
           try {
               InputStream inputStream = this.m_href.openStream();
               /*
  @@ -51,7 +50,7 @@
                * inputStream.reset();
                */
               com.sun.media.jai.codec.FileCacheSeekableStream seekableInput =
  -                new FileCacheSeekableStream(inputStream);
  +              new FileCacheSeekableStream(inputStream);
               RenderedOp imageOp = JAI.create("stream", seekableInput);
   
               this.m_height = imageOp.getHeight();
  @@ -64,38 +63,37 @@
   
               BufferedImage imageData = imageOp.getAsBufferedImage();
               int[] tmpMap = imageData.getRGB(0, 0, this.m_width,
  -                                            this.m_height, null, 0,
  -                                            this.m_width);
  +                                            this.m_height, null, 0, this.m_width);
   
               if (cm.hasAlpha()) {
  -                int transparencyType =
  -                    cm.getTransparency();    // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT
  +                int transparencyType = cm.getTransparency(); // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT
                   if (transparencyType == java.awt.Transparency.OPAQUE) {
                       this.m_isTransparent = false;
  -                } else if (transparencyType
  -                           == java.awt.Transparency.BITMASK) {
  +                } else if (transparencyType ==
  +                    java.awt.Transparency.BITMASK) {
                       if (cm instanceof IndexColorModel) {
                           this.m_isTransparent = false;
  -                        byte[] alphas =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        byte[] reds =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        byte[] greens =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        byte[] blues =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        ((IndexColorModel)cm).getAlphas(alphas);
  -                        ((IndexColorModel)cm).getReds(reds);
  -                        ((IndexColorModel)cm).getGreens(greens);
  -                        ((IndexColorModel)cm).getBlues(blues);
  +                        byte[] alphas = new byte[
  +                                          ((IndexColorModel) cm).getMapSize()];
  +                        byte[] reds = new byte[
  +                                        ((IndexColorModel) cm).getMapSize()];
  +                        byte[] greens = new byte[
  +                                          ((IndexColorModel) cm).getMapSize()];
  +                        byte[] blues = new byte[
  +                                         ((IndexColorModel) cm).getMapSize()];
  +                        ((IndexColorModel) cm).getAlphas(alphas);
  +                        ((IndexColorModel) cm).getReds(reds);
  +                        ((IndexColorModel) cm).getGreens(greens);
  +                        ((IndexColorModel) cm).getBlues(blues);
                           for (int i = 0;
  -                                i < ((IndexColorModel)cm).getMapSize(); i++) {
  +                                i < ((IndexColorModel) cm).getMapSize();
  +                                i++) {
                               if ((alphas[i] & 0xFF) == 0) {
                                   this.m_isTransparent = true;
  -                                this.m_transparentColor =
  -                                    new PDFColor((int)(reds[i] & 0xFF),
  -                                                 (int)(greens[i] & 0xFF),
  -                                                 (int)(blues[i] & 0xFF));
  +                                this.m_transparentColor = new PDFColor(
  +                                                            (int)(reds[i] & 0xFF),
  +                                                            (int)(greens[i] & 0xFF),
  +                                                            (int)(blues[i] & 0xFF));
                                   break;
                               }
                           }
  @@ -127,24 +125,25 @@
               for (int i = 0; i < this.m_height; i++) {
                   for (int j = 0; j < this.m_width; j++) {
                       int p = tmpMap[i * this.m_width + j];
  -                    int r = (p >> 16) & 0xFF;
  -                    int g = (p >> 8) & 0xFF;
  +                    int r = (p > > 16) & 0xFF;
  +                    int g = (p > > 8) & 0xFF;
                       int b = (p) & 0xFF;
  -                    this.m_bitmaps[3 * (i * this.m_width + j)] = (byte)(r
  -                            & 0xFF);
  -                    this.m_bitmaps[3 * (i * this.m_width + j) + 1] = (byte)(g
  -                            & 0xFF);
  -                    this.m_bitmaps[3 * (i * this.m_width + j) + 2] = (byte)(b
  -                            & 0xFF);
  +                    this.m_bitmaps[3 * (i * this.m_width + j)] =
  +                      (byte)(r & 0xFF);
  +                    this.m_bitmaps[3 * (i * this.m_width + j) + 1] =
  +                      (byte)(g & 0xFF);
  +                    this.m_bitmaps[3 * (i * this.m_width + j) + 2] =
  +                      (byte)(b & 0xFF);
                   }
               }
   
  -        } catch (Exception ex) {
  -            throw new FopImageException("Error while loading image "
  -                                        + this.m_href.toString() + " : "
  -                                        + ex.getClass() + " - "
  -                                        + ex.getMessage());
           }
  +        catch (Exception ex) {
  +            /*throw new FopImageException("Error while loading image "
  +                                         + this.m_href.toString() + " : "
  +                                         + ex.getClass() + " - "
  +                                         + ex.getMessage());
  +             */}
       }
   
   }
  
  
  
  1.9       +44 -53    xml-fop/src/org/apache/fop/image/JimiImage.java
  
  Index: JimiImage.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/JimiImage.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- JimiImage.java	30 Jul 2001 20:29:26 -0000	1.8
  +++ JimiImage.java	21 Feb 2002 09:54:27 -0000	1.9
  @@ -1,5 +1,5 @@
   /*
  - * $Id: JimiImage.java,v 1.8 2001/07/30 20:29:26 tore Exp $
  + * $Id: JimiImage.java,v 1.9 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -29,31 +29,21 @@
    * @see FopImage
    */
   public class JimiImage extends AbstractFopImage {
  -    public JimiImage(URL href) throws FopImageException {
  -        super(href);
  -        try {
  -            Class c = Class.forName("com.sun.jimi.core.Jimi");
  -        } catch (ClassNotFoundException e) {
  -            throw new FopImageException("Jimi image library not available");
  -        }
  -    }
  -
  -    public JimiImage(URL href,
  -                     ImageReader imgReader) throws FopImageException {
  +    public JimiImage(URL href, ImageReader imgReader) {
           super(href, imgReader);
           try {
               Class c = Class.forName("com.sun.jimi.core.Jimi");
           } catch (ClassNotFoundException e) {
  -            throw new FopImageException("Jimi image library not available");
  +            //throw new FopImageException("Jimi image library not available");
           }
       }
   
  -    protected void loadImage() throws FopImageException {
  +    protected void loadImage() {
           int[] tmpMap = null;
           try {
  -            ImageProducer ip = Jimi.getImageProducer(this.m_href.openStream(),
  -                                                     Jimi.SYNCHRONOUS
  -                                                     | Jimi.IN_MEMORY);
  +            ImageProducer ip =
  +              Jimi.getImageProducer(this.m_href.openStream(),
  +                                    Jimi.SYNCHRONOUS | Jimi.IN_MEMORY);
               FopImageConsumer consumer = new FopImageConsumer(ip);
               ip.startProduction(consumer);
   
  @@ -66,43 +56,43 @@
               try {
                   tmpMap = consumer.getImage();
               } catch (Exception ex) {
  -                throw new FopImageException("Image grabbing interrupted : "
  -                                            + ex.getMessage());
  -            }
  +                /*throw new FopImageException("Image grabbing interrupted : "
  +                                             + ex.getMessage());
  +                 */}
   
               ColorModel cm = consumer.getColorModel();
               this.m_bitsPerPixel = 8;
               // this.m_bitsPerPixel = cm.getPixelSize();
               this.m_colorSpace = new ColorSpace(ColorSpace.DEVICE_RGB);
               if (cm.hasAlpha()) {
  -                int transparencyType =
  -                    cm.getTransparency();    // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT
  +                int transparencyType = cm.getTransparency(); // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT
                   if (transparencyType == java.awt.Transparency.OPAQUE) {
                       this.m_isTransparent = false;
  -                } else if (transparencyType
  -                           == java.awt.Transparency.BITMASK) {
  +                } else if (transparencyType ==
  +                    java.awt.Transparency.BITMASK) {
                       if (cm instanceof IndexColorModel) {
                           this.m_isTransparent = false;
  -                        byte[] alphas =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        byte[] reds =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        byte[] greens =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        byte[] blues =
  -                            new byte[((IndexColorModel)cm).getMapSize()];
  -                        ((IndexColorModel)cm).getAlphas(alphas);
  -                        ((IndexColorModel)cm).getReds(reds);
  -                        ((IndexColorModel)cm).getGreens(greens);
  -                        ((IndexColorModel)cm).getBlues(blues);
  +                        byte[] alphas = new byte[
  +                                          ((IndexColorModel) cm).getMapSize()];
  +                        byte[] reds = new byte[
  +                                        ((IndexColorModel) cm).getMapSize()];
  +                        byte[] greens = new byte[
  +                                          ((IndexColorModel) cm).getMapSize()];
  +                        byte[] blues = new byte[
  +                                         ((IndexColorModel) cm).getMapSize()];
  +                        ((IndexColorModel) cm).getAlphas(alphas);
  +                        ((IndexColorModel) cm).getReds(reds);
  +                        ((IndexColorModel) cm).getGreens(greens);
  +                        ((IndexColorModel) cm).getBlues(blues);
                           for (int i = 0;
  -                                i < ((IndexColorModel)cm).getMapSize(); i++) {
  +                                i < ((IndexColorModel) cm).getMapSize();
  +                                i++) {
                               if ((alphas[i] & 0xFF) == 0) {
                                   this.m_isTransparent = true;
  -                                this.m_transparentColor =
  -                                    new PDFColor((int)(reds[i] & 0xFF),
  -                                                 (int)(greens[i] & 0xFF),
  -                                                 (int)(blues[i] & 0xFF));
  +                                this.m_transparentColor = new PDFColor(
  +                                                            (int)(reds[i] & 0xFF),
  +                                                            (int)(greens[i] & 0xFF),
  +                                                            (int)(blues[i] & 0xFF));
                                   break;
                               }
                           }
  @@ -128,11 +118,11 @@
                   this.m_isTransparent = false;
               }
           } catch (Exception ex) {
  -            throw new FopImageException("Error while loading image "
  -                                        + this.m_href.toString() + " : "
  -                                        + ex.getClass() + " - "
  -                                        + ex.getMessage());
  -        }
  +            /*throw new FopImageException("Error while loading image "
  +                                         + this.m_href.toString() + " : "
  +                                         + ex.getClass() + " - "
  +                                         + ex.getMessage());
  +             */}
   
   
           // Should take care of the ColorSpace and bitsPerPixel
  @@ -141,14 +131,15 @@
           for (int i = 0; i < this.m_height; i++) {
               for (int j = 0; j < this.m_width; j++) {
                   int p = tmpMap[i * this.m_width + j];
  -                int r = (p >> 16) & 0xFF;
  -                int g = (p >> 8) & 0xFF;
  +                int r = (p > > 16) & 0xFF;
  +                int g = (p > > 8) & 0xFF;
                   int b = (p) & 0xFF;
  -                this.m_bitmaps[3 * (i * this.m_width + j)] = (byte)(r & 0xFF);
  -                this.m_bitmaps[3 * (i * this.m_width + j) + 1] = (byte)(g
  -                        & 0xFF);
  -                this.m_bitmaps[3 * (i * this.m_width + j) + 2] = (byte)(b
  -                        & 0xFF);
  +                this.m_bitmaps[3 * (i * this.m_width + j)] =
  +                  (byte)(r & 0xFF);
  +                this.m_bitmaps[3 * (i * this.m_width + j) + 1] =
  +                  (byte)(g & 0xFF);
  +                this.m_bitmaps[3 * (i * this.m_width + j) + 2] =
  +                  (byte)(b & 0xFF);
               }
           }
       }
  
  
  
  1.3       +65 -58    xml-fop/src/org/apache/fop/image/JpegImage.java
  
  Index: JpegImage.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/JpegImage.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JpegImage.java	16 Nov 2001 19:36:40 -0000	1.2
  +++ JpegImage.java	21 Feb 2002 09:54:27 -0000	1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: JpegImage.java,v 1.2 2001/11/16 19:36:40 tore Exp $
  + * $Id: JpegImage.java,v 1.3 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -20,6 +20,7 @@
   import org.apache.fop.pdf.PDFColor;
   import org.apache.fop.pdf.DCTFilter;
   import org.apache.fop.image.analyser.ImageReader;
  +import org.apache.fop.fo.FOUserAgent;
   
   /**
    * FopImage object for JPEG images, Using Java native classes.
  @@ -30,17 +31,12 @@
   public class JpegImage extends AbstractFopImage {
       boolean found_icc_profile = false;
       boolean found_dimensions = false;
  -    
  -    public JpegImage(URL href) throws FopImageException {
  -        super(href);
  -    }
  -    
  -    public JpegImage(URL href,
  -                     ImageReader imgReader) throws FopImageException {
  +
  +    public JpegImage(URL href, ImageReader imgReader) {
           super(href, imgReader);
       }
  -    
  -    protected void loadImage() throws FopImageException {
  +
  +    protected boolean loadBitmap(FOUserAgent ua) {
           ByteArrayOutputStream baos = new ByteArrayOutputStream();
           ByteArrayOutputStream iccStream = new ByteArrayOutputStream();
           InputStream inStream;
  @@ -49,53 +45,57 @@
           int bytes_read;
           int index = 0;
           boolean cont = true;
  -        
  +
           this.m_compressionType = new DCTFilter();
           this.m_compressionType.setApplied(true);
  -        
  +
           try {
               inStream = this.m_href.openStream();
  -            
  +
               while ((bytes_read = inStream.read(readBuf)) != -1) {
                   baos.write(readBuf, 0, bytes_read);
               }
           } catch (java.io.IOException ex) {
  -            throw new FopImageException("Error while loading image " +
  -                                        this.m_href.toString() + " : " + ex.getClass() +
  -                                        " - " + ex.getMessage());
  +            ua.getLogger().error("Error while loading image " +
  +                                         this.m_href.toString() + " : " + ex.getClass() +
  +                                         " - " + ex.getMessage(), ex);
  +            return false;
           }
  -        
  +
           this.m_bitmaps = baos.toByteArray();
           this.m_bitsPerPixel = 8;
           this.m_isTransparent = false;
  -        
  +
           if (this.m_bitmaps.length > (index + 2) &&
  -            uByte(this.m_bitmaps[index]) == 255 &&
  -            uByte(this.m_bitmaps[index + 1]) == 216) {
  +                uByte(this.m_bitmaps[index]) == 255 &&
  +                uByte(this.m_bitmaps[index + 1]) == 216) {
               index += 2;
  -            
  +
               while (index < this.m_bitmaps.length && cont) {
  -                    //check to be sure this is the begining of a header
  +                //check to be sure this is the begining of a header
                   if (this.m_bitmaps.length > (index + 2) &&
  -                    uByte(this.m_bitmaps[index]) == 255) {
  -                    
  -                        //192 or 194 are the header bytes that contain the jpeg width height and color depth.
  +                        uByte(this.m_bitmaps[index]) == 255) {
  +
  +                    //192 or 194 are the header bytes that contain the jpeg width height and color depth.
                       if (uByte(this.m_bitmaps[index + 1]) == 192 ||
  -                        uByte(this.m_bitmaps[index + 1]) == 194) {
  -                        
  +                            uByte(this.m_bitmaps[index + 1]) == 194) {
  +
                           this.m_height = calcBytes(this.m_bitmaps[index + 5],
                                                     this.m_bitmaps[index + 6]);
                           this.m_width = calcBytes(this.m_bitmaps[index + 7],
                                                    this.m_bitmaps[index + 8]);
  -                        
  +
                           if (this.m_bitmaps[index + 9] == 1) {
  -                            this.m_colorSpace.setColorSpace(ColorSpace.DEVICE_GRAY);
  +                            this.m_colorSpace.setColorSpace(
  +                              ColorSpace.DEVICE_GRAY);
                           } else if (this.m_bitmaps[index + 9] == 3) {
  -                            this.m_colorSpace.setColorSpace(ColorSpace.DEVICE_RGB);
  +                            this.m_colorSpace.setColorSpace(
  +                              ColorSpace.DEVICE_RGB);
                           } else if (this.m_bitmaps[index + 9] == 4) {
  -                            this.m_colorSpace.setColorSpace(ColorSpace.DEVICE_CMYK);
  +                            this.m_colorSpace.setColorSpace(
  +                              ColorSpace.DEVICE_CMYK);
                           }
  -                        
  +
                           found_dimensions = true;
                           if (found_icc_profile) {
                               cont = false;
  @@ -103,57 +103,64 @@
                           }
                           index += calcBytes(this.m_bitmaps[index + 2],
                                              this.m_bitmaps[index + 3]) + 2;
  -                        
  -                    } else if (uByte(this.m_bitmaps[index+1]) == 226 &&
  -                               this.m_bitmaps.length > (index+60)) {
  -                            // Check if ICC profile
  +
  +                    } else if (uByte(this.m_bitmaps[index + 1]) ==
  +                        226 && this.m_bitmaps.length > (index + 60)) {
  +                        // Check if ICC profile
                           byte[] icc_string = new byte[11];
  -                        System.arraycopy(this.m_bitmaps, index+4, icc_string, 0, 11);
  -                        
  -                        if ("ICC_PROFILE".equals(new String(icc_string))){
  -                            int chunkSize = calcBytes(this.m_bitmaps[index + 2],
  -                                                      this.m_bitmaps[index + 3]) + 2;
  -                            
  +                        System.arraycopy(this.m_bitmaps, index + 4,
  +                                         icc_string, 0, 11);
  +
  +                        if ("ICC_PROFILE".equals(new String(icc_string))) {
  +                            int chunkSize = calcBytes(
  +                                              this.m_bitmaps[index + 2],
  +                                              this.m_bitmaps[index + 3]) + 2;
  +
                               if (iccStream.size() == 0)
  -                                iccStream.write(this.m_bitmaps, index+18,
  -                                                chunkSize - 20);
  +                                iccStream.write(this.m_bitmaps,
  +                                                index + 18, chunkSize - 20);
                               else
  -                                iccStream.write(this.m_bitmaps, index+16,
  -                                                chunkSize - 18);
  -                            
  +                                iccStream.write(this.m_bitmaps,
  +                                                index + 16, chunkSize - 18);
  +
                           }
  -                        
  +
                           index += calcBytes(this.m_bitmaps[index + 2],
                                              this.m_bitmaps[index + 3]) + 2;
                       } else {
                           index += calcBytes(this.m_bitmaps[index + 2],
                                              this.m_bitmaps[index + 3]) + 2;
                       }
  -                    
  +
                   } else {
                       cont = false;
                   }
               }
           } else {
  -            throw new FopImageException( "\n1 Error while loading image " +
  -                                         this.m_href.toString() +
  -                                         " : JpegImage - Invalid JPEG Header.");
  +            ua.getLogger().error( "1 Error while loading image " +
  +                                          this.m_href.toString() +
  +                                          " : JpegImage - Invalid JPEG Header.");
  +            return false;
           }
           if (iccStream.size() > 0) {
               byte[] align = new byte[((iccStream.size()) % 8) + 8];
  -            try {iccStream.write(align);} catch (Exception e) {
  -                throw new FopImageException( "\n1 Error while loading image " +
  -                                             this.m_href.toString() + " : " +
  -                                             e.getMessage());
  +            try {
  +                iccStream.write(align);
  +            } catch (Exception e) {
  +                ua.getLogger().error( "1 Error while loading image " +
  +                                              this.m_href.toString() + " : " +
  +                                              e.getMessage(), e);
  +                return false;
               }
               this.m_colorSpace.setICCProfile(iccStream.toByteArray());
           }
  +        return true;
       }
  -    
  +
       private int calcBytes(byte bOne, byte bTwo) {
           return (uByte(bOne) * 256) + uByte(bTwo);
       }
  -    
  +
       private int uByte(byte bIn) {
           if (bIn < 0) {
               return 256 + bIn;
  
  
  
  1.9       +14 -19    xml-fop/src/org/apache/fop/image/SVGImage.java
  
  Index: SVGImage.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/SVGImage.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- SVGImage.java	22 Nov 2001 07:11:40 -0000	1.8
  +++ SVGImage.java	21 Feb 2002 09:54:27 -0000	1.9
  @@ -1,5 +1,5 @@
   /*
  - * $Id: SVGImage.java,v 1.8 2001/11/22 07:11:40 keiron Exp $
  + * $Id: SVGImage.java,v 1.9 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -13,12 +13,9 @@
   
   // FOP
   import org.apache.fop.apps.Driver;
  -import org.apache.fop.datatypes.ColorSpace;
  -import org.apache.fop.pdf.PDFColor;
   import org.apache.fop.image.analyser.ImageReader;
  -
  -import org.xml.sax.InputSource;
  -import org.xml.sax.XMLReader;
  +import org.apache.fop.image.analyser.SVGReader;
  +import org.apache.fop.fo.FOUserAgent;
   
   import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
   
  @@ -29,13 +26,11 @@
   public class SVGImage extends AbstractFopImage {
       SVGDocument doc;
   
  -    public SVGImage(URL href) throws FopImageException {
  -        super(href);
  -    }
  -
  -    public SVGImage(URL href,
  -                    ImageReader imgReader) throws FopImageException {
  +    public SVGImage(URL href, ImageReader imgReader) {
           super(href, imgReader);
  +        if(imgReader instanceof SVGReader) {
  +            doc = ((SVGReader)imgReader).getDocument();
  +        }
       }
   
       /**
  @@ -49,20 +44,20 @@
           return parserClassName;
       }
   
  -    protected void loadImage() throws FopImageException {
  +    protected boolean loadData(FOUserAgent ua) {
           try {
               SAXSVGDocumentFactory factory =
  -                new SAXSVGDocumentFactory(SVGImage.getParserName());
  +              new SAXSVGDocumentFactory(SVGImage.getParserName());
               doc = factory.createDocument(this.m_href.toExternalForm());
           } catch (Exception e) {
  -            //log.error("Could not load external SVG: "
  -            //                       + e.getMessage());
  +            ua.getLogger().error("Could not load external SVG: "
  +                                   + e.getMessage(), e);
  +            return false;
           }
  +        return true;
       }
   
  -    public SVGDocument getSVGDocument() throws FopImageException {
  -        if (doc == null)
  -            this.loadImage();
  +    public SVGDocument getSVGDocument() {
           return doc;
       }
   
  
  
  
  1.1                  xml-fop/src/org/apache/fop/image/ImageCache.java
  
  Index: ImageCache.java
  ===================================================================
  /*
   * $Id: ImageCache.java,v 1.1 2002/02/21 09:54:27 keiron Exp $
   * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
   * For details on use and redistribution please refer to the
   * LICENSE file included with these sources.
   */
  
  package org.apache.fop.image;
  
  // FOP
  import org.apache.fop.fo.FOUserAgent;
  
  import org.apache.log.Logger;
  
  public interface ImageCache {
      public FopImage getImage(String url, FOUserAgent context);
      public void releaseImage(String url, FOUserAgent context);
      public void invalidateImage(String url, FOUserAgent context);
      public void removeContext(FOUserAgent context);
  }
  
  
  
  
  1.1                  xml-fop/src/org/apache/fop/image/ImageFactory.java
  
  Index: ImageFactory.java
  ===================================================================
  /*
   * $Id: ImageFactory.java,v 1.1 2002/02/21 09:54:27 keiron Exp $
   * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
   * For details on use and redistribution please refer to the
   * LICENSE file included with these sources.
   */
  
  package org.apache.fop.image;
  
  // Java
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.File;
  import java.net.URL;
  import java.net.MalformedURLException;
  import java.lang.reflect.Constructor;
  import java.util.HashMap;
  import java.util.WeakHashMap;
  import java.util.Map;
  import java.util.HashSet;
  import java.util.Set;
  import java.util.Collections;
  
  // FOP
  import org.apache.fop.image.analyser.ImageReaderFactory;
  import org.apache.fop.image.analyser.ImageReader;
  import org.apache.fop.fo.FOUserAgent;
  
  import org.apache.log.Logger;
  
  /*
  handle context: base dir, logger, caching
  
   */
  
  /**
   * create FopImage objects (with a configuration file - not yet implemented).
   * @author Eric SCHAEFFER
   */
  public class ImageFactory {
      private static ImageFactory factory = new ImageFactory();
      ImageCache cache = new ContextImageCache();
  
      private ImageFactory() {}
  
      public static ImageFactory getInstance() {
          return factory;
      }
  
      public static String getURL(String href) {
          /*
           * According to section 5.11 a <uri-specification> is:
           * "url(" + URI + ")"
           * according to 7.28.7 a <uri-specification> is:
           * URI
           * So handle both.
           */
          // Get the absolute URL
          URL absoluteURL = null;
          InputStream imgIS = null;
          href = href.trim();
          if (href.startsWith("url(") && (href.indexOf(")") != -1)) {
              href = href.substring(4, href.indexOf(")")).trim();
              if (href.startsWith("'") && href.endsWith("'")) {
                  href = href.substring(1, href.length() - 1);
              } else if (href.startsWith("\"") && href.endsWith("\"")) {
                  href = href.substring(1, href.length() - 1);
              }
          } else {
              // warn
          }
          return href;
      }
  
      /**
       * Get the image from the cache or load.
       * If this returns null then the image could not be loaded
       * due to an error. Messages should be logged.
       * Before calling this the getURL(url) must be used.
       */
      public FopImage getImage(String url, FOUserAgent context) {
          return cache.getImage(url, context);
      }
  
      /**
       * Release an image from the cache.
       * This can be used if the renderer has its own cache of
       * the image.
       * The image should then be put into the weak cache.
       */
      public void releaseImage(String url, FOUserAgent context) {
          cache.releaseImage(url, context);
      }
  
      /**
       * create an FopImage objects.
       * @param href image URL as a String
       * @return a new FopImage object
       * @exception java.net.MalformedURLException bad URL
       * @exception FopImageException an error occured during construction
       */
      protected static FopImage loadImage(String href, String baseURL,
                                          FOUserAgent ua) {
          Logger log = ua.getLogger();
          // Get the absolute URL
          URL absoluteURL = null;
          InputStream imgIS = null;
          try {
              // try url as complete first, this can cause
              // a problem with relative uri's if there is an
              // image relative to where fop is run and relative
              // to the base dir of the document
              try {
                  absoluteURL = new URL(href);
              } catch (MalformedURLException mue) {
                  // if the href contains only a path then file is assumed
                  absoluteURL = new URL("file:" + href);
              }
              imgIS = absoluteURL.openStream();
          } catch (MalformedURLException e_context) {
              log.error("Error with image URL: " + e_context.getMessage());
              return null;
          }
          catch (Exception e) {
              // maybe relative
              URL context_url = null;
              if (baseURL == null) {
                  log.error("Error with image URL: " + e.getMessage() + " and no base directory is specified");
                  return null;
              }
              try {
                  absoluteURL = new URL(baseURL + absoluteURL.getFile());
              } catch (MalformedURLException e_context) {
                  // pb context url
                  log.error( "Invalid Image URL - error on relative URL : " +
                             e_context.getMessage());
                  return null;
              }
          }
  
          // If not, check image type
          ImageReader imgReader = null;
          try {
              if (imgIS == null) {
                  imgIS = absoluteURL.openStream();
              }
              imgReader = ImageReaderFactory.make(
                            absoluteURL.toExternalForm(), imgIS, ua);
          } catch (Exception e) {
              log.error("Error while recovering Image Informations (" +
                        absoluteURL.toString() + ") : " + e.getMessage());
              return null;
          }
          finally { if (imgIS != null) {
                    try {
                            imgIS.close();
                    } catch (IOException e) {}
                    }
              } if (imgReader == null) {
              log.error("No ImageReader for this type of image (" +
                        absoluteURL.toString() + ")");
              return null;
          }
          // Associate mime-type to FopImage class
          String imgMimeType = imgReader.getMimeType();
          String imgClassName = null;
          if ("image/gif".equals(imgMimeType)) {
              imgClassName = "org.apache.fop.image.GifImage";
              // imgClassName = "org.apache.fop.image.JAIImage";
          } else if ("image/jpeg".equals(imgMimeType)) {
              imgClassName = "org.apache.fop.image.JpegImage";
              // imgClassName = "org.apache.fop.image.JAIImage";
          } else if ("image/bmp".equals(imgMimeType)) {
              imgClassName = "org.apache.fop.image.BmpImage";
              // imgClassName = "org.apache.fop.image.JAIImage";
          } else if ("image/eps".equals(imgMimeType)) {
              imgClassName = "org.apache.fop.image.EPSImage";
          } else if ("image/png".equals(imgMimeType)) {
              imgClassName = "org.apache.fop.image.JimiImage";
              // imgClassName = "org.apache.fop.image.JAIImage";
          } else if ("image/tga".equals(imgMimeType)) {
              imgClassName = "org.apache.fop.image.JimiImage";
              // imgClassName = "org.apache.fop.image.JAIImage";
          } else if ("image/tiff".equals(imgMimeType)) {
              imgClassName = "org.apache.fop.image.JimiImage";
              // imgClassName = "org.apache.fop.image.JAIImage";
          } else if ("image/svg+xml".equals(imgMimeType)) {
              imgClassName = "org.apache.fop.image.SVGImage";
          }
          if (imgClassName == null) {
              log.error("Unsupported image type (" +
                        absoluteURL.toString() + ") : " + imgMimeType);
              return null;
          }
  
          // load the right image class
          // return new <FopImage implementing class>
          Object imageInstance = null;
          Class imageClass = null;
          try {
              imageClass = Class.forName(imgClassName);
              Class[] imageConstructorParameters = new Class[2];
              imageConstructorParameters[0] = Class.forName("java.net.URL");
              imageConstructorParameters[1] = Class.forName("org.apache.fop.image.analyser.ImageReader");
              Constructor imageConstructor =
                imageClass.getDeclaredConstructor(
                  imageConstructorParameters);
              Object[] initArgs = new Object[2];
              initArgs[0] = absoluteURL;
              initArgs[1] = imgReader;
              imageInstance = imageConstructor.newInstance(initArgs);
          } catch (java.lang.reflect.InvocationTargetException ex) {
              Throwable t = ex.getTargetException();
              String msg;
              if (t != null) {
                  msg = t.getMessage();
              } else {
                  msg = ex.getMessage();
              }
              log.error("Error creating FopImage object (" +
                        absoluteURL.toString() + ") : " + msg);
              return null;
          }
          catch (Exception ex) {
              log.error("Error creating FopImage object (" +
                        "Error creating FopImage object (" +
                        absoluteURL.toString() + ") : " + ex.getMessage());
              return null;
          }
          if (!(imageInstance instanceof org.apache.fop.image.FopImage)) {
              log.error("Error creating FopImage object (" +
                        absoluteURL.toString() + ") : " + "class " +
                        imageClass.getName() + " doesn't implement org.apache.fop.image.FopImage interface");
              return null;
          }
          return (FopImage) imageInstance;
      }
  
  }
  
  class BasicImageCache implements ImageCache {
      Set invalid = Collections.synchronizedSet(new HashSet());
      Map contextStore = Collections.synchronizedMap(new HashMap());
  
      public FopImage getImage(String url, FOUserAgent context) {
          if (invalid.contains(url)) {
              return null;
          }
          return null;
      }
  
      public void releaseImage(String url, FOUserAgent context) {
          // do nothing
      }
  
      public void invalidateImage(String url, FOUserAgent context) {
          // cap size of invalid list
          if (invalid.size() > 100) {
              invalid.clear();
          }
          invalid.add(url);
      }
  
      public void removeContext(FOUserAgent context) {
          // do nothing
      }
  }
  
  /**
   * This is the context image cache.
   * This caches images on the basis of the given context.
   * Common images in different contexts are currently not handled.
   * There are two possiblities, each context handles its own images
   * and renderers can cache information or images are shared and
   * all information is retained.
   * Once a context is removed then all images are placed into a
   * weak hashmap so they may be garbage collected.
   */
  class ContextImageCache implements ImageCache {
      Set invalid = Collections.synchronizedSet(new HashSet());
      Map contextStore = Collections.synchronizedMap(new HashMap());
      Map weakStore = Collections.synchronizedMap(new WeakHashMap());
  
      // sync around lookups and puts
      // another sync around load for a particular image
      public FopImage getImage(String url, FOUserAgent context) {
          ImageLoader im;
          // this protects the finding or creating of a new
          // ImageLoader for multi threads
          synchronized (this) {
              if (invalid.contains(url)) {
                  return null;
              }
              Context con = (Context) contextStore.get(context);
              if (con == null) {
                  con = new Context(context);
                  contextStore.put(context, con);
              }
              im = (ImageLoader) weakStore.get(url);
              if (im != null) {
                  con.putImage(url, im);
              } else {
                  im = con.getImage(url, this);
              }
          }
  
          // the ImageLoader is synchronized so images with the
          // same url will not be loaded at the same time
          if (im != null) {
              return im.loadImage();
          }
          return null;
      }
  
      public void releaseImage(String url, FOUserAgent context) {
          Context con = (Context) contextStore.get(context);
          if (con != null) {
              ImageLoader im = con.getImage(url);
              weakStore.put(url, im);
              con.releaseImage(url);
          }
      }
  
      public void invalidateImage(String url, FOUserAgent context) {
          // cap size of invalid list
          if (invalid.size() > 100) {
              invalid.clear();
          }
          invalid.add(url);
          Context con = (Context) contextStore.get(context);
          if (con != null) {
              con.releaseImage(url);
          }
      }
  
      public void removeContext(FOUserAgent context) {
          Context con = (Context) contextStore.get(context);
          if (con != null) {
              Map images = con.getImages();
              weakStore.putAll(images);
              contextStore.remove(context);
          }
      }
  
      class Context {
          Map images = Collections.synchronizedMap(new HashMap());
          FOUserAgent userAgent;
  
          public Context(FOUserAgent ua) {
              userAgent = ua;
          }
  
          public ImageLoader getImage(String url, ImageCache c) {
              if (images.containsKey(url)) {
                  return (ImageLoader) images.get(url);
              }
              ImageLoader loader = new ImageLoader(url, c, userAgent);
              images.put(url, loader);
              return loader;
          }
  
          public void putImage(String url, ImageLoader image) {
              images.put(url, image);
          }
  
          public ImageLoader getImage(String url) {
              return (ImageLoader) images.get(url);
          }
  
          public void releaseImage(String url) {
              images.remove(url);
          }
  
          public Map getImages() {
              return images;
          }
  
      }
  
  }
  
  
  
  
  1.1                  xml-fop/src/org/apache/fop/image/ImageLoader.java
  
  Index: ImageLoader.java
  ===================================================================
  /*
   * $Id: ImageLoader.java,v 1.1 2002/02/21 09:54:27 keiron Exp $
   * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
   * For details on use and redistribution please refer to the
   * LICENSE file included with these sources.
   */
  
  package org.apache.fop.image;
  
  import org.apache.fop.configuration.Configuration;
  import org.apache.fop.fo.FOUserAgent;
  
  /**
   * Class to load images.
   */
  class ImageLoader {
      String url;
      ImageCache cache;
      boolean valid = true;
      FOUserAgent userAgent;
      FopImage image = null;
  
      public ImageLoader(String u, ImageCache c, FOUserAgent ua) {
          url = u;
          cache = c;
          userAgent = ua;
      }
  
      public synchronized FopImage loadImage() {
          if (!valid || image != null) {
              return image;
          }
          String base = Configuration.getStringValue("baseDir");
          image = ImageFactory.loadImage(url, base, userAgent);
          if (image == null) {
              cache.invalidateImage(url, userAgent);
              valid = false;
          }
          return image;
      }
  
  }
  
  
  
  1.4       +5 -3      xml-fop/src/org/apache/fop/image/analyser/AbstractImageReader.java
  
  Index: AbstractImageReader.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/analyser/AbstractImageReader.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractImageReader.java	30 Jul 2001 20:29:27 -0000	1.3
  +++ AbstractImageReader.java	21 Feb 2002 09:54:27 -0000	1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: AbstractImageReader.java,v 1.3 2001/07/30 20:29:27 tore Exp $
  + * $Id: AbstractImageReader.java,v 1.4 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -11,6 +11,8 @@
   import java.io.BufferedInputStream;
   import java.io.IOException;
   
  +import org.apache.fop.fo.FOUserAgent;
  +
   /**
    * Base class implementing ImageReader.
    * @author Pankaj Narula
  @@ -34,8 +36,8 @@
        */
       protected BufferedInputStream imageStream = null;
   
  -    public abstract boolean verifySignature(String uri, BufferedInputStream fis)
  -            throws IOException;
  +    public abstract boolean verifySignature(String uri,
  +                                            BufferedInputStream fis, FOUserAgent ua) throws IOException;
   
       public int getHeight() {
           return this.height;
  
  
  
  1.4       +9 -6      xml-fop/src/org/apache/fop/image/analyser/BMPReader.java
  
  Index: BMPReader.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/analyser/BMPReader.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BMPReader.java	30 Jul 2001 20:29:27 -0000	1.3
  +++ BMPReader.java	21 Feb 2002 09:54:27 -0000	1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: BMPReader.java,v 1.3 2001/07/30 20:29:27 tore Exp $
  + * $Id: BMPReader.java,v 1.4 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -11,6 +11,8 @@
   import java.io.BufferedInputStream;
   import java.io.IOException;
   
  +import org.apache.fop.fo.FOUserAgent;
  +
   /**
    * ImageReader object for BMP image type.
    * @author Pankaj Narula
  @@ -21,12 +23,12 @@
   
       protected byte[] header;
   
  -    public boolean verifySignature(String uri, BufferedInputStream fis)
  -            throws IOException {
  +    public boolean verifySignature(String uri, BufferedInputStream fis,
  +                                   FOUserAgent ua) throws IOException {
           this.imageStream = fis;
           this.setDefaultHeader();
  -        boolean supported = ((header[0] == (byte)0x42)
  -                             && (header[1] == (byte)0x4d));
  +        boolean supported = ((header[0] == (byte) 0x42) &&
  +                             (header[1] == (byte) 0x4d));
           if (supported) {
               setDimension();
               return true;
  @@ -44,7 +46,8 @@
           int byte2 = header[19] & 0xff;
           int byte3 = header[20] & 0xff;
           int byte4 = header[21] & 0xff;
  -        long l = (long)((byte4 << 24) | (byte3 << 16) | (byte2 << 8) | byte1);
  +        long l = (long)((byte4 << 24) | (byte3 << 16) |
  +                        (byte2 << 8) | byte1);
           this.width = (int)(l & 0xffffffff);
   
           byte1 = header[22] & 0xff;
  
  
  
  1.3       +74 -72    xml-fop/src/org/apache/fop/image/analyser/EPSReader.java
  
  Index: EPSReader.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/analyser/EPSReader.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- EPSReader.java	22 Nov 2001 08:30:36 -0000	1.2
  +++ EPSReader.java	21 Feb 2002 09:54:27 -0000	1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: EPSReader.java,v 1.2 2001/11/22 08:30:36 keiron Exp $
  + * $Id: EPSReader.java,v 1.3 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -17,86 +17,86 @@
   import org.xml.sax.InputSource;
   import org.xml.sax.XMLReader;
   
  +import org.apache.fop.fo.FOUserAgent;
  +
   /**
    * ImageReader object for EPS document image type.
    */
   public class EPSReader extends AbstractImageReader {
       private long[] bbox;
       private boolean isAscii; // True if plain ascii eps file
  -    
  -	// offsets if not ascii
  +
  +    // offsets if not ascii
       long psStart = 0;
       long psLength = 0;
       long wmfStart = 0;
       long wmfLength = 0;
       long tiffStart = 0;
       long tiffLength = 0;
  -    
  -	/** raw eps file */
  +
  +    /** raw eps file */
       private byte[] rawEps;
  -	/** eps part */
  +    /** eps part */
       private byte[] epsFile;
       private byte[] preview = null;
  -    
  +
       private long getLong(byte[] buf, int idx) {
           int b1 = buf[idx] & 0xff;
  -        int b2 = buf[idx+1] & 0xff;
  -        int b3 = buf[idx+2] & 0xff;
  -        int b4 = buf[idx+3] & 0xff;
  -        
  +        int b2 = buf[idx + 1] & 0xff;
  +        int b3 = buf[idx + 2] & 0xff;
  +        int b4 = buf[idx + 3] & 0xff;
  +
           return (long)((b4 << 24) | (b3 << 16) | (b2 << 8) | b1);
       }
  -    
  -    public boolean verifySignature(String uri, BufferedInputStream fis)
  -        throws IOException {
  +
  +    public boolean verifySignature(String uri, BufferedInputStream fis,
  +                                   FOUserAgent ua) throws IOException {
           boolean isEPS = false;
           this.imageStream = fis;
           fis.mark(32);
           byte[] header = new byte[30];
           fis.read(header, 0, 30);
           fis.reset();
  -        
  -            // Check if binary header
  +
  +        // Check if binary header
           if (getLong(header, 0) == 0xC6D3D0C5) {
               isAscii = false;
               isEPS = true;
  -            
  +
               psStart = getLong(header, 4);
               psLength = getLong(header, 8);
               wmfStart = getLong(header, 12);
               wmfLength = getLong(header, 16);
               tiffStart = getLong(header, 20);
               tiffLength = getLong(header, 24);
  -            
  +
           } else {
  -                // Check if plain ascii
  +            // Check if plain ascii
               byte[] epsh = "%!PS".getBytes();
  -            if (epsh[0] == header[0] &&
  -                epsh[1] == header[1] &&
  -                epsh[2] == header[2] &&
  -                epsh[3] == header[3]) {
  +            if (epsh[0] == header[0] && epsh[1] == header[1] &&
  +                    epsh[2] == header[2] && epsh[3] == header[3]) {
                   isAscii = true;
                   isEPS = true;
               }
           }
  -        
  +
           if (isEPS) {
               readEPSImage(fis);
               bbox = readBBox();
  -            
  +
               if (bbox != null) {
  -                width = (int)(bbox[2]-bbox[0]);
  -                height = (int)(bbox[3]-bbox[1]);
  +                width = (int)(bbox[2] - bbox[0]);
  +                height = (int)(bbox[3] - bbox[1]);
               } else {
  -		 // Ain't eps if no BoundingBox
  +                // Ain't eps if no BoundingBox
                   isEPS = false;
               }
           }
  -        
  +
           return isEPS;
       }
  -    
  -	/** read the eps file and extract eps part */
  +
  +    /** read the eps file and extract eps part */
       private void readEPSImage(BufferedInputStream fis) throws IOException {
           ByteArrayOutputStream baos = new ByteArrayOutputStream();
           byte[] file;
  @@ -104,58 +104,61 @@
           int bytes_read;
           int index = 0;
           boolean cont = true;
  -        
  -        
  +
  +
           try {
               while ((bytes_read = fis.read(readBuf)) != -1) {
                   baos.write(readBuf, 0, bytes_read);
               }
           } catch (java.io.IOException ex) {
  -            throw new IOException("Error while loading EPS image " + ex.getMessage());
  +            throw new IOException("Error while loading EPS image " +
  +                                  ex.getMessage());
           }
  -        
  +
           file = baos.toByteArray();
  -        
  +
           if (isAscii) {
               rawEps = null;
               epsFile = new byte[file.length];
               System.arraycopy(file, 0, epsFile, 0, epsFile.length);
           } else {
               rawEps = new byte[file.length];
  -            epsFile = new byte[(int)psLength];
  +            epsFile = new byte[(int) psLength];
               System.arraycopy(file, 0, rawEps, 0, rawEps.length);
  -            System.arraycopy(rawEps, (int)psStart, epsFile, 0, (int)psLength);
  +            System.arraycopy(rawEps, (int) psStart, epsFile, 0,
  +                             (int) psLength);
           }
       }
  -    
  +
       public byte[] getEpsFile() {
           return epsFile;
       }
  -    
  -	/* Get embedded preview or null */
  +
  +    /* Get embedded preview or null */
       public byte[] getPreview() {
           InputStream is = null;
           if (preview == null) {
               if (tiffLength > 0) {
  -                preview = new byte[(int)tiffLength];
  -                System.arraycopy(rawEps, (int)tiffStart, preview, 0, (int)tiffLength);
  +                preview = new byte[(int) tiffLength];
  +                System.arraycopy(rawEps, (int) tiffStart, preview, 0,
  +                                 (int) tiffLength);
               }
           }
           return preview;
       }
  -    
  -	/** Extract bounding box from eps part
  -         */
  +
  +    /** Extract bounding box from eps part
  +     */
       private long[] readBBox() {
           long[] mbbox = null;
           int idx = 0;
           byte[] bbxName = "%%BoundingBox: ".getBytes();
           boolean found = false;
  -        
  -        while (!found && (epsFile.length  > (idx + bbxName.length))) {
  +
  +        while (!found && (epsFile.length > (idx + bbxName.length))) {
               boolean sfound = true;
               int i = idx;
  -            for (i = idx; sfound && (i-idx) < bbxName.length; i++) {
  +            for (i = idx; sfound && (i - idx) < bbxName.length; i++) {
                   if (bbxName[i - idx] != epsFile[i])
                       sfound = false;
               }
  @@ -166,52 +169,51 @@
                   idx++;
               }
           }
  -        
  +
           if (!found)
               return mbbox;
  -        
  -        
  +
  +
           mbbox = new long[4];
           idx += readLongString(mbbox, 0, idx);
           idx += readLongString(mbbox, 1, idx);
           idx += readLongString(mbbox, 2, idx);
           idx += readLongString(mbbox, 3, idx);
  -        
  +
           return mbbox;
       }
  -    
  +
       private int readLongString(long[] mbbox, int i, int idx) {
  -        while (idx < epsFile.length &&
  -               (epsFile[idx] == 32))
  +        while (idx < epsFile.length && (epsFile[idx] == 32))
               idx++;
  -        
  +
           int nidx = idx;
  -        
  +
           while (nidx < epsFile.length &&
  -               (epsFile[nidx] >= 48 && epsFile[nidx] <= 57))
  +                (epsFile[nidx] >= 48 && epsFile[nidx] <= 57))
               nidx++;
  -        
  +
           byte[] num = new byte[nidx - idx];
  -        System.arraycopy(epsFile, idx, num, 0, nidx-idx);
  +        System.arraycopy(epsFile, idx, num, 0, nidx - idx);
           String ns = new String(num);
           mbbox[i] = Long.parseLong(ns);
  -        
  -        return (1+nidx - idx);
  +
  +        return (1 + nidx - idx);
       }
  -    
  +
       public String getMimeType() {
           return "image/eps";
       }
  -    
  -	/**
  -         * Return the BoundingBox
  -         */
  +
  +    /**
  +     * Return the BoundingBox
  +     */
       public int[] getBBox() {
           int[] bbox = new int[4];
  -        bbox[0] = (int)this.bbox[0];
  -        bbox[1] = (int)this.bbox[1];
  -        bbox[2] = (int)this.bbox[2];
  -        bbox[3] = (int)this.bbox[3];
  +        bbox[0] = (int) this.bbox[0];
  +        bbox[1] = (int) this.bbox[1];
  +        bbox[2] = (int) this.bbox[2];
  +        bbox[3] = (int) this.bbox[3];
           return bbox;
       }
   }
  
  
  
  1.4       +9 -7      xml-fop/src/org/apache/fop/image/analyser/GIFReader.java
  
  Index: GIFReader.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/analyser/GIFReader.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- GIFReader.java	30 Jul 2001 20:29:27 -0000	1.3
  +++ GIFReader.java	21 Feb 2002 09:54:27 -0000	1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: GIFReader.java,v 1.3 2001/07/30 20:29:27 tore Exp $
  + * $Id: GIFReader.java,v 1.4 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -11,6 +11,8 @@
   import java.io.BufferedInputStream;
   import java.io.IOException;
   
  +import org.apache.fop.fo.FOUserAgent;
  +
   /**
    * ImageReader object for GIF image type.
    * @author Pankaj Narula
  @@ -20,14 +22,14 @@
       static protected final int GIF_SIG_LENGTH = 10;
       protected byte[] header;
   
  -    public boolean verifySignature(String uri, BufferedInputStream fis)
  -            throws IOException {
  +    public boolean verifySignature(String uri, BufferedInputStream fis,
  +                                   FOUserAgent ua) throws IOException {
           this.imageStream = fis;
           this.setDefaultHeader();
  -        boolean supported = ((header[0] == 'G') && (header[1] == 'I')
  -                             && (header[2] == 'F') && (header[3] == '8')
  -                             && (header[4] == '7' || header[4] == '9')
  -                             && (header[5] == 'a'));
  +        boolean supported = ((header[0] == 'G') && (header[1] == 'I') &&
  +                             (header[2] == 'F') && (header[3] == '8') &&
  +                             (header[4] == '7' || header[4] == '9') &&
  +                             (header[5] == 'a'));
           if (supported) {
               setDimension();
               return true;
  
  
  
  1.4       +5 -3      xml-fop/src/org/apache/fop/image/analyser/ImageReader.java
  
  Index: ImageReader.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/analyser/ImageReader.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ImageReader.java	30 Jul 2001 20:29:27 -0000	1.3
  +++ ImageReader.java	21 Feb 2002 09:54:27 -0000	1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: ImageReader.java,v 1.3 2001/07/30 20:29:27 tore Exp $
  + * $Id: ImageReader.java,v 1.4 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -11,6 +11,8 @@
   import java.io.BufferedInputStream;
   import java.io.IOException;
   
  +import org.apache.fop.fo.FOUserAgent;
  +
   /**
    * ImageReader objects read image headers to determine the image size.
    * @author Pankaj Narula
  @@ -24,8 +26,8 @@
        * @return true if image type is the handled one
        * @exception IOException io error
        */
  -    public boolean verifySignature(String uri, BufferedInputStream bis)
  -            throws IOException;
  +    public boolean verifySignature(String uri, BufferedInputStream bis,
  +                                   FOUserAgent ua) throws IOException;
   
       /**
        * Return the used InputStream.
  
  
  
  1.8       +23 -25    xml-fop/src/org/apache/fop/image/analyser/ImageReaderFactory.java
  
  Index: ImageReaderFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/analyser/ImageReaderFactory.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ImageReaderFactory.java	16 Nov 2001 19:36:40 -0000	1.7
  +++ ImageReaderFactory.java	21 Feb 2002 09:54:27 -0000	1.8
  @@ -1,5 +1,5 @@
   /*
  - * $Id: ImageReaderFactory.java,v 1.7 2001/11/16 19:36:40 tore Exp $
  + * $Id: ImageReaderFactory.java,v 1.8 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -11,11 +11,9 @@
   import java.io.InputStream;
   import java.io.BufferedInputStream;
   import java.io.IOException;
  -import java.util.Enumeration;
  -import java.util.Vector;
  +import java.util.ArrayList;
   
  -// FOP
  -import org.apache.fop.image.FopImageException;
  +import org.apache.fop.fo.FOUserAgent;
   
   /**
    * Factory for ImageReader objects.
  @@ -23,41 +21,41 @@
    * @version 1.0
    */
   public class ImageReaderFactory {
  -    static protected Vector formats = null;
  +    static protected ArrayList formats = new ArrayList();
  +    static {
  +        formats.add(new JPEGReader());
  +        formats.add(new BMPReader());
  +        formats.add(new GIFReader());
  +        formats.add(new PNGReader());
  +        formats.add(new TIFFReader());
  +        formats.add(new EPSReader());
  +        formats.add(new SVGReader());
  +    };
  +
  +    // TODO - a way to add other readers
   
       /**
        * ImageReader maker.
        * @param in image input stream
        * @return ImageReader object
  -     * @exception FopImageException  an error occured during creation or
        * image type is not supported
        */
  -    static public ImageReader Make(String uri,
  -                                   InputStream in) throws FopImageException {
  -
  -        // need to use a config file and remove static methods
  -        formats = new Vector();
  -        formats.addElement(new JPEGReader());
  -        formats.addElement(new BMPReader());
  -        formats.addElement(new GIFReader());
  -        formats.addElement(new PNGReader());
  -        formats.addElement(new TIFFReader());
  -        formats.addElement(new EPSReader());
  -        formats.addElement(new SVGReader());
  -        //
  +    static public ImageReader make(String uri, InputStream in,
  +                                   FOUserAgent ua) {
   
           ImageReader reader;
           BufferedInputStream bis = new BufferedInputStream(in);
  -        Enumeration itr = formats.elements();
           try {
  -            while (itr.hasMoreElements()) {
  -                reader = (ImageReader)itr.nextElement();
  -                if (reader.verifySignature(uri, bis)) {
  +            for (int count = 0; count < formats.size(); count++) {
  +                reader = (ImageReader) formats.get(count);
  +                if (reader.verifySignature(uri, bis, ua)) {
                       return reader;
                   }
               }
           } catch (IOException ex) {
  -            throw new FopImageException(ex.getMessage());
  +            ua.getLogger().error(
  +              "Error while recovering Image Informations (" +
  +              uri + ") : " + ex.getMessage());
           }
           return null;
       }
  
  
  
  1.4       +37 -34    xml-fop/src/org/apache/fop/image/analyser/JPEGReader.java
  
  Index: JPEGReader.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/analyser/JPEGReader.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JPEGReader.java	30 Jul 2001 20:29:27 -0000	1.3
  +++ JPEGReader.java	21 Feb 2002 09:54:27 -0000	1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: JPEGReader.java,v 1.3 2001/07/30 20:29:27 tore Exp $
  + * $Id: JPEGReader.java,v 1.4 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -11,6 +11,8 @@
   import java.io.BufferedInputStream;
   import java.io.IOException;
   
  +import org.apache.fop.fo.FOUserAgent;
  +
   /**
    * ImageReader object for JPEG image type.
    * @author Pankaj Narula
  @@ -25,26 +27,26 @@
        * inside the APPn marker. And we don't want to confuse those dimensions with
        * the image dimensions.
        */
  -    static protected final int MARK = 0xff;    // Beginneing of a Marker
  -    static protected final int NULL = 0x00;    // Special case for 0xff00
  -    static protected final int SOF1 = 0xc0;    // Baseline DCT
  -    static protected final int SOF2 = 0xc1;    // Extended Sequential DCT
  -    static protected final int SOF3 = 0xc2;    // Progrssive DCT only PDF 1.3
  -    static protected final int SOFA = 0xca;    // Progressice DCT only PDF 1.3
  -    static protected final int APP0 = 0xe0;    // Application marker, JFIF
  -    static protected final int APPF = 0xef;    // Application marker
  -    static protected final int SOS = 0xda;     // Start of Scan
  -    static protected final int SOI = 0xd8;     // start of Image
  +    static protected final int MARK = 0xff; // Beginneing of a Marker
  +    static protected final int NULL = 0x00; // Special case for 0xff00
  +    static protected final int SOF1 = 0xc0; // Baseline DCT
  +    static protected final int SOF2 = 0xc1; // Extended Sequential DCT
  +    static protected final int SOF3 = 0xc2; // Progrssive DCT only PDF 1.3
  +    static protected final int SOFA = 0xca; // Progressice DCT only PDF 1.3
  +    static protected final int APP0 = 0xe0; // Application marker, JFIF
  +    static protected final int APPF = 0xef; // Application marker
  +    static protected final int SOS = 0xda; // Start of Scan
  +    static protected final int SOI = 0xd8; // start of Image
       static protected final int JPG_SIG_LENGTH = 2;
   
       protected byte[] header;
   
  -    public boolean verifySignature(String uri, BufferedInputStream fis)
  -            throws IOException {
  +    public boolean verifySignature(String uri, BufferedInputStream fis,
  +                                   FOUserAgent ua) throws IOException {
           this.imageStream = fis;
           this.setDefaultHeader();
  -        boolean supported = ((header[0] == (byte)0xff)
  -                             && (header[1] == (byte)0xd8));
  +        boolean supported = ((header[0] == (byte) 0xff) &&
  +                             (header[1] == (byte) 0xd8));
           if (supported) {
               setDimension();
               return true;
  @@ -81,25 +83,26 @@
                   }
                   do {
                       marker = imageStream.read();
  -                } while (marker == MARK);
  +                } while (marker == MARK)
  +                    ;
                   switch (marker) {
  -                case SOI:
  -                    break;
  -                case NULL:
  -                    break;
  -                case SOF1:
  -                case SOF2:
  -                case SOF3:    // SOF3 and SOFA are only supported by PDF 1.3
  -                case SOFA:
  -                    this.skip(3);
  -                    this.height = this.read2bytes();
  -                    this.width = this.read2bytes();
  -                    break outer;
  -                default:
  -                    length = this.read2bytes();
  -                    skipped = this.skip(length - 2);
  -                    if (skipped != length - 2)
  -                        throw new IOException("Skipping Error");
  +                    case SOI:
  +                        break;
  +                    case NULL:
  +                        break;
  +                    case SOF1:
  +                    case SOF2:
  +                    case SOF3: // SOF3 and SOFA are only supported by PDF 1.3
  +                    case SOFA:
  +                        this.skip(3);
  +                        this.height = this.read2bytes();
  +                        this.width = this.read2bytes();
  +                        break outer;
  +                    default:
  +                        length = this.read2bytes();
  +                        skipped = this.skip(length - 2);
  +                        if (skipped != length - 2)
  +                            throw new IOException("Skipping Error");
                   }
               }
           } catch (IOException ioe) {
  @@ -122,7 +125,7 @@
               imageStream.read();
               discarded++;
           }
  -        return discarded;    // scope for exception
  +        return discarded; // scope for exception
       }
   
   }
  
  
  
  1.4       +12 -12    xml-fop/src/org/apache/fop/image/analyser/PNGReader.java
  
  Index: PNGReader.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/analyser/PNGReader.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PNGReader.java	30 Jul 2001 20:29:27 -0000	1.3
  +++ PNGReader.java	21 Feb 2002 09:54:27 -0000	1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: PNGReader.java,v 1.3 2001/07/30 20:29:27 tore Exp $
  + * $Id: PNGReader.java,v 1.4 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -11,6 +11,8 @@
   import java.io.BufferedInputStream;
   import java.io.IOException;
   
  +import org.apache.fop.fo.FOUserAgent;
  +
   /**
    * ImageReader object for PNG image type.
    * @author Pankaj Narula
  @@ -20,18 +22,15 @@
       static protected final int PNG_SIG_LENGTH = 24;
       protected byte[] header;
   
  -    public boolean verifySignature(String uri, BufferedInputStream fis)
  -            throws IOException {
  +    public boolean verifySignature(String uri, BufferedInputStream fis,
  +                                   FOUserAgent ua) throws IOException {
           this.imageStream = fis;
           this.setDefaultHeader();
  -        boolean supported = ((header[0] == (byte)0x89)
  -                             && (header[1] == (byte)0x50)
  -                             && (header[2] == (byte)0x4e)
  -                             && (header[3] == (byte)0x47)
  -                             && (header[4] == (byte)0x0d)
  -                             && (header[5] == (byte)0x0a)
  -                             && (header[6] == (byte)0x1a)
  -                             && (header[7] == (byte)0x0a));
  +        boolean supported = ((header[0] == (byte) 0x89) &&
  +                             (header[1] == (byte) 0x50) && (header[2] == (byte) 0x4e) &&
  +                             (header[3] == (byte) 0x47) && (header[4] == (byte) 0x0d) &&
  +                             (header[5] == (byte) 0x0a) &&
  +                             (header[6] == (byte) 0x1a) && (header[7] == (byte) 0x0a));
           if (supported) {
               setDimension();
               return true;
  @@ -49,7 +48,8 @@
           int byte2 = header[17] & 0xff;
           int byte3 = header[18] & 0xff;
           int byte4 = header[19] & 0xff;
  -        long l = (long)((byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4);
  +        long l = (long)((byte1 << 24) | (byte2 << 16) |
  +                        (byte3 << 8) | byte4);
           this.width = (int)(l);
   
           byte1 = header[20] & 0xff;
  
  
  
  1.17      +35 -127   xml-fop/src/org/apache/fop/image/analyser/SVGReader.java
  
  Index: SVGReader.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/analyser/SVGReader.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- SVGReader.java	22 Nov 2001 08:30:36 -0000	1.16
  +++ SVGReader.java	21 Feb 2002 09:54:27 -0000	1.17
  @@ -1,5 +1,5 @@
   /*
  - * $Id: SVGReader.java,v 1.16 2001/11/22 08:30:36 keiron Exp $
  + * $Id: SVGReader.java,v 1.17 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -46,18 +46,30 @@
   import java.awt.geom.Dimension2D;
   import java.awt.Dimension;
   
  +import org.apache.fop.fo.FOUserAgent;
  +import org.apache.fop.svg.SVGUserAgent;
  +
   /**
    * ImageReader object for SVG document image type.
    */
   public class SVGReader extends AbstractImageReader {
  -    public boolean verifySignature(String uri,
  -                                   BufferedInputStream fis) throws IOException {
  +    public static final String SVG_MIME_TYPE = "image/svg+xml";
  +    FOUserAgent userAgent;
  +    SVGDocument doc;
  +
  +    public boolean verifySignature(String uri, BufferedInputStream fis,
  +                                   FOUserAgent ua) throws IOException {
           this.imageStream = fis;
  +        userAgent = ua;
           return loadImage(uri);
       }
   
       public String getMimeType() {
  -        return "image/svg+xml";
  +        return SVG_MIME_TYPE;
  +    }
  +
  +    public SVGDocument getDocument() {
  +        return doc;
       }
   
       /**
  @@ -67,156 +79,52 @@
       protected boolean loadImage(String uri) {
           // parse document and get the size attributes of the svg element
           try {
  +            int length = imageStream.available();
  +            imageStream.mark(length);
               SAXSVGDocumentFactory factory =
                 new SAXSVGDocumentFactory(SVGImage.getParserName());
  -            SVGDocument doc = factory.createDocument(uri, imageStream);
  +            doc = factory.createDocument(uri, imageStream);
   
  -            Element e = ((SVGDocument)doc).getRootElement();
  +            Element e = ((SVGDocument) doc).getRootElement();
               String s;
  -            UserAgent userAgent = new MUserAgent(new AffineTransform());
  -            BridgeContext ctx = new BridgeContext(userAgent);
  -            UnitProcessor.Context uctx = UnitProcessor.createContext(ctx, e);
  +            SVGUserAgent userAg = new SVGUserAgent(new AffineTransform());
  +            userAg.setLogger(userAgent.getLogger());
  +            BridgeContext ctx = new BridgeContext(userAg);
  +            UnitProcessor.Context uctx =
  +              UnitProcessor.createContext(ctx, e);
   
               // 'width' attribute - default is 100%
               s = e.getAttributeNS(null, SVGOMDocument.SVG_WIDTH_ATTRIBUTE);
               if (s.length() == 0) {
                   s = SVGOMDocument.SVG_SVG_WIDTH_DEFAULT_VALUE;
               }
  -            width = (int)UnitProcessor.svgHorizontalLengthToUserSpace
  -                         (s, SVGOMDocument.SVG_WIDTH_ATTRIBUTE, uctx);
  +            width = (int) UnitProcessor.svgHorizontalLengthToUserSpace (
  +                      s, SVGOMDocument.SVG_WIDTH_ATTRIBUTE, uctx);
   
               // 'height' attribute - default is 100%
               s = e.getAttributeNS(null, SVGOMDocument.SVG_HEIGHT_ATTRIBUTE);
               if (s.length() == 0) {
                   s = SVGOMDocument.SVG_SVG_HEIGHT_DEFAULT_VALUE;
               }
  -            height = (int)UnitProcessor.svgVerticalLengthToUserSpace
  -                         (s, SVGOMDocument.SVG_HEIGHT_ATTRIBUTE, uctx);
  +            height = (int) UnitProcessor.svgVerticalLengthToUserSpace (
  +                       s, SVGOMDocument.SVG_HEIGHT_ATTRIBUTE, uctx);
   
               return true;
           } catch (NoClassDefFoundError ncdfe) {
  -            //log.error("Batik not in class path");
  +            //userAgent.getLogger().error("Batik not in class path", ncdfe);
               return false;
           }
           catch (Exception e) {
  -            //log.error("Could not load external SVG: " +
  -            //                       e.getMessage());
  +            //userAgent.getLogger().error("Could not load external SVG: " +
  +            //                       e.getMessage(), e);
               // assuming any exception means this document is not svg
               // or could not be loaded for some reason
  -            return false;
  -        }
  -    }
  -
  -    protected class MUserAgent implements UserAgent {
  -        AffineTransform currentTransform = null;
  -
  -        /**
  -         * Creates a new SVGUserAgent.
  -         */
  -        protected MUserAgent(AffineTransform at) {
  -            currentTransform = at;
  -        }
  -
  -        /**
  -         * Displays an error message.
  -         */
  -        public void displayError(String message) {
  -            System.err.println(message);
  -        }
  -
  -        /**
  -         * Displays an error resulting from the specified Exception.
  -         */
  -        public void displayError(Exception ex) {
  -            ex.printStackTrace(System.err);
  -        }
  -
  -        /**
  -         * Displays a message in the User Agent interface.
  -         * The given message is typically displayed in a status bar.
  -         */
  -        public void displayMessage(String message) {
  -            System.out.println(message);
  -        }
  -
  -        /**
  -         * Returns a customized the pixel to mm factor.
  -         */
  -        public float getPixelToMM() {
  -            // this is set to 72dpi as the values in fo are 72dpi
  -            return 0.35277777777777777778f; // 72 dpi
  -            // return 0.26458333333333333333333333333333f;    // 96dpi
  -        }
  -
  -        /**
  -         * Returns the language settings.
  -         */
  -        public String getLanguages() {
  -            return "en"; // userLanguages;
  -        }
  -
  -        public String getMedia() {
  -            return "print";
  -        }
  -
  -        /**
  -         * Returns the user stylesheet uri.
  -         * @return null if no user style sheet was specified.
  -         */
  -        public String getUserStyleSheetURI() {
  -            return null; // userStyleSheetURI;
  -        }
  +            try {
  +                imageStream.reset();
  +            } catch (IOException ioe) { }
   
  -        /**
  -         * Returns the class name of the XML parser.
  -         */
  -        public String getXMLParserClassName() {
  -            return org.apache.fop.apps.Driver.getParserClassName();
  -        }
  -
  -        public boolean isXMLParserValidating() {
               return false;
           }
  -
  -        /**
  -         * Opens a link in a new component.
  -         * @param doc The current document.
  -         * @param uri The document URI.
  -         */
  -        public void openLink(SVGAElement elt) {
  -        }
  -
  -        public Point getClientAreaLocationOnScreen() {
  -            return new Point(0, 0);
  -        }
  -
  -        public void setSVGCursor(java.awt.Cursor cursor) {}
  -
  -
  -        public AffineTransform getTransform() {
  -            return currentTransform;
  -        }
  -
  -        public Dimension2D getViewportSize() {
  -            return new Dimension(100, 100);
  -        }
  -
  -        public EventDispatcher getEventDispatcher() {
  -            return null;
  -        }
  -
  -        public boolean supportExtension(String str) {
  -            return false;
  -        }
  -
  -        public boolean hasFeature(String str) {
  -            return false;
  -        }
  -
  -        public void registerExtension(BridgeExtension be) {}
  -
  -        public void handleElement(Element elt, Object data) {}
  -
       }
   
   }
  
  
  
  1.4       +9 -11     xml-fop/src/org/apache/fop/image/analyser/TIFFReader.java
  
  Index: TIFFReader.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/image/analyser/TIFFReader.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TIFFReader.java	30 Jul 2001 20:29:27 -0000	1.3
  +++ TIFFReader.java	21 Feb 2002 09:54:27 -0000	1.4
  @@ -1,5 +1,5 @@
   /*
  - * $Id: TIFFReader.java,v 1.3 2001/07/30 20:29:27 tore Exp $
  + * $Id: TIFFReader.java,v 1.4 2002/02/21 09:54:27 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -11,6 +11,8 @@
   import java.io.BufferedInputStream;
   import java.io.IOException;
   
  +import org.apache.fop.fo.FOUserAgent;
  +
   /**
    * ImageReader object for TIFF image type.
    * @author Pankaj Narula, Michael Lee
  @@ -20,25 +22,21 @@
       static protected final int TIFF_SIG_LENGTH = 8;
       protected byte[] header;
   
  -    public boolean verifySignature(String uri, BufferedInputStream fis)
  -            throws IOException {
  +    public boolean verifySignature(String uri, BufferedInputStream fis,
  +                                   FOUserAgent ua) throws IOException {
           this.imageStream = fis;
           this.setDefaultHeader();
           boolean supported = false;
   
  -        if (header[0] == (byte)0x49
  -                && header[1]
  -                   == (byte)0x49)    // first 2 bytes = II (little endian encoding)
  -         {
  +        if (header[0] == (byte) 0x49 && header[1] == (byte) 0x49)// first 2 bytes = II (little endian encoding)
  +        {
               // look for '42' in byte 3 and '0' in byte 4
               if (header[2] == 42 && header[3] == 0)
                   supported = true;
           }
   
  -        if (header[0] == (byte)0x4D
  -                && header[1]
  -                   == (byte)0x4D)    // first 2 bytes == MM (big endian encoding)
  -         {
  +        if (header[0] == (byte) 0x4D && header[1] == (byte) 0x4D)// first 2 bytes == MM (big endian encoding)
  +        {
               // look for '42' in byte 4 and '0' in byte 3
               if (header[2] == 0 && header[3] == 42)
                   supported = true;
  
  
  
  1.18      +4 -9      xml-fop/src/org/apache/fop/pdf/PDFXObject.java
  
  Index: PDFXObject.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFXObject.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- PDFXObject.java	22 Nov 2001 07:11:40 -0000	1.17
  +++ PDFXObject.java	21 Feb 2002 09:54:28 -0000	1.18
  @@ -1,5 +1,5 @@
   /*
  - * $Id: PDFXObject.java,v 1.17 2001/11/22 07:11:40 keiron Exp $
  + * $Id: PDFXObject.java,v 1.18 2002/02/21 09:54:28 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -21,7 +21,6 @@
   import org.apache.fop.image.FopImage;
   import org.apache.fop.image.EPSImage;
   import org.apache.fop.image.JpegImage;
  -import org.apache.fop.image.FopImageException;
   
   /**
    * PDF XObject
  @@ -50,8 +49,9 @@
           super(number);
           isPS = false;
           this.Xnum = Xnumber;
  -        if (img == null)
  +        if (img == null) {
               //log.error("FISH");
  +        }
           fopimage = img;
           this.pdfDoc = pdfdoc;
           pdfICCStream = null;
  @@ -142,8 +142,6 @@
                   p = p + "/Subtype /PS\n";
                   p = p + "/Length " + imgStream.getDataLength();
                   
  -	            // don't know if it's the good place (other objects can have references to it)
  -                fopimage.close();
                   p = p + dictEntries;
                   p = p + ">>\n";
                   
  @@ -208,9 +206,6 @@
                   p = p + dictEntries;
                   p = p + ">>\n";
                   
  -	            // don't know if it's the good place (other objects can have references to it)
  -                fopimage.close();
  -                
   	            // push the pdf dictionary on the writer
                   byte[] pdfBytes = p.getBytes();
                   stream.write(pdfBytes);
  @@ -222,7 +217,7 @@
                   stream.write(pdfBytes);
                   length += pdfBytes.length;
               }
  -        } catch (FopImageException imgex) {
  +        } catch (Exception imgex) {
               //log.error("Error in XObject : "
               //                       + imgex.getMessage());
           }
  
  
  
  1.5       +24 -15    xml-fop/src/org/apache/fop/render/ps/PSGraphics2D.java
  
  Index: PSGraphics2D.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/ps/PSGraphics2D.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- PSGraphics2D.java	2 Nov 2001 11:06:08 -0000	1.4
  +++ PSGraphics2D.java	21 Feb 2002 09:54:28 -0000	1.5
  @@ -1,5 +1,5 @@
   /*
  - * $Id: PSGraphics2D.java,v 1.4 2001/11/02 11:06:08 keiron Exp $
  + * $Id: PSGraphics2D.java,v 1.5 2002/02/21 09:54:28 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -13,6 +13,7 @@
   import org.apache.fop.render.pdf.*;
   import org.apache.fop.image.*;
   import org.apache.fop.datatypes.ColorSpace;
  +import org.apache.fop.fo.FOUserAgent;
   
   import org.apache.batik.ext.awt.g2d.*;
   
  @@ -39,7 +40,7 @@
    * implementing a <tt>Graphic2D</tt> piece-meal.
    *
    * @author <a href="mailto:keiron@aftexsw.com">Keiron Liddle</a>
  - * @version $Id: PSGraphics2D.java,v 1.4 2001/11/02 11:06:08 keiron Exp $
  + * @version $Id: PSGraphics2D.java,v 1.5 2002/02/21 09:54:28 keiron Exp $
    * @see org.apache.batik.ext.awt.g2d.AbstractGraphics2D
    */
   public class PSGraphics2D extends AbstractGraphics2D {
  @@ -235,7 +236,7 @@
           PDFColor transparent = new PDFColor(255, 255, 255);
   
           TempImage(int width, int height, byte[] result,
  -                  byte[] mask) throws FopImageException {
  +                  byte[] mask) {
               this.m_height = height;
               this.m_width = width;
               this.m_bitsPerPixel = 8;
  @@ -246,67 +247,75 @@
               this.m_mask = mask;
           }
   
  +        public boolean load(int type, FOUserAgent ua) {
  +            return true;
  +        }
  +
  +        public String getMimeType() {
  +            return "";
  +        }
  +
           public String getURL() {
               return "" + m_bitmaps;
           }
   
           // image size
  -        public int getWidth() throws FopImageException {
  +        public int getWidth() {
               return m_width;
           }
   
  -        public int getHeight() throws FopImageException {
  +        public int getHeight() {
               return m_height;
           }
   
           // DeviceGray, DeviceRGB, or DeviceCMYK
  -        public ColorSpace getColorSpace() throws FopImageException {
  +        public ColorSpace getColorSpace() {
               return m_colorSpace;
           }
   
           // bits per pixel
  -        public int getBitsPerPixel() throws FopImageException {
  +        public int getBitsPerPixel() {
               return m_bitsPerPixel;
           }
   
           // For transparent images
  -        public boolean isTransparent() throws FopImageException {
  +        public boolean isTransparent() {
               return transparent != null;
           }
   
  -        public PDFColor getTransparentColor() throws FopImageException {
  +        public PDFColor getTransparentColor() {
               return transparent;
           }
   
  -        public byte[] getMask() throws FopImageException {
  +        public byte[] getMask() {
               return m_mask;
           }
   
           // get the image bytes, and bytes properties
   
           // get uncompressed image bytes
  -        public byte[] getBitmaps() throws FopImageException {
  +        public byte[] getBitmaps() {
               return m_bitmaps;
           }
   
           // width * (bitsPerPixel / 8) * height, no ?
  -        public int getBitmapsSize() throws FopImageException {
  +        public int getBitmapsSize() {
               return m_width * m_height * 3;
           }
   
           // get compressed image bytes
           // I don't know if we really need it, nor if it
           // should be changed...
  -        public byte[] getRessourceBytes() throws FopImageException {
  +        public byte[] getRessourceBytes() {
               return null;
           }
   
  -        public int getRessourceBytesSize() throws FopImageException {
  +        public int getRessourceBytesSize() {
               return 0;
           }
   
           // return null if no corresponding PDFFilter
  -        public PDFFilter getPDFFilter() throws FopImageException {
  +        public PDFFilter getPDFFilter() {
               return null;
           }
   
  
  
  
  1.19      +1 -2      xml-fop/src/org/apache/fop/render/ps/PSRenderer.java
  
  Index: PSRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/ps/PSRenderer.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- PSRenderer.java	16 Nov 2001 19:36:41 -0000	1.18
  +++ PSRenderer.java	21 Feb 2002 09:54:28 -0000	1.19
  @@ -1,5 +1,5 @@
   /*
  - * $Id: PSRenderer.java,v 1.18 2001/11/16 19:36:41 tore Exp $
  + * $Id: PSRenderer.java,v 1.19 2002/02/21 09:54:28 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -13,7 +13,6 @@
   import org.apache.fop.render.Renderer;
   import org.apache.fop.image.ImageArea;
   import org.apache.fop.image.FopImage;
  -import org.apache.fop.image.FopImageException;
   import org.apache.fop.layout.*;
   import org.apache.fop.layout.inline.*;
   import org.apache.fop.datatypes.*;
  
  
  
  1.24      +24 -16    xml-fop/src/org/apache/fop/svg/PDFGraphics2D.java
  
  Index: PDFGraphics2D.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/svg/PDFGraphics2D.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- PDFGraphics2D.java	9 Nov 2001 11:32:42 -0000	1.23
  +++ PDFGraphics2D.java	21 Feb 2002 09:54:28 -0000	1.24
  @@ -1,5 +1,5 @@
   /*
  - * $Id: PDFGraphics2D.java,v 1.23 2001/11/09 11:32:42 keiron Exp $
  + * $Id: PDFGraphics2D.java,v 1.24 2002/02/21 09:54:28 keiron Exp $
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -15,6 +15,7 @@
   import org.apache.fop.datatypes.ColorSpace;
   import org.apache.fop.render.pdf.CIDFont;
   import org.apache.fop.render.pdf.fonts.LazyFont;
  +import org.apache.fop.fo.FOUserAgent;
   
   import org.apache.batik.ext.awt.g2d.*;
   import org.apache.batik.ext.awt.image.GraphicsUtil;
  @@ -40,7 +41,7 @@
    * This takes a pdf document and draws into it.
    *
    * @author <a href="mailto:keiron@aftexsw.com">Keiron Liddle</a>
  - * @version $Id: PDFGraphics2D.java,v 1.23 2001/11/09 11:32:42 keiron Exp $
  + * @version $Id: PDFGraphics2D.java,v 1.24 2002/02/21 09:54:28 keiron Exp $
    * @see org.apache.batik.ext.awt.g2d.AbstractGraphics2D
    */
   public class PDFGraphics2D extends AbstractGraphics2D {
  @@ -320,7 +321,7 @@
           PDFColor transparent = new PDFColor(255, 255, 255);
   
           TempImage(int width, int height, byte[] result,
  -                  byte[] mask) throws FopImageException {
  +                  byte[] mask) {
               this.m_height = height;
               this.m_width = width;
               this.m_bitsPerPixel = 8;
  @@ -331,67 +332,75 @@
               this.m_mask = mask;
           }
   
  +        public boolean load(int type, FOUserAgent ua) {
  +            return true;
  +        }
  +
  +        public String getMimeType() {
  +            return "";
  +        }
  +
           public String getURL() {
               return "" + m_bitmaps;
           }
   
           // image size
  -        public int getWidth() throws FopImageException {
  +        public int getWidth() {
               return m_width;
           }
   
  -        public int getHeight() throws FopImageException {
  +        public int getHeight() {
               return m_height;
           }
   
           // DeviceGray, DeviceRGB, or DeviceCMYK
  -        public ColorSpace getColorSpace() throws FopImageException {
  +        public ColorSpace getColorSpace() {
               return m_colorSpace;
           }
   
           // bits per pixel
  -        public int getBitsPerPixel() throws FopImageException {
  +        public int getBitsPerPixel() {
               return m_bitsPerPixel;
           }
   
           // For transparent images
  -        public boolean isTransparent() throws FopImageException {
  +        public boolean isTransparent() {
               return transparent != null;
           }
   
  -        public PDFColor getTransparentColor() throws FopImageException {
  +        public PDFColor getTransparentColor() {
               return transparent;
           }
   
  -        public byte[] getMask() throws FopImageException {
  +        public byte[] getMask() {
               return m_mask;
           }
   
           // get the image bytes, and bytes properties
   
           // get uncompressed image bytes
  -        public byte[] getBitmaps() throws FopImageException {
  +        public byte[] getBitmaps() {
               return m_bitmaps;
           }
   
           // width * (bitsPerPixel / 8) * height, no ?
  -        public int getBitmapsSize() throws FopImageException {
  +        public int getBitmapsSize() {
               return m_width * m_height * 3;
           }
   
           // get compressed image bytes
           // I don't know if we really need it, nor if it
           // should be changed...
  -        public byte[] getRessourceBytes() throws FopImageException {
  +        public byte[] getRessourceBytes() {
               return null;
           }
   
  -        public int getRessourceBytesSize() throws FopImageException {
  +        public int getRessourceBytesSize() {
               return 0;
           }
   
           // return null if no corresponding PDFFilter
  -        public PDFFilter getPDFFilter() throws FopImageException {
  +        public PDFFilter getPDFFilter() {
               return null;
           }
   
  @@ -779,7 +788,6 @@
       public void drawRenderedImage(RenderedImage img, AffineTransform xform) {
           System.out.println("drawRenderedImage");
       }
  -
   
       /**
        * Renders a
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org