LibreOffice Module writerfilter (master) 1
OOXMLDocumentImpl.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
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/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
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 .
18 */
19#pragma once
20
22
23#include <com/sun/star/xml/dom/XDocument.hpp>
24#include <com/sun/star/graphic/XGraphicMapper.hpp>
25
28
29#include "OOXMLPropertySet.hxx"
30
31#include <vector>
32#include <stack>
33
34namespace writerfilter::ooxml
35{
36
38{
40 css::uno::Reference<css::task::XStatusIndicator> mxStatusIndicator;
43 sal_Int32 mnXNoteId;
44
45 css::uno::Reference<css::frame::XModel> mxModel;
46 css::uno::Reference<css::drawing::XDrawPage> mxDrawPage;
47 css::uno::Reference<css::xml::dom::XDocument> mxGlossaryDocDom;
48 css::uno::Sequence < css::uno::Sequence< css::beans::NamedValue > > mxGlossaryDomList;
50 std::stack< rtl::Reference<oox::shape::ShapeContextHandler> > maShapeContexts;
51 css::uno::Reference<css::xml::dom::XDocument> mxThemeDom;
52 css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > mxCustomXmlDomList;
53 css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > mxCustomXmlDomPropsList;
54 css::uno::Reference<css::xml::dom::XDocument> mxCustomXmlProsDom;
55 css::uno::Reference<css::io::XInputStream> mxEmbeddings;
56 css::uno::Sequence < css::beans::PropertyValue > mxEmbeddingsList;
57 std::vector<css::beans::PropertyValue> m_aEmbeddings;
61 sal_Int32 mnPercentSize;
69 OUString m_rBaseURL;
70 css::uno::Sequence<css::beans::PropertyValue> maMediaDescriptor;
72 css::uno::Reference<css::graphic::XGraphicMapper> mxGraphicMapper;
73 // For a document there is a single theme in document.xml.rels
74 // and the same is used by header and footer as well.
78
80
81private:
82 void resolveFastSubStream(Stream & rStream,
84
85 static void resolveFastSubStreamWithId(Stream & rStream,
87 sal_uInt32 nId);
88
89 css::uno::Reference<css::xml::dom::XDocument> importSubStream(OOXMLStream::StreamType_t nType);
90
92
94 getSubStream(const OUString & rId);
95
97 getXNoteStream(OOXMLStream::StreamType_t nType, const sal_Int32 nNoteId);
98
99 void resolveCustomXmlStream(Stream & rStream);
100 void resolveGlossaryStream(Stream & rStream);
103
104public:
105 OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream, css::uno::Reference<css::task::XStatusIndicator> xStatusIndicator, bool bSkipImages, const css::uno::Sequence<css::beans::PropertyValue>& rDescriptor);
106 virtual ~OOXMLDocumentImpl() override;
107
108 virtual void resolve(Stream & rStream) override;
109
110 virtual void resolveFootnote(Stream & rStream,
111 Id aType,
112 const sal_Int32 nNoteId) override;
113 virtual void resolveEndnote(Stream & rStream,
114 Id aType,
115 const sal_Int32 nNoteId) override;
116 virtual void resolveHeader(Stream & rStream,
117 const sal_Int32 type,
118 const OUString & rId) override;
119 virtual void resolveFooter(Stream & rStream,
120 const sal_Int32 type,
121 const OUString & rId) override;
122
123 virtual void resolveComment(Stream & rStream, const sal_Int32 nId) override;
124
125 OOXMLPropertySet * getPicturePropSet(const OUString & rId);
126 virtual void resolvePicture(Stream & rStream, const OUString & rId) override;
127
128 virtual OUString getTargetForId(const OUString & rId) override;
129
130 virtual void setModel(css::uno::Reference<css::frame::XModel> xModel) override;
131 virtual css::uno::Reference<css::frame::XModel> getModel() override;
132 virtual void setDrawPage(css::uno::Reference<css::drawing::XDrawPage> xDrawPage) override;
133 virtual css::uno::Reference<css::drawing::XDrawPage> getDrawPage() override;
134 virtual css::uno::Reference<css::io::XInputStream> getInputStreamForId(const OUString & rId) override;
135 virtual void setXNoteId(const sal_Int32 nId) override;
136 virtual sal_Int32 getXNoteId() const override;
137 virtual const OUString & getTarget() const override;
140 virtual const oox::drawingml::ThemePtr & getTheme() const override
141 {
142 return mpTheme;
143 }
144 void pushShapeContext() override;
145 void popShapeContext() override;
146 virtual css::uno::Reference<css::xml::dom::XDocument> getThemeDom() override;
147 virtual css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > getCustomXmlDomList() override;
148 virtual css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > getCustomXmlDomPropsList() override;
149 virtual css::uno::Reference<css::xml::dom::XDocument> getGlossaryDocDom() override;
150 virtual css::uno::Sequence<css::uno::Sequence< css::beans::NamedValue> > getGlossaryDomList() override;
151 virtual css::uno::Sequence<css::beans::PropertyValue > getEmbeddingsList() override;
152
153 void incrementProgress();
154 bool IsSkipImages() const { return mbSkipImages; };
155 OUString const& GetDocumentBaseURL() const { return m_rBaseURL; };
156 const css::uno::Sequence<css::beans::PropertyValue>& getMediaDescriptor() const;
157
158 const css::uno::Reference<css::graphic::XGraphicMapper>& getGraphicMapper() const
159 {
160 return mxGraphicMapper;
161 }
162
163 void setTheme(const oox::drawingml::ThemePtr& pTheme) { mpTheme = pTheme; }
164
167};
168
169}
170
171/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Handler for a stream.
virtual css::uno::Reference< css::frame::XModel > getModel() override
rtl::Reference< oox::drawingml::ThemeFilterBase > mxThemeFilterBase
css::uno::Reference< css::io::XInputStream > mxEmbeddings
css::uno::Sequence< css::uno::Sequence< css::beans::NamedValue > > mxGlossaryDomList
writerfilter::Reference< Stream >::Pointer_t getXNoteStream(OOXMLStream::StreamType_t nType, const sal_Int32 nNoteId)
css::uno::Reference< css::frame::XModel > mxModel
virtual void resolveFootnote(Stream &rStream, Id aType, const sal_Int32 nNoteId) override
Resolves a footnote to a stream handler.
virtual void setShapeContext(rtl::Reference< oox::shape::ShapeContextHandler > xContext) override
virtual void resolvePicture(Stream &rStream, const OUString &rId) override
Resolves a picture to a stream handler.
writerfilter::Reference< Stream >::Pointer_t mpXFootnoteStream
virtual void resolveHeader(Stream &rStream, const sal_Int32 type, const OUString &rId) override
Resolves a header to a stream handler.
writerfilter::Reference< Stream >::Pointer_t getSubStream(const OUString &rId)
const css::uno::Sequence< css::beans::PropertyValue > & getMediaDescriptor() const
virtual void resolveEndnote(Stream &rStream, Id aType, const sal_Int32 nNoteId) override
Resolves an endnote to a stream handler.
virtual css::uno::Sequence< css::beans::PropertyValue > getEmbeddingsList() override
OOXMLPropertySet * getPicturePropSet(const OUString &rId)
virtual rtl::Reference< oox::shape::ShapeContextHandler > getShapeContext() override
virtual sal_Int32 getXNoteId() const override
void setTheme(const oox::drawingml::ThemePtr &pTheme)
css::uno::Reference< css::xml::dom::XDocument > importSubStream(OOXMLStream::StreamType_t nType)
virtual css::uno::Reference< css::io::XInputStream > getInputStreamForId(const OUString &rId) override
static void resolveFastSubStreamWithId(Stream &rStream, const writerfilter::Reference< Stream >::Pointer_t &pStream, sal_uInt32 nId)
void popShapeContext() override
Pop context of a previously pushed drawingML shape.
css::uno::Reference< css::xml::dom::XDocument > mxGlossaryDocDom
sal_Int32 mnProgressLastPos
Position progress when it was last updated, possibly not after every paragraph in case of large docum...
virtual css::uno::Sequence< css::uno::Reference< css::xml::dom::XDocument > > getCustomXmlDomPropsList() override
css::uno::Sequence< css::beans::PropertyValue > maMediaDescriptor
virtual void setDrawPage(css::uno::Reference< css::drawing::XDrawPage > xDrawPage) override
virtual OUString getTargetForId(const OUString &rId) override
Returns target URL from relationships for a given id.
virtual void resolve(Stream &rStream) override
Resolves this document to a stream handler.
css::uno::Sequence< css::uno::Reference< css::xml::dom::XDocument > > mxCustomXmlDomPropsList
virtual const oox::drawingml::ThemePtr & getTheme() const override
const rtl::Reference< oox::shape::ShapeFilterBase > & getShapeFilterBase()
sal_Int32 mnProgressEndPos
End position, i.e. the estimated number of paragraphs.
virtual void resolveFooter(Stream &rStream, const sal_Int32 type, const OUString &rId) override
Resolves a footer to a stream handler.
css::uno::Reference< css::graphic::XGraphicMapper > mxGraphicMapper
Graphic mapper.
virtual css::uno::Sequence< css::uno::Reference< css::xml::dom::XDocument > > getCustomXmlDomList() override
css::uno::Reference< css::drawing::XDrawPage > mxDrawPage
OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream, css::uno::Reference< css::task::XStatusIndicator > xStatusIndicator, bool bSkipImages, const css::uno::Sequence< css::beans::PropertyValue > &rDescriptor)
virtual void setXNoteId(const sal_Int32 nId) override
void resolveFastSubStream(Stream &rStream, OOXMLStream::StreamType_t nType)
void importSubStreamRelations(const OOXMLStream::Pointer_t &pStream, OOXMLStream::StreamType_t nType)
sal_Int32 mnProgressCurrentPos
Current position progress, updated after every paragraph.
virtual void setModel(css::uno::Reference< css::frame::XModel > xModel) override
const css::uno::Reference< css::graphic::XGraphicMapper > & getGraphicMapper() const
void resolveCommentsExtendedStream(Stream &rStream)
writerfilter::Reference< Stream >::Pointer_t mpXEndnoteStream
std::vector< css::beans::PropertyValue > m_aEmbeddings
css::uno::Reference< css::xml::dom::XDocument > mxCustomXmlProsDom
const rtl::Reference< oox::drawingml::ThemeFilterBase > & getThemeFilterBase()
virtual css::uno::Sequence< css::uno::Sequence< css::beans::NamedValue > > getGlossaryDomList() override
sal_Int32 mnPercentSize
How many paragraphs equal to 1 percent?
virtual css::uno::Reference< css::drawing::XDrawPage > getDrawPage() override
css::uno::Reference< css::task::XStatusIndicator > mxStatusIndicator
css::uno::Sequence< css::uno::Reference< css::xml::dom::XDocument > > mxCustomXmlDomList
void pushShapeContext() override
Push context of drawingML shapes, so nested shapes are handled separately.
virtual css::uno::Reference< css::xml::dom::XDocument > getThemeDom() override
virtual const OUString & getTarget() const override
css::uno::Sequence< css::beans::PropertyValue > mxEmbeddingsList
virtual void resolveComment(Stream &rStream, const sal_Int32 nId) override
Resolves a comment to a stream handler.
std::stack< rtl::Reference< oox::shape::ShapeContextHandler > > maShapeContexts
Stack of shape contexts, 1 element for VML, 1 element / nesting level for drawingML.
void resolveEmbeddingsStream(const OOXMLStream::Pointer_t &pStream)
css::uno::Reference< css::xml::dom::XDocument > mxThemeDom
rtl::Reference< oox::shape::ShapeFilterBase > mxShapeFilterBase
virtual css::uno::Reference< css::xml::dom::XDocument > getGlossaryDocDom() override
std::shared_ptr< Theme > ThemePtr
sal_uInt32 Id