QCString Definition::briefDescriptionAsTooltip() const { makeResident(); if (m_impl->brief) { if (m_impl->brief->tooltip.isEmpty() && !m_impl->brief->doc.isEmpty()) { static bool reentering=FALSE; if (!reentering) { MemberDef *md = definitionType()==TypeMember ? (MemberDef*)this : 0; const Definition *scope = definitionType()==TypeMember ? getOuterScope() : this; reentering=TRUE; // prevent requests for tooltips while parsing a tooltip m_impl->brief->tooltip = parseCommentAsText( scope,md, m_impl->brief->doc, m_impl->brief->file, m_impl->brief->line); reentering=FALSE; } } return m_impl->brief->tooltip; } return QCString(""); }
QCString Definition::pathFragment() const { makeResident(); QCString result; if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope) { result = m_impl->outerScope->pathFragment(); } if (isLinkable()) { if (!result.isEmpty()) result+="/"; if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle()) { result+=((const GroupDef*)this)->groupTitle(); } else if (definitionType()==Definition::TypePage && !((const PageDef*)this)->title().isEmpty()) { result+=((const PageDef*)this)->title(); } else { result+=m_impl->localName; } } else { result+=m_impl->localName; } return result; }
QCString Definition::getSourceFileBase() const { ASSERT(definitionType()!=Definition::TypeFile); // file overloads this method QCString fn; static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); if (sourceBrowser && m_impl->body && m_impl->body->startLine!=-1 && m_impl->body->fileDef) { // fn = m_impl->body->fileDef->getSourceFileBase(); } return fn; }
void Definition::writePathFragment(OutputList &ol) const { makeResident(); if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope) { m_impl->outerScope->writePathFragment(ol); } ol.writeString(" <li class=\"navelem\">"); if (isLinkable()) { if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle()) { ol.writeObjectLink(getReference(),getOutputFileBase(),0,((const GroupDef*)this)->groupTitle()); } else if (definitionType()==Definition::TypePage && !((const PageDef*)this)->title().isEmpty()) { ol.writeObjectLink(getReference(),getOutputFileBase(),0,((const PageDef*)this)->title()); } else if (definitionType()==Definition::TypeClass) { QCString name = m_impl->localName; if (name.right(2)=="-p" || name.right(2)=="-g") { name = name.left(name.length()-2); } ol.writeObjectLink(getReference(),getOutputFileBase(),0,name); } else { ol.writeObjectLink(getReference(),getOutputFileBase(),0,m_impl->localName); } } else { ol.startBold(); ol.docify(m_impl->localName); ol.endBold(); } ol.writeString(" </li>\n"); }
QCString Definition::qualifiedName() const { static int count=0; count++; makeResident(); if (!m_impl->qualifiedName.isEmpty()) { count--; return m_impl->qualifiedName; } #if 0 if (count>20) { printf("Definition::qualifiedName() Infinite recursion detected! Type=%d\n",definitionType()); printf("Trace:\n"); Definition *d = (Definition *)this; for (int i=0;d && i<20;i++) { printf(" %s\n",d->name().data()); d = d->getOuterScope(); } } #endif //printf("start %s::qualifiedName() localName=%s\n",name().data(),m_impl->localName.data()); if (m_impl->outerScope==0) { if (m_impl->localName=="<globalScope>") { count--; return ""; } else { count--; return m_impl->localName; } } if (m_impl->outerScope->name()=="<globalScope>") { m_impl->qualifiedName = m_impl->localName; } else { m_impl->qualifiedName = m_impl->outerScope->qualifiedName()+"::"+m_impl->localName; } //printf("end %s::qualifiedName()=%s\n",name().data(),m_impl->qualifiedName.data()); count--; return m_impl->qualifiedName; };
void GroupDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title) { static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); MemberList * ml = getMemberList(lt); if (optimizeVhdl && ml) { VhdlDocGen::writeVhdlDeclarations(ml,ol,this,0,0,0); return; } if (ml) { ml->writeDeclarations(ol,0,0,0,this,title,0,definitionType()); } }
/*! Write code of this definition into the documentation */ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) { makeResident(); ol.pushGeneratorState(); //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(), // m_startBodyLine,m_endBodyLine,m_bodyDef); if (Config_getBool("INLINE_SOURCES") && m_impl->body && m_impl->body->startLine!=-1 && m_impl->body->endLine>=m_impl->body->startLine && m_impl->body->fileDef) { QCString codeFragment; int actualStart=m_impl->body->startLine,actualEnd=m_impl->body->endLine; if (readCodeFragment(m_impl->body->fileDef->absFilePath(), actualStart,actualEnd,codeFragment) ) { //printf("Adding code fragement '%s' ext='%s'\n", // codeFragment.data(),m_impl->defFileExt.data()); ParserInterface *pIntf = Doxygen::parserManager->getParser(m_impl->defFileExt); pIntf->resetCodeParserState(); //printf("Read:\n`%s'\n\n",codeFragment.data()); MemberDef *thisMd = 0; if (definitionType()==TypeMember) thisMd = (MemberDef *)this; ol.startCodeFragment(); pIntf->parseCode(ol, // codeOutIntf scopeName, // scope codeFragment, // input FALSE, // isExample 0, // exampleName m_impl->body->fileDef, // fileDef actualStart, // startLine actualEnd, // endLine TRUE, // inlineFragment thisMd, // memberDef FALSE // show line numbers ); ol.endCodeFragment(); } } ol.popGeneratorState(); }
void Definition::writeDocAnchorsToTagFile() { makeResident(); if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict) { //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count()); QDictIterator<SectionInfo> sdi(*m_impl->sectionDict); SectionInfo *si; for (;(si=sdi.current());++sdi) { if (!si->generated) { //printf("write an entry!\n"); if (definitionType()==TypeMember) Doxygen::tagFile << " "; Doxygen::tagFile << " <docanchor file=\"" << si->fileName << "\">" << si->label << "</docanchor>" << endl; } } } }
void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile) { if (m_impl->sectionDict) { //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_impl->sectionDict->count()); SDict<SectionInfo>::Iterator sdi(*m_impl->sectionDict); SectionInfo *si; for (;(si=sdi.current());++sdi) { if (!si->generated) { //printf("write an entry!\n"); if (definitionType()==TypeMember) tagFile << " "; tagFile << " <docanchor file=\"" << si->fileName << "\""; if (!si->title.isEmpty()) { tagFile << " title=\"" << convertToXML(si->title) << "\""; } tagFile << ">" << si->label << "</docanchor>" << endl; } } } }