<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<!-- $Id$ -->
<status>
	<developers>
		<!-- All committers of Apache FOP and Apache Batik -->
	</developers>
	<todo>
		<!-- no task list, yet -->
	</todo>
	<changes>
		<release version="Trunk" date="n/a">
		  <action context="Code" dev="JM" type="add">
		    The package org.apache.xmlgraphics.image.loader was added. It contains a general
		    image loading framework for various image formats (bitmap &amp; vector).
		  </action>
		  <action context="Code" dev="JM" type="update">
		    PostScript: Improved PSImageUtils by introducing the ImageEncoder interface and
		    allowing for streams instead of byte arrays for data transfer which can lower
		    memory consumption.
		  </action>
		  <action context="Code" dev="JM" type="fix">
		    PostScript: Fixed %%EOF checking for nested documents.
		  </action>
		  <action context="Code" dev="JM" type="fix">
		    PostScript: Improved robustness of DSC parsing (multi-line comments with no value
		    on the first line don't cause crashes anymore, fallback for unparsable DSC comments).
		  </action>
		  <action context="Code" dev="JM" type="add">
		    PostScript: Added classes for "BoundingBox" DSC comments.
		  </action>
		  <action context="Code" dev="JM" type="fix" fixes-bug="43120" due-to="Sergey Orlov">
		    Fixed a possible NPE in the TIFF codec (in the TIFFImage constructor).
		  </action>
		  <action context="Code" dev="JM" type="add" fixes-bug="42980" due-to="Max Berger">
		    Added support for classpath resources (find files in JAR files in the classpath
		    using their MIME type)
		  </action>
		  <action context="Code" dev="CB" type="add" fixes-bug="43069" due-to="Adrian Cumiskey">
        Application of the patch in Bugzilla 43069:
        New Macro safe-set-page-device which guards
against the possibility of invalid/unsupported postscript key/values being
issued to the implementing postscript page device
      </action>		
		</release>
		<release version="1.2" date="21 July 2007">
			<action context="Code" dev="JM" type="fix">
        Fixed literal text string escaping in PSGenerator. Some characters were not properly
        escaped.
      </action>
			<action context="Code" dev="JM" type="add" fixes-bug="42507" due-to="Adrian Cumiskey">
        Added support for CMYK and GRAY color spaces for PSGenerator
        (moved there from PSGraphics2D).
      </action>
			<action context="Code" dev="JM" type="fix">
        Fixed the PDF/A namespace according to ISO-19005-1:2005/Cor.1:2007 and deprecated the
        use of the draft PDF/A namespace used by Adobe Acrobat 7.x.
      </action>
		</release>
		<release version="1.1" date="22 Dec 2006">
			<action context="Code" dev="JM" type="add">
        Added the start of an XMP metadata framework.
      </action>
			<action context="Code" dev="JM" type="fix">
        Various fixes and improvements in the ImageWriter abstraction.
      </action>
			<action context="Code" dev="JM" type="add">
        ImageWriter abstraction now supports writing multi-page formats like TIFF.
      </action>
			<action context="Code" dev="JM" type="add">
        ImageWriter implementation for TIFF output using Image I/O API.
      </action>
			<action context="Code" dev="JM" type="add" due-to="Max Berger">
        Default implementation for AbstractGraphics2D.drawText(ACI, float, float) so
        PSGraphics2D supports painting text using the AttributedCharacterIterator.
      </action>
			<action context="Code" dev="JM" type="fix">
        Bugfix: The generation of the PostScript setdash command was assuming that
        only integer values can be used but that isn't the case.
      </action>
		</release>
		<release version="1.0" date="17 Apr 2006">
			<action context="Code" dev="JM" type="add">
        Initial release with several components from Batik and FOP: 
        Image codecs, Image writer abstraction, I/O classes, Java2D helpers, PostScript library 
        with Graphics2D implementation.
      </action>
		</release>
	</changes>
</status>
