diff options
author | Vasily Melenchuk <vasily.melenchuk@cib.de> | 2021-09-27 19:00:49 +0300 |
---|---|---|
committer | Michael Stahl <michael.stahl@allotropia.de> | 2021-10-01 12:09:02 +0200 |
commit | 732b3fd5bdf17f09b5f9304b470b741e5483eab1 (patch) | |
tree | a6d4f6ce91a89f16b163de589232e31dbe17baca | |
parent | 5836cd37b6d292b1b4e72d5a5a6dc9029c5cf730 (diff) |
tdf#144437: rtf export: bookmark position is written to current run
Bookmark was written to not current position thus did appear not at
desired place inside paragraph.
Change-Id: I917f74c95666efd38c5befeb927b75783915b2e8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122722
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
-rw-r--r-- | sw/qa/extras/rtfexport/data/tdf144437.odt | bin | 0 -> 8514 bytes | |||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport5.cxx | 20 | ||||
-rw-r--r-- | sw/source/filter/ww8/rtfattributeoutput.cxx | 12 |
3 files changed, 26 insertions, 6 deletions
diff --git a/sw/qa/extras/rtfexport/data/tdf144437.odt b/sw/qa/extras/rtfexport/data/tdf144437.odt Binary files differnew file mode 100644 index 000000000000..ef303aa7c521 --- /dev/null +++ b/sw/qa/extras/rtfexport/data/tdf144437.odt diff --git a/sw/qa/extras/rtfexport/rtfexport5.cxx b/sw/qa/extras/rtfexport/rtfexport5.cxx index 322084db95a1..25f43e1148bd 100644 --- a/sw/qa/extras/rtfexport/rtfexport5.cxx +++ b/sw/qa/extras/rtfexport/rtfexport5.cxx @@ -1282,6 +1282,26 @@ DECLARE_RTFEXPORT_TEST(testTdf138779, "tdf138779.docx") CPPUNIT_ASSERT_EQUAL(11.f, getProperty<float>(getRun(getParagraph(2), 14), "CharHeight")); } +DECLARE_RTFEXPORT_TEST(testTdf144437, "tdf144437.odt") +{ + SvStream* pStream = maTempFile.GetStream(StreamMode::READ); + CPPUNIT_ASSERT(pStream); + OString aRtfContent(read_uInt8s_ToOString(*pStream, pStream->TellEnd())); + + sal_Int32 nTextEndPos = aRtfContent.indexOf("Bookmark here->", 0) + 14; + CPPUNIT_ASSERT_MESSAGE("Para content wasn't found in file", nTextEndPos > 0); + + sal_Int32 nBmkStartPos = aRtfContent.indexOf("{\\*\\bkmkstart bookmark}", 0); + CPPUNIT_ASSERT_MESSAGE("Bookmark start wasn't found in file", nBmkStartPos > 0); + + sal_Int32 nBmkEndPos = aRtfContent.indexOf("{\\*\\bkmkend bookmark}", 0); + CPPUNIT_ASSERT_MESSAGE("Bookmark end wasn't found in file", nBmkEndPos > 0); + + CPPUNIT_ASSERT_MESSAGE("Bookmark started in wrong position", nBmkStartPos > nTextEndPos); + CPPUNIT_ASSERT_MESSAGE("Bookmark ended in wrong position", nBmkEndPos > nTextEndPos); + CPPUNIT_ASSERT_MESSAGE("Bookmark start & end are wrong", nBmkEndPos > nBmkStartPos); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx index 907c035b5ffc..b821d632d18a 100644 --- a/sw/source/filter/ww8/rtfattributeoutput.cxx +++ b/sw/source/filter/ww8/rtfattributeoutput.cxx @@ -1724,17 +1724,17 @@ void RtfAttributeOutput::WriteBookmarks_Impl(std::vector<OUString>& rStarts, { for (const auto& rStart : rStarts) { - m_aRun->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_BKMKSTART " "); - m_aRun->append(msfilter::rtfutil::OutString(rStart, m_rExport.GetCurrentEncoding())); - m_aRun->append('}'); + m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_BKMKSTART " "); + m_aRunText->append(msfilter::rtfutil::OutString(rStart, m_rExport.GetCurrentEncoding())); + m_aRunText->append('}'); } rStarts.clear(); for (const auto& rEnd : rEnds) { - m_aRun->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_BKMKEND " "); - m_aRun->append(msfilter::rtfutil::OutString(rEnd, m_rExport.GetCurrentEncoding())); - m_aRun->append('}'); + m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_BKMKEND " "); + m_aRunText->append(msfilter::rtfutil::OutString(rEnd, m_rExport.GetCurrentEncoding())); + m_aRunText->append('}'); } rEnds.clear(); } |