summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2014-11-17 19:42:40 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2014-11-17 19:42:40 (GMT)
commitc6e41226574c94a869ad0757b53027562ef189e1 (patch)
tree8337108da498597418cc0db4da84a0867cd2a096
parent9f477b87fc492221e1b7109d197fe468cd0ed23d (diff)
downloadDoxygen-c6e41226574c94a869ad0757b53027562ef189e1.zip
Doxygen-c6e41226574c94a869ad0757b53027562ef189e1.tar.gz
Doxygen-c6e41226574c94a869ad0757b53027562ef189e1.tar.bz2
Bug 740218 - Full scope needed when making link inside cross-referenced section
-rw-r--r--src/classdef.cpp3
-rw-r--r--src/cmdmapper.cpp1
-rw-r--r--src/cmdmapper.h3
-rw-r--r--src/docparser.cpp11
-rw-r--r--src/doctokenizer.h1
-rw-r--r--src/doctokenizer.l13
-rw-r--r--src/doxygen.cpp6
-rw-r--r--src/filedef.cpp1
-rw-r--r--src/groupdef.cpp1
-rw-r--r--src/memberdef.cpp2
-rw-r--r--src/membergroup.cpp2
-rw-r--r--src/namespacedef.cpp3
-rw-r--r--src/reflist.cpp8
-rw-r--r--src/reflist.h5
-rw-r--r--src/util.cpp3
-rw-r--r--src/util.h2
16 files changed, 54 insertions, 11 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 271634a..e6b9064 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -3879,7 +3879,8 @@ void ClassDef::addListReferences()
: theTranslator->trClass(TRUE,TRUE),
getOutputFileBase(),
displayName(),
- 0
+ 0,
+ this
);
}
if (m_impl->memberGroupSDict)
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index b0ca85f..9b64401 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -140,6 +140,7 @@ CommandMap cmdMap[] =
{ "diafile", CMD_DIAFILE },
{ "--", CMD_NDASH },
{ "---", CMD_MDASH },
+ { "_setscope", CMD_SETSCOPE },
{ 0, 0 },
};
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index 75fd8ec..87a3e66 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -129,7 +129,8 @@ enum CommandType
CMD_NDASH = 99,
CMD_MDASH = 100,
CMD_STARTUML = 101,
- CMD_ENDUML = 102
+ CMD_ENDUML = 102,
+ CMD_SETSCOPE = 103
};
enum HtmlTagType
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 8c435fa..a788e13 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -1410,6 +1410,17 @@ reparsetoken:
doctokenizerYYsetStatePara();
}
break;
+ case CMD_SETSCOPE:
+ {
+ QCString scope;
+ doctokenizerYYsetStateSetScope();
+ doctokenizerYYlex();
+ scope = g_token->name;
+ g_context = scope;
+ //printf("Found scope='%s'\n",scope.data());
+ doctokenizerYYsetStatePara();
+ }
+ break;
default:
return FALSE;
}
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index c95230b..65f3326 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -161,5 +161,6 @@ void doctokenizerYYsetStateSnippet();
void doctokenizerYYstartAutoList();
void doctokenizerYYendAutoList();
void doctokenizerYYsetStatePlantUML();
+void doctokenizerYYsetStateSetScope();
#endif
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 2de04a3..aa8ef8d 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -436,6 +436,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4}
%x St_SkipTitle
%x St_Anchor
%x St_Snippet
+%x St_SetScope
%x St_Sections
%s St_SecLabel1
@@ -1012,6 +1013,13 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4}
<St_IntRef>{BLANK}+"\"" {
BEGIN(St_Ref2);
}
+<St_SetScope>{SCOPEMASK}{BLANK} {
+ g_token->name = yytext;
+ g_token->name = g_token->name.stripWhiteSpace();
+ return TK_WORD;
+ }
+<St_SetScope>{BLANK} {
+ }
<St_Ref2>"&"{ID}";" { /* symbol */
g_token->name = yytext;
return TK_SYMBOL;
@@ -1411,6 +1419,11 @@ void doctokenizerYYsetStateSnippet()
BEGIN(St_Snippet);
}
+void doctokenizerYYsetStateSetScope()
+{
+ BEGIN(St_SetScope);
+}
+
void doctokenizerYYcleanup()
{
yy_delete_buffer( YY_CURRENT_BUFFER );
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index df1f853..821ebc5 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -5221,7 +5221,7 @@ static void addListReferences()
addRefItem(xrefItems,
name,
theTranslator->trPage(TRUE,TRUE),
- name,pd->title(),0);
+ name,pd->title(),0,0);
}
}
@@ -5238,7 +5238,7 @@ static void addListReferences()
addRefItem(xrefItems,
name,
theTranslator->trDir(TRUE,TRUE),
- name,dd->displayName(),0);
+ name,dd->displayName(),0,0);
}
}
@@ -8629,7 +8629,7 @@ static void buildPageList(EntryNav *rootNav)
"page",
name,
title,
- 0
+ 0,0
);
rootNav->releaseEntry();
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 3ff69a4..42e3efc 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -1409,6 +1409,7 @@ void FileDef::addListReferences()
getOutputFileBase(),
theTranslator->trFile(TRUE,TRUE),
getOutputFileBase(),name(),
+ 0,
0
);
}
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 65e59f3..5993bb2 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -1534,6 +1534,7 @@ void GroupDef::addListReferences()
getOutputFileBase(),
theTranslator->trGroup(TRUE,TRUE),
getOutputFileBase(),name(),
+ 0,
0
);
}
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 83528ef..29595cf 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -3507,7 +3507,7 @@ void MemberDef::addListReference(Definition *)
addRefItem(xrefItems,
qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
memLabel,
- getOutputFileBase()+"#"+anchor(),memName,memArgs);
+ getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
}
}
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 51eb4a1..aa0a36e 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -326,7 +326,7 @@ void MemberGroup::addListReferences(Definition *def)
name,
theTranslator->trGroup(TRUE,TRUE),
name,
- grpHeader,0);
+ grpHeader,0,def);
}
}
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 8580a2e..6cf12b6 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -832,7 +832,8 @@ void NamespaceDef::addListReferences()
theTranslator->trModule(TRUE,TRUE) :
theTranslator->trNamespace(TRUE,TRUE),
getOutputFileBase(),displayName(),
- 0
+ 0,
+ this
);
}
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
diff --git a/src/reflist.cpp b/src/reflist.cpp
index ee6ac91..3cc7694 100644
--- a/src/reflist.cpp
+++ b/src/reflist.cpp
@@ -20,6 +20,7 @@
#include "reflist.h"
#include "util.h"
#include "ftextstream.h"
+#include "definition.h"
/*! Create a list of items that are cross referenced with documentation blocks
* @param listName String representing the name of the list.
@@ -144,6 +145,12 @@ void RefList::generatePage()
doc += "\\anchor ";
doc += item->listAnchor;
doc += "\n";
+ if (item->scope)
+ {
+ doc += "\\_setscope ";
+ doc += item->scope->name();
+ doc += " ";
+ }
doc += item->prefix;
doc += " \\_internalref ";
doc += item->name;
@@ -166,6 +173,7 @@ void RefList::generatePage()
doc += "</dd>";
}
doc += "</dl>\n";
+ //printf("generatePage('%s')\n",doc.data());
addRelatedPage(m_listName,m_pageTitle,doc,0,m_listName,1,0,0,0);
}
diff --git a/src/reflist.h b/src/reflist.h
index 97b1420..5b647ea 100644
--- a/src/reflist.h
+++ b/src/reflist.h
@@ -23,14 +23,17 @@
#include <qlist.h>
#include "sortdict.h"
+class Definition;
+
/** This struct represents an item in the list of references. */
struct RefItem
{
- RefItem() /*: written(FALSE)*/ {}
+ RefItem() : scope(0) {}
QCString text; //!< text of the item.
QCString listAnchor; //!< anchor in the list
QCString prefix; //!< type prefix for the name
+ Definition *scope; //!< scope to use for references.
QCString name; //!< name of the entity containing the reference
QCString title; //!< display name of the entity
QCString args; //!< optional arguments for the entity (if function)
diff --git a/src/util.cpp b/src/util.cpp
index 101d6b3..acf0063 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -6364,7 +6364,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
void addRefItem(const QList<ListItemInfo> *sli,
const char *key,
- const char *prefix, const char *name,const char *title,const char *args)
+ const char *prefix, const char *name,const char *title,const char *args,Definition *scope)
{
//printf("addRefItem(sli=%p,key=%s,prefix=%s,name=%s,title=%s,args=%s)\n",sli,key,prefix,name,title,args);
if (sli && key && key[0]!='@') // check for @ to skip anonymous stuff (see bug427012)
@@ -6389,6 +6389,7 @@ void addRefItem(const QList<ListItemInfo> *sli,
ASSERT(item!=0);
item->prefix = prefix;
+ item->scope = scope;
item->name = name;
item->title = title;
item->args = args;
diff --git a/src/util.h b/src/util.h
index 07744ca..b3f99c0 100644
--- a/src/util.h
+++ b/src/util.h
@@ -316,7 +316,7 @@ int filterCRLF(char *buf,int len);
void addRefItem(const QList<ListItemInfo> *sli,const char *prefix,
const char *key,
- const char *name,const char *title,const char *args);
+ const char *name,const char *title,const char *args,Definition *scope);
PageDef *addRelatedPage(const char *name,const QCString &ptitle,
const QCString &doc,QList<SectionInfo> *anchors,