summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL4
-rw-r--r--README4
-rw-r--r--VERSION2
-rwxr-xr-xconfigure4
-rw-r--r--doc/arch.doc9
-rw-r--r--doc/commands.doc33
-rw-r--r--doc/config.doc2
-rw-r--r--doc/language.doc44
-rw-r--r--libpng/inftrees.c2
-rw-r--r--packages/rpm/doxygen.spec2
-rw-r--r--src/classdef.cpp112
-rw-r--r--src/classdef.h5
-rw-r--r--src/cmdmapper.cpp5
-rw-r--r--src/cmdmapper.h137
-rw-r--r--src/config.l17
-rw-r--r--src/defgen.cpp3
-rw-r--r--src/definition.cpp36
-rw-r--r--src/definition.h9
-rw-r--r--src/diagram.cpp3
-rw-r--r--src/docparser.cpp57
-rw-r--r--src/docparser.h12
-rw-r--r--src/doctokenizer.l9
-rw-r--r--src/dot.cpp61
-rw-r--r--src/doxygen.cpp137
-rw-r--r--src/doxygen.h2
-rw-r--r--src/entry.h2
-rw-r--r--src/filedef.cpp2
-rw-r--r--src/groupdef.cpp2
-rw-r--r--src/htmldocvisitor.cpp42
-rw-r--r--src/htmldocvisitor.h1
-rw-r--r--src/htmlgen.cpp8
-rw-r--r--src/libdoxygen.pro.in2
-rw-r--r--src/memberdef.cpp8
-rw-r--r--src/namespacedef.cpp2
-rw-r--r--src/outputgen.h4
-rw-r--r--src/page.h4
-rw-r--r--src/pagedef.cpp14
-rw-r--r--src/pagedef.h141
-rw-r--r--src/perlmodgen.cpp1
-rw-r--r--src/reflist.cpp30
-rw-r--r--src/reflist.h16
-rw-r--r--src/scanner.l204
-rw-r--r--src/translator.h11
-rw-r--r--src/translator_adapter.h21
-rw-r--r--src/translator_br.h2
-rw-r--r--src/translator_cz.h2
-rw-r--r--src/translator_de.h2
-rw-r--r--src/translator_dk.h2
-rw-r--r--src/translator_en.h40
-rw-r--r--src/translator_fr.h2
-rw-r--r--src/translator_hr.h2
-rw-r--r--src/translator_it.h2
-rw-r--r--src/translator_jp.h2
-rw-r--r--src/translator_kr.h2
-rw-r--r--src/translator_nl.h39
-rw-r--r--src/translator_pl.h2
-rw-r--r--src/translator_ru.h2
-rw-r--r--src/util.cpp24
-rw-r--r--src/xmlgen.cpp5
59 files changed, 905 insertions, 451 deletions
diff --git a/INSTALL b/INSTALL
index a44100f..c0d5680 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.3
+DOXYGEN Version 1.3-20030421
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
-Dimitri van Heesch (10 April 2003)
+Dimitri van Heesch (21 April 2003)
diff --git a/README b/README
index b22f0d9..f91006a 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.3
+DOXYGEN Version 1.3_20030421
Please read INSTALL for compilation instructions.
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
-Dimitri van Heesch (dimitri@stack.nl) (10 April 2003)
+Dimitri van Heesch (dimitri@stack.nl) (21 April 2003)
diff --git a/VERSION b/VERSION
index 7e32cd5..e2f48aa 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.3
+1.3-20030421
diff --git a/configure b/configure
index b2132d7..d14a648 100755
--- a/configure
+++ b/configure
@@ -287,7 +287,7 @@ if test "$f_insttool" = NO; then
for i in $install_names; do
for j in $install_dirs; do
if test -x "$j/$i"; then
- if test -n "`$j/$i --version 2>/dev/null | grep fileutils`"; then
+ if test -n "`$j/$i --version 2>/dev/null | grep utils`"; then
install_found=YES
install_prog="$j/$i"
break 2
@@ -305,7 +305,7 @@ if test "$f_insttool" = NO; then
echo "not found!";
echo
fi
- echo "GNU version of install is required: this is part of the fileutils package: "
+ echo "GNU version of install is required: this is part of the fileutils/coreutils package: "
echo "see http://www.gnu.org/software/fileutils/fileutils.html"
echo
exit 2
diff --git a/doc/arch.doc b/doc/arch.doc
index 07cb781..47ff663 100644
--- a/doc/arch.doc
+++ b/doc/arch.doc
@@ -139,12 +139,13 @@ strings and executes the commands it finds in it (this is the second pass
in parsing the documentation). It writes the result directly to the output
generators.
-The parser is written using \c flex and can be found in \c src/doc.l
+The parser is written in C++ and can be found in src/docparser.cpp. The
+tokens that are eaten by the parser come from src/doctokenizer.l.
Code fragments found in the comment blocks are passed on to the source parser.
-The main entry point for the documentation parser is \c parseDoc()
-declared in \c src/doc.h. For simple texts with special
-commands \c parseText() is used.
+The main entry point for the documentation parser is \c validatingParseDoc()
+declared in \c src/docparser.h. For simple texts with special
+commands \c validatingParseText() is used.
<h3>Source parser</h3>
diff --git a/doc/commands.doc b/doc/commands.doc
index e478a3e..3c764e2 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -129,6 +129,7 @@ documentation:
\refitem cmdversion \\version
\refitem cmdwarning \\warning
\refitem cmdweakgroup \\weakgroup
+\refitem cmdxrefitem \\xrefitem
\refitem cmddollar \\\$
\refitem cmdat \\\@
\refitem cmdbackslash \\\\
@@ -1027,6 +1028,38 @@ ALIASES = "english=\if english" \
sectioning command is encountered. See section \ref cmdauthor "\\author"
for an example.
+\section cmdxrefitem \xrefitem <key> "(heading)" "(list title)" {text}
+
+ \addindex \\xrefitem
+ This command is a generalization of commands such as \ref cmdtodo "\\todo"
+ and \ref cmdbug "\\bug".
+ It can be used to create user-defined text sections which are automatically
+ cross-referenced between the place of occurrence and a related page,
+ which will be generated. On the related page all sections of
+ the same type will be collected.
+
+ The first argument \<key\> is a
+ identifier uniquely representing the type of the section. The second argument
+ is a quoted string representing the heading of the section under which
+ text passed as the forth argument is put. The third argument (list title)
+ is used as the title for the related page containing all items with the
+ same key. The keys "todo", "test", "bug", and "deprecated" are predefined.
+
+ To get an idea on how to use the \\xrefitem command and what its effect
+ is, consider the todo list, which (for English output) can be seen an
+ alias for the command
+ \verbatim \xrefitem todo "Todo" "Todo List" \endverbatim
+
+ Since it is very tedious and error-prone to repeat the first three
+ parameters of the command for each section, the command is meant to
+ be used in combination with the \ref cfg_aliases "ALIASES" option in the
+ configuration file.
+ To define a new command \\reminder, for instance, one should add the following
+ line to the configuration file:
+ \verbatim ALIASES += "reminder=\xrefitem reminders \"Reminder\" \"Reminders\"" \endverbatim
+ Note the use of escaped quotes for the second and third argument of the
+ \\xrefitem command.
+
<hr>
<h2>\htmlonly <center> --- \endhtmlonly
Commands to create links
diff --git a/doc/config.doc b/doc/config.doc
index 8cb2367..a5f8ae0 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -641,7 +641,7 @@ function's detailed documentation block.
in the directories. If left blank the following patterns are tested:
<code>
*.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
- *.h++ *.idl *.odl
+ *.h++ *.idl *.odl *.cs
</code>
\anchor cfg_recursive
diff --git a/doc/language.doc b/doc/language.doc
index 149686f..a93d603 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -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>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Catalan</TD>
@@ -79,19 +79,19 @@ 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>strange</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>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Danish</TD>
<TD>Erik S&oslash;e S&oslash;rensen</TD>
<TD>erik@NOSPAM.mail.nu</TD>
- <TD>up-to-date</TD>
+ <TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Dutch</TD>
@@ -115,13 +115,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>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>German</TD>
<TD>Jens Seidel</TD>
<TD>jensseidel@NOSPAM.users.sf.net</TD>
- <TD>up-to-date</TD>
+ <TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Greek</TD>
@@ -139,19 +139,19 @@ 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>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Japanese</TD>
<TD>Ryunosuke Satoh<br>Kenji Nagamatsu</TD>
<TD>sun594@NOSPAM.hotmail.com<br>naga@NOSPAM.joyful.club.ne.jp</TD>
- <TD>up-to-date</TD>
+ <TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Korean</TD>
<TD>Richard Kim</TD>
<TD>ryk@NOSPAM.dspwiz.com</TD>
- <TD>up-to-date</TD>
+ <TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Norwegian</TD>
@@ -163,7 +163,7 @@ when the translator was updated.
<TD>Polish</TD>
<TD>Piotr Kaminski<br>Grzegorz Kowal</TD>
<TD>Piotr.Kaminski@NOSPAM.ctm.gdynia.pl<br>g_kowal@NOSPAM.poczta.onet.pl</TD>
- <TD>up-to-date</TD>
+ <TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Portuguese</TD>
@@ -181,7 +181,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>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Serbian</TD>
@@ -230,7 +230,7 @@ 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} & strange \\
\hline
Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\
\hline
@@ -239,11 +239,11 @@ when the translator was updated.
\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} & strange \\
\hline
- Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\
+ Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & strange \\
\hline
- Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & up-to-date \\
+ Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & strange \\
\hline
Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} & up-to-date \\
\hline
@@ -251,32 +251,32 @@ 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} & strange \\
\hline
- German & Jens Seidel & {\tt jensseidel@users.sf.net} & up-to-date \\
+ German & Jens Seidel & {\tt jensseidel@users.sf.net} & strange \\
\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} & strange \\
& Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\
\hline
- Japanese & Ryunosuke Satoh & {\tt sun594@hotmail.com} & up-to-date \\
+ Japanese & Ryunosuke Satoh & {\tt sun594@hotmail.com} & strange \\
& Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & \\
\hline
- Korean & Richard Kim & {\tt ryk@dspwiz.com} & up-to-date \\
+ Korean & Richard Kim & {\tt ryk@dspwiz.com} & strange \\
\hline
Norwegian & Lars Erik Jordet & {\tt lej@circuitry.no} & 1.2.2 \\
\hline
- Polish & Piotr Kaminski & {\tt Piotr.Kaminski@ctm.gdynia.pl} & up-to-date \\
+ Polish & Piotr Kaminski & {\tt Piotr.Kaminski@ctm.gdynia.pl} & strange \\
& Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & \\
\hline
Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.2.18 \\
\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} & strange \\
\hline
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.2.17 \\
\hline
diff --git a/libpng/inftrees.c b/libpng/inftrees.c
index e7aa918..ca38111 100644
--- a/libpng/inftrees.c
+++ b/libpng/inftrees.c
@@ -446,7 +446,7 @@ int inflate_trees_fixed(uIntf *bl, uIntf *bd, inflate_huft **tl, inflate_huft **
fixed_built = 1;
}
#else
- z=z; // DvH: added to avoid compiler warning
+ z=z; /* DvH: added to avoid compiler warning */
#endif
*bl = fixed_bl;
*bd = fixed_bd;
diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec
index a26ef1b..ca0d710 100644
--- a/packages/rpm/doxygen.spec
+++ b/packages/rpm/doxygen.spec
@@ -1,6 +1,6 @@
Summary: A documentation system for C/C++.
Name: doxygen
-Version: 1.3
+Version: 1.3_20030421
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
diff --git a/src/classdef.cpp b/src/classdef.cpp
index a24ffe5..e7ff73d 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -170,6 +170,11 @@ void ClassDef::addMembersToMemberGroup()
::addMembersToMemberGroup(&dcopMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&pubStaticMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&pubStaticAttribs,memberGroupSDict,this);
+ ::addMembersToMemberGroup(&pacTypes,memberGroupSDict,this);
+ ::addMembersToMemberGroup(&pacMethods,memberGroupSDict,this);
+ ::addMembersToMemberGroup(&pacAttribs,memberGroupSDict,this);
+ ::addMembersToMemberGroup(&pacStaticMethods,memberGroupSDict,this);
+ ::addMembersToMemberGroup(&pacStaticAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&proTypes,memberGroupSDict,this);
::addMembersToMemberGroup(&proMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&proAttribs,memberGroupSDict,this);
@@ -247,9 +252,11 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot)
{
case Protected:
+ case Package: // slots in packages are not possible!
proSlots.append(md);
md->setSectionList(this,&proSlots);
break;
+ break;
case Public:
pubSlots.append(md);
md->setSectionList(this,&pubSlots);
@@ -271,6 +278,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proStaticAttribs.append(md);
md->setSectionList(this,&proStaticAttribs);
break;
+ case Package:
+ pacStaticAttribs.append(md);
+ md->setSectionList(this,&pacStaticAttribs);
+ break;
case Public:
pubStaticAttribs.append(md);
md->setSectionList(this,&pubStaticAttribs);
@@ -289,6 +300,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proStaticMethods.append(md);
md->setSectionList(this,&proStaticMethods);
break;
+ case Package:
+ pacStaticMethods.append(md);
+ md->setSectionList(this,&pacStaticMethods);
+ break;
case Public:
pubStaticMethods.append(md);
md->setSectionList(this,&pubStaticMethods);
@@ -310,6 +325,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proAttribs.append(md);
md->setSectionList(this,&proAttribs);
break;
+ case Package:
+ pacAttribs.append(md);
+ md->setSectionList(this,&pacAttribs);
+ break;
case Public:
pubAttribs.append(md);
md->setSectionList(this,&pubAttribs);
@@ -328,6 +347,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proTypes.append(md);
md->setSectionList(this,&proTypes);
break;
+ case Package:
+ pacTypes.append(md);
+ md->setSectionList(this,&pacTypes);
+ break;
case Public:
pubTypes.append(md);
md->setSectionList(this,&pubTypes);
@@ -346,6 +369,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proMethods.append(md);
md->setSectionList(this,&proMethods);
break;
+ case Package:
+ pacMethods.append(md);
+ md->setSectionList(this,&pacMethods);
+ break;
case Public:
pubMethods.append(md);
md->setSectionList(this,&pubMethods);
@@ -401,11 +428,7 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot)
{
case Protected:
- if (Config_getBool("SORT_MEMBER_DOCS"))
- functionMembers.inSort(md);
- else
- functionMembers.append(md);
- break;
+ case Package:
case Public:
if (Config_getBool("SORT_MEMBER_DOCS"))
functionMembers.inSort(md);
@@ -517,28 +540,32 @@ void ClassDef::computeAnchors()
ClassDef *context = Config_getBool("INLINE_INHERITED_MEMB") ? this : 0;
setAnchors(context,'a',&pubMethods);
setAnchors(context,'b',&proMethods);
- setAnchors(context,'c',&priMethods);
- setAnchors(context,'d',&pubStaticMethods);
- setAnchors(context,'e',&proStaticMethods);
- setAnchors(context,'f',&priStaticMethods);
- setAnchors(context,'g',&pubSlots);
- setAnchors(context,'h',&proSlots);
- setAnchors(context,'i',&priSlots);
- setAnchors(context,'j',&signals);
- setAnchors(context,'k',&related);
- setAnchors(context,'l',&friends);
- setAnchors(context,'m',&pubAttribs);
- setAnchors(context,'n',&proAttribs);
- setAnchors(context,'o',&priAttribs);
- setAnchors(context,'p',&pubStaticAttribs);
- setAnchors(context,'q',&proStaticAttribs);
- setAnchors(context,'r',&priStaticAttribs);
- setAnchors(context,'s',&pubTypes);
- setAnchors(context,'t',&proTypes);
- setAnchors(context,'u',&priTypes);
- setAnchors(context,'v',&dcopMethods);
- setAnchors(context,'w',&properties);
- setAnchors(context,'x',&events);
+ setAnchors(context,'c',&pacMethods);
+ setAnchors(context,'d',&priMethods);
+ setAnchors(context,'e',&pubStaticMethods);
+ setAnchors(context,'f',&proStaticMethods);
+ setAnchors(context,'g',&pacStaticMethods);
+ setAnchors(context,'h',&priStaticMethods);
+ setAnchors(context,'i',&pubSlots);
+ setAnchors(context,'j',&proSlots);
+ setAnchors(context,'k',&priSlots);
+ setAnchors(context,'l',&signals);
+ setAnchors(context,'m',&related);
+ setAnchors(context,'n',&friends);
+ setAnchors(context,'o',&pubAttribs);
+ setAnchors(context,'p',&proAttribs);
+ setAnchors(context,'q',&pacAttribs);
+ setAnchors(context,'r',&priAttribs);
+ setAnchors(context,'s',&pubStaticAttribs);
+ setAnchors(context,'t',&proStaticAttribs);
+ setAnchors(context,'u',&pacStaticAttribs);
+ setAnchors(context,'v',&priStaticAttribs);
+ setAnchors(context,'w',&pubTypes);
+ setAnchors(context,'x',&proTypes);
+ setAnchors(context,'y',&priTypes);
+ setAnchors(context,'z',&dcopMethods);
+ setAnchors(context,'0',&properties);
+ setAnchors(context,'1',&events);
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
@@ -574,6 +601,11 @@ void ClassDef::findSectionsInDocumentation()
dcopMethods.findSectionsInDocumentation();
pubStaticMethods.findSectionsInDocumentation();
pubStaticAttribs.findSectionsInDocumentation();
+ pacTypes.findSectionsInDocumentation();
+ pacMethods.findSectionsInDocumentation();
+ pacAttribs.findSectionsInDocumentation();
+ pacStaticMethods.findSectionsInDocumentation();
+ pacStaticAttribs.findSectionsInDocumentation();
proTypes.findSectionsInDocumentation();
proMethods.findSectionsInDocumentation();
proAttribs.findSectionsInDocumentation();
@@ -1155,7 +1187,18 @@ void ClassDef::writeDocumentation(OutputList &ol)
proAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedAttribs(),0);
proStaticAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticProtectedAttribs(),0);
- // properties
+ // package types
+ pacTypes.writeDeclarations(ol,this,0,0,0,theTranslator->trPackageTypes(),0);
+
+ // package methods
+ pacMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trPackageMembers(),0);
+ pacStaticMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPackageMembers(),0);
+
+ // package attribs
+ pacAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trPackageAttribs(),0);
+ pacStaticAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPackageAttribs(),0);
+
+ // package
properties.writeDeclarations(ol,this,0,0,0,theTranslator->trProperties(),0);
// events
@@ -1463,6 +1506,7 @@ void ClassDef::writeMemberList(OutputList &ol)
if (md->isMutable()) sl.append("mutable");
if (prot==Protected) sl.append("protected");
else if (prot==Private) sl.append("private");
+ else if (prot==Package) sl.append("package");
if (virt==Virtual) sl.append("virtual");
else if (virt==Pure) sl.append("pure virtual");
if (md->isStatic()) sl.append("static");
@@ -1639,6 +1683,16 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup)
proStaticMethods.writePlainDeclarations(ol,this,0,0,0);
proStaticAttribs.setInGroup(inGroup);
proStaticAttribs.writePlainDeclarations(ol,this,0,0,0);
+ pacTypes.setInGroup(inGroup);
+ pacTypes.writePlainDeclarations(ol,this,0,0,0);
+ pacMethods.setInGroup(inGroup);
+ pacMethods.writePlainDeclarations(ol,this,0,0,0);
+ pacAttribs.setInGroup(inGroup);
+ pacAttribs.writePlainDeclarations(ol,this,0,0,0);
+ pacStaticMethods.setInGroup(inGroup);
+ pacStaticMethods.writePlainDeclarations(ol,this,0,0,0);
+ pacStaticAttribs.setInGroup(inGroup);
+ pacStaticAttribs.writePlainDeclarations(ol,this,0,0,0);
if (Config_getBool("EXTRACT_PRIVATE"))
{
priTypes.setInGroup(inGroup);
@@ -2534,7 +2588,7 @@ QCString ClassDef::className() const
void ClassDef::addListReferences()
{
- addRefItem(specialListItems(),
+ addRefItem(xrefListItems(),
theTranslator->trClass(TRUE,TRUE),
getOutputFileBase(),displayName()
);
diff --git a/src/classdef.h b/src/classdef.h
index 5049d11..022309d 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -199,21 +199,26 @@ class ClassDef : public Definition
/* member lists by protection */
MemberList pubMethods;
MemberList proMethods;
+ MemberList pacMethods;
MemberList priMethods;
MemberList pubStaticMethods;
MemberList proStaticMethods;
+ MemberList pacStaticMethods;
MemberList priStaticMethods;
MemberList pubSlots;
MemberList proSlots;
MemberList priSlots;
MemberList pubAttribs;
MemberList proAttribs;
+ MemberList pacAttribs;
MemberList priAttribs;
MemberList pubStaticAttribs;
MemberList proStaticAttribs;
+ MemberList pacStaticAttribs;
MemberList priStaticAttribs;
MemberList pubTypes;
MemberList proTypes;
+ MemberList pacTypes;
MemberList priTypes;
MemberList related;
MemberList signals;
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index 8724d53..41fda43 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -27,12 +27,10 @@ CommandMap cmdMap[] =
{ "attention", CMD_ATTENTION },
{ "author", CMD_AUTHOR },
{ "b", CMD_BOLD },
- { "bug", CMD_BUG },
{ "c", CMD_CODE },
{ "code", CMD_STARTCODE },
{ "copydoc", CMD_COPYDOC },
{ "date", CMD_DATE },
- { "deprecated", CMD_DEPRECATED },
{ "dontinclude", CMD_DONTINCLUDE },
{ "dotfile", CMD_DOTFILE },
{ "e", CMD_EMPHASIS },
@@ -81,9 +79,8 @@ CommandMap cmdMap[] =
{ "since", CMD_SINCE },
{ "skip", CMD_SKIP },
{ "skipline", CMD_SKIPLINE },
- { "test", CMD_TEST },
+ { "xrefitem", CMD_XREFITEM },
{ "throw", CMD_EXCEPTION },
- { "todo", CMD_TODO },
{ "until", CMD_UNTIL },
{ "verbatim", CMD_VERBATIM },
{ "verbinclude", CMD_VERBINCLUDE },
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index 989111a..c5cf2ab 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -33,76 +33,73 @@ enum CommandType
{
CMD_UNKNOWN = 0,
CMD_ADDINDEX = 1,
- CMD_ANCHOR = 2,
- CMD_ATTENTION = 3 | SIMPLESECT_BIT,
- CMD_AUTHOR = 4 | SIMPLESECT_BIT,
- CMD_BOLD = 5,
- CMD_BUG = 6 | SIMPLESECT_BIT,
- CMD_CODE = 7,
- CMD_COPYDOC = 8,
- CMD_DATE = 9 | SIMPLESECT_BIT,
- CMD_DEPRECATED = 10 | SIMPLESECT_BIT,
- CMD_DONTINCLUDE = 11,
- CMD_DOTFILE = 12,
- CMD_EMPHASIS = 13,
- CMD_ENDCODE = 14,
- CMD_ENDHTMLONLY = 15,
- CMD_ENDLATEXONLY = 16,
- CMD_ENDLINK = 17,
- CMD_ENDVERBATIM = 18,
- CMD_EXCEPTION = 19 | SIMPLESECT_BIT,
- CMD_HTMLINCLUDE = 20,
- CMD_HTMLONLY = 21,
- CMD_IMAGE = 22,
- CMD_INCLUDE = 23,
- CMD_INTERNAL = 24,
- CMD_INVARIANT = 25 | SIMPLESECT_BIT ,
- CMD_LATEXONLY = 26,
- CMD_LI = 27,
- CMD_LINE = 28,
- CMD_LINK = 29,
- CMD_NOTE = 30 | SIMPLESECT_BIT ,
- CMD_PAR = 31 | SIMPLESECT_BIT ,
- CMD_PARAM = 32 | SIMPLESECT_BIT,
- CMD_POST = 33 | SIMPLESECT_BIT,
- CMD_PRE = 34 | SIMPLESECT_BIT ,
- CMD_REF = 35,
- CMD_SECREFITEM = 36,
- CMD_REMARK = 37 | SIMPLESECT_BIT ,
- CMD_RETURN = 38 | SIMPLESECT_BIT ,
- CMD_RETVAL = 39 | SIMPLESECT_BIT,
- CMD_SA = 40 | SIMPLESECT_BIT ,
- CMD_SECTION = 41,
- CMD_SUBSECTION = 42,
- CMD_SUBSUBSECTION= 43,
- CMD_PARAGRAPH = 44,
- CMD_SINCE = 45 | SIMPLESECT_BIT,
- CMD_SKIP = 46,
- CMD_SKIPLINE = 47,
- CMD_STARTCODE = 48,
- CMD_JAVALINK = 49,
- CMD_TEST = 50 | SIMPLESECT_BIT,
- CMD_TODO = 51 | SIMPLESECT_BIT,
- CMD_UNTIL = 52,
- CMD_VERBATIM = 53,
- CMD_VERBINCLUDE = 54,
- CMD_VERSION = 55 | SIMPLESECT_BIT,
- CMD_WARNING = 56 | SIMPLESECT_BIT ,
- CMD_BSLASH = 57,
- CMD_AT = 58,
- CMD_LESS = 59,
- CMD_GREATER = 60,
- CMD_AMP = 61,
- CMD_DOLLAR = 62,
- CMD_HASH = 63,
- CMD_PERCENT = 64,
- CMD_LINEBREAK = 65,
- CMD_FORMULA = 66,
- CMD_SECREFLIST = 67,
- CMD_ENDSECREFLIST= 68,
- CMD_LANGSWITCH = 69,
- CMD_AUTHORS = 70 | SIMPLESECT_BIT,
- CMD_INTERNALREF = 71
+ CMD_AMP = 2,
+ CMD_ANCHOR = 3,
+ CMD_AT = 4,
+ CMD_ATTENTION = 5 | SIMPLESECT_BIT,
+ CMD_AUTHOR = 6 | SIMPLESECT_BIT,
+ CMD_AUTHORS = 7 | SIMPLESECT_BIT,
+ CMD_BOLD = 8,
+ CMD_BSLASH = 9,
+ CMD_CODE = 10,
+ CMD_COPYDOC = 11,
+ CMD_DATE = 12 | SIMPLESECT_BIT,
+ CMD_DOLLAR = 13,
+ CMD_DONTINCLUDE = 14,
+ CMD_DOTFILE = 15,
+ CMD_EMPHASIS = 16,
+ CMD_ENDCODE = 17,
+ CMD_ENDHTMLONLY = 18,
+ CMD_ENDLATEXONLY = 19,
+ CMD_ENDLINK = 20,
+ CMD_ENDSECREFLIST= 21,
+ CMD_ENDVERBATIM = 22,
+ CMD_EXCEPTION = 23 | SIMPLESECT_BIT,
+ CMD_FORMULA = 24,
+ CMD_GREATER = 25,
+ CMD_HASH = 26,
+ CMD_HTMLINCLUDE = 27,
+ CMD_HTMLONLY = 28,
+ CMD_IMAGE = 29,
+ CMD_INCLUDE = 30,
+ CMD_INTERNAL = 31,
+ CMD_INTERNALREF = 32,
+ CMD_INVARIANT = 33 | SIMPLESECT_BIT ,
+ CMD_LANGSWITCH = 34,
+ CMD_LATEXONLY = 35,
+ CMD_LESS = 36,
+ CMD_LI = 37,
+ CMD_LINE = 38,
+ CMD_LINEBREAK = 39,
+ CMD_LINK = 40,
+ CMD_NOTE = 41 | SIMPLESECT_BIT,
+ CMD_PAR = 42 | SIMPLESECT_BIT,
+ CMD_PARAM = 43 | SIMPLESECT_BIT,
+ CMD_PERCENT = 44,
+ CMD_POST = 45 | SIMPLESECT_BIT,
+ CMD_PRE = 46 | SIMPLESECT_BIT ,
+ CMD_REF = 47,
+ CMD_SECREFITEM = 48,
+ CMD_REMARK = 49 | SIMPLESECT_BIT ,
+ CMD_RETURN = 50 | SIMPLESECT_BIT ,
+ CMD_RETVAL = 51 | SIMPLESECT_BIT,
+ CMD_SA = 52 | SIMPLESECT_BIT ,
+ CMD_SECREFLIST = 53,
+ CMD_SECTION = 54,
+ CMD_SUBSECTION = 55,
+ CMD_SUBSUBSECTION= 56,
+ CMD_PARAGRAPH = 57,
+ CMD_SINCE = 58 | SIMPLESECT_BIT,
+ CMD_SKIP = 59,
+ CMD_SKIPLINE = 60,
+ CMD_STARTCODE = 61,
+ CMD_JAVALINK = 62,
+ CMD_UNTIL = 63,
+ CMD_VERBATIM = 64,
+ CMD_VERBINCLUDE = 65,
+ CMD_VERSION = 66 | SIMPLESECT_BIT,
+ CMD_WARNING = 67 | SIMPLESECT_BIT,
+ CMD_XREFITEM = 68 | SIMPLESECT_BIT
};
enum HtmlTagType
diff --git a/src/config.l b/src/config.l
index 184763d..875f9e6 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1078,6 +1078,7 @@ void Config::check()
filePatternList.append("*.h++");
filePatternList.append("*.idl");
filePatternList.append("*.odl");
+ filePatternList.append("*.cs");
}
// add default pattern if needed
@@ -1527,13 +1528,6 @@ void Config::create()
FALSE
);
cb = addBool(
- "VERBATIM_HEADERS",
- "If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \n"
- "will generate a verbatim copy of the header file for each class for \n"
- "which an include is specified. Set to NO to disable this. \n",
- TRUE
- );
- cb = addBool(
"SHOW_INCLUDE_FILES",
"If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n"
"will put list of the files that are included by a file in the documentation \n"
@@ -1741,7 +1735,7 @@ void Config::create()
"and *.h) to filter out the source-files in the directories. If left \n"
"blank the following patterns are tested: \n"
"*.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp \n"
- "*.h++ *.idl *.odl\n"
+ "*.h++ *.idl *.odl *.cs\n"
);
cb = addBool(
"RECURSIVE",
@@ -1851,6 +1845,13 @@ void Config::create()
TRUE
);
cb->addDependency("SOURCE_BROWSER");
+ cb = addBool(
+ "VERBATIM_HEADERS",
+ "If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \n"
+ "will generate a verbatim copy of the header file for each class for \n"
+ "which an include is specified. Set to NO to disable this. \n",
+ TRUE
+ );
//-----------------------------------------------------------------------------------------------
addInfo( "Index","configuration options related to the alphabetical class index");
//-----------------------------------------------------------------------------------------------
diff --git a/src/defgen.cpp b/src/defgen.cpp
index 2216dd9..16352b9 100644
--- a/src/defgen.cpp
+++ b/src/defgen.cpp
@@ -121,6 +121,7 @@ void generateDEFForMember(MemberDef *md,
case Public: t << "public;" << endl; break;
case Protected: t << "protected;" << endl; break;
case Private: t << "private;" << endl; break;
+ case Package: t << "package;" << endl; break;
}
if (md->memberType()!=MemberDef::Define &&
@@ -365,6 +366,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
switch (bcd->prot)
{
case Public: t << "public;" << endl; break;
+ case Package: // package scope is not possible
case Protected: t << "protected;" << endl; break;
case Private: t << "private;" << endl; break;
}
@@ -392,6 +394,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
switch (bcd->prot)
{
case Public: t << "public;" << endl; break;
+ case Package: // packet scope is not possible!
case Protected: t << "protected;" << endl; break;
case Private: t << "private;" << endl; break;
}
diff --git a/src/definition.cpp b/src/definition.cpp
index 5d64a00..ad50412 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -58,7 +58,7 @@ Definition::Definition(const char *df,int dl,
m_deprecatedId=0;
m_outerScope=Doxygen::globalScope;
m_partOfGroups=0;
- m_specialListItems=0;
+ m_xrefListItems=0;
m_briefLine=1;
m_briefFile=(QCString)"<"+name+">";
m_docLine=1;
@@ -71,7 +71,7 @@ Definition::~Definition()
delete m_sourceRefByDict;
delete m_sourceRefsDict;
delete m_partOfGroups;
- delete m_specialListItems;
+ delete m_xrefListItems;
}
void Definition::addSectionsToDefinition(QList<QCString> *anchorList)
@@ -612,47 +612,47 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli)
if (sli)
{
// deep copy the list
- if (m_specialListItems==0)
+ if (m_xrefListItems==0)
{
- m_specialListItems=new QList<ListItemInfo>;
- m_specialListItems->setAutoDelete(TRUE);
+ m_xrefListItems=new QList<ListItemInfo>;
+ m_xrefListItems->setAutoDelete(TRUE);
}
QListIterator<ListItemInfo> slii(*sli);
ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii)
{
- m_specialListItems->append(new ListItemInfo(*lii));
+ m_xrefListItems->append(new ListItemInfo(*lii));
}
}
}
void Definition::mergeRefItems(Definition *d)
{
- if (d->specialListItems())
+ if (d->xrefListItems())
{
// deep copy the list
- if (m_specialListItems==0)
+ if (m_xrefListItems==0)
{
- m_specialListItems=new QList<ListItemInfo>;
- m_specialListItems->setAutoDelete(TRUE);
+ m_xrefListItems=new QList<ListItemInfo>;
+ m_xrefListItems->setAutoDelete(TRUE);
}
- QListIterator<ListItemInfo> slii(*d->specialListItems());
+ QListIterator<ListItemInfo> slii(*d->xrefListItems());
ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii)
{
- if (getSpecialListId(lii->type)==-1)
+ if (getXRefListId(lii->type)==-1)
{
- m_specialListItems->append(new ListItemInfo(*lii));
+ m_xrefListItems->append(new ListItemInfo(*lii));
}
}
}
}
-int Definition::getSpecialListId(const char *listName) const
+int Definition::getXRefListId(const char *listName) const
{
- if (m_specialListItems)
+ if (m_xrefListItems)
{
- QListIterator<ListItemInfo> slii(*m_specialListItems);
+ QListIterator<ListItemInfo> slii(*m_xrefListItems);
ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii)
{
@@ -665,9 +665,9 @@ int Definition::getSpecialListId(const char *listName) const
return -1;
}
-const QList<ListItemInfo> *Definition::specialListItems() const
+const QList<ListItemInfo> *Definition::xrefListItems() const
{
- return m_specialListItems;
+ return m_xrefListItems;
}
diff --git a/src/definition.h b/src/definition.h
index 68b7a92..4c6cff6 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -39,7 +39,8 @@ class Definition
/*! Types of derived classes */
enum DefType
{
- TypeClass, TypeMember, TypeFile, TypeGroup, TypeNamespace, TypePackage
+ TypeClass, TypeMember, TypeFile, TypeGroup,
+ TypeNamespace, TypePackage, TypePage
};
/*! Use this for dynamic inspection of the derived class */
virtual DefType definitionType() = 0;
@@ -114,8 +115,7 @@ class Definition
//int bugId() const { return m_bugId; }
void setRefItems(const QList<ListItemInfo> *sli);
void mergeRefItems(Definition *d);
- int getSpecialListId(const char *listName) const;
- const QList<ListItemInfo> *specialListItems() const;
+ const QList<ListItemInfo> *xrefListItems() const;
/*! returns the file in which this definition was found */
QCString getDefFileName() const { return m_defFileName; }
@@ -154,6 +154,7 @@ class Definition
private:
+ int getXRefListId(const char *listName) const;
void writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members,bool);
//QCString m_qualifiedName; // name of the definition
@@ -171,7 +172,7 @@ class Definition
QCString m_docFile;
int m_briefLine;
QCString m_briefFile;
- QList<ListItemInfo> *m_specialListItems;
+ QList<ListItemInfo> *m_xrefListItems;
};
class DefinitionList : public QList<Definition>
diff --git a/src/diagram.cpp b/src/diagram.cpp
index c1291de..3c9c39e 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -62,6 +62,7 @@ static uint protToMask(Protection p)
switch(p)
{
case Public: return 0xffffffff;
+ case Package: // package is not possible!
case Protected: return 0xcccccccc;
case Private: return 0xaaaaaaaa;
}
@@ -73,6 +74,7 @@ static uint protToColor(Protection p)
switch(p)
{
case Public: return 6;
+ case Package: // package is not possible!
case Protected: return 5;
case Private: return 4;
}
@@ -84,6 +86,7 @@ static QCString protToString(Protection p)
switch(p)
{
case Public: return "solid";
+ case Package: // package is not possible!
case Protected: return "dashed";
case Private: return "dotted";
}
diff --git a/src/docparser.cpp b/src/docparser.cpp
index bd50337..27c2d18 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -1361,15 +1361,23 @@ void DocCopy::parse()
void DocXRefItem::parse()
{
QString listName;
- switch(m_type)
- {
- case Bug: listName="bug"; break;
- case Test: listName="test"; break;
- case Todo: listName="todo"; break;
- case Deprecated: listName="deprecated"; break;
- }
- RefList *refList = Doxygen::specialLists->find(listName);
- if (Config_getBool(refList->optionName())) // list is enabled
+ //switch(m_type)
+ //{
+ // case Bug: listName="bug"; break;
+ // case Test: listName="test"; break;
+ // case Todo: listName="todo"; break;
+ // case Deprecated: listName="deprecated"; break;
+ //}
+ RefList *refList = Doxygen::xrefLists->find(m_key);
+ if (refList &&
+ (
+ // either not a built-in list or the list is enabled
+ (m_key!="todo" || Config_getBool("GENERATE_TODOLIST")) &&
+ (m_key!="test" || Config_getBool("GENERATE_TESTLIST")) &&
+ (m_key!="bug" || Config_getBool("GENERATE_BUGLIST")) &&
+ (m_key!="deprecated" || Config_getBool("GENERATE_DEPRECATEDLIST"))
+ )
+ )
{
RefItem *item = refList->getRefItem(m_id);
ASSERT(item!=0);
@@ -3116,15 +3124,15 @@ int DocPara::handleParamSection(const QString &cmdName,DocParamSect::Type t)
return (rv!=TK_NEWPARA) ? rv : RetVal_OK;
}
-int DocPara::handleXRefItem(DocXRefItem::Type t)
+int DocPara::handleXRefItem()
{
int retval=doctokenizerYYlex();
ASSERT(retval==TK_WHITESPACE);
doctokenizerYYsetStateXRefItem();
retval=doctokenizerYYlex();
- if (retval!=0)
+ if (retval==RetVal_OK)
{
- DocXRefItem *ref = new DocXRefItem(this,g_token->id,t);
+ DocXRefItem *ref = new DocXRefItem(this,g_token->id,g_token->name);
m_children.append(ref);
ref->parse();
}
@@ -3601,17 +3609,8 @@ int DocPara::handleCommand(const QString &cmdName)
case CMD_EXCEPTION:
retval = handleParamSection(cmdName,DocParamSect::Exception);
break;
- case CMD_BUG:
- retval = handleXRefItem(DocXRefItem::Bug);
- break;
- case CMD_TODO:
- retval = handleXRefItem(DocXRefItem::Todo);
- break;
- case CMD_TEST:
- retval = handleXRefItem(DocXRefItem::Test);
- break;
- case CMD_DEPRECATED:
- retval = handleXRefItem(DocXRefItem::Deprecated);
+ case CMD_XREFITEM:
+ retval = handleXRefItem();
break;
case CMD_LINEBREAK:
{
@@ -3801,6 +3800,12 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
case HTML_EMPHASIS:
handleStyleEnter(this,m_children,DocStyleChange::Italic,&g_token->attribs);
break;
+ case HTML_DIV:
+ handleStyleEnter(this,m_children,DocStyleChange::Div,&g_token->attribs);
+ break;
+ case HTML_SPAN:
+ handleStyleEnter(this,m_children,DocStyleChange::Span,&g_token->attribs);
+ break;
case HTML_SUB:
handleStyleEnter(this,m_children,DocStyleChange::Subscript,&g_token->attribs);
break;
@@ -4029,6 +4034,12 @@ int DocPara::handleHtmlEndTag(const QString &tagName)
case HTML_EMPHASIS:
handleStyleLeave(this,m_children,DocStyleChange::Italic,"em");
break;
+ case HTML_DIV:
+ handleStyleLeave(this,m_children,DocStyleChange::Div,"div");
+ break;
+ case HTML_SPAN:
+ handleStyleLeave(this,m_children,DocStyleChange::Span,"span");
+ break;
case HTML_SUB:
handleStyleLeave(this,m_children,DocStyleChange::Subscript,"sub");
break;
diff --git a/src/docparser.h b/src/docparser.h
index 72c7d9b..d413a5a 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -532,11 +532,11 @@ class DocTitle : public CompAccept<DocTitle>, public DocNode
class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
{
public:
- enum Type { Bug, Test, Todo, Deprecated };
- DocXRefItem(DocNode *parent,int id,Type t) :
- m_parent(parent), m_id(id), m_type(t) {}
+ //enum Type { Bug, Test, Todo, Deprecated };
+ DocXRefItem(DocNode *parent,int id,const char *key) :
+ m_parent(parent), m_id(id), m_key(key) /*, m_type(t)*/ {}
Kind kind() const { return Kind_XRefItem; }
- Type type() const { return m_type; }
+ //Type type() const { return m_type; }
QString file() const { return m_file; }
QString anchor() const { return m_anchor; }
QString title() const { return m_title; }
@@ -547,7 +547,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
private:
DocNode *m_parent;
int m_id;
- Type m_type;
+ QString m_key;
QString m_file;
QString m_anchor;
QString m_title;
@@ -927,7 +927,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode
int handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tagHtmlAttribs);
int handleHtmlEndTag(const QString &tagName);
int handleSimpleSection(DocSimpleSect::Type t);
- int handleXRefItem(DocXRefItem::Type t);
+ int handleXRefItem();
int handleParamSection(const QString &cmdName,DocParamSect::Type t);
void handleIncludeOperator(const QString &cmdName,DocIncOperator::Type t);
void handleImage(const QString &cmdName);
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 7655b54..0ed018d 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -314,6 +314,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
%x St_Verbatim
%x St_Param
%x St_XRefItem
+%x St_XRefItem2
%x St_File
%x St_Pattern
%x St_Link
@@ -651,7 +652,13 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
<St_Ref2>"\""|\n { /* " or \n => end of title */
return 0;
}
-<St_XRefItem>[0-9]+\n {
+<St_XRefItem>{ID} {
+ g_token->name=yytext;
+ }
+<St_XRefItem>" " {
+ BEGIN(St_XRefItem2);
+ }
+<St_XRefItem2>[0-9]+\n {
QString numStr=yytext;
numStr=numStr.left(yyleng-1);
g_token->id=numStr.toInt();
diff --git a/src/dot.cpp b/src/dot.cpp
index 0a10ab9..32a9841 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -46,12 +46,36 @@ static const char *edgeColorMap[] =
"orange" // template relation
};
+//static const char *arrowStyle[] =
+//{
+// "empty", // Public
+// "empty", // Protected
+// "empty", // Private
+// "open", // "use" relation
+// 0, // Undocumented
+// 0 // template relation
+//};
+
static const char *edgeStyleMap[] =
{
"solid", // inheritance
"dashed" // usage
};
+static void writeGraphHeader(QTextStream &t)
+{
+ t << "digraph G" << endl;
+ t << "{" << endl;
+ t << " edge [fontname=\"Helvetica\",fontsize=10,"
+ "labelfontname=\"Helvetica\",labelfontsize=10];\n";
+ t << " node [fontname=\"Helvetica\",fontsize=10,shape=record];\n";
+}
+
+static void writeGraphFooter(QTextStream &t)
+{
+ t << "}" << endl;
+}
+
/*! converts the rectangles in a server site image map into a client
* site image map.
* \param t the stream to which the result is written.
@@ -382,14 +406,20 @@ static QCString convertLabel(const QCString &l)
char c;
while ((c=*p++))
{
- if (c=='\\') result+="\\\\";
- else result+=c;
+ switch(c)
+ {
+ case '\\': result+="\\\\"; break;
+ case '<': result+="\\<"; break;
+ case '>': result+="\\>"; break;
+ case '|': result+="\\|"; break;
+ default: result+=c; break;
+ }
}
return result;
}
void DotNode::writeBox(QTextStream &t,
- GraphOutputFormat format,
+ GraphOutputFormat /*format*/,
bool hasNonReachableChildren)
{
const char *labCol =
@@ -397,10 +427,10 @@ void DotNode::writeBox(QTextStream &t,
(
(hasNonReachableChildren) ? "red" : "black"
);
- t << " Node" << m_number << " [shape=\"box\",label=\""
+ t << " Node" << m_number << " [label=\""
<< convertLabel(m_label)
- << "\",fontsize=10,height=0.2,width=0.4";
- if (format==BITMAP) t << ",fontname=\"Helvetica\"";
+ << "\",height=0.2,width=0.4";
+ //if (format==BITMAP) t << ",fontname=\"Helvetica\"";
t << ",color=\"" << labCol << "\"";
if (m_isRoot)
{
@@ -433,6 +463,10 @@ void DotNode::writeArrow(QTextStream &t,
{
t << ",label=\"" << ei->m_label << "\"";
}
+ //if (arrowStyle[ei->m_color])
+ //{
+ // if (pointBack) t << ",arrowtail=\"empty\""; else t << ",arrowhead=\"empty\"";
+ //}
if (format==BITMAP) t << ",fontname=\"Helvetica\"";
t << "];" << endl;
}
@@ -768,8 +802,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
QFile f(dotName);
if (!f.open(IO_WriteOnly)) return;
QTextStream t(&f);
- t << "digraph inheritance" << endl;
- t << "{" << endl;
+ writeGraphHeader(t);
t << " rankdir=LR;" << endl;
QListIterator<DotNode> dnli2(*m_rootNodes);
DotNode *node;
@@ -778,7 +811,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
if (node->m_subgraphId==n->m_subgraphId)
node->write(t,BITMAP,FALSE,TRUE,1000,TRUE);
}
- t << "}" << endl;
+ writeGraphFooter(t);
f.close();
QCString dotArgs(maxCmdLine);
@@ -1203,8 +1236,7 @@ void writeDotGraph(DotNode *root,
if (f.open(IO_WriteOnly))
{
QTextStream t(&f);
- t << "digraph inheritance" << endl;
- t << "{" << endl;
+ writeGraphHeader(t);
if (lrRank)
{
t << " rankdir=LR;" << endl;
@@ -1231,7 +1263,7 @@ void writeDotGraph(DotNode *root,
pn->write(t,format,TRUE,FALSE,distance,backArrows);
}
}
- t << "}" << endl;
+ writeGraphFooter(t);
f.close();
}
}
@@ -1725,8 +1757,7 @@ void generateGraphLegend(const char *path)
return;
}
QTextStream dotText(&dotFile);
- dotText << "digraph inheritance\n";
- dotText << "{\n";
+ writeGraphHeader(dotText);
dotText << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n";
dotText << " Node10 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n";
dotText << " Node10 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classPublicBase" << Doxygen::htmlFileExtension << "\"];\n";
@@ -1744,7 +1775,7 @@ void generateGraphLegend(const char *path)
dotText << " Node17 [shape=\"box\",label=\"Templ< T >\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classTempl" << Doxygen::htmlFileExtension << "\"];\n";
dotText << " Node18 -> Node9 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"Helvetica\"];\n";
dotText << " Node18 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classUsed" << Doxygen::htmlFileExtension << "\"];\n";
- dotText << "}\n";
+ writeGraphFooter(dotText);
dotFile.close();
QDir d(path);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index f51be68..b3600f7 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -112,7 +112,7 @@ bool Doxygen::insideMainPage = FALSE; // are we generating docs for th
QTextStream Doxygen::tagFile;
NamespaceDef *Doxygen::globalScope = new NamespaceDef("<globalScope>",1,"<globalScope>");
-QDict<RefList> *Doxygen::specialLists = new QDict<RefList>; // dictionary of cross-referenced item lists
+QDict<RefList> *Doxygen::xrefLists = new QDict<RefList>; // dictionary of cross-referenced item lists
static StringList inputFiles;
@@ -2985,6 +2985,12 @@ static void findUsedClassesForClass(Entry *root,
QCString typeName = resolveTypeDef(masterCd,usedClassName);
//printf("Found resolved class %s\n",typeName.data());
+ int si=usedClassName.findRev("::");
+ if (si!=-1)
+ {
+ // replace any namespace aliases
+ replaceNamespaceAliases(usedClassName,si);
+ }
// add any template arguments to the class
QCString usedName = usedClassName+templSpec;
@@ -3341,96 +3347,6 @@ static bool findClassRelation(
// 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
- // 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()) && !found ; ++nli)
- {
- QCString fName = nd->name()+"::"+baseClassName;
- found = (baseClass=getResolvedClass(cd,fName))!=0 &&
- baseClass!=cd &&
- root->name!=fName;
- }
- }
- if (fd && !found) // and in the global namespace
- {
- ClassList *cl = fd->getUsedClasses();
- if (cl)
- {
- ClassListIterator cli(*cl);
- ClassDef *ucd;
- for (cli.toFirst(); (ucd=cli.current()) && !found; ++cli)
- {
- if (rightScopeMatch(ucd->name(),biName))
- {
- baseClass = ucd;
- found = TRUE;
- }
- }
- }
- }
- }
- if (!found && nd) // class is inside a namespace
- {
- NamespaceList *nl = nd->getUsedNamespaces();
- QCString fName = nd->name()+"::"+baseClassName;
- found = (baseClass=getResolvedClass(cd,fName))!=0 && root->name!=fName;
- if (nl) // try to prepend any of the using namespace scopes.
- {
- NamespaceListIterator nli(*nl);
- NamespaceDef *nd;
- for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
- {
- fName = nd->name()+"::"+baseClassName;
- found = (baseClass=getResolvedClass(cd,fName))!=0 &&
- baseClass!=cd &&
- root->name!=fName;
- }
- }
- if (!found) // also check imported classes within this namespace
- {
- ClassList *cl = nd->getUsedClasses();
- if (cl)
- {
- ClassListIterator cli(*cl);
- ClassDef *ucd;
- for (cli.toFirst(); (ucd=cli.current()) && !found; ++cli)
- {
- if (rightScopeMatch(ucd->name(),biName))
- {
- baseClass = ucd;
- found = TRUE;
- }
- }
- }
- }
- // TODO: check any inbetween namespaces as well!
- if (fd && !found) // and in the global namespace
- {
- ClassList *cl = fd->getUsedClasses();
- if (cl)
- {
- ClassListIterator cli(*cl);
- ClassDef *ucd;
- for (cli.toFirst(); (ucd=cli.current()) && !found; ++cli)
- {
- if (rightScopeMatch(ucd->name(),biName))
- {
- baseClass = ucd;
- found = TRUE;
- }
- }
- }
- }
- }
-#endif
}
bool isATemplateArgument = templateNames!=0 && templateNames->find(biName)!=0;
if (found)
@@ -3832,7 +3748,7 @@ static void addListReferences()
{
name = pi->getGroupDef()->getOutputFileBase().copy();
}
- addRefItem(pi->specialListItems,
+ addRefItem(pi->xrefListItems,
theTranslator->trPage(TRUE,TRUE),
name,pi->title);
}
@@ -5020,9 +4936,11 @@ static void findMemberDocumentation(Entry *root)
(i=findFunctionPtr(root->type,&l))!=-1
)
{
+ //printf("Fixing function pointer!\n");
// fix type and argument
- root->args+=root->type.right(root->type.length()-i-l);
+ root->args.prepend(root->type.right(root->type.length()-i-l));
root->type=root->type.left(i+l);
+ //printf("Results type=%s,name=%s,args=%s\n",root->type.data(),root->name.data(),root->args.data());
isFunc=FALSE;
}
else if ((root->type.left(8)=="typedef " && root->args.find('(')!=-1))
@@ -5037,7 +4955,14 @@ static void findMemberDocumentation(Entry *root)
//printf("Documentation for inline member `%s' found args=`%s'\n",
// root->name.data(),root->args.data());
//if (root->relates.length()) printf(" Relates %s\n",root->relates.data());
- findMember(root,root->name+root->args+root->exception,FALSE,isFunc);
+ if (root->type.isEmpty())
+ {
+ findMember(root,root->name+root->args+root->exception,FALSE,isFunc);
+ }
+ else
+ {
+ findMember(root,root->type+" "+root->name+root->args+root->exception,FALSE,isFunc);
+ }
}
else if (root->section==Entry::OVERLOADDOC_SEC)
{
@@ -6171,7 +6096,7 @@ static void resolveUserReferences()
// 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);
+ QDictIterator<RefList> rli(*Doxygen::xrefLists);
RefList *rl;
for (rli.toFirst();(rl=rli.current());++rli)
{
@@ -7168,7 +7093,7 @@ void cleanUpDoxygen()
delete Doxygen::pageSDict;
delete Doxygen::exampleSDict;
delete Doxygen::globalScope;
- delete Doxygen::specialLists;
+ delete Doxygen::xrefLists;
cleanUpPreprocessor();
Config::deleteInstance();
QTextCodec::deleteAllCodecs();
@@ -7475,40 +7400,42 @@ void readConfiguration(int argc, char **argv)
QFileInfo configFileInfo(configName);
setPerlModDoxyfile(configFileInfo.absFilePath());
+ Doxygen::xrefLists->setAutoDelete(TRUE);
+#if 0
/* init the special lists */
- Doxygen::specialLists->setAutoDelete(TRUE);
Doxygen::specialLists->insert("todo",
new RefList("todo",
"GENERATE_TODOLIST",
theTranslator->trTodoList(),
- theTranslator->trTodo(),
- BaseOutputDocInterface::Todo
+ theTranslator->trTodo()
+ //,BaseOutputDocInterface::Todo
)
);
Doxygen::specialLists->insert("test",
new RefList("test",
"GENERATE_TESTLIST",
theTranslator->trTestList(),
- theTranslator->trTest(),
- BaseOutputDocInterface::Test
+ theTranslator->trTest()
+ //,BaseOutputDocInterface::Test
)
);
Doxygen::specialLists->insert("bug",
new RefList("bug",
"GENERATE_BUGLIST",
theTranslator->trBugList(),
- theTranslator->trBug(),
- BaseOutputDocInterface::Bug
+ theTranslator->trBug()
+ //,BaseOutputDocInterface::Bug
)
);
Doxygen::specialLists->insert("deprecated",
new RefList("deprecated",
"GENERATE_DEPRECATEDLIST",
theTranslator->trDeprecatedList(),
- theTranslator->trDeprecated(),
- BaseOutputDocInterface::Deprecated
+ theTranslator->trDeprecated()
+ //,BaseOutputDocInterface::Deprecated
)
);
+#endif
}
diff --git a/src/doxygen.h b/src/doxygen.h
index 5f0f311..b35a04b 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -91,7 +91,7 @@ class Doxygen
static QIntDict<MemberGroupInfo> memGrpInfoDict;
static QDict<void> expandAsDefinedDict;
static NamespaceDef *globalScope;
- static QDict<RefList> *specialLists; // array of special lists: todo, test, bug, deprecated ...
+ static QDict<RefList> *xrefLists; // array of xref lists: todo, test, bug, deprecated ...
static QCString htmlFileExtension;
};
diff --git a/src/entry.h b/src/entry.h
index 752337e..9b8489e 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -21,7 +21,7 @@
#include "qtbc.h"
#include <qlist.h>
-enum Protection { Public, Protected, Private } ;
+enum Protection { Public, Protected, Private, Package } ;
enum Specifier { Normal, Virtual, Pure } ;
enum MethodTypes { Method, Signal, Slot, DCOP, Property, Event };
diff --git a/src/filedef.cpp b/src/filedef.cpp
index b0b2081..0849901 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -734,7 +734,7 @@ bool FileDef::generateSourceFile() const
void FileDef::addListReferences()
{
- addRefItem(specialListItems(),
+ addRefItem(xrefListItems(),
theTranslator->trFile(TRUE,TRUE),
getOutputFileBase(),name()
);
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 5a1346b..6f47916 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -783,7 +783,7 @@ QCString GroupDef::getOutputFileBase() const
void GroupDef::addListReferences()
{
- addRefItem(specialListItems(),
+ addRefItem(xrefListItems(),
theTranslator->trGroup(TRUE,TRUE),
getOutputFileBase(),name()
);
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 752ea43..353194b 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -272,6 +272,11 @@ void HtmlDocVisitor::visit(DocFormula *f)
m_t << "\"middle\""; // assume Windows users use IE or HtmlHelp which on
// displays formulas nicely with align == "middle"
#endif
+ m_t << " alt=\"";
+ filterQuotedCdataAttr(f->text());
+ m_t << "\"";
+ /// @todo cache image dimensions on formula generation and give height/width
+ /// for faster preloading and better rendering of the page
m_t << " src=\"" << f->name() << ".png\">";
if (f->text().at(0)=='\\')
m_t << endl << "</center><p>" << endl;
@@ -921,6 +926,43 @@ void HtmlDocVisitor::filter(const char *str)
}
}
+/// Escape basic entities to produce a valid CDATA attribute value,
+/// assume that the outer quoting will be using the double quote &quot;
+void HtmlDocVisitor::filterQuotedCdataAttr(const char* str)
+{
+ if (str==0) return;
+ const char *p=str;
+ char c;
+ while (*p)
+ {
+ c=*p++;
+ switch(c)
+ {
+ case '&': m_t << "&amp;"; break;
+ case '"': m_t << "&quot;"; break;
+ // For SGML compliance, and given the SGML declaration for HTML syntax,
+ // it's enough to replace these two, provided that the declaration
+ // for the HTML version we generate (and as supported by the browser)
+ // specifies that all the other symbols used in rawVal are
+ // within the right charachter class (i.e., they're not
+ // some multinational weird charachters not in the BASESET).
+ // We assume that 1) the browser will support whatever is remaining
+ // in the formula and 2) the TeX formulae are generally governed
+ // by even stricter charachter restrictions so it should be enough.
+ //
+ // On some incompliant browsers, additional translation of
+ // '>' and '<' into "&gt;" and "&lt;", respectively, might be needed;
+ // but I'm unaware of particular modern (last 4 years) versions
+ // with such problems, so let's not do it for performance.
+ // Also, some brousers will (wrongly) not process the entity references
+ // inside the attribute value and show the &...; form instead,
+ // so we won't create entites unless necessary to minimize clutter there.
+ // --vassilii
+ default: m_t << c;
+ }
+ }
+}
+
void HtmlDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor)
{
QCString *dest;
diff --git a/src/htmldocvisitor.h b/src/htmldocvisitor.h
index aad92e3..0ba7d34 100644
--- a/src/htmldocvisitor.h
+++ b/src/htmldocvisitor.h
@@ -133,6 +133,7 @@ class HtmlDocVisitor : public DocVisitor
//--------------------------------------
void filter(const char *str);
+ void filterQuotedCdataAttr(const char* str);
void startLink(const QString &ref,const QString &file,
const QString &anchor);
void endLink();
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 20998ad..f33357e 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -214,11 +214,17 @@ void HtmlGenerator::startFile(const char *name,const char *,
{
HtmlHelp::getInstance()->addIndexFile(fileName);
}
+ QCString dispTitle = title;
+ QCString projName = Config_getString("PROJECT_NAME");
+ if (!projName.isEmpty())
+ {
+ dispTitle.prepend(projName+": ");
+ }
lastFile = fileName;
if (g_header.isEmpty())
{
- writeDefaultHeaderFile(t,title,external);
+ writeDefaultHeaderFile(t,dispTitle,external);
}
else
{
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 0c039ce..f48fc0b 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -66,6 +66,7 @@ HEADERS = bufstr.h \
outputgen.h \
outputlist.h \
page.h \
+ pagedef.h \
perlmodgen.h \
pngenc.h \
pre.h \
@@ -161,6 +162,7 @@ SOURCES = ce_lex.cpp \
namespacedef.cpp \
outputgen.cpp \
outputlist.cpp \
+ pagedef.cpp \
perlmodgen.cpp \
pngenc.cpp \
pre.cpp \
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 9e0b2ff..60a9400 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -683,8 +683,9 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (prot!=Public)
{
Doxygen::tagFile << "\" protection=\"";
- if (prot==Protected) Doxygen::tagFile << "public";
- else /* Private */ Doxygen::tagFile << "protected";
+ if (prot==Protected) Doxygen::tagFile << "public";
+ else if (prot==Package) Doxygen::tagFile << "package";
+ else /* Private */ Doxygen::tagFile << "protected";
}
if (virt!=Normal)
{
@@ -1226,6 +1227,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (isSettable()) sl.append("set");
if (protection()==Protected) sl.append("protected");
else if (protection()==Private) sl.append("private");
+ else if (protection()==Package) sl.append("package");
if (lvirt==Virtual) sl.append("virtual");
else if (lvirt==Pure) sl.append("pure virtual");
if (isSignal()) sl.append("signal");
@@ -1811,7 +1813,7 @@ void MemberDef::addListReference(Definition *d)
}
}
//printf("*** addListReference %s todo=%d test=%d bug=%d\n",name().data(),todoId(),testId(),bugId());
- addRefItem(specialListItems(),memLabel,
+ addRefItem(xrefListItems(),memLabel,
d->getOutputFileBase()+"#"+anchor(),memName,argsString());
}
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index cf9dbb3..b2948ac 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -390,7 +390,7 @@ Definition *NamespaceDef::findInnerCompound(const char *n)
void NamespaceDef::addListReferences()
{
- addRefItem(specialListItems(),
+ addRefItem(xrefListItems(),
theTranslator->trNamespace(TRUE,TRUE),
getOutputFileBase(),displayName()
);
diff --git a/src/outputgen.h b/src/outputgen.h
index 046f47e..508534e 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -78,11 +78,11 @@ class BaseOutputDocInterface : public BaseCodeDocInterface
{
public:
enum ParamListTypes { Param, RetVal, Exception };
- enum SectionTypes { See, Return, Author, Version,
+ enum SectionTypes { /*See, Return, Author, Version,
Since, Date, Bug, Note,
Warning, Par, Deprecated, Pre,
Post, Invar, Remark, Attention,
- Todo, Test, RCS, EnumValues,
+ Todo, Test, RCS, */ EnumValues,
Examples
};
diff --git a/src/page.h b/src/page.h
index 7190188..44c1d6f 100644
--- a/src/page.h
+++ b/src/page.h
@@ -27,7 +27,7 @@ class PageInfo
public:
PageInfo(const char *f, int l,const char *n,const char *d,const char *t) :
defFileName(f), defLine(l), name(n),
- doc(d), title(t), context(0),specialListItems(0),m_inGroup(0)
+ doc(d), title(t), context(0), xrefListItems(0),m_inGroup(0)
{
sectionDict = new SectionDict(17);
}
@@ -111,7 +111,7 @@ class PageInfo
// is this page part of a group
SectionDict *sectionDict;
- QList<ListItemInfo> *specialListItems;
+ QList<ListItemInfo> *xrefListItems;
private:
GroupDef *m_inGroup;
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
new file mode 100644
index 0000000..d1e577f
--- /dev/null
+++ b/src/pagedef.cpp
@@ -0,0 +1,14 @@
+#include "pagedef.h"
+
+
+PageDef::PageDef(const char *f,int l,const char *n,
+ const char *d,const char *t)
+ : Definition(f,l,n), m_title(t)
+{
+ setDocumentation(d,f,l);
+
+}
+
+PageDef::~PageDef()
+{
+}
diff --git a/src/pagedef.h b/src/pagedef.h
new file mode 100644
index 0000000..371c4f7
--- /dev/null
+++ b/src/pagedef.h
@@ -0,0 +1,141 @@
+/******************************************************************************
+ *
+ *
+ *
+ * Copyright (C) 1997-2003 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#include "definition.h"
+#include "sortdict.h"
+//#include "config.h"
+//#include "docparser.h"
+
+//#include "section.h"
+//#include "doxygen.h"
+
+class PageDef : public Definition
+{
+ public:
+ PageDef(const char *f,int l,const char *n,const char *d,const char *t);
+ ~PageDef();
+ DefType definitionType() { return TypePage; }
+
+ // functions to get a uniform interface with Definitions
+ QCString getOutputFileBase() const { return m_fileName; }
+#if 0
+
+ bool isReference() const { return !reference.isEmpty(); }
+ QCString getReference() const { return reference; }
+ PageInfo(const char *f, int l,const char *n,const char *d,const char *t) :
+ defFileName(f), defLine(l), name(n),
+ doc(d), title(t), context(0), xrefListItems(0),m_inGroup(0)
+ {
+ sectionDict = new SectionDict(17);
+ }
+ ~PageInfo()
+ {
+ delete sectionDict;
+ }
+
+ // where the page definition was found
+ QCString defFileName;
+ int defLine;
+
+ // contents of the page
+ QCString name;
+ QCString doc;
+ QCString title;
+
+ // external reference? if so then this is the tag file name
+ QCString reference;
+ QCString fileName;
+
+ // class, file or namespace in which the page was found
+ Definition *context;
+
+
+ //void addSections(QList<QCString> *anchorList)
+ //{
+ // if (anchorList)
+ // {
+ // QCString *s=anchorList->first();
+ // while (s)
+ // {
+ // SectionInfo *si=0;
+ // if (!s->isEmpty() && (si=Doxygen::sectionDict[*s]))
+ // {
+ // //printf("Add section `%s' to definition `%s'\n",
+ // // si->label.data(),n.data());
+ // if (sectionDict==0)
+ // {
+ // sectionDict = new SectionDict(17);
+ // }
+ // if (sectionDict->find(*s)==0)
+ // {
+ // sectionDict->insert(*s,si);
+ // }
+ // si->pageRef = this;
+ // si->fileName = fileName;
+ // }
+ // s=anchorList->next();
+ // }
+ // }
+ //}
+ void findSectionsInDocumentation()
+ {
+ docFindSections(doc,this,0,0,defFileName);
+ }
+
+ void writeDocAnchorsToTagFile()
+ {
+ if (!Config_getString("GENERATE_TAGFILE").isEmpty() && sectionDict)
+ {
+ QDictIterator<SectionInfo> sdi(*sectionDict);
+ SectionInfo *si;
+ for (;(si=sdi.current());++sdi)
+ {
+ if (!si->generated)
+ {
+ Doxygen::tagFile << " <docanchor>" << si->label << "</docanchor>" << endl;
+ }
+ }
+ }
+ }
+
+
+ void makePartOfGroup(GroupDef *gd) { m_inGroup = gd; }
+ GroupDef *getGroupDef() const { return m_inGroup; }
+
+ // is this page part of a group
+ SectionDict *sectionDict;
+ QList<ListItemInfo> *xrefListItems;
+
+ private:
+ GroupDef *m_inGroup;
+#endif
+ private:
+ QCString m_fileName;
+ QCString m_title;
+};
+
+class PageSDict : public SDict<PageDef>
+{
+ public:
+ PageSDict(int size) : SDict<PageDef>(size) {}
+ virtual ~PageSDict() {}
+ int compareItems(GCI i1,GCI i2)
+ {
+ return stricmp(((PageDef *)i1)->name(),((PageDef *)i2)->name());
+ }
+};
+
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index b11d85c..d889938 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -1290,6 +1290,7 @@ static const char *getProtectionName(Protection prot)
case Public: return "public";
case Protected: return "protected";
case Private: return "private";
+ case Package: return "package";
}
return 0;
}
diff --git a/src/reflist.cpp b/src/reflist.cpp
index c3a3951..5293f4e 100644
--- a/src/reflist.cpp
+++ b/src/reflist.cpp
@@ -20,22 +20,22 @@
/*! 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.
* @param pageTitle String representing the title of the list page.
* @param secTitle String representing the title of the section.
- * @param type Type of the section.
*/
-RefList::RefList(const char *listName,const char *optionName,const char *pageTitle,
- const char *secTitle,BaseOutputDocInterface::SectionTypes type)
+RefList::RefList(const char *listName,
+ const char *pageTitle,
+ const char *secTitle
+ )
{
m_dict = 0;
m_dictIterator = 0;
m_id = 0;
m_listName = listName;
- m_optionName = optionName;
+ //m_optionName = optionName;
m_pageTitle = pageTitle;
m_secTitle = secTitle;
- m_type = type;
+ /*m_type = type;*/
}
/*! Destroy the todo list. Currently not called! */
@@ -95,10 +95,10 @@ QCString RefList::listName() const
return m_listName;
}
-QCString RefList::optionName() const
-{
- return m_optionName;
-}
+//QCString RefList::optionName() const
+//{
+// return m_optionName;
+//}
QCString RefList::pageTitle() const
{
@@ -110,8 +110,10 @@ QCString RefList::sectionTitle() const
return m_secTitle;
}
-BaseOutputDocInterface::SectionTypes RefList::sectionType() const
-{
- return m_type;
-}
+
+//BaseOutputDocInterface::SectionTypes RefList::sectionType() const
+//{
+// return m_type;
+//}
+
diff --git a/src/reflist.h b/src/reflist.h
index c8d0937..25e7d2a 100644
--- a/src/reflist.h
+++ b/src/reflist.h
@@ -21,7 +21,7 @@
#include "qtbc.h"
#include <qintdict.h>
-#include "outputgen.h"
+//#include "outputgen.h"
/*! This struct represents an item in the list of references. */
struct RefItem
@@ -50,26 +50,26 @@ class RefList
RefItem *getFirstRefItem();
RefItem *getNextRefItem();
QCString listName() const;
- QCString optionName() const;
+ //QCString optionName() const;
QCString pageTitle() const;
QCString sectionTitle() const;
- BaseOutputDocInterface::SectionTypes sectionType() const;
+ //BaseOutputDocInterface::SectionTypes sectionType() const;
- RefList(const char *listName,const char *optionName,
- const char *pageTitle,const char *secTitle,
- BaseOutputDocInterface::SectionTypes type
+ RefList(const char *listName,
+ const char *pageTitle,const char *secTitle
+ /*,BaseOutputDocInterface::SectionTypes type*/
);
~RefList();
private:
int m_id;
QCString m_listName;
- QCString m_optionName;
+ //QCString m_optionName;
QCString m_pageTitle;
QCString m_secTitle;
QIntDict<RefItem> *m_dict;
QIntDictIterator<RefItem> *m_dictIterator;
- BaseOutputDocInterface::SectionTypes m_type;
+ //BaseOutputDocInterface::SectionTypes m_type;
};
#endif
diff --git a/src/scanner.l b/src/scanner.l
index c3da219..62b4c0f 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -153,6 +153,9 @@ static int depthIf;
static int initializerSharpCount;
static QCString memberGroupRelates;
static QCString memberGroupInside;
+static QCString xrefItemKey;
+static QCString xrefItemTitle;
+static QCString xrefListTitle;
//-----------------------------------------------------------------------------
@@ -185,6 +188,7 @@ static void initParser()
static void initEntry()
{
+ if (insideJava) protection = Package;
current->protection = protection ;
current->mtype = mtype;
current->virt = virt;
@@ -281,39 +285,17 @@ static void newDocState();
//-----------------------------------------------------------------
-#if 0
-static void addSection()
+static void addXRefItem(const char *listName,const char *itemTitle,const char *listTitle)
{
- //printf("New section pageName=%s label=%s title=%s\n",
- // current->name.data(),sectionLabel.data(),sectionTitle.data());
- if (current->name.isEmpty() /*|| current->section != Entry::PAGEDOC_SEC */)
- {
- //warn(yyFileName,yyLineNr,"Warning: found section or anchor with label `%s' "
- // "outside of \\page context!\n",sectionLabel.data());
- return;
- }
- if (sectionLabel.isEmpty()) return;
- if (Doxygen::sectionDict.find(sectionLabel)==0)
- {
- SectionInfo *si=new SectionInfo(current->name,sectionLabel,sectionTitle,sectionType);
- //printf("Adding section addr=%p label=`%s' sectionTitle=`%s' fileName=%s\n",si,sectionLabel.data(),sectionTitle.data(),si->fileName.data());
- Doxygen::sectionDict.insert(sectionLabel,si);
- current->anchors->append(new QCString(sectionLabel));
- }
- else
- {
- warn(yyFileName,yyLineNr,
- "Warning: Duplicate label %s found!",sectionLabel.data());
- }
- sectionTitle.resize(0);
-}
-#endif
+ if (listName==0) return;
-static void addSpecialItem(const char *listName)
-{
ListItemInfo *lii=0;
- RefList *refList = Doxygen::specialLists->find(listName);
- ASSERT(refList!=0);
+ RefList *refList = Doxygen::xrefLists->find(listName);
+ if (refList==0) // new list
+ {
+ refList = new RefList(listName,listTitle,itemTitle);
+ Doxygen::xrefLists->insert(listName,refList);
+ }
if (current->sli)
{
QListIterator<ListItemInfo> slii(*current->sli);
@@ -341,22 +323,12 @@ static void addSpecialItem(const char *listName)
item->listAnchor = anchorLabel;
current->addSpecialListItem(listName,itemId);
QCString cmdString;
- cmdString.sprintf("\\%s %d\n",listName,itemId);
+ cmdString.sprintf("\\xrefitem %s %d\n",listName,itemId);
current->doc += cmdString;
- //current->doc += (QCString)"\\anchor "+anchorLabel+"\n";
-
SectionInfo *si=new SectionInfo(listName,anchorLabel,
sectionTitle,SectionInfo::Anchor);
Doxygen::sectionDict.insert(anchorLabel,si);
current->anchors->append(new QCString(anchorLabel));
-
- //QCString tmpName = current->name;
- //current->name = listName;
- //sectionType=SectionInfo::Anchor;
- //sectionLabel=anchorLabel;
- //addSection();
- //current->name = tmpName;
- //printf("%s: text `%s' doc %s\n",listName,item->text.data(),cmdString.data());
}
current->brief = slString.copy(); // restore orginial brief desc.
}
@@ -512,7 +484,7 @@ static int yyread(char *buf,int max_size)
/* start command character */
CMD ("\\"|"@")
-SECTIONCMD {CMD}("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"ingroup"|"latexonly"|"htmlonly"|"{"|"verbatim"|"dotfile"|"defgroup"|"addtogroup"|"weakgroup")|("<"{PRE}">")
+SECTIONCMD {CMD}("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"xrefitem"|"ingroup"|"latexonly"|"htmlonly"|"{"|"verbatim"|"dotfile"|"defgroup"|"addtogroup"|"weakgroup")|("<"{PRE}">")
BN [ \t\n\r]
BL [ \t\r]*"\n"
B [ \t]
@@ -563,6 +535,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x Operator
%x Array
%x ReadBody
+%x ReadNSBody
%x Using
%x UsingDirective
%x NameSpaceDocArg1
@@ -642,6 +615,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x TestParam
%x BugParam
%x DeprecatedParam
+%x XRefItemParam1
+%x XRefItemParam2
+%x XRefItemParam3
+%x XRefItemParam4
%x SectionLabel
%x SectionTitle
%x SkipTemplate
@@ -1126,15 +1103,17 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
}
<NSAliasArg>({ID}"::")*{ID} {
//printf("Inserting namespace alias %s::%s->%s\n",current_root->name.data(),aliasName.data(),yytext);
- if (current_root->name.isEmpty())
- {
+ //if (current_root->name.isEmpty())
+ //{
+ // TODO: namespace aliases are now treated as global entities
+ // while they should be aware of the scope they are in
Doxygen::namespaceAliasDict.insert(aliasName,new QCString(yytext));
- }
- else
- {
- Doxygen::namespaceAliasDict.insert(current_root->name+"::"+aliasName,
- new QCString(current_root->name+"::"+yytext));
- }
+ //}
+ //else
+ //{
+ // Doxygen::namespaceAliasDict.insert(current_root->name+"::"+aliasName,
+ // new QCString(current_root->name+"::"+yytext));
+ //}
}
<NSAliasArg>";" {
BEGIN( FindMembers );
@@ -1386,7 +1365,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->bodyLine = yyLineNr;
BEGIN( Define );
}
-<FindMembers,ReadBody>{B}*"#"{B}+[0-9]+{B}+/"\"" { /* line control directive */
+<FindMembers,ReadBody,ReadNSBody>{B}*"#"{B}+[0-9]+{B}+/"\"" { /* line control directive */
yyLineNr = atoi(&yytext[1]);
//printf("setting line number to %d\n",yyLineNr);
lastPreLineCtrlContext = YY_START;
@@ -1905,31 +1884,31 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
/*
<FindFieldArg>"," { unput(*yytext); BEGIN(FindFields); }
*/
-<ReadBody>[^\r\n\#{}"'/]* { current->program += yytext ; }
-<ReadBody>"//".* { current->program += yytext ; }
-<ReadBody>"#".* { if (! insidePHP)
+<ReadBody,ReadNSBody>[^\r\n\#{}"'/]* { current->program += yytext ; }
+<ReadBody,ReadNSBody>"//".* { current->program += yytext ; }
+<ReadBody,ReadNSBody>"#".* { if (! insidePHP)
REJECT;
current->program += yytext ;
}
-<ReadBody>\" { current->program += yytext ;
+<ReadBody,ReadNSBody>\" { current->program += yytext ;
pCopyQuotedString = &current->program;
lastStringContext=YY_START;
BEGIN( CopyString );
}
-<ReadBody>"/*"{B}* { current->program += yytext ;
+<ReadBody,ReadNSBody>"/*"{B}* { current->program += yytext ;
lastContext = ReadBody ;
BEGIN( Comment ) ;
}
-<ReadBody>"/*"{BL} { current->program += yytext ;
+<ReadBody,ReadNSBody>"/*"{BL} { current->program += yytext ;
++yyLineNr ;
lastContext = ReadBody ;
BEGIN( Comment ) ;
}
-<ReadBody>{CHARLIT} { current->program += yytext; }
-<ReadBody>"{" { current->program += yytext ;
+<ReadBody,ReadNSBody>{CHARLIT} { current->program += yytext; }
+<ReadBody,ReadNSBody>"{" { current->program += yytext ;
++curlyCount ;
}
-<ReadBody>"}" { //err("ReadBody count=%d\n",curlyCount);
+<ReadBody,ReadNSBody>"}" { //err("ReadBody count=%d\n",curlyCount);
if ( curlyCount>0 )
{
current->program += yytext ;
@@ -1966,7 +1945,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current = new Entry(*current);
if (current->section==Entry::NAMESPACE_SEC ||
current->section==Entry::INTERFACE_SEC ||
- insideJava || insidePHP
+ insideJava || insidePHP || insideCS
)
{ // namespaces and interfaces and java classes ends with a closing bracket without semicolon
current->reset();
@@ -2143,10 +2122,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
*/
<MemberSpecSkip>"," { BEGIN(MemberSpec); }
<MemberSpecSkip>";" { unput(';'); BEGIN(MemberSpec); }
-<ReadBody>{BN}+ { current->program += yytext ;
+<ReadBody,ReadNSBody>{BN}+ { current->program += yytext ;
lineCount() ;
}
-<ReadBody>. { current->program += yytext ; }
+<ReadBody,ReadNSBody>. { current->program += yytext ; }
<FindMembers>"("/({BN}*{ID}{BN}*"::")*{ID}{BN}*")"{BN}*"(" | /* typedef void (A::func_t)(args...) */
<FindMembers>("("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+)+ { /* typedef void (A::*ptr_t)(args...) */
@@ -2975,7 +2954,14 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->name.sprintf("@%d",anonCount++);
}
curlyCount=0;
- BEGIN( ReadBody ) ;
+ if (current->section==Entry::NAMESPACE_SEC)
+ {
+ BEGIN( ReadNSBody );
+ }
+ else
+ {
+ BEGIN( ReadBody ) ;
+ }
}
<BasesProt>"virtual" { baseVirt = Virtual; }
<BasesProt>"public" { baseProt = Public; }
@@ -3473,10 +3459,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
}
<SkipHtmlComment>"--"[!]?">" { BEGIN(lastSkipHtmlCommentContext); }
<SkipHtmlComment>.
-<AfterDoc,Doc,ClassDoc,PageDoc>("\\\\"|"@@")("todo"|"test"|"bug"|"deprecated")/[^a-z_A-Z0-9] {
+<AfterDoc,Doc,ClassDoc,PageDoc>("\\\\"|"@@")("todo"|"test"|"bug"|"deprecated"|"xrefitem")/[^a-z_A-Z0-9] {
current->doc+=yytext;
}
-<AfterDocLine,LineDoc,JavaDoc>("\\\\"|"@@")("todo"|"test"|"bug"|"deprecated")/[^a-z_A-Z0-9] {
+<AfterDocLine,LineDoc,JavaDoc>("\\\\"|"@@")("todo"|"test"|"bug"|"deprecated"|"xrefitem")/[^a-z_A-Z0-9] {
current->brief+=yytext;
}
<AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"todo"/[^a-z_A-Z0-9] {
@@ -3507,11 +3493,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->brief.resize(0);
BEGIN(ClassDocBrief);
}
+<AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"xrefitem"/[^a-z_A-Z0-9] {
+ slStartContext = YY_START;
+ lastBriefContext = XRefItemParam4; // 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(XRefItemParam1);
+ }
<TodoParam>\n |
<TodoParam>"//" |
<TodoParam>"/*" |
<TodoParam>. {
- addSpecialItem("todo");
+ addXRefItem("todo",theTranslator->trTodo(),theTranslator->trTodoList());
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext);
}
@@ -3519,7 +3512,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<TestParam>"//" |
<TestParam>"/*" |
<TestParam>. {
- addSpecialItem("test");
+ addXRefItem("test",theTranslator->trTest(),theTranslator->trTestList());
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext);
}
@@ -3527,7 +3520,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<BugParam>"//" |
<BugParam>"/*" |
<BugParam>. {
- addSpecialItem("bug");
+ addXRefItem("bug",theTranslator->trBug(),theTranslator->trBugList());
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext);
}
@@ -3535,7 +3528,46 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<DeprecatedParam>"//" |
<DeprecatedParam>"/*" |
<DeprecatedParam>. {
- addSpecialItem("deprecated");
+ addXRefItem("deprecated",theTranslator->trDeprecated(),theTranslator->trDeprecatedList());
+ int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
+ BEGIN(slStartContext);
+ }
+<XRefItemParam1>{ID} {
+ xrefItemKey=yytext;
+ BEGIN(XRefItemParam2);
+ }
+<XRefItemParam1>{B}*
+<XRefItemParam1>. {
+ warn(yyFileName,yyLineNr,"Found unexpected character %s while parsing the first argument of \\xrefitem\n",yytext);
+ unput(*yytext);
+ BEGIN(slStartContext);
+ }
+<XRefItemParam2>"\""[^\n\"]*"\"" {
+ xrefItemTitle = stripQuotes(yytext);
+ BEGIN(XRefItemParam3);
+ }
+<XRefItemParam2>{B}*
+<XRefItemParam2>. {
+ warn(yyFileName,yyLineNr,"Found unexpected character %s while parsing the second argument of \\xrefitem\n",yytext);
+ unput(*yytext);
+ BEGIN(slStartContext);
+ }
+<XRefItemParam3>{B}*
+<XRefItemParam3>"\""[^\n\"]*"\"" {
+ xrefListTitle = stripQuotes(yytext);
+ BEGIN(ClassDocBrief);
+ }
+<XRefItemParam3>. {
+ warn(yyFileName,yyLineNr,"Found unexpected character %s while parsing the third argument of \\xrefitem\n",yytext);
+ unput(*yytext);
+ BEGIN(slStartContext);
+ }
+<XRefItemParam4>{B}*
+<XRefItemParam4>\n |
+<XRefItemParam4>"//" |
+<XRefItemParam4>"/*" |
+<XRefItemParam4>. {
+ addXRefItem(xrefItemKey,xrefItemTitle,xrefListTitle);
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext);
}
@@ -4066,6 +4098,12 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN( DeprecatedParam );
}
else if (YY_START==ClassDocBrief &&
+ lastBriefContext==XRefItemParam4)
+ {
+ unput('/');unput('*'); // make sure we have something to read
+ BEGIN( XRefItemParam4 );
+ }
+ else if (YY_START==ClassDocBrief &&
lastBriefContext==Doc)
{
current->doc += "\n\n";
@@ -4238,7 +4276,8 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
if (lastBriefContext==TodoParam ||
lastBriefContext==TestParam ||
lastBriefContext==BugParam ||
- lastBriefContext==DeprecatedParam
+ lastBriefContext==DeprecatedParam ||
+ lastBriefContext==XRefItemParam4
)
{
unput('\n');
@@ -4291,6 +4330,16 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
unput('\n'); // make sure we have something to read
BEGIN( DeprecatedParam );
}
+ else if
+ (lastBriefContext==XRefItemParam4 &&
+ (slStartContext==LineDoc ||
+ slStartContext==AfterDocLine
+ )
+ )
+ {
+ unput('\n'); // make sure we have something to read
+ BEGIN( XRefItemParam4 );
+ }
else
{
current->brief += "\n";
@@ -4350,15 +4399,16 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
copyArgString = &current->args;
BEGIN( ReadFuncArgType ) ;
}
-<ClassDocFunc>"("({ID}"::")*({B}*"*")+ {
- current->name+=yytext;
+<ClassDocFunc>"("({ID}"::")*({B}*"*")+ {
+ current->type+=current->name+yytext;
+ current->name.resize(0);
BEGIN( ClassDocFuncPtr );
}
<ClassDocFuncPtr>{SCOPENAME} {
current->name+=yytext;
}
<ClassDocFuncPtr>")" {
- current->name+=')';
+ current->type+=')';
BEGIN( ClassDocFunc );
}
<ClassDocFuncQual>"{" {
@@ -4872,11 +4922,13 @@ static void parseCompounds(Entry *rt)
// set default protection based on the compound type
if( ce->section==Entry::CLASS_SEC ) // class
{
- if (ce->fileName.right(5)==".java" ||
+ if (
ce->fileName.right(4)==".php" ||
ce->fileName.right(4)==".inc"
)
- current->protection = protection = Public ; // Actually this should be package scope!
+ current->protection = protection = Public ;
+ else if (ce->fileName.right(5)==".java")
+ current->protection = protection = Package ;
else
current->protection = protection = Private ;
}
diff --git a/src/translator.h b/src/translator.h
index 5875e6e..ec9f213 100644
--- a/src/translator.h
+++ b/src/translator.h
@@ -389,6 +389,17 @@ class Translator
virtual QCString trEvents() = 0;
virtual QCString trEventDocumentation() = 0;
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trPackageTypes() = 0;
+ virtual QCString trPackageMembers() = 0;
+ virtual QCString trStaticPackageMembers() = 0;
+ virtual QCString trPackageAttribs() = 0;
+ virtual QCString trStaticPackageAttribs() = 0;
+
};
#endif
diff --git a/src/translator_adapter.h b/src/translator_adapter.h
index 230a4d0..ac44505 100644
--- a/src/translator_adapter.h
+++ b/src/translator_adapter.h
@@ -40,7 +40,26 @@ class TranslatorAdapterBase : public Translator
};
-class TranslatorAdapter_1_2_18 : public TranslatorAdapterBase
+class TranslatorAdapter_1_3 : public TranslatorAdapterBase
+{
+ public:
+ virtual QCString updateNeededMessage()
+ { return createUpdateNeededMessage(idLanguage(),"release 1.3"); }
+
+ virtual QCString trPackageTypes()
+ { return english.trPackageTypes(); }
+ virtual QCString trPackageMembers()
+ { return english.trPackageMembers(); }
+ virtual QCString trStaticPackageMembers()
+ { return english.trStaticPackageMembers(); }
+ virtual QCString trPackageAttribs()
+ { return english.trPackageAttribs(); }
+ virtual QCString trStaticPackageAttribs()
+ { return english.trStaticPackageAttribs(); }
+};
+
+
+class TranslatorAdapter_1_2_18 : public TranslatorAdapter_1_3
{
public:
virtual QCString updateNeededMessage()
diff --git a/src/translator_br.h b/src/translator_br.h
index 5d686f0..17e2ce9 100644
--- a/src/translator_br.h
+++ b/src/translator_br.h
@@ -32,7 +32,7 @@
#ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H
-class TranslatorBrazilian: public Translator
+class TranslatorBrazilian: public TranslatorAdapter_1_3
{
public:
diff --git a/src/translator_cz.h b/src/translator_cz.h
index e3b0205..0b2c5e0 100644
--- a/src/translator_cz.h
+++ b/src/translator_cz.h
@@ -166,7 +166,7 @@
// probably slightly faster.
-class TranslatorCzech : public Translator
+class TranslatorCzech : public TranslatorAdapter_1_3
{
private:
/*! The decode() inline assumes the source written in the
diff --git a/src/translator_de.h b/src/translator_de.h
index 186d087..08f44a7 100644
--- a/src/translator_de.h
+++ b/src/translator_de.h
@@ -79,7 +79,7 @@
#ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H
-class TranslatorGerman : public Translator
+class TranslatorGerman : public TranslatorAdapter_1_3
{
public:
diff --git a/src/translator_dk.h b/src/translator_dk.h
index 87d11b2..4657bc6 100644
--- a/src/translator_dk.h
+++ b/src/translator_dk.h
@@ -71,7 +71,7 @@
#ifndef TRANSLATOR_DK_H
#define TRANSLATOR_DK_H
-class TranslatorDanish : public Translator
+class TranslatorDanish : public TranslatorAdapter_1_3
{
public:
diff --git a/src/translator_en.h b/src/translator_en.h
index 288461b..1b00007 100644
--- a/src/translator_en.h
+++ b/src/translator_en.h
@@ -1433,6 +1433,46 @@ class TranslatorEnglish : public Translator
return "Event Documentation";
}
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as a heading for a list of Java class types with package scope.
+ */
+ virtual QCString trPackageTypes()
+ {
+ return "Package Types";
+ }
+ /*! Used as a heading for a list of Java class functions with package
+ * scope.
+ */
+ virtual QCString trPackageMembers()
+ {
+ return "Package Functions";
+ }
+ /*! Used as a heading for a list of static Java class functions with
+ * package scope.
+ */
+ virtual QCString trStaticPackageMembers()
+ {
+ return "Static Package Functions";
+ }
+ /*! Used as a heading for a list of Java class variables with package
+ * scope.
+ */
+ virtual QCString trPackageAttribs()
+ {
+ return "Package Attributes";
+ }
+ /*! Used as a heading for a list of static Java class variables with
+ * package scope.
+ */
+ virtual QCString trStaticPackageAttribs()
+ {
+ return "Static Package Attributes";
+ }
+
+
};
#endif
diff --git a/src/translator_fr.h b/src/translator_fr.h
index 2641bb7..627614e 100644
--- a/src/translator_fr.h
+++ b/src/translator_fr.h
@@ -47,7 +47,7 @@
#ifndef TRANSLATOR_FR_H
#define TRANSLATOR_FR_H
-class TranslatorFrench : public Translator
+class TranslatorFrench : public TranslatorAdapter_1_3
{
public:
QCString idLanguage()
diff --git a/src/translator_hr.h b/src/translator_hr.h
index 25e483e..46e5e18 100644
--- a/src/translator_hr.h
+++ b/src/translator_hr.h
@@ -53,7 +53,7 @@
#ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H
-class TranslatorCroatian : public Translator
+class TranslatorCroatian : public TranslatorAdapter_1_3
{
private:
/*! to avoid macro redefinition from translator_cz.h */
diff --git a/src/translator_it.h b/src/translator_it.h
index 13145fb..d97fc92 100644
--- a/src/translator_it.h
+++ b/src/translator_it.h
@@ -67,7 +67,7 @@
#ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H
-class TranslatorItalian : public Translator
+class TranslatorItalian : public TranslatorAdapter_1_3
{
public:
diff --git a/src/translator_jp.h b/src/translator_jp.h
index 8348f50..d4286be 100644
--- a/src/translator_jp.h
+++ b/src/translator_jp.h
@@ -64,7 +64,7 @@ class TranslatorJapaneseEn : public TranslatorEnglish
}
};
-class TranslatorJapanese : public Translator
+class TranslatorJapanese : public TranslatorAdapter_1_3
{
private:
/*! The decode() can change euc into sjis */
diff --git a/src/translator_kr.h b/src/translator_kr.h
index d9a2b44..3134893 100644
--- a/src/translator_kr.h
+++ b/src/translator_kr.h
@@ -18,7 +18,7 @@
#ifndef TRANSLATOR_KR_H
#define TRANSLATOR_KR_H
-class TranslatorKorean : public Translator
+class TranslatorKorean : public TranslatorAdapter_1_3
{
public:
diff --git a/src/translator_nl.h b/src/translator_nl.h
index 88c157b..5ca923d 100644
--- a/src/translator_nl.h
+++ b/src/translator_nl.h
@@ -1030,6 +1030,45 @@ class TranslatorDutch : public Translator
return "Event Documentatie";
}
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as a heading for a list of Java class types with package scope.
+ */
+ virtual QCString trPackageTypes()
+ {
+ return "Package Types";
+ }
+ /*! Used as a heading for a list of Java class functions with package
+ * scope.
+ */
+ virtual QCString trPackageMembers()
+ {
+ return "Package Functies";
+ }
+ /*! Used as a heading for a list of static Java class functions with
+ * package scope.
+ */
+ virtual QCString trStaticPackageMembers()
+ {
+ return "Statische Package Functies";
+ }
+ /*! Used as a heading for a list of Java class variables with package
+ * scope.
+ */
+ virtual QCString trPackageAttribs()
+ {
+ return "Package Attributen";
+ }
+ /*! Used as a heading for a list of static Java class variables with
+ * package scope.
+ */
+ virtual QCString trStaticPackageAttribs()
+ {
+ return "Statische Package Attributen";
+ }
+
};
#endif
diff --git a/src/translator_pl.h b/src/translator_pl.h
index de612cd..72192d3 100644
--- a/src/translator_pl.h
+++ b/src/translator_pl.h
@@ -20,7 +20,7 @@
#ifndef TRANSLATOR_PL_H
#define TRANSLATOR_PL_H
-class TranslatorPolish : public Translator
+class TranslatorPolish : public TranslatorAdapter_1_3
{
private:
/*! to avoid macro redefinition from translator_pl.h */
diff --git a/src/translator_ru.h b/src/translator_ru.h
index 1329d88..39fd1a3 100644
--- a/src/translator_ru.h
+++ b/src/translator_ru.h
@@ -48,7 +48,7 @@
#ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H
-class TranslatorRussian : public Translator
+class TranslatorRussian : public TranslatorAdapter_1_3
{
private:
/*! The Decode() inline assumes the source written in the
diff --git a/src/util.cpp b/src/util.cpp
index 6a5517e..cc4a8aa 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -2934,7 +2934,7 @@ QCString substituteKeywords(const QCString &s,const char *title)
*/
int getPrefixIndex(const QCString &name)
{
- //printf("getPrefixIndex(%s) ni=%d\n",name.data(),ni);
+ if (name.isEmpty()) return 0;
QStrList &sl = Config_getList("IGNORE_PREFIX");
char *s = sl.first();
while (s)
@@ -3624,16 +3624,16 @@ PageInfo *addRelatedPage(const char *name,const QCString &ptitle,
if (sli)
{
- if (pi->specialListItems==0)
+ if (pi->xrefListItems==0)
{
- pi->specialListItems=new QList<ListItemInfo>;
- pi->specialListItems->setAutoDelete(TRUE);
+ pi->xrefListItems=new QList<ListItemInfo>;
+ pi->xrefListItems->setAutoDelete(TRUE);
}
QListIterator<ListItemInfo> slii(*sli);
ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii)
{
- pi->specialListItems->append(new ListItemInfo(*lii));
+ pi->xrefListItems->append(new ListItemInfo(*lii));
}
}
@@ -3700,10 +3700,16 @@ void addRefItem(const QList<ListItemInfo> *sli,
ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii)
{
- RefList *refList = Doxygen::specialLists->find(lii->type);
- ASSERT(refList!=0);
-
- if (Config_getBool(refList->optionName()))
+ RefList *refList = Doxygen::xrefLists->find(lii->type);
+ if (refList &&
+ (
+ // either not a built-in list or the list is enabled
+ (lii->type!="todo" || Config_getBool("GENERATE_TODOLIST")) &&
+ (lii->type!="test" || Config_getBool("GENERATE_TESTLIST")) &&
+ (lii->type!="bug" || Config_getBool("GENERATE_BUGLIST")) &&
+ (lii->type!="deprecated" || Config_getBool("GENERATE_DEPRECATEDLIST"))
+ )
+ )
{
RefItem *item = refList->getRefItem(lii->itemId);
ASSERT(item!=0);
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 1062bd2..8e3cef6 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -501,6 +501,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
+ case Package: t << "package"; break;
}
t << "\" static=\"";
if (md->isStatic()) t << "yes"; else t << "no";
@@ -685,6 +686,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
+ case Package: t << "package"; break;
}
t << "\">" << endl;
t << " <name>";
@@ -791,6 +793,7 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t)
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
+ case Package: t << "package"; break;
}
t << "\" virt=\"";
switch(virt)
@@ -869,6 +872,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
+ case Package: ASSERT(0); break;
}
t << "\" virt=\"";
switch(bcd->virt)
@@ -895,6 +899,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
+ case Package: ASSERT(0); break;
}
t << "\" virt=\"";
switch(bcd->virt)