Commit ad65c6e2 authored by dimitri's avatar dimitri

Release-1.4.3-20050530

parent 44904635
# Doxyfile 1.3.7 # Doxyfile 1.4.3
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Project related configuration options # Project related configuration options
...@@ -23,6 +23,7 @@ MULTILINE_CPP_IS_BRIEF = NO ...@@ -23,6 +23,7 @@ MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO DETAILS_AT_TOP = NO
INHERIT_DOCS = YES INHERIT_DOCS = YES
DISTRIBUTE_GROUP_DOC = NO DISTRIBUTE_GROUP_DOC = NO
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8 TAB_SIZE = 8
ALIASES = ALIASES =
OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_FOR_C = NO
...@@ -55,6 +56,8 @@ GENERATE_DEPRECATEDLIST= YES ...@@ -55,6 +56,8 @@ GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS = ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30 MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES SHOW_USED_FILES = YES
SHOW_DIRECTORIES = YES
FILE_VERSION_FILTER =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to warning and progress messages # configuration options related to warning and progress messages
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -62,6 +65,7 @@ QUIET = NO ...@@ -62,6 +65,7 @@ QUIET = NO
WARNINGS = YES WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text" WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE = WARN_LOGFILE =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -87,7 +91,8 @@ EXCLUDE = src/code.cpp \ ...@@ -87,7 +91,8 @@ EXCLUDE = src/code.cpp \
src/suffixtree.h \ src/suffixtree.h \
src/searchindex.cpp \ src/searchindex.cpp \
src/searchindex.h \ src/searchindex.h \
src/commentcnv.cpp src/commentcnv.cpp \
src/commentscan.cpp
EXCLUDE_SYMLINKS = NO EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS = EXCLUDE_PATTERNS =
EXAMPLE_PATH = EXAMPLE_PATH =
...@@ -95,6 +100,7 @@ EXAMPLE_PATTERNS = ...@@ -95,6 +100,7 @@ EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO EXAMPLE_RECURSIVE = NO
IMAGE_PATH = IMAGE_PATH =
INPUT_FILTER = INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO FILTER_SOURCE_FILES = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to source browsing # configuration options related to source browsing
...@@ -104,6 +110,7 @@ INLINE_SOURCES = NO ...@@ -104,6 +110,7 @@ INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES REFERENCES_RELATION = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES VERBATIM_HEADERS = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the alphabetical class index # configuration options related to the alphabetical class index
...@@ -209,18 +216,22 @@ HIDE_UNDOC_RELATIONS = YES ...@@ -209,18 +216,22 @@ HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES HAVE_DOT = YES
CLASS_GRAPH = YES CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO UML_LOOK = NO
TEMPLATE_RELATIONS = YES TEMPLATE_RELATIONS = YES
INCLUDE_GRAPH = YES INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = NO INCLUDED_BY_GRAPH = NO
CALL_GRAPH = NO CALL_GRAPH = NO
GRAPHICAL_HIERARCHY = YES GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png DOT_IMAGE_FORMAT = png
DOT_PATH = DOT_PATH =
DOTFILE_DIRS = DOTFILE_DIRS =
MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_WIDTH = 1024
MAX_DOT_GRAPH_HEIGHT = 1024 MAX_DOT_GRAPH_HEIGHT = 1024
MAX_DOT_GRAPH_DEPTH = 0 MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES GENERATE_LEGEND = YES
DOT_CLEANUP = YES DOT_CLEANUP = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
......
DOXYGEN Version 1.4.3 DOXYGEN Version 1.4.3-20050530
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 (16 May 2005) Dimitri van Heesch (30 May 2005)
...@@ -53,9 +53,9 @@ install: doxywizard_install ...@@ -53,9 +53,9 @@ install: doxywizard_install
$(INSTTOOL) -m 755 bin/doxygen $(INSTALL)/bin $(INSTTOOL) -m 755 bin/doxygen $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxytag $(INSTALL)/bin $(INSTTOOL) -m 755 bin/doxytag $(INSTALL)/bin
$(INSTTOOL) -d $(INSTALL)/$(MAN1DIR) $(INSTTOOL) -d $(INSTALL)/$(MAN1DIR)
cat doc/doxygen.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxygen.1 ; \ cat doc/doxygen.1 | sed -e "s/DATE/$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxygen.1 ; \
cat doc/doxytag.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxytag.1 ; \ cat doc/doxytag.1 | sed -e "s/DATE/$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxytag.1 ; \
cat doc/doxywizard.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxywizard.1 ; cat doc/doxywizard.1 | sed -e "s/DATE/$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxywizard.1 ;
install_docs: install_docs:
$(INSTTOOL) -d $(DOCDIR) $(INSTTOOL) -d $(DOCDIR)
......
DOXYGEN Version 1.4.3 DOXYGEN Version 1.4.3_20050530
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) (16 May 2005) Dimitri van Heesch (dimitri@stack.nl) (30 May 2005)
1.4.3 1.4.3-20050530
...@@ -1037,13 +1037,13 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1037,13 +1037,13 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<!-- doxytag: class=<"); ol.writeString("<!-- doxytag: class=\"");
ol.docify(name()); ol.docify(name());
ol.writeString("> -->"); ol.writeString("\" -->");
if (m_inherits->count()>0) if (m_inherits->count()>0)
{ {
BaseClassListIterator bli(*m_inherits); BaseClassListIterator bli(*m_inherits);
ol.writeString("<!-- doxytag: inherits=<"); ol.writeString("<!-- doxytag: inherits=\"");
BaseClassDef *bcd=0; BaseClassDef *bcd=0;
bool first=TRUE; bool first=TRUE;
for (bli.toFirst();(bcd=bli.current());++bli) for (bli.toFirst();(bcd=bli.current());++bli)
...@@ -1052,7 +1052,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1052,7 +1052,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.docify(bcd->classDef->name()); ol.docify(bcd->classDef->name());
first=FALSE; first=FALSE;
} }
ol.writeString("> -->"); ol.writeString("\" -->");
} }
ol.popGeneratorState(); ol.popGeneratorState();
} }
...@@ -2168,16 +2168,11 @@ void ClassDef::mergeMembers() ...@@ -2168,16 +2168,11 @@ void ClassDef::mergeMembers()
if (srcCd==dstCd || dstCd->isBaseClass(srcCd,TRUE)) if (srcCd==dstCd || dstCd->isBaseClass(srcCd,TRUE))
// member is in the same or a base class // member is in the same or a base class
{ {
#ifdef NEWMATCH
found=matchArguments2( found=matchArguments2(
srcMd->getOuterScope(),srcMd->getFileDef(),srcMd->argumentList(), srcMd->getOuterScope(),srcMd->getFileDef(),srcMd->argumentList(),
dstMd->getOuterScope(),dstMd->getFileDef(),dstMd->argumentList(), dstMd->getOuterScope(),dstMd->getFileDef(),dstMd->argumentList(),
TRUE TRUE
); );
#else
found=matchArguments(srcMd->argumentList(),
dstMd->argumentList());
#endif
//printf(" Yes, matching (%s<->%s): %d\n", //printf(" Yes, matching (%s<->%s): %d\n",
// argListToString(srcMd->argumentList()).data(), // argListToString(srcMd->argumentList()).data(),
// argListToString(dstMd->argumentList()).data(), // argListToString(dstMd->argumentList()).data(),
......
...@@ -327,6 +327,7 @@ static Protection protection; ...@@ -327,6 +327,7 @@ static Protection protection;
static bool xrefAppendFlag; static bool xrefAppendFlag;
static bool inGroupParamFound; static bool inGroupParamFound;
static int braceCount;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -855,14 +856,11 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -855,14 +856,11 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
addOutput(yytext[2]); addOutput(yytext[2]);
} }
<Comment>(\n|\\_linebr)({B}*(\n|\\_linebr))+ { // at least one blank line (or blank line command) <Comment>(\n|\\_linebr)({B}*(\n|\\_linebr))+ { // at least one blank line (or blank line command)
if (inContext==OutputBrief) if (inContext!=OutputBrief)
{
setOutput(OutputDoc);
}
else
{ {
addOutput(yytext); addOutput(yytext);
} }
setOutput(OutputDoc);
lineCount(); lineCount();
} }
<Comment>"." { // potential end of a JavaDoc style comment <Comment>"." { // potential end of a JavaDoc style comment
...@@ -1557,17 +1555,29 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) ...@@ -1557,17 +1555,29 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
/* ----- handle argument of fn command ------- */ /* ----- handle argument of fn command ------- */
<FnParam>{DOCNL} { // end of argument <FnParam>{DOCNL} { // end of argument
if (braceCount==0)
{
if (*yytext=='\n') yyLineNr++; if (*yytext=='\n') yyLineNr++;
addOutput('\n'); addOutput('\n');
//printf("functionProto=%s\n",functionProto.data());
langParser->parsePrototype(functionProto); langParser->parsePrototype(functionProto);
BEGIN( Comment ); BEGIN( Comment );
} }
}
<FnParam>{LC} { // line continuation <FnParam>{LC} { // line continuation
yyLineNr++; yyLineNr++;
functionProto+=' '; functionProto+=' ';
} }
<FnParam>[^@\\\n]+ { // non-special characters <FnParam>[^@\\\n()]+ { // non-special characters
functionProto+=yytext;
}
<FnParam>"(" {
functionProto+=yytext;
braceCount++;
}
<FnParam>")" {
functionProto+=yytext; functionProto+=yytext;
braceCount--;
} }
<FnParam>. { // add other stuff <FnParam>. { // add other stuff
functionProto+=*yytext; functionProto+=*yytext;
...@@ -1655,6 +1665,7 @@ static void handleFn(const QCString &) ...@@ -1655,6 +1665,7 @@ static void handleFn(const QCString &)
{ {
makeStructuralIndicator(Entry::MEMBERDOC_SEC); makeStructuralIndicator(Entry::MEMBERDOC_SEC);
functionProto.resize(0); functionProto.resize(0);
braceCount=0;
BEGIN(FnParam); BEGIN(FnParam);
} }
......
...@@ -253,7 +253,7 @@ static bool readCodeFragment(const char *fileName, ...@@ -253,7 +253,7 @@ static bool readCodeFragment(const char *fileName,
{ {
//printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine); //printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine);
if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name
QCString cmd="\"" + getFileFilter(fileName)+"\" \""+fileName+"\""; QCString cmd=getFileFilter(fileName)+" \""+fileName+"\"";
FILE *f = Config_getBool("FILTER_SOURCE_FILES") ? popen(cmd,"r") : fopen(fileName,"r"); FILE *f = Config_getBool("FILTER_SOURCE_FILES") ? popen(cmd,"r") : fopen(fileName,"r");
bool found=FALSE; bool found=FALSE;
if (f) if (f)
......
...@@ -555,7 +555,7 @@ static bool findDocsForMemberOrCompound(const char *commandName, ...@@ -555,7 +555,7 @@ static bool findDocsForMemberOrCompound(const char *commandName,
int funcStart=cmdArg.find('('); int funcStart=cmdArg.find('(');
if (funcStart==-1) funcStart=l; if (funcStart==-1) funcStart=l;
QString name=cmdArg.left(funcStart); QString name=removeRedundantWhiteSpace(cmdArg.left(funcStart).latin1());
QString args=cmdArg.right(l-funcStart); QString args=cmdArg.right(l-funcStart);
// try if the link is to a member // try if the link is to a member
...@@ -2684,6 +2684,18 @@ int DocHtmlCell::parse() ...@@ -2684,6 +2684,18 @@ int DocHtmlCell::parse()
if (isFirst) { par->markFirst(); isFirst=FALSE; } if (isFirst) { par->markFirst(); isFirst=FALSE; }
m_children.append(par); m_children.append(par);
retval=par->parse(); retval=par->parse();
if (retval==TK_HTMLTAG)
{
int tagId=HtmlTagMapper::map(g_token->name);
if (tagId==HTML_TD && g_token->endTag) // found </dt> tag
{
retval=TK_NEWPARA; // ignore the tag
}
else if (tagId==HTML_TH && g_token->endTag) // found </th> tag
{
retval=TK_NEWPARA; // ignore the tag
}
}
} }
while (retval==TK_NEWPARA); while (retval==TK_NEWPARA);
if (par) par->markLast(); if (par) par->markLast();
......
...@@ -297,7 +297,7 @@ FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+] ...@@ -297,7 +297,7 @@ FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+]
FILEECHAR [a-z_A-Z0-9\-\+] FILEECHAR [a-z_A-Z0-9\-\+]
HFILEMASK ("."{FILESCHAR}*{FILEECHAR}+)* HFILEMASK ("."{FILESCHAR}*{FILEECHAR}+)*
FILEMASK ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|{HFILEMASK} FILEMASK ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|{HFILEMASK}
LINKMASK [^ \t\n\r\\@<&${}]+("("[^\n)]*")")?({BLANK}*("const"|"volatile"))? LINKMASK [^ \t\n\r\\@<&${}]+("("[^\n)]*")")?({BLANK}*("const"|"volatile"){BLANK}+)?
SPCMD1 {CMD}[a-z_A-Z0-9]+ SPCMD1 {CMD}[a-z_A-Z0-9]+
SPCMD2 {CMD}[\\@<>&$#%~] SPCMD2 {CMD}[\\@<>&$#%~]
SPCMD3 {CMD}form#[0-9]+ SPCMD3 {CMD}form#[0-9]+
...@@ -316,7 +316,7 @@ OPNEW {BLANK}+"new"({BLANK}*"[]")? ...@@ -316,7 +316,7 @@ OPNEW {BLANK}+"new"({BLANK}*"[]")?
OPDEL {BLANK}+"delete"({BLANK}*"[]")? OPDEL {BLANK}+"delete"({BLANK}*"[]")?
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()" OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
OPCAST {BLANK}+[^(\r\n.,]+ OPCAST {BLANK}+[^(\r\n.,]+
OPMASK ({BLANK}*{OPNORM}{FUNCARG})|({OPCAST}{FUNCARG}) OPMASK ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG})
LNKWORD1 ("::"|"#")?{SCOPEMASK} LNKWORD1 ("::"|"#")?{SCOPEMASK}
CVSPEC {BLANK}*("const"|"volatile") CVSPEC {BLANK}*("const"|"volatile")
LNKWORD2 {SCOPEPRE}*"operator"{OPMASK} LNKWORD2 {SCOPEPRE}*"operator"{OPMASK}
......
...@@ -566,6 +566,7 @@ static QCString convertLabel(const QCString &l) ...@@ -566,6 +566,7 @@ static QCString convertLabel(const QCString &l)
switch(c) switch(c)
{ {
case '\\': result+="\\\\"; break; case '\\': result+="\\\\"; break;
case '\n': result+="\\n"; break;
case '<': result+="\\<"; break; case '<': result+="\\<"; break;
case '>': result+="\\>"; break; case '>': result+="\\>"; break;
case '|': result+="\\|"; break; case '|': result+="\\|"; break;
...@@ -1126,14 +1127,6 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) ...@@ -1126,14 +1127,6 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
return; return;
} }
//QCString dotArgs(maxCmdLine);
//dotArgs.sprintf("\"%s\" -T%s -o \"%s\" -Timap -o \"%s\"",
// dotName.data(), imgExt.data(), imgName.data(), mapName.data());
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Problems running dot. Check your installation!\n");
// return;
//}
checkDotResult(imgName); checkDotResult(imgName);
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(dotName); if (Config_getBool("DOT_CLEANUP")) thisDir.remove(dotName);
} }
...@@ -1446,7 +1439,7 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base) ...@@ -1446,7 +1439,7 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base)
} }
else else
{ {
label+=QCString("\\n")+s; label+=QCString("\n")+s;
} }
} }
addClass(ucd->classDef,n,EdgeInfo::Purple,label,distance,0, addClass(ucd->classDef,n,EdgeInfo::Purple,label,distance,0,
...@@ -1689,15 +1682,6 @@ static bool findMaximalDotGraph(DotNode *root, ...@@ -1689,15 +1682,6 @@ static bool findMaximalDotGraph(DotNode *root,
return FALSE; return FALSE;
} }
//QCString dotArgs(maxCmdLine);
//// create annotated dot file
//dotArgs.sprintf("-Tdot \"%s.dot\" -o \"%s_tmp.dot\"",baseName.data(),baseName.data());
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
// {
// err("Problems running dot. Check your installation!\n");
// return FALSE;
//}
// extract bounding box from the result // extract bounding box from the result
readBoundingBoxDot(baseName+"_tmp.dot",&width,&height); readBoundingBoxDot(baseName+"_tmp.dot",&width,&height);
width = width *96/72; // 96 pixels/inch, 72 points/inch width = width *96/72; // 96 pixels/inch, 72 points/inch
...@@ -1842,20 +1826,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out, ...@@ -1842,20 +1826,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
return baseName; return baseName;
} }
//dotArgs.sprintf("\"%s.dot\" -T%s -o \"%s\"",
// baseName.data(),imgExt.data(),imgName.data());
//if (generateImageMap)
//{
// // run dot also to create an image map
// dotArgs+=QCString(maxCmdLine).sprintf(" -Timap -o \"%s.map\"",
// baseName.data());
//}
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Error: Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return baseName;
//}
checkDotResult(imgName); checkDotResult(imgName);
} }
else if (format==EPS) // run dot to create a .eps image else if (format==EPS) // run dot to create a .eps image
...@@ -1868,14 +1838,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out, ...@@ -1868,14 +1838,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
return baseName; return baseName;
} }
//QCString dotArgs(maxCmdLine);
//dotArgs.sprintf("-Tps \"%s.dot\" -o \"%s.eps\"",baseName.data(),baseName.data());
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Error: Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return baseName;
//}
if (Config_getBool("USE_PDFLATEX")) if (Config_getBool("USE_PDFLATEX"))
{ {
QCString epstopdfArgs(maxCmdLine); QCString epstopdfArgs(maxCmdLine);
...@@ -2122,20 +2084,6 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -2122,20 +2084,6 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
//dotArgs.sprintf("\"%s.dot\" -T%s -o \"%s\"",
// baseName.data(),imgExt.data(),imgName.data());
//if (generateImageMap)
//{
// // run dot also to create an image map
// dotArgs+=QCString(maxCmdLine).sprintf(" -Timap -o \"%s.map\"",
// baseName.data());
//}
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return baseName;
//}
checkDotResult(imgName); checkDotResult(imgName);
} }
else if (format==EPS) else if (format==EPS)
...@@ -2148,15 +2096,6 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -2148,15 +2096,6 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
//QCString dotArgs(maxCmdLine);
//dotArgs.sprintf("-Tps \"%s.dot\" -o \"%s.eps\"",
// baseName.data(),baseName.data());
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return baseName;
//}
if (Config_getBool("USE_PDFLATEX")) if (Config_getBool("USE_PDFLATEX"))
{ {
QCString epstopdfArgs(maxCmdLine); QCString epstopdfArgs(maxCmdLine);
...@@ -2323,20 +2262,6 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format, ...@@ -2323,20 +2262,6 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
//dotArgs.sprintf("\"%s.dot\" -T%s -o \"%s\"",
// baseName.data(),imgExt.data(),imgName.data());
//if (generateImageMap)
//{
// // run dot also to create an image map
// dotArgs+=QCString(maxCmdLine).sprintf(" -Timap -o \"%s.map\"",
// baseName.data());
//}
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return baseName;
//}
checkDotResult(imgName); checkDotResult(imgName);
} }
else if (format==EPS) else if (format==EPS)
...@@ -2349,15 +2274,6 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format, ...@@ -2349,15 +2274,6 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
//QCString dotArgs(maxCmdLine);
//dotArgs.sprintf("-Tps \"%s.dot\" -o \"%s.eps\"",
// baseName.data(),baseName.data());
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return baseName;
//}
if (Config_getBool("USE_PDFLATEX")) if (Config_getBool("USE_PDFLATEX"))
{ {
QCString epstopdfArgs(maxCmdLine); QCString epstopdfArgs(maxCmdLine);
...@@ -2530,20 +2446,6 @@ QCString DotDirDeps::writeGraph(QTextStream &out, ...@@ -2530,20 +2446,6 @@ QCString DotDirDeps::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
//dotArgs.sprintf("\"%s.dot\" -T%s -o \"%s\"",
// baseName.data(),imgExt.data(),imgName.data());
//if (generateImageMap)
//{
// // run dot also to create an image map
// dotArgs+=QCString(maxCmdLine).sprintf(" -Timap -o \"%s.map\"",
// baseName.data());
//}
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return baseName;
//}
checkDotResult(imgName); checkDotResult(imgName);
} }
else if (format==EPS) else if (format==EPS)
...@@ -2556,15 +2458,6 @@ QCString DotDirDeps::writeGraph(QTextStream &out, ...@@ -2556,15 +2458,6 @@ QCString DotDirDeps::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
//QCString dotArgs(maxCmdLine);
//dotArgs.sprintf("-Tps \"%s.dot\" -o \"%s.eps\"",
// baseName.data(),baseName.data());
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return baseName;
//}
if (Config_getBool("USE_PDFLATEX")) if (Config_getBool("USE_PDFLATEX"))
{ {
QCString epstopdfArgs(maxCmdLine); QCString epstopdfArgs(maxCmdLine);
...@@ -2690,14 +2583,6 @@ void generateGraphLegend(const char *path) ...@@ -2690,14 +2583,6 @@ void generateGraphLegend(const char *path)
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return; return;
} }
//QCString dotArgs(maxCmdLine);
//dotArgs.sprintf("-T%s graph_legend.dot -o %s",imgExt.data(),imgName.data());
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return;
//}
checkDotResult(imgName); checkDotResult(imgName);
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
} }
...@@ -2743,24 +2628,6 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir, ...@@ -2743,24 +2628,6 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return; return;
} }
//QCString dotArgs(maxCmdLine);
//if (format==BITMAP)
//{
// dotArgs.sprintf("-T%s \"%s\" -o \"%s\"",
// imgExt.data(),
// inFile,
// imgName.data());
//}
//else // format==EPS
//{
// dotArgs.sprintf("-Tps \"%s\" -o \"%s.eps\"",inFile,outFile);
//}
//QCString dotExe = Config_getString("DOT_PATH")+"dot";
////printf("Running: %s %s\n",dotExe.data(),dotArgs.data());
//if (iSystem(dotExe,dotArgs)!=0)
//{
// err("Problems running dot. Check your installation!\n");
//}
// Added by Nils Strom // Added by Nils Strom
if ( (format==EPS) && (Config_getBool("USE_PDFLATEX")) ) if ( (format==EPS) && (Config_getBool("USE_PDFLATEX")) )
{ {
...@@ -2805,16 +2672,6 @@ QString getDotImageMapFromFile(const QString& inFile, const QString& outDir, ...@@ -2805,16 +2672,6 @@ QString getDotImageMapFromFile(const QString& inFile, const QString& outDir,
return ""; return "";
} }
//QCString dotArgs(maxCmdLine);
//dotArgs.sprintf("-Timap \"%s\" -o \"%s\"", inFile.data(), outFile.data());
//QCString dotExe = Config_getString("DOT_PATH") + "dot";
////printf("Running: %s %s\n",dotExe.data(),dotArgs.data());
//if (iSystem(dotExe,dotArgs)!=0)
//{
// err("Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return "";
//}
QString result; QString result;
QTextOStream tmpout(&result); QTextOStream tmpout(&result);
convertMapFile(tmpout, outFile, relPath ,TRUE); convertMapFile(tmpout, outFile, relPath ,TRUE);
...@@ -3091,21 +2948,6 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo ...@@ -3091,21 +2948,6 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
//dotArgs.sprintf("\"%s.dot\" -T%s -o \"%s\"",
// baseName.data(), imgExt.data(), imgName.data());
//
//if (writeImageMap)
//{
// // run dot also to create an image map
// dotArgs+=" -Timap -o \""+mapName+"\"";
//}
//
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Error: Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return baseName;
//}
if (writeImageMap) if (writeImageMap)
{ {
...@@ -3128,15 +2970,7 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo ...@@ -3128,15 +2970,7 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
//QCString dotArgs(maxCmdLine);
//dotArgs.sprintf("-Tps \"%s.dot\" -o \"%s.eps\"",
// baseName.data(),baseName.data());
//if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
//{
// err("Error: Problems running dot. Check your installation!\n");
// QDir::setCurrent(oldDir);
// return baseName;
//}
if (Config_getBool("USE_PDFLATEX")) if (Config_getBool("USE_PDFLATEX"))
{ {
QCString epstopdfArgs(maxCmdLine); QCString epstopdfArgs(maxCmdLine);
......
...@@ -900,7 +900,7 @@ Definition *buildScopeFromQualifiedName(const QCString name,int level) ...@@ -900,7 +900,7 @@ Definition *buildScopeFromQualifiedName(const QCString name,int level)
// introduce bogus namespace // introduce bogus namespace
//printf("adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data()); //printf("adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data());
nd=new NamespaceDef( nd=new NamespaceDef(
"<generated>",1,fullScope); "[generated]",1,fullScope);
// add namespace to the list // add namespace to the list
Doxygen::namespaceSDict.inSort(fullScope,nd); Doxygen::namespaceSDict.inSort(fullScope,nd);
...@@ -1950,7 +1950,6 @@ static void buildVarList(Entry *root) ...@@ -1950,7 +1950,6 @@ static void buildVarList(Entry *root)
else else
mtype=MemberDef::Variable; mtype=MemberDef::Variable;
QCString classScope=stripAnonymousNamespaceScope(scope); QCString classScope=stripAnonymousNamespaceScope(scope);
classScope=stripTemplateSpecifiersFromScope(classScope,FALSE); classScope=stripTemplateSpecifiersFromScope(classScope,FALSE);
QCString annScopePrefix=scope.left(scope.length()-classScope.length()); QCString annScopePrefix=scope.left(scope.length()-classScope.length());
...@@ -2315,23 +2314,14 @@ static void buildFunctionList(Entry *root) ...@@ -2315,23 +2314,14 @@ static void buildFunctionList(Entry *root)
QCString nsName,rnsName; QCString nsName,rnsName;
if (mnd) nsName = mnd->name().copy(); if (mnd) nsName = mnd->name().copy();
if (rnd) rnsName = rnd->name().copy(); if (rnd) rnsName = rnd->name().copy();
#ifdef NEWMATCH
bool ambig; bool ambig;
FileDef *rfd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig); FileDef *rfd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
#else
NamespaceSDict *unl = mfd ? mfd->getUsedNamespaces() : 0;
SDict<Definition> *ucl = mfd ? mfd->getUsedClasses() : 0;
#endif
//printf("matching arguments for %s%s %s%s\n", //printf("matching arguments for %s%s %s%s\n",
// md->name().data(),md->argsString(),rname.data(),argListToString(root->argList).data()); // md->name().data(),md->argsString(),rname.data(),argListToString(root->argList).data());
if ( if (
#ifdef NEWMATCH
matchArguments2(md->getOuterScope(),mfd,md->argumentList(), matchArguments2(md->getOuterScope(),mfd,md->argumentList(),
rnd ? rnd : Doxygen::globalScope,rfd,root->argList, rnd ? rnd : Doxygen::globalScope,rfd,root->argList,
FALSE) FALSE)
#else
matchArguments(md->argumentList(),root->argList,0,nsName,FALSE,unl,ucl)
#endif
) )
{ {
GroupDef *gd=0; GroupDef *gd=0;
...@@ -2604,23 +2594,12 @@ static void findFriends() ...@@ -2604,23 +2594,12 @@ static void findFriends()
//printf("Checking for matching arguments //printf("Checking for matching arguments
// mmd->isRelated()=%d mmd->isFriend()=%d mmd->isFunction()=%d\n", // mmd->isRelated()=%d mmd->isFriend()=%d mmd->isFunction()=%d\n",
// mmd->isRelated(),mmd->isFriend(),mmd->isFunction()); // mmd->isRelated(),mmd->isFriend(),mmd->isFunction());
#ifndef NEWMATCH
NamespaceDef *nd=mmd->getNamespaceDef();
#endif
if ((mmd->isFriend() || (mmd->isRelated() && mmd->isFunction())) && if ((mmd->isFriend() || (mmd->isRelated() && mmd->isFunction())) &&
#ifdef NEWMATCH
matchArguments2(mmd->getOuterScope(), mmd->getFileDef(), mmd->argumentList(), matchArguments2(mmd->getOuterScope(), mmd->getFileDef(), mmd->argumentList(),
fmd->getOuterScope(), fmd->getFileDef(), fmd->argumentList(), fmd->getOuterScope(), fmd->getFileDef(), fmd->argumentList(),
TRUE TRUE
) )
#else
matchArguments(mmd->argumentList(),
fmd->argumentList(),
mmd->getClassDef()->name(),
nd ? nd->name().data() : 0
)
#endif
) // if the member is related and the arguments match then the ) // if the member is related and the arguments match then the
// function is actually a friend. // function is actually a friend.
{ {
...@@ -2733,14 +2712,10 @@ static void transferFunctionDocumentation() ...@@ -2733,14 +2712,10 @@ static void transferFunctionDocumentation()
// mdef, mdef ? mdef->name().data() : "", // mdef, mdef ? mdef->name().data() : "",
// mdec, mdec ? mdec->name().data() : ""); // mdec, mdec ? mdec->name().data() : "");
if (mdef && mdec && if (mdef && mdec &&
#ifdef NEWMATCH
matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdef->argumentList(), matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdef->argumentList(),
mdec->getOuterScope(),mdec->getFileDef(),mdec->argumentList(), mdec->getOuterScope(),mdec->getFileDef(),mdec->argumentList(),
TRUE TRUE
) )
#else
matchArguments(mdef->argumentList(),mdec->argumentList())
#endif
) /* match found */ ) /* match found */
{ {
//printf("Found member %s: definition in %s (doc=`%s') and declaration in %s (doc=`%s')\n", //printf("Found member %s: definition in %s (doc=`%s') and declaration in %s (doc=`%s')\n",
...@@ -2875,14 +2850,10 @@ static void transferFunctionReferences() ...@@ -2875,14 +2850,10 @@ static void transferFunctionReferences()
mdef=md; mdef=md;
} }
if (mdef && mdec && if (mdef && mdec &&
#ifdef NEWMATCH
matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdef->argumentList(), matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdef->argumentList(),
mdec->getOuterScope(),mdec->getFileDef(),mdec->argumentList(), mdec->getOuterScope(),mdec->getFileDef(),mdec->argumentList(),
TRUE TRUE
) )
#else
matchArguments(mdef->argumentList(),mdec->argumentList())
#endif
) /* match found */ ) /* match found */
{ {
MemberSDict *defDict = mdef->getReferencesMembers(); MemberSDict *defDict = mdef->getReferencesMembers();
...@@ -2968,14 +2939,10 @@ static void transferRelatedFunctionDocumentation() ...@@ -2968,14 +2939,10 @@ static void transferRelatedFunctionDocumentation()
{ {
//printf(" Member found: related=`%d'\n",rmd->isRelated()); //printf(" Member found: related=`%d'\n",rmd->isRelated());
if (rmd->isRelated() && // related function if (rmd->isRelated() && // related function
#ifdef NEWMATCH
matchArguments2( md->getOuterScope(), md->getFileDef(), md->argumentList(), matchArguments2( md->getOuterScope(), md->getFileDef(), md->argumentList(),
rmd->getOuterScope(),rmd->getFileDef(),rmd->argumentList(), rmd->getOuterScope(),rmd->getFileDef(),rmd->argumentList(),
TRUE TRUE
) )
#else
matchArguments(md->argumentList(),rmd->argumentList()) // match argument lists
#endif
) )
{ {
//printf(" Found related member `%s'\n",md->name().data()); //printf(" Found related member `%s'\n",md->name().data());
...@@ -4015,9 +3982,6 @@ static void addMemberDocs(Entry *root, ...@@ -4015,9 +3982,6 @@ static void addMemberDocs(Entry *root,
ArgumentList *al, ArgumentList *al,
bool over_load, bool over_load,
NamespaceSDict * NamespaceSDict *
#ifndef NEWMATCH
nl
#endif
) )
{ {
//printf("addMemberDocs: `%s'::`%s' `%s' funcDecl=`%s' memSpec=%d\n", //printf("addMemberDocs: `%s'::`%s' `%s' funcDecl=`%s' memSpec=%d\n",
...@@ -4040,10 +4004,8 @@ static void addMemberDocs(Entry *root, ...@@ -4040,10 +4004,8 @@ static void addMemberDocs(Entry *root,
bool ambig; bool ambig;
FileDef *rfd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig); FileDef *rfd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
#ifdef NEWMATCH
// TODO determine scope based on root not md // TODO determine scope based on root not md
Definition *rscope = md->getOuterScope(); Definition *rscope = md->getOuterScope();
#endif
if (al) if (al)
{ {
...@@ -4053,19 +4015,10 @@ static void addMemberDocs(Entry *root, ...@@ -4053,19 +4015,10 @@ static void addMemberDocs(Entry *root,
else else
{ {
if ( if (
#ifdef NEWMATCH
matchArguments2( md->getOuterScope(), md->getFileDef(), md->argumentList(), matchArguments2( md->getOuterScope(), md->getFileDef(), md->argumentList(),
rscope,rfd,root->argList, rscope,rfd,root->argList,
TRUE TRUE
) )
#else
matchArguments(md->argumentList(),root->argList,
cd ? cd->name().data() : 0,
nd ? nd->name().data() : 0,
TRUE,
nl
)
#endif
) )
{ {
//printf("merging arguments (2)\n"); //printf("merging arguments (2)\n");
...@@ -4233,7 +4186,7 @@ static bool findGlobalMember(Entry *root, ...@@ -4233,7 +4186,7 @@ static bool findGlobalMember(Entry *root,
FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig); FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
//printf("File %s\n",fd ? fd->name().data() : "<none>"); //printf("File %s\n",fd ? fd->name().data() : "<none>");
NamespaceSDict *nl = fd ? fd->getUsedNamespaces() : 0; NamespaceSDict *nl = fd ? fd->getUsedNamespaces() : 0;
SDict<Definition> *cl = fd ? fd->getUsedClasses() : 0; //SDict<Definition> *cl = fd ? fd->getUsedClasses() : 0;
//printf("NamespaceList %p\n",nl); //printf("NamespaceList %p\n",nl);
// search in the list of namespaces that are imported via a // search in the list of namespaces that are imported via a
...@@ -4249,21 +4202,15 @@ static bool findGlobalMember(Entry *root, ...@@ -4249,21 +4202,15 @@ static bool findGlobalMember(Entry *root,
md->name().data(),namespaceName.data()); md->name().data(),namespaceName.data());
QCString nsName = nd ? nd->name().data() : ""; QCString nsName = nd ? nd->name().data() : "";
#ifdef NEW_MATCH
NamespaceDef *rnd = 0; NamespaceDef *rnd = 0;
if (!namespaceName.isEmpty()) rnd = Doxygen::namespaceSDict[namespaceName]; if (!namespaceName.isEmpty()) rnd = Doxygen::namespaceSDict[namespaceName];
#endif
bool matching= bool matching=
(md->argumentList()==0 && root->argList->count()==0) || (md->argumentList()==0 && root->argList->count()==0) ||
md->isVariable() || md->isTypedef() || /* in case of function pointers */ md->isVariable() || md->isTypedef() || /* in case of function pointers */
#ifdef NEW_MATCH
matchArguments2(md->getOuterScope(),md->getFileDef(),md->argumentList(), matchArguments2(md->getOuterScope(),md->getFileDef(),md->argumentList(),
rnd ? rnd : Doxygen::globalScope,fd,root->argList, rnd ? rnd : Doxygen::globalScope,fd,root->argList,
FALSE); FALSE);
#else
matchArguments(md->argumentList(),root->argList,0,nsName,FALSE,nl,cl);
#endif
// for static members we also check if the comment block was found in // for static members we also check if the comment block was found in
// the same file. This is needed because static members with the same // the same file. This is needed because static members with the same
...@@ -4287,7 +4234,7 @@ static bool findGlobalMember(Entry *root, ...@@ -4287,7 +4234,7 @@ static bool findGlobalMember(Entry *root,
if (!found && !root->relatesDup) // no match if (!found && !root->relatesDup) // no match
{ {
QCString fullFuncDecl=decl; QCString fullFuncDecl=decl;
if (root->argList) fullFuncDecl+=argListToString(root->argList); if (root->argList) fullFuncDecl+=argListToString(root->argList,TRUE);
warn(root->fileName,root->startLine, warn(root->fileName,root->startLine,
"Warning: no matching file member found for \n%s",fullFuncDecl.data()); "Warning: no matching file member found for \n%s",fullFuncDecl.data());
if (mn->count()>0) if (mn->count()>0)
...@@ -4590,10 +4537,14 @@ static void findMember(Entry *root, ...@@ -4590,10 +4537,14 @@ static void findMember(Entry *root,
{ {
scopeName=namespaceName; scopeName=namespaceName;
} }
else else if (!getClass(className)) // class name only exists in a namespace
{ {
scopeName=namespaceName+"::"+className; scopeName=namespaceName+"::"+className;
} }
else
{
scopeName=className;
}
} }
else if (!className.isEmpty()) else if (!className.isEmpty())
{ {
...@@ -4671,9 +4622,6 @@ static void findMember(Entry *root, ...@@ -4671,9 +4622,6 @@ static void findMember(Entry *root,
} }
} }
QCString fullFuncDecl=funcDecl.copy();
if (isFunc) fullFuncDecl+=argListToString(root->argList);
if (funcType=="template class" && !funcTempList.isEmpty()) if (funcType=="template class" && !funcTempList.isEmpty())
return; // ignore explicit template instantiations return; // ignore explicit template instantiations
...@@ -4809,12 +4757,10 @@ static void findMember(Entry *root, ...@@ -4809,12 +4757,10 @@ static void findMember(Entry *root,
Debug::print(Debug::FindMembers,0, Debug::print(Debug::FindMembers,0,
"5. matching `%s'<=>`%s' className=%s namespaceName=%s\n", "5. matching `%s'<=>`%s' className=%s namespaceName=%s\n",
argListToString(argList).data(),argListToString(root->argList).data(), argListToString(argList,TRUE).data(),argListToString(root->argList,TRUE).data(),
className.data(),namespaceName.data() className.data(),namespaceName.data()
); );
#ifdef NEWMATCH
bool matching= bool matching=
md->isVariable() || md->isTypedef() || // needed for function pointers md->isVariable() || md->isTypedef() || // needed for function pointers
(md->argumentList()==0 && root->argList->count()==0) || (md->argumentList()==0 && root->argList->count()==0) ||
...@@ -4846,113 +4792,6 @@ static void findMember(Entry *root, ...@@ -4846,113 +4792,6 @@ static void findMember(Entry *root,
count++; count++;
memFound=TRUE; memFound=TRUE;
} }
#else // old matching routine
// TODO: match loop for all possible scopes
// list of namespaces using in the file/namespace that this
// member definition is part of
NamespaceSDict *nl = new NamespaceSDict;
if (nd)
{
NamespaceSDict *nnl = nd->getUsedNamespaces();
if (nnl)
{
NamespaceDef *nnd;
NamespaceSDict::Iterator nsdi(*nnl);
for (nsdi.toFirst();(nnd=nsdi.current());++nsdi)
{
Debug::print(Debug::FindMembers,0," adding used namespace %s\n",nnd->qualifiedName().data());
nl->append(nnd->qualifiedName(),nnd);
}
}
}
if (fd)
{
NamespaceSDict *fnl = fd->getUsedNamespaces();
if (fnl)
{
NamespaceDef *fnd;
NamespaceSDict::Iterator nsdi(*fnl);
for (nsdi.toFirst();(fnd=nsdi.current());++nsdi)
{
Debug::print(Debug::FindMembers,0," adding used namespace %s\n",fnd->qualifiedName().data());
nl->append(fnd->qualifiedName(),fnd);
}
}
}
SDict<Definition> *cl = new SDict<Definition>(17);
if (nd)
{
SDict<Definition> *ncl = nd->getUsedClasses();
if (ncl)
{
SDict<Definition>::Iterator csdi(*ncl);
Definition *ncd;
for (csdi.toFirst();(ncd=csdi.current());++csdi)
{
Debug::print(Debug::FindMembers,0," adding used class %s\n",ncd->qualifiedName().data());
cl->append(ncd->qualifiedName(),ncd);
}
}
}
if (fd)
{
SDict<Definition> *fcl = fd->getUsedClasses();
if (fcl)
{
SDict<Definition>::Iterator csdi(*fcl);
Definition *fcd;
for (csdi.toFirst();(fcd=csdi.current());++csdi)
{
Debug::print(Debug::FindMembers,0," adding used class %s\n",fcd->qualifiedName().data());
cl->append(fcd->qualifiedName(),fcd);
}
}
}
bool matching=
md->isVariable() || md->isTypedef() || // needed for function pointers
(md->argumentList()==0 && root->argList->count()==0) ||
matchArguments(argList, root->argList,className,namespaceName,
TRUE,nl,cl);
Debug::print(Debug::FindMembers,0,
"6. match results = %d\n",matching);
if (substDone) // found a new argument list
{
//printf("root->tArgList=`%s'\n",argListToString(root->tArgList).data());
if (matching) // replace member's argument list
{
//printf("Setting scope template argument of member %s to %s\n",
// md->name().data(), argListToString(root->tArgList).data()
// );
//printf("Setting member template argument of member %s to %s\n",
// md->name().data(), argListToString(root->mtArgList).data()
// );
md->setDefinitionTemplateParameterLists(root->tArgLists);
md->setArgumentList(argList);
}
else // no match -> delete argument list
{
delete argList;
}
}
if (matching)
{
//printf("addMemberDocs root->inLine=%d md->isInline()=%d\n",
// root->inLine,md->isInline());
addMemberDocs(root,md,funcDecl,0,overloaded,nl);
count++;
memFound=TRUE;
}
delete cl;
delete nl;
#endif
} }
} }
if (count==0 && root->parent && root->parent->section==Entry::OBJCIMPL_SEC) if (count==0 && root->parent && root->parent->section==Entry::OBJCIMPL_SEC)
...@@ -4998,6 +4837,9 @@ static void findMember(Entry *root, ...@@ -4998,6 +4837,9 @@ static void findMember(Entry *root,
warn_cont(" template %s\n",tempArgListToString(al).data()); warn_cont(" template %s\n",tempArgListToString(al).data());
} }
} }
QCString fullFuncDecl=funcDecl.copy();
if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
warn_cont(" %s\n",fullFuncDecl.data()); warn_cont(" %s\n",fullFuncDecl.data());
if (candidates>0) if (candidates>0)
...@@ -5126,6 +4968,8 @@ static void findMember(Entry *root, ...@@ -5126,6 +4968,8 @@ static void findMember(Entry *root,
{ {
if (!findGlobalMember(root,namespaceName,funcName,funcTempList,funcArgs,funcDecl)) if (!findGlobalMember(root,namespaceName,funcName,funcTempList,funcArgs,funcDecl))
{ {
QCString fullFuncDecl=funcDecl.copy();
if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
warn(root->fileName,root->startLine, warn(root->fileName,root->startLine,
"Warning: Cannot determine class for function\n%s", "Warning: Cannot determine class for function\n%s",
fullFuncDecl.data() fullFuncDecl.data()
...@@ -5173,13 +5017,9 @@ static void findMember(Entry *root, ...@@ -5173,13 +5017,9 @@ static void findMember(Entry *root,
{ {
newMember=newMember && newMember=newMember &&
#ifdef NEWMATCH
!matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmd->argumentList(), !matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmd->argumentList(),
cd,fd,root->argList, cd,fd,root->argList,
TRUE); TRUE);
#else
!matchArguments(rmd->argumentList(),root->argList,className,namespaceName);
#endif
if (newMember) rmd=mn->next(); if (newMember) rmd=mn->next();
} }
if (!newMember && rmd) // member already exists as rmd -> add docs if (!newMember && rmd) // member already exists as rmd -> add docs
...@@ -5232,16 +5072,9 @@ static void findMember(Entry *root, ...@@ -5232,16 +5072,9 @@ static void findMember(Entry *root,
{ {
// check for matching argument lists // check for matching argument lists
if ( if (
#ifdef NEWMATCH
matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmd->argumentList(), matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmd->argumentList(),
cd,fd,root->argList, cd,fd,root->argList,
TRUE) TRUE)
#else
matchArguments(rmd->argumentList(),
root->argList,
className,
namespaceName)
#endif
) )
{ {
found=TRUE; found=TRUE;
...@@ -5297,6 +5130,8 @@ static void findMember(Entry *root, ...@@ -5297,6 +5130,8 @@ static void findMember(Entry *root,
{ {
if (!findGlobalMember(root,namespaceName,funcName,funcTempList,funcArgs,funcDecl)) if (!findGlobalMember(root,namespaceName,funcName,funcTempList,funcArgs,funcDecl))
{ {
QCString fullFuncDecl=funcDecl.copy();
if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
warn(root->fileName,root->startLine, warn(root->fileName,root->startLine,
"Warning: Cannot determine file/namespace for relatedalso function\n%s", "Warning: Cannot determine file/namespace for relatedalso function\n%s",
fullFuncDecl.data() fullFuncDecl.data()
...@@ -5980,14 +5815,10 @@ static void computeMemberRelations() ...@@ -5980,14 +5815,10 @@ static void computeMemberRelations()
// argListToString(md->argumentList()).data() // argListToString(md->argumentList()).data()
// ); // );
if ( if (
#ifdef NEWMATCH
matchArguments2(bmd->getOuterScope(),bmd->getFileDef(),bmd->argumentList(), matchArguments2(bmd->getOuterScope(),bmd->getFileDef(),bmd->argumentList(),
md->getOuterScope(), md->getFileDef(), md->argumentList(), md->getOuterScope(), md->getFileDef(), md->argumentList(),
TRUE TRUE
) )
#else
matchArguments(bmd->argumentList(),md->argumentList())
#endif
) )
{ {
//printf(" match found!\n"); //printf(" match found!\n");
...@@ -7410,7 +7241,7 @@ static void copyAndFilterFile(const char *fileName,BufStr &dest) ...@@ -7410,7 +7241,7 @@ static void copyAndFilterFile(const char *fileName,BufStr &dest)
} }
else else
{ {
QCString cmd="\""+filterName+"\" \""+fileName+"\""; QCString cmd=filterName+" \""+fileName+"\"";
FILE *f=popen(cmd,"r"); FILE *f=popen(cmd,"r");
if (!f) if (!f)
{ {
......
...@@ -196,6 +196,7 @@ QCString unhtmlify(const char *str) ...@@ -196,6 +196,7 @@ QCString unhtmlify(const char *str)
if (strncmp(p,"&amp;",5)==0) { result+='&'; p+=5; } if (strncmp(p,"&amp;",5)==0) { result+='&'; p+=5; }
else if (strncmp(p,"&lt;",4)==0) { result+='<'; p+=4; } else if (strncmp(p,"&lt;",4)==0) { result+='<'; p+=4; }
else if (strncmp(p,"&gt;",4)==0) { result+='>'; p+=4; } else if (strncmp(p,"&gt;",4)==0) { result+='>'; p+=4; }
else if (strncmp(p,"&quot;",6)==0) { result+='"'; p+=4; }
else /* should not happen */ { result+='&'; p++; } else /* should not happen */ { result+='&'; p++; }
} }
} }
...@@ -301,12 +302,13 @@ QCString unhtmlify(const char *str) ...@@ -301,12 +302,13 @@ QCString unhtmlify(const char *str)
} }
<Qt3ReadName>. <Qt3ReadName>.
<Qt3ReadArgs>[ \t]*"(" { <Qt3ReadArgs>[ \t]*"(" {
memberArgs+="("; memberArgs+='(';
} }
<Qt3ReadArgs>"&amp;" { memberArgs+="&"; } <Qt3ReadArgs>"&amp;" { memberArgs+='&'; }
<Qt3ReadArgs>"&lt;" { memberArgs+="<"; } <Qt3ReadArgs>"&lt;" { memberArgs+='<'; }
<Qt3ReadArgs>"&gt;" { memberArgs+=">"; } <Qt3ReadArgs>"&gt;" { memberArgs+='>'; }
<Qt3ReadArgs>"&nbsp;" { memberArgs+=" "; } <Qt3ReadArgs>"&quot;" { memberArgs+='"'; }
<Qt3ReadArgs>"&nbsp;" { memberArgs+=' '; }
<Qt3ReadArgs>"</h3>" { <Qt3ReadArgs>"</h3>" {
addMember(memberName,memberRef,memberArgs); addMember(memberName,memberRef,memberArgs);
memberName.resize(0); memberName.resize(0);
...@@ -316,7 +318,7 @@ QCString unhtmlify(const char *str) ...@@ -316,7 +318,7 @@ QCString unhtmlify(const char *str)
} }
<Qt3ReadArgs>"<"[^>]+">" <Qt3ReadArgs>"<"[^>]+">"
<Qt3ReadArgs>")" { <Qt3ReadArgs>")" {
memberArgs+=")"; memberArgs+=')';
addMember(memberName,memberRef,memberArgs); addMember(memberName,memberRef,memberArgs);
memberName.resize(0); memberName.resize(0);
memberRef.resize(0); memberRef.resize(0);
...@@ -329,39 +331,42 @@ QCString unhtmlify(const char *str) ...@@ -329,39 +331,42 @@ QCString unhtmlify(const char *str)
/* --------------------------------------------------- */ /* --------------------------------------------------- */
/* Doxygen class extraction rules */ /* Doxygen class extraction rules */
<Start>"<!-- doxytag: class=<" { <Start>"<!-- doxytag: class=\"" {
className.resize(0); className.resize(0);
BEGIN(DoxClassName); BEGIN(DoxClassName);
} }
<DoxClassName>[^&>]+ { <DoxClassName>[^&"]+ {
className=yytext; className=yytext;
addClass(className); addClass(className);
} }
<DoxClassName>"&lt;" { <DoxClassName>"&lt;" {
className+="<"; className+='<';
} }
<DoxClassName>"&gt;" { <DoxClassName>"&gt;" {
className+=">"; className+='>';
} }
<DoxClassName>"&amp;" { <DoxClassName>"&amp;" {
className+="&"; className+='&';
}
<DoxClassName>"&quot;" {
className+='"';
} }
<DoxClassName>. { <DoxClassName>. {
className+=*yytext; className+=*yytext;
} }
<DoxClassName>"> -->" { <DoxClassName>"\" -->" {
BEGIN(Start); BEGIN(Start);
} }
/* --------------------------------------------------- */ /* --------------------------------------------------- */
/* Doxygen inheritance extraction rules */ /* Doxygen inheritance extraction rules */
<Start>"<!-- doxytag: inherits=<" { <Start>"<!-- doxytag: inherits=\"" {
bases.clear(); bases.clear();
baseName.resize(0); baseName.resize(0);
BEGIN(DoxClassBase); BEGIN(DoxClassBase);
} }
<DoxClassBase>[^&,>]+ { <DoxClassBase>[^&,"]+ {
baseName+=yytext; baseName+=yytext;
} }
<DoxClassBase>"," { <DoxClassBase>"," {
...@@ -369,18 +374,21 @@ QCString unhtmlify(const char *str) ...@@ -369,18 +374,21 @@ QCString unhtmlify(const char *str)
baseName.resize(0); baseName.resize(0);
} }
<DoxClassBase>"&lt;" { <DoxClassBase>"&lt;" {
baseName+="<"; baseName+='<';
} }
<DoxClassBase>"&gt;" { <DoxClassBase>"&gt;" {
baseName+=">"; baseName+='>';
} }
<DoxClassBase>"&amp;" { <DoxClassBase>"&amp;" {
baseName+="&"; baseName+='&';
}
<DoxClassBase>"&quot;" {
baseName+='"';
} }
<DoxClassBase>. { <DoxClassBase>. {
baseName+=*yytext; baseName+=*yytext;
} }
<DoxClassBase>"> -->" { <DoxClassBase>"\" -->" {
bases.append(baseName); bases.append(baseName);
baseName.resize(0); baseName.resize(0);
addBases(className); addBases(className);
...@@ -390,65 +398,74 @@ QCString unhtmlify(const char *str) ...@@ -390,65 +398,74 @@ QCString unhtmlify(const char *str)
/* --------------------------------------------------- */ /* --------------------------------------------------- */
/* Doxygen member extraction rules */ /* Doxygen member extraction rules */
<Start>"<!-- doxytag: member=<" { <Start>"<!-- doxytag: member=\"" {
memberName.resize(0); memberName.resize(0);
BEGIN(DoxReadName); BEGIN(DoxReadName);
} }
<DoxReadName>[^&>]+ { <DoxReadName>[^&"]+ {
memberName+=yytext; memberName+=yytext;
} }
<DoxReadName>"&lt;" { <DoxReadName>"&lt;" {
memberName+="<"; memberName+='<';
} }
<DoxReadName>"&gt;" { <DoxReadName>"&gt;" {
memberName+=">"; memberName+='>';
} }
<DoxReadName>"&amp;" { <DoxReadName>"&amp;" {
memberName+="&"; memberName+='&';
}
<DoxReadName>"&quot;" {
memberName+='"';
} }
<DoxReadName>. { <DoxReadName>. {
memberName+=*yytext; memberName+=*yytext;
} }
<DoxReadName>"> ref=<" { <DoxReadName>"\" ref=\"" {
memberName=memberName.mid(memberName.find("::")+2); memberName=memberName.mid(memberName.find("::")+2);
memberRef.resize(0); memberRef.resize(0);
BEGIN(DoxReadAnchor); BEGIN(DoxReadAnchor);
} }
<DoxReadAnchor>[^&>]+ { <DoxReadAnchor>[^&"]+ {
memberRef+=yytext; memberRef+=yytext;
} }
<DoxReadAnchor>"&lt;" { <DoxReadAnchor>"&lt;" {
memberRef+="<"; memberRef+='<';
} }
<DoxReadAnchor>"&gt;" { <DoxReadAnchor>"&gt;" {
memberRef+=">"; memberRef+='>';
} }
<DoxReadAnchor>"&amp;" { <DoxReadAnchor>"&amp;" {
memberRef+="&"; memberRef+='&';
}
<DoxReadAnchor>"&quot;" {
memberRef+='"';
} }
<DoxReadAnchor>. { <DoxReadAnchor>. {
memberRef+=*yytext; memberRef+=*yytext;
} }
<DoxReadAnchor>"> args=<" { <DoxReadAnchor>"\" args=\"" {
memberArgs.resize(0); memberArgs.resize(0);
BEGIN(DoxReadArgs); BEGIN(DoxReadArgs);
} }
<DoxReadArgs>[^&>]+ { <DoxReadArgs>[^&"]+ {
memberArgs+=yytext; memberArgs+=yytext;
} }
<DoxReadArgs>"&lt;" { <DoxReadArgs>"&lt;" {
memberArgs+="<"; memberArgs+='<';
} }
<DoxReadArgs>"&gt;" { <DoxReadArgs>"&gt;" {
memberArgs+=">"; memberArgs+='>';
} }
<DoxReadArgs>"&amp;" { <DoxReadArgs>"&amp;" {
memberArgs+="&"; memberArgs+='&';
}
<DoxReadArgs>"&quot;" {
memberArgs+='"';
} }
<DoxReadArgs>. { <DoxReadArgs>. {
memberArgs+=*yytext; memberArgs+=*yytext;
} }
<DoxReadArgs>"> -->" { <DoxReadArgs>"\" -->" {
addMember(memberName,memberRef,memberArgs); addMember(memberName,memberRef,memberArgs);
memberName.resize(0); memberName.resize(0);
memberRef.resize(0); memberRef.resize(0);
...@@ -613,10 +630,11 @@ QCString unhtmlify(const char *str) ...@@ -613,10 +630,11 @@ QCString unhtmlify(const char *str)
else else
BEGIN( Start ); BEGIN( Start );
} }
<ReadArgs>"&amp;" { memberArgs+="&"; } <ReadArgs>"&amp;" { memberArgs+='&'; }
<ReadArgs>"&lt;" { memberArgs+="<"; } <ReadArgs>"&lt;" { memberArgs+='<'; }
<ReadArgs>"&gt;" { memberArgs+=">"; } <ReadArgs>"&gt;" { memberArgs+='>'; }
<ReadArgs>"&nbsp;" { memberArgs+=" "; } <ReadArgs>"&quot;" { memberArgs+='"'; }
<ReadArgs>"&nbsp;" { memberArgs+=' '; }
/* /*
<ReadArgs>[{}] { // handle enums <ReadArgs>[{}] { // handle enums
memberArgs.resize(0); memberArgs.resize(0);
......
...@@ -686,13 +686,17 @@ void FileDef::addMembersToMemberGroup() ...@@ -686,13 +686,17 @@ void FileDef::addMembersToMemberGroup()
/*! Adds member definition \a md to the list of all members of this file */ /*! Adds member definition \a md to the list of all members of this file */
void FileDef::insertMember(MemberDef *md) void FileDef::insertMember(MemberDef *md)
{ {
//printf("%s:FileDef::insertMember(%s)\n",name().data(),md->name().data()); //printf("%s:FileDef::insertMember(%s (=%p) list has %d elements)\n",
if (allMemberList.find(md)!=-1) return; // name().data(),md->name().data(),md,allMemberList.count());
if (allMemberList.findRef(md)!=-1)
{
return;
}
allMemberList.append(md); allMemberList.append(md);
bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS"); bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS");
switch(md->memberType()) switch (md->memberType())
{ {
case MemberDef::Variable: case MemberDef::Variable:
case MemberDef::Property: case MemberDef::Property:
...@@ -1129,7 +1133,7 @@ static void addDirsAsGroups(Directory *root,GroupDef *parent,int level) ...@@ -1129,7 +1133,7 @@ static void addDirsAsGroups(Directory *root,GroupDef *parent,int level)
GroupDef *gd=0; GroupDef *gd=0;
if (root->kind()==DirEntry::Dir) if (root->kind()==DirEntry::Dir)
{ {
gd = new GroupDef("<generated>", gd = new GroupDef("[generated]",
1, 1,
root->path(), // name root->path(), // name
root->name() // title root->name() // title
......
...@@ -218,14 +218,10 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly) ...@@ -218,14 +218,10 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
md->getOuterScope()->definitionType()==Definition::TypeFile); md->getOuterScope()->definitionType()==Definition::TypeFile);
if (srcMd->isFunction() && md->isFunction() && if (srcMd->isFunction() && md->isFunction() &&
#ifdef NEWMATCH
matchArguments2(srcMd->getOuterScope(),srcMd->getFileDef(),srcMd->argumentList(), matchArguments2(srcMd->getOuterScope(),srcMd->getFileDef(),srcMd->argumentList(),
md->getOuterScope(),md->getFileDef(),md->argumentList(), md->getOuterScope(),md->getFileDef(),md->argumentList(),
TRUE TRUE
) && ) &&
#else
matchArguments(srcMd->argumentList(),md->argumentList()) &&
#endif
sameScope sameScope
) )
{ {
......
...@@ -603,9 +603,13 @@ void HtmlGenerator::startDoxyAnchor(const char *,const char *, ...@@ -603,9 +603,13 @@ void HtmlGenerator::startDoxyAnchor(const char *,const char *,
const char *args) const char *args)
{ {
t << "<a class=\"anchor\" name=\"" << anchor << "\"></a>"; t << "<a class=\"anchor\" name=\"" << anchor << "\"></a>";
t << "<!-- doxytag: member=<" << name << "> ref=<" << anchor << "> args=<"; t << "<!-- doxytag: member=\"";
docify(name);
t << "\" ref=\"";
docify(anchor);
t << "\" args=\"";
docify(args); docify(args);
t << "> -->"; t << "\" -->";
} }
void HtmlGenerator::endDoxyAnchor(const char *,const char *) void HtmlGenerator::endDoxyAnchor(const char *,const char *)
...@@ -815,6 +819,7 @@ void HtmlGenerator::docify(const char *str) ...@@ -815,6 +819,7 @@ void HtmlGenerator::docify(const char *str)
case '<': t << "&lt;"; break; case '<': t << "&lt;"; break;
case '>': t << "&gt;"; break; case '>': t << "&gt;"; break;
case '&': t << "&amp;"; break; case '&': t << "&amp;"; break;
case '"': t << "&quot;"; break;
case '\\': case '\\':
if (*p=='<') if (*p=='<')
{ t << "&lt;"; p++; } { t << "&lt;"; p++; }
......
...@@ -3101,7 +3101,7 @@ void writeIndex(OutputList &ol) ...@@ -3101,7 +3101,7 @@ void writeIndex(OutputList &ol)
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
QCString defFileName = QCString defFileName =
Doxygen::mainPage ? Doxygen::mainPage->getDefFileName().data() : "<generated>"; Doxygen::mainPage ? Doxygen::mainPage->getDefFileName().data() : "[generated]";
int defLine = int defLine =
Doxygen::mainPage ? Doxygen::mainPage->getDefLine() : -1; Doxygen::mainPage ? Doxygen::mainPage->getDefLine() : -1;
......
...@@ -104,7 +104,7 @@ enum ClassMemberHighlight ...@@ -104,7 +104,7 @@ enum ClassMemberHighlight
CMHL_Properties, CMHL_Properties,
CMHL_Events, CMHL_Events,
CMHL_Related, CMHL_Related,
CMHL_Total = CMHL_Events+1 CMHL_Total = CMHL_Related+1
}; };
enum FileMemberHighlight enum FileMemberHighlight
......
...@@ -315,7 +315,7 @@ void MemberList::writeDeclarations(OutputList &ol, ...@@ -315,7 +315,7 @@ void MemberList::writeDeclarations(OutputList &ol,
{ {
//printf("subtitle=`%s'\n",subtitle); //printf("subtitle=`%s'\n",subtitle);
ol.startMemberSubtitle(); ol.startMemberSubtitle();
ol.parseDoc("<generated>",-1,0,0,subtitle,FALSE,FALSE); ol.parseDoc("[generated]",-1,0,0,subtitle,FALSE,FALSE);
ol.endMemberSubtitle(); ol.endMemberSubtitle();
} }
...@@ -339,7 +339,7 @@ void MemberList::writeDeclarations(OutputList &ol, ...@@ -339,7 +339,7 @@ void MemberList::writeDeclarations(OutputList &ol,
{ {
//printf("Member group has docs!\n"); //printf("Member group has docs!\n");
ol.startMemberGroupDocs(); ol.startMemberGroupDocs();
ol.parseDoc("<generated>",-1,0,0,mg->documentation()+"\n",FALSE,FALSE); ol.parseDoc("[generated]",-1,0,0,mg->documentation()+"\n",FALSE,FALSE);
ol.endMemberGroupDocs(); ol.endMemberGroupDocs();
} }
ol.startMemberGroup(); ol.startMemberGroup();
......
...@@ -199,7 +199,7 @@ static FILE *checkAndOpenFile(const QCString &absName) ...@@ -199,7 +199,7 @@ static FILE *checkAndOpenFile(const QCString &absName)
QCString filterName = getFileFilter(absName); QCString filterName = getFileFilter(absName);
if (!filterName.isEmpty()) if (!filterName.isEmpty())
{ {
QCString cmd = "\"" + filterName+"\" \""+absName+"\""; QCString cmd = filterName+" \""+absName+"\"";
f=popen(cmd,"r"); f=popen(cmd,"r");
if (!f) err("Error: could not execute filter %s\n",cmd.data()); if (!f) err("Error: could not execute filter %s\n",cmd.data());
} }
...@@ -2296,7 +2296,7 @@ void preprocessFile(const char *fileName,BufStr &output) ...@@ -2296,7 +2296,7 @@ void preprocessFile(const char *fileName,BufStr &output)
} }
else else
{ {
QCString cmd = "\"" + inputFilter+"\" \""+fileName+"\""; QCString cmd = inputFilter+" \""+fileName+"\"";
preYYin = popen(cmd,"r"); preYYin = popen(cmd,"r");
if (!preYYin) if (!preYYin)
{ {
......
...@@ -648,8 +648,8 @@ void RTFDocVisitor::visitPost(DocTitle *) ...@@ -648,8 +648,8 @@ void RTFDocVisitor::visitPost(DocTitle *)
{ {
if (m_hide) return; if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocTitle)}\n"); DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocTitle)}\n");
m_t << "}"; // end bold
m_t << "\\par" << endl; m_t << "\\par" << endl;
m_t << "}"; // end bold
incIndentLevel(); incIndentLevel();
m_t << rtf_Style_Reset << getStyle("DescContinue"); m_t << rtf_Style_Reset << getStyle("DescContinue");
m_lastIsPara=FALSE; m_lastIsPara=FALSE;
......
...@@ -3992,8 +3992,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -3992,8 +3992,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
/* ---- Single line comments ------ */ /* ---- Single line comments ------ */
<DocLine>[^\n]*"\n" { // whole line <DocLine>[^\n]*/"\n" { // whole line
yyLineNr++;
handleCommentBlock(yytext,TRUE); handleCommentBlock(yytext,TRUE);
BEGIN( docBlockContext ); BEGIN( docBlockContext );
} }
......
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#include "pagedef.h" #include "pagedef.h"
#include "debug.h" #include "debug.h"
#include "searchindex.h" #include "searchindex.h"
#include "doxygen.h"
#if !defined(_WIN32) || defined(__CYGWIN__) #if !defined(_WIN32) || defined(__CYGWIN__)
#include <unistd.h> #include <unistd.h>
...@@ -599,7 +600,8 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,Definition ...@@ -599,7 +600,8 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,Definition
* *
* Example: typedef int T; will return 0, since "int" is not a class. * Example: typedef int T; will return 0, since "int" is not a class.
*/ */
ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,QCString *pTemplSpec) static ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
MemberDef **pMemType,QCString *pTemplSpec)
{ {
//printf("newResolveTypedef(md=%p,cachedVal=%p)\n",md,md->getCachedTypedefVal()); //printf("newResolveTypedef(md=%p,cachedVal=%p)\n",md,md->getCachedTypedefVal());
bool isCached = md->isTypedefValCached(); // value already cached bool isCached = md->isTypedefValCached(); // value already cached
...@@ -631,7 +633,14 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,QCString *pTemplSpe ...@@ -631,7 +633,14 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,QCString *pTemplSpe
ClassDef *result = getResolvedClassRec(md->getOuterScope(), ClassDef *result = getResolvedClassRec(md->getOuterScope(),
fileScope,type,&memTypeDef,0); fileScope,type,&memTypeDef,0);
// if type is a typedef than return what it resolves to. // if type is a typedef than return what it resolves to.
if (memTypeDef) return newResolveTypedef(fileScope,memTypeDef,pTemplSpec); if (memTypeDef && memTypeDef->isTypedef())
{
return newResolveTypedef(fileScope,memTypeDef,pMemType,pTemplSpec);
}
else if (memTypeDef && memTypeDef->isEnumerate() && pMemType)
{
*pMemType = memTypeDef;
}
//printf("type=%s result=%p\n",type.data(),result); //printf("type=%s result=%p\n",type.data(),result);
if (result==0) if (result==0)
...@@ -1169,7 +1178,8 @@ ClassDef *getResolvedClassRec(Definition *scope, ...@@ -1169,7 +1178,8 @@ ClassDef *getResolvedClassRec(Definition *scope,
{ {
QCString spec; QCString spec;
minDistance=distance; minDistance=distance;
ClassDef *cd = newResolveTypedef(fileScope,md,&spec); MemberDef *enumType = 0;
ClassDef *cd = newResolveTypedef(fileScope,md,&enumType,&spec);
if (cd) // shouldn't be 0, but could in some weird cases if (cd) // shouldn't be 0, but could in some weird cases
{ {
//printf(" bestTypeDef=%p spec=%s\n",md,spec.data()); //printf(" bestTypeDef=%p spec=%s\n",md,spec.data());
...@@ -1177,6 +1187,22 @@ ClassDef *getResolvedClassRec(Definition *scope, ...@@ -1177,6 +1187,22 @@ ClassDef *getResolvedClassRec(Definition *scope,
bestTypedef = md; bestTypedef = md;
bestTemplSpec = spec; bestTemplSpec = spec;
} }
else if (enumType)
{
bestMatch = 0;
bestTypedef = enumType;
bestTemplSpec = "";
}
}
}
else if (md->isEnumerate())
{
if (distance<minDistance)
{
minDistance=distance;
bestMatch = 0;
bestTypedef = md;
bestTemplSpec = "";
} }
} }
} }
...@@ -1592,7 +1618,7 @@ void writeExample(OutputList &ol,ExampleSDict *ed) ...@@ -1592,7 +1618,7 @@ void writeExample(OutputList &ol,ExampleSDict *ed)
} }
QCString argListToString(ArgumentList *al) QCString argListToString(ArgumentList *al,bool useCanonicalType)
{ {
QCString result; QCString result;
if (al==0) return result; if (al==0) return result;
...@@ -1600,7 +1626,9 @@ QCString argListToString(ArgumentList *al) ...@@ -1600,7 +1626,9 @@ QCString argListToString(ArgumentList *al)
result+="("; result+="(";
while (a) while (a)
{ {
QCString type1 = a->type, type2; QCString type1 = useCanonicalType && !a->canType.isEmpty() ?
a->canType : a->type;
QCString type2;
int i=type1.find(")("); // hack to deal with function pointers int i=type1.find(")("); // hack to deal with function pointers
if (i!=-1) if (i!=-1)
{ {
...@@ -1940,6 +1968,7 @@ int minClassDistance(ClassDef *cd,ClassDef *bcd,int level) ...@@ -1940,6 +1968,7 @@ int minClassDistance(ClassDef *cd,ClassDef *bcd,int level)
// printf(")"); // printf(")");
//} //}
#ifndef NEWMATCH
// strip any template specifiers that follow className in string s // strip any template specifiers that follow className in string s
static QCString trimTemplateSpecifiers( static QCString trimTemplateSpecifiers(
const QCString &namespaceName, const QCString &namespaceName,
...@@ -2096,6 +2125,7 @@ static QCString trimScope(const QCString &name,const QCString &s) ...@@ -2096,6 +2125,7 @@ static QCString trimScope(const QCString &name,const QCString &s)
//printf("trimScope(name=%s,scope=%s)=%s\n",name.data(),s.data(),result.data()); //printf("trimScope(name=%s,scope=%s)=%s\n",name.data(),s.data(),result.data());
return result; return result;
} }
#endif
void trimBaseClassScope(BaseClassList *bcl,QCString &s,int level=0) void trimBaseClassScope(BaseClassList *bcl,QCString &s,int level=0)
{ {
...@@ -2256,7 +2286,7 @@ void stripIrrelevantConstVolatile(QCString &s) ...@@ -2256,7 +2286,7 @@ void stripIrrelevantConstVolatile(QCString &s)
//#define MATCH printf("Match at line %d\n",__LINE__); //#define MATCH printf("Match at line %d\n",__LINE__);
//#define NOMATCH printf("Nomatch at line %d\n",__LINE__); //#define NOMATCH printf("Nomatch at line %d\n",__LINE__);
#ifndef NEWMATCH
static bool matchArgument(const Argument *srcA,const Argument *dstA, static bool matchArgument(const Argument *srcA,const Argument *dstA,
const QCString &className, const QCString &className,
const QCString &namespaceName, const QCString &namespaceName,
...@@ -2628,10 +2658,105 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl, ...@@ -2628,10 +2658,105 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
return TRUE; // all arguments match return TRUE; // all arguments match
} }
#endif
static QCString resolveSymbolName(FileDef *fs,Definition *symbol,QCString &templSpec)
{
ASSERT(symbol!=0);
if (symbol->definitionType()==Definition::TypeMember &&
((MemberDef*)symbol)->isTypedef()) // if symbol is a typedef then try
// to resolve it
{
MemberDef *md = 0;
ClassDef *cd = newResolveTypedef(fs,(MemberDef*)symbol,&md,&templSpec);
if (cd)
{
return cd->qualifiedNameWithTemplateParameters();
}
else if (md)
{
return md->qualifiedName();
}
}
return symbol->qualifiedName();
}
static QCString getCanonicalTypeForIdentifier(
Definition *d,FileDef *fs,const QCString &word,
QCString *tSpec)
{
QCString symName,scope,result,templSpec;
DefinitionList *defList=0;
if (tSpec) templSpec = *tSpec;
if (word.findRev("::")!=-1 && !(scope=stripScope(word)).isEmpty())
{
symName=word.mid(scope.length()+2);
}
else
{
symName=word;
}
if (!symName.isEmpty() && !templSpec.isEmpty() &&
(defList=Doxygen::symbolMap->find(symName+templSpec)) &&
defList->count()==1) // word without scope but with template specs
// is a unique symbol in the symbol map
{
QCString ts;
result = resolveSymbolName(fs,defList->first(),ts);
*tSpec="";
}
else if (!symName.isEmpty() &&
(defList=Doxygen::symbolMap->find(symName)) &&
defList->count()==1) // word without scope is a
// unique symbol in the symbol map
{
QCString ts;
result = resolveSymbolName(fs,defList->first(),ts)+templSpec;
}
else // symbol not unique, try to find the one in the right scope
{
ClassDef *cd = 0;
MemberDef *mType = 0;
if (!templSpec.isEmpty())
{
cd = getResolvedClass(d,fs,word+templSpec,&mType,0,TRUE);
if (cd) *tSpec="";
}
if (cd==0)
{
cd = getResolvedClass(d,fs,word,&mType,0,TRUE);
}
//printf(">>>> word '%s' => '%s'\n",(word+templSpec).data(),cd?cd->qualifiedNameWithTemplateParameters().data():"<none>");
if (cd) // known type
{
result = cd->qualifiedNameWithTemplateParameters();
}
else if (mType && mType->isEnumerate()) // an enum
{
result = mType->qualifiedName();
}
else // not known as a class
{
QCString resolvedType = resolveTypeDef(d,word);
if (resolvedType.isEmpty()) // not known as a typedef either
{
result = word;
}
else
{
result = resolvedType;
}
}
}
return result;
}
static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *arg) static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *arg)
{ {
QCString type = arg->type; QCString type = arg->type.stripWhiteSpace();
QCString name = arg->name; QCString name = arg->name;
//printf("extractCanonicalType(type=%s,name=%s)\n",type.data(),name.data()); //printf("extractCanonicalType(type=%s,name=%s)\n",type.data(),name.data());
if ((type=="const" || type=="volatile") && !name.isEmpty()) if ((type=="const" || type=="volatile") && !name.isEmpty())
...@@ -2655,6 +2780,9 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a ...@@ -2655,6 +2780,9 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a
type.stripPrefix("enum "); type.stripPrefix("enum ");
type.stripPrefix("typename "); type.stripPrefix("typename ");
type = removeRedundantWhiteSpace(type);
//printf("extractCanonicalTyp2(type=%s,name=%s)\n",type.data(),name.data());
static QRegExp id("[a-z_A-Z][:a-z_A-Z0-9]*"); static QRegExp id("[a-z_A-Z][:a-z_A-Z0-9]*");
QCString canType,templSpec,word; QCString canType,templSpec,word;
...@@ -2664,41 +2792,24 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a ...@@ -2664,41 +2792,24 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a
{ {
//printf(" i=%d p=%d\n",i,p); //printf(" i=%d p=%d\n",i,p);
canType += type.mid(pp,i-pp); canType += type.mid(pp,i-pp);
ClassDef *cd = 0;
if (!templSpec.isEmpty()) canType += getCanonicalTypeForIdentifier(d,fs,word,&templSpec);
{ if (!templSpec.isEmpty()) // if we didn't use up the templSpec already
cd = getResolvedClass(d,fs,word+templSpec,0,0,TRUE); // (i.e. type is not a template specialization)
} // then resolve any identifiers inside.
if (cd==0)
{
cd = getResolvedClass(d,fs,word,0,0,TRUE);
}
//printf(">>>> word '%s' => '%s'\n",(word+templSpec).data(),cd?cd->qualifiedNameWithTemplateParameters().data():"<none>");
if (cd)
{
canType+=cd->qualifiedNameWithTemplateParameters();
}
else
{
QCString resolvedType = resolveTypeDef(d,word);
if (resolvedType.isEmpty())
{ {
//int i=word.findRev("::"); static QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*");
//if (i!=-1) // strip scope if it cannot be resolved anyway int p=0,l,i;
// // TODO is this robust enough? // for each identifier template specifier
//{ while ((i=re.match(templSpec,p,&l))!=-1)
// canType+=word.mid(i+2);
//}
//else
//{
canType+=word+templSpec;
//}
}
else
{ {
canType+=resolvedType; canType += templSpec.mid(p,i-p);
canType += getCanonicalTypeForIdentifier(d,fs,word,0);
p=i+l;
} }
canType+=templSpec.right(templSpec.length()-p);
} }
pp=p; pp=p;
} }
canType += type.right(type.length()-pp); canType += type.right(type.length()-pp);
...@@ -3035,6 +3146,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3035,6 +3146,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf("mScope=`%s' mName=`%s'\n",mScope.data(),mName.data()); //printf("mScope=`%s' mName=`%s'\n",mScope.data(),mName.data());
MemberName *mn = Doxygen::memberNameSDict[mName]; MemberName *mn = Doxygen::memberNameSDict[mName];
//printf("mName=%s mn=%p\n",mName.data(),mn);
if (!forceEmptyScope && mn && !(scopeName.isEmpty() && mScope.isEmpty())) if (!forceEmptyScope && mn && !(scopeName.isEmpty() && mScope.isEmpty()))
{ {
//printf(" >member name found\n"); //printf(" >member name found\n");
...@@ -3073,14 +3185,10 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3073,14 +3185,10 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//if (mmd->isLinkable()) //if (mmd->isLinkable())
//{ //{
bool match=args==0 || bool match=args==0 ||
#ifdef NEW_MATCH matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmd->argumentList(),
matchArguments2(mmd->getOuterScope(),md->getFileDef(),md->argumentList(),
fcd,fcd->getFileDef(),argList, fcd,fcd->getFileDef(),argList,
checkCV checkCV
); );
#else
matchArguments(mmd->argumentList(),argList,className,0,checkCV);
#endif
//printf("match=%d\n",match); //printf("match=%d\n",match);
if (match) if (match)
{ {
...@@ -3193,15 +3301,10 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3193,15 +3301,10 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
argList=new ArgumentList; argList=new ArgumentList;
stringToArgumentList(args,argList); stringToArgumentList(args,argList);
#ifdef NEW_MATCH
match=matchArguments2( match=matchArguments2(
mmd->getOuterScope(),mmd->getFileDef(),mmd->argumentList(), mmd->getOuterScope(),mmd->getFileDef(),mmd->argumentList(),
fnd,mmd->getFileDef(),argList, fnd,mmd->getFileDef(),argList,
checkCV); checkCV);
#else
match=matchArguments(mmd->argumentList(),argList,0,
namespaceName,checkCV);
#endif
} }
if (match) if (match)
{ {
...@@ -3280,14 +3383,10 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3280,14 +3383,10 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
argList=new ArgumentList; argList=new ArgumentList;
stringToArgumentList(args,argList); stringToArgumentList(args,argList);
#ifdef NEW_MATCH
match=matchArguments2( match=matchArguments2(
md->getOuterScope(),fd,md->argumentList(), md->getOuterScope(),fd,md->argumentList(),
Doxygen::globalScope,fd,argList, Doxygen::globalScope,fd,argList,
checkCV); checkCV);
#else
match=matchArguments(md->argumentList(),argList,0,0,checkCV);
#endif
delete argList; argList=0; delete argList; argList=0;
} }
if (match) if (match)
......
...@@ -129,10 +129,12 @@ void generateFileRef(OutputDocInterface &od,const char *, ...@@ -129,10 +129,12 @@ void generateFileRef(OutputDocInterface &od,const char *,
const char *linkTxt=0); const char *linkTxt=0);
void writePageRef(OutputDocInterface &od,const char *cn,const char *mn); void writePageRef(OutputDocInterface &od,const char *cn,const char *mn);
#if 0
bool matchArguments(ArgumentList *,ArgumentList *, bool matchArguments(ArgumentList *,ArgumentList *,
const char *cl=0,const char *ns=0,bool checkCV=TRUE, const char *cl=0,const char *ns=0,bool checkCV=TRUE,
NamespaceSDict *usingNamespaces=0, NamespaceSDict *usingNamespaces=0,
SDict<Definition> *usingClasses=0); SDict<Definition> *usingClasses=0);
#endif
bool matchArguments2(Definition *srcScope,FileDef *srcFileScope,ArgumentList *srcAl, bool matchArguments2(Definition *srcScope,FileDef *srcFileScope,ArgumentList *srcAl,
Definition *dstScope,FileDef *dstFileScope,ArgumentList *dstAl, Definition *dstScope,FileDef *dstFileScope,ArgumentList *dstAl,
bool checkCV bool checkCV
...@@ -155,7 +157,7 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n); ...@@ -155,7 +157,7 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n);
int guessSection(const char *name); int guessSection(const char *name);
bool isId(char c); bool isId(char c);
QCString removeRedundantWhiteSpace(const QCString &s); QCString removeRedundantWhiteSpace(const QCString &s);
QCString argListToString(ArgumentList *al); QCString argListToString(ArgumentList *al,bool useCanonicalType=FALSE);
QCString tempArgListToString(ArgumentList *al); QCString tempArgListToString(ArgumentList *al);
QCString generateMarker(int id); QCString generateMarker(int id);
void writeExample(OutputList &ol,ExampleSDict *el); void writeExample(OutputList &ol,ExampleSDict *el);
......
...@@ -594,9 +594,9 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -594,9 +594,9 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
if (md->memberType() == MemberDef::Variable) if (md->memberType() == MemberDef::Variable)
{ {
ArgumentList *al = md->argumentList(); //ArgumentList *al = md->argumentList();
t << " volatile=\""; //t << " volatile=\"";
if (al && al->volatileSpecifier) t << "yes"; else t << "no"; //if (al && al->volatileSpecifier) t << "yes"; else t << "no";
t << "\" mutable=\""; t << "\" mutable=\"";
if (md->isMutable()) t << "yes"; else t << "no"; if (md->isMutable()) t << "yes"; else t << "no";
...@@ -723,7 +723,14 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -723,7 +723,14 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
} }
} }
else if (md->memberType()==MemberDef::Define && else if (md->memberType()==MemberDef::Define &&
md->argsString()!=0) // define md->argsString()) // define
{
if (md->argumentList()->count()==0) // special case for "foo()" to
// disguish it from "foo".
{
t << " <param></param>" << endl;
}
else
{ {
ArgumentListIterator ali(*md->argumentList()); ArgumentListIterator ali(*md->argumentList());
Argument *a; Argument *a;
...@@ -732,6 +739,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -732,6 +739,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
t << " <param><defname>" << a->type << "</defname></param>" << endl; t << " <param><defname>" << a->type << "</defname></param>" << endl;
} }
} }
}
// avoid that extremely large tables are written to the output. // avoid that extremely large tables are written to the output.
// todo: it's better to adhere to MAX_INITIALIZER_LINES. // todo: it's better to adhere to MAX_INITIALIZER_LINES.
if (!md->initializer().isEmpty() && md->initializer().length()<2000) if (!md->initializer().isEmpty() && md->initializer().length()<2000)
......
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