[Libreoffice-commits] .: 5 commits - chart2/qa chart2/source sc/inc sc/Module_sc.mk sc/qa sc/source

Markus Mohrhard mmohrhard at kemper.freedesktop.org
Thu Apr 19 06:50:54 PDT 2012


 chart2/qa/unit/data/reference/testChart.xml |  126 ++++++++++++++++++++++
 chart2/source/view/main/ChartView.cxx       |    2 
 sc/Module_sc.mk                             |    1 
 sc/inc/compiler.hxx                         |    2 
 sc/inc/rangenam.hxx                         |    4 
 sc/qa/extras/regression-test.cxx            |   43 +++++++
 sc/qa/unit/filters-test.cxx                 |   21 +++
 sc/qa/unit/subsequent_filters-test.cxx      |   21 ---
 sc/source/core/data/table1.cxx              |    2 
 sc/source/core/tool/compiler.cxx            |    7 -
 sc/source/core/tool/rangenam.cxx            |    8 -
 sc/source/filter/excel/xecontent.cxx        |   70 +++++++++++-
 sc/source/filter/excel/xeroot.cxx           |    2 
 sc/source/filter/excel/xestyle.cxx          |  156 ++++++++++++++++++++++++++--
 sc/source/filter/inc/xecontent.hxx          |    4 
 sc/source/filter/inc/xeroot.hxx             |    5 
 sc/source/filter/inc/xestyle.hxx            |   42 +++++++
 17 files changed, 468 insertions(+), 48 deletions(-)

New commits:
commit 126e58925be1fa76008e5eaebaa8c6893bde879a
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Thu Apr 19 15:50:09 2012 +0200

    Revert "move testCVE into slowcheck"
    
    This reverts commit 97fe16f4dc5582be597971b6e17431b8d353b8ba.
    
    Make Norbert#s tinderbox happy again.

diff --git a/sc/qa/unit/filters-test.cxx b/sc/qa/unit/filters-test.cxx
index 417b842..de17ced 100644
--- a/sc/qa/unit/filters-test.cxx
+++ b/sc/qa/unit/filters-test.cxx
@@ -96,6 +96,11 @@ public:
     virtual void setUp();
     virtual void tearDown();
 
+    /**
+     * Ensure CVEs remain unbroken
+     */
+    void testCVEs();
+
     //ods, xls, xlsx filter tests
     void testRangeNameODS(); // only test ods here, xls and xlsx in subsequent_filters-test
     void testContentODS();
@@ -112,6 +117,7 @@ public:
 #endif
 
     CPPUNIT_TEST_SUITE(ScFiltersTest);
+    CPPUNIT_TEST(testCVEs);
     CPPUNIT_TEST(testRangeNameODS);
     CPPUNIT_TEST(testContentODS);
     CPPUNIT_TEST(testContentXLS);
@@ -183,6 +189,21 @@ void ScFiltersTest::createCSVPath(const rtl::OUString& aFileBase, rtl::OUString&
     rCSVPath = aBuffer.makeStringAndClear();
 }
 
+void ScFiltersTest::testCVEs()
+{
+    testDir(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Quattro Pro 6.0")),
+        getURLFromSrc("/sc/qa/unit/data/qpro/"), rtl::OUString());
+
+    //warning, the current "sylk filter" in sc (docsh.cxx) automatically
+    //chains on failure on trying as csv, rtf, etc. so "success" may
+    //not indicate that it imported as .slk.
+    testDir(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SYLK")),
+        getURLFromSrc("/sc/qa/unit/data/slk/"), rtl::OUString());
+
+    testDir(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MS Excel 97")),
+        getURLFromSrc("/sc/qa/unit/data/xls/"), rtl::OUString());
+}
+
 #if TEST_BUG_FILES
 
 void ScFiltersTest::testDir(osl::Directory& rDir, sal_uInt32 nType)
diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx
index 8476b85..87697cd 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -96,11 +96,6 @@ public:
     virtual void setUp();
     virtual void tearDown();
 
-    /**
-     * Ensure CVEs remain unbroken
-     */
-    void testCVEs();
-
     //ods, xls, xlsx filter tests
     void testRangeNameXLS();
     void testRangeNameXLSX();
@@ -127,7 +122,6 @@ public:
 
 
     CPPUNIT_TEST_SUITE(ScFiltersTest);
-    CPPUNIT_TEST(testCVEs);
     CPPUNIT_TEST(testRangeNameXLS);
     CPPUNIT_TEST(testRangeNameXLSX);
     CPPUNIT_TEST(testFunctionsODS);
@@ -234,21 +228,6 @@ void ScFiltersTest::createCSVPath(const rtl::OUString& aFileBase, rtl::OUString&
     rCSVPath = aBuffer.makeStringAndClear();
 }
 
-void ScFiltersTest::testCVEs()
-{
-    testDir(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Quattro Pro 6.0")),
-        getURLFromSrc("/sc/qa/unit/data/qpro/"), rtl::OUString());
-
-    //warning, the current "sylk filter" in sc (docsh.cxx) automatically
-    //chains on failure on trying as csv, rtf, etc. so "success" may
-    //not indicate that it imported as .slk.
-    testDir(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SYLK")),
-        getURLFromSrc("/sc/qa/unit/data/slk/"), rtl::OUString());
-
-    testDir(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MS Excel 97")),
-        getURLFromSrc("/sc/qa/unit/data/xls/"), rtl::OUString());
-}
-
 namespace {
 
 void testRangeNameImpl(ScDocument* pDoc)
commit 44481da569df85aa91455fdc2892a4e0c5818e6c
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Thu Apr 19 15:41:28 2012 +0200

    update relative local range names, fdo#48856

diff --git a/sc/inc/compiler.hxx b/sc/inc/compiler.hxx
index 84496b6..b83448b 100644
--- a/sc/inc/compiler.hxx
+++ b/sc/inc/compiler.hxx
@@ -443,7 +443,7 @@ public:
     bool UpdateNameReference( UpdateRefMode eUpdateRefMode,
                               const ScRange&,
                               SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
-                              bool& rChanged, bool bSharedFormula = false);
+                              bool& rChanged, bool bSharedFormula = false, bool bLocal = false);
 
     ScRangeData* UpdateReference( UpdateRefMode eUpdateRefMode,
                                   const ScAddress& rOldPos, const ScRange&,
diff --git a/sc/inc/rangenam.hxx b/sc/inc/rangenam.hxx
index 3d8f626..2e3c007 100644
--- a/sc/inc/rangenam.hxx
+++ b/sc/inc/rangenam.hxx
@@ -139,7 +139,7 @@ public:
                                     const formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_DEFAULT );
     void            UpdateReference( UpdateRefMode eUpdateRefMode,
                              const ScRange& r,
-                             SCsCOL nDx, SCsROW nDy, SCsTAB nDz );
+                             SCsCOL nDx, SCsROW nDy, SCsTAB nDz, bool bLocal = false );
     bool            IsModified() const              { return bModified; }
 
     SC_DLLPUBLIC void           GuessPosition();
@@ -203,7 +203,7 @@ public:
     SC_DLLPUBLIC const ScRangeData* findByUpperName(const rtl::OUString& rName) const;
     SC_DLLPUBLIC ScRangeData* findByIndex(sal_uInt16 i);
     void UpdateReference(UpdateRefMode eUpdateRefMode, const ScRange& rRange,
-                         SCsCOL nDx, SCsROW nDy, SCsTAB nDz);
+                         SCsCOL nDx, SCsROW nDy, SCsTAB nDz, bool bLocal = false);
     void UpdateTabRef(SCTAB nTable, sal_uInt16 nFlag, SCTAB nNewTable = 0, SCTAB nNewSheets = 1);
     void UpdateTranspose(const ScRange& rSource, const ScAddress& rDest);
     void UpdateGrow(const ScRange& rArea, SCCOL nGrowX, SCROW nGrowY);
diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index 31bf5a6..acf5205 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -1379,7 +1379,7 @@ void ScTable::UpdateReference( UpdateRefMode eUpdateRefMode, SCCOL nCol1, SCROW
     if (mpRangeName)
     {
         ScRange aRange( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );;
-        mpRangeName->UpdateReference( eUpdateRefMode, aRange, nDx, nDy, nDz );
+        mpRangeName->UpdateReference( eUpdateRefMode, aRange, nDx, nDy, nDz, true );
     }
 
     if ( bIncludeDraw )
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 9b2fa2e..be051c9 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -4454,7 +4454,7 @@ ScRangeData* ScCompiler::UpdateReference(UpdateRefMode eUpdateRefMode,
 bool ScCompiler::UpdateNameReference(UpdateRefMode eUpdateRefMode,
                                      const ScRange& r,
                                      SCsCOL nDx, SCsROW nDy, SCsTAB nDz,
-                                     bool& rChanged, bool bSharedFormula)
+                                     bool& rChanged, bool bSharedFormula, bool bLocal)
 {
     bool bRelRef = false;   // set if relative reference
     rChanged = false;
@@ -4474,15 +4474,12 @@ bool ScCompiler::UpdateNameReference(UpdateRefMode eUpdateRefMode,
         if (!bUpdate && t->GetType() == svDoubleRef)
             bUpdate = !rRef.Ref2.IsColRel() || !rRef.Ref2.IsRowRel() ||
                 !rRef.Ref2.IsTabRel();
-        if (!bSharedFormula)
+        if (!bSharedFormula && !bLocal)
         {
             // We cannot update names with sheet-relative references, they may
             // be used on other sheets as well and the resulting reference
             // would be wrong. This is a dilemma if col/row would need to be
             // updated for the current usage.
-            // TODO: seems the only way out of this would be to not allow
-            // relative sheet references and have sheet-local names that can be
-            // copied along with sheets.
             bUpdate = bUpdate && !rRef.Ref1.IsTabRel() && !rRef.Ref2.IsTabRel();
         }
         if (bUpdate)
diff --git a/sc/source/core/tool/rangenam.cxx b/sc/source/core/tool/rangenam.cxx
index b5111de..8f10302 100644
--- a/sc/source/core/tool/rangenam.cxx
+++ b/sc/source/core/tool/rangenam.cxx
@@ -300,7 +300,7 @@ void ScRangeData::UpdateSymbol( rtl::OUStringBuffer& rBuffer, const ScAddress& r
 
 void ScRangeData::UpdateReference(  UpdateRefMode eUpdateRefMode,
                                     const ScRange& r,
-                                    SCsCOL nDx, SCsROW nDy, SCsTAB nDz )
+                                    SCsCOL nDx, SCsROW nDy, SCsTAB nDz, bool bLocal )
 {
     bool bChanged = false;
 
@@ -312,7 +312,7 @@ void ScRangeData::UpdateReference(  UpdateRefMode eUpdateRefMode,
         aComp.SetGrammar(pDoc->GetGrammar());
         const bool bRelRef = aComp.UpdateNameReference( eUpdateRefMode, r,
                                                     nDx, nDy, nDz,
-                                                    bChanged, bSharedFormula);
+                                                    bChanged, bSharedFormula, bLocal);
         if (bSharedFormula)
         {
             if (bRelRef)
@@ -779,11 +779,11 @@ ScRangeData* ScRangeName::findByIndex(sal_uInt16 i)
 }
 
 void ScRangeName::UpdateReference(
-    UpdateRefMode eUpdateRefMode, const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz)
+    UpdateRefMode eUpdateRefMode, const ScRange& rRange, SCsCOL nDx, SCsROW nDy, SCsTAB nDz, bool bLocal)
 {
     DataType::iterator itr = maData.begin(), itrEnd = maData.end();
     for (; itr != itrEnd; ++itr)
-        itr->second->UpdateReference(eUpdateRefMode, rRange, nDx, nDy, nDz);
+        itr->second->UpdateReference(eUpdateRefMode, rRange, nDx, nDy, nDz, bLocal);
 }
 
 void ScRangeName::UpdateTabRef(SCTAB nTable, sal_uInt16 nFlag, SCTAB nNewTable, SCTAB nNewSheets)
commit 42899582314181641d59dcc5f78358d0631b3677
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Thu Apr 19 01:18:01 2012 +0200

    enable the chart2 dumper test

diff --git a/chart2/qa/unit/data/reference/testChart.xml b/chart2/qa/unit/data/reference/testChart.xml
new file mode 100644
index 0000000..b2e4aea
--- /dev/null
+++ b/chart2/qa/unit/data/reference/testChart.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0"?>
+<XShapes>
+ <XShape position="0,0" size="16000x9000" type="com.sun.star.drawing.RectangleShape" name="CID/Page="/>
+ <XShape position="770,854" size="13068x7546" type="com.sun.star.drawing.GroupShape" name="CID/D=0">
+  <XShapes>
+   <XShape position="1206,1054" size="12632x6699" type="com.sun.star.drawing.RectangleShape" name="MarkHandles"/>
+   <XShape position="770,855" size="13068x7545" type="com.sun.star.drawing.RectangleShape" name="PlotAreaIncludingAxes"/>
+   <XShape position="770,854" size="13068x7546" type="com.sun.star.drawing.GroupShape">
+    <XShapes>
+     <XShape position="1056,1052" size="12782x6850" type="com.sun.star.drawing.GroupShape">
+      <XShapes>
+       <XShape position="1206,1054" size="12632x6699" type="com.sun.star.drawing.GroupShape" name="PlotAreaExcludingAxes">
+        <XShapes>
+         <XShape position="1206,1054" size="12632x6699" type="com.sun.star.drawing.RectangleShape" name="CID/DiagramWall="/>
+        </XShapes>
+       </XShape>
+       <XShape position="1056,1052" size="12782x6850" type="com.sun.star.drawing.GroupShape" name="testonly;CooContainer=XXX_CID">
+        <XShapes>
+         <XShape position="1206,1052" size="12632x6700" type="com.sun.star.drawing.GroupShape">
+          <XShapes>
+           <XShape position="1206,1052" size="12632x6700" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:Axis=1,0:Grid=0">
+            <XShapes>
+             <XShape position="1206,1052" size="12632x6700" type="com.sun.star.drawing.PolyLineShape"/>
+             <XShape position="1206,1052" size="0x6700" type="com.sun.star.drawing.PolyLineShape" name="HandlesOnly"/>
+            </XShapes>
+           </XShape>
+          </XShapes>
+         </XShape>
+         <XShape position="1056,1052" size="12782x6850" type="com.sun.star.drawing.GroupShape">
+          <XShapes>
+           <XShape position="1206,7752" size="12632x150" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:Axis=0,0">
+            <XShapes>
+             <XShape position="1206,7752" size="12632x150" type="com.sun.star.drawing.PolyLineShape"/>
+             <XShape position="1206,7752" size="12632x0" type="com.sun.star.drawing.LineShape" name="MarkHandles"/>
+            </XShapes>
+           </XShape>
+           <XShape position="1056,1052" size="150x6700" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:Axis=1,0">
+            <XShapes>
+             <XShape position="1056,1052" size="150x6700" type="com.sun.star.drawing.PolyLineShape"/>
+             <XShape position="1206,1052" size="0x6700" type="com.sun.star.drawing.LineShape" name="MarkHandles"/>
+            </XShapes>
+           </XShape>
+          </XShapes>
+         </XShape>
+         <XShape position="1627,2169" size="11789x5583" type="com.sun.star.drawing.GroupShape">
+          <XShapes>
+           <XShape position="1627,2169" size="10947x5583" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:CT=0:Series=0">
+            <XShapes>
+             <XShape position="11732,2169" size="842x5583" type="com.sun.star.drawing.PolyPolygonShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=4"/>
+             <XShape position="9206,3285" size="842x4467" type="com.sun.star.drawing.PolyPolygonShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=3"/>
+             <XShape position="6679,4402" size="843x3350" type="com.sun.star.drawing.PolyPolygonShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=2"/>
+             <XShape position="4153,5519" size="842x2233" type="com.sun.star.drawing.PolyPolygonShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=1"/>
+             <XShape position="1627,6635" size="842x1117" type="com.sun.star.drawing.PolyPolygonShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=0:Point=0"/>
+            </XShapes>
+           </XShape>
+           <XShape position="2469,3285" size="10947x4467" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:CT=0:Series=1">
+            <XShapes>
+             <XShape position="12574,5519" size="842x2233" type="com.sun.star.drawing.PolyPolygonShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=4"/>
+             <XShape position="10048,3285" size="842x4467" type="com.sun.star.drawing.PolyPolygonShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=3"/>
+             <XShape position="7522,4402" size="842x3350" type="com.sun.star.drawing.PolyPolygonShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=2"/>
+             <XShape position="4995,6635" size="842x1117" type="com.sun.star.drawing.PolyPolygonShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=1"/>
+             <XShape position="2469,5519" size="842x2233" type="com.sun.star.drawing.PolyPolygonShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=1:Point=0"/>
+            </XShapes>
+           </XShape>
+          </XShapes>
+         </XShape>
+        </XShapes>
+       </XShape>
+      </XShapes>
+     </XShape>
+     <XShape position="770,854" size="11898x7546" type="com.sun.star.drawing.GroupShape">
+      <XShapes>
+       <XShape position="2376,8002" size="10292x398" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:Axis=0,0">
+        <XShapes>
+         <XShape position="2376,8002" size="187x398" type="com.sun.star.drawing.TextShape" text="1"/>
+         <XShape position="4902,8002" size="187x398" type="com.sun.star.drawing.TextShape" text="2"/>
+         <XShape position="7429,8002" size="187x398" type="com.sun.star.drawing.TextShape" text="3"/>
+         <XShape position="9955,8002" size="187x398" type="com.sun.star.drawing.TextShape" text="4"/>
+         <XShape position="12481,8002" size="187x398" type="com.sun.star.drawing.TextShape" text="5"/>
+        </XShapes>
+       </XShape>
+       <XShape position="770,854" size="187x7098" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:Axis=1,0">
+        <XShapes>
+         <XShape position="770,7554" size="187x398" type="com.sun.star.drawing.TextShape" text="0"/>
+         <XShape position="770,6437" size="187x398" type="com.sun.star.drawing.TextShape" text="1"/>
+         <XShape position="770,5321" size="187x398" type="com.sun.star.drawing.TextShape" text="2"/>
+         <XShape position="770,4204" size="187x398" type="com.sun.star.drawing.TextShape" text="3"/>
+         <XShape position="770,3087" size="187x398" type="com.sun.star.drawing.TextShape" text="4"/>
+         <XShape position="770,1971" size="187x398" type="com.sun.star.drawing.TextShape" text="5"/>
+         <XShape position="770,854" size="187x398" type="com.sun.star.drawing.TextShape" text="6"/>
+        </XShapes>
+       </XShape>
+      </XShapes>
+     </XShape>
+    </XShapes>
+   </XShape>
+  </XShapes>
+ </XShape>
+ <XShape position="14478,3952" size="1312x1096" type="com.sun.star.drawing.GroupShape" name="CID/D=0:Legend=">
+  <XShapes>
+   <XShape position="14478,3952" size="1312x1096" type="com.sun.star.drawing.RectangleShape" name="MarkHandles"/>
+   <XShape position="14594,4145" size="211x211" type="com.sun.star.drawing.GroupShape">
+    <XShapes>
+     <XShape position="14594,4145" size="211x211" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=0:LegendEntry=0">
+      <XShapes>
+       <XShape position="14594,4145" size="211x211" type="com.sun.star.drawing.RectangleShape"/>
+       <XShape position="14594,4145" size="211x211" type="com.sun.star.drawing.RectangleShape"/>
+      </XShapes>
+     </XShape>
+    </XShapes>
+   </XShape>
+   <XShape position="14594,4643" size="211x211" type="com.sun.star.drawing.GroupShape">
+    <XShapes>
+     <XShape position="14594,4643" size="211x211" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/D=0:CS=0:CT=0:Series=1:LegendEntry=0">
+      <XShapes>
+       <XShape position="14594,4643" size="211x211" type="com.sun.star.drawing.RectangleShape"/>
+       <XShape position="14594,4643" size="211x211" type="com.sun.star.drawing.RectangleShape"/>
+      </XShapes>
+     </XShape>
+    </XShapes>
+   </XShape>
+   <XShape position="14905,4052" size="769x398" type="com.sun.star.drawing.TextShape" text="test1"/>
+   <XShape position="14905,4550" size="769x398" type="com.sun.star.drawing.TextShape" text="test2"/>
+  </XShapes>
+ </XShape>
+</XShapes>
diff --git a/sc/Module_sc.mk b/sc/Module_sc.mk
index b6a42e1..a40b0d8 100644
--- a/sc/Module_sc.mk
+++ b/sc/Module_sc.mk
@@ -54,6 +54,7 @@ $(eval $(call gb_Module_add_subsequentcheck_targets,sc,\
     JunitTest_sc_complex \
     JunitTest_sc_unoapi \
     CppunitTest_sc_cellrangeobj \
+    CppunitTest_sc_chart_regression_test \
     $(if $(filter-out $(OS),IOS), \
 	    CppunitTest_sc_databaserangeobj) \
     CppunitTest_sc_datapilottableobj \
diff --git a/sc/qa/extras/regression-test.cxx b/sc/qa/extras/regression-test.cxx
index 4041fd4..812e218 100644
--- a/sc/qa/extras/regression-test.cxx
+++ b/sc/qa/extras/regression-test.cxx
@@ -61,6 +61,46 @@
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
 
+namespace {
+
+bool checkDumpAgainstFile( const rtl::OUString& rDump, const rtl::OUString aFilePath )
+{
+    rtl::OString aOFile = rtl::OUStringToOString(aFilePath, RTL_TEXTENCODING_UTF8);
+    std::ifstream aFile(aOFile.getStr());
+
+    CPPUNIT_ASSERT_MESSAGE("file not open", aFile.is_open());
+    CPPUNIT_ASSERT_MESSAGE("dump is empty", !rDump.isEmpty());
+
+    sal_Int32 nLine = 1;
+    sal_Int32 nIndex = 0;
+    while(!aFile.eof())
+    {
+        std::string aLineFile;
+
+        std::getline(aFile, aLineFile);
+        sal_Int32 nNewIndex = rDump.indexOf('\n', nIndex);
+        //CPPUNIT_ASSERT( nNewIndex != -1 );
+        if (nNewIndex == -1)
+            nNewIndex = rDump.getLength();
+        rtl::OUString aLineDump = rDump.copy(nIndex, nNewIndex-nIndex);
+        nIndex = nNewIndex+1;
+        rtl::OString aOLineDump = rtl::OUStringToOString(aLineDump, RTL_TEXTENCODING_UTF8);
+
+        if( aLineFile.compare(aOLineDump.getStr()) )
+        {
+            rtl::OStringBuffer aErrorMessage("Mismatch between reference file and dump in line ");
+            std::cout << rtl::OUStringToOString(rDump, RTL_TEXTENCODING_UTF8).getStr();
+            aErrorMessage.append(nLine).append(".\nExpected: ");
+            aErrorMessage.append(aLineFile.c_str()).append("\nFound   : ").append(aOLineDump);
+            CPPUNIT_ASSERT_MESSAGE(aErrorMessage.getStr(), false);
+        }
+        nLine++;
+    }
+    return true;
+}
+
+}
+
 class ScChartRegressionTest : public test::BootstrapFixture, public unotest::MacrosTest
 {
 public:
@@ -129,7 +169,8 @@ void ScChartRegressionTest::test()
     CPPUNIT_ASSERT(xDumper.is());
 
     rtl::OUString aDump = xDumper->dump();
-    std::cout << aDump << std::endl;
+    bool bCompare = checkDumpAgainstFile( aDump, getPathFromSrc("/chart2/qa/unit/data/reference/testChart.xml") );
+    CPPUNIT_ASSERT(bCompare);
 }
 
 ScChartRegressionTest::ScChartRegressionTest()
commit 55b823c6f9638194ec81e23faf9e131138636d32
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Thu Apr 19 00:51:10 2012 +0200

    don't use the debug mode for normal tests

diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 250332f..a893062 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -3028,7 +3028,7 @@ uno::Sequence< ::rtl::OUString > ChartView::getAvailableServiceNames() throw (un
 
 namespace {
 
-#define DEBUG_DUMPER 1
+#define DEBUG_DUMPER 0
 
 int writeCallback(void* pContext, const char* sBuffer, int nLen)
 {
commit 54e2c44a0cb20f265e3703f898c7e99e0ee77692
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Thu Apr 19 00:11:03 2012 +0200

    export differential formatting to xlsx
    
    This is the first step into exporting conditional formatting to xlsx
    
    Currently we are missing the number format entries and the font entries.
    The patch will need some more clean up.
    
    New exported entries:
    - dxf
    - dxfs

diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx
index f0193d3..17bd7e3 100644
--- a/sc/source/filter/excel/xecontent.cxx
+++ b/sc/source/filter/excel/xecontent.cxx
@@ -573,10 +573,11 @@ void XclExpLabelranges::Save( XclExpStream& rStrm )
 class XclExpCFImpl : protected XclExpRoot
 {
 public:
-    explicit            XclExpCFImpl( const XclExpRoot& rRoot, const ScCondFormatEntry& rFormatEntry );
+    explicit            XclExpCFImpl( const XclExpRoot& rRoot, const ScCondFormatEntry& rFormatEntry, sal_Int32 nPriority = 0 );
 
     /** Writes the body of the CF record. */
     void                WriteBody( XclExpStream& rStrm );
+    void                SaveXml( XclExpXmlStream& rStrm );
 
 private:
     const ScCondFormatEntry& mrFormatEntry; /// Calc conditional format entry.
@@ -588,6 +589,7 @@ private:
     sal_uInt32          mnFontColorId;      /// Font color ID.
     sal_uInt8           mnType;             /// Type of the condition (cell/formula).
     sal_uInt8           mnOperator;         /// Comparison operator for cell type.
+    sal_Int32           mnPriority;         /// Priority of this entry; needed for oox export
     bool                mbFontUsed;         /// true = Any font attribute used.
     bool                mbHeightUsed;       /// true = Font height used.
     bool                mbWeightUsed;       /// true = Font weight used.
@@ -601,12 +603,13 @@ private:
 
 // ----------------------------------------------------------------------------
 
-XclExpCFImpl::XclExpCFImpl( const XclExpRoot& rRoot, const ScCondFormatEntry& rFormatEntry ) :
+XclExpCFImpl::XclExpCFImpl( const XclExpRoot& rRoot, const ScCondFormatEntry& rFormatEntry, sal_Int32 nPriority ) :
     XclExpRoot( rRoot ),
     mrFormatEntry( rFormatEntry ),
     mnFontColorId( 0 ),
     mnType( EXC_CF_TYPE_CELL ),
     mnOperator( EXC_CF_CMP_NONE ),
+    mnPriority( nPriority ),
     mbFontUsed( false ),
     mbHeightUsed( false ),
     mbWeightUsed( false ),
@@ -778,12 +781,64 @@ void XclExpCFImpl::WriteBody( XclExpStream& rStrm )
         mxTokArr2->WriteArray( rStrm );
 }
 
+namespace {
+
+const char* GetOperatorString(ScConditionMode eMode)
+{
+    switch(eMode)
+    {
+        case SC_COND_EQUAL:
+            return "equal";
+        case SC_COND_LESS:
+            return "lessThan";
+        case SC_COND_GREATER:
+            return "greaterThan";
+        case SC_COND_EQLESS:
+            return "lessThanOrEqual";
+        case SC_COND_EQGREATER:
+            return "greaterThanOrEqual";
+        case SC_COND_NOTEQUAL:
+            return "notEqual";
+        case SC_COND_BETWEEN:
+            return "between";
+        case SC_COND_NOTBETWEEN:
+            return "notBetween";
+        case SC_COND_DUPLICATE:
+        case SC_COND_NOTDUPLICATE:
+        case SC_COND_DIRECT:
+        case SC_COND_NONE:
+        default:
+            return "";
+            break;
+    }
+    return "";
+}
+
+const char* GetTypeString()
+{
+    return "cellIs";
+}
+
+}
+
+void XclExpCFImpl::SaveXml( XclExpXmlStream& rStrm )
+{
+    sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream();
+    rWorksheet->startElement( XML_cfRule,
+            XML_type, GetTypeString(),
+            XML_priority, OString::valueOf( mnPriority + 1 ).getStr(),
+            XML_operator, GetOperatorString( mrFormatEntry.GetOperation() ),
+            FSEND );
+    // OOXTODO: XML_extLst
+    rWorksheet->endElement( XML_cfRule );
+}
+
 // ----------------------------------------------------------------------------
 
-XclExpCF::XclExpCF( const XclExpRoot& rRoot, const ScCondFormatEntry& rFormatEntry ) :
+XclExpCF::XclExpCF( const XclExpRoot& rRoot, const ScCondFormatEntry& rFormatEntry, sal_Int32 nPriority = 0 ) :
     XclExpRecord( EXC_ID_CF ),
     XclExpRoot( rRoot ),
-    mxImpl( new XclExpCFImpl( rRoot, rFormatEntry ) )
+    mxImpl( new XclExpCFImpl( rRoot, rFormatEntry, nPriority ) )
 {
 }
 
@@ -796,6 +851,11 @@ void XclExpCF::WriteBody( XclExpStream& rStrm )
     mxImpl->WriteBody( rStrm );
 }
 
+void XclExpCF::SaveXml( XclExpXmlStream& rStrm )
+{
+    mxImpl->SaveXml( rStrm );
+}
+
 // ----------------------------------------------------------------------------
 
 XclExpCondfmt::XclExpCondfmt( const XclExpRoot& rRoot, const ScConditionalFormat& rCondFormat ) :
@@ -809,7 +869,7 @@ XclExpCondfmt::XclExpCondfmt( const XclExpRoot& rRoot, const ScConditionalFormat
     {
         for( sal_uInt16 nIndex = 0, nCount = rCondFormat.Count(); nIndex < nCount; ++nIndex )
             if( const ScCondFormatEntry* pEntry = rCondFormat.GetEntry( nIndex ) )
-                maCFList.AppendNewRecord( new XclExpCF( GetRoot(), *pEntry ) );
+                maCFList.AppendNewRecord( new XclExpCF( GetRoot(), *pEntry, nIndex ) );
         aScRanges.Format( msSeqRef, SCA_VALID, NULL, formula::FormulaGrammar::CONV_XL_A1 );
     }
 }
diff --git a/sc/source/filter/excel/xeroot.cxx b/sc/source/filter/excel/xeroot.cxx
index bf8609d..bff5368 100644
--- a/sc/source/filter/excel/xeroot.cxx
+++ b/sc/source/filter/excel/xeroot.cxx
@@ -199,6 +199,7 @@ void XclExpRoot::InitializeGlobals()
         mrExpData.mxPTableMgr.reset( new XclExpPivotTableManager( GetRoot() ) );
         // BIFF8: only one link manager for all sheets
         mrExpData.mxLocLinkMgr = mrExpData.mxGlobLinkMgr;
+        mrExpData.mxDxfs.reset( new XclExpDxfs( GetRoot() ) );
     }
 
     GetXFBuffer().Initialize();
@@ -233,6 +234,7 @@ XclExpRecordRef XclExpRoot::CreateRecord( sal_uInt16 nRecId ) const
         case EXC_ID_SST:            xRec = mrExpData.mxSst;         break;
         case EXC_ID_EXTERNSHEET:    xRec = GetLocalLinkMgrRef();    break;
         case EXC_ID_NAME:           xRec = mrExpData.mxNameMgr;     break;
+        case EXC_ID_DXFS:           xRec = mrExpData.mxDxfs;        break;
     }
     OSL_ENSURE( xRec, "XclExpRoot::CreateRecord - unknown record ID or missing object" );
     return xRec;
diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx
index bd53eef..acb746c 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -54,6 +54,7 @@
 #include "attrib.hxx"
 #include "globstr.hrc"
 #include "xestring.hxx"
+#include "conditio.hxx"
 
 #include <oox/token/tokens.hxx>
 #include <boost/ptr_container/ptr_vector.hpp>
@@ -1214,6 +1215,17 @@ struct XclExpNumFmtPred
 
 // ----------------------------------------------------------------------------
 
+void XclExpNumFmt::SaveXml( XclExpXmlStream& rStrm, const String& rFormatCode )
+{
+    sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream();
+    rStyleSheet->singleElement( XML_numFmt,
+            XML_numFmtId,   OString::valueOf( mnXclNumFmt ).getStr(),
+            XML_formatCode, XclXmlUtils::ToOString( rFormatCode ).getStr(),
+            FSEND );
+}
+
+// ----------------------------------------------------------------------------
+
 XclExpNumFmtBuffer::XclExpNumFmtBuffer( const XclExpRoot& rRoot ) :
     XclExpRoot( rRoot ),
     /*  Compiler needs a hint, this doesn't work: new NfKeywordTable;
@@ -1278,12 +1290,9 @@ void XclExpNumFmtBuffer::SaveXml( XclExpXmlStream& rStrm )
     rStyleSheet->startElement( XML_numFmts,
             XML_count,  OString::valueOf( (sal_Int32) maFormatMap.size() ).getStr(),
             FSEND );
-    for( XclExpNumFmtVec::const_iterator aIt = maFormatMap.begin(), aEnd = maFormatMap.end(); aIt != aEnd; ++aIt )
+    for( XclExpNumFmtVec::iterator aIt = maFormatMap.begin(), aEnd = maFormatMap.end(); aIt != aEnd; ++aIt )
     {
-        rStyleSheet->singleElement( XML_numFmt,
-                XML_numFmtId,   OString::valueOf( sal_Int32(aIt->mnXclNumFmt) ).getStr(),
-                XML_formatCode, XclXmlUtils::ToOString( GetFormatCode( *aIt ) ).getStr(),
-                FSEND );
+        aIt->SaveXml( rStrm, GetFormatCode( *aIt ) );
     }
     rStyleSheet->endElement( XML_numFmts );
 }
@@ -2816,11 +2825,142 @@ void XclExpXFBuffer::AddBorderAndFill( const XclExpXF& rXF )
     }
 }
 
+
+XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
+    : XclExpRoot( rRoot )
+{
+    ScConditionalFormatList* pList = rRoot.GetDoc().GetCondFormList();
+    if (pList)
+    {
+        sal_Int32 nFormatCount = pList->Count();
+        sal_Int32 nIndex = 0;
+        for(sal_Int32 nItem = 0; nItem < nFormatCount; ++nItem)
+        {
+            ScConditionalFormat* pFormat = (*pList)[nItem];
+            sal_Int32 nEntryCount = pFormat->Count();
+            for (sal_Int32 nFormatEntry = 0; nFormatEntry < nEntryCount; ++nFormatEntry)
+            {
+                const ScCondFormatEntry* pEntry = pFormat->GetEntry(nFormatEntry);
+                if (!pEntry)
+                    continue;
+
+                rtl::OUString aStyleName = pEntry->GetStyle();
+                if (maStyleNameToDxfId.find(aStyleName) == maStyleNameToDxfId.end())
+                {
+                    maStyleNameToDxfId.insert(std::pair<rtl::OUString, sal_Int32>(aStyleName, nIndex));
+
+                    SfxItemSet& rSet = rRoot.GetDoc().GetStyleSheetPool()->Find(aStyleName)->GetItemSet();
+
+                    XclExpCellBorder* pBorder = new XclExpCellBorder;
+                    if (!pBorder->FillFromItemSet( rSet, GetPalette(), GetBiff()) )
+                    {
+                        delete pBorder;
+                        pBorder = NULL;
+                    }
+
+                    XclExpCellAlign* pAlign = new XclExpCellAlign;
+                    if (!pAlign->FillFromItemSet( rSet, false, GetBiff()))
+                    {
+                        delete pAlign;
+                        pAlign = NULL;
+                    }
+
+                    XclExpCellProt* pCellProt = new XclExpCellProt;
+                    if (!pCellProt->FillFromItemSet( rSet ))
+                    {
+                        delete pCellProt;
+                        pCellProt = NULL;
+                    }
+
+                    XclExpCellArea* pCellArea = new XclExpCellArea;
+                    if(!pCellArea->FillFromItemSet( rSet, GetPalette(), GetBiff() ))
+                    {
+                        delete pCellArea;
+                        pCellArea = NULL;
+                    }
+                    //XclExpFont* pFont = new XclExpFont( GetRoot(), XclFontData( rFont ), EXC_COLOR_CELLTEXT );
+
+                    maDxf.push_back(new XclExpDxf( rRoot, pAlign, pBorder, NULL, NULL, pCellProt, pCellArea ));
+                    ++nIndex;
+                }
+
+            }
+        }
+    }
+}
+
+void XclExpDxfs::SaveXml( XclExpXmlStream& rStrm )
+{
+    sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream();
+    rStyleSheet->startElement( XML_dxfs, FSEND,
+            XML_count, rtl::OString::valueOf( static_cast<sal_Int32>(maDxf.size())).getStr() );
+
+    for ( DxfContainer::iterator itr = maDxf.begin(); itr != maDxf.end(); ++itr )
+    {
+        itr->SaveXml( rStrm );
+    }
+
+    rStyleSheet->endElement( XML_dxfs );
+}
+
+// ============================================================================
+
+XclExpDxf::XclExpDxf( const XclExpRoot& rRoot, XclExpCellAlign* pAlign, XclExpCellBorder* pBorder,
+            XclExpFont* pFont, XclExpNumFmt* pNumberFmt, XclExpCellProt* pProt, XclExpCellArea* pCellArea)
+    : XclExpRoot( rRoot ),
+    mpAlign(pAlign),
+    mpBorder(pBorder),
+    mpFont(pFont),
+    mpNumberFmt(pNumberFmt),
+    mpProt(pProt),
+    mpCellArea(pCellArea)
+{
+
+}
+
+XclExpDxf::~XclExpDxf()
+{
+    delete mpAlign;
+    delete mpBorder;
+    delete mpFont;
+    delete mpNumberFmt;
+    delete mpProt;
+    delete mpCellArea;
+}
+
+void XclExpDxf::SaveXml( XclExpXmlStream& rStrm )
+{
+    sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream();
+    rStyleSheet->startElement( XML_dxf, FSEND );
+
+    if (mpAlign)
+        mpAlign->SaveXml(rStrm);
+    if (mpBorder)
+        mpBorder->SaveXml(rStrm);
+    if (mpFont)
+        mpFont->SaveXml(rStrm);
+    if (mpNumberFmt)
+        mpNumberFmt->SaveXml(rStrm, String());
+    if (mpProt)
+        mpProt->SaveXml(rStrm);
+    if (mpCellArea)
+        mpCellArea->SaveXml(rStrm);
+    rStyleSheet->endElement( XML_dxf );
+}
+
 // ============================================================================
 
 XclExpXmlStyleSheet::XclExpXmlStyleSheet( const XclExpRoot& rRoot )
-    : XclExpRoot( rRoot )
+    : XclExpRoot( rRoot ),
+    mbDxfs(false)
 {
+    if ( ScConditionalFormatList* pList = rRoot.GetDoc().GetCondFormList() )
+    {
+        if ( pList->Count() )
+        {
+            mbDxfs = true;
+        }
+    }
 }
 
 void XclExpXmlStyleSheet::SaveXml( XclExpXmlStream& rStrm )
@@ -2841,6 +2981,10 @@ void XclExpXmlStyleSheet::SaveXml( XclExpXmlStream& rStrm )
     CreateRecord( EXC_ID_FONTLIST )->SaveXml( rStrm );
     CreateRecord( EXC_ID_XFLIST )->SaveXml( rStrm );
     CreateRecord( EXC_ID_PALETTE )->SaveXml( rStrm );
+    if(mbDxfs)
+    {
+        CreateRecord( EXC_ID_DXFS )->SaveXml( rStrm );
+    }
 
     aStyleSheet->endElement( XML_styleSheet );
 
diff --git a/sc/source/filter/inc/xecontent.hxx b/sc/source/filter/inc/xecontent.hxx
index 10b245f..49f375c 100644
--- a/sc/source/filter/inc/xecontent.hxx
+++ b/sc/source/filter/inc/xecontent.hxx
@@ -179,9 +179,11 @@ class XclExpCFImpl;
 class XclExpCF : public XclExpRecord, protected XclExpRoot
 {
 public:
-    explicit            XclExpCF( const XclExpRoot& rRoot, const ScCondFormatEntry& rFormatEntry );
+    explicit            XclExpCF( const XclExpRoot& rRoot, const ScCondFormatEntry& rFormatEntry, sal_Int32 nPriority );
     virtual             ~XclExpCF();
 
+    virtual void        SaveXml( XclExpXmlStream& rStrm );
+
 private:
     /** Writes the body of the CF record. */
     virtual void        WriteBody( XclExpStream& rStrm );
diff --git a/sc/source/filter/inc/xeroot.hxx b/sc/source/filter/inc/xeroot.hxx
index f27546e..fb70692 100644
--- a/sc/source/filter/inc/xeroot.hxx
+++ b/sc/source/filter/inc/xeroot.hxx
@@ -59,6 +59,7 @@ class XclExpNameManager;
 class XclExpObjectManager;
 class XclExpFilterManager;
 class XclExpPivotTableManager;
+class XclExpDxfs;
 
 /** Stores global buffers and data needed for Excel export filter. */
 struct XclExpRootData : public XclRootData
@@ -78,6 +79,7 @@ struct XclExpRootData : public XclRootData
     typedef boost::shared_ptr< XclExpObjectManager >       XclExpObjectMgrRef;
     typedef boost::shared_ptr< XclExpFilterManager >       XclExpFilterMgrRef;
     typedef boost::shared_ptr< XclExpPivotTableManager >   XclExpPTableMgrRef;
+    typedef boost::shared_ptr< XclExpDxfs >                XclExpDxfsRef;
 
     XclExpTabInfoRef    mxTabInfo;          /// Calc->Excel sheet index conversion.
     XclExpAddrConvRef   mxAddrConv;         /// The address converter.
@@ -95,6 +97,7 @@ struct XclExpRootData : public XclRootData
     XclExpObjectMgrRef  mxObjMgr;           /// All drawing objects.
     XclExpFilterMgrRef  mxFilterMgr;        /// Manager for filtered areas in all sheets.
     XclExpPTableMgrRef  mxPTableMgr;        /// All pivot tables and pivot caches.
+    XclExpDxfsRef       mxDxfs;             /// All delta formatting entries
 
     bool                mbRelUrl;           /// true = Store URLs relative.
 
@@ -147,6 +150,8 @@ public:
     XclExpFilterManager& GetFilterManager() const;
     /** Returns the pivot table manager. */
     XclExpPivotTableManager& GetPivotTableManager() const;
+    /** Returns the differential formatting list */
+    XclExpDxfs&          GetDxfs() const;
 
     /** Is called when export filter starts to create the Excel document (all BIFF versions). */
     void                InitializeConvert();
diff --git a/sc/source/filter/inc/xestyle.hxx b/sc/source/filter/inc/xestyle.hxx
index c1263b3..18975c4 100644
--- a/sc/source/filter/inc/xestyle.hxx
+++ b/sc/source/filter/inc/xestyle.hxx
@@ -38,7 +38,9 @@
 #include "xerecord.hxx"
 #include "xlstyle.hxx"
 #include "xeroot.hxx"
+#include "conditio.hxx"
 #include <boost/shared_ptr.hpp>
+#include <boost/ptr_container/ptr_vector.hpp>
 
 /* ============================================================================
 - Buffers for style records (PALETTE, FONT, FORMAT, XF, STYLE).
@@ -47,6 +49,7 @@
 const sal_uInt16 EXC_ID_FONTLIST    = 0x8031;   /// For internal use only.
 const sal_uInt16 EXC_ID_FORMATLIST  = 0x801E;   /// For internal use only.
 const sal_uInt16 EXC_ID_XFLIST      = 0x8043;   /// For internal use only.
+const sal_uInt16 EXC_ID_DXFS        = 0x9999;   /// For internal use only. TODO:moggi: find a better/correct value
 
 // PALETTE record - color information =========================================
 
@@ -276,6 +279,8 @@ struct XclExpNumFmt
 
     inline explicit     XclExpNumFmt( sal_uLong nScNumFmt, sal_uInt16 nXclNumFmt ) :
                             mnScNumFmt( nScNumFmt ), mnXclNumFmt( nXclNumFmt ) {}
+
+    void SaveXml( XclExpXmlStream& rStrm, const String& rFormatCode );
 };
 
 // ----------------------------------------------------------------------------
@@ -718,6 +723,42 @@ private:
 
 };
 
+struct XclDxfStyle
+{
+};
+
+class XclExpDxf : public XclExpRecordBase, protected XclExpRoot
+{
+public:
+    XclExpDxf( const XclExpRoot& rRoot, XclExpCellAlign* pAlign, XclExpCellBorder* pBorder,
+            XclExpFont* pFont, XclExpNumFmt* pNumberFmt, XclExpCellProt* pProt, XclExpCellArea* pCellArea);
+    virtual ~XclExpDxf();
+
+    virtual void SaveXml( XclExpXmlStream& rStrm );
+
+private:
+    XclExpCellAlign* mpAlign;
+    XclExpCellBorder* mpBorder;
+    XclExpFont* mpFont;
+    XclExpNumFmt* mpNumberFmt;
+    XclExpCellProt* mpProt;
+    XclExpCellArea* mpCellArea;
+};
+
+class XclExpDxfs : public XclExpRecordBase, protected XclExpRoot
+{
+public:
+    XclExpDxfs( const XclExpRoot& rRoot );
+
+    sal_Int32 GetDxfId(const rtl::OUString& rName);
+
+    virtual void SaveXml( XclExpXmlStream& rStrm);
+private:
+    typedef boost::ptr_vector<XclExpDxf> DxfContainer;
+    std::map<rtl::OUString, sal_Int32> maStyleNameToDxfId;
+    DxfContainer maDxf;
+};
+
 // ============================================================================
 
 class XclExpXmlStyleSheet : public XclExpRecordBase, protected XclExpRoot
@@ -727,6 +768,7 @@ public:
 
     virtual void        SaveXml( XclExpXmlStream& rStrm );
 private:
+    bool mbDxfs;
 };
 
 // ============================================================================


More information about the Libreoffice-commits mailing list