2000-09-18 23:31:44 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
|
|
|
* $RCSfile: xmlexp.cxx,v $
|
|
|
|
*
|
2004-09-08 12:39:22 +00:00
|
|
|
* $Revision: 1.108 $
|
2000-09-18 23:31:44 +00:00
|
|
|
*
|
2004-09-08 12:39:22 +00:00
|
|
|
* last change: $Author: hr $ $Date: 2004-09-08 13:39:22 $
|
2000-09-18 23:31:44 +00:00
|
|
|
*
|
|
|
|
* 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): _______________________________________
|
|
|
|
*
|
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
|
|
|
#ifdef PRECOMPILED
|
|
|
|
#include "filt_pch.hxx"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#pragma hdrstop
|
|
|
|
|
2001-01-22 11:27:59 +00:00
|
|
|
#ifndef _OSL_MUTEX_HXX_
|
|
|
|
#include <osl/mutex.hxx>
|
|
|
|
#endif
|
|
|
|
#include <rtl/uuid.h>
|
2000-09-18 23:31:44 +00:00
|
|
|
#ifndef _TOOLS_DEBUG_HXX //autogen wg. DBG_ASSERT
|
|
|
|
#include <tools/debug.hxx>
|
|
|
|
#endif
|
2000-11-29 14:57:15 +00:00
|
|
|
#ifndef _URLOBJ_HXX
|
|
|
|
#include <tools/urlobj.hxx>
|
|
|
|
#endif
|
2004-07-13 07:06:44 +00:00
|
|
|
#ifndef _COMPHELPER_GENERICPROPERTYSET_HXX_
|
|
|
|
#include <comphelper/genericpropertyset.hxx>
|
|
|
|
#endif
|
2001-05-18 12:58:34 +00:00
|
|
|
#ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
|
|
|
|
#include <com/sun/star/container/XNameAccess.hpp>
|
|
|
|
#endif
|
|
|
|
#ifndef _COM_SUN_STAR_IO_XINPUTSTREAM_HPP_
|
|
|
|
#include <com/sun/star/io/XInputStream.hpp>
|
|
|
|
#endif
|
2001-06-12 13:27:58 +00:00
|
|
|
#ifndef _COM_SUN_STAR_DOCUMENT_XBINARYSTREAMRESOLVER_HPP_
|
|
|
|
#include <com/sun/star/document/XBinaryStreamResolver.hpp>
|
|
|
|
#endif
|
2001-11-26 06:58:54 +00:00
|
|
|
#ifndef _COM_SUN_STAR_XML_SAX_SAXINVALIDCHARACTEREXCEPTION_HPP_
|
|
|
|
#include <com/sun/star/xml/sax/SAXInvalidCharacterException.hpp>
|
|
|
|
#endif
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
#ifndef _XMLOFF_ATTRLIST_HXX
|
|
|
|
#include "attrlist.hxx"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _XMLOFF_NMSPMAP_HXX
|
|
|
|
#include "nmspmap.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef _XMLOFF_XMLUCONV_HXX
|
|
|
|
#include "xmluconv.hxx"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _XMLOFF_XMLNMSPE_HXX
|
|
|
|
#include "xmlnmspe.hxx"
|
|
|
|
#endif
|
|
|
|
|
2001-06-29 20:07:26 +00:00
|
|
|
#ifndef _XMLOFF_XMLTOKEN_HXX
|
|
|
|
#include "xmltoken.hxx"
|
2000-09-18 23:31:44 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _XMLOFF_XMLEXP_HXX
|
|
|
|
#include "xmlexp.hxx"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _XMLOFF_XMLNUMFE_HXX
|
|
|
|
#include "xmlnumfe.hxx"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _XMLOFF_XMLMETAE_HXX
|
|
|
|
#include "xmlmetae.hxx"
|
|
|
|
#endif
|
|
|
|
|
2000-11-28 10:33:02 +00:00
|
|
|
#ifndef _XMLOFF_XMLBASICE_HXX
|
|
|
|
#include "xmlscripte.hxx"
|
|
|
|
#endif
|
|
|
|
|
2000-10-18 10:40:33 +00:00
|
|
|
#ifndef _XMLOFF_FAMILIES_HXX_
|
|
|
|
#include "families.hxx"
|
|
|
|
#endif
|
|
|
|
|
2000-12-19 17:56:47 +00:00
|
|
|
#ifndef _XMLOFF_XMLEVENTEXPORT_HXX
|
|
|
|
#include "XMLEventExport.hxx"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _XMLOFF_XMLSTARBASICEXPORTHANDLER_HXX
|
|
|
|
#include "XMLStarBasicExportHandler.hxx"
|
|
|
|
#endif
|
|
|
|
|
2002-11-19 12:14:43 +00:00
|
|
|
#ifndef _XMLOFF_XMLSCRIPTEXPORTHANDLER_HXX
|
|
|
|
#include "XMLScriptExportHandler.hxx"
|
|
|
|
#endif
|
|
|
|
|
2001-03-11 14:52:23 +00:00
|
|
|
#ifndef _XMLOFF_SETTINGSEXPORTHELPER_HXX
|
|
|
|
#include "SettingsExportHelper.hxx"
|
|
|
|
#endif
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
#ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
|
|
|
|
#include <com/sun/star/container/XNameAccess.hpp>
|
|
|
|
#endif
|
2000-11-29 13:32:08 +00:00
|
|
|
#ifndef _COM_SUN_STAR_CONTAINER_XINDEXCONTAINER_HPP_
|
|
|
|
#include <com/sun/star/container/XIndexContainer.hpp>
|
|
|
|
#endif
|
2001-02-21 19:30:19 +00:00
|
|
|
#ifndef _COM_SUN_STAR_DOCUMENT_XEVENTSSUPPLIER_HPP
|
|
|
|
#include <com/sun/star/document/XEventsSupplier.hpp>
|
|
|
|
#endif
|
2001-04-04 04:26:04 +00:00
|
|
|
#ifndef _COM_SUN_STAR_DOCUMENT_XVIEWDATASUPPLIER_HPP_
|
|
|
|
#include <com/sun/star/document/XViewDataSupplier.hpp>
|
|
|
|
#endif
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
#ifndef _XMLOFF_GRADIENTSTYLE_HXX
|
|
|
|
#include <GradientStyle.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _XMLOFF_HATCHSTYLE_HXX
|
|
|
|
#include <HatchStyle.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _XMLOFF_IMAGESTYLE_HXX
|
|
|
|
#include <ImageStyle.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _XMLOFF_TRANSGRADIENTSTYLE_HXX
|
|
|
|
#include <TransGradientStyle.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _XMLOFF_MARKERSTYLE_HXX
|
|
|
|
#include <MarkerStyle.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _XMLOFF_DASHSTYLE_HXX
|
|
|
|
#include <DashStyle.hxx>
|
|
|
|
#endif
|
2000-11-13 07:44:24 +00:00
|
|
|
#ifndef _XMLOFF_XMLFONTAUTOSTYLEPOOL_HXX
|
|
|
|
#include "XMLFontAutoStylePool"
|
|
|
|
#endif
|
2001-03-28 09:28:16 +00:00
|
|
|
#ifndef _XMLOFF_XMLIMAGEMAPEXPORT_HXX_
|
|
|
|
#include "XMLImageMapExport.hxx"
|
|
|
|
#endif
|
2001-05-18 12:58:34 +00:00
|
|
|
#ifndef _XMLOFF_XMLBASE64EXPORT_HXX_
|
|
|
|
#include "XMLBase64Export.hxx"
|
|
|
|
#endif
|
2001-09-18 15:28:34 +00:00
|
|
|
#ifndef _XMLOFF_XMLERROR_HXX_
|
|
|
|
#include "xmlerror.hxx"
|
|
|
|
#endif
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
#ifndef _COM_SUN_STAR_LANG_SERVICENOTREGISTEREDEXCEPTION_HPP_
|
|
|
|
#include <com/sun/star/lang/ServiceNotRegisteredException.hpp>
|
|
|
|
#endif
|
2004-07-13 07:06:44 +00:00
|
|
|
#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_
|
|
|
|
#include <com/sun/star/beans/PropertyAttribute.hpp>
|
|
|
|
#endif
|
2001-05-09 11:22:39 +00:00
|
|
|
#ifndef _XMLOFF_XMLFILTERSERVICENAMES_H
|
|
|
|
#include "XMLFilterServiceNames.h"
|
|
|
|
#endif
|
|
|
|
#ifndef _XMLOFF_XMLEMBEDDEDOBJECTEXPORTFILTER_HXX
|
|
|
|
#include "XMLEmbeddedObjectExportFilter.hxx"
|
|
|
|
#endif
|
2000-09-18 23:31:44 +00:00
|
|
|
|
2001-09-25 16:03:25 +00:00
|
|
|
#ifndef _VOS_MUTEX_HXX_
|
|
|
|
#include <vos/mutex.hxx>
|
|
|
|
#endif
|
|
|
|
|
2001-07-26 13:55:49 +00:00
|
|
|
#ifndef _RTL_LOGFILE_HXX_
|
|
|
|
#include <rtl/logfile.hxx>
|
|
|
|
#endif
|
2001-09-13 14:18:52 +00:00
|
|
|
#ifndef _CPPUHELPER_IMPLBASE1_HXX_
|
|
|
|
#include <cppuhelper/implbase1.hxx>
|
|
|
|
#endif
|
2001-07-26 13:55:49 +00:00
|
|
|
|
2001-10-19 10:46:32 +00:00
|
|
|
#ifndef _COMPHELPER_EXTRACT_HXX_
|
|
|
|
#include <comphelper/extract.hxx>
|
|
|
|
#endif
|
2004-07-13 07:06:44 +00:00
|
|
|
#ifndef _XMLOFF_PROPERTYSETMERGER_HXX_
|
|
|
|
#include "PropertySetMerger.hxx"
|
|
|
|
#endif
|
2001-10-19 10:46:32 +00:00
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
using namespace ::rtl;
|
2001-01-22 11:27:59 +00:00
|
|
|
using namespace ::osl;
|
2000-09-18 23:31:44 +00:00
|
|
|
using namespace ::com::sun::star;
|
|
|
|
using namespace ::com::sun::star::uno;
|
|
|
|
using namespace ::com::sun::star::frame;
|
2000-11-29 13:32:08 +00:00
|
|
|
using namespace ::com::sun::star::container;
|
2001-05-09 11:22:39 +00:00
|
|
|
using namespace ::com::sun::star::lang;
|
|
|
|
using namespace ::com::sun::star::document;
|
|
|
|
using namespace ::com::sun::star::beans;
|
|
|
|
using namespace ::com::sun::star::xml::sax;
|
2001-05-18 12:58:34 +00:00
|
|
|
using namespace ::com::sun::star::io;
|
2001-05-16 14:21:01 +00:00
|
|
|
using namespace ::xmloff::token;
|
2001-05-09 11:22:39 +00:00
|
|
|
|
|
|
|
sal_Char __READONLY_DATA sXML_1_0[] = "1.0";
|
|
|
|
|
2001-08-03 15:24:00 +00:00
|
|
|
#define LOGFILE_AUTHOR "mb93740"
|
|
|
|
|
2001-05-09 11:22:39 +00:00
|
|
|
#define XML_MODEL_SERVICE_WRITER "com.sun.star.text.TextDocument"
|
|
|
|
#define XML_MODEL_SERVICE_CALC "com.sun.star.sheet.SpreadsheetDocument"
|
|
|
|
#define XML_MODEL_SERVICE_DRAW "com.sun.star.drawing.DrawingDocument"
|
|
|
|
#define XML_MODEL_SERVICE_IMPRESS "com.sun.star.presentation.PresentationDocument"
|
|
|
|
#define XML_MODEL_SERVICE_MATH "com.sun.star.formula.FormulaProperties"
|
|
|
|
#define XML_MODEL_SERVICE_CHART "com.sun.star.chart.ChartDocument"
|
|
|
|
|
2001-10-19 10:46:32 +00:00
|
|
|
#define XML_USEPRETTYPRINTING "UsePrettyPrinting"
|
2001-09-18 15:28:34 +00:00
|
|
|
|
2001-05-09 11:22:39 +00:00
|
|
|
struct XMLServiceMapEntry_Impl
|
|
|
|
{
|
|
|
|
const sal_Char *sModelService;
|
|
|
|
sal_Int32 nModelServiceLen;
|
|
|
|
const sal_Char *sFilterService;
|
|
|
|
sal_Int32 nFilterServiceLen;
|
|
|
|
};
|
2000-09-18 23:31:44 +00:00
|
|
|
|
2001-05-09 11:22:39 +00:00
|
|
|
#define SERVICE_MAP_ENTRY( app ) \
|
|
|
|
{ XML_MODEL_SERVICE_##app, sizeof(XML_MODEL_SERVICE_##app)-1, \
|
|
|
|
XML_EXPORT_FILTER_##app, sizeof(XML_EXPORT_FILTER_##app)-1 }
|
|
|
|
|
|
|
|
const XMLServiceMapEntry_Impl aServiceMap[] =
|
|
|
|
{
|
|
|
|
SERVICE_MAP_ENTRY( WRITER ),
|
|
|
|
SERVICE_MAP_ENTRY( CALC ),
|
|
|
|
SERVICE_MAP_ENTRY( IMPRESS ),// Impress supports DrawingDocument, too, so
|
|
|
|
SERVICE_MAP_ENTRY( DRAW ), // it must appear before Draw
|
|
|
|
SERVICE_MAP_ENTRY( MATH ),
|
|
|
|
SERVICE_MAP_ENTRY( CHART ),
|
|
|
|
{ 0, 0, 0, 0 }
|
|
|
|
};
|
2000-09-18 23:31:44 +00:00
|
|
|
|
2001-09-13 14:18:52 +00:00
|
|
|
//==============================================================================
|
|
|
|
|
|
|
|
class SvXMLExportEventListener : public cppu::WeakImplHelper1<
|
|
|
|
com::sun::star::lang::XEventListener >
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
SvXMLExport* pExport;
|
|
|
|
|
|
|
|
public:
|
|
|
|
SvXMLExportEventListener(SvXMLExport* pExport);
|
|
|
|
virtual ~SvXMLExportEventListener();
|
|
|
|
|
|
|
|
// XEventListener
|
|
|
|
virtual void SAL_CALL disposing(const lang::EventObject& rEventObject) throw(::com::sun::star::uno::RuntimeException);
|
|
|
|
};
|
|
|
|
|
|
|
|
SvXMLExportEventListener::SvXMLExportEventListener(SvXMLExport* pTempExport)
|
|
|
|
: pExport(pTempExport)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
SvXMLExportEventListener::~SvXMLExportEventListener()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
// XEventListener
|
|
|
|
void SAL_CALL SvXMLExportEventListener::disposing( const lang::EventObject& rEventObject )
|
|
|
|
throw(uno::RuntimeException)
|
|
|
|
{
|
|
|
|
if (pExport)
|
|
|
|
pExport->DisposingModel();
|
|
|
|
}
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
|
2004-07-13 07:06:44 +00:00
|
|
|
void SvXMLExport::SetDocHandler( const uno::Reference< xml::sax::XDocumentHandler > &rHandler )
|
|
|
|
{
|
|
|
|
xHandler = rHandler;
|
|
|
|
xExtHandler = uno::Reference<xml::sax::XExtendedDocumentHandler>( xHandler, UNO_QUERY );
|
|
|
|
}
|
|
|
|
|
2001-09-13 14:18:52 +00:00
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
void SvXMLExport::_InitCtor()
|
|
|
|
{
|
2004-08-02 13:12:38 +00:00
|
|
|
if( (getExportFlags() & ~EXPORT_OASIS) != 0 )
|
2004-07-13 07:06:44 +00:00
|
|
|
{
|
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_OFFICE), GetXMLToken(XML_N_OFFICE), XML_NAMESPACE_OFFICE );
|
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_OOO), GetXMLToken(XML_N_OOO), XML_NAMESPACE_OOO );
|
|
|
|
}
|
2001-03-05 10:47:18 +00:00
|
|
|
if( (getExportFlags() & (EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_FONTDECLS) ) != 0 )
|
|
|
|
{
|
2001-07-10 15:50:23 +00:00
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_FO), GetXMLToken(XML_N_FO), XML_NAMESPACE_FO );
|
2001-03-05 10:47:18 +00:00
|
|
|
}
|
|
|
|
if( (getExportFlags() & (EXPORT_META|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_SETTINGS) ) != 0 )
|
|
|
|
{
|
2001-07-10 15:50:23 +00:00
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_XLINK), GetXMLToken(XML_N_XLINK), XML_NAMESPACE_XLINK );
|
2001-03-05 10:47:18 +00:00
|
|
|
}
|
2001-03-14 14:08:53 +00:00
|
|
|
if( (getExportFlags() & EXPORT_SETTINGS) != 0 )
|
|
|
|
{
|
2001-07-10 15:50:23 +00:00
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_CONFIG), GetXMLToken(XML_N_CONFIG), XML_NAMESPACE_CONFIG );
|
2001-03-14 14:08:53 +00:00
|
|
|
}
|
|
|
|
|
2004-07-13 07:06:44 +00:00
|
|
|
if( (getExportFlags() & (EXPORT_META|EXPORT_MASTERSTYLES|EXPORT_CONTENT) ) != 0 )
|
2001-03-05 10:47:18 +00:00
|
|
|
{
|
2001-07-10 15:50:23 +00:00
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_DC), GetXMLToken(XML_N_DC), XML_NAMESPACE_DC );
|
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_META), GetXMLToken(XML_N_META), XML_NAMESPACE_META );
|
2001-03-05 10:47:18 +00:00
|
|
|
}
|
|
|
|
if( (getExportFlags() & (EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_FONTDECLS) ) != 0 )
|
|
|
|
{
|
2001-07-10 15:50:23 +00:00
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_STYLE), GetXMLToken(XML_N_STYLE), XML_NAMESPACE_STYLE );
|
2001-03-05 10:47:18 +00:00
|
|
|
}
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
// namespaces for documents
|
2001-03-05 10:47:18 +00:00
|
|
|
if( (getExportFlags() & (EXPORT_STYLES|EXPORT_AUTOSTYLES|EXPORT_MASTERSTYLES|EXPORT_CONTENT) ) != 0 )
|
|
|
|
{
|
2004-09-08 12:39:22 +00:00
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_DC), GetXMLToken(XML_N_DC), XML_NAMESPACE_DC );
|
2001-07-10 15:50:23 +00:00
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_TEXT), GetXMLToken(XML_N_TEXT), XML_NAMESPACE_TEXT );
|
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_DRAW), GetXMLToken(XML_N_DRAW), XML_NAMESPACE_DRAW );
|
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_DR3D), GetXMLToken(XML_N_DR3D), XML_NAMESPACE_DR3D );
|
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_SVG), GetXMLToken(XML_N_SVG), XML_NAMESPACE_SVG );
|
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_CHART), GetXMLToken(XML_N_CHART), XML_NAMESPACE_CHART );
|
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_TABLE), GetXMLToken(XML_N_TABLE), XML_NAMESPACE_TABLE );
|
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_NUMBER), GetXMLToken(XML_N_NUMBER), XML_NAMESPACE_NUMBER );
|
2004-07-13 07:06:44 +00:00
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_OOOW), GetXMLToken(XML_N_OOOW), XML_NAMESPACE_OOOW );
|
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_OOOC), GetXMLToken(XML_N_OOOC), XML_NAMESPACE_OOOC );
|
2001-03-05 10:47:18 +00:00
|
|
|
}
|
|
|
|
if( (getExportFlags() & (EXPORT_MASTERSTYLES|EXPORT_CONTENT) ) != 0 )
|
|
|
|
{
|
2001-07-10 15:50:23 +00:00
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_MATH), GetXMLToken(XML_N_MATH), XML_NAMESPACE_MATH );
|
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_FORM), GetXMLToken(XML_N_FORM), XML_NAMESPACE_FORM );
|
2001-03-05 10:47:18 +00:00
|
|
|
}
|
|
|
|
if( (getExportFlags() & (EXPORT_STYLES|EXPORT_AUTOSTYLES|EXPORT_MASTERSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS) ) != 0 )
|
|
|
|
{
|
2001-07-10 15:50:23 +00:00
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_SCRIPT), GetXMLToken(XML_N_SCRIPT), XML_NAMESPACE_SCRIPT );
|
2004-07-13 07:06:44 +00:00
|
|
|
pNamespaceMap->Add( GetXMLToken(XML_NP_DOM), GetXMLToken(XML_N_DOM), XML_NAMESPACE_DOM );
|
2001-03-05 10:47:18 +00:00
|
|
|
}
|
2000-11-14 09:13:10 +00:00
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
xAttrList = (xml::sax::XAttributeList*)pAttrList;
|
2000-11-29 13:32:08 +00:00
|
|
|
|
2000-11-29 14:57:15 +00:00
|
|
|
sPicturesPath = OUString( RTL_CONSTASCII_USTRINGPARAM( "#Pictures/" ) );
|
2001-01-03 10:07:00 +00:00
|
|
|
sObjectsPath = OUString( RTL_CONSTASCII_USTRINGPARAM( "#./" ) );
|
2000-11-29 14:57:15 +00:00
|
|
|
sGraphicObjectProtocol = OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.GraphicObject:" ) );
|
2001-01-26 10:22:48 +00:00
|
|
|
sEmbeddedObjectProtocol = OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.EmbeddedObject:" ) );
|
2001-09-13 14:18:52 +00:00
|
|
|
|
2004-05-14 15:10:42 +00:00
|
|
|
if (xModel.is() && ! mxEventListener.is())
|
2001-09-13 14:18:52 +00:00
|
|
|
{
|
2004-05-14 15:10:42 +00:00
|
|
|
mxEventListener.set( new SvXMLExportEventListener(this));
|
|
|
|
xModel->addEventListener(mxEventListener);
|
2001-09-13 14:18:52 +00:00
|
|
|
}
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
2004-05-03 12:33:10 +00:00
|
|
|
// #110680#
|
|
|
|
SvXMLExport::SvXMLExport(
|
|
|
|
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
|
|
|
|
MapUnit eDfltUnit, const enum XMLTokenEnum eClass, sal_uInt16 nExportFlags )
|
|
|
|
: pImpl( 0 ),
|
|
|
|
// #110680#
|
|
|
|
mxServiceFactory(xServiceFactory),
|
|
|
|
meClass( eClass ),
|
2001-06-29 20:07:26 +00:00
|
|
|
sWS( GetXMLToken(XML_WS) ),
|
2001-01-12 15:16:13 +00:00
|
|
|
pNamespaceMap( new SvXMLNamespaceMap ),
|
2004-05-03 12:33:10 +00:00
|
|
|
|
|
|
|
// #110680#
|
|
|
|
// pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, eDfltUnit ) ),
|
|
|
|
pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, eDfltUnit, getServiceFactory() ) ),
|
|
|
|
|
2001-01-12 15:16:13 +00:00
|
|
|
pAttrList( new SvXMLAttributeList ),
|
|
|
|
bExtended( sal_False ),
|
2001-01-17 10:00:14 +00:00
|
|
|
pNumExport(0L),
|
2001-01-12 15:16:13 +00:00
|
|
|
pProgressBarHelper( NULL ),
|
2001-02-13 15:55:00 +00:00
|
|
|
pEventExport( NULL ),
|
2001-03-28 09:28:16 +00:00
|
|
|
pImageMapExport( NULL ),
|
2001-09-13 14:18:52 +00:00
|
|
|
pXMLErrors( NULL ),
|
2001-03-01 15:31:32 +00:00
|
|
|
bSaveLinkedSections(sal_True),
|
2001-09-13 14:18:52 +00:00
|
|
|
mnExportFlags( nExportFlags ),
|
|
|
|
mnErrorFlags( ERROR_NO )
|
2001-01-12 15:16:13 +00:00
|
|
|
{
|
2004-05-03 12:33:10 +00:00
|
|
|
DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
|
2001-01-12 15:16:13 +00:00
|
|
|
_InitCtor();
|
|
|
|
}
|
|
|
|
|
2004-05-03 12:33:10 +00:00
|
|
|
// #110680#
|
2000-09-18 23:31:44 +00:00
|
|
|
SvXMLExport::SvXMLExport(
|
2004-05-03 12:33:10 +00:00
|
|
|
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
|
|
|
|
const OUString &rFileName,
|
|
|
|
const uno::Reference< xml::sax::XDocumentHandler > & rHandler,
|
|
|
|
MapUnit eDfltUnit )
|
|
|
|
: pImpl( 0 ),
|
|
|
|
// #110680#
|
|
|
|
mxServiceFactory(xServiceFactory),
|
|
|
|
meClass( XML_TOKEN_INVALID ),
|
2001-06-29 20:07:26 +00:00
|
|
|
sWS( GetXMLToken(XML_WS) ),
|
2000-09-18 23:31:44 +00:00
|
|
|
sOrigFileName( rFileName ),
|
|
|
|
pNamespaceMap( new SvXMLNamespaceMap ),
|
2004-05-03 12:33:10 +00:00
|
|
|
|
|
|
|
// #110680#
|
|
|
|
// pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, eDfltUnit ) ),
|
|
|
|
pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, eDfltUnit, getServiceFactory() ) ),
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
pAttrList( new SvXMLAttributeList ),
|
|
|
|
bExtended( sal_False ),
|
|
|
|
xHandler( rHandler ),
|
2000-11-10 17:15:59 +00:00
|
|
|
xExtHandler( rHandler, uno::UNO_QUERY ),
|
2001-03-02 19:17:53 +00:00
|
|
|
pNumExport(0L),
|
2000-12-19 17:56:47 +00:00
|
|
|
pProgressBarHelper( NULL ),
|
2001-02-13 15:55:00 +00:00
|
|
|
pEventExport( NULL ),
|
2001-03-28 09:28:16 +00:00
|
|
|
pImageMapExport( NULL ),
|
2001-09-13 14:18:52 +00:00
|
|
|
pXMLErrors( NULL ),
|
2001-03-02 19:17:53 +00:00
|
|
|
bSaveLinkedSections(sal_True),
|
2004-07-13 07:06:44 +00:00
|
|
|
mnExportFlags( 0 ),
|
2001-09-13 14:18:52 +00:00
|
|
|
mnErrorFlags( ERROR_NO )
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
2004-05-03 12:33:10 +00:00
|
|
|
DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
|
2000-09-18 23:31:44 +00:00
|
|
|
_InitCtor();
|
2001-01-17 12:42:42 +00:00
|
|
|
|
|
|
|
if (xNumberFormatsSupplier.is())
|
2001-10-19 17:43:58 +00:00
|
|
|
pNumExport = new SvXMLNumFmtExport(*this, xNumberFormatsSupplier);
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
2004-05-03 12:33:10 +00:00
|
|
|
// #110680#
|
2000-12-03 09:16:56 +00:00
|
|
|
SvXMLExport::SvXMLExport(
|
2004-05-03 12:33:10 +00:00
|
|
|
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
|
|
|
|
const OUString &rFileName,
|
|
|
|
const uno::Reference< xml::sax::XDocumentHandler > & rHandler,
|
|
|
|
const Reference< XModel >& rModel,
|
|
|
|
sal_Int16 eDfltUnit )
|
|
|
|
: pImpl( 0 ),
|
|
|
|
// #110680#
|
|
|
|
mxServiceFactory(xServiceFactory),
|
|
|
|
meClass( XML_TOKEN_INVALID ),
|
2001-06-29 20:07:26 +00:00
|
|
|
sWS( GetXMLToken(XML_WS) ),
|
2000-12-03 09:16:56 +00:00
|
|
|
sOrigFileName( rFileName ),
|
|
|
|
pNamespaceMap( new SvXMLNamespaceMap ),
|
2004-05-03 12:33:10 +00:00
|
|
|
|
|
|
|
// #110680#
|
|
|
|
// pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, SvXMLUnitConverter::GetMapUnit(eDfltUnit) ) ),
|
|
|
|
pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, SvXMLUnitConverter::GetMapUnit(eDfltUnit), getServiceFactory() ) ),
|
|
|
|
|
2000-12-03 09:16:56 +00:00
|
|
|
pAttrList( new SvXMLAttributeList ),
|
|
|
|
bExtended( sal_False ),
|
|
|
|
xHandler( rHandler ),
|
|
|
|
xExtHandler( rHandler, uno::UNO_QUERY ),
|
|
|
|
xModel( rModel ),
|
|
|
|
pNumExport(0L),
|
|
|
|
xNumberFormatsSupplier (rModel, uno::UNO_QUERY),
|
2000-12-19 17:56:47 +00:00
|
|
|
pProgressBarHelper( NULL ),
|
2001-02-13 15:55:00 +00:00
|
|
|
pEventExport( NULL ),
|
2001-03-28 09:28:16 +00:00
|
|
|
pImageMapExport( NULL ),
|
2001-09-13 14:18:52 +00:00
|
|
|
pXMLErrors( NULL ),
|
2001-03-02 19:17:53 +00:00
|
|
|
bSaveLinkedSections(sal_True),
|
2004-07-13 07:06:44 +00:00
|
|
|
mnExportFlags( 0 ),
|
2001-09-13 14:18:52 +00:00
|
|
|
mnErrorFlags( ERROR_NO )
|
2000-12-03 09:16:56 +00:00
|
|
|
{
|
2004-05-03 12:33:10 +00:00
|
|
|
DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
|
2000-12-03 09:16:56 +00:00
|
|
|
_InitCtor();
|
2001-01-17 12:42:42 +00:00
|
|
|
|
|
|
|
if (xNumberFormatsSupplier.is())
|
2001-10-19 17:43:58 +00:00
|
|
|
pNumExport = new SvXMLNumFmtExport(*this, xNumberFormatsSupplier);
|
2000-12-03 09:16:56 +00:00
|
|
|
}
|
|
|
|
|
2004-05-03 12:33:10 +00:00
|
|
|
// #110680#
|
2000-09-18 23:31:44 +00:00
|
|
|
SvXMLExport::SvXMLExport(
|
2004-05-03 12:33:10 +00:00
|
|
|
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
|
|
|
|
const OUString &rFileName,
|
|
|
|
const uno::Reference< xml::sax::XDocumentHandler > & rHandler,
|
|
|
|
const Reference< XModel >& rModel,
|
|
|
|
const Reference< document::XGraphicObjectResolver >& rEmbeddedGraphicObjects,
|
|
|
|
sal_Int16 eDfltUnit )
|
|
|
|
: pImpl( 0 ),
|
|
|
|
// #110680#
|
|
|
|
mxServiceFactory(xServiceFactory),
|
|
|
|
meClass( XML_TOKEN_INVALID ),
|
2001-06-29 20:07:26 +00:00
|
|
|
sWS( GetXMLToken(XML_WS) ),
|
2000-09-18 23:31:44 +00:00
|
|
|
sOrigFileName( rFileName ),
|
|
|
|
pNamespaceMap( new SvXMLNamespaceMap ),
|
2004-05-03 12:33:10 +00:00
|
|
|
|
|
|
|
// #110680#
|
|
|
|
// pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, SvXMLUnitConverter::GetMapUnit(eDfltUnit) ) ),
|
|
|
|
pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, SvXMLUnitConverter::GetMapUnit(eDfltUnit), getServiceFactory() ) ),
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
pAttrList( new SvXMLAttributeList ),
|
|
|
|
bExtended( sal_False ),
|
|
|
|
xHandler( rHandler ),
|
|
|
|
xExtHandler( rHandler, uno::UNO_QUERY ),
|
2001-01-12 15:16:13 +00:00
|
|
|
xGraphicResolver( rEmbeddedGraphicObjects ),
|
2000-09-18 23:31:44 +00:00
|
|
|
xModel( rModel ),
|
|
|
|
pNumExport(0L),
|
2000-11-10 17:15:59 +00:00
|
|
|
xNumberFormatsSupplier (rModel, uno::UNO_QUERY),
|
2000-12-19 17:56:47 +00:00
|
|
|
pProgressBarHelper( NULL ),
|
2001-02-13 15:55:00 +00:00
|
|
|
pEventExport( NULL ),
|
2001-03-28 09:28:16 +00:00
|
|
|
pImageMapExport( NULL ),
|
2001-09-13 14:18:52 +00:00
|
|
|
pXMLErrors( NULL ),
|
2001-03-02 19:17:53 +00:00
|
|
|
bSaveLinkedSections(sal_True),
|
2004-07-13 07:06:44 +00:00
|
|
|
mnExportFlags( 0 ),
|
2001-09-13 14:18:52 +00:00
|
|
|
mnErrorFlags( ERROR_NO )
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
2004-05-03 12:33:10 +00:00
|
|
|
DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
|
2000-09-18 23:31:44 +00:00
|
|
|
_InitCtor();
|
2001-01-17 12:42:42 +00:00
|
|
|
|
|
|
|
if (xNumberFormatsSupplier.is())
|
2001-10-19 17:43:58 +00:00
|
|
|
pNumExport = new SvXMLNumFmtExport(*this, xNumberFormatsSupplier);
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SvXMLExport::~SvXMLExport()
|
|
|
|
{
|
2001-10-30 14:59:24 +00:00
|
|
|
delete pXMLErrors;
|
2001-03-28 09:28:16 +00:00
|
|
|
delete pImageMapExport;
|
2001-02-28 10:32:54 +00:00
|
|
|
delete pEventExport;
|
2000-09-18 23:31:44 +00:00
|
|
|
delete pNamespaceMap;
|
|
|
|
delete pUnitConv;
|
2001-04-20 07:07:16 +00:00
|
|
|
if (pProgressBarHelper || pNumExport)
|
2001-03-30 09:49:34 +00:00
|
|
|
{
|
|
|
|
if (xExportInfo.is())
|
|
|
|
{
|
|
|
|
uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = xExportInfo->getPropertySetInfo();
|
|
|
|
if (xPropertySetInfo.is())
|
|
|
|
{
|
2001-04-20 07:07:16 +00:00
|
|
|
if (pProgressBarHelper)
|
2001-03-30 09:49:34 +00:00
|
|
|
{
|
2001-04-20 07:07:16 +00:00
|
|
|
OUString sProgressMax(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSMAX));
|
|
|
|
OUString sProgressCurrent(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSCURRENT));
|
2002-07-01 13:17:28 +00:00
|
|
|
OUString sRepeat(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSREPEAT));
|
2001-04-20 07:07:16 +00:00
|
|
|
if (xPropertySetInfo->hasPropertyByName(sProgressMax) &&
|
|
|
|
xPropertySetInfo->hasPropertyByName(sProgressCurrent))
|
|
|
|
{
|
|
|
|
sal_Int32 nProgressMax(pProgressBarHelper->GetReference());
|
|
|
|
sal_Int32 nProgressCurrent(pProgressBarHelper->GetValue());
|
|
|
|
uno::Any aAny;
|
|
|
|
aAny <<= nProgressMax;
|
|
|
|
xExportInfo->setPropertyValue(sProgressMax, aAny);
|
|
|
|
aAny <<= nProgressCurrent;
|
|
|
|
xExportInfo->setPropertyValue(sProgressCurrent, aAny);
|
|
|
|
}
|
2002-07-01 13:17:28 +00:00
|
|
|
if (xPropertySetInfo->hasPropertyByName(sRepeat))
|
|
|
|
xExportInfo->setPropertyValue(sRepeat, cppu::bool2any(pProgressBarHelper->GetRepeat()));
|
2001-04-20 07:07:16 +00:00
|
|
|
}
|
2001-04-20 09:37:39 +00:00
|
|
|
if (pNumExport && (mnExportFlags & (EXPORT_AUTOSTYLES | EXPORT_STYLES)))
|
2001-04-20 07:07:16 +00:00
|
|
|
{
|
2001-04-20 09:37:39 +00:00
|
|
|
OUString sWrittenNumberFormats(RTL_CONSTASCII_USTRINGPARAM(XML_WRITTENNUMBERSTYLES));
|
2001-04-20 07:07:16 +00:00
|
|
|
if (xPropertySetInfo->hasPropertyByName(sWrittenNumberFormats))
|
|
|
|
{
|
|
|
|
uno::Sequence<sal_Int32> aWasUsed;
|
|
|
|
pNumExport->GetWasUsed(aWasUsed);
|
|
|
|
uno::Any aAny;
|
|
|
|
aAny <<= aWasUsed;
|
|
|
|
xExportInfo->setPropertyValue(sWrittenNumberFormats, aAny);
|
|
|
|
}
|
2001-03-30 09:49:34 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2000-11-10 17:15:59 +00:00
|
|
|
delete pProgressBarHelper;
|
2001-04-20 07:07:16 +00:00
|
|
|
delete pNumExport;
|
2001-03-30 09:49:34 +00:00
|
|
|
}
|
2001-05-17 13:07:36 +00:00
|
|
|
|
|
|
|
xmloff::token::ResetTokens();
|
2001-09-13 14:18:52 +00:00
|
|
|
|
2004-05-14 15:10:42 +00:00
|
|
|
if (mxEventListener.is() && xModel.is())
|
|
|
|
xModel->removeEventListener(mxEventListener);
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
2001-01-12 15:16:13 +00:00
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
// XExporter
|
|
|
|
void SAL_CALL SvXMLExport::setSourceDocument( const uno::Reference< lang::XComponent >& xDoc )
|
|
|
|
throw(lang::IllegalArgumentException, uno::RuntimeException)
|
|
|
|
{
|
|
|
|
xModel = uno::Reference< frame::XModel >::query( xDoc );
|
|
|
|
if( !xModel.is() )
|
|
|
|
throw lang::IllegalArgumentException();
|
2004-05-14 15:10:42 +00:00
|
|
|
if (xModel.is() && ! mxEventListener.is())
|
2001-09-13 14:18:52 +00:00
|
|
|
{
|
2004-05-14 15:10:42 +00:00
|
|
|
mxEventListener.set( new SvXMLExportEventListener(this));
|
|
|
|
xModel->addEventListener(mxEventListener);
|
2001-09-13 14:18:52 +00:00
|
|
|
}
|
2001-01-12 15:16:13 +00:00
|
|
|
|
|
|
|
if(!xNumberFormatsSupplier.is() )
|
|
|
|
{
|
|
|
|
xNumberFormatsSupplier = xNumberFormatsSupplier.query( xModel );
|
|
|
|
if(xNumberFormatsSupplier.is() && xHandler.is())
|
2001-10-19 17:43:58 +00:00
|
|
|
pNumExport = new SvXMLNumFmtExport(*this, xNumberFormatsSupplier);
|
2001-01-12 15:16:13 +00:00
|
|
|
}
|
2001-10-19 10:46:32 +00:00
|
|
|
if (xExportInfo.is())
|
2001-04-20 07:07:16 +00:00
|
|
|
{
|
|
|
|
uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = xExportInfo->getPropertySetInfo();
|
|
|
|
if (xPropertySetInfo.is())
|
|
|
|
{
|
2001-10-19 10:46:32 +00:00
|
|
|
OUString sUsePrettyPrinting(RTL_CONSTASCII_USTRINGPARAM(XML_USEPRETTYPRINTING));
|
|
|
|
if (xPropertySetInfo->hasPropertyByName(sUsePrettyPrinting))
|
|
|
|
{
|
|
|
|
uno::Any aAny = xExportInfo->getPropertyValue(sUsePrettyPrinting);
|
|
|
|
if (::cppu::any2bool(aAny))
|
|
|
|
mnExportFlags |= EXPORT_PRETTY;
|
|
|
|
else
|
|
|
|
mnExportFlags &= ~EXPORT_PRETTY;
|
|
|
|
}
|
|
|
|
if (pNumExport && (mnExportFlags & (EXPORT_AUTOSTYLES | EXPORT_STYLES)))
|
2001-04-20 07:07:16 +00:00
|
|
|
{
|
2001-10-19 10:46:32 +00:00
|
|
|
OUString sWrittenNumberFormats(RTL_CONSTASCII_USTRINGPARAM(XML_WRITTENNUMBERSTYLES));
|
|
|
|
if (xPropertySetInfo->hasPropertyByName(sWrittenNumberFormats))
|
|
|
|
{
|
|
|
|
uno::Any aAny = xExportInfo->getPropertyValue(sWrittenNumberFormats);
|
|
|
|
uno::Sequence<sal_Int32> aWasUsed;
|
|
|
|
if(aAny >>= aWasUsed)
|
|
|
|
pNumExport->SetWasUsed(aWasUsed);
|
|
|
|
}
|
2001-04-20 07:07:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2001-10-12 15:12:09 +00:00
|
|
|
|
|
|
|
// namespaces for user defined attributes
|
|
|
|
Reference< XMultiServiceFactory > xFactory( xModel, UNO_QUERY );
|
|
|
|
if( xFactory.is() )
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
Reference < XInterface > xIfc =
|
|
|
|
xFactory->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM(
|
|
|
|
"com.sun.star.xml.NamespaceMap")) );
|
|
|
|
if( xIfc.is() )
|
|
|
|
{
|
|
|
|
Reference< XNameAccess > xNamespaceMap( xIfc, UNO_QUERY );
|
|
|
|
if( xNamespaceMap.is() )
|
|
|
|
{
|
|
|
|
Sequence< OUString > aPrefixes( xNamespaceMap->getElementNames() );
|
|
|
|
|
|
|
|
OUString* pPrefix = aPrefixes.getArray();
|
|
|
|
const sal_Int32 nCount = aPrefixes.getLength();
|
|
|
|
sal_Int32 nIndex;
|
|
|
|
OUString aURL;
|
|
|
|
|
|
|
|
for( nIndex = 0; nIndex < nCount; nIndex++, *pPrefix++ )
|
|
|
|
{
|
|
|
|
if( xNamespaceMap->getByName( *pPrefix ) >>= aURL )
|
|
|
|
_GetNamespaceMap().Add( *pPrefix, aURL, XML_NAMESPACE_UNKNOWN );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( com::sun::star::uno::Exception& )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
2001-01-12 15:16:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// XInitialize
|
|
|
|
void SAL_CALL SvXMLExport::initialize( const uno::Sequence< uno::Any >& aArguments )
|
|
|
|
throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
2001-10-16 11:32:03 +00:00
|
|
|
// #93186# we need to queryInterface every single Any with any expected outcome. This variable hold the queryInterface results.
|
|
|
|
|
2001-01-12 15:16:13 +00:00
|
|
|
const sal_Int32 nAnyCount = aArguments.getLength();
|
|
|
|
const uno::Any* pAny = aArguments.getConstArray();
|
|
|
|
|
|
|
|
for( sal_Int32 nIndex = 0; nIndex < nAnyCount; nIndex++, pAny++ )
|
|
|
|
{
|
2001-10-16 11:32:03 +00:00
|
|
|
Reference<XInterface> xValue;
|
|
|
|
*pAny >>= xValue;
|
|
|
|
|
|
|
|
// status indicator
|
|
|
|
uno::Reference<task::XStatusIndicator> xTmpStatus( xValue, UNO_QUERY );
|
|
|
|
if ( xTmpStatus.is() )
|
|
|
|
xStatusIndicator = xTmpStatus;
|
|
|
|
|
|
|
|
// graphic resolver
|
|
|
|
uno::Reference<document::XGraphicObjectResolver> xTmpGraphic(
|
|
|
|
xValue, UNO_QUERY );
|
|
|
|
if ( xTmpGraphic.is() )
|
|
|
|
xGraphicResolver = xTmpGraphic;
|
|
|
|
|
|
|
|
// object resolver
|
|
|
|
uno::Reference<document::XEmbeddedObjectResolver> xTmpObjectResolver(
|
|
|
|
xValue, UNO_QUERY );
|
|
|
|
if ( xTmpObjectResolver.is() )
|
|
|
|
xEmbeddedResolver = xTmpObjectResolver;
|
|
|
|
|
|
|
|
// document handler
|
|
|
|
uno::Reference<xml::sax::XDocumentHandler> xTmpDocHandler(
|
|
|
|
xValue, UNO_QUERY );
|
|
|
|
if( xTmpDocHandler.is() )
|
2001-01-12 15:16:13 +00:00
|
|
|
{
|
2001-10-16 11:32:03 +00:00
|
|
|
xHandler = xTmpDocHandler;
|
2001-01-12 15:16:13 +00:00
|
|
|
*pAny >>= xExtHandler;
|
|
|
|
|
|
|
|
if (xNumberFormatsSupplier.is() && pNumExport == NULL)
|
2001-10-19 17:43:58 +00:00
|
|
|
pNumExport = new SvXMLNumFmtExport(*this, xNumberFormatsSupplier);
|
2001-01-12 15:16:13 +00:00
|
|
|
}
|
2001-10-16 11:32:03 +00:00
|
|
|
|
|
|
|
// property set to transport data across
|
|
|
|
uno::Reference<beans::XPropertySet> xTmpPropertySet(
|
|
|
|
xValue, UNO_QUERY );
|
|
|
|
if( xTmpPropertySet.is() )
|
|
|
|
xExportInfo = xTmpPropertySet;
|
2004-07-13 07:06:44 +00:00
|
|
|
|
2001-01-12 15:16:13 +00:00
|
|
|
}
|
2004-07-13 07:06:44 +00:00
|
|
|
|
|
|
|
if( xExportInfo.is() )
|
|
|
|
{
|
|
|
|
uno::Reference< beans::XPropertySetInfo > xPropertySetInfo =
|
|
|
|
xExportInfo->getPropertySetInfo();
|
|
|
|
OUString sPropName(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("BaseURI" ) );
|
|
|
|
if( xPropertySetInfo->hasPropertyByName(sPropName) )
|
|
|
|
{
|
|
|
|
uno::Any aAny = xExportInfo->getPropertyValue(sPropName);
|
|
|
|
aAny >>= sOrigFileName;
|
|
|
|
}
|
|
|
|
OUString sRelPath;
|
|
|
|
sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("StreamRelPath" ) );
|
|
|
|
if( xPropertySetInfo->hasPropertyByName(sPropName) )
|
|
|
|
{
|
|
|
|
uno::Any aAny = xExportInfo->getPropertyValue(sPropName);
|
|
|
|
aAny >>= sRelPath;
|
|
|
|
}
|
|
|
|
OUString sName;
|
|
|
|
sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("StreamName" ) );
|
|
|
|
if( xPropertySetInfo->hasPropertyByName(sPropName) )
|
|
|
|
{
|
|
|
|
uno::Any aAny = xExportInfo->getPropertyValue(sPropName);
|
|
|
|
aAny >>= sName;
|
|
|
|
}
|
|
|
|
if( sOrigFileName.getLength() && sName.getLength() )
|
|
|
|
{
|
|
|
|
INetURLObject aBaseURL( sOrigFileName );
|
|
|
|
if( sRelPath.getLength() )
|
|
|
|
aBaseURL.insertName( sRelPath );
|
|
|
|
aBaseURL.insertName( sName );
|
|
|
|
sOrigFileName = aBaseURL.GetMainURL(INetURLObject::DECODE_TO_IURI);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-01-12 15:16:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// XFilter
|
|
|
|
sal_Bool SAL_CALL SvXMLExport::filter( const uno::Sequence< beans::PropertyValue >& aDescriptor ) throw(uno::RuntimeException)
|
|
|
|
{
|
2001-08-03 15:24:00 +00:00
|
|
|
RTL_LOGFILE_CONTEXT_AUTHOR( aLogContext, "xmloff", LOGFILE_AUTHOR,
|
|
|
|
"SvXMLExport::filter" );
|
2001-07-26 13:55:49 +00:00
|
|
|
|
2001-07-26 10:32:47 +00:00
|
|
|
// check for xHandler first... should have been supplied in initialize
|
|
|
|
if( !xHandler.is() )
|
|
|
|
return sal_False;
|
|
|
|
|
2001-01-12 15:16:13 +00:00
|
|
|
try
|
|
|
|
{
|
2004-07-13 07:06:44 +00:00
|
|
|
const sal_uInt32 nTest =
|
|
|
|
EXPORT_META|EXPORT_STYLES|EXPORT_CONTENT|EXPORT_SETTINGS;
|
|
|
|
if( (mnExportFlags & nTest) == nTest && !sOrigFileName.getLength() )
|
2001-01-12 15:16:13 +00:00
|
|
|
{
|
2004-07-13 07:06:44 +00:00
|
|
|
// evaluate descriptor only for flat files and if a base URI
|
|
|
|
// has not been provided already
|
|
|
|
const sal_Int32 nPropCount = aDescriptor.getLength();
|
|
|
|
const beans::PropertyValue* pProps = aDescriptor.getConstArray();
|
2001-01-12 15:16:13 +00:00
|
|
|
|
2004-07-13 07:06:44 +00:00
|
|
|
for( sal_Int32 nIndex = 0; nIndex < nPropCount; nIndex++, pProps++ )
|
2002-11-11 13:32:05 +00:00
|
|
|
{
|
2004-07-13 07:06:44 +00:00
|
|
|
const OUString& rPropName = pProps->Name;
|
|
|
|
const Any& rValue = pProps->Value;
|
|
|
|
|
|
|
|
if( rPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "FileName" ) ) )
|
|
|
|
{
|
|
|
|
if( !(rValue >>= sOrigFileName ) )
|
|
|
|
return sal_False;
|
|
|
|
}
|
|
|
|
else if (rPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "FilterName" ) ) )
|
|
|
|
{
|
|
|
|
if( !(rValue >>= sFilterName ) )
|
|
|
|
return sal_False;
|
|
|
|
}
|
2002-11-11 13:32:05 +00:00
|
|
|
}
|
2001-01-12 15:16:13 +00:00
|
|
|
}
|
|
|
|
|
2001-07-26 13:55:49 +00:00
|
|
|
#ifdef TIMELOG
|
2004-04-27 14:58:12 +00:00
|
|
|
if (GetModel().is())
|
|
|
|
{
|
|
|
|
// print a trace message with the URL
|
|
|
|
ByteString aUrl( (String) GetModel()->getURL(),
|
|
|
|
RTL_TEXTENCODING_ASCII_US );
|
|
|
|
RTL_LOGFILE_CONTEXT_TRACE1( aLogContext, "%s", aUrl.GetBuffer() );
|
|
|
|
|
|
|
|
// we also want a trace message with the document class
|
|
|
|
ByteString aClass( (String)GetXMLToken(meClass),
|
|
|
|
RTL_TEXTENCODING_ASCII_US );
|
|
|
|
RTL_LOGFILE_CONTEXT_TRACE1( aLogContext, "class=\"%s\"",
|
|
|
|
aClass.GetBuffer() );
|
|
|
|
}
|
2001-07-26 13:55:49 +00:00
|
|
|
#endif
|
2001-08-03 15:24:00 +00:00
|
|
|
|
2001-06-18 14:08:14 +00:00
|
|
|
exportDoc( meClass );
|
2001-01-12 15:16:13 +00:00
|
|
|
}
|
|
|
|
catch( uno::Exception e )
|
|
|
|
{
|
2001-05-07 05:03:01 +00:00
|
|
|
// We must catch exceptions, because according to the
|
|
|
|
// API definition export must not throw one!
|
2001-09-25 12:08:43 +00:00
|
|
|
Sequence<OUString> aSeq(0);
|
|
|
|
SetError( XMLERROR_FLAG_ERROR | XMLERROR_FLAG_SEVERE | XMLERROR_API,
|
|
|
|
aSeq, e.Message, NULL );
|
2001-01-12 15:16:13 +00:00
|
|
|
}
|
|
|
|
|
2001-09-25 12:08:43 +00:00
|
|
|
// return true only if no error occured
|
|
|
|
return (GetErrorFlags() & (ERROR_DO_NOTHING|ERROR_ERROR_OCCURED)) == 0;
|
2001-01-12 15:16:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SAL_CALL SvXMLExport::cancel() throw(uno::RuntimeException)
|
|
|
|
{
|
2001-09-18 15:28:34 +00:00
|
|
|
// stop export
|
|
|
|
Sequence<OUString> aEmptySeq;
|
|
|
|
SetError(XMLERROR_CANCEL|XMLERROR_FLAG_SEVERE, aEmptySeq);
|
2001-01-12 15:16:13 +00:00
|
|
|
}
|
|
|
|
|
2002-11-11 13:32:05 +00:00
|
|
|
::rtl::OUString SAL_CALL SvXMLExport::getName( )
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
return sFilterName;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SAL_CALL SvXMLExport::setName( const ::rtl::OUString& aName )
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
// do nothing, because it is not possible to set the FilterName
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2001-01-12 15:16:13 +00:00
|
|
|
// XServiceInfo
|
|
|
|
OUString SAL_CALL SvXMLExport::getImplementationName( ) throw(uno::RuntimeException)
|
|
|
|
{
|
|
|
|
OUString aStr;
|
|
|
|
return aStr;
|
|
|
|
}
|
|
|
|
|
2001-09-13 13:55:31 +00:00
|
|
|
sal_Bool SAL_CALL SvXMLExport::supportsService( const OUString& rServiceName ) throw(uno::RuntimeException)
|
2001-01-12 15:16:13 +00:00
|
|
|
{
|
2001-09-13 13:55:31 +00:00
|
|
|
return
|
|
|
|
rServiceName.equalsAsciiL(
|
|
|
|
"com.sun.star.document.ExportFilter",
|
|
|
|
sizeof("com.sun.star.document.ExportFilter")-1 ) ||
|
|
|
|
rServiceName.equalsAsciiL(
|
|
|
|
"com.sun.star.xml.XMLExportFilter",
|
|
|
|
sizeof("com.sun.star.xml.XMLExportFilter")-1);
|
2001-01-12 15:16:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
uno::Sequence< OUString > SAL_CALL SvXMLExport::getSupportedServiceNames( )
|
|
|
|
throw(uno::RuntimeException)
|
|
|
|
{
|
2001-09-13 13:55:31 +00:00
|
|
|
uno::Sequence<OUString> aSeq(2);
|
|
|
|
OUString* pSeq = aSeq.getArray();
|
|
|
|
aSeq[0] = OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.ExportFilter"));
|
|
|
|
aSeq[1] = OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.XMLExportFilter"));
|
2001-01-12 15:16:13 +00:00
|
|
|
return aSeq;
|
|
|
|
}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
void SvXMLExport::AddAttributeASCII( sal_uInt16 nPrefixKey,
|
|
|
|
const sal_Char *pName,
|
|
|
|
const sal_Char *pValue )
|
|
|
|
{
|
|
|
|
OUString sName( OUString::createFromAscii( pName ) );
|
|
|
|
OUString sValue( OUString::createFromAscii( pValue ) );
|
|
|
|
|
|
|
|
pAttrList->AddAttribute( pNamespaceMap->GetQNameByKey( nPrefixKey,
|
|
|
|
sName ),
|
2003-03-27 17:21:03 +00:00
|
|
|
sValue );
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::AddAttribute( sal_uInt16 nPrefixKey, const sal_Char *pName,
|
|
|
|
const OUString& rValue )
|
|
|
|
{
|
|
|
|
OUString sName( OUString::createFromAscii( pName ) );
|
|
|
|
|
|
|
|
pAttrList->AddAttribute( pNamespaceMap->GetQNameByKey( nPrefixKey,
|
|
|
|
sName ),
|
2003-03-27 17:21:03 +00:00
|
|
|
rValue );
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::AddAttribute( sal_uInt16 nPrefixKey, const OUString& rName,
|
|
|
|
const OUString& rValue )
|
|
|
|
{
|
|
|
|
pAttrList->AddAttribute( pNamespaceMap->GetQNameByKey( nPrefixKey, rName ),
|
2003-03-27 17:21:03 +00:00
|
|
|
rValue );
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
2001-05-16 14:21:01 +00:00
|
|
|
void SvXMLExport::AddAttribute( sal_uInt16 nPrefixKey,
|
|
|
|
enum XMLTokenEnum eName,
|
|
|
|
const OUString& rValue )
|
|
|
|
{
|
|
|
|
pAttrList->AddAttribute(
|
|
|
|
pNamespaceMap->GetQNameByKey( nPrefixKey, GetXMLToken(eName) ),
|
2003-03-27 17:21:03 +00:00
|
|
|
rValue );
|
2001-05-16 14:21:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::AddAttribute( sal_uInt16 nPrefixKey,
|
|
|
|
enum XMLTokenEnum eName,
|
|
|
|
enum XMLTokenEnum eValue)
|
|
|
|
{
|
|
|
|
pAttrList->AddAttribute(
|
|
|
|
pNamespaceMap->GetQNameByKey( nPrefixKey, GetXMLToken(eName) ),
|
2003-03-27 17:21:03 +00:00
|
|
|
GetXMLToken(eValue) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::AddAttribute( const ::rtl::OUString& rQName,
|
|
|
|
const ::rtl::OUString& rValue )
|
|
|
|
{
|
|
|
|
pAttrList->AddAttribute(
|
|
|
|
rQName,
|
|
|
|
rValue );
|
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::AddAttribute( const ::rtl::OUString& rQName,
|
|
|
|
enum ::xmloff::token::XMLTokenEnum eValue )
|
|
|
|
{
|
|
|
|
pAttrList->AddAttribute(
|
|
|
|
rQName,
|
|
|
|
GetXMLToken(eValue) );
|
2001-05-16 14:21:01 +00:00
|
|
|
}
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
void SvXMLExport::AddAttributeList( const uno::Reference< xml::sax::XAttributeList >& xAttrList )
|
|
|
|
{
|
|
|
|
if( xAttrList.is())
|
|
|
|
pAttrList->AppendAttributeList( xAttrList );
|
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::ClearAttrList()
|
|
|
|
{
|
|
|
|
pAttrList->Clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifndef PRODUCT
|
|
|
|
void SvXMLExport::CheckAttrList()
|
|
|
|
{
|
|
|
|
DBG_ASSERT( !pAttrList->getLength(),
|
|
|
|
"XMLExport::CheckAttrList: list is not empty" );
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
void SvXMLExport::ImplExportMeta()
|
|
|
|
{
|
|
|
|
CheckAttrList();
|
|
|
|
|
|
|
|
{
|
|
|
|
// <office:meta>
|
2001-06-29 20:07:26 +00:00
|
|
|
SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, XML_META,
|
2000-09-18 23:31:44 +00:00
|
|
|
sal_True, sal_True );
|
|
|
|
|
|
|
|
_ExportMeta();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-03-05 08:28:51 +00:00
|
|
|
void SvXMLExport::ImplExportSettings()
|
|
|
|
{
|
|
|
|
CheckAttrList();
|
|
|
|
|
|
|
|
{
|
2001-06-29 20:07:26 +00:00
|
|
|
SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, XML_SETTINGS,
|
2001-03-11 14:52:23 +00:00
|
|
|
sal_True, sal_True );
|
|
|
|
XMLSettingsExportHelper aSettingsExportHelper(*this);
|
|
|
|
_ExportViewSettings(aSettingsExportHelper);
|
|
|
|
_ExportConfigurationSettings(aSettingsExportHelper);
|
2001-03-05 08:28:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
void SvXMLExport::ImplExportStyles( sal_Bool bUsed )
|
|
|
|
{
|
|
|
|
CheckAttrList();
|
|
|
|
|
2001-06-29 20:07:26 +00:00
|
|
|
// AddAttribute( XML_NAMESPACE_NONE, XML_ID, XML_STYLES_ID );
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
|
|
|
// <style:styles>
|
2001-06-29 20:07:26 +00:00
|
|
|
SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, XML_STYLES,
|
2000-09-18 23:31:44 +00:00
|
|
|
sal_True, sal_True );
|
|
|
|
|
|
|
|
_ExportStyles( sal_False );
|
|
|
|
}
|
2001-03-01 15:31:32 +00:00
|
|
|
}
|
2000-09-18 23:31:44 +00:00
|
|
|
|
2001-03-01 15:31:32 +00:00
|
|
|
void SvXMLExport::ImplExportAutoStyles( sal_Bool bUsed )
|
|
|
|
{
|
2001-06-29 20:07:26 +00:00
|
|
|
// AddAttributeASCII( XML_NAMESPACE_NONE, XML_ID, XML_AUTO_STYLES_ID );
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
|
|
|
// <style:automatic-styles>
|
|
|
|
SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE,
|
2001-06-29 20:07:26 +00:00
|
|
|
XML_AUTOMATIC_STYLES, sal_True, sal_True );
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
#if 0
|
2001-06-29 20:07:26 +00:00
|
|
|
AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE );
|
|
|
|
AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, XML_STYLES_HREF );
|
|
|
|
AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD );
|
|
|
|
AddAttribute( XML_NAMESPACE_XLINK, XML_ROLE,
|
2000-09-18 23:31:44 +00:00
|
|
|
pNamespaceMap->GetQNameByKey( XML_NAMESPACE_OFFICE,
|
2001-06-29 20:07:26 +00:00
|
|
|
GetXMLToken(XML_STYLESHEET)) );
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
|
|
|
// <style:use-styles>
|
|
|
|
SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE,
|
2001-06-29 20:07:26 +00:00
|
|
|
XML_USE_STYLES, sal_True, sal_True );
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
_ExportAutoStyles();
|
|
|
|
}
|
2001-03-01 15:31:32 +00:00
|
|
|
}
|
2000-09-18 23:31:44 +00:00
|
|
|
|
2001-03-01 15:31:32 +00:00
|
|
|
void SvXMLExport::ImplExportMasterStyles( sal_Bool bUsed )
|
|
|
|
{
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
|
|
|
// <style:master-styles>
|
2001-06-29 20:07:26 +00:00
|
|
|
SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, XML_MASTER_STYLES,
|
2000-09-18 23:31:44 +00:00
|
|
|
sal_True, sal_True );
|
|
|
|
|
|
|
|
_ExportMasterStyles();
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
2001-06-29 20:07:26 +00:00
|
|
|
AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE );
|
|
|
|
AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, XML_AUTO_STYLES_HREF );
|
|
|
|
AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD );
|
|
|
|
AddAttribute( XML_NAMESPACE_XLINK, XML_ROLE,
|
2000-09-18 23:31:44 +00:00
|
|
|
pNamespaceMap->GetQNameByKey( XML_NAMESPACE_OFFICE,
|
2001-06-29 20:07:26 +00:00
|
|
|
GetXMLToken(XML_STYLESHEET) ) );
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
|
|
|
// <style:use-styles>
|
|
|
|
SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE,
|
2001-06-29 20:07:26 +00:00
|
|
|
XML_USE_STYLES, sal_True, sal_True );
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::ImplExportContent()
|
|
|
|
{
|
|
|
|
CheckAttrList();
|
|
|
|
|
2000-12-20 12:17:23 +00:00
|
|
|
CheckAttrList();
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
2001-06-29 20:07:26 +00:00
|
|
|
SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, XML_BODY,
|
2000-09-18 23:31:44 +00:00
|
|
|
sal_True, sal_True );
|
2004-07-13 07:06:44 +00:00
|
|
|
{
|
|
|
|
XMLTokenEnum eClass = meClass;
|
|
|
|
if( XML_TEXT_GLOBAL == eClass )
|
|
|
|
{
|
|
|
|
AddAttribute( XML_NAMESPACE_TEXT, XML_GLOBAL,
|
|
|
|
GetXMLToken( XML_TRUE ) );
|
|
|
|
eClass = XML_TEXT;
|
|
|
|
}
|
2004-08-20 07:13:47 +00:00
|
|
|
// <office:body ...>
|
|
|
|
SetBodyAttributes();
|
2004-07-13 07:06:44 +00:00
|
|
|
SvXMLElementExport aElem( *this, meClass != XML_TOKEN_INVALID,
|
|
|
|
XML_NAMESPACE_OFFICE, eClass,
|
|
|
|
sal_True, sal_True );
|
2000-09-18 23:31:44 +00:00
|
|
|
|
2004-07-13 07:06:44 +00:00
|
|
|
_ExportContent();
|
|
|
|
}
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-02-23 14:48:23 +00:00
|
|
|
void SvXMLExport::SetBodyAttributes()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2001-06-18 14:08:14 +00:00
|
|
|
sal_uInt32 SvXMLExport::exportDoc( enum ::xmloff::token::XMLTokenEnum eClass )
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
2002-06-04 07:27:50 +00:00
|
|
|
bool bOwnGraphicResolver = false;
|
|
|
|
bool bOwnEmbeddedResolver = false;
|
|
|
|
|
|
|
|
if( !xGraphicResolver.is() || !xEmbeddedResolver.is() )
|
|
|
|
{
|
|
|
|
Reference< XMultiServiceFactory > xFactory( xModel, UNO_QUERY );
|
|
|
|
if( xFactory.is() )
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if( !xGraphicResolver.is() )
|
|
|
|
{
|
|
|
|
xGraphicResolver = Reference< XGraphicObjectResolver >::query(
|
|
|
|
xFactory->createInstance(
|
|
|
|
OUString(RTL_CONSTASCII_USTRINGPARAM(
|
|
|
|
"com.sun.star.document.ExportGraphicObjectResolver"))));
|
2002-06-11 07:07:05 +00:00
|
|
|
bOwnGraphicResolver = xGraphicResolver.is();
|
2002-06-04 07:27:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if( !xEmbeddedResolver.is() )
|
|
|
|
{
|
|
|
|
xEmbeddedResolver = Reference< XEmbeddedObjectResolver >::query(
|
|
|
|
xFactory->createInstance(
|
|
|
|
OUString(RTL_CONSTASCII_USTRINGPARAM(
|
|
|
|
"com.sun.star.document.ExportEmbeddedObjectResolver"))));
|
2002-06-11 07:07:05 +00:00
|
|
|
bOwnEmbeddedResolver = xEmbeddedResolver.is();
|
2002-06-04 07:27:50 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( com::sun::star::uno::Exception& )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2004-07-13 07:06:44 +00:00
|
|
|
if( (getExportFlags() & EXPORT_OASIS) == 0 )
|
|
|
|
{
|
|
|
|
Reference< lang::XMultiServiceFactory > xFactory = getServiceFactory();
|
|
|
|
if( xFactory.is() )
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
::comphelper::PropertyMapEntry aInfoMap[] =
|
|
|
|
{
|
|
|
|
{ "Class", sizeof("Class")-1, 0,
|
|
|
|
&::getCppuType((::rtl::OUString*)0),
|
|
|
|
PropertyAttribute::MAYBEVOID, 0},
|
|
|
|
{ NULL, 0, 0, NULL, 0, 0 }
|
|
|
|
};
|
|
|
|
Reference< XPropertySet > xConvPropSet(
|
|
|
|
::comphelper::GenericPropertySet_CreateInstance(
|
|
|
|
new ::comphelper::PropertySetInfo( aInfoMap ) ) );
|
|
|
|
|
|
|
|
Any aAny;
|
|
|
|
aAny <<= GetXMLToken( eClass );
|
|
|
|
xConvPropSet->setPropertyValue(
|
|
|
|
OUString(RTL_CONSTASCII_USTRINGPARAM("Class")), aAny );
|
|
|
|
|
|
|
|
Reference< XPropertySet > xPropSet =
|
|
|
|
xExportInfo.is()
|
|
|
|
? PropertySetMerger_CreateInstance( xExportInfo,
|
|
|
|
xConvPropSet )
|
|
|
|
: xExportInfo;
|
|
|
|
|
|
|
|
Sequence<Any> aArgs( 2 );
|
|
|
|
aArgs[0] <<= xHandler;
|
|
|
|
aArgs[1] <<= xPropSet;
|
|
|
|
|
|
|
|
// get filter component
|
|
|
|
Reference< xml::sax::XDocumentHandler > xTmpDocHandler(
|
|
|
|
xFactory->createInstanceWithArguments(
|
|
|
|
OUString::createFromAscii("com.sun.star.comp.Oasis2OOoTransformer"),
|
|
|
|
aArgs), UNO_QUERY);
|
|
|
|
OSL_ENSURE( xTmpDocHandler.is(),
|
|
|
|
"can't instantiate OASIS transformer component" );
|
|
|
|
if( xTmpDocHandler.is() )
|
|
|
|
{
|
|
|
|
xHandler = xTmpDocHandler;
|
|
|
|
xExtHandler = uno::Reference<xml::sax::XExtendedDocumentHandler>( xHandler, UNO_QUERY );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( com::sun::star::uno::Exception& )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2002-06-04 07:27:50 +00:00
|
|
|
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
xHandler->startDocument();
|
|
|
|
|
|
|
|
// <?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
// xHandler->processingInstruction( S2U( sXML_xml ), S2U( sXML_xml_pi ) );
|
|
|
|
|
|
|
|
// <office:document ...>
|
|
|
|
CheckAttrList();
|
|
|
|
|
2001-03-19 15:30:27 +00:00
|
|
|
// namespace attributes
|
|
|
|
// ( The namespace decls should be first attributes in the element;
|
|
|
|
// some faulty XML parsers (JAXP1.1) have a problem with this,
|
|
|
|
// also it's more elegant )
|
2001-07-10 15:50:23 +00:00
|
|
|
sal_uInt16 nPos = pNamespaceMap->GetFirstKey();
|
2000-09-18 23:31:44 +00:00
|
|
|
while( USHRT_MAX != nPos )
|
|
|
|
{
|
2001-07-10 15:50:23 +00:00
|
|
|
pAttrList->AddAttribute( pNamespaceMap->GetAttrNameByKey( nPos ),
|
|
|
|
pNamespaceMap->GetNameByKey( nPos ) );
|
|
|
|
nPos = pNamespaceMap->GetNextKey( nPos );
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
2004-07-13 07:06:44 +00:00
|
|
|
|
2001-03-19 15:30:27 +00:00
|
|
|
|
|
|
|
// office:version = ...
|
|
|
|
if( !bExtended )
|
2001-06-29 20:07:26 +00:00
|
|
|
AddAttribute( XML_NAMESPACE_OFFICE, XML_VERSION,
|
|
|
|
OUString::createFromAscii(sXML_1_0) );
|
2001-03-19 15:30:27 +00:00
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
2001-06-29 20:07:26 +00:00
|
|
|
enum XMLTokenEnum eRootService = XML_TOKEN_INVALID;
|
2001-03-23 05:56:35 +00:00
|
|
|
const sal_Int32 nExportMode = mnExportFlags & (EXPORT_META|EXPORT_STYLES|EXPORT_CONTENT|EXPORT_SETTINGS);
|
2001-03-04 15:01:11 +00:00
|
|
|
if( EXPORT_META == nExportMode )
|
|
|
|
{
|
|
|
|
// export only meta
|
2001-06-29 20:07:26 +00:00
|
|
|
eRootService = XML_DOCUMENT_META;
|
2001-03-04 15:01:11 +00:00
|
|
|
}
|
2001-03-05 08:28:51 +00:00
|
|
|
else if ( EXPORT_SETTINGS == nExportMode )
|
|
|
|
{
|
|
|
|
// export only settings
|
2001-06-29 20:07:26 +00:00
|
|
|
eRootService = XML_DOCUMENT_SETTINGS;
|
2001-03-05 08:28:51 +00:00
|
|
|
}
|
2001-03-04 15:01:11 +00:00
|
|
|
else if( EXPORT_STYLES == nExportMode )
|
|
|
|
{
|
|
|
|
// export only styles
|
2001-06-29 20:07:26 +00:00
|
|
|
eRootService = XML_DOCUMENT_STYLES;
|
2001-03-04 15:01:11 +00:00
|
|
|
}
|
|
|
|
else if( EXPORT_CONTENT == nExportMode )
|
|
|
|
{
|
|
|
|
// export only content
|
2001-06-29 20:07:26 +00:00
|
|
|
eRootService = XML_DOCUMENT_CONTENT;
|
2001-03-04 15:01:11 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// the god'ol one4all element
|
2001-06-29 20:07:26 +00:00
|
|
|
eRootService = XML_DOCUMENT;
|
2004-07-13 07:06:44 +00:00
|
|
|
// office:mimetype = ... (only for stream containing the content)
|
|
|
|
if( eClass != XML_TOKEN_INVALID )
|
|
|
|
{
|
|
|
|
OUString aTmp( RTL_CONSTASCII_USTRINGPARAM("application/x-vnd.oasis.openoffice.") );
|
|
|
|
aTmp += GetXMLToken( eClass );
|
|
|
|
AddAttribute( XML_NAMESPACE_OFFICE, XML_MIMETYPE, aTmp );
|
|
|
|
}
|
2001-03-04 15:01:11 +00:00
|
|
|
}
|
|
|
|
|
2004-07-13 07:06:44 +00:00
|
|
|
// if( (getExportFlags() & EXPORT_NODOCTYPE) == 0 &&
|
|
|
|
// xExtHandler.is() )
|
|
|
|
// {
|
|
|
|
// OUStringBuffer aDocType(
|
|
|
|
// GetXMLToken(XML_XML_DOCTYPE_PREFIX).getLength() +
|
|
|
|
// GetXMLToken(XML_XML_DOCTYPE_SUFFIX).getLength() + 30 );
|
|
|
|
//
|
|
|
|
// aDocType.append( GetXMLToken(XML_XML_DOCTYPE_PREFIX) );
|
|
|
|
// aDocType.append( GetNamespaceMap().GetQNameByKey(
|
|
|
|
// XML_NAMESPACE_OFFICE, GetXMLToken(eRootService) ) );
|
|
|
|
// aDocType.append( GetXMLToken(XML_XML_DOCTYPE_SUFFIX) );
|
|
|
|
// xExtHandler->unknown( aDocType.makeStringAndClear() );
|
|
|
|
// }
|
2001-04-24 14:34:42 +00:00
|
|
|
|
2001-06-29 20:07:26 +00:00
|
|
|
SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, eRootService, sal_True, sal_True );
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
// meta information
|
2001-03-01 15:31:32 +00:00
|
|
|
if( mnExportFlags & EXPORT_META )
|
|
|
|
ImplExportMeta();
|
2000-09-18 23:31:44 +00:00
|
|
|
|
2001-03-05 08:28:51 +00:00
|
|
|
// settings
|
2001-03-01 15:31:32 +00:00
|
|
|
if( mnExportFlags & EXPORT_SETTINGS )
|
2001-03-05 08:28:51 +00:00
|
|
|
ImplExportSettings();
|
2001-02-14 05:24:00 +00:00
|
|
|
|
2000-12-07 11:09:22 +00:00
|
|
|
// scripts
|
2001-03-01 15:31:32 +00:00
|
|
|
if( mnExportFlags & EXPORT_SCRIPTS )
|
|
|
|
_ExportScripts();
|
|
|
|
|
|
|
|
// font declerations
|
|
|
|
if( mnExportFlags & EXPORT_FONTDECLS )
|
|
|
|
_ExportFontDecls();
|
2000-12-07 11:09:22 +00:00
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
// styles
|
2001-03-01 15:31:32 +00:00
|
|
|
if( mnExportFlags & EXPORT_STYLES )
|
|
|
|
ImplExportStyles( sal_False );
|
|
|
|
|
|
|
|
// autostyles
|
|
|
|
if( mnExportFlags & EXPORT_AUTOSTYLES )
|
|
|
|
ImplExportAutoStyles( sal_False );
|
|
|
|
|
|
|
|
// masterstyles
|
|
|
|
if( mnExportFlags & EXPORT_MASTERSTYLES )
|
|
|
|
ImplExportMasterStyles( sal_False );
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
// contnt
|
2001-03-01 15:31:32 +00:00
|
|
|
if( mnExportFlags & EXPORT_CONTENT )
|
|
|
|
ImplExportContent();
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
xHandler->endDocument();
|
|
|
|
|
2002-06-04 07:27:50 +00:00
|
|
|
if( bOwnGraphicResolver )
|
|
|
|
{
|
|
|
|
Reference< XComponent > xComp( xGraphicResolver, UNO_QUERY );
|
|
|
|
xComp->dispose();
|
|
|
|
}
|
|
|
|
|
|
|
|
if( bOwnEmbeddedResolver )
|
|
|
|
{
|
|
|
|
Reference< XComponent > xComp( xEmbeddedResolver, UNO_QUERY );
|
|
|
|
xComp->dispose();
|
|
|
|
}
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::_ExportMeta()
|
|
|
|
{
|
2001-10-19 17:43:58 +00:00
|
|
|
SfxXMLMetaExport aMeta( *this, xModel );
|
|
|
|
aMeta.Export();
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
2001-03-11 14:52:23 +00:00
|
|
|
void SvXMLExport::_ExportViewSettings(const XMLSettingsExportHelper& rSettingsExportHelper)
|
2001-02-14 05:24:00 +00:00
|
|
|
{
|
2001-03-11 14:52:23 +00:00
|
|
|
uno::Sequence<beans::PropertyValue> aProps;
|
|
|
|
GetViewSettings(aProps);
|
2001-04-04 04:26:04 +00:00
|
|
|
uno::Reference<document::XViewDataSupplier> xViewDataSupplier(GetModel(), uno::UNO_QUERY);
|
|
|
|
if(xViewDataSupplier.is())
|
|
|
|
{
|
2001-04-26 09:50:03 +00:00
|
|
|
uno::Reference<container::XIndexAccess> xIndexAccess;
|
|
|
|
xViewDataSupplier->setViewData( xIndexAccess ); // make sure we get a newly created sequence
|
|
|
|
xIndexAccess = xViewDataSupplier->getViewData();
|
2001-04-04 04:26:04 +00:00
|
|
|
if(xIndexAccess.is())
|
|
|
|
{
|
|
|
|
sal_Int32 nOldLength(aProps.getLength());
|
|
|
|
aProps.realloc(nOldLength + 1);
|
|
|
|
beans::PropertyValue aProp;
|
|
|
|
aProp.Name = OUString(RTL_CONSTASCII_USTRINGPARAM("Views"));
|
|
|
|
aProp.Value <<= xIndexAccess;
|
|
|
|
aProps[nOldLength] = aProp;
|
|
|
|
}
|
|
|
|
}
|
2001-06-29 20:07:26 +00:00
|
|
|
OUString sViewSettings(GetXMLToken(XML_VIEW_SETTINGS));
|
2001-03-11 14:52:23 +00:00
|
|
|
rSettingsExportHelper.exportSettings(aProps, sViewSettings);
|
2001-02-14 05:24:00 +00:00
|
|
|
}
|
|
|
|
|
2001-03-11 14:52:23 +00:00
|
|
|
void SvXMLExport::_ExportConfigurationSettings(const XMLSettingsExportHelper& rSettingsExportHelper)
|
2001-03-05 08:28:51 +00:00
|
|
|
{
|
2001-03-11 14:52:23 +00:00
|
|
|
uno::Sequence<beans::PropertyValue> aProps;
|
|
|
|
GetConfigurationSettings(aProps);
|
2001-06-29 20:07:26 +00:00
|
|
|
OUString sConfigurationSettings(GetXMLToken(XML_CONFIGURATION_SETTINGS));
|
2001-03-29 16:31:46 +00:00
|
|
|
rSettingsExportHelper.exportSettings(aProps, sConfigurationSettings);
|
2001-03-05 08:28:51 +00:00
|
|
|
}
|
|
|
|
|
2000-11-20 10:09:30 +00:00
|
|
|
void SvXMLExport::_ExportScripts()
|
|
|
|
{
|
2004-07-13 07:06:44 +00:00
|
|
|
// There is no script support at the moment, so we don't need this
|
2000-11-28 10:33:02 +00:00
|
|
|
// <office:script>
|
2004-07-13 07:06:44 +00:00
|
|
|
// SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, XML_SCRIPTS,
|
|
|
|
// sal_True, sal_True );
|
2000-11-28 10:33:02 +00:00
|
|
|
|
2004-07-13 07:06:44 +00:00
|
|
|
// XMLBasicExport aBasicExp( *this );
|
|
|
|
// aBasicExp.Export();
|
2001-02-21 19:30:19 +00:00
|
|
|
|
|
|
|
// export document events
|
2004-07-13 07:06:44 +00:00
|
|
|
// Reference<document::XEventsSupplier> xEvents(GetModel(), UNO_QUERY);
|
|
|
|
// GetEventExport().Export(xEvents, sal_True);
|
2000-11-20 10:09:30 +00:00
|
|
|
}
|
|
|
|
|
2000-11-13 07:44:24 +00:00
|
|
|
void SvXMLExport::_ExportFontDecls()
|
|
|
|
{
|
|
|
|
if( mxFontAutoStylePool.is() )
|
|
|
|
mxFontAutoStylePool->exportXML();
|
|
|
|
}
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
void SvXMLExport::_ExportStyles( sal_Bool bUsed )
|
|
|
|
{
|
|
|
|
uno::Reference< lang::XMultiServiceFactory > xFact( GetModel(), uno::UNO_QUERY );
|
|
|
|
if( xFact.is())
|
|
|
|
{
|
|
|
|
// export (fill-)gradient-styles
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Reference< container::XNameAccess > xGradient( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.GradientTable") ) ), uno::UNO_QUERY );
|
|
|
|
if( xGradient.is() )
|
|
|
|
{
|
2001-10-19 17:43:58 +00:00
|
|
|
XMLGradientStyleExport aGradientStyle( *this );
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
if( xGradient->hasElements() )
|
|
|
|
{
|
|
|
|
uno::Sequence< OUString > aNamesSeq ( xGradient->getElementNames() );
|
|
|
|
sal_Int32 nCount = aNamesSeq.getLength();
|
|
|
|
for( sal_Int32 i=0; i<nCount; i++ )
|
|
|
|
{
|
|
|
|
const OUString& rStrName = aNamesSeq[ i ];
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Any aValue = xGradient->getByName( rStrName );
|
|
|
|
|
|
|
|
aGradientStyle.exportXML( rStrName, aValue );
|
|
|
|
}
|
|
|
|
catch( container::NoSuchElementException& )
|
|
|
|
{}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( lang::ServiceNotRegisteredException& )
|
|
|
|
{}
|
|
|
|
|
|
|
|
// export (fill-)hatch-styles
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Reference< container::XNameAccess > xHatch( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.HatchTable") ) ), uno::UNO_QUERY );
|
|
|
|
if( xHatch.is() )
|
|
|
|
{
|
2001-10-19 17:43:58 +00:00
|
|
|
XMLHatchStyleExport aHatchStyle( *this );
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
if( xHatch->hasElements() )
|
|
|
|
{
|
|
|
|
uno::Sequence< OUString > aNamesSeq ( xHatch->getElementNames() );
|
|
|
|
sal_Int32 nCount = aNamesSeq.getLength();
|
|
|
|
for( sal_Int32 i=0; i<nCount; i++ )
|
|
|
|
{
|
|
|
|
const OUString& rStrName = aNamesSeq[ i ];
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Any aValue = xHatch->getByName( rStrName );
|
|
|
|
|
|
|
|
aHatchStyle.exportXML( rStrName, aValue );
|
|
|
|
}
|
|
|
|
catch( container::NoSuchElementException& )
|
|
|
|
{}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( lang::ServiceNotRegisteredException& )
|
|
|
|
{}
|
|
|
|
|
|
|
|
// export (fill-)bitmap-styles
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Reference< container::XNameAccess > xBitmap( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.BitmapTable") ) ), uno::UNO_QUERY );
|
|
|
|
if( xBitmap.is() )
|
|
|
|
{
|
2000-12-01 10:16:41 +00:00
|
|
|
XMLImageStyle aImageStyle;
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
if( xBitmap->hasElements() )
|
|
|
|
{
|
|
|
|
uno::Sequence< OUString > aNamesSeq ( xBitmap->getElementNames() );
|
|
|
|
sal_Int32 nCount = aNamesSeq.getLength();
|
|
|
|
for( sal_Int32 i=0; i<nCount; i++ )
|
|
|
|
{
|
|
|
|
const OUString& rStrName = aNamesSeq[ i ];
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Any aValue = xBitmap->getByName( rStrName );
|
|
|
|
|
2000-12-01 10:16:41 +00:00
|
|
|
aImageStyle.exportXML( rStrName, aValue, *this );
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
catch( container::NoSuchElementException& )
|
|
|
|
{}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( lang::ServiceNotRegisteredException& )
|
|
|
|
{}
|
|
|
|
|
|
|
|
// export transparency-gradient -styles
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Reference< container::XNameAccess > xTransGradient( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.TransparencyGradientTable") ) ), uno::UNO_QUERY );
|
|
|
|
if( xTransGradient.is() )
|
|
|
|
{
|
2001-10-19 17:43:58 +00:00
|
|
|
XMLTransGradientStyleExport aTransGradientstyle( *this );
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
if( xTransGradient->hasElements() )
|
|
|
|
{
|
|
|
|
uno::Sequence< OUString > aNamesSeq ( xTransGradient->getElementNames() );
|
|
|
|
sal_Int32 nCount = aNamesSeq.getLength();
|
|
|
|
for( sal_Int32 i=0; i<nCount; i++ )
|
|
|
|
{
|
|
|
|
const OUString& rStrName = aNamesSeq[ i ];
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Any aValue = xTransGradient->getByName( rStrName );
|
|
|
|
|
|
|
|
aTransGradientstyle.exportXML( rStrName, aValue );
|
|
|
|
}
|
|
|
|
catch( container::NoSuchElementException& )
|
|
|
|
{}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( lang::ServiceNotRegisteredException& )
|
|
|
|
{}
|
|
|
|
|
|
|
|
// export marker-styles
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Reference< container::XNameAccess > xMarker( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.MarkerTable") ) ), uno::UNO_QUERY );
|
|
|
|
if( xMarker.is() )
|
|
|
|
{
|
2001-10-19 17:43:58 +00:00
|
|
|
XMLMarkerStyleExport aMarkerStyle( *this );
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
if( xMarker->hasElements() )
|
|
|
|
{
|
|
|
|
uno::Sequence< OUString > aNamesSeq ( xMarker->getElementNames() );
|
|
|
|
sal_Int32 nCount = aNamesSeq.getLength();
|
|
|
|
for( sal_Int32 i=0; i<nCount; i++ )
|
|
|
|
{
|
|
|
|
const OUString& rStrName = aNamesSeq[ i ];
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Any aValue = xMarker->getByName( rStrName );
|
|
|
|
|
|
|
|
aMarkerStyle.exportXML( rStrName, aValue );
|
|
|
|
}
|
|
|
|
catch( container::NoSuchElementException& )
|
|
|
|
{}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( lang::ServiceNotRegisteredException& )
|
|
|
|
{}
|
|
|
|
|
|
|
|
// export dash-styles
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Reference< container::XNameAccess > xDashes( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.DashTable") ) ), uno::UNO_QUERY );
|
|
|
|
if( xDashes.is() )
|
|
|
|
{
|
2001-10-19 17:43:58 +00:00
|
|
|
XMLDashStyleExport aDashStyle( *this );
|
2000-09-18 23:31:44 +00:00
|
|
|
|
|
|
|
if( xDashes->hasElements() )
|
|
|
|
{
|
|
|
|
uno::Sequence< OUString > aNamesSeq ( xDashes->getElementNames() );
|
|
|
|
sal_Int32 nCount = aNamesSeq.getLength();
|
|
|
|
for( sal_Int32 i=0; i<nCount; i++ )
|
|
|
|
{
|
|
|
|
const OUString& rStrName = aNamesSeq[ i ];
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
uno::Any aValue = xDashes->getByName( rStrName );
|
|
|
|
|
|
|
|
aDashStyle.exportXML( rStrName, aValue );
|
|
|
|
}
|
|
|
|
catch( container::NoSuchElementException& )
|
|
|
|
{}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( lang::ServiceNotRegisteredException& )
|
|
|
|
{}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
XMLTextParagraphExport* SvXMLExport::CreateTextParagraphExport()
|
|
|
|
{
|
|
|
|
return new XMLTextParagraphExport( *this, *(GetAutoStylePool().get()) );
|
|
|
|
}
|
|
|
|
|
|
|
|
XMLShapeExport* SvXMLExport::CreateShapeExport()
|
|
|
|
{
|
|
|
|
return new XMLShapeExport(*this);
|
|
|
|
}
|
|
|
|
|
|
|
|
SvXMLAutoStylePoolP* SvXMLExport::CreateAutoStylePool()
|
|
|
|
{
|
2001-10-25 19:57:03 +00:00
|
|
|
return new SvXMLAutoStylePoolP(*this);
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
2000-10-19 03:11:55 +00:00
|
|
|
XMLPageExport* SvXMLExport::CreatePageExport()
|
|
|
|
{
|
|
|
|
return new XMLPageExport( *this );
|
|
|
|
}
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
SchXMLExportHelper* SvXMLExport::CreateChartExport()
|
|
|
|
{
|
|
|
|
return new SchXMLExportHelper(*this,*GetAutoStylePool().get());
|
|
|
|
}
|
|
|
|
|
2000-11-13 07:44:24 +00:00
|
|
|
XMLFontAutoStylePool* SvXMLExport::CreateFontAutoStylePool()
|
|
|
|
{
|
|
|
|
return new XMLFontAutoStylePool( *this );
|
|
|
|
}
|
|
|
|
|
2000-12-18 15:13:37 +00:00
|
|
|
xmloff::OFormLayerXMLExport* SvXMLExport::CreateFormExport()
|
2000-11-17 17:59:48 +00:00
|
|
|
{
|
|
|
|
return new xmloff::OFormLayerXMLExport(*this);
|
|
|
|
}
|
|
|
|
|
2001-03-11 14:52:23 +00:00
|
|
|
void SvXMLExport::GetViewSettings(uno::Sequence<beans::PropertyValue>& aProps)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::GetConfigurationSettings(uno::Sequence<beans::PropertyValue>& aProps)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2001-05-04 13:47:21 +00:00
|
|
|
void SvXMLExport::addDataStyle(const sal_Int32 nNumberFormat, sal_Bool bTimeFormat )
|
|
|
|
{
|
|
|
|
if(pNumExport)
|
|
|
|
pNumExport->SetUsed(nNumberFormat);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::exportDataStyles()
|
|
|
|
{
|
|
|
|
if(pNumExport)
|
2001-10-19 17:43:58 +00:00
|
|
|
pNumExport->Export(sal_False);
|
2001-05-04 13:47:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::exportAutoDataStyles()
|
|
|
|
{
|
|
|
|
if(pNumExport)
|
2001-10-19 17:43:58 +00:00
|
|
|
pNumExport->Export(sal_True);
|
2001-05-28 14:16:04 +00:00
|
|
|
|
|
|
|
if (mxFormExport.is())
|
|
|
|
mxFormExport->exportAutoControlNumberStyles();
|
2001-05-04 13:47:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
OUString SvXMLExport::getDataStyleName(const sal_Int32 nNumberFormat, sal_Bool bTimeFormat ) const
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
|
|
|
OUString sTemp;
|
|
|
|
if(pNumExport)
|
|
|
|
sTemp = pNumExport->GetStyleName(nNumberFormat);
|
|
|
|
return sTemp;
|
|
|
|
}
|
|
|
|
|
2004-09-08 12:39:22 +00:00
|
|
|
void SvXMLExport::exportAnnotationMeta(const uno::Reference<drawing::XShape>& xShape)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2002-11-21 16:32:32 +00:00
|
|
|
sal_Int32 SvXMLExport::dataStyleForceSystemLanguage(sal_Int32 nFormat) const
|
|
|
|
{
|
|
|
|
return ( pNumExport != NULL )
|
|
|
|
? pNumExport->ForceSystemLanguage( nFormat ) : nFormat;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-11-29 13:32:08 +00:00
|
|
|
OUString SvXMLExport::AddEmbeddedGraphicObject( const OUString& rGraphicObjectURL )
|
|
|
|
{
|
|
|
|
OUString sRet( rGraphicObjectURL );
|
2001-06-12 13:27:58 +00:00
|
|
|
if( 0 == rGraphicObjectURL.compareTo( sGraphicObjectProtocol,
|
|
|
|
sGraphicObjectProtocol.getLength() ) &&
|
|
|
|
xGraphicResolver.is() )
|
2000-11-29 13:32:08 +00:00
|
|
|
{
|
2001-06-19 14:30:45 +00:00
|
|
|
if( (getExportFlags() & EXPORT_EMBEDDED) == 0 )
|
|
|
|
sRet = xGraphicResolver->resolveGraphicObjectURL( rGraphicObjectURL );
|
|
|
|
else
|
|
|
|
sRet = OUString();
|
2000-11-29 13:32:08 +00:00
|
|
|
}
|
2000-11-29 14:57:15 +00:00
|
|
|
else
|
2004-07-13 07:06:44 +00:00
|
|
|
sRet = GetRelativeReference( sRet );
|
2000-11-29 13:32:08 +00:00
|
|
|
|
|
|
|
return sRet;
|
|
|
|
}
|
|
|
|
|
2001-06-12 13:27:58 +00:00
|
|
|
sal_Bool SvXMLExport::AddEmbeddedGraphicObjectAsBase64( const OUString& rGraphicObjectURL )
|
|
|
|
{
|
|
|
|
sal_Bool bRet = sal_False;
|
|
|
|
|
2001-06-19 14:30:45 +00:00
|
|
|
if( (getExportFlags() & EXPORT_EMBEDDED) != 0 &&
|
|
|
|
0 == rGraphicObjectURL.compareTo( sGraphicObjectProtocol,
|
2001-06-12 13:27:58 +00:00
|
|
|
sGraphicObjectProtocol.getLength() ) &&
|
|
|
|
xGraphicResolver.is() )
|
|
|
|
{
|
|
|
|
Reference< XBinaryStreamResolver > xStmResolver( xGraphicResolver, UNO_QUERY );
|
|
|
|
|
|
|
|
if( xStmResolver.is() )
|
|
|
|
{
|
|
|
|
Reference< XInputStream > xIn( xStmResolver->getInputStream( rGraphicObjectURL ) );
|
|
|
|
|
|
|
|
if( xIn.is() )
|
|
|
|
{
|
|
|
|
XMLBase64Export aBase64Exp( *this );
|
2001-06-19 14:30:45 +00:00
|
|
|
bRet = aBase64Exp.exportOfficeBinaryDataElement( xIn );
|
2001-06-12 13:27:58 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return bRet;
|
|
|
|
}
|
|
|
|
|
2001-01-26 10:22:48 +00:00
|
|
|
OUString SvXMLExport::AddEmbeddedObject( const OUString& rEmbeddedObjectURL )
|
|
|
|
{
|
|
|
|
OUString sRet;
|
|
|
|
if( 0 == rEmbeddedObjectURL.compareTo( sEmbeddedObjectProtocol,
|
|
|
|
sEmbeddedObjectProtocol.getLength() ) &&
|
|
|
|
xEmbeddedResolver.is() )
|
|
|
|
{
|
|
|
|
sRet =
|
|
|
|
xEmbeddedResolver->resolveEmbeddedObjectURL( rEmbeddedObjectURL );
|
|
|
|
}
|
|
|
|
|
|
|
|
return sRet;
|
|
|
|
}
|
|
|
|
|
2001-05-18 12:58:34 +00:00
|
|
|
sal_Bool SvXMLExport::AddEmbeddedObjectAsBase64( const OUString& rEmbeddedObjectURL )
|
|
|
|
{
|
|
|
|
sal_Bool bRet = sal_False;
|
|
|
|
if( 0 == rEmbeddedObjectURL.compareTo( sEmbeddedObjectProtocol,
|
|
|
|
sEmbeddedObjectProtocol.getLength() ) &&
|
|
|
|
xEmbeddedResolver.is() )
|
|
|
|
{
|
|
|
|
Reference < XNameAccess > xNA( xEmbeddedResolver, UNO_QUERY );
|
|
|
|
if( xNA.is() )
|
|
|
|
{
|
|
|
|
Any aAny = xNA->getByName( rEmbeddedObjectURL );
|
|
|
|
Reference < XInputStream > xIn;
|
|
|
|
aAny >>= xIn;
|
|
|
|
if( xIn.is() )
|
|
|
|
{
|
|
|
|
XMLBase64Export aBase64Exp( *this );
|
2001-06-19 14:30:45 +00:00
|
|
|
bRet = aBase64Exp.exportOfficeBinaryDataElement( xIn );
|
2001-05-18 12:58:34 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return bRet;
|
|
|
|
}
|
|
|
|
|
2004-07-13 07:06:44 +00:00
|
|
|
OUString SvXMLExport::EncodeStyleName(
|
|
|
|
const OUString& rName,
|
|
|
|
sal_Bool *pEncoded ) const
|
|
|
|
{
|
|
|
|
return GetMM100UnitConverter().encodeStyleName( rName, pEncoded );
|
|
|
|
}
|
|
|
|
|
2001-03-30 09:49:34 +00:00
|
|
|
ProgressBarHelper* SvXMLExport::GetProgressBarHelper()
|
|
|
|
{
|
|
|
|
if (!pProgressBarHelper)
|
|
|
|
{
|
2001-09-25 09:29:18 +00:00
|
|
|
pProgressBarHelper = new ProgressBarHelper(xStatusIndicator, sal_True);
|
2001-03-30 09:49:34 +00:00
|
|
|
|
|
|
|
if (pProgressBarHelper && xExportInfo.is())
|
|
|
|
{
|
|
|
|
uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = xExportInfo->getPropertySetInfo();
|
|
|
|
if (xPropertySetInfo.is())
|
|
|
|
{
|
|
|
|
OUString sProgressRange(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSRANGE));
|
|
|
|
OUString sProgressMax(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSMAX));
|
|
|
|
OUString sProgressCurrent(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSCURRENT));
|
2002-07-01 13:17:28 +00:00
|
|
|
OUString sRepeat(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSREPEAT));
|
2001-03-30 09:49:34 +00:00
|
|
|
if (xPropertySetInfo->hasPropertyByName(sProgressMax) &&
|
|
|
|
xPropertySetInfo->hasPropertyByName(sProgressCurrent) &&
|
|
|
|
xPropertySetInfo->hasPropertyByName(sProgressRange))
|
|
|
|
{
|
|
|
|
uno::Any aAny;
|
|
|
|
sal_Int32 nProgressMax(0);
|
|
|
|
sal_Int32 nProgressCurrent(0);
|
|
|
|
sal_Int32 nProgressRange(0);
|
|
|
|
aAny = xExportInfo->getPropertyValue(sProgressRange);
|
|
|
|
if (aAny >>= nProgressRange)
|
|
|
|
pProgressBarHelper->SetRange(nProgressRange);
|
|
|
|
aAny = xExportInfo->getPropertyValue(sProgressMax);
|
|
|
|
if (aAny >>= nProgressMax)
|
|
|
|
pProgressBarHelper->SetReference(nProgressMax);
|
|
|
|
aAny = xExportInfo->getPropertyValue(sProgressCurrent);
|
|
|
|
if (aAny >>= nProgressCurrent)
|
|
|
|
pProgressBarHelper->SetValue(nProgressCurrent);
|
|
|
|
}
|
2002-07-01 13:17:28 +00:00
|
|
|
if (xPropertySetInfo->hasPropertyByName(sRepeat))
|
|
|
|
{
|
|
|
|
uno::Any aAny = xExportInfo->getPropertyValue(sRepeat);
|
|
|
|
if (aAny.getValueType() == getBooleanCppuType())
|
|
|
|
pProgressBarHelper->SetRepeat(::cppu::any2bool(aAny));
|
|
|
|
else
|
|
|
|
DBG_ERRORFILE("why is it no boolean?");
|
|
|
|
}
|
2001-03-30 09:49:34 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return pProgressBarHelper;
|
|
|
|
}
|
|
|
|
|
2000-12-19 17:56:47 +00:00
|
|
|
XMLEventExport& SvXMLExport::GetEventExport()
|
|
|
|
{
|
|
|
|
if( NULL == pEventExport)
|
|
|
|
{
|
|
|
|
// create EventExport on demand
|
|
|
|
pEventExport = new XMLEventExport(*this, NULL);
|
|
|
|
|
|
|
|
// and register standard handlers + names
|
|
|
|
OUString sStarBasic(RTL_CONSTASCII_USTRINGPARAM("StarBasic"));
|
|
|
|
pEventExport->AddHandler(sStarBasic, new XMLStarBasicExportHandler());
|
2002-11-19 12:14:43 +00:00
|
|
|
OUString sScript(RTL_CONSTASCII_USTRINGPARAM("Script"));
|
|
|
|
pEventExport->AddHandler(sScript, new XMLScriptExportHandler());
|
2000-12-19 17:56:47 +00:00
|
|
|
pEventExport->AddTranslationTable(aStandardEventTable);
|
|
|
|
}
|
|
|
|
|
|
|
|
return *pEventExport;
|
|
|
|
}
|
|
|
|
|
2001-03-28 09:28:16 +00:00
|
|
|
XMLImageMapExport& SvXMLExport::GetImageMapExport()
|
|
|
|
{
|
|
|
|
// image map export, create on-demand
|
|
|
|
if( NULL == pImageMapExport )
|
|
|
|
{
|
|
|
|
pImageMapExport = new XMLImageMapExport(*this);
|
|
|
|
}
|
|
|
|
|
|
|
|
return *pImageMapExport;
|
|
|
|
}
|
|
|
|
|
2001-01-22 11:27:59 +00:00
|
|
|
// XUnoTunnel & co
|
|
|
|
const uno::Sequence< sal_Int8 > & SvXMLExport::getUnoTunnelId() throw()
|
|
|
|
{
|
|
|
|
static uno::Sequence< sal_Int8 > * pSeq = 0;
|
|
|
|
if( !pSeq )
|
|
|
|
{
|
|
|
|
Guard< Mutex > aGuard( Mutex::getGlobalMutex() );
|
|
|
|
if( !pSeq )
|
|
|
|
{
|
|
|
|
static uno::Sequence< sal_Int8 > aSeq( 16 );
|
|
|
|
rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
|
|
|
|
pSeq = &aSeq;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return *pSeq;
|
|
|
|
}
|
|
|
|
|
|
|
|
SvXMLExport* SvXMLExport::getImplementation( uno::Reference< uno::XInterface > xInt ) throw()
|
|
|
|
{
|
|
|
|
uno::Reference< lang::XUnoTunnel > xUT( xInt, uno::UNO_QUERY );
|
|
|
|
if( xUT.is() )
|
|
|
|
return (SvXMLExport*)xUT->getSomething( SvXMLExport::getUnoTunnelId() );
|
|
|
|
else
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
// XUnoTunnel
|
|
|
|
sal_Int64 SAL_CALL SvXMLExport::getSomething( const uno::Sequence< sal_Int8 >& rId )
|
|
|
|
throw( uno::RuntimeException )
|
|
|
|
{
|
|
|
|
if( rId.getLength() == 16 && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
|
|
|
|
rId.getConstArray(), 16 ) )
|
|
|
|
{
|
|
|
|
return (sal_Int64)this;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2001-05-09 11:22:39 +00:00
|
|
|
sal_Bool SvXMLExport::ExportEmbeddedOwnObject( Reference< XComponent >& rComp )
|
|
|
|
{
|
|
|
|
OUString sFilterService;
|
|
|
|
|
|
|
|
Reference < lang::XServiceInfo > xServiceInfo( rComp, UNO_QUERY );
|
|
|
|
if( xServiceInfo.is() )
|
|
|
|
{
|
|
|
|
const XMLServiceMapEntry_Impl *pEntry = aServiceMap;
|
|
|
|
while( pEntry->sModelService )
|
|
|
|
{
|
|
|
|
OUString sModelService( pEntry->sModelService,
|
|
|
|
pEntry->nModelServiceLen,
|
|
|
|
RTL_TEXTENCODING_ASCII_US );
|
|
|
|
if( xServiceInfo->supportsService( sModelService ) )
|
|
|
|
{
|
|
|
|
sFilterService = OUString( pEntry->sFilterService,
|
|
|
|
pEntry->nFilterServiceLen,
|
|
|
|
RTL_TEXTENCODING_ASCII_US );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
pEntry++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
OSL_ENSURE( sFilterService.getLength(), "no export filter for own object" );
|
|
|
|
|
|
|
|
if( !sFilterService.getLength() )
|
|
|
|
return sal_False;
|
|
|
|
|
|
|
|
Reference < XDocumentHandler > xHdl =
|
|
|
|
new XMLEmbeddedObjectExportFilter( xHandler );
|
|
|
|
|
|
|
|
Sequence < Any > aArgs( 1 );
|
|
|
|
aArgs[0] <<= xHdl;
|
|
|
|
|
2004-05-03 12:33:10 +00:00
|
|
|
// #110680#
|
|
|
|
// Reference< lang::XMultiServiceFactory > xServiceFactory = comphelper::getProcessServiceFactory();
|
|
|
|
Reference< lang::XMultiServiceFactory > xServiceFactory = getServiceFactory();
|
|
|
|
|
2001-05-09 11:22:39 +00:00
|
|
|
Reference< document::XExporter > xExporter(
|
|
|
|
xServiceFactory->createInstanceWithArguments( sFilterService, aArgs),
|
|
|
|
UNO_QUERY);
|
|
|
|
OSL_ENSURE( xExporter.is(),
|
|
|
|
"can't instantiate export filter component for own object" );
|
|
|
|
if( !xExporter.is() )
|
|
|
|
return sal_False;
|
|
|
|
|
|
|
|
xExporter->setSourceDocument( rComp );
|
|
|
|
|
|
|
|
Reference<XFilter> xFilter( xExporter, UNO_QUERY );
|
|
|
|
|
|
|
|
Sequence < PropertyValue > aMediaDesc( 0 );
|
|
|
|
return xFilter->filter( aMediaDesc );
|
|
|
|
}
|
|
|
|
|
2001-06-25 11:39:27 +00:00
|
|
|
OUString SvXMLExport::GetRelativeReference(const OUString& rValue)
|
|
|
|
{
|
2004-07-13 07:06:44 +00:00
|
|
|
// That's ugly, but it is a temporary solution only that will be
|
|
|
|
// changed in CWS sab19
|
|
|
|
OUString aOldBaseURL( INetURLObject::GetBaseURL() );
|
|
|
|
sal_Bool bSet = sOrigFileName != aOldBaseURL;
|
|
|
|
if( bSet )
|
|
|
|
INetURLObject::SetBaseURL( sOrigFileName );
|
|
|
|
|
|
|
|
OUString aRet( INetURLObject::AbsToRel( rValue ) );
|
|
|
|
|
|
|
|
if( bSet )
|
|
|
|
INetURLObject::SetBaseURL( aOldBaseURL );
|
|
|
|
|
|
|
|
return aRet;
|
2001-06-25 11:39:27 +00:00
|
|
|
}
|
|
|
|
|
2001-09-13 14:18:52 +00:00
|
|
|
void SvXMLExport::StartElement(sal_uInt16 nPrefix,
|
|
|
|
enum ::xmloff::token::XMLTokenEnum eName,
|
|
|
|
sal_Bool bIgnWSOutside )
|
2001-09-14 13:08:06 +00:00
|
|
|
{
|
|
|
|
StartElement(pNamespaceMap->GetQNameByKey( nPrefix, GetXMLToken(eName) ), bIgnWSOutside);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::StartElement(const OUString& rName,
|
|
|
|
sal_Bool bIgnWSOutside )
|
2001-09-13 14:18:52 +00:00
|
|
|
{
|
|
|
|
if ((mnErrorFlags & ERROR_DO_NOTHING) != ERROR_DO_NOTHING)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
2001-10-19 10:46:32 +00:00
|
|
|
if( bIgnWSOutside && ((mnExportFlags & EXPORT_PRETTY) == EXPORT_PRETTY))
|
2001-09-13 14:18:52 +00:00
|
|
|
xHandler->ignorableWhitespace( sWS );
|
2001-09-14 13:08:06 +00:00
|
|
|
xHandler->startElement( rName, GetXAttrList() );
|
2001-09-13 14:18:52 +00:00
|
|
|
}
|
2001-11-26 06:58:54 +00:00
|
|
|
catch ( SAXInvalidCharacterException& e )
|
|
|
|
{
|
|
|
|
Sequence<OUString> aPars(1);
|
|
|
|
aPars[0] = rName;
|
|
|
|
SetError( XMLERROR_SAX|XMLERROR_FLAG_WARNING, aPars, e.Message, NULL );
|
|
|
|
}
|
2001-09-18 15:28:34 +00:00
|
|
|
catch ( SAXException& e )
|
2001-09-13 14:18:52 +00:00
|
|
|
{
|
2001-09-18 15:28:34 +00:00
|
|
|
Sequence<OUString> aPars(1);
|
|
|
|
aPars[0] = rName;
|
|
|
|
SetError( XMLERROR_SAX|XMLERROR_FLAG_ERROR|XMLERROR_FLAG_SEVERE,
|
|
|
|
aPars, e.Message, NULL );
|
2001-09-13 14:18:52 +00:00
|
|
|
}
|
|
|
|
}
|
2001-10-12 12:58:48 +00:00
|
|
|
ClearAttrList();
|
2001-09-13 14:18:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::Characters(const ::rtl::OUString& rChars)
|
|
|
|
{
|
|
|
|
if ((mnErrorFlags & ERROR_DO_NOTHING) != ERROR_DO_NOTHING)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
xHandler->characters(rChars);
|
|
|
|
}
|
2001-11-26 06:58:54 +00:00
|
|
|
catch ( SAXInvalidCharacterException& e )
|
|
|
|
{
|
|
|
|
Sequence<OUString> aPars(1);
|
|
|
|
aPars[0] = rChars;
|
|
|
|
SetError( XMLERROR_SAX|XMLERROR_FLAG_WARNING, aPars, e.Message, NULL );
|
|
|
|
}
|
2001-09-18 15:28:34 +00:00
|
|
|
catch ( SAXException& e )
|
2001-09-13 14:18:52 +00:00
|
|
|
{
|
2001-09-24 13:33:45 +00:00
|
|
|
Sequence<OUString> aPars(1);
|
2001-09-18 15:28:34 +00:00
|
|
|
aPars[0] = rChars;
|
|
|
|
SetError( XMLERROR_SAX|XMLERROR_FLAG_ERROR|XMLERROR_FLAG_SEVERE,
|
|
|
|
aPars, e.Message, NULL );
|
2001-09-13 14:18:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::EndElement(sal_uInt16 nPrefix,
|
|
|
|
enum ::xmloff::token::XMLTokenEnum eName,
|
|
|
|
sal_Bool bIgnWSInside )
|
2001-09-14 13:08:06 +00:00
|
|
|
{
|
|
|
|
EndElement(pNamespaceMap->GetQNameByKey( nPrefix, GetXMLToken(eName) ), bIgnWSInside);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::EndElement(const OUString& rName,
|
|
|
|
sal_Bool bIgnWSInside )
|
2001-09-13 14:18:52 +00:00
|
|
|
{
|
|
|
|
if ((mnErrorFlags & ERROR_DO_NOTHING) != ERROR_DO_NOTHING)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
2001-10-19 10:46:32 +00:00
|
|
|
if( bIgnWSInside && ((mnExportFlags & EXPORT_PRETTY) == EXPORT_PRETTY))
|
2001-09-13 14:18:52 +00:00
|
|
|
xHandler->ignorableWhitespace( sWS );
|
2001-09-14 13:08:06 +00:00
|
|
|
xHandler->endElement( rName );
|
2001-09-13 14:18:52 +00:00
|
|
|
}
|
2001-09-18 15:28:34 +00:00
|
|
|
catch ( SAXException& e )
|
2001-09-13 14:18:52 +00:00
|
|
|
{
|
2001-09-18 15:28:34 +00:00
|
|
|
Sequence<OUString> aPars(1);
|
|
|
|
aPars[0] = rName;
|
|
|
|
SetError( XMLERROR_SAX|XMLERROR_FLAG_ERROR|XMLERROR_FLAG_SEVERE,
|
|
|
|
aPars, e.Message, NULL );
|
2001-09-13 14:18:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-09-24 13:33:45 +00:00
|
|
|
void SvXMLExport::IgnorableWhitespace()
|
|
|
|
{
|
2001-10-19 10:46:32 +00:00
|
|
|
if ((mnExportFlags & EXPORT_PRETTY) != EXPORT_PRETTY)
|
|
|
|
return;
|
|
|
|
|
2001-09-24 13:33:45 +00:00
|
|
|
if ((mnErrorFlags & ERROR_DO_NOTHING) != ERROR_DO_NOTHING)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
xHandler->ignorableWhitespace( sWS );
|
|
|
|
}
|
|
|
|
catch ( SAXException& e )
|
|
|
|
{
|
|
|
|
Sequence<OUString> aPars(0);
|
|
|
|
SetError( XMLERROR_SAX|XMLERROR_FLAG_ERROR|XMLERROR_FLAG_SEVERE,
|
|
|
|
aPars, e.Message, NULL );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2001-09-18 15:28:34 +00:00
|
|
|
void SvXMLExport::SetError(
|
|
|
|
sal_Int32 nId,
|
|
|
|
const Sequence<OUString>& rMsgParams,
|
|
|
|
const OUString& rExceptionMessage,
|
|
|
|
const Reference<XLocator>& rLocator )
|
2001-09-13 14:18:52 +00:00
|
|
|
{
|
2001-09-25 16:03:25 +00:00
|
|
|
// allow multi-threaded access to the cancel() method
|
|
|
|
static ::vos::OMutex aMutex;
|
|
|
|
::vos::OGuard aGuard(aMutex);
|
|
|
|
|
2001-09-18 15:28:34 +00:00
|
|
|
// maintain error flags
|
|
|
|
if ( ( nId & XMLERROR_FLAG_ERROR ) != 0 )
|
|
|
|
mnErrorFlags |= ERROR_ERROR_OCCURED;
|
|
|
|
if ( ( nId & XMLERROR_FLAG_WARNING ) != 0 )
|
|
|
|
mnErrorFlags |= ERROR_WARNING_OCCURED;
|
|
|
|
if ( ( nId & XMLERROR_FLAG_SEVERE ) != 0 )
|
|
|
|
mnErrorFlags |= ERROR_DO_NOTHING;
|
|
|
|
|
|
|
|
// create error lsit on demand
|
|
|
|
if ( pXMLErrors == NULL )
|
|
|
|
pXMLErrors = new XMLErrors();
|
|
|
|
|
|
|
|
// save error information
|
|
|
|
pXMLErrors->AddRecord( nId, rMsgParams, rExceptionMessage, rLocator );
|
2001-09-13 14:18:52 +00:00
|
|
|
}
|
|
|
|
|
2001-09-18 15:28:34 +00:00
|
|
|
void SvXMLExport::SetError(
|
|
|
|
sal_Int32 nId,
|
|
|
|
const Sequence<OUString>& rMsgParams)
|
|
|
|
{
|
|
|
|
OUString sEmpty;
|
|
|
|
SetError( nId, rMsgParams, sEmpty, NULL );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2001-09-13 14:18:52 +00:00
|
|
|
XMLErrors* SvXMLExport::GetErrors()
|
|
|
|
{
|
|
|
|
return pXMLErrors;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SvXMLExport::DisposingModel()
|
|
|
|
{
|
2004-05-14 15:10:42 +00:00
|
|
|
xModel.clear();
|
|
|
|
mxEventListener.clear();
|
2001-09-13 14:18:52 +00:00
|
|
|
}
|
|
|
|
|
2004-05-03 12:33:10 +00:00
|
|
|
// #110680#
|
|
|
|
::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > SvXMLExport::getServiceFactory()
|
|
|
|
{
|
|
|
|
// #110680#
|
|
|
|
return mxServiceFactory;
|
|
|
|
}
|
|
|
|
|
2001-09-13 14:18:52 +00:00
|
|
|
//=============================================================================
|
|
|
|
|
2001-04-30 12:37:27 +00:00
|
|
|
void SvXMLElementExport::StartElement( SvXMLExport& rExp,
|
|
|
|
sal_uInt16 nPrefixKey,
|
|
|
|
const OUString& rLName,
|
|
|
|
sal_Bool bIWSOutside )
|
|
|
|
{
|
2001-09-18 16:33:48 +00:00
|
|
|
aName = rExp.GetNamespaceMap().GetQNameByKey(nPrefixKey, rLName);
|
|
|
|
rExp.StartElement(aName, bIWSOutside);
|
2001-04-30 12:37:27 +00:00
|
|
|
}
|
2000-12-19 17:56:47 +00:00
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
SvXMLElementExport::SvXMLElementExport( SvXMLExport& rExp,
|
|
|
|
sal_uInt16 nPrefixKey,
|
|
|
|
const sal_Char *pLName,
|
|
|
|
sal_Bool bIWSOutside,
|
|
|
|
sal_Bool bIWSInside ) :
|
|
|
|
rExport( rExp ),
|
2001-04-30 12:37:27 +00:00
|
|
|
bIgnWS( bIWSInside ),
|
|
|
|
bDoSomething( sal_True )
|
2000-09-18 23:31:44 +00:00
|
|
|
{
|
|
|
|
OUString sLName( OUString::createFromAscii(pLName) );
|
2001-04-30 12:37:27 +00:00
|
|
|
StartElement( rExp, nPrefixKey, sLName, bIWSOutside );
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|
2000-10-19 13:25:20 +00:00
|
|
|
SvXMLElementExport::SvXMLElementExport( SvXMLExport& rExp,
|
|
|
|
sal_uInt16 nPrefixKey,
|
|
|
|
const OUString& rLName,
|
|
|
|
sal_Bool bIWSOutside,
|
|
|
|
sal_Bool bIWSInside ) :
|
|
|
|
rExport( rExp ),
|
2001-04-30 12:37:27 +00:00
|
|
|
bIgnWS( bIWSInside ),
|
|
|
|
bDoSomething( sal_True )
|
2000-10-19 13:25:20 +00:00
|
|
|
{
|
2001-04-30 12:37:27 +00:00
|
|
|
StartElement( rExp, nPrefixKey, rLName, bIWSOutside );
|
|
|
|
}
|
2000-10-19 13:25:20 +00:00
|
|
|
|
2001-05-16 14:21:01 +00:00
|
|
|
SvXMLElementExport::SvXMLElementExport( SvXMLExport& rExp,
|
|
|
|
sal_uInt16 nPrefixKey,
|
|
|
|
enum XMLTokenEnum eLName,
|
|
|
|
sal_Bool bIWSOutside,
|
|
|
|
sal_Bool bIWSInside ) :
|
|
|
|
rExport( rExp ),
|
|
|
|
bIgnWS( bIWSInside ),
|
|
|
|
bDoSomething( sal_True )
|
|
|
|
{
|
|
|
|
StartElement( rExp, nPrefixKey, GetXMLToken(eLName), bIWSOutside );
|
|
|
|
}
|
|
|
|
|
2001-04-30 12:37:27 +00:00
|
|
|
SvXMLElementExport::SvXMLElementExport( SvXMLExport& rExp,
|
|
|
|
sal_Bool bDoSth,
|
|
|
|
sal_uInt16 nPrefixKey,
|
|
|
|
const sal_Char *pLName,
|
|
|
|
sal_Bool bIWSOutside,
|
|
|
|
sal_Bool bIWSInside ) :
|
|
|
|
rExport( rExp ),
|
|
|
|
bIgnWS( bIWSInside ),
|
|
|
|
bDoSomething( bDoSth )
|
|
|
|
{
|
|
|
|
if( bDoSomething )
|
|
|
|
{
|
|
|
|
OUString sLName( OUString::createFromAscii(pLName) );
|
|
|
|
StartElement( rExp, nPrefixKey, sLName, bIWSOutside );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
SvXMLElementExport::SvXMLElementExport( SvXMLExport& rExp,
|
|
|
|
sal_Bool bDoSth,
|
|
|
|
sal_uInt16 nPrefixKey,
|
|
|
|
const OUString& rLName,
|
|
|
|
sal_Bool bIWSOutside,
|
|
|
|
sal_Bool bIWSInside ) :
|
|
|
|
rExport( rExp ),
|
|
|
|
bIgnWS( bIWSInside ),
|
|
|
|
bDoSomething( bDoSth )
|
|
|
|
{
|
|
|
|
if( bDoSomething )
|
|
|
|
StartElement( rExp, nPrefixKey, rLName, bIWSOutside );
|
2000-10-19 13:25:20 +00:00
|
|
|
}
|
|
|
|
|
2001-05-16 14:21:01 +00:00
|
|
|
SvXMLElementExport::SvXMLElementExport( SvXMLExport& rExp,
|
|
|
|
sal_Bool bDoSth,
|
|
|
|
sal_uInt16 nPrefixKey,
|
|
|
|
enum XMLTokenEnum eLName,
|
|
|
|
sal_Bool bIWSOutside,
|
|
|
|
sal_Bool bIWSInside ) :
|
|
|
|
rExport( rExp ),
|
|
|
|
bIgnWS( bIWSInside ),
|
|
|
|
bDoSomething( bDoSth )
|
|
|
|
{
|
|
|
|
if( bDoSomething )
|
2001-09-18 15:28:34 +00:00
|
|
|
StartElement( rExport, nPrefixKey, GetXMLToken(eLName), bIWSOutside );
|
2001-05-16 14:21:01 +00:00
|
|
|
}
|
|
|
|
|
2003-03-27 17:21:03 +00:00
|
|
|
SvXMLElementExport::SvXMLElementExport( SvXMLExport& rExp,
|
|
|
|
const OUString& rQName,
|
|
|
|
sal_Bool bIWSOutside,
|
|
|
|
sal_Bool bIWSInside ) :
|
|
|
|
rExport( rExp ),
|
|
|
|
bIgnWS( bIWSInside ),
|
|
|
|
bDoSomething( sal_True )
|
|
|
|
{
|
|
|
|
aName = rQName;
|
|
|
|
rExp.StartElement( rQName, bIWSOutside );
|
|
|
|
}
|
|
|
|
|
2000-09-18 23:31:44 +00:00
|
|
|
SvXMLElementExport::~SvXMLElementExport()
|
|
|
|
{
|
2001-04-30 12:37:27 +00:00
|
|
|
if( bDoSomething )
|
|
|
|
{
|
2001-09-18 15:28:34 +00:00
|
|
|
rExport.EndElement( aName, bIgnWS );
|
2001-04-30 12:37:27 +00:00
|
|
|
}
|
2000-09-18 23:31:44 +00:00
|
|
|
}
|
|
|
|
|