summaryrefslogtreecommitdiff
path: root/writerfilter/source/rtftok/rtfdocumentimpl.cxx
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-01-08 09:08:57 +0100
committerMichael Stahl <mstahl@redhat.com>2016-01-27 13:46:04 +0000
commit5f6df9fd46e28ba579bac90e7f5431b95f0a490f (patch)
tree2aaa08ef37bc1c9810ec98fc2eb47160bd1e86e4 /writerfilter/source/rtftok/rtfdocumentimpl.cxx
parentac799946e58f91ab08d127e56af5119c091732c2 (diff)
tdf#96308 RTF import: fix tab stop inheritance inside table cells
The tab stop list is a paragraph property, and RTF requires to repeat it after \s as direct formatting, otherwise the parser should be assumed that the tab stop list is cleared as a direct formatting. Non-buffered text handles that in getDefaultSPRM(), handle it directly in the RTF_PARD code for buffered text. (cherry picked from commits 1f1ddaad5dd401b70ae69fb18f7873d652242154 and 1ec88cdb82a28851c4b97d7f043d8bcec3c675e8) Change-Id: I16b09bc4c177df5a74d16653b829b198aa1a800f Reviewed-on: https://gerrit.libreoffice.org/21688 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'writerfilter/source/rtftok/rtfdocumentimpl.cxx')
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx12
1 files changed, 11 insertions, 1 deletions
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 9748fe634be8..92ba692fa9d0 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -704,6 +704,14 @@ oox::GraphicHelper& RTFDocumentImpl::getGraphicHelper()
return *m_pGraphicHelper;
}
+bool RTFDocumentImpl::isStyleSheetImport()
+{
+ if (m_aStates.empty())
+ return false;
+ Destination eDestination = m_aStates.top().eDestination;
+ return eDestination == Destination::STYLESHEET || eDestination == Destination::STYLEENTRY;
+}
+
void RTFDocumentImpl::resolve(Stream& rMapper)
{
m_pMapperStream = &rMapper;
@@ -2979,6 +2987,8 @@ RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
{
// We are still in a table.
m_aStates.top().aParagraphSprms.set(NS_ooxml::LN_inTbl, std::make_shared<RTFValue>(1));
+ // Ideally getDefaultSPRM() would take care of this, but it would not when we're buffering.
+ m_aStates.top().aParagraphSprms.set(NS_ooxml::LN_CT_PPrBase_tabs, std::make_shared<RTFValue>());
}
m_aStates.top().resetFrame();
@@ -6335,7 +6345,7 @@ RTFFrame::RTFFrame(RTFParserState* pParserState)
void RTFFrame::setSprm(Id nId, Id nValue)
{
- if (m_pParserState->m_pDocumentImpl->getFirstRun())
+ if (m_pParserState->m_pDocumentImpl->getFirstRun() && !m_pParserState->m_pDocumentImpl->isStyleSheetImport())
{
m_pParserState->m_pDocumentImpl->checkFirstRun();
m_pParserState->m_pDocumentImpl->setNeedPar(false);