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)));
188 SwTextInfo info(const_cast<SwTextFrame*>(
this));
189 SwTextIter iter(const_cast<SwTextFrame*>(
this), &info);
199 if (m_pTextNode != pFirstTextNode)
226 SwpHints const*
const pHints(m_pTextNode->GetpSwpHints());
227 if (pHints && !bParaFont)
231 while ((m_nStartIndex < pHints->
Count()) &&
270 while ((m_nEndIndex < pHints->
Count()) &&
271 ((pTextAttr = pHints->GetSortedByEnd(
m_nEndIndex))->GetAnyEnd() <= nNewPos))
275 if (pTextAttr->GetStart() <= nOldPos)
Rst( pTextAttr );
281 while ((m_nEndIndex < pHints->
Count()) &&
282 (pHints->GetSortedByEnd(
m_nEndIndex)->GetAnyEnd() <= nNewPos))
290 while ((m_nStartIndex < pHints->
Count()) &&
291 ((pTextAttr = pHints->Get(
m_nStartIndex))->GetStart() <= nNewPos))
295 if ( pTextAttr->GetAnyEnd() > nNewPos )
Chg( pTextAttr );
304 std::pair<SwTextNode const*, sal_Int32>
const newPos(
m_pMergedPara
306 : std::make_pair(
m_pTextNode, sal_Int32(nNewPos)));
319 sal_Int32
const nOldPos(nPos);
321 if (nPos <= m_pTextNode->Len())
330 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);
462 if (!pRLEnd->nNode.GetNode().IsTextNode()
463 || pRLEnd->nContent == pRLEnd->nNode.GetNode().GetTextNode()->Len())
469 std::vector<SwTextAttr*> activeCharFmts;
473 if (&rStartNode != &pRLEnd->nNode.GetNode())
480 sal_Int32
const nRedlineEnd(&rStartNode == &pRLEnd->nNode.GetNode()
483 for ( ; nEndIndex < pStartHints->Count(); ++nEndIndex)
485 SwTextAttr *
const pAttr(pStartHints->GetSortedByEnd(nEndIndex));
490 if (nRedlineEnd < *pAttr->
End())
494 if (nStartRedline <= pAttr->GetStart())
498 if (pAttr->IsFormatIgnoreEnd())
502 switch (pAttr->Which())
513 if (!isTheAnswerYes)
return false;
523 activeCharFmts.push_back(pAttr);
530 ? static_cast<SfxItemSet const&>(pAttr->GetCharFormat().GetCharFormat()->GetAttrSet())
531 : *pAttr->GetAutoFormat().GetStyleHandle());
541 assert(nEndIndex == pStartHints->Count() ||
542 pRLEnd->nContent.GetIndex() < pStartHints->GetSortedByEnd(nEndIndex)->GetAnyEnd());
545 if (&rStartNode != &pRLEnd->nNode.GetNode())
557 if (&rStartNode != &pRLEnd->nNode.GetNode())
560 pRLEnd->nNode.GetNode().GetTextNode()->GetSwAttrSet());
563 if (
SwpHints *
const pEndHints = pRLEnd->nNode.GetNode().GetTextNode()->GetpSwpHints())
567 sal_Int32
const nRedlineStart(&rStartNode == &pRLEnd->nNode.GetNode()
571 for ( ; nStartIndex < pEndHints->Count(); ++nStartIndex)
573 SwTextAttr *
const pAttr(pEndHints->Get(nStartIndex));
578 if (pRLEnd->nContent.GetIndex() < pAttr->GetStart())
584 if (pAttr->IsFormatIgnoreStart())
588 assert(nRedlineStart <= pAttr->GetStart());
589 if (*pAttr->End() <= pRLEnd->nContent.GetIndex())
593 switch (pAttr->Which())
603 if (!isTheAnswerYes)
return false;
612 auto iter = std::find_if(activeCharFmts.begin(), activeCharFmts.end(),
613 [&pAttr](
const SwTextAttr* pCharFmt) {
return *pCharFmt == *pAttr; });
614 if (iter != activeCharFmts.end())
615 activeCharFmts.erase(iter);
616 else if (!isTheAnswerYes)
620 ? static_cast<SfxItemSet const&>(pAttr->GetCharFormat().GetCharFormat()->GetAttrSet())
621 : *pAttr->GetAutoFormat().GetStyleHandle());
632 if (&rStartNode != &pRLEnd->nNode.GetNode())
636 for (nEndIndex = 0; nEndIndex < pEndHints->Count(); ++nEndIndex)
638 SwTextAttr *
const pAttr(pEndHints->GetSortedByEnd(nEndIndex));
641 if (pRLEnd->nContent.GetIndex() < *pAttr->End())
650 if (!activeCharFmts.empty())
652 if (!isTheAnswerYes)
return false;
658 if (activeCharAttrsStart[
i] != activeCharAttrsEnd[
i])
660 if (!isTheAnswerYes)
return false;
663 rStartIndex = nStartIndex;
664 rEndIndex = nEndIndex;
669 size_t const nStartIndex,
size_t const nEndIndex,
670 sal_Int32
const nPosition)
674 sal_Int32 nNext = pTextNode->
Len();
678 for (
size_t i = nStartIndex;
i < pHints->Count(); ++
i)
681 if (!pAttr->IsFormatIgnoreStart())
688 for (
size_t i = nEndIndex;
i < pHints->Count(); ++
i)
690 SwTextAttr *
const pAttr(pHints->GetSortedByEnd(
i));
691 if (!pAttr->IsFormatIgnoreEnd())
693 sal_Int32
const nNextEnd = pAttr->
GetAnyEnd();
694 nNext = std::min(nNext, nNextEnd);
700 const sal_Int32 l = std::min(nNext, pTextNode->
Len());
701 sal_Int32
p = nPosition;
723 nNext = (nPosition < p) ? p : p + 1;
738 sal_Int32 nNext =
GetNextAttrImpl(pTextNode, nStartIndex, nEndIndex, nPosition);
741 std::pair<sal_Int32, std::pair<SwRangeRedline const*, size_t>>
const redline(
742 m_pRedline->GetNextRedln(nNext, pTextNode, nActRedline));
743 if (redline.second.first)
747 || !redline.second.first->End()->nNode.GetNode().IsTextNode());
749 nStartIndex, nEndIndex,
m_nPosition == redline.first))
751 nActRedline += redline.second.second;
752 if (&redline.second.first->End()->nNode.GetNode() != pTextNode)
754 pTextNode = redline.second.first->End()->nNode.GetNode().
GetTextNode();
755 nPosition = redline.second.first->End()->nContent.
GetIndex();
759 nPosition = redline.second.first->End()->nContent.GetIndex();
793 sal_Int32 nNoLineBreak;
795 : pOut( pOutI ), pSh( pShI ), rMin( rMinI ), rAbsMin( rAbsI ), nRowWidth(0),
798 void Minimum(
tools::Long nNew )
const {
if( static_cast<tools::Long>(rMin) < nNew ) rMin = nNew; }
799 void NewWord() { nWordAdd = nWordWidth = 0; }
805 sal_Int32 nIdx, sal_Int32 nEnd )
810 sal_Int32 nStop = nIdx;
814 bool bClear =
CH_BLANK == rText[ nStop ];
817 WordType::DICTIONARY_WORD, true ) );
818 nStop = aBndry.endPos;
819 if( nIdx <= aBndry.startPos && nIdx && nIdx-1 != rArg.nNoLineBreak )
826 SwDrawTextInfo aDrawInf(rArg.pSh, *rArg.pOut, rText, nIdx, nStop - nIdx);
828 rArg.nRowWidth += nCurrentWidth;
833 rArg.nWordWidth += nCurrentWidth;
834 if( static_cast<tools::Long>(rArg.rAbsMin) < rArg.nWordWidth )
835 rArg.rAbsMin = rArg.nWordWidth;
836 rArg.Minimum( rArg.nWordWidth + rArg.nWordAdd );
847 SwAttrIter aIter( *const_cast<SwTextNode*>(
this), aScriptInfo );
854 class SwMinMaxNodeArgs
873 if ((RndStdIds::FLY_AT_PARA != rFormatA.
GetAnchorId()) &&
874 (RndStdIds::FLY_AT_CHAR != rFormatA.
GetAnchorId()))
880 OSL_ENSURE(pPos && pIn,
"Unexpected NULL arguments");
887 if( !bIsDrawFrameFormat )
893 SwTableNode* pTableNd = rNodes[nStt+1]->GetTableNode();
896 SwNode *pNd2 = rNodes[nStt];
918 if( bIsDrawFrameFormat )
944 pIn->Minimum( nMin );
953 case text::HoriOrientation::RIGHT:
957 pIn->nRightRest -= pIn->nRightDiff;
958 pIn->nRightDiff = nDiff;
962 if( pIn->nRightRest > 0 )
965 pIn->nRightRest -= nMin;
968 case text::HoriOrientation::LEFT:
972 pIn->nLeftRest -= pIn->nLeftDiff;
973 pIn->nLeftDiff = nDiff;
978 pIn->nLeftRest -= nMin;
983 pIn->nMaxWidth += nMax;
984 pIn->Minimum( nMin );
989 #define FLYINCNT_MIN_WIDTH 284
1017 nLROffset = nFLOffs;
1019 SwMinMaxNodeArgs aNodeArgs;
1020 aNodeArgs.nMinWidth = 0;
1021 aNodeArgs.nMaxWidth = 0;
1022 aNodeArgs.nLeftRest = nLROffset;
1023 aNodeArgs.nRightRest = rSpace.
GetRight();
1024 aNodeArgs.nLeftDiff = 0;
1025 aNodeArgs.nRightDiff = 0;
1031 aNodeArgs.nIndx = nIndex;
1036 if( aNodeArgs.nLeftRest < 0 )
1037 aNodeArgs.Minimum( nLROffset - aNodeArgs.nLeftRest );
1038 aNodeArgs.nLeftRest -= aNodeArgs.nLeftDiff;
1039 if( aNodeArgs.nLeftRest < 0 )
1040 aNodeArgs.nMaxWidth -= aNodeArgs.nLeftRest;
1042 if( aNodeArgs.nRightRest < 0 )
1043 aNodeArgs.Minimum( rSpace.
GetRight() - aNodeArgs.nRightRest );
1044 aNodeArgs.nRightRest -= aNodeArgs.nRightDiff;
1045 if( aNodeArgs.nRightRest < 0 )
1046 aNodeArgs.nMaxWidth -= aNodeArgs.nRightRest;
1049 SwAttrIter aIter( *const_cast<SwTextNode*>(
this), aScriptInfo );
1055 SwMinMaxArgs aArg( pOut, pSh, rMin, rAbsMin );
1056 while( nIdx < nLen )
1060 if( nNextChg > nStop )
1065 while( nStop < nLen && nStop < nNextChg &&
1081 || (
nullptr == ( pHint = aIter.
GetAttr( nStop ) ) ) )
1094 if( static_cast<tools::Long>(rMax) < aArg.nRowWidth )
1095 rMax = aArg.nRowWidth;
1113 OUString sTmp( cChar );
1115 *pOut, sTmp, 0, 1, 0,
false );
1117 aArg.nWordWidth += nCurrentWidth;
1118 aArg.nRowWidth += nCurrentWidth;
1119 if( static_cast<tools::Long>(rAbsMin) < aArg.nWordWidth )
1120 rAbsMin = aArg.nWordWidth;
1121 aArg.Minimum( aArg.nWordWidth + aArg.nWordAdd );
1122 aArg.nNoLineBreak = sal_Int32(nIdx++);
1134 switch( pHint->
Which() )
1165 nCurrentWidth += rLR.
GetLeft();
1167 aArg.nWordAdd = nOldWidth + nOldAdd;
1168 aArg.nWordWidth = nCurrentWidth;
1169 aArg.nRowWidth += nCurrentWidth;
1170 if( static_cast<tools::Long>(rAbsMin) < aArg.nWordWidth )
1171 rAbsMin = aArg.nWordWidth;
1172 aArg.Minimum( aArg.nWordWidth + aArg.nWordAdd );
1179 aText.getLength() ) )
1188 const OUString aText = pField->
ExpandField(
true,
nullptr);
1190 aText.getLength() ) )
1194 default: aArg.nWordWidth = nOldWidth;
1195 aArg.nWordAdd = nOldAdd;
1213 if( static_cast<tools::Long>(rMax) < aArg.nRowWidth )
1214 rMax = aArg.nRowWidth;
1218 rAbsMin += nLROffset;
1222 if( static_cast<tools::Long>(rMin) < aNodeArgs.nMinWidth )
1223 rMin = aNodeArgs.nMinWidth;
1224 if( static_cast<tools::Long>(rAbsMin) < aNodeArgs.nMinWidth )
1225 rAbsMin = aNodeArgs.nMinWidth;
1226 rMax += aNodeArgs.nMaxWidth;
1266 WordType::DICTIONARY_WORD,
true );
1268 if (sal_Int32(nStart) == aBound.startPos)
1302 while( nIdx < nEnd )
1314 while( nStop < nEnd && nStop < nNextChg )
1316 cChar =
GetText()[sal_Int32(nStop)];
1331 (
nullptr == (pHint = aIter.
GetAttr(nStop)))
1353 nWidth = std::max( nWidth, nProWidth );
1357 else if ( cChar ==
CH_TAB )
1368 OUString sTmp( cChar );
1375 switch( pHint->
Which() )
1380 SwDrawTextInfo aDrawInf(pSh, *pOut, aText, 0, aText.getLength());
1391 SwDrawTextInfo aDrawInf(pSh, *pOut, aText, 0, aText.getLength());
1415 nWidth = std::max( nWidth, nProWidth );
1424 return static_cast<sal_uInt16
>( nWidth ?
1434 return static_cast<sal_uInt16
>( nWidth ? ((100 * aIter.
GetFnt()->
GetTextSize_( aDrawInf ).
Height()) / nWidth ) : 0 );
1446 if ( cCh!=
'\t' && cCh!=
' ' )
1463 if (!pFrame->IsFollow() &&
1464 pFrame->GetTextNodeForFirstText() ==
this)
1468 pFrame->GetCharRect( aRect, aPos );
1469 nRet = pFrame->IsRightToLeft() ?
SwAttrHandler & GetAttrHandler()
SwScriptInfo * m_pScriptInfo
const sal_Unicode CH_BREAK
bool SeekAndChgAttrIter(TextFrameIndex nPos, OutputDevice *pOut)
Executes ChgPhysFnt if Seek() returns true and change font to merge character border with neighbours...
Represents the visualization of a paragraph.
tools::Long GetWidth() const
const SvxLRSpaceItem & GetLRSpace(bool=true) const
tools::Long GetRight(const SwRect &rRect) const
SwFontScript WhichFont(TextFrameIndex nIdx) const
sal_uLong GetIndex() const
Marks a position in the document model.
virtual const tools::Rectangle & GetCurrentBoundRect() const
bool MaybeHasHints() const
TextFrameIndex NextScriptChg(TextFrameIndex nPos) const
tools::Long GetPrtRight(const SwFrame &rFrame) const
bool isCHRATR(const sal_uInt16 nWhich)
constexpr TypedWhichId< SwFormatMeta > RES_TXTATR_METAFIELD(49)
const OUString & GetText() const
void PopAndChg(const SwTextAttr &rAttr, SwFont &rFnt)
SwTextAttr * GetAttr(TextFrameIndex nPos) const
Returns the attribute for a position.
SwpHints * GetpSwpHints()
#define FLYINCNT_MIN_WIDTH
constexpr TypedWhichId< SwFormatMeta > RES_TXTATR_META(48)
static bool lcl_MinMaxString(SwMinMaxArgs &rArg, SwFont *pFnt, const OUString &rText, sal_Int32 nIdx, sal_Int32 nEnd)
void SetPriorityAttr(bool bFlag)
const SwTextNode * m_pTextNode
input: the current text node
bool GetFirstLineOfsWithNum(short &rFirstOffset) const
Returns the combined first line indent of this text node and its numbering.
virtual sal_Int32 Len() const override
tools::Long GetRight() const
size_t m_nEndIndex
current iteration index in HintEnds
Base class of all fields.
Size GetTextSize_(SwDrawTextInfo &rInf)
void SeekFwd(sal_Int32 nOldPos, sal_Int32 nNewPos)
constexpr TypedWhichId< SwFormatFlyCnt > RES_TXTATR_FLYCNT(57)
const MapMode & GetMapMode() const
TextFrameIndex GetNextAttr() const
SwTwips GetWidthOfLeadingTabs() const
Returns the width of leading tabs/blanks in this paragraph.
void CharToLine(TextFrameIndex)
Content, content of frame (header, footer, fly).
bool IsSymbol(SwViewShell const *pSh)
void ResetFont(SwFont &rFnt) const
Of course Writer needs its own rectangles.
const OUString & GetText() const
Returns the text portion we want to edit (for inline see underneath)
sal_Int32 GetAnyEnd() const
end (if available), else start
constexpr TypedWhichId< SwFormatField > RES_TXTATR_ANNOTATION(59)
#define CH_TXT_ATR_FORMELEMENT
const SwFrameFormats * GetSpzFrameFormats() const
Value in Var-direction gives minimum (can be exceeded but not be less).
bool Seek(TextFrameIndex nPos)
Enables the attributes used at char pos nPos in the logical font.
bool IsSymbolAt(sal_Int32 nBegin) const
in ndcopy.cxx
static OutputDevice * GetDefaultDevice()
sal_Int32 m_nPosition
current iteration index in text node
#define CH_TXTATR_BREAKWORD
const SfxPoolItem * NextItem()
SwTableNode * GetTableNode()
SwAttrIter(SwTextNode const *pTextNode)
void CtorInitAttrIter(SwTextNode &rTextNode, SwScriptInfo &rScrInf, SwTextFrame const *pFrame=nullptr)
o3tl::enumarray< SwFontScript, sal_uInt16 > m_aFontIdx
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
#define CH_TXT_ATR_INPUTFIELDSTART
Used by Attribute Iterators to organize attributes on stacks to find the valid attribute in each cate...
sal_uLong GetIndex() const
sal_Int32 GetStart() const
void SetFntChg(const bool bNew)
tools::Long GetPrtLeft(const SwFrame &rFrame) const
constexpr TypedWhichId< SwFormatRuby > RES_TXTATR_CJK_RUBY(53)
const SwTable & GetTable() const
constexpr TypedWhichId< SwFormatCharFormat > RES_TXTATR_CHARFMT(52)
const SwFormatField & GetFormatField() const
constexpr TypedWhichId< SwFormatAutoFormat > RES_TXTATR_AUTOFMT(50)
bool SeekStartAndChgAttrIter(OutputDevice *pOut, const bool bParaFont)
void ChgPhysFnt(SwViewShell const *pSh, OutputDevice &rOut)
tools::Long GetLeft(const SwRect &rRect) const
std::unique_ptr< SwRedlineItr, o3tl::default_delete< SwRedlineItr > > m_pRedline
constexpr TypedWhichId< SwFormatFootnote > RES_TXTATR_FTN(58)
SwFontScript GetActual() const
SwTextFrame * GetFollow()
TextFrameIndex GetOffset() const
constexpr TypedWhichId< SwFormatINetFormat > RES_TXTATR_INETFMT(51)
vcl::RenderContext & GetRefDev() const
#define SAL_N_ELEMENTS(arr)
void InitFontAndAttrHandler(SwTextNode const &rPropsNode, SwTextNode const &rTextNode, OUString const &rText, bool const *pbVertLayout, bool const *pbVertLayoutLRBT)
sw::MergedPara const * m_pMergedPara
SwTextNode * GetTextNodeFirst()
constexpr TypedWhichId< SwFormatField > RES_TXTATR_FIELD(RES_TXTATR_NOEND_BEGIN)
tools::Long GetTextLeft() const
virtual void Height(const sal_uInt16 nNew, const bool bText=true) override
const SwStartNode * StartOfSectionNode() const
TextFrameIndex MapModelToView(MergedPara const &, SwTextNode const *pNode, sal_Int32 nIndex)
vector_type::size_type size_type
const sal_Unicode CH_BLANK
tools::Long GetLeft() const
std::pair< SwTextNode *, sal_Int32 > MapViewToModel(MergedPara const &, TextFrameIndex nIndex)
tools::Long Width() const
#define CH_TXT_ATR_FIELDSTART
SwTextNode * pParaPropsNode
most paragraph properties are taken from the first non-empty node
tools::Long GetLeftMarginWithNum(bool bTextLeft=false) const
Returns the additional indents of this text node and its numbering.
static void lcl_MinMaxNode(SwFrameFormat *pNd, SwMinMaxNodeArgs *pIn)
OUString mergedText
note: cannot be const currently to avoid UB because SwTextGuess::Guess const_casts it and modifies it...
static bool CanSkipOverRedline(SwTextNode const &rStartNode, sal_Int32 const nStartRedline, SwRangeRedline const &rRedline, size_t &rStartIndex, size_t &rEndIndex, bool const isTheAnswerYes)
const SwFormatFootnote & GetFootnote() const
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
constexpr TypedWhichId< SvxCharScaleWidthItem > RES_CHRATR_SCALEW(35)
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...
const SwNodeIndex * GetContentIdx() const
size_t m_nStartIndex
current iteration index in HintStarts
constexpr TypedWhichId< SvxRsidItem > RES_CHRATR_RSID(39)
const IDocumentLayoutAccess & getIDocumentLayoutAccess() const
Provides access to the document layout interface.
css::uno::Reference< css::i18n::XBreakIterator > const & GetBreakIter() const
const css::lang::Locale & GetLocale(const LanguageType aLang)
sal_uLong EndOfSectionIndex() const
SwTextNode is a paragraph in the document model.
void Rst(SwTextAttr const *pHt)
OUString ExpandField(bool bCached, SwRootFrame const *pLayout) const
expand the field.
LanguageType GetLanguage() const
#define CH_TXT_ATR_INPUTFIELDEND
void GetMinMaxSize(sal_uLong nIndex, sal_uLong &rMin, sal_uLong &rMax, sal_uLong &rAbs) const
Is in itratr.
An SwTextAttr container, stores all directly formatted text portions for a text node.
o3tl::enumarray< SwFontScript, const void * > m_aFontCacheIds
constexpr sal_uInt16 RES_CHRATR_BEGIN(HINT_BEGIN)
virtual const SwViewShell * GetCurrentViewShell() const =0
Returns the layout set at the document.
void SetFontCacheId(const void *nNewFontCacheId, const sal_uInt16 nIdx, SwFontScript nWhich)
vcl::Window * GetWin() const
const o3tl::enumarray< SvxAdjust, unsigned short > aSvxToUnoAdjust USHRT_MAX
SwHTMLTableLayout * GetHTMLTableLayout()
SwAttrHandler m_aAttrHandler
void SetActual(SwFontScript nNew)
const SwPosition * End() const
void Chg(SwTextAttr const *pHt)
tools::Long Height() const
VclPtr< OutputDevice > m_pLastOut
constexpr TypedWhichId< SwTOXMark > RES_TXTATR_TOXMARK(47)
constexpr TypedWhichId< SwDrawFrameFormat > RES_DRAWFRMFMT(157)
double getLength(const B2DPolygon &rCandidate)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_INPUTFIELD(55)
constexpr sal_uInt16 RES_CHRATR_END(46)
#define CH_TXT_ATR_FIELDEND
constexpr TypedWhichId< SwFlyFrameFormat > RES_FLYFRMFMT(154)
const SwAttrSet & GetSwAttrSet() const
Does node has already its own auto-attributes? Access to SwAttrSet.
void PushAndChg(const SwTextAttr &rAttr, SwFont &rFnt)
const SwLineLayout * GetCurr() const
SwTextNode const * pLastNode
mainly for sanity checks
OutputDevice * get() const
static sal_Int32 GetNextAttrImpl(SwTextNode const *pTextNode, size_t nStartIndex, size_t nEndIndex, sal_Int32 nPosition)
bool IsSymbol(TextFrameIndex nPos)
SwTextNode *const pFirstNode
except break attributes, those are taken from the first node
constexpr TypedWhichId< SwFormatRefMark > RES_TXTATR_REFMARK(RES_TXTATR_WITHEND_BEGIN)
SwViewShell * m_pViewShell
void SetProportion(const sal_uInt8 nNewPropr)
short m_nChgCnt
count currently open hints, redlines, ext-input
#define CH_TXT_ATR_FIELDSEP
SwViewShell * GetCurrShell() const
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 constexpr size_type npos
const sal_Int32 COMPLETE_STRING
SwRootFrame * getRootFrame()
static void InsertCharAttrs(SfxPoolItem const **pAttrs, SfxItemSet const &rItems)
constexpr TypedWhichId< SvXMLAttrContainerItem > RES_TXTATR_UNKNOWN_CONTAINER(54)
const SfxPoolItem * GetCurItem() const
SwTextNode * GetTextNode()
Inline methods from Node.hxx.
bool IsSymbolAt(TextFrameIndex) const
const SwFormatFlyCnt & GetFlyCnt() const
Base class of the Writer document model elements.