[Libreoffice-commits] .: sax/inc sax/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Mon Jan 14 07:51:32 PST 2013


 sax/inc/sax/fshelper.hxx            |    2 ++
 sax/source/tools/fastserializer.cxx |   14 ++++++++++++++
 sax/source/tools/fastserializer.hxx |    3 +++
 sax/source/tools/fshelper.cxx       |   10 ++++++++++
 4 files changed, 29 insertions(+)

New commits:
commit 1f2c079dd2bc9a2f5aa3597a8222bde3073a04da
Author: Pierre-Eric Pelloux-Prayer <pierre-eric at lanedo.com>
Date:   Fri Jan 11 14:34:04 2013 +0100

    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/1648
    Reviewed-by: Noel Power <noel.power at suse.com>
    Tested-by: Noel Power <noel.power at suse.com>

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 @@ public:
     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 @@ 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 )
     {
         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 @@ public:
         @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 @@ private:
     };
 
     ::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 @@ void FastSerializerHelper::mergeTopMarks( MergeMarksEnum eMergeType )
     mpSerializer->mergeTopMarks( eMergeType );
 }
 
+void FastSerializerHelper::copyTopMarkPush()
+{
+    mpSerializer->copyTopMarkPush();
+}
+
+void FastSerializerHelper::copyTopMarkPop()
+{
+    mpSerializer->copyTopMarkPop();
+}
+
 FastAttributeList * FastSerializerHelper::createAttrList()
 {
     return new FastAttributeList( mxTokenHandler );


More information about the Libreoffice-commits mailing list