summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFridrich Štrba <fridrich.strba@bluewin.ch>2010-11-16 13:38:33 +0100
committerFridrich Štrba <fridrich.strba@bluewin.ch>2010-11-16 13:38:33 +0100
commit9e0f4d66e7b219baa142fe86f2167e37d8f8e6f7 (patch)
tree1615824661cab0a8c904734b0b1595070940a779
parent17f55cd4ba7e87a55747d586c192a2d4d5d8288e (diff)
Use the new stable libwp* releases as default
-rwxr-xr-xconfigure.in20
-rwxr-xr-xdownload.in18
-rwxr-xr-xpatches/dev300/apply10
-rw-r--r--patches/dev300/config_office-testing.diff29
-rw-r--r--patches/dev300/libwpd-testing.diff35
-rw-r--r--patches/dev300/libwpg-testing.diff35
-rw-r--r--patches/dev300/libwps-testing.diff25
-rw-r--r--patches/dev300/writerperfect-testing.diff4353
8 files changed, 1 insertions, 4524 deletions
diff --git a/configure.in b/configure.in
index ae5679b39..c2a2a01d7 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 f2929c138..8e78c10d8 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 75173ba2c..105a76a3a 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 caea5243e..000000000
--- 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 bfb5a18a1..000000000
--- 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 84c37ccf7..000000000
--- 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 3dc4f5aec..000000000
--- 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 0710a30b9..000000000
--- 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@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@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@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@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@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@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");
- if (mPropList["style:num-prefix"])
-- listLevelStyleOpen.addAttribute("style:num-prefix", mPropList["style:num-prefix"]->getStr());
-+ {
-+ WPXString sEscapedString(mPropList["style:num-prefix"]->getStr(), true);
-+ listLevelStyleOpen.addAttribute("style:num-prefix", sEscapedString);
-+ }
- if (mPropList["style:num-suffix"])
-- listLevelStyleOpen.addAttribute("style:num-suffix", mPropList["style:num-suffix"]->getStr());
-+ {
-+ WPXString sEscapedString(mPropList["style:num-suffix"]->getStr(), true);
-+ listLevelStyleOpen.addAttribute("style:num-suffix", sEscapedString);
-+ }
- if (mPropList["style:num-format"])
- listLevelStyleOpen.addAttribute("style:num-format", mPropList["style:num-format"]->getStr());
- if (mPropList["text:start-value"])
-+ {
-+ // odf as to the version 1.1 does require the text:start-value to be a positive integer, means > 0
-+ if (mPropList["text:start-value"]->getInt() > 0)
- listLevelStyleOpen.addAttribute("text:start-value", mPropList["text:start-value"]->getStr());
-+ else
-+ listLevelStyleOpen.addAttribute("text:start-value", "1");
-+ }
- listLevelStyleOpen.write(pHandler);
-
-- TagOpenElement stylePropertiesOpen("style:properties");
-- if (mPropList["text:space-before"])
-+ TagOpenElement stylePropertiesOpen("style:list-level-properties");
-+ if (mPropList["text:space-before"] && mPropList["text:space-before"]->getDouble() > 0.0f)
- stylePropertiesOpen.addAttribute("text:space-before", mPropList["text:space-before"]->getStr());
-- if (mPropList["text:min-label-width"])
-+ if (mPropList["text:min-label-width"] && mPropList["text:min-label-width"]->getDouble() > 0.0f)
- stylePropertiesOpen.addAttribute("text:min-label-width", mPropList["text:min-label-width"]->getStr());
-- if (mPropList["text:min-label-distance"])
-+ if (mPropList["text:min-label-distance"] && mPropList["text:min-label-distance"]->getDouble() > 0.0f)
- stylePropertiesOpen.addAttribute("text:min-label-distance", mPropList["text:min-label-distance"]->getStr());
- stylePropertiesOpen.write(pHandler);
-
-- pHandler->endElement("style:properties");
-+ pHandler->endElement("style:list-level-properties");
- pHandler->endElement("text:list-level-style-number");
- }
-
-@@ -86,29 +98,38 @@
- setListLevel(iLevel, new UnorderedListLevelStyle(xPropList));
- }
-
--void UnorderedListLevelStyle::write(DocumentHandler *pHandler, int iLevel) const
-+void UnorderedListLevelStyle::write(DocumentHandlerInterface *pHandler, int iLevel) const
- {
- WPXString sLevel;
- sLevel.sprintf("%i", (iLevel+1));
- TagOpenElement listLevelStyleOpen("text:list-level-style-bullet");
- listLevelStyleOpen.addAttribute("text:level", sLevel);
-- listLevelStyleOpen.addAttribute("text:style-name", "Bullet Symbols");
-- listLevelStyleOpen.addAttribute("style:num-suffice", ".");
-- if (mPropList["text:bullet-char"])
-- listLevelStyleOpen.addAttribute("text:bullet-char", mPropList["text:bullet-char"]->getStr());
-+ listLevelStyleOpen.addAttribute("text:style-name", "Bullet_Symbols");
-+ if (mPropList["text:bullet-char"] && (mPropList["text:bullet-char"]->getStr().len()))
-+ {
-+ // The following is needed because the odf format does not accept bullet chars longer than one character
-+ WPXString::Iter i(mPropList["text:bullet-char"]->getStr()); i.rewind();
-+ WPXString sEscapedString(".");
-+ if (i.next())
-+ sEscapedString = WPXString(i(), true);
-+ listLevelStyleOpen.addAttribute("text:bullet-char", sEscapedString);
-+
-+ }
-+ else
-+ listLevelStyleOpen.addAttribute("text:bullet-char", ".");
- listLevelStyleOpen.write(pHandler);
-
-- TagOpenElement stylePropertiesOpen("style:properties");
-- if (mPropList["text:space-before"])
-+ TagOpenElement stylePropertiesOpen("style:list-level-properties");
-+ if (mPropList["text:space-before"] && mPropList["text:space-before"]->getDouble() > 0.0f)
- stylePropertiesOpen.addAttribute("text:space-before", mPropList["text:space-before"]->getStr());
-- if (mPropList["text:min-label-width"])
-+ if (mPropList["text:min-label-width"] && mPropList["text:min-label-width"]->getDouble() > 0.0f)
- stylePropertiesOpen.addAttribute("text:min-label-width", mPropList["text:min-label-width"]->getStr());
-- if (mPropList["text:min-label-distance"])
-+ if (mPropList["text:min-label-distance"] && mPropList["text:min-label-distance"]->getDouble() > 0.0f)
- stylePropertiesOpen.addAttribute("text:min-label-distance", mPropList["text:min-label-distance"]->getStr());
- stylePropertiesOpen.addAttribute("style:font-name", "OpenSymbol");
- stylePropertiesOpen.write(pHandler);
-
-- pHandler->endElement("style:properties");
-+ pHandler->endElement("style:list-level-properties");
- pHandler->endElement("text:list-level-style-bullet");
- }
-
-@@ -147,7 +168,7 @@
- mppListLevels[iLevel] = iListLevelStyle;
- }
-
--void ListStyle::write(DocumentHandler *pHandler) const
-+void ListStyle::write(DocumentHandlerInterface *pHandler) const
- {
- TagOpenElement listStyleOpenElement("text:list-style");
- listStyleOpenElement.addAttribute("style:name", getName());
---- writerperfect/source/filter/ListStyle.hxx 2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/ListStyle.hxx 2010-11-06 23:09:43.000000000 +0100
-@@ -27,18 +27,13 @@
- */
- #ifndef _LISTSTYLE_H
- #define _LISTSTYLE_H
--#if defined _MSC_VER
--#pragma warning( push, 1 )
--#endif
- #include <libwpd/libwpd.h>
--#if defined _MSC_VER
--#pragma warning( pop )
--#endif
-
- #define WP6_NUM_LIST_LEVELS 8 // see WP6FileStructure.h (we shouldn't need to reference this)
-
- #include "Style.hxx"
- #include "WriterProperties.hxx"
-+#include "DocumentHandlerInterface.hxx"
-
- class DocumentElement;
-
-@@ -46,14 +41,14 @@
- {
- public:
- virtual ~ListLevelStyle() {};
-- virtual void write(DocumentHandler *pHandler, int iLevel) const = 0;
-+ virtual void write(DocumentHandlerInterface *pHandler, int iLevel) const = 0;
- };
-
- class OrderedListLevelStyle : public ListLevelStyle
- {
- public:
- OrderedListLevelStyle(const WPXPropertyList &xPropList);
-- void write(DocumentHandler *pHandler, int iLevel) const;
-+ void write(DocumentHandlerInterface *pHandler, int iLevel) const;
- private:
- WPXPropertyList mPropList;
- };
-@@ -62,7 +57,7 @@
- {
- public:
- UnorderedListLevelStyle(const WPXPropertyList &xPropList);
-- void write(DocumentHandler *pHandler, int iLevel) const;
-+ void write(DocumentHandlerInterface *pHandler, int iLevel) const;
- private:
- WPXPropertyList mPropList;
- };
-@@ -73,7 +68,7 @@
- ListStyle(const char *psName, const int iListID);
- virtual ~ListStyle();
- virtual void updateListLevel(const int iLevel, const WPXPropertyList &xPropList) = 0;
-- virtual void write(DocumentHandler *pHandler) const;
-+ virtual void write(DocumentHandlerInterface *pHandler) const;
- int getListID() const { return miListID; }
- bool isListLevelDefined(int iLevel) const;
-
---- writerperfect/source/filter/makefile.mk 2010-10-10 13:15:28.000000000 +0200
-+++ writerperfect/source/filter/makefile.mk 2010-11-06 23:09:43.000000000 +0100
-@@ -10,6 +10,10 @@
- INCPRE+=$(LIBWPD_CFLAGS)
- .ENDIF
-
-+.IF "$(SYSTEM_LIBWPG)" == "YES"
-+INCPRE+=$(LIBWPG_CFLAGS)
-+.ENDIF
-+
- .IF "$(SYSTEM_LIBWPS)" == "YES"
- INCPRE+=$(LIBWPS_CFLAGS)
- .ENDIF
-@@ -18,14 +22,17 @@
- INCPRE+= -I..
-
- SLOFILES= \
-+ $(SLO)$/DocumentCollector.obj \
- $(SLO)$/DocumentElement.obj \
-+ $(SLO)$/DocumentHandler.obj \
- $(SLO)$/FontStyle.obj \
-+ $(SLO)$/GraphicsStyle.obj \
-+ $(SLO)$/InternalHandler.obj \
- $(SLO)$/ListStyle.obj \
-- $(SLO)$/DocumentHandler.obj \
-+ $(SLO)$/OdgExporter.obj \
- $(SLO)$/PageSpan.obj \
- $(SLO)$/SectionStyle.obj \
- $(SLO)$/TableStyle.obj \
-- $(SLO)$/TextRunStyle.obj \
-- $(SLO)$/DocumentCollector.obj
-+ $(SLO)$/TextRunStyle.obj
-
- .INCLUDE : target.mk
---- writerperfect/source/filter/OdgExporter.cxx 1970-01-01 01:00:00.000000000 +0100
-+++ writerperfect/source/filter/OdgExporter.cxx 2010-11-06 23:14:23.000000000 +0100
-@@ -0,0 +1,648 @@
-+/* libwpg
-+ * Copyright (C) 2006 Ariya Hidayat (ariya@kde.org)
-+ * Copyright (C) 2006 Fridrich Strba (fridrich.strba@bluewin.ch)
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Library General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library 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., 51 Franklin Street, Fifth Floor,
-+ * Boston, MA 02111-1301 USA
-+ *
-+ * For further information visit http://libwpg.sourceforge.net
-+ */
-+
-+/* "This product is not manufactured, approved, or supported by
-+ * Corel Corporation or Corel Corporation Limited."
-+ */
-+
-+#include "OdgExporter.hxx"
-+#include "DocumentElement.hxx"
-+#include "DocumentHandler.hxx"
-+#include <locale.h>
-+#include <math.h>
-+#include <string>
-+
-+#ifndef M_PI
-+#define M_PI 3.14159265358979323846
-+#endif
-+
-+OdgExporter::OdgExporter(DocumentHandlerInterface *pHandler):
-+ mpHandler(pHandler),
-+ miGradientIndex(1),
-+ miDashIndex(1),
-+ miGraphicsStyleIndex(1),
-+ mfWidth(0.0),
-+ mfHeight(0.0)
-+{
-+}
-+
-+OdgExporter::~OdgExporter()
-+{
-+
-+ for (std::vector<DocumentElement *>::iterator iterBody = mBodyElements.begin(); iterBody != mBodyElements.end(); iterBody++)
-+ {
-+ delete (*iterBody);
-+ (*iterBody) = NULL;
-+ }
-+
-+ for (std::vector<DocumentElement *>::iterator iterGraphicsAutomaticStyles = mGraphicsAutomaticStyles.begin();
-+ iterGraphicsAutomaticStyles != mGraphicsAutomaticStyles.end(); iterGraphicsAutomaticStyles++)
-+ {
-+ delete((*iterGraphicsAutomaticStyles));
-+ }
-+
-+ for (std::vector<DocumentElement *>::iterator iterGraphicsStrokeDashStyles = mGraphicsStrokeDashStyles.begin();
-+ iterGraphicsStrokeDashStyles != mGraphicsStrokeDashStyles.end(); iterGraphicsStrokeDashStyles++)
-+ {
-+ delete((*iterGraphicsStrokeDashStyles));
-+ }
-+
-+ for (std::vector<DocumentElement *>::iterator iterGraphicsGradientStyles = mGraphicsGradientStyles.begin();
-+ iterGraphicsGradientStyles != mGraphicsGradientStyles.end(); iterGraphicsGradientStyles++)
-+ {
-+ delete((*iterGraphicsGradientStyles));
-+ }
-+}
-+
-+void OdgExporter::startGraphics(const ::WPXPropertyList &propList)
-+{
-+ miGradientIndex = 1;
-+ miDashIndex = 1;
-+ miGraphicsStyleIndex = 1;
-+ mfWidth = 0.0;
-+ mfHeight = 0.0;
-+
-+ if (propList["svg:width"])
-+ mfWidth = propList["svg:width"]->getDouble();
-+
-+ if (propList["svg:height"])
-+ mfHeight = propList["svg:height"]->getDouble();
-+
-+ mpHandler->startDocument();
-+ TagOpenElement tmpOfficeDocumentContent("office:document");
-+ tmpOfficeDocumentContent.addAttribute("xmlns:office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0");
-+ tmpOfficeDocumentContent.addAttribute("xmlns:style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0");
-+ tmpOfficeDocumentContent.addAttribute("xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0");
-+ tmpOfficeDocumentContent.addAttribute("xmlns:draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0");
-+ tmpOfficeDocumentContent.addAttribute("xmlns:dc", "http://purl.org/dc/elements/1.1/");
-+ tmpOfficeDocumentContent.addAttribute("xmlns:svg", "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0");
-+ tmpOfficeDocumentContent.addAttribute("xmlns:fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0");
-+ tmpOfficeDocumentContent.addAttribute("xmlns:config", "urn:oasis:names:tc:opendocument:xmlns:config:1.0");
-+ tmpOfficeDocumentContent.addAttribute("xmlns:ooo", "http://openoffice.org/2004/office");
-+ tmpOfficeDocumentContent.addAttribute("office:version", "1.0");
-+ tmpOfficeDocumentContent.addAttribute("office:mimetype", "application/vnd.oasis.opendocument.graphics");
-+ tmpOfficeDocumentContent.write(mpHandler);
-+
-+ TagOpenElement("office:settings").write(mpHandler);
-+
-+ TagOpenElement configItemSetOpenElement("config:config-item-set");
-+ configItemSetOpenElement.addAttribute("config:name", "ooo:view-settings");
-+ configItemSetOpenElement.write(mpHandler);
-+
-+ TagOpenElement configItemOpenElement("config:config-item");
-+
-+ configItemOpenElement.addAttribute("config:name", "VisibleAreaTop");
-+ configItemOpenElement.addAttribute("config:type", "int");
-+ configItemOpenElement.write(mpHandler);
-+ mpHandler->characters("0");
-+ mpHandler->endElement("config:config-item");
-+
-+ configItemOpenElement.addAttribute("config:name", "VisibleAreaLeft");
-+ configItemOpenElement.addAttribute("config:type", "int");
-+ configItemOpenElement.write(mpHandler);
-+ mpHandler->characters("0");
-+ mpHandler->endElement("config:config-item");
-+
-+ configItemOpenElement.addAttribute("config:name", "VisibleAreaWidth");
-+ configItemOpenElement.addAttribute("config:type", "int");
-+ configItemOpenElement.write(mpHandler);
-+ WPXString sWidth; sWidth.sprintf("%li", (unsigned long)(2540 * mfWidth));
-+ mpHandler->characters(sWidth);
-+ mpHandler->endElement("config:config-item");
-+
-+ configItemOpenElement.addAttribute("config:name", "VisibleAreaHeight");
-+ configItemOpenElement.addAttribute("config:type", "int");
-+ configItemOpenElement.write(mpHandler);
-+ WPXString sHeight; sHeight.sprintf("%li", (unsigned long)(2540 * mfHeight));
-+ mpHandler->characters(sHeight);
-+ mpHandler->endElement("config:config-item");
-+
-+ mpHandler->endElement("config:config-item-set");
-+
-+ mpHandler->endElement("office:settings");
-+}
-+
-+void OdgExporter::endGraphics()
-+{
-+ TagOpenElement("office:styles").write(mpHandler);
-+
-+ for (std::vector<DocumentElement *>::const_iterator iterGraphicsStrokeDashStyles = mGraphicsStrokeDashStyles.begin();
-+ iterGraphicsStrokeDashStyles != mGraphicsStrokeDashStyles.end(); iterGraphicsStrokeDashStyles++)
-+ {
-+ (*iterGraphicsStrokeDashStyles)->write(mpHandler);
-+ }
-+
-+ for (std::vector<DocumentElement *>::const_iterator iterGraphicsGradientStyles = mGraphicsGradientStyles.begin();
-+ iterGraphicsGradientStyles != mGraphicsGradientStyles.end(); iterGraphicsGradientStyles++)
-+ {
-+ (*iterGraphicsGradientStyles)->write(mpHandler);
-+ }
-+
-+ mpHandler->endElement("office:styles");
-+
-+ TagOpenElement("office:automatic-styles").write(mpHandler);
-+
-+ // writing out the graphics automatic styles
-+ for (std::vector<DocumentElement *>::iterator iterGraphicsAutomaticStyles = mGraphicsAutomaticStyles.begin();
-+ iterGraphicsAutomaticStyles != mGraphicsAutomaticStyles.end(); iterGraphicsAutomaticStyles++)
-+ {
-+ (*iterGraphicsAutomaticStyles)->write(mpHandler);
-+ }
-+
-+ TagOpenElement tmpStylePageLayoutOpenElement("style:page-layout");
-+ tmpStylePageLayoutOpenElement.addAttribute("style:name", "PM0");
-+ tmpStylePageLayoutOpenElement.write(mpHandler);
-+
-+ TagOpenElement tmpStylePageLayoutPropertiesOpenElement("style:page-layout-properties");
-+ tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:margin-top", "0in");
-+ tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:margin-bottom", "0in");
-+ tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:margin-left", "0in");
-+ tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:margin-right", "0in");
-+ WPXString sValue;
-+ sValue = doubleToString(mfWidth); sValue.append("in");
-+ tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:page-width", sValue);
-+ sValue = doubleToString(mfHeight); sValue.append("in");
-+ tmpStylePageLayoutPropertiesOpenElement.addAttribute("fo:page-height", sValue);
-+ tmpStylePageLayoutPropertiesOpenElement.addAttribute("style:print-orientation", "portrait");
-+ tmpStylePageLayoutPropertiesOpenElement.write(mpHandler);
-+
-+ mpHandler->endElement("style:page-layout-properties");
-+
-+ mpHandler->endElement("style:page-layout");
-+
-+ TagOpenElement tmpStyleStyleOpenElement("style:style");
-+ tmpStyleStyleOpenElement.addAttribute("style:name", "dp1");
-+ tmpStyleStyleOpenElement.addAttribute("style:family", "drawing-page");
-+ tmpStyleStyleOpenElement.write(mpHandler);
-+
-+ TagOpenElement tmpStyleDrawingPagePropertiesOpenElement("style:drawing-page-properties");
-+ // tmpStyleDrawingPagePropertiesOpenElement.addAttribute("draw:background-size", "border");
-+ tmpStyleDrawingPagePropertiesOpenElement.addAttribute("draw:fill", "none");
-+ tmpStyleDrawingPagePropertiesOpenElement.write(mpHandler);
-+
-+ mpHandler->endElement("style:drawing-page-properties");
-+
-+ mpHandler->endElement("style:style");
-+
-+ mpHandler->endElement("office:automatic-styles");
-+
-+ TagOpenElement("office:master-styles").write(mpHandler);
-+
-+ TagOpenElement tmpStyleMasterPageOpenElement("style:master-page");
-+ tmpStyleMasterPageOpenElement.addAttribute("style:name", "Default");
-+ tmpStyleMasterPageOpenElement.addAttribute("style:page-layout-name", "PM0");
-+ tmpStyleMasterPageOpenElement.addAttribute("draw:style-name", "dp1");
-+ tmpStyleMasterPageOpenElement.write(mpHandler);
-+
-+ mpHandler->endElement("style:master-page");
-+
-+ mpHandler->endElement("office:master-styles");
-+
-+ TagOpenElement("office:body").write(mpHandler);
-+
-+ TagOpenElement("office:drawing").write(mpHandler);
-+
-+ TagOpenElement tmpDrawPageOpenElement("draw:page");
-+ tmpDrawPageOpenElement.addAttribute("draw:name", "page1");
-+ tmpDrawPageOpenElement.addAttribute("draw:style-name", "dp1");
-+ tmpDrawPageOpenElement.addAttribute("draw:master-page-name", "Default");
-+ tmpDrawPageOpenElement.write(mpHandler);
-+
-+ for (std::vector<DocumentElement *>::const_iterator bodyIter = mBodyElements.begin();
-+ bodyIter != mBodyElements.end(); bodyIter++)
-+ {
-+ (*bodyIter)->write(mpHandler);
-+ }
-+
-+ mpHandler->endElement("draw:page");
-+ mpHandler->endElement("office:drawing");
-+ mpHandler->endElement("office:body");
-+
-+ mpHandler->endElement("office:document");
-+
-+ mpHandler->endDocument();
-+}
-+
-+void OdgExporter::setStyle(const ::WPXPropertyList & propList, const ::WPXPropertyListVector& gradient)
-+{
-+ mxStyle = propList;
-+ mxGradient = gradient;
-+}
-+
-+void OdgExporter::startLayer(const ::WPXPropertyList & /* propList */)
-+{
-+}
-+
-+void OdgExporter::endLayer()
-+{
-+}
-+
-+void OdgExporter::drawRectangle(const ::WPXPropertyList &propList)
-+{
-+ writeGraphicsStyle();
-+ TagOpenElement *pDrawRectElement = new TagOpenElement("draw:rect");
-+ WPXString sValue;
-+ sValue.sprintf("gr%i", miGraphicsStyleIndex-1);
-+ pDrawRectElement->addAttribute("draw:style-name", sValue);
-+ pDrawRectElement->addAttribute("svg:x", propList["svg:x"]->getStr());
-+ pDrawRectElement->addAttribute("svg:y", propList["svg:y"]->getStr());
-+ pDrawRectElement->addAttribute("svg:width", propList["svg:width"]->getStr());
-+ pDrawRectElement->addAttribute("svg:height", propList["svg:height"]->getStr());
-+ // FIXME: what to do when rx != ry ?
-+ if (propList["svg:rx"])
-+ pDrawRectElement->addAttribute("draw:corner-radius", propList["svg:rx"]->getStr());
-+ else
-+ pDrawRectElement->addAttribute("draw:corner-radius", "0.0000in");
-+ mBodyElements.push_back(pDrawRectElement);
-+ mBodyElements.push_back(new TagCloseElement("draw:rect"));
-+}
-+
-+void OdgExporter::drawEllipse(const ::WPXPropertyList &propList)
-+{
-+ writeGraphicsStyle();
-+ TagOpenElement *pDrawEllipseElement = new TagOpenElement("draw:ellipse");
-+ WPXString sValue;
-+ sValue.sprintf("gr%i", miGraphicsStyleIndex-1);
-+ pDrawEllipseElement->addAttribute("draw:style-name", sValue);
-+ sValue = doubleToString(2 * propList["svg:rx"]->getDouble()); sValue.append("in");
-+ pDrawEllipseElement->addAttribute("svg:width", sValue);
-+ sValue = doubleToString(2 * propList["svg:ry"]->getDouble()); sValue.append("in");
-+ pDrawEllipseElement->addAttribute("svg:height", sValue);
-+ if (propList["libwpg:rotate"] && propList["libwpg:rotate"]->getDouble() != 0.0)
-+ {
-+ double rotation = propList["libwpg:rotate"]->getDouble();
-+ while(rotation < -180)
-+ rotation += 360;
-+ while(rotation > 180)
-+ rotation -= 360;
-+ double radrotation = rotation*M_PI/180.0;
-+ double deltax = sqrt(pow(propList["svg:rx"]->getDouble(), 2.0)
-+ + pow(propList["svg:ry"]->getDouble(), 2.0))*cos(atan(propList["svg:ry"]->getDouble()/propList["svg:rx"]->getDouble())
-+ - radrotation ) - propList["svg:rx"]->getDouble();
-+ double deltay = sqrt(pow(propList["svg:rx"]->getDouble(), 2.0)
-+ + pow(propList["svg:ry"]->getDouble(), 2.0))*sin(atan(propList["svg:ry"]->getDouble()/propList["svg:rx"]->getDouble())
-+ - radrotation ) - propList["svg:ry"]->getDouble();
-+ sValue = "rotate("; sValue.append(doubleToString(radrotation)); sValue.append(") ");
-+ sValue.append("translate("); sValue.append(doubleToString(propList["svg:cx"]->getDouble() - propList["svg:rx"]->getDouble() - deltax));
-+ sValue.append("in, ");
-+ sValue.append(doubleToString(propList["svg:cy"]->getDouble() - propList["svg:ry"]->getDouble() - deltay)); sValue.append("in)");
-+ pDrawEllipseElement->addAttribute("draw:transform", sValue);
-+ }
-+ else
-+ {
-+ sValue = doubleToString(propList["svg:cx"]->getDouble()-propList["svg:rx"]->getDouble()); sValue.append("in");
-+ pDrawEllipseElement->addAttribute("svg:x", sValue);
-+ sValue = doubleToString(propList["svg:cy"]->getDouble()-propList["svg:ry"]->getDouble()); sValue.append("in");
-+ pDrawEllipseElement->addAttribute("svg:y", sValue);
-+ }
-+ mBodyElements.push_back(pDrawEllipseElement);
-+ mBodyElements.push_back(new TagCloseElement("draw:ellipse"));
-+}
-+
-+void OdgExporter::drawPolyline(const ::WPXPropertyListVector& vertices)
-+{
-+ drawPolySomething(vertices, false);
-+}
-+
-+void OdgExporter::drawPolygon(const ::WPXPropertyListVector& vertices)
-+{
-+ drawPolySomething(vertices, true);
-+}
-+
-+void OdgExporter::drawPolySomething(const ::WPXPropertyListVector& vertices, bool isClosed)
-+{
-+ if(vertices.count() < 2)
-+ return;
-+
-+ if(vertices.count() == 2)
-+ {
-+ writeGraphicsStyle();
-+ TagOpenElement *pDrawLineElement = new TagOpenElement("draw:line");
-+ WPXString sValue;
-+ sValue.sprintf("gr%i", miGraphicsStyleIndex-1);
-+ pDrawLineElement->addAttribute("draw:style-name", sValue);
-+ pDrawLineElement->addAttribute("draw:text-style-name", "P1");
-+ pDrawLineElement->addAttribute("draw:layer", "layout");
-+ pDrawLineElement->addAttribute("svg:x1", vertices[0]["svg:x"]->getStr());
-+ pDrawLineElement->addAttribute("svg:y1", vertices[0]["svg:y"]->getStr());
-+ pDrawLineElement->addAttribute("svg:x2", vertices[1]["svg:x"]->getStr());
-+ pDrawLineElement->addAttribute("svg:y2", vertices[1]["svg:y"]->getStr());
-+ mBodyElements.push_back(pDrawLineElement);
-+ mBodyElements.push_back(new TagCloseElement("draw:line"));
-+ }
-+ else
-+ {
-+ ::WPXPropertyListVector path;
-+ ::WPXPropertyList element;
-+
-+ for (unsigned long ii = 0; ii < vertices.count(); ii++)
-+ {
-+ element = vertices[ii];
-+ if (ii == 0)
-+ element.insert("libwpg:path-action", "M");
-+ else
-+ element.insert("libwpg:path-action", "L");
-+ path.append(element);
-+ element.clear();
-+ }
-+ if (isClosed)
-+ {
-+ element.insert("libwpg:path-action", "Z");
-+ path.append(element);
-+ }
-+ drawPath(path);
-+ }
-+}
-+
-+void OdgExporter::drawPath(const WPXPropertyListVector& path)
-+{
-+ if(path.count() == 0)
-+ return;
-+
-+ // try to find the bounding box
-+ // this is simple convex hull technique, the bounding box might not be
-+ // accurate but that should be enough for this purpose
-+ double px = path[0]["svg:x"]->getDouble();
-+ double py = path[0]["svg:y"]->getDouble();
-+ double qx = path[0]["svg:x"]->getDouble();
-+ double qy = path[0]["svg:y"]->getDouble();
-+ for(unsigned k = 0; k < path.count(); k++)
-+ {
-+ if (!path[k]["svg:x"] || !path[k]["svg:y"])
-+ continue;
-+ px = (px > path[k]["svg:x"]->getDouble()) ? path[k]["svg:x"]->getDouble() : px;
-+ py = (py > path[k]["svg:y"]->getDouble()) ? path[k]["svg:y"]->getDouble() : py;
-+ qx = (qx < path[k]["svg:x"]->getDouble()) ? path[k]["svg:x"]->getDouble() : qx;
-+ qy = (qy < path[k]["svg:y"]->getDouble()) ? path[k]["svg:y"]->getDouble() : qy;
-+ if(path[k]["libwpg:path-action"]->getStr() == "C")
-+ {
-+ px = (px > path[k]["svg:x1"]->getDouble()) ? path[k]["svg:x1"]->getDouble() : px;
-+ py = (py > path[k]["svg:y1"]->getDouble()) ? path[k]["svg:y1"]->getDouble() : py;
-+ qx = (qx < path[k]["svg:x1"]->getDouble()) ? path[k]["svg:x1"]->getDouble() : qx;
-+ qy = (qy < path[k]["svg:y1"]->getDouble()) ? path[k]["svg:y1"]->getDouble() : qy;
-+ px = (px > path[k]["svg:x2"]->getDouble()) ? path[k]["svg:x2"]->getDouble() : px;
-+ py = (py > path[k]["svg:y2"]->getDouble()) ? path[k]["svg:y2"]->getDouble() : py;
-+ qx = (qx < path[k]["svg:x2"]->getDouble()) ? path[k]["svg:x2"]->getDouble() : qx;
-+ qy = (qy < path[k]["svg:y2"]->getDouble()) ? path[k]["svg:y2"]->getDouble() : qy;
-+ }
-+ if(path[k]["libwpg:path-action"]->getStr() == "A")
-+ {
-+ px = (px > path[k]["svg:x"]->getDouble()-2*path[k]["svg:rx"]->getDouble()) ? path[k]["svg:x"]->getDouble()-2*path[k]["svg:rx"]->getDouble() : px;
-+ py = (py > path[k]["svg:y"]->getDouble()-2*path[k]["svg:ry"]->getDouble()) ? path[k]["svg:y"]->getDouble()-2*path[k]["svg:ry"]->getDouble() : py;
-+ qx = (qx < path[k]["svg:x"]->getDouble()+2*path[k]["svg:rx"]->getDouble()) ? path[k]["svg:x"]->getDouble()+2*path[k]["svg:rx"]->getDouble() : qx;
-+ qy = (qy < path[k]["svg:y"]->getDouble()+2*path[k]["svg:ry"]->getDouble()) ? path[k]["svg:y"]->getDouble()+2*path[k]["svg:ry"]->getDouble() : qy;
-+ }
-+ }
-+ double vw = qx - px;
-+ double vh = qy - py;
-+
-+ writeGraphicsStyle();
-+
-+ TagOpenElement *pDrawPathElement = new TagOpenElement("draw:path");
-+ WPXString sValue;
-+ sValue.sprintf("gr%i", miGraphicsStyleIndex-1);
-+ pDrawPathElement->addAttribute("draw:style-name", sValue);
-+ pDrawPathElement->addAttribute("draw:text-style-name", "P1");
-+ pDrawPathElement->addAttribute("draw:layer", "layout");
-+ sValue = doubleToString(px); sValue.append("in");
-+ pDrawPathElement->addAttribute("svg:x", sValue);
-+ sValue = doubleToString(py); sValue.append("in");
-+ pDrawPathElement->addAttribute("svg:y", sValue);
-+ sValue = doubleToString(vw); sValue.append("in");
-+ pDrawPathElement->addAttribute("svg:width", sValue);
-+ sValue = doubleToString(vh); sValue.append("in");
-+ pDrawPathElement->addAttribute("svg:height", sValue);
-+ sValue.sprintf("%i %i %i %i", 0, 0, (unsigned)(vw*2540), (unsigned)(vh*2540));
-+ pDrawPathElement->addAttribute("svg:viewBox", sValue);
-+
-+ sValue.clear();
-+ for(unsigned i = 0; i < path.count(); i++)
-+ {
-+ WPXString sElement;
-+ if (path[i]["libwpg:path-action"]->getStr() == "M")
-+ {
-+ // 2540 is 2.54*1000, 2.54 in = 1 inch
-+ sElement.sprintf("M%i %i", (unsigned)((path[i]["svg:x"]->getDouble()-px)*2540),
-+ (unsigned)((path[i]["svg:y"]->getDouble()-py)*2540));
-+ sValue.append(sElement);
-+ }
-+ else if (path[i]["libwpg:path-action"]->getStr() == "L")
-+ {
-+ sElement.sprintf("L%i %i", (unsigned)((path[i]["svg:x"]->getDouble()-px)*2540),
-+ (unsigned)((path[i]["svg:y"]->getDouble()-py)*2540));
-+ sValue.append(sElement);
-+ }
-+ else if (path[i]["libwpg:path-action"]->getStr() == "C")
-+ {
-+ sElement.sprintf("C%i %i %i %i %i %i", (unsigned)((path[i]["svg:x1"]->getDouble()-px)*2540),
-+ (int)((path[i]["svg:y1"]->getDouble()-py)*2540), (unsigned)((path[i]["svg:x2"]->getDouble()-px)*2540),
-+ (int)((path[i]["svg:y2"]->getDouble()-py)*2540), (unsigned)((path[i]["svg:x"]->getDouble()-px)*2540),
-+ (unsigned)((path[i]["svg:y"]->getDouble()-py)*2540));
-+ sValue.append(sElement);
-+ }
-+ else if (path[i]["libwpg:path-action"]->getStr() == "A")
-+ {
-+ sElement.sprintf("A%i %i %i %i %i %i %i", (unsigned)((path[i]["svg:rx"]->getDouble())*2540),
-+ (int)((path[i]["svg:ry"]->getDouble())*2540), (path[i]["libwpg:rotate"] ? path[i]["libwpg:rotate"]->getInt() : 0),
-+ 0, 0, (unsigned)((path[i]["svg:x"]->getDouble()-px)*2540), (unsigned)((path[i]["svg:y"]->getDouble()-py)*2540));
-+ sValue.append(sElement);
-+ }
-+ else if (path[i]["libwpg:path-action"]->getStr() == "Z" && i >= (path.count() - 1))
-+ sValue.append(" Z");
-+ }
-+ pDrawPathElement->addAttribute("svg:d", sValue);
-+ mBodyElements.push_back(pDrawPathElement);
-+ mBodyElements.push_back(new TagCloseElement("draw:path"));
-+}
-+
-+void OdgExporter::drawGraphicObject(const ::WPXPropertyList &propList, const ::WPXBinaryData& binaryData)
-+{
-+ if (!propList["libwpg:mime-type"] && propList["libwpg:mime-type"]->getStr().len() <= 0)
-+ return;
-+ TagOpenElement *pDrawFrameElement = new TagOpenElement("draw:frame");
-+
-+
-+ WPXString sValue;
-+ if (propList["svg:x"])
-+ pDrawFrameElement->addAttribute("svg:x", propList["svg:x"]->getStr());
-+ if (propList["svg:y"])
-+ pDrawFrameElement->addAttribute("svg:y", propList["svg:y"]->getStr());
-+ if (propList["svg:height"])
-+ pDrawFrameElement->addAttribute("svg:height", propList["svg:height"]->getStr());
-+ if (propList["svg:width"])
-+ pDrawFrameElement->addAttribute("svg:width", propList["svg:width"]->getStr());
-+ mBodyElements.push_back(pDrawFrameElement);
-+
-+ mBodyElements.push_back(new TagOpenElement("draw:image"));
-+
-+ mBodyElements.push_back(new TagOpenElement("office:binary-data"));
-+
-+ ::WPXString base64Binary = binaryData.getBase64Data();
-+ mBodyElements.push_back(new CharDataElement(base64Binary.cstr()));
-+
-+ mBodyElements.push_back(new TagCloseElement("office:binary-data"));
-+
-+ mBodyElements.push_back(new TagCloseElement("draw:image"));
-+
-+ mBodyElements.push_back(new TagCloseElement("draw:frame"));
-+}
-+
-+void OdgExporter::writeGraphicsStyle()
-+{
-+#if 0
-+ if(mxStyle["libwpg:stroke-solid"] && !mxStyle["libwpg:stroke-solid"]->getInt() && (mxDashArray.count() >=2 ) )
-+ {
-+ // ODG only supports dashes with the same length of spaces inbetween
-+ // here we take the first space and assume everything else the same
-+ // note that dash length is written in percentage ?????????????????
-+ double distance = mxDashArray.at(1);
-+ TagOpenElement *pDrawStrokeDashElement = new TagOpenElement("draw:stroke-dash");
-+ pDrawStrokeDashElement->addAttribute("draw:style", "rect");
-+ WPXString sValue;
-+ sValue.sprintf("Dash_%i", miDashIndex++);
-+ pDrawStrokeDashElement->addAttribute("draw:name", sValue);
-+ sValue = doubleToString(distance); sValue.append("in");
-+ pDrawStrokeDashElement->addAttribute("draw:distance", sValue);
-+ WPXString sName;
-+ // We have to find out how to do this intelligently, since the ODF is allowing only
-+ // two pairs draw:dots1 draw:dots1-length and draw:dots2 draw:dots2-length
-+ for(unsigned i = 0; i < mxDashArray.count()/2 && i < 2; i++)
-+ {
-+ sName.sprintf("draw:dots%i", i+1);
-+ pDrawStrokeDashElement->addAttribute(sName.cstr(), "1");
-+ sName.sprintf("draw:dots%i-length", i+1);
-+ sValue = doubleToString(mxDashArray.at(i*2)); sValue.append("in");
-+ pDrawStrokeDashElement->addAttribute(sName.cstr(), sValue);
-+ }
-+ mGraphicsStrokeDashStyles.push_back(pDrawStrokeDashElement);
-+ mGraphicsStrokeDashStyles.push_back(new TagCloseElement("draw:stroke-dash"));
-+ }
-+#endif
-+ if(mxStyle["draw:fill"] && mxStyle["draw:fill"]->getStr() == "gradient" && mxGradient.count() >= 2)
-+ {
-+ TagOpenElement *pDrawGradientElement = new TagOpenElement("draw:gradient");
-+ pDrawGradientElement->addAttribute("draw:style", "linear");
-+ WPXString sValue;
-+ sValue.sprintf("Gradient_%i", miGradientIndex++);
-+ pDrawGradientElement->addAttribute("draw:name", sValue);
-+
-+ // ODG angle unit is 0.1 degree
-+ double angle = mxStyle["draw:angle"] ? -mxStyle["draw:angle"]->getDouble() : 0.0;
-+ while(angle < 0)
-+ angle += 360;
-+ while(angle > 360)
-+ angle -= 360;
-+
-+ sValue.sprintf("%i", (unsigned)(angle*10));
-+ pDrawGradientElement->addAttribute("draw:angle", sValue);
-+
-+ pDrawGradientElement->addAttribute("draw:start-color", mxGradient[0]["svg:stop-color"]->getStr().cstr());
-+ pDrawGradientElement->addAttribute("draw:end-color", mxGradient[1]["svg:stop-color"]->getStr().cstr());
-+ pDrawGradientElement->addAttribute("draw:start-intensity", "100%");
-+ pDrawGradientElement->addAttribute("draw:end-intensity", "100%");
-+ pDrawGradientElement->addAttribute("draw:border", "0%");
-+ mGraphicsGradientStyles.push_back(pDrawGradientElement);
-+ mGraphicsGradientStyles.push_back(new TagCloseElement("draw:gradient"));
-+ }
-+
-+ TagOpenElement *pStyleStyleElement = new TagOpenElement("style:style");
-+ WPXString sValue;
-+ sValue.sprintf("gr%i", miGraphicsStyleIndex);
-+ pStyleStyleElement->addAttribute("style:name", sValue);
-+ pStyleStyleElement->addAttribute("style:family", "graphic");
-+ pStyleStyleElement->addAttribute("style:parent-style-name", "standard");
-+ mGraphicsAutomaticStyles.push_back(pStyleStyleElement);
-+
-+ TagOpenElement *pStyleGraphicsPropertiesElement = new TagOpenElement("style:graphic-properties");
-+
-+ if(!(mxStyle["draw:stroke"] && mxStyle["draw:stroke"]->getStr() == "none") && mxStyle["svg:stroke-width"] && mxStyle["svg:stroke-width"]->getDouble() > 0.0)
-+ {
-+ if (mxStyle["svg:stroke-width"])
-+ pStyleGraphicsPropertiesElement->addAttribute("svg:stroke-width", mxStyle["svg:stroke-width"]->getStr());
-+
-+ if (mxStyle["svg:stroke-color"])
-+ pStyleGraphicsPropertiesElement->addAttribute("svg:stroke-color", mxStyle["svg:stroke-color"]->getStr());
-+ if (mxStyle["svg:stroke-opacity"] && mxStyle["svg:stroke-opacity"]->getDouble() != 1.0)
-+ pStyleGraphicsPropertiesElement->addAttribute("svg:stroke-opacity", mxStyle["svg:stroke-opacity"]->getStr());
-+
-+
-+ if(mxStyle["libwpg:stroke-solid"] && mxStyle["libwpg:stroke-solid"]->getInt())
-+ pStyleGraphicsPropertiesElement->addAttribute("draw:stroke", "solid");
-+#if 0
-+ else
-+ {
-+ pStyleGraphicsPropertiesElement->addAttribute("draw:stroke", "dash");
-+ sValue.sprintf("Dash_%i", miDashIndex-1);
-+ pStyleGraphicsPropertiesElement->addAttribute("draw:stroke-dash", sValue);
-+ }
-+#endif
-+ }
-+ else
-+ pStyleGraphicsPropertiesElement->addAttribute("draw:stroke", "none");
-+
-+ if(mxStyle["draw:fill"] && mxStyle["draw:fill"]->getStr() == "none")
-+ pStyleGraphicsPropertiesElement->addAttribute("draw:fill", "none");
-+
-+ if(mxStyle["draw:fill"] && mxStyle["draw:fill"]->getStr() == "solid")
-+ {
-+ pStyleGraphicsPropertiesElement->addAttribute("draw:fill", "solid");
-+ if (mxStyle["draw:fill-color"])
-+ pStyleGraphicsPropertiesElement->addAttribute("draw:fill-color", mxStyle["draw:fill-color"]->getStr());
-+ if (mxStyle["draw:opacity"] && mxStyle["draw:opacity"]->getDouble() != 1.0)
-+ pStyleGraphicsPropertiesElement->addAttribute("draw:opacity", mxStyle["draw:opacity"]->getStr());
-+ }
-+
-+ if(mxStyle["draw:fill"] && mxStyle["draw:fill"]->getStr() == "gradient")
-+ {
-+ if (mxGradient.count() >= 2)
-+ {
-+ pStyleGraphicsPropertiesElement->addAttribute("draw:fill", "gradient");
-+ sValue.sprintf("Gradient_%i", miGradientIndex-1);
-+ pStyleGraphicsPropertiesElement->addAttribute("draw:fill-gradient-name", sValue);
-+ }
-+ else
-+ pStyleGraphicsPropertiesElement->addAttribute("draw:fill", "none");
-+ }
-+
-+ mGraphicsAutomaticStyles.push_back(pStyleGraphicsPropertiesElement);
-+ mGraphicsAutomaticStyles.push_back(new TagCloseElement("style:graphic-properties"));
-+
-+ mGraphicsAutomaticStyles.push_back(new TagCloseElement("style:style"));
-+ miGraphicsStyleIndex++;
-+}
-+
-+WPXString OdgExporter::doubleToString(const double value)
-+{
-+ WPXString tempString;
-+ tempString.sprintf("%.4f", value);
-+ std::string decimalPoint(localeconv()->decimal_point);
-+ if ((decimalPoint.size() == 0) || (decimalPoint == "."))
-+ return tempString;
-+ std::string stringValue(tempString.cstr());
-+ if (!stringValue.empty())
-+ {
-+ std::string::size_type pos;
-+ while ((pos = stringValue.find(decimalPoint)) != std::string::npos)
-+ stringValue.replace(pos,decimalPoint.size(),".");
-+ }
-+ return WPXString(stringValue.c_str());
-+}
---- writerperfect/source/filter/OdgExporter.hxx 1970-01-01 01:00:00.000000000 +0100
-+++ writerperfect/source/filter/OdgExporter.hxx 2010-11-06 23:11:25.000000000 +0100
-@@ -0,0 +1,90 @@
-+/* libwpg
-+ * Copyright (C) 2006 Ariya Hidayat (ariya@kde.org)
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Library General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library 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., 51 Franklin Street, Fifth Floor,
-+ * Boston, MA 02111-1301 USA
-+ *
-+ * For further information visit http://libwpg.sourceforge.net
-+ */
-+
-+/* "This product is not manufactured, approved, or supported by
-+ * Corel Corporation or Corel Corporation Limited."
-+ */
-+#ifndef __ODGEXPORTER_HXX__
-+#define __ODGEXPORTER_HXX__
-+
-+#include <iostream>
-+#include <sstream>
-+#include <string>
-+
-+#include <libwpd/libwpd.h>
-+#include <libwpg/libwpg.h>
-+#include "DocumentElement.hxx"
-+#include "DocumentHandler.hxx"
-+#include "FilterInternal.hxx"
-+
-+class OdgExporter : public libwpg::WPGPaintInterface {
-+public:
-+ OdgExporter(DocumentHandlerInterface *pHandler);
-+ ~OdgExporter();
-+
-+ void startGraphics(const ::WPXPropertyList &propList);
-+ void endGraphics();
-+ void startLayer(const ::WPXPropertyList &propList);
-+ void endLayer();
-+ void startEmbeddedGraphics(const ::WPXPropertyList& /*propList*/) {}
-+ void endEmbeddedGraphics() {}
-+
-+ void setStyle(const ::WPXPropertyList &propList, const ::WPXPropertyListVector& gradient);
-+
-+ void drawRectangle(const ::WPXPropertyList &propList);
-+ void drawEllipse(const ::WPXPropertyList &propList);
-+ void drawPolyline(const ::WPXPropertyListVector& vertices);
-+ void drawPolygon(const ::WPXPropertyListVector& vertices);
-+ void drawPath(const ::WPXPropertyListVector& path);
-+ void drawGraphicObject(const ::WPXPropertyList &propList, const ::WPXBinaryData& binaryData);
-+ void startTextObject(const ::WPXPropertyList & /*propList*/, const ::WPXPropertyListVector &/*path*/) {}
-+ void endTextObject() {}
-+ void startTextLine(const ::WPXPropertyList & /*propList*/) {}
-+ void endTextLine() {}
-+ void startTextSpan(const ::WPXPropertyList & /*propList*/) {}
-+ void endTextSpan() {}
-+ void insertText(const ::WPXString & /*str*/) {}
-+
-+private:
-+ void writeGraphicsStyle();
-+ WPXString doubleToString(const double value);
-+ void drawPolySomething(const ::WPXPropertyListVector& vertices, bool isClosed);
-+
-+ // body elements
-+ std::vector <DocumentElement *> mBodyElements;
-+
-+ // graphics styles
-+ std::vector<DocumentElement *> mGraphicsStrokeDashStyles;
-+ std::vector<DocumentElement *> mGraphicsGradientStyles;
-+ std::vector<DocumentElement *> mGraphicsAutomaticStyles;
-+
-+ DocumentHandlerInterface *mpHandler;
-+
-+ ::WPXPropertyList mxStyle;
-+ ::WPXPropertyListVector mxGradient;
-+ int miGradientIndex;
-+ int miDashIndex;
-+ int miGraphicsStyleIndex;
-+ double mfWidth;
-+ double mfHeight;
-+};
-+
-+#endif // __ODGEXPORTER_HXX__
---- writerperfect/source/filter/PageSpan.cxx 2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/filter/PageSpan.cxx 2010-11-06 23:09:43.000000000 +0100
-@@ -29,6 +29,7 @@
- #include "FilterInternal.hxx"
- #include "PageSpan.hxx"
- #include "DocumentElement.hxx"
-+#include "DocumentHandler.hxx"
-
- PageSpan::PageSpan(const WPXPropertyList &xPropList) :
- mxPropList(xPropList),
-@@ -39,10 +40,12 @@
- {
- }
-
--PageSpan::~PageSpan()
--{
-+namespace {
- typedef std::vector<DocumentElement *>::iterator DEVIter;
-+}
-
-+PageSpan::~PageSpan()
-+{
- if (mpHeaderContent)
- {
- for (DEVIter iterHeaderContent = mpHeaderContent->begin();
-@@ -88,39 +91,110 @@
- return 0; // should never happen
- }
-
--void PageSpan::writePageMaster(const int iNum, DocumentHandler *pHandler) const
-+double PageSpan::getMarginLeft() const
- {
-- WPXPropertyList propList;
-+ if (mxPropList["fo:margin-left"])
-+ return mxPropList["fo:margin-left"]->getDouble();
-+
-+ return 0.0;
-+}
-+
-+double PageSpan::getMarginRight() const
-+{
-+ if (mxPropList["fo:margin-right"])
-+ return mxPropList["fo:margin-right"]->getDouble();
-+
-+ return 0.0;
-+}
-+
-+void PageSpan::setHeaderContent(std::vector<DocumentElement *> * pHeaderContent)
-+{
-+ if (mpHeaderContent)
-+ {
-+ for (DEVIter iterHeaderContent = mpHeaderContent->begin();
-+ iterHeaderContent != mpHeaderContent->end();
-+ iterHeaderContent++)
-+ delete(*iterHeaderContent);
-+ delete mpHeaderContent;
-+ }
-+
-+ mpHeaderContent = pHeaderContent;
-+}
-+
-+void PageSpan::setFooterContent(std::vector<DocumentElement *> * pFooterContent)
-+{
-+ if (mpFooterContent)
-+ {
-+ for (DEVIter iterFooterContent = mpFooterContent->begin();
-+ iterFooterContent != mpFooterContent->end();
-+ iterFooterContent++)
-+ delete(*iterFooterContent);
-+ delete mpFooterContent;
-+ }
-+
-+ mpFooterContent = pFooterContent;
-+}
-+
-+void PageSpan::setHeaderLeftContent(std::vector<DocumentElement *> * pHeaderContent)
-+{
-+ if (mpHeaderLeftContent)
-+ {
-+ for (DEVIter iterHeaderLeftContent = mpHeaderLeftContent->begin();
-+ iterHeaderLeftContent != mpHeaderLeftContent->end();
-+ iterHeaderLeftContent++)
-+ delete(*iterHeaderLeftContent);
-+ delete mpHeaderLeftContent;
-+ }
-
-- WPXString sPageMasterName;
-- sPageMasterName.sprintf("PM%i", iNum /* +2 */);
-- propList.insert("style:name", sPageMasterName);
-+ mpHeaderLeftContent = pHeaderContent;
-+}
-+
-+void PageSpan::setFooterLeftContent(std::vector<DocumentElement *> * pFooterContent)
-+{
-+ if (mpFooterLeftContent)
-+ {
-+ for (DEVIter iterFooterLeftContent = mpFooterLeftContent->begin();
-+ iterFooterLeftContent != mpFooterLeftContent->end();
-+ iterFooterLeftContent++)
-+ delete(*iterFooterLeftContent);
-+ delete mpFooterLeftContent;
-+ }
-
-- pHandler->startElement("style:page-master", propList);
-+ mpFooterLeftContent = pFooterContent;
-+}
-+
-+void PageSpan::writePageLayout(const int iNum, DocumentHandlerInterface *pHandler) const
-+{
-+ WPXPropertyList propList;
-+
-+ WPXString sPageLayoutName;
-+ sPageLayoutName.sprintf("PM%i", iNum+2);
-+ propList.insert("style:name", sPageLayoutName);
-+ pHandler->startElement("style:page-layout", propList);
-
- WPXPropertyList tempPropList = mxPropList;
- if (!tempPropList["style:writing-mode"])
- tempPropList.insert("style:writing-mode", WPXString("lr-tb"));
- if (!tempPropList["style:footnote-max-height"])
-- tempPropList.insert("style:footnote-max-height", WPXString("0inch"));
-- pHandler->startElement("style:properties", tempPropList);
-+ tempPropList.insert("style:footnote-max-height", WPXString("0in"));
-+ pHandler->startElement("style:page-layout-properties", tempPropList);
-
- WPXPropertyList footnoteSepPropList;
-- footnoteSepPropList.insert("style:width", WPXString("0.0071inch"));
-- footnoteSepPropList.insert("style:distance-before-sep", WPXString("0.0398inch"));
-- footnoteSepPropList.insert("style:distance-after-sep", WPXString("0.0398inch"));
-+ footnoteSepPropList.insert("style:width", WPXString("0.0071in"));
-+ footnoteSepPropList.insert("style:distance-before-sep", WPXString("0.0398in"));
-+ footnoteSepPropList.insert("style:distance-after-sep", WPXString("0.0398in"));
- footnoteSepPropList.insert("style:adjustment", WPXString("left"));
- footnoteSepPropList.insert("style:rel-width", WPXString("25%"));
- footnoteSepPropList.insert("style:color", WPXString("#000000"));
- pHandler->startElement("style:footnote-sep", footnoteSepPropList);
-
- pHandler->endElement("style:footnote-sep");
-- pHandler->endElement("style:properties");
-- pHandler->endElement("style:page-master");
-+ pHandler->endElement("style:page-layout-properties");
-+ pHandler->endElement("style:page-layout");
- }
-
--void PageSpan::writeMasterPages(const int iStartingNum, const int iPageMasterNum, const bool bLastPageSpan,
-- DocumentHandler *pHandler) const
-+void PageSpan::writeMasterPages(const int iStartingNum, const int iPageLayoutNum, const bool bLastPageSpan,
-+ DocumentHandlerInterface *pHandler) const
- {
- int iSpan = 0;
- (bLastPageSpan) ? iSpan = 1 : iSpan = getSpan();
-@@ -128,29 +202,58 @@
- for (int i=iStartingNum; i<(iStartingNum+iSpan); i++)
- {
- TagOpenElement masterPageOpen("style:master-page");
-- WPXString sMasterPageName;
-- sMasterPageName.sprintf("Page Style %i", i);
-- WPXString sPageMasterName;
-- sPageMasterName.sprintf("PM%i", iPageMasterNum /* +2 */);
-+ WPXString sMasterPageName, sMasterPageDisplayName;
-+ sMasterPageName.sprintf("Page_Style_%i", i);
-+ sMasterPageDisplayName.sprintf("Page Style %i", i);
-+ WPXString sPageLayoutName;
- WPXPropertyList propList;
-+ sPageLayoutName.sprintf("PM%i", iPageLayoutNum+2);
- propList.insert("style:name", sMasterPageName);
-- propList.insert("style:page-master-name", sPageMasterName);
-+ propList.insert("style:display-name", sMasterPageDisplayName);
-+ propList.insert("style:page-layout-name", sPageLayoutName);
- if (!bLastPageSpan)
- {
- WPXString sNextMasterPageName;
-- sNextMasterPageName.sprintf("Page Style %i", (i+1));
-+ sNextMasterPageName.sprintf("Page_Style_%i", (i+1));
- propList.insert("style:next-style-name", sNextMasterPageName);
- }
- pHandler->startElement("style:master-page", propList);
-
- if (mpHeaderContent)
-+ {
- _writeHeaderFooter("style:header", *mpHeaderContent, pHandler);
-+ pHandler->endElement("style:header");
- if (mpHeaderLeftContent)
-+ {
- _writeHeaderFooter("style:header-left", *mpHeaderLeftContent, pHandler);
-+ pHandler->endElement("style:header-left");
-+ }
-+ }
-+ else if (mpHeaderLeftContent)
-+ {
-+ TagOpenElement("style:header").write(pHandler);
-+ pHandler->endElement("style:header");
-+ _writeHeaderFooter("style:header-left", *mpHeaderLeftContent, pHandler);
-+ pHandler->endElement("style:header-left");
-+ }
-+
- if (mpFooterContent)
-+ {
- _writeHeaderFooter("style:footer", *mpFooterContent, pHandler);
-+ pHandler->endElement("style:footer");
- if (mpFooterLeftContent)
-+ {
- _writeHeaderFooter("style:footer-left", *mpFooterLeftContent, pHandler);
-+ pHandler->endElement("style:footer-left");
-+ }
-+ }
-+ else if (mpFooterLeftContent)
-+ {
-+ TagOpenElement("style:footer").write(pHandler);
-+ pHandler->endElement("style:footer");
-+ _writeHeaderFooter("style:footer-left", *mpFooterLeftContent, pHandler);
-+ pHandler->endElement("style:footer-left");
-+ }
-
- pHandler->endElement("style:master-page");
- }
-@@ -159,7 +261,7 @@
-
- void PageSpan::_writeHeaderFooter(const char *headerFooterTagName,
- const std::vector<DocumentElement *> & headerFooterContent,
-- DocumentHandler *pHandler) const
-+ DocumentHandlerInterface *pHandler) const
- {
- TagOpenElement headerFooterOpen(headerFooterTagName);
- headerFooterOpen.write(pHandler);
-@@ -168,8 +270,6 @@
- iter++) {
- (*iter)->write(pHandler);
- }
-- TagCloseElement headerFooterClose(headerFooterTagName);
-- headerFooterClose.write(pHandler);
- }
-
- /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
---- writerperfect/source/filter/PageSpan.hxx 2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/PageSpan.hxx 2010-11-06 23:09:43.000000000 +0100
-@@ -27,35 +27,30 @@
- */
- #ifndef _PAGESPAN_H
- #define _PAGESPAN_H
--#if defined _MSC_VER
--#pragma warning( push, 1 )
--#endif
- #include <libwpd/libwpd.h>
--#if defined _MSC_VER
--#pragma warning( pop )
--#endif
- #include <vector>
-
- class DocumentElement;
--class DocumentHandler;
-+class DocumentHandlerInterface;
-
- class PageSpan
- {
- public:
- PageSpan(const WPXPropertyList &xPropList);
- virtual ~PageSpan();
-- void writePageMaster(const int iNum, DocumentHandler *pHandler) const;
-- void writeMasterPages(const int iStartingNum, const int iPageMasterNum, const bool bLastPageSpan, DocumentHandler *pHandler) const;
-+ void writePageLayout(const int iNum, DocumentHandlerInterface *pHandler) const;
-+ void writeMasterPages(const int iStartingNum, const int iPageLayoutNum, const bool bLastPageSpan, DocumentHandlerInterface *pHandler) const;
- int getSpan() const;
-+ double getMarginLeft() const;
-+ double getMarginRight() const;
-
-- const std::vector<DocumentElement *> * getHeaderContent() const { return mpHeaderContent; }
-- void setHeaderContent(std::vector<DocumentElement *> * pHeaderContent) { mpHeaderContent = pHeaderContent; }
-- void setFooterContent(std::vector<DocumentElement *> * pFooterContent) { mpFooterContent = pFooterContent; }
-- void setHeaderLeftContent(std::vector<DocumentElement *> * pHeaderContent) { mpHeaderLeftContent = pHeaderContent; }
-- void setFooterLeftContent(std::vector<DocumentElement *> * pFooterContent) { mpFooterLeftContent = pFooterContent; }
-+ void setHeaderContent(std::vector<DocumentElement *> * pHeaderContent);
-+ void setFooterContent(std::vector<DocumentElement *> * pFooterContent);
-+ void setHeaderLeftContent(std::vector<DocumentElement *> * pHeaderContent);
-+ void setFooterLeftContent(std::vector<DocumentElement *> * pFooterContent);
- protected:
- void _writeHeaderFooter(const char *headerFooterTagName, const std::vector<DocumentElement *> & headerFooterContent,
-- DocumentHandler *pHandler) const;
-+ DocumentHandlerInterface *pHandler) const;
- private:
- WPXPropertyList mxPropList;
- std::vector<DocumentElement *> * mpHeaderContent;
---- writerperfect/source/filter/SectionStyle.cxx 2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/filter/SectionStyle.cxx 2010-11-06 23:09:43.000000000 +0100
-@@ -34,7 +34,7 @@
-
- #ifdef _MSC_VER
- double rint(double x);
--#endif /* _MSC_VER */
-+#endif /* _WIN32 */
-
- SectionStyle::SectionStyle(const WPXPropertyList &xPropList,
- const WPXPropertyListVector &xColumns,
-@@ -45,7 +45,7 @@
- {
- }
-
--void SectionStyle::write(DocumentHandler *pHandler) const
-+void SectionStyle::write(DocumentHandlerInterface *pHandler) const
- {
- TagOpenElement styleOpen("style:style");
- styleOpen.addAttribute("style:name", getName());
-@@ -54,7 +54,7 @@
-
- // if the number of columns is <= 1, we will never come here. This is only an additional check
- // style properties
-- pHandler->startElement("style:properties", mPropList);
-+ pHandler->startElement("style:section-properties", mPropList);
-
- // column properties
- WPXPropertyList columnProps;
-@@ -81,7 +81,7 @@
- pHandler->endElement("style:columns");
-
-
-- pHandler->endElement("style:properties");
-+ pHandler->endElement("style:section-properties");
-
- pHandler->endElement("style:style");
- }
---- writerperfect/source/filter/SectionStyle.hxx 2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/SectionStyle.hxx 2010-11-06 23:09:43.000000000 +0100
-@@ -27,14 +27,8 @@
- */
- #ifndef _SECTIONSTYLE_H
- #define _SECTIONSTYLE_H
--#if defined _MSC_VER
--#pragma warning( push, 1 )
--#endif
- #include <libwpd/libwpd.h>
- #include <libwpd/WPXPropertyListVector.h>
--#if defined _MSC_VER
--#pragma warning( pop )
--#endif
-
- #include "Style.hxx"
- #include "WriterProperties.hxx"
-@@ -44,7 +38,7 @@
- {
- public:
- SectionStyle(const WPXPropertyList &xPropList, const WPXPropertyListVector &xColumns, const char *psName);
-- virtual void write(DocumentHandler *pHandler) const;
-+ virtual void write(DocumentHandlerInterface *pHandler) const;
-
- private:
- WPXPropertyList mPropList;
---- writerperfect/source/filter/Style.hxx 2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/Style.hxx 2010-11-06 23:09:43.000000000 +0100
-@@ -28,13 +28,7 @@
-
- #ifndef _STYLE_H
- #define _STYLE_H
--#if defined _MSC_VER
--#pragma warning( push, 1 )
--#endif
- #include <libwpd/libwpd.h>
--#if defined _MSC_VER
--#pragma warning( pop )
--#endif
- #include "DocumentElement.hxx"
-
- class TopLevelElementStyle
-@@ -55,7 +49,7 @@
- Style(const WPXString &psName) : msName(psName) {}
- virtual ~Style() {}
-
-- virtual void write(DocumentHandler * /* pHandler */) const {};
-+ virtual void write(DocumentHandlerInterface * /* pHandler */) const {};
- const WPXString &getName() const { return msName; }
-
- private:
---- writerperfect/source/filter/TableStyle.cxx 2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/filter/TableStyle.cxx 2010-11-06 23:09:43.000000000 +0100
-@@ -28,7 +28,6 @@
- * Corel Corporation or Corel Corporation Limited."
- */
- #include <math.h>
--#include <string.h>
- #include "FilterInternal.hxx"
- #include "TableStyle.hxx"
- #include "DocumentElement.hxx"
-@@ -37,13 +36,15 @@
- #include <minmax.h>
- #endif
-
-+#include <string.h>
-+
- TableCellStyle::TableCellStyle(const WPXPropertyList &xPropList, const char *psName) :
- Style(psName),
- mPropList(xPropList)
- {
- }
-
--void TableCellStyle::write(DocumentHandler *pHandler) const
-+void TableCellStyle::write(DocumentHandlerInterface *pHandler) const
- {
- TagOpenElement styleOpen("style:style");
- styleOpen.addAttribute("style:name", getName());
-@@ -59,9 +60,9 @@
- if (strlen(i.key()) > 2 && strncmp(i.key(), "fo", 2) == 0)
- stylePropList.insert(i.key(), i()->clone());
- }
-- stylePropList.insert("fo:padding", "0.0382inch");
-- pHandler->startElement("style:properties", stylePropList);
-- pHandler->endElement("style:properties");
-+ stylePropList.insert("fo:padding", "0.0382in");
-+ pHandler->startElement("style:table-cell-properties", stylePropList);
-+ pHandler->endElement("style:table-cell-properties");
-
- pHandler->endElement("style:style");
- }
-@@ -72,20 +73,21 @@
- {
- }
-
--void TableRowStyle::write(DocumentHandler *pHandler) const
-+void TableRowStyle::write(DocumentHandlerInterface *pHandler) const
- {
- TagOpenElement styleOpen("style:style");
- styleOpen.addAttribute("style:name", getName());
- styleOpen.addAttribute("style:family", "table-row");
- styleOpen.write(pHandler);
-
-- TagOpenElement stylePropertiesOpen("style:properties");
-+ TagOpenElement stylePropertiesOpen("style:table-row-properties");
- if (mPropList["style:min-row-height"])
- stylePropertiesOpen.addAttribute("style:min-row-height", mPropList["style:min-row-height"]->getStr());
- else if (mPropList["style:row-height"])
- stylePropertiesOpen.addAttribute("style:row-height", mPropList["style:row-height"]->getStr());
-+ stylePropertiesOpen.addAttribute("fo:keep-together", "auto");
- stylePropertiesOpen.write(pHandler);
-- pHandler->endElement("style:properties");
-+ pHandler->endElement("style:table-row-properties");
-
- pHandler->endElement("style:style");
- }
-@@ -106,10 +108,9 @@
- delete(*iterTableCellStyles);
- for (TRSVIter iterTableRowStyles = mTableRowStyles.begin() ; iterTableRowStyles != mTableRowStyles.end(); iterTableRowStyles++)
- delete(*iterTableRowStyles);
--
- }
-
--void TableStyle::write(DocumentHandler *pHandler) const
-+void TableStyle::write(DocumentHandlerInterface *pHandler) const
- {
- TagOpenElement styleOpen("style:style");
- styleOpen.addAttribute("style:name", getName());
-@@ -118,7 +119,7 @@
- styleOpen.addAttribute("style:master-page-name", getMasterPageName()->cstr());
- styleOpen.write(pHandler);
-
-- TagOpenElement stylePropertiesOpen("style:properties");
-+ TagOpenElement stylePropertiesOpen("style:table-properties");
- if (mPropList["table:align"])
- stylePropertiesOpen.addAttribute("table:align", mPropList["table:align"]->getStr());
- if (mPropList["fo:margin-left"])
-@@ -131,7 +132,7 @@
- stylePropertiesOpen.addAttribute("fo:break-before", mPropList["fo:break-before"]->getStr());
- stylePropertiesOpen.write(pHandler);
-
-- pHandler->endElement("style:properties");
-+ pHandler->endElement("style:table-properties");
-
- pHandler->endElement("style:style");
-
-@@ -139,15 +140,15 @@
- WPXPropertyListVector::Iter j(mColumns);
- for (j.rewind(); j.next();)
- {
-- TagOpenElement styleNestedOpen("style:style");
-+ TagOpenElement styleOpen2("style:style");
- WPXString sColumnName;
- sColumnName.sprintf("%s.Column%i", getName().cstr(), i);
-- styleNestedOpen.addAttribute("style:name", sColumnName);
-- styleNestedOpen.addAttribute("style:family", "table-column");
-- styleNestedOpen.write(pHandler);
-+ styleOpen2.addAttribute("style:name", sColumnName);
-+ styleOpen2.addAttribute("style:family", "table-column");
-+ styleOpen2.write(pHandler);
-
-- pHandler->startElement("style:properties", j());
-- pHandler->endElement("style:properties");
-+ pHandler->startElement("style:table-column-properties", j());
-+ pHandler->endElement("style:table-column-properties");
-
- pHandler->endElement("style:style");
-
---- writerperfect/source/filter/TableStyle.hxx 2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/TableStyle.hxx 2010-11-06 23:09:43.000000000 +0100
-@@ -39,15 +39,16 @@
-
- #include "Style.hxx"
- #include "WriterProperties.hxx"
-+#include "DocumentHandlerInterface.hxx"
-
- class DocumentElement;
--class DocumentHandler;
-
- class TableCellStyle : public Style
- {
- public:
-+ virtual ~TableCellStyle() {};
- TableCellStyle(const WPXPropertyList &xPropList, const char *psName);
-- virtual void write(DocumentHandler *pHandler) const;
-+ virtual void write(DocumentHandlerInterface *pHandler) const;
- private:
- WPXPropertyList mPropList;
- };
-@@ -55,8 +56,9 @@
- class TableRowStyle : public Style
- {
- public:
-+ virtual ~TableRowStyle() {};
- TableRowStyle(const WPXPropertyList &propList, const char *psName);
-- virtual void write(DocumentHandler *pHandler) const;
-+ virtual void write(DocumentHandlerInterface *pHandler) const;
- private:
- WPXPropertyList mPropList;
- };
-@@ -65,8 +67,8 @@
- {
- public:
- TableStyle(const WPXPropertyList &xPropList, const WPXPropertyListVector &columns, const char *psName);
-- ~TableStyle();
-- virtual void write(DocumentHandler *pHandler) const;
-+ virtual ~TableStyle();
-+ virtual void write(DocumentHandlerInterface *pHandler) const;
- int getNumColumns() const { return mColumns.count(); }
- void addTableCellStyle(TableCellStyle *pTableCellStyle) { mTableCellStyles.push_back(pTableCellStyle); }
- int getNumTableCellStyles() { return mTableCellStyles.size(); }
---- writerperfect/source/filter/TextRunStyle.cxx 2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/filter/TextRunStyle.cxx 2010-11-06 23:09:43.000000000 +0100
-@@ -51,7 +51,7 @@
- delete mpPropList;
- }
-
--void ParagraphStyle::write(DocumentHandler *pHandler) const
-+void ParagraphStyle::write(DocumentHandlerInterface *pHandler) const
- {
- WRITER_DEBUG_MSG(("Writing a paragraph style..\n"));
-
-@@ -64,49 +64,53 @@
- pHandler->startElement("style:style", propList);
-
- propList.clear();
-- WPXPropertyList::Iter k((*mpPropList));
-- for (k.rewind(); k.next(); )
-+ WPXPropertyList::Iter i((*mpPropList));
-+ for (i.rewind(); i.next(); )
- {
-- if (strcmp(k.key(), "style:list-style-name") == 0)
-- propList.insert("style:list-style-name", k()->getStr());
-- if (strcmp(k.key(), "fo:margin-left") == 0)
-- propList.insert("fo:margin-left", k()->getStr());
-- if (strcmp(k.key(), "fo:margin-right") == 0)
-- propList.insert("fo:margin-right", k()->getStr());
-- if (strcmp(k.key(), "fo:text-indent") == 0)
-- propList.insert("fo:text-indent", k()->getStr());
-- if (strcmp(k.key(), "fo:margin-top") == 0)
-- propList.insert("fo:margin-top", k()->getStr());
-- if (strcmp(k.key(), "fo:margin-bottom") == 0)
-+#if 0
-+ if (strcmp(i.key(), "style:list-style-name") == 0)
-+ propList.insert("style:list-style-name", i()->getStr());
-+#endif
-+ if (strcmp(i.key(), "fo:margin-left") == 0)
-+ propList.insert("fo:margin-left", i()->getStr());
-+ if (strcmp(i.key(), "fo:margin-right") == 0)
-+ propList.insert("fo:margin-right", i()->getStr());
-+ if (strcmp(i.key(), "fo:text-indent") == 0)
-+ propList.insert("fo:text-indent", i()->getStr());
-+ if (strcmp(i.key(), "fo:margin-top") == 0)
-+ propList.insert("fo:margin-top", i()->getStr());
-+ if (strcmp(i.key(), "fo:margin-bottom") == 0)
- {
-- if (k()->getFloat() > 0.0f)
-- propList.insert("fo:margin-bottom", k()->getStr());
-+ if (i()->getDouble() > 0.0f)
-+ propList.insert("fo:margin-bottom", i()->getStr());
- else
- propList.insert("fo:margin-bottom", 0.0f);
- }
-- if (strcmp(k.key(), "fo:line-height") == 0)
-- propList.insert("fo:line-height", k()->getStr());
-- if (strcmp(k.key(), "fo:break-before") == 0)
-- propList.insert("fo:break-before", k()->getStr());
-- if (strcmp(k.key(), "fo:text-align") == 0)
-- propList.insert("fo:text-align", k()->getStr());
-- if (strcmp(k.key(), "fo:text-align-last") == 0)
-- propList.insert("fo:text-align-last", k()->getStr());
-+ if (strcmp(i.key(), "fo:line-height") == 0)
-+ propList.insert("fo:line-height", i()->getStr());
-+ if (strcmp(i.key(), "fo:break-before") == 0)
-+ propList.insert("fo:break-before", i()->getStr());
-+ if (strcmp(i.key(), "fo:text-align") == 0)
-+ propList.insert("fo:text-align", i()->getStr());
-+ if (strcmp(i.key(), "fo:text-align-last") == 0)
-+ propList.insert("fo:text-align-last", i()->getStr());
- }
-
- propList.insert("style:justify-single-word", "false");
-- pHandler->startElement("style:properties", propList);
-+ pHandler->startElement("style:paragraph-properties", propList);
-
- if (mxTabStops.count() > 0)
- {
- TagOpenElement tabListOpen("style:tab-stops");
- tabListOpen.write(pHandler);
-- WPXPropertyListVector::Iter i(mxTabStops);
-- for (i.rewind(); i.next();)
-+ WPXPropertyListVector::Iter i2(mxTabStops);
-+ for (i2.rewind(); i2.next();)
- {
-+ if (i2()["style:position"] && i2()["style:position"]->getDouble() < 0)
-+ continue;
- TagOpenElement tabStopOpen("style:tab-stop");
-
-- WPXPropertyList::Iter j(i());
-+ WPXPropertyList::Iter j(i2());
- for (j.rewind(); j.next(); )
- {
- tabStopOpen.addAttribute(j.key(), j()->getStr().cstr());
-@@ -117,7 +121,7 @@
- pHandler->endElement("style:tab-stops");
- }
-
-- pHandler->endElement("style:properties");
-+ pHandler->endElement("style:paragraph-properties");
- pHandler->endElement("style:style");
- }
-
-@@ -127,7 +131,7 @@
- {
- }
-
--void SpanStyle::write(DocumentHandler *pHandler) const
-+void SpanStyle::write(DocumentHandlerInterface *pHandler) const
- {
- WRITER_DEBUG_MSG(("Writing a span style..\n"));
- WPXPropertyList styleOpenList;
-@@ -145,9 +149,14 @@
-
- if (mPropList["fo:font-size"])
- {
-+ if (mPropList["fo:font-size"]->getDouble() > 0.0f)
-+ {
- propList.insert("style:font-size-asian", mPropList["fo:font-size"]->getStr());
- propList.insert("style:font-size-complex", mPropList["fo:font-size"]->getStr());
- }
-+ else
-+ propList.remove("fo:font-size");
-+ }
-
- if (mPropList["fo:font-weight"])
- {
-@@ -161,9 +170,9 @@
- propList.insert("style:font-style-complex", mPropList["fo:font-style"]->getStr());
- }
-
-- pHandler->startElement("style:properties", propList);
-+ pHandler->startElement("style:text-properties", propList);
-
-- pHandler->endElement("style:properties");
-+ pHandler->endElement("style:text-properties");
- pHandler->endElement("style:style");
- }
-
---- writerperfect/source/filter/TextRunStyle.hxx 2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/TextRunStyle.hxx 2010-11-06 23:09:43.000000000 +0100
-@@ -30,26 +30,19 @@
-
- #ifndef _TEXTRUNSTYLE_H
- #define _TEXTRUNSTYLE_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"
-
- class TagOpenElement;
- class DocumentElement;
--class DocumentHandler;
-
- class ParagraphStyle
- {
- public:
- ParagraphStyle(WPXPropertyList *propList, const WPXPropertyListVector &tabStops, const WPXString &sName);
- virtual ~ParagraphStyle();
-- virtual void write(DocumentHandler *pHandler) const;
-+ virtual void write(DocumentHandlerInterface *pHandler) const;
- WPXString getName() const { return msName; }
- private:
- WPXPropertyList *mpPropList;
-@@ -62,7 +55,7 @@
- {
- public:
- SpanStyle(const char *psName, const WPXPropertyList &xPropList);
-- virtual void write(DocumentHandler *pHandler) const;
-+ virtual void write(DocumentHandlerInterface *pHandler) const;
-
- private:
- WPXPropertyList mPropList;
---- writerperfect/source/filter/WriterProperties.hxx 2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/filter/WriterProperties.hxx 2010-11-06 23:09:43.000000000 +0100
-@@ -33,7 +33,6 @@
- #define IMP_DEFAULT_FONT_NAME "Times New Roman"
- #define IMP_DEFAULT_FONT_SIZE 12.0f
- #define IMP_DEFAULT_FONT_PITCH "variable"
--#define IMP_DEFAULT_FONT_COLOR (new RGBSColor(0x00,0x00,0x00,0x64))
- #endif
-
- /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
---- writerperfect/source/stream/WPXSvStream.cxx 2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/stream/WPXSvStream.cxx 2010-11-06 23:09:43.000000000 +0100
-@@ -10,7 +10,7 @@
- using namespace ::com::sun::star::io;
-
- WPXSvInputStream::WPXSvInputStream( Reference< XInputStream > xStream ) :
-- WPSInputStream(),
-+ WPXInputStream(),
- mxChildStorage(),
- mxChildStream(),
- mxStream(xStream),
-@@ -42,7 +42,7 @@
- {
- }
-
--const uint8_t * WPXSvInputStream::read(size_t numBytes, size_t &numBytesRead)
-+const unsigned char * WPXSvInputStream::read(unsigned long numBytes, unsigned long &numBytesRead)
- {
- numBytesRead = 0;
-
-@@ -53,7 +53,7 @@
- if (numBytesRead == 0)
- return 0;
-
-- return (const uint8_t *)maData.getConstArray();
-+ return (const unsigned char *)maData.getConstArray();
- }
-
- long WPXSvInputStream::tell()
-@@ -169,9 +169,4 @@
- return 0;
- }
-
--WPXInputStream * WPXSvInputStream::getDocumentOLEStream()
--{
-- return getDocumentOLEStream( "PerfectOffice_MAIN" );
--}
--
- /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
---- writerperfect/source/stream/WPXSvStream.h 2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/stream/WPXSvStream.h 2010-11-06 23:09:43.000000000 +0100
-@@ -13,13 +13,12 @@
- #if defined _MSC_VER
- #pragma warning( push, 1 )
- #endif
--#include <libwps/WPSStream.h>
--#include <libwpd/WPXStream.h>
-+#include <libwpd-stream/WPXStream.h>
- #if defined _MSC_VER
- #pragma warning( pop )
- #endif
-
--class WPXSvInputStream : public WPSInputStream
-+class WPXSvInputStream : public WPXInputStream
- {
- public:
- WPXSvInputStream( ::com::sun::star::uno::Reference<
-@@ -27,10 +26,9 @@
- virtual ~WPXSvInputStream();
-
- virtual bool isOLEStream();
-- virtual WPXInputStream * getDocumentOLEStream();
- virtual WPXInputStream * getDocumentOLEStream(const char *name);
-
-- virtual const uint8_t *read(size_t numBytes, size_t &numBytesRead);
-+ virtual const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead);
- virtual int seek(long offset, WPX_SEEK_TYPE seekType);
- virtual long tell();
- virtual bool atEOS();
---- writerperfect/source/wpdimp/makefile.mk 2010-10-10 13:15:28.000000000 +0200
-+++ writerperfect/source/wpdimp/makefile.mk 2010-11-06 23:09:43.000000000 +0100
-@@ -10,6 +10,10 @@
- INCPRE+=$(LIBWPD_CFLAGS)
- .ENDIF
-
-+.IF "$(SYSTEM_LIBWPG)" == "YES"
-+INCPRE+=$(LIBWPG_CFLAGS)
-+.ENDIF
-+
- .IF "$(SYSTEM_LIBWPS)" == "YES"
- INCPRE+=$(LIBWPS_CFLAGS)
- .ENDIF
---- writerperfect/source/wpdimp/WordPerfectCollector.cxx 2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/wpdimp/WordPerfectCollector.cxx 2010-11-06 23:09:43.000000000 +0100
-@@ -36,8 +36,9 @@
- #pragma warning( pop )
- #endif
-
--WordPerfectCollector::WordPerfectCollector(WPSInputStream *pInput, DocumentHandler *pHandler) :
-- DocumentCollector(pInput, pHandler)
-+WordPerfectCollector::WordPerfectCollector(WPXInputStream *pInput, DocumentHandlerInterface *pHandler, const rtl::OString& password) :
-+ DocumentCollector(pInput, pHandler),
-+ maUtf8Password(password)
- {
- }
-
-@@ -45,9 +46,13 @@
- {
- }
-
--bool WordPerfectCollector::parseSourceDocument(WPSInputStream &input)
-+bool WordPerfectCollector::parseSourceDocument(WPXInputStream &input)
- {
-- WPDResult result = WPDocument::parse(&input, static_cast<WPXHLListenerImpl *>(this));
-+ WPDResult result;
-+ if (maUtf8Password.getLength())
-+ result = WPDocument::parse(&input, static_cast<WPXDocumentInterface *>(this), maUtf8Password.getStr());
-+ else
-+ result = WPDocument::parse(&input, static_cast<WPXDocumentInterface *>(this), NULL);
- if (result != WPD_OK)
- return false;
-
---- writerperfect/source/wpdimp/WordPerfectCollector.hxx 2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/wpdimp/WordPerfectCollector.hxx 2010-11-06 23:09:43.000000000 +0100
-@@ -31,13 +31,17 @@
- #define _WORDPERFECTCOLLECTOR_HXX
-
- #include "filter/DocumentCollector.hxx"
-+#include "filter/DocumentHandlerInterface.hxx"
-+#include <rtl/ustring.hxx>
-
- class WordPerfectCollector : public DocumentCollector
- {
- public:
-- WordPerfectCollector(WPSInputStream *pInput, DocumentHandler *pHandler);
-+ WordPerfectCollector(WPXInputStream *pInput, DocumentHandlerInterface *pHandler, const rtl::OString& password);
- virtual ~WordPerfectCollector();
-- bool parseSourceDocument(WPSInputStream &pInput);
-+ bool parseSourceDocument(WPXInputStream &pInput);
-+private:
-+ rtl::OString maUtf8Password;
- };
- #endif
-
---- writerperfect/source/wpdimp/WordPerfectImportFilter.cxx 2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/wpdimp/WordPerfectImportFilter.cxx 2010-11-06 23:09:43.000000000 +0100
-@@ -1,7 +1,5 @@
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
--/* WordPerfectImportFilter: Sets up the filter, and calls DocumentCollector
-- * to do the actual filtering
-- *
-+/*
- * Copyright (C) 2000 by Sun Microsystems, Inc.
- * Copyright (C) 2002-2004 William Lachance (wlach@interlog.com)
- * Copyright (C) 2004 Net Integration Technologies (http://www.net-itech.com)
-@@ -32,16 +30,16 @@
- #include <osl/diagnose.h>
- #include <rtl/tencinfo.h>
- #include <com/sun/star/lang/XMultiServiceFactory.hpp>
--#include <com/sun/star/io/XInputStream.hpp>
- #include <com/sun/star/xml/sax/XAttributeList.hpp>
- #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
- #include <com/sun/star/xml/sax/InputSource.hpp>
- #include <com/sun/star/xml/sax/XParser.hpp>
--
-+#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
- #include <com/sun/star/ucb/XCommandEnvironment.hpp>
-
- #include <xmloff/attrlist.hxx>
- #include <ucbhelper/content.hxx>
-+#include <sfx2/passwd.hxx>
-
- #include "filter/FilterInternal.hxx"
- #include "filter/DocumentHandler.hxx"
-@@ -107,11 +104,38 @@
- OSL_ASSERT( 0 );
- return sal_False;
- }
-- OString sFileName;
-- sFileName = OUStringToOString(sURL, RTL_TEXTENCODING_INFO_ASCII);
-+
-+ WPXSvInputStream input( xInputStream );
-+
-+ OString aUtf8Passwd;
-+
-+#if 1
-+ WPDConfidence confidence = WPDocument::isFileFormatSupported(&input);
-+
-+ if (WPD_CONFIDENCE_SUPPORTED_ENCRYPTION == confidence)
-+ {
-+ int unsuccessfulAttempts = 0;
-+ while (true )
-+ {
-+ SfxPasswordDialog aPasswdDlg( 0 );
-+ aPasswdDlg.SetMinLen(0);
-+ if(!aPasswdDlg.Execute())
-+ return sal_False;
-+ String aPasswd = aPasswdDlg.GetPassword();
-+ OUString aUniPasswd(aPasswd.GetBuffer() /*, aPasswd.Len(), RTL_TEXTENCODING_UCS2 */);
-+ aUtf8Passwd = OUStringToOString(aUniPasswd, RTL_TEXTENCODING_UTF8);
-+ if (WPD_PASSWORD_MATCH_OK == WPDocument::verifyPassword(&input, aUtf8Passwd.getStr()))
-+ break;
-+ else
-+ unsuccessfulAttempts++;
-+ if (unsuccessfulAttempts == 3) // timeout after 3 password atempts
-+ return sal_False;
-+ }
-+ }
-+#endif
-
- // An XML import service: what we push sax messages to..
-- OUString sXMLImportService ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.XMLImporter" ) );
-+ OUString sXMLImportService ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.XMLOasisImporter" ) );
- uno::Reference < XDocumentHandler > xInternalHandler( mxMSF->createInstance( sXMLImportService ), UNO_QUERY );
-
- // The XImporter sets up an empty target document for XDocumentHandler to write to..
-@@ -122,9 +146,7 @@
- // writes to in-memory target doc
- DocumentHandler xHandler(xInternalHandler);
-
-- WPXSvInputStream input( xInputStream );
--
-- WordPerfectCollector collector(&input, &xHandler);
-+ WordPerfectCollector collector(&input, &xHandler, aUtf8Passwd);
- collector.filter();
-
- return true;
-@@ -196,9 +219,9 @@
- if (input.atEOS())
- return ::rtl::OUString();
-
-- confidence = WPDocument::isFileFormatSupported(&input, false);
-+ confidence = WPDocument::isFileFormatSupported(&input);
-
-- if (confidence == WPD_CONFIDENCE_EXCELLENT)
-+ if (confidence == WPD_CONFIDENCE_EXCELLENT || confidence == WPD_CONFIDENCE_SUPPORTED_ENCRYPTION)
- sTypeName = OUString( RTL_CONSTASCII_USTRINGPARAM ( "writer_WordPerfect_Document" ) );
-
- if (sTypeName.getLength())
-@@ -255,7 +278,6 @@
- throw (RuntimeException)
- {
- Sequence < OUString > aRet(2);
--// Sequence < OUString > aRet(1);
- OUString* pArray = aRet.getArray();
- pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME1 ) );
- pArray[1] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME2 ) );
-@@ -287,4 +309,126 @@
- return WordPerfectImportFilter_getSupportedServiceNames();
- }
-
-+
-+WordPerfectImportFilterDialog::WordPerfectImportFilterDialog(const ::com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory > &r ) :
-+ mxMSF( r ) {}
-+
-+WordPerfectImportFilterDialog::~WordPerfectImportFilterDialog()
-+{
-+}
-+
-+void SAL_CALL WordPerfectImportFilterDialog::setTitle( const ::rtl::OUString& )
-+ throw (::com::sun::star::uno::RuntimeException)
-+{
-+}
-+
-+sal_Int16 SAL_CALL WordPerfectImportFilterDialog::execute()
-+ throw (::com::sun::star::uno::RuntimeException)
-+{
-+ WPXSvInputStream input( mxInputStream );
-+
-+ OString aUtf8Passwd;
-+
-+ WPDConfidence confidence = WPDocument::isFileFormatSupported(&input);
-+
-+ if (WPD_CONFIDENCE_SUPPORTED_ENCRYPTION == confidence)
-+ {
-+ int unsuccessfulAttempts = 0;
-+ while (true )
-+ {
-+ SfxPasswordDialog aPasswdDlg(0);
-+ aPasswdDlg.SetMinLen(0);
-+ if(!aPasswdDlg.Execute())
-+ return com::sun::star::ui::dialogs::ExecutableDialogResults::CANCEL;
-+ msPassword = ::rtl::OUString(aPasswdDlg.GetPassword().GetBuffer());
-+ aUtf8Passwd = OUStringToOString(msPassword, RTL_TEXTENCODING_UTF8);
-+ if (WPD_PASSWORD_MATCH_OK == WPDocument::verifyPassword(&input, aUtf8Passwd.getStr()))
-+ break;
-+ else
-+ unsuccessfulAttempts++;
-+ if (unsuccessfulAttempts == 3) // timeout after 3 password atempts
-+ return com::sun::star::ui::dialogs::ExecutableDialogResults::CANCEL;
-+ }
-+ }
-+ return com::sun::star::ui::dialogs::ExecutableDialogResults::OK;
-+}
-+
-+uno::Sequence<beans::PropertyValue> SAL_CALL WordPerfectImportFilterDialog::getPropertyValues() throw(uno::RuntimeException)
-+{
-+ uno::Sequence<beans::PropertyValue> aRet(1);
-+ beans::PropertyValue* pArray = aRet.getArray();
-+
-+ pArray[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Password") );
-+ pArray[0].Value <<= msPassword;
-+
-+ return aRet;
-+}
-+
-+void SAL_CALL WordPerfectImportFilterDialog::setPropertyValues( const uno::Sequence<beans::PropertyValue>& aProps)
-+ throw(beans::UnknownPropertyException, beans::PropertyVetoException,
-+ lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
-+{
-+ const beans::PropertyValue* pPropArray = aProps.getConstArray();
-+ long nPropCount = aProps.getLength();
-+ for (long i = 0; i < nPropCount; i++)
-+ {
-+ const beans::PropertyValue& rProp = pPropArray[i];
-+ ::rtl::OUString aPropName = rProp.Name;
-+
-+ if ( aPropName == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Password")) )
-+ rProp.Value >>= msPassword;
-+ else if ( aPropName.equalsAscii( "InputStream" ) )
-+ rProp.Value >>= mxInputStream;
-+ }
-+}
-+
-+
-+// XServiceInfo
-+OUString SAL_CALL WordPerfectImportFilterDialog::getImplementationName( )
-+ throw (RuntimeException)
-+{
-+ return WordPerfectImportFilterDialog_getImplementationName();
-+}
-+
-+sal_Bool SAL_CALL WordPerfectImportFilterDialog::supportsService( const OUString& rServiceName )
-+ throw (RuntimeException)
-+{
-+ return WordPerfectImportFilterDialog_supportsService( rServiceName );
-+}
-+
-+Sequence< OUString > SAL_CALL WordPerfectImportFilterDialog::getSupportedServiceNames( )
-+ throw (RuntimeException)
-+{
-+ return WordPerfectImportFilterDialog_getSupportedServiceNames();
-+}
-+
-+OUString WordPerfectImportFilterDialog_getImplementationName ()
-+ throw (RuntimeException)
-+{
-+ return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.WordPerfectImportFilterDialog" ) );
-+}
-+
-+#define SERVICE_NAME "com.sun.star.ui.dialogs.FilterOptionsDialog"
-+sal_Bool SAL_CALL WordPerfectImportFilterDialog_supportsService( const OUString& ServiceName )
-+ throw (RuntimeException)
-+{
-+ return ( ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME ) ) );
-+}
-+
-+Sequence< OUString > SAL_CALL WordPerfectImportFilterDialog_getSupportedServiceNames( )
-+ throw (RuntimeException)
-+{
-+ Sequence < OUString > aRet(1);
-+ OUString* pArray = aRet.getArray();
-+ pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME ) );
-+ return aRet;
-+}
-+#undef SERVICE_NAME
-+
-+uno::Reference< XInterface > SAL_CALL WordPerfectImportFilterDialog_createInstance( const uno::Reference< XMultiServiceFactory > & rSMgr)
-+ throw( Exception )
-+{
-+ return (cppu::OWeakObject*) new WordPerfectImportFilterDialog( rSMgr );
-+}
-+
- /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
---- writerperfect/source/wpdimp/WordPerfectImportFilter.hxx 2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/wpdimp/WordPerfectImportFilter.hxx 2010-11-06 23:09:43.000000000 +0100
-@@ -33,9 +33,13 @@
- #include <com/sun/star/document/XFilter.hpp>
- #include <com/sun/star/document/XImporter.hpp>
- #include <com/sun/star/document/XExtendedFilterDetection.hpp>
-+#include <com/sun/star/beans/XPropertyAccess.hpp>
-+#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
- #include <com/sun/star/lang/XInitialization.hpp>
- #include <com/sun/star/lang/XServiceInfo.hpp>
- #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
-+#include <com/sun/star/io/XInputStream.hpp>
-+#include <cppuhelper/implbase3.hxx>
- #include <cppuhelper/implbase5.hxx>
-
- enum FilterType
-@@ -113,6 +117,62 @@
- SAL_CALL WordPerfectImportFilter_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & rSMgr)
- throw ( ::com::sun::star::uno::Exception );
-
-+
-+class WordPerfectImportFilterDialog : public cppu::WeakImplHelper3 <
-+ com::sun::star::ui::dialogs::XExecutableDialog,
-+ com::sun::star::lang::XServiceInfo,
-+ com::sun::star::beans::XPropertyAccess
-+>
-+{
-+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMSF;
-+ ::rtl::OUString msPassword;
-+ ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > mxInputStream;
-+
-+ ~WordPerfectImportFilterDialog();
-+
-+ // XExecutableDialog
-+ virtual void SAL_CALL setTitle( const ::rtl::OUString& aTitle )
-+ throw (::com::sun::star::uno::RuntimeException);
-+ virtual sal_Int16 SAL_CALL execute()
-+ throw (::com::sun::star::uno::RuntimeException);
-+
-+ // XServiceInfo
-+ virtual ::rtl::OUString SAL_CALL getImplementationName( )
-+ throw (::com::sun::star::uno::RuntimeException);
-+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
-+ throw (::com::sun::star::uno::RuntimeException);
-+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( )
-+ throw (::com::sun::star::uno::RuntimeException);
-+
-+ // XPropertyAccess
-+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >
-+ SAL_CALL getPropertyValues() throw (::com::sun::star::uno::RuntimeException);
-+ virtual void SAL_CALL setPropertyValues( const ::com::sun::star::uno::Sequence<
-+ ::com::sun::star::beans::PropertyValue >& aProps )
-+ throw (::com::sun::star::beans::UnknownPropertyException,
-+ ::com::sun::star::beans::PropertyVetoException,
-+ ::com::sun::star::lang::IllegalArgumentException,
-+ ::com::sun::star::lang::WrappedTargetException,
-+ ::com::sun::star::uno::RuntimeException);
-+
-+public:
-+ WordPerfectImportFilterDialog(const ::com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory > &r );
-+
-+};
-+
-+::rtl::OUString WordPerfectImportFilterDialog_getImplementationName()
-+ throw ( ::com::sun::star::uno::RuntimeException );
-+
-+sal_Bool SAL_CALL WordPerfectImportFilterDialog_supportsService( const ::rtl::OUString& ServiceName )
-+ throw ( ::com::sun::star::uno::RuntimeException );
-+
-+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL WordPerfectImportFilterDialog_getSupportedServiceNames( )
-+ throw ( ::com::sun::star::uno::RuntimeException );
-+
-+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
-+SAL_CALL WordPerfectImportFilterDialog_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & rSMgr)
-+ throw ( ::com::sun::star::uno::Exception );
-+
- #endif
-
- /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
---- writerperfect/source/wpdimp/wpft_genericfilter.cxx 2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/wpdimp/wpft_genericfilter.cxx 2010-11-06 23:09:43.000000000 +0100
-@@ -63,7 +63,15 @@
- const OUString * pArray = rSNL.getConstArray();
- for ( nPos = rSNL.getLength(); nPos--; )
- xNewKey->createKey( pArray[nPos] );
-+#if 0
-+ xNewKey = reinterpret_cast< XRegistryKey * >( pRegistryKey )->createKey( WordPerfectImportFilterDialog_getImplementationName() );
-+ xNewKey = xNewKey->createKey( OUString::createFromAscii( "/UNO/SERVICES" ) );
-
-+ const Sequence< OUString > & rSNL2 = WordPerfectImportFilterDialog_getSupportedServiceNames();
-+ pArray = rSNL2.getConstArray();
-+ for ( nPos = rSNL2.getLength(); nPos--; )
-+ xNewKey->createKey( pArray[nPos] );
-+#endif
- return sal_True;
- }
- catch (InvalidRegistryException &)
-@@ -93,6 +101,21 @@
- pRet = xFactory.get();
- }
- }
-+#if 0
-+ else if ( pServiceManager && implName.equals(WordPerfectImportFilterDialog_getImplementationName()) )
-+ {
-+ Reference< XSingleServiceFactory > xFactory( createSingleFactory(
-+ reinterpret_cast< XMultiServiceFactory * >( pServiceManager ),
-+ OUString::createFromAscii( pImplName ),
-+ WordPerfectImportFilterDialog_createInstance, WordPerfectImportFilterDialog_getSupportedServiceNames() ) );
-+
-+ if (xFactory.is())
-+ {
-+ xFactory->acquire();
-+ pRet = xFactory.get();
-+ }
-+ }
-+#endif
-
- return pRet;
- }
---- writerperfect/source/wpgimp/makefile.mk 2010-10-10 13:15:28.000000000 +0200
-+++ writerperfect/source/wpgimp/makefile.mk 2010-11-06 23:09:43.000000000 +0100
-@@ -12,12 +12,6 @@
- INCPRE+=$(SOLARVER)$/$(UPD)$/$(INPATH)$/inc$/libwpd
- .ENDIF
-
--.IF "$(SYSTEM_LIBWPS)" == "YES"
--INCPRE+=$(LIBWPS_CFLAGS)
--.ELSE
--INCPRE+=$(SOLARVER)$/$(UPD)$/$(INPATH)$/inc$/libwps
--.ENDIF
--
- .IF "$(SYSTEM_LIBWPG)" == "YES"
- INCPRE+=$(LIBWPG_CFLAGS)
- .ELSE
-@@ -28,7 +22,6 @@
- INCPRE+= -I..
-
- SLOFILES= \
-- $(SLO)$/OdgExporter.obj \
- $(SLO)$/WPGImportFilter.obj \
- $(SLO)$/wpgimport_genericfilter.obj
-
---- writerperfect/source/wpgimp/WPGImportFilter.cxx 2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/wpgimp/WPGImportFilter.cxx 2010-11-06 23:09:43.000000000 +0100
-@@ -47,7 +47,7 @@
- #include <xmloff/attrlist.hxx>
-
- #include "filter/DocumentHandler.hxx"
--#include "OdgExporter.hxx"
-+#include "filter/OdgExporter.hxx"
- #include "WPGImportFilter.hxx"
- #include "stream/WPXSvStream.h"
-
-@@ -120,16 +120,6 @@
-
- WPXInputStream* input = new WPXSvInputStream( xInputStream );
-
-- if (input->isOLEStream())
-- {
-- WPXInputStream* olestream = input->getDocumentOLEStream();
-- if (olestream)
-- {
-- delete input;
-- input = olestream;
-- }
-- }
--
- OdgExporter exporter(&xHandler);
- bool tmpParseResult = libwpg::WPGraphics::parse(input, &exporter);
- if (input)
-@@ -179,16 +169,6 @@
-
- WPXInputStream* input = new WPXSvInputStream( xInputStream );
-
-- if (input->isOLEStream())
-- {
-- WPXInputStream* olestream = input->getDocumentOLEStream();
-- if (olestream)
-- {
-- delete input;
-- input = olestream;
-- }
-- }
--
- if (libwpg::WPGraphics::isSupported(input))
- sTypeName = OUString( RTL_CONSTASCII_USTRINGPARAM ( "draw_WordPerfect_Graphics" ) );
-
---- writerperfect/source/wpsimp/MSWorksCollector.cxx 2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/wpsimp/MSWorksCollector.cxx 2010-11-06 23:09:43.000000000 +0100
-@@ -30,7 +30,7 @@
- #include "MSWorksCollector.hxx"
- #include <libwps/WPSDocument.h>
-
--MSWorksCollector::MSWorksCollector(WPSInputStream *pInput, DocumentHandler *pHandler) :
-+MSWorksCollector::MSWorksCollector(WPXInputStream *pInput, DocumentHandlerInterface *pHandler) :
- DocumentCollector(pInput, pHandler)
- {
- }
-@@ -39,9 +39,9 @@
- {
- }
-
--bool MSWorksCollector::parseSourceDocument(WPSInputStream &input)
-+bool MSWorksCollector::parseSourceDocument(WPXInputStream &input)
- {
-- WPSResult result = WPSDocument::parse(&input, static_cast<WPXHLListenerImpl *>(this));
-+ WPSResult result = WPSDocument::parse(&input, static_cast<WPXDocumentInterface *>(this));
- if (result != WPS_OK)
- return false;
-
---- writerperfect/source/wpsimp/MSWorksCollector.hxx 2010-11-04 13:37:48.000000000 +0100
-+++ writerperfect/source/wpsimp/MSWorksCollector.hxx 2010-11-06 23:09:43.000000000 +0100
-@@ -31,13 +31,14 @@
- #define _MSWORKSCOLLECTOR_HXX
-
- #include "filter/DocumentCollector.hxx"
-+#include "filter/DocumentHandlerInterface.hxx"
-
- class MSWorksCollector : public DocumentCollector
- {
- public:
-- MSWorksCollector(WPSInputStream *pInput, DocumentHandler *pHandler);
-+ MSWorksCollector(WPXInputStream *pInput, DocumentHandlerInterface *pHandler);
- virtual ~MSWorksCollector();
-- bool parseSourceDocument(WPSInputStream &input);
-+ bool parseSourceDocument(WPXInputStream &input);
- };
- #endif
-
---- writerperfect/source/wpsimp/MSWorksImportFilter.cxx 2010-10-17 15:38:36.000000000 +0200
-+++ writerperfect/source/wpsimp/MSWorksImportFilter.cxx 2010-11-06 23:09:43.000000000 +0100
-@@ -102,7 +102,7 @@
- sFileName = OUStringToOString(sURL, RTL_TEXTENCODING_INFO_ASCII);
-
- // An XML import service: what we push sax messages to..
-- OUString sXMLImportService ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.XMLImporter" ) );
-+ OUString sXMLImportService ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.XMLOasisImporter" ) );
- Reference < XDocumentHandler > xInternalHandler( mxMSF->createInstance( sXMLImportService ), UNO_QUERY );
-
- // The XImporter sets up an empty target document for XDocumentHandler to write to..
-@@ -187,7 +187,7 @@
- if (input.atEOS())
- return ::rtl::OUString();
-
-- confidence = WPSDocument::isFileFormatSupported(&input, false);
-+ confidence = WPSDocument::isFileFormatSupported(&input);
-
- if ((confidence == WPS_CONFIDENCE_EXCELLENT) || (confidence == WPS_CONFIDENCE_GOOD))
- sTypeName = OUString( RTL_CONSTASCII_USTRINGPARAM ( "writer_MS_Works_Document" ) );
---- writerperfect/util/makefile.mk 2010-10-10 13:15:28.000000000 +0200
-+++ writerperfect/util/makefile.mk 2010-11-06 20:47:33.000000000 +0100
-@@ -42,6 +42,8 @@
- SHL1STDLIBS+= \
- $(SOTLIB) \
- $(SO2LIB) \
-+ $(SFXLIB) \
-+ $(VCLLIB) \
- $(UNOTOOLSLIB) \
- $(TOOLSLIB) \
- $(UCBHELPERLIB) \
-@@ -49,6 +51,7 @@
- $(CPPULIB) \
- $(SALLIB) \
- $(XMLOFFLIB) \
-+ $(LIBWPG) \
- $(LIBWPD)
-
- SHL1TARGET = wpft$(DLLPOSTFIX)
-@@ -78,6 +81,7 @@
- $(SALLIB) \
- $(XMLOFFLIB) \
- $(LIBWPS) \
-+ $(LIBWPG) \
- $(LIBWPD)
-
- SHL2TARGET = msworks$(DLLPOSTFIX)
-@@ -105,8 +109,8 @@
- $(CPPULIB) \
- $(SALLIB) \
- $(XMLOFFLIB) \
-- $(LIBWPD) \
-- $(LIBWPG)
-+ $(LIBWPG) \
-+ $(LIBWPD)
-
- SHL3TARGET = wpgimport$(DLLPOSTFIX)
- SHL3IMPLIB = i$(SHL3TARGET)