static void writeLineNumber(CodeOutputInterface &ol,FileDef *fd,uint line) { Definition *d = fd ? fd->getSourceDefinition(line) : 0; if (d && d->isLinkable()) { g_currentDefinition=d; g_currentLine=line; MemberDef *md = fd->getSourceMember(line); if (md && md->isLinkable()) // link to member { if (g_currentMemberDef!=md) // new member, start search for body { g_searchForBody=TRUE; g_insideBody=FALSE; g_bracketCount=0; } g_currentMemberDef=md; ol.writeLineNumber(md->getReference(), md->getOutputFileBase(), md->anchor(), line); } else // link to compound { g_currentMemberDef=0; ol.writeLineNumber(d->getReference(), d->getOutputFileBase(), d->anchor(), line); } } else // no link { ol.writeLineNumber(0,0,0,line); } // set search page target if (Doxygen::searchIndex) { QCString lineAnchor; lineAnchor.sprintf("l%05d",line); ol.setCurrentDoc(fd,lineAnchor,TRUE); } //printf("writeLineNumber(%d) g_searchForBody=%d\n",line,g_searchForBody); }
void TooltipManager::writeTooltips(CodeOutputInterface &ol) { QDictIterator<Definition> di(p->tooltipInfo); Definition *d; for (di.toFirst();(d=di.current());++di) { DocLinkInfo docInfo; docInfo.name = d->qualifiedName(); docInfo.ref = d->getReference(); docInfo.url = d->getOutputFileBase(); docInfo.anchor = d->anchor(); SourceLinkInfo defInfo; if (d->getBodyDef() && d->getStartBodyLine()!=-1) { defInfo.file = d->getBodyDef()->name(); defInfo.line = d->getStartBodyLine(); defInfo.url = d->getSourceFileBase(); defInfo.anchor = d->getSourceAnchor(); } SourceLinkInfo declInfo; // TODO: fill in... QCString decl; if (d->definitionType()==Definition::TypeMember) { MemberDef *md = (MemberDef*)d; decl = md->declaration(); if (!decl.isEmpty() && decl.at(0)=='@') // hide enum values { decl.resize(0); } } ol.writeTooltip(di.currentKey(), // id docInfo, // symName decl, // decl d->briefDescriptionAsTooltip(), // desc defInfo, declInfo ); } }
void DocSets::addIndexItem(const char *, const char *, const char *, const char *, const char *,const MemberDef *md) { if (!md->isLinkable()) return; // internal symbol ClassDef *cd = md->getClassDef(); NamespaceDef *nd = md->getNamespaceDef(); FileDef *fd = md->getFileDef(); // determine language QCString lang; SrcLangExt langExt = SrcLangExt_Cpp; if (fd) langExt = getLanguageFromFileName(fd->name()); switch (langExt) { case SrcLangExt_Cpp: { if (md->isObjCMethod()) lang="occ"; // Objective C/C++ else if (fd && fd->name().right(2).lower()==".c") lang="c"; // Plain C else lang="cpp"; // C++ } break; case SrcLangExt_ObjC: lang="occ"; break; // Objective C++ case SrcLangExt_IDL: lang="idl"; break; // IDL case SrcLangExt_CSharp: lang="csharp"; break; // C# case SrcLangExt_PHP: lang="php"; break; // PHP4/5 case SrcLangExt_D: lang="d"; break; // D case SrcLangExt_Java: lang="java"; break; // Java case SrcLangExt_JS: lang="javascript"; break; // Javascript case SrcLangExt_Python: lang="python"; break; // Python case SrcLangExt_F90: lang="fortran"; break; // Fortran case SrcLangExt_VHDL: lang="vhdl"; break; // VHDL } // determine scope QCString scope; QCString type; QCString decl; Definition *d = 0; if (fd && fd->isLinkable() && m_scopes.find(fd->getOutputFileBase())==0) { writeToken(m_tts,fd,"file",lang,0,0,0); m_scopes.append(fd->getOutputFileBase(),(void*)0x8); } if (cd) { scope = cd->qualifiedName(); if (cd->isTemplate()) type="tmplt"; else if (cd->compoundType()==ClassDef::Protocol) type="intf"; else if (cd->compoundType()==ClassDef::Interface) type="cl"; else if (cd->compoundType()==ClassDef::Category) type="cat"; else type = "cl"; d = cd; IncludeInfo *ii = cd->includeInfo(); if (ii) { decl=ii->includeName; if (decl.isEmpty()) { decl=ii->local; } } } else if (nd) { scope = nd->name(); type = "ns"; d = cd; } if (d && d->isLinkable() && m_scopes.find(d->getOutputFileBase())==0) { writeToken(m_tts,d,type,lang,0,0,decl); m_scopes.append(d->getOutputFileBase(),(void*)0x8); } switch (md->memberType()) { case MemberDef::Define: type="macro"; break; case MemberDef::Function: if (cd && cd->compoundType()==ClassDef::Interface) type="intfm"; else if (cd && cd->compoundType()==ClassDef::Class) type="clm"; else type="func"; break; case MemberDef::Variable: type="data"; break; case MemberDef::Typedef: type="tdef"; break; case MemberDef::Enumeration: type="enum"; break; case MemberDef::EnumValue: type="econst"; break; //case MemberDef::Prototype: // type="prototype"; break; case MemberDef::Signal: type="signal"; break; case MemberDef::Slot: type="slot"; break; case MemberDef::Friend: type="ffunc"; break; case MemberDef::DCOP: type="dcop"; break; case MemberDef::Property: type="property"; break; case MemberDef::Event: type="event"; break; } writeToken(m_tts,md,type,lang,scope,md->anchor()); }