[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx |6 ++ writerfilter/qa/cppunittests/dmapper/data/fdo78333-1-minimized.docx |binary writerfilter/source/dmapper/DomainMapper.cxx| 26 +++--- writerfilter/source/dmapper/SdtHelper.cxx |1 4 files changed, 16 insertions(+), 17 deletions(-) New commits: commit 7c4dba1deffd81f647a4a3be7a79f68f3bf9f1ba Author: Jaume Pujantell AuthorDate: Wed Nov 22 11:59:09 2023 +0100 Commit: Miklos Vajna CommitDate: Thu Nov 23 08:27:57 2023 +0100 fix a regression crash from commit 5082d50 The commit generated crashes in the crashtest documents 7711 bugtrackers/docx/fdo78333-1.docx and 695 forums/docx/forum-mso-en-4096.docx. This was due to "m_xFieldStartRange", the start of the text portion of the block SDT, being recorded too early. This led to including characters that shouldn't be there in the generated content control. This patch moves the calls to setFieldStartRange to just before the first appendTextPortion call. Change-Id: I7230346fee9a37ebac70beb9bcafd9d7b612eb00 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159816 Tested-by: Jenkins Reviewed-by: Miklos Vajna diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx index 7cafcd19f280..ec771ba0f1b4 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx @@ -149,6 +149,12 @@ CPPUNIT_TEST_FIXTURE(Test, testSdtBlockText) xContentControlProps->getPropertyValue("Alias") >>= aAlias; CPPUNIT_ASSERT_EQUAL(OUString("myalias"), aAlias); } + +CPPUNIT_TEST_FIXTURE(Test, testFdo78333) +{ +// just care that it doesn't crash/assert +loadFromURL(u"fdo78333-1-minimized.docx"); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/fdo78333-1-minimized.docx b/writerfilter/qa/cppunittests/dmapper/data/fdo78333-1-minimized.docx new file mode 100644 index ..0c4a5bc67288 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/fdo78333-1-minimized.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index e2ef4ec4a4b2..70fc7820844c 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -1192,9 +1192,6 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) m_pImpl->PushSdt(); break; } -if (m_pImpl->m_pSdtHelper->getControlType() == SdtControlType::plainText -&& GetCurrentTextRange().is()) - m_pImpl->m_pSdtHelper->setFieldStartRange(GetCurrentTextRange()->getEnd()); m_pImpl->SetSdt(true); } break; @@ -4229,7 +4226,6 @@ void DomainMapper::lcl_utext(const sal_Unicode *const data_, size_t len) { m_pImpl->m_pSdtHelper->createPlainTextControl(); finishParagraph(); - m_pImpl->m_pSdtHelper->setFieldStartRange(GetCurrentTextRange()->getEnd()); return; } } @@ -4487,10 +4483,9 @@ void DomainMapper::lcl_utext(const sal_Unicode *const data_, size_t len) m_pImpl->clearDeferredBreaks(); } -bool bSdtBlockUnusedText -= m_pImpl->m_pSdtHelper->GetSdtType() != NS_ooxml::LN_CT_SdtRun_sdtContent - && m_pImpl->m_pSdtHelper->getControlType() == SdtControlType::plainText - && m_pImpl->m_pSdtHelper->hasUnusedText(); +bool bInSdtBlockText += m_pImpl->m_pSdtHelper->GetSdtType() == NS_ooxml::LN_CT_SdtBlock_sdtContent + && m_pImpl->m_pSdtHelper->getControlType() == SdtControlType::plainText; if (pContext && pContext->GetFootnote().is()) { pContext->GetFootnote()->setLabel( sText ); @@ -4500,32 +4495,29 @@ void DomainMapper::lcl_utext(const sal_Unicode *const data_, size_t len) } else if (m_pImpl->IsOpenFieldCommand() && !m_pImpl->IsForceGenericFields()) { -if (bSdtBlockUnusedText) +if (bInSdtBlockText && m_pImpl->m_pSdtHelper->hasUnusedText()) m_pImpl->m_pSdtHelper->createPlainTextControl(); m_pImpl->AppendFieldCommand(sText); -if (bSdtBlockUnusedText) - m_pImpl->m_pSdtHelper->setFieldStartRange(GetCurrentTextRange()->getEnd()); } else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString()) { -if (bSdtBlockUnusedText) +if (bInSdtBlockText && m_pImpl->m_pSdtHelper->hasUnusedText())
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx | 23 ++ writerfilter/qa/cppunittests/dmapper/data/floattable-header.docx |binary writerfilter/source/dmapper/DomainMapperTableHandler.cxx |4 + 3 files changed, 26 insertions(+), 1 deletion(-) New commits: commit 9704f61982360ce35983a61cca3fd00bbdf51ab6 Author: Miklos Vajna AuthorDate: Wed Oct 25 08:33:18 2023 +0200 Commit: Miklos Vajna CommitDate: Wed Oct 25 09:34:28 2023 +0200 tdf#155682 sw floattable: fix DOCX with big pictures causes endless loop The bugdoc had a floating table in the header that overlapped with full-page, as-char anchored images in the body text, leading to a layout loop. The trouble is that the body text was broken into 2 lines: the first line just had fly portions for the area where the in-header floating table was rendered and then the second line hosted the actual image. But then this image didn't fit the remaining space, so it moves to the next page. And this happened again and again. Fix the problem by keeping in-header anchored floating tables inside the boundary of the header, this way the body text still doesn't overlap with the floating table, but the space available to the body text doesn't have to contain fly portions. Which means we don't try to move the image to a next page, so there is no loop. Note that the IsFollowingTextFlow flag is already ignored in some cases (e.g. sw/qa/extras/ww8export/data/tdf128700_relativeTableWidth.doc), so this doesn't break the use-case when a footer provides an anchor position for some text on the left/right margin. In that case the footer height is still unchanged as it should be. Change-Id: Id9e80140af3123d52b0fea2f96fc19c150c8e736 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158413 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx index 34fee71efff3..5046be81e98e 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx @@ -17,6 +17,8 @@ #include #include #include +#include +#include using namespace ::com::sun::star; @@ -160,6 +162,27 @@ CPPUNIT_TEST_FIXTURE(Test, testDOCXFloatingTableNested) // split. CPPUNIT_ASSERT(bIsSplitAllowed); } + +CPPUNIT_TEST_FIXTURE(Test, testDOCXFloatingTableHeader) +{ +// Given a document with a header that has a floating table and some large images in the body +// text: +loadFromURL(u"floattable-header.docx"); + +// When breaking that document into pages: +uno::Reference xModel(mxComponent, uno::UNO_QUERY); +uno::Reference xTextViewCursorSupplier( +xModel->getCurrentController(), uno::UNO_QUERY); +uno::Reference xCursor(xTextViewCursorSupplier->getViewCursor(), + uno::UNO_QUERY); +xCursor->jumpToLastPage(); + +// Then make sure we get 2 pages: +sal_Int32 nLastPage = xCursor->getPage(); +// Without the accompanying fix in place, this test would have failed, the page count went to +// 2233 pages and then there was a layout loop. +CPPUNIT_ASSERT_EQUAL(static_cast(2), nLastPage); +} } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/qa/cppunittests/dmapper/data/floattable-header.docx b/writerfilter/qa/cppunittests/dmapper/data/floattable-header.docx new file mode 100644 index ..1042dfc0616d Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/floattable-header.docx differ diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx index 2d1c4f3b44ba..2092ba4096ae 100644 --- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx @@ -1580,9 +1580,11 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel) xTableProperties->setPropertyValue("BreakType", uno::Any(style::BreakType_NONE)); } -if (nestedTableLevel >= 2) +if (nestedTableLevel >= 2 || m_rDMapper_Impl.IsInHeaderFooter()) { // Floating tables inside a table always stay inside the cell. +// Also extend the header/footer area if needed, so an in-header floating table +// typically doesn't overlap with body test. aFrameProperties.push_back( comphelper::makePropertyValue("IsFollowingTextFlow", true)); }
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx |2 - writerfilter/source/dmapper/DomainMapper_Impl.cxx | 10 writerfilter/source/dmapper/FormControlHelper.cxx |2 - writerfilter/source/dmapper/TextEffectsHandler.cxx |2 - writerfilter/source/ooxml/OOXMLDocumentImpl.cxx|6 ++-- writerfilter/source/ooxml/OOXMLStreamImpl.cxx | 16 ++--- 6 files changed, 19 insertions(+), 19 deletions(-) New commits: commit de087da9242a5d24fcc97b42e216e5375bca3f1b Author: Stephan Bergmann AuthorDate: Thu Oct 19 10:30:41 2023 +0200 Commit: Stephan Bergmann CommitDate: Sat Oct 21 00:00:47 2023 +0200 Extended loplugin:ostr: Automatic rewrite O[U]StringLiteral: writerfilter Change-Id: I6d566f7d7d2ef3d7d5efdd3cc94f129c6b4dbbb3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158292 Tested-by: Jenkins Reviewed-by: Stephan Bergmann diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index 97a19ef8da68..10311ef8176e 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -74,7 +74,7 @@ CPPUNIT_TEST_FIXTURE(Test, testNumberingRestartStyleParent) uno::UNO_QUERY); uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); uno::Reference xPara; -static constexpr OUStringLiteral aProp(u"ListLabelString"); +static constexpr OUString aProp(u"ListLabelString"_ustr); xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("A."), xPara->getPropertyValue(aProp).get()); xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index fd27e92510d5..24071c73d1ea 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -799,7 +799,7 @@ void DomainMapper_Impl::RemoveLastParagraph( ) return; uno::Reference xDocProps(GetTextDocument(), uno::UNO_QUERY_THROW); -static constexpr OUStringLiteral RecordChanges(u"RecordChanges"); +static constexpr OUString RecordChanges(u"RecordChanges"_ustr); comphelper::ScopeGuard redlineRestore( [xDocProps, aPreviousValue = xDocProps->getPropertyValue(RecordChanges)]() @@ -4713,7 +4713,7 @@ static sal_Int16 lcl_ParseNumberingType( std::u16string_view rCommand ) // The command looks like: " PAGE \* Arabic " // tdf#132185: but may as well be "PAGE \* Arabic" OUString sNumber; -constexpr OUStringLiteral rSeparator(u"\\* "); +constexpr OUString rSeparator(u"\\* "_ustr); if (size_t nStartIndex = rCommand.find(rSeparator); nStartIndex != std::u16string_view::npos) { sal_Int32 nStartIndex2 = nStartIndex + rSeparator.getLength(); @@ -6299,9 +6299,9 @@ static uno::Sequence< beans::PropertyValues > lcl_createTOXLevelHyperlinks( bool std::vector aNewLevel; aNewLevel.reserve(aLevel.getLength() + 5); // at most 5 added items -static constexpr OUStringLiteral tokType(u"TokenType"); -static constexpr OUStringLiteral tokHStart(u"TokenHyperlinkStart"); -static constexpr OUStringLiteral tokHEnd(u"TokenHyperlinkEnd"); +static constexpr OUString tokType(u"TokenType"_ustr); +static constexpr OUString tokHStart(u"TokenHyperlinkStart"_ustr); +static constexpr OUString tokHEnd(u"TokenHyperlinkEnd"_ustr); static constexpr OUStringLiteral tokPNum(u"TokenPageNumber"); static constexpr OUStringLiteral tokENum(u"TokenEntryNumber"); diff --git a/writerfilter/source/dmapper/FormControlHelper.cxx b/writerfilter/source/dmapper/FormControlHelper.cxx index 751b96db385b..40f5d703815e 100644 --- a/writerfilter/source/dmapper/FormControlHelper.cxx +++ b/writerfilter/source/dmapper/FormControlHelper.cxx @@ -92,7 +92,7 @@ uno::Reference const & FormControlHelper::FormControlHelper_Impl::g if (xFormsSupplier.is()) { uno::Reference xFormsNamedContainer(xFormsSupplier->getForms()); -static constexpr OUStringLiteral sDOCXForm = u"DOCX-Standard"; +static constexpr OUString sDOCXForm = u"DOCX-Standard"_ustr; OUString sFormName(sDOCXForm); sal_uInt16 nUnique = 0; diff --git a/writerfilter/source/dmapper/TextEffectsHandler.cxx b/writerfilter/source/dmapper/TextEffectsHandler.cxx index 2a3deb5d0e87..35d7efbbfee2 100644 --- a/writerfilter/source/dmapper/TextEffectsHandler.cxx +++ b/writerfilter/source/dmapper/TextEffectsHandler.cxx @@ -71,7 +71,7 @@ OUString lclGetNameForElementId(sal_uInt32 aId) return aIdMap[aId]; } -constexpr OUStringLiteral constAttributesSequenceName = u"attributes"; +constexpr OUString
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/ooxml/data/floattable-leak.docx |binary writerfilter/qa/cppunittests/ooxml/ooxml.cxx | 21 +++ writerfilter/source/ooxml/OOXMLFastContextHandler.cxx|4 +- 3 files changed, 24 insertions(+), 1 deletion(-) New commits: commit a33316afa4a20499159b8c900e56658512deb74a Author: Miklos Vajna AuthorDate: Mon Sep 18 08:35:48 2023 +0200 Commit: Miklos Vajna CommitDate: Mon Sep 18 09:43:28 2023 +0200 tdf#55160 sw floattable, nested DOCX imp: fix inner tables at cell start The trouble was that in case two floating tables start at an (outer) cell start, then everything up to the end of the first inner table ended up in the body text, not in the outer table. This happens because the table depth of the inserted dummy character was incorrect. Fix the problem by comparing what model.xml does at start and what OOXMLFastContextHandlerTextTable::lcl_startFastElement() did in the dummy paragraph case, and sending the table depth in the dummy case as well. With this the bugdoc has the expected 19 floating tables in Writer and is of 1 page, both matching Word. Change-Id: I604956f28fdc01943ab913c5aa30365376c4d2b0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157006 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/ooxml/data/floattable-leak.docx b/writerfilter/qa/cppunittests/ooxml/data/floattable-leak.docx new file mode 100644 index ..249cad95b8f4 Binary files /dev/null and b/writerfilter/qa/cppunittests/ooxml/data/floattable-leak.docx differ diff --git a/writerfilter/qa/cppunittests/ooxml/ooxml.cxx b/writerfilter/qa/cppunittests/ooxml/ooxml.cxx index fb790252becb..8602ecd8e77d 100644 --- a/writerfilter/qa/cppunittests/ooxml/ooxml.cxx +++ b/writerfilter/qa/cppunittests/ooxml/ooxml.cxx @@ -10,6 +10,7 @@ #include #include +#include using namespace ::com::sun::star; @@ -41,6 +42,26 @@ CPPUNIT_TEST_FIXTURE(Test, testFloatingTablesLost) // i.e. only the inner table was imported, the 2 others were lost. CPPUNIT_ASSERT_EQUAL(static_cast(3), xTables->getCount()); } + +CPPUNIT_TEST_FIXTURE(Test, testFloatingTableLeak) +{ +// Given an outer table and 2 inner tables at B1 start: +// When importing that document: +loadFromURL(u"floattable-leak.docx"); + +// Then make sure the body text only contains a table and an empty final paragraph: +uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); +uno::Reference xParaEnumAccess(xTextDocument->getText(), + uno::UNO_QUERY); +uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); +uno::Reference xTable(xParaEnum->nextElement(), uno::UNO_QUERY); +// Without the accompanying fix in place, this test would have failed, the document started with +// a paragraph instead of a table. +CPPUNIT_ASSERT(xTable->supportsService("com.sun.star.text.TextTable")); +uno::Reference xParagraph(xParaEnum->nextElement(), uno::UNO_QUERY); +CPPUNIT_ASSERT(xParagraph->supportsService("com.sun.star.text.Paragraph")); +CPPUNIT_ASSERT(!xParaEnum->hasMoreElements()); +} } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx index a585bfb800d1..ccd90714526b 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -1620,8 +1620,10 @@ void OOXMLFastContextHandlerTextTable::lcl_startFastElement if (mpParserState->GetFloatingTableEnded()) { // We're starting a new table, but the previous table was floating. Insert a dummy paragraph -// to ensure that the floating table has a suitable anchor. +// to ensure that the floating table has a suitable anchor. The function calls here are a +// subset of '' in model.xml: startParagraphGroup(); +sendTableDepth(); endOfParagraph(); }
[Libreoffice-commits] core.git: writerfilter/qa
writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) New commits: commit 42f6dd4a22ed3c87ccd30b3e8007f4d614f86754 Author: Andrea Gelmini AuthorDate: Thu Jul 13 12:50:16 2023 +0200 Commit: Julien Nabet CommitDate: Thu Jul 13 23:00:24 2023 +0200 Fix typo Change-Id: I2a7613fbedf05b9d30695605ad9e568c0a77c0b8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154385 Tested-by: Jenkins Reviewed-by: Julien Nabet diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx index 8c11e3db22c7..90181e5f9716 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx @@ -120,7 +120,7 @@ CPPUNIT_TEST_FIXTURE(Test, testDOCXFloatingTableHiddenAnchor) // Given a document with a floating table, anchored in a paragraph that is hidden: loadFromURL(u"floattable-hidden-anchor.docx"); -// When checking the visibility of the the anchor paragraph: +// When checking the visibility of the anchor paragraph: uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); uno::Reference xText(xTextDocument->getText(), uno::UNO_QUERY); uno::Reference xParagraphs = xText->createEnumeration();
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx | 19 ++ writerfilter/qa/cppunittests/dmapper/data/floattable-hidden-anchor.docx |binary writerfilter/source/dmapper/DomainMapperTableHandler.cxx| 18 + 3 files changed, 37 insertions(+) New commits: commit 52d265c0d2f2638c386475e58c3ee489ccd3f06c Author: Miklos Vajna AuthorDate: Thu Jul 13 08:14:42 2023 +0200 Commit: Miklos Vajna CommitDate: Thu Jul 13 11:14:28 2023 +0200 sw floattable: fix lost floating table right before a hidden para from DOCX The bugdoc has a floating table, but that was not visible in Writer. What happens is that the table's anchor was hidden, so Writer was hiding the anchored table as well, but Word still shows the table in this case. Fix the problem similar to what commit 79ddca4def81198e3eee42eca8aca42fef964c80 (sw floattable: fix lost floating table right before a table from DOC, 2023-07-05) did for the DOC import: if the paragraph has an anchored floating table and is hidden, then show the paragraph. An alternative would be to change how NS_ooxml::LN_EG_RPrBase_vanish is handled in DomainMapper::sprmWithProps(), but that would be too early: by the time we get the SPRM, there is no floating table yet. Another alternative would be to make sure floating tables are part of the "anchored object" list in DomainMapper_Impl::finishParagraph() (that's how shapes don't have this problem), but the anchor paragraph is finished before creating the floating table, so that would be again too early. Change-Id: I7df7e318b15e78ceb51474440923a80bfdc6054b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154376 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx index 1f044bc2f309..8c11e3db22c7 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx @@ -114,6 +114,25 @@ CPPUNIT_TEST_FIXTURE(Test, testFloatingTablesOuterNonsplitInner) // i.e. the inner floating table was not floating. CPPUNIT_ASSERT_EQUAL(static_cast(4), xFrames->getCount()); } + +CPPUNIT_TEST_FIXTURE(Test, testDOCXFloatingTableHiddenAnchor) +{ +// Given a document with a floating table, anchored in a paragraph that is hidden: +loadFromURL(u"floattable-hidden-anchor.docx"); + +// When checking the visibility of the the anchor paragraph: +uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); +uno::Reference xText(xTextDocument->getText(), uno::UNO_QUERY); +uno::Reference xParagraphs = xText->createEnumeration(); +uno::Reference xAnchor(xParagraphs->nextElement(), uno::UNO_QUERY); + +// Then make sure the anchor (and thus the table) is visible: +bool bCharHidden{}; +CPPUNIT_ASSERT(xAnchor->getPropertyValue("CharHidden") >>= bCharHidden); +// Without the accompanying fix in place, this test would have failed, the paragraph + table was +// hidden. +CPPUNIT_ASSERT(!bCharHidden); +} } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/qa/cppunittests/dmapper/data/floattable-hidden-anchor.docx b/writerfilter/qa/cppunittests/dmapper/data/floattable-hidden-anchor.docx new file mode 100644 index ..08816aacc47e Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/floattable-hidden-anchor.docx differ diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx index 370a89c0442f..5b0971eee20f 100644 --- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx @@ -1643,6 +1643,24 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTab } } +if (xContent.is()) +{ +// By the time the frame is created, the anchor's paragraph marker character +// properties are already imported. Check if we need to disable "vanish", that +// would lead to a hidden floating table in Writer, but it does not in Word. +uno::Reference xParagraph(xContent->getAnchor(), + uno::UNO_QUERY); +if (xParagraph.is()) +{ +bool bCharHidden{}; +xParagraph->getPropertyValue("CharHidden") >>= bCharHidden; +if (bCharHidden) +{ +xParagraph->setPropertyValue("CharHidden", uno::Any(false)); +} +} +} +
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx | 20 +++ writerfilter/qa/cppunittests/dmapper/data/floattable-outer-nonsplit-inner.docx |binary writerfilter/source/dmapper/DomainMapperTableHandler.cxx | 27 -- 3 files changed, 32 insertions(+), 15 deletions(-) New commits: commit b71a9bcc2e1b4541c14e8197b5b888ee92297a6e Author: Miklos Vajna AuthorDate: Mon Jun 12 08:12:44 2023 +0200 Commit: Miklos Vajna CommitDate: Mon Jun 12 10:29:17 2023 +0200 sw floattable: import non-split inner floating tables from DOCX The last floating table from the bugdoc has an inner floating table. That inner floating table was imported as a normal table, which means that the content is on page 1 in Word, but it on 2 pages in Writer. Import of nested floating tables were disabled because the layout is not yet ready to handle nested split flys. But in case the inner table is not in a fly, then the table height is large enough that it doesn't fit into page 1, which leads to incorrect layout. Fix the problem by allowing inner floating tables in floating tables, but disable the ability to split for the inner one for now. In the long run we still need layout-level nested multi-page floating tables, but one step at a time. Change-Id: Ib90cf2873bf7d6c817450a263156764f6f09855e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152891 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx index 803f2cd938b6..1f044bc2f309 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -94,6 +95,25 @@ CPPUNIT_TEST_FIXTURE(Test, test3NestedFloatingTables) uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xIndexAccess->getCount()); } + +CPPUNIT_TEST_FIXTURE(Test, testFloatingTablesOuterNonsplitInner) +{ +// Given a document with a normal table, 3 outer floating tables and an inner floating table in +// the last floating table: +loadFromURL(u"floattable-outer-nonsplit-inner.docx"); + +// When counting the floating tables in the document: +uno::Reference xFramesSupplier(mxComponent, uno::UNO_QUERY); +uno::Reference xFrames(xFramesSupplier->getTextFrames(), +uno::UNO_QUERY); + +// Then make sure no floating tables are missing: +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 4 +// - Actual : 3 +// i.e. the inner floating table was not floating. +CPPUNIT_ASSERT_EQUAL(static_cast(4), xFrames->getCount()); +} } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/qa/cppunittests/dmapper/data/floattable-outer-nonsplit-inner.docx b/writerfilter/qa/cppunittests/dmapper/data/floattable-outer-nonsplit-inner.docx new file mode 100644 index ..dc213b1b0d26 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/floattable-outer-nonsplit-inner.docx differ diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx index f2f09d8a22d4..438036a65ec3 100644 --- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx @@ -1329,7 +1329,7 @@ static void lcl_convertFormulaRanges(const uno::Reference & xT } } -void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool /*bTableStartsAtCellStart*/) +void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTableStartsAtCellStart) { #ifdef DBG_UTIL TagLogger::getInstance().startElement("tablehandler.endTable"); @@ -1558,27 +1558,24 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool /*bT comphelper::makePropertyValue("IsFollowingTextFlow", true)); } -// A text frame created for floating tables is always allowed to split. - aFrameProperties.push_back(comphelper::makePropertyValue("IsSplitAllowed", true)); - -// In case the document ends with a table, we're called after -// SectionPropertyMap::CloseSectionGroup(), so we'll have no idea -// about the text area width, nor can fix this by delaying the text -// frame conversion: just do it here. -// Also, when the anchor is within a table, then do it here as well, -// as xStart/xEnd would not point to the start/end at conversion -// time anyway. -// Next
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx| 17 ++ writerfilter/qa/cppunittests/dmapper/data/floattable-sectend.docx |binary writerfilter/source/dmapper/DomainMapper_Impl.cxx |8 3 files changed, 25 insertions(+) New commits: commit e2f90d1d0e51c68dd01c9968cdb7a3bbb5658613 Author: Miklos Vajna AuthorDate: Thu Jun 1 08:31:34 2023 +0200 Commit: Miklos Vajna CommitDate: Thu Jun 1 09:18:44 2023 +0200 tdf#103869 sw floattable: fix lost table right before a section break from DOCX The bugdoc has 2 pages and 2 tables, one table on each page. The table on the first page was missing in Writer. What happened is that the floating table is anchored in the next paragraph, but that is removed (since it's the last one in the section, so no need for a "next" paragraph), which shifted the table to the next section, which was already a wrong anchor point. Then that next section (next page) started with a (floating) table, so a dummy text node was inserted at the start, which means once it's disposed at the end of the 2nd section, we lost the first floating table with its bad anchor. Fixing the problem was a bit tricky, because DomainMapper_Impl::RemoveLastParagraph() is called before the text frame conversion would be invoked in DomainMapperTableHandler::endTable(), so we can't check if this last paragraph has something anchored in it, as it's too early. Instead, detect that a floating table will be created, and don't remove the last paragraph in this case, since we know that we're at the end of the section (that's why we remove the last paragraph). The export result looks OK, we keep the paragraph-table-paragraph-table-paragraph model correctly. Change-Id: I4612a15d0d1ad3fe527593a21a4120096790a33f (cherry picked from commit ba2f4ebc5343f3eca27baaaf27906be2e6486fcd) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152472 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index 858faf709fd4..733fef6b1db6 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -348,6 +348,23 @@ CPPUNIT_TEST_FIXTURE(Test, testFloatingTableSectionBreak) // i.e. the document was of 1 page, the section break was lost. CPPUNIT_ASSERT_EQUAL(static_cast(2), xCursor->getPage()); } + +CPPUNIT_TEST_FIXTURE(Test, testFloattableSectend) +{ +// Given a document with 2 tables, table 1 on page 1, table 2 on page 2: +loadFromURL(u"floattable-sectend.docx"); + +// When importing that document and listing the tables: +uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); +uno::Reference xTables(xTextDocument->getTextTables(), uno::UNO_QUERY); + +// Then make sure that we have two tables: +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 2 +// - Actual : 1 +// i.e. the first table was lost. +CPPUNIT_ASSERT_EQUAL(static_cast(2), xTables->getCount()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/floattable-sectend.docx b/writerfilter/qa/cppunittests/dmapper/data/floattable-sectend.docx new file mode 100644 index ..50a121412d10 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/floattable-sectend.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index b4405517eab0..14cdc0a155ca 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -754,6 +754,14 @@ void DomainMapper_Impl::RemoveLastParagraph( ) uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend; if (!xTextAppend.is()) return; + +if (hasTableManager() && getTableManager().getCurrentTablePosition().getLength() != 0) +{ +// If we have an open floating table, then don't remove this paragraph, since that'll be the +// anchor of the floating table. Otherwise we would lose the table. +return; +} + try { uno::Reference< text::XTextCursor > xCursor;
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx | 24 +++ writerfilter/qa/cppunittests/dmapper/data/floating-table-section-break.docx |binary writerfilter/source/dmapper/DomainMapper_Impl.cxx | 75 ++ 3 files changed, 99 insertions(+) New commits: commit 2a380dba73d57f825128fbada91c7a9fe79e8a06 Author: Miklos Vajna AuthorDate: Wed May 31 08:19:24 2023 +0200 Commit: Miklos Vajna CommitDate: Wed May 31 09:04:22 2023 +0200 tdf#150769 sw floattable: fix lost PageDescName if section starts with a table The bugdoc has 2 tables in it, separated by a section break (next page). This page break was missing in Writer, so the tables overlapped. The page break was lost because the 2nd section started with a table, where we insert a dummy initial paragraph (to side-step the problem that you can't have a selection starting in a table and finishing outside that table), and once it's disposed, its properties are lost. Fix the problem by copying the PageDescName property from the dummy paragraph to the next paragraph before dispose. Note that we need this combination of creating a range (using gotoNextParagraph()) and then enumerate over the range, because gotoNextParagraph() would skip a leading non-floating table, which would lead to an additional, not wanted page break, as pointed out by CppunitTest_sw_ooxmlexport15's testTdf134649_pageBreak. This went wrong in ce5f82dbaf1c22f45a08c60eb213bc9bc821c1d1 (DOCX import: floating table with negative top margin has to be a fly frame, 2022-01-21), and it turns out to be related to normal floating tables, unrelated to multi-page floating tables. Change-Id: I83245c78c63ec8f3d6015ce3e72ab232220a9fdb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152411 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index 359c051fb0df..858faf709fd4 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include @@ -324,6 +326,28 @@ CPPUNIT_TEST_FIXTURE(Test, testContentControlDataBindingColor) // i.e. the char color was red, not the default / automatic. CPPUNIT_ASSERT_EQUAL(COL_AUTO, nColor); } + +CPPUNIT_TEST_FIXTURE(Test, testFloatingTableSectionBreak) +{ +// Given a document with 2 floating tables and 2 pages, section break (next page) between the +// two: +loadFromURL(u"floating-table-section-break.docx"); + +// When going to the last page: +uno::Reference xModel(mxComponent, uno::UNO_QUERY); +uno::Reference xTextViewCursorSupplier( +xModel->getCurrentController(), uno::UNO_QUERY); +uno::Reference xCursor(xTextViewCursorSupplier->getViewCursor(), + uno::UNO_QUERY); +xCursor->jumpToLastPage(); + +// Then make sure that we're on page 2: +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 2 +// - Actual : 1 +// i.e. the document was of 1 page, the section break was lost. +CPPUNIT_ASSERT_EQUAL(static_cast(2), xCursor->getPage()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/floating-table-section-break.docx b/writerfilter/qa/cppunittests/dmapper/data/floating-table-section-break.docx new file mode 100644 index ..e5c0cb19b342 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/floating-table-section-break.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 1eb5753110c8..b4405517eab0 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -576,6 +576,79 @@ void DomainMapper_Impl::SetDocumentSettingsProperty( const OUString& rPropName, } } } + +namespace +{ +void CopyPageDescNameToNextParagraph(const uno::Reference& xParagraph, + const uno::Reference& xCursor) +{ +// First check if xParagraph has a non-empty page style name to copy from. +uno::Reference xParagraphProps(xParagraph, uno::UNO_QUERY); +if (!xParagraphProps.is()) +{ +return; +} + +uno::Any aPageDescName = xParagraphProps->getPropertyValue("PageDescName"); +OUString sPageDescName; +aPageDescName >>= sPageDescName; +if (sPageDescName.isEmpty()) +{ +return; +} + +// If so, search for the next paragraph. +uno::Reference xParaCursor(xCursor, uno::UNO_QUERY); +if (!xParaCursor.is()) +{ +return; +} + +
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx | 25 ++ writerfilter/qa/cppunittests/dmapper/data/floattable-break-before.docx |binary writerfilter/source/dmapper/DomainMapperTableHandler.cxx | 20 +++- 3 files changed, 44 insertions(+), 1 deletion(-) New commits: commit 4b6b9411e4ac912817dd804782ad2054bc0d1660 Author: Miklos Vajna AuthorDate: Thu Apr 27 08:15:51 2023 +0200 Commit: Miklos Vajna CommitDate: Thu Apr 27 12:21:30 2023 +0200 sw floattable, crashtesting: fix PDF export of fdo72790-1.docx, part 4 Converting the bugdoc to PDF crashed Writer layout since commit ce3308a926f036b87515b8cd97d2b197063dc77a (tdf#61594 sw floattable: import floating tables as split flys by default, 2023-04-12). Part 1 already fixed the crash and parts 2-3 already improved the layout partially, towards avoiding a layout loop. The top problem now seems to be that page breaks before floating tables are ignored, which leads to a layout situation that loops. This problem was hidden before, since page breaks were not ignored. Fix the problem at DOCX import time: if there is a "break before" on the table, then transfer that to the anchor paragraph, which gives the correct layout, and also side-steps the above described layout loop. We should probably never call SwTextFrame::JoinFrame() when creating the initial layout for a document, that part is still unfixed, but that looks like a pre-existing problem. Change-Id: I1e2ecdbf0a3d4e2477cd4768a9b4a35a155e815b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151082 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx index 7f1a1db064d8..0650e48fe607 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx @@ -14,6 +14,8 @@ #include #include #include +#include +#include using namespace ::com::sun::star; @@ -57,6 +59,29 @@ CPPUNIT_TEST_FIXTURE(Test, testNestedFloatingTable) // was partly positioned outside the table cell, leading to overlapping text. CPPUNIT_ASSERT(bIsFollowingTextFlow); } + +CPPUNIT_TEST_FIXTURE(Test, testFloatingTableBreakBefore) +{ +// Given a 3 pages document: page break, then a multi-page floating table on pages 2 and 3: +// When laying out that document: +loadFromURL(u"floattable-break-before.docx"); + +// Then make sure the page break property is on the anchor of the floating table, otherwise it +// has no effect: +uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); +uno::Reference xText(xTextDocument->getText(), uno::UNO_QUERY); +uno::Reference xParagraphs = xText->createEnumeration(); +xParagraphs->nextElement(); +xParagraphs->nextElement(); +uno::Reference xParagraph(xParagraphs->nextElement(), uno::UNO_QUERY); +style::BreakType eBreakType{}; +xParagraph->getPropertyValue("BreakType") >>= eBreakType; +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 4 (style::BreakType_PAGE_BEFORE) +// - Actual : 0 (style::BreakType_NONE) +// i.e. the page break was lost. +CPPUNIT_ASSERT_EQUAL(style::BreakType_PAGE_BEFORE, eBreakType); +} } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/qa/cppunittests/dmapper/data/floattable-break-before.docx b/writerfilter/qa/cppunittests/dmapper/data/floattable-break-before.docx new file mode 100644 index ..7fcfed4a637d Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/floattable-break-before.docx differ diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx index eaddae615817..ac2f00a7d5a5 100644 --- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx @@ -50,6 +50,7 @@ #include #include #include +#include #include #include @@ -1541,6 +1542,15 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTab // A non-zero left margin would move the table out of the frame, move the frame itself instead. xTableProperties->setPropertyValue("LeftMargin", uno::Any(sal_Int32(0))); +style::BreakType eBreakType{}; +xTableProperties->getPropertyValue("BreakType") >>= eBreakType; +if (eBreakType != style::BreakType_NONE) +{ +// A break before the table was requested. Reset that break here, since the table +// will be at the start of the fly frame, not in the body frame. +xTableProperties->setPropertyValue("BreakType",
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx | 23 ++ writerfilter/qa/cppunittests/dmapper/data/content-control-data-binding-color.docx |binary writerfilter/source/dmapper/DomainMapper_Impl.cxx |7 +++ 3 files changed, 30 insertions(+) New commits: commit 1c45e1971cdd88f54a3cfb89622fdfa6fa8fcf31 Author: Miklos Vajna AuthorDate: Wed Feb 15 14:20:02 2023 +0100 Commit: Miklos Vajna CommitDate: Wed Feb 15 16:04:14 2023 + tdf#147258 DOCX import: fix bad char format w/ inline and data binding The bugdoc had an inline SDT in placeholder mode, where the placeholder had a char style to define a red text color. This red color is not in Word, but it was in Writer. This went wrong with commit de90c192cb8f1f03a4028493d8bfe9a127a76b2a (sw content controls, plain text: enable DOCX filter with data binding, 2022-09-19), because previously we didn't map to Writer content controls for plain text with data binding. Fix the problem by resetting the char style back to default when the value of the content control comes from data binding. Interestingly office.com renders the document the way Writer did previously, but let's try to match what desktop Word does, that's probably the reference for DOCX files. Change-Id: I7eccdb843d5ab63ccf573644c61832e2ef7dae14 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147088 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index 728dd218cb65..359c051fb0df 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -301,6 +301,29 @@ CPPUNIT_TEST_FIXTURE(Test, testContentControlDateDataBinding) // i.e. the date was from document.xml, which is considered outdated. CPPUNIT_ASSERT_EQUAL(OUString("4/26/2012"), xParagraph->getString()); } + +CPPUNIT_TEST_FIXTURE(Test, testContentControlDataBindingColor) +{ +// Given a document with an inline content control with data binding, placeholder char color is +// set to red, when loading that document: +loadFromURL(u"content-control-data-binding-color.docx"); + +// Then make sure that the placeholder char color is not in the document, since data binding is +// active: +uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); +uno::Reference xText = xTextDocument->getText(); +uno::Reference xCursor = xText->createTextCursor(); +xCursor->gotoEnd(/*bExpand=*/false); +xCursor->goLeft(/*nCount=*/1, /*bExpand=*/false); +uno::Reference xCursorProps(xCursor, uno::UNO_QUERY); +Color nColor; +CPPUNIT_ASSERT(xCursorProps->getPropertyValue("CharColor") >>= nColor); +// Without the accompanying fix in place, this test would have failed with: +// - Expected: rgba[ff00] +// - Actual : rgba[ffff] +// i.e. the char color was red, not the default / automatic. +CPPUNIT_ASSERT_EQUAL(COL_AUTO, nColor); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/content-control-data-binding-color.docx b/writerfilter/qa/cppunittests/dmapper/data/content-control-data-binding-color.docx new file mode 100644 index ..0aae9439209b Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/content-control-data-binding-color.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 46260200d7a1..f5f8f70d732c 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -916,6 +916,13 @@ void DomainMapper_Impl::PopSdt() { // Data binding has a value for us, prefer that over the in-document value. xCursor->setString(*oData); + +// Such value is always a plain text string, remove the char style of the placeholder. +uno::Reference xPropertyState(xCursor, uno::UNO_QUERY); +if (xPropertyState.is()) +{ +xPropertyState->setPropertyToDefault("CharStyleName"); +} } uno::Reference xContentControl(
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/center-after-page.rtf | 10 writerfilter/qa/cppunittests/rtftok/rtfdispatchsymbol.cxx | 24 ++ writerfilter/source/rtftok/rtfdispatchsymbol.cxx |7 ++ 3 files changed, 40 insertions(+), 1 deletion(-) New commits: commit e316524d9fe7720ed0a5eaf94999e54d211a8395 Author: Miklos Vajna AuthorDate: Mon Jan 23 08:08:29 2023 +0100 Commit: Miklos Vajna CommitDate: Mon Jan 23 08:37:33 2023 + tdf#153046 RTF import: fix lost paragraph alignment after page break The bugdoc had a page break, and the paragraph after the page break is meant to be centered, but it was aligned to the left. This went wrong with 3c610336a58f644525d5e4d2566c35eee6f7a618 (tdf#148214 RTF import: avoid fake paragraph for \page when possible, 2022-09-08), previously we emitted fake paragraphs in most cases, which allowed simpler handling of pending paragraph properties. Now we have to be careful to call checkNeedPap() exactly when parBreak() in called, otherwise checkNeedPap() sends paragraph properties, and paragraph properties noticed later will be lost. Fix the problem by not sending paragraph properties unconditionally, only in case we send the fake paragraph break as well. This continues to allow the unwanted fake paragraphs in some cases, but it restores the lost paragraph properties, since m_bNeedPap will be still true after we hit the first character in the last paragraph, so \qc is sent to dmapper. Note that we don't have to check m_bNeedPap before checkNeedPap(), as it returns early already when m_bNeedPap is false. Change-Id: I683d42208072a84fe578e397ac3e29585da5aa89 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145990 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/rtftok/data/center-after-page.rtf b/writerfilter/qa/cppunittests/rtftok/data/center-after-page.rtf new file mode 100644 index ..c4713906ed4c --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/center-after-page.rtf @@ -0,0 +1,10 @@ +{\rtf1 +{\stylesheet +{\s20\qc Title;} +} +\paperw11908\paperh8833 +\plain\plain +first page\par +\ql\par +\page\pard\s20\qc second page\par +} diff --git a/writerfilter/qa/cppunittests/rtftok/rtfdispatchsymbol.cxx b/writerfilter/qa/cppunittests/rtftok/rtfdispatchsymbol.cxx index 25e87099abe7..fa491121656a 100644 --- a/writerfilter/qa/cppunittests/rtftok/rtfdispatchsymbol.cxx +++ b/writerfilter/qa/cppunittests/rtftok/rtfdispatchsymbol.cxx @@ -10,6 +10,8 @@ #include #include +#include +#include using namespace ::com::sun::star; @@ -40,6 +42,28 @@ CPPUNIT_TEST_FIXTURE(Test, testPage) // paragraphs, not 2. CPPUNIT_ASSERT(!xParagraphs->hasMoreElements()); } + +CPPUNIT_TEST_FIXTURE(Test, testCenterAfterPage) +{ +// Given a file with a \page, followed by a \qc: +// When loading that file: +loadFromURL(u"center-after-page.rtf"); + +// Then make sure that the last paragraph is centered: +uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); +uno::Reference xText(xTextDocument->getText(), uno::UNO_QUERY); +uno::Reference xParagraphs = xText->createEnumeration(); +xParagraphs->nextElement(); +xParagraphs->nextElement(); +uno::Reference xParagraph(xParagraphs->nextElement(), uno::UNO_QUERY); +sal_Int16 eActual{}; +CPPUNIT_ASSERT(xParagraph->getPropertyValue("ParaAdjust") >>= eActual); +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 3 (CENTER) +// - Actual : 0 (LEFT) +// i.e. the paragraph alignment on the second page was lost. + CPPUNIT_ASSERT_EQUAL(static_cast(style::ParagraphAdjust_CENTER), eActual); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/rtftok/rtfdispatchsymbol.cxx b/writerfilter/source/rtftok/rtfdispatchsymbol.cxx index c884ba592f6a..9aa9a2ce4a2e 100644 --- a/writerfilter/source/rtftok/rtfdispatchsymbol.cxx +++ b/writerfilter/source/rtftok/rtfdispatchsymbol.cxx @@ -391,7 +391,12 @@ RTFError RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) { bool bFirstRun = m_bFirstRun; checkFirstRun(); -checkNeedPap(); +if (bFirstRun || m_bNeedCr) +{ +// Only send the paragraph properties early if we'll create a new paragraph in a +// bit anyway. +checkNeedPap(); +} sal_uInt8 const sBreak[] = { 0xc }; Mapper().text(sBreak, 1); if (bFirstRun || m_bNeedCr)
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/TextEffectsHandler.cxx| 18 ++ writerfilter/qa/cppunittests/dmapper/data/tdf152884_Char_Transparency.docx |binary writerfilter/source/dmapper/TextEffectsHandler.cxx | 4 +- 3 files changed, 21 insertions(+), 1 deletion(-) New commits: commit 585f65738270ba8ab2fdc4c49063c3b5663fe768 Author: Regina Henschel AuthorDate: Thu Jan 5 18:33:46 2023 +0100 Commit: Regina Henschel CommitDate: Fri Jan 6 01:19:12 2023 + tdf#152884 import alpha too for schemeClr Without fix the alpha child element was only read for w14:srgbClr but no for w14:schemeClr. Thus character colored by theme color had no transparency. Change-Id: I73c01b7142d3eab83400d2e5eb9dce01ff8d4a19 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145099 Tested-by: Jenkins Reviewed-by: Regina Henschel diff --git a/writerfilter/qa/cppunittests/dmapper/TextEffectsHandler.cxx b/writerfilter/qa/cppunittests/dmapper/TextEffectsHandler.cxx index 7788abe1a62b..f31d9862a1ac 100644 --- a/writerfilter/qa/cppunittests/dmapper/TextEffectsHandler.cxx +++ b/writerfilter/qa/cppunittests/dmapper/TextEffectsHandler.cxx @@ -47,6 +47,24 @@ CPPUNIT_TEST_FIXTURE(Test, testSemiTransparentText) // i.e. text was imported as regular text with solid color only. CPPUNIT_ASSERT_EQUAL(static_cast(74), nCharTransparence); } + +CPPUNIT_TEST_FIXTURE(Test, testThemeColorTransparency) +{ +// Load a document with a single paragraph. It has semi-transparent text and the color is +// determined by a w14:schemeClr element. +loadFromURL(u"tdf152884_Char_Transparency.docx"); +uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); +uno::Reference xParaEnumAccess(xTextDocument->getText(), + uno::UNO_QUERY); +uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); +uno::Reference xPara(xParaEnum->nextElement(), uno::UNO_QUERY); +uno::Reference xPortionEnum = xPara->createEnumeration(); +sal_Int16 nCharTransparence = 0; +uno::Reference xPortion(xPortionEnum->nextElement(), uno::UNO_QUERY); +xPortion->getPropertyValue("CharTransparence") >>= nCharTransparence; +// Without the fix this test would have failed with: Expected 74, Actual 0 +CPPUNIT_ASSERT_EQUAL(static_cast(74), nCharTransparence); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/tdf152884_Char_Transparency.docx b/writerfilter/qa/cppunittests/dmapper/data/tdf152884_Char_Transparency.docx new file mode 100644 index ..e1603956948f Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/tdf152884_Char_Transparency.docx differ diff --git a/writerfilter/source/dmapper/TextEffectsHandler.cxx b/writerfilter/source/dmapper/TextEffectsHandler.cxx index cce02393cd5a..2a3deb5d0e87 100644 --- a/writerfilter/source/dmapper/TextEffectsHandler.cxx +++ b/writerfilter/source/dmapper/TextEffectsHandler.cxx @@ -771,7 +771,9 @@ sal_uInt8 TextEffectsHandler::GetTextFillSolidFillAlpha(const css::beans::Proper it = aSolidFillMap.find("srgbClr"); if (it == aSolidFillMap.end()) { -return 0; +it = aSolidFillMap.find("schemeClr"); +if (it == aSolidFillMap.end()) +return 0; } comphelper::SequenceAsHashMap aSrgbClrMap(it->second);
[Libreoffice-commits] core.git: writerfilter/qa
writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) New commits: commit 90bf4f661840f5dd6bf2a46564f2683c5e8fbd47 Author: Andrea Gelmini AuthorDate: Thu Oct 13 12:15:37 2022 +0200 Commit: Julien Nabet CommitDate: Thu Oct 13 19:01:37 2022 +0200 Fix typo Change-Id: Ie04728548d82e6eb5b0d46e65c279dcda5442bf8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141309 Tested-by: Julien Nabet Reviewed-by: Julien Nabet diff --git a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx index be1a6a4c1fbe..402d6fbf355e 100644 --- a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx +++ b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx @@ -433,7 +433,7 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf149840SmartArtBackground) // not visible background but in wrong sizes of the diagram shapes too. uno::Reference xBackgroundShape(xGroup->getByIndex(0), uno::UNO_QUERY); awt::Size aBackgroundSize = xBackgroundShape->getSize(); -// Toleranzes are for rounding inaccuracies. +// Tolerances are for rounding inaccuracies. // The test would have failed with Expected: 9560x5036, Actual: 2x2 CPPUNIT_ASSERT_DOUBLES_EQUAL(static_cast(9560), aBackgroundSize.Width, 1); CPPUNIT_ASSERT_DOUBLES_EQUAL(static_cast(5036), aBackgroundSize.Height, 1);
[Libreoffice-commits] core.git: writerfilter/qa
writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) New commits: commit fb1b3f643bdb26a2d806f95ad254889270de660f Author: Andrea Gelmini AuthorDate: Thu Oct 13 12:12:32 2022 +0200 Commit: Julien Nabet CommitDate: Thu Oct 13 19:00:00 2022 +0200 Fix typo Change-Id: Iff1adef6278239436bbaabd619ed12648d0819df Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141305 Tested-by: Julien Nabet Reviewed-by: Julien Nabet diff --git a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx index 6d77ece16d9d..be1a6a4c1fbe 100644 --- a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx +++ b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx @@ -429,7 +429,7 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf149840SmartArtBackground) CPPUNIT_ASSERT_EQUAL(static_cast(3), xGroup->getCount()); // The first shape in the group, which represents the SmartArt, corresponds to the background of -// the diagram. Without fix in place it has widht and height zero, which does not only result in +// the diagram. Without fix in place it has width and height zero, which does not only result in // not visible background but in wrong sizes of the diagram shapes too. uno::Reference xBackgroundShape(xGroup->getByIndex(0), uno::UNO_QUERY); awt::Size aBackgroundSize = xBackgroundShape->getSize();
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx | 34 ++ writerfilter/qa/cppunittests/dmapper/data/sdt-dropdown-no-display-text.docx |binary writerfilter/source/dmapper/DomainMapper.cxx| 15 3 files changed, 49 insertions(+) New commits: commit f726fbc2699b05199a8dec3055710a7131e0aad6 Author: Miklos Vajna AuthorDate: Mon Oct 10 10:07:10 2022 +0200 Commit: Miklos Vajna CommitDate: Mon Oct 10 16:05:53 2022 +0200 tdf#151261 DOCX import: fix dropdown SDT when the item display text is missing Dropdown content controls have list items, and each list item can have a display text and a value. These are optional, and the bugdoc has a list item where the value is set, but not the display text. The trouble is that later in DomainMapper_Impl::PopSdt() we check if the length of the display texts and values array match and if not, then we throw away these arrays to avoid creating an inconsistent document model. Fix the problem by checking what display text and value we got at the end of each list item; if any of them is missing, we add an empty string, which matches the internal representation in SwContentControlListItem. This also helps in case these array sizes matched by accident, but display texts and values from different list items were mixed previously. Change-Id: Ib1eeabd2479963af4a84d4229d4f0ce4572e0f01 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141151 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx index 21d5c84cae4e..639c8e9e0303 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx @@ -13,6 +13,7 @@ #include #include #include +#include #include @@ -95,6 +96,39 @@ CPPUNIT_TEST_FIXTURE(Test, testSdtRunInPara) // i.e. the block-SDT-only string was lost. CPPUNIT_ASSERT_EQUAL(OUString("first-second"), xPara->getString()); } + +CPPUNIT_TEST_FIXTURE(Test, testSdtDropdownNoDisplayText) +{ +// Given a document with (no display text): +OUString aURL += m_directories.getURLFromSrc(DATA_DIRECTORY) + "sdt-dropdown-no-display-text.docx"; + +// When loading that document: +getComponent() = loadFromDesktop(aURL); + +// Then make sure we create a dropdown content control, not a rich text one: +uno::Reference xTextDocument(getComponent(), uno::UNO_QUERY); +uno::Reference xParagraphsAccess(xTextDocument->getText(), + uno::UNO_QUERY); +uno::Reference xParagraphs = xParagraphsAccess->createEnumeration(); +uno::Reference xParagraph(xParagraphs->nextElement(), + uno::UNO_QUERY); +uno::Reference xPortions = xParagraph->createEnumeration(); +uno::Reference xTextPortion(xPortions->nextElement(), uno::UNO_QUERY); +OUString aPortionType; +xTextPortion->getPropertyValue("TextPortionType") >>= aPortionType; +CPPUNIT_ASSERT_EQUAL(OUString("ContentControl"), aPortionType); +uno::Reference xContentControl; +xTextPortion->getPropertyValue("ContentControl") >>= xContentControl; +uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); +uno::Sequence aListItems; +xContentControlProps->getPropertyValue("ListItems") >>= aListItems; +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 1 +// - Actual : 0 +// i.e. the list item was lost on import. +CPPUNIT_ASSERT_EQUAL(static_cast(1), aListItems.getLength()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/sdt-dropdown-no-display-text.docx b/writerfilter/qa/cppunittests/dmapper/data/sdt-dropdown-no-display-text.docx new file mode 100644 index ..ed6d7ac54052 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/sdt-dropdown-no-display-text.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 94e273a0fdcd..95694c270a8e 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2744,8 +2744,23 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) case NS_ooxml::LN_CT_SdtDropDownList_listItem: { writerfilter::Reference::Pointer_t pProperties = rSprm.getProps(); + +size_t nDropDownDisplayTexts = m_pImpl->m_pSdtHelper->getDropDownDisplayTexts().size(); +size_t nDropDownItems = m_pImpl->m_pSdtHelper->getDropDownItems().size(); + if (pProperties) pProperties->resolve(*this); + +if
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/old-para-num-left-margin.rtf | 14 + writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx | 25 ++ writerfilter/source/rtftok/rtfdocumentimpl.cxx|4 - 3 files changed, 41 insertions(+), 2 deletions(-) New commits: commit a974bccd06ac6c7081256d32d2372ea05b253fbb Author: Miklos Vajna AuthorDate: Mon Sep 26 08:14:21 2022 +0200 Commit: Miklos Vajna CommitDate: Mon Sep 26 09:05:50 2022 +0200 tdf#150762 RTF import: fix missing left margin on numbered paragraph The bugdoc has a numbered paragraph with a custom left margin, but this left margin is missing in Writer. This went wrong in commit 61b7034824dead1635f9e9c6ec996297e10f6910 (tdf#104016 RTF import: deduplicate before text indent from numbering, 2017-12-05), and now it's broken because the numbering properties are applied before paragraph properties in the DOCX case, but the RTF tokenizer didn't do this ordering. This behavior of sw core somewhat makes sense, users expect the margins from direct formatting to go away if you apply a new numbering. So fix the problem by tweaking the RTF tokenizer to emit the numbering tokens first and only then the paragraph tokens, which is an order that's closer to the working DOCX tokenizer. This only affects the old (WW6-style) paragraph numbering markup, not the newer (WW8-style) numbering markup. Change-Id: I39698f57684d47c03ea4848fc8eb6b2e855c4fbc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140584 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/rtftok/data/old-para-num-left-margin.rtf b/writerfilter/qa/cppunittests/rtftok/data/old-para-num-left-margin.rtf new file mode 100644 index ..99825370e3b4 --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/old-para-num-left-margin.rtf @@ -0,0 +1,14 @@ +{\rtf1\ansi +\margt1497\margb590\margl590\margr590\pgwsxn11906\pghsxn16838 +\pard\plain First\par +\pard\plain +{\*\pn \pnlvlbody +{\pntxtb \'78} +} +{\b\f7\fs22 Second\par} +\pard\plain\li1191 +{\*\pn \pnlvlbody +{\pntxtb \'78} +} +{\f7\fs22 Third, with left indent\par} +} diff --git a/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx b/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx index 6020453ba783..f33f0f0e58be 100644 --- a/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx @@ -16,6 +16,7 @@ #include #include #include +#include #include @@ -119,6 +120,30 @@ CPPUNIT_TEST_FIXTURE(Test, testDuplicatedImage) // i.e. there was a 3rd, duplicated image. CPPUNIT_ASSERT_EQUAL(static_cast(2), xDrawPage->getCount()); } + +CPPUNIT_TEST_FIXTURE(Test, testOldParaNumLeftMargin) +{ +// Given a document with 3 paragraphs, the third one with a left indent: +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "old-para-num-left-margin.rtf"; + +// When importing that document: +getComponent() = loadFromDesktop(aURL); + +// Then make sure that the third paragraph has a left indent: +uno::Reference xTextDocument(getComponent(), uno::UNO_QUERY); +uno::Reference xText(xTextDocument->getText(), uno::UNO_QUERY); +uno::Reference xParagraphs = xText->createEnumeration(); +xParagraphs->nextElement(); +xParagraphs->nextElement(); +uno::Reference xParagraph(xParagraphs->nextElement(), uno::UNO_QUERY); +sal_Int32 nParaLeftMargin{}; +xParagraph->getPropertyValue("ParaLeftMargin") >>= nParaLeftMargin; +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 2101 +// - Actual : 0 +// i.e. the left indent was 0, not 1191 twips (from the file) in mm100. +CPPUNIT_ASSERT_EQUAL(static_cast(2101), nParaLeftMargin); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index ad96a449befb..3df44f0124c9 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -3383,9 +3383,9 @@ void RTFDocumentImpl::afterPopState(RTFParserState& rState) // Use it putNestedSprm(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_numPr, - NS_ooxml::LN_CT_NumPr_ilvl, pIlvlValue); + NS_ooxml::LN_CT_NumPr_ilvl, pIlvlValue, RTFOverwrite::YES_PREPEND); putNestedSprm(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_numPr, - NS_ooxml::LN_CT_NumPr_numId, pIdValue); + NS_ooxml::LN_CT_NumPr_numId, pIdValue, RTFOverwrite::YES_PREPEND); } } break;
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/duplicated-image.rtf | 41 ++ writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx | 18 writerfilter/source/rtftok/rtfdocumentimpl.cxx|2 3 files changed, 61 insertions(+) New commits: commit b9fcf43a38773f81ef1833897c4e36d8db16c0b1 Author: Miklos Vajna AuthorDate: Mon Sep 12 20:29:26 2022 +0200 Commit: Miklos Vajna CommitDate: Tue Sep 13 08:43:40 2022 +0200 tdf#140302 RTF import: fix unexpected repeated image The bugdoc has 2 images, but the resulting doc model had 3 images since commit 7e863504854ae8ab286b32510aba8b363a8e314b (tdf#81943 sw RTF import: fix missing wrap in background for in-table shape, 2018-07-16). The trouble was that shape replay wants to access the current shape at m_aStates.top().aShape, but we only set it, forgot to unset it after replay was done, which can result in duplicated insertions. Fix this by saving the old current shape on the stack, set the current shape to the wanted value and then undo it after replay. This only affects documents that have a \picprop group, since the unwanted insertion happened when popping that group. Change-Id: I088054de2332deb4b45f7e269672fa799dd49c2f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139818 Tested-by: Jenkins Reviewed-by: Miklos Vajna diff --git a/writerfilter/qa/cppunittests/rtftok/data/duplicated-image.rtf b/writerfilter/qa/cppunittests/rtftok/data/duplicated-image.rtf new file mode 100644 index ..f225ff1f248f --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/duplicated-image.rtf @@ -0,0 +1,41 @@ +{\rtf1 +before table\par +\trowd\cellx4819\cellx9638\pard\plain\intbl +A1 +\cell\pard\plain +{\shp +{\*\shpinst\shpwr1\shpbypara\shpbyignore\shptop113\shpbottom1352\shpbxcolumn\shpbxignore\shpleft-22\shpright4733 +{\sp +{\sn shapeType} +{\sv 75} +} +{\sp +{\sn pib} +{\sv +{\pict\picscalex92\picscaley92\piccropl0\piccropr0\piccropt0\piccropb0\picw341\pich89\picwgoal5115\pichgoal1335\pngblip +89504e470d0a1a0a000d4948445200100010040300eddde2520030504c54450080008000808000808000800080808080 +80c0c0c0ff00ff000000ff00ff7b1fb1c4005b49444154789c458db10ac03008445d33e5b71d04d764caef3808f99d0604ab +b5a5b778dc933bf057f01bdd650ca98cf8d885ce240d0c3ecf40a41dc9097011f4d67a2ad18ac8f239af44f33255e19c1044ce42e39a60f9469fc06fa01a6b07 +bcd70bc749454e44ae426082 +} +} +} +} +} +\cell\row +\pard\plain after table\par +\pard\plain +{\*\shppict +{\pict +{\*\picprop +} +\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw16\pich16\picwgoal240\pichgoal240\pngblip +89504e470d0a1a0a000d4948445200100010040300eddde2520030504c54450080008000808000808000800080808080 +80c0c0c0ff00ff000000ff00ff7b1fb1c4005b49444154789c458db10ac03008445d33e5b71d04d764caef3808f99d0604ab +b5a5b778dc933bf057f01bdd650ca98cf8d885ce240d0c3ecf40a41dc9097011f4d67a2ad18ac8f239af44f33255e19c1044ce42e39a60f9469fc06fa01a6b07 +bcd70bc749454e44ae426082 +} +} +end +\par +} diff --git a/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx b/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx index 1898e0057695..6020453ba783 100644 --- a/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx @@ -101,6 +101,24 @@ CPPUNIT_TEST_FIXTURE(Test, testCharHiddenInTable) // hidden. CPPUNIT_ASSERT(bCharHidden); } + +CPPUNIT_TEST_FIXTURE(Test, testDuplicatedImage) +{ +// Given a document with 2 images: +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "duplicated-image.rtf"; + +// When importing that document: +getComponent() = loadFromDesktop(aURL); + +// Then make sure no duplicated images are created: +uno::Reference xTextDocument(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xTextDocument->getDrawPage(); +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 2 +// - Actual : 3 +// i.e. there was a 3rd, duplicated image. +CPPUNIT_ASSERT_EQUAL(static_cast(2), xDrawPage->getCount()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 5eb29f07510a..ad96a449befb 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -1773,9 +1773,11 @@ void RTFDocumentImpl::replayBuffer(RTFBuffer_t& rBuffer, RTFSprms* const pSprms, // Set current shape during replay, needed by e.g. wrap in // background. +RTFShape aShape = m_aStates.top().getShape(); m_aStates.top().getShape() = std::get<1>(aTuple)->getShape();
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/char-hidden-intbl.rtf |6 ++ writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx| 28 ++ writerfilter/source/rtftok/rtfdocumentimpl.cxx | 16 - 3 files changed, 46 insertions(+), 4 deletions(-) New commits: commit 2a403bcbbe0f45cd14a74ae76c4647096463e8ca Author: Miklos Vajna AuthorDate: Thu Sep 1 08:35:06 2022 +0200 Commit: Miklos Vajna CommitDate: Thu Sep 1 10:39:23 2022 +0200 tdf#150474 RTF import: fix missing char props for in-table newline characters I forgot about this in b9508dd55f82d35f09a58021dc001cf79b390e08 (fdo#50665 rtftok: don't ignore character properties of text fields, 2012-06-06), which handled the plain body text case, but not the buffered case. Change-Id: I5c5ebb58becc44a6cf1e0bb8984b2b8c212c3c2b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139143 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/rtftok/data/char-hidden-intbl.rtf b/writerfilter/qa/cppunittests/rtftok/data/char-hidden-intbl.rtf new file mode 100644 index ..76fea92fac49 --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/char-hidden-intbl.rtf @@ -0,0 +1,6 @@ +{\rtf1 +\paperw11906\paperh16838\margl1440\margr1440\margt1440\margb1440\pard\plain before\par +\trowd\cellx4475\cellx9058\pard\plain\intbl A1\cell +\pard\intbl{\v \line}B1\cell\row +\pard\plain after\par +} diff --git a/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx b/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx index 0d6425c33afd..1898e0057695 100644 --- a/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include @@ -73,6 +75,32 @@ CPPUNIT_TEST_FIXTURE(Test, testPicwPich) // i.e. the graphic width didn't match 2.62 cm from the Word UI. CPPUNIT_ASSERT_EQUAL(static_cast(2619), aPrefSize.Width()); } + +CPPUNIT_TEST_FIXTURE(Test, testCharHiddenInTable) +{ +// Given a document with a table, and a hidden \line in it: +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "char-hidden-intbl.rtf"; + +// When loading that document: +getComponent() = loadFromDesktop(aURL); + +// Then make sure that line is indeed hidden: +uno::Reference xTextDocument(getComponent(), uno::UNO_QUERY); +uno::Reference xTables(xTextDocument->getTextTables(), uno::UNO_QUERY); +uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); +uno::Reference xCell(xTable->getCellByName("B1"), +uno::UNO_QUERY); +uno::Reference xParagraphs = xCell->createEnumeration(); +uno::Reference xParagraph(xParagraphs->nextElement(), + uno::UNO_QUERY); +uno::Reference xPortions = xParagraph->createEnumeration(); +uno::Reference xPortion(xPortions->nextElement(), uno::UNO_QUERY); +bool bCharHidden{}; +xPortion->getPropertyValue("CharHidden") >>= bCharHidden; +// Without the accompanying fix in place, this test would have failed, the newline was not +// hidden. +CPPUNIT_ASSERT(bCharHidden); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 4a5961f19355..5c8f058d710f 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -1330,15 +1330,23 @@ void RTFDocumentImpl::singleChar(sal_uInt8 nValue, bool bRunProps) if (!pCurrentBuffer) { Mapper().startCharacterGroup(); -// Should we send run properties? -if (bRunProps) -runProps(); +} +else +{ +pCurrentBuffer->push_back(Buf_t(BUFFER_STARTRUN, nullptr, nullptr)); +} + +// Should we send run properties? +if (bRunProps) +runProps(); + +if (!pCurrentBuffer) +{ Mapper().text(sValue, 1); Mapper().endCharacterGroup(); } else { -pCurrentBuffer->push_back(Buf_t(BUFFER_STARTRUN, nullptr, nullptr)); auto pValue = new RTFValue(*sValue); pCurrentBuffer->push_back(Buf_t(BUFFER_TEXT, pValue, nullptr)); pCurrentBuffer->push_back(Buf_t(BUFFER_ENDRUN, nullptr, nullptr));
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx | 21 ++ writerfilter/qa/cppunittests/dmapper/data/sdt-run-in-para.docx |binary writerfilter/source/dmapper/DomainMapper.cxx | 10 3 files changed, 31 insertions(+) New commits: commit bab023ce3b584e815067a207adc7a8aca1f964af Author: Miklos Vajna AuthorDate: Tue Jun 28 08:53:15 2022 +0200 Commit: Miklos Vajna CommitDate: Tue Jun 28 09:31:51 2022 +0200 tdf#149654 sw content controls: fix missing string before inline SDT from DOCX The document had a block SDT and inside that, a run SDT. The content that is before the run SDT but already inside the block SDT was lost. To work incrementally, it was intentional that once commit 5ee8670f18cb8b1913a23d04590d6a31ac9730de (sw content controls, date: add DOCX import, 2022-05-30) changed most of run SDTs to content controls, it left block SDTs (and cell/row SDTs, too) unchanged, so they are still mapped to fields. What was forgotten is that m_pImpl->m_pSdtHelper in DomainMapper is a shared state: once a run SDT starts, it assumes that no non-run SDTs are in progress. Fix the problem by explicitly checking for non-run SDTs before PushSdt(), that keeps the separation (content control for run SDT, fields for the rest) but fixes the lost content. This is for plain text SDTs, but other types can be added if necessary. Change-Id: I46b029a3a945d7416028aa196ac3160e6d96eae8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136524 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx index 88ba238fae29..21d5c84cae4e 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper.cxx @@ -74,6 +74,27 @@ CPPUNIT_TEST_FIXTURE(Test, testLargeParaTopMargin) // -> wrap around a TextBox), which shifted the triangle shape out of the page frame. CPPUNIT_ASSERT_EQUAL(nExpected, nParaTopMargin); } + +CPPUNIT_TEST_FIXTURE(Test, testSdtRunInPara) +{ +// Given a document with a block SDT, and inside that some content + a run SDT: +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "sdt-run-in-para.docx"; + +// When loading that document: +getComponent() = loadFromDesktop(aURL); + +// Then make sure the content inside the block SDT but outside the run SDT is not lost: +uno::Reference xTextDocument(getComponent(), uno::UNO_QUERY); +uno::Reference xParaEnumAccess(xTextDocument->getText(), + uno::UNO_QUERY); +uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); +uno::Reference xPara(xParaEnum->nextElement(), uno::UNO_QUERY); +// Without the accompanying fix in place, this test would have failed with: +// - Expected: first-second +// - Actual : second +// i.e. the block-SDT-only string was lost. +CPPUNIT_ASSERT_EQUAL(OUString("first-second"), xPara->getString()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/sdt-run-in-para.docx b/writerfilter/qa/cppunittests/dmapper/data/sdt-run-in-para.docx new file mode 100644 index ..863bc9213b5b Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/sdt-run-in-para.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index cd89b3d7d7ae..224f8c2aa902 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -1074,6 +1074,16 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) } if (nName == NS_ooxml::LN_CT_SdtRun_sdtContent) { +if (m_pImpl->GetSdtStarts().empty() && !m_pImpl->m_pSdtHelper->getSdtTexts().isEmpty()) +{ +// A non-inline SDT is already started, first convert that to a field and only +// then map the inline SDT to a content control. +if (m_pImpl->m_pSdtHelper->getControlType() == SdtControlType::plainText) +{ +m_pImpl->m_pSdtHelper->createPlainTextControl(); +} +} + m_pImpl->m_pSdtHelper->setControlType(SdtControlType::richText); m_pImpl->PushSdt(); break;
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/filters-test/filters-test.cxx |2 writerfilter/source/dmapper/BorderHandler.cxx |2 writerfilter/source/dmapper/CellColorHandler.cxx | 30 writerfilter/source/dmapper/DomainMapper.cxx | 338 +- writerfilter/source/dmapper/DomainMapperTableHandler.cxx | 58 - writerfilter/source/dmapper/DomainMapperTableManager.cxx | 34 - writerfilter/source/dmapper/DomainMapper_Impl.cxx | 430 ++--- writerfilter/source/dmapper/FormControlHelper.cxx | 28 writerfilter/source/dmapper/GraphicImport.cxx | 130 +-- writerfilter/source/dmapper/NumberingManager.cxx | 22 writerfilter/source/dmapper/OLEHandler.cxx |6 writerfilter/source/dmapper/PropertyMap.cxx| 152 ++-- writerfilter/source/dmapper/SdtHelper.cxx | 30 writerfilter/source/dmapper/SettingsTable.cxx | 18 writerfilter/source/dmapper/StyleSheetTable.cxx| 48 - writerfilter/source/dmapper/TDefTableHandler.cxx | 12 writerfilter/source/dmapper/TableManager.cxx |8 writerfilter/source/dmapper/TablePropertiesHandler.cxx | 22 writerfilter/source/dmapper/TblStylePrHandler.cxx | 12 writerfilter/source/dmapper/TextEffectsHandler.cxx | 32 writerfilter/source/filter/RtfFilter.cxx |4 writerfilter/source/filter/WriterFilter.cxx| 56 - writerfilter/source/ooxml/OOXMLFastContextHandler.cxx |2 writerfilter/source/rtftok/rtfdispatchdestination.cxx |3 writerfilter/source/rtftok/rtfdispatchflag.cxx |4 writerfilter/source/rtftok/rtfdocumentimpl.cxx | 28 writerfilter/source/rtftok/rtfsdrimport.cxx| 103 +-- 27 files changed, 804 insertions(+), 810 deletions(-) New commits: commit 92fc91bbb865af2888a0717cdaef5e2af5b4b719 Author: Stephan Bergmann AuthorDate: Mon May 2 17:56:05 2022 +0200 Commit: Stephan Bergmann CommitDate: Mon May 2 21:59:54 2022 +0200 Just use Any ctor instead of makeAny in writerfilter Change-Id: I3db5381c5dc72f0498171d9e61479ae6763312bc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133708 Tested-by: Jenkins Reviewed-by: Stephan Bergmann diff --git a/writerfilter/qa/cppunittests/filters-test/filters-test.cxx b/writerfilter/qa/cppunittests/filters-test/filters-test.cxx index f377e8894c32..36ebeee2142e 100644 --- a/writerfilter/qa/cppunittests/filters-test/filters-test.cxx +++ b/writerfilter/qa/cppunittests/filters-test/filters-test.cxx @@ -46,7 +46,7 @@ bool RtfTest::load(const OUString&, const OUString& rURL, const OUString&, SfxFi SotClipboardFormatId, unsigned int) { uno::Sequence aDescriptor = { beans::PropertyValue( -"URL", sal_Int32(0), uno::makeAny(rURL), beans::PropertyState_DIRECT_VALUE) }; +"URL", sal_Int32(0), uno::Any(rURL), beans::PropertyState_DIRECT_VALUE) }; try { return m_xFilter->filter(aDescriptor); diff --git a/writerfilter/source/dmapper/BorderHandler.cxx b/writerfilter/source/dmapper/BorderHandler.cxx index c9c793ca35ff..cb8e38c7512e 100644 --- a/writerfilter/source/dmapper/BorderHandler.cxx +++ b/writerfilter/source/dmapper/BorderHandler.cxx @@ -168,7 +168,7 @@ PropertyMapPtr BorderHandler::getProperties() for( auto nProp: o3tl::enumrange()) { if ( m_aFilledLines[nProp] ) { -pPropertyMap->Insert( aPropNames[nProp], uno::makeAny( m_aBorderLines[nProp] ) ); +pPropertyMap->Insert( aPropNames[nProp], uno::Any( m_aBorderLines[nProp] ) ); } } } diff --git a/writerfilter/source/dmapper/CellColorHandler.cxx b/writerfilter/source/dmapper/CellColorHandler.cxx index 765d5a3a5273..439806e20fa8 100644 --- a/writerfilter/source/dmapper/CellColorHandler.cxx +++ b/writerfilter/source/dmapper/CellColorHandler.cxx @@ -92,7 +92,7 @@ static uno::Any lcl_ConvertShd(sal_Int32 nIntValue) case NS_ooxml::LN_Value_ST_Shd_pct95: aRet = "pct95"; break; case NS_ooxml::LN_Value_ST_Shd_nil: aRet = "nil"; break; } -return uno::makeAny(aRet); +return uno::Any(aRet); } void CellColorHandler::lcl_attribute(Id rName, Value & rVal) @@ -107,7 +107,7 @@ void CellColorHandler::lcl_attribute(Id rName, Value & rVal) } break; case NS_ooxml::LN_CT_Shd_fill: -createGrabBag("fill", uno::makeAny(msfilter::util::ConvertColorOU(Color(ColorTransparency, nIntValue; +createGrabBag("fill", uno::Any(msfilter::util::ConvertColorOU(Color(ColorTransparency, nIntValue; if( nIntValue == sal_Int32(COL_AUTO) ) nIntValue = 0xff; //fill color auto means white else @@ -117,29 +117,29 @@ void CellColorHandler::lcl_attribute(Id rName, Value & rVal)
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/SdtHelper.cxx | 46 writerfilter/qa/cppunittests/dmapper/data/sdt-run-checkbox.docx |binary writerfilter/source/dmapper/DomainMapper.cxx| 57 +- writerfilter/source/dmapper/DomainMapper_Impl.cxx | 21 +++ writerfilter/source/dmapper/DomainMapper_Impl.hxx |4 writerfilter/source/dmapper/SdtHelper.cxx | 18 +++ writerfilter/source/dmapper/SdtHelper.hxx | 23 +++- writerfilter/source/dmapper/TextEffectsHandler.cxx |1 writerfilter/source/dmapper/TextEffectsHandler.hxx |8 - writerfilter/source/ooxml/model.xml |7 - 10 files changed, 172 insertions(+), 13 deletions(-) New commits: commit c53d3a1f4b8430507d54f5fac336870df7a700af Author: Miklos Vajna AuthorDate: Fri Apr 29 08:12:25 2022 +0200 Commit: Miklos Vajna CommitDate: Fri Apr 29 09:03:01 2022 +0200 sw content controls, checkbox: add DOCX import My expectation was that would be mapped to a single SPRM where the int value is 0 or 1 depending on if this is a true or false boolean. But the w14 tokenizer rules actually created a NS_ooxml::LN_CT_SdtCheckbox_checked token with a NS_ooxml::LN_CT_OnOff_val token in it, which itself again didn't contain just a bool but dedicated NS_ooxml::LN_ST_OnOff_true, NS_ooxml::LN_ST_OnOff_1, etc values. To make this more complicated, TextEffectsHandler even depends on this weird behavior. Bring the w14 rules closer to the "main" wml rules by folding the NS_ooxml::LN_CT_OnOff_val token into the parent token (NS_ooxml::LN_CT_SdtCheckbox_checked in this case), but leave the NS_ooxml::LN_ST_OnOff_* values unchanged for now. The rest of the changes are more straightforward: we now handle inline/run checkbox SDTs similar to rich text ones, i.e. map them to Writer content controls, rather than just doing a poor mapping to grab-bags. The main benefit here is that the checkbox type of Writer content controls actually change their value on mouse click, so it's possible to fill in such forms. Change-Id: Idbf49a8ff1843d5271f2836e5299c4387bb58e55 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133588 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/SdtHelper.cxx b/writerfilter/qa/cppunittests/dmapper/SdtHelper.cxx index da2663b93409..c96cb604f91f 100644 --- a/writerfilter/qa/cppunittests/dmapper/SdtHelper.cxx +++ b/writerfilter/qa/cppunittests/dmapper/SdtHelper.cxx @@ -84,6 +84,52 @@ CPPUNIT_TEST_FIXTURE(Test, testSdtRunRichText) xContent->getPropertyValue("CharHeight") >>= fCharheight; CPPUNIT_ASSERT_EQUAL(24.f, fCharheight); } + +CPPUNIT_TEST_FIXTURE(Test, testSdtRunCheckbox) +{ +// Given a document with a checkbox inline/run SDT: +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "sdt-run-checkbox.docx"; + +// When loading the document: +getComponent() = loadFromDesktop(aURL); + +// Then make sure that the doc model has a clickable checkbox content control: +uno::Reference xTextDocument(getComponent(), uno::UNO_QUERY); +uno::Reference xParaEnumAccess(xTextDocument->getText(), + uno::UNO_QUERY); +uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); +uno::Reference xPara(xParaEnum->nextElement(), uno::UNO_QUERY); +uno::Reference xPortionEnum = xPara->createEnumeration(); +uno::Reference xPortion(xPortionEnum->nextElement(), uno::UNO_QUERY); +OUString aTextPortionType; +xPortion->getPropertyValue("TextPortionType") >>= aTextPortionType; +// Without the accompanying fix in place, this test would have failed with: +// - Expected: ContentControl +// - Actual : Text +// i.e. the SDT was imported as plain text, making it hard to fill in checkboxes. +CPPUNIT_ASSERT_EQUAL(OUString("ContentControl"), aTextPortionType); +uno::Reference xContentControl; +xPortion->getPropertyValue("ContentControl") >>= xContentControl; +uno::Reference xContentControlProps(xContentControl, uno::UNO_QUERY); +bool bCheckbox{}; +xContentControlProps->getPropertyValue("Checkbox") >>= bCheckbox; +CPPUNIT_ASSERT(bCheckbox); +bool bChecked{}; +xContentControlProps->getPropertyValue("Checked") >>= bChecked; +CPPUNIT_ASSERT(bChecked); +OUString aCheckedState; +xContentControlProps->getPropertyValue("CheckedState") >>= aCheckedState; +CPPUNIT_ASSERT_EQUAL(OUString(u"☒"), aCheckedState); +OUString aUncheckedState; +xContentControlProps->getPropertyValue("UncheckedState") >>= aUncheckedState; +CPPUNIT_ASSERT_EQUAL(OUString(u"☐"), aUncheckedState); +uno::Reference xContentControlRange(xContentControl,
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx| 34 writerfilter/qa/cppunittests/dmapper/data/clearing-break.docx |binary writerfilter/source/dmapper/DomainMapper.cxx | 18 +++- writerfilter/source/dmapper/DomainMapper_Impl.cxx | 38 ++ writerfilter/source/dmapper/DomainMapper_Impl.hxx |8 ++ writerfilter/source/ooxml/Handler.cxx |9 ++ writerfilter/source/ooxml/Handler.hxx |3 writerfilter/source/ooxml/OOXMLFastContextHandler.cxx |2 writerfilter/source/ooxml/OOXMLParserState.cxx|2 9 files changed, 106 insertions(+), 8 deletions(-) New commits: commit f86d1482bef285f90079b5130e410646db96cf58 Author: Miklos Vajna AuthorDate: Tue Mar 8 08:42:44 2022 +0100 Commit: Miklos Vajna CommitDate: Tue Mar 8 12:25:55 2022 +0100 sw clearing breaks: add DOCX import Map to the com.sun.star.text.LineBreak UNO service, but keep the default clear=none case unchanged. Change-Id: I145e891c1df0bbd0fdac2c62463dc801bca827fb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131167 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index a161c3514a17..16039f98370a 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -284,6 +284,40 @@ CPPUNIT_TEST_FIXTURE(Test, testPasteOle) uno::Reference xPara(xParaEnum->nextElement(), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("hello"), xPara->getString()); } + +CPPUNIT_TEST_FIXTURE(Test, testClearingBreak) +{ +// Given a document with a clearing break: +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "clearing-break.docx"; + +// When loading that file: +getComponent() = loadFromDesktop(aURL); + +// Then make sure that the clear property of the break is not ignored: +uno::Reference xTextDocument(getComponent(), uno::UNO_QUERY); +uno::Reference xText = xTextDocument->getText(); +uno::Reference xParaEnumAccess(xText, uno::UNO_QUERY); +uno::Reference xParagraphs = xParaEnumAccess->createEnumeration(); +uno::Reference xParagraph(xParagraphs->nextElement(), + uno::UNO_QUERY); +uno::Reference xPortions = xParagraph->createEnumeration(); +xPortions->nextElement(); +xPortions->nextElement(); +// Without the accompanying fix in place, this test would have failed with: +// An uncaught exception of type com.sun.star.container.NoSuchElementException +// i.e. the first para was just a fly + text portion, the clearing break was lost. +uno::Reference xPortion(xPortions->nextElement(), uno::UNO_QUERY); +OUString aPortionType; +xPortion->getPropertyValue("TextPortionType") >>= aPortionType; +CPPUNIT_ASSERT_EQUAL(OUString("LineBreak"), aPortionType); +uno::Reference xLineBreak; +xPortion->getPropertyValue("LineBreak") >>= xLineBreak; +sal_Int16 eClear{}; +uno::Reference xLineBreakProps(xLineBreak, uno::UNO_QUERY); +xLineBreakProps->getPropertyValue("Clear") >>= eClear; +// SwLineBreakClear::ALL +CPPUNIT_ASSERT_EQUAL(static_cast(3), eClear); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/clearing-break.docx b/writerfilter/qa/cppunittests/dmapper/data/clearing-break.docx new file mode 100644 index ..453a4c2b83d1 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/clearing-break.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index eed7ab8d45b0..f261538a0f19 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -749,9 +749,12 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) case NS_ooxml::LN_CT_SmartTagRun_element: m_pImpl->getSmartTagHandler().setElement(val.getString()); break; -case NS_ooxml::LN_CT_Br_type : -//TODO: attributes for break (0x12) are not supported -break; +case NS_ooxml::LN_CT_Br_type: +// Handled in the OOXMLBreakHandler dtor. +break; +case NS_ooxml::LN_CT_Br_clear: +m_pImpl->HandleLineBreakClear(val.getInt()); +break; case NS_ooxml::LN_CT_Fonts_hint : /* assigns script type to ambiguous characters, values can be: NS_ooxml::LN_Value_ST_Hint_default @@ -3471,7 +3474,14 @@ void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len) if (pContext == nullptr) pContext = new PropertyMap(); -
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/filters-test/data/fail/LIBREOFFICE-N4LA0OHZ.rtf | 403 ++ writerfilter/source/dmapper/DomainMapperTableManager.cxx | 2 2 files changed, 405 insertions(+) New commits: commit 46cf4096b794b11fee2bf75975f1083a38d889ec Author: Caolán McNamara AuthorDate: Tue Mar 1 10:39:34 2022 + Commit: Caolán McNamara CommitDate: Wed Mar 2 09:42:19 2022 +0100 fail more gracefully if m_aTmpPosition is empty LIBREOFFICE-N4LA0OHZ Change-Id: I7f863151f753ad5605c4f1f280cfd79aa4c6bce4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130760 Tested-by: Jenkins Reviewed-by: Caolán McNamara diff --git a/writerfilter/qa/cppunittests/filters-test/data/fail/LIBREOFFICE-N4LA0OHZ.rtf b/writerfilter/qa/cppunittests/filters-test/data/fail/LIBREOFFICE-N4LA0OHZ.rtf new file mode 100755 index ..6257e1071cfc --- /dev/null +++ b/writerfilter/qa/cppunittests/filters-test/data/fail/LIBREOFFICE-N4LA0OHZ.rtf @@ -0,0 +1,403 @@ +{\rtf1\�nsi\ansicpg1252\deflang3081\ftnbj\uc1\deff0 +{\fonttbl{\f0 \fswiss \f�charset0 Times New Roman;}{\f4 \fswiss 3\fcharset2 Symbol;}{\f5 \froman \fchraph Font;}{\cs2\f6\fs16\b\protect\cf1\cb3\chcbpat3\expnd0\expndtw0\charscalex100\dn0 SSBookmark;}{\s3\snext0\outlinelevel0\f0\fs32\b\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel0 Heading 1;}{\s4\snext0\outlinelevel1\f0\fs24\b\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel1 Heading 2;}{\s5\snext0\outlinelevel2\f0\fs24\b\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel2 Heading 3 +;}{\s6\snext0\outlinelevel3\f0\fs24\b\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel3 Heading 4;}{\s7\snext0\outlinelevel4\f0\fs24\b\i\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel4 Heading 5;}{\s8\snext0\outlinelevel5\f0\fs20\b\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel5 Heading 6;}{\s9\snext0\outlinelevel6\f0\fs24\cf4\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel6 Heading 7;}{\s10\snext0\outlinelevel7\f0\fs24\i\cf4\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel7 Heading 8 +;}{\s11\snext0\outlinelevel8\f0\fs22\cf4\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel8 Heading 9;}{\s12\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 TOC 1;}{\s13\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li180\ri0\sb0\sa0\sl0\shading0 TOC 2;}{\s14\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li360\ri0\sb0\sa0\sl0\shading0 TOC 3;}{\s15\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li540\ri0\sb0\sa0\sl0\shading0 TOC 4;}{\s16\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li360\ri0\sb0\sa0\sl0\shading0 TOC 3;}{\s15\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li540\ri0\sb0\sa0\sl0\shading0 TOC 4;}{\s16\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li720\ri0\sb0\sa0\sl0\shading0 TOC 5 +;}{\s17\snext0\f0\fs24\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li900\ri0\sb0\sa0\sl0\shading0 TOC 6;}{\s18\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li1080\ri0\sb0\sa0\sl0\shading0 TOC 7;}{\s19\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li1260\ri0\sb0\sa0\sl0\shading0 TOC 8;}{\s20\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li1440\ri0\sb0\sa0\sl0\shading0 TOC 9;}{\s21\snext0\f0\fs32\b\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb240\sa60\sl0\shading0\qc Title;}{\s22\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi-360\li360\ri0\sb0\sa0\sl0\shading0 Numbered List +;}{\s23\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi-360\li360\ri0\sb0\sa0\sl0\shading0 Bulleted List;}{\s24\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa120\sl0\shading0 Body Text;}{\s25\snext0\f0\fs18\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa120\sl0\sl480\slmult1\shading0 Body Text 2;}{\s26\snext0\f0\fs16\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa120\sl0\shading0 Body Text 3;}{\s27\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 Note Heading;}{\s28\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 Plain Text
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx | 28 writerfilter/qa/cppunittests/dmapper/data/paste-ole.rtf| 30 + writerfilter/source/dmapper/DomainMapper_Impl.cxx | 13 - 3 files changed, 68 insertions(+), 3 deletions(-) New commits: commit ce8b6f3426e55b6d09a52eb4a7d17614fc1a6c15 Author: Miklos Vajna AuthorDate: Mon Feb 7 16:02:51 2022 +0100 Commit: Miklos Vajna CommitDate: Tue Feb 8 07:35:13 2022 +0100 RTF paste: fix cursor creation on shapes This went wrong in commit 232ad2f2588beff50cb5c1f3b689c581ba317583 (API CHANGE: add a "position" parameter to XParagraph/TextPortionAppend methods, 2012-11-28), the problem is that the text range is part of the shape text's node range, so we have to call createTextCursorByRange() on the shape's XText, not on the body text. Change-Id: Ifa97213659130b8c279022a6a03f920dca6061bb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129603 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index c0468d9d55cc..962aa63f9ebc 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -20,6 +20,7 @@ #include #include #include +#include #include @@ -256,6 +257,33 @@ CPPUNIT_TEST_FIXTURE(Test, testPTab) // visually inside the background shape. CPPUNIT_ASSERT_EQUAL(OUString(" \n1" SAL_NEWLINE_STRING), xFooter->getString()); } + +CPPUNIT_TEST_FIXTURE(Test, testPasteOle) +{ +// Given an empty document: +getComponent() = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument"); + +// When pasting RTF into that document: +uno::Reference xTextDocument(getComponent(), uno::UNO_QUERY); +uno::Reference xText = xTextDocument->getText(); +uno::Reference xCursor( +xText->createTextCursorByRange(xText->getStart()), uno::UNO_QUERY); +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "paste-ole.rtf"; +xCursor->insertDocumentFromURL(aURL, {}); + +// Then make sure that all the 3 paragraphs of the paste data (empty para, OLE obj, text) are +// inserted to the document: +uno::Reference xParaEnumAccess(xText, uno::UNO_QUERY); +uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); +xParaEnum->nextElement(); +// Without the accompanying fix in place, this test would have failed, as the paste result was a +// single paragaph, containing the OLE object, and the content after the OLE object was lost. +CPPUNIT_ASSERT(xParaEnum->hasMoreElements()); +xParaEnum->nextElement(); +CPPUNIT_ASSERT(xParaEnum->hasMoreElements()); +uno::Reference xPara(xParaEnum->nextElement(), uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("hello"), xPara->getString()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/paste-ole.rtf b/writerfilter/qa/cppunittests/dmapper/data/paste-ole.rtf new file mode 100644 index ..27ce59baa50b --- /dev/null +++ b/writerfilter/qa/cppunittests/dmapper/data/paste-ole.rtf @@ -0,0 +1,30 @@ +{\rtf1 +\pard\plain\par +\pard\plain +{\object\objemb\objw1287\objh832\objscalex100\objscaley99 +{\*\objclass Package} +{\*\objdata 0105020008005061636b61676500eb01 +020030322e73766700443a5c446e445c54657374646174656e5c416c6c654461746569547970656e5c30322e7376670003003600443a5c54454d505c7b42433241443335362d363732422d344345302d394136342d3033373544464134324334377d5c30322e73766700ab003c7376672076657273696f6e +3d22312e31222076696577426f783d223020302034342032362220786d6c6e733d22687474703a2f2f772e77332e6f72672f323030302f737667223e0a203c7265637420783d222e352220793d222e35222077696474683d22343322206865696768743d223235222072783d223072793d223066696c6c3d +22236622207374726f6b653d222330303761222f3e0a3c2f7376673e0a350044003a005c00540045004d0050005c007b00420043003200410044003300350036002d0036003700320042002d0034004300450030002d0039004100360034002d003000330037003500440046004100340032004300340037 +007d005c00300032002e007300760067000600300032002e00730076006700260044003a005c0044006e0044005c00540065007300740064006100740065006e005c0041006c006c0065004400610074006500690054007900700065006e005c00300032002e007300760067000105} +{\result +{\*\shppict +{\pict +\picscalex100\picscaley99\picw2270\pich1468\picwgoal1287\pichgoal832\emfblip +01006c0095009500 +670f630f20454d460100280107000200 +3807bd03e901fd00 +f675070016dd0300210008006200 +0c000100270018000100ff00
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx | 26 ++ writerfilter/qa/cppunittests/dmapper/data/ptab.docx|binary writerfilter/source/dmapper/DomainMapper.cxx |2 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 56 + writerfilter/source/dmapper/DomainMapper_Impl.hxx |3 5 files changed, 87 insertions(+) New commits: commit 8bac48991857d222f0e8f0c07b8c4e06649e1632 Author: Miklos Vajna AuthorDate: Fri Jan 28 13:38:20 2022 +0100 Commit: Miklos Vajna CommitDate: Fri Jan 28 19:15:37 2022 +0100 DOCX import: handle a subset of The case when we can map it to a line break. This way the page number is visually inside the rectangle shape that is behind the field. The test intentionally uses \n as-is for line-break, because SwASCWriter::WriteStream() uses \n in the LINEEND_LF case even on Windows (and not SAL_NEWLINE_STRING), while SAL_NEWLINE_STRING is used for paragraph-break. Change-Id: Ic85e57b2391bfac73507727b17240f4d85fc2698 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129059 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index 3719a09e3323..c0468d9d55cc 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -19,6 +19,7 @@ #include #include #include +#include #include @@ -230,6 +231,31 @@ CPPUNIT_TEST_FIXTURE(Test, testChartZOrder) // of the shape. CPPUNIT_ASSERT(xChart->supportsService("com.sun.star.text.TextEmbeddedObject")); } + +CPPUNIT_TEST_FIXTURE(Test, testPTab) +{ +// Given a document that has a to render a linebreak: +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ptab.docx"; + +// When opening that file: +getComponent() = loadFromDesktop(aURL); + +// Then make sure that the Writer doc model contains that linebreak: +uno::Reference xStyleFamiliesSupplier(getComponent(), + uno::UNO_QUERY); +uno::Reference xStyleFamilies += xStyleFamiliesSupplier->getStyleFamilies(); +uno::Reference xStyleFamily(xStyleFamilies->getByName("PageStyles"), +uno::UNO_QUERY); +uno::Reference xStyle(xStyleFamily->getByName("Standard"), uno::UNO_QUERY); +auto xFooter = xStyle->getPropertyValue("FooterText").get>(); +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 1\n +// - Actual: 1\n +// i.e. the layout height of the footer text was incorrect, the page number field was not +// visually inside the background shape. +CPPUNIT_ASSERT_EQUAL(OUString(" \n1" SAL_NEWLINE_STRING), xFooter->getString()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/ptab.docx b/writerfilter/qa/cppunittests/dmapper/data/ptab.docx new file mode 100644 index ..d1ae18a27a55 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/ptab.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index e8b5a3f40e5b..6a18d8d12da0 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -1167,7 +1167,9 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) break; case NS_ooxml::LN_CT_PTab_leader: case NS_ooxml::LN_CT_PTab_relativeTo: +break; case NS_ooxml::LN_CT_PTab_alignment: +m_pImpl->HandlePTab(nIntValue); break; case NS_ooxml::LN_CT_Cnf_lastRowLastColumn: m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "lastRowLastColumn", OUString::number(nIntValue)); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index f0902918e0ff..952d225f52f7 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -3868,6 +3868,62 @@ void DomainMapper_Impl::HandleAltChunk(const OUString& rStreamName) } } +void DomainMapper_Impl::HandlePTab(sal_Int32 nAlignment) +{ +// We only handle the case when the line already has content, so the left-aligned ptab is +// equivalent to a line break. +if (nAlignment != NS_ooxml::LN_Value_ST_PTabAlignment_left) +{ +return; +} + +if (m_aTextAppendStack.empty()) +{ +return; +} + +uno::Reference xTextAppend = m_aTextAppendStack.top().xTextAppend; +if (!xTextAppend.is()) +{ +return; +} + +uno::Reference xInsertPosition +=
[Libreoffice-commits] core.git: writerfilter/qa
writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx | 18 ++ writerfilter/qa/cppunittests/dmapper/data/layout-in-cell-2.docx |binary 2 files changed, 18 insertions(+) New commits: commit 0101c7918bb735d796bc1bc0d1705f995e41ee98 Author: Tor Lillqvist AuthorDate: Wed Jan 26 13:02:06 2022 +0200 Commit: Miklos Vajna CommitDate: Thu Jan 27 11:53:52 2022 +0100 Add simple unit test for recent fix to take layoutInCell into consideration ... when a graphic is in table row. The test just checks that the IsFollowingTextFlow property gets set as true, it doesn't check that the table row height actually is correct or that the result looks correct. Change-Id: Ia6feec2b2a9bbff6e130f9542c15106750ff415d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128982 Tested-by: Jenkins Reviewed-by: Miklos Vajna diff --git a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx index 2f9faefab55f..a20c8490501b 100644 --- a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx +++ b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx @@ -388,6 +388,24 @@ CPPUNIT_TEST_FIXTURE(Test, testLayoutInCellWrapnoneColumn) CPPUNIT_ASSERT(xShape->getPropertyValue("IsFollowingTextFlow") >>= bFollowingTextFlow); CPPUNIT_ASSERT(!bFollowingTextFlow); } + +CPPUNIT_TEST_FIXTURE(Test, testLayoutInCellOfHraphics) +{ +// Given a file with a table, then a shape anchored inside the cell: +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "layout-in-cell-2.docx"; + +// When loading that document: +getComponent() = loadFromDesktop(aURL); + +// Then make sure the cell obeys the layoutInCell: +uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); +uno::Reference xShape(xDrawPage->getByIndex(1), uno::UNO_QUERY); +uno::Reference xNamedShape(xShape, uno::UNO_QUERY); +bool bFollowingTextFlow = false; +CPPUNIT_ASSERT(xShape->getPropertyValue("IsFollowingTextFlow") >>= bFollowingTextFlow); +CPPUNIT_ASSERT(bFollowingTextFlow); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/layout-in-cell-2.docx b/writerfilter/qa/cppunittests/dmapper/data/layout-in-cell-2.docx new file mode 100644 index ..5b6926460c80 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/layout-in-cell-2.docx differ
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx | 22 ++ writerfilter/qa/cppunittests/dmapper/data/layout-in-cell-wrapnone-column.docx |binary writerfilter/source/dmapper/GraphicImport.cxx |7 +++ 3 files changed, 29 insertions(+) New commits: commit e993638d5ecd33783f2eebdccfa87a81e5a8a2c5 Author: Miklos Vajna AuthorDate: Mon Jan 24 12:53:25 2022 +0100 Commit: Miklos Vajna CommitDate: Mon Jan 24 15:10:24 2022 +0100 DOCX import: fix with If wrap is set to none ("in front of text"), then ignores layoutInCell="1" in Word. But in case relativeFrom is something else (e.g. page) or wrap is not none, then the old behavior is OK. Adjust our import so that Writer's layout also allows this shape to leave the cell. Change-Id: I6ca7511d46d7a70df11a65dc67c182f4fff4ae69 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128862 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx index edd6e02ff8ea..2f9faefab55f 100644 --- a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx +++ b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx @@ -366,6 +366,28 @@ CPPUNIT_TEST_FIXTURE(Test, testTextboxTextlineTop) sal_Int16 nExpectedOrient = text::VertOrientation::BOTTOM; CPPUNIT_ASSERT_EQUAL(nExpectedOrient, nActualOrient); } + +CPPUNIT_TEST_FIXTURE(Test, testLayoutInCellWrapnoneColumn) +{ +// Given a file with a table, then a shape anchored inside the cell: +OUString aURL += m_directories.getURLFromSrc(DATA_DIRECTORY) + "layout-in-cell-wrapnone-column.docx"; + +// When loading that document: +getComponent() = loadFromDesktop(aURL); + +// Then make sure the shape can leave the cell: +uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); +uno::Reference xShape(xDrawPage->getByIndex(1), uno::UNO_QUERY); +uno::Reference xNamedShape(xShape, uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("Text Box 1"), xNamedShape->getName()); +bool bFollowingTextFlow = true; +// Without the accompanying fix in place, this test would have failed, the shape was not allowed +// to leave the cell, leading to incorrect layout. +CPPUNIT_ASSERT(xShape->getPropertyValue("IsFollowingTextFlow") >>= bFollowingTextFlow); +CPPUNIT_ASSERT(!bFollowingTextFlow); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/layout-in-cell-wrapnone-column.docx b/writerfilter/qa/cppunittests/dmapper/data/layout-in-cell-wrapnone-column.docx new file mode 100644 index ..d88761421154 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/layout-in-cell-wrapnone-column.docx differ diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index 704774ec504a..bb3b2077e4aa 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -1228,6 +1228,13 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) // But they aren't Writer pictures, either (which are already handled above). uno::Reference< beans::XPropertySet > xShapeProps(m_xShape, uno::UNO_QUERY_THROW); +if (m_pImpl->nWrap == text::WrapTextMode_THROUGH && m_pImpl->nHoriRelation == text::RelOrientation::FRAME) +{ +// text::RelOrientation::FRAME is OOXML's "column", which behaves as if +// layout-in-cell would be always off. +m_pImpl->bLayoutInCell = false; +} + // Anchored: Word only supports at-char in that case. text::TextContentAnchorType eAnchorType = text::TextContentAnchorType_AT_CHARACTER;
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx | 21 ++ writerfilter/qa/cppunittests/dmapper/data/table-negative-vertical-pos.docx |binary writerfilter/source/dmapper/PropertyMap.cxx| 11 - 3 files changed, 30 insertions(+), 2 deletions(-) New commits: commit 3eb6d764b3023500f2299d36bf1860bc8e67db9f Author: Miklos Vajna AuthorDate: Fri Jan 21 10:06:02 2022 +0100 Commit: Miklos Vajna CommitDate: Fri Jan 21 12:31:24 2022 +0100 DOCX import: floating table with negative top margin has to be a fly frame The bugdoc has a large header, then part of the table goes into the whitespace of the header by specifying a negative vertical position. Keep this as a floating table as normal tables can't have negative top margins. Change-Id: I95299051f004976778765965971428d9764bef08 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128724 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx b/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx index 7b552af94bb0..ae32ce1e4dc7 100644 --- a/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx +++ b/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx @@ -15,6 +15,7 @@ #include #include #include +#include using namespace ::com::sun::star; @@ -87,6 +88,26 @@ CPPUNIT_TEST_FIXTURE(Test, testFollowPageTopMargin) // i.e. the top margin on page 2 was too large. CPPUNIT_ASSERT_EQUAL(static_cast(250), nTopMargin); } + +CPPUNIT_TEST_FIXTURE(Test, testTableNegativeVerticalPos) +{ +// Given a document with a table which has a negative vertical position (moves up to overlap +// with the header): +OUString aURL += m_directories.getURLFromSrc(DATA_DIRECTORY) + "table-negative-vertical-pos.docx"; + +// When loading that document: +getComponent() = loadFromDesktop(aURL); + +// Then make sure we don't import that as a plain table, which can't have a negative top margin: +uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 1 +// - Actual : 0 +// i.e. this was imported as a plain table, resulting in a 0 top margin (y pos too large). +CPPUNIT_ASSERT_EQUAL(static_cast(1), xDrawPage->getCount()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/table-negative-vertical-pos.docx b/writerfilter/qa/cppunittests/dmapper/data/table-negative-vertical-pos.docx new file mode 100644 index ..2031f4769877 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/table-negative-vertical-pos.docx differ diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 8634d66e1ae5..58871cc04538 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -1146,6 +1146,15 @@ bool SectionPropertyMap::FloatingTableConversion( const DomainMapper_Impl& rDM_I if (rDM_Impl.m_bConvertedTable && !rDM_Impl.GetIsLastSectionGroup() && rInfo.m_nBreakType == NS_ooxml::LN_Value_ST_SectionMark_nextPage) return false; +sal_Int32 nVertOrientPosition = rInfo.getPropertyValue(u"VertOrientPosition").get(); +sal_Int16 nHoriOrientRelation = rInfo.getPropertyValue( u"HoriOrientRelation" ).get(); +if (nVertOrientPosition < 0 && nHoriOrientRelation != text::RelOrientation::PAGE_FRAME) +{ +// Negative vertical position: then need a floating table, as normal tables can't have +// negative top margins. +return true; +} + sal_Int32 nPageWidth = GetPageWidth(); sal_Int32 nTextAreaWidth = nPageWidth - GetLeftMargin() - GetRightMargin(); // Count the layout width of the table. @@ -1161,7 +1170,6 @@ bool SectionPropertyMap::FloatingTableConversion( const DomainMapper_Impl& rDM_I if ( rInfo.getPropertyValue( u"RightMargin" ) >>= nRightMargin ) nTableWidth += nRightMargin; -sal_Int16 nHoriOrientRelation = rInfo.getPropertyValue( u"HoriOrientRelation" ).get(); sal_Int16 nVertOrientRelation = rInfo.getPropertyValue( u"VertOrientRelation" ).get(); if ( nHoriOrientRelation == text::RelOrientation::PAGE_FRAME && nVertOrientRelation == text::RelOrientation::PAGE_FRAME ) { @@ -1174,7 +1182,6 @@ bool SectionPropertyMap::FloatingTableConversion( const DomainMapper_Impl& rDM_I // The more close we are to the bottom, the more likely the table will span over to the next page // So if we're in the bottom left quarter, don't do any conversion. sal_Int32 nHoriOrientPosition = rInfo.getPropertyValue( u"HoriOrientPosition" ).get(); -sal_Int32
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/watermark.rtf | 47 + writerfilter/qa/cppunittests/rtftok/rtfsdrimport.cxx | 23 writerfilter/source/rtftok/rtfsdrimport.cxx| 31 +++ 3 files changed, 101 insertions(+) New commits: commit 078d9da95f6e32965b99248eb61e6e7b859ef150 Author: Miklos Vajna AuthorDate: Mon Jan 17 20:19:24 2022 +0100 Commit: Miklos Vajna CommitDate: Tue Jan 18 08:10:22 2022 +0100 RTF import: handle the pictureContrast and pictureBrightness shape props Map it to (the UNO API of) GraphicDrawMode::Watermark, similar to what the binary import does in SvxMSDffManager::ImportGraphic() and how the drawingML import does it in oox::drawingml::GraphicProperties::pushToPropMap(). Change-Id: I8023aa8fcbd086d4c7a30729e3ca615a7356da4b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128515 Tested-by: Jenkins Reviewed-by: Miklos Vajna diff --git a/writerfilter/qa/cppunittests/rtftok/data/watermark.rtf b/writerfilter/qa/cppunittests/rtftok/data/watermark.rtf new file mode 100644 index ..552f93844451 --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/watermark.rtf @@ -0,0 +1,47 @@ +{\rtf1 +{\header\pard\plain +{\shp +{\*\shpinst\shpleft0\shptop0\shpright9359\shpbottom9359\shpfhdr1\shpbxmargin\shpbxignore\shpbymargin\shpbyignore\shpwr3\shpwrk0\shpfblwtxt1\shpz1\shplid2050 +{\sp +{\sn shapeType} +{\sv 75} +} +{\sp +{\sn pib} +{\sv +{\pict\picscalex914\picscaley914\piccropl0\piccropr0\piccropt0\piccropb0\picw1806\pich1806\picwgoal1024\pichgoal1024\pngblip\bliptag133373369 +89504e470d0a1a0a000d4948445200400040080460b955000467414d41b18f0bfc610500017352474200aece1ce9 +00206348524d7a268084fa0080e87530ea603a9817709cba513c0002624b4744aa8d233200096f464673 +0006000c7355d30009704859730dd70dd70142289b78000976704167004c0040009d31381b01cd4944415468 +deedd93d4fc24018c0f17f89c6cdc44940e3e222be2c0e7e0417e3a8113571707632514012a320c6f84d34be2c2ec2b750f40be8e6e4a00113cfe14a5b69b108 +f4589ee71652eefafce0b9f42e3d7063822aaac3f641d173a75d3efee85b6582c0c8749c5eb7332cfb4e6f213d336ed29807304477b1c7a94db80ae9e9c934d0 +fcdd12e7ffcefcc9168f9a0059143b8cb0d2de581f609854073fbecc220f60b18722479d0d14abed8c8cb5d3293ce2949903b0d8a7047cb1c98541008cba840c +a736e1d2200046b967567f740961d3b197008873cf74835002eaac736319ca0d4296121675d2dc1a0440d2256428625163ed2f42cf011e8245d621b42c44 +0400485261a699706d192fa100d4490713220240dc25e438b1090185880ca09f8ece5c28d9843b009e82471ca25069d5cb785529bd007fdbfb8541b65b2f +531100947a51530d42c1d92f9829818e31ca4ce9421c70e427440e80712a7a89b7c8fb0906003046a5311df31cf501a01f4d0ee1b80f00bd4c398558ee0340ff +0b939a30df17002459f05d330a080a0108421084210842108421f8ce0ddf798e30dd7b38e0ce7ea16d2abc25a819cbda225337c7 +f7ff69bf8eef7f0084e08d42bdf8a03e0025744558746372656174652d6461746500323031302d31322d32305431373a30383a33362b30313a30307ae51b1c0025744558746d6f646966792d6461746500323031302d31322d32305431373a30383a33372b30313a30308323669c49454e44ae426082} +} +} +{\sp +{\sn pictureContrast} +{\sv 19661} +} +{\sp +{\sn pictureBrightness} +{\sv 22938} +} +{\sp +{\sn posh} +{\sv 2} +} +{\sp +{\sn posv} +{\sv 2} +} +} +} +\par +} +\pard\plain\par +} diff --git a/writerfilter/qa/cppunittests/rtftok/rtfsdrimport.cxx b/writerfilter/qa/cppunittests/rtftok/rtfsdrimport.cxx index f8ab49d40534..74af1dcf17ab 100644 --- a/writerfilter/qa/cppunittests/rtftok/rtfsdrimport.cxx +++ b/writerfilter/qa/cppunittests/rtftok/rtfsdrimport.cxx @@ -13,6 +13,7 @@ #include #include #include +#include #include using namespace ::com::sun::star; @@ -64,6 +65,28 @@ CPPUNIT_TEST_FIXTURE(Test, testPictureInTextframe) // on import. CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AS_CHARACTER, eAnchorType); } + +CPPUNIT_TEST_FIXTURE(Test, testWatermark) +{ +// Given a document with a picture watermark, and the "washout" checkbox is ticked on the Word +// UI: +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "watermark.rtf"; + +// When loading that document: +getComponent() = loadFromDesktop(aURL); + +// Then make sure the watermark effect is not lost on import: +uno::Reference xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xDrawPagesSupplier->getDrawPage(); +uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); +drawing::ColorMode eMode{}; +xShape->getPropertyValue("GraphicColorMode") >>= eMode; +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 3 +// - Actual : 0 +// i.e. the color mode was STANDARD, not WATERMARK. +CPPUNIT_ASSERT_EQUAL(drawing::ColorMode_WATERMARK, eMode); +} } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/rtftok/rtfsdrimport.cxx
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx | 18 writerfilter/qa/cppunittests/dmapper/data/chart-zorder.docx |binary writerfilter/source/dmapper/DomainMapper_Impl.cxx |3 ++ 3 files changed, 21 insertions(+) New commits: commit 63007619da7e6c4a6d0c466a8fe54324252be14b Author: Miklos Vajna AuthorDate: Mon Oct 18 19:54:07 2021 +0200 Commit: Miklos Vajna CommitDate: Tue Oct 19 08:17:14 2021 +0200 tdf#144798 DOCX import: handle ZOrder of chart objects Regression from commit 10efab2b9a3cf7fc49655c90ba29db4512680c38 (tdf#82824 DOCX import: fix at-char embedded object handling, 2016-11-15), the problem was that if we start supporting anchor types other than as-char, then handling ZOrder is no longer optional. Change-Id: I605cee33180490817055978b22f3271b3c08a1c0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123757 Tested-by: Jenkins Reviewed-by: Miklos Vajna diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index ef4c8ed40fb0..3719a09e3323 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -18,6 +18,7 @@ #include #include #include +#include #include @@ -212,6 +213,23 @@ CPPUNIT_TEST_FIXTURE(Test, testCreateDatePreserve) // i.e. the formatting of the create date field was lost. CPPUNIT_ASSERT_EQUAL(OUString("7/7/2020 10:11:00 AM"), xPortion->getString()); } + +CPPUNIT_TEST_FIXTURE(Test, testChartZOrder) +{ +// Given a document with a chart and a shape on it: +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "chart-zorder.docx"; + +// When loading the document: +getComponent() = loadFromDesktop(aURL); + +// Then make sure the shape is on top of the chart: +uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); +uno::Reference xChart(xDrawPage->getByIndex(0), uno::UNO_QUERY); +// Without the accompanying fix in place, this test would have failed, as the chart was on top +// of the shape. + CPPUNIT_ASSERT(xChart->supportsService("com.sun.star.text.TextEmbeddedObject")); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/chart-zorder.docx b/writerfilter/qa/cppunittests/dmapper/data/chart-zorder.docx new file mode 100644 index ..e022a3bde266 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/chart-zorder.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 12dacd0ef733..0dcaa197962b 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -7364,6 +7364,9 @@ void DomainMapper_Impl::ImportGraphic(const writerfilter::Reference< Properties xEmbeddedProps->setPropertyValue("VertOrientRelation", xShapeProps->getPropertyValue("VertOrientRelation")); //tdf123873 fix missing textwrap import xEmbeddedProps->setPropertyValue("TextWrap", xShapeProps->getPropertyValue("TextWrap")); + +// GraphicZOrderHelper::findZOrder() was called already, so can just copy it over. +xEmbeddedProps->setPropertyValue("ZOrder", xShapeProps->getPropertyValue("ZOrder")); } } //insert it into the document at the current cursor position
[Libreoffice-commits] core.git: writerfilter/qa
dev/null |binary writerfilter/qa/documents/fields.docx |1 - writerfilter/qa/documents/multimerge2.docx |2 -- 3 files changed, 3 deletions(-) New commits: commit 47ac60e223d43c19eda2d596925aafa4a7ee18d1 Author: Xisco Fauli AuthorDate: Wed Oct 13 11:45:15 2021 +0200 Commit: Xisco Fauli CommitDate: Wed Oct 13 13:55:22 2021 +0200 writerfilter: remove a bunch of unused documents from git Change-Id: I95d6f5780ec43787f7daa75f435f1c918de6a57e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123549 Tested-by: Jenkins Reviewed-by: Xisco Fauli diff --git a/writerfilter/qa/documents/Bookmark1.doc b/writerfilter/qa/documents/Bookmark1.doc deleted file mode 100644 index 71565d9790c8.. Binary files a/writerfilter/qa/documents/Bookmark1.doc and /dev/null differ diff --git a/writerfilter/qa/documents/Bookmark1.docx b/writerfilter/qa/documents/Bookmark1.docx deleted file mode 100644 index a00eab97a304.. Binary files a/writerfilter/qa/documents/Bookmark1.docx and /dev/null differ diff --git a/writerfilter/qa/documents/CellAlignment.doc b/writerfilter/qa/documents/CellAlignment.doc deleted file mode 100644 index 57a6745b4504.. Binary files a/writerfilter/qa/documents/CellAlignment.doc and /dev/null differ diff --git a/writerfilter/qa/documents/Footnote.doc b/writerfilter/qa/documents/Footnote.doc deleted file mode 100644 index 9098c91a98ce.. Binary files a/writerfilter/qa/documents/Footnote.doc and /dev/null differ diff --git a/writerfilter/qa/documents/Footnote.docx b/writerfilter/qa/documents/Footnote.docx deleted file mode 100644 index a20d2747abae.. Binary files a/writerfilter/qa/documents/Footnote.docx and /dev/null differ diff --git a/writerfilter/qa/documents/HeaderFooter.doc b/writerfilter/qa/documents/HeaderFooter.doc deleted file mode 100644 index 9b023b485761.. Binary files a/writerfilter/qa/documents/HeaderFooter.doc and /dev/null differ diff --git a/writerfilter/qa/documents/HeaderFooter.docx b/writerfilter/qa/documents/HeaderFooter.docx deleted file mode 100644 index 1c550b4d547b.. Binary files a/writerfilter/qa/documents/HeaderFooter.docx and /dev/null differ diff --git a/writerfilter/qa/documents/IndentedTable.doc b/writerfilter/qa/documents/IndentedTable.doc deleted file mode 100644 index b96ca77b0e5a.. Binary files a/writerfilter/qa/documents/IndentedTable.doc and /dev/null differ diff --git a/writerfilter/qa/documents/IndentedTable1.docx b/writerfilter/qa/documents/IndentedTable1.docx deleted file mode 100644 index 2499549d3e76.. Binary files a/writerfilter/qa/documents/IndentedTable1.docx and /dev/null differ diff --git a/writerfilter/qa/documents/MergedTable.doc b/writerfilter/qa/documents/MergedTable.doc deleted file mode 100644 index 0061045f6358.. Binary files a/writerfilter/qa/documents/MergedTable.doc and /dev/null differ diff --git a/writerfilter/qa/documents/MergedTable.docx b/writerfilter/qa/documents/MergedTable.docx deleted file mode 100644 index f379c07045d1.. Binary files a/writerfilter/qa/documents/MergedTable.docx and /dev/null differ diff --git a/writerfilter/qa/documents/MergedTable_3_3.doc b/writerfilter/qa/documents/MergedTable_3_3.doc deleted file mode 100644 index 13b727590950.. Binary files a/writerfilter/qa/documents/MergedTable_3_3.doc and /dev/null differ diff --git a/writerfilter/qa/documents/MergedTable_3_3.docx b/writerfilter/qa/documents/MergedTable_3_3.docx deleted file mode 100644 index 6fd7447bd409.. Binary files a/writerfilter/qa/documents/MergedTable_3_3.docx and /dev/null differ diff --git a/writerfilter/qa/documents/MultiMergedTable.docx b/writerfilter/qa/documents/MultiMergedTable.docx deleted file mode 100644 index 34fcdac2d395.. Binary files a/writerfilter/qa/documents/MultiMergedTable.docx and /dev/null differ diff --git a/writerfilter/qa/documents/MultiWrapping1.docx b/writerfilter/qa/documents/MultiWrapping1.docx deleted file mode 100644 index ce58b09b86fd.. Binary files a/writerfilter/qa/documents/MultiWrapping1.docx and /dev/null differ diff --git a/writerfilter/qa/documents/Paragraph with footnote.doc b/writerfilter/qa/documents/Paragraph with footnote.doc deleted file mode 100644 index eaf22b5ef699.. Binary files a/writerfilter/qa/documents/Paragraph with footnote.doc and /dev/null differ diff --git a/writerfilter/qa/documents/Paragraph with footnote.docx b/writerfilter/qa/documents/Paragraph with footnote.docx deleted file mode 100644 index fbaac59dc283.. Binary files a/writerfilter/qa/documents/Paragraph with footnote.docx and /dev/null differ diff --git a/writerfilter/qa/documents/Picture1.docx b/writerfilter/qa/documents/Picture1.docx deleted file mode 100644 index 0a55180a9437.. Binary files
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx| 19 ++ writerfilter/qa/cppunittests/dmapper/data/tdf143455_SmartArtPosition.docx |binary writerfilter/source/dmapper/GraphicImport.cxx | 14 +-- 3 files changed, 29 insertions(+), 4 deletions(-) New commits: commit 17cfd3d3e2e6f807eb1faf07436c7e96e15157a7 Author: Regina Henschel AuthorDate: Wed Jul 21 20:43:53 2021 +0200 Commit: Regina Henschel CommitDate: Fri Jul 23 18:05:01 2021 +0200 tdf#143455 exclude diagram from pos and margin adaptions The current implementation of diagram (SmartArt) uses a SdrGroupObj, but it is actually not a group of the diagram parts. Currently the group's object list contains only one, dummy object. Therefore it works not well with the code parts used for groups. Because we will have (hopefully) the tender 'Dynamic Diagram feature' I have done nothing on diagrams, but as workaround only excluded diagrams from these code parts. That way the rendering is same as in LO 7.1. This part of code needs to be touched again, when diagrams are implemented in a different way. Change-Id: Ife4bb495c96fb1dd57663f28409dc2bb456282ab Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119344 Tested-by: Jenkins Reviewed-by: Regina Henschel diff --git a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx index ffd14a4f2082..edd6e02ff8ea 100644 --- a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx +++ b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx @@ -57,6 +57,25 @@ void Test::tearDown() constexpr OUStringLiteral DATA_DIRECTORY = u"/writerfilter/qa/cppunittests/dmapper/data/"; +CPPUNIT_TEST_FIXTURE(Test, testTdf143455SmartArtPosition) +{ +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf143455_SmartArtPosition.docx"; +getComponent() = loadFromDesktop(aURL); +uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); +uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); +// Without fix in place the group, which represents the SmartArt, was placed at the initializing +// position 0|0. +sal_Int32 nHoriPosition = 0; +xShape->getPropertyValue("HoriOrientPosition") >>= nHoriPosition; +// The test would have failed with Expected: 2858, Actual: 0 +CPPUNIT_ASSERT_EQUAL(static_cast(2858), nHoriPosition); +sal_Int32 nVertPosition = 0; +xShape->getPropertyValue("VertOrientPosition") >>= nVertPosition; +// The test would have failed with Expected: 1588, Actual: 0 +CPPUNIT_ASSERT_EQUAL(static_cast(1588), nVertPosition); +} + CPPUNIT_TEST_FIXTURE(Test, testTdf143208wrapTight) { OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf143208_wrapTight.docx"; diff --git a/writerfilter/qa/cppunittests/dmapper/data/tdf143455_SmartArtPosition.docx b/writerfilter/qa/cppunittests/dmapper/data/tdf143455_SmartArtPosition.docx new file mode 100644 index ..1b1881b1e9ef Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/tdf143455_SmartArtPosition.docx differ diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index fde309061940..80ffbcaff85c 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -79,6 +79,7 @@ #include #include #include +#include using namespace css; @@ -879,7 +880,12 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) comphelper::SequenceAsHashMap aInteropGrabBag(xShapeProps->getPropertyValue("InteropGrabBag")); sal_Int32 nOOXAngle(0); aInteropGrabBag.getValue("mso-rotation-angle") >>= nOOXAngle; // 1/6 deg -const bool bIsGroupOrLine = xServiceInfo->supportsService("com.sun.star.drawing.GroupShape") +// tdf#143455: A diagram is imported as group, but has no valid object list +// and contour wrap is different to Word. As workaround diagramms are excluded +// here in various places. +const bool bIsDiagram = oox::drawingml::DrawingML::IsDiagram(m_xShape); +const bool bIsGroupOrLine = (xServiceInfo->supportsService("com.sun.star.drawing.GroupShape") +&& !bIsDiagram) || xServiceInfo->supportsService("com.sun.star.drawing.LineShape"); SdrObject* pShape = GetSdrObjectFromXShape(m_xShape); if ((bIsGroupOrLine && !lcl_bHasGroupSlantedChild(pShape) && nOOXAngle == 0) @@ -1012,7 +1018,7 @@ void GraphicImport::lcl_attribute(Id nName, Value&
[Libreoffice-commits] core.git: writerfilter/qa
writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) New commits: commit badc5a7ac8dda3c7b991c671776d2d41a5b7ea26 Author: Stephan Bergmann AuthorDate: Fri Jul 23 12:17:56 2021 +0200 Commit: Stephan Bergmann CommitDate: Fri Jul 23 13:13:52 2021 +0200 -Werror=maybe-uninitialized (at least with recent GCC 12 trunk and --enable-dbgutil --enable-optimized) Change-Id: Ie16260267b70c9e887c0342a09875e8d0a6a5eee Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119402 Tested-by: Jenkins Reviewed-by: Stephan Bergmann diff --git a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx index c47b33b71f5c..ffd14a4f2082 100644 --- a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx +++ b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx @@ -66,7 +66,7 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf143208wrapTight) uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); -bool bContourOutside; +bool bContourOutside = false; xShape->getPropertyValue("ContourOutside") >>= bContourOutside; CPPUNIT_ASSERT(bContourOutside); } ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx | 14 ++ writerfilter/qa/cppunittests/dmapper/data/tdf143208_wrapTight.docx |binary writerfilter/source/dmapper/GraphicImport.cxx |1 3 files changed, 15 insertions(+) New commits: commit 72541a46aa26194b751785cd56185c8d3db0c9e9 Author: Regina Henschel AuthorDate: Tue Jul 6 00:03:25 2021 +0200 Commit: Regina Henschel CommitDate: Tue Jul 6 14:02:15 2021 +0200 tdf#143208 set property ContourOutside in docx import The property value was correctly read from wrapTight and wrapThrough to bContourOutside, but not added to the shape properties. Change-Id: I825ec2a652031edf69e05f611e6da0f1afd862cb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118456 Tested-by: Jenkins Reviewed-by: Regina Henschel diff --git a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx index 6ef6cf1da6e6..c47b33b71f5c 100644 --- a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx +++ b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx @@ -57,6 +57,20 @@ void Test::tearDown() constexpr OUStringLiteral DATA_DIRECTORY = u"/writerfilter/qa/cppunittests/dmapper/data/"; +CPPUNIT_TEST_FIXTURE(Test, testTdf143208wrapTight) +{ +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf143208_wrapTight.docx"; +// The document has a shape with indentation and contour wrap "wrapTight". Error was, that +// the corresponding shape property 'ContourOutside=true' was not set. +getComponent() = loadFromDesktop(aURL); +uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); +uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); +bool bContourOutside; +xShape->getPropertyValue("ContourOutside") >>= bContourOutside; +CPPUNIT_ASSERT(bContourOutside); +} + CPPUNIT_TEST_FIXTURE(Test, testTdf142305StrokeGlowMargin) { OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "tdf142305StrokeGlowMargin.docx"; diff --git a/writerfilter/qa/cppunittests/dmapper/data/tdf143208_wrapTight.docx b/writerfilter/qa/cppunittests/dmapper/data/tdf143208_wrapTight.docx new file mode 100644 index ..fab911ad902e Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/tdf143208_wrapTight.docx differ diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index f67966d0008c..0b0176516745 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -1162,6 +1162,7 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) m_pImpl->applyRelativePosition(xShapeProps, /*bRelativeOnly=*/true); xShapeProps->setPropertyValue("SurroundContour", uno::makeAny(m_pImpl->bContour)); +xShapeProps->setPropertyValue("ContourOutside", uno::makeAny(m_pImpl->bContourOutside)); m_pImpl->applyMargins(xShapeProps); xShapeProps->setPropertyValue("Opaque", uno::makeAny(m_pImpl->bOpaque)); xShapeProps->setPropertyValue("Surround", uno::makeAny(static_cast(m_pImpl->nWrap))); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx | 38 +++--- writerfilter/qa/cppunittests/dmapper/data/textbox-textline-top.docx |binary writerfilter/source/dmapper/GraphicImport.cxx | 13 ++- 3 files changed, 38 insertions(+), 13 deletions(-) New commits: commit 2f21e4f357ec60450df84ddd858c3cf0a4711b02 Author: Miklos Vajna AuthorDate: Wed May 26 11:56:04 2021 +0200 Commit: Miklos Vajna CommitDate: Wed May 26 13:29:12 2021 +0200 tdf#139915 DOCX import: fix anchored obj position with to-char and TEXT_LINE There were multiple problems here: - commit 8f1a1092d47947847e1d888b0284e8364c663d1f (tdf#97371 DOCX import: fix text covered by shape, 2016-01-28) disabled to-char anchoring for TEXT_LINE (e.g. "alignment top, relative to line") because changing the anchor type of a TextBox could not be changed, but this has been implemented in sw/ in the meantime, so it can be dropped - Now that the anchor type is to-char, we can set the vertical relation to TEXT_LINE, but Word's positive value is "below line", and ours mean "towards the top of the page, from the bottom of the line", so we need to drop the workaround of commit 3303a4c5f21874453e634d84408c50e7a0055a4d (tdf#135153 DOCX import: avoid line-of-text relation with to-para anchoring, 2021-01-18) Once these are in place, we can fix the remaining problem by inverting the vertical position of the shape, which instantly fixes the overlapping textboxes in the bugdoc. Change-Id: I895abb76d3bd3bbe3a84e5c27a77df722b96226a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116182 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx index 63bdb07e82a7..40bc31c498ed 100644 --- a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx +++ b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -240,16 +241,37 @@ CPPUNIT_TEST_FIXTURE(Test, testTextboxTextline) uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); -sal_Int16 nActual{}; -CPPUNIT_ASSERT(xShape->getPropertyValue("VertOrientRelation") >>= nActual); +sal_Int16 nActualRelation{}; +CPPUNIT_ASSERT(xShape->getPropertyValue("VertOrientRelation") >>= nActualRelation); +sal_Int32 nActualPosition{}; +CPPUNIT_ASSERT(xShape->getPropertyValue("VertOrientPosition") >>= nActualPosition); +sal_Int16 nExpectedRelation = text::RelOrientation::TEXT_LINE; +CPPUNIT_ASSERT_EQUAL(nExpectedRelation, nActualRelation); +sal_Int32 nExpectedPosition = -2; +CPPUNIT_ASSERT_EQUAL(nExpectedPosition, nActualPosition); +} + +CPPUNIT_TEST_FIXTURE(Test, testTextboxTextlineTop) +{ +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "textbox-textline-top.docx"; +getComponent() = loadFromDesktop(aURL); +uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); +uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); +sal_Int16 nActualRelation{}; +CPPUNIT_ASSERT(xShape->getPropertyValue("VertOrientRelation") >>= nActualRelation); +sal_Int16 nExpectedRelation = text::RelOrientation::TEXT_LINE; // Without the accompanying fix in place, this test would have failed with: -// - Expected: 0 (text::RelOrientation::FRAME) -// - Actual : 9 (text::RelOrientation::TEXT_LINE) -// i.e. the relation had a value which doesn't make sense for to-para anchoring (only for -// to-char anchoring). -sal_Int16 nExpected = text::RelOrientation::FRAME; -CPPUNIT_ASSERT_EQUAL(nExpected, nActual); +// - Expected: 9 (TEXT_LINE) +// - Actual : 0 (FRAME) +// i.e. the anchor point for the positioning was wrong, resulting in overlapping textboxes. +CPPUNIT_ASSERT_EQUAL(nExpectedRelation, nActualRelation); + +sal_Int16 nActualOrient{}; +CPPUNIT_ASSERT(xShape->getPropertyValue("VertOrient") >>= nActualOrient); +sal_Int16 nExpectedOrient = text::VertOrientation::BOTTOM; +CPPUNIT_ASSERT_EQUAL(nExpectedOrient, nActualOrient); } } diff --git a/writerfilter/qa/cppunittests/dmapper/data/textbox-textline-top.docx b/writerfilter/qa/cppunittests/dmapper/data/textbox-textline-top.docx new file mode 100644 index ..dbd750092811 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/textbox-textline-top.docx differ diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index 66f36e38959d..bb86c1e7a7a1 100644 ---
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx | 21 ++ writerfilter/qa/cppunittests/dmapper/data/textbox-textline.docx |binary writerfilter/source/dmapper/GraphicImport.cxx |8 +++ 3 files changed, 29 insertions(+) New commits: commit 3303a4c5f21874453e634d84408c50e7a0055a4d Author: Miklos Vajna AuthorDate: Mon Jan 18 20:51:26 2021 +0100 Commit: Miklos Vajna CommitDate: Tue Jan 19 09:02:07 2021 +0100 tdf#135153 DOCX import: avoid line-of-text relation with to-para anchoring Regression from commit 8f1a1092d47947847e1d888b0284e8364c663d1f (tdf#97371 DOCX import: fix text covered by shape, 2016-01-28), the problem was that once the import decides that a shape should have no to-char anchoring, it should not leave behind vertical relation types which make no sense for to-para anchoring. text::RelOrientation::TEXT_LINE is specific to to-char anchoring, so reset the relation back to the default text::RelOrientation::FRAME. This means we'll no longer show "from top" on the UI while the doc model contains "from bottom": and those have to be in sync, otherwise pressing "down" while the shape is selected will actually move it up. Change-Id: I660a7bb30133ea866cc4ba1620ae15fea243ef8f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109570 Tested-by: Jenkins Reviewed-by: Miklos Vajna diff --git a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx index d77d00c682fd..c1e5cb6faad6 100644 --- a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx +++ b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx @@ -165,6 +165,27 @@ CPPUNIT_TEST_FIXTURE(Test, testWrapPolyCrop) // were wrapping around the image, not only 2 as Word does it. CPPUNIT_ASSERT_EQUAL(2368., aPolygon.getB2DPoint(0).getY()); } + +CPPUNIT_TEST_FIXTURE(Test, testTextboxTextline) +{ +// Load a document with a shape with a textbox. +// The shape's vertical relation is . +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "textbox-textline.docx"; +getComponent() = loadFromDesktop(aURL); +uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); +uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); +sal_Int16 nActual{}; +CPPUNIT_ASSERT(xShape->getPropertyValue("VertOrientRelation") >>= nActual); + +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 0 (text::RelOrientation::FRAME) +// - Actual : 9 (text::RelOrientation::TEXT_LINE) +// i.e. the relation had a value which doesn't make sense for to-para anchoring (only for +// to-char anchoring). +sal_Int16 nExpected = text::RelOrientation::FRAME; +CPPUNIT_ASSERT_EQUAL(nExpected, nActual); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/textbox-textline.docx b/writerfilter/qa/cppunittests/dmapper/data/textbox-textline.docx new file mode 100644 index ..493604d778e9 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/textbox-textline.docx differ diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index 02c348a05693..cc81850bfc86 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -872,6 +872,14 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) eAnchorType = text::TextContentAnchorType_AT_CHARACTER; xShapeProps->setPropertyValue("AnchorType", uno::makeAny(eAnchorType)); + +if (m_pImpl->nVertRelation == text::RelOrientation::TEXT_LINE && bTextBox) +{ +// TEXT_LINE to specific to to-char anchoring, we have to-para, so reset +// to default. +m_pImpl->nVertRelation = text::RelOrientation::FRAME; +} + if (m_pImpl->bLayoutInCell && bTextBox && m_pImpl->rDomainMapper.IsInTable() && m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME) m_pImpl->nHoriRelation = text::RelOrientation::FRAME; ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa xmloff/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx |2 +- xmloff/source/style/xmlstyle.cxx |3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) New commits: commit ca7d0835008b2333eaebe88030f94b5e072d0eb6 Author: Stephan Bergmann AuthorDate: Tue Dec 22 20:01:28 2020 +0100 Commit: Stephan Bergmann CommitDate: Wed Dec 23 07:34:10 2020 +0100 Fix dubious OUStringLiteral with automatic storage duration Change-Id: I0c80ce6efbbc950ce975e55663a5643ea8fb37f4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108215 Tested-by: Jenkins Reviewed-by: Stephan Bergmann diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index 77bd616f37d6..355b61898cf8 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -90,7 +90,7 @@ CPPUNIT_TEST_FIXTURE(Test, testNumberingRestartStyleParent) uno::UNO_QUERY); uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); uno::Reference xPara; -OUStringLiteral aProp(u"ListLabelString"); +static OUStringLiteral aProp(u"ListLabelString"); xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("A."), xPara->getPropertyValue(aProp).get()); xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); diff --git a/xmloff/source/style/xmlstyle.cxx b/xmloff/source/style/xmlstyle.cxx index ced74c90aab5..9453e1963729 100644 --- a/xmloff/source/style/xmlstyle.cxx +++ b/xmloff/source/style/xmlstyle.cxx @@ -51,6 +51,7 @@ #include #include +#include #include using namespace ::com::sun::star; @@ -598,7 +599,7 @@ Reference < XAutoStyleFamily > SvXMLStylesContext::GetAutoStyles( XmlStyleFamily xAutoStyles = mxParaAutoStyles; else { -OUStringLiteral sName = bPara ? OUStringLiteral( u"ParagraphStyles" ): OUStringLiteral( u"CharacterStyles" ); +OUString sName(bPara ? std::u16string_view( u"ParagraphStyles" ): std::u16string_view( u"CharacterStyles" )); Reference< XAutoStylesSupplier > xAutoStylesSupp( GetImport().GetModel(), UNO_QUERY ); Reference< XAutoStyles > xAutoStyleFamilies = xAutoStylesSupp->getAutoStyles(); if (xAutoStyleFamilies->hasByName(sName)) ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx | 24 ++ writerfilter/qa/cppunittests/dmapper/data/follow-page-top-margin.docx |binary writerfilter/source/dmapper/PropertyMap.cxx |9 --- 3 files changed, 24 insertions(+), 9 deletions(-) New commits: commit 29993781ac991e85bfbd61f9e076c9d8088cd3ab Author: Miklos Vajna AuthorDate: Mon Dec 7 21:02:12 2020 +0100 Commit: Miklos Vajna CommitDate: Tue Dec 8 08:45:54 2020 +0100 tdf#135217 DOCX import: remove no longer needed top/bottom margin sync Regression from commit b7ae863efeb082816cc4fe660527a9650d90e186 (tdf#117503 DOCX import: fix out of sync first/later top margin, 2018-05-28), which adjusted the import so that the export can pair first/follow page styles and write them into a single Word section. But changing the import for pairing purposes is not a good idea after all, as it also affects the layout of the imported document. In the meantime, commit 51534ac2b9747975945acb6a1e1ba5cc6d73f5c2 (tdf#127778 DOCX import: fix unexpected heading on non-first page when the first page has a heading, 2020-05-11) already fixed the export side, so this is not even necessary, just remove it. Change-Id: I94c02517ae1e0804547f81c43bb5890327d32376 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107363 Tested-by: Jenkins Reviewed-by: Miklos Vajna diff --git a/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx b/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx index 71b3ab80e50b..2c7586649c01 100644 --- a/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx +++ b/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx @@ -13,6 +13,8 @@ #include #include #include +#include +#include using namespace ::com::sun::star; @@ -63,6 +65,28 @@ CPPUNIT_TEST_FIXTURE(Test, testFloatingTableHeader) // i.e. a document which is 1 page in Word was imported as a 3 page one. CPPUNIT_ASSERT_EQUAL(static_cast(1), xCursor->getPage()); } + +CPPUNIT_TEST_FIXTURE(Test, testFollowPageTopMargin) +{ +// Load a document with 2 pages: first page has larger top margin, second page has smaller top +// margin. +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "follow-page-top-margin.docx"; +getComponent() = loadFromDesktop(aURL); +uno::Reference xStyleFamiliesSupplier(getComponent(), + uno::UNO_QUERY); +uno::Reference xStyleFamilies += xStyleFamiliesSupplier->getStyleFamilies(); +uno::Reference xStyleFamily(xStyleFamilies->getByName("PageStyles"), +uno::UNO_QUERY); +uno::Reference xStyle(xStyleFamily->getByName("Standard"), uno::UNO_QUERY); +auto nTopMargin = xStyle->getPropertyValue("TopMargin").get(); + +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 250 +// - Actual : 1249 +// i.e. the top margin on page 2 was too large. +CPPUNIT_ASSERT_EQUAL(static_cast(250), nTopMargin); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/follow-page-top-margin.docx b/writerfilter/qa/cppunittests/dmapper/data/follow-page-top-margin.docx new file mode 100644 index ..ceae0b784e18 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/follow-page-top-margin.docx differ diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 40dc5e0da8cc..a29693683555 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -1037,15 +1037,6 @@ void SectionPropertyMap::PrepareHeaderFooterProperties( bool bFirstPage ) //now set the top/bottom margin for the follow page style Insert( PROP_TOP_MARGIN, uno::makeAny( std::max(nTopMargin, 0) ) ); Insert( PROP_BOTTOM_MARGIN, uno::makeAny( std::max(nBottomMargin, 0) ) ); - -if (bCopyFirstToFollow) -{ -if (HasHeader(/*bFirstPage=*/true)) -m_aFollowPageStyle->setPropertyValue("TopMargin", getProperty(PROP_TOP_MARGIN)->second); -if (HasFooter(/*bFirstPage=*/true)) -m_aFollowPageStyle->setPropertyValue("BottomMargin", - getProperty(PROP_BOTTOM_MARGIN)->second); -} } static uno::Reference< beans::XPropertySet > lcl_GetRangeProperties( bool bIsFirstSection, ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx|9 + writerfilter/qa/cppunittests/dmapper/data/field-if-inside-if.docx |binary writerfilter/source/dmapper/DomainMapper_Impl.cxx | 10 +- 3 files changed, 18 insertions(+), 1 deletion(-) New commits: commit 65d6173152deab49f9c9ed138f6d9fa56008b800 Author: Miklos Vajna AuthorDate: Fri Nov 13 09:45:47 2020 +0100 Commit: Miklos Vajna CommitDate: Fri Nov 13 14:54:36 2020 +0100 DOCX import: lost cached result of fields: fix leading whitespace " IF " and "IF " is the same, but "IFF " is something different. Change-Id: Ieb2d128d28ed3daa3df73128804bcc40dda9878d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105783 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index c7df72b25703..77bd616f37d6 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -179,6 +179,15 @@ CPPUNIT_TEST_FIXTURE(Test, testFieldIfInsideIf) // - Actual : 0** Expression is faulty **2 // i.e. some of the inner fields escaped outside the outer field. CPPUNIT_ASSERT_EQUAL(OUString("2"), xCell->getString()); + +// Test the second cell: it contains "IF ", not the usual " IF ". +xCell.set(xTable->getCellByName("A2"), uno::UNO_QUERY); + +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 25 +// - Actual : 025 +// i.e. some of the inner fields escaped outside the outer field. +CPPUNIT_ASSERT_EQUAL(OUString("25"), xCell->getString()); } } diff --git a/writerfilter/qa/cppunittests/dmapper/data/field-if-inside-if.docx b/writerfilter/qa/cppunittests/dmapper/data/field-if-inside-if.docx index 93aaab52d497..65e238869b1b 100644 Binary files a/writerfilter/qa/cppunittests/dmapper/data/field-if-inside-if.docx and b/writerfilter/qa/cppunittests/dmapper/data/field-if-inside-if.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 0a7ae26d937e..d1d0309a6b83 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -206,7 +206,15 @@ static FieldContextPtr GetParentFieldContext(const std::deque& static bool IsFieldNestingAllowed(const FieldContextPtr& pOuter, const FieldContextPtr& pInner) { std::optional oOuterFieldId = pOuter->GetFieldId(); -if (!oOuterFieldId && pOuter->GetCommand().startsWith(" IF ")) +OUString aCommand = pOuter->GetCommand(); + +// Ignore leading space before the field name, but don't accept IFF when we check for IF. +if (!aCommand.isEmpty() && aCommand[0] == ' ') +{ +aCommand = aCommand.subView(1); +} + +if (!oOuterFieldId && aCommand.startsWith("IF ")) { // This will be FIELD_IF once the command is closed. oOuterFieldId = FIELD_IF; ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx| 22 writerfilter/qa/cppunittests/dmapper/data/field-if-inside-if.docx |binary writerfilter/source/dmapper/DomainMapper_Impl.cxx | 46 +++--- 3 files changed, 55 insertions(+), 13 deletions(-) New commits: commit 6b15b6a6ab294e1d4a3a4bfb5ac81630aa08015c Author: Miklos Vajna AuthorDate: Thu Nov 12 11:53:22 2020 +0100 Commit: Miklos Vajna CommitDate: Thu Nov 12 18:49:54 2020 +0100 DOCX import: fix lost cached result inside an IF field This builds on top of commit d09336fbdceaafd9320466b660a2b32a07dcc16a (tdf#125038 DOCX import: fix lost MERGEFIELD result inside an IF field, 2019-10-31), and extends it for more cases. We know that DOCVARIABLE, FORMULA and IF fields inside an IF fields is not something Writer is capable of, so make sure we keep the cached result. Change-Id: I20004f97c2073309c33594e5da6f8ba89ba278ba Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105639 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index 0ea06a41bf31..c7df72b25703 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -16,6 +16,8 @@ #include #include #include +#include +#include using namespace ::com::sun::star; @@ -158,6 +160,26 @@ CPPUNIT_TEST_FIXTURE(Test, testAltChunk) xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); CPPUNIT_ASSERT_EQUAL(OUString("inner doc, first para"), xPara->getString()); } + +CPPUNIT_TEST_FIXTURE(Test, testFieldIfInsideIf) +{ +// Load a document with a field in a table cell: it contains an IF field with various nested +// fields. +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "field-if-inside-if.docx"; +getComponent() = loadFromDesktop(aURL); +uno::Reference xTextDocument(getComponent(), uno::UNO_QUERY); +uno::Reference xTables(xTextDocument->getTextTables(), uno::UNO_QUERY); +uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + +// Get the result of the topmost field. +uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 2 +// - Actual : 0** Expression is faulty **2 +// i.e. some of the inner fields escaped outside the outer field. +CPPUNIT_ASSERT_EQUAL(OUString("2"), xCell->getString()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/field-if-inside-if.docx b/writerfilter/qa/cppunittests/dmapper/data/field-if-inside-if.docx new file mode 100644 index ..93aaab52d497 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/field-if-inside-if.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 08fe93e46a42..0a7ae26d937e 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -205,7 +205,14 @@ static FieldContextPtr GetParentFieldContext(const std::deque& /// Decides if the pInner field inside pOuter is allowed in Writer core, depending on their type. static bool IsFieldNestingAllowed(const FieldContextPtr& pOuter, const FieldContextPtr& pInner) { -if (!pOuter->GetFieldId()) +std::optional oOuterFieldId = pOuter->GetFieldId(); +if (!oOuterFieldId && pOuter->GetCommand().startsWith(" IF ")) +{ +// This will be FIELD_IF once the command is closed. +oOuterFieldId = FIELD_IF; +} + +if (!oOuterFieldId) { return true; } @@ -215,12 +222,15 @@ static bool IsFieldNestingAllowed(const FieldContextPtr& pOuter, const FieldCont return true; } -switch (*pOuter->GetFieldId()) +switch (*oOuterFieldId) { case FIELD_IF: { switch (*pInner->GetFieldId()) { +case FIELD_DOCVARIABLE: +case FIELD_FORMULA: +case FIELD_IF: case FIELD_MERGEFIELD: { return false; @@ -5404,12 +5414,16 @@ void DomainMapper_Impl::CloseFieldCommand() break; case FIELD_DOCVARIABLE : { -//create a user field and type -uno::Reference< beans::XPropertySet > xMaster = - FindOrCreateFieldMaster("com.sun.star.text.FieldMaster.User", sFirstParam); -uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW ); -xDependentField->attachTextFieldMaster( xMaster ); -
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx | 18 ++--- writerfilter/qa/cppunittests/dmapper/data/alt-chunk.docx |binary writerfilter/source/dmapper/DomainMapper.cxx | 12 ++-- writerfilter/source/dmapper/DomainMapper_Impl.cxx | 15 ++ writerfilter/source/dmapper/DomainMapper_Impl.hxx |4 ++ writerfilter/source/dmapper/PropertyMap.cxx|6 +++- 6 files changed, 48 insertions(+), 7 deletions(-) New commits: commit 32c322e9d037b29ded2297b400a2c596c042f1fa Author: Miklos Vajna AuthorDate: Mon Oct 26 17:52:42 2020 +0100 Commit: Miklos Vajna CommitDate: Mon Oct 26 20:30:50 2020 +0100 DOCX import, altChunk: fix missing page break Somewhat similar to copy, the altChunk mechanism drops styles from the inner document by default. A surprising consequence of that is sections in the inner document have the default page size. This leads to a page break when the content of the outer document ends and the content of the inner document starts. Fix the importer to support this: 1) Ignore the page size and number in DomainMapper::lcl_attribute(). 2) Pass the start of the current section to the sub-importer, so that it can insert the starting page break at the right place. Change-Id: Id3955f2b35a139692254c4ac1233e96eef2620e9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104821 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index 16b9bfa5023b..0ea06a41bf31 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -135,16 +135,28 @@ CPPUNIT_TEST_FIXTURE(Test, testAltChunk) uno::UNO_QUERY); uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); uno::Reference xPara; +uno::Reference xParaProps; xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); -CPPUNIT_ASSERT_EQUAL(OUString("Outer para 1"), xPara->getString()); +xParaProps.set(xPara, uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("outer, before sect break"), xPara->getString()); +CPPUNIT_ASSERT_EQUAL(OUString("Standard"), + xParaProps->getPropertyValue("PageStyleName").get()); xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); -CPPUNIT_ASSERT_EQUAL(OUString("Outer para 2"), xPara->getString()); +xParaProps.set(xPara, uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("outer, after sect break"), xPara->getString()); + +// Without the accompanying fix in place, this test would have failed with: +// - Expected: Converted1 +// - Actual : Standard +// i.e. the page break between the first and the second paragraph was missing. +CPPUNIT_ASSERT_EQUAL(OUString("Converted1"), + xParaProps->getPropertyValue("PageStyleName").get()); // Without the accompanying fix in place, this test would have failed with a // container.NoSuchElementException, as the document had only 2 paragraphs, all the "inner" // content was lost. xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); -CPPUNIT_ASSERT_EQUAL(OUString("Inner para 1"), xPara->getString()); +CPPUNIT_ASSERT_EQUAL(OUString("inner doc, first para"), xPara->getString()); } } diff --git a/writerfilter/qa/cppunittests/dmapper/data/alt-chunk.docx b/writerfilter/qa/cppunittests/dmapper/data/alt-chunk.docx index 3348cfd0c04c..40d071ff40a6 100644 Binary files a/writerfilter/qa/cppunittests/dmapper/data/alt-chunk.docx and b/writerfilter/qa/cppunittests/dmapper/data/alt-chunk.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 938b1f41a106..b489115d4980 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -1065,7 +1065,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) m_pImpl->m_oBackgroundColor = nIntValue; break; case NS_ooxml::LN_CT_PageNumber_start: -if (pSectionContext != nullptr) +if (pSectionContext != nullptr && !m_pImpl->IsAltChunk()) pSectionContext->SetPageNumber(nIntValue); break; case NS_ooxml::LN_CT_PageNumber_fmt: @@ -2138,9 +2138,15 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) OSL_ENSURE(pSectionContext, "SectionContext unavailable!"); if(pSectionContext) { -pSectionContext->Insert( PROP_HEIGHT, uno::makeAny( CT_PageSz.h ) ); +if (!m_pImpl->IsAltChunk()) +{ +pSectionContext->Insert(PROP_HEIGHT, uno::makeAny(CT_PageSz.h)); +}
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx | 21 + writerfilter/qa/cppunittests/dmapper/data/alt-chunk.docx |binary writerfilter/source/dmapper/DomainMapper.cxx | 12 ++ writerfilter/source/dmapper/DomainMapper_Impl.cxx | 54 + writerfilter/source/dmapper/DomainMapper_Impl.hxx |6 + 5 files changed, 90 insertions(+), 3 deletions(-) New commits: commit 4347d505e7d1c90809dd356334fcdc7936c84f73 Author: Miklos Vajna AuthorDate: Thu Oct 22 17:21:33 2020 +0200 Commit: Miklos Vajna CommitDate: Thu Oct 22 20:04:20 2020 +0200 DOCX import: handle This refers to a self-contained full DOCX file inside a DOCX file. Change-Id: Ic9451833db30231f08ff2e2493da678edbc9a4c6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104654 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index de63ec4084d9..16b9bfa5023b 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -125,6 +125,27 @@ CPPUNIT_TEST_FIXTURE(Test, testFrameDirection) CPPUNIT_ASSERT_EQUAL(text::WritingMode2::TB_RL, xFrame2->getPropertyValue("WritingMode").get()); } + +CPPUNIT_TEST_FIXTURE(Test, testAltChunk) +{ +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "alt-chunk.docx"; +getComponent() = loadFromDesktop(aURL); +uno::Reference xTextDocument(getComponent(), uno::UNO_QUERY); +uno::Reference xParaEnumAccess(xTextDocument->getText(), + uno::UNO_QUERY); +uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); +uno::Reference xPara; +xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("Outer para 1"), xPara->getString()); +xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("Outer para 2"), xPara->getString()); + +// Without the accompanying fix in place, this test would have failed with a +// container.NoSuchElementException, as the document had only 2 paragraphs, all the "inner" +// content was lost. +xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("Inner para 1"), xPara->getString()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/alt-chunk.docx b/writerfilter/qa/cppunittests/dmapper/data/alt-chunk.docx new file mode 100644 index ..3348cfd0c04c Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/alt-chunk.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index ca118c0f9c9b..938b1f41a106 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -169,8 +169,8 @@ DomainMapper::DomainMapper( const uno::Reference< uno::XComponentContext >& xCon //import document properties try { -uno::Reference< embed::XStorage > xDocumentStorage = - comphelper::OStorageHelper::GetStorageOfFormatFromInputStream(OFOPXML_STORAGE_FORMAT_STRING, xInputStream, xContext, bRepairStorage ); +m_pImpl->m_xDocumentStorage = comphelper::OStorageHelper::GetStorageOfFormatFromInputStream( +OFOPXML_STORAGE_FORMAT_STRING, xInputStream, xContext, bRepairStorage); uno::Reference< uno::XInterface > xTemp = xContext->getServiceManager()->createInstanceWithContext( "com.sun.star.document.OOXMLDocumentPropertiesImporter", @@ -178,7 +178,8 @@ DomainMapper::DomainMapper( const uno::Reference< uno::XComponentContext >& xCon uno::Reference< document::XOOXMLDocumentPropertiesImporter > xImporter( xTemp, uno::UNO_QUERY_THROW ); uno::Reference< document::XDocumentPropertiesSupplier > xPropSupplier( xModel, uno::UNO_QUERY_THROW); -xImporter->importProperties( xDocumentStorage, xPropSupplier->getDocumentProperties() ); +xImporter->importProperties(m_pImpl->m_xDocumentStorage, +xPropSupplier->getDocumentProperties()); } catch( const uno::Exception& ) {} } @@ -1230,6 +1231,11 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) } } break; +case NS_ooxml::LN_CT_AltChunk: +{ +m_pImpl->HandleAltChunk(sStringValue); +} +break; default: SAL_WARN("writerfilter", "DomainMapper::lcl_attribute: unhandled token: " << nName); } diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index f6ede7c143b4..fe1ab5c99b91 100644 ---
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx| 15 ++ writerfilter/qa/cppunittests/dmapper/data/nested-floating-table.docx |binary writerfilter/source/dmapper/DomainMapperTableHandler.cxx |8 + 3 files changed, 23 insertions(+) New commits: commit 6c82a9fa1da15d5f83f524f6897028906dda337e Author: Miklos Vajna AuthorDate: Thu Jul 30 10:37:25 2020 +0200 Commit: Miklos Vajna CommitDate: Thu Jul 30 11:37:00 2020 +0200 DOCX import: fix overlapping floating tables when anchored inside a table The WW8 import does the same in SwWW8ImplReader::StartTable(), now we're on par with that. Change-Id: I2ce0d96d255d8f405203f36a358559687b36e9e3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99762 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx index a1a7595cee76..e49ea59d9cb5 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx @@ -15,6 +15,7 @@ #include #include #include +#include using namespace ::com::sun::star; @@ -65,6 +66,20 @@ CPPUNIT_TEST_FIXTURE(Test, test1cellInsidevRightborder) // i.e. the request to have no table-level right border was lost on import. CPPUNIT_ASSERT_EQUAL(static_cast(0), aBorder.LineWidth); } + +CPPUNIT_TEST_FIXTURE(Test, testNestedFloatingTable) +{ +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "nested-floating-table.docx"; +getComponent() = loadFromDesktop(aURL); +uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); +uno::Reference xFrame(xDrawPage->getByIndex(0), uno::UNO_QUERY); +bool bIsFollowingTextFlow = false; +xFrame->getPropertyValue("IsFollowingTextFlow") >>= bIsFollowingTextFlow; +// Without the accompanying fix in place, this test would have failed, the nested floating table +// was partly positioned outside the table cell, leading to overlapping text. +CPPUNIT_ASSERT(bIsFollowingTextFlow); +} } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/qa/cppunittests/dmapper/data/nested-floating-table.docx b/writerfilter/qa/cppunittests/dmapper/data/nested-floating-table.docx new file mode 100644 index ..73fd922fccd5 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/nested-floating-table.docx differ diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx index ac667ddefd88..f202bda076e5 100644 --- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx @@ -40,6 +40,7 @@ #include #include #include +#include #ifdef DBG_UTIL #include "PropertyMapHelper.hxx" @@ -1400,6 +1401,13 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTab // A non-zero left margin would move the table out of the frame, move the frame itself instead. xTableProperties->setPropertyValue("LeftMargin", uno::makeAny(sal_Int32(0))); +if (nestedTableLevel >= 2) +{ +// Floating tables inside a table always stay inside the cell. +aFrameProperties.push_back( +comphelper::makePropertyValue("IsFollowingTextFlow", true)); +} + // In case the document ends with a table, we're called after // SectionPropertyMap::CloseSectionGroup(), so we'll have no idea // about the text area width, nor can fix this by delaying the text ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx | 20 ++ writerfilter/qa/cppunittests/dmapper/data/relfromh-insidemargin.docx |binary writerfilter/source/dmapper/GraphicHelpers.cxx |5 ++ writerfilter/source/dmapper/GraphicHelpers.hxx |2 + writerfilter/source/dmapper/GraphicImport.cxx|6 ++- 5 files changed, 31 insertions(+), 2 deletions(-) New commits: commit fccbb557add457db16e0556c3f0172cafc2cf981 Author: Miklos Vajna AuthorDate: Mon Apr 27 10:54:27 2020 +0200 Commit: Miklos Vajna CommitDate: Mon Apr 27 11:56:56 2020 +0200 DOCX import: handle This is the same as page, but it is from-left on odd pages and from-right on even pages, i.e. our "mirror on even pages" mode. Change-Id: I018e0ac165a3d802f64cfc314d5c5f58da3cb580 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92965 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx index a98288fc40d3..590a93273e92 100644 --- a/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx +++ b/writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx @@ -14,6 +14,7 @@ #include #include #include +#include using namespace ::com::sun::star; @@ -114,6 +115,25 @@ CPPUNIT_TEST_FIXTURE(Test, testInlineInShapeAnchoredZOrder) // i.e. the image was behind the textbox that was hosting it. CPPUNIT_ASSERT_EQUAL(OUString("Picture 1"), xOval->getName()); } + +CPPUNIT_TEST_FIXTURE(Test, testRelfromhInsidemargin) +{ +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "relfromh-insidemargin.docx"; +getComponent() = loadFromDesktop(aURL); +uno::Reference xDrawPageSupplier(getComponent(), uno::UNO_QUERY); +uno::Reference xDrawPage = xDrawPageSupplier->getDrawPage(); +uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); +sal_Int16 nRelation = 0; +xShape->getPropertyValue("HoriOrientRelation") >>= nRelation; +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 7 (PAGE_FRAME) +// - Actual : 0 (FRAME) +// i.e. the horizontal position was relative to the paragraph area, not to the entire page. +CPPUNIT_ASSERT_EQUAL(text::RelOrientation::PAGE_FRAME, nRelation); +bool bPageToggle = false; +xShape->getPropertyValue("PageToggle") >>= bPageToggle; +CPPUNIT_ASSERT(bPageToggle); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/relfromh-insidemargin.docx b/writerfilter/qa/cppunittests/dmapper/data/relfromh-insidemargin.docx new file mode 100644 index ..1f7a281e8b63 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/relfromh-insidemargin.docx differ diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx b/writerfilter/source/dmapper/GraphicHelpers.cxx index 34a7bac660eb..95873b512d26 100644 --- a/writerfilter/source/dmapper/GraphicHelpers.cxx +++ b/writerfilter/source/dmapper/GraphicHelpers.cxx @@ -98,6 +98,11 @@ void PositionHandler::lcl_attribute( Id aName, Value& rVal ) m_nRelation = text::RelOrientation::PAGE_FRAME; break; +case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_insideMargin: +m_nRelation = text::RelOrientation::PAGE_FRAME; +m_bPageToggle = true; +break; + case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_column: m_nRelation = text::RelOrientation::FRAME; break; diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx b/writerfilter/source/dmapper/GraphicHelpers.hxx index dbfe9ddd9f13..d28f2fb50bf7 100644 --- a/writerfilter/source/dmapper/GraphicHelpers.hxx +++ b/writerfilter/source/dmapper/GraphicHelpers.hxx @@ -37,6 +37,7 @@ public: sal_Int16 orientation() const; sal_Int16 relation() const { return m_nRelation;} sal_Int32 position() const { return m_nPosition;} +bool GetPageToggle() const { return m_bPageToggle; } private: virtual void lcl_attribute( Id aName, Value& rVal ) override; virtual void lcl_sprm( Sprm& rSprm ) override; @@ -45,6 +46,7 @@ public: sal_Int32 m_nPosition; std::pair& m_rPositionOffsets; std::pair& m_rAligns; +bool m_bPageToggle = false; }; class WrapHandler: public LoggedProperties diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index ce449a6251b2..760bb1bb6b3e 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -201,6 +201,7 @@ public: sal_Int16 nHoriOrient; sal_Int16 nHoriRelation; +bool bPageToggle =
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx | 30 ++ writerfilter/qa/cppunittests/dmapper/data/num-restart-style-parent.docx |binary writerfilter/source/dmapper/DomainMapper_Impl.cxx |4 + 3 files changed, 33 insertions(+), 1 deletion(-) New commits: commit 63d3ac37865460ff51348a6e792bbacf2f7c4653 Author: Miklos Vajna AuthorDate: Mon Feb 10 21:04:32 2020 +0100 Commit: Miklos Vajna CommitDate: Tue Feb 11 09:07:34 2020 +0100 tdf#129221 DOCX import: fix missing restart of numbering Regression from e49d2b31fb2020d065b4ad940d1031d07b10f32b (fdo#78939 [DOCX] Hang while opening due to incorrect modification of Style, 2014-06-06), the problem was that the 2nd sub-list of the bugdoc was not restarted in Writer, while it was in Word. The PR2 paragraph style inherits from the PR1 one and only that sets the numId; tweaking the bugdoc to state the numId directly in PR2 would work around the problem. Fix the issue by improving DomainMapper_Impl::finishParagraph(), so that it uses lcl_getListId() rather than calling pStyleSheetProperties->GetListId() directly; since the previous knows how to walk up the parent chain if needed. Change-Id: I1c460919b0389d5b053b4ca1c9210279d6cd183c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88413 Tested-by: Jenkins Reviewed-by: Miklos Vajna diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index 3b1d75cbcfba..e5f8c09cd640 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -78,6 +78,36 @@ CPPUNIT_TEST_FIXTURE(Test, testPageBreakFooterTable) // i.e. there was no page break before the last paragraph. CPPUNIT_ASSERT_EQUAL(style::BreakType_PAGE_BEFORE, eType); } + +CPPUNIT_TEST_FIXTURE(Test, testNumberingRestartStyleParent) +{ +OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "num-restart-style-parent.docx"; +getComponent() = loadFromDesktop(aURL); + +// The paragraphs are A 1 2 B 1 2. +uno::Reference xTextDocument(getComponent(), uno::UNO_QUERY); +uno::Reference xParaEnumAccess(xTextDocument->getText(), + uno::UNO_QUERY); +uno::Reference xParaEnum = xParaEnumAccess->createEnumeration(); +uno::Reference xPara; +OUStringLiteral aProp("ListLabelString"); +xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("A."), xPara->getPropertyValue(aProp).get()); +xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("1."), xPara->getPropertyValue(aProp).get()); +xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("2."), xPara->getPropertyValue(aProp).get()); +xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("B."), xPara->getPropertyValue(aProp).get()); +xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); +// Without the accompanying fix in place, this test would have failed with: +// - Expected: 1. +// - Actual : 3. +// i.e. the numbering was not restarted after B. +CPPUNIT_ASSERT_EQUAL(OUString("1."), xPara->getPropertyValue(aProp).get()); +xPara.set(xParaEnum->nextElement(), uno::UNO_QUERY); +CPPUNIT_ASSERT_EQUAL(OUString("2."), xPara->getPropertyValue(aProp).get()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/num-restart-style-parent.docx b/writerfilter/qa/cppunittests/dmapper/data/num-restart-style-parent.docx new file mode 100644 index ..f908d94b56fe Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/num-restart-style-parent.docx differ diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index fa4e089192d9..2c0472adb068 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1654,8 +1654,10 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con (isNumberingViaStyle || itNumberingRules != aProperties.end())) { assert(dynamic_cast(pPropertyMap.get())); +// Use lcl_getListId(), so we find the list ID in parent styles as well. +bool bNumberingFromBaseStyle = false; sal_Int32 const nListId( isNumberingViaStyle -? pStyleSheetProperties->GetListId() +? lcl_getListId(pEntry, GetStyleSheetTable(), bNumberingFromBaseStyle) :
[Libreoffice-commits] core.git: writerfilter/qa
writerfilter/qa/cppunittests/rtftok/testrtftok.cxx | 10 +- 1 file changed, 1 insertion(+), 9 deletions(-) New commits: commit 2e1a28981d727068b0ba0c11dde8ae418b53fdf9 Author: Miklos Vajna AuthorDate: Thu Jan 31 10:12:22 2019 +0100 Commit: Miklos Vajna CommitDate: Thu Jan 31 12:21:05 2019 +0100 CppunitTest_writerfilter_rtftok: use CPPUNIT_TEST_FIXTURE() Change-Id: I16e0c1adf854c3a2fa8d945724270d2d87461b39 Reviewed-on: https://gerrit.libreoffice.org/67192 Reviewed-by: Miklos Vajna Tested-by: Jenkins diff --git a/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx b/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx index 6396ffefbce4..a7f60d4bbfc0 100644 --- a/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx +++ b/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx @@ -30,12 +30,6 @@ public: virtual bool load(const OUString&, const OUString& rURL, const OUString&, SfxFilterFlags, SotClipboardFormatId, unsigned int) override; -void test(); - -CPPUNIT_TEST_SUITE(RtfTest); -CPPUNIT_TEST(test); -CPPUNIT_TEST_SUITE_END(); - private: uno::Reference m_xFilter; }; @@ -72,15 +66,13 @@ bool RtfTest::load(const OUString&, const OUString& rURL, const OUString&, SfxFi } } -void RtfTest::test() +CPPUNIT_TEST_FIXTURE(RtfTest, testFilter) { #ifndef DISABLE_CVE_TESTS testDir(OUString(), m_directories.getURLFromSrc("/writerfilter/qa/cppunittests/rtftok/data/")); #endif } -CPPUNIT_TEST_SUITE_REGISTRATION(RtfTest); - CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-3.rtf | 28 ++ writerfilter/source/dmapper/DomainMapper_Impl.cxx | 13 +++- 2 files changed, 39 insertions(+), 2 deletions(-) New commits: commit b6e0fcf85696b65aff160661a6f89d84a4e27962 Author: Justin LuthDate: Fri Aug 11 12:50:37 2017 -0400 DomainMapper_Impl: add check for m_xTextFactory.is() where missing. To test: make CppunitTest_writerfilter_rtftok These crash triggering instances were hidden by the presense of \super in topcontext-2.rtf - so I copied it, and only removed \super. My fix for tdf#109382 triggered a unit test failure for one missing m_xTextFactory. It seemed safe enough to test for all of them that aren't in try/catch blocks, not just for the specific instance I can prove with the test. Change-Id: I1e317e05f9bcbbb14360941ce07af1bdf0edac6a Reviewed-on: https://gerrit.libreoffice.org/41060 Tested-by: Jenkins Reviewed-by: Miklos Vajna diff --git a/writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-3.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-3.rtf new file mode 100644 index ..112162397f43 --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-3.rtf @@ -0,0 +1,28 @@ +{\ul\001ll\fJ + {Ystylesheet;{;}} +{b{O\00\80\00\tc\DD\00\FFDD\BED@DDD\F7bTr\00\00*i\\FF\FB\FB\FB\FB\FB\FB\FB\FB\FB\FB\FB\FB\FB\FB\FB\FF\ +\\\BD\EB||){Tb\FD\00\00\00p\FFA\00\00\00r \00\00\00\BB +\88\83AA4A\FC\E5C\E5\F5\E5\E5\FF\80\E5\E5\E5\D3O \006\FA\00\00\EB\F8\E5 \00\00\\98\00xtesÕ·\D3^t000c\00\00\00\00ppu\00\00\00\00\00\E5\D1\E5\80\00\00\00\FA\F8\E5'bb{O\00\80\00\tc\A5\\iL\\00\E5\F2\E5\E5\E5\80\E8\E5\E5\E5\FF\FFbTUEQU\00\00\00\00\80\00\00\AD\E5\E5\E5\E5C\00\00\00\E5\E5\E5\E5\E5\E5I \00\{P\FFig\\ +{O\00\80\00d getByName(sFieldMasterName), uno::UNO_QUERY_THROW); } -else +else if( m_xTextFactory.is() ) { //create the master xMaster.set( m_xTextFactory->createInstance(sFieldMasterService), uno::UNO_QUERY_THROW); @@ -4145,7 +4145,7 @@ void DomainMapper_Impl::CloseFieldCommand() xFieldProperties->setPropertyValue( getPropertyName( PROP_REFERENCE_FIELD_PART ), uno::makeAny( nFieldPart )); } -else +else if( m_xTextFactory.is() ) { xFieldInterface = m_xTextFactory->createInstance("com.sun.star.text.TextField.GetExpression"); xFieldProperties.set(xFieldInterface, uno::UNO_QUERY); @@ -4306,6 +4306,9 @@ void DomainMapper_Impl::CloseFieldCommand()
[Libreoffice-commits] core.git: writerfilter/qa
writerfilter/qa/ooxml/watch-generated-code.sh |6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) New commits: commit e6b7caa702917bd7cf13248cc9b394518106446d Author: Yeliz TaneroÄluDate: Fri May 5 00:42:20 2017 +0300 tdf#105204: ShellCheck nitpicks for watch-generated-code.sh Change-Id: Ic1e953b5bcae6124ee6ce7d141ddac11a94b2a8b Reviewed-on: https://gerrit.libreoffice.org/37464 Tested-by: Jenkins Reviewed-by: Michael Stahl diff --git a/writerfilter/qa/ooxml/watch-generated-code.sh b/writerfilter/qa/ooxml/watch-generated-code.sh index d6745731759d..22dc44011db5 100755 --- a/writerfilter/qa/ooxml/watch-generated-code.sh +++ b/writerfilter/qa/ooxml/watch-generated-code.sh @@ -26,16 +26,16 @@ reference) mkdir -p $mydir-reference/source/ooxml for i in $writerfilter_ALL do -cp $mydir/$i $mydir-reference/$i +cp $mydir/"$i" $mydir-reference/"$i" done ;; compare) for i in $writerfilter_ALL do -if [ "$(basename $i)" == "model_preprocessed.xml" ]; then +if [ "$(basename "$i")" == "model_preprocessed.xml" ]; then continue fi -diff -u $mydir-reference/$i $mydir/$i +diff -u $mydir-reference/"$i" $mydir/"$i" done ;; *) ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/fail/tablemanager-7.rtf |binary writerfilter/source/dmapper/DomainMapper_Impl.cxx|2 +- 2 files changed, 1 insertion(+), 1 deletion(-) New commits: commit 168c867fc0950dfea61e682846d3a014995888b4 Author: Caolán McNamaraDate: Mon Sep 12 09:34:21 2016 +0100 fftester: no table manager Change-Id: Icb3c640e04416f9120d37558646a570daeddf0a4 Reviewed-on: https://gerrit.libreoffice.org/28825 Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara diff --git a/writerfilter/qa/cppunittests/rtftok/data/fail/tablemanager-7.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/tablemanager-7.rtf new file mode 100644 index 000..df41b1f Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/fail/tablemanager-7.rtf differ diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index a9f6580..403ee50 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -837,7 +837,7 @@ void DomainMapper_Impl::CheckUnregisteredFrameConversion( ) TextAppendContext& rAppendContext = m_aTextAppendStack.top(); // n#779642: ignore fly frame inside table as it could lead to messy situations if( rAppendContext.pLastParagraphProperties.get() && rAppendContext.pLastParagraphProperties->IsFrameMode() -&& !getTableManager().isInTable() ) +&& hasTableManager() && !getTableManager().isInTable() ) { try { ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/fail/tablemanager-6.rtf |binary writerfilter/source/dmapper/DomainMapper_Impl.cxx|2 +- 2 files changed, 1 insertion(+), 1 deletion(-) New commits: commit 3c15beae4335cfa88a5454e90f23080f1b9a20e9 Author: Caolán McNamaraDate: Sat Sep 10 13:46:47 2016 +0100 fftester: no table manager Change-Id: I033454670d1ee662bc80bc07578690155d97ce28 Reviewed-on: https://gerrit.libreoffice.org/28805 Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara diff --git a/writerfilter/qa/cppunittests/rtftok/data/fail/tablemanager-6.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/tablemanager-6.rtf new file mode 100644 index 000..67a0ea1 Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/fail/tablemanager-6.rtf differ diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index cb2e28d..a9f6580 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1238,7 +1238,7 @@ void DomainMapper_Impl::appendTextPortion( const OUString& rString, const Proper if( pPropertyMap == m_pTopContext && !deferredCharacterProperties.empty() && (GetTopContextType() == CONTEXT_CHARACTER) ) processDeferredCharacterProperties(); uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend; -if(xTextAppend.is() && ! getTableManager( ).isIgnore()) +if (xTextAppend.is() && hasTableManager() && !getTableManager().isIgnore()) { try { ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/parser-state-1.rtf |binary writerfilter/source/rtftok/rtfdocumentimpl.cxx |8 writerfilter/source/rtftok/rtfdocumentimpl.hxx |3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) New commits: commit 44d4d9d4e998de9b4dc939af4fa40e51e6300951 Author: Caolán McNamaraDate: Sat Sep 10 11:47:16 2016 +0100 fftester: use of deleted RTFParserState but we only use the RTFParserState to use its m_pDocumentImpl and the m_pDocumentImpl is never changed for the RTFParserState lifetime, so take the m_pDocumentImpl at ctor time instead and use that directly later Change-Id: I15152e3f6d9008553b4a384a5e5da21373904cc9 Reviewed-on: https://gerrit.libreoffice.org/28802 Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/parser-state-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/parser-state-1.rtf new file mode 100644 index 000..3fe4b28 Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/parser-state-1.rtf differ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 0dd4fc9..60872d3 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -3294,7 +3294,7 @@ RTFDrawingObject::RTFDrawingObject() } RTFFrame::RTFFrame(RTFParserState* pParserState) -: m_pParserState(pParserState), +: m_pDocumentImpl(pParserState->m_pDocumentImpl), m_nX(0), m_nY(0), m_nW(0), @@ -3312,10 +3312,10 @@ RTFFrame::RTFFrame(RTFParserState* pParserState) void RTFFrame::setSprm(Id nId, Id nValue) { -if (m_pParserState->m_pDocumentImpl->getFirstRun() && !m_pParserState->m_pDocumentImpl->isStyleSheetImport()) +if (m_pDocumentImpl->getFirstRun() && !m_pDocumentImpl->isStyleSheetImport()) { -m_pParserState->m_pDocumentImpl->checkFirstRun(); -m_pParserState->m_pDocumentImpl->setNeedPar(false); +m_pDocumentImpl->checkFirstRun(); +m_pDocumentImpl->setNeedPar(false); } switch (nId) { diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx index f2294aa..91ba7ee 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx @@ -182,12 +182,13 @@ public: }; class RTFParserState; +class RTFDocumentImpl; /// Stores the properties of a frame class RTFFrame { private: -RTFParserState* m_pParserState; +RTFDocumentImpl* m_pDocumentImpl; sal_Int32 m_nX, m_nY, m_nW, m_nH; sal_Int32 m_nHoriPadding, m_nVertPadding; sal_Int32 m_nHoriAlign, m_nHoriAnchor, m_nVertAlign, m_nVertAnchor; ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/valuelist-1.rtf |binary writerfilter/source/rtftok/rtfdispatchsymbol.cxx |3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) New commits: commit 30af3971d826d55426f51a7beb14c24ac3880250 Author: Caolán McNamaraDate: Tue Sep 6 15:57:30 2016 +0100 fftester: missing ValueLast Change-Id: I8e881871b1ae4dea757263d04796779e62e168dc Reviewed-on: https://gerrit.libreoffice.org/28693 Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/valuelist-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/valuelist-1.rtf new file mode 100644 index 000..847e165 Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/valuelist-1.rtf differ diff --git a/writerfilter/source/rtftok/rtfdispatchsymbol.cxx b/writerfilter/source/rtftok/rtfdispatchsymbol.cxx index 2a4154b..36f8562 100644 --- a/writerfilter/source/rtftok/rtfdispatchsymbol.cxx +++ b/writerfilter/source/rtftok/rtfdispatchsymbol.cxx @@ -253,7 +253,8 @@ RTFError RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) if ((m_nCellxMax - m_nTopLevelCurrentCellX) >= MINLAY) { auto pXValueLast = m_aStates.top().aTableRowSprms.find(NS_ooxml::LN_CT_TblGridBase_gridCol, false); -auto pXValue = std::make_shared(pXValueLast->getInt() + m_nCellxMax - m_nTopLevelCurrentCellX); +const int nXValueLast = pXValueLast ? pXValueLast->getInt() : 0; +auto pXValue = std::make_shared(nXValueLast + m_nCellxMax - m_nTopLevelCurrentCellX); m_aStates.top().aTableRowSprms.eraseLast(NS_ooxml::LN_CT_TblGridBase_gridCol); m_aStates.top().aTableRowSprms.set(NS_ooxml::LN_CT_TblGridBase_gridCol, pXValue, RTFOverwrite::NO_APPEND); m_nTopLevelCurrentCellX = m_nCellxMax; ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/fail/propheight-1.rtf |binary writerfilter/source/dmapper/PropertyMap.cxx|2 +- 2 files changed, 1 insertion(+), 1 deletion(-) New commits: commit a42f4aaba352a4d33ce77898e7b7b7bc0c10f1f8 Author: Caolán McNamaraDate: Fri Sep 2 21:12:43 2016 +0100 fftester: apparent wrong property tested for existence Change-Id: I5d208bb2a85d7aa4eea9b1c950eeb6f35493f759 diff --git a/writerfilter/qa/cppunittests/rtftok/data/fail/propheight-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/propheight-1.rtf new file mode 100644 index 000..130ff3f Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/fail/propheight-1.rtf differ diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 6897104..b138a28 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -1276,7 +1276,7 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl ) if( pEntry.get( ) ) { boost::optional pPropHeight = pEntry->pProperties->getProperty(PROP_CHAR_HEIGHT_ASIAN); -if(pProp) +if (pPropHeight) { double fHeight = 0; if( pPropHeight->second >>= fHeight ) ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-2.rtf |binary writerfilter/source/dmapper/DomainMapper.cxx |3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) New commits: commit a3d74764d89e396dd7e8e7812ea64a062d6aed85 Author: Caolán McNamaraDate: Sat Aug 27 13:31:14 2016 +0100 fftester: topcontext check Change-Id: I2045ce82a1d536ab566e6a1218bea9c6a6696024 diff --git a/writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-2.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-2.rtf new file mode 100644 index 000..c0bd269 Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-2.rtf differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 26eaee9..1933b42 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -276,7 +276,8 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) m_pImpl->SetSymbolFont(sStringValue); break; case NS_ooxml::LN_CT_Underline_val: -handleUnderlineType(nIntValue, m_pImpl->GetTopContext()); +if (m_pImpl->GetTopContext()) +handleUnderlineType(nIntValue, m_pImpl->GetTopContext()); break; case NS_ooxml::LN_CT_Color_val: if (m_pImpl->GetTopContext()) ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/fail/nopropertyset-1.rtf |binary writerfilter/source/rtftok/rtfdispatchvalue.cxx |2 +- 2 files changed, 1 insertion(+), 1 deletion(-) New commits: commit db686815b41c52598f0952613ff8c6be34b2f0e0 Author: Caolán McNamaraDate: Tue Aug 2 16:05:53 2016 +0100 fftester: guard against no drawing object property set Change-Id: I51736459f9f098d9d793bff3b9a1a403962e099d diff --git a/writerfilter/qa/cppunittests/rtftok/data/fail/nopropertyset-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/nopropertyset-1.rtf new file mode 100644 index 000..59c3630 Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/fail/nopropertyset-1.rtf differ diff --git a/writerfilter/source/rtftok/rtfdispatchvalue.cxx b/writerfilter/source/rtftok/rtfdispatchvalue.cxx index d4a3720..efd71cb 100644 --- a/writerfilter/source/rtftok/rtfdispatchvalue.cxx +++ b/writerfilter/source/rtftok/rtfdispatchvalue.cxx @@ -1241,7 +1241,7 @@ RTFError RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam) { rDrawingObject.aPolyLinePoints.back().Y = convertTwipToMm100(nParam); rDrawingObject.nPolyLineCount--; -if (rDrawingObject.nPolyLineCount == 0) +if (rDrawingObject.nPolyLineCount == 0 && rDrawingObject.xPropertySet.is()) { uno::Sequence< uno::Sequence >aPointSequenceSequence = { ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-4.rtf |binary writerfilter/source/dmapper/DomainMapper_Impl.cxx|4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) New commits: commit 8a6b2fb5b94de43316ab3ea95ff07cf5f46b6134 Author: Caolán McNamaraDate: Sun Jul 31 19:58:18 2016 +0100 fftester: another table manager stack checks and a m_xTextFactory check too Change-Id: I9352410c42048b4dd7d6dbc3514351ab8f16790b diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-4.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-4.rtf new file mode 100644 index 000..28093f2 Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-4.rtf differ diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 1d22fa4..64e650a 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1034,7 +1034,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap ) TagLogger::getInstance().attribute("isTextAppend", sal_uInt32(xTextAppend.is())); #endif -if (xTextAppend.is() && pParaContext != nullptr && !getTableManager().isIgnore()) +if (xTextAppend.is() && pParaContext && hasTableManager() && !getTableManager().isIgnore()) { try { @@ -4198,7 +4198,7 @@ void DomainMapper_Impl::CloseFieldCommand() */ OUString aCode( pContext->GetCommand().trim() ); // Don't waste resources on wrapping shapes inside a fieldmark. -if (aCode != "SHAPE") +if (aCode != "SHAPE" && m_xTextFactory.is()) { xFieldInterface = m_xTextFactory->createInstance("com.sun.star.text.Fieldmark"); const uno::Reference xTextContent(xFieldInterface, uno::UNO_QUERY_THROW); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-1.rtf |binary writerfilter/source/dmapper/DomainMapper.cxx |7 --- 2 files changed, 4 insertions(+), 3 deletions(-) New commits: commit 2acc9d06291b3f271c2a88bb4995d52d2d8d2152 Author: Caolán McNamaraDate: Sat Jul 30 19:22:15 2016 +0100 fftester: context stack check Change-Id: I4a135a9f9ac2f16f9dab096f5c234ff1d6e5e853 diff --git a/writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-1.rtf new file mode 100644 index 000..7cdb94a Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/fail/topcontext-1.rtf differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 6ca8528..26eaee9 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3225,14 +3225,15 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) && !bSingleParagraph && !m_pImpl->GetIsDummyParaAddedForTableInSection() && !m_pImpl->GetIsLastParagraphFramed(); -if (bRemove) +PropertyMapPtr xContext = bRemove ? m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH) : PropertyMapPtr(); +if (xContext) { // tdf#97417 delete numbering of the paragraph // it will be deleted anyway, and the numbering would be copied // to the next paragraph in sw SplitNode and then be applied to // every following paragraph - m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)->Erase(PROP_NUMBERING_RULES); - m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)->Erase(PROP_NUMBERING_LEVEL); +xContext->Erase(PROP_NUMBERING_RULES); +xContext->Erase(PROP_NUMBERING_LEVEL); } m_pImpl->SetParaSectpr(false); m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-3.rtf |binary writerfilter/source/dmapper/DomainMapper.cxx |6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) New commits: commit 4e58115b2d7f80450b40e27187e45e3ac9babde0 Author: Caolán McNamaraDate: Fri Jul 29 21:29:03 2016 +0100 fftester: some more table manager stack checks Change-Id: Ic8dd72da175fee656889910b55d31ea161b944cc diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-3.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-3.rtf new file mode 100644 index 000..9fd5892 Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-3.rtf differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index f6e5116..6ca8528 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -213,7 +213,7 @@ DomainMapper::~DomainMapper() void DomainMapper::lcl_attribute(Id nName, Value & val) { -if (m_pImpl->getTableManager().attribute(nName, val)) +if (m_pImpl->hasTableManager() && m_pImpl->getTableManager().attribute(nName, val)) return; static const int nSingleLineSpacing = 240; @@ -414,7 +414,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) else aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100( nIntValue )); -if( m_pImpl->getTableManager().isInCell() ) +if (m_pImpl->hasTableManager() && m_pImpl->getTableManager().isInCell()) { // direct formatting is applied for table cell data TablePropertyMapPtr pTblCellWithDirectFormatting(new TablePropertyMap); @@ -443,7 +443,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) aSpacing.Mode = style::LineSpacingMode::FIX; } -if( m_pImpl->getTableManager().isInCell() ) +if (m_pImpl->hasTableManager() && m_pImpl->getTableManager().isInCell()) { // If the table manager got the line rule after // ooxml::CT_Spacing_line, then it should get the rule ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-2.rtf |binary writerfilter/source/dmapper/DomainMapper.cxx |3 ++- writerfilter/source/dmapper/DomainMapper_Impl.cxx|7 +-- 3 files changed, 7 insertions(+), 3 deletions(-) New commits: commit d00fc303bca7765762a602531b7d3b40ce8f1740 Author: Caolán McNamaraDate: Fri Jul 29 21:24:26 2016 +0100 fftester: another empty table manager stack Change-Id: If3148cb6e16cff4aad28c4f86467c66ed04bcd05 diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-2.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-2.rtf new file mode 100644 index 000..58328ed Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-2.rtf differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 2db5af3..f6e5116 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2920,7 +2920,8 @@ void DomainMapper::lcl_endShape( ) // empty paragraph at the end of the shape text will cause problems: if // the shape text ends with a table, the extra paragraph will be // handled as an additional row of the ending table. -m_pImpl->getTableManager().endTable(); +if (m_pImpl->hasTableManager()) +m_pImpl->getTableManager().endTable(); lcl_endParagraphGroup(); m_pImpl->PopShapeContext( ); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 5f6e05d..1d22fa4 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -2013,8 +2013,11 @@ void DomainMapper_Impl::UpdateEmbeddedShapeProps(const uno::Reference< drawing:: void DomainMapper_Impl::PopShapeContext() { -getTableManager().endLevel(); -popTableManager(); +if (hasTableManager()) +{ +getTableManager().endLevel(); +popTableManager(); +} if ( m_aAnchoredStack.size() > 0 ) { // For OLE object replacement shape, the text append context was already removed ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
dev/null|binary writerfilter/qa/cppunittests/rtftok/data/fail/destinationtest-1.rtf |binary writerfilter/qa/cppunittests/rtftok/data/fail/destinationtest-2.rtf |binary writerfilter/source/rtftok/rtfdocumentimpl.cxx | 39 +- 4 files changed, 20 insertions(+), 19 deletions(-) New commits: commit f9ae1b31f7791fba71f74af126cc061a048e12f8 Author: Caolán McNamaraDate: Fri Jul 29 09:18:16 2016 +0100 fftester: another null DestinationText Change-Id: I84bf3788ac092c491d7c5a9f86421f1cf9f3e814 diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/destinationtest-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/destinationtest-1.rtf similarity index 100% rename from writerfilter/qa/cppunittests/rtftok/data/pass/destinationtest-1.rtf rename to writerfilter/qa/cppunittests/rtftok/data/fail/destinationtest-1.rtf diff --git a/writerfilter/qa/cppunittests/rtftok/data/fail/destinationtest-2.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/destinationtest-2.rtf new file mode 100644 index 000..f0152b0 Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/fail/destinationtest-2.rtf differ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index e3cd2b9..909dc86 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -190,26 +190,27 @@ static util::DateTime lcl_getDateTime(RTFParserState& aState) aState.nDay, aState.nMonth, aState.nYear, false); } -static void lcl_DestinationToMath(OUStringBuffer& rDestinationText, oox::formulaimport::XmlStreamBuilder& rMathBuffer, bool& rMathNor) +static void lcl_DestinationToMath(OUStringBuffer* pDestinationText, oox::formulaimport::XmlStreamBuilder& rMathBuffer, bool& rMathNor) { -OUString aStr = rDestinationText.makeStringAndClear(); -if (!aStr.isEmpty()) +if (!pDestinationText) +return; +OUString aStr = pDestinationText->makeStringAndClear(); +if (aStr.isEmpty()) +return; +rMathBuffer.appendOpeningTag(M_TOKEN(r)); +if (rMathNor) { -rMathBuffer.appendOpeningTag(M_TOKEN(r)); -if (rMathNor) -{ -rMathBuffer.appendOpeningTag(M_TOKEN(rPr)); -// Same as M_TOKEN(lit) -rMathBuffer.appendOpeningTag(M_TOKEN(nor)); -rMathBuffer.appendClosingTag(M_TOKEN(nor)); -rMathBuffer.appendClosingTag(M_TOKEN(rPr)); -rMathNor = false; -} -rMathBuffer.appendOpeningTag(M_TOKEN(t)); -rMathBuffer.appendCharacters(aStr); -rMathBuffer.appendClosingTag(M_TOKEN(t)); -rMathBuffer.appendClosingTag(M_TOKEN(r)); +rMathBuffer.appendOpeningTag(M_TOKEN(rPr)); +// Same as M_TOKEN(lit) +rMathBuffer.appendOpeningTag(M_TOKEN(nor)); +rMathBuffer.appendClosingTag(M_TOKEN(nor)); +rMathBuffer.appendClosingTag(M_TOKEN(rPr)); +rMathNor = false; } +rMathBuffer.appendOpeningTag(M_TOKEN(t)); +rMathBuffer.appendCharacters(aStr); +rMathBuffer.appendClosingTag(M_TOKEN(t)); +rMathBuffer.appendClosingTag(M_TOKEN(r)); } RTFDocumentImpl::RTFDocumentImpl(uno::Reference const& xContext, @@ -1768,7 +1769,7 @@ RTFError RTFDocumentImpl::pushState() m_aStates.top().eRunType = RTFParserState::RunType::LOCH; if (m_aStates.top().eDestination == Destination::MR) -lcl_DestinationToMath(*m_aStates.top().pDestinationText, m_aMathBuffer, m_bMathNor); +lcl_DestinationToMath(m_aStates.top().pDestinationText, m_aMathBuffer, m_bMathNor); m_aStates.push(m_aStates.top()); } m_aStates.top().aDestinationText.setLength(0); // was copied: always reset! @@ -2463,7 +2464,7 @@ RTFError RTFDocumentImpl::popState() } break; case Destination::MR: -lcl_DestinationToMath(*m_aStates.top().pDestinationText, m_aMathBuffer, m_bMathNor); +lcl_DestinationToMath(m_aStates.top().pDestinationText, m_aMathBuffer, m_bMathNor); break; case Destination::MF: m_aMathBuffer.appendClosingTag(M_TOKEN(f)); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/destinationtest-1.rtf |binary writerfilter/source/rtftok/rtfdocumentimpl.cxx |6 +++--- writerfilter/source/rtftok/rtfdocumentimpl.hxx |6 ++ 3 files changed, 9 insertions(+), 3 deletions(-) New commits: commit 0dd22165346f4296718656d17ae98ebbfe563719 Author: Caolán McNamaraDate: Fri Jul 29 08:48:22 2016 +0100 fftester: null DestinationText Change-Id: Icdd71733c4e9f4b36e6e957e4dea772087890faa diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/destinationtest-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/destinationtest-1.rtf new file mode 100644 index 000..63465b0 Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/destinationtest-1.rtf differ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 45be8a6..e3cd2b9 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -1213,7 +1213,7 @@ void RTFDocumentImpl::text(OUString& rString) rString = rString.copy(0, rString.getLength() - 1); bEnd = true; } -m_aStates.top().pDestinationText->append(rString); +m_aStates.top().appendDestinationText(rString); if (bEnd) { // always clear, necessary in case of group-less fonttable @@ -1319,7 +1319,7 @@ void RTFDocumentImpl::text(OUString& rString) case Destination::TOCENTRY: case Destination::PROPNAME: case Destination::STATICVAL: -m_aStates.top().pDestinationText->append(rString); +m_aStates.top().appendDestinationText(rString); break; default: bRet = false; @@ -1348,7 +1348,7 @@ void RTFDocumentImpl::text(OUString& rString) // Don't return earlier, a bookmark start has to be in a paragraph group. if (m_aStates.top().eDestination == Destination::BOOKMARKSTART) { -m_aStates.top().pDestinationText->append(rString); +m_aStates.top().appendDestinationText(rString); return; } diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx index c8a28d3..152f5a6 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx @@ -282,6 +282,12 @@ public: /// point to the buffer of the current destination OUStringBuffer* pDestinationText; +void appendDestinationText(const OUString ) +{ +if (pDestinationText) +pDestinationText->append(rString); +} + /// Index of the current style. int nCurrentStyleIndex; /// Index of the current character style. ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/popstate-1.rtf |binary writerfilter/source/rtftok/rtfdocumentimpl.cxx |2 ++ 2 files changed, 2 insertions(+) New commits: commit 5de2d02806669812d43e7f23db58ab7a16373ce6 Author: Caolán McNamaraDate: Thu Jul 28 13:58:33 2016 +0100 fftester: empty states stack Change-Id: I05dfffced9a8677650a46b43f65a29e9b21c5524 diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/popstate-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/popstate-1.rtf new file mode 100644 index 000..0418917 Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/popstate-1.rtf differ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 45be8a6..b7bea75 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -1872,6 +1872,8 @@ RTFError RTFDocumentImpl::popState() // ", dest state: " << m_aStates.top().eDestination); checkUnicode(/*bUnicode =*/ true, /*bHex =*/ true); +if (m_aStates.empty()) +return RTFError::GROUP_UNDER; RTFParserState aState(m_aStates.top()); m_bWasInFrame = aState.aFrame.inFrame(); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-1.rtf |binary writerfilter/source/dmapper/DomainMapper.cxx |3 +++ 2 files changed, 3 insertions(+) New commits: commit df9414084b46c1712dc7151f50023438c62301e2 Author: Caolán McNamaraDate: Thu Jul 28 13:49:13 2016 +0100 fftester: empty table manager stack Change-Id: Ia7f7ace8130d5dfe290207e0cd3d2e6a43b8ab46 diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-1.rtf new file mode 100644 index 000..5b34e7f Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/tablemanager-1.rtf differ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index ddaafd5..2db5af3 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3193,6 +3193,9 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) return; } +if (!m_pImpl->hasTableManager()) +return; + try { m_pImpl->getTableManager().utext(data_, len); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/misc/misc.cxx| 20 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 18 +- 2 files changed, 29 insertions(+), 9 deletions(-) New commits: commit e4d5b5efac71ed2a08dcd09877078a6cf6bde0d2 Author: Mike KaganskiDate: Mon Dec 7 23:00:32 2015 +1000 tdf#54584: adjust skip-slash condition, allow unterminated quote Experimenting with different non-alpha characters in front of field, most of them aren't allowed and result in field not recognized by MS Word: #$%&'()*+,-./:;<>?@[]^_`{|}~ Besides, if backslash "\" is followed by another backslash or space, it is illegal, too. This patch takes care of it. On the other side, not closing quotes is allowed by MS Word. This patch allows this, too. The patch does not handle another allowed field code "=2+2". This should be done in another commit. Change-Id: I842fe59c026b68977e61a7ae0b5495c02803ad83 Reviewed-on: https://gerrit.libreoffice.org/20435 Tested-by: Jenkins Reviewed-by: Miklos Vajna diff --git a/writerfilter/qa/cppunittests/misc/misc.cxx b/writerfilter/qa/cppunittests/misc/misc.cxx index 49e5e1b..522dc19 100644 --- a/writerfilter/qa/cppunittests/misc/misc.cxx +++ b/writerfilter/qa/cppunittests/misc/misc.cxx @@ -160,6 +160,26 @@ void WriterfilterMiscTest::testFieldParameters() CPPUNIT_ASSERT_EQUAL(OUString("foobar"), boost::get<2>(result)[1]); CPPUNIT_ASSERT_EQUAL(OUString("\\A"), boost::get<2>(result)[2]); CPPUNIT_ASSERT_EQUAL(OUString(), boost::get<2>(result)[3]); + +for (auto prefix : {"#", "$", "%", "&", "'", "(", ")", "*", "+", ",", +"-", ".", "/", ":", ";", "<", ">", "?", "@", "[", +"]", "^", "_", "`", "{", "|", "}", "~"}) +{ +OUString test(OUString::createFromAscii(prefix) + OUString("PAGE")); +result = lcl_SplitFieldCommand(test + OUString(" ")); +CPPUNIT_ASSERT_EQUAL(test, boost::get<0>(result)); +} +result = lcl_SplitFieldCommand("\\PAGE "); +CPPUNIT_ASSERT_EQUAL(OUString("PAGE"), boost::get<0>(result)); +result = lcl_SplitFieldCommand("\\ PAGE "); +CPPUNIT_ASSERT_EQUAL(OUString("\\ "), boost::get<0>(result)); +CPPUNIT_ASSERT_EQUAL(OUString("PAGE"), boost::get<1>(result)[0]); +result = lcl_SplitFieldCommand("PAGE "); +CPPUNIT_ASSERT_EQUAL(OUString("\\PAGE"), boost::get<0>(result)); +result = lcl_SplitFieldCommand("\"PAGE\" "); +CPPUNIT_ASSERT_EQUAL(OUString("PAGE"), boost::get<0>(result)); +result = lcl_SplitFieldCommand("\"PAGE "); +CPPUNIT_ASSERT_EQUAL(OUString("PAGE "), boost::get<0>(result)); } CPPUNIT_TEST_SUITE_REGISTRATION(WriterfilterMiscTest); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 8e079ea..ec4304b 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -2274,15 +2274,12 @@ static OUString lcl_ExtractToken(OUString const& rCommand, assert(rIndex == rCommand.getLength()); if (bQuoted) { +// MS Word allows this, so just emit a debug message SAL_INFO("writerfilter.dmapper", "field argument with unterminated quote"); -return OUString(); -} -else -{ -rHaveToken = !token.isEmpty(); -return token.makeStringAndClear(); } +rHaveToken = !token.isEmpty(); +return token.makeStringAndClear(); } boost::tuple @@ -2292,10 +2289,13 @@ lcl_SplitFieldCommand(const OUString& rCommand) std::vector arguments; std::vector switches; sal_Int32 nStartIndex(0); -// tdf#54584: Field may be prepended by a backslash - skip it +// tdf#54584: Field may be prepended by a backslash +// This is not an escapement, but already escaped literal "\" +// MS Word allows this, so just skip it if ((rCommand.getLength() >= nStartIndex + 2) && -(rCommand[nStartIndex] == '\\') && -(rCommand[nStartIndex + 1] != '\\')) +(rCommand[nStartIndex] == L'\\') && +(rCommand[nStartIndex + 1] != L'\\') && +(rCommand[nStartIndex + 1] != L' ')) { ++nStartIndex; } ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa
writerfilter/qa/cppunittests/misc/misc.cxx |4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) New commits: commit 572adcaf3828e32bff1a562e07186ef0c8f465a1 Author: Miklos VajnaDate: Tue Dec 8 10:08:34 2015 +0100 writerfilter: loplugin:stringconstant Change-Id: Idb0865f4d0db6c4eda33810ab2ef4cff49bc85d1 diff --git a/writerfilter/qa/cppunittests/misc/misc.cxx b/writerfilter/qa/cppunittests/misc/misc.cxx index 522dc19..3d5cef4 100644 --- a/writerfilter/qa/cppunittests/misc/misc.cxx +++ b/writerfilter/qa/cppunittests/misc/misc.cxx @@ -165,8 +165,8 @@ void WriterfilterMiscTest::testFieldParameters() "-", ".", "/", ":", ";", "<", ">", "?", "@", "[", "]", "^", "_", "`", "{", "|", "}", "~"}) { -OUString test(OUString::createFromAscii(prefix) + OUString("PAGE")); -result = lcl_SplitFieldCommand(test + OUString(" ")); +OUString test(OUString::createFromAscii(prefix) + "PAGE"); +result = lcl_SplitFieldCommand(test + " "); CPPUNIT_ASSERT_EQUAL(test, boost::get<0>(result)); } result = lcl_SplitFieldCommand("\\PAGE "); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/i84172.rtf | 11 +++ writerfilter/source/rtftok/rtfdocumentimpl.cxx |5 + 2 files changed, 16 insertions(+) New commits: commit 013ec10d4e89e86cbd53a88058defb7e97ebaa49 Author: Miklos Vajna vmik...@collabora.co.uk Date: Wed Oct 22 22:35:01 2014 +0200 i#84172 RTF import: handle nested groups inside redlines The problem was that in case we had {\revised foo {bar}}, then we only started a redline before foo, but we ended it twice: during handling of both }. Make sure that the end of the redline is only handled by the second one. Change-Id: I41ab8b486e8615d3479fa0fadd6016476859b4b2 diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/i84172.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/i84172.rtf new file mode 100644 index 000..ce6616e --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/pass/i84172.rtf @@ -0,0 +1,11 @@ +{\rtf1 +{\*\revtbl +{Unknown;} +} +\par \pard\plain +{ +{\revised\revauth1\revdttm-1497631607 foo +{bar} +} +} +} diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index d01f85c..9bdeee8 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -4877,6 +4877,11 @@ int RTFDocumentImpl::pushState() break; } +// If this is true, then ooxml:endtrackchange will be generated. Make sure +// we don't generate more ooxml:endtrackchange than ooxml:trackchange: new +// state does not inherit this flag. +m_aStates.top().bStartedTrackchange = false; + return 0; } ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/i74153.rtf |8 writerfilter/source/rtftok/rtfdocumentimpl.cxx |9 +++-- 2 files changed, 15 insertions(+), 2 deletions(-) New commits: commit 6118ea49aee18a95ac124bbac695b3bb1b152c1d Author: Miklos Vajna vmik...@collabora.co.uk Date: Sat Oct 18 16:04:49 2014 +0200 i#74153 RTF import: fix track changes vs superscript char prop Since 9dbf817fe5c5253fba0831aefa17575ae0ba3af1 (handle scope of w:pPrChange and w:rPrChange properly (bnc#821804), 2014-10-01), this caused an assertion failure - crash. Change-Id: I680edf58854d0c9be6e77c44c1e6beb1e0442a49 diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/i74153.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/i74153.rtf new file mode 100644 index 000..7e81865 --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/pass/i74153.rtf @@ -0,0 +1,8 @@ +{\rtf1 +{\*\revtbl +{Unknown;} +{TAMUS HSC Mac User;} +} +{\revised\super\revauth1\revdttm-1501115711 hello} +\par +} diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index c7a5472..70dae1f 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -5671,8 +5671,13 @@ int RTFDocumentImpl::popState() RTFSprms aTCSprms; RTFValue::Pointer_t pValue(new RTFValue(0)); aTCSprms.set(NS_ooxml::LN_endtrackchange, pValue); -writerfilter::ReferenceProperties::Pointer_t const pProperties(new RTFReferenceProperties(RTFSprms(), aTCSprms)); -Mapper().props(pProperties); +if (!m_aStates.top().pCurrentBuffer) +{ +writerfilter::ReferenceProperties::Pointer_t const pProperties(new RTFReferenceProperties(RTFSprms(), aTCSprms)); +Mapper().props(pProperties); +} +else +m_aStates.top().pCurrentBuffer-push_back(Buf_t(BUFFER_PROPS, RTFValue::Pointer_t(new RTFValue(RTFSprms(), aTCSprms; } // This is the end of the doc, see if we need to close the last section. ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/fail/sf_edeb1eb341ad4c8608af9396952724a0-128299-minimized.rtf | 57 ++ writerfilter/source/rtftok/rtfdocumentimpl.cxx | 31 ++--- 2 files changed, 74 insertions(+), 14 deletions(-) New commits: commit b3698a6ac2642777ef0c25688e5dd5acde9594ba Author: Caolán McNamara caol...@redhat.com Date: Thu Aug 21 08:29:03 2014 +0100 NS_ooxml::LN_CT_LevelText_val might be missing Change-Id: I2683dd30d521b91cf026b3553ed4f75ee4172b3a diff --git a/writerfilter/qa/cppunittests/rtftok/data/fail/sf_edeb1eb341ad4c8608af9396952724a0-128299-minimized.rtf b/writerfilter/qa/cppunittests/rtftok/data/fail/sf_edeb1eb341ad4c8608af9396952724a0-128299-minimized.rtf new file mode 100644 index 000..45597c085 --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/fail/sf_edeb1eb341ad4c8608af9396952724a0-128299-minimized.rtf @@ -0,0 +1,57 @@ +{\rtf1\ansi\ansicpg1252\deff0 +{\fonttbl +{\f0\fnil\fcharset0\fprq0\fttruetype Times New Roman;} +{\f1\fnil\fcharset0\fprq0\fttruetype Nimbus Sans L;} +{\f2\fnil\fcharset0\fprq0\fttruetype Dingbats;} +{\f3\fnil\fcharset0\fprq0\fttruetype Symbol;} +{\f4\fnil\fcharset0\fprq0\fttruetype Courier New;}} +{\colortbl +\red0\green0\blue0; +\red255\green255\blue255;} +{\stylesheet +{\s1\fi-431\li720\sbasedon28\snext28 Contents 1;} +{\s2\fi-431\li1440\sbasedon28\snext28 Contents 2;} +{\s3\fi-431\li2160\sbasedon28\snext28 Contents 3;} +{\s8\fi-431\li720\sbasedon28 Lower Roman List;} +{\s5\tx431\sbasedon24\snext28 Numbered Heading 1;} +{\s6\tx431\sbasedon25\snext28 Numbered Heading 2;} +{\s7\fi-431\li720 Square List;} +{\*\cs11\sbasedon28 Endnote Text;} +{\s4\fi-431\li2880\sbasedon28\snext28 Contents 4;} +{\s9\fi-431\li720 Diamond List;} +{\s10\fi-431\li720 Numbered List;} +{\*\cs12\fs20\super Endnote Reference;} +{\s13\fi-431\li720 Triangle List;} +{\s14\tx431\sbasedon26\snext28 Numbered Heading 3;} +{\s15\fi-431\li720 Dashed List;} +{\s16\fi-431\li720\sbasedon10 Upper Roman List;} +{\s17\sb440\sa60\f1\fs24\b\sbasedon28\snext28 Heading 4;} +{\s18\fi-431\li720 Heart List;} +{\s34\fi-431\li720 Box List;} +{\s20\fi-431\li720\sbasedon10 Upper Case List;} +{\s21\fi-431\li720 Bullet List;} +{\s22\fi-431\li720 Hand List;} +{\*\cs23\fs20\sbasedon28 Footnote Text;} +{\s24\sb440\sa60\f1\fs34\b\sbasedon28\snext28 Heading 1;} +{\s25\sb440\sa60\f1\fs28\b\sbasedon28\snext28 Heading 2;} +{\s19\qc\sb240\sa120\f1\fs32\b\sbasedon28\snext28 Contents Header;} +{\s27\fi-431\li720 Tick List;} +{\s26\sb440\sa60\f1\fs24\b\sbasedon28\snext28 Heading 3;} +{\s29\fi-431\li720\sbasedon10 Lower Case List;} +{\s30\li1440\ri1440\sa120\sbasedon28 Block Text;} +{\s36\f4\sbasedon28 Plain Text;} +{\s32\tx1584\sbasedon5\snext28 Section Heading;} +{\s33\fi-431\li720 Implies List;} +{\s28\f0\fs24\lang1033 Normal;} +{\s35\fi-431\li720 Star List;} +{\*\cs31\fs20\super Footnote Reference;} +{\s37\tx1584\sbasedon5\snext28 Chapter Heading;}} +{\*\listtable +{\list\listtemplateid1002\listsimple{\listlevel\levelnfc0\levelstartat1\levelspAce0\levelfollow0\fi-431\li720{\leveltext\'02\'00.{}{\levelnumbers\'01;}}\listid1000}} +{\*\listoverridetable +{\listoverride\listoverridecount0\listid1000\levelnfc0\levelstartat1\levelspace0\levelfollow0\fi-431\li720{\leveltext\'02\'00.;}{\levelnumbers\'01;}\ls1}} + +\kerning0\cf0\ftnbj\fet2\ftnstart1\ftnnar\aftnnar\ftnstart1\aftnstart1\aenddoc\facingp\titlepg\revprop3{\info}\deftab720\viewkind1\paperw12240\paperh15840\margl1440\margr1440\widowctl +\sectd\sbknone\colsx360\pgncont\ltrsect +{\listtext\pard\fi-431\li720 1. }\pard\plain{\ltrpar\ql\fi-431\li720\s28{\*\abilist\abilistid1000\abilistparentid0\abilistlevel1\abistartat1{\abifieldfont NULL}{\abilistdecimal .}{\abilistdelim %L.}{\abiliststyle Numbered List}}{\*\pn\pnql\pnstart1\pnlvlbody\pndec{\pntxtb }{\pntxta .}}\fn-431\li720\ls1\ilvl0\itap0{\s28\f0\fs24\lang1033{\*\listtag0}\abinodiroverride\ltrch
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/sf_2063317381c4a46d642c79a4b1817dc0-108116-minimized.rtf | 62 ++ writerfilter/source/rtftok/rtfdocumentimpl.cxx | 13 +- 2 files changed, 69 insertions(+), 6 deletions(-) New commits: commit e3247719911f4e9b61ec43ea1c9ce04bcddc4ff8 Author: Caolán McNamara caol...@redhat.com Date: Wed Aug 20 08:42:31 2014 +0100 empty m_aStates valgrind + bff Change-Id: I3bd526b7ebf0f4fce5d0c7054809e0dc2908e73f diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/sf_2063317381c4a46d642c79a4b1817dc0-108116-minimized.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/sf_2063317381c4a46d642c79a4b1817dc0-108116-minimized.rtf new file mode 100644 index 000..9576906 --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/pass/sf_2063317381c4a46d642c79a4b1817dc0-108116-minimized.rtf @@ -0,0 +1,62 @@ +{\rtf1\ansi\deff0\adeflang1025 +{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset128 Times New Roman;}{\f4\froman\fprq2\fcharset128 Arial Narrow;}{\f5\froman\fprq0\fcharset128 Arial Narrow;}{\f6\froman\fprq2\fcharset128 Symbol;}{\f7\froman\fprq0\fcharset128 Symbol;}{\f8\froman\fprq2\fcharset128 Wingdings;}{\f9\froman\fprq0\fcharset128 Wingdings;}{\f10\froman\fprq0\fcharset128 Times New Roman;}{\f11\fnil\fprq2\fcharset0 Microsoft YaHei;}{\f12\fnil\fprq2\fcharset128 SimSun;}{\f13\fnil\fprq2\fcharset128 Times New Roman (Arabic);}{\f14\fnil\fprq0\fcharset128 Times New Roman (Arabic);}{\f15\fnil\fprq2\fcharset128 Times New Roman;}{\f16\fnil\fprq0\fcharset128 Times New Roman;}{\f17\fnil\fprq2\fcharset0 Mangal;}{\f18\fnil\fprq0\fcharset128 Mangal;}{\f19\fnil\fprq2\fcharset128 Mangal;}{\f20\fnil\fprq2\fcharset128 Cambria Math;}{\f21\fnil\fprq0\fcharset128 Cambria Math;}} +{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red128\green128\blue128;} +{\stylesheet{\s0\snext0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040 Predefinito;} +{\s15\sbasedon0\snext16\sb240\sa120\keepn\hich\af11\dbch\af17\afs28\loch\f2\fs28 Intestazione;} +{\s16\sbasedon0\snext16\sb0\sa120 Corpo testo;} +{\s17\sbasedon16\snext17\sb0\sa120\dbch\af18 Elenco;} +{\s18\sbasedon0\snext18\sb120\sa120\noline\i\dbch\af18\afs24\ai\fs24 Didascalia;} +{\s19\sbasedon0\snext19\noline\dbch\af18 Indice;} +}{\info{\creatim\yr2011\mo9\dy28\hr16\min28}{\revtim\yr2011\mo9\dy28\hr16\min29}{\printim\yr0\mo0\dy0\hr0\min0}{\comment LibreOffice}{\vern3500}}\deftab720 + +{\*\pgdsctbl +{\pgdsc0\pgdscuse195\pgwsxn12240\pghsxn15840\marglsxn1134\margrsxn1134\margtsxn1417\margbsxn1134\pgdscnxt0 Predefinito;}} +\formshade{\*\pgdscno0}\paperh15840\paperw12240\margl1134\margr1134\margt1417\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1134\margrsxn1134\margtsxn1417\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc +\trowd\trql\trleft-108\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clvertalt\cellx9864\pgndec\pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\intbl\qr\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\keepn{\scaps\b\hich\af14\langfe1040\dbch\af14\afs26\alang1025\ab\rtlch \ltrch\loch\fs26\lang1040\loch\f5 +SSS SSS curriculum vitae} +\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\intbl\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\rtlch \ltrch\loch +} +\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\intbl\qr\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\langfe1040\dbch\af14\afs16\alang1025\rtlch \ltrch\loch\fs16\lang1040\loch\f5 +}\cell\row\pard\pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\rtlch \ltrch\loch +} +\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\rtlch \ltrch\loch +} +\par \trowd\trql\trleft-108\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clvertalt\cellx9864\pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\intbl\qr\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\keepn{\scaps\b\hich\af14\langfe1040\dbch\af14\afs24\alang1025\ab\rtlch
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/sf_2063317381c4a46d642c79a4b1817dc0-101375-minimized.rtf | 62 ++ writerfilter/source/dmapper/DomainMapperTableHandler.cxx |8 + 2 files changed, 69 insertions(+), 1 deletion(-) New commits: commit 0a42632a74596cbc781746931bf8f2650994b80f Author: Caolán McNamara caol...@redhat.com Date: Wed Aug 20 08:56:54 2014 +0100 empty Reference valgrind + bff Change-Id: Id3c039a46dec5d2d4a4642dfb53d23a76972dde2 diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/sf_2063317381c4a46d642c79a4b1817dc0-101375-minimized.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/sf_2063317381c4a46d642c79a4b1817dc0-101375-minimized.rtf new file mode 100644 index 000..c3ffebc --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/pass/sf_2063317381c4a46d642c79a4b1817dc0-101375-minimized.rtf @@ -0,0 +1,62 @@ +{\rtf1\ansi\deff0\adeflang1025 +{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset128 Times New Roman;}{\f4\froman\fprq2\fcharset128 Arial Narrow;}{\f5\froman\fprq0\fcharset128 Arial Narrow;}{\f6\froman\fprq2\fcharset128 Symbol;}{\f7\froman\fprq0\fcharset128 Symbol;}{\f8\froman\fprq2\fcharset128 Wingdings;}{\f9\froman\fprq0\fcharset128 Wingdings;}{\f10\froman\fprq0\fcharset128 Times New Roman;}{\f11\fnil\fprq2\fcharset0 Microsoft YaHei;}{\f12\fnil\fprq2\fcharset128 SimSun;}{\f13\fnil\fprq2\fcharset128 Times New Roman (Arabic);}{\f14\fnil\fprq0\fcharset128 Times New Roman (Arabic);}{\f15\fnil\fprq2\fcharset128 Times New Roman;}{\f16\fnil\fprq0\fcharset128 Times New Roman;}{\f17\fnil\fprq2\fcharset0 Mangal;}{\f18\fnil\fprq0\fcharset128 Mangal;}{\f19\fnil\fprq2\fcharset128 Mangal;}{\f20\fnil\fprq2\fcharset128 Cambria Math;}{\f21\fnil\fprq0\fcharset128 Cambria Math;}} +{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red128\green128\blue128;} +{\stylesheet{\s0\snext0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040 Predefinito;} +{\s15\sbasedon0\snext16\sb240\sa120\keepn\hich\af11\dbch\af17\afs28\loch\f2\fs28 Intestazione;} +{\s16\sbasedon0\snext16\sb0\sa120 Corpo testo;} +{\s17\sbasedon16\snext17\sb0\sa120\dbch\af18 Elenco;} +{\s18\sbasedon0\snext18\sb120\sa120\noline\i\dbch\af18\afs24\ai\fs24 Didascalia;} +{\s19\sbasedon0\snext19\noline\dbch\af18 Indice;} +}{\info{\creatim\yr2011\mo9\dy28\hr16\min28}{\revtim\yr2011\mo9\dy28\hr16\min29}{\printim\yr0\mo0\dy0\hr0\min0}{\comment LibreOffice}{\vern3500}}\deftab720 + +{\*\pgdsctbl +{\pgdsc0\pgdscuse195\pgwsxn12240\pghsxn15840\marglsxn1134\margrsxn1134\margtsxn1417\margbsxn1134\pgdscnxt0 Predefinito;}} +\formshade{\*\pgdscno0}\paperh15840\paperw12240\margl1134\margr1134\margt1417\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1134\margrsxn1134\margtsxn1417\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc +\trowd\trql\trleft-108\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clvertalt\cellx9864\pgndec\pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\intbl\qr\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\keepn{\scaps\b\hich\af14\langfe1040\dbch\af14\afs26\alang1025\ab\rtlch \ltrch\loch\fs26\lang1040\loch\f5 +SSS SSS curriculum vitae} +\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\intbl\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\rtlch \ltrch\loch +} +\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\intbl\qr\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\langfe1040\dbch\af14\afs16\alang1025\rtlch \ltrch\loch\fs16\lang1040\loch\f5 +}\cell\row\pard\pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\rtlch \ltrch\loch +} +\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\rtlch \ltrch\loch +} +\par \trowd\trql\trleft-108\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clvertalt\cellx9864\pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\hich\af22\langfe2052\dbch\af17\afs24\alang1081\loch\f0\fs24\lang1040\intbl\qr\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\keepn{\scaps\b\hich\af14\langfe1040\dbch\af14\afs24\alang1025\ab\rtlch
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/sf_508f4e169fb76c80745d3541bd01b0a2-73462-minimized.rtf |binary writerfilter/source/rtftok/rtfdocumentimpl.cxx | 23 +- 2 files changed, 13 insertions(+), 10 deletions(-) New commits: commit 28df98abeca9774868cadef29b81559fd325d865 Author: Caolán McNamara caol...@redhat.com Date: Tue Aug 19 08:40:20 2014 +0100 empty m_aStates valgrind + bff Change-Id: I7b45e10471de77bd0481adf0bccdbf852c36d815 diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/sf_508f4e169fb76c80745d3541bd01b0a2-73462-minimized.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/sf_508f4e169fb76c80745d3541bd01b0a2-73462-minimized.rtf new file mode 100644 index 000..e8e27ee Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/sf_508f4e169fb76c80745d3541bd01b0a2-73462-minimized.rtf differ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 3cbc638..f2bea77 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -5743,16 +5743,19 @@ int RTFDocumentImpl::popState() case DESTINATION_FLYMAINCONTENT: case DESTINATION_SHPPICT: case DESTINATION_SHAPE: -m_aStates.top().aFrame = aState.aFrame; -if (aState.nDestinationState == DESTINATION_SHPPICT !m_aStates.empty() m_aStates.top().nDestinationState == DESTINATION_LISTPICTURE) +if (!m_aStates.empty()) { -RTFSprms aAttributes; -aAttributes.set(NS_ooxml::LN_CT_NumPicBullet_numPicBulletId, RTFValue::Pointer_t(new RTFValue(m_nListPictureId++))); -RTFSprms aSprms; -// Dummy value, real picture is already sent to dmapper. -aSprms.set(NS_ooxml::LN_CT_NumPicBullet_pict, RTFValue::Pointer_t(new RTFValue(0))); -RTFValue::Pointer_t pValue(new RTFValue(aAttributes, aSprms)); -m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_numPicBullet, pValue, OVERWRITE_NO_APPEND); +m_aStates.top().aFrame = aState.aFrame; +if (aState.nDestinationState == DESTINATION_SHPPICT m_aStates.top().nDestinationState == DESTINATION_LISTPICTURE) +{ +RTFSprms aAttributes; +aAttributes.set(NS_ooxml::LN_CT_NumPicBullet_numPicBulletId, RTFValue::Pointer_t(new RTFValue(m_nListPictureId++))); +RTFSprms aSprms; +// Dummy value, real picture is already sent to dmapper. +aSprms.set(NS_ooxml::LN_CT_NumPicBullet_pict, RTFValue::Pointer_t(new RTFValue(0))); +RTFValue::Pointer_t pValue(new RTFValue(aAttributes, aSprms)); +m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_numPicBullet, pValue, OVERWRITE_NO_APPEND); +} } break; case DESTINATION_SHAPETEXT: @@ -5780,7 +5783,7 @@ int RTFDocumentImpl::popState() break; default: { -if (m_aStates.size() m_aStates.top().nDestinationState == DESTINATION_PICT) +if (!m_aStates.empty() m_aStates.top().nDestinationState == DESTINATION_PICT) m_aStates.top().aPicture = aState.aPicture; } break; ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/sf_edeb1eb341ad4c8608af9396952724a0-41170.rtf |binary writerfilter/source/rtftok/rtfdocumentimpl.cxx |4 2 files changed, 4 insertions(+) New commits: commit e2b9531e43d37677109aa13eb6e2ebf857961016 Author: Caolán McNamara caol...@redhat.com Date: Sun Aug 17 22:32:52 2014 +0100 check for empty m_aStates valgrind + bff Change-Id: Ib818d508e10877a845b733c4aa223d1e2cbbc05e diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/sf_edeb1eb341ad4c8608af9396952724a0-41170.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/sf_edeb1eb341ad4c8608af9396952724a0-41170.rtf new file mode 100644 index 000..0925203 Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/sf_edeb1eb341ad4c8608af9396952724a0-41170.rtf differ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 7098f04..3cbc638 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -459,6 +459,10 @@ void RTFDocumentImpl::checkNeedPap() if (m_bNeedPap) { m_bNeedPap = false; // reset early, so we can avoid recursion when calling ourselves + +if (m_aStates.empty()) +return; + if (!m_aStates.top().pCurrentBuffer) { writerfilter::ReferenceProperties::Pointer_t const pParagraphProperties( ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/ooxml/watch-generated-code.sh |3 +++ writerfilter/source/ooxml/modelpreprocess.py |9 - 2 files changed, 3 insertions(+), 9 deletions(-) New commits: commit 1b30426c818a7a45a3cb429b8b3c45b634ad2ab9 Author: Miklos Vajna vmik...@collabora.co.uk Date: Mon Jul 28 18:23:46 2014 +0200 writerfilter: nobody reads the classfordefine attribute Change-Id: I030137cb379de04968fb144516e90dbd1bdd97f6 diff --git a/writerfilter/qa/ooxml/watch-generated-code.sh b/writerfilter/qa/ooxml/watch-generated-code.sh index 86acaf7..d674573 100755 --- a/writerfilter/qa/ooxml/watch-generated-code.sh +++ b/writerfilter/qa/ooxml/watch-generated-code.sh @@ -32,6 +32,9 @@ reference) compare) for i in $writerfilter_ALL do +if [ $(basename $i) == model_preprocessed.xml ]; then +continue +fi diff -u $mydir-reference/$i $mydir/$i done ;; diff --git a/writerfilter/source/ooxml/modelpreprocess.py b/writerfilter/source/ooxml/modelpreprocess.py index 022568f..82e5e3f 100644 --- a/writerfilter/source/ooxml/modelpreprocess.py +++ b/writerfilter/source/ooxml/modelpreprocess.py @@ -149,15 +149,6 @@ def preprocess(model): j.setAttribute(prefix, prefix) j.setAttribute(localname, localname) -for j in i.getElementsByTagName(define) + i.getElementsByTagName(ref): -name = j.getAttribute(name) -if name.startswith(CT_) or name.startswith(EG_) or name.startswith(AG_): -j.setAttribute(classfordefine, 1) -elif name in startElements: -j.setAttribute(classfordefine, 1) -else: -j.setAttribute(classfordefine, 0) - for i in model.getElementsByTagName(grammar): if i.getAttribute(ns).startswith(http://schemas.openxmlformats.org/;): i.setAttribute(application, i.getAttribute(ns).replace('http://schemas.openxmlformats.org/', '').split('/')[0]) ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa
writerfilter/qa/cppunittests/rtftok/data/pass/CVE-2014-1761-1.rtf |binary writerfilter/qa/cppunittests/rtftok/data/pass/CVE-2014-1761-2.rtf |binary 2 files changed New commits: commit ef52dd9f94851da829b9f6c33931b13728f84691 Author: Caolán McNamara caol...@redhat.com Date: Fri Apr 11 12:34:27 2014 +0100 test cases for CVE-2014-1761 Change-Id: I8fa160818e5981090aadea7d4691b8acc61f0b40 diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/CVE-2014-1761-1.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/CVE-2014-1761-1.rtf new file mode 100644 index 000..44d28ad Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/CVE-2014-1761-1.rtf differ diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/CVE-2014-1761-2.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/CVE-2014-1761-2.rtf new file mode 100644 index 000..64109fb Binary files /dev/null and b/writerfilter/qa/cppunittests/rtftok/data/pass/CVE-2014-1761-2.rtf differ ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/abi3623.rtf |7 +++ writerfilter/source/dmapper/DomainMapper.cxx |2 +- 2 files changed, 8 insertions(+), 1 deletion(-) New commits: commit 08fb25ab7941c52d4eed0435a45a38b03aff588c Author: Miklos Vajna vmik...@collabora.co.uk Date: Mon Feb 17 17:50:57 2014 +0100 abi#3623 RTF import: missing null pointer check Change-Id: I5861e5fec0d822f42dfeb994500a818a968e69fb diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/abi3623.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/abi3623.rtf new file mode 100644 index 000..a47161a --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/pass/abi3623.rtf @@ -0,0 +1,7 @@ +{\rtf1 +{\stylesheet +{\s2\ls1\sbasedon0 heading 2;} +} +\s2 +foo\par +} diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index b3932c3..904cd40 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2015,7 +2015,7 @@ void DomainMapper::sprmWithProps( Sprm rSprm, PropertyMapPtr rContext, SprmType { const StyleSheetEntryPtr pParent = pStyleTable-FindStyleSheetByISTD(pEntry-sBaseStyleIdentifier); const StyleSheetPropertyMap* pParentProperties = dynamic_castconst StyleSheetPropertyMap*(pParent ? pParent-pProperties.get() : 0); -if (pParentProperties-find(PROP_PARA_RIGHT_MARGIN) != pParentProperties-end()) +if (pParentProperties pParentProperties-find(PROP_PARA_RIGHT_MARGIN) != pParentProperties-end()) nParaRightMargin = pParentProperties-find(PROP_PARA_RIGHT_MARGIN)-second.getValue().getsal_Int32(); } if (nParaRightMargin != 0) ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/fdo49666.rtf | 13 writerfilter/source/rtftok/rtfdocumentimpl.cxx | 36 + 2 files changed, 40 insertions(+), 9 deletions(-) New commits: commit 0d9a5bfb1845a40fe701317486014145fdd08d06 Author: Miklos Vajna vmik...@collabora.co.uk Date: Mon Nov 4 10:34:59 2013 +0100 fdo#49666 RTF import: fix crash on picture frame with shape text The bugdoc contains a shape with type 75 (ESCHER_ShpInst_PictureFrame), which also has a shape text. Looks like this is an RTF which is generated by some 3rd-party tool: Word can open it, but it doesn't show the text on the picture frame, either. So, let's just ignore the shape text for picture frames at RTF import time as well, that avoids the crash. Change-Id: If673122eb16f4a4f7eddf107877fcfa7cb052821 diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/fdo49666.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/fdo49666.rtf new file mode 100644 index 000..5a673ca --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/pass/fdo49666.rtf @@ -0,0 +1,13 @@ +{\rtf1 \ansi \ansicpg1252 \uc1 \deff1 \deflang1033 \deflangfe1033 +{\shp +{\*\shpinst \shpleft144 \shptop490 \shpright2049 \shpbottom1840 \shpfhdr1 \shpbxcolumn \shpbypara \shpwr4 \shpwrk2 \shpfblwtxt1 \shpz0 \shplid2053 +{\sp +{\sn shapeType} +{\sv 75} +} +{\shptxt foo +} +} +} +\par +} diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index c0f14e4..eea9498 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -1466,18 +1466,36 @@ int RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword) break; case RTF_SHPTXT: case RTF_DPTXBXTEXT: -m_aStates.top().nDestinationState = DESTINATION_SHAPETEXT; -checkFirstRun(); -dispatchFlag(RTF_PARD); -m_bNeedPap = true; -if (nKeyword == RTF_SHPTXT) { -if (!m_aStates.top().pCurrentBuffer) -m_pSdrImport-resolve(m_aStates.top().aShape, false); +bool bPictureFrame = false; +for (size_t i = 0; i m_aStates.top().aShape.aProperties.size(); ++i) +{ +std::pairOUString, OUString rProperty = m_aStates.top().aShape.aProperties[i]; +if (rProperty.first == shapeType rProperty.second == OUString::number(ESCHER_ShpInst_PictureFrame)) +{ +bPictureFrame = true; +break; +} +} +if (bPictureFrame) +// Skip text on picture frames. +m_aStates.top().nDestinationState = DESTINATION_SKIP; else { -RTFValue::Pointer_t pValue(new RTFValue(m_aStates.top().aShape)); - m_aStates.top().pCurrentBuffer-push_back(make_pair(BUFFER_STARTSHAPE, pValue)); +m_aStates.top().nDestinationState = DESTINATION_SHAPETEXT; +checkFirstRun(); +dispatchFlag(RTF_PARD); +m_bNeedPap = true; +if (nKeyword == RTF_SHPTXT) +{ +if (!m_aStates.top().pCurrentBuffer) +m_pSdrImport-resolve(m_aStates.top().aShape, false); +else +{ +RTFValue::Pointer_t pValue(new RTFValue(m_aStates.top().aShape)); + m_aStates.top().pCurrentBuffer-push_back(make_pair(BUFFER_STARTSHAPE, pValue)); +} +} } } break; ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa
writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.cxx | 194 --- writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.hxx | 82 - writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.cxx | 73 - writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.hxx | 51 writerfilter/qa/cppunittests/odiapi/export.exp |1 writerfilter/qa/cppunittests/odiapi/export.map | 25 writerfilter/qa/cppunittests/odiapi/testCore.cxx | 166 --- writerfilter/qa/cppunittests/odiapi/testProperty.cxx | 675 - 8 files changed, 1267 deletions(-) New commits: commit 529f9cf52fd01f140892852584f77572b0e43a29 Author: Jelle van der Waa je...@vdwaa.nl Date: Tue Sep 10 17:58:02 2013 +0200 writerfilter: remove old unit tests Change-Id: Icaa0560b812b96e41c52d7a43267873fe364ceb7 Reviewed-on: https://gerrit.libreoffice.org/5904 Reviewed-by: Andrzej J.R. Hunt andr...@ahunt.org Tested-by: Andrzej J.R. Hunt andr...@ahunt.org diff --git a/writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.cxx b/writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.cxx deleted file mode 100644 index a894030..000 --- a/writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.cxx +++ /dev/null @@ -1,194 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the License); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include ExternalViewLogger.hxx -#include iostream -#include boost/assert.hpp -#include stdio.h - -#ifdef WNT -#define SNPRINTF(buffer, size, format, args) _snprintf(buffer, size, format, args) -#else -#define SNPRINTF(buffer, size, format, args) snprintf(buffer, size, format, args) -#endif - -using namespace std; - -namespace util -{ - - NodeDescription::NodeDescription(const string parent, const string refersTo, const string value, bool inUse) : -mParentNodeId(parent), -mRefersToNodeId(refersTo), -mNodeValue(value), -mInUse(inUse) - {} - - ExternalViewLoggerImpl::ExternalViewLoggerImpl(const string fileName) : -mFileName(fileName), -mFile(fileName.c_str()) - { -if (!mFile) - throw Cannot open file; - } - - string ExternalViewLoggerImpl::getNewStyleName() - { -static int i = 0; -char buff[20]; -SNPRINTF(buff, sizeof(buff), Style_%d, i++); -return string(buff); - } - - void ExternalViewLoggerImpl::beginTree() - { -mParentNodeStack.push(); - } - - void ExternalViewLoggerImpl::dumpNodeContainer(const std::string fileName) - { -std::ofstream file(fileName.c_str()); -NodeContainer_t::iterator iter = mNodeContainer.begin(); -NodeContainer_t::iterator iter_end = mNodeContainer.end(); -for (; iter != iter_end; ++iter) -{ -file iter-first string( ) iter-second-mParentNodeId string( ) iter-second-mRefersToNodeId string( ) iter-second-mNodeValue endl; -} - } - - void ExternalViewLoggerImpl::endTree() - { -mFile digraph { endl; -mFile Root [shape=box, color=grey]; endl; - -while (!mParentNodeStack.empty()) - mParentNodeStack.pop(); - -mParentNodeStack.push(Root); - -NodeContainer_t::iterator iter = mNodeContainer.begin(); -NodeContainer_t::iterator iter_end = mNodeContainer.end(); -for (; iter != iter_end; ++iter) -{ - if (isUnreferencedLeaf(iter-first)) - { -string newStyleName = getNewStyleName(); -mFile newStyleName [shape=box]; endl; -mFile mParentNodeStack.top() - newStyleName endl; -mParentNodeStack.push(newStyleName); -dumpTree(iter-first); -mParentNodeStack.pop(); - } -} - -mFile } endl; - } - - void ExternalViewLoggerImpl::beginNode(const std::string nodeId, const std::string value, const std::string refersToNodeId, bool inUse) - { -mNodeContainer.insert( -NodeContainer_t::value_type(nodeId, -NodeDescription::Pointer_t(new NodeDescription(mParentNodeStack.top(), refersToNodeId, value, inUse; -mParentNodeStack.push(nodeId); - } - - void ExternalViewLoggerImpl::endNode(const std::string nodeId) - { -mParentNodeStack.pop(); - } - - bool
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/data/pass/fdo64656.rtf | 10 ++ writerfilter/source/rtftok/rtfdocumentimpl.cxx |1 + 2 files changed, 11 insertions(+) New commits: commit 2c64af529567324f4433984ed7673304d26062c8 Author: Miklos Vajna vmik...@suse.cz Date: Mon Jun 10 09:43:01 2013 +0200 fdo#64656 RTF import: handle levelnumbers without leveltext Change-Id: I34ce7b172dc94489f7f506796e66b14598aab19c diff --git a/writerfilter/qa/cppunittests/rtftok/data/pass/fdo64656.rtf b/writerfilter/qa/cppunittests/rtftok/data/pass/fdo64656.rtf new file mode 100644 index 000..1c815c4 --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/pass/fdo64656.rtf @@ -0,0 +1,10 @@ +{\rtf +{\*\listtable +{\list \listtemplateid3794224 \listhybrid +{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 +{\levelnumbers ;} +} +{\listname ;} +\listid258183 } +} +} diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 345912d..b2179c4 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -3843,6 +3843,7 @@ int RTFDocumentImpl::popState() } break; case DESTINATION_LEVELNUMBERS: +if (aState.aTableSprms.find(NS_ooxml::LN_CT_Lvl_lvlText)) { RTFSprms rAttributes = aState.aTableSprms.find(NS_ooxml::LN_CT_Lvl_lvlText)-getAttributes(); RTFValue::Pointer_t pValue = rAttributes.find(NS_ooxml::LN_CT_LevelText_val); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source
writerfilter/qa/cppunittests/rtftok/testrtftok.cxx |7 +++ writerfilter/source/rtftok/rtfsprm.hxx |2 ++ 2 files changed, 9 insertions(+) New commits: commit 576187250222eae50ce057698b364f91dc926c7f Author: Miklos Vajna vmik...@suse.cz Date: Thu May 2 09:24:18 2013 +0200 writerfilter: few more doxygen comments Change-Id: I4893e2b3297adadf4e19ab22b298aaef4044b52e diff --git a/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx b/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx index 9a386d1..3342f12 100644 --- a/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx +++ b/writerfilter/qa/cppunittests/rtftok/testrtftok.cxx @@ -18,6 +18,13 @@ using namespace ::com::sun::star; +/** + * Unit test invoking the Writer RTF import filter. + * + * This does only minimal testing, checking if the filter crashes and returns + * the expected bool value for given inputs. More fine-grained tests can be + * found under sw/qa/extras/rtfimport/. + */ class RtfTest : public test::FiltersTest , public test::BootstrapFixture diff --git a/writerfilter/source/rtftok/rtfsprm.hxx b/writerfilter/source/rtftok/rtfsprm.hxx index 687c2b4..dc82256 100644 --- a/writerfilter/source/rtftok/rtfsprm.hxx +++ b/writerfilter/source/rtftok/rtfsprm.hxx @@ -18,6 +18,8 @@ namespace writerfilter { namespace rtftok { typedef std::vector std::pairId, RTFValue::Pointer_t RTFSprmsImplBase; + +/// The payload of RTFSprms which is only copied on write. class RTFSprmsImpl : public RTFSprmsImplBase { public: ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits