1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
19 #ifndef INCLUDED_OOXML_DOCUMENT_HXX
20 #define INCLUDED_OOXML_DOCUMENT_HXX
22 #include <sal/types.h>
23 #include <com/sun/star/uno/Reference.hxx>
24 #include <com/sun/star/io/XInputStream.hpp>
25 #include <com/sun/star/uno/XComponentContext.hpp>
26 #include <resourcemodel/WW8ResourceModel.hxx>
27 #include <com/sun/star/xml/sax/XParser.hpp>
28 #include <com/sun/star/xml/sax/XFastParser.hpp>
29 #include <com/sun/star/xml/sax/XFastTokenHandler.hpp>
30 #include <com/sun/star/xml/sax/XFastShapeContextHandler.hpp>
31 #include <com/sun/star/xml/dom/XDocument.hpp>
32 #include <com/sun/star/frame/XModel.hpp>
33 #include <com/sun/star/drawing/XDrawPage.hpp>
36 @file OOXMLDocument.hxx
38 <h1>Import of OOXML WordprocessingML Documents</h1>
40 The following picture shows the classes involved in importing OOXML
41 WordprocessingML documents.
43 @image html ooxmlimportchain.png
45 The DOCX consists of parts. Each part is an XML document. The
46 OOXMLDocument opens the DOCX and creates a SAX parser for the part
47 containing the main document content. The OOXMLDocument creates a
48 SAX handler, too. This handler is set as the handler for the events
49 created by the parser. Finally the OOXMLDocument initiates the
52 The SAX handler hosts a stack of contexts. Each context is an
53 instance of a class derived from OOXMLContext. There is a context
54 class for each <define> in the model.xml.
56 For a detailed information about how the contexts are handled see
57 the documentation for OOXMLContext.
59 The contexts know how to convert an element in OOXML to the
60 intermediate format that the domain mapper understands. They
61 enumerate the according entity in OOXML by sending the according
62 events to the domain mapper.
64 The domain mapper knows how to convert the intermediate format to
65 API calls. It takes the events sent by the contexts and uses the
66 core API to insert the according elements to the core.
69 namespace writerfilter
{
73 using namespace com::sun::star
;
75 class WRITERFILTER_OOXML_DLLPUBLIC OOXMLStream
78 enum StreamType_t
{ UNKNOWN
, DOCUMENT
, STYLES
, FONTTABLE
, NUMBERING
,
79 FOOTNOTES
, ENDNOTES
, COMMENTS
, THEME
, CUSTOMXML
, CUSTOMXMLPROPS
, ACTIVEX
, ACTIVEXBIN
, SETTINGS
, VBAPROJECT
};
80 typedef boost::shared_ptr
<OOXMLStream
> Pointer_t
;
82 virtual ~OOXMLStream() {}
85 Returns parser for this stream.
87 virtual uno::Reference
<xml::sax::XParser
> getParser() = 0;
90 Returns fast parser for this stream.
92 virtual uno::Reference
<xml::sax::XFastParser
> getFastParser() = 0;
94 virtual uno::Reference
<io::XInputStream
> getDocumentStream() = 0;
96 virtual uno::Reference
<io::XInputStream
> getStorageStream() = 0;
99 Returns component context for this stream.
101 virtual uno::Reference
<uno::XComponentContext
> getContext() = 0;
104 Returns target URL from relationships for a given id.
106 @param rId the id to look for
108 @return the URL found or an empty string
110 virtual OUString
getTargetForId(const OUString
& rId
) = 0;
112 virtual const OUString
& getTarget() const = 0;
114 virtual uno::Reference
<xml::sax::XFastTokenHandler
>
115 getFastTokenHandler(uno::Reference
<uno::XComponentContext
> rContext
) = 0;
119 class WRITERFILTER_OOXML_DLLPUBLIC OOXMLDocument
: public writerfilter::Reference
<Stream
>
123 Pointer to this stream.
125 typedef boost::shared_ptr
<OOXMLDocument
> Pointer_t
;
127 virtual ~OOXMLDocument() {}
130 Resolves this document to a stream handler.
132 @param rStream stream handler to resolve this document to
134 virtual void resolve(Stream
& rStream
) = 0;
137 Returns string representation of the type of this reference.
139 DEBUGGING PURPOSE ONLY.
141 virtual string
getType() const = 0;
144 Resolves a footnote to a stream handler.
146 A footnote is resolved if either the note type or
149 @param rStream stream handler to resolve to
150 @param rNoteType type of footnote to resolve
151 @param rNoteId id of the footnote to resolve
153 virtual void resolveFootnote(Stream
& rStream
,
154 const Id
& rNoteType
,
155 const sal_Int32 nNoteId
) = 0;
157 Resolves an endnote to a stream handler.
159 An endnote is resolved if either the note type or
162 @param rStream stream handler to resolve to
163 @param rNoteType type of footnote to resolve
164 @param rNoteId id of the endnote to resolve
166 virtual void resolveEndnote(Stream
& rStream
,
167 const Id
& rNoteType
,
168 const sal_Int32 NoteId
) = 0;
171 Resolves a comment to a stream handler.
173 @param rStream stream handler to resolve to
174 @param rComment id of the comment to resolve
176 virtual void resolveComment(Stream
& rStream
,
177 const sal_Int32 nCommentId
) = 0;
180 Resolves a picture to a stream handler.
182 @param rStream stream handler to resolve to
183 @param rPictureId id of the picture to resolve
185 virtual void resolvePicture(Stream
& rStream
,
186 const OUString
& rPictureId
) = 0;
189 Resolves a header to a stream handler.
191 @param rStream stream handler to resolve to
192 @param type type of header to resolve:
193 NS_ooxml::LN_Value_ST_HrdFtr_even header on even page
194 NS_ooxml::LN_Value_ST_HrdFtr_default header on right page
195 NS_ooxml::LN_Value_ST_HrdFtr_first header on first page
197 @param rId id of the header
199 virtual void resolveHeader(Stream
& rStream
,
200 const sal_Int32 type
,
201 const OUString
& rId
) = 0;
204 Resolves a footer to a stream handler.
206 @param rStream stream handler to resolve to
207 @param type type of footer to resolve:
208 NS_ooxml::LN_Value_ST_HrdFtr_even header on even page
209 NS_ooxml::LN_Value_ST_HrdFtr_default header on right page
210 NS_ooxml::LN_Value_ST_HrdFtr_first header on first page
212 @param rId id of the header
214 virtual void resolveFooter(Stream
& rStream
,
215 const sal_Int32 type
,
216 const OUString
& rId
) = 0;
220 Returns target URL from relationships for a given id.
222 @param rId the id to look for
224 @return the URL found or an empty string
226 virtual OUString
getTargetForId(const OUString
& rId
) = 0;
228 virtual void setModel(uno::Reference
<frame::XModel
> xModel
) = 0;
229 virtual uno::Reference
<frame::XModel
> getModel() = 0;
230 virtual void setDrawPage(uno::Reference
<drawing::XDrawPage
> xDrawPage
) = 0;
231 virtual uno::Reference
<drawing::XDrawPage
> getDrawPage() = 0;
232 virtual uno::Reference
<io::XInputStream
> getInputStream() = 0;
233 virtual uno::Reference
<io::XInputStream
> getStorageStream() = 0;
234 virtual uno::Reference
<io::XInputStream
> getInputStreamForId
235 (const OUString
& rId
) = 0;
236 virtual void setXNoteId(const sal_Int32 nId
) = 0;
237 virtual sal_Int32
getXNoteId() const = 0;
238 virtual void setXNoteType(const Id
& nId
) = 0;
239 virtual const Id
& getXNoteType() const = 0;
240 virtual const OUString
& getTarget() const = 0;
241 virtual uno::Reference
<xml::sax::XFastShapeContextHandler
> getShapeContext( ) = 0;
242 virtual void setShapeContext( uno::Reference
<xml::sax::XFastShapeContextHandler
> xContext
) = 0;
243 virtual uno::Reference
<xml::dom::XDocument
> getThemeDom( ) = 0;
244 virtual void setThemeDom( uno::Reference
<xml::dom::XDocument
> xThemeDom
) = 0;
245 virtual uno::Sequence
<uno::Reference
<xml::dom::XDocument
> > getCustomXmlDomList( ) = 0;
246 virtual uno::Sequence
<uno::Reference
<xml::dom::XDocument
> > getCustomXmlDomPropsList( ) = 0;
247 virtual uno::Sequence
<uno::Reference
<xml::dom::XDocument
> > getActiveXDomList( ) = 0;
248 virtual uno::Sequence
<uno::Reference
<io::XInputStream
> > getActiveXBinList() = 0;
252 class WRITERFILTER_OOXML_DLLPUBLIC OOXMLDocumentFactory
255 static OOXMLStream::Pointer_t
256 createStream(uno::Reference
<uno::XComponentContext
> rContext
,
257 uno::Reference
<io::XInputStream
> rStream
,
259 OOXMLStream::StreamType_t nStreamType
= OOXMLStream::DOCUMENT
);
261 static OOXMLStream::Pointer_t
262 createStream(OOXMLStream::Pointer_t pStream
,
263 OOXMLStream::StreamType_t nStreamType
= OOXMLStream::DOCUMENT
);
265 static OOXMLStream::Pointer_t
266 createStream(OOXMLStream::Pointer_t pStream
, const OUString
& rId
);
268 static OOXMLDocument
*
269 createDocument(OOXMLStream::Pointer_t pStream
);
273 void ooxmlidsToXML(::std::iostream
& out
);
276 #endif // INCLUDED_OOXML_DOCUMENT_HXX
278 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */