summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2005-10-24 18:18:56 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2005-10-24 18:18:56 (GMT)
commit32557464b53467b2819e3fb820a7bbc459eb3e30 (patch)
treea3e5426db07e417c276c043b1c2436f169045b49
parentc9ed38abcef60f4ecb9fc08a1ddd936762d5342c (diff)
downloadDoxygen-32557464b53467b2819e3fb820a7bbc459eb3e30.zip
Doxygen-32557464b53467b2819e3fb820a7bbc459eb3e30.tar.gz
Doxygen-32557464b53467b2819e3fb820a7bbc459eb3e30.tar.bz2
Release-1.4.5-20051024
-rw-r--r--INSTALL4
-rw-r--r--README4
-rw-r--r--VERSION2
-rwxr-xr-xconfigure2
-rw-r--r--doc/trouble.doc4
-rw-r--r--src/classdef.cpp2
-rw-r--r--src/code.l4
-rw-r--r--src/commentscan.l2
-rw-r--r--src/dot.cpp1
-rw-r--r--src/doxygen.cpp2
-rw-r--r--src/entry.cpp7
-rw-r--r--src/htmlhelp.cpp4
-rw-r--r--src/memberdef.cpp11
-rw-r--r--src/pyscanner.l86
-rw-r--r--src/scanner.l4
15 files changed, 91 insertions, 48 deletions
diff --git a/INSTALL b/INSTALL
index eadcd9f..a267c4e 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.4.5-20051010
+DOXYGEN Version 1.4.5-20051024
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
-Dimitri van Heesch (10 October 2005)
+Dimitri van Heesch (24 October 2005)
diff --git a/README b/README
index 2d46951..521e50f 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.4.5_20051010
+DOXYGEN Version 1.4.5_20051024
Please read INSTALL for compilation instructions.
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
-Dimitri van Heesch (dimitri@stack.nl) (10 October 2005)
+Dimitri van Heesch (dimitri@stack.nl) (24 October 2005)
diff --git a/VERSION b/VERSION
index c8b030a..17af46e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.4.5-20051010
+1.4.5-20051024
diff --git a/configure b/configure
index 720ac72..7678075 100755
--- a/configure
+++ b/configure
@@ -120,7 +120,7 @@ Options:
--enable-langs list Include support for output languages listed in list.
[default: $f_langs]
--with-doxywizard Build the GUI frontend for doxygen. This
- requires Qt 2.x.x
+ requires Qt 3.3.x
EOF
test "$f_error" = y && exit 1
diff --git a/doc/trouble.doc b/doc/trouble.doc
index 312c163..dc3fbbd 100644
--- a/doc/trouble.doc
+++ b/doc/trouble.doc
@@ -22,7 +22,7 @@
read \ref unix_problems "this section" first.
<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.
-<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
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
@@ -58,7 +58,7 @@
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
- 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
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
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 214da47..99f09b5 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -47,6 +47,7 @@ ClassDef::ClassDef(
: Definition(defFileName,defLine,removeRedundantWhiteSpace(nm),0,0,isSymbol)
{
m_compType=ct;
+ m_isObjC = FALSE;
QCString compoundName=compoundTypeString();
if (fName)
{
@@ -92,7 +93,6 @@ ClassDef::ClassDef(
m_artificial = FALSE;
m_isAbstract = FALSE;
m_isStatic = FALSE;
- m_isObjC = FALSE;
m_isTemplArg = FALSE;
m_membersMerged = FALSE;
m_categoryOf = 0;
diff --git a/src/code.l b/src/code.l
index a8ba916..ac5480c 100644
--- a/src/code.l
+++ b/src/code.l
@@ -1226,6 +1226,7 @@ static void startFontClass(const char *s)
static void writeObjCMethodCall(ObjCCallCtx *ctx)
{
if (ctx==0) return;
+ if (ctx->methodName.isEmpty()) return;
const char *p = ctx->format.data();
//printf("writeObjCMethodCall(%s) obj=%s method=%s\n",
// ctx->format.data(),ctx->objectTypeOrName.data(),ctx->methodName.data());
@@ -2418,6 +2419,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
<ObjCCall,ObjCMName,ObjCSkipStr>"$" { g_currentCtx->format+="$$"; }
<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>\n { g_currentCtx->format+=*yytext; }
diff --git a/src/commentscan.l b/src/commentscan.l
index fe7f171..e5830df 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -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++;
addOutput('\n');
- //printf("functionProto=%s\n",functionProto.data());
+ printf("functionProto=%s\n",functionProto.data());
langParser->parsePrototype(functionProto);
BEGIN( Comment );
}
diff --git a/src/dot.cpp b/src/dot.cpp
index 3cc7e2f..1bc1cf8 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -561,6 +561,7 @@ static QCString convertLabel(const QCString &l)
{
QCString result;
const char *p=l.data();
+ if (p==0) return result;
char c;
while ((c=*p++))
{
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index ff2606a..6bfedd4 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -245,7 +245,7 @@ static STLInfo g_stlinfo[] =
{ "ofstream", "basic_ofstream<char>", 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 },
- { "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 },
{ "wistringstream", "basic_istringstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
{ "ostringstream", "basic_ostringstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
diff --git a/src/entry.cpp b/src/entry.cpp
index 5ce3239..5206b2d 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -24,7 +24,6 @@ int Entry::num=0;
Entry::Entry()
{
num++;
- //printf("New Entry %d\n",num);
parent=0;
section = EMPTY_SEC;
sublist = new QList<Entry>;
@@ -50,7 +49,6 @@ Entry::Entry()
Entry::Entry(const Entry &e)
{
num++;
- //printf("Copy New Entry %d\n",num);
section = e.section;
protection = e.protection;
mtype = e.mtype;
@@ -171,7 +169,7 @@ Entry::Entry(const Entry &e)
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());
delete sublist;
delete extends;
@@ -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",
// current->num,current->name.data(),current->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;
sublist->append(current);
}
diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp
index c8d7187..4836663 100644
--- a/src/htmlhelp.cpp
+++ b/src/htmlhelp.cpp
@@ -446,6 +446,10 @@ void HtmlHelp::createProjectFile()
t << s << endl;
s = indexFiles.next();
}
+ t << "tabs.css";
+ t << "tab_b.gif";
+ t << "tab_l.gif";
+ t << "tab_r.gif";
f.close();
}
else
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 748fb9a..15a95f5 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -2248,7 +2248,16 @@ bool MemberDef::isConstructor() const
}
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
diff --git a/src/pyscanner.l b/src/pyscanner.l
index 0bcab03..15caa43 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -105,6 +105,9 @@ static QCString g_moduleScope;
static QCString g_packageName;
static bool g_hideClassDocs;
+
+static QCString g_defVal;
+static int g_braceCount;
//-----------------------------------------------------------------------------
@@ -310,9 +313,11 @@ static void handleCommentBlock(const QCString &doc,bool brief)
static void endOfDef()
{
- current = bodyEntry;
- bodyEntry->endBodyLine = yyLineNr;
- bodyEntry = 0;
+ if (bodyEntry)
+ {
+ bodyEntry->endBodyLine = yyLineNr;
+ bodyEntry = 0;
+ }
newEntry();
//g_insideConstructor = FALSE;
}
@@ -436,6 +441,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
%x FunctionDec
%x FunctionParams
%x FunctionBody
+%x FunctionParamDefVal
/* Class states */
@@ -798,17 +804,6 @@ STARTDOCSYMS ^{B}"##"/[^#]
}
current->name = yytext;
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}"(" {
@@ -827,21 +822,19 @@ STARTDOCSYMS ^{B}"##"/[^#]
current->argList->getLast()->name = QCString(yytext).stripWhiteSpace();
current->argList->getLast()->type = "";
}
- "="[^,)\n]+ { // default value
+ "=" { // default value
// TODO: this rule is too simple, need to be able to
// match things like =")" as well!
QCString defVal=&yytext[1];
- if (current->argList->getLast())
- {
- current->argList->getLast()->defval=defVal.stripWhiteSpace();
- }
+ g_defVal.resize(0);
+ g_braceCount=0;
+ BEGIN(FunctionParamDefVal);
}
")" { // end of parameter list
}
":" {
- lineCount();
g_specialBlock = TRUE; // expecting a docstring
bodyEntry = current;
BEGIN( FunctionBody );
@@ -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>{
\n/{IDENTIFIER}{BB} { // new def at indent 0
@@ -861,6 +884,13 @@ STARTDOCSYMS ^{B}"##"/[^#]
YY_CURRENT_BUFFER->yy_at_bol=TRUE;
BEGIN(Search);
}
+ \n/"##" {
+ yyLineNr++;
+ endOfDef();
+ g_hideClassDocs = FALSE;
+ YY_CURRENT_BUFFER->yy_at_bol=TRUE;
+ BEGIN(Search);
+ }
^{BB}/\n { // skip empty line
current->program+=yytext;
}
@@ -904,13 +934,13 @@ STARTDOCSYMS ^{B}"##"/[^#]
current->program+=yytext;
g_specialBlock = FALSE;
}
- ^{POUNDCOMMENT} { // normal comment
- current->program+=yytext;
- }
{NEWLINE} {
current->program+=*yytext;
yyLineNr++;
}
+ ^{POUNDCOMMENT} { // normal comment
+ current->program+=yytext;
+ }
. { // any character
g_specialBlock = FALSE;
current->program+=*yytext;
@@ -926,7 +956,6 @@ STARTDOCSYMS ^{B}"##"/[^#]
initTriSingleQuoteBlock();
BEGIN(TripleComment);
}
-
}
<ClassDec>{IDENTIFIER} {
@@ -1145,7 +1174,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
// printf("Expected module block %d special=%d\n",g_expectModuleDocs,g_specialBlock);
if (g_doubleQuote==(yytext[0]=='"'))
{
- if (g_specialBlock /*|| g_expectModuleDocs*/)
+ if (g_specialBlock)
{
QCString actualDoc=docBlock;
if (!docBlockSpecial) // legacy unformatted docstring
@@ -1157,6 +1186,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
//{
// actualDoc.prepend("\\namespace "+g_moduleScope+"\\_linebr ");
//}
+ //printf("-------> current=%p bodyEntry=%p\n",current,bodyEntry);
handleCommentBlock(actualDoc, FALSE);
}
//g_expectModuleDocs=FALSE;
@@ -1190,7 +1220,7 @@ STARTDOCSYMS ^{B}"##"/[^#]
docBlock += yytext;
}
}
- [^"\n \t]+ {
+ [^"'\n \t]+ {
docBlock += yytext;
}
\n {
@@ -1423,10 +1453,6 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
initParser();
current = new Entry;
- // Set the python flags
- //current_root->python = TRUE;
- //current->python = TRUE;
-
groupEnterFile(yyFileName,yyLineNr);
current->reset();
diff --git a/src/scanner.l b/src/scanner.l
index d037938..4f05a10 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -3522,8 +3522,8 @@ IDLATTR ("["[^\]]*"]"){BN}*
{
current->name += "-p";
}
- if (current->section == Entry::PROTOCOL_SEC /*||
- current->section == Entry::OBJCIMPL_SEC*/)
+ if (current->section == Entry::PROTOCOL_SEC ||
+ current->section == Entry::OBJCIMPL_SEC)
{
unput('{'); // fake start of body
}