diff options
-rw-r--r-- | writerfilter/source/dmapper/FontTable.cxx | 24 | ||||
-rw-r--r-- | writerfilter/source/dmapper/FontTable.hxx | 1 | ||||
-rw-r--r-- | writerfilter/source/ooxml/model.xml | 24 |
3 files changed, 44 insertions, 5 deletions
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<Properties>::Pointer_t pProperties = r_Sprm.getProps(); + if( pProperties.get()) + pProperties->resolve(*this); } void FontTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref) diff --git a/writerfilter/source/dmapper/FontTable.hxx b/writerfilter/source/dmapper/FontTable.hxx index c08a80c92aa8..226ad371ca64 100644 --- a/writerfilter/source/dmapper/FontTable.hxx +++ b/writerfilter/source/dmapper/FontTable.hxx @@ -75,6 +75,7 @@ public: // Properties virtual void attribute(Id Name, Value & val); virtual void sprm(Sprm & sprm); + void resolveSprm(Sprm & r_sprm); // Table virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref); diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml index ba836fe1acfe..2285cec70fca 100644 --- a/writerfilter/source/ooxml/model.xml +++ b/writerfilter/source/ooxml/model.xml @@ -20377,7 +20377,12 @@ </optional> <optional> <element name="charset"> - <ref name="CT_UcharHexNumber"/> + <ref name="CT_Charset"/> + </element> + </optional> + <optional> + <element name="characterSet"> + <ref name="CT_String"/> </element> </optional> <optional> @@ -20433,6 +20438,18 @@ </element> </zeroOrMore> </define> + <define name="CT_Charset"> + <optional> + <attribute name="val"> + <ref name="CT_UcharHexNumber"/> + </attribute> + </optional> + <optional> + <attribute name="characterSet"> + <ref name="ST_String"/> + </attribute> + </optional> + </define> <define name="CT_DivBdr"> <optional> <element name="top"> @@ -23282,6 +23299,10 @@ <attribute name="val" tokenid="ooxml:CT_Panose_val" action="setValue"/> <action name="start" action="setDefaultHexValue"/> </resource> + <resource name="CT_Charset" resource="Properties"> + <attribute name="val" tokenid="ooxml:CT_Charset_val"/> + <attribute name="characterSet" tokenid="ooxml:CT_Charset_characterSet"/> + </resource> <resource name="ST_FontFamily" resource="List"> <value tokenid="ooxml:Value_ST_FontFamily_decorative">decorative</value> <value tokenid="ooxml:Value_ST_FontFamily_modern">modern</value> @@ -23318,6 +23339,7 @@ <element name="altName" tokenid="ooxml:CT_Font_altName"/> <element name="panose1" tokenid="ooxml:CT_Font_panose1"/> <element name="charset" tokenid="ooxml:CT_Font_charset"/> + <element name="characterSet" tokenid="ooxml:CT_Font_characterSet"/> <element name="family" tokenid="ooxml:CT_Font_family"/> <element name="notTrueType" tokenid="ooxml:CT_Font_notTrueType"/> <element name="pitch" tokenid="ooxml:CT_Font_pitch"/> |