Commit 62039dd4 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3.7-20040526

parent 820c9009
DOXYGEN Version 1.3.7-20040517 DOXYGEN Version 1.3.7-20040526
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (17 May 2004) Dimitri van Heesch (26 May 2004)
DOXYGEN Version 1.3.7_20040517 DOXYGEN Version 1.3.7_20040526
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (17 May 2004) Dimitri van Heesch (dimitri@stack.nl) (26 May 2004)
1.3.7-20040517 1.3.7-20040526
...@@ -48,6 +48,7 @@ documentation: ...@@ -48,6 +48,7 @@ documentation:
\refitem cmdbug \\bug \refitem cmdbug \\bug
\refitem cmdc \\c \refitem cmdc \\c
\refitem cmdcallgraph \\callgraph \refitem cmdcallgraph \\callgraph
\refitem cmdcategory \\category
\refitem cmdclass \\class \refitem cmdclass \\class
\refitem cmdcode \\code \refitem cmdcode \\code
\refitem cmdcopydoc \\copydoc \refitem cmdcopydoc \\copydoc
...@@ -111,6 +112,7 @@ documentation: ...@@ -111,6 +112,7 @@ documentation:
\refitem cmdpost \\post \refitem cmdpost \\post
\refitem cmdpre \\pre \refitem cmdpre \\pre
\refitem cmdproperty \\property \refitem cmdproperty \\property
\refitem cmdprotocol \\protocol
\refitem cmdref \\ref \refitem cmdref \\ref
\refitem cmdrelates \\relates \refitem cmdrelates \\relates
\refitem cmdrelatesalso \\relatesalso \refitem cmdrelatesalso \\relatesalso
...@@ -203,6 +205,16 @@ doxygen. Unrecognized commands are treated as normal text. ...@@ -203,6 +205,16 @@ doxygen. Unrecognized commands are treated as normal text.
\note The completeness (and correctness) of the call graph depends on the \note The completeness (and correctness) of the call graph depends on the
doxygen code parser which is not perfect. doxygen code parser which is not perfect.
<hr>
\section cmdcategory \category <name> [<header-file>] [<header-name>]
\addindex \\category
For Objective-C only: Indicates that a comment block contains documentation
for a class category with name \<name\>. The arguments are
equal to the \\class command.
\sa section \ref cmdclass "\\class".
\section cmdclass \class <name> [<header-file>] [<header-name>] \section cmdclass \class <name> [<header-file>] [<header-name>]
\addindex \\class \addindex \\class
...@@ -385,7 +397,7 @@ doxygen. Unrecognized commands are treated as normal text. ...@@ -385,7 +397,7 @@ doxygen. Unrecognized commands are treated as normal text.
\ref cmdaddtogroup "\\addtogroup" and \ref cmdweakgroup "\\weakgroup" \ref cmdaddtogroup "\\addtogroup" and \ref cmdweakgroup "\\weakgroup"
<hr> <hr>
\section cmdinterface \interface \section cmdinterface \interface <name> [<header-file>] [<header-name>]
\addindex \\interface \addindex \\interface
Indicates that a comment block contains documentation for an Indicates that a comment block contains documentation for an
...@@ -552,6 +564,16 @@ See section \ref memgroup for an example. ...@@ -552,6 +564,16 @@ See section \ref memgroup for an example.
\sa section \ref cmdfn "\\fn" and \ref cmdvar "\\var". \sa section \ref cmdfn "\\fn" and \ref cmdvar "\\var".
<hr>
\section cmdprotocol \protocol <name> [<header-file>] [<header-name>]
\addindex \\protocol
Indicates that a comment block contains documentation for a
protocol in Objective-C with name \<name\>. The arguments are equal
to the \\class command.
\sa section \ref cmdclass "\\class".
<hr> <hr>
\section cmdrelates \relates <name> \section cmdrelates \relates <name>
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3.7_20040517 Version: 1.3.7_20040526
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -711,7 +711,6 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -711,7 +711,6 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
bool typeOnly=FALSE) bool typeOnly=FALSE)
{ {
int i=0; int i=0;
//fprintf(stderr,"generateClassOrGlobalLink(clName=%s)\n",clName);
if (*clName=='~') // correct for matching negated values i.s.o. destructors. if (*clName=='~') // correct for matching negated values i.s.o. destructors.
{ {
g_code->codify("~"); g_code->codify("~");
...@@ -726,14 +725,21 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -726,14 +725,21 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
ClassDef *cd=0; ClassDef *cd=0;
MemberDef *md=0; MemberDef *md=0;
//printf("generateClassOrGlobalLink(className=%s)\n",className.data());
if (!g_theVarContext.findVariable(className)) // not a local variable if (!g_theVarContext.findVariable(className)) // not a local variable
{ {
Definition *d = g_currentDefinition; Definition *d = g_currentDefinition;
//printf("d=%p g_sourceFileDef=%p\n",d,g_currentDefinition);
cd = getResolvedClass(d,g_sourceFileDef,className,&md); cd = getResolvedClass(d,g_sourceFileDef,className,&md);
if (cd==0 && md==0 && (i=className.find('<'))!=-1) if (cd==0 && md==0 && (i=className.find('<'))!=-1)
{ {
cd=getResolvedClass(d,g_sourceFileDef,className.left(i),&md); cd=getResolvedClass(d,g_sourceFileDef,className.left(i),&md);
} }
//printf("is not found as a variable %s\n",cd?cd->name().data():"<null>");
}
else
{
//printf("is a local variable!\n");
} }
if (cd && cd->isLinkable()) // is it a linkable class if (cd && cd->isLinkable()) // is it a linkable class
{ {
...@@ -1212,7 +1218,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx) ...@@ -1212,7 +1218,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
} }
else else
{ {
printf("Invalid name: id=%d\n",refId); //printf("Invalid name: id=%d\n",refId);
} }
} }
else if (nc=='o') // reference to potential object name else if (nc=='o') // reference to potential object name
...@@ -1321,7 +1327,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx) ...@@ -1321,7 +1327,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
} }
else else
{ {
printf("Invalid object: id=%d\n",refId); //printf("Invalid object: id=%d\n",refId);
} }
} }
else if (nc=='c') // reference to nested call else if (nc=='c') // reference to nested call
...@@ -1364,7 +1370,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx) ...@@ -1364,7 +1370,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
} }
else else
{ {
printf("Invalid context: id=%d\n",refId); //printf("Invalid context: id=%d\n",refId);
} }
} }
else // illegal marker else // illegal marker
...@@ -1981,7 +1987,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -1981,7 +1987,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
<Body>{SCOPETNAME}/{B}*"(" { // a() or c::a() or t<A,B>::a() <Body>{SCOPETNAME}/{B}*"(" { // a() or c::a() or t<A,B>::a()
addType(); addType();
generateFunctionLink(*g_code,yytext); generateFunctionLink(*g_code,yytext);
g_theVarContext.addVariable(g_type,yytext); //g_theVarContext.addVariable(g_type,yytext);
g_bracketCount=0; g_bracketCount=0;
g_args.resize(0); g_args.resize(0);
g_name+=yytext; g_name+=yytext;
......
...@@ -151,7 +151,8 @@ static void writeVectorBox(QTextStream &t,DiagramItem *di, ...@@ -151,7 +151,8 @@ static void writeVectorBox(QTextStream &t,DiagramItem *di,
if (di->virtualness()==Virtual) t << "solid\n"; if (di->virtualness()==Virtual) t << "solid\n";
} }
static void writeMapArea(QTextStream &t,ClassDef *cd,int x,int y,int w,int h) static void writeMapArea(QTextStream &t,ClassDef *cd,QCString relPath,
int x,int y,int w,int h)
{ {
if (cd->isLinkable()) if (cd->isLinkable())
{ {
...@@ -169,6 +170,10 @@ static void writeMapArea(QTextStream &t,ClassDef *cd,int x,int y,int w,int h) ...@@ -169,6 +170,10 @@ static void writeMapArea(QTextStream &t,ClassDef *cd,int x,int y,int w,int h)
{ {
if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/";
} }
else
{
t << relPath;
}
t << cd->getOutputFileBase() << Doxygen::htmlFileExtension << "\" "; t << cd->getOutputFileBase() << Doxygen::htmlFileExtension << "\" ";
t << "alt=\"" << cd->displayName(); t << "alt=\"" << cd->displayName();
t << "\" shape=\"rect\" coords=\"" << x << "," << y << ","; t << "\" shape=\"rect\" coords=\"" << x << "," << y << ",";
...@@ -479,6 +484,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image, ...@@ -479,6 +484,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image,
bool doBase,bool bitmap, bool doBase,bool bitmap,
uint baseRows,uint superRows, uint baseRows,uint superRows,
uint cellWidth,uint cellHeight, uint cellWidth,uint cellHeight,
QCString relPath,
bool generateMap) bool generateMap)
{ {
DiagramRow *dr=first(); DiagramRow *dr=first();
...@@ -548,7 +554,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image, ...@@ -548,7 +554,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image,
writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow, writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,
hasDocs,di->getChildren()->count()>0); hasDocs,di->getChildren()->count()>0);
if (!firstRow && generateMap) if (!firstRow && generateMap)
writeMapArea(t,di->getClassDef(),x,y,cellWidth,cellHeight); writeMapArea(t,di->getClassDef(),relPath,x,y,cellWidth,cellHeight);
} }
else else
{ {
...@@ -581,7 +587,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image, ...@@ -581,7 +587,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image,
bool hasDocs=di->getClassDef()->isLinkable(); bool hasDocs=di->getClassDef()->isLinkable();
writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,hasDocs); writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,hasDocs);
if (!firstRow && generateMap) if (!firstRow && generateMap)
writeMapArea(t,di->getClassDef(),x,y,cellWidth,cellHeight); writeMapArea(t,di->getClassDef(),relPath,x,y,cellWidth,cellHeight);
} }
else else
{ {
...@@ -1252,7 +1258,8 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path, ...@@ -1252,7 +1258,8 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path,
void ClassDiagram::writeImage(QTextStream &t,const char *path, void ClassDiagram::writeImage(QTextStream &t,const char *path,
const char *fileName, bool generateMap) const char *relPath,const char *fileName,
bool generateMap)
{ {
uint baseRows=base->computeRows(); uint baseRows=base->computeRows();
uint superRows=super->computeRows(); uint superRows=super->computeRows();
...@@ -1272,8 +1279,8 @@ void ClassDiagram::writeImage(QTextStream &t,const char *path, ...@@ -1272,8 +1279,8 @@ void ClassDiagram::writeImage(QTextStream &t,const char *path,
Image image(imageWidth,imageHeight); Image image(imageWidth,imageHeight);
base->drawBoxes(t,&image,TRUE,TRUE,baseRows,superRows,cellWidth,cellHeight,generateMap); base->drawBoxes(t,&image,TRUE,TRUE,baseRows,superRows,cellWidth,cellHeight,relPath,generateMap);
super->drawBoxes(t,&image,FALSE,TRUE,baseRows,superRows,cellWidth,cellHeight,generateMap); super->drawBoxes(t,&image,FALSE,TRUE,baseRows,superRows,cellWidth,cellHeight,relPath,generateMap);
base->drawConnectors(t,&image,TRUE,TRUE,baseRows,superRows,cellWidth,cellHeight); base->drawConnectors(t,&image,TRUE,TRUE,baseRows,superRows,cellWidth,cellHeight);
super->drawConnectors(t,&image,FALSE,TRUE,baseRows,superRows,cellWidth,cellHeight); super->drawConnectors(t,&image,FALSE,TRUE,baseRows,superRows,cellWidth,cellHeight);
......
...@@ -105,6 +105,7 @@ class TreeDiagram : public QList<DiagramRow> ...@@ -105,6 +105,7 @@ class TreeDiagram : public QList<DiagramRow>
bool doBase,bool bitmap, bool doBase,bool bitmap,
uint baseRows,uint superRows, uint baseRows,uint superRows,
uint cellWidth,uint cellHeight, uint cellWidth,uint cellHeight,
QCString relPath="",
bool generateMap=TRUE); bool generateMap=TRUE);
void drawConnectors(QTextStream &t,Image *image, void drawConnectors(QTextStream &t,Image *image,
bool doBase,bool bitmap, bool doBase,bool bitmap,
...@@ -123,7 +124,7 @@ class ClassDiagram ...@@ -123,7 +124,7 @@ class ClassDiagram
~ClassDiagram(); ~ClassDiagram();
void writeFigure(QTextStream &t,const char *path, void writeFigure(QTextStream &t,const char *path,
const char *file); const char *file);
void writeImage(QTextStream &t,const char *path, void writeImage(QTextStream &t,const char *path,const char *relPath,
const char *file,bool generateMap=TRUE); const char *file,bool generateMap=TRUE);
private: private:
TreeDiagram *base; TreeDiagram *base;
......
...@@ -239,7 +239,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type) ...@@ -239,7 +239,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
/*! Collects the parameters found with \@param or \@retval commands /*! Collects the parameters found with \@param or \@retval commands
* in a global list g_paramsFound. If \a isParam is set to TRUE * in a global list g_paramsFound. If \a isParam is set to TRUE
* and the parameter is not an actual parameter of the current * and the parameter is not an actual parameter of the current
* member g_memberDef, than a warning is raised (unless warnings * member g_memberDef, then a warning is raised (unless warnings
* are disabled altogether). * are disabled altogether).
*/ */
static void checkArgumentName(const QString &name,bool isParam) static void checkArgumentName(const QString &name,bool isParam)
...@@ -340,7 +340,7 @@ static void checkUndocumentedParams() ...@@ -340,7 +340,7 @@ static void checkUndocumentedParams()
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
/*! Strips know html and tex extensions from \a text. */ /*! Strips known html and tex extensions from \a text. */
static QString stripKnownExtensions(const char *text) static QString stripKnownExtensions(const char *text)
{ {
QString result=text; QString result=text;
...@@ -1429,16 +1429,14 @@ void DocCopy::parse() ...@@ -1429,16 +1429,14 @@ void DocCopy::parse()
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
void DocXRefItem::parse() DocXRefItem::DocXRefItem(DocNode *parent,int id,const char *key) :
m_parent(parent), m_id(id), m_key(key), m_relPath(g_relPath)
{
}
bool DocXRefItem::parse()
{ {
QString listName; QString listName;
//switch(m_type)
//{
// case Bug: listName="bug"; break;
// case Test: listName="test"; break;
// case Todo: listName="todo"; break;
// case Deprecated: listName="deprecated"; break;
//}
RefList *refList = Doxygen::xrefLists->find(m_key); RefList *refList = Doxygen::xrefLists->find(m_key);
if (refList && if (refList &&
( (
...@@ -1465,7 +1463,9 @@ void DocXRefItem::parse() ...@@ -1465,7 +1463,9 @@ void DocXRefItem::parse()
docParserPopContext(); docParserPopContext();
} }
} }
return TRUE;
} }
return FALSE;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -1699,6 +1699,7 @@ DocRef::DocRef(DocNode *parent,const QString &target) : ...@@ -1699,6 +1699,7 @@ DocRef::DocRef(DocNode *parent,const QString &target) :
ASSERT(!target.isEmpty()); ASSERT(!target.isEmpty());
m_relPath = g_relPath; m_relPath = g_relPath;
SectionInfo *sec = Doxygen::sectionDict[target]; SectionInfo *sec = Doxygen::sectionDict[target];
//printf("DocRef::DocRef(target=%s) sec=%p\n",target.data(),sec);
if (sec) // ref to section or anchor if (sec) // ref to section or anchor
{ {
m_text = sec->title; m_text = sec->title;
...@@ -1709,6 +1710,8 @@ DocRef::DocRef(DocNode *parent,const QString &target) : ...@@ -1709,6 +1710,8 @@ DocRef::DocRef(DocNode *parent,const QString &target) :
if (sec->type!=SectionInfo::Page) m_anchor = sec->label; if (sec->type!=SectionInfo::Page) m_anchor = sec->label;
m_refToAnchor = sec->type==SectionInfo::Anchor; m_refToAnchor = sec->type==SectionInfo::Anchor;
m_refToSection = sec->type!=SectionInfo::Anchor; m_refToSection = sec->type!=SectionInfo::Anchor;
//printf("m_text=%s,m_ref=%s,m_file=%s,m_refToAnchor=%d\n",
// m_text.data(),m_ref.data(),m_file.data(),m_refToAnchor);
} }
else if (resolveLink(g_context,target,TRUE,&compound,/*&pageInfo,*/anchor)) else if (resolveLink(g_context,target,TRUE,&compound,/*&pageInfo,*/anchor))
{ {
...@@ -3234,8 +3237,14 @@ int DocPara::handleXRefItem() ...@@ -3234,8 +3237,14 @@ int DocPara::handleXRefItem()
if (retval==RetVal_OK) if (retval==RetVal_OK)
{ {
DocXRefItem *ref = new DocXRefItem(this,g_token->id,g_token->name); DocXRefItem *ref = new DocXRefItem(this,g_token->id,g_token->name);
m_children.append(ref); if (ref->parse())
ref->parse(); {
m_children.append(ref);
}
else
{
delete ref;
}
} }
doctokenizerYYsetStatePara(); doctokenizerYYsetStatePara();
return retval; return retval;
...@@ -3329,13 +3338,13 @@ void DocPara::handleImage(const QString &cmdName) ...@@ -3329,13 +3338,13 @@ void DocPara::handleImage(const QString &cmdName)
} }
doctokenizerYYsetStateFile(); doctokenizerYYsetStateFile();
tok=doctokenizerYYlex(); tok=doctokenizerYYlex();
doctokenizerYYsetStatePara();
if (tok!=TK_WORD) if (tok!=TK_WORD)
{ {
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: unexpected token %s as the argument of %s", warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: unexpected token %s as the argument of %s",
tokToString(tok),cmdName.data()); tokToString(tok),cmdName.data());
return; return;
} }
doctokenizerYYsetStatePara();
HtmlAttribList attrList; HtmlAttribList attrList;
DocImage *img = new DocImage(this,attrList,findAndCopyImage(g_token->name,t),t); DocImage *img = new DocImage(this,attrList,findAndCopyImage(g_token->name,t),t);
m_children.append(img); m_children.append(img);
...@@ -3353,13 +3362,13 @@ void DocPara::handleDotFile(const QString &cmdName) ...@@ -3353,13 +3362,13 @@ void DocPara::handleDotFile(const QString &cmdName)
} }
doctokenizerYYsetStateFile(); doctokenizerYYsetStateFile();
tok=doctokenizerYYlex(); tok=doctokenizerYYlex();
doctokenizerYYsetStatePara();
if (tok!=TK_WORD) if (tok!=TK_WORD)
{ {
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: unexpected token %s as the argument of %s", warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: unexpected token %s as the argument of %s",
tokToString(tok),cmdName.data()); tokToString(tok),cmdName.data());
return; return;
} }
doctokenizerYYsetStatePara();
QString name = g_token->name; QString name = g_token->name;
DocDotFile *df = new DocDotFile(this,name); DocDotFile *df = new DocDotFile(this,name);
m_children.append(df); m_children.append(df);
...@@ -4825,6 +4834,10 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, ...@@ -4825,6 +4834,10 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
{ {
g_context = ctx->name(); g_context = ctx->name();
} }
else if (ctx && ctx->definitionType()==Definition::TypePage)
{
g_context = ctx->getOuterScope()->name();
}
else else
{ {
g_context = ""; g_context = "";
...@@ -4904,6 +4917,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, ...@@ -4904,6 +4917,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
g_fileName = fileName; g_fileName = fileName;
g_relPath = ctx ? relativePathToRoot(ctx->getOutputFileBase()) : QString(""); g_relPath = ctx ? relativePathToRoot(ctx->getOutputFileBase()) : QString("");
//printf("ctx->name=%s relPath=%s\n",ctx->name().data(),g_relPath.data());
g_memberDef = md; g_memberDef = md;
g_nodeStack.clear(); g_nodeStack.clear();
g_styleStack.clear(); g_styleStack.clear();
......
...@@ -541,16 +541,15 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode ...@@ -541,16 +541,15 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
{ {
public: public:
//enum Type { Bug, Test, Todo, Deprecated }; //enum Type { Bug, Test, Todo, Deprecated };
DocXRefItem(DocNode *parent,int id,const char *key) : DocXRefItem(DocNode *parent,int id,const char *key);
m_parent(parent), m_id(id), m_key(key) /*, m_type(t)*/ {}
Kind kind() const { return Kind_XRefItem; } Kind kind() const { return Kind_XRefItem; }
//Type type() const { return m_type; }
QString file() const { return m_file; } QString file() const { return m_file; }
QString anchor() const { return m_anchor; } QString anchor() const { return m_anchor; }
QString title() const { return m_title; } QString title() const { return m_title; }
DocNode *parent() const { return m_parent; } DocNode *parent() const { return m_parent; }
QString relPath() const { return m_relPath; }
void accept(DocVisitor *v) { CompAccept<DocXRefItem>::accept(this,v); } void accept(DocVisitor *v) { CompAccept<DocXRefItem>::accept(this,v); }
void parse(); bool parse();
private: private:
DocNode *m_parent; DocNode *m_parent;
...@@ -559,6 +558,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode ...@@ -559,6 +558,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
QString m_file; QString m_file;
QString m_anchor; QString m_anchor;
QString m_title; QString m_title;
QString m_relPath;
}; };
/*! @brief Node representing an image */ /*! @brief Node representing an image */
......
...@@ -585,6 +585,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -585,6 +585,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
BEGIN(St_TitleN); BEGIN(St_TitleN);
} }
<St_Title>\n { <St_Title>\n {
unput(*yytext);
return 0; return 0;
} }
<St_TitleN>"&"{ID}";" { /* symbol */ <St_TitleN>"&"{ID}";" { /* symbol */
...@@ -680,7 +681,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -680,7 +681,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
unput(*yytext); unput(*yytext);
return 0; return 0;
} }
<St_IntRef>[A-Z_a-z0-9.:#\-\+]+ { <St_IntRef>[A-Z_a-z0-9.:/#\-\+]+ {
g_token->name = yytext; g_token->name = yytext;
return TK_WORD; return TK_WORD;
} }
...@@ -710,7 +711,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -710,7 +711,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
<St_Ref2>"\""|\n { /* " or \n => end of title */ <St_Ref2>"\""|\n { /* " or \n => end of title */
return 0; return 0;
} }
<St_XRefItem>{ID} { <St_XRefItem>{ID} {
g_token->name=yytext; g_token->name=yytext;
} }
<St_XRefItem>" " { <St_XRefItem>" " {
...@@ -793,27 +794,27 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -793,27 +794,27 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
g_secType = SectionInfo::Paragraph; g_secType = SectionInfo::Paragraph;
BEGIN(St_SecLabel2); BEGIN(St_SecLabel2);
} }
<St_Sections>{CMD}"verbatim" { <St_Sections>{CMD}"verbatim"{BLANK}+ {
g_endMarker="endverbatim"; g_endMarker="endverbatim";
BEGIN(St_SecSkip); BEGIN(St_SecSkip);
} }
<St_Sections>{CMD}"dot" { <St_Sections>{CMD}"dot"/[^a-z_A-Z0-9] {
g_endMarker="enddot"; g_endMarker="enddot";
BEGIN(St_SecSkip); BEGIN(St_SecSkip);
} }
<St_Sections>{CMD}"htmlonly" { <St_Sections>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
g_endMarker="endhtmlonly"; g_endMarker="endhtmlonly";
BEGIN(St_SecSkip); BEGIN(St_SecSkip);
} }
<St_Sections>{CMD}"latexonly" { <St_Sections>{CMD}"latexonly"/[^a-z_A-Z0-9] {
g_endMarker="endlatexonly"; g_endMarker="endlatexonly";
BEGIN(St_SecSkip); BEGIN(St_SecSkip);
} }
<St_Sections>{CMD}"xmlonly" { <St_Sections>{CMD}"xmlonly"/[^a-z_A-Z0-9] {
g_endMarker="endxmlonly"; g_endMarker="endxmlonly";
BEGIN(St_SecSkip); BEGIN(St_SecSkip);
} }
<St_Sections>{CMD}"code" { <St_Sections>{CMD}"code"/[^a-z_A-Z0-9] {
g_endMarker="endcode"; g_endMarker="endcode";
BEGIN(St_SecSkip); BEGIN(St_SecSkip);
} }
......
...@@ -6497,13 +6497,14 @@ static void generatePageDocs() ...@@ -6497,13 +6497,14 @@ static void generatePageDocs()
outputList->endSection(si->label,si->type); outputList->endSection(si->label,si->type);
} }
outputList->startTextBlock(); outputList->startTextBlock();
outputList->parseDoc(pd->docFile(), outputList->parseDoc(pd->docFile(), // fileName
pd->docLine(), pd->docLine(), // startLine
pd->getOuterScope(),0, pd, // context
pd->documentation(), 0, // memberdef
TRUE, // index words pd->documentation(), // docStr
FALSE // not an example TRUE, // index words
/*,pd->sectionDict*/); FALSE // not an example
);
outputList->endTextBlock(); outputList->endTextBlock();
endFile(*outputList); endFile(*outputList);
//outputList->enable(OutputGenerator::Man); //outputList->enable(OutputGenerator::Man);
...@@ -6591,7 +6592,7 @@ static void generateExampleDocs() ...@@ -6591,7 +6592,7 @@ static void generateExampleDocs()
endTitle(*outputList,n,0); endTitle(*outputList,n,0);
outputList->parseDoc(pd->docFile(), // file outputList->parseDoc(pd->docFile(), // file
pd->docLine(), // startLine pd->docLine(), // startLine
pd->getOuterScope(), // context pd, // context
0, // memberDef 0, // memberDef
pd->documentation()+"\n\\include "+pd->name(), // docs pd->documentation()+"\n\\include "+pd->name(), // docs
TRUE, // index words TRUE, // index words
......
...@@ -908,7 +908,7 @@ void HtmlDocVisitor::visitPre(DocXRefItem *x) ...@@ -908,7 +908,7 @@ void HtmlDocVisitor::visitPre(DocXRefItem *x)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "<dl compact><dt><b><a class=\"el\" href=\"" m_t << "<dl compact><dt><b><a class=\"el\" href=\""
<< x->file() << Doxygen::htmlFileExtension << "#" << x->anchor() << "\">"; << x->relPath() << x->file() << Doxygen::htmlFileExtension << "#" << x->anchor() << "\">";
filter(x->title()); filter(x->title());
m_t << ":</a></b></dt><dd>"; m_t << ":</a></b></dt><dd>";
} }
......
...@@ -813,11 +813,11 @@ void HtmlGenerator::endClassDiagram(ClassDiagram &d, ...@@ -813,11 +813,11 @@ void HtmlGenerator::endClassDiagram(ClassDiagram &d,
const char *fileName,const char *name) const char *fileName,const char *name)
{ {
t << "\n<p><center><img src=\"" t << "\n<p><center><img src=\""
<< fileName << ".png\" usemap=\"#" << name << "_map\"" << relPath << fileName << ".png\" usemap=\"#" << name << "_map\""
<< " border=\"0\" alt=\"\"></center>" << endl << " border=\"0\" alt=\"\"></center>" << endl
<< "<map name=\"" << name << "_map\">" << endl; << "<map name=\"" << name << "_map\">" << endl;
d.writeImage(t,dir,fileName); d.writeImage(t,dir,relPath,fileName);
} }
......
...@@ -353,6 +353,7 @@ void HtmlHelp::initialize() ...@@ -353,6 +353,7 @@ void HtmlHelp::initialize()
s_languageDict.insert("japanese-en", new QCString("0x411 Japanese")); s_languageDict.insert("japanese-en", new QCString("0x411 Japanese"));
s_languageDict.insert("korean", new QCString("0x412 Korean")); s_languageDict.insert("korean", new QCString("0x412 Korean"));
s_languageDict.insert("chinese", new QCString("0x804 Chinese (PRC)")); s_languageDict.insert("chinese", new QCString("0x804 Chinese (PRC)"));
s_languageDict.insert("chinese-traditional", new QCString("0x404 Chinese (Taiwan)"));
} }
......
...@@ -116,6 +116,7 @@ static void endIndexHierarchy(OutputList &ol,int level) ...@@ -116,6 +116,7 @@ static void endIndexHierarchy(OutputList &ol,int level)
static bool g_memberIndexLetterUsed[CMHL_Total][256]; static bool g_memberIndexLetterUsed[CMHL_Total][256];
static bool g_fileIndexLetterUsed[FMHL_Total][256]; static bool g_fileIndexLetterUsed[FMHL_Total][256];
static bool g_namespaceIndexLetterUsed[NMHL_Total][256]; static bool g_namespaceIndexLetterUsed[NMHL_Total][256];
static bool g_classIndexLetterUsed[CHL_Total][256];
const int maxItemsBeforeQuickIndex = 30; const int maxItemsBeforeQuickIndex = 30;
...@@ -886,9 +887,7 @@ void writeFileIndex(OutputList &ol) ...@@ -886,9 +887,7 @@ void writeFileIndex(OutputList &ol)
ftvHelp->addContentsItem(TRUE,0,"files",0,ftvHelpTitle); ftvHelp->addContentsItem(TRUE,0,"files",0,ftvHelpTitle);
ftvHelp->incContentsDepth(); ftvHelp->incContentsDepth();
} }
//ol.newParagraph();
ol.parseText(theTranslator->trFileListDescription(Config_getBool("EXTRACT_ALL"))); ol.parseText(theTranslator->trFileListDescription(Config_getBool("EXTRACT_ALL")));
//ol.newParagraph();
ol.endTextBlock(); ol.endTextBlock();
OutputNameDict outputNameDict(1009); OutputNameDict outputNameDict(1009);
...@@ -1196,16 +1195,58 @@ void writeAnnotatedClassList(OutputList &ol) ...@@ -1196,16 +1195,58 @@ void writeAnnotatedClassList(OutputList &ol)
bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP"); bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
bool hasFtvHelp = generateHtml && Config_getBool("GENERATE_TREEVIEW"); bool hasFtvHelp = generateHtml && Config_getBool("GENERATE_TREEVIEW");
ol.startIndexList(); ol.startIndexList();
//ClassDef *cd=Doxygen::classList.first();
//while (cd)
ClassSDict::Iterator cli(Doxygen::classSDict); ClassSDict::Iterator cli(Doxygen::classSDict);
ClassDef *cd; ClassDef *cd;
for (;(cd=cli.current());++cli)
// clear index
for (int y=0;y<CHL_Total;y++)
{
for (int x=0;x<256;x++)
{
g_classIndexLetterUsed[y][x]=FALSE;
}
}
// see which elements are in use
for (cli.toFirst();(cd=cli.current());++cli)
{
if (cd->isLinkableInProject() && cd->templateMaster()==0)
{
int c = cd->displayName().at(0);
g_classIndexLetterUsed[CHL_All][c]=TRUE;
switch(cd->compoundType())
{
case ClassDef::Class:
g_classIndexLetterUsed[CHL_Classes][c]=TRUE;
break;
case ClassDef::Struct:
g_classIndexLetterUsed[CHL_Structs][c]=TRUE;
break;
case ClassDef::Union:
g_classIndexLetterUsed[CHL_Unions][c]=TRUE;
break;
case ClassDef::Interface:
g_classIndexLetterUsed[CHL_Interfaces][c]=TRUE;
break;
case ClassDef::Protocol:
g_classIndexLetterUsed[CHL_Protocols][c]=TRUE;
break;
case ClassDef::Category:
g_classIndexLetterUsed[CHL_Categories][c]=TRUE;
break;
case ClassDef::Exception:
g_classIndexLetterUsed[CHL_Exceptions][c]=TRUE;
break;
}
}
}
for (cli.toFirst();(cd=cli.current());++cli)
{ {
if (cd->isLinkableInProject() && cd->templateMaster()==0) if (cd->isLinkableInProject() && cd->templateMaster()==0)
{ {
QCString type=cd->compoundTypeString(); QCString type=cd->compoundTypeString();
//ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->displayName());
ol.startIndexKey(); ol.startIndexKey();
ol.writeObjectLink(0,cd->getOutputFileBase(),0,cd->displayName()); ol.writeObjectLink(0,cd->getOutputFileBase(),0,cd->displayName());
ol.endIndexKey(); ol.endIndexKey();
...@@ -1216,7 +1257,7 @@ void writeAnnotatedClassList(OutputList &ol) ...@@ -1216,7 +1257,7 @@ void writeAnnotatedClassList(OutputList &ol)
ol.parseDoc( ol.parseDoc(
cd->briefFile(),cd->briefLine(), cd->briefFile(),cd->briefLine(),
cd,0, cd,0,
abbreviate(cd->briefDescription(),cd->name()), abbreviate(cd->briefDescription(),cd->displayName()),
FALSE, // indexWords FALSE, // indexWords
FALSE // isExample FALSE // isExample
); );
...@@ -1709,7 +1750,7 @@ int countClassMembers(int filter) ...@@ -1709,7 +1750,7 @@ int countClassMembers(int filter)
(cd=md->getClassDef()) && (cd=md->getClassDef()) &&
cd->isLinkableInProject() && cd->isLinkableInProject() &&
( filter==CMHL_All && !(md->isFriend() && isFriendToHide) || ( filter==CMHL_All && !(md->isFriend() && isFriendToHide) ||
(filter==CMHL_Functions && (md->isFunction() || md->isSlot() || md->isSignal())) || (filter==CMHL_Functions && (md->isFunction() || md->isSlot() || md->isSignal())) ||
(filter==CMHL_Variables && md->isVariable()) || (filter==CMHL_Variables && md->isVariable()) ||
(filter==CMHL_Typedefs && md->isTypedef()) || (filter==CMHL_Typedefs && md->isTypedef()) ||
(filter==CMHL_Enums && md->isEnumerate()) || (filter==CMHL_Enums && md->isEnumerate()) ||
...@@ -1769,10 +1810,6 @@ static void writeMemberIndexFiltered(OutputList &ol, ...@@ -1769,10 +1810,6 @@ static void writeMemberIndexFiltered(OutputList &ol,
QCString title = theTranslator->trCompoundMembers(); QCString title = theTranslator->trCompoundMembers();
QCString htmlHelpTitle = title; QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title; QCString ftvHelpTitle = title;
//if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
//startTitle(ol,0);
//ol.parseText(title);
//endTitle(ol,0,0);
ol.writeString("<div class=\"qindex\">"); ol.writeString("<div class=\"qindex\">");
......
...@@ -124,6 +124,19 @@ enum NamespaceMemberHighlight ...@@ -124,6 +124,19 @@ enum NamespaceMemberHighlight
NMHL_Total = FMHL_EnumValues+1 NMHL_Total = FMHL_EnumValues+1
}; };
enum ClassHighlight
{
CHL_All = 0,
CHL_Classes,
CHL_Structs,
CHL_Unions,
CHL_Interfaces,
CHL_Protocols,
CHL_Categories,
CHL_Exceptions,
CHL_Total = CHL_Exceptions+1
};
extern int annotatedClasses; extern int annotatedClasses;
extern int hierarchyClasses; extern int hierarchyClasses;
extern int documentedFiles; extern int documentedFiles;
......
...@@ -167,6 +167,7 @@ void ManDocVisitor::visit(DocStyleChange *s) ...@@ -167,6 +167,7 @@ void ManDocVisitor::visit(DocStyleChange *s)
{ {
m_insidePre=FALSE; m_insidePre=FALSE;
if (!m_firstCol) m_t << endl; if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl; m_t << ".PP" << endl;
m_firstCol=TRUE; m_firstCol=TRUE;
} }
...@@ -187,6 +188,7 @@ void ManDocVisitor::visit(DocVerbatim *s) ...@@ -187,6 +188,7 @@ void ManDocVisitor::visit(DocVerbatim *s)
m_t << ".nf" << endl; m_t << ".nf" << endl;
parseCode(m_ci,s->context(),s->text().latin1(),s->isExample(),s->exampleFile()); parseCode(m_ci,s->context(),s->text().latin1(),s->isExample(),s->exampleFile());
if (!m_firstCol) m_t << endl; if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl; m_t << ".PP" << endl;
m_firstCol=TRUE; m_firstCol=TRUE;
break; break;
...@@ -196,6 +198,7 @@ void ManDocVisitor::visit(DocVerbatim *s) ...@@ -196,6 +198,7 @@ void ManDocVisitor::visit(DocVerbatim *s)
m_t << ".nf" << endl; m_t << ".nf" << endl;
m_t << s->text(); m_t << s->text();
if (!m_firstCol) m_t << endl; if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl; m_t << ".PP" << endl;
m_firstCol=TRUE; m_firstCol=TRUE;
break; break;
...@@ -230,6 +233,7 @@ void ManDocVisitor::visit(DocInclude *inc) ...@@ -230,6 +233,7 @@ void ManDocVisitor::visit(DocInclude *inc)
FileDef fd( cfi.dirPath(), cfi.fileName() ); FileDef fd( cfi.dirPath(), cfi.fileName() );
parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile(), &fd); parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile(), &fd);
if (!m_firstCol) m_t << endl; if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl; m_t << ".PP" << endl;
m_firstCol=TRUE; m_firstCol=TRUE;
} }
...@@ -240,6 +244,7 @@ void ManDocVisitor::visit(DocInclude *inc) ...@@ -240,6 +244,7 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".nf" << endl; m_t << ".nf" << endl;
parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile()); parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile());
if (!m_firstCol) m_t << endl; if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl; m_t << ".PP" << endl;
m_firstCol=TRUE; m_firstCol=TRUE;
break; break;
...@@ -253,6 +258,7 @@ void ManDocVisitor::visit(DocInclude *inc) ...@@ -253,6 +258,7 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".nf" << endl; m_t << ".nf" << endl;
m_t << inc->text(); m_t << inc->text();
if (!m_firstCol) m_t << endl; if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl; m_t << ".PP" << endl;
m_firstCol=TRUE; m_firstCol=TRUE;
break; break;
...@@ -287,6 +293,7 @@ void ManDocVisitor::visit(DocIncOperator *op) ...@@ -287,6 +293,7 @@ void ManDocVisitor::visit(DocIncOperator *op)
if (!m_hide) if (!m_hide)
{ {
if (!m_firstCol) m_t << endl; if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl; m_t << ".PP" << endl;
m_firstCol=TRUE; m_firstCol=TRUE;
} }
...@@ -548,6 +555,7 @@ void ManDocVisitor::visitPost(DocHtmlListItem *) ...@@ -548,6 +555,7 @@ void ManDocVisitor::visitPost(DocHtmlListItem *)
//{ //{
// m_insidePre=FALSE; // m_insidePre=FALSE;
// if (!m_firstCol) m_t << endl; // if (!m_firstCol) m_t << endl;
// m_t << ".fi" << endl;
// m_t << ".PP" << endl; // m_t << ".PP" << endl;
// m_firstCol=TRUE; // m_firstCol=TRUE;
//} //}
......
...@@ -632,5 +632,6 @@ void ManGenerator::printDoc(DocNode *n) ...@@ -632,5 +632,6 @@ void ManGenerator::printDoc(DocNode *n)
n->accept(visitor); n->accept(visitor);
delete visitor; delete visitor;
firstCol=FALSE; firstCol=FALSE;
paragraph = FALSE;
} }
...@@ -1871,6 +1871,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1871,6 +1871,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
if (!comment.isEmpty()) if (!comment.isEmpty())
{ {
outputArray(comment,comment.length()); outputArray(comment,comment.length());
g_defLitText=g_defLitText.left(g_defLitText.length()-comment.length()-1);
} }
outputChar('\n'); outputChar('\n');
Define *def=0; Define *def=0;
......
...@@ -1700,7 +1700,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d, ...@@ -1700,7 +1700,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d,
newParagraph(); newParagraph();
// create a png file // create a png file
d.writeImage(t,dir,fileName,FALSE); d.writeImage(t,dir,relPath,fileName,FALSE);
// display the file // display the file
t << "{" << endl; t << "{" << endl;
......
...@@ -154,6 +154,7 @@ static Grouping lastDefGroup( "", Grouping::GROUPING_LOWEST ); ...@@ -154,6 +154,7 @@ static Grouping lastDefGroup( "", Grouping::GROUPING_LOWEST );
static bool insideFormula; static bool insideFormula;
static bool insideTryBlock=FALSE; static bool insideTryBlock=FALSE;
static bool insideCode;
static bool needsSemi; static bool needsSemi;
static int depthIf; static int depthIf;
...@@ -293,6 +294,28 @@ static QCString stripQuotes(const char *s) ...@@ -293,6 +294,28 @@ static QCString stripQuotes(const char *s)
return name; return name;
} }
//static QCString stripCComments(const QCString &s)
//{
// int p=0,i;
// QCString result;
// while ((i=s.find("/*",p))!=-1)
// {
// result+=s.mid(p,i-p);
// int ei = s.find("*/",i+1);
// if (ei!=-1)
// {
// p=ei+2;
// }
// else
// {
// return result;
// }
// }
// result+=s.right(s.length()-p);
// printf("stripCComments: input=%s output=%s\n",s.data(),result.data());
// return result;
//}
static void newDocState(); static void newDocState();
//----------------------------------------------------------------- //-----------------------------------------------------------------
...@@ -695,6 +718,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -695,6 +718,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x SkipCurlyCpp %x SkipCurlyCpp
%x SkipCurlyEndDoc %x SkipCurlyEndDoc
%x SkipString %x SkipString
%x SkipPHPString
%x SkipInits %x SkipInits
%x SkipCPP %x SkipCPP
%x SkipCPPBlock %x SkipCPPBlock
...@@ -720,6 +744,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -720,6 +744,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x LineDoc %x LineDoc
%x DefLineDoc %x DefLineDoc
%x ClassDocArg1 %x ClassDocArg1
%x CategoryDocArg1
%x ClassDocArg2 %x ClassDocArg2
%x ClassDocArg3 %x ClassDocArg3
%x ClassDocFunc %x ClassDocFunc
...@@ -790,6 +815,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -790,6 +815,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x AnchorLabel %x AnchorLabel
%x ReadInitializer %x ReadInitializer
%x CopyString %x CopyString
%x CopyPHPString
%x CopyRound %x CopyRound
%x CopyCurly %x CopyCurly
%x IDLUnionCase %x IDLUnionCase
...@@ -883,7 +909,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -883,7 +909,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN( FindMembers ); BEGIN( FindMembers );
} }
} }
<NextSemi>{CHARLIT} <NextSemi>{CHARLIT} { if (insidePHP) REJECT; }
<NextSemi>\" { <NextSemi>\" {
lastStringContext=NextSemi; lastStringContext=NextSemi;
BEGIN(SkipString); BEGIN(SkipString);
...@@ -899,6 +925,11 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -899,6 +925,11 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<FindMembersPHP>"<?"("php"?) { // PHP code start <FindMembersPHP>"<?"("php"?) { // PHP code start
BEGIN( FindMembers ); BEGIN( FindMembers );
} }
<FindMembersPHP>[^\n<]+ { // Non-PHP code text, ignore
}
<FindMembersPHP>\n { // Non-PHP code text, ignore
yyLineNr++;
}
<FindMembersPHP>. { // Non-PHP code text, ignore <FindMembersPHP>. { // Non-PHP code text, ignore
} }
<FindMembers>"?>" { // PHP code end <FindMembers>"?>" { // PHP code end
...@@ -2028,7 +2059,16 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2028,7 +2059,16 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->initializer+=*yytext; current->initializer+=*yytext;
} }
*/ */
<ReadInitializer>{CHARLIT} { current->initializer+=yytext; } <ReadInitializer>{CHARLIT} {
if (insidePHP)
{
REJECT;
}
else
{
current->initializer+=yytext;
}
}
<ReadInitializer>\n { <ReadInitializer>\n {
current->initializer+=*yytext; current->initializer+=*yytext;
yyLineNr++; yyLineNr++;
...@@ -2063,21 +2103,25 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2063,21 +2103,25 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
} }
/* generic quoted string copy rules */ /* generic quoted string copy rules */
<CopyString>\\. { <CopyString,CopyPHPString>\\. {
*pCopyQuotedString+=yytext; *pCopyQuotedString+=yytext;
} }
<CopyString>\" { <CopyString>\" {
*pCopyQuotedString+=*yytext; *pCopyQuotedString+=*yytext;
BEGIN( lastStringContext ); BEGIN( lastStringContext );
} }
<CopyString>"/*"|"*/"|"//" { <CopyPHPString>\' {
*pCopyQuotedString+=*yytext;
BEGIN( lastStringContext );
}
<CopyString,CopyPHPString>"/*"|"*/"|"//" {
*pCopyQuotedString+=yytext; *pCopyQuotedString+=yytext;
} }
<CopyString>\n { <CopyString,CopyPHPString>\n {
*pCopyQuotedString+=*yytext; *pCopyQuotedString+=*yytext;
yyLineNr++; yyLineNr++;
} }
<CopyString>. { <CopyString,CopyPHPString>. {
*pCopyQuotedString+=*yytext; *pCopyQuotedString+=*yytext;
} }
...@@ -2101,10 +2145,22 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2101,10 +2145,22 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
yyLineNr++; yyLineNr++;
*pCopyRoundString+=*yytext; *pCopyRoundString+=*yytext;
} }
<CopyRound>{CHARLIT} { *pCopyRoundString+=yytext; } <CopyRound>{CHARLIT} {
if (insidePHP)
{
REJECT;
}
else
{
*pCopyRoundString+=yytext;
}
}
<CopyRound>[^"'()\n]+ { <CopyRound>[^"'()\n]+ {
*pCopyRoundString+=yytext; *pCopyRoundString+=yytext;
} }
<CopyRound>. {
*pCopyRoundString+=*yytext;
}
/* generic curly bracket list copy rules */ /* generic curly bracket list copy rules */
<CopyCurly>\" { <CopyCurly>\" {
...@@ -2122,7 +2178,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2122,7 +2178,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
if (--curlyCount<0) if (--curlyCount<0)
BEGIN(lastCurlyContext); BEGIN(lastCurlyContext);
} }
<CopyCurly>{CHARLIT} { *pCopyCurlyString+=yytext; } <CopyCurly>{CHARLIT} { if (insidePHP)
{
REJECT;
}
else
{
*pCopyCurlyString+=yytext;
}
}
<CopyCurly>[^"'{}\/\n]+ { <CopyCurly>[^"'{}\/\n]+ {
*pCopyCurlyString+=yytext; *pCopyCurlyString+=yytext;
} }
...@@ -2131,6 +2195,9 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2131,6 +2195,9 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
yyLineNr++; yyLineNr++;
*pCopyCurlyString+=*yytext; *pCopyCurlyString+=*yytext;
} }
<CopyCurly>. {
*pCopyCurlyString+=*yytext;
}
<FindMembers>":" { <FindMembers>":" {
if (current->type.isEmpty()) // bit pad field if (current->type.isEmpty()) // bit pad field
{ {
...@@ -2306,8 +2373,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2306,8 +2373,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
lastContext = YY_START ; lastContext = YY_START ;
BEGIN( Comment ) ; BEGIN( Comment ) ;
} }
<ReadBody,ReadNSBody,ReadBodyIntf>{CHARLIT} { current->program += yytext; } <ReadBody,ReadNSBody,ReadBodyIntf>{CHARLIT} {
<ReadBody,ReadNSBody,ReadBodyIntf>"{" { current->program += yytext ; if (insidePHP)
{
REJECT; // for PHP code single quotes
// are used for strings of arbitrary length
}
else
{
current->program += yytext;
}
}
<ReadBody,ReadNSBody,ReadBodyIntf>"{" { current->program += yytext ;
++curlyCount ; ++curlyCount ;
} }
<ReadBody,ReadNSBody>"}" { //err("ReadBody count=%d\n",curlyCount); <ReadBody,ReadNSBody>"}" { //err("ReadBody count=%d\n",curlyCount);
...@@ -2544,6 +2621,19 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2544,6 +2621,19 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
insideObjC=FALSE; insideObjC=FALSE;
BEGIN( FindMembers ); BEGIN( FindMembers );
} }
<ReadBody,ReadNSBody,ReadBodyIntf>"'" {
if (!insidePHP)
{
current->program += yytext;
}
else
{ // begin of single quoted string
current->program += yytext;
pCopyQuotedString = &current->program;
lastStringContext=YY_START;
BEGIN(CopyPHPString);
}
}
<ReadBody,ReadNSBody,ReadBodyIntf>. { current->program += yytext ; } <ReadBody,ReadNSBody,ReadBodyIntf>. { current->program += yytext ; }
<ReadBody,ReadNSBody,ReadBodyIntf>"'#" { current->program += yytext ; } <ReadBody,ReadNSBody,ReadBodyIntf>"'#" { current->program += yytext ; }
...@@ -2881,8 +2971,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2881,8 +2971,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN( lastCopyArgStringContext ); BEGIN( lastCopyArgStringContext );
} }
<ReadFuncArgType,ReadTempArgs,CopyArgRound,CopyArgSharp>{CHARLIT} { <ReadFuncArgType,ReadTempArgs,CopyArgRound,CopyArgSharp>{CHARLIT} {
*copyArgString+=yytext; if (insidePHP)
fullArgString+=yytext; {
REJECT;
}
else
{
*copyArgString+=yytext;
fullArgString+=yytext;
}
} }
<ReadFuncArgType,ReadTempArgs,CopyArgString,CopyArgRound,CopyArgSharp>\n { <ReadFuncArgType,ReadTempArgs,CopyArgString,CopyArgRound,CopyArgSharp>\n {
yyLineNr++; yyLineNr++;
...@@ -2973,7 +3070,14 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2973,7 +3070,14 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN(CopyString); BEGIN(CopyString);
} }
<FuncPtrInit>{CHARLIT} { <FuncPtrInit>{CHARLIT} {
current->args += yytext; if (insidePHP)
{
REJECT;
}
else
{
current->args += yytext;
}
} }
<FuncPtrInit>{ID} { <FuncPtrInit>{ID} {
current->args += yytext; current->args += yytext;
...@@ -3258,6 +3362,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3258,6 +3362,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
} }
<SkipCurly>{CHARLIT} { <SkipCurly>{CHARLIT} {
//addToBody(yytext); //addToBody(yytext);
if (insidePHP) REJECT;
} }
<SkipCurly>\" { <SkipCurly>\" {
//addToBody(yytext); //addToBody(yytext);
...@@ -3323,27 +3428,21 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3323,27 +3428,21 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN(SkipVerbString); BEGIN(SkipVerbString);
} }
<SkipInits,SkipCurly,SkipCurlyCpp>{CHARLIT} { <SkipInits,SkipCurly,SkipCurlyCpp>{CHARLIT} {
if (insidePHP) REJECT;
} }
<SkipInits,SkipCurly,SkipCurlyCpp>. { <SkipInits,SkipCurly,SkipCurlyCpp>. { }
//addToBody(yytext); <SkipString,SkipPHPString>\\. { }
}
<SkipString>\\. {
//addToBodyCond(yytext);
}
<SkipString>\" { <SkipString>\" {
//addToBodyCond(yytext);
BEGIN( lastStringContext ); BEGIN( lastStringContext );
} }
<SkipString>"/*"|"*/"|"//" { <SkipPHPString>\' {
//addToBodyCond(yytext); BEGIN( lastStringContext );
} }
<SkipString>\n { <SkipString,SkipPHPString>"/*"|"*/"|"//" { }
<SkipString,SkipPHPString>\n {
yyLineNr++; yyLineNr++;
//addToBodyCond(yytext);
}
<SkipString>. {
//addToBodyCond(yytext);
} }
<SkipString,SkipPHPString>. { }
<Bases,CompoundName>";" { <Bases,CompoundName>";" {
current->section = Entry::EMPTY_SEC ; current->section = Entry::EMPTY_SEC ;
current->type.resize(0) ; current->type.resize(0) ;
...@@ -3526,8 +3625,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3526,8 +3625,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->name.sprintf("@%d",anonCount++); current->name.sprintf("@%d",anonCount++);
} }
curlyCount=0; curlyCount=0;
if (current->section==Entry::PROTOCOL_SEC || if (/*current->section==Entry::PROTOCOL_SEC ||
current->section==Entry::OBJCIMPL_SEC) current->section==Entry::OBJCIMPL_SEC*/
insideObjC
)
{ // ObjC body that ends with @end { // ObjC body that ends with @end
BEGIN( ReadBodyIntf ); BEGIN( ReadBodyIntf );
} }
...@@ -3697,9 +3798,17 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3697,9 +3798,17 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
} }
<Comment>"/*" { current->program += yytext ; } <Comment>"/*" { current->program += yytext ; }
<Comment>"//" { current->program += yytext ; } <Comment>"//" { current->program += yytext ; }
<Comment>[^\n\/\*]+ { current->program += yytext ; } <Comment>{CMD}("code"|"verbatim") {
insideCode=TRUE;
current->program += yytext ;
}
<Comment>{CMD}("endcode"|"endverbatim") {
insideCode=FALSE;
current->program += yytext ;
}
<Comment>[^ \.\n\/\*]+ { current->program += yytext ; }
<Comment>"*/" { current->program += yytext ; <Comment>"*/" { current->program += yytext ;
BEGIN( lastContext ) ; if (!insideCode) BEGIN( lastContext ) ;
} }
<Comment>. { current->program += *yytext ; } <Comment>. { current->program += *yytext ; }
...@@ -4014,6 +4123,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4014,6 +4123,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->startLine = yyLineNr; current->startLine = yyLineNr;
BEGIN( ClassDocArg1 ); BEGIN( ClassDocArg1 );
} }
<Doc,JavaDoc>{B}*{CMD}"protocol"{B}+ { // ObjC protocol
current->section = Entry::PROTOCOLDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"category"{B}+ { // ObjC category
current->section = Entry::CATEGORYDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( CategoryDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"union"{B}+ { <Doc,JavaDoc>{B}*{CMD}"union"{B}+ {
current->section = Entry::UNIONDOC_SEC; current->section = Entry::UNIONDOC_SEC;
current->fileName = yyFileName; current->fileName = yyFileName;
...@@ -4260,6 +4381,11 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4260,6 +4381,11 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
); );
yyLineNr++; yyLineNr++;
} }
<CategoryDocArg1>{SCOPENAME}{B}*"("[^\)]+")" {
current->name = yytext;
prependScope();
BEGIN( ClassDocArg2 );
}
<ClassDocArg1>{SCOPENAME}/"<" { <ClassDocArg1>{SCOPENAME}/"<" {
current->name = yytext; current->name = yytext;
// prepend outer scope name // prepend outer scope name
...@@ -4269,11 +4395,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4269,11 +4395,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
} }
<ClassDocArg1>{SCOPENAME} { <ClassDocArg1>{SCOPENAME} {
current->name = yytext; current->name = yytext;
if (current->section==Entry::PROTOCOLDOC_SEC)
{
current->name+="-p";
}
// prepend outer scope name // prepend outer scope name
prependScope(); prependScope();
BEGIN( ClassDocArg2 ); BEGIN( ClassDocArg2 );
} }
<ClassDocArg1>"\\"{B}*"\n" { <ClassDocArg1,CategoryDocArg1>"\\"{B}*"\n" {
yyLineNr++; yyLineNr++;
} }
<ClassDocArg1>"\n" { <ClassDocArg1>"\n" {
...@@ -4283,6 +4413,14 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4283,6 +4413,14 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
); );
yyLineNr++; yyLineNr++;
}
<CategoryDocArg1>"\n" {
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\category."
);
yyLineNr++;
} }
<GroupDocArg1>{ID}(".html"?) { <GroupDocArg1>{ID}(".html"?) {
current->name = yytext; current->name = yytext;
...@@ -4668,6 +4806,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4668,6 +4806,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<SectionTitle>[^\n*]*/"\n" { <SectionTitle>[^\n*]*/"\n" {
sectionTitle+=yytext; sectionTitle+=yytext;
sectionTitle=sectionTitle.stripWhiteSpace(); sectionTitle=sectionTitle.stripWhiteSpace();
//printf("Adding new section file=%s label=%s title=%s\n",yyFileName,sectionLabel.data(),sectionTitle.data());
SectionInfo *si = new SectionInfo(yyFileName,sectionLabel,sectionTitle,SectionInfo::Anchor); SectionInfo *si = new SectionInfo(yyFileName,sectionLabel,sectionTitle,SectionInfo::Anchor);
current->anchors->append(si); current->anchors->append(si);
Doxygen::sectionDict.insert(yytext,si); Doxygen::sectionDict.insert(yytext,si);
...@@ -5299,7 +5438,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -5299,7 +5438,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
unput(afterDocTerminator); unput(afterDocTerminator);
BEGIN(lastAfterDocContext); BEGIN(lastAfterDocContext);
} }
<ClassDocRelates,ClassDocFunc,ClassDocDefine,GroupDocArg1,ClassDocArg1,SectionTitle,EnumDocArg1,PageDocArg1,ExampleDocArg1,ClassDefineArgs>"*/" { <ClassDocRelates,ClassDocFunc,ClassDocDefine,GroupDocArg1,CategoryDocArg1,ClassDocArg1,SectionTitle,EnumDocArg1,PageDocArg1,ExampleDocArg1,ClassDefineArgs>"*/" {
// defer "*/" to a later time // defer "*/" to a later time
unput('/'); unput('/');
unput('*'); unput('*');
...@@ -5482,6 +5621,20 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -5482,6 +5621,20 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
lastCContext = YY_START ; lastCContext = YY_START ;
BEGIN( SkipCxxComment ) ; BEGIN( SkipCxxComment ) ;
} }
<*>\' {
if (insidePHP)
{
lastStringContext=YY_START;
BEGIN(SkipPHPString);
}
}
<*>\" {
if (insidePHP)
{
lastStringContext=YY_START;
BEGIN(SkipString);
}
}
<*>. <*>.
<SkipComment>"//"|"/*" <SkipComment>"//"|"/*"
<*>"/*" { lastCContext = YY_START ; <*>"/*" { lastCContext = YY_START ;
......
...@@ -2616,7 +2616,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2616,7 +2616,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
fd=0, md=0, cd=0, nd=0, gd=0; fd=0, md=0, cd=0, nd=0, gd=0;
if (memberName.isEmpty()) return FALSE; /* empty name => nothing to link */ if (memberName.isEmpty()) return FALSE; /* empty name => nothing to link */
QCString scopeName=scName.copy(); QCString scopeName=scName;
//printf("Search for name=%s args=%s in scope=%s\n", //printf("Search for name=%s args=%s in scope=%s\n",
// memberName.data(),args,scopeName.data()); // memberName.data(),args,scopeName.data());
...@@ -2707,7 +2707,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2707,7 +2707,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
delete argList; argList=0; delete argList; argList=0;
} }
if (mdist==maxInheritanceDepth && args && strcmp(args,"()")!=0) if (mdist==maxInheritanceDepth && args && strcmp(args,"()")==0)
// no exact match found, but if args="()" an arbitrary member will do // no exact match found, but if args="()" an arbitrary member will do
{ {
//printf(" >Searching for arbitrary member\n"); //printf(" >Searching for arbitrary member\n");
...@@ -3023,8 +3023,9 @@ bool resolveRef(/* in */ const char *scName, ...@@ -3023,8 +3023,9 @@ bool resolveRef(/* in */ const char *scName,
QCString fullName = substitute(tsName,"#","::"); QCString fullName = substitute(tsName,"#","::");
fullName = removeRedundantWhiteSpace(substitute(fullName,".","::")); fullName = removeRedundantWhiteSpace(substitute(fullName,".","::"));
int scopePos=fullName.findRev("::");
int bracePos=fullName.findRev('('); // reverse is needed for operator()(...) int bracePos=fullName.findRev('('); // reverse is needed for operator()(...)
int endNamePos=bracePos!=-1 ? bracePos : fullName.length();
int scopePos=fullName.findRev("::",endNamePos);
// default result values // default result values
*resContext=0; *resContext=0;
...@@ -3063,22 +3064,15 @@ bool resolveRef(/* in */ const char *scName, ...@@ -3063,22 +3064,15 @@ bool resolveRef(/* in */ const char *scName,
// continue search... // continue search...
} }
// extract scope
QCString scopeStr=scName;
//printf("scopeContext=%s scopeUser=%s\n",scopeContext.data(),scopeUser.data()); //printf("scopeContext=%s scopeUser=%s\n",scopeContext.data(),scopeUser.data());
// extract userscope+name // extract userscope+name
int endNamePos=bracePos!=-1 ? bracePos : fullName.length();
QCString nameStr=fullName.left(endNamePos); QCString nameStr=fullName.left(endNamePos);
// extract arguments // extract arguments
QCString argsStr; QCString argsStr;
if (bracePos!=-1) argsStr=fullName.right(fullName.length()-bracePos); if (bracePos!=-1) argsStr=fullName.right(fullName.length()-bracePos);
//printf("scope=`%s' name=`%s' arg=`%s'\n",
// scopeStr.data(),nameStr.data(),argsStr.data());
// strip template specifier // strip template specifier
// TODO: match against the correct partial template instantiation // TODO: match against the correct partial template instantiation
int templPos=nameStr.find('<'); int templPos=nameStr.find('<');
...@@ -3088,6 +3082,8 @@ bool resolveRef(/* in */ const char *scName, ...@@ -3088,6 +3082,8 @@ bool resolveRef(/* in */ const char *scName,
nameStr=nameStr.left(templPos)+nameStr.right(nameStr.length()-endTemplPos-1); nameStr=nameStr.left(templPos)+nameStr.right(nameStr.length()-endTemplPos-1);
} }
QCString scopeStr=scName;
MemberDef *md = 0; MemberDef *md = 0;
ClassDef *cd = 0; ClassDef *cd = 0;
FileDef *fd = 0; FileDef *fd = 0;
......
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