summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Brauer <mib@openoffice.org>2001-01-17 10:00:14 +0000
committerMichael Brauer <mib@openoffice.org>2001-01-17 10:00:14 +0000
commitc69cfa3680fda00fcd10d5e69686fe2cf9324ad4 (patch)
tree79f36cabba45dca96f9f486041f2e4ed7db88b2f
parent75994772cd4e75d4da2d2b342304f85f97dffc0a (diff)
XML filter now is a component
-rw-r--r--sw/source/filter/xml/swxml.cxx186
-rw-r--r--sw/source/filter/xml/wrtxml.cxx108
-rw-r--r--sw/source/filter/xml/xmlexp.cxx115
-rw-r--r--sw/source/filter/xml/xmlexp.hxx9
-rw-r--r--sw/source/filter/xml/xmlimp.cxx140
-rw-r--r--sw/source/filter/xml/xmlimp.hxx21
-rw-r--r--sw/source/ui/uno/makefile.mk13
-rw-r--r--sw/source/ui/uno/unofreg.cxx185
8 files changed, 581 insertions, 196 deletions
diff --git a/sw/source/filter/xml/swxml.cxx b/sw/source/filter/xml/swxml.cxx
index f4680dd2cca3..05a10c38d10c 100644
--- a/sw/source/filter/xml/swxml.cxx
+++ b/sw/source/filter/xml/swxml.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: swxml.cxx,v $
*
- * $Revision: 1.9 $
+ * $Revision: 1.10 $
*
- * last change: $Author: cl $ $Date: 2001-01-12 16:34:00 $
+ * last change: $Author: mib $ $Date: 2001-01-17 10:55:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -82,6 +82,9 @@
#ifndef _COM_SUN_STAR_IO_XACTIVEDATACONTROL_HPP_
#include <com/sun/star/io/XActiveDataControl.hpp>
#endif
+#ifndef _COM_SUN_STAR_TEXT_XTEXTRANGE_HPP_
+#include <com/sun/star/text/XTextRange.hpp>
+#endif
#ifndef _SFXDOCFILE_HXX //autogen wg. SfxMedium
#include <sfx2/docfile.hxx>
@@ -105,6 +108,9 @@
#ifndef _DOCSH_HXX //autogen wg. SwDoc
#include <docsh.hxx>
#endif
+#ifndef _UNOOBJ_HXX
+#include <unoobj.hxx>
+#endif
#ifndef _XMLGRHLP_HXX
#include <svx/xmlgrhlp.hxx>
#endif
@@ -115,7 +121,10 @@
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::text;
using namespace ::com::sun::star::container;
+using namespace ::com::sun::star::document;
+using namespace ::com::sun::star::lang;
using namespace ::rtl;
XMLReader::XMLReader()
@@ -129,6 +138,7 @@ int XMLReader::GetReaderType()
sal_uInt32 XMLReader::Read( SwDoc &rDoc, SwPaM &rPaM, const String & rName )
{
+ // Get service factory
Reference< lang::XMultiServiceFactory > xServiceFactory =
comphelper::getProcessServiceFactory();
ASSERT( xServiceFactory.is(),
@@ -136,18 +146,6 @@ sal_uInt32 XMLReader::Read( SwDoc &rDoc, SwPaM &rPaM, const String & rName )
if( !xServiceFactory.is() )
return ERR_SWG_READ_ERROR;
- // Get model
- SwDocShell *pDocSh = rDoc.GetDocShell();
- ASSERT( pDocSh, "XMLReader::Read: got no doc shell" );
- if( !pDocSh )
- return ERR_SWG_READ_ERROR;
-
- Reference< frame::XModel > xModel = pDocSh->GetModel();
- ASSERT( xModel.is(),
- "XMLReader::Read: got no model" );
- if( !xModel.is() )
- return ERR_SWG_READ_ERROR;
-
// Get data source ...
DBG_ASSERT( pMedium, "There is the medium" );
if( !pMedium )
@@ -155,20 +153,20 @@ sal_uInt32 XMLReader::Read( SwDoc &rDoc, SwPaM &rPaM, const String & rName )
Reference< io::XActiveDataSource > xSource;
Reference< XInterface > xPipe;
+ Reference< document::XGraphicObjectResolver > xGraphicResolver;
+ SvXMLGraphicHelper *pGraphicHelper = 0;
+ SvStorageStreamRef xDocStream;
xml::sax::InputSource aParserInput;
aParserInput.sSystemId = rName;
- Reference< document::XGraphicObjectResolver > xEmbeddedGraphicExport;
- SvXMLGraphicHelper *pGraphicHelper = 0;
- SvStorageStreamRef xDocStream;
SvStorage *pStorage = pMedium->GetStorage();
if( pStorage )
{
pGraphicHelper = SvXMLGraphicHelper::Create( *pStorage,
GRAPHICHELPER_MODE_READ,
sal_False );
- xEmbeddedGraphicExport = pGraphicHelper;
+ xGraphicResolver = pGraphicHelper;
OUString sDocName( RTL_CONSTASCII_USTRINGPARAM( "Content.xml" ) );
xDocStream = pStorage->OpenStream( sDocName,
@@ -203,21 +201,51 @@ sal_uInt32 XMLReader::Read( SwDoc &rDoc, SwPaM &rPaM, const String & rName )
}
// get parser
- Reference< XInterface > xXMLParser = xServiceFactory->createInstance(
- OUString::createFromAscii("com.sun.star.xml.sax.Parser") );
- ASSERT( xXMLParser.is(),
+ Reference< xml::sax::XParser > xParser(
+ xServiceFactory->createInstance(
+ OUString::createFromAscii("com.sun.star.xml.sax.Parser") ),
+ UNO_QUERY );
+ ASSERT( xParser.is(),
"XMLReader::Read: com.sun.star.xml.sax.Parser service missing" );
- if( !xXMLParser.is() )
+ if( !xParser.is() )
return ERR_SWG_READ_ERROR;
- sal_uInt16 nStyleFamilyMask = SFX_STYLE_FAMILY_ALL;
- sal_Bool bLoadDoc;
- sal_Bool bInsert;
+ // get filter
+ Sequence < Any > aArgs( 1 );
+ Any *pArgs = aArgs.getArray();
+ *pArgs++ <<= xGraphicResolver;
+ Reference< xml::sax::XDocumentHandler > xFilter(
+ xServiceFactory->createInstanceWithArguments(
+ OUString::createFromAscii("com.sun.star.office.sax.importer.Writer"),
+ aArgs ),
+ UNO_QUERY );
+ ASSERT( xFilter.is(),
+ "XMLReader::Read: com.sun.star.xml.sax.importer.Writer service missing" );
+ if( !xFilter.is() )
+ return ERR_SWG_READ_ERROR;
+
+ // connect parser and filter
+ xParser->setDocumentHandler( xFilter );
+
+ // Get model
+ SwDocShell *pDocSh = rDoc.GetDocShell();
+ ASSERT( pDocSh, "XMLReader::Read: got no doc shell" );
+ if( !pDocSh )
+ return ERR_SWG_READ_ERROR;
+
+ Reference< lang::XComponent > xModelComp( pDocSh->GetModel(), UNO_QUERY );
+ ASSERT( xModelComp.is(),
+ "XMLReader::Read: got no model" );
+ if( !xModelComp.is() )
+ return ERR_SWG_READ_ERROR;
+
+ // connect model and filter
+ Reference < XImporter > xImporter( xFilter, UNO_QUERY );
+ xImporter->setTargetDocument( xModelComp );
+
if( aOpt.IsFmtsOnly() )
{
- bLoadDoc = sal_False;
- bInsert = aOpt.IsMerge();
- nStyleFamilyMask = 0U;
+ sal_uInt16 nStyleFamilyMask = 0U;
if( aOpt.IsFrmFmts() )
nStyleFamilyMask |= SFX_STYLE_FAMILY_FRAME;
if( aOpt.IsPageDescs() )
@@ -226,24 +254,24 @@ sal_uInt32 XMLReader::Read( SwDoc &rDoc, SwPaM &rPaM, const String & rName )
nStyleFamilyMask |= (SFX_STYLE_FAMILY_CHAR|SFX_STYLE_FAMILY_PARA);
if( aOpt.IsNumRules() )
nStyleFamilyMask |= SFX_STYLE_FAMILY_PSEUDO;
+
+ Reference<XUnoTunnel> xFilterTunnel( xFilter, UNO_QUERY );
+ SwXMLImport *pFilter = (SwXMLImport *)xFilterTunnel->getSomething(
+ SwXMLImport::getUnoTunnelId() );
+ pFilter->setStyleInsertMode( nStyleFamilyMask, !aOpt.IsMerge() );
}
- else
+ else if( bInsertMode )
{
- bLoadDoc = sal_True;
- bInsert = bInsertMode;
- nStyleFamilyMask = SFX_STYLE_FAMILY_ALL;
+ Reference < XTextRange > xTextRange =
+ SwXTextRange::CreateTextRangeFromPosition( &rDoc, *rPaM.GetPoint(),
+ 0 );
+ Reference<XUnoTunnel> xFilterTunnel( xFilter, UNO_QUERY );
+ SwXMLImport *pFilter = (SwXMLImport *)xFilterTunnel->getSomething(
+ SwXMLImport::getUnoTunnelId() );
+ pFilter->setTextInsertMode( xTextRange );
}
aOpt.ResetAllFmtsOnly();
- // get filter
- Reference< xml::sax::XDocumentHandler > xFilter =
- new SwXMLImport( rDoc, rPaM, bLoadDoc, bInsert, nStyleFamilyMask,
- xModel, xEmbeddedGraphicExport, pStorage );
-
- // connect parser and filter
- Reference< xml::sax::XParser > xParser( xXMLParser, UNO_QUERY );
- xParser->setDocumentHandler( xFilter );
-
rDoc.AddLink(); // prevent deletion
sal_uInt32 nRet = 0;
@@ -272,82 +300,8 @@ sal_uInt32 XMLReader::Read( SwDoc &rDoc, SwPaM &rPaM, const String & rName )
if( pGraphicHelper )
SvXMLGraphicHelper::Destroy( pGraphicHelper );
- xEmbeddedGraphicExport = 0;
+ xGraphicResolver = 0;
rDoc.RemoveLink();
return nRet;
}
-
-
-/*************************************************************************
-
- $Log: not supported by cvs2svn $
- Revision 1.8 2001/01/05 09:58:11 mib
- default styles
-
- Revision 1.7 2001/01/03 11:40:56 mib
- support for OLE objects in XML files
-
- Revision 1.6 2000/12/06 08:39:34 mib
- #81388#: Content stream now is called Content.xml
-
- Revision 1.5 2000/12/02 10:57:15 mib
- #80795#: use packages
-
- Revision 1.4 2000/11/20 09:18:37 jp
- must change: processfactory moved
-
- Revision 1.3 2000/10/26 09:38:52 mib
- tables within headers and footers
-
- Revision 1.2 2000/10/06 06:37:01 mib
- Added missing include XActiveDataControl
-
- Revision 1.1.1.1 2000/09/18 17:14:59 hr
- initial import
-
- Revision 1.13 2000/09/18 16:05:04 willem.vandorp
- OpenOffice header added.
-
- Revision 1.12 2000/07/07 13:58:36 mib
- text styles using StarOffice API
-
- Revision 1.11 2000/05/03 12:08:05 mib
- unicode
-
- Revision 1.10 2000/03/21 15:10:56 os
- UNOIII
-
- Revision 1.9 2000/03/13 14:33:43 mib
- UNO3
-
- Revision 1.8 2000/02/11 14:40:44 hr
- #70473# changes for unicode ( patched by automated patchtool )
-
- Revision 1.7 1999/11/26 11:15:20 mib
- loading of styles only and insert mode
-
- Revision 1.6 1999/11/19 16:40:21 os
- modules renamed
-
- Revision 1.5 1999/11/19 15:27:05 mib
- Opt: using OUString constructor instead of StringToOUString
-
- Revision 1.4 1999/09/23 11:53:47 mib
- i18n, token maps and hard paragraph attributes
-
- Revision 1.3 1999/08/19 14:51:30 HR
- #65293#: fixed exception macro usage
-
-
- Rev 1.2 19 Aug 1999 16:51:30 HR
- #65293#: fixed exception macro usage
-
- Rev 1.1 17 Aug 1999 16:31:26 MIB
- import
-
- Rev 1.0 12 Aug 1999 12:28:08 MIB
- Initial revision.
-
-*************************************************************************/
-
diff --git a/sw/source/filter/xml/wrtxml.cxx b/sw/source/filter/xml/wrtxml.cxx
index c360aa1ca64f..05bdad924ee4 100644
--- a/sw/source/filter/xml/wrtxml.cxx
+++ b/sw/source/filter/xml/wrtxml.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: wrtxml.cxx,v $
*
- * $Revision: 1.11 $
+ * $Revision: 1.12 $
*
- * last change: $Author: cl $ $Date: 2001-01-12 16:34:01 $
+ * last change: $Author: mib $ $Date: 2001-01-17 10:55:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -111,6 +111,8 @@ using namespace ::rtl;
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::container;
+using namespace ::com::sun::star::document;
+using namespace ::com::sun::star::beans;
SwXMLWriter::SwXMLWriter( sal_Bool bPl ) :
bPlain( bPl )
@@ -139,6 +141,7 @@ sal_uInt32 SwXMLWriter::WriteStorage()
sal_uInt32 SwXMLWriter::Write( SwPaM& rPaM, SfxMedium& rMed,
const String* pFileName )
{
+ // Get service factory
Reference< lang::XMultiServiceFactory > xServiceFactory =
comphelper::getProcessServiceFactory();
ASSERT( xServiceFactory.is(),
@@ -146,32 +149,24 @@ sal_uInt32 SwXMLWriter::Write( SwPaM& rPaM, SfxMedium& rMed,
if( !xServiceFactory.is() )
return ERR_SWG_WRITE_ERROR;
- Reference< XInterface > xWriter = xServiceFactory->createInstance(
- OUString::createFromAscii("com.sun.star.xml.sax.Writer") );
- ASSERT( xWriter.is(),
- "SwXMLWriter::Write: com.sun.star.xml.sax.Writer service missing" );
- if(!xWriter.is())
- return ERR_SWG_WRITE_ERROR;
-
- Reference< frame::XModel > xModel = rPaM.GetDoc()->GetDocShell()->GetModel();
- ASSERT( xModel.is(),
- "XMLWriter::Write: got no model" );
- if( !xModel.is() )
- return ERR_SWG_WRITE_ERROR;
-
- pDoc = rPaM.GetDoc();
- PutNumFmtFontsInAttrPool();
-// PutEditEngFontsInAttrPool();
-
+ // Get data sink ...
Reference< io::XOutputStream > xOut;
SvStorageStreamRef xDocStream;
+ Reference< document::XGraphicObjectResolver > xGraphicResolver;
+ SvXMLGraphicHelper *pGraphicHelper = 0;
+
SvStorage *pStorage = bPlain ? 0 : rMed.GetOutputStorage( sal_True );
if( pStorage )
{
+ pGraphicHelper = SvXMLGraphicHelper::Create( *pStorage,
+ GRAPHICHELPER_MODE_WRITE,
+ sal_False );
+ xGraphicResolver = pGraphicHelper;
+
OUString sDocName( RTL_CONSTASCII_USTRINGPARAM( "Content.xml" ) );
xDocStream = pStorage->OpenStream( sDocName,
STREAM_WRITE | STREAM_SHARE_DENYWRITE );
-// xDocStream->SetBufferSize( 16*1024 );
+ xDocStream->SetBufferSize( 16*1024 );
xOut = new utl::OOutputStreamWrapper( *xDocStream );
}
else
@@ -179,44 +174,70 @@ sal_uInt32 SwXMLWriter::Write( SwPaM& rPaM, SfxMedium& rMed,
xOut = rMed.GetDataSink();
}
- Reference< io::XActiveDataSource > xSrc( xWriter, UNO_QUERY );
- xSrc->setOutputStream( xOut );
+ // get writer
+ Reference< io::XActiveDataSource > xWriter(
+ xServiceFactory->createInstance(
+ OUString::createFromAscii("com.sun.star.xml.sax.Writer") ),
+ UNO_QUERY );
+ ASSERT( xWriter.is(),
+ "SwXMLWriter::Write: com.sun.star.xml.sax.Writer service missing" );
+ if(!xWriter.is())
+ return ERR_SWG_WRITE_ERROR;
- Reference< document::XGraphicObjectResolver > xEmbeddedGraphicExport;
- SvXMLGraphicHelper *pGraphicHelper = 0;
- if( pStorage )
- {
- pGraphicHelper = SvXMLGraphicHelper::Create( *pStorage,
- GRAPHICHELPER_MODE_WRITE,
- sal_False );
- xEmbeddedGraphicExport = pGraphicHelper;
- }
+ // connect writer and output stream
+ xWriter->setOutputStream( xOut );
+ // get filter
Reference< xml::sax::XDocumentHandler > xHandler( xWriter, UNO_QUERY );
+ Sequence < Any > aArgs( 2 );
+ Any *pArgs = aArgs.getArray();
+ *pArgs++ <<= xHandler;
+ *pArgs++ <<= xGraphicResolver;
+ Reference< document::XExporter > xExporter(
+ xServiceFactory->createInstanceWithArguments(
+ OUString::createFromAscii("com.sun.star.office.sax.exporter.Writer"),
+ aArgs ),
+ UNO_QUERY );
+ ASSERT( xExporter.is(),
+ "XMLReader::Read: com.sun.star.xml.sax.exporter.Writer service missing" );
+ if( !xExporter.is() )
+ return ERR_SWG_WRITE_ERROR;
+
+ //Get model
+ Reference< lang::XComponent > xModelComp(
+ rPaM.GetDoc()->GetDocShell()->GetModel(), UNO_QUERY );
+ ASSERT( xModelComp.is(), "XMLWriter::Write: got no model" );
+ if( !xModelComp.is() )
+ return ERR_SWG_WRITE_ERROR;
- SwXMLExport *pExp = new SwXMLExport( xModel, rPaM, *pFileName, xHandler,
- xEmbeddedGraphicExport,
- bWriteAll, bWriteOnlyFirstTable,
- bShowProgress );
+ // connect model and filter
+ xExporter->setSourceDocument( xModelComp );
- Reference< document::XExporter > xExporter( pExp );
+ pDoc = rPaM.GetDoc();
+ PutNumFmtFontsInAttrPool();
+ PutEditEngFontsInAttrPool();
+
+ Sequence < PropertyValue > aProps( 1 );
+ PropertyValue *pProps = aProps.getArray();
+ pProps->Name = OUString( RTL_CONSTASCII_USTRINGPARAM("FileName") );
+ (pProps++)->Value <<= OUString( rMed.GetName() );
+
+ Reference < XFilter > xFilter( xExporter, UNO_QUERY );
+ xFilter->filter( aProps );
- sal_uInt32 nRet = pExp->exportDoc( sXML_text );
if( xDocStream.Is() )
xDocStream->Commit();
if( pStorage )
pDoc->GetDocShell()->SaveAsChilds( pStorage );
-
if( pGraphicHelper )
SvXMLGraphicHelper::Destroy( pGraphicHelper );
- xEmbeddedGraphicExport = 0;
-// delete pExp;
+ xGraphicResolver = 0;
ResetWriter();
- return nRet;
+ return 0;
}
// -----------------------------------------------------------------------
@@ -232,11 +253,14 @@ void GetXMLWriter( const String& rName, WriterRef& xRet )
Source Code Control System - Header
- $Header: /zpool/svn/migration/cvs_rep_09_09_08/code/sw/source/filter/xml/wrtxml.cxx,v 1.11 2001-01-12 16:34:01 cl Exp $
+ $Header: /zpool/svn/migration/cvs_rep_09_09_08/code/sw/source/filter/xml/wrtxml.cxx,v 1.12 2001-01-17 10:55:18 mib Exp $
Source Code Control System - Update
$Log: not supported by cvs2svn $
+ Revision 1.11 2001/01/12 16:34:01 cl
+ #82042# added support for xml filter components
+
Revision 1.10 2001/01/08 09:44:55 mib
Removed SwDoc and SvStorage members from SwXMLExport
diff --git a/sw/source/filter/xml/xmlexp.cxx b/sw/source/filter/xml/xmlexp.cxx
index 4da46931dca4..9aaab3743f18 100644
--- a/sw/source/filter/xml/xmlexp.cxx
+++ b/sw/source/filter/xml/xmlexp.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: xmlexp.cxx,v $
*
- * $Revision: 1.15 $
+ * $Revision: 1.16 $
*
- * last change: $Author: cl $ $Date: 2001-01-12 16:34:01 $
+ * last change: $Author: mib $ $Date: 2001-01-17 10:55:18 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -94,6 +94,9 @@
#ifndef _XMLOFF_PROGRESSBARHELPER_HXX
#include <xmloff/ProgressBarHelper.hxx>
#endif
+#ifndef _XMLOFF_XMLUCONV_HXX
+#include <xmloff/xmluconv.hxx>
+#endif
#ifndef _PAM_HXX //autogen wg. SwPaM
#include <pam.hxx>
@@ -110,6 +113,12 @@
#ifndef _DOCSTAT_HXX
#include <docstat.hxx>
#endif
+#ifndef _SWSWERROR_H
+#include <swerror.h>
+#endif
+#ifndef _UNOOBJ_HXX
+#include <unoobj.hxx>
+#endif
#ifndef _XMLTEXTE_HXX
#include <xmltexte.hxx>
@@ -120,6 +129,7 @@
using namespace ::rtl;
using namespace ::com::sun::star::frame;
+using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::xml::sax;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::text;
@@ -163,6 +173,27 @@ void SwXMLExport::SetCurPaM( SwPaM& rPaM, sal_Bool bWhole, sal_Bool bTabOnly )
}
#endif
+SwXMLExport::SwXMLExport() :
+ SvXMLExport( MAP_INCH, sXML_text ),
+#ifdef XML_CORE_API
+ pCurPaM( 0 ),
+ pOrigPaM( &rPaM ),
+#endif
+ pTableItemMapper( 0 ),
+ pTableLines( 0 ),
+ nContentProgressStart( 0 ),
+#ifdef XML_CORE_API
+ bExportWholeDoc( bExpWholeDoc ),
+ bExportFirstTableOnly( bExpFirstTableOnly ),
+#endif
+ bShowProgress( sal_True ),
+ sNumberFormat(RTL_CONSTASCII_USTRINGPARAM("NumberFormat")),
+ sCell(RTL_CONSTASCII_USTRINGPARAM("Cell"))
+{
+ _InitItemExport();
+}
+
+#ifdef XML_CORE_API
SwXMLExport::SwXMLExport( const Reference< XModel >& rModel, SwPaM& rPaM,
const OUString& rFileName,
const Reference< XDocumentHandler > & rHandler,
@@ -171,10 +202,8 @@ SwXMLExport::SwXMLExport( const Reference< XModel >& rModel, SwPaM& rPaM,
sal_Bool bShowProg ) :
SvXMLExport( rFileName, rHandler, rModel, rEmbeddedGrfObjs,
SW_MOD()->GetMetric( rPaM.GetDoc()->IsHTMLMode() ) ),
-#ifdef XML_CORE_API
pCurPaM( 0 ),
pOrigPaM( &rPaM ),
-#endif
pTableItemMapper( 0 ),
pTableLines( 0 ),
nContentProgressStart( 0 ),
@@ -184,7 +213,29 @@ SwXMLExport::SwXMLExport( const Reference< XModel >& rModel, SwPaM& rPaM,
sNumberFormat(RTL_CONSTASCII_USTRINGPARAM("NumberFormat")),
sCell(RTL_CONSTASCII_USTRINGPARAM("Cell"))
{
- SwDoc *pDoc = rPaM.GetDoc();
+ _InitItemExport();
+}
+#endif
+
+sal_uInt32 SwXMLExport::exportDoc( const sal_Char *pClass )
+{
+ if( !GetModel().is() )
+ return ERR_SWG_WRITE_ERROR;
+
+ Reference < XTextDocument > xTextDoc( GetModel(), UNO_QUERY );
+ Reference < XText > xText = xTextDoc->getText();
+ Reference<XUnoTunnel> xTextTunnel( xText, UNO_QUERY);
+ ASSERT( xTextTunnel.is(), "missing XUnoTunnel for Cursor" );
+ if( !xTextTunnel.is() )
+ return ERR_SWG_WRITE_ERROR;
+
+ SwXText *pText = (SwXText *)xTextTunnel->getSomething(
+ SwXText::getUnoTunnelId() );
+ ASSERT( pText, "SwXText missing" );
+ if( !pText )
+ return ERR_SWG_WRITE_ERROR;
+
+ SwDoc *pDoc = pText->GetDoc();
const SfxPoolItem* pItem;
const SfxItemPool& rPool = pDoc->GetAttrPool();
sal_uInt16 nItems = rPool.GetItemCount( RES_UNKNOWNATR_CONTAINER );
@@ -219,14 +270,19 @@ SwXMLExport::SwXMLExport( const Reference< XModel >& rModel, SwPaM& rPaM,
}
}
+ MapUnit eUnit = (MapUnit)SW_MOD()->GetMetric( pDoc->IsHTMLMode() );
+ if( GetMM100UnitConverter().getXMLMeasureUnit() != eUnit )
+ {
+ GetMM100UnitConverter().setXMLMeasureUnit( eUnit );
+ pTwipUnitConv->setXMLMeasureUnit( eUnit );
+ }
+
SetExtended( bExtended );
#ifdef XML_CORE_API
SetCurPaM( rPaM, bExportWholeDoc, bExportFirstTableOnly );
#endif
- _InitItemExport();
-
// Update doc stat, so that correct values are exported and
// the progress works correctly.
SwDocStat aDocStat( pDoc->GetDocStat() );
@@ -248,6 +304,21 @@ SwXMLExport::SwXMLExport( const Reference< XModel >& rModel, SwPaM& rPaM,
SdrModel* pModel = pDoc->GetDrawModel();
if( pModel )
pModel->GetPage( 0 )->RecalcObjOrdNums();
+
+ sal_uInt32 nRet = SvXMLExport::exportDoc( pClass );
+
+#ifdef XML_CORE_API
+ if( pCurPaM )
+ {
+ while( pCurPaM->GetNext() != pCurPaM )
+ delete pCurPaM->GetNext();
+ delete pCurPaM;
+ pCurPam = 0;
+ }
+#endif
+ ASSERT( !pTableLines, "there are table columns infos left" );
+
+ return nRet;
}
XMLTextParagraphExport* SwXMLExport::CreateTextParagraphExport()
@@ -262,16 +333,7 @@ XMLShapeExport* SwXMLExport::CreateShapeExport()
__EXPORT SwXMLExport::~SwXMLExport()
{
-#ifdef XML_CORE_API
- if( pCurPaM )
- {
- while( pCurPaM->GetNext() != pCurPaM )
- delete pCurPaM->GetNext();
- delete pCurPaM;
- }
-#endif
_FinitItemExport();
- ASSERT( !pTableLines, "there are table columns infos left" );
}
@@ -315,6 +377,27 @@ void SwXMLExport::_ExportContent()
#endif
}
+Sequence< OUString > SAL_CALL SwXMLExport_getSupportedServiceNames()
+ throw()
+{
+ const OUString aServiceName(
+ RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.office.sax.exporter.Writer" ) );
+ const Sequence< OUString > aSeq( &aServiceName, 1 );
+ return aSeq;
+}
+
+OUString SAL_CALL SwXMLExport_getImplementationName() throw()
+{
+ return OUString( RTL_CONSTASCII_USTRINGPARAM( "SwXMLExport" ) );
+}
+
+Reference< XInterface > SAL_CALL SwXMLExport_createInstance(
+ const Reference< XMultiServiceFactory > & rSMgr)
+ throw( Exception )
+{
+ return (cppu::OWeakObject*)new SwXMLExport;
+}
+
#ifdef XML_CORE_API
void SwXMLExport::ExportCurPaM( sal_Bool bExportWholePaM )
{
diff --git a/sw/source/filter/xml/xmlexp.hxx b/sw/source/filter/xml/xmlexp.hxx
index 3ad441c0c0cc..b105c6565fde 100644
--- a/sw/source/filter/xml/xmlexp.hxx
+++ b/sw/source/filter/xml/xmlexp.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: xmlexp.hxx,v $
*
- * $Revision: 1.12 $
+ * $Revision: 1.13 $
*
- * last change: $Author: cl $ $Date: 2001-01-12 16:34:01 $
+ * last change: $Author: mib $ $Date: 2001-01-17 10:55:19 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -161,6 +161,8 @@ protected:
public:
+ SwXMLExport();
+#ifdef XML_CORE_API
SwXMLExport( const ::com::sun::star::uno::Reference<
::com::sun::star::frame::XModel > & rModel,
SwPaM& rPaM, const ::rtl::OUString& rFileName,
@@ -170,8 +172,11 @@ public:
::com::sun::star::document::XGraphicObjectResolver > &,
sal_Bool bExpWholeDoc, sal_Bool bExpFirstTableOnly,
sal_Bool bShowProgr );
+#endif
virtual ~SwXMLExport();
+ virtual sal_uInt32 exportDoc( const sal_Char *pClass=0 );
+
inline const SvXMLUnitConverter& GetTwipUnitConverter() const;
void ExportTableAutoStyles( const SwTableNode& rTblNd );
diff --git a/sw/source/filter/xml/xmlimp.cxx b/sw/source/filter/xml/xmlimp.cxx
index 7c1cb6cd3082..e636d3392072 100644
--- a/sw/source/filter/xml/xmlimp.cxx
+++ b/sw/source/filter/xml/xmlimp.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: xmlimp.cxx,v $
*
- * $Revision: 1.15 $
+ * $Revision: 1.16 $
*
- * last change: $Author: cl $ $Date: 2001-01-12 16:34:01 $
+ * last change: $Author: mib $ $Date: 2001-01-17 10:55:19 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -65,6 +65,9 @@
#pragma hdrstop
+#ifndef _COM_SUN_STAR_TEXT_XTEXTDOCUMENT_HPP_
+#include <com/sun/star/text/XTextDocument.hpp>
+#endif
#ifndef _COM_SUN_STAR_TEXT_XTEXTRANGE_HPP_
#include <com/sun/star/text/XTextRange.hpp>
#endif
@@ -259,6 +262,21 @@ SvXMLImportContext *SwXMLImport::CreateContext(
return pContext;
}
+SwXMLImport::SwXMLImport() :
+ bLoadDoc( sal_True ),
+ bInsert( sal_False ),
+ nStyleFamilyMask( SFX_STYLE_FAMILY_ALL ),
+ pDocElemTokenMap( 0 ),
+ pTableElemTokenMap( 0 ),
+ pTableItemMapper( 0 ),
+ pSttNdIdx( 0 ),
+ bProgressValid( sal_False ),
+ bShowProgress( sal_True ),
+ nProgress( 0 )
+{
+ _InitItemImport();
+
+}
SwXMLImport::SwXMLImport(
SwDoc& rDoc, const SwPaM& rPaM,
sal_Bool bLDoc, sal_Bool bInsertMode, sal_uInt16 nStyleFamMask,
@@ -288,9 +306,88 @@ SwXMLImport::SwXMLImport(
Reference < XTextCursor > xTextCursor =
xText->createTextCursorByRange( xTextRange );
GetTextImport()->SetCursor( xTextCursor );
+}
+
+SwXMLImport::~SwXMLImport()
+{
+ delete pDocElemTokenMap;
+ delete pTableElemTokenMap;
+ _FinitItemImport();
+}
+
+void SwXMLImport::setTextInsertMode(
+ const Reference< XTextRange > & rInsertPos )
+{
+ bInsert = sal_True;
+
+ Reference < XText > xText = rInsertPos->getText();
+ Reference < XTextCursor > xTextCursor =
+ xText->createTextCursorByRange( rInsertPos );
+ GetTextImport()->SetCursor( xTextCursor );
+}
+
+void SwXMLImport::setStyleInsertMode( sal_uInt16 nFamilies,
+ sal_Bool bOverwrite )
+{
+ bInsert = !bOverwrite;
+ nStyleFamilyMask = nFamilies;
+ bLoadDoc = sal_False;
+}
+
+const Sequence< sal_Int8 > & SwXMLImport::getUnoTunnelId() throw()
+{
+ static uno::Sequence< sal_Int8 > aSeq = ::CreateUnoTunnelId();
+ return aSeq;
+}
+
+sal_Int64 SAL_CALL SwXMLImport::getSomething( const Sequence< sal_Int8 >& rId )
+ throw(RuntimeException)
+{
+ if( rId.getLength() == 16
+ && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
+ rId.getConstArray(), 16 ) )
+ {
+ return (sal_Int64)this;
+ }
+ return SvXMLImport::getSomething( rId );
+}
+
+void SwXMLImport::startDocument( void )
+{
+ DBG_ASSERT( GetModel().is(), "model is missing" );
+ if( !GetModel().is() )
+ return;
+
+ // There only is a text cursor by now if we are in insert mode. In any
+ // other case we have to create one at the start of the document.
+ Reference < XTextCursor > xTextCursor = GetTextImport()->GetCursor();
+ if( !xTextCursor.is() )
+ {
+ Reference < XTextDocument > xTextDoc( GetModel(), UNO_QUERY );
+ Reference < XText > xText = xTextDoc->getText();
+ xTextCursor = xText->createTextCursor();
+ GetTextImport()->SetCursor( xTextCursor );
+ }
+
+ Reference<XUnoTunnel> xCrsrTunnel( xTextCursor, UNO_QUERY );
+ ASSERT( xCrsrTunnel.is(), "missing XUnoTunnel for Cursor" );
+ if( !xCrsrTunnel.is() )
+ return;
+ SwXTextCursor *pTxtCrsr =
+ (SwXTextCursor*)xCrsrTunnel->getSomething(
+ SwXTextCursor::getUnoTunnelId() );
+ ASSERT( pTxtCrsr, "SwXTextCursor missing" );
+ if( !pTxtCrsr )
+ return;
+
+ SwDoc *pDoc = pTxtCrsr->GetDoc();
+ ASSERT( pDoc, "SwDoc missing" );
+ if( !pDoc )
+ return;
+
if( !IsStylesOnlyMode() )
{
- pSttNdIdx = new SwNodeIndex( rDoc.GetNodes() );
+ pSttNdIdx = new SwNodeIndex( pDoc->GetNodes() );
if( IsInsertMode() )
{
Reference<XUnoTunnel> xCrsrTunnel( GetTextImport()->GetCursor(),
@@ -304,24 +401,24 @@ SwXMLImport::SwXMLImport(
const SwPosition* pPos = pPaM->GetPoint();
// Split once and remember the node that has been splitted.
- rDoc.SplitNode( *pPos );
+ pDoc->SplitNode( *pPos );
*pSttNdIdx = pPos->nNode.GetIndex()-1;
// Split again.
- rDoc.SplitNode( *pPos );
+ pDoc->SplitNode( *pPos );
// Insert all content into the new node
pPaM->Move( fnMoveBackward );
- rDoc.SetTxtFmtColl( *pPaM,
- rDoc.GetTxtCollFromPool(RES_POOLCOLL_STANDARD) );
+ pDoc->SetTxtFmtColl( *pPaM,
+ pDoc->GetTxtCollFromPool(RES_POOLCOLL_STANDARD) );
}
}
// We need a draw model to be able to set the z order
- rDoc.MakeDrawModel();
+ pDoc->MakeDrawModel();
}
-SwXMLImport::~SwXMLImport()
+void SwXMLImport::endDocument( void )
{
if( !IsStylesOnlyMode() )
{
@@ -483,12 +580,9 @@ SwXMLImport::~SwXMLImport()
GetTextImport()->ResetCursor();
delete pSttNdIdx;
- delete pDocElemTokenMap;
- delete pTableElemTokenMap;
- _FinitItemImport();
+ pSttNdIdx = 0;
}
-
XMLShapeImportHelper* SwXMLImport::CreateShapeImport()
{
return new XMLTextShapeImportHelper( *this );
@@ -542,3 +636,23 @@ void SwXMLImport::ShowProgress( sal_Int32 nPercent )
}
}
+uno::Sequence< OUString > SAL_CALL SwXMLImport_getSupportedServiceNames()
+ throw()
+{
+ const OUString aServiceName(
+ RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.office.sax.importer.Writer" ) );
+ const uno::Sequence< OUString > aSeq( &aServiceName, 1 );
+ return aSeq;
+}
+
+OUString SAL_CALL SwXMLImport_getImplementationName() throw()
+{
+ return OUString( RTL_CONSTASCII_USTRINGPARAM( "SwXMLImport" ) );
+}
+
+uno::Reference< uno::XInterface > SAL_CALL SwXMLImport_createInstance(
+ const uno::Reference< lang::XMultiServiceFactory > & rSMgr)
+ throw( uno::Exception )
+{
+ return (cppu::OWeakObject*)new SwXMLImport;
+}
diff --git a/sw/source/filter/xml/xmlimp.hxx b/sw/source/filter/xml/xmlimp.hxx
index 85538e8a7f96..2e01b59eac66 100644
--- a/sw/source/filter/xml/xmlimp.hxx
+++ b/sw/source/filter/xml/xmlimp.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: xmlimp.hxx,v $
*
- * $Revision: 1.11 $
+ * $Revision: 1.12 $
*
- * last change: $Author: cl $ $Date: 2001-01-12 16:34:01 $
+ * last change: $Author: mib $ $Date: 2001-01-17 10:55:19 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -135,6 +135,7 @@ protected:
public:
+ SwXMLImport();
SwXMLImport( SwDoc& rDoc, const SwPaM& rPaM, sal_Bool bLoadDoc,
sal_Bool bInsertMode, sal_uInt16 nStyleFamMask,
const ::com::sun::star::uno::Reference<
@@ -145,6 +146,22 @@ public:
~SwXMLImport();
+ void setTextInsertMode(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::text::XTextRange > & rInsertPos );
+ void setStyleInsertMode( sal_uInt16 nFamilies,
+ sal_Bool bOverwrite );
+
+ // ::com::sun::star::xml::sax::XDocumentHandler
+ virtual void SAL_CALL startDocument(void)
+ throw( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL endDocument(void)
+ throw( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
+
+ // XUnoTunnel
+ static const ::com::sun::star::uno::Sequence< sal_Int8 > & getUnoTunnelId() throw();
+ virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException);
+
void InsertStyles( sal_Bool bAuto );
void FinishStyles();
diff --git a/sw/source/ui/uno/makefile.mk b/sw/source/ui/uno/makefile.mk
index c4e7a71e449f..0d6735e0d3dc 100644
--- a/sw/source/ui/uno/makefile.mk
+++ b/sw/source/ui/uno/makefile.mk
@@ -2,9 +2,9 @@
#
# $RCSfile: makefile.mk,v $
#
-# $Revision: 1.2 $
+# $Revision: 1.3 $
#
-# last change: $Author: os $ $Date: 2000-11-07 14:42:08 $
+# last change: $Author: mib $ $Date: 2001-01-17 10:54:44 $
#
# The Contents of this file are made available subject to the terms of
# either of the following licenses
@@ -86,7 +86,8 @@ CXXFILES = \
unoatxt.cxx \
unomod.cxx \
unotxvw.cxx \
- dlelstnr.cxx
+ dlelstnr.cxx \
+ unofreg.cxx
SLOFILES = \
@@ -95,7 +96,8 @@ SLOFILES = \
$(SLO)$/unoatxt.obj \
$(SLO)$/unomod.obj \
$(SLO)$/unotxvw.obj \
- $(SLO)$/dlelstnr.obj
+ $(SLO)$/dlelstnr.obj \
+ $(SLO)$/unofreg.obj
EXCEPTIONSFILES= \
$(SLO)$/unodispatch.obj\
@@ -103,7 +105,8 @@ EXCEPTIONSFILES= \
$(SLO)$/unotxdoc.obj \
$(SLO)$/unoatxt.obj \
$(SLO)$/unomod.obj \
- $(SLO)$/unotxvw.obj
+ $(SLO)$/unotxvw.obj \
+ $(SLO)$/unofreg.obj
# --- Targets -------------------------------------------------------
diff --git a/sw/source/ui/uno/unofreg.cxx b/sw/source/ui/uno/unofreg.cxx
new file mode 100644
index 000000000000..e6f581572461
--- /dev/null
+++ b/sw/source/ui/uno/unofreg.cxx
@@ -0,0 +1,185 @@
+/*************************************************************************
+ *
+ * $RCSfile: unofreg.cxx,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: mib $ $Date: 2001-01-17 10:54:20 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#include <string.h>
+
+#ifndef _COM_SUN_STAR_REGISTRY_XREGISTRYKEY_HPP_
+#include <com/sun/star/registry/XRegistryKey.hpp>
+#endif
+
+#ifndef _OSL_DIAGNOSE_H_
+#include <osl/diagnose.h>
+#endif
+
+#include <cppuhelper/factory.hxx>
+#include <uno/lbnames.h>
+
+using namespace rtl;
+using namespace com::sun::star;
+using namespace com::sun::star::lang;
+
+// xml import
+extern uno::Sequence< OUString > SAL_CALL SwXMLImport_getSupportedServiceNames()
+ throw();
+extern OUString SAL_CALL SwXMLImport_getImplementationName() throw();
+extern uno::Reference< uno::XInterface > SAL_CALL SwXMLImport_createInstance(
+ const uno::Reference< XMultiServiceFactory > & rSMgr)
+ throw( uno::Exception );
+
+// xml export
+extern uno::Sequence< OUString > SAL_CALL SwXMLExport_getSupportedServiceNames()
+ throw();
+extern OUString SAL_CALL SwXMLExport_getImplementationName() throw();
+extern uno::Reference< uno::XInterface > SAL_CALL SwXMLExport_createInstance(
+ const uno::Reference< XMultiServiceFactory > & rSMgr)
+ throw( uno::Exception );
+//
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+void SAL_CALL component_getImplementationEnvironment(
+ const sal_Char ** ppEnvTypeName,
+ uno_Environment ** ppEnv )
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+void SAL_CALL lcl_uno_writeInfo(
+ registry::XRegistryKey * pRegistryKey,
+ const OUString& rImplementationName,
+ const uno::Sequence< OUString >& rServices )
+{
+ uno::Reference< registry::XRegistryKey > xNewKey(
+ pRegistryKey->createKey(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + rImplementationName + OUString(RTL_CONSTASCII_USTRINGPARAM( "/UNO/SERVICES") ) ) );
+
+ for( sal_Int32 i = 0; i < rServices.getLength(); i++ )
+ xNewKey->createKey( rServices.getConstArray()[i]);
+}
+
+sal_Bool SAL_CALL component_writeInfo(
+ void * pServiceManager,
+ void * pRegistryKey )
+{
+ if( pRegistryKey )
+ {
+ try
+ {
+ registry::XRegistryKey *pKey =
+ reinterpret_cast< registry::XRegistryKey * >( pRegistryKey );
+
+ // xml filter
+ lcl_uno_writeInfo( pKey, SwXMLImport_getImplementationName(),
+ SwXMLImport_getSupportedServiceNames() );
+ lcl_uno_writeInfo( pKey, SwXMLExport_getImplementationName(),
+ SwXMLExport_getSupportedServiceNames() );
+ }
+ catch (registry::InvalidRegistryException &)
+ {
+ OSL_ENSHURE( sal_False, "### InvalidRegistryException!" );
+ }
+ }
+ return True;
+}
+
+void * SAL_CALL component_getFactory( const sal_Char * pImplName,
+ void * pServiceManager,
+ void * pRegistryKey )
+{
+ void * pRet = 0;
+ if( pServiceManager )
+ {
+ uno::Reference< XMultiServiceFactory > xMSF(
+ reinterpret_cast< XMultiServiceFactory * >( pServiceManager ) );
+
+ uno::Reference< XSingleServiceFactory > xFactory;
+
+ const sal_Int32 nImplNameLen = strlen( pImplName );
+ if( SwXMLImport_getImplementationName().equalsAsciiL( pImplName,
+ nImplNameLen ) )
+ {
+ xFactory = ::cppu::createSingleFactory( xMSF,
+ SwXMLImport_getImplementationName(),
+ SwXMLImport_createInstance,
+ SwXMLImport_getSupportedServiceNames() );
+ }
+ else if( SwXMLExport_getImplementationName().equalsAsciiL( pImplName,
+ nImplNameLen ) )
+ {
+ xFactory = ::cppu::createSingleFactory( xMSF,
+ SwXMLExport_getImplementationName(),
+ SwXMLExport_createInstance,
+ SwXMLExport_getSupportedServiceNames() );
+ }
+ if( xFactory.is())
+ {
+ xFactory->acquire();
+ pRet = xFactory.get();
+ }
+ }
+ return pRet;
+}
+
+#ifdef __cplusplus
+}
+#endif