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

Release-1.4.5-20051024

parent c9ed38ab
DOXYGEN Version 1.4.5-20051010 DOXYGEN Version 1.4.5-20051024
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 (10 October 2005) Dimitri van Heesch (24 October 2005)
DOXYGEN Version 1.4.5_20051010 DOXYGEN Version 1.4.5_20051024
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) (10 October 2005) Dimitri van Heesch (dimitri@stack.nl) (24 October 2005)
1.4.5-20051010 1.4.5-20051024
...@@ -120,7 +120,7 @@ Options: ...@@ -120,7 +120,7 @@ Options:
--enable-langs list Include support for output languages listed in list. --enable-langs list Include support for output languages listed in list.
[default: $f_langs] [default: $f_langs]
--with-doxywizard Build the GUI frontend for doxygen. This --with-doxywizard Build the GUI frontend for doxygen. This
requires Qt 2.x.x requires Qt 3.3.x
EOF EOF
test "$f_error" = y && exit 1 test "$f_error" = y && exit 1
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
read \ref unix_problems "this section" first. read \ref unix_problems "this section" first.
<li>Doxygen is <em>not</em> a real compiler, it is only a lexical scanner. <li>Doxygen is <em>not</em> a real compiler, it is only a lexical scanner.
This means that it can and will not detect errors in your source code. This means that it can and will not detect errors in your source code.
<li>Since it impossible to test all possible code fragments, it is <li>Since it is impossible to test all possible code fragments, it is
very well possible, that some valid piece of C/C++ code is not handled very well possible, that some valid piece of C/C++ code is not handled
properly. If you find such a piece, please send it to me, so I can properly. If you find such a piece, please send it to me, so I can
improve doxygen's parsing capabilities. Try to make the piece of code improve doxygen's parsing capabilities. Try to make the piece of code
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
For a part this is because the code parser isn't smart enough at the For a part this is because the code parser isn't smart enough at the
moment. I'll try to improve this in the future. But even with these moment. I'll try to improve this in the future. But even with these
improvements not everthing can be properly linked to the corresponding improvements not everything can be properly linked to the corresponding
documentation, because of possible ambiguities or lack of documentation, because of possible ambiguities or lack of
information about the context in which the code fragment is found. information about the context in which the code fragment is found.
<li>It is not possible to insert a non-member function f in a class A <li>It is not possible to insert a non-member function f in a class A
......
...@@ -47,6 +47,7 @@ ClassDef::ClassDef( ...@@ -47,6 +47,7 @@ ClassDef::ClassDef(
: Definition(defFileName,defLine,removeRedundantWhiteSpace(nm),0,0,isSymbol) : Definition(defFileName,defLine,removeRedundantWhiteSpace(nm),0,0,isSymbol)
{ {
m_compType=ct; m_compType=ct;
m_isObjC = FALSE;
QCString compoundName=compoundTypeString(); QCString compoundName=compoundTypeString();
if (fName) if (fName)
{ {
...@@ -92,7 +93,6 @@ ClassDef::ClassDef( ...@@ -92,7 +93,6 @@ ClassDef::ClassDef(
m_artificial = FALSE; m_artificial = FALSE;
m_isAbstract = FALSE; m_isAbstract = FALSE;
m_isStatic = FALSE; m_isStatic = FALSE;
m_isObjC = FALSE;
m_isTemplArg = FALSE; m_isTemplArg = FALSE;
m_membersMerged = FALSE; m_membersMerged = FALSE;
m_categoryOf = 0; m_categoryOf = 0;
......
...@@ -1226,6 +1226,7 @@ static void startFontClass(const char *s) ...@@ -1226,6 +1226,7 @@ static void startFontClass(const char *s)
static void writeObjCMethodCall(ObjCCallCtx *ctx) static void writeObjCMethodCall(ObjCCallCtx *ctx)
{ {
if (ctx==0) return; if (ctx==0) return;
if (ctx->methodName.isEmpty()) return;
const char *p = ctx->format.data(); const char *p = ctx->format.data();
//printf("writeObjCMethodCall(%s) obj=%s method=%s\n", //printf("writeObjCMethodCall(%s) obj=%s method=%s\n",
// ctx->format.data(),ctx->objectTypeOrName.data(),ctx->methodName.data()); // ctx->format.data(),ctx->objectTypeOrName.data(),ctx->methodName.data());
...@@ -2418,6 +2419,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} ...@@ -2418,6 +2419,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
<ObjCCall,ObjCMName,ObjCSkipStr>"$" { g_currentCtx->format+="$$"; } <ObjCCall,ObjCMName,ObjCSkipStr>"$" { g_currentCtx->format+="$$"; }
<ObjCCall,ObjCMName>"(" { g_currentCtx->format+=*yytext; g_braceCount++; } <ObjCCall,ObjCMName>"(" { g_currentCtx->format+=*yytext; g_braceCount++; }
<ObjCCall,ObjCMName>")" { g_currentCtx->format+=*yytext; g_braceCount--; } <ObjCCall,ObjCMName>")" { g_currentCtx->format+=*yytext; g_braceCount--; }
<ObjCSkipStr>"@"/"\"" { // needed to prevent matching the global rule (for C#)
g_currentCtx->format+=yytext;
}
<ObjCCall,ObjCMName,ObjCSkipStr>. { g_currentCtx->format+=*yytext; } <ObjCCall,ObjCMName,ObjCSkipStr>. { g_currentCtx->format+=*yytext; }
<ObjCCall,ObjCMName,ObjCSkipStr>\n { g_currentCtx->format+=*yytext; } <ObjCCall,ObjCMName,ObjCSkipStr>\n { g_currentCtx->format+=*yytext; }
......
...@@ -1636,7 +1636,7 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-] ...@@ -1636,7 +1636,7 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]
{ {
if (*yytext=='\n') yyLineNr++; if (*yytext=='\n') yyLineNr++;
addOutput('\n'); addOutput('\n');
//printf("functionProto=%s\n",functionProto.data()); printf("functionProto=%s\n",functionProto.data());
langParser->parsePrototype(functionProto); langParser->parsePrototype(functionProto);
BEGIN( Comment ); BEGIN( Comment );
} }
......
...@@ -561,6 +561,7 @@ static QCString convertLabel(const QCString &l) ...@@ -561,6 +561,7 @@ static QCString convertLabel(const QCString &l)
{ {
QCString result; QCString result;
const char *p=l.data(); const char *p=l.data();
if (p==0) return result;
char c; char c;
while ((c=*p++)) while ((c=*p++))
{ {
......
...@@ -245,7 +245,7 @@ static STLInfo g_stlinfo[] = ...@@ -245,7 +245,7 @@ static STLInfo g_stlinfo[] =
{ "ofstream", "basic_ofstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE }, { "ofstream", "basic_ofstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "wofstream", "basic_ofstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE }, { "wofstream", "basic_ofstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "fstream", "basic_fstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE }, { "fstream", "basic_fstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "wfstream", "basic_wfstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE }, { "wfstream", "basic_fstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "istringstream", "basic_istringstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE }, { "istringstream", "basic_istringstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "wistringstream", "basic_istringstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE }, { "wistringstream", "basic_istringstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "ostringstream", "basic_ostringstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE }, { "ostringstream", "basic_ostringstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
......
...@@ -24,7 +24,6 @@ int Entry::num=0; ...@@ -24,7 +24,6 @@ int Entry::num=0;
Entry::Entry() Entry::Entry()
{ {
num++; num++;
//printf("New Entry %d\n",num);
parent=0; parent=0;
section = EMPTY_SEC; section = EMPTY_SEC;
sublist = new QList<Entry>; sublist = new QList<Entry>;
...@@ -50,7 +49,6 @@ Entry::Entry() ...@@ -50,7 +49,6 @@ Entry::Entry()
Entry::Entry(const Entry &e) Entry::Entry(const Entry &e)
{ {
num++; num++;
//printf("Copy New Entry %d\n",num);
section = e.section; section = e.section;
protection = e.protection; protection = e.protection;
mtype = e.mtype; mtype = e.mtype;
...@@ -171,7 +169,7 @@ Entry::Entry(const Entry &e) ...@@ -171,7 +169,7 @@ Entry::Entry(const Entry &e)
Entry::~Entry() Entry::~Entry()
{ {
//printf("Deleting entry %d name %s type %x chilren %d\n", //printf("Deleting entry %d name %s type %x children %d\n",
// num,name.data(),section,sublist->count()); // num,name.data(),section,sublist->count());
delete sublist; delete sublist;
delete extends; delete extends;
...@@ -190,7 +188,8 @@ void Entry::addSubEntry(Entry *current) ...@@ -190,7 +188,8 @@ void Entry::addSubEntry(Entry *current)
//printf("Entry %d with name %s type 0x%x added to %s type 0x%x\n", //printf("Entry %d with name %s type 0x%x added to %s type 0x%x\n",
// current->num,current->name.data(),current->section, // current->num,current->name.data(),current->section,
// name.data(),section); // name.data(),section);
//printf("Entry::addSubEntry(%s) %p\n",current->name.data(),current->tArgList); //printf("Entry::addSubEntry(%s:%p) to %s\n",current->name.data(),
// current,name.data());
current->parent=this; current->parent=this;
sublist->append(current); sublist->append(current);
} }
......
...@@ -446,6 +446,10 @@ void HtmlHelp::createProjectFile() ...@@ -446,6 +446,10 @@ void HtmlHelp::createProjectFile()
t << s << endl; t << s << endl;
s = indexFiles.next(); s = indexFiles.next();
} }
t << "tabs.css";
t << "tab_b.gif";
t << "tab_l.gif";
t << "tab_r.gif";
f.close(); f.close();
} }
else else
......
...@@ -2248,7 +2248,16 @@ bool MemberDef::isConstructor() const ...@@ -2248,7 +2248,16 @@ bool MemberDef::isConstructor() const
} }
else // for other languages else // for other languages
{ {
return name()==classDef->localName(); QCString locName = classDef->localName();
int i=locName.find('<');
if (i==-1) // not a template class
{
return name()==locName;
}
else
{
return name()==locName.left(i);
}
} }
} }
else else
......
...@@ -105,6 +105,9 @@ static QCString g_moduleScope; ...@@ -105,6 +105,9 @@ static QCString g_moduleScope;
static QCString g_packageName; static QCString g_packageName;
static bool g_hideClassDocs; static bool g_hideClassDocs;
static QCString g_defVal;
static int g_braceCount;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -310,9 +313,11 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -310,9 +313,11 @@ static void handleCommentBlock(const QCString &doc,bool brief)
static void endOfDef() static void endOfDef()
{ {
current = bodyEntry; if (bodyEntry)
bodyEntry->endBodyLine = yyLineNr; {
bodyEntry = 0; bodyEntry->endBodyLine = yyLineNr;
bodyEntry = 0;
}
newEntry(); newEntry();
//g_insideConstructor = FALSE; //g_insideConstructor = FALSE;
} }
...@@ -436,6 +441,7 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -436,6 +441,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
%x FunctionDec %x FunctionDec
%x FunctionParams %x FunctionParams
%x FunctionBody %x FunctionBody
%x FunctionParamDefVal
/* Class states */ /* Class states */
...@@ -798,17 +804,6 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -798,17 +804,6 @@ STARTDOCSYMS ^{B}"##"/[^#]
} }
current->name = yytext; current->name = yytext;
current->name = current->name.stripWhiteSpace(); current->name = current->name.stripWhiteSpace();
//if (!current->name.isEmpty() && current->name.at(0)=='_')
//{
// current->protection = Private;
//}
//if ((current_root->section&Entry::SCOPE_MASK) &&
// current->name=="__init__") // constructor
//{
// g_insideConstructor = TRUE;
// g_constructorEntry = current;
// newEntry();
//}
} }
{B}"(" { {B}"(" {
...@@ -827,21 +822,19 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -827,21 +822,19 @@ STARTDOCSYMS ^{B}"##"/[^#]
current->argList->getLast()->name = QCString(yytext).stripWhiteSpace(); current->argList->getLast()->name = QCString(yytext).stripWhiteSpace();
current->argList->getLast()->type = ""; current->argList->getLast()->type = "";
} }
"="[^,)\n]+ { // default value "=" { // default value
// TODO: this rule is too simple, need to be able to // TODO: this rule is too simple, need to be able to
// match things like =")" as well! // match things like =")" as well!
QCString defVal=&yytext[1]; QCString defVal=&yytext[1];
if (current->argList->getLast()) g_defVal.resize(0);
{ g_braceCount=0;
current->argList->getLast()->defval=defVal.stripWhiteSpace(); BEGIN(FunctionParamDefVal);
}
} }
")" { // end of parameter list ")" { // end of parameter list
} }
":" { ":" {
lineCount();
g_specialBlock = TRUE; // expecting a docstring g_specialBlock = TRUE; // expecting a docstring
bodyEntry = current; bodyEntry = current;
BEGIN( FunctionBody ); BEGIN( FunctionBody );
...@@ -852,6 +845,36 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -852,6 +845,36 @@ STARTDOCSYMS ^{B}"##"/[^#]
} }
<FunctionParamDefVal>{
"(" { // internal opening brace
g_braceCount++;
g_defVal+=*yytext;
}
"," |
")" {
if (g_braceCount==0) // end of default argument
{
if (current->argList->getLast())
{
current->argList->getLast()->defval=g_defVal.stripWhiteSpace();
}
BEGIN(FunctionParams);
}
else // continue
{
g_braceCount--;
g_defVal+=*yytext;
}
}
. {
g_defVal+=*yytext;
}
\n {
g_defVal+=*yytext;
yyLineNr++;
}
}
<ClassBody>{ <ClassBody>{
\n/{IDENTIFIER}{BB} { // new def at indent 0 \n/{IDENTIFIER}{BB} { // new def at indent 0
...@@ -861,6 +884,13 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -861,6 +884,13 @@ STARTDOCSYMS ^{B}"##"/[^#]
YY_CURRENT_BUFFER->yy_at_bol=TRUE; YY_CURRENT_BUFFER->yy_at_bol=TRUE;
BEGIN(Search); BEGIN(Search);
} }
\n/"##" {
yyLineNr++;
endOfDef();
g_hideClassDocs = FALSE;
YY_CURRENT_BUFFER->yy_at_bol=TRUE;
BEGIN(Search);
}
^{BB}/\n { // skip empty line ^{BB}/\n { // skip empty line
current->program+=yytext; current->program+=yytext;
} }
...@@ -904,13 +934,13 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -904,13 +934,13 @@ STARTDOCSYMS ^{B}"##"/[^#]
current->program+=yytext; current->program+=yytext;
g_specialBlock = FALSE; g_specialBlock = FALSE;
} }
^{POUNDCOMMENT} { // normal comment
current->program+=yytext;
}
{NEWLINE} { {NEWLINE} {
current->program+=*yytext; current->program+=*yytext;
yyLineNr++; yyLineNr++;
} }
^{POUNDCOMMENT} { // normal comment
current->program+=yytext;
}
. { // any character . { // any character
g_specialBlock = FALSE; g_specialBlock = FALSE;
current->program+=*yytext; current->program+=*yytext;
...@@ -926,7 +956,6 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -926,7 +956,6 @@ STARTDOCSYMS ^{B}"##"/[^#]
initTriSingleQuoteBlock(); initTriSingleQuoteBlock();
BEGIN(TripleComment); BEGIN(TripleComment);
} }
} }
<ClassDec>{IDENTIFIER} { <ClassDec>{IDENTIFIER} {
...@@ -1145,7 +1174,7 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -1145,7 +1174,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
// printf("Expected module block %d special=%d\n",g_expectModuleDocs,g_specialBlock); // printf("Expected module block %d special=%d\n",g_expectModuleDocs,g_specialBlock);
if (g_doubleQuote==(yytext[0]=='"')) if (g_doubleQuote==(yytext[0]=='"'))
{ {
if (g_specialBlock /*|| g_expectModuleDocs*/) if (g_specialBlock)
{ {
QCString actualDoc=docBlock; QCString actualDoc=docBlock;
if (!docBlockSpecial) // legacy unformatted docstring if (!docBlockSpecial) // legacy unformatted docstring
...@@ -1157,6 +1186,7 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -1157,6 +1186,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
//{ //{
// actualDoc.prepend("\\namespace "+g_moduleScope+"\\_linebr "); // actualDoc.prepend("\\namespace "+g_moduleScope+"\\_linebr ");
//} //}
//printf("-------> current=%p bodyEntry=%p\n",current,bodyEntry);
handleCommentBlock(actualDoc, FALSE); handleCommentBlock(actualDoc, FALSE);
} }
//g_expectModuleDocs=FALSE; //g_expectModuleDocs=FALSE;
...@@ -1190,7 +1220,7 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -1190,7 +1220,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
docBlock += yytext; docBlock += yytext;
} }
} }
[^"\n \t]+ { [^"'\n \t]+ {
docBlock += yytext; docBlock += yytext;
} }
\n { \n {
...@@ -1423,10 +1453,6 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) ...@@ -1423,10 +1453,6 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
initParser(); initParser();
current = new Entry; current = new Entry;
// Set the python flags
//current_root->python = TRUE;
//current->python = TRUE;
groupEnterFile(yyFileName,yyLineNr); groupEnterFile(yyFileName,yyLineNr);
current->reset(); current->reset();
......
...@@ -3522,8 +3522,8 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -3522,8 +3522,8 @@ IDLATTR ("["[^\]]*"]"){BN}*
{ {
current->name += "-p"; current->name += "-p";
} }
if (current->section == Entry::PROTOCOL_SEC /*|| if (current->section == Entry::PROTOCOL_SEC ||
current->section == Entry::OBJCIMPL_SEC*/) current->section == Entry::OBJCIMPL_SEC)
{ {
unput('{'); // fake start of body unput('{'); // fake start of body
} }
......
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