sw/qa/extras/ww8import/data/bnc787942.doc |binary sw/qa/extras/ww8import/ww8import.cxx | 7 +++++++ sw/source/filter/ww8/ww8par.hxx | 2 ++ sw/source/filter/ww8/ww8par6.cxx | 14 +++++++++++++- 4 files changed, 22 insertions(+), 1 deletion(-)
New commits: commit 5a454e5ed3f16da01b27529b4355e60ce4c817b6 Author: LuboÅ¡ LuÅák <l.lu...@collabora.com> Date: Sun Aug 17 18:12:16 2014 +0200 fix reading a .doc that has frame anchored to the end of page (bnc#787942) MSWord, unlike Writer, can anchor even to a page break (i.e. after the last paragraph). When this document was read, what happended was: - the last paragraph was read and the current position PaM was set to point after it - frame was read and anchored to the PaM - page break was read, making everything following be moved to the next page; including whatever ended up at the PaM position Handle this by checking for this case and inserting an extra empty paragraph before the break. This shouldn't affect layout of the page itself anyway, since the break should leave room for it (and MSWord shows a page break there if control characters are enabled, so there is room). Change-Id: Ia2a13bf5cf1c959b5aa228254365019a00a22679 (cherry picked from commit 4a1888a97eab4ead2e0bec76cd1cba410a8e7e13) Reviewed-on: https://gerrit.libreoffice.org/10952 Reviewed-by: Matúš Kukan <matus.ku...@collabora.com> Tested-by: Matúš Kukan <matus.ku...@collabora.com> diff --git a/sw/qa/extras/ww8import/data/bnc787942.doc b/sw/qa/extras/ww8import/data/bnc787942.doc new file mode 100644 index 0000000..06b2c39 Binary files /dev/null and b/sw/qa/extras/ww8import/data/bnc787942.doc differ diff --git a/sw/qa/extras/ww8import/ww8import.cxx b/sw/qa/extras/ww8import/ww8import.cxx index 6a48abf..1e99ab8 100644 --- a/sw/qa/extras/ww8import/ww8import.cxx +++ b/sw/qa/extras/ww8import/ww8import.cxx @@ -336,6 +336,13 @@ DECLARE_WW8IMPORT_TEST(testFdp80333, "fdo80333.doc") #endif +DECLARE_WW8IMPORT_TEST(testBnc787942, "bnc787942.doc") +{ + // The frame ended up on the second page instead of first. + parseDump("/root/page[1]/body/txt[4]/anchored"); +} + + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx index 9434c2e..696d103 100644 --- a/sw/source/filter/ww8/ww8par.hxx +++ b/sw/source/filter/ww8/ww8par.hxx @@ -1351,6 +1351,8 @@ private: // a document position recorded the after-position of TOC section, managed by Read_F_TOX() and End_Field() SwPaM* mpPosAfterTOC; + boost::scoped_ptr< SwPosition > lastAnchorPos; + bool mbCareFirstParaEndInToc; bool mbCareLastParaEndInToc; cp_set maTOXEndCps; diff --git a/sw/source/filter/ww8/ww8par6.cxx b/sw/source/filter/ww8/ww8par6.cxx index 0324552..14cb5b3 100644 --- a/sw/source/filter/ww8/ww8par6.cxx +++ b/sw/source/filter/ww8/ww8par6.cxx @@ -800,6 +800,18 @@ void wwSectionManager::CreateSep(const long nTxtPos, bool /*bMustHaveBreak*/) if (!pSep) return; + if (!maSegments.empty() && mrReader.lastAnchorPos.get() && *mrReader.lastAnchorPos == *mrReader.pPaM->GetPoint()) + { + bool insert = true; + SwPaM pam( *mrReader.lastAnchorPos ); + if( pam.Move(fnMoveBackward, fnGoNode)) + if( SwTxtNode* txtNode = pam.GetPoint()->nNode.GetNode().GetTxtNode()) + if( txtNode->Len() == 0 ) + insert = false; + if( insert ) + mrReader.AppendTxtNode(*mrReader.pPaM->GetPoint()); + } + ww::WordVersion eVer = mrReader.GetFib().GetFIBVersion(); // M.M. Create a linked section if the WkbPLCF @@ -1739,7 +1751,6 @@ WW8SwFlyPara::WW8SwFlyPara( SwPaM& rPaM, const sal_Int32 nIniFlyDx, const sal_Int32 nIniFlyDy ) { - (void) rPaM; (void) nPgLeft; memset( this, 0, sizeof( WW8SwFlyPara ) ); // Initialisieren @@ -1807,6 +1818,7 @@ WW8SwFlyPara::WW8SwFlyPara( SwPaM& rPaM, //#i53725# - absolute positioned objects have to be // anchored at-paragraph to assure its correct anchor position. eAnchor = FLY_AT_PARA; + rIo.lastAnchorPos.reset( new SwPosition(*rPaM.GetPoint())); switch (nYBind) {
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits