summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorJacobo Aragunde Pérez <jaragunde@igalia.com>2013-12-11 16:29:28 +0100
committerJacobo Aragunde Pérez <jaragunde@igalia.com>2013-12-11 17:39:02 +0100
commitece66b11bd3d294eb27f185c1513744fe28ca523 (patch)
tree282a0bcc0c68aae7253a275fa0f5d08e98b4540c /writerfilter
parent1835074d525d12629008f8a6d5ed27402d18f4b3 (diff)
fdo#64232: export w:themeFontLang setting to docx
We store the values of themeFontLang tag to the document grab bag so we can save it back to the document on export time. Added unit tests to check that the attribute is properly set back and also that the theme fonts are correctly applied to the text. Change-Id: Ia54c513796ba38a571396ca7b72dfd28463c15fd
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/inc/dmapper/DomainMapper.hxx2
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx5
-rw-r--r--writerfilter/source/filter/ImportFilter.cxx35
3 files changed, 41 insertions, 1 deletions
diff --git a/writerfilter/inc/dmapper/DomainMapper.hxx b/writerfilter/inc/dmapper/DomainMapper.hxx
index 78067fcbe173..9775bac11010 100644
--- a/writerfilter/inc/dmapper/DomainMapper.hxx
+++ b/writerfilter/inc/dmapper/DomainMapper.hxx
@@ -127,6 +127,8 @@ public:
/// Get the stored tokens and clear the internal storage.
beans::PropertyValue getInteropGrabBag();
+ uno::Sequence<beans::PropertyValue> GetThemeFontLangProperties() const;
+
private:
// Stream
virtual void lcl_startSectionGroup();
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 360ac57f201b..2fcd4fbdfddb 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -4364,6 +4364,11 @@ beans::PropertyValue DomainMapper::getInteropGrabBag()
return aRet;
}
+uno::Sequence<beans::PropertyValue> DomainMapper::GetThemeFontLangProperties() const
+{
+ return m_pImpl->GetSettingsTable()->GetThemeFontLangProperties();
+}
+
} //namespace dmapper
} //namespace writerfilter
diff --git a/writerfilter/source/filter/ImportFilter.cxx b/writerfilter/source/filter/ImportFilter.cxx
index cbbcd3a9b64c..708b9f7283a0 100644
--- a/writerfilter/source/filter/ImportFilter.cxx
+++ b/writerfilter/source/filter/ImportFilter.cxx
@@ -100,7 +100,8 @@ sal_Bool WriterFilter::filter( const uno::Sequence< beans::PropertyValue >& aDes
m_sFilterName == "writer_OOXML" || m_sFilterName == "writer_OOXML_Text_Template" ) ?
writerfilter::dmapper::DOCUMENT_OOXML : writerfilter::dmapper::DOCUMENT_DOC;
- writerfilter::Stream::Pointer_t pStream(new writerfilter::dmapper::DomainMapper(m_xContext, xInputStream, m_xDstDoc, bRepairStorage, eType, uno::Reference<text::XTextRange>()));
+ writerfilter::dmapper::DomainMapper* aDomainMapper = new writerfilter::dmapper::DomainMapper(m_xContext, xInputStream, m_xDstDoc, bRepairStorage, eType, uno::Reference<text::XTextRange>());
+ writerfilter::Stream::Pointer_t pStream(aDomainMapper);
//create the tokenizer and domain mapper
if( eType == writerfilter::dmapper::DOCUMENT_OOXML )
{
@@ -221,6 +222,38 @@ sal_Bool WriterFilter::filter( const uno::Sequence< beans::PropertyValue >& aDes
SAL_WARN("writerfilter","Failed to save ActiveX dom to documents grab bag");
}
+ // Adding the saved w:themeFontLang setting to the document's grab bag
+ if ( aDomainMapper->GetThemeFontLangProperties().hasElements() )
+ try
+ {
+ uno::Reference<beans::XPropertySet> xDocProps( m_xDstDoc, uno::UNO_QUERY );
+ if (xDocProps.is())
+ {
+ uno::Reference< beans::XPropertySetInfo > xPropsInfo = xDocProps->getPropertySetInfo();
+
+ const OUString aGrabBagPropName = "InteropGrabBag";
+ if( xPropsInfo.is() && xPropsInfo->hasPropertyByName( aGrabBagPropName ) )
+ {
+ uno::Sequence< beans::PropertyValue > aGrabBag;
+
+ // We want to keep the previous items
+ xDocProps->getPropertyValue( aGrabBagPropName ) >>= aGrabBag;
+ sal_Int32 length = aGrabBag.getLength();
+ aGrabBag.realloc( length+1 );
+
+ beans::PropertyValue* pValue = aGrabBag.getArray();
+ pValue[length].Name = "ThemeFontLangProps";
+ pValue[length].Value = uno::makeAny( aDomainMapper->GetThemeFontLangProperties() );
+
+ xDocProps->setPropertyValue( aGrabBagPropName, uno::Any( aGrabBag ) );
+ }
+ }
+ }
+ catch(const uno::Exception&)
+ {
+ SAL_WARN("writerfilter","Failed to save themeFontLang properties to documents grab bag");
+ }
+
writerfilter::ooxml::OOXMLStream::Pointer_t pVBAProjectStream(writerfilter::ooxml::OOXMLDocumentFactory::createStream( pDocStream, writerfilter::ooxml::OOXMLStream::VBAPROJECT ));
oox::StorageRef xVbaPrjStrg( new ::oox::ole::OleStorage( m_xContext, pVBAProjectStream->getDocumentStream(), false ) );
if( xVbaPrjStrg.get() && xVbaPrjStrg->isStorage() )