[Libreoffice-commits] .: configure.in download.in patches/dev300

Fridrich Strba fridrich at kemper.freedesktop.org
Tue Nov 16 04:42:42 PST 2010


 configure.in                              |   20 
 download.in                               |   18 
 patches/dev300/apply                      |   10 
 patches/dev300/config_office-testing.diff |   29 
 patches/dev300/libwpd-testing.diff        |   35 
 patches/dev300/libwpg-testing.diff        |   35 
 patches/dev300/libwps-testing.diff        |   25 
 patches/dev300/writerperfect-testing.diff | 4353 ------------------------------
 8 files changed, 1 insertion(+), 4524 deletions(-)

New commits:
commit 9e0f4d66e7b219baa142fe86f2167e37d8f8e6f7
Author: Fridrich Å trba <fridrich.strba at bluewin.ch>
Date:   Tue Nov 16 13:38:33 2010 +0100

    Use the new stable libwp* releases as default

diff --git a/configure.in b/configure.in
index ae5679b..c2a2a01 100755
--- a/configure.in
+++ b/configure.in
@@ -1389,14 +1389,6 @@ AC_SUBST(ENABLE_ACCESS)
 AC_SUBST(MDBTOOLS_SRC)
 AC_SUBST(SYSTEM_MDBTOOLS)
 
-UNSTABLE_WP=NO
-if test -n "$with_unstable_wp" && test "$with_unstable_wp" = "yes"; then
-    UNSTABLE_WP=YES
-else
-    UNSTABLE_WP=NO
-fi
-AC_SUBST(UNSTABLE_WP)
-
 if test -n "$with_system_mdds" && test "$with_system_mdds" = "yes"; then
     SYSTEM_MDDS=YES
 else
@@ -1408,34 +1400,22 @@ if test -n "$with_system_libwpd" && test "$with_system_libwpd" = "yes"; then
     SYSTEM_LIBWPD=YES
 else
     SYSTEM_LIBWPD=NO
-    if test "$UNSTABLE_WP" = "YES"; then
-        LIBWPD_TARBALL=86e390f015e505dd71a66f0123c62f09-libwpd-0.9.0.tar.bz2
-    fi
 fi
 AC_SUBST(SYSTEM_LIBWPD)
-AC_SUBST(LIBWPD_TARBALL)
 
 if test -n "$with_system_libwps" && test "$with_system_libwps" = "yes"; then
     SYSTEM_LIBWPS=YES
 else
     SYSTEM_LIBWPS=NO
-    if test "$UNSTABLE_WP" = "YES"; then
-        LIBWPS_TARBALL=9e436bff44c60dc8b97cba0c7fc11a5c-libwps-0.2.0.tar.bz2
-    fi
 fi
 AC_SUBST(SYSTEM_LIBWPS)
-AC_SUBST(LIBWPS_TARBALL)
 
 if test "$with_system_libwpg" = "yes"; then
     SYSTEM_LIBWPG=YES
 else
     SYSTEM_LIBWPG=NO
-    if test "$UNSTABLE_WP" = "YES"; then
-        LIBWPG_TARBALL=5ba6a61a2f66dfd5fee8cdd4cd262a37-libwpg-0.2.0.tar.bz2
-    fi
 fi
 AC_SUBST(SYSTEM_LIBWPG)
-AC_SUBST(LIBWPG_TARBALL)
 
 if test "$with_system_zlib" = "yes"; then
     SYSTEM_ZLIB=YES
diff --git a/download.in b/download.in
index f2929c1..8e78c10 100755
--- a/download.in
+++ b/download.in
@@ -175,12 +175,6 @@ sub download_tests_dependencies() {
     'WNTMSCI.*\.zip'                     => 'http://tools.openoffice.org/moz_prebuild/OOo3.2',
 # Windows .ico icons
     'ooo-windows-icons-0.2.tar.bz2'      => '@MIRROR@/OOO300',
-# Updated libwpd
-    '*libwpd-*'                          => '@MIRROR@/src',
-# MS Works importer bits
-    '*libwps-*'                          => '@MIRROR@/src',
-# WPG importer bits
-    '*libwpg-*'                          => '@MIRROR@/src',
 # cairo sources
     'cairo-.*'                           => 'http://cairographics.org/releases/',
 # OxygenOffice extras
@@ -550,18 +544,6 @@ if ('@PIECE@' eq 'bootstrap') {
    source_file( 'setup_native_packinfo-3.2.99.3.tar.bz2' );
 }
 
-if ('@SYSTEM_LIBWPD@' eq 'NO') {
-   source_file( '@LIBWPD_TARBALL@' );
-}
-
-if ('@SYSTEM_LIBWPS@' eq 'NO') {
-   source_file( '@LIBWPS_TARBALL@' );
-}
-
-if ('@SYSTEM_LIBWPG@' eq 'NO') {
-   source_file( '@LIBWPG_TARBALL@' );
-}
-
 if ('@OOOP_FONTS_PACK@' ne '') {
     source_file( '@OOOP_FONTS_PACK@' );
 }
diff --git a/patches/dev300/apply b/patches/dev300/apply
index 75173ba..105a76a 100755
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -30,7 +30,7 @@ Win32Common : Common, Defaults, Win32Only, CliMonoCommon, CliComponent, NotDebia
 Experimental: VBAUntested, ArkOnlyExperimental, \
 	      UnUsedButNotYetRemovedFromGit, WebDAVUpstream, \
 	      PostgreSQL, SELinux, \
-	      UnitBootstrap, RadioButtons, UnstableLibwpd, WWInProgress, \
+	      UnitBootstrap, RadioButtons, WWInProgress, \
 	      KDE4Experimental, MinGW, CalcExperimental, \
 	      OOXMLExportExperimental, CrossWin32Patches, AutoLayout, \
 	      WriterNavigation \
@@ -46,7 +46,6 @@ NLPSolver : NLPSolverBits
 Piece : PieceBits
 #Localize
 Localize : LocalizeFixes
-UnstableWP : UnstableLibwpd
 
 # Novell
 NovellBase : LinuxCommon, NovellOnly, NovellOnlyUnix, \
@@ -2149,13 +2148,6 @@ iso-ooxml-sw.diff, cbosdo
 # which follows:
 xlsx-shared-oox-chart-export-part1-pptx-part.diff
 
-[ UnstableLibwpd ]
-config_office-testing.diff
-libwpd-testing.diff
-libwpg-testing.diff
-libwps-testing.diff
-writerperfect-testing.diff
-
 [ PieceBits ]
 SectionOwner => michael
 # Experimental piece-wise source code split for build
diff --git a/patches/dev300/config_office-testing.diff b/patches/dev300/config_office-testing.diff
deleted file mode 100644
index caea524..0000000
--- a/patches/dev300/config_office-testing.diff
+++ /dev/null
@@ -1,29 +0,0 @@
---- configure.in	2008-06-23 14:46:06.000000000 +0200
-+++ configure.in	2008-06-23 14:47:00.000000000 +0200
-@@ -3534,7 +3534,7 @@
-         test "$with_system_libwpd" != "no"; then
-     AC_MSG_RESULT([external])
-     SYSTEM_LIBWPD=YES
--    PKG_CHECK_MODULES( LIBWPD, libwpd-0.8 )
-+    PKG_CHECK_MODULES( LIBWPD, libwpd-0.9 libwpd-stream-0.9 )
- else
-     AC_MSG_RESULT([internal])
-     SYSTEM_LIBWPD=NO
-@@ -3552,7 +3552,7 @@
-         test "$with_system_libwps" != "no"; then
-     AC_MSG_RESULT([external])
-     SYSTEM_LIBWPS=YES
--    PKG_CHECK_MODULES( LIBWPS, libwps-0.1 )
-+    PKG_CHECK_MODULES( LIBWPS, libwps-0.2 )
- else
-     AC_MSG_RESULT([internal])
-     SYSTEM_LIBWPS=NO
-@@ -3570,7 +3570,7 @@
-         test "$with_system_libwpg" != "no"; then
-     AC_MSG_RESULT([external])
-     SYSTEM_LIBWPG=YES
--    PKG_CHECK_MODULES( LIBWPG, libwpg-0.1 )
-+    PKG_CHECK_MODULES( LIBWPG, libwpg-0.2 )
- else
-     AC_MSG_RESULT([internal])
-     SYSTEM_LIBWPG=NO
diff --git a/patches/dev300/libwpd-testing.diff b/patches/dev300/libwpd-testing.diff
deleted file mode 100644
index bfb5a18..0000000
--- a/patches/dev300/libwpd-testing.diff
+++ /dev/null
@@ -1,35 +0,0 @@
---- libwpd/makefile.mk	2010-10-10 13:27:50.000000000 +0200
-+++ libwpd/makefile.mk	2010-11-06 16:04:03.000000000 +0100
-@@ -41,8 +41,8 @@
-     @echo "Using system libwpd..."
- .ENDIF
- 
--TARFILE_NAME=libwpd-0.8.14
--TARFILE_MD5=64d66018897d759358f454010b6e75d2
-+TARFILE_NAME=libwpd-0.9.0
-+TARFILE_MD5=86e390f015e505dd71a66f0123c62f09
- BUILD_ACTION=dmake $(MFLAGS) $(CALLMACROS)
- BUILD_DIR=src$/lib
- 
---- libwpd/prj/d.lst	2010-10-10 13:27:50.000000000 +0200
-+++ libwpd/prj/d.lst	2010-11-06 16:25:53.000000000 +0100
-@@ -1,12 +1,15 @@
- mkdir: %_DEST%\inc%_EXT%\libwpd
-+mkdir: %_DEST%\inc%_EXT%\libwpd-stream
- ..\%__SRC%\misc\build\libwpd*\src\lib\libwpd.h %_DEST%\inc%_EXT%\libwpd\
--..\%__SRC%\misc\build\libwpd*\src\lib\libwpd_types.h %_DEST%\inc%_EXT%\libwpd\
--..\%__SRC%\misc\build\libwpd*\src\lib\WPXStream.h %_DEST%\inc%_EXT%\libwpd\
-+..\%__SRC%\misc\build\libwpd*\src\lib\WPDocument.h %_DEST%\inc%_EXT%\libwpd\
-+..\%__SRC%\misc\build\libwpd*\src\lib\WPXBinaryData.h %_DEST%\inc%_EXT%\libwpd\
-+..\%__SRC%\misc\build\libwpd*\src\lib\WPXDocumentInterface.h %_DEST%\inc%_EXT%\libwpd\
- ..\%__SRC%\misc\build\libwpd*\src\lib\WPXProperty.h %_DEST%\inc%_EXT%\libwpd\
- ..\%__SRC%\misc\build\libwpd*\src\lib\WPXPropertyList.h %_DEST%\inc%_EXT%\libwpd\
- ..\%__SRC%\misc\build\libwpd*\src\lib\WPXString.h %_DEST%\inc%_EXT%\libwpd\
- ..\%__SRC%\misc\build\libwpd*\src\lib\WPXPropertyListVector.h %_DEST%\inc%_EXT%\libwpd\
--..\%__SRC%\misc\build\libwpd*\src\lib\WPDocument.h %_DEST%\inc%_EXT%\libwpd\
--..\%__SRC%\misc\build\libwpd*\src\lib\WPXHLListenerImpl.h %_DEST%\inc%_EXT%\libwpd\
-+..\%__SRC%\misc\build\libwpd*\src\lib\libwpd-stream.h %_DEST%\inc%_EXT%\libwpd-stream\
-+..\%__SRC%\misc\build\libwpd*\src\lib\WPXStream.h %_DEST%\inc%_EXT%\libwpd-stream\
-+..\%__SRC%\misc\build\libwpd*\src\lib\WPXStreamImplementation.h %_DEST%\inc%_EXT%\libwpd-stream\
- ..\%__SRC%\lib\*.a %_DEST%\lib%_EXT%\*.a
- ..\%__SRC%\slb\*.lib %_DEST%\lib%_EXT%\*.lib
diff --git a/patches/dev300/libwpg-testing.diff b/patches/dev300/libwpg-testing.diff
deleted file mode 100644
index 84c37cc..0000000
--- a/patches/dev300/libwpg-testing.diff
+++ /dev/null
@@ -1,35 +0,0 @@
---- libwpg/makefile.mk	2010-10-10 13:27:50.000000000 +0200
-+++ libwpg/makefile.mk	2010-11-06 16:22:22.000000000 +0100
-@@ -46,10 +46,11 @@
- INCPRE+=$(LIBWPD_CFLAGS)
- .ELSE
- INCPRE+=$(SOLARVER)$/$(UPD)$/$(INPATH)$/inc$/libwpd
-+INCPRE+=$(SOLARVER)$/$(UPD)$/$(INPATH)$/inc$/libwpd-stream
- .ENDIF
- 
--TARFILE_NAME=libwpg-0.1.3
--TARFILE_MD5=db556b750bf3eac8481a4cc5e29e5af1
-+TARFILE_NAME=libwpg-0.2.0
-+TARFILE_MD5=5ba6a61a2f66dfd5fee8cdd4cd262a37
- BUILD_ACTION=dmake $(MFLAGS) $(CALLMACROS)
- BUILD_DIR=src/lib
- 
---- libwpg/prj/d.lst	2010-10-10 13:27:50.000000000 +0200
-+++ libwpg/prj/d.lst	2010-11-06 16:14:35.000000000 +0100
-@@ -1,16 +1,6 @@
- mkdir: %_DEST%\inc%_EXT%\libwpg
- ..\%__SRC%\misc\build\libwpg*\src\lib\libwpg.h %_DEST%\inc%_EXT%\libwpg\
--..\%__SRC%\misc\build\libwpg*\src\lib\WPGBitmap.h %_DEST%\inc%_EXT%\libwpg\
--..\%__SRC%\misc\build\libwpg*\src\lib\WPGBinaryData.h %_DEST%\inc%_EXT%\libwpg\
--..\%__SRC%\misc\build\libwpg*\src\lib\WPGBrush.h %_DEST%\inc%_EXT%\libwpg\
--..\%__SRC%\misc\build\libwpg*\src\lib\WPGColor.h %_DEST%\inc%_EXT%\libwpg\
--..\%__SRC%\misc\build\libwpg*\src\lib\WPGGradient.h %_DEST%\inc%_EXT%\libwpg\
- ..\%__SRC%\misc\build\libwpg*\src\lib\WPGPaintInterface.h %_DEST%\inc%_EXT%\libwpg\
--..\%__SRC%\misc\build\libwpg*\src\lib\WPGPath.h %_DEST%\inc%_EXT%\libwpg\
--..\%__SRC%\misc\build\libwpg*\src\lib\WPGPen.h %_DEST%\inc%_EXT%\libwpg\
--..\%__SRC%\misc\build\libwpg*\src\lib\WPGPoint.h %_DEST%\inc%_EXT%\libwpg\
- ..\%__SRC%\misc\build\libwpg*\src\lib\WPGraphics.h %_DEST%\inc%_EXT%\libwpg\
--..\%__SRC%\misc\build\libwpg*\src\lib\WPGRect.h %_DEST%\inc%_EXT%\libwpg\
--..\%__SRC%\misc\build\libwpg*\src\lib\WPGString.h %_DEST%\inc%_EXT%\libwpg\
- ..\%__SRC%\lib\*.a %_DEST%\lib%_EXT%\*.a
- ..\%__SRC%\slb\*.lib %_DEST%\lib%_EXT%\*.lib
diff --git a/patches/dev300/libwps-testing.diff b/patches/dev300/libwps-testing.diff
deleted file mode 100644
index 3dc4f5a..0000000
--- a/patches/dev300/libwps-testing.diff
+++ /dev/null
@@ -1,25 +0,0 @@
---- libwps/makefile.mk	2010-10-10 13:27:50.000000000 +0200
-+++ libwps/makefile.mk	2010-11-06 12:03:50.000000000 +0100
-@@ -46,10 +46,11 @@
- INCPRE+=$(LIBWPD_CFLAGS)
- .ELSE
- INCPRE+=$(SOLARVER)$/$(UPD)$/$(INPATH)$/inc$/libwpd
-+INCPRE+=$(SOLARVER)$/$(UPD)$/$(INPATH)$/inc$/libwpd-stream
- .ENDIF
- 
--TARFILE_NAME=libwps-0.1.2
--TARFILE_MD5=799fc3b835a79adce8c88a3fee0150c1
-+TARFILE_NAME=libwps-0.2.0
-+TARFILE_MD5=9e436bff44c60dc8b97cba0c7fc11a5c
- BUILD_ACTION=dmake $(MFLAGS) $(CALLMACROS)
- BUILD_DIR=src/lib
- 
---- libwps/prj/d.lst	2010-10-10 13:27:50.000000000 +0200
-+++ libwps/prj/d.lst	2010-11-06 11:55:59.000000000 +0100
-@@ -1,6 +1,5 @@
- mkdir: %_DEST%\inc%_EXT%\libwps
- ..\%__SRC%\misc\build\libwps*\src\lib\libwps.h %_DEST%\inc%_EXT%\libwps\
--..\%__SRC%\misc\build\libwps*\src\lib\WPSStream.h %_DEST%\inc%_EXT%\libwps\
- ..\%__SRC%\misc\build\libwps*\src\lib\WPSDocument.h %_DEST%\inc%_EXT%\libwps\
- ..\%__SRC%\lib\*.a %_DEST%\lib%_EXT%\*.a
- ..\%__SRC%\slb\*.lib %_DEST%\lib%_EXT%\*.lib
diff --git a/patches/dev300/writerperfect-testing.diff b/patches/dev300/writerperfect-testing.diff
deleted file mode 100644
index 0710a30..0000000
--- a/patches/dev300/writerperfect-testing.diff
+++ /dev/null
@@ -1,4353 +0,0 @@
---- writerperfect/prj/build.lst	2010-10-10 13:15:28.000000000 +0200
-+++ writerperfect/prj/build.lst	2010-11-06 13:52:55.000000000 +0100
-@@ -1,4 +1,4 @@
--wp      writerperfect : LIBWPG:libwpg LIBWPS:libwps LIBWPD:libwpd sot comphelper xmloff svtools NULL
-+wp      writerperfect : LIBWPG:libwpg LIBWPS:libwps LIBWPD:libwpd sot comphelper xmloff svtools sfx2 NULL
- wp	writerperfect			usr1	-	all	wp_mkout NULL
- wp	writerperfect\source\stream	nmake	-	all	wp_stream NULL
- wp	writerperfect\source\filter	nmake	-	all	wp_filter NULL
---- writerperfect/source/filter/DocumentCollector.cxx	2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/filter/DocumentCollector.cxx	2010-11-06 23:13:35.000000000 +0100
-@@ -40,6 +40,8 @@
- 
- #include "DocumentCollector.hxx"
- #include "DocumentElement.hxx"
-+#include "DocumentHandler.hxx"
-+#include "InternalHandler.hxx"
- #include "TextRunStyle.hxx"
- #include "FontStyle.hxx"
- #include "ListStyle.hxx"
-@@ -48,34 +50,49 @@
- #include "TableStyle.hxx"
- #include "FilterInternal.hxx"
- #include "WriterProperties.hxx"
-+#include "OdgExporter.hxx"
- 
- _WriterDocumentState::_WriterDocumentState() :
-     mbFirstElement(true),
-+    mbFirstParagraphInPageSpan(true),
-     mbInFakeSection(false),
-     mbListElementOpenedAtCurrentLevel(false),
-     mbTableCellOpened(false),
-     mbHeaderRow(false),
--    mbInNote(false)
-+    mbInNote(false),
-+    mbInTextBox(false),
-+    mbInFrame(false)
- {
- }
- 
--DocumentCollector::DocumentCollector(WPSInputStream *pInput, DocumentHandler *pHandler) :
-+_WriterListState::_WriterListState() :
-+    mpCurrentListStyle(NULL),
-+    miCurrentListLevel(0),
-+    miLastListLevel(0),
-+    miLastListNumber(0),
-+    mbListContinueNumbering(false),
-+    mbListElementParagraphOpened(false),
-+    mbListElementOpened()
-+{
-+}
-+
-+DocumentCollector::DocumentCollector(WPXInputStream *pInput, DocumentHandlerInterface *pHandler) :
-         mpInput(pInput),
-         mpHandler(pHandler),
-     mbUsed(false),
-+    mWriterDocumentStates(),
-+    mWriterListStates(),
-     mfSectionSpaceAfter(0.0f),
-     miNumListStyles(0),
-     mpCurrentContentElements(&mBodyElements),
-     mpCurrentPageSpan(NULL),
-     miNumPageStyles(0),
--    mpCurrentListStyle(NULL),
--    miCurrentListLevel(0),
--    miLastListLevel(0),
--    miLastListNumber(0),
--    mbListContinueNumbering(false),
--    mbListElementOpened(false),
--    mbListElementParagraphOpened(false)
-+    miObjectNumber(0),
-+    mbIsFlatXML(true),
-+    mpPassword(NULL)
- {
-+    mWriterDocumentStates.push(WriterDocumentState());
-+    mWriterListStates.push(WriterListState());
- }
- 
- DocumentCollector::~DocumentCollector()
-@@ -103,7 +120,7 @@
- 
-     WRITER_DEBUG_MSG(("Destroying the body elements\n"));
-     for (std::vector<DocumentElement *>::iterator iterBody = mBodyElements.begin(); iterBody != mBodyElements.end(); iterBody++) {
--        delete((*iterBody));
-+        delete (*iterBody);
-         (*iterBody) = NULL;
-     }
- 
-@@ -116,14 +133,14 @@
- 
-     WRITER_DEBUG_MSG(("Destroying the rest of the styles elements\n"));
-     for (std::map<WPXString, ParagraphStyle *, ltstr>::iterator iterTextStyle = mTextStyleHash.begin(); iterTextStyle != mTextStyleHash.end(); iterTextStyle++) {
--        delete iterTextStyle->second;
-+        delete (iterTextStyle->second);
-     }
-     for (std::map<WPXString, SpanStyle *, ltstr>::iterator iterSpanStyle = mSpanStyleHash.begin(); iterSpanStyle != mSpanStyleHash.end(); iterSpanStyle++) {
--        delete iterSpanStyle->second;
-+        delete(iterSpanStyle->second);
-     }
- 
-     for (std::map<WPXString, FontStyle *, ltstr>::iterator iterFont = mFontHash.begin(); iterFont != mFontHash.end(); iterFont++) {
--        delete iterFont->second;
-+        delete(iterFont->second);
-     }
- 
-     for (std::vector<ListStyle *>::iterator iterListStyles = mListStyles.begin(); iterListStyles != mListStyles.end(); iterListStyles++) {
-@@ -133,80 +150,101 @@
-         delete (*iterSectionStyles);
-     }
-     for (std::vector<TableStyle *>::iterator iterTableStyles = mTableStyles.begin(); iterTableStyles != mTableStyles.end(); iterTableStyles++) {
--        delete (*iterTableStyles);
-+        delete((*iterTableStyles));
-     }
- 
-     for (std::vector<PageSpan *>::iterator iterPageSpans = mPageSpans.begin(); iterPageSpans != mPageSpans.end(); iterPageSpans++) {
-         delete (*iterPageSpans);
-     }
-+    for (std::vector<DocumentElement *>::iterator iterFrameStyles = mFrameStyles.begin(); iterFrameStyles != mFrameStyles.end(); iterFrameStyles++) {
-+        delete(*iterFrameStyles);
-+    }
-+    for (std::vector<DocumentElement *>::iterator iterFrameAutomaticStyles = mFrameAutomaticStyles.begin();
-+        iterFrameAutomaticStyles != mFrameAutomaticStyles.end(); iterFrameAutomaticStyles++) {
-+        delete(*iterFrameAutomaticStyles);
-+    }
-+    for (std::vector<DocumentElement *>::iterator iterMetaData = mMetaData.begin(); iterMetaData != mMetaData.end(); iterMetaData++) {
-+        delete(*iterMetaData);
-+    }
- 
-      return true;
- }
- 
--void DocumentCollector::_writeDefaultStyles(DocumentHandler *pHandler)
-+void DocumentCollector::_writeDefaultStyles(DocumentHandlerInterface *pHandler)
- {
--    TagOpenElement stylesOpenElement("office:styles");
--    stylesOpenElement.write(pHandler);
-+    TagOpenElement("office:styles").write(pHandler);
- 
-     TagOpenElement defaultParagraphStyleOpenElement("style:default-style");
-     defaultParagraphStyleOpenElement.addAttribute("style:family", "paragraph");
-     defaultParagraphStyleOpenElement.write(pHandler);
- 
--    TagOpenElement defaultParagraphStylePropertiesOpenElement("style:properties");
--    defaultParagraphStylePropertiesOpenElement.addAttribute("style:family", "paragraph");
--    defaultParagraphStylePropertiesOpenElement.addAttribute("style:tab-stop-distance", "0.5inch");
-+    TagOpenElement defaultParagraphStylePropertiesOpenElement("style:paragraph-properties");
-+    defaultParagraphStylePropertiesOpenElement.addAttribute("style:tab-stop-distance", "0.5in");
-     defaultParagraphStylePropertiesOpenElement.write(pHandler);
--    TagCloseElement defaultParagraphStylePropertiesCloseElement("style:properties");
-+    TagCloseElement defaultParagraphStylePropertiesCloseElement("style:paragraph-properties");
-     defaultParagraphStylePropertiesCloseElement.write(pHandler);
- 
--    TagCloseElement defaultParagraphStyleCloseElement("style:default-style");
--    defaultParagraphStyleCloseElement.write(pHandler);
-+    pHandler->endElement("style:default-style");
-+
-+    TagOpenElement defaultTableRowStyleOpenElement("style:default-style");
-+    defaultTableRowStyleOpenElement.addAttribute("style:family", "table-row");
-+    defaultTableRowStyleOpenElement.write(pHandler);
-+
-+    TagOpenElement defaultTableRowPropertiesOpenElement("style:table-row-properties");
-+    defaultTableRowPropertiesOpenElement.addAttribute("fo:keep-together", "auto");
-+    defaultTableRowPropertiesOpenElement.write(pHandler);
-+
-+    pHandler->endElement("style:table-row-properties");
-+    pHandler->endElement("style:default-style");
- 
-     TagOpenElement standardStyleOpenElement("style:style");
-         standardStyleOpenElement.addAttribute("style:name", "Standard");
-         standardStyleOpenElement.addAttribute("style:family", "paragraph");
-         standardStyleOpenElement.addAttribute("style:class", "text");
-         standardStyleOpenElement.write(pHandler);
--        TagCloseElement standardStyleCloseElement("style:style");
--        standardStyleCloseElement.write(pHandler);
-+
-+    pHandler->endElement("style:style");
- 
-         TagOpenElement textBodyStyleOpenElement("style:style");
--        textBodyStyleOpenElement.addAttribute("style:name", "Text Body");
-+    textBodyStyleOpenElement.addAttribute("style:name", "Text_Body");
-+    textBodyStyleOpenElement.addAttribute("style:display-name", "Text Body");
-         textBodyStyleOpenElement.addAttribute("style:family", "paragraph");
-         textBodyStyleOpenElement.addAttribute("style:parent-style-name", "Standard");
-         textBodyStyleOpenElement.addAttribute("style:class", "text");
-         textBodyStyleOpenElement.write(pHandler);
--        TagCloseElement textBodyStyleCloseElement("style:style");
--        textBodyStyleCloseElement.write(pHandler);
-+
-+    pHandler->endElement("style:style");
- 
-         TagOpenElement tableContentsStyleOpenElement("style:style");
--        tableContentsStyleOpenElement.addAttribute("style:name", "Table Contents");
-+    tableContentsStyleOpenElement.addAttribute("style:name", "Table_Contents");
-+    tableContentsStyleOpenElement.addAttribute("style:display-name", "Table Contents");
-         tableContentsStyleOpenElement.addAttribute("style:family", "paragraph");
--        tableContentsStyleOpenElement.addAttribute("style:parent-style-name", "Text Body");
-+    tableContentsStyleOpenElement.addAttribute("style:parent-style-name", "Text_Body");
-         tableContentsStyleOpenElement.addAttribute("style:class", "extra");
-         tableContentsStyleOpenElement.write(pHandler);
--        TagCloseElement tableContentsStyleCloseElement("style:style");
--        tableContentsStyleCloseElement.write(pHandler);
-+
-+    pHandler->endElement("style:style");
- 
-         TagOpenElement tableHeadingStyleOpenElement("style:style");
--        tableHeadingStyleOpenElement.addAttribute("style:name", "Table Heading");
-+    tableHeadingStyleOpenElement.addAttribute("style:name", "Table_Heading");
-+    tableHeadingStyleOpenElement.addAttribute("style:display-name", "Table Heading");
-         tableHeadingStyleOpenElement.addAttribute("style:family", "paragraph");
--        tableHeadingStyleOpenElement.addAttribute("style:parent-style-name", "Table Contents");
-+    tableHeadingStyleOpenElement.addAttribute("style:parent-style-name", "Table_Contents");
-         tableHeadingStyleOpenElement.addAttribute("style:class", "extra");
-         tableHeadingStyleOpenElement.write(pHandler);
--        TagCloseElement tableHeadingStyleCloseElement("style:style");
--        tableHeadingStyleCloseElement.write(pHandler);
- 
--    TagCloseElement stylesCloseElement("office:styles");
--    stylesCloseElement.write(pHandler);
-+    pHandler->endElement("style:style");
- 
-+    for (std::vector<DocumentElement *>::const_iterator iter = mFrameStyles.begin();
-+        iter != mFrameStyles.end(); iter++)
-+        (*iter)->write(pHandler);
-+
-+    pHandler->endElement("office:styles");
- }
- 
--void DocumentCollector::_writeMasterPages(DocumentHandler *pHandler)
-+void DocumentCollector::_writeMasterPages(DocumentHandlerInterface *pHandler)
- {
--        WPXPropertyList xBlankAttrList;
--
--    pHandler->startElement("office:master-styles", xBlankAttrList);
-+    TagOpenElement("office:master-styles").write(mpHandler);
-     int pageNumber = 1;
-     for (unsigned int i=0; i<mPageSpans.size(); i++)
-     {
-@@ -218,65 +256,79 @@
-     pHandler->endElement("office:master-styles");
- }
- 
--void DocumentCollector::_writePageMasters(DocumentHandler *pHandler)
-+void DocumentCollector::_writePageLayouts(DocumentHandlerInterface *pHandler)
- {
-     for (unsigned int i=0; i<mPageSpans.size(); i++)
-     {
--        mPageSpans[i]->writePageMaster(i, pHandler);
-+        mPageSpans[i]->writePageLayout(i, pHandler);
-     }
- }
- 
--bool DocumentCollector::_writeTargetDocument(DocumentHandler *pHandler)
-+bool DocumentCollector::_writeTargetDocument(DocumentHandlerInterface *pHandler)
- {        
-     WRITER_DEBUG_MSG(("WriterWordPerfect: Document Body: Printing out the header stuff..\n"));
--    WPXPropertyList xBlankAttrList;
- 
-     WRITER_DEBUG_MSG(("WriterWordPerfect: Document Body: Start Document\n"));
-     mpHandler->startDocument();
- 
-     WRITER_DEBUG_MSG(("WriterWordPerfect: Document Body: preamble\n"));
-         WPXPropertyList docContentPropList;
--    docContentPropList.insert("xmlns:office", "http://openoffice.org/2000/office");
--    docContentPropList.insert("xmlns:style", "http://openoffice.org/2000/style");
--    docContentPropList.insert("xmlns:text", "http://openoffice.org/2000/text");
--    docContentPropList.insert("xmlns:table", "http://openoffice.org/2000/table");
--    docContentPropList.insert("xmlns:draw", "http://openoffice.org/2000/draw");
--    docContentPropList.insert("xmlns:fo", "http://www.w3.org/1999/XSL/Format");
-+    docContentPropList.insert("xmlns:office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0");
-+    docContentPropList.insert("xmlns:meta", "urn:oasis:names:tc:opendocument:xmlns:meta:1.0");
-+    docContentPropList.insert("xmlns:dc", "http://purl.org/dc/elements/1.1/");
-+    docContentPropList.insert("xmlns:config", "urn:oasis:names:tc:opendocument:xmlns:config:1.0");
-+    docContentPropList.insert("xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0");
-+    docContentPropList.insert("xmlns:table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0");
-+    docContentPropList.insert("xmlns:draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0");
-+    docContentPropList.insert("xmlns:fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0");
-     docContentPropList.insert("xmlns:xlink", "http://www.w3.org/1999/xlink");
-     docContentPropList.insert("xmlns:number", "http://openoffice.org/2000/datastyle");
--    docContentPropList.insert("xmlns:svg", "http://www.w3.org/2000/svg");
--    docContentPropList.insert("xmlns:chart", "http://openoffice.org/2000/chart");
--    docContentPropList.insert("xmlns:dr3d", "http://openoffice.org/2000/dr3d");
-+    docContentPropList.insert("xmlns:svg", "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0");
-+    docContentPropList.insert("xmlns:chart", "urn:oasis:names:tc:opendocument:xmlns:chart:1.0");
-+    docContentPropList.insert("xmlns:dr3d", "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0");
-     docContentPropList.insert("xmlns:math", "http://www.w3.org/1998/Math/MathML");
--    docContentPropList.insert("xmlns:form", "http://openoffice.org/2000/form");
--    docContentPropList.insert("xmlns:script", "http://openoffice.org/2000/script");
--    docContentPropList.insert("office:class", "text");
-+    docContentPropList.insert("xmlns:form", "urn:oasis:names:tc:opendocument:xmlns:form:1.0");
-+    docContentPropList.insert("xmlns:script", "urn:oasis:names:tc:opendocument:xmlns:script:1.0");
-+    docContentPropList.insert("xmlns:style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0");
-     docContentPropList.insert("office:version", "1.0");
--        mpHandler->startElement("office:document-content", docContentPropList);
-+    docContentPropList.insert("office:mimetype", "application/vnd.oasis.opendocument.text");
-+    mpHandler->startElement("office:document", docContentPropList);
-+
-+    // write out the metadata
-+    TagOpenElement("office:meta").write(mpHandler);
-+    for (std::vector<DocumentElement *>::const_iterator iterMetaData = mMetaData.begin(); iterMetaData != mMetaData.end(); iterMetaData++) {
-+        (*iterMetaData)->write(mpHandler);
-+    }
-+    mpHandler->endElement("office:meta");
- 
-     // write out the font styles
--    mpHandler->startElement("office:font-decls", xBlankAttrList);
-+    TagOpenElement("office:font-face-decls").write(mpHandler);
-     for (std::map<WPXString, FontStyle *, ltstr>::iterator iterFont = mFontHash.begin(); iterFont != mFontHash.end(); iterFont++) {
-         iterFont->second->write(mpHandler);
-     }
--    TagOpenElement symbolFontOpen("style:font-decl");
-+    TagOpenElement symbolFontOpen("style:font-face");
-     symbolFontOpen.addAttribute("style:name", "StarSymbol");
--    symbolFontOpen.addAttribute("fo:font-family", "StarSymbol");
-+    symbolFontOpen.addAttribute("svg:font-family", "StarSymbol");
-     symbolFontOpen.addAttribute("style:font-charset", "x-symbol");
-     symbolFontOpen.write(mpHandler);
--        mpHandler->endElement("style:font-decl");
--
--    mpHandler->endElement("office:font-decls");
-+    mpHandler->endElement("style:font-face");
- 
-+    mpHandler->endElement("office:font-face-decls");
- 
-      WRITER_DEBUG_MSG(("WriterWordPerfect: Document Body: Writing out the styles..\n"));
- 
-     // write default styles
-     _writeDefaultStyles(mpHandler);
- 
--    mpHandler->startElement("office:automatic-styles", xBlankAttrList);
-+    TagOpenElement("office:automatic-styles").write(mpHandler);
-+
-+    for (std::vector<DocumentElement *>::const_iterator iterFrameAutomaticStyles = mFrameAutomaticStyles.begin();
-+        iterFrameAutomaticStyles != mFrameAutomaticStyles.end(); iterFrameAutomaticStyles++)
-+    {
-+        (*iterFrameAutomaticStyles)->write(pHandler);
-+    }
- 
--    for (std::map<WPXString, ParagraphStyle *, ltstr>::iterator iterTextStyle = mTextStyleHash.begin(); 
-+    for (std::map<WPXString, ParagraphStyle *, ltstr>::const_iterator iterTextStyle = mTextStyleHash.begin(); 
-              iterTextStyle != mTextStyleHash.end(); iterTextStyle++) 
-         {
-         // writing out the paragraph styles
-@@ -288,29 +340,29 @@
-     }
- 
-         // span styles..
--    for (std::map<WPXString, SpanStyle *, ltstr>::iterator iterSpanStyle = mSpanStyleHash.begin(); 
-+    for (std::map<WPXString, SpanStyle *, ltstr>::const_iterator iterSpanStyle = mSpanStyleHash.begin(); 
-              iterSpanStyle != mSpanStyleHash.end(); iterSpanStyle++) 
-         {
-                 (iterSpanStyle->second)->write(pHandler);
-     }
- 
-      // writing out the sections styles
--    for (std::vector<SectionStyle *>::iterator iterSectionStyles = mSectionStyles.begin(); iterSectionStyles != mSectionStyles.end(); iterSectionStyles++) {
-+    for (std::vector<SectionStyle *>::const_iterator iterSectionStyles = mSectionStyles.begin(); iterSectionStyles != mSectionStyles.end(); iterSectionStyles++) {
-         (*iterSectionStyles)->write(pHandler);
-     }
- 
-     // writing out the lists styles
--    for (std::vector<ListStyle *>::iterator iterListStyles = mListStyles.begin(); iterListStyles != mListStyles.end(); iterListStyles++) {
-+    for (std::vector<ListStyle *>::const_iterator iterListStyles = mListStyles.begin(); iterListStyles != mListStyles.end(); iterListStyles++) {
-         (*iterListStyles)->write(pHandler);
-     }
- 
-      // writing out the table styles
--    for (std::vector<TableStyle *>::iterator iterTableStyles = mTableStyles.begin(); iterTableStyles != mTableStyles.end(); iterTableStyles++) {
-+    for (std::vector<TableStyle *>::const_iterator iterTableStyles = mTableStyles.begin(); iterTableStyles != mTableStyles.end(); iterTableStyles++) {
-         (*iterTableStyles)->write(pHandler);
-     }
- 
-     // writing out the page masters
--    _writePageMasters(pHandler);
-+    _writePageLayouts(pHandler);
- 
- 
-     pHandler->endElement("office:automatic-styles");
-@@ -319,15 +371,17 @@
- 
-      WRITER_DEBUG_MSG(("WriterWordPerfect: Document Body: Writing out the document..\n"));
-      // writing out the document
--    pHandler->startElement("office:body", xBlankAttrList);
-+    TagOpenElement("office:body").write(mpHandler);
-+    TagOpenElement("office:text").write(mpHandler);
- 
--    for (std::vector<DocumentElement *>::iterator iterBodyElements = mBodyElements.begin(); iterBodyElements != mBodyElements.end(); iterBodyElements++) {
-+    for (std::vector<DocumentElement *>::const_iterator iterBodyElements = mBodyElements.begin(); iterBodyElements != mBodyElements.end(); iterBodyElements++) {
-         (*iterBodyElements)->write(pHandler);
-     }
-      WRITER_DEBUG_MSG(("WriterWordPerfect: Document Body: Finished writing all doc els..\n"));
- 
-+    pHandler->endElement("office:text");
-     pHandler->endElement("office:body");
--    pHandler->endElement("office:document-content");
-+    pHandler->endElement("office:document");
- 
-     pHandler->endDocument();
- 
-@@ -375,11 +429,31 @@
-     }
- }
- 
-+void DocumentCollector::setDocumentMetaData(const WPXPropertyList &propList)
-+{
-+        WPXPropertyList::Iter i(propList);
-+        for (i.rewind(); i.next(); )
-+        {
-+                // filter out libwpd elements
-+                if (strncmp(i.key(), "libwpd", 6) != 0 && strncmp(i.key(), "dcterms", 7) != 0)
-+        {
-+            mMetaData.push_back(new TagOpenElement(i.key()));
-+            WPXString sStringValue(i()->getStr(), true);
-+            mMetaData.push_back(new CharDataElement(sStringValue.cstr()));
-+            mMetaData.push_back(new TagCloseElement(i.key()));
-+        }
-+        }
-+
-+}
-+
- void DocumentCollector::openPageSpan(const WPXPropertyList &propList)
- {
-     PageSpan *pPageSpan = new PageSpan(propList);
-     mPageSpans.push_back(pPageSpan);
-     mpCurrentPageSpan = pPageSpan;
-+    miNumPageStyles++;
-+
-+    mWriterDocumentStates.top().mbFirstParagraphInPageSpan = true;
- }
- 
- void DocumentCollector::openHeader(const WPXPropertyList &propList)
-@@ -419,16 +493,20 @@
- void DocumentCollector::openSection(const WPXPropertyList &propList, const WPXPropertyListVector &columns)
- {
-         int iNumColumns = columns.count();
--    float fSectionMarginLeft = 0.0f;
--    float fSectionMarginRight = 0.0f;
-+    double fSectionMarginLeft = 0.0;
-+    double fSectionMarginRight = 0.0;
-     if (propList["fo:margin-left"])
--        fSectionMarginLeft = propList["fo:margin-left"]->getFloat();
-+        fSectionMarginLeft = propList["fo:margin-left"]->getDouble();
-     if (propList["fo:margin-right"])
--        fSectionMarginRight = propList["fo:margin-right"]->getFloat();
-+        fSectionMarginRight = propList["fo:margin-right"]->getDouble();
- 
-     if (iNumColumns > 1 || fSectionMarginLeft != 0 || fSectionMarginRight != 0)
-     {
--        mfSectionSpaceAfter = propList["fo:margin-bottom"]->getFloat();
-+        if (propList["fo:margin-bottom"])
-+            mfSectionSpaceAfter = propList["fo:margin-bottom"]->getDouble();
-+        else if (propList["libwpd:margin-bottom"])
-+            mfSectionSpaceAfter =  propList["libwpd:margin-bottom"]->getDouble();
-+
-         WPXString sSectionName;
-         sSectionName.sprintf("Section%i", mSectionStyles.size());
-         
-@@ -438,29 +516,20 @@
-         TagOpenElement *pSectionOpenElement = new TagOpenElement("text:section");
-         pSectionOpenElement->addAttribute("text:style-name", pSectionStyle->getName());
-         pSectionOpenElement->addAttribute("text:name", pSectionStyle->getName());
--        mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pSectionOpenElement));
-+        mpCurrentContentElements->push_back(pSectionOpenElement);
-     }
-     else
--        mWriterDocumentState.mbInFakeSection = true;
-+        mWriterDocumentStates.top().mbInFakeSection = true;
- }
- 
- void DocumentCollector::closeSection()
- {
--    if (!mWriterDocumentState.mbInFakeSection)
--        mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:section")));
-+    if (!mWriterDocumentStates.top().mbInFakeSection)
-+        mpCurrentContentElements->push_back(new TagCloseElement("text:section"));
-     else
--        mWriterDocumentState.mbInFakeSection = false;
-+        mWriterDocumentStates.top().mbInFakeSection = false;
- 
--    // open as many paragraphs as needed to simulate section space after
--    // WLACH_REFACTORING: disable this for now..
--    #if 0
--    for (float f=0.0f; f<mfSectionSpaceAfter; f+=1.0f) {
--        vector<WPXTabStop> dummyTabStops;
--        openParagraph(WPX_PARAGRAPH_JUSTIFICATION_LEFT, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, dummyTabStops, false, false);
--        closeParagraph();
--    }
--    #endif
--    mfSectionSpaceAfter = 0.0f;
-+    mfSectionSpaceAfter = 0.0;
- }
- 
- void DocumentCollector::openParagraph(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops)
-@@ -471,7 +540,7 @@
-     WPXPropertyList *pPersistPropList = new WPXPropertyList(propList);
-     ParagraphStyle *pStyle = NULL;
- 
--    if (mWriterDocumentState.mbFirstElement && mpCurrentContentElements == &mBodyElements)
-+    if (mWriterDocumentStates.top().mbFirstElement && mpCurrentContentElements == &mBodyElements)
-     {
-         // we don't have to go through the fuss of determining if the paragraph style is 
-         // unique in this case, because if we are the first document element, then we
-@@ -483,26 +552,36 @@
-         sName.sprintf("FS");
- 
-         WPXString sParagraphHashKey("P|FS");
--        pPersistPropList->insert("style:master-page-name", "Page Style 1");
-+        pPersistPropList->insert("style:master-page-name", "Page_Style_1");
-                 pStyle = new ParagraphStyle(pPersistPropList, tabStops, sName);
-         mTextStyleHash[sParagraphHashKey] = pStyle;
--        mWriterDocumentState.mbFirstElement = false;
-+        mWriterDocumentStates.top().mbFirstElement = false;
-+        mWriterDocumentStates.top().mbFirstParagraphInPageSpan = false;
-      }
-     else
-     {
--        if (mWriterDocumentState.mbTableCellOpened)
-+        if (mWriterDocumentStates.top().mbFirstParagraphInPageSpan && mpCurrentContentElements == &mBodyElements)
-         {
--            if (mWriterDocumentState.mbHeaderRow)
--                pPersistPropList->insert("style:parent-style-name", "Table Heading");
-+            WPXString sPageStyleName;
-+            sPageStyleName.sprintf("Page_Style_%i", miNumPageStyles);
-+            pPersistPropList->insert("style:master-page-name", sPageStyleName);
-+            mWriterDocumentStates.top().mbFirstParagraphInPageSpan = false;    
-+        }
-+
-+        if (mWriterDocumentStates.top().mbTableCellOpened)
-+        {
-+            if (mWriterDocumentStates.top().mbHeaderRow)
-+                pPersistPropList->insert("style:parent-style-name", "Table_Heading");
-             else
--                pPersistPropList->insert("style:parent-style-name", "Table Contents");
-+                pPersistPropList->insert("style:parent-style-name", "Table_Contents");
-         }
-         else
-             pPersistPropList->insert("style:parent-style-name", "Standard");
- 
-                 WPXString sKey = getParagraphStyleKey(*pPersistPropList, tabStops);
- 
--        if (mTextStyleHash.find(sKey) == mTextStyleHash.end()) {
-+        if (mTextStyleHash.find(sKey) == mTextStyleHash.end())
-+        {
-             WPXString sName;
-             sName.sprintf("S%i", mTextStyleHash.size()); 
-             
-@@ -519,12 +598,12 @@
-     // create a document element corresponding to the paragraph, and append it to our list of document elements
-     TagOpenElement *pParagraphOpenElement = new TagOpenElement("text:p");
-     pParagraphOpenElement->addAttribute("text:style-name", pStyle->getName());
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pParagraphOpenElement));
-+    mpCurrentContentElements->push_back(pParagraphOpenElement);
- }
- 
- void DocumentCollector::closeParagraph()
- {
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:p")));
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:p"));
- }
- 
- void DocumentCollector::openSpan(const WPXPropertyList &propList)
-@@ -552,12 +631,12 @@
-     // create a document element corresponding to the paragraph, and append it to our list of document elements
-     TagOpenElement *pSpanOpenElement = new TagOpenElement("text:span");
-     pSpanOpenElement->addAttribute("text:style-name", sName.cstr());
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pSpanOpenElement));
-+    mpCurrentContentElements->push_back(pSpanOpenElement);
- }
- 
- void DocumentCollector::closeSpan()
- {
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:span")));
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:span"));
- }
- 
- void DocumentCollector::defineOrderedListLevel(const WPXPropertyList &propList)
-@@ -567,8 +646,8 @@
-                 id = propList["libwpd:id"]->getInt();
- 
-      OrderedListStyle *pOrderedListStyle = NULL;
--    if (mpCurrentListStyle && mpCurrentListStyle->getListID() == id)
--        pOrderedListStyle = static_cast<OrderedListStyle *>(mpCurrentListStyle); // FIXME: using a dynamic cast here causes oo to crash?!
-+    if (mWriterListStates.top().mpCurrentListStyle && mWriterListStates.top().mpCurrentListStyle->getListID() == id)
-+        pOrderedListStyle = static_cast<OrderedListStyle *>(mWriterListStates.top().mpCurrentListStyle); // FIXME: using a dynamic cast here causes oo to crash?!
- 
-     // this rather appalling conditional makes sure we only start a new list (rather than continue an old
-     // one) if: (1) we have no prior list OR (2) the prior list is actually definitively different
-@@ -576,27 +655,27 @@
-     // is starting a new list at level 1 (and only level 1)
-     if (pOrderedListStyle == NULL || pOrderedListStyle->getListID() != id  ||
-         (propList["libwpd:level"] && propList["libwpd:level"]->getInt()==1 && 
--             (propList["text:start-value"] && (unsigned int)(propList["text:start-value"]->getInt()) != (miLastListNumber+1))))
-+         (propList["text:start-value"] && propList["text:start-value"]->getInt() != (mWriterListStates.top().miLastListNumber+1))))
-     {
-         WRITER_DEBUG_MSG(("Attempting to create a new ordered list style (listid: %i)\n", id));
-         WPXString sName;
-         sName.sprintf("OL%i", miNumListStyles);
-         miNumListStyles++;
--        pOrderedListStyle = new OrderedListStyle(sName.cstr(), propList["libwpd:id"]->getInt());
--        mListStyles.push_back(static_cast<ListStyle *>(pOrderedListStyle));
--        mpCurrentListStyle = static_cast<ListStyle *>(pOrderedListStyle);
--        mbListContinueNumbering = false;
--        miLastListNumber = 0;
-+        pOrderedListStyle = new OrderedListStyle(sName.cstr(), id);
-+        mListStyles.push_back(pOrderedListStyle);
-+        mWriterListStates.top().mpCurrentListStyle = pOrderedListStyle;
-+        mWriterListStates.top().mbListContinueNumbering = false;
-+        mWriterListStates.top().miLastListNumber = 0;
-     }
-     else
--        mbListContinueNumbering = true;
-+        mWriterListStates.top().mbListContinueNumbering = true;
- 
-     // Iterate through ALL list styles with the same WordPerfect list id and define a level if it is not already defined
-     // This solves certain problems with lists that start and finish without reaching certain levels and then begin again
-     // and reach those levels. See gradguide0405_PC.wpd in the regression suite
-     for (std::vector<ListStyle *>::iterator iterOrderedListStyles = mListStyles.begin(); iterOrderedListStyles != mListStyles.end(); iterOrderedListStyles++)
-     {
--        if ((* iterOrderedListStyles)->getListID() == propList["libwpd:id"]->getInt())
-+        if ((* iterOrderedListStyles)->getListID() == id)
-             (* iterOrderedListStyles)->updateListLevel((propList["libwpd:level"]->getInt() - 1), propList);
-     }
- }
-@@ -608,106 +687,114 @@
-                 id = propList["libwpd:id"]->getInt();
- 
-      UnorderedListStyle *pUnorderedListStyle = NULL;
--    if (mpCurrentListStyle && mpCurrentListStyle->getListID() == id)
--        pUnorderedListStyle = static_cast<UnorderedListStyle *>(mpCurrentListStyle); // FIXME: using a dynamic cast here causes oo to crash?!
-+    if (mWriterListStates.top().mpCurrentListStyle && mWriterListStates.top().mpCurrentListStyle->getListID() == id)
-+        pUnorderedListStyle = static_cast<UnorderedListStyle *>(mWriterListStates.top().mpCurrentListStyle); // FIXME: using a dynamic cast here causes oo to crash?!
- 
-     if (pUnorderedListStyle == NULL) {
-         WRITER_DEBUG_MSG(("Attempting to create a new unordered list style (listid: %i)\n", id));
-         WPXString sName;
-         sName.sprintf("UL%i", miNumListStyles);
-+        miNumListStyles++;
-         pUnorderedListStyle = new UnorderedListStyle(sName.cstr(), id);
--        mListStyles.push_back(static_cast<ListStyle *>(pUnorderedListStyle));
--        mpCurrentListStyle = static_cast<ListStyle *>(pUnorderedListStyle);
-+        mListStyles.push_back(pUnorderedListStyle);
-+        mWriterListStates.top().mpCurrentListStyle = pUnorderedListStyle;
-     }
- 
-     // See comment in DocumentCollector::defineOrderedListLevel
-     for (std::vector<ListStyle *>::iterator iterUnorderedListStyles = mListStyles.begin(); iterUnorderedListStyles != mListStyles.end(); iterUnorderedListStyles++)
-     {
--        if ((* iterUnorderedListStyles)->getListID() == propList["libwpd:id"]->getInt())
-+        if ((* iterUnorderedListStyles)->getListID() == id)
-             (* iterUnorderedListStyles)->updateListLevel((propList["libwpd:level"]->getInt() - 1), propList);
-     }
- }
- 
- void DocumentCollector::openOrderedListLevel(const WPXPropertyList & /* propList */)
- {
--    miCurrentListLevel++;
--    TagOpenElement *pListLevelOpenElement = new TagOpenElement("text:ordered-list");
-+    if (mWriterListStates.top().mbListElementParagraphOpened)
-+    {
-+        mpCurrentContentElements->push_back(new TagCloseElement("text:p"));
-+        mWriterListStates.top().mbListElementParagraphOpened = false;
-+    }
-+    TagOpenElement *pListLevelOpenElement = new TagOpenElement("text:list");
-     _openListLevel(pListLevelOpenElement);
- 
--    if (mbListContinueNumbering) {
-+    if (mWriterListStates.top().mbListContinueNumbering) {
-         pListLevelOpenElement->addAttribute("text:continue-numbering", "true");
-     }
- 
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pListLevelOpenElement));
-+    mpCurrentContentElements->push_back(pListLevelOpenElement);
- }
- 
- void DocumentCollector::openUnorderedListLevel(const WPXPropertyList & /* propList */)
- {
--    miCurrentListLevel++;
--    TagOpenElement *pListLevelOpenElement = new TagOpenElement("text:unordered-list");
-+    if (mWriterListStates.top().mbListElementParagraphOpened)
-+    {
-+        mpCurrentContentElements->push_back(new TagCloseElement("text:p"));
-+        mWriterListStates.top().mbListElementParagraphOpened = false;
-+    }
-+    TagOpenElement *pListLevelOpenElement = new TagOpenElement("text:list");
-     _openListLevel(pListLevelOpenElement);
- 
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pListLevelOpenElement));
-+    mpCurrentContentElements->push_back(pListLevelOpenElement);
- }
- 
- void DocumentCollector::_openListLevel(TagOpenElement *pListLevelOpenElement)
- {
--      if (!mbListElementOpened && miCurrentListLevel > 1)
--      {
--          mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagOpenElement("text:list-item")));
--      }
--    else if (mbListElementParagraphOpened)
-+    if (!mWriterListStates.top().mbListElementOpened.empty() &&
-+        !mWriterListStates.top().mbListElementOpened.top())
-     {
--        mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:p")));
--        mbListElementParagraphOpened = false;
-+        mpCurrentContentElements->push_back(new TagOpenElement("text:list-item"));
-+        mWriterListStates.top().mbListElementOpened.top() = true;
-     }
- 
--    if (miCurrentListLevel==1) {
--        pListLevelOpenElement->addAttribute("text:style-name", mpCurrentListStyle->getName());
-+    mWriterListStates.top().mbListElementOpened.push(false);
-+    if (mWriterListStates.top().mbListElementOpened.size() == 1) {
-+        pListLevelOpenElement->addAttribute("text:style-name", mWriterListStates.top().mpCurrentListStyle->getName());
-     }
--
--    mbListElementOpened = false;
- }
- 
- void DocumentCollector::closeOrderedListLevel()
- {
--    _closeListLevel("ordered-list");
-+    _closeListLevel();
- }
- 
- void DocumentCollector::closeUnorderedListLevel()
- {
--    _closeListLevel("unordered-list");
-+    _closeListLevel();
- }
- 
--void DocumentCollector::_closeListLevel(const char *szListType)
-+void DocumentCollector::_closeListLevel()
- {
--    if (mbListElementOpened)
--        mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:list-item")));
--
--    miCurrentListLevel--;
-+    if (mWriterListStates.top().mbListElementOpened.top())
-+    {
-+        mpCurrentContentElements->push_back(new TagCloseElement("text:list-item"));
-+        mWriterListStates.top().mbListElementOpened.top() = false;
-+    }
- 
--    WPXString sCloseElement;
--    sCloseElement.sprintf("text:%s", szListType);
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement(sCloseElement.cstr())));
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:list"));
- 
--    if (miCurrentListLevel > 0)
--        mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:list-item")));
--    mbListElementOpened = false;
-+    if (!mWriterListStates.top().mbListElementOpened.empty())
-+    {
-+        mWriterListStates.top().mbListElementOpened.pop();
-+    }
- }
- 
- void DocumentCollector::openListElement(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops)
- {
--    miLastListLevel = miCurrentListLevel;
--    if (miCurrentListLevel == 1)
--        miLastListNumber++;
-+    mWriterListStates.top().miLastListLevel = mWriterListStates.top().miCurrentListLevel;
-+    if (mWriterListStates.top().miCurrentListLevel == 1)
-+        mWriterListStates.top().miLastListNumber++;
- 
--    if (mbListElementOpened)
--        mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:list-item")));
-+    if (mWriterListStates.top().mbListElementOpened.top())
-+    {
-+        mpCurrentContentElements->push_back(new TagCloseElement("text:list-item"));
-+        mWriterListStates.top().mbListElementOpened.top() = false;
-+    }
- 
-     ParagraphStyle *pStyle = NULL;
- 
-     WPXPropertyList *pPersistPropList = new WPXPropertyList(propList);
--    pPersistPropList->insert("style:list-style-name", mpCurrentListStyle->getName());
-+    pPersistPropList->insert("style:list-style-name", mWriterListStates.top().mpCurrentListStyle->getName());
-     pPersistPropList->insert("style:parent-style-name", "Standard");
- 
-         WPXString sKey = getParagraphStyleKey(*pPersistPropList, tabStops);
-@@ -727,17 +814,18 @@
-                 delete pPersistPropList;
-         }
- 
--    TagOpenElement *pOpenListElement = new TagOpenElement("text:list-item");
--    TagOpenElement *pOpenListElementParagraph = new TagOpenElement("text:p");
-+    mpCurrentContentElements->push_back(new TagOpenElement("text:list-item"));
- 
-+    TagOpenElement *pOpenListElementParagraph = new TagOpenElement("text:p");
-     pOpenListElementParagraph->addAttribute("text:style-name", pStyle->getName());
-+    mpCurrentContentElements->push_back(pOpenListElementParagraph);
- 
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pOpenListElement));
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pOpenListElementParagraph));
-+    if (mpCurrentContentElements == &mBodyElements)
-+        mWriterDocumentStates.top().mbFirstParagraphInPageSpan = false;
-         
--    mbListElementOpened = true;
--    mbListElementParagraphOpened = true;
--    mbListContinueNumbering = false;
-+    mWriterListStates.top().mbListElementOpened.top() = true;
-+    mWriterListStates.top().mbListElementParagraphOpened = true;
-+    mWriterListStates.top().mbListContinueNumbering = false;
- }
- 
- void DocumentCollector::closeListElement()
-@@ -746,69 +834,100 @@
-     // could contain another list level in OOo's implementation of lists). that is done in the closeListLevel
-     // code (or when we open another list element)
- 
--    if (mbListElementParagraphOpened)
-+    if (mWriterListStates.top().mbListElementParagraphOpened)
-     {
--        mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:p")));
--        mbListElementParagraphOpened = false;
-+        mpCurrentContentElements->push_back(new TagCloseElement("text:p"));
-+        mWriterListStates.top().mbListElementParagraphOpened = false;
-     }
- }
- 
- void DocumentCollector::openFootnote(const WPXPropertyList &propList)
- {
--    TagOpenElement *pOpenFootNote = new TagOpenElement("text:footnote");
-+    mWriterListStates.push(WriterListState());
-+    TagOpenElement *pOpenFootNote = new TagOpenElement("text:note");
-+    pOpenFootNote->addAttribute("text:note-class", "footnote");
-     if (propList["libwpd:number"])
-     {
-         WPXString tmpString("ftn");
-         tmpString.append(propList["libwpd:number"]->getStr());
-         pOpenFootNote->addAttribute("text:id", tmpString);
-     }
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pOpenFootNote));
-+    mpCurrentContentElements->push_back(pOpenFootNote);
- 
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagOpenElement("text:footnote-citation")));
-+    mpCurrentContentElements->push_back(new TagOpenElement("text:note-citation"));
-         if (propList["libwpd:number"])
--                mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new CharDataElement(propList["libwpd:number"]->getStr().cstr())));
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:footnote-citation")));
-+    mpCurrentContentElements->push_back(new CharDataElement(propList["libwpd:number"]->getStr().cstr()));
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:note-citation"));
- 
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagOpenElement("text:footnote-body")));
-+    mpCurrentContentElements->push_back(new TagOpenElement("text:note-body"));
-     
--    mWriterDocumentState.mbInNote = true;
-+    mWriterDocumentStates.top().mbInNote = true;
- }
- 
- void DocumentCollector::closeFootnote()
- {
--    mWriterDocumentState.mbInNote = false;
-+    mWriterDocumentStates.top().mbInNote = false;
-+    if (mWriterListStates.size() > 1)
-+        mWriterListStates.pop();
- 
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:footnote-body")));
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:footnote")));
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:note-body"));
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:note"));
- }
- 
- void DocumentCollector::openEndnote(const WPXPropertyList &propList)
- {
--    TagOpenElement *pOpenEndNote = new TagOpenElement("text:endnote");
-+    mWriterListStates.push(WriterListState());
-+    TagOpenElement *pOpenEndNote = new TagOpenElement("text:note");
-+    pOpenEndNote->addAttribute("text:note-class", "endnote");
-     if (propList["libwpd:number"])
-     {
-         WPXString tmpString("edn");
-         tmpString.append(propList["libwpd:number"]->getStr());
-         pOpenEndNote->addAttribute("text:id", tmpString);
-     }
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pOpenEndNote));
-+    mpCurrentContentElements->push_back(pOpenEndNote);
- 
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagOpenElement("text:endnote-citation")));
-+    mpCurrentContentElements->push_back(new TagOpenElement("text:note-citation"));
-         if (propList["libwpd:number"])
--                mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new CharDataElement(propList["libwpd:number"]->getStr().cstr())));
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:endnote-citation")));
-+    mpCurrentContentElements->push_back(new CharDataElement(propList["libwpd:number"]->getStr().cstr()));
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:note-citation"));
- 
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagOpenElement("text:endnote-body")));
-+    mpCurrentContentElements->push_back(new TagOpenElement("text:note-body"));
- 
-+    mWriterDocumentStates.top().mbInNote = true;
- }
-+
- void DocumentCollector::closeEndnote()
- {
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:endnote-body")));
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:endnote")));
-+    mWriterDocumentStates.top().mbInNote = false;
-+    if (mWriterListStates.size() > 1)
-+        mWriterListStates.pop();
-+
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:note-body"));
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:note"));
-+}
-+
-+void DocumentCollector::openComment(const WPXPropertyList & /*propList*/)
-+{
-+    mWriterListStates.push(WriterListState());
-+    mpCurrentContentElements->push_back(new TagOpenElement("office:annotation"));
-+
-+    mWriterDocumentStates.top().mbInNote = true;
-+}
-+
-+void DocumentCollector::closeComment()
-+{
-+    mWriterDocumentStates.top().mbInNote = false;
-+    if (mWriterListStates.size() > 1)
-+        mWriterListStates.pop();
-+
-+    mpCurrentContentElements->push_back(new TagCloseElement("office:annotation"));
- }
- 
- void DocumentCollector::openTable(const WPXPropertyList &propList, const WPXPropertyListVector &columns)
- {
-+    if (!mWriterDocumentStates.top().mbInNote)
-+    {
-     WPXString sTableName;
-     sTableName.sprintf("Table%i", mTableStyles.size());
- 
-@@ -817,11 +936,11 @@
-         // WLACH_REFACTORING: characterize this behaviour, probably should nip it at the bud within libwpd
-     TableStyle *pTableStyle = new TableStyle(propList, columns, sTableName.cstr());
- 
--    if (mWriterDocumentState.mbFirstElement && mpCurrentContentElements == &mBodyElements)
-+    if (mWriterDocumentStates.top().mbFirstElement && mpCurrentContentElements == &mBodyElements)
-     {
--        WPXString sMasterPageName("Page Style 1");
-+        WPXString sMasterPageName("Page_Style_1");
-         pTableStyle->setMasterPageName(sMasterPageName);
--        mWriterDocumentState.mbFirstElement = false;
-+        mWriterDocumentStates.top().mbFirstElement = false;
-     }
- 
-     mTableStyles.push_back(pTableStyle);
-@@ -832,7 +951,7 @@
- 
-     pTableOpenElement->addAttribute("table:name", sTableName.cstr());
-     pTableOpenElement->addAttribute("table:style-name", sTableName.cstr());
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pTableOpenElement));
-+    mpCurrentContentElements->push_back(pTableOpenElement);
- 
-     for (int i=0; i<pTableStyle->getNumColumns(); i++) 
-         {
-@@ -846,13 +965,16 @@
-         mpCurrentContentElements->push_back(pTableColumnCloseElement);
-     }
- }
-+}
- 
- void DocumentCollector::openTableRow(const WPXPropertyList &propList)
- {
-+    if (!mWriterDocumentStates.top().mbInNote)
-+    {
-     if (propList["libwpd:is-header-row"] && (propList["libwpd:is-header-row"]->getInt()))
-     {
--        mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagOpenElement("table:table-header-rows")));
--        mWriterDocumentState.mbHeaderRow = true;
-+        mpCurrentContentElements->push_back(new TagOpenElement("table:table-header-rows"));
-+        mWriterDocumentStates.top().mbHeaderRow = true;
-     }
- 
-     WPXString sTableRowStyleName;
-@@ -862,21 +984,27 @@
-     
-     TagOpenElement *pTableRowOpenElement = new TagOpenElement("table:table-row");
-     pTableRowOpenElement->addAttribute("table:style-name", sTableRowStyleName);
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pTableRowOpenElement));
-+    mpCurrentContentElements->push_back(pTableRowOpenElement);
-+    }
- }
- 
- void DocumentCollector::closeTableRow()
- {
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("table:table-row")));
--    if (mWriterDocumentState.mbHeaderRow)
-+    if (!mWriterDocumentStates.top().mbInNote)
-     {
--        mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("table:table-header-rows")));
--        mWriterDocumentState.mbHeaderRow = false;
-+        mpCurrentContentElements->push_back(new TagCloseElement("table:table-row"));
-+        if (mWriterDocumentStates.top().mbHeaderRow)
-+        {
-+            mpCurrentContentElements->push_back(new TagCloseElement("table:table-header-rows"));
-+            mWriterDocumentStates.top().mbHeaderRow = false;
-+        }
-     }
- }
- 
- void DocumentCollector::openTableCell(const WPXPropertyList &propList)
- {
-+    if (!mWriterDocumentStates.top().mbInNote)
-+    {
-     WPXString sTableCellStyleName;
-     sTableCellStyleName.sprintf( "%s.Cell%i", mpCurrentTableStyle->getName().cstr(), mpCurrentTableStyle->getNumTableCellStyles());
-     TableCellStyle *pTableCellStyle = new TableCellStyle(propList, sTableCellStyleName.cstr());
-@@ -890,39 +1018,72 @@
-         if (propList["table:number-rows-spanned"])
-                 pTableCellOpenElement->addAttribute("table:number-rows-spanned",
-                                                     propList["table:number-rows-spanned"]->getStr().cstr());
--    pTableCellOpenElement->addAttribute("table:value-type", "string");
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(pTableCellOpenElement));
-+        // pTableCellOpenElement->addAttribute("table:value-type", "string");
-+        mpCurrentContentElements->push_back(pTableCellOpenElement);
- 
--    mWriterDocumentState.mbTableCellOpened = true;
-+        mWriterDocumentStates.top().mbTableCellOpened = true;
-+    }
- }
- 
- void DocumentCollector::closeTableCell()
- {
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("table:table-cell")));
--    mWriterDocumentState.mbTableCellOpened = false;
-+    if (!mWriterDocumentStates.top().mbInNote)
-+    {
-+        mpCurrentContentElements->push_back(new TagCloseElement("table:table-cell"));
-+        mWriterDocumentStates.top().mbTableCellOpened = false;
-+    }
- }
- 
- void DocumentCollector::insertCoveredTableCell(const WPXPropertyList & /* propList */)
- {
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagOpenElement("table:covered-table-cell")));
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("table:covered-table-cell")));
-+    if (!mWriterDocumentStates.top().mbInNote)
-+    {
-+        mpCurrentContentElements->push_back(new TagOpenElement("table:covered-table-cell"));
-+        mpCurrentContentElements->push_back(new TagCloseElement("table:covered-table-cell"));
-+    }
- }
- 
- void DocumentCollector::closeTable()
- {
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("table:table")));
-+    if (!mWriterDocumentStates.top().mbInNote)
-+    {
-+        mpCurrentContentElements->push_back(new TagCloseElement("table:table"));
-+    }
- }
-+
- 
- void DocumentCollector::insertTab()
- {
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagOpenElement("text:tab-stop")));
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:tab-stop")));
-+    mpCurrentContentElements->push_back(new TagOpenElement("text:tab"));
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:tab"));
-+}
-+
-+void DocumentCollector::insertSpace()
-+{
-+    mpCurrentContentElements->push_back(new TagOpenElement("text:s"));
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:s"));
- }
- 
- void DocumentCollector::insertLineBreak()
- {
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagOpenElement("text:line-break")));
--    mpCurrentContentElements->push_back(static_cast<DocumentElement *>(new TagCloseElement("text:line-break")));
-+    mpCurrentContentElements->push_back(new TagOpenElement("text:line-break"));
-+    mpCurrentContentElements->push_back(new TagCloseElement("text:line-break"));
-+}
-+
-+void DocumentCollector::insertField(const WPXString &type, const WPXPropertyList &propList)
-+{
-+    if (!type.len())
-+        return;
-+
-+    TagOpenElement *openElement = new TagOpenElement(type.cstr());
-+    if (type == "text:page-number")
-+        openElement->addAttribute("text:select-page", "current"); 
-+
-+    if (propList["style:num-format"])
-+        openElement->addAttribute("style:num-format", propList["style:num-format"]->getStr());
-+
-+    mpCurrentContentElements->push_back(openElement);
-+    mpCurrentContentElements->push_back(new TagCloseElement(type.cstr()));
- }
- 
- void DocumentCollector::insertText(const WPXString &text)
-@@ -931,4 +1092,221 @@
-     mpCurrentContentElements->push_back(pText);
- }
- 
-+void DocumentCollector::openFrame(const WPXPropertyList &propList)
-+{
-+    mWriterListStates.push(WriterListState());
-+
-+    // First, let's create a Frame Style for this box
-+    TagOpenElement *frameStyleOpenElement = new TagOpenElement("style:style");
-+    WPXString frameStyleName;
-+    frameStyleName.sprintf("GraphicFrame_%i", miObjectNumber);
-+    frameStyleOpenElement->addAttribute("style:name", frameStyleName);
-+    frameStyleOpenElement->addAttribute("style:family", "graphic");
-+
-+    mFrameStyles.push_back(frameStyleOpenElement);
-+
-+    TagOpenElement *frameStylePropertiesOpenElement = new TagOpenElement("style:graphic-properties");
-+
-+    if (propList["text:anchor-type"])
-+        frameStylePropertiesOpenElement->addAttribute("text:anchor-type", propList["text:anchor-type"]->getStr());
-+    else
-+        frameStylePropertiesOpenElement->addAttribute("text:anchor-type","paragraph");
-+
-+    if (propList["text:anchor-page-number"])
-+        frameStylePropertiesOpenElement->addAttribute("text:anchor-page-number", propList["text:anchor-page-number"]->getStr());
-+
-+    if (propList["svg:x"])
-+        frameStylePropertiesOpenElement->addAttribute("svg:x", propList["svg:x"]->getStr());
-+
-+    if (propList["svg:y"])
-+        frameStylePropertiesOpenElement->addAttribute("svg:y", propList["svg:y"]->getStr());
-+
-+    if (propList["svg:width"])
-+        frameStylePropertiesOpenElement->addAttribute("svg:width", propList["svg:width"]->getStr());
-+
-+    if (propList["svg:height"])
-+        frameStylePropertiesOpenElement->addAttribute("svg:height", propList["svg:height"]->getStr());
-+
-+    if (propList["style:rel-width"])
-+        frameStylePropertiesOpenElement->addAttribute("style:rel-width", propList["style:rel-width"]->getStr());
-+
-+    if (propList["style:rel-height"])
-+        frameStylePropertiesOpenElement->addAttribute("style:rel-height", propList["style:rel-height"]->getStr());
-+
-+    if (propList["fo:max-width"])
-+        frameStylePropertiesOpenElement->addAttribute("fo:max-width", propList["fo:max-width"]->getStr());
-+
-+    if (propList["fo:max-height"])
-+        frameStylePropertiesOpenElement->addAttribute("fo:max-height", propList["fo:max-height"]->getStr());
-+        
-+    if (propList["style:wrap"])
-+        frameStylePropertiesOpenElement->addAttribute("style:wrap", propList["style:wrap"]->getStr());
-+
-+    mFrameStyles.push_back(frameStylePropertiesOpenElement);
-+
-+    mFrameStyles.push_back(new TagCloseElement("style:graphic-properties"));
-+
-+    mFrameStyles.push_back(new TagCloseElement("style:style"));
-+
-+    // Now, let's create an automatic style for this frame
-+    TagOpenElement *frameAutomaticStyleElement = new TagOpenElement("style:style");
-+    WPXString frameAutomaticStyleName;
-+    frameAutomaticStyleName.sprintf("fr%i", miObjectNumber);
-+    frameAutomaticStyleElement->addAttribute("style:name", frameAutomaticStyleName);
-+    frameAutomaticStyleElement->addAttribute("style:family", "graphic");
-+    frameAutomaticStyleElement->addAttribute("style:parent-style-name", frameStyleName);
-+
-+    mFrameAutomaticStyles.push_back(frameAutomaticStyleElement);
-+
-+    TagOpenElement *frameAutomaticStylePropertiesElement = new TagOpenElement("style:graphic-properties");
-+    if (propList["style:horizontal-pos"])
-+        frameAutomaticStylePropertiesElement->addAttribute("style:horizontal-pos", propList["style:horizontal-pos"]->getStr());
-+    else
-+        frameAutomaticStylePropertiesElement->addAttribute("style:horizontal-pos", "left");
-+
-+    if (propList["style:horizontal-rel"])
-+        frameAutomaticStylePropertiesElement->addAttribute("style:horizontal-rel", propList["style:horizontal-rel"]->getStr());
-+    else
-+        frameAutomaticStylePropertiesElement->addAttribute("style:horizontal-rel", "paragraph");
-+
-+    if (propList["style:vertical-pos"])
-+        frameAutomaticStylePropertiesElement->addAttribute("style:vertical-pos", propList["style:vertical-pos"]->getStr());
-+    else
-+        frameAutomaticStylePropertiesElement->addAttribute("style:vertical-pos", "top");
-+
-+    if (propList["style:vertical-rel"])
-+        frameAutomaticStylePropertiesElement->addAttribute("style:vertical-rel", propList["style:vertical-rel"]->getStr());
-+    else
-+        frameAutomaticStylePropertiesElement->addAttribute("style:vertical-rel", "page-content");
-+
-+    if (propList["fo:max-width"])
-+        frameAutomaticStylePropertiesElement->addAttribute("fo:max-width", propList["fo:max-width"]->getStr());
-+
-+    if (propList["fo:max-height"])
-+        frameAutomaticStylePropertiesElement->addAttribute("fo:max-height", propList["fo:max-height"]->getStr());
-+
-+    frameAutomaticStylePropertiesElement->addAttribute("draw:ole-draw-aspect", "1");
-+
-+    mFrameAutomaticStyles.push_back(frameAutomaticStylePropertiesElement);
-+
-+    mFrameAutomaticStyles.push_back(new TagCloseElement("style:graphic-properties"));
-+
-+    mFrameAutomaticStyles.push_back(new TagCloseElement("style:style"));
-+
-+    // And write the frame itself
-+    TagOpenElement *drawFrameOpenElement = new TagOpenElement("draw:frame");
-+
-+    drawFrameOpenElement->addAttribute("draw:style-name", frameAutomaticStyleName);
-+    WPXString objectName;
-+    objectName.sprintf("Object%i", miObjectNumber++);
-+    drawFrameOpenElement->addAttribute("draw:name", objectName);
-+    if (propList["text:anchor-type"])
-+        drawFrameOpenElement->addAttribute("text:anchor-type", propList["text:anchor-type"]->getStr());
-+    else
-+        drawFrameOpenElement->addAttribute("text:anchor-type","paragraph");
-+
-+    if (propList["text:anchor-page-number"])
-+        drawFrameOpenElement->addAttribute("text:anchor-page-number", propList["text:anchor-page-number"]->getStr());
-+
-+    if (propList["svg:x"])
-+        drawFrameOpenElement->addAttribute("svg:x", propList["svg:x"]->getStr());
-+
-+    if (propList["svg:y"])
-+        drawFrameOpenElement->addAttribute("svg:y", propList["svg:y"]->getStr());
-+
-+    if (propList["svg:width"])
-+        drawFrameOpenElement->addAttribute("svg:width", propList["svg:width"]->getStr());
-+
-+    if (propList["svg:height"])
-+        drawFrameOpenElement->addAttribute("svg:height", propList["svg:height"]->getStr());
-+
-+    if (propList["style:rel-width"])
-+        drawFrameOpenElement->addAttribute("style:rel-width", propList["style:rel-width"]->getStr());
-+
-+    if (propList["style:rel-height"])
-+        drawFrameOpenElement->addAttribute("style:rel-height", propList["style:rel-height"]->getStr());
-+
-+    mpCurrentContentElements->push_back(drawFrameOpenElement);
-+
-+    mWriterDocumentStates.top().mbInFrame = true;
-+}
-+
-+void DocumentCollector::closeFrame()
-+{
-+    if (mWriterListStates.size() > 1)
-+        mWriterListStates.pop();
-+
-+    mpCurrentContentElements->push_back(new TagCloseElement("draw:frame"));
-+
-+    mWriterDocumentStates.top().mbInFrame = false;
-+}
-+
-+void DocumentCollector::insertBinaryObject(const WPXPropertyList &propList, const WPXBinaryData &data)
-+{
-+    if (!data.size())
-+        return;
-+    if (!mWriterDocumentStates.top().mbInFrame) // Embedded objects without a frame simply don't make sense for us
-+        return;
-+    if (!propList["libwpd:mimetype"])
-+        return;
-+
-+    if (propList["libwpd:mimetype"]->getStr() == "image/x-wpg")
-+    {
-+        std::vector<DocumentElement *> tmpContentElements;
-+        InternalHandler tmpHandler(&tmpContentElements);
-+        OdgExporter exporter(&tmpHandler);
-+        
-+        libwpg::WPGFileFormat fileFormat = libwpg::WPG_AUTODETECT;
-+        
-+        if (!libwpg::WPGraphics::isSupported(const_cast<WPXInputStream *>(data.getDataStream())))
-+            fileFormat = libwpg::WPG_WPG1;
-+
-+        if (libwpg::WPGraphics::parse(const_cast<WPXInputStream *>(data.getDataStream()), &exporter, fileFormat) && !tmpContentElements.empty())
-+        {
-+            mpCurrentContentElements->push_back(new TagOpenElement("draw:object"));
-+            for (std::vector<DocumentElement *>::const_iterator iter = tmpContentElements.begin(); iter != tmpContentElements.end(); iter++)
-+                mpCurrentContentElements->push_back(*iter);
-+            mpCurrentContentElements->push_back(new TagCloseElement("draw:object"));
-+        }
-+    }
-+    else
-+    {
-+        mpCurrentContentElements->push_back(new TagOpenElement("draw:image"));
-+        
-+        mpCurrentContentElements->push_back(new TagOpenElement("office:binary-data"));
-+        
-+        WPXString binaryBase64Data = data.getBase64Data();
-+        
-+        mpCurrentContentElements->push_back(new CharDataElement(binaryBase64Data.cstr()));
-+        
-+        mpCurrentContentElements->push_back(new TagCloseElement("office:binary-data"));
-+        
-+        mpCurrentContentElements->push_back(new TagCloseElement("draw:image"));
-+    }
-+}
-+
-+void DocumentCollector::openTextBox(const WPXPropertyList & /*propList*/)
-+{
-+    if (!mWriterDocumentStates.top().mbInFrame) // Text box without a frame simply doesn't make sense for us
-+        return;
-+    mWriterListStates.push(WriterListState());
-+    mWriterDocumentStates.push(WriterDocumentState());
-+    mpCurrentContentElements->push_back(new TagOpenElement("draw:text-box"));
-+    mWriterDocumentStates.top().mbInTextBox = true;
-+    mWriterDocumentStates.top().mbFirstElement = false;
-+}
-+
-+void DocumentCollector::closeTextBox()
-+{
-+    if (!mWriterDocumentStates.top().mbInTextBox)
-+        return;
-+    if (mWriterListStates.size() > 1)
-+        mWriterListStates.pop();
-+    if (mWriterDocumentStates.size() > 1)
-+        mWriterDocumentStates.pop();
-+
-+    mpCurrentContentElements->push_back(new TagCloseElement("draw:text-box"));
-+}
-+
-+
- /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
---- writerperfect/source/filter/DocumentCollector.hxx	2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/DocumentCollector.hxx	2010-11-06 23:09:43.000000000 +0100
-@@ -46,8 +46,9 @@
- #include <stack>
- #include <string.h>
- 
-+#include "DocumentHandlerInterface.hxx"
-+
- class DocumentElement;
--class DocumentHandler;
- class TagOpenElement;
- class FontStyle;
- class ListStyle;
-@@ -64,11 +65,29 @@
-     _WriterDocumentState();
- 
-     bool mbFirstElement;
-+    bool mbFirstParagraphInPageSpan;        
-     bool mbInFakeSection;
-     bool mbListElementOpenedAtCurrentLevel;
-     bool mbTableCellOpened;
-     bool mbHeaderRow;
-     bool mbInNote;
-+    bool mbInTextBox;
-+    bool mbInFrame;
-+};
-+
-+// list state
-+typedef struct _WriterListState WriterListState;
-+struct _WriterListState
-+{
-+    _WriterListState();
-+
-+    ListStyle *mpCurrentListStyle;
-+    unsigned int miCurrentListLevel;
-+    unsigned int miLastListLevel;
-+    unsigned int miLastListNumber;
-+    bool mbListContinueNumbering;
-+    bool mbListElementParagraphOpened;
-+    std::stack<bool> mbListElementOpened;
- };
- 
- enum WriterListType { unordered, ordered };
-@@ -81,20 +100,23 @@
-   }
- };
- 
--class DocumentCollector : public WPXHLListenerImpl
-+class DocumentCollector : public WPXDocumentInterface
- {
- public:
--    DocumentCollector(WPSInputStream *pInput, DocumentHandler *pHandler);
-+    DocumentCollector(WPXInputStream *pInput, DocumentHandlerInterface *pHandler);
-     virtual ~DocumentCollector();
-     bool filter();
- 
--     virtual void setDocumentMetaData(const WPXPropertyList & /* propList */) {}
-+    // WPXDocumentInterface's callbacks 
-+    virtual void setDocumentMetaData(const WPXPropertyList &propList);
-     virtual void startDocument() {}
-     virtual void endDocument() {}
- 
-+    virtual void definePageStyle(const WPXPropertyList&) {}
-     virtual void openPageSpan(const WPXPropertyList &propList);
-     virtual void closePageSpan() {}
- 
-+    virtual void defineSectionStyle(const WPXPropertyList&, const WPXPropertyListVector&) {}
-     virtual void openSection(const WPXPropertyList &propList, const WPXPropertyListVector &columns);
-     virtual void closeSection();
- 
-@@ -103,9 +125,11 @@
-     virtual void openFooter(const WPXPropertyList &propList);
-     virtual void closeFooter();
- 
-+    virtual void defineParagraphStyle(const WPXPropertyList&, const WPXPropertyListVector&) {}
-     virtual void openParagraph(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops);
-     virtual void closeParagraph();
- 
-+    virtual void defineCharacterStyle(const WPXPropertyList&) {}
-     virtual void openSpan(const WPXPropertyList &propList);
-     virtual void closeSpan();
- 
-@@ -109,10 +133,11 @@
-     virtual void openSpan(const WPXPropertyList &propList);
-     virtual void closeSpan();
- 
--
-     virtual void insertTab();
-+    virtual void insertSpace();
-     virtual void insertText(const WPXString &text);
-      virtual void insertLineBreak();
-+    virtual void insertField(const WPXString &type, const WPXPropertyList &propList);
- 
-     virtual void defineOrderedListLevel(const WPXPropertyList &propList);
-     virtual void defineUnorderedListLevel(const WPXPropertyList &propList);
-@@ -127,6 +152,10 @@
-     virtual void closeFootnote();
-     virtual void openEndnote(const WPXPropertyList &propList);
-     virtual void closeEndnote();
-+    virtual void openComment(const WPXPropertyList &propList);
-+    virtual void closeComment();
-+    virtual void openTextBox(const WPXPropertyList &propList);
-+    virtual void closeTextBox();
- 
-      virtual void openTable(const WPXPropertyList &propList, const WPXPropertyListVector &columns);
-      virtual void openTableRow(const WPXPropertyList &propList);
-@@ -135,25 +164,34 @@
-     virtual void closeTableCell();
-     virtual void insertCoveredTableCell(const WPXPropertyList &propList);
-      virtual void closeTable();
--    virtual bool parseSourceDocument(WPSInputStream &input) = 0;
-+
-+    virtual void openFrame(const WPXPropertyList & propList);
-+    virtual void closeFrame();
-+    
-+    virtual void insertBinaryObject(const WPXPropertyList &propList, const WPXBinaryData &data);
-+    virtual void insertEquation(const WPXPropertyList & /* propList */, const WPXString & /* data */) {}
-+
-+    virtual bool parseSourceDocument(WPXInputStream &input) = 0;
- 
- protected:
-     void _resetDocumentState();
--    bool _writeTargetDocument(DocumentHandler *pHandler);
--    void _writeDefaultStyles(DocumentHandler *pHandler);
--    void _writeMasterPages(DocumentHandler *pHandler);
--    void _writePageMasters(DocumentHandler *pHandler);
-+    bool _writeTargetDocument(DocumentHandlerInterface *pHandler);
-+    void _writeDefaultStyles(DocumentHandlerInterface *pHandler);
-+    void _writeMasterPages(DocumentHandlerInterface *pHandler);
-+    void _writePageLayouts(DocumentHandlerInterface *pHandler);
-     void _allocateFontName(const WPXString &);
- 
- private:
-     void _openListLevel(TagOpenElement *pListLevelOpenElement);
--    void _closeListLevel(const char *szListType);
-+    void _closeListLevel();
- 
--        WPSInputStream *mpInput;
--        DocumentHandler *mpHandler;
-+    WPXInputStream *mpInput;
-+    DocumentHandlerInterface *mpHandler;
-     bool mbUsed; // whether or not it has been before (you can only use me once!)
- 
--    WriterDocumentState mWriterDocumentState;
-+    std::stack<WriterDocumentState> mWriterDocumentStates;
-+    
-+    std::stack<WriterListState> mWriterListStates;
- 
-     // paragraph styles
-     std::map<WPXString, ParagraphStyle *, ltstr> mTextStyleHash;
-@@ -171,6 +209,14 @@
-     // table styles
-     std::vector<TableStyle *> mTableStyles;
- 
-+    // frame styles
-+    std::vector<DocumentElement *> mFrameStyles;
-+    
-+    std::vector<DocumentElement *> mFrameAutomaticStyles;
-+    
-+    // metadata
-+    std::vector<DocumentElement *> mMetaData;
-+
-     // list styles
-     unsigned int miNumListStyles;
- 
-@@ -186,18 +232,18 @@
-     PageSpan *mpCurrentPageSpan;
-     int miNumPageStyles;
- 
--    // list styles / state
--    ListStyle *mpCurrentListStyle;
--    unsigned int miCurrentListLevel;
--    unsigned int miLastListLevel;
--    unsigned int miLastListNumber;
-+    // list styles
-     std::vector<ListStyle *> mListStyles;
--    bool mbListContinueNumbering;
--    bool mbListElementOpened;
--    bool mbListElementParagraphOpened;
-+    
-+    // object state
-+    unsigned miObjectNumber;
- 
-     // table state
-     TableStyle *mpCurrentTableStyle;
-+
-+    const bool mbIsFlatXML;
-+    
-+    const char * mpPassword;
- };
- 
- #endif
---- writerperfect/source/filter/DocumentElement.cxx	2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/filter/DocumentElement.cxx	2010-11-06 23:09:43.000000000 +0100
-@@ -27,6 +27,7 @@
-  */
- 
- #include "DocumentElement.hxx"
-+#include "DocumentHandler.hxx"
- #include "FilterInternal.hxx"
- #include <string.h>
- 
-@@ -37,7 +38,7 @@
-     WRITER_DEBUG_MSG(("%s\n", msTagName.cstr()));
- }
- 
--void TagOpenElement::write(DocumentHandler *pHandler) const
-+void TagOpenElement::write(DocumentHandlerInterface *pHandler) const
- {
-     pHandler->startElement(getTagName().cstr(), maAttrList);
- }
-@@ -52,14 +53,14 @@
-         maAttrList.insert(szAttributeName, sAttributeValue);
- }
- 
--void TagCloseElement::write(DocumentHandler *pHandler) const
-+void TagCloseElement::write(DocumentHandlerInterface *pHandler) const
- {
-     WRITER_DEBUG_MSG(("TagCloseElement: write (%s)\n", getTagName().cstr()));
- 
-     pHandler->endElement(getTagName().cstr());
- }
- 
--void CharDataElement::write(DocumentHandler *pHandler) const
-+void CharDataElement::write(DocumentHandlerInterface *pHandler) const
- {
-     WRITER_DEBUG_MSG(("TextElement: write\n"));
-     pHandler->characters(msData);
-@@ -72,8 +73,10 @@
- 
- // write: writes a text run, appropriately converting spaces to <text:s>
- // elements
--void TextElement::write(DocumentHandler *pHandler) const
-+void TextElement::write(DocumentHandlerInterface *pHandler) const
- {
-+    if (msTextBuf.len() <= 0)
-+        return;
-     WPXPropertyList xBlankAttrList;
-         
-     WPXString sTemp;
---- writerperfect/source/filter/DocumentElement.hxx	2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/DocumentElement.hxx	2010-11-06 23:09:43.000000000 +0100
-@@ -28,30 +28,25 @@
- 
- #ifndef _DOCUMENTELEMENT_H
- #define _DOCUMENTELEMENT_H
--#if defined _MSC_VER
--#pragma warning( push, 1 )
--#endif
- #include <libwpd/libwpd.h>
- #include <libwpd/WPXProperty.h>
- #include <libwpd/WPXString.h>
--#if defined _MSC_VER
--#pragma warning( pop )
--#endif
- #include <vector>
- 
--#include "DocumentHandler.hxx"
-+#include "DocumentHandlerInterface.hxx"
- 
- class DocumentElement
- {
- public:
-     virtual ~DocumentElement() {}
--    virtual void write(DocumentHandler *pHandler) const = 0;
-+    virtual void write(DocumentHandlerInterface *pHandler) const = 0;
-     virtual void print() const {}
- };
- 
- class TagElement : public DocumentElement
- {
- public:
-+    virtual ~TagElement() {}
-     TagElement(const char *szTagName) : msTagName(szTagName) {}
-     const WPXString & getTagName() const { return msTagName; }
-     virtual void print() const;
-@@ -63,9 +58,9 @@
- {
- public:
-     TagOpenElement(const char *szTagName) : TagElement(szTagName) {}
--    ~TagOpenElement() {}
-+    virtual ~TagOpenElement() {}
-     void addAttribute(const char *szAttributeName, const WPXString &sAttributeValue);
--    virtual void write(DocumentHandler *pHandler) const;
-+    virtual void write(DocumentHandlerInterface *pHandler) const;
-     virtual void print () const;
- private:
-     WPXPropertyList maAttrList;
-@@ -75,14 +70,16 @@
- {
- public:
-     TagCloseElement(const char *szTagName) : TagElement(szTagName) {}
--    virtual void write(DocumentHandler *pHandler) const;
-+    virtual ~TagCloseElement() {}
-+    virtual void write(DocumentHandlerInterface *pHandler) const;
- };
- 
- class CharDataElement : public DocumentElement
- {
- public:
-     CharDataElement(const char *sData) : DocumentElement(), msData(sData) {}
--    virtual void write(DocumentHandler *pHandler) const;
-+    virtual ~CharDataElement() {}
-+    virtual void write(DocumentHandlerInterface *pHandler) const;
- private:
-     WPXString msData;
- };
-@@ -91,7 +88,8 @@
- {
- public:
-     TextElement(const WPXString & sTextBuf);
--    virtual void write(DocumentHandler *pHandler) const;
-+    virtual ~TextElement() {}
-+    virtual void write(DocumentHandlerInterface *pHandler) const;
- 
- private:
-     WPXString msTextBuf;
---- writerperfect/source/filter/DocumentHandler.cxx	2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/filter/DocumentHandler.cxx	2010-11-06 23:09:43.000000000 +0100
-@@ -29,6 +29,8 @@
- 
- #include <xmloff/attrlist.hxx>
- 
-+// #define DEBUG_XML 1
-+
- using namespace ::rtl;
- using rtl::OUString;
- 
-@@ -41,19 +43,19 @@
- 
- void DocumentHandler::startDocument() 
- {
--    WRITER_DEBUG_MSG(("DocumentHandler::startDocument\n"));
-     mxHandler->startDocument();
- }
- 
- void DocumentHandler::endDocument()
- {
--    WRITER_DEBUG_MSG(("DocumentHandler::endDocument\n"));
-     mxHandler->endDocument();
- }
- 
- void DocumentHandler::startElement(const char *psName, const WPXPropertyList &xPropList)
- {
--    WRITER_DEBUG_MSG(("DocumentHandler::startElement\n"));
-+#ifdef DEBUG_XML
-+    printf("<%s", psName);
-+#endif
-         SvXMLAttributeList *pAttrList = new SvXMLAttributeList();
-     Reference < XAttributeList > xAttrList(pAttrList);
-     WPXPropertyList::Iter i(xPropList);
-@@ -61,23 +63,36 @@
-     {
-                 // filter out libwpd elements
-                 if (strncmp(i.key(), "libwpd", 6) != 0)
-+        {
-                         pAttrList->AddAttribute(OUString::createFromAscii(i.key()),
-                                                 OUString::createFromAscii(i()->getStr().cstr()));
-+#ifdef DEBUG_XML
-+            printf(" %s=\"%s\"", i.key(), i()->getStr().cstr());
-+#endif
-+        }
-         }
-+#ifdef DEBUG_XML
-+    printf(">");
-+#endif
- 
-         mxHandler->startElement(OUString::createFromAscii(psName), xAttrList);
- }
- 
- void DocumentHandler::endElement(const char *psName)
- {
--    WRITER_DEBUG_MSG(("DocumentHandler::endElement\n"));
-+#ifdef DEBUG_XML
-+    printf("</%s>", psName);
-+#endif
-         mxHandler->endElement(OUString::createFromAscii(psName));
- }
- 
- void DocumentHandler::characters(const WPXString &sCharacters)
- {
--    WRITER_DEBUG_MSG(("DocumentHandler::characters\n"));
-         OUString sCharU16(sCharacters.cstr(), strlen(sCharacters.cstr()), RTL_TEXTENCODING_UTF8);
-+#ifdef DEBUG_XML
-+    WPXString sEscapedCharacters(sCharacters, true);
-+    printf("%s", sEscapedCharacters.cstr());
-+#endif
-         mxHandler->characters(sCharU16);
- }
- 
---- writerperfect/source/filter/DocumentHandler.hxx	2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/DocumentHandler.hxx	2010-11-06 23:09:43.000000000 +0100
-@@ -12,10 +12,12 @@
- #pragma warning( pop )
- #endif
- 
-+#include "DocumentHandlerInterface.hxx"
-+
- using com::sun::star::uno::Reference;
- using com::sun::star::xml::sax::XDocumentHandler;
- 
--class DocumentHandler
-+class DocumentHandler: public DocumentHandlerInterface
- {
- public:
-         DocumentHandler(Reference < XDocumentHandler > &xHandler);
---- writerperfect/source/filter/DocumentHandlerInterface.hxx	1970-01-01 01:00:00.000000000 +0100
-+++ writerperfect/source/filter/DocumentHandlerInterface.hxx	2010-11-06 23:09:43.000000000 +0100
-@@ -0,0 +1,45 @@
-+/*
-+ * Copyright (C) 2004 William Lachance (wlach at interlog.com)
-+ * Copyright (C) 2004 Net Integration Technologies (http://www.net-itech.com)
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2
-+ * of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-+ * 02111-1307, USA.
-+ *
-+ *  Contributor(s): Martin Gallwey (gallwey at sun.com)
-+ *
-+ */
-+
-+/* "This product is not manufactured, approved, or supported by
-+ * Corel Corporation or Corel Corporation Limited."
-+ */
-+#ifndef _DOCUMENTHANDLERINTERFACE_H
-+#define _DOCUMENTHANDLERINTERFACE_H
-+#include <libwpd/libwpd.h>
-+#include <libwpd/WPXProperty.h>
-+#include <libwpd/WPXString.h>
-+
-+class DocumentHandlerInterface
-+{
-+public:
-+    DocumentHandlerInterface() {};
-+    virtual ~DocumentHandlerInterface() {};
-+    
-+        virtual void startDocument() = 0;
-+        virtual void endDocument() = 0;
-+        virtual void startElement(const char *psName, const WPXPropertyList &xPropList) = 0;
-+        virtual void endElement(const char *psName) = 0;
-+        virtual void characters(const WPXString &sCharacters) = 0;
-+};
-+#endif
---- writerperfect/source/filter/FilterInternal.hxx	2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/FilterInternal.hxx	2010-11-06 23:09:43.000000000 +0100
-@@ -20,6 +20,10 @@
-  * For further information visit http://libwpd.sourceforge.net
-  *
-  */
-+
-+#ifndef _FILTERINTERNAL_HXX
-+#define _FILTERINTERNAL_HXX
-+ 
- #include <stdio.h>
- #ifdef DEBUG
- #define WRITER_DEBUG_MSG(M) printf M
-@@ -31,4 +35,6 @@
- const float fDefaultPageWidth = 8.5f; // inches (OOo required default: we will handle this later)
- const float fDefaultPageHeight = 11.0f; // inches
- 
-+#endif
-+
- /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
---- writerperfect/source/filter/FontStyle.cxx	2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/filter/FontStyle.cxx	2010-11-06 23:09:43.000000000 +0100
-@@ -30,7 +30,7 @@
- #include "DocumentElement.hxx"
- 
- FontStyle::FontStyle(const char *psName, const char *psFontFamily) : Style(psName),
--    msFontFamily(psFontFamily),
-+    msFontFamily(psFontFamily, true),
-     msFontPitch(IMP_DEFAULT_FONT_PITCH)
- {
- }
-@@ -39,14 +39,14 @@
- {
- }
- 
--void FontStyle::write(DocumentHandler *pHandler) const
-+void FontStyle::write(DocumentHandlerInterface *pHandler) const
- {        
--    TagOpenElement styleOpen("style:font-decl");
-+    TagOpenElement styleOpen("style:font-face");
-     styleOpen.addAttribute("style:name", getName());
--    styleOpen.addAttribute("fo:font-family", msFontFamily);
--    styleOpen.addAttribute("style:font-pitch", msFontPitch);
-+    styleOpen.addAttribute("svg:font-family", msFontFamily);
-+//    styleOpen.addAttribute("style:font-pitch", msFontPitch);
-     styleOpen.write(pHandler);
--    TagCloseElement styleClose("style:font-decl");
-+    TagCloseElement styleClose("style:font-face");
-     styleClose.write(pHandler);
- }
- 
---- writerperfect/source/filter/FontStyle.hxx	2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/FontStyle.hxx	2010-11-06 23:09:43.000000000 +0100
-@@ -27,23 +27,18 @@
-  */
- #ifndef _FONTSTYLE_H
- #define _FONTSTYLE_H
--#if defined _MSC_VER
--#pragma warning( push, 1 )
--#endif
- #include <libwpd/libwpd.h>
--#if defined _MSC_VER
--#pragma warning( pop )
--#endif
- 
- #include "Style.hxx"
- #include "WriterProperties.hxx"
-+#include "DocumentHandlerInterface.hxx"
- 
- class FontStyle : public Style
- {
- public:
-     FontStyle(const char *psName, const char *psFontFamily);
-     ~FontStyle();
--    virtual void write(DocumentHandler *pHandler) const;
-+    virtual void write(DocumentHandlerInterface *pHandler) const;
-     const WPXString &getFontFamily() const { return msFontFamily; }
- 
- private:
---- writerperfect/source/filter/GraphicsStyle.cxx	1970-01-01 01:00:00.000000000 +0100
-+++ writerperfect/source/filter/GraphicsStyle.cxx	2010-11-06 23:09:43.000000000 +0100
-@@ -0,0 +1,40 @@
-+/* GraphicsStyle:
-+ *
-+ * Copyright (C) 2007 Fridrich Strba .strba at bluewin.ch)
-+ * 
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Library General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Library General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-+ *
-+ * For further information visit http://libwpd.sourceforge.net
-+ *
-+ */
-+
-+/* "This product is not manufactured, approved, or supported by 
-+ * Corel Corporation or Corel Corporation Limited."
-+ */
-+#include "GraphicsStyle.hxx"
-+#include "WriterProperties.hxx"
-+#include "DocumentElement.hxx"
-+
-+GraphicsStyle::GraphicsStyle(const char *psName) : Style(psName)
-+{
-+}
-+
-+GraphicsStyle::~GraphicsStyle() 
-+{
-+}
-+
-+void GraphicsStyle::write(DocumentHandlerInterface * /* pHandler */) const
-+{        
-+}
---- writerperfect/source/filter/GraphicsStyle.hxx	1970-01-01 01:00:00.000000000 +0100
-+++ writerperfect/source/filter/GraphicsStyle.hxx	2010-11-06 23:09:43.000000000 +0100
-@@ -0,0 +1,40 @@
-+/* GraphicsStyle:
-+ *
-+ * Copyright (C) 2007 Fridrich Strba .strba at bluewin.ch)
-+ * 
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Library General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Library General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-+ *
-+ * For further information visit http://libwpd.sourceforge.net
-+ *
-+ */
-+
-+/* "This product is not manufactured, approved, or supported by 
-+ * Corel Corporation or Corel Corporation Limited."
-+ */
-+#ifndef _GRAPHICSSTYLE_H
-+#define _GRAPHICSSTYLE_H
-+
-+#include "Style.hxx"
-+#include "WriterProperties.hxx"
-+#include "DocumentHandlerInterface.hxx"
-+
-+class GraphicsStyle : public Style
-+{
-+public:
-+    GraphicsStyle(const char *psName);
-+    ~GraphicsStyle();
-+    virtual void write(DocumentHandlerInterface *pHandler) const;
-+};
-+#endif
---- writerperfect/source/filter/InternalHandler.cxx	1970-01-01 01:00:00.000000000 +0100
-+++ writerperfect/source/filter/InternalHandler.cxx	2010-11-06 23:09:43.000000000 +0100
-@@ -0,0 +1,54 @@
-+/*
-+ * Copyright (C) 2007 Fridrich Strba .strba at bluewin.ch)
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2
-+ * of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-+ * 02111-1307, USA.
-+ */
-+
-+/* "This product is not manufactured, approved, or supported by
-+ * Corel Corporation or Corel Corporation Limited."
-+ */
-+ 
-+#include "InternalHandler.hxx"
-+
-+#include <string.h>
-+
-+InternalHandler::InternalHandler(std::vector<DocumentElement *> *elements):
-+    mpElements(elements)
-+{
-+}
-+
-+void InternalHandler::startElement(const char *psName, const WPXPropertyList &xPropList)
-+{
-+    TagOpenElement    *element = new TagOpenElement(psName);
-+    WPXPropertyList::Iter i(xPropList);
-+    for (i.rewind(); i.next(); )
-+    {
-+        // filter out libwpd elements
-+        if (strncmp(i.key(), "libwpd", 6) != 0)
-+            element->addAttribute(i.key(), i()->getStr());
-+    }
-+    mpElements->push_back(element);
-+}
-+
-+void InternalHandler::endElement(const char *psName)
-+{
-+    mpElements->push_back(new TagCloseElement(psName));
-+}
-+
-+void InternalHandler::characters(const WPXString &sCharacters)
-+{
-+    mpElements->push_back(new CharDataElement(sCharacters.cstr()));
-+}
---- writerperfect/source/filter/InternalHandler.hxx	1970-01-01 01:00:00.000000000 +0100
-+++ writerperfect/source/filter/InternalHandler.hxx	2010-11-06 23:09:43.000000000 +0100
-@@ -0,0 +1,46 @@
-+/*
-+ * Copyright (C) 2007 Fridrich Strba .strba at bluewin.ch)
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2
-+ * of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-+ * 02111-1307, USA.
-+ */
-+
-+/* "This product is not manufactured, approved, or supported by
-+ * Corel Corporation or Corel Corporation Limited."
-+ */
-+ 
-+#ifndef _INTERNALHANDLER_H
-+#define _INTERNALHANDLER_H
-+#include <libwpd/libwpd.h>
-+#include <libwpd/WPXProperty.h>
-+#include <libwpd/WPXString.h>
-+#include "DocumentElement.hxx"
-+#include "DocumentHandlerInterface.hxx"
-+
-+class InternalHandler : public DocumentHandlerInterface
-+{
-+public:
-+    InternalHandler(std::vector<DocumentElement *> *elements);
-+    ~InternalHandler() {};
-+    
-+    void startDocument() {};
-+    void endDocument() {};
-+    void startElement(const char *psName, const WPXPropertyList &xPropList);
-+    void endElement(const char *psName);
-+    void characters(const WPXString &sCharacters);
-+private:
-+    std::vector<DocumentElement *> *mpElements;
-+};
-+#endif
---- writerperfect/source/filter/ListStyle.cxx	2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/filter/ListStyle.cxx	2010-11-06 23:09:43.000000000 +0100
-@@ -42,34 +42,46 @@
-         setListLevel(iLevel, new OrderedListLevelStyle(xPropList));
- }
- 
--void OrderedListLevelStyle::write(DocumentHandler *pHandler, int iLevel) const
-+void OrderedListLevelStyle::write(DocumentHandlerInterface *pHandler, int iLevel) const
- {
-     WPXString sLevel;
-     sLevel.sprintf("%i", (iLevel+1));
- 
-     TagOpenElement listLevelStyleOpen("text:list-level-style-number");
-     listLevelStyleOpen.addAttribute("text:level", sLevel);
--    listLevelStyleOpen.addAttribute("text:style-name", "Numbering Symbols");
-+    listLevelStyleOpen.addAttribute("text:style-name", "Numbering_Symbols");

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list