Doxygen
Loading...
Searching...
No Matches
DefinitionImpl Class Reference

#include <src/definitionimpl.h>

Classes

class  Private
 Private data associated with a Symbol DefinitionImpl object. More...

Public Member Functions

 DefinitionImpl (Definition *def, const QCString &defFileName, int defLine, int defColumn, const QCString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=TRUE)
 ~DefinitionImpl ()
 DefinitionImpl (const DefinitionImpl &d)
DefinitionImploperator= (const DefinitionImpl &d)
 DefinitionImpl (DefinitionImpl &&d)=delete
DefinitionImploperator= (DefinitionImpl &&d)=delete
const QCStringname () const
bool isAnonymous () const
const QCStringlocalName () const
QCString qualifiedName () const
QCString symbolName () const
QCString getSourceFileBase () const
QCString getSourceAnchor () const
QCString documentation () const
int docLine () const
QCString docFile () const
QCString briefDescription (bool abbreviate=FALSE) const
QCString briefDescriptionAsTooltip () const
int briefLine () const
QCString inbodyDocumentation () const
QCString inbodyFile () const
int inbodyLine () const
QCString briefFile () const
QCString getDefFileName () const
QCString getDefFileExtension () const
int getDefLine () const
int getDefColumn () const
bool hasDocumentation () const
bool hasUserDocumentation () const
bool isVisibleInProject () const
bool isVisible () const
bool isHidden () const
bool isArtificial () const
bool isExported () const
QCString getReference () const
bool isReference () const
QCString externalReference (const QCString &relPath) const
int getStartDefLine () const
int getStartBodyLine () const
int getEndBodyLine () const
const FileDefgetBodyDef () const
SrcLangExt getLanguage () const
const GroupListpartOfGroups () const
bool isLinkableViaGroup () const
const RefItemVectorxrefListItems () const
const DefinitionfindInnerCompound (const QCString &name) const
DefinitiongetOuterScope () const
const MemberVectorgetReferencesMembers () const
const MemberVectorgetReferencedByMembers () const
bool hasSections () const
bool hasSources () const
bool hasBriefDescription () const
QCString id () const
const SectionRefsgetSectionRefs () const
void setName (const QCString &name)
void setId (const QCString &name)
void setDefFile (const QCString &df, int defLine, int defColumn)
void setDocumentation (const QCString &d, const QCString &docFile, int docLine, bool stripWhiteSpace=TRUE)
void setBriefDescription (const QCString &b, const QCString &briefFile, int briefLine)
void setInbodyDocumentation (const QCString &d, const QCString &docFile, int docLine)
void setReference (const QCString &r)
void addSectionsToDefinition (const std::vector< const SectionInfo * > &anchorList)
void setBodySegment (int defLine, int bls, int ble)
void setBodyDef (const FileDef *fd)
void addSourceReferencedBy (MemberDef *d, const QCString &sourceRefName)
void addSourceReferences (MemberDef *d, const QCString &sourceRefName)
void setRefItems (const RefItemVector &sli)
void mergeRefItems (Definition *d)
void mergeReferences (const Definition *other)
void mergeReferencedBy (const Definition *other)
void addInnerCompound (Definition *d)
void setOuterScope (Definition *d)
void setHidden (bool b)
void setArtificial (bool b)
void setExported (bool b)
void setLanguage (SrcLangExt lang)
void writeSourceDef (OutputList &ol) const
void writeInlineCode (OutputList &ol, const QCString &scopeName) const
bool hasSourceRefs () const
bool hasSourceReffedBy () const
void writeSourceRefs (OutputList &ol, const QCString &scopeName) const
void writeSourceReffedBy (OutputList &ol, const QCString &scopeName) const
void makePartOfGroup (GroupDef *gd)
void writeNavigationPath (OutputList &ol) const
QCString navigationPathAsString () const
void writeQuickMemberLinks (OutputList &, const MemberDef *) const
void writeSummaryLinks (OutputList &) const
void writePageNavigation (OutputList &ol) const
QCString pathFragment () const
void writeDocAnchorsToTagFile (TextStream &) const
void setLocalName (const QCString &name)
void writeToc (OutputList &ol, const LocalToc &lt) const
void computeTooltip ()
void _setSymbolName (const QCString &name)
QCString _symbolName () const

Private Member Functions

int _getXRefListId (const QCString &listName) const
void _writeSourceRefList (OutputList &ol, const QCString &scopeName, const QCString &text, const std::unordered_map< std::string, MemberDef * > &members, bool) const
void _setBriefDescription (const QCString &b, const QCString &briefFile, int briefLine)
void _setDocumentation (const QCString &d, const QCString &docFile, int docLine, bool stripWhiteSpace, bool atTop)
void _setInbodyDocumentation (const QCString &d, const QCString &docFile, int docLine)
bool _docsAlreadyAdded (const QCString &doc, QCString &sigList)

Private Attributes

std::unique_ptr< Privatep

Detailed Description

Definition at line 27 of file definitionimpl.h.

Constructor & Destructor Documentation

◆ DefinitionImpl() [1/3]

DefinitionImpl::DefinitionImpl ( Definition * def,
const QCString & defFileName,
int defLine,
int defColumn,
const QCString & name,
const char * b = nullptr,
const char * d = nullptr,
bool isSymbol = TRUE )

Definition at line 237 of file definition.cpp.

241 : p(std::make_unique<Private>())
242{
243 setName(name);
244 p->def = def;
245 p->defLine = dl;
246 p->defColumn = dc;
247 p->init(df,name);
248 p->isSymbol = isSymbol;
249 if (isSymbol) addToMap(name,def);
250 _setBriefDescription(b,df,dl);
253 {
254 p->hidden = TRUE;
255 }
256}
void setName(const QCString &name)
void _setBriefDescription(const QCString &b, const QCString &briefFile, int briefLine)
const QCString & name() const
void _setDocumentation(const QCString &d, const QCString &docFile, int docLine, bool stripWhiteSpace, bool atTop)
std::unique_ptr< Private > p
static void addToMap(const QCString &name, Definition *d)
static bool matchExcludedSymbols(const QCString &name)
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34

References _setBriefDescription(), _setDocumentation(), addToMap(), FALSE, matchExcludedSymbols(), name(), p, setName(), and TRUE.

Referenced by DefinitionImpl(), DefinitionImpl(), mergeReferencedBy(), mergeReferences(), operator=(), and operator=().

◆ ~DefinitionImpl()

DefinitionImpl::~DefinitionImpl ( )

Definition at line 273 of file definition.cpp.

274{
275 if (p->isSymbol)
276 {
277 removeFromMap(p->symbolName,p->def);
278 }
279}
static void removeFromMap(const QCString &name, Definition *d)

References p, and removeFromMap().

◆ DefinitionImpl() [2/3]

DefinitionImpl::DefinitionImpl ( const DefinitionImpl & d)

Definition at line 258 of file definition.cpp.

259 : p(std::make_unique<Private>(*d.p))
260{
261 if (p->isSymbol) addToMap(p->name,p->def);
262}

References addToMap(), DefinitionImpl(), and p.

◆ DefinitionImpl() [3/3]

DefinitionImpl::DefinitionImpl ( DefinitionImpl && d)
delete

References DefinitionImpl().

Member Function Documentation

◆ _docsAlreadyAdded()

bool DefinitionImpl::_docsAlreadyAdded ( const QCString & doc,
QCString & sigList )
private

Definition at line 366 of file definition.cpp.

367{
368 uint8_t md5_sig[16];
369 char sigStr[33];
370 // to avoid mismatches due to differences in indenting, we first remove
371 // double whitespaces...
372 QCString docStr = doc.simplifyWhiteSpace();
373 MD5Buffer(docStr.data(),static_cast<unsigned int>(docStr.length()),md5_sig);
374 MD5SigToString(md5_sig,sigStr);
375 //printf("%s:_docsAlreadyAdded doc='%s' sig='%s' docSigs='%s'\n",
376 // qPrint(name()),qPrint(doc),qPrint(sigStr),qPrint(sigList));
377 if (sigList.find(sigStr)==-1) // new docs, add signature to prevent re-adding it
378 {
379 sigList+=QCString(":")+sigStr;
380 return FALSE;
381 }
382 else
383 {
384 return TRUE;
385 }
386}
int find(char c, int index=0, bool cs=TRUE) const
Definition qcstring.cpp:43
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:166
QCString simplifyWhiteSpace() const
return a copy of this string with leading and trailing whitespace removed and multiple whitespace cha...
Definition qcstring.cpp:190
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172

References QCString::data(), FALSE, QCString::find(), QCString::length(), QCString::simplifyWhiteSpace(), and TRUE.

Referenced by _setBriefDescription(), _setInbodyDocumentation(), and toDefinition().

◆ _getXRefListId()

int DefinitionImpl::_getXRefListId ( const QCString & listName) const
private

Definition at line 1332 of file definition.cpp.

1333{
1334 for (const RefItem *item : p->xrefListItems)
1335 {
1336 if (item->list()->listName()==listName)
1337 {
1338 return item->id();
1339 }
1340 }
1341 return -1;
1342}
int id() const
Definition reflist.h:52
RefList * list() const
Definition reflist.h:53
QCString listName() const
Definition reflist.h:101

References RefItem::id(), RefItem::list(), RefList::listName(), and p.

◆ _setBriefDescription()

void DefinitionImpl::_setBriefDescription ( const QCString & b,
const QCString & briefFile,
int briefLine )
private

Definition at line 441 of file definition.cpp.

442{
443 QCString brief = b;
444 brief = brief.stripWhiteSpace();
446 brief = brief.stripWhiteSpace();
447 if (brief.isEmpty()) return;
448 size_t bl = brief.length();
449 if (bl>0)
450 {
451 if (!theTranslator || theTranslator->needsPunctuation()) // add punctuation if needed
452 {
453 int c = brief.at(bl-1);
454 switch(c)
455 {
456 case '.': case '!': case '?': case ':': break;
457 default:
458 if (isUTF8CharUpperCase(brief.str(),0) && !lastUTF8CharIsMultibyte(brief.str())) brief+='.';
459 break;
460 }
461 }
462 }
463
464 if (!_docsAlreadyAdded(brief,p->briefSignatures))
465 {
466 if (p->brief && !p->brief->doc.isEmpty())
467 {
468 //printf("adding to details\n");
470 }
471 else
472 {
473 //fprintf(stderr,"DefinitionImpl::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
474 if (!p->brief.has_value())
475 {
476 p->brief = std::make_optional<BriefInfo>();
477 }
478 BriefInfo &briefInfo = p->brief.value();
479 briefInfo.doc=brief;
480 if (briefLine!=-1)
481 {
482 briefInfo.file = briefFile;
483 briefInfo.line = briefLine;
484 }
485 else
486 {
487 briefInfo.file = briefFile;
488 briefInfo.line = 1;
489 }
490 }
491 }
492 else
493 {
494 //printf("do nothing!\n");
495 }
496}
int briefLine() const
bool _docsAlreadyAdded(const QCString &doc, QCString &sigList)
QCString briefFile() const
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:593
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition qcstring.h:260
const std::string & str() const
Definition qcstring.h:552
virtual bool needsPunctuation()
add punctuation at the end of a brief description when needed and supported by the language
Definition translator.h:154
Translator * theTranslator
Definition language.cpp:71
QCString file
Definition definition.h:58
QCString doc
Definition definition.h:55
bool isUTF8CharUpperCase(const std::string &input, size_t pos)
Returns true iff the input string at byte position pos holds an upper case character.
Definition utf8.cpp:218
bool lastUTF8CharIsMultibyte(const std::string &input)
Returns true iff the last character in input is a multibyte character.
Definition utf8.cpp:212
QCString stripLeadingAndTrailingEmptyLines(const QCString &s, int &docLine)
Special version of QCString::stripWhiteSpace() that only strips completely blank lines.
Definition util.cpp:4966

References _docsAlreadyAdded(), _setDocumentation(), QCString::at(), briefFile(), briefLine(), BriefInfo::doc, FALSE, BriefInfo::file, QCString::isEmpty(), isUTF8CharUpperCase(), lastUTF8CharIsMultibyte(), QCString::length(), BriefInfo::line, p, QCString::str(), stripLeadingAndTrailingEmptyLines(), QCString::stripWhiteSpace(), theTranslator, and TRUE.

Referenced by DefinitionImpl(), and setBriefDescription().

◆ _setDocumentation()

void DefinitionImpl::_setDocumentation ( const QCString & d,
const QCString & docFile,
int docLine,
bool stripWhiteSpace,
bool atTop )
private

Definition at line 388 of file definition.cpp.

390{
391 //printf("%s::setDocumentation(%s,%s,%d,%d)\n",qPrint(name()),d,docFile,docLine,stripWhiteSpace);
392 if (d.isEmpty()) return;
393 QCString doc = d;
394 if (stripWhiteSpace)
395 {
397 }
398 else // don't strip whitespace
399 {
400 doc=d;
401 }
402 if (!_docsAlreadyAdded(doc,p->docSignatures))
403 {
404 //printf("setting docs for %s: '%s'\n",qPrint(name()),qPrint(m_doc));
405 if (!p->details.has_value())
406 {
407 p->details = std::make_optional<DocInfo>();
408 }
409 DocInfo &details = p->details.value();
410 if (details.doc.isEmpty()) // fresh detailed description
411 {
412 details.doc = doc;
413 }
414 else if (atTop) // another detailed description, append it to the start
415 {
416 details.doc = doc+"\n\n"+details.doc;
417 }
418 else // another detailed description, append it to the end
419 {
420 details.doc += "\n\n"+doc;
421 }
422 if (docLine!=-1) // store location if valid
423 {
424 details.file = docFile;
425 details.line = docLine;
426 }
427 else
428 {
429 details.file = docFile;
430 details.line = 1;
431 }
432 }
433}
int docLine() const
QCString docFile() const
std::string_view stripWhiteSpace(std::string_view s)
Given a string view s, returns a new, narrower view on that string, skipping over any leading or trai...
Definition stringutil.h:72
QCString doc
Definition definition.h:47
int line
Definition definition.h:48
QCString file
Definition definition.h:49

References docFile(), and docLine().

Referenced by _setBriefDescription(), DefinitionImpl(), and setDocumentation().

◆ _setInbodyDocumentation()

void DefinitionImpl::_setInbodyDocumentation ( const QCString & d,
const QCString & docFile,
int docLine )
private

Definition at line 504 of file definition.cpp.

505{
506 if (!_docsAlreadyAdded(doc,p->docSignatures))
507 {
508 if (!p->inbodyDocs.has_value())
509 {
510 p->inbodyDocs = std::make_optional<DocInfo>();
511 }
512 DocInfo &inbodyDocs = p->inbodyDocs.value();
513 if (inbodyDocs.doc.isEmpty()) // fresh inbody docs
514 {
515 inbodyDocs.doc = doc;
516 inbodyDocs.file = inbodyFile;
517 inbodyDocs.line = inbodyLine;
518 }
519 else // another inbody documentation fragment, append this to the end
520 {
521 inbodyDocs.doc += QCString("\n\n")+doc;
522 }
523 }
524}
int inbodyLine() const
QCString inbodyFile() const

References _docsAlreadyAdded(), DocInfo::doc, DocInfo::file, inbodyFile(), inbodyLine(), QCString::isEmpty(), DocInfo::line, and p.

Referenced by setInbodyDocumentation().

◆ _setSymbolName()

void DefinitionImpl::_setSymbolName ( const QCString & name)

Definition at line 1832 of file definition.cpp.

1833{
1834 p->symbolName=name;
1835}

References name(), and p.

◆ _symbolName()

QCString DefinitionImpl::_symbolName ( ) const

Definition at line 1837 of file definition.cpp.

1838{
1839 return p->symbolName;
1840}

References p.

◆ _writeSourceRefList()

void DefinitionImpl::_writeSourceRefList ( OutputList & ol,
const QCString & scopeName,
const QCString & text,
const std::unordered_map< std::string, MemberDef * > & membersMap,
bool  ) const
private

Write a reference to the source code fragments in which this definition is used.

Definition at line 1094 of file definition.cpp.

1097{
1098 if (!membersMap.empty())
1099 {
1100 auto members = refMapToVector(membersMap);
1101
1102 auto replaceFunc = [this,&members,scopeName,&ol](size_t entryIndex)
1103 {
1104 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1105 bool refLinkSource = Config_getBool(REFERENCES_LINK_SOURCE);
1106 const MemberDef *md=members[entryIndex];
1107 if (md)
1108 {
1109 QCString scope=md->getScopeString();
1110 QCString name=md->name();
1111 //printf("class=%p scope=%s scopeName=%s\n",md->getClassDef(),qPrint(scope),scopeName);
1112 if (!scope.isEmpty() && scope!=scopeName)
1113 {
1114 name.prepend(scope+getLanguageSpecificSeparator(p->lang));
1115 }
1116 if (!md->isObjCMethod() &&
1117 (md->isFunction() || md->isSlot() ||
1118 md->isPrototype() || md->isSignal()
1119 )
1120 )
1121 {
1122 name+="()";
1123 }
1124 if (sourceBrowser &&
1125 !(md->isLinkable() && !refLinkSource) &&
1126 md->getStartBodyLine()!=-1 &&
1127 md->getBodyDef()
1128 )
1129 {
1130 const int maxLineNrStr = 10;
1131 char anchorStr[maxLineNrStr];
1132 qsnprintf(anchorStr,maxLineNrStr,"l%05d",md->getStartBodyLine());
1133 //printf("Write object link to %s\n",qPrint(md->getBodyDef()->getSourceFileBase()));
1134 ol.writeObjectLink(QCString(),md->getBodyDef()->getSourceFileBase(),anchorStr,name);
1135 }
1136 else if (md->isLinkable())
1137 {
1139 md->getOutputFileBase(),
1140 md->anchor(),name);
1141 }
1142 else
1143 {
1144 ol.docify(name);
1145 }
1146 }
1147 };
1148
1149 ol.startParagraph("reference");
1150 ol.parseText(text);
1151 ol.docify(" ");
1152 writeMarkerList(ol,
1153 theTranslator->trWriteList(static_cast<int>(members.size())).str(),
1154 members.size(),
1155 replaceFunc);
1156 ol.writeString(".");
1157 ol.endParagraph();
1158
1159 }
1160}
virtual bool isLinkable() const =0
virtual QCString anchor() const =0
virtual const FileDef * getBodyDef() const =0
virtual QCString getReference() const =0
virtual QCString getSourceFileBase() const =0
virtual QCString getOutputFileBase() const =0
virtual int getStartBodyLine() const =0
virtual const QCString & name() const =0
virtual bool isSignal() const =0
virtual bool isObjCMethod() const =0
virtual bool isSlot() const =0
virtual bool isFunction() const =0
virtual QCString getScopeString() const =0
virtual bool isPrototype() const =0
void writeString(const QCString &text)
Definition outputlist.h:411
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
Definition outputlist.h:439
void docify(const QCString &s)
Definition outputlist.h:437
void startParagraph(const QCString &classDef=QCString())
Definition outputlist.h:407
void endParagraph()
Definition outputlist.h:409
void parseText(const QCString &textStr)
virtual QCString trWriteList(int numEntries)=0
#define Config_getBool(name)
Definition config.h:33
static MemberVector refMapToVector(const std::unordered_map< std::string, MemberDef * > &map)
#define qsnprintf
Definition qcstring.h:49
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5849
void writeMarkerList(OutputList &ol, const std::string &markerText, size_t numMarkers, std::function< void(size_t)> replaceFunc)
Definition util.cpp:1101

References Definition::anchor(), Config_getBool, OutputList::docify(), OutputList::endParagraph(), Definition::getBodyDef(), getLanguageSpecificSeparator(), Definition::getOutputFileBase(), Definition::getReference(), MemberDef::getScopeString(), Definition::getSourceFileBase(), Definition::getStartBodyLine(), QCString::isEmpty(), MemberDef::isFunction(), Definition::isLinkable(), MemberDef::isObjCMethod(), MemberDef::isPrototype(), MemberDef::isSignal(), MemberDef::isSlot(), Definition::name(), name(), p, OutputList::parseText(), qsnprintf, refMapToVector(), OutputList::startParagraph(), theTranslator, writeMarkerList(), OutputList::writeObjectLink(), and OutputList::writeString().

Referenced by writeSourceReffedBy(), and writeSourceRefs().

◆ addInnerCompound()

void DefinitionImpl::addInnerCompound ( Definition * d)

Definition at line 1227 of file definition.cpp.

1228{
1229 err("DefinitionImpl::addInnerCompound() called\n");
1230}
#define err(fmt,...)
Definition message.h:127

References err.

◆ addSectionsToDefinition()

void DefinitionImpl::addSectionsToDefinition ( const std::vector< const SectionInfo * > & anchorList)

Definition at line 306 of file definition.cpp.

307{
308 //printf("%s: addSectionsToDefinition(%d)\n",qPrint(name()),anchorList->count());
309 for (const SectionInfo *si : anchorList)
310 {
311 //printf("Add section '%s' to definition '%s'\n",
312 // qPrint(si->label()),qPrint(name()));
313 SectionManager &sm = SectionManager::instance();
314 SectionInfo *gsi=sm.find(si->label());
315 //printf("===== label=%s gsi=%p\n",qPrint(si->label()),(void*)gsi);
316 if (gsi==nullptr)
317 {
318 gsi = sm.add(*si);
319 }
320 if (p->sectionRefs.find(gsi->label())==nullptr)
321 {
322 p->sectionRefs.add(gsi);
323 }
324 gsi->setDefinition(p->def);
325 }
326}
const T * find(const std::string &key) const
Definition linkedmap.h:47
QCString label() const
Definition section.h:68
void setDefinition(Definition *d)
Definition section.h:82
SectionInfo * add(const SectionInfo &si)
Definition section.h:138
static SectionManager & instance()
returns a reference to the singleton
Definition section.h:178

References SectionManager::add(), LinkedMap< T, Hash, KeyEqual, Map >::find(), SectionManager::instance(), SectionInfo::label(), p, and SectionInfo::setDefinition().

◆ addSourceReferencedBy()

void DefinitionImpl::addSourceReferencedBy ( MemberDef * d,
const QCString & sourceRefName )

Definition at line 1206 of file definition.cpp.

1207{
1208 if (md)
1209 {
1210 p->sourceRefByDict.emplace(sourceRefName.str(),md);
1211 }
1212}

References p, and QCString::str().

◆ addSourceReferences()

void DefinitionImpl::addSourceReferences ( MemberDef * d,
const QCString & sourceRefName )

Definition at line 1214 of file definition.cpp.

1215{
1216 if (md)
1217 {
1218 p->sourceRefsDict.emplace(sourceRefName.str(),md);
1219 }
1220}

References p, and QCString::str().

◆ briefDescription()

QCString DefinitionImpl::briefDescription ( bool abbreviate = FALSE) const

Definition at line 1603 of file definition.cpp.

1604{
1605 //printf("%s::briefDescription(%d)='%s'\n",qPrint(name()),abbr,p->brief?qPrint(p->brief->doc):"<none>");
1606 return p->brief ?
1607 (abbr ? abbreviate(p->brief->doc,p->def->displayName()) : p->brief->doc) :
1608 QCString("");
1609}
static QCString abbreviate(const QCString &s, const QCString &name)

References abbreviate(), and p.

Referenced by hasBriefDescription().

◆ briefDescriptionAsTooltip()

QCString DefinitionImpl::briefDescriptionAsTooltip ( ) const

Definition at line 1622 of file definition.cpp.

1623{
1624 return p->brief ? p->brief->tooltip : QCString();
1625}

References p.

◆ briefFile()

QCString DefinitionImpl::briefFile ( ) const

Definition at line 1632 of file definition.cpp.

1633{
1634 return p->brief && !p->brief->file.isEmpty() ? p->brief->file : QCString("<"+p->name+">");
1635}

References p.

Referenced by _setBriefDescription(), operator=(), and setBriefDescription().

◆ briefLine()

int DefinitionImpl::briefLine ( ) const

Definition at line 1627 of file definition.cpp.

1628{
1629 return p->brief ? p->brief->line : 1;
1630}

References p.

Referenced by _setBriefDescription(), operator=(), and setBriefDescription().

◆ computeTooltip()

void DefinitionImpl::computeTooltip ( )

Definition at line 1611 of file definition.cpp.

1612{
1613 if (p->brief && p->brief->tooltip.isEmpty() && !p->brief->doc.isEmpty())
1614 {
1615 const MemberDef *md = p->def->definitionType()==Definition::TypeMember ? toMemberDef(p->def) : nullptr;
1616 const Definition *scope = p->def->definitionType()==Definition::TypeMember ? p->def->getOuterScope() : p->def;
1617 p->brief->tooltip = parseCommentAsText(scope,md,
1618 p->brief->doc, p->brief->file, p->brief->line);
1619 }
1620}
MemberDef * toMemberDef(Definition *d)
QCString parseCommentAsText(const Definition *scope, const MemberDef *md, const QCString &doc, const QCString &fileName, int lineNr)
Definition util.cpp:5305

References p, parseCommentAsText(), toMemberDef(), and Definition::TypeMember.

◆ docFile()

QCString DefinitionImpl::docFile ( ) const

Definition at line 1548 of file definition.cpp.

1549{
1550 if (p->details && !p->details->file.isEmpty()) return p->details->file;
1551 else if (p->brief && !p->brief->file.isEmpty()) return p->brief->file;
1552 else return "<" + p->name + ">";
1553}

References p.

Referenced by _setDocumentation(), operator=(), setDocumentation(), toDefinition(), and writeToc().

◆ docLine()

int DefinitionImpl::docLine ( ) const

Definition at line 1543 of file definition.cpp.

1544{
1545 return p->details ? p->details->line : p->brief ? p->brief->line : 1;
1546}

References p.

Referenced by _setDocumentation(), operator=(), setDocumentation(), and toDefinition().

◆ documentation()

QCString DefinitionImpl::documentation ( ) const

Definition at line 1538 of file definition.cpp.

1539{
1540 return p->details ? p->details->doc : QCString("");
1541}

References p.

◆ externalReference()

QCString DefinitionImpl::externalReference ( const QCString & relPath) const

Definition at line 1848 of file definition.cpp.

1849{
1850 QCString ref = getReference();
1851 if (!ref.isEmpty())
1852 {
1853 auto it = Doxygen::tagDestinationMap.find(ref.str());
1855 {
1856 QCString result(it->second);
1857 size_t l = result.length();
1858 if (!relPath.isEmpty() && l>0 && result.at(0)=='.')
1859 { // relative path -> prepend relPath.
1860 result.prepend(relPath);
1861 l+=relPath.length();
1862 }
1863 if (l>0 && result.at(l-1)!='/') result+='/';
1864 return result;
1865 }
1866 }
1867 return relPath;
1868}
QCString getReference() const
static StringMap tagDestinationMap
Definition doxygen.h:116
DirIterator end(const DirIterator &) noexcept
Definition dir.cpp:175

References QCString::at(), end(), getReference(), QCString::isEmpty(), QCString::length(), QCString::prepend(), QCString::str(), and Doxygen::tagDestinationMap.

◆ findInnerCompound()

const Definition * DefinitionImpl::findInnerCompound ( const QCString & name) const

Definition at line 1222 of file definition.cpp.

1223{
1224 return nullptr;
1225}

◆ getBodyDef()

const FileDef * DefinitionImpl::getBodyDef ( ) const

Definition at line 1717 of file definition.cpp.

1718{
1719 return p->body ? p->body->fileDef : nullptr;
1720}

References p.

◆ getDefColumn()

int DefinitionImpl::getDefColumn ( ) const

Definition at line 1885 of file definition.cpp.

1886{
1887 return p->defColumn;
1888}

References p.

◆ getDefFileExtension()

QCString DefinitionImpl::getDefFileExtension ( ) const

Definition at line 1662 of file definition.cpp.

1663{
1664 return p->defFileExt;
1665}

References p.

◆ getDefFileName()

QCString DefinitionImpl::getDefFileName ( ) const

Definition at line 1657 of file definition.cpp.

1658{
1659 return p->defFileName;
1660}

References p.

◆ getDefLine()

int DefinitionImpl::getDefLine ( ) const

Definition at line 1880 of file definition.cpp.

1881{
1882 return p->defLine;
1883}

References p.

◆ getEndBodyLine()

int DefinitionImpl::getEndBodyLine ( ) const

Definition at line 1712 of file definition.cpp.

1713{
1714 return p->body ? p->body->endLine : -1;
1715}

References p.

◆ getLanguage()

SrcLangExt DefinitionImpl::getLanguage ( ) const

Definition at line 1801 of file definition.cpp.

1802{
1803 return p->lang;
1804}

References p.

Referenced by qualifiedName().

◆ getOuterScope()

Definition * DefinitionImpl::getOuterScope ( ) const

Definition at line 1736 of file definition.cpp.

1737{
1738 return p->outerScope;
1739}

References p.

Referenced by navigationPathAsString().

◆ getReference()

QCString DefinitionImpl::getReference ( ) const

Definition at line 1692 of file definition.cpp.

1693{
1694 return p->ref;
1695}

References p.

Referenced by externalReference().

◆ getReferencedByMembers()

const MemberVector & DefinitionImpl::getReferencedByMembers ( ) const

Definition at line 1753 of file definition.cpp.

1754{
1755 std::lock_guard<std::mutex> lock(g_memberReferenceMutex);
1756 if (p->referencedByMembers.empty() && !p->sourceRefByDict.empty())
1757 {
1758 p->referencedByMembers = refMapToVector(p->sourceRefByDict);
1759 }
1760 return p->referencedByMembers;
1761}
static std::mutex g_memberReferenceMutex

References g_memberReferenceMutex, p, and refMapToVector().

◆ getReferencesMembers()

const MemberVector & DefinitionImpl::getReferencesMembers ( ) const

Definition at line 1743 of file definition.cpp.

1744{
1745 std::lock_guard<std::mutex> lock(g_memberReferenceMutex);
1746 if (p->referencesMembers.empty() && !p->sourceRefsDict.empty())
1747 {
1748 p->referencesMembers = refMapToVector(p->sourceRefsDict);
1749 }
1750 return p->referencesMembers;
1751}

References g_memberReferenceMutex, p, and refMapToVector().

◆ getSectionRefs()

const SectionRefs & DefinitionImpl::getSectionRefs ( ) const

Definition at line 1526 of file definition.cpp.

1527{
1528 return p->sectionRefs;
1529}

References p.

◆ getSourceAnchor()

QCString DefinitionImpl::getSourceAnchor ( ) const

Definition at line 929 of file definition.cpp.

930{
931 const int maxAnchorStrLen = 20;
932 char anchorStr[maxAnchorStrLen];
933 anchorStr[0]='\0';
934 if (p->body && p->body->startLine!=-1)
935 {
936 if (Htags::useHtags)
937 {
938 qsnprintf(anchorStr,maxAnchorStrLen,"L%d",p->body->defLine);
939 }
940 else
941 {
942 qsnprintf(anchorStr,maxAnchorStrLen,"l%05d",p->body->defLine);
943 }
944 }
945 return anchorStr;
946}
static bool useHtags
Definition htags.h:23

References p, qsnprintf, and Htags::useHtags.

Referenced by writeSourceDef().

◆ getSourceFileBase()

QCString DefinitionImpl::getSourceFileBase ( ) const

Definition at line 916 of file definition.cpp.

917{
918 ASSERT(p->def->definitionType()!=Definition::TypeFile); // file overloads this method
919 QCString fn;
920 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
921 if (sourceBrowser &&
922 p->body && p->body->startLine!=-1 && p->body->fileDef)
923 {
924 fn = p->body->fileDef->getSourceFileBase();
925 }
926 return fn;
927}
#define ASSERT(x)
Definition qcstring.h:39

References ASSERT, Config_getBool, p, and Definition::TypeFile.

Referenced by writeSourceDef().

◆ getStartBodyLine()

int DefinitionImpl::getStartBodyLine ( ) const

Definition at line 1707 of file definition.cpp.

1708{
1709 return p->body ? p->body->startLine : -1;
1710}

References p.

Referenced by writeToc().

◆ getStartDefLine()

int DefinitionImpl::getStartDefLine ( ) const

Definition at line 1702 of file definition.cpp.

1703{
1704 return p->body ? p->body->defLine : -1;
1705}

References p.

◆ hasBriefDescription()

bool DefinitionImpl::hasBriefDescription ( ) const

Definition at line 1842 of file definition.cpp.

1843{
1844 bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
1845 return !briefDescription().isEmpty() && briefMemberDesc;
1846}
QCString briefDescription(bool abbreviate=FALSE) const

References briefDescription(), Config_getBool, and QCString::isEmpty().

◆ hasDocumentation()

bool DefinitionImpl::hasDocumentation ( ) const

Definition at line 1182 of file definition.cpp.

1183{
1184 bool extractAll = Config_getBool(EXTRACT_ALL);
1185 //bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1186 bool hasDocs =
1187 (p->details && !p->details->doc.isEmpty()) || // has detailed docs
1188 (p->brief && !p->brief->doc.isEmpty()) || // has brief description
1189 (p->inbodyDocs && !p->inbodyDocs->doc.isEmpty()) || // has inbody docs
1190 extractAll //|| // extract everything
1191 // (sourceBrowser && p->body &&
1192 // p->body->startLine!=-1 && p->body->fileDef)
1193 ; // link to definition
1194 return hasDocs;
1195}

References Config_getBool, and p.

◆ hasSections()

bool DefinitionImpl::hasSections ( ) const

Definition at line 328 of file definition.cpp.

329{
330 //printf("DefinitionImpl::hasSections(%s) #sections=%zu\n",qPrint(name()), p->sectionRefs.size());
331 if (p->sectionRefs.empty()) return FALSE;
332 for (const SectionInfo *si : p->sectionRefs)
333 {
334 if (si->type().isSection())
335 {
336 return TRUE;
337 }
338 }
339 return FALSE;
340}
SectionType type() const
Definition section.h:70
constexpr bool isSection() const
Definition section.h:46

References FALSE, SectionType::isSection(), p, TRUE, and SectionInfo::type().

◆ hasSourceReffedBy()

bool DefinitionImpl::hasSourceReffedBy ( ) const

Definition at line 1172 of file definition.cpp.

1173{
1174 return !p->sourceRefByDict.empty();
1175}

References p.

◆ hasSourceRefs()

bool DefinitionImpl::hasSourceRefs ( ) const

Definition at line 1177 of file definition.cpp.

1178{
1179 return !p->sourceRefsDict.empty();
1180}

References p.

◆ hasSources()

bool DefinitionImpl::hasSources ( ) const

Definition at line 1019 of file definition.cpp.

1020{
1021 return p->body && p->body->startLine!=-1 &&
1022 p->body->endLine>=p->body->startLine &&
1023 p->body->fileDef;
1024}

References p.

Referenced by writeInlineCode().

◆ hasUserDocumentation()

bool DefinitionImpl::hasUserDocumentation ( ) const

Definition at line 1197 of file definition.cpp.

1198{
1199 bool hasDocs =
1200 (p->details && !p->details->doc.isEmpty()) ||
1201 (p->brief && !p->brief->doc.isEmpty()) ||
1202 (p->inbodyDocs && !p->inbodyDocs->doc.isEmpty());
1203 return hasDocs;
1204}

References p.

◆ id()

QCString DefinitionImpl::id ( ) const

Definition at line 301 of file definition.cpp.

302{
303 return p->id;
304}

References p.

Referenced by setId().

◆ inbodyDocumentation()

QCString DefinitionImpl::inbodyDocumentation ( ) const

Definition at line 1639 of file definition.cpp.

1640{
1641 return p->inbodyDocs ? p->inbodyDocs->doc : QCString("");
1642}

References p.

◆ inbodyFile()

QCString DefinitionImpl::inbodyFile ( ) const

Definition at line 1649 of file definition.cpp.

1650{
1651 return p->inbodyDocs && !p->inbodyDocs->file.isEmpty() ? p->inbodyDocs->file : QCString("<"+p->name+">");
1652}

References p.

Referenced by _setInbodyDocumentation(), and setInbodyDocumentation().

◆ inbodyLine()

int DefinitionImpl::inbodyLine ( ) const

Definition at line 1644 of file definition.cpp.

1645{
1646 return p->inbodyDocs ? p->inbodyDocs->line : 1;
1647}

References p.

Referenced by _setInbodyDocumentation(), and setInbodyDocumentation().

◆ isAnonymous()

bool DefinitionImpl::isAnonymous ( ) const

Definition at line 1875 of file definition.cpp.

1876{
1877 return p->isAnonymous;
1878}

References p.

◆ isArtificial()

bool DefinitionImpl::isArtificial ( ) const

Definition at line 1682 of file definition.cpp.

1683{
1684 return p->isArtificial;
1685}

References p.

◆ isExported()

bool DefinitionImpl::isExported ( ) const

Definition at line 1687 of file definition.cpp.

1688{
1689 return p->isExported;
1690}

References p.

◆ isHidden()

bool DefinitionImpl::isHidden ( ) const

Definition at line 1667 of file definition.cpp.

1668{
1669 return p->hidden;
1670}

References p.

◆ isLinkableViaGroup()

bool DefinitionImpl::isLinkableViaGroup ( ) const

Definition at line 1727 of file definition.cpp.

1728{
1729 for (const auto &gd : partOfGroups())
1730 {
1731 if (gd->isLinkable()) return true;
1732 }
1733 return false;
1734}
const GroupList & partOfGroups() const

References partOfGroups().

◆ isReference()

bool DefinitionImpl::isReference ( ) const

Definition at line 1697 of file definition.cpp.

1698{
1699 return !p->ref.isEmpty();
1700}

References p.

◆ isVisible()

bool DefinitionImpl::isVisible ( ) const

Definition at line 1677 of file definition.cpp.

1678{
1679 return p->def->isLinkable() && !p->hidden;
1680}

References p.

◆ isVisibleInProject()

bool DefinitionImpl::isVisibleInProject ( ) const

Definition at line 1672 of file definition.cpp.

1673{
1674 return p->def->isLinkableInProject() && !p->hidden;
1675}

References p.

◆ localName()

const QCString & DefinitionImpl::localName ( ) const

Definition at line 1291 of file definition.cpp.

1292{
1293 return p->localName;
1294}

References p.

Referenced by navigationPathAsString().

◆ makePartOfGroup()

void DefinitionImpl::makePartOfGroup ( GroupDef * gd)

Definition at line 1296 of file definition.cpp.

1297{
1298 p->partOfGroups.push_back(gd);
1299}

References p.

◆ mergeReferencedBy()

void DefinitionImpl::mergeReferencedBy ( const Definition * other)

Definition at line 1779 of file definition.cpp.

1780{
1781 const DefinitionImpl *defImpl = other->toDefinitionImpl_();
1782 if (defImpl)
1783 {
1784 for (const auto &kv : defImpl->p->sourceRefByDict)
1785 {
1786 auto it = p->sourceRefByDict.find(kv.first);
1787 if (it != p->sourceRefByDict.end())
1788 {
1789 p->sourceRefByDict.emplace(kv.first,kv.second);
1790 }
1791 }
1792 }
1793}
virtual const DefinitionImpl * toDefinitionImpl_() const =0
DefinitionImpl(Definition *def, const QCString &defFileName, int defLine, int defColumn, const QCString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=TRUE)

References DefinitionImpl(), p, and Definition::toDefinitionImpl_().

◆ mergeReferences()

void DefinitionImpl::mergeReferences ( const Definition * other)

Definition at line 1763 of file definition.cpp.

1764{
1765 const DefinitionImpl *defImpl = other->toDefinitionImpl_();
1766 if (defImpl)
1767 {
1768 for (const auto &kv : defImpl->p->sourceRefsDict)
1769 {
1770 auto it = p->sourceRefsDict.find(kv.first);
1771 if (it != p->sourceRefsDict.end())
1772 {
1773 p->sourceRefsDict.insert(kv);
1774 }
1775 }
1776 }
1777}

References DefinitionImpl(), p, and Definition::toDefinitionImpl_().

◆ mergeRefItems()

void DefinitionImpl::mergeRefItems ( Definition * d)

Definition at line 1306 of file definition.cpp.

1307{
1308 auto otherXrefList = d->xrefListItems();
1309
1310 // append vectors
1311 p->xrefListItems.reserve(p->xrefListItems.size()+otherXrefList.size());
1312 p->xrefListItems.insert (p->xrefListItems.end(),
1313 otherXrefList.begin(),otherXrefList.end());
1314
1315 // sort results on itemId
1316 std::stable_sort(p->xrefListItems.begin(),p->xrefListItems.end(),
1317 [](RefItem *left,RefItem *right)
1318 { return left->id() <right->id() ||
1319 (left->id()==right->id() &&
1320 left->list()->listName() < right->list()->listName());
1321 });
1322
1323 // filter out duplicates
1324 auto last = std::unique(p->xrefListItems.begin(),p->xrefListItems.end(),
1325 [](const RefItem *left,const RefItem *right)
1326 { return left->id()==right->id() &&
1327 left->list()->listName()==right->list()->listName();
1328 });
1329 p->xrefListItems.erase(last, p->xrefListItems.end());
1330}
virtual const RefItemVector & xrefListItems() const =0

References p, and Definition::xrefListItems().

◆ name()

const QCString & DefinitionImpl::name ( ) const

◆ navigationPathAsString()

QCString DefinitionImpl::navigationPathAsString ( ) const

Returns the string used in the footer for $navpath when GENERATE_TREEVIEW is enabled

Definition at line 1387 of file definition.cpp.

1388{
1389 QCString result;
1390 Definition *outerScope = getOuterScope();
1391 QCString locName = localName();
1392 if (outerScope && outerScope!=Doxygen::globalScope)
1393 {
1394 result+=outerScope->navigationPathAsString();
1395 }
1396 else if (p->def->definitionType()==Definition::TypeFile &&
1397 toFileDef(p->def)->getDirDef())
1398 {
1399 result+=(toFileDef(p->def))->getDirDef()->navigationPathAsString();
1400 }
1401 result+="<li class=\"navelem\">";
1402 if (p->def->isLinkableInProject())
1403 {
1404 QCString fn = p->def->getOutputFileBase();
1406 if (p->def->definitionType()==Definition::TypeGroup &&
1407 !toGroupDef(p->def)->groupTitle().isEmpty())
1408 {
1409 QCString title = parseCommentAsHtml(p->def,nullptr,toGroupDef(p->def)->groupTitle(),
1410 p->def->getDefFileName(),p->def->getDefLine());
1411 result+="<a href=\"$relpath^"+fn+"\">"+title+"</a>";
1412 }
1413 else if (p->def->definitionType()==Definition::TypePage &&
1414 toPageDef(p->def)->hasTitle())
1415 {
1416 QCString title = parseCommentAsHtml(p->def,nullptr,toPageDef(p->def)->title(),
1417 p->def->getDefFileName(),p->def->getDefLine());
1418 result+="<a href=\"$relpath^"+fn+"\">"+title+"</a>";
1419 }
1420 else if (p->def->definitionType()==Definition::TypeClass)
1421 {
1422 QCString name = toClassDef(p->def)->className();
1423 if (name.endsWith("-p"))
1424 {
1425 name = name.left(name.length()-2);
1426 }
1427 result+="<a href=\"$relpath^"+fn;
1428 if (!p->def->anchor().isEmpty()) result+="#"+p->def->anchor();
1429 result+="\">"+convertToHtml(name)+"</a>";
1430 }
1431 else
1432 {
1433 result+="<a href=\"$relpath^"+fn+"\">"+
1434 convertToHtml(locName)+"</a>";
1435 }
1436 }
1437 else
1438 {
1439 result+="<b>"+convertToHtml(locName)+"</b>";
1440 }
1441 result+="</li>";
1442 return result;
1443}
virtual QCString className() const =0
Returns the name of the class including outer classes, but not including namespaces.
virtual QCString navigationPathAsString() const =0
const QCString & localName() const
Definition * getOuterScope() const
static NamespaceDefMutable * globalScope
Definition doxygen.h:121
virtual DirDef * getDirDef() const =0
virtual QCString groupTitle() const =0
virtual bool hasTitle() const =0
virtual QCString title() const =0
ClassDef * toClassDef(Definition *d)
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1956
GroupDef * toGroupDef(Definition *d)
PageDef * toPageDef(Definition *d)
Definition pagedef.cpp:481
QCString parseCommentAsHtml(const Definition *scope, const MemberDef *member, const QCString &doc, const QCString &fileName, int lineNr)
Definition util.cpp:5361
QCString convertToHtml(const QCString &s, bool keepEntities)
Definition util.cpp:3905
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4863

References addHtmlExtensionIfMissing(), ClassDef::className(), convertToHtml(), getOuterScope(), Doxygen::globalScope, localName(), name(), Definition::navigationPathAsString(), p, parseCommentAsHtml(), toClassDef(), toFileDef(), toGroupDef(), toPageDef(), Definition::TypeClass, Definition::TypeFile, Definition::TypeGroup, and Definition::TypePage.

Referenced by writeNavigationPath().

◆ operator=() [1/2]

DefinitionImpl & DefinitionImpl::operator= ( const DefinitionImpl & d)

Definition at line 264 of file definition.cpp.

265{
266 if (this!=&other)
267 {
268 p = std::make_unique<Private>(*other.p);
269 }
270 return *this;
271}

References DefinitionImpl(), and p.

◆ operator=() [2/2]

◆ partOfGroups()

const GroupList & DefinitionImpl::partOfGroups ( ) const

Definition at line 1722 of file definition.cpp.

1723{
1724 return p->partOfGroups;
1725}

References p.

Referenced by isLinkableViaGroup().

◆ pathFragment()

QCString DefinitionImpl::pathFragment ( ) const

Definition at line 1349 of file definition.cpp.

1350{
1351 QCString result;
1352 if (p->outerScope && p->outerScope!=Doxygen::globalScope)
1353 {
1354 result = p->outerScope->pathFragment();
1355 }
1356 if (p->def->isLinkable())
1357 {
1358 if (!result.isEmpty()) result+="/";
1359 if (p->def->definitionType()==Definition::TypeGroup &&
1360 !toGroupDef(p->def)->groupTitle().isEmpty())
1361 {
1362 result+=toGroupDef(p->def)->groupTitle();
1363 }
1364 else if (p->def->definitionType()==Definition::TypePage &&
1365 toPageDef(p->def)->hasTitle())
1366 {
1367 result+=toPageDef(p->def)->title();
1368 }
1369 else
1370 {
1371 result+=p->localName;
1372 }
1373 }
1374 else
1375 {
1376 result+=p->localName;
1377 }
1378 return result;
1379}

References Doxygen::globalScope, GroupDef::groupTitle(), QCString::isEmpty(), p, PageDef::title(), toGroupDef(), toPageDef(), Definition::TypeGroup, and Definition::TypePage.

◆ qualifiedName()

QCString DefinitionImpl::qualifiedName ( ) const

Definition at line 1234 of file definition.cpp.

1235{
1236 std::lock_guard<std::recursive_mutex> lock(g_qualifiedNameMutex);
1237 if (!p->qualifiedName.isEmpty())
1238 {
1239 return p->qualifiedName;
1240 }
1241
1242 //printf("start %s::qualifiedName() localName=%s\n",qPrint(name()),qPrint(p->localName));
1243 if (p->outerScope==nullptr)
1244 {
1245 if (p->localName=="<globalScope>")
1246 {
1247 return "";
1248 }
1249 else
1250 {
1251 return p->localName;
1252 }
1253 }
1254
1255 if (p->outerScope->name()=="<globalScope>")
1256 {
1257 p->qualifiedName = p->localName;
1258 }
1259 else
1260 {
1261 p->qualifiedName = p->outerScope->qualifiedName()+
1263 p->localName;
1264 }
1265 //printf("end %s::qualifiedName()=%s\n",qPrint(name()),qPrint(p->qualifiedName));
1266 //count--;
1267 return p->qualifiedName;
1268}
SrcLangExt getLanguage() const
static std::recursive_mutex g_qualifiedNameMutex

References g_qualifiedNameMutex, getLanguage(), getLanguageSpecificSeparator(), and p.

◆ setArtificial()

void DefinitionImpl::setArtificial ( bool b)

Definition at line 1811 of file definition.cpp.

1812{
1813 p->isArtificial = b;
1814}

References p.

◆ setBodyDef()

void DefinitionImpl::setBodyDef ( const FileDef * fd)

Definition at line 1010 of file definition.cpp.

1011{
1012 if (!p->body.has_value())
1013 {
1014 p->body = std::make_optional<BodyInfo>();
1015 }
1016 p->body.value().fileDef=fd;
1017}

References p.

◆ setBodySegment()

void DefinitionImpl::setBodySegment ( int defLine,
int bls,
int ble )

Definition at line 998 of file definition.cpp.

999{
1000 if (!p->body.has_value())
1001 {
1002 p->body = std::make_optional<BodyInfo>();
1003 }
1004 BodyInfo &body = p->body.value();
1005 body.defLine = defLine;
1006 body.startLine = bls;
1007 body.endLine = ble;
1008}
int startLine
line number of the start of the definition's body
Definition definition.h:65
int endLine
line number of the end of the definition's body
Definition definition.h:66
int defLine
line number of the start of the definition
Definition definition.h:64

References BodyInfo::defLine, BodyInfo::endLine, p, and BodyInfo::startLine.

◆ setBriefDescription()

void DefinitionImpl::setBriefDescription ( const QCString & b,
const QCString & briefFile,
int briefLine )

Definition at line 498 of file definition.cpp.

499{
500 if (b.isEmpty()) return;
502}

References _setBriefDescription(), briefFile(), briefLine(), and QCString::isEmpty().

◆ setDefFile()

void DefinitionImpl::setDefFile ( const QCString & df,
int defLine,
int defColumn )

Definition at line 147 of file definition.cpp.

148{
149 p->setDefFileName(df);
150 p->defLine = defLine;
151 p->defColumn = defCol;
152}

References p.

◆ setDocumentation()

void DefinitionImpl::setDocumentation ( const QCString & d,
const QCString & docFile,
int docLine,
bool stripWhiteSpace = TRUE )

Definition at line 435 of file definition.cpp.

436{
437 if (d.isEmpty()) return;
439}

References _setDocumentation(), docFile(), docLine(), FALSE, QCString::isEmpty(), and stripWhiteSpace().

◆ setExported()

void DefinitionImpl::setExported ( bool b)

Definition at line 1816 of file definition.cpp.

1817{
1818 p->isExported = b;
1819}

References p.

◆ setHidden()

void DefinitionImpl::setHidden ( bool b)

Definition at line 1806 of file definition.cpp.

1807{
1808 p->hidden = p->hidden || b;
1809}

References p.

◆ setId()

void DefinitionImpl::setId ( const QCString & name)

Definition at line 290 of file definition.cpp.

291{
292 if (id.isEmpty()) return;
293 p->id = id;
295 {
296 //printf("DefinitionImpl::setId '%s'->'%s'\n",id,qPrint(p->name));
297 Doxygen::clangUsrMap->emplace(id.str(),p->def);
298 }
299}
QCString id() const
static ClangUsrMap * clangUsrMap
Definition doxygen.h:126

References Doxygen::clangUsrMap, id(), and p.

◆ setInbodyDocumentation()

void DefinitionImpl::setInbodyDocumentation ( const QCString & d,
const QCString & docFile,
int docLine )

Definition at line 526 of file definition.cpp.

527{
528 if (d.isEmpty()) return;
530}
void _setInbodyDocumentation(const QCString &d, const QCString &docFile, int docLine)

References _setInbodyDocumentation(), inbodyFile(), inbodyLine(), and QCString::isEmpty().

◆ setLanguage()

void DefinitionImpl::setLanguage ( SrcLangExt lang)

Definition at line 1826 of file definition.cpp.

1827{
1828 p->lang=lang;
1829}

References p.

◆ setLocalName()

void DefinitionImpl::setLocalName ( const QCString & name)

Definition at line 1821 of file definition.cpp.

1822{
1823 p->localName=name;
1824}

References name(), and p.

◆ setName()

void DefinitionImpl::setName ( const QCString & name)

Definition at line 281 of file definition.cpp.

282{
283 if (name.isEmpty()) return;
284 p->name = name;
285 p->isAnonymous = p->name.isEmpty() ||
286 p->name.at(0)=='@' ||
287 p->name.find("::@")!=-1;
288}

References name(), and p.

Referenced by DefinitionImpl().

◆ setOuterScope()

void DefinitionImpl::setOuterScope ( Definition * d)

Definition at line 1270 of file definition.cpp.

1271{
1272 std::lock_guard<std::recursive_mutex> lock(g_qualifiedNameMutex);
1273 //printf("%s::setOuterScope(%s)\n",qPrint(name()),d?qPrint(d->name()):"<none>");
1274 Definition *outerScope = p->outerScope;
1275 bool found=false;
1276 // make sure that we are not creating a recursive scope relation.
1277 while (outerScope && !found)
1278 {
1279 found = (outerScope==d);
1280 outerScope = outerScope->getOuterScope();
1281 }
1282 if (!found)
1283 {
1284 p->qualifiedName.clear(); // flush cached scope name
1285 p->outerScope = d;
1286 }
1287 p->hidden = p->hidden || d->isHidden();
1288 assert(p->def!=p->outerScope);
1289}
virtual bool isHidden() const =0
virtual Definition * getOuterScope() const =0

References g_qualifiedNameMutex, Definition::getOuterScope(), Definition::isHidden(), and p.

◆ setReference()

void DefinitionImpl::setReference ( const QCString & r)

Definition at line 1796 of file definition.cpp.

1797{
1798 p->ref=r;
1799}

References p.

◆ setRefItems()

void DefinitionImpl::setRefItems ( const RefItemVector & sli)

Definition at line 1301 of file definition.cpp.

1302{
1303 p->xrefListItems.insert(p->xrefListItems.end(), sli.cbegin(), sli.cend());
1304}

References p.

◆ symbolName()

QCString DefinitionImpl::symbolName ( ) const

Definition at line 1531 of file definition.cpp.

1532{
1533 return p->symbolName;
1534}

References p.

Referenced by addToMap().

◆ writeDocAnchorsToTagFile()

void DefinitionImpl::writeDocAnchorsToTagFile ( TextStream & tagFile) const

Definition at line 342 of file definition.cpp.

343{
344 if (!p->sectionRefs.empty())
345 {
346 //printf("%s: writeDocAnchorsToTagFile(%d)\n",qPrint(name()),p->sectionRef.size());
347 for (const SectionInfo *si : p->sectionRefs)
348 {
349 if (!si->generated() && si->ref().isEmpty() && !AnchorGenerator::instance().isGenerated(si->label().str()))
350 {
351 //printf("write an entry!\n");
352 if (p->def->definitionType()==Definition::TypeMember) tagFile << " ";
353 QCString fn = si->fileName();
355 tagFile << " <docanchor file=\"" << fn << "\"";
356 if (!si->title().isEmpty())
357 {
358 tagFile << " title=\"" << convertToXML(si->title()) << "\"";
359 }
360 tagFile << ">" << si->label() << "</docanchor>\n";
361 }
362 }
363 }
364}
bool isGenerated(const std::string &anchor) const
Returns true iff anchor is one of the generated anchors.
Definition anchor.cpp:122
static AnchorGenerator & instance()
Returns the singleton instance.
Definition anchor.cpp:38
QCString ref() const
Definition section.h:71
QCString fileName() const
Definition section.h:73
bool generated() const
Definition section.h:74
QCString title() const
Definition section.h:69
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3854

References addHtmlExtensionIfMissing(), convertToXML(), SectionInfo::fileName(), SectionInfo::generated(), AnchorGenerator::instance(), QCString::isEmpty(), SectionInfo::label(), p, SectionInfo::ref(), QCString::str(), SectionInfo::title(), and Definition::TypeMember.

◆ writeInlineCode()

void DefinitionImpl::writeInlineCode ( OutputList & ol,
const QCString & scopeName ) const

Write code of this definition into the documentation

Definition at line 1027 of file definition.cpp.

1028{
1029 const MemberDef *thisMd = nullptr;
1030 if (p->def->definitionType()==Definition::TypeMember)
1031 {
1032 thisMd = toMemberDef(p->def);
1033 }
1034 bool inlineSources = thisMd && thisMd->hasInlineSource();
1035 //printf("Source Fragment %s: %d-%d\n",qPrint(name()),
1036 // p->body->startLine,p->body->endLine);
1037 if (inlineSources && hasSources())
1038 {
1039 ol.pushGeneratorState();
1040 QCString codeFragment;
1041 bool isMacro = thisMd && thisMd->memberType()==MemberType::Define;
1042 int actualStart=p->body->startLine,actualEnd=p->body->endLine;
1043 if (readCodeFragment(p->body->fileDef->absFilePath(),isMacro,
1044 actualStart,actualEnd,codeFragment)
1045 )
1046 {
1047 //printf("Adding code fragment '%s' ext='%s' range=%d-%d\n",
1048 // qPrint(codeFragment),qPrint(p->defFileExt),actualStart,actualEnd);
1049 auto intf = Doxygen::parserManager->getCodeParser(p->defFileExt);
1050 intf->resetCodeParserState();
1051 //printf("Read:\n'%s'\n\n",qPrint(codeFragment));
1052
1053 auto &codeOL = ol.codeGenerators();
1054 codeOL.startCodeFragment("DoxyCode");
1055 size_t indent = 0;
1056 intf->parseCode(codeOL, // codeOutIntf
1057 scopeName, // scope
1058 detab(codeFragment,indent), // input
1059 p->lang, // lang
1060 Config_getBool(STRIP_CODE_COMMENTS),
1061 FALSE, // isExample
1062 QCString(), // exampleName
1063 p->body->fileDef, // fileDef
1064 actualStart, // startLine
1065 actualEnd, // endLine
1066 TRUE, // inlineFragment
1067 thisMd, // memberDef
1068 TRUE // show line numbers
1069 );
1070 codeOL.endCodeFragment("DoxyCode");
1071 }
1072 ol.popGeneratorState();
1073 }
1074}
bool hasSources() const
static ParserManager * parserManager
Definition doxygen.h:131
virtual bool hasInlineSource() const =0
virtual MemberType memberType() const =0
void startCodeFragment(const QCString &style)
Definition outputlist.h:279
const OutputCodeList & codeGenerators() const
Definition outputlist.h:358
void pushGeneratorState()
void popGeneratorState()
std::unique_ptr< CodeParserInterface > getCodeParser(const QCString &extension)
Gets the interface to the parser associated with a given extension.
Definition parserintf.h:218
bool readCodeFragment(const QCString &fileName, bool isMacro, int &startLine, int &endLine, QCString &result)
Reads a fragment from file fileName starting with line startLine and ending with line endLine.
QCString detab(const QCString &s, size_t &refIndent)
Definition util.cpp:6670

References OutputList::codeGenerators(), Config_getBool, Define, detab(), FALSE, MemberDef::hasInlineSource(), hasSources(), MemberDef::memberType(), p, Doxygen::parserManager, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), readCodeFragment(), OutputCodeList::startCodeFragment(), toMemberDef(), TRUE, and Definition::TypeMember.

◆ writeNavigationPath()

void DefinitionImpl::writeNavigationPath ( OutputList & ol) const

Definition at line 1446 of file definition.cpp.

1447{
1448 ol.pushGeneratorState();
1450
1451 QCString navPath;
1452 navPath += "<div id=\"nav-path\" class=\"navpath\">\n"
1453 " <ul>\n";
1454 navPath += navigationPathAsString();
1455 navPath += " </ul>\n"
1456 "</div>\n";
1457 ol.writeNavigationPath(navPath);
1458
1459 ol.popGeneratorState();
1460}
QCString navigationPathAsString() const
void disableAllBut(OutputType o)
void writeNavigationPath(const QCString &s)
Definition outputlist.h:608

References OutputList::disableAllBut(), Html, navigationPathAsString(), OutputList::popGeneratorState(), OutputList::pushGeneratorState(), and OutputList::writeNavigationPath().

◆ writePageNavigation()

void DefinitionImpl::writePageNavigation ( OutputList & ol) const

Definition at line 1898 of file definition.cpp.

1899{
1900}

◆ writeQuickMemberLinks()

void DefinitionImpl::writeQuickMemberLinks ( OutputList & ,
const MemberDef *  ) const

Definition at line 1890 of file definition.cpp.

1891{
1892}

◆ writeSourceDef()

void DefinitionImpl::writeSourceDef ( OutputList & ol) const

Write a reference to the source code defining this definition

Definition at line 949 of file definition.cpp.

950{
951 //printf("DefinitionImpl::writeSourceRef %d %p\n",bodyLine,bodyDef);
952 QCString fn = getSourceFileBase();
953 if (!fn.isEmpty())
954 {
955 QCString refText = theTranslator->trDefinedAtLineInSourceFile();
956 int lineMarkerPos = refText.find("@0");
957 int fileMarkerPos = refText.find("@1");
958 if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this.
959 {
960 QCString lineStr;
961 lineStr.sprintf("%d",p->body->defLine);
962 QCString anchorStr = getSourceAnchor();
963 ol.startParagraph("definition");
964 if (lineMarkerPos<fileMarkerPos) // line marker before file marker
965 {
966 // write text left from linePos marker
967 ol.parseText(refText.left(lineMarkerPos));
968 ol.writeObjectLink(QCString(),fn,anchorStr,lineStr);
969 // write text between markers
970 ol.parseText(refText.mid(lineMarkerPos+2,fileMarkerPos-lineMarkerPos-2));
971 // write file link
972 ol.writeObjectLink(QCString(),fn,QCString(),p->body->fileDef->name());
973 // write text right from file marker
974 ol.parseText(refText.right(refText.length()-static_cast<size_t>(fileMarkerPos)-2));
975 }
976 else // file marker before line marker
977 {
978 // write text left from file marker
979 ol.parseText(refText.left(fileMarkerPos));
980 // write file link
981 ol.writeObjectLink(QCString(),fn,QCString(),p->body->fileDef->name());
982 // write text between markers
983 ol.parseText(refText.mid(fileMarkerPos+2,lineMarkerPos-fileMarkerPos-2));
984 // write line link
985 ol.writeObjectLink(QCString(),fn,anchorStr,lineStr);
986 // write text right from linePos marker
987 ol.parseText(refText.right(refText.length()-static_cast<size_t>(lineMarkerPos)-2));
988 }
989 ol.endParagraph();
990 }
991 else
992 {
993 err("translation error: invalid markers in trDefinedAtLineInSourceFile()\n");
994 }
995 }
996}
QCString getSourceFileBase() const
QCString getSourceAnchor() const
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:241
QCString right(size_t len) const
Definition qcstring.h:234
QCString & sprintf(const char *format,...)
Definition qcstring.cpp:29
QCString left(size_t len) const
Definition qcstring.h:229
virtual QCString trDefinedAtLineInSourceFile()=0

References OutputList::endParagraph(), err, QCString::find(), getSourceAnchor(), getSourceFileBase(), QCString::isEmpty(), QCString::left(), QCString::length(), QCString::mid(), p, OutputList::parseText(), QCString::right(), QCString::sprintf(), OutputList::startParagraph(), theTranslator, and OutputList::writeObjectLink().

◆ writeSourceReffedBy()

void DefinitionImpl::writeSourceReffedBy ( OutputList & ol,
const QCString & scopeName ) const

Definition at line 1162 of file definition.cpp.

1163{
1164 _writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),p->sourceRefByDict,FALSE);
1165}
void _writeSourceRefList(OutputList &ol, const QCString &scopeName, const QCString &text, const std::unordered_map< std::string, MemberDef * > &members, bool) const
virtual QCString trReferencedBy()=0

References _writeSourceRefList(), FALSE, p, and theTranslator.

◆ writeSourceRefs()

void DefinitionImpl::writeSourceRefs ( OutputList & ol,
const QCString & scopeName ) const

Definition at line 1167 of file definition.cpp.

1168{
1169 _writeSourceRefList(ol,scopeName,theTranslator->trReferences(),p->sourceRefsDict,TRUE);
1170}
virtual QCString trReferences()=0

References _writeSourceRefList(), p, theTranslator, and TRUE.

◆ writeSummaryLinks()

void DefinitionImpl::writeSummaryLinks ( OutputList & ) const

Definition at line 1894 of file definition.cpp.

1895{
1896}

◆ writeToc()

void DefinitionImpl::writeToc ( OutputList & ol,
const LocalToc & lt ) const

Definition at line 1462 of file definition.cpp.

1463{
1464 // first check if we have anything to show or if the outline is already shown on the outline panel
1465 if (p->sectionRefs.empty() || (Config_getBool(GENERATE_TREEVIEW) && Config_getBool(PAGE_OUTLINE_PANEL))) return;
1466 // generate the embedded toc
1467 //ol.writeLocalToc(p->sectionRefs,localToc);
1468
1469 auto generateTocEntries = [this,&ol]()
1470 {
1471 for (const SectionInfo *si : p->sectionRefs)
1472 {
1473 if (si->type().isSection())
1474 {
1475 ol.startTocEntry(si);
1476 const MemberDef *md = p->def->definitionType()==Definition::TypeMember ? toMemberDef(p->def) : nullptr;
1477 const Definition *scope = p->def->definitionType()==Definition::TypeMember ? p->def->getOuterScope() : p->def;
1478 QCString docTitle = si->title();
1479 if (docTitle.isEmpty()) docTitle = si->label();
1480 ol.generateDoc(docFile(),
1482 scope,
1483 md,
1484 docTitle,
1485 DocOptions()
1486 .setIndexWords(true)
1487 .setSingleLine(true)
1488 .setSectionLevel(si->type().level())
1489 );
1490 ol.endTocEntry(si);
1491 }
1492 }
1493 };
1494
1495 if (localToc.isHtmlEnabled())
1496 {
1497 ol.pushGeneratorState();
1499 ol.startLocalToc(localToc.htmlLevel());
1500 generateTocEntries();
1501 ol.endLocalToc();
1502 ol.popGeneratorState();
1503 }
1504 if (localToc.isDocbookEnabled())
1505 {
1506 ol.pushGeneratorState();
1508 ol.startLocalToc(localToc.docbookLevel());
1509 generateTocEntries();
1510 ol.endLocalToc();
1511 ol.popGeneratorState();
1512 }
1513 if (localToc.isLatexEnabled())
1514 {
1515 ol.pushGeneratorState();
1517 ol.startLocalToc(localToc.latexLevel());
1518 // no gneerateTocEntries() needed for LaTeX
1519 ol.endLocalToc();
1520 ol.popGeneratorState();
1521 }
1522}
int getStartBodyLine() const
void startTocEntry(const SectionInfo *si)
Definition outputlist.h:748
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, const DocOptions &options)
void endLocalToc()
Definition outputlist.h:746
void endTocEntry(const SectionInfo *si)
Definition outputlist.h:750
void startLocalToc(int level)
Definition outputlist.h:744
constexpr int level() const
Definition section.h:45

References Config_getBool, OutputList::disableAllBut(), Docbook, LocalToc::docbookLevel(), docFile(), OutputList::endLocalToc(), OutputList::endTocEntry(), OutputList::generateDoc(), getStartBodyLine(), Html, LocalToc::htmlLevel(), LocalToc::isDocbookEnabled(), QCString::isEmpty(), LocalToc::isHtmlEnabled(), LocalToc::isLatexEnabled(), SectionType::isSection(), SectionInfo::label(), Latex, LocalToc::latexLevel(), SectionType::level(), p, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), OutputList::startLocalToc(), OutputList::startTocEntry(), SectionInfo::title(), toMemberDef(), SectionInfo::type(), and Definition::TypeMember.

◆ xrefListItems()

const RefItemVector & DefinitionImpl::xrefListItems ( ) const

Definition at line 1344 of file definition.cpp.

1345{
1346 return p->xrefListItems;
1347}

References p.

Member Data Documentation

◆ p

std::unique_ptr<Private> DefinitionImpl::p
private

Definition at line 144 of file definitionimpl.h.

Referenced by _getXRefListId(), _setBriefDescription(), _setInbodyDocumentation(), _setSymbolName(), _symbolName(), _writeSourceRefList(), addSectionsToDefinition(), addSourceReferencedBy(), addSourceReferences(), briefDescription(), briefDescriptionAsTooltip(), briefFile(), briefLine(), computeTooltip(), DefinitionImpl(), DefinitionImpl(), docFile(), docLine(), documentation(), getBodyDef(), getDefColumn(), getDefFileExtension(), getDefFileName(), getDefLine(), getEndBodyLine(), getLanguage(), getOuterScope(), getReference(), getReferencedByMembers(), getReferencesMembers(), getSectionRefs(), getSourceAnchor(), getSourceFileBase(), getStartBodyLine(), getStartDefLine(), hasDocumentation(), hasSections(), hasSourceReffedBy(), hasSourceRefs(), hasSources(), hasUserDocumentation(), id(), inbodyDocumentation(), inbodyFile(), inbodyLine(), isAnonymous(), isArtificial(), isExported(), isHidden(), isReference(), isVisible(), isVisibleInProject(), localName(), makePartOfGroup(), mergeReferencedBy(), mergeReferences(), mergeRefItems(), name(), navigationPathAsString(), operator=(), partOfGroups(), pathFragment(), qualifiedName(), setArtificial(), setBodyDef(), setBodySegment(), setDefFile(), setExported(), setHidden(), setId(), setLanguage(), setLocalName(), setName(), setOuterScope(), setReference(), setRefItems(), symbolName(), toDefinition(), writeDocAnchorsToTagFile(), writeInlineCode(), writeSourceDef(), writeSourceReffedBy(), writeSourceRefs(), writeToc(), xrefListItems(), and ~DefinitionImpl().


The documentation for this class was generated from the following files: