sw/qa/extras/txtexport/data/UTF16LECRLF.txt |binary sw/qa/extras/txtexport/data/UTF8BOMCRLF.txt | 2 ++ sw/qa/extras/txtexport/txtexport.cxx | 19 +++++++++++++++++++ sw/source/filter/ascii/parasc.cxx | 12 ++++++++++++ sw/source/filter/ascii/wrtasc.cxx | 19 +++++++++++++++++++ sw/source/filter/ascii/wrtasc.hxx | 1 + sw/source/ui/dialog/ascfldlg.cxx | 16 +++++++++++++++- 7 files changed, 68 insertions(+), 1 deletion(-)
New commits: commit cb490979ac238011efa27e0fb18fe62c13329d1f Author: tobias <tobias.sch...@hotmail.com> AuthorDate: Thu Jun 3 16:37:54 2021 +0200 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Fri Jun 4 23:45:05 2021 +0200 tdf#120574 Store Ascii Options for Later Saving store auto detected/configured ascii options in medium. use stored ascii settings for saving and text encoding settings dialog. Change-Id: I88e2d54923bfcf5d7c460ef3b89c36fc002c5097 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116678 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/sw/qa/extras/txtexport/data/UTF16LECRLF.txt b/sw/qa/extras/txtexport/data/UTF16LECRLF.txt new file mode 100644 index 000000000000..be232521eafc Binary files /dev/null and b/sw/qa/extras/txtexport/data/UTF16LECRLF.txt differ diff --git a/sw/qa/extras/txtexport/data/UTF8BOMCRLF.txt b/sw/qa/extras/txtexport/data/UTF8BOMCRLF.txt new file mode 100644 index 000000000000..eed02bb9ff59 --- /dev/null +++ b/sw/qa/extras/txtexport/data/UTF8BOMCRLF.txt @@ -0,0 +1,2 @@ +フー +バー diff --git a/sw/qa/extras/txtexport/txtexport.cxx b/sw/qa/extras/txtexport/txtexport.cxx index 3bacc1975c6e..a5f989cb6689 100644 --- a/sw/qa/extras/txtexport/txtexport.cxx +++ b/sw/qa/extras/txtexport/txtexport.cxx @@ -64,6 +64,25 @@ DECLARE_TXTEXPORT_TEST(testBullets, "bullets.odt") CPPUNIT_ASSERT_EQUAL(aExpected, aData); } +DECLARE_TXTEXPORT_TEST(testTdf120574_utf8, "UTF8BOMCRLF.txt") +{ + SvMemoryStream aMemoryStream; + SvFileStream aStream(maTempFile.GetURL(), StreamMode::READ); + aStream.ReadStream(aMemoryStream); + const char* pData = static_cast<const char*>(aMemoryStream.GetData()); + OString aData(std::string_view(pData, aMemoryStream.GetSize())); + CPPUNIT_ASSERT_EQUAL(OString(u8"\uFEFFフー\r\nバー\r\n"), aData); +} + +DECLARE_TXTEXPORT_TEST(testTdf120574_utf16le, "UTF16LECRLF.txt") +{ + SvMemoryStream aMemoryStream; + SvFileStream aStream(maTempFile.GetURL(), StreamMode::READ); + aStream.ReadStream(aMemoryStream); + const sal_Unicode* pData = static_cast<const sal_Unicode*>(aMemoryStream.GetData()); + OUString aData(pData, aMemoryStream.GetSize() / sizeof(sal_Unicode)); + CPPUNIT_ASSERT_EQUAL(OUString(u"\uFEFFフー\r\nバー\r\n"), aData); +} CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/ascii/parasc.cxx b/sw/source/filter/ascii/parasc.cxx index 41fc9457a325..8cdfa91ba6b3 100644 --- a/sw/source/filter/ascii/parasc.cxx +++ b/sw/source/filter/ascii/parasc.cxx @@ -21,7 +21,9 @@ #include <tools/stream.hxx> #include <hintids.hxx> +#include <sfx2/docfile.hxx> #include <sfx2/printer.hxx> +#include <sfx2/sfxsids.hrc> #include <editeng/fontitem.hxx> #include <editeng/langitem.hxx> #include <editeng/formatbreakitem.hxx> @@ -53,6 +55,7 @@ class SwASCIIParser SvStream& m_rInput; std::unique_ptr<char[]> m_pArr; const SwAsciiOptions& m_rOpt; + SwAsciiOptions m_usedAsciiOptions; std::unique_ptr<SfxItemSet> m_pItemSet; tools::Long m_nFileSize; SvtScriptType m_nScript; @@ -69,6 +72,7 @@ public: bool bReadNewDoc, const SwAsciiOptions& rOpts ); ErrCode CallParser(); + SwAsciiOptions GetUsedAsciiOptions() {return m_usedAsciiOptions;}; }; } @@ -86,6 +90,12 @@ ErrCode AsciiReader::Read( SwDoc& rDoc, const OUString&, SwPaM &rPam, const OUSt !m_bInsertMode, m_aOption.GetASCIIOpts() )); ErrCode nRet = xParser->CallParser(); + OUString optionsString; + xParser->GetUsedAsciiOptions().WriteUserData(optionsString); + + if(m_pMedium != nullptr && m_pMedium->GetItemSet() != nullptr) + m_pMedium->GetItemSet()->Put(SfxStringItem(SID_FILE_FILTEROPTIONS, optionsString)); + xParser.reset(); // after Read reset the options m_aOption.ResetASCIIOpts(); @@ -97,6 +107,7 @@ SwASCIIParser::SwASCIIParser(SwDoc& rD, const SwPaM& rCursor, SvStream& rIn, boo : m_rDoc(rD) , m_rInput(rIn) , m_rOpt(rOpts) + , m_usedAsciiOptions(rOpts) , m_nFileSize(0) , m_nScript(SvtScriptType::NONE) , m_bNewDoc(bReadNewDoc) @@ -280,6 +291,7 @@ ErrCode SwASCIIParser::ReadChars() m_rInput.SeekRel(-(tools::Long(nOrig))); pUseMe=&aEmpty; } + m_usedAsciiOptions = *pUseMe; rtl_TextToUnicodeConverter hConverter=nullptr; rtl_TextToUnicodeContext hContext=nullptr; diff --git a/sw/source/filter/ascii/wrtasc.cxx b/sw/source/filter/ascii/wrtasc.cxx index 2d530e7531b5..f122e51f6d5c 100644 --- a/sw/source/filter/ascii/wrtasc.cxx +++ b/sw/source/filter/ascii/wrtasc.cxx @@ -27,6 +27,8 @@ #include <frmfmt.hxx> #include "wrtasc.hxx" #include <frameformats.hxx> +#include <sfx2/docfile.hxx> +#include <sfx2/sfxsids.hrc> #include <strings.hrc> @@ -202,6 +204,23 @@ ErrCode SwASCWriter::WriteStream() return ERRCODE_NONE; } +void SwASCWriter::SetupFilterOptions(SfxMedium& rMedium) +{ + const SfxItemSet* pSet = rMedium.GetItemSet(); + if( nullptr != pSet ) + { + const SfxPoolItem* pItem; + if( SfxItemState::SET == pSet->GetItemState( SID_FILE_FILTEROPTIONS, true, &pItem ) ) + { + SwAsciiOptions aOpt; + OUString sItemOpt; + sItemOpt = static_cast<const SfxStringItem*>(pItem)->GetValue(); + aOpt.ReadUserData(sItemOpt); + SetAsciiOptions(aOpt); + } + } +} + void GetASCWriter( const OUString& rFltNm, [[maybe_unused]] const OUString& /*rBaseURL*/, WriterRef& xRet ) { diff --git a/sw/source/filter/ascii/wrtasc.hxx b/sw/source/filter/ascii/wrtasc.hxx index 8be5e5352f61..b2a91c589599 100644 --- a/sw/source/filter/ascii/wrtasc.hxx +++ b/sw/source/filter/ascii/wrtasc.hxx @@ -36,6 +36,7 @@ public: SwASCWriter(const OUString& rFilterName); virtual ~SwASCWriter() override; + void SetupFilterOptions(SfxMedium& rMedium) override; const OUString& GetLineEnd() const { return m_sLineEnd; } }; diff --git a/sw/source/ui/dialog/ascfldlg.cxx b/sw/source/ui/dialog/ascfldlg.cxx index afd6f1892474..c46faff19fde 100644 --- a/sw/source/ui/dialog/ascfldlg.cxx +++ b/sw/source/ui/dialog/ascfldlg.cxx @@ -29,6 +29,7 @@ #include <unotools/viewoptions.hxx> #include <sfx2/sfxsids.hrc> #include <sfx2/printer.hxx> +#include <sfx2/docfile.hxx> #include <svl/languageoptions.hxx> #include <editeng/langitem.hxx> #include <swtypes.hxx> @@ -77,6 +78,16 @@ SwAsciiFilterDlg::SwAsciiFilterDlg( weld::Window* pParent, SwDocShell& rDocSh, aUserItem >>= m_sExtraData; } + const SfxPoolItem* pItem; + OUString sAsciiOptions; + if( rDocSh.GetMedium() != nullptr && + rDocSh.GetMedium()->GetItemSet() != nullptr && + SfxItemState::SET == rDocSh.GetMedium()->GetItemSet()->GetItemState( + SID_FILE_FILTEROPTIONS, true, &pItem )) + { + sAsciiOptions = static_cast<const SfxStringItem*>(pItem)->GetValue(); + } + const OUString sFindNm = OUString::createFromAscii( pStream ? sDialogImpExtraData : sDialogExpExtraData); @@ -87,11 +98,14 @@ SwAsciiFilterDlg::SwAsciiFilterDlg( weld::Window* pParent, SwDocShell& rDocSh, sal_Int32 nEnd = m_sExtraData.indexOf( cDialogExtraDataClose, nStt ); if( -1 != nEnd ) { - aOpt.ReadUserData(m_sExtraData.copy(nStt, nEnd - nStt)); + if(sAsciiOptions.isEmpty()) + sAsciiOptions = m_sExtraData.copy(nStt, nEnd - nStt); nStt -= nDialogExtraDataLen; m_sExtraData = m_sExtraData.replaceAt(nStt, nEnd - nStt + 1, ""); } } + if(!sAsciiOptions.isEmpty()) + aOpt.ReadUserData(sAsciiOptions); } // read the first chars and check the charset, (language - with L&H) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits