[Libreoffice-commits] core.git: sw/qa sw/source
tobias (via logerrit)
logerrit at kemper.freedesktop.org
Fri Jun 4 21:45:45 UTC 2021
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.schulz at hotmail.com>
AuthorDate: Thu Jun 3 16:37:54 2021 +0200
Commit: Mike Kaganski <mike.kaganski at 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.kaganski at 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)
More information about the Libreoffice-commits
mailing list