55#include <com/sun/star/i18n/WordType.hpp>
56#include <com/sun/star/i18n/XBreakIterator.hpp>
65 size_t nStartIndex,
size_t nEndIndex, sal_Int32 nPosition);
68 : m_pViewShell(nullptr)
70 , m_pScriptInfo(nullptr)
77 , m_pTextNode(pTextNode)
78 , m_pMergedPara(nullptr)
84 : m_pViewShell(nullptr)
86 , m_pScriptInfo(nullptr)
90 , m_pTextNode(&rTextNode)
91 , m_pMergedPara(nullptr)
98 assert(pHt &&
m_pFont &&
"No attribute of font available for change");
108 assert(pHt &&
m_pFont &&
"No attribute of font available for reset");
147 : std::make_pair(
m_pTextNode, sal_Int32(nPosition)));
148 return pos.first->GetTextAttrForCharAt(
pos.second);
155 : std::make_pair(
m_pTextNode, sal_Int32(nNewPos)));
227 if (pHints && !bParaFont)
231 while ((m_nStartIndex < pHints->
Count()) &&
263 const auto nHintsCount = pHints->
Count();
276 if (pTextAttr->
GetStart() <= nOldPos)
Rst( pTextAttr );
296 if ( pTextAttr->
GetAnyEnd() > nNewPos )
Chg( pTextAttr );
305 std::pair<SwTextNode const*, sal_Int32>
const newPos(
m_pMergedPara
307 : std::make_pair(
m_pTextNode, sal_Int32(nNewPos)));
320 sal_Int32
const nOldPos(
nPos);
322 if (nPos <= m_pTextNode->Len())
331 while (nPos < m_pTextNode->Len());
403 sal_Int32
const nOldPos(
nPos);
405 if (
nPos <= newPos.second)
411 SeekFwd(nOldPos, newPos.second);
414 while (
nPos < newPos.second);
439 auto const nWhich(pItem->Which());
454 SwTextNode const& rStartNode, sal_Int32
const nStartRedline,
456 size_t & rStartIndex,
size_t & rEndIndex,
457 bool const isTheAnswerYes)
459 size_t nStartIndex(rStartIndex);
460 size_t nEndIndex(rEndIndex);
469 std::vector<SwTextAttr*> activeCharFmts;
473 if (rStartNode != pRLEnd->
GetNode())
480 sal_Int32
const nRedlineEnd(rStartNode == pRLEnd->
GetNode()
483 for ( ; nEndIndex < pStartHints->Count(); ++nEndIndex)
485 SwTextAttr *
const pAttr(pStartHints->GetSortedByEnd(nEndIndex));
490 if (nRedlineEnd < *pAttr->
End())
494 if (nStartRedline <= pAttr->GetStart())
502 switch (pAttr->
Which())
514 if (!isTheAnswerYes)
return false;
524 activeCharFmts.push_back(pAttr);
539 default: assert(
false);
542 assert(nEndIndex == pStartHints->Count() ||
543 pRLEnd->
GetContentIndex() < pStartHints->GetSortedByEnd(nEndIndex)->GetAnyEnd());
546 if (rStartNode != pRLEnd->
GetNode())
558 if (rStartNode != pRLEnd->
GetNode())
568 sal_Int32
const nRedlineStart(rStartNode == pRLEnd->
GetNode()
572 for ( ; nStartIndex < pEndHints->Count(); ++nStartIndex)
574 SwTextAttr *
const pAttr(pEndHints->Get(nStartIndex));
589 assert(nRedlineStart <= pAttr->GetStart());
594 switch (pAttr->
Which())
605 if (!isTheAnswerYes)
return false;
614 auto iter = std::find_if(activeCharFmts.begin(), activeCharFmts.end(),
615 [&pAttr](
const SwTextAttr* pCharFmt) { return *pCharFmt == *pAttr; });
616 if (iter != activeCharFmts.end())
617 activeCharFmts.erase(iter);
618 else if (!isTheAnswerYes)
631 default: assert(
false);
634 if (rStartNode != pRLEnd->
GetNode())
638 for (nEndIndex = 0; nEndIndex < pEndHints->Count(); ++nEndIndex)
640 SwTextAttr *
const pAttr(pEndHints->GetSortedByEnd(nEndIndex));
652 if (!activeCharFmts.empty())
654 if (!isTheAnswerYes)
return false;
660 if (activeCharAttrsStart[
i] != activeCharAttrsEnd[
i])
662 if (!isTheAnswerYes)
return false;
665 rStartIndex = nStartIndex;
666 rEndIndex = nEndIndex;
671 size_t const nStartIndex,
size_t const nEndIndex,
672 sal_Int32
const nPosition)
676 sal_Int32 nNext = pTextNode->
Len();
680 for (
size_t i = nStartIndex;
i < pHints->Count(); ++
i)
690 for (
size_t i = nEndIndex;
i < pHints->Count(); ++
i)
692 SwTextAttr *
const pAttr(pHints->GetSortedByEnd(
i));
695 sal_Int32
const nNextEnd = pAttr->
GetAnyEnd();
702 const sal_Int32 l =
std::min(nNext, pTextNode->
Len());
703 sal_Int32
p = nPosition;
725 nNext = (nPosition <
p) ?
p :
p + 1;
740 sal_Int32 nNext =
GetNextAttrImpl(pTextNode, nStartIndex, nEndIndex, nPosition);
743 std::pair<sal_Int32, std::pair<SwRangeRedline const*, size_t>>
const redline(
744 m_pRedline->GetNextRedln(nNext, pTextNode, nActRedline));
745 if (redline.second.first)
749 || !redline.second.first->End()->GetNode().IsTextNode());
751 nStartIndex, nEndIndex,
m_nPosition == redline.first))
753 nActRedline += redline.second.second;
754 if (&redline.second.first->End()->GetNode() != pTextNode)
756 pTextNode = redline.second.first->End()->GetNode().
GetTextNode();
757 nPosition = redline.second.first->End()->GetContentIndex();
761 nPosition = redline.second.first->End()->GetContentIndex();
795 sal_Int32 m_nNoLineBreak;
810 void NewWord() { m_nWordAdd = m_nWordWidth = 0; }
816 sal_Int32 nIdx, sal_Int32 nEnd )
821 sal_Int32 nStop = nIdx;
825 bool bClear =
CH_BLANK == rText[ nStop ];
828 WordType::DICTIONARY_WORD,
true ) );
829 nStop = aBndry.endPos;
830 if (nIdx <= aBndry.startPos && nIdx && nIdx - 1 != rArg.m_nNoLineBreak)
837 SwDrawTextInfo aDrawInf(rArg.m_pSh, *rArg.m_pOut, rText, nIdx, nStop - nIdx);
839 rArg.m_nRowWidth += nCurrentWidth;
844 rArg.m_nWordWidth += nCurrentWidth;
845 if (
static_cast<tools::Long>(rArg.m_rAbsMin) < rArg.m_nWordWidth)
846 rArg.m_rAbsMin = rArg.m_nWordWidth;
847 rArg.Minimum(rArg.m_nWordWidth + rArg.m_nWordAdd);
865class SwMinMaxNodeArgs
876 if (nNew > m_nMinWidth)
887 if ((RndStdIds::FLY_AT_PARA != rFormatA.
GetAnchorId()) &&
888 (RndStdIds::FLY_AT_CHAR != rFormatA.
GetAnchorId()))
894 OSL_ENSURE(pAnchorNode,
"Unexpected NULL arguments");
895 if (!pAnchorNode || rIn.m_nIndex != pAnchorNode->
GetIndex())
901 if( !bIsDrawFrameFormat )
907 SwTableNode* pTableNd = rNodes[nStt+1]->GetTableNode();
910 SwNode *pNd2 = rNodes[nStt];
932 if( bIsDrawFrameFormat )
967 case text::HoriOrientation::RIGHT:
971 rIn.m_nRightRest -= rIn.m_nRightDiff;
972 rIn.m_nRightDiff = nDiff;
976 if (rIn.m_nRightRest > 0)
977 rIn.m_nRightRest = 0;
979 rIn.m_nRightRest -= nMin;
982 case text::HoriOrientation::LEFT:
986 rIn.m_nLeftRest -= rIn.m_nLeftDiff;
987 rIn.m_nLeftDiff = nDiff;
989 if (text::RelOrientation::FRAME != rOrient.
GetRelationOrient() && rIn.m_nLeftRest < 0)
991 rIn.m_nLeftRest -= nMin;
996 rIn.m_nMaxWidth += nMax;
1002#define FLYINCNT_MIN_WIDTH 284
1030 nLROffset = nFLOffs;
1032 SwMinMaxNodeArgs aNodeArgs;
1033 aNodeArgs.m_nMinWidth = 0;
1034 aNodeArgs.m_nMaxWidth = 0;
1035 aNodeArgs.m_nLeftRest = nLROffset;
1036 aNodeArgs.m_nRightRest = rSpace.
GetRight();
1037 aNodeArgs.m_nLeftDiff = 0;
1038 aNodeArgs.m_nRightDiff = 0;
1044 aNodeArgs.m_nIndex =
nIndex;
1049 if (aNodeArgs.m_nLeftRest < 0)
1050 aNodeArgs.Minimum(nLROffset - aNodeArgs.m_nLeftRest);
1051 aNodeArgs.m_nLeftRest -= aNodeArgs.m_nLeftDiff;
1052 if (aNodeArgs.m_nLeftRest < 0)
1053 aNodeArgs.m_nMaxWidth -= aNodeArgs.m_nLeftRest;
1055 if (aNodeArgs.m_nRightRest < 0)
1056 aNodeArgs.Minimum(rSpace.
GetRight() - aNodeArgs.m_nRightRest);
1057 aNodeArgs.m_nRightRest -= aNodeArgs.m_nRightDiff;
1058 if (aNodeArgs.m_nRightRest < 0)
1059 aNodeArgs.m_nMaxWidth -= aNodeArgs.m_nRightRest;
1068 SwMinMaxArgs aArg(
pOut, pSh, rMin, rAbsMin );
1069 while( nIdx < nLen )
1073 if( nNextChg > nStop )
1078 while( nStop < nLen && nStop < nNextChg &&
1094 || (
nullptr == ( pHint = aIter.
GetAttr( nStop ) ) ) )
1107 if (
static_cast<tools::Long>(rMax) < aArg.m_nRowWidth)
1108 rMax = aArg.m_nRowWidth;
1109 aArg.m_nRowWidth = 0;
1126 OUString sTmp( cChar );
1128 *
pOut, sTmp, 0, 1, 0,
false );
1130 aArg.m_nWordWidth += nCurrentWidth;
1131 aArg.m_nRowWidth += nCurrentWidth;
1132 if (
static_cast<tools::Long>(rAbsMin) < aArg.m_nWordWidth)
1133 rAbsMin = aArg.m_nWordWidth;
1134 aArg.Minimum(aArg.m_nWordWidth + aArg.m_nWordAdd);
1135 aArg.m_nNoLineBreak = sal_Int32(nIdx++);
1147 switch( pHint->
Which() )
1173 rMax = std::max(rMax,
sal_uLong(USHRT_MAX));
1178 nCurrentWidth += rLR.
GetLeft();
1180 aArg.m_nWordAdd = nOldWidth + nOldAdd;
1181 aArg.m_nWordWidth = nCurrentWidth;
1182 aArg.m_nRowWidth += nCurrentWidth;
1183 if (
static_cast<tools::Long>(rAbsMin) < aArg.m_nWordWidth)
1184 rAbsMin = aArg.m_nWordWidth;
1185 aArg.Minimum(aArg.m_nWordWidth + aArg.m_nWordAdd);
1192 aText.getLength() ) )
1201 const OUString aText = pField->
ExpandField(
true,
nullptr);
1203 aText.getLength() ) )
1208 aArg.m_nWordWidth = nOldWidth;
1209 aArg.m_nWordAdd = nOldAdd;
1226 if (
static_cast<tools::Long>(rMax) < aArg.m_nRowWidth)
1227 rMax = aArg.m_nRowWidth;
1231 rAbsMin += nLROffset;
1235 if (
static_cast<tools::Long>(rMin) < aNodeArgs.m_nMinWidth)
1236 rMin = aNodeArgs.m_nMinWidth;
1237 if (
static_cast<tools::Long>(rAbsMin) < aNodeArgs.m_nMinWidth)
1238 rAbsMin = aNodeArgs.m_nMinWidth;
1239 rMax += aNodeArgs.m_nMaxWidth;
1244 pOut->SetMapMode( aOldMap );
1279 WordType::DICTIONARY_WORD,
true );
1281 if (sal_Int32(nStart) == aBound.startPos)
1284 pOut->SetMapMode( aOldMap );
1293 pOut->SetMapMode( aOldMap );
1315 while( nIdx < nEnd )
1327 while( nStop < nEnd && nStop < nNextChg )
1329 cChar =
GetText()[sal_Int32(nStop)];
1344 (
nullptr == (pHint = aIter.
GetAttr(nStop)))
1366 nWidth = std::max( nWidth, nProWidth );
1370 else if ( cChar ==
CH_TAB )
1381 OUString sTmp( cChar );
1388 switch( pHint->
Which() )
1428 nWidth = std::max( nWidth, nProWidth );
1436 pOut->SetMapMode( aOldMap );
1437 return o3tl::narrowing<sal_uInt16>( nWidth ?
1444 pOut->SetMapMode( aOldMap );
1447 return o3tl::narrowing<sal_uInt16>( nWidth ? ((100 * aIter.
GetFnt()->
GetTextSize_( aDrawInf ).
Height()) / nWidth ) : 0 );
1459 if ( cCh!=
'\t' && cCh!=
' ' )
1475 if (!pFrame->IsFollow() &&
1476 pFrame->GetTextNodeForFirstText() ==
this)
1480 pFrame->GetCharRect( aRect, aPos );
1481 nRet = pFrame->IsRightToLeft() ?
o3tl::strong_int< sal_Int32, struct Tag_TextFrameIndex > TextFrameIndex
Denotes a character index in a text frame at a layout level, after extent mapping from a text node at...
static OutputDevice * GetDefaultDevice()
virtual const SwViewShell * GetCurrentViewShell() const =0
Returns the layout set at the document.
virtual const tools::Rectangle & GetCurrentBoundRect() const
const SfxPoolItem * GetCurItem() const
const SfxPoolItem * NextItem()
constexpr tools::Long Height() const
constexpr tools::Long Width() const
tools::Long GetRight() const
tools::Long GetTextLeft() const
tools::Long GetLeft() const
tools::Long GetWidth() const
Used by Attribute Iterators to organize attributes on stacks to find the valid attribute in each cate...
void PushAndChg(const SwTextAttr &rAttr, SwFont &rFnt)
void ResetFont(SwFont &rFnt) const
void PopAndChg(const SwTextAttr &rAttr, SwFont &rFnt)
size_t m_nStartIndex
current iteration index in HintStarts
sal_Int32 m_nPosition
current iteration index in text node
void Rst(SwTextAttr const *pHt)
size_t m_nEndIndex
current iteration index in HintEnds
SwAttrHandler & GetAttrHandler()
bool SeekAndChgAttrIter(TextFrameIndex nPos, OutputDevice *pOut)
Executes ChgPhysFnt if Seek() returns true and change font to merge character border with neighbours.
o3tl::enumarray< SwFontScript, sal_uInt16 > m_aFontIdx
void SeekFwd(sal_Int32 nOldPos, sal_Int32 nNewPos)
o3tl::enumarray< SwFontScript, const void * > m_aFontCacheIds
bool MaybeHasHints() const
bool IsSymbol(TextFrameIndex nPos)
bool SeekStartAndChgAttrIter(OutputDevice *pOut, const bool bParaFont)
short m_nChgCnt
count currently open hints, redlines, ext-input
void Chg(SwTextAttr const *pHt)
std::unique_ptr< SwRedlineItr, o3tl::default_delete< SwRedlineItr > > m_pRedline
void CtorInitAttrIter(SwTextNode &rTextNode, SwScriptInfo &rScrInf, SwTextFrame const *pFrame=nullptr)
SwAttrHandler m_aAttrHandler
sw::MergedPara const * m_pMergedPara
SwScriptInfo * m_pScriptInfo
SwAttrIter(SwTextNode const *pTextNode)
TextFrameIndex GetNextAttr() const
SwViewShell * m_pViewShell
bool Seek(TextFrameIndex nPos)
Enables the attributes used at char pos nPos in the logical font.
SwTextAttr * GetAttr(TextFrameIndex nPos) const
Returns the attribute for a position.
VclPtr< OutputDevice > m_pLastOut
void InitFontAndAttrHandler(SwTextNode const &rPropsNode, SwTextNode const &rTextNode, std::u16string_view aText, bool const *pbVertLayout, bool const *pbVertLayoutLRBT)
const SwTextNode * m_pTextNode
input: the current text node
const SvxLRSpaceItem & GetLRSpace(bool=true) const
css::uno::Reference< css::i18n::XBreakIterator > const & GetBreakIter() const
const css::lang::Locale & GetLocale(const LanguageType aLang)
const SwAttrSet & GetSwAttrSet() const
Does node has already its own auto-attributes? Access to SwAttrSet.
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
const SwFrameFormats * GetSpzFrameFormats() const
Base class of all fields.
OUString ExpandField(bool bCached, SwRootFrame const *pLayout) const
expand the field.
Size GetTextSize_(SwDrawTextInfo &rInf)
void SetProportion(const sal_uInt8 nNewPropr)
void SetFntChg(const bool bNew)
void SetFontCacheId(const void *nNewFontCacheId, const sal_uInt16 nIdx, SwFontScript nWhich)
SwFontScript GetActual() const
bool IsSymbol(SwViewShell const *pSh)
LanguageType GetLanguage() const
void ChgPhysFnt(SwViewShell const *pSh, OutputDevice &rOut)
void SetActual(SwFontScript nNew)
Content, content of frame (header, footer, fly).
const SwNodeIndex * GetContentIdx() const
SwRootFrame * getRootFrame()
virtual void Height(const SwTwips nNew, const bool bText=true) override
SwNodeOffset GetIndex() const
Base class of the Writer document model elements.
SwTextNode * GetTextNode()
Inline methods from Node.hxx.
SwNodeOffset GetIndex() const
const SwStartNode * StartOfSectionNode() const
SwNodeOffset EndOfSectionIndex() const
SwTableNode * GetTableNode()
const IDocumentLayoutAccess & getIDocumentLayoutAccess() const
Provides access to the document layout interface.
const SwPosition * End() const
tools::Long GetPrtRight(const SwFrame &rFrame) const
tools::Long GetLeft(const SwRect &rRect) const
tools::Long GetPrtLeft(const SwFrame &rFrame) const
tools::Long GetRight(const SwRect &rRect) const
Of course Writer needs its own rectangles.
static constexpr size_type npos
vector_type::size_type size_type
SwViewShell * GetCurrShell() const
SwFontScript WhichFont(TextFrameIndex nIdx) const
TextFrameIndex NextScriptChg(TextFrameIndex nPos) const
const SwTable & GetTable() const
SwHTMLTableLayout * GetHTMLTableLayout()
A wrapper around SfxPoolItem to store the start position of (usually) a text portion,...
sal_Int32 GetAnyEnd() const
end (if available), else start
bool IsFormatIgnoreStart() const
const sal_Int32 * End() const
const SwFormatFlyCnt & GetFlyCnt() const
const SwFormatFootnote & GetFootnote() const
sal_Int32 GetStart() const
const SwFormatCharFormat & GetCharFormat() const
const SwFormatAutoFormat & GetAutoFormat() const
void SetPriorityAttr(bool bFlag)
bool IsFormatIgnoreEnd() const
const SwFormatField & GetFormatField() const
Represents the visualization of a paragraph.
SwTextFrame * GetFollow()
TextFrameIndex GetOffset() const
bool IsSymbolAt(TextFrameIndex) const
sal_uInt16 GetScalingOfSelectedText(TextFrameIndex nStt, TextFrameIndex nEnd)
Calculates the width of the text part specified by nStart and nEnd, the height of the line containing...
SwTextNode * GetTextNodeFirst()
const OUString & GetText() const
Returns the text portion we want to edit (for inline see underneath)
void CharToLine(TextFrameIndex)
const SwLineLayout * GetCurr() const
SwTextNode is a paragraph in the document model.
virtual sal_Int32 Len() const override
tools::Long GetLeftMarginWithNum(bool bTextLeft=false) const
Returns the additional indents of this text node and its numbering.
bool IsSymbolAt(sal_Int32 nBegin) const
in ndcopy.cxx
SwTwips GetWidthOfLeadingTabs() const
Returns the width of leading tabs/blanks in this paragraph.
bool GetFirstLineOfsWithNum(short &rFirstOffset) const
Returns the combined first line indent of this text node and its numbering.
void GetMinMaxSize(SwNodeOffset nIndex, sal_uLong &rMin, sal_uLong &rMax, sal_uLong &rAbs) const
Is in itratr.
SwpHints * GetpSwpHints()
const OUString & GetText() const
vcl::Window * GetWin() const
vcl::RenderContext & GetRefDev() const
An SwTextAttr container, stores all directly formatted text portions for a text node.
SwTextAttr * Get(size_t nPos) const
SwTextAttr * GetSortedByEnd(size_t nPos) const
reference_type * get() const
::OutputDevice const * GetOutDev() const
@ Minimum
Value in Var-direction gives minimum (can be exceeded but not be less).
#define CH_TXT_ATR_FIELDSEP
#define CH_TXT_ATR_INPUTFIELDSTART
#define CH_TXT_ATR_FORMELEMENT
constexpr TypedWhichId< SwFormatFootnote > RES_TXTATR_FTN(59)
bool isCHRATR(const sal_uInt16 nWhich)
constexpr TypedWhichId< SwFlyFrameFormat > RES_FLYFRMFMT(156)
constexpr sal_uInt16 RES_CHRATR_END(46)
constexpr TypedWhichId< SwFormatAutoFormat > RES_TXTATR_AUTOFMT(50)
constexpr TypedWhichId< SwFormatINetFormat > RES_TXTATR_INETFMT(51)
constexpr TypedWhichId< SvxCharScaleWidthItem > RES_CHRATR_SCALEW(35)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_ANNOTATION(60)
constexpr TypedWhichId< SwDrawFrameFormat > RES_DRAWFRMFMT(159)
constexpr sal_uInt16 RES_CHRATR_BEGIN(HINT_BEGIN)
constexpr TypedWhichId< SwFormatContentControl > RES_TXTATR_CONTENTCONTROL(56)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_FIELD(RES_TXTATR_NOEND_BEGIN)
constexpr TypedWhichId< SwFormatCharFormat > RES_TXTATR_CHARFMT(52)
constexpr TypedWhichId< SwFormatFlyCnt > RES_TXTATR_FLYCNT(58)
constexpr TypedWhichId< SvxRsidItem > RES_CHRATR_RSID(39)
constexpr TypedWhichId< SwFormatMeta > RES_TXTATR_METAFIELD(49)
constexpr TypedWhichId< SvXMLAttrContainerItem > RES_TXTATR_UNKNOWN_CONTAINER(54)
constexpr TypedWhichId< SwFormatRefMark > RES_TXTATR_REFMARK(RES_TXTATR_WITHEND_BEGIN)
constexpr TypedWhichId< SwFormatMeta > RES_TXTATR_META(48)
#define CH_TXT_ATR_INPUTFIELDEND
constexpr TypedWhichId< SwTOXMark > RES_TXTATR_TOXMARK(47)
constexpr TypedWhichId< SwFormatRuby > RES_TXTATR_CJK_RUBY(53)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_INPUTFIELD(55)
#define CH_TXT_ATR_FIELDEND
#define CH_TXT_ATR_FIELDSTART
#define CH_TXTATR_BREAKWORD
#define FLYINCNT_MIN_WIDTH
static bool lcl_MinMaxString(SwMinMaxArgs &rArg, SwFont *pFnt, const OUString &rText, sal_Int32 nIdx, sal_Int32 nEnd)
static void lcl_MinMaxNode(SwFrameFormat *pNd, SwMinMaxNodeArgs &rIn)
static void InsertCharAttrs(SfxPoolItem const **pAttrs, SfxItemSet const &rItems)
static sal_Int32 GetNextAttrImpl(SwTextNode const *pTextNode, size_t nStartIndex, size_t nEndIndex, sal_Int32 nPosition)
static bool CanSkipOverRedline(SwTextNode const &rStartNode, sal_Int32 const nStartRedline, SwRangeRedline const &rRedline, size_t &rStartIndex, size_t &rEndIndex, bool const isTheAnswerYes)
#define SAL_N_ELEMENTS(arr)
if(aStr !=aBuf) UpdateName_Impl(m_xFollowLb.get()
double getLength(const B2DPolygon &rCandidate)
TextFrameIndex MapModelToView(MergedPara const &, SwTextNode const *pNode, sal_Int32 nIndex)
std::pair< SwTextNode *, sal_Int32 > MapViewToModel(MergedPara const &, TextFrameIndex nIndex)
SwNodeOffset min(const SwNodeOffset &a, const SwNodeOffset &b)
Marks a position in the document model.
sal_Int32 GetContentIndex() const
OUString mergedText
note: cannot be const currently to avoid UB because SwTextGuess::Guess const_casts it and modifies it...
SwTextNode *const pFirstNode
except break attributes, those are taken from the first node
SwTextNode * pParaPropsNode
most paragraph properties are taken from the first non-empty node
SwTextNode const * pLastNode
mainly for sanity checks
const sal_Unicode CH_BREAK
const sal_Unicode CH_BLANK
constexpr sal_Int32 COMPLETE_STRING