You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2014/02/10 22:47:57 UTC
svn commit: r1566760 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: pdfviewer/
pdmodel/common/ pdmodel/graphics/pattern/ pdmodel/graphics/pattern/tiling/
util/
Author: lehmi
Date: Mon Feb 10 21:47:56 2014
New Revision: 1566760
URL: http://svn.apache.org/r1566760
Log:
PDFBOX-1094: added colored tiling support
Added:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingContext.java (with props)
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingPaint.java (with props)
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/package.html (with props)
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPatternResources.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java?rev=1566760&r1=1566759&r2=1566760&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java Mon Feb 10 21:47:56 2014
@@ -82,9 +82,9 @@ import org.apache.pdfbox.util.TextPositi
/**
* This will paint a page in a PDF document to a graphics context.
- *
+ *
* @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
- *
+ *
*/
public class PageDrawer extends PDFStreamEngine
{
@@ -182,10 +182,30 @@ public class PageDrawer extends PDFStrea
}
/**
+ * This will draw the page to the requested context.
+ *
+ * @param g The graphics context to draw onto.
+ * @param stream The stream to be used.
+ * @param resources resources to be used when drawing the stream
+ * @param pageDimension The size of the page to draw.
+ *
+ * @throws IOException If there is an IO error while drawing the page.
+ */
+ public void drawStream(Graphics g, COSStream stream, PDResources resources, PDRectangle pageDimension)
+ throws IOException
+ {
+ graphics = (Graphics2D) g;
+ graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
+ processStream(resources, stream, pageDimension, 0);
+ }
+
+ /**
* Remove all cached resources.
*/
public void dispose()
{
+ super.dispose();
if (fontGlyph2D != null)
{
Iterator<Glyph2D> iter = fontGlyph2D.values().iterator();
@@ -358,7 +378,6 @@ public class PageDrawer extends PDFStrea
ctm.setFromAffineTransform(at);
getGraphicsState().setCurrentTransformationMatrix(ctm);
processSubStream(font.getType3Resources(), stream);
-
// restore the saved graphics state
setGraphicsState((PDGraphicsState) getGraphicsStack().pop());
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java?rev=1566760&r1=1566759&r2=1566760&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java Mon Feb 10 21:47:56 2014
@@ -29,7 +29,7 @@ import java.awt.Dimension;
* This represents a rectangle in a PDF document.
*
* @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
- * @version $Revision: 1.12 $
+ *
*/
public class PDRectangle implements COSObjectable
{
@@ -42,11 +42,7 @@ public class PDRectangle implements COSO
*/
public PDRectangle()
{
- rectArray = new COSArray();
- rectArray.add( new COSFloat( 0.0f ) );
- rectArray.add( new COSFloat( 0.0f ) );
- rectArray.add( new COSFloat( 0.0f ) );
- rectArray.add( new COSFloat( 0.0f ) );
+ this(0.0f, 0.0f, 0.0f, 0.0f);
}
/**
@@ -57,9 +53,22 @@ public class PDRectangle implements COSO
*/
public PDRectangle( float width, float height )
{
+ this(0.0f, 0.0f, width, height);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width The width of the rectangle.
+ * @param height The height of the rectangle.
+ */
+ public PDRectangle( float x, float y, float width, float height )
+ {
rectArray = new COSArray();
- rectArray.add( new COSFloat( 0.0f ) );
- rectArray.add( new COSFloat( 0.0f ) );
+ rectArray.add( new COSFloat( x ) );
+ rectArray.add( new COSFloat( y ) );
rectArray.add( new COSFloat( width ) );
rectArray.add( new COSFloat( height ) );
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPatternResources.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPatternResources.java?rev=1566760&r1=1566759&r2=1566760&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPatternResources.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPatternResources.java Mon Feb 10 21:47:56 2014
@@ -21,24 +21,51 @@ import java.awt.Paint;
import java.awt.geom.AffineTransform;
import java.io.IOException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSFloat;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSNumber;
-import org.apache.pdfbox.pdmodel.graphics.pattern.PDPatternResources;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.graphics.pattern.tiling.ColoredTilingPaint;
import org.apache.pdfbox.util.Matrix;
/**
* This represents the resources for a tiling pattern.
*
- * @version $Revision: 1.0 $
*/
public class PDTilingPatternResources extends PDPatternResources
{
-
+ /**
+ * Log instance.
+ */
+ private static final Log LOG = LogFactory.getLog(PDTilingPatternResources.class);
+
+ /**
+ * paint type 1 = colored tiling pattern.
+ */
+ public static final int COLORED_TILING_PATTERN = 1;
+ /**
+ * paint type 2 = uncolored tiling pattern.
+ */
+ public static final int UNCOLORED_TILING_PATTERN = 2;
+
+ /**
+ * tiling type 1 = constant spacing.
+ */
+ public static final int TILING_CONSTANT_SPACING = 1;
+ /**
+ * tiling type 2 = no distortion.
+ */
+ public static final int TILING_NO_DISTORTION = 2;
+ /**
+ * tiling type 3 = constant spacing and faster tiling.
+ */
+ public static final int TILING_CONSTANT_SPACING_FASTER_TILING = 3;
+
/**
* Default constructor.
*/
@@ -279,8 +306,20 @@ public class PDTilingPatternResources ex
@Override
public Paint getPaint(int pageHeight) throws IOException
{
- // TODO Auto-generated method stub
- return null;
+ Paint paint = null;
+ int paintType = getPaintType();
+ switch (paintType)
+ {
+ case COLORED_TILING_PATTERN:
+ paint = new ColoredTilingPaint(this);
+ break;
+ case UNCOLORED_TILING_PATTERN:
+ LOG.debug("Error: Unsupported pattern type " + paintType);
+ break;
+ default:
+ throw new IOException("Error: Unknown paint type " + getPaintType());
+ }
+ return paint;
}
}
Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingContext.java?rev=1566760&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingContext.java (added)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingContext.java Mon Feb 10 21:47:56 2014
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.pdmodel.graphics.pattern.tiling;
+
+import java.awt.PaintContext;
+import java.awt.color.ColorSpace;
+import java.awt.image.ColorModel;
+import java.awt.image.Raster;
+import java.awt.image.WritableRaster;
+import java.util.Arrays;
+
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+
+/**
+ * This class represents the PaintContext of an axial shading.
+ *
+ */
+public class ColoredTilingContext implements PaintContext
+{
+
+ private ColorModel outputColorModel;
+ private Raster tilingImage;
+
+ private int xstep;
+ private int ystep;
+ private int lowerLeftX;
+ private int lowerLeftY;
+
+ /**
+ * Constructor creates an instance to be used for fill operations.
+ *
+ * @param cm the colormodel to be used
+ * @param image the tiling image
+ * @param xStep horizontal spacing between pattern cells
+ * @param yStep vertical spacing between pattern cells
+ * @param bBox bounding box of the tiling image
+ *
+ */
+ public ColoredTilingContext(ColorModel cm, Raster image, int xStep, int yStep, PDRectangle bBox)
+ {
+ outputColorModel = cm;
+ tilingImage = image;
+ xstep = Math.abs(xStep);
+ ystep = Math.abs(yStep);
+ lowerLeftX = (int) bBox.getLowerLeftX();
+ lowerLeftY = (int) bBox.getLowerLeftY();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void dispose()
+ {
+ outputColorModel = null;
+ tilingImage = null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public ColorModel getColorModel()
+ {
+ return outputColorModel;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Raster getRaster(int x, int y, int w, int h)
+ {
+ // get underlying colorspace
+ ColorSpace cs = getColorModel().getColorSpace();
+ // number of color components including alpha channel
+ int numComponents = cs.getNumComponents() + 1;
+ // all the data, plus alpha channel
+ int[] imgData = new int[w * h * (numComponents)];
+
+ // array holding the processed pixels
+ int[] pixel = new int[numComponents];
+
+ // for each device coordinate
+ for (int j = 0; j < h; j++)
+ {
+ for (int i = 0; i < w; i++)
+ {
+ // figure out what pixel we are at relative to the image
+ int xloc = (x + i) - lowerLeftX;
+ int yloc = (y + j) - lowerLeftY;
+
+ xloc %= xstep;
+ yloc %= ystep;
+
+ if (xloc < 0)
+ {
+ xloc = xstep + xloc;
+ }
+ if (yloc < 0)
+ {
+ yloc = ystep + yloc;
+ }
+
+ // check if we are inside the image
+ if (xloc < tilingImage.getWidth() && yloc < tilingImage.getHeight())
+ {
+ tilingImage.getPixel(xloc, yloc, pixel);
+ }
+ else
+ {
+ Arrays.fill(pixel, 0);
+ }
+ int base = (j * w + i) * numComponents;
+ for (int c = 0; c < numComponents; c++)
+ {
+ imgData[base + c] = pixel[c];
+ }
+ }
+ }
+ WritableRaster raster = getColorModel().createCompatibleWritableRaster(w, h);
+ raster.setPixels(0, 0, w, h, imgData);
+ return raster;
+ }
+}
Propchange: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingContext.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingPaint.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingPaint.java?rev=1566760&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingPaint.java (added)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingPaint.java Mon Feb 10 21:47:56 2014
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.pdmodel.graphics.pattern.tiling;
+
+import java.awt.Paint;
+import java.awt.PaintContext;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.Transparency;
+import java.awt.color.ColorSpace;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.AffineTransformOp;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.ComponentColorModel;
+import java.awt.image.DataBuffer;
+import java.awt.image.WritableRaster;
+import java.io.IOException;
+
+import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.pdfviewer.PageDrawer;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPatternResources;
+import org.apache.pdfbox.util.Matrix;
+
+/**
+ * This represents the Paint of an axial shading.
+ *
+ */
+public class ColoredTilingPaint implements Paint
+{
+ private PDTilingPatternResources patternResources;
+ private ColorModel outputColorModel;
+
+ /**
+ * Constructor.
+ *
+ * @param resources tiling pattern resources
+ *
+ */
+ public ColoredTilingPaint(PDTilingPatternResources resources)
+ {
+ patternResources = resources;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int getTransparency()
+ {
+ return Transparency.TRANSLUCENT;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds,
+ AffineTransform xform, RenderingHints hints)
+ {
+ // get the pattern matrix
+ Matrix patternMatrix = patternResources.getMatrix();
+ AffineTransform patternAT = patternMatrix != null ? patternMatrix.createAffineTransform() : null;
+
+ // get the bounding box
+ PDRectangle box = patternResources.getBBox();
+ Rectangle2D rect = new Rectangle((int) box.getLowerLeftX(), (int) box.getLowerLeftY(),
+ (int) box.getWidth(), (int) box.getHeight());
+
+ rect = xform.createTransformedShape(rect).getBounds2D();
+ int width = (int) rect.getWidth();
+ int height = (int) rect.getHeight();
+
+ if (patternAT != null)
+ {
+ rect = patternAT.createTransformedShape(rect).getBounds2D();
+ }
+ PDRectangle bBox = new PDRectangle((float) rect.getMinX(), (float) rect.getMinY(), (float) rect.getMaxX(),
+ (float) rect.getMaxY());
+
+ // xStep + yStep
+ double[] steps = new double[] { patternResources.getXStep(), patternResources.getYStep() };
+ xform.deltaTransform(steps, 0, steps, 0, 1);
+ if (patternAT != null)
+ {
+ patternAT.deltaTransform(steps, 0, steps, 0, 1);
+ }
+ int xStep = (int) (steps[0]);
+ int yStep = (int) (steps[1]);
+
+ ColorSpace outputCS = ColorSpace.getInstance(ColorSpace.CS_sRGB);
+ outputColorModel = new ComponentColorModel(outputCS, true, false, Transparency.TRANSLUCENT,
+ DataBuffer.TYPE_BYTE);
+ WritableRaster raster = outputColorModel.createCompatibleWritableRaster(width, height);
+
+ BufferedImage image = new BufferedImage(outputColorModel, raster, false, null);
+ BufferedImage tilingImage = null;
+ try
+ {
+ PageDrawer drawer = new PageDrawer();
+ drawer.drawStream(image.getGraphics(), (COSStream) patternResources.getCOSObject(),
+ patternResources.getResources(), box);
+ drawer.dispose();
+ }
+ catch (IOException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ AffineTransform imageTransform = null;
+ if (patternAT != null && !patternAT.isIdentity())
+ {
+ // get the scaling factor for each dimension
+ imageTransform = AffineTransform.getScaleInstance(patternMatrix.getXScale(), patternMatrix.getYScale());
+ }
+ else
+ {
+ imageTransform = new AffineTransform();
+ }
+ imageTransform.scale(1.0, -1.0);
+ imageTransform.translate(0, -height);
+ AffineTransformOp scaleOP = new AffineTransformOp(imageTransform, AffineTransformOp.TYPE_BILINEAR);
+ tilingImage = scaleOP.filter(image, null);
+
+ return new ColoredTilingContext(outputColorModel, tilingImage.getData(), xStep, yStep, bBox);
+ }
+}
Propchange: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/ColoredTilingPaint.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/package.html
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/package.html?rev=1566760&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/package.html (added)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/package.html Mon Feb 10 21:47:56 2014
@@ -0,0 +1,25 @@
+<!--
+ ! Licensed to the Apache Software Foundation (ASF) under one or more
+ ! contributor license agreements. See the NOTICE file distributed with
+ ! this work for additional information regarding copyright ownership.
+ ! The ASF licenses this file to You under the Apache License, Version 2.0
+ ! (the "License"); you may not use this file except in compliance with
+ ! the License. You may obtain a copy of the License at
+ !
+ ! http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ !-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+
+</head>
+<body>
+This package deals with tiling patterns which are used instead of colors.
+</body>
+</html>
Propchange: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/tiling/package.html
------------------------------------------------------------------------------
svn:eol-style = native
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java?rev=1566760&r1=1566759&r2=1566760&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Mon Feb 10 21:47:56 2014
@@ -184,7 +184,6 @@ public class PDFStreamEngine
{
validCharCnt = 0;
totalCharCnt = 0;
- drawingRectangle = null;
}
/**
@@ -290,7 +289,7 @@ public class PDFStreamEngine
*
* @param str The string to be processed.
*
- * @return the processed string.
+ * @return the altered string
*/
protected String inspectFontEncoding(String str)
{
@@ -700,4 +699,35 @@ public class PDFStreamEngine
return totalCharCnt;
}
+ /**
+ * Remove all cached resources.
+ */
+ public void dispose()
+ {
+ resetEngine();
+ drawingRectangle = null;
+ graphicsState = null;
+ textLineMatrix = null;
+ textMatrix = null;
+ if (graphicsStack != null)
+ {
+ graphicsStack.clear();
+ graphicsStack = null;
+ }
+ if (streamResourcesStack != null)
+ {
+ streamResourcesStack.clear();
+ streamResourcesStack = null;
+ }
+ if (operators != null)
+ {
+ operators.clear();
+ operators = null;
+ }
+ if (unsupportedOperators != null)
+ {
+ unsupportedOperators.clear();
+ }
+ }
+
}