Kaydet (Commit) 1f2c079d authored tarafından Pierre-Eric Pelloux-Prayer's avatar Pierre-Eric Pelloux-Prayer Kaydeden (comit) Noel Power

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
Reviewed-on: https://gerrit.libreoffice.org/1648Reviewed-by: 's avatarNoel Power <noel.power@suse.com>
Tested-by: 's avatarNoel Power <noel.power@suse.com>
üst 8c178a50
...@@ -142,6 +142,8 @@ public: ...@@ -142,6 +142,8 @@ public:
void mark( ::com::sun::star::uno::Sequence< sal_Int32 > aOrder = void mark( ::com::sun::star::uno::Sequence< sal_Int32 > aOrder =
::com::sun::star::uno::Sequence< sal_Int32 >() ); ::com::sun::star::uno::Sequence< sal_Int32 >() );
void mergeTopMarks( MergeMarksEnum eMergeType = MERGE_MARKS_APPEND ); 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 Now create all the overloads in a typesafe way (i.e. without varargs) by creating a number of overloads
......
...@@ -265,6 +265,20 @@ namespace sax_fastparser { ...@@ -265,6 +265,20 @@ namespace sax_fastparser {
} }
} }
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 ) void FastSaxSerializer::writeBytes( const Sequence< ::sal_Int8 >& aData ) throw ( NotConnectedException, BufferSizeExceededException, IOException, RuntimeException )
{ {
if ( maMarkStack.empty() ) if ( maMarkStack.empty() )
......
...@@ -145,6 +145,8 @@ public: ...@@ -145,6 +145,8 @@ public:
@see mark() @see mark()
*/ */
void mergeTopMarks( sax_fastparser::MergeMarksEnum eMergeType = sax_fastparser::MERGE_MARKS_APPEND ); void mergeTopMarks( sax_fastparser::MergeMarksEnum eMergeType = sax_fastparser::MERGE_MARKS_APPEND );
void copyTopMarkPush();
void copyTopMarkPop();
private: private:
::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > mxOutputStream; ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > mxOutputStream;
...@@ -203,6 +205,7 @@ private: ...@@ -203,6 +205,7 @@ private:
}; };
::std::stack< boost::shared_ptr< ForMerge > > maMarkStack; ::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 writeFastAttributeList( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs );
void write( const ::rtl::OUString& s ); void write( const ::rtl::OUString& s );
......
...@@ -162,6 +162,16 @@ void FastSerializerHelper::mergeTopMarks( MergeMarksEnum eMergeType ) ...@@ -162,6 +162,16 @@ void FastSerializerHelper::mergeTopMarks( MergeMarksEnum eMergeType )
mpSerializer->mergeTopMarks( eMergeType ); mpSerializer->mergeTopMarks( eMergeType );
} }
void FastSerializerHelper::copyTopMarkPush()
{
mpSerializer->copyTopMarkPush();
}
void FastSerializerHelper::copyTopMarkPop()
{
mpSerializer->copyTopMarkPop();
}
FastAttributeList * FastSerializerHelper::createAttrList() FastAttributeList * FastSerializerHelper::createAttrList()
{ {
return new FastAttributeList( mxTokenHandler ); return new FastAttributeList( mxTokenHandler );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment