summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsushil_shinde <sushil.shinde@synerzip.com>2014-06-26 15:40:05 +0530
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-07-03 14:58:07 +0200
commit9948d9566e86b190e74a62e63f273f5fa0eb8929 (patch)
treeb6ad37623aa1d1b6148d351bb1e6549c65ac2ec5
parent82f291d2f7630938ce6ca740f904cab07d1ff90d (diff)
fdo#77129 DOCX:Only Six pages were loaded out of 60 pages.
- Footer reference was inside TOC field. - m_bStartTOC flag was enabled while handling TOC from document. - Since m_bStartTOC was enabled while importing footer it was inserting extra textcursors entries to m_aTextAppendStack. - Due to bad entries in textappendstack, footer was not popped properly. - Because of this all lost data after sixth page was inserted into footer node and it was not visible on page. - Added new flag to differentiate TOC from main document and Header or Footer. Conflicts: sw/qa/extras/ooxmlexport/ooxmlexport.cxx Reviewed on: https://gerrit.libreoffice.org/9930 Change-Id: I5288f5c313c890e0fdddf3c60c4609eab30edde6
-rw-r--r--sw/qa/extras/ooxmlexport/data/fdo77129.docxbin0 -> 106404 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport.cxx12
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx42
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx1
4 files changed, 40 insertions, 15 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/fdo77129.docx b/sw/qa/extras/ooxmlexport/data/fdo77129.docx
new file mode 100644
index 000000000000..b0661e9362b2
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/fdo77129.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 0d03eb40693e..30ced5b81757 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -3666,6 +3666,18 @@ DECLARE_OOXMLEXPORT_TEST(testfdo80097, "fdo80097.docx")
assertXPath(pXmlDocument, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:tbl/w:tr[1]/w:tc[1]/w:tcPr/w:tcBorders/w:insideV[@w:color = '00000A']", 1);
}
+DECLARE_OOXMLEXPORT_TEST(testFdo77129, "fdo77129.docx")
+{
+ // The problem was that text after TOC field was missing if footer reference comes in field.
+ xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+
+ if (!pXmlDoc)
+ return;
+
+ // Data was lost from this paragraph.
+ assertXPathContent(pXmlDoc, "/w:document/w:body/w:p[5]/w:r[1]/w:t", "Abstract");
+}
+
DECLARE_OOXMLEXPORT_TEST(testfdo79969_xlsm, "fdo79969_xlsm.docx")
{
// This UT for DOCX embedded with excel work sheet.
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 8bd5900ad0cd..9457568a6f8d 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -161,6 +161,7 @@ DomainMapper_Impl::DomainMapper_Impl(
m_bIsColumnBreakDeferred( false ),
m_bIsPageBreakDeferred( false ),
m_bStartTOC(false),
+ m_bStartTOCHeaderFooter(false),
m_bStartedTOC(false),
m_bStartIndex(false),
m_bStartBibliography(false),
@@ -1183,26 +1184,33 @@ void DomainMapper_Impl::appendTextPortion( const OUString& rString, PropertyMapP
{
if (m_bStartTOC || m_bStartIndex || m_bStartBibliography || m_bStartGenericField)
{
- m_bStartedTOC = true;
- uno::Reference< text::XTextCursor > xTOCTextCursor;
- xTOCTextCursor = xTextAppend->getEnd()->getText( )->createTextCursor( );
- xTOCTextCursor->gotoEnd(false);
- if (xTOCTextCursor.is())
+ if(m_bInHeaderFooterImport && !m_bStartTOCHeaderFooter)
{
- if (m_bStartIndex || m_bStartBibliography || m_bStartGenericField)
- xTOCTextCursor->goLeft(1, false);
- xTextRange = xTextAppend->insertTextPortion(rString, pValues, xTOCTextCursor);
- m_bTextInserted = true;
- xTOCTextCursor->gotoRange(xTextRange->getEnd(), true);
- mxTOCTextCursor = xTOCTextCursor;
+ xTextRange = xTextAppend->appendTextPortion(rString, pValues);
}
else
{
- xTextRange = xTextAppend->appendTextPortion(rString, pValues);
- xTOCTextCursor = xTextAppend->createTextCursor();
- xTOCTextCursor->gotoRange(xTextRange->getEnd(), false);
+ m_bStartedTOC = true;
+ uno::Reference< text::XTextCursor > xTOCTextCursor;
+ xTOCTextCursor = xTextAppend->getEnd()->getText( )->createTextCursor( );
+ xTOCTextCursor->gotoEnd(false);
+ if (xTOCTextCursor.is())
+ {
+ if (m_bStartIndex || m_bStartBibliography || m_bStartGenericField)
+ xTOCTextCursor->goLeft(1, false);
+ xTextRange = xTextAppend->insertTextPortion(rString, pValues, xTOCTextCursor);
+ m_bTextInserted = true;
+ xTOCTextCursor->gotoRange(xTextRange->getEnd(), true);
+ mxTOCTextCursor = xTOCTextCursor;
+ }
+ else
+ {
+ xTextRange = xTextAppend->appendTextPortion(rString, pValues);
+ xTOCTextCursor = xTextAppend->createTextCursor();
+ xTOCTextCursor->gotoRange(xTextRange->getEnd(), false);
+ }
+ m_aTextAppendStack.push(TextAppendContext(xTextAppend, xTOCTextCursor));
}
- m_aTextAppendStack.push(TextAppendContext(xTextAppend, xTOCTextCursor));
}
else
xTextRange = xTextAppend->appendTextPortion(rString, pValues);
@@ -2901,6 +2909,8 @@ void DomainMapper_Impl::handleToc
{
OUString sValue;
m_bStartTOC = true;
+ if(m_bInHeaderFooterImport)
+ m_bStartTOCHeaderFooter = true;
bool bTableOfFigures = false;
bool bHyperlinks = false;
bool bFromOutline = false;
@@ -4104,6 +4114,8 @@ void DomainMapper_Impl::PopFieldContext()
m_bStartTOC = false;
m_bStartIndex = false;
m_bStartBibliography = false;
+ if(m_bInHeaderFooterImport && m_bStartTOCHeaderFooter)
+ m_bStartTOCHeaderFooter = false;
}
else
{
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index a09e8b99671b..778d7b0a7804 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -320,6 +320,7 @@ private:
bool m_bIsColumnBreakDeferred;
bool m_bIsPageBreakDeferred;
bool m_bStartTOC;
+ bool m_bStartTOCHeaderFooter;
/// If we got any text that is the pre-rendered result of the TOC field.
bool m_bStartedTOC;
bool m_bStartIndex;