summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL2
-rw-r--r--README2
-rw-r--r--addon/doxywizard/doxywizard.cpp13
-rw-r--r--addon/doxywizard/inputbool.cpp22
-rw-r--r--addon/doxywizard/inputbool.h6
-rw-r--r--doc/config.doc2
-rw-r--r--doc/index.doc4
-rw-r--r--doc/install.doc7
-rw-r--r--doc/language.doc38
-rw-r--r--doc/starting.doc2
-rw-r--r--src/classdef.cpp2
-rw-r--r--src/commentcnv.l2
-rw-r--r--src/config.l9
-rw-r--r--src/definition.cpp1
-rw-r--r--src/definition.h7
-rw-r--r--src/doc.l7
-rw-r--r--src/dot.cpp27
-rw-r--r--src/dot.h2
-rw-r--r--src/doxygen.cpp165
-rw-r--r--src/doxygen.h2
-rw-r--r--src/entry.h5
-rw-r--r--src/index.cpp12
-rw-r--r--src/membergroup.cpp1
-rw-r--r--src/namespacedef.cpp2
-rw-r--r--src/reflist.cpp9
-rw-r--r--src/scanner.l57
-rw-r--r--src/translator.h6
-rw-r--r--src/translator_adapter.h12
-rw-r--r--src/translator_br.h2
-rw-r--r--src/translator_cz.h2
-rw-r--r--src/translator_de.h2
-rw-r--r--src/translator_en.h11
-rw-r--r--src/translator_fr.h2
-rw-r--r--src/translator_hr.h2
-rw-r--r--src/translator_it.h2
-rw-r--r--src/translator_jp.h2
-rw-r--r--src/translator_nl.h11
-rw-r--r--src/translator_pt.h2
-rw-r--r--src/translator_ru.h2
-rw-r--r--src/util.cpp6
-rw-r--r--src/xmlgen.cpp4
41 files changed, 351 insertions, 125 deletions
diff --git a/INSTALL b/INSTALL
index dbe9824..e1b6612 100644
--- a/INSTALL
+++ b/INSTALL
@@ -3,4 +3,4 @@ DOXYGEN Version 1.2.17
Please read the installation section of the manual for instructions.
--------
-Dimitri van Heesch (15 July 2002)
+Dimitri van Heesch (28 July 2002)
diff --git a/README b/README
index 1144ab2..8599141 100644
--- a/README
+++ b/README
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
-Dimitri van Heesch (dimitri@stack.nl) (15 July 2002)
+Dimitri van Heesch (dimitri@stack.nl) (28 July 2002)
diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp
index 58580b2..84f9f08 100644
--- a/addon/doxywizard/doxywizard.cpp
+++ b/addon/doxywizard/doxywizard.cpp
@@ -309,12 +309,13 @@ void Wizard::refreshCaption()
void Wizard::about()
{
- QMessageBox::about(this, "DoxyWizard",
- "<qt><center>A tool to create and edit configuration files "
- "that can be read by doxygen.</center><p>"
- "<center>Written by Dimitri van Heesch</center><p>"
- "<center>(c) 2000-2002</center></qt>"
- );
+ QCString text(4096);
+ text.sprintf( "<qt><center>A tool to create and edit configuration files "
+ "that can be read by doxygen version %s.</center><p>"
+ "<center>Written by Dimitri van Heesch</center><p>"
+ "<center>(c) 2000-2002</center></qt>",versionString
+ );
+ QMessageBox::about(this, "DoxyWizard",text);
}
//----------------------------------------------------------------------
diff --git a/addon/doxywizard/inputbool.cpp b/addon/doxywizard/inputbool.cpp
index 43d994d..33ecf2f 100644
--- a/addon/doxywizard/inputbool.cpp
+++ b/addon/doxywizard/inputbool.cpp
@@ -15,23 +15,31 @@
#include "inputbool.h"
#include "pagewidget.h"
#include <qwindowsstyle.h>
+#include <qlayout.h>
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();
- setChecked( flag );
- setStyle( winStyle );
- setMinimumSize( sizeHint() );
+ cb->setChecked( flag );
+ cb->setStyle( winStyle );
+ cb->setMinimumSize( sizeHint() );
- connect( this, SIGNAL(toggled(bool)), SLOT(setState(bool)) );
+ connect( cb, SIGNAL(toggled(bool)), SLOT(setState(bool)) );
parent->addWidget(this);
+
+ layout->activate();
}
void InputBool::init()
{
- setChecked(state);
+ cb->setChecked(state);
}
void InputBool::setState( bool s )
@@ -39,7 +47,7 @@ void InputBool::setState( bool s )
if (state!=s)
{
emit changed();
- emit toggle(text(),s);
+ emit toggle(cb->text(),s);
}
state=s;
}
diff --git a/addon/doxywizard/inputbool.h b/addon/doxywizard/inputbool.h
index ab9728f..ca4520c 100644
--- a/addon/doxywizard/inputbool.h
+++ b/addon/doxywizard/inputbool.h
@@ -15,13 +15,14 @@
#ifndef _INPUTBOOL_H
#define _INPUTBOOL_H
+#include <qwidget.h>
#include <qcheckbox.h>
#include "input.h"
class PageWidget;
-class InputBool : public QCheckBox, public IInput
+class InputBool : public QWidget, /*QCheckBox,*/ public IInput
{
Q_OBJECT
@@ -29,7 +30,7 @@ class InputBool : public QCheckBox, public IInput
InputBool( const QString &text, PageWidget *parent, bool &flag );
~InputBool(){};
void init();
- void setEnabled(bool b) { QCheckBox::setEnabled(b); }
+ void setEnabled(bool b) { cb->setEnabled(b); }
QObject *qobject() { return this; }
bool getState() const { return state; }
@@ -42,6 +43,7 @@ class InputBool : public QCheckBox, public IInput
private:
bool &state;
+ QCheckBox *cb;
};
diff --git a/doc/config.doc b/doc/config.doc
index e469b57..a4a48a5 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -711,7 +711,7 @@ followed by the descriptions of the tags grouped by category.
functions referencing it will be listed.
\anchor cfg_references_relation
-<dt>\c REFERENCE_RELATION <dd>
+<dt>\c REFERENCES_RELATION <dd>
\addindex REFERENCES_RELATION
If the \c REFERENCES_RELATION tag is set to \c YES (the default)
then for each documented function all documented entities
diff --git a/doc/index.doc b/doc/index.doc
index d4b492a..a9fad12 100644
--- a/doc/index.doc
+++ b/doc/index.doc
@@ -179,8 +179,8 @@ Thanks go to:
<li>Petr Prikryl for coordinating the internationalisation support.
All language maintainers for providing translations into many languages.
<li>Erik Jan Lingen of <a href="http://www.habanera.nl/">Habanera</a>, Mark
- Roddy, Paul Schwartz, Charles Duffy, Vadym Voznyuk, and Philip Walton
- for donating money.
+ Roddy, Paul Schwartz, Charles Duffy, Vadym Voznyuk, Philip Walton and
+ Dwight Browne for donating money.
<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>
organizer!
diff --git a/doc/install.doc b/doc/install.doc
index 4b3b047..0cd453e 100644
--- a/doc/install.doc
+++ b/doc/install.doc
@@ -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
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
Currently, I have only compiled doxygen for Windows using Microsoft's
diff --git a/doc/language.doc b/doc/language.doc
index 5433748..0594241 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -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
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):
Brazilian Portuguese, Chinese, Chinese Traditional, Croatian, Czech,
Danish, Dutch, English, Finnish, French,
@@ -55,7 +55,7 @@ when the translator was updated.
<TD>Brazilian Portuguese</TD>
<TD>Fabio "FJTC" Jun Takada Chino</TD>
<TD>chino@NOSPAM.icmc.sc.usp.br</TD>
- <TD>up-to-date</TD>
+ <TD>1.2.17</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Chinese</TD>
@@ -73,13 +73,13 @@ when the translator was updated.
<TD>Croatian</TD>
<TD>Boris Bralo</TD>
<TD>boris.bralo@NOSPAM.zg.tel.hr</TD>
- <TD>up-to-date</TD>
+ <TD>1.2.17</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Czech</TD>
<TD>Petr P&#x0159;ikryl</TD>
<TD>prikrylp@NOSPAM.skil.cz</TD>
- <TD>up-to-date</TD>
+ <TD>1.2.17</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Danish</TD>
@@ -109,13 +109,13 @@ when the translator was updated.
<TD>French</TD>
<TD>Xavier Outhier</TD>
<TD>xouthier@NOSPAM.yahoo.fr</TD>
- <TD>up-to-date</TD>
+ <TD>1.2.17</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>German</TD>
<TD>Jens Seidel<br>Jens Breitenstein</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 BGCOLOR="#ffffff">
<TD>Greek</TD>
@@ -133,13 +133,13 @@ when the translator was updated.
<TD>Italian</TD>
<TD>Alessandro Falappa<br>Ahmed Aldo Faisal</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 BGCOLOR="#ffffff">
<TD>Japanese</TD>
<TD>Ryunosuke Sato<br>Kenji Nagamatsu</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 BGCOLOR="#ffffff">
<TD>Korean</TD>
@@ -163,7 +163,7 @@ when the translator was updated.
<TD>Portuguese</TD>
<TD>Rui Godinho Lopes</TD>
<TD>ruiglopes@NOSPAM.yahoo.com</TD>
- <TD>up-to-date</TD>
+ <TD>1.2.17</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Romanian</TD>
@@ -175,7 +175,7 @@ when the translator was updated.
<TD>Russian</TD>
<TD>Alexandr Chelpanov</TD>
<TD>cav@NOSPAM.cryptopro.ru</TD>
- <TD>up-to-date</TD>
+ <TD>1.2.17</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Serbian</TD>
@@ -224,16 +224,16 @@ when the translator was updated.
{\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
\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
Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & 1.2.13 \\
& Wang Weihan & {\tt wangweihan@capinfo.com.cn} & \\
\hline
Chinese Traditional & Gary Lee & {\tt garylee@ecosine.com.tw} & 1.2.16 \\
\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
- 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
Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & 1.2.7 \\
\hline
@@ -243,19 +243,19 @@ when the translator was updated.
\hline
Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & obsolete \\
\hline
- French & Xavier Outhier & {\tt xouthier@yahoo.fr} & up-to-date \\
+ French & Xavier Outhier & {\tt xouthier@yahoo.fr} & 1.2.17 \\
\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} & \\
\hline
Greek & Harry Kalogirou & {\tt harkal@rainbow.cs.unipi.gr} & 1.2.11 \\
\hline
Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\
\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} & \\
\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} & \\
\hline
Korean & Richard Kim & {\tt ryk@dspwiz.com} & 1.2.13 \\
@@ -265,11 +265,11 @@ when the translator was updated.
Polish & Piotr Kaminski & {\tt Piotr.Kaminski@ctm.gdynia.pl} & 1.2.16 \\
& Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & \\
\hline
- Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & up-to-date \\
+ Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.2.17 \\
\hline
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\
\hline
- Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\
+ Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & 1.2.17 \\
\hline
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.2.16 \\
\hline
diff --git a/doc/starting.doc b/doc/starting.doc
index 1c483e5..8d4bc16 100644
--- a/doc/starting.doc
+++ b/doc/starting.doc
@@ -185,7 +185,7 @@ basically two options:
about structural commands.
</ol>
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
structural command; just putting a special documentation block in front or
behind them will do.
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 0185d47..8393aed 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -750,7 +750,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, OutputList &briefOutput,
void ClassDef::writeDocumentation(OutputList &ol)
{
// write title
- QCString pageTitle=name().copy();
+ QCString pageTitle=displayName().copy();
QCString pageType;
QCString cType=compoundTypeString();
toupper(cType.at(0));
diff --git a/src/commentcnv.l b/src/commentcnv.l
index bba1b21..b0fed8d 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -109,7 +109,7 @@ static int yyread(char *buf,int max_size)
copyToOutput(yytext+i,yyleng-i);
BEGIN(SComment);
}
-<Scan>"//"[\/!].*\n { /* one line C++ comment */
+<Scan>"//".*\n { /* one line C++ comment */
copyToOutput(yytext,yyleng);
}
<Scan>"/*" { /* start of a C comment */
diff --git a/src/config.l b/src/config.l
index 8c3c50b..7c8865c 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1557,6 +1557,13 @@ void Config::create()
"commands in the documentation.\n",
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(
"ALIASES",
"This tag can be used to specify a number of aliases that acts \n"
@@ -1732,7 +1739,7 @@ void Config::create()
"FILTER_SOURCE_FILES",
"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"
- "files to browse. \n",
+ "files to browse (i.e. when SOURCE_BROWSER is set to YES). \n",
FALSE
);
//-----------------------------------------------------------------------------------------------
diff --git a/src/definition.cpp b/src/definition.cpp
index 4dafb51..dcdaa72 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -50,6 +50,7 @@ Definition::Definition(const char *df,int dl,
m_todoId=0;
m_testId=0;
m_bugId=0;
+ m_deprecatedId=0;
m_outerScope=Doxygen::globalScope;
m_partOfGroups=0;
m_specialListItems=0;
diff --git a/src/definition.h b/src/definition.h
index ad3da97..88c9628 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -161,9 +161,10 @@ class Definition
SectionDict *m_sectionDict; // dictionary of all sections
MemberSDict *m_sourceRefByDict;
MemberSDict *m_sourceRefsDict;
- int m_testId; // id for test list item
- int m_todoId; // id for todo list item
- int m_bugId; // id for bug list item
+ int m_testId; // id for test list item
+ int m_todoId; // id for todo list item
+ int m_bugId; // id for bug list item
+ int m_deprecatedId; // id for deprecated list item
int m_docLine;
QCString m_docFile;
int m_briefLine;
diff --git a/src/doc.l b/src/doc.l
index 6104962..33886db 100644
--- a/src/doc.l
+++ b/src/doc.l
@@ -1692,9 +1692,11 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))?
}
<DocScan>"\\todo "[0-9]+ | /* generated labels */
<DocScan>"\\test "[0-9]+ |
-<DocScan>"\\bug "[0-9]+ {
+<DocScan>"\\bug "[0-9]+ |
+<DocScan>"\\deprecated "[0-9]+ {
writeSpecialItem(yytext);
}
+ /*
<DocScan>{CMD}"deprecated"{BSEP} {
if (insideItemList)
{
@@ -1713,7 +1715,8 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))?
{
outDoc->writeDescItem();
}
- }
+ }
+ */
<DocScan>"$"[a-zA-Z_0-9]+":"[^\n\$]+"$" { // RCS tag
QCString tagName(&yytext[1]);
int i=tagName.find(':');
diff --git a/src/dot.cpp b/src/dot.cpp
index a5ad72b..2e9ca54 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -75,7 +75,24 @@ static bool convertMapFile(QTextStream &t,const char *mapName)
//printf("ReadLine `%s'\n",buf);
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);
+ // 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 *urlPtr = strchr(url,'$');
//printf("url=`%s'\n",url);
@@ -230,7 +247,7 @@ class DotNodeList : public QList<DotNode>
/*! helper function that deletes all nodes in a connected graph, given
* 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);
static DotNodeList deletedNodes;
@@ -311,7 +328,7 @@ void DotNode::removeParent(DotNode *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
m_deleted=TRUE;
@@ -337,7 +354,7 @@ void DotNode::deleteNode(DotNodeList &deletedList,SIntDict<DotNode> *skipNodes)
}
// add this node to the list of deleted nodes.
//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");
deletedList.append(this);
@@ -933,13 +950,13 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
DotGfxHierarchyTable::~DotGfxHierarchyTable()
{
//printf("DotGfxHierarchyTable::~DotGfxHierarchyTable\n");
- SIntDict<DotNode> skipNodes(17);
+ SDict<DotNode> skipNodes(17);
skipNodes.setAutoDelete(TRUE);
DotNode *n = m_rootNodes->first();
while (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->first();
diff --git a/src/dot.h b/src/dot.h
index 78c7e7d..48c631f 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -69,7 +69,7 @@ class DotNode
);
void setDistance(int distance);
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 removeParent(DotNode *n);
void write(QTextStream &t,GraphOutputFormat f,bool topDown,bool toChildren,
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 36c86c3..388a323 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -2541,6 +2541,107 @@ static QDict<int> *getTemplateArgumentsInName(ArgumentList *templateArguments,co
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
{
@@ -2586,6 +2687,7 @@ static void findUsedClassesForClass(Entry *root,
QCString usedClassName;
QCString templSpec;
bool found=FALSE;
+ // the type can contain template variables, replace them if present
if (actualArgs)
{
type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs);
@@ -2593,12 +2695,17 @@ static void findUsedClassesForClass(Entry *root,
//printf("findUsedClassesForClass(%s)=%s\n",masterCd->name().data(),type.data());
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);
+
+ // add any template arguments to the class
QCString usedName = usedClassName+templSpec;
- if (!typeName.isEmpty())
- {
- usedName=typeName;
- }
+
+ //if (!typeName.isEmpty())
+ //{
+ // usedName=typeName;
+ //}
//printf("usedName=`%s'\n",usedName.data());
bool delTempNames=FALSE;
@@ -2642,11 +2749,16 @@ static void findUsedClassesForClass(Entry *root,
if (!found)
{
- Definition *scope=masterCd->getOuterScope();
ClassDef *usedCd=0;
+#if 0
+ Definition *scope=masterCd->getOuterScope();
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())
{
usedCd=getResolvedClass(masterCd,scopeName+"::"+usedName,0,&templSpec);
@@ -2661,8 +2773,10 @@ static void findUsedClassesForClass(Entry *root,
}
if (scope) scope=scope->getOuterScope();
} while (scope && usedCd==0);
+#endif
+ usedCd = findClassWithinClassContext(masterCd,usedName);
- if (usedCd)
+ if (usedCd && usedCd!=masterCd)
{
found=TRUE;
Debug::print(Debug::Classes,0," Adding used class `%s'\n", usedCd->name().data());
@@ -2944,7 +3058,6 @@ static bool findClassRelation(
//printf("cd=%p baseClass=%p\n",cd,baseClass);
bool found=baseClass!=0 && (baseClass!=cd || mode==TemplateInstances);
- NamespaceDef *nd=cd->getNamespaceDef();
if (!found && (i=baseClassName.findRev("::"))!=-1)
{
// replace any namespace aliases
@@ -2953,9 +3066,19 @@ static bool findClassRelation(
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)
{
+ 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)
{
// look for the using statement in this file in which the
@@ -2968,7 +3091,8 @@ static bool findClassRelation(
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{
QCString fName = nd->name()+"::"+baseClassName;
- found = (baseClass=getResolvedClass(cd,fName))!=0 && baseClass!=cd &&
+ found = (baseClass=getResolvedClass(cd,fName))!=0 &&
+ baseClass!=cd &&
root->name!=fName;
}
}
@@ -3002,7 +3126,8 @@ static bool findClassRelation(
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{
fName = nd->name()+"::"+baseClassName;
- found = (baseClass=getResolvedClass(cd,fName))!=0 && baseClass!=cd &&
+ found = (baseClass=getResolvedClass(cd,fName))!=0 &&
+ baseClass!=cd &&
root->name!=fName;
}
}
@@ -3042,6 +3167,7 @@ static bool findClassRelation(
}
}
}
+#endif
}
bool isATemplateArgument = templateNames!=0 && templateNames->find(biName)!=0;
if (found)
@@ -5808,11 +5934,11 @@ static void resolveUserReferences()
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
- // name (not from the todo/test/bug list, but from the file in which they
- // are defined). We correct this here by looking at the generated section
- // labels!
+ // name (not from the todo/test/bug/deprecated list, but from the file in
+ // which they are defined). We correct this here by looking at the
+ // generated section labels!
QDictIterator<RefList> rli(*Doxygen::specialLists);
RefList *rl;
for (rli.toFirst();(rl=rli.current());++rli)
@@ -7038,6 +7164,15 @@ void readConfiguration(int argc, char **argv)
BaseOutputDocInterface::Bug
)
);
+ Doxygen::specialLists->insert("deprecated",
+ new RefList("deprecated",
+ "GENERATE_DEPRECATEDLIST",
+ theTranslator->trDeprecatedList(),
+ theTranslator->trDeprecated(),
+ BaseOutputDocInterface::Deprecated
+ )
+ );
+
}
void parseInput()
diff --git a/src/doxygen.h b/src/doxygen.h
index f97c23c..72d3a80 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -93,7 +93,7 @@ class Doxygen
static QIntDict<QCString> memberDocDict; // dictionary of the member groups heading
static QDict<void> expandAsDefinedDict;
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();
diff --git a/src/entry.h b/src/entry.h
index f814ef4..5b75105 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -283,10 +283,7 @@ class Entry
QList<QCString> *anchors; //!< list of anchors defined in this entry
QCString fileName; //!< file this entry was extracted from
int startLine; //!< start line of entry in the source
- //int todoId; //!< id of the todo list item of this entry
- //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
+ QList<ListItemInfo> *sli; //!< special lists (test/todo/bug/deprecated/..) this entry is in
TagInfo *tagInfo; //!< tag file info
static int num; //!< counts the total number of entries
enum
diff --git a/src/index.cpp b/src/index.cpp
index cd93267..2754080 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -1382,17 +1382,9 @@ void writeAlphabeticalClassList(OutputList &ol)
}
else if (cd) // a real class, insert a link
{
- QCString cname;
QCString namesp;
- if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->name();
- if (Config_getBool("HIDE_SCOPE_NAMES"))
- {
- cname=cd->displayName();
- }
- else
- {
- cname=cd->className();
- }
+ if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->displayName();
+ QCString cname=cd->displayName();
ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(),0,cname);
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 3794af1..9bb5f17 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -37,6 +37,7 @@
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;
grpId = id;
grpHeader = hdr;
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 34f9f7d..f24de91 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -220,7 +220,7 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol)
void NamespaceDef::writeDocumentation(OutputList &ol)
{
- QCString pageTitle=name()+" Namespace Reference";
+ QCString pageTitle=displayName()+" Namespace Reference";
startFile(ol,getOutputFileBase(),name(),pageTitle);
startTitle(ol,getOutputFileBase());
//ol.docify(pageTitle);
diff --git a/src/reflist.cpp b/src/reflist.cpp
index 9d23e04..7d49575 100644
--- a/src/reflist.cpp
+++ b/src/reflist.cpp
@@ -18,15 +18,6 @@
#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
* @param listName String representing the name of the list.
* @param optionName String representation of the option enabling the list.
diff --git a/src/scanner.l b/src/scanner.l
index 095c1cd..468e1ad 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -88,10 +88,6 @@ static int squareCount = 0 ;
static int padCount = 0 ;
static int slStartContext = 0;
static QCString slString;
-//static int testStartContext = 0;
-//static QCString testString;
-//static int bugStartContext = 0;
-//static QCString bugString;
static Entry* current_root = 0 ;
static Entry* global_root = 0 ;
static Entry* current = 0 ;
@@ -616,6 +612,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x TodoParam
%x TestParam
%x BugParam
+%x DeprecatedParam
%x SectionLabel
%x SectionTitle
%x SkipTemplate
@@ -1499,6 +1496,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
warn(yyFileName,yyLineNr,
"Warning: end of group without matching begin.");
}
+ //printf("end of member group marker ends group %d\n",memberGroupId);
endGroup();
memberGroupHeader.resize(0);
}
@@ -3214,10 +3212,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<SkipHtmlComment>"--"[!]?">" { BEGIN(lastSkipHtmlCommentContext); }
<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;
}
-<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;
}
<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}"'"))
current->brief.resize(0);
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>"//" |
<TodoParam>"/*" |
@@ -3265,6 +3270,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
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} {
current->name = stripQuotes(yytext);
BEGIN( ExampleDoc );
@@ -3457,6 +3470,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
memberGroupDocs+="\n\n";
}
memberGroupDocs+=current->doc;
+ Doxygen::memberDocDict.insert(memberGroupId,
+ new QCString(memberGroupDocs)
+ );
current->doc.resize(0);
current->brief.resize(0);
BEGIN(lastDocContext);
@@ -3618,6 +3634,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
warn(yyFileName,yyLineNr,
"Warning: end of group without matching begin.");
}
+ //printf("end of member group marker ends group %d\n",memberGroupId);
endGroup();
memberGroupHeader.resize(0);
}
@@ -4295,12 +4312,13 @@ static void startGroup()
}
else
{
- if (memberGroupId!=NOGROUP)
- {
- //warn(yyFileName,yyLineNr,"Warning: ignoring nested member group. "
- // "Previous command was found at line %d.",lastMemberGroupLine);
- endGroup();
- }
+ //if (memberGroupId!=NOGROUP)
+ //{
+ // //warn(yyFileName,yyLineNr,"Warning: ignoring nested member group. "
+ // // "Previous command was found at line %d.",lastMemberGroupLine);
+ // printf("startGroup ends group %d\n",memberGroupId);
+ // endGroup();
+ //}
if (memberGroupHeader.isEmpty())
{
// warn( yyFileName, yyLineNr, "Warning: member group does not have a header" );
@@ -4327,10 +4345,11 @@ static void startGroupInDoc()
}
else if (current->section == Entry::MEMBERGRP_SEC) /* scope for a member group: @name */
{
- if (memberGroupId!=NOGROUP)
- {
- endGroup();
- }
+ //if (memberGroupId!=NOGROUP)
+ //{
+ // printf("startGroupInDoc ends group %d\n",memberGroupId);
+ // endGroup();
+ //}
memberGroupId = newMemberGroupId();
Doxygen::memberHeaderDict.insert(memberGroupId,
new QCString(memberGroupHeader.stripWhiteSpace())
@@ -4378,7 +4397,11 @@ static void endGroup()
static void forceEndGroup()
{
- while (memberGroupId!=NOGROUP || !autoGroupStack.isEmpty()) endGroup();
+ while (memberGroupId!=NOGROUP || !autoGroupStack.isEmpty())
+ {
+ //printf("forceEndGroup ends group %d\n",memberGroupId);
+ endGroup();
+ }
}
//----------------------------------------------------------------------------
diff --git a/src/translator.h b/src/translator.h
index 093f4ad..736b140 100644
--- a/src/translator.h
+++ b/src/translator.h
@@ -376,6 +376,12 @@ class Translator
//////////////////////////////////////////////////////////////////////////
virtual QCString trRTFTableOfContents() = 0;
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.17
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trDeprecatedList() = 0;
};
diff --git a/src/translator_adapter.h b/src/translator_adapter.h
index 5ef3094..59eefe8 100644
--- a/src/translator_adapter.h
+++ b/src/translator_adapter.h
@@ -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:
virtual QCString updateNeededMessage()
diff --git a/src/translator_br.h b/src/translator_br.h
index ad51e49..e361f6b 100644
--- a/src/translator_br.h
+++ b/src/translator_br.h
@@ -25,7 +25,7 @@
#ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H
-class TranslatorBrazilian: public Translator
+class TranslatorBrazilian: public TranslatorAdapter_1_2_17
{
public:
diff --git a/src/translator_cz.h b/src/translator_cz.h
index d5b5f27..f997bda 100644
--- a/src/translator_cz.h
+++ b/src/translator_cz.h
@@ -160,7 +160,7 @@
// probably slightly faster.
-class TranslatorCzech : public Translator
+class TranslatorCzech : public TranslatorAdapter_1_2_17
{
private:
/*! The decode() inline assumes the source written in the
diff --git a/src/translator_de.h b/src/translator_de.h
index c818fdd..41f2d45 100644
--- a/src/translator_de.h
+++ b/src/translator_de.h
@@ -71,7 +71,7 @@
#ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H
-class TranslatorGerman : public TranslatorAdapter_1_2_16
+class TranslatorGerman : public TranslatorAdapter_1_2_17
{
public:
diff --git a/src/translator_en.h b/src/translator_en.h
index fe88737..a670015 100644
--- a/src/translator_en.h
+++ b/src/translator_en.h
@@ -1404,6 +1404,17 @@ class TranslatorEnglish : public Translator
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
diff --git a/src/translator_fr.h b/src/translator_fr.h
index f8ffa45..945c198 100644
--- a/src/translator_fr.h
+++ b/src/translator_fr.h
@@ -41,7 +41,7 @@
#ifndef TRANSLATOR_FR_H
#define TRANSLATOR_FR_H
-class TranslatorFrench : public Translator
+class TranslatorFrench : public TranslatorAdapter_1_2_17
{
public:
QCString idLanguage()
diff --git a/src/translator_hr.h b/src/translator_hr.h
index f6081db..c53326a 100644
--- a/src/translator_hr.h
+++ b/src/translator_hr.h
@@ -50,7 +50,7 @@
#ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H
-class TranslatorCroatian : public Translator
+class TranslatorCroatian : public TranslatorAdapter_1_2_17
{
private:
/*! to avoid macro redefinition from translator_cz.h */
diff --git a/src/translator_it.h b/src/translator_it.h
index a24f381..9766eb9 100644
--- a/src/translator_it.h
+++ b/src/translator_it.h
@@ -65,7 +65,7 @@
#ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H
-class TranslatorItalian : public Translator
+class TranslatorItalian : public TranslatorAdapter_1_2_17
{
public:
diff --git a/src/translator_jp.h b/src/translator_jp.h
index 0f81f01..ab6a10a 100644
--- a/src/translator_jp.h
+++ b/src/translator_jp.h
@@ -61,7 +61,7 @@ class TranslatorJapaneseEn : public TranslatorEnglish
}
};
-class TranslatorJapanese : public Translator
+class TranslatorJapanese : public TranslatorAdapter_1_2_17
{
private:
/*! The decode() can change euc into sjis */
diff --git a/src/translator_nl.h b/src/translator_nl.h
index bc4eaca..8b8a213 100644
--- a/src/translator_nl.h
+++ b/src/translator_nl.h
@@ -1002,6 +1002,17 @@ class TranslatorDutch : public Translator
virtual QCString trRTFTableOfContents()
{ 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
diff --git a/src/translator_pt.h b/src/translator_pt.h
index 7ebc4fa..02d6916 100644
--- a/src/translator_pt.h
+++ b/src/translator_pt.h
@@ -36,7 +36,7 @@
#ifndef TRANSLATOR_PT_H
#define TRANSLATOR_PT_H
-class TranslatorPortuguese : public Translator
+class TranslatorPortuguese : public TranslatorAdapter_1_2_17
{
public:
diff --git a/src/translator_ru.h b/src/translator_ru.h
index dafc470..172a3e6 100644
--- a/src/translator_ru.h
+++ b/src/translator_ru.h
@@ -50,7 +50,7 @@
#ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H
-class TranslatorRussian : public Translator
+class TranslatorRussian : public TranslatorAdapter_1_2_17
{
private:
/*! The Decode() inline assumes the source written in the
diff --git a/src/util.cpp b/src/util.cpp
index 4ca7d8e..7a48266 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -3148,7 +3148,7 @@ bool extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCStr
/*! Substitutes any occurrence of a formal argument from argument list
* \a formalArgs in \a name by the corresponding actual argument in
* 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.
*/
QCString substituteTemplateArgumentsInString(
@@ -3189,7 +3189,9 @@ QCString substituteTemplateArgumentsInString(
result += actArg->type;
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);
found=TRUE;
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 567cf02..8d8f78f 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -667,7 +667,7 @@ class XMLGenerator : public OutputDocInterface
// we need manually add a para here because cells are
// parsed before the table is generated, and thus
// are already parsed as if they are inside a paragraph.
- //m_t << "<para>";
+ m_t << "<para>";
}
void endTableRow()
{
@@ -1521,7 +1521,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
{
t << " id=\"" << ii->fileDef->getOutputFileBase() << "\"";
}
- t << " local=\"" << (ii->local ? "yes" : "no") << "\"";
+ t << " local=\"" << (ii->local ? "yes" : "no") << "\">";
t << nm;
t << "</includes>" << endl;
}