Hi, I have submitted a patch for review:
https://gerrit.libreoffice.org/1648 To pull it, you can do: git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/48/1648/1 sax: add methods to duplicate current top marker and reapply it later The need for this is ooxml: we need to have a duplicate entry (rPr) like this: <p> <pPr> <rPr>...</rPr> </pPr> <r> <rPr>...</rPR> </r> </p> This patch allows to do that by setting aside a copy of the <rPr> line, and then merging the copy when needed. Change-Id: I3868a822aa9e5210f3d814c68398a38f95072cd5 --- M sax/inc/sax/fshelper.hxx M sax/source/tools/fastserializer.cxx M sax/source/tools/fastserializer.hxx M sax/source/tools/fshelper.cxx 4 files changed, 29 insertions(+), 0 deletions(-) diff --git a/sax/inc/sax/fshelper.hxx b/sax/inc/sax/fshelper.hxx index b0b8b09..2e9d07b 100644 --- a/sax/inc/sax/fshelper.hxx +++ b/sax/inc/sax/fshelper.hxx @@ -142,6 +142,8 @@ void mark( ::com::sun::star::uno::Sequence< sal_Int32 > aOrder = ::com::sun::star::uno::Sequence< sal_Int32 >() ); void mergeTopMarks( MergeMarksEnum eMergeType = MERGE_MARKS_APPEND ); + void copyTopMarkPush(); + void copyTopMarkPop(); /* Now create all the overloads in a typesafe way (i.e. without varargs) by creating a number of overloads diff --git a/sax/source/tools/fastserializer.cxx b/sax/source/tools/fastserializer.cxx index bc2b12e..31aac1e 100644 --- a/sax/source/tools/fastserializer.cxx +++ b/sax/source/tools/fastserializer.cxx @@ -265,6 +265,20 @@ } } + void FastSaxSerializer::copyTopMarkPush() + { + assert (!maMarkStack.empty()); + maSavedMarkStack.push(boost::shared_ptr< ForMerge > ( new ForMerge(*maMarkStack.top()))); + } + + void FastSaxSerializer::copyTopMarkPop() + { + assert (!maSavedMarkStack.empty()); + maMarkStack.push(maSavedMarkStack.top()); + mergeTopMarks(); + maSavedMarkStack.pop(); + } + void FastSaxSerializer::writeBytes( const Sequence< ::sal_Int8 >& aData ) throw ( NotConnectedException, BufferSizeExceededException, IOException, RuntimeException ) { if ( maMarkStack.empty() ) diff --git a/sax/source/tools/fastserializer.hxx b/sax/source/tools/fastserializer.hxx index b80f1cc..70bc153 100644 --- a/sax/source/tools/fastserializer.hxx +++ b/sax/source/tools/fastserializer.hxx @@ -145,6 +145,8 @@ @see mark() */ void mergeTopMarks( sax_fastparser::MergeMarksEnum eMergeType = sax_fastparser::MERGE_MARKS_APPEND ); + void copyTopMarkPush(); + void copyTopMarkPop(); private: ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > mxOutputStream; @@ -203,6 +205,7 @@ }; ::std::stack< boost::shared_ptr< ForMerge > > maMarkStack; + ::std::stack< boost::shared_ptr< ForMerge > > maSavedMarkStack; void writeFastAttributeList( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ); void write( const ::rtl::OUString& s ); diff --git a/sax/source/tools/fshelper.cxx b/sax/source/tools/fshelper.cxx index 2f3f7bf..37cf3d0 100644 --- a/sax/source/tools/fshelper.cxx +++ b/sax/source/tools/fshelper.cxx @@ -162,6 +162,16 @@ mpSerializer->mergeTopMarks( eMergeType ); } +void FastSerializerHelper::copyTopMarkPush() +{ + mpSerializer->copyTopMarkPush(); +} + +void FastSerializerHelper::copyTopMarkPop() +{ + mpSerializer->copyTopMarkPop(); +} + FastAttributeList * FastSerializerHelper::createAttrList() { return new FastAttributeList( mxTokenHandler ); -- To view, visit https://gerrit.libreoffice.org/1648 To unsubscribe, visit https://gerrit.libreoffice.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3868a822aa9e5210f3d814c68398a38f95072cd5 Gerrit-PatchSet: 1 Gerrit-Project: core Gerrit-Branch: master Gerrit-Owner: Pierre-Eric Pelloux-Prayer <pierre-e...@lanedo.com> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice