[Libreoffice-commits] core.git: include/svl svl/source

Laurent Balland-Poirier laurent.balland-poirier at laposte.net
Tue Aug 23 12:41:17 UTC 2016


 include/svl/zformat.hxx         |    3 +
 svl/source/numbers/zforlist.cxx |    2 -
 svl/source/numbers/zformat.cxx  |   64 ++++++++++++++++++++++++++++++----------
 3 files changed, 51 insertions(+), 18 deletions(-)

New commits:
commit 7a70cd77e44797d07a348993277b44a062868e9f
Author: Laurent Balland-Poirier <laurent.balland-poirier at laposte.net>
Date:   Fri Aug 19 20:18:52 2016 +0200

    tdf#79398 Add LCID with DBNum during export to XL
    
    Change-Id: I64a01ef5eb7ada9bc5edbeb873e09fd348d8f6d4
    Reviewed-on: https://gerrit.libreoffice.org/28256
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>

diff --git a/include/svl/zformat.hxx b/include/svl/zformat.hxx
index ea98b08..b5da86a 100644
--- a/include/svl/zformat.hxx
+++ b/include/svl/zformat.hxx
@@ -184,7 +184,8 @@ public:
 
     // Build a format string of application defined keywords
     OUString GetMappedFormatstring( const NfKeywordTable& rKeywords,
-                                    const LocaleDataWrapper& rLoc ) const;
+                                    const LocaleDataWrapper& rLoc,
+                                    LanguageType nOriginalLang = LANGUAGE_DONTKNOW ) const;
 
     void SetStarFormatSupport( bool b )         { bStarFlag = b; }
 
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 0eaab97..37ac0a3 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -837,7 +837,7 @@ OUString SvNumberFormatter::GetFormatStringForExcel( sal_uInt32 nKey, const NfKe
                 // before (which doesn't do anything if it was the same locale
                 // already).
                 rTempFormatter.ChangeIntl( LANGUAGE_ENGLISH_US);
-                aFormatStr = pEntry->GetMappedFormatstring( rKeywords, *rTempFormatter.GetLocaleData());
+                aFormatStr = pEntry->GetMappedFormatstring( rKeywords, *rTempFormatter.GetLocaleData(), nLang );
             }
         }
     }
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index b4c58cc..95e0c09 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -4634,8 +4634,29 @@ static void lcl_SvNumberformat_AddLimitStringImpl( OUString& rStr,
     }
 }
 
+void lcl_insertLCID( OUStringBuffer& aFormatStr, const OUString& rLCIDString )
+{
+    OUStringBuffer aLCIDString;
+    if ( !rLCIDString.isEmpty() )
+    {
+        aLCIDString = "[$-" + rLCIDString + "]";
+    }
+    sal_Int32 nPosDBNum = aFormatStr.lastIndexOf("[DBNum");
+    if ( nPosDBNum >= 0 )
+    {
+        if ( rLCIDString.getLength() > 4 )  // remove DBNumX code if long LCID
+            aFormatStr.remove( nPosDBNum, 8 );
+        else
+            nPosDBNum += 8;                 // other insert LCID after DBNum
+    }
+    else
+        nPosDBNum = 0;
+    aFormatStr.insert( nPosDBNum, aLCIDString.toString() );
+}
+
 OUString SvNumberformat::GetMappedFormatstring( const NfKeywordTable& rKeywords,
-                                                const LocaleDataWrapper& rLocWrp ) const
+                                                const LocaleDataWrapper& rLocWrp,
+                                                LanguageType nOriginalLang /* =LANGUAGE_DONTKNOW */ ) const
 {
     OUStringBuffer aStr;
     bool bDefault[4];
@@ -4724,12 +4745,17 @@ OUString SvNumberformat::GetMappedFormatstring( const NfKeywordTable& rKeywords,
             }
         }
 
-        const SvNumberNatNum& rNum = NumFor[n].GetNatNum();
-        if ( rNum.IsComplete() && rNum.GetDBNum() > 0 )
-        {
-            aPrefix += "[DBNum";
-            aPrefix += OUString::number( rNum.GetDBNum() );
-            aPrefix += "]";
+        SvNumberNatNum rNum = NumFor[n].GetNatNum();
+        if (rNum.IsComplete() && (rNum.GetDBNum() > 0 || nOriginalLang != LANGUAGE_DONTKNOW))
+        {   // GetFormatStringForExcel() may have changed language to en_US
+            if (rNum.GetLang() == LANGUAGE_ENGLISH_US && nOriginalLang != LANGUAGE_DONTKNOW)
+                rNum.SetLang( nOriginalLang );
+            if ( rNum.GetDBNum() > 0 )
+            {
+                aPrefix += "[DBNum";
+                aPrefix += OUString::number( rNum.GetDBNum() );
+                aPrefix += "]";
+            }
         }
 
         sal_uInt16 nAnz = NumFor[n].GetCount();
@@ -4809,11 +4835,11 @@ OUString SvNumberformat::GetMappedFormatstring( const NfKeywordTable& rKeywords,
                                  MsLangId::getRealLanguage( rNum.GetLang() ) ==
                                  LANGUAGE_THAI )
                             {
-                                aStr.insert( 0, "[$-D07041E]" ); // date in Thai digit, Buddhist era
+                                lcl_insertLCID( aStr, "D07041E" ); // date in Thai digit, Buddhist era
                             }
                             else
                             {
-                                aStr.insert( 0, "[$-107041E]" ); // date in Arabic digit, Buddhist era
+                                lcl_insertLCID( aStr, "107041E" ); // date in Arabic digit, Buddhist era
                             }
                             j = j+2;
                             bLCIDInserted = true;
@@ -4825,14 +4851,20 @@ OUString SvNumberformat::GetMappedFormatstring( const NfKeywordTable& rKeywords,
                 }
             }
         }
-        // The Thai T NatNum modifier during Xcl export.
-        if (rNum.IsSet() && rNum.GetNatNum() == 1 &&
-            rKeywords[NF_KEY_THAI_T] == "T" &&
-            MsLangId::getRealLanguage( rNum.GetLang()) ==
-            LANGUAGE_THAI && !bLCIDInserted )
+        if (rNum.IsSet() && !bLCIDInserted)
         {
-
-            aStr.insert( 0, "[$-D00041E]" ); // number in Thai digit
+            // The Thai T NatNum modifier during Xcl export.
+            if (rNum.GetNatNum() == 1 &&
+                rKeywords[NF_KEY_THAI_T] == "T" &&
+                MsLangId::getRealLanguage( rNum.GetLang()) == LANGUAGE_THAI )
+            {
+                lcl_insertLCID( aStr, "D00041E" ); // number in Thai digit
+            }
+            else if ( rNum.IsComplete() && rNum.GetDBNum() > 0 )
+            {
+                lcl_insertLCID( aStr, OUString::number( sal::static_int_cast<sal_Int32>(
+                                MsLangId::getRealLanguage( rNum.GetLang())), 16).toAsciiUpperCase());
+            }
         }
     }
     for ( ; nSub<4 && bDefault[nSub]; ++nSub )


More information about the Libreoffice-commits mailing list