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 DString &defFileName, int defLine, int defColumn, const DString &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 DStringname () const
bool isAnonymous () const
const DStringlocalName () const
DString qualifiedName () const
DString symbolName () const
DString getSourceFileBase () const
DString getSourceAnchor () const
DString documentation () const
int docLine () const
DString docFile () const
DString briefDescription (bool abbreviate=false) const
DString briefDescriptionAsTooltip () const
int briefLine () const
DString inbodyDocumentation () const
DString inbodyFile () const
int inbodyLine () const
DString briefFile () const
DString getDefFileName () const
DString 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
DString getReference () const
bool isReference () const
DString externalReference (const DString &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 RequirementRefsrequirementReferences () const
const DefinitionfindInnerCompound (const DString &name) const
DefinitiongetOuterScope () const
const MemberVectorgetReferencesMembers () const
const MemberVectorgetReferencedByMembers () const
bool hasSections () const
bool hasSources () const
bool hasBriefDescription () const
DString id () const
const SectionRefsgetSectionRefs () const
void setName (const DString &name)
void setId (const DString &name)
void setDefFile (const DString &df, int defLine, int defColumn)
void setDocumentation (const DString &d, const DString &docFile, int docLine, bool stripWhiteSpace=true)
void setBriefDescription (const DString &b, const DString &briefFile, int briefLine)
void setInbodyDocumentation (const DString &d, const DString &docFile, int docLine)
void setReference (const DString &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 DString &sourceRefName)
void addSourceReferences (MemberDef *d, const DString &sourceRefName)
void setRefItems (const RefItemVector &sli)
void setRequirementReferences (const RequirementRefs &rqli)
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 DString &scopeName) const
bool hasSourceRefs () const
bool hasSourceReffedBy () const
void writeSourceRefs (OutputList &ol, const DString &scopeName) const
void writeSourceReffedBy (OutputList &ol, const DString &scopeName) const
bool hasRequirementRefs () const
void writeRequirementRefs (OutputList &ol) const
void makePartOfGroup (GroupDef *gd)
void writeNavigationPath (OutputList &ol) const
DString navigationPathAsString () const
void writeQuickMemberLinks (OutputList &, const MemberDef *) const
void writeSummaryLinks (OutputList &) const
void writePageNavigation (OutputList &ol) const
DString pathFragment () const
void writeDocAnchorsToTagFile (TextStream &) const
void setLocalName (const DString &name)
void writeToc (OutputList &ol, const LocalToc &lt) const
void computeTooltip ()
void _setSymbolName (const DString &name)
DString _symbolName () const

Private Member Functions

int _getXRefListId (const DString &listName) const
void _writeSourceRefList (OutputList &ol, const DString &scopeName, const DString &text, const std::unordered_map< std::string, MemberDef * > &members, bool) const
void _setBriefDescription (const DString &b, const DString &briefFile, int briefLine)
void _setDocumentation (const DString &d, const DString &docFile, int docLine, bool stripWhiteSpace, bool atTop)
void _setInbodyDocumentation (const DString &d, const DString &docFile, int docLine)
bool _docsAlreadyAdded (const DString &doc, DString &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 DString & defFileName,
int defLine,
int defColumn,
const DString & name,
const char * b = nullptr,
const char * d = nullptr,
bool isSymbol = true )

Definition at line 250 of file definition.cpp.

254 : p(std::make_unique<Private>())
255{
256 setName(name);
257 p->def = def;
258 p->defLine = dl;
259 p->defColumn = dc;
260 p->init(df,name);
261 p->isSymbol = isSymbol;
262 if (isSymbol) addToMap(name,def);
263 _setBriefDescription(b,df,dl);
264 _setDocumentation(d,df,dl,true,false);
266 {
267 p->hidden = true;
268 }
269}
void _setBriefDescription(const DString &b, const DString &briefFile, int briefLine)
void setName(const DString &name)
void _setDocumentation(const DString &d, const DString &docFile, int docLine, bool stripWhiteSpace, bool atTop)
const DString & name() const
std::unique_ptr< Private > p
static bool matchExcludedSymbols(const DString &name)
static void addToMap(const DString &name, Definition *d)

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

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

◆ ~DefinitionImpl()

DefinitionImpl::~DefinitionImpl ( )

Definition at line 286 of file definition.cpp.

287{
288 if (p->isSymbol)
289 {
290 removeFromMap(p->symbolName,p->def);
291 }
292}
static void removeFromMap(const DString &name, Definition *d)

References p, and removeFromMap().

◆ DefinitionImpl() [2/3]

DefinitionImpl::DefinitionImpl ( const DefinitionImpl & d)

Definition at line 271 of file definition.cpp.

272 : p(std::make_unique<Private>(*d.p))
273{
274 if (p->isSymbol) addToMap(p->name,p->def);
275}

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

◆ DefinitionImpl() [3/3]

DefinitionImpl::DefinitionImpl ( DefinitionImpl && d)
delete

References DefinitionImpl().

Member Function Documentation

◆ _docsAlreadyAdded()

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

Definition at line 379 of file definition.cpp.

380{
381 uint8_t md5_sig[16];
382 char sigStr[33];
383 // to avoid mismatches due to differences in indenting, we first remove
384 // double whitespaces...
385 DString docStr = doc.simplifyWhiteSpace();
386 MD5Buffer(docStr.data(),static_cast<unsigned int>(docStr.length()),md5_sig);
387 MD5SigToString(md5_sig,sigStr);
388 //printf("%s:_docsAlreadyAdded doc='%s' sig='%s' docSigs='%s'\n",
389 // qPrint(name()),qPrint(doc),qPrint(sigStr),qPrint(sigList));
390 if (sigList.find(sigStr)==DString::npos) // new docs, add signature to prevent re-adding it
391 {
392 sigList+=DString(":")+sigStr;
393 return false;
394 }
395 else
396 {
397 return true;
398 }
399}
DString()=default
DString simplifyWhiteSpace() const
return a copy of this string with leading and trailing whitespace removed and multiple whitespace cha...
Definition dstring.cpp:118
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
Definition dstring.h:183
size_t find(char c, size_t pos=0) const
Definition dstring.h:244
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition dstring.h:162
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:156

References DString::data(), DString::DString(), DString::find(), DString::length(), DString::npos, and DString::simplifyWhiteSpace().

Referenced by _setBriefDescription(), _setDocumentation(), _setInbodyDocumentation(), and operator=().

◆ _getXRefListId()

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

Definition at line 1370 of file definition.cpp.

1371{
1372 for (const RefItem *item : p->xrefListItems)
1373 {
1374 if (item->list()->listName()==listName)
1375 {
1376 return item->id();
1377 }
1378 }
1379 return -1;
1380}
int id() const
Definition reflist.h:52
RefList * list() const
Definition reflist.h:53
DString listName() const
Definition reflist.h:101

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

Referenced by operator=().

◆ _setBriefDescription()

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

Definition at line 454 of file definition.cpp.

455{
456 DString brief = b;
457 brief = brief.stripWhiteSpace();
459 brief = brief.stripWhiteSpace();
460 if (brief.empty()) return;
461 size_t bl = brief.length();
462 if (bl>0)
463 {
464 if (!theTranslator || theTranslator->needsPunctuation()) // add punctuation if needed
465 {
466 int c = brief.at(bl-1);
467 switch(c)
468 {
469 case '.': case '!': case '?': case ':': break;
470 default:
471 if (isUTF8CharUpperCase(brief.str(),0) && !lastUTF8CharIsMultibyte(brief.str())) brief+='.';
472 break;
473 }
474 }
475 }
476
477 if (!_docsAlreadyAdded(brief,p->briefSignatures))
478 {
479 if (p->brief && !p->brief->doc.empty())
480 {
481 //printf("adding to details\n");
482 _setDocumentation(brief,briefFile,briefLine,false,true);
483 }
484 else
485 {
486 //fprintf(stderr,"DefinitionImpl::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
487 if (!p->brief.has_value())
488 {
489 p->brief = std::make_optional<BriefInfo>();
490 }
491 BriefInfo &briefInfo = p->brief.value();
492 briefInfo.doc=brief;
493 if (briefLine!=-1)
494 {
495 briefInfo.file = briefFile;
496 briefInfo.line = briefLine;
497 }
498 else
499 {
500 briefInfo.file = briefFile;
501 briefInfo.line = 1;
502 }
503 }
504 }
505 else
506 {
507 //printf("do nothing!\n");
508 }
509}
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:153
char & at(size_t i)
Returns a reference to the character at index i.
Definition dstring.h:675
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition dstring.h:342
const std::string & str() const
Definition dstring.h:634
int briefLine() const
bool _docsAlreadyAdded(const DString &doc, DString &sigList)
DString briefFile() const
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
DString doc
Definition definition.h:56
DString file
Definition definition.h:59
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
DString stripLeadingAndTrailingEmptyLines(const DString &s, int &docLine)
Special version of DString::stripWhiteSpace() that only strips completely blank lines.
Definition util.cpp:5077

References _docsAlreadyAdded(), _setDocumentation(), DString::at(), briefFile(), briefLine(), BriefInfo::doc, DString::empty(), BriefInfo::file, isUTF8CharUpperCase(), lastUTF8CharIsMultibyte(), DString::length(), BriefInfo::line, Translator::needsPunctuation(), p, DString::str(), stripLeadingAndTrailingEmptyLines(), DString::stripWhiteSpace(), and theTranslator.

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

◆ _setDocumentation()

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

Definition at line 401 of file definition.cpp.

403{
404 //printf("%s::setDocumentation(%s,%s,%d,%d)\n",qPrint(name()),d,docFile,docLine,stripWhiteSpace);
405 if (d.empty()) return;
406 DString doc = d;
407 if (stripWhiteSpace)
408 {
410 }
411 else // don't strip whitespace
412 {
413 doc=d;
414 }
415 if (!_docsAlreadyAdded(doc,p->docSignatures))
416 {
417 //printf("setting docs for %s: '%s'\n",qPrint(name()),qPrint(m_doc));
418 if (!p->details.has_value())
419 {
420 p->details = std::make_optional<DocInfo>();
421 }
422 DocInfo &details = p->details.value();
423 if (details.doc.empty()) // fresh detailed description
424 {
425 details.doc = doc;
426 }
427 else if (atTop) // another detailed description, append it to the start
428 {
429 details.doc = doc+"\n\n"+details.doc;
430 }
431 else // another detailed description, append it to the end
432 {
433 details.doc += "\n\n"+doc;
434 }
435 if (docLine!=-1) // store location if valid
436 {
437 details.file = docFile;
438 details.line = docLine;
439 }
440 else
441 {
442 details.file = docFile;
443 details.line = 1;
444 }
445 }
446}
int docLine() const
DString 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
DString doc
Definition definition.h:48
int line
Definition definition.h:49
DString file
Definition definition.h:50

References _docsAlreadyAdded(), docFile(), docLine(), DString::empty(), p, stripLeadingAndTrailingEmptyLines(), and stripWhiteSpace().

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

◆ _setInbodyDocumentation()

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

Definition at line 517 of file definition.cpp.

518{
519 if (!_docsAlreadyAdded(doc,p->docSignatures))
520 {
521 if (!p->inbodyDocs.has_value())
522 {
523 p->inbodyDocs = std::make_optional<DocInfo>();
524 }
525 DocInfo &inbodyDocs = p->inbodyDocs.value();
526 if (inbodyDocs.doc.empty()) // fresh inbody docs
527 {
528 inbodyDocs.doc = doc;
529 inbodyDocs.file = inbodyFile;
530 inbodyDocs.line = inbodyLine;
531 }
532 else // another inbody documentation fragment, append this to the end
533 {
534 inbodyDocs.doc += DString("\n\n")+doc;
535 }
536 }
537}
DString inbodyFile() const
int inbodyLine() const

References _docsAlreadyAdded(), DocInfo::doc, DString::DString(), DString::empty(), DocInfo::file, inbodyFile(), inbodyLine(), DocInfo::line, and p.

Referenced by operator=(), and setInbodyDocumentation().

◆ _setSymbolName()

void DefinitionImpl::_setSymbolName ( const DString & name)

Definition at line 1874 of file definition.cpp.

1875{
1876 p->symbolName=name;
1877}

References name(), and p.

Referenced by DefinitionMixin< Base >::_setSymbolName(), and operator=().

◆ _symbolName()

DString DefinitionImpl::_symbolName ( ) const

Definition at line 1879 of file definition.cpp.

1880{
1881 return p->symbolName;
1882}

References p.

Referenced by DefinitionMixin< Base >::_symbolName(), and operator=().

◆ _writeSourceRefList()

void DefinitionImpl::_writeSourceRefList ( OutputList & ol,
const DString & scopeName,
const DString & 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 1113 of file definition.cpp.

1116{
1117 if (!membersMap.empty())
1118 {
1119 auto members = refMapToVector(membersMap);
1120
1121 auto replaceFunc = [this,&members,scopeName,&ol](size_t entryIndex)
1122 {
1123 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1124 bool refLinkSource = Config_getBool(REFERENCES_LINK_SOURCE);
1125 const MemberDef *md=members[entryIndex];
1126 if (md)
1127 {
1128 DString scope=md->getScopeString();
1129 DString name=md->name();
1130 //printf("class=%p scope=%s scopeName=%s\n",md->getClassDef(),qPrint(scope),scopeName);
1131 if (!scope.empty() && scope!=scopeName)
1132 {
1134 }
1135 if (!md->isObjCMethod() &&
1136 (md->isFunction() || md->isSlot() ||
1137 md->isPrototype() || md->isSignal()
1138 )
1139 )
1140 {
1141 name+="()";
1142 }
1143 if (sourceBrowser &&
1144 !(md->isLinkable() && !refLinkSource) &&
1145 md->getStartBodyLine()!=-1 &&
1146 md->getBodyDef()
1147 )
1148 {
1149 const int maxLineNrStr = 10;
1150 char anchorStr[maxLineNrStr];
1151 snprintf(anchorStr,maxLineNrStr,"l%05d",md->getStartBodyLine());
1152 //printf("Write object link to %s\n",qPrint(md->getBodyDef()->getSourceFileBase()));
1153 ol.writeObjectLink(DString(),md->getBodyDef()->getSourceFileBase(),anchorStr,name);
1154 }
1155 else if (md->isLinkable())
1156 {
1158 md->getOutputFileBase(),
1159 md->anchor(),name);
1160 }
1161 else
1162 {
1163 ol.docify(name);
1164 }
1165 }
1166 };
1167
1168 ol.startParagraph("reference");
1169 ol.parseText(text);
1170 ol.docify(" ");
1171 writeMarkerList(ol,
1172 theTranslator->trWriteList(static_cast<int>(members.size())).str(),
1173 members.size(),
1174 replaceFunc);
1175 ol.writeString(".");
1176 ol.endParagraph();
1177
1178 }
1179}
DString & prepend(const char *s)
Definition dstring.h:504
virtual bool isLinkable() const =0
virtual const DString & name() const =0
virtual const FileDef * getBodyDef() const =0
virtual DString anchor() const =0
virtual DString getReference() const =0
virtual DString getSourceFileBase() const =0
virtual int getStartBodyLine() const =0
virtual DString getOutputFileBase() const =0
virtual bool isSignal() const =0
virtual bool isObjCMethod() const =0
virtual bool isSlot() const =0
virtual bool isFunction() const =0
virtual DString getScopeString() const =0
virtual bool isPrototype() const =0
void parseText(const DString &textStr)
void startParagraph(const DString &classDef=DString())
Definition outputlist.h:407
void writeObjectLink(const DString &ref, const DString &file, const DString &anchor, const DString &name)
Definition outputlist.h:439
void docify(const DString &s)
Definition outputlist.h:437
void writeString(const DString &text)
Definition outputlist.h:411
void endParagraph()
Definition outputlist.h:409
virtual DString trWriteList(int numEntries)=0
#define Config_getBool(name)
Definition config.h:33
static MemberVector refMapToVector(const std::unordered_map< std::string, MemberDef * > &map)
DString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:5941
void writeMarkerList(OutputList &ol, const std::string &markerText, size_t numMarkers, std::function< void(size_t)> replaceFunc)
Definition util.cpp:1128

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

Referenced by operator=(), writeSourceReffedBy(), and writeSourceRefs().

◆ addInnerCompound()

void DefinitionImpl::addInnerCompound ( Definition * d)

Definition at line 1278 of file definition.cpp.

1279{
1280 err("DefinitionImpl::addInnerCompound() called\n");
1281}
#define err(fmt,...)
Definition message.h:127

References err.

Referenced by DefinitionMixin< Base >::addInnerCompound(), and operator=().

◆ addSectionsToDefinition()

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

Definition at line 319 of file definition.cpp.

320{
321 //printf("%s: addSectionsToDefinition(%d)\n",qPrint(name()),anchorList->count());
322 for (const SectionInfo *si : anchorList)
323 {
324 //printf("Add section '%s' to definition '%s'\n",
325 // qPrint(si->label()),qPrint(name()));
326 SectionManager &sm = SectionManager::instance();
327 SectionInfo *gsi=sm.find(si->label());
328 //printf("===== label=%s gsi=%p\n",qPrint(si->label()),(void*)gsi);
329 if (gsi==nullptr)
330 {
331 gsi = sm.add(*si);
332 }
333 if (p->sectionRefs.find(gsi->label())==nullptr)
334 {
335 p->sectionRefs.add(gsi);
336 }
337 gsi->setDefinition(p->def);
338 }
339}
const T * find(const std::string &key) const
Definition linkedmap.h:47
void setDefinition(Definition *d)
Definition section.h:83
DString label() const
Definition section.h:69
SectionInfo * add(const SectionInfo &si)
Definition section.h:139
static SectionManager & instance()
returns a reference to the singleton
Definition section.h:179

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

Referenced by DefinitionMixin< Base >::addSectionsToDefinition(), and operator=().

◆ addSourceReferencedBy()

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

Definition at line 1257 of file definition.cpp.

1258{
1259 if (md)
1260 {
1261 p->sourceRefByDict.emplace(sourceRefName.str(),md);
1262 }
1263}

References p, and DString::str().

Referenced by DefinitionMixin< Base >::addSourceReferencedBy(), and operator=().

◆ addSourceReferences()

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

Definition at line 1265 of file definition.cpp.

1266{
1267 if (md)
1268 {
1269 p->sourceRefsDict.emplace(sourceRefName.str(),md);
1270 }
1271}

References p, and DString::str().

Referenced by DefinitionMixin< Base >::addSourceReferences(), and operator=().

◆ briefDescription()

DString DefinitionImpl::briefDescription ( bool abbreviate = false) const

Definition at line 1645 of file definition.cpp.

1646{
1647 //printf("%s::briefDescription(%d)='%s'\n",qPrint(name()),abbr,p->brief?qPrint(p->brief->doc):"<none>");
1648 return p->brief ?
1649 (abbr ? abbreviate(p->brief->doc,p->def->displayName()) : p->brief->doc) :
1650 DString("");
1651}
static DString abbreviate(const DString &s, const DString &name)

References abbreviate(), DString::DString(), and p.

Referenced by DefinitionMixin< Base >::briefDescription(), hasBriefDescription(), and operator=().

◆ briefDescriptionAsTooltip()

DString DefinitionImpl::briefDescriptionAsTooltip ( ) const

Definition at line 1664 of file definition.cpp.

1665{
1666 return p->brief ? p->brief->tooltip : DString();
1667}

References DString::DString(), and p.

Referenced by DefinitionMixin< Base >::briefDescriptionAsTooltip(), and operator=().

◆ briefFile()

DString DefinitionImpl::briefFile ( ) const

Definition at line 1674 of file definition.cpp.

1675{
1676 return p->brief && !p->brief->file.empty() ? p->brief->file : DString("<"+p->name+">");
1677}

References DString::DString(), and p.

Referenced by _setBriefDescription(), DefinitionMixin< Base >::briefFile(), operator=(), and setBriefDescription().

◆ briefLine()

int DefinitionImpl::briefLine ( ) const

Definition at line 1669 of file definition.cpp.

1670{
1671 return p->brief ? p->brief->line : 1;
1672}

References p.

Referenced by _setBriefDescription(), DefinitionMixin< Base >::briefLine(), operator=(), and setBriefDescription().

◆ computeTooltip()

void DefinitionImpl::computeTooltip ( )

Definition at line 1653 of file definition.cpp.

1654{
1655 if (p->brief && p->brief->tooltip.empty() && !p->brief->doc.empty())
1656 {
1657 const MemberDef *md = p->def->definitionType()==Definition::TypeMember ? toMemberDef(p->def) : nullptr;
1658 const Definition *scope = p->def->definitionType()==Definition::TypeMember ? p->def->getOuterScope() : p->def;
1659 p->brief->tooltip = parseCommentAsText(scope,md,
1660 p->brief->doc, p->brief->file, p->brief->line);
1661 }
1662}
MemberDef * toMemberDef(Definition *d)
DString parseCommentAsText(const Definition *scope, const MemberDef *md, const DString &doc, const DString &fileName, int lineNr)
Definition util.cpp:5415

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

Referenced by DefinitionMixin< Base >::computeTooltip(), and operator=().

◆ docFile()

DString DefinitionImpl::docFile ( ) const

Definition at line 1591 of file definition.cpp.

1592{
1593 if (p->details && !p->details->file.empty()) return p->details->file;
1594 else if (p->brief && !p->brief->file.empty()) return p->brief->file;
1595 else return "<" + p->name + ">";
1596}

References p.

Referenced by _setDocumentation(), DefinitionMixin< Base >::docFile(), operator=(), setDocumentation(), and writeToc().

◆ docLine()

int DefinitionImpl::docLine ( ) const

Definition at line 1586 of file definition.cpp.

1587{
1588 return p->details ? p->details->line : p->brief ? p->brief->line : 1;
1589}

References p.

Referenced by _setDocumentation(), DefinitionMixin< Base >::docLine(), operator=(), and setDocumentation().

◆ documentation()

DString DefinitionImpl::documentation ( ) const

Definition at line 1581 of file definition.cpp.

1582{
1583 return p->details ? p->details->doc : DString("");
1584}

References DString::DString(), and p.

Referenced by DefinitionMixin< Base >::documentation(), and operator=().

◆ externalReference()

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

Definition at line 1890 of file definition.cpp.

1891{
1892 DString ref = getReference();
1893 if (!ref.empty())
1894 {
1895 auto it = Doxygen::tagDestinationMap.find(ref.str());
1897 {
1898 DString result(it->second);
1899 size_t l = result.length();
1900 if (!relPath.empty() && l>0 && result.at(0)=='.')
1901 { // relative path -> prepend relPath.
1902 result.prepend(relPath);
1903 l+=relPath.length();
1904 }
1905 if (l>0 && result.at(l-1)!='/') result+='/';
1906 return result;
1907 }
1908 }
1909 return relPath;
1910}
DString getReference() const
static StringMap tagDestinationMap
Definition doxygen.h:116
DirIterator end(const DirIterator &) noexcept
Definition dir.cpp:175

References DString::at(), DString::empty(), end(), getReference(), DString::length(), DString::prepend(), DString::str(), and Doxygen::tagDestinationMap.

Referenced by DefinitionMixin< Base >::externalReference(), and operator=().

◆ findInnerCompound()

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

Definition at line 1273 of file definition.cpp.

1274{
1275 return nullptr;
1276}

Referenced by DefinitionMixin< Base >::findInnerCompound(), and operator=().

◆ getBodyDef()

const FileDef * DefinitionImpl::getBodyDef ( ) const

Definition at line 1759 of file definition.cpp.

1760{
1761 return p->body ? p->body->fileDef : nullptr;
1762}

References p.

Referenced by DefinitionMixin< Base >::getBodyDef(), and operator=().

◆ getDefColumn()

int DefinitionImpl::getDefColumn ( ) const

Definition at line 1927 of file definition.cpp.

1928{
1929 return p->defColumn;
1930}

References p.

Referenced by DefinitionMixin< Base >::getDefColumn(), and operator=().

◆ getDefFileExtension()

DString DefinitionImpl::getDefFileExtension ( ) const

Definition at line 1704 of file definition.cpp.

1705{
1706 return p->defFileExt;
1707}

References p.

Referenced by DefinitionMixin< Base >::getDefFileExtension(), and operator=().

◆ getDefFileName()

DString DefinitionImpl::getDefFileName ( ) const

Definition at line 1699 of file definition.cpp.

1700{
1701 return p->defFileName;
1702}

References p.

Referenced by DefinitionMixin< Base >::getDefFileName(), and operator=().

◆ getDefLine()

int DefinitionImpl::getDefLine ( ) const

Definition at line 1922 of file definition.cpp.

1923{
1924 return p->defLine;
1925}

References p.

Referenced by DefinitionMixin< Base >::getDefLine(), and operator=().

◆ getEndBodyLine()

int DefinitionImpl::getEndBodyLine ( ) const

Definition at line 1754 of file definition.cpp.

1755{
1756 return p->body ? p->body->endLine : -1;
1757}

References p.

Referenced by DefinitionMixin< Base >::getEndBodyLine(), and operator=().

◆ getLanguage()

SrcLangExt DefinitionImpl::getLanguage ( ) const

Definition at line 1843 of file definition.cpp.

1844{
1845 return p->lang;
1846}

References p.

Referenced by DefinitionMixin< Base >::getLanguage(), and operator=().

◆ getOuterScope()

Definition * DefinitionImpl::getOuterScope ( ) const

Definition at line 1778 of file definition.cpp.

1779{
1780 return p->outerScope;
1781}

References p.

Referenced by DefinitionMixin< Base >::getOuterScope(), navigationPathAsString(), and operator=().

◆ getReference()

DString DefinitionImpl::getReference ( ) const

Definition at line 1734 of file definition.cpp.

1735{
1736 return p->ref;
1737}

References p.

Referenced by externalReference(), DefinitionMixin< Base >::getReference(), and operator=().

◆ getReferencedByMembers()

const MemberVector & DefinitionImpl::getReferencedByMembers ( ) const

Definition at line 1795 of file definition.cpp.

1796{
1797 std::lock_guard<std::mutex> lock(g_memberReferenceMutex);
1798 if (p->referencedByMembers.empty() && !p->sourceRefByDict.empty())
1799 {
1800 p->referencedByMembers = refMapToVector(p->sourceRefByDict);
1801 }
1802 return p->referencedByMembers;
1803}
static std::mutex g_memberReferenceMutex

References g_memberReferenceMutex, p, and refMapToVector().

Referenced by DefinitionMixin< Base >::getReferencedByMembers(), and operator=().

◆ getReferencesMembers()

const MemberVector & DefinitionImpl::getReferencesMembers ( ) const

Definition at line 1785 of file definition.cpp.

1786{
1787 std::lock_guard<std::mutex> lock(g_memberReferenceMutex);
1788 if (p->referencesMembers.empty() && !p->sourceRefsDict.empty())
1789 {
1790 p->referencesMembers = refMapToVector(p->sourceRefsDict);
1791 }
1792 return p->referencesMembers;
1793}

References g_memberReferenceMutex, p, and refMapToVector().

Referenced by DefinitionMixin< Base >::getReferencesMembers(), and operator=().

◆ getSectionRefs()

const SectionRefs & DefinitionImpl::getSectionRefs ( ) const

Definition at line 1569 of file definition.cpp.

1570{
1571 return p->sectionRefs;
1572}

References p.

Referenced by DefinitionMixin< Base >::getSectionRefs(), and operator=().

◆ getSourceAnchor()

DString DefinitionImpl::getSourceAnchor ( ) const

Definition at line 950 of file definition.cpp.

951{
952 const int maxAnchorStrLen = 20;
953 char anchorStr[maxAnchorStrLen];
954 anchorStr[0]='\0';
955 if (p->body && p->body->startLine!=-1)
956 {
957 if (Htags::useHtags)
958 {
959 snprintf(anchorStr,maxAnchorStrLen,"L%d",p->body->defLine);
960 }
961 else
962 {
963 snprintf(anchorStr,maxAnchorStrLen,"l%05d",p->body->defLine);
964 }
965 }
966 return anchorStr;
967}
static bool useHtags
Definition htags.h:23

References p, and Htags::useHtags.

Referenced by DefinitionMixin< Base >::getSourceAnchor(), operator=(), and writeSourceDef().

◆ getSourceFileBase()

DString DefinitionImpl::getSourceFileBase ( ) const

Definition at line 937 of file definition.cpp.

938{
939 ASSERT(p->def->definitionType()!=Definition::TypeFile); // file overloads this method
940 DString fn;
941 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
942 if (sourceBrowser &&
943 p->body && p->body->startLine!=-1 && p->body->fileDef)
944 {
945 fn = p->body->fileDef->getSourceFileBase();
946 }
947 return fn;
948}
#define ASSERT(x)
Definition dstring.h:29

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

Referenced by DefinitionMixin< Base >::getSourceFileBase(), operator=(), and writeSourceDef().

◆ getStartBodyLine()

int DefinitionImpl::getStartBodyLine ( ) const

Definition at line 1749 of file definition.cpp.

1750{
1751 return p->body ? p->body->startLine : -1;
1752}

References p.

Referenced by DefinitionMixin< Base >::getStartBodyLine(), operator=(), and writeToc().

◆ getStartDefLine()

int DefinitionImpl::getStartDefLine ( ) const

Definition at line 1744 of file definition.cpp.

1745{
1746 return p->body ? p->body->defLine : -1;
1747}

References p.

Referenced by DefinitionMixin< Base >::getStartDefLine(), and operator=().

◆ hasBriefDescription()

bool DefinitionImpl::hasBriefDescription ( ) const

Definition at line 1884 of file definition.cpp.

1885{
1886 bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
1887 return !briefDescription().empty() && briefMemberDesc;
1888}
DString briefDescription(bool abbreviate=false) const

References briefDescription(), Config_getBool, and DString::empty().

Referenced by DefinitionMixin< Base >::hasBriefDescription(), and operator=().

◆ hasDocumentation()

bool DefinitionImpl::hasDocumentation ( ) const

Definition at line 1233 of file definition.cpp.

1234{
1235 bool extractAll = Config_getBool(EXTRACT_ALL);
1236 //bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1237 bool hasDocs =
1238 (p->details && !p->details->doc.empty()) || // has detailed docs
1239 (p->brief && !p->brief->doc.empty()) || // has brief description
1240 (p->inbodyDocs && !p->inbodyDocs->doc.empty()) || // has inbody docs
1241 extractAll //|| // extract everything
1242 // (sourceBrowser && p->body &&
1243 // p->body->startLine!=-1 && p->body->fileDef)
1244 ; // link to definition
1245 return hasDocs;
1246}

References Config_getBool, and p.

Referenced by DefinitionMixin< Base >::hasDocumentation(), and operator=().

◆ hasRequirementRefs()

bool DefinitionImpl::hasRequirementRefs ( ) const

Definition at line 1228 of file definition.cpp.

1229{
1230 return !p->requirementRefs.empty();
1231}

References p.

Referenced by DefinitionMixin< Base >::hasRequirementRefs(), and operator=().

◆ hasSections()

bool DefinitionImpl::hasSections ( ) const

Definition at line 341 of file definition.cpp.

342{
343 //printf("DefinitionImpl::hasSections(%s) #sections=%zu\n",qPrint(name()), p->sectionRefs.size());
344 if (p->sectionRefs.empty()) return false;
345 for (const SectionInfo *si : p->sectionRefs)
346 {
347 if (si->type().isSection())
348 {
349 return true;
350 }
351 }
352 return false;
353}
SectionType type() const
Definition section.h:71
constexpr bool isSection() const
Definition section.h:47

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

Referenced by DefinitionMixin< Base >::hasSections(), and operator=().

◆ hasSourceReffedBy()

bool DefinitionImpl::hasSourceReffedBy ( ) const

Definition at line 1218 of file definition.cpp.

1219{
1220 return !p->sourceRefByDict.empty();
1221}

References p.

Referenced by DefinitionMixin< Base >::hasSourceReffedBy(), and operator=().

◆ hasSourceRefs()

bool DefinitionImpl::hasSourceRefs ( ) const

Definition at line 1223 of file definition.cpp.

1224{
1225 return !p->sourceRefsDict.empty();
1226}

References p.

Referenced by DefinitionMixin< Base >::hasSourceRefs(), and operator=().

◆ hasSources()

bool DefinitionImpl::hasSources ( ) const

Definition at line 1040 of file definition.cpp.

1041{
1042 return p->body && p->body->startLine!=-1 &&
1043 p->body->endLine>=p->body->startLine &&
1044 p->body->fileDef;
1045}

References p.

Referenced by DefinitionMixin< Base >::hasSources(), operator=(), and writeInlineCode().

◆ hasUserDocumentation()

bool DefinitionImpl::hasUserDocumentation ( ) const

Definition at line 1248 of file definition.cpp.

1249{
1250 bool hasDocs =
1251 (p->details && !p->details->doc.empty()) ||
1252 (p->brief && !p->brief->doc.empty()) ||
1253 (p->inbodyDocs && !p->inbodyDocs->doc.empty());
1254 return hasDocs;
1255}

References p.

Referenced by DefinitionMixin< Base >::hasUserDocumentation(), and operator=().

◆ id()

DString DefinitionImpl::id ( ) const

Definition at line 314 of file definition.cpp.

315{
316 return p->id;
317}

References p.

Referenced by DefinitionMixin< Base >::id(), operator=(), and setId().

◆ inbodyDocumentation()

DString DefinitionImpl::inbodyDocumentation ( ) const

Definition at line 1681 of file definition.cpp.

1682{
1683 return p->inbodyDocs ? p->inbodyDocs->doc : DString("");
1684}

References DString::DString(), and p.

Referenced by DefinitionMixin< Base >::inbodyDocumentation(), and operator=().

◆ inbodyFile()

DString DefinitionImpl::inbodyFile ( ) const

Definition at line 1691 of file definition.cpp.

1692{
1693 return p->inbodyDocs && !p->inbodyDocs->file.empty() ? p->inbodyDocs->file : DString("<"+p->name+">");
1694}

References DString::DString(), and p.

Referenced by _setInbodyDocumentation(), DefinitionMixin< Base >::inbodyFile(), operator=(), and setInbodyDocumentation().

◆ inbodyLine()

int DefinitionImpl::inbodyLine ( ) const

Definition at line 1686 of file definition.cpp.

1687{
1688 return p->inbodyDocs ? p->inbodyDocs->line : 1;
1689}

References p.

Referenced by _setInbodyDocumentation(), DefinitionMixin< Base >::inbodyLine(), operator=(), and setInbodyDocumentation().

◆ isAnonymous()

bool DefinitionImpl::isAnonymous ( ) const

Definition at line 1917 of file definition.cpp.

1918{
1919 return p->isAnonymous;
1920}

References p.

Referenced by DefinitionMixin< Base >::isAnonymous(), and operator=().

◆ isArtificial()

bool DefinitionImpl::isArtificial ( ) const

Definition at line 1724 of file definition.cpp.

1725{
1726 return p->isArtificial;
1727}

References p.

Referenced by DefinitionMixin< Base >::isArtificial(), and operator=().

◆ isExported()

bool DefinitionImpl::isExported ( ) const

Definition at line 1729 of file definition.cpp.

1730{
1731 return p->isExported;
1732}

References p.

Referenced by DefinitionMixin< Base >::isExported(), and operator=().

◆ isHidden()

bool DefinitionImpl::isHidden ( ) const

Definition at line 1709 of file definition.cpp.

1710{
1711 return p->hidden;
1712}

References p.

Referenced by DefinitionMixin< Base >::isHidden(), and operator=().

◆ isLinkableViaGroup()

bool DefinitionImpl::isLinkableViaGroup ( ) const

Definition at line 1769 of file definition.cpp.

1770{
1771 for (const auto &gd : partOfGroups())
1772 {
1773 if (gd->isLinkable()) return true;
1774 }
1775 return false;
1776}
const GroupList & partOfGroups() const

References partOfGroups().

Referenced by DefinitionMixin< Base >::isLinkableViaGroup(), and operator=().

◆ isReference()

bool DefinitionImpl::isReference ( ) const

Definition at line 1739 of file definition.cpp.

1740{
1741 return !p->ref.empty();
1742}

References p.

Referenced by DefinitionMixin< Base >::isReference(), and operator=().

◆ isVisible()

bool DefinitionImpl::isVisible ( ) const

Definition at line 1719 of file definition.cpp.

1720{
1721 return p->def->isLinkable() && !p->hidden;
1722}

References p.

Referenced by DefinitionMixin< Base >::isVisible(), and operator=().

◆ isVisibleInProject()

bool DefinitionImpl::isVisibleInProject ( ) const

Definition at line 1714 of file definition.cpp.

1715{
1716 return p->def->isLinkableInProject() && !p->hidden;
1717}

References p.

Referenced by DefinitionMixin< Base >::isVisibleInProject(), and operator=().

◆ localName()

const DString & DefinitionImpl::localName ( ) const

Definition at line 1324 of file definition.cpp.

1325{
1326 return p->localName;
1327}

References p.

Referenced by DefinitionMixin< Base >::localName(), navigationPathAsString(), and operator=().

◆ makePartOfGroup()

void DefinitionImpl::makePartOfGroup ( GroupDef * gd)

Definition at line 1329 of file definition.cpp.

1330{
1331 p->partOfGroups.push_back(gd);
1332}

References p.

Referenced by DefinitionMixin< Base >::makePartOfGroup(), and operator=().

◆ mergeReferencedBy()

void DefinitionImpl::mergeReferencedBy ( const Definition * other)

Definition at line 1821 of file definition.cpp.

1822{
1823 const DefinitionImpl *defImpl = other->toDefinitionImpl_();
1824 if (defImpl)
1825 {
1826 for (const auto &kv : defImpl->p->sourceRefByDict)
1827 {
1828 auto it = p->sourceRefByDict.find(kv.first);
1829 if (it != p->sourceRefByDict.end())
1830 {
1831 p->sourceRefByDict.emplace(kv.first,kv.second);
1832 }
1833 }
1834 }
1835}
virtual const DefinitionImpl * toDefinitionImpl_() const =0
DefinitionImpl(Definition *def, const DString &defFileName, int defLine, int defColumn, const DString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=true)

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

Referenced by DefinitionMixin< Base >::mergeReferencedBy(), and operator=().

◆ mergeReferences()

void DefinitionImpl::mergeReferences ( const Definition * other)

Definition at line 1805 of file definition.cpp.

1806{
1807 const DefinitionImpl *defImpl = other->toDefinitionImpl_();
1808 if (defImpl)
1809 {
1810 for (const auto &kv : defImpl->p->sourceRefsDict)
1811 {
1812 auto it = p->sourceRefsDict.find(kv.first);
1813 if (it != p->sourceRefsDict.end())
1814 {
1815 p->sourceRefsDict.insert(kv);
1816 }
1817 }
1818 }
1819}

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

Referenced by DefinitionMixin< Base >::mergeReferences(), and operator=().

◆ mergeRefItems()

void DefinitionImpl::mergeRefItems ( Definition * d)

Definition at line 1344 of file definition.cpp.

1345{
1346 auto otherXrefList = d->xrefListItems();
1347
1348 // append vectors
1349 p->xrefListItems.reserve(p->xrefListItems.size()+otherXrefList.size());
1350 p->xrefListItems.insert (p->xrefListItems.end(),
1351 otherXrefList.begin(),otherXrefList.end());
1352
1353 // sort results on itemId
1354 std::stable_sort(p->xrefListItems.begin(),p->xrefListItems.end(),
1355 [](RefItem *left,RefItem *right)
1356 { return left->id() <right->id() ||
1357 (left->id()==right->id() &&
1358 left->list()->listName() < right->list()->listName());
1359 });
1360
1361 // filter out duplicates
1362 auto last = std::unique(p->xrefListItems.begin(),p->xrefListItems.end(),
1363 [](const RefItem *left,const RefItem *right)
1364 { return left->id()==right->id() &&
1365 left->list()->listName()==right->list()->listName();
1366 });
1367 p->xrefListItems.erase(last, p->xrefListItems.end());
1368}
virtual const RefItemVector & xrefListItems() const =0

References p, and Definition::xrefListItems().

Referenced by DefinitionMixin< Base >::mergeRefItems(), and operator=().

◆ name()

const DString & DefinitionImpl::name ( ) const

◆ navigationPathAsString()

DString DefinitionImpl::navigationPathAsString ( ) const

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

Definition at line 1430 of file definition.cpp.

1431{
1432 DString result;
1433 Definition *outerScope = getOuterScope();
1434 DString locName = localName();
1435 if (outerScope && outerScope!=Doxygen::globalScope)
1436 {
1437 result+=outerScope->navigationPathAsString();
1438 }
1439 else if (p->def->definitionType()==Definition::TypeFile &&
1440 toFileDef(p->def)->getDirDef())
1441 {
1442 result+=(toFileDef(p->def))->getDirDef()->navigationPathAsString();
1443 }
1444 result+="<li class=\"navelem\">";
1445 if (p->def->isLinkableInProject())
1446 {
1447 DString fn = p->def->getOutputFileBase();
1449 if (p->def->definitionType()==Definition::TypeGroup &&
1450 !toGroupDef(p->def)->groupTitle().empty())
1451 {
1452 DString title = parseCommentAsHtml(p->def,nullptr,toGroupDef(p->def)->groupTitle(),
1453 p->def->getDefFileName(),p->def->getDefLine());
1454 result+="<a href=\"$relpath^"+fn+"\">"+title+"</a>";
1455 }
1456 else if (p->def->definitionType()==Definition::TypePage &&
1457 toPageDef(p->def)->hasTitle())
1458 {
1459 DString title = parseCommentAsHtml(p->def,nullptr,toPageDef(p->def)->title(),
1460 p->def->getDefFileName(),p->def->getDefLine());
1461 result+="<a href=\"$relpath^"+fn+"\">"+title+"</a>";
1462 }
1463 else if (p->def->definitionType()==Definition::TypeClass)
1464 {
1465 DString name = toClassDef(p->def)->className();
1466 if (name.endsWith("-p"))
1467 {
1468 name = name.left(name.length()-2);
1469 }
1470 result+="<a href=\"$relpath^"+fn;
1471 if (!p->def->anchor().empty()) result+="#"+p->def->anchor();
1472 result+="\">"+convertToHtml(name)+"</a>";
1473 }
1474 else
1475 {
1476 result+="<a href=\"$relpath^"+fn+"\">"+
1477 convertToHtml(locName)+"</a>";
1478 }
1479 }
1480 else
1481 {
1482 result+="<b>"+convertToHtml(locName)+"</b>";
1483 }
1484 result+="</li>";
1485 return result;
1486}
virtual DString className() const =0
Returns the name of the class including outer classes, but not including namespaces.
DString left(size_t len) const
Definition dstring.h:311
bool endsWith(const char *s) const
Definition dstring.h:606
virtual DString navigationPathAsString() const =0
const DString & localName() const
Definition * getOuterScope() const
static NamespaceDefMutable * globalScope
Definition doxygen.h:121
virtual DirDef * getDirDef() const =0
virtual DString groupTitle() const =0
virtual bool hasTitle() const =0
virtual DString title() const =0
ClassDef * toClassDef(Definition *d)
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1966
GroupDef * toGroupDef(Definition *d)
PageDef * toPageDef(Definition *d)
Definition pagedef.cpp:519
DString convertToHtml(const DString &s, bool keepEntities)
Definition util.cpp:4011
DString parseCommentAsHtml(const Definition *scope, const MemberDef *member, const DString &doc, const DString &fileName, int lineNr)
Definition util.cpp:5471
void addHtmlExtensionIfMissing(DString &fName)
Definition util.cpp:4969

References addHtmlExtensionIfMissing(), ClassDef::className(), convertToHtml(), DString::empty(), DString::endsWith(), FileDef::getDirDef(), getOuterScope(), Doxygen::globalScope, GroupDef::groupTitle(), PageDef::hasTitle(), DString::left(), DString::length(), localName(), name(), Definition::navigationPathAsString(), p, parseCommentAsHtml(), PageDef::title(), toClassDef(), toFileDef(), toGroupDef(), toPageDef(), Definition::TypeClass, Definition::TypeFile, Definition::TypeGroup, and Definition::TypePage.

Referenced by DefinitionMixin< Base >::navigationPathAsString(), operator=(), and writeNavigationPath().

◆ operator=() [1/2]

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

Definition at line 277 of file definition.cpp.

278{
279 if (this!=&other)
280 {
281 p = std::make_unique<Private>(*other.p);
282 }
283 return *this;
284}

References DefinitionImpl(), and p.

◆ operator=() [2/2]

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

References _docsAlreadyAdded(), _getXRefListId(), _setBriefDescription(), _setDocumentation(), _setInbodyDocumentation(), _setSymbolName(), _symbolName(), _writeSourceRefList(), addInnerCompound(), addSectionsToDefinition(), addSourceReferencedBy(), addSourceReferences(), briefDescription(), briefDescriptionAsTooltip(), briefFile(), briefLine(), computeTooltip(), DefinitionImpl(), docFile(), docLine(), documentation(), externalReference(), findInnerCompound(), getBodyDef(), getDefColumn(), getDefFileExtension(), getDefFileName(), getDefLine(), getEndBodyLine(), getLanguage(), getOuterScope(), getReference(), getReferencedByMembers(), getReferencesMembers(), getSectionRefs(), getSourceAnchor(), getSourceFileBase(), getStartBodyLine(), getStartDefLine(), hasBriefDescription(), hasDocumentation(), hasRequirementRefs(), hasSections(), hasSourceReffedBy(), hasSourceRefs(), hasSources(), hasUserDocumentation(), id(), inbodyDocumentation(), inbodyFile(), inbodyLine(), isAnonymous(), isArtificial(), isExported(), isHidden(), isLinkableViaGroup(), isReference(), isVisible(), isVisibleInProject(), localName(), makePartOfGroup(), mergeReferencedBy(), mergeReferences(), mergeRefItems(), name(), navigationPathAsString(), partOfGroups(), pathFragment(), qualifiedName(), requirementReferences(), setArtificial(), setBodyDef(), setBodySegment(), setBriefDescription(), setDefFile(), setDocumentation(), setExported(), setHidden(), setId(), setInbodyDocumentation(), setLanguage(), setLocalName(), setName(), setOuterScope(), setReference(), setRefItems(), setRequirementReferences(), stripWhiteSpace(), symbolName(), writeDocAnchorsToTagFile(), writeInlineCode(), writeNavigationPath(), writePageNavigation(), writeQuickMemberLinks(), writeRequirementRefs(), writeSourceDef(), writeSourceReffedBy(), writeSourceRefs(), writeSummaryLinks(), writeToc(), and xrefListItems().

◆ partOfGroups()

const GroupList & DefinitionImpl::partOfGroups ( ) const

Definition at line 1764 of file definition.cpp.

1765{
1766 return p->partOfGroups;
1767}

References p.

Referenced by isLinkableViaGroup(), operator=(), and DefinitionMixin< Base >::partOfGroups().

◆ pathFragment()

DString DefinitionImpl::pathFragment ( ) const

Definition at line 1392 of file definition.cpp.

1393{
1394 DString result;
1395 if (p->outerScope && p->outerScope!=Doxygen::globalScope)
1396 {
1397 result = p->outerScope->pathFragment();
1398 }
1399 if (p->def->isLinkable())
1400 {
1401 if (!result.empty()) result+="/";
1402 if (p->def->definitionType()==Definition::TypeGroup &&
1403 !toGroupDef(p->def)->groupTitle().empty())
1404 {
1405 result+=toGroupDef(p->def)->groupTitle();
1406 }
1407 else if (p->def->definitionType()==Definition::TypePage &&
1408 toPageDef(p->def)->hasTitle())
1409 {
1410 result+=toPageDef(p->def)->title();
1411 }
1412 else
1413 {
1414 result+=p->localName;
1415 }
1416 }
1417 else
1418 {
1419 result+=p->localName;
1420 }
1421 return result;
1422}

References DString::empty(), Doxygen::globalScope, GroupDef::groupTitle(), PageDef::hasTitle(), p, PageDef::title(), toGroupDef(), toPageDef(), Definition::TypeGroup, and Definition::TypePage.

Referenced by operator=(), and DefinitionMixin< Base >::pathFragment().

◆ qualifiedName()

DString DefinitionImpl::qualifiedName ( ) const

Definition at line 1283 of file definition.cpp.

1284{
1285 std::call_once(p->qualifiedNameOnce.flag, [this]()
1286 {
1287 //printf("start %s::qualifiedName() localName=%s\n",qPrint(name()),qPrint(p->localName));
1288 if (p->outerScope==nullptr || p->outerScope->name()=="<globalScope>")
1289 {
1290 p->qualifiedName = (p->localName=="<globalScope>") ? DString() : p->localName;
1291 }
1292 else
1293 {
1294 p->qualifiedName = p->outerScope->qualifiedName()+
1295 getLanguageSpecificSeparator(getLanguage())+
1296 p->localName;
1297 }
1298 //printf("end %s::qualifiedName()=%s\n",qPrint(name()),qPrint(p->qualifiedName));
1299 });
1300 return p->qualifiedName;
1301}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::qualifiedName().

◆ requirementReferences()

const RequirementRefs & DefinitionImpl::requirementReferences ( ) const

Definition at line 1387 of file definition.cpp.

1388{
1389 return p->requirementRefs;
1390}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::requirementReferences().

◆ setArtificial()

void DefinitionImpl::setArtificial ( bool b)

Definition at line 1853 of file definition.cpp.

1854{
1855 p->isArtificial = b;
1856}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::setArtificial().

◆ setBodyDef()

void DefinitionImpl::setBodyDef ( const FileDef * fd)

Definition at line 1031 of file definition.cpp.

1032{
1033 if (!p->body.has_value())
1034 {
1035 p->body = std::make_optional<BodyInfo>();
1036 }
1037 p->body.value().fileDef=fd;
1038}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::setBodyDef().

◆ setBodySegment()

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

Definition at line 1019 of file definition.cpp.

1020{
1021 if (!p->body.has_value())
1022 {
1023 p->body = std::make_optional<BodyInfo>();
1024 }
1025 BodyInfo &body = p->body.value();
1026 body.defLine = defLine;
1027 body.startLine = bls;
1028 body.endLine = ble;
1029}
int startLine
line number of the start of the definition's body
Definition definition.h:66
int endLine
line number of the end of the definition's body
Definition definition.h:67
int defLine
line number of the start of the definition
Definition definition.h:65

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

Referenced by operator=(), and DefinitionMixin< Base >::setBodySegment().

◆ setBriefDescription()

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

Definition at line 511 of file definition.cpp.

512{
513 if (b.empty()) return;
515}

References _setBriefDescription(), briefFile(), briefLine(), and DString::empty().

Referenced by operator=(), and DefinitionMixin< Base >::setBriefDescription().

◆ setDefFile()

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

Definition at line 160 of file definition.cpp.

161{
162 p->setDefFileName(df);
163 p->defLine = defLine;
164 p->defColumn = defCol;
165}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::setDefFile().

◆ setDocumentation()

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

Definition at line 448 of file definition.cpp.

449{
450 if (d.empty()) return;
452}

References _setDocumentation(), docFile(), docLine(), DString::empty(), and stripWhiteSpace().

Referenced by operator=(), and DefinitionMixin< Base >::setDocumentation().

◆ setExported()

void DefinitionImpl::setExported ( bool b)

Definition at line 1858 of file definition.cpp.

1859{
1860 p->isExported = b;
1861}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::setExported().

◆ setHidden()

void DefinitionImpl::setHidden ( bool b)

Definition at line 1848 of file definition.cpp.

1849{
1850 p->hidden = p->hidden || b;
1851}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::setHidden().

◆ setId()

void DefinitionImpl::setId ( const DString & name)

Definition at line 303 of file definition.cpp.

304{
305 if (id.empty()) return;
306 p->id = id;
308 {
309 //printf("DefinitionImpl::setId '%s'->'%s'\n",id,qPrint(p->name));
310 Doxygen::clangUsrMap->emplace(id.str(),p->def);
311 }
312}
DString id() const
static ClangUsrMap * clangUsrMap
Definition doxygen.h:126

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

Referenced by operator=(), and DefinitionMixin< Base >::setId().

◆ setInbodyDocumentation()

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

Definition at line 539 of file definition.cpp.

540{
541 if (d.empty()) return;
543}
void _setInbodyDocumentation(const DString &d, const DString &docFile, int docLine)

References _setInbodyDocumentation(), DString::empty(), inbodyFile(), and inbodyLine().

Referenced by operator=(), and DefinitionMixin< Base >::setInbodyDocumentation().

◆ setLanguage()

void DefinitionImpl::setLanguage ( SrcLangExt lang)

Definition at line 1868 of file definition.cpp.

1869{
1870 p->lang=lang;
1871}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::setLanguage().

◆ setLocalName()

void DefinitionImpl::setLocalName ( const DString & name)

Definition at line 1863 of file definition.cpp.

1864{
1865 p->localName=name;
1866}

References name(), and p.

Referenced by operator=(), and DefinitionMixin< Base >::setLocalName().

◆ setName()

void DefinitionImpl::setName ( const DString & name)

Definition at line 294 of file definition.cpp.

295{
296 if (name.empty()) return;
297 p->name = name;
298 p->isAnonymous = p->name.empty() ||
299 p->name.at(0)=='@' ||
300 p->name.find("::@")!=DString::npos;
301}

References DString::empty(), name(), DString::npos, and p.

Referenced by DefinitionImpl(), operator=(), and DefinitionMixin< Base >::setName().

◆ setOuterScope()

void DefinitionImpl::setOuterScope ( Definition * d)

Definition at line 1303 of file definition.cpp.

1304{
1305 //printf("%s::setOuterScope(%s)\n",qPrint(name()),d?qPrint(d->name()):"<none>");
1306 Definition *outerScope = p->outerScope;
1307 bool found=false;
1308 // make sure that we are not creating a recursive scope relation.
1309 while (outerScope && !found)
1310 {
1311 found = (outerScope==d);
1312 outerScope = outerScope->getOuterScope();
1313 }
1314 if (!found)
1315 {
1316 p->qualifiedName.clear(); // flush cached scope name
1317 p->qualifiedNameOnce.reset();
1318 p->outerScope = d;
1319 }
1320 p->hidden = p->hidden || d->isHidden();
1321 assert(p->def!=p->outerScope);
1322}
virtual bool isHidden() const =0
virtual Definition * getOuterScope() const =0

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

Referenced by operator=(), and DefinitionMixin< Base >::setOuterScope().

◆ setReference()

void DefinitionImpl::setReference ( const DString & r)

Definition at line 1838 of file definition.cpp.

1839{
1840 p->ref=r;
1841}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::setReference().

◆ setRefItems()

void DefinitionImpl::setRefItems ( const RefItemVector & sli)

Definition at line 1334 of file definition.cpp.

1335{
1336 p->xrefListItems.insert(p->xrefListItems.end(), sli.cbegin(), sli.cend());
1337}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::setRefItems().

◆ setRequirementReferences()

void DefinitionImpl::setRequirementReferences ( const RequirementRefs & rqli)

Definition at line 1339 of file definition.cpp.

1340{
1341 p->requirementRefs.insert(p->requirementRefs.end(), rqli.cbegin(), rqli.cend());
1342}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::setRequirementReferences().

◆ symbolName()

DString DefinitionImpl::symbolName ( ) const

Definition at line 1574 of file definition.cpp.

1575{
1576 return p->symbolName;
1577}

References p.

Referenced by addToMap(), operator=(), and DefinitionMixin< Base >::symbolName().

◆ writeDocAnchorsToTagFile()

void DefinitionImpl::writeDocAnchorsToTagFile ( TextStream & tagFile) const

Definition at line 355 of file definition.cpp.

356{
357 if (!p->sectionRefs.empty())
358 {
359 //printf("%s: writeDocAnchorsToTagFile(%d)\n",qPrint(name()),p->sectionRef.size());
360 for (const SectionInfo *si : p->sectionRefs)
361 {
362 if (!si->generated() && si->ref().empty() && !AnchorGenerator::instance().isGenerated(si->label().str()))
363 {
364 //printf("write an entry!\n");
365 if (p->def->definitionType()==Definition::TypeMember) tagFile << " ";
366 DString fn = si->fileName();
368 tagFile << " <docanchor file=\"" << fn << "\"";
369 if (!si->title().empty())
370 {
371 tagFile << " title=\"" << convertToXML(si->title()) << "\"";
372 }
373 tagFile << ">" << si->label() << "</docanchor>\n";
374 }
375 }
376 }
377}
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
DString fileName() const
Definition section.h:74
bool generated() const
Definition section.h:75
DString title() const
Definition section.h:70
DString ref() const
Definition section.h:72
DString convertToXML(const DString &s, bool keepEntities, const bool citeEntry)
Definition util.cpp:3956

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

Referenced by operator=(), and DefinitionMixin< Base >::writeDocAnchorsToTagFile().

◆ writeInlineCode()

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

Write code of this definition into the documentation

Definition at line 1048 of file definition.cpp.

1049{
1050 const MemberDef *thisMd = nullptr;
1051 if (p->def->definitionType()==Definition::TypeMember)
1052 {
1053 thisMd = toMemberDef(p->def);
1054 }
1055 bool inlineSources = thisMd && thisMd->hasInlineSource() && thisMd->initializer().empty();
1056 //printf("Source Fragment %s: %d-%d\n",qPrint(name()),
1057 // p->body->startLine,p->body->endLine);
1058 if (inlineSources && hasSources())
1059 {
1060 ol.pushGeneratorState();
1061 DString codeFragment;
1062 bool isMacro = thisMd && thisMd->memberType()==MemberType::Define;
1063 int actualStart=p->body->startLine,actualEnd=p->body->endLine;
1064 if (readCodeFragment(p->body->fileDef->absFilePath(),isMacro,
1065 actualStart,actualEnd,codeFragment)
1066 )
1067 {
1068 //printf("Adding code fragment '%s' ext='%s' range=%d-%d\n",
1069 // qPrint(codeFragment),qPrint(p->defFileExt),actualStart,actualEnd);
1070 auto intf = Doxygen::parserManager->getCodeParser(p->defFileExt);
1071 intf->resetCodeParserState();
1072 //printf("Read:\n'%s'\n\n",qPrint(codeFragment));
1073
1074 auto &codeOL = ol.codeGenerators();
1075 codeOL.startCodeFragment("DoxyCode");
1076 size_t indent = 0;
1077 intf->parseCode(codeOL, // codeOutIntf
1078 scopeName, // scope
1079 detab(codeFragment,indent), // input
1080 p->lang, // lang
1081 Config_getBool(STRIP_CODE_COMMENTS),
1082 CodeParserOptions()
1083 .setFileDef(p->body->fileDef)
1084 .setStartLine(actualStart)
1085 .setEndLine(actualEnd)
1086 .setInlineFragment(true)
1087 .setMemberDef(thisMd)
1088 );
1089 codeOL.endCodeFragment("DoxyCode");
1090 }
1091 ol.popGeneratorState();
1092 }
1093}
bool hasSources() const
static ParserManager * parserManager
Definition doxygen.h:129
virtual const DString & initializer() const =0
virtual bool hasInlineSource() const =0
virtual MemberType memberType() const =0
void startCodeFragment(const DString &style)
Definition outputlist.h:279
const OutputCodeList & codeGenerators() const
Definition outputlist.h:358
void pushGeneratorState()
void popGeneratorState()
std::unique_ptr< CodeParserInterface > getCodeParser(const DString &extension)
Gets the interface to the parser associated with a given extension.
Definition parserintf.h:254
bool readCodeFragment(const DString &fileName, bool isMacro, int &startLine, int &endLine, DString &result)
Reads a fragment from file fileName starting with line startLine and ending with line endLine.
DString detab(const DString &s, size_t &refIndent)
Definition util.cpp:6764

References OutputList::codeGenerators(), Config_getBool, detab(), DString::empty(), ParserManager::getCodeParser(), MemberDef::hasInlineSource(), hasSources(), MemberDef::initializer(), MemberDef::memberType(), p, Doxygen::parserManager, OutputList::popGeneratorState(), OutputList::pushGeneratorState(), readCodeFragment(), CodeParserOptions::setEndLine(), CodeParserOptions::setInlineFragment(), CodeParserOptions::setMemberDef(), CodeParserOptions::setStartLine(), OutputCodeList::startCodeFragment(), toMemberDef(), and Definition::TypeMember.

Referenced by operator=(), and DefinitionMixin< Base >::writeInlineCode().

◆ writeNavigationPath()

void DefinitionImpl::writeNavigationPath ( OutputList & ol) const

Definition at line 1489 of file definition.cpp.

1490{
1491 ol.pushGeneratorState();
1493
1494 DString navPath;
1495 navPath += "<div id=\"nav-path\" class=\"navpath\">\n"
1496 " <ul>\n";
1497 navPath += navigationPathAsString();
1498 navPath += " </ul>\n"
1499 "</div>\n";
1500 ol.writeNavigationPath(navPath);
1501
1502 ol.popGeneratorState();
1503}
DString navigationPathAsString() const
void writeNavigationPath(const DString &s)
Definition outputlist.h:608
void disableAllBut(OutputType o)

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

Referenced by operator=(), and DefinitionMixin< Base >::writeNavigationPath().

◆ writePageNavigation()

void DefinitionImpl::writePageNavigation ( OutputList & ol) const

Definition at line 1940 of file definition.cpp.

1941{
1942}

Referenced by operator=(), and DefinitionMixin< Base >::writePageNavigation().

◆ writeQuickMemberLinks()

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

Definition at line 1932 of file definition.cpp.

1933{
1934}

Referenced by operator=(), and DefinitionMixin< Base >::writeQuickMemberLinks().

◆ writeRequirementRefs()

void DefinitionImpl::writeRequirementRefs ( OutputList & ol) const

Definition at line 1191 of file definition.cpp.

1192{
1193 if (!Config_getBool(GENERATE_REQUIREMENTS)) return;
1194 auto writeRefsForType = [&ol](const RequirementRefs &refs,const char *parType,const DString &text)
1195 {
1196 size_t num = refs.size();
1197 if (num>0)
1198 {
1199 ol.startParagraph(parType);
1200 ol.parseText(text);
1201 ol.docify(" ");
1202 writeMarkerList(ol,
1203 theTranslator->trWriteList(static_cast<int>(num)).str(), num,
1204 [&refs,&ol](size_t entryIndex) { RequirementManager::instance().writeRef(ol,refs[entryIndex]); }
1205 );
1206 ol.writeString(".");
1207 ol.endParagraph();
1208 }
1209 };
1210
1211 RequirementRefs satisfiesRefs;
1212 RequirementRefs verifiesRefs;
1213 splitRequirementRefs(p->requirementRefs,satisfiesRefs,verifiesRefs);
1214 writeRefsForType(satisfiesRefs,"satisfies",theTranslator->trSatisfies(satisfiesRefs.size()==1));
1215 writeRefsForType(verifiesRefs, "verifies", theTranslator->trVerifies(verifiesRefs.size()==1));
1216}
virtual DString trVerifies(bool singular)=0
virtual DString trSatisfies(bool singular)=0
void splitRequirementRefs(const RequirementRefs &inputReqRefs, RequirementRefs &satisfiesRefs, RequirementRefs &verifiesRefs)
std::vector< RequirementRef > RequirementRefs
List of requirement references.
Definition requirement.h:56

References Config_getBool, OutputList::docify(), OutputList::endParagraph(), p, OutputList::parseText(), splitRequirementRefs(), OutputList::startParagraph(), DString::str(), theTranslator, Translator::trSatisfies(), Translator::trVerifies(), Translator::trWriteList(), writeMarkerList(), and OutputList::writeString().

Referenced by operator=(), and DefinitionMixin< Base >::writeRequirementRefs().

◆ writeSourceDef()

void DefinitionImpl::writeSourceDef ( OutputList & ol) const

Write a reference to the source code defining this definition

Definition at line 970 of file definition.cpp.

971{
972 //printf("DefinitionImpl::writeSourceRef %d %p\n",bodyLine,bodyDef);
973 DString fn = getSourceFileBase();
974 if (!fn.empty())
975 {
976 DString refText = theTranslator->trDefinedAtLineInSourceFile();
977 size_t lineMarkerPos = refText.find("@0");
978 size_t fileMarkerPos = refText.find("@1");
979 if (lineMarkerPos!=DString::npos && fileMarkerPos!=DString::npos) // should always pass this.
980 {
981 DString lineStr;
982 lineStr.sprintf("%d",p->body->defLine);
983 DString anchorStr = getSourceAnchor();
984 ol.startParagraph("definition");
985 if (lineMarkerPos<fileMarkerPos) // line marker before file marker
986 {
987 // write text left from linePos marker
988 ol.parseText(refText.left(lineMarkerPos));
989 ol.writeObjectLink(DString(),fn,anchorStr,lineStr);
990 // write text between markers
991 ol.parseText(refText.mid(lineMarkerPos+2,fileMarkerPos-lineMarkerPos-2));
992 // write file link
993 ol.writeObjectLink(DString(),fn,DString(),p->body->fileDef->name());
994 // write text right from file marker
995 ol.parseText(refText.mid(fileMarkerPos+2));
996 }
997 else // file marker before line marker
998 {
999 // write text left from file marker
1000 ol.parseText(refText.left(fileMarkerPos));
1001 // write file link
1002 ol.writeObjectLink(DString(),fn,DString(),p->body->fileDef->name());
1003 // write text between markers
1004 ol.parseText(refText.mid(fileMarkerPos+2,lineMarkerPos-fileMarkerPos-2));
1005 // write line link
1006 ol.writeObjectLink(DString(),fn,anchorStr,lineStr);
1007 // write text right from linePos marker
1008 ol.parseText(refText.mid(lineMarkerPos+2));
1009 }
1010 ol.endParagraph();
1011 }
1012 else
1013 {
1014 err("translation error: invalid markers in trDefinedAtLineInSourceFile()\n");
1015 }
1016 }
1017}
DString mid(size_t index, size_t len=npos) const
Definition dstring.h:323
DString & sprintf(const char *format,...)
Definition dstring.cpp:29
DString getSourceAnchor() const
DString getSourceFileBase() const
virtual DString trDefinedAtLineInSourceFile()=0

References DString::DString(), DString::empty(), OutputList::endParagraph(), err, DString::find(), getSourceAnchor(), getSourceFileBase(), DString::left(), DString::mid(), DString::npos, p, OutputList::parseText(), DString::sprintf(), OutputList::startParagraph(), theTranslator, Translator::trDefinedAtLineInSourceFile(), and OutputList::writeObjectLink().

Referenced by operator=(), and DefinitionMixin< Base >::writeSourceDef().

◆ writeSourceReffedBy()

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

Definition at line 1181 of file definition.cpp.

1182{
1183 _writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),p->sourceRefByDict,false);
1184}
void _writeSourceRefList(OutputList &ol, const DString &scopeName, const DString &text, const std::unordered_map< std::string, MemberDef * > &members, bool) const
virtual DString trReferencedBy()=0

References _writeSourceRefList(), p, theTranslator, and Translator::trReferencedBy().

Referenced by operator=(), and DefinitionMixin< Base >::writeSourceReffedBy().

◆ writeSourceRefs()

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

Definition at line 1186 of file definition.cpp.

1187{
1188 _writeSourceRefList(ol,scopeName,theTranslator->trReferences(),p->sourceRefsDict,true);
1189}
virtual DString trReferences()=0

References _writeSourceRefList(), p, theTranslator, and Translator::trReferences().

Referenced by operator=(), and DefinitionMixin< Base >::writeSourceRefs().

◆ writeSummaryLinks()

void DefinitionImpl::writeSummaryLinks ( OutputList & ) const

Definition at line 1936 of file definition.cpp.

1937{
1938}

Referenced by operator=(), and DefinitionMixin< Base >::writeSummaryLinks().

◆ writeToc()

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

Definition at line 1505 of file definition.cpp.

1506{
1507 // first check if we have anything to show or if the outline is already shown on the outline panel
1508 if (p->sectionRefs.empty() || (Config_getBool(GENERATE_TREEVIEW) && Config_getBool(PAGE_OUTLINE_PANEL))) return;
1509 // generate the embedded toc
1510 //ol.writeLocalToc(p->sectionRefs,localToc);
1511
1512 auto generateTocEntries = [this,&ol]()
1513 {
1514 for (const SectionInfo *si : p->sectionRefs)
1515 {
1516 if (si->type().isSection())
1517 {
1518 ol.startTocEntry(si);
1519 const MemberDef *md = p->def->definitionType()==Definition::TypeMember ? toMemberDef(p->def) : nullptr;
1520 const Definition *scope = p->def->definitionType()==Definition::TypeMember ? p->def->getOuterScope() : p->def;
1521 DString docTitle = si->title();
1522 if (docTitle.empty()) docTitle = si->label();
1523 ol.generateDoc(docFile(),
1525 scope,
1526 md,
1527 docTitle,
1528 DocOptions()
1529 .setIndexWords(true)
1530 .setSingleLine(true)
1531 .setSectionLevel(si->type().level())
1532 );
1533 ol.endTocEntry(si);
1534 }
1535 }
1536 };
1537
1538 if (localToc.isHtmlEnabled())
1539 {
1540 ol.pushGeneratorState();
1542 ol.startLocalToc(localToc.htmlLevel());
1543 generateTocEntries();
1544 ol.endLocalToc();
1545 ol.popGeneratorState();
1546 }
1547 if (localToc.isDocbookEnabled())
1548 {
1549 ol.pushGeneratorState();
1551 ol.startLocalToc(localToc.docbookLevel());
1552 generateTocEntries();
1553 ol.endLocalToc();
1554 ol.popGeneratorState();
1555 }
1556 if (localToc.isLatexEnabled())
1557 {
1558 ol.pushGeneratorState();
1560 ol.startLocalToc(localToc.latexLevel());
1561 // no gneerateTocEntries() needed for LaTeX
1562 ol.endLocalToc();
1563 ol.popGeneratorState();
1564 }
1565}
int getStartBodyLine() const
void startTocEntry(const SectionInfo *si)
Definition outputlist.h:748
void endLocalToc()
Definition outputlist.h:746
void endTocEntry(const SectionInfo *si)
Definition outputlist.h:750
void generateDoc(const DString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const DString &docStr, const DocOptions &options)
void startLocalToc(int level)
Definition outputlist.h:744
constexpr int level() const
Definition section.h:46

References Config_getBool, OutputList::disableAllBut(), Docbook, LocalToc::docbookLevel(), docFile(), DString::empty(), OutputList::endLocalToc(), OutputList::endTocEntry(), OutputList::generateDoc(), getStartBodyLine(), Html, LocalToc::htmlLevel(), LocalToc::isDocbookEnabled(), 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.

Referenced by operator=(), and DefinitionMixin< Base >::writeToc().

◆ xrefListItems()

const RefItemVector & DefinitionImpl::xrefListItems ( ) const

Definition at line 1382 of file definition.cpp.

1383{
1384 return p->xrefListItems;
1385}

References p.

Referenced by operator=(), and DefinitionMixin< Base >::xrefListItems().

Member Data Documentation

◆ p

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

Definition at line 148 of file definitionimpl.h.

Referenced by _getXRefListId(), _setBriefDescription(), _setDocumentation(), _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(), hasRequirementRefs(), 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(), requirementReferences(), setArtificial(), setBodyDef(), setBodySegment(), setDefFile(), setExported(), setHidden(), setId(), setLanguage(), setLocalName(), setName(), setOuterScope(), setReference(), setRefItems(), setRequirementReferences(), symbolName(), writeDocAnchorsToTagFile(), writeInlineCode(), writeRequirementRefs(), writeSourceDef(), writeSourceReffedBy(), writeSourceRefs(), writeToc(), xrefListItems(), and ~DefinitionImpl().


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