summaryrefslogtreecommitdiffstats
path: root/src/pycode.l
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2006-08-09 08:29:54 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2006-08-09 08:29:54 (GMT)
commitf1ddf16acd015f8cf9ffc1fbf5719e8c764150e2 (patch)
treea09074ed1c9a5c1efb292f69db4f9bbb3a97cb19 /src/pycode.l
parent3a7dcb4cbc953fcf5ab62243743707e5e0e3d379 (diff)
downloadDoxygen-f1ddf16acd015f8cf9ffc1fbf5719e8c764150e2.zip
Doxygen-f1ddf16acd015f8cf9ffc1fbf5719e8c764150e2.tar.gz
Doxygen-f1ddf16acd015f8cf9ffc1fbf5719e8c764150e2.tar.bz2
Release-1.4.7-20060809
Diffstat (limited to 'src/pycode.l')
-rw-r--r--src/pycode.l68
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);