163bba73cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
363bba73cSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
463bba73cSAndrew Rist * or more contributor license agreements. See the NOTICE file
563bba73cSAndrew Rist * distributed with this work for additional information
663bba73cSAndrew Rist * regarding copyright ownership. The ASF licenses this file
763bba73cSAndrew Rist * to you under the Apache License, Version 2.0 (the
863bba73cSAndrew Rist * "License"); you may not use this file except in compliance
963bba73cSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
1163bba73cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
1363bba73cSAndrew Rist * Unless required by applicable law or agreed to in writing,
1463bba73cSAndrew Rist * software distributed under the License is distributed on an
1563bba73cSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1663bba73cSAndrew Rist * KIND, either express or implied. See the License for the
1763bba73cSAndrew Rist * specific language governing permissions and limitations
1863bba73cSAndrew Rist * under the License.
19cdf0e10cSrcweir *
2063bba73cSAndrew Rist *************************************************************/
2163bba73cSAndrew Rist
22cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
23cdf0e10cSrcweir #include "precompiled_xmloff.hxx"
24cdf0e10cSrcweir
25cdf0e10cSrcweir #ifdef PRECOMPILED
26cdf0e10cSrcweir #include "filt_pch.hxx"
27cdf0e10cSrcweir #endif
28cdf0e10cSrcweir #include "unointerfacetouniqueidentifiermapper.hxx"
29cdf0e10cSrcweir #include <osl/mutex.hxx>
30cdf0e10cSrcweir #include <rtl/uuid.h>
31cdf0e10cSrcweir #include <tools/debug.hxx>
32cdf0e10cSrcweir #include <tools/urlobj.hxx>
33cdf0e10cSrcweir #include <comphelper/genericpropertyset.hxx>
34cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp>
35cdf0e10cSrcweir #include <com/sun/star/io/XInputStream.hpp>
36cdf0e10cSrcweir #include <com/sun/star/document/XBinaryStreamResolver.hpp>
37cdf0e10cSrcweir #include <com/sun/star/xml/sax/SAXInvalidCharacterException.hpp>
38cdf0e10cSrcweir #include <com/sun/star/uri/XUriReferenceFactory.hpp>
39cdf0e10cSrcweir #include <com/sun/star/uri/UriReferenceFactory.hpp>
40cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
41cdf0e10cSrcweir #include <comphelper/configurationhelper.hxx>
42cdf0e10cSrcweir #include <xmloff/attrlist.hxx>
43cdf0e10cSrcweir #include <xmloff/nmspmap.hxx>
44cdf0e10cSrcweir #include <xmloff/xmluconv.hxx>
45cdf0e10cSrcweir #include "xmloff/xmlnmspe.hxx"
46cdf0e10cSrcweir #include <xmloff/xmltoken.hxx>
47cdf0e10cSrcweir #include <xmloff/xmlexp.hxx>
48cdf0e10cSrcweir #include <xmloff/xmlnumfe.hxx>
49cdf0e10cSrcweir #include <xmloff/xmlmetae.hxx>
50cdf0e10cSrcweir #include <xmloff/XMLSettingsExportContext.hxx>
51cdf0e10cSrcweir #include <xmloff/families.hxx>
52cdf0e10cSrcweir #include <xmloff/XMLEventExport.hxx>
53cdf0e10cSrcweir #include "XMLStarBasicExportHandler.hxx"
54cdf0e10cSrcweir #include "XMLScriptExportHandler.hxx"
55cdf0e10cSrcweir #include <xmloff/SettingsExportHelper.hxx>
56cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp>
57cdf0e10cSrcweir #include <com/sun/star/container/XIndexContainer.hpp>
58cdf0e10cSrcweir #include <com/sun/star/document/XEventsSupplier.hpp>
59cdf0e10cSrcweir #include <com/sun/star/document/XViewDataSupplier.hpp>
60cdf0e10cSrcweir #include <xmloff/GradientStyle.hxx>
61cdf0e10cSrcweir #include <xmloff/HatchStyle.hxx>
62cdf0e10cSrcweir #include <xmloff/ImageStyle.hxx>
63cdf0e10cSrcweir #include <TransGradientStyle.hxx>
64cdf0e10cSrcweir #include <xmloff/MarkerStyle.hxx>
65cdf0e10cSrcweir #include <xmloff/DashStyle.hxx>
66cdf0e10cSrcweir #include <xmloff/XMLFontAutoStylePool.hxx>
67cdf0e10cSrcweir #include "XMLImageMapExport.hxx"
68cdf0e10cSrcweir #include "XMLBase64Export.hxx"
69cdf0e10cSrcweir #include "xmloff/xmlerror.hxx"
70cdf0e10cSrcweir #include <com/sun/star/lang/ServiceNotRegisteredException.hpp>
71cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp>
72cdf0e10cSrcweir #include "xmloff/XMLFilterServiceNames.h"
73cdf0e10cSrcweir #include "xmloff/XMLEmbeddedObjectExportFilter.hxx"
74cdf0e10cSrcweir #include "XMLBasicExportFilter.hxx"
75cdf0e10cSrcweir #include <vos/mutex.hxx>
76cdf0e10cSrcweir #include <rtl/logfile.hxx>
77cdf0e10cSrcweir #include <cppuhelper/implbase1.hxx>
78cdf0e10cSrcweir #include <comphelper/extract.hxx>
79cdf0e10cSrcweir #include "PropertySetMerger.hxx"
80cdf0e10cSrcweir
81cdf0e10cSrcweir #include "svl/urihelper.hxx"
82cdf0e10cSrcweir #include "xmloff/xformsexport.hxx"
83cdf0e10cSrcweir
84cdf0e10cSrcweir #include <unotools/docinfohelper.hxx>
85cdf0e10cSrcweir #include <unotools/bootstrap.hxx>
86cdf0e10cSrcweir #include <unotools/configmgr.hxx>
87cdf0e10cSrcweir #include <tools/inetdef.hxx>
88cdf0e10cSrcweir #include <com/sun/star/document/XDocumentProperties.hpp>
89cdf0e10cSrcweir #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
90cdf0e10cSrcweir
91cdf0e10cSrcweir #include <com/sun/star/rdf/XMetadatable.hpp>
92cdf0e10cSrcweir #include "RDFaExportHelper.hxx"
93cdf0e10cSrcweir
94cdf0e10cSrcweir
95cdf0e10cSrcweir using ::rtl::OUString;
96cdf0e10cSrcweir
97cdf0e10cSrcweir using namespace ::osl;
98cdf0e10cSrcweir using namespace ::com::sun::star;
99cdf0e10cSrcweir using namespace ::com::sun::star::uno;
100cdf0e10cSrcweir using namespace ::com::sun::star::frame;
101cdf0e10cSrcweir using namespace ::com::sun::star::container;
102cdf0e10cSrcweir using namespace ::com::sun::star::lang;
103cdf0e10cSrcweir using namespace ::com::sun::star::document;
104cdf0e10cSrcweir using namespace ::com::sun::star::beans;
105cdf0e10cSrcweir using namespace ::com::sun::star::xml::sax;
106cdf0e10cSrcweir using namespace ::com::sun::star::io;
107cdf0e10cSrcweir using namespace ::xmloff::token;
108cdf0e10cSrcweir
109cdf0e10cSrcweir sal_Char __READONLY_DATA sXML_1_1[] = "1.1";
110cdf0e10cSrcweir sal_Char __READONLY_DATA sXML_1_2[] = "1.2";
111cdf0e10cSrcweir
112cdf0e10cSrcweir const sal_Char *sOpenOfficeOrgProject ="OpenOffice.org_project";
113cdf0e10cSrcweir
114cdf0e10cSrcweir // #i115030#: the XSLT is not finished, and not available via HTTP
115cdf0e10cSrcweir const sal_Char s_grddl_xsl[] = "http://FIXME";
116cdf0e10cSrcweir
117cdf0e10cSrcweir #define LOGFILE_AUTHOR "mb93740"
118cdf0e10cSrcweir
119cdf0e10cSrcweir #define XML_MODEL_SERVICE_WRITER "com.sun.star.text.TextDocument"
120cdf0e10cSrcweir #define XML_MODEL_SERVICE_CALC "com.sun.star.sheet.SpreadsheetDocument"
121cdf0e10cSrcweir #define XML_MODEL_SERVICE_DRAW "com.sun.star.drawing.DrawingDocument"
122cdf0e10cSrcweir #define XML_MODEL_SERVICE_IMPRESS "com.sun.star.presentation.PresentationDocument"
123cdf0e10cSrcweir #define XML_MODEL_SERVICE_MATH "com.sun.star.formula.FormulaProperties"
124cdf0e10cSrcweir #define XML_MODEL_SERVICE_CHART "com.sun.star.chart.ChartDocument"
125cdf0e10cSrcweir
126cdf0e10cSrcweir #define XML_USEPRETTYPRINTING "UsePrettyPrinting"
127cdf0e10cSrcweir
128cdf0e10cSrcweir #define C2U(cChar) OUString( RTL_CONSTASCII_USTRINGPARAM(cChar) )
129cdf0e10cSrcweir
130cdf0e10cSrcweir struct XMLServiceMapEntry_Impl
131cdf0e10cSrcweir {
132cdf0e10cSrcweir const sal_Char *sModelService;
133cdf0e10cSrcweir sal_Int32 nModelServiceLen;
134cdf0e10cSrcweir const sal_Char *sFilterService;
135cdf0e10cSrcweir sal_Int32 nFilterServiceLen;
136cdf0e10cSrcweir };
137cdf0e10cSrcweir
138cdf0e10cSrcweir #define SERVICE_MAP_ENTRY( app ) \
139cdf0e10cSrcweir { XML_MODEL_SERVICE_##app, sizeof(XML_MODEL_SERVICE_##app)-1, \
140cdf0e10cSrcweir XML_EXPORT_FILTER_##app, sizeof(XML_EXPORT_FILTER_##app)-1 }
141cdf0e10cSrcweir
142cdf0e10cSrcweir const XMLServiceMapEntry_Impl aServiceMap[] =
143cdf0e10cSrcweir {
144cdf0e10cSrcweir SERVICE_MAP_ENTRY( WRITER ),
145cdf0e10cSrcweir SERVICE_MAP_ENTRY( CALC ),
146cdf0e10cSrcweir SERVICE_MAP_ENTRY( IMPRESS ),// Impress supports DrawingDocument, too, so
147cdf0e10cSrcweir SERVICE_MAP_ENTRY( DRAW ), // it must appear before Draw
148cdf0e10cSrcweir SERVICE_MAP_ENTRY( MATH ),
149cdf0e10cSrcweir SERVICE_MAP_ENTRY( CHART ),
150cdf0e10cSrcweir { 0, 0, 0, 0 }
151cdf0e10cSrcweir };
152cdf0e10cSrcweir
153cdf0e10cSrcweir //==============================================================================
154cdf0e10cSrcweir
155cdf0e10cSrcweir class SAL_DLLPRIVATE SettingsExportFacade : public ::xmloff::XMLSettingsExportContext
156cdf0e10cSrcweir {
157cdf0e10cSrcweir public:
SettingsExportFacade(SvXMLExport & i_rExport)158cdf0e10cSrcweir SettingsExportFacade( SvXMLExport& i_rExport )
159cdf0e10cSrcweir :m_rExport( i_rExport )
160cdf0e10cSrcweir {
161cdf0e10cSrcweir }
162cdf0e10cSrcweir
~SettingsExportFacade()163cdf0e10cSrcweir virtual ~SettingsExportFacade()
164cdf0e10cSrcweir {
165cdf0e10cSrcweir }
166cdf0e10cSrcweir
167cdf0e10cSrcweir virtual void AddAttribute( enum ::xmloff::token::XMLTokenEnum i_eName,
168cdf0e10cSrcweir const ::rtl::OUString& i_rValue );
169cdf0e10cSrcweir virtual void AddAttribute( enum ::xmloff::token::XMLTokenEnum i_eName,
170cdf0e10cSrcweir enum ::xmloff::token::XMLTokenEnum i_eValue );
171cdf0e10cSrcweir
172cdf0e10cSrcweir virtual void StartElement( enum ::xmloff::token::XMLTokenEnum i_eName,
173cdf0e10cSrcweir const sal_Bool i_bIgnoreWhitespace );
174cdf0e10cSrcweir virtual void EndElement( const sal_Bool i_bIgnoreWhitespace );
175cdf0e10cSrcweir
176cdf0e10cSrcweir virtual void Characters( const ::rtl::OUString& i_rCharacters );
177cdf0e10cSrcweir
178cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >
179cdf0e10cSrcweir GetServiceFactory() const;
180cdf0e10cSrcweir private:
181cdf0e10cSrcweir SvXMLExport& m_rExport;
182cdf0e10cSrcweir ::std::stack< ::rtl::OUString > m_aElements;
183cdf0e10cSrcweir };
184cdf0e10cSrcweir
AddAttribute(enum::xmloff::token::XMLTokenEnum i_eName,const::rtl::OUString & i_rValue)185cdf0e10cSrcweir void SettingsExportFacade::AddAttribute( enum ::xmloff::token::XMLTokenEnum i_eName, const ::rtl::OUString& i_rValue )
186cdf0e10cSrcweir {
187cdf0e10cSrcweir m_rExport.AddAttribute( XML_NAMESPACE_CONFIG, i_eName, i_rValue );
188cdf0e10cSrcweir }
189cdf0e10cSrcweir
AddAttribute(enum::xmloff::token::XMLTokenEnum i_eName,enum::xmloff::token::XMLTokenEnum i_eValue)190cdf0e10cSrcweir void SettingsExportFacade::AddAttribute( enum ::xmloff::token::XMLTokenEnum i_eName, enum ::xmloff::token::XMLTokenEnum i_eValue )
191cdf0e10cSrcweir {
192cdf0e10cSrcweir m_rExport.AddAttribute( XML_NAMESPACE_CONFIG, i_eName, i_eValue );
193cdf0e10cSrcweir }
194cdf0e10cSrcweir
StartElement(enum::xmloff::token::XMLTokenEnum i_eName,const sal_Bool i_bIgnoreWhitespace)195cdf0e10cSrcweir void SettingsExportFacade::StartElement( enum ::xmloff::token::XMLTokenEnum i_eName, const sal_Bool i_bIgnoreWhitespace )
196cdf0e10cSrcweir {
197cdf0e10cSrcweir const ::rtl::OUString sElementName( m_rExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_CONFIG, GetXMLToken( i_eName ) ) );
198cdf0e10cSrcweir m_rExport.StartElement( sElementName, i_bIgnoreWhitespace );
199cdf0e10cSrcweir m_aElements.push( sElementName );
200cdf0e10cSrcweir }
201cdf0e10cSrcweir
EndElement(const sal_Bool i_bIgnoreWhitespace)202cdf0e10cSrcweir void SettingsExportFacade::EndElement( const sal_Bool i_bIgnoreWhitespace )
203cdf0e10cSrcweir {
204cdf0e10cSrcweir const ::rtl::OUString sElementName( m_aElements.top() );
205cdf0e10cSrcweir m_rExport.EndElement( sElementName, i_bIgnoreWhitespace );
206cdf0e10cSrcweir m_aElements.pop();
207cdf0e10cSrcweir }
208cdf0e10cSrcweir
Characters(const::rtl::OUString & i_rCharacters)209cdf0e10cSrcweir void SettingsExportFacade::Characters( const ::rtl::OUString& i_rCharacters )
210cdf0e10cSrcweir {
211cdf0e10cSrcweir m_rExport.GetDocHandler()->characters( i_rCharacters );
212cdf0e10cSrcweir }
213cdf0e10cSrcweir
GetServiceFactory() const214cdf0e10cSrcweir Reference< XMultiServiceFactory > SettingsExportFacade::GetServiceFactory() const
215cdf0e10cSrcweir {
216cdf0e10cSrcweir return m_rExport.getServiceFactory();
217cdf0e10cSrcweir }
218cdf0e10cSrcweir
219cdf0e10cSrcweir //==============================================================================
220cdf0e10cSrcweir
221cdf0e10cSrcweir class SvXMLExportEventListener : public cppu::WeakImplHelper1<
222cdf0e10cSrcweir com::sun::star::lang::XEventListener >
223cdf0e10cSrcweir {
224cdf0e10cSrcweir private:
225cdf0e10cSrcweir SvXMLExport* pExport;
226cdf0e10cSrcweir
227cdf0e10cSrcweir public:
228cdf0e10cSrcweir SvXMLExportEventListener(SvXMLExport* pExport);
229cdf0e10cSrcweir virtual ~SvXMLExportEventListener();
230cdf0e10cSrcweir
231cdf0e10cSrcweir // XEventListener
232cdf0e10cSrcweir virtual void SAL_CALL disposing(const lang::EventObject& rEventObject) throw(::com::sun::star::uno::RuntimeException);
233cdf0e10cSrcweir };
234cdf0e10cSrcweir
SvXMLExportEventListener(SvXMLExport * pTempExport)235cdf0e10cSrcweir SvXMLExportEventListener::SvXMLExportEventListener(SvXMLExport* pTempExport)
236cdf0e10cSrcweir : pExport(pTempExport)
237cdf0e10cSrcweir {
238cdf0e10cSrcweir }
239cdf0e10cSrcweir
~SvXMLExportEventListener()240cdf0e10cSrcweir SvXMLExportEventListener::~SvXMLExportEventListener()
241cdf0e10cSrcweir {
242cdf0e10cSrcweir }
243cdf0e10cSrcweir
244cdf0e10cSrcweir // XEventListener
disposing(const lang::EventObject &)245cdf0e10cSrcweir void SAL_CALL SvXMLExportEventListener::disposing( const lang::EventObject& )
246cdf0e10cSrcweir throw(uno::RuntimeException)
247cdf0e10cSrcweir {
248cdf0e10cSrcweir if (pExport)
249cdf0e10cSrcweir {
250cdf0e10cSrcweir pExport->DisposingModel();
251cdf0e10cSrcweir pExport = NULL;
252cdf0e10cSrcweir }
253cdf0e10cSrcweir }
254cdf0e10cSrcweir
255cdf0e10cSrcweir //==============================================================================
256cdf0e10cSrcweir
257cdf0e10cSrcweir class SvXMLExport_Impl
258cdf0e10cSrcweir {
259cdf0e10cSrcweir public:
260cdf0e10cSrcweir SvXMLExport_Impl();
261cdf0e10cSrcweir
262cdf0e10cSrcweir ::comphelper::UnoInterfaceToUniqueIdentifierMapper maInterfaceToIdentifierMapper;
263cdf0e10cSrcweir uno::Reference< uri::XUriReferenceFactory > mxUriReferenceFactory;
264cdf0e10cSrcweir rtl::OUString msPackageURI;
265cdf0e10cSrcweir rtl::OUString msPackageURIScheme;
266cdf0e10cSrcweir // --> OD 2006-09-27 #i69627#
267cdf0e10cSrcweir sal_Bool mbOutlineStyleAsNormalListStyle;
268cdf0e10cSrcweir // <--
269cdf0e10cSrcweir // --> PB 2007-07-06 #i146851#
270cdf0e10cSrcweir sal_Bool mbSaveBackwardCompatibleODF;
271cdf0e10cSrcweir // <--
272cdf0e10cSrcweir
273cdf0e10cSrcweir uno::Reference< embed::XStorage > mxTargetStorage;
274cdf0e10cSrcweir
275cdf0e10cSrcweir SvtSaveOptions maSaveOptions;
276cdf0e10cSrcweir
277*10347ccaSmseidel // relative path of stream in package, e.g. "someobject/content.xml"
278cdf0e10cSrcweir ::rtl::OUString mStreamPath;
279cdf0e10cSrcweir
280cdf0e10cSrcweir const uno::Reference< uno::XComponentContext > mxComponentContext;
281cdf0e10cSrcweir
282*10347ccaSmseidel // name of stream in package, e.g., "content.xml"
283cdf0e10cSrcweir ::rtl::OUString mStreamName;
284cdf0e10cSrcweir
285*10347ccaSmseidel // stack of backed up namespace maps
286*10347ccaSmseidel // long: depth at which namespace map has been backed up into the stack
287cdf0e10cSrcweir ::std::stack< ::std::pair< SvXMLNamespaceMap *, long > > mNamespaceMaps;
288*10347ccaSmseidel // counts depth (number of open elements/start tags)
289cdf0e10cSrcweir long mDepth;
290cdf0e10cSrcweir
291cdf0e10cSrcweir ::std::auto_ptr< ::xmloff::RDFaExportHelper> mpRDFaHelper;
292cdf0e10cSrcweir
293cdf0e10cSrcweir // --> OD 2008-11-26 #158694#
294cdf0e10cSrcweir sal_Bool mbExportTextNumberElement;
295cdf0e10cSrcweir // <--
296cdf0e10cSrcweir sal_Bool mbNullDateInitialized;
297cdf0e10cSrcweir
SetSchemeOf(const::rtl::OUString & rOrigFileName)298cdf0e10cSrcweir void SetSchemeOf( const ::rtl::OUString& rOrigFileName )
299cdf0e10cSrcweir {
300cdf0e10cSrcweir sal_Int32 nSep = rOrigFileName.indexOf(':');
301cdf0e10cSrcweir if( nSep != -1 )
302cdf0e10cSrcweir msPackageURIScheme = rOrigFileName.copy( 0, nSep );
303cdf0e10cSrcweir }
304cdf0e10cSrcweir };
305cdf0e10cSrcweir
SvXMLExport_Impl()306cdf0e10cSrcweir SvXMLExport_Impl::SvXMLExport_Impl()
307cdf0e10cSrcweir // --> OD 2006-09-27 #i69627#
308cdf0e10cSrcweir : mbOutlineStyleAsNormalListStyle( false )
309cdf0e10cSrcweir // <--
310cdf0e10cSrcweir // --> PB 2007-07-06 #i146851#
311cdf0e10cSrcweir ,mbSaveBackwardCompatibleODF( sal_True )
312cdf0e10cSrcweir // <--
313cdf0e10cSrcweir ,mxComponentContext( ::comphelper::getProcessComponentContext() )
314cdf0e10cSrcweir ,mStreamName()
315cdf0e10cSrcweir ,mNamespaceMaps()
316cdf0e10cSrcweir ,mDepth(0)
317cdf0e10cSrcweir ,mpRDFaHelper() // lazy
318cdf0e10cSrcweir // --> OD 2008-11-26 #158694#
319cdf0e10cSrcweir ,mbExportTextNumberElement( sal_False )
320cdf0e10cSrcweir // <--
321cdf0e10cSrcweir ,mbNullDateInitialized( sal_False )
322cdf0e10cSrcweir {
323cdf0e10cSrcweir OSL_ENSURE(mxComponentContext.is(), "SvXMLExport: no ComponentContext");
324cdf0e10cSrcweir if (!mxComponentContext.is()) throw uno::RuntimeException();
325cdf0e10cSrcweir mxUriReferenceFactory = uri::UriReferenceFactory::create(
326cdf0e10cSrcweir mxComponentContext );
327cdf0e10cSrcweir }
328cdf0e10cSrcweir
329cdf0e10cSrcweir //==============================================================================
330cdf0e10cSrcweir
SetDocHandler(const uno::Reference<xml::sax::XDocumentHandler> & rHandler)331cdf0e10cSrcweir void SvXMLExport::SetDocHandler( const uno::Reference< xml::sax::XDocumentHandler > &rHandler )
332cdf0e10cSrcweir {
333cdf0e10cSrcweir mxHandler = rHandler;
334cdf0e10cSrcweir mxExtHandler = uno::Reference<xml::sax::XExtendedDocumentHandler>( mxHandler, UNO_QUERY );
335cdf0e10cSrcweir }
336cdf0e10cSrcweir
_InitCtor()337cdf0e10cSrcweir void SvXMLExport::_InitCtor()
338cdf0e10cSrcweir {
339cdf0e10cSrcweir // note: it is not necessary to add XML_NP_XML (it is declared implicitly)
340cdf0e10cSrcweir if( (getExportFlags() & ~EXPORT_OASIS) != 0 )
341cdf0e10cSrcweir {
342cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_OFFICE), GetXMLToken(XML_N_OFFICE), XML_NAMESPACE_OFFICE );
343cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_OOO), GetXMLToken(XML_N_OOO), XML_NAMESPACE_OOO );
344cdf0e10cSrcweir }
345cdf0e10cSrcweir if( (getExportFlags() & (EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_FONTDECLS) ) != 0 )
346cdf0e10cSrcweir {
347cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_FO), GetXMLToken(XML_N_FO_COMPAT), XML_NAMESPACE_FO );
348cdf0e10cSrcweir }
349cdf0e10cSrcweir if( (getExportFlags() & (EXPORT_META|EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS|EXPORT_SETTINGS) ) != 0 )
350cdf0e10cSrcweir {
351cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_XLINK), GetXMLToken(XML_N_XLINK), XML_NAMESPACE_XLINK );
352cdf0e10cSrcweir }
353cdf0e10cSrcweir if( (getExportFlags() & EXPORT_SETTINGS) != 0 )
354cdf0e10cSrcweir {
355cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_CONFIG), GetXMLToken(XML_N_CONFIG), XML_NAMESPACE_CONFIG );
356cdf0e10cSrcweir }
357cdf0e10cSrcweir
358cdf0e10cSrcweir if( (getExportFlags() & (EXPORT_META|EXPORT_MASTERSTYLES|EXPORT_CONTENT) ) != 0 )
359cdf0e10cSrcweir {
360cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_DC), GetXMLToken(XML_N_DC), XML_NAMESPACE_DC );
361cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_META), GetXMLToken(XML_N_META), XML_NAMESPACE_META );
362cdf0e10cSrcweir }
363cdf0e10cSrcweir if( (getExportFlags() & (EXPORT_STYLES|EXPORT_MASTERSTYLES|EXPORT_AUTOSTYLES|EXPORT_CONTENT|EXPORT_FONTDECLS) ) != 0 )
364cdf0e10cSrcweir {
365cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_STYLE), GetXMLToken(XML_N_STYLE), XML_NAMESPACE_STYLE );
366cdf0e10cSrcweir }
367cdf0e10cSrcweir
368cdf0e10cSrcweir // namespaces for documents
369cdf0e10cSrcweir if( (getExportFlags() & (EXPORT_STYLES|EXPORT_AUTOSTYLES|EXPORT_MASTERSTYLES|EXPORT_CONTENT) ) != 0 )
370cdf0e10cSrcweir {
371cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_DC), GetXMLToken(XML_N_DC), XML_NAMESPACE_DC );
372cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_TEXT), GetXMLToken(XML_N_TEXT), XML_NAMESPACE_TEXT );
373cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_DRAW), GetXMLToken(XML_N_DRAW), XML_NAMESPACE_DRAW );
374cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_DR3D), GetXMLToken(XML_N_DR3D), XML_NAMESPACE_DR3D );
375cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_SVG), GetXMLToken(XML_N_SVG_COMPAT), XML_NAMESPACE_SVG );
376cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_CHART), GetXMLToken(XML_N_CHART), XML_NAMESPACE_CHART );
377cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_RPT), GetXMLToken(XML_N_RPT), XML_NAMESPACE_REPORT );
378cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_TABLE), GetXMLToken(XML_N_TABLE), XML_NAMESPACE_TABLE );
379cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_NUMBER),GetXMLToken(XML_N_NUMBER), XML_NAMESPACE_NUMBER );
380cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_OOOW), GetXMLToken(XML_N_OOOW), XML_NAMESPACE_OOOW );
381cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_OOOC), GetXMLToken(XML_N_OOOC), XML_NAMESPACE_OOOC );
382cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_OF), GetXMLToken(XML_N_OF), XML_NAMESPACE_OF );
383cdf0e10cSrcweir
384cdf0e10cSrcweir if (getDefaultVersion() > SvtSaveOptions::ODFVER_012)
385cdf0e10cSrcweir {
386cdf0e10cSrcweir mpNamespaceMap->Add(
387cdf0e10cSrcweir GetXMLToken(XML_NP_TABLE_EXT), GetXMLToken(XML_N_TABLE_EXT), XML_NAMESPACE_TABLE_EXT);
388cdf0e10cSrcweir }
389cdf0e10cSrcweir }
390cdf0e10cSrcweir if( (getExportFlags() & (EXPORT_MASTERSTYLES|EXPORT_CONTENT) ) != 0 )
391cdf0e10cSrcweir {
392cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_MATH), GetXMLToken(XML_N_MATH), XML_NAMESPACE_MATH );
393cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_FORM), GetXMLToken(XML_N_FORM), XML_NAMESPACE_FORM );
394cdf0e10cSrcweir }
395cdf0e10cSrcweir if( (getExportFlags() & (EXPORT_STYLES|EXPORT_AUTOSTYLES|EXPORT_MASTERSTYLES|EXPORT_CONTENT|EXPORT_SCRIPTS) ) != 0 )
396cdf0e10cSrcweir {
397cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_SCRIPT), GetXMLToken(XML_N_SCRIPT), XML_NAMESPACE_SCRIPT );
398cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_DOM), GetXMLToken(XML_N_DOM), XML_NAMESPACE_DOM );
399cdf0e10cSrcweir }
400cdf0e10cSrcweir if( (getExportFlags() & EXPORT_CONTENT ) != 0 )
401cdf0e10cSrcweir {
402cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_XFORMS_1_0), GetXMLToken(XML_N_XFORMS_1_0), XML_NAMESPACE_XFORMS );
403cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_XSD), GetXMLToken(XML_N_XSD), XML_NAMESPACE_XSD );
404cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_XSI), GetXMLToken(XML_N_XSI), XML_NAMESPACE_XSI );
405cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_FIELD), GetXMLToken(XML_N_FIELD), XML_NAMESPACE_FIELD );
406cdf0e10cSrcweir }
407cdf0e10cSrcweir // RDFa: needed for content and header/footer styles
408cdf0e10cSrcweir if( (getExportFlags() & (EXPORT_STYLES|EXPORT_AUTOSTYLES|EXPORT_MASTERSTYLES|EXPORT_CONTENT) ) != 0 )
409cdf0e10cSrcweir {
410cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_XHTML),
411cdf0e10cSrcweir GetXMLToken(XML_N_XHTML), XML_NAMESPACE_XHTML );
412cdf0e10cSrcweir }
413cdf0e10cSrcweir // GRDDL: to convert RDFa and meta.xml to RDF
414cdf0e10cSrcweir if( (getExportFlags() & (EXPORT_META|EXPORT_STYLES|EXPORT_AUTOSTYLES|EXPORT_MASTERSTYLES|EXPORT_CONTENT) ) != 0 )
415cdf0e10cSrcweir {
416cdf0e10cSrcweir mpNamespaceMap->Add( GetXMLToken(XML_NP_GRDDL),
417cdf0e10cSrcweir GetXMLToken(XML_N_GRDDL), XML_NAMESPACE_GRDDL );
418cdf0e10cSrcweir }
419cdf0e10cSrcweir
420cdf0e10cSrcweir mxAttrList = (xml::sax::XAttributeList*)mpAttrList;
421cdf0e10cSrcweir
422cdf0e10cSrcweir msPicturesPath = OUString( RTL_CONSTASCII_USTRINGPARAM( "#Pictures/" ) );
423cdf0e10cSrcweir msObjectsPath = OUString( RTL_CONSTASCII_USTRINGPARAM( "#./" ) );
424cdf0e10cSrcweir msGraphicObjectProtocol = OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.GraphicObject:" ) );
425cdf0e10cSrcweir msEmbeddedObjectProtocol = OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.EmbeddedObject:" ) );
426cdf0e10cSrcweir
427cdf0e10cSrcweir if (mxModel.is() && !mxEventListener.is())
428cdf0e10cSrcweir {
429cdf0e10cSrcweir mxEventListener.set( new SvXMLExportEventListener(this));
430cdf0e10cSrcweir mxModel->addEventListener(mxEventListener);
431cdf0e10cSrcweir }
432cdf0e10cSrcweir
433cdf0e10cSrcweir // --> OD 2006-03-10 #i51726# - determine model type
434cdf0e10cSrcweir _DetermineModelType();
435cdf0e10cSrcweir // <--
436cdf0e10cSrcweir
437cdf0e10cSrcweir mbEnableExperimentalOdfExport = getenv("ENABLE_EXPERIMENTAL_ODF_EXPORT") != NULL;
438cdf0e10cSrcweir
439cdf0e10cSrcweir // --> PB 2007-07-06 #146851# - load mbSaveBackwardCompatibleODF from configuration
440cdf0e10cSrcweir
441cdf0e10cSrcweir // cl: but only if we do export to current oasis format, old openoffice format *must* always be compatible
442cdf0e10cSrcweir if( (getExportFlags() & EXPORT_OASIS) != 0 )
443cdf0e10cSrcweir {
444cdf0e10cSrcweir sal_Bool bTemp = sal_True;
445cdf0e10cSrcweir if ( ::comphelper::ConfigurationHelper::readDirectKey(
446cdf0e10cSrcweir getServiceFactory(),
447cdf0e10cSrcweir C2U("org.openoffice.Office.Common/"), C2U("Save/Document"), C2U("SaveBackwardCompatibleODF"),
448cdf0e10cSrcweir ::comphelper::ConfigurationHelper::E_READONLY ) >>= bTemp )
449cdf0e10cSrcweir {
450cdf0e10cSrcweir mpImpl->mbSaveBackwardCompatibleODF = bTemp;
451cdf0e10cSrcweir }
452cdf0e10cSrcweir }
453cdf0e10cSrcweir // <--
454cdf0e10cSrcweir }
455cdf0e10cSrcweir
456cdf0e10cSrcweir // --> OD 2006-03-14 #i51726#
_DetermineModelType()457cdf0e10cSrcweir void SvXMLExport::_DetermineModelType()
458cdf0e10cSrcweir {
459cdf0e10cSrcweir meModelType = SvtModuleOptions::E_UNKNOWN_FACTORY;
460cdf0e10cSrcweir
461cdf0e10cSrcweir if ( mxModel.is() )
462cdf0e10cSrcweir {
463cdf0e10cSrcweir meModelType = SvtModuleOptions::ClassifyFactoryByModel( mxModel );
464cdf0e10cSrcweir }
465cdf0e10cSrcweir }
466cdf0e10cSrcweir // <--
467cdf0e10cSrcweir
468cdf0e10cSrcweir // #110680#
SvXMLExport(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,MapUnit eDfltUnit,const enum XMLTokenEnum eClass,sal_uInt16 nExportFlags)469cdf0e10cSrcweir SvXMLExport::SvXMLExport(
470cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
471cdf0e10cSrcweir MapUnit eDfltUnit, const enum XMLTokenEnum eClass, sal_uInt16 nExportFlags )
472cdf0e10cSrcweir : mpImpl( new SvXMLExport_Impl ),
473cdf0e10cSrcweir // #110680#
474cdf0e10cSrcweir mxServiceFactory(xServiceFactory),
475cdf0e10cSrcweir mpAttrList( new SvXMLAttributeList ),
476cdf0e10cSrcweir mpNamespaceMap( new SvXMLNamespaceMap ),
477cdf0e10cSrcweir // #110680#
478cdf0e10cSrcweir mpUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, eDfltUnit, getServiceFactory() ) ),
479cdf0e10cSrcweir mpNumExport(0L),
480cdf0e10cSrcweir mpProgressBarHelper( NULL ),
481cdf0e10cSrcweir mpEventExport( NULL ),
482cdf0e10cSrcweir mpImageMapExport( NULL ),
483cdf0e10cSrcweir mpXMLErrors( NULL ),
484cdf0e10cSrcweir mbExtended( sal_False ),
485cdf0e10cSrcweir meClass( eClass ),
486cdf0e10cSrcweir mnExportFlags( nExportFlags ),
487cdf0e10cSrcweir mnErrorFlags( ERROR_NO ),
488cdf0e10cSrcweir msWS( GetXMLToken(XML_WS) ),
489cdf0e10cSrcweir mbSaveLinkedSections(sal_True)
490cdf0e10cSrcweir {
491cdf0e10cSrcweir DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
492cdf0e10cSrcweir _InitCtor();
493cdf0e10cSrcweir }
494cdf0e10cSrcweir
495cdf0e10cSrcweir // #110680#
SvXMLExport(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,const OUString & rFileName,const uno::Reference<xml::sax::XDocumentHandler> & rHandler,MapUnit eDfltUnit)496cdf0e10cSrcweir SvXMLExport::SvXMLExport(
497cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
498cdf0e10cSrcweir const OUString &rFileName,
499cdf0e10cSrcweir const uno::Reference< xml::sax::XDocumentHandler > & rHandler,
500cdf0e10cSrcweir MapUnit eDfltUnit )
501cdf0e10cSrcweir : mpImpl( new SvXMLExport_Impl ),
502cdf0e10cSrcweir // #110680#
503cdf0e10cSrcweir mxServiceFactory(xServiceFactory),
504cdf0e10cSrcweir mxHandler( rHandler ),
505cdf0e10cSrcweir mxExtHandler( rHandler, uno::UNO_QUERY ),
506cdf0e10cSrcweir mpAttrList( new SvXMLAttributeList ),
507cdf0e10cSrcweir msOrigFileName( rFileName ),
508cdf0e10cSrcweir mpNamespaceMap( new SvXMLNamespaceMap ),
509cdf0e10cSrcweir // #110680#
510cdf0e10cSrcweir mpUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, eDfltUnit, getServiceFactory() ) ),
511cdf0e10cSrcweir mpNumExport(0L),
512cdf0e10cSrcweir mpProgressBarHelper( NULL ),
513cdf0e10cSrcweir mpEventExport( NULL ),
514cdf0e10cSrcweir mpImageMapExport( NULL ),
515cdf0e10cSrcweir mpXMLErrors( NULL ),
516cdf0e10cSrcweir mbExtended( sal_False ),
517cdf0e10cSrcweir meClass( XML_TOKEN_INVALID ),
518cdf0e10cSrcweir mnExportFlags( 0 ),
519cdf0e10cSrcweir mnErrorFlags( ERROR_NO ),
520cdf0e10cSrcweir msWS( GetXMLToken(XML_WS) ),
521cdf0e10cSrcweir mbSaveLinkedSections(sal_True)
522cdf0e10cSrcweir {
523cdf0e10cSrcweir mpImpl->SetSchemeOf( msOrigFileName );
524cdf0e10cSrcweir DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
525cdf0e10cSrcweir _InitCtor();
526cdf0e10cSrcweir
527cdf0e10cSrcweir if (mxNumberFormatsSupplier.is())
528cdf0e10cSrcweir mpNumExport = new SvXMLNumFmtExport(*this, mxNumberFormatsSupplier);
529cdf0e10cSrcweir }
530cdf0e10cSrcweir
531cdf0e10cSrcweir // #110680#
SvXMLExport(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)532cdf0e10cSrcweir SvXMLExport::SvXMLExport(
533cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
534cdf0e10cSrcweir const OUString &rFileName,
535cdf0e10cSrcweir const uno::Reference< xml::sax::XDocumentHandler > & rHandler,
536cdf0e10cSrcweir const Reference< XModel >& rModel,
537cdf0e10cSrcweir sal_Int16 eDfltUnit )
538cdf0e10cSrcweir : mpImpl( new SvXMLExport_Impl ),
539cdf0e10cSrcweir // #110680#
540cdf0e10cSrcweir mxServiceFactory(xServiceFactory),
541cdf0e10cSrcweir mxModel( rModel ),
542cdf0e10cSrcweir mxHandler( rHandler ),
543cdf0e10cSrcweir mxExtHandler( rHandler, uno::UNO_QUERY ),
544cdf0e10cSrcweir mxNumberFormatsSupplier (rModel, uno::UNO_QUERY),
545cdf0e10cSrcweir mpAttrList( new SvXMLAttributeList ),
546cdf0e10cSrcweir msOrigFileName( rFileName ),
547cdf0e10cSrcweir mpNamespaceMap( new SvXMLNamespaceMap ),
548cdf0e10cSrcweir // #110680#
549cdf0e10cSrcweir // pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, SvXMLUnitConverter::GetMapUnit(eDfltUnit) ) ),
550cdf0e10cSrcweir mpUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, SvXMLUnitConverter::GetMapUnit(eDfltUnit), getServiceFactory() ) ),
551cdf0e10cSrcweir mpNumExport(0L),
552cdf0e10cSrcweir mpProgressBarHelper( NULL ),
553cdf0e10cSrcweir mpEventExport( NULL ),
554cdf0e10cSrcweir mpImageMapExport( NULL ),
555cdf0e10cSrcweir mpXMLErrors( NULL ),
556cdf0e10cSrcweir mbExtended( sal_False ),
557cdf0e10cSrcweir meClass( XML_TOKEN_INVALID ),
558cdf0e10cSrcweir mnExportFlags( 0 ),
559cdf0e10cSrcweir mnErrorFlags( ERROR_NO ),
560cdf0e10cSrcweir msWS( GetXMLToken(XML_WS) ),
561cdf0e10cSrcweir mbSaveLinkedSections(sal_True)
562cdf0e10cSrcweir {
563cdf0e10cSrcweir mpImpl->SetSchemeOf( msOrigFileName );
564cdf0e10cSrcweir DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
565cdf0e10cSrcweir _InitCtor();
566cdf0e10cSrcweir
567cdf0e10cSrcweir if (mxNumberFormatsSupplier.is())
568cdf0e10cSrcweir mpNumExport = new SvXMLNumFmtExport(*this, mxNumberFormatsSupplier);
569cdf0e10cSrcweir }
570cdf0e10cSrcweir
571cdf0e10cSrcweir // #110680#
SvXMLExport(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)572cdf0e10cSrcweir SvXMLExport::SvXMLExport(
573cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
574cdf0e10cSrcweir const OUString &rFileName,
575cdf0e10cSrcweir const uno::Reference< xml::sax::XDocumentHandler > & rHandler,
576cdf0e10cSrcweir const Reference< XModel >& rModel,
577cdf0e10cSrcweir const Reference< document::XGraphicObjectResolver >& rEmbeddedGraphicObjects,
578cdf0e10cSrcweir sal_Int16 eDfltUnit )
579cdf0e10cSrcweir : mpImpl( new SvXMLExport_Impl ),
580cdf0e10cSrcweir // #110680#
581cdf0e10cSrcweir mxServiceFactory(xServiceFactory),
582cdf0e10cSrcweir mxModel( rModel ),
583cdf0e10cSrcweir mxHandler( rHandler ),
584cdf0e10cSrcweir mxExtHandler( rHandler, uno::UNO_QUERY ),
585cdf0e10cSrcweir mxNumberFormatsSupplier (rModel, uno::UNO_QUERY),
586cdf0e10cSrcweir mxGraphicResolver( rEmbeddedGraphicObjects ),
587cdf0e10cSrcweir mpAttrList( new SvXMLAttributeList ),
588cdf0e10cSrcweir msOrigFileName( rFileName ),
589cdf0e10cSrcweir mpNamespaceMap( new SvXMLNamespaceMap ),
590cdf0e10cSrcweir // #110680#
591cdf0e10cSrcweir mpUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, SvXMLUnitConverter::GetMapUnit(eDfltUnit), getServiceFactory() ) ),
592cdf0e10cSrcweir mpNumExport(0L),
593cdf0e10cSrcweir mpProgressBarHelper( NULL ),
594cdf0e10cSrcweir mpEventExport( NULL ),
595cdf0e10cSrcweir mpImageMapExport( NULL ),
596cdf0e10cSrcweir mpXMLErrors( NULL ),
597cdf0e10cSrcweir mbExtended( sal_False ),
598cdf0e10cSrcweir meClass( XML_TOKEN_INVALID ),
599cdf0e10cSrcweir mnExportFlags( 0 ),
600cdf0e10cSrcweir mnErrorFlags( ERROR_NO ),
601cdf0e10cSrcweir msWS( GetXMLToken(XML_WS) ),
602cdf0e10cSrcweir mbSaveLinkedSections(sal_True)
603cdf0e10cSrcweir {
604cdf0e10cSrcweir mpImpl->SetSchemeOf( msOrigFileName );
605cdf0e10cSrcweir DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
606cdf0e10cSrcweir _InitCtor();
607cdf0e10cSrcweir
608cdf0e10cSrcweir if (mxNumberFormatsSupplier.is())
609cdf0e10cSrcweir mpNumExport = new SvXMLNumFmtExport(*this, mxNumberFormatsSupplier);
610cdf0e10cSrcweir }
611cdf0e10cSrcweir
~SvXMLExport()612cdf0e10cSrcweir SvXMLExport::~SvXMLExport()
613cdf0e10cSrcweir {
614cdf0e10cSrcweir delete mpXMLErrors;
615cdf0e10cSrcweir delete mpImageMapExport;
616cdf0e10cSrcweir delete mpEventExport;
617cdf0e10cSrcweir delete mpNamespaceMap;
618cdf0e10cSrcweir delete mpUnitConv;
619cdf0e10cSrcweir if (mpProgressBarHelper || mpNumExport)
620cdf0e10cSrcweir {
621cdf0e10cSrcweir if (mxExportInfo.is())
622cdf0e10cSrcweir {
623cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = mxExportInfo->getPropertySetInfo();
624cdf0e10cSrcweir if (xPropertySetInfo.is())
625cdf0e10cSrcweir {
626cdf0e10cSrcweir if (mpProgressBarHelper)
627cdf0e10cSrcweir {
628cdf0e10cSrcweir OUString sProgressMax(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSMAX));
629cdf0e10cSrcweir OUString sProgressCurrent(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSCURRENT));
630cdf0e10cSrcweir OUString sRepeat(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSREPEAT));
631cdf0e10cSrcweir if (xPropertySetInfo->hasPropertyByName(sProgressMax) &&
632cdf0e10cSrcweir xPropertySetInfo->hasPropertyByName(sProgressCurrent))
633cdf0e10cSrcweir {
634cdf0e10cSrcweir sal_Int32 nProgressMax(mpProgressBarHelper->GetReference());
635cdf0e10cSrcweir sal_Int32 nProgressCurrent(mpProgressBarHelper->GetValue());
636cdf0e10cSrcweir uno::Any aAny;
637cdf0e10cSrcweir aAny <<= nProgressMax;
638cdf0e10cSrcweir mxExportInfo->setPropertyValue(sProgressMax, aAny);
639cdf0e10cSrcweir aAny <<= nProgressCurrent;
640cdf0e10cSrcweir mxExportInfo->setPropertyValue(sProgressCurrent, aAny);
641cdf0e10cSrcweir }
642cdf0e10cSrcweir if (xPropertySetInfo->hasPropertyByName(sRepeat))
643cdf0e10cSrcweir mxExportInfo->setPropertyValue(sRepeat, cppu::bool2any(mpProgressBarHelper->GetRepeat()));
644cdf0e10cSrcweir }
645cdf0e10cSrcweir if (mpNumExport && (mnExportFlags & (EXPORT_AUTOSTYLES | EXPORT_STYLES)))
646cdf0e10cSrcweir {
647cdf0e10cSrcweir OUString sWrittenNumberFormats(RTL_CONSTASCII_USTRINGPARAM(XML_WRITTENNUMBERSTYLES));
648cdf0e10cSrcweir if (xPropertySetInfo->hasPropertyByName(sWrittenNumberFormats))
649cdf0e10cSrcweir {
650cdf0e10cSrcweir uno::Sequence<sal_Int32> aWasUsed;
651cdf0e10cSrcweir mpNumExport->GetWasUsed(aWasUsed);
652cdf0e10cSrcweir uno::Any aAny;
653cdf0e10cSrcweir aAny <<= aWasUsed;
654cdf0e10cSrcweir mxExportInfo->setPropertyValue(sWrittenNumberFormats, aAny);
655cdf0e10cSrcweir }
656cdf0e10cSrcweir }
657cdf0e10cSrcweir }
658cdf0e10cSrcweir }
659cdf0e10cSrcweir delete mpProgressBarHelper;
660cdf0e10cSrcweir delete mpNumExport;
661cdf0e10cSrcweir }
662cdf0e10cSrcweir
663cdf0e10cSrcweir xmloff::token::ResetTokens();
664cdf0e10cSrcweir
665cdf0e10cSrcweir if (mxEventListener.is() && mxModel.is())
666cdf0e10cSrcweir mxModel->removeEventListener(mxEventListener);
667cdf0e10cSrcweir
668cdf0e10cSrcweir delete mpImpl;
669cdf0e10cSrcweir }
670cdf0e10cSrcweir
671cdf0e10cSrcweir ///////////////////////////////////////////////////////////////////////
672cdf0e10cSrcweir
673cdf0e10cSrcweir // XExporter
setSourceDocument(const uno::Reference<lang::XComponent> & xDoc)674cdf0e10cSrcweir void SAL_CALL SvXMLExport::setSourceDocument( const uno::Reference< lang::XComponent >& xDoc )
675cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException)
676cdf0e10cSrcweir {
677cdf0e10cSrcweir mxModel = uno::Reference< frame::XModel >::query( xDoc );
678cdf0e10cSrcweir if( !mxModel.is() )
679cdf0e10cSrcweir throw lang::IllegalArgumentException();
680cdf0e10cSrcweir if (mxModel.is() && ! mxEventListener.is())
681cdf0e10cSrcweir {
682cdf0e10cSrcweir mxEventListener.set( new SvXMLExportEventListener(this));
683cdf0e10cSrcweir mxModel->addEventListener(mxEventListener);
684cdf0e10cSrcweir }
685cdf0e10cSrcweir
686cdf0e10cSrcweir if(!mxNumberFormatsSupplier.is() )
687cdf0e10cSrcweir {
688cdf0e10cSrcweir mxNumberFormatsSupplier = mxNumberFormatsSupplier.query( mxModel );
689cdf0e10cSrcweir if(mxNumberFormatsSupplier.is() && mxHandler.is())
690cdf0e10cSrcweir mpNumExport = new SvXMLNumFmtExport(*this, mxNumberFormatsSupplier);
691cdf0e10cSrcweir }
692cdf0e10cSrcweir if (mxExportInfo.is())
693cdf0e10cSrcweir {
694cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = mxExportInfo->getPropertySetInfo();
695cdf0e10cSrcweir if (xPropertySetInfo.is())
696cdf0e10cSrcweir {
697cdf0e10cSrcweir OUString sUsePrettyPrinting(RTL_CONSTASCII_USTRINGPARAM(XML_USEPRETTYPRINTING));
698cdf0e10cSrcweir if (xPropertySetInfo->hasPropertyByName(sUsePrettyPrinting))
699cdf0e10cSrcweir {
700cdf0e10cSrcweir uno::Any aAny = mxExportInfo->getPropertyValue(sUsePrettyPrinting);
70170aac8b5SJim Jagielski try
70270aac8b5SJim Jagielski {
703cdf0e10cSrcweir if (::cppu::any2bool(aAny))
704cdf0e10cSrcweir mnExportFlags |= EXPORT_PRETTY;
705cdf0e10cSrcweir else
706cdf0e10cSrcweir mnExportFlags &= ~EXPORT_PRETTY;
707cdf0e10cSrcweir }
70870aac8b5SJim Jagielski catch ( lang::IllegalArgumentException& )
70970aac8b5SJim Jagielski {
71070aac8b5SJim Jagielski DBG_ERRORFILE("why is bUsePrettyPrint not boolean?");
71170aac8b5SJim Jagielski }
71270aac8b5SJim Jagielski }
713cdf0e10cSrcweir
714cdf0e10cSrcweir if (mpNumExport && (mnExportFlags & (EXPORT_AUTOSTYLES | EXPORT_STYLES)))
715cdf0e10cSrcweir {
716cdf0e10cSrcweir OUString sWrittenNumberFormats(RTL_CONSTASCII_USTRINGPARAM(XML_WRITTENNUMBERSTYLES));
717cdf0e10cSrcweir if (xPropertySetInfo->hasPropertyByName(sWrittenNumberFormats))
718cdf0e10cSrcweir {
719cdf0e10cSrcweir uno::Any aAny = mxExportInfo->getPropertyValue(sWrittenNumberFormats);
720cdf0e10cSrcweir uno::Sequence<sal_Int32> aWasUsed;
721cdf0e10cSrcweir if(aAny >>= aWasUsed)
722cdf0e10cSrcweir mpNumExport->SetWasUsed(aWasUsed);
723cdf0e10cSrcweir }
724cdf0e10cSrcweir }
725cdf0e10cSrcweir }
726cdf0e10cSrcweir }
727cdf0e10cSrcweir
728cdf0e10cSrcweir // --> PB 2007-07-06 #i146851#
729cdf0e10cSrcweir if ( mpImpl->mbSaveBackwardCompatibleODF )
730cdf0e10cSrcweir mnExportFlags |= EXPORT_SAVEBACKWARDCOMPATIBLE;
731cdf0e10cSrcweir else
732cdf0e10cSrcweir mnExportFlags &= ~EXPORT_SAVEBACKWARDCOMPATIBLE;
733cdf0e10cSrcweir // <--
734cdf0e10cSrcweir
735cdf0e10cSrcweir // namespaces for user defined attributes
736cdf0e10cSrcweir Reference< XMultiServiceFactory > xFactory( mxModel, UNO_QUERY );
737cdf0e10cSrcweir if( xFactory.is() )
738cdf0e10cSrcweir {
739cdf0e10cSrcweir try
740cdf0e10cSrcweir {
741cdf0e10cSrcweir Reference < XInterface > xIfc =
742cdf0e10cSrcweir xFactory->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM(
743cdf0e10cSrcweir "com.sun.star.xml.NamespaceMap")) );
744cdf0e10cSrcweir if( xIfc.is() )
745cdf0e10cSrcweir {
746cdf0e10cSrcweir Reference< XNameAccess > xNamespaceMap( xIfc, UNO_QUERY );
747cdf0e10cSrcweir if( xNamespaceMap.is() )
748cdf0e10cSrcweir {
749cdf0e10cSrcweir Sequence< OUString > aPrefixes( xNamespaceMap->getElementNames() );
750cdf0e10cSrcweir
751cdf0e10cSrcweir OUString* pPrefix = aPrefixes.getArray();
752cdf0e10cSrcweir const sal_Int32 nCount = aPrefixes.getLength();
753cdf0e10cSrcweir sal_Int32 nIndex;
754cdf0e10cSrcweir OUString aURL;
755cdf0e10cSrcweir
756cdf0e10cSrcweir for( nIndex = 0; nIndex < nCount; ++nIndex, ++pPrefix )
757cdf0e10cSrcweir {
758cdf0e10cSrcweir if( xNamespaceMap->getByName( *pPrefix ) >>= aURL )
759cdf0e10cSrcweir _GetNamespaceMap().Add( *pPrefix, aURL, XML_NAMESPACE_UNKNOWN );
760cdf0e10cSrcweir }
761cdf0e10cSrcweir }
762cdf0e10cSrcweir }
763cdf0e10cSrcweir }
764cdf0e10cSrcweir catch( com::sun::star::uno::Exception& )
765cdf0e10cSrcweir {
766cdf0e10cSrcweir }
767cdf0e10cSrcweir }
768cdf0e10cSrcweir
769cdf0e10cSrcweir // --> OD 2006-03-10 #i51726# - determine model type
770cdf0e10cSrcweir _DetermineModelType();
771cdf0e10cSrcweir // <--
772cdf0e10cSrcweir }
773cdf0e10cSrcweir
774cdf0e10cSrcweir // XInitialize
initialize(const uno::Sequence<uno::Any> & aArguments)775cdf0e10cSrcweir void SAL_CALL SvXMLExport::initialize( const uno::Sequence< uno::Any >& aArguments )
776cdf0e10cSrcweir throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
777cdf0e10cSrcweir {
778cdf0e10cSrcweir // #93186# we need to queryInterface every single Any with any expected outcome. This variable hold the queryInterface results.
779cdf0e10cSrcweir
780cdf0e10cSrcweir const sal_Int32 nAnyCount = aArguments.getLength();
781cdf0e10cSrcweir const uno::Any* pAny = aArguments.getConstArray();
782cdf0e10cSrcweir
783cdf0e10cSrcweir for( sal_Int32 nIndex = 0; nIndex < nAnyCount; nIndex++, pAny++ )
784cdf0e10cSrcweir {
785cdf0e10cSrcweir Reference<XInterface> xValue;
786cdf0e10cSrcweir *pAny >>= xValue;
787cdf0e10cSrcweir
788cdf0e10cSrcweir // status indicator
789cdf0e10cSrcweir uno::Reference<task::XStatusIndicator> xTmpStatus( xValue, UNO_QUERY );
790cdf0e10cSrcweir if ( xTmpStatus.is() )
791cdf0e10cSrcweir mxStatusIndicator = xTmpStatus;
792cdf0e10cSrcweir
793cdf0e10cSrcweir // graphic resolver
794cdf0e10cSrcweir uno::Reference<document::XGraphicObjectResolver> xTmpGraphic(
795cdf0e10cSrcweir xValue, UNO_QUERY );
796cdf0e10cSrcweir if ( xTmpGraphic.is() )
797cdf0e10cSrcweir mxGraphicResolver = xTmpGraphic;
798cdf0e10cSrcweir
799cdf0e10cSrcweir // object resolver
800cdf0e10cSrcweir uno::Reference<document::XEmbeddedObjectResolver> xTmpObjectResolver(
801cdf0e10cSrcweir xValue, UNO_QUERY );
802cdf0e10cSrcweir if ( xTmpObjectResolver.is() )
803cdf0e10cSrcweir mxEmbeddedResolver = xTmpObjectResolver;
804cdf0e10cSrcweir
805cdf0e10cSrcweir // document handler
806cdf0e10cSrcweir uno::Reference<xml::sax::XDocumentHandler> xTmpDocHandler(
807cdf0e10cSrcweir xValue, UNO_QUERY );
808cdf0e10cSrcweir if( xTmpDocHandler.is() )
809cdf0e10cSrcweir {
810cdf0e10cSrcweir mxHandler = xTmpDocHandler;
811cdf0e10cSrcweir *pAny >>= mxExtHandler;
812cdf0e10cSrcweir
813cdf0e10cSrcweir if (mxNumberFormatsSupplier.is() && mpNumExport == NULL)
814cdf0e10cSrcweir mpNumExport = new SvXMLNumFmtExport(*this, mxNumberFormatsSupplier);
815cdf0e10cSrcweir }
816cdf0e10cSrcweir
817cdf0e10cSrcweir // property set to transport data across
818cdf0e10cSrcweir uno::Reference<beans::XPropertySet> xTmpPropertySet(
819cdf0e10cSrcweir xValue, UNO_QUERY );
820cdf0e10cSrcweir if( xTmpPropertySet.is() )
821cdf0e10cSrcweir mxExportInfo = xTmpPropertySet;
822cdf0e10cSrcweir }
823cdf0e10cSrcweir
824cdf0e10cSrcweir if( mxExportInfo.is() )
825cdf0e10cSrcweir {
826cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo > xPropertySetInfo =
827cdf0e10cSrcweir mxExportInfo->getPropertySetInfo();
828cdf0e10cSrcweir OUString sPropName(
829cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM("BaseURI" ) );
830cdf0e10cSrcweir if( xPropertySetInfo->hasPropertyByName(sPropName) )
831cdf0e10cSrcweir {
832cdf0e10cSrcweir uno::Any aAny = mxExportInfo->getPropertyValue(sPropName);
833cdf0e10cSrcweir aAny >>= msOrigFileName;
834cdf0e10cSrcweir mpImpl->msPackageURI = msOrigFileName;
835cdf0e10cSrcweir mpImpl->SetSchemeOf( msOrigFileName );
836cdf0e10cSrcweir }
837cdf0e10cSrcweir OUString sRelPath;
838cdf0e10cSrcweir sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("StreamRelPath" ) );
839cdf0e10cSrcweir if( xPropertySetInfo->hasPropertyByName(sPropName) )
840cdf0e10cSrcweir {
841cdf0e10cSrcweir uno::Any aAny = mxExportInfo->getPropertyValue(sPropName);
842cdf0e10cSrcweir aAny >>= sRelPath;
843cdf0e10cSrcweir }
844cdf0e10cSrcweir OUString sName;
845cdf0e10cSrcweir sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("StreamName" ) );
846cdf0e10cSrcweir if( xPropertySetInfo->hasPropertyByName(sPropName) )
847cdf0e10cSrcweir {
848cdf0e10cSrcweir uno::Any aAny = mxExportInfo->getPropertyValue(sPropName);
849cdf0e10cSrcweir aAny >>= sName;
850cdf0e10cSrcweir }
851cdf0e10cSrcweir if( msOrigFileName.getLength() && sName.getLength() )
852cdf0e10cSrcweir {
853cdf0e10cSrcweir INetURLObject aBaseURL( msOrigFileName );
854cdf0e10cSrcweir if( sRelPath.getLength() )
855cdf0e10cSrcweir aBaseURL.insertName( sRelPath );
856cdf0e10cSrcweir aBaseURL.insertName( sName );
857cdf0e10cSrcweir msOrigFileName = aBaseURL.GetMainURL(INetURLObject::DECODE_TO_IURI);
858cdf0e10cSrcweir }
859cdf0e10cSrcweir mpImpl->mStreamName = sName; // Note: may be empty (XSLT)
860cdf0e10cSrcweir
861cdf0e10cSrcweir // --> OD 2006-09-26 #i69627#
862cdf0e10cSrcweir const ::rtl::OUString sOutlineStyleAsNormalListStyle(
863cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM("OutlineStyleAsNormalListStyle") );
864cdf0e10cSrcweir if( xPropertySetInfo->hasPropertyByName( sOutlineStyleAsNormalListStyle ) )
865cdf0e10cSrcweir {
866cdf0e10cSrcweir uno::Any aAny = mxExportInfo->getPropertyValue( sOutlineStyleAsNormalListStyle );
867cdf0e10cSrcweir aAny >>= (mpImpl->mbOutlineStyleAsNormalListStyle);
868cdf0e10cSrcweir }
869cdf0e10cSrcweir // <--
870cdf0e10cSrcweir
871cdf0e10cSrcweir OUString sTargetStorage( RTL_CONSTASCII_USTRINGPARAM("TargetStorage") );
872cdf0e10cSrcweir if( xPropertySetInfo->hasPropertyByName( sTargetStorage ) )
873cdf0e10cSrcweir mxExportInfo->getPropertyValue( sTargetStorage ) >>= mpImpl->mxTargetStorage;
874cdf0e10cSrcweir
875cdf0e10cSrcweir // --> OD 2008-11-26 #158694#
876cdf0e10cSrcweir const ::rtl::OUString sExportTextNumberElement(
877cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM("ExportTextNumberElement") );
878cdf0e10cSrcweir if( xPropertySetInfo->hasPropertyByName( sExportTextNumberElement ) )
879cdf0e10cSrcweir {
880cdf0e10cSrcweir uno::Any aAny = mxExportInfo->getPropertyValue( sExportTextNumberElement );
881cdf0e10cSrcweir aAny >>= (mpImpl->mbExportTextNumberElement);
882cdf0e10cSrcweir }
883cdf0e10cSrcweir // <--
884cdf0e10cSrcweir }
885cdf0e10cSrcweir
886cdf0e10cSrcweir }
887cdf0e10cSrcweir
888cdf0e10cSrcweir // XFilter
filter(const uno::Sequence<beans::PropertyValue> & aDescriptor)889cdf0e10cSrcweir sal_Bool SAL_CALL SvXMLExport::filter( const uno::Sequence< beans::PropertyValue >& aDescriptor ) throw(uno::RuntimeException)
890cdf0e10cSrcweir {
891cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogContext, "xmloff", LOGFILE_AUTHOR,
892cdf0e10cSrcweir "SvXMLExport::filter" );
893cdf0e10cSrcweir
894cdf0e10cSrcweir // check for xHandler first... should have been supplied in initialize
895cdf0e10cSrcweir if( !mxHandler.is() )
896cdf0e10cSrcweir return sal_False;
897cdf0e10cSrcweir
898cdf0e10cSrcweir try
899cdf0e10cSrcweir {
900cdf0e10cSrcweir const sal_uInt32 nTest =
901cdf0e10cSrcweir EXPORT_META|EXPORT_STYLES|EXPORT_CONTENT|EXPORT_SETTINGS;
902cdf0e10cSrcweir if( (mnExportFlags & nTest) == nTest && !msOrigFileName.getLength() )
903cdf0e10cSrcweir {
904cdf0e10cSrcweir // evaluate descriptor only for flat files and if a base URI
905cdf0e10cSrcweir // has not been provided already
906cdf0e10cSrcweir const sal_Int32 nPropCount = aDescriptor.getLength();
907cdf0e10cSrcweir const beans::PropertyValue* pProps = aDescriptor.getConstArray();
908cdf0e10cSrcweir
909cdf0e10cSrcweir for( sal_Int32 nIndex = 0; nIndex < nPropCount; nIndex++, pProps++ )
910cdf0e10cSrcweir {
911cdf0e10cSrcweir const OUString& rPropName = pProps->Name;
912cdf0e10cSrcweir const Any& rValue = pProps->Value;
913cdf0e10cSrcweir
914cdf0e10cSrcweir if( rPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "FileName" ) ) )
915cdf0e10cSrcweir {
916cdf0e10cSrcweir if( !(rValue >>= msOrigFileName ) )
917cdf0e10cSrcweir return sal_False;
918cdf0e10cSrcweir }
919cdf0e10cSrcweir else if (rPropName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "FilterName" ) ) )
920cdf0e10cSrcweir {
921cdf0e10cSrcweir if( !(rValue >>= msFilterName ) )
922cdf0e10cSrcweir return sal_False;
923cdf0e10cSrcweir }
924cdf0e10cSrcweir }
925cdf0e10cSrcweir }
926cdf0e10cSrcweir
927cdf0e10cSrcweir #ifdef TIMELOG
928cdf0e10cSrcweir if (GetModel().is())
929cdf0e10cSrcweir {
930cdf0e10cSrcweir // print a trace message with the URL
931cdf0e10cSrcweir ByteString aUrl( (String) GetModel()->getURL(),
932cdf0e10cSrcweir RTL_TEXTENCODING_ASCII_US );
933cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_TRACE1( aLogContext, "%s", aUrl.GetBuffer() );
934cdf0e10cSrcweir
935cdf0e10cSrcweir // we also want a trace message with the document class
936cdf0e10cSrcweir ByteString aClass( (String)GetXMLToken(meClass),
937cdf0e10cSrcweir RTL_TEXTENCODING_ASCII_US );
938cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_TRACE1( aLogContext, "class=\"%s\"",
939cdf0e10cSrcweir aClass.GetBuffer() );
940cdf0e10cSrcweir }
941cdf0e10cSrcweir #endif
942cdf0e10cSrcweir
943cdf0e10cSrcweir exportDoc( meClass );
944cdf0e10cSrcweir }
945cdf0e10cSrcweir catch( uno::Exception e )
946cdf0e10cSrcweir {
947cdf0e10cSrcweir // We must catch exceptions, because according to the
948cdf0e10cSrcweir // API definition export must not throw one!
949cdf0e10cSrcweir Sequence<OUString> aSeq(0);
950cdf0e10cSrcweir SetError( XMLERROR_FLAG_ERROR | XMLERROR_FLAG_SEVERE | XMLERROR_API,
951cdf0e10cSrcweir aSeq, e.Message, NULL );
952cdf0e10cSrcweir }
953cdf0e10cSrcweir
95486e1cf34SPedro Giffuni // return true only if no error occurred
955cdf0e10cSrcweir return (GetErrorFlags() & (ERROR_DO_NOTHING|ERROR_ERROR_OCCURED)) == 0;
956cdf0e10cSrcweir }
957cdf0e10cSrcweir
cancel()958cdf0e10cSrcweir void SAL_CALL SvXMLExport::cancel() throw(uno::RuntimeException)
959cdf0e10cSrcweir {
960cdf0e10cSrcweir // stop export
961cdf0e10cSrcweir Sequence<OUString> aEmptySeq;
962cdf0e10cSrcweir SetError(XMLERROR_CANCEL|XMLERROR_FLAG_SEVERE, aEmptySeq);
963cdf0e10cSrcweir }
964cdf0e10cSrcweir
getName()965cdf0e10cSrcweir ::rtl::OUString SAL_CALL SvXMLExport::getName( )
966cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException)
967cdf0e10cSrcweir {
968cdf0e10cSrcweir return msFilterName;
969cdf0e10cSrcweir }
970cdf0e10cSrcweir
setName(const::rtl::OUString &)971cdf0e10cSrcweir void SAL_CALL SvXMLExport::setName( const ::rtl::OUString& )
972cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException)
973cdf0e10cSrcweir {
974cdf0e10cSrcweir // do nothing, because it is not possible to set the FilterName
975cdf0e10cSrcweir }
976cdf0e10cSrcweir
977cdf0e10cSrcweir
978cdf0e10cSrcweir // XServiceInfo
getImplementationName()979cdf0e10cSrcweir OUString SAL_CALL SvXMLExport::getImplementationName( ) throw(uno::RuntimeException)
980cdf0e10cSrcweir {
981cdf0e10cSrcweir OUString aStr;
982cdf0e10cSrcweir return aStr;
983cdf0e10cSrcweir }
984cdf0e10cSrcweir
supportsService(const OUString & rServiceName)985cdf0e10cSrcweir sal_Bool SAL_CALL SvXMLExport::supportsService( const OUString& rServiceName ) throw(uno::RuntimeException)
986cdf0e10cSrcweir {
987cdf0e10cSrcweir return
988cdf0e10cSrcweir rServiceName.equalsAsciiL(
989cdf0e10cSrcweir "com.sun.star.document.ExportFilter",
990cdf0e10cSrcweir sizeof("com.sun.star.document.ExportFilter")-1 ) ||
991cdf0e10cSrcweir rServiceName.equalsAsciiL(
992cdf0e10cSrcweir "com.sun.star.xml.XMLExportFilter",
993cdf0e10cSrcweir sizeof("com.sun.star.xml.XMLExportFilter")-1);
994cdf0e10cSrcweir }
995cdf0e10cSrcweir
getSupportedServiceNames()996cdf0e10cSrcweir uno::Sequence< OUString > SAL_CALL SvXMLExport::getSupportedServiceNames( )
997cdf0e10cSrcweir throw(uno::RuntimeException)
998cdf0e10cSrcweir {
999cdf0e10cSrcweir uno::Sequence<OUString> aSeq(2);
1000cdf0e10cSrcweir aSeq[0] = OUString(
1001cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.ExportFilter"));
1002cdf0e10cSrcweir aSeq[1] = OUString(
1003cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.XMLExportFilter"));
1004cdf0e10cSrcweir return aSeq;
1005cdf0e10cSrcweir }
1006cdf0e10cSrcweir
1007cdf0e10cSrcweir ///////////////////////////////////////////////////////////////////////
1008cdf0e10cSrcweir
1009cdf0e10cSrcweir ::rtl::OUString
EnsureNamespace(::rtl::OUString const & i_rNamespace,::rtl::OUString const & i_rPreferredPrefix)1010cdf0e10cSrcweir SvXMLExport::EnsureNamespace(::rtl::OUString const & i_rNamespace,
1011cdf0e10cSrcweir ::rtl::OUString const & i_rPreferredPrefix)
1012cdf0e10cSrcweir {
1013cdf0e10cSrcweir ::rtl::OUString sPrefix;
1014cdf0e10cSrcweir sal_uInt16 nKey( _GetNamespaceMap().GetKeyByName( i_rNamespace ) );
1015cdf0e10cSrcweir if( XML_NAMESPACE_UNKNOWN == nKey )
1016cdf0e10cSrcweir {
1017cdf0e10cSrcweir // There is no prefix for the namespace, so
1018cdf0e10cSrcweir // we have to generate one and have to add it.
1019cdf0e10cSrcweir sPrefix = i_rPreferredPrefix;
1020cdf0e10cSrcweir nKey = _GetNamespaceMap().GetKeyByPrefix( sPrefix );
1021cdf0e10cSrcweir sal_Int32 n( 0 );
1022cdf0e10cSrcweir ::rtl::OUStringBuffer buf;
1023cdf0e10cSrcweir while( nKey != USHRT_MAX )
1024cdf0e10cSrcweir {
1025cdf0e10cSrcweir buf.append( i_rPreferredPrefix );
1026cdf0e10cSrcweir buf.append( ++n );
1027cdf0e10cSrcweir sPrefix = buf.makeStringAndClear();
1028cdf0e10cSrcweir nKey = _GetNamespaceMap().GetKeyByPrefix( sPrefix );
1029cdf0e10cSrcweir }
1030cdf0e10cSrcweir
1031cdf0e10cSrcweir if (mpImpl->mNamespaceMaps.empty()
1032cdf0e10cSrcweir || (mpImpl->mNamespaceMaps.top().second != mpImpl->mDepth))
1033cdf0e10cSrcweir {
1034cdf0e10cSrcweir // top was created for lower depth... need a new namespace map!
1035cdf0e10cSrcweir mpImpl->mNamespaceMaps.push(
1036cdf0e10cSrcweir ::std::make_pair(mpNamespaceMap, mpImpl->mDepth) );
1037cdf0e10cSrcweir mpNamespaceMap = new SvXMLNamespaceMap( *mpNamespaceMap );
1038cdf0e10cSrcweir }
1039cdf0e10cSrcweir
1040cdf0e10cSrcweir // add the namespace to the map and as attribute
1041cdf0e10cSrcweir mpNamespaceMap->Add( sPrefix, i_rNamespace );
1042cdf0e10cSrcweir buf.append( GetXMLToken(XML_XMLNS) );
1043cdf0e10cSrcweir buf.append( sal_Unicode(':') );
1044cdf0e10cSrcweir buf.append( sPrefix );
1045cdf0e10cSrcweir AddAttribute( buf.makeStringAndClear(), i_rNamespace );
1046cdf0e10cSrcweir }
1047cdf0e10cSrcweir else
1048cdf0e10cSrcweir {
1049cdf0e10cSrcweir // If there is a prefix for the namespace, reuse that.
1050cdf0e10cSrcweir sPrefix = _GetNamespaceMap().GetPrefixByKey( nKey );
1051cdf0e10cSrcweir }
1052cdf0e10cSrcweir return sPrefix;
1053cdf0e10cSrcweir }
1054cdf0e10cSrcweir
1055cdf0e10cSrcweir ///////////////////////////////////////////////////////////////////////
1056cdf0e10cSrcweir
AddAttributeASCII(sal_uInt16 nPrefixKey,const sal_Char * pName,const sal_Char * pValue)1057cdf0e10cSrcweir void SvXMLExport::AddAttributeASCII( sal_uInt16 nPrefixKey,
1058cdf0e10cSrcweir const sal_Char *pName,
1059cdf0e10cSrcweir const sal_Char *pValue )
1060cdf0e10cSrcweir {
1061cdf0e10cSrcweir OUString sName( OUString::createFromAscii( pName ) );
1062cdf0e10cSrcweir OUString sValue( OUString::createFromAscii( pValue ) );
1063cdf0e10cSrcweir
1064cdf0e10cSrcweir mpAttrList->AddAttribute(
1065cdf0e10cSrcweir _GetNamespaceMap().GetQNameByKey( nPrefixKey, sName ), sValue );
1066cdf0e10cSrcweir }
1067cdf0e10cSrcweir
AddAttribute(sal_uInt16 nPrefixKey,const sal_Char * pName,const OUString & rValue)1068cdf0e10cSrcweir void SvXMLExport::AddAttribute( sal_uInt16 nPrefixKey, const sal_Char *pName,
1069cdf0e10cSrcweir const OUString& rValue )
1070cdf0e10cSrcweir {
1071cdf0e10cSrcweir OUString sName( OUString::createFromAscii( pName ) );
1072cdf0e10cSrcweir
1073cdf0e10cSrcweir mpAttrList->AddAttribute(
1074cdf0e10cSrcweir _GetNamespaceMap().GetQNameByKey( nPrefixKey, sName ), rValue );
1075cdf0e10cSrcweir }
1076cdf0e10cSrcweir
AddAttribute(sal_uInt16 nPrefixKey,const OUString & rName,const OUString & rValue)1077cdf0e10cSrcweir void SvXMLExport::AddAttribute( sal_uInt16 nPrefixKey, const OUString& rName,
1078cdf0e10cSrcweir const OUString& rValue )
1079cdf0e10cSrcweir {
1080cdf0e10cSrcweir mpAttrList->AddAttribute(
1081cdf0e10cSrcweir _GetNamespaceMap().GetQNameByKey( nPrefixKey, rName ), rValue );
1082cdf0e10cSrcweir }
1083cdf0e10cSrcweir
AddAttribute(sal_uInt16 nPrefixKey,enum XMLTokenEnum eName,const OUString & rValue)1084cdf0e10cSrcweir void SvXMLExport::AddAttribute( sal_uInt16 nPrefixKey,
1085cdf0e10cSrcweir enum XMLTokenEnum eName,
1086cdf0e10cSrcweir const OUString& rValue )
1087cdf0e10cSrcweir {
1088cdf0e10cSrcweir mpAttrList->AddAttribute(
1089cdf0e10cSrcweir _GetNamespaceMap().GetQNameByKey( nPrefixKey, GetXMLToken(eName) ),
1090cdf0e10cSrcweir rValue );
1091cdf0e10cSrcweir }
1092cdf0e10cSrcweir
AddAttribute(sal_uInt16 nPrefixKey,enum XMLTokenEnum eName,enum XMLTokenEnum eValue)1093cdf0e10cSrcweir void SvXMLExport::AddAttribute( sal_uInt16 nPrefixKey,
1094cdf0e10cSrcweir enum XMLTokenEnum eName,
1095cdf0e10cSrcweir enum XMLTokenEnum eValue)
1096cdf0e10cSrcweir {
1097cdf0e10cSrcweir mpAttrList->AddAttribute(
1098cdf0e10cSrcweir _GetNamespaceMap().GetQNameByKey( nPrefixKey, GetXMLToken(eName) ),
1099cdf0e10cSrcweir GetXMLToken(eValue) );
1100cdf0e10cSrcweir }
1101cdf0e10cSrcweir
AddAttribute(const::rtl::OUString & rQName,const::rtl::OUString & rValue)1102cdf0e10cSrcweir void SvXMLExport::AddAttribute( const ::rtl::OUString& rQName,
1103cdf0e10cSrcweir const ::rtl::OUString& rValue )
1104cdf0e10cSrcweir {
1105cdf0e10cSrcweir mpAttrList->AddAttribute(
1106cdf0e10cSrcweir rQName,
1107cdf0e10cSrcweir rValue );
1108cdf0e10cSrcweir }
1109cdf0e10cSrcweir
AddAttribute(const::rtl::OUString & rQName,enum::xmloff::token::XMLTokenEnum eValue)1110cdf0e10cSrcweir void SvXMLExport::AddAttribute( const ::rtl::OUString& rQName,
1111cdf0e10cSrcweir enum ::xmloff::token::XMLTokenEnum eValue )
1112cdf0e10cSrcweir {
1113cdf0e10cSrcweir mpAttrList->AddAttribute(
1114cdf0e10cSrcweir rQName,
1115cdf0e10cSrcweir GetXMLToken(eValue) );
1116cdf0e10cSrcweir }
1117cdf0e10cSrcweir
AddAttributeList(const uno::Reference<xml::sax::XAttributeList> & xAttrList)1118cdf0e10cSrcweir void SvXMLExport::AddAttributeList( const uno::Reference< xml::sax::XAttributeList >& xAttrList )
1119cdf0e10cSrcweir {
1120cdf0e10cSrcweir if( xAttrList.is())
1121cdf0e10cSrcweir mpAttrList->AppendAttributeList( xAttrList );
1122cdf0e10cSrcweir }
1123cdf0e10cSrcweir
ClearAttrList()1124cdf0e10cSrcweir void SvXMLExport::ClearAttrList()
1125cdf0e10cSrcweir {
1126cdf0e10cSrcweir mpAttrList->Clear();
1127cdf0e10cSrcweir }
1128cdf0e10cSrcweir
1129cdf0e10cSrcweir #ifdef DBG_UTIL
CheckAttrList()1130cdf0e10cSrcweir void SvXMLExport::CheckAttrList()
1131cdf0e10cSrcweir {
1132cdf0e10cSrcweir DBG_ASSERT( !mpAttrList->getLength(),
1133cdf0e10cSrcweir "XMLExport::CheckAttrList: list is not empty" );
1134cdf0e10cSrcweir }
1135cdf0e10cSrcweir #endif
1136cdf0e10cSrcweir
ImplExportMeta()1137cdf0e10cSrcweir void SvXMLExport::ImplExportMeta()
1138cdf0e10cSrcweir {
1139cdf0e10cSrcweir CheckAttrList();
1140cdf0e10cSrcweir
1141cdf0e10cSrcweir _ExportMeta();
1142cdf0e10cSrcweir }
1143cdf0e10cSrcweir
ImplExportSettings()1144cdf0e10cSrcweir void SvXMLExport::ImplExportSettings()
1145cdf0e10cSrcweir {
1146cdf0e10cSrcweir CheckAttrList();
1147cdf0e10cSrcweir
1148cdf0e10cSrcweir ::std::list< SettingsGroup > aSettings;
1149cdf0e10cSrcweir sal_Int32 nSettingsCount = 0;
1150cdf0e10cSrcweir
1151cdf0e10cSrcweir // view settings
1152cdf0e10cSrcweir uno::Sequence< beans::PropertyValue > aViewSettings;
1153cdf0e10cSrcweir GetViewSettingsAndViews( aViewSettings );
1154cdf0e10cSrcweir aSettings.push_back( SettingsGroup( XML_VIEW_SETTINGS, aViewSettings ) );
1155cdf0e10cSrcweir nSettingsCount += aViewSettings.getLength();
1156cdf0e10cSrcweir
1157cdf0e10cSrcweir // configuration settings
1158cdf0e10cSrcweir uno::Sequence<beans::PropertyValue> aConfigSettings;
1159cdf0e10cSrcweir GetConfigurationSettings( aConfigSettings );
1160cdf0e10cSrcweir aSettings.push_back( SettingsGroup( XML_CONFIGURATION_SETTINGS, aConfigSettings ) );
1161cdf0e10cSrcweir nSettingsCount += aConfigSettings.getLength();
1162cdf0e10cSrcweir
1163cdf0e10cSrcweir // any document specific settings
1164cdf0e10cSrcweir nSettingsCount += GetDocumentSpecificSettings( aSettings );
1165cdf0e10cSrcweir
1166cdf0e10cSrcweir {
1167cdf0e10cSrcweir SvXMLElementExport aElem( *this,
1168cdf0e10cSrcweir nSettingsCount != 0,
1169cdf0e10cSrcweir XML_NAMESPACE_OFFICE, XML_SETTINGS,
1170cdf0e10cSrcweir sal_True, sal_True );
1171cdf0e10cSrcweir
1172cdf0e10cSrcweir SettingsExportFacade aSettingsExportContext( *this );
1173cdf0e10cSrcweir XMLSettingsExportHelper aSettingsExportHelper( aSettingsExportContext );
1174cdf0e10cSrcweir
1175cdf0e10cSrcweir for ( ::std::list< SettingsGroup >::const_iterator settings = aSettings.begin();
1176cdf0e10cSrcweir settings != aSettings.end();
1177cdf0e10cSrcweir ++settings
1178cdf0e10cSrcweir )
1179cdf0e10cSrcweir {
1180cdf0e10cSrcweir if ( !settings->aSettings.getLength() )
1181cdf0e10cSrcweir continue;
1182cdf0e10cSrcweir
1183cdf0e10cSrcweir OUString sSettingsName( GetXMLToken( settings->eGroupName ) );
1184cdf0e10cSrcweir OUString sQName = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OOO, sSettingsName );
1185cdf0e10cSrcweir aSettingsExportHelper.exportAllSettings( settings->aSettings, sQName );
1186cdf0e10cSrcweir }
1187cdf0e10cSrcweir }
1188cdf0e10cSrcweir }
1189cdf0e10cSrcweir
ImplExportStyles(sal_Bool)1190cdf0e10cSrcweir void SvXMLExport::ImplExportStyles( sal_Bool )
1191cdf0e10cSrcweir {
1192cdf0e10cSrcweir CheckAttrList();
1193cdf0e10cSrcweir
1194cdf0e10cSrcweir // AddAttribute( XML_NAMESPACE_NONE, XML_ID, XML_STYLES_ID );
1195cdf0e10cSrcweir {
11967af97f4fSArrigo Marchiori // <office:styles>
1197cdf0e10cSrcweir SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, XML_STYLES,
1198cdf0e10cSrcweir sal_True, sal_True );
1199cdf0e10cSrcweir
1200cdf0e10cSrcweir _ExportStyles( sal_False );
1201cdf0e10cSrcweir }
1202cdf0e10cSrcweir
1203cdf0e10cSrcweir // transfer style names (+ families) TO other components (if appropriate)
1204cdf0e10cSrcweir if( ( ( mnExportFlags & EXPORT_CONTENT ) == 0 ) && mxExportInfo.is() )
1205cdf0e10cSrcweir {
1206cdf0e10cSrcweir static OUString sStyleNames( RTL_CONSTASCII_USTRINGPARAM("StyleNames") );
1207cdf0e10cSrcweir static OUString sStyleFamilies( RTL_CONSTASCII_USTRINGPARAM("StyleFamilies") );
1208cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = mxExportInfo->getPropertySetInfo();
1209cdf0e10cSrcweir if ( xPropertySetInfo->hasPropertyByName( sStyleNames ) && xPropertySetInfo->hasPropertyByName( sStyleFamilies ) )
1210cdf0e10cSrcweir {
1211cdf0e10cSrcweir Sequence<sal_Int32> aStyleFamilies;
1212cdf0e10cSrcweir Sequence<OUString> aStyleNames;
1213cdf0e10cSrcweir mxAutoStylePool->GetRegisteredNames( aStyleFamilies, aStyleNames );
1214cdf0e10cSrcweir mxExportInfo->setPropertyValue( sStyleNames, makeAny( aStyleNames ) );
1215cdf0e10cSrcweir mxExportInfo->setPropertyValue( sStyleFamilies,
1216cdf0e10cSrcweir makeAny( aStyleFamilies ) );
1217cdf0e10cSrcweir }
1218cdf0e10cSrcweir }
1219cdf0e10cSrcweir }
1220cdf0e10cSrcweir
ImplExportAutoStyles(sal_Bool)1221cdf0e10cSrcweir void SvXMLExport::ImplExportAutoStyles( sal_Bool )
1222cdf0e10cSrcweir {
1223cdf0e10cSrcweir // transfer style names (+ families) FROM other components (if appropriate)
1224cdf0e10cSrcweir OUString sStyleNames( RTL_CONSTASCII_USTRINGPARAM("StyleNames") );
1225cdf0e10cSrcweir OUString sStyleFamilies( RTL_CONSTASCII_USTRINGPARAM("StyleFamilies") );
1226cdf0e10cSrcweir if( ( ( mnExportFlags & EXPORT_STYLES ) == 0 )
1227cdf0e10cSrcweir && mxExportInfo.is()
1228cdf0e10cSrcweir && mxExportInfo->getPropertySetInfo()->hasPropertyByName( sStyleNames )
1229cdf0e10cSrcweir && mxExportInfo->getPropertySetInfo()->hasPropertyByName( sStyleFamilies ) )
1230cdf0e10cSrcweir {
1231cdf0e10cSrcweir Sequence<sal_Int32> aStyleFamilies;
1232cdf0e10cSrcweir mxExportInfo->getPropertyValue( sStyleFamilies ) >>= aStyleFamilies;
1233cdf0e10cSrcweir Sequence<OUString> aStyleNames;
1234cdf0e10cSrcweir mxExportInfo->getPropertyValue( sStyleNames ) >>= aStyleNames;
1235cdf0e10cSrcweir mxAutoStylePool->RegisterNames( aStyleFamilies, aStyleNames );
1236cdf0e10cSrcweir }
1237cdf0e10cSrcweir
1238cdf0e10cSrcweir // AddAttributeASCII( XML_NAMESPACE_NONE, XML_ID, XML_AUTO_STYLES_ID );
1239cdf0e10cSrcweir {
12407af97f4fSArrigo Marchiori // <office:automatic-styles>
1241cdf0e10cSrcweir SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE,
1242cdf0e10cSrcweir XML_AUTOMATIC_STYLES, sal_True, sal_True );
1243cdf0e10cSrcweir
1244cdf0e10cSrcweir #if 0
1245cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE );
1246cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, XML_STYLES_HREF );
1247cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD );
1248cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_XLINK, XML_ROLE,
1249cdf0e10cSrcweir pNamespaceMap->GetQNameByKey( XML_NAMESPACE_OFFICE,
1250cdf0e10cSrcweir GetXMLToken(XML_STYLESHEET)) );
1251cdf0e10cSrcweir {
12527af97f4fSArrigo Marchiori // <office:use-styles>
1253cdf0e10cSrcweir SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE,
1254cdf0e10cSrcweir XML_USE_STYLES, sal_True, sal_True );
1255cdf0e10cSrcweir }
1256cdf0e10cSrcweir #endif
1257cdf0e10cSrcweir _ExportAutoStyles();
1258cdf0e10cSrcweir }
1259cdf0e10cSrcweir }
1260cdf0e10cSrcweir
ImplExportMasterStyles(sal_Bool)1261cdf0e10cSrcweir void SvXMLExport::ImplExportMasterStyles( sal_Bool )
1262cdf0e10cSrcweir {
1263cdf0e10cSrcweir {
12647af97f4fSArrigo Marchiori // <office:master-styles>
1265cdf0e10cSrcweir SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, XML_MASTER_STYLES,
1266cdf0e10cSrcweir sal_True, sal_True );
1267cdf0e10cSrcweir
1268cdf0e10cSrcweir _ExportMasterStyles();
1269cdf0e10cSrcweir }
1270cdf0e10cSrcweir
1271cdf0e10cSrcweir #if 0
1272cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE );
1273cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, XML_AUTO_STYLES_HREF );
1274cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD );
1275cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_XLINK, XML_ROLE,
1276cdf0e10cSrcweir pNamespaceMap->GetQNameByKey( XML_NAMESPACE_OFFICE,
1277cdf0e10cSrcweir GetXMLToken(XML_STYLESHEET) ) );
1278cdf0e10cSrcweir {
12797af97f4fSArrigo Marchiori // <office:use-styles>
1280cdf0e10cSrcweir SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE,
1281cdf0e10cSrcweir XML_USE_STYLES, sal_True, sal_True );
1282cdf0e10cSrcweir }
1283cdf0e10cSrcweir #endif
1284cdf0e10cSrcweir }
1285cdf0e10cSrcweir
ImplExportContent()1286cdf0e10cSrcweir void SvXMLExport::ImplExportContent()
1287cdf0e10cSrcweir {
1288cdf0e10cSrcweir CheckAttrList();
1289cdf0e10cSrcweir
1290cdf0e10cSrcweir CheckAttrList();
1291cdf0e10cSrcweir
1292cdf0e10cSrcweir {
1293*10347ccaSmseidel SvXMLElementExport aElement( *this, XML_NAMESPACE_OFFICE, XML_BODY,
1294cdf0e10cSrcweir sal_True, sal_True );
1295cdf0e10cSrcweir {
1296cdf0e10cSrcweir XMLTokenEnum eClass = meClass;
1297cdf0e10cSrcweir if( XML_TEXT_GLOBAL == eClass )
1298cdf0e10cSrcweir {
1299cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_TEXT, XML_GLOBAL,
1300cdf0e10cSrcweir GetXMLToken( XML_TRUE ) );
1301cdf0e10cSrcweir eClass = XML_TEXT;
1302cdf0e10cSrcweir }
1303cdf0e10cSrcweir // <office:body ...>
1304cdf0e10cSrcweir SetBodyAttributes();
1305cdf0e10cSrcweir SvXMLElementExport aElem( *this, meClass != XML_TOKEN_INVALID,
1306cdf0e10cSrcweir XML_NAMESPACE_OFFICE, eClass,
1307cdf0e10cSrcweir sal_True, sal_True );
1308cdf0e10cSrcweir
1309cdf0e10cSrcweir _ExportContent();
1310cdf0e10cSrcweir }
1311cdf0e10cSrcweir }
1312cdf0e10cSrcweir }
1313cdf0e10cSrcweir
SetBodyAttributes()1314cdf0e10cSrcweir void SvXMLExport::SetBodyAttributes()
1315cdf0e10cSrcweir {
1316cdf0e10cSrcweir }
1317cdf0e10cSrcweir
1318cdf0e10cSrcweir static void
lcl_AddGrddl(SvXMLExport & rExport,const sal_Int32)1319cdf0e10cSrcweir lcl_AddGrddl(SvXMLExport & rExport, const sal_Int32 /*nExportMode*/)
1320cdf0e10cSrcweir {
1321cdf0e10cSrcweir // check version >= 1.2
1322cdf0e10cSrcweir switch (rExport.getDefaultVersion()) {
1323cdf0e10cSrcweir case SvtSaveOptions::ODFVER_011: // fall thru
1324cdf0e10cSrcweir case SvtSaveOptions::ODFVER_010: return;
1325cdf0e10cSrcweir default: break;
1326cdf0e10cSrcweir }
1327cdf0e10cSrcweir
1328cdf0e10cSrcweir // #i115030#: disabled
1329cdf0e10cSrcweir #if 0
1330cdf0e10cSrcweir if (EXPORT_SETTINGS != nExportMode) // meta, content, styles
1331cdf0e10cSrcweir {
1332cdf0e10cSrcweir rExport.AddAttribute( XML_NAMESPACE_GRDDL, XML_TRANSFORMATION,
1333cdf0e10cSrcweir OUString::createFromAscii(s_grddl_xsl) );
1334cdf0e10cSrcweir }
1335cdf0e10cSrcweir #endif
1336cdf0e10cSrcweir }
1337cdf0e10cSrcweir
exportDoc(enum::xmloff::token::XMLTokenEnum eClass)1338cdf0e10cSrcweir sal_uInt32 SvXMLExport::exportDoc( enum ::xmloff::token::XMLTokenEnum eClass )
1339cdf0e10cSrcweir {
1340cdf0e10cSrcweir bool bOwnGraphicResolver = false;
1341cdf0e10cSrcweir bool bOwnEmbeddedResolver = false;
1342cdf0e10cSrcweir
1343cdf0e10cSrcweir if( !mxGraphicResolver.is() || !mxEmbeddedResolver.is() )
1344cdf0e10cSrcweir {
1345cdf0e10cSrcweir Reference< XMultiServiceFactory > xFactory( mxModel, UNO_QUERY );
1346cdf0e10cSrcweir if( xFactory.is() )
1347cdf0e10cSrcweir {
1348cdf0e10cSrcweir try
1349cdf0e10cSrcweir {
1350cdf0e10cSrcweir if( !mxGraphicResolver.is() )
1351cdf0e10cSrcweir {
1352cdf0e10cSrcweir mxGraphicResolver = Reference< XGraphicObjectResolver >::query(
1353cdf0e10cSrcweir xFactory->createInstance(
1354cdf0e10cSrcweir OUString(RTL_CONSTASCII_USTRINGPARAM(
1355cdf0e10cSrcweir "com.sun.star.document.ExportGraphicObjectResolver"))));
1356cdf0e10cSrcweir bOwnGraphicResolver = mxGraphicResolver.is();
1357cdf0e10cSrcweir }
1358cdf0e10cSrcweir
1359cdf0e10cSrcweir if( !mxEmbeddedResolver.is() )
1360cdf0e10cSrcweir {
1361cdf0e10cSrcweir mxEmbeddedResolver = Reference< XEmbeddedObjectResolver >::query(
1362cdf0e10cSrcweir xFactory->createInstance(
1363cdf0e10cSrcweir OUString(RTL_CONSTASCII_USTRINGPARAM(
1364cdf0e10cSrcweir "com.sun.star.document.ExportEmbeddedObjectResolver"))));
1365cdf0e10cSrcweir bOwnEmbeddedResolver = mxEmbeddedResolver.is();
1366cdf0e10cSrcweir }
1367cdf0e10cSrcweir }
1368cdf0e10cSrcweir catch( com::sun::star::uno::Exception& )
1369cdf0e10cSrcweir {
1370cdf0e10cSrcweir }
1371cdf0e10cSrcweir }
1372cdf0e10cSrcweir }
1373cdf0e10cSrcweir if( (getExportFlags() & EXPORT_OASIS) == 0 )
1374cdf0e10cSrcweir {
1375cdf0e10cSrcweir Reference< lang::XMultiServiceFactory > xFactory = getServiceFactory();
1376cdf0e10cSrcweir if( xFactory.is() )
1377cdf0e10cSrcweir {
1378cdf0e10cSrcweir try
1379cdf0e10cSrcweir {
1380cdf0e10cSrcweir ::comphelper::PropertyMapEntry aInfoMap[] =
1381cdf0e10cSrcweir {
1382cdf0e10cSrcweir { "Class", sizeof("Class")-1, 0,
1383cdf0e10cSrcweir &::getCppuType((::rtl::OUString*)0),
1384cdf0e10cSrcweir PropertyAttribute::MAYBEVOID, 0},
1385cdf0e10cSrcweir { NULL, 0, 0, NULL, 0, 0 }
1386cdf0e10cSrcweir };
1387cdf0e10cSrcweir Reference< XPropertySet > xConvPropSet(
1388cdf0e10cSrcweir ::comphelper::GenericPropertySet_CreateInstance(
1389cdf0e10cSrcweir new ::comphelper::PropertySetInfo( aInfoMap ) ) );
1390cdf0e10cSrcweir
1391cdf0e10cSrcweir Any aAny;
1392cdf0e10cSrcweir aAny <<= GetXMLToken( eClass );
1393cdf0e10cSrcweir xConvPropSet->setPropertyValue(
1394cdf0e10cSrcweir OUString(RTL_CONSTASCII_USTRINGPARAM("Class")), aAny );
1395cdf0e10cSrcweir
1396cdf0e10cSrcweir Reference< XPropertySet > xPropSet =
1397cdf0e10cSrcweir mxExportInfo.is()
1398cdf0e10cSrcweir ? PropertySetMerger_CreateInstance( mxExportInfo,
1399cdf0e10cSrcweir xConvPropSet )
1400cdf0e10cSrcweir : xConvPropSet;
1401cdf0e10cSrcweir
1402cdf0e10cSrcweir Sequence<Any> aArgs( 3 );
1403cdf0e10cSrcweir aArgs[0] <<= mxHandler;
1404cdf0e10cSrcweir aArgs[1] <<= xPropSet;
1405cdf0e10cSrcweir aArgs[2] <<= mxModel;
1406cdf0e10cSrcweir
1407cdf0e10cSrcweir // get filter component
1408cdf0e10cSrcweir Reference< xml::sax::XDocumentHandler > xTmpDocHandler(
1409cdf0e10cSrcweir xFactory->createInstanceWithArguments(
1410cdf0e10cSrcweir OUString::createFromAscii("com.sun.star.comp.Oasis2OOoTransformer"),
1411cdf0e10cSrcweir aArgs), UNO_QUERY);
1412cdf0e10cSrcweir OSL_ENSURE( xTmpDocHandler.is(),
1413cdf0e10cSrcweir "can't instantiate OASIS transformer component" );
1414cdf0e10cSrcweir if( xTmpDocHandler.is() )
1415cdf0e10cSrcweir {
1416cdf0e10cSrcweir mxHandler = xTmpDocHandler;
1417cdf0e10cSrcweir mxExtHandler = uno::Reference<xml::sax::XExtendedDocumentHandler>( mxHandler, UNO_QUERY );
1418cdf0e10cSrcweir }
1419cdf0e10cSrcweir }
1420cdf0e10cSrcweir catch( com::sun::star::uno::Exception& )
1421cdf0e10cSrcweir {
1422cdf0e10cSrcweir }
1423cdf0e10cSrcweir }
1424cdf0e10cSrcweir }
1425cdf0e10cSrcweir
1426cdf0e10cSrcweir
1427cdf0e10cSrcweir mxHandler->startDocument();
1428cdf0e10cSrcweir
1429cdf0e10cSrcweir // <?xml version="1.0" encoding="UTF-8"?>
1430cdf0e10cSrcweir // xHandler->processingInstruction( S2U( sXML_xml ), S2U( sXML_xml_pi ) );
1431cdf0e10cSrcweir
1432cdf0e10cSrcweir // <office:document ...>
1433cdf0e10cSrcweir CheckAttrList();
1434cdf0e10cSrcweir
1435cdf0e10cSrcweir // namespace attributes
1436cdf0e10cSrcweir // ( The namespace decls should be first attributes in the element;
1437cdf0e10cSrcweir // some faulty XML parsers (JAXP1.1) have a problem with this,
1438cdf0e10cSrcweir // also it's more elegant )
1439cdf0e10cSrcweir sal_uInt16 nPos = mpNamespaceMap->GetFirstKey();
1440cdf0e10cSrcweir while( USHRT_MAX != nPos )
1441cdf0e10cSrcweir {
1442cdf0e10cSrcweir mpAttrList->AddAttribute( mpNamespaceMap->GetAttrNameByKey( nPos ),
1443cdf0e10cSrcweir mpNamespaceMap->GetNameByKey( nPos ) );
1444cdf0e10cSrcweir nPos = mpNamespaceMap->GetNextKey( nPos );
1445cdf0e10cSrcweir }
1446cdf0e10cSrcweir
1447cdf0e10cSrcweir
1448cdf0e10cSrcweir
1449cdf0e10cSrcweir // office:version = ...
1450cdf0e10cSrcweir if( !mbExtended )
1451cdf0e10cSrcweir {
1452cdf0e10cSrcweir const sal_Char* pVersion = 0;
1453cdf0e10cSrcweir switch( getDefaultVersion() )
1454cdf0e10cSrcweir {
1455cdf0e10cSrcweir case SvtSaveOptions::ODFVER_LATEST: pVersion = sXML_1_2; break;
1456cdf0e10cSrcweir case SvtSaveOptions::ODFVER_012: pVersion = sXML_1_2; break;
1457cdf0e10cSrcweir case SvtSaveOptions::ODFVER_011: pVersion = sXML_1_1; break;
1458cdf0e10cSrcweir case SvtSaveOptions::ODFVER_010: break;
1459cdf0e10cSrcweir
1460cdf0e10cSrcweir default:
1461cdf0e10cSrcweir DBG_ERROR("xmloff::SvXMLExport::exportDoc(), unexpected odf default version!");
1462cdf0e10cSrcweir }
1463cdf0e10cSrcweir
1464cdf0e10cSrcweir if( pVersion )
1465cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_OFFICE, XML_VERSION,
1466cdf0e10cSrcweir OUString::createFromAscii(pVersion) );
1467cdf0e10cSrcweir }
1468cdf0e10cSrcweir
1469cdf0e10cSrcweir {
1470cdf0e10cSrcweir enum XMLTokenEnum eRootService = XML_TOKEN_INVALID;
1471cdf0e10cSrcweir const sal_Int32 nExportMode = mnExportFlags & (EXPORT_META|EXPORT_STYLES|EXPORT_CONTENT|EXPORT_SETTINGS);
1472cdf0e10cSrcweir
1473cdf0e10cSrcweir lcl_AddGrddl(*this, nExportMode);
1474cdf0e10cSrcweir
1475cdf0e10cSrcweir if( EXPORT_META == nExportMode )
1476cdf0e10cSrcweir {
1477cdf0e10cSrcweir // export only meta
1478cdf0e10cSrcweir eRootService = XML_DOCUMENT_META;
1479cdf0e10cSrcweir }
1480cdf0e10cSrcweir else if ( EXPORT_SETTINGS == nExportMode )
1481cdf0e10cSrcweir {
1482cdf0e10cSrcweir // export only settings
1483cdf0e10cSrcweir eRootService = XML_DOCUMENT_SETTINGS;
1484cdf0e10cSrcweir }
1485cdf0e10cSrcweir else if( EXPORT_STYLES == nExportMode )
1486cdf0e10cSrcweir {
1487cdf0e10cSrcweir // export only styles
1488cdf0e10cSrcweir eRootService = XML_DOCUMENT_STYLES;
1489cdf0e10cSrcweir }
1490cdf0e10cSrcweir else if( EXPORT_CONTENT == nExportMode )
1491cdf0e10cSrcweir {
1492cdf0e10cSrcweir // export only content
1493cdf0e10cSrcweir eRootService = XML_DOCUMENT_CONTENT;
1494cdf0e10cSrcweir }
1495cdf0e10cSrcweir else
1496cdf0e10cSrcweir {
1497*10347ccaSmseidel // the good'ol one4all element
1498cdf0e10cSrcweir eRootService = XML_DOCUMENT;
1499cdf0e10cSrcweir // office:mimetype = ... (only for stream containing the content)
1500cdf0e10cSrcweir if( eClass != XML_TOKEN_INVALID )
1501cdf0e10cSrcweir {
1502cdf0e10cSrcweir OUString aTmp( RTL_CONSTASCII_USTRINGPARAM("application/vnd.oasis.opendocument.") );
1503cdf0e10cSrcweir aTmp += GetXMLToken( eClass );
1504cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_OFFICE, XML_MIMETYPE, aTmp );
1505cdf0e10cSrcweir }
1506cdf0e10cSrcweir }
1507cdf0e10cSrcweir
1508cdf0e10cSrcweir // if( (getExportFlags() & EXPORT_NODOCTYPE) == 0 &&
1509cdf0e10cSrcweir // xExtHandler.is() )
1510cdf0e10cSrcweir // {
1511cdf0e10cSrcweir // OUStringBuffer aDocType(
1512cdf0e10cSrcweir // GetXMLToken(XML_XML_DOCTYPE_PREFIX).getLength() +
1513cdf0e10cSrcweir // GetXMLToken(XML_XML_DOCTYPE_SUFFIX).getLength() + 30 );
1514cdf0e10cSrcweir //
1515cdf0e10cSrcweir // aDocType.append( GetXMLToken(XML_XML_DOCTYPE_PREFIX) );
1516cdf0e10cSrcweir // aDocType.append( GetNamespaceMap().GetQNameByKey(
1517cdf0e10cSrcweir // XML_NAMESPACE_OFFICE, GetXMLToken(eRootService) ) );
1518cdf0e10cSrcweir // aDocType.append( GetXMLToken(XML_XML_DOCTYPE_SUFFIX) );
1519cdf0e10cSrcweir // xExtHandler->unknown( aDocType.makeStringAndClear() );
1520cdf0e10cSrcweir // }
1521cdf0e10cSrcweir
1522cdf0e10cSrcweir SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, eRootService, sal_True, sal_True );
1523cdf0e10cSrcweir
1524cdf0e10cSrcweir // meta information
1525cdf0e10cSrcweir if( mnExportFlags & EXPORT_META )
1526cdf0e10cSrcweir ImplExportMeta();
1527cdf0e10cSrcweir
1528cdf0e10cSrcweir // settings
1529cdf0e10cSrcweir if( mnExportFlags & EXPORT_SETTINGS )
1530cdf0e10cSrcweir ImplExportSettings();
1531cdf0e10cSrcweir
1532cdf0e10cSrcweir // scripts
1533cdf0e10cSrcweir if( mnExportFlags & EXPORT_SCRIPTS )
1534cdf0e10cSrcweir _ExportScripts();
1535cdf0e10cSrcweir
1536dcaf07f7SJohn Bampton // font declarations
1537cdf0e10cSrcweir if( mnExportFlags & EXPORT_FONTDECLS )
1538cdf0e10cSrcweir _ExportFontDecls();
1539cdf0e10cSrcweir
1540cdf0e10cSrcweir // styles
1541cdf0e10cSrcweir if( mnExportFlags & EXPORT_STYLES )
1542cdf0e10cSrcweir ImplExportStyles( sal_False );
1543cdf0e10cSrcweir
1544cdf0e10cSrcweir // autostyles
1545cdf0e10cSrcweir if( mnExportFlags & EXPORT_AUTOSTYLES )
1546cdf0e10cSrcweir ImplExportAutoStyles( sal_False );
1547cdf0e10cSrcweir
1548cdf0e10cSrcweir // masterstyles
1549cdf0e10cSrcweir if( mnExportFlags & EXPORT_MASTERSTYLES )
1550cdf0e10cSrcweir ImplExportMasterStyles( sal_False );
1551cdf0e10cSrcweir
1552*10347ccaSmseidel // content
1553cdf0e10cSrcweir if( mnExportFlags & EXPORT_CONTENT )
1554cdf0e10cSrcweir ImplExportContent();
1555cdf0e10cSrcweir }
1556cdf0e10cSrcweir
1557cdf0e10cSrcweir
1558cdf0e10cSrcweir mxHandler->endDocument();
1559cdf0e10cSrcweir
1560cdf0e10cSrcweir if( bOwnGraphicResolver )
1561cdf0e10cSrcweir {
1562cdf0e10cSrcweir Reference< XComponent > xComp( mxGraphicResolver, UNO_QUERY );
1563cdf0e10cSrcweir xComp->dispose();
1564cdf0e10cSrcweir }
1565cdf0e10cSrcweir
1566cdf0e10cSrcweir if( bOwnEmbeddedResolver )
1567cdf0e10cSrcweir {
1568cdf0e10cSrcweir Reference< XComponent > xComp( mxEmbeddedResolver, UNO_QUERY );
1569cdf0e10cSrcweir xComp->dispose();
1570cdf0e10cSrcweir }
1571cdf0e10cSrcweir
1572cdf0e10cSrcweir return 0;
1573cdf0e10cSrcweir }
1574cdf0e10cSrcweir
ResetNamespaceMap()1575cdf0e10cSrcweir void SvXMLExport::ResetNamespaceMap()
1576cdf0e10cSrcweir {
1577cdf0e10cSrcweir delete mpNamespaceMap; mpNamespaceMap = new SvXMLNamespaceMap;
1578cdf0e10cSrcweir }
1579cdf0e10cSrcweir
_ExportMeta()1580cdf0e10cSrcweir void SvXMLExport::_ExportMeta()
1581cdf0e10cSrcweir {
1582cdf0e10cSrcweir OUString generator( ::utl::DocInfoHelper::GetGeneratorString() );
1583cdf0e10cSrcweir Reference< XDocumentPropertiesSupplier > xDocPropsSupplier(mxModel,
1584cdf0e10cSrcweir UNO_QUERY);
1585cdf0e10cSrcweir if (xDocPropsSupplier.is()) {
1586cdf0e10cSrcweir Reference<XDocumentProperties> xDocProps(
1587cdf0e10cSrcweir xDocPropsSupplier->getDocumentProperties());
1588cdf0e10cSrcweir if (!xDocProps.is()) throw;
1589cdf0e10cSrcweir // update generator here
1590cdf0e10cSrcweir xDocProps->setGenerator(generator);
1591cdf0e10cSrcweir SvXMLMetaExport * pMeta = new SvXMLMetaExport(*this, xDocProps);
1592cdf0e10cSrcweir uno::Reference<xml::sax::XDocumentHandler> xMeta(pMeta);
1593cdf0e10cSrcweir pMeta->Export();
1594cdf0e10cSrcweir } else {
1595cdf0e10cSrcweir // office:meta
1596cdf0e10cSrcweir SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, XML_META,
1597cdf0e10cSrcweir sal_True, sal_True );
1598cdf0e10cSrcweir {
1599cdf0e10cSrcweir // BM: #i60323# export generator even if xInfoProp is empty (which is the
1600cdf0e10cSrcweir // case for charts). The generator does not depend on xInfoProp
1601cdf0e10cSrcweir SvXMLElementExport anElem( *this, XML_NAMESPACE_META, XML_GENERATOR,
1602cdf0e10cSrcweir sal_True, sal_True );
1603cdf0e10cSrcweir Characters(generator);
1604cdf0e10cSrcweir }
1605cdf0e10cSrcweir }
1606cdf0e10cSrcweir }
1607cdf0e10cSrcweir
_ExportScripts()1608cdf0e10cSrcweir void SvXMLExport::_ExportScripts()
1609cdf0e10cSrcweir {
1610cdf0e10cSrcweir SvXMLElementExport aElement( *this, XML_NAMESPACE_OFFICE, XML_SCRIPTS, sal_True, sal_True );
1611cdf0e10cSrcweir
1612cdf0e10cSrcweir // export Basic macros (only for FlatXML)
1613cdf0e10cSrcweir if ( mnExportFlags & EXPORT_EMBEDDED )
1614cdf0e10cSrcweir {
1615cdf0e10cSrcweir ::rtl::OUString aValue( GetNamespaceMap().GetPrefixByKey( XML_NAMESPACE_OOO ) );
1616cdf0e10cSrcweir aValue += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ":Basic" ) );
1617cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_SCRIPT, XML_LANGUAGE, aValue );
1618cdf0e10cSrcweir
1619cdf0e10cSrcweir SvXMLElementExport aElem( *this, XML_NAMESPACE_OFFICE, XML_SCRIPT, sal_True, sal_True );
1620cdf0e10cSrcweir
1621cdf0e10cSrcweir // initialize Basic
1622cdf0e10cSrcweir if ( mxModel.is() )
1623cdf0e10cSrcweir {
1624cdf0e10cSrcweir Reference< beans::XPropertySet > xPSet( mxModel, UNO_QUERY );
1625cdf0e10cSrcweir if ( xPSet.is() )
1626cdf0e10cSrcweir xPSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "BasicLibraries" ) ) );
1627cdf0e10cSrcweir }
1628cdf0e10cSrcweir
1629cdf0e10cSrcweir Reference< document::XExporter > xExporter;
1630cdf0e10cSrcweir Reference< lang::XMultiServiceFactory > xMSF( getServiceFactory() );
1631cdf0e10cSrcweir if ( xMSF.is() )
1632cdf0e10cSrcweir {
1633cdf0e10cSrcweir Reference < XDocumentHandler > xHdl( new XMLBasicExportFilter( mxHandler ) );
1634cdf0e10cSrcweir Sequence < Any > aArgs( 1 );
1635cdf0e10cSrcweir aArgs[0] <<= xHdl;
1636cdf0e10cSrcweir xExporter.set( xMSF->createInstanceWithArguments(
1637cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.XMLOasisBasicExporter" ) ), aArgs ),
1638cdf0e10cSrcweir UNO_QUERY );
1639cdf0e10cSrcweir }
1640cdf0e10cSrcweir
1641cdf0e10cSrcweir OSL_ENSURE( xExporter.is(),
1642cdf0e10cSrcweir "SvXMLExport::_ExportScripts: can't instantiate export filter component for Basic macros" );
1643cdf0e10cSrcweir
1644cdf0e10cSrcweir if ( xExporter.is() )
1645cdf0e10cSrcweir {
1646cdf0e10cSrcweir Reference< XComponent > xComp( mxModel, UNO_QUERY );
1647cdf0e10cSrcweir xExporter->setSourceDocument( xComp );
1648cdf0e10cSrcweir Reference< XFilter > xFilter( xExporter, UNO_QUERY );
1649cdf0e10cSrcweir if ( xFilter.is() )
1650cdf0e10cSrcweir {
1651cdf0e10cSrcweir Sequence < PropertyValue > aMediaDesc( 0 );
1652cdf0e10cSrcweir xFilter->filter( aMediaDesc );
1653cdf0e10cSrcweir }
1654cdf0e10cSrcweir }
1655cdf0e10cSrcweir }
1656cdf0e10cSrcweir
1657cdf0e10cSrcweir // export document events
1658cdf0e10cSrcweir Reference< document::XEventsSupplier > xEvents( GetModel(), UNO_QUERY );
1659cdf0e10cSrcweir GetEventExport().Export( xEvents, sal_True );
1660cdf0e10cSrcweir }
1661cdf0e10cSrcweir
_ExportFontDecls()1662cdf0e10cSrcweir void SvXMLExport::_ExportFontDecls()
1663cdf0e10cSrcweir {
1664cdf0e10cSrcweir if( mxFontAutoStylePool.is() )
1665cdf0e10cSrcweir mxFontAutoStylePool->exportXML();
1666cdf0e10cSrcweir }
1667cdf0e10cSrcweir
_ExportStyles(sal_Bool)1668cdf0e10cSrcweir void SvXMLExport::_ExportStyles( sal_Bool )
1669cdf0e10cSrcweir {
1670cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > xFact( GetModel(), uno::UNO_QUERY );
1671cdf0e10cSrcweir if( xFact.is())
1672cdf0e10cSrcweir {
1673cdf0e10cSrcweir // export (fill-)gradient-styles
1674cdf0e10cSrcweir try
1675cdf0e10cSrcweir {
1676cdf0e10cSrcweir uno::Reference< container::XNameAccess > xGradient( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.GradientTable") ) ), uno::UNO_QUERY );
1677cdf0e10cSrcweir if( xGradient.is() )
1678cdf0e10cSrcweir {
1679cdf0e10cSrcweir XMLGradientStyleExport aGradientStyle( *this );
1680cdf0e10cSrcweir
1681cdf0e10cSrcweir if( xGradient->hasElements() )
1682cdf0e10cSrcweir {
1683cdf0e10cSrcweir uno::Sequence< OUString > aNamesSeq ( xGradient->getElementNames() );
1684cdf0e10cSrcweir sal_Int32 nCount = aNamesSeq.getLength();
1685cdf0e10cSrcweir for( sal_Int32 i=0; i<nCount; i++ )
1686cdf0e10cSrcweir {
1687cdf0e10cSrcweir const OUString& rStrName = aNamesSeq[ i ];
1688cdf0e10cSrcweir
1689cdf0e10cSrcweir try
1690cdf0e10cSrcweir {
1691cdf0e10cSrcweir uno::Any aValue = xGradient->getByName( rStrName );
1692cdf0e10cSrcweir
1693cdf0e10cSrcweir aGradientStyle.exportXML( rStrName, aValue );
1694cdf0e10cSrcweir }
1695cdf0e10cSrcweir catch( container::NoSuchElementException& )
1696cdf0e10cSrcweir {}
1697cdf0e10cSrcweir }
1698cdf0e10cSrcweir }
1699cdf0e10cSrcweir }
1700cdf0e10cSrcweir }
1701cdf0e10cSrcweir catch( lang::ServiceNotRegisteredException& )
1702cdf0e10cSrcweir {}
1703cdf0e10cSrcweir
1704cdf0e10cSrcweir // export (fill-)hatch-styles
1705cdf0e10cSrcweir try
1706cdf0e10cSrcweir {
1707cdf0e10cSrcweir uno::Reference< container::XNameAccess > xHatch( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.HatchTable") ) ), uno::UNO_QUERY );
1708cdf0e10cSrcweir if( xHatch.is() )
1709cdf0e10cSrcweir {
1710cdf0e10cSrcweir XMLHatchStyleExport aHatchStyle( *this );
1711cdf0e10cSrcweir
1712cdf0e10cSrcweir if( xHatch->hasElements() )
1713cdf0e10cSrcweir {
1714cdf0e10cSrcweir uno::Sequence< OUString > aNamesSeq ( xHatch->getElementNames() );
1715cdf0e10cSrcweir sal_Int32 nCount = aNamesSeq.getLength();
1716cdf0e10cSrcweir for( sal_Int32 i=0; i<nCount; i++ )
1717cdf0e10cSrcweir {
1718cdf0e10cSrcweir const OUString& rStrName = aNamesSeq[ i ];
1719cdf0e10cSrcweir
1720cdf0e10cSrcweir try
1721cdf0e10cSrcweir {
1722cdf0e10cSrcweir uno::Any aValue = xHatch->getByName( rStrName );
1723cdf0e10cSrcweir
1724cdf0e10cSrcweir aHatchStyle.exportXML( rStrName, aValue );
1725cdf0e10cSrcweir }
1726cdf0e10cSrcweir catch( container::NoSuchElementException& )
1727cdf0e10cSrcweir {}
1728cdf0e10cSrcweir }
1729cdf0e10cSrcweir }
1730cdf0e10cSrcweir }
1731cdf0e10cSrcweir }
1732cdf0e10cSrcweir catch( lang::ServiceNotRegisteredException& )
1733cdf0e10cSrcweir {}
1734cdf0e10cSrcweir
1735cdf0e10cSrcweir // export (fill-)bitmap-styles
1736cdf0e10cSrcweir try
1737cdf0e10cSrcweir {
1738cdf0e10cSrcweir uno::Reference< container::XNameAccess > xBitmap( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.BitmapTable") ) ), uno::UNO_QUERY );
1739cdf0e10cSrcweir if( xBitmap.is() )
1740cdf0e10cSrcweir {
1741cdf0e10cSrcweir XMLImageStyle aImageStyle;
1742cdf0e10cSrcweir
1743cdf0e10cSrcweir if( xBitmap->hasElements() )
1744cdf0e10cSrcweir {
1745cdf0e10cSrcweir uno::Sequence< OUString > aNamesSeq ( xBitmap->getElementNames() );
1746cdf0e10cSrcweir sal_Int32 nCount = aNamesSeq.getLength();
1747cdf0e10cSrcweir for( sal_Int32 i=0; i<nCount; i++ )
1748cdf0e10cSrcweir {
1749cdf0e10cSrcweir const OUString& rStrName = aNamesSeq[ i ];
1750cdf0e10cSrcweir
1751cdf0e10cSrcweir try
1752cdf0e10cSrcweir {
1753cdf0e10cSrcweir uno::Any aValue = xBitmap->getByName( rStrName );
1754cdf0e10cSrcweir
1755cdf0e10cSrcweir aImageStyle.exportXML( rStrName, aValue, *this );
1756cdf0e10cSrcweir }
1757cdf0e10cSrcweir catch( container::NoSuchElementException& )
1758cdf0e10cSrcweir {}
1759cdf0e10cSrcweir }
1760cdf0e10cSrcweir }
1761cdf0e10cSrcweir }
1762cdf0e10cSrcweir }
1763cdf0e10cSrcweir catch( lang::ServiceNotRegisteredException& )
1764cdf0e10cSrcweir {}
1765cdf0e10cSrcweir
1766cdf0e10cSrcweir // export transparency-gradient -styles
1767cdf0e10cSrcweir try
1768cdf0e10cSrcweir {
1769cdf0e10cSrcweir uno::Reference< container::XNameAccess > xTransGradient( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.TransparencyGradientTable") ) ), uno::UNO_QUERY );
1770cdf0e10cSrcweir if( xTransGradient.is() )
1771cdf0e10cSrcweir {
1772cdf0e10cSrcweir XMLTransGradientStyleExport aTransGradientstyle( *this );
1773cdf0e10cSrcweir
1774cdf0e10cSrcweir if( xTransGradient->hasElements() )
1775cdf0e10cSrcweir {
1776cdf0e10cSrcweir uno::Sequence< OUString > aNamesSeq ( xTransGradient->getElementNames() );
1777cdf0e10cSrcweir sal_Int32 nCount = aNamesSeq.getLength();
1778cdf0e10cSrcweir for( sal_Int32 i=0; i<nCount; i++ )
1779cdf0e10cSrcweir {
1780cdf0e10cSrcweir const OUString& rStrName = aNamesSeq[ i ];
1781cdf0e10cSrcweir
1782cdf0e10cSrcweir try
1783cdf0e10cSrcweir {
1784cdf0e10cSrcweir uno::Any aValue = xTransGradient->getByName( rStrName );
1785cdf0e10cSrcweir
1786cdf0e10cSrcweir aTransGradientstyle.exportXML( rStrName, aValue );
1787cdf0e10cSrcweir }
1788cdf0e10cSrcweir catch( container::NoSuchElementException& )
1789cdf0e10cSrcweir {}
1790cdf0e10cSrcweir }
1791cdf0e10cSrcweir }
1792cdf0e10cSrcweir }
1793cdf0e10cSrcweir }
1794cdf0e10cSrcweir catch( lang::ServiceNotRegisteredException& )
1795cdf0e10cSrcweir {}
1796cdf0e10cSrcweir
1797cdf0e10cSrcweir // export marker-styles
1798cdf0e10cSrcweir try
1799cdf0e10cSrcweir {
1800cdf0e10cSrcweir uno::Reference< container::XNameAccess > xMarker( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.MarkerTable") ) ), uno::UNO_QUERY );
1801cdf0e10cSrcweir if( xMarker.is() )
1802cdf0e10cSrcweir {
1803cdf0e10cSrcweir XMLMarkerStyleExport aMarkerStyle( *this );
1804cdf0e10cSrcweir
1805cdf0e10cSrcweir if( xMarker->hasElements() )
1806cdf0e10cSrcweir {
1807cdf0e10cSrcweir uno::Sequence< OUString > aNamesSeq ( xMarker->getElementNames() );
1808cdf0e10cSrcweir sal_Int32 nCount = aNamesSeq.getLength();
1809cdf0e10cSrcweir for( sal_Int32 i=0; i<nCount; i++ )
1810cdf0e10cSrcweir {
1811cdf0e10cSrcweir const OUString& rStrName = aNamesSeq[ i ];
1812cdf0e10cSrcweir
1813cdf0e10cSrcweir try
1814cdf0e10cSrcweir {
1815cdf0e10cSrcweir uno::Any aValue = xMarker->getByName( rStrName );
1816cdf0e10cSrcweir
1817cdf0e10cSrcweir aMarkerStyle.exportXML( rStrName, aValue );
1818cdf0e10cSrcweir }
1819cdf0e10cSrcweir catch( container::NoSuchElementException& )
1820cdf0e10cSrcweir {}
1821cdf0e10cSrcweir }
1822cdf0e10cSrcweir }
1823cdf0e10cSrcweir }
1824cdf0e10cSrcweir }
1825cdf0e10cSrcweir catch( lang::ServiceNotRegisteredException& )
1826cdf0e10cSrcweir {}
1827cdf0e10cSrcweir
1828cdf0e10cSrcweir // export dash-styles
1829cdf0e10cSrcweir try
1830cdf0e10cSrcweir {
1831cdf0e10cSrcweir uno::Reference< container::XNameAccess > xDashes( xFact->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.DashTable") ) ), uno::UNO_QUERY );
1832cdf0e10cSrcweir if( xDashes.is() )
1833cdf0e10cSrcweir {
1834cdf0e10cSrcweir XMLDashStyleExport aDashStyle( *this );
1835cdf0e10cSrcweir
1836cdf0e10cSrcweir if( xDashes->hasElements() )
1837cdf0e10cSrcweir {
1838cdf0e10cSrcweir uno::Sequence< OUString > aNamesSeq ( xDashes->getElementNames() );
1839cdf0e10cSrcweir sal_Int32 nCount = aNamesSeq.getLength();
1840cdf0e10cSrcweir for( sal_Int32 i=0; i<nCount; i++ )
1841cdf0e10cSrcweir {
1842cdf0e10cSrcweir const OUString& rStrName = aNamesSeq[ i ];
1843cdf0e10cSrcweir
1844cdf0e10cSrcweir try
1845cdf0e10cSrcweir {
1846cdf0e10cSrcweir uno::Any aValue = xDashes->getByName( rStrName );
1847cdf0e10cSrcweir
1848cdf0e10cSrcweir aDashStyle.exportXML( rStrName, aValue );
1849cdf0e10cSrcweir }
1850cdf0e10cSrcweir catch( container::NoSuchElementException& )
1851cdf0e10cSrcweir {}
1852cdf0e10cSrcweir }
1853cdf0e10cSrcweir }
1854cdf0e10cSrcweir }
1855cdf0e10cSrcweir }
1856cdf0e10cSrcweir catch( lang::ServiceNotRegisteredException& )
1857cdf0e10cSrcweir {}
1858cdf0e10cSrcweir }
1859cdf0e10cSrcweir }
1860cdf0e10cSrcweir
CreateTextParagraphExport()1861cdf0e10cSrcweir XMLTextParagraphExport* SvXMLExport::CreateTextParagraphExport()
1862cdf0e10cSrcweir {
1863cdf0e10cSrcweir return new XMLTextParagraphExport( *this, *(GetAutoStylePool().get()) );
1864cdf0e10cSrcweir }
1865cdf0e10cSrcweir
CreateShapeExport()1866cdf0e10cSrcweir XMLShapeExport* SvXMLExport::CreateShapeExport()
1867cdf0e10cSrcweir {
1868cdf0e10cSrcweir return new XMLShapeExport(*this);
1869cdf0e10cSrcweir }
1870cdf0e10cSrcweir
CreateAutoStylePool()1871cdf0e10cSrcweir SvXMLAutoStylePoolP* SvXMLExport::CreateAutoStylePool()
1872cdf0e10cSrcweir {
1873cdf0e10cSrcweir return new SvXMLAutoStylePoolP(*this);
1874cdf0e10cSrcweir }
1875cdf0e10cSrcweir
CreatePageExport()1876cdf0e10cSrcweir XMLPageExport* SvXMLExport::CreatePageExport()
1877cdf0e10cSrcweir {
1878cdf0e10cSrcweir return new XMLPageExport( *this );
1879cdf0e10cSrcweir }
1880cdf0e10cSrcweir
CreateChartExport()1881cdf0e10cSrcweir SchXMLExportHelper* SvXMLExport::CreateChartExport()
1882cdf0e10cSrcweir {
1883cdf0e10cSrcweir return new SchXMLExportHelper(*this,*GetAutoStylePool().get());
1884cdf0e10cSrcweir }
1885cdf0e10cSrcweir
CreateFontAutoStylePool()1886cdf0e10cSrcweir XMLFontAutoStylePool* SvXMLExport::CreateFontAutoStylePool()
1887cdf0e10cSrcweir {
1888cdf0e10cSrcweir return new XMLFontAutoStylePool( *this );
1889cdf0e10cSrcweir }
1890cdf0e10cSrcweir
CreateFormExport()1891cdf0e10cSrcweir xmloff::OFormLayerXMLExport* SvXMLExport::CreateFormExport()
1892cdf0e10cSrcweir {
1893cdf0e10cSrcweir return new xmloff::OFormLayerXMLExport(*this);
1894cdf0e10cSrcweir }
1895cdf0e10cSrcweir
GetViewSettingsAndViews(uno::Sequence<beans::PropertyValue> & rProps)1896cdf0e10cSrcweir void SvXMLExport::GetViewSettingsAndViews(uno::Sequence<beans::PropertyValue>& rProps)
1897cdf0e10cSrcweir {
1898cdf0e10cSrcweir GetViewSettings(rProps);
1899cdf0e10cSrcweir uno::Reference<document::XViewDataSupplier> xViewDataSupplier(GetModel(), uno::UNO_QUERY);
1900cdf0e10cSrcweir if(xViewDataSupplier.is())
1901cdf0e10cSrcweir {
1902cdf0e10cSrcweir uno::Reference<container::XIndexAccess> xIndexAccess;
1903cdf0e10cSrcweir xViewDataSupplier->setViewData( xIndexAccess ); // make sure we get a newly created sequence
1904cdf0e10cSrcweir xIndexAccess = xViewDataSupplier->getViewData();
1905cdf0e10cSrcweir sal_Bool bAdd = sal_False;
1906cdf0e10cSrcweir uno::Any aAny;
1907cdf0e10cSrcweir if(xIndexAccess.is() && xIndexAccess->hasElements() )
1908cdf0e10cSrcweir {
1909cdf0e10cSrcweir sal_Int32 nCount = xIndexAccess->getCount();
1910cdf0e10cSrcweir for (sal_Int32 i = 0; i < nCount; i++)
1911cdf0e10cSrcweir {
1912cdf0e10cSrcweir aAny = xIndexAccess->getByIndex(i);
1913cdf0e10cSrcweir uno::Sequence<beans::PropertyValue> aProps;
1914cdf0e10cSrcweir if( aAny >>= aProps )
1915cdf0e10cSrcweir {
1916cdf0e10cSrcweir if( aProps.getLength() > 0 )
1917cdf0e10cSrcweir {
1918cdf0e10cSrcweir bAdd = sal_True;
1919cdf0e10cSrcweir break;
1920cdf0e10cSrcweir }
1921cdf0e10cSrcweir }
1922cdf0e10cSrcweir }
1923cdf0e10cSrcweir }
1924cdf0e10cSrcweir
1925cdf0e10cSrcweir if( bAdd )
1926cdf0e10cSrcweir {
1927cdf0e10cSrcweir sal_Int32 nOldLength(rProps.getLength());
1928cdf0e10cSrcweir rProps.realloc(nOldLength + 1);
1929cdf0e10cSrcweir beans::PropertyValue aProp;
1930cdf0e10cSrcweir aProp.Name = OUString(RTL_CONSTASCII_USTRINGPARAM("Views"));
1931cdf0e10cSrcweir aProp.Value <<= xIndexAccess;
1932cdf0e10cSrcweir rProps[nOldLength] = aProp;
1933cdf0e10cSrcweir }
1934cdf0e10cSrcweir }
1935cdf0e10cSrcweir }
1936cdf0e10cSrcweir
GetViewSettings(uno::Sequence<beans::PropertyValue> &)1937cdf0e10cSrcweir void SvXMLExport::GetViewSettings(uno::Sequence<beans::PropertyValue>&)
1938cdf0e10cSrcweir {
1939cdf0e10cSrcweir }
1940cdf0e10cSrcweir
GetConfigurationSettings(uno::Sequence<beans::PropertyValue> &)1941cdf0e10cSrcweir void SvXMLExport::GetConfigurationSettings(uno::Sequence<beans::PropertyValue>&)
1942cdf0e10cSrcweir {
1943cdf0e10cSrcweir }
1944cdf0e10cSrcweir
GetDocumentSpecificSettings(::std::list<SettingsGroup> & _out_rSettings)1945cdf0e10cSrcweir sal_Int32 SvXMLExport::GetDocumentSpecificSettings( ::std::list< SettingsGroup >& _out_rSettings )
1946cdf0e10cSrcweir {
1947cdf0e10cSrcweir (void)_out_rSettings;
1948cdf0e10cSrcweir return 0;
1949cdf0e10cSrcweir }
1950cdf0e10cSrcweir
addDataStyle(const sal_Int32 nNumberFormat,sal_Bool)1951cdf0e10cSrcweir void SvXMLExport::addDataStyle(const sal_Int32 nNumberFormat, sal_Bool /*bTimeFormat*/ )
1952cdf0e10cSrcweir {
1953cdf0e10cSrcweir if(mpNumExport)
1954cdf0e10cSrcweir mpNumExport->SetUsed(nNumberFormat);
1955cdf0e10cSrcweir }
1956cdf0e10cSrcweir
exportDataStyles()1957cdf0e10cSrcweir void SvXMLExport::exportDataStyles()
1958cdf0e10cSrcweir {
1959cdf0e10cSrcweir if(mpNumExport)
1960cdf0e10cSrcweir mpNumExport->Export(sal_False);
1961cdf0e10cSrcweir }
1962cdf0e10cSrcweir
exportAutoDataStyles()1963cdf0e10cSrcweir void SvXMLExport::exportAutoDataStyles()
1964cdf0e10cSrcweir {
1965cdf0e10cSrcweir if(mpNumExport)
1966cdf0e10cSrcweir mpNumExport->Export(sal_True);
1967cdf0e10cSrcweir
1968cdf0e10cSrcweir if (mxFormExport.is())
1969cdf0e10cSrcweir mxFormExport->exportAutoControlNumberStyles();
1970cdf0e10cSrcweir }
1971cdf0e10cSrcweir
getDataStyleName(const sal_Int32 nNumberFormat,sal_Bool) const1972cdf0e10cSrcweir OUString SvXMLExport::getDataStyleName(const sal_Int32 nNumberFormat, sal_Bool /*bTimeFormat*/ ) const
1973cdf0e10cSrcweir {
1974cdf0e10cSrcweir OUString sTemp;
1975cdf0e10cSrcweir if(mpNumExport)
1976cdf0e10cSrcweir sTemp = mpNumExport->GetStyleName(nNumberFormat);
1977cdf0e10cSrcweir return sTemp;
1978cdf0e10cSrcweir }
1979cdf0e10cSrcweir
exportAnnotationMeta(const uno::Reference<drawing::XShape> &)1980cdf0e10cSrcweir void SvXMLExport::exportAnnotationMeta(const uno::Reference<drawing::XShape>&)
1981cdf0e10cSrcweir {
1982cdf0e10cSrcweir }
1983cdf0e10cSrcweir
dataStyleForceSystemLanguage(sal_Int32 nFormat) const1984cdf0e10cSrcweir sal_Int32 SvXMLExport::dataStyleForceSystemLanguage(sal_Int32 nFormat) const
1985cdf0e10cSrcweir {
1986cdf0e10cSrcweir return ( mpNumExport != NULL )
1987cdf0e10cSrcweir ? mpNumExport->ForceSystemLanguage( nFormat ) : nFormat;
1988cdf0e10cSrcweir }
1989cdf0e10cSrcweir
1990cdf0e10cSrcweir
AddEmbeddedGraphicObject(const OUString & rGraphicObjectURL)1991cdf0e10cSrcweir OUString SvXMLExport::AddEmbeddedGraphicObject( const OUString& rGraphicObjectURL )
1992cdf0e10cSrcweir {
1993cdf0e10cSrcweir OUString sRet( rGraphicObjectURL );
1994cdf0e10cSrcweir if( 0 == rGraphicObjectURL.compareTo( msGraphicObjectProtocol,
1995cdf0e10cSrcweir msGraphicObjectProtocol.getLength() ) &&
1996cdf0e10cSrcweir mxGraphicResolver.is() )
1997cdf0e10cSrcweir {
1998cdf0e10cSrcweir if( (getExportFlags() & EXPORT_EMBEDDED) == 0 )
1999cdf0e10cSrcweir sRet = mxGraphicResolver->resolveGraphicObjectURL( rGraphicObjectURL );
2000cdf0e10cSrcweir else
2001cdf0e10cSrcweir sRet = OUString();
2002cdf0e10cSrcweir }
2003cdf0e10cSrcweir else
2004cdf0e10cSrcweir sRet = GetRelativeReference( sRet );
2005cdf0e10cSrcweir
2006cdf0e10cSrcweir return sRet;
2007cdf0e10cSrcweir }
2008cdf0e10cSrcweir
AddEmbeddedGraphicObjectAsBase64(const OUString & rGraphicObjectURL)2009cdf0e10cSrcweir sal_Bool SvXMLExport::AddEmbeddedGraphicObjectAsBase64( const OUString& rGraphicObjectURL )
2010cdf0e10cSrcweir {
2011cdf0e10cSrcweir sal_Bool bRet = sal_False;
2012cdf0e10cSrcweir
2013cdf0e10cSrcweir if( (getExportFlags() & EXPORT_EMBEDDED) != 0 &&
2014cdf0e10cSrcweir 0 == rGraphicObjectURL.compareTo( msGraphicObjectProtocol,
2015cdf0e10cSrcweir msGraphicObjectProtocol.getLength() ) &&
2016cdf0e10cSrcweir mxGraphicResolver.is() )
2017cdf0e10cSrcweir {
2018cdf0e10cSrcweir Reference< XBinaryStreamResolver > xStmResolver( mxGraphicResolver, UNO_QUERY );
2019cdf0e10cSrcweir
2020cdf0e10cSrcweir if( xStmResolver.is() )
2021cdf0e10cSrcweir {
2022cdf0e10cSrcweir Reference< XInputStream > xIn( xStmResolver->getInputStream( rGraphicObjectURL ) );
2023cdf0e10cSrcweir
2024cdf0e10cSrcweir if( xIn.is() )
2025cdf0e10cSrcweir {
2026cdf0e10cSrcweir XMLBase64Export aBase64Exp( *this );
2027cdf0e10cSrcweir bRet = aBase64Exp.exportOfficeBinaryDataElement( xIn );
2028cdf0e10cSrcweir }
2029cdf0e10cSrcweir }
2030cdf0e10cSrcweir }
2031cdf0e10cSrcweir
2032cdf0e10cSrcweir return bRet;
2033cdf0e10cSrcweir }
2034cdf0e10cSrcweir
AddEmbeddedObject(const OUString & rEmbeddedObjectURL)2035cdf0e10cSrcweir OUString SvXMLExport::AddEmbeddedObject( const OUString& rEmbeddedObjectURL )
2036cdf0e10cSrcweir {
2037cdf0e10cSrcweir OUString sRet;
2038cdf0e10cSrcweir if( (0 == rEmbeddedObjectURL.compareTo( msEmbeddedObjectProtocol,
2039cdf0e10cSrcweir msEmbeddedObjectProtocol.getLength() ) ||
2040cdf0e10cSrcweir 0 == rEmbeddedObjectURL.compareTo( msGraphicObjectProtocol,
2041cdf0e10cSrcweir msGraphicObjectProtocol.getLength() ) ) &&
2042cdf0e10cSrcweir mxEmbeddedResolver.is() )
2043cdf0e10cSrcweir {
2044cdf0e10cSrcweir sRet =
2045cdf0e10cSrcweir mxEmbeddedResolver->resolveEmbeddedObjectURL( rEmbeddedObjectURL );
2046cdf0e10cSrcweir }
2047cdf0e10cSrcweir else
2048cdf0e10cSrcweir sRet = GetRelativeReference( rEmbeddedObjectURL );
2049cdf0e10cSrcweir
2050cdf0e10cSrcweir return sRet;
2051cdf0e10cSrcweir }
2052cdf0e10cSrcweir
AddEmbeddedObjectAsBase64(const OUString & rEmbeddedObjectURL)2053cdf0e10cSrcweir sal_Bool SvXMLExport::AddEmbeddedObjectAsBase64( const OUString& rEmbeddedObjectURL )
2054cdf0e10cSrcweir {
2055cdf0e10cSrcweir sal_Bool bRet = sal_False;
2056cdf0e10cSrcweir if( (0 == rEmbeddedObjectURL.compareTo( msEmbeddedObjectProtocol,
2057cdf0e10cSrcweir msEmbeddedObjectProtocol.getLength() ) ||
2058cdf0e10cSrcweir 0 == rEmbeddedObjectURL.compareTo( msGraphicObjectProtocol,
2059cdf0e10cSrcweir msGraphicObjectProtocol.getLength() ) ) &&
2060cdf0e10cSrcweir mxEmbeddedResolver.is() )
2061cdf0e10cSrcweir {
2062cdf0e10cSrcweir Reference < XNameAccess > xNA( mxEmbeddedResolver, UNO_QUERY );
2063cdf0e10cSrcweir if( xNA.is() )
2064cdf0e10cSrcweir {
2065cdf0e10cSrcweir Any aAny = xNA->getByName( rEmbeddedObjectURL );
2066cdf0e10cSrcweir Reference < XInputStream > xIn;
2067cdf0e10cSrcweir aAny >>= xIn;
2068cdf0e10cSrcweir if( xIn.is() )
2069cdf0e10cSrcweir {
2070cdf0e10cSrcweir XMLBase64Export aBase64Exp( *this );
2071cdf0e10cSrcweir bRet = aBase64Exp.exportOfficeBinaryDataElement( xIn );
2072cdf0e10cSrcweir }
2073cdf0e10cSrcweir }
2074cdf0e10cSrcweir }
2075cdf0e10cSrcweir
2076cdf0e10cSrcweir return bRet;
2077cdf0e10cSrcweir }
2078cdf0e10cSrcweir
EncodeStyleName(const OUString & rName,sal_Bool * pEncoded) const2079cdf0e10cSrcweir OUString SvXMLExport::EncodeStyleName(
2080cdf0e10cSrcweir const OUString& rName,
2081cdf0e10cSrcweir sal_Bool *pEncoded ) const
2082cdf0e10cSrcweir {
2083cdf0e10cSrcweir return GetMM100UnitConverter().encodeStyleName( rName, pEncoded );
2084cdf0e10cSrcweir }
2085cdf0e10cSrcweir
GetProgressBarHelper()2086cdf0e10cSrcweir ProgressBarHelper* SvXMLExport::GetProgressBarHelper()
2087cdf0e10cSrcweir {
2088cdf0e10cSrcweir if (!mpProgressBarHelper)
2089cdf0e10cSrcweir {
2090cdf0e10cSrcweir mpProgressBarHelper = new ProgressBarHelper(mxStatusIndicator, sal_True);
2091cdf0e10cSrcweir
2092cdf0e10cSrcweir if (mxExportInfo.is())
2093cdf0e10cSrcweir {
2094cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = mxExportInfo->getPropertySetInfo();
2095cdf0e10cSrcweir if (xPropertySetInfo.is())
2096cdf0e10cSrcweir {
2097cdf0e10cSrcweir OUString sProgressRange(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSRANGE));
2098cdf0e10cSrcweir OUString sProgressMax(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSMAX));
2099cdf0e10cSrcweir OUString sProgressCurrent(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSCURRENT));
2100cdf0e10cSrcweir OUString sRepeat(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSREPEAT));
2101cdf0e10cSrcweir if (xPropertySetInfo->hasPropertyByName(sProgressMax) &&
2102cdf0e10cSrcweir xPropertySetInfo->hasPropertyByName(sProgressCurrent) &&
2103cdf0e10cSrcweir xPropertySetInfo->hasPropertyByName(sProgressRange))
2104cdf0e10cSrcweir {
2105cdf0e10cSrcweir uno::Any aAny;
2106cdf0e10cSrcweir sal_Int32 nProgressMax(0);
2107cdf0e10cSrcweir sal_Int32 nProgressCurrent(0);
2108cdf0e10cSrcweir sal_Int32 nProgressRange(0);
2109cdf0e10cSrcweir aAny = mxExportInfo->getPropertyValue(sProgressRange);
2110cdf0e10cSrcweir if (aAny >>= nProgressRange)
2111cdf0e10cSrcweir mpProgressBarHelper->SetRange(nProgressRange);
2112cdf0e10cSrcweir aAny = mxExportInfo->getPropertyValue(sProgressMax);
2113cdf0e10cSrcweir if (aAny >>= nProgressMax)
2114cdf0e10cSrcweir mpProgressBarHelper->SetReference(nProgressMax);
2115cdf0e10cSrcweir aAny = mxExportInfo->getPropertyValue(sProgressCurrent);
2116cdf0e10cSrcweir if (aAny >>= nProgressCurrent)
2117cdf0e10cSrcweir mpProgressBarHelper->SetValue(nProgressCurrent);
2118cdf0e10cSrcweir }
2119cdf0e10cSrcweir if (xPropertySetInfo->hasPropertyByName(sRepeat))
2120cdf0e10cSrcweir {
2121cdf0e10cSrcweir uno::Any aAny = mxExportInfo->getPropertyValue(sRepeat);
2122cdf0e10cSrcweir if (aAny.getValueType() == getBooleanCppuType())
2123cdf0e10cSrcweir mpProgressBarHelper->SetRepeat(::cppu::any2bool(aAny));
2124cdf0e10cSrcweir else {
2125cdf0e10cSrcweir DBG_ERRORFILE("why is it no boolean?");
2126cdf0e10cSrcweir }
2127cdf0e10cSrcweir }
2128cdf0e10cSrcweir }
2129cdf0e10cSrcweir }
2130cdf0e10cSrcweir }
2131cdf0e10cSrcweir return mpProgressBarHelper;
2132cdf0e10cSrcweir }
2133cdf0e10cSrcweir
GetEventExport()2134cdf0e10cSrcweir XMLEventExport& SvXMLExport::GetEventExport()
2135cdf0e10cSrcweir {
2136cdf0e10cSrcweir if( NULL == mpEventExport)
2137cdf0e10cSrcweir {
2138cdf0e10cSrcweir // create EventExport on demand
2139cdf0e10cSrcweir mpEventExport = new XMLEventExport(*this, NULL);
2140cdf0e10cSrcweir
2141cdf0e10cSrcweir // and register standard handlers + names
2142cdf0e10cSrcweir OUString sStarBasic(RTL_CONSTASCII_USTRINGPARAM("StarBasic"));
2143cdf0e10cSrcweir mpEventExport->AddHandler(sStarBasic, new XMLStarBasicExportHandler());
2144cdf0e10cSrcweir OUString sScript(RTL_CONSTASCII_USTRINGPARAM("Script"));
2145cdf0e10cSrcweir mpEventExport->AddHandler(sScript, new XMLScriptExportHandler());
2146cdf0e10cSrcweir mpEventExport->AddTranslationTable(aStandardEventTable);
2147cdf0e10cSrcweir }
2148cdf0e10cSrcweir
2149cdf0e10cSrcweir return *mpEventExport;
2150cdf0e10cSrcweir }
2151cdf0e10cSrcweir
GetImageMapExport()2152cdf0e10cSrcweir XMLImageMapExport& SvXMLExport::GetImageMapExport()
2153cdf0e10cSrcweir {
2154cdf0e10cSrcweir // image map export, create on-demand
2155cdf0e10cSrcweir if( NULL == mpImageMapExport )
2156cdf0e10cSrcweir {
2157cdf0e10cSrcweir mpImageMapExport = new XMLImageMapExport(*this);
2158cdf0e10cSrcweir }
2159cdf0e10cSrcweir
2160cdf0e10cSrcweir return *mpImageMapExport;
2161cdf0e10cSrcweir }
2162cdf0e10cSrcweir
2163cdf0e10cSrcweir // XUnoTunnel & co
getUnoTunnelId()2164cdf0e10cSrcweir const uno::Sequence< sal_Int8 > & SvXMLExport::getUnoTunnelId() throw()
2165cdf0e10cSrcweir {
2166cdf0e10cSrcweir static uno::Sequence< sal_Int8 > * pSeq = 0;
2167cdf0e10cSrcweir if( !pSeq )
2168cdf0e10cSrcweir {
2169cdf0e10cSrcweir Guard< Mutex > aGuard( Mutex::getGlobalMutex() );
2170cdf0e10cSrcweir if( !pSeq )
2171cdf0e10cSrcweir {
2172cdf0e10cSrcweir static uno::Sequence< sal_Int8 > aSeq( 16 );
2173cdf0e10cSrcweir rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
2174cdf0e10cSrcweir pSeq = &aSeq;
2175cdf0e10cSrcweir }
2176cdf0e10cSrcweir }
2177cdf0e10cSrcweir return *pSeq;
2178cdf0e10cSrcweir }
2179cdf0e10cSrcweir
getImplementation(uno::Reference<uno::XInterface> xInt)2180cdf0e10cSrcweir SvXMLExport* SvXMLExport::getImplementation( uno::Reference< uno::XInterface > xInt ) throw()
2181cdf0e10cSrcweir {
2182cdf0e10cSrcweir uno::Reference< lang::XUnoTunnel > xUT( xInt, uno::UNO_QUERY );
2183cdf0e10cSrcweir if( xUT.is() )
2184cdf0e10cSrcweir {
2185cdf0e10cSrcweir return
2186cdf0e10cSrcweir reinterpret_cast<SvXMLExport*>(
2187cdf0e10cSrcweir sal::static_int_cast<sal_IntPtr>(
2188cdf0e10cSrcweir xUT->getSomething( SvXMLExport::getUnoTunnelId())));
2189cdf0e10cSrcweir }
2190cdf0e10cSrcweir else
2191cdf0e10cSrcweir return NULL;
2192cdf0e10cSrcweir }
2193cdf0e10cSrcweir
2194cdf0e10cSrcweir // XUnoTunnel
getSomething(const uno::Sequence<sal_Int8> & rId)2195cdf0e10cSrcweir sal_Int64 SAL_CALL SvXMLExport::getSomething( const uno::Sequence< sal_Int8 >& rId )
2196cdf0e10cSrcweir throw( uno::RuntimeException )
2197cdf0e10cSrcweir {
2198cdf0e10cSrcweir if( rId.getLength() == 16 && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
2199cdf0e10cSrcweir rId.getConstArray(), 16 ) )
2200cdf0e10cSrcweir {
2201cdf0e10cSrcweir return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_uIntPtr>(this));
2202cdf0e10cSrcweir }
2203cdf0e10cSrcweir return 0;
2204cdf0e10cSrcweir }
2205cdf0e10cSrcweir
ExportEmbeddedOwnObject(Reference<XComponent> & rComp)2206cdf0e10cSrcweir sal_Bool SvXMLExport::ExportEmbeddedOwnObject( Reference< XComponent >& rComp )
2207cdf0e10cSrcweir {
2208cdf0e10cSrcweir OUString sFilterService;
2209cdf0e10cSrcweir bool bIsChart = false;
2210cdf0e10cSrcweir
2211cdf0e10cSrcweir Reference < lang::XServiceInfo > xServiceInfo( rComp, UNO_QUERY );
2212cdf0e10cSrcweir if( xServiceInfo.is() )
2213cdf0e10cSrcweir {
2214cdf0e10cSrcweir const XMLServiceMapEntry_Impl *pEntry = aServiceMap;
2215cdf0e10cSrcweir while( pEntry->sModelService )
2216cdf0e10cSrcweir {
2217cdf0e10cSrcweir OUString sModelService( pEntry->sModelService,
2218cdf0e10cSrcweir pEntry->nModelServiceLen,
2219cdf0e10cSrcweir RTL_TEXTENCODING_ASCII_US );
2220cdf0e10cSrcweir if( xServiceInfo->supportsService( sModelService ) )
2221cdf0e10cSrcweir {
2222cdf0e10cSrcweir sFilterService = OUString( pEntry->sFilterService,
2223cdf0e10cSrcweir pEntry->nFilterServiceLen,
2224cdf0e10cSrcweir RTL_TEXTENCODING_ASCII_US );
2225cdf0e10cSrcweir bIsChart = sModelService.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( XML_MODEL_SERVICE_CHART ));
2226cdf0e10cSrcweir break;
2227cdf0e10cSrcweir }
2228cdf0e10cSrcweir pEntry++;
2229cdf0e10cSrcweir }
2230cdf0e10cSrcweir }
2231cdf0e10cSrcweir
2232cdf0e10cSrcweir OSL_ENSURE( sFilterService.getLength(), "no export filter for own object" );
2233cdf0e10cSrcweir
2234cdf0e10cSrcweir if( !sFilterService.getLength() )
2235cdf0e10cSrcweir return sal_False;
2236cdf0e10cSrcweir
2237cdf0e10cSrcweir Reference < XDocumentHandler > xHdl =
2238cdf0e10cSrcweir new XMLEmbeddedObjectExportFilter( mxHandler );
2239cdf0e10cSrcweir
2240cdf0e10cSrcweir Sequence < Any > aArgs( 1 );
2241cdf0e10cSrcweir // #144135# the filters for embedded objects in flat format are always
2242cdf0e10cSrcweir // instantiated as Oasis filters and transformed afterwards. Therefore, all
2243cdf0e10cSrcweir // special handling that is done if the exportFlags do not contain
2244cdf0e10cSrcweir // EXPORT_OASIS must be changed to properties being passed in the info
2245cdf0e10cSrcweir // propertyset
2246cdf0e10cSrcweir
2247cdf0e10cSrcweir if( ! (getExportFlags() & EXPORT_OASIS) &&
2248cdf0e10cSrcweir bIsChart )
2249cdf0e10cSrcweir {
2250cdf0e10cSrcweir static ::comphelper::PropertyMapEntry aInfoMap[] =
2251cdf0e10cSrcweir {
2252cdf0e10cSrcweir { RTL_CONSTASCII_STRINGPARAM("ExportTableNumberList"), 0, &::getBooleanCppuType(), PropertyAttribute::MAYBEVOID, 0},
2253cdf0e10cSrcweir { NULL, 0, 0, NULL, 0, 0 }
2254cdf0e10cSrcweir };
2255cdf0e10cSrcweir Reference< XPropertySet > xInfoProp(
2256cdf0e10cSrcweir ::comphelper::GenericPropertySet_CreateInstance(
2257cdf0e10cSrcweir new ::comphelper::PropertySetInfo( aInfoMap )));
2258cdf0e10cSrcweir
2259cdf0e10cSrcweir if( bIsChart )
2260cdf0e10cSrcweir xInfoProp->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("ExportTableNumberList")), makeAny( true ));
2261cdf0e10cSrcweir
2262cdf0e10cSrcweir aArgs.realloc( 2 );
2263cdf0e10cSrcweir aArgs[1] <<= xInfoProp;
2264cdf0e10cSrcweir }
2265cdf0e10cSrcweir aArgs[0] <<= xHdl;
2266cdf0e10cSrcweir
2267cdf0e10cSrcweir // #110680#
2268cdf0e10cSrcweir // Reference< lang::XMultiServiceFactory > xServiceFactory = comphelper::getProcessServiceFactory();
2269cdf0e10cSrcweir Reference< lang::XMultiServiceFactory > xServiceFactory = getServiceFactory();
2270cdf0e10cSrcweir
2271cdf0e10cSrcweir Reference< document::XExporter > xExporter(
2272cdf0e10cSrcweir xServiceFactory->createInstanceWithArguments( sFilterService, aArgs),
2273cdf0e10cSrcweir UNO_QUERY);
2274cdf0e10cSrcweir OSL_ENSURE( xExporter.is(),
2275cdf0e10cSrcweir "can't instantiate export filter component for own object" );
2276cdf0e10cSrcweir if( !xExporter.is() )
2277cdf0e10cSrcweir return sal_False;
2278cdf0e10cSrcweir
2279cdf0e10cSrcweir xExporter->setSourceDocument( rComp );
2280cdf0e10cSrcweir
2281cdf0e10cSrcweir Reference<XFilter> xFilter( xExporter, UNO_QUERY );
2282cdf0e10cSrcweir
2283cdf0e10cSrcweir Sequence < PropertyValue > aMediaDesc( 0 );
2284cdf0e10cSrcweir return xFilter->filter( aMediaDesc );
2285cdf0e10cSrcweir }
2286cdf0e10cSrcweir
GetRelativeReference(const OUString & rValue)2287cdf0e10cSrcweir OUString SvXMLExport::GetRelativeReference(const OUString& rValue)
2288cdf0e10cSrcweir {
2289cdf0e10cSrcweir OUString sValue( rValue );
2290cdf0e10cSrcweir // #i65474# handling of fragment URLs ("#....") is undefined
2291cdf0e10cSrcweir // they are stored 'as is'
2292cdf0e10cSrcweir uno::Reference< uri::XUriReference > xUriRef;
2293cdf0e10cSrcweir if(sValue.getLength() && sValue.getStr()[0] != '#')
2294cdf0e10cSrcweir {
2295cdf0e10cSrcweir try
2296cdf0e10cSrcweir {
2297cdf0e10cSrcweir xUriRef = mpImpl->mxUriReferenceFactory->parse( rValue );
2298cdf0e10cSrcweir if( xUriRef.is() && !xUriRef->isAbsolute() )
2299cdf0e10cSrcweir {
2300cdf0e10cSrcweir //#i61943# relative URLs need special handling
2301cdf0e10cSrcweir INetURLObject aTemp( mpImpl->msPackageURI );
2302cdf0e10cSrcweir bool bWasAbsolute = false;
2303cdf0e10cSrcweir sValue = aTemp.smartRel2Abs(sValue, bWasAbsolute ).GetMainURL(INetURLObject::DECODE_TO_IURI);
2304cdf0e10cSrcweir }
2305cdf0e10cSrcweir }
2306cdf0e10cSrcweir catch( uno::Exception& )
2307cdf0e10cSrcweir {
2308cdf0e10cSrcweir }
2309cdf0e10cSrcweir }
2310cdf0e10cSrcweir OUString sRet = sValue;
2311cdf0e10cSrcweir if( xUriRef.is() )//no conversion for empty values or for fragments
2312cdf0e10cSrcweir {
2313cdf0e10cSrcweir //conversion for matching schemes only
2314cdf0e10cSrcweir if( xUriRef->getScheme() == mpImpl->msPackageURIScheme )
2315cdf0e10cSrcweir {
2316cdf0e10cSrcweir sValue = INetURLObject::GetRelURL( msOrigFileName, sValue,
2317cdf0e10cSrcweir INetURLObject::WAS_ENCODED, INetURLObject::DECODE_TO_IURI, RTL_TEXTENCODING_UTF8, INetURLObject::FSYS_DETECT);
2318cdf0e10cSrcweir }
2319cdf0e10cSrcweir }
2320cdf0e10cSrcweir return sValue;
2321cdf0e10cSrcweir }
2322cdf0e10cSrcweir
StartElement(sal_uInt16 nPrefix,enum::xmloff::token::XMLTokenEnum eName,sal_Bool bIgnWSOutside)2323cdf0e10cSrcweir void SvXMLExport::StartElement(sal_uInt16 nPrefix,
2324cdf0e10cSrcweir enum ::xmloff::token::XMLTokenEnum eName,
2325cdf0e10cSrcweir sal_Bool bIgnWSOutside )
2326cdf0e10cSrcweir {
2327cdf0e10cSrcweir StartElement(_GetNamespaceMap().GetQNameByKey( nPrefix,
2328cdf0e10cSrcweir GetXMLToken(eName) ), bIgnWSOutside);
2329cdf0e10cSrcweir }
2330cdf0e10cSrcweir
StartElement(const OUString & rName,sal_Bool bIgnWSOutside)2331cdf0e10cSrcweir void SvXMLExport::StartElement(const OUString& rName,
2332cdf0e10cSrcweir sal_Bool bIgnWSOutside )
2333cdf0e10cSrcweir {
2334cdf0e10cSrcweir if ((mnErrorFlags & ERROR_DO_NOTHING) != ERROR_DO_NOTHING)
2335cdf0e10cSrcweir {
2336cdf0e10cSrcweir try
2337cdf0e10cSrcweir {
2338cdf0e10cSrcweir if( bIgnWSOutside && ((mnExportFlags & EXPORT_PRETTY) == EXPORT_PRETTY))
2339cdf0e10cSrcweir mxHandler->ignorableWhitespace( msWS );
2340cdf0e10cSrcweir mxHandler->startElement( rName, GetXAttrList() );
2341cdf0e10cSrcweir }
2342cdf0e10cSrcweir catch ( SAXInvalidCharacterException& e )
2343cdf0e10cSrcweir {
2344cdf0e10cSrcweir Sequence<OUString> aPars(1);
2345cdf0e10cSrcweir aPars[0] = rName;
2346cdf0e10cSrcweir SetError( XMLERROR_SAX|XMLERROR_FLAG_WARNING, aPars, e.Message, NULL );
2347cdf0e10cSrcweir }
2348cdf0e10cSrcweir catch ( SAXException& e )
2349cdf0e10cSrcweir {
2350cdf0e10cSrcweir Sequence<OUString> aPars(1);
2351cdf0e10cSrcweir aPars[0] = rName;
2352cdf0e10cSrcweir SetError( XMLERROR_SAX|XMLERROR_FLAG_ERROR|XMLERROR_FLAG_SEVERE,
2353cdf0e10cSrcweir aPars, e.Message, NULL );
2354cdf0e10cSrcweir }
2355cdf0e10cSrcweir }
2356cdf0e10cSrcweir ClearAttrList();
2357cdf0e10cSrcweir ++mpImpl->mDepth; // increment nesting depth counter
2358cdf0e10cSrcweir }
2359cdf0e10cSrcweir
Characters(const::rtl::OUString & rChars)2360cdf0e10cSrcweir void SvXMLExport::Characters(const ::rtl::OUString& rChars)
2361cdf0e10cSrcweir {
2362cdf0e10cSrcweir if ((mnErrorFlags & ERROR_DO_NOTHING) != ERROR_DO_NOTHING)
2363cdf0e10cSrcweir {
2364cdf0e10cSrcweir try
2365cdf0e10cSrcweir {
2366cdf0e10cSrcweir mxHandler->characters(rChars);
2367cdf0e10cSrcweir }
2368cdf0e10cSrcweir catch ( SAXInvalidCharacterException& e )
2369cdf0e10cSrcweir {
2370cdf0e10cSrcweir Sequence<OUString> aPars(1);
2371cdf0e10cSrcweir aPars[0] = rChars;
2372cdf0e10cSrcweir SetError( XMLERROR_SAX|XMLERROR_FLAG_WARNING, aPars, e.Message, NULL );
2373cdf0e10cSrcweir }
2374cdf0e10cSrcweir catch ( SAXException& e )
2375cdf0e10cSrcweir {
2376cdf0e10cSrcweir Sequence<OUString> aPars(1);
2377cdf0e10cSrcweir aPars[0] = rChars;
2378cdf0e10cSrcweir SetError( XMLERROR_SAX|XMLERROR_FLAG_ERROR|XMLERROR_FLAG_SEVERE,
2379cdf0e10cSrcweir aPars, e.Message, NULL );
2380cdf0e10cSrcweir }
2381cdf0e10cSrcweir }
2382cdf0e10cSrcweir }
2383cdf0e10cSrcweir
EndElement(sal_uInt16 nPrefix,enum::xmloff::token::XMLTokenEnum eName,sal_Bool bIgnWSInside)2384cdf0e10cSrcweir void SvXMLExport::EndElement(sal_uInt16 nPrefix,
2385cdf0e10cSrcweir enum ::xmloff::token::XMLTokenEnum eName,
2386cdf0e10cSrcweir sal_Bool bIgnWSInside )
2387cdf0e10cSrcweir {
2388cdf0e10cSrcweir EndElement(_GetNamespaceMap().GetQNameByKey( nPrefix, GetXMLToken(eName) ),
2389cdf0e10cSrcweir bIgnWSInside);
2390cdf0e10cSrcweir }
2391cdf0e10cSrcweir
EndElement(const OUString & rName,sal_Bool bIgnWSInside)2392cdf0e10cSrcweir void SvXMLExport::EndElement(const OUString& rName,
2393cdf0e10cSrcweir sal_Bool bIgnWSInside )
2394cdf0e10cSrcweir {
2395cdf0e10cSrcweir // decrement nesting depth counter & (maybe) restore namespace map
2396cdf0e10cSrcweir --mpImpl->mDepth;
2397cdf0e10cSrcweir if (!mpImpl->mNamespaceMaps.empty() &&
2398cdf0e10cSrcweir (mpImpl->mNamespaceMaps.top().second == mpImpl->mDepth))
2399cdf0e10cSrcweir {
2400cdf0e10cSrcweir delete mpNamespaceMap;
2401cdf0e10cSrcweir mpNamespaceMap = mpImpl->mNamespaceMaps.top().first;
2402cdf0e10cSrcweir mpImpl->mNamespaceMaps.pop();
2403cdf0e10cSrcweir }
2404cdf0e10cSrcweir OSL_ENSURE(mpImpl->mNamespaceMaps.empty() ||
2405cdf0e10cSrcweir (mpImpl->mNamespaceMaps.top().second < mpImpl->mDepth),
2406cdf0e10cSrcweir "SvXMLExport: NamespaceMaps corrupted");
2407cdf0e10cSrcweir
2408cdf0e10cSrcweir if ((mnErrorFlags & ERROR_DO_NOTHING) != ERROR_DO_NOTHING)
2409cdf0e10cSrcweir {
2410cdf0e10cSrcweir try
2411cdf0e10cSrcweir {
2412cdf0e10cSrcweir if( bIgnWSInside && ((mnExportFlags & EXPORT_PRETTY) == EXPORT_PRETTY))
2413cdf0e10cSrcweir mxHandler->ignorableWhitespace( msWS );
2414cdf0e10cSrcweir mxHandler->endElement( rName );
2415cdf0e10cSrcweir }
2416cdf0e10cSrcweir catch ( SAXException& e )
2417cdf0e10cSrcweir {
2418cdf0e10cSrcweir Sequence<OUString> aPars(1);
2419cdf0e10cSrcweir aPars[0] = rName;
2420cdf0e10cSrcweir SetError( XMLERROR_SAX|XMLERROR_FLAG_ERROR|XMLERROR_FLAG_SEVERE,
2421cdf0e10cSrcweir aPars, e.Message, NULL );
2422cdf0e10cSrcweir }
2423cdf0e10cSrcweir }
2424cdf0e10cSrcweir }
2425cdf0e10cSrcweir
IgnorableWhitespace()2426cdf0e10cSrcweir void SvXMLExport::IgnorableWhitespace()
2427cdf0e10cSrcweir {
2428cdf0e10cSrcweir if ((mnExportFlags & EXPORT_PRETTY) != EXPORT_PRETTY)
2429cdf0e10cSrcweir return;
2430cdf0e10cSrcweir
2431cdf0e10cSrcweir if ((mnErrorFlags & ERROR_DO_NOTHING) != ERROR_DO_NOTHING)
2432cdf0e10cSrcweir {
2433cdf0e10cSrcweir try
2434cdf0e10cSrcweir {
2435cdf0e10cSrcweir mxHandler->ignorableWhitespace( msWS );
2436cdf0e10cSrcweir }
2437cdf0e10cSrcweir catch ( SAXException& e )
2438cdf0e10cSrcweir {
2439cdf0e10cSrcweir Sequence<OUString> aPars(0);
2440cdf0e10cSrcweir SetError( XMLERROR_SAX|XMLERROR_FLAG_ERROR|XMLERROR_FLAG_SEVERE,
2441cdf0e10cSrcweir aPars, e.Message, NULL );
2442cdf0e10cSrcweir }
2443cdf0e10cSrcweir }
2444cdf0e10cSrcweir }
2445cdf0e10cSrcweir
2446cdf0e10cSrcweir
SetError(sal_Int32 nId,const Sequence<OUString> & rMsgParams,const OUString & rExceptionMessage,const Reference<XLocator> & rLocator)2447cdf0e10cSrcweir void SvXMLExport::SetError(
2448cdf0e10cSrcweir sal_Int32 nId,
2449cdf0e10cSrcweir const Sequence<OUString>& rMsgParams,
2450cdf0e10cSrcweir const OUString& rExceptionMessage,
2451cdf0e10cSrcweir const Reference<XLocator>& rLocator )
2452cdf0e10cSrcweir {
2453cdf0e10cSrcweir // allow multi-threaded access to the cancel() method
2454cdf0e10cSrcweir static ::vos::OMutex aMutex;
2455cdf0e10cSrcweir ::vos::OGuard aGuard(aMutex);
2456cdf0e10cSrcweir
2457cdf0e10cSrcweir // maintain error flags
2458cdf0e10cSrcweir if ( ( nId & XMLERROR_FLAG_ERROR ) != 0 )
2459cdf0e10cSrcweir mnErrorFlags |= ERROR_ERROR_OCCURED;
2460cdf0e10cSrcweir if ( ( nId & XMLERROR_FLAG_WARNING ) != 0 )
2461cdf0e10cSrcweir mnErrorFlags |= ERROR_WARNING_OCCURED;
2462cdf0e10cSrcweir if ( ( nId & XMLERROR_FLAG_SEVERE ) != 0 )
2463cdf0e10cSrcweir mnErrorFlags |= ERROR_DO_NOTHING;
2464cdf0e10cSrcweir
2465cdf0e10cSrcweir // create error lsit on demand
2466cdf0e10cSrcweir if ( mpXMLErrors == NULL )
2467cdf0e10cSrcweir mpXMLErrors = new XMLErrors();
2468cdf0e10cSrcweir
2469cdf0e10cSrcweir // save error information
2470cdf0e10cSrcweir mpXMLErrors->AddRecord( nId, rMsgParams, rExceptionMessage, rLocator );
2471cdf0e10cSrcweir }
2472cdf0e10cSrcweir
SetError(sal_Int32 nId,const Sequence<OUString> & rMsgParams)2473cdf0e10cSrcweir void SvXMLExport::SetError(
2474cdf0e10cSrcweir sal_Int32 nId,
2475cdf0e10cSrcweir const Sequence<OUString>& rMsgParams)
2476cdf0e10cSrcweir {
2477cdf0e10cSrcweir OUString sEmpty;
2478cdf0e10cSrcweir SetError( nId, rMsgParams, sEmpty, NULL );
2479cdf0e10cSrcweir }
2480cdf0e10cSrcweir
2481cdf0e10cSrcweir
GetErrors()2482cdf0e10cSrcweir XMLErrors* SvXMLExport::GetErrors()
2483cdf0e10cSrcweir {
2484cdf0e10cSrcweir return mpXMLErrors;
2485cdf0e10cSrcweir }
2486cdf0e10cSrcweir
DisposingModel()2487cdf0e10cSrcweir void SvXMLExport::DisposingModel()
2488cdf0e10cSrcweir {
2489cdf0e10cSrcweir mxModel.clear();
2490cdf0e10cSrcweir // --> OD 2006-03-13 #i51726#
249150626f15Smseidel meModelType = SvtModuleOptions::E_UNKNOWN_FACTORY;
2492cdf0e10cSrcweir // <--
2493cdf0e10cSrcweir mxEventListener.clear();
2494cdf0e10cSrcweir }
2495cdf0e10cSrcweir
2496cdf0e10cSrcweir // #110680#
getServiceFactory()2497cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > SvXMLExport::getServiceFactory()
2498cdf0e10cSrcweir {
2499cdf0e10cSrcweir // #110680#
2500cdf0e10cSrcweir return mxServiceFactory;
2501cdf0e10cSrcweir }
2502cdf0e10cSrcweir
2503cdf0e10cSrcweir uno::Reference< uno::XComponentContext >
GetComponentContext() const2504cdf0e10cSrcweir SvXMLExport::GetComponentContext() const
2505cdf0e10cSrcweir {
2506cdf0e10cSrcweir return mpImpl->mxComponentContext;
2507cdf0e10cSrcweir }
2508cdf0e10cSrcweir
getInterfaceToIdentifierMapper()2509cdf0e10cSrcweir ::comphelper::UnoInterfaceToUniqueIdentifierMapper& SvXMLExport::getInterfaceToIdentifierMapper()
2510cdf0e10cSrcweir {
2511cdf0e10cSrcweir return mpImpl->maInterfaceToIdentifierMapper;
2512cdf0e10cSrcweir }
2513cdf0e10cSrcweir
2514cdf0e10cSrcweir // --> OD 2006-09-27 #i69627#
writeOutlineStyleAsNormalListStyle() const2515cdf0e10cSrcweir sal_Bool SvXMLExport::writeOutlineStyleAsNormalListStyle() const
2516cdf0e10cSrcweir {
2517cdf0e10cSrcweir return mpImpl->mbOutlineStyleAsNormalListStyle;
2518cdf0e10cSrcweir }
2519cdf0e10cSrcweir // <--
2520cdf0e10cSrcweir
GetTargetStorage()2521cdf0e10cSrcweir uno::Reference< embed::XStorage > SvXMLExport::GetTargetStorage()
2522cdf0e10cSrcweir {
2523cdf0e10cSrcweir return mpImpl->mxTargetStorage;
2524cdf0e10cSrcweir }
2525cdf0e10cSrcweir
2526*10347ccaSmseidel // returns the currently configured default version for odf export
getDefaultVersion() const2527cdf0e10cSrcweir SvtSaveOptions::ODFDefaultVersion SvXMLExport::getDefaultVersion() const
2528cdf0e10cSrcweir {
2529cdf0e10cSrcweir if( mpImpl )
2530cdf0e10cSrcweir return mpImpl->maSaveOptions.GetODFDefaultVersion();
2531cdf0e10cSrcweir
2532cdf0e10cSrcweir // fatal error, use current version as default
2533cdf0e10cSrcweir return SvtSaveOptions::ODFVER_012;
2534cdf0e10cSrcweir }
2535cdf0e10cSrcweir
GetStreamName() const2536cdf0e10cSrcweir ::rtl::OUString SvXMLExport::GetStreamName() const
2537cdf0e10cSrcweir {
2538cdf0e10cSrcweir return mpImpl->mStreamName;
2539cdf0e10cSrcweir }
2540cdf0e10cSrcweir
2541cdf0e10cSrcweir void
AddAttributeIdLegacy(sal_uInt16 const nLegacyPrefix,::rtl::OUString const & rValue)2542cdf0e10cSrcweir SvXMLExport::AddAttributeIdLegacy(
2543cdf0e10cSrcweir sal_uInt16 const nLegacyPrefix, ::rtl::OUString const& rValue)
2544cdf0e10cSrcweir {
2545cdf0e10cSrcweir switch (getDefaultVersion()) {
2546cdf0e10cSrcweir case SvtSaveOptions::ODFVER_011: // fall thru
2547cdf0e10cSrcweir case SvtSaveOptions::ODFVER_010: break;
2548cdf0e10cSrcweir default: // ODF 1.2: xml:id
2549cdf0e10cSrcweir AddAttribute(XML_NAMESPACE_XML, XML_ID, rValue);
2550cdf0e10cSrcweir }
2551cdf0e10cSrcweir // in ODF 1.1 this was form:id, anim:id, draw:id, or text:id
2552cdf0e10cSrcweir // backward compatibility: in ODF 1.2 write _both_ id attrs
2553cdf0e10cSrcweir AddAttribute(nLegacyPrefix, XML_ID, rValue);
2554cdf0e10cSrcweir // FIXME: this function simply assumes that rValue is unique
2555cdf0e10cSrcweir }
2556cdf0e10cSrcweir
2557cdf0e10cSrcweir void
AddAttributeXmlId(uno::Reference<uno::XInterface> const & i_xIfc)2558cdf0e10cSrcweir SvXMLExport::AddAttributeXmlId(uno::Reference<uno::XInterface> const & i_xIfc)
2559cdf0e10cSrcweir {
2560cdf0e10cSrcweir // check version >= 1.2
2561cdf0e10cSrcweir switch (getDefaultVersion()) {
2562cdf0e10cSrcweir case SvtSaveOptions::ODFVER_011: // fall thru
2563cdf0e10cSrcweir case SvtSaveOptions::ODFVER_010: return;
2564cdf0e10cSrcweir default: break;
2565cdf0e10cSrcweir }
2566cdf0e10cSrcweir const uno::Reference<rdf::XMetadatable> xMeta(i_xIfc,
2567cdf0e10cSrcweir uno::UNO_QUERY);
2568cdf0e10cSrcweir //FIXME not yet...
2569cdf0e10cSrcweir // OSL_ENSURE(xMeta.is(), "xml:id: not XMetadatable");
2570cdf0e10cSrcweir if ( xMeta.is() )
2571cdf0e10cSrcweir {
2572cdf0e10cSrcweir const beans::StringPair mdref( xMeta->getMetadataReference() );
2573cdf0e10cSrcweir if ( !mdref.Second.equalsAscii("") )
2574cdf0e10cSrcweir {
2575cdf0e10cSrcweir const ::rtl::OUString streamName( GetStreamName() );
2576cdf0e10cSrcweir if ( streamName.getLength() )
2577cdf0e10cSrcweir {
2578cdf0e10cSrcweir if ( streamName.equals(mdref.First) )
2579cdf0e10cSrcweir {
2580cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_XML, XML_ID, mdref.Second );
2581cdf0e10cSrcweir }
2582cdf0e10cSrcweir else
2583cdf0e10cSrcweir {
2584cdf0e10cSrcweir OSL_ENSURE(false, "SvXMLExport::AddAttributeXmlId: "
2585cdf0e10cSrcweir "invalid stream name");
2586cdf0e10cSrcweir }
2587cdf0e10cSrcweir }
2588cdf0e10cSrcweir else
2589cdf0e10cSrcweir {
2590cdf0e10cSrcweir // FIXME: this is ugly
2591cdf0e10cSrcweir // there is no stream name (e.g. XSLT, flat-xml format)!
2592cdf0e10cSrcweir // but how do we ensure uniqueness in this case?
2593cdf0e10cSrcweir // a) just omit styles.xml ids -- they are unlikely anyway...
2594cdf0e10cSrcweir // b) somehow find out whether we are currently exporting styles
2595cdf0e10cSrcweir // or content, and prefix "s" or "c" => unique
2596cdf0e10cSrcweir if ( mdref.First.equalsAscii("content.xml") )
2597cdf0e10cSrcweir {
2598cdf0e10cSrcweir AddAttribute( XML_NAMESPACE_XML, XML_ID, mdref.Second );
2599cdf0e10cSrcweir }
2600cdf0e10cSrcweir else
2601cdf0e10cSrcweir {
2602cdf0e10cSrcweir OSL_TRACE("SvXMLExport::AddAttributeXmlId: "
2603cdf0e10cSrcweir "no stream name given: dropping styles.xml xml:id");
2604cdf0e10cSrcweir }
2605cdf0e10cSrcweir }
2606cdf0e10cSrcweir }
2607cdf0e10cSrcweir }
2608cdf0e10cSrcweir }
2609cdf0e10cSrcweir
2610cdf0e10cSrcweir void
AddAttributesRDFa(uno::Reference<text::XTextContent> const & i_xTextContent)2611cdf0e10cSrcweir SvXMLExport::AddAttributesRDFa(
2612cdf0e10cSrcweir uno::Reference<text::XTextContent> const & i_xTextContent)
2613cdf0e10cSrcweir {
2614cdf0e10cSrcweir // check version >= 1.2
2615cdf0e10cSrcweir switch (getDefaultVersion()) {
2616cdf0e10cSrcweir case SvtSaveOptions::ODFVER_011: // fall thru
2617cdf0e10cSrcweir case SvtSaveOptions::ODFVER_010: return;
2618cdf0e10cSrcweir default: break;
2619cdf0e10cSrcweir }
2620cdf0e10cSrcweir
2621cdf0e10cSrcweir const uno::Reference<rdf::XMetadatable> xMeta(
2622cdf0e10cSrcweir i_xTextContent, uno::UNO_QUERY);
2623cdf0e10cSrcweir if (!xMeta.is() || !xMeta->getMetadataReference().Second.getLength())
2624cdf0e10cSrcweir {
2625cdf0e10cSrcweir return; // no xml:id => no RDFa
2626cdf0e10cSrcweir }
2627cdf0e10cSrcweir
2628cdf0e10cSrcweir if (!mpImpl->mpRDFaHelper.get())
2629cdf0e10cSrcweir {
2630cdf0e10cSrcweir mpImpl->mpRDFaHelper.reset( new ::xmloff::RDFaExportHelper(*this) );
2631cdf0e10cSrcweir }
2632cdf0e10cSrcweir mpImpl->mpRDFaHelper->AddRDFa(xMeta);
2633cdf0e10cSrcweir }
2634cdf0e10cSrcweir
exportTextNumberElement() const2635cdf0e10cSrcweir sal_Bool SvXMLExport::exportTextNumberElement() const
2636cdf0e10cSrcweir {
2637cdf0e10cSrcweir return mpImpl->mbExportTextNumberElement;
2638cdf0e10cSrcweir }
2639cdf0e10cSrcweir
SetNullDateOnUnitConverter()2640cdf0e10cSrcweir sal_Bool SvXMLExport::SetNullDateOnUnitConverter()
2641cdf0e10cSrcweir {
2642cdf0e10cSrcweir // if the null date has already been set, don't set it again (performance)
2643cdf0e10cSrcweir if (!mpImpl->mbNullDateInitialized)
2644cdf0e10cSrcweir mpImpl->mbNullDateInitialized = GetMM100UnitConverter().setNullDate(GetModel());
2645cdf0e10cSrcweir
2646cdf0e10cSrcweir return mpImpl->mbNullDateInitialized;
2647cdf0e10cSrcweir }
2648cdf0e10cSrcweir
2649c45df7c4SOliver-Rainer Wittmann
2650cdf0e10cSrcweir //=============================================================================
2651cdf0e10cSrcweir
2652c45df7c4SOliver-Rainer Wittmann
StartElement(const sal_uInt16 nPrefixKey,const OUString & rLName,const sal_Bool bIgnoreWhitespaceOutside)2653c45df7c4SOliver-Rainer Wittmann void SvXMLElementExport::StartElement(
2654c45df7c4SOliver-Rainer Wittmann const sal_uInt16 nPrefixKey,
2655cdf0e10cSrcweir const OUString& rLName,
2656c45df7c4SOliver-Rainer Wittmann const sal_Bool bIgnoreWhitespaceOutside )
2657cdf0e10cSrcweir {
2658c45df7c4SOliver-Rainer Wittmann maElementName = mrExport.GetNamespaceMap().GetQNameByKey(nPrefixKey, rLName);
2659c45df7c4SOliver-Rainer Wittmann mrExport.StartElement(maElementName, bIgnoreWhitespaceOutside);
2660cdf0e10cSrcweir }
2661cdf0e10cSrcweir
SvXMLElementExport(SvXMLExport & rExp,sal_uInt16 nPrefixKey,const sal_Char * pLName,sal_Bool bIWSOutside,sal_Bool bIWSInside)2662c45df7c4SOliver-Rainer Wittmann SvXMLElementExport::SvXMLElementExport(
2663c45df7c4SOliver-Rainer Wittmann SvXMLExport& rExp,
2664cdf0e10cSrcweir sal_uInt16 nPrefixKey,
2665cdf0e10cSrcweir const sal_Char *pLName,
2666cdf0e10cSrcweir sal_Bool bIWSOutside,
2667c45df7c4SOliver-Rainer Wittmann sal_Bool bIWSInside )
2668c45df7c4SOliver-Rainer Wittmann : mrExport( rExp )
2669c45df7c4SOliver-Rainer Wittmann , maElementName()
2670c45df7c4SOliver-Rainer Wittmann , mbIgnoreWhitespaceInside( bIWSInside )
2671c45df7c4SOliver-Rainer Wittmann , mbDoSomething( sal_True )
2672cdf0e10cSrcweir {
2673c45df7c4SOliver-Rainer Wittmann const OUString sLName( OUString::createFromAscii( pLName ) );
2674c45df7c4SOliver-Rainer Wittmann StartElement( nPrefixKey, sLName, bIWSOutside );
2675cdf0e10cSrcweir }
2676cdf0e10cSrcweir
SvXMLElementExport(SvXMLExport & rExp,sal_uInt16 nPrefixKey,const OUString & rLName,sal_Bool bIWSOutside,sal_Bool bIWSInside)2677c45df7c4SOliver-Rainer Wittmann SvXMLElementExport::SvXMLElementExport(
2678c45df7c4SOliver-Rainer Wittmann SvXMLExport& rExp,
2679cdf0e10cSrcweir sal_uInt16 nPrefixKey,
2680cdf0e10cSrcweir const OUString& rLName,
2681cdf0e10cSrcweir sal_Bool bIWSOutside,
2682c45df7c4SOliver-Rainer Wittmann sal_Bool bIWSInside )
2683c45df7c4SOliver-Rainer Wittmann : mrExport( rExp )
2684c45df7c4SOliver-Rainer Wittmann , maElementName()
2685c45df7c4SOliver-Rainer Wittmann , mbIgnoreWhitespaceInside( bIWSInside )
2686c45df7c4SOliver-Rainer Wittmann , mbDoSomething( sal_True )
2687cdf0e10cSrcweir {
2688c45df7c4SOliver-Rainer Wittmann StartElement( nPrefixKey, rLName, bIWSOutside );
2689cdf0e10cSrcweir }
2690cdf0e10cSrcweir
SvXMLElementExport(SvXMLExport & rExp,sal_uInt16 nPrefixKey,enum XMLTokenEnum eLName,sal_Bool bIWSOutside,sal_Bool bIWSInside)2691c45df7c4SOliver-Rainer Wittmann SvXMLElementExport::SvXMLElementExport(
2692c45df7c4SOliver-Rainer Wittmann SvXMLExport& rExp,
2693cdf0e10cSrcweir sal_uInt16 nPrefixKey,
2694cdf0e10cSrcweir enum XMLTokenEnum eLName,
2695cdf0e10cSrcweir sal_Bool bIWSOutside,
2696c45df7c4SOliver-Rainer Wittmann sal_Bool bIWSInside )
2697c45df7c4SOliver-Rainer Wittmann : mrExport( rExp )
2698c45df7c4SOliver-Rainer Wittmann , maElementName()
2699c45df7c4SOliver-Rainer Wittmann , mbIgnoreWhitespaceInside( bIWSInside )
2700c45df7c4SOliver-Rainer Wittmann , mbDoSomething( sal_True )
2701cdf0e10cSrcweir {
2702c45df7c4SOliver-Rainer Wittmann StartElement( nPrefixKey, GetXMLToken(eLName), bIWSOutside );
2703cdf0e10cSrcweir }
2704cdf0e10cSrcweir
SvXMLElementExport(SvXMLExport & rExp,sal_Bool bDoSth,sal_uInt16 nPrefixKey,const sal_Char * pLName,sal_Bool bIWSOutside,sal_Bool bIWSInside)2705c45df7c4SOliver-Rainer Wittmann SvXMLElementExport::SvXMLElementExport(
2706c45df7c4SOliver-Rainer Wittmann SvXMLExport& rExp,
2707cdf0e10cSrcweir sal_Bool bDoSth,
2708cdf0e10cSrcweir sal_uInt16 nPrefixKey,
2709cdf0e10cSrcweir const sal_Char *pLName,
2710cdf0e10cSrcweir sal_Bool bIWSOutside,
2711c45df7c4SOliver-Rainer Wittmann sal_Bool bIWSInside )
2712c45df7c4SOliver-Rainer Wittmann : mrExport( rExp )
2713c45df7c4SOliver-Rainer Wittmann , maElementName()
2714c45df7c4SOliver-Rainer Wittmann , mbIgnoreWhitespaceInside( bIWSInside )
2715c45df7c4SOliver-Rainer Wittmann , mbDoSomething( bDoSth )
2716cdf0e10cSrcweir {
2717c45df7c4SOliver-Rainer Wittmann if ( mbDoSomething )
2718cdf0e10cSrcweir {
2719c45df7c4SOliver-Rainer Wittmann const OUString sLName( OUString::createFromAscii( pLName ) );
2720c45df7c4SOliver-Rainer Wittmann StartElement( nPrefixKey, sLName, bIWSOutside );
2721cdf0e10cSrcweir }
2722cdf0e10cSrcweir }
2723cdf0e10cSrcweir
SvXMLElementExport(SvXMLExport & rExp,sal_Bool bDoSth,sal_uInt16 nPrefixKey,const OUString & rLName,sal_Bool bIWSOutside,sal_Bool bIWSInside)2724c45df7c4SOliver-Rainer Wittmann SvXMLElementExport::SvXMLElementExport(
2725c45df7c4SOliver-Rainer Wittmann SvXMLExport& rExp,
2726cdf0e10cSrcweir sal_Bool bDoSth,
2727cdf0e10cSrcweir sal_uInt16 nPrefixKey,
2728cdf0e10cSrcweir const OUString& rLName,
2729cdf0e10cSrcweir sal_Bool bIWSOutside,
2730c45df7c4SOliver-Rainer Wittmann sal_Bool bIWSInside )
2731c45df7c4SOliver-Rainer Wittmann : mrExport( rExp )
2732c45df7c4SOliver-Rainer Wittmann , maElementName()
2733c45df7c4SOliver-Rainer Wittmann , mbIgnoreWhitespaceInside( bIWSInside )
2734c45df7c4SOliver-Rainer Wittmann , mbDoSomething( bDoSth )
2735cdf0e10cSrcweir {
2736c45df7c4SOliver-Rainer Wittmann if ( mbDoSomething )
2737c45df7c4SOliver-Rainer Wittmann StartElement( nPrefixKey, rLName, bIWSOutside );
2738cdf0e10cSrcweir }
2739cdf0e10cSrcweir
SvXMLElementExport(SvXMLExport & rExp,sal_Bool bDoSth,sal_uInt16 nPrefixKey,enum XMLTokenEnum eLName,sal_Bool bIWSOutside,sal_Bool bIWSInside)2740c45df7c4SOliver-Rainer Wittmann SvXMLElementExport::SvXMLElementExport(
2741c45df7c4SOliver-Rainer Wittmann SvXMLExport& rExp,
2742cdf0e10cSrcweir sal_Bool bDoSth,
2743cdf0e10cSrcweir sal_uInt16 nPrefixKey,
2744cdf0e10cSrcweir enum XMLTokenEnum eLName,
2745cdf0e10cSrcweir sal_Bool bIWSOutside,
2746c45df7c4SOliver-Rainer Wittmann sal_Bool bIWSInside )
2747c45df7c4SOliver-Rainer Wittmann : mrExport( rExp )
2748c45df7c4SOliver-Rainer Wittmann , maElementName()
2749c45df7c4SOliver-Rainer Wittmann , mbIgnoreWhitespaceInside( bIWSInside )
2750c45df7c4SOliver-Rainer Wittmann , mbDoSomething( bDoSth )
2751cdf0e10cSrcweir {
2752c45df7c4SOliver-Rainer Wittmann if ( mbDoSomething )
2753c45df7c4SOliver-Rainer Wittmann StartElement( nPrefixKey, GetXMLToken( eLName ), bIWSOutside );
2754cdf0e10cSrcweir }
2755cdf0e10cSrcweir
SvXMLElementExport(SvXMLExport & rExp,const OUString & rQName,sal_Bool bIWSOutside,sal_Bool bIWSInside)2756c45df7c4SOliver-Rainer Wittmann SvXMLElementExport::SvXMLElementExport(
2757c45df7c4SOliver-Rainer Wittmann SvXMLExport& rExp,
2758cdf0e10cSrcweir const OUString& rQName,
2759cdf0e10cSrcweir sal_Bool bIWSOutside,
2760c45df7c4SOliver-Rainer Wittmann sal_Bool bIWSInside )
2761c45df7c4SOliver-Rainer Wittmann : mrExport( rExp )
2762c45df7c4SOliver-Rainer Wittmann , maElementName()
2763c45df7c4SOliver-Rainer Wittmann , mbIgnoreWhitespaceInside( bIWSInside )
2764c45df7c4SOliver-Rainer Wittmann , mbDoSomething( sal_True )
2765cdf0e10cSrcweir {
2766c45df7c4SOliver-Rainer Wittmann maElementName = rQName;
2767cdf0e10cSrcweir rExp.StartElement( rQName, bIWSOutside );
2768cdf0e10cSrcweir }
2769cdf0e10cSrcweir
~SvXMLElementExport()2770cdf0e10cSrcweir SvXMLElementExport::~SvXMLElementExport()
2771cdf0e10cSrcweir {
2772c45df7c4SOliver-Rainer Wittmann if ( mbDoSomething )
2773cdf0e10cSrcweir {
2774c45df7c4SOliver-Rainer Wittmann mrExport.EndElement( maElementName, mbIgnoreWhitespaceInside );
2775cdf0e10cSrcweir }
2776cdf0e10cSrcweir }
2777*10347ccaSmseidel
2778*10347ccaSmseidel /* vim: set noet sw=4 ts=4: */
2779