sw/qa/extras/ooxmlexport/ooxmlexport4.cxx | 4 - sw/source/core/crsr/DateFormFieldButton.cxx | 14 +--- sw/source/core/text/itrform2.cxx | 26 +++---- sw/source/filter/ww8/docxattributeoutput.cxx | 89 +++++++++++++-------------- sw/source/ui/fldui/DateFormFieldDialog.cxx | 8 -- writerfilter/source/dmapper/SdtHelper.cxx | 5 + 6 files changed, 70 insertions(+), 76 deletions(-)
New commits: commit 1784522ef9c10b8d67c193b0ada2f09d4dc79ad3 Author: Tamás Zolnai <[email protected]> AuthorDate: Wed Jul 3 14:43:54 2019 +0200 Commit: Andras Timar <[email protected]> CommitDate: Sun Jul 14 00:17:59 2019 +0200 MSForms: DOCX filter: handle date formats with quotation marks. Reviewed-on: https://gerrit.libreoffice.org/75454 Reviewed-by: Tamás Zolnai <[email protected]> Tested-by: Tamás Zolnai <[email protected]> (cherry picked from commit 9c2feb75a6104d4376cccb157244dd7f6e88968a) Change-Id: I61cc6d47200acdd55f147b4f1829330dec8562a0 Reviewed-on: https://gerrit.libreoffice.org/75547 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Andras Timar <[email protected]> diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx index a951b61df1d8..f4f9c72a7f11 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx @@ -648,7 +648,7 @@ DECLARE_OOXMLEXPORT_TEST(testTableCurruption, "tableCurrupt.docx") assertXPath(pXmlDoc, "/w:hdr/w:tbl[1]/w:tr[1]/w:tc[1]",1); } -/*DECLARE_OOXMLEXPORT_TEST(testDateControl, "date-control.docx") +DECLARE_OOXMLEXPORT_TEST(testDateControl, "date-control.docx") { // check XML xmlDocPtr pXmlDoc = parseExport("word/document.xml"); @@ -658,7 +658,7 @@ DECLARE_OOXMLEXPORT_TEST(testTableCurruption, "tableCurrupt.docx") assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date/w:dateFormat", "val", "dddd, dd' de 'MMMM' de 'yyyy"); assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:date/w:lid", "val", "es-ES"); assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtContent/w:r/w:t", u"mi\u00E9rcoles, 05 de marzo de 2014"); -}*/ +} DECLARE_OOXMLEXPORT_TEST(test_OpeningBrace, "2120112713_OpenBrace.docx") { diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index fe64960bec2b..501302417305 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -1673,8 +1673,11 @@ void DocxAttributeOutput::WriteFormDate(const OUString& sCurrentDate, const OUSt else m_pSerializer->startElementNS(XML_w, XML_date, FSEND); + OString sUTF8DateFormat = sDateFormat.toUtf8(); + // Replace quotation mark used for marking static strings in date format + sUTF8DateFormat = sUTF8DateFormat.replaceAll("\"", "'"); m_pSerializer->singleElementNS(XML_w, XML_dateFormat, - FSNS(XML_w, XML_val), sDateFormat.toUtf8(), FSEND); + FSNS(XML_w, XML_val), sUTF8DateFormat, FSEND); m_pSerializer->singleElementNS(XML_w, XML_lid, FSNS(XML_w, XML_val), sLang.toUtf8(), FSEND); m_pSerializer->singleElementNS(XML_w, XML_storeMappedDataAs, diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx index 41706b616a03..7dd3c2d8a32d 100644 --- a/writerfilter/source/dmapper/SdtHelper.cxx +++ b/writerfilter/source/dmapper/SdtHelper.cxx @@ -114,7 +114,10 @@ void SdtHelper::createDateContentControl() uno::Reference<container::XNameContainer> xNameCont = xFormField->getParameters(); if(xNameCont.is()) { - xNameCont->insertByName(ODF_FORMDATE_DATEFORMAT, uno::makeAny(m_sDateFormat.makeStringAndClear())); + OUString sDateFormat = m_sDateFormat.makeStringAndClear(); + // Replace quotation mark used for marking static strings in date format + sDateFormat = sDateFormat.replaceAll("'", "\""); + xNameCont->insertByName(ODF_FORMDATE_DATEFORMAT, uno::makeAny(sDateFormat)); xNameCont->insertByName(ODF_FORMDATE_DATEFORMAT_LANGUAGE, uno::makeAny(m_sLocale.makeStringAndClear())); OUString sDate = m_sDate.makeStringAndClear(); if(!sDate.isEmpty()) commit 0b782ca56bddd95e0706da9d70e2bbb0cd2612de Author: Tamás Zolnai <[email protected]> AuthorDate: Wed Jul 3 14:43:12 2019 +0200 Commit: Andras Timar <[email protected]> CommitDate: Sun Jul 14 00:17:49 2019 +0200 MSForms: date format: better searching of date format entries * GetEntryKey and PutEntry methods are not consistent. * It can happen that GetEntryKey does not found the format we are searching for, however the PutEntry() method finds it among the entries and so returns with failure. * Let's check the nFormat instead, PutEntry returns the found entry key if the entry exists. Reviewed-on: https://gerrit.libreoffice.org/75453 Tested-by: Jenkins Reviewed-by: Tamás Zolnai <[email protected]> (cherry picked from commit 9e007eb2b0ab44b436da9d00559150cc4fa37dc5) Change-Id: Ia7e8702b03999950adfa649d1adc3a839dc5a178 Reviewed-on: https://gerrit.libreoffice.org/75546 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Andras Timar <[email protected]> diff --git a/sw/source/core/crsr/DateFormFieldButton.cxx b/sw/source/core/crsr/DateFormFieldButton.cxx index adb12d89286b..52a634e6158f 100644 --- a/sw/source/core/crsr/DateFormFieldButton.cxx +++ b/sw/source/core/crsr/DateFormFieldButton.cxx @@ -59,17 +59,16 @@ SwDatePickerDialog::SwDatePickerDialog(SwEditWin* parent, sw::mark::IFieldmark* sal_uInt32 nFormat = m_pNumberFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE); - bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND; if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND) { sal_Int32 nCheckPos = 0; short nType; OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT; - bValidFormat = m_pNumberFormatter->PutEntry(sFormat, nCheckPos, nType, nFormat, - ODF_FORMDATE_CURRENTDATE_LANGUAGE); + m_pNumberFormatter->PutEntry(sFormat, nCheckPos, nType, nFormat, + ODF_FORMDATE_CURRENTDATE_LANGUAGE); } - if (bValidFormat) + if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND) { double dCurrentDate = 0; m_pNumberFormatter->IsNumberFormat(sDateString, nFormat, dCurrentDate); @@ -101,17 +100,16 @@ IMPL_LINK(SwDatePickerDialog, ImplSelectHdl, Calendar*, pCalendar, void) { sal_uInt32 nFormat = m_pNumberFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE); - bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND; if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND) { sal_Int32 nCheckPos = 0; short nType; OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT; - bValidFormat = m_pNumberFormatter->PutEntry(sFormat, nCheckPos, nType, nFormat, - ODF_FORMDATE_CURRENTDATE_LANGUAGE); + m_pNumberFormatter->PutEntry(sFormat, nCheckPos, nType, nFormat, + ODF_FORMDATE_CURRENTDATE_LANGUAGE); } - if (bValidFormat) + if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND) { Color* pCol = nullptr; OUString sOutput; diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx index cddf9f51014c..988a14c18937 100644 --- a/sw/source/core/text/itrform2.cxx +++ b/sw/source/core/text/itrform2.cxx @@ -890,20 +890,19 @@ namespace sw { namespace mark { pResult->second >>= sFormattedDate; sal_uInt32 nFormat = pFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE); - bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND; if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND) { sal_Int32 nCheckPos = 0; short nType; OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT; - bValidFormat = pFormatter->PutEntry(sFormat, - nCheckPos, - nType, - nFormat, - ODF_FORMDATE_CURRENTDATE_LANGUAGE); + pFormatter->PutEntry(sFormat, + nCheckPos, + nType, + nFormat, + ODF_FORMDATE_CURRENTDATE_LANGUAGE); } - if (bValidFormat) + if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND) { pFormatter->IsNumberFormat(sFormattedDate, nFormat, dCurrentDate); bHasCurrentDate = true; @@ -913,20 +912,19 @@ namespace sw { namespace mark { if (!sDateFormat.isEmpty() && !sLang.isEmpty() && bHasCurrentDate) { sal_uInt32 nFormat = pFormatter->GetEntryKey(sDateFormat, LanguageTag(sLang).getLanguageType()); - bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND; if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND) { sal_Int32 nCheckPos = 0; short nType; - bValidFormat = pFormatter->PutEntry(sDateFormat, - nCheckPos, - nType, - nFormat, - LanguageTag(sLang).getLanguageType()); + pFormatter->PutEntry(sDateFormat, + nCheckPos, + nType, + nFormat, + LanguageTag(sLang).getLanguageType()); } OUString sOutput; - if (bValidFormat) + if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND) { Color* pCol = nullptr; pFormatter->GetOutputString(dCurrentDate, nFormat, sOutput, &pCol, false); diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index a6fe5ea3108e..fe64960bec2b 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -1688,57 +1688,51 @@ void DocxAttributeOutput::WriteFormDate(const OUString& sCurrentDate, const OUSt m_pSerializer->startElementNS(XML_w, XML_sdtContent, FSEND); m_pSerializer->startElementNS(XML_w, XML_r, FSEND); + // Convert the current date to the right format if (!sCurrentDate.isEmpty()) { - // Convert the current date to the right format - if (!sCurrentDate.isEmpty()) + SvNumberFormatter* pFormatter = m_rExport.m_pDoc->GetNumberFormatter(); + double dCurrentDate = 0.0; + // First get the date internal double representation + sal_uInt32 nFormat = pFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE); + if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND) { - SvNumberFormatter* pFormatter = m_rExport.m_pDoc->GetNumberFormatter(); - - double dCurrentDate = 0.0; - // First get the date internal double representation - sal_uInt32 nFormat = pFormatter->GetEntryKey(ODF_FORMDATE_CURRENTDATE_FORMAT, ODF_FORMDATE_CURRENTDATE_LANGUAGE); - bool bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND; - if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND) - { - sal_Int32 nCheckPos = 0; - short nType; - OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT; - bValidFormat = pFormatter->PutEntry(sFormat, - nCheckPos, - nType, - nFormat, - ODF_FORMDATE_CURRENTDATE_LANGUAGE); - } - if (bValidFormat) - { - pFormatter->IsNumberFormat(sCurrentDate, nFormat, dCurrentDate); - } - - // Then convert the date to a fromatter string - nFormat = pFormatter->GetEntryKey(sDateFormat, LanguageTag(sLang).getLanguageType()); - bValidFormat = nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND; - if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND) - { - sal_Int32 nCheckPos = 0; - short nType; - OUString sNonConstDateFormat = sDateFormat; - bValidFormat = pFormatter->PutEntry(sNonConstDateFormat, - nCheckPos, - nType, - nFormat, - LanguageTag(sLang).getLanguageType()); - } + sal_Int32 nCheckPos = 0; + short nType; + OUString sFormat = ODF_FORMDATE_CURRENTDATE_FORMAT; + pFormatter->PutEntry(sFormat, + nCheckPos, + nType, + nFormat, + ODF_FORMDATE_CURRENTDATE_LANGUAGE); + } + if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND) + { + pFormatter->IsNumberFormat(sCurrentDate, nFormat, dCurrentDate); + } - OUString sOutput; - if (bValidFormat) - { - Color* pCol = nullptr; - pFormatter->GetOutputString(dCurrentDate, nFormat, sOutput, &pCol, false); - } + // Then convert the date to a fromatter string + nFormat = pFormatter->GetEntryKey(sDateFormat, LanguageTag(sLang).getLanguageType()); + if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND) + { + sal_Int32 nCheckPos = 0; + short nType; + OUString sNonConstDateFormat = sDateFormat; + pFormatter->PutEntry(sNonConstDateFormat, + nCheckPos, + nType, + nFormat, + LanguageTag(sLang).getLanguageType()); + } - RunText(sOutput); + OUString sOutput; + if (nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND) + { + Color* pCol = nullptr; + pFormatter->GetOutputString(dCurrentDate, nFormat, sOutput, &pCol, false); } + + RunText(sOutput); } m_pSerializer->endElementNS(XML_w, XML_r); diff --git a/sw/source/ui/fldui/DateFormFieldDialog.cxx b/sw/source/ui/fldui/DateFormFieldDialog.cxx index 4a80c313b637..45c607b0084c 100644 --- a/sw/source/ui/fldui/DateFormFieldDialog.cxx +++ b/sw/source/ui/fldui/DateFormFieldDialog.cxx @@ -79,17 +79,15 @@ void DateFormFieldDialog::InitControls() { LanguageType aLangType = LanguageTag(sLang).getLanguageType(); sal_uInt32 nFormatKey = m_pNumberFormatter->GetEntryKey(sFormatString, aLangType); - bool bValidFormat = nFormatKey != NUMBERFORMAT_ENTRY_NOT_FOUND; if (nFormatKey == NUMBERFORMAT_ENTRY_NOT_FOUND) { sal_Int32 nCheckPos = 0; short nType; - bValidFormat - = m_pNumberFormatter->PutEntry(sFormatString, nCheckPos, nType, nFormatKey, - LanguageTag(sLang).getLanguageType()); + m_pNumberFormatter->PutEntry(sFormatString, nCheckPos, nType, nFormatKey, + LanguageTag(sLang).getLanguageType()); } - if (aLangType != LANGUAGE_DONTKNOW && bValidFormat) + if (aLangType != LANGUAGE_DONTKNOW && nFormatKey != NUMBERFORMAT_ENTRY_NOT_FOUND) { if (m_xFormatLB->GetCurLanguage() == aLangType) { _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
