From 2127581728ae61eca7470b288c21d1c02754fb5b Mon Sep 17 00:00:00 2001 From: Justin Luth Date: Thu, 16 Aug 2018 15:49:37 +0300 Subject: tdf#119232 ww8import: even page means default to start on page 2 I didn't see this mentioned in the sprm documentation, but that is how MS Word seems to implement it. Change-Id: I5b86ecf99a884e768877cdb0e71f43cdb9f2ad76 Reviewed-on: https://gerrit.libreoffice.org/59221 Reviewed-by: Justin Luth Tested-by: Jenkins Reviewed-by: Miklos Vajna --- sw/qa/extras/ww8export/data/tdf119232_startEvenPage.doc | Bin 0 -> 30720 bytes sw/qa/extras/ww8export/ww8export2.cxx | 5 +++++ sw/source/filter/ww8/ww8par6.cxx | 12 +++++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 sw/qa/extras/ww8export/data/tdf119232_startEvenPage.doc diff --git a/sw/qa/extras/ww8export/data/tdf119232_startEvenPage.doc b/sw/qa/extras/ww8export/data/tdf119232_startEvenPage.doc new file mode 100644 index 000000000000..c50bf46c0b58 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf119232_startEvenPage.doc differ diff --git a/sw/qa/extras/ww8export/ww8export2.cxx b/sw/qa/extras/ww8export/ww8export2.cxx index d540cece3c6d..078079f969ec 100644 --- a/sw/qa/extras/ww8export/ww8export2.cxx +++ b/sw/qa/extras/ww8export/ww8export2.cxx @@ -282,6 +282,11 @@ DECLARE_WW8EXPORT_TEST(testTdf106174_rtlParaAlign, "tdf106174_rtlParaAlign.docx" CPPUNIT_ASSERT_EQUAL(sal_Int16(style::ParagraphAdjust_RIGHT), getProperty(getParagraph(14), "ParaAdjust")); } +DECLARE_WW8EXPORT_TEST(testTdf119232_startEvenPage, "tdf119232_startEvenPage.doc") +{ + CPPUNIT_ASSERT_EQUAL(sal_Int16(2), getProperty(getParagraph(1), "PageNumberOffset")); +} + DECLARE_WW8EXPORT_TEST(testTdf104805, "tdf104805.doc") { uno::Reference xPropertySet(getStyles("NumberingStyles")->getByName("WW8Num1"), uno::UNO_QUERY); diff --git a/sw/source/filter/ww8/ww8par6.cxx b/sw/source/filter/ww8/ww8par6.cxx index cc43a90d4077..7844ef2a07e9 100644 --- a/sw/source/filter/ww8/ww8par6.cxx +++ b/sw/source/filter/ww8/ww8par6.cxx @@ -874,6 +874,8 @@ void wwSectionManager::CreateSep(const long nTextPos) const sal_uInt16* pIds = eVer <= ww::eWW2 ? aVer2Ids0 : eVer <= ww::eWW7 ? aVer67Ids0 : aVer8Ids0; + SprmResult aRes = pSep->HasSprm(pIds[0]); + const sal_uInt8* pSprmBkc = aRes.pSprm; if (!maSegments.empty()) { // Type of break: break codes are: @@ -882,8 +884,6 @@ void wwSectionManager::CreateSep(const long nTextPos) // 2 New page // 3 Even page // 4 Odd page - SprmResult aRes = pSep->HasSprm(pIds[0]); - const sal_uInt8* pSprmBkc = aRes.pSprm; if (pSprmBkc && aRes.nRemainingData >= 1) aNewSection.maSep.bkc = *pSprmBkc; } @@ -1036,7 +1036,13 @@ void wwSectionManager::CreateSep(const long nTextPos) aNewSection.maSep.pgnStart = ReadUSprm( pSep, pIds[7], 0 ); - SprmResult aRes; + // if the document's first page number is unspecified, but it starts with an even page break, + // then set the first page number to two + if ( maSegments.empty() && !aNewSection.maSep.fPgnRestart && pSprmBkc && *pSprmBkc == 3 ) + { + aNewSection.maSep.pgnStart = 2; + aNewSection.maSep.fPgnRestart = 1; + } if (eVer >= ww::eWW6) { -- cgit v1.2.3