21#include <libxml/xmlwriter.h>
22#include <osl/diagnose.h>
24#include <LibreOfficeKit/LibreOfficeKitEnums.h>
63 : m_vIndices(nullptr), m_rMyDoc( rDocument )
135 if(
GetDoc().getIDocumentFieldsAccess().SetFieldsDirty(
true, &rDelPos.
GetNode(), nSz ) &&
179 if (bInsOutlineIdx && rTextNd.
IsOutline())
195 bool bSavePersData(
GetDoc().GetIDocumentUndoRedo().IsUndoNodes(rNds));
196 bool bRestPersData(
GetDoc().GetIDocumentUndoRedo().IsUndoNodes(*
this));
198 OSL_ENSURE(!pDestDoc,
"SwNodes::ChgNode(): "
199 "the code to handle text fields here looks broken\n"
200 "if the target is in a different document.");
201 if( !bRestPersData && !bSavePersData && pDestDoc )
202 bSavePersData = bRestPersData =
true;
229 if( pNumRule && sNumRule != pNumRule->
GetName() )
231 sNumRule = pNumRule->
GetName();
262 if (bInsOutlineIdx && pTextNd->
IsOutline())
270 if( pHts && pHts->
Count() )
272 bool const bToUndo = !pDestDoc &&
274 for(
size_t i = pHts->
Count();
i; )
277 switch ( pAttr->
Which() )
283 SwTextField* pTextField = static_txtattr_cast<SwTextField*>(pAttr);
310 .InvalidateFootnote();
315 .InvalidateTOXMark();
320 .InvalidateRefMark();
327 static_txtattr_cast<SwTextMeta*>(pAttr));
347 static_cast<SwNoTextNode*
>(pCNd)->RestorePersistentData();
374 while( aIdx != rInsPos )
380 static_cast<SwTableNode*
>(pFrameNd)->MakeFramesForAdjacentContentNode(aIdx);
384 static_cast<SwContentNode*
>(pFrameNd)->MakeFramesForAdjacentContentNode(*pCNd);
405 SwNode& rPos,
bool bNewFrames )
424 while( ( (( pCurrentNode = &aRg.
aEnd.
GetNode())->GetStartNode() &&
435 if(
this == &rNodes )
447 SwStartNodePointers::size_type nLevel = 0;
453 aSttNdStack.insert( aSttNdStack.begin(), pStartNode );
459 bool bSaveNewFrames = bNewFrames;
474 ChgNode( aSwIndex, nInsPos, aIdx, bNewFrames );
496 if( &rNodes ==
this )
523 if( bInsOutlineIdx && pCNd )
526 static_cast<SwTextNode*
>(pTmpNd)->AddToList();
555 if( bInsOutlineIdx && bOutlNd )
584 pTableFormat->GetNotifier().Broadcast(
SfxHint(SfxHintId::Dying));
608 aSttNdStack.insert( aSttNdStack.begin() + nLevel, pTmp );
613 else if (
GetDoc().GetIDocumentUndoRedo().IsUndoNodes(
641 if( bNewFrames && pSctNd )
667 aSttNdStack.insert( aSttNdStack.begin() + nLevel, pSttNd );
694 ChgNode( aSwIndex, nInsPos, aIdx, bNewFrames );
709 if( !nInsPos && !nLevel )
739 while( aTmpSIdx < aTmpEIdx )
740 if(
nullptr != (( pCurrentNode = &aTmpEIdx.
GetNode())->GetEndNode()) )
753 ChgNode( aSwIndex, nInsPos, aIdx, bNewFrames );
759 OSL_ENSURE( pCurrentNode == aSttNdStack[nLevel] ||
761 aSttNdStack[nLevel]->IsSectionNode()),
765 ChgNode( aSwIndex, nInsPos, aIdx, bNewFrames );
774 if( pSectNd && !--nSectNdCnt )
778 bNewFrames = bSaveNewFrames;
780 aSttNdStack.erase( aSttNdStack.begin() + nLevel );
800 static_cast<SwContentNode*
>(pCurrentNode)->DelFrames(
nullptr);
821 if( &rNodes ==
this )
836 ChgNode( aSwIndex, nInsPos, aIdx, bNewFrames );
847 assert(!
"How can this node be in the node array?");
853 assert(!
"Unknown node type");
862 ChgNode( aSwIndex, nInsPos, aIdx, bNewFrames );
867 if( ( pCurrentNode = &aRg.
aStart.
GetNode())->GetStartNode() &&
875 if(
this == &rNodes &&
986 while( aTmpIdx < pRange->aEnd )
988 pCurrentNode = &aTmpIdx.
GetNode();
1037 aSttNdStack.push_back( pTmp );
1049 aSttNdStack.push_back( pTmp );
1053 SwStartNode* pSttNd = aSttNdStack[ aSttNdStack.size() - 1 ];
1055 aSttNdStack.pop_back();
1056 if( !aSttNdStack.empty() )
1059 else if( aTmpIdx < aEnd )
1090 if( nCnt > nNodes ) nCnt = nNodes;
1105 while( ( pCurrentNode = &aRg.
aEnd.
GetNode())->GetStartNode() ||
1118 bool bUpdateOutline =
false;
1147 bUpdateOutline =
true;
1158 }
while( pNd != pChkNd );
1210 bUpdateOutline =
true;
1218 static_cast<SwContentNode*
>(pCurrentNode)->InvalidateNumRule();
1253 if( bUpdateOutline )
1306 while( aTmp <
Count()-1 && !( pNd = &aTmp.
GetNode())->IsContentNode() )
1309 if( aTmp ==
Count()-1 )
1323 while( aTmp <
Count()-1 && !( pNd = &aTmp.
GetNode())->IsContentNode() )
1326 if( aTmp ==
Count()-1 )
1340 while( aTmp.
GetIndex() && !( pNd = &aTmp.
GetNode())->IsContentNode() )
1357 while( aTmp.
GetIndex() && !( pNd = &aTmp.
GetNode())->IsContentNode() )
1386 SwNode** ppEndNdArr = aEndNdArr;
1387 while( *ppEndNdArr )
1389 nSttIdx = (*ppEndNdArr)->StartOfSectionIndex() + 1;
1392 if( nSttIdx != nEndIdx )
1393 RemoveNode( nSttIdx, nEndIdx - nSttIdx,
true );
1429 sal_uInt16 nLevel, nTop;
1430 explicit HighLevel( sal_uInt16 nLv ) : nLevel( nLv ), nTop( nLv ) {}
1437 HighLevel * pHL =
static_cast<HighLevel*
>(pPara);
1441 if( pHL->nTop > pHL->nLevel )
1442 pHL->nTop = pHL->nLevel;
1472 auto [pStt, pEnd] = rPam.
StartEnd();
1474 if( !rPam.
HasMark() || *pStt >= *pEnd )
1477 if(
this == &rNodes && *pStt <= rPos && rPos < *pEnd )
1484 bool bSplitDestNd =
true;
1485 bool bCopyCollFormat = pDestNd && pDestNd->
GetText().isEmpty();
1496 bCopyCollFormat =
true;
1499 pEnd->GetNode().IsTextNode();
1502 bool bOneNd = pStt->GetNode() == pEnd->GetNode();
1503 const sal_Int32 nLen =
1504 ( bOneNd ?
std::min(pEnd->GetContentIndex(), pSrcNd->
Len()) : pSrcNd->
Len() )
1505 - pStt->GetContentIndex();
1507 if( !pEnd->GetNode().IsContentNode() )
1512 for( ; nSttNdIdx < nEndNdIdx; ++nSttNdIdx )
1514 if( (*
this)[ nSttNdIdx ]->IsContentNode() )
1523 if( !bOneNd && bSplitDestNd )
1527 bCopyCollFormat =
true;
1544 bSplitDestNd =
true;
1546 pDestNd = rNodes[ rPos.
GetNodeIndex() - 1 ]->GetTextNode();
1550 pStt->nContent, nLen );
1558 if( bCopyCollFormat )
1570 pEnd->nContent = pStt->nContent;
1590 const bool bCorrEnd = aEndIdx == rPos.
nNode;
1611 bSplitDestNd =
true;
1635 if (pDestNd && pEnd->GetContentIndex())
1640 pEnd->GetContentIndex());
1643 if (pDestNd && bCopyCollFormat)
1662 if( aEndIdx != aSttIdx )
1670 if( &rNodes ==
this )
1680 const bool bSuccess =
GoPrevious( &pStt->nNode );
1681 OSL_ENSURE( bSuccess,
"Move() - no ContentNode here" );
1683 pStt->nContent.Assign( pStt->GetNode().GetContentNode(),
1684 pStt->GetContentIndex() );
1696 SwNode& rPos,
bool bNewFrames,
bool bTableInsDummyNode )
const
1726 while( ((pCurrentNode = & aRg.
aEnd.
GetNode())->GetStartNode() &&
1743 "aRg should use this node array" );
1745 "Range across different nodes arrays? You deserve punishment!");
1770 if (nDistance < nNodeCnt)
1771 nNodeCnt -= nDistance;
1776 if( bTableInsDummyNode )
1785 if( bTableInsDummyNode )
1791 aInsPos.
GetNode(), bNewFrames );
1794 if( bTableInsDummyNode )
1799 if( bTableInsDummyNode )
1807 MakeCopy( rDoc, aInsPos );
1809 if (nDistance < nNodeCnt)
1810 nNodeCnt -= nDistance;
1816 if( bNewFrames && pTableNd )
1831 MakeCopy( rDoc, aInsPos );
1834 if (nDistance < nNodeCnt)
1835 nNodeCnt -= nDistance;
1840 if( bNewFrames && pSectNd &&
1879 rDoc, aInsPos.
GetNode(), bNewFrames);
1894 assert(!
"How can this node be in the node array?");
1949 bool bSkipHidden,
bool bSkipProtect )
const
1954 while( aTmp <
Count() - 1 )
1970 m_pStartOfSection)->GetSection();
1980 if( ( bSkipHidden || bSkipProtect ) &&
2013 bool bSkipHidden,
bool bSkipProtect )
const
2018 while( aTmp <
Count() - 1 )
2034 m_pStartOfSection)->GetSection();
2044 if( ( bSkipHidden || bSkipProtect ) &&
2065 bool bSkipHidden,
bool bSkipProtect )
2078 m_pStartOfSection)->GetSection();
2092 m_pStartOfSection)->GetSection();
2102 if( ( bSkipHidden || bSkipProtect ) &&
2122 bool bSkipHidden,
bool bSkipProtect )
2135 m_pStartOfSection)->GetSection();
2149 m_pStartOfSection)->GetSection();
2159 if( ( bSkipHidden || bSkipProtect ) &&
2192 assert(pEnd !=
nullptr);
2195 if (!
GetDoc().getIDocumentLayoutAccess().GetCurrentViewShell())
2198 const SwNode *
const pSttNd = &rFrameNd;
2228 if (pLayout ==
nullptr
2251 pTable = pTable->StartOfSectionNode()->FindTableNode())
2262 if (
nullptr != pFrameNd && !(
2281 while (pFrameNd !=
nullptr);
2297 nullptr != pTableNode &&
2301 pFrameNd = pTableNode;
2307 if (pLayout ==
nullptr
2328 pTable && pEnd->
GetIndex() < pTable->GetIndex();
2329 pTable = pTable->StartOfSectionNode()->FindTableNode())
2358 while (pFrameNd !=
nullptr);
2369 if( nStart >= nEnd )
2372 sal_uInt16 cur =
Index2Block( sal_Int32(nStart) );
2375 sal_uInt16 nElem = sal_uInt16( sal_Int32(nStart) -
p->nStart );
2376 auto pElem =
p->mvData.begin() + nElem;
2377 nElem =
p->nElem - nElem;
2380 if( !(*fn)(
static_cast<SwNode *
>(*pElem++), pArgs ) || ++nStart >= nEnd )
2388 pElem =
p->mvData.begin();
2409 SwNode *
const pFirst((*
this)[nDelPos]);
2413 SwNode* pNode = (*this)[ nDelPos + nCnt ];
2427 std::vector<SwTextAttr*> flys;
2428 for (
size_t i = 0;
i < pHints->
Count(); ++
i)
2433 flys.push_back(pHint);
2445 assert(pTextNd == (*
this)[nDelPos + nCnt]);
2446 assert(pFirst == (*
this)[nDelPos]);
2464 aJson.
put(
"commandName",
".uno:DeleteSection");
2465 aJson.
put(
"success",
true);
2468 aJson.
put(
"DeleteSection", fieldCommand);
2477 SwNode* pNew = (*this)[ nEnd ];
2482 if (nDelPos <= nIdx && nIdx < nEnd)
2486 std::vector<BigPtrEntry> aTempEntries;
2490 BigPtrEntry *pDel = (*this)[ nDelPos+nCnt-1 ], *pPrev = (*this)[ nDelPos+nCnt-2 ];
2497 aTempEntries.resize(sal_Int32(nCnt));
2505 BigPtrEntry* pTempEntry = &aTempEntries[sal_Int32(nCnt)];
2534 if (
nullptr != pNode)
2538 if (aIdx <= (*
this)[
SwNodeOffset(0)]->EndOfSectionIndex())
2562 (void)xmlTextWriterStartElement(pWriter, BAD_CAST(
"SwNodes"));
2564 (*
this)[
i]->dumpAsXml(pWriter);
2565 (void)xmlTextWriterEndElement(pWriter);
std::unique_ptr< BlockInfo *[]> m_ppInf
block info
void Insert(BigPtrEntry *p, sal_Int32 pos)
void Remove(sal_Int32 pos, sal_Int32 n=1)
void Replace(sal_Int32 pos, BigPtrEntry *p)
sal_uInt16 Index2Block(sal_Int32) const
block search
sal_Int32 m_nSize
number of elements
BigPtrEntry * operator[](sal_Int32) const
void Move(sal_Int32 from, sal_Int32 to)
virtual bool SplitNode(const SwPosition &rPos, bool bChkTableStart)=0
Split a node at rPos (implemented only for TextNode).
virtual bool SetFieldsDirty(bool b, const SwNode *pChk, SwNodeOffset nLen)=0
virtual void InsDelFieldInFieldLst(bool bIns, const SwTextField &rField)=0
virtual const SwViewShell * GetCurrentViewShell() const =0
Returns the layout set at the document.
virtual void libreOfficeKitViewCallback(int nType, const OString &pPayload) const override
static SAL_WARN_UNUSED_RESULT SfxViewShell * Current()
Marks a character position inside a document model content node (SwContentNode)
SwContentIndex & Assign(const SwContentNode *, sal_Int32)
bool InvalidateNumRule()
Invalidates NumRule at the node.
void DelFrames(SwRootFrame const *pLayout)
Method deletes all views of document for the node.
void ChkCondColl(const SwTextFormatColl *pColl=nullptr)
SwNumRule * FindNumRulePtr(const OUString &rName) const
IDocumentContentOperations const & getIDocumentContentOperations() const
IDocumentUndoRedo & GetIDocumentUndoRedo()
IDocumentFieldsAccess const & getIDocumentFieldsAccess() const
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
SwDocShell * GetDocShell()
sal_uInt16 MakeNumRule(const OUString &rName, const SwNumRule *pCpy=nullptr, bool bBroadcast=false, const SvxNumberFormat::SvxNumPositionAndSpaceMode eDefaultNumberFormatPositionAndSpaceMode=SvxNumberFormat::LABEL_WIDTH_AND_POSITION)
Ends a section of nodes in the document model.
Instances of SwFields and those derived from it occur 0 to n times.
SwFieldType * GetTyp() const
Layout frame for SwNoTextNode, i.e. graphics and OLE nodes (including charts).
Marks a node in the document model.
const SwNodes & GetNodes() const
SwNodeOffset GetIndex() const
Base class of the Writer document model elements.
SwStartNode * GetStartNode()
sal_uInt16 GetSectionLevel() const
Returns the section level at the position given by aIndex.
SwTextNode * GetTextNode()
Inline methods from Node.hxx.
SwSectionNode * GetSectionNode()
SwNodeOffset GetIndex() const
const SwStartNode * FindTableBoxStartNode() const
SwStartNode * m_pStartOfSection
bool IsNoTextNode() const
SwNodes & GetNodes()
Node is in which nodes-array/doc?
bool IsContentNode() const
SwNodeOffset StartOfSectionIndex() const
bool IsSectionNode() const
SwTableNode * FindTableNode()
Search table node, in which it is.
SwSectionNode * FindSectionNode()
Search section node, in which it is.
const SwStartNode * StartOfSectionNode() const
Merge GetRedlineMergeFlag() const
SwNodeOffset EndOfSectionIndex() const
SwContentNode * GetContentNode()
SwTableNode * GetTableNode()
SwNodeType GetNodeType() const
const SwEndNode * EndOfSectionNode() const
void ForEach(FnForEach_SwNodes fnForEach, void *pArgs=nullptr)
SwNode * DocumentSectionStartNode(SwNode *pNode) const
SwOutlineNodes m_aOutlineNodes
Array of all outline nodes.
static sal_uInt16 GetSectionLevel(const SwNode &rIndex)
get section level at the given position
void MoveRange(SwPaM &, SwPosition &, SwNodes &rNodes)
move a range
SwNode * DocumentSectionEndNode(SwNode *pNode) const
bool m_bInNodesDel
In Case of recursive calling.
static void GoEndOfSection(SwNodeIndex *)
bool m_bInDelUpdOutline
Flag for updating of Outline.
SwTextNode * MakeTextNode(SwNode &rWhere, SwTextFormatColl *pColl, bool bNewFrames=true)
Implementations of "Make...Node" are in the given .cxx-files.
SwNode * m_pEndOfAutotext
void dumpAsXml(xmlTextWriterPtr pWriter) const
Dumps the entire nodes structure to the given destination (file nodes.xml in the current directory by...
void SectionUp(SwNodeRange *)
increase level of the given range
void UpdateOutlineIdx(const SwNode &)
Update all OutlineNodes starting from Node.
void DelDummyNodes(const SwNodeRange &rRg)
SwNode & GetEndOfContent() const
Regular ContentSection (i.e. the BodyText).
bool MoveNodes(const SwNodeRange &, SwNodes &rNodes, SwNode &rPos, bool bNewFrames=true)
move the node pointer
std::unique_ptr< SwNode > m_pEndOfContent
bool IsDocNodes() const
Is the NodesArray the regular one of Doc? (and not the UndoNds, ...) Implementation in doc....
void ChgNode(SwNodeIndex const &rDelPos, SwNodeOffset nSize, SwNodeIndex &rInsPos, bool bNewFrames)
void Delete(const SwNodeIndex &rPos, SwNodeOffset nNodes=SwNodeOffset(1))
static SwStartNode * MakeEmptySection(SwNode &rWhere, SwStartNodeType=SwNormalStartNode)
Create an empty section of Start- and EndNote.
SwNode * m_pEndOfInserts
These are the fixed ranges.
void RemoveNode(SwNodeOffset nDelPos, SwNodeOffset nLen, bool bDel)
static SwContentNode * GoPrevious(SwNodeIndex *)
void CopyNodes(const SwNodeRange &, SwNode &rPos, bool bNewFrames, bool bTableInsDummyNode=false) const
SwStartNode * MakeTextSection(const SwNode &rWhere, SwStartNodeType eSttNdTyp, SwTextFormatColl *pColl)
static void GoStartOfSection(SwNodeIndex *)
SwNode & GetEndOfRedlines() const
Section for all Redlines.
SwContentNode * GoNext(SwNodeIndex *) const
void SectionDown(SwNodeRange *pRange, SwStartNodeType=SwNormalStartNode)
create a start/end section pair
void DelNodes(const SwNodeIndex &rStart, SwNodeOffset nCnt=SwNodeOffset(1))
Delete a number of nodes.
SwNode * m_pEndOfRedlines
void InsertNode(SwNode *pNode, const SwNodeIndex &rPos)
SwContentNode * GoNextSection(SwNodeIndex *, bool bSkipHidden=true, bool bSkipProtect=true) const
Go to next content-node that is not protected or hidden (Both set FALSE ==> GoNext/GoPrevious!...
SwNodes(SwNodes const &)=delete
SwNode & GetEndOfInserts() const
Section for all footnotes.
SwDoc & GetDoc()
Which Doc contains the nodes-array?
SwDoc & m_rMyDoc
This Doc contains the nodes-array.
SwNodeIndex * m_vIndices
ring of all indices on nodes.
SwNode * FindPrvNxtFrameNode(const SwNode &rFrameNd, const SwNode *pEnd, SwRootFrame const *pLayout=nullptr) const
Search previous / next content node or table node with frames.
static SwContentNode * GoPrevSection(SwNodeIndex *, bool bSkipHidden=true, bool bSkipProtect=true)
static void SectionUpDown(const SwNodeIndex &aStart, const SwNodeIndex &aEnd)
correct indices after movement
SwNodeOffset Count() const
void SetInvalidRule(bool bFlag)
const OUString & GetName() const
bool Seek_Entry(SwNode *rP, size_type *pnPos) const
PaM is Point and Mark: a selection of the document model.
std::pair< const SwPosition *, const SwPosition * > StartEnd() const
Because sometimes the cost of the operator<= can add up.
bool HasMark() const
A PaM marks a selection if Point and Mark are distinct positions.
This class is internal, used only during DocumentContentOperationsManager::CopyWithFlyInFly(),...
The root element of a Writer document layout.
bool HasMergedParas() const
A section node represents the start of a section on the UI, i.e.
void NodesArrChgd()
Set pointer in format of section on itself.
const SwSection & GetSection() const
void DelFrames(SwRootFrame const *pLayout=nullptr, bool bForce=false)
Method deletes all views of document for the node.
void MakeFramesForAdjacentContentNode(const SwNodeIndex &rIdx)
Method creates all views of document for the previous node.
void MakeOwnFrames(SwNodeIndex *pIdxBehind, SwNodeIndex *pEnd=nullptr)
Creates the frms for the SectionNode (i.e.
bool IsProtectFlag() const
bool IsHiddenFlag() const
const OUString & GetSectionName() const
bool CalcHiddenFlag() const
Starts a section of nodes in the document model.
SwEndNode * m_pEndOfSection
SwStartNodeType GetStartNodeType() const
const SwTable & GetTable() const
void MakeOwnFrames(SwPosition *pIdxBehind=nullptr)
Creates the frms for the table node (i.e.
void DelFrames(SwRootFrame const *pLayout=nullptr)
Method deletes all views of document for the node.
SwTableFormat * GetFrameFormat()
A wrapper around SfxPoolItem to store the start position of (usually) a text portion,...
const SfxPoolItem & GetAttr() const
const SwFormatField & GetFormatField() const
Represents the style of a paragraph.
void ChgTextNode(SwTextNode *const pNode)
SwTextNode is a paragraph in the document model.
virtual sal_Int32 Len() const override
void CutText(SwTextNode *const pDest, const SwContentIndex &rStart, const sal_Int32 nLen)
void DeleteAttribute(SwTextAttr *const pTextAttr)
delete the attribute pTextAttr
bool IsOutline() const
Returns if this text node is an outline.
SwNumRule * GetNumRule(bool bInParent=true) const
Returns numbering rule of this text node.
SwTextNode * SplitContentNode(const SwPosition &, std::function< void(SwTextNode *, sw::mark::RestoreMode, bool AtStart)> const *pContentIndexRestore)
SwpHints * GetpSwpHints()
void CopyCollFormat(SwTextNode &rDestNd, bool bUndoForChgFormatColl=true)
Copy collection with all auto formats to dest-node.
const OUString & GetText() const
SwTextFormatColl * GetTextColl() const
An SwTextAttr container, stores all directly formatted text portions for a text node.
SwTextAttr * Get(size_t nPos) const
size_type erase(const Value &x)
void erase_at(size_t index)
std::vector< Value >::size_type size_type
std::pair< const_iterator, bool > insert(Value &&x)
ring_container GetRingContainer()
struct _xmlTextWriter * xmlTextWriterPtr
static SwNode * GetStartNode(SwOutlineNodes const *pOutlNds, int nOutlineLevel, SwOutlineNodes::size_type *nOutl)
constexpr TypedWhichId< SwFormatFootnote > RES_TXTATR_FTN(59)
constexpr TypedWhichId< SwConditionTextFormatColl > RES_CONDTXTFMTCOLL(166)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_ANNOTATION(60)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_FIELD(RES_TXTATR_NOEND_BEGIN)
constexpr TypedWhichId< SwFormatFlyCnt > RES_TXTATR_FLYCNT(58)
constexpr TypedWhichId< SwFormatMeta > RES_TXTATR_METAFIELD(49)
constexpr TypedWhichId< SwFormatRefMark > RES_TXTATR_REFMARK(RES_TXTATR_WITHEND_BEGIN)
constexpr TypedWhichId< SwFormatMeta > RES_TXTATR_META(48)
constexpr TypedWhichId< SwTOXMark > RES_TXTATR_TOXMARK(47)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_INPUTFIELD(55)
bool HasNumberingWhichNeedsLayoutUpdate(const SwTextNode &rTextNode)
Decides if rTextNode has a numbering which has layout-level values (e.g.
bool(* FnForEach_SwNodes)(SwNode *, void *pArgs)
@ Table
SwTableNode is derived from SwStartNode.
@ Section
SwSectionNode is derived from SwStartNode.
o3tl::strong_int< sal_Int32, struct Tag_SwNodeOffset > SwNodeOffset
SwNodeOffset min(const SwNodeOffset &a, const SwNodeOffset &b)
static sal_uInt16 HighestLevel(SwNodes &rNodes, const SwNodeRange &rRange)
Calculate the highest level in a range.
std::vector< SwStartNode * > SwStartNodePointers
static bool IsInsertOutline(SwNodes const &rNodes, SwNodeOffset const nIndex)
static bool lcl_HighestLevel(SwNode *pNode, void *pPara)
SwContentNode * GetNode(SwPaM &rPam, bool &rbFirst, SwMoveFnCollection const &fnMove, bool const bInReadOnly, SwRootFrame const *const i_pLayout)
This function returns the next node in direction of search.
bool CheckNodesRange(const SwNode &rStt, const SwNode &rEnd, bool bChkSection)
Check if the given range is inside one of the defined top-level sections.
Marks a position in the document model.
void Adjust(SwNodeOffset nDelta)
Adjust node position, and resets content position to zero.
void Assign(const SwNode &rNd, SwNodeOffset nDelta, sal_Int32 nContentOffset=0)
These all set both nNode and nContent.
SwNodeOffset GetNodeIndex() const
sal_Int32 GetContentIndex() const