Commit e1fea278 authored by dimitri's avatar dimitri

Release-1.2.13-20020203

parent 8efa01a9
DOXYGEN Version 1.2.13-20020121 DOXYGEN Version 1.2.13-20020203
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (21 January 2002) Dimitri van Heesch (03 February 2002)
DOXYGEN Version 1.2.13_20020121 DOXYGEN Version 1.2.13_20020203
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (21 January 2002) Dimitri van Heesch (dimitri@stack.nl) (03 February 2002)
1.2.13-20020121 1.2.13-20020203
...@@ -1113,7 +1113,7 @@ ALIASES = "english=\if english" \ ...@@ -1113,7 +1113,7 @@ ALIASES = "english=\if english" \
\sa \sa
Section \ref cmdpage "\\page" for an example of the Section \ref cmdpage "\\page" for an example of the
\ref cmdsubsection "\\cmdsubsection" command. \ref cmdsubsection "\\subsection" command.
<hr> <hr>
......
...@@ -166,7 +166,7 @@ Thanks go to: ...@@ -166,7 +166,7 @@ Thanks go to:
for rendering the logos. for rendering the logos.
<li>Harm van der Heijden for adding HTML help support. <li>Harm van der Heijden for adding HTML help support.
<li>Wouter Slegers for registering the www.doxygen.org domain. <li>Wouter Slegers for registering the www.doxygen.org domain.
<li>Parker Waerchter for adding the RTF output generator. <li>Parker Waechter for adding the RTF output generator.
<li>Joerg Baumann, for adding conditional documentation blocks, <li>Joerg Baumann, for adding conditional documentation blocks,
PDF links, and the configuration generator. PDF links, and the configuration generator.
<li>Matthias Andree for providing a .spec script for building rpms from the <li>Matthias Andree for providing a .spec script for building rpms from the
......
...@@ -66,7 +66,7 @@ tools should be installed. ...@@ -66,7 +66,7 @@ tools should be installed.
\latexonly(see {\tt http://www.research.att.com/sw/tools/graphviz/})\endlatexonly. \latexonly(see {\tt http://www.research.att.com/sw/tools/graphviz/})\endlatexonly.
Needed for the include dependency graphs, Needed for the include dependency graphs,
the graphical inheritance graphs, and the collaboration graphs. the graphical inheritance graphs, and the collaboration graphs.
\note If you compile graphviz yourself, make sure you do include If you compile graphviz yourself, make sure you do include
freetype support (which requires the freetype library and header files), freetype support (which requires the freetype library and header files),
otherwise dot will produce a warning that it cannot find doxfont! otherwise dot will produce a warning that it cannot find doxfont!
<li>The ghostscript interpreter. <li>The ghostscript interpreter.
...@@ -210,6 +210,18 @@ instead of the <code>export</code> command above. ...@@ -210,6 +210,18 @@ instead of the <code>export</code> command above.
Now install doxygen as described above. Now install doxygen as described above.
<b>Bison problems</b>
Versions 1.31 and 1.32 of bison contain a "bug" that results in a
compiler error like this:
ce_parse.cpp:348: member `class CPPValue yyalloc::yyvs' with
constructor not allowed in union
There is no real solution to this problem, but it is discussed on the
bison mailing list. I recomment to use version 1.29 until the problems
with bison are resolved.
<b>Latex problems</b> <b>Latex problems</b>
The file <code>a4wide.sty</code> is not available for all distributions. If The file <code>a4wide.sty</code> is not available for all distributions. If
......
...@@ -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.13.1), 25 languages Currently (version 1.2.13-20020121), 25 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Brazilian Portuguese, Chinese, Croatian, Czech, Danish, Brazilian Portuguese, Chinese, Croatian, Czech, Danish,
Dutch, English, Finnish, French, German, Dutch, English, Finnish, French, German,
...@@ -60,7 +60,7 @@ when the translator was updated. ...@@ -60,7 +60,7 @@ when the translator was updated.
<TD>Chinese</TD> <TD>Chinese</TD>
<TD>Wei Liu<br>Wang Weihan</TD> <TD>Wei Liu<br>Wang Weihan</TD>
<TD>liuwei@NOSPAM.asiainfo.com<br>wangweihan@NOSPAM.capinfo.com.cn</TD> <TD>liuwei@NOSPAM.asiainfo.com<br>wangweihan@NOSPAM.capinfo.com.cn</TD>
<TD>up-to-date</TD> <TD>1.2.13</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Croatian</TD> <TD>Croatian</TD>
...@@ -72,7 +72,7 @@ when the translator was updated. ...@@ -72,7 +72,7 @@ when the translator was updated.
<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.13</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Danish</TD> <TD>Danish</TD>
...@@ -108,7 +108,7 @@ when the translator was updated. ...@@ -108,7 +108,7 @@ when the translator was updated.
<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>up-to-date</TD> <TD>1.2.13</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Greek</TD> <TD>Greek</TD>
...@@ -132,13 +132,13 @@ when the translator was updated. ...@@ -132,13 +132,13 @@ when the translator was updated.
<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.13</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Korean</TD> <TD>Korean</TD>
<TD>Richard Kim</TD> <TD>Richard Kim</TD>
<TD>ryk@NOSPAM.dspwiz.com</TD> <TD>ryk@NOSPAM.dspwiz.com</TD>
<TD>up-to-date</TD> <TD>1.2.13</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Norwegian</TD> <TD>Norwegian</TD>
...@@ -156,7 +156,7 @@ when the translator was updated. ...@@ -156,7 +156,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.13</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Romanian</TD> <TD>Romanian</TD>
...@@ -174,13 +174,13 @@ when the translator was updated. ...@@ -174,13 +174,13 @@ when the translator was updated.
<TD>Slovak</TD> <TD>Slovak</TD>
<TD>Stanislav Kudl&aacute;&#x010d;</TD> <TD>Stanislav Kudl&aacute;&#x010d;</TD>
<TD>skudlac@NOSPAM.pobox.sk</TD> <TD>skudlac@NOSPAM.pobox.sk</TD>
<TD>up-to-date</TD> <TD>1.2.13</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Slovene</TD> <TD>Slovene</TD>
<TD>Matjaz Ostroversnik</TD> <TD>Matjaz Ostroversnik</TD>
<TD>matjaz.ostroversnik@NOSPAM.zrs-tk.si</TD> <TD>matjaz.ostroversnik@NOSPAM.zrs-tk.si</TD>
<TD>up-to-date</TD> <TD>1.2.13</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Spanish</TD> <TD>Spanish</TD>
...@@ -213,12 +213,12 @@ when the translator was updated. ...@@ -213,12 +213,12 @@ when the translator was updated.
\hline \hline
Brazilian & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & up-to-date \\ Brazilian & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & up-to-date \\
\hline \hline
Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & up-to-date \\ 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
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\ Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\
\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.13 \\
\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
...@@ -230,7 +230,7 @@ when the translator was updated. ...@@ -230,7 +230,7 @@ when the translator was updated.
\hline \hline
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & up-to-date \\ French & Xavier Outhier & {\tt xouthier@yahoo.fr} & up-to-date \\
\hline \hline
German & Jens Seidel & {\tt jensseidel@users.sf.net} & up-to-date \\ German & Jens Seidel & {\tt jensseidel@users.sf.net} & 1.2.13 \\
& 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 \\
...@@ -240,24 +240,24 @@ when the translator was updated. ...@@ -240,24 +240,24 @@ when the translator was updated.
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\ Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\
& 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.13 \\
& 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} & up-to-date \\ Korean & Richard Kim & {\tt ryk@dspwiz.com} & 1.2.13 \\
\hline \hline
Norwegian & Lars Erik Jordet & {\tt larsej@stud.ifd.hibu.no} & 1.2.2 \\ Norwegian & Lars Erik Jordet & {\tt larsej@stud.ifd.hibu.no} & 1.2.2 \\
\hline \hline
Polish & Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & 1.2.1 \\ Polish & Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & 1.2.1 \\
\hline \hline
Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & up-to-date \\ Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.2.13 \\
\hline \hline
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.1 \\ Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.1 \\
\hline \hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\ Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\
\hline \hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt skudlac@pobox.sk} & up-to-date \\ Slovak & Stanislav Kudl\'{a}\v{c} & {\tt skudlac@pobox.sk} & 1.2.13 \\
\hline \hline
Slovene & Matjaz Ostroversnik & {\tt matjaz.ostroversnik@zrs-tk.si} & up-to-date \\ Slovene & Matjaz Ostroversnik & {\tt matjaz.ostroversnik@zrs-tk.si} & 1.2.13 \\
\hline \hline
Spanish & Francisco Oltra Thennet & {\tt foltra@puc.cl} & 1.2.7 \\ Spanish & Francisco Oltra Thennet & {\tt foltra@puc.cl} & 1.2.7 \\
\hline \hline
......
...@@ -110,6 +110,14 @@ ...@@ -110,6 +110,14 @@
# The older translator adapters are derived from newer ones. # The older translator adapters are derived from newer ones.
# The mistaken comment said the opposite. # The mistaken comment said the opposite.
# #
# 2002/01/23
# - The nasty bug corrected. GetAdapterClassesInfo() did not
# strip trailing blanks from the method prototype; consequently,
# the required methods implemented by a translator adapter was
# not recognized as the required one (i.e. not listed).
# - Some defined() operators used on hash elements were replaced
# by exists() operators where appropriate.
#
################################################################ ################################################################
use 5.005; use 5.005;
...@@ -421,6 +429,11 @@ sub GetAdapterClassesInfo ##{{{ ...@@ -421,6 +429,11 @@ sub GetAdapterClassesInfo ##{{{
# #
$cont =~ s{\n\s*\n}{\n}sg; $cont =~ s{\n\s*\n}{\n}sg;
# Trim the spaces.
#
$cont =~ s{^\s+}{}mg;
$cont =~ s{\s+$}{}mg;
# Split the string into the lines again. # Split the string into the lines again.
# #
@content = split(/\n/, $cont); @content = split(/\n/, $cont);
...@@ -475,7 +488,7 @@ sub GetAdapterClassesInfo ##{{{ ...@@ -475,7 +488,7 @@ sub GetAdapterClassesInfo ##{{{
# #
my $stripped_prototype = StripArgIdentifiers($line); my $stripped_prototype = StripArgIdentifiers($line);
if (defined $$reqref{$stripped_prototype}) if (exists($$reqref{$stripped_prototype}))
{ {
++$cnt; ++$cnt;
$methods .= " $line\n"; $methods .= " $line\n";
...@@ -498,11 +511,11 @@ sub GetAdapterClassesInfo ##{{{ ...@@ -498,11 +511,11 @@ sub GetAdapterClassesInfo ##{{{
# Return the result list. # Return the result list.
# #
# push @result, $cont; # ???
return @result; return @result;
} }
##}}} ##}}}
################################################################ ################################################################
# GenerateLanguageDoc takes document templates and code sources # GenerateLanguageDoc takes document templates and code sources
# generates the content as expected in the $flangdoc file (the # generates the content as expected in the $flangdoc file (the
...@@ -656,7 +669,7 @@ xxxTABLE_FOOTxxx ...@@ -656,7 +669,7 @@ xxxTABLE_FOOTxxx
# was not defined in sources, add the question mark to the # was not defined in sources, add the question mark to the
# language identifier. # language identifier.
# #
if (defined $language{$lang}) { if (exists($language{$lang})) {
$language{$lang} = $$rcb{"Translator$lang"} . '<msep/>' $language{$lang} = $$rcb{"Translator$lang"} . '<msep/>'
. join("<sep/>", @info); . join("<sep/>", @info);
} }
...@@ -1053,8 +1066,8 @@ print STDERR "\n\n"; ...@@ -1053,8 +1066,8 @@ print STDERR "\n\n";
# Otherwise, remember it as old method which is # Otherwise, remember it as old method which is
# implemented, but not required. # implemented, but not required.
# #
if (defined $required{$prototype}) { if (exists($required{$prototype})) {
$required{$prototype} = 0; $required{$prototype} = 0; # satisfaction
} }
else { else {
push(@old_methods, $implemented); push(@old_methods, $implemented);
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.2.13_20020121 Version: 1.2.13_20020203
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -1580,7 +1580,6 @@ bool ClassDef::isLinkableInProject() const ...@@ -1580,7 +1580,6 @@ bool ClassDef::isLinkableInProject() const
else else
{ {
return !name().isEmpty() && /* no name */ return !name().isEmpty() && /* no name */
//m_isTemplBaseClass==-1 && /* template base class */
!m_artificial && !m_artificial &&
name().find('@')==-1 && /* anonymous compound */ name().find('@')==-1 && /* anonymous compound */
(m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */ (m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */
...@@ -1635,7 +1634,7 @@ bool ClassDef::hasDocumentation() const ...@@ -1635,7 +1634,7 @@ bool ClassDef::hasDocumentation() const
// returns TRUE iff class definition `bcd' represents an (in)direct base // returns TRUE iff class definition `bcd' represents an (in)direct base
// class of class definition `cd'. // class of class definition `cd'.
bool ClassDef::isBaseClass(ClassDef *bcd) bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances)
{ {
bool found=FALSE; bool found=FALSE;
//printf("isBaseClass(cd=%s) looking for %s\n",cd->name().data(),bcd->name().data()); //printf("isBaseClass(cd=%s) looking for %s\n",cd->name().data(),bcd->name().data());
...@@ -1643,12 +1642,12 @@ bool ClassDef::isBaseClass(ClassDef *bcd) ...@@ -1643,12 +1642,12 @@ bool ClassDef::isBaseClass(ClassDef *bcd)
for ( ; bcli.current() && !found ; ++bcli) for ( ; bcli.current() && !found ; ++bcli)
{ {
ClassDef *ccd=bcli.current()->classDef; ClassDef *ccd=bcli.current()->classDef;
if (ccd->templateMaster()) ccd=ccd->templateMaster(); if (!followInstances && ccd->templateMaster()) ccd=ccd->templateMaster();
//printf("isBaseClass() baseclass %s\n",ccd->name().data()); //printf("isBaseClass() baseclass %s\n",ccd->name().data());
if (ccd==bcd) if (ccd==bcd)
found=TRUE; found=TRUE;
else else
found=ccd->isBaseClass(bcd); found=ccd->isBaseClass(bcd,followInstances);
} }
return found; return found;
} }
...@@ -1719,7 +1718,7 @@ void ClassDef::mergeMembers() ...@@ -1719,7 +1718,7 @@ void ClassDef::mergeMembers()
{ {
ClassDef *dstCd = dstMd->getClassDef(); ClassDef *dstCd = dstMd->getClassDef();
//printf(" Is %s a base class of %s?\n",srcCd->name().data(),dstCd->name().data()); //printf(" Is %s a base class of %s?\n",srcCd->name().data(),dstCd->name().data());
if (srcCd==dstCd || dstCd->isBaseClass(srcCd)) if (srcCd==dstCd || dstCd->isBaseClass(srcCd,TRUE))
// member is in the same or a base class // member is in the same or a base class
{ {
found=matchArguments(srcMd->argumentList(), found=matchArguments(srcMd->argumentList(),
...@@ -1748,7 +1747,8 @@ void ClassDef::mergeMembers() ...@@ -1748,7 +1747,8 @@ void ClassDef::mergeMembers()
{ {
// do not add if base class is virtual or // do not add if base class is virtual or
// if scope paths are equal // if scope paths are equal
if ((srcMi->virt==Virtual && dstMi->virt==Virtual) || //printf("same member found srcMi->virt=%d dstMi->virt=%d\n",srcMi->virt,dstMi->virt);
if ((srcMi->virt!=Normal && dstMi->virt!=Normal) ||
bClass->name()+"::"+srcMi->scopePath == dstMi->scopePath bClass->name()+"::"+srcMi->scopePath == dstMi->scopePath
) )
{ {
......
...@@ -151,7 +151,7 @@ class ClassDef : public Definition ...@@ -151,7 +151,7 @@ class ClassDef : public Definition
* class. This function will recusively traverse all branches of the * class. This function will recusively traverse all branches of the
* inheritance tree. * inheritance tree.
*/ */
bool isBaseClass(ClassDef *bcd); bool isBaseClass(ClassDef *bcd,bool followInstances);
/*! Returns a sorted dictionary with all template instances found for /*! Returns a sorted dictionary with all template instances found for
* this template class. Returns 0 if not a template or no instances. * this template class. Returns 0 if not a template or no instances.
...@@ -279,8 +279,6 @@ class ClassDef : public Definition ...@@ -279,8 +279,6 @@ class ClassDef : public Definition
void addListReferences(); void addListReferences();
/*! Creates a new compound definition. /*! Creates a new compound definition.
* \param outerScope class, file or namespace in which this class is
* defined.
* \param fileName full path and file name in which this compound was * \param fileName full path and file name in which this compound was
* found. * found.
* \param startLine line number where the definition of this compound * \param startLine line number where the definition of this compound
......
...@@ -1092,17 +1092,13 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1092,17 +1092,13 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_code->codify(yytext); g_code->codify(yytext);
// TODO: remove
g_inClass=FALSE; g_inClass=FALSE;
if (--g_curlyCount<=0)
{
//g_classScope.resize(0);
//g_codeParmList.clear();
}
if (--g_bodyCurlyCount<=0) if (--g_bodyCurlyCount<=0)
{ {
g_insideBody=FALSE; g_insideBody=FALSE;
g_currentMemberDef=0;
g_currentDefinition=0;
} }
} }
<ClassName,ClassVar>";" { <ClassName,ClassVar>";" {
......
...@@ -102,8 +102,17 @@ void Definition::writeDocAnchorsToTagFile() ...@@ -102,8 +102,17 @@ void Definition::writeDocAnchorsToTagFile()
} }
} }
void Definition::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE)
{
if (stripWhiteSpace)
m_doc=((QCString)d).stripWhiteSpace();
else
m_doc=d;
m_docFile = docFile;
m_docLine = docLine;
}
void Definition::setBriefDescription(const char *b) void Definition::setBriefDescription(const char *b,const char *briefFile,int briefLine)
{ {
m_brief=QCString(b).stripWhiteSpace(); m_brief=QCString(b).stripWhiteSpace();
int bl=m_brief.length(); int bl=m_brief.length();
...@@ -115,6 +124,8 @@ void Definition::setBriefDescription(const char *b) ...@@ -115,6 +124,8 @@ void Definition::setBriefDescription(const char *b)
default: m_brief+='.'; break; default: m_brief+='.'; break;
} }
} }
m_briefFile = briefFile;
m_briefLine = briefLine;
} }
/*! Reads a fragment of code from file \a fileName starting at /*! Reads a fragment of code from file \a fileName starting at
......
...@@ -64,17 +64,15 @@ class Definition ...@@ -64,17 +64,15 @@ class Definition
/*! Sets a new \a name for the definition */ /*! Sets a new \a name for the definition */
void setName(const char *name) { m_name=name; } void setName(const char *name) { m_name=name; }
/*! Sets the documentation of this definition to \a d. */ /*! Sets the documentation of this definition to \a d. */
void setDocumentation(const char *d,bool stripWhiteSpace=TRUE) void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
{ int docLine() const { return m_docLine; }
if (stripWhiteSpace) QCString docFile() const { return m_docFile; }
m_doc=((QCString)d).stripWhiteSpace();
else
m_doc=d;
}
/*! Sets the brief description of this definition to \a b. /*! Sets the brief description of this definition to \a b.
* A dot is added to the sentence if not available. * A dot is added to the sentence if not available.
*/ */
void setBriefDescription(const char *b); void setBriefDescription(const char *b,const char *briefFile,int briefLine);
int briefLine() const { return m_briefLine; }
QCString briefFile() const { return m_briefFile; }
/*! Returns TRUE iff the definition is documented */ /*! Returns TRUE iff the definition is documented */
virtual bool hasDocumentation() const; virtual bool hasDocumentation() const;
virtual bool isLinkableInProject() const = 0; virtual bool isLinkableInProject() const = 0;
...@@ -155,6 +153,10 @@ class Definition ...@@ -155,6 +153,10 @@ 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_docLine;
QCString m_docFile;
int m_briefLine;
QCString m_briefFile;
}; };
......
...@@ -21,10 +21,11 @@ ...@@ -21,10 +21,11 @@
#include "qtbc.h" #include "qtbc.h"
class OutputDocInterface; class OutputDocInterface;
class MemberDef;
extern void parseDoc(OutputDocInterface &ol, extern void parseDoc(OutputDocInterface &ol,
const char *fileName,int startLine, const char *fileName,int startLine,
const char *clName, const char *memName, const char *clName, MemberDef *md,
const QCString &docString); const QCString &docString);
extern void parseExample(OutputDocInterface &ol,const QCString &docString, extern void parseExample(OutputDocInterface &ol,const QCString &docString,
const char *fileName); const char *fileName);
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
//#include <iostream.h>
#include <assert.h> #include <assert.h>
#include <ctype.h> #include <ctype.h>
...@@ -51,10 +50,13 @@ ...@@ -51,10 +50,13 @@
* *
* scanner's state variables * scanner's state variables
*/ */
static MemberDef * memberDef;
static bool hasParamCommand;
static QDict<void> paramsFound;
static OutputDocInterface * outDoc; static OutputDocInterface * outDoc;
static bool insideArgumentList; static bool insideArgumentList;
static QCString className; static QCString className;
static QCString memberName;
static QCString linkRef; static QCString linkRef;
static QCString linkText; static QCString linkText;
static QCString codeBlock; static QCString codeBlock;
...@@ -109,7 +111,6 @@ static void initParser() ...@@ -109,7 +111,6 @@ static void initParser()
{ {
insideArgumentList=FALSE; insideArgumentList=FALSE;
className.resize(0); className.resize(0);
memberName.resize(0);
linkRef.resize(0); linkRef.resize(0);
linkText.resize(0); linkText.resize(0);
codeBlock.resize(0); codeBlock.resize(0);
...@@ -875,6 +876,44 @@ static void writeDotFile(const char *fileName, const char *captionText) ...@@ -875,6 +876,44 @@ static void writeDotFile(const char *fileName, const char *captionText)
} }
} }
/* ----------------------------------------------------------------- */
static void checkArgName(const QCString &name)
{
hasParamCommand=TRUE;
if (memberDef==0) return; // not a member
ArgumentList *al=memberDef->isDocsForDefinition() ?
memberDef->argumentList() :
memberDef->declArgumentList();
if (al==0) return; // no argument list
if (!Config_getBool("WARN_IF_UNDOCUMENTED")) return;
static QRegExp re("[a-zA-Z0-9_]+");
int p=0,i=0,l;
while ((i=re.match(name,p,&l))!=-1)
{
QCString aName=name.mid(i,l);
ArgumentListIterator ali(*al);
Argument *a;
for (ali.toFirst();(a=ali.current());++ali)
{
if (name==a->name)
{
paramsFound.insert(name,(void *)(0x8));
return;
}
}
QCString scope=memberDef->getScopeString();
if (!scope.isEmpty()) scope+="::"; else scope="";
warn(memberDef->docFile(),memberDef->docLine(),
"Warning: argument `%s' of command @param "
"is not found in the argument list of %s%s%s",
name.data(),scope.data(),memberDef->name().data(),
argListToString(al).data()
);
p=i+l;
}
}
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
#undef YY_INPUT #undef YY_INPUT
...@@ -911,7 +950,7 @@ SCOPEMASK {ID}?(("::"|"#")?(~)?{ID})+ ...@@ -911,7 +950,7 @@ SCOPEMASK {ID}?(("::"|"#")?(~)?{ID})+
URLCHAR [a-z_A-Z0-9\~\:\?\@\&\%\#\.\-\+\/\=] URLCHAR [a-z_A-Z0-9\~\:\?\@\&\%\#\.\-\+\/\=]
URLMASK ([a-z_A-Z][^\>\"\n]*{URLCHAR})|({URLCHAR}+) URLMASK ([a-z_A-Z][^\>\"\n]*{URLCHAR})|({URLCHAR}+)
NONTERM [\{\}\[\]\`\~\@\|\-\+\#\$\/\\\!\%\^\&\*()a-z_A-Z<>0-9\x80-\xff] NONTERM [\{\}\[\]\`\~\@\|\-\+\#\$\/\\\!\%\^\&\*()a-z_A-Z<>0-9\x80-\xff]
WORD ({NONTERM}+([^\n\t ]*{NONTERM}+)?)|("\""[^\n\"]"\"") WORD ({NONTERM}+([^\n\t ]*{NONTERM}+)?)|("\""[^\n\"]*"\"")
ATTR ({B}+[^>\n]*)? ATTR ({B}+[^>\n]*)?
A [aA] A [aA]
BOLD [bB] BOLD [bB]
...@@ -1631,8 +1670,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1631,8 +1670,10 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
<DocScan>"\\capt".* <DocScan>"\\capt".*
<DocParam>({DOCPARAM}{BN}*","{BN}*)*{DOCPARAM}{BSEP}* { <DocParam>({DOCPARAM}{BN}*","{BN}*)*{DOCPARAM}{BSEP}* {
QCString argName = substitute(yytext,"\"","").stripWhiteSpace();
if (inParamBlock) checkArgName(argName);
outDoc->startDescTableTitle(); outDoc->startDescTableTitle();
scanDoc(substitute(yytext,"\"","").stripWhiteSpace()); scanDoc(argName);
outDoc->endDescTableTitle(); outDoc->endDescTableTitle();
outDoc->startDescTableData(); outDoc->startDescTableData();
BEGIN(DocScan); BEGIN(DocScan);
...@@ -2633,18 +2674,58 @@ void parseDocument(OutputDocInterface &od,const QCString &docString) ...@@ -2633,18 +2674,58 @@ void parseDocument(OutputDocInterface &od,const QCString &docString)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void parseDoc(OutputDocInterface &od,const char *fileName,int startLine, void parseDoc(OutputDocInterface &od,const char *fileName,int startLine,
const char *clName,const char *memName,const QCString &docString) const char *clName,MemberDef *md,const QCString &docString)
{ {
//printf("parseDoc(file=`%s',line=%d)\n",fileName,startLine); //printf("parseDoc(file=`%s',line=%d)\n",fileName,startLine);
initParser(); initParser();
initParseCodeContext(); initParseCodeContext();
exampleDoc=FALSE; // do not cross reference with member docs exampleDoc=FALSE; // do not cross reference with member docs
className=clName; className=clName;
memberName=memName; memberDef = md;
hasParamCommand = FALSE;
paramsFound.setAutoDelete(FALSE);
paramsFound.clear();
strcpy(yyFileName,fileName); strcpy(yyFileName,fileName);
yyLineNr = startLine; yyLineNr = startLine;
parseDocument(od,docString); parseDocument(od,docString);
if (md && hasParamCommand && Config_getBool("WARN_IF_UNDOCUMENTED"))
{
ArgumentList *al=memberDef->isDocsForDefinition() ?
memberDef->argumentList() :
memberDef->declArgumentList();
if (al)
{
ArgumentListIterator ali(*al);
Argument *a;
bool found=FALSE;
for (ali.toFirst();(a=ali.current());++ali)
{
if (!a->name.isEmpty() && paramsFound.find(a->name)==0)
{
found = TRUE;
break;
}
}
if (found)
{
QCString scope=memberDef->getScopeString();
if (!scope.isEmpty()) scope+="::"; else scope="";
warn(memberDef->docFile(),memberDef->docLine(),
"Warning: The following parameters of "
"%s%s%s are not documented:",
scope.data(),memberDef->name().data(),
argListToString(al).data());
for (ali.toFirst();(a=ali.current());++ali)
{
if (!a->name.isEmpty() && paramsFound.find(a->name)==0)
{
warn_cont( " parameter %s\n",a->name.data());
}
}
}
}
}
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
......
This diff is collapsed.
...@@ -65,8 +65,12 @@ Entry::Entry(const Entry &e) ...@@ -65,8 +65,12 @@ Entry::Entry(const Entry &e)
includeFile = e.includeFile.copy(); includeFile = e.includeFile.copy();
includeName = e.includeFile.copy(); includeName = e.includeFile.copy();
doc = e.doc.copy(); doc = e.doc.copy();
docLine = e.docLine;
docFile = e.docFile.copy();
relates = e.relates.copy(); relates = e.relates.copy();
brief = e.brief.copy(); brief = e.brief.copy();
briefLine = e.briefLine;
briefFile = e.briefFile.copy();
inside = e.inside.copy(); inside = e.inside.copy();
fileName = e.fileName.copy(); fileName = e.fileName.copy();
startLine = e.startLine; startLine = e.startLine;
...@@ -90,9 +94,7 @@ Entry::Entry(const Entry &e) ...@@ -90,9 +94,7 @@ Entry::Entry(const Entry &e)
anchors->setAutoDelete(TRUE); anchors->setAutoDelete(TRUE);
argList = new ArgumentList; argList = new ArgumentList;
argList->setAutoDelete(TRUE); argList->setAutoDelete(TRUE);
//printf("Entry::Entry(copy) tArgList=0\n");
tArgLists = 0; tArgLists = 0;
//mtArgList = 0;
groupDocType = e.groupDocType; groupDocType = e.groupDocType;
// deep copy of the child entry list // deep copy of the child entry list
...@@ -206,8 +208,12 @@ void Entry::reset() ...@@ -206,8 +208,12 @@ void Entry::reset()
includeFile.resize(0); includeFile.resize(0);
includeName.resize(0); includeName.resize(0);
doc.resize(0); doc.resize(0);
docFile.resize(0);
docLine=-1;
relates.resize(0); relates.resize(0);
brief.resize(0); brief.resize(0);
briefFile.resize(0);
briefLine=-1;
inside.resize(0); inside.resize(0);
fileName.resize(0); fileName.resize(0);
//scopeSpec.resize(0); //scopeSpec.resize(0);
...@@ -251,12 +257,13 @@ int Entry::getSize() ...@@ -251,12 +257,13 @@ int Entry::getSize()
size+=bitfields.length()+1; size+=bitfields.length()+1;
size+=exception.length()+1; size+=exception.length()+1;
size+=program.length()+1; size+=program.length()+1;
//size+=body.length()+1;
size+=includeFile.length()+1; size+=includeFile.length()+1;
size+=includeName.length()+1; size+=includeName.length()+1;
size+=doc.length()+1; size+=doc.length()+1;
size+=docFile.length()+1;
size+=relates.length()+1; size+=relates.length()+1;
size+=brief.length()+1; size+=brief.length()+1;
size+=briefFile.length()+1;
size+=inside.length()+1; size+=inside.length()+1;
size+=fileName.length()+1; size+=fileName.length()+1;
size+=initializer.length()+1; size+=initializer.length()+1;
......
...@@ -254,15 +254,17 @@ class Entry ...@@ -254,15 +254,17 @@ class Entry
QCString bitfields; //!< member's bit fields QCString bitfields; //!< member's bit fields
ArgumentList *argList; //!< member arguments as a list ArgumentList *argList; //!< member arguments as a list
QList<ArgumentList> *tArgLists; //!< template argument declarations QList<ArgumentList> *tArgLists; //!< template argument declarations
//QCString scopeSpec; //!< template specialization of the scope
//QCString memberSpec; //!< template specialization of the member
QCString program; //!< the program text QCString program; //!< the program text
QCString initializer; //!< initial value (for variables) QCString initializer; //!< initial value (for variables)
QCString includeFile; //!< include file (2 arg of \class, must be unique) QCString includeFile; //!< include file (2 arg of \class, must be unique)
QCString includeName; //!< include name (3 arg of \class) QCString includeName; //!< include name (3 arg of \class)
QCString doc; //!< documentation block (partly parsed) QCString doc; //!< documentation block (partly parsed)
QCString relates; //!< related class (doc block) int docLine; //!< line number at which the documentation was found
QCString docFile; //!< file in which the documentation was found
QCString brief; //!< brief description (doc block) QCString brief; //!< brief description (doc block)
int briefLine; //!< line number at which the brief desc. was found
QCString briefFile; //!< file in which the brief desc. was found
QCString relates; //!< related class (doc block)
QCString inside; //!< name of the class in which documents are found QCString inside; //!< name of the class in which documents are found
QCString exception; //!< throw specification QCString exception; //!< throw specification
int bodyLine; //!< line number of the definition in the source int bodyLine; //!< line number of the definition in the source
......
...@@ -443,8 +443,10 @@ int FTVHelp::decContentsDepth() ...@@ -443,8 +443,10 @@ int FTVHelp::decContentsDepth()
/*! Add a list item to the contents file. /*! Add a list item to the contents file.
* \param isDir TRUE if the item is a directory, FALSE if it is a text * \param isDir TRUE if the item is a directory, FALSE if it is a text
* \param name the name of the item.
* \param ref the URL of to the item. * \param ref the URL of to the item.
* \param file the file containing the definition of the item
* \param anchor the anchor within the file.
* \param name the name of the item.
*/ */
void FTVHelp::addContentsItem(bool isDir, void FTVHelp::addContentsItem(bool isDir,
const char *ref, const char *ref,
......
...@@ -134,14 +134,16 @@ void HtmlGenerator::writeStyleSheetFile(QFile &file) ...@@ -134,14 +134,16 @@ void HtmlGenerator::writeStyleSheetFile(QFile &file)
t << defaultStyleSheet; t << defaultStyleSheet;
} }
static void writeDefaultHeaderFile(QTextStream &t,const char *title, static void writeDefaultHeaderFile(QTextStream &t, const char *title,
bool external) bool external)
{ {
t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n" t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
"<html><head>" /*"<meta name=\"robots\" content=\"noindex\">\n"*/ "<html><head>" /*"<meta name=\"robots\" content=\"noindex\">\n"*/
"<meta http-equiv=\"Content-Type\" content=\"text/html;charset=" "<meta http-equiv=\"Content-Type\" content=\"text/html;charset="
<< theTranslator->idLanguageCharset() << "\">\n" << theTranslator->idLanguageCharset() << "\">\n"
"<title>" << title << "</title>\n"; "<title>";
t << convertToHtml(title);
t << "</title>\n";
t << "<link "; t << "<link ";
if (external) if (external)
t << "doxygen=\"_doc:" << Config_getString("DOC_URL") t << "doxygen=\"_doc:" << Config_getString("DOC_URL")
...@@ -212,7 +214,7 @@ void HtmlGenerator::startFile(const char *name,const char *, ...@@ -212,7 +214,7 @@ void HtmlGenerator::startFile(const char *name,const char *,
} }
else else
{ {
t << substituteKeywords(g_header,lastTitle); t << substituteKeywords(g_header,convertToHtml(lastTitle));
} }
t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen " t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
<< versionString << " -->" << endl; << versionString << " -->" << endl;
...@@ -255,7 +257,7 @@ void HtmlGenerator::writeFooter(int part,bool external) ...@@ -255,7 +257,7 @@ void HtmlGenerator::writeFooter(int part,bool external)
if (g_footer.isEmpty()) if (g_footer.isEmpty())
t << "<hr><address><small>"; t << "<hr><address><small>";
else else
t << substituteKeywords(g_footer,lastTitle); t << substituteKeywords(g_footer,convertToHtml(lastTitle));
break; break;
case 1: case 1:
if (g_footer.isEmpty()) if (g_footer.isEmpty())
......
...@@ -82,7 +82,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -82,7 +82,7 @@ class HtmlGenerator : public OutputGenerator
void codify(const char *text); void codify(const char *text);
void writeObjectLink(const char *ref,const char *file, void writeObjectLink(const char *ref,const char *file,
const char *anchor,const char *name); const char *anchor,const char *name);
void writeCodeLink(const char *ref,const char *f, void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name); const char *anchor,const char *name);
void startTextLink(const char *file,const char *anchor); void startTextLink(const char *file,const char *anchor);
void endTextLink(); void endTextLink();
......
...@@ -396,8 +396,10 @@ int HtmlHelp::decContentsDepth() ...@@ -396,8 +396,10 @@ int HtmlHelp::decContentsDepth()
} }
/*! Add an list item to the contents file. /*! Add an list item to the contents file.
* \param isDir boolean indicating if this is a dir or file entry
* \param name the name of the item. * \param name the name of the item.
* \param ref the URL of to the item. * \param ref the URL of to the item.
* \param anchor the anchor of the item.
*/ */
void HtmlHelp::addContentsItem(bool isDir, void HtmlHelp::addContentsItem(bool isDir,
const char *name,const char *ref, const char *name,const char *ref,
...@@ -433,8 +435,10 @@ void HtmlHelp::addContentsItem(bool isDir, ...@@ -433,8 +435,10 @@ void HtmlHelp::addContentsItem(bool isDir,
} }
/*! Add an list item to the index file. /*! Add an list item to the index file.
* \param name the name of the item. * \param level1 the main index of the item.
* \param level2 the sub index of the item.
* \param ref the URL of to the item. * \param ref the URL of to the item.
* \param anchor the anchor of the item.
* \sa HtmlHelpIndex * \sa HtmlHelpIndex
*/ */
void HtmlHelp::addIndexItem(const char *level1, const char *level2, void HtmlHelp::addIndexItem(const char *level1, const char *level2,
......
...@@ -586,7 +586,8 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started) ...@@ -586,7 +586,8 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started)
bool hasChildren = !cd->visited && cd->subClasses()->count()>0; bool hasChildren = !cd->visited && cd->subClasses()->count()>0;
if (cd->isLinkable()) if (cd->isLinkable())
{ {
//printf("Writing class %s\n",cd->displayName().data()); //printf("Writing class %s isLinkable()=%d isLinkableInProject()=%d cd->templateMaster()=%p\n",
// cd->displayName().data(),cd->isLinkable(),cd->isLinkableInProject(),cd->templateMaster());
ol.writeIndexItem(cd->getReference(),cd->getOutputFileBase(),cd->displayName()); ol.writeIndexItem(cd->getReference(),cd->getOutputFileBase(),cd->displayName());
if (cd->isReference()) if (cd->isReference())
{ {
......
...@@ -78,14 +78,14 @@ class LatexGenerator : public OutputGenerator ...@@ -78,14 +78,14 @@ class LatexGenerator : public OutputGenerator
void docify(const char *text); void docify(const char *text);
void codify(const char *text); void codify(const char *text);
void writeObjectLink(const char *ref,const char *file, void writeObjectLink(const char *ref,const char *file,
const char *anchor,const char *text); const char *anchor,const char *name);
void writeCodeLink(const char *ref, const char *file, void writeCodeLink(const char *ref, const char *file,
const char *anchor,const char *text); const char *anchor,const char *name);
void startTextLink(const char *,const char *); void startTextLink(const char *,const char *);
void endTextLink(); void endTextLink();
void startHtmlLink(const char *); void startHtmlLink(const char *url);
void endHtmlLink(); void endHtmlLink();
void writeMailLink(const char *); void writeMailLink(const char *url);
void startTypewriter() { t << "{\\tt "; } void startTypewriter() { t << "{\\tt "; }
void endTypewriter() { t << "}"; } void endTypewriter() { t << "}"; }
void startGroupHeader(); void startGroupHeader();
......
...@@ -77,7 +77,7 @@ class ManGenerator : public OutputGenerator ...@@ -77,7 +77,7 @@ class ManGenerator : public OutputGenerator
void codify(const char *text); void codify(const char *text);
void writeObjectLink(const char *ref,const char *file, void writeObjectLink(const char *ref,const char *file,
const char *anchor,const char *name); const char *anchor,const char *name);
void writeCodeLink(const char *ref,const char *f, void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name); const char *anchor,const char *name);
void startTextLink(const char *,const char *) {} void startTextLink(const char *,const char *) {}
void endTextLink() {} void endTextLink() {}
......
This diff is collapsed.
...@@ -164,8 +164,8 @@ class MemberDef : public Definition ...@@ -164,8 +164,8 @@ class MemberDef : public Definition
// relation to other members // relation to other members
void setReimplements(MemberDef *md); void setReimplements(MemberDef *md);
void insertReimplementedBy(MemberDef *md); void insertReimplementedBy(MemberDef *md);
MemberDef *reimplements() const { return redefines; } MemberDef *reimplements() const;
MemberList *reimplementedBy() const { return redefinedBy; } MemberList *reimplementedBy() const;
// enumeration specific members // enumeration specific members
void insertEnumField(MemberDef *md); void insertEnumField(MemberDef *md);
...@@ -180,6 +180,7 @@ class MemberDef : public Definition ...@@ -180,6 +180,7 @@ class MemberDef : public Definition
bool hasDocumentedEnumValues() const { return docEnumValues; } bool hasDocumentedEnumValues() const { return docEnumValues; }
void setAnonymousEnumType(MemberDef *md) { annEnumType = md; } void setAnonymousEnumType(MemberDef *md) { annEnumType = md; }
MemberDef *getAnonymousEnumType() const { return annEnumType; } MemberDef *getAnonymousEnumType() const { return annEnumType; }
bool isDocsForDefinition() const { return docsForDefinition; }
// example related members // example related members
bool addExample(const char *anchor,const char *name,const char *file); bool addExample(const char *anchor,const char *name,const char *file);
...@@ -191,10 +192,17 @@ class MemberDef : public Definition ...@@ -191,10 +192,17 @@ class MemberDef : public Definition
bool isPrototype() const { return proto; } bool isPrototype() const { return proto; }
// argument related members // argument related members
ArgumentList *argumentList() const { return argList; } ArgumentList *argumentList() const { return defArgList; }
ArgumentList *declArgumentList() const { return declArgList; }
void setArgumentList(ArgumentList *al) void setArgumentList(ArgumentList *al)
{ if (argList) delete argList; {
argList = al; if (defArgList) delete defArgList;
defArgList = al;
}
void setDeclArgumentList(ArgumentList *al)
{
if (declArgList) delete declArgList;
declArgList = al;
} }
ArgumentList *templateArguments() const { return tArgList; } ArgumentList *templateArguments() const { return tArgList; }
void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists); void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists);
...@@ -234,6 +242,7 @@ class MemberDef : public Definition ...@@ -234,6 +242,7 @@ class MemberDef : public Definition
return bodyMemb ? bodyMemb->anchor() : anchor(); return bodyMemb ? bodyMemb->anchor() : anchor();
} }
void setBodyMember(MemberDef *md) { bodyMemb = md; } void setBodyMember(MemberDef *md) { bodyMemb = md; }
void setDocsForDefinition(bool b) { docsForDefinition = b; }
bool visited; bool visited;
...@@ -281,10 +290,9 @@ class MemberDef : public Definition ...@@ -281,10 +290,9 @@ class MemberDef : public Definition
int userInitLines; // result of explicit \hideinitializer or \showinitializer int userInitLines; // result of explicit \hideinitializer or \showinitializer
MemberList *section; // declation list containing this member MemberList *section; // declation list containing this member
MemberDef *annMemb; MemberDef *annMemb;
ArgumentList *argList; // argument list of this member ArgumentList *defArgList; // argument list of this member definition
ArgumentList *declArgList; // argument list of this member declaration
ArgumentList *tArgList; // template argument list of function template ArgumentList *tArgList; // template argument list of function template
//ArgumentList *scopeTAL; // template argument list of class template
//ArgumentList *membTAL; // template argument list of class template
QList<ArgumentList> *m_defTmpArgLists; QList<ArgumentList> *m_defTmpArgLists;
int grpId; // group id int grpId; // group id
MemberGroup *memberGroup; // group's member definition MemberGroup *memberGroup; // group's member definition
...@@ -302,6 +310,9 @@ class MemberDef : public Definition ...@@ -302,6 +310,9 @@ class MemberDef : public Definition
bool groupHasDocs; // true if the entry that caused the grouping was documented bool groupHasDocs; // true if the entry that caused the grouping was documented
MemberDef *m_templateMaster; MemberDef *m_templateMaster;
SIntDict<MemberList> *classSectionSDict; SIntDict<MemberList> *classSectionSDict;
bool docsForDefinition; // TRUE => documentation block is put before
// definition.
// FALSE => block is put before declaration.
// disable copying of member defs // disable copying of member defs
......
...@@ -142,8 +142,8 @@ void MemberGroup::distributeMemberGroupDocumentation() ...@@ -142,8 +142,8 @@ void MemberGroup::distributeMemberGroupDocumentation()
if (omd->documentation().isEmpty() && omd->briefDescription().isEmpty()) if (omd->documentation().isEmpty() && omd->briefDescription().isEmpty())
{ {
//printf("Copying documentation to member %s\n",omd->name().data()); //printf("Copying documentation to member %s\n",omd->name().data());
omd->setBriefDescription(md->briefDescription()); omd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
omd->setDocumentation(md->documentation()); omd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
} }
omd=memberList->next(); omd=memberList->next();
} }
......
...@@ -343,7 +343,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -343,7 +343,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
ol.startMemberDescription(); ol.startMemberDescription();
parseDoc(ol, parseDoc(ol,
md->getDefFileName(),md->getDefLine(), md->getDefFileName(),md->getDefLine(),
cd?cd->name().data():0,md->name().data(), cd?cd->name().data():0,md,
md->briefDescription() md->briefDescription()
); );
if (md->isDetailedSectionLinkable()) if (md->isDetailedSectionLinkable())
......
...@@ -95,10 +95,10 @@ class BaseOutputDocInterface ...@@ -95,10 +95,10 @@ class BaseOutputDocInterface
* \param file The file in which the object is located. * \param file The file in which the object is located.
* \param anchor The anchor uniquely identifying the object within * \param anchor The anchor uniquely identifying the object within
* the file. * the file.
* \param text The text to display as a placeholder for the link. * \param name The text to display as a placeholder for the link.
*/ */
virtual void writeObjectLink(const char *ref,const char *file, virtual void writeObjectLink(const char *ref,const char *file,
const char *anchor, const char *text) = 0; const char *anchor, const char *name) = 0;
/*! Writes a link to an object in a code fragment. /*! Writes a link to an object in a code fragment.
* \param ref If this is non-zero, the object is to be found in * \param ref If this is non-zero, the object is to be found in
...@@ -106,10 +106,10 @@ class BaseOutputDocInterface ...@@ -106,10 +106,10 @@ class BaseOutputDocInterface
* \param file The file in which the object is located. * \param file The file in which the object is located.
* \param anchor The anchor uniquely identifying the object within * \param anchor The anchor uniquely identifying the object within
* the file. * the file.
* \param text The text to display as a placeholder for the link. * \param name The text to display as a placeholder for the link.
*/ */
virtual void writeCodeLink(const char *ref,const char *file, virtual void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *text) = 0; const char *anchor,const char *name) = 0;
/*! Starts a (link to an) URL found in the documentation. /*! Starts a (link to an) URL found in the documentation.
* \param url The URL to link to. * \param url The URL to link to.
......
...@@ -134,11 +134,11 @@ class OutputList : public OutputDocInterface ...@@ -134,11 +134,11 @@ class OutputList : public OutputDocInterface
void codify(const char *s) void codify(const char *s)
{ forall(&OutputGenerator::codify,s); } { forall(&OutputGenerator::codify,s); }
void writeObjectLink(const char *ref,const char *file, void writeObjectLink(const char *ref,const char *file,
const char *anchor, const char *text) const char *anchor, const char *name)
{ forall(&OutputGenerator::writeObjectLink,ref,file,anchor,text); } { forall(&OutputGenerator::writeObjectLink,ref,file,anchor,name); }
void writeCodeLink(const char *ref,const char *file, void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *text) const char *anchor,const char *name)
{ forall(&OutputGenerator::writeCodeLink,ref,file,anchor,text); } { forall(&OutputGenerator::writeCodeLink,ref,file,anchor,name); }
void startTextLink(const char *file,const char *anchor) void startTextLink(const char *file,const char *anchor)
{ forall(&OutputGenerator::startTextLink,file,anchor); } { forall(&OutputGenerator::startTextLink,file,anchor); }
void endTextLink() void endTextLink()
......
...@@ -1122,10 +1122,15 @@ BN [ \t\r\n] ...@@ -1122,10 +1122,15 @@ BN [ \t\r\n]
} }
<CopyLine>{ID}/{BN}*"(" { <CopyLine>{ID}/{BN}*"(" {
Define *def=0; Define *def=0;
//printf("Search for define %s\n",yytext); //def=g_fileDefineDict->find(yytext);
//printf("Search for define %s found=%d g_includeStack.isEmpty()=%d "
// "g_curlyCount=%d g_macroExpansion=%d g_expandOnlyPredef=%d "
// "isPreDefined=%d\n",yytext,def ? 1 : 0,
// g_includeStack.isEmpty(),g_curlyCount,g_macroExpansion,g_expandOnlyPredef,
// def ? def->isPredefined : -1
// );
if ((g_includeStack.isEmpty() || g_curlyCount>0) && if ((g_includeStack.isEmpty() || g_curlyCount>0) &&
g_macroExpansion && g_macroExpansion &&
/* (expandDefine=fileDefineCache->findDefine(g_yyFileName,yytext)) */
(def=g_fileDefineDict->find(yytext)) && (def=g_fileDefineDict->find(yytext)) &&
(!g_expandOnlyPredef || def->isPredefined) (!g_expandOnlyPredef || def->isPredefined)
) )
......
...@@ -41,7 +41,6 @@ RefList::~RefList() ...@@ -41,7 +41,6 @@ RefList::~RefList()
} }
/*! Adds a new item to the list. /*! Adds a new item to the list.
* \param text The item text.
* \returns A unique id for this item. * \returns A unique id for this item.
*/ */
int RefList::addRefItem() int RefList::addRefItem()
......
...@@ -79,12 +79,12 @@ class RTFGenerator : public OutputGenerator ...@@ -79,12 +79,12 @@ class RTFGenerator : public OutputGenerator
void docify(const char *text); void docify(const char *text);
void codify(const char *text); void codify(const char *text);
void writeObjectLink(const char *ref,const char *file, void writeObjectLink(const char *ref,const char *file,
const char *anchor,const char *text); const char *anchor,const char *name);
void writeCodeLink(const char *ref, const char *file, void writeCodeLink(const char *ref, const char *file,
const char *anchor,const char *text); const char *anchor,const char *name);
void startTextLink(const char *f,const char *anchor); void startTextLink(const char *f,const char *anchor);
void endTextLink(); void endTextLink();
void startHtmlLink(const char *); void startHtmlLink(const char *url);
void endHtmlLink(); void endHtmlLink();
void writeMailLink(const char *url); void writeMailLink(const char *url);
void startTypewriter() { t << "{\\f2 "; } void startTypewriter() { t << "{\\f2 "; }
......
...@@ -477,6 +477,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -477,6 +477,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x Function %x Function
%x FuncRound %x FuncRound
%x ExcpRound %x ExcpRound
%x ExcpList
%x FuncQual %x FuncQual
%x Operator %x Operator
%x Array %x Array
...@@ -1246,16 +1247,24 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1246,16 +1247,24 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
{ {
current->brief.resize(0); current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
BEGIN(AfterDocLine); BEGIN(AfterDocLine);
} }
else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF")) else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"))
{ {
current->brief.resize(0); current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyLineNr;
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDocBrief); BEGIN(AfterDocBrief);
} }
else else
{ {
current->doc.resize(0); current->doc.resize(0);
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDoc); BEGIN(AfterDoc);
} }
} }
...@@ -1266,16 +1275,24 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1266,16 +1275,24 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
{ {
current->brief.resize(0); current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyLineNr;
BEGIN(AfterDocLine); BEGIN(AfterDocLine);
} }
else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF")) else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"))
{ {
current->brief.resize(0); current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyLineNr;
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDocBrief); BEGIN(AfterDocBrief);
} }
else else
{ {
current->doc.resize(0); current->doc.resize(0);
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDoc); BEGIN(AfterDoc);
} }
} }
...@@ -1292,16 +1309,22 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1292,16 +1309,22 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
{ {
current->brief.resize(0); current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
BEGIN(AfterDocLine); BEGIN(AfterDocLine);
} }
else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF")) else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"))
{ {
current->brief.resize(0); current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
BEGIN(AfterDocBrief); BEGIN(AfterDocBrief);
} }
else else
{ {
current->doc.resize(0); current->doc.resize(0);
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDoc); BEGIN(AfterDoc);
} }
} }
...@@ -1319,12 +1342,16 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1319,12 +1342,16 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
if (yytext[1]=='/') // C++ style comment if (yytext[1]=='/') // C++ style comment
{ {
current->brief.resize(0); current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
lastDocContext = YY_START; lastDocContext = YY_START;
BEGIN( LineDoc ); BEGIN( LineDoc );
} }
else // C style comment else // C style comment
{ {
current->doc.resize(0); current->doc.resize(0);
current->docLine = yyLineNr;
current->docFile = yyFileName;
lastDocContext = YY_START; lastDocContext = YY_START;
removeSlashes=FALSE; removeSlashes=FALSE;
BEGIN( Doc ); BEGIN( Doc );
...@@ -2195,7 +2222,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2195,7 +2222,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<FuncQual>{BN}*"try"{BN}+ { /* try-function-block */ <FuncQual>{BN}*"try"{BN}+ { /* try-function-block */
insideTryBlock=TRUE; insideTryBlock=TRUE;
} }
<FuncQual>{BN}*"throw"{BN}*"(" { <FuncQual>{BN}*"throw"{BN}*"(" { // C++ style throw clause
current->exception = " throw (" ; current->exception = " throw (" ;
roundCount=0; roundCount=0;
lineCount() ; lineCount() ;
...@@ -2207,6 +2234,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2207,6 +2234,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
roundCount=0; roundCount=0;
BEGIN( ExcpRound ) ; BEGIN( ExcpRound ) ;
} }
<FuncQual>{BN}*"throws"{BN}+ { // Java style throw clause
current->exception = " throws " ;
lineCount() ;
BEGIN( ExcpList );
}
<ExcpRound>"(" { current->exception += *yytext ; <ExcpRound>"(" { current->exception += *yytext ;
++roundCount ; ++roundCount ;
} }
...@@ -2217,7 +2249,16 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2217,7 +2249,16 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN( FuncQual ) ; BEGIN( FuncQual ) ;
} }
<ExcpRound>. { <ExcpRound>. {
current->exception += yytext; current->exception += *yytext;
}
<ExcpList>"{" {
unput('{'); BEGIN( FuncQual );
}
<ExcpList>"\n" {
current->exception += ' ';
}
<ExcpList>. {
current->exception += *yytext;
} }
<Function>"(" { current->type += current->name ; <Function>"(" { current->type += current->name ;
current->name = current->args ; current->name = current->args ;
...@@ -2235,29 +2276,17 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2235,29 +2276,17 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->name=current->name.simplifyWhiteSpace(); current->name=current->name.simplifyWhiteSpace();
current->type=current->type.simplifyWhiteSpace(); current->type=current->type.simplifyWhiteSpace();
current->args=current->args.simplifyWhiteSpace(); current->args=current->args.simplifyWhiteSpace();
//QCString &cn=current->name;
//QCString &rn=current_root->name;
//int i;
//if ((i=cn.findRev("::"))!=-1) // name contains scope
//{
// if (cn.left(i)==rn.right(i)) // scope name is redundant
// {
// cn=cn.right(cn.length()-i-2); // strip scope
// //printf("new name=`%s'\n",cn.data());
// }
//}
current->fileName = yyFileName; current->fileName = yyFileName;
current->startLine = yyLineNr; current->startLine = yyLineNr;
if (*yytext!=';' || (current_root->section&Entry::COMPOUND_MASK) ) if (*yytext!=';' || (current_root->section&Entry::COMPOUND_MASK) )
{ {
int tempArg=current->name.find('<'); int tempArg=current->name.find('<');
QCString tempName; QCString tempName;
if (tempArg==-1) static QRegExp re("operator[^a-z_A-Z0-9]");
tempName=current->name; if (tempArg==-1) tempName=current->name; else tempName=current->name.left(tempArg);
else if ((current->type.isEmpty() && tempName.find(re)==-1) ||
tempName=current->name.left(tempArg); current->type.left(8)=="typedef "
if (current->type.isEmpty() && tempName.find("operator")==-1 && )
(tempName.find('*')!=-1 || tempName.find('&')!=-1))
{ {
//printf("Scanner.l: found in class variable: `%s' `%s' `%s'\n", //printf("Scanner.l: found in class variable: `%s' `%s' `%s'\n",
// current->type.data(),current->name.data(),current->args.data()); // current->type.data(),current->name.data(),current->args.data());
...@@ -2268,12 +2297,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2268,12 +2297,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
//printf("Scanner.l: found in class function: `%s' `%s' `%s'\n", //printf("Scanner.l: found in class function: `%s' `%s' `%s'\n",
// current->type.data(),current->name.data(),current->args.data()); // current->type.data(),current->name.data(),current->args.data());
current->section = Entry::FUNCTION_SEC ; current->section = Entry::FUNCTION_SEC ;
current->proto = *yytext==';';
} }
} }
else // a global function prototype or function variable else // a global function prototype or function variable
{ {
static QRegExp re("([^)]*)");
//printf("Scanner.l: prototype? type=`%s' name=`%s' args=`%s'\n",current->type.data(),current->name.data(),current->args.data()); //printf("Scanner.l: prototype? type=`%s' name=`%s' args=`%s'\n",current->type.data(),current->name.data(),current->args.data());
QRegExp re("([^)]*)");
if (!current->type.isEmpty() && if (!current->type.isEmpty() &&
(current->type.find(re,0)!=-1 || current->type.left(8)=="typedef ")) (current->type.find(re,0)!=-1 || current->type.left(8)=="typedef "))
{ {
...@@ -2305,11 +2335,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2305,11 +2335,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
curlyCount=0; curlyCount=0;
BEGIN( SkipCurly ) ; BEGIN( SkipCurly ) ;
} }
//else if( *yytext == ':' )
//{
// //addToBody(yytext);
// BEGIN( SkipInits ) ;
//}
else else
{ {
if (previous->section!=Entry::VARIABLE_SEC) if (previous->section!=Entry::VARIABLE_SEC)
...@@ -2359,13 +2384,27 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2359,13 +2384,27 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
lastAfterDocContext = SkipCurlyEndDoc; lastAfterDocContext = SkipCurlyEndDoc;
afterDocTerminator = '}'; afterDocTerminator = '}';
if (yytext[yyleng-3]=='/') if (yytext[yyleng-3]=='/')
{
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
BEGIN(AfterDocLine); BEGIN(AfterDocLine);
}
else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF")) else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"))
{
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDocBrief); BEGIN(AfterDocBrief);
}
else else
{
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDoc); BEGIN(AfterDoc);
} }
} }
}
<SkipCurlyEndDoc>"}" { <SkipCurlyEndDoc>"}" {
//addToBody("}"); //addToBody("}");
current = tempEntry; current = tempEntry;
...@@ -2667,9 +2706,15 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2667,9 +2706,15 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
removeSlashes=(yytext[1]=='/'); removeSlashes=(yytext[1]=='/');
tmpDocType=-1; tmpDocType=-1;
if (YY_START==ReadBody) if (YY_START==ReadBody)
{
current->doc+="\n\n"; current->doc+="\n\n";
}
else else
{
current->doc.resize(0); current->doc.resize(0);
}
current->docLine = yyLineNr;
current->docFile = yyFileName;
lastDocContext = YY_START; lastDocContext = YY_START;
if (current_root->section & Entry::SCOPE_MASK) if (current_root->section & Entry::SCOPE_MASK)
{ {
...@@ -2696,9 +2741,15 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2696,9 +2741,15 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
{ {
tmpDocType=-1; tmpDocType=-1;
if (YY_START==ReadBody) if (YY_START==ReadBody)
{
current->doc+="\n\n"; current->doc+="\n\n";
}
else else
{
current->doc.resize(0); current->doc.resize(0);
}
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN( Doc ); BEGIN( Doc );
} }
else // Use the javadoc style else // Use the javadoc style
...@@ -2708,6 +2759,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2708,6 +2759,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
tmpDocType=-1; tmpDocType=-1;
current->doc+="\n\n"; current->doc+="\n\n";
lastDocContext = ReadBody; lastDocContext = ReadBody;
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN( Doc ); BEGIN( Doc );
} }
else else
...@@ -2715,6 +2768,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2715,6 +2768,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
tmpDocType=Doc; tmpDocType=Doc;
current->doc.resize(0); current->doc.resize(0);
current->brief.resize(0); current->brief.resize(0);
current->docLine = yyLineNr;
current->docFile = yyFileName;
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
BEGIN( JavaDoc ); BEGIN( JavaDoc );
} }
} }
......
...@@ -13,15 +13,12 @@ ...@@ -13,15 +13,12 @@
* Brazilian Portuguese version by * Brazilian Portuguese version by
* Fabio "FJTC" Jun Takada Chino <chino@icmc.sc.usp.br> * Fabio "FJTC" Jun Takada Chino <chino@icmc.sc.usp.br>
* http://www.icmc.sc.usp.br/~chino * http://www.icmc.sc.usp.br/~chino
* Version: 1.2.11 (2001/11/23) * Version: 1.2.13 (2002/01/24)
*
* News:
* - Everything was revised.
*/ */
#ifndef TRANSLATOR_BR_H #ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H #define TRANSLATOR_BR_H
class TranslatorBrazilian: public TranslatorAdapter_1_2_13 class TranslatorBrazilian: public Translator
{ {
public: public:
...@@ -1313,5 +1310,26 @@ class TranslatorBrazilian: public TranslatorAdapter_1_2_13 ...@@ -1313,5 +1310,26 @@ class TranslatorBrazilian: public TranslatorAdapter_1_2_13
{ {
return "Referências"; return "Referências";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.13
//////////////////////////////////////////////////////////////////////////
/*! used in member documentation blocks to produce a list of
* members that are implemented by this one.
*/
virtual QCString trImplementedFromList(int numEntries)
{
return "Implementa "+trWriteList(numEntries)+".";
}
/*! used in member documentation blocks to produce a list of
* all members that implementation this member.
*/
virtual QCString trImplementedInList(int numEntries)
{
return "Implementado em "+trWriteList(numEntries)+".";
}
}; };
#endif #endif
...@@ -131,6 +131,9 @@ ...@@ -131,6 +131,9 @@
// 2001/11/06 // 2001/11/06
// - trReferences() implemented. // - trReferences() implemented.
// //
// 2002/01/23
// - trImplementedFromList() and trImplementedInList() implemented
// (new since 1.2.13)
// //
// Todo // Todo
// ---- // ----
...@@ -1479,6 +1482,26 @@ class TranslatorCzech : public TranslatorAdapter_1_2_13 ...@@ -1479,6 +1482,26 @@ class TranslatorCzech : public TranslatorAdapter_1_2_13
return decode("Odkazuje se na"); return decode("Odkazuje se na");
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.13
//////////////////////////////////////////////////////////////////////////
/*! used in member documentation blocks to produce a list of
* members that are implemented by this one.
*/
virtual QCString trImplementedFromList(int numEntries)
{
return "Implementuje "+trWriteList(numEntries)+".";
}
/*! used in member documentation blocks to produce a list of
* all members that implement this member.
*/
virtual QCString trImplementedInList(int numEntries)
{
return "Implementováno v "+trWriteList(numEntries)+".";
}
}; };
#endif // TRANSLATOR_CZ_H #endif // TRANSLATOR_CZ_H
...@@ -1385,7 +1385,7 @@ class TranslatorEnglish : public Translator ...@@ -1385,7 +1385,7 @@ class TranslatorEnglish : public Translator
} }
/*! used in member documentation blocks to produce a list of /*! used in member documentation blocks to produce a list of
* all members that implementation this member. * all members that implement this abstract member.
*/ */
virtual QCString trImplementedInList(int numEntries) virtual QCString trImplementedInList(int numEntries)
{ {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2002 by Dimitri van Heesch. * Copyright (C) 1997-2001 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -33,11 +33,13 @@ ...@@ -33,11 +33,13 @@
* | QCString trIncludeFile() * | QCString trIncludeFile()
* | QCString trVerbatimText(const char *f) * | QCString trVerbatimText(const char *f)
* -------------+------------------------------------------------------------ * -------------+------------------------------------------------------------
* 2002-01-23 | Update for new since 1.2.13
* -------------+------------------------------------------------------------
*/ */
#ifndef TRANSLATOR_FR_H #ifndef TRANSLATOR_FR_H
#define TRANSLATOR_FR_H #define TRANSLATOR_FR_H
class TranslatorFrench : public TranslatorAdapter_1_2_13 class TranslatorFrench : public Translator
{ {
public: public:
QCString idLanguage() QCString idLanguage()
...@@ -1232,5 +1234,25 @@ class TranslatorFrench : public TranslatorAdapter_1_2_13 ...@@ -1232,5 +1234,25 @@ class TranslatorFrench : public TranslatorAdapter_1_2_13
{ {
return "Références"; return "Références";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.13
//////////////////////////////////////////////////////////////////////////
/*! used in member documentation blocks to produce a list of
* members that are implemented by this one.
*/
virtual QCString trImplementedFromList(int numEntries)
{
return "Implémente "+trWriteList(numEntries)+".";
}
/*! used in member documentation blocks to produce a list of
* all members that implementation this member.
*/
virtual QCString trImplementedInList(int numEntries)
{
return "Implémenté dans "+trWriteList(numEntries)+".";
}
}; };
#endif #endif
...@@ -44,11 +44,13 @@ ...@@ -44,11 +44,13 @@
// - Added strings for 1.2.11 // - Added strings for 1.2.11
// - better output for C documentation (trCompoundMembersDescription(), trClassDocumentation()) // - better output for C documentation (trCompoundMembersDescription(), trClassDocumentation())
// //
// 2001/11/13
// - Added strings for 1.2.13
#ifndef TRANSLATOR_HR_H #ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H #define TRANSLATOR_HR_H
class TranslatorCroatian : public TranslatorAdapter_1_2_13 class TranslatorCroatian : public Translator
{ {
private: private:
/*! to avoid macro redefinition from translator_cz.h */ /*! to avoid macro redefinition from translator_cz.h */
...@@ -1019,6 +1021,25 @@ class TranslatorCroatian : public TranslatorAdapter_1_2_13 ...@@ -1019,6 +1021,25 @@ class TranslatorCroatian : public TranslatorAdapter_1_2_13
{ {
return "Reference"; return "Reference";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.13
//////////////////////////////////////////////////////////////////////////
/*! used in member documentation blocks to produce a list of
* members that are implemented by this one.
*/
virtual QCString trImplementedFromList(int numEntries)
{
return "Implementira "+trWriteList(numEntries)+".";
}
/*! used in member documentation blocks to produce a list of
* all members that implementation this member.
*/
virtual QCString trImplementedInList(int numEntries)
{
return "Implementirano u "+trWriteList(numEntries)+".";
}
}; };
#endif #endif
...@@ -19,9 +19,8 @@ ...@@ -19,9 +19,8 @@
* *
* Revision history * Revision history
* *
* Initial Italian Translation by Ahmed Aldo Faisal * 2002/01: translated new items used since version 1.2.13
* Revised and completed by Alessandro Falappa (since June 1999) * updated e-mail address
* Updates:
* 2001/11: corrected the translation fixing the issues reported by the translator.pl script * 2001/11: corrected the translation fixing the issues reported by the translator.pl script
* translated new items used since version 1.2.11 * translated new items used since version 1.2.11
* 2001/08: corrected the translation fixing the issues reported by the translator.pl script * 2001/08: corrected the translation fixing the issues reported by the translator.pl script
...@@ -41,6 +40,8 @@ ...@@ -41,6 +40,8 @@
* commented translator.h for the english language * commented translator.h for the english language
* 1999/09: corrected some small typos in the "new since 0.49-990425" section * 1999/09: corrected some small typos in the "new since 0.49-990425" section
* added the "new since 0.49-990728" section * added the "new since 0.49-990728" section
* 1999/06: revised and completed by Alessandro Falappa (actual mantainer)
* 1999/??: initial italian translation by Ahmed Aldo Faisal
*/ */
/****************************************************************************** /******************************************************************************
...@@ -55,13 +56,13 @@ ...@@ -55,13 +56,13 @@
* tecnica (ad es "lista dei file" e non "lista dei files") * tecnica (ad es "lista dei file" e non "lista dei files")
* *
* Se avete suggerimenti sulla traduzione di alcuni termini o volete segnalare * Se avete suggerimenti sulla traduzione di alcuni termini o volete segnalare
* eventuali sviste potete scrivermi all'indirizzo: afalappa@interfree.it * eventuali sviste potete scrivermi all'indirizzo: alessandro@falappa.net
*/ */
#ifndef TRANSLATOR_IT_H #ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H #define TRANSLATOR_IT_H
class TranslatorItalian : public TranslatorAdapter_1_2_13 class TranslatorItalian : public Translator
{ {
public: public:
...@@ -1321,6 +1322,26 @@ class TranslatorItalian : public TranslatorAdapter_1_2_13 ...@@ -1321,6 +1322,26 @@ class TranslatorItalian : public TranslatorAdapter_1_2_13
{ {
return "Riferimenti"; return "Riferimenti";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.13
//////////////////////////////////////////////////////////////////////////
/*! used in member documentation blocks to produce a list of
* members that are implemented by this one.
*/
virtual QCString trImplementedFromList(int numEntries)
{
return "Implementa "+trWriteList(numEntries)+".";
}
/*! used in member documentation blocks to produce a list of
* all members that implementation this member.
*/
virtual QCString trImplementedInList(int numEntries)
{
return "Implementato in "+trWriteList(numEntries)+".";
}
}; };
#endif #endif
...@@ -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 TranslatorAdapter_1_2_13 class TranslatorRussian : public Translator
{ {
private: private:
/*! The Decode() inline assumes the source written in the /*! The Decode() inline assumes the source written in the
...@@ -746,7 +746,12 @@ class TranslatorRussian : public TranslatorAdapter_1_2_13 ...@@ -746,7 +746,12 @@ class TranslatorRussian : public TranslatorAdapter_1_2_13
*/ */
virtual QCString trReimplementedFromList(int numEntries) virtual QCString trReimplementedFromList(int numEntries)
{ {
return decode(" ")+trWriteList(numEntries)+"."; QCString result=" ";
if(numEntries>1)
result+=" ";
else
result+=" ";
return decode(result+" ")+trWriteList(numEntries)+".";
} }
/*! used in member documentation blocks to produce a list of /*! used in member documentation blocks to produce a list of
...@@ -1369,6 +1374,26 @@ class TranslatorRussian : public TranslatorAdapter_1_2_13 ...@@ -1369,6 +1374,26 @@ class TranslatorRussian : public TranslatorAdapter_1_2_13
return " "; return " ";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.2.13
//////////////////////////////////////////////////////////////////////////
/*! used in member documentation blocks to produce a list of
* members that are implemented by this one.
*/
virtual QCString trImplementedFromList(int numEntries)
{
return " "+trWriteList(numEntries)+".";
}
/*! used in member documentation blocks to produce a list of
* all members that implementation this member.
*/
virtual QCString trImplementedInList(int numEntries)
{
return " "+trWriteList(numEntries)+".";
}
}; };
#endif #endif
...@@ -570,7 +570,7 @@ QCString removeRedundantWhiteSpace(const QCString &s) ...@@ -570,7 +570,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
result+="< "; // insert extra space for layouting (nested) templates result+="< "; // insert extra space for layouting (nested) templates
} }
else if (i>0 && c=='>' && // current char is a > else if (i>0 && c=='>' && // current char is a >
(isId(s.at(i-1)) || isspace(s.at(i-1))) && // prev char is an id char or space (isId(s.at(i-1)) || isspace(s.at(i-1)) || s.at(i-1)=='*' || s.at(i-1)=='&') && // prev char is an id char or space
(i<8 || !findOperator(s,i)) // string in front is not "operator" (i<8 || !findOperator(s,i)) // string in front is not "operator"
) )
{ {
...@@ -1546,6 +1546,7 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA, ...@@ -1546,6 +1546,7 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA,
return TRUE; return TRUE;
} }
#if 0
static void mergeArgument(Argument *srcA,Argument *dstA, static void mergeArgument(Argument *srcA,Argument *dstA,
const QCString &className, const QCString &className,
const QCString &namespaceName, const QCString &namespaceName,
...@@ -1779,6 +1780,7 @@ done: ...@@ -1779,6 +1780,7 @@ done:
// dstA->type.data(),dstA->name.data()); // dstA->type.data(),dstA->name.data());
return; return;
} }
#endif
/*! /*!
...@@ -1885,8 +1887,8 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl, ...@@ -1885,8 +1887,8 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
++srcAli,++dstAli ++srcAli,++dstAli
) )
{ {
mergeArgument(srcA,dstA,className,namespaceName, //mergeArgument(srcA,dstA,className,namespaceName,
usingNamespaces,usingClasses); // usingNamespaces,usingClasses);
} }
MATCH MATCH
return TRUE; // all arguments match return TRUE; // all arguments match
...@@ -2213,7 +2215,12 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2213,7 +2215,12 @@ bool getDefs(const QCString &scName,const QCString &memberName,
} }
} }
} }
if (found) return TRUE; if (found)
{
gd=md->getGroupDef();
if (gd && gd->isLinkable()) nd=0; else gd=0;
return TRUE;
}
} }
else // no scope => global function else // no scope => global function
{ {
......
...@@ -930,7 +930,7 @@ static void writeXMLDocBlock(QTextStream &t, ...@@ -930,7 +930,7 @@ static void writeXMLDocBlock(QTextStream &t,
const QCString &fileName, const QCString &fileName,
int lineNr, int lineNr,
const QCString &scope, const QCString &scope,
const QCString &name, MemberDef *md,
const QCString &text) const QCString &text)
{ {
QCString stext = text.stripWhiteSpace(); QCString stext = text.stripWhiteSpace();
...@@ -941,7 +941,7 @@ static void writeXMLDocBlock(QTextStream &t, ...@@ -941,7 +941,7 @@ static void writeXMLDocBlock(QTextStream &t,
fileName, // input definition file fileName, // input definition file
lineNr, // input definition line lineNr, // input definition line
scope, // scope (which should not be linked to) scope, // scope (which should not be linked to)
name, // member (which should not be linked to) md, // member (which should not be linked to)
stext+"\n" // actual text stext+"\n" // actual text
); );
xmlGen->endParMode(); xmlGen->endParMode();
...@@ -1112,10 +1112,9 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -1112,10 +1112,9 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
if (isFunc) //function if (isFunc) //function
{ {
ArgumentList *declAl = new ArgumentList; ArgumentList *declAl = md->declArgumentList();
ArgumentList *defAl = md->argumentList(); ArgumentList *defAl = md->argumentList();
stringToArgumentList(md->argsString(),declAl); if (declAl && declAl->count()>0)
if (declAl->count()>0)
{ {
ArgumentListIterator declAli(*declAl); ArgumentListIterator declAli(*declAl);
ArgumentListIterator defAli(*defAl); ArgumentListIterator defAli(*defAl);
...@@ -1164,7 +1163,6 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -1164,7 +1163,6 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
if (defArg) ++defAli; if (defArg) ++defAli;
} }
} }
delete declAl;
} }
else if (md->memberType()==MemberDef::Define && else if (md->memberType()==MemberDef::Define &&
md->argsString()!=0) // define md->argsString()!=0) // define
...@@ -1213,10 +1211,10 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -1213,10 +1211,10 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
} }
} }
t << " <briefdescription>" << endl; t << " <briefdescription>" << endl;
writeXMLDocBlock(t,md->getDefFileName(),md->getDefLine(),scopeName,md->name(),md->briefDescription()); writeXMLDocBlock(t,md->getDefFileName(),md->getDefLine(),scopeName,md,md->briefDescription());
t << " </briefdescription>" << endl; t << " </briefdescription>" << endl;
t << " <detaileddescription>" << endl; t << " <detaileddescription>" << endl;
writeXMLDocBlock(t,md->getDefFileName(),md->getDefLine(),scopeName,md->name(),md->documentation()); writeXMLDocBlock(t,md->getDefFileName(),md->getDefLine(),scopeName,md,md->documentation());
t << " </detaileddescription>" << endl; t << " </detaileddescription>" << endl;
if (md->getDefLine()!=-1) if (md->getDefLine()!=-1)
{ {
......
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