Commit 9a5a2a29 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.5-20010304

parent 8fd13827
DOXYGEN Version 1.2.5-20010226 DOXYGEN Version 1.2.5-20010304
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (26 February 2001) Dimitri van Heesch (04 March 2001)
DOXYGEN Version 1.2.5-20010226 DOXYGEN Version 1.2.5-20010304
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (26 February 2001) Dimitri van Heesch (04 March 2001)
1.2.5-20010226 1.2.5-20010304
...@@ -94,7 +94,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -94,7 +94,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_example_patterns EXAMPLE_PATTERNS <li> \refitem cfg_example_patterns EXAMPLE_PATTERNS
<li> \refitem cfg_exclude EXCLUDE <li> \refitem cfg_exclude EXCLUDE
<li> \refitem cfg_exclude_patterns EXCLUDE_PATTERNS <li> \refitem cfg_exclude_patterns EXCLUDE_PATTERNS
<li> \refitem cfg_expand_as_defined EXPAND_AS_PREDEFINED <li> \refitem cfg_expand_as_defined EXPAND_AS_DEFINED
<li> \refitem cfg_expand_only_predef EXPAND_ONLY_PREDEF <li> \refitem cfg_expand_only_predef EXPAND_ONLY_PREDEF
<li> \refitem cfg_ext_doc_paths EXT_DOC_PATHS <li> \refitem cfg_ext_doc_paths EXT_DOC_PATHS
<li> \refitem cfg_extra_packages EXTRA_PACKAGES <li> \refitem cfg_extra_packages EXTRA_PACKAGES
...@@ -1006,7 +1006,7 @@ EXTRA_PACKAGES = times ...@@ -1006,7 +1006,7 @@ EXTRA_PACKAGES = times
\addindex EXPAND_ONLY_PREDEF \addindex EXPAND_ONLY_PREDEF
If the \c EXPAND_ONLY_PREDEF and \c MACRO_EXPANSION tags are both set to YES If the \c EXPAND_ONLY_PREDEF and \c MACRO_EXPANSION tags are both set to YES
then the macro expansion is limited to the macros specified with the then the macro expansion is limited to the macros specified with the
\c PREDEFINED and \c EXPAND_AS_PREDEFINED tags. \c PREDEFINED and \c EXPAND_AS_DEFINED tags.
\anchor cfg_search_includes \anchor cfg_search_includes
<dt>\c SEARCH_INCLUDES <dd> <dt>\c SEARCH_INCLUDES <dd>
......
...@@ -66,9 +66,10 @@ allows you to expand only those defines that you explicitly ...@@ -66,9 +66,10 @@ allows you to expand only those defines that you explicitly
specify. For this you have to set the specify. For this you have to set the
\ref cfg_expand_only_predef "EXPAND_ONLY_PREDEF" tag to \c YES \ref cfg_expand_only_predef "EXPAND_ONLY_PREDEF" tag to \c YES
and specify the macro definitions after and specify the macro definitions after
the \ref cfg_predefined "PREDEFINED" tag. the \ref cfg_predefined "PREDEFINED" or
\ref cfg_expand_as_defined "EXPAND_AS_DEFINED" tag.
As an example, suppose you have the following obfusciated code fragment As an example, suppose you have the following obfuscated code fragment
of an abstract base class called \c IUnknown: of an abstract base class called \c IUnknown:
\verbatim \verbatim
......
...@@ -77,10 +77,10 @@ structcmd/html/index.html: structcmd.h structcmd.cfg ...@@ -77,10 +77,10 @@ structcmd/html/index.html: structcmd.h structcmd.cfg
autolink/html/index.html: autolink.cpp autolink.cfg autolink/html/index.html: autolink.cpp autolink.cfg
$(DOXYGEN)/bin/doxygen autolink.cfg $(DOXYGEN)/bin/doxygen autolink.cfg
tag/html/index.html: tag.cpp tag.cfg tag/html/index.html: tag.cpp tag.cfg example/html/index.html
$(DOXYGEN)/bin/doxygen tag.cfg $(DOXYGEN)/bin/doxygen tag.cfg
sed -e "1,1s#perl#$(PERL)#g" tag/html/installdox >tag/html/installdox.perl # sed -e "1,1s#perl#$(PERL)#g" tag/html/installdox >tag/html/installdox.perl
cd tag/html ; $(PERL) installdox.perl -lexample.tag@../../example/html # cd tag/html ; $(PERL) installdox.perl -lexample.tag@../../example/html
restypedef/html/index.html: restypedef.cpp restypedef.cfg restypedef/html/index.html: restypedef.cpp restypedef.cfg
$(DOXYGEN)/bin/doxygen restypedef.cfg $(DOXYGEN)/bin/doxygen restypedef.cfg
......
...@@ -81,10 +81,6 @@ autolink/html/index.html: autolink.cpp autolink.cfg ...@@ -81,10 +81,6 @@ autolink/html/index.html: autolink.cpp autolink.cfg
tag/html/index.html: tag.cpp tag.cfg tag/html/index.html: tag.cpp tag.cfg
$(DOXYDIR)\doxygen tag.cfg $(DOXYDIR)\doxygen tag.cfg
cd tag\html
echo perl installdox -lexample.tag@../../example/html >runperl.bat
runperl.bat
cd ..\..
restypedef/html/index.html: restypedef.cpp restypedef.cfg restypedef/html/index.html: restypedef.cpp restypedef.cfg
$(DOXYDIR)\doxygen restypedef.cfg $(DOXYDIR)\doxygen restypedef.cfg
......
...@@ -5,7 +5,7 @@ GENERATE_MAN = NO ...@@ -5,7 +5,7 @@ GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
INPUT = tag.cpp INPUT = tag.cpp
TAGFILES = example.tag TAGFILES = example.tag=../../example/html
PERL_PATH = perl PERL_PATH = perl
QUIET = YES QUIET = YES
JAVADOC_AUTOBRIEF = YES JAVADOC_AUTOBRIEF = YES
Name: doxygen Name: doxygen
Version: 1.2.5-20010226 Version: 1.2.5-20010304
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 1 Release: 1
Source0: doxygen-%{version}.src.tar.gz Source0: doxygen-%{version}.src.tar.gz
......
...@@ -1170,7 +1170,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1170,7 +1170,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
<Body>[0-9]+ { <Body>[0-9]+ {
g_code->codify(yytext); g_code->codify(yytext);
} }
<Body>[0-9]+[xX][0-9A-F]+ { <Body>[0-9]+[xX][0-9A-Fa-f]+ {
g_code->codify(yytext); g_code->codify(yytext);
} }
<MemberCall2,FuncCall>{KEYWORD}/([^a-z_A-Z0-9]) { <MemberCall2,FuncCall>{KEYWORD}/([^a-z_A-Z0-9]) {
......
...@@ -1786,6 +1786,9 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1786,6 +1786,9 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
<DocScan>("http:"|"https:"|"ftp:"|"file:"){URLMASK} { outDoc->writeHtmlLink(yytext,yytext); } <DocScan>("http:"|"https:"|"ftp:"|"file:"){URLMASK} { outDoc->writeHtmlLink(yytext,yytext); }
<DocScan>[a-zA-Z_0-9\.\-]+"@"[0-9a-z_A-Z\.\-]+ { outDoc->writeMailLink(yytext); } <DocScan>[a-zA-Z_0-9\.\-]+"@"[0-9a-z_A-Z\.\-]+ { outDoc->writeMailLink(yytext); }
<DocScan>{FILESCHAR}*{FILEECHAR}+/".\\n" { // special exception that is otherwise matches by FILEMASK
generateRef(*outDoc,className,yytext,inSeeBlock);
}
<DocScan>{FILEMASK} { <DocScan>{FILEMASK} {
generateFileRef(*outDoc,yytext); generateFileRef(*outDoc,yytext);
} }
......
...@@ -424,8 +424,8 @@ static void buildGroupList(Entry *root) ...@@ -424,8 +424,8 @@ static void buildGroupList(Entry *root)
static void buildFileList(Entry *root) static void buildFileList(Entry *root)
{ {
if (((root->section==Entry::FILEDOC_SEC) || if (((root->section==Entry::FILEDOC_SEC) ||
((root->section & Entry::FILE_MASK) && Config::extractAllFlag)) && ((root->section & Entry::FILE_MASK) && Config::extractAllFlag)) &&
!root->name.isEmpty() !root->name.isEmpty() && !root->tagInfo // skip any file coming from tag files
) )
{ {
bool ambig; bool ambig;
...@@ -436,10 +436,10 @@ static void buildFileList(Entry *root) ...@@ -436,10 +436,10 @@ static void buildFileList(Entry *root)
(!root->brief.isEmpty() && !fd->briefDescription().isEmpty())) (!root->brief.isEmpty() && !fd->briefDescription().isEmpty()))
{ {
warn( warn(
root->fileName,root->startLine, root->fileName,root->startLine,
"Warning: file %s already documented. " "Warning: file %s already documented. "
"Skipping documentation.", "Skipping documentation.",
root->name.data() root->name.data()
); );
} }
else else
...@@ -469,15 +469,15 @@ static void buildFileList(Entry *root) ...@@ -469,15 +469,15 @@ static void buildFileList(Entry *root)
const char *fn = root->fileName.data(); const char *fn = root->fileName.data();
QCString text; QCString text;
text.sprintf("Warning: the name `%s' supplied as " text.sprintf("Warning: the name `%s' supplied as "
"the second argument in the \\file statement ", "the second argument in the \\file statement ",
root->name.data() root->name.data()
); );
if (ambig) // name is ambigious if (ambig) // name is ambigious
{ {
text+="matches the following input files:\n"; text+="matches the following input files:\n";
text+=showFileDefMatches(Doxygen::inputNameDict,root->name); text+=showFileDefMatches(Doxygen::inputNameDict,root->name);
text+="Please use a more specific name by " text+="Please use a more specific name by "
"including a (larger) part of the path!"; "including a (larger) part of the path!";
} }
else // name is not an input file else // name is not an input file
{ {
...@@ -811,7 +811,7 @@ static void buildNamespaceList(Entry *root) ...@@ -811,7 +811,7 @@ static void buildNamespaceList(Entry *root)
//printf("Found namespace %s in %s at line %d\n",root->name.data(), //printf("Found namespace %s in %s at line %d\n",root->name.data(),
// root->fileName.data(), root->startLine); // root->fileName.data(), root->startLine);
NamespaceDef *nd; NamespaceDef *nd;
if ((nd=Doxygen::namespaceDict[fullName])) if ((nd=Doxygen::namespaceDict[fullName])) // existing namespace
{ {
if (!root->doc.isEmpty() || !root->brief.isEmpty()) // block contains docs if (!root->doc.isEmpty() || !root->brief.isEmpty()) // block contains docs
{ {
...@@ -852,11 +852,7 @@ static void buildNamespaceList(Entry *root) ...@@ -852,11 +852,7 @@ static void buildNamespaceList(Entry *root)
addNamespaceToGroups(root,nd); addNamespaceToGroups(root,nd);
nd->setRefItems(root->todoId,root->testId,root->bugId); nd->setRefItems(root->todoId,root->testId,root->bugId);
} }
else /* if (!root->doc.isEmpty() || else // fresh namespace
!root->brief.isEmpty() ||
Config::extractAllFlag
)
*/
{ {
QCString tagName; QCString tagName;
if (root->tagInfo) if (root->tagInfo)
...@@ -1390,16 +1386,17 @@ static MemberDef *addVariableToFile( ...@@ -1390,16 +1386,17 @@ static MemberDef *addVariableToFile(
* \returns -1 if this is not a function pointer variable or * \returns -1 if this is not a function pointer variable or
* the index at which the brace of (...*name) was found. * the index at which the brace of (...*name) was found.
*/ */
static int findFunctionPtr(const QCString &type) static int findFunctionPtr(const QCString &type,int *pLength=0)
{ {
static const QRegExp re("([^)]*)"); static const QRegExp re("([^)]*");
int i=-1; int i=-1,l;
if (!type.isEmpty() && // return type is non-empty if (!type.isEmpty() && // return type is non-empty
(i=type.find(re,0))!=-1 && // contains a (* (i=re.match(type,0,&l))!=-1 && // contains a (*
type.find("operator")==-1 && // not an operator type.find("operator")==-1 && // not an operator
type.find(")(")==-1 // not a function pointer return type type.find(")(")==-1 // not a function pointer return type
) )
{ {
if (pLength) *pLength=l;
return i; return i;
} }
else else
...@@ -1414,18 +1411,13 @@ static int findFunctionPtr(const QCString &type) ...@@ -1414,18 +1411,13 @@ static int findFunctionPtr(const QCString &type)
void buildVarList(Entry *root) void buildVarList(Entry *root)
{ {
int i=-1;
if (!root->name.isEmpty() && if (!root->name.isEmpty() &&
(root->type.isEmpty() || compoundKeywordDict.find(root->type)==0) && (root->type.isEmpty() || compoundKeywordDict.find(root->type)==0) &&
( (
(root->section==Entry::VARIABLE_SEC // it's a variable (root->section==Entry::VARIABLE_SEC // it's a variable
) || ) ||
(root->section==Entry::FUNCTION_SEC && // or maybe a function pointer variable (root->section==Entry::FUNCTION_SEC && // or maybe a function pointer variable
(i=findFunctionPtr(root->type))!=-1 findFunctionPtr(root->type)!=-1
//!root->type.isEmpty() && // return type is non-empty
// root->type.find(re,0)!=-1 && // contains a (*
// /root->type.find("operator")==-1 && // not an operator
// root->type.find(")(")==-1 // not a function pointer return type
) )
) )
) // documented variable ) // documented variable
...@@ -1444,11 +1436,14 @@ void buildVarList(Entry *root) ...@@ -1444,11 +1436,14 @@ void buildVarList(Entry *root)
if (root->type.isEmpty() && root->name.find("operator")==-1 && if (root->type.isEmpty() && root->name.find("operator")==-1 &&
(root->name.find('*')!=-1 || root->name.find('&')!=-1)) (root->name.find('*')!=-1 || root->name.find('&')!=-1))
{ {
// recover from parse error caused by redundant braces // recover from parse error caused by redundant braces
// like in "int *(var[10]);", which is parsed as
// type="" name="int *" args="(var[10])"
root->type=root->name; root->type=root->name;
static const QRegExp reName("[a-z_A-Z][a-z_A-Z0-9]*"); static const QRegExp reName("[a-z_A-Z][a-z_A-Z0-9]*");
int l; int l;
i=root->args.isEmpty() ? -1 : reName.match(root->args,0,&l); int i=root->args.isEmpty() ? -1 : reName.match(root->args,0,&l);
root->name=root->args.mid(i,l); root->name=root->args.mid(i,l);
root->args=root->args.mid(i+l,root->args.find(')',i+l)-i-l); root->args=root->args.mid(i+l,root->args.find(')',i+l)-i-l);
//printf("new: type=`%s' name=`%s' args=`%s'\n", //printf("new: type=`%s' name=`%s' args=`%s'\n",
...@@ -1456,6 +1451,7 @@ void buildVarList(Entry *root) ...@@ -1456,6 +1451,7 @@ void buildVarList(Entry *root)
} }
else else
{ {
int i=findFunctionPtr(root->type);
if (i!=-1) // function pointer if (i!=-1) // function pointer
{ {
int ai = root->type.find('[',i); int ai = root->type.find('[',i);
...@@ -1464,7 +1460,7 @@ void buildVarList(Entry *root) ...@@ -1464,7 +1460,7 @@ void buildVarList(Entry *root)
root->args.prepend(root->type.right(root->type.length()-ai)); root->args.prepend(root->type.right(root->type.length()-ai));
root->type=root->type.left(ai); root->type=root->type.left(ai);
} }
else else if (root->type.find(')',i)!=-1) // function ptr, not variable like "int (*bla)[10]"
{ {
root->type=root->type.left(root->type.length()-1); root->type=root->type.left(root->type.length()-1);
root->args.prepend(")"); root->args.prepend(")");
...@@ -1473,12 +1469,6 @@ void buildVarList(Entry *root) ...@@ -1473,12 +1469,6 @@ void buildVarList(Entry *root)
} }
QCString scope,name=root->name.copy(); QCString scope,name=root->name.copy();
//int si;
//if ((si=name.findRev("::"))!=-1)
//{
// scope=name.left(si);
// name=name.right(name.length()-si-2);
//}
// find the scope of this variable // find the scope of this variable
Entry *p = root->parent; Entry *p = root->parent;
...@@ -3781,31 +3771,26 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl ...@@ -3781,31 +3771,26 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
static void findMemberDocumentation(Entry *root) static void findMemberDocumentation(Entry *root)
{ {
int i=-1,l; int i=-1,l;
//QRegExp re("([a-z_A-Z0-9: ]*\\*+[ \\*]*");
Debug::print(Debug::FindMembers,0, Debug::print(Debug::FindMembers,0,
"root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->memSpec=%d root->mGrpId=%d\n", "root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->memSpec=%d root->mGrpId=%d\n",
root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->memSpec,root->mGrpId root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->memSpec,root->mGrpId
); );
bool isFunc=TRUE; bool isFunc=TRUE;
if ( if ( // detect func variable/typedef to func ptr
findFunctionPtr(root->type)!=-1 // func variable/typedef to func ptr (i=findFunctionPtr(root->type,&l))!=-1
//!root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1
) )
{ {
// fix type and argument
root->args+=root->type.right(root->type.length()-i-l); root->args+=root->type.right(root->type.length()-i-l);
root->type=root->type.left(i+l); root->type=root->type.left(i+l);
isFunc=FALSE; isFunc=FALSE;
} }
//else if (root->name.find(re)!=-1 && root->name.find("operator")==-1) else if ((root->type.left(8)=="typedef " && root->args.find('(')!=-1))
// // func ptr entered with \fn, \var or \typedef // detect function types marked as functions
//{
// isFunc=FALSE;
//}
else if ((root->type.isEmpty() && root->name.left(8)=="typedef ")
|| root->args.find('(')==-1)
{ {
isFunc=FALSE; isFunc=FALSE;
} }
//printf("Member %s isFunc=%d\n",root->name.data(),isFunc); //printf("Member %s isFunc=%d\n",root->name.data(),isFunc);
if (root->section==Entry::MEMBERDOC_SEC) if (root->section==Entry::MEMBERDOC_SEC)
{ {
...@@ -3820,15 +3805,18 @@ static void findMemberDocumentation(Entry *root) ...@@ -3820,15 +3805,18 @@ static void findMemberDocumentation(Entry *root)
findMember(root,root->name,root->relates,TRUE,isFunc); findMember(root,root->name,root->relates,TRUE,isFunc);
} }
else if else if
((root->section==Entry::FUNCTION_SEC // function ((root->section==Entry::FUNCTION_SEC // function
|| ||
(root->section==Entry::VARIABLE_SEC && // variable (root->section==Entry::VARIABLE_SEC && // variable
!root->type.isEmpty() && /*root->type.left(8)!="typedef " &&*/ !root->type.isEmpty() && // with a type
compoundKeywordDict.find(root->type)==0 compoundKeywordDict.find(root->type)==0 // that is not a keyword
// (to skip forward declaration of class etc.)
) )
) && !root->stat && ) && !root->stat && // not static
(!root->doc.isEmpty() || !root->brief.isEmpty() || /*root->bodyLine!=-1 ||*/ (!root->doc.isEmpty() || // has detailed docs
(root->memSpec&Entry::Inline) || root->mGrpId!=-1 !root->brief.isEmpty() || // has brief docs
(root->memSpec&Entry::Inline) || // is inline
root->mGrpId!=-1 // is part of a group
) )
) )
{ {
......
...@@ -115,13 +115,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -115,13 +115,7 @@ class HtmlGenerator : public OutputGenerator
void writeAnchor(const char *,const char *name) void writeAnchor(const char *,const char *name)
{ t << "<a name=\"" << name <<"\"></a>"; } { t << "<a name=\"" << name <<"\"></a>"; }
void startCodeFragment() { t << "<div class=\"fragment\"><pre>"; } void startCodeFragment() { t << "<div class=\"fragment\"><pre>"; }
void endCodeFragment() { t << "</div></pre>"; } // <- I know this is void endCodeFragment() { t << "</pre></div>"; }
// ordered the wrong
// way, but it is
// the only way I know
// to prevent an extra
// blank line
// (with netscape)
void startPreFragment() { t << "<pre>"; } void startPreFragment() { t << "<pre>"; }
void endPreFragment() { t << "</pre>"; } void endPreFragment() { t << "</pre>"; }
void startCodeLine() { col=0; } void startCodeLine() { col=0; }
......
...@@ -1475,17 +1475,17 @@ QCString MemberDef::getScopeString() const ...@@ -1475,17 +1475,17 @@ QCString MemberDef::getScopeString() const
} }
Definition *MemberDef::getCompoundDef() const //Definition *MemberDef::getCompoundDef() const
{ //{
NamespaceDef *nd=getNamespaceDef(); // NamespaceDef *nd=getNamespaceDef();
ClassDef *cd=getClassDef(); // ClassDef *cd=getClassDef();
FileDef *fd=getFileDef(); // FileDef *fd=getFileDef();
GroupDef *gd=getGroupDef(); // GroupDef *gd=getGroupDef();
Definition *d = 0; // Definition *d = 0;
if (cd) d=cd; else if (nd) d=nd; else if (gd) d=gd; else d=fd; // if (cd) d=cd; else if (nd) d=nd; else if (gd) d=gd; else d=fd;
ASSERT(d!=0); // ASSERT(d!=0);
return d; // return d;
} //}
QCString MemberDef::anchor() const QCString MemberDef::anchor() const
{ {
......
...@@ -88,7 +88,7 @@ class MemberDef : public Definition ...@@ -88,7 +88,7 @@ class MemberDef : public Definition
GroupDef *getGroupDef() const { return group; } GroupDef *getGroupDef() const { return group; }
FileDef *getFileDef() const { return fileDef; } FileDef *getFileDef() const { return fileDef; }
NamespaceDef* getNamespaceDef() const { return nspace; } NamespaceDef* getNamespaceDef() const { return nspace; }
Definition *getCompoundDef() const; //Definition *getCompoundDef() const;
// direct kind info // direct kind info
Protection protection() const { return prot; } Protection protection() const { return prot; }
......
...@@ -1136,7 +1136,9 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1136,7 +1136,9 @@ TITLE [tT][iI][tT][lL][eE]
} }
<DefineEnd>. <DefineEnd>.
<FindMembers>[*&]+ { current->name += yytext ; } <FindMembers>[*&]+ { current->name += yytext ;
addType( current );
}
<FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" { <FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount(); lineCount();
if (current->bodyLine==-1) if (current->bodyLine==-1)
...@@ -1677,7 +1679,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1677,7 +1679,7 @@ TITLE [tT][iI][tT][lL][eE]
} }
<ReadBody>. { current->program += yytext ; } <ReadBody>. { current->program += yytext ; }
<FindMembers>"("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+ { <FindMembers>("("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+)+ {
current->bodyLine = yyLineNr; current->bodyLine = yyLineNr;
lineCount(); lineCount();
addType(current); addType(current);
...@@ -1769,13 +1771,17 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -1769,13 +1771,17 @@ TITLE [tT][iI][tT][lL][eE]
<FuncFuncType>. { <FuncFuncType>. {
current->type += *yytext; current->type += *yytext;
} }
<FindMembers>"(" { current->args = yytext; <FindMembers>"(" {
current->bodyLine = yyLineNr; if (!current->name.isEmpty())
currentArgumentContext = FuncQual; {
fullArgString=current->args.copy(); current->args = yytext;
copyArgString=&current->args; current->bodyLine = yyLineNr;
BEGIN( ReadFuncArgType ) ; currentArgumentContext = FuncQual;
//printf(">>> Read function arguments!\n"); fullArgString=current->args.copy();
copyArgString=&current->args;
BEGIN( ReadFuncArgType ) ;
//printf(">>> Read function arguments!\n");
}
} }
/* /*
<FindMembers>"("{BN}*("void"{BN}*)?")" { <FindMembers>"("{BN}*("void"{BN}*)?")" {
......
...@@ -857,6 +857,19 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members) ...@@ -857,6 +857,19 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members)
} }
} }
static QString stripPath(const QString &s)
{
int i=s.findRev('/');
if (i!=-1)
{
return s.right(s.length()-i-1);
}
else
{
return s;
}
}
void TagFileParser::buildLists(Entry *root) void TagFileParser::buildLists(Entry *root)
{ {
// build class list // build class list
...@@ -902,7 +915,7 @@ void TagFileParser::buildLists(Entry *root) ...@@ -902,7 +915,7 @@ void TagFileParser::buildLists(Entry *root)
ti->fileName = tfi->filename; ti->fileName = tfi->filename;
fe->tagInfo = ti; fe->tagInfo = ti;
QString fullName = m_tagName+":"+tfi->path+tfi->name; QString fullName = m_tagName+":"+tfi->path+stripPath(tfi->name);
fe->fileName = fullName; fe->fileName = fullName;
FileDef *fd = new FileDef(m_tagName+":"+tfi->path,tfi->name,m_tagName); FileDef *fd = new FileDef(m_tagName+":"+tfi->path,tfi->name,m_tagName);
FileName *mn; FileName *mn;
......
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