xmloff/source/style/xmlnumfi.cxx |   24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

New commits:
commit 025231224b8b076e280235cd2b943addd2fb0755
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Wed Jun 8 17:47:19 2022 +0200
Commit:     Eike Rathke <er...@redhat.com>
CommitDate: Wed Jun 8 20:15:44 2022 +0200

    Resolves: tdf#149484 Read and handle <number:text> in <number:boolean-style>
    
    Change-Id: I1be5f2be908eb88aa4ef7436ea7c09f35b076acf
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135507
    Reviewed-by: Eike Rathke <er...@redhat.com>
    Tested-by: Jenkins

diff --git a/xmloff/source/style/xmlnumfi.cxx b/xmloff/source/style/xmlnumfi.cxx
index e5e9a25828fa..46ee44b3080f 100644
--- a/xmloff/source/style/xmlnumfi.cxx
+++ b/xmloff/source/style/xmlnumfi.cxx
@@ -497,8 +497,11 @@ static bool lcl_ValidChar( sal_Unicode cChar, const 
SvXMLNumFormatContext& rPare
     }
 
     //  see ImpSvNumberformatScan::Next_Symbol
+
+    // All format types except BOOLEAN may contain minus sign or delimiter.
     if ( cChar == '-' )
-        return true;   // all format types may content minus sign or delimiter
+        return nFormatType != SvXMLStylesTokens::BOOLEAN_STYLE;
+
     if ( ( cChar == ' ' ||
            cChar == '/' ||
            cChar == '.' ||
@@ -528,11 +531,13 @@ static void lcl_EnquoteIfNecessary( OUStringBuffer& 
rContent, const SvXMLNumForm
 {
     bool bQuote = true;
     sal_Int32 nLength = rContent.getLength();
+    const SvXMLStylesTokens nFormatType = rParent.GetType();
 
-    if ((nLength == 1 && lcl_ValidChar( rContent[0], rParent)) ||
-            (nLength == 2 &&
-             ((rContent[0] == ' ' && rContent[1] == '-') ||
-              (rContent[1] == ' ' && lcl_ValidChar( rContent[0], rParent)))))
+    if (nFormatType != SvXMLStylesTokens::BOOLEAN_STYLE &&
+            ((nLength == 1 && lcl_ValidChar( rContent[0], rParent)) ||
+             (nLength == 2 &&
+              ((rContent[0] == ' ' && rContent[1] == '-') ||
+               (rContent[1] == ' ' && lcl_ValidChar( rContent[0], rParent))))))
     {
         //  Don't quote single separator characters like space or percent,
         //  or separator characters followed by space (used in date formats).
@@ -541,7 +546,7 @@ static void lcl_EnquoteIfNecessary( OUStringBuffer& 
rContent, const SvXMLNumForm
         //  the difference of quotes.
         bQuote = false;
     }
-    else if ( rParent.GetType() == SvXMLStylesTokens::PERCENTAGE_STYLE && 
nLength > 1 )
+    else if ( nFormatType == SvXMLStylesTokens::PERCENTAGE_STYLE && nLength > 
1 )
     {
         //  the percent character in percentage styles must be left out of 
quoting
         //  (one occurrence is enough even if there are several percent 
characters in the string)
@@ -907,7 +912,7 @@ void SvXMLNumFmtElementContext::endFastElement(sal_Int32 )
             }
             break;
         case SvXMLStyleTokens::Boolean:
-            // ignored - only default boolean format is supported
+            rParent.AddNfKeyword( NF_KEY_BOOLEAN );
             break;
 
         case SvXMLStyleTokens::Day:
@@ -1535,9 +1540,8 @@ sal_Int32 
SvXMLNumFormatContext::CreateAndInsert(SvNumberFormatter* pFormatter)
             nIndex = pFormatter->GetFormatIndex( NF_NUMBER_SYSTEM, nFormatLang 
);
     }
 
-    //  boolean is always the builtin boolean format
-    //  (no other boolean formats are implemented)
-    if ( nType == SvXMLStylesTokens::BOOLEAN_STYLE )
+    if ( nType == SvXMLStylesTokens::BOOLEAN_STYLE && !bHasExtraText &&
+            aMyConditions.empty() && sFormat.toChar() != '[' )
         nIndex = pFormatter->GetFormatIndex( NF_BOOLEAN, nFormatLang );
 
     //  check for default date formats

Reply via email to