55#include <com/sun/star/i18n/WordType.hpp>
56#include <com/sun/star/i18n/XBreakIterator.hpp>
69 size_t nStartIndex,
size_t nEndIndex, sal_Int32 nPosition);
72 : m_pViewShell(nullptr)
74 , m_pScriptInfo(nullptr)
81 , m_pTextNode(pTextNode)
82 , m_pMergedPara(nullptr)
88 : m_pViewShell(nullptr)
90 , m_pScriptInfo(nullptr)
94 , m_pTextNode(&rTextNode)
95 , m_pMergedPara(nullptr)
102 assert(pHt &&
m_pFont &&
"No attribute of font available for change");
112 assert(pHt &&
m_pFont &&
"No attribute of font available for reset");
151 : std::make_pair(
m_pTextNode, sal_Int32(nPosition)));
152 return pos.first->GetTextAttrForCharAt(
pos.second);
159 : std::make_pair(
m_pTextNode, sal_Int32(nNewPos)));
231 if (pHints && !bParaFont)
235 while ((m_nStartIndex < pHints->
Count()) &&
267 const auto nHintsCount = pHints->
Count();
280 if (pTextAttr->
GetStart() <= nOldPos)
Rst( pTextAttr );
300 if ( pTextAttr->
GetAnyEnd() > nNewPos )
Chg( pTextAttr );
309 std::pair<SwTextNode const*, sal_Int32>
const newPos(
m_pMergedPara
311 : std::make_pair(
m_pTextNode, sal_Int32(nNewPos)));
324 sal_Int32
const nOldPos(
nPos);
326 if (nPos <= m_pTextNode->Len())
335 while (nPos < m_pTextNode->Len());
407 sal_Int32
const nOldPos(
nPos);
409 if (
nPos <= newPos.second)
415 SeekFwd(nOldPos, newPos.second);
418 while (
nPos < newPos.second);
443 auto const nWhich(pItem->Which());
458 SwTextNode const& rStartNode, sal_Int32
const nStartRedline,
460 size_t & rStartIndex,
size_t & rEndIndex,
461 bool const isTheAnswerYes)
463 size_t nStartIndex(rStartIndex);
464 size_t nEndIndex(rEndIndex);
473 std::vector<SwTextAttr*> activeCharFmts;
477 if (rStartNode != pRLEnd->
GetNode())
484 sal_Int32
const nRedlineEnd(rStartNode == pRLEnd->
GetNode()
487 for ( ; nEndIndex < pStartHints->Count(); ++nEndIndex)
489 SwTextAttr *
const pAttr(pStartHints->GetSortedByEnd(nEndIndex));
494 if (nRedlineEnd < *pAttr->
End())
498 if (nStartRedline <= pAttr->GetStart())
506 switch (pAttr->
Which())
518 if (!isTheAnswerYes)
return false;
528 activeCharFmts.push_back(pAttr);
543 default: assert(
false);
546 assert(nEndIndex == pStartHints->Count() ||
547 pRLEnd->
GetContentIndex() < pStartHints->GetSortedByEnd(nEndIndex)->GetAnyEnd());
550 if (rStartNode != pRLEnd->
GetNode())
562 if (rStartNode != pRLEnd->
GetNode())
572 sal_Int32
const nRedlineStart(rStartNode == pRLEnd->
GetNode()
576 for ( ; nStartIndex < pEndHints->Count(); ++nStartIndex)
578 SwTextAttr *
const pAttr(pEndHints->Get(nStartIndex));
593 assert(nRedlineStart <= pAttr->GetStart());
598 switch (pAttr->
Which())
609 if (!isTheAnswerYes)
return false;
618 auto iter = std::find_if(activeCharFmts.begin(), activeCharFmts.end(),
619 [&pAttr](
const SwTextAttr* pCharFmt) { return *pCharFmt == *pAttr; });
620 if (iter != activeCharFmts.end())
621 activeCharFmts.erase(iter);
622 else if (!isTheAnswerYes)
635 default: assert(
false);
638 if (rStartNode != pRLEnd->
GetNode())
642 for (nEndIndex = 0; nEndIndex < pEndHints->Count(); ++nEndIndex)
644 SwTextAttr *
const pAttr(pEndHints->GetSortedByEnd(nEndIndex));
656 if (!activeCharFmts.empty())
658 if (!isTheAnswerYes)
return false;
664 if (activeCharAttrsStart[
i] != activeCharAttrsEnd[
i])
666 if (!isTheAnswerYes)
return false;
669 rStartIndex = nStartIndex;
670 rEndIndex = nEndIndex;
675 size_t const nStartIndex,
size_t const nEndIndex,
676 sal_Int32
const nPosition)
680 sal_Int32 nNext = pTextNode->
Len();
684 for (
size_t i = nStartIndex;
i < pHints->Count(); ++
i)
694 for (
size_t i = nEndIndex;
i < pHints->Count(); ++
i)
696 SwTextAttr *
const pAttr(pHints->GetSortedByEnd(
i));
699 sal_Int32
const nNextEnd = pAttr->
GetAnyEnd();
706 const sal_Int32 l =
std::min(nNext, pTextNode->
Len());
707 sal_Int32
p = nPosition;
729 nNext = (nPosition <
p) ?
p :
p + 1;
744 sal_Int32 nNext =
GetNextAttrImpl(pTextNode, nStartIndex, nEndIndex, nPosition);
747 std::pair<sal_Int32, std::pair<SwRangeRedline const*, size_t>>
const redline(
748 m_pRedline->GetNextRedln(nNext, pTextNode, nActRedline));
749 if (redline.second.first)
753 || !redline.second.first->End()->GetNode().IsTextNode());
755 nStartIndex, nEndIndex,
m_nPosition == redline.first))
757 nActRedline += redline.second.second;
758 if (&redline.second.first->End()->GetNode() != pTextNode)
760 pTextNode = redline.second.first->End()->GetNode().
GetTextNode();
761 nPosition = redline.second.first->End()->GetContentIndex();
765 nPosition = redline.second.first->End()->GetContentIndex();
799 sal_Int32 m_nNoLineBreak;
814 void NewWord() { m_nWordAdd = m_nWordWidth = 0; }
820 sal_Int32 nIdx, sal_Int32 nEnd )
825 sal_Int32 nStop = nIdx;
829 bool bClear =
CH_BLANK == rText[ nStop ];
832 WordType::DICTIONARY_WORD,
true ) );
833 nStop = aBndry.endPos;
834 if (nIdx <= aBndry.startPos && nIdx && nIdx - 1 != rArg.m_nNoLineBreak)
841 SwDrawTextInfo aDrawInf(rArg.m_pSh, *rArg.m_pOut, rText, nIdx, nStop - nIdx);
843 rArg.m_nRowWidth += nCurrentWidth;
848 rArg.m_nWordWidth += nCurrentWidth;
849 if (
static_cast<tools::Long>(rArg.m_rAbsMin) < rArg.m_nWordWidth)
850 rArg.m_rAbsMin = rArg.m_nWordWidth;
851 rArg.Minimum(rArg.m_nWordWidth + rArg.m_nWordAdd);
869class SwMinMaxNodeArgs
880 if (nNew > m_nMinWidth)
891 if ((RndStdIds::FLY_AT_PARA != rFormatA.
GetAnchorId()) &&
892 (RndStdIds::FLY_AT_CHAR != rFormatA.
GetAnchorId()))
898 OSL_ENSURE(pAnchorNode,
"Unexpected NULL arguments");
899 if (!pAnchorNode || rIn.m_nIndex != pAnchorNode->
GetIndex())
905 if( !bIsDrawFrameFormat )
911 SwTableNode* pTableNd = rNodes[nStt+1]->GetTableNode();
914 SwNode *pNd2 = rNodes[nStt];
936 if( bIsDrawFrameFormat )
971 case text::HoriOrientation::RIGHT:
975 rIn.m_nRightRest -= rIn.m_nRightDiff;
976 rIn.m_nRightDiff = nDiff;
980 if (rIn.m_nRightRest > 0)
981 rIn.m_nRightRest = 0;
983 rIn.m_nRightRest -= nMin;
986 case text::HoriOrientation::LEFT:
990 rIn.m_nLeftRest -= rIn.m_nLeftDiff;
991 rIn.m_nLeftDiff = nDiff;
993 if (text::RelOrientation::FRAME != rOrient.
GetRelationOrient() && rIn.m_nLeftRest < 0)
995 rIn.m_nLeftRest -= nMin;
1000 rIn.m_nMaxWidth += nMax;
1006#define FLYINCNT_MIN_WIDTH 284
1035 nLROffset = nFLOffs;
1037 SwMinMaxNodeArgs aNodeArgs;
1038 aNodeArgs.m_nMinWidth = 0;
1039 aNodeArgs.m_nMaxWidth = 0;
1040 aNodeArgs.m_nLeftRest = nLROffset;
1041 aNodeArgs.m_nRightRest = rRightMargin.
GetRight();
1042 aNodeArgs.m_nLeftDiff = 0;
1043 aNodeArgs.m_nRightDiff = 0;
1049 aNodeArgs.m_nIndex =
nIndex;
1050 for(
auto pFormat: *pSpzs)
1054 if (aNodeArgs.m_nLeftRest < 0)
1055 aNodeArgs.Minimum(nLROffset - aNodeArgs.m_nLeftRest);
1056 aNodeArgs.m_nLeftRest -= aNodeArgs.m_nLeftDiff;
1057 if (aNodeArgs.m_nLeftRest < 0)
1058 aNodeArgs.m_nMaxWidth -= aNodeArgs.m_nLeftRest;
1060 if (aNodeArgs.m_nRightRest < 0)
1061 aNodeArgs.Minimum(rRightMargin.
GetRight() - aNodeArgs.m_nRightRest);
1062 aNodeArgs.m_nRightRest -= aNodeArgs.m_nRightDiff;
1063 if (aNodeArgs.m_nRightRest < 0)
1064 aNodeArgs.m_nMaxWidth -= aNodeArgs.m_nRightRest;
1073 SwMinMaxArgs aArg(
pOut, pSh, rMin, rAbsMin );
1074 while( nIdx < nLen )
1078 if( nNextChg > nStop )
1083 while( nStop < nLen && nStop < nNextChg &&
1099 || (
nullptr == ( pHint = aIter.
GetAttr( nStop ) ) ) )
1112 if (
static_cast<tools::Long>(rMax) < aArg.m_nRowWidth)
1113 rMax = aArg.m_nRowWidth;
1114 aArg.m_nRowWidth = 0;
1131 OUString sTmp( cChar );
1133 *
pOut, sTmp, 0, 1, 0,
false );
1135 aArg.m_nWordWidth += nCurrentWidth;
1136 aArg.m_nRowWidth += nCurrentWidth;
1137 if (
static_cast<tools::Long>(rAbsMin) < aArg.m_nWordWidth)
1138 rAbsMin = aArg.m_nWordWidth;
1139 aArg.Minimum(aArg.m_nWordWidth + aArg.m_nWordAdd);
1140 aArg.m_nNoLineBreak = sal_Int32(nIdx++);
1152 switch( pHint->
Which() )
1178 rMax = std::max(rMax,
sal_uLong(USHRT_MAX));
1183 nCurrentWidth += rLR.
GetLeft();
1185 aArg.m_nWordAdd = nOldWidth + nOldAdd;
1186 aArg.m_nWordWidth = nCurrentWidth;
1187 aArg.m_nRowWidth += nCurrentWidth;
1188 if (
static_cast<tools::Long>(rAbsMin) < aArg.m_nWordWidth)
1189 rAbsMin = aArg.m_nWordWidth;
1190 aArg.Minimum(aArg.m_nWordWidth + aArg.m_nWordAdd);
1197 aText.getLength() ) )
1206 const OUString aText = pField->
ExpandField(
true,
nullptr);
1208 aText.getLength() ) )
1213 aArg.m_nWordWidth = nOldWidth;
1214 aArg.m_nWordAdd = nOldAdd;
1231 if (
static_cast<tools::Long>(rMax) < aArg.m_nRowWidth)
1232 rMax = aArg.m_nRowWidth;
1234 nLROffset += rRightMargin.
GetRight();
1236 rAbsMin += nLROffset;
1240 if (
static_cast<tools::Long>(rMin) < aNodeArgs.m_nMinWidth)
1241 rMin = aNodeArgs.m_nMinWidth;
1242 if (
static_cast<tools::Long>(rAbsMin) < aNodeArgs.m_nMinWidth)
1243 rAbsMin = aNodeArgs.m_nMinWidth;
1244 rMax += aNodeArgs.m_nMaxWidth;
1249 pOut->SetMapMode( aOldMap );
1284 WordType::DICTIONARY_WORD,
true );
1286 if (sal_Int32(nStart) == aBound.startPos)
1289 pOut->SetMapMode( aOldMap );
1298 pOut->SetMapMode( aOldMap );
1320 while( nIdx < nEnd )
1332 while( nStop < nEnd && nStop < nNextChg )
1334 cChar =
GetText()[sal_Int32(nStop)];
1349 (
nullptr == (pHint = aIter.
GetAttr(nStop)))
1371 nWidth = std::max( nWidth, nProWidth );
1375 else if ( cChar ==
CH_TAB )
1386 OUString sTmp( cChar );
1393 switch( pHint->
Which() )
1433 nWidth = std::max( nWidth, nProWidth );
1441 pOut->SetMapMode( aOldMap );
1442 return o3tl::narrowing<sal_uInt16>( nWidth ?
1449 pOut->SetMapMode( aOldMap );
1452 return o3tl::narrowing<sal_uInt16>( nWidth ? ((100 * aIter.
GetFnt()->
GetTextSize_( aDrawInf ).
Height()) / nWidth ) : 0 );
1457 std::vector<SwFlyAtContentFrame*> aObjs;
1464 for (
const auto& pSortedObj : *pSortedObjs)
1501 while (pAnchor->IsFollow())
1509 SwTextFrame* pFlyAnchor = pFly->FindAnchorCharFrame();
1510 if (pFlyAnchor !=
this)
1514 if (pFly->GetFollow())
1599 if ( cCh!=
'\t' && cCh!=
' ' )
1615 if (!pFrame->IsFollow() &&
1616 pFrame->GetTextNodeForFirstText() ==
this)
1620 pFrame->GetCharRect( aRect, aPos );
1621 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 GetLeft() const
tools::Long GetRight() const
tools::Long GetWidth() const
tools::Long GetTextLeft() 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
css::uno::Reference< css::i18n::XBreakIterator > const & GetBreakIter() const
const css::lang::Locale & GetLocale(const LanguageType aLang)
SwTextFrame * FindMaster() const
const SwAttrSet & GetSwAttrSet() const
Does node has already its own auto-attributes? Access to SwAttrSet.
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
const sw::FrameFormats< sw::SpzFrameFormat * > * GetSpzFrameFormats() const
Base class of all fields.
OUString ExpandField(bool bCached, SwRootFrame const *pLayout) const
expand the field.
Flys that are anchored to content (at-para, at-char) but not in content (as-char).
general base class for all free-flowing frames
bool IsFlySplitAllowed() const
Is this fly allowed to split across pages? (Disabled by default.)
virtual const SwFlyFrame * DynCastFlyFrame() const override
virtual SwFrameFormat & GetFrameFormat() override
To take Asian or other languages into consideration, an SwFont object consists of 3 SwSubFonts (Latin...
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
const SwRect & getFrameArea() const
const SwRect & getFramePrintArea() const
std::unique_ptr< SwSortedObjs > m_pDrawObjs
const SwSortedObjs * GetDrawObjs() const
SwLayoutFrame * GetUpper()
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
class for collecting anchored objects
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()
bool IsEmptyWithSplitFly() const
This text frame is not split, doesn't fit the upper, has a single split fly anchored to it with a neg...
TextFrameIndex GetOffset() const
bool IsEmptyMasterWithSplitFly() const
This text frame has a follow and the text frame don't contain text.
bool IsEmptyMaster() const
If there's a Follow and we don't contain text ourselves.
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...
bool HasNonLastSplitFlyDrawObj() const
This text frame may have a split fly frames anchored to it.
SwTextNode * GetTextNodeFirst()
const OUString & GetText() const
Returns the text portion we want to edit (for inline see underneath)
std::vector< SwFlyAtContentFrame * > GetSplitFlyDrawObjs() const
Like GetDrawObjs(), but limit to fly frames which are allowed to split.
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 sal_uInt16 RES_CHRATR_END(46)
constexpr TypedWhichId< SwFormatAutoFormat > RES_TXTATR_AUTOFMT(50)
constexpr TypedWhichId< SwFormatINetFormat > RES_TXTATR_INETFMT(51)
constexpr TypedWhichId< SwFormatPageDesc > RES_PAGEDESC(99)
constexpr TypedWhichId< SvxCharScaleWidthItem > RES_CHRATR_SCALEW(35)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_ANNOTATION(60)
constexpr TypedWhichId< SwFlyFrameFormat > RES_FLYFRMFMT(162)
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< SwDrawFrameFormat > RES_DRAWFRMFMT(165)
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)
const T * HasItem(const ww8::PoolItems &rItems, sal_uInt16 eType)
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