Release 0.10.1

	core:
	 * Improvements in Optional Content support
	 * Small fix in Form support
	 * Fix memory leak in case of error
	 * Fix potential crash on text search
	 * Try render documents with invalid indexed color space parameters. Bug #18374
	 * Fix crash on text extraction when poppler-data is not installed. Bug #18023
	
	Qt:
	 * Fix two memory leaks
	
	Qt4:
	 * Small documentation improvement
	 * Fix memory leak in the demo code

Release 0.10.0

	core:
	 * Fix crashes on PDF using Stitching or Axial Shading painting
	 * Fix rendering of PDF with Type1 fonts that have more than
	   one encoding definition per line
	 * Do not try to save documents that have Encryption as we
	   do not support that and the user ended with a broken file
	 * Fix crash on files with OptionalContentGroup but no Name
	
	Qt4:
	 * Fix the area of the links to be correctly reported on rotated documents
	
	misc:
	 * Mingw+Msys should work

Release 0.9.3 (0.10 RC 2)

	core:
	 * Fix rendering regression on some embedded fonts
	 * Fix rendering regression of some special fonts
	 * Fix crash on documents with bogus jpeg data
	
	Qt4:
	 * The printing flag defaults to true on PSConverter
	 * Documentation improvement
	
	utils:
	 * Fix regression that made HmtlOutputDev ignore jpeg images
	
	misc:
	 * Improve compilation on mingw

Release 0.9.2 (0.10 RC 1)

	core:
	 * Fix conversion to PS some files (bug #17645)
	 * Small Form fixes
	 * Small JS fixes
	 * Improve memory usage of the cairo renderer
	
	utils:
	 * Fix mismatched free/delete in pdftohtml
	 * Fix memory leak in pdftohtml
	 * Fix crash in pdftohtml
	
	glib:
	 * Fix a crash in forms demo
	
	misc:
	 * Compile with -pedantic

Release 0.9.1 (0.10 Beta 2)

	Core:
		* Fix crash on some AESv2 encrypted files (bugs #13972, #16092, #17523)
		* Improve parsing of broken files (bug #17568)
		
	glib frontend:
		* Minor improvements to the demo application
	
	utils:
		* pdftohtml: Generate the outline file in the same place
		             of the other generated files (bug #17504)

Release 0.9.0 (0.10 Beta 1)

	Core:
	 * Initial JavaScript support
	 * Annotation improvements
	 * Improvements in the Arthur based renderer
	 * Improvements in the Cairo based renderer
	 * Added a JPEG2000 decoder based on OpenJPEG
	 * Small fixes in ActualText implementation
	 * Fix jpeg rendering when not using the libjpeg based decoder
	 * Movie fixes
	 * Do not get out of memory on documents that specify huge fonts
	 * Emulate Adobe Reader behaviour on documents with duplicate keys in Dictionaries
	 * Forms improvements	
	
	Qt4 frontend:
	 * Annotation improvements
	 * Forms improvements
	 * Add the possibility of extracting embedded fonts
	 * Initial Movie support
	 * Documentation improvements
	 * Small improvements in the PS exporter
	
	glib frontend:
	 * Annotation improvements
	 * Attachment fixes
	
	utils:
	 * updated man pages
	 * Added -listenc to pdfinfo and pdftotext

Release 0.8.7

	Core:
	 * Fix regression in Form rendering
	 * Fix memory leak in the cairo backend

Release 0.8.6

	Core:
	 * Call error() when font loading fails
	 * Be less strict parsing TTF tables (bug #16940)
	 * Fix crash due to uninitialized variable

	Qt 4 frontend:
	 * Make the paper color setting working as it should
	 * Make sure to use the correct page width/height for form widgets coordinates

Release 0.8.5

	Core:
	 * Fix crash on PDF that define a page thumbnail but it's not a Stream
	 * Fix crash when Annots object is not of the desired type
	 * Fix crash when obtaining fonts in PDF where XObjects link themselves in loops
	 * Fix crash on documents with an IRT object
	 * Saving should work much better now
	 * Plug some memory leaks in Annotation handling
	
	Utils:
	 * pdftohtml: Don't crash on documents that specify an invalid named dest for a link
	 * pdftohtml: Make html output to keep all the spaces with &nbsp;
	 * pdftohtml: Improve a bit text layout
	 * pdftohtml: Make xml output valid xml

Release 0.8.4

	Core:
	 * Fix leak in ABWOutputDev.cc
	 * Fix uninitialized variable that broke file saving in some cases
	 * Use a single global FT_Library in CairoOutputDev.
	   Fixes some crashes in CairoOutputDev.
	
	Qt 4 frontend:
	 * Fix saving over existing files
	
	build system:
	 * Make sure Qt4 moc is used to generate moc files in Qt4 frontend

Release 0.8.3

	Core:
	 * Fix crash when reading some PDF with annotations
	 * Fix crash on PDF that reference Optional Content elements that don't exist
	 * Fix leaks on error conditions
	 * Do not limit CharCodeToUnicodeString to 8 characters
	 * Support for surrogates outside the BMP plane
	
	Qt 3 frontend:
	 * Fix crash when reading PDF with password
	 * Fix leak when calling scanForFonts()
	
	Qt 4 frontend:
	 * Fix the text() method
	
	Splash renderer:
	 * Fix compilation with --enable-fixedpoint

Release 0.8.2

	core:
	 * Fix call broken by a fix introduced in 0.8.1

Release 0.8.1

	core:
	 * Do not call FT_Done_Face on a live cairo_font_face_t as it might cause crashes
	 * Do not take into account Colorspace resource subdictionary for image XObjects
	 * Downsample 16 bit per component images to 8 bit per component so they render
	
	build system:
	 * Link to pthread when the system needs it

	windows:
	 * Fix comparing against NULL instead against INVALID_HANDLE_VALUE when calling FindFirstFile

Release 0.8.0

	* Fix caching of members in the glib frontend causing issues with rendering
	* Change glib public api to have a correct naming
	* Some better error handling on corner cases
	* Check the document stream is seekable when opening it
	* Build fixes with autotools and with cmake
	* Fix infinite recursion on some malformed documents when consulting the fonts
	* Fix possible crash when asking for Movie contents

Release 0.7.3 (0.8 RC 2)

	* Fix regression in Splash renderer
	* Fix off-by-one write in Splash
	* Plug some minor leaks in Optional Content code
	* Improve error handling when creating a document in the glib frontend

Release 0.7.2 (0.8 RC 1)

	Major Changes:
	 * Improve font matching not forcing default values onto Fontconfig
	 * Add preliminary annotations support in the glib frontend
	 * Initial Movie support in the core
	 * Make GDK dependency optional in glib bindings

	Minor Changes:
	 * Make the core able to read mime types of embedded files
	 * Qt4 API for accessing mime types of embedded files
	 * Handle correctly check state of optional content groups
	   regarding parents state
	 * Avoid setting singular CTM matrices on the Cairo backend
	 * Improved Qt4 API to get character position
	 * Qt4 api documentation improvements
	 * Qt4 minor stability fixes
	 * Proper lib64 Qt detection
	 * Fix build when compiling without cairo support

Release 0.7.1 (0.8 Beta 2)

	Major Changes:
	 * Really distribute CMake files as optional build tool
	 * Initial Optional Content support in core and in the Qt4 frontend

	Minor Changes:
	 * Allow grouped checkboxes to be selected individually
	 * Qt4 demo program improvements
	 * Keep cairo and cairo_shape consistent
	 * Safety checks on Splash renderer so that it does not draw outside the allocated bitmap
	 * Do not try to display bitmaps of invalid size
	 * Fix building with exceptions
	 * Improvements for building with MSVC and CMake

Release 0.7.0 (0.8 Beta 1)

	* Saving support
	* Partial annotation support
	* Forms improvements
	* Add support for ActualText entries
	* Display characters outside of unicode BMP with TT font
	* CJK rendering fixes
	* Implement Adobe Glyph Naming convention for fonts
	* CMake as optional build tool
	* Better font scaling for non embedded fonts
	* Preserve PDF page labels when we output as postscript

Release 0.6.4

	Qt4 frontend:
	 * Fix crash on links that point to a non existant page
	 * Make Document::renderHints return the correct render hints
	 * Fix infinite loop when parsing LineAnnotation

	core:
	 * Fix crash in the Splash renderer when T3 fonts are badly defined
	 * Draw underlined Links correctly

	utils:
	 * Fix two use after free bugs in HtmlOutputDev.cc

	build system:
	 * Fix build on mingw32

	tests:
	 * Distribute the glade file of pdf-inspector

Release 0.6.3

	core:
	 * Fix crash in extra debug code

	glib frontend:
	 * Make sure passwords are passed correctly to poppler core

	Qt frontend:
	 * Fix crash on documents that specify an empty date
	
	build system:
	 * Disable gtk tests if the user disabled glib frontend

Release 0.6.2

	poppler core:
	 * Fix CVE-2007-4352, CVE-2007-5392 and CVE-2007-5393
	 * Fix a crash on documents with wrong CCITTFaxStream
	 * Fix a crash in the Cairo renderer with invalid embedded fonts
	 * Fix a crash with invalid TrueType fonts
	 * Check if font is inside the clip area before rendering
	   it to a temporary bitmap in the Splash renderer. Fixes crashes on
	   incorrect documents
	 * Do not use exit(1) on DCTStream errors
	 * Detect form fields at any depth level
	 * Do not generate appearance stream for radio buttons that are not active
	 * mingw fixes
	
	build system:
	 * Require fontconfig >= 2.0
	 * builddir != srcdir fixes
	
	Qt4 frontend:
	 * Improved documentation
	
	misc:
	 * Fix FSF address

Release 0.6.1

	poppler core:
	 * Fix printing with different x and y scale
	 * Fix crash when Form Fields array contains references to non existent objects
	 * Fix crash in CairoOutputDev::drawMaskedImage()
	 * Fix embedded file description not working on some cases
	
	Qt4 frontend:
	 * Fix printing issue
	 * Avoid double free
	 * Fix memory leak when dealing with embedded files
	
	glib frontend:
	 * Fix build with --disable-cairo-output
	 * Do not return unknown field type for signature form fields
	
	build system:
	 * Support automake-1.10
	 * More compatible sh code in qt.m4
	
	utils:
	 * Fix build on Sun Studio compiler

Release 0.6

	- CairoOutputDev fixes
	- Allow pdftoppm to read/write from stdin/stdout
	- API work on Qt4 frontend
	- Fix pdfimages produces inverted image for black & white image
	- Fix error on the NFKC text matching routine
	- Add support for word and line selections
	- Do not enforce %%EOF at the end of file
	- Pad zeroes instead of aborting when rendering 1-bit images
	  and the stream is too short
	- Update glib bindings documentation

Release 0.5.91 (0.6 Release Candidate 2)

	- Various memory leaks fixed
	- Compile with --enable-fixedpoint. Bug #11110
	- Header cleanup
	- Remove dependency on debugxml. Bug #11187
	- Allow access to document metadata in glib and qt4 frontends
	- Several glib API frontend improvements
	- Fix crash on accessing embedded files
	- Build on Sun Force compiler
	- Render '*' instead of the actual content in password form fields
	- Fix pdftohtml complex output. Bug #9746 and #11610
	- Windows build fixes
	- Improve Japanese font support. Bug #11413
	- Do not exit the program on files that confuse libjpeg
	- Update required cairo version to 1.4
	- Fix CVE-2007-3387

Release 0.5.9 (0.6 Release Candidate)

	- Merge xpdf 3.02 changes
	- Qt4 frontend is not marked anymore as unstable
	- Support for Sound objects
	- Support for Opening/Closing page actions 
	- Support for page duration
	- Improve PS Tokenizer performance thanks to Scott Turner
	- Various speed ups by Krzysztof Kowalczyk
	- Beginning of Interactive Form support by Julien Rebetez
	- xpdfrc is no longer used for anything
	- Add AbiWord output device and pdftoabw program by Jauco Noordzij
	- Fix security issue MOAB-06-01-2007
	- Lots of bugs fixed

Release 0.5.4

	- Automatically read in CJK encoding files if they're
          installed (#2984, #7105, #7093).  This works with the new
          poppler-data package.
	- Speed ups by Krzysztof Kowalczyk (#8112)
	- Patch from Dom Lachowicz to let the utils take input on stdin.
	- Bugs fixed (#8182, #4649, #7906, #8048, #7113, #4515, #3948,
          #7924, #7780, #7646, #6948, #7788, #7661, #7005)

Release 0.5.3

	- Add poppler as a private requires of poppler-glib.
	- Allow CairoFont creation to fail more gracefully (#4030).
	- Back out the rest of krh's type3 font work.
	- Revert splashModeRGB8 changes.
 	- Add missing poppler-annotation-helper.h.

Release 0.5.2

	- Much improved Qt bindings (Albert Astals Cid).
	- Cairo backend now supports masked images (Jeff Muizelaar, #6174).
	- Patches from Kouhei Sutou to make glib bindings more
	  language binding friendly (#6907, #6897, #6899, #6905).
	- Search now works with ligatures (Ed Catmull, #2929).
	- The glib bindings now has an entry point to render to a cairo_t.
	- GCC 4.1 and MSVC compilation fixes.
	- Memory leaks plugged: #6908, #6947, #6765, #6764, #6187
	- Misc bug fixes: #6984, #6896, #6913, #6926, #4481, #5951,
	  #6551, #6500, #6492, #6454, #6079, #6167.

Release 0.5.1

	- Support for embedded files.
	- Handle 0-width lines correctly.
	- Avoid external file use when opening fonts.
	- Only use vector fonts returned from fontconfig (#5758).
	- Fix scaled 1x1 pixmaps use for drawing lines (#3387).
	- drawSoftMaskedImage support in cairo backend.
	- Misc bug fixes: #5922, #5946, #5749, #5952, #4030, #5420.

Release 0.5.0

	- Font matching code for non embedded fonts now use fontconfig
          instead of hard coded list of fonts.
	- Merge in Xpdf 3.01 changes.
	- Add command line tools from Xpdf.
	- Make install of Xpdf header files ./configure'able.

Release 0.4.0

	- Real text selection.
	- API breakage in glib wrapper: dropping dest_x and dest_y
	  arguments from poppler_page_render_to_pixbuf().

Release 0.3.3

	- New glib API to get document font information (Marco).
	- More document properties available as glib properties (Emil
	  Soleyman-Zomalan, #3359)
	- Optimize color conversion for images.
	- Support for constant opacity.
	- Fix problems with pkg-config files.
	- Bugs fixes: #3491, #2911, #3362, #3340, #3265, #3239, #3396.

Release 0.3.2

	- New API to get poppler version and backend type. 
	- Various font fixes from Albert Astals Cid.
	- Update to cairo 0.5.0 API, including better font support.
	- Meta data for the glib binding.

Release 0.3.1

	- Add qt/poppler-private.h to SOURCES
	- Jeff's path to use zlib instead of builtin decompression.
	- Bug fixes: #2934, segfault on invalid links, #3114

Release 0.3.0

	- First cut at qt wrapper, including a getText() method for
	  getting text from a page.
	- More glib functionality: meta data, set page orientation,
	  print to PS
	- Performance fixes for glib cairo
	- Bug fixes

Release 0.2.0  (Tue Apr  5 12:32:10 EDT 2005)

	- Add glib wrapper for poppler, which will use cairo rendering
	  if available
	- Support for page labels
	- configure and build fixes.

Release 0.1.2  (Wed Mar  9 10:45:58 EST 2005)

	- cairo optimizations and fixes from Jeff Muizelaar
	- Bump cairo requirement to 0.4
	- Make cairo and gtk checks fail gracefully

Release 0.1.1

	- Fix issues with installed header files including config.h
	- Fix a couple of typos in pkg-config files
	- Install splash and cairo header files when necessary

Release 0.1 - no date yet

	- First release
	- More NEWS here
