diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2006-08-09 08:29:54 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2006-08-09 08:29:54 (GMT) |
commit | cdd729544999bf6ff5ce3efb5a64957058f040f3 (patch) | |
tree | a09074ed1c9a5c1efb292f69db4f9bbb3a97cb19 /src/pycode.l | |
parent | 243272688a4a3bc7921b7d05dda927f4adf3036c (diff) | |
download | Doxygen-cdd729544999bf6ff5ce3efb5a64957058f040f3.zip Doxygen-cdd729544999bf6ff5ce3efb5a64957058f040f3.tar.gz Doxygen-cdd729544999bf6ff5ce3efb5a64957058f040f3.tar.bz2 |
Release-1.4.7-20060809
Diffstat (limited to 'src/pycode.l')
-rw-r--r-- | src/pycode.l | 68 |
1 files changed, 38 insertions, 30 deletions
diff --git a/src/pycode.l b/src/pycode.l index 306a042..8cc79a4 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -715,6 +715,36 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName) return; } +static void findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *symName) +{ + //printf("sym %s outerScope=%s equal=%d\n", + // sym->name().data(),sym->getOuterScope()->name().data(), + // sym->getOuterScope()==g_currentDefinition); + + if (sym->getOuterScope() && + sym->getOuterScope()->definitionType()==Definition::TypeClass && + g_currentDefinition->definitionType()==Definition::TypeClass) + { + ClassDef *cd = (ClassDef*)sym->getOuterScope(); + ClassDef *thisCd = (ClassDef *)g_currentDefinition; + QCString anchor; + if (sym->definitionType()==Definition::TypeMember) + { + anchor=((MemberDef *)sym)->anchor(); + } + + // TODO: find the nearest base class in case cd is a base class of + // thisCd + if (cd==thisCd) + { + writeMultiLineCodeLink(ol,sym->getReference(), + sym->getOutputFileBase(), + anchor, + symName); + } + } +} + static void findMemberLink(CodeOutputInterface &ol,char *symName) { //printf("Member reference: %s scope=%s member=%s\n", @@ -724,42 +754,20 @@ static void findMemberLink(CodeOutputInterface &ol,char *symName) // ); if (g_currentDefinition) { - DefinitionList *dl = Doxygen::symbolMap->find(symName); - if (dl) + DefinitionIntf *di = Doxygen::symbolMap->find(symName); + if (di->definitionType()==DefinitionIntf::TypeSymbolList) // multiple symbols { - DefinitionListIterator dli(*dl); + DefinitionListIterator dli(*(DefinitionList*)di); Definition *sym; for (dli.toFirst();(sym=dli.current());++dli) { - //printf("sym %s outerScope=%s equal=%d\n", - // sym->name().data(),sym->getOuterScope()->name().data(), - // sym->getOuterScope()==g_currentDefinition); - - if (sym->getOuterScope() && - sym->getOuterScope()->definitionType()==Definition::TypeClass && - g_currentDefinition->definitionType()==Definition::TypeClass) - { - ClassDef *cd = (ClassDef*)sym->getOuterScope(); - ClassDef *thisCd = (ClassDef *)g_currentDefinition; - QCString anchor; - if (sym->definitionType()==Definition::TypeMember) - { - anchor=((MemberDef *)sym)->anchor(); - } - - // TODO: find the nearest base class in case cd is a base class of - // thisCd - if (cd==thisCd) - { - writeMultiLineCodeLink(ol,sym->getReference(), - sym->getOutputFileBase(), - anchor, - symName); - return; - } - } + findMemberLink(ol,sym,symName); } } + else // single symbol + { + findMemberLink(ol,(Definition*)di,symName); + } } //printf("sym %s not found\n",&yytext[5]); codify(symName); |