From f9c9edba086f544b813ff036ea9209744da18c44 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Fri, 19 Dec 2014 15:19:01 +0100 Subject: [PATCH] Bug 704090 - Allow Class{T}.Method in cref to refer to a generic class in XML comments --- src/docparser.cpp | 20 ++++++++++++++++++++ src/util.cpp | 7 +++++++ 2 files changed, 27 insertions(+) diff --git a/src/docparser.cpp b/src/docparser.cpp index b7e8dadd3af..12eae8a2260 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -232,6 +232,23 @@ static void docParserPopContext(bool keepParamInfo=FALSE) //--------------------------------------------------------------------------- +// replaces { with < and } with > inside string s +static void unescapeCRef(QCString &s) +{ + char *p = s.data(); + if (p) + { + char c; + while ((c=*p)) + { + if (c=='{') c='<'; else if (c=='}') c='>'; + *p++=c; + } + } +} + +//--------------------------------------------------------------------------- + /*! search for an image in the imageNameDict and if found * copies the image to the output directory (which depends on the \a type * parameter). @@ -6045,6 +6062,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta QCString exceptName; if (findAttribute(tagHtmlAttribs,"cref",&exceptName)) { + unescapeCRef(exceptName); retval = handleParamSection(exceptName,DocParamSect::Exception,TRUE); } else @@ -6089,6 +6107,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta //printf("XML_SEE: empty tag=%d\n",g_token->emptyTag); if (findAttribute(tagHtmlAttribs,"cref",&cref)) { + unescapeCRef(cref); if (g_token->emptyTag) // style { bool inSeeBlock = g_inSeeBlock; @@ -6123,6 +6142,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta QCString cref; if (findAttribute(tagHtmlAttribs,"cref",&cref)) { + unescapeCRef(cref); // Look for an existing "see" section DocSimpleSect *ss=0; QListIterator cli(m_children); diff --git a/src/util.cpp b/src/util.cpp index 39d0ba2310a..000de53913d 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -4716,6 +4716,7 @@ bool resolveLink(/* in */ const char *scName, *resContext=0; QCString linkRef=lr; + QCString linkRefWithoutTemplates = stripTemplateSpecifiersFromScope(linkRef,FALSE); //printf("ResolveLink linkRef=%s inSee=%d\n",lr,inSeeBlock); FileDef *fd; GroupDef *gd; @@ -4772,6 +4773,12 @@ bool resolveLink(/* in */ const char *scName, resAnchor=cd->anchor(); return TRUE; } + else if ((cd=getClass(linkRefWithoutTemplates))) // C#/Java generic class link + { + *resContext=cd; + resAnchor=cd->anchor(); + return TRUE; + } else if ((cd=getClass(linkRef+"-p"))) // Obj-C protocol link { *resContext=cd;