sc/qa/unit/ucalc_condformat.cxx | 3 ++- sc/source/core/data/conditio.cxx | 23 ++++++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-)
New commits: commit 080b2e56300865782ae65978ed9e510d667672a6 Author: Justin Luth <[email protected]> AuthorDate: Fri Sep 23 07:41:23 2022 -0400 Commit: Eike Rathke <[email protected]> CommitDate: Sat Oct 1 12:18:54 2022 +0200 tdf#123990 sc condformat: case insensitive begins/ends/contains squashed commit This is how Excel handles these. At first I was afraid that this would upset LibreOffice users, but then I realized that equals already is case insensitive, so this change ought to be more consistent, and thus there should be fewer outcrys. Change-Id: Ia3de78d5888672ba8b774866d41ecd65293397c1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140484 Tested-by: Jenkins Reviewed-by: Justin Luth <[email protected]> (cherry picked from commit 3bfed17b047422a8c4e98ab80001f3158afb227e) Change-Id: I44a07c482d2d67a76a939ba2d593a003398d52c0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140633 Tested-by: Justin Luth <[email protected]> Reviewed-by: Justin Luth <[email protected]> Reviewed-by: Eike Rathke <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140685 Tested-by: Jenkins diff --git a/sc/qa/unit/ucalc_condformat.cxx b/sc/qa/unit/ucalc_condformat.cxx index c783b8808c46..5f71f27c1726 100644 --- a/sc/qa/unit/ucalc_condformat.cxx +++ b/sc/qa/unit/ucalc_condformat.cxx @@ -817,7 +817,8 @@ void TestCondformat::testCondFormatEndsWithStr() { m_pDoc->InsertTab(0, "Test"); - ScConditionEntry aEntry(ScConditionMode::EndsWith, "\"TestString\"", "", *m_pDoc, ScAddress(), + // case insnsitive matching + ScConditionEntry aEntry(ScConditionMode::EndsWith, "\"teststring\"", "", *m_pDoc, ScAddress(), "", "", formula::FormulaGrammar::GRAM_DEFAULT, formula::FormulaGrammar::GRAM_DEFAULT); svl::SharedStringPool& rStringPool = m_pDoc->GetSharedStringPool(); diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx index ab5bfce9814a..dae08455b0e9 100644 --- a/sc/source/core/data/conditio.cxx +++ b/sc/source/core/data/conditio.cxx @@ -1171,16 +1171,33 @@ bool ScConditionEntry::IsValidStr( const OUString& rArg, const ScAddress& rPos ) bValid = !bValid; break; case ScConditionMode::BeginsWith: - bValid = rArg.startsWith(aUpVal1); + bValid = ScGlobal::GetTransliteration().isMatch(aUpVal1, rArg); break; case ScConditionMode::EndsWith: - bValid = rArg.endsWith(aUpVal1); + { + sal_Int32 nStart = rArg.getLength(); + const sal_Int32 nLen = aUpVal1.getLength(); + if (nLen > nStart) + bValid = false; + else + { + nStart = nStart - nLen; + sal_Int32 nMatch1(0), nMatch2(0); + bValid = ScGlobal::GetTransliteration().equals(rArg, nStart, nLen, nMatch1, + aUpVal1, 0, nLen, nMatch2); + } + } break; case ScConditionMode::ContainsText: case ScConditionMode::NotContainsText: - bValid = rArg.indexOf(aUpVal1) != -1; + { + const OUString aArgStr(ScGlobal::getCharClass().lowercase(rArg)); + const OUString aValStr(ScGlobal::getCharClass().lowercase(aUpVal1)); + bValid = aArgStr.indexOf(aValStr) != -1; + if(eOp == ScConditionMode::NotContainsText) bValid = !bValid; + } break; default: {
