LibreOffice Module xmloff (master)  1
txtimp.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 #ifndef INCLUDED_XMLOFF_TXTIMP_HXX
20 #define INCLUDED_XMLOFF_TXTIMP_HXX
21 
22 #include <sal/config.h>
23 #include <xmloff/dllapi.h>
24 #include <sal/types.h>
25 #include <rtl/ustring.hxx>
26 #include <com/sun/star/uno/Reference.h>
27 #include <com/sun/star/uno/Sequence.hxx>
28 
29 #include <map>
30 #include <memory>
31 
33 
34 class XMLTextListsHelper;
35 class SvXMLImportContext;
36 class SvXMLTokenMap;
38 class SvXMLImport;
39 class SvXMLStylesContext;
42 class SvI18NMap;
43 template<class A> class XMLPropertyBackpatcher;
45 
46 namespace xmloff {
47  struct ParsedRDFaAttributes;
48 }
49 
50 namespace com::sun::star {
51 namespace text {
52  class XText;
53  class XTextCursor;
54  class XTextRange;
55  class XTextContent;
56  class XFormField;
57 }
58 namespace frame { class XModel; }
59 namespace container { class XNameContainer; class XIndexReplace; }
60 namespace beans { class XPropertySet; }
61 namespace xml::sax { class XAttributeList; }
62 namespace xml::sax { class XFastAttributeList; }
63 namespace util { struct DateTime; }
64 }
65 
66 namespace rtl { template <class reference_type> class Reference; }
67 
69 {
78 };
79 
81 enum VarType
82 {
86  // see following NOTE!
87 };
88 
89 // NOTE: these values must be distinct from any in "enum VarType" because they
90 // are used as keys to SvI18NMap::Add()
91 #define XML_TEXT_RENAME_TYPE_FRAME 10
92 #define XML_TEXT_RENAME_TYPE_TABLE 20
93 
95 {
96 private:
99 
100  struct Impl;
101  std::unique_ptr<Impl> m_xImpl;
104  std::shared_ptr<BackpatcherImpl> m_xBackpatcherImpl;
105  static std::shared_ptr<BackpatcherImpl> MakeBackpatcherImpl();
106 
107 protected:
108  virtual SvXMLImportContext *CreateTableChildContext(
109  SvXMLImport& rImport,
110  sal_Int32 nElement,
111  const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList );
112 
113  // access, lazy initialization and destruction of backpatchers
114  // Code is implemented in XMLPropertyBackpatcher.cxx
115  inline XMLPropertyBackpatcher<sal_Int16>& GetFootnoteBP();
116  inline XMLPropertyBackpatcher<sal_Int16>& GetSequenceIdBP();
117  inline XMLPropertyBackpatcher< OUString> & GetSequenceNameBP();
118 
119 public:
120 
122  css::uno::Reference< css::frame::XModel > const& rModel,
123  SvXMLImport& rImport,
124  bool const bInsertMode = false, bool const bStylesOnlyMode = false,
125  bool const bProgress = false, bool const bBlockMode = false,
126  bool const bOrganizerMode = false);
127 
128  virtual ~XMLTextImportHelper() override;
129 
130  void dispose();
131 
132  void SetCursor(
133  const css::uno::Reference< css::text::XTextCursor >& rCursor );
134  void ResetCursor();
135 
136  void SetAutoStyles( SvXMLStylesContext *pStyles );
137 
139  SvXMLImport& rImport,
140  sal_Int32 nElement,
141  const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList,
143 
144  css::uno::Reference< css::text::XText > & GetText();
145  css::uno::Reference< css::text::XTextCursor > & GetCursor();
146  css::uno::Reference< css::text::XTextRange > & GetCursorAsRange();
147 
148  bool IsInsertMode() const;
149  bool IsStylesOnlyMode() const;
150  bool IsBlockMode() const;
151  bool IsOrganizerMode() const;
152  bool IsProgress() const;
153 
154  OUString ConvertStarFonts( const OUString& rChars,
155  const OUString& rStyleName,
156  sal_uInt8& rFlags,
157  bool bPara,
158  SvXMLImport& rImport ) const;
159  // insert a string without special whitespace processing enabled
160  void InsertString( const OUString& rChars );
161  // insert a string with special whitespace processing enabled
162  void InsertString( const OUString& rChars,
163  bool& rIgnoreLeadingSpace );
164  // Delete current paragraph
165  void DeleteParagraph();
166 
167  void InsertControlCharacter( sal_Int16 nControl );
168  void InsertTextContent( css::uno::Reference< css::text::XTextContent > const & xContent);
169 
170  // Add parameter <bOutlineLevelAttrFound> (#i73509#)
171  // Add parameter <bSetListAttrs> in order to suppress the handling of the list attributes (#i80724#)
172  OUString SetStyleAndAttrs(
173  SvXMLImport const & rImport,
174  const css::uno::Reference< css::text::XTextCursor >& rCursor,
175  const OUString& rStyleName,
176  bool bPara,
177  bool bOutlineLevelAttrFound = false,
178  sal_Int8 nOutlineLevel = -1,
179  bool bSetListAttrs = true,
180  bool bOutlineContentVisible = true);
181 
186  // Adjust 2nd parameter (#i69629#)
187  void FindOutlineStyleName( OUString& rStyleName,
188  sal_Int8 nOutlineLevel );
189 
190  // Change method name to reflect change of data structure (#i69629#)
191  void AddOutlineStyleCandidate( const sal_Int8 nOutlineLevel,
192  const OUString& rStyleName );
193 
194  void SetOutlineStyles( bool bSetEmpty );
195 
196  void SetHyperlink(
197  SvXMLImport const & rImport,
198  const css::uno::Reference< css::text::XTextCursor >& rCursor,
199  const OUString& rHRef,
200  const OUString& rName,
201  const OUString& rTargetFrameName,
202  const OUString& rStyleName,
203  const OUString& rVisitedStyleName,
204  XMLEventsImportContext* pEvents);
205  void SetRuby(
206  SvXMLImport const & rImport,
207  const css::uno::Reference< css::text::XTextCursor >& rCursor,
208  const OUString& rStyleName,
209  const OUString& rTextStyleName,
210  const OUString& rText );
211 
215  sal_Int32 GetDataStyleKey( const OUString& sStyleName,
216  bool* pIsSystemLanguage = nullptr );
217 
218  const SvxXMLListStyleContext *FindAutoListStyle(
219  const OUString& rName ) const;
220  XMLPropStyleContext *FindAutoFrameStyle(
221  const OUString& rName ) const;
222  XMLPropStyleContext* FindSectionStyle(
223  const OUString& rName ) const;
224  XMLPropStyleContext* FindPageMaster(
225  const OUString& rName ) const;
226  XMLPropStyleContext* FindDrawingPage(OUString const& rName) const;
227 
228  const css::uno::Reference< css::container::XNameContainer> & GetParaStyles() const;
229 
230  const css::uno::Reference< css::container::XNameContainer> & GetTextStyles() const;
231 
232  const css::uno::Reference< css::container::XNameContainer> &
233  GetNumberingStyles() const;
234 
235  const css::uno::Reference< css::container::XNameContainer> & GetFrameStyles() const;
236 
237  const css::uno::Reference< css::container::XNameContainer> & GetPageStyles() const;
238 
239  const css::uno::Reference< css::container::XNameContainer> & GetCellStyles() const;
240 
241  const css::uno::Reference< css::container::XIndexReplace > &
242  GetChapterNumbering() const;
243 
244  bool HasFrameByName( const OUString& rName ) const;
245 
246  bool IsDuplicateFrame(const OUString& sName, sal_Int32 nX, sal_Int32 nY, sal_Int32 nWidth, sal_Int32 nHeight) const;
247  void StoreLastImportedFrameName(const OUString& rName);
248  void ClearLastImportedTextFrameName();
249 
250  void ConnectFrameChains( const OUString& rFrmName,
251  const OUString& rNextFrmName,
252  const css::uno::Reference< css::beans::XPropertySet >& rFrmPropSet );
253 
255  GetParaImportPropertySetMapper() const;
257  GetTextImportPropertySetMapper() const;
259  GetSectionImportPropertySetMapper() const;
261  GetRubyImportPropertySetMapper() const;
262 
263  static SvXMLImportPropertyMapper *CreateShapeExtPropMapper(SvXMLImport&);
264  static SvXMLImportPropertyMapper *CreateParaExtPropMapper(SvXMLImport&);
265  static SvXMLImportPropertyMapper* CreateParaDefaultExtPropMapper(SvXMLImport&);
266  static SvXMLImportPropertyMapper* CreateTableDefaultExtPropMapper(SvXMLImport&);
267  static SvXMLImportPropertyMapper* CreateTableRowDefaultExtPropMapper(SvXMLImport&);
268  static SvXMLImportPropertyMapper* CreateTableCellExtPropMapper(SvXMLImport&);
269  static SvXMLImportPropertyMapper* CreateDrawingPageExtPropMapper(SvXMLImport&);
270 
271  SvI18NMap& GetRenameMap();
272 
274  void InsertBookmarkStartRange(
275  const OUString & sName,
276  const css::uno::Reference< css::text::XTextRange> & rRange,
277  OUString const& i_rXmlId,
278  std::shared_ptr< ::xmloff::ParsedRDFaAttributes > &
279  i_rpRDFaAttributes);
280 
282  bool FindAndRemoveBookmarkStartRange(
283  const OUString & sName,
284  css::uno::Reference< css::text::XTextRange> & o_rRange,
285  OUString & o_rXmlId,
286  std::shared_ptr< ::xmloff::ParsedRDFaAttributes > & o_rpRDFaAttributes);
287 
288  void pushFieldCtx( const OUString& name, const OUString& type );
289  css::uno::Reference<css::text::XFormField> popFieldCtx();
290  void addFieldParam( const OUString& name, const OUString& value );
291  void setCurrentFieldParamsTo(css::uno::Reference< css::text::XFormField> const &xFormField);
292  OUString getCurrentFieldType();
293  bool hasCurrentFieldCtx() const;
294 
295 
298  // Code is implemented in XMLPropertyBackpatcher.cxx
299  void InsertFootnoteID(const OUString& sXMLId, sal_Int16 nAPIId);
300 
303  // Code is implemented in XMLPropertyBackpatcher.cxx
304  void ProcessFootnoteReference(
305  const OUString& sXMLId,
306  const css::uno::Reference< css::beans::XPropertySet> & xPropSet);
307 
310  // Code is implemented in XMLPropertyBackpatcher.cxx
311  void InsertSequenceID(const OUString& sXMLId,
312  const OUString& sName,
313  sal_Int16 nAPIId);
314 
316  // Code is implemented in XMLPropertyBackpatcher.cxx
317  void ProcessSequenceReference(
318  const OUString& sXMLId,
319  const css::uno::Reference< css::beans::XPropertySet> & xPropSet);
320 
321  bool IsInFrame() const;
322  virtual bool IsInHeaderFooter() const;
323 
324  virtual css::uno::Reference< css::beans::XPropertySet>
325  createAndInsertOLEObject( SvXMLImport& rImport,
326  const OUString& rHRef,
327  const OUString &rStyleName,
328  const OUString &rTblName,
329  sal_Int32 nWidth, sal_Int32 nHeight );
330 
331  virtual css::uno::Reference< css::beans::XPropertySet>
332  createAndInsertOOoLink( SvXMLImport& rImport,
333  const OUString& rHRef,
334  const OUString &rStyleName,
335  const OUString &rTblName,
336  sal_Int32 nWidth, sal_Int32 nHeight );
337 
338  virtual css::uno::Reference< css::beans::XPropertySet>
339  createAndInsertApplet(
340  const OUString &rName,
341  const OUString &rCode,
342  bool bMayScript,
343  const OUString& rHRef,
344  sal_Int32 nWidth, sal_Int32 nHeight );
345 
346  virtual css::uno::Reference< css::beans::XPropertySet>
347  createAndInsertPlugin(
348  const OUString &rMimeType,
349  const OUString& rHRef,
350  sal_Int32 nWidth, sal_Int32 nHeight );
351 
352  virtual css::uno::Reference< css::beans::XPropertySet>
353  createAndInsertFloatingFrame(
354  const OUString &rName,
355  const OUString &rHRef,
356  const OUString &rStyleName,
357  sal_Int32 nWidth, sal_Int32 nHeight );
358 
359  virtual void endAppletOrPlugin(
360  const css::uno::Reference< css::beans::XPropertySet> &rPropSet,
361  ::std::map < const OUString, OUString > &rParamMap );
362 
363  // applet helper methods
364  // implemented in sw/filter/xml/txtparai.hxx
365 
366  // redlining helper methods
367  // (to be implemented in sw/filter/xml/txtparai.hxx)
368 
369  virtual void RedlineAdd(
371  const OUString& rType,
373  const OUString& rId,
375  const OUString& rAuthor,
377  const OUString& rComment,
379  const css::util::DateTime& rDateTime,
381  bool bMergeLastParagraph);
382 
383  virtual css::uno::Reference< css::text::XTextCursor> RedlineCreateText(
385  css::uno::Reference< css::text::XTextCursor > & rOldCursor,
387  const OUString& rId);
388 
389  virtual void RedlineSetCursor(
391  const OUString& rId,
393  bool bStart,
395  bool bIsOutsideOfParagraph);
396 
397  virtual void RedlineAdjustStartNodeCursor();
398  virtual void SetShowChanges( bool bShowChanges );
399  virtual void SetRecordChanges( bool bRecordChanges );
400  virtual void SetChangesProtectionKey(
401  const css::uno::Sequence<sal_Int8> & rProtectionKey );
402 
404  OUString const & GetOpenRedlineId() const;
406  void SetOpenRedlineId( OUString const & rId);
408  void ResetOpenRedlineId();
409 
412  void SetInsideDeleteContext(bool const bNew);
415  bool IsInsideDeleteContext() const;
416 
417  SvXMLImport & GetXMLImport();
418 
419  XMLTextListsHelper & GetTextListHelper();
420 
421  // forwards to TextListHelper; these are used in many places
423  void PushListContext();
425  void PopListContext();
426 
427  void SetCellParaStyleDefault(OUString const& rNewValue);
428  OUString const& GetCellParaStyleDefault() const;
429 
430  void AddCrossRefHeadingMapping(OUString const& rFrom, OUString const& rTo);
431  void MapCrossRefHeadingFieldsHorribly();
432 
433  void setBookmarkAttributes(OUString const& bookmark, bool hidden, OUString const& condition);
434  bool getBookmarkHidden(OUString const& bookmark) const;
435  const OUString& getBookmarkCondition(OUString const& bookmark) const;
436 
437 };
438 
439 #endif
440 
441 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
exports com.sun.star.lib. util
This class maintains an OUString->sal_Int16 mapping for cases in which an XPropertySet needs to be fi...
std::unique_ptr< Impl > m_xImpl
Definition: txtimp.hxx:100
signed char sal_Int8
Reference
Definition: txtimp.hxx:70
VarType
variable type (for XMLSetVarFieldImportContext)
Definition: txtimp.hxx:81
exports com.sun.star. container
exports com.sun.star. frame
Definition: txtimp.hxx:72
std::shared_ptr< BackpatcherImpl > m_xBackpatcherImpl
Definition: txtimp.hxx:103
exports com.sun.star. text
class SAL_NO_VTABLE XPropertySet
void operator=(SimpleReferenceObject) SAL_DELETED_FUNCTION
rtl::Reference< XMLImportContext > CreateTextChildContext(XMLImport &rImport, std::u16string_view rName, bool bTopLevel=false)
This class deliberately does not support XWeak, to improve performance when loading large documents...
Definition: xmlictxt.hxx:44
exports com.sun.star. beans
unsigned char sal_uInt8
ww8::ParaStyles GetParaStyles(const SwDoc &rDoc)
Definition: txtimp.hxx:71
XMLTextType
Definition: txtimp.hxx:68
void dispose()
#define XMLOFF_DLLPUBLIC
Definition: dllapi.h:29