Commit c6e41226 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Bug 740218 - Full scope needed when making link inside cross-referenced section

parent 9f477b87
...@@ -3879,7 +3879,8 @@ void ClassDef::addListReferences() ...@@ -3879,7 +3879,8 @@ void ClassDef::addListReferences()
: theTranslator->trClass(TRUE,TRUE), : theTranslator->trClass(TRUE,TRUE),
getOutputFileBase(), getOutputFileBase(),
displayName(), displayName(),
0 0,
this
); );
} }
if (m_impl->memberGroupSDict) if (m_impl->memberGroupSDict)
......
...@@ -140,6 +140,7 @@ CommandMap cmdMap[] = ...@@ -140,6 +140,7 @@ CommandMap cmdMap[] =
{ "diafile", CMD_DIAFILE }, { "diafile", CMD_DIAFILE },
{ "--", CMD_NDASH }, { "--", CMD_NDASH },
{ "---", CMD_MDASH }, { "---", CMD_MDASH },
{ "_setscope", CMD_SETSCOPE },
{ 0, 0 }, { 0, 0 },
}; };
......
...@@ -129,7 +129,8 @@ enum CommandType ...@@ -129,7 +129,8 @@ enum CommandType
CMD_NDASH = 99, CMD_NDASH = 99,
CMD_MDASH = 100, CMD_MDASH = 100,
CMD_STARTUML = 101, CMD_STARTUML = 101,
CMD_ENDUML = 102 CMD_ENDUML = 102,
CMD_SETSCOPE = 103
}; };
enum HtmlTagType enum HtmlTagType
......
...@@ -1410,6 +1410,17 @@ reparsetoken: ...@@ -1410,6 +1410,17 @@ reparsetoken:
doctokenizerYYsetStatePara(); doctokenizerYYsetStatePara();
} }
break; 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: default:
return FALSE; return FALSE;
} }
......
...@@ -161,5 +161,6 @@ void doctokenizerYYsetStateSnippet(); ...@@ -161,5 +161,6 @@ void doctokenizerYYsetStateSnippet();
void doctokenizerYYstartAutoList(); void doctokenizerYYstartAutoList();
void doctokenizerYYendAutoList(); void doctokenizerYYendAutoList();
void doctokenizerYYsetStatePlantUML(); void doctokenizerYYsetStatePlantUML();
void doctokenizerYYsetStateSetScope();
#endif #endif
...@@ -436,6 +436,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4} ...@@ -436,6 +436,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4}
%x St_SkipTitle %x St_SkipTitle
%x St_Anchor %x St_Anchor
%x St_Snippet %x St_Snippet
%x St_SetScope
%x St_Sections %x St_Sections
%s St_SecLabel1 %s St_SecLabel1
...@@ -1012,6 +1013,13 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4} ...@@ -1012,6 +1013,13 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{REFWORD4}
<St_IntRef>{BLANK}+"\"" { <St_IntRef>{BLANK}+"\"" {
BEGIN(St_Ref2); 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 */ <St_Ref2>"&"{ID}";" { /* symbol */
g_token->name = yytext; g_token->name = yytext;
return TK_SYMBOL; return TK_SYMBOL;
...@@ -1411,6 +1419,11 @@ void doctokenizerYYsetStateSnippet() ...@@ -1411,6 +1419,11 @@ void doctokenizerYYsetStateSnippet()
BEGIN(St_Snippet); BEGIN(St_Snippet);
} }
void doctokenizerYYsetStateSetScope()
{
BEGIN(St_SetScope);
}
void doctokenizerYYcleanup() void doctokenizerYYcleanup()
{ {
yy_delete_buffer( YY_CURRENT_BUFFER ); yy_delete_buffer( YY_CURRENT_BUFFER );
......
...@@ -5221,7 +5221,7 @@ static void addListReferences() ...@@ -5221,7 +5221,7 @@ static void addListReferences()
addRefItem(xrefItems, addRefItem(xrefItems,
name, name,
theTranslator->trPage(TRUE,TRUE), theTranslator->trPage(TRUE,TRUE),
name,pd->title(),0); name,pd->title(),0,0);
} }
} }
...@@ -5238,7 +5238,7 @@ static void addListReferences() ...@@ -5238,7 +5238,7 @@ static void addListReferences()
addRefItem(xrefItems, addRefItem(xrefItems,
name, name,
theTranslator->trDir(TRUE,TRUE), theTranslator->trDir(TRUE,TRUE),
name,dd->displayName(),0); name,dd->displayName(),0,0);
} }
} }
...@@ -8629,7 +8629,7 @@ static void buildPageList(EntryNav *rootNav) ...@@ -8629,7 +8629,7 @@ static void buildPageList(EntryNav *rootNav)
"page", "page",
name, name,
title, title,
0 0,0
); );
rootNav->releaseEntry(); rootNav->releaseEntry();
......
...@@ -1409,6 +1409,7 @@ void FileDef::addListReferences() ...@@ -1409,6 +1409,7 @@ void FileDef::addListReferences()
getOutputFileBase(), getOutputFileBase(),
theTranslator->trFile(TRUE,TRUE), theTranslator->trFile(TRUE,TRUE),
getOutputFileBase(),name(), getOutputFileBase(),name(),
0,
0 0
); );
} }
......
...@@ -1534,6 +1534,7 @@ void GroupDef::addListReferences() ...@@ -1534,6 +1534,7 @@ void GroupDef::addListReferences()
getOutputFileBase(), getOutputFileBase(),
theTranslator->trGroup(TRUE,TRUE), theTranslator->trGroup(TRUE,TRUE),
getOutputFileBase(),name(), getOutputFileBase(),name(),
0,
0 0
); );
} }
......
...@@ -3507,7 +3507,7 @@ void MemberDef::addListReference(Definition *) ...@@ -3507,7 +3507,7 @@ void MemberDef::addListReference(Definition *)
addRefItem(xrefItems, addRefItem(xrefItems,
qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624) qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
memLabel, memLabel,
getOutputFileBase()+"#"+anchor(),memName,memArgs); getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
} }
} }
......
...@@ -326,7 +326,7 @@ void MemberGroup::addListReferences(Definition *def) ...@@ -326,7 +326,7 @@ void MemberGroup::addListReferences(Definition *def)
name, name,
theTranslator->trGroup(TRUE,TRUE), theTranslator->trGroup(TRUE,TRUE),
name, name,
grpHeader,0); grpHeader,0,def);
} }
} }
......
...@@ -832,7 +832,8 @@ void NamespaceDef::addListReferences() ...@@ -832,7 +832,8 @@ void NamespaceDef::addListReferences()
theTranslator->trModule(TRUE,TRUE) : theTranslator->trModule(TRUE,TRUE) :
theTranslator->trNamespace(TRUE,TRUE), theTranslator->trNamespace(TRUE,TRUE),
getOutputFileBase(),displayName(), getOutputFileBase(),displayName(),
0 0,
this
); );
} }
MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroupSDict::Iterator mgli(*memberGroupSDict);
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "reflist.h" #include "reflist.h"
#include "util.h" #include "util.h"
#include "ftextstream.h" #include "ftextstream.h"
#include "definition.h"
/*! Create a list of items that are cross referenced with documentation blocks /*! Create a list of items that are cross referenced with documentation blocks
* @param listName String representing the name of the list. * @param listName String representing the name of the list.
...@@ -144,6 +145,12 @@ void RefList::generatePage() ...@@ -144,6 +145,12 @@ void RefList::generatePage()
doc += "\\anchor "; doc += "\\anchor ";
doc += item->listAnchor; doc += item->listAnchor;
doc += "\n"; doc += "\n";
if (item->scope)
{
doc += "\\_setscope ";
doc += item->scope->name();
doc += " ";
}
doc += item->prefix; doc += item->prefix;
doc += " \\_internalref "; doc += " \\_internalref ";
doc += item->name; doc += item->name;
...@@ -166,6 +173,7 @@ void RefList::generatePage() ...@@ -166,6 +173,7 @@ void RefList::generatePage()
doc += "</dd>"; doc += "</dd>";
} }
doc += "</dl>\n"; doc += "</dl>\n";
//printf("generatePage('%s')\n",doc.data());
addRelatedPage(m_listName,m_pageTitle,doc,0,m_listName,1,0,0,0); addRelatedPage(m_listName,m_pageTitle,doc,0,m_listName,1,0,0,0);
} }
...@@ -23,14 +23,17 @@ ...@@ -23,14 +23,17 @@
#include <qlist.h> #include <qlist.h>
#include "sortdict.h" #include "sortdict.h"
class Definition;
/** This struct represents an item in the list of references. */ /** This struct represents an item in the list of references. */
struct RefItem struct RefItem
{ {
RefItem() /*: written(FALSE)*/ {} RefItem() : scope(0) {}
QCString text; //!< text of the item. QCString text; //!< text of the item.
QCString listAnchor; //!< anchor in the list QCString listAnchor; //!< anchor in the list
QCString prefix; //!< type prefix for the name QCString prefix; //!< type prefix for the name
Definition *scope; //!< scope to use for references.
QCString name; //!< name of the entity containing the reference QCString name; //!< name of the entity containing the reference
QCString title; //!< display name of the entity QCString title; //!< display name of the entity
QCString args; //!< optional arguments for the entity (if function) QCString args; //!< optional arguments for the entity (if function)
......
...@@ -6364,7 +6364,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle, ...@@ -6364,7 +6364,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
void addRefItem(const QList<ListItemInfo> *sli, void addRefItem(const QList<ListItemInfo> *sli,
const char *key, 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); //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) if (sli && key && key[0]!='@') // check for @ to skip anonymous stuff (see bug427012)
...@@ -6389,6 +6389,7 @@ void addRefItem(const QList<ListItemInfo> *sli, ...@@ -6389,6 +6389,7 @@ void addRefItem(const QList<ListItemInfo> *sli,
ASSERT(item!=0); ASSERT(item!=0);
item->prefix = prefix; item->prefix = prefix;
item->scope = scope;
item->name = name; item->name = name;
item->title = title; item->title = title;
item->args = args; item->args = args;
......
...@@ -316,7 +316,7 @@ int filterCRLF(char *buf,int len); ...@@ -316,7 +316,7 @@ int filterCRLF(char *buf,int len);
void addRefItem(const QList<ListItemInfo> *sli,const char *prefix, void addRefItem(const QList<ListItemInfo> *sli,const char *prefix,
const char *key, 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, PageDef *addRelatedPage(const char *name,const QCString &ptitle,
const QCString &doc,QList<SectionInfo> *anchors, const QCString &doc,QList<SectionInfo> *anchors,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment