diff options
author | Rohit Deshmukh <rohit.deshmukh@synerzip.com> | 2014-05-08 16:33:44 +0530 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-05-14 07:47:18 +0000 |
commit | f51640c5f40d5132b396a9fb6589420383df1610 (patch) | |
tree | c6bb5870b047fb56b9f520b3347bb5a2edb41199 /writerfilter | |
parent | decfecc3d2414a6467bae6d5e9069fb63885e3fe (diff) |
fdo#78384: Fix for corruption if file contains symbols.
* In case of symbol, symbol character get imported first and then font of symbols.
* So we are storing symbol character and when we parse symbol font then create UNO object for text.
Change-Id: If5b79521c6a59aec02b165e8120dafdd472cdaeb
Reviewed-on: https://gerrit.libreoffice.org/9281
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 11 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 11 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 4 |
3 files changed, 25 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index dd92026e0e54..3dfb3927cc50 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -239,7 +239,7 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) } else //it's a _real_ symbol { - utext( reinterpret_cast < const sal_uInt8 * >( &nIntValue ), 1 ); + m_pImpl->SetSymbolData(nIntValue); } break; case NS_ooxml::LN_CT_Sym_font: @@ -253,7 +253,16 @@ void DomainMapper::lcl_attribute(Id nName, Value & val) } else //a real symbol if (m_pImpl->GetTopContext()) + { m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, uno::makeAny( sStringValue )); + /* + * In case of symbol, symbol character get imported first and then font of symbols. + * So we are storing symbol character and when we parse symbol font then create UNO object for text. + */ + sal_Int32 symboldata = m_pImpl->GetSymbolData(); + utext( reinterpret_cast < const sal_uInt8 * >( &(symboldata) ), 1 ); + } + break; case NS_ooxml::LN_CT_Underline_val: handleUnderlineType(nIntValue, m_pImpl->GetTopContext()); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 410b064f525b..bb81d095bb53 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -164,6 +164,7 @@ DomainMapper_Impl::DomainMapper_Impl( m_bTOCPageRef(false), m_bStartGenericField(false), m_bTextInserted(false), + m_nSymboldata(-1), m_pLastSectionContext( ), m_pLastCharacterContext(), m_nCurrentTabStopIndex( 0 ), @@ -375,6 +376,16 @@ void DomainMapper_Impl::RemoveLastParagraph( ) } } +void DomainMapper_Impl::SetSymbolData( bool nSymbolData ) +{ + m_nSymboldata = nSymbolData; +} + +sal_Int32 DomainMapper_Impl::GetSymbolData() +{ + return m_nSymboldata; +} + void DomainMapper_Impl::SetIsLastParagraphInSection( bool bIsLast ) { m_bIsLastParaInSection = bIsLast; diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 2694a5108b39..0c1178ad6966 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -331,6 +331,7 @@ private: BookmarkMap_t m_aBookmarkMap; _PageMar m_aPageMargins; + sal_Int32 m_nSymboldata; // TableManagers are stacked: one for each stream to avoid any confusion @@ -466,6 +467,9 @@ public: bool GetIsTextFrameInserted(); void SetParaSectpr(bool bParaSectpr); bool GetParaSectpr(); + + void SetSymbolData( bool nSymbolData ); + sal_Int32 GetSymbolData(); /// Setter method for m_bSdt. void SetSdt(bool bSdt); /// Getter method for m_bSdt. |