<?xml version="1.0"?>
<!--
     Licensed to the Apache Software Foundation (ASF) under one or more
     contributor license agreements.  See the NOTICE file distributed with
     this work for additional information regarding copyright ownership.
     The ASF licenses this file to You under the Apache License, Version 2.0
     (the "License"); you may not use this file except in compliance with
     the License.  You may obtain a copy of the License at

          https://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->

<!--
This file is also used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the
release process easy :-).

2.  Do a JIRA search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
git commits. TBA how to use this with git.

To generate the release notes from this file:

mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

then tweak the formatting if necessary
and commit

The <action> type attribute can be add,update,fix,remove.
-->

<document xmlns="http://maven.apache.org/changes/2.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/changes/2.0.0 https://maven.apache.org/xsd/changes-2.0.0.xsd">
  <properties>
    <title>Apache Commons Text Changes</title>
  </properties>
  <body>
  <release version="1.15.0" date="2025-12-04" description="Release 1.15.0. This is a feature and maintenance release. Java 8 or later is required.">
    <!-- FIX -->
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix exception message typo in XmlStringLookup.XmlStringLookup(Map, Path...).</action>
    <action type="fix" dev="ggregory" due-to="Pierre Post, Sumit Bera, Alex Herbert, Gary Gregory" issue="TEXT-236">Inserting at the end of a TextStringBuilder throws a StringIndexOutOfBoundsException.</action>
    <action type="fix" dev="ggregory" due-to="Michael Hausegger">Fix TextStringBuilderTest.testAppendToCharBuffer() to use proper argument type #724.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix Apache RAT plugin console warnings.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix site XML to use version 2.0.0 XML schema.</action>
    <action type="fix" dev="ggregory" due-to="Michael Hausegger">Removed unreachable threshold verification code in src/main/java/org/apache/commons/text/similarity #730.</action>
    <action type="fix" dev="ggregory" due-to="김민재 (minjas0507Z), Gary Gregory, Piotr Karwasz">Enable secure processing for the XML parser in XmlStringLookup in case the underlying JAXP implementation doesn't #729.</action>
    <!-- ADD -->
    <action type="add" dev="ggregory" due-to="Piotr P. Karwasz, Gary Gregory">Add experimental CycloneDX VEX file #683.</action>
    <action type="add" dev="ggregory" due-to="LorgeN, Gary Gregory" issue="TEXT-235">Add Damerau-Levenshtein distance #687.</action>
    <action type="add" dev="ggregory" due-to="Michael Hausegger, Gary Gregory">Add unit tests to increase coverage #719.</action>
    <action type="add" dev="ggregory" due-to="Michael Hausegger, Gary Gregory">Add new test for CharSequenceTranslator#with() #725.</action>
    <action type="add" dev="ggregory" due-to="Michael Hausegger">Add tests and assertions to org.apache.commons.text.similarity to get to 100% code coverage #727, #728.</action>
    <!-- UPDATE -->
    <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 85 to 93 #704, #723, #726.</action>
    <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.bytebuddy.version from 1.17.6 to 1.18.2 #696, #722.</action>
    <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump graalvm.version from 24.2.2 to 25.0.1 #703, #716.</action>
    <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-lang3 from 3.18.0 to 3.20.0.</action>
    <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-io:commons-io from 2.20.0 to 2.21.0.</action>
  </release>
  <release version="1.14.0" date="2025-07-20" description="Release 1.14.0. Requires Java 8 or above.">
    <!-- FIX -->
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD UnnecessaryFullyQualifiedName in StringLookupFactory.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD UnnecessaryFullyQualifiedName in DefaultStringLookupsHolder.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD UnnecessaryFullyQualifiedName in PropertiesStringLookup.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD UnnecessaryFullyQualifiedName in JavaPlatformStringLookup.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD UnnecessaryFullyQualifiedName in StringSubstitutor.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD UnnecessaryFullyQualifiedName in StrSubstitutor.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD UnnecessaryFullyQualifiedName in AlphabetConverter.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD AvoidBranchingStatementAsLastInLoop in TextStringBuilder.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix PMD AvoidBranchingStatementAsLastInLoop in StrBuilder.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">org.apache.commons.text.translate.LookupTranslator.LookupTranslator(Map CharSequence>) now throws NullPointerException instead of java.security.InvalidParameterException.</action>
    <!-- ADD -->
    <action type="add" dev="ggregory" due-to="Gary Gregory">Interface StringLookup now extends UnaryOperator&lt;String&gt;.</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Interface TextRandomProvider extends IntUnaryOperator.</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add RandomStringGenerator.Builder.usingRandom(IntUnaryOperator).</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add PMD check to default Maven goal.</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.RandomStringGenerator.Builder.setAccumulate(boolean).</action>
    <!-- UPDATE -->
    <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump org.apache.commons:commons-parent from 81 to 85 #668.</action>
    <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-io:commons-io from 2.18.0 to 2.20.0.</action>
    <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump graalvm.version from 24.2.0 to 24.2.2 #665, #681.</action>
    <action type="update" dev="ggregory" due-to="Dependabot">Bump commons.bytebuddy.version from 1.17.5 to 1.17.6 (#677).</action>
    <action type="update" dev="ggregory" due-to="Dependabot">Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.18.0 #680.</action>
  </release>
  <release version="1.13.1" date="2025-04-07" description="Release 1.13.1. Requires Java 8 or above.">
    <!-- FIX -->
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Remove -nouses directive from maven-bundle-plugin. OSGi package imports now state 'uses' definitions for package imports, this doesn't affect JPMS (from org.apache.commons:commons-parent:80).</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate EntityArrays.EntityArrays().</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">StringLookupFactory.DefaultStringLookupsHolder.createDefaultStringLookups() maps DefaultStringLookup.LOCAL_HOST twice instead of once for LOCAL_HOST and LOOPBACK_ADDRESS.</action>
    <!-- ADD -->
    <!-- UPDATE -->
    <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 79 to 81.</action>
    <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump commons.bytebuddy.version from 1.16.1 to 1.17.5 #643, #659, #660.</action>
    <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump graalvm.version from 24.1.2 to 24.2.0 #653.</action>
  </release>
  <release version="1.13.0" date="2024-12-10" description="Release 1.13.0. Requires Java 8 or above.">
    <!-- ADD -->
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add StringLookupFactory.loopbackAddressStringLookup().</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add StringLookupFactory.KEY_LOOPBACK_ADDRESS.</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add DefaultStringLookup.LOOPBACK_ADDRESS.</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add richer inputs in package org.apache.commons.text.similarity with SimilarityInput.</action>    
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add HammingDistance.apply(SimilarityInput, SimilarityInput).</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add JaccardDistance.apply(SimilarityInput, SimilarityInput).</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add JaccardSimilarity.apply(SimilarityInput, SimilarityInput).</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add JaroWinklerDistance.apply(SimilarityInput, SimilarityInput).</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add JaroWinklerSimilarity.apply(SimilarityInput, SimilarityInput).</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add LevenshteinDetailedDistance.apply(SimilarityInput, SimilarityInput).</action>
    <action type="add" dev="ggregory" due-to="Gary Gregory">Add LevenshteinDistance.apply(SimilarityInput, SimilarityInput).</action>
    <!-- FIX -->
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix build on Java 22.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix build on Java 23-ea.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Make package-private constructor private: StrLookup.MapStrLookup.MapStrLookup(Map).</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Make package-private constructor private: StrLookup.SystemPropertiesStrLookup.SystemPropertiesStrLookup().</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Make package-private class private and final: MapStrLookup.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Make package-private class private: StrMatcher.CharMatcher.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Make package-private class private: StrMatcher.CharSetMatcher.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Make package-private class private: StrMatcher.NoMatcher.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Make package-private class private: StrMatcher.StringMatcher.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Make package-private class private: StrMatcher.TrimMatcher.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Make package-private class private and final: IntersectionSimilarity.BagCount.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Make package-private class private and final: IntersectionSimilarity.TinyCount.</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate LevenshteinDistance.LevenshteinDistance() in favor of LevenshteinDistance.getDefaultInstance().</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate LevenshteinDetailedDistance.LevenshteinDetailedDistance() in favor of LevenshteinDetailedDistance.getDefaultInstance().</action>
    <action type="fix" dev="ggregory" due-to="Gary Gregory" issue="TEXT-234">Improve StrBuilder documentation for new line text.</action>
    <action type="fix" dev="ggregory" due-to="TobiasKiecker" issue="TEXT-234">Improve TextStringBuilder documentation for new line text #547.</action>
    <action type="fix" dev="ggregory" due-to="belpk" issue="TEXT-233">Required OSGi Import-Package version numbers in MANIFEST.MF #627.</action>
    <!-- UPDATE -->
    <action type="update" dev="ggregory" due-to="Dependabot">Bump org.apache.commons:commons-parent from 69 to 78 #542, #557, #571, #581, #584, #593, #600, #603, #614.</action>
    <action type="udpate" dev="ggregory" due-to="Gary Gregory">Bump tests on Java >= 22 org.graalvm.*:* from 24.0.0 to 24.1.1 #592, #610.</action>
    <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.bytebuddy.version from 1.14.13 to 1.16.1 #538, #548, #553, #565, #579, #582, #585, #596, #597, #604, #612, #620, #623, #625, #640.</action>
    <action type="update" dev="ggregory" due-to="Gary Gregory">Bump SpotBugs from 4.8.3 to 4.8.5.</action>
    <action type="update" dev="ggregory" due-to="Dependabot">Bump org.assertj:assertj-core from 3.25.3 to 3.26.3 #554, #566.</action>
    <action type="update" dev="ggregory" due-to="Dependabot">Bump org.codehaus.mojo:taglist-maven-plugin from 3.0.0 to 3.2.1 #564, #611.</action>
    <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump org.apache.commons:commons-rng-simple from 1.5 to 1.6 #568.</action>
    <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump org.apache.commons:commons-lang3 from 3.14.0 to 3.17.0 #569, #575, #586.</action>
    <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump commons-io:commons-io from 2.16.1 to 2.18.0 #594, #628.</action>
  </release>
  <release version="1.12.0" date="2024-04-13" description="Release 1.12.0. Requires Java 8 or above.">
    <!-- ADD -->
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add StringLookupFactory.fileStringLookup(Path...) and deprecated fileStringLookup().</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add StringLookupFactory.propertiesStringLookup(Path...) and deprecated propertiesStringLookup().</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add StringLookupFactory.xmlStringLookup(Map, Path...) and deprecated xmlStringLookup() and xmlStringLookup(Map).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add StringLookupFactory.builder() for fencing Path resolution of the file, properties and XML lookups.</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add DoubleFormat.Builder.get() as Builder now implements Supplier.</action>
    <!-- FIX -->
    <action issue="TEXT-232" type="fix" dev="ggregory" due-to="Arnout Engelen, Gary Gregory">WordUtils.containsAllWords​() may throw PatternSyntaxException.</action>
    <action issue="TEXT-175" type="fix" dev="ggregory" due-to="David Lavati, seanfabs, Gary Gregory, Bruno P. Kinoshita">Fix regression for determining whitespace in WordUtils #519.</action>
    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate Builder in favor of Supplier.</action>
    <!-- UPDATE -->
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-lang3 from 3.13.0 to 3.14.0.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot">Bump commons.bytebuddy.version from 1.14.9 to 1.14.13 #476, #482, #505, #521.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot">Bump org.codehaus.mojo:exec-maven-plugin from 3.1.0 to 3.2.0 #474, #508.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-io from 2.15.0 to 2.16.1 #522, #527.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-parent from 64 to 69 #524.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot">Bump org.assertj:assertj-core from 3.24.2 to 3.25.3.</action>
  </release>
  <release version="1.11.0" date="2023-10-24" description="Release 1.11.0. Requires Java 8 or above.">
    <!-- FIX -->
    <action issue="TEXT-219" type="fix" dev="aherbert" due-to="Jaap Sperling">Fix StringTokenizer.getTokenList to return an independent modifiable list</action>
    <action                  type="fix" dev="aherbert" due-to="James Nord">Fix Javadoc for StringEscapeUtils.escapeHtml4 #382</action>
    <action                  type="fix" dev="ggregory" due-to="Pavel Belousov, Gary Gregory">TextStringBuidler#hashCode() allocates a String on each call #387.</action>
    <action issue="TEXT-221" type="fix" dev="aherbert" due-to="Remco Riswick">Fix Bundle-SymbolicName to use the package name org.apache.commons.text</action>
    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for RegexTokenizer.</action>
    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for CosineSimilarity.</action>
    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for LongestCommonSubsequence.</action>
    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for JaroWinklerSimilarity.</action>
    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for JaccardSimilarity.</action>
    <action                  type="fix" dev="ggregory" due-to="step-security-bot, Gary Gregory">[StepSecurity] ci: Harden GitHub Actions #428.</action>
    <action                  type="fix" dev="ggregory" due-to="Dimitrios Efthymiou">Improve AlphabetConverter Javadoc #429.</action>
    <action                  type="fix" dev="ggregory" due-to="Dimitrios Efthymiou">Fix exception message in IntersectionResult to make set-theoretic sense #438.</action>
    <action                  type="fix" dev="ggregory" due-to="Dimitrios Efthymiou, Gary Gregory">Add null-check in RandomStringGenerator#Builder#selectFrom() to avoid NullPointerException #434.</action>
    <action                  type="fix" dev="ggregory" due-to="Dimitrios Efthymiou, Gary Gregory">Add null-check in RandomStringGenerator#Builder#withinRange() to avoid NullPointerException.</action>
    <action issue="TEXT-228" type="fix" dev="ggregory" due-to="Alex Herbert, Gary Gregory">Fix TextStringBuilder to over-allocate when ensuring capacity #452.</action>
    <action                  type="fix" dev="ggregory" due-to="Elliotte Rusty Harold, Gary Gregory">Constructor for ResourceBundleStringLookup should be private instead of package-private.</action>
    <action                  type="fix" dev="ggregory" due-to="Elliotte Rusty Harold, Gary Gregory">Constructor for UrlDecoderStringLookup should be private instead of package-private.</action>
    <action                  type="fix" dev="ggregory" due-to="Elliotte Rusty Harold, Gary Gregory">Constructor for UrlEncoderStringLookup should be private instead of package-private.</action>
    <action issue="TEXT-230" type="fix" dev="ggregory" due-to="Michael Osipov, Gary Gregory">Javadoc of org.apache.commons.text.lookup.DefaultStringLookup.XML is incorrect.</action>
    <action                  type="fix" dev="ggregory" due-to="Alex Herbert">Update DoubleFormat to state it is based on Double.toString. #467.</action>
    <!-- ADD -->
    <action issue="TEXT-224" type="add" dev="ggregory" due-to="PJ Fanning, Gary Gregory">Set SecureProcessing feature in XmlStringLookup by default.</action>
    <action issue="TEXT-224" type="add" dev="ggregory" due-to="Gary Gregory">Add StringLookupFactory.xmlStringLookup(Map&lt;String, Boolean&gt;...).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add @FunctionalInterface to FormatFactory.</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add RandomStringGenerator.builder().</action>
    <action issue="TEXT-229" type="add" dev="ggregory" due-to="Michael Osipov, Elliotte Rusty Harold, Gary Gregory">Add XmlEncoderStringLookup/XmlDecoderStringLookup #449.</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add StringSubstitutor.toString().</action>
    <!-- UPDATE -->
    <action                  type="update" dev="ggregory" due-to="Dependabot">Bump actions/cache.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot">Bump actions/setup-java.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot">Bump actions/checkout.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump pmd from 6.49.0 to 6.52.0 #364.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot">Bump commons-rng-simple from 1.4 to 1.5 #370.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump spotbugs-maven-plugin from 4.7.2.0 to 4.7.3.6 #371, #385.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot">Bump spotbugs from 4.7.2 to 4.7.3 #373.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump mockito-inline from 4.8.0 to 4.11.0 #380, #389, #396, #400.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump jmh.version from 1.35 to 1.37 #388.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-parent from 54 to 64 #392, #401.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump assertj-core from 3.23.1 to 3.24.2 #405, #410.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump maven-checkstyle-plugin from 3.2.0 to 3.2.1 #407.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-io from 2.11.0 to 2.15.0.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-lang3 from 3.12.0 to 3.13.0.</action>
  </release>
  <release version="1.10.0" date="2022-09-24" description="Release 1.10.0. Requires Java 8 or above.">
    <!-- FIX -->
    <action issue="TEXT-189" type="fix" dev="kinow" due-to="Gongpu Zhu">Fix CaseUtils when the input string contains only delimiters</action>
    <action issue="TEXT-187" type="fix" dev="kinow">Add GraalVM test dependencies to fix test failures with Java 15.</action>
    <action issue="TEXT-158" type="fix" dev="kinow">Incorrect values for Jaccard similarity with empty strings.</action>
    <action issue="TEXT-186" type="fix" dev="ggregory" due-to="Gautam Korlam, Gary Gregory">StringSubstitutor map constructor throws NPE on 1.9 with null map.</action>
    <action issue="TEXT-191" type="fix" dev="kinow" due-to="Bradley David Rumball">JaroWinklerDistance returns the same values as JaroWinklerSimilarity.</action>
    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Correct Javadoc in FileStringLookup.</action>
    <action                  type="fix" dev="ggregory" due-to="Arturo Bernal">Minor Improvements #192, #196.</action>
    <action issue="TEXT-194" type="fix" dev="kinow" due-to="Arturo Bernal">Use StringUtils.INDEX_NOT_FOUND constant.</action>
    <action issue="TEXT-199" type="fix" dev="kinow" due-to="Arturo Bernal">Remove redundant local variable.</action>
    <action issue="TEXT-198" type="fix" dev="kinow" due-to="Arturo Bernal">Replace lambda with method reference.</action>
    <action issue="TEXT-200" type="fix" dev="kinow" due-to="Arturo Bernal">Simplify statements.</action>
    <action issue="TEXT-197" type="fix" dev="kinow" due-to="Arturo Bernal">Replace statement lambda with expression lambda.</action>
    <action issue="TEXT-204" type="fix" dev="kinow" due-to="Arturo Bernal">Use static class inner class in tests.</action>
    <action issue="TEXT-201" type="fix" dev="kinow" due-to="Arturo Bernal">Simplify assertion.</action>
    <action issue="TEXT-202" type="fix" dev="kinow" due-to="Arturo Bernal">Extract duplicate code.</action>
    <action issue="TEXT-205" type="fix" dev="kinow" due-to="Arturo Bernal">Set void return method.</action>
    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Remove unused exception from TextStringBuilder.readFrom(CharBuffer). This preserves binary compatibility but not source compatibility.</action>
    <action                  type="fix" dev="ggregory" due-to="CodeQL, Gary Gregory">StrBuilder.StrBuilderReader.skip(long): Throw an exception when an implicit narrowing conversion in a compound assignment would result in information loss or a numeric error such as an overflows.</action>
    <action                  type="fix" dev="ggregory" due-to="CodeQL, Gary Gregory">TextStringBuilder.TextStringBuilderReader.skip(long): Throw an exception when an implicit narrowing conversion in a compound assignment would result in information loss or a numeric error such as an overflows.</action>
    <action issue="TEXT-211" type="fix" dev="ggregory" due-to="sebx59">TextStringBuilder.equals whatever the capacity is #281.</action>
    <action issue="TEXT=212" type="fix" dev="kinow" due-to="Ali Ghanbari">A More Efficient Implementation for Calculating Size of Longest Common Subsequence.</action>
    <action issue="TEXT-209" type="fix" dev="kinow" due-to="fourAjeff">LookupTranslator returns count of chars consumed, not of codepoints consumed.</action>
    <action issue="TEXT-209" type="fix" dev="ggregory" due-to="Arturo Bernal">Use Math.min() call instead of doing it manually. #335.</action>
    <action                  type="fix" dev="ggregory" due-to="ValentijnvdBeek, Gary Gregory">TextStringBuilder: Throw OutOfMemoryError instead of NegativeArraySizeException.</action>
    <action                  type="fix" dev="ggregory" due-to="ValentijnvdBeek, Gary Gregory">TextStringBuilder: Can't grow to sizes up to Integer.MAX_VALUE.</action>
    <action                  type="fix" dev="mattjuntunen">Make default string lookups configurable via system property. Remove dns, url, and script lookups from defaults. If these lookups are required for use in StringSubstitutor.createInterpolator(), they must be enabled via system property. See StringLookupFactory for details.</action>
    <!-- ADD -->
    <action issue="TEXT-207" type="add" dev="mattjuntunen">Add DoubleFormat utility.</action>
    <action issue="TEXT-190" type="add" dev="kinow" due-to="Benjamin Bing">Document negative limit for WordUtils abbreviate method</action>
    <action issue="TEXT-188" type="add" dev="kinow" due-to="Jakob Vesterstrøm">Speed up LevenshteinDistance with threshold by exiting early</action>
    <action issue="TEXT-185" type="add" dev="ggregory" due-to="Larry West, Gary Gregory">Release Notes page hasn't been updated for 1.9 release yet.</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add StrBuilder.isNotEmpty().</action>
    <!-- UPDATE -->
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump actions/setup-java from v1.4.0 to 3 #147, #156, #155, #172, #215, #314.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump github/codeql-action from 1 to 2 #319.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot">Bump checkstyle from 8.34 to 9.3, #141, #168, #182, #188, #193, #201, #208, #211, #228, #235, #245, #253, #255, #262, #270, #280, #287, #299, #315, #321.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump spotbugs-maven-plugin from 4.0.0 to 4.7.2.0, #144, #150, #167, #176, #194, #210, #223, #250, #268, #273, #277, #278, #286, #293, #303, #320, #325, #338, #344, #354.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump spotbugs from 4.1.3 to 4.7.2 #175, 189, #209, #218, #247, #256, #264, #275, #284, #289, #296, #306, #355.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot">Bump mockito-inline from 3.4.4 to 4.8.0, #143, #148, #149, #152, #153, #154, #158, #159, #166, #177, #180, #187, #195, #197, #207, #216, #231, #236, #237, #243, #258, #259, #260, #261, #272, #285, #291, #305, #317, #330, #331, #347, #352.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump junit-jupiter from 5.6.2 to 5.9.1 #163, #204, #232, #265, #269, #288, #343, #357.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot, Gary Gregory">Bump assertj-core from 3.16.1 to 3.23.1 #151, #157, #160, #178, #184, #199, #244, #267, #294.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot, Gary Gregory">Bump commons-io from 2.7 to 2.11.0 #161 #251.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot, Gary Gregory">Bump commons-parent from 51 to 54 #145, #358.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump maven-pmd-plugin from 3.13.0 to 3.19.0 #186, #263, #302, #334, #349, #353.</action>
    <action                  type="update" dev="kinow" due-to="Gary Gregory">Bump pmd from 6.42.0 to 6.46.0.</action>
    <action                  type="update" dev="ggregory" due-to="Dependabot">Bump graalvm.version from 20.2.0 to 22.0.0.2 #185, #198, #206, #227, #252, #276, #295, #300.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.japicmp.version from 0.14.3 to 0.16.0.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.jacoco.version 0.8.5 to 0.8.8; fixes Java 15 build.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump maven-checkstyle-plugin from 3.1.1 to 3.2.0 #202, #348.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-lang3 3.11 -> 3.12.0.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.javadoc.version from 3.2.0 to 3.4.1.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons.project-info.version from 3.1.0 to 3.1.2.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump jmh.version from 1.32 to 1.35 #254, #292, #313.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump commons-rng-simple from 1.3 to 1.4 #266.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump taglist-maven-plugin from 2.4 to 3.0.0 #297.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump commons.pmd-impl.version from 6.44.0 to 6.49.0 #323, #336, #345, #350.</action>
    <action                  type="update" dev="kinow" due-to="Dependabot">Bump exec-maven-plugin from 3.0.0 to 3.1.0 #340.</action>
  </release>
  <release version="1.9" date="2020-07-21" description="Release 1.9. Requires Java 8 or above.">
    <action issue="TEXT-166" type="fix" dev="kinow" due-to="Mikko Maunu">Removed non-existing parameter from Javadocs and spelled out parameters in throws.</action>
    <action issue="TEXT-149" type="fix" dev="kinow" due-to="Yuji Konishi">StringEscapeUtils.unescapeCsv doesn't remove quotes at begin and end of string.</action>
    <action issue="TEXT-174" type="fix" dev="ggregory" due-to="furkilic">ScriptStringLookup does not accept ":" #126.</action>
    <action issue="TEXT-178" type="fix" dev="ggregory" due-to="Gary Gregory">StringSubstitutor incorrectly removes some escape characters.</action>
    <action issue="TEXT-181" type="fix" dev="ggregory" due-to="XenoAmess">Fix Javadocs #135.</action>
    <action issue="TEXT-182" type="fix" dev="ggregory" due-to="XenoAmess">Fix typos #137.</action>
    <action issue="TEXT-183" type="fix" dev="ggregory" due-to="XenoAmess">Make ConstantStringLookup.constantCache final #136.</action>
    <action issue="TEXT-184" type="fix" dev="ggregory" due-to="XenoAmess">Simplify if in CaseUtils #134.</action>
    <action                  type="update" dev="ggregory" due-to="Johan Hammar">[javadoc] Fix compiler warnings in Java code example in Javadoc #124.</action>
    <action issue="TEXT-177" type="update" dev="ggregory" due-to="Gary Gregory">Update from Apache Commons Lang 3.9 to 3.11.</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add StringMatcher.size().</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Refactor TextStringBuilder.readFrom(Readable), extracting readFrom(CharBuffer) and readFrom(Reader).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add BiStringLookup and implementation BiFunctionStringLookup.</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.StringSubstitutor.StringSubstitutor(StringSubstitutor).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.TextStringBuilder.TextStringBuilder(CharSequence).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.TextStringBuilder.drainChar(int).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.TextStringBuilder.drainChars(int, int, char[]. int).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.TextStringBuilder.isNotEmpty().</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.TextStringBuilder.isReallocated().</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.TextStringBuilder.readFrom(Reader, int).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.TextStringBuilder.set(String).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.TextStringBuilder.wrap(char[]).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.TextStringBuilder.wrap(char[], int).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.io.StringSubstitutorReader.</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.lookup.StringLookupFactory.functionStringLookup(Function&lt;String, V&gt;).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.matcher.StringMatcher.isMatch(CharSequence, int).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.matcher.StringMatcher.isMatch(CharSequence, int, int, int).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.matcher.StringMatcherFactory.andMatcher(StringMatcher...).</action>
    <action                  type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.text.matcher.StringMatcherFactory.stringMatcher(char...).</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[build] Skip clirr since we use JApiCmp.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[test] junit-jupiter 5.5.1 -> 5.5.2.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[test] org.assertj:assertj-core 3.13.2 -> 3.16.1.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[build] com.puppycrawl.tools:checkstyle 8.23 -> 8.34.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[build] Update JUnit from 5.5.2 to 5.6.2.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[build] commons.jacoco.version 0.8.4 -> 0.8.5.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[build] commons.javadoc.version 3.1.1 -> 3.2.0.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[build] commons.japicmp.version 0.14.1 -> 0.14.3.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[build] checkstyle.plugin.version 3.1.0 -> 3.1.1.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[build] checkstyle.version 8.27 -> 8.33.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[build] org.apache.commons:commons-parent 48 -> 51.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[build] maven-pmd-plugin 3.12.0 -> 3.13.0.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[build] org.mockito 3.3.3 -> 3.4.4.</action>
  </release>

  <release version="1.8" date="2019-08-30" description="Release 1.8. Requires Java 8 or above.">
    <action issue="TEXT-167" type="fix" dev="ggregory" due-to="Larry West">commons-text web page missing "RELEASE-NOTES-1.7.txt"</action>
    <action issue="TEXT-168" type="fix" dev="ggregory" due-to="luksan47">(doc) Fixed wrong value for Jaro-Winkler example #117</action>
    <action issue="TEXT-169" type="add" dev="ggregory" due-to="Gary Gregory">Add helper factory method org.apache.commons.text.StringSubstitutor.createInterpolator().</action>
    <action issue="TEXT-170" type="add" dev="ggregory" due-to="Gary Gregory">Add String lookup for host names and IP addresses (DnsStringLookup).</action>
    <action issue="TEXT-171" type="fix" dev="ggregory" due-to="Gary Gregory">StringLookupFactory.addDefaultStringLookups(Map) does not convert keys to lower case.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">Expand Javadoc for StringSubstitutor and friends.</action>
    <action                  type="update" dev="ggregory" due-to="Gary Gregory">[site] checkstyle.version 8.21 -> 8.23.</action>
  </release>

  <release version="1.7" date="2019-06-30" description="Release 1.7. Requires Java 8 or above.">
    <action issue="TEXT-111" type="fix" dev="kinow" due-to="@CAPS50">WordUtils.wrap must calculate offset increment from wrapOn pattern length</action>
    <action issue="TEXT-104" type="update" dev="kinow" due-to="Sascha Szott">Jaro Winkler Distance refers to similarity</action>
    <action issue="TEXT-148" type="add" dev="ggregory">Add an enum to the lookup package that lists all StringLookups</action>
    <action issue="TEXT-127" type="add" dev="ggregory" due-to="Jean-Baptiste REICH, Sebb, Don Jeba, Gary Gregory">Add a toggle to throw an exception when a variable is unknown in StringSubstitutor</action>
    <action issue="TEXT-138" type="add" dev="ggregory" due-to="Neal Johnson, Don Jeba">TextStringBuilder append sub-sequence not consistent with Appendable.</action>
    <action issue="TEXT-152" type="add" dev="" due-to="@CAPS50">Fix possible infinite loop in WordUtils.wrap for a regex pattern that would trigger on a match of 0 length</action>
    <action issue="TEXT-153" type="update" dev="" due-to="amirhadadi">Make prefixSet in LookupTranslator a BitSet</action>
    <action issue="TEXT-156" type="update" dev="aherbert">Fix the RegexTokenizer to use a static Pattern</action>
    <action issue="TEXT-157" type="update" dev="aherbert">Remove rounding from JaccardDistance and JaccardSimilarity</action>
    <action issue="TEXT-151" type="fix" dev="aherbert">Fix the JaroWinklerSimilarity to use StringUtils.equals to test for CharSequence equality</action>
    <action issue="TEXT-155" type="add" dev="aherbert">Add a generic IntersectionSimilarity measure</action>
    <action issue="TEXT-162" type="update" dev="ggregory">Update Apache Commons Lang from 3.8.1 to 3.9.</action>
    <action issue="TEXT-165" type="fix" dev="ggregory">ResourceBundleStringLookup.lookup(String) throws MissingResourceException instead of returning null.</action>
    <action                  type="update" dev="ggregory">Update tests from org.assertj:assertj-core 3.12.1 to 3.12.2.</action>
    <action                  type="update" dev="ggregory">Update site from com.puppycrawl.tools:checkstyle 8.18 to 8.21.</action>
  </release>

  <release version="1.6" date="2018-10-12" description="Release 1.6. Requires Java 8 or above.">
    <action issue="TEXT-144" type="update" dev="ggregory">Add the resource string bundle string lookup to the default set of lookups</action>
    <action issue="TEXT-145" type="update" dev="ggregory">Add StringLookupFactory methods for the URL encoder and decoder string lookups</action>
    <action issue="TEXT-146" type="update" dev="ggregory">org.apache.commons.text.lookup.StringLookupFactory.interpolatorStringLookup() should reuse a singleton instance</action>
    <action issue="TEXT-147" type="update" dev="ggregory">Add a Base64 encoder string lookup.</action>
  </release>

  <release version="1.5" date="2018-09-29" description="Release 1.5. Requires Java 8 or above.">
    <action issue="TEXT-139" type="fix" dev="chtompki" due-to="Nick Wong">Improve JaccardSimilarity computational cost</action>
    <action issue="TEXT-118" type="fix" dev="chtompki" due-to="Nandor Kollar">JSON escaping incorrect for the delete control character</action>
    <action issue="TEXT-130" type="fix" dev="chtompki" due-to="Jan Martin Keil">Fixes JaroWinklerDistance: Wrong results due to precision of transpositions</action>
    <action issue="TEXT-131" type="fix" dev="chtompki" due-to="Jan Martin Keil">JaroWinklerDistance: Calculation deviates from definition</action>
    <action issue="TEXT-132" type="update" dev="ggregory">Update Apache Commons Lang from 3.7 to 3.8.1</action>
    <action issue="TEXT-133" type="add" dev="ggregory">Add a XML file XPath string lookup.</action>
    <action issue="TEXT-134" type="add" dev="ggregory">Add a Properties file string lookup.</action>
    <action issue="TEXT-135" type="add" dev="ggregory">Add a script string lookup.</action>
    <action issue="TEXT-136" type="add" dev="ggregory">Add a file string lookup.</action>
    <action issue="TEXT-137" type="add" dev="ggregory">Add a URL string lookup.</action>
    <action issue="TEXT-140" type="add" dev="ggregory">Add a Base64 string lookup.</action>
    <action issue="TEXT-141" type="add" dev="ggregory">Add org.apache.commons.text.lookup.StringLookupFactory.resourceBundleStringLookup(String).</action>
    <action issue="TEXT-142" type="add" dev="ggregory">Add URL encoder and decoder string lookups.</action>
    <action issue="TEXT-143" type="add" dev="ggregory">Add constant string lookup like the one in Apache Commons Configuration.</action>
  </release>

  <release version="1.4" date="2018-06-12" description="Release 1.4. Requires Java 8 or above.">
    <action issue="TEXT-120" type="fix" dev="pschumacher">StringEscapeUtils#unescapeJson does not unescape double quotes and forward slash</action>
    <action issue="TEXT-119" type="fix" dev="pschumacher">Remove mention of SQL escaping from user guide</action>
    <action issue="TEXT-121" type="update" dev="ggregory" due-to="pschumacher">Update Java requirement from version 7 to 8.</action>
    <action issue="TEXT-122" type="update" dev="ggregory">Allow full customization with new API org.apache.commons.text.lookup.StringLookupFactory.interpolatorStringLookup(Map&lt;String, StringLookup>, StringLookup, boolean).</action>
    <action issue="TEXT-123" type="fix" dev="ggregory" due-to="Takanobu Asanuma">WordUtils.wrap throws StringIndexOutOfBoundsException when wrapLength is Integer.MAX_VALUE.</action>
  </release>

  <release version="1.3" date="2018-03-16" description="Release 1.3. Requires Java 7.">
    <action issue="TEXT-110" type="add" dev="pschumacher">Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility</action>
    <action issue="TEXT-70" type="fix" dev="pschumacher">Build failure with java 9-ea+159</action>
    <action issue="TEXT-113" type="add" dev="ggregory">Add an interpolator string lookup: StringLookupFactory#interpolatorStringLookup()</action>
    <action issue="TEXT-114" type="add" dev="ggregory">Add a StrSubstitutor replacement based on interfaces: StringSubstitutor</action>
    <action issue="TEXT-115" type="add" dev="ggregory">Add a StrBuilder replacement based on the StringMatcher interface: TextStringBuilder</action>
    <action issue="TEXT-116" type="add" dev="ggregory">Add a StrTokenizer replacement based on the StringMatcher interface: StringTokenizer</action>
    <action issue="TEXT-117" type="add" dev="ggregory">Add a local host string lookup: LocalHostStringLookup</action>
    <action issue="TEXT-80" type="fix" dev="ggregory">StrLookup API confusing</action>
  </release>

  <release version="1.2" date="2017-12-12" description="Release 1.2. Requires Java 7.">
    <action issue="TEXT-107" type="update" dev="chtompki">Upversion commons-lang to 3.7</action>
    <action issue="TEXT-106" type="fix" dev="kinow" due-to="Benoit Moreau">Exception thrown in ExtendedMessageFormat using quotes with custom registry</action>
    <action issue="TEXT-100" type="fix" dev="kinow" due-to="Don Jeba">StringEscapeUtils#UnEscapeJson doesn't recognize escape signs correctly</action>
    <action issue="TEXT-74" type="add" dev="chtompki" due-to="Ioannis Sermetziadis">StrSubstitutor: Ability to turn off substitution in values</action>
    <action issue="TEXT-97" type="add" dev="chtompki" due-to="Amey Jadiye">RandomStringGenerator able to pass multiple ranges to .withinRange()</action>
    <action issue="TEXT-98" type="update" dev="chtompki" due-to="Arun Vinud S S">Deprecate isDelimiter and use HashSets for delimiter checks</action>
    <action issue="TEXT-89" type="add" dev="chtompki" due-to="Arun Vinud S S">WordUtils.initials support for UTF-16 surrogate pairs</action>
    <action issue="TEXT-88" type="update" dev="chtompki" due-to="Amey Jadiye">WordUtils should treat an empty delimiter array as no delimiters</action>
    <action issue="TEXT-93" type="update" dev="chtompki" due-to="Amey Jadiye">Update RandomStringGenerator to accept a list of valid characters</action>
    <action issue="TEXT-90" type="add" dev="pschumacher">Add CharacterPredicates for ASCII letters (uppercase/lowercase) and arabic numerals</action>
    <action issue="TEXT-85" type="add" dev="chtompki" due-to="Arun Vinud S S">Added CaseUtils class with camel case conversion support</action>
    <action issue="TEXT-91" type="add" dev="pschumacher">RandomStringGenerator should be able to generate a String with a random length</action>
    <action issue="TEXT-92" type="update" dev="pschumacher">Update commons-lang dependency to version 3.6</action>
    <action issue="TEXT-83" type="update" dev="chtompki" due-to="Amey Jadiye">Document that commons-csv should be used in preference to CsvTranslators</action>
    <action issue="TEXT-67" type="update" dev="kinow">NumericEntityUnescaper.options - fix TODO</action>
    <action issue="TEXT-84" type="update" dev="djones">RandomStringGenerator claims to be immutable, but isn't</action>
    <action issue="TEXT-102" type="add" dev="ggregory">Add StrLookup.resourceBundleLookup(ResourceBundle)</action>
    <action issue="TEXT-105" type="fix" dev="pschumacher" due-to="Abrasha">Typo in LongestCommonSubsequence#logestCommonSubsequence</action>
  </release>

  <release version="1.1" date="2017-05-23" description="Release 1.1. Requires Java 7.">
    <action issue="TEXT-39" type="update" dev="chtompki" due-to="Amey Jadiye">WordUtils should use toXxxxCase(int) rather than toXxxxCase(char)</action>
    <action issue="TEXT-41" type="add" dev="chtompki" due-to="Amey Jadiye">WordUtils.abbreviate support</action>
    <action issue="TEXT-82" type="add" dev="chtompki" due-to="Amey Jadiye">Putting WordUtils back in to the codebase</action>
    <action issue="TEXT-81" type="add" dev="pschumacher" due-to="djones">Add RandomStringGenerator</action>
    <action issue="TEXT-36" type="add" dev="pschumacher" due-to="Raymond DeCampo">RandomStringGenerator: allow users to provide source of randomness</action>
    <action issue="TEXT-76" type="fix" dev="kinow">Correct round issue in Jaro Winkler implementation</action>
    <action issue="TEXT-72" type="fix" dev="chtompki">Similar to LANG-1025, clirr fails site build.</action>
  </release>

  <release version="1.0" date="2017-03-04" description="Requires Java 7.

   Incompatible changes
   ====================
   All package names changed from org.apache.commons.text.beta in 1.0-beta-1 to
   org.apache.commons.text in 1.0.

   Methods StringEscapeUtils#escapeHtml3Once and StringEscapeUtils#escapeHtml4Once
   have been removed; see TEXT-40
  ">
    <action issue="TEXT-64" type="fix" dev="kinow" due-to="chtompki">Investigate locale issue in ExtendedMessageFormatTest</action>
    <action issue="TEXT-69" type="fix" dev="chtompki">Resolve PMD/CMD Violations</action>
    <action issue="TEXT-40" type="remove" dev="sebb">Escape HTML characters only once: revert</action>
    <action issue="TEXT-65" type="fix" dev="chtompki">Fixing the 200 checkstyle errors present in 1.0-beta-1</action>
    <action issue="TEXT-63" type="fix" dev="sebb">Mutable fields should be private</action>
  </release>

  <release version="1.0-beta-1" date="2017-01-30" description="First release (beta) of Commons Text. Requires Java 7.">
    <action issue="TEXT-62" type="fix" dev="chtompki">Incorporate suggestions from RC2 into 1.0 release</action>
    <action issue="TEXT-61" type="update" dev="chtompki" due-to="Lee Adcock">Naming packages org.apache.commons.text.beta</action>
    <action issue="TEXT-60" type="fix" dev="chtompki" due-to="Lee Adcock">Upgrading Jacoco for Java 9-ea compatibility.</action>
    <action issue="TEXT-58" type="update" dev="chtompki">Refactor EntityArrays to have unmodifiableMaps in leu of String[][]</action>
    <action issue="TEXT-53" type="update" dev="chtompki">Prepare site for 1.0 release</action>
    <action issue="TEXT-56" type="add" dev="chtompki" due-to="Jarek Strzeleck">Move CvsTranslators out of StringEscapeUtils and make them DRY</action>
    <action issue="TEXT-55" type="remove" dev="chtompki">Remove WordUtils to be added back in an upcoming 1.X release</action>
    <action issue="TEXT-52" type="fix" dev="chtompki">Possible attacks through StringEscapeUtils.escapeEcmaScrip better javadoc</action>
    <action issue="TEXT-51" type="remove" dev="chtompki">Remove RandomStringGenerator to be added back in the 1.1 release</action>
    <action issue="TEXT-50" type="update" dev="chtompki">Upgrade from commons-parent version 41 to version 42</action>
    <action issue="TEXT-40" type="add" dev="chtompki" due-to="Sampanna Kahu">Escape HTML characters only once</action>
    <action issue="TEXT-37" type="fix" dev="djones">Global vs local source of randomness</action>
    <action issue="TEXT-38" type="fix" dev="djones">Fluent API in "RandomStringBuilder"</action>
    <action issue="TEXT-26" type="fix" dev="chtompki">Fix JaroWinklerDistance in the manner of LUCENE-1297</action>
    <action issue="TEXT-32" type="add" dev="chtompki">Add LCS similarity and distance</action>
    <action issue="TEXT-34" type="add" dev="djones">Add class to generate random strings</action>
    <action issue="TEXT-35" type="fix" dev="kinow">Unfinished class Javadoc for CosineDistance</action>
    <action issue="TEXT-33" type="update" dev="chtompki">Consolidating since tags at 1.0, removing deprecated methods</action>
    <action issue="TEXT-29" type="add" dev="chtompki">Add a builder to StringEscapeUtils</action>
    <action issue="TEXT-28" type="add" dev="chtompki">Add shell/XSI escape/unescape support</action>
    <action issue="TEXT-22" type="fix" dev="chtompki">LevenshteinDistance reduce memory consumption</action>
    <action issue="TEXT-31" type="remove" dev="chtompki">Remove org.apache.commons.text.names, for later release than 1.0</action>
    <action issue="TEXT-2" type="add" dev="chtompki" due-to="Don Jeba">Add Jaccard Index and Jaccard Distance</action>
    <action issue="TEXT-27" type="add" dev="chtompki">Move org.apache.commons.lang3.StringEscapeUtils.java into text</action>
    <action issue="TEXT-23" type="add" dev="chtompki">Moving from commons-lang, the package org.apache.commons.lang3.text</action>
    <action issue="TEXT-10" type="add" dev="kinow" due-to="Don Jeba">A more complex Levenshtein distance</action>
    <action issue="TEXT-24" type="add" dev="chtompki">Add coveralls and Travis.ci integration</action>
    <action issue="TEXT-19" type="add" dev="kinow" due-to="Eyal Allweil">Add alphabet converter</action>
    <action issue="TEXT-13" type="add" dev="kinow">Create Commons Text logo</action>
    <action issue="TEXT-16" type="update" dev="britter">Improve HumanNameParser</action>
    <action issue="TEXT-5" type="fix" dev="kinow">IP clearance for the names package</action>
    <action issue="TEXT-7" type="add" dev="kinow">Write user guide</action>
    <action issue="TEXT-11" type="fix" dev="kinow">Work on the string metric, distance, and similarity definitions for the project</action>
    <action issue="TEXT-15" type="add" dev="kinow">Human name parser</action>
    <action issue="TEXT-12" type="fix" dev="kinow" due-to="Jonathan baker">Create StringDistanceFrom class that contains a StringMetric and the "left" side string.  This would have a method that accepts the "right" side string to test.</action>
    <action issue="TEXT-3" type="add" dev="kinow">Add Cosine Similarity and Cosine Distance</action>
    <action issue="TEXT-8" type="fix" dev="kinow" due-to="Jonathan Baker">Change (R) StringMetric.compare(CS left, CS right) to "apply" so that it is consistent with BiFunction.</action>
    <action issue="TEXT-6" type="fix" dev="kinow" due-to="Jonathan Baker">Allow extra information (e.g. Levenshtein threshold) to be stored as (final) fields in the StringMetric instance.</action>
    <action issue="TEXT-4" type="add" dev="kinow">Port Myers algorithm from [collections]</action>
    <action issue="TEXT-1" type="add" dev="kinow">Add Hamming distance</action>
    <action issue="TEXT-9" type="add" dev="kinow" due-to="britter">Incorporate String algorithms from Commons Lang</action>
  </release>

  </body>
</document>
