From d5254f9aa29dffd045bf5f42104afdc1923dd8f2 Mon Sep 17 00:00:00 2001 From: Luboš Luňák Date: Thu, 3 Mar 2011 14:38:21 +0100 Subject: read w:characterSet (fdo#34814) --- writerfilter/source/dmapper/FontTable.cxx | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'writerfilter/source/dmapper/FontTable.cxx') diff --git a/writerfilter/source/dmapper/FontTable.cxx b/writerfilter/source/dmapper/FontTable.cxx index 5557bb869078..3459fedba359 100644 --- a/writerfilter/source/dmapper/FontTable.cxx +++ b/writerfilter/source/dmapper/FontTable.cxx @@ -101,6 +101,18 @@ void FontTable::attribute(Id Name, Value & val) case NS_ooxml::LN_CT_Font_name: m_pImpl->pCurrentEntry->sFontName = sValue; break; + case NS_ooxml::LN_CT_Charset_val: + // w:characterSet has higher priority, set only if that one is not set + if( m_pImpl->pCurrentEntry->nTextEncoding == RTL_TEXTENCODING_DONTKNOW ) + m_pImpl->pCurrentEntry->nTextEncoding = rtl_getTextEncodingFromWindowsCharset( nIntValue ); + break; + case NS_ooxml::LN_CT_Charset_characterSet: + { + rtl::OString tmp; + sValue.convertToString( &tmp, RTL_TEXTENCODING_ASCII_US, OUSTRING_TO_OSTRING_CVTFLAGS ); + m_pImpl->pCurrentEntry->nTextEncoding = rtl_getTextEncodingFromMimeCharset( tmp ); + break; + } default: { //----> debug @@ -125,12 +137,16 @@ void FontTable::sprm(Sprm& rSprm) switch(nSprmId) { case NS_ooxml::LN_CT_Font_charset: - m_pImpl->pCurrentEntry->nTextEncoding = rtl_getTextEncodingFromWindowsCharset( nIntValue ); - break; - default: - break; + resolveSprm( rSprm ); + break; } +} +void FontTable::resolveSprm(Sprm & r_Sprm) +{ + writerfilter::Reference::Pointer_t pProperties = r_Sprm.getProps(); + if( pProperties.get()) + pProperties->resolve(*this); } void FontTable::entry(int /*pos*/, writerfilter::Reference::Pointer_t ref) -- cgit