sc/qa/unit/subsequent_export-test.cxx |   16 +++++------
 svl/source/numbers/zforlist.cxx       |   46 +++++++++++++++++++++++++++++++---
 2 files changed, 50 insertions(+), 12 deletions(-)

New commits:
commit bd8b2a95e2c88cdab80c514c0d6364bad91d9177
Author:     Eike Rathke <[email protected]>
AuthorDate: Wed Oct 16 18:47:40 2019 +0200
Commit:     Eike Rathke <[email protected]>
CommitDate: Thu Oct 17 17:18:16 2019 +0200

    Resolves: tdf#126773 Excel uses lowercase date and time format code keywords
    
    ... so do the same when exporting to prevent surprises with iOS
    and OSX viewers or maybe other tools.
    
    This made it necessary to adapt
    ScExportTest::testExtendedLCIDXLSX() that checks calendar and date
    relevant exported format strings.
    
    Change-Id: I243d536e2a42562ec46375923facfa222ecbb29b
    Reviewed-on: https://gerrit.libreoffice.org/80920
    Reviewed-by: Eike Rathke <[email protected]>
    Tested-by: Jenkins

diff --git a/sc/qa/unit/subsequent_export-test.cxx 
b/sc/qa/unit/subsequent_export-test.cxx
index 32dd92481c36..9ee5fd9a0e8c 100644
--- a/sc/qa/unit/subsequent_export-test.cxx
+++ b/sc/qa/unit/subsequent_export-test.cxx
@@ -4109,14 +4109,14 @@ void ScExportTest::testExtendedLCIDXLSX()
     xmlDocPtr pDoc = XPathHelper::parseExport2(*this, *xDocSh, m_xSFactory, 
"xl/styles.xml", FORMAT_XLSX);
     CPPUNIT_ASSERT(pDoc);
     // Check export
-    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[2]", "formatCode", 
"[$-107041E]DD\\-MM\\-YYYY");
-    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[3]", "formatCode", 
"[$-D07041E]DD\\-MM\\-YYYY");
-    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[4]", "formatCode", 
"[$-1030411]DD\\-MM\\-EE");
-    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[5]", "formatCode", 
"[$-1B030411]DD\\-MM\\-EE");
-    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[6]", "formatCode", 
"[$-108040D]DD\\-MM\\-YYYY");
-    //assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[7]", "formatCode", 
"[$-108040D]DD\\-MM\\-YYYY");
-    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[7]", "formatCode", 
"[$-1060401]DD\\-MM\\-YYYY");
-    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[8]", "formatCode", 
"[$-2060401]DD\\-MM\\-YYYY");
+    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[2]", "formatCode", 
"[$-107041E]dd\\-mm\\-yyyy");
+    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[3]", "formatCode", 
"[$-D07041E]dd\\-mm\\-yyyy");
+    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[4]", "formatCode", 
"[$-1030411]dd\\-mm\\-ee");
+    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[5]", "formatCode", 
"[$-1B030411]dd\\-mm\\-ee");
+    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[6]", "formatCode", 
"[$-108040D]dd\\-mm\\-yyyy");
+    //assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[7]", "formatCode", 
"[$-108040D]dd\\-mm\\-yyyy");
+    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[7]", "formatCode", 
"[$-1060401]dd\\-mm\\-yyyy");
+    assertXPath(pDoc, "/x:styleSheet/x:numFmts/x:numFmt[8]", "formatCode", 
"[$-2060401]dd\\-mm\\-yyyy");
 
     // Check import
     ScDocument& rDoc = xDocSh->GetDocument();
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 053e195cd82a..7fc999501780 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -787,12 +787,50 @@ void SvNumberFormatter::FillKeywordTableForExcel( 
NfKeywordTable& rKeywords )
 
     // Replace upper case "GENERAL" with proper case "General".
     rKeywords[ NF_KEY_GENERAL ] = GetStandardName( LANGUAGE_ENGLISH_US );
+
+    // Excel or OOXML do not specify format code keywords case sensitivity,
+    // but given and writes them lower case. Using upper case even lead to an
+    // odd misrepresentation in iOS viewer and OSX Quicklook viewer that
+    // strangely use "D" and "DD" for "days since beginnning of year", which is
+    // nowhere defined. See tdf#126773
+    // Use lower case for all date and time keywords where known. See OOXML
+    // ECMA-376-1:2016 18.8.31 numFmts (Number Formats)
+    rKeywords[ NF_KEY_MI ]    = "m";
+    rKeywords[ NF_KEY_MMI ]   = "mm";
+    rKeywords[ NF_KEY_M ]     = "m";
+    rKeywords[ NF_KEY_MM ]    = "mm";
+    rKeywords[ NF_KEY_MMM ]   = "mmm";
+    rKeywords[ NF_KEY_MMMM ]  = "mmmm";
+    rKeywords[ NF_KEY_MMMMM ] = "mmmmm";
+    rKeywords[ NF_KEY_H ]     = "h";
+    rKeywords[ NF_KEY_HH ]    = "hh";
+    rKeywords[ NF_KEY_S ]     = "s";
+    rKeywords[ NF_KEY_SS ]    = "ss";
+    /* XXX: not defined in OOXML: rKeywords[ NF_KEY_Q ]     = "q"; */
+    /* XXX: not defined in OOXML: rKeywords[ NF_KEY_QQ ]    = "qq"; */
+    rKeywords[ NF_KEY_D ]     = "d";
+    rKeywords[ NF_KEY_DD ]    = "dd";
+    rKeywords[ NF_KEY_DDD ]   = "ddd";
+    rKeywords[ NF_KEY_DDDD ]  = "dddd";
+    rKeywords[ NF_KEY_YY ]    = "yy";
+    rKeywords[ NF_KEY_YYYY ]  = "yyyy";
+    /* XXX: not defined in OOXML: rKeywords[ NF_KEY_AAA ]   = "aaa"; */
+    /* XXX: not defined in OOXML: rKeywords[ NF_KEY_AAAA ]  = "aaaa"; */
+    rKeywords[ NF_KEY_EC ]    = "e";
+    rKeywords[ NF_KEY_EEC ]   = "ee";
+    rKeywords[ NF_KEY_G ]     = "g";
+    rKeywords[ NF_KEY_GG ]    = "gg";
+    rKeywords[ NF_KEY_GGG ]   = "ggg";
+    rKeywords[ NF_KEY_R ]     = "r";
+    rKeywords[ NF_KEY_RR ]    = "rr";
+    /* XXX: not defined in OOXML: rKeywords[ NF_KEY_WW ]    = "ww"; */
+
     // Remap codes unknown to Excel.
-    rKeywords[ NF_KEY_NN ] = "DDD";
-    rKeywords[ NF_KEY_NNN ] = "DDDD";
+    rKeywords[ NF_KEY_NN ] = "ddd";
+    rKeywords[ NF_KEY_NNN ] = "dddd";
     // NNNN gets a separator appended in 
SvNumberformat::GetMappedFormatString()
-    rKeywords[ NF_KEY_NNNN ] = "DDDD";
-    // Export the Thai T NatNum modifier.
+    rKeywords[ NF_KEY_NNNN ] = "dddd";
+    // Export the Thai T NatNum modifier. This must be uppercase for internal 
reasons.
     rKeywords[ NF_KEY_THAI_T ] = "T";
 }
 
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to