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

Release-1.2.17-20020728

parent a2bf2ebc
...@@ -3,4 +3,4 @@ DOXYGEN Version 1.2.17 ...@@ -3,4 +3,4 @@ DOXYGEN Version 1.2.17
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (15 July 2002) Dimitri van Heesch (28 July 2002)
...@@ -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) (15 July 2002) Dimitri van Heesch (dimitri@stack.nl) (28 July 2002)
...@@ -309,12 +309,13 @@ void Wizard::refreshCaption() ...@@ -309,12 +309,13 @@ void Wizard::refreshCaption()
void Wizard::about() void Wizard::about()
{ {
QMessageBox::about(this, "DoxyWizard", QCString text(4096);
"<qt><center>A tool to create and edit configuration files " text.sprintf( "<qt><center>A tool to create and edit configuration files "
"that can be read by doxygen.</center><p>" "that can be read by doxygen version %s.</center><p>"
"<center>Written by Dimitri van Heesch</center><p>" "<center>Written by Dimitri van Heesch</center><p>"
"<center>(c) 2000-2002</center></qt>" "<center>(c) 2000-2002</center></qt>",versionString
); );
QMessageBox::about(this, "DoxyWizard",text);
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
......
...@@ -15,23 +15,31 @@ ...@@ -15,23 +15,31 @@
#include "inputbool.h" #include "inputbool.h"
#include "pagewidget.h" #include "pagewidget.h"
#include <qwindowsstyle.h> #include <qwindowsstyle.h>
#include <qlayout.h>
InputBool::InputBool( const QString & text, PageWidget * parent, bool &flag ) InputBool::InputBool( const QString & text, PageWidget * parent, bool &flag )
: QCheckBox( text, parent->getLayout() ), state(flag) : /*QCheckBox( text, parent->getLayout() )*/ QWidget(parent->getLayout()), state(flag)
{ {
QBoxLayout *layout = new QHBoxLayout(this);
cb = new QCheckBox(text,this);
layout->addWidget(cb);
layout->addStretch(10);
QWindowsStyle *winStyle = new QWindowsStyle(); QWindowsStyle *winStyle = new QWindowsStyle();
setChecked( flag ); cb->setChecked( flag );
setStyle( winStyle ); cb->setStyle( winStyle );
setMinimumSize( sizeHint() ); cb->setMinimumSize( sizeHint() );
connect( this, SIGNAL(toggled(bool)), SLOT(setState(bool)) ); connect( cb, SIGNAL(toggled(bool)), SLOT(setState(bool)) );
parent->addWidget(this); parent->addWidget(this);
layout->activate();
} }
void InputBool::init() void InputBool::init()
{ {
setChecked(state); cb->setChecked(state);
} }
void InputBool::setState( bool s ) void InputBool::setState( bool s )
...@@ -39,7 +47,7 @@ void InputBool::setState( bool s ) ...@@ -39,7 +47,7 @@ void InputBool::setState( bool s )
if (state!=s) if (state!=s)
{ {
emit changed(); emit changed();
emit toggle(text(),s); emit toggle(cb->text(),s);
} }
state=s; state=s;
} }
......
...@@ -15,13 +15,14 @@ ...@@ -15,13 +15,14 @@
#ifndef _INPUTBOOL_H #ifndef _INPUTBOOL_H
#define _INPUTBOOL_H #define _INPUTBOOL_H
#include <qwidget.h>
#include <qcheckbox.h> #include <qcheckbox.h>
#include "input.h" #include "input.h"
class PageWidget; class PageWidget;
class InputBool : public QCheckBox, public IInput class InputBool : public QWidget, /*QCheckBox,*/ public IInput
{ {
Q_OBJECT Q_OBJECT
...@@ -29,7 +30,7 @@ class InputBool : public QCheckBox, public IInput ...@@ -29,7 +30,7 @@ class InputBool : public QCheckBox, public IInput
InputBool( const QString &text, PageWidget *parent, bool &flag ); InputBool( const QString &text, PageWidget *parent, bool &flag );
~InputBool(){}; ~InputBool(){};
void init(); void init();
void setEnabled(bool b) { QCheckBox::setEnabled(b); } void setEnabled(bool b) { cb->setEnabled(b); }
QObject *qobject() { return this; } QObject *qobject() { return this; }
bool getState() const { return state; } bool getState() const { return state; }
...@@ -42,6 +43,7 @@ class InputBool : public QCheckBox, public IInput ...@@ -42,6 +43,7 @@ class InputBool : public QCheckBox, public IInput
private: private:
bool &state; bool &state;
QCheckBox *cb;
}; };
......
...@@ -711,7 +711,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -711,7 +711,7 @@ followed by the descriptions of the tags grouped by category.
functions referencing it will be listed. functions referencing it will be listed.
\anchor cfg_references_relation \anchor cfg_references_relation
<dt>\c REFERENCE_RELATION <dd> <dt>\c REFERENCES_RELATION <dd>
\addindex REFERENCES_RELATION \addindex REFERENCES_RELATION
If the \c REFERENCES_RELATION tag is set to \c YES (the default) If the \c REFERENCES_RELATION tag is set to \c YES (the default)
then for each documented function all documented entities then for each documented function all documented entities
......
...@@ -179,8 +179,8 @@ Thanks go to: ...@@ -179,8 +179,8 @@ Thanks go to:
<li>Petr Prikryl for coordinating the internationalisation support. <li>Petr Prikryl for coordinating the internationalisation support.
All language maintainers for providing translations into many languages. All language maintainers for providing translations into many languages.
<li>Erik Jan Lingen of <a href="http://www.habanera.nl/">Habanera</a>, Mark <li>Erik Jan Lingen of <a href="http://www.habanera.nl/">Habanera</a>, Mark
Roddy, Paul Schwartz, Charles Duffy, Vadym Voznyuk, and Philip Walton Roddy, Paul Schwartz, Charles Duffy, Vadym Voznyuk, Philip Walton and
for donating money. Dwight Browne for donating money.
<li>The Comms group of <a href="http://www.symbian.com">Symbian</a> for donating <li>The Comms group of <a href="http://www.symbian.com">Symbian</a> for donating
an ultra cool <a href="http://www.psion.com/revoplus>Revo plus</a> an ultra cool <a href="http://www.psion.com/revoplus>Revo plus</a>
organizer! organizer!
......
...@@ -354,6 +354,13 @@ On some platforms (such as OpenBSD) using some versions of gcc with ...@@ -354,6 +354,13 @@ On some platforms (such as OpenBSD) using some versions of gcc with
such as config.cpp. As a workaround use --debug as a configure option such as config.cpp. As a workaround use --debug as a configure option
or omit the -O2 for the particular files in the Makefile. or omit the -O2 for the particular files in the Makefile.
<b>Dot problems</b>
Due to a change in the way image maps are generated, older versions
of doxygen (<=1.2.17) will not work correctly with newer versions of
graphviz (>=1.8.8). The effect of this incompatibility is that
generated graphs in HTML are not properly clickable.
\subsection install_src_windows Compiling from source on Windows \subsection install_src_windows Compiling from source on Windows
Currently, I have only compiled doxygen for Windows using Microsoft's Currently, I have only compiled doxygen for Windows using Microsoft's
......
...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means ...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time. languages other than English (the default) at configuration time.
Currently (version 1.2.16-20020707), 27 languages Currently (version 1.2.14-20020317), 27 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Brazilian Portuguese, Chinese, Chinese Traditional, Croatian, Czech, Brazilian Portuguese, Chinese, Chinese Traditional, Croatian, Czech,
Danish, Dutch, English, Finnish, French, Danish, Dutch, English, Finnish, French,
...@@ -55,7 +55,7 @@ when the translator was updated. ...@@ -55,7 +55,7 @@ when the translator was updated.
<TD>Brazilian Portuguese</TD> <TD>Brazilian Portuguese</TD>
<TD>Fabio "FJTC" Jun Takada Chino</TD> <TD>Fabio "FJTC" Jun Takada Chino</TD>
<TD>chino@NOSPAM.icmc.sc.usp.br</TD> <TD>chino@NOSPAM.icmc.sc.usp.br</TD>
<TD>up-to-date</TD> <TD>1.2.17</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Chinese</TD> <TD>Chinese</TD>
...@@ -73,13 +73,13 @@ when the translator was updated. ...@@ -73,13 +73,13 @@ when the translator was updated.
<TD>Croatian</TD> <TD>Croatian</TD>
<TD>Boris Bralo</TD> <TD>Boris Bralo</TD>
<TD>boris.bralo@NOSPAM.zg.tel.hr</TD> <TD>boris.bralo@NOSPAM.zg.tel.hr</TD>
<TD>up-to-date</TD> <TD>1.2.17</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Czech</TD> <TD>Czech</TD>
<TD>Petr P&#x0159;ikryl</TD> <TD>Petr P&#x0159;ikryl</TD>
<TD>prikrylp@NOSPAM.skil.cz</TD> <TD>prikrylp@NOSPAM.skil.cz</TD>
<TD>up-to-date</TD> <TD>1.2.17</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Danish</TD> <TD>Danish</TD>
...@@ -109,13 +109,13 @@ when the translator was updated. ...@@ -109,13 +109,13 @@ when the translator was updated.
<TD>French</TD> <TD>French</TD>
<TD>Xavier Outhier</TD> <TD>Xavier Outhier</TD>
<TD>xouthier@NOSPAM.yahoo.fr</TD> <TD>xouthier@NOSPAM.yahoo.fr</TD>
<TD>up-to-date</TD> <TD>1.2.17</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>German</TD> <TD>German</TD>
<TD>Jens Seidel<br>Jens Breitenstein</TD> <TD>Jens Seidel<br>Jens Breitenstein</TD>
<TD>jensseidel@NOSPAM.users.sf.net<br>Jens.Breitenstein@NOSPAM.tlc.de</TD> <TD>jensseidel@NOSPAM.users.sf.net<br>Jens.Breitenstein@NOSPAM.tlc.de</TD>
<TD>1.2.16</TD> <TD>1.2.17</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Greek</TD> <TD>Greek</TD>
...@@ -133,13 +133,13 @@ when the translator was updated. ...@@ -133,13 +133,13 @@ when the translator was updated.
<TD>Italian</TD> <TD>Italian</TD>
<TD>Alessandro Falappa<br>Ahmed Aldo Faisal</TD> <TD>Alessandro Falappa<br>Ahmed Aldo Faisal</TD>
<TD>alessandro@NOSPAM.falappa.net<br>aaf23@NOSPAM.cam.ac.uk</TD> <TD>alessandro@NOSPAM.falappa.net<br>aaf23@NOSPAM.cam.ac.uk</TD>
<TD>up-to-date</TD> <TD>1.2.17</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Japanese</TD> <TD>Japanese</TD>
<TD>Ryunosuke Sato<br>Kenji Nagamatsu</TD> <TD>Ryunosuke Sato<br>Kenji Nagamatsu</TD>
<TD>puyo@NOSPAM.mint.freemail.ne.jp<br>naga@NOSPAM.joyful.club.ne.jp</TD> <TD>puyo@NOSPAM.mint.freemail.ne.jp<br>naga@NOSPAM.joyful.club.ne.jp</TD>
<TD>up-to-date</TD> <TD>1.2.17</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Korean</TD> <TD>Korean</TD>
...@@ -163,7 +163,7 @@ when the translator was updated. ...@@ -163,7 +163,7 @@ when the translator was updated.
<TD>Portuguese</TD> <TD>Portuguese</TD>
<TD>Rui Godinho Lopes</TD> <TD>Rui Godinho Lopes</TD>
<TD>ruiglopes@NOSPAM.yahoo.com</TD> <TD>ruiglopes@NOSPAM.yahoo.com</TD>
<TD>up-to-date</TD> <TD>1.2.17</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Romanian</TD> <TD>Romanian</TD>
...@@ -175,7 +175,7 @@ when the translator was updated. ...@@ -175,7 +175,7 @@ when the translator was updated.
<TD>Russian</TD> <TD>Russian</TD>
<TD>Alexandr Chelpanov</TD> <TD>Alexandr Chelpanov</TD>
<TD>cav@NOSPAM.cryptopro.ru</TD> <TD>cav@NOSPAM.cryptopro.ru</TD>
<TD>up-to-date</TD> <TD>1.2.17</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Serbian</TD> <TD>Serbian</TD>
...@@ -224,16 +224,16 @@ when the translator was updated. ...@@ -224,16 +224,16 @@ when the translator was updated.
{\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\ {\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
\hline \hline
\hline \hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & up-to-date \\ Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & 1.2.17 \\
\hline \hline
Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & 1.2.13 \\ Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & 1.2.13 \\
& Wang Weihan & {\tt wangweihan@capinfo.com.cn} & \\ & Wang Weihan & {\tt wangweihan@capinfo.com.cn} & \\
\hline \hline
Chinese Traditional & Gary Lee & {\tt garylee@ecosine.com.tw} & 1.2.16 \\ Chinese Traditional & Gary Lee & {\tt garylee@ecosine.com.tw} & 1.2.16 \\
\hline \hline
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\ Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & 1.2.17 \\
\hline \hline
Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\ Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & 1.2.17 \\
\hline \hline
Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & 1.2.7 \\ Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & 1.2.7 \\
\hline \hline
...@@ -243,19 +243,19 @@ when the translator was updated. ...@@ -243,19 +243,19 @@ when the translator was updated.
\hline \hline
Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & obsolete \\ Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & obsolete \\
\hline \hline
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & up-to-date \\ French & Xavier Outhier & {\tt xouthier@yahoo.fr} & 1.2.17 \\
\hline \hline
German & Jens Seidel & {\tt jensseidel@users.sf.net} & 1.2.16 \\ German & Jens Seidel & {\tt jensseidel@users.sf.net} & 1.2.17 \\
& Jens Breitenstein & {\tt Jens.Breitenstein@tlc.de} & \\ & Jens Breitenstein & {\tt Jens.Breitenstein@tlc.de} & \\
\hline \hline
Greek & Harry Kalogirou & {\tt harkal@rainbow.cs.unipi.gr} & 1.2.11 \\ Greek & Harry Kalogirou & {\tt harkal@rainbow.cs.unipi.gr} & 1.2.11 \\
\hline \hline
Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\ Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\
\hline \hline
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\ Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & 1.2.17 \\
& Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\ & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\
\hline \hline
Japanese & Ryunosuke Sato & {\tt puyo@mint.freemail.ne.jp} & up-to-date \\ Japanese & Ryunosuke Sato & {\tt puyo@mint.freemail.ne.jp} & 1.2.17 \\
& Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & \\ & Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & \\
\hline \hline
Korean & Richard Kim & {\tt ryk@dspwiz.com} & 1.2.13 \\ Korean & Richard Kim & {\tt ryk@dspwiz.com} & 1.2.13 \\
...@@ -265,11 +265,11 @@ when the translator was updated. ...@@ -265,11 +265,11 @@ when the translator was updated.
Polish & Piotr Kaminski & {\tt Piotr.Kaminski@ctm.gdynia.pl} & 1.2.16 \\ Polish & Piotr Kaminski & {\tt Piotr.Kaminski@ctm.gdynia.pl} & 1.2.16 \\
& Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & \\ & Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & \\
\hline \hline
Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & up-to-date \\ Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.2.17 \\
\hline \hline
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\ Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\
\hline \hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\ Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & 1.2.17 \\
\hline \hline
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.2.16 \\ Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.2.16 \\
\hline \hline
......
...@@ -185,7 +185,7 @@ basically two options: ...@@ -185,7 +185,7 @@ basically two options:
about structural commands. about structural commands.
</ol> </ol>
Files can only be documented using the second option, since there is Files can only be documented using the second option, since there is
no way to but a documentation block before a file. Of course, file members no way to put a documentation block before a file. Of course, file members
(functions, variable, typedefs, defines) do not need an explicit (functions, variable, typedefs, defines) do not need an explicit
structural command; just putting a special documentation block in front or structural command; just putting a special documentation block in front or
behind them will do. behind them will do.
......
...@@ -750,7 +750,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, OutputList &briefOutput, ...@@ -750,7 +750,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, OutputList &briefOutput,
void ClassDef::writeDocumentation(OutputList &ol) void ClassDef::writeDocumentation(OutputList &ol)
{ {
// write title // write title
QCString pageTitle=name().copy(); QCString pageTitle=displayName().copy();
QCString pageType; QCString pageType;
QCString cType=compoundTypeString(); QCString cType=compoundTypeString();
toupper(cType.at(0)); toupper(cType.at(0));
......
...@@ -109,7 +109,7 @@ static int yyread(char *buf,int max_size) ...@@ -109,7 +109,7 @@ static int yyread(char *buf,int max_size)
copyToOutput(yytext+i,yyleng-i); copyToOutput(yytext+i,yyleng-i);
BEGIN(SComment); BEGIN(SComment);
} }
<Scan>"//"[\/!].*\n { /* one line C++ comment */ <Scan>"//".*\n { /* one line C++ comment */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
<Scan>"/*" { /* start of a C comment */ <Scan>"/*" { /* start of a C comment */
......
...@@ -1557,6 +1557,13 @@ void Config::create() ...@@ -1557,6 +1557,13 @@ void Config::create()
"commands in the documentation.\n", "commands in the documentation.\n",
TRUE TRUE
); );
cb = addBool(
"GENERATE_DEPRECATEDLIST",
"The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \n"
"disable (NO) the deprecated list. This list is created by putting "
"\\deprecated commands in the documentation.\n",
TRUE
);
cl = addList( cl = addList(
"ALIASES", "ALIASES",
"This tag can be used to specify a number of aliases that acts \n" "This tag can be used to specify a number of aliases that acts \n"
...@@ -1732,7 +1739,7 @@ void Config::create() ...@@ -1732,7 +1739,7 @@ void Config::create()
"FILTER_SOURCE_FILES", "FILTER_SOURCE_FILES",
"If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \n" "If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \n"
"INPUT_FILTER) will be used to filter the input files when producing source \n" "INPUT_FILTER) will be used to filter the input files when producing source \n"
"files to browse. \n", "files to browse (i.e. when SOURCE_BROWSER is set to YES). \n",
FALSE FALSE
); );
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
......
...@@ -50,6 +50,7 @@ Definition::Definition(const char *df,int dl, ...@@ -50,6 +50,7 @@ Definition::Definition(const char *df,int dl,
m_todoId=0; m_todoId=0;
m_testId=0; m_testId=0;
m_bugId=0; m_bugId=0;
m_deprecatedId=0;
m_outerScope=Doxygen::globalScope; m_outerScope=Doxygen::globalScope;
m_partOfGroups=0; m_partOfGroups=0;
m_specialListItems=0; m_specialListItems=0;
......
...@@ -164,6 +164,7 @@ class Definition ...@@ -164,6 +164,7 @@ class Definition
int m_testId; // id for test list item int m_testId; // id for test list item
int m_todoId; // id for todo list item int m_todoId; // id for todo list item
int m_bugId; // id for bug list item int m_bugId; // id for bug list item
int m_deprecatedId; // id for deprecated list item
int m_docLine; int m_docLine;
QCString m_docFile; QCString m_docFile;
int m_briefLine; int m_briefLine;
......
...@@ -1692,9 +1692,11 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? ...@@ -1692,9 +1692,11 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))?
} }
<DocScan>"\\todo "[0-9]+ | /* generated labels */ <DocScan>"\\todo "[0-9]+ | /* generated labels */
<DocScan>"\\test "[0-9]+ | <DocScan>"\\test "[0-9]+ |
<DocScan>"\\bug "[0-9]+ { <DocScan>"\\bug "[0-9]+ |
<DocScan>"\\deprecated "[0-9]+ {
writeSpecialItem(yytext); writeSpecialItem(yytext);
} }
/*
<DocScan>{CMD}"deprecated"{BSEP} { <DocScan>{CMD}"deprecated"{BSEP} {
if (insideItemList) if (insideItemList)
{ {
...@@ -1714,6 +1716,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? ...@@ -1714,6 +1716,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))?
outDoc->writeDescItem(); outDoc->writeDescItem();
} }
} }
*/
<DocScan>"$"[a-zA-Z_0-9]+":"[^\n\$]+"$" { // RCS tag <DocScan>"$"[a-zA-Z_0-9]+":"[^\n\$]+"$" { // RCS tag
QCString tagName(&yytext[1]); QCString tagName(&yytext[1]);
int i=tagName.find(':'); int i=tagName.find(':');
......
...@@ -75,7 +75,24 @@ static bool convertMapFile(QTextStream &t,const char *mapName) ...@@ -75,7 +75,24 @@ static bool convertMapFile(QTextStream &t,const char *mapName)
//printf("ReadLine `%s'\n",buf); //printf("ReadLine `%s'\n",buf);
if (strncmp(buf,"rect",4)==0) if (strncmp(buf,"rect",4)==0)
{ {
// obtain the url and the coordinates in the order used by graphviz-1.5
sscanf(buf,"rect %s %d,%d %d,%d",url,&x1,&y2,&x2,&y1); sscanf(buf,"rect %s %d,%d %d,%d",url,&x1,&y2,&x2,&y1);
// later versions of graphviz corrected the y coordinate order
// the rule is that y2>=y1, so test and switch if needed
if (y2<y1)
{
int temp=y2;
y2=y1;
y1=temp;
}
// there shouldn't be any need for this for known versions of graphviz
// but it can't do any harm to check that x follows the rules as well
if (x2<x1)
{
int temp=x2;
x2=x1;
x1=temp;
}
char *refPtr = url; char *refPtr = url;
char *urlPtr = strchr(url,'$'); char *urlPtr = strchr(url,'$');
//printf("url=`%s'\n",url); //printf("url=`%s'\n",url);
...@@ -230,7 +247,7 @@ class DotNodeList : public QList<DotNode> ...@@ -230,7 +247,7 @@ class DotNodeList : public QList<DotNode>
/*! helper function that deletes all nodes in a connected graph, given /*! helper function that deletes all nodes in a connected graph, given
* one of the graph's nodes * one of the graph's nodes
*/ */
static void deleteNodes(DotNode *node,SIntDict<DotNode> *skipNodes=0) static void deleteNodes(DotNode *node,SDict<DotNode> *skipNodes=0)
{ {
//printf("deleteNodes skipNodes=%p\n",skipNodes); //printf("deleteNodes skipNodes=%p\n",skipNodes);
static DotNodeList deletedNodes; static DotNodeList deletedNodes;
...@@ -311,7 +328,7 @@ void DotNode::removeParent(DotNode *n) ...@@ -311,7 +328,7 @@ void DotNode::removeParent(DotNode *n)
if (m_parents) m_parents->remove(n); if (m_parents) m_parents->remove(n);
} }
void DotNode::deleteNode(DotNodeList &deletedList,SIntDict<DotNode> *skipNodes) void DotNode::deleteNode(DotNodeList &deletedList,SDict<DotNode> *skipNodes)
{ {
if (m_deleted) return; // avoid recursive loops in case the graph has cycles if (m_deleted) return; // avoid recursive loops in case the graph has cycles
m_deleted=TRUE; m_deleted=TRUE;
...@@ -337,7 +354,7 @@ void DotNode::deleteNode(DotNodeList &deletedList,SIntDict<DotNode> *skipNodes) ...@@ -337,7 +354,7 @@ void DotNode::deleteNode(DotNodeList &deletedList,SIntDict<DotNode> *skipNodes)
} }
// add this node to the list of deleted nodes. // add this node to the list of deleted nodes.
//printf("skipNodes=%p find(%p)=%p\n",skipNodes,this,skipNodes ? skipNodes->find((int)this) : 0); //printf("skipNodes=%p find(%p)=%p\n",skipNodes,this,skipNodes ? skipNodes->find((int)this) : 0);
if (skipNodes==0 || skipNodes->find((int)this)==0) if (skipNodes==0 || skipNodes->find((char*)this)==0)
{ {
//printf("deleting\n"); //printf("deleting\n");
deletedList.append(this); deletedList.append(this);
...@@ -933,13 +950,13 @@ DotGfxHierarchyTable::DotGfxHierarchyTable() ...@@ -933,13 +950,13 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
DotGfxHierarchyTable::~DotGfxHierarchyTable() DotGfxHierarchyTable::~DotGfxHierarchyTable()
{ {
//printf("DotGfxHierarchyTable::~DotGfxHierarchyTable\n"); //printf("DotGfxHierarchyTable::~DotGfxHierarchyTable\n");
SIntDict<DotNode> skipNodes(17); SDict<DotNode> skipNodes(17);
skipNodes.setAutoDelete(TRUE); skipNodes.setAutoDelete(TRUE);
DotNode *n = m_rootNodes->first(); DotNode *n = m_rootNodes->first();
while (n) while (n)
{ {
//printf("adding %s %p\n",n->label().data(),n); //printf("adding %s %p\n",n->label().data(),n);
skipNodes.append((int)n,n); skipNodes.append((char*)n,n);
n=m_rootNodes->next(); n=m_rootNodes->next();
} }
n = m_rootNodes->first(); n = m_rootNodes->first();
......
...@@ -69,7 +69,7 @@ class DotNode ...@@ -69,7 +69,7 @@ class DotNode
); );
void setDistance(int distance); void setDistance(int distance);
void addParent(DotNode *n); void addParent(DotNode *n);
void deleteNode(DotNodeList &deletedList,SIntDict<DotNode> *skipNodes=0); void deleteNode(DotNodeList &deletedList,SDict<DotNode> *skipNodes=0);
void removeChild(DotNode *n); void removeChild(DotNode *n);
void removeParent(DotNode *n); void removeParent(DotNode *n);
void write(QTextStream &t,GraphOutputFormat f,bool topDown,bool toChildren, void write(QTextStream &t,GraphOutputFormat f,bool topDown,bool toChildren,
......
...@@ -2541,6 +2541,107 @@ static QDict<int> *getTemplateArgumentsInName(ArgumentList *templateArguments,co ...@@ -2541,6 +2541,107 @@ static QDict<int> *getTemplateArgumentsInName(ArgumentList *templateArguments,co
return templateNames; return templateNames;
} }
/*! Searches a class from within the context of \a cd and returns its
* definition if found (otherwise 0 is returned).
* This function differs from getResolvedClass in that it also takes
* using declarations and definition into account.
*/
ClassDef *findClassWithinClassContext(ClassDef *cd,const QCString &name)
{
ClassDef *result=0;
// try using of namespaces in namespace scope
NamespaceDef *nd=cd->getNamespaceDef();
FileDef *fd=cd->getFileDef();
if (nd) // class is inside a namespace
{
QCString fName = nd->name()+"::"+name;
result = getResolvedClass(cd,fName);
if (result && result!=cd)
{
return result;
}
NamespaceList *nl = nd->getUsedNamespaces();
if (nl) // try to prepend any of the using namespace scopes.
{
NamespaceListIterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) ; ++nli)
{
fName = nd->name()+"::"+name;
result = getResolvedClass(cd,fName);
if (result && result!=cd) return result;
}
}
ClassList *cl = nd->getUsedClasses();
if (cl)
{
ClassListIterator cli(*cl);
ClassDef *ucd;
for (cli.toFirst(); (ucd=cli.current()) ; ++cli)
{
if (rightScopeMatch(ucd->name(),name))
{
return ucd;
}
}
}
// TODO: check any inbetween namespaces as well!
if (fd) // and in the global namespace
{
ClassList *cl = fd->getUsedClasses();
if (cl)
{
ClassListIterator cli(*cl);
ClassDef *ucd;
for (cli.toFirst(); (ucd=cli.current()); ++cli)
{
if (rightScopeMatch(ucd->name(),name))
{
return ucd;
}
}
}
}
}
// try using of namespaces in file scope
if (fd)
{
// look for the using statement in this file in which the
// class was found
NamespaceList *nl = fd->getUsedNamespaces();
if (nl) // try to prepend any of the using namespace scopes.
{
NamespaceListIterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) ; ++nli)
{
QCString fName = nd->name()+"::"+name;
result=getResolvedClass(cd,fName);
if (result && result!=cd)
{
return result;
}
}
}
ClassList *cl = fd->getUsedClasses();
if (cl)
{
ClassListIterator cli(*cl);
ClassDef *ucd;
for (cli.toFirst(); (ucd=cli.current()) ; ++cli)
{
if (rightScopeMatch(ucd->name(),name))
{
return ucd;
}
}
}
}
return getResolvedClass(cd,name);
}
enum FindBaseClassRelation_Mode enum FindBaseClassRelation_Mode
{ {
...@@ -2586,6 +2687,7 @@ static void findUsedClassesForClass(Entry *root, ...@@ -2586,6 +2687,7 @@ static void findUsedClassesForClass(Entry *root,
QCString usedClassName; QCString usedClassName;
QCString templSpec; QCString templSpec;
bool found=FALSE; bool found=FALSE;
// the type can contain template variables, replace them if present
if (actualArgs) if (actualArgs)
{ {
type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs); type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs);
...@@ -2593,12 +2695,17 @@ static void findUsedClassesForClass(Entry *root, ...@@ -2593,12 +2695,17 @@ static void findUsedClassesForClass(Entry *root,
//printf("findUsedClassesForClass(%s)=%s\n",masterCd->name().data(),type.data()); //printf("findUsedClassesForClass(%s)=%s\n",masterCd->name().data(),type.data());
while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec)) while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec))
{ {
// the name could be a type definition, resolve it
// TODO: recursive typedef resolution
QCString typeName = resolveTypeDef(masterCd,usedClassName); QCString typeName = resolveTypeDef(masterCd,usedClassName);
// add any template arguments to the class
QCString usedName = usedClassName+templSpec; QCString usedName = usedClassName+templSpec;
if (!typeName.isEmpty())
{ //if (!typeName.isEmpty())
usedName=typeName; //{
} // usedName=typeName;
//}
//printf("usedName=`%s'\n",usedName.data()); //printf("usedName=`%s'\n",usedName.data());
bool delTempNames=FALSE; bool delTempNames=FALSE;
...@@ -2642,11 +2749,16 @@ static void findUsedClassesForClass(Entry *root, ...@@ -2642,11 +2749,16 @@ static void findUsedClassesForClass(Entry *root,
if (!found) if (!found)
{ {
Definition *scope=masterCd->getOuterScope();
ClassDef *usedCd=0; ClassDef *usedCd=0;
#if 0
Definition *scope=masterCd->getOuterScope();
do do
{ {
QCString scopeName = scope ? scope->qualifiedName().data() : 0; // TODO: also consider using declarations and directives
// as done for inheritance relations.
QCString scopeName;
if (scope) scopeName=scope->qualifiedName();
if (!scopeName.isEmpty()) if (!scopeName.isEmpty())
{ {
usedCd=getResolvedClass(masterCd,scopeName+"::"+usedName,0,&templSpec); usedCd=getResolvedClass(masterCd,scopeName+"::"+usedName,0,&templSpec);
...@@ -2661,8 +2773,10 @@ static void findUsedClassesForClass(Entry *root, ...@@ -2661,8 +2773,10 @@ static void findUsedClassesForClass(Entry *root,
} }
if (scope) scope=scope->getOuterScope(); if (scope) scope=scope->getOuterScope();
} while (scope && usedCd==0); } while (scope && usedCd==0);
#endif
usedCd = findClassWithinClassContext(masterCd,usedName);
if (usedCd) if (usedCd && usedCd!=masterCd)
{ {
found=TRUE; found=TRUE;
Debug::print(Debug::Classes,0," Adding used class `%s'\n", usedCd->name().data()); Debug::print(Debug::Classes,0," Adding used class `%s'\n", usedCd->name().data());
...@@ -2944,7 +3058,6 @@ static bool findClassRelation( ...@@ -2944,7 +3058,6 @@ static bool findClassRelation(
//printf("cd=%p baseClass=%p\n",cd,baseClass); //printf("cd=%p baseClass=%p\n",cd,baseClass);
bool found=baseClass!=0 && (baseClass!=cd || mode==TemplateInstances); bool found=baseClass!=0 && (baseClass!=cd || mode==TemplateInstances);
NamespaceDef *nd=cd->getNamespaceDef();
if (!found && (i=baseClassName.findRev("::"))!=-1) if (!found && (i=baseClassName.findRev("::"))!=-1)
{ {
// replace any namespace aliases // replace any namespace aliases
...@@ -2953,9 +3066,19 @@ static bool findClassRelation( ...@@ -2953,9 +3066,19 @@ static bool findClassRelation(
found=baseClass!=0 && baseClass!=cd; found=baseClass!=0 && baseClass!=cd;
} }
FileDef *fd=cd->getFileDef(); //printf("root->name=%s biName=%s baseClassName=%s\n",
// root->name.data(),biName.data(),baseClassName.data());
//FileDef *fd=cd->getFileDef();
//NamespaceDef *nd=cd->getNamespaceDef();
if (!found) if (!found)
{ {
baseClass=findClassWithinClassContext(cd,baseClassName);
//printf("findClassWithinClassContext(%s,%s)=%p\n",
// cd->name().data(),baseClassName.data(),baseClass);
found = baseClass!=0 && baseClass!=cd;
#if 0
if (fd) if (fd)
{ {
// look for the using statement in this file in which the // look for the using statement in this file in which the
...@@ -2968,7 +3091,8 @@ static bool findClassRelation( ...@@ -2968,7 +3091,8 @@ static bool findClassRelation(
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli) for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{ {
QCString fName = nd->name()+"::"+baseClassName; QCString fName = nd->name()+"::"+baseClassName;
found = (baseClass=getResolvedClass(cd,fName))!=0 && baseClass!=cd && found = (baseClass=getResolvedClass(cd,fName))!=0 &&
baseClass!=cd &&
root->name!=fName; root->name!=fName;
} }
} }
...@@ -3002,7 +3126,8 @@ static bool findClassRelation( ...@@ -3002,7 +3126,8 @@ static bool findClassRelation(
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli) for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{ {
fName = nd->name()+"::"+baseClassName; fName = nd->name()+"::"+baseClassName;
found = (baseClass=getResolvedClass(cd,fName))!=0 && baseClass!=cd && found = (baseClass=getResolvedClass(cd,fName))!=0 &&
baseClass!=cd &&
root->name!=fName; root->name!=fName;
} }
} }
...@@ -3042,6 +3167,7 @@ static bool findClassRelation( ...@@ -3042,6 +3167,7 @@ static bool findClassRelation(
} }
} }
} }
#endif
} }
bool isATemplateArgument = templateNames!=0 && templateNames->find(biName)!=0; bool isATemplateArgument = templateNames!=0 && templateNames->find(biName)!=0;
if (found) if (found)
...@@ -5808,11 +5934,11 @@ static void resolveUserReferences() ...@@ -5808,11 +5934,11 @@ static void resolveUserReferences()
si->fileName=si->definition->getOutputFileBase().copy(); si->fileName=si->definition->getOutputFileBase().copy();
} }
} }
// hack: the items of a todo/test/bug list are all fragments from // hack: the items of a todo/test/bug/deprecated list are all fragments from
// different files, so the resulting section's all have the wrong file // different files, so the resulting section's all have the wrong file
// name (not from the todo/test/bug list, but from the file in which they // name (not from the todo/test/bug/deprecated list, but from the file in
// are defined). We correct this here by looking at the generated section // which they are defined). We correct this here by looking at the
// labels! // generated section labels!
QDictIterator<RefList> rli(*Doxygen::specialLists); QDictIterator<RefList> rli(*Doxygen::specialLists);
RefList *rl; RefList *rl;
for (rli.toFirst();(rl=rli.current());++rli) for (rli.toFirst();(rl=rli.current());++rli)
...@@ -7038,6 +7164,15 @@ void readConfiguration(int argc, char **argv) ...@@ -7038,6 +7164,15 @@ void readConfiguration(int argc, char **argv)
BaseOutputDocInterface::Bug BaseOutputDocInterface::Bug
) )
); );
Doxygen::specialLists->insert("deprecated",
new RefList("deprecated",
"GENERATE_DEPRECATEDLIST",
theTranslator->trDeprecatedList(),
theTranslator->trDeprecated(),
BaseOutputDocInterface::Deprecated
)
);
} }
void parseInput() void parseInput()
......
...@@ -93,7 +93,7 @@ class Doxygen ...@@ -93,7 +93,7 @@ class Doxygen
static QIntDict<QCString> memberDocDict; // dictionary of the member groups heading static QIntDict<QCString> memberDocDict; // dictionary of the member groups heading
static QDict<void> expandAsDefinedDict; static QDict<void> expandAsDefinedDict;
static NamespaceDef *globalScope; static NamespaceDef *globalScope;
static QDict<RefList> *specialLists; // array of special lists: todo, test, bug ... static QDict<RefList> *specialLists; // array of special lists: todo, test, bug, deprecated ...
}; };
void initDoxygen(); void initDoxygen();
......
...@@ -283,10 +283,7 @@ class Entry ...@@ -283,10 +283,7 @@ class Entry
QList<QCString> *anchors; //!< list of anchors defined in this entry QList<QCString> *anchors; //!< list of anchors defined in this entry
QCString fileName; //!< file this entry was extracted from QCString fileName; //!< file this entry was extracted from
int startLine; //!< start line of entry in the source int startLine; //!< start line of entry in the source
//int todoId; //!< id of the todo list item of this entry QList<ListItemInfo> *sli; //!< special lists (test/todo/bug/deprecated/..) this entry is in
//int testId; //!< id of the test list item of this entry
//int bugId; //!< id of the bug list item of this entry
QList<ListItemInfo> *sli; //!< special lists (test/todo/bug/..) this entry is in
TagInfo *tagInfo; //!< tag file info TagInfo *tagInfo; //!< tag file info
static int num; //!< counts the total number of entries static int num; //!< counts the total number of entries
enum enum
......
...@@ -1382,17 +1382,9 @@ void writeAlphabeticalClassList(OutputList &ol) ...@@ -1382,17 +1382,9 @@ void writeAlphabeticalClassList(OutputList &ol)
} }
else if (cd) // a real class, insert a link else if (cd) // a real class, insert a link
{ {
QCString cname;
QCString namesp; QCString namesp;
if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->name(); if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->displayName();
if (Config_getBool("HIDE_SCOPE_NAMES")) QCString cname=cd->displayName();
{
cname=cd->displayName();
}
else
{
cname=cd->className();
}
ol.writeObjectLink(cd->getReference(), ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(),0,cname); cd->getOutputFileBase(),0,cname);
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
MemberGroup::MemberGroup(int id,const char *hdr,const char *d) /* : Definition(idToName(id)) */ MemberGroup::MemberGroup(int id,const char *hdr,const char *d) /* : Definition(idToName(id)) */
{ {
//printf("New member group id=%d header=%s desc=%s\n",id,hdr,d);
memberList = new MemberList; memberList = new MemberList;
grpId = id; grpId = id;
grpHeader = hdr; grpHeader = hdr;
......
...@@ -220,7 +220,7 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol) ...@@ -220,7 +220,7 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol)
void NamespaceDef::writeDocumentation(OutputList &ol) void NamespaceDef::writeDocumentation(OutputList &ol)
{ {
QCString pageTitle=name()+" Namespace Reference"; QCString pageTitle=displayName()+" Namespace Reference";
startFile(ol,getOutputFileBase(),name(),pageTitle); startFile(ol,getOutputFileBase(),name(),pageTitle);
startTitle(ol,getOutputFileBase()); startTitle(ol,getOutputFileBase());
//ol.docify(pageTitle); //ol.docify(pageTitle);
......
...@@ -18,15 +18,6 @@ ...@@ -18,15 +18,6 @@
#include "reflist.h" #include "reflist.h"
#if 0
/*! The one and only todo list */
RefList todoList;
/*! The test criteria list */
RefList testList;
/*! The bug list */
RefList bugList;
#endif
/*! Create a list of items that are cross referenced with documentation blocks /*! Create a list of items that are cross referenced with documentation blocks
* @param listName String representing the name of the list. * @param listName String representing the name of the list.
* @param optionName String representation of the option enabling the list. * @param optionName String representation of the option enabling the list.
......
...@@ -88,10 +88,6 @@ static int squareCount = 0 ; ...@@ -88,10 +88,6 @@ static int squareCount = 0 ;
static int padCount = 0 ; static int padCount = 0 ;
static int slStartContext = 0; static int slStartContext = 0;
static QCString slString; static QCString slString;
//static int testStartContext = 0;
//static QCString testString;
//static int bugStartContext = 0;
//static QCString bugString;
static Entry* current_root = 0 ; static Entry* current_root = 0 ;
static Entry* global_root = 0 ; static Entry* global_root = 0 ;
static Entry* current = 0 ; static Entry* current = 0 ;
...@@ -616,6 +612,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -616,6 +612,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x TodoParam %x TodoParam
%x TestParam %x TestParam
%x BugParam %x BugParam
%x DeprecatedParam
%x SectionLabel %x SectionLabel
%x SectionTitle %x SectionTitle
%x SkipTemplate %x SkipTemplate
...@@ -1499,6 +1496,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1499,6 +1496,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
warn(yyFileName,yyLineNr, warn(yyFileName,yyLineNr,
"Warning: end of group without matching begin."); "Warning: end of group without matching begin.");
} }
//printf("end of member group marker ends group %d\n",memberGroupId);
endGroup(); endGroup();
memberGroupHeader.resize(0); memberGroupHeader.resize(0);
} }
...@@ -3214,10 +3212,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -3214,10 +3212,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
} }
<SkipHtmlComment>"--"[!]?">" { BEGIN(lastSkipHtmlCommentContext); } <SkipHtmlComment>"--"[!]?">" { BEGIN(lastSkipHtmlCommentContext); }
<SkipHtmlComment>. <SkipHtmlComment>.
<AfterDoc,Doc,ClassDoc,PageDoc>("\\\\"|"@@")("todo"|"test"|"bug")/[^a-z_A-Z0-9] { <AfterDoc,Doc,ClassDoc,PageDoc>("\\\\"|"@@")("todo"|"test"|"bug"|"deprecated")/[^a-z_A-Z0-9] {
current->doc+=yytext; current->doc+=yytext;
} }
<AfterDocLine,LineDoc,JavaDoc>("\\\\"|"@@")("todo"|"test"|"bug")/[^a-z_A-Z0-9] { <AfterDocLine,LineDoc,JavaDoc>("\\\\"|"@@")("todo"|"test"|"bug"|"deprecated")/[^a-z_A-Z0-9] {
current->brief+=yytext; current->brief+=yytext;
} }
<AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"todo"/[^a-z_A-Z0-9] { <AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"todo"/[^a-z_A-Z0-9] {
...@@ -3241,6 +3239,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -3241,6 +3239,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->brief.resize(0); current->brief.resize(0);
BEGIN(ClassDocBrief); BEGIN(ClassDocBrief);
} }
<AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"deprecated"/[^a-z_A-Z0-9] {
slStartContext = YY_START;
lastBriefContext = DeprecatedParam; // this is where we will continue at the end of the argument
slString = current->brief.copy(); // these will be swapped later on.
current->brief.resize(0);
BEGIN(ClassDocBrief);
}
<TodoParam>\n | <TodoParam>\n |
<TodoParam>"//" | <TodoParam>"//" |
<TodoParam>"/*" | <TodoParam>"/*" |
...@@ -3265,6 +3270,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -3265,6 +3270,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]); int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext); BEGIN(slStartContext);
} }
<DeprecatedParam>\n |
<DeprecatedParam>"//" |
<DeprecatedParam>"/*" |
<DeprecatedParam>. {
addSpecialItem("deprecated");
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext);
}
<ExampleDocArg1>{FILE} { <ExampleDocArg1>{FILE} {
current->name = stripQuotes(yytext); current->name = stripQuotes(yytext);
BEGIN( ExampleDoc ); BEGIN( ExampleDoc );
...@@ -3457,6 +3470,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -3457,6 +3470,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
memberGroupDocs+="\n\n"; memberGroupDocs+="\n\n";
} }
memberGroupDocs+=current->doc; memberGroupDocs+=current->doc;
Doxygen::memberDocDict.insert(memberGroupId,
new QCString(memberGroupDocs)
);
current->doc.resize(0); current->doc.resize(0);
current->brief.resize(0); current->brief.resize(0);
BEGIN(lastDocContext); BEGIN(lastDocContext);
...@@ -3618,6 +3634,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -3618,6 +3634,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
warn(yyFileName,yyLineNr, warn(yyFileName,yyLineNr,
"Warning: end of group without matching begin."); "Warning: end of group without matching begin.");
} }
//printf("end of member group marker ends group %d\n",memberGroupId);
endGroup(); endGroup();
memberGroupHeader.resize(0); memberGroupHeader.resize(0);
} }
...@@ -4295,12 +4312,13 @@ static void startGroup() ...@@ -4295,12 +4312,13 @@ static void startGroup()
} }
else else
{ {
if (memberGroupId!=NOGROUP) //if (memberGroupId!=NOGROUP)
{ //{
//warn(yyFileName,yyLineNr,"Warning: ignoring nested member group. " // //warn(yyFileName,yyLineNr,"Warning: ignoring nested member group. "
// "Previous command was found at line %d.",lastMemberGroupLine); // // "Previous command was found at line %d.",lastMemberGroupLine);
endGroup(); // printf("startGroup ends group %d\n",memberGroupId);
} // endGroup();
//}
if (memberGroupHeader.isEmpty()) if (memberGroupHeader.isEmpty())
{ {
// warn( yyFileName, yyLineNr, "Warning: member group does not have a header" ); // warn( yyFileName, yyLineNr, "Warning: member group does not have a header" );
...@@ -4327,10 +4345,11 @@ static void startGroupInDoc() ...@@ -4327,10 +4345,11 @@ static void startGroupInDoc()
} }
else if (current->section == Entry::MEMBERGRP_SEC) /* scope for a member group: @name */ else if (current->section == Entry::MEMBERGRP_SEC) /* scope for a member group: @name */
{ {
if (memberGroupId!=NOGROUP) //if (memberGroupId!=NOGROUP)
{ //{
endGroup(); // printf("startGroupInDoc ends group %d\n",memberGroupId);
} // endGroup();
//}
memberGroupId = newMemberGroupId(); memberGroupId = newMemberGroupId();
Doxygen::memberHeaderDict.insert(memberGroupId, Doxygen::memberHeaderDict.insert(memberGroupId,
new QCString(memberGroupHeader.stripWhiteSpace()) new QCString(memberGroupHeader.stripWhiteSpace())
...@@ -4378,7 +4397,11 @@ static void endGroup() ...@@ -4378,7 +4397,11 @@ static void endGroup()
static void forceEndGroup() static void forceEndGroup()
{ {
while (memberGroupId!=NOGROUP || !autoGroupStack.isEmpty()) endGroup(); while (memberGroupId!=NOGROUP || !autoGroupStack.isEmpty())
{
//printf("forceEndGroup ends group %d\n",memberGroupId);
endGroup();
}
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
......
...@@ -377,6 +377,12 @@ class Translator ...@@ -377,6 +377,12 @@ class Translator
virtual QCString trRTFTableOfContents() = 0; virtual QCString trRTFTableOfContents() = 0;
//////////////////////////////////////////////////////////////////////////
// new since 1.2.17
//////////////////////////////////////////////////////////////////////////
virtual QCString trDeprecatedList() = 0;
}; };
#endif #endif
...@@ -40,7 +40,17 @@ class TranslatorAdapterBase : public Translator ...@@ -40,7 +40,17 @@ class TranslatorAdapterBase : public Translator
}; };
class TranslatorAdapter_1_2_16 : public TranslatorAdapterBase class TranslatorAdapter_1_2_17 : public TranslatorAdapterBase
{
public:
virtual QCString updateNeededMessage()
{ return createUpdateNeededMessage(idLanguage(),"release 1.2.17"); }
virtual QCString trDeprecatedList()
{ return english.trDeprecatedList(); }
};
class TranslatorAdapter_1_2_16 : public TranslatorAdapter_1_2_17
{ {
public: public:
virtual QCString updateNeededMessage() virtual QCString updateNeededMessage()
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#ifndef TRANSLATOR_BR_H #ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H #define TRANSLATOR_BR_H
class TranslatorBrazilian: public Translator class TranslatorBrazilian: public TranslatorAdapter_1_2_17
{ {
public: public:
......
...@@ -160,7 +160,7 @@ ...@@ -160,7 +160,7 @@
// probably slightly faster. // probably slightly faster.
class TranslatorCzech : public Translator class TranslatorCzech : public TranslatorAdapter_1_2_17
{ {
private: private:
/*! The decode() inline assumes the source written in the /*! The decode() inline assumes the source written in the
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
#ifndef TRANSLATOR_DE_H #ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H #define TRANSLATOR_DE_H
class TranslatorGerman : public TranslatorAdapter_1_2_16 class TranslatorGerman : public TranslatorAdapter_1_2_17
{ {
public: public:
......
...@@ -1404,6 +1404,17 @@ class TranslatorEnglish : public Translator ...@@ -1404,6 +1404,17 @@ class TranslatorEnglish : public Translator
return "Table of Contents"; return "Table of Contents";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.17
//////////////////////////////////////////////////////////////////////////
/*! Used as the header of the list of item that have been
* flagged deprecated
*/
virtual QCString trDeprecatedList()
{
return "Deprecated List";
}
}; };
#endif #endif
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#ifndef TRANSLATOR_FR_H #ifndef TRANSLATOR_FR_H
#define TRANSLATOR_FR_H #define TRANSLATOR_FR_H
class TranslatorFrench : public Translator class TranslatorFrench : public TranslatorAdapter_1_2_17
{ {
public: public:
QCString idLanguage() QCString idLanguage()
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
#ifndef TRANSLATOR_HR_H #ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H #define TRANSLATOR_HR_H
class TranslatorCroatian : public Translator class TranslatorCroatian : public TranslatorAdapter_1_2_17
{ {
private: private:
/*! to avoid macro redefinition from translator_cz.h */ /*! to avoid macro redefinition from translator_cz.h */
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
#ifndef TRANSLATOR_IT_H #ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H #define TRANSLATOR_IT_H
class TranslatorItalian : public Translator class TranslatorItalian : public TranslatorAdapter_1_2_17
{ {
public: public:
......
...@@ -61,7 +61,7 @@ class TranslatorJapaneseEn : public TranslatorEnglish ...@@ -61,7 +61,7 @@ class TranslatorJapaneseEn : public TranslatorEnglish
} }
}; };
class TranslatorJapanese : public Translator class TranslatorJapanese : public TranslatorAdapter_1_2_17
{ {
private: private:
/*! The decode() can change euc into sjis */ /*! The decode() can change euc into sjis */
......
...@@ -1002,6 +1002,17 @@ class TranslatorDutch : public Translator ...@@ -1002,6 +1002,17 @@ class TranslatorDutch : public Translator
virtual QCString trRTFTableOfContents() virtual QCString trRTFTableOfContents()
{ return "Inhoudsopgave"; } { return "Inhoudsopgave"; }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.17
//////////////////////////////////////////////////////////////////////////
/*! Used as the header of the list of item that have been
* flagged deprecated
*/
virtual QCString trDeprecatedList()
{
return "Deprecated Lijst";
}
}; };
#endif #endif
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
#ifndef TRANSLATOR_PT_H #ifndef TRANSLATOR_PT_H
#define TRANSLATOR_PT_H #define TRANSLATOR_PT_H
class TranslatorPortuguese : public Translator class TranslatorPortuguese : public TranslatorAdapter_1_2_17
{ {
public: public:
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
#ifndef TRANSLATOR_RU_H #ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H #define TRANSLATOR_RU_H
class TranslatorRussian : public Translator class TranslatorRussian : public TranslatorAdapter_1_2_17
{ {
private: private:
/*! The Decode() inline assumes the source written in the /*! The Decode() inline assumes the source written in the
......
...@@ -3148,7 +3148,7 @@ bool extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCStr ...@@ -3148,7 +3148,7 @@ bool extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCStr
/*! Substitutes any occurrence of a formal argument from argument list /*! Substitutes any occurrence of a formal argument from argument list
* \a formalArgs in \a name by the corresponding actual argument in * \a formalArgs in \a name by the corresponding actual argument in
* argument list \a actualArgs. The result after substitution * argument list \a actualArgs. The result after substitution
* is returned as a string. The argument \a className is used to * is returned as a string. The argument \a name is used to
* prevent recursive substitution. * prevent recursive substitution.
*/ */
QCString substituteTemplateArgumentsInString( QCString substituteTemplateArgumentsInString(
...@@ -3189,7 +3189,9 @@ QCString substituteTemplateArgumentsInString( ...@@ -3189,7 +3189,9 @@ QCString substituteTemplateArgumentsInString(
result += actArg->type; result += actArg->type;
found=TRUE; found=TRUE;
} }
else if (formArg->name==n && actArg==0 && !formArg->defval.isEmpty()) else if (formArg->name==n && actArg==0 && !formArg->defval.isEmpty() &&
formArg->defval!=name /* to prevent recursion */
)
{ {
result += substituteTemplateArgumentsInString(formArg->defval,formalArgs,actualArgs); result += substituteTemplateArgumentsInString(formArg->defval,formalArgs,actualArgs);
found=TRUE; found=TRUE;
......
...@@ -667,7 +667,7 @@ class XMLGenerator : public OutputDocInterface ...@@ -667,7 +667,7 @@ class XMLGenerator : public OutputDocInterface
// we need manually add a para here because cells are // we need manually add a para here because cells are
// parsed before the table is generated, and thus // parsed before the table is generated, and thus
// are already parsed as if they are inside a paragraph. // are already parsed as if they are inside a paragraph.
//m_t << "<para>"; m_t << "<para>";
} }
void endTableRow() void endTableRow()
{ {
...@@ -1521,7 +1521,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -1521,7 +1521,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
{ {
t << " id=\"" << ii->fileDef->getOutputFileBase() << "\""; t << " id=\"" << ii->fileDef->getOutputFileBase() << "\"";
} }
t << " local=\"" << (ii->local ? "yes" : "no") << "\""; t << " local=\"" << (ii->local ? "yes" : "no") << "\">";
t << nm; t << nm;
t << "</includes>" << endl; t << "</includes>" << endl;
} }
......
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