[Libreoffice-commits] core.git: sw/qa sw/source
Miklos Vajna
vmiklos at collabora.co.uk
Mon Oct 6 08:13:40 PDT 2014
sw/qa/extras/ooxmlexport/data/anchor-position.docx |binary
sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 9 +++++++++
sw/qa/extras/ooxmlexport/ooxmlexport5.cxx | 2 +-
sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx | 2 +-
sw/source/core/txtnode/ndtxt.cxx | 16 ++++++++++++++++
5 files changed, 27 insertions(+), 2 deletions(-)
New commits:
commit 0a4d77f35e96e4dfdf69cc5ceb788ddaa849084c
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Mon Oct 6 15:26:35 2014 +0200
SwTxtNode::Update: don't move anchors at insert position
Use cases:
1) User of the XTextAppend API's uses appendTextPortion(), then
appendTextContent(), then appendTextPortion() again. It's expected that
the text content will be in the middle of the paragraph, but before, it
was at the end of it.
It's possible to work this around by inserting the text contents only at
the end of the paragraph (like it's done for ODF import in
XMLParaContext::~XMLParaContext()), but probably it's not a good idea to
copy&paste this workaround in all the import filters.
2) User types some characters in a new document, then inserts a picture,
and sets anchor type to at-char. Now the anchor point is set to the end
of the paragraph, but it's impossible to type anything after that
character.
To be fair, now it's not possible to type something *before* the anchor
point, if it's at the first character, but hopefully that's less of an
issue, since setting the anchor type to at-char sets it to the end of
the paragraph, not at the start of it.
Change-Id: Ia8b33e8880aae86f62fae09cd5ac1cf82c83320f
diff --git a/sw/qa/extras/ooxmlexport/data/anchor-position.docx b/sw/qa/extras/ooxmlexport/data/anchor-position.docx
new file mode 100644
index 0000000..b210ee9
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/anchor-position.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index d1ef8ae..487728d 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -403,6 +403,15 @@ DECLARE_OOXMLEXPORT_TEST(testTableStyleBorderExport, "table-style-border-export.
CPPUNIT_ASSERT_EQUAL(sal_Int32(0x8064A2), getProperty<table::BorderLine2>(xCell, "BottomBorder").Color);
}
+DECLARE_OOXMLEXPORT_TEST(testAnchorPosition, "anchor-position.docx")
+{
+ // The problem was that the at-char anchored picture was at the end of the
+ // paragraph, so there were only two postions: a Text, then a Frame one.
+ CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(getRun(getParagraph(1), 1), "TextPortionType"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Frame"), getProperty<OUString>(getRun(getParagraph(1), 2), "TextPortionType"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Text"), getProperty<OUString>(getRun(getParagraph(1), 3), "TextPortionType"));
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
index 21b8976..7c36ee9 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
@@ -466,7 +466,7 @@ DECLARE_OOXMLEXPORT_TEST(testFDO79915, "fdo79915.docx")
if (!pXmlDoc)
return;
- assertXPathContent(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[8]/w:t", "How much buoyancy does the water provide?");
+ assertXPathContent(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[10]/w:t", "How much buoyancy does the water provide?");
}
DECLARE_OOXMLEXPORT_TEST(testfdo79817, "fdo79817.docx")
diff --git a/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx
index dae2b59..d636f9d 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx
@@ -902,7 +902,7 @@ DECLARE_OOXMLEXPORT_TEST(testOuterShdw,"testOuterShdw.docx")
xmlDocPtr pXmlDoc = parseExport("word/document.xml");
if (!pXmlDoc)
return;
- assertXPath(pXmlDoc, "/w:document[1]/w:body[1]/w:p[1]/w:r[3]/mc:AlternateContent[1]/mc:Choice[1]/w:drawing[1]/wp:anchor[1]/a:graphic[1]/a:graphicData[1]/wps:wsp[1]/wps:spPr[1]/a:effectLst[1]/a:outerShdw[1]", "dist", "57811035");
+ assertXPath(pXmlDoc, "//mc:AlternateContent[1]/mc:Choice[1]/w:drawing[1]/wp:anchor[1]/a:graphic[1]/a:graphicData[1]/wps:wsp[1]/wps:spPr[1]/a:effectLst[1]/a:outerShdw[1]", "dist", "57811035");
}
DECLARE_OOXMLEXPORT_TEST(testExtentValue, "fdo74605.docx")
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index 83f6c98..5f9f95c 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -1097,6 +1097,22 @@ void SwTxtNode::Update(
bSortMarks = bAtLeastOneBookmarkMoved && bAtLeastOneExpandedBookmarkAtInsertionPosition;
}
+
+ // at-char anchored flys shouldn't be moved, either.
+ const SwFrmFmts& rFmts = *GetDoc()->GetSpzFrmFmts();
+ for (SwFrmFmts::const_iterator pFmt = rFmts.begin(); pFmt != rFmts.end(); ++pFmt)
+ {
+ const SwFmtAnchor& rAnchor = (*pFmt)->GetAnchor();
+ const SwPosition* pCntntAnchor = rAnchor.GetCntntAnchor();
+ if (rAnchor.GetAnchorId() == FLY_AT_CHAR && pCntntAnchor)
+ {
+ // The fly is at-char anchored and has an anchor position.
+ SwIndex& rEndIdx = const_cast<SwIndex&>(pCntntAnchor->nContent);
+ if (&pCntntAnchor->nNode.GetNode() == this && rEndIdx.GetIndex() == rPos.GetIndex())
+ // The anchor position is exactly our insert position.
+ rEndIdx.Assign(&aTmpIdxReg, rEndIdx.GetIndex());
+ }
+ }
}
// base class
More information about the Libreoffice-commits
mailing list