summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorTamás Zolnai <tamas.zolnai@collabora.com>2019-08-05 03:37:34 +0200
committerTamás Zolnai <tamas.zolnai@collabora.com>2019-08-05 15:13:41 +0200
commite4680c2b746dd8607a92a8470cefd1109caae66f (patch)
treeed24141284280daac838e5f56c8baf6011a741f0 /writerfilter
parent6d981f971774bb26fa269126ec890acec2171bd4 (diff)
tdf126701: MSForms: Fix import of date field at the end of the paragraph.
We need to create date field before the paragraph is finished (line break is inserted). A date field can not span between paragraphs. Extend other related unit tests too. In other use cases, the field content changes to an invalid data. Reviewed-on: https://gerrit.libreoffice.org/76971 Tested-by: Jenkins Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com> (cherry picked from commit b36ef83ea59eeaca239e58b95aa0b1acdcb99efc) Change-Id: Id274649e0aaaf6e3c31e042afd126cefc368c858 Reviewed-on: https://gerrit.libreoffice.org/76977 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx25
-rw-r--r--writerfilter/source/dmapper/DomainMapper.hxx2
-rw-r--r--writerfilter/source/dmapper/SdtHelper.cxx7
-rw-r--r--writerfilter/source/dmapper/SdtHelper.hxx2
4 files changed, 20 insertions, 16 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 6a0095651ffd..0c788dbb9c41 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3055,7 +3055,7 @@ void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len)
pContext->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_COLUMN_BEFORE));
m_pImpl->clearDeferredBreak(COLUMN_BREAK);
}
- m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
+ finishParagraph();
return;
}
case cFieldStart:
@@ -3248,15 +3248,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
m_pImpl->m_pSdtHelper->getLocale().truncate();
return;
}
- bool bIsInTable = (m_pImpl->hasTableManager() && m_pImpl->getTableManager().isInTable()) ||
- (m_pImpl->m_nTableDepth > 0);
- if(bIsInTable || m_pImpl->IsInShape())
- {
- // Inside an object we need to import date field earlier
- m_pImpl->m_pSdtHelper->createDateContentControl(bIsInTable);
- }
}
-
if (!m_pImpl->hasTableManager())
return;
@@ -3289,7 +3281,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
if ( m_pImpl->GetIsFirstParagraphInSection() || !m_pImpl->IsFirstRun() )
{
mbIsSplitPara = true;
- m_pImpl->finishParagraph( m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH) );
+ finishParagraph();
lcl_startParagraphGroup();
}
@@ -3319,7 +3311,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
xContext->Erase(PROP_NUMBERING_LEVEL);
}
m_pImpl->SetParaSectpr(false);
- m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH), bRemove);
+ finishParagraph(bRemove);
if (bRemove)
m_pImpl->RemoveLastParagraph();
}
@@ -3338,7 +3330,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
if (m_pImpl->GetIsFirstParagraphInSection() || !m_pImpl->IsFirstRun())
{
m_pImpl->m_bIsSplitPara = true;
- m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
+ finishParagraph();
lcl_startParagraphGroup();
}
m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE));
@@ -3348,7 +3340,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
if (m_pImpl->GetIsFirstParagraphInSection() || !m_pImpl->IsFirstRun())
{
mbIsSplitPara = true;
- m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
+ finishParagraph();
lcl_startParagraphGroup();
}
m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_COLUMN_BEFORE));
@@ -3793,6 +3785,13 @@ void DomainMapper::HandleRedline( Sprm& rSprm )
m_pImpl->SetCurrentRedlineIsRead();
}
+void DomainMapper::finishParagraph(const bool bRemove)
+{
+ if (m_pImpl->m_pSdtHelper->validateDateFormat())
+ m_pImpl->m_pSdtHelper->createDateContentControl();
+ m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH), bRemove);
+}
+
} //namespace dmapper
} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx
index e6b082cfcd47..e7a52764bf94 100644
--- a/writerfilter/source/dmapper/DomainMapper.hxx
+++ b/writerfilter/source/dmapper/DomainMapper.hxx
@@ -159,6 +159,8 @@ private:
// Table
virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref) override;
+ void finishParagraph(const bool bRemove = false);
+
static void handleUnderlineType(const Id nId, const ::tools::SvRef<PropertyMap>& rContext);
void handleParaJustification(const sal_Int32 nIntValue, const ::tools::SvRef<PropertyMap>& rContext, const bool bExchangeLeftRight);
static bool getColorFromId(const Id, sal_Int32 &nColor);
diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx
index 0a109c53d000..5e56340e0b80 100644
--- a/writerfilter/source/dmapper/SdtHelper.cxx
+++ b/writerfilter/source/dmapper/SdtHelper.cxx
@@ -98,7 +98,7 @@ bool SdtHelper::validateDateFormat()
return !m_sDateFormat.toString().isEmpty() && !m_sLocale.toString().isEmpty();
}
-void SdtHelper::createDateContentControl(bool bInsideTable)
+void SdtHelper::createDateContentControl()
{
if(!m_xDateFieldStartRange.is())
return;
@@ -117,7 +117,10 @@ void SdtHelper::createDateContentControl(bool bInsideTable)
try
{
xCrsr->gotoRange(m_xDateFieldStartRange, false);
- if(bInsideTable)
+ bool bIsInTable
+ = (m_rDM_Impl.hasTableManager() && m_rDM_Impl.getTableManager().isInTable())
+ || (m_rDM_Impl.m_nTableDepth > 0);
+ if (bIsInTable)
xCrsr->goRight(1, false);
xCrsr->gotoEnd(true);
}
diff --git a/writerfilter/source/dmapper/SdtHelper.hxx b/writerfilter/source/dmapper/SdtHelper.hxx
index 5efb397edd8a..8f8f3ef9ba7b 100644
--- a/writerfilter/source/dmapper/SdtHelper.hxx
+++ b/writerfilter/source/dmapper/SdtHelper.hxx
@@ -124,7 +124,7 @@ public:
/// Create drop-down control from w:sdt's w:dropDownList.
void createDropDownControl();
/// Create date control from w:sdt's w:date.
- void createDateContentControl(bool bInsideTable = false);
+ void createDateContentControl();
void appendToInteropGrabBag(const css::beans::PropertyValue& rValue);
css::uno::Sequence<css::beans::PropertyValue> getInteropGrabBagAndClear();