svl/source/numbers/zforfind.cxx | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
New commits: commit 91d9204d8eb1fd6b923d5af618f66acdbdf0d75d Author: Eike Rathke <er...@redhat.com> AuthorDate: Fri Apr 8 21:46:47 2022 +0200 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Wed Apr 13 14:39:31 2022 +0200 Resolves: tdf#148052 accept a ". Month " name for matching DMY format ... even if the locale doesn't define such DM order or LongDateDaySeparator. Change-Id: I4bef720dff3582de9b60313824a84b570c153e98 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132741 Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Jenkins (cherry picked from commit 7a16002ede5fd31ae8f3358136ad49de40465ac1) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132703 Reviewed-by: Caolán McNamara <caol...@redhat.com> (cherry picked from commit 29f7b81afcf2e21c88c38fbae31fb463b26040c1) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132859 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/svl/source/numbers/zforfind.cxx b/svl/source/numbers/zforfind.cxx index 9d3c3baec899..ffe31e9be8b0 100644 --- a/svl/source/numbers/zforfind.cxx +++ b/svl/source/numbers/zforfind.cxx @@ -2605,6 +2605,29 @@ bool ImpSvNumberInputScan::ScanMidString( const OUString& rString, sal_uInt16 nS SkipBlanks(rString, nPos); bDate = SkipString( rDate, rString, nPos); // 10. 10- 10/ } + if (!bDate && nStringPos == 1 && mpFormat && (mpFormat->GetType() & SvNumFormatType::DATE)) + { + // If a DMY format was given and a mid string starts with a literal + // ". " dot+space and could contain a following month name and ends + // with a space or LongDateMonthSeparator, like it's scanned in + // `14". AUG "18`, then it may be a date as well. Regardless whether + // defined such by the locale or not. + // This *could* check for presence of ". "MMM or ". "MMMM in the actual + // format code for further restriction to match only if present, but.. + + const sal_uInt32 nExactDateOrder = mpFormat->GetExactDateOrder(); + // Exactly DMY. + if (((nExactDateOrder & 0xff) == 'Y') && (((nExactDateOrder >> 8) & 0xff) == 'M') + && (((nExactDateOrder >> 16) & 0xff) == 'D')) + { + const sal_Int32 nTmpPos = nPos; + if (SkipChar('.', rString, nPos) && SkipBlanks(rString, nPos) && nPos + 2 < rString.getLength() + && (rString.endsWith(" ") || rString.endsWith( pLoc->getLongDateMonthSep()))) + bDate = true; + else + nPos = nTmpPos; + } + } if (bDate || ((MayBeIso8601() || MayBeMonthDate()) && // 1999-12-31 31-Dec-1999 SkipChar( '-', rString, nPos))) {