1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_xmloff.hxx"
26*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySetInfo.hpp>
27*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
28*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
29*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx>
30*b1cdbd2cSJim Jagielski #include <rtl/uuid.h>
31*b1cdbd2cSJim Jagielski #include <rtl/memory.h>
32*b1cdbd2cSJim Jagielski #include <svl/svarray.hxx>
33*b1cdbd2cSJim Jagielski #include "unointerfacetouniqueidentifiermapper.hxx"
34*b1cdbd2cSJim Jagielski #include <xmloff/nmspmap.hxx>
35*b1cdbd2cSJim Jagielski #include <xmloff/xmluconv.hxx>
36*b1cdbd2cSJim Jagielski #include "xmloff/xmlnmspe.hxx"
37*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
38*b1cdbd2cSJim Jagielski #include <xmloff/XMLFontStylesContext.hxx>
39*b1cdbd2cSJim Jagielski #include <xmloff/xmlictxt.hxx>
40*b1cdbd2cSJim Jagielski #include <xmloff/xmlimp.hxx>
41*b1cdbd2cSJim Jagielski #include <xmloff/xmlnumfi.hxx>
42*b1cdbd2cSJim Jagielski #include "XMLEventImportHelper.hxx"
43*b1cdbd2cSJim Jagielski #include "XMLStarBasicContextFactory.hxx"
44*b1cdbd2cSJim Jagielski #include "XMLScriptContextFactory.hxx"
45*b1cdbd2cSJim Jagielski #include "StyleMap.hxx"
46*b1cdbd2cSJim Jagielski #include <xmloff/ProgressBarHelper.hxx>
47*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
48*b1cdbd2cSJim Jagielski #include "xmloff/xmlerror.hxx"
49*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/ServiceNotRegisteredException.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XOutputStream.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XBinaryStreamResolver.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XStorageBasedDocument.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/xml/sax/XLocator.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/packages/zip/ZipIOException.hpp>
56*b1cdbd2cSJim Jagielski #include <comphelper/namecontainer.hxx>
57*b1cdbd2cSJim Jagielski #include <rtl/logfile.hxx>
58*b1cdbd2cSJim Jagielski #include <tools/string.hxx> // used in StartElement for logging
59*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase1.hxx>
60*b1cdbd2cSJim Jagielski #include <comphelper/extract.hxx>
61*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
62*b1cdbd2cSJim Jagielski #include <comphelper/documentconstants.hxx>
63*b1cdbd2cSJim Jagielski #include <comphelper/storagehelper.hxx>
64*b1cdbd2cSJim Jagielski #include <unotools/fontcvt.hxx>
65*b1cdbd2cSJim Jagielski
66*b1cdbd2cSJim Jagielski #include <com/sun/star/rdf/XMetadatable.hpp>
67*b1cdbd2cSJim Jagielski #include <com/sun/star/rdf/XRepositorySupplier.hpp>
68*b1cdbd2cSJim Jagielski #include "RDFaImportHelper.hxx"
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski #define LOGFILE_AUTHOR "unknown"
71*b1cdbd2cSJim Jagielski
72*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::XPropertySetInfo;
73*b1cdbd2cSJim Jagielski
74*b1cdbd2cSJim Jagielski using ::rtl::OUString;
75*b1cdbd2cSJim Jagielski using ::rtl::OUStringBuffer;
76*b1cdbd2cSJim Jagielski
77*b1cdbd2cSJim Jagielski using namespace ::osl;
78*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
79*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::frame;
80*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
81*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
82*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::io;
83*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
84*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::document;
85*b1cdbd2cSJim Jagielski using namespace ::xmloff::token;
86*b1cdbd2cSJim Jagielski
87*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__office[] = "_office";
88*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__office_ext[] = "_office_ooo";
89*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__ooo[] = "_ooo";
90*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__ooow[] = "_ooow";
91*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__oooc[] = "_oooc";
92*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__of[] = "_of";
93*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__style[] = "_style";
94*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__text[] = "_text";
95*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__text_ext[] = "_text_ooo";
96*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__table[] = "_table";
97*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__table_ext[] = "_table_ooo";
98*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__draw[] = "_draw";
99*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__draw_ext[] = "_draw_ooo";
100*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__dr3d[] = "_dr3d";
101*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__fo[] = "_fo";
102*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xlink[] = "_xlink";
103*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__dc[] = "_dc";
104*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__dom[] = "_dom";
105*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__meta[] = "_meta";
106*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__number[] = "_number";
107*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__svg[] = "_svg";
108*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__chart[] = "_chart";
109*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__math[] = "_math";
110*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__form[] = "_form";
111*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__script[] = "_script";
112*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__config[] = "_config";
113*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__db[] = "_db";
114*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xforms[] = "_xforms";
115*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xsd[] = "_xsd";
116*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xsi[] = "_xsi";
117*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__field[] = "_field";
118*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xhtml[] = "_xhtml";
119*b1cdbd2cSJim Jagielski
120*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__fo_old[] = "__fo";
121*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__xlink_old[] = "__xlink";
122*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__office_old[] = "__office";
123*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__style_old[] = "__style";
124*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__text_old[] = "__text";
125*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__table_old[] = "__table";
126*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sXML_np__meta_old[] = "__meta";
127*b1cdbd2cSJim Jagielski
128*b1cdbd2cSJim Jagielski
129*b1cdbd2cSJim Jagielski
130*b1cdbd2cSJim Jagielski class SvXMLImportEventListener : public cppu::WeakImplHelper1<
131*b1cdbd2cSJim Jagielski com::sun::star::lang::XEventListener >
132*b1cdbd2cSJim Jagielski {
133*b1cdbd2cSJim Jagielski private:
134*b1cdbd2cSJim Jagielski SvXMLImport* pImport;
135*b1cdbd2cSJim Jagielski
136*b1cdbd2cSJim Jagielski public:
137*b1cdbd2cSJim Jagielski SvXMLImportEventListener(SvXMLImport* pImport);
138*b1cdbd2cSJim Jagielski virtual ~SvXMLImportEventListener();
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski // XEventListener
141*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing(const lang::EventObject& rEventObject) throw(::com::sun::star::uno::RuntimeException);
142*b1cdbd2cSJim Jagielski };
143*b1cdbd2cSJim Jagielski
SvXMLImportEventListener(SvXMLImport * pTempImport)144*b1cdbd2cSJim Jagielski SvXMLImportEventListener::SvXMLImportEventListener(SvXMLImport* pTempImport)
145*b1cdbd2cSJim Jagielski : pImport(pTempImport)
146*b1cdbd2cSJim Jagielski {
147*b1cdbd2cSJim Jagielski }
148*b1cdbd2cSJim Jagielski
~SvXMLImportEventListener()149*b1cdbd2cSJim Jagielski SvXMLImportEventListener::~SvXMLImportEventListener()
150*b1cdbd2cSJim Jagielski {
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski // XEventListener
disposing(const lang::EventObject &)154*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImportEventListener::disposing( const lang::EventObject& )
155*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski if (pImport)
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski pImport->DisposingModel();
160*b1cdbd2cSJim Jagielski pImport = NULL;
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski }
163*b1cdbd2cSJim Jagielski
164*b1cdbd2cSJim Jagielski //==============================================================================
165*b1cdbd2cSJim Jagielski // --> ORW
166*b1cdbd2cSJim Jagielski namespace
167*b1cdbd2cSJim Jagielski {
168*b1cdbd2cSJim Jagielski class DocumentInfo
169*b1cdbd2cSJim Jagielski {
170*b1cdbd2cSJim Jagielski private:
171*b1cdbd2cSJim Jagielski sal_uInt16 mnGeneratorVersion;
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski public:
DocumentInfo(const SvXMLImport & rImport)174*b1cdbd2cSJim Jagielski DocumentInfo( const SvXMLImport& rImport )
175*b1cdbd2cSJim Jagielski : mnGeneratorVersion( SvXMLImport::ProductVersionUnknown )
176*b1cdbd2cSJim Jagielski {
177*b1cdbd2cSJim Jagielski sal_Int32 nUPD, nBuild;
178*b1cdbd2cSJim Jagielski if ( rImport.getBuildIds( nUPD, nBuild ) )
179*b1cdbd2cSJim Jagielski {
180*b1cdbd2cSJim Jagielski if ( nUPD >= 640 && nUPD <= 645 )
181*b1cdbd2cSJim Jagielski {
182*b1cdbd2cSJim Jagielski mnGeneratorVersion = SvXMLImport::OOo_1x;
183*b1cdbd2cSJim Jagielski }
184*b1cdbd2cSJim Jagielski else if ( nUPD == 680 )
185*b1cdbd2cSJim Jagielski {
186*b1cdbd2cSJim Jagielski mnGeneratorVersion = SvXMLImport::OOo_2x;
187*b1cdbd2cSJim Jagielski }
188*b1cdbd2cSJim Jagielski else if ( nUPD == 300 && nBuild <= 9379 )
189*b1cdbd2cSJim Jagielski {
190*b1cdbd2cSJim Jagielski mnGeneratorVersion = SvXMLImport::OOo_30x;
191*b1cdbd2cSJim Jagielski }
192*b1cdbd2cSJim Jagielski else if ( nUPD == 310 )
193*b1cdbd2cSJim Jagielski {
194*b1cdbd2cSJim Jagielski mnGeneratorVersion = SvXMLImport::OOo_31x;
195*b1cdbd2cSJim Jagielski }
196*b1cdbd2cSJim Jagielski else if ( nUPD == 320 )
197*b1cdbd2cSJim Jagielski {
198*b1cdbd2cSJim Jagielski mnGeneratorVersion = SvXMLImport::OOo_32x;
199*b1cdbd2cSJim Jagielski }
200*b1cdbd2cSJim Jagielski else if ( nUPD == 330 )
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski mnGeneratorVersion = SvXMLImport::OOo_33x;
203*b1cdbd2cSJim Jagielski }
204*b1cdbd2cSJim Jagielski else if ( nUPD == 340 )
205*b1cdbd2cSJim Jagielski {
206*b1cdbd2cSJim Jagielski mnGeneratorVersion = SvXMLImport::OOo_34x;
207*b1cdbd2cSJim Jagielski }
208*b1cdbd2cSJim Jagielski }
209*b1cdbd2cSJim Jagielski }
210*b1cdbd2cSJim Jagielski
~DocumentInfo()211*b1cdbd2cSJim Jagielski ~DocumentInfo()
212*b1cdbd2cSJim Jagielski {}
213*b1cdbd2cSJim Jagielski
getGeneratorVersion() const214*b1cdbd2cSJim Jagielski sal_uInt16 getGeneratorVersion() const
215*b1cdbd2cSJim Jagielski {
216*b1cdbd2cSJim Jagielski return mnGeneratorVersion;
217*b1cdbd2cSJim Jagielski }
218*b1cdbd2cSJim Jagielski };
219*b1cdbd2cSJim Jagielski }
220*b1cdbd2cSJim Jagielski // <--
221*b1cdbd2cSJim Jagielski
222*b1cdbd2cSJim Jagielski class SvXMLImport_Impl
223*b1cdbd2cSJim Jagielski {
224*b1cdbd2cSJim Jagielski public:
225*b1cdbd2cSJim Jagielski FontToSubsFontConverter hBatsFontConv;
226*b1cdbd2cSJim Jagielski FontToSubsFontConverter hMathFontConv;
227*b1cdbd2cSJim Jagielski
228*b1cdbd2cSJim Jagielski bool mbOwnGraphicResolver;
229*b1cdbd2cSJim Jagielski bool mbOwnEmbeddedResolver;
230*b1cdbd2cSJim Jagielski INetURLObject aBaseURL;
231*b1cdbd2cSJim Jagielski INetURLObject aDocBase;
232*b1cdbd2cSJim Jagielski
233*b1cdbd2cSJim Jagielski /// name of stream in package, e.g., "content.xml"
234*b1cdbd2cSJim Jagielski ::rtl::OUString mStreamName;
235*b1cdbd2cSJim Jagielski
236*b1cdbd2cSJim Jagielski ::rtl::OUString aODFVersion;
237*b1cdbd2cSJim Jagielski
238*b1cdbd2cSJim Jagielski // --> OD 2004-08-10 #i28749# - boolean, indicating that position attributes
239*b1cdbd2cSJim Jagielski // of shapes are given in horizontal left-to-right layout. This is the case
240*b1cdbd2cSJim Jagielski // for the OpenOffice.org file format.
241*b1cdbd2cSJim Jagielski sal_Bool mbShapePositionInHoriL2R;
242*b1cdbd2cSJim Jagielski // <--
243*b1cdbd2cSJim Jagielski // --> OD 2007-12-19 #152540#
244*b1cdbd2cSJim Jagielski sal_Bool mbTextDocInOOoFileFormat;
245*b1cdbd2cSJim Jagielski // <--
246*b1cdbd2cSJim Jagielski
247*b1cdbd2cSJim Jagielski const uno::Reference< uno::XComponentContext > mxComponentContext;
248*b1cdbd2cSJim Jagielski
249*b1cdbd2cSJim Jagielski std::auto_ptr< xmloff::RDFaImportHelper > mpRDFaHelper;
250*b1cdbd2cSJim Jagielski
251*b1cdbd2cSJim Jagielski // --> ORW
252*b1cdbd2cSJim Jagielski std::auto_ptr< DocumentInfo > mpDocumentInfo;
253*b1cdbd2cSJim Jagielski // <--
254*b1cdbd2cSJim Jagielski
SvXMLImport_Impl()255*b1cdbd2cSJim Jagielski SvXMLImport_Impl()
256*b1cdbd2cSJim Jagielski : hBatsFontConv( 0 )
257*b1cdbd2cSJim Jagielski , hMathFontConv( 0 )
258*b1cdbd2cSJim Jagielski , mbOwnGraphicResolver( false )
259*b1cdbd2cSJim Jagielski , mbOwnEmbeddedResolver( false )
260*b1cdbd2cSJim Jagielski , mStreamName()
261*b1cdbd2cSJim Jagielski , mbShapePositionInHoriL2R( sal_False )
262*b1cdbd2cSJim Jagielski , mbTextDocInOOoFileFormat( sal_False )
263*b1cdbd2cSJim Jagielski , mxComponentContext( ::comphelper::getProcessComponentContext() )
264*b1cdbd2cSJim Jagielski , mpRDFaHelper() // lazy
265*b1cdbd2cSJim Jagielski // --> ORW
266*b1cdbd2cSJim Jagielski , mpDocumentInfo() // lazy
267*b1cdbd2cSJim Jagielski // <--
268*b1cdbd2cSJim Jagielski {
269*b1cdbd2cSJim Jagielski OSL_ENSURE(mxComponentContext.is(), "SvXMLImport: no ComponentContext");
270*b1cdbd2cSJim Jagielski if (!mxComponentContext.is()) throw uno::RuntimeException();
271*b1cdbd2cSJim Jagielski }
272*b1cdbd2cSJim Jagielski
~SvXMLImport_Impl()273*b1cdbd2cSJim Jagielski ~SvXMLImport_Impl()
274*b1cdbd2cSJim Jagielski {
275*b1cdbd2cSJim Jagielski if( hBatsFontConv )
276*b1cdbd2cSJim Jagielski DestroyFontToSubsFontConverter( hBatsFontConv );
277*b1cdbd2cSJim Jagielski if( hMathFontConv )
278*b1cdbd2cSJim Jagielski DestroyFontToSubsFontConverter( hMathFontConv );
279*b1cdbd2cSJim Jagielski }
280*b1cdbd2cSJim Jagielski
281*b1cdbd2cSJim Jagielski // --> ORW
getGeneratorVersion(const SvXMLImport & rImport)282*b1cdbd2cSJim Jagielski sal_uInt16 getGeneratorVersion( const SvXMLImport& rImport )
283*b1cdbd2cSJim Jagielski {
284*b1cdbd2cSJim Jagielski if ( !mpDocumentInfo.get() )
285*b1cdbd2cSJim Jagielski {
286*b1cdbd2cSJim Jagielski mpDocumentInfo.reset( new DocumentInfo( rImport ) );
287*b1cdbd2cSJim Jagielski }
288*b1cdbd2cSJim Jagielski
289*b1cdbd2cSJim Jagielski return mpDocumentInfo->getGeneratorVersion();
290*b1cdbd2cSJim Jagielski }
291*b1cdbd2cSJim Jagielski // <--
292*b1cdbd2cSJim Jagielski
293*b1cdbd2cSJim Jagielski ::comphelper::UnoInterfaceToUniqueIdentifierMapper maInterfaceToIdentifierMapper;
294*b1cdbd2cSJim Jagielski };
295*b1cdbd2cSJim Jagielski
296*b1cdbd2cSJim Jagielski typedef SvXMLImportContext *SvXMLImportContextPtr;
297*b1cdbd2cSJim Jagielski SV_DECL_PTRARR( SvXMLImportContexts_Impl, SvXMLImportContextPtr, 20, 5 )
SV_IMPL_PTRARR(SvXMLImportContexts_Impl,SvXMLImportContextPtr)298*b1cdbd2cSJim Jagielski SV_IMPL_PTRARR( SvXMLImportContexts_Impl, SvXMLImportContextPtr )
299*b1cdbd2cSJim Jagielski
300*b1cdbd2cSJim Jagielski SvXMLImportContext *SvXMLImport::CreateContext( sal_uInt16 nPrefix,
301*b1cdbd2cSJim Jagielski const OUString& rLocalName,
302*b1cdbd2cSJim Jagielski const uno::Reference< xml::sax::XAttributeList >& )
303*b1cdbd2cSJim Jagielski {
304*b1cdbd2cSJim Jagielski return new SvXMLImportContext( *this, nPrefix, rLocalName );
305*b1cdbd2cSJim Jagielski }
306*b1cdbd2cSJim Jagielski
_InitCtor()307*b1cdbd2cSJim Jagielski void SvXMLImport::_InitCtor()
308*b1cdbd2cSJim Jagielski {
309*b1cdbd2cSJim Jagielski if( mnImportFlags != 0 )
310*b1cdbd2cSJim Jagielski {
311*b1cdbd2cSJim Jagielski // implicit "xml" namespace prefix
312*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( GetXMLToken(XML_XML), GetXMLToken(XML_N_XML), XML_NAMESPACE_XML );
313*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__office ) ),
314*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_OFFICE),
315*b1cdbd2cSJim Jagielski XML_NAMESPACE_OFFICE );
316*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__office_ext ) ),
317*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_OFFICE_EXT),
318*b1cdbd2cSJim Jagielski XML_NAMESPACE_OFFICE_EXT );
319*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__ooo ) ), GetXMLToken(XML_N_OOO), XML_NAMESPACE_OOO );
320*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__style) ),
321*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_STYLE),
322*b1cdbd2cSJim Jagielski XML_NAMESPACE_STYLE );
323*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__text) ),
324*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_TEXT),
325*b1cdbd2cSJim Jagielski XML_NAMESPACE_TEXT );
326*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__text_ext ) ),
327*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_TEXT_EXT),
328*b1cdbd2cSJim Jagielski XML_NAMESPACE_TEXT_EXT );
329*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__table ) ),
330*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_TABLE),
331*b1cdbd2cSJim Jagielski XML_NAMESPACE_TABLE );
332*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__table_ext ) ),
333*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_TABLE_EXT),
334*b1cdbd2cSJim Jagielski XML_NAMESPACE_TABLE_EXT );
335*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__draw ) ),
336*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_DRAW),
337*b1cdbd2cSJim Jagielski XML_NAMESPACE_DRAW );
338*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__draw_ext ) ),
339*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_DRAW_EXT),
340*b1cdbd2cSJim Jagielski XML_NAMESPACE_DRAW_EXT );
341*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM (sXML_np__dr3d ) ),
342*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_DR3D),
343*b1cdbd2cSJim Jagielski XML_NAMESPACE_DR3D );
344*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__fo) ),
345*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_FO_COMPAT),
346*b1cdbd2cSJim Jagielski XML_NAMESPACE_FO );
347*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xlink) ),
348*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_XLINK),
349*b1cdbd2cSJim Jagielski XML_NAMESPACE_XLINK );
350*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__dc) ),
351*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_DC),
352*b1cdbd2cSJim Jagielski XML_NAMESPACE_DC );
353*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__dom ) ),
354*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_DOM),
355*b1cdbd2cSJim Jagielski XML_NAMESPACE_DOM );
356*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__meta) ),
357*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_META),
358*b1cdbd2cSJim Jagielski XML_NAMESPACE_META );
359*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__number) ),
360*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_NUMBER),
361*b1cdbd2cSJim Jagielski XML_NAMESPACE_NUMBER );
362*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__svg) ),
363*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_SVG_COMPAT),
364*b1cdbd2cSJim Jagielski XML_NAMESPACE_SVG );
365*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__chart) ),
366*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_CHART),
367*b1cdbd2cSJim Jagielski XML_NAMESPACE_CHART );
368*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__math) ),
369*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_MATH),
370*b1cdbd2cSJim Jagielski XML_NAMESPACE_MATH );
371*b1cdbd2cSJim Jagielski mpNamespaceMap->Add(OUString(RTL_CONSTASCII_USTRINGPARAM( sXML_np__form )),
372*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_FORM),
373*b1cdbd2cSJim Jagielski XML_NAMESPACE_FORM );
374*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__script) ),
375*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_SCRIPT),
376*b1cdbd2cSJim Jagielski XML_NAMESPACE_SCRIPT );
377*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__config) ),
378*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_CONFIG),
379*b1cdbd2cSJim Jagielski XML_NAMESPACE_CONFIG );
380*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xforms) ),
381*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_XFORMS_1_0),
382*b1cdbd2cSJim Jagielski XML_NAMESPACE_XFORMS );
383*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xsd) ),
384*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_XSD),
385*b1cdbd2cSJim Jagielski XML_NAMESPACE_XSD );
386*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xsi) ),
387*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_XSI),
388*b1cdbd2cSJim Jagielski XML_NAMESPACE_XFORMS );
389*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__ooow ) ), GetXMLToken(XML_N_OOOW), XML_NAMESPACE_OOOW );
390*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__oooc ) ), GetXMLToken(XML_N_OOOC), XML_NAMESPACE_OOOC );
391*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__field ) ), GetXMLToken(XML_N_FIELD), XML_NAMESPACE_FIELD );
392*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__of ) ),
393*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_OF), XML_NAMESPACE_OF );
394*b1cdbd2cSJim Jagielski mpNamespaceMap->Add(
395*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xhtml ) ),
396*b1cdbd2cSJim Jagielski GetXMLToken(XML_N_XHTML), XML_NAMESPACE_XHTML );
397*b1cdbd2cSJim Jagielski }
398*b1cdbd2cSJim Jagielski
399*b1cdbd2cSJim Jagielski msPackageProtocol = OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.Package:" ) );
400*b1cdbd2cSJim Jagielski
401*b1cdbd2cSJim Jagielski if (mxNumberFormatsSupplier.is())
402*b1cdbd2cSJim Jagielski mpNumImport = new SvXMLNumFmtHelper(mxNumberFormatsSupplier, getServiceFactory());
403*b1cdbd2cSJim Jagielski
404*b1cdbd2cSJim Jagielski if (mxModel.is() && !mxEventListener.is())
405*b1cdbd2cSJim Jagielski {
406*b1cdbd2cSJim Jagielski mxEventListener.set(new SvXMLImportEventListener(this));
407*b1cdbd2cSJim Jagielski mxModel->addEventListener(mxEventListener);
408*b1cdbd2cSJim Jagielski }
409*b1cdbd2cSJim Jagielski
410*b1cdbd2cSJim Jagielski ::comphelper::UnoInterfaceToUniqueIdentifierMapper maInterfaceToIdentifierMapper;
411*b1cdbd2cSJim Jagielski
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski
414*b1cdbd2cSJim Jagielski // #110680#
SvXMLImport(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,sal_uInt16 nImportFlags)415*b1cdbd2cSJim Jagielski SvXMLImport::SvXMLImport(
416*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
417*b1cdbd2cSJim Jagielski sal_uInt16 nImportFlags ) throw ()
418*b1cdbd2cSJim Jagielski : mpImpl( new SvXMLImport_Impl() ),
419*b1cdbd2cSJim Jagielski mpNamespaceMap( new SvXMLNamespaceMap ),
420*b1cdbd2cSJim Jagielski
421*b1cdbd2cSJim Jagielski // #110680#
422*b1cdbd2cSJim Jagielski // pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM ) ),
423*b1cdbd2cSJim Jagielski mpUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM, xServiceFactory ) ),
424*b1cdbd2cSJim Jagielski
425*b1cdbd2cSJim Jagielski mpContexts( new SvXMLImportContexts_Impl ),
426*b1cdbd2cSJim Jagielski mpNumImport( NULL ),
427*b1cdbd2cSJim Jagielski mpProgressBarHelper( NULL ),
428*b1cdbd2cSJim Jagielski mpEventImportHelper( NULL ),
429*b1cdbd2cSJim Jagielski mpXMLErrors( NULL ),
430*b1cdbd2cSJim Jagielski mpStyleMap(0),
431*b1cdbd2cSJim Jagielski mnImportFlags( nImportFlags ),
432*b1cdbd2cSJim Jagielski mnErrorFlags(0),
433*b1cdbd2cSJim Jagielski // #110680#
434*b1cdbd2cSJim Jagielski mxServiceFactory(xServiceFactory),
435*b1cdbd2cSJim Jagielski mbIsFormsSupported( sal_True ),
436*b1cdbd2cSJim Jagielski mbIsTableShapeSupported( false ),
437*b1cdbd2cSJim Jagielski mbIsGraphicLoadOnDemandSupported( true )
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
440*b1cdbd2cSJim Jagielski _InitCtor();
441*b1cdbd2cSJim Jagielski }
442*b1cdbd2cSJim Jagielski
443*b1cdbd2cSJim Jagielski // #110680#
SvXMLImport(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,const Reference<XModel> & rModel)444*b1cdbd2cSJim Jagielski SvXMLImport::SvXMLImport(
445*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
446*b1cdbd2cSJim Jagielski const Reference< XModel > & rModel ) throw ()
447*b1cdbd2cSJim Jagielski : mxModel( rModel ),
448*b1cdbd2cSJim Jagielski mxNumberFormatsSupplier (rModel, uno::UNO_QUERY),
449*b1cdbd2cSJim Jagielski mpImpl( new SvXMLImport_Impl() ),
450*b1cdbd2cSJim Jagielski mpNamespaceMap( new SvXMLNamespaceMap ),
451*b1cdbd2cSJim Jagielski // #110680#
452*b1cdbd2cSJim Jagielski // pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM ) ),
453*b1cdbd2cSJim Jagielski mpUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM, xServiceFactory ) ),
454*b1cdbd2cSJim Jagielski mpContexts( new SvXMLImportContexts_Impl ),
455*b1cdbd2cSJim Jagielski mpNumImport( NULL ),
456*b1cdbd2cSJim Jagielski mpProgressBarHelper( NULL ),
457*b1cdbd2cSJim Jagielski mpEventImportHelper( NULL ),
458*b1cdbd2cSJim Jagielski mpXMLErrors( NULL ),
459*b1cdbd2cSJim Jagielski mpStyleMap(0),
460*b1cdbd2cSJim Jagielski mnImportFlags( IMPORT_ALL ),
461*b1cdbd2cSJim Jagielski mnErrorFlags(0),
462*b1cdbd2cSJim Jagielski // #110680#
463*b1cdbd2cSJim Jagielski mxServiceFactory(xServiceFactory),
464*b1cdbd2cSJim Jagielski mbIsFormsSupported( sal_True ),
465*b1cdbd2cSJim Jagielski mbIsTableShapeSupported( false ),
466*b1cdbd2cSJim Jagielski mbIsGraphicLoadOnDemandSupported( true )
467*b1cdbd2cSJim Jagielski {
468*b1cdbd2cSJim Jagielski DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
469*b1cdbd2cSJim Jagielski _InitCtor();
470*b1cdbd2cSJim Jagielski }
471*b1cdbd2cSJim Jagielski
472*b1cdbd2cSJim Jagielski // #110680#
SvXMLImport(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & xServiceFactory,const Reference<XModel> & rModel,const::com::sun::star::uno::Reference<::com::sun::star::document::XGraphicObjectResolver> & rGraphicObjects)473*b1cdbd2cSJim Jagielski SvXMLImport::SvXMLImport(
474*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
475*b1cdbd2cSJim Jagielski const Reference< XModel > & rModel,
476*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< ::com::sun::star::document::XGraphicObjectResolver > & rGraphicObjects ) throw ()
477*b1cdbd2cSJim Jagielski : mxModel( rModel ),
478*b1cdbd2cSJim Jagielski mxNumberFormatsSupplier (rModel, uno::UNO_QUERY),
479*b1cdbd2cSJim Jagielski mxGraphicResolver( rGraphicObjects ),
480*b1cdbd2cSJim Jagielski mpImpl( new SvXMLImport_Impl() ),
481*b1cdbd2cSJim Jagielski mpNamespaceMap( new SvXMLNamespaceMap ),
482*b1cdbd2cSJim Jagielski // #110680#
483*b1cdbd2cSJim Jagielski // pUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM ) ),
484*b1cdbd2cSJim Jagielski mpUnitConv( new SvXMLUnitConverter( MAP_100TH_MM, MAP_100TH_MM, xServiceFactory ) ),
485*b1cdbd2cSJim Jagielski mpContexts( new SvXMLImportContexts_Impl ),
486*b1cdbd2cSJim Jagielski mpNumImport( NULL ),
487*b1cdbd2cSJim Jagielski mpProgressBarHelper( NULL ),
488*b1cdbd2cSJim Jagielski mpEventImportHelper( NULL ),
489*b1cdbd2cSJim Jagielski mpXMLErrors( NULL ),
490*b1cdbd2cSJim Jagielski mpStyleMap(0),
491*b1cdbd2cSJim Jagielski mnImportFlags( IMPORT_ALL ),
492*b1cdbd2cSJim Jagielski mnErrorFlags(0),
493*b1cdbd2cSJim Jagielski // #110680#
494*b1cdbd2cSJim Jagielski mxServiceFactory(xServiceFactory),
495*b1cdbd2cSJim Jagielski mbIsFormsSupported( sal_True ),
496*b1cdbd2cSJim Jagielski mbIsGraphicLoadOnDemandSupported( true )
497*b1cdbd2cSJim Jagielski {
498*b1cdbd2cSJim Jagielski DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
499*b1cdbd2cSJim Jagielski _InitCtor();
500*b1cdbd2cSJim Jagielski }
501*b1cdbd2cSJim Jagielski
~SvXMLImport()502*b1cdbd2cSJim Jagielski SvXMLImport::~SvXMLImport() throw ()
503*b1cdbd2cSJim Jagielski {
504*b1cdbd2cSJim Jagielski delete mpXMLErrors;
505*b1cdbd2cSJim Jagielski delete mpNamespaceMap;
506*b1cdbd2cSJim Jagielski delete mpUnitConv;
507*b1cdbd2cSJim Jagielski delete mpEventImportHelper;
508*b1cdbd2cSJim Jagielski if( mpContexts )
509*b1cdbd2cSJim Jagielski {
510*b1cdbd2cSJim Jagielski while( mpContexts->Count() )
511*b1cdbd2cSJim Jagielski {
512*b1cdbd2cSJim Jagielski sal_uInt16 n = mpContexts->Count() - 1;
513*b1cdbd2cSJim Jagielski SvXMLImportContext *pContext = (*mpContexts)[n];
514*b1cdbd2cSJim Jagielski mpContexts->Remove( n, 1 );
515*b1cdbd2cSJim Jagielski if( pContext )
516*b1cdbd2cSJim Jagielski pContext->ReleaseRef();
517*b1cdbd2cSJim Jagielski }
518*b1cdbd2cSJim Jagielski delete mpContexts;
519*b1cdbd2cSJim Jagielski }
520*b1cdbd2cSJim Jagielski
521*b1cdbd2cSJim Jagielski // delete pImageMapImportHelper;
522*b1cdbd2cSJim Jagielski
523*b1cdbd2cSJim Jagielski // #i9518# the import component might not be deleted until after the document has been closed,
524*b1cdbd2cSJim Jagielski // so the stuff that accesses the document has been moved to endDocument.
525*b1cdbd2cSJim Jagielski
526*b1cdbd2cSJim Jagielski // pNumImport is allocated in the ctor, so it must also be deleted here in case the component
527*b1cdbd2cSJim Jagielski // is created and deleted without actually importing.
528*b1cdbd2cSJim Jagielski delete mpNumImport;
529*b1cdbd2cSJim Jagielski delete mpProgressBarHelper;
530*b1cdbd2cSJim Jagielski
531*b1cdbd2cSJim Jagielski xmloff::token::ResetTokens();
532*b1cdbd2cSJim Jagielski
533*b1cdbd2cSJim Jagielski if( mpImpl )
534*b1cdbd2cSJim Jagielski delete mpImpl;
535*b1cdbd2cSJim Jagielski
536*b1cdbd2cSJim Jagielski if (mxEventListener.is() && mxModel.is())
537*b1cdbd2cSJim Jagielski mxModel->removeEventListener(mxEventListener);
538*b1cdbd2cSJim Jagielski }
539*b1cdbd2cSJim Jagielski
540*b1cdbd2cSJim Jagielski // XUnoTunnel & co
getUnoTunnelId()541*b1cdbd2cSJim Jagielski const uno::Sequence< sal_Int8 > & SvXMLImport::getUnoTunnelId() throw()
542*b1cdbd2cSJim Jagielski {
543*b1cdbd2cSJim Jagielski static uno::Sequence< sal_Int8 > * pSeq = 0;
544*b1cdbd2cSJim Jagielski if( !pSeq )
545*b1cdbd2cSJim Jagielski {
546*b1cdbd2cSJim Jagielski Guard< Mutex > aGuard( Mutex::getGlobalMutex() );
547*b1cdbd2cSJim Jagielski if( !pSeq )
548*b1cdbd2cSJim Jagielski {
549*b1cdbd2cSJim Jagielski static uno::Sequence< sal_Int8 > aSeq( 16 );
550*b1cdbd2cSJim Jagielski rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
551*b1cdbd2cSJim Jagielski pSeq = &aSeq;
552*b1cdbd2cSJim Jagielski }
553*b1cdbd2cSJim Jagielski }
554*b1cdbd2cSJim Jagielski return *pSeq;
555*b1cdbd2cSJim Jagielski }
556*b1cdbd2cSJim Jagielski
getImplementation(uno::Reference<uno::XInterface> xInt)557*b1cdbd2cSJim Jagielski SvXMLImport* SvXMLImport::getImplementation( uno::Reference< uno::XInterface > xInt ) throw()
558*b1cdbd2cSJim Jagielski {
559*b1cdbd2cSJim Jagielski uno::Reference< lang::XUnoTunnel > xUT( xInt, uno::UNO_QUERY );
560*b1cdbd2cSJim Jagielski if( xUT.is() )
561*b1cdbd2cSJim Jagielski {
562*b1cdbd2cSJim Jagielski return
563*b1cdbd2cSJim Jagielski reinterpret_cast<SvXMLImport*>(
564*b1cdbd2cSJim Jagielski sal::static_int_cast<sal_IntPtr>(
565*b1cdbd2cSJim Jagielski xUT->getSomething( SvXMLImport::getUnoTunnelId())));
566*b1cdbd2cSJim Jagielski }
567*b1cdbd2cSJim Jagielski else
568*b1cdbd2cSJim Jagielski return NULL;
569*b1cdbd2cSJim Jagielski }
570*b1cdbd2cSJim Jagielski
571*b1cdbd2cSJim Jagielski // XUnoTunnel
getSomething(const uno::Sequence<sal_Int8> & rId)572*b1cdbd2cSJim Jagielski sal_Int64 SAL_CALL SvXMLImport::getSomething( const uno::Sequence< sal_Int8 >& rId )
573*b1cdbd2cSJim Jagielski throw( uno::RuntimeException )
574*b1cdbd2cSJim Jagielski {
575*b1cdbd2cSJim Jagielski if( rId.getLength() == 16 && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
576*b1cdbd2cSJim Jagielski rId.getConstArray(), 16 ) )
577*b1cdbd2cSJim Jagielski {
578*b1cdbd2cSJim Jagielski return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_uIntPtr>(this));
579*b1cdbd2cSJim Jagielski }
580*b1cdbd2cSJim Jagielski return 0;
581*b1cdbd2cSJim Jagielski }
582*b1cdbd2cSJim Jagielski
startDocument(void)583*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::startDocument( void )
584*b1cdbd2cSJim Jagielski throw( xml::sax::SAXException, uno::RuntimeException )
585*b1cdbd2cSJim Jagielski {
586*b1cdbd2cSJim Jagielski RTL_LOGFILE_TRACE_AUTHOR( "xmloff", LOGFILE_AUTHOR, "{ SvXMLImport::startDocument" );
587*b1cdbd2cSJim Jagielski
588*b1cdbd2cSJim Jagielski if( !mxGraphicResolver.is() || !mxEmbeddedResolver.is() )
589*b1cdbd2cSJim Jagielski {
590*b1cdbd2cSJim Jagielski Reference< lang::XMultiServiceFactory > xFactory( mxModel, UNO_QUERY );
591*b1cdbd2cSJim Jagielski if( xFactory.is() )
592*b1cdbd2cSJim Jagielski {
593*b1cdbd2cSJim Jagielski try
594*b1cdbd2cSJim Jagielski {
595*b1cdbd2cSJim Jagielski if( !mxGraphicResolver.is() )
596*b1cdbd2cSJim Jagielski {
597*b1cdbd2cSJim Jagielski mxGraphicResolver = Reference< XGraphicObjectResolver >::query(
598*b1cdbd2cSJim Jagielski xFactory->createInstance(
599*b1cdbd2cSJim Jagielski OUString(RTL_CONSTASCII_USTRINGPARAM(
600*b1cdbd2cSJim Jagielski // #99870# Import... instead of Export...
601*b1cdbd2cSJim Jagielski "com.sun.star.document.ImportGraphicObjectResolver"))));
602*b1cdbd2cSJim Jagielski mpImpl->mbOwnGraphicResolver = mxGraphicResolver.is();
603*b1cdbd2cSJim Jagielski }
604*b1cdbd2cSJim Jagielski
605*b1cdbd2cSJim Jagielski if( !mxEmbeddedResolver.is() )
606*b1cdbd2cSJim Jagielski {
607*b1cdbd2cSJim Jagielski mxEmbeddedResolver = Reference< XEmbeddedObjectResolver >::query(
608*b1cdbd2cSJim Jagielski xFactory->createInstance(
609*b1cdbd2cSJim Jagielski OUString(RTL_CONSTASCII_USTRINGPARAM(
610*b1cdbd2cSJim Jagielski // #99870# Import... instead of Export...
611*b1cdbd2cSJim Jagielski "com.sun.star.document.ImportEmbeddedObjectResolver"))));
612*b1cdbd2cSJim Jagielski mpImpl->mbOwnEmbeddedResolver = mxEmbeddedResolver.is();
613*b1cdbd2cSJim Jagielski }
614*b1cdbd2cSJim Jagielski }
615*b1cdbd2cSJim Jagielski catch( com::sun::star::uno::Exception& )
616*b1cdbd2cSJim Jagielski {
617*b1cdbd2cSJim Jagielski }
618*b1cdbd2cSJim Jagielski }
619*b1cdbd2cSJim Jagielski }
620*b1cdbd2cSJim Jagielski }
621*b1cdbd2cSJim Jagielski
endDocument(void)622*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::endDocument( void )
623*b1cdbd2cSJim Jagielski throw( xml::sax::SAXException, uno::RuntimeException)
624*b1cdbd2cSJim Jagielski {
625*b1cdbd2cSJim Jagielski RTL_LOGFILE_TRACE_AUTHOR( "xmloff", LOGFILE_AUTHOR, "} SvXMLImport::startDocument" );
626*b1cdbd2cSJim Jagielski
627*b1cdbd2cSJim Jagielski // #i9518# All the stuff that accesses the document has to be done here, not in the dtor,
628*b1cdbd2cSJim Jagielski // because the SvXMLImport dtor might not be called until after the document has been closed.
629*b1cdbd2cSJim Jagielski
630*b1cdbd2cSJim Jagielski if (mpImpl->mpRDFaHelper.get())
631*b1cdbd2cSJim Jagielski {
632*b1cdbd2cSJim Jagielski const uno::Reference<rdf::XRepositorySupplier> xRS(mxModel,
633*b1cdbd2cSJim Jagielski uno::UNO_QUERY);
634*b1cdbd2cSJim Jagielski if (xRS.is())
635*b1cdbd2cSJim Jagielski {
636*b1cdbd2cSJim Jagielski mpImpl->mpRDFaHelper->InsertRDFa( xRS );
637*b1cdbd2cSJim Jagielski }
638*b1cdbd2cSJim Jagielski }
639*b1cdbd2cSJim Jagielski
640*b1cdbd2cSJim Jagielski if (mpNumImport)
641*b1cdbd2cSJim Jagielski {
642*b1cdbd2cSJim Jagielski delete mpNumImport;
643*b1cdbd2cSJim Jagielski mpNumImport = NULL;
644*b1cdbd2cSJim Jagielski }
645*b1cdbd2cSJim Jagielski if (mxImportInfo.is())
646*b1cdbd2cSJim Jagielski {
647*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = mxImportInfo->getPropertySetInfo();
648*b1cdbd2cSJim Jagielski if (xPropertySetInfo.is())
649*b1cdbd2cSJim Jagielski {
650*b1cdbd2cSJim Jagielski if (mpProgressBarHelper)
651*b1cdbd2cSJim Jagielski {
652*b1cdbd2cSJim Jagielski OUString sProgressMax(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSMAX));
653*b1cdbd2cSJim Jagielski OUString sProgressCurrent(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSCURRENT));
654*b1cdbd2cSJim Jagielski OUString sRepeat(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSREPEAT));
655*b1cdbd2cSJim Jagielski if (xPropertySetInfo->hasPropertyByName(sProgressMax) &&
656*b1cdbd2cSJim Jagielski xPropertySetInfo->hasPropertyByName(sProgressCurrent))
657*b1cdbd2cSJim Jagielski {
658*b1cdbd2cSJim Jagielski sal_Int32 nProgressMax(mpProgressBarHelper->GetReference());
659*b1cdbd2cSJim Jagielski sal_Int32 nProgressCurrent(mpProgressBarHelper->GetValue());
660*b1cdbd2cSJim Jagielski uno::Any aAny;
661*b1cdbd2cSJim Jagielski aAny <<= nProgressMax;
662*b1cdbd2cSJim Jagielski mxImportInfo->setPropertyValue(sProgressMax, aAny);
663*b1cdbd2cSJim Jagielski aAny <<= nProgressCurrent;
664*b1cdbd2cSJim Jagielski mxImportInfo->setPropertyValue(sProgressCurrent, aAny);
665*b1cdbd2cSJim Jagielski }
666*b1cdbd2cSJim Jagielski if (xPropertySetInfo->hasPropertyByName(sRepeat))
667*b1cdbd2cSJim Jagielski mxImportInfo->setPropertyValue(sRepeat, cppu::bool2any(mpProgressBarHelper->GetRepeat()));
668*b1cdbd2cSJim Jagielski // pProgressBarHelper is deleted in dtor
669*b1cdbd2cSJim Jagielski }
670*b1cdbd2cSJim Jagielski OUString sNumberStyles(RTL_CONSTASCII_USTRINGPARAM(XML_NUMBERSTYLES));
671*b1cdbd2cSJim Jagielski if (mxNumberStyles.is() && xPropertySetInfo->hasPropertyByName(sNumberStyles))
672*b1cdbd2cSJim Jagielski {
673*b1cdbd2cSJim Jagielski uno::Any aAny;
674*b1cdbd2cSJim Jagielski aAny <<= mxNumberStyles;
675*b1cdbd2cSJim Jagielski mxImportInfo->setPropertyValue(sNumberStyles, aAny);
676*b1cdbd2cSJim Jagielski }
677*b1cdbd2cSJim Jagielski }
678*b1cdbd2cSJim Jagielski }
679*b1cdbd2cSJim Jagielski
680*b1cdbd2cSJim Jagielski if( mxFontDecls.Is() )
681*b1cdbd2cSJim Jagielski ((SvXMLStylesContext *)&mxFontDecls)->Clear();
682*b1cdbd2cSJim Jagielski if( mxStyles.Is() )
683*b1cdbd2cSJim Jagielski ((SvXMLStylesContext *)&mxStyles)->Clear();
684*b1cdbd2cSJim Jagielski if( mxAutoStyles.Is() )
685*b1cdbd2cSJim Jagielski ((SvXMLStylesContext *)&mxAutoStyles)->Clear();
686*b1cdbd2cSJim Jagielski if( mxMasterStyles.Is() )
687*b1cdbd2cSJim Jagielski ((SvXMLStylesContext *)&mxMasterStyles)->Clear();
688*b1cdbd2cSJim Jagielski
689*b1cdbd2cSJim Jagielski // possible form-layer related knittings which can only be done when
690*b1cdbd2cSJim Jagielski // the whole document exists
691*b1cdbd2cSJim Jagielski if ( mxFormImport.is() )
692*b1cdbd2cSJim Jagielski mxFormImport->documentDone();
693*b1cdbd2cSJim Jagielski
694*b1cdbd2cSJim Jagielski // The shape import helper does the z-order sorting in the dtor,
695*b1cdbd2cSJim Jagielski // so it must be deleted here, too.
696*b1cdbd2cSJim Jagielski mxShapeImport = NULL;
697*b1cdbd2cSJim Jagielski
698*b1cdbd2cSJim Jagielski if( mpImpl->mbOwnGraphicResolver )
699*b1cdbd2cSJim Jagielski {
700*b1cdbd2cSJim Jagielski Reference< lang::XComponent > xComp( mxGraphicResolver, UNO_QUERY );
701*b1cdbd2cSJim Jagielski xComp->dispose();
702*b1cdbd2cSJim Jagielski }
703*b1cdbd2cSJim Jagielski
704*b1cdbd2cSJim Jagielski if( mpImpl->mbOwnEmbeddedResolver )
705*b1cdbd2cSJim Jagielski {
706*b1cdbd2cSJim Jagielski Reference< lang::XComponent > xComp( mxEmbeddedResolver, UNO_QUERY );
707*b1cdbd2cSJim Jagielski xComp->dispose();
708*b1cdbd2cSJim Jagielski }
709*b1cdbd2cSJim Jagielski if( mpStyleMap )
710*b1cdbd2cSJim Jagielski {
711*b1cdbd2cSJim Jagielski mpStyleMap->release();
712*b1cdbd2cSJim Jagielski mpStyleMap = 0;
713*b1cdbd2cSJim Jagielski }
714*b1cdbd2cSJim Jagielski
715*b1cdbd2cSJim Jagielski if ( mpXMLErrors != NULL )
716*b1cdbd2cSJim Jagielski {
717*b1cdbd2cSJim Jagielski mpXMLErrors->ThrowErrorAsSAXException( XMLERROR_FLAG_SEVERE );
718*b1cdbd2cSJim Jagielski }
719*b1cdbd2cSJim Jagielski }
720*b1cdbd2cSJim Jagielski
startElement(const OUString & rName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)721*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::startElement( const OUString& rName,
722*b1cdbd2cSJim Jagielski const uno::Reference< xml::sax::XAttributeList >& xAttrList )
723*b1cdbd2cSJim Jagielski throw(xml::sax::SAXException, uno::RuntimeException)
724*b1cdbd2cSJim Jagielski {
725*b1cdbd2cSJim Jagielski SvXMLNamespaceMap *pRewindMap = 0;
726*b1cdbd2cSJim Jagielski
727*b1cdbd2cSJim Jagielski // Process namespace attributes. This must happen before creating the
728*b1cdbd2cSJim Jagielski // context, because namespace decaration apply to the element name itself.
729*b1cdbd2cSJim Jagielski sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
730*b1cdbd2cSJim Jagielski for( sal_Int16 i=0; i < nAttrCount; i++ )
731*b1cdbd2cSJim Jagielski {
732*b1cdbd2cSJim Jagielski const OUString& rAttrName = xAttrList->getNameByIndex( i );
733*b1cdbd2cSJim Jagielski if ( rAttrName.equalsAscii("office:version") )
734*b1cdbd2cSJim Jagielski {
735*b1cdbd2cSJim Jagielski mpImpl->aODFVersion = xAttrList->getValueByIndex( i );
736*b1cdbd2cSJim Jagielski
737*b1cdbd2cSJim Jagielski // the ODF version in content.xml and manifest.xml must be the same starting from ODF1.2
738*b1cdbd2cSJim Jagielski if ( mpImpl->mStreamName.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "content.xml" ) ) )
739*b1cdbd2cSJim Jagielski && !IsODFVersionConsistent( mpImpl->aODFVersion ) )
740*b1cdbd2cSJim Jagielski {
741*b1cdbd2cSJim Jagielski throw xml::sax::SAXException(
742*b1cdbd2cSJim Jagielski ::rtl::OUString(
743*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM( "Inconsistent ODF versions in content.xml and manifest.xml!" ) ),
744*b1cdbd2cSJim Jagielski uno::Reference< uno::XInterface >(),
745*b1cdbd2cSJim Jagielski uno::makeAny(
746*b1cdbd2cSJim Jagielski packages::zip::ZipIOException(
747*b1cdbd2cSJim Jagielski ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
748*b1cdbd2cSJim Jagielski "Inconsistent ODF versions in content.xml and manifest.xml!" ) ),
749*b1cdbd2cSJim Jagielski Reference< XInterface >() ) ) );
750*b1cdbd2cSJim Jagielski }
751*b1cdbd2cSJim Jagielski }
752*b1cdbd2cSJim Jagielski else if( ( rAttrName.getLength() >= 5 ) &&
753*b1cdbd2cSJim Jagielski ( rAttrName.compareTo( GetXMLToken(XML_XMLNS), 5 ) == 0 ) &&
754*b1cdbd2cSJim Jagielski ( rAttrName.getLength() == 5 || ':' == rAttrName[5] ) )
755*b1cdbd2cSJim Jagielski {
756*b1cdbd2cSJim Jagielski if( !pRewindMap )
757*b1cdbd2cSJim Jagielski {
758*b1cdbd2cSJim Jagielski pRewindMap = mpNamespaceMap;
759*b1cdbd2cSJim Jagielski mpNamespaceMap = new SvXMLNamespaceMap( *mpNamespaceMap );
760*b1cdbd2cSJim Jagielski }
761*b1cdbd2cSJim Jagielski const OUString& rAttrValue = xAttrList->getValueByIndex( i );
762*b1cdbd2cSJim Jagielski
763*b1cdbd2cSJim Jagielski OUString aPrefix( ( rAttrName.getLength() == 5 )
764*b1cdbd2cSJim Jagielski ? OUString()
765*b1cdbd2cSJim Jagielski : rAttrName.copy( 6 ) );
766*b1cdbd2cSJim Jagielski // Add namespace, but only if it is known.
767*b1cdbd2cSJim Jagielski sal_uInt16 nKey = mpNamespaceMap->AddIfKnown( aPrefix, rAttrValue );
768*b1cdbd2cSJim Jagielski // If namespace is unknwon, try to match a name with similar
769*b1cdbd2cSJim Jagielski // TC Id an version
770*b1cdbd2cSJim Jagielski if( XML_NAMESPACE_UNKNOWN == nKey )
771*b1cdbd2cSJim Jagielski {
772*b1cdbd2cSJim Jagielski OUString aTestName( rAttrValue );
773*b1cdbd2cSJim Jagielski if( SvXMLNamespaceMap::NormalizeURI( aTestName ) )
774*b1cdbd2cSJim Jagielski nKey = mpNamespaceMap->AddIfKnown( aPrefix, aTestName );
775*b1cdbd2cSJim Jagielski }
776*b1cdbd2cSJim Jagielski // If that namespace is not known, too, add it as unknown
777*b1cdbd2cSJim Jagielski if( XML_NAMESPACE_UNKNOWN == nKey )
778*b1cdbd2cSJim Jagielski mpNamespaceMap->Add( aPrefix, rAttrValue );
779*b1cdbd2cSJim Jagielski
780*b1cdbd2cSJim Jagielski }
781*b1cdbd2cSJim Jagielski }
782*b1cdbd2cSJim Jagielski
783*b1cdbd2cSJim Jagielski // Get element's namespace and local name.
784*b1cdbd2cSJim Jagielski OUString aLocalName;
785*b1cdbd2cSJim Jagielski sal_uInt16 nPrefix =
786*b1cdbd2cSJim Jagielski mpNamespaceMap->GetKeyByAttrName( rName, &aLocalName );
787*b1cdbd2cSJim Jagielski
788*b1cdbd2cSJim Jagielski // If there are contexts already, call a CreateChildContext at the topmost
789*b1cdbd2cSJim Jagielski // context. Otherwise, create a default context.
790*b1cdbd2cSJim Jagielski SvXMLImportContext *pContext;
791*b1cdbd2cSJim Jagielski sal_uInt16 nCount = mpContexts->Count();
792*b1cdbd2cSJim Jagielski if( nCount > 0 )
793*b1cdbd2cSJim Jagielski {
794*b1cdbd2cSJim Jagielski pContext = (*mpContexts)[nCount - 1]->CreateChildContext( nPrefix,
795*b1cdbd2cSJim Jagielski aLocalName,
796*b1cdbd2cSJim Jagielski xAttrList );
797*b1cdbd2cSJim Jagielski DBG_ASSERT( pContext && pContext->GetPrefix() == nPrefix,
798*b1cdbd2cSJim Jagielski "SvXMLImport::startElement: created context has wrong prefix" );
799*b1cdbd2cSJim Jagielski }
800*b1cdbd2cSJim Jagielski else
801*b1cdbd2cSJim Jagielski {
802*b1cdbd2cSJim Jagielski #ifdef TIMELOG
803*b1cdbd2cSJim Jagielski // If we do profiling, we want a trace message for the first element
804*b1cdbd2cSJim Jagielski // in order to identify the stream.
805*b1cdbd2cSJim Jagielski ByteString aString( (String)rName, RTL_TEXTENCODING_ASCII_US );
806*b1cdbd2cSJim Jagielski RTL_LOGFILE_TRACE_AUTHOR1( "xmloff", LOGFILE_AUTHOR,
807*b1cdbd2cSJim Jagielski "SvXMLImport::StartElement( \"%s\", ... )",
808*b1cdbd2cSJim Jagielski aString.GetBuffer() );
809*b1cdbd2cSJim Jagielski #endif
810*b1cdbd2cSJim Jagielski
811*b1cdbd2cSJim Jagielski pContext = CreateContext( nPrefix, aLocalName, xAttrList );
812*b1cdbd2cSJim Jagielski if( (nPrefix & XML_NAMESPACE_UNKNOWN_FLAG) != 0 &&
813*b1cdbd2cSJim Jagielski IS_TYPE( SvXMLImportContext, pContext ) )
814*b1cdbd2cSJim Jagielski {
815*b1cdbd2cSJim Jagielski OUString aMsg( RTL_CONSTASCII_USTRINGPARAM( "Root element unknown" ) );
816*b1cdbd2cSJim Jagielski Reference<xml::sax::XLocator> xDummyLocator;
817*b1cdbd2cSJim Jagielski Sequence < OUString > aParams(1);
818*b1cdbd2cSJim Jagielski aParams.getArray()[0] = rName;
819*b1cdbd2cSJim Jagielski
820*b1cdbd2cSJim Jagielski SetError( XMLERROR_FLAG_SEVERE|XMLERROR_UNKNWON_ROOT,
821*b1cdbd2cSJim Jagielski aParams, aMsg, xDummyLocator );
822*b1cdbd2cSJim Jagielski }
823*b1cdbd2cSJim Jagielski }
824*b1cdbd2cSJim Jagielski
825*b1cdbd2cSJim Jagielski DBG_ASSERT( pContext, "SvXMLImport::startElement: missing context" );
826*b1cdbd2cSJim Jagielski if( !pContext )
827*b1cdbd2cSJim Jagielski pContext = new SvXMLImportContext( *this, nPrefix, aLocalName );
828*b1cdbd2cSJim Jagielski
829*b1cdbd2cSJim Jagielski pContext->AddRef();
830*b1cdbd2cSJim Jagielski
831*b1cdbd2cSJim Jagielski // Remeber old namespace map.
832*b1cdbd2cSJim Jagielski if( pRewindMap )
833*b1cdbd2cSJim Jagielski pContext->SetRewindMap( pRewindMap );
834*b1cdbd2cSJim Jagielski
835*b1cdbd2cSJim Jagielski // Call a startElement at the new context.
836*b1cdbd2cSJim Jagielski pContext->StartElement( xAttrList );
837*b1cdbd2cSJim Jagielski
838*b1cdbd2cSJim Jagielski // Push context on stack.
839*b1cdbd2cSJim Jagielski mpContexts->Insert( pContext, nCount );
840*b1cdbd2cSJim Jagielski }
841*b1cdbd2cSJim Jagielski
endElement(const OUString & rName)842*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::endElement( const OUString&
843*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
844*b1cdbd2cSJim Jagielski rName
845*b1cdbd2cSJim Jagielski #endif
846*b1cdbd2cSJim Jagielski )
847*b1cdbd2cSJim Jagielski throw(xml::sax::SAXException, uno::RuntimeException)
848*b1cdbd2cSJim Jagielski {
849*b1cdbd2cSJim Jagielski sal_uInt16 nCount = mpContexts->Count();
850*b1cdbd2cSJim Jagielski DBG_ASSERT( nCount, "SvXMLImport::endElement: no context left" );
851*b1cdbd2cSJim Jagielski if( nCount > 0 )
852*b1cdbd2cSJim Jagielski {
853*b1cdbd2cSJim Jagielski // Get topmost context and remove it from the stack.
854*b1cdbd2cSJim Jagielski SvXMLImportContext *pContext = (*mpContexts)[nCount-1];
855*b1cdbd2cSJim Jagielski mpContexts->Remove( nCount-1, 1 );
856*b1cdbd2cSJim Jagielski
857*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
858*b1cdbd2cSJim Jagielski // Non product only: check if endElement call matches startELement call.
859*b1cdbd2cSJim Jagielski OUString aLocalName;
860*b1cdbd2cSJim Jagielski sal_uInt16 nPrefix =
861*b1cdbd2cSJim Jagielski mpNamespaceMap->GetKeyByAttrName( rName, &aLocalName );
862*b1cdbd2cSJim Jagielski DBG_ASSERT( pContext->GetPrefix() == nPrefix,
863*b1cdbd2cSJim Jagielski "SvXMLImport::endElement: popped context has wrong prefix" );
864*b1cdbd2cSJim Jagielski DBG_ASSERT( pContext->GetLocalName() == aLocalName,
865*b1cdbd2cSJim Jagielski "SvXMLImport::endElement: popped context has wrong lname" );
866*b1cdbd2cSJim Jagielski #endif
867*b1cdbd2cSJim Jagielski
868*b1cdbd2cSJim Jagielski // Call a EndElement at the current context.
869*b1cdbd2cSJim Jagielski pContext->EndElement();
870*b1cdbd2cSJim Jagielski
871*b1cdbd2cSJim Jagielski // Get a namespace map to rewind.
872*b1cdbd2cSJim Jagielski SvXMLNamespaceMap *pRewindMap = pContext->GetRewindMap();
873*b1cdbd2cSJim Jagielski
874*b1cdbd2cSJim Jagielski // Delete the current context.
875*b1cdbd2cSJim Jagielski pContext->ReleaseRef();
876*b1cdbd2cSJim Jagielski pContext = 0;
877*b1cdbd2cSJim Jagielski
878*b1cdbd2cSJim Jagielski // Rewind a namespace map.
879*b1cdbd2cSJim Jagielski if( pRewindMap )
880*b1cdbd2cSJim Jagielski {
881*b1cdbd2cSJim Jagielski delete mpNamespaceMap;
882*b1cdbd2cSJim Jagielski mpNamespaceMap = pRewindMap;
883*b1cdbd2cSJim Jagielski }
884*b1cdbd2cSJim Jagielski }
885*b1cdbd2cSJim Jagielski }
886*b1cdbd2cSJim Jagielski
characters(const OUString & rChars)887*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::characters( const OUString& rChars )
888*b1cdbd2cSJim Jagielski throw(xml::sax::SAXException, uno::RuntimeException)
889*b1cdbd2cSJim Jagielski {
890*b1cdbd2cSJim Jagielski sal_uInt16 nCount = mpContexts->Count();
891*b1cdbd2cSJim Jagielski if( nCount > 0 )
892*b1cdbd2cSJim Jagielski {
893*b1cdbd2cSJim Jagielski (*mpContexts)[nCount - 1]->Characters( rChars );
894*b1cdbd2cSJim Jagielski }
895*b1cdbd2cSJim Jagielski }
896*b1cdbd2cSJim Jagielski
ignorableWhitespace(const OUString &)897*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::ignorableWhitespace( const OUString& )
898*b1cdbd2cSJim Jagielski throw(xml::sax::SAXException, uno::RuntimeException)
899*b1cdbd2cSJim Jagielski {
900*b1cdbd2cSJim Jagielski }
901*b1cdbd2cSJim Jagielski
processingInstruction(const OUString &,const OUString &)902*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::processingInstruction( const OUString&,
903*b1cdbd2cSJim Jagielski const OUString& )
904*b1cdbd2cSJim Jagielski throw(xml::sax::SAXException, uno::RuntimeException)
905*b1cdbd2cSJim Jagielski {
906*b1cdbd2cSJim Jagielski }
907*b1cdbd2cSJim Jagielski
setDocumentLocator(const uno::Reference<xml::sax::XLocator> & rLocator)908*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::setDocumentLocator( const uno::Reference< xml::sax::XLocator >& rLocator )
909*b1cdbd2cSJim Jagielski throw(xml::sax::SAXException, uno::RuntimeException)
910*b1cdbd2cSJim Jagielski {
911*b1cdbd2cSJim Jagielski mxLocator = rLocator;
912*b1cdbd2cSJim Jagielski }
913*b1cdbd2cSJim Jagielski
914*b1cdbd2cSJim Jagielski // XExtendedDocumentHandler
startCDATA(void)915*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::startCDATA( void ) throw(xml::sax::SAXException, uno::RuntimeException)
916*b1cdbd2cSJim Jagielski {
917*b1cdbd2cSJim Jagielski }
918*b1cdbd2cSJim Jagielski
endCDATA(void)919*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::endCDATA( void ) throw(uno::RuntimeException)
920*b1cdbd2cSJim Jagielski {
921*b1cdbd2cSJim Jagielski }
922*b1cdbd2cSJim Jagielski
comment(const OUString &)923*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::comment( const OUString& )
924*b1cdbd2cSJim Jagielski throw(xml::sax::SAXException, uno::RuntimeException)
925*b1cdbd2cSJim Jagielski {
926*b1cdbd2cSJim Jagielski }
927*b1cdbd2cSJim Jagielski
allowLineBreak(void)928*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::allowLineBreak( void )
929*b1cdbd2cSJim Jagielski throw(xml::sax::SAXException, uno::RuntimeException)
930*b1cdbd2cSJim Jagielski {
931*b1cdbd2cSJim Jagielski }
932*b1cdbd2cSJim Jagielski
unknown(const OUString &)933*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::unknown( const OUString& )
934*b1cdbd2cSJim Jagielski throw(xml::sax::SAXException, uno::RuntimeException)
935*b1cdbd2cSJim Jagielski {
936*b1cdbd2cSJim Jagielski }
937*b1cdbd2cSJim Jagielski
SetStatistics(const uno::Sequence<beans::NamedValue> &)938*b1cdbd2cSJim Jagielski void SvXMLImport::SetStatistics(const uno::Sequence< beans::NamedValue> &)
939*b1cdbd2cSJim Jagielski {
940*b1cdbd2cSJim Jagielski GetProgressBarHelper()->SetRepeat(sal_False);
941*b1cdbd2cSJim Jagielski GetProgressBarHelper()->SetReference(0);
942*b1cdbd2cSJim Jagielski }
943*b1cdbd2cSJim Jagielski
944*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
945*b1cdbd2cSJim Jagielski
946*b1cdbd2cSJim Jagielski // XImporter
setTargetDocument(const uno::Reference<lang::XComponent> & xDoc)947*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::setTargetDocument( const uno::Reference< lang::XComponent >& xDoc )
948*b1cdbd2cSJim Jagielski throw(lang::IllegalArgumentException, uno::RuntimeException)
949*b1cdbd2cSJim Jagielski {
950*b1cdbd2cSJim Jagielski mxModel = uno::Reference< frame::XModel >::query( xDoc );
951*b1cdbd2cSJim Jagielski if( !mxModel.is() )
952*b1cdbd2cSJim Jagielski throw lang::IllegalArgumentException();
953*b1cdbd2cSJim Jagielski if (mxModel.is() && !mxEventListener.is())
954*b1cdbd2cSJim Jagielski {
955*b1cdbd2cSJim Jagielski mxEventListener.set(new SvXMLImportEventListener(this));
956*b1cdbd2cSJim Jagielski mxModel->addEventListener(mxEventListener);
957*b1cdbd2cSJim Jagielski }
958*b1cdbd2cSJim Jagielski
959*b1cdbd2cSJim Jagielski DBG_ASSERT( !mpNumImport, "number format import already exists." );
960*b1cdbd2cSJim Jagielski if( mpNumImport )
961*b1cdbd2cSJim Jagielski {
962*b1cdbd2cSJim Jagielski delete mpNumImport;
963*b1cdbd2cSJim Jagielski mpNumImport = 0;
964*b1cdbd2cSJim Jagielski }
965*b1cdbd2cSJim Jagielski }
966*b1cdbd2cSJim Jagielski
967*b1cdbd2cSJim Jagielski // XFilter
filter(const uno::Sequence<beans::PropertyValue> &)968*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvXMLImport::filter( const uno::Sequence< beans::PropertyValue >& )
969*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
970*b1cdbd2cSJim Jagielski {
971*b1cdbd2cSJim Jagielski return sal_False;
972*b1cdbd2cSJim Jagielski }
973*b1cdbd2cSJim Jagielski
cancel()974*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::cancel( )
975*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
976*b1cdbd2cSJim Jagielski {
977*b1cdbd2cSJim Jagielski }
978*b1cdbd2cSJim Jagielski
979*b1cdbd2cSJim Jagielski // XInitialize
initialize(const uno::Sequence<uno::Any> & aArguments)980*b1cdbd2cSJim Jagielski void SAL_CALL SvXMLImport::initialize( const uno::Sequence< uno::Any >& aArguments )
981*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
982*b1cdbd2cSJim Jagielski {
983*b1cdbd2cSJim Jagielski const sal_Int32 nAnyCount = aArguments.getLength();
984*b1cdbd2cSJim Jagielski const uno::Any* pAny = aArguments.getConstArray();
985*b1cdbd2cSJim Jagielski
986*b1cdbd2cSJim Jagielski for( sal_Int32 nIndex = 0; nIndex < nAnyCount; nIndex++, pAny++ )
987*b1cdbd2cSJim Jagielski {
988*b1cdbd2cSJim Jagielski Reference<XInterface> xValue;
989*b1cdbd2cSJim Jagielski *pAny >>= xValue;
990*b1cdbd2cSJim Jagielski
991*b1cdbd2cSJim Jagielski uno::Reference<task::XStatusIndicator> xTmpStatusIndicator(
992*b1cdbd2cSJim Jagielski xValue, UNO_QUERY );
993*b1cdbd2cSJim Jagielski if( xTmpStatusIndicator.is() )
994*b1cdbd2cSJim Jagielski mxStatusIndicator = xTmpStatusIndicator;
995*b1cdbd2cSJim Jagielski
996*b1cdbd2cSJim Jagielski uno::Reference<document::XGraphicObjectResolver> xTmpGraphicResolver(
997*b1cdbd2cSJim Jagielski xValue, UNO_QUERY );
998*b1cdbd2cSJim Jagielski if( xTmpGraphicResolver.is() )
999*b1cdbd2cSJim Jagielski mxGraphicResolver = xTmpGraphicResolver;
1000*b1cdbd2cSJim Jagielski
1001*b1cdbd2cSJim Jagielski uno::Reference<document::XEmbeddedObjectResolver> xTmpObjectResolver(
1002*b1cdbd2cSJim Jagielski xValue, UNO_QUERY );
1003*b1cdbd2cSJim Jagielski if( xTmpObjectResolver.is() )
1004*b1cdbd2cSJim Jagielski mxEmbeddedResolver = xTmpObjectResolver;
1005*b1cdbd2cSJim Jagielski
1006*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySet> xTmpPropSet( xValue, UNO_QUERY );
1007*b1cdbd2cSJim Jagielski if( xTmpPropSet.is() )
1008*b1cdbd2cSJim Jagielski {
1009*b1cdbd2cSJim Jagielski mxImportInfo = xTmpPropSet;
1010*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = mxImportInfo->getPropertySetInfo();
1011*b1cdbd2cSJim Jagielski if (xPropertySetInfo.is())
1012*b1cdbd2cSJim Jagielski {
1013*b1cdbd2cSJim Jagielski OUString sPropName(RTL_CONSTASCII_USTRINGPARAM(XML_NUMBERSTYLES));
1014*b1cdbd2cSJim Jagielski if (xPropertySetInfo->hasPropertyByName(sPropName))
1015*b1cdbd2cSJim Jagielski {
1016*b1cdbd2cSJim Jagielski uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1017*b1cdbd2cSJim Jagielski aAny >>= mxNumberStyles;
1018*b1cdbd2cSJim Jagielski }
1019*b1cdbd2cSJim Jagielski
1020*b1cdbd2cSJim Jagielski sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("PrivateData" ) );
1021*b1cdbd2cSJim Jagielski if (xPropertySetInfo->hasPropertyByName(sPropName))
1022*b1cdbd2cSJim Jagielski {
1023*b1cdbd2cSJim Jagielski Reference < XInterface > xIfc;
1024*b1cdbd2cSJim Jagielski uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1025*b1cdbd2cSJim Jagielski aAny >>= xIfc;
1026*b1cdbd2cSJim Jagielski
1027*b1cdbd2cSJim Jagielski StyleMap *pSMap = StyleMap::getImplementation( xIfc );
1028*b1cdbd2cSJim Jagielski if( pSMap )
1029*b1cdbd2cSJim Jagielski {
1030*b1cdbd2cSJim Jagielski mpStyleMap = pSMap;
1031*b1cdbd2cSJim Jagielski mpStyleMap->acquire();
1032*b1cdbd2cSJim Jagielski }
1033*b1cdbd2cSJim Jagielski }
1034*b1cdbd2cSJim Jagielski OUString sBaseURI;
1035*b1cdbd2cSJim Jagielski sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("BaseURI" ) );
1036*b1cdbd2cSJim Jagielski if (xPropertySetInfo->hasPropertyByName(sPropName))
1037*b1cdbd2cSJim Jagielski {
1038*b1cdbd2cSJim Jagielski uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1039*b1cdbd2cSJim Jagielski aAny >>= sBaseURI;
1040*b1cdbd2cSJim Jagielski mpImpl->aBaseURL.SetURL( sBaseURI );
1041*b1cdbd2cSJim Jagielski mpImpl->aDocBase.SetURL( sBaseURI );
1042*b1cdbd2cSJim Jagielski }
1043*b1cdbd2cSJim Jagielski OUString sRelPath;
1044*b1cdbd2cSJim Jagielski sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("StreamRelPath" ) );
1045*b1cdbd2cSJim Jagielski if( xPropertySetInfo->hasPropertyByName(sPropName) )
1046*b1cdbd2cSJim Jagielski {
1047*b1cdbd2cSJim Jagielski uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1048*b1cdbd2cSJim Jagielski aAny >>= sRelPath;
1049*b1cdbd2cSJim Jagielski }
1050*b1cdbd2cSJim Jagielski OUString sName;
1051*b1cdbd2cSJim Jagielski sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("StreamName" ) );
1052*b1cdbd2cSJim Jagielski if( xPropertySetInfo->hasPropertyByName(sPropName) )
1053*b1cdbd2cSJim Jagielski {
1054*b1cdbd2cSJim Jagielski uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1055*b1cdbd2cSJim Jagielski aAny >>= sName;
1056*b1cdbd2cSJim Jagielski }
1057*b1cdbd2cSJim Jagielski if( sBaseURI.getLength() && sName.getLength() )
1058*b1cdbd2cSJim Jagielski {
1059*b1cdbd2cSJim Jagielski if( sRelPath.getLength() )
1060*b1cdbd2cSJim Jagielski mpImpl->aBaseURL.insertName( sRelPath );
1061*b1cdbd2cSJim Jagielski mpImpl->aBaseURL.insertName( sName );
1062*b1cdbd2cSJim Jagielski }
1063*b1cdbd2cSJim Jagielski mpImpl->mStreamName = sName; // Note: may be empty (XSLT)
1064*b1cdbd2cSJim Jagielski // --> OD 2004-08-10 #i28749# - retrieve property <ShapePositionInHoriL2R>
1065*b1cdbd2cSJim Jagielski sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("ShapePositionInHoriL2R" ) );
1066*b1cdbd2cSJim Jagielski if( xPropertySetInfo->hasPropertyByName(sPropName) )
1067*b1cdbd2cSJim Jagielski {
1068*b1cdbd2cSJim Jagielski uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1069*b1cdbd2cSJim Jagielski aAny >>= (mpImpl->mbShapePositionInHoriL2R);
1070*b1cdbd2cSJim Jagielski }
1071*b1cdbd2cSJim Jagielski // <--
1072*b1cdbd2cSJim Jagielski // --> OD 2007-12-19 #152540#
1073*b1cdbd2cSJim Jagielski sPropName = OUString( RTL_CONSTASCII_USTRINGPARAM("TextDocInOOoFileFormat" ) );
1074*b1cdbd2cSJim Jagielski if( xPropertySetInfo->hasPropertyByName(sPropName) )
1075*b1cdbd2cSJim Jagielski {
1076*b1cdbd2cSJim Jagielski uno::Any aAny = mxImportInfo->getPropertyValue(sPropName);
1077*b1cdbd2cSJim Jagielski aAny >>= (mpImpl->mbTextDocInOOoFileFormat);
1078*b1cdbd2cSJim Jagielski }
1079*b1cdbd2cSJim Jagielski // <--
1080*b1cdbd2cSJim Jagielski }
1081*b1cdbd2cSJim Jagielski }
1082*b1cdbd2cSJim Jagielski }
1083*b1cdbd2cSJim Jagielski }
1084*b1cdbd2cSJim Jagielski
1085*b1cdbd2cSJim Jagielski // XServiceInfo
getImplementationName()1086*b1cdbd2cSJim Jagielski OUString SAL_CALL SvXMLImport::getImplementationName()
1087*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1088*b1cdbd2cSJim Jagielski {
1089*b1cdbd2cSJim Jagielski OUString aStr;
1090*b1cdbd2cSJim Jagielski return aStr;
1091*b1cdbd2cSJim Jagielski }
1092*b1cdbd2cSJim Jagielski
supportsService(const OUString & rServiceName)1093*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL SvXMLImport::supportsService( const OUString& rServiceName )
1094*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException)
1095*b1cdbd2cSJim Jagielski {
1096*b1cdbd2cSJim Jagielski return
1097*b1cdbd2cSJim Jagielski rServiceName.equalsAsciiL(
1098*b1cdbd2cSJim Jagielski "com.sun.star.document.ImportFilter",
1099*b1cdbd2cSJim Jagielski sizeof("com.sun.star.document.ImportFilter")-1 ) ||
1100*b1cdbd2cSJim Jagielski rServiceName.equalsAsciiL(
1101*b1cdbd2cSJim Jagielski "com.sun.star.xml.XMLImportFilter",
1102*b1cdbd2cSJim Jagielski sizeof("com.sun.star.xml.XMLImportFilter")-1);
1103*b1cdbd2cSJim Jagielski }
1104*b1cdbd2cSJim Jagielski
getSupportedServiceNames()1105*b1cdbd2cSJim Jagielski uno::Sequence< OUString > SAL_CALL SvXMLImport::getSupportedServiceNames( )
1106*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1107*b1cdbd2cSJim Jagielski {
1108*b1cdbd2cSJim Jagielski uno::Sequence<OUString> aSeq(2);
1109*b1cdbd2cSJim Jagielski aSeq[0] = OUString(
1110*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.ImportFilter"));
1111*b1cdbd2cSJim Jagielski aSeq[1] = OUString(
1112*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.XMLImportFilter"));
1113*b1cdbd2cSJim Jagielski return aSeq;
1114*b1cdbd2cSJim Jagielski }
1115*b1cdbd2cSJim Jagielski
1116*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////
1117*b1cdbd2cSJim Jagielski
CreateTextImport()1118*b1cdbd2cSJim Jagielski XMLTextImportHelper* SvXMLImport::CreateTextImport()
1119*b1cdbd2cSJim Jagielski {
1120*b1cdbd2cSJim Jagielski return new XMLTextImportHelper( mxModel, *this );
1121*b1cdbd2cSJim Jagielski }
1122*b1cdbd2cSJim Jagielski
CreateShapeImport()1123*b1cdbd2cSJim Jagielski XMLShapeImportHelper* SvXMLImport::CreateShapeImport()
1124*b1cdbd2cSJim Jagielski {
1125*b1cdbd2cSJim Jagielski return new XMLShapeImportHelper( *this, mxModel );
1126*b1cdbd2cSJim Jagielski }
1127*b1cdbd2cSJim Jagielski
1128*b1cdbd2cSJim Jagielski #ifndef SVX_LIGHT
CreateChartImport()1129*b1cdbd2cSJim Jagielski SchXMLImportHelper* SvXMLImport::CreateChartImport()
1130*b1cdbd2cSJim Jagielski {
1131*b1cdbd2cSJim Jagielski return new SchXMLImportHelper();
1132*b1cdbd2cSJim Jagielski }
1133*b1cdbd2cSJim Jagielski #endif
1134*b1cdbd2cSJim Jagielski
1135*b1cdbd2cSJim Jagielski #ifndef SVX_LIGHT
CreateFormImport()1136*b1cdbd2cSJim Jagielski ::xmloff::OFormLayerXMLImport* SvXMLImport::CreateFormImport()
1137*b1cdbd2cSJim Jagielski {
1138*b1cdbd2cSJim Jagielski return new ::xmloff::OFormLayerXMLImport(*this);
1139*b1cdbd2cSJim Jagielski }
1140*b1cdbd2cSJim Jagielski #endif // #ifndef SVX_LIGHT
1141*b1cdbd2cSJim Jagielski
1142*b1cdbd2cSJim Jagielski
1143*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////////////
1144*b1cdbd2cSJim Jagielski //
1145*b1cdbd2cSJim Jagielski // Get or create fill/line/lineend-style-helper
1146*b1cdbd2cSJim Jagielski //
1147*b1cdbd2cSJim Jagielski
GetGradientHelper()1148*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetGradientHelper()
1149*b1cdbd2cSJim Jagielski {
1150*b1cdbd2cSJim Jagielski if( !mxGradientHelper.is() )
1151*b1cdbd2cSJim Jagielski {
1152*b1cdbd2cSJim Jagielski if( mxModel.is() )
1153*b1cdbd2cSJim Jagielski {
1154*b1cdbd2cSJim Jagielski Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1155*b1cdbd2cSJim Jagielski if( xServiceFact.is() )
1156*b1cdbd2cSJim Jagielski {
1157*b1cdbd2cSJim Jagielski try
1158*b1cdbd2cSJim Jagielski {
1159*b1cdbd2cSJim Jagielski mxGradientHelper = Reference< container::XNameContainer >( xServiceFact->createInstance(
1160*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.GradientTable" ) ) ), UNO_QUERY);
1161*b1cdbd2cSJim Jagielski }
1162*b1cdbd2cSJim Jagielski catch( lang::ServiceNotRegisteredException& )
1163*b1cdbd2cSJim Jagielski {}
1164*b1cdbd2cSJim Jagielski }
1165*b1cdbd2cSJim Jagielski }
1166*b1cdbd2cSJim Jagielski }
1167*b1cdbd2cSJim Jagielski
1168*b1cdbd2cSJim Jagielski return mxGradientHelper;
1169*b1cdbd2cSJim Jagielski }
1170*b1cdbd2cSJim Jagielski
GetHatchHelper()1171*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetHatchHelper()
1172*b1cdbd2cSJim Jagielski {
1173*b1cdbd2cSJim Jagielski if( !mxHatchHelper.is() )
1174*b1cdbd2cSJim Jagielski {
1175*b1cdbd2cSJim Jagielski if( mxModel.is() )
1176*b1cdbd2cSJim Jagielski {
1177*b1cdbd2cSJim Jagielski Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1178*b1cdbd2cSJim Jagielski if( xServiceFact.is() )
1179*b1cdbd2cSJim Jagielski {
1180*b1cdbd2cSJim Jagielski try
1181*b1cdbd2cSJim Jagielski {
1182*b1cdbd2cSJim Jagielski mxHatchHelper = Reference< container::XNameContainer >( xServiceFact->createInstance(
1183*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.HatchTable" ) ) ), UNO_QUERY);
1184*b1cdbd2cSJim Jagielski }
1185*b1cdbd2cSJim Jagielski catch( lang::ServiceNotRegisteredException& )
1186*b1cdbd2cSJim Jagielski {}
1187*b1cdbd2cSJim Jagielski }
1188*b1cdbd2cSJim Jagielski }
1189*b1cdbd2cSJim Jagielski }
1190*b1cdbd2cSJim Jagielski
1191*b1cdbd2cSJim Jagielski return mxHatchHelper;
1192*b1cdbd2cSJim Jagielski }
1193*b1cdbd2cSJim Jagielski
GetBitmapHelper()1194*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetBitmapHelper()
1195*b1cdbd2cSJim Jagielski {
1196*b1cdbd2cSJim Jagielski if( !mxBitmapHelper.is() )
1197*b1cdbd2cSJim Jagielski {
1198*b1cdbd2cSJim Jagielski if( mxModel.is() )
1199*b1cdbd2cSJim Jagielski {
1200*b1cdbd2cSJim Jagielski Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1201*b1cdbd2cSJim Jagielski if( xServiceFact.is() )
1202*b1cdbd2cSJim Jagielski {
1203*b1cdbd2cSJim Jagielski try
1204*b1cdbd2cSJim Jagielski {
1205*b1cdbd2cSJim Jagielski mxBitmapHelper = Reference< container::XNameContainer >( xServiceFact->createInstance(
1206*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.BitmapTable" ) ) ), UNO_QUERY);
1207*b1cdbd2cSJim Jagielski }
1208*b1cdbd2cSJim Jagielski catch( lang::ServiceNotRegisteredException& )
1209*b1cdbd2cSJim Jagielski {}
1210*b1cdbd2cSJim Jagielski }
1211*b1cdbd2cSJim Jagielski }
1212*b1cdbd2cSJim Jagielski }
1213*b1cdbd2cSJim Jagielski
1214*b1cdbd2cSJim Jagielski return mxBitmapHelper;
1215*b1cdbd2cSJim Jagielski }
1216*b1cdbd2cSJim Jagielski
GetTransGradientHelper()1217*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetTransGradientHelper()
1218*b1cdbd2cSJim Jagielski {
1219*b1cdbd2cSJim Jagielski if( !mxTransGradientHelper.is() )
1220*b1cdbd2cSJim Jagielski {
1221*b1cdbd2cSJim Jagielski if( mxModel.is() )
1222*b1cdbd2cSJim Jagielski {
1223*b1cdbd2cSJim Jagielski Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1224*b1cdbd2cSJim Jagielski if( xServiceFact.is() )
1225*b1cdbd2cSJim Jagielski {
1226*b1cdbd2cSJim Jagielski try
1227*b1cdbd2cSJim Jagielski {
1228*b1cdbd2cSJim Jagielski mxTransGradientHelper = Reference< container::XNameContainer >( xServiceFact->createInstance(
1229*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.TransparencyGradientTable" ) ) ), UNO_QUERY);
1230*b1cdbd2cSJim Jagielski }
1231*b1cdbd2cSJim Jagielski catch( lang::ServiceNotRegisteredException& )
1232*b1cdbd2cSJim Jagielski {}
1233*b1cdbd2cSJim Jagielski }
1234*b1cdbd2cSJim Jagielski }
1235*b1cdbd2cSJim Jagielski }
1236*b1cdbd2cSJim Jagielski
1237*b1cdbd2cSJim Jagielski return mxTransGradientHelper;
1238*b1cdbd2cSJim Jagielski }
1239*b1cdbd2cSJim Jagielski
GetMarkerHelper()1240*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetMarkerHelper()
1241*b1cdbd2cSJim Jagielski {
1242*b1cdbd2cSJim Jagielski if( !mxMarkerHelper.is() )
1243*b1cdbd2cSJim Jagielski {
1244*b1cdbd2cSJim Jagielski if( mxModel.is() )
1245*b1cdbd2cSJim Jagielski {
1246*b1cdbd2cSJim Jagielski Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1247*b1cdbd2cSJim Jagielski if( xServiceFact.is() )
1248*b1cdbd2cSJim Jagielski {
1249*b1cdbd2cSJim Jagielski try
1250*b1cdbd2cSJim Jagielski {
1251*b1cdbd2cSJim Jagielski mxMarkerHelper = Reference< container::XNameContainer >( xServiceFact->createInstance(
1252*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.MarkerTable" ) ) ), UNO_QUERY);
1253*b1cdbd2cSJim Jagielski }
1254*b1cdbd2cSJim Jagielski catch( lang::ServiceNotRegisteredException& )
1255*b1cdbd2cSJim Jagielski {}
1256*b1cdbd2cSJim Jagielski }
1257*b1cdbd2cSJim Jagielski }
1258*b1cdbd2cSJim Jagielski }
1259*b1cdbd2cSJim Jagielski
1260*b1cdbd2cSJim Jagielski return mxMarkerHelper;
1261*b1cdbd2cSJim Jagielski }
1262*b1cdbd2cSJim Jagielski
GetDashHelper()1263*b1cdbd2cSJim Jagielski const Reference< container::XNameContainer > & SvXMLImport::GetDashHelper()
1264*b1cdbd2cSJim Jagielski {
1265*b1cdbd2cSJim Jagielski if( !mxDashHelper.is() )
1266*b1cdbd2cSJim Jagielski {
1267*b1cdbd2cSJim Jagielski if( mxModel.is() )
1268*b1cdbd2cSJim Jagielski {
1269*b1cdbd2cSJim Jagielski Reference< lang::XMultiServiceFactory > xServiceFact( mxModel, UNO_QUERY);
1270*b1cdbd2cSJim Jagielski if( xServiceFact.is() )
1271*b1cdbd2cSJim Jagielski {
1272*b1cdbd2cSJim Jagielski try
1273*b1cdbd2cSJim Jagielski {
1274*b1cdbd2cSJim Jagielski mxDashHelper = Reference< container::XNameContainer >( xServiceFact->createInstance(
1275*b1cdbd2cSJim Jagielski OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.DashTable" ) ) ), UNO_QUERY);
1276*b1cdbd2cSJim Jagielski }
1277*b1cdbd2cSJim Jagielski catch( lang::ServiceNotRegisteredException& )
1278*b1cdbd2cSJim Jagielski {}
1279*b1cdbd2cSJim Jagielski }
1280*b1cdbd2cSJim Jagielski }
1281*b1cdbd2cSJim Jagielski }
1282*b1cdbd2cSJim Jagielski
1283*b1cdbd2cSJim Jagielski return mxDashHelper;
1284*b1cdbd2cSJim Jagielski }
1285*b1cdbd2cSJim Jagielski
IsPackageURL(const::rtl::OUString & rURL) const1286*b1cdbd2cSJim Jagielski sal_Bool SvXMLImport::IsPackageURL( const ::rtl::OUString& rURL ) const
1287*b1cdbd2cSJim Jagielski {
1288*b1cdbd2cSJim Jagielski
1289*b1cdbd2cSJim Jagielski // if, and only if, only parts are imported, then we're in a package
1290*b1cdbd2cSJim Jagielski const sal_uInt32 nTest = IMPORT_META|IMPORT_STYLES|IMPORT_CONTENT|IMPORT_SETTINGS;
1291*b1cdbd2cSJim Jagielski if( (mnImportFlags & nTest) == nTest )
1292*b1cdbd2cSJim Jagielski return sal_False;
1293*b1cdbd2cSJim Jagielski
1294*b1cdbd2cSJim Jagielski // Some quick tests: Some may rely on the package structure!
1295*b1cdbd2cSJim Jagielski sal_Int32 nLen = rURL.getLength();
1296*b1cdbd2cSJim Jagielski if( (nLen > 0 && '/' == rURL[0]) )
1297*b1cdbd2cSJim Jagielski // RFC2396 net_path or abs_path
1298*b1cdbd2cSJim Jagielski return sal_False;
1299*b1cdbd2cSJim Jagielski else if( nLen > 1 && '.' == rURL[0] )
1300*b1cdbd2cSJim Jagielski {
1301*b1cdbd2cSJim Jagielski if( '.' == rURL[1] )
1302*b1cdbd2cSJim Jagielski // ../: We are never going up one level, so we know
1303*b1cdbd2cSJim Jagielski // it's not an external URI
1304*b1cdbd2cSJim Jagielski return sal_False;
1305*b1cdbd2cSJim Jagielski else if( '/' == rURL[1] )
1306*b1cdbd2cSJim Jagielski // we are remaining on a level, so it's an package URI
1307*b1cdbd2cSJim Jagielski return sal_True;
1308*b1cdbd2cSJim Jagielski }
1309*b1cdbd2cSJim Jagielski
1310*b1cdbd2cSJim Jagielski // Now check for a RFC2396 schema
1311*b1cdbd2cSJim Jagielski sal_Int32 nPos = 1;
1312*b1cdbd2cSJim Jagielski while( nPos < nLen )
1313*b1cdbd2cSJim Jagielski {
1314*b1cdbd2cSJim Jagielski switch( rURL[nPos] )
1315*b1cdbd2cSJim Jagielski {
1316*b1cdbd2cSJim Jagielski case '/':
1317*b1cdbd2cSJim Jagielski // a relative path segement
1318*b1cdbd2cSJim Jagielski return sal_True;
1319*b1cdbd2cSJim Jagielski case ':':
1320*b1cdbd2cSJim Jagielski // a schema
1321*b1cdbd2cSJim Jagielski return sal_False;
1322*b1cdbd2cSJim Jagielski default:
1323*b1cdbd2cSJim Jagielski break;
1324*b1cdbd2cSJim Jagielski // we don't care about any other characters
1325*b1cdbd2cSJim Jagielski }
1326*b1cdbd2cSJim Jagielski ++nPos;
1327*b1cdbd2cSJim Jagielski }
1328*b1cdbd2cSJim Jagielski
1329*b1cdbd2cSJim Jagielski return sal_True;
1330*b1cdbd2cSJim Jagielski }
1331*b1cdbd2cSJim Jagielski
ResolveGraphicObjectURL(const::rtl::OUString & rURL,sal_Bool bLoadOnDemand)1332*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::ResolveGraphicObjectURL( const ::rtl::OUString& rURL,
1333*b1cdbd2cSJim Jagielski sal_Bool bLoadOnDemand )
1334*b1cdbd2cSJim Jagielski {
1335*b1cdbd2cSJim Jagielski ::rtl::OUString sRet;
1336*b1cdbd2cSJim Jagielski
1337*b1cdbd2cSJim Jagielski if( IsPackageURL( rURL ) )
1338*b1cdbd2cSJim Jagielski {
1339*b1cdbd2cSJim Jagielski if( !bLoadOnDemand && mxGraphicResolver.is() )
1340*b1cdbd2cSJim Jagielski {
1341*b1cdbd2cSJim Jagielski ::rtl::OUString aTmp( msPackageProtocol );
1342*b1cdbd2cSJim Jagielski aTmp += rURL;
1343*b1cdbd2cSJim Jagielski sRet = mxGraphicResolver->resolveGraphicObjectURL( aTmp );
1344*b1cdbd2cSJim Jagielski }
1345*b1cdbd2cSJim Jagielski
1346*b1cdbd2cSJim Jagielski if( !sRet.getLength() )
1347*b1cdbd2cSJim Jagielski {
1348*b1cdbd2cSJim Jagielski sRet = msPackageProtocol;
1349*b1cdbd2cSJim Jagielski sRet += rURL;
1350*b1cdbd2cSJim Jagielski }
1351*b1cdbd2cSJim Jagielski }
1352*b1cdbd2cSJim Jagielski
1353*b1cdbd2cSJim Jagielski if( !sRet.getLength() )
1354*b1cdbd2cSJim Jagielski sRet = GetAbsoluteReference( rURL );
1355*b1cdbd2cSJim Jagielski
1356*b1cdbd2cSJim Jagielski return sRet;
1357*b1cdbd2cSJim Jagielski }
1358*b1cdbd2cSJim Jagielski
GetStreamForGraphicObjectURLFromBase64()1359*b1cdbd2cSJim Jagielski Reference< XOutputStream > SvXMLImport::GetStreamForGraphicObjectURLFromBase64()
1360*b1cdbd2cSJim Jagielski {
1361*b1cdbd2cSJim Jagielski Reference< XOutputStream > xOStm;
1362*b1cdbd2cSJim Jagielski Reference< document::XBinaryStreamResolver > xStmResolver( mxGraphicResolver, UNO_QUERY );
1363*b1cdbd2cSJim Jagielski
1364*b1cdbd2cSJim Jagielski if( xStmResolver.is() )
1365*b1cdbd2cSJim Jagielski xOStm = xStmResolver->createOutputStream();
1366*b1cdbd2cSJim Jagielski
1367*b1cdbd2cSJim Jagielski return xOStm;
1368*b1cdbd2cSJim Jagielski }
1369*b1cdbd2cSJim Jagielski
ResolveGraphicObjectURLFromBase64(const Reference<XOutputStream> & rOut)1370*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::ResolveGraphicObjectURLFromBase64(
1371*b1cdbd2cSJim Jagielski const Reference < XOutputStream >& rOut )
1372*b1cdbd2cSJim Jagielski {
1373*b1cdbd2cSJim Jagielski OUString sURL;
1374*b1cdbd2cSJim Jagielski Reference< document::XBinaryStreamResolver > xStmResolver( mxGraphicResolver, UNO_QUERY );
1375*b1cdbd2cSJim Jagielski if( xStmResolver.is() )
1376*b1cdbd2cSJim Jagielski sURL = xStmResolver->resolveOutputStream( rOut );
1377*b1cdbd2cSJim Jagielski
1378*b1cdbd2cSJim Jagielski return sURL;
1379*b1cdbd2cSJim Jagielski }
1380*b1cdbd2cSJim Jagielski
ResolveEmbeddedObjectURL(const::rtl::OUString & rURL,const::rtl::OUString & rClassId)1381*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::ResolveEmbeddedObjectURL(
1382*b1cdbd2cSJim Jagielski const ::rtl::OUString& rURL,
1383*b1cdbd2cSJim Jagielski const ::rtl::OUString& rClassId )
1384*b1cdbd2cSJim Jagielski {
1385*b1cdbd2cSJim Jagielski ::rtl::OUString sRet;
1386*b1cdbd2cSJim Jagielski
1387*b1cdbd2cSJim Jagielski if( IsPackageURL( rURL ) )
1388*b1cdbd2cSJim Jagielski {
1389*b1cdbd2cSJim Jagielski if ( mxEmbeddedResolver.is() )
1390*b1cdbd2cSJim Jagielski {
1391*b1cdbd2cSJim Jagielski OUString sURL( rURL );
1392*b1cdbd2cSJim Jagielski if( rClassId.getLength() )
1393*b1cdbd2cSJim Jagielski {
1394*b1cdbd2cSJim Jagielski sURL += OUString( sal_Unicode('!') );
1395*b1cdbd2cSJim Jagielski sURL += rClassId;
1396*b1cdbd2cSJim Jagielski }
1397*b1cdbd2cSJim Jagielski sRet = mxEmbeddedResolver->resolveEmbeddedObjectURL( sURL );
1398*b1cdbd2cSJim Jagielski }
1399*b1cdbd2cSJim Jagielski }
1400*b1cdbd2cSJim Jagielski else
1401*b1cdbd2cSJim Jagielski sRet = GetAbsoluteReference( rURL );
1402*b1cdbd2cSJim Jagielski
1403*b1cdbd2cSJim Jagielski return sRet;
1404*b1cdbd2cSJim Jagielski }
1405*b1cdbd2cSJim Jagielski
1406*b1cdbd2cSJim Jagielski Reference < XOutputStream >
GetStreamForEmbeddedObjectURLFromBase64()1407*b1cdbd2cSJim Jagielski SvXMLImport::GetStreamForEmbeddedObjectURLFromBase64()
1408*b1cdbd2cSJim Jagielski {
1409*b1cdbd2cSJim Jagielski Reference < XOutputStream > xOLEStream;
1410*b1cdbd2cSJim Jagielski
1411*b1cdbd2cSJim Jagielski if( mxEmbeddedResolver.is() )
1412*b1cdbd2cSJim Jagielski {
1413*b1cdbd2cSJim Jagielski Reference< XNameAccess > xNA( mxEmbeddedResolver, UNO_QUERY );
1414*b1cdbd2cSJim Jagielski if( xNA.is() )
1415*b1cdbd2cSJim Jagielski {
1416*b1cdbd2cSJim Jagielski OUString aURL( RTL_CONSTASCII_USTRINGPARAM( "Obj12345678" ) );
1417*b1cdbd2cSJim Jagielski Any aAny = xNA->getByName( aURL );
1418*b1cdbd2cSJim Jagielski aAny >>= xOLEStream;
1419*b1cdbd2cSJim Jagielski }
1420*b1cdbd2cSJim Jagielski }
1421*b1cdbd2cSJim Jagielski
1422*b1cdbd2cSJim Jagielski return xOLEStream;
1423*b1cdbd2cSJim Jagielski }
1424*b1cdbd2cSJim Jagielski
ResolveEmbeddedObjectURLFromBase64()1425*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::ResolveEmbeddedObjectURLFromBase64()
1426*b1cdbd2cSJim Jagielski {
1427*b1cdbd2cSJim Jagielski ::rtl::OUString sRet;
1428*b1cdbd2cSJim Jagielski
1429*b1cdbd2cSJim Jagielski if( mxEmbeddedResolver.is() )
1430*b1cdbd2cSJim Jagielski {
1431*b1cdbd2cSJim Jagielski OUString aURL( RTL_CONSTASCII_USTRINGPARAM( "Obj12345678" ) );
1432*b1cdbd2cSJim Jagielski sRet = mxEmbeddedResolver->resolveEmbeddedObjectURL( aURL );
1433*b1cdbd2cSJim Jagielski }
1434*b1cdbd2cSJim Jagielski
1435*b1cdbd2cSJim Jagielski return sRet;
1436*b1cdbd2cSJim Jagielski }
1437*b1cdbd2cSJim Jagielski
AddStyleDisplayName(sal_uInt16 nFamily,const OUString & rName,const OUString & rDisplayName)1438*b1cdbd2cSJim Jagielski void SvXMLImport::AddStyleDisplayName( sal_uInt16 nFamily,
1439*b1cdbd2cSJim Jagielski const OUString& rName,
1440*b1cdbd2cSJim Jagielski const OUString& rDisplayName )
1441*b1cdbd2cSJim Jagielski {
1442*b1cdbd2cSJim Jagielski if( !mpStyleMap )
1443*b1cdbd2cSJim Jagielski {
1444*b1cdbd2cSJim Jagielski mpStyleMap = new StyleMap;
1445*b1cdbd2cSJim Jagielski mpStyleMap->acquire();
1446*b1cdbd2cSJim Jagielski if( mxImportInfo.is() )
1447*b1cdbd2cSJim Jagielski {
1448*b1cdbd2cSJim Jagielski OUString sPrivateData(
1449*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM("PrivateData" ) );
1450*b1cdbd2cSJim Jagielski Reference< beans::XPropertySetInfo > xPropertySetInfo =
1451*b1cdbd2cSJim Jagielski mxImportInfo->getPropertySetInfo();
1452*b1cdbd2cSJim Jagielski if( xPropertySetInfo.is() &&
1453*b1cdbd2cSJim Jagielski xPropertySetInfo->hasPropertyByName(sPrivateData) )
1454*b1cdbd2cSJim Jagielski {
1455*b1cdbd2cSJim Jagielski Reference < XInterface > xIfc(
1456*b1cdbd2cSJim Jagielski static_cast< XUnoTunnel *>( mpStyleMap ) );
1457*b1cdbd2cSJim Jagielski Any aAny;
1458*b1cdbd2cSJim Jagielski aAny <<= xIfc;
1459*b1cdbd2cSJim Jagielski mxImportInfo->setPropertyValue( sPrivateData, aAny );
1460*b1cdbd2cSJim Jagielski }
1461*b1cdbd2cSJim Jagielski }
1462*b1cdbd2cSJim Jagielski }
1463*b1cdbd2cSJim Jagielski
1464*b1cdbd2cSJim Jagielski StyleMap::key_type aKey( nFamily, rName );
1465*b1cdbd2cSJim Jagielski StyleMap::value_type aValue( aKey, rDisplayName );
1466*b1cdbd2cSJim Jagielski ::std::pair<StyleMap::iterator,bool> aRes( mpStyleMap->insert( aValue ) );
1467*b1cdbd2cSJim Jagielski OSL_ENSURE( aRes.second, "duplicate style name" );
1468*b1cdbd2cSJim Jagielski
1469*b1cdbd2cSJim Jagielski }
1470*b1cdbd2cSJim Jagielski
GetStyleDisplayName(sal_uInt16 nFamily,const OUString & rName) const1471*b1cdbd2cSJim Jagielski OUString SvXMLImport::GetStyleDisplayName( sal_uInt16 nFamily,
1472*b1cdbd2cSJim Jagielski const OUString& rName ) const
1473*b1cdbd2cSJim Jagielski {
1474*b1cdbd2cSJim Jagielski OUString sName( rName );
1475*b1cdbd2cSJim Jagielski if( mpStyleMap && rName.getLength() )
1476*b1cdbd2cSJim Jagielski {
1477*b1cdbd2cSJim Jagielski StyleMap::key_type aKey( nFamily, rName );
1478*b1cdbd2cSJim Jagielski StyleMap::const_iterator aIter = mpStyleMap->find( aKey );
1479*b1cdbd2cSJim Jagielski if( aIter != mpStyleMap->end() )
1480*b1cdbd2cSJim Jagielski sName = (*aIter).second;
1481*b1cdbd2cSJim Jagielski }
1482*b1cdbd2cSJim Jagielski return sName;
1483*b1cdbd2cSJim Jagielski }
1484*b1cdbd2cSJim Jagielski
SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> &)1485*b1cdbd2cSJim Jagielski void SvXMLImport::SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&)
1486*b1cdbd2cSJim Jagielski {
1487*b1cdbd2cSJim Jagielski }
1488*b1cdbd2cSJim Jagielski
SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> &)1489*b1cdbd2cSJim Jagielski void SvXMLImport::SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&)
1490*b1cdbd2cSJim Jagielski {
1491*b1cdbd2cSJim Jagielski }
1492*b1cdbd2cSJim Jagielski
SetDocumentSpecificSettings(const::rtl::OUString & _rSettingsGroupName,const uno::Sequence<beans::PropertyValue> & _rSettings)1493*b1cdbd2cSJim Jagielski void SvXMLImport::SetDocumentSpecificSettings(const ::rtl::OUString& _rSettingsGroupName, const uno::Sequence<beans::PropertyValue>& _rSettings)
1494*b1cdbd2cSJim Jagielski {
1495*b1cdbd2cSJim Jagielski (void)_rSettingsGroupName;
1496*b1cdbd2cSJim Jagielski (void)_rSettings;
1497*b1cdbd2cSJim Jagielski }
1498*b1cdbd2cSJim Jagielski
GetProgressBarHelper()1499*b1cdbd2cSJim Jagielski ProgressBarHelper* SvXMLImport::GetProgressBarHelper()
1500*b1cdbd2cSJim Jagielski {
1501*b1cdbd2cSJim Jagielski if (!mpProgressBarHelper)
1502*b1cdbd2cSJim Jagielski {
1503*b1cdbd2cSJim Jagielski mpProgressBarHelper = new ProgressBarHelper(mxStatusIndicator, sal_False);
1504*b1cdbd2cSJim Jagielski
1505*b1cdbd2cSJim Jagielski if (mxImportInfo.is())
1506*b1cdbd2cSJim Jagielski {
1507*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = mxImportInfo->getPropertySetInfo();
1508*b1cdbd2cSJim Jagielski if (xPropertySetInfo.is())
1509*b1cdbd2cSJim Jagielski {
1510*b1cdbd2cSJim Jagielski OUString sProgressRange(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSRANGE));
1511*b1cdbd2cSJim Jagielski OUString sProgressMax(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSMAX));
1512*b1cdbd2cSJim Jagielski OUString sProgressCurrent(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSCURRENT));
1513*b1cdbd2cSJim Jagielski OUString sRepeat(RTL_CONSTASCII_USTRINGPARAM(XML_PROGRESSREPEAT));
1514*b1cdbd2cSJim Jagielski if (xPropertySetInfo->hasPropertyByName(sProgressMax) &&
1515*b1cdbd2cSJim Jagielski xPropertySetInfo->hasPropertyByName(sProgressCurrent) &&
1516*b1cdbd2cSJim Jagielski xPropertySetInfo->hasPropertyByName(sProgressRange))
1517*b1cdbd2cSJim Jagielski {
1518*b1cdbd2cSJim Jagielski uno::Any aAny;
1519*b1cdbd2cSJim Jagielski sal_Int32 nProgressMax(0);
1520*b1cdbd2cSJim Jagielski sal_Int32 nProgressCurrent(0);
1521*b1cdbd2cSJim Jagielski sal_Int32 nProgressRange(0);
1522*b1cdbd2cSJim Jagielski aAny = mxImportInfo->getPropertyValue(sProgressRange);
1523*b1cdbd2cSJim Jagielski if (aAny >>= nProgressRange)
1524*b1cdbd2cSJim Jagielski mpProgressBarHelper->SetRange(nProgressRange);
1525*b1cdbd2cSJim Jagielski aAny = mxImportInfo->getPropertyValue(sProgressMax);
1526*b1cdbd2cSJim Jagielski if (aAny >>= nProgressMax)
1527*b1cdbd2cSJim Jagielski mpProgressBarHelper->SetReference(nProgressMax);
1528*b1cdbd2cSJim Jagielski aAny = mxImportInfo->getPropertyValue(sProgressCurrent);
1529*b1cdbd2cSJim Jagielski if (aAny >>= nProgressCurrent)
1530*b1cdbd2cSJim Jagielski mpProgressBarHelper->SetValue(nProgressCurrent);
1531*b1cdbd2cSJim Jagielski }
1532*b1cdbd2cSJim Jagielski if (xPropertySetInfo->hasPropertyByName(sRepeat))
1533*b1cdbd2cSJim Jagielski {
1534*b1cdbd2cSJim Jagielski uno::Any aAny = mxImportInfo->getPropertyValue(sRepeat);
1535*b1cdbd2cSJim Jagielski if (aAny.getValueType() == getBooleanCppuType())
1536*b1cdbd2cSJim Jagielski mpProgressBarHelper->SetRepeat(::cppu::any2bool(aAny));
1537*b1cdbd2cSJim Jagielski else {
1538*b1cdbd2cSJim Jagielski DBG_ERRORFILE("why is it no boolean?");
1539*b1cdbd2cSJim Jagielski }
1540*b1cdbd2cSJim Jagielski }
1541*b1cdbd2cSJim Jagielski }
1542*b1cdbd2cSJim Jagielski }
1543*b1cdbd2cSJim Jagielski }
1544*b1cdbd2cSJim Jagielski return mpProgressBarHelper;
1545*b1cdbd2cSJim Jagielski }
1546*b1cdbd2cSJim Jagielski
AddNumberStyle(sal_Int32 nKey,const OUString & rName)1547*b1cdbd2cSJim Jagielski void SvXMLImport::AddNumberStyle(sal_Int32 nKey, const OUString& rName)
1548*b1cdbd2cSJim Jagielski {
1549*b1cdbd2cSJim Jagielski if (!mxNumberStyles.is())
1550*b1cdbd2cSJim Jagielski mxNumberStyles = uno::Reference< container::XNameContainer >( comphelper::NameContainer_createInstance( ::getCppuType((const sal_Int32*)0)) );
1551*b1cdbd2cSJim Jagielski if (mxNumberStyles.is())
1552*b1cdbd2cSJim Jagielski {
1553*b1cdbd2cSJim Jagielski uno::Any aAny;
1554*b1cdbd2cSJim Jagielski aAny <<= nKey;
1555*b1cdbd2cSJim Jagielski try
1556*b1cdbd2cSJim Jagielski {
1557*b1cdbd2cSJim Jagielski mxNumberStyles->insertByName(rName, aAny);
1558*b1cdbd2cSJim Jagielski }
1559*b1cdbd2cSJim Jagielski catch ( uno::Exception& )
1560*b1cdbd2cSJim Jagielski {
1561*b1cdbd2cSJim Jagielski DBG_ERROR("Numberformat could not be inserted");
1562*b1cdbd2cSJim Jagielski }
1563*b1cdbd2cSJim Jagielski }
1564*b1cdbd2cSJim Jagielski else {
1565*b1cdbd2cSJim Jagielski DBG_ERROR("not possible to create NameContainer");
1566*b1cdbd2cSJim Jagielski }
1567*b1cdbd2cSJim Jagielski }
1568*b1cdbd2cSJim Jagielski
GetEventImport()1569*b1cdbd2cSJim Jagielski XMLEventImportHelper& SvXMLImport::GetEventImport()
1570*b1cdbd2cSJim Jagielski {
1571*b1cdbd2cSJim Jagielski #ifndef SVX_LIGHT
1572*b1cdbd2cSJim Jagielski if (!mpEventImportHelper)
1573*b1cdbd2cSJim Jagielski {
1574*b1cdbd2cSJim Jagielski // construct event helper and register StarBasic handler and standard
1575*b1cdbd2cSJim Jagielski // event tables
1576*b1cdbd2cSJim Jagielski mpEventImportHelper = new XMLEventImportHelper();
1577*b1cdbd2cSJim Jagielski OUString sStarBasic(GetXMLToken(XML_STARBASIC));
1578*b1cdbd2cSJim Jagielski mpEventImportHelper->RegisterFactory(sStarBasic,
1579*b1cdbd2cSJim Jagielski new XMLStarBasicContextFactory());
1580*b1cdbd2cSJim Jagielski OUString sScript(GetXMLToken(XML_SCRIPT));
1581*b1cdbd2cSJim Jagielski mpEventImportHelper->RegisterFactory(sScript,
1582*b1cdbd2cSJim Jagielski new XMLScriptContextFactory());
1583*b1cdbd2cSJim Jagielski mpEventImportHelper->AddTranslationTable(aStandardEventTable);
1584*b1cdbd2cSJim Jagielski
1585*b1cdbd2cSJim Jagielski // register StarBasic event handler with capitalized spelling
1586*b1cdbd2cSJim Jagielski OUString sStarBasicCap(RTL_CONSTASCII_USTRINGPARAM("StarBasic"));
1587*b1cdbd2cSJim Jagielski mpEventImportHelper->RegisterFactory(sStarBasicCap,
1588*b1cdbd2cSJim Jagielski new XMLStarBasicContextFactory());
1589*b1cdbd2cSJim Jagielski }
1590*b1cdbd2cSJim Jagielski #endif
1591*b1cdbd2cSJim Jagielski
1592*b1cdbd2cSJim Jagielski return *mpEventImportHelper;
1593*b1cdbd2cSJim Jagielski }
1594*b1cdbd2cSJim Jagielski
SetFontDecls(XMLFontStylesContext * pFontDecls)1595*b1cdbd2cSJim Jagielski void SvXMLImport::SetFontDecls( XMLFontStylesContext *pFontDecls )
1596*b1cdbd2cSJim Jagielski {
1597*b1cdbd2cSJim Jagielski mxFontDecls = pFontDecls;
1598*b1cdbd2cSJim Jagielski GetTextImport()->SetFontDecls( pFontDecls );
1599*b1cdbd2cSJim Jagielski }
1600*b1cdbd2cSJim Jagielski
SetStyles(SvXMLStylesContext * pStyles)1601*b1cdbd2cSJim Jagielski void SvXMLImport::SetStyles( SvXMLStylesContext *pStyles )
1602*b1cdbd2cSJim Jagielski {
1603*b1cdbd2cSJim Jagielski mxStyles = pStyles;
1604*b1cdbd2cSJim Jagielski }
1605*b1cdbd2cSJim Jagielski
SetAutoStyles(SvXMLStylesContext * pAutoStyles)1606*b1cdbd2cSJim Jagielski void SvXMLImport::SetAutoStyles( SvXMLStylesContext *pAutoStyles )
1607*b1cdbd2cSJim Jagielski {
1608*b1cdbd2cSJim Jagielski if (pAutoStyles && mxNumberStyles.is() && (mnImportFlags & IMPORT_CONTENT) )
1609*b1cdbd2cSJim Jagielski {
1610*b1cdbd2cSJim Jagielski uno::Reference<xml::sax::XAttributeList> xAttrList;
1611*b1cdbd2cSJim Jagielski uno::Sequence< ::rtl::OUString > aNames = mxNumberStyles->getElementNames();
1612*b1cdbd2cSJim Jagielski sal_uInt32 nCount(aNames.getLength());
1613*b1cdbd2cSJim Jagielski if (nCount)
1614*b1cdbd2cSJim Jagielski {
1615*b1cdbd2cSJim Jagielski const OUString* pNames = aNames.getConstArray();
1616*b1cdbd2cSJim Jagielski if ( pNames )
1617*b1cdbd2cSJim Jagielski {
1618*b1cdbd2cSJim Jagielski SvXMLStyleContext* pContext;
1619*b1cdbd2cSJim Jagielski uno::Any aAny;
1620*b1cdbd2cSJim Jagielski sal_Int32 nKey(0);
1621*b1cdbd2cSJim Jagielski for (sal_uInt32 i = 0; i < nCount; i++, pNames++)
1622*b1cdbd2cSJim Jagielski {
1623*b1cdbd2cSJim Jagielski aAny = mxNumberStyles->getByName(*pNames);
1624*b1cdbd2cSJim Jagielski if (aAny >>= nKey)
1625*b1cdbd2cSJim Jagielski {
1626*b1cdbd2cSJim Jagielski pContext = new SvXMLNumFormatContext( *this, XML_NAMESPACE_NUMBER,
1627*b1cdbd2cSJim Jagielski *pNames, xAttrList, nKey, *pAutoStyles );
1628*b1cdbd2cSJim Jagielski pAutoStyles->AddStyle(*pContext);
1629*b1cdbd2cSJim Jagielski }
1630*b1cdbd2cSJim Jagielski }
1631*b1cdbd2cSJim Jagielski }
1632*b1cdbd2cSJim Jagielski }
1633*b1cdbd2cSJim Jagielski }
1634*b1cdbd2cSJim Jagielski mxAutoStyles = pAutoStyles;
1635*b1cdbd2cSJim Jagielski GetTextImport()->SetAutoStyles( pAutoStyles );
1636*b1cdbd2cSJim Jagielski GetShapeImport()->SetAutoStylesContext( pAutoStyles );
1637*b1cdbd2cSJim Jagielski #ifndef SVX_LIGHT
1638*b1cdbd2cSJim Jagielski GetChartImport()->SetAutoStylesContext( pAutoStyles );
1639*b1cdbd2cSJim Jagielski GetFormImport()->setAutoStyleContext( pAutoStyles );
1640*b1cdbd2cSJim Jagielski #endif
1641*b1cdbd2cSJim Jagielski }
1642*b1cdbd2cSJim Jagielski
SetMasterStyles(SvXMLStylesContext * pMasterStyles)1643*b1cdbd2cSJim Jagielski void SvXMLImport::SetMasterStyles( SvXMLStylesContext *pMasterStyles )
1644*b1cdbd2cSJim Jagielski {
1645*b1cdbd2cSJim Jagielski mxMasterStyles = pMasterStyles;
1646*b1cdbd2cSJim Jagielski }
1647*b1cdbd2cSJim Jagielski
GetFontDecls()1648*b1cdbd2cSJim Jagielski XMLFontStylesContext *SvXMLImport::GetFontDecls()
1649*b1cdbd2cSJim Jagielski {
1650*b1cdbd2cSJim Jagielski return (XMLFontStylesContext *)&mxFontDecls;
1651*b1cdbd2cSJim Jagielski }
1652*b1cdbd2cSJim Jagielski
GetStyles()1653*b1cdbd2cSJim Jagielski SvXMLStylesContext *SvXMLImport::GetStyles()
1654*b1cdbd2cSJim Jagielski {
1655*b1cdbd2cSJim Jagielski return (SvXMLStylesContext *)&mxStyles;
1656*b1cdbd2cSJim Jagielski }
1657*b1cdbd2cSJim Jagielski
GetAutoStyles()1658*b1cdbd2cSJim Jagielski SvXMLStylesContext *SvXMLImport::GetAutoStyles()
1659*b1cdbd2cSJim Jagielski {
1660*b1cdbd2cSJim Jagielski return (SvXMLStylesContext *)&mxAutoStyles;
1661*b1cdbd2cSJim Jagielski }
1662*b1cdbd2cSJim Jagielski
GetMasterStyles()1663*b1cdbd2cSJim Jagielski SvXMLStylesContext *SvXMLImport::GetMasterStyles()
1664*b1cdbd2cSJim Jagielski {
1665*b1cdbd2cSJim Jagielski return (SvXMLStylesContext *)&mxMasterStyles;
1666*b1cdbd2cSJim Jagielski }
1667*b1cdbd2cSJim Jagielski
GetFontDecls() const1668*b1cdbd2cSJim Jagielski const XMLFontStylesContext *SvXMLImport::GetFontDecls() const
1669*b1cdbd2cSJim Jagielski {
1670*b1cdbd2cSJim Jagielski return (const XMLFontStylesContext *)&mxFontDecls;
1671*b1cdbd2cSJim Jagielski }
1672*b1cdbd2cSJim Jagielski
GetStyles() const1673*b1cdbd2cSJim Jagielski const SvXMLStylesContext *SvXMLImport::GetStyles() const
1674*b1cdbd2cSJim Jagielski {
1675*b1cdbd2cSJim Jagielski return (const SvXMLStylesContext *)&mxStyles;
1676*b1cdbd2cSJim Jagielski }
1677*b1cdbd2cSJim Jagielski
GetAutoStyles() const1678*b1cdbd2cSJim Jagielski const SvXMLStylesContext *SvXMLImport::GetAutoStyles() const
1679*b1cdbd2cSJim Jagielski {
1680*b1cdbd2cSJim Jagielski return (const SvXMLStylesContext *)&mxAutoStyles;
1681*b1cdbd2cSJim Jagielski }
1682*b1cdbd2cSJim Jagielski
GetMasterStyles() const1683*b1cdbd2cSJim Jagielski const SvXMLStylesContext *SvXMLImport::GetMasterStyles() const
1684*b1cdbd2cSJim Jagielski {
1685*b1cdbd2cSJim Jagielski return (const SvXMLStylesContext *)&mxMasterStyles;
1686*b1cdbd2cSJim Jagielski }
1687*b1cdbd2cSJim Jagielski
GetAbsoluteReference(const OUString & rValue) const1688*b1cdbd2cSJim Jagielski OUString SvXMLImport::GetAbsoluteReference(const OUString& rValue) const
1689*b1cdbd2cSJim Jagielski {
1690*b1cdbd2cSJim Jagielski if( rValue.getLength() == 0 || rValue[0] == '#' )
1691*b1cdbd2cSJim Jagielski return rValue;
1692*b1cdbd2cSJim Jagielski
1693*b1cdbd2cSJim Jagielski INetURLObject aAbsURL;
1694*b1cdbd2cSJim Jagielski if( mpImpl->aBaseURL.GetNewAbsURL( rValue, &aAbsURL ) )
1695*b1cdbd2cSJim Jagielski return aAbsURL.GetMainURL( INetURLObject::DECODE_TO_IURI );
1696*b1cdbd2cSJim Jagielski else
1697*b1cdbd2cSJim Jagielski return rValue;
1698*b1cdbd2cSJim Jagielski }
1699*b1cdbd2cSJim Jagielski
IsODFVersionConsistent(const::rtl::OUString & aODFVersion)1700*b1cdbd2cSJim Jagielski sal_Bool SvXMLImport::IsODFVersionConsistent( const ::rtl::OUString& aODFVersion )
1701*b1cdbd2cSJim Jagielski {
1702*b1cdbd2cSJim Jagielski // the check returns sal_False only if the storage version could be retrieved
1703*b1cdbd2cSJim Jagielski sal_Bool bResult = sal_True;
1704*b1cdbd2cSJim Jagielski
1705*b1cdbd2cSJim Jagielski if ( aODFVersion.getLength() && aODFVersion.compareTo( ODFVER_012_TEXT ) >= 0 )
1706*b1cdbd2cSJim Jagielski {
1707*b1cdbd2cSJim Jagielski // check the consistency only for the ODF1.2 and later ( according to content.xml )
1708*b1cdbd2cSJim Jagielski // manifest.xml might have no version, it should be checked here and the correct version should be set
1709*b1cdbd2cSJim Jagielski try
1710*b1cdbd2cSJim Jagielski {
1711*b1cdbd2cSJim Jagielski uno::Reference< document::XStorageBasedDocument > xDoc( mxModel, uno::UNO_QUERY_THROW );
1712*b1cdbd2cSJim Jagielski uno::Reference< embed::XStorage > xStor = xDoc->getDocumentStorage();
1713*b1cdbd2cSJim Jagielski uno::Reference< beans::XPropertySet > xStorProps( xStor, uno::UNO_QUERY_THROW );
1714*b1cdbd2cSJim Jagielski
1715*b1cdbd2cSJim Jagielski // the check should be done only for OASIS format
1716*b1cdbd2cSJim Jagielski ::rtl::OUString aMediaType;
1717*b1cdbd2cSJim Jagielski xStorProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MediaType" ) ) ) >>= aMediaType;
1718*b1cdbd2cSJim Jagielski if ( ::comphelper::OStorageHelper::GetXStorageFormat( xStor ) >= SOFFICE_FILEFORMAT_8 )
1719*b1cdbd2cSJim Jagielski {
1720*b1cdbd2cSJim Jagielski sal_Bool bRepairPackage = sal_False;
1721*b1cdbd2cSJim Jagielski try
1722*b1cdbd2cSJim Jagielski {
1723*b1cdbd2cSJim Jagielski xStorProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "RepairPackage" ) ) )
1724*b1cdbd2cSJim Jagielski >>= bRepairPackage;
1725*b1cdbd2cSJim Jagielski } catch ( uno::Exception& )
1726*b1cdbd2cSJim Jagielski {}
1727*b1cdbd2cSJim Jagielski
1728*b1cdbd2cSJim Jagielski // check only if not in Repair mode
1729*b1cdbd2cSJim Jagielski if ( !bRepairPackage )
1730*b1cdbd2cSJim Jagielski {
1731*b1cdbd2cSJim Jagielski ::rtl::OUString aStorVersion;
1732*b1cdbd2cSJim Jagielski xStorProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Version" ) ) )
1733*b1cdbd2cSJim Jagielski >>= aStorVersion;
1734*b1cdbd2cSJim Jagielski
1735*b1cdbd2cSJim Jagielski // if the storage version is set in manifest.xml, it must be the same as in content.xml
1736*b1cdbd2cSJim Jagielski // if not, set it explicitly to be used further ( it will work even for readonly storage )
1737*b1cdbd2cSJim Jagielski // This workaround is not nice, but I see no other way to handle it, since there are
1738*b1cdbd2cSJim Jagielski // ODF1.2 documents without version in manifest.xml
1739*b1cdbd2cSJim Jagielski if ( aStorVersion.getLength() )
1740*b1cdbd2cSJim Jagielski bResult = aODFVersion.equals( aStorVersion );
1741*b1cdbd2cSJim Jagielski else
1742*b1cdbd2cSJim Jagielski xStorProps->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Version" ) ),
1743*b1cdbd2cSJim Jagielski uno::makeAny( aODFVersion ) );
1744*b1cdbd2cSJim Jagielski
1745*b1cdbd2cSJim Jagielski if ( bResult )
1746*b1cdbd2cSJim Jagielski {
1747*b1cdbd2cSJim Jagielski sal_Bool bInconsistent = sal_False;
1748*b1cdbd2cSJim Jagielski xStorProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsInconsistent" ) ) )
1749*b1cdbd2cSJim Jagielski >>= bInconsistent;
1750*b1cdbd2cSJim Jagielski bResult = !bInconsistent;
1751*b1cdbd2cSJim Jagielski }
1752*b1cdbd2cSJim Jagielski }
1753*b1cdbd2cSJim Jagielski }
1754*b1cdbd2cSJim Jagielski }
1755*b1cdbd2cSJim Jagielski catch( uno::Exception& )
1756*b1cdbd2cSJim Jagielski {}
1757*b1cdbd2cSJim Jagielski }
1758*b1cdbd2cSJim Jagielski
1759*b1cdbd2cSJim Jagielski return bResult;
1760*b1cdbd2cSJim Jagielski }
1761*b1cdbd2cSJim Jagielski
_CreateNumberFormatsSupplier()1762*b1cdbd2cSJim Jagielski void SvXMLImport::_CreateNumberFormatsSupplier()
1763*b1cdbd2cSJim Jagielski {
1764*b1cdbd2cSJim Jagielski DBG_ASSERT( !mxNumberFormatsSupplier.is(),
1765*b1cdbd2cSJim Jagielski "number formats supplier already exists!" );
1766*b1cdbd2cSJim Jagielski if(mxModel.is())
1767*b1cdbd2cSJim Jagielski mxNumberFormatsSupplier =
1768*b1cdbd2cSJim Jagielski uno::Reference< util::XNumberFormatsSupplier> (mxModel, uno::UNO_QUERY);
1769*b1cdbd2cSJim Jagielski }
1770*b1cdbd2cSJim Jagielski
1771*b1cdbd2cSJim Jagielski
_CreateDataStylesImport()1772*b1cdbd2cSJim Jagielski void SvXMLImport::_CreateDataStylesImport()
1773*b1cdbd2cSJim Jagielski {
1774*b1cdbd2cSJim Jagielski DBG_ASSERT( mpNumImport == NULL, "data styles import already exists!" );
1775*b1cdbd2cSJim Jagielski uno::Reference<util::XNumberFormatsSupplier> xNum =
1776*b1cdbd2cSJim Jagielski GetNumberFormatsSupplier();
1777*b1cdbd2cSJim Jagielski if ( xNum.is() )
1778*b1cdbd2cSJim Jagielski mpNumImport = new SvXMLNumFmtHelper(xNum, getServiceFactory());
1779*b1cdbd2cSJim Jagielski }
1780*b1cdbd2cSJim Jagielski
1781*b1cdbd2cSJim Jagielski
ConvStarBatsCharToStarSymbol(sal_Unicode c)1782*b1cdbd2cSJim Jagielski sal_Unicode SvXMLImport::ConvStarBatsCharToStarSymbol( sal_Unicode c )
1783*b1cdbd2cSJim Jagielski {
1784*b1cdbd2cSJim Jagielski sal_Unicode cNew = c;
1785*b1cdbd2cSJim Jagielski if( !mpImpl->hBatsFontConv )
1786*b1cdbd2cSJim Jagielski {
1787*b1cdbd2cSJim Jagielski OUString sStarBats( RTL_CONSTASCII_USTRINGPARAM( "StarBats" ) );
1788*b1cdbd2cSJim Jagielski mpImpl->hBatsFontConv = CreateFontToSubsFontConverter( sStarBats,
1789*b1cdbd2cSJim Jagielski FONTTOSUBSFONT_IMPORT|FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
1790*b1cdbd2cSJim Jagielski OSL_ENSURE( mpImpl->hBatsFontConv, "Got no symbol font converter" );
1791*b1cdbd2cSJim Jagielski }
1792*b1cdbd2cSJim Jagielski if( mpImpl->hBatsFontConv )
1793*b1cdbd2cSJim Jagielski {
1794*b1cdbd2cSJim Jagielski cNew = ConvertFontToSubsFontChar( mpImpl->hBatsFontConv, c );
1795*b1cdbd2cSJim Jagielski }
1796*b1cdbd2cSJim Jagielski
1797*b1cdbd2cSJim Jagielski return cNew;
1798*b1cdbd2cSJim Jagielski }
1799*b1cdbd2cSJim Jagielski
ConvStarMathCharToStarSymbol(sal_Unicode c)1800*b1cdbd2cSJim Jagielski sal_Unicode SvXMLImport::ConvStarMathCharToStarSymbol( sal_Unicode c )
1801*b1cdbd2cSJim Jagielski {
1802*b1cdbd2cSJim Jagielski sal_Unicode cNew = c;
1803*b1cdbd2cSJim Jagielski if( !mpImpl->hMathFontConv )
1804*b1cdbd2cSJim Jagielski {
1805*b1cdbd2cSJim Jagielski OUString sStarMath( RTL_CONSTASCII_USTRINGPARAM( "StarMath" ) );
1806*b1cdbd2cSJim Jagielski mpImpl->hMathFontConv = CreateFontToSubsFontConverter( sStarMath,
1807*b1cdbd2cSJim Jagielski FONTTOSUBSFONT_IMPORT|FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
1808*b1cdbd2cSJim Jagielski OSL_ENSURE( mpImpl->hMathFontConv, "Got no symbol font converter" );
1809*b1cdbd2cSJim Jagielski }
1810*b1cdbd2cSJim Jagielski if( mpImpl->hMathFontConv )
1811*b1cdbd2cSJim Jagielski {
1812*b1cdbd2cSJim Jagielski cNew = ConvertFontToSubsFontChar( mpImpl->hMathFontConv, c );
1813*b1cdbd2cSJim Jagielski }
1814*b1cdbd2cSJim Jagielski
1815*b1cdbd2cSJim Jagielski return cNew;
1816*b1cdbd2cSJim Jagielski }
1817*b1cdbd2cSJim Jagielski
1818*b1cdbd2cSJim Jagielski
1819*b1cdbd2cSJim Jagielski
SetError(sal_Int32 nId,const Sequence<OUString> & rMsgParams,const OUString & rExceptionMessage,const Reference<xml::sax::XLocator> & rLocator)1820*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1821*b1cdbd2cSJim Jagielski sal_Int32 nId,
1822*b1cdbd2cSJim Jagielski const Sequence<OUString>& rMsgParams,
1823*b1cdbd2cSJim Jagielski const OUString& rExceptionMessage,
1824*b1cdbd2cSJim Jagielski const Reference<xml::sax::XLocator>& rLocator )
1825*b1cdbd2cSJim Jagielski {
1826*b1cdbd2cSJim Jagielski // maintain error flags
1827*b1cdbd2cSJim Jagielski if ( ( nId & XMLERROR_FLAG_ERROR ) != 0 )
1828*b1cdbd2cSJim Jagielski mnErrorFlags |= ERROR_ERROR_OCCURED;
1829*b1cdbd2cSJim Jagielski if ( ( nId & XMLERROR_FLAG_WARNING ) != 0 )
1830*b1cdbd2cSJim Jagielski mnErrorFlags |= ERROR_WARNING_OCCURED;
1831*b1cdbd2cSJim Jagielski if ( ( nId & XMLERROR_FLAG_SEVERE ) != 0 )
1832*b1cdbd2cSJim Jagielski mnErrorFlags |= ERROR_DO_NOTHING;
1833*b1cdbd2cSJim Jagielski
1834*b1cdbd2cSJim Jagielski // create error list on demand
1835*b1cdbd2cSJim Jagielski if ( mpXMLErrors == NULL )
1836*b1cdbd2cSJim Jagielski mpXMLErrors = new XMLErrors();
1837*b1cdbd2cSJim Jagielski
1838*b1cdbd2cSJim Jagielski // save error information
1839*b1cdbd2cSJim Jagielski // use document locator (if none supplied)
1840*b1cdbd2cSJim Jagielski mpXMLErrors->AddRecord( nId, rMsgParams, rExceptionMessage,
1841*b1cdbd2cSJim Jagielski rLocator.is() ? rLocator : mxLocator );
1842*b1cdbd2cSJim Jagielski }
1843*b1cdbd2cSJim Jagielski
SetError(sal_Int32 nId,const Sequence<OUString> & rMsgParams)1844*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1845*b1cdbd2cSJim Jagielski sal_Int32 nId,
1846*b1cdbd2cSJim Jagielski const Sequence<OUString>& rMsgParams)
1847*b1cdbd2cSJim Jagielski {
1848*b1cdbd2cSJim Jagielski OUString sEmpty;
1849*b1cdbd2cSJim Jagielski SetError( nId, rMsgParams, sEmpty, NULL );
1850*b1cdbd2cSJim Jagielski }
1851*b1cdbd2cSJim Jagielski
SetError(sal_Int32 nId)1852*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1853*b1cdbd2cSJim Jagielski sal_Int32 nId)
1854*b1cdbd2cSJim Jagielski {
1855*b1cdbd2cSJim Jagielski Sequence<OUString> aSeq(0);
1856*b1cdbd2cSJim Jagielski SetError( nId, aSeq );
1857*b1cdbd2cSJim Jagielski }
1858*b1cdbd2cSJim Jagielski
SetError(sal_Int32 nId,const OUString & rMsg1)1859*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1860*b1cdbd2cSJim Jagielski sal_Int32 nId,
1861*b1cdbd2cSJim Jagielski const OUString& rMsg1)
1862*b1cdbd2cSJim Jagielski {
1863*b1cdbd2cSJim Jagielski Sequence<OUString> aSeq(1);
1864*b1cdbd2cSJim Jagielski OUString* pSeq = aSeq.getArray();
1865*b1cdbd2cSJim Jagielski pSeq[0] = rMsg1;
1866*b1cdbd2cSJim Jagielski SetError( nId, aSeq );
1867*b1cdbd2cSJim Jagielski }
1868*b1cdbd2cSJim Jagielski
SetError(sal_Int32 nId,const OUString & rMsg1,const OUString & rMsg2)1869*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1870*b1cdbd2cSJim Jagielski sal_Int32 nId,
1871*b1cdbd2cSJim Jagielski const OUString& rMsg1,
1872*b1cdbd2cSJim Jagielski const OUString& rMsg2)
1873*b1cdbd2cSJim Jagielski {
1874*b1cdbd2cSJim Jagielski Sequence<OUString> aSeq(2);
1875*b1cdbd2cSJim Jagielski OUString* pSeq = aSeq.getArray();
1876*b1cdbd2cSJim Jagielski pSeq[0] = rMsg1;
1877*b1cdbd2cSJim Jagielski pSeq[1] = rMsg2;
1878*b1cdbd2cSJim Jagielski SetError( nId, aSeq );
1879*b1cdbd2cSJim Jagielski }
1880*b1cdbd2cSJim Jagielski
SetError(sal_Int32 nId,const OUString & rMsg1,const OUString & rMsg2,const OUString & rMsg3)1881*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1882*b1cdbd2cSJim Jagielski sal_Int32 nId,
1883*b1cdbd2cSJim Jagielski const OUString& rMsg1,
1884*b1cdbd2cSJim Jagielski const OUString& rMsg2,
1885*b1cdbd2cSJim Jagielski const OUString& rMsg3)
1886*b1cdbd2cSJim Jagielski {
1887*b1cdbd2cSJim Jagielski Sequence<OUString> aSeq(3);
1888*b1cdbd2cSJim Jagielski OUString* pSeq = aSeq.getArray();
1889*b1cdbd2cSJim Jagielski pSeq[0] = rMsg1;
1890*b1cdbd2cSJim Jagielski pSeq[1] = rMsg2;
1891*b1cdbd2cSJim Jagielski pSeq[2] = rMsg3;
1892*b1cdbd2cSJim Jagielski SetError( nId, aSeq );
1893*b1cdbd2cSJim Jagielski }
1894*b1cdbd2cSJim Jagielski
SetError(sal_Int32 nId,const OUString & rMsg1,const OUString & rMsg2,const OUString & rMsg3,const OUString & rMsg4)1895*b1cdbd2cSJim Jagielski void SvXMLImport::SetError(
1896*b1cdbd2cSJim Jagielski sal_Int32 nId,
1897*b1cdbd2cSJim Jagielski const OUString& rMsg1,
1898*b1cdbd2cSJim Jagielski const OUString& rMsg2,
1899*b1cdbd2cSJim Jagielski const OUString& rMsg3,
1900*b1cdbd2cSJim Jagielski const OUString& rMsg4)
1901*b1cdbd2cSJim Jagielski {
1902*b1cdbd2cSJim Jagielski Sequence<OUString> aSeq(4);
1903*b1cdbd2cSJim Jagielski OUString* pSeq = aSeq.getArray();
1904*b1cdbd2cSJim Jagielski pSeq[0] = rMsg1;
1905*b1cdbd2cSJim Jagielski pSeq[1] = rMsg2;
1906*b1cdbd2cSJim Jagielski pSeq[2] = rMsg3;
1907*b1cdbd2cSJim Jagielski pSeq[3] = rMsg4;
1908*b1cdbd2cSJim Jagielski SetError( nId, aSeq );
1909*b1cdbd2cSJim Jagielski }
1910*b1cdbd2cSJim Jagielski
GetErrors()1911*b1cdbd2cSJim Jagielski XMLErrors* SvXMLImport::GetErrors()
1912*b1cdbd2cSJim Jagielski {
1913*b1cdbd2cSJim Jagielski return mpXMLErrors;
1914*b1cdbd2cSJim Jagielski }
1915*b1cdbd2cSJim Jagielski
DisposingModel()1916*b1cdbd2cSJim Jagielski void SvXMLImport::DisposingModel()
1917*b1cdbd2cSJim Jagielski {
1918*b1cdbd2cSJim Jagielski if( mxFontDecls.Is() )
1919*b1cdbd2cSJim Jagielski ((SvXMLStylesContext *)&mxFontDecls)->Clear();
1920*b1cdbd2cSJim Jagielski if( mxStyles.Is() )
1921*b1cdbd2cSJim Jagielski ((SvXMLStylesContext *)&mxStyles)->Clear();
1922*b1cdbd2cSJim Jagielski if( mxAutoStyles.Is() )
1923*b1cdbd2cSJim Jagielski ((SvXMLStylesContext *)&mxAutoStyles)->Clear();
1924*b1cdbd2cSJim Jagielski if( mxMasterStyles.Is() )
1925*b1cdbd2cSJim Jagielski ((SvXMLStylesContext *)&mxMasterStyles)->Clear();
1926*b1cdbd2cSJim Jagielski
1927*b1cdbd2cSJim Jagielski mxModel.set(0);
1928*b1cdbd2cSJim Jagielski mxEventListener.set(NULL);
1929*b1cdbd2cSJim Jagielski }
1930*b1cdbd2cSJim Jagielski
getInterfaceToIdentifierMapper()1931*b1cdbd2cSJim Jagielski ::comphelper::UnoInterfaceToUniqueIdentifierMapper& SvXMLImport::getInterfaceToIdentifierMapper()
1932*b1cdbd2cSJim Jagielski {
1933*b1cdbd2cSJim Jagielski return mpImpl->maInterfaceToIdentifierMapper;
1934*b1cdbd2cSJim Jagielski }
1935*b1cdbd2cSJim Jagielski
getServiceFactory()1936*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > SvXMLImport::getServiceFactory()
1937*b1cdbd2cSJim Jagielski {
1938*b1cdbd2cSJim Jagielski // #110680#
1939*b1cdbd2cSJim Jagielski return mxServiceFactory;
1940*b1cdbd2cSJim Jagielski }
1941*b1cdbd2cSJim Jagielski
1942*b1cdbd2cSJim Jagielski uno::Reference< uno::XComponentContext >
GetComponentContext() const1943*b1cdbd2cSJim Jagielski SvXMLImport::GetComponentContext() const
1944*b1cdbd2cSJim Jagielski {
1945*b1cdbd2cSJim Jagielski return mpImpl->mxComponentContext;
1946*b1cdbd2cSJim Jagielski }
1947*b1cdbd2cSJim Jagielski
GetBaseURL() const1948*b1cdbd2cSJim Jagielski String SvXMLImport::GetBaseURL() const
1949*b1cdbd2cSJim Jagielski {
1950*b1cdbd2cSJim Jagielski return mpImpl->aBaseURL.GetMainURL( INetURLObject::NO_DECODE );
1951*b1cdbd2cSJim Jagielski }
1952*b1cdbd2cSJim Jagielski
GetDocumentBase() const1953*b1cdbd2cSJim Jagielski String SvXMLImport::GetDocumentBase() const
1954*b1cdbd2cSJim Jagielski {
1955*b1cdbd2cSJim Jagielski return mpImpl->aDocBase.GetMainURL( INetURLObject::NO_DECODE );
1956*b1cdbd2cSJim Jagielski }
1957*b1cdbd2cSJim Jagielski
GetStreamName() const1958*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::GetStreamName() const
1959*b1cdbd2cSJim Jagielski {
1960*b1cdbd2cSJim Jagielski return mpImpl->mStreamName;
1961*b1cdbd2cSJim Jagielski }
1962*b1cdbd2cSJim Jagielski
1963*b1cdbd2cSJim Jagielski // --> OD 2004-08-10 #i28749#
IsShapePositionInHoriL2R() const1964*b1cdbd2cSJim Jagielski sal_Bool SvXMLImport::IsShapePositionInHoriL2R() const
1965*b1cdbd2cSJim Jagielski {
1966*b1cdbd2cSJim Jagielski return mpImpl->mbShapePositionInHoriL2R;
1967*b1cdbd2cSJim Jagielski }
1968*b1cdbd2cSJim Jagielski // <--
1969*b1cdbd2cSJim Jagielski
1970*b1cdbd2cSJim Jagielski // --> OD 2007-12-19 #152540#
IsTextDocInOOoFileFormat() const1971*b1cdbd2cSJim Jagielski sal_Bool SvXMLImport::IsTextDocInOOoFileFormat() const
1972*b1cdbd2cSJim Jagielski {
1973*b1cdbd2cSJim Jagielski return mpImpl->mbTextDocInOOoFileFormat;
1974*b1cdbd2cSJim Jagielski }
1975*b1cdbd2cSJim Jagielski
1976*b1cdbd2cSJim Jagielski // <--
1977*b1cdbd2cSJim Jagielski
initXForms()1978*b1cdbd2cSJim Jagielski void SvXMLImport::initXForms()
1979*b1cdbd2cSJim Jagielski {
1980*b1cdbd2cSJim Jagielski // dummy method; to be implemented by derived classes supporting XForms
1981*b1cdbd2cSJim Jagielski }
1982*b1cdbd2cSJim Jagielski
getBuildIds(sal_Int32 & rUPD,sal_Int32 & rBuild) const1983*b1cdbd2cSJim Jagielski bool SvXMLImport::getBuildIds( sal_Int32& rUPD, sal_Int32& rBuild ) const
1984*b1cdbd2cSJim Jagielski {
1985*b1cdbd2cSJim Jagielski bool bRet = false;
1986*b1cdbd2cSJim Jagielski if( mxImportInfo.is() ) try
1987*b1cdbd2cSJim Jagielski {
1988*b1cdbd2cSJim Jagielski const OUString aPropName(RTL_CONSTASCII_USTRINGPARAM("BuildId"));
1989*b1cdbd2cSJim Jagielski Reference< XPropertySetInfo > xSetInfo( mxImportInfo->getPropertySetInfo() );
1990*b1cdbd2cSJim Jagielski if( xSetInfo.is() && xSetInfo->hasPropertyByName( aPropName ) )
1991*b1cdbd2cSJim Jagielski {
1992*b1cdbd2cSJim Jagielski OUString aBuildId;
1993*b1cdbd2cSJim Jagielski mxImportInfo->getPropertyValue( aPropName ) >>= aBuildId;
1994*b1cdbd2cSJim Jagielski if( aBuildId.getLength() )
1995*b1cdbd2cSJim Jagielski {
1996*b1cdbd2cSJim Jagielski sal_Int32 nIndex = aBuildId.indexOf('$');
1997*b1cdbd2cSJim Jagielski if( nIndex != -1 )
1998*b1cdbd2cSJim Jagielski {
1999*b1cdbd2cSJim Jagielski rUPD = aBuildId.copy( 0, nIndex ).toInt32();
2000*b1cdbd2cSJim Jagielski rBuild = aBuildId.copy( nIndex+1 ).toInt32();
2001*b1cdbd2cSJim Jagielski bRet = true;
2002*b1cdbd2cSJim Jagielski }
2003*b1cdbd2cSJim Jagielski }
2004*b1cdbd2cSJim Jagielski }
2005*b1cdbd2cSJim Jagielski }
2006*b1cdbd2cSJim Jagielski catch( Exception& )
2007*b1cdbd2cSJim Jagielski {
2008*b1cdbd2cSJim Jagielski }
2009*b1cdbd2cSJim Jagielski return bRet;
2010*b1cdbd2cSJim Jagielski }
2011*b1cdbd2cSJim Jagielski
getGeneratorVersion() const2012*b1cdbd2cSJim Jagielski sal_uInt16 SvXMLImport::getGeneratorVersion() const
2013*b1cdbd2cSJim Jagielski {
2014*b1cdbd2cSJim Jagielski // --> ORW
2015*b1cdbd2cSJim Jagielski return mpImpl->getGeneratorVersion( *this );
2016*b1cdbd2cSJim Jagielski // <--
2017*b1cdbd2cSJim Jagielski }
2018*b1cdbd2cSJim Jagielski
isGraphicLoadOnDemandSupported() const2019*b1cdbd2cSJim Jagielski bool SvXMLImport::isGraphicLoadOnDemandSupported() const
2020*b1cdbd2cSJim Jagielski {
2021*b1cdbd2cSJim Jagielski return mbIsGraphicLoadOnDemandSupported;
2022*b1cdbd2cSJim Jagielski }
2023*b1cdbd2cSJim Jagielski
GetODFVersion() const2024*b1cdbd2cSJim Jagielski ::rtl::OUString SvXMLImport::GetODFVersion() const
2025*b1cdbd2cSJim Jagielski {
2026*b1cdbd2cSJim Jagielski return mpImpl->aODFVersion;
2027*b1cdbd2cSJim Jagielski }
2028*b1cdbd2cSJim Jagielski
2029*b1cdbd2cSJim Jagielski // xml:id for RDF metadata
SetXmlId(uno::Reference<uno::XInterface> const & i_xIfc,::rtl::OUString const & i_rXmlId)2030*b1cdbd2cSJim Jagielski void SvXMLImport::SetXmlId(uno::Reference<uno::XInterface> const & i_xIfc,
2031*b1cdbd2cSJim Jagielski ::rtl::OUString const & i_rXmlId)
2032*b1cdbd2cSJim Jagielski {
2033*b1cdbd2cSJim Jagielski if (i_rXmlId.getLength() > 0) {
2034*b1cdbd2cSJim Jagielski try {
2035*b1cdbd2cSJim Jagielski const uno::Reference<rdf::XMetadatable> xMeta(i_xIfc,
2036*b1cdbd2cSJim Jagielski uno::UNO_QUERY);
2037*b1cdbd2cSJim Jagielski //FIXME: not yet
2038*b1cdbd2cSJim Jagielski // OSL_ENSURE(xMeta.is(), "xml:id: not XMetadatable");
2039*b1cdbd2cSJim Jagielski if (xMeta.is()) {
2040*b1cdbd2cSJim Jagielski const beans::StringPair mdref( GetStreamName(), i_rXmlId );
2041*b1cdbd2cSJim Jagielski try {
2042*b1cdbd2cSJim Jagielski xMeta->setMetadataReference(mdref);
2043*b1cdbd2cSJim Jagielski } catch (lang::IllegalArgumentException &) {
2044*b1cdbd2cSJim Jagielski // probably duplicate; ignore
2045*b1cdbd2cSJim Jagielski OSL_TRACE("SvXMLImport::SetXmlId: cannot set xml:id");
2046*b1cdbd2cSJim Jagielski }
2047*b1cdbd2cSJim Jagielski }
2048*b1cdbd2cSJim Jagielski } catch (uno::Exception &) {
2049*b1cdbd2cSJim Jagielski OSL_ENSURE(false, "SvXMLImport::SetXmlId: exception?");
2050*b1cdbd2cSJim Jagielski }
2051*b1cdbd2cSJim Jagielski }
2052*b1cdbd2cSJim Jagielski }
2053*b1cdbd2cSJim Jagielski
2054*b1cdbd2cSJim Jagielski SAL_DLLPRIVATE ::xmloff::RDFaImportHelper &
GetRDFaImportHelper()2055*b1cdbd2cSJim Jagielski SvXMLImport::GetRDFaImportHelper()
2056*b1cdbd2cSJim Jagielski {
2057*b1cdbd2cSJim Jagielski if (!mpImpl->mpRDFaHelper.get())
2058*b1cdbd2cSJim Jagielski {
2059*b1cdbd2cSJim Jagielski mpImpl->mpRDFaHelper.reset( new ::xmloff::RDFaImportHelper(*this) );
2060*b1cdbd2cSJim Jagielski }
2061*b1cdbd2cSJim Jagielski return *mpImpl->mpRDFaHelper;
2062*b1cdbd2cSJim Jagielski }
2063*b1cdbd2cSJim Jagielski
2064*b1cdbd2cSJim Jagielski void
AddRDFa(uno::Reference<rdf::XMetadatable> i_xObject,::rtl::OUString const & i_rAbout,::rtl::OUString const & i_rProperty,::rtl::OUString const & i_rContent,::rtl::OUString const & i_rDatatype)2065*b1cdbd2cSJim Jagielski SvXMLImport::AddRDFa(uno::Reference<rdf::XMetadatable> i_xObject,
2066*b1cdbd2cSJim Jagielski ::rtl::OUString const & i_rAbout,
2067*b1cdbd2cSJim Jagielski ::rtl::OUString const & i_rProperty,
2068*b1cdbd2cSJim Jagielski ::rtl::OUString const & i_rContent,
2069*b1cdbd2cSJim Jagielski ::rtl::OUString const & i_rDatatype)
2070*b1cdbd2cSJim Jagielski {
2071*b1cdbd2cSJim Jagielski // N.B.: we only get called if i_xObject had xhtml:about attribute
2072*b1cdbd2cSJim Jagielski // (an empty attribute value is valid)
2073*b1cdbd2cSJim Jagielski ::xmloff::RDFaImportHelper & rRDFaHelper( GetRDFaImportHelper() );
2074*b1cdbd2cSJim Jagielski rRDFaHelper.ParseAndAddRDFa(i_xObject,
2075*b1cdbd2cSJim Jagielski i_rAbout, i_rProperty, i_rContent, i_rDatatype);
2076*b1cdbd2cSJim Jagielski }
2077*b1cdbd2cSJim Jagielski
2078