Release 3.0.0-BETA2 - ???

   BREAKING CHANGES

   * Updated PST parser to use standard Message metadata keys and improved
     handling of embedded files (TIKA-4248).

   Other Changes

   * Add optional PST parser based on libpst/readpst (TIKA-4250).

Release 3.0.0-BETA - 12/01/2023

   BREAKING CHANGES

   * Require Java 11 (TIKA-4128).

   * The boilerpipe handler has been moved to the tika-handler-boiler-pipe
     package (TIKA-4138).

   * We've migrated HTML parsing to the JSoup parser instead of TagSoup. If
     you have a custom configuration on the HTMLParser, you'll need to change
     that to o.a.t.p.html.JSoupParser (TIKA-1599).

   * Removed xerces2 as a dependency (TIKA-4135).

   * tika-core now has a scope of "provided" in most non-app modules (TIKA-4191).

   * Tika will look for "custom-mimetypes.xml" directly on the classpath, NOT
     under "/org/apache/tika/mime/". (TIKA-4147).

   * Return media type "text/javascript" instead of "application/javascript"
     to follow RFC-9239. (TIKA-4119).

   Other Changes/Updates

   * Improve detection of sqlite3-based file formats (TIKA-4187).

   * Upgrade PDFBox to 3.0.1 (TIKA-3347)
   
   * Deprecated AbstractParser for removal in 4.x (TIKA-4132).

   * Fix bug in DateUtils that stripped timezone information from
     incoming Calendar objects (TIKA-4126).

   * The InputStreamDigester now calculates stream length (TIKA-4016).

Release 2.9.0 - 8/23/2023

   * With user configuration, the PDFParser can now throw an EncryptedDocumentException
     for Microsoft IRM PDF containers with encrypted payloads. Separately,
     the PDFParser now throws an EncryptedDocumentException instead of an IOException
     if the security handler cannot be found (TIKA-4082).

   * Fix bug that led to duplicate extraction of macros from some OLE2 containers (TIKA-4116).

   * Parse iframe's srcdoc as an embedded file (TIKA-3109).

   * Add detection of warc.gz as a specialization of gz and parse as if a standard WARC (TIKA-4048).

   * Allow users to modify the attachment limit size in the /unpack resource (TIKA-4039)
   
   * Fixed write limit bug in RecursiveParserWrapper (TIKA-4055).

   * Add mime detection for many files with thanks to Gregory Lepore (TIKA-3992).
   
   * Fixed iWork 13 keynote detection on files with wrong extension (TIKA-4111).

Release 2.8.0 - 5/11/2023

   * Enable counting and/or parsing of incremental updates in PDFs.  This
     is an experimental feature and may change in later releases (TIKA-4017).

   * Fixed bug that prevented the the loading of CompositeExternalParser in tika-app and
     tika-server-standard. This parser will call exiftool and ffmpeg if those are installed, as was
     the behavior in Tika 1.x. Exclude org.apache.tika.parser.external.CompositeExternalParser
     if you do not want this behavior (TIKA-4022).

   * Removed the shading of tika-parsers-standard-module (TIKA-4038).

   * Enable optional extraction of file system metadata in FileSystemFetcher (TIKA-4035).

   * Allow pretty printing in FileSystemEmitter (TIKA-4034).

   * Add detection for and a new mime type for older postscript-based
     Adobe Illustrator "application/illustrator+ps" files (TIKA-3971).

   * Add magic detection for canon raw file types: crw, cr2 and cr3 (TIKA-3991).

   * Add detection for ONIX message files (TIKA-4011).

   * Add detection and a parser for ActiveMime files (TIKA-3987).

   * Add extraction of rendition layout value and version from Epub (TIKA-4013).

   * Improve embedded file extraction from PDFs (TIKA-4012).

   * Improve metadata extraction from WARCs (TIKA-4018).

   * Update to PDFBox 2.0.28 (TIKA-4016).

   * Users may now avoid the ZeroByteFileException via a
     setting on the AutoDetectParserConfig (TIKA-3976).

   * Fix bug in closing <a> elements in the presence of <b> elements
     in RTF files (TIKA-3972).

   * Improve extraction of embedded file names in .docx (TIKA-3968).

   * Normalize author, title, subject and description to their Dublin Core
     properties in the HTMLParser (TIKA-3963).


Release 2.7.0 - 1/31/2023

   * Add SVG detection for svg files that lack the xml header (TIKA-3308).

   * Migrate to a live fork of Universal Charset Detector (TIKA-3213).

   * Improve handling of text-based attachments inside .eml files (TIKA-3959).

   * Add tika-parser-nlp-package to release artifacts (TIKA-3958).

   * Remove need for <params/> element in classes that extend ConfigBase (TIKA-3946).

   * Add X-TIKA:embedded_id_path to ensure unique embedded file paths (TIKA-3942).

   * Fix bug that prevented digests when the fallback/EmptyParser
     was called (TIKA-3939).

   * Remove log4j 1.2.x (and slf4j-log4j12 which now redirects to slf4j-reload4j) from
     all modules (TIKA-3935).

   * Upgrade mime4j to 0.8.9 (TIKA-3950).

   * Refactor date parsing for emails (TIKA-3957)

   * Upgrade to Bouncy Castle 1.71 and jdk18on jars (TIKA-3933).

   * Add a JDBCPipesReporter (TIKA-3931).

   * Add multivalued field strategy option in jdbc-emitter (TIKA-3930).
     Default is now 'concatenate' with ', ' as the delimiter.

   * Downgrade logging in PipesClient for each parse from info to debug.

Release 2.6.0 - 11/3/2022

   * Add optional Siegfried detector (TIKA-3901).

   * Move OverrideDetector's functionality to the CompositeDetector (TIKA-3904).

   * The FileCommandDetector has been refactored to have the same
     behavior as the Siegfried detector; see setUseMime in the javadoc (TIKA-3902).

   * Fix bug in OpenSearch emitter that prevented upserts on
     documents with embedded files (TIKA-3882).

   * Extract PDF actions and triggers into the file's metadata (TIKA-3887).

   * Add a tika-async-cli module (TIKA-3885).

   * Fetch keys sent via headers to tika server are now URL decoded (TIKA-3864).


Release 2.5.0 - 09/30/2022

   * Improved extraction of PDF subset info for PDF/UA, PDF/VT, and PDF/X.
     NOTE: we no longer append PDF/A information, e.g. 'version="A-1b"'
     to the 'dc:format'. Users must now get that information from the
     'pdfa:PDFVersion' key or from 'pdfaid:conformance'
     and 'pdfaid:part' (TIKA-3844).

   * Avoid infinite loop in bookmark extraction from PDFs (TIKA-3832).

   * Upgraded to slf4j 2.0.1 (TIKA-3842).

   * Added upsert option for the OpenSearch emitter (TIKA-3855).

   * Extract PDF signature information at the document level
     into the metadata (TIKA-3852).

   * Enable configuration of digests via AutoDetectParserConfig (TIKA-3853).

   * Use commons-io byte array streams via PJ Fanning (TIKA-3843).

   * Upgrade to PDFBox 2.0.27 (TIKA-3866).

   * Upgrade to JempBox 1.8.17 (TIKA-3856).

   * Add extraction of ODF version from ODF files (TIKA-3840).

   * tika-parser-html-commons (BoilerPipeHandler) is no longer a
     a dependency of tika-parser-html-module. tika-app and tika-server-standard
     have added a dependency on tika-parser-html-commons.  However,
     users who are managing custom dependencies and who want the BoilerPipeHandler
     will have to now include the tika-parser-html-commons dependency
     (TIKA-1484).

   * Add unrar as an optional parser (TIKA-3800).

   * Refactor FuzzingCLI to use PipesParser (TIKA-3799).

   * ServiceLoader's loadServiceProviders() now guarantees
     unique classes (TIKA-3797).

   * Fix bug that prevented setting of includeHeadersAndFooters
     for xls, xlsx, doc and docx via tika-config (TIKA-3796).

   * Fix bug that prevented specification of rendered image type
     via http header in the PDFParser (TIKA-3794).

   * Fix bug causing some Exif dates to be decoded wrongly on
     timezones different than UTC (TIKA-3815).

   * Numerous dependency upgrades (TIKA-3795).

   * Add ALPHA-level initial releases of JDBCEmitter,
     FileSystemStatusReporter and OpenSearchPipesReporter.
     These may have breaking changes in subsequent releases.

Release 2.4.1 - 06/14/2022

   * Implement bulk upload in the OpenSearch emitter (TIKA-3791).

   * Implement tika-server client via pipes mode (TIKA-3790).

   * Custom embedded parsers and EmbeddedDocumentHandlers
     can now add metadata to the container file's
     metadata (TIKA-3789).

   * Record embedded file exceptions in the container
     file's metadata (TIKA-3788).

   * Allow continuation of parsing after write limit has
     been reached (TIKA-3787).

   * Allow pass-through of 'Content-Length' header to metadata
     in TikaResource (TIKA-3786).

   * Add embedded depth to profiles tables in tika-eval (TIKA-3775).

   * Add stop() method to TikaServerCli so that it can be run
     with Apache Commons Daemon (TIKA-1570).

   * Fixed bug in ordering of Parsers during service loading (TIKA-3750).

   * Users can expand system properties from the forking
     process into forked tika-server processes (TIKA-3748).

   * Fix a few files being wrongly detected as EML (TIKA-3771).

   * Fix ignoreCharsets param of Icu4jEncodingDetector (TIKA-3774).

Release 2.4.0 - 04/23/2022

   * NOTE: To save on resources, we no longer include the
     deeplearning4j dependencies in the tika-dl jar. The dependencies for the
     tika-dl package must be provided by users.  See:
     https://github.com/apache/tika/blob/main/tika-parsers/tika-parsers-ml/tika-dl/pom.xml
     for the dependencies that must be provided at run-time (TIKA-3676).

   * NOTE: Added prefix "dwg-custom:" to DWG custom metadata properties (TIKA-3731).

   * Add initial, BETA-grade TLS encryption option for tika-server;
     configuration may change in future releases (TIKA-3719).

   * Allow specification of fetcherName and fetchKey via query parameters
     in request URI in tika-server (TIKA-3714).

   * Add basic parsers for WARC and WACZ in tika-parsers-standard (TIKA-3697).

   * Add MetadataWriteFilter capability to improve memory profile in
     Metadata objects (TIKA-3695).

   * Allow configurability of the ContentHandlerDecorator used
     by the AutoDetectParser (TIKA-3723).

   * Allow configurability of the EmbeddedDocumentExtractor used
     by the AutoDetectParser (TIKA-3711).

   * Add detection for Frictionless Data packages and WACZ (TIKA-3696).

   * Add detection for DGN files with gratitude and credit
     to Steven Frew's tika-dgn-detector (TIKA-3721).

   * Add parser for metadata from DGN 8 files via Dan Coldrick (TIKA-3721).

   * Add a fetcher and emitter for Azure blob storage (TIKA-3707).

   * Add detection for files encrypted by Microsoft's Rights Management Service
     (TIKA-3666).

   * Fixed regression in 2.3.0 that led to more embedded filenames
     than appropriate being written to the content (TIKA-3711).

   * tika-server now clones forking process' environment variables
     into forked process (TIKA-3715).

   * Add an optional /eval endpoint for tika-eval profile or compare
     capabilities in tika-server (TIKA-3689).

   * Add a Parsed-By-Full-Set metadata item to record all parsers that processed
     a file (TIKA-3716).

   * Add metadata filters for Optimaize and OpenNLP language detectors (TIKA-3717).

   * Upgrade to PDFBox 2.0.26 (TIKA-3726).

   * Upgrade deeplearning4j to 1.0.0-M2 (TIKA-3458 and PR#527).

   * Various dependency upgrades, including POI, dl4j, gson, jackson,
     twelvemonkeys, log4j2 and others (TIKA-3675 and many PRs from dependabot).

   * Switch cipher from ECB to GCM in HttpClientFactory (TIKA-3724).

Release 2.3.0 - 02/02/2022

   * Upgrade to Apache POI 5.2.0. This is the first upgrade to POI
     5.x and represents a major refactoring. Users may experience
     significantly more logging (TIKA-3164).

   * Upgrade to log4j2 2.17.1 (TIKA-3638).

   * Improve consistency in reporting package-entry divs across
     all parsers for embedded files (TIKA-3644). This leads
     to some more text (embedded file names) in files with
     many embedded attachments.

   * Improve configuration of maps as params for parsers in
     TikaConfig (TIKA-3645).

   * Improve identification of iWorks 13 files and add parsing
     for thumbnails, some metadata and attachments (TIKA-3634).
     Skip handling of .iwa files, which are not yet supported.

   * Limit the default in-memory processing (maxMainMemoryBytes) in
     the PDFParser to 512MB as in the 1.x branch (TIKA-3642).

   * Added IDML Parser from 1.x series to 2.x series (TIKA-3188).

   * Extract annotation types and subtypes for PDFs into metadata (TIKA-3653).

   * Add metadata value for PDFs that contain 3D annotations (TIKA-3653).

   * Add parser for Translation Memory eXchange (TMX) files (TIKA-3660).

   * Add Bill of Materials (Maven BOM) for centralized module version management (TIKA-3367).


Release 2.2.1 - 12/19/2021

   * Fix multithreading bug for ooxml files (TIKA-3627).

   * Upgrade log4j to 2.17.0 (TIKA-3625).

   * Upgrade to PDFBox 2.0.25 (TIKA-3622)

   * Fix bug that prevented metadata keys in the UnpackerResource
     in tika-server (TIKA-3624).

   * Upgrade log4j to 2.16.0 (TIKA-3623)

Release 2.2.0 - 12/13/2021

   * Add support for OneNote files downloaded from O365 (TIKA-3446).

   * Fix logic bug in PipesServer that prevented concatenation of
     content from attachments (TIKA-3609).

   * Improve extraction of embedded files from MSOffice files created
     by non-Microsoft tools (TIKA-3526).

   * Added back ability to ignore load errors in TikaConfig (TIKA-3575).

   * Make SecureContentHandler and other parameters configurable in
     AutoDetectParser programmatically and via tika-config.xml (TIKA-3594).

   * Fix default logging in tika-app in batch mode (TIKA-3589).

   * Fix bug that prevented specifying a config with the long
     --config= option in tika-app in batch mode (TIKA-3589).

   * Fix thread starvation after numerous restarts in
     PipesClient (TIKA-3588).

   * Fix race condition when starting multiple forked
     servers on multiple ports (TIKA-3586).

   * Add timeout per task to be configured via headers
     for tika-server's legacy endpoints /tika and /rmeta.
     Note that this timeout greater than taskTimeoutMillis (TIKA-3582).

   * Add metadata item for whether or not a PDF has a collection/
     is a Portfolio PDF (TIKA-3579).

   * Add detection of ESRI Layer files (TIKA-3570).

   * Add detection of JPEG XL, MARC, ICC profiles, NES-ROM file types
     (TIKA-3562 and TIKA-3563)

   * Remove duplicate "subject" metadata keys that were intended
     for backwards compatibility within 1.x only (TIKA-3564).

   * Fix Open Office mime types to be subclasses of application/zip
     and no longer require OPCPackageDetector-last ordering of zip
     detectors (TIKA-3556).

   * Improve robustness and features of the httpfetcher (TIKA-3543)
   
   * Add optional fetch ranges to FetchEmitTuple to allow range fetching from,
        e.g. http or s3 (TIKA-3542).

   * Exclude dependencies on jsoup and ehcache in ucar grib/cdm (TIKA-3003).


Release 2.1.0 - 08/18/2021

   MAJOR CHANGES in 2.1.0:

   * Improved packaging for tika-parsers-extended. Use the tika-parser-scientific-package and
     tika-parser-sqlite3-package artifacts if you want fat jars with dependencies. (TIKA-3510)

   * Tika app writes UTF-8 when an encoding is not specified; the legacy behavior
     was UTF-8 on Mac OS, but System default on other OSs (TIKA-3515).

   * Change the default rendering strategy for PDFs from NO_TEXT to ALL (TIKA-3520).

   Other changes:

   * Fixed bug that pointed to the wrong tessdata directory if the user specified
     a tesseract path but not also a tessdata path (TIKA-3518).

   * Fixed bug in Icu4j's encoding detector where it would return non-standard
     names for charsets, e.g. IBM424_rtl is now returned as IBM424 (TIKA-3516).

   * Add a simple UrlFetcher in tika-core as a basic alternative
     to tika-fetcher-http (TIKA-3527).

   * Add tika-pipes support for Google Cloud Storage (TIKA-3524).

   * Fix markup ordering errors in xhtml output for ODT files (TIKA-2242).

   * Fix serialization of embedded docs in OpenSearch emitter
     and fix embedded documents not being indexed in some use
     cases in the Solr emitter (TIKA-3490).

   * Add pipesClientId system property to PipesServer so that each
     forked process can log to its own logger (TIKA-3480).

   * Add DateNormalizingMetadataFilter let users ensure that all dates
     emitted to Solr/OpenSearch are in UTC. Users can configure which
     timezone they'd like to use in cases where the file format does
     not store a timezone (TIKA-3496).

   * Breaking change in the Solr and OpenSearch emitters. To achieve
     the SKIP or CONCATENATE attachment strategy, modify the
     parseMode in the pipesiterators or in the FetchEmitTuple (TIKA-3494).

Release 2.0.0 - 07/07/2021

   * Cleanup of fetcher integration with tika-server.

   * Update dependencies.

Release 2.0.0-BETA - 05/19/2021
   
   * Refactor pipes module for resilience

   * Add transcribe capability (TIKA-94).

Release 2.0.0-ALPHA - 01/13/2021

   BREAKING CHANGES in 2.0.0
   * General
     * OCR is now triggered automatically for PDFs if tesseract
       is on the user's path see (https://cwiki.apache.org/confluence/display/TIKA/TikaOCR#TikaOCR-disable-ocr)
       for how to disable OCR.
     * We upgraded from log4j to log4j2 in tika-app, tika-server and anywhere else
       we used to use log4j.
     * By default, when rendering a page for OCR, the PDFParser does not render glyphs/text.
     * Removed deprecated Metadata keys/properties (TIKA-1974).
     * Removed deprecated PDFPreflightParser (TIKA-3437).
     * Removed dangerous calls to read an inputstream or convert to bytes
       without specifying a charset
     * Parsers can be configured via tika-config.xml on instantiation.
       We have moved away from configuration via .properties files because
       of confusion among users.  This affects the PDFParser, TesseractOCRParser
       and the StringsParser.
     * Changed namespaces of translator implementations (o.a.t.language.translate.impl) to avoid
       split-package with tika-core

   * tika-parsers
     * The parser modules have been broken into three main modules:
        tika-parsers-standard, tika-parsers-extended and tika-parsers-ml.
        Users may now need to add tika-parsers-extended's
        tika-parser-scientific-module or tika-parser-sqlite3-module to tika-app and
        tika-server to include parsers that used to be included by default
        (for example: envi, gdal, grib, isatab, netcdf, sqlite3).
     * PDFParser -- a) see above on OCR. b) This parser no longer warns if the jpeg2000
       dependency is not included. Tika now relies on PDFBox to log an error if a jpeg2000
       image should be processed but can't because the required external dependency is
       not available.  See https://pdfbox.apache.org/2.0/dependencies.html#jai-image-io
       for the non-ASF-2.0-compatible jpeg2000 library.
     * CompressorParser -- users must add the com.github.luben:zstd-jni dependency to
       the classpath to process zstd files.  This is an optional library that is no longer bundled
       in tika-parsers-standard-package because it contains native libs.
     * ChmParser was moved to org.apache.tika.parser.microsoft.chm
     * RTFParser was moved to org.apache.tika.parser.microsoft.rtf
     * We are now using non-shaded versions of xmpcore with namespaces com.adobe.internal.*
       vs com.adobe.*.

   * tika-app
     * See above on default inclusion of only tika-parsers-standard.

   * tika-server
     * tika-server now by default forks a process to isolate the parsing
       in the forked process (this was called the -spawnChild option
       in tika-1.x).  Clients must now expect that tika-server
       will restart on OOM, timeouts, crashes or after parsing a
       large number of files.  When this happens tika-server will restand and not
       receive connections for brief periods.  The less robust, legacy behavior
       of not forking a process is available with "-noFork"=
     * Most of tika-server's legacy configuration via the commandline has been moved
       into configuration via a tika-config.xml file.
     * tika-server's "enableFileUrl" has been removed in favor of a FileSystemFetcher.
     * tika-server's /metadata endpoint requires tika-server-standard to write XMP/rdf output.
       This output is not available in tika-server-core.
     * In tika-server, for those parsers that can be configured per parse via a config object
       passed in through the ParseContext, the config object will only update those fields
       that the user has modified.  The config object will no longer
       fully reset all settings to the default settings per parse.
       This has a more intuitive "update the base/configured settings" with
       what has been changed in the config object.

  * tika-eval
    * tika-eval's default profile and comparison reports no longer include tag reports.
      Users can get the report configs that include tags (*-tags.xml):
      https://github.com/apache/tika/tree/main/tika-eval/tika-eval-app/src/main/resources

Release 1.27 - 06/30/2021

   * Migrate MP4 parsing to Drew Noakes' metadata-extractor (TIKA-3459).
     To revert to legacy parser turn off NoakesMP4Parser and turn on MP4Parser
     via tika-config.xml.

   * Prevent rare infinite loop in tika-server's -spawnChild mode
     when restart fails because of failure to bind to the port (TIKA-3441).

   * Improve likelihood that tesseract will not be orphaned on
     jvm restart in tika-server (TIKA-3441).

   * Deprecate experimental PDFPreflightParser (TIKA-3437).

   * Apply encoding detection to zip entry names via Ryan421 (TIKA-3374).

   * Add json output for /tika endpoint in tika-server (TIKA-3352).

   * Tika's PDFParser should use the underlying file if one is passed in
     via a TikaInputStream (TIKA-3350)

Release 1.26 - 03/24/2021

   * Fix thread safety bug in OpenOffice parser (TIKA-3334).

   * The "writeLimit" header now pertains to the combined characters
     written per container document (and embedded documents) in the /rmeta
     endpoint in tika-server (TIKA-3325); it no longer functions only
     per container or embedded document.

   * Extract more embedded files in PDFs by recursively processing the
     embedded file tree (TIKA-3332).

   * Allow for case insensitive headers for configuration of the PDFParser
     and the TesseractOCRParser in tika-server via Subhajit Das (TIKA-3320).

   * Improve detection and parsing of XPS files (TIKA-3316).

   * General dependency upgrades (TIKA-3244).

   * Great optimization in ForkParser (TIKA-3237).

   * Fix parsing of emails attached to other emails in PST files (TIKA-3004).

   * MP3 parser should output the xmpDM:duration metadata as seconds not
     milliseconds, consistent with the other Audio and Video parsers (TIKA-3318).

   * MP4 parser check if any of the Compatible Brands match when identifying
     the subtype (TIKA-3310).

Release 1.25 - 11/25/2020

   * Fix inconsistent license in xmpcore (TIKA-3204).

   * General upgrades including some dependencies with
     recently found security vulnerabilities (TIKA-3119).

   * Add detection and a parser for flat ODF files (TIKA-3159).

   * Add extraction of macros from ODF files  (TIKA-3161).

   * Add mime detection for hprof and hprof text files (TIKA-3144).

   * Add TextSignature and TextProfileSignature to tika-eval (TIKA-3145 and TIKA-3146)

   * Create a metadata filter to trigger tika-eval stats post parsing (TIKA-3140)

   * Add a configurable metadata-filter for the RecursiveParserWrapper (TIKA-3137)

   * Parameterize writeLimit and maxEmbeddedResources for RecursiveParserWrapper
     in tika-server (TIKA-3133)

   * Add status endpoint to tika-server (TIKA-3129).

   * Remove whitelist/blacklist terminology (TIKA-3120)

   * Add detection for parquet files (TIKA-3115).

   * Add detection and parsing for bplist (TIKA-3104).

   * Enable metadata value filtering for RecursiveParserWrapper (TIKA-3137)

   * Add a basic parser for plist files based on com.googlecode.plist:dd-plist (TIKA-3104).

   * Read hyperlinked images from ODT files (TIKA-3156).

   * Updated GrobidRESTParser to use new API location (TIKA-3191).

   * Add FileProfiler to tika-eval (TIKA-3216).

   * Add status endpoint to tika-server (TIKA-3129).

   * Improved handling of zip files with STORED entries with
     data descriptor (TIKA-3196).

   * Add parsers for XLZ, IDML and MIF (TIKA-2976, TIKA-3188 and TIKA-3189).

   * Add the beginnings of a format-aware fuzzing module (TIKA-3083).

   * Add wrapper for Linux 'file' command for mime detection (TIKA-3215).

   * Added ability to skip parsing of embedded files in Tika Server (TIKA-3227).

Release 1.24.1 - 4/17/2020

   * Allow gzip compression of input and output streams for tika-server (TIKA-3073).

Release 1.24 - 3/11/2019

   * Add scripts to run tika-server as a service via Eric Pugh,
    and add these scripts and jar as a new artifact in the release (TIKA-3010).

   * Upgrade Drew Noakes' metadata-extractor (TIKA-2952).

   * Enable optional extraction of structural tags in PDFs (alpha-grade) (TIKA-3026).

   * Tika app's --extract mode now outputs to STDOUT (TIKA-3035).

   * Add an optional Preflight parser for PDFs (TIKA-3055).

   * Improve detection of some zip-based formats (TIKA-3057).

   * Upgrade metadata-extractor to 2.13.0 (TIKA-2952).

   * Upgrade to POI 4.1.2 (TIKA-3047).

   * Extract XMP from PSD files (TIKA-3050).

   * Added XMLProfiler as an optional parser to profile XFA and XMP
     in PDFs (TIKA-3045).

   * Extract inline images that rely on the DCT filter from PDFs (TIKA-3041).

   * Upgrade to PDFBox 2.0.19 (TIKA-3033).

   * Fix bug in ASM parser configuration (TIKA-2992).
   
   * Upgrade to java-libpst 0.9.3 (TIKA-2546).

   * Fixed XLIFF12Parser failures with ToXMLHandler (TIKA-3014).

Release 1.23 - 12/02/2019

   * NOTE: The PDFParser now relies on OCRDPI to render page images when
     users configure OCR on rendered page images. This will have the effect
     of increasing rendered image size (TIKA-2624).

   * NOTE: tika-server no longer returns 415 for file types for which there
     is no parser.

   * Fix bug in AUTO OCR strategy in the PDFParser (TIKA-3002).

   * Fix incorrect height and width metadata extraction from JPEG images (TIKA-2630).

   * Upgrade to POI 4.1.1 (TIKA-2851).

   * Upgrade to PDFBox 2.0.17 (TIKA-2951).

   * Ensure that the PDFParser respects custom configuration of Tesseract
     from tika-config.xml via Eric Pugh (TIKA-2970).

   * Add parser for XLIFF v1.2 files (TIKA-2975).

   * Add mime type detection support for WebAssembly (TIKA-2894),
     HEIF / HEIC images (TIKA-2942), Digilite FDF (TIKA-2988);
     and xml-root detection for XFDF (TIKA-2990) and XDP (TIKA-2989).

   * Add an XLZ Parser (TIKA-2976).
   
   * Fix deadlock with ForkParser when InputStream throws IOException (TIKA-2892).

Release 1.22 - 07/29/2019

   * NOTE: tika-server no longer hard-codes the HtmlParser to handle
     XML files (TIKA-2910).  Users must now configure that behavior
     via a tika-config.xml file.

   * NOTE: Known regression: PDFBOX-4587 -- PDF passwords with codepoints
     between 0xF000 and 0XF0000 will cause an exception.

   * Add parser for HWP v5 files via SooMyung Lee (soomyung) and
     JinSup Kim (ddoleye) (TIKA-2909).

   * Fix order of closing streams to avoid "Failed to close temporary resource"
     exception in TesseractOCRParser (TIKA-2908).

   * Improve AutoDetectReader performance by caching encoding
     detector (TIKA-1568).

   * Prevent RTFParser from outputting illegal tag combinations (TIKA-2889).

   * Fix RereadableInputStream to release all resources (TIKA-2903).

   * Implement custom language identifier in the tika-eval module based on
     OpenNLP's language detector; add 18 languages and add common words
     lists for all 121 languages (TIKA-2790).

   * Fix NPE in MimeTypesReader.releaseParser() via Eamonn Saunders (TIKA-2896).

   * Fix RTFParser to extract more content (TIKA-2883).

   * Add clientSubmitTime to the metadata extracted from PST files (TIKA-2898).

   * Improve StreamingZipContainerDetector for xltx, xltm and
     several other file formats (TIKA-2886).

Release 1.21 - 05/14/2019

   * Add optional AUTO mode to OCR'ing of PDFs.  If tesseract is installed
     and on the path, and this option is selected programmatically
     or via TikaConfig(), the PDFParser will use heuristics to decide
     whether or not to run OCR per page on PDFs. (TIKA-2749)

   * The ZipContainerDetector's default behavior was changed to run
     streaming detection up to its markLimit.  Users can get the
     legacy behavior (spool-to-file/rely-on-underlying-file-in-TikaInputStream)
     by setting markLimit=-1. The POIFSContainerDetector requires an underlying file;
     it will try to spool the file to disk; if the file's length is > markLimit,
     it will not attempt detection; set markLimit to -1 for legacy behavior (TIKA-2849).

   * Upgrade PDFBox to 2.0.14 (TIKA-2834).

   * Add CSV detection and replace TXTParser with TextAndCSVParser;
     users can turn off CSV detection by excluding the TextAndCSVParser
     and adding back the TXTParser via tika-config (TIKA-2833).

   * Add a CSVParser.  CSV detection is currently based solely on filename
     and/or information conveyed via Metadata (TIKA-2826).

   * General upgrades: asm, bouncycastle, commons-codec, commons-lang3, cxf,
     guava, h2, httpcomponents, jackcess, junrar, Lucene, mime4j, opennlp, parso,
     sqlite-jdbc (provided), zstd-jni (provided) (TIKA-2824)

   * Bundle xerces2 with tika-parsers (TIKA-2802).

   * Upgrade jaxb to 2.3.2 (TIKA-2819).

   * Upgrade jackson to 2.9.8 (TIKA-2717).

   * Update tika-eval's common tokens lists (TIKA-2822).

   * Handle bad tags in tika-eval more robustly (TIKA-2810).

   * Add reports for tags in tika-eval (TIKA-2809).

   * Extract text from SDT element within textboxes in .docx files (TIKA-2807).

   * Try to handle truncated OOXML files more robustly (TIKA-2765).

Release 1.20 - 12/17/2018

   * Upgrade to POI 4.0.1 (TIKA-2751).

   * Integrate/parameterize new angles handling in
     PDFBox (TIKA-2779).

   * Upgrade to PDFBox 2.0.13 (TIKA-2788).

   * Prevent content within <style/> and <script/> elements
     to be written in the ToTextContentHandler (TIKA-2550).

   * Switch child to parent communication to a shared memory-mapped
     file in tika-server's -spawnChild mode.

   * Fix bug in tika-server when run in legacy mode (not -spawnChild)
     that caused it to return 503 on documents submitted after
     it hit an OutOfMemoryError (TIKA-2776).

   * Upgrade jaxb-runtime and javax.activation (TIKA-2778).

   * tika-app in batch mode now requires an interrupt or
     kill signal to the parent process to stop the parent
     and the child processes (TIKA-2780).

   * Bulk upgrade of dependencies (TIKA-2775).

   * Improve language id efficiency in tika-eval (TIKA-2777).

   * Upgrade sqlite "provided" dependency to 3.25.2 (TIKA-2773).

   * Remove duplication of notes in PPT slides (TIKA-2735)

   * Use -javaHome or $JAVA_HOME (if they exist) when
     spawning child in tika-server's -spawnChild mode.

   * Fixed closing of styles around Hyperlinks in Word Parser
     Contributed by Ronan O'Sullivan (TIKA-2599).

Release 1.19.1 - 10/4/2018

   * Update PDFBox to 2.0.12, jempbox to 1.8.16
     and jbig2 to 3.0.2 (TIKA-2745).

   * Fix regression in parser for MP3 files (TIKA-2730).

   * Updated Python Dependency Check for TesseractOCR (TIKA-2740).

   * Improve SAXParser robustness (TIKA-2727).

   * Remove dependency on slf4j-log4j12 by upgrading jmatio (TIKA-2742).

   * Replace com.sun.xml.bind:jaxb-impl and jaxb-core with
     org.glassfish.jaxb:jaxb-runtime and jaxb-core (TIKA-2743)

Release 1.19 - 9/14/2018

   * Require Java 8 (TIKA-2679).

   * Enable building with Java 11 (TIKA-2668)

   * Add an option to make tika-server robust against infinite loops,
     OOMs, and memory leaks (TIKA-2725).

   * Allow configuration of the Tesseract parser via the standard
     tika-config.xml options (TIKA-2705).

   * Improve handling of empty cells across table-based
     formats (TIKA-2479).

   * Add a Standards compliant HTML encoding detector
     via Gerard Bouchar (TIKA-2673).

   * Improved XML parsing -- limited default entity expansions to 20.
     To raise this limit, add -Djdk.xml.entityExpansionLimit=XXX to
     your commandline.

   * Mime magic improvements for Olympus RAW (TIKA-2658), interpreted
     server-side languages via HTTP (TIKA-2648), MHTML (TIKA-2723)

   * Add absolute timeout to ForkParser rather than testing
     for active (TIKA-2656).

   * Make the RecursiveParserWrapper work with the ForkParser (TIKA-2655).

   * Allow the ForkParser to specify a directory containing tika-app.jar
     for use by the ForkServer.  This allows users to keep most of the
     parser dependencies out of their code; and it allows for an easy
     addition of optional jars for Parser dependencies,
     such as the xerial sqlite jar (TIKA-2653).

   * Use a pool for SAXParsers and DOMBuilders rather than creating
     a new parser/builder for every parse.
     For better performance, set XMLReaderUtils.setPoolSize() to the
     number of threads you're using with Tika (TIKA-2645).

   * Add the RecursiveParserWrapperHandler to improve the RecursiveParserWrapper
     API slightly (TIKA-2644).

   * Upgraded to Commons-Compress 1.18 (TIKA-2707).

   * Upgraded to Apache POI 4.0.0 (TIKA-2552).

   * Upgraded to Apache PDFBox 2.0.11 (TIKA-2681).

   * Upgraded to deeplearning4j 1.0.0-beta2 (TIKA-2672).

   * Upgraded jmatio to 1.4 (TIKA-2667)

   * Upgraded Apache Lucene to 7.4.0 in tika-eval and tika-examples (TIKA-2695).

   * Upgraded junrar to 1.0.1 (TIKA-2664).

   * Numerous other upgrades (TIKA-2692).

   * Excluded Spring as a transitive dependency (TIKA-2721).

Release 1.18 - 4/20/2018

   * Upgrade jackson to 2.9.5 (TIKA-2634).

   * Add support for brotli (TIKA-2621).

   * Upgrade PDFBox to 2.0.9 and include new jbig2-imageio
     from org.apache.pdfbox (TIKA-2579 and TIKA-2607).

   * Support for TIFF images in PDF files (TIKA-2338)
   
   * Detection of full encrypted 7z files (TIKA-2568)

   * Various new mimes and typo fixes in tika-mimetypes.xml
     via Andreas Meier (TIKA-2527).

   * Revert to listenForAllRecords=false in ExcelExtractor
     via Grigoriy Alekseev (TIKA-2590)

   * Add workaround to identify TIFFs that might confuse
     commons-compress's tar detection via Daniel Schmidt
     (TIKA-2591)

   * Ignore non-IANA supported charsets in HTML meta-headers
     during charset detection in HTMLEncodingDetector
     via Andreas Meier (TIKA-2592)

   * Add detection and parsing of zstd (if user provides
     com.github.luben:zstd-jni) via Andreas Meier (TIKA-2576)

   * Allow for RFC822 detection for files starting with "dkim-"
     and/or "x-" via Andreas Meier (TIKA-2578 and TIKA-2587)

   * Extract xlsx files embedded in OLE objects within PPT and PPTX
     via Brian McColgan (TIKA-2588).

   * Extract files embedded in HTML and javascript inside HTML
     that are stored in the Data URI scheme (TIKA-2563).

   * Extract text from grouped text boxes in PPT (TIKA-2569).

   * Extract language metadata item from PDF files via Matt Sheppard (TIKA-2559)

   * RFC822 with multipart/mixed, first text element should be treated
     as the main body of the email, not an attachment (TIKA-2547).

   * Swap out com.tdunning:json for com.github.openjson:openjson to avoid
     jar conflicts (TIKA-2556).

   * No longer hardcode HtmlParser for XML files in tika-server (TIKA-2551).

   * Require Java 8 (TIKA-2553).

   * Add a parser for XPS (TIKA-2524).

   * Mime magic for Dolby Digital AC3 and EAC3 files

   * Fixed bug where TesseractOCRParser ignores configured ImageMagickPath,
     and set rotation script to ignore Python warnings (TIKA-2509)

   * Upgrade geo-apis to 3.0.1 (TIKA-2535)

   * Mime definition and magic improvements for text-based programming
     and config formats (TIKA-2554, TIKA-2567, TIKA-1141)

   * Added local Docker image build using dockerfile-maven-plugin to allow
     images to be built from source (TIKA-1518).

   * Support for SAS7BDAT data files (TIKA-2462)

   * Handle .epub files using .htm rather than .html extensions for the
     embedded contents (TIKA-1288)

   * Mime magic for ACES Images (TIKA-2628) and DPX Images (TIKA-2629)

   * For sparse XLSX and XLSB files, always output missing cells to
     the left of filled ones (matching XLS), and optionally output
     missing rows on all 3 formats if requested via the
     OfficeParserContext (TIKA-2479)

Release 1.17 - 12/8/2017

  ***NOTE: THIS IS THE LAST VERSION OF TIKA THAT WILL RUN
     ON Java 7.  The next versions will require Java 8***

  * Fix thread-safety in ChmExtractor (TIKA-2519).

  * Upgrade cxf to 3.0.16 (TIKA-2516).

  * Allow users to configure maxMainMemoryBytes for PDFs via shrike (PR-213).

  * Extract underline and strikethrough in docx (TIKA-2347 and TIKA-2512).

  * Cache TikaConfig in EmbeddedDocumentUtil for better performance
    in documents with large number of attachments (TIKA-2511).

  * Extract media files from ooxml (TIKA-2510).

  * Standardize the way the Image and Video captioning 
    dockers and extraction work (TIKA-2400, GitHub-208)

  * Upgrade to xmpcore 5.1.3 (TIKA-2034).

  * Upgrade to metadata-extractor 2.10.1 (TIKA-2486).

  * Upgrade to OpenNLP 1.8.3 (TIKA-2502).

  * Upgrade to Jackson 2.9.2 (TIKA-2501).

  * Catch potential NPE in getting InputStream for attachments
    in PST file (TIKA-2488).

  * Upgrade to PDFBox 2.0.8 (TIKA-2489).

  * Allow configuration of markLimit in EncodingDetectors
    via tika-config.xml (TIKA-2485).

  * RFC822Parser now selects the best alternative for
    multipart/alternative body components.  This aligns with the
    behavior of the OutlookParser (TIKA-2478).  Users can select
    legacy behavior via the "extractAllAlternatives" parameter
    in the RFC822 parser definition in tika-config.xml.

  * Narrow mime detection for ms-owner files and add detection
    for .nls files (TIKA-2469).

  * Fix bug in CharsetDetector that led to different detected charsets
    depending on whether user setText with a byte[] or an InputStream
    via Sean Story (TIKA-2475).

  * Remove JAXB for easier use with Java 9 via Robert Munteanu (TIKA-2466).

  * Upgrade to POI 3.17 (TIKA-2429).

  * Enabling extraction of standard references from text (TIKA-2449).

  * Load external custom mimetypes XML from system property 
    tika.custom-mimetypes (TIKA-2460). 

  * Extract number of tiffs in a multi-page tiff (TIKA-2451).

  * Fix detection of emails extracted from mbox (TIKA-2456).
  
  * Add OverrideDetector and allow PSTParser to specify body content type
    as text or html -- to avoid incorrect auto-detection of
    rfc/mbox, etc. (TIKA-2454)

  * AutoDetectParser throws ZeroByteFileException for zero-byte files after
    detection on the file extension (TIKA-2450).

  * Extract phonetic runs in docx with experimental SAX parser (TIKA-2448).

  * Extract phonetic runs from xls and allow users to turn off extraction
    of phonetic runs in both xls and xlsx (TIKA-2440).

  * OOXML locale should be set by POI's LocaleUtil not Locale.getDefault().
    Fix unit tests to be robust against different locales in OOXML
    and ExcelParser (TIKA-2438).

  * Upgrade to PDFBox 2.0.7 (TIKA-2431).

  * Tika now has support for automatic image captioning, that
    combines Computer Vision and Natural Language Processing to
    automatically generate a readable caption for an image 
    (TIKA-2262, TIKA-2355, TIKA-2402, Gh-198, Gh-196, Gh-189).

  * Add TestCorruptedFiles to allow devs to test parsers against
    corrupted input files (TIKA-2430).

  * Correct Mimetype definition for Windows batch files (CMD and BAT)
    which are the same (TIKA-2445)

  * PSDParser memory use improvements (TIKA-2447)

  * Add underline extraction from Word documents (doc/docx) via Stuart Hendren
    as well as strikethrough extraction in docx (TIKA-2347, GitHub-173)

  * Corrected Tesseract OCR rotation.py script and made it a configurable
    option via Peter Weiss (TIKA-2385) 
 
Release 1.16 - 7/7/2017

  * Exclude jj2000 from edu.ucar grip to avoid potential
    license conflicts with ASL 2.0

  * Add Age recognition using Ensemble model for Linear regression
    and Apache OpenNLP Maximum Entropy. Tika can now detect age from
    text (TIKA-1988).

  * Add Tika Deep Learning support for the VGG16 model for
    Very Deep Convolutional Networks for Large-Scale Image Recognition.
    Now Tika supports both Inception v3/v4 and VGG16 based image 
    recognition (TIKA-2298).

  * Extract macros from PPT (TIKA-2089).

  * Extract absolute path for last saved location when available
    in .xlsx and .xlsb (TIKA-2335).

  * Rename SentimentParser to SentimentAnalysisParser to
    prevent conflict with dependency (TIKA-2368).

  * tika-app now extracts inline images in PDFs by
    default, and it includes a warning to users that this is not the
    default behavior elsewhere in Tika (TIKA-2374).

  * Allow configurability of warnings for problems during
    parser initialization (TIKA-2389).

  * Upgrade to Jackcess 2.1.8 (TIKA-2380).

  * Upgrade to POI 3.17-beta1 (TIKA-2336).

  * Remove non-ASL-2.0-compatible org.json (TIKA-1804).

  * Allow extraction of <script> elements in HTML as embedded "MACRO".
    Users must turn this on via TikaConfig (TIKA-2391).

  * Allow users to turn off extraction of headers and footers
    from .doc, .docx, .xls, .xlsx, .xlsb (TIKA-2362)

  * Extract text from charts in .docx, .pptx, .xlsx and .xlsb
    (TIKA-2254).

  * Extract text from diagrams in .docx, .pptx, .xlsx and .xlsb
    (TIKA-1945).

  * Fix bug in tika-server that led to an attempt to close the
    input stream twice (TIKA-2384).

  * Enable base32 encoding of digests and enable BouncyCastle implementations
    of digest algorithms (TIKA-2386).

  * Add snap builds to codebase (TIKA-2401)

  * Canonical Mimetype of WAVE audio changed to match RFC 2361 defined
    version, audio/vnd.wave, older audio/x-wav remains as an alias

  * Upgrade "provided" xerial to 3.19.3 (TIKA-2412).

  * Upgrade Gson to 2.8.1 (TIKA-2414).

  * Upgrade mime4j to 0.8.1 (TIKA-2413).

  * Mime magic improvements for GraphViz (TIKA-2422), HTML files which
    claim to be XML but aren't quite valid XML (TIKA-2419) and QuickTime
    / MP4 (TIKA-2418)

Release 1.15 - 05/23/2017

  * Tika now has a module for Deep Learning powered by the 
    DL4J toolkit. The initial included model is for InceptionV3
    and so using this module, natively in Java, Tika can use 
    Deep learning for metadata/text extraction from Images using
    the power of the Inception model (Github-165).

  * A new parser for sentiment analysis using a categorical 
    (multi-class, anry, sad, neutral, like, love) and binary
    (positive/negative) was added leveraging the USC data 
    science work (TIKA-2016).

  * Tika now has the ability to automatically detect objects in videos,
    using OpenCV and Tensorflow (TIKA-2322).

  * Change default behavior to parse embedded documents even if the user
    forgets to specify a Parser.class in the ParseContext (TIKA-2096).
    Users who wish to parse only the container document should set
    an EmptyParser as the Parser.class in the ParseContext.

  * Change default behavior of Office Parsers to _not_ extract
    Macros.  User needs to setExtractMacros to "true" (TIKA-2302).

  * Added tika-eval module (TIKA-1332).

  * Unified logging across Tika: SLF4J as logging API, Apache Log4j as
    implementation with JCL and JUL bridges in standalone tools like
    tika-app, tika-batch and tika-server (TIKA-2245).

  * Add parser for XLSB files (TIKA-1195).

  * Add parsers for EMF/WMF files (TIKA-2246/TIKA-2247).

  * Add parsers for WordPerfect and QuattroPro (.qpw) files.
    Contributed by Pascal Essiembre (TIKA-1946 and TIKA-2228).

  * Add experimental SAX parser for .pptx files. To select this parser,
    set useSAXPptxExtractor(true) on OfficeParserConfig (TIKA-2210).

  * Add experimental SAX parser for .docx files. To select this parser,
    set useSAXDocxExtractor(true) on OfficeParserConfig (TIKA-1321, TIKA-2191).

  * Add mime detection and parser for Word 2006ML format (TIKA-2179).

  * Bug fix for WordPerfect via Pascal Essiembre (TIKA-2352).

  * Added "text-main" equivalent option to tika-server via
    /tika/main (TIKA-2343).

  * Enabled configuration of the EncodingDetector used by
    parsers that extend AbstractEncodingDetectorParser (TIKA-2273).

  * Prevent easily preventable OOMs for both detection and parsing
    of some compression formats (TIKA-2330).

  * Extract images and thumbnails from ODT via Sam Bayer (TIKA-2295).

  * Fix potential NPE in FeedParser via Julien Nioche (TIKA-2269).

  * Official mime types for BMP, EMF and WMF have been registered with
    IANA, so switch to these (image/bmp image/emf image/wmf) (TIKA-2250)

  * Be more parsimonious with BufferedInputStreams via Josh Hight
    (TIKA-2244).

  * Enable handling of hyphenated language codes in TesseractOCRParser
    via Graham Russell (TIKA-2231).

  * Improve style tags in ODT (TIKA-2242).

  * Add container detection for embedded MSEquation files (TIKA-2238).

  * Add parsing of JBIG2 and extraction of JBIG2 from PDFs when
    required dependencies are added to class path by user.
    Contributed by Pascal Essiembre (TIKA-2232).

  * Mime magic for the OneNote family (.one / .onetoc / .onepkg), no parser
    (TIKA-2224).

  * Add configurability of "preserve-interword-spacing" to
    TesseractOCRParser (TIKA-2190).

  * Upgrade to PDFBox 2.0.6 and JempBox 1.8.13 (TIKA-2209/TIKA-2236/TIKA-2361).

  * Refactor MockParser to consolidate service loading
    and mime types into tika-core/src/test (TIKA-2195).

  * Enabled extraction of embedded objects from headers, footers,
    footnotes, endnotes and comments in legacy .docx parser (TIKA-2192).

  * Allow extraction of PDActions (including Javascript) from
    PDFs (TIKA-2090).  This is turned off by default.  Users
    must setExtractActions(true) on the PDFParserConfig.

  * Change default behavior in experimental .docx parser to ignore
    deleted text to align with .doc (TIKA-2187).

  * Upgrade to POI 3.16 (TIKA-2116, TIKA-2181, TIKA-2329).

  * Allow configuration of timeout for ForkParser (TIKA-2170).

  * Add extraction of .jpx inline images from PDFs when required
    dependencies are added by user to class path (TIKA-2175).

  * Add .jpx, .jp2, .ppm to formats handled by Tesseract (TIKA-2174).

  * Upgrade SQLite "provided" dependency to 3.16.1 (TIKA-2334).

  * Update Apache CXF version to 3.0.12 (TIKA-2292).

  * Add Lingo24 Language Detector (TIKA-2297).

  * Further mime magic for WebVTT (TIKA-1772)

  * Extend support for increased PSM options up to 13 for modern 
    versions of Tesseract (TIKA-2357).

  * Prevent potential resource leak by closing TrueTypeFont
    via Cameron Rollheiser (TIKA-2370).

Release 1.14 - 10/19/2016

  * Extract all headers from MSG/RFC822 (TIKA-2122).

  * Upgrade metadata-extractor to 2.9.1 (TIKA-2113).

  * Extract PDF DocInfo metadata into separate keys to prevent
    overwriting by XMP metadata (TIKA-2057).

  * Re-enable fileUrl for tika-server (TIKA-2081).  If you choose,
    to use this feature, beware of the security vulnerabilities!
    See: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-3271

  * Add Tesseract's hOCR output format as an option, via Eric Pugh
    (TIKA-2093)

  * Extract macros from MSOffice files (TIKA-2069).

  * Maintain passed-in mime in TXTParser (TIKA-2047).

  * Upgrade to POI.3-15 (TIKA-2013).

  * Upgrade to PDFBox 2.0.3 (TIKA-2051).

  * Fix hyperlinks with formatting in DOC and DOCX (TIKA-1255
    and TIKA-2078)

  * Tika now is integrated with the Tensorflow library from Google 
    and it can use its Inception v3 image classification model to 
    identify objects in images (TIKA-1993).

  * Parser configuration is now type-safe and parameters for parsers
    can have assigned types (TIKA-1508, TIKA-1986).

  * Prevent OOM/permanent hang on some corrupt CHM files (TIKA-2040).

  * Upgrade ICU4J charset detection components to fix multithreading
    bug (TIKA-2041).

  * Upgrade to Jackcess 2.1.4 (TIKA-2039).

  * Maintain more significant digits in cells of "General" format
    in XLS and XLSX (TIKA-2025).

  * Avoid mark/reset issues when extracting or detecting embedded resources
    in RFC822 emails (TIKA-2037).

  * Improving accuracy of Tesseract for better extraction of numeric 
    and alphanumeric text from images (TIKA-2021, TIKA-2031).

  * Improve extraction of embedded documents from PPT, PPTX and XLSX
    (TIKA-2026).

  * Add parser for applefile (AppleSingle) (TIKA-2022).

  * Add mime types, mime magic and/or globs for:
     * Endnote Import File (TIKA-2011)
     * DJVU files (TIKA-2009)
     * MS Owner File (TIKA-2008)
     * Windows Media Metafile (TIKA-2004)
     * iCal and vCalendar (TIKA-2006)
     * MBOX (TIKA-2042)
     * Stata DTA (TIKA-2064)

  * Add configurable maximum threshold for number of events extracted
    from the XMP Media Management Schema in JempboxExtractor (TIKA-1999).

  * Integrate TesseractOCR with full page image rendering for PDFs (TIKA-1994).

  * Add mime detection via Nick C and parser for DBF files (TIKA-1513).
  
  * Add mime detection and parsers for MSOffice 2003 XML Word
    and Excel formats (TIKA-1958).

  * Extract hyperlinks from PPT, PPTX, XSLX (TIKA-1454).

  * Upgrade to Commons Compress 1.12 (supports progress on TIKA-1358)

Release 1.13 - 05/08/2016

  * Upgrade to PDFBox 2.0.1 (TIKA-1285/TIKA-1959).
    MAJOR CHANGES in PDFParser:
    * The classic sequential parser is no longer available.
    * Tiff files are no longer extracted by default.  See
      https://pdfbox.apache.org/2.0/dependencies.html#optional-components
      for optional components to process Tiff files.
    * Some truncated/corrupted files that had some content extracted
      with 1.8.x may have no content extracted in 2.0.x (see TIKA-1912).

  * The MIT-NLP Information Extraction (MITIE) Named Entity
    Recognition (NER) system is now supported in Tika
    (TIKA-1913, GitHub-108).

  * Tika now supports the use of the Yandex translation 
    service (TIKA-1943, GitHub-106).

  * Tika now uses NER to extract scientific measurements
    from text using either GROBID Quantities which uses 
    conditional random fields and NLTK which uses regular 
    expressesions (TIKA-1917, GitHub-104).

  * Fixed JournalParser to handle null responses from 
    GROBID and to log a message (TIKA-1925).

  * Refactored Language Detector into tika-landetect module,
    added default N-Gram implementation, Optimaize Lang
    Detector and MIT Text.jl implementation 
    (TIKA-1872, TIKA-1696, TIKA-1723).
 
  * Extract metadata from MP4 videos whether or not the
    PooledTimeSeries parser is available via Aditya Dhulipala
    (TIKA-1844).

  * Fix NPE when trying to get embedded image identifier in
    WordParser (TIKA-1956).

  * Improvements to MIME database for detection of Scientific
    and other formats present in the TREC-DD-Polar dataset
    (TIKA-1881, GitHub-85, TIKA-1883, TIKA-1884, TIKA-1886,
     TIKA-1882).

  * LinkContentHandler now extracts links from script tags
    via Joseph Naegele (TIKA-1937).

  * Handle per page IOExceptions more robustly in PDFParser (TIKA-1948).

  * Upgrade commons-compress to 1.11 (TIKA-1949).

  * Add detection for embedded MSChart.Graph files (TIKA-1033).

  * Fix NPE in Sqlite parser from Nick C (TIKA-1927).

  * Fix NPE in Open Document parser from Nick C (TIKA-1916).

  * Upgrade mp4parser's isoparser to 1.1.7 (TIKA-1924 and TIKA-1931).

  * Upgrade BouncyCastle to 1.54 (TIKA-1923).

  * Upgrade Jackcess to 2.1.3 (TIKA-1922).

  * Upgrade Drew Noakes' metadata-extractor to 2.8.1 (TIKA-1921).

  * Upgrade Gson in tika-serialization to 2.6.2 (TIka-1920).

  * Upgrade commons-cli in tika-batch to 1.3.1 (TIKA-1919).

  * Add XMPMM support to PDFParser and JpegParser via Jempbox (TIKA-1894).

  * Move serialization of TikaConfig to tika-core and enable dumping
    of the config file via tika-app (TIKA-1657).

  * Tika now incorporates the Natural Language Toolkit (NLTK) from the
    Python community as an option for Named Entity Recognition (TIKA-1876).

  * Add support for XFA extraction via Pascal Essiembre (TIKA-1857).

  * Upgrade to sqlite-jdbc 3.8.11.2 (TIKA-1861).  NOTE: this dependency
    is still <scope>provided</scope>.  You need to include this dependency
    in order to parse sqlite files.

  * Upgrade to POI 3.15-beta1 (TIKA-1895).

  * Upgrade to Jackson 2.7.1 (TIKA-1869).

  * Upgrade to Apache SIS 0.6 (TIKA-1878).

  * RichTextContentHandler moved from the Server package to Core (TIKA-1870).

  * Added ZeroSizeFileDetector to support application/x-zerovalue via
    Adesh Gupta (TIKA-1885).  
  
  * Addition of types information to Grobid quantities parser via 
    Can Menekse (TIKA-1965).

Release 1.12 - 01/24/2016

  * Support for iFrames and element link extraction is provided in
    the link Content Handler (TIKA-1835).

  * Slide notes are now linked to the slide XHTML in the PPT output
    (TIKA-1840).

  * JSON tests in Tika server were updated to remove impossible casts
    (Github-73).

  * Fix bug in GeoTopicParser where NER is reused instead of instantiated
    with each request (TIKA-1834).

  * Upgrade rome to 1.5.1 && Downgrade Rome dependency to 0.9 to avoid 
    nasty NPE (TIKA-1820, TIKA-1516)

  * The NamedEntityParser was enhanced to generate text content
    in addition to metadata (TIKA-1815, TIKA-1816).

  * A significant speed-up is made to the GeoTopicParser by
    using the new REST server capabilities from Lucene Geo
    Gazetteer (TIKA-1803).

  * A parser to compute motion properties in Videos, e.g., 
    Histogram of Oriented Gradients and Histogram of Optical Flows
    using the Pooled Time Series algorithm, was added (TIKA-1798).

  * Provide NamedEntityParser which exposes Named Entity Recognition
    from OpenNLP and Stanford NER providers (TIKA-1787, GitHub-61,
    GitHub-62).

  * Allow XHTMLContentHandler to pass attributes of html element 
    via Markus Jelsma (TIKA-1782).

  * Fix regression with spacing in PPT via Andreas Beeker (TIKA-1777).

  * Tika Facade parse methods for Path and File added which take a
    Metadata object, to mirror the existing InputStream one (GitHub-60)

  * GeoParser fix for loading the NER model from a jar file (TIKA-1791)


Release 1.11 - 10/18/2015

  * Java7 API support for allowing java.nio.file.Path as method arguments
    was added to Tika and to ParsingReader, TikaFileTypeDetector, and to
    Tika Config (TIKA-1745, TIKA-1746, TIKA-1751).

  * MIME support was added for WebVTT: The Web Video Text Tracks Format
    files (TIKA-1772).

  * MIME magic improved to ensure emails detected as message/rfc822
    (TIKA-1771).

  * Upgrade to Jackcess Encrypt 2.1.1 to avoid binary incompatibility
    with Bouncy Castle (TIKA-1736).
  
  * Make div and other markup more consistent between PPT and 
    PPTX (TIKA-1755).

  * Parse multiple authors from MSOffice's semi-colon delimited
    author field (TIKA-1765).
  
  * Include CTAKESConfig.properties within tika-parsers resources 
    by default (TIKA-1741).
  
  * Prevent infinite recursion when processing inline images
    in PDF files by limiting extraction of duplicate images
    within the same page (TIKA-1742).

  * Upgrade to POI 3.13-final (via Andreas Beeker) (TIKA-1707).

  * Upgraded tika-batch to use Path throughout (TIKA-1747 and
    (TIKA-1754).

  * Upgraded to Path in TikaInputStream (via Yaniv Kunda) (TIKA-1744).

  * Changed default content handler type for "/rmeta" in tika-server
    to "xml" to align with "-J" option in tika-app.  
    Clients can now specify handler types via PathParam. (TIKA-1716).

  * The fantastic GROBID (or Grobid) GeneRation Of BIbliographic Data
    for machine learning from PDF files is now integrated as a 
    Tika parser (TIKA-1699, TIKA-1712).

  * The ability to specify the Tesseract Config Path was added
    to the OCR Parser (TIKA-1703).

  * Upgraded to ASM 5.0.4 (TIKA-1705).

  * Corrected Tika Config XML detector definition explicit loading 
    of MimeTypes (TIKA-1708)

  * In Tika Parsers, Batch, Server, App and Examples, use Apache
    Commons IO instead of inlined ex-Commons classes, and the Java 7
    Standard Charset definitions (TIKA-1710)

  * Upgraded to Commons Compress 1.10, which enables zlib compressed
    archives support (TIKA-1718)


Release 1.10 - 8/1/2015

  * Tika Config XML can now be used to create composite detectors,
    and exclude detectors that DefaultDetector would otherwise
    have used. This brings support in-line with Parsers. (TIKA-1702)

  * Reverted to legacy sort order of parsers that was 
    mistakenly reversed in Tika 1.9 (TIKA-1689).

  * Upgrade to POI 3.13-beta1 (TIKA-1667).

  * Upgrade to PDFBox 1.8.10 (TIKA-1588).

  * MimeTypes now tries to find a registered type with and 
    without parameters (TIKA-1692).

  * Added more robust error handling for encoding detection
    of .MSG files (TIKA-1238).

  * Fixed bug in Tika's use of the Jackcess parser that 
    prevented reading of v97 Access files (TIKA-1681).

  * Upgrade xerial.org's sqlite-jdbc to 3.8.10.1. NOTE: 
    as of Tika 1.9, this jar is "provided." Make sure 
    to upgrade your provided jar! (TIKA-1687).

  * Add header/footer extraction to xls (via Aeham Abushwashi)
    (TIKA-1400).

  * Drop the source file name from the embedded file path in
    RecursiveParserWrapper's "X-TIKA:embedded_resource_path" 
    (TIKA-1673).

  * Upgraded to Java 7 (TIKA-1536).

  * Non-standards compliant emails are now correctly detected
    as message/rfc822 (TIKA-1602).

  * Added parser for MS Access files via Jackcess. Many thanks 
    to Health Market Science, Brian O'Neill and James Ahlborn 
    for relicensing Jackcess to Apache v2! (TIKA-1601)

  * GDALParser now correctly sets "nitf" as a supported 
    MediaType (TIKA-1664).

  * Added DigestingParser to calculate digest hashes 
    and record them in metadata. Integrated with
    tika-app and tika-server (TIKA-1663).

  * Fixed ZipContainerDetector to detect all IPA files
    (TIKA-1659).


Release 1.9 - 6/6/2015

  * The ability to use the cTAKES clinical text
    knowledge extraction system for biomedical data is 
    now included as a Tika parser (TIKA-1645, TIKA-1642).

  * Tika-server allows a user to specify the Tika config
    from the command line (TIKA-1652, TIKA-1426).

  * Matlab file detection has been improved (TIKA-1634).

  * The EXIFTool was added as an External parser
    (TIKA-1639).

  * If FFMPEG is installed and on the PATH, it is a 
    usable Parser in Tika now (TIKA-1510).

  * Fixes have been applied to the ExternalParser to make
    it functional (TIKA-1638).

  * Tika service loading can now be more verbose with the 
    org.apache.tika.service.error.warn system property (TIKA-1636).

  * Tika Server now allows for metadata extraction from remote
    URLs and in addition it outputs the detected language as a
    metadata field (TIKA-1625).

  * OUTPUT_FILE_TOKEN not being replaced in ExternalParser 
    contributed by Pascal Essiembre (TIKA-1620).

  * Tika REST server now supports language identification
    (TIKA-1622).

  * All of the example code from the Tika in Action book has 
    been donated to Tika and added to tika-examples (TIKA-1562).

  * Tika server now logs errors determining ContentDisposition
    (TIKA-1621).

  * An algorithm for using Byte Histogram frequencies to construct
    a Neural Network and to perform MIME detection was added
    (TIKA-1582).

  * A Bayesian algorithm for MIME detection by probabilistic
    means was added (TIKA-1517).

  * Tika now incorporates the Apache Spatial Information
    System capability of parsing Geographic ISO 19139 
    files (TIKA-443). It can also detect those files as
    well.

  * Update the MimeTypes code to support inheritance
    (TIKA-1535).

  * Provide ability to parse and identify Global Change 
    Master Directory Interchange Format (GCMD DIF) 
    scientific data files (TIKA-1532).

  * Improvements to detect CBOR files by extension (TIKA-1610).

  * Change xerial.org's sqlite-jdbc jar to "provided" (TIKA-1511).
    Users will now need to add sqlite-jdbc to their classpath for
    the Sqlite3Parser to work.

  * ExternalParser.check now catches (suppresses) SecurityException
    and returns false, so it's OK to run Tika with a security policy
    that does not allow execution of external processes (TIKA-1628).

Release 1.8 - 4/13/2015

  * Fix null pointer when processing ODT footer styles (TIKA-1600).

  * Upgrade to com.drewnoakes' metadata-extractor to 2.0 and
    add parser for webp metadata (TIKA-1594).

  * Duration extracted from MP3s with no ID3 tags (TIKA-1589).

  * Upgraded to PDFBox 1.8.9 (TIKA-1575).

  * Tika now supports the IsaTab data standard for bioinformatics
    both in terms of MIME identification and in terms of parsing
    (TIKA-1580).

  * Tika server can now enable CORS requests with the command line
    "--cors" or "-C" option (TIKA-1586).

  * Update jhighlight dependency to avoid using LGPL license. Thank
    @kkrugler for his great contribution (TIKA-1581).
  
  * Updated HDF and NetCDF parsers to output file version in 
    metadata (TIKA-1578 and TIKA-1579).

  * Upgraded to POI 3.12-beta1 (TIKA-1531).

  * Added tika-batch module for directory to directory batch
    processing.  This is a new, experimental capability, and the API will 
    likely change in future releases (TIKA-1330).

  * Translator.translate() Exceptions are now restricted to
    TikaException and IOException (TIKA-1416).

  * Tika now supports MIME detection for Microsoft Extended 
    Makefiles (EMF) (TIKA-1554).

  * Tika has improved delineation in XML and HTML MIME detection
    (TIKA-1365).

  * Upgraded the Drew Noakes metadata-extractor to version 2.7.2
    (TIKA-1576).

  * Added basic style support for ODF documents, contributed by
    Axel Dörfler (TIKA-1063).

  * Move Tika server resources and writers to separate
    org.apache.tika.server.resource and writer packages (TIKA-1564).

  * Upgrade UCAR dependencies to 4.5.5 (TIKA-1571).
  
  * Fix Paths in Tika server welcome page (TIKA-1567).

  * Fixed infinite recursion while parsing some PDFs (TIKA-1038).

  * XHTMLContentHandler now properly passes along body attributes,
    contributed by Markus Jelsma (TIKA-995).

  * TikaCLI option --compare-file-magic to report mime types known to
    the file(1) tool but not known / fully known to Tika.

  * MediaTypeRegistry support for returning known child types.

  * Support for excluding certain Parsers from being
    used by DefaultParser via the Tika Config file, using the new
    parser-exclude tag (TIKA-1558).

  * Detect Global Change Master Directory (GCMD) Directory
    Interchange Format (DIF) files (TIKA-1561).

  * Tika's JAX-RS server can now return stacktraces for
    parse exceptions (TIKA-1323).

  * Added MockParser for testing handling of exceptions, errors
    and hangs in code that uses parsers (TIKA-1553).

  * The ForkParser service removed from Activator. Rollback of (TIKA-1354).

  * Increased the speed of language identification by 
    a factor of two -- contributed by Toke Eskildsen (TIKA-1549).

  * Added parser for Sqlite3 db files. Some users will need to 
    exclude the dependency on xerial.org's sqlite-jdbc because
    it contains native libs (TIKA-1511).

  * Use POST instead of PUT for tika-server form methods
    (TIKA-1547).

  * A basic wrapper around the UNIX file command was 
    added to extract Strings. In addition a parse to 
    handle Strings parsing from octet-streams using Latin1
    charsets as added (TIKA-1541, TIKA-1483).

  * Add test files and detection mechanism for Gridded
    Binary (GRIB) files (TIKA-1539).

  * The RAR parser was updated to handle Chinese characters 
    using the functionality provided by allowing encoding to
    be used within ZipArchiveInputStream (TIKA-936).

  * Fix out of memory error in surefire plugin (TIKA-1537).

  * Build a parser to extract data from GRIB formats (TIKA-1423).

  * Upgrade to Commons Compress 1.9 (TIKA-1534).

  * Include media duration in metadata parsed by MP4Parser (TIKA-1530).

  * Support password protected 7zip files (using a PasswordProvider,
    in keeping with the other password supporting formats) (TIKA-1521).

  * Password protected Zip files should not trigger an exception (TIKA-1028).

Release 1.7 - 1/9/2015

  * Fixed resource leak in OutlookPSTParser that caused TikaException 
    when invoked via AutoDetectParser on Windows (TIKA-1506).

  * HTML tags are properly stripped from content by FeedParser
    (TIKA-1500).

  * Tika Server support for selecting a single metadata key;
    wrapped MetadataEP into MetadataResource (TIKA-1499).

  * Tika Server support for JSON and XMP views of metadata (TIKA-1497).

  * Tika Parent uses dependency management to keep duplicate 
    dependencies in different modules the same version (TIKA-1384).

  * Upgraded slf4j to version 1.7.7 (TIKA-1496).

  * Tika Server support for RecursiveParserWrapper's JSON output
    (endpoint=rmeta) equivalent to (TIKA-1451's) -J option 
    in tika-app (TIKA-1498).

  * Tika Server support for providing the password for files on a 
    per-request basis through the Password http header (TIKA-1494).

  * Simple support for the BPG (Better Portable Graphics) image format
    (TIKA-1491, TIKA-1495).

  * Prevent exceptions from being thrown for some malformed
    mp3 files (TIKA-1218).

  * Reformat pom.xml files to use two spaces per indent (TIKA-1475).

  * Fix warning of slf4j logger on Tika Server startup (TIKA-1472).

  * Tika CLI and GUI now have option to view JSON rendering of output
    of RecursiveParserWrapper (TIKA-1451).

  * Tika now integrates the Geospatial Data Abstraction Library
    (GDAL) for parsing hundreds of geospatial formats (TIKA-605,
    TIKA-1503).

  * ExternalParsers can now use Regexs to specify dynamic keys
   (TIKA-1441).

  * Thread safety issues in ImageMetadataExtractor were resolved
    (TIKA-1369).
 
  * The ForkParser service is now registered in Activator
    (TIKA-1354).

  * The Rome Library was upgraded to version 1.5 (TIKA-1435).

  * Add markup for files embedded in PDFs (TIKA-1427).
 
  * Extract files embedded in annotations in PDFS (TIKA-1433).

  * Upgrade to PDFBox 1.8.8 (TIKA-1419, TIKA-1442).

  * Add RecursiveParserWrapper (aka Jukka's and Nick's) 
    RecursiveMetadataParser (TIKA-1329)

  * Add example for how to dump TikaConfig to XML (TIKA-1418).

  * Allow users to specify a tika config file for tika-app (TIKA-1426).

  * PackageParser includes the last-modified date from the archive
    in the metadata, when handling embedded entries (TIKA-1246)

  * Created a new Tesseract OCR Parser to extract text from images.
    Requires installation of Tesseract before use (TIKA-93).

  * Basic parser for older Excel formats, such as Excel 4, 5 and 95,
    which can get simple text, and metadata for Excel 5+95 (TIKA-1490)


Release 1.6 - 08/31/2014

  * Parse output should indicate which Parser was actually used
    (TIKA-674).

  * Use the forbidden-apis Maven plugin to check for unsafe Java
    operations (TIKA-1387).

  * Created an ExternalTranslator class to interface with command
    line Translators (TIKA-1385).

  * Created a MosesTranslator as a subclass of ExternalTranslator
    that calls the Moses Decoder machine translation program (TIKA-1385).

  * Created the tika-example module. It will have examples of how to
    use the main Tika interfaces (TIKA-1390).

  * Upgraded to Commons Compress 1.8.1 (TIKA-1275).

  * Upgraded to POI 3.11-beta1 (TIKA-1380).

  * Tika now extracts SDTCell content from tables in .docx files (TIKA-1317).

  * Tika now supports detection of the Persian/Farsi language.
    (TIKA-1337)
  
  * The Tika Detector interface is now exposed through the JAX-RS
    server (TIKA-1336, TIKA-1336).

  * Tika now has support for parsing binary Matlab files as part of 
    our larger effort to increase the number of scientific data formats 
    supported. (TIKA-1327)

  * The Tika Server URLs for the unpacker resources have been changed,
    to bring them under a common prefix (TIKA-1324). The mapping is
    /unpacker/{id} -> /unpack/{id}
    /all/{id}      -> /unpack/all/{id}

  * Added module and core Tika interface for translating text between
    languages and added a default implementation that call's Microsoft's
    translate service (TIKA-1319)

  * Added an Translator implementation that calls Lingo24's Premium
    Machine Translation API (TIKA-1381)

  * Made RTFParser's list handling slightly more robust against corrupt
    list metadata (TIKA-1305)

  * Fixed bug in CLI json output (TIKA-1291/TIKA-1310)

  * Added ability to turn off image extraction from PDFs (TIKA-1294).
    Users must now turn on this capability via the PDFParserConfig.

  * Upgrade to PDFBox 1.8.6 (TIKA-1290, TIKA-1231, TIKA-1233, TIKA-1352)

  * Zip Container Detection for DWFX and XPS formats, which are OPC
    based (TIKA-1204, TIKA-1221)

  * Added a user facing welcome page to the Tika Server, which
    says what it is, and a very brief summary of what is available. 
    (TIKA-1269)

  * Added Tika Server endpoints to list the available mime types,
    Parsers and Detectors, similar to the --list-<foo> methods on
    the Tika CLI App (TIKA-1270)

  * Improvements to NetCDF and HDF parsing to mimic the output of
    ncdump and extract text dimensions and spatial and variable
    information from scientific data files (TIKA-1265)

  * Extract attachments from RTF files (TIKA-1010)

  * Support Outlook Personal Folders File Format *.pst (TIKA-623)
  
  * Added mime entries for additional Ogg based formats (TIKA-1259)

  * Updated the Ogg Vorbis plugin to v0.4, which adds detection for a wider
    range of Ogg formats, and parsers for more Ogg Audio ones (TIKA-1113)

  * PDF: Images in PDF documents can now be extracted as embedded resources.
    (TIKA-1268)

  * Fixed RuntimeException thrown for certain Word Documents (TIKA-1251).

  * CLI: TikaCLI now has another option: --list-parser-details-apt, which outputs
    the list of supported parsers in APT format. This is used to generate the list
    on the formats page (TIKA-411).

Release 1.5 - 02/04/2014

  * Fixed bug in handling of embedded file processing in PDFs (TIKA-1228).

  * Added SourceCodeParser to support java, Groovy, C++ files (TIKA-1224).
  
  * Updated Tika Server to support multipart/form-data payloads (TIKA-1198).

  * Updated Tika Server to CXF 2.7.8 (TIKA-1197).

  * Updated Tika Server to accept requests over wildcard addresses (TIKA-1196).

  * Added option to use alternate NonSequentialPDFParser (TIKA-1201).

  * Content from PDF AcroForms is now extracted (TIKA-973).

  * Fixed invalid asterisks from master slide in PPT (TIKA-1171).

  * Added test cases to confirm handling of auto-date in PPT and PPTX (TIKA-817).
 
  * Text from tables in PPT files is once again extracted correctly (TIKA-1076).
  
  * Text is extracted from text boxes in XLSX (TIKA-1100).

  * Tika no longer hangs when processing Excel files with custom fraction format (TIKA-1132).

  * Disconcerting stacktrace from missing beans no longer printed for some DOCX files (TIKA-792).

  * Upgraded POI to 3.10-beta2 (TIKA-1173).

  * Upgraded PDFBox to 1.8.4 (TIKA-1230).

  * Made HtmlEncodingDetector more flexible in finding meta 
    header charset (TIKA-1001).

  * Added sanitized test HTML file for local file test (TIKA-1139).

  * Fixed bug that prevented attachments within a PDF from being processed
    if the PDF itself was an attachment (TIKA-1124).

  * Text from paragraph-level structured document tags in DOCX files is now extracted (TIKA-1130).

  * RTF: Fixed ArrayIndexOutOfBoundsException when parsing list override (TIKA-1192).

  * CLI: TikaCLI now escapes invalid filename characters as hex
    characters (TIKA-1078).

Release 1.4 - 06/15/2013

  * Removed a test HTML file with a poorly chosen GPL text in it (TIKA-1129).

  * Improvements to tika-server to allow it to produce text/html and
    text/xml content (TIKA-1126, TIKA-1127).

  * Improvements were made to the Compressor Parser to handle g'zipped files
    that require the decompressConcatenated option set to true (TIKA-1096).

  * Addressed a typographic error that was preventing from detection of 
    awk files (TIKA-1081).

  * Added a new end-point to Tika's JAX-RS REST server that only detects
    the media-type based on a small portion of the document submitted
   (TIKA-1047).

  * RTF: Ordered and unordered lists are now extracted (TIKA-1062).

  * MP3: Audio duration is now extracted (TIKA-991)

  * Java .class files: upgraded from ASM 3.1 to ASM 4.1 for parsing
    the Java bytecodes (TIKA-1053).

  * Mime Types: Definitions extended to optionally include Link (URL) and
    UTI, along with details for several common formats (TIKA-1012 / TIKA-1083)

  * Exceptions when parsing OLE10 embedded documents, when parsing
    summary information from Office documents, and when saving
    embedded documennts in TikaCLI are now logged instead
    of aborting extraction (TIKA-1074)

  * MS Word: line tabular character is now replaced with newline
    (TIKA-1128)

  * XML: ElementMetadataHandlers can now optionally accept duplicate
    and empty values (TIKA-1133)

Release 1.3 - 01/19/2013

  * Mimetype definitions added for more common programming languages,
    including common extensions, but not magic patterns. (TIKA-1055)

  * MS Word: When a Word (.doc) document contains embedded files or
    links to external documents, Tika now places a <div
    class="embedded" id="_XXX"/> placeholder into the XHTML so you can
    see where in the main text the embedded document occurred
    (TIKA-956, TIKA-1019).  Embedded Wordpad/RTF documents are now
    recognized (TIKA-982).

  * PDF: Text from pop-up annotations is now extracted (TIKA-981).
    Text from bookmarks is now extracted (TIKA-1035).

  * PKCS7: Detached signatures no longer through NullPointerException
    (TIKA-986).

  * iWork: The chart name for charts embedded in numbers documents is
    now extracted (TIKA-918).

  * CLI: TikaCLI -m now handles multi-valued metadata keys correctly
    (previously it only printed the first value).  (TIKA-920)

  * MS Word (.docx): When a Word (.docx) document contains embedded
    files, Tika now places a <div class="embedded" id="XXX"/> into the
    XHTML so you can see where in the main text the embedded document
    occurred.  The id (rId) is included in the Metadata of each
    embedded document as the new Metadata.EMBEDDED_RELATIONSHIP_ID
    key, and TikaCLI prepends the rId (if present) onto the filename
    it extracts (TIKA-989).  Fixed NullPointerException when style is
    null (TIKA-1006).  Text inside text boxes is now extracted
    (TIKA-1005).

  * RTF: Page, word, character count and creation date metadata are
    now extracted for RTF documents (TIKA-999).

  * MS PowerPoint (.pptx): When a PowerPoint (.pptx) document contains
    embedded files, Tika now places a <div class="embedded" id="XXX"/> into the
    XHTML so you can see where in the main text the embedded document
    occurred.  The id (rId) is included in the Metadata of each
    embedded document as the new Metadata.EMBEDDED_RELATIONSHIP_ID
    key, and TikaCLI prepends the rId (if present) onto the filename
    it extracts (TIKA-997, TIKA-1032).

  * MS PowerPoint (.ppt): When a PowerPoint (.ppt) document contains
    embedded files, Tika now places a <div class="embedded" id="XXX"/> into the
    XHTML so you can see where in the main text the embedded document
    occurred (TIKA-1025).  Text from the master slide is now extracted
    (TIKA-712).

  * MHTML: fixed Null charset name exception when a mime part has an
    unrecognized charset (TIKA-1011).

  * MP3: if an ID3 tag was encoded in UTF-16 with only the BOM then on
    certain JVMs this would incorrectly extract the BOM as the tag's
    value (TIKA-1024).

  * ZIP: placeholders (<div class="embedded" id="<entry name>"/>) are
    now left in the XHTML so you can see where each archive member
    appears (TIKA-1036). TikaCLI would hit FileNotFoundException when
    extracting files that were under sub-directories from a ZIP
    archive, because it failed to create the parent directories first
    (TIKA-1031).

  * XML: a space character is now added before each element
    (TIKA-1048)

Release 1.2 - 07/10/2012
---------------------------------

  * Tika's JAX-RS based Network server now is based on Apache CXF,
    which is available in Maven Central and now allows the server
    module to be packaged and included in our release
    (TIKA-593, TIKA-901).

  * Tika: parseToString now lets you specify the max string length
    per-call, in addition to per-Tika-instance. (TIKA-870)

  * Tika now has the ability to detect FITS (Flexible Image Transport System) 
    files (TIKA-874).

  * Images: Fixed file handle leak in ImageParser. (TIKA-875)

  * iWork: Comments in Pages files are now extracted (TIKA-907).
    Headers, footers and footnotes in Pages files are now extracted
    (TIKA-906).  Don't throw NullPointerException on passsword
    protected iWork files, even though we can't parse their contents
    yet (TIKA-903).  Text extracted from Keynote text boxes and bullet
    points no longer runs together (TIKA-910). Also extract text for
    Pages documents created in layout mode (TIKA-904).  Table names
    are now extracted in Numbers documents (TIKA-924).  Content added
    to master slides is also extracted (TIKA-923).

  * Archive and compression formats: The Commons Compress dependency was
    upgraded from 1.3 to 1.4.1. With this change Tika can now parse also
    Unix dump archives and documents compressed using the XZ and Pack200
    compression formats. (TIKA-932)

  * KML: Tika now has basic support for Keyhole Markup Language documents
    (KML and KMZ) used by tools like Google Earth. See also
    http://www.opengeospatial.org/standards/kml/. (TIKA-941)

  * CLI: You can now use the TIKA_PASSWORD environment variable or the
    --password=X command line option to specify the password that Tika CLI
    should use for opening encrypted documents (TIKA-943).

  * Character encodings: Tika's character encoding detection mechanism was
    improved by adding integration to the juniversalchardet library that
    implements Mozilla's universal charset detection algorithm. The slower
    ICU4J algorithms are still used as a fallback thanks to their wider
    coverage of custom character encodings. (TIKA-322, TIKA-471)

  * Charset parameter: Related to the character encoding improvements
    mentioned above, Tika now returns the detected character encoding as
    a "charset" parameter of the content type metadata field for text/plain
    and text/html documents. For example, instead of just "text/plain", the
    returned content type will be something like "text/plain; charset=UTF-8"
    for a UTF-8 encoded text document. Character encoding information is still
    present also in the content encoding metadata field for backwards
    compatibility, but that field should be considered deprecated. (TIKA-431)

  * Extraction of embedded resources from OLE2 Office Documents, where
    the resource isn't another office document, has been fixed (TIKA-948)

Release 1.1 - 3/7/2012
---------------------------------

 * Link Extraction: The rel attribute is now extracted from 
   links per the LinkConteHandler. (TIKA-824)

 * MP3: Fixed handling of UTF-16 (two byte) ID3v2 tags (previously
   the last character in a UTF-16 tag could be corrupted) (TIKA-793)

 * Performance: Loading of the default media type registry is now
   significantly faster. (TIKA-780)

 * PDF: Allow controlling whether overlapping duplicated text should
   be removed.  Disabling this (the default) can give big
   speedups to text extraction and may workaround cases where
   non-duplicated characters were incorrectly removed (TIKA-767).
   Allow controlling whether text tokens should be sorted by their x/y
   position before extracting text (TIKA-612); this is necessary for
   certain PDFs.  Fixed cases where too many </p> tags appear in the
   XHTML output, causing NPE when opening some PDFs with the GUI
   (TIKA-778).

 * RTF: Fixed case where a font change would result in processing
   bytes in the wrong font's charset, producing bogus text output
   (TIKA-777).  Don't output whitespace in ignored group states,
   avoiding excessive whitespace output (TIKA-781).  Binary embedded
   content (using \bin control word) is now skipped correctly;
   previously it could cause the parser to incorrectly extract binary
   content as text (TIKA-782).

 * CLI: New TikaCLI option "--list-detectors", which displays the
   mimetype detectors that are available, similar to the existing
   "--list-parsers" option for parsers. (TIKA-785).

 * Detectors: The order of detectors, as supplied via the service
   registry loader, is now controlled. User supplied detectors are
   prefered, then Tika detectors (such as the container aware ones),
   and finally the core Tika MimeTypes is used as a backup. This
   allows for specific, detailed detectors to take preference over
   the default mime magic + filename detector. (TIKA-786)

 * Microsoft Project (MPP): Filetype detection has been fixed,
   and basic metadata (but no text) is now extracted. (TIKA-789)

 * Outlook: fixed NullPointerException in TikaGUI when messages with
   embedded RTF or HTML content were filtered (TIKA-801).

 * Ogg Vorbis and FLAC: Parser added for Ogg Vorbis and FLAC audio
   files, which extract audio metadata and tags (TIKA-747)

 * MP4: Improved mime magic detection for MP4 based formats (including
   QuickTime, MP4 Video and Audio, and 3GPP) (TIKA-851)

 * MP4: Basic metadata extracting parser for MP4 files added, which includes
   limited audio and video metadata, along with the iTunes media metadata
   (such as Artist and Title) (TIKA-852)

 * Document Passwords: A new ParseContext object, PasswordProvider,
   has been added. This provides a way to supply the password for 
   a document during processing. Currently, only password protected
   PDFs and Microsoft OOXML Files are supported. (TIKA-850)

Release 1.0 - 11/4/2011
---------------------------------

The most notable changes in Tika 1.0 over previous releases are:

 * API: All methods, classes and interfaces that were marked as
   deprecated in Tika 0.10 have been removed to clean up the API
   (TIKA-703). You may need to adjust and recompile client code
   accordingly. The declared OSGi package versions are now 1.0, and
   will thus not resolve for client bundles that still refer to 0.x
   versions (TIKA-565).

 * Configuration: The context class loader of the current thread is
   no longer used as the default for loading configured parser and
   detector classes. You can still pass an explicit class loader
   to the configuration mechanism to get the previous behaviour.
   (TIKA-565)

 * OSGi: The tika-core bundle will now automatically pick up and use
   any available Parser and Detector services when deployed to an OSGi
   environment. The tika-parsers bundle provides such services based on
   for all the supported file formats for which the upstream parser library
   is available. If you don't want to track all the parser libraries as
   separate OSGi bundles, you can use the tika-bundle bundle that packages
   tika-parsers together with all its upstream dependencies. (TIKA-565)

 * RTF: Hyperlinks in RTF documents are now extracted as an <a
   href=...>...</a> element (TIKA-632). The RTF parser is also now
   more robust when encountering too many closing {'s vs. opening {'s
   (TIKA-733).

 * MS Word: From Word (.doc) documents we now extract optional hyphen
   as Unicode zero-width space (U+200B), and non-breaking hyphen as
   Unicode non-breaking hyphen (U+2011). (TIKA-711)

 * Outlook: Tika can now process also attachments in Outlook messages.
   (TIKA-396)

 * MS Office: Performance of extracting embedded office docs was improved.
   (TIKA-753)

 * PDF: The PDF parser now extracts paragraphs within each page 
   (TIKA-742) and  can now optionally extract text from PDF 
   annotations (TIKA-738). There's also an option to enable (the 
   default) or disable auto-space insertion (TIKA-724). 

 * Language detection: Tika can now detect Belarusian, Catalan,
   Esperanto, Galician, Lithuanian (TIKA-582), Romanian, Slovak,
   Slovenian, and Ukrainian (TIKA-681).

 * Java: Tika no longer ships retrotranslated Java 1.4 binaries along
   with the normal ones that work with Java 5 and higher. (TIKA-744)

 * OpenOffice documents: header/footer text is now extracted for text,
   presentation and spreadsheet documents (TIKA-736)

Tika 1.0 relies on the following set of major dependencies (generated using
mvn dependency:tree from tika-parsers):

   org.apache.tika:tika-parsers:bundle:1.0
   +- org.apache.tika:tika-core:jar:1.0:compile
   +- edu.ucar:netcdf:jar:4.2-min:compile
   |  \- org.slf4j:slf4j-api:jar:1.5.6:compile
   +- org.apache.james:apache-mime4j-core:jar:0.7:compile
   +- org.apache.james:apache-mime4j-dom:jar:0.7:compile
   +- org.apache.commons:commons-compress:jar:1.3:compile
   +- commons-codec:commons-codec:jar:1.5:compile
   +- org.apache.pdfbox:pdfbox:jar:1.6.0:compile
   |  +- org.apache.pdfbox:fontbox:jar:1.6.0:compile
   |  +- org.apache.pdfbox:jempbox:jar:1.6.0:compile
   |  \- commons-logging:commons-logging:jar:1.1.1:compile
   +- org.bouncycastle:bcmail-jdk15:jar:1.45:compile
   +- org.bouncycastle:bcprov-jdk15:jar:1.45:compile
   +- org.apache.poi:poi:jar:3.8-beta4:compile
   +- org.apache.poi:poi-scratchpad:jar:3.8-beta4:compile
   +- org.apache.poi:poi-ooxml:jar:3.8-beta4:compile
   |  +- org.apache.poi:poi-ooxml-schemas:jar:3.8-beta4:compile
   |  |  \- org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile
   |  \- dom4j:dom4j:jar:1.6.1:compile
   +- org.apache.geronimo.specs:geronimo-stax-api_1.0_spec:jar:1.0.1:compile
   +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:compile
   +- asm:asm:jar:3.1:compile
   +- com.drewnoakes:metadata-extractor:jar:2.4.0-beta-1:compile
   +- de.l3s.boilerpipe:boilerpipe:jar:1.1.0:compile
   +- rome:rome:jar:0.9:compile
      \- jdom:jdom:jar:1.0:compile

The following people have contributed to Tika 1.0 by submitting or commenting
on the issues resolved in this release:

Andrzej Bialecki
Antoni Mylka
Benson Margulies
Chris A. Mattmann
Cristian Vat
Dave Meikle
David Smiley
Dennis Adler
Erik Hetzner
Ingo Renner
Jeremias Maerki
Jeremy Anderson
Jeroen van Vianen
John Bartak
Jukka Zitting
Julien Nioche
Ken Krugler
Mark Butler
Maxim Valyanskiy
Michael Bryant
Michael McCandless 
Nick Burch
Pablo Queixalos
Uwe Schindler
Žygimantas Medelis


See http://s.apache.org/Zk6 for more details on these contributions.


Release 0.10 - 09/25/2011
-------------------------

The most notable changes in Tika 0.10 over previous releases are:

 * A parser for CHM help files was added. (TIKA-245)

 * TIKA-698: Invalid characters are now replaced with the Unicode
   replacement character (U+FFFD), whereas before such characters were
   replaced with spaces, so you may need to change your processing of
   Tika's output to now handle U+FFFD.

 * The RTF parser was rewritten to perform its own direct shallow
   parse of the RTF content, instead of using RTFEditorKit from
   javax.swing.  This fixes several issues in the old parser,
   including doubling of Unicode characters in certain cases
   (TIKA-683), exceptions on mal-formed RTF docs (TIKA-666), and
   missing text from some elements (header/footer, hyperlinks,
   footnotes, text inside pictures).

 * Handling of temporary files within Tika was much improved
   (TIKA-701, TIKA-654, TIKA-645, TIKA-153)

 * The Tika GUI got a facelift and some extra features (TIKA-635)

 * The apache-mime4j dependency of the email message parser was upgraded
   from version 0.6 to 0.7 (TIKA-716). The parser also now accepts a
   MimeConfig object in the ParseContext as configuration (TIKA-640).

Tika 0.10 relies on the following set of major dependencies (generated using
mvn dependency:tree from tika-parsers):

   org.apache.tika:tika-parsers:bundle:0.10
   +- org.apache.tika:tika-core:jar:0.10:compile
   +- edu.ucar:netcdf:jar:4.2-min:compile
   |  \- org.slf4j:slf4j-api:jar:1.5.6:compile
   +- org.apache.james:apache-mime4j-core:jar:0.7:compile
   +- org.apache.james:apache-mime4j-dom:jar:0.7:compile
   +- org.apache.commons:commons-compress:jar:1.1:compile
   +- commons-codec:commons-codec:jar:1.4:compile
   +- org.apache.pdfbox:pdfbox:jar:1.6.0:compile
   |  +- org.apache.pdfbox:fontbox:jar:1.6.0:compile
   |  +- org.apache.pdfbox:jempbox:jar:1.6.0:compile
   |  \- commons-logging:commons-logging:jar:1.1.1:compile
   +- org.bouncycastle:bcmail-jdk15:jar:1.45:compile
   +- org.bouncycastle:bcprov-jdk15:jar:1.45:compile
   +- org.apache.poi:poi:jar:3.8-beta4:compile
   +- org.apache.poi:poi-scratchpad:jar:3.8-beta4:compile
   +- org.apache.poi:poi-ooxml:jar:3.8-beta4:compile
   |  +- org.apache.poi:poi-ooxml-schemas:jar:3.8-beta4:compile
   |  |  \- org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile
   |  \- dom4j:dom4j:jar:1.6.1:compile
   +- org.apache.geronimo.specs:geronimo-stax-api_1.0_spec:jar:1.0.1:compile
   +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:compile
   +- asm:asm:jar:3.1:compile
   +- com.drewnoakes:metadata-extractor:jar:2.4.0-beta-1:compile
   +- de.l3s.boilerpipe:boilerpipe:jar:1.1.0:compile
   +- rome:rome:jar:0.9:compile
      \- jdom:jdom:jar:1.0:compile

The following people have contributed to Tika 0.10 by submitting or commenting
on the issues resolved in this release:

   Alain Viret
   Alex Ott
   Alexander Chow
   Andreas Kemkes
   Andrew Khoury
   Babak Farhang
   Benjamin Douglas
   Benson Margulies
   Chris A. Mattmann
   chris hudson
   Chris Lott
   Cristian Vat
   Curt Arnold
   Cynthia L Wong
   Dave Brosius
   David Benson
   Enrico Donelli
   Erik Hetzner
   Erna de Groot
   Gabriele Columbro
   Gavin
   Geoff Jarrad
   Gregory Kanevsky
   gunter rombauts
   Henning Gross
   Henri Bergius
   Ingo Renner
   Ingo Wiarda
   Izaak Alpert
   Jan H√∏ydahl
   Jens Wilmer
   Jeremy Anderson
   Joseph Vychtrle
   Joshua Turner
   Jukka Zitting
   Julien Nioche
   Karl Heinz Marbaise
   Ken Krugler
   Kostya Gribov
   Luciano Leggieri
   Mads Hansen
   Mark Butler
   Matt Sheppard
   Maxim Valyanskiy
   Michael McCandless
   Michael Pisula
   Murad Shahid
   Nick Burch
   Oleg Tikhonov
   Pablo Queixalos
   Paul Jakubik
   Raimund Merkert
   Rajiv Kumar
   Robert Trickey
   Sami Siren
   samraj
   Selva Ganesan
   Sjoerd Smeets
   Stephen Duncan Jr
   Tran Nam Quang
   Uwe Schindler
   Vitaliy Filippov

See http://s.apache.org/vR for more details on these contributions.


Release 0.9 - 02/13/2011
------------------------

The most notable changes in Tika 0.9 over previous releases are:

 * A critical bugfix preventing metadata from printing to the 
   command line when the underlying Parser didn't generate 
   XHTML output was fixed. (TIKA-596)
   
 * The 0.8 version of Tika included a NetCDF jar file that pulled 
   in tremendous amounts of redundant dependencies. This has 
   been addressed in Tika 0.9 by republishing a minimal NetCDF 
   jar and changing Tika to depend on that. (TIKA-556)
   
 * MIME detection for iWork, and OpenXML documents has been 
   improved. (TIKA-533, TIKA-562, TIKA-588)
   
 * A critical backwards incompatible bug in PDF parsing that 
   was introduced in Tika 0.8 has been fixed. (TIKA-548)
   
 * Support for forked parsing in separate processes was added. 
   (TIKA-416)
 
 * Tika's language identifier now supports the Lithuanian 
   language. (TIKA-582)

Tika 0.9 relies on the following set of major dependencies (generated using
mvn dependency:tree from tika-parsers):

   org.apache.tika:tika-parsers:bundle:0.9
   +- org.apache.tika:tika-core:jar:0.9:compile
   +- edu.ucar:netcdf:jar:4.2-min:compile
   |  \- org.slf4j:slf4j-api:jar:1.5.6:compile
   +- commons-httpclient:commons-httpclient:jar:3.1:compile
   |  +- commons-logging:commons-logging:jar:1.1.1:compile (version managed from 1.0.4)
   |  \- commons-codec:commons-codec:jar:1.2:compile
   +- org.apache.james:apache-mime4j:jar:0.6:compile
   +- org.apache.commons:commons-compress:jar:1.1:compile
   +- org.apache.pdfbox:pdfbox:jar:1.4.0:compile
   |  +- org.apache.pdfbox:fontbox:jar:1.4.0:compile
   |  \- org.apache.pdfbox:jempbox:jar:1.4.0:compile
   +- org.bouncycastle:bcmail-jdk15:jar:1.45:compile
   +- org.bouncycastle:bcprov-jdk15:jar:1.45:compile
   +- org.apache.poi:poi:jar:3.7:compile
   +- org.apache.poi:poi-scratchpad:jar:3.7:compile
   +- org.apache.poi:poi-ooxml:jar:3.7:compile
   |  +- org.apache.poi:poi-ooxml-schemas:jar:3.7:compile
   |  |  \- org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile
   |  \- dom4j:dom4j:jar:1.6.1:compile
   +- org.apache.geronimo.specs:geronimo-stax-api_1.0_spec:jar:1.0.1:compile
   +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2:compile
   +- asm:asm:jar:3.1:compile
   +- com.drewnoakes:metadata-extractor:jar:2.4.0-beta-1:compile
   +- de.l3s.boilerpipe:boilerpipe:jar:1.1.0:compile
   +- rome:rome:jar:0.9:compile
      \- jdom:jdom:jar:1.0:compile

The following people have contributed to Tika 0.9 by submitting or commenting
on the issues resolved in this release:

   Alex Skochin
   Alexander Chow
   Antoine L.
   Antoni Mylka
   Benjamin Douglas
   Benson Margulies
   Chris A. Mattmann
   Cristian Vat
   Cyriel Vringer
   David Benson
   Erik Hetzner
   Gabriel Miklos
   Geoff Jarrad
   Jukka Zitting
   Ken Krugler
   Kostya Gribov
   Leszek Piotrowicz
   Martijn van Groningen
   Maxim Valyanskiy
   Michel Tremblay
   Nick Burch
   paul
   Paul Pearcy
   Peter van Raamsdonk
   Piotr Bartosiewicz
   Reinhard Schwab
   Scott Severtson
   Shinsuke Sugaya
   Staffan Olsson
   Steve Kearns
   Tom Klonikowski
   ≈Ωygimantas Medelis

See http://s.apache.org/qi for more details on these contributions.


Release 0.8 - 11/07/2010
------------------------

The most notable changes in Tika 0.8 over previous releases are:

 * Language identification is now dynamically configurable, 
   managed via a config file loaded from the classpath. (TIKA-490)

 * Tika now supports parsing Feeds by wrapping the underlying
   Rome library. (TIKA-466)

 * A quick-start guide for Tika parsing was contributed. (TIKA-464)

 * An approach for plumbing through XHTML attributes was added. (TIKA-379)

 * Media type hierarchy information is now taken into account when
   selecting the best parser for a given input document. (TIKA-298)

 * Support for parsing common scientific data formats including netCDF
   and HDF4/5 was added (TIKA-400 and TIKA-399).

 * Unit tests for Windows have been fixed, allowing TestParsers
   to complete. (TIKA-398)

Tika 0.8 relies on the following set of major dependencies (generated using
mvn dependency:tree from tika-parsers):

   org.apache.tika:tika-parsers:bundle:0.8
   +- org.apache.tika:tika-core:jar:0.8:compile
   +- edu.ucar:netcdf:jar:4.2:compile
   |  \- org.slf4j:slf4j-api:jar:1.5.6:compile
   +- commons-httpclient:commons-httpclient:jar:3.1:compile
   |  +- commons-logging:commons-logging:jar:1.1.1:compile (version managed from 1.0.4)
   |  \- commons-codec:commons-codec:jar:1.2:compile
   +- org.apache.commons:commons-compress:jar:1.1:compile
   +- org.apache.pdfbox:pdfbox:jar:1.3.1:compile
   |  +- org.apache.pdfbox:fontbox:jar:1.3.1:compile
   |  \- org.apache.pdfbox:jempbox:jar:1.3.1:compile
   +- org.bouncycastle:bcmail-jdk15:jar:1.45:compile
   +- org.bouncycastle:bcprov-jdk15:jar:1.45:compile
   +- org.apache.poi:poi:jar:3.7:compile
   +- org.apache.poi:poi-scratchpad:jar:3.7:compile
   +- org.apache.poi:poi-ooxml:jar:3.7:compile
   |  +- org.apache.poi:poi-ooxml-schemas:jar:3.7:compile
   |  |  \- org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile
   |  \- dom4j:dom4j:jar:1.6.1:compile
   +- org.apache.geronimo.specs:geronimo-stax-api_1.0_spec:jar:1.0.1:compile
   +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2:compile
   +- asm:asm:jar:3.1:compile
   +- com.drewnoakes:metadata-extractor:jar:2.4.0-beta-1:compile
   +- de.l3s.boilerpipe:boilerpipe:jar:1.1.0:compile
   +- rome:rome:jar:0.9:compile
      \- jdom:jdom:jar:1.0:compile

The following people have contributed to Tika 0.8 by submitting or commenting
on the issues resolved in this release:

   ≈Åukasz Wiktor
   Adam Wilmer
   Alex Baranau
   Alex Ott
   Andr√© Ricardo
   Andrey Barhatov
   Andrey Sidorenko
   Antoni Mylka
   Arturo Beltran
   Attila Kir√°ly
   Brad Greenlee
   Bruno Dumon
   Chris A. Mattmann
   Chris Bamford
   Christophe Gourmelon
   Dave Meikle
   David Weekly
   Dmitry Kuzmenko
   Erik Hetzner
   Geoff Jarrad
   Gerd Bremer
   Grant Ingersoll
   Jan H√∏ydahl
   Jean-Philippe Ricard
   Jeremias Maerki
   Joao Garcia
   Jukka Zitting
   Julien Nioche
   Ken Krugler
   Liam O'Boyle
   Mads Hansen
   Marcel May
   Markus Goldbach
   Martijn van Groningen
   Maxim Valyanskiy
   Mike Hays
   Miroslav Pokorny
   Nick Burch
   Otis Gospodnetic
   Peter van Raamsdonk
   Peter Wolanin
   Peter_Lenahan@ibi.com
   Piotr Bartosiewicz
   Radek
   Rajiv Kumar
   Reinhard Schwab
   rick cameron
   Robert Muir
   Sanjeev Rao
   Simon Tyler
   Sjoerd Smeets
   Slavomir Varchula
   Staffan Olsson
   Tom De Leu
   Uwe Schindler
   Victor Kazakov

See http://s.apache.org/ab0 for more details on these contributions.


Release 0.7 - 3/31/2010
-----------------------

The most notable changes in Tika 0.7 over previous releases are:

 * MP3 file parsing was improved, including Channel and SampleRate 
   extraction and ID3v2 support (TIKA-368, TIKA-372). Further, audio
   parsing mime detection was also improved for the MIDI format. (TIKA-199)

 * Tika no longer relies on X11 for its RTF parsing functionality. (TIKA-386)

 * A Thread-safe bug in the AutoDetectParser was discovered and 
   addressed. (TIKA-374)

 * Upgrade to PDFBox 1.0.0. The new PDFBox version improves PDF parsing
   performance and fixes a number of text extraction issues. (TIKA-380)

The following people have contributed to Tika 0.7 by submitting or commenting
on the issues resolved in this release:

   Adam Rauch
   Benson Margulies
   Brett S.
   Chris A. Mattmann
   Daan de Wit
   Dave Meikle
   Durville
   Ingo Renner
   Jukka Zitting
   Ken Krugler
   Kenny Neal
   Markus Goldbach
   Maxim Valyanskiy
   Nick Burch
   Sami Siren
   Uwe Schindler

See http://tinyurl.com/yklopby for more details on these contributions.


Release 0.6 - 01/20/2010
------------------------

The most notable changes in Tika 0.6 over the previous release are:

 * Mime-type detection for HTML (and all types) has been improved, allowing malformed
   HTML files and those HTML files that require a bit more observed content
   before the type is properly detected, are now correctly identified by 
   the AutoDetectParser. (TIKA-327, TIKA-357, TIKA-366, TIKA-367)

 * Tika now has an additional OSGi bundle packaging that includes all the
   required parser libraries. This bundle package makes it easy to use all
   Tika features in an OSGi environment. (TIKA-340, TIKA-342)

 * The Apache POI dependency used for parsing Microsoft Office file formats
   has been upgraded to version 3.6. The most visible improvement in this
   version is the notably reduced ooxml jar file size. The tika-app jar size
   is now down to 15MB from the 25MB in Tika 0.5. (TIKA-353)

 * Handling of character encoding information in input metadata and HTML
   <meta> tags has been improved. When no applicable encoding information is
   available, the encoding is detected by looking at the input data.
   (TIKA-332, TIKA-334, TIKA-335, TIKA-341) 

 * Some document types like Excel spreadsheets contain content like
   numbers or formulas whose exact text format depends on the current locale.
   So far Tika has used the platform default locale in such cases, but
   clients can now explicitly specify the locale by passing a Locale instance
   in the parse context. (TIKA-125)

 * The default text output encoding of the tika-app jar is now UTF-8
   when running on Mac OS X. This is because the default encoding used
   by Java is not compatible with the console application in Mac OS X.
   On all other platforms the text output from tika-app still uses
   the platform default encoding. (TIKA-324)

 * A flash video (video/x-flv) parser has been added. (TIKA-328)
 
 * The handling of Number and Date cell formatting within the Microsoft Excel
   documents has been added. This include currencies, percentages and
   scientific formats. (TIKA-103)
   
The following people have contributed to Tika 0.6 by submitting or commenting
on the issues resolved in this release:

   Andrzej Bialecki
   Bertrand Delacretaz
   Chris A. Mattmann
   Dave Meikle
   Erik Hetzner
   Felix Meschberger
   Jukka Zitting
   Julien Nioche
   Ken Krugler
   Luke Nezda
   Maxim Valyanskiy
   Niall Pemberton
   Peter Wolanin
   Piotr B.
   Sami Siren
   Yuan-Fang Li

See http://tinyurl.com/yc3dk67 for more details on these contributions.


Release 0.5 - 11/14/2009
------------------------

The most notable changes in Tika 0.5 over the previous release are:

 * Improved RDF/OWL mime detection using both MIME magic as well as
   pattern matching (TIKA-309)

 * An org.apache.tika.Tika facade class has been added to simplify common
   text extraction and type detection use cases. (TIKA-269)

 * A new parse context argument was added to the Parser.parse() method.
   This context map can be used to pass things like a delegate parser or
   other settings to the parsing process. The previous parse() method
   signature has been deprecated and will be removed in Tika 1.0. (TIKA-275)

 * A simple ngram-based language detection mechanism has been added along
   with predefined language profiles for 18 languages. (TIKA-209)

 * The media type registry in Tika was synchronized with the MIME type
   configuration in the Apache HTTP Server. Tika now knows about 1274
   different media types and can detect 672 of those using 927 file
   extension and 280 magic byte patterns. (TIKA-285)

 * Tika now uses the Apache PDFBox version 0.8.0-incubating for parsing PDF
   documents. This version is notably better than the 0.7.3 release used
   earlier. (TIKA-158)

The following people have contributed to Tika 0.5 by submitting or commenting
on the issues resolved in this release:

   Alex Baranov
   Bart Hanssens
   Benson Margulies
   Chris A. Mattmann
   Daan de Wit
   Erik Hetzner
   Frank Hellwig
   Jeff Cadow
   Joachim Zittmayr
   Jukka Zitting
   Julien Nioche
   Ken Krugler
   Maxim Valyanskiy
   MRIT64
   Paul Borgermans
   Piotr B.
   Robert Newson
   Sascha Szott
   Ted Dunning
   Thilo Goetz
   Uwe Schindler
   Yuan-Fang Li

See http://tinyurl.com/yl9prwp for more details on these contributions.


Release 0.4 - 07/14/2009
------------------------

The most notable changes in Tika 0.4 over the previous release are:

  * Tika has been split to three different components for increased
    modularity. The tika-core component contains the key interfaces and
    core functionality of Tika, tika-parsers contains all the adapters
    to external parser libraries, and tika-app bundles everything together
    in a single executable jar file. (TIKA-219)

  * All the three Tika components are packaged as OSGi bundles. (TIKA-228)

  * Tika now uses the new Commons Compress library for improved support
    of compression and packaging formats like gzip, bzip2, tar, cpio,
    ar, zip and jar. (TIKA-204)

  * The memory use of parsing Excel sheets with lots of numbers
    has been considerably reduced. (TIKA-211)

  * The AutoDetectParser now has basic protection against "zip bomb"
    attacks, where a specially crafted input document can expand to
    practically infinite amount of output text. (TIKA-216)

  * The ParsingReader class can now use a thread pool or a more complex
    execution model (java.util.concurrent.Executor) for the background
    parsing task. (TIKA-215)

  * Automatic type detection of text- and XML-based documents has been
    improved. (TIKA-225)

  * Charset detection functionality from the ICU4J library was inlined
    in Tika to avoid the dependency to the large ICU4J jar. (TIKA-229)

  * Composite parsers like the AutoDetectParser now make sure that any
    RuntimeExceptions, IOExceptions or SAXExceptions unrelated to the given
    document stream or content handler are converted to TikaExceptions
    before being passed to the client. (TIKA-198, TIKA-237)
    
The following people have contributed to Tika 0.4 by submitting or commenting
on the issues resolved in this release:

   Chris A. Mattmann
   Daan de Wit
   Dave Meikle
   David Weekly
   Jeremias Maerki
   Jonathan Koren
   Jukka Zitting
   Karl Heinz Marbaise
   Keith R. Bennett
   Maxim Valyanskiy
   Niall Pemberton
   Robert Burrell Donkin
   Sami Siren
   Siddharth Gargate
   Uwe Schindler

See http://tinyurl.com/mgv9o3 for more details on these contributions.


Release 0.3 - 03/09/2009
------------------------

The most notable changes in Tika 0.3 over the previous release are:

 * Tika now supports mime type glob patterns specified using
   standard JDK 1.4 (and beyond) syntax via the isregex attribute
   on the glob tag. See:

     http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

   for more information. (TIKA-194)

 * Tika now supports the Office Open XML format used by
   Microsoft Office 2007. (TIKA-152)

 * All the metadata keys for Microsoft Office document properties are now
   included as constants in the MSOffice interface. Clients should use
   these constants instead of the raw string values to refer to specific
   metadata items. (TIKA-186)

 * Automatic detection of document types in Tika has been improved.
   For example Tika can now detect plain text just by looking at the first
   few bytes of the document. (TIKA-154)

 * Tika now disables the loading of all external entities in XML files
   that it parses as input documents. This improves security and avoids
   problems with potentially broken references. (TIKA-185)

 * Tika now replaces all invalid XML characters in the extracted text
   content with spaces. This prevents problems when output from Tika
   is processed with XML tools. (TIKA-180)

 * The Tika CLI now correctly flushes its buffers when invoked with the
   --text argument. This prevents the end of the text output from being
   lost. (TIKA-179)

 * Embedded text in MIDI files is now extracted. For example many karaoke
   files contain song lyrics embedded as MIDI text.

 * The text content of Microsoft Outlook message files no longer appears as
   multiple copies in the extracted text. (TIKA-197)

 * The ParsingReader class now makes most document metadata available
   already before any of the extracted text is consumed. This makes it
   easier for example to construct Lucene Document instances that contain
   both extracted text and metadata. (TIKA-203)

See http://tinyurl.com/tika-0-3-changes for a list of all changes in Tika 0.3.

The following people have contributed to Tika 0.3 by submitting or commenting
on the issues resolved in this release:

   Andrzej Rusin
   Chris A. Mattmann
   Dave Meikle
   Georger Ara√∫jo
   Guillermo Arribas
   Jonathan Koren
   Jukka Zitting
   Karl Heinz Marbaise
   Kumar Raja Jana
   Paul Borgermans
   Peter Becker
   S√©bastien Michel
   Uwe Schindler

See http://tinyurl.com/tika-0-3-contributions for more details on
these contributions.


Release 0.2 - 12/04/2008
------------------------

1.  TIKA-109 - WordParser fails on some Word files (Dave Meikle)

2.  TIKA-105 - Excel parser implementation based on POI's Event API
               (Niall Pemberton)

3.  TIKA-116 - Streaming parser for OpenDocument files (Jukka Zitting)

4.  TIKA-117 - Drop JDOM and Jaxen dependencies (Jukka Zitting)

5.  TIKA-115 - Tika package with all the dependencies (Jukka Zitting)

6.  TIKA-97  - Tika GUI (Jukka Zitting)

7.  TIKA-96  - Tika CLI (Jukka Zitting)

8.  TIKA-112 - Use Commons IO 1.4 (Jukka Zitting)

9.  TIKA-127 - Add support for Visio files (Jukka Zitting)

10. TIKA-129 - node() support for the streaming XPath utility (Jukka Zitting)

11. TIKA-130 - self-or-descendant axis does not match self in streaming XPath
               (Jukka Zitting)

12. TIKA-131 - Lazy XHTML prefix generation (Jukka Zitting)

13. TIKA-128 - HTML parser should produce XHTML SAX events (Jukka Zitting)

14. TIKA-133 - TeeContentHandler constructor should use varargs (Jukka Zitting)

15. TIKA-132 - Refactor Excel extractor to parse per sheet and add
               hyperlink support (Niall Pemberton)

16. TIKA-134 - mvn package does not produce packages for bin/src
               (Karl Heinz Marbaise)

17. TIKA-138 - Ignore HTML style and script content (Jukka Zitting)

18. TIKA-113 - Metadata (such as title) should not be part of content
               (Jukka Zitting)

19. TIKA-139 - Add a composite parser (Jukka Zitting)

20. TIKA-142 - Include application/xhtml+xml as valid mime type for XMLParser
               (mattmann)

21. TIKA-143 - Add ParsingReader (Jukka Zitting)

22. TIKA-144 - Upgrade nekohtml dependency (Jukka Zitting)

23. TIKA-145 - Separate NOTICEs and LICENSEs for binary and source packages
               (Jukka Zitting)

24. TIKA-146 - Upgrade to POI 3.1 (Jukka Zitting)

25. TIKA-99  - Support external parser programs (Jukka Zitting)

26. TIKA-149 - Parser for Zip files (Dave Meikle & Jukka Zitting)

27. TIKA-150 - Parser for tar files (Jukka Zitting)

28. TIKA-151 - Stream compression support (Jukka Zitting)

29. TIKA-156 - Some MIME magic patterns are ignored by MimeTypes
               (Jukka Zitting)

30. TIKA-155 - Java class file parser (Dave Brosius & Jukka Zitting)

31. TIKA-108 - New Tika logos (Yongqian Li & Jukka Zitting)

32. TIKA-120 - Add support for retrieving ID3 tags from MP3 files
               (Dave Meikle & Jukka Zitting)

33. TIKA-54  - Outlook msg parser
               (Rida Benjelloun, Dave Meikle & Jukka Zitting)

34. TIKA-114 - PDFParser : Getting content of the document using
               "writer.ToString ()" , some words are stuck together
               (Dave Meikle)

35. TIKA-161 - Enable PMD reports (Jukka Zitting)

36. TIKA-159 - Add support for parsing basic audio types: wav, aiff, au, midi
               (Sami Siren)

37. TIKA-140 - HTML parser unable to extract text
               (Julien Nioche & Jukka Zitting)

38. TIKA-163 - GUI does not support drag and drop in Gnome or KDE (Dave Meikle)

39. TIKA-166 - Update HTMLParser to parse contents of meta tags (Dave Meikle)

40. TIKA-164 - Upgrade of the nekohtml dependency to 1.9.9 (Jukka Zitting)

41. TIKA-165 - Upgrade of the ICU4J dependency to version 3.8 (Jukka Zitting)

42. TIKA-172 - New Open Document Parser that emits structured XHTML content
               (Uwe Schindler & Jukka Zitting)

43. TIKA-175 - Retrotranslate Tika for use in Java 1.4 environments (Jukka Zitting)

44. TIKA-177 - Improvements to build instruction in README (Chris Hostetter & Jukka Zitting)

45. TIKA-171 - New ContentHandler for plain text output that has no problem with
               missing white space after XHTML block tags (Uwe Schindler & Jukka Zitting)


Release 0.1-incubating - 12/27/2007
-----------------------------------

1. TIKA-5 - Port Metadata Framework from Nutch (mattmann)

2. TIKA-11 - Consolidate test classes into a src/test/java directory tree (mattmann)

3. TIKA-15 - Utils.print does not print a Content having no value (jukka)

4. TIKA-19 - org.apache.tika.TestParsers fails (bdelacretaz)

5. TIKA-16 - Issues with data files used for testing by TestParsers (bdelacretaz)

6. TIKA-14 - MimeTypeUtils.getMimeType() returns the default mime type for
             .odt (Open Office) file (bdelacretaz)

7. TIKA-12 - Add URL capability to MimeTypesUtils (jukka)

8. TIKA-13 - Fix obsolete package names in config.xml (siren)

9. TIKA-10 - Remove MimeInfoException catch clauses and import from TestParsers (siren)

10. TIKA-8 - Replaced the jmimeinfo dependency with a trivial mime type detector (jukka)

11. TIKA-7 - Added the Lius Lite code. Added missing dependencies to POM (jukka)

12. TIKA-18 - "Office" interface should be renamed "MSOffice" (mattmann)

13. TIKA-23 - Decouple Parser from ParserConfig (jukka)

14. TIKA-6 - Port Nutch (or better) MimeType detection system into Tika (J. Charron & mattmann)

15. TIKA-25 - Removed hardcoded reference to C:\oo.xml in OpenOfficeParser (K. Bennett & jukka)

16. TIKA-17 - Need to support URL's for input resources. (K. Bennett & mattmann)

17. TIKA-22 - Remove @author tags from the java source (mattmann)

18. TIKA-21 - Simplified configuration code (jukka)

19. TIKA-17 - Rename all "Lius" classes to be "Tika" classes (jukka)

20. TIKA-30 - Added utility constructors to TikaConfig (K. Bennett & jukka)

21. TIKA-28 - Rename config.xml to tika-config.xml or similar (mattmann)

22. TIKA-26 - Use Map<String, Content> instead of List<Content> (jukka)

23. TIKA-31 - protected Parser.parse(InputStream stream,
              Iterable<Content> contents) (jukka & K. Bennett)

24. TIKA-36 - A convenience method for getting a document's content's text
              would be helpful (K. Bennett & mattmann)

25. TIKA-33 - Stateless parsers (jukka)

26. TIKA-38 - TXTParser adds a space to the content it reads from a file (K. Bennett & ridabenjelloun)

27. TIKA-35 - Extract MsOffice properties, use RereadableInputStream devloped by K. Bennett (ridabenjelloun & K. Bennett)

28. TIKA-39 - Excel parsing improvements (siren & ridabenjelloun)

29. TIKA-34 - Provide a method that will return a default configuration
              (TikaConfig) (K. Bennett & mattmann)

30. TIKA-42 - Content class needs (String, String, String) constructor (K. Bennett)

31. TIKA-43 - Parser interface (jukka)

32. TIKA-47 - Remove TikaLogger (jukka)

33. TIKA-46 - Use Metadata in Parser (jukka & mattmann)

34. TIKA-48 - Merge MS Extractors and Parsers (jukka)

35. TIKA-45 - RereadableInputStream needs to be able to read to
              the end of the original stream on first rewind. (K. Bennett)

36. TIKA-41 - Resource files occur twice in jar file. (jukka)

37. TIKA-49 - Some files have old-style license headers, fixed (Robert Burrell Donkin & bdelacretaz)

38. TIKA-51 - Leftover temp files after running Tika tests, fixed (bdelacretaz)

39. TIKA-40 - Tika needs to support diverse character encodings (jukka)

40. TIKA-55 - ParseUtils.getParser() method variants should have consistent parameter orders
              (K. Bennett)

41. TIKA-52 - RereadableInputStream needs to support not closing the input stream it wraps.
              (K. Bennett via bdelacretaz)

42. TIKA-53 - XHTML SAX events from parsers (jukka)

43. TIKA-57 - Rename org.apache.tika.ms to org.apache.tika.parser.ms (jukka)

44. TIKA-62 - Use TikaConfig.getDefaultConfig() instead of a hardcoded
              config path in TestParsers (jukka)

45. TIKA-58 - Replace jtidy html parser with nekohtml based parser (siren)

46. TIKA-60 - Rename Microsoft parser classes (jukka)

47. TIKA-63 - Avoid multiple passes over the input stream in Microsoft parsers
              (jukka)

48. TIKA-66 - Use Java 5 features in org.apache.tika.mime (jukka)

49. TIKA-56 - Mime type detection fails with upper case file extensions such as "PDF"
             (mattmann)

50. TIKA-65 - Add encode detection support for HTML parser (siren)

51. TIKA-68 - Add dummy parser classes to be used as sentinels (jukka)

52. TIKA-67 - Add an auto-detecting Parser implementation (jukka)

53. TIKA-70 - Better MIME information for the Open Document formats (jukka)

54. TIKA-71 - Remove ParserConfig and ParserFactory (jukka)

55. TIKA-83 - Create a org.apache.tika.sax package for SAX utilities (jukka)

56. TIKA-84 - Add MimeTypes.getMimeType(InputStream) (jukka)

57. TIKA-85 - Add glob patterns from the ASF svn:eol-style documentation (jukka)

58. TIKA-100 - Structured PDF parsing (jukka)

59. TIKA-101 - Improve site and build (mattmann)

60. TIKA-102 - Parser implementations loading a large amount of content
               into a single String could be problematic (Niall Pemberton)

61. TIKA-107 - Remove use of assertions for argument checking (Niall Pemberton)

62. TIKA-104 - Add utility methods to throw IOException with the caused
               intialized (jukka & Niall Pemberton)

63. TIKA-106 - Remove dependency on Jakarta ORO - use JDK 1.4 Regex
               (Niall Pemberton)

64. TIKA-111 - Missing license headers (jukka)

65. TIKA-112 - XMLParser improvement (ridabenjelloun)
