diff options
author | Justin Luth <justin_luth@sil.org> | 2021-08-12 21:29:42 +0200 |
---|---|---|
committer | Justin Luth <justin_luth@sil.org> | 2021-08-25 09:28:57 +0200 |
commit | a511bffd67a9cebfdc878766581ac08c79d7ff51 (patch) | |
tree | 14160371a1c3a7c51fa4600dbe2ac3c2869e549f /i18npool | |
parent | b27ede1a629ac2b5f9e98def37326d546923edec (diff) |
tdf#137737 i18n search: don't expand start/end with regex ^ or $
If the regex starts with ^, that means that it
matches only at the beginning of the content.
So don't expand the beginning of the content
or else it won't match anymore.
Similarly, $ indicates matching at the end of the content.
For the unit test I just randomly guessed at SearchItem.AlgorithmType,
and it kinda worked. I love black boxes...
I hope I remember what i learned about TransformParameters()
which was parsed in sfx2/source/appl/appuno.cxx,
splitting the "variable" into Item.PropName = PropValue.
That is definite black magic.
Change-Id: Ie1640821a7a430e78dbe72c57a92aeaa9b5272a3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120410
Tested-by: Jenkins
Reviewed-by: Justin Luth <justin_luth@sil.org>
Diffstat (limited to 'i18npool')
-rw-r--r-- | i18npool/source/search/textsearch.cxx | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/i18npool/source/search/textsearch.cxx b/i18npool/source/search/textsearch.cxx index dcb31762e6c2..e6ddd93c5be6 100644 --- a/i18npool/source/search/textsearch.cxx +++ b/i18npool/source/search/textsearch.cxx @@ -333,7 +333,7 @@ SearchResult TextSearch::searchForward( const OUString& searchStr, sal_Int32 sta // apply normal transliteration (1<->1, 1<->0) sal_Int32 nInStartPos = startPos; - if (pRegexMatcher && startPos > 0) + if (pRegexMatcher && startPos > 0 && !aSrchPara.searchString.startsWith("^")) { // tdf#89665, tdf#75806: An optimization to avoid transliterating the whole string, yet // transliterate enough of the leading text to allow sensible look-behind assertions. @@ -345,7 +345,7 @@ SearchResult TextSearch::searchForward( const OUString& searchStr, sal_Int32 sta nInStartPos -= std::min(nMaxLeadingLen, startPos); } sal_Int32 nInEndPos = endPos; - if (pRegexMatcher && endPos < searchStr.getLength()) + if (pRegexMatcher && endPos < searchStr.getLength() && !aSrchPara.searchString.endsWith("$")) { // tdf#65038: ditto for look-ahead assertions const sal_Int32 nMaxTrailingLen = aSrchPara.searchString.endsWith(")") ? 100 : 3; |