[Libreoffice-commits] core.git: oox/source writerfilter/source
Adam Co
rattles2013 at gmail.com
Mon Dec 16 01:59:34 PST 2013
oox/source/token/tokens.txt | 1
writerfilter/source/dmapper/DomainMapper.cxx | 28 ++++++++++++++++++++++
writerfilter/source/dmapper/DomainMapper_Impl.cxx | 6 +++-
writerfilter/source/dmapper/PropertyIds.cxx | 1
writerfilter/source/dmapper/PropertyIds.hxx | 1
5 files changed, 36 insertions(+), 1 deletion(-)
New commits:
commit ae7f8bed4bc4d7490a158c14d077c5323bd50466
Author: Adam Co <rattles2013 at gmail.com>
Date: Sun Dec 8 16:56:21 2013 +0200
DOCX Import of 'paragraph formatting track changes'
This patch adds support for the import of 'paragraph formatting
track changes' in the DOCX filter.
It detects the 'pPrChange'->'pPr' node and stores all the properties
that it processes in the redline object.
Change-Id: I3cce83dad4d46c2216ca36393b6572f0fc9d2ed7
Reviewed-on: https://gerrit.libreoffice.org/6992
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
Tested-by: Miklos Vajna <vmiklos at collabora.co.uk>
diff --git a/oox/source/token/tokens.txt b/oox/source/token/tokens.txt
index fbdd2fc..ca7f69e 100644
--- a/oox/source/token/tokens.txt
+++ b/oox/source/token/tokens.txt
@@ -280,6 +280,7 @@ Override
Page
Pages
ParagraphAlign
+ParagraphFormat
Paragraphs
PartName
PasswordChar
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index ff90bc5..5b38153 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3454,10 +3454,17 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType
break;
case NS_ooxml::LN_paratrackchange:
m_pImpl->StartParaMarkerChange( );
+ case NS_ooxml::LN_CT_PPr_pPrChange:
case NS_ooxml::LN_trackchange:
case NS_ooxml::LN_EG_RPrContent_rPrChange:
{
m_pImpl->AddNewRedline( );
+
+ if (nSprmId == NS_ooxml::LN_CT_PPr_pPrChange)
+ {
+ m_pImpl->SetCurrentRedlineToken( ooxml::OOXML_ParagraphFormat );
+ }
+
resolveSprmProps(*this, rSprm );
// now the properties author, date and id should be available
sal_Int32 nToken = m_pImpl->GetCurrentRedlineToken();
@@ -3466,6 +3473,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType
case ooxml::OOXML_mod :
case ooxml::OOXML_ins :
case ooxml::OOXML_del :
+ case ooxml::OOXML_ParagraphFormat :
break;
default: OSL_FAIL( "redline token other than mod, ins or del" );
}
@@ -3495,6 +3503,26 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType
// Pop back out the character properties that were on the run
m_pImpl->PopProperties(CONTEXT_CHARACTER);
break;
+ case NS_ooxml::LN_CT_PPrChange_pPr:
+ // Push all the current 'Paragraph' properties to the stack, so that we don't store them
+ // as 'tracked changes' by mistake
+ m_pImpl->PushProperties(CONTEXT_PARAGRAPH);
+
+ // Resolve all the properties that are under the 'pPrChange'->'pPr' XML node
+ resolveSprmProps(*this, rSprm );
+
+ if (m_pImpl->GetTopContext())
+ {
+ // Get all the properties that were processed in the 'pPrChange'->'pPr' 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_PARAGRAPH);
+ break;
case NS_ooxml::LN_object:
{
writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 07d7df2..f726ed0 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1564,6 +1564,9 @@ void DomainMapper_Impl::CreateRedline( uno::Reference< text::XTextRange > xRange
case ooxml::OOXML_del:
sType = rPropNameSupplier.GetName( PROP_DELETE );
break;
+ case ooxml::OOXML_ParagraphFormat:
+ sType = rPropNameSupplier.GetName( PROP_PARAGRAPH_FORMAT );
+ break;
}
uno::Reference < text::XRedline > xRedline( xRange, uno::UNO_QUERY_THROW );
beans::PropertyValues aRedlineProperties( 3 );
@@ -1602,8 +1605,9 @@ void DomainMapper_Impl::CheckRedline( uno::Reference< text::XTextRange > xRange
CreateRedline( xRange, *pIt );
// Adding the non-mod redlines to the temporary vector
- if ( pIt->get( ) && ( ( *pIt )->m_nToken & 0xffff ) != ooxml::OOXML_mod )
+ if ( pIt->get( ) )
{
+ if ( ( ( *pIt )->m_nToken & 0xffff ) != ooxml::OOXML_mod && ( ( *pIt )->m_nToken & 0xffff ) != ooxml::OOXML_ParagraphFormat)
aCleaned.push_back( *pIt );
}
}
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
index 52d34c4..09d8710 100644
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -313,6 +313,7 @@ const OUString& PropertyNameSupplier::GetName( PropertyIds eId ) const
case PROP_FORMAT : sName = "Format"; break;
case PROP_INSERT : sName = "Insert"; break;
case PROP_DELETE : sName = "Delete"; break;
+ case PROP_PARAGRAPH_FORMAT : sName = "ParagraphFormat"; break;
case PROP_STREAM_NAME: sName = "StreamName"; break;
case PROP_BITMAP : sName = "Bitmap"; break;
case PROP_IS_DATE : sName = "IsDate"; break;
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx
index 5d92480..55b8a48 100644
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -210,6 +210,7 @@ enum PropertyIds
,PROP_PAGE_DESC_NAME
,PROP_PAGE_NUMBER_OFFSET
,PROP_PAGE_TOGGLE
+ ,PROP_PARAGRAPH_FORMAT
,PROP_PARAGRAPH_STYLES
,PROP_PARAGRAPH_STYLE_NAME
,PROP_PARA_ADJUST
More information about the Libreoffice-commits
mailing list