You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by tk...@apache.org on 2001/02/07 11:24:02 UTC

cvs commit: xml-batik/sources/org/apache/batik/bridge SVGFeBlendElementBridge.java SVGFeColorMatrixElementBridge.java SVGFeComponentTransferElementBridge.java SVGFeCompositeElementBridge.java SVGFeConvolveMatrixElementBridge.java SVGFeDiffuseLightingElementBridge.java SVGFeDisplacementMapElementBridge.java SVGFeFloodElementBridge.java SVGFeGaussianBlurElementBridge.java SVGFeImageElementBridge.java SVGFeMergeElementBridge.java SVGFeMorphologyElementBridge.java SVGFeOffsetElementBridge.java SVGFeSpecularLightingElementBridge.java SVGFeTileElementBridge.java SVGFeTurbulenceElementBridge.java SVGFilterElementBridge.java SVGUtilities.java

tkormann    01/02/07 02:24:02

  Modified:    sources/org/apache/batik/bridge SVGFeBlendElementBridge.java
                        SVGFeColorMatrixElementBridge.java
                        SVGFeComponentTransferElementBridge.java
                        SVGFeCompositeElementBridge.java
                        SVGFeConvolveMatrixElementBridge.java
                        SVGFeDiffuseLightingElementBridge.java
                        SVGFeDisplacementMapElementBridge.java
                        SVGFeFloodElementBridge.java
                        SVGFeGaussianBlurElementBridge.java
                        SVGFeImageElementBridge.java
                        SVGFeMergeElementBridge.java
                        SVGFeMorphologyElementBridge.java
                        SVGFeOffsetElementBridge.java
                        SVGFeSpecularLightingElementBridge.java
                        SVGFeTileElementBridge.java
                        SVGFeTurbulenceElementBridge.java
                        SVGFilterElementBridge.java SVGUtilities.java
  Log:
  primitiveUnits and filter primitives (the content of the filter element) are now
  inherited. xlink:href should be implemented everywhere it's needed.
  
  Revision  Changes    Path
  1.5       +8 -12     xml-batik/sources/org/apache/batik/bridge/SVGFeBlendElementBridge.java
  
  Index: SVGFeBlendElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeBlendElementBridge.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SVGFeBlendElementBridge.java	2001/02/06 09:30:49	1.4
  +++ SVGFeBlendElementBridge.java	2001/02/07 10:24:00	1.5
  @@ -12,12 +12,6 @@
   import java.util.Map;
   import java.util.Vector;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -import org.apache.batik.bridge.MissingAttributeException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.CompositeRable;
  @@ -43,7 +37,7 @@
    *
    * @author <a href="mailto:Thomas.DeWeeese@Kodak.com">Thomas DeWeese</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeBlendElementBridge.java,v 1.4 2001/02/06 09:30:49 tkormann Exp $
  + * @version $Id: SVGFeBlendElementBridge.java,v 1.5 2001/02/07 10:24:00 tkormann Exp $
    */
   public class SVGFeBlendElementBridge implements FilterPrimitiveBridge,
                                                   SVGConstants {
  @@ -73,9 +67,10 @@
                            Rectangle2D filterRegion,
                            Map filterMap){
   
  -         GraphicsNodeRenderContext rc =
  -                         bridgeContext.getGraphicsNodeRenderContext();
  +        GraphicsNodeRenderContext rc =
  +            bridgeContext.getGraphicsNodeRenderContext();
   
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
           // Extract Blend operation
           CompositeRule rule = getRule(filterElement);
   
  @@ -133,7 +128,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           // Now, do the blend.
           Filter filter = null;
  @@ -177,8 +173,8 @@
   
           } else {
               throw new IllegalAttributeValueException(
  -                Messages.formatMessage("feBlen.mode.invalid",
  -                                       new Object[] { ruleStr }));
  +                                                     Messages.formatMessage("feBlen.mode.invalid",
  +                                                                            new Object[] { ruleStr }));
           }
           return rule;
       }
  
  
  
  1.4       +4 -7      xml-batik/sources/org/apache/batik/bridge/SVGFeColorMatrixElementBridge.java
  
  Index: SVGFeColorMatrixElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeColorMatrixElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeColorMatrixElementBridge.java	2001/02/06 09:30:49	1.3
  +++ SVGFeColorMatrixElementBridge.java	2001/02/07 10:24:00	1.4
  @@ -13,11 +13,6 @@
   import java.util.Map;
   import java.util.StringTokenizer;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.ColorMatrixRable;
  @@ -43,7 +38,7 @@
    *
    * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeColorMatrixElementBridge.java,v 1.3 2001/02/06 09:30:49 tkormann Exp $
  + * @version $Id: SVGFeColorMatrixElementBridge.java,v 1.4 2001/02/07 10:24:00 tkormann Exp $
    */
   public class SVGFeColorMatrixElementBridge implements FilterPrimitiveBridge,
                                                         SVGConstants {
  @@ -76,6 +71,7 @@
   
           GraphicsNodeRenderContext rc =
                            bridgeContext.getGraphicsNodeRenderContext();
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
   
           // First, extract source
           String inAttr = filterElement.getAttributeNS(null, SVG_IN_ATTRIBUTE);
  @@ -117,7 +113,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           //
           // Extract the matrix type. Interpret the values accordingly.
  
  
  
  1.4       +4 -8      xml-batik/sources/org/apache/batik/bridge/SVGFeComponentTransferElementBridge.java
  
  Index: SVGFeComponentTransferElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeComponentTransferElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeComponentTransferElementBridge.java	2001/02/06 09:30:50	1.3
  +++ SVGFeComponentTransferElementBridge.java	2001/02/07 10:24:00	1.4
  @@ -13,12 +13,6 @@
   import java.util.Map;
   import java.util.StringTokenizer;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -import org.apache.batik.bridge.MissingAttributeException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.ComponentTransferFunction;
  @@ -46,7 +40,7 @@
    *
    * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeComponentTransferElementBridge.java,v 1.3 2001/02/06 09:30:50 tkormann Exp $
  + * @version $Id: SVGFeComponentTransferElementBridge.java,v 1.4 2001/02/07 10:24:00 tkormann Exp $
    */
   public class SVGFeComponentTransferElementBridge
           implements FilterPrimitiveBridge, SVGConstants {
  @@ -78,6 +72,7 @@
   
           GraphicsNodeRenderContext rc =
                            bridgeContext.getGraphicsNodeRenderContext();
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
   
           // First, extract source
           String inAttr = filterElement.getAttributeNS(null, SVG_IN_ATTRIBUTE);
  @@ -119,7 +114,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           //
           // Now, extract the various transfer functions. They
  
  
  
  1.5       +4 -8      xml-batik/sources/org/apache/batik/bridge/SVGFeCompositeElementBridge.java
  
  Index: SVGFeCompositeElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeCompositeElementBridge.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SVGFeCompositeElementBridge.java	2001/02/06 09:30:50	1.4
  +++ SVGFeCompositeElementBridge.java	2001/02/07 10:24:00	1.5
  @@ -12,12 +12,6 @@
   import java.util.Map;
   import java.util.Vector;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -import org.apache.batik.bridge.MissingAttributeException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.CompositeRable;
  @@ -43,7 +37,7 @@
    *
    * @author <a href="mailto:Thomas.DeWeeese@Kodak.com">Thomas DeWeese</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeCompositeElementBridge.java,v 1.4 2001/02/06 09:30:50 tkormann Exp $
  + * @version $Id: SVGFeCompositeElementBridge.java,v 1.5 2001/02/07 10:24:00 tkormann Exp $
    */
   public class SVGFeCompositeElementBridge implements FilterPrimitiveBridge,
                                                       SVGConstants {
  @@ -76,6 +70,7 @@
           GraphicsNodeRenderContext rc =
                            bridgeContext.getGraphicsNodeRenderContext();
   
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
           // Extract Composite operation
           CompositeRule rule = getRule(filterElement);
   
  @@ -133,7 +128,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           // Now, do the composite.
           Filter filter = null;
  
  
  
  1.4       +4 -7      xml-batik/sources/org/apache/batik/bridge/SVGFeConvolveMatrixElementBridge.java
  
  Index: SVGFeConvolveMatrixElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeConvolveMatrixElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeConvolveMatrixElementBridge.java	2001/02/06 09:30:51	1.3
  +++ SVGFeConvolveMatrixElementBridge.java	2001/02/07 10:24:00	1.4
  @@ -16,11 +16,6 @@
   
   import java.util.Map;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.Filter;
  @@ -44,7 +39,7 @@
    * <tt>ConvolveMatrixRable</tt>
    *
    * @author <a href="mailto:Thomas.DeWeese@Kodak.com">Thomas DeWeese</a>
  - * @version $Id: SVGFeConvolveMatrixElementBridge.java,v 1.3 2001/02/06 09:30:51 tkormann Exp $
  + * @version $Id: SVGFeConvolveMatrixElementBridge.java,v 1.4 2001/02/07 10:24:00 tkormann Exp $
    */
   public class SVGFeConvolveMatrixElementBridge implements FilterPrimitiveBridge,
                                                          SVGConstants {
  @@ -72,6 +67,7 @@
                            Rectangle2D filterRegion,
                            Map filterMap){
   
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
           // Extract kernel Order (Size)
           String attrStr;
           attrStr = filterElement.getAttributeNS(null, SVG_ORDER_ATTRIBUTE);
  @@ -277,7 +273,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           PadRable pad;
           pad = new PadRable8Bit(in, convolveArea, PadMode.ZERO_PAD);
  
  
  
  1.4       +4 -8      xml-batik/sources/org/apache/batik/bridge/SVGFeDiffuseLightingElementBridge.java
  
  Index: SVGFeDiffuseLightingElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeDiffuseLightingElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeDiffuseLightingElementBridge.java	2001/02/06 09:30:51	1.3
  +++ SVGFeDiffuseLightingElementBridge.java	2001/02/07 10:24:01	1.4
  @@ -14,12 +14,6 @@
   import java.util.Map;
   import java.util.StringTokenizer;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -import org.apache.batik.bridge.MissingAttributeException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.Light;
  @@ -46,7 +40,7 @@
    * a concrete <tt>Filter</tt> filter implementation
    *
    * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
  - * @version $Id: SVGFeDiffuseLightingElementBridge.java,v 1.3 2001/02/06 09:30:51 tkormann Exp $
  + * @version $Id: SVGFeDiffuseLightingElementBridge.java,v 1.4 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGFeDiffuseLightingElementBridge
           implements FilterPrimitiveBridge, SVGConstants {
  @@ -79,6 +73,7 @@
           GraphicsNodeRenderContext rc =
                            bridgeContext.getGraphicsNodeRenderContext();
   
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
           // First, extract source
           String inAttr = filterElement.getAttributeNS(null, SVG_IN_ATTRIBUTE);
           in = CSSUtilities.getFilterSource(filteredNode,
  @@ -119,7 +114,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
   
           // Extract the light color
  
  
  
  1.4       +4 -8      xml-batik/sources/org/apache/batik/bridge/SVGFeDisplacementMapElementBridge.java
  
  Index: SVGFeDisplacementMapElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeDisplacementMapElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeDisplacementMapElementBridge.java	2001/02/06 09:30:51	1.3
  +++ SVGFeDisplacementMapElementBridge.java	2001/02/07 10:24:01	1.4
  @@ -13,12 +13,6 @@
   import java.util.Map;
   import java.util.Vector;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -import org.apache.batik.bridge.MissingAttributeException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.ARGBChannel;
  @@ -44,7 +38,7 @@
    *
    * @author <a href="mailto:sheng.pei@eng.sun.com">Sheng Pei</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeDisplacementMapElementBridge.java,v 1.3 2001/02/06 09:30:51 tkormann Exp $
  + * @version $Id: SVGFeDisplacementMapElementBridge.java,v 1.4 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGFeDisplacementMapElementBridge implements FilterPrimitiveBridge,
                                                             SVGConstants {
  @@ -75,6 +69,7 @@
           GraphicsNodeRenderContext rc =
                            bridgeContext.getGraphicsNodeRenderContext();
   
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
           //
           // Extract standard deviation
           //
  @@ -152,7 +147,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           PadRable pad = new PadRable8Bit(in, dispArea, PadMode.ZERO_PAD);
   
  
  
  
  1.4       +4 -6      xml-batik/sources/org/apache/batik/bridge/SVGFeFloodElementBridge.java
  
  Index: SVGFeFloodElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeFloodElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeFloodElementBridge.java	2001/02/06 09:30:52	1.3
  +++ SVGFeFloodElementBridge.java	2001/02/07 10:24:01	1.4
  @@ -14,10 +14,6 @@
   import java.util.Map;
   import java.util.StringTokenizer;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.Filter;
  @@ -48,7 +44,7 @@
    *
    * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeFloodElementBridge.java,v 1.3 2001/02/06 09:30:52 tkormann Exp $
  + * @version $Id: SVGFeFloodElementBridge.java,v 1.4 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGFeFloodElementBridge implements FilterPrimitiveBridge,
                                                   SVGConstants {
  @@ -80,6 +76,7 @@
           GraphicsNodeRenderContext rc =
                            bridgeContext.getGraphicsNodeRenderContext();
   
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
           // Extract flood color
           CSSStyleDeclaration decl
               = CSSUtilities.getComputedStyle(filterElement);
  @@ -99,7 +96,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           // First, create the FloodRable that maps the input filter node
           FloodRable flood = new FloodRable8Bit(floodRegion, floodColor);
  
  
  
  1.4       +5 -7      xml-batik/sources/org/apache/batik/bridge/SVGFeGaussianBlurElementBridge.java
  
  Index: SVGFeGaussianBlurElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeGaussianBlurElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeGaussianBlurElementBridge.java	2001/02/06 09:30:52	1.3
  +++ SVGFeGaussianBlurElementBridge.java	2001/02/07 10:24:01	1.4
  @@ -11,11 +11,6 @@
   import java.awt.geom.Rectangle2D;
   import java.util.Map;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.Filter;
  @@ -40,7 +35,7 @@
    *
    * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeGaussianBlurElementBridge.java,v 1.3 2001/02/06 09:30:52 tkormann Exp $
  + * @version $Id: SVGFeGaussianBlurElementBridge.java,v 1.4 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGFeGaussianBlurElementBridge implements FilterPrimitiveBridge,
                                                          SVGConstants {
  @@ -71,6 +66,8 @@
           GraphicsNodeRenderContext rc =
                            bridgeContext.getGraphicsNodeRenderContext();
   
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
  +
           // Extract standard deviation
           String stdDeviation =
               filterElement.getAttributeNS(null, ATTR_STD_DEVIATION);
  @@ -147,7 +144,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           PadRable pad = new PadRable8Bit(in, blurArea, PadMode.ZERO_PAD);
   
  
  
  
  1.4       +3 -7      xml-batik/sources/org/apache/batik/bridge/SVGFeImageElementBridge.java
  
  Index: SVGFeImageElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeImageElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeImageElementBridge.java	2001/02/06 09:30:53	1.3
  +++ SVGFeImageElementBridge.java	2001/02/07 10:24:01	1.4
  @@ -17,12 +17,6 @@
   import java.util.Map;
   import java.util.Vector;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -import org.apache.batik.bridge.MissingAttributeException;
  -
   import org.apache.batik.dom.svg.SVGOMDocument;
   import org.apache.batik.dom.util.XLinkSupport;
   
  @@ -86,6 +80,7 @@
   
           GraphicsNodeRenderContext rc =
                             bridgeContext.getGraphicsNodeRenderContext();
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
   
           SVGElement svgElement = (SVGElement) filterElement;
   
  @@ -113,7 +108,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           Filter filter = null;
           if (uriStr.startsWith(PROTOCOL_DATA)) {
  
  
  
  1.6       +4 -7      xml-batik/sources/org/apache/batik/bridge/SVGFeMergeElementBridge.java
  
  Index: SVGFeMergeElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeMergeElementBridge.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SVGFeMergeElementBridge.java	2001/02/06 09:30:53	1.5
  +++ SVGFeMergeElementBridge.java	2001/02/07 10:24:01	1.6
  @@ -14,11 +14,6 @@
   import java.util.LinkedList;
   import java.util.List;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.CompositeRable;
  @@ -43,7 +38,7 @@
    *
    * @author <a href="mailto:Thomas.DeWeeese@Kodak.com">Thomas DeWeese</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeMergeElementBridge.java,v 1.5 2001/02/06 09:30:53 tkormann Exp $
  + * @version $Id: SVGFeMergeElementBridge.java,v 1.6 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGFeMergeElementBridge implements FilterPrimitiveBridge,
                                                   SVGConstants {
  @@ -74,6 +69,7 @@
   
           GraphicsNodeRenderContext rc =
                        bridgeContext.getGraphicsNodeRenderContext();
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
   
           // Extract sources, they are defined in the filterElement's children.
           List srcs = new LinkedList();
  @@ -136,7 +132,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           Filter filter = null;
           filter = new CompositeRable8Bit(srcs, CompositeRule.OVER, true);
  
  
  
  1.4       +4 -7      xml-batik/sources/org/apache/batik/bridge/SVGFeMorphologyElementBridge.java
  
  Index: SVGFeMorphologyElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeMorphologyElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeMorphologyElementBridge.java	2001/02/06 09:30:53	1.3
  +++ SVGFeMorphologyElementBridge.java	2001/02/07 10:24:01	1.4
  @@ -11,11 +11,6 @@
   import java.awt.geom.Rectangle2D;
   import java.util.Map;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.Filter;
  @@ -40,7 +35,7 @@
    *
    * @author <a href="mailto:sheng.pei@eng.sun.com">Sheng Pei</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeMorphologyElementBridge.java,v 1.3 2001/02/06 09:30:53 tkormann Exp $
  + * @version $Id: SVGFeMorphologyElementBridge.java,v 1.4 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGFeMorphologyElementBridge implements FilterPrimitiveBridge,
                                                        SVGConstants {
  @@ -71,6 +66,7 @@
   
           GraphicsNodeRenderContext rc =
                        bridgeContext.getGraphicsNodeRenderContext();
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
   
           // Extract the radius (or radii) for the operation.
           String radius = filterElement.getAttributeNS(null, ATTR_RADIUS);
  @@ -160,7 +156,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           PadRable pad = new PadRable8Bit(in,
                                               primitiveRegion,
  
  
  
  1.4       +5 -6      xml-batik/sources/org/apache/batik/bridge/SVGFeOffsetElementBridge.java
  
  Index: SVGFeOffsetElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeOffsetElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeOffsetElementBridge.java	2001/02/06 09:30:54	1.3
  +++ SVGFeOffsetElementBridge.java	2001/02/07 10:24:01	1.4
  @@ -15,10 +15,6 @@
   import java.util.Map;
   import java.util.StringTokenizer;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.AffineRable;
  @@ -50,7 +46,7 @@
    *
    * @author <a href="mailto:dean@w3.org">Dean Jackson</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeOffsetElementBridge.java,v 1.3 2001/02/06 09:30:54 tkormann Exp $
  + * @version $Id: SVGFeOffsetElementBridge.java,v 1.4 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGFeOffsetElementBridge implements FilterPrimitiveBridge,
                                                    SVGConstants {
  @@ -82,6 +78,8 @@
           GraphicsNodeRenderContext rc =
                            bridgeContext.getGraphicsNodeRenderContext();
   
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
  +
           // parse the dx attribute
           String dxAttr = filterElement.getAttributeNS(null, SVG_DX_ATTRIBUTE);
           float dx = 0; // default is 0
  @@ -138,7 +136,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           PadRable pad = new PadRable8Bit(in,
                                               offsetArea,
  
  
  
  1.4       +4 -8      xml-batik/sources/org/apache/batik/bridge/SVGFeSpecularLightingElementBridge.java
  
  Index: SVGFeSpecularLightingElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeSpecularLightingElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeSpecularLightingElementBridge.java	2001/02/06 09:30:54	1.3
  +++ SVGFeSpecularLightingElementBridge.java	2001/02/07 10:24:01	1.4
  @@ -14,12 +14,6 @@
   import java.util.Map;
   import java.util.StringTokenizer;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -import org.apache.batik.bridge.MissingAttributeException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.Light;
  @@ -46,7 +40,7 @@
    * a concrete <tt>Filter</tt> filter implementation
    *
    * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
  - * @version $Id: SVGFeSpecularLightingElementBridge.java,v 1.3 2001/02/06 09:30:54 tkormann Exp $
  + * @version $Id: SVGFeSpecularLightingElementBridge.java,v 1.4 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGFeSpecularLightingElementBridge
           implements FilterPrimitiveBridge, SVGConstants {
  @@ -78,6 +72,7 @@
   
           GraphicsNodeRenderContext rc =
                            bridgeContext.getGraphicsNodeRenderContext();
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
   
           // First, extract source
           String inAttr = filterElement.getAttributeNS(null, SVG_IN_ATTRIBUTE);
  @@ -119,7 +114,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
   
           // Extract the light color
  
  
  
  1.5       +4 -6      xml-batik/sources/org/apache/batik/bridge/SVGFeTileElementBridge.java
  
  Index: SVGFeTileElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeTileElementBridge.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SVGFeTileElementBridge.java	2001/02/06 09:30:54	1.4
  +++ SVGFeTileElementBridge.java	2001/02/07 10:24:01	1.5
  @@ -11,10 +11,6 @@
   import java.awt.geom.Rectangle2D;
   import java.util.Map;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.Filter;
  @@ -35,7 +31,7 @@
    *
    * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeTileElementBridge.java,v 1.4 2001/02/06 09:30:54 tkormann Exp $
  + * @version $Id: SVGFeTileElementBridge.java,v 1.5 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGFeTileElementBridge implements FilterPrimitiveBridge,
                                                  SVGConstants {
  @@ -66,6 +62,7 @@
   
           GraphicsNodeRenderContext rc =
                            bridgeContext.getGraphicsNodeRenderContext();
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
   
           //
           // Tile region is defined by the filter region
  @@ -89,7 +86,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           //
           // Get the tile source
  
  
  
  1.4       +6 -9      xml-batik/sources/org/apache/batik/bridge/SVGFeTurbulenceElementBridge.java
  
  Index: SVGFeTurbulenceElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFeTurbulenceElementBridge.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SVGFeTurbulenceElementBridge.java	2001/02/06 09:30:55	1.3
  +++ SVGFeTurbulenceElementBridge.java	2001/02/07 10:24:01	1.4
  @@ -14,11 +14,6 @@
   import java.awt.image.renderable.RenderContext;
   import java.util.Map;
   
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -
   import org.apache.batik.gvt.GraphicsNode;
   import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.ext.awt.image.renderable.Clip;
  @@ -44,7 +39,7 @@
    *
    * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGFeTurbulenceElementBridge.java,v 1.3 2001/02/06 09:30:55 tkormann Exp $
  + * @version $Id: SVGFeTurbulenceElementBridge.java,v 1.4 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGFeTurbulenceElementBridge implements FilterPrimitiveBridge,
                                                        SVGConstants {
  @@ -72,8 +67,9 @@
                            Rectangle2D filterRegion,
                            Map filterMap){
   
  -         GraphicsNodeRenderContext rc =
  -                         bridgeContext.getGraphicsNodeRenderContext();
  +        GraphicsNodeRenderContext rc =
  +            bridgeContext.getGraphicsNodeRenderContext();
  +        DocumentLoader loader = bridgeContext.getDocumentLoader();
   
           // parse the baseFrequency attribute
           String baseFrequencyAttr =
  @@ -161,7 +157,8 @@
                                                           filterRegion,
                                                           filteredNode,
                                                           rc,
  -                                                        uctx);
  +                                                        uctx,
  +                                                        loader);
   
           TurbulenceRable turbulenceRable
               = new TurbulenceRable8Bit(turbulenceRegion);
  
  
  
  1.5       +75 -43    xml-batik/sources/org/apache/batik/bridge/SVGFilterElementBridge.java
  
  Index: SVGFilterElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGFilterElementBridge.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SVGFilterElementBridge.java	2001/02/07 09:38:27	1.4
  +++ SVGFilterElementBridge.java	2001/02/07 10:24:01	1.5
  @@ -10,41 +10,41 @@
   
   import java.awt.Shape;
   import java.awt.geom.Rectangle2D;
  +import java.io.IOException;
  +import java.net.MalformedURLException;
  +import java.net.URL;
  +import java.util.ArrayList;
   import java.util.HashMap;
  +import java.util.Iterator;
  +import java.util.LinkedList;
  +import java.util.List;
   import java.util.Map;
   import java.util.StringTokenizer;
  -
  -import org.apache.batik.bridge.Bridge;
  -import org.apache.batik.bridge.BridgeContext;
  -import org.apache.batik.bridge.BridgeMutationEvent;
  -import org.apache.batik.bridge.FilterBridge;
  -import org.apache.batik.bridge.FilterPrimitiveBridge;
  -import org.apache.batik.bridge.IllegalAttributeValueException;
  -
  -import org.apache.batik.gvt.GraphicsNode;
  -import org.apache.batik.gvt.GraphicsNodeRenderContext;
  +import org.apache.batik.bridge.resources.Messages;
  +import org.apache.batik.dom.svg.SVGOMDocument;
  +import org.apache.batik.dom.util.XLinkSupport;
   import org.apache.batik.ext.awt.image.renderable.Filter;
  +import org.apache.batik.ext.awt.image.renderable.FilterChainRable8Bit;
   import org.apache.batik.ext.awt.image.renderable.FilterChainRable;
  +import org.apache.batik.gvt.GraphicsNode;
  +import org.apache.batik.gvt.GraphicsNodeRenderContext;
   import org.apache.batik.gvt.filter.GraphicsNodeRable;
   import org.apache.batik.gvt.filter.GraphicsNodeRableFactory;
  -
  -import org.apache.batik.bridge.resources.Messages;
  -import org.apache.batik.ext.awt.image.renderable.FilterChainRable8Bit;
  -
   import org.apache.batik.util.SVGConstants;
   import org.apache.batik.util.UnitProcessor;
  -
   import org.w3c.dom.Element;
   import org.w3c.dom.Node;
   import org.w3c.dom.NodeList;
   import org.w3c.dom.css.CSSStyleDeclaration;
  +import org.w3c.dom.svg.SVGDocument;
  +import org.xml.sax.SAXException;
   
   /**
    * This class bridges an SVG <tt>filter</tt> element with a concrete
    * <tt>Filter</tt>.
    *
    * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a>
  - * @version $Id: SVGFilterElementBridge.java,v 1.4 2001/02/07 09:38:27 tkormann Exp $
  + * @version $Id: SVGFilterElementBridge.java,v 1.5 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGFilterElementBridge implements FilterBridge, SVGConstants {
   
  @@ -144,37 +144,69 @@
               filterNodeMap.put(VALUE_SOURCE_GRAPHIC, sourceGraphic);
           }
   
  -        for (Node child=filterElement.getFirstChild();
  +        Element e = filterElement;
  +        List refs = new LinkedList();
  +        boolean hasPrimitives = false;
  +        for (;;) {
  +            for (Node child=e.getFirstChild();
                    child != null;
                    child = child.getNextSibling()) {
   
  -            if (child.getNodeType() != Node.ELEMENT_NODE) {
  -                continue; // skip node that is not an Element
  -            }
  -            Element elt = (Element)child;
  -            Bridge bridge = bridgeContext.getBridge(elt);
  -            if (bridge == null || !(bridge instanceof FilterPrimitiveBridge)) {
  -                continue;
  -                /*
  -                throw new IllegalAttributeValueException(
  -                    Messages.formatMessage("filter.subelement.illegal",
  -                                           new Object[] {elt.getLocalName()}));*/
  -            }
  -            FilterPrimitiveBridge filterBridge =
  -                (FilterPrimitiveBridge)bridge;
  -            Filter filterNode = filterBridge.create(filteredNode,
  -                                                    bridgeContext,
  -                                                    elt,
  -                                                    filteredElement,
  -                                                    in,
  -                                                    filterRegion,
  -                                                    filterNodeMap);
  -            if (filterNode == null) {
  -                throw new IllegalAttributeValueException(
  -                    Messages.formatMessage("filter.subelement.invalid",
  -                                           new Object[] {elt.getLocalName()}));
  +                if (child.getNodeType() != Node.ELEMENT_NODE) {
  +                    continue; // skip node that is not an Element
  +                }
  +                hasPrimitives = true;
  +                Element elt = (Element)child;
  +                Bridge bridge = bridgeContext.getBridge(elt);
  +                if (bridge == null || !(bridge instanceof FilterPrimitiveBridge)) {
  +                    continue;
  +                }
  +                FilterPrimitiveBridge filterBridge =
  +                    (FilterPrimitiveBridge)bridge;
  +                Filter filterNode = filterBridge.create(filteredNode,
  +                                                        bridgeContext,
  +                                                        elt,
  +                                                        filteredElement,
  +                                                        in,
  +                                                        filterRegion,
  +                                                        filterNodeMap);
  +                if (filterNode == null) {
  +                    throw new IllegalAttributeValueException(
  +                        Messages.formatMessage("filter.subelement.invalid",
  +                                               new Object[] {elt.getLocalName()}));
  +                }
  +                in = filterNode;
  +            }
  +            if (hasPrimitives) {
  +                break; // exit if filter primitives have been found
  +            }
  +            String uriStr = XLinkSupport.getXLinkHref(e);
  +            if (uriStr.length() == 0) {
  +                break; // exit if no more xlink:href
  +            }
  +            SVGDocument svgDoc = (SVGDocument)e.getOwnerDocument();
  +            URL baseURL = ((SVGOMDocument)svgDoc).getURLObject();
  +            try {
  +                URL url = new URL(baseURL, uriStr);
  +                Iterator iter = refs.iterator();
  +                while (iter.hasNext()) {
  +                    URL urlTmp = (URL)iter.next();
  +                    if (urlTmp.sameFile(url) &&
  +                            urlTmp.getRef().equals(url.getRef())) {
  +                        throw new IllegalAttributeValueException(
  +                            "circular reference on "+e);
  +                    }
  +                }
  +                URIResolver resolver = new URIResolver(svgDoc, loader);
  +                e = resolver.getElement(url.toString());
  +                refs.add(url);
  +            } catch(MalformedURLException ex) {
  +                throw new IllegalAttributeValueException("bad url on "+uriStr);
  +            } catch(SAXException ex) {
  +                throw new IllegalAttributeValueException("bad document on "+uriStr);
  +            } catch(IOException ex) {
  +                throw new IllegalAttributeValueException("I/O error on "+uriStr);
               }
  -            in = filterNode;
           }
   
           // Set the source on the filter node
  
  
  
  1.5       +7 -3      xml-batik/sources/org/apache/batik/bridge/SVGUtilities.java
  
  Index: SVGUtilities.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGUtilities.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SVGUtilities.java	2001/02/07 09:38:28	1.4
  +++ SVGUtilities.java	2001/02/07 10:24:01	1.5
  @@ -50,7 +50,7 @@
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: SVGUtilities.java,v 1.4 2001/02/07 09:38:28 tkormann Exp $
  + * @version $Id: SVGUtilities.java,v 1.5 2001/02/07 10:24:01 tkormann Exp $
    */
   public class SVGUtilities implements SVGConstants {
       /**
  @@ -956,7 +956,8 @@
                                                    Rectangle2D filterRegion,
                                                    GraphicsNode node,
                                                    GraphicsNodeRenderContext rc,
  -                                                 UnitProcessor.Context uctx) {
  +                                                 UnitProcessor.Context uctx,
  +                                                 DocumentLoader loader) {
   
           // Get coordinate system from the parent node.
           Node parentNode = filterPrimitiveElement.getParentNode();
  @@ -964,7 +965,10 @@
           if((parentNode != null) &&
                  (parentNode.getNodeType() == parentNode.ELEMENT_NODE)) {
               Element parent = (Element) parentNode;
  -            units = parent.getAttributeNS(null, SVG_PRIMITIVE_UNITS_ATTRIBUTE);
  +            units = getChainableAttributeNS(parent,
  +                                            null,
  +                                            SVG_PRIMITIVE_UNITS_ATTRIBUTE,
  +                                            loader);
           }
           if(units.length() == 0){
               units = SVG_USER_SPACE_ON_USE_VALUE;