Release 0.77.0:
        core:
         * Fix crash on signature handling. Issue #766
         * Fix small memory leak in SignatureHandler::getCertificateInfo
         * Splash: Restrict filling of overlapping boxes. Issue #750
         * Fix crash on malformed files

        qt5:
         * Fix optional content handling with exclusive layers

        cpp:
         * Make render_page thread-safe

        utils:
         * pdfsig: Fix small memory leak
         * pdftotext: Fix typo in manpage

Release 0.76.1:
        core:
         * Make the mul tables be calculated at compile time with constexpr.
         * splash: Fix compile with SPLASH_CMYK enabled
         * Some typo fixing in error messages

        qt5:
         * Fix regression in annotation handling

        build system:
         * Fix some typos in build system output and comments

Release 0.76.0:
        core:
         * Fix regression on case-insensitive search. Issue #743
         * Remove GooList, use std::vector instead
         * Fix radiobutton reporting wrong state. Issue #159
         * Handle UTF16-LE strings
         * Don't error out if there's no DA in FreeText annotation
         * cairo: Compute correct coverage values for box filter.
         * cairo: Constrain number of cycles in rescale filter. 
         * Read more fields from ViewerPreferences
         * Introduce and use Ref::INVALID
         * Fix crashes in broken files
         * Fix mismatched free/delete
         * Add missing include guards

        utils:
         * pdftohtml: Properly initialize HtmlOutputDev::page to avoid SIGSEGV upon error exit. Issue #742

Release 0.75.0:
        core:
         * Fix rendering of some annotations
         * Fix crashes in broken files
         * Small internal code improvements

        cpp:
         * Improve documentation
         * tests: Add showing version information to poppler-dump

        utils:
         * pdfattach: new util
         * pdftohtml: add -dataurls parameter
         * pdftoppm: add -sep and -forcenum parameters
         * pdftohtml: make singleHtml and stout not mutually exclusive
         * pdfsig: fix use after free

Release 0.74.0:
        core:
         * Remove support for obsolete systems. Issue #709
         * Include timezone in timeToDateString()
         * Fix/silence some warnings
         * Fix issues with broken files

        build system:
         * Fix linking in FreeBSD
         * Fix fseeko configure check on Android for API level < 24
         * Remove unused MacroPushRequiredVars.cmake

        qt5:
         * Add API that lazily builds an outline by wrapping the internal objects
         * Demo: Use new API to build Table Of Contents lazily

        glib:
         * Improve documentation
         * Fix cast from 'GTime *' (aka 'int *') to 'time_t *' (aka 'long *')

        utils:
         * pdfsig: add -nssdir option

        cpp:
         * Add a way to get all the named destinations in a document.

Release 0.73.0:
        core:
         * Fix regression reading some encrypted files. Issue #690
         * Add X509CertificateInfo classes
         * Add new 'IgnoreDiacritics' option to ::findText(). Issue #637
         * Open files with CLOEXEC flag set
         * Remove Gulong, Guint, Gushort, Guchar typedefs
         * Fix handling of some broken files.

        cpp:
         * Make initialization of globalParams threadsafe
         * Fix page::text_list encoding issue
         * Improve handling of UTF-16 by considering Endianess
         * Add API to specify a custom data directory

        qt5:
         * Expose X509CertificateInfo
         * Add the possibility of getting version
         * Add new 'IgnoreDiacritics' search flag. Issue #637
         * Make initialization of globalParams threadsafe
         * ArthurOutputDev: Remove all Splash code usage

        glib:
         * add new 'POPPLER_FIND_IGNORE_DIACRITICS' find flag. Issue #637
         * Fix named destinations. Issue #631
         * Make PrintScaling preference available in API. Bug #92779

        build system:
         * Rename ENABLE_XPDF_HEADERS to ENABLE_UNSTABLE_API_ABI_HEADERS
         * support enabling NSS on mingw
         * Windows: only set SOVERSION for shared libs

Release 0.72.0:
        core:
         * Fix checkbox lacking AP not bein able to change state. Issue #655
         * Draw line annotation endings (arrow, circle, ...)
         * cairo: Don't use UNIQUE_ID for PS output, to avoid using PS memory on cairo >= 1.5.10
         * Be more stubborn looking for a nssdb. Issue #669
         * GooString::fromInt: Repair the return value.
         * Minor performance improvements
         * Avoid cycles in PDF parsing
         * Stream::makeFilter: Fix memory leak
         * Fix various issues with malformed files
         * Rename GooString::getCString to GooString::c_str
         * Regenerate UnicodeDecompTables.h from python 3.7.1

        utils:
         * pdfdetach: Check for valid embedded file before trying to save it. Issue #661
         * pdfdetach: Check for valid file name of embedded file before using it to determine save path. Issue #660
         * Fix typos in utils.

        glib:
         * Fix missing PopplerAttachment destructor call
         * Support getting form widget additional actions.
         * docs: Small improvements

        qt5:
         * Internally compile with -DQT_NO_SIGNALS_SLOTS_KEYWORDS

Release 0.71.0:
        core:
         * Replace the implementation of GooString by std::string but keep the exact interface intact.
         * Replace GBool, gTrue, and gFalse by bool, true, false, resp.
         * Splash: Fix crash if document is malformed (too wide)

        qt5:
         * Fix crash when adding Highlight Annotations
         * Default to hidden symbols
         * Fix two leaks in a test

        glib:
         * demo: Fix build on Windows
         * demo: Align property labels to top of cell

        cpp:
         * Fix typos in documentation

        build system:
         * Enable searching for GTK on Windows
         * Remove unused files
         * Add fuzzer target from oss-fuzz project

Release 0.70.1
        glib:
         * Install missing file

Release 0.70.0
        core:
         * FreeText annotations: default to font from default appearance string
         * Splash: Speed improvements
         * Fix security issues found by oss-fuzz
         * Improve page lable parsing
         * Use std some std classes instead of self grown ones
         * Various internal improvements

        qt5:
         * Add Page::index() method
         * Improve method to get the page from a label string

        glib:
         * Fix crash on missing embedded file
         * Add support for PDF subtype property
         * Only export symbols in the public API

        utils:
         * pdftohtml: Improve font handling

Release 0.69.0
        core:
         * Add annotation font color
         * Splash: Some speed improvements
         * PSOutputDev: add native support for type 7 shadings when using level 3
         * Add support for PDF subtype property
         * Link: Fix memory leak regarding next actions
         * Fix handling of Signature Info Location and Reason
         * Fix errors in computation of type3 glyphs transformation matrix
         * Reimplement Dict class in a more modern way
         * Fix security issues found by oss-fuzz
         * Fix memory issues in GfxImageColorMap copy ctor
         * Don't abort if the SampleFunction has too many samples. Issue #634
         * Document the OutputDev::clip and OutputDev::oeClip methods
         * fix macOS compilation due to boolean define in jpeglib
         * Split GDir and GDirEntry out of gfile.h. Issue #370

        qt5:
         * Add annotation font color

        cpp:

        utils:
         * pdfinfo: Show PDF subtype
         * pdftotext: Fix only outputs first page content with -bbox-layout option. Issue #88
         * pdftotext: Fix memory leak in printLine


        build system:
         * Require C++14

Release 0.68.0
        core:
         * Add Reason and Location to SignatureInfo. Bug #107299
         * Fix memory misuse on signature handling
         * Fix security issues found by oss-fuzz
         * Don't give a warning when Marked value is false. Bug #107430

        qt5:
         * Add Reason and Location to SignatureInfo. Bug #107299

        cpp:
         * Add rotation() to text_box. Bug #106562
         * Fix build with MSVC

        utils:
         * pdftoppm: Add -jpegopt optimize option support
         * pdftocairo: Add -jpegopt optimize option support
         * pdftohtml: Add option to not round coordinates
         * pdftohtml: Fix possible crash. Bug #107316

        build system:
         * Use OpenJpeg cmake config file instead of pkgconfig
         * Remove wchar_t- on MSVC


Release 0.67.0
        core:
         * Fix lots of security/leak issues found by oss-fuzz
         * Splash: Optimize some files, making them 20% faster (now for AABGR8)

        utils:
         * pdfsig: Compile with libc != glibc. Bug #106783

Release 0.66.0
        core:
         * Fix lots of security/leak issues found by oss-fuzz
         * Splash: Optimize some files, making them 20% faster
         * Splash: Correctly manipulate spot colors if SPOT_NCOMPS != 4
         * Fix compilation with some strict compilers

Release 0.65.0
        core:
         * SplashOutputDev: Add the invisible character check beginType3Char. Bug #106244
         * XRef: Fix runtime undefined behaviour. Bug #105970
         * Fix issues with malformed documents. Bug #104942, #103238
         * Remove GooHash after replacing it by std::unordered_map
         * Add conversion methods between GooString and std::string.

        cpp:
         * Add newline after error message
         * Expose more image modes, add option to select mode in renderer. Bug #105558

        build system:
         * Fix compilation with libc++
         * Small improvement to FindLIBOPENJPEG2.cmake

        qt5:
         * Add widget annot actions to FormFields

        utils:
         * pdffonts: Minor formatting changes in the man page. Bug #105194

Release 0.64.0
        core:
         * Workaround form field text not being drawn on broken files. Bug #103245
         * Add read only setter for form fields
         * Add support for Link Hide action
         * Add support for Next actions in Links
         * Fix parsing of Annot focus out actions
         * Fix PDFDoc::checkHeader() for PDFs smaller than 1 KiB. Bug #105674
         * Add const to several classes and members
         * gfile: Fix build on some platforms
         * Fix issues with on malformed documents. Bug #105972, #105969, #106059, #106061
         * Several small code improvements

        qt5:
         * Allow setting of Form visibility status
         * Allow setting of Form read only status
         * Add support for Link Hide action
         * Add support for Next actions in Links
         * ArthurOutputDev: Implement axialShadedFill
         * ArthurOutputDev: Implement drawImageMask. Bug #105531
         * ArthurOutputDev: Implement Type3 font support

        utils:
         * pdfsig: Add -dump which writes signatures to disk. Bug #104881

        glib:
         * less deprecated calls

        build system:
         * bring back the option to disable GObject introspection
         * Add iconv include dir when compiling
         * Make it possible to build poppler without fontconfig. Default for Android

Release 0.63.0
        core:
         * CairoOutputDev: support embedding CCITT image data. Bug #103399
         * CairoOutputDev: limit image size when printing. Bug #103399
         * CairoOutputDev: use GOOD instead of BEST as the default cairo filter for scaling. Bug #103136
         * Error out on save if file has changed since we opened it. Bug #103793
         * PDFDoc: use %c instead of \x to output binary. Bug #103873
         * Fix index out of bounds undefined behaviour in PSTokenizer. Bug #103583
         * Fix opening files with OutlineItem loops. Bug #102914
         * Fix some bugs in StructTreeRoot parsing of parent tree. Bug #103912
         * Remove error for wrong child type for tagged pdf. Bug #103587
         * FoFiTrueType::readPostTable() from xpdf 4.00. Bug #102880
         * GfxFontDict: merge reference generation from xpdf 4.00. Bug #104565
         * Reset lastAbortCheck on updateLevel reset
         * PDFDoc::setup: Fail early if base stream length is 0. Bug #103552
         * Check curStr is actually a Stream before doing Stream operations. Bug #104518
         * Fix new Object API porting bug. Bug #104517
         * Check return code of getChar(), abort reading on error. Bug #104502
         * TextPage: Add horizontal scaling to font matrix. Bug #105259
         * Fix EmbedStream replay. Bug #103446
         * Fix memory leak on error condition
         * Fix assert on malformed documents. Bug #104354
         * Fix abort in Gfx::opBeginMarkedContent if args[1] is not a name. Bug #104468
         * GfxGouraudTriangleShading::parse: Don't abort on malformed documents. Bug #104567
         * GfxFunctionShading::parse: Fix abort in malformed document. Bug #104581
         * Remove the extern C from glib.h. Bug #103621
         * Don't let ArthurOutputDev be friend of SplashPath anymore
         * Fix undefined sanitizer warning about qsort
         * Form.h: include time.h for time_t
         * Various code improvements

        qt5:
         * Add cancellation support to renderToImage and textList
         * Do not assume all Screen annotation actions are Renditions. KDE bug #388175
         * qt5: Implement operator= for PageTransition
         * ArthurOutputDev: 'clip' should intersect new and old clipping path
         * ArthurOutputDev: Implement updateBlendMode
         * ArthurOutputDev: Replace the QPainter by a stack of QPainters
         * ArthurOutputDev: Rudimentary support for transparency groups
         * Remove stale libcms1 code. Bug #104358
         * demo: don't crash if page is malformed
         * Fix warnings due to the use of deprecated overloads of Poppler::Page::Search in tests.

        utils:
         * pdfimages: Fix for files with flate encoded inline images. Bug #103446
         * pdftocairo: Remove stale libcms1 code. Bug #104358
         * pdfimages: Fix build without libtiff and libpng
         * pdfseparate: Fix buffer size warning due to missing space for null terminator

        build system:
         * Enable building all libs as static libs
         * Enable no-missing-field-initializers
         * Remove unused FindLIBOPENJPEG.cmake
         * add "--owner root:0 --group root:0" options to tar command in dist target. Bug #104398
         * Add python3 support to gtkdoc.py
         * gtkdoc.py: Make it work with newer gtk-doc. Bug #105075

        cpp:
         * Add page::text_list

Release 0.62.0
        core:
         * Stop supporting lcms1, you really want to use lcms2 :)
         * Stop supporting openjpeg1, you really want to use openjpeg2 :)
         * Open files that state 8 bits as third field of W. Bug #103469
         * GfxLabColorSpace::parse: Fix crash in broken documents. Bug #103582
         * Fix leak if parseDA fails
         * Include glibc.h where needed
         * Document the meaning of the 'type' integer of a shading
         * Fix UTF test fail
         * INSTALL: add debug options

        qt5:
         * Add API to let the rendering process callback to get a partial rendering. Bug #103372

        qt4:
         * Remove the Qt4 frontend

        utils:
         * Support unicode on windows console
         * pdfsig: install man page
         * sort encoding list

        glib:
         * demo: fix warning

Release 0.61.1
        core:
         * CairoOutputDev: don't overflow y * stride when accessing image data

        cpp:
         * Fix for corrupted image files on Windows. Bug #102494

        build system:
         * Fix incorrect paths in .pc files. Bug #103578
         * add the custom buildtests target only once. Bug #103003

Release 0.61.0
        core:
         * Fix crashes in broken files
         * Cleanup unused functions from GlobalParams
         * Tweak LZWStream::processNextCode error handling. Bug #103174
         * Warning fixes
         * Remove t1lib code

        qt5:
         * Clean up the remaining Splash code in Arthur backend. Bug #103117
         * ArthurOutputDev: Properly implement saveState/restoreState. Bug #103118
         * Fix leak in ArthurOutputDev::updateFont. Bug #103508

        build system:
         * Use GNUInstallDirs. Bug #103211
         * mingw: Install pkg-config files
         * mingw: change library names to include the soversion. Bug #103157
         * Fix installing a .cc file as header
         * Use -pthread flag instead of -lpthread

Release 0.60.1
        qt5:
         * ArthurOutputDev: Add missing 'return' in error paths

        build system:
         * FindLIBOPENJPEG.cmake: Add CheckCXXSourceCompiles

Release 0.60.0
        core:
         * Enable libcurl support by default
         * PSOutputDev: Fix wrong text generation. Bug #102760
         * Added methods to get and set the font size of text fields. Bug #101692
         * CairoOutputDev: Do not extend the pattern in drawImageMaskRegular
         * CairoOutputDev: do not use the custom downscaling for rendering images when using cairo >= 1.14
         * Fix build with old clang
         * Fix various crashes in broken files
         * Fix some warnings
         * Add some constness to the basic classes
         * Remove unused functions from GlobalParams

        qt5:
         * Added methods to get and set the font size of text fields. Bug #101692
         * Add whether renderToImage shows annotations
         * ArthurOutputDev: Replace Splash font rendering by Qt font rendering
         * ArthurOutputDev: Implement the drawSoftMaskedImage method
         * ArthurOutputDev: Fix several small bugs related to dash pattern handling
         * Fix two minor typos

        build system:
         * cmake is now the default build system
         * autotools based build system has been removed

         utils:
         * pdfinfo: don't truncate dest name

Release 0.59.0
        core:
         * Fix infinite recursion in NameTree parsing in broken files

        utils:
         * pdfunite: Fix API porting error that caused abort in some cases
         * pdfinfo: Fix crashes and memory leaks when using -dests
         * pdfinfo: use GooString.append instead of sprintf/strcat
         * pdfimages: Fix warning when compiling with cygwin

        build system:
         * Fix cygwin 32-bit compile
         * cmake tweaks


Release 0.58.0
        core:
         * CairoOutputDev: cairo 1.14 now has high quality downscaling
         * Signature related improvements. Bug #99271
         * Tweak which cmap we use. Bug #101855
         * Memory leak fixes
         * Substantial rework of the internals
         * win32: call ANSI functions directly. Bug #100312
         * Add some documentation

        qt5:
         * Expose signature information.
         * ArthurOutputDev: initialize the image with the paper color. Bug #102129
         * Fix copy'n'paste bugs: Qt4 -> Qt5
         * ArthurOutputDev: Properly set the QPainter transformation
         * ArthurOutputDev: Use Qt::SvgMiterJoin instead of Qt::MiterJoin. Bug #102356

        utils:
         * pdfinfo: add -dests option to print named destinations. Bug #97262
         * pdftocairo: add -jpegopt for setting jpeg compression parameters. Bug #45727
         * pdftoppm: add -jpegopt for setting jpeg compression parameters. Bug #45727
         * pdfimages: support listing/extracting inline images. Bug #25625

        build system:
         * cmake: Various Windows fixes
         * cmake: Use -std=c++11 instead of -std=gnu++11

        cpp:
         * Fix page.text() not taking page orientation into account. Bug #94517

Release 0.57.0
        core:
         * Fix parsing of Type 1 fonts with newlines in encoding sequences. Bug #101728
         * Fix crash in broken documents

        utils:
         * pdfunite: Fix crash with broken documents. Bug #101208
         * pdftohtml: skip control characters Bug #101770
         * pdfseparate: minor improvement to the documentation. Bug #101800

        build system:
         * cmake: Set RUNPATH for poppler shared libs. Bug #101945
         * configure: fix --disable-FEATURE actually enabling the feature

Release 0.56.0
        core:
         * FormFieldButton::setState() shouldn't check the field is readOnly
         * Fix crashes on multiple broken files

        utils:
         * pdfunite: Fix crash with broken documents. Bugs #101153 #101149

Release 0.55.0
        core:
         * Fix abort in files with broken Decode arrays. KDE bug #379835
         * Fix memory leak (and probably logic bug) parsing broken XRef entries. Bug #100775
         * Fix memory leak when reconstructing broken files. Bug #100776
         * Minor optimization
         * Fix regression in GfxIndexedColorSpace::mapColorToBase. Bug #100931
         * Fix memory leak in error condition

        cpp:
         * Return nullptr if the page at index can't be fetched. Bug #100981

        build system:
         * Fail by default if libjpeg is not available
         * Fail by default if libopenjpeg2/1 is not available

Release 0.54.0
        core:
         * Make XRef reconstruction a bit better. Bug #100509

        glib:
         * Expose movie play mode. Bug #99625
         * demo: Show play mode in movie properties view

        qt5:
         * Compile with -DQT_NO_CAST_FROM_BYTEARRAY. Bug #100311

        utils:
         * pdfimages: don't fail listing if inline image data contains 'EI'. Bug #100737

Release 0.53.0
        core:
         * Form support improvements
         * SplashOutputDev: Fix memory leak when rendering images with colormap and matte color
         * Minor fix in GlobalParams documentation

        qt5:
         * Expose form calculate order
         * Expose Form additional actions

        utils:
         * pdfimages: support 16bpc png and tiff images. Bug #99988
         * pdftohtml: fix small memory leak when constructing some filenames
         * pdfinfo: fix leak when printing JS

        build sytem:
         * Compile in C++11 mode

Release 0.52.0
        core:
         * Fix assert on reading some OCGs. Bug #99768
         * Properly initialize some RichMedia variables in corner cases. Bug #99767

        qt4:
         * optcontent structure was leaking the headers items. Bug #99449
         * Cleanup objects in tests to fix memory leaks. Bug #99449

        qt5:
         * optcontent structure was leaking the headers items. Bug #99449
         * Cleanup objects in tests to fix memory leaks. Bug #99449

        utils:
         * pdftocairo.1: Fix typo

Release 0.51.0
        core:
         * Check for error from NSS in SignatureHandler construct. Bug #99363
         * Add Form[Field|Widget]::setPartialName
         * Fix memory leak in PDFDoc::markAnnotations

        qt5:
         * Implement digital signature support. Bug #94378
         * Add Poppler::FormField::setName
         * Fix segfault/assert if LinkDestination is constructed with invalid input string. Bug #99357

        utils:
         * pdfunite: add fields to AcroForm dict. Bug #99141

Release 0.50.0
        core:
         * PSOutputDev: Fix PS conversion for some files. Bug #63963
         * Fix Outline parsing on broken documents. Bug #98732
         * Fix PDFDoc::saveIncrementalUpdate()'s detection of document being modified. Bug #96561
         * SplashOutputDev: Read softmask into memstrean in case of matte. Bug #97803
         * Bail out if Hints nBitsNumObjects or nBitsDiffGroupLength are greater than 32. Bug #94941
         * CairoOutputDev: initialize CairoOutputDev::antialias. Bug #98983
         * Fix crash when loading some thumbnails. Bug #97870

        utils:
         * pdftoppm: Fix -tiff -gray/-mono incorrect output.
         * pdftops: add -passlevel1customcolor. Bug #97193


        build system:
         * Default to libopenjpeg2 instead of libopenjpeg1

        qt:
         * Support OCG state change links

        glib:
         * Use g_slice_new0 for PopplerActionLayer. Bug #98786

Release 0.49.0
        core:
         * Merge type3 glyph handling from xpdf 3.04. Bug #96667
         * Continue rendering in case of 'Singular matrix in shading pattern fill. Bug #98623
         * Fix memory leak in parametrized gouraudTriangleShadedFill
         * Fix crash on broken files
         * PDFDoc::setDocInfoStringEntry(): treat value consisting of just the unicode marker as an empty string
         * Fix UBSAN warning
         * Misc compile fixes

        utils:
         * pdfseparate: remove extra '%' in error message
        
        build system:
         * configure: Fix typo in disable nss help string

Release 0.48.0
        core:
         * Fix crashes and memory leaks in invalid files.
         * Small memory usage improvements.
         * TextOutputDev: Remove null characters from PDF text. Bug #97144
         * TextOutputDev: Break words on all whitespace characters. Bug #97399
         * Fix UTF16 decoding of document outline title. Bug #97156
         * Add functions for named destination name in name-tree/dict

        glib:
         * Increase glib requirement to 2.41

Release 0.47.0
        core:
         * Fix abort on documents where the docinfo obj is not a dict. Bug #97134
         * Check for XRefEntry existing before using it. Bug #97005
         * Fix memory leak on PDFDoc::setDocInfoStringEntry() with empty string
         * Don't presume that DocInfo is a dictionary in XRef::createDocInfoIfNoneExists()

        build system:
         * configure: Work with non gnu greps

Release 0.46.0
        core:
         * cairo: fix bug in setAntialias()
         * cairo: Fix tiling patterns with BBox with non-zero x,y
         * cairo: try finding glyphs in substitute fonts by unicode value. Bug #96994
         * Added XRef modification flag
         * Added DocInfo setters & getters
         * Be less strict when parsing FitH Link destinations. Bug #96661

        utils:
         * pdftocairo: revert the use of groups for blending into white page
         * pdftocairo: Use fprintf for printing errors
         * pdfinfo: Don't print pdf info when printing metadata, javascript, or structure. Bug #96801

        glib:
         * Added document property setters & simplified getters
         * make document metatag gobject properties writeable

        cpp:
         * pass len to GooString constructor in detail::ustring_to_unicode_GooString(). Bug #96426
         * Added functions to save a document
         * Added document property setters & getters

        qt4:
         * Added document property setters & simplified getters

        qt5:
         * Added document property setters & simplified getters

        build system:
         * configure: Don't use -fPIC on cygwin
         * configure: Work with non gnu greps

Release 0.45.0
        core:
         * SplashOutputDev: Fix iccTransform + splashModeXBGR8
         * Fix memory leaks
         * Fix crash in broken files. Bug #95567. Bug #96027
         * Emulate some non portable glibc functions when not available

        utils:
         * pdftohtml: Fix crash in broken files. Bug #95563
         * pdfinfo: convert dates to local time zone
         * pdfinfo: add -isodates for printing dates in ISO-8601 format
         * pdfinfo: Fix memory leaks

        glib:
         * return date in UTC instead of local time. Bug #94173

        cpp:
         * switched from detail::convert_date() to core's dateStringToTime()

Release 0.44.0
        core:
         * Fix Compile in 32bit linux. Bug #95492
         * Splash: type 3 chars. restore the current position also in output device. Bug #95344
         * Splash: Improve rendering of some dotted lines. Bug #84693
         * Refactor GooString::Set(). Bug #94201
         * Fix typo in GfxPatchMeshShading::parse
         * Fix memory leak in PSOutputDev::filterPSLabel
         * Fix memory leak in SignatureHandler::getDefaultFirefoxCertDB_Linux
         * Fix potential crash in SplashOutputDev::doUpdateFont
         * Fix potential crash in TextPage::coalesce
         * Remove call that does nothing

        utils:
         * pdftocairo: add -antialias option. Bug #94977

Release 0.43.0
        core:
         * Implement sanity check for linearization usage. Bug #92482
         * Add SymbolMT as an alias for the Symbol font. Bug #93168
         * Fix some blank files. Bug #94756
         * cairo: fix fillToStrokePathClip crash and rendering. Bug #62905
         * cairo: Check if PDF knows the width of 'm' in case of substituted font. Bug #94054
         * cairo: save mask state and don't extend image mask. bug #94234
         * SplashOuputDev: Compile with C++11 compilers that don't define isinfinite. Bug #94761
         * typo fixes

        utils:
         * pdftocairo: Calculate rotation before scaling. Bug #94655

        qt4:
         * Fix crash on certain PDF form item activation actions. Bug #94873

        qt5:
         * Fix crash on certain PDF form item activation actions. Bug #94873

Release 0.42.0
        core:
         * Add the support for version 5 + revision 6 documents. Bug #85368
         * Add initial support for Signature handling
         * Initialize gamut mapping multipliers in ::copy() functions. Bug #90697
         * Implement jpx streams support with depth < 8
         * Handle SMaskInData = 0 for JPX encoded images. Bug #93468
         * Fix rendering of some broken PDF files. Bug #92508
         * PSOutputDev: Support for LZW encoding
         * PSOutputDev: Add support for Flate compression in Level 3 output.
         * SplashOuputDev: Implement function shading. Bug #94441
         * SplashOuputDev: Improve rendering of some non embedded fonts. Bug #94054
         * SplashOuputDev: Fall back to Gfx implementation of tiling pattern if repetition rate is small. Bug #90596
         * SplashOuputDev: Implementation of Matte entries in softmasks of softmasked images. Bug #22473
         * SplashOuputDev: assure line width > 0 in case of text stroke. Bug #94038
         * TextOuputDev: Cache result of inner loop in visitDepthFirst. Bug #77087
         * Avoid attempting a tiling pattern fill with a singular transform matrix

        utils:
         * pdfinfo: Add option to show document structure
         * pdfsig: New command that gives information about signature

        qt4:
         * Fix bug in links to remote documents getting the page number wrong sometimes

        qt5:
         * Fix bug in links to remote documents getting the page number wrong sometimes

Release 0.41.0
        core:
         * CairoOutputDev: add missing font types (fontCIDType0COT and fontTrueTypeOT). Bug #93559
         * SplashOutputDev: Adjust limit check and check in addition bitmap pointer. Bug #94053

        utils:
         * pdfseparate: Refine resource detection
         * pdfinfo: fix man page

Release 0.40.0
        core:
         * CairoOutputDev: Use shape mask with soft mask. Bug #91931
         * TextOutputDev: Handle right-to-left text in search
         * TextOutputDev: Fix finding Arabic Presentation Forms ligatures
         * Fix crash in invalid file. Bug #93476
         * Regression test improvements

        utils:
         * pdftocairo: fix writing to stdout out with image output
         * pdftocairo: document that -singlefile appends file type. Bug #86254
         * pdftocairo: ensure surface flushed before accessing image data
         * pdftocairo: check for invalid use of options. Bug #92195
         * pdfunite: Fix typo in manual

        build system:
         * Improve cmake build system

Release 0.39.0
        core:
         * Ignore the alternateSpace and tintTransform. Bug #92381
         * CairoOutputDev: Scale radial pattern. Bug #22098
         * CairoOutputDev: Implement function shading using mesh gradients. Bug #88394
         * Regression test improvements
         * Fix typos in error messages

        build system:
         * Visual Studio 2015 now supports snprintf. Bug #93116

        utils:
         * pdftops: fix %%PageBoundingBox. Bug #87161
         * pdftocairo: Fix double free when both user and owner passwords are given

        glib:
         * Add duration_real to PopplerPageTransition. Bug #92040
         * Remove enum PopplerOrientation from API. Bug #93229
         * documentation improvements
         * glib-demo improvements

Release 0.38.0
        core:
         * Splash: Multiply opacity in case of pattern colorspace. Bug #92592
         * Small form improvements on non ascii character rendering
         * Clarify README

        build system:
         * Clarify internal DCT and JPX are only provided as deprecated fallbacks

        utils:
         * pdftocairo: fix fit to page transformation

Release 0.37.0
        core:
         * CairoOutputDev: Use mask for even-odd fill. Bug #84527
         * SplashOuputDev: Protect calls to set/getAA with the proper #if guards. Bug #92006
         * SplashOuputDev: Try to use an external font if the internal one is invalid
         * PageTransition D is a number not an int. Bug #92040
         * Catalog::getNumPages(): validate page count
         * Catalog::cachePageTree(): recover from out of memory condition
         * Fix crashes in malformed documents

        build system:
         * configure: fix openjpeg detection

Release 0.36.0
        core:
         * Patch to support RichMedia annotations
         * Splash: Fix wrong memory access. Bug #91686
         * Cairo: fix size of transparency group surface. Bug #66229
         * Fix bounds check in Linearization::getPageFirst. Bug #91200
         * File Saving improvements
         * Add premultiplied alpha channel to SplashBitmap
         * Fix for xref table creation. Bug #90790
         * Fix JBIG2Decode infinite loop and stack overflow. Bug #91186
         * Minor optimization in text extraction

        qt4:
         * Basic support for RichMedia annotations
         * Change default image format
         * Minor optimizations

        qt5:
         * Basic support for RichMedia annotations
         * Change default image format
         * Minor optimizations

        cpp:
         * Fix utf8/utf16 conversion. Bug #91644

        build system:
         * Do not hardcode -fPIC in Makefile.am
         * cmake: Allow configuring SHARE_INSTALL_DIR. Bug #90293

        utils:
         * pdfunite: Insert embedded files in result pdf. Bug #90066
         * pdftotext: Add -bbox-layout option. Bug #89941

Release 0.35.0
        core:
         * Fix assert in broken file. Bug #91344
         * Adjust memory layout computation of GooString
         * Make SplashBitmap XBGR transfer alpha channel
         * Splash: Fix wrong writes on non rgb outputs. Bug #90570
         * Splash: remove ifndef in Windows code
         * GlobalParamsWin bugfixes. Bug #91053

        qt4:
         * Switch default image format
         * Add IgnorePaperColor render flag

        qt5:
         * Improve efficiency of Poppler::Page::renderToImage
         * Switch default image format
         * Add IgnorePaperColor render flag

        build system:
         * Allow configuring SPLASH_CMYK support
         * Add configure --enable-build-type. Bug #90796

        glib:
         * Explicitly link against pthread
         * Deprecation fixes

        utils:
         * pdftocairo: Fix cast to pointer from integer of different size on win64

Release 0.34.0
        core:
         * Splash: Fix crash in PDF with nested softmasks. Bug #91240
         * Splash: Speed up of rendering icc based images. Bug #90171
         * PSOutputDev: Embed Type1 fonts to PostScript files correctly. Bug #19747
         * Fix pedantic memory leak

        glib:
         * update new symbols section

        build system:
         * cmake: Make sure ENABLE_LIBOPENJPEG is either 0 or 1

Release 0.33.0
        core:
         * Fix regression in pdftops parameter passing. Bug #89827
         * Combine base characters and diacritical marks. Bug #87215
         * Use width from W array for WMode positioning. Bug #89621
         * Fixed adding annotation of Subtype Popup to pdf page. Bug #89136
         * CairoOutputDev: Fix memory leak in CairoFreeTypeFont::create
         * SplashOutputDev: memset on error to have reproducible outputs

        qt4:
         * Fix PDF Text String -> QString conversion. KDE Bug #344849

        qt5:
         * Fix PDF Text String -> QString conversion. KDE Bug #344849

        glib:
         * Add poppler_annot_markup_set_popup_rectangle()
         * Fix segfault when creating PopplerAction. Bug #90093

        utils:
         * pdftohtml: Set exit status adecuately. Bug #83609

        build system:
         * configure: Fix invalid shell comparaison in libtiff test

Release 0.32.0
        core:
         * Annotations: Fix rendering of empty BG/BC arrays
         * Splash: Fix wrong colour shown when GouraudTriangleShFill uses a DeviceN colorspace. Bug #89182
         * Splash: Fix use of uninitialized variable in Splash::pipeRun
         * Remove unnecesary check for font validity. Bug #88939
         * Small optimization in GooString::appendfv(). Bug #89096
         * Fix crashes in malformed files

        utils:
         * pdftops: Make colorpsace optimization an option instead of default
         * pdfseparate: use always an unique instance for PDFDoc for savePageAs

        build system:
         * cmake: If extra-cmake-modules is around include the Sanitizers module

Release 0.31.0
        core:
         * CairoOutputDev: support embedding JBIG2 image data
         * Accept malformed documents whose root is a Page instead of a Pages. Bug #88172
         * Fix crash on broken documents
         * JPEG2000Stream: Inline doGetChar and doLookChar
         * GlobalParams cleaning

        utils:
         * pdftops: Add rasterization option. Bug #85934

        qt4:
         * Expose whole-words search option

        qt5:
         * Expose whole-words search option

Release 0.30.0
        core:
         * Openjpeg2 support (openjpeg 1 is preferred). Bug #58906
         * Fix potential memory corruption on TextSelectionDumper. Bug #84555
         * Check for invalid matrix in annotation. Bug #84990
         * Open some not conforming files. Bug #85919
         * PSOutputDev: Accept a list of pages indeces instead of first, last. Bug #84833
         * Fix memory leak on error condition

        cpp:
         * New API to set debug output function

        build system:
         * configure: Improve support with older clang versions. Bug #76963

        utils:
         * pdfunite: Support output intents, optional content and acroform

Release 0.29.0
        core:
         * Use correct LAB byte array for lcms input. Bug #86388
         * Write correct size in trailer dict. Bug #86063
         * Use Default colorspaces if present instead of Device colorspaces
         * Solve blend mode problem in CYMK and DeviceN for separable blend modes
         * Compilation/warning fixes on SunOS
         * Regression test improvements

        glib:
         * demo: Compilation fixlets

        build system:
         * cofigure: print "no" instead of "auto" if lcms not found

Release 0.28.0
        core:
         * Fix rendering of file with a wrong embedded font. Bug #84270
         * Use alt colorspace to get CMYK values for an ICC based CMYK colorspace. Bug #79019
         * Map Standard/Expert encoding ligatures to AGLFN names. Bug #80093
         * Make Attribute::getName() work when UTF-16BE is used. Bug #84722
         * Fix memory leak in Dict::remove. Bug #84607
         * Fix crashes in broken files
         * SplashOutputDev: Improve Overprintmode and shadings. Bug #80998
         * CairoOutputDev: fix crash when no group color space. Bug #85137
         * CairoOutputDev: Don't render text when text matrix is not invertable. Bug #78042
         * CairoOutputDev: Only embed mime data for gray/rgb/cmyk colorspaces. Bug #80719
         * CairoOutputDev: Only embed mime data if image decode map is identity
         * cairo: Use matrix to determine pattern size. Bug #33364
         * Fix compile warnings
         * regression test improvements

        glib:
         * Fix use of uninitialized members in PopplerInputStream. Bug #82630
         * Documentation improvements
         * Do not dist gir_DATA
         * Remove use of GTK deprecated functions. Bug #82384. Bug #82385
         * Build introspection linking to the uninstalled libraries. Big #84526

        qt4:
         * Add a new Page::annotations() that let's you specify subtypes

        qt5:
         * Add a new Page::annotations() that let's you specify subtypes

        utils:
         * pdfseparate: additonal handling for annotations. Bug #77549
         * pdfdetach: fix crash when getPage() returns null. Bug #85145
         * pdftocairo: Add support for printing to a Windows printer. Bug #79936

        build system:
         * Move automake version check from autogen.sh to configure.ac. Bug #79797
         * Makefile.am cleanups. Bug #79411
         * Use poppler-data pkg-config
         * Make autogen.sh work with variables with spaces
         * Don't use -fPIC on mingw
         * Fix build with --disable-utils. Bug #84448

Release 0.26.4
        core:
         * CairoOutputDev: Make sure we always push a transparency group in setSoftMaskFromImageMask(). Bug #81624
         * Fix a crash when adding Annotation without contents
         * Improve non-latin characters in inline notes. Bug #65956
         * Don't check for inlineImg twice. Bug #82059
         * printf() -> error()

        glib:
         * Return NULL in poppler_annot_get_contents also for empty strings
         * Fix a memory leak when getting text layout and attributes

Release 0.26.3
        qt5:
         * autoconf: Improve moc-qt5 detection
         * Fix compilation with MinGW

        glib:
         * Fix typo in api docs
         * use C90-style comments in public headers

        core:
         * Error out instead of exiting if allInter grows too much. Bug #78714

        qt4:
         * Update required version to Qt 4.7.0

        build system:
         * Include stdio.h from poppler-config.h

        misc:
         * Update .gitignore files

Release 0.26.2
        core:
         * Make sure we have an xref before using. KDE Bug #335413

        build system:
         * autoconf: Fix typo in configure.ac

        utils:
         * pdftohtml: exit with 0 with -v and -h

Release 0.26.1
        core:
         * Use field value V for radio buttons. Bug #75979
         * Fix extraction of text in some files. Bug #78145
         * Only add annotations of the current page when splitting. Bug #77549

        build system:
         * autoconf: Fix libopenjpeg 1.5 detection on some systems. Bug #78389

        glib:
         * Fix multiple definition of PopplerTextSpan

Release 0.26.0
        qt4:
         * Fix mismatched boolean logic in TextAnnotation::setInplaceIntent

        qt5:
         * Fix mismatched boolean logic in TextAnnotation::setInplaceIntent

        core:
         * Very small code cleanup

        cpp:
         * Very small code cleanup

Release 0.25.3
        core:
         * Fix crashes on broken files
         * Avoid MinGW/Cygwin warnings due to redefinition of NOMINMAX
         * Fix some small memory leaks

        qt5:
         * Fix some kinds of OCG models
         * Cleanup some deprecated methods

        glib:
         * Fix the first coord of the quadrilateral in create_poppler_quads_from_annot_quads(). Bug #76504

        utils:
         * pdftohtml: Fix typo in manpage

        qt4:
         * Fix some kinds of OCG models

Release 0.25.2
        core:
         * Tagged-PDF support
         * Open some broken files. Bug #75232
         * Fix crashes on broken files
         * Fix regression parsing some broken files. KDE Bug #329600
         * Improve compilation under Win 8 with Visual Studio 2012. Bug #73111
         * PSOutputDev: Ensure paper size takes into account rotation. Bug #72312
         * PSOutputDev: Fix DocumentMedia/Page/Media/PageBBox DSC comments
         * PSOutputDev: Use crop box as page size
         * PSOutputDev: Remove origpagesizes mode and make -origpagesizes an alias for -paper match
         * PSOutputDev: Only change paper size when different to previous size
         * PSOutputDev: Ensure there is always a page size in the output
         * PSOutputDev: Fix regression when creating level1 PS. Bug #75241 
         * CairoOutputDev: Clip to crop box. Gnome Bug #649886
         * Splash: Blend usage in PDF with spot colors casue random output. Bug #74883
         * Splash: Fix off by one that caused crash in a file. Bug #76387
         * Make sure number of least objects in hints table is valid. Bug #74741
         * Limit numeric parsing of character names. Bug #38456

        glib:
         * Tagged-PDF support
         * Annotation improvements
         * Install error callback. Bug #73269
         * Fix gobject-introspection warnings
         * demo: Fix performance in text markup annotations
         * Increase gtk3 dependency

        qt4:
         * Improve naming of internal export/import macros
         * Add GCC visibility export attributes
         * Expose document-supplied text direction

        qt5:
         * Improve naming of internal export/import macros
         * Add GCC visibility export attributes
         * Expose document-supplied text direction

        utils: 
         * pdftocairo: Ensure page size and crop box works the same as pdftops
         * Fix TIFF writting in Windows. Bug #75969 

        buildsystem:
         * Learn about automake 1.14
         * Do not define -ansi. Bug #72499
         * cmake: Install JpegWriter.h depending on libjpeg
         * cmake: Use c99 for the c compiler

Release 0.25.1
        core:
         * GooString format: Added some tests + improved documentation
         * GooString format: fixed bug with printing LLONG_MIN
         * regression test improvements

        qt4:
         * Arthur backend font rendering improvements
         * test program to save to file

        qt5:
         * Arthur backend font rendering improvements
         * Improve detection of Qt5 moc. Bug #72744
         * test program to save to file

        utils:
         * pdfunite: Work even if there's a single file given
         * pdfunite: do not lose fonts when merging some files

Release 0.25.0
        core:
         * Annotation improvements
         * Tagged PDF work
         * Improve speed on some files using ICC color space
         * Use ICC profile in OutputIntents. Bug #34053
         * Limit use of ZapfDingbats character names. Bug #60243
         * Splash: correction for knockout transparency groups
         * regression test improvements

        utils:
         * pdftoppm: Added thinlinemode option setting
         * pdfinfo: Indicate if pdf contains javascript
         * pdfinfo: Add option to print out javascript
         * pdfimages: Print size, ratio, and ppi
         * pdfimages: More image output format support
         * pdfseparate: allow zero-padded pagespecs

        glib:
         * Annotation improvements
         * Add API to get text, text layout and text attributes for a given area
         * demo improvements

Release 0.24.5
        core:
         * Fix crash due to wrong formatting of error message. KDE Bug #328511

Release 0.24.4
        core:
         * Fix regression in broken endstream detection. Bug #70854
         * Catalog: sort entries of NameTrees to make sure lookup works. Bug #26049
         * Don't infinite loop if reading from GooFile::read fails. Bug #71835

        utils:
         * pdftotext: Do not close stdout. Bug #71639
         * pdftotext: Silence warning for may be used uninitialized variable. Bug #71640
         * pdftotext: Escape the text of the xml headers
         * Warn the user if he provides a wrong range

        qt4:
         * Fix typo in xml API. Bug #71643

        qt5:
         * Fix typo in xml API. Bug #71643

Release 0.24.3
        core:
         * PSOutputDev: Fix PFB font embedding. Bug #69717
         * CairoOutputDev: Do not set an invalid matrix in drawImage(). Bug #70085 

        qt4:
         * Don't crash if getXRef()->copy() fails

        qt5:
         * Don't crash if getXRef()->copy() fails

        utils:
         * pdfseparate: Allow only one %d in the filename. Bug #69434
        
Release 0.24.2
        core:
         * Windows: Fix CreateFile fails with ERROR_SHARING_VIOLATION. Bug #69597

        utils:
         * pdfseparate: improve the path building
         * pdftocairo: check file opening failure in beginDocument()
        
Release 0.24.1
        core:
         * SplashOutputDev: use getRGBLine images if available. Bug #66928
         * SplashOutputDev: Don't copy bitmap if we don't need to.
         * PSOutputDev: Fix regression in -eps -level1sep rendering. Bug #68321
         * Fix crash in malformed file 1026.asan.0.42.pdf
         * use copyString instead of strdup where memory is freed with gfree. Bug #67666

        utils:
         * pdfdetach: don't mention xpdfrc
         * pdftotext: Fix -bbox with stdin as input. Bug #45163
         * pdftohtml: Fix jpeg image export. Bug #48270
         * pdfimages: Fix typos in man page

        glib:
         * demo: Remove GTK_DISABLE_DEPRECATED compilation flag

        qt4:
         * Fix small typo in documentation

        qt5:
         * Fix small typo in documentation

Release 0.24.0
        core:
         * TextOutputDev: Do not draw ligatures more than once when selected. Bug #9001
         * PSOutputDev: Make some pdftops conversions much faster
         * PSOutputDev: Initialize t3FillColorOnly
         * SplashOutputDev: Fallback to 1x1 bitmap if we fail to create the real size

Release 0.23.4
        core:
         * TextOutputDev: clip the selected text rendering to the selection box. Bug #66983
         * CairoImageOutputDev: Fix the bounding box of saved images

        build system:
         * Improve linking against pthreads

Release 0.23.3
        core:
         * Annotation improvements
         * Fix crashes on malformed files
         * TextSelectionPainter: Draw glyphs after selection background
         * TextOutputDev: add a method to TextPage to get the selection as a list of words

        qt5:
         * Initial Qt5 port

        qt4:
         * Windows compile fixes
         * Demo: Allow the choose the page rotation

        build system:
         * Fix mingw build
         * Minor autotools fixes

Release 0.23.2
        core:
         * SplashOutputDev: Speed-up some tiling on a 10x factor
         * Improve caching of lcms2 ICC color profiles
         * Put some private classes in an anonymous namespace

        qt4:
         * Add a thread stresser tool

        build system:
         * Fix mingw build

Release 0.23.1
        core:
         * XRef stream writing: Write 32-bit offsets when possible
         * Fix splashModeBGR8 rendering (Bug #64381)

        glib:
         * Do not use deprecated gtk_scrolled_window_add_with_viewport() (Bug #64683)

        build system:
         * Fix Large file support when using cmake

Release 0.23.0
        core:
         * Make rendering thread safe
         * Large file support
         * Implement Crypt filter (Bug #62800)
         * Fix endstream detection (Bug #62985)
         * CairoOutputDev: support uncolored tiling patterns (Bug #59179)
         * SplashOutputDev: Introduce Thin Line mode support (Bug #37347)

        qt4:
         * Expose Thin Line mode support

Release 0.22.4
        core:
         * Always consider a softmask transfer function (Bug #63587)
         * Fix crash on malformed files (Bug #63190)
         * Splash: Fix compilation with fixed point mode enabled

        utils:
         * Fix crash on some files (Bug #63909)

        qt4:
         * Fix name decoding of some attachments (KDE Bug #307786)

        build system:
         * Fix compilation with mingw-w64 compiler

Release 0.22.3
        core:
         * Check order bounding box values in tiling pattern (Bug #62369)
         * CairoImageOutputDev: Don't change image interpolation when printing (Bug #62418)
         * TextOutputDev: Set text matrix when painting selection (Bug #61042)
         * Only write the file once when saving (Bug #62739)
         * Fix for complete rewrites in repaired files
         * Fixlet regarding spec interpretation for Link Zoom value
         * Fix typos in man pages
         * Fix compile when not using libjpeg

        glib:
         * Always start from the beginning when starting a new search on a page (Bug #59972)

        qt4:
         * Fix crash in files with LinkRendition (KDE Bug #317710)

        build system:
         * Small cmake improvements

Release 0.22.2
        core:
         * Correct rendering of underline and strike out annotations (Bug #61518)
         * Workaround broken jpeg stream definitions (Bug #61994)
         * SplashOutputDev: Restore CTM on early exits (Bug #61413)
         * SplashOutputDev: Make sure we don't try to paint in x < 0 (KDE Bug #315432)
         * Fix latin page labels. (Bug #61034)
         * Fix compilation with jpeglib9
         * Fix minor valgrind warning

        utils:
         * pdfimages: Fix extraction of some images (Bug #61168)

        build system:
         * Fix the build with automake-1.13

Release 0.22.1
        core:
         * Fix crash in some pdf files when extracting text (Bug #59561)
         * Fix crashes in wrongly formed files
         * Fix wrong warning when opening some files (Bug #58966)

        build system:
         * Improve autoconf jpeglib.h detection (Bug #59186)

Release 0.22.0
        core:
         * Fix crash in invalid files that define a <= 0 bits per image value
         * Fix a few issues in JPX decoding when not using OpenJPEG
         * TextOutputDev: Use page size for max value in TextPage::visitSelection
         * Fix typo in error message

        utils:
         * Fix pdfunite regression (Bug #58569)
         * Demo fixes and improvements

        misc:
         * pdf-inspector improvements

Release 0.21.4
        core:
         * SplashOutputDev: Fix crash when rendering in monochrome mode
         * SplashOutputDev: Fix line widths in monochrome mode (Bug #57294)
         * PSOutputDev: Fix crop on EPS conversion (Bug #30692)
         * TextOutputDev: Fix minor logic mistake
         * Fix assert on some malformed files (Bug #58257)
         * Move #include "jpeglib.h" into .cc file (Bug #57687)
         * Filter text that may end up being written to the shell
         * Fix windows compile warnings

        glib:
         * Add poppler_annot_set_flags (Bug #58015)
         * Demo fixes and improvements

        qt4:
         * Fix check_lexer on 32-bit systems

Release 0.21.3
        core:
         * Splash: Implement bilinear image scaling (Bug #22138)
         * CairoOutputDev: Update fill and stroke color in startPage (Bug #54526)
         * Fix GooString::insert()
         * Allow large chars in TextPage
         * Fix crash on ActualText::end
         * Don't use memcpy to copy classes
         * Fix warnings

        glib:
         * Check if words end with spaces (Bug #54504)
         * Ensure text is only computed on first render
         * Fix warnings while generating introspection file
         * Fix returns tag in PopplerAttachmentSaveFunc api doc
         * Minor demo fixes

Release 0.21.2
        core:
         * CairoOutputDev: make drawImage work with images > 32767 in width/height (Bug #56858)
         * CairoOutputDev: Fix soft mask when image resolution != smask resolution (Bug #57070)
         * CairoOutputDev: Fix crash in CairoImageOutputDev with setSoftMaskFromImageMask (Bug #57067)
         * Remove a check on fonts that we don't need (Bug #56753)
         * Misc code cleanups

        utils:
         * pdftocairo: Add tiff output support (Bug #57006)
         * pdfunite: Fix -v (Bug #56817)
         * Misc code cleanups

Release 0.21.1
        core:
         * Annotation improvements
         * Form improvements
         * CairoImageOutputDev: Support parameterized Gouraud shading (Bug #56463)
         * UTF validation fixes
         * Do not call drawing routines if we don't need non text (Bug #54617)
         * Fix Memory leak in CharCodeToUnicode (Bug #54702)

        qt4:
         * Make LinkRendition properties available (Bug #55378)
         * Accessors for FormWidgetChoice::editChoice
         * Implement overprint

Release 0.21.0
        core:
         * Support the modification of files with Encrypt
         * Annotation improvements
         * Form improvements
         * Splash: Implement DeviceN support
         * Splash: Avoid bogus memory error for tilingPattern
         * TextOutputDev: Allow multiple fonts in a TextWord
         * Kill the concept of base dir
         * PSOutputDev: Always write HiResBoundingBox (Bug #53159)
         * Convert UTF-16 to UCS-4 when reading toUnicode cmap
         * GooString formatting: add support for uppercase hexadecimal
         * Use error() instead of fprintf(stderr, ...) in Annot::layoutText
         * poppler-config.h: remove WITH_FONTCONFIGURATION_* macros

        glib:
         * Annotation improvements
         * Add poppler_page_remove_annot()
         * Add poppler_document_new_from_stream
         * Add poppler_document_new_from_gfile
         * Add poppler_page_find_text_with_options (Bug #2951)
         * Demo improvements
         * Port tests and demo to GTK+3

        qt4:
         * Add accessor methods for movie poster information
         * Make 'additional actions' available in Annotation API (Bug #53589)
         * Add whole-page search method to Poppler::Page
         * Small changes in tests

        utils:
         * pdftohtml: Make the output more xhtml compliant
         * pdftohtml: Add -fontfullname. (Bug #49872)
         * pdftohtml: Do not invoke gs anymore

        build system:
         * Add the possibility of using lcms1 even if lcms2 is installed
         * Remove extra fontconfig CFLAGS and LIBS

Release 0.20.5
        core:
         * Fix crashes in malformed documents
         * Fix parsing of very big numbers
         * Splash: Do not render invalid font outlines (Bug #55573)
         * Check for NaN in TextPage::addChar

        build system:
         * Fix build using mingw64 with winpthread
         * autotools: Fix compilation when lcms is on non standard locations (Bug #55326)
         * Support automake-1.12 (Bug #55541)

        glib:
         * Chain up finalize to the parent class (Bug #55521)

Release 0.20.4
        core:
         * Improvements regarding embedded file handling. (KDE Bug #306008)
         * Fix opening some broken files (Bug #14303)
         * Fix memory leaks
         * Fix crashes in various broken files
         * Refine warning to only complain when really needed
         * Remove function declared but not implemented
         * Remove execution permissions from a header file

        qt4:
         * Improvements regarding embedded file handling. (KDE Bug #306008)

Release 0.20.3
        core:
         * If NULL, NULL fails as password try EMPTY, EMPTY before failing (Bug #3498)
         * SplashOutputDev: Fix bogus memory allocation size in Splash::arbitraryTransformImage (Bug #49523)
         * SplashOutputDev: Fix segfault when scaleImage returns NULL (Bug #52488)
         * SplashOutputDev: Blend mode enhancements for CMYK
         * PSOutputDev: Fix conversion when creating multiple strips (Bug #51982)
         * PSOutputDev: Fix Bitmaps in level2sep or level3sep (Bug #52384)
         * PSOutputDev: Fix DeviceN images with alternate Lab colorspace in level 3 PostScript (Bug #51822)
         * PSOutputDev: Make sure xScale and yScale are always initialized (Bug #52215)
         * Unify poppler-config.h includes in core "installed" headers (Bug #52193)
         * Replace c++ style includes with c style ones (Bug #52426)

        utils:
         * pdfseparate: Return 0 on success
        
Release 0.20.2
        core:
         * Fix compilation on Windows
         * Copy resources content defined in the pages dict on save (Bug #51369)
         * PSOutputDev: Correct %%DocumentCustomColors (Bug #51479)
         * PSOutputDev: Fix handling of DeviceN images in level 3 PostScript (Bug #51548)
         * Fix crash in malformed documents
        
        qt4:
         * Do not hang on malformed /Annots objects (Bug #51361)

Release 0.20.1
        core:
         * Remove unnecesary transparency group handling in splash (Bug #13487)
         * Include substitute font name in system font cache (Bug #49826)
         * Fix logic on SplashBitmap::writeImgFile
         * PSOutputDev: use setoverprintmode only if rip knows it
         * Fix crash in malformed documents
        
        qt4:
         * Make TextAnnotation constructor public
         * Fix saving of default TextAnnotation to xml
         * Keep page rotation into account when normalizing annotation coords
        
        glib:
         * Fix memory leak when document fails to load
         * Make sure password is always converted to latin1
         * Fix typo in documentation

        build system:
         * Distribute cmake/modules/FindLCMS2.cmake (Bug #49818)

        utils:
         * pdftohtml: Determine if font is bold or italic based on FontDescriptor (Bug #49758)
         * pdfseparate: Syntax fixes in the man page

Release 0.20.0
        core:
         * Reconstruct xref table if xref needed but missing (Bug #40719)
         * Fix getFullyQualifiedName with unicode field names (Bug #49256)
         * SplashOutputDev: Fix rendering of knockout groups (Bug #12185)
         * SplashOutputDev: Fix cmyk transfer bug (Bug #49341)
         * Fix crashes in broken documents
         * Bring back the Outputdev::begin/endMarkedContent virtuals
         * Build fixes
        
        qt4:
         * Convert propertly unicode encoded field qualified names
        
        glib:
         * glib: Use delete[] to free array allocated with new[] (Bug #48447)

Release 0.19.4
        core:
         * Annotation improvements
         * More compatible file writing
         * SplashOutputDev: Fix slow rendering of pdf with a lot of image masks in pattern colorspace
         * Fix crashes in broken documents
         * Fix spurious warning messages
        
        utils:
         * pdftotext: Add missing section heading to man page
         * pdftohtml: Fix crash when the destination file does not exist
        
        build system:
         * autoconf: Do not append "-ansi" to CXXFLAG, if "-std=XXX" is already specified.
         * autoconf: Do not clear FREETYPE_CFLAGS, FREETYPE_LIBS before PKG_CHECK_MODULES()
         * autoconf: Copying graphics library CFLAGS to cpp frontend Makefile.am

Release 0.19.3
        core:
         * Annotation improvements
         * CairoOutputDev: Fix regression caused by mesh gradients
         * CairoOutputDev: Use correct userfont font bbox (Bug #48399)
         * CairoOutputDev: Fix paintTransparencyGroup when both mask and fill opacity are required (Bug #48453)
         * CairoOutputDev: Ensure 0 width lines with stroke_adjust are aligned
         * CairoOutputDev: Only align stroke coords for horizontal and vertical lines (Bug #48318)
         * CairoOutputDev: Fix stroke pattern with transparency group (Bug #48468)
         * Fix crash in JBIG2Stream decoding
         * Fix memory leak when looking for a substitute font
         * Fix page labels to not have a null character at the end
         * Fix Splash CMYK merge error
         * ttc<->ttf fallback is expected for CJK font list in for Windows (Bug #48046)
        
        qt4:
         * Annotations can now be modified
         * Annotations can now be added
         * Annotations can now be removed

        utils:
         * pdftohtml: Add producer and version to xml output
         * pdftohtml: Fix the mask inversion for PNG
         
Release 0.19.2
        core:
         * Annotation improvements
         * CairoOutputDev: update cairo mesh pattern to 1.12 api
         * CairoOutputDev: fix some transparency issues (Bug #47739)
         * CairoOutputDev: Fix regression in some shadings
         * TextOutputDev: Don't add newline to last line extracted by TextSelectionDumper (Bug #45955)
         * CJK font improvements
         * Improve font matching for non embedded fonts
         * Fix regression regarding forceRasterize in PSOutputDev
         * Fix typos glyph names in truetype 'post' table standard mac ordering
        
        build system:
         * minor cmake fixes
         * misc autoconf fixes
         * POPPLER_VERSION is now wrapped in quotes

        utils:
         * pdftohtml: extract mask images even if they are not JPEG (Bug #47186)
         * pdftohtml: Flip images if they need to (Bug #32340)
         
Release 0.19.1
        core:
         * Improve CJK suport in PSOutputDev
         * CJK substitute implementation on WIndows platforms
         * Do not crash on malformed files with 0 bits in the color map of an image
         * Fix regression in some PSOutputDev array sizing
         * Improvements to Annotation editing
         * Fix logic error in Rendition parsing code (Bug #47063)
         * Minor API changes to SplashOutputDev (Bug #46622)
         * Fix mismatch in some functions declarations
         * Update poppler copyright year
        
        utils:
         * pdftops: Fix -passfonts regression. (Bug #46744)
         * pdffonts: List the encoding of each font. (Bug #46888)
         * pdftohtml: Add possibilty of controlling word breaks percentage. (Bug #47022)
         
        qt4:
         * Support for LinkMovie object (Bug #40561)
         * Support for Media Rendition
         
        glib:
         * Add poppler_fonts_iter_get_encoding
         * Improvements to the demo

Release 0.19.0
        core:
         * Merge Xpdf 3.03
         * Add support for lcms2
         * SplashOutputDev: Implement Overprint
         * PSOutputDev: Implement Overprint
         * Expand glyph name ligatures such as "ff", "ffi" etc to normal form (Bug #7002)
         * Use an Identity CharCodeToUnicode for Adobe-Identity and Adobe-UCS collections (Bug #35468)
         * CairoOutputDev: Avoid setting huge clip area when printing (Bug #44002)
         * CairoOutputDev: Fix test for rotation (Bug #14619)
         * CairoOutputDev: Don't read inline image streams twice (Bug #45668)
         * CairoOutputDev: set mask matrix before drawing an image with a mask (Bug #40828)
         * Update glyph names to Unicode values mapping (Bug #13131)
         * Only use Hints table when there are no parse errors (Bug #46459)
         * Expose POPPLER_VERSION in poppler-config.h
        
        utils:
         * pdftohtml: Output images in -xml mode if no -i option is specified
         * pdftohtml: Get rid of static data members; merge duplicated jpeg dumping code
         * pdftohtml: Be more consistent generating the outlines
         * pdftohtml: Generate outlines in pdftohtml in -xml mode (Bug #56993)
         * pdftohtml: Combine UTF16 surrogate pairs (Bug #46521)
         * pdfinfo: Report page rotation
         * pdfinfo: Decode utf-16 surrogate pairs
         * pdftoppm: Allow one of -scale-to-[xy] = -1 to mean the aspect ratio is to be preserved (Bug #43393)
         * pdftocairo: Allow one of -scale-to-[xy] = -1 to mean the aspect ratio is to be preserved
         * pdffonts: Add -subst option to list the substitute font name and filename
         * pdfseparate: Produce PDF/X conformant pdf pages if the original PDF was PDF/X conformant
         * pdfimages: Add -list option to list all images (Bug #46066)
         * Improve various manpages
         
        glib:
         * Add poppler_fonts_iter_get_substitute_name
         * Demo improvements
         * Update gtk-doc makefile and m4 file
         * Fix typos in documentation
        
        qt4:
         * Add the option of PSConverter creating EPS
         * Form support improvements
        
        build system:
         * autotools: Print the cairo version required if not found (Bug #44619)
         * autotools: Print the glib version required if not found
         * autotools: Use pkgconfig to check for libopenjpeg (Bug #21789)
         * autotools: Replace openjpeg compile test with a version test
         * Add a configuration option for the test data dir

Release 0.18.4
        core:
         * CairoOutputDev: Restore temporary clip used in CairoOutputDev::fill when painting a mask
         * CairoOutputDev: Ensure paintTransparencyGroup uses same ctm as beginTransparencyGroup. Bug #29968
         * CairoOutputDev: Use fabs when comparing the transformed line width. Bug #43441
         * CairoOutputDev: Remove unused variable in CairoFontEngine.cc. Bug #45442
         * SplashOutputDev: Do not use 50Kb of stack in SplashXPath::addCurve. Bug #44905
         * JpegWriter: set image parameters after jpeg_set_defaults(). Bug #45224
         * OpenJPEG decoder: Set OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG if you have it. Bug #43414
         * Lexer: convert integer to real when overflow occurs. Bug #45605

        glib:
         * Various minor introspection and documentation improvements. Bug #44790
         * Fix return values. Bug #45440. Bug #45441
         * gtk-doc improvements. Bug #45549
         * Introspection improvements. Bug #45455
        
        utils:
         * HtmlOutputDev: Proper unicode support when dumping PDF outline. Bug #45572
         * HtmlOutputDev: Fix leaks. Bug #45805
         * HtmlOutputDev: Close li tags in generated outlines. Bug #45807
         * man pages: fix minor issues with hypens and %

        build system:
         * automake: Link to lcms if needed
         * automake: Fix build for builddir != srcdir. Bug #45434
         * automake: Improve moc detection when cross compiling
         * Fix build with latest mingw-w64 headers. Bug #45407
        
        qt4:
         * remove non-existing 'qt' include dirs
        
Release 0.18.3
        core:
         * Do not fail if we are trying to save a file with Encrypt that has not been modified. KDE Bug #288045
         * Include .otf fonts when finding substitute fonts. Bug #44412
         * Fix stack overflow in PDFDoc::markObject(). Bug #44660
         * Include strings.h as we use memcpy. Bug #43558

        utils:
         * pdfunite: Properly initialize globalParams. Bug #44659
         * pdfseparate: Properly initialize globalParams
         * Fix iniliazialization of GooString arguments

        build system:
         * autoconf: Check for cairo-ft and other cairo backends. Bug #43969
        
Release 0.18.2
        core:
         * Fix leak in GooString when resizing to a smaller string
         * Fix crash if failing to parse the colorspace. Bug #42793
         * Make GfxColorSpace::parse accept dicts

        qt4:
         * Use PDFDoc(wchar_t *, ...) on Windows. Bug #35378
         * Add missing include
         * Minor fixes in documentation

        utils:
         * pdftocairo: Fix crash when rendering only odd/even pages in a printing format
        
        build system:
         * Fix pkg-config files
        
Release 0.18.1
        core:
         * PSOutputDev: Output PS that does not confuse libspectre
         * PSOutputDev: Fix tiling pattern fill matrix. Bug #41374
         * PSOutputDev: Emit non repeating patterns just once
         * PSOutputDev: Fix uncolored tiling patterns. Bug #41462
         * CairoOutputDev: Fix crash when using poppler_page_get_image()
         * CairoOutputDev: Fix various setSoftMask bugs. Bug #41005
        
        utils:
         * pdftocairo: Flush/close files one we are done using them
         * pdftocairo: Compile in Windows
        
        build system:
         * CMake: Fix typo in option description
         * CMake: Correctly include fontconfig include dir
         * Remove poppler-cairo dependency from poppler-glib pkg-config file
        
        qt4:
         * Minor fixes in documentation

Release 0.18.0
        core:
         * Fix small memory leak when dealing with marked content
         * Remove DCTStream::getRawStream since Stream::getNextStream does the same
        
        utils:
         * Rename pdfmerge to pdfunite
         * Rename pdfextract to pdfseparate
         * pdfseparate: Complain if %d is not present and it should
         * Add pdfseparate and pdfunite man pages
        
        build system:
         * Minor cleanup in regarding removed qt code

Release 0.17.4 (0.18 RC)
        core:
         * SplashOutputDev: Compile when defining USE_FIXEDPOINT
         * PNGWriter: Compile with libpng >= 1.5.0
        
Release 0.17.3 (0.18 Beta 3)
        core:
         * PSOutputDev: Use Patterns for tiling fill when PS level >= 2
         * PSOutputDev: Avoid using /PatternType if only one instance of the pattern is used
         * PSOutputDev: Add poppler version as comment in the file
         * CairoOutputDev: Set mime data for soft masked images (Bug #40192)
         * CairoOutputDev: Assume printer pixel size is 1/600" when stroking 0 width lines (Bug #39067)
         * CairoOutputDev: Use cairo_show_text_glyphs() when printing
         * CairoOutputDev: Fix stroke patterns (Bug #11719)
         * CairoOutputDev: Fix unique id mime data
         * CairoOutputDev: fix stroking of very thin lines
         * CairoOutputDev: align strokes when Stroke Adjust is true and line width <= 1 (Bug #4536)
         * TextOutputDev: Add TextFontInfo::matches()
         * Improve PNGWriter
         * Rework writing of PDF files

        utils:
         * Introduce pdftocairo - utility for creating png/jpeg/ps/eps/pdf/svg using CairoOutputDev
         * Introduce pdfextract - utility to extract PDF pages
         * Introduce pdfmerge - utility to merge PDF files
         * Fix compilation warning
         * pdftohtml: Support text rotation (Bug #38586)
         * Update SEE ALSO section of man pages

        glib:
         * Add poppler_page_get_text_attributes()
         * Add text attributes information to text demo

        qt4:
         * Add a way to get the fully qualified name of a FormField
         * Minor documentation improvements
        
Release 0.17.2 (0.18 Beta 2)
        core:
         * EmbeddedFile improvements
         * don't gmalloc(-1) upon ftell failure
         * Fix missing content in some pages (Bug #39637)
         * Improve selection of CJK fonts (Bug #36474)
         * SplashOutputDev: Implement overprint
         * SplashOutputDev: Render dots for 0 length dashed lines (Bug #34150)
         * SplashOutputDev: Fix bad memory access when not using antialias (Bug #37189)
         * PSOutputDev: Make level2sep and level3sep write cmyk instead of rgb
         * PSOutputDev: Make level1sep, level2sep and level3sep write gray instead of rgb for gray images
         * Fix numerical overflow in libopenjpeg JPXStream (Bug #39361)
         * Fix crash on truncated JPEG/DCT stream (Bug #36693)
         * Make sure the dict is a page dict (Bugs #35925 #39072)
         * Fix calculation of startXRefPos
         * Handle missing startxref properly (Bug #38209)
         * Parse the "Medium" modifier when asking fontconfig for a font
         * Header cleanup
         * Include cleanup
         * Define cleanup

        glib:
         * Add missing permissions flags to PopplerPermissions
         * Add missing permission flags to info demo
         * Update gtk-doc.make
         * Add poppler_document_get_n_attachments()
        
        utils:
         * pdftohtml: Fix encoding of PDF document metadata (Bug #37900)
         * pdftohtml: Fix vertical spacing issues  (Bug #38019)
         * pdftotext: Fix -htmlmeta to correctly output U+2019 in PDF metadata (Bug #37900)
         * pdftoppm: Implement overprint

        qt4:
         * Rework EmbeddedFile internals
         * Fix possible crash in test
        
Release 0.17.1 (0.18 Beta 1)
        core:
         * Rework the way form fields tree is built
         * Cleanup unused parameters/variables

        glib:
         * Add JavaScript actions
         * demo: Show javascript actions in actions view
        
        qt4:
         * tests: Turn some assignments to bool into QVERIFY checks

Release 0.17.0 (0.18 Alpha)
        core:
         * Splash: Implement tiling patterns
         * Splash: Support slight hinting
         * Splash: Radial shading improvements
         * Splash: General speed improvements
         * Arthur: Add Hinting API
         * Cairo: Implement Type 4,5,6,7 shadings using cairo mesh gradients
         * Cairo: Use the new cairo unique id to set the surface id when printing
         * PS: Add PS level1 non standard binary output option
         * PS: Allow setting the rasterization resolution
         * Form support improvements
         * Annotation support improvements
         * General speed improvements
         * Add support for handling ViewerPreferences
         * Remove abiword output device

        utils:
         * pdftoppm: Add -singlefile option (Bug #32025)
         * pdftoppm: Add TIFF output format support (Bug #32027)
         * pdftops: Add PS level1 non standard binary output option
         * pdftops: Allow setting the rasterization resolution
         * pdftoabw has been removed
        
        glib:
         * Add poppler_form_field_get_action() (Bug 33174)
         * Remove GDK API
         * Remove test-poppler-glib
         * demo: Add a tooltip with current selected character in text demo
         * demo: show the activation action of form fields if there's one

        cpp:
         * Add TIFF output possibility
         * Add PNM output possibility

        qt4:
         * Support slight hinting
         * Form support improvements
        
        qt3:
         * The Qt3 frontend has been removed
        
        tests:
         * Merge splash and cairo tests into a single gtk-test tool

Release 0.16.4
        core:
         * Small improvements in Annot parsing

        glib:
         * Add g_return macros to make sure index is correct in form field choice methods
         * Fix a crash when a choice form field has no items selected in glib-demo

        utils:
         * Small fixes to the pdftohtml manpage
         * Fix copyright years

        qt4:
         * Fix caption of push button fields

Release 0.16.3
        core:
         * Increase precision in PS output device
         * Workaround bug when converting pdf to ps with level1 (Bug #31926)
         * Fix crash in Splash output device in some broken pdf
         * Fix infinite loop in some broken files
         * Fix rendering of some substituted fonts (Bug #34522)
         * Do not ask Freetype for 0x0 fonts in Splash output device (Bug #34602)
         * Don't assume y1 > y3 for points of a highlight annotation (Gnome Bug #643028)
         * Handle fontCIDType2OT when creating freetype font in Cairo output device (Gnome Bug #643273)
         * Fix crash in some pdf that use ICC color space (Bug #34357)

        glib:
         * Don't use an uninitialized local variable in demo
         * Add some introspection markers

        qt4:
         * Fix crash regression in unicodeToQString (again)

        utils:
         * pdftotext: Do not crash when using -bbox

Release 0.16.2
	core:
	 * Fix text extraction for some files

	qt4:
	 * Fix crash regression in unicodeToQString

Release 0.16.1
	core:
	 * Fix colorspace issues in the Cairo backend (Bug #32746)
	 * Remove declaration of function without implementation
	 * Do not crash in case jpeg_create_decompress fails (Bug #32890)
	 * Fix variable access mismatch (Bug #33063)
	 * Fix converting some pdf to ps with -level1sep (Bug #32365)
	 * Fix line selection, dont check y for Line selections
	 * Include zlib header in PNGWriter.cc
	 * Fix leak in Splash backend when doing axial shaded fills
	 * Fix label to index conversion on multiple prefixes

	glib:
	 * Use NULL instead of FALSE for functions returning a pointer
	 * Fix memory leak in poppler_page_get_text_layout() for pages with no text

	qt4:
	 * Fix unicodeToQString() to correctly decode the Unicode sequence

Release 0.16.0

	core:
	 * Improve the correctness of radial shadings (Bug #32349)
	 * Adapt the zlib-based FlateStream code to API changes  (Bug #32065)
	 * Make PreScanOutputDev be less agressive when deciding to rasterize (Bug #30107)
	 * Fix some warnings in newer gcc in Splash backend
	 * Fix the preliminary bbox/clip calculation in Splash backend
	 * Use A1 instead of A8 for imagemask in the Cairo backend
	 * Windows compile fixes

	utils:
	 * Do not return 99 (or 1) with -h, -v and -printenc (Bug #32149)
	 * Misc style improvements to pdftohtml code
	 * pdftohtml: Remove the -resolution flag introduced in 0.15.0 and fix the
	              existing -zoom flag

	build system:
	 * Add more warning flags to the default gcc builds
	 * Enable GObject introspection support in the cmake build system

	qt4:
	 * Windows compile fixes

Release 0.15.3 (0.16 RC)

	core:
	 * Improve rendering of radial shadings
	 * Open a broken file (Bug #31861)
	 * Correct parsing of linearization table (Bug #31627)
	 * Find fonts inside patterns (Bug #31948)
	 * [win32] Simplify strtok_r implementation
	 * Use a std::vector<char> instead of a var-length-array of chars
	 * Fix crashes in broken files
	 * Use sets instead of arrays for looking for duplicate fonts

	cpp:
	 * Include correction

	utils:
	 * pdffonts: Remove duplicated code

Release 0.15.2 (0.16 Beta 2)

	core:
	 * Improve shadings and antialias in the Splash backend (Bug #30436)
	 * Linearization improvements
	 * Small improvements to the Arthur backend
	 * Fix calculation of the size of some pages (Bug #30784)
	 * Fix crashes in broken documents

	qt4:
	 * Add Page::renderToPainter() method
	 * Add setDebugErrorFunction() method

	cpp:
	 * Add the hability to render pages to an image

	utils:
	 * Add -p flag to pdfimages

	build system:
	 * Remove -ansi flag for cywin and mingw

Release 0.15.1 (0.16 Beta 1)

	core:
	 * Consider render value when colorizing text (Bug #2807)
	 * Improve rendering of Shading Type 6 and 7
	 * Improve dict lookup speed for big dicts
	 * Fix multiple crashes in malformed PDF files
	 * Fix memory leak in in malformed PDF files
	 * Fix memory leak in the Catalog names
	 * Fix uninitialized uses on DCTScanInfo
	 * Fix a crash when drawing square/circle annots without a border (Bug #30580)
	 * Only clip boxes to mediabox if we are at the page level (Bug #30784)
	 * Do not omit the notdef glyph in the Splash backend
	 * Fix a crash when redering documents with invalid type 3 fonts in the Cairo backend
	 * Form improvements
	 * Add a method to get the PDF file identifier

	glib:
	 * Add more printing options to the API
	 * Add a method to get the PDF file identifier
	 * Add accessor for all PopplerDocument properties
	 * Form improvements
	 * Documentation improvements
	 * Improvements to the demo

	qt4:
	 * Add a callback to know which page has been printed
	 * Add a method to get the PDF file identifier
	 * Optimize GooString to QString conversion
	 * Some more autotests
	 * Update Doxyfile (enables .qch file for assistant)

	build system:
	 * Require Cairo 1.10

	utils:
	 * pdftohtml: Add -s option to generate a single HTML page
	 * pdftotext: Add -bbox option

	cpp:
	 * Add the possibility of loading a document from raw data
	 * Add a method to get the PDF file identifier
	 * Improve Unicode to ustring conversion
	 * Documentation improvements
	 * Update Doxyfile

Release 0.15.0 (0.16 Alpha)

	core:
	 * Remove exception support
	 * Improve creation of Annotations
	 * Fix failure to parse PDF with damaged internal structure. (Bugs #29189 #3870)
	 * Add a way to access the raw text of a page
	 * Speed improvements when reading multiple characters from a given Stream
	 * Speed improvements in the Splash backend
	 * Speed improvement in gray color space calculations
	 * Speed improvement in ICC color space calculations
	 * Speed improvement when reading some fonts
	 * Make GBool a bool instead of an int

	glib:
	 * Add GObject introspection support
	 * Improve creation of Annotations
	 * Add a way to get the coordinates of each character of a page
	 * Add a way to get the page label
	 * Documentation improvements
	 * Support password protected documents in the demo
	 * Support for selection in the demo
	 * Support for adding annotationss in the demo
	 * Misc improvements in the internals
	
	qt4:
	 * Add a way to access the raw text of a page
	 * Recognize "Print" as named action
	 * Documentation improvements
	
	build system:
	 * Add option for autogen.sh to skip configure
	 * Nicer autogen.sh output
	 * Improvements when build the glib frontend with CMake
	
	utils:
	 * pdftohtml: Use splash instead of external gs invocation to render the background
	 * pdftohtml: Let the user specify the resolution of the background. (Bug #29551)
	
	cpp:
	 * Add a way to access the raw text of a page

Release 0.14.3

	core:
	 * Tell Windows we are writing/reading binary data from stdout/stdio (Bug #29329)
	 * Fix crash when parsing some Movie elements (KDE Bug #249586)

Release 0.14.2

	core:
	 * Fix rendering of some documents involving tilingPatternFill in the cairo output device
	 * Improve rendering of some annotations
	 * Handle ColorTransform in DCT streams when using libjpeg (Bug #28873)
	 * Fix crash in the ps output device in some files (KDE Bug #246269)
	 * Fix crash in some malformed files (Bug #28842)
	
	build system:
	 * Improve build on windows
	 * Add uninstalled .pc file support when using autoconf
	
	glib:
	 * Fix a crash when a layer doesn't have a name (Bug #28842)
	
	utils:
	 * Fix padding of names in pdftoppm

Release 0.14.1

	core:
	 * Add ObjectStream caching, makes opening some files ten times faster (Bug #26759)
	 * Fix crash when writing to negative coordinates (Bug #28480)
	 * Check objects are the type we want them to be when parsing GfxICCBasedColorSpace
	 * Optimize Splash::compositeBackground
	 * Optimize color space calculations by using sqrt instead of pow 0.5
	 * Fix crash in JBIG2Stream with malformed documents
	
	build system:
	 * Make sure we ship two needed cmake files
	 * Do not distribute glib/poppler-features.h and poppler/poppler-config.h
	 * Improve compilation with Sun Studio
	 * Fix linking of the cpp frontend when using autotools
	
	glib:
	 * Fix links/annots area for some documents (Bug #28588)
	 * Fix poppler_page_find_tex() when called more than once (Bug #27927)
	
	utils:
	 * Add -cropbox to pdftoppm manual

Release 0.14.0

	core:
	 * Fix crash when parsing pdf with broken JBIG2Stream (Bug #28170)
	 * Do not follow loops blindly when parsing XRef (Bug #28172)
	 * Allow quality & progressive mode to be utilised in JpegWriter
	 * Fix potential assert in Lexer code (KDE bug #240208)
	 * Fix opening of files whose /P is stored as unsigned integer
	 * Do not exit() when trying to allocate memory for the XRef fails
	
	cpp:
	 * Minor bugfixes
	 * Documentation improvements
	
	build system:
	 * Fix build in mingw32 when using autotools
	 * Preserve compiler flags when using cmake

Release 0.13.4 (0.14 RC 1)

	core:
	 * Include standard float.h instead of unportable values.h
	 * Fix first color stop offset of linear gradients. Bug #27837
	 * Fix compilation if JPEG nor PNG is used
	 * Use fabs for doubles instead of abs
	 * Use strtok_r instead strtok
	 * Adjust bbox for line annots when y1 = y2
	 * Some fixes and regressions in the cairo output device
	 * Better check of overlapping of table cells when selecting text
	
	cpp:
	 * Make the pkg-config files really work
	 * Fix in/out buffer sizes in some functions

Release 0.13.3 (0.14 Beta 2)

	core:
	 * Fix roll optimization in the PS function interpreter
	 * Correctly parse numbers with '+' sign. Gnome bug #614549
	 * Add support for cached files
	 * Add support for reading a cached file from stdin
	 * Add HTTP support using libcurl, disabled by default
	 * Add some const correctnes to GooString
	 * Rework DCTStream error handling. Bug #26280
	 * Use current fill_opacity when drawing soft masked images in Cairo backend. Gnome bug #614915
	 * Use the topleft of the Rect of text annots to draw
	 * Fix saving update docs that have a compressed xref table. Bug #27450
	 * Parse varius part of the document catalog on demand
	 * Implement colorizing image masks with pattern colorspace in Cairo backend
	 * Fix a crash when rendering 0x0 images in Cairo backend
	 * Check pattern status after setting matrix when rendering images
	 * Improve text selection/extraction order. Bug #3188
	 * Fix pattern size when bbox is not at 0,0
	 * Improve colorizing text and masks in pattern colorspace. Bug #27482
	 * Silence some Illegal entry in bfrange block in ToUnicode CMap. Bug #27728

	utils:
	 * Add the -o[dd] and -e[ven] options to pdftoppm
	 * Allow read from stdin using the new cached files feature
	 * Fix crash in pdftohtml when output filename was shorter than 5 characters

	glib:
	 * Use existing cairo api when rendering to a pixbuf
	 * Compile with -DGSEAL_ENABLE. Bug #27579

Release 0.13.2 (0.14 Beta 1)

	core:
	 * Improve Movie support
	 * Fix experimental Arthur backend to compile when if Splash backend is disable
	 * Fix usage of some streams in the Cairo backend
	 * Small improvements in the experimental Arthur backend
	 * Minor annotation improvements
	 * Rework LinkRendition to follow the spec
	 * Add support for Set-OCG-State actions
	 * Correctly initialize the grayscale softmask color in the Splash backend
	 * Correctly initialize actualText in TextOutputDev when initialization fails
	 * Various MSVC fixes

	glib:
	 * Add support for Movie objects
	 * Add support for Screen annotations
	 * Add support for rendition actions
	 * Add support for OCG State actions
	 * Improvements to the demo
	
	qt4:
	 * Always compile the experimental Arthur backend
	 * Minor speed improvement in QPainter usage
	 * Add a search overload that takes doubles instead of QRectF
	
	cpp:
	 * Fix iconv usage
	 * use gmtime() when gmtime_r() is not available
	 * Fix building in autotools in windows
	 * {from,to}_utf_8() -> {from,to}_utf8()
	
	build system:
	 * Multiple CMake build system fixes
	 * Fix of some DIST targets in autotools
	 * Make finding of Qt3 in autotools use pkg-config

Release 0.13.1 (0.14 Alpha 2)

	core:
	 * New C++ frontend to interface with Poppler using only STL
	 * Use the right matrix for the mask in drawMaskedImage in Cairo output device. Bug #16906
	 * Fix downscaling images when document is rotated in Cairo output device. Bug #26264
	 * GooVector rewrite, old version had "unknown" origins/license
	 * Fix use after free in a error condition
	 * Improve handling of broken commands. Bug #24575
	 * Fix potential use after free in Cairo output device.
	 * Fix regression in painting. Bug #26243
	 * Improve handling of FontConfig. Bug #26544
	 * Only assume the OC is not visible if it exists and is set to no. Bug #26532
	 * Fix a potential crash in Splash font handling on out of memory conditions
	 * Implement writeImgFile for splashModeXBGR8
	 * Several speed increases (around 40% in some documents) in the Splash output device
	 * Improve printing on the Cairo output device
	 * Do not use '\' character in PostScript names
	 * Omit writing of embedded fonts into temporary files in the Cairo output device. Bug #26694
	 * Improve filtering of some images in the Cairo output device. Bugs #25268, #9860

	utils:
	 * pdftoppm: Only swap w with h if rotation is 90 or 270
	
	build system:
	 * Add POPPLER_WITH_GDK in cmake build system. Bug #26247
	 * Fix typo: "MULTITHREAD" -> "MULTITHREADED in cmake build system
	 * Wrap #include <jpeglib.h> in extern "C" to fix build. Bug #26351
	 * Add the Win32-specific ENABLE_RELOCATABLE option to cmake build system
	 * Reflect that poppler-glib needs cairo now in cmake build system
	 * Use pkgconfig to detect libpng on autotools build system
	 * Detect the need for nanosleep in solaris in cmake build system. Bug #26650

Release 0.13.0 (0.14 Alpha)

	core:
	 * Improvements to Annotation rendering. Bug #23108
	 * Do not give an error when opening files without pages. Bug #24720
	 * Try to read streams without Length
	 * Do not crop the transformation matrix at an arbitrary value. Bug #25763
	 * Make poppler (optionally) relocatable on Windows
	 * Use a small object cache in GfxResources to cache GState objects
	 * Reduce the number of redundant pattern creations in the Cairo output device
	 * Use colToDbl() to avoid rounding error in the Cairo output device
	 * Fix problems with mask handling in the Cairo output device. Bug #8474
	 * Use a better scale down implementation in the Cairo output device
	 * Various optimizations to the Splash output device
	 * Add the possibility to use floats instead of doubles in the Splash output device. Bug #25578
	 * Write out fixed-content portion of Type 1 fonts in the PS output device
	 
	build system:
	 * Improvements to the CMake build system
	 * Enable AM_SILENT_RULES by default in autotools
	 * Require glib 2.18
	 * Require GTK+ 2.14
	 * Make fontconfig optional with mingw compiler
	 * Remove makefile.vc
	
	glib:
	 * Add support for file attachment annotations
	 * Improvements to the demo
	 * Use TextOutputDev to get TextPage when we haven't rendered the page
	 * Remove support for the Splash output device
	
	utils:
	 * pdftoppm can now write to jpeg
	 * pdftoppm embeds the correct resolution in png and jpeg files
	 
	qt4:
	 * Minor improvements to the tests

Release 0.12.3

	core:
	 * Be more lenient with /Decode key on images. Bug #17439
	 * Correctly initialize fileName in LinkGoToR. Bug #25221
	 * Improve the reconstruction of the XRef for broken files
	 * [Cairo backend] Do not crash on malformed files. Bug #24575
	 * Accept Fontname if FontName is not present. KDE bug #217013
	 * Make PSOutputDev code a bit more resilient
	 * Fix writing of null objects. Bug #25465
	 * [Cairo backend] Fix crash in some documents. GNOME bug #603934
	 * Correctly initialize profileCommands in Gfx constructor
	
	build system:
	 * Check for openjpeg in the C++ part as it uses bool in the header. Bug #25103
	
Release 0.12.2

	core:
	 * Fix a memory leak when converting to PostScript
	 * Fix crash when reading a font fails. Bug #24525
	 * Make the ICC cache per page instead of global. Bug #24686
	 * Do not accept negative interval lengths in the page labels tree. Bug #24721
	 * Do not crash on files Aspect of Movie objects are reals instead of integers. Bug #24733
	 * Do not render patterns when using CairoImageOutputDev
	 * Allow Transitions dictionary to be a Ref
	 * Do not crash if jpeg_start_decompress fails. KDE bug #214317
	
	glib:
	 * Fix CVE-2009-3607
	
	qt4:
	 * Use '.' in the annotations XML instead of the decimal separator of the current locale

Release 0.12.1

	core:
	 * Fix compilation on some compilers
	 * Only initialize the font list once in Windows32/MSVC
	 * Do not crash on fonts without CharCodeToUnicode. Bug #24036
	 * Fix regression due to not setting LC_NUMERIC anymore
	 * Improve realibility for Streams with broken Length. Bug #6841
	 * Write the Info into the trailer dict if there is one. Bug #24091
	 * Do not crash when saving files that come from a stream without name. Bug #24090
	 * Improve relability of the save function
	 * Fix the Length value if it was wrong when saving
	 * Fix includes for those using internal headers
	 * Rework how hinting is used in the splash backend. It is disabled by default now
	 * fix constructor of DCTStream when using internal decoder
	 * Security fixes based xpdf 3.02pl4
	
	qt4:
	 * Add the possibility of setting wheter to use or not font hinting
	 * Add a way for converters to return more exact errors they had when converting
	 * Check the document is not locked when converting to PS
	
	build system:
	 * Compile on Cygwin
	 * Use _WIN32 instead of WIN32. Bug #24259
	 * Add the possibility to pass LIB_SUFFIX when using CMake

Release 0.12.0

	core:
	 * Fix printf format security warnings
	 * Improve rendering of radial shadings. Bug #20238
	 * Better fallback when there's a font type mismatch. Bug #17252
	 * Do not crash on attachments without data stream. Bug #10386
	 * Fix infinite loop in JBIG2Decoder. Bug #23025
	
	build system:
	 * Minimizes pkg-config dependencies for Qt frontends
	 * Add automake 1.11 support
	 * Use the newest automake found and not the oldest
	 * Support AM_SILENT_RULES when using automake 1.11
	
	utils:
	 * Add common options to pdftoabw

Release 0.11.3 (0.12 RC 1)

	core:
	 * Optimization in the Cairo renderer for some fonts
	 * Do not apply masks when fill color space mode is csPattern in the Cairo renderer. Bug #22216
	 * Check for overflow when parsing integers. Bug #23078
	 * Do not save the font file twice for FreeType fonts in the Cairo renderer. Bug #20491
	 * Use current fill_opacity when drawing images in the Cairo renderer
	 * Fix alpha rendering in some files in the Splash renderer. Bug #22143, #22152
	 * Implement tiling patterns in the Cairo renderer
	 * When converting a cm matrix to PS write 4 significant digits for numbers < 1 not 4 decimals. Bug #23332
	 * Fix changing of locale, now poppler no longer changes LC_NUMERIC to "C"
	 * Return PDF version as two integers instead of as a double
	
	Qt4:
	 * Addition of the Color Management API
	 * Small fix to documentation
	 * Fix backwards text search
	
	utils:
	 * Add the -png flag to pdftoppm to output to PNG

Release 0.11.2 (0.12 Beta 2)

	core:
	 * Make DecryptStream return sane values for getPos(). Bug #19706
	 * Fix bug when printing pdf with multiple page sizes in duplex mode
	 * Initilize AnnotColot properly when the Array is not correct
	 * Fix crash on some files with forms. Bug #22485
	 * Fix crash in files with invalid embedded files. Bug #22551
	 * Improve FileSpec attribute parsing
	 * Cairo output device improvements. Bugs #10942, #18017, #14160
	 * Implement blend modes in cairo backend
	 * Handle fontType1COT fonts in CairoFontEngine
	 * Fix generation of PS for some files. Bug #18908
	 * Don't use byte_lookup table when color space doesn't support getLine methods. Bug #11027
	 * Fix rendering of PDF files with malformed patterns. Bug #22835
	 * Add the possibility of disabling font substitution in pdftops. Bug #23030
	 * Fix some radio buttons not being detected as such
	
	glib:
	 * Improvements to the demo
	
	Qt4:
	 * Improvements to the demo
	
	build system:
	 * Use gtkbuilder rather than libglade for some tests
	
	utils:
	 * Fix bug with noCrop parameter in pdftops 

Release 0.11.1 (0.12 Beta 1)

	core:
	 * Support colorizing text in pattern colorspace. Bug #19670 and #19994
	 * Add the possibility of forcing no hinting of fonts in the Splash backend
	 * Support multiple page sizes when converting to PS. Bug #19777
	 * Also tokens with leading 00 when parsing the char to unicode map. Bug #22025
	 * Improvements of rendering speed in documents using PS transformations a lot. Bug #21562
	 * More work on Annotations support
	 * Use Interpolate flag to decide whether applying image interpolation during rendering. Bug #9860
	 * Handle Streams in CMap definitions. Bug #22334
	 * Fix some bugs in JBIG2Stream handling
	 * Fix dashed line in page 1 of bug 20011
	 * Fix exit(1) when rendering a file
	 * Fix pdftops crash on file from KDE bug #174899
	 * Fix PS generation in some files. Bug #20420
	 * Do not create the GfxColorTransform if the lcms could not be created. Bug #20108
	 * Check Mask entries are int before using them, if they are real cast to int and try to use them. Bug #21841
	 * Use the correct value when creating the V field for form combo boxes
	 * Give an error when using level1sep in pdftops without having CMYK support. Bug #22026
	 * Don't include lcms.h in GfxState.h
	 * Fix splashColorModeNComps to correctly include all values for each SplashColorMode
	 * Add splashClearColor that assigns white to the given colorptr
	 * Kill support for specifying extension in openTmpFile. Bug #21713
	 * Fix "Conditional jump or move depends on uninitialised value". Bug #20011
	
	glib:
	 * Add poppler_annot_markup_has_popup()
	 * Hyphenate UTF-8 and UTF-16BE. Bug #21953
	 * Use g_strerror instead of strerror. Bug #22095
	 * Fix a crash when a destination points to an invalid page
	 * Improvements to the demo
	
	Qt4:
	 * Add LinkDestination::destinationName()
	 * Do not try to resolve named destinations for GoTo links pointing to external documents
	 * Add Page::thumbnail()
	 * Improvements to the demo
	 * Improvements to the documentation
	
	build system:
	 * Build fix for MSVC
	 * Better lcms cmake check comming from kdelibs
	 * Use pkgconfig for autotools lcms check
	 * Remove unneeded files from repo. Bug #22094

Release 0.11.0 (0.12 Alpha)

	core:
	 * Add initial support for color management
	 * Remove case-insensitive matching of filenames in PDFDoc constructor
	 * Fix extraction of some ActualText content
	 * More work on Annotations support
	 * Improve font rendering in Cairo output device
	 * Fix bug in cairo backend with nested masks
	 * Fix cairo luminosity smask rendering
	 * Add optionally text support to Cairo output device
	 * Add the possibility of setting the datadir on runtime
	 * Return an error code instead of a boolean when saving
	 * Make the font scanner more versatile
	 * Small opimization in documents that use PostScriptFunction transforms
	 * Minor optimization to Stream handling
	 * Fix some compile warnings
	
	glib:
	 * Optional content support
	 * More work on Annotations support
	 * Improvements to the demo
	 * Documentation improvements
	 * Fix build when compiling with GTK_DISABLE_SINGLE_INCLUDES
	
	Qt4:
	 * Support URI actions for Table Of Contents items
	 * Documentation improvements
	 * Improvements to the demo
	 * Add a FontIterator for iterating through the fonts of the document
	
	utils:
	 * Allow the use of cropbox in pdftoppm
	 * Make pdftohtml output png images when the image stream is not a jpeg
	 * Make pdftotext accept cropping options like pdftoppm
	 * Support rendering non-square pixels in pdftoppm
	
	build system:
	 * Require Cairo 1.8.4 for the Cairo output device
	 * Require CMake 2.6 when using the CMake build system
	 * Optionally require libpng for pdftohtml
	 * Optionally require libcms for color management

Release 0.10.6

	core:
	 * Fix problems that happen when parsing broken JBIG2 files.
	   CVE-2009-0799, CVE-2009-0800, CVE-2009-1179, CVE-2009-1180
	   CVE-2009-1181, CVE-2009-1182, CVE-2009-1183, CVE-2009-1187, CVE-2009-1188
	 * Fix parsing of incorrect border arrays. Bug #19761
	 * Fix clip test for fonts. Bug #20950
	 * Fix getGlyphAdvance to behave correctly on font size changes. Bug #20769
	 * Misc build fixes
	 
	build system:
	 * Fix the Qt4 version we need

Release 0.10.5

	core:
	 * Read the UF entry if present and prefer it over F in Filespec dictionary
	 * Fix typo that was making CairoOutputDev crash on some files. Bug #17337
	 * Make JBIG2Stream more robust to corrupt input data
	 * Do not blindly follow loops parsing OutlineItem. Bug #18364
	 * Set up the error manager before calling jpeg_create_decompress. Bug #20484
	 * Check there is an optional content config before using it. Bug #20587
	 * Fix rendering of some PDF with OpenType fonts. Bug #20605

	build system:
	 * Yet more support for build on windows
	 * Use AC_CHECK_HEADER to find headers. Bug #20538
	 * Check for pkgconfig before using it
	 * General autotools improvements

Release 0.10.4

	core:
	 * Fix a memory leak when asking for a document-level JS
	 * Do not crash in some PDF we do not parse correctly. Bug #19702
	 * Fix crash on unexepcted form Opt value. Bug #19790
	
	utils:
	 * Fix pdfimages to extract i color components per pixel jpeg images. Bug #19789

Release 0.10.3

	core:
	 * Fix a crash on documents with malformed outline. Bug #19024
	 * Fix leak on AnnotScreen destructor. Bug #19095
	 * Fix wrong PS generation when a large image is in Patterns. Bug #18908
	 * Remove BaseFile.h it was never used. Bug #19298
	 * Improve document saving
	 * Fix PS generation of PDF with malformed font Length2 definition
	 * Fix a leak while parsing annotations
	 * Fix rendering of some checkboxes
	
	Qt4:
	 * Fix positioning of Form rects on PDF with cropbox
	 * Fix positioning of Annotation rects on PDF with cropbox. Bug #18558.
	 * Small documentation improvements
	 * Make Document::fonts() work when called more than once. Bug #19405
	
	build system:
	 * CMake: look harder for openjpeg
	 * CMake: update the poppler core headers installation
	 * Autotools: do not install Function.cc as it's not a header
	
	Qt:
	 * Fix deserialization of links right coordinate

Release 0.10.2

	core:
	 * Fix a crash when selecting text in word mode
	 * Fix a crash in some malformed documents (second argument of opMarkPoint is not a dictionary)
	 * Ensure cairo font matrix is invertable. Fixes bugs #18254 and #18429
	 * Fix a memory leak (Bug #18924)
	
	Qt4:
	 * Fix deserization of links right coordinate
	
	misc:
	 * Fix build on Solaris 10 + Sun Studio 12
	 * Compile with -pedantic

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 existent 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
