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()) &&
263 const auto nHintsCount = pHints->Count();
272 ((pTextAttr = pHints->GetSortedByEnd(
m_nEndIndex))->GetAnyEnd() <= nNewPos))
276 if (pTextAttr->GetStart() <= nOldPos)
Rst( pTextAttr );
283 (pHints->GetSortedByEnd(
m_nEndIndex)->GetAnyEnd() <= nNewPos))
292 ((pTextAttr = pHints->Get(
m_nStartIndex))->GetStart() <= nNewPos))
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());
404 sal_Int32
const nOldPos(nPos);
406 if (nPos <= newPos.second)
412 SeekFwd(nOldPos, newPos.second);
415 while (nPos < newPos.second);
440 auto const nWhich(pItem->Which());
455 SwTextNode const& rStartNode, sal_Int32
const nStartRedline,
457 size_t & rStartIndex,
size_t & rEndIndex,
458 bool const isTheAnswerYes)
460 size_t nStartIndex(rStartIndex);
461 size_t nEndIndex(rEndIndex);
463 if (!pRLEnd->nNode.GetNode().IsTextNode()
464 || pRLEnd->nContent == pRLEnd->nNode.GetNode().GetTextNode()->Len())
470 std::vector<SwTextAttr*> activeCharFmts;
474 if (&rStartNode != &pRLEnd->nNode.GetNode())
481 sal_Int32
const nRedlineEnd(&rStartNode == &pRLEnd->nNode.GetNode()
484 for ( ; nEndIndex < pStartHints->Count(); ++nEndIndex)
486 SwTextAttr *
const pAttr(pStartHints->GetSortedByEnd(nEndIndex));
491 if (nRedlineEnd < *pAttr->
End())
495 if (nStartRedline <= pAttr->GetStart())
499 if (pAttr->IsFormatIgnoreEnd())
503 switch (pAttr->Which())
515 if (!isTheAnswerYes)
return false;
525 activeCharFmts.push_back(pAttr);
532 ? static_cast<SfxItemSet const&>(pAttr->GetCharFormat().GetCharFormat()->GetAttrSet())
533 : *pAttr->GetAutoFormat().GetStyleHandle());
540 default: assert(
false);
543 assert(nEndIndex == pStartHints->Count() ||
544 pRLEnd->nContent.GetIndex() < pStartHints->GetSortedByEnd(nEndIndex)->GetAnyEnd());
547 if (&rStartNode != &pRLEnd->nNode.GetNode())
559 if (&rStartNode != &pRLEnd->nNode.GetNode())
562 pRLEnd->nNode.GetNode().GetTextNode()->GetSwAttrSet());
565 if (
SwpHints *
const pEndHints = pRLEnd->nNode.GetNode().GetTextNode()->GetpSwpHints())
569 sal_Int32
const nRedlineStart(&rStartNode == &pRLEnd->nNode.GetNode()
573 for ( ; nStartIndex < pEndHints->Count(); ++nStartIndex)
575 SwTextAttr *
const pAttr(pEndHints->Get(nStartIndex));
580 if (pRLEnd->nContent.GetIndex() < pAttr->GetStart())
586 if (pAttr->IsFormatIgnoreStart())
590 assert(nRedlineStart <= pAttr->GetStart());
591 if (*pAttr->End() <= pRLEnd->nContent.GetIndex())
595 switch (pAttr->Which())
606 if (!isTheAnswerYes)
return false;
615 auto iter = std::find_if(activeCharFmts.begin(), activeCharFmts.end(),
616 [&pAttr](
const SwTextAttr* pCharFmt) {
return *pCharFmt == *pAttr; });
617 if (iter != activeCharFmts.end())
618 activeCharFmts.erase(iter);
619 else if (!isTheAnswerYes)
623 ? static_cast<SfxItemSet const&>(pAttr->GetCharFormat().GetCharFormat()->GetAttrSet())
624 : *pAttr->GetAutoFormat().GetStyleHandle());
632 default: assert(
false);
635 if (&rStartNode != &pRLEnd->nNode.GetNode())
639 for (nEndIndex = 0; nEndIndex < pEndHints->Count(); ++nEndIndex)
641 SwTextAttr *
const pAttr(pEndHints->GetSortedByEnd(nEndIndex));
644 if (pRLEnd->nContent.GetIndex() < *pAttr->End())
653 if (!activeCharFmts.empty())
655 if (!isTheAnswerYes)
return false;
661 if (activeCharAttrsStart[
i] != activeCharAttrsEnd[
i])
663 if (!isTheAnswerYes)
return false;
666 rStartIndex = nStartIndex;
667 rEndIndex = nEndIndex;
672 size_t const nStartIndex,
size_t const nEndIndex,
673 sal_Int32
const nPosition)
677 sal_Int32 nNext = pTextNode->
Len();
681 for (
size_t i = nStartIndex;
i < pHints->Count(); ++
i)
684 if (!pAttr->IsFormatIgnoreStart())
691 for (
size_t i = nEndIndex;
i < pHints->Count(); ++
i)
693 SwTextAttr *
const pAttr(pHints->GetSortedByEnd(
i));
694 if (!pAttr->IsFormatIgnoreEnd())
696 sal_Int32
const nNextEnd = pAttr->
GetAnyEnd();
703 const sal_Int32 l =
std::min(nNext, pTextNode->
Len());
704 sal_Int32
p = nPosition;
726 nNext = (nPosition < p) ? p : p + 1;
741 sal_Int32 nNext =
GetNextAttrImpl(pTextNode, nStartIndex, nEndIndex, nPosition);
744 std::pair<sal_Int32, std::pair<SwRangeRedline const*, size_t>>
const redline(
745 m_pRedline->GetNextRedln(nNext, pTextNode, nActRedline));
746 if (redline.second.first)
750 || !redline.second.first->End()->nNode.GetNode().IsTextNode());
752 nStartIndex, nEndIndex,
m_nPosition == redline.first))
754 nActRedline += redline.second.second;
755 if (&redline.second.first->End()->nNode.GetNode() != pTextNode)
757 pTextNode = redline.second.first->End()->nNode.GetNode().
GetTextNode();
758 nPosition = redline.second.first->End()->nContent.
GetIndex();
762 nPosition = redline.second.first->End()->nContent.GetIndex();
796 sal_Int32 m_nNoLineBreak;
808 if (static_cast<tools::Long>(m_rMin) < nNew)
811 void NewWord() { m_nWordAdd = m_nWordWidth = 0; }
817 sal_Int32 nIdx, sal_Int32 nEnd )
822 sal_Int32 nStop = nIdx;
826 bool bClear =
CH_BLANK == rText[ nStop ];
829 WordType::DICTIONARY_WORD, true ) );
830 nStop = aBndry.endPos;
831 if (nIdx <= aBndry.startPos && nIdx && nIdx - 1 != rArg.m_nNoLineBreak)
838 SwDrawTextInfo aDrawInf(rArg.m_pSh, *rArg.m_pOut, rText, nIdx, nStop - nIdx);
840 rArg.m_nRowWidth += nCurrentWidth;
845 rArg.m_nWordWidth += nCurrentWidth;
846 if (static_cast<tools::Long>(rArg.m_rAbsMin) < rArg.m_nWordWidth)
847 rArg.m_rAbsMin = rArg.m_nWordWidth;
848 rArg.Minimum(rArg.m_nWordWidth + rArg.m_nWordAdd);
859 SwAttrIter aIter( *const_cast<SwTextNode*>(
this), aScriptInfo );
866 class SwMinMaxNodeArgs
877 if (nNew > m_nMinWidth)
888 if ((RndStdIds::FLY_AT_PARA != rFormatA.
GetAnchorId()) &&
889 (RndStdIds::FLY_AT_CHAR != rFormatA.
GetAnchorId()))
895 OSL_ENSURE(pPos,
"Unexpected NULL arguments");
902 if( !bIsDrawFrameFormat )
908 SwTableNode* pTableNd = rNodes[nStt+1]->GetTableNode();
911 SwNode *pNd2 = rNodes[nStt];
933 if( bIsDrawFrameFormat )
968 case text::HoriOrientation::RIGHT:
972 rIn.m_nRightRest -= rIn.m_nRightDiff;
973 rIn.m_nRightDiff = nDiff;
977 if (rIn.m_nRightRest > 0)
978 rIn.m_nRightRest = 0;
980 rIn.m_nRightRest -= nMin;
983 case text::HoriOrientation::LEFT:
987 rIn.m_nLeftRest -= rIn.m_nLeftDiff;
988 rIn.m_nLeftDiff = nDiff;
990 if (text::RelOrientation::FRAME != rOrient.
GetRelationOrient() && rIn.m_nLeftRest < 0)
992 rIn.m_nLeftRest -= nMin;
997 rIn.m_nMaxWidth += nMax;
1003 #define FLYINCNT_MIN_WIDTH 284
1031 nLROffset = nFLOffs;
1033 SwMinMaxNodeArgs aNodeArgs;
1034 aNodeArgs.m_nMinWidth = 0;
1035 aNodeArgs.m_nMaxWidth = 0;
1036 aNodeArgs.m_nLeftRest = nLROffset;
1037 aNodeArgs.m_nRightRest = rSpace.
GetRight();
1038 aNodeArgs.m_nLeftDiff = 0;
1039 aNodeArgs.m_nRightDiff = 0;
1045 aNodeArgs.m_nIndex = nIndex;
1050 if (aNodeArgs.m_nLeftRest < 0)
1051 aNodeArgs.Minimum(nLROffset - aNodeArgs.m_nLeftRest);
1052 aNodeArgs.m_nLeftRest -= aNodeArgs.m_nLeftDiff;
1053 if (aNodeArgs.m_nLeftRest < 0)
1054 aNodeArgs.m_nMaxWidth -= aNodeArgs.m_nLeftRest;
1056 if (aNodeArgs.m_nRightRest < 0)
1057 aNodeArgs.Minimum(rSpace.
GetRight() - aNodeArgs.m_nRightRest);
1058 aNodeArgs.m_nRightRest -= aNodeArgs.m_nRightDiff;
1059 if (aNodeArgs.m_nRightRest < 0)
1060 aNodeArgs.m_nMaxWidth -= aNodeArgs.m_nRightRest;
1063 SwAttrIter aIter( *const_cast<SwTextNode*>(
this), aScriptInfo );
1069 SwMinMaxArgs aArg( pOut, pSh, rMin, rAbsMin );
1070 while( nIdx < nLen )
1074 if( nNextChg > nStop )
1079 while( nStop < nLen && nStop < nNextChg &&
1095 || (
nullptr == ( pHint = aIter.
GetAttr( nStop ) ) ) )
1108 if (static_cast<tools::Long>(rMax) < aArg.m_nRowWidth)
1109 rMax = aArg.m_nRowWidth;
1110 aArg.m_nRowWidth = 0;
1127 OUString sTmp( cChar );
1129 *pOut, sTmp, 0, 1, 0,
false );
1131 aArg.m_nWordWidth += nCurrentWidth;
1132 aArg.m_nRowWidth += nCurrentWidth;
1133 if (static_cast<tools::Long>(rAbsMin) < aArg.m_nWordWidth)
1134 rAbsMin = aArg.m_nWordWidth;
1135 aArg.Minimum(aArg.m_nWordWidth + aArg.m_nWordAdd);
1136 aArg.m_nNoLineBreak = sal_Int32(nIdx++);
1148 switch( pHint->
Which() )
1174 rMax = std::max(rMax,
sal_uLong(USHRT_MAX));
1179 nCurrentWidth += rLR.
GetLeft();
1181 aArg.m_nWordAdd = nOldWidth + nOldAdd;
1182 aArg.m_nWordWidth = nCurrentWidth;
1183 aArg.m_nRowWidth += nCurrentWidth;
1184 if (static_cast<tools::Long>(rAbsMin) < aArg.m_nWordWidth)
1185 rAbsMin = aArg.m_nWordWidth;
1186 aArg.Minimum(aArg.m_nWordWidth + aArg.m_nWordAdd);
1193 aText.getLength() ) )
1202 const OUString aText = pField->
ExpandField(
true,
nullptr);
1204 aText.getLength() ) )
1209 aArg.m_nWordWidth = nOldWidth;
1210 aArg.m_nWordAdd = nOldAdd;
1227 if (static_cast<tools::Long>(rMax) < aArg.m_nRowWidth)
1228 rMax = aArg.m_nRowWidth;
1232 rAbsMin += nLROffset;
1236 if (static_cast<tools::Long>(rMin) < aNodeArgs.m_nMinWidth)
1237 rMin = aNodeArgs.m_nMinWidth;
1238 if (static_cast<tools::Long>(rAbsMin) < aNodeArgs.m_nMinWidth)
1239 rAbsMin = aNodeArgs.m_nMinWidth;
1240 rMax += aNodeArgs.m_nMaxWidth;
1280 WordType::DICTIONARY_WORD,
true );
1282 if (sal_Int32(nStart) == aBound.startPos)
1316 while( nIdx < nEnd )
1328 while( nStop < nEnd && nStop < nNextChg )
1330 cChar =
GetText()[sal_Int32(nStop)];
1345 (
nullptr == (pHint = aIter.
GetAttr(nStop)))
1367 nWidth = std::max( nWidth, nProWidth );
1371 else if ( cChar ==
CH_TAB )
1382 OUString sTmp( cChar );
1389 switch( pHint->
Which() )
1394 SwDrawTextInfo aDrawInf(pSh, *pOut, aText, 0, aText.getLength());
1405 SwDrawTextInfo aDrawInf(pSh, *pOut, aText, 0, aText.getLength());
1429 nWidth = std::max( nWidth, nProWidth );
1438 return o3tl::narrowing<sal_uInt16>( nWidth ?
1448 return o3tl::narrowing<sal_uInt16>( nWidth ? ((100 * aIter.
GetFnt()->
GetTextSize_( aDrawInf ).
Height()) / nWidth ) : 0 );
1460 if ( cCh!=
'\t' && cCh!=
' ' )
1477 if (!pFrame->IsFollow() &&
1478 pFrame->GetTextNodeForFirstText() ==
this)
1482 pFrame->GetCharRect( aRect, aPos );
1483 nRet = pFrame->IsRightToLeft() ?
SwAttrHandler & GetAttrHandler()
SwNodeOffset min(const SwNodeOffset &a, const SwNodeOffset &b)
virtual void Height(const SwTwips nNew, const bool bText=true) override
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
SwNodeOffset EndOfSectionIndex() 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)
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)
static void lcl_MinMaxNode(SwFrameFormat *pNd, SwMinMaxNodeArgs &rIn)
sal_Int32 GetAnyEnd() const
end (if available), else start
#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.
constexpr TypedWhichId< SwFlyFrameFormat > RES_FLYFRMFMT(156)
bool IsSymbolAt(sal_Int32 nBegin) const
in ndcopy.cxx
static OutputDevice * GetDefaultDevice()
constexpr tools::Long Width() const
sal_Int32 m_nPosition
current iteration index in text node
#define CH_TXTATR_BREAKWORD
const SfxPoolItem * NextItem()
SwTableNode * GetTableNode()
constexpr TypedWhichId< SwDrawFrameFormat > RES_DRAWFRMFMT(159)
SwAttrIter(SwTextNode const *pTextNode)
constexpr TypedWhichId< SwFormatFootnote > RES_TXTATR_FTN(59)
void CtorInitAttrIter(SwTextNode &rTextNode, SwScriptInfo &rScrInf, SwTextFrame const *pFrame=nullptr)
o3tl::enumarray< SwFontScript, sal_uInt16 > m_aFontIdx
A wrapper around SfxPoolItem to store the start position of (usually) a text portion, with an optional end.
#define CH_TXT_ATR_INPUTFIELDSTART
Used by Attribute Iterators to organize attributes on stacks to find the valid attribute in each cate...
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
SwNodeOffset GetIndex() 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
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
const SwStartNode * StartOfSectionNode() const
constexpr TypedWhichId< SwFormatFlyCnt > RES_TXTATR_FLYCNT(58)
void GetMinMaxSize(SwNodeOffset nIndex, sal_uLong &rMin, sal_uLong &rMax, sal_uLong &rAbs) const
Is in itratr.
TextFrameIndex MapModelToView(MergedPara const &, SwTextNode const *pNode, sal_Int32 nIndex)
SwNodeOffset GetIndex() const
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)
#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.
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
constexpr TypedWhichId< SwFormatField > RES_TXTATR_ANNOTATION(60)
const css::lang::Locale & GetLocale(const LanguageType aLang)
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
constexpr TypedWhichId< SwFormatContentControl > RES_TXTATR_CONTENTCONTROL(56)
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)
constexpr tools::Long Height() const
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
SwHTMLTableLayout * GetHTMLTableLayout()
SwAttrHandler m_aAttrHandler
::OutputDevice const * GetOutDev() const
void SetActual(SwFontScript nNew)
const SwPosition * End() const
void Chg(SwTextAttr const *pHt)
VclPtr< OutputDevice > m_pLastOut
constexpr TypedWhichId< SwTOXMark > RES_TXTATR_TOXMARK(47)
double getLength(const B2DPolygon &rCandidate)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_INPUTFIELD(55)
constexpr sal_uInt16 RES_CHRATR_END(46)
#define CH_TXT_ATR_FIELDEND
const SwAttrSet & GetSwAttrSet() const
Does node has already its own auto-attributes? Access to SwAttrSet.
void PushAndChg(const SwTextAttr &rAttr, SwFont &rFnt)
constexpr sal_Int32 COMPLETE_STRING
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
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.