[Libreoffice-commits] core.git: writerfilter/qa writerfilter/source

2023-11-22 Thread Jaume Pujantell (via logerrit)
 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

2023-10-25 Thread Miklos Vajna (via logerrit)
 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

2023-10-20 Thread Stephan Bergmann (via logerrit)
 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

2023-09-18 Thread Miklos Vajna (via logerrit)
 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

2023-07-13 Thread Andrea Gelmini (via logerrit)
 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

2023-07-13 Thread Miklos Vajna (via logerrit)
 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

2023-06-12 Thread Miklos Vajna (via logerrit)
 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

2023-06-01 Thread Miklos Vajna (via logerrit)
 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

2023-05-31 Thread Miklos Vajna (via logerrit)
 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

2023-04-27 Thread Miklos Vajna (via logerrit)
 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

2023-02-15 Thread Miklos Vajna (via logerrit)
 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

2023-01-23 Thread Miklos Vajna (via logerrit)
 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

2023-01-05 Thread Regina Henschel (via logerrit)
 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

2022-10-13 Thread Andrea Gelmini (via logerrit)
 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

2022-10-13 Thread Andrea Gelmini (via logerrit)
 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

2022-10-10 Thread Miklos Vajna (via logerrit)
 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

2022-09-26 Thread Miklos Vajna (via logerrit)
 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

2022-09-13 Thread Miklos Vajna (via logerrit)
 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

2022-09-01 Thread Miklos Vajna (via logerrit)
 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

2022-06-28 Thread Miklos Vajna (via logerrit)
 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

2022-05-02 Thread Stephan Bergmann (via logerrit)
 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

2022-04-29 Thread Miklos Vajna (via logerrit)
 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

2022-03-08 Thread Miklos Vajna (via logerrit)
 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

2022-03-02 Thread Caolán McNamara (via logerrit)
 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

2022-02-07 Thread Miklos Vajna (via logerrit)
 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

2022-01-28 Thread Miklos Vajna (via logerrit)
 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

2022-01-27 Thread Tor Lillqvist (via logerrit)
 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

2022-01-24 Thread Miklos Vajna (via logerrit)
 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

2022-01-21 Thread Miklos Vajna (via logerrit)
 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

2022-01-17 Thread Miklos Vajna (via logerrit)
 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

2021-10-19 Thread Miklos Vajna (via logerrit)
 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

2021-10-13 Thread Xisco Fauli (via logerrit)
 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

2021-07-23 Thread Regina Henschel (via logerrit)
 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

2021-07-23 Thread Stephan Bergmann (via logerrit)
 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

2021-07-06 Thread Regina Henschel (via logerrit)
 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

2021-05-26 Thread Miklos Vajna (via logerrit)
 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

2021-01-19 Thread Miklos Vajna (via logerrit)
 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

2020-12-22 Thread Stephan Bergmann (via logerrit)
 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

2020-12-07 Thread Miklos Vajna (via logerrit)
 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

2020-11-13 Thread Miklos Vajna (via logerrit)
 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

2020-11-12 Thread Miklos Vajna (via logerrit)
 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

2020-10-26 Thread Miklos Vajna (via logerrit)
 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

2020-10-22 Thread Miklos Vajna (via logerrit)
 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

2020-07-30 Thread Miklos Vajna (via logerrit)
 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

2020-04-27 Thread Miklos Vajna (via logerrit)
 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

2020-02-11 Thread Miklos Vajna (via logerrit)
 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

2019-01-31 Thread Libreoffice Gerrit user
 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

2017-08-16 Thread Justin Luth
 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 Luth 
Date:   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\00dgetByName(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

2017-05-11 Thread Yeliz Taneroğlu
 writerfilter/qa/ooxml/watch-generated-code.sh |6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

New commits:
commit e6b7caa702917bd7cf13248cc9b394518106446d
Author: Yeliz Taneroğlu 
Date:   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

2016-09-12 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-09-10 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-09-10 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-09-06 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-09-02 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-08-27 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-08-02 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-07-31 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-07-30 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-07-29 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-07-29 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-07-29 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-07-29 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-07-28 Thread Caolán McNamara
 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 McNamara 
Date:   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

2016-07-28 Thread Caolán McNamara
 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 McNamara 
Date:   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

2015-12-08 Thread Mike Kaganski
 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 Kaganski 
Date:   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

2015-12-08 Thread Miklos Vajna
 writerfilter/qa/cppunittests/misc/misc.cxx |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

New commits:
commit 572adcaf3828e32bff1a562e07186ef0c8f465a1
Author: Miklos Vajna 
Date:   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

2014-10-22 Thread Miklos Vajna
 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

2014-10-18 Thread Miklos Vajna
 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

2014-08-21 Thread Caolán McNamara
 
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

2014-08-20 Thread Caolán McNamara
 
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

2014-08-20 Thread Caolán McNamara
 
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

2014-08-19 Thread Caolán McNamara
 
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

2014-08-18 Thread Caolán McNamara
 
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

2014-07-28 Thread Miklos Vajna
 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

2014-04-11 Thread Caolán McNamara
 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

2014-02-17 Thread Miklos Vajna
 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

2013-11-04 Thread Miklos Vajna
 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

2013-09-10 Thread Jelle van der Waa
 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

2013-06-10 Thread Miklos Vajna
 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

2013-05-02 Thread Miklos Vajna
 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