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
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.
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()
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);
}
//----------------------------------------------------------------------
......
......@@ -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;
}
......
......@@ -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;
};
......
......@@ -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
......
......@@ -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!
......
......@@ -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
......
......@@ -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
......
......@@ -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.
......
......@@ -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));
......
......@@ -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 */
......
......@@ -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
);
//-----------------------------------------------------------------------------------------------
......
......@@ -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;
......
......@@ -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;
......
......@@ -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(':');
......
......@@ -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();
......
......@@ -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,
......
......@@ -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()
......
......@@ -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();
......
......@@ -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
......
......@@ -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);
......
......@@ -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;
......
......@@ -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);
......
......@@ -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.
......
......@@ -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();
}
}
//----------------------------------------------------------------------------
......
......@@ -376,6 +376,12 @@ class Translator
//////////////////////////////////////////////////////////////////////////
virtual QCString trRTFTableOfContents() = 0;
//////////////////////////////////////////////////////////////////////////
// new since 1.2.17
//////////////////////////////////////////////////////////////////////////
virtual QCString trDeprecatedList() = 0;
};
......
......@@ -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()
......
......@@ -25,7 +25,7 @@
#ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H
class TranslatorBrazilian: public Translator
class TranslatorBrazilian: public TranslatorAdapter_1_2_17
{
public:
......
......@@ -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
......
......@@ -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:
......
......@@ -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
......@@ -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()
......
......@@ -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 */
......
......@@ -65,7 +65,7 @@
#ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H
class TranslatorItalian : public Translator
class TranslatorItalian : public TranslatorAdapter_1_2_17
{
public:
......
......@@ -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 */
......
......@@ -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
......@@ -36,7 +36,7 @@
#ifndef TRANSLATOR_PT_H
#define TRANSLATOR_PT_H
class TranslatorPortuguese : public Translator
class TranslatorPortuguese : public TranslatorAdapter_1_2_17
{
public:
......
......@@ -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
......
......@@ -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;
......
......@@ -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;
}
......
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