LibreOffice Module sw (master) 1
docglbl.cxx
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
20#include <osl/diagnose.h>
21#include <unotools/tempfile.hxx>
22#include <svl/stritem.hxx>
23#include <svl/eitem.hxx>
24#include <sfx2/docfile.hxx>
25#include <sfx2/docfilt.hxx>
26#include <sfx2/fcontnr.hxx>
27#include <sfx2/bindings.hxx>
28#include <sfx2/request.hxx>
29#include <sfx2/sfxsids.hrc>
30#include <sfx2/viewfrm.hxx>
31#include <tools/datetime.hxx>
32#include <fmtinfmt.hxx>
33#include <fmtanchr.hxx>
34#include <doc.hxx>
35#include <IDocumentUndoRedo.hxx>
40#include <docary.hxx>
41#include <pam.hxx>
42#include <ndtxt.hxx>
43#include <docsh.hxx>
44#include <section.hxx>
45#include <calbck.hxx>
46#include <iodetect.hxx>
47#include <frameformats.hxx>
48#include <memory>
49#include <com/sun/star/uno/Reference.h>
50#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
51#include <com/sun/star/document/XDocumentProperties.hpp>
52#include <com/sun/star/frame/XModel.hpp>
53
54using namespace ::com::sun::star;
55
56namespace {
57
58enum SwSplitDocType
59{
60 SPLITDOC_TO_GLOBALDOC,
61 SPLITDOC_TO_HTML
62};
63
64}
65
66bool SwDoc::GenerateGlobalDoc( const OUString& rPath,
67 const SwTextFormatColl* pSplitColl )
68{
69 return SplitDoc( SPLITDOC_TO_GLOBALDOC, rPath, false, pSplitColl );
70}
71
72bool SwDoc::GenerateGlobalDoc( const OUString& rPath, int nOutlineLevel )
73{
74 return SplitDoc( SPLITDOC_TO_GLOBALDOC, rPath, true, nullptr, nOutlineLevel );
75}
76
77bool SwDoc::GenerateHTMLDoc( const OUString& rPath, int nOutlineLevel )
78{
79 return SplitDoc( SPLITDOC_TO_HTML, rPath, true, nullptr, nOutlineLevel );
80}
81
82bool SwDoc::GenerateHTMLDoc( const OUString& rPath,
83 const SwTextFormatColl* pSplitColl )
84{
85 return SplitDoc( SPLITDOC_TO_HTML, rPath, false, pSplitColl );
86}
87
88// two helpers for outline mode
89static SwNode* GetStartNode( SwOutlineNodes const * pOutlNds, int nOutlineLevel, SwOutlineNodes::size_type* nOutl )
90{
91 for( ; *nOutl < pOutlNds->size(); ++(*nOutl) )
92 {
93 SwNode* pNd = (*pOutlNds)[ *nOutl ];
94 if( pNd->GetTextNode()->GetAttrOutlineLevel() == nOutlineLevel && !pNd->FindTableNode() )
95 {
96 return pNd;
97 }
98 }
99
100 return nullptr;
101}
102
103static SwNode* GetEndNode( SwOutlineNodes const * pOutlNds, int nOutlineLevel, SwOutlineNodes::size_type* nOutl )
104{
105 SwNode* pNd;
106
107 for( ++(*nOutl); (*nOutl) < pOutlNds->size(); ++(*nOutl) )
108 {
109 pNd = (*pOutlNds)[ *nOutl ];
110
111 const int nLevel = pNd->GetTextNode()->GetAttrOutlineLevel();
112
113 if( ( 0 < nLevel && nLevel <= nOutlineLevel ) &&
114 !pNd->FindTableNode() )
115 {
116 return pNd;
117 }
118 }
119 return nullptr;
120}
121
122// two helpers for collection mode
123static SwNode* GetStartNode( const SwOutlineNodes* pOutlNds, const SwTextFormatColl* pSplitColl, SwOutlineNodes::size_type* nOutl )
124{
125 for( ; *nOutl < pOutlNds->size(); ++(*nOutl) )
126 {
127 SwNode* pNd = (*pOutlNds)[ *nOutl ];
128 if( pNd->GetTextNode()->GetTextColl() == pSplitColl &&
129 !pNd->FindTableNode() )
130 {
131 return pNd;
132 }
133 }
134 return nullptr;
135}
136
137static SwNode* GetEndNode( const SwOutlineNodes* pOutlNds, const SwTextFormatColl* pSplitColl, SwOutlineNodes::size_type* nOutl )
138{
139 SwNode* pNd;
140
141 for( ++(*nOutl); *nOutl < pOutlNds->size(); ++(*nOutl) )
142 {
143 pNd = (*pOutlNds)[ *nOutl ];
144 SwTextFormatColl* pTColl = pNd->GetTextNode()->GetTextColl();
145
146 if( ( pTColl == pSplitColl ||
147 ( pSplitColl->GetAttrOutlineLevel() > 0 &&
148 pTColl->GetAttrOutlineLevel() > 0 &&
149 pTColl->GetAttrOutlineLevel() <
150 pSplitColl->GetAttrOutlineLevel() )) &&
151 !pNd->FindTableNode() )
152 {
153 return pNd;
154 }
155 }
156 return nullptr;
157}
158
159bool SwDoc::SplitDoc( sal_uInt16 eDocType, const OUString& rPath, bool bOutline, const SwTextFormatColl* pSplitColl, int nOutlineLevel )
160{
161 // Iterate over all the template's Nodes, creating an own
162 // document for every single one and replace linked sections (GlobalDoc) for links (HTML).
163 // Finally, we save this document as a GlobalDoc/HTMLDoc.
164 if( !mpDocShell || !mpDocShell->GetMedium() ||
165 ( SPLITDOC_TO_GLOBALDOC == eDocType && GetDocumentSettingManager().get(DocumentSettingId::GLOBAL_DOCUMENT) ) )
166 return false;
167
169 SwOutlineNodes* pOutlNds = const_cast<SwOutlineNodes*>(&GetNodes().GetOutLineNds());
170 std::unique_ptr<SwOutlineNodes> xTmpOutlNds;
171 SwNode* pStartNd;
172
173 if ( !bOutline) {
174 if( pSplitColl )
175 {
176 // If it isn't an OutlineNumbering, then use an own array and collect the Nodes.
177 if( pSplitColl->GetAttrOutlineLevel() == 0 )
178 {
179 xTmpOutlNds.reset(new SwOutlineNodes);
180 pOutlNds = xTmpOutlNds.get();
181 SwIterator<SwTextNode,SwFormatColl> aIter( *pSplitColl );
182 for( SwTextNode* pTNd = aIter.First(); pTNd; pTNd = aIter.Next() )
183 if( pTNd->GetNodes().IsDocNodes() )
184 pOutlNds->insert( pTNd );
185
186 if( pOutlNds->empty() )
187 return false;
188 }
189 }
190 else
191 {
192 // Look for the 1st level OutlineTemplate
193 const SwTextFormatColls& rFormatColls =*GetTextFormatColls();
194 for( SwTextFormatColls::size_type n = rFormatColls.size(); n; )
195 if ( rFormatColls[ --n ]->GetAttrOutlineLevel() == 1 )
196 {
197 pSplitColl = rFormatColls[ n ];
198 break;
199 }
200
201 if( !pSplitColl )
202 return false;
203 }
204 }
205
206 std::shared_ptr<const SfxFilter> pFilter;
207 switch( eDocType )
208 {
209 case SPLITDOC_TO_HTML:
210 pFilter = SwIoSystem::GetFilterOfFormat(u"HTML");
211 break;
212
213 default:
215 eDocType = SPLITDOC_TO_GLOBALDOC;
216 break;
217 }
218
219 if( !pFilter )
220 return false;
221
222 // Deactivate Undo/Redline in any case
223 GetIDocumentUndoRedo().DoUndo(false);
225
226 OUString sExt = pFilter->GetSuffixes().getToken(0, ',');
227 if( sExt.isEmpty() )
228 {
229 sExt = ".sxw";
230 }
231 else
232 {
233 if( '.' != sExt[ 0 ] )
234 {
235 sExt = "." + sExt;
236 }
237 }
238
239 INetURLObject aEntry(rPath);
240 OUString sLeading(aEntry.GetBase());
241 aEntry.removeSegment();
242 OUString sPath = aEntry.GetMainURL( INetURLObject::DecodeMechanism::NONE );
243 utl::TempFileNamed aTemp(sLeading, true, sExt, &sPath);
244 aTemp.EnableKillingFile();
245
246 DateTime aTmplDate( DateTime::SYSTEM );
247 {
248 tools::Time a2Min( 0 ); a2Min.SetMin( 2 );
249 aTmplDate += a2Min;
250 }
251
252 // Skip all invalid ones
253 while( nOutl < pOutlNds->size() &&
254 (*pOutlNds)[ nOutl ]->GetIndex() < GetNodes().GetEndOfExtras().GetIndex() )
255 ++nOutl;
256
257 do {
258 if( bOutline )
259 pStartNd = GetStartNode( pOutlNds, nOutlineLevel, &nOutl );
260 else
261 pStartNd = GetStartNode( pOutlNds, pSplitColl, &nOutl );
262
263 if( pStartNd )
264 {
265 SwNode* pEndNd;
266 if( bOutline )
267 pEndNd = GetEndNode( pOutlNds, nOutlineLevel, &nOutl );
268 else
269 pEndNd = GetEndNode( pOutlNds, pSplitColl, &nOutl );
270 SwNodeIndex aEndIdx( pEndNd ? *pEndNd
271 : GetNodes().GetEndOfContent() );
272
273 // Write out the Nodes completely
274 OUString sFileName;
275 if( pStartNd->GetIndex() + 1 < aEndIdx.GetIndex() )
276 {
277 SfxObjectShellLock xDocSh( new SwDocShell( SfxObjectCreateMode::INTERNAL ));
278 if( xDocSh->DoInitNew() )
279 {
280 SwDoc* pDoc = static_cast<SwDocShell*>(&xDocSh)->GetDoc();
281
282 uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
283 static_cast<SwDocShell*>(&xDocSh)->GetModel(),
284 uno::UNO_QUERY_THROW);
285 uno::Reference<document::XDocumentProperties> xDocProps(
286 xDPS->getDocumentProperties());
287 OSL_ENSURE(xDocProps.is(), "Doc has no DocumentProperties");
288 // the GlobalDoc is the template
289 xDocProps->setTemplateName(OUString());
290 ::util::DateTime uDT = aTmplDate.GetUNODateTime();
291 xDocProps->setTemplateDate(uDT);
292 xDocProps->setTemplateURL(rPath);
293 // Set the new doc's title to the text of the "split para".
294 // If the current doc has a title, insert it at the begin.
295 OUString sTitle( xDocProps->getTitle() );
296 if (!sTitle.isEmpty())
297 sTitle += ": ";
298 sTitle += pStartNd->GetTextNode()->GetExpandText(nullptr);
299 xDocProps->setTitle( sTitle );
300
301 // Replace template
302 pDoc->ReplaceStyles( *this );
303
304 // Take over chapter numbering
305 if( mpOutlineRule )
307
308 SwNodeRange aRg( *pStartNd, SwNodeOffset(0), aEndIdx.GetNode() );
310 aRg, pDoc->GetNodes().GetEndOfContent(), nullptr, false, false);
311
312 // Delete the initial TextNode
313 SwNodeIndex aIdx( pDoc->GetNodes().GetEndOfExtras(), 2 );
314 if( aIdx.GetIndex() + 1 !=
315 pDoc->GetNodes().GetEndOfContent().GetIndex() )
316 pDoc->GetNodes().Delete( aIdx );
317
318 sFileName = utl::CreateTempURL(sLeading, true, sExt, &sPath);
319 SfxMedium* pTmpMed = new SfxMedium( sFileName,
320 StreamMode::STD_READWRITE );
321 pTmpMed->SetFilter( pFilter );
322
323 // We need to have a Layout for the HTMLFilter, so that
324 // TextFrames/Controls/OLE objects can be exported correctly as graphics.
325 if( SPLITDOC_TO_HTML == eDocType &&
326 !pDoc->GetSpzFrameFormats()->empty() )
327 {
329 }
330 xDocSh->DoSaveAs( *pTmpMed );
331 xDocSh->DoSaveCompleted( pTmpMed );
332
333 // do not insert a FileLinkSection in case of error
334 if( xDocSh->GetError() )
335 sFileName.clear();
336 }
337 xDocSh->DoClose();
338 }
339
340 // We can now insert the section
341 if( !sFileName.isEmpty() )
342 {
343 switch( eDocType )
344 {
345 case SPLITDOC_TO_HTML:
346 {
347 // Delete all nodes in the section and, in the "start node",
348 // set the Link to the saved document.
349 SwNodeOffset nNodeDiff = aEndIdx.GetIndex() -
350 pStartNd->GetIndex() - 1;
351 if( nNodeDiff )
352 {
353 SwPaM aTmp( *pStartNd, aEndIdx.GetNode(), SwNodeOffset(1), SwNodeOffset(-1) );
354 SwNodeIndex aSIdx( aTmp.GetMark()->GetNode() );
355 SwNodeIndex aEIdx( aTmp.GetPoint()->GetNode() );
356
357 // Try to move past the end
358 if( !aTmp.Move( fnMoveForward, GoInNode ) )
359 {
360 // well then, back to the beginning
361 aTmp.Exchange();
362 if( !aTmp.Move( fnMoveBackward, GoInNode ))
363 {
364 OSL_FAIL( "no more Nodes!" );
365 }
366 }
367 // Move Bookmarks and so forth
368 CorrAbs( aSIdx, aEIdx, *aTmp.GetPoint(), true);
369
370 // If FlyFrames are still around, delete these too
372 {
373 SwFrameFormat* pFly = (*GetSpzFrameFormats())[n];
374 const SwFormatAnchor* pAnchor = &pFly->GetAnchor();
375 SwNode const*const pAnchorNode =
376 pAnchor->GetAnchorNode();
377 if (pAnchorNode &&
378 ((RndStdIds::FLY_AT_PARA == pAnchor->GetAnchorId()) ||
379 (RndStdIds::FLY_AT_CHAR == pAnchor->GetAnchorId())) &&
380 aSIdx <= *pAnchorNode &&
381 *pAnchorNode < aEIdx.GetNode() )
382 {
384 --n;
385 }
386 }
387
388 GetNodes().Delete( aSIdx, nNodeDiff );
389 }
390
391 // set the link in the StartNode
392 SwFormatINetFormat aINet( sFileName , OUString() );
393 SwTextNode* pTNd = pStartNd->GetTextNode();
394 pTNd->InsertItem(aINet, 0, pTNd->GetText().getLength());
395
396 // If the link cannot be found anymore,
397 // it has to be a bug!
398 if( !pOutlNds->Seek_Entry( pStartNd, &nOutl ))
399 pStartNd = nullptr;
400 ++nOutl ;
401 }
402 break;
403
404 default:
405 {
406 const OUString sNm(INetURLObject(sFileName).GetLastName());
408 GetUniqueSectionName( &sNm ));
410 aSectData.SetLinkFileName(sFileName);
411 aSectData.SetProtectFlag(true);
412
413 --aEndIdx; // in the InsertSection the end is inclusive
414 while( aEndIdx.GetNode().IsStartNode() )
415 --aEndIdx;
416
417 // If any Section ends or starts in the new sectionrange,
418 // they must end or start before or after the range!
419 SwSectionNode* pSectNd = pStartNd->FindSectionNode();
420 while( pSectNd && pSectNd->EndOfSectionIndex()
421 <= aEndIdx.GetIndex() )
422 {
423 const SwNode* pSectEnd = pSectNd->EndOfSectionNode();
424 if( pSectNd->GetIndex() + 1 ==
425 pStartNd->GetIndex() )
426 {
427 bool bMvIdx = aEndIdx == *pSectEnd;
428 DelSectionFormat( pSectNd->GetSection().GetFormat() );
429 if( bMvIdx )
430 --aEndIdx;
431 }
432 else
433 {
434 SwNodeRange aRg( *pStartNd, *pSectEnd );
435 SwNodeIndex aIdx( *pSectEnd, 1 );
436 GetNodes().MoveNodes( aRg, GetNodes(), aIdx.GetNode() );
437 }
438 pSectNd = pStartNd->FindSectionNode();
439 }
440
441 pSectNd = aEndIdx.GetNode().FindSectionNode();
442 while( pSectNd && pSectNd->GetIndex() >
443 pStartNd->GetIndex() )
444 {
445 // #i15712# don't attempt to split sections if
446 // they are fully enclosed in [pSectNd,aEndIdx].
447 if( aEndIdx < pSectNd->EndOfSectionIndex() )
448 {
449 SwNodeRange aRg( *pSectNd, SwNodeOffset(1), aEndIdx.GetNode(), SwNodeOffset(1) );
450 GetNodes().MoveNodes( aRg, GetNodes(), *pSectNd );
451 }
452
453 pSectNd = pStartNd->FindSectionNode();
454 }
455
456 // -> #i26762#
457 // Ensure order of start and end of section is sane.
458 SwNodeIndex aStartIdx(*pStartNd);
459
460 if (aEndIdx >= aStartIdx)
461 {
462 pSectNd = GetNodes().InsertTextSection(aStartIdx.GetNode(),
463 *pFormat, aSectData, nullptr, &aEndIdx.GetNode(), false);
464 }
465 else
466 {
467 pSectNd = GetNodes().InsertTextSection(aEndIdx.GetNode(),
468 *pFormat, aSectData, nullptr, &aStartIdx.GetNode(), false);
469 }
470 // <- #i26762#
471
473 }
474 break;
475 }
476 }
477 }
478 } while( pStartNd );
479
480 xTmpOutlNds.reset();
481
482 switch( eDocType )
483 {
484 case SPLITDOC_TO_HTML:
486 {
487 // save all remaining sections
488 while( !GetSections().empty() )
489 DelSectionFormat( GetSections().front() );
490
492 pFilter = pFCntnr->GetFilter4EA( pFilter->GetTypeName(), SfxFilterFlags::EXPORT );
493 }
494 break;
495
496 default:
497 // save the Globaldoc
500 }
501
502 // The medium isn't locked after reopening the document.
503 SfxRequest aReq( SID_SAVEASDOC, SfxCallMode::SYNCHRON, GetAttrPool() );
504 aReq.AppendItem( SfxStringItem( SID_FILE_NAME, rPath ) );
505 aReq.AppendItem( SfxBoolItem( SID_SAVETO, true ) );
506 if(pFilter)
507 aReq.AppendItem( SfxStringItem( SID_FILTER_NAME, pFilter->GetName() ) );
508 const SfxBoolItem *pRet = static_cast<const SfxBoolItem*>(mpDocShell->ExecuteSlot( aReq ));
509
510 return pRet && pRet->GetValue();
511}
512
513/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
@ On
RedlineFlags on.
css::util::DateTime GetUNODateTime() const
virtual void DelLayoutFormat(SwFrameFormat *pFormat)=0
virtual void SetRedlineFlags_intern(RedlineFlags eMode)=0
Set a new redline mode.
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
bool removeSegment(sal_Int32 nIndex=LAST_SEGMENT, bool bIgnoreFinalSlash=true)
OUString GetBase() const
bool GetValue() const
std::shared_ptr< const SfxFilter > GetFilter4EA(const OUString &rEA, SfxFilterFlags nMust=SfxFilterFlags::IMPORT, SfxFilterFlags nDont=SFX_FILTER_NOTINSTALLED) const
void SetFilter(const std::shared_ptr< const SfxFilter > &pFilter)
SfxFilterContainer * GetFilterContainer() const
bool DoSaveAs(SfxMedium &rNewStor)
virtual bool DoSaveCompleted(SfxMedium *pNewStor=nullptr, bool bRegisterRecent=true)
virtual SfxObjectFactory & GetFactory() const=0
ErrCode GetError() const
SfxMedium * GetMedium() const
void AppendItem(const SfxPoolItem &)
const SfxPoolItem * ExecuteSlot(SfxRequest &rReq, const SfxInterface *pIF=nullptr)
static SfxViewFrame * LoadHiddenDocument(SfxObjectShell const &i_rDoc, SfxInterfaceId i_nViewId)
Definition: doc.hxx:194
bool GenerateGlobalDoc(const OUString &rPath, const SwTextFormatColl *pSplitColl)
Definition: docglbl.cxx:66
SwSectionFormats & GetSections()
Definition: doc.hxx:1345
SwDocShell * mpDocShell
Definition: doc.hxx:266
bool GenerateHTMLDoc(const OUString &rPath, const SwTextFormatColl *pSplitColl)
Definition: docglbl.cxx:82
void CorrAbs(const SwNode &rOldNode, const SwPosition &rNewPos, const sal_Int32 nOffset=0, bool bMoveCursor=false)
Definition: doccorr.cxx:169
SwNumRule * mpOutlineRule
Definition: doc.hxx:260
IDocumentUndoRedo & GetIDocumentUndoRedo()
Definition: doc.cxx:150
SwNodes & GetNodes()
Definition: doc.hxx:417
IDocumentRedlineAccess const & getIDocumentRedlineAccess() const
Definition: doc.cxx:341
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
Definition: doc.cxx:411
const SwTextFormatColls * GetTextFormatColls() const
Definition: doc.hxx:786
void DelSectionFormat(SwSectionFormat *pFormat, bool bDelNodes=false)
Definition: ndsect.cxx:513
OUString GetUniqueSectionName(const OUString *pChkStr=nullptr) const
Definition: ndsect.cxx:1399
::sw::DocumentContentOperationsManager const & GetDocumentContentOperationsManager() const
Definition: doc.cxx:331
const SwAttrPool & GetAttrPool() const
Definition: doc.hxx:1326
const SwFrameFormats * GetSpzFrameFormats() const
Definition: doc.hxx:752
SwSectionFormat * MakeSectionFormat()
Definition: ndsect.cxx:506
void ReplaceStyles(const SwDoc &rSource, bool bIncludePageStyles=true)
Definition: docfmt.cxx:1549
::sw::DocumentSettingManager & GetDocumentSettingManager()
Definition: doc.cxx:192
bool SplitDoc(sal_uInt16 eDocType, const OUString &rPath, bool bOutline, const SwTextFormatColl *pSplitColl, int nOutlineLevel=0)
Create sub-documents according to the given collection.
Definition: docglbl.cxx:159
void SetOutlineNumRule(const SwNumRule &rRule)
Definition: docnum.cxx:112
FlyAnchors.
Definition: fmtanchr.hxx:37
RndStdIds GetAnchorId() const
Definition: fmtanchr.hxx:67
SwNode * GetAnchorNode() const
Definition: atrfrm.cxx:1606
const SwFormatAnchor & GetAnchor(bool=true) const
Definition: fmtanchr.hxx:88
Style of a layout element.
Definition: frmfmt.hxx:62
bool empty() const
SwFrameFormatsBase::size_type size_type
size_t size() const
static SW_DLLPUBLIC std::shared_ptr< const SfxFilter > GetFilterOfFormat(std::u16string_view rFormat, const SfxFilterContainer *pCnt=nullptr)
find for an internal format name the corresponding filter entry
Definition: iodetect.cxx:68
TElementType * Next()
Definition: calbck.hxx:373
TElementType * First()
Definition: calbck.hxx:365
Marks a node in the document model.
Definition: ndindex.hxx:31
SwNode & GetNode() const
Definition: ndindex.hxx:136
SwNodeOffset GetIndex() const
Definition: ndindex.hxx:171
Base class of the Writer document model elements.
Definition: node.hxx:98
SwTextNode * GetTextNode()
Inline methods from Node.hxx.
Definition: ndtxt.hxx:897
SwNodeOffset GetIndex() const
Definition: node.hxx:312
bool IsStartNode() const
Definition: node.hxx:673
SwTableNode * FindTableNode()
Search table node, in which it is.
Definition: node.cxx:380
SwSectionNode * FindSectionNode()
Search section node, in which it is.
Definition: ndsect.cxx:974
SwNodeOffset EndOfSectionIndex() const
Definition: node.hxx:726
const SwEndNode * EndOfSectionNode() const
Definition: node.hxx:731
const SwOutlineNodes & GetOutLineNds() const
Array of all OutlineNodes.
Definition: ndarr.hxx:240
SwNode & GetEndOfExtras() const
This is the last EndNode of a special section.
Definition: ndarr.hxx:163
SwNode & GetEndOfContent() const
Regular ContentSection (i.e. the BodyText).
Definition: ndarr.hxx:165
bool MoveNodes(const SwNodeRange &, SwNodes &rNodes, SwNode &rPos, bool bNewFrames=true)
move the node pointer
Definition: nodes.cxx:399
void Delete(const SwNodeIndex &rPos, SwNodeOffset nNodes=SwNodeOffset(1))
Definition: nodes.cxx:1065
SwSectionNode * InsertTextSection(SwNode &rNd, SwSectionFormat &rSectionFormat, SwSectionData const &, SwTOXBase const *const pTOXBase, SwNode const *pEndNd, bool const bInsAtStart=true, bool const bCreateFrames=true)
Insert a new SwSection.
Definition: ndsect.cxx:775
bool Seek_Entry(SwNode *rP, size_type *pnPos) const
Definition: ndnum.cxx:32
PaM is Point and Mark: a selection of the document model.
Definition: pam.hxx:187
const SwPosition * GetMark() const
Definition: pam.hxx:263
void Exchange()
Definition: pam.cxx:656
bool Move(SwMoveFnCollection const &fnMove=fnMoveForward, SwGoInDoc fnGo=GoInContent)
Movement of cursor.
Definition: pam.cxx:668
const SwPosition * GetPoint() const
Definition: pam.hxx:261
SAL_DLLPRIVATE void SetProtectFlag(bool const bFlag)
Definition: section.hxx:106
void SetLinkFileName(OUString const &rNew)
Definition: section.hxx:118
const SwSection & GetSection() const
Definition: node.hxx:588
SwSectionFormat * GetFormat()
Definition: section.hxx:337
void CreateLink(LinkCreateType eType)
Definition: section.cxx:1399
Represents the style of a paragraph.
Definition: fmtcol.hxx:59
int GetAttrOutlineLevel() const
Definition: fmtcol.cxx:609
SwTextNode is a paragraph in the document model.
Definition: ndtxt.hxx:111
OUString GetExpandText(SwRootFrame const *pLayout, const sal_Int32 nIdx=0, const sal_Int32 nLen=-1, const bool bWithNum=false, const bool bAddSpaceAfterListLabelStr=false, const bool bWithSpacesForLevel=false, const ExpandMode eAdditionalMode=ExpandMode::ExpandFootnote|ExpandMode::HideFieldmarkCommands) const
add 4th optional parameter <bAddSpaceAfterListLabelStr> indicating, when <bWithNum = true> that a spa...
Definition: ndtxt.cxx:3485
SwTextAttr * InsertItem(SfxPoolItem &rAttr, const sal_Int32 nStart, const sal_Int32 nEnd, const SetAttrMode nMode=SetAttrMode::DEFAULT)
create new text attribute from rAttr and insert it
Definition: thints.cxx:1305
int GetAttrOutlineLevel() const
Returns outline level of this text node.
Definition: ndtxt.cxx:4148
const OUString & GetText() const
Definition: ndtxt.hxx:242
SwTextFormatColl * GetTextColl() const
Definition: ndtxt.hxx:891
std::vector< SwTextFormatColl * >::size_type size_type
Definition: docary.hxx:66
size_t size() const
Definition: docary.hxx:87
bool empty() const
size_type size() const
std::pair< const_iterator, bool > insert(Value &&x)
void CopyWithFlyInFly(const SwNodeRange &rRg, SwNode &rInsPos, const std::pair< const SwPaM &, const SwPosition & > *pCopiedPaM=nullptr, bool bMakeNewFrames=true, bool bDelRedlines=true, bool bCopyFlyAtFly=false, SwCopyFlags flags=SwCopyFlags::Default) const
note: rRg/rInsPos exclude a partially selected start text node; pCopiedPaM includes a partially selec...
virtual void set(DocumentSettingId id, bool value) override
Set the specified document setting.
void SetMin(sal_uInt16 nNewMin)
void EnableKillingFile(bool bEnable=true)
static SwNode * GetStartNode(SwOutlineNodes const *pOutlNds, int nOutlineLevel, SwOutlineNodes::size_type *nOutl)
Definition: docglbl.cxx:89
static SwNode * GetEndNode(SwOutlineNodes const *pOutlNds, int nOutlineLevel, SwOutlineNodes::size_type *nOutl)
Definition: docglbl.cxx:103
float u
constexpr OUStringLiteral FILTER_XML
XML filter.
Definition: iodetect.hxx:38
sal_Int64 n
size
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
OUString CreateTempURL(const OUString *pParent, bool bDirectory)
o3tl::strong_int< sal_Int32, struct Tag_SwNodeOffset > SwNodeOffset
Definition: nodeoffset.hxx:16
bool GoInNode(SwPaM &rPam, SwMoveFnCollection const &fnMove)
Definition: pam.cxx:1170
SwMoveFnCollection const & fnMoveBackward
Definition: paminit.cxx:60
SwMoveFnCollection const & fnMoveForward
SwPam::Move()/Find() default argument.
Definition: paminit.cxx:61
constexpr auto SFX_INTERFACE_NONE
SwNode & GetNode() const
Definition: pam.hxx:80