diff options
Diffstat (limited to 'writerfilter/inc/ooxml/OOXMLDocument.hxx')
-rw-r--r-- | writerfilter/inc/ooxml/OOXMLDocument.hxx | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/writerfilter/inc/ooxml/OOXMLDocument.hxx b/writerfilter/inc/ooxml/OOXMLDocument.hxx new file mode 100644 index 000000000000..cb5991c00929 --- /dev/null +++ b/writerfilter/inc/ooxml/OOXMLDocument.hxx @@ -0,0 +1,279 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef INCLUDED_OOXML_DOCUMENT_HXX +#define INCLUDED_OOXML_DOCUMENT_HXX + +#include <sal/types.h> +#include <com/sun/star/uno/Reference.hxx> +#include <com/sun/star/io/XInputStream.hpp> +#ifndef _COM_SUN_STAR_UNO_XCOMPONENTCONTEX_HPP_ +#include <com/sun/star/uno/XComponentContext.hpp> +#endif +#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX +#include <resourcemodel/WW8ResourceModel.hxx> +#endif +#ifndef _COM_SUN_STAR_XML_SAX_XPARSER_HOO_ +#include <com/sun/star/xml/sax/XParser.hpp> +#endif +#include <com/sun/star/xml/sax/XFastParser.hpp> +#include <com/sun/star/xml/sax/XFastTokenHandler.hpp> +#include <com/sun/star/frame/XModel.hpp> +#include <com/sun/star/drawing/XDrawPage.hpp> + +/** + @file OOXMLDocument.hxx + + <h1>Import of OOXML WordprocessingML Documents</h1> + + The following picture shows the classes involved in importing OOXML + WordprocessingML documents. + + @image html ooxmlimportchain.png + + The DOCX consists of parts. Each part is an XML document. The + OOXMLDocument opens the DOCX and creates a SAX parser for the part + containing the main document content. The OOXMLDocument creates a + SAX handler, too. This handler is set as the handler for the events + created by the parser. Finally the OOXMLDocument initiates the + parsing process. + + The SAX handler hosts a stack of contexts. Each context is an + instance of a class derived from OOXMLContext. There is a context + class for each <define> in the model.xml. + + For a detailed information about how the contexts are handled see + the documentation for OOXMLContext. + + The contexts know how to convert an element in OOXML to the + intermediate format that the domain mapper understands. They + enumerate the according entity in OOXML by sending the according + events to the domain mapper. + + The domain mapper knows how to convert the intermediate format to + API calls. It takes the events sent by the contexts and uses the + core API to insert the according elements to the core. + */ + +namespace writerfilter { +namespace ooxml +{ + +using namespace com::sun::star; + +class WRITERFILTER_DLLPUBLIC OOXMLStream +{ +public: + enum StreamType_t { UNKNOWN, DOCUMENT, STYLES, FONTTABLE, NUMBERING, + FOOTNOTES, ENDNOTES, COMMENTS, THEME, SETTINGS }; + typedef boost::shared_ptr<OOXMLStream> Pointer_t; + + virtual ~OOXMLStream() {} + + /** + Returns parser for this stream. + */ + virtual uno::Reference<xml::sax::XParser> getParser() = 0; + + /** + Returns fast parser for this stream. + */ + virtual uno::Reference<xml::sax::XFastParser> getFastParser() = 0; + + virtual uno::Reference<io::XInputStream> getDocumentStream() = 0; + + virtual uno::Reference<io::XInputStream> getStorageStream() = 0; + + /** + Returns component context for this stream. + */ + virtual uno::Reference<uno::XComponentContext> getContext() = 0; + + /** + Returns target URL from relationships for a given id. + + @param rId the id to look for + + @return the URL found or an empty string + */ + virtual ::rtl::OUString getTargetForId(const ::rtl::OUString & rId) = 0; + + virtual const ::rtl::OUString & getTarget() const = 0; + + virtual uno::Reference<xml::sax::XFastTokenHandler> + getFastTokenHandler(uno::Reference<uno::XComponentContext> rContext) = 0; + +}; + +class WRITERFILTER_DLLPUBLIC OOXMLDocument : public writerfilter::Reference<Stream> +{ +public: + /** + Pointer to this stream. + */ + typedef boost::shared_ptr<OOXMLDocument> Pointer_t; + + virtual ~OOXMLDocument() {} + + /** + Resolves this document to a stream handler. + + @param rStream stream handler to resolve this document to + */ + virtual void resolve(Stream & rStream) = 0; + + /** + Returns string representation of the type of this reference. + + DEBUGGING PURPOSE ONLY. + */ + virtual string getType() const = 0; + + /** + Resolves a footnote to a stream handler. + + A footnote is resolved if either the note type or + note id matches. + + @param rStream stream handler to resolve to + @param rNoteType type of footnote to resolve + @param rNoteId id of the footnote to resolve + */ + virtual void resolveFootnote(Stream & rStream, + const Id & rNoteType, + const rtl::OUString & rNoteId) = 0; + /** + Resolves an endnote to a stream handler. + + An endnote is resolved if either the note type or + note id matches. + + @param rStream stream handler to resolve to + @param rNoteType type of footnote to resolve + @param rNoteId id of the endnote to resolve + */ + virtual void resolveEndnote(Stream & rStream, + const Id & rNoteType, + const rtl::OUString & rNoteId) = 0; + + /** + Resolves a comment to a stream handler. + + @param rStream stream handler to resolve to + @param rComment id of the comment to resolve + */ + virtual void resolveComment(Stream & rStream, + const rtl::OUString & rCommentId) = 0; + + /** + Resolves a picture to a stream handler. + + @param rStream stream handler to resolve to + @param rPictureId id of the picture to resolve + */ + virtual void resolvePicture(Stream & rStream, + const rtl::OUString & rPictureId) = 0; + + /** + Resolves a header to a stream handler. + + @param rStream stream handler to resolve to + @param type type of header to resolve: + NS_ooxml::LN_Value_ST_HrdFtr_even header on even page + NS_ooxml::LN_Value_ST_HrdFtr_default header on right page + NS_ooxml::LN_Value_ST_HrdFtr_first header on first page + + @param rId id of the header + */ + virtual void resolveHeader(Stream & rStream, + const sal_Int32 type, + const rtl::OUString & rId) = 0; + + /** + Resolves a footer to a stream handler. + + @param rStream stream handler to resolve to + @param type type of footer to resolve: + NS_ooxml::LN_Value_ST_HrdFtr_even header on even page + NS_ooxml::LN_Value_ST_HrdFtr_default header on right page + NS_ooxml::LN_Value_ST_HrdFtr_first header on first page + + @param rId id of the header + */ + virtual void resolveFooter(Stream & rStream, + const sal_Int32 type, + const rtl::OUString & rId) = 0; + + + /** + Returns target URL from relationships for a given id. + + @param rId the id to look for + + @return the URL found or an empty string + */ + virtual ::rtl::OUString getTargetForId(const ::rtl::OUString & rId) = 0; + + virtual void setModel(uno::Reference<frame::XModel> xModel) = 0; + virtual uno::Reference<frame::XModel> getModel() = 0; + virtual void setDrawPage(uno::Reference<drawing::XDrawPage> xDrawPage) = 0; + virtual uno::Reference<drawing::XDrawPage> getDrawPage() = 0; + virtual uno::Reference<io::XInputStream> getInputStream() = 0; + virtual uno::Reference<io::XInputStream> getStorageStream() = 0; + virtual uno::Reference<io::XInputStream> getInputStreamForId + (const ::rtl::OUString & rId) = 0; + virtual void setXNoteId(const rtl::OUString & rId) = 0; + virtual const ::rtl::OUString & getXNoteId() const = 0; + virtual void setXNoteType(const Id & nId) = 0; + virtual const Id & getXNoteType() const = 0; + virtual const ::rtl::OUString & getTarget() const = 0; +}; + + +class WRITERFILTER_DLLPUBLIC OOXMLDocumentFactory +{ +public: + static OOXMLStream::Pointer_t + createStream(uno::Reference<uno::XComponentContext> rContext, + uno::Reference<io::XInputStream> rStream, + OOXMLStream::StreamType_t nStreamType = OOXMLStream::DOCUMENT); + + static OOXMLStream::Pointer_t + createStream(OOXMLStream::Pointer_t pStream, + OOXMLStream::StreamType_t nStreamType = OOXMLStream::DOCUMENT); + + static OOXMLStream::Pointer_t + createStream(OOXMLStream::Pointer_t pStream, const rtl::OUString & rId); + + static OOXMLDocument * + createDocument(OOXMLStream::Pointer_t pStream); + +}; + +void ooxmlidsToXML(::std::iostream & out); + +}} +#endif // INCLUDED_OOXML_DOCUMENT_HXX |