LibreOffice Module sw (master) 1
txtfld.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <hintids.hxx>
21#include <fmtfld.hxx>
22#include <txtfld.hxx>
23#include <charfmt.hxx>
24#include <fmtautofmt.hxx>
25
26#include <viewsh.hxx>
27#include <doc.hxx>
28#include <rootfrm.hxx>
29#include <pagefrm.hxx>
30#include <ndtxt.hxx>
31#include <fldbas.hxx>
32#include <viewopt.hxx>
33#include <flyfrm.hxx>
34#include <viewimp.hxx>
35#include <swfont.hxx>
36#include <swmodule.hxx>
37#include "porfld.hxx"
38#include "porftn.hxx"
39#include "porref.hxx"
40#include "portox.hxx"
41#include "porfly.hxx"
42#include "itrform2.hxx"
43#include <chpfld.hxx>
44#include <dbfld.hxx>
45#include <expfld.hxx>
46#include <docufld.hxx>
47#include <pagedesc.hxx>
48#include <fmtmeta.hxx>
49#include <reffld.hxx>
50#include <flddat.hxx>
53#include <redline.hxx>
54#include <sfx2/docfile.hxx>
55#include <svl/grabbagitem.hxx>
56#include <svl/itemiter.hxx>
57#include <svl/whiter.hxx>
58#include <editeng/colritem.hxx>
59#include <editeng/udlnitem.hxx>
61
62static bool lcl_IsInBody( SwFrame const *pFrame )
63{
64 if ( pFrame->IsInDocBody() )
65 return true;
66 else
67 {
68 const SwFrame *pTmp = pFrame;
69 const SwFlyFrame *pFly;
70 while ( nullptr != (pFly = pTmp->FindFlyFrame()) )
71 pTmp = pFly->GetAnchorFrame();
72 return pTmp->IsInDocBody();
73 }
74}
75
77 const SwTextAttr *pHint ) const
78{
79 SwExpandPortion *pRet = nullptr;
80 SwFrame *pFrame = m_pFrame;
81 SwField *pField = const_cast<SwField*>(pHint->GetFormatField().GetField());
82 const bool bName = rInf.GetOpt().IsFieldName();
83
84 SwCharFormat* pChFormat = nullptr;
85 bool bNewFlyPor = false;
86 sal_uInt16 subType = 0;
87
88 // set language
89 const_cast<SwTextFormatter*>(this)->SeekAndChg( rInf );
90 if (pField->GetLanguage() != GetFnt()->GetLanguage())
91 {
92 pField->SetLanguage( GetFnt()->GetLanguage() );
93 // let the visual note know about its new language
94 if (pField->GetTyp()->Which()==SwFieldIds::Postit)
95 const_cast<SwFormatField*> (&pHint->GetFormatField())->Broadcast( SwFormatFieldHint( &pHint->GetFormatField(), SwFormatFieldHintWhich::LANGUAGE ) );
96 }
97
98 SwViewShell *pSh = rInf.GetVsh();
99 SwDoc *const pDoc( pSh ? pSh->GetDoc() : nullptr );
100 bool const bInClipboard( pDoc == nullptr || pDoc->IsClipBoard() );
101 bool bPlaceHolder = false;
102
103 switch( pField->GetTyp()->Which() )
104 {
107 pRet = new SwPostItsPortion( SwFieldIds::Script == pField->GetTyp()->Which() );
108 break;
109
111 {
112 if( bName )
113 pRet = new SwFieldPortion( pField->GetFieldName() );
114 else
115 pRet = new SwCombinedPortion( pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
116 }
117 break;
118
120 {
121 OUString const aStr( bName
122 ? pField->GetFieldName()
123 : pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
124 pRet = new SwHiddenPortion(aStr);
125 }
126 break;
127
129 if( !bName && pSh && !pSh->Imp()->IsUpdateExpFields() )
130 {
131 static_cast<SwChapterField*>(pField)->ChangeExpansion(*pFrame,
132 &static_txtattr_cast<SwTextField const*>(pHint)->GetTextNode());
133 }
134 {
135 OUString const aStr( bName
136 ? pField->GetFieldName()
137 : pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
138 pRet = new SwFieldPortion( aStr );
139 }
140 break;
141
143 if( !bName && pSh && !pSh->Imp()->IsUpdateExpFields() )
144 {
145 static_cast<SwDocStatField*>(pField)->ChangeExpansion( pFrame );
146 }
147 {
148 OUString const aStr( bName
149 ? pField->GetFieldName()
150 : pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
151 pRet = new SwFieldPortion( aStr );
152 }
153 static_cast<SwFieldPortion*>(pRet)->m_nAttrFieldType= ATTR_PAGECOUNTFLD;
154 break;
155
157 {
158 if( !bName && pSh && pSh->GetLayout() && !pSh->Imp()->IsUpdateExpFields() )
159 {
160 SwPageNumberFieldType *pPageNr = static_cast<SwPageNumberFieldType *>(pField->GetTyp());
161
162 const SwRootFrame* pTmpRootFrame = pSh->GetLayout();
163 const bool bVirt = pTmpRootFrame->IsVirtPageNum();
164
165 sal_uInt16 nVirtNum = pFrame->GetVirtPageNum();
166 sal_uInt16 nNumPages = pTmpRootFrame->GetPageNum();
167 SvxNumType nNumFormat = SvxNumType(-1);
168 if(SVX_NUM_PAGEDESC == pField->GetFormat())
169 nNumFormat = pFrame->FindPageFrame()->GetPageDesc()->GetNumType().GetNumberingType();
170 static_cast<SwPageNumberField*>(pField)
171 ->ChangeExpansion(nVirtNum, nNumPages);
172 pPageNr->ChangeExpansion(pDoc,
173 bVirt, nNumFormat != SvxNumType(-1) ? &nNumFormat : nullptr);
174 }
175 {
176 OUString const aStr( bName
177 ? pField->GetFieldName()
178 : pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
179 pRet = new SwFieldPortion( aStr );
180 }
181 static_cast<SwFieldPortion*>(pRet)->m_nAttrFieldType= ATTR_PAGENUMBERFLD;
182 break;
183 }
185 {
186 if( !bName && pSh && !pSh->Imp()->IsUpdateExpFields() )
187 {
188 SwGetExpField* pExpField = static_cast<SwGetExpField*>(pField);
189 if( !::lcl_IsInBody( pFrame ) )
190 {
191 pExpField->ChgBodyTextFlag( false );
192 pExpField->ChangeExpansion(*pFrame,
193 *static_txtattr_cast<SwTextField const*>(pHint));
194 }
195 else if( !pExpField->IsInBodyText() )
196 {
197 // Was something else previously, thus: expand first, then convert it!
198 pExpField->ChangeExpansion(*pFrame,
199 *static_txtattr_cast<SwTextField const*>(pHint));
200 pExpField->ChgBodyTextFlag( true );
201 }
202 }
203 {
204 OUString const aStr( bName
205 ? pField->GetFieldName()
206 : pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
207 pRet = new SwFieldPortion( aStr );
208 }
209 break;
210 }
212 {
213 if( !bName )
214 {
215 SwDBField* pDBField = static_cast<SwDBField*>(pField);
216 pDBField->ChgBodyTextFlag( ::lcl_IsInBody( pFrame ) );
217 }
218 {
219 OUString const aStr( bName
220 ? pField->GetFieldName()
221 : pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
222 pRet = new SwFieldPortion(aStr);
223 }
224 break;
225 }
227 if( !bName && pSh && !pSh->Imp()->IsUpdateExpFields() )
228 {
229 static_cast<SwRefPageGetField*>(pField)->ChangeExpansion(*pFrame,
230 static_txtattr_cast<SwTextField const*>(pHint));
231 }
232 {
233 OUString const aStr( bName
234 ? pField->GetFieldName()
235 : pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
236 pRet = new SwFieldPortion(aStr);
237 }
238 break;
239
241 if( !bName )
242 pChFormat = static_cast<SwJumpEditField*>(pField)->GetCharFormat();
243 bNewFlyPor = true;
244 bPlaceHolder = true;
245 break;
247 subType = static_cast<SwGetRefField*>(pField)->GetSubType();
248 {
249 OUString const str( bName
250 ? pField->GetFieldName()
251 : pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
252 pRet = new SwFieldPortion(str);
253 }
254 if( subType == REF_BOOKMARK )
255 static_cast<SwFieldPortion*>(pRet)->m_nAttrFieldType = ATTR_BOOKMARKFLD;
256 else if( subType == REF_SETREFATTR )
257 static_cast<SwFieldPortion*>(pRet)->m_nAttrFieldType = ATTR_SETREFATTRFLD;
258 break;
260 subType = static_cast<SwDateTimeField*>(pField)->GetSubType();
261 {
262 OUString const str( bName
263 ? pField->GetFieldName()
264 : pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
265 pRet = new SwFieldPortion(str);
266 }
267 if( subType & DATEFLD )
268 static_cast<SwFieldPortion*>(pRet)->m_nAttrFieldType= ATTR_DATEFLD;
269 else if( subType & TIMEFLD )
270 static_cast<SwFieldPortion*>(pRet)->m_nAttrFieldType = ATTR_TIMEFLD;
271 break;
272 default:
273 {
274 OUString const aStr( bName
275 ? pField->GetFieldName()
276 : pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
277 pRet = new SwFieldPortion(aStr);
278 }
279 }
280
281 if( bNewFlyPor )
282 {
283 std::unique_ptr<SwFont> pTmpFnt;
284 if( !bName )
285 {
286 pTmpFnt.reset(new SwFont( *m_pFont ));
287 pTmpFnt->SetDiffFnt(&pChFormat->GetAttrSet(), &m_pFrame->GetDoc().getIDocumentSettingAccess());
288 }
289 OUString const aStr( bName
290 ? pField->GetFieldName()
291 : pField->ExpandField(bInClipboard, pFrame->getRootFrame()) );
292 pRet = new SwFieldPortion(aStr, std::move(pTmpFnt), bPlaceHolder);
293 }
294
295 return pRet;
296}
297
298static SwFieldPortion * lcl_NewMetaPortion(SwTextAttr & rHint, const bool bPrefix)
299{
300 ::sw::Meta *const pMeta(
301 static_cast<SwFormatMeta &>(rHint.GetAttr()).GetMeta() );
302 OUString fix;
303 ::sw::MetaField *const pField( dynamic_cast< ::sw::MetaField * >(pMeta) );
304 OSL_ENSURE(pField, "lcl_NewMetaPortion: no meta field?");
305 if (pField)
306 {
307 OUString color;
308 pField->GetPrefixAndSuffix(bPrefix ? &fix : nullptr, bPrefix ? nullptr : &fix, &color);
309 }
310 return new SwFieldPortion( fix );
311}
312
322{
323 const TextFrameIndex nIdx(rInfo.GetIdx());
324
325 // sw_redlinehide: because there is a dummy character at the start of these
326 // hints, it's impossible to have ends of hints from different nodes at the
327 // same view position, so it's sufficient to check the hints of the current
328 // node. However, m_pByEndIter exists for the whole text frame, so
329 // it's necessary to iterate all hints for that purpose...
330 if (!m_pByEndIter)
331 {
333 }
334 SwTextNode const* pNode(nullptr);
335 for (SwTextAttr const* pHint = m_pByEndIter->NextAttr(pNode); pHint;
336 pHint = m_pByEndIter->NextAttr(pNode))
337 {
338 SwTextAttr & rHint(const_cast<SwTextAttr&>(*pHint));
339 TextFrameIndex const nEnd(
340 rInfo.GetTextFrame()->MapModelToView(pNode, rHint.GetAnyEnd()));
341 if (nEnd > nIdx)
342 {
343 m_pByEndIter->PrevAttr();
344 break;
345 }
346 if (nEnd == nIdx)
347 {
348 if (RES_TXTATR_METAFIELD == rHint.Which())
349 {
350 SwFieldPortion *const pPortion(
351 lcl_NewMetaPortion(rHint, false));
352 pPortion->SetNoLength(); // no CH_TXTATR at hint end!
353 return pPortion;
354 }
355 }
356 }
357 return nullptr;
358}
359
361{
362 SwTextAttr *pHint = GetAttr( rInf.GetIdx() );
363 SwLinePortion *pRet = nullptr;
364 if( !pHint )
365 {
366 pRet = new SwTextPortion;
367 pRet->SetLen(TextFrameIndex(1));
368 rInf.SetLen(TextFrameIndex(1));
369 return pRet;
370 }
371
372 switch( pHint->Which() )
373 {
374 case RES_TXTATR_FLYCNT :
375 {
376 pRet = NewFlyCntPortion( rInf, pHint );
377 break;
378 }
379 case RES_TXTATR_FTN :
380 {
381 pRet = NewFootnotePortion( rInf, pHint );
382 break;
383 }
384 case RES_TXTATR_FIELD :
386 {
387 pRet = NewFieldPortion( rInf, pHint );
388 break;
389 }
390 case RES_TXTATR_REFMARK :
391 {
392 pRet = new SwIsoRefPortion;
393 break;
394 }
395 case RES_TXTATR_TOXMARK :
396 {
397 pRet = new SwIsoToxPortion;
398 break;
399 }
401 {
402 pRet = lcl_NewMetaPortion( *pHint, true );
403 break;
404 }
405 default: ;
406 }
407 if( !pRet )
408 {
409 auto pFieldPortion = new SwFieldPortion( "" );
410 if (pHint->Which() == RES_TXTATR_CONTENTCONTROL)
411 {
412 pFieldPortion->SetContentControl(true);
413 }
414 pRet = pFieldPortion;
415 rInf.SetLen(TextFrameIndex(1));
416 }
417 return pRet;
418}
419
426 const IDocumentSettingAccess* pIDSA,
427 const SwAttrSet* pFormat)
428{
430 return;
431
433 std::shared_ptr<SfxItemSet> pSet(rListAutoFormat.GetStyleHandle());
434
435 // Check each item and in case it should be ignored, then clear it.
436 if (!pSet)
437 return;
438
439 std::unique_ptr<SfxItemSet> const pCleanedSet = pSet->Clone();
440
441 if (pCleanedSet->HasItem(RES_TXTATR_CHARFMT))
442 {
443 // Insert attributes of referenced char format into current set
444 const SwFormatCharFormat& rCharFormat = pCleanedSet->Get(RES_TXTATR_CHARFMT);
445 const SwAttrSet& rStyleAttrs = static_cast<const SwCharFormat *>(rCharFormat.GetRegisteredIn())->GetAttrSet();
446 SfxWhichIter aIter(rStyleAttrs);
447 sal_uInt16 nWhich = aIter.FirstWhich();
448 while (nWhich)
449 {
450 if (!SwTextNode::IsIgnoredCharFormatForNumbering(nWhich, /*bIsCharStyle=*/true)
451 && !pCleanedSet->HasItem(nWhich)
452 && !(pFormat && pFormat->HasItem(nWhich)) )
453 {
454 // Copy from parent sets only allowed items which will not overwrite
455 // values explicitly defined in current set (pCleanedSet) or in pFormat
456 if (const SfxPoolItem* pItem = rStyleAttrs.GetItem(nWhich, true))
457 pCleanedSet->Put(*pItem);
458 }
459 nWhich = aIter.NextWhich();
460 }
461
462 // It is not required here anymore, all referenced items are inserted
463 pCleanedSet->ClearItem(RES_TXTATR_CHARFMT);
464 };
465
466 SfxItemIter aIter(*pSet);
467 const SfxPoolItem* pItem = aIter.GetCurItem();
468 while (pItem)
469 {
471 pCleanedSet->ClearItem(pItem->Which());
472 else if (pFormat && pFormat->HasItem(pItem->Which()))
473 pCleanedSet->ClearItem(pItem->Which());
474 else if (pItem->Which() == RES_CHRATR_BACKGROUND)
475 {
476 bool bShadingWasImported = false;
477 // If Shading was imported, it should not be converted to a Highlight,
478 // but remain as Shading which is ignored for numbering.
479 if (pCleanedSet->HasItem(RES_CHRATR_GRABBAG))
480 {
481 SfxGrabBagItem aGrabBag = pCleanedSet->Get(RES_CHRATR_GRABBAG, /*bSrchInParent=*/false);
482 std::map<OUString, css::uno::Any>& rMap = aGrabBag.GetGrabBag();
483 auto aIterator = rMap.find("CharShadingMarker");
484 if (aIterator != rMap.end())
485 aIterator->second >>= bShadingWasImported;
486 }
487
488 // If used, BACKGROUND is converted to HIGHLIGHT. So also ignore if a highlight already exists.
489 if (bShadingWasImported
490 || pCleanedSet->HasItem(RES_CHRATR_HIGHLIGHT)
491 || (pFormat && pFormat->HasItem(RES_CHRATR_HIGHLIGHT)))
492 {
493 pCleanedSet->ClearItem(pItem->Which());
494 }
495 }
496 pItem = aIter.NextItem();
497 };
498
499 // SetDiffFnt resets the background color (why?), so capture it and re-apply if it had a value,
500 // because an existing value should override anything inherited from the paragraph marker.
501 const std::optional<Color> oFontBackColor = pNumFnt->GetBackColor();
502 // The same is true for the highlight color.
503 const Color aHighlight = pNumFnt->GetHighlightColor();
504
505 pNumFnt->SetDiffFnt(pCleanedSet.get(), pIDSA);
506
507 if (oFontBackColor)
508 pNumFnt->SetBackColor(oFontBackColor);
509 if (aHighlight != COL_TRANSPARENT)
510 pNumFnt->SetHighlightColor(aHighlight);
511}
512
514 bool& bIsMoved )
515{
516 const SwDoc& rDoc = rTextNode.GetDoc();
517 SwRedlineTable::size_type nRedlPos = rDoc.getIDocumentRedlineAccess().GetRedlinePos( rTextNode, RedlineType::Any );
518
519 if( SwRedlineTable::npos != nRedlPos )
520 {
521 const SwNodeOffset nNdIdx = rTextNode.GetIndex();
523 for( ; nRedlPos < rTable.size() ; ++nRedlPos )
524 {
525 const SwRangeRedline* pTmp = rTable[ nRedlPos ];
526 SwNodeOffset nStart = pTmp->GetPoint()->GetNodeIndex(),
527 nEnd = pTmp->GetMark()->GetNodeIndex();
528 if( nStart > nEnd )
529 std::swap(nStart, nEnd);
530 if( RedlineType::Delete == pTmp->GetType() ||
531 RedlineType::Insert == pTmp->GetType() )
532 {
533 if( nStart <= nNdIdx && nEnd > nNdIdx )
534 {
535 bIsMoved = pTmp->IsMoved();
536 return pTmp;
537 }
538 }
539 if( nStart > nNdIdx )
540 break;
541 }
542 }
543 return nullptr;
544}
545
546static bool lcl_setRedlineAttr( SwTextFormatInfo &rInf, const SwTextNode& rTextNode, const std::unique_ptr<SwFont>& pNumFnt )
547{
548 if ( rInf.GetVsh()->GetLayout()->IsHideRedlines() )
549 return false;
550
551 bool bIsMoved;
552 const SwRangeRedline* pRedlineNum = lcl_GetRedlineAtNodeInsertionOrDeletion( rTextNode, bIsMoved );
553 if (!pRedlineNum)
554 return false;
555
556 // moved text: dark green with double underline or strikethrough
557 if ( bIsMoved )
558 {
559 pNumFnt->SetColor(COL_GREEN);
560 if ( RedlineType::Delete == pRedlineNum->GetType() )
561 pNumFnt->SetStrikeout(STRIKEOUT_DOUBLE);
562 else
563 pNumFnt->SetUnderline(LINESTYLE_DOUBLE);
564 return true;
565 }
566
567 SwAttrPool& rPool = rInf.GetVsh()->GetDoc()->GetAttrPool();
569
570 std::size_t aAuthor = (1 < pRedlineNum->GetStackCount())
571 ? pRedlineNum->GetAuthor( 1 )
572 : pRedlineNum->GetAuthor();
573
574 if ( RedlineType::Delete == pRedlineNum->GetType() )
575 SW_MOD()->GetDeletedAuthorAttr(aAuthor, aSet);
576 else
577 SW_MOD()->GetInsertAuthorAttr(aAuthor, aSet);
578
579 if (const SvxColorItem* pItem = aSet.GetItemIfSet(RES_CHRATR_COLOR))
580 pNumFnt->SetColor(pItem->GetValue());
581 if (const SvxUnderlineItem* pItem = aSet.GetItemIfSet(RES_CHRATR_UNDERLINE))
582 pNumFnt->SetUnderline(pItem->GetLineStyle());
583 if (const SvxCrossedOutItem* pItem = aSet.GetItemIfSet(RES_CHRATR_CROSSEDOUT))
584 pNumFnt->SetStrikeout( pItem->GetStrikeout() );
585
586 return true;
587}
588
590{
591 if( rInf.IsNumDone() || rInf.GetTextStart() != m_nStart
592 || rInf.GetTextStart() != rInf.GetIdx() )
593 return nullptr;
594
595 SwNumberPortion *pRet = nullptr;
596 // sw_redlinehide: at this point it's certain that pTextNd is the node with
597 // the numbering of the frame; only the actual number-vector (GetNumString)
598 // depends on the hide-mode in the layout so other calls don't need to care
599 const SwTextNode *const pTextNd = GetTextFrame()->GetTextNodeForParaProps();
600 const SwNumRule* pNumRule = pTextNd->GetNumRule();
601
602 // Has a "valid" number?
603 // sw_redlinehide: check that pParaPropsNode is the correct one
604 assert(pTextNd->IsNumbered(m_pFrame->getRootFrame()) == pTextNd->IsNumbered(nullptr));
605 if (pTextNd->IsNumbered(m_pFrame->getRootFrame()) && pTextNd->IsCountedInList())
606 {
607 int nLevel = pTextNd->GetActualListLevel();
608
609 if (nLevel < 0)
610 nLevel = 0;
611
612 if (nLevel >= MAXLEVEL)
613 nLevel = MAXLEVEL - 1;
614
615 const SwNumFormat &rNumFormat = pNumRule->Get( nLevel );
616 const bool bLeft = SvxAdjust::Left == rNumFormat.GetNumAdjust();
617 const bool bCenter = SvxAdjust::Center == rNumFormat.GetNumAdjust();
618 const bool bLabelAlignmentPosAndSpaceModeActive(
620 const sal_uInt16 nMinDist = bLabelAlignmentPosAndSpaceModeActive
621 ? 0 : rNumFormat.GetCharTextDistance();
622
623 if( SVX_NUM_BITMAP == rNumFormat.GetNumberingType() )
624 {
625 OUString referer;
626 if (auto const sh1 = rInf.GetVsh()) {
627 if (auto const doc = sh1->GetDoc()) {
628 auto const sh2 = doc->GetPersist();
629 if (sh2 != nullptr && sh2->HasName()) {
630 referer = sh2->GetMedium()->GetName();
631 }
632 }
633 }
634 pRet = new SwGrfNumPortion( pTextNd->GetLabelFollowedBy(),
635 rNumFormat.GetBrush(), referer,
636 rNumFormat.GetGraphicOrientation(),
637 rNumFormat.GetGraphicSize(),
638 bLeft, bCenter, nMinDist,
639 bLabelAlignmentPosAndSpaceModeActive );
640 tools::Long nTmpA = rInf.GetLast()->GetAscent();
641 tools::Long nTmpD = rInf.GetLast()->Height() - nTmpA;
642 if( !rInf.IsTest() )
643 static_cast<SwGrfNumPortion*>(pRet)->SetBase( nTmpA, nTmpD, nTmpA, nTmpD );
644 }
645 else
646 {
647 // The SwFont is created dynamically and passed in the ctor,
648 // as the CharFormat only returns an SV-Font.
649 // In the dtor of SwNumberPortion, the SwFont is deleted.
650 const SwAttrSet* pFormat = rNumFormat.GetCharFormat() ?
651 &rNumFormat.GetCharFormat()->GetAttrSet() :
652 nullptr;
653 const IDocumentSettingAccess* pIDSA = pTextNd->getIDocumentSettingAccess();
654
655 if( SVX_NUM_CHAR_SPECIAL == rNumFormat.GetNumberingType() )
656 {
657 const std::optional<vcl::Font> pFormatFnt = rNumFormat.GetBulletFont();
658
659 // Build a new bullet font basing on the current paragraph font:
660 std::unique_ptr<SwFont> pNumFnt(new SwFont( &rInf.GetCharAttr(), pIDSA ));
661
662 // #i53199#
664 {
665 // i18463:
666 // Underline style of paragraph font should not be considered
667 // Overline style of paragraph font should not be considered
668 // Weight style of paragraph font should not be considered
669 // Posture style of paragraph font should not be considered
670 pNumFnt->SetUnderline( LINESTYLE_NONE );
671 pNumFnt->SetOverline( LINESTYLE_NONE );
672 pNumFnt->SetItalic( ITALIC_NONE, SwFontScript::Latin );
673 pNumFnt->SetItalic( ITALIC_NONE, SwFontScript::CJK );
674 pNumFnt->SetItalic( ITALIC_NONE, SwFontScript::CTL );
675 pNumFnt->SetWeight( WEIGHT_NORMAL, SwFontScript::Latin );
676 pNumFnt->SetWeight( WEIGHT_NORMAL, SwFontScript::CJK );
677 pNumFnt->SetWeight( WEIGHT_NORMAL, SwFontScript::CTL );
678 }
679
680 // Apply the explicit attributes from the character style
681 // associated with the numbering to the new bullet font.
682 if( pFormat )
683 pNumFnt->SetDiffFnt( pFormat, pIDSA );
684
685 checkApplyParagraphMarkFormatToNumbering(pNumFnt.get(), rInf, pIDSA, pFormat);
686
687 if ( pFormatFnt )
688 {
689 const SwFontScript nAct = pNumFnt->GetActual();
690 pNumFnt->SetFamily( pFormatFnt->GetFamilyType(), nAct );
691 pNumFnt->SetName( pFormatFnt->GetFamilyName(), nAct );
692 pNumFnt->SetStyleName( pFormatFnt->GetStyleName(), nAct );
693 pNumFnt->SetCharSet( pFormatFnt->GetCharSet(), nAct );
694 pNumFnt->SetPitch( pFormatFnt->GetPitch(), nAct );
695 }
696
697 // we do not allow a vertical font
698 pNumFnt->SetVertical( pNumFnt->GetOrientation(),
699 m_pFrame->IsVertical() );
700
701 lcl_setRedlineAttr( rInf, *pTextNd, pNumFnt );
702
703 // --> OD 2008-01-23 #newlistelevelattrs#
704 if (rNumFormat.GetBulletChar())
705 {
706 pRet = new SwBulletPortion(rNumFormat.GetBulletChar(),
707 pTextNd->GetLabelFollowedBy(),
708 std::move(pNumFnt),
709 bLeft, bCenter, nMinDist,
710 bLabelAlignmentPosAndSpaceModeActive);
711 }
712 }
713 else
714 {
715 // Show Changes mode shows the actual numbering (SwListRedlineType::HIDDEN) and
716 // the original one (SwListRedlineType::ORIGTEXT) instead of the fake numbering
717 // (SwListRedlineType::SHOW, which counts removed and inserted numbered paragraphs
718 // in a single list)
719 bool bHasHiddenNum = false;
720 OUString aText( pTextNd->GetNumString(true, MAXLEVEL, m_pFrame->getRootFrame(), SwListRedlineType::HIDDEN) );
721 const SwDoc& rDoc = pTextNd->GetDoc();
723 if ( rTable.size() && !rInf.GetVsh()->GetLayout()->IsHideRedlines() )
724 {
725 OUString aHiddenText( pTextNd->GetNumString(true, MAXLEVEL, m_pFrame->getRootFrame(), SwListRedlineType::ORIGTEXT) );
726
727 if ( !aText.isEmpty() || !aHiddenText.isEmpty() )
728 {
729 if (aText != aHiddenText && !aHiddenText.isEmpty())
730 {
731 bHasHiddenNum = true;
732 // show also original number after the actual one enclosed in [ and ],
733 // and replace tabulator with space to avoid messy indentation
734 // resulted by the longer numbering, e.g. "1.[2.]" instead of "1.".
735 aText = aText + "[" + aHiddenText + "]"
736 + pTextNd->GetLabelFollowedBy().replaceAll("\t", " ");
737 }
738 else if (!aText.isEmpty())
739 aText += pTextNd->GetLabelFollowedBy();
740 }
741 }
743 || !aText.isEmpty())
744 aText += pTextNd->GetLabelFollowedBy();
745
746 // Not just an optimization ...
747 // A number portion without text will be assigned a width of 0.
748 // The succeeding text portion will flow into the BreakCut in the BreakLine,
749 // although we have rInf.GetLast()->GetFlyPortion()!
750 if( !aText.isEmpty() )
751 {
752
753 // Build a new numbering font basing on the current paragraph font:
754 std::unique_ptr<SwFont> pNumFnt(new SwFont( &rInf.GetCharAttr(), pIDSA ));
755
756 const SwTextNode& rTextNode = *rInf.GetTextFrame()->GetTextNodeForParaProps();
757 if (const SwpHints* pHints = rTextNode.GetpSwpHints())
758 {
759 // Also look for an empty character hint that sits at the paragraph end:
760 for (size_t i = 0; i < pHints->Count(); ++i)
761 {
762 const SwTextAttr* pHint = pHints->GetSortedByEnd(i);
763 if (pHint->Which() == RES_TXTATR_AUTOFMT && pHint->GetEnd()
764 && pHint->GetStart() == *pHint->GetEnd()
765 && pHint->GetStart() == rTextNode.GetText().getLength())
766 {
767 std::shared_ptr<SfxItemSet> pSet
768 = pHint->GetAutoFormat().GetStyleHandle();
769 if (pSet)
770 {
771 pNumFnt->SetDiffFnt(pSet.get(), pIDSA);
772 break;
773 }
774 }
775 }
776 }
777
778 // #i53199#
780 {
781 // i18463:
782 // Underline style of paragraph font should not be considered
783 pNumFnt->SetUnderline( LINESTYLE_NONE );
784 // Overline style of paragraph font should not be considered
785 pNumFnt->SetOverline( LINESTYLE_NONE );
786 }
787
788 // Apply the explicit attributes from the character style
789 // associated with the numbering to the new bullet font.
790 if( pFormat )
791 pNumFnt->SetDiffFnt( pFormat, pIDSA );
792
793 checkApplyParagraphMarkFormatToNumbering(pNumFnt.get(), rInf, pIDSA, pFormat);
794
795 if ( !lcl_setRedlineAttr( rInf, *pTextNd, pNumFnt ) && bHasHiddenNum )
796 pNumFnt->SetColor(NON_PRINTING_CHARACTER_COLOR);
797
798 // we do not allow a vertical font
799 pNumFnt->SetVertical( pNumFnt->GetOrientation(), m_pFrame->IsVertical() );
800
801 pRet = new SwNumberPortion( aText, std::move(pNumFnt),
802 bLeft, bCenter, nMinDist,
803 bLabelAlignmentPosAndSpaceModeActive );
804 }
805 }
806 }
807 }
808 return pRet;
809}
810
811/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
@ APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING
@ DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT
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...
virtual SwRedlineTable::size_type GetRedlinePos(const SwNode &rNode, RedlineType nType) const =0
virtual const SwRedlineTable & GetRedlineTable() const =0
Provides access to settings of a document.
virtual bool get(DocumentSettingId id) const =0
Return the specified document setting.
const std::map< OUString, css::uno::Any > & GetGrabBag() const
const SfxPoolItem * GetCurItem() const
const SfxPoolItem * NextItem()
bool HasItem(sal_uInt16 nWhich, const SfxPoolItem **ppItem=nullptr) const
const SfxPoolItem * GetItem(sal_uInt16 nWhich, bool bSearchInParent=true) const
sal_uInt16 Which() const
sal_uInt16 FirstWhich()
sal_uInt16 NextWhich()
const SvxBrushItem * GetBrush() const
const std::optional< vcl::Font > & GetBulletFont() const
sal_UCS4 GetBulletChar() const
const Size & GetGraphicSize() const
SvxAdjust GetNumAdjust() const
SvxNumPositionAndSpaceMode GetPositionAndSpaceMode() const
short GetCharTextDistance() const
SvxNumType GetNumberingType() const
const SwFrame * GetAnchorFrame() const
SwFont * GetFnt()
Definition: itratr.hxx:103
SwTextAttr * GetAttr(TextFrameIndex nPos) const
Returns the attribute for a position.
Definition: itratr.cxx:147
SwFont * m_pFont
Definition: itratr.hxx:39
Represents the style of a text portion.
Definition: charfmt.hxx:27
const SwModify * GetRegisteredIn() const
Definition: calbck.hxx:166
Used in for asian layout specialities to display up to six characters in 2 rows and 2-3 columns.
Definition: porfld.hxx:214
void ChgBodyTextFlag(bool bIsInBody)
set from UpdateExpFields (the Node-Position is known there)
Definition: dbfld.hxx:118
Definition: doc.hxx:197
bool IsClipBoard() const
Definition: doc.hxx:976
IDocumentRedlineAccess const & getIDocumentRedlineAccess() const
Definition: doc.cxx:349
IDocumentSettingAccess const & getIDocumentSettingAccess() const
Definition: doc.cxx:190
const SwAttrPool & GetAttrPool() const
Definition: doc.hxx:1334
void SetNoLength()
Definition: porfld.hxx:59
SwFieldIds Which() const
Definition: fldbas.hxx:276
Base class of all fields.
Definition: fldbas.hxx:296
virtual void SetLanguage(LanguageType nLng)
Definition: fldbas.cxx:449
sal_uInt32 GetFormat() const
Query parameters for dialog and for BASIC.
Definition: fldbas.hxx:407
OUString ExpandField(bool bCached, SwRootFrame const *pLayout) const
expand the field.
Definition: fldbas.cxx:491
virtual OUString GetFieldName() const
get name or content
Definition: fldbas.cxx:318
SwFieldType * GetTyp() const
Definition: fldbas.hxx:402
LanguageType GetLanguage() const
Language at field position.
Definition: fldbas.hxx:412
general base class for all free-flowing frames
Definition: flyfrm.hxx:79
To take Asian or other languages into consideration, an SwFont object consists of 3 SwSubFonts (Latin...
Definition: swfont.hxx:135
const std::optional< Color > & GetBackColor() const
Definition: swfont.hxx:195
void SetHighlightColor(const Color &aNewColor)
Definition: swfont.hxx:951
void SetDiffFnt(const SfxItemSet *pSet, const IDocumentSettingAccess *pIDocumentSettingAccess)
Definition: swfont.cxx:473
void SetBackColor(std::optional< Color > xNewColor)
Definition: swfont.cxx:64
LanguageType GetLanguage() const
Definition: swfont.hxx:286
const Color & GetHighlightColor() const
Definition: swfont.hxx:197
const std::shared_ptr< SfxItemSet > & GetStyleHandle() const
Definition: fmtautofmt.hxx:49
const SwField * GetField() const
Definition: fmtfld.hxx:131
SwFormatMeta is a pool item subclass that owns a Meta.
Definition: fmtmeta.hxx:93
::sw::Meta * GetMeta()
Definition: fmtmeta.hxx:123
const SwAttrSet & GetAttrSet() const
For querying the attribute array.
Definition: format.hxx:136
Base class of the Writer layout elements.
Definition: frame.hxx:315
sal_uInt16 GetVirtPageNum() const
Definition: trvlfrm.cxx:1817
bool IsInDocBody() const
Definition: frame.hxx:949
SwFlyFrame * FindFlyFrame()
Definition: frame.hxx:1117
bool IsVertical() const
Definition: frame.hxx:979
SwRootFrame * getRootFrame()
Definition: frame.hxx:685
SwPageFrame * FindPageFrame()
Definition: frame.hxx:686
void ChangeExpansion(const SwFrame &, const SwTextField &)
For fields in header/footer/footnotes/flys: Only called by formatting!!
Definition: expfld.cxx:336
bool IsInBodyText() const
Called by formatting.
Definition: expfld.hxx:139
void ChgBodyTextFlag(bool bIsInBody)
Set by UpdateExpFields where node position is known.
Definition: expfld.hxx:143
Distinguish only for painting/hide.
Definition: porfld.hxx:122
Base class for anything that can be part of a line in the Writer layout.
Definition: porlin.hxx:52
SwTwips & GetAscent()
Definition: porlin.hxx:80
void SetLen(TextFrameIndex const nLen)
Definition: porlin.hxx:78
SwNodeOffset GetIndex() const
Definition: node.hxx:312
SwDoc & GetDoc()
Definition: node.hxx:233
const IDocumentSettingAccess * getIDocumentSettingAccess() const
Provides access to the document setting interface.
Definition: node.cxx:2138
SwCharFormat * GetCharFormat() const
Definition: numrule.hxx:74
const SwFormatVertOrient * GetGraphicOrientation() const
Definition: number.cxx:352
const SwNumFormat & Get(sal_uInt16 i) const
Definition: number.cxx:87
const SwPosition * GetMark() const
Definition: pam.hxx:255
const SwPosition * GetPoint() const
Definition: pam.hxx:253
const SvxNumberType & GetNumType() const
Definition: pagedesc.hxx:202
SwPageDesc * GetPageDesc()
Definition: pagefrm.hxx:144
void ChangeExpansion(SwDoc *pDoc, bool bVirtPageNum, const SvxNumType *pNumFormat)
Definition: docufld.cxx:131
SwTwips Height() const
Definition: possiz.hxx:49
sal_uInt16 GetStackCount() const
Definition: docredln.cxx:1952
std::size_t GetAuthor(sal_uInt16 nPos=0) const
Definition: docredln.cxx:1960
bool IsMoved() const
Definition: redline.hxx:282
RedlineType GetType(sal_uInt16 nPos=0) const
Definition: docredln.cxx:1975
static constexpr size_type npos
Definition: docary.hxx:224
size_type size() const
Definition: docary.hxx:268
vector_type::size_type size_type
Definition: docary.hxx:223
The root element of a Writer document layout.
Definition: rootfrm.hxx:85
bool IsVirtPageNum() const
Definition: rootfrm.hxx:324
sal_uInt16 GetPageNum() const
Definition: rootfrm.hxx:321
bool IsHideRedlines() const
Replacement for sw::DocumentRedlineManager::GetRedlineFlags() (this is layout-level redline hiding).
Definition: rootfrm.hxx:434
A wrapper around SfxPoolItem to store the start position of (usually) a text portion,...
Definition: txatbase.hxx:44
const SfxPoolItem & GetAttr() const
Definition: txatbase.hxx:167
sal_Int32 GetAnyEnd() const
end (if available), else start
Definition: txatbase.hxx:161
virtual const sal_Int32 * GetEnd() const
end position
Definition: txatbase.cxx:48
sal_Int32 GetStart() const
Definition: txatbase.hxx:88
const SwFormatAutoFormat & GetAutoFormat() const
Definition: txatbase.hxx:193
sal_uInt16 Which() const
Definition: txatbase.hxx:116
const SwFormatField & GetFormatField() const
Definition: txatbase.hxx:199
SwLinePortion * GetLast()
Definition: inftxt.hxx:566
bool IsTest() const
Definition: inftxt.hxx:593
bool IsNumDone() const
Definition: inftxt.hxx:634
const SwAttrSet & GetCharAttr() const
Definition: inftxt.hxx:781
SwExpandPortion * TryNewNoLengthPortion(SwTextFormatInfo const &rInfo)
Try to create a new portion with zero length, for an end of a hint (where there is no CH_TXTATR).
Definition: txtfld.cxx:321
std::unique_ptr< sw::MergedAttrIterByEnd > m_pByEndIter
Definition: itrform2.hxx:45
SwExpandPortion * NewFieldPortion(SwTextFormatInfo &rInf, const SwTextAttr *pHt) const
Definition: txtfld.cxx:76
SwNumberPortion * NewNumberPortion(SwTextFormatInfo &rInf) const
Definition: txtfld.cxx:589
SwLinePortion * NewExtraPortion(SwTextFormatInfo &rInf)
Definition: txtfld.cxx:360
SwFootnotePortion * NewFootnotePortion(SwTextFormatInfo &rInf, SwTextAttr *pHt)
The portion for the Footnote Reference in the Text.
Definition: txtftn.cxx:793
SwFlyCntPortion * NewFlyCntPortion(SwTextFormatInfo &rInf, SwTextAttr *pHt) const
Sets a new portion for an object anchored as character.
Definition: itrform2.cxx:2901
SwDoc & GetDoc()
Definition: txtfrm.hxx:475
TextFrameIndex MapModelToView(SwTextNode const *pNode, sal_Int32 nIndex) const
Definition: txtfrm.cxx:1252
SwTextNode const * GetTextNodeForParaProps() const
Definition: txtfrm.cxx:1303
TextFrameIndex GetTextStart() const
Definition: inftxt.hxx:123
SwTextFrame * m_pFrame
Definition: itrtxt.hxx:34
SwTextFrame * GetTextFrame()
Definition: itrtxt.hxx:134
TextFrameIndex m_nStart
Definition: itrtxt.hxx:41
bool SeekAndChg(SwTextSizeInfo &rInf)
Definition: itrtxt.hxx:311
SwTextNode is a paragraph in the document model.
Definition: ndtxt.hxx:112
OUString GetLabelFollowedBy() const
Retrieves the character following the list label, if the paragraph's list level defines one.
Definition: ndtxt.cxx:4723
const SfxPoolItem & GetAttr(sal_uInt16 nWhich, bool bInParent=true) const
End: Data collected during idle time.
Definition: node.hxx:770
bool IsCountedInList() const
Definition: ndtxt.cxx:4391
static bool IsIgnoredCharFormatForNumbering(const sal_uInt16 nWhich, bool bIsCharStyle=false)
In MS Word, the font underline setting of the paragraph end position won't affect the formatting of n...
Definition: thints.cxx:1893
SwNumRule * GetNumRule(bool bInParent=true) const
Returns numbering rule of this text node.
Definition: ndtxt.cxx:2919
int GetActualListLevel(SwListRedlineType eRedline=SwListRedlineType::SHOW) const
Returns the actual list level of this text node, when it is a list item.
Definition: ndtxt.cxx:4246
bool IsNumbered(SwRootFrame const *pLayout=nullptr) const
Returns is this text node is numbered.
Definition: ndtxt.cxx:2987
OUString GetNumString(const bool _bInclPrefixAndSuffixStrings=true, const unsigned int _nRestrictToThisLevel=MAXLEVEL, SwRootFrame const *pLayout=nullptr, SwListRedlineType eRedline=SwListRedlineType::SHOW) const
Returns outline of numbering string.
Definition: ndtxt.cxx:3245
SwpHints * GetpSwpHints()
Definition: ndtxt.hxx:252
const OUString & GetText() const
Definition: ndtxt.hxx:244
This portion represents a part of the paragraph string.
Definition: portxt.hxx:27
SwTextFrame * GetTextFrame()
Definition: inftxt.hxx:288
SwViewShell * GetVsh()
Definition: inftxt.hxx:222
const SwViewOption & GetOpt() const
Definition: inftxt.hxx:239
void SetLen(const TextFrameIndex nNew)
Definition: inftxt.hxx:276
TextFrameIndex GetIdx() const
Definition: inftxt.hxx:273
bool IsFieldName() const
Definition: viewopt.hxx:419
bool IsUpdateExpFields()
Definition: viewimp.cxx:194
SwViewShellImp * Imp()
Definition: viewsh.hxx:210
SwRootFrame * GetLayout() const
Definition: viewsh.cxx:2149
SwDoc * GetDoc() const
Definition: viewsh.hxx:307
An SwTextAttr container, stores all directly formatted text portions for a text node.
Definition: ndhints.hxx:68
void GetPrefixAndSuffix(OUString *const o_pPrefix, OUString *const o_pSuffix, OUString *const o_pShadingColor)
get prefix/suffix from the RDF repository.
Definition: fmtatr2.cxx:748
Meta is an annotation on a range of text.
Definition: fmtmeta.hxx:137
constexpr ::Color COL_GREEN(0x00, 0x80, 0x00)
constexpr ::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
@ ATTR_PAGENUMBERFLD
Definition: fldbas.hxx:152
@ ATTR_DATEFLD
Definition: fldbas.hxx:150
@ ATTR_BOOKMARKFLD
Definition: fldbas.hxx:154
@ ATTR_SETREFATTRFLD
Definition: fldbas.hxx:155
@ ATTR_PAGECOUNTFLD
Definition: fldbas.hxx:153
@ ATTR_TIMEFLD
Definition: fldbas.hxx:151
@ DATEFLD
Definition: fldbas.hxx:234
@ TIMEFLD
Definition: fldbas.hxx:235
@ Database
For old documents the Field-Which IDs must be preserved !!!
LINESTYLE_DOUBLE
LINESTYLE_NONE
STRIKEOUT_DOUBLE
ITALIC_NONE
WEIGHT_NORMAL
constexpr TypedWhichId< SvxCrossedOutItem > RES_CHRATR_CROSSEDOUT(5)
constexpr TypedWhichId< SwFormatFootnote > RES_TXTATR_FTN(59)
constexpr TypedWhichId< SvxUnderlineItem > RES_CHRATR_UNDERLINE(14)
constexpr sal_uInt16 RES_CHRATR_END(46)
constexpr TypedWhichId< SwFormatAutoFormat > RES_TXTATR_AUTOFMT(50)
constexpr TypedWhichId< SvxBrushItem > RES_CHRATR_HIGHLIGHT(42)
constexpr TypedWhichId< SvxBrushItem > RES_CHRATR_BACKGROUND(21)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_ANNOTATION(60)
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< SwFormatAutoFormat > RES_PARATR_LIST_AUTOFMT(87)
constexpr TypedWhichId< SfxGrabBagItem > RES_CHRATR_GRABBAG(43)
constexpr TypedWhichId< SwFormatMeta > RES_TXTATR_METAFIELD(49)
constexpr TypedWhichId< SwFormatRefMark > RES_TXTATR_REFMARK(RES_TXTATR_WITHEND_BEGIN)
constexpr TypedWhichId< SwTOXMark > RES_TXTATR_TOXMARK(47)
constexpr TypedWhichId< SvxColorItem > RES_CHRATR_COLOR(3)
aStr
int i
long Long
@ REF_SETREFATTR
Definition: reffld.hxx:37
@ REF_BOOKMARK
Definition: reffld.hxx:39
SwNodeOffset GetNodeIndex() const
Definition: pam.hxx:78
SvxNumType
SVX_NUM_BITMAP
SVX_NUM_CHAR_SPECIAL
SVX_NUM_PAGEDESC
SwFontScript
Definition: swfont.hxx:124
#define SW_MOD()
Definition: swmodule.hxx:256
constexpr sal_uInt8 MAXLEVEL
Definition: swtypes.hxx:92
static const SwRangeRedline * lcl_GetRedlineAtNodeInsertionOrDeletion(const SwTextNode &rTextNode, bool &bIsMoved)
Definition: txtfld.cxx:513
static SwFieldPortion * lcl_NewMetaPortion(SwTextAttr &rHint, const bool bPrefix)
Definition: txtfld.cxx:298
static bool lcl_setRedlineAttr(SwTextFormatInfo &rInf, const SwTextNode &rTextNode, const std::unique_ptr< SwFont > &pNumFnt)
Definition: txtfld.cxx:546
static void checkApplyParagraphMarkFormatToNumbering(SwFont *pNumFnt, SwTextFormatInfo &rInf, const IDocumentSettingAccess *pIDSA, const SwAttrSet *pFormat)
OOXML spec says that w:rPr inside w:pPr specifies formatting for the paragraph mark symbol (i....
Definition: txtfld.cxx:425
static bool lcl_IsInBody(SwFrame const *pFrame)
Definition: txtfld.cxx:62
#define NON_PRINTING_CHARACTER_COLOR
Definition: txtfrm.hxx:57