20#include <config_features.h>
21#include <config_fuzzers.h>
26#include <osl/diagnose.h>
70 std::optional<sal_Int32> oContentIdx,
71 sal_uInt16
const nPageNumber)
72 : m_nPageNumber(nPageNumber)
99 sal_uInt16
const nPageNumber)
100 : m_nPageNumber(nPageNumber)
119 sal_uInt16
const nPageNumber)
120 : m_nPageNumber(nPageNumber)
123 m_CNTNT.pBookmark = &rBookmark;
174 m_CNTNT.pFlyFormat = &rFlyFormat;
214 OSL_ENSURE(bResult,
"Where is the field?");
244 if( !pFirst || !pNext )
251 const SwNode *pFirstStt, *pNextStt;
264 if( pFirstStt != pNextStt )
266 if( pFirst->
IsTextNode() && pNext->IsTextNode() &&
284 if( pFirst != pNext )
285 return pFirst->
GetIndex() < pNext->GetIndex();
293 const SwNode* pRet =
nullptr;
298 pRet = &
m_CNTNT.pTextField->GetTextNode();
302 pRet = &
m_CNTNT.pTextINet->GetTextNode();
306 pRet =
m_CNTNT.pSection->GetFormat()->GetSectionNode();
310 pRet = &
m_CNTNT.pBookmark->GetMarkStart().GetNode();
314 pRet = &
m_CNTNT.pPos->GetNode();
318 pRet = &
m_CNTNT.pTextTOX->GetTextNode();
322 if(
m_CNTNT.pTBox->GetSttNd() )
346 nRet =
m_CNTNT.pTextField->GetStart();
349 nRet =
m_CNTNT.pTextINet->GetStart();
352 nRet =
m_CNTNT.pTextTOX->GetStart();
355 nRet =
m_CNTNT.pBookmark->GetMarkStart().GetContentIndex();
358 nRet =
m_CNTNT.pPos->GetContentIndex();
368 :
SwHash( rName ), aSetStr(
std::move( aText ))
385#if HAVE_FEATURE_DBCONNECTIVITY && !ENABLE_FUZZERS
401 std::vector<SwFormatField*> vFields;
402 pFieldType->GatherFields(vFields);
425#if !HAVE_FEATURE_DBCONNECTIVITY || ENABLE_FUZZERS
432#if HAVE_FEATURE_DBCONNECTIVITY && !ENABLE_FUZZERS
435static OUString lcl_DBDataToString(
const SwDBData& rData)
445 const std::vector<OUString>* pAllDBNames )
447#if !HAVE_FEATURE_DBCONNECTIVITY || ENABLE_FUZZERS
451 std::vector<OUString> aUsedDBNames;
452 std::vector<OUString> aAllDBNames;
457 pAllDBNames = &aAllDBNames;
461 for (
auto n = rArr.
size();
n; )
469 aUsedDBNames.clear();
493 lcl_DBDataToString(
static_cast<const SwDBNameInfField*
>(pField)->GetRealDBData() ));
499 lcl_DBDataToString(
static_cast<const SwDBNameInfField*
>(pField)->GetRealDBData() ));
505 pField->
GetPar1(), aUsedDBNames ));
506 aUsedDBNames.clear();
514 aUsedDBNames.clear();
525#if !HAVE_FEATURE_DBCONNECTIVITY || ENABLE_FUZZERS
531 for (
const auto& pParam : rArr)
533 rAllDBNames.emplace_back(pParam->sDataSource + OUStringChar(
DB_DELIM) + pParam->sCommand);
539 const OUString& rFormula,
540 std::vector<OUString>& rUsedDBNames )
549 for (
const auto &sItem : rAllDBNames)
557 nPos += sItem.getLength() + 1;
569 const std::vector<OUString>& rUsedDBNames )
571 for (
const auto &
sName : rUsedDBNames )
577#if !HAVE_FEATURE_DBCONNECTIVITY || ENABLE_FUZZERS
581 if( rDBName.isEmpty() )
585 for(
const auto &
sName : rDBNameList )
590 for(
const auto &
sName : rDBNameList )
591 if( rSCmp.isEqual( rDBName,
sName.getToken(0,
';') ) )
599 aData.nCommandType = -1;
601 rDBNameList.push_back(rDBName);
606 const OUString& rNewName )
608#if !HAVE_FEATURE_DBCONNECTIVITY || ENABLE_FUZZERS
619 for (
auto n = rArr.
size();
n; )
639 bool bExpand =
false;
644#if HAVE_FEATURE_DBCONNECTIVITY && !ENABLE_FUZZERS
655 static_cast<SwDBField*
>(pField)->ClearInitialized();
656 static_cast<SwDBField*
>(pField)->InitContent();
707OUString lcl_CutOffDBCommandType(
const OUString& rName)
709 return rName.replaceFirst(OUStringChar(
DB_DELIM),
".").getToken(0,
DB_DELIM);
715 const OUString& rNewName,
const OUString& rFormula )
718 const OUString sNewName( lcl_CutOffDBCommandType(rNewName) );
721 for(
const auto & rUsedDBName : rUsedDBNames)
723 const OUString sDBName( lcl_CutOffDBCommandType(rUsedDBName) );
725 if (sDBName!=sNewName)
743 nPos += sNewName.getLength();
754 for(
const auto &
sName : rArr )
759 for(
const auto &
sName : rArr )
760 if( rSCmp.isEqual( rName,
sName ))
843 std::vector<std::reference_wrapper<SwSection>> aUnhiddenSections;
863 std::vector<SwNodeOffset> aTmpArr;
864 std::vector<SwNodeOffset>::size_type nArrStt = 0;
878 aTmpArr.push_back( nIdx );
879 if( nIdx < nSttContent )
883 std::sort(aTmpArr.begin(), aTmpArr.end());
887 for (std::vector<sal_uLong>::size_type
n = nArrStt;
n < aTmpArr.size(); ++
n)
889 pSectNd = rDoc.
GetNodes()[ aTmpArr[
n ] ]->GetSectionNode();
890 OSL_ENSURE( pSectNd,
"Where is my SectionNode" );
894 if (rSection.IsHidden() && !rSection.GetCondition().isEmpty() && rSection.IsCondHidden())
896 aUnhiddenSections.push_back(std::ref(rSection));
900 for (std::vector<sal_uLong>::size_type
n = 0;
n < nArrStt; ++
n)
902 pSectNd = rDoc.
GetNodes()[ aTmpArr[
n ] ]->GetSectionNode();
903 OSL_ENSURE( pSectNd,
"Where is my SectionNode" );
907 if (rSection.IsHidden() && !rSection.GetCondition().isEmpty() && rSection.IsCondHidden())
909 aUnhiddenSections.push_back(std::ref(rSection));
915 for (
const auto &
nId : aTmpArr)
923 for (
auto it = rIDMA.getBookmarksBegin(); it != rIDMA.getBookmarksEnd(); ++it)
927 if (!pBookmark->GetHideCondition().isEmpty())
934 static const OUStringLiteral sTrue(
u"TRUE");
935 static const OUStringLiteral sFalse(
u"FALSE");
937#if HAVE_FEATURE_DBCONNECTIVITY && !ENABLE_FUZZERS
987 const_cast<SwFormatField*
>(pFormatField)->ForceUpdateTextNode();
1007 const_cast<SwFormatField*
>(pFormatField)->ForceUpdateTextNode();
1011#if HAVE_FEATURE_DBCONNECTIVITY && !ENABLE_FUZZERS
1054 for (
auto& rSectionWrapper : aUnhiddenSections)
1056 auto& rSection = rSectionWrapper.
get();
1057 rSection.SetCondHidden(
true);
1068 std::pair<Point, bool>
const tmp(aPt,
false);
1074 std::unique_ptr<SetGetExpField> pNew;
1075 bool bIsInBody =
false;
1085 if (pFrame ==
nullptr && bIsInBody)
1090 if( (pFrame !=
nullptr) || bIsInBody )
1101 OSL_ENSURE(bResult,
"where is the Field");
1112#if HAVE_FEATURE_DBCONNECTIVITY && !ENABLE_FUZZERS
1119 if( pNew !=
nullptr )
1127 std::unique_ptr<SetGetExpField> pNew;
1145 std::pair<Point, bool>
const tmp(aPt,
false);
1153 OSL_ENSURE(bResult,
"where is the Field");
1171 OUString sFieldName;
1172 switch( rType.
Which() )
1181 OSL_ENSURE(
false,
"No valid field type" );
1184 if( sFieldName.isEmpty() )
1204 OUString sFieldName;
1205 switch( rType.
Which() )
1216 if( sFieldName.isEmpty() )
1235 while( pPrev->
pNext.get() != pFnd )
1236 pPrev = pPrev->
pNext.get();
1243 : m_FieldTypeTable(
TBLSZ)
1245 , m_nFieldListGetMode(0)
1247 , m_bInUpdateFields(false)
1248 , m_bFieldsDirty(false)
OUString uppercase(const OUString &rStr, sal_Int32 nPos, sal_Int32 nCount) const
OUString lowercase(const OUString &rStr, sal_Int32 nPos, sal_Int32 nCount) const
bool isLetterNumeric(const OUString &rStr, sal_Int32 nPos) const
virtual SwFieldType * InsertFieldType(const SwFieldType &)=0
virtual const SwFieldTypes * GetFieldTypes() const =0
virtual const SwRootFrame * GetCurrentLayout() const =0
virtual void SetModified()=0
Must be called manually at changes of format.
SetGetExpField(const SwNode &rNd, const SwTextField *pField=nullptr, std::optional< sal_Int32 > oContentIdx=std::nullopt, sal_uInt16 nPageNumber=0)
sal_Int32 GetCntPosFromContent() const
bool operator<(const SetGetExpField &rField) const
const SwNode * GetNodeFromContent() const
void SetBodyPos(const SwContentFrame &rFrame)
void GetPosOfContent(SwPosition &rPos) const
union SetGetExpField::@4 m_CNTNT
enum SetGetExpField::SetGetExpFieldType m_eSetGetExpFieldType
const SwTextField * pTextField
bool operator==(const SetGetExpField &rField) const
Item2Range GetItemSurrogates(sal_uInt16 nWhich) const
bool ChangeEntryContent(const SwAuthEntry *pNewEntry)
SwContentFrame is the layout for content nodes: a common base class for text (paragraph) and non-text...
SwContentFrame * getLayoutFrame(const SwRootFrame *, const SwPosition *pPos=nullptr, std::pair< Point, bool > const *pViewPosAndCalcFrame=nullptr) const
const OUString & GetColumnName() const
void ChgBodyTextFlag(bool bIsInBody)
set from UpdateExpFields (the Node-Position is known there)
void CreateDSData(const SwDBData &rData)
static const SwDBData & GetAddressDBName()
const SwDSParams_t & GetDSParamArray() const
bool OpenDataSource(const OUString &rDataSource, const OUString &rTableOrQuery)
open the source while fields are updated - for the calculator only!
void SetInitDBFields(bool b)
const SwDBData & GetRealDBData() const
DBName.
void MakeFieldList(SwDoc &rDoc, bool bAll, int eGetMode)
SwHashTable< SwCalcFieldType > m_FieldTypeTable
SwDocUpdateField(SwDoc &rDocument)
void MakeFieldList_(SwDoc &pDoc, int eGetMode)
void InsDelFieldInFieldLst(bool bIns, const SwTextField &rField)
void SetFieldsDirty(bool b)
SwHashTable< SwCalcFieldType > const & GetFieldTypeTable() const
void GetBodyNode(const SwTextField &, SwFieldIds nFieldWhich)
void InsertFieldType(const SwFieldType &rType)
std::unique_ptr< SetGetExpFields > m_pFieldSortList
current field list for calculation
SwNodeOffset m_nNodes
to check if the node count changed
void RemoveFieldType(const SwFieldType &rType)
void GetBodyNodeGeneric(SwNode const &rNode, T const &)
SwDBData const & GetDBData()
SwSectionFormats & GetSections()
void ChangeAuthorityData(const SwAuthEntry *pNewData)
IDocumentState const & getIDocumentState() const
bool IsUsed(const sw::BroadcastingModify &) const
SwDBManager * GetDBManager() const
void AddUsedDBToList(std::vector< OUString > &rDBNameList, const std::vector< OUString > &rUsedDBNames)
IDocumentFieldsAccess const & getIDocumentFieldsAccess() const
static OUString ReplaceUsedDBs(const std::vector< OUString > &rUsedDBNames, const OUString &rNewName, const OUString &rFormula)
static bool IsNameInArray(const std::vector< OUString > &rOldNames, const OUString &rName)
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
IDocumentMarkAccess * getIDocumentMarkAccess()
void SetInitDBFields(bool b)
const SwAttrPool & GetAttrPool() const
void GetAllDBNames(std::vector< OUString > &rAllDBNames)
void GetAllUsedDB(std::vector< OUString > &rDBNameList, const std::vector< OUString > *pAllDBNames=nullptr)
static std::vector< OUString > & FindUsedDBs(const std::vector< OUString > &rAllDBNames, const OUString &rFormula, std::vector< OUString > &rUsedDBNames)
void ChangeDBFields(const std::vector< OUString > &rOldNames, const OUString &rNewName)
Instances of SwFields and those derived from it occur 0 to n times.
Base class of all fields.
virtual OUString GetFormula() const
virtual OUString GetPar1() const
virtual void SetPar1(const OUString &rStr)
virtual void SetPar2(const OUString &rStr)
virtual sal_uInt16 GetSubType() const
virtual SwFieldType * ChgTyp(SwFieldType *)
Set new type (used for copying among documents).
SwFieldType * GetTyp() const
Content, content of frame (header, footer, fly).
const SwNodeIndex * GetContentIdx() const
Base class of the Writer layout elements.
sal_uInt16 GetPhyPageNum() const
void ChgBodyTextFlag(bool bIsInBody)
Set by UpdateExpFields where node position is known.
T should be a subclass of SwHash.
T * Find(std::u16string_view aStr, sal_uInt32 *pPos=nullptr) const
void SetHidden(bool bHidden)
void Evaluate(SwDoc &rDoc)
get current field value and cache it
void SetValue(bool bHidden)
const SwContentNode * GetNode() const
Marks a node in the document model.
const SwNodes & GetNodes() const
SwNodeOffset GetIndex() const
Base class of the Writer document model elements.
SwTextNode * GetTextNode()
Inline methods from Node.hxx.
SwNodeOffset GetIndex() const
SwNodes & GetNodes()
Node is in which nodes-array/doc?
const SwStartNode * FindFlyStartNode() const
bool IsSectionNode() const
SwTableNode * FindTableNode()
Search table node, in which it is.
const SwStartNode * StartOfSectionNode() const
SwContentNode * GetContentNode()
SwNode & GetEndOfExtras() const
This is the last EndNode of a special section.
bool IsDocNodes() const
Is the NodesArray the regular one of Doc? (and not the UndoNds, ...) Implementation in doc....
SwContentNode * GoNext(SwNodeIndex *) const
SwNode & GetEndOfPostIts() const
A still empty section.
SwDoc & GetDoc()
Which Doc contains the nodes-array?
SwNodeOffset Count() const
A section node represents the start of a section on the UI, i.e.
const SwSection & GetSection() const
OUString const & GetCondition() const
void SetCondHidden(bool const bFlag)
SwSectionFormat * GetFormat()
void SetCondition(OUString const &rNew)
SwTableBox is one table cell in the document model.
const SwStartNode * GetSttNd() const
sal_Int32 GetStart() const
const SwFormatField & GetFormatField() const
SwTextNode & GetTextNode() const
void ExpandTextField(const bool bForceNotify=false) const
Represents the visualization of a paragraph.
SwTextNode * GetTextNodeFirst()
SwTextNode is a paragraph in the document model.
The shared part of a user field.
std::vector< SwSectionFormat * >::size_type size_type
std::vector< Value >::size_type size_type
virtual const SwPosition & GetMarkStart() const =0
std::vector< std::unique_ptr< SwDSParam > > SwDSParams_t
virtual OUString GetName() const override
virtual void SetValue(tools::Long nNew) override
OUString LookString(SwHashTable< HashStr > const &rTable, const OUString &rName)
Look up the Name, if it is present, return its String, otherwise return an empty String.
const SwTextNode * GetBodyTextNode(const SwDoc &rDoc, SwPosition &rPos, const SwFrame &rFrame)
Forward declaration: get "BodyTextNode" for exp.fld in Fly's headers/footers/footnotes.
@ Database
For old documents the Field-Which IDs must be preserved !!!
constexpr TypedWhichId< SwFormatField > RES_TXTATR_FIELD(RES_TXTATR_NOEND_BEGIN)
constexpr TypedWhichId< SwFormatField > RES_TXTATR_INPUTFIELD(55)
const ::utl::TransliterationWrapper & GetAppCmpStrIgnore()
CharClass & GetAppCharClass()
constexpr OUStringLiteral aData
OString strip(const OString &rIn, char c)
const SwGetSetExpType GSE_STRING
String.
sal_Int32 toInt32(std::u16string_view str, sal_Int16 radix=10)
std::basic_string_view< charT, traits > getToken(std::basic_string_view< charT, traits > sv, charT delimiter, std::size_t &position)
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
SwFrame const * FindNeighbourFrameForNode(SwNode const &rNode)
o3tl::strong_int< sal_Int32, struct Tag_SwNodeOffset > SwNodeOffset
bool IsFrameBehind(const SwTextNode &rMyNd, sal_Int32 nMySttPos, const SwTextNode &rBehindNd, sal_Int32 nSttPos)
HashStr(const OUString &rName, OUString aText, HashStr *)
std::unique_ptr< SwHash > pNext
Marks a position in the document model.
void Assign(const SwNode &rNd, SwNodeOffset nDelta, sal_Int32 nContentOffset=0)
These all set both nNode and nContent.
SwNodeOffset GetNodeIndex() const
sal_Int32 GetContentIndex() const
UNDERLYING_TYPE get() const