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/frame/XModel.hpp>
32 #include <com/sun/star/drawing/XDrawPage.hpp>
35 @file OOXMLDocument.hxx
37 <h1>Import of OOXML WordprocessingML Documents</h1>
39 The following picture shows the classes involved in importing OOXML
40 WordprocessingML documents.
42 @image html ooxmlimportchain.png
44 The DOCX consists of parts. Each part is an XML document. The
45 OOXMLDocument opens the DOCX and creates a SAX parser for the part
46 containing the main document content. The OOXMLDocument creates a
47 SAX handler, too. This handler is set as the handler for the events
48 created by the parser. Finally the OOXMLDocument initiates the
51 The SAX handler hosts a stack of contexts. Each context is an
52 instance of a class derived from OOXMLContext. There is a context
53 class for each <define> in the model.xml.
55 For a detailed information about how the contexts are handled see
56 the documentation for OOXMLContext.
58 The contexts know how to convert an element in OOXML to the
59 intermediate format that the domain mapper understands. They
60 enumerate the according entity in OOXML by sending the according
61 events to the domain mapper.
63 The domain mapper knows how to convert the intermediate format to
64 API calls. It takes the events sent by the contexts and uses the
65 core API to insert the according elements to the core.
68 namespace writerfilter
{
72 using namespace com::sun::star
;
74 class WRITERFILTER_OOXML_DLLPUBLIC OOXMLStream
77 enum StreamType_t
{ UNKNOWN
, DOCUMENT
, STYLES
, FONTTABLE
, NUMBERING
,
78 FOOTNOTES
, ENDNOTES
, COMMENTS
, THEME
, SETTINGS
, VBAPROJECT
};
79 typedef boost::shared_ptr
<OOXMLStream
> Pointer_t
;
81 virtual ~OOXMLStream() {}
84 Returns parser for this stream.
86 virtual uno::Reference
<xml::sax::XParser
> getParser() = 0;
89 Returns fast parser for this stream.
91 virtual uno::Reference
<xml::sax::XFastParser
> getFastParser() = 0;
93 virtual uno::Reference
<io::XInputStream
> getDocumentStream() = 0;
95 virtual uno::Reference
<io::XInputStream
> getStorageStream() = 0;
98 Returns component context for this stream.
100 virtual uno::Reference
<uno::XComponentContext
> getContext() = 0;
103 Returns target URL from relationships for a given id.
105 @param rId the id to look for
107 @return the URL found or an empty string
109 virtual OUString
getTargetForId(const OUString
& rId
) = 0;
111 virtual const OUString
& getTarget() const = 0;
113 virtual uno::Reference
<xml::sax::XFastTokenHandler
>
114 getFastTokenHandler(uno::Reference
<uno::XComponentContext
> rContext
) = 0;
118 class WRITERFILTER_OOXML_DLLPUBLIC OOXMLDocument
: public writerfilter::Reference
<Stream
>
122 Pointer to this stream.
124 typedef boost::shared_ptr
<OOXMLDocument
> Pointer_t
;
126 virtual ~OOXMLDocument() {}
129 Resolves this document to a stream handler.
131 @param rStream stream handler to resolve this document to
133 virtual void resolve(Stream
& rStream
) = 0;
136 Returns string representation of the type of this reference.
138 DEBUGGING PURPOSE ONLY.
140 virtual string
getType() const = 0;
143 Resolves a footnote to a stream handler.
145 A footnote is resolved if either the note type or
148 @param rStream stream handler to resolve to
149 @param rNoteType type of footnote to resolve
150 @param rNoteId id of the footnote to resolve
152 virtual void resolveFootnote(Stream
& rStream
,
153 const Id
& rNoteType
,
154 const sal_Int32 nNoteId
) = 0;
156 Resolves an endnote to a stream handler.
158 An endnote is resolved if either the note type or
161 @param rStream stream handler to resolve to
162 @param rNoteType type of footnote to resolve
163 @param rNoteId id of the endnote to resolve
165 virtual void resolveEndnote(Stream
& rStream
,
166 const Id
& rNoteType
,
167 const sal_Int32 NoteId
) = 0;
170 Resolves a comment to a stream handler.
172 @param rStream stream handler to resolve to
173 @param rComment id of the comment to resolve
175 virtual void resolveComment(Stream
& rStream
,
176 const sal_Int32 nCommentId
) = 0;
179 Resolves a picture to a stream handler.
181 @param rStream stream handler to resolve to
182 @param rPictureId id of the picture to resolve
184 virtual void resolvePicture(Stream
& rStream
,
185 const OUString
& rPictureId
) = 0;
188 Resolves a header to a stream handler.
190 @param rStream stream handler to resolve to
191 @param type type of header to resolve:
192 NS_ooxml::LN_Value_ST_HrdFtr_even header on even page
193 NS_ooxml::LN_Value_ST_HrdFtr_default header on right page
194 NS_ooxml::LN_Value_ST_HrdFtr_first header on first page
196 @param rId id of the header
198 virtual void resolveHeader(Stream
& rStream
,
199 const sal_Int32 type
,
200 const OUString
& rId
) = 0;
203 Resolves a footer to a stream handler.
205 @param rStream stream handler to resolve to
206 @param type type of footer to resolve:
207 NS_ooxml::LN_Value_ST_HrdFtr_even header on even page
208 NS_ooxml::LN_Value_ST_HrdFtr_default header on right page
209 NS_ooxml::LN_Value_ST_HrdFtr_first header on first page
211 @param rId id of the header
213 virtual void resolveFooter(Stream
& rStream
,
214 const sal_Int32 type
,
215 const OUString
& rId
) = 0;
219 Returns target URL from relationships for a given id.
221 @param rId the id to look for
223 @return the URL found or an empty string
225 virtual OUString
getTargetForId(const OUString
& rId
) = 0;
227 virtual void setModel(uno::Reference
<frame::XModel
> xModel
) = 0;
228 virtual uno::Reference
<frame::XModel
> getModel() = 0;
229 virtual void setDrawPage(uno::Reference
<drawing::XDrawPage
> xDrawPage
) = 0;
230 virtual uno::Reference
<drawing::XDrawPage
> getDrawPage() = 0;
231 virtual uno::Reference
<io::XInputStream
> getInputStream() = 0;
232 virtual uno::Reference
<io::XInputStream
> getStorageStream() = 0;
233 virtual uno::Reference
<io::XInputStream
> getInputStreamForId
234 (const OUString
& rId
) = 0;
235 virtual void setXNoteId(const sal_Int32 nId
) = 0;
236 virtual sal_Int32
getXNoteId() const = 0;
237 virtual void setXNoteType(const Id
& nId
) = 0;
238 virtual const Id
& getXNoteType() const = 0;
239 virtual const OUString
& getTarget() const = 0;
240 virtual uno::Reference
<xml::sax::XFastShapeContextHandler
> getShapeContext( ) = 0;
241 virtual void setShapeContext( uno::Reference
<xml::sax::XFastShapeContextHandler
> xContext
) = 0;
245 class WRITERFILTER_OOXML_DLLPUBLIC OOXMLDocumentFactory
248 static OOXMLStream::Pointer_t
249 createStream(uno::Reference
<uno::XComponentContext
> rContext
,
250 uno::Reference
<io::XInputStream
> rStream
,
252 OOXMLStream::StreamType_t nStreamType
= OOXMLStream::DOCUMENT
);
254 static OOXMLStream::Pointer_t
255 createStream(OOXMLStream::Pointer_t pStream
,
256 OOXMLStream::StreamType_t nStreamType
= OOXMLStream::DOCUMENT
);
258 static OOXMLStream::Pointer_t
259 createStream(OOXMLStream::Pointer_t pStream
, const OUString
& rId
);
261 static OOXMLDocument
*
262 createDocument(OOXMLStream::Pointer_t pStream
);
266 void ooxmlidsToXML(::std::iostream
& out
);
269 #endif // INCLUDED_OOXML_DOCUMENT_HXX
271 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */