summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorAdam Co <rattles2013@gmail.com>2013-12-03 12:27:28 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2013-12-16 10:16:02 +0100
commit75236ba0aa6089dd6bad42cfee627a997a0a4238 (patch)
treec1afa2165f5da97640124ed9f7a047cca467a51d /writerfilter
parentb39265c9728b52352d13aef5fb6a28540ebc93aa (diff)
DOCX Import of 'run formatting track changes'
This patch adds support for the import of 'run formatting track changes' in the DOCX filter. It detects the 'rPrChange'->'rPr' node and stores all the properties that it processes in the redline object. Reviewed on: https://gerrit.libreoffice.org/6908 Change-Id: Ia60d7c2c4cbbad1afb8fd33cfdbd61b2c9433e09
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx18
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx10
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx4
-rw-r--r--writerfilter/source/dmapper/PropertyIds.cxx1
-rw-r--r--writerfilter/source/dmapper/PropertyIds.hxx1
5 files changed, 33 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 26dfa111be18..4633cedb34bc 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3475,6 +3475,24 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType
m_pImpl->RemoveCurrentRedline( );
break;
case NS_ooxml::LN_CT_RPrChange_rPr:
+ // Push all the current 'Character' properties to the stack, so that we don't store them
+ // as 'tracked changes' by mistake
+ m_pImpl->PushProperties(CONTEXT_CHARACTER);
+
+ // Resolve all the properties that are under the 'rPrChange'->'rPr' XML node
+ resolveSprmProps(*this, rSprm );
+
+ if (m_pImpl->GetTopContext())
+ {
+ // Get all the properties that were processed in the 'rPrChange'->'rPr' XML node
+ uno::Sequence< beans::PropertyValue > currentRedlineRevertProperties = m_pImpl->GetTopContext()->GetPropertyValues();
+
+ // Store these properties in the current redline object
+ m_pImpl->SetCurrentRedlineRevertProperties( currentRedlineRevertProperties );
+ }
+
+ // Pop back out the character properties that were on the run
+ m_pImpl->PopProperties(CONTEXT_CHARACTER);
break;
case NS_ooxml::LN_object:
{
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 1e4bdf415bab..502cae5442d2 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1566,12 +1566,14 @@ void DomainMapper_Impl::CreateRedline( uno::Reference< text::XTextRange > xRange
break;
}
uno::Reference < text::XRedline > xRedline( xRange, uno::UNO_QUERY_THROW );
- beans::PropertyValues aRedlineProperties( 2 );
+ beans::PropertyValues aRedlineProperties( 3 );
beans::PropertyValue * pRedlineProperties = aRedlineProperties.getArray( );
pRedlineProperties[0].Name = rPropNameSupplier.GetName( PROP_REDLINE_AUTHOR );
pRedlineProperties[0].Value <<= pRedline->m_sAuthor;
pRedlineProperties[1].Name = rPropNameSupplier.GetName( PROP_REDLINE_DATE_TIME );
pRedlineProperties[1].Value <<= lcl_DateStringToDateTime( pRedline->m_sDate );
+ pRedlineProperties[2].Name = rPropNameSupplier.GetName( PROP_REDLINE_REVERT_PROPERTIES );
+ pRedlineProperties[2].Value <<= pRedline->m_aRevertProperties;
xRedline->makeRedline( sType, aRedlineProperties );
}
@@ -3934,6 +3936,12 @@ void DomainMapper_Impl::SetCurrentRedlineToken( sal_Int32 nToken )
pCurrent->m_nToken = nToken;
}
+void DomainMapper_Impl::SetCurrentRedlineRevertProperties( uno::Sequence<beans::PropertyValue> aProperties )
+{
+ RedlineParamsPtr pCurrent( GetTopRedline( ) );
+ if ( pCurrent.get( ) )
+ pCurrent->m_aRevertProperties = aProperties;
+}
void DomainMapper_Impl::RemoveCurrentRedline( )
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index b13924bc6e57..10943c41ede8 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -259,6 +259,9 @@ struct RedlineParams
OUString m_sDate;
sal_Int32 m_nId;
sal_Int32 m_nToken;
+
+ /// This can hold properties of runs that had formatted 'track changes' properties
+ uno::Sequence<beans::PropertyValue> m_aRevertProperties;
};
typedef boost::shared_ptr< RedlineParams > RedlineParamsPtr;
@@ -675,6 +678,7 @@ public:
void SetCurrentRedlineDate( OUString sDate );
void SetCurrentRedlineId( sal_Int32 nId );
void SetCurrentRedlineToken( sal_Int32 nToken );
+ void SetCurrentRedlineRevertProperties( uno::Sequence<beans::PropertyValue> aProperties );
void RemoveCurrentRedline( );
void ResetParaRedline( );
void SetCurrentRedlineInitials( OUString sInitials );
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
index 94568ae78624..52d34c4c3a96 100644
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -274,6 +274,7 @@ const OUString& PropertyNameSupplier::GetName( PropertyIds eId ) const
case PROP_REDLINE_DATE_TIME : sName = "RedlineDateTime"; break;
case PROP_REDLINE_COMMENT : sName = "RedlineComment"; break;
case PROP_REDLINE_TYPE : sName = "RedlineType"; break;
+ case PROP_REDLINE_REVERT_PROPERTIES: sName = "RedlineRevertProperties"; break;
case PROP_REDLINE_SUCCESSOR_DATA: sName = "RedlineSuccessorData"; break;
case PROP_REDLINE_IDENTIFIER : sName = "RedlineIdentifier"; break;
case PROP_SIZE_PROTECTED : sName = "SizeProtected"; break;
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx
index cb6eff07d7e4..5d92480d8bbd 100644
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -243,6 +243,7 @@ enum PropertyIds
,PROP_REDLINE_IDENTIFIER
,PROP_REDLINE_SUCCESSOR_DATA
,PROP_REDLINE_TYPE
+ ,PROP_REDLINE_REVERT_PROPERTIES
,PROP_REFERENCE_FIELD_PART
,PROP_REFERENCE_FIELD_SOURCE
,PROP_RESTART_AT_EACH_PAGE