svl/source/numbers/zforfind.cxx |   23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

New commits:
commit 29f7b81afcf2e21c88c38fbae31fb463b26040c1
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Fri Apr 8 21:46:47 2022 +0200
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Sat Apr 9 22:18:44 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>

diff --git a/svl/source/numbers/zforfind.cxx b/svl/source/numbers/zforfind.cxx
index 330921242a01..010549d28151 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)))
     {

Reply via email to