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 1330 of file definition.cpp.

1331{
1332 for (const RefItem *item : p->xrefListItems)
1333 {
1334 if (item->list()->listName()==listName)
1335 {
1336 return item->id();
1337 }
1338 }
1339 return -1;
1340}
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 1830 of file definition.cpp.

1831{
1832 p->symbolName=name;
1833}

References name(), and p.

◆ _symbolName()

QCString DefinitionImpl::_symbolName ( ) const

Definition at line 1835 of file definition.cpp.

1836{
1837 return p->symbolName;
1838}

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 1092 of file definition.cpp.

1095{
1096 if (!membersMap.empty())
1097 {
1098 auto members = refMapToVector(membersMap);
1099
1100 auto replaceFunc = [this,&members,scopeName,&ol](size_t entryIndex)
1101 {
1102 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1103 bool refLinkSource = Config_getBool(REFERENCES_LINK_SOURCE);
1104 const MemberDef *md=members[entryIndex];
1105 if (md)
1106 {
1107 QCString scope=md->getScopeString();
1108 QCString name=md->name();
1109 //printf("class=%p scope=%s scopeName=%s\n",md->getClassDef(),qPrint(scope),scopeName);
1110 if (!scope.isEmpty() && scope!=scopeName)
1111 {
1112 name.prepend(scope+getLanguageSpecificSeparator(p->lang));
1113 }
1114 if (!md->isObjCMethod() &&
1115 (md->isFunction() || md->isSlot() ||
1116 md->isPrototype() || md->isSignal()
1117 )
1118 )
1119 {
1120 name+="()";
1121 }
1122 if (sourceBrowser &&
1123 !(md->isLinkable() && !refLinkSource) &&
1124 md->getStartBodyLine()!=-1 &&
1125 md->getBodyDef()
1126 )
1127 {
1128 const int maxLineNrStr = 10;
1129 char anchorStr[maxLineNrStr];
1130 qsnprintf(anchorStr,maxLineNrStr,"l%05d",md->getStartBodyLine());
1131 //printf("Write object link to %s\n",qPrint(md->getBodyDef()->getSourceFileBase()));
1132 ol.writeObjectLink(QCString(),md->getBodyDef()->getSourceFileBase(),anchorStr,name);
1133 }
1134 else if (md->isLinkable())
1135 {
1137 md->getOutputFileBase(),
1138 md->anchor(),name);
1139 }
1140 else
1141 {
1142 ol.docify(name);
1143 }
1144 }
1145 };
1146
1147 ol.startParagraph("reference");
1148 ol.parseText(text);
1149 ol.docify(" ");
1150 writeMarkerList(ol,
1151 theTranslator->trWriteList(static_cast<int>(members.size())).str(),
1152 members.size(),
1153 replaceFunc);
1154 ol.writeString(".");
1155 ol.endParagraph();
1156
1157 }
1158}
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:1100

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 1225 of file definition.cpp.

1226{
1227 err("DefinitionImpl::addInnerCompound() called\n");
1228}
#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 1204 of file definition.cpp.

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

References p, and QCString::str().

◆ addSourceReferences()

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

Definition at line 1212 of file definition.cpp.

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

References p, and QCString::str().

◆ briefDescription()

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

Definition at line 1601 of file definition.cpp.

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

References abbreviate(), and p.

Referenced by hasBriefDescription().

◆ briefDescriptionAsTooltip()

QCString DefinitionImpl::briefDescriptionAsTooltip ( ) const

Definition at line 1620 of file definition.cpp.

1621{
1622 return p->brief ? p->brief->tooltip : QCString();
1623}

References p.

◆ briefFile()

QCString DefinitionImpl::briefFile ( ) const

Definition at line 1630 of file definition.cpp.

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

References p.

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

◆ briefLine()

int DefinitionImpl::briefLine ( ) const

Definition at line 1625 of file definition.cpp.

1626{
1627 return p->brief ? p->brief->line : 1;
1628}

References p.

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

◆ computeTooltip()

void DefinitionImpl::computeTooltip ( )

Definition at line 1609 of file definition.cpp.

1610{
1611 if (p->brief && p->brief->tooltip.isEmpty() && !p->brief->doc.isEmpty())
1612 {
1613 const MemberDef *md = p->def->definitionType()==Definition::TypeMember ? toMemberDef(p->def) : nullptr;
1614 const Definition *scope = p->def->definitionType()==Definition::TypeMember ? p->def->getOuterScope() : p->def;
1615 p->brief->tooltip = parseCommentAsText(scope,md,
1616 p->brief->doc, p->brief->file, p->brief->line);
1617 }
1618}
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 1546 of file definition.cpp.

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

References p.

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

◆ docLine()

int DefinitionImpl::docLine ( ) const

Definition at line 1541 of file definition.cpp.

1542{
1543 return p->details ? p->details->line : p->brief ? p->brief->line : 1;
1544}

References p.

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

◆ documentation()

QCString DefinitionImpl::documentation ( ) const

Definition at line 1536 of file definition.cpp.

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

References p.

◆ externalReference()

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

Definition at line 1846 of file definition.cpp.

1847{
1848 QCString ref = getReference();
1849 if (!ref.isEmpty())
1850 {
1851 auto it = Doxygen::tagDestinationMap.find(ref.str());
1853 {
1854 QCString result(it->second);
1855 size_t l = result.length();
1856 if (!relPath.isEmpty() && l>0 && result.at(0)=='.')
1857 { // relative path -> prepend relPath.
1858 result.prepend(relPath);
1859 l+=relPath.length();
1860 }
1861 if (l>0 && result.at(l-1)!='/') result+='/';
1862 return result;
1863 }
1864 }
1865 return relPath;
1866}
QCString getReference() const
static StringMap tagDestinationMap
Definition doxygen.h:115
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 1220 of file definition.cpp.

1221{
1222 return nullptr;
1223}

◆ getBodyDef()

const FileDef * DefinitionImpl::getBodyDef ( ) const

Definition at line 1715 of file definition.cpp.

1716{
1717 return p->body ? p->body->fileDef : nullptr;
1718}

References p.

◆ getDefColumn()

int DefinitionImpl::getDefColumn ( ) const

Definition at line 1883 of file definition.cpp.

1884{
1885 return p->defColumn;
1886}

References p.

◆ getDefFileExtension()

QCString DefinitionImpl::getDefFileExtension ( ) const

Definition at line 1660 of file definition.cpp.

1661{
1662 return p->defFileExt;
1663}

References p.

◆ getDefFileName()

QCString DefinitionImpl::getDefFileName ( ) const

Definition at line 1655 of file definition.cpp.

1656{
1657 return p->defFileName;
1658}

References p.

◆ getDefLine()

int DefinitionImpl::getDefLine ( ) const

Definition at line 1878 of file definition.cpp.

1879{
1880 return p->defLine;
1881}

References p.

◆ getEndBodyLine()

int DefinitionImpl::getEndBodyLine ( ) const

Definition at line 1710 of file definition.cpp.

1711{
1712 return p->body ? p->body->endLine : -1;
1713}

References p.

◆ getLanguage()

SrcLangExt DefinitionImpl::getLanguage ( ) const

Definition at line 1799 of file definition.cpp.

1800{
1801 return p->lang;
1802}

References p.

Referenced by qualifiedName().

◆ getOuterScope()

Definition * DefinitionImpl::getOuterScope ( ) const

Definition at line 1734 of file definition.cpp.

1735{
1736 return p->outerScope;
1737}

References p.

Referenced by navigationPathAsString().

◆ getReference()

QCString DefinitionImpl::getReference ( ) const

Definition at line 1690 of file definition.cpp.

1691{
1692 return p->ref;
1693}

References p.

Referenced by externalReference().

◆ getReferencedByMembers()

const MemberVector & DefinitionImpl::getReferencedByMembers ( ) const

Definition at line 1751 of file definition.cpp.

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

References g_memberReferenceMutex, p, and refMapToVector().

◆ getReferencesMembers()

const MemberVector & DefinitionImpl::getReferencesMembers ( ) const

Definition at line 1741 of file definition.cpp.

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

References g_memberReferenceMutex, p, and refMapToVector().

◆ getSectionRefs()

const SectionRefs & DefinitionImpl::getSectionRefs ( ) const

Definition at line 1524 of file definition.cpp.

1525{
1526 return p->sectionRefs;
1527}

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 1705 of file definition.cpp.

1706{
1707 return p->body ? p->body->startLine : -1;
1708}

References p.

Referenced by writeToc().

◆ getStartDefLine()

int DefinitionImpl::getStartDefLine ( ) const

Definition at line 1700 of file definition.cpp.

1701{
1702 return p->body ? p->body->defLine : -1;
1703}

References p.

◆ hasBriefDescription()

bool DefinitionImpl::hasBriefDescription ( ) const

Definition at line 1840 of file definition.cpp.

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

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

◆ hasDocumentation()

bool DefinitionImpl::hasDocumentation ( ) const

Definition at line 1180 of file definition.cpp.

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

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 1170 of file definition.cpp.

1171{
1172 return !p->sourceRefByDict.empty();
1173}

References p.

◆ hasSourceRefs()

bool DefinitionImpl::hasSourceRefs ( ) const

Definition at line 1175 of file definition.cpp.

1176{
1177 return !p->sourceRefsDict.empty();
1178}

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 1195 of file definition.cpp.

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

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 1637 of file definition.cpp.

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

References p.

◆ inbodyFile()

QCString DefinitionImpl::inbodyFile ( ) const

Definition at line 1647 of file definition.cpp.

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

References p.

Referenced by _setInbodyDocumentation(), and setInbodyDocumentation().

◆ inbodyLine()

int DefinitionImpl::inbodyLine ( ) const

Definition at line 1642 of file definition.cpp.

1643{
1644 return p->inbodyDocs ? p->inbodyDocs->line : 1;
1645}

References p.

Referenced by _setInbodyDocumentation(), and setInbodyDocumentation().

◆ isAnonymous()

bool DefinitionImpl::isAnonymous ( ) const

Definition at line 1873 of file definition.cpp.

1874{
1875 return p->isAnonymous;
1876}

References p.

◆ isArtificial()

bool DefinitionImpl::isArtificial ( ) const

Definition at line 1680 of file definition.cpp.

1681{
1682 return p->isArtificial;
1683}

References p.

◆ isExported()

bool DefinitionImpl::isExported ( ) const

Definition at line 1685 of file definition.cpp.

1686{
1687 return p->isExported;
1688}

References p.

◆ isHidden()

bool DefinitionImpl::isHidden ( ) const

Definition at line 1665 of file definition.cpp.

1666{
1667 return p->hidden;
1668}

References p.

◆ isLinkableViaGroup()

bool DefinitionImpl::isLinkableViaGroup ( ) const

Definition at line 1725 of file definition.cpp.

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

References partOfGroups().

◆ isReference()

bool DefinitionImpl::isReference ( ) const

Definition at line 1695 of file definition.cpp.

1696{
1697 return !p->ref.isEmpty();
1698}

References p.

◆ isVisible()

bool DefinitionImpl::isVisible ( ) const

Definition at line 1675 of file definition.cpp.

1676{
1677 return p->def->isLinkable() && !p->hidden;
1678}

References p.

◆ isVisibleInProject()

bool DefinitionImpl::isVisibleInProject ( ) const

Definition at line 1670 of file definition.cpp.

1671{
1672 return p->def->isLinkableInProject() && !p->hidden;
1673}

References p.

◆ localName()

const QCString & DefinitionImpl::localName ( ) const

Definition at line 1289 of file definition.cpp.

1290{
1291 return p->localName;
1292}

References p.

Referenced by navigationPathAsString().

◆ makePartOfGroup()

void DefinitionImpl::makePartOfGroup ( GroupDef * gd)

Definition at line 1294 of file definition.cpp.

1295{
1296 p->partOfGroups.push_back(gd);
1297}

References p.

◆ mergeReferencedBy()

void DefinitionImpl::mergeReferencedBy ( const Definition * other)

Definition at line 1777 of file definition.cpp.

1778{
1779 const DefinitionImpl *defImpl = other->toDefinitionImpl_();
1780 if (defImpl)
1781 {
1782 for (const auto &kv : defImpl->p->sourceRefByDict)
1783 {
1784 auto it = p->sourceRefByDict.find(kv.first);
1785 if (it != p->sourceRefByDict.end())
1786 {
1787 p->sourceRefByDict.emplace(kv.first,kv.second);
1788 }
1789 }
1790 }
1791}
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 1761 of file definition.cpp.

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

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

◆ mergeRefItems()

void DefinitionImpl::mergeRefItems ( Definition * d)

Definition at line 1304 of file definition.cpp.

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

1386{
1387 QCString result;
1388 Definition *outerScope = getOuterScope();
1389 QCString locName = localName();
1390 if (outerScope && outerScope!=Doxygen::globalScope)
1391 {
1392 result+=outerScope->navigationPathAsString();
1393 }
1394 else if (p->def->definitionType()==Definition::TypeFile &&
1395 toFileDef(p->def)->getDirDef())
1396 {
1397 result+=(toFileDef(p->def))->getDirDef()->navigationPathAsString();
1398 }
1399 result+="<li class=\"navelem\">";
1400 if (p->def->isLinkableInProject())
1401 {
1402 QCString fn = p->def->getOutputFileBase();
1404 if (p->def->definitionType()==Definition::TypeGroup &&
1405 !toGroupDef(p->def)->groupTitle().isEmpty())
1406 {
1407 QCString title = parseCommentAsHtml(p->def,nullptr,toGroupDef(p->def)->groupTitle(),
1408 p->def->getDefFileName(),p->def->getDefLine());
1409 result+="<a href=\"$relpath^"+fn+"\">"+title+"</a>";
1410 }
1411 else if (p->def->definitionType()==Definition::TypePage &&
1412 toPageDef(p->def)->hasTitle())
1413 {
1414 QCString title = parseCommentAsHtml(p->def,nullptr,toPageDef(p->def)->title(),
1415 p->def->getDefFileName(),p->def->getDefLine());
1416 result+="<a href=\"$relpath^"+fn+"\">"+title+"</a>";
1417 }
1418 else if (p->def->definitionType()==Definition::TypeClass)
1419 {
1420 QCString name = toClassDef(p->def)->className();
1421 if (name.endsWith("-p"))
1422 {
1423 name = name.left(name.length()-2);
1424 }
1425 result+="<a href=\"$relpath^"+fn;
1426 if (!p->def->anchor().isEmpty()) result+="#"+p->def->anchor();
1427 result+="\">"+convertToHtml(name)+"</a>";
1428 }
1429 else
1430 {
1431 result+="<a href=\"$relpath^"+fn+"\">"+
1432 convertToHtml(locName)+"</a>";
1433 }
1434 }
1435 else
1436 {
1437 result+="<b>"+convertToHtml(locName)+"</b>";
1438 }
1439 result+="</li>";
1440 return result;
1441}
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:120
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:1951
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 1720 of file definition.cpp.

1721{
1722 return p->partOfGroups;
1723}

References p.

Referenced by isLinkableViaGroup().

◆ pathFragment()

QCString DefinitionImpl::pathFragment ( ) const

Definition at line 1347 of file definition.cpp.

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

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 1232 of file definition.cpp.

1233{
1234 std::lock_guard<std::recursive_mutex> lock(g_qualifiedNameMutex);
1235 if (!p->qualifiedName.isEmpty())
1236 {
1237 return p->qualifiedName;
1238 }
1239
1240 //printf("start %s::qualifiedName() localName=%s\n",qPrint(name()),qPrint(p->localName));
1241 if (p->outerScope==nullptr)
1242 {
1243 if (p->localName=="<globalScope>")
1244 {
1245 return "";
1246 }
1247 else
1248 {
1249 return p->localName;
1250 }
1251 }
1252
1253 if (p->outerScope->name()=="<globalScope>")
1254 {
1255 p->qualifiedName = p->localName;
1256 }
1257 else
1258 {
1259 p->qualifiedName = p->outerScope->qualifiedName()+
1261 p->localName;
1262 }
1263 //printf("end %s::qualifiedName()=%s\n",qPrint(name()),qPrint(p->qualifiedName));
1264 //count--;
1265 return p->qualifiedName;
1266}
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 1809 of file definition.cpp.

1810{
1811 p->isArtificial = b;
1812}

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 1814 of file definition.cpp.

1815{
1816 p->isExported = b;
1817}

References p.

◆ setHidden()

void DefinitionImpl::setHidden ( bool b)

Definition at line 1804 of file definition.cpp.

1805{
1806 p->hidden = p->hidden || b;
1807}

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:125

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 1824 of file definition.cpp.

1825{
1826 p->lang=lang;
1827}

References p.

◆ setLocalName()

void DefinitionImpl::setLocalName ( const QCString & name)

Definition at line 1819 of file definition.cpp.

1820{
1821 p->localName=name;
1822}

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 1268 of file definition.cpp.

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

1795{
1796 p->ref=r;
1797}

References p.

◆ setRefItems()

void DefinitionImpl::setRefItems ( const RefItemVector & sli)

Definition at line 1299 of file definition.cpp.

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

References p.

◆ symbolName()

QCString DefinitionImpl::symbolName ( ) const

Definition at line 1529 of file definition.cpp.

1530{
1531 return p->symbolName;
1532}

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 CodeParserOptions()
1062 .setFileDef(p->body->fileDef)
1063 .setStartLine(actualStart)
1064 .setEndLine(actualEnd)
1065 .setInlineFragment(true)
1066 .setMemberDef(thisMd)
1067 );
1068 codeOL.endCodeFragment("DoxyCode");
1069 }
1070 ol.popGeneratorState();
1071 }
1072}
bool hasSources() const
static ParserManager * parserManager
Definition doxygen.h:130
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:254
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(), MemberDef::hasInlineSource(), hasSources(), MemberDef::memberType(), p, Doxygen::parserManager, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), readCodeFragment(), CodeParserOptions::setEndLine(), CodeParserOptions::setInlineFragment(), CodeParserOptions::setMemberDef(), CodeParserOptions::setStartLine(), OutputCodeList::startCodeFragment(), toMemberDef(), and Definition::TypeMember.

◆ writeNavigationPath()

void DefinitionImpl::writeNavigationPath ( OutputList & ol) const

Definition at line 1444 of file definition.cpp.

1445{
1446 ol.pushGeneratorState();
1448
1449 QCString navPath;
1450 navPath += "<div id=\"nav-path\" class=\"navpath\">\n"
1451 " <ul>\n";
1452 navPath += navigationPathAsString();
1453 navPath += " </ul>\n"
1454 "</div>\n";
1455 ol.writeNavigationPath(navPath);
1456
1457 ol.popGeneratorState();
1458}
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 1896 of file definition.cpp.

1897{
1898}

◆ writeQuickMemberLinks()

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

Definition at line 1888 of file definition.cpp.

1889{
1890}

◆ 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 1160 of file definition.cpp.

1161{
1162 _writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),p->sourceRefByDict,FALSE);
1163}
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 1165 of file definition.cpp.

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

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

◆ writeSummaryLinks()

void DefinitionImpl::writeSummaryLinks ( OutputList & ) const

Definition at line 1892 of file definition.cpp.

1893{
1894}

◆ writeToc()

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

Definition at line 1460 of file definition.cpp.

1461{
1462 // first check if we have anything to show or if the outline is already shown on the outline panel
1463 if (p->sectionRefs.empty() || (Config_getBool(GENERATE_TREEVIEW) && Config_getBool(PAGE_OUTLINE_PANEL))) return;
1464 // generate the embedded toc
1465 //ol.writeLocalToc(p->sectionRefs,localToc);
1466
1467 auto generateTocEntries = [this,&ol]()
1468 {
1469 for (const SectionInfo *si : p->sectionRefs)
1470 {
1471 if (si->type().isSection())
1472 {
1473 ol.startTocEntry(si);
1474 const MemberDef *md = p->def->definitionType()==Definition::TypeMember ? toMemberDef(p->def) : nullptr;
1475 const Definition *scope = p->def->definitionType()==Definition::TypeMember ? p->def->getOuterScope() : p->def;
1476 QCString docTitle = si->title();
1477 if (docTitle.isEmpty()) docTitle = si->label();
1478 ol.generateDoc(docFile(),
1480 scope,
1481 md,
1482 docTitle,
1483 DocOptions()
1484 .setIndexWords(true)
1485 .setSingleLine(true)
1486 .setSectionLevel(si->type().level())
1487 );
1488 ol.endTocEntry(si);
1489 }
1490 }
1491 };
1492
1493 if (localToc.isHtmlEnabled())
1494 {
1495 ol.pushGeneratorState();
1497 ol.startLocalToc(localToc.htmlLevel());
1498 generateTocEntries();
1499 ol.endLocalToc();
1500 ol.popGeneratorState();
1501 }
1502 if (localToc.isDocbookEnabled())
1503 {
1504 ol.pushGeneratorState();
1506 ol.startLocalToc(localToc.docbookLevel());
1507 generateTocEntries();
1508 ol.endLocalToc();
1509 ol.popGeneratorState();
1510 }
1511 if (localToc.isLatexEnabled())
1512 {
1513 ol.pushGeneratorState();
1515 ol.startLocalToc(localToc.latexLevel());
1516 // no gneerateTocEntries() needed for LaTeX
1517 ol.endLocalToc();
1518 ol.popGeneratorState();
1519 }
1520}
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 1342 of file definition.cpp.

1343{
1344 return p->xrefListItems;
1345}

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: