diff options
author | Justin Luth <justin_luth@sil.org> | 2018-05-10 15:36:11 +0300 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-05-16 11:24:47 +0200 |
commit | 8920d865ee148518bf71f71ce1866b24cc17c07e (patch) | |
tree | c968259350ad10d6c1e17cf5eadfda5bfefa7cbe /writerfilter/source | |
parent | ea19b96b6beb0ce2f25705339d1d6342dc38b283 (diff) |
tdf#117504 ooxmlimport: check paragraph props for actual style
m_sCurrentParaStyleName sounds like a nice idea, and has been
around since the initial fork, but by the time finishParagraph()
rolls around, the chances that it is still accurate are rather low.
Anything that contains a paragraph (like comments, textboxes,
shapes, tables, flys etc) might have modified that value.
This fix queries the current paragraph itself to see if
PROP_PARA_STYLE_NAME is set, which it typically is by
lcl_startParagraphGroup() except when IsInShape().
If it isn't specified, then fallback to the previous result, which
still may not be accurate, but at least it won't be a regression.
It is too late in the development cycle to look into fully
eliminating m_sCurrentParaStyleName. I hope to investigate that
in the 6.2 development cycle.
Change-Id: I124688d864f553dd5778b3593f511cc41d31c262
Reviewed-on: https://gerrit.libreoffice.org/54085
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Justin Luth <justin_luth@sil.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'writerfilter/source')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 11 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 4 |
2 files changed, 13 insertions, 2 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 3cd7492538a5..f2274f0c646a 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -647,6 +647,17 @@ uno::Sequence< style::TabStop > DomainMapper_Impl::GetCurrentTabStopAndClear() return comphelper::containerToSequence(aRet); } +const OUString DomainMapper_Impl::GetCurrentParaStyleName() +{ + // use saved currParaStyleName as a fallback, in case no particular para style name applied. + OUString sName = m_sCurrentParaStyleName; + PropertyMapPtr pParaContext = GetTopContextOfType(CONTEXT_PARAGRAPH); + if ( pParaContext && pParaContext->isSet(PROP_PARA_STYLE_NAME) ) + pParaContext->getProperty(PROP_PARA_STYLE_NAME)->second >>= sName; + + return sName; +} + /*------------------------------------------------------------------------- returns a the value from the current paragraph style - if available TODO: What about parent styles? diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 482300c13a4c..dc229c28b614 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -474,7 +474,7 @@ private: PropertyMapPtr m_pLastCharacterContext; ::std::vector<DeletableTabStop> m_aCurrentTabStops; - OUString m_sCurrentParaStyleName; + OUString m_sCurrentParaStyleName; //highly inaccurate. Overwritten by "overlapping" paragraphs like comments, flys. bool m_bInStyleSheetImport; //in import of fonts, styles, lists or lfos bool m_bInAnyTableImport; //in import of fonts, styles, lists or lfos bool m_bInHeaderFooterImport; @@ -693,7 +693,7 @@ public: css::uno::Sequence<css::style::TabStop> GetCurrentTabStopAndClear(); void SetCurrentParaStyleName(const OUString& sStringValue) {m_sCurrentParaStyleName = sStringValue;} - const OUString& GetCurrentParaStyleName() const {return m_sCurrentParaStyleName;} + const OUString GetCurrentParaStyleName(); css::uno::Any GetPropertyFromStyleSheet(PropertyIds eId); void SetStyleSheetImport( bool bSet ) { m_bInStyleSheetImport = bSet;} |