Commit ebd0447b authored by dimitri's avatar dimitri

Release-1.3-20030421

parent 3cd2917e
DOXYGEN Version 1.3 DOXYGEN Version 1.3-20030421
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (10 April 2003) Dimitri van Heesch (21 April 2003)
DOXYGEN Version 1.3 DOXYGEN Version 1.3_20030421
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) (10 April 2003) Dimitri van Heesch (dimitri@stack.nl) (21 April 2003)
...@@ -287,7 +287,7 @@ if test "$f_insttool" = NO; then ...@@ -287,7 +287,7 @@ if test "$f_insttool" = NO; then
for i in $install_names; do for i in $install_names; do
for j in $install_dirs; do for j in $install_dirs; do
if test -x "$j/$i"; then 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_found=YES
install_prog="$j/$i" install_prog="$j/$i"
break 2 break 2
...@@ -305,7 +305,7 @@ if test "$f_insttool" = NO; then ...@@ -305,7 +305,7 @@ if test "$f_insttool" = NO; then
echo "not found!"; echo "not found!";
echo echo
fi 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 "see http://www.gnu.org/software/fileutils/fileutils.html"
echo echo
exit 2 exit 2
......
...@@ -139,12 +139,13 @@ strings and executes the commands it finds in it (this is the second pass ...@@ -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 in parsing the documentation). It writes the result directly to the output
generators. 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. 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() The main entry point for the documentation parser is \c validatingParseDoc()
declared in \c src/doc.h. For simple texts with special declared in \c src/docparser.h. For simple texts with special
commands \c parseText() is used. commands \c validatingParseText() is used.
<h3>Source parser</h3> <h3>Source parser</h3>
......
...@@ -129,6 +129,7 @@ documentation: ...@@ -129,6 +129,7 @@ documentation:
\refitem cmdversion \\version \refitem cmdversion \\version
\refitem cmdwarning \\warning \refitem cmdwarning \\warning
\refitem cmdweakgroup \\weakgroup \refitem cmdweakgroup \\weakgroup
\refitem cmdxrefitem \\xrefitem
\refitem cmddollar \\\$ \refitem cmddollar \\\$
\refitem cmdat \\\@ \refitem cmdat \\\@
\refitem cmdbackslash \\\\ \refitem cmdbackslash \\\\
...@@ -1027,6 +1028,38 @@ ALIASES = "english=\if english" \ ...@@ -1027,6 +1028,38 @@ ALIASES = "english=\if english" \
sectioning command is encountered. See section \ref cmdauthor "\\author" sectioning command is encountered. See section \ref cmdauthor "\\author"
for an example. 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> <hr>
<h2>\htmlonly <center> --- \endhtmlonly <h2>\htmlonly <center> --- \endhtmlonly
Commands to create links Commands to create links
......
...@@ -641,7 +641,7 @@ function's detailed documentation block. ...@@ -641,7 +641,7 @@ function's detailed documentation block.
in the directories. If left blank the following patterns are tested: in the directories. If left blank the following patterns are tested:
<code> <code>
*.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
*.h++ *.idl *.odl *.h++ *.idl *.odl *.cs
</code> </code>
\anchor cfg_recursive \anchor cfg_recursive
......
...@@ -55,7 +55,7 @@ when the translator was updated. ...@@ -55,7 +55,7 @@ when the translator was updated.
<TD>Brazilian Portuguese</TD> <TD>Brazilian Portuguese</TD>
<TD>Fabio "FJTC" Jun Takada Chino</TD> <TD>Fabio "FJTC" Jun Takada Chino</TD>
<TD>chino@NOSPAM.icmc.sc.usp.br</TD> <TD>chino@NOSPAM.icmc.sc.usp.br</TD>
<TD>up-to-date</TD> <TD>strange</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Catalan</TD> <TD>Catalan</TD>
...@@ -79,19 +79,19 @@ when the translator was updated. ...@@ -79,19 +79,19 @@ when the translator was updated.
<TD>Croatian</TD> <TD>Croatian</TD>
<TD>Boris Bralo</TD> <TD>Boris Bralo</TD>
<TD>boris.bralo@NOSPAM.zg.tel.hr</TD> <TD>boris.bralo@NOSPAM.zg.tel.hr</TD>
<TD>up-to-date</TD> <TD>strange</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Czech</TD> <TD>Czech</TD>
<TD>Petr P&#x0159;ikryl</TD> <TD>Petr P&#x0159;ikryl</TD>
<TD>prikrylp@NOSPAM.skil.cz</TD> <TD>prikrylp@NOSPAM.skil.cz</TD>
<TD>up-to-date</TD> <TD>strange</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Danish</TD> <TD>Danish</TD>
<TD>Erik S&oslash;e S&oslash;rensen</TD> <TD>Erik S&oslash;e S&oslash;rensen</TD>
<TD>erik@NOSPAM.mail.nu</TD> <TD>erik@NOSPAM.mail.nu</TD>
<TD>up-to-date</TD> <TD>strange</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Dutch</TD> <TD>Dutch</TD>
...@@ -115,13 +115,13 @@ when the translator was updated. ...@@ -115,13 +115,13 @@ when the translator was updated.
<TD>French</TD> <TD>French</TD>
<TD>Xavier Outhier</TD> <TD>Xavier Outhier</TD>
<TD>xouthier@NOSPAM.yahoo.fr</TD> <TD>xouthier@NOSPAM.yahoo.fr</TD>
<TD>up-to-date</TD> <TD>strange</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>German</TD> <TD>German</TD>
<TD>Jens Seidel</TD> <TD>Jens Seidel</TD>
<TD>jensseidel@NOSPAM.users.sf.net</TD> <TD>jensseidel@NOSPAM.users.sf.net</TD>
<TD>up-to-date</TD> <TD>strange</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Greek</TD> <TD>Greek</TD>
...@@ -139,19 +139,19 @@ when the translator was updated. ...@@ -139,19 +139,19 @@ when the translator was updated.
<TD>Italian</TD> <TD>Italian</TD>
<TD>Alessandro Falappa<br>Ahmed Aldo Faisal</TD> <TD>Alessandro Falappa<br>Ahmed Aldo Faisal</TD>
<TD>alessandro@NOSPAM.falappa.net<br>aaf23@NOSPAM.cam.ac.uk</TD> <TD>alessandro@NOSPAM.falappa.net<br>aaf23@NOSPAM.cam.ac.uk</TD>
<TD>up-to-date</TD> <TD>strange</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Japanese</TD> <TD>Japanese</TD>
<TD>Ryunosuke Satoh<br>Kenji Nagamatsu</TD> <TD>Ryunosuke Satoh<br>Kenji Nagamatsu</TD>
<TD>sun594@NOSPAM.hotmail.com<br>naga@NOSPAM.joyful.club.ne.jp</TD> <TD>sun594@NOSPAM.hotmail.com<br>naga@NOSPAM.joyful.club.ne.jp</TD>
<TD>up-to-date</TD> <TD>strange</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>strange</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Norwegian</TD> <TD>Norwegian</TD>
...@@ -163,7 +163,7 @@ when the translator was updated. ...@@ -163,7 +163,7 @@ when the translator was updated.
<TD>Polish</TD> <TD>Polish</TD>
<TD>Piotr Kaminski<br>Grzegorz Kowal</TD> <TD>Piotr Kaminski<br>Grzegorz Kowal</TD>
<TD>Piotr.Kaminski@NOSPAM.ctm.gdynia.pl<br>g_kowal@NOSPAM.poczta.onet.pl</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>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Portuguese</TD> <TD>Portuguese</TD>
...@@ -181,7 +181,7 @@ when the translator was updated. ...@@ -181,7 +181,7 @@ when the translator was updated.
<TD>Russian</TD> <TD>Russian</TD>
<TD>Alexandr Chelpanov</TD> <TD>Alexandr Chelpanov</TD>
<TD>cav@NOSPAM.cryptopro.ru</TD> <TD>cav@NOSPAM.cryptopro.ru</TD>
<TD>up-to-date</TD> <TD>strange</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Serbian</TD> <TD>Serbian</TD>
...@@ -230,7 +230,7 @@ when the translator was updated. ...@@ -230,7 +230,7 @@ when the translator was updated.
{\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\ {\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
\hline \hline
\hline \hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & up-to-date \\ Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & strange \\
\hline \hline
Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\ Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\
\hline \hline
...@@ -239,11 +239,11 @@ when the translator was updated. ...@@ -239,11 +239,11 @@ when the translator was updated.
\hline \hline
Chinese Traditional & Gary Lee & {\tt garylee@ecosine.com.tw} & 1.2.16 \\ Chinese Traditional & Gary Lee & {\tt garylee@ecosine.com.tw} & 1.2.16 \\
\hline \hline
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\ Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & strange \\
\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} & strange \\
\hline \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 \hline
Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} & up-to-date \\ Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} & up-to-date \\
\hline \hline
...@@ -251,32 +251,32 @@ when the translator was updated. ...@@ -251,32 +251,32 @@ when the translator was updated.
\hline \hline
Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & obsolete \\ Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & obsolete \\
\hline \hline
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & up-to-date \\ French & Xavier Outhier & {\tt xouthier@yahoo.fr} & strange \\
\hline \hline
German & Jens Seidel & {\tt jensseidel@users.sf.net} & up-to-date \\ German & Jens Seidel & {\tt jensseidel@users.sf.net} & strange \\
\hline \hline
Greek & Harry Kalogirou & {\tt harkal@rainbow.cs.unipi.gr} & 1.2.11 \\ Greek & Harry Kalogirou & {\tt harkal@rainbow.cs.unipi.gr} & 1.2.11 \\
\hline \hline
Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\ Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\
\hline \hline
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\ Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & strange \\
& Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\ & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\
\hline \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} & \\ & 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} & strange \\
\hline \hline
Norwegian & Lars Erik Jordet & {\tt lej@circuitry.no} & 1.2.2 \\ Norwegian & Lars Erik Jordet & {\tt lej@circuitry.no} & 1.2.2 \\
\hline \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} & \\ & Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & \\
\hline \hline
Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.2.18 \\ Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.2.18 \\
\hline \hline
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\ Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\
\hline \hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\ Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & strange \\
\hline \hline
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.2.17 \\ Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.2.17 \\
\hline \hline
......
...@@ -446,7 +446,7 @@ int inflate_trees_fixed(uIntf *bl, uIntf *bd, inflate_huft **tl, inflate_huft ** ...@@ -446,7 +446,7 @@ int inflate_trees_fixed(uIntf *bl, uIntf *bd, inflate_huft **tl, inflate_huft **
fixed_built = 1; fixed_built = 1;
} }
#else #else
z=z; // DvH: added to avoid compiler warning z=z; /* DvH: added to avoid compiler warning */
#endif #endif
*bl = fixed_bl; *bl = fixed_bl;
*bd = fixed_bd; *bd = fixed_bd;
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3 Version: 1.3_20030421
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
......
...@@ -170,6 +170,11 @@ void ClassDef::addMembersToMemberGroup() ...@@ -170,6 +170,11 @@ void ClassDef::addMembersToMemberGroup()
::addMembersToMemberGroup(&dcopMethods,memberGroupSDict,this); ::addMembersToMemberGroup(&dcopMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&pubStaticMethods,memberGroupSDict,this); ::addMembersToMemberGroup(&pubStaticMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&pubStaticAttribs,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(&proTypes,memberGroupSDict,this);
::addMembersToMemberGroup(&proMethods,memberGroupSDict,this); ::addMembersToMemberGroup(&proMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&proAttribs,memberGroupSDict,this); ::addMembersToMemberGroup(&proAttribs,memberGroupSDict,this);
...@@ -247,9 +252,11 @@ void ClassDef::internalInsertMember(MemberDef *md, ...@@ -247,9 +252,11 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot) switch (prot)
{ {
case Protected: case Protected:
case Package: // slots in packages are not possible!
proSlots.append(md); proSlots.append(md);
md->setSectionList(this,&proSlots); md->setSectionList(this,&proSlots);
break; break;
break;
case Public: case Public:
pubSlots.append(md); pubSlots.append(md);
md->setSectionList(this,&pubSlots); md->setSectionList(this,&pubSlots);
...@@ -271,6 +278,10 @@ void ClassDef::internalInsertMember(MemberDef *md, ...@@ -271,6 +278,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proStaticAttribs.append(md); proStaticAttribs.append(md);
md->setSectionList(this,&proStaticAttribs); md->setSectionList(this,&proStaticAttribs);
break; break;
case Package:
pacStaticAttribs.append(md);
md->setSectionList(this,&pacStaticAttribs);
break;
case Public: case Public:
pubStaticAttribs.append(md); pubStaticAttribs.append(md);
md->setSectionList(this,&pubStaticAttribs); md->setSectionList(this,&pubStaticAttribs);
...@@ -289,6 +300,10 @@ void ClassDef::internalInsertMember(MemberDef *md, ...@@ -289,6 +300,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proStaticMethods.append(md); proStaticMethods.append(md);
md->setSectionList(this,&proStaticMethods); md->setSectionList(this,&proStaticMethods);
break; break;
case Package:
pacStaticMethods.append(md);
md->setSectionList(this,&pacStaticMethods);
break;
case Public: case Public:
pubStaticMethods.append(md); pubStaticMethods.append(md);
md->setSectionList(this,&pubStaticMethods); md->setSectionList(this,&pubStaticMethods);
...@@ -310,6 +325,10 @@ void ClassDef::internalInsertMember(MemberDef *md, ...@@ -310,6 +325,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proAttribs.append(md); proAttribs.append(md);
md->setSectionList(this,&proAttribs); md->setSectionList(this,&proAttribs);
break; break;
case Package:
pacAttribs.append(md);
md->setSectionList(this,&pacAttribs);
break;
case Public: case Public:
pubAttribs.append(md); pubAttribs.append(md);
md->setSectionList(this,&pubAttribs); md->setSectionList(this,&pubAttribs);
...@@ -328,6 +347,10 @@ void ClassDef::internalInsertMember(MemberDef *md, ...@@ -328,6 +347,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proTypes.append(md); proTypes.append(md);
md->setSectionList(this,&proTypes); md->setSectionList(this,&proTypes);
break; break;
case Package:
pacTypes.append(md);
md->setSectionList(this,&pacTypes);
break;
case Public: case Public:
pubTypes.append(md); pubTypes.append(md);
md->setSectionList(this,&pubTypes); md->setSectionList(this,&pubTypes);
...@@ -346,6 +369,10 @@ void ClassDef::internalInsertMember(MemberDef *md, ...@@ -346,6 +369,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proMethods.append(md); proMethods.append(md);
md->setSectionList(this,&proMethods); md->setSectionList(this,&proMethods);
break; break;
case Package:
pacMethods.append(md);
md->setSectionList(this,&pacMethods);
break;
case Public: case Public:
pubMethods.append(md); pubMethods.append(md);
md->setSectionList(this,&pubMethods); md->setSectionList(this,&pubMethods);
...@@ -401,11 +428,7 @@ void ClassDef::internalInsertMember(MemberDef *md, ...@@ -401,11 +428,7 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot) switch (prot)
{ {
case Protected: case Protected:
if (Config_getBool("SORT_MEMBER_DOCS")) case Package:
functionMembers.inSort(md);
else
functionMembers.append(md);
break;
case Public: case Public:
if (Config_getBool("SORT_MEMBER_DOCS")) if (Config_getBool("SORT_MEMBER_DOCS"))
functionMembers.inSort(md); functionMembers.inSort(md);
...@@ -517,28 +540,32 @@ void ClassDef::computeAnchors() ...@@ -517,28 +540,32 @@ void ClassDef::computeAnchors()
ClassDef *context = Config_getBool("INLINE_INHERITED_MEMB") ? this : 0; ClassDef *context = Config_getBool("INLINE_INHERITED_MEMB") ? this : 0;
setAnchors(context,'a',&pubMethods); setAnchors(context,'a',&pubMethods);
setAnchors(context,'b',&proMethods); setAnchors(context,'b',&proMethods);
setAnchors(context,'c',&priMethods); setAnchors(context,'c',&pacMethods);
setAnchors(context,'d',&pubStaticMethods); setAnchors(context,'d',&priMethods);
setAnchors(context,'e',&proStaticMethods); setAnchors(context,'e',&pubStaticMethods);
setAnchors(context,'f',&priStaticMethods); setAnchors(context,'f',&proStaticMethods);
setAnchors(context,'g',&pubSlots); setAnchors(context,'g',&pacStaticMethods);
setAnchors(context,'h',&proSlots); setAnchors(context,'h',&priStaticMethods);
setAnchors(context,'i',&priSlots); setAnchors(context,'i',&pubSlots);
setAnchors(context,'j',&signals); setAnchors(context,'j',&proSlots);
setAnchors(context,'k',&related); setAnchors(context,'k',&priSlots);
setAnchors(context,'l',&friends); setAnchors(context,'l',&signals);
setAnchors(context,'m',&pubAttribs); setAnchors(context,'m',&related);
setAnchors(context,'n',&proAttribs); setAnchors(context,'n',&friends);
setAnchors(context,'o',&priAttribs); setAnchors(context,'o',&pubAttribs);
setAnchors(context,'p',&pubStaticAttribs); setAnchors(context,'p',&proAttribs);
setAnchors(context,'q',&proStaticAttribs); setAnchors(context,'q',&pacAttribs);
setAnchors(context,'r',&priStaticAttribs); setAnchors(context,'r',&priAttribs);
setAnchors(context,'s',&pubTypes); setAnchors(context,'s',&pubStaticAttribs);
setAnchors(context,'t',&proTypes); setAnchors(context,'t',&proStaticAttribs);
setAnchors(context,'u',&priTypes); setAnchors(context,'u',&pacStaticAttribs);
setAnchors(context,'v',&dcopMethods); setAnchors(context,'v',&priStaticAttribs);
setAnchors(context,'w',&properties); setAnchors(context,'w',&pubTypes);
setAnchors(context,'x',&events); setAnchors(context,'x',&proTypes);
setAnchors(context,'y',&priTypes);
setAnchors(context,'z',&dcopMethods);
setAnchors(context,'0',&properties);
setAnchors(context,'1',&events);
MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg; MemberGroup *mg;
for (;(mg=mgli.current());++mgli) for (;(mg=mgli.current());++mgli)
...@@ -574,6 +601,11 @@ void ClassDef::findSectionsInDocumentation() ...@@ -574,6 +601,11 @@ void ClassDef::findSectionsInDocumentation()
dcopMethods.findSectionsInDocumentation(); dcopMethods.findSectionsInDocumentation();
pubStaticMethods.findSectionsInDocumentation(); pubStaticMethods.findSectionsInDocumentation();
pubStaticAttribs.findSectionsInDocumentation(); pubStaticAttribs.findSectionsInDocumentation();
pacTypes.findSectionsInDocumentation();
pacMethods.findSectionsInDocumentation();
pacAttribs.findSectionsInDocumentation();
pacStaticMethods.findSectionsInDocumentation();
pacStaticAttribs.findSectionsInDocumentation();
proTypes.findSectionsInDocumentation(); proTypes.findSectionsInDocumentation();
proMethods.findSectionsInDocumentation(); proMethods.findSectionsInDocumentation();
proAttribs.findSectionsInDocumentation(); proAttribs.findSectionsInDocumentation();
...@@ -1155,7 +1187,18 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1155,7 +1187,18 @@ void ClassDef::writeDocumentation(OutputList &ol)
proAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedAttribs(),0); proAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedAttribs(),0);
proStaticAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticProtectedAttribs(),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); properties.writeDeclarations(ol,this,0,0,0,theTranslator->trProperties(),0);
// events // events
...@@ -1463,6 +1506,7 @@ void ClassDef::writeMemberList(OutputList &ol) ...@@ -1463,6 +1506,7 @@ void ClassDef::writeMemberList(OutputList &ol)
if (md->isMutable()) sl.append("mutable"); if (md->isMutable()) sl.append("mutable");
if (prot==Protected) sl.append("protected"); if (prot==Protected) sl.append("protected");
else if (prot==Private) sl.append("private"); else if (prot==Private) sl.append("private");
else if (prot==Package) sl.append("package");
if (virt==Virtual) sl.append("virtual"); if (virt==Virtual) sl.append("virtual");
else if (virt==Pure) sl.append("pure virtual"); else if (virt==Pure) sl.append("pure virtual");
if (md->isStatic()) sl.append("static"); if (md->isStatic()) sl.append("static");
...@@ -1639,6 +1683,16 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup) ...@@ -1639,6 +1683,16 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup)
proStaticMethods.writePlainDeclarations(ol,this,0,0,0); proStaticMethods.writePlainDeclarations(ol,this,0,0,0);
proStaticAttribs.setInGroup(inGroup); proStaticAttribs.setInGroup(inGroup);
proStaticAttribs.writePlainDeclarations(ol,this,0,0,0); 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")) if (Config_getBool("EXTRACT_PRIVATE"))
{ {
priTypes.setInGroup(inGroup); priTypes.setInGroup(inGroup);
...@@ -2534,7 +2588,7 @@ QCString ClassDef::className() const ...@@ -2534,7 +2588,7 @@ QCString ClassDef::className() const
void ClassDef::addListReferences() void ClassDef::addListReferences()
{ {
addRefItem(specialListItems(), addRefItem(xrefListItems(),
theTranslator->trClass(TRUE,TRUE), theTranslator->trClass(TRUE,TRUE),
getOutputFileBase(),displayName() getOutputFileBase(),displayName()
); );
......
...@@ -199,21 +199,26 @@ class ClassDef : public Definition ...@@ -199,21 +199,26 @@ class ClassDef : public Definition
/* member lists by protection */ /* member lists by protection */
MemberList pubMethods; MemberList pubMethods;
MemberList proMethods; MemberList proMethods;
MemberList pacMethods;
MemberList priMethods; MemberList priMethods;
MemberList pubStaticMethods; MemberList pubStaticMethods;
MemberList proStaticMethods; MemberList proStaticMethods;
MemberList pacStaticMethods;
MemberList priStaticMethods; MemberList priStaticMethods;
MemberList pubSlots; MemberList pubSlots;
MemberList proSlots; MemberList proSlots;
MemberList priSlots; MemberList priSlots;
MemberList pubAttribs; MemberList pubAttribs;
MemberList proAttribs; MemberList proAttribs;
MemberList pacAttribs;
MemberList priAttribs; MemberList priAttribs;
MemberList pubStaticAttribs; MemberList pubStaticAttribs;
MemberList proStaticAttribs; MemberList proStaticAttribs;
MemberList pacStaticAttribs;
MemberList priStaticAttribs; MemberList priStaticAttribs;
MemberList pubTypes; MemberList pubTypes;
MemberList proTypes; MemberList proTypes;
MemberList pacTypes;
MemberList priTypes; MemberList priTypes;
MemberList related; MemberList related;
MemberList signals; MemberList signals;
......
...@@ -27,12 +27,10 @@ CommandMap cmdMap[] = ...@@ -27,12 +27,10 @@ CommandMap cmdMap[] =
{ "attention", CMD_ATTENTION }, { "attention", CMD_ATTENTION },
{ "author", CMD_AUTHOR }, { "author", CMD_AUTHOR },
{ "b", CMD_BOLD }, { "b", CMD_BOLD },
{ "bug", CMD_BUG },
{ "c", CMD_CODE }, { "c", CMD_CODE },
{ "code", CMD_STARTCODE }, { "code", CMD_STARTCODE },
{ "copydoc", CMD_COPYDOC }, { "copydoc", CMD_COPYDOC },
{ "date", CMD_DATE }, { "date", CMD_DATE },
{ "deprecated", CMD_DEPRECATED },
{ "dontinclude", CMD_DONTINCLUDE }, { "dontinclude", CMD_DONTINCLUDE },
{ "dotfile", CMD_DOTFILE }, { "dotfile", CMD_DOTFILE },
{ "e", CMD_EMPHASIS }, { "e", CMD_EMPHASIS },
...@@ -81,9 +79,8 @@ CommandMap cmdMap[] = ...@@ -81,9 +79,8 @@ CommandMap cmdMap[] =
{ "since", CMD_SINCE }, { "since", CMD_SINCE },
{ "skip", CMD_SKIP }, { "skip", CMD_SKIP },
{ "skipline", CMD_SKIPLINE }, { "skipline", CMD_SKIPLINE },
{ "test", CMD_TEST }, { "xrefitem", CMD_XREFITEM },
{ "throw", CMD_EXCEPTION }, { "throw", CMD_EXCEPTION },
{ "todo", CMD_TODO },
{ "until", CMD_UNTIL }, { "until", CMD_UNTIL },
{ "verbatim", CMD_VERBATIM }, { "verbatim", CMD_VERBATIM },
{ "verbinclude", CMD_VERBINCLUDE }, { "verbinclude", CMD_VERBINCLUDE },
......
...@@ -33,76 +33,73 @@ enum CommandType ...@@ -33,76 +33,73 @@ enum CommandType
{ {
CMD_UNKNOWN = 0, CMD_UNKNOWN = 0,
CMD_ADDINDEX = 1, CMD_ADDINDEX = 1,
CMD_ANCHOR = 2, CMD_AMP = 2,
CMD_ATTENTION = 3 | SIMPLESECT_BIT, CMD_ANCHOR = 3,
CMD_AUTHOR = 4 | SIMPLESECT_BIT, CMD_AT = 4,
CMD_BOLD = 5, CMD_ATTENTION = 5 | SIMPLESECT_BIT,
CMD_BUG = 6 | SIMPLESECT_BIT, CMD_AUTHOR = 6 | SIMPLESECT_BIT,
CMD_CODE = 7, CMD_AUTHORS = 7 | SIMPLESECT_BIT,
CMD_COPYDOC = 8, CMD_BOLD = 8,
CMD_DATE = 9 | SIMPLESECT_BIT, CMD_BSLASH = 9,
CMD_DEPRECATED = 10 | SIMPLESECT_BIT, CMD_CODE = 10,
CMD_DONTINCLUDE = 11, CMD_COPYDOC = 11,
CMD_DOTFILE = 12, CMD_DATE = 12 | SIMPLESECT_BIT,
CMD_EMPHASIS = 13, CMD_DOLLAR = 13,
CMD_ENDCODE = 14, CMD_DONTINCLUDE = 14,
CMD_ENDHTMLONLY = 15, CMD_DOTFILE = 15,
CMD_ENDLATEXONLY = 16, CMD_EMPHASIS = 16,
CMD_ENDLINK = 17, CMD_ENDCODE = 17,
CMD_ENDVERBATIM = 18, CMD_ENDHTMLONLY = 18,
CMD_EXCEPTION = 19 | SIMPLESECT_BIT, CMD_ENDLATEXONLY = 19,
CMD_HTMLINCLUDE = 20, CMD_ENDLINK = 20,
CMD_HTMLONLY = 21, CMD_ENDSECREFLIST= 21,
CMD_IMAGE = 22, CMD_ENDVERBATIM = 22,
CMD_INCLUDE = 23, CMD_EXCEPTION = 23 | SIMPLESECT_BIT,
CMD_INTERNAL = 24, CMD_FORMULA = 24,
CMD_INVARIANT = 25 | SIMPLESECT_BIT , CMD_GREATER = 25,
CMD_LATEXONLY = 26, CMD_HASH = 26,
CMD_LI = 27, CMD_HTMLINCLUDE = 27,
CMD_LINE = 28, CMD_HTMLONLY = 28,
CMD_LINK = 29, CMD_IMAGE = 29,
CMD_NOTE = 30 | SIMPLESECT_BIT , CMD_INCLUDE = 30,
CMD_PAR = 31 | SIMPLESECT_BIT , CMD_INTERNAL = 31,
CMD_PARAM = 32 | SIMPLESECT_BIT, CMD_INTERNALREF = 32,
CMD_POST = 33 | SIMPLESECT_BIT, CMD_INVARIANT = 33 | SIMPLESECT_BIT ,
CMD_PRE = 34 | SIMPLESECT_BIT , CMD_LANGSWITCH = 34,
CMD_REF = 35, CMD_LATEXONLY = 35,
CMD_SECREFITEM = 36, CMD_LESS = 36,
CMD_REMARK = 37 | SIMPLESECT_BIT , CMD_LI = 37,
CMD_RETURN = 38 | SIMPLESECT_BIT , CMD_LINE = 38,
CMD_RETVAL = 39 | SIMPLESECT_BIT, CMD_LINEBREAK = 39,
CMD_SA = 40 | SIMPLESECT_BIT , CMD_LINK = 40,
CMD_SECTION = 41, CMD_NOTE = 41 | SIMPLESECT_BIT,
CMD_SUBSECTION = 42, CMD_PAR = 42 | SIMPLESECT_BIT,
CMD_SUBSUBSECTION= 43, CMD_PARAM = 43 | SIMPLESECT_BIT,
CMD_PARAGRAPH = 44, CMD_PERCENT = 44,
CMD_SINCE = 45 | SIMPLESECT_BIT, CMD_POST = 45 | SIMPLESECT_BIT,
CMD_SKIP = 46, CMD_PRE = 46 | SIMPLESECT_BIT ,
CMD_SKIPLINE = 47, CMD_REF = 47,
CMD_STARTCODE = 48, CMD_SECREFITEM = 48,
CMD_JAVALINK = 49, CMD_REMARK = 49 | SIMPLESECT_BIT ,
CMD_TEST = 50 | SIMPLESECT_BIT, CMD_RETURN = 50 | SIMPLESECT_BIT ,
CMD_TODO = 51 | SIMPLESECT_BIT, CMD_RETVAL = 51 | SIMPLESECT_BIT,
CMD_UNTIL = 52, CMD_SA = 52 | SIMPLESECT_BIT ,
CMD_VERBATIM = 53, CMD_SECREFLIST = 53,
CMD_VERBINCLUDE = 54, CMD_SECTION = 54,
CMD_VERSION = 55 | SIMPLESECT_BIT, CMD_SUBSECTION = 55,
CMD_WARNING = 56 | SIMPLESECT_BIT , CMD_SUBSUBSECTION= 56,
CMD_BSLASH = 57, CMD_PARAGRAPH = 57,
CMD_AT = 58, CMD_SINCE = 58 | SIMPLESECT_BIT,
CMD_LESS = 59, CMD_SKIP = 59,
CMD_GREATER = 60, CMD_SKIPLINE = 60,
CMD_AMP = 61, CMD_STARTCODE = 61,
CMD_DOLLAR = 62, CMD_JAVALINK = 62,
CMD_HASH = 63, CMD_UNTIL = 63,
CMD_PERCENT = 64, CMD_VERBATIM = 64,
CMD_LINEBREAK = 65, CMD_VERBINCLUDE = 65,
CMD_FORMULA = 66, CMD_VERSION = 66 | SIMPLESECT_BIT,
CMD_SECREFLIST = 67, CMD_WARNING = 67 | SIMPLESECT_BIT,
CMD_ENDSECREFLIST= 68, CMD_XREFITEM = 68 | SIMPLESECT_BIT
CMD_LANGSWITCH = 69,
CMD_AUTHORS = 70 | SIMPLESECT_BIT,
CMD_INTERNALREF = 71
}; };
enum HtmlTagType enum HtmlTagType
......
...@@ -1078,6 +1078,7 @@ void Config::check() ...@@ -1078,6 +1078,7 @@ void Config::check()
filePatternList.append("*.h++"); filePatternList.append("*.h++");
filePatternList.append("*.idl"); filePatternList.append("*.idl");
filePatternList.append("*.odl"); filePatternList.append("*.odl");
filePatternList.append("*.cs");
} }
// add default pattern if needed // add default pattern if needed
...@@ -1526,13 +1527,6 @@ void Config::create() ...@@ -1526,13 +1527,6 @@ void Config::create()
"documentation. If set to YES the scope will be hidden. \n", "documentation. If set to YES the scope will be hidden. \n",
FALSE 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( cb = addBool(
"SHOW_INCLUDE_FILES", "SHOW_INCLUDE_FILES",
"If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n" "If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n"
...@@ -1741,7 +1735,7 @@ void Config::create() ...@@ -1741,7 +1735,7 @@ void Config::create()
"and *.h) to filter out the source-files in the directories. If left \n" "and *.h) to filter out the source-files in the directories. If left \n"
"blank the following patterns are tested: \n" "blank the following patterns are tested: \n"
"*.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp \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( cb = addBool(
"RECURSIVE", "RECURSIVE",
...@@ -1851,6 +1845,13 @@ void Config::create() ...@@ -1851,6 +1845,13 @@ void Config::create()
TRUE TRUE
); );
cb->addDependency("SOURCE_BROWSER"); 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"); addInfo( "Index","configuration options related to the alphabetical class index");
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
......
...@@ -121,6 +121,7 @@ void generateDEFForMember(MemberDef *md, ...@@ -121,6 +121,7 @@ void generateDEFForMember(MemberDef *md,
case Public: t << "public;" << endl; break; case Public: t << "public;" << endl; break;
case Protected: t << "protected;" << endl; break; case Protected: t << "protected;" << endl; break;
case Private: t << "private;" << endl; break; case Private: t << "private;" << endl; break;
case Package: t << "package;" << endl; break;
} }
if (md->memberType()!=MemberDef::Define && if (md->memberType()!=MemberDef::Define &&
...@@ -365,6 +366,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t) ...@@ -365,6 +366,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
switch (bcd->prot) switch (bcd->prot)
{ {
case Public: t << "public;" << endl; break; case Public: t << "public;" << endl; break;
case Package: // package scope is not possible
case Protected: t << "protected;" << endl; break; case Protected: t << "protected;" << endl; break;
case Private: t << "private;" << endl; break; case Private: t << "private;" << endl; break;
} }
...@@ -392,6 +394,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t) ...@@ -392,6 +394,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
switch (bcd->prot) switch (bcd->prot)
{ {
case Public: t << "public;" << endl; break; case Public: t << "public;" << endl; break;
case Package: // packet scope is not possible!
case Protected: t << "protected;" << endl; break; case Protected: t << "protected;" << endl; break;
case Private: t << "private;" << endl; break; case Private: t << "private;" << endl; break;
} }
......
...@@ -58,7 +58,7 @@ Definition::Definition(const char *df,int dl, ...@@ -58,7 +58,7 @@ Definition::Definition(const char *df,int dl,
m_deprecatedId=0; m_deprecatedId=0;
m_outerScope=Doxygen::globalScope; m_outerScope=Doxygen::globalScope;
m_partOfGroups=0; m_partOfGroups=0;
m_specialListItems=0; m_xrefListItems=0;
m_briefLine=1; m_briefLine=1;
m_briefFile=(QCString)"<"+name+">"; m_briefFile=(QCString)"<"+name+">";
m_docLine=1; m_docLine=1;
...@@ -71,7 +71,7 @@ Definition::~Definition() ...@@ -71,7 +71,7 @@ Definition::~Definition()
delete m_sourceRefByDict; delete m_sourceRefByDict;
delete m_sourceRefsDict; delete m_sourceRefsDict;
delete m_partOfGroups; delete m_partOfGroups;
delete m_specialListItems; delete m_xrefListItems;
} }
void Definition::addSectionsToDefinition(QList<QCString> *anchorList) void Definition::addSectionsToDefinition(QList<QCString> *anchorList)
...@@ -612,47 +612,47 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli) ...@@ -612,47 +612,47 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli)
if (sli) if (sli)
{ {
// deep copy the list // deep copy the list
if (m_specialListItems==0) if (m_xrefListItems==0)
{ {
m_specialListItems=new QList<ListItemInfo>; m_xrefListItems=new QList<ListItemInfo>;
m_specialListItems->setAutoDelete(TRUE); m_xrefListItems->setAutoDelete(TRUE);
} }
QListIterator<ListItemInfo> slii(*sli); QListIterator<ListItemInfo> slii(*sli);
ListItemInfo *lii; ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii) for (slii.toFirst();(lii=slii.current());++slii)
{ {
m_specialListItems->append(new ListItemInfo(*lii)); m_xrefListItems->append(new ListItemInfo(*lii));
} }
} }
} }
void Definition::mergeRefItems(Definition *d) void Definition::mergeRefItems(Definition *d)
{ {
if (d->specialListItems()) if (d->xrefListItems())
{ {
// deep copy the list // deep copy the list
if (m_specialListItems==0) if (m_xrefListItems==0)
{ {
m_specialListItems=new QList<ListItemInfo>; m_xrefListItems=new QList<ListItemInfo>;
m_specialListItems->setAutoDelete(TRUE); m_xrefListItems->setAutoDelete(TRUE);
} }
QListIterator<ListItemInfo> slii(*d->specialListItems()); QListIterator<ListItemInfo> slii(*d->xrefListItems());
ListItemInfo *lii; ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii) 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; ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii) for (slii.toFirst();(lii=slii.current());++slii)
{ {
...@@ -665,9 +665,9 @@ int Definition::getSpecialListId(const char *listName) const ...@@ -665,9 +665,9 @@ int Definition::getSpecialListId(const char *listName) const
return -1; return -1;
} }
const QList<ListItemInfo> *Definition::specialListItems() const const QList<ListItemInfo> *Definition::xrefListItems() const
{ {
return m_specialListItems; return m_xrefListItems;
} }
......
...@@ -39,7 +39,8 @@ class Definition ...@@ -39,7 +39,8 @@ class Definition
/*! Types of derived classes */ /*! Types of derived classes */
enum DefType enum DefType
{ {
TypeClass, TypeMember, TypeFile, TypeGroup, TypeNamespace, TypePackage TypeClass, TypeMember, TypeFile, TypeGroup,
TypeNamespace, TypePackage, TypePage
}; };
/*! Use this for dynamic inspection of the derived class */ /*! Use this for dynamic inspection of the derived class */
virtual DefType definitionType() = 0; virtual DefType definitionType() = 0;
...@@ -114,8 +115,7 @@ class Definition ...@@ -114,8 +115,7 @@ class Definition
//int bugId() const { return m_bugId; } //int bugId() const { return m_bugId; }
void setRefItems(const QList<ListItemInfo> *sli); void setRefItems(const QList<ListItemInfo> *sli);
void mergeRefItems(Definition *d); void mergeRefItems(Definition *d);
int getSpecialListId(const char *listName) const; const QList<ListItemInfo> *xrefListItems() const;
const QList<ListItemInfo> *specialListItems() const;
/*! returns the file in which this definition was found */ /*! returns the file in which this definition was found */
QCString getDefFileName() const { return m_defFileName; } QCString getDefFileName() const { return m_defFileName; }
...@@ -154,6 +154,7 @@ class Definition ...@@ -154,6 +154,7 @@ class Definition
private: private:
int getXRefListId(const char *listName) const;
void writeSourceRefList(OutputList &ol,const char *scopeName, void writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members,bool); const QCString &text,MemberSDict *members,bool);
//QCString m_qualifiedName; // name of the definition //QCString m_qualifiedName; // name of the definition
...@@ -171,7 +172,7 @@ class Definition ...@@ -171,7 +172,7 @@ class Definition
QCString m_docFile; QCString m_docFile;
int m_briefLine; int m_briefLine;
QCString m_briefFile; QCString m_briefFile;
QList<ListItemInfo> *m_specialListItems; QList<ListItemInfo> *m_xrefListItems;
}; };
class DefinitionList : public QList<Definition> class DefinitionList : public QList<Definition>
......
...@@ -62,6 +62,7 @@ static uint protToMask(Protection p) ...@@ -62,6 +62,7 @@ static uint protToMask(Protection p)
switch(p) switch(p)
{ {
case Public: return 0xffffffff; case Public: return 0xffffffff;
case Package: // package is not possible!
case Protected: return 0xcccccccc; case Protected: return 0xcccccccc;
case Private: return 0xaaaaaaaa; case Private: return 0xaaaaaaaa;
} }
...@@ -73,6 +74,7 @@ static uint protToColor(Protection p) ...@@ -73,6 +74,7 @@ static uint protToColor(Protection p)
switch(p) switch(p)
{ {
case Public: return 6; case Public: return 6;
case Package: // package is not possible!
case Protected: return 5; case Protected: return 5;
case Private: return 4; case Private: return 4;
} }
...@@ -84,6 +86,7 @@ static QCString protToString(Protection p) ...@@ -84,6 +86,7 @@ static QCString protToString(Protection p)
switch(p) switch(p)
{ {
case Public: return "solid"; case Public: return "solid";
case Package: // package is not possible!
case Protected: return "dashed"; case Protected: return "dashed";
case Private: return "dotted"; case Private: return "dotted";
} }
......
...@@ -1361,15 +1361,23 @@ void DocCopy::parse() ...@@ -1361,15 +1361,23 @@ void DocCopy::parse()
void DocXRefItem::parse() void DocXRefItem::parse()
{ {
QString listName; QString listName;
switch(m_type) //switch(m_type)
{ //{
case Bug: listName="bug"; break; // case Bug: listName="bug"; break;
case Test: listName="test"; break; // case Test: listName="test"; break;
case Todo: listName="todo"; break; // case Todo: listName="todo"; break;
case Deprecated: listName="deprecated"; break; // case Deprecated: listName="deprecated"; break;
} //}
RefList *refList = Doxygen::specialLists->find(listName); RefList *refList = Doxygen::xrefLists->find(m_key);
if (Config_getBool(refList->optionName())) // list is enabled 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); RefItem *item = refList->getRefItem(m_id);
ASSERT(item!=0); ASSERT(item!=0);
...@@ -3116,15 +3124,15 @@ int DocPara::handleParamSection(const QString &cmdName,DocParamSect::Type t) ...@@ -3116,15 +3124,15 @@ int DocPara::handleParamSection(const QString &cmdName,DocParamSect::Type t)
return (rv!=TK_NEWPARA) ? rv : RetVal_OK; return (rv!=TK_NEWPARA) ? rv : RetVal_OK;
} }
int DocPara::handleXRefItem(DocXRefItem::Type t) int DocPara::handleXRefItem()
{ {
int retval=doctokenizerYYlex(); int retval=doctokenizerYYlex();
ASSERT(retval==TK_WHITESPACE); ASSERT(retval==TK_WHITESPACE);
doctokenizerYYsetStateXRefItem(); doctokenizerYYsetStateXRefItem();
retval=doctokenizerYYlex(); 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); m_children.append(ref);
ref->parse(); ref->parse();
} }
...@@ -3601,17 +3609,8 @@ int DocPara::handleCommand(const QString &cmdName) ...@@ -3601,17 +3609,8 @@ int DocPara::handleCommand(const QString &cmdName)
case CMD_EXCEPTION: case CMD_EXCEPTION:
retval = handleParamSection(cmdName,DocParamSect::Exception); retval = handleParamSection(cmdName,DocParamSect::Exception);
break; break;
case CMD_BUG: case CMD_XREFITEM:
retval = handleXRefItem(DocXRefItem::Bug); retval = handleXRefItem();
break;
case CMD_TODO:
retval = handleXRefItem(DocXRefItem::Todo);
break;
case CMD_TEST:
retval = handleXRefItem(DocXRefItem::Test);
break;
case CMD_DEPRECATED:
retval = handleXRefItem(DocXRefItem::Deprecated);
break; break;
case CMD_LINEBREAK: case CMD_LINEBREAK:
{ {
...@@ -3801,6 +3800,12 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag ...@@ -3801,6 +3800,12 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
case HTML_EMPHASIS: case HTML_EMPHASIS:
handleStyleEnter(this,m_children,DocStyleChange::Italic,&g_token->attribs); handleStyleEnter(this,m_children,DocStyleChange::Italic,&g_token->attribs);
break; 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: case HTML_SUB:
handleStyleEnter(this,m_children,DocStyleChange::Subscript,&g_token->attribs); handleStyleEnter(this,m_children,DocStyleChange::Subscript,&g_token->attribs);
break; break;
...@@ -4029,6 +4034,12 @@ int DocPara::handleHtmlEndTag(const QString &tagName) ...@@ -4029,6 +4034,12 @@ int DocPara::handleHtmlEndTag(const QString &tagName)
case HTML_EMPHASIS: case HTML_EMPHASIS:
handleStyleLeave(this,m_children,DocStyleChange::Italic,"em"); handleStyleLeave(this,m_children,DocStyleChange::Italic,"em");
break; 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: case HTML_SUB:
handleStyleLeave(this,m_children,DocStyleChange::Subscript,"sub"); handleStyleLeave(this,m_children,DocStyleChange::Subscript,"sub");
break; break;
......
...@@ -532,11 +532,11 @@ class DocTitle : public CompAccept<DocTitle>, public DocNode ...@@ -532,11 +532,11 @@ class DocTitle : public CompAccept<DocTitle>, public DocNode
class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
{ {
public: public:
enum Type { Bug, Test, Todo, Deprecated }; //enum Type { Bug, Test, Todo, Deprecated };
DocXRefItem(DocNode *parent,int id,Type t) : DocXRefItem(DocNode *parent,int id,const char *key) :
m_parent(parent), m_id(id), m_type(t) {} m_parent(parent), m_id(id), m_key(key) /*, m_type(t)*/ {}
Kind kind() const { return Kind_XRefItem; } 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 file() const { return m_file; }
QString anchor() const { return m_anchor; } QString anchor() const { return m_anchor; }
QString title() const { return m_title; } QString title() const { return m_title; }
...@@ -547,7 +547,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode ...@@ -547,7 +547,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
private: private:
DocNode *m_parent; DocNode *m_parent;
int m_id; int m_id;
Type m_type; QString m_key;
QString m_file; QString m_file;
QString m_anchor; QString m_anchor;
QString m_title; QString m_title;
...@@ -927,7 +927,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode ...@@ -927,7 +927,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode
int handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tagHtmlAttribs); int handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tagHtmlAttribs);
int handleHtmlEndTag(const QString &tagName); int handleHtmlEndTag(const QString &tagName);
int handleSimpleSection(DocSimpleSect::Type t); int handleSimpleSection(DocSimpleSect::Type t);
int handleXRefItem(DocXRefItem::Type t); int handleXRefItem();
int handleParamSection(const QString &cmdName,DocParamSect::Type t); int handleParamSection(const QString &cmdName,DocParamSect::Type t);
void handleIncludeOperator(const QString &cmdName,DocIncOperator::Type t); void handleIncludeOperator(const QString &cmdName,DocIncOperator::Type t);
void handleImage(const QString &cmdName); void handleImage(const QString &cmdName);
......
...@@ -314,6 +314,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -314,6 +314,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
%x St_Verbatim %x St_Verbatim
%x St_Param %x St_Param
%x St_XRefItem %x St_XRefItem
%x St_XRefItem2
%x St_File %x St_File
%x St_Pattern %x St_Pattern
%x St_Link %x St_Link
...@@ -651,7 +652,13 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* ...@@ -651,7 +652,13 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
<St_Ref2>"\""|\n { /* " or \n => end of title */ <St_Ref2>"\""|\n { /* " or \n => end of title */
return 0; 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; QString numStr=yytext;
numStr=numStr.left(yyleng-1); numStr=numStr.left(yyleng-1);
g_token->id=numStr.toInt(); g_token->id=numStr.toInt();
......
...@@ -46,12 +46,36 @@ static const char *edgeColorMap[] = ...@@ -46,12 +46,36 @@ static const char *edgeColorMap[] =
"orange" // template relation "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[] = static const char *edgeStyleMap[] =
{ {
"solid", // inheritance "solid", // inheritance
"dashed" // usage "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 /*! converts the rectangles in a server site image map into a client
* site image map. * site image map.
* \param t the stream to which the result is written. * \param t the stream to which the result is written.
...@@ -382,14 +406,20 @@ static QCString convertLabel(const QCString &l) ...@@ -382,14 +406,20 @@ static QCString convertLabel(const QCString &l)
char c; char c;
while ((c=*p++)) while ((c=*p++))
{ {
if (c=='\\') result+="\\\\"; switch(c)
else result+=c; {
case '\\': result+="\\\\"; break;
case '<': result+="\\<"; break;
case '>': result+="\\>"; break;
case '|': result+="\\|"; break;
default: result+=c; break;
}
} }
return result; return result;
} }
void DotNode::writeBox(QTextStream &t, void DotNode::writeBox(QTextStream &t,
GraphOutputFormat format, GraphOutputFormat /*format*/,
bool hasNonReachableChildren) bool hasNonReachableChildren)
{ {
const char *labCol = const char *labCol =
...@@ -397,10 +427,10 @@ void DotNode::writeBox(QTextStream &t, ...@@ -397,10 +427,10 @@ void DotNode::writeBox(QTextStream &t,
( (
(hasNonReachableChildren) ? "red" : "black" (hasNonReachableChildren) ? "red" : "black"
); );
t << " Node" << m_number << " [shape=\"box\",label=\"" t << " Node" << m_number << " [label=\""
<< convertLabel(m_label) << convertLabel(m_label)
<< "\",fontsize=10,height=0.2,width=0.4"; << "\",height=0.2,width=0.4";
if (format==BITMAP) t << ",fontname=\"Helvetica\""; //if (format==BITMAP) t << ",fontname=\"Helvetica\"";
t << ",color=\"" << labCol << "\""; t << ",color=\"" << labCol << "\"";
if (m_isRoot) if (m_isRoot)
{ {
...@@ -433,6 +463,10 @@ void DotNode::writeArrow(QTextStream &t, ...@@ -433,6 +463,10 @@ void DotNode::writeArrow(QTextStream &t,
{ {
t << ",label=\"" << ei->m_label << "\""; 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\""; if (format==BITMAP) t << ",fontname=\"Helvetica\"";
t << "];" << endl; t << "];" << endl;
} }
...@@ -768,8 +802,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) ...@@ -768,8 +802,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
QFile f(dotName); QFile f(dotName);
if (!f.open(IO_WriteOnly)) return; if (!f.open(IO_WriteOnly)) return;
QTextStream t(&f); QTextStream t(&f);
t << "digraph inheritance" << endl; writeGraphHeader(t);
t << "{" << endl;
t << " rankdir=LR;" << endl; t << " rankdir=LR;" << endl;
QListIterator<DotNode> dnli2(*m_rootNodes); QListIterator<DotNode> dnli2(*m_rootNodes);
DotNode *node; DotNode *node;
...@@ -778,7 +811,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) ...@@ -778,7 +811,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
if (node->m_subgraphId==n->m_subgraphId) if (node->m_subgraphId==n->m_subgraphId)
node->write(t,BITMAP,FALSE,TRUE,1000,TRUE); node->write(t,BITMAP,FALSE,TRUE,1000,TRUE);
} }
t << "}" << endl; writeGraphFooter(t);
f.close(); f.close();
QCString dotArgs(maxCmdLine); QCString dotArgs(maxCmdLine);
...@@ -1203,8 +1236,7 @@ void writeDotGraph(DotNode *root, ...@@ -1203,8 +1236,7 @@ void writeDotGraph(DotNode *root,
if (f.open(IO_WriteOnly)) if (f.open(IO_WriteOnly))
{ {
QTextStream t(&f); QTextStream t(&f);
t << "digraph inheritance" << endl; writeGraphHeader(t);
t << "{" << endl;
if (lrRank) if (lrRank)
{ {
t << " rankdir=LR;" << endl; t << " rankdir=LR;" << endl;
...@@ -1231,7 +1263,7 @@ void writeDotGraph(DotNode *root, ...@@ -1231,7 +1263,7 @@ void writeDotGraph(DotNode *root,
pn->write(t,format,TRUE,FALSE,distance,backArrows); pn->write(t,format,TRUE,FALSE,distance,backArrows);
} }
} }
t << "}" << endl; writeGraphFooter(t);
f.close(); f.close();
} }
} }
...@@ -1725,8 +1757,7 @@ void generateGraphLegend(const char *path) ...@@ -1725,8 +1757,7 @@ void generateGraphLegend(const char *path)
return; return;
} }
QTextStream dotText(&dotFile); QTextStream dotText(&dotFile);
dotText << "digraph inheritance\n"; writeGraphHeader(dotText);
dotText << "{\n";
dotText << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n"; 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 -> 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"; 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) ...@@ -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 << " 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 -> 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 << " 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(); dotFile.close();
QDir d(path); QDir d(path);
......
...@@ -112,7 +112,7 @@ bool Doxygen::insideMainPage = FALSE; // are we generating docs for th ...@@ -112,7 +112,7 @@ bool Doxygen::insideMainPage = FALSE; // are we generating docs for th
QTextStream Doxygen::tagFile; QTextStream Doxygen::tagFile;
NamespaceDef *Doxygen::globalScope = new NamespaceDef("<globalScope>",1,"<globalScope>"); 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; static StringList inputFiles;
...@@ -2985,6 +2985,12 @@ static void findUsedClassesForClass(Entry *root, ...@@ -2985,6 +2985,12 @@ static void findUsedClassesForClass(Entry *root,
QCString typeName = resolveTypeDef(masterCd,usedClassName); QCString typeName = resolveTypeDef(masterCd,usedClassName);
//printf("Found resolved class %s\n",typeName.data()); //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 // add any template arguments to the class
QCString usedName = usedClassName+templSpec; QCString usedName = usedClassName+templSpec;
...@@ -3341,96 +3347,6 @@ static bool findClassRelation( ...@@ -3341,96 +3347,6 @@ static bool findClassRelation(
// cd->name().data(),baseClassName.data(),baseClass); // cd->name().data(),baseClassName.data(),baseClass);
found = baseClass!=0 && baseClass!=cd; 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; bool isATemplateArgument = templateNames!=0 && templateNames->find(biName)!=0;
if (found) if (found)
...@@ -3832,7 +3748,7 @@ static void addListReferences() ...@@ -3832,7 +3748,7 @@ static void addListReferences()
{ {
name = pi->getGroupDef()->getOutputFileBase().copy(); name = pi->getGroupDef()->getOutputFileBase().copy();
} }
addRefItem(pi->specialListItems, addRefItem(pi->xrefListItems,
theTranslator->trPage(TRUE,TRUE), theTranslator->trPage(TRUE,TRUE),
name,pi->title); name,pi->title);
} }
...@@ -5020,9 +4936,11 @@ static void findMemberDocumentation(Entry *root) ...@@ -5020,9 +4936,11 @@ static void findMemberDocumentation(Entry *root)
(i=findFunctionPtr(root->type,&l))!=-1 (i=findFunctionPtr(root->type,&l))!=-1
) )
{ {
//printf("Fixing function pointer!\n");
// fix type and argument // 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); 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; isFunc=FALSE;
} }
else if ((root->type.left(8)=="typedef " && root->args.find('(')!=-1)) else if ((root->type.left(8)=="typedef " && root->args.find('(')!=-1))
...@@ -5037,8 +4955,15 @@ static void findMemberDocumentation(Entry *root) ...@@ -5037,8 +4955,15 @@ static void findMemberDocumentation(Entry *root)
//printf("Documentation for inline member `%s' found args=`%s'\n", //printf("Documentation for inline member `%s' found args=`%s'\n",
// root->name.data(),root->args.data()); // root->name.data(),root->args.data());
//if (root->relates.length()) printf(" Relates %s\n",root->relates.data()); //if (root->relates.length()) printf(" Relates %s\n",root->relates.data());
if (root->type.isEmpty())
{
findMember(root,root->name+root->args+root->exception,FALSE,isFunc); 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) else if (root->section==Entry::OVERLOADDOC_SEC)
{ {
//printf("Overloaded member %s found\n",root->name.data()); //printf("Overloaded member %s found\n",root->name.data());
...@@ -6171,7 +6096,7 @@ static void resolveUserReferences() ...@@ -6171,7 +6096,7 @@ static void resolveUserReferences()
// name (not from the todo/test/bug/deprecated list, but from the file in // 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 // which they are defined). We correct this here by looking at the
// generated section labels! // generated section labels!
QDictIterator<RefList> rli(*Doxygen::specialLists); QDictIterator<RefList> rli(*Doxygen::xrefLists);
RefList *rl; RefList *rl;
for (rli.toFirst();(rl=rli.current());++rli) for (rli.toFirst();(rl=rli.current());++rli)
{ {
...@@ -7168,7 +7093,7 @@ void cleanUpDoxygen() ...@@ -7168,7 +7093,7 @@ void cleanUpDoxygen()
delete Doxygen::pageSDict; delete Doxygen::pageSDict;
delete Doxygen::exampleSDict; delete Doxygen::exampleSDict;
delete Doxygen::globalScope; delete Doxygen::globalScope;
delete Doxygen::specialLists; delete Doxygen::xrefLists;
cleanUpPreprocessor(); cleanUpPreprocessor();
Config::deleteInstance(); Config::deleteInstance();
QTextCodec::deleteAllCodecs(); QTextCodec::deleteAllCodecs();
...@@ -7475,40 +7400,42 @@ void readConfiguration(int argc, char **argv) ...@@ -7475,40 +7400,42 @@ void readConfiguration(int argc, char **argv)
QFileInfo configFileInfo(configName); QFileInfo configFileInfo(configName);
setPerlModDoxyfile(configFileInfo.absFilePath()); setPerlModDoxyfile(configFileInfo.absFilePath());
Doxygen::xrefLists->setAutoDelete(TRUE);
#if 0
/* init the special lists */ /* init the special lists */
Doxygen::specialLists->setAutoDelete(TRUE);
Doxygen::specialLists->insert("todo", Doxygen::specialLists->insert("todo",
new RefList("todo", new RefList("todo",
"GENERATE_TODOLIST", "GENERATE_TODOLIST",
theTranslator->trTodoList(), theTranslator->trTodoList(),
theTranslator->trTodo(), theTranslator->trTodo()
BaseOutputDocInterface::Todo //,BaseOutputDocInterface::Todo
) )
); );
Doxygen::specialLists->insert("test", Doxygen::specialLists->insert("test",
new RefList("test", new RefList("test",
"GENERATE_TESTLIST", "GENERATE_TESTLIST",
theTranslator->trTestList(), theTranslator->trTestList(),
theTranslator->trTest(), theTranslator->trTest()
BaseOutputDocInterface::Test //,BaseOutputDocInterface::Test
) )
); );
Doxygen::specialLists->insert("bug", Doxygen::specialLists->insert("bug",
new RefList("bug", new RefList("bug",
"GENERATE_BUGLIST", "GENERATE_BUGLIST",
theTranslator->trBugList(), theTranslator->trBugList(),
theTranslator->trBug(), theTranslator->trBug()
BaseOutputDocInterface::Bug //,BaseOutputDocInterface::Bug
) )
); );
Doxygen::specialLists->insert("deprecated", Doxygen::specialLists->insert("deprecated",
new RefList("deprecated", new RefList("deprecated",
"GENERATE_DEPRECATEDLIST", "GENERATE_DEPRECATEDLIST",
theTranslator->trDeprecatedList(), theTranslator->trDeprecatedList(),
theTranslator->trDeprecated(), theTranslator->trDeprecated()
BaseOutputDocInterface::Deprecated //,BaseOutputDocInterface::Deprecated
) )
); );
#endif
} }
......
...@@ -91,7 +91,7 @@ class Doxygen ...@@ -91,7 +91,7 @@ class Doxygen
static QIntDict<MemberGroupInfo> memGrpInfoDict; static QIntDict<MemberGroupInfo> memGrpInfoDict;
static QDict<void> expandAsDefinedDict; static QDict<void> expandAsDefinedDict;
static NamespaceDef *globalScope; static NamespaceDef *globalScope;
static QDict<RefList> *specialLists; // array of special lists: todo, test, bug, deprecated ... static QDict<RefList> *xrefLists; // array of xref lists: todo, test, bug, deprecated ...
static QCString htmlFileExtension; static QCString htmlFileExtension;
}; };
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#include "qtbc.h" #include "qtbc.h"
#include <qlist.h> #include <qlist.h>
enum Protection { Public, Protected, Private } ; enum Protection { Public, Protected, Private, Package } ;
enum Specifier { Normal, Virtual, Pure } ; enum Specifier { Normal, Virtual, Pure } ;
enum MethodTypes { Method, Signal, Slot, DCOP, Property, Event }; enum MethodTypes { Method, Signal, Slot, DCOP, Property, Event };
......
...@@ -734,7 +734,7 @@ bool FileDef::generateSourceFile() const ...@@ -734,7 +734,7 @@ bool FileDef::generateSourceFile() const
void FileDef::addListReferences() void FileDef::addListReferences()
{ {
addRefItem(specialListItems(), addRefItem(xrefListItems(),
theTranslator->trFile(TRUE,TRUE), theTranslator->trFile(TRUE,TRUE),
getOutputFileBase(),name() getOutputFileBase(),name()
); );
......
...@@ -783,7 +783,7 @@ QCString GroupDef::getOutputFileBase() const ...@@ -783,7 +783,7 @@ QCString GroupDef::getOutputFileBase() const
void GroupDef::addListReferences() void GroupDef::addListReferences()
{ {
addRefItem(specialListItems(), addRefItem(xrefListItems(),
theTranslator->trGroup(TRUE,TRUE), theTranslator->trGroup(TRUE,TRUE),
getOutputFileBase(),name() getOutputFileBase(),name()
); );
......
...@@ -272,6 +272,11 @@ void HtmlDocVisitor::visit(DocFormula *f) ...@@ -272,6 +272,11 @@ void HtmlDocVisitor::visit(DocFormula *f)
m_t << "\"middle\""; // assume Windows users use IE or HtmlHelp which on m_t << "\"middle\""; // assume Windows users use IE or HtmlHelp which on
// displays formulas nicely with align == "middle" // displays formulas nicely with align == "middle"
#endif #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\">"; m_t << " src=\"" << f->name() << ".png\">";
if (f->text().at(0)=='\\') if (f->text().at(0)=='\\')
m_t << endl << "</center><p>" << endl; m_t << endl << "</center><p>" << endl;
...@@ -921,6 +926,43 @@ void HtmlDocVisitor::filter(const char *str) ...@@ -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) void HtmlDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor)
{ {
QCString *dest; QCString *dest;
......
...@@ -133,6 +133,7 @@ class HtmlDocVisitor : public DocVisitor ...@@ -133,6 +133,7 @@ class HtmlDocVisitor : public DocVisitor
//-------------------------------------- //--------------------------------------
void filter(const char *str); void filter(const char *str);
void filterQuotedCdataAttr(const char* str);
void startLink(const QString &ref,const QString &file, void startLink(const QString &ref,const QString &file,
const QString &anchor); const QString &anchor);
void endLink(); void endLink();
......
...@@ -214,11 +214,17 @@ void HtmlGenerator::startFile(const char *name,const char *, ...@@ -214,11 +214,17 @@ void HtmlGenerator::startFile(const char *name,const char *,
{ {
HtmlHelp::getInstance()->addIndexFile(fileName); HtmlHelp::getInstance()->addIndexFile(fileName);
} }
QCString dispTitle = title;
QCString projName = Config_getString("PROJECT_NAME");
if (!projName.isEmpty())
{
dispTitle.prepend(projName+": ");
}
lastFile = fileName; lastFile = fileName;
if (g_header.isEmpty()) if (g_header.isEmpty())
{ {
writeDefaultHeaderFile(t,title,external); writeDefaultHeaderFile(t,dispTitle,external);
} }
else else
{ {
......
...@@ -66,6 +66,7 @@ HEADERS = bufstr.h \ ...@@ -66,6 +66,7 @@ HEADERS = bufstr.h \
outputgen.h \ outputgen.h \
outputlist.h \ outputlist.h \
page.h \ page.h \
pagedef.h \
perlmodgen.h \ perlmodgen.h \
pngenc.h \ pngenc.h \
pre.h \ pre.h \
...@@ -161,6 +162,7 @@ SOURCES = ce_lex.cpp \ ...@@ -161,6 +162,7 @@ SOURCES = ce_lex.cpp \
namespacedef.cpp \ namespacedef.cpp \
outputgen.cpp \ outputgen.cpp \
outputlist.cpp \ outputlist.cpp \
pagedef.cpp \
perlmodgen.cpp \ perlmodgen.cpp \
pngenc.cpp \ pngenc.cpp \
pre.cpp \ pre.cpp \
......
...@@ -684,6 +684,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -684,6 +684,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
{ {
Doxygen::tagFile << "\" protection=\""; Doxygen::tagFile << "\" protection=\"";
if (prot==Protected) Doxygen::tagFile << "public"; if (prot==Protected) Doxygen::tagFile << "public";
else if (prot==Package) Doxygen::tagFile << "package";
else /* Private */ Doxygen::tagFile << "protected"; else /* Private */ Doxygen::tagFile << "protected";
} }
if (virt!=Normal) if (virt!=Normal)
...@@ -1226,6 +1227,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1226,6 +1227,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (isSettable()) sl.append("set"); if (isSettable()) sl.append("set");
if (protection()==Protected) sl.append("protected"); if (protection()==Protected) sl.append("protected");
else if (protection()==Private) sl.append("private"); else if (protection()==Private) sl.append("private");
else if (protection()==Package) sl.append("package");
if (lvirt==Virtual) sl.append("virtual"); if (lvirt==Virtual) sl.append("virtual");
else if (lvirt==Pure) sl.append("pure virtual"); else if (lvirt==Pure) sl.append("pure virtual");
if (isSignal()) sl.append("signal"); if (isSignal()) sl.append("signal");
...@@ -1811,7 +1813,7 @@ void MemberDef::addListReference(Definition *d) ...@@ -1811,7 +1813,7 @@ void MemberDef::addListReference(Definition *d)
} }
} }
//printf("*** addListReference %s todo=%d test=%d bug=%d\n",name().data(),todoId(),testId(),bugId()); //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()); d->getOutputFileBase()+"#"+anchor(),memName,argsString());
} }
......
...@@ -390,7 +390,7 @@ Definition *NamespaceDef::findInnerCompound(const char *n) ...@@ -390,7 +390,7 @@ Definition *NamespaceDef::findInnerCompound(const char *n)
void NamespaceDef::addListReferences() void NamespaceDef::addListReferences()
{ {
addRefItem(specialListItems(), addRefItem(xrefListItems(),
theTranslator->trNamespace(TRUE,TRUE), theTranslator->trNamespace(TRUE,TRUE),
getOutputFileBase(),displayName() getOutputFileBase(),displayName()
); );
......
...@@ -78,11 +78,11 @@ class BaseOutputDocInterface : public BaseCodeDocInterface ...@@ -78,11 +78,11 @@ class BaseOutputDocInterface : public BaseCodeDocInterface
{ {
public: public:
enum ParamListTypes { Param, RetVal, Exception }; enum ParamListTypes { Param, RetVal, Exception };
enum SectionTypes { See, Return, Author, Version, enum SectionTypes { /*See, Return, Author, Version,
Since, Date, Bug, Note, Since, Date, Bug, Note,
Warning, Par, Deprecated, Pre, Warning, Par, Deprecated, Pre,
Post, Invar, Remark, Attention, Post, Invar, Remark, Attention,
Todo, Test, RCS, EnumValues, Todo, Test, RCS, */ EnumValues,
Examples Examples
}; };
......
...@@ -27,7 +27,7 @@ class PageInfo ...@@ -27,7 +27,7 @@ class PageInfo
public: public:
PageInfo(const char *f, int l,const char *n,const char *d,const char *t) : PageInfo(const char *f, int l,const char *n,const char *d,const char *t) :
defFileName(f), defLine(l), name(n), 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); sectionDict = new SectionDict(17);
} }
...@@ -111,7 +111,7 @@ class PageInfo ...@@ -111,7 +111,7 @@ class PageInfo
// is this page part of a group // is this page part of a group
SectionDict *sectionDict; SectionDict *sectionDict;
QList<ListItemInfo> *specialListItems; QList<ListItemInfo> *xrefListItems;
private: private:
GroupDef *m_inGroup; GroupDef *m_inGroup;
......
#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()
{
}
/******************************************************************************
*
*
*
* 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());
}
};
...@@ -1290,6 +1290,7 @@ static const char *getProtectionName(Protection prot) ...@@ -1290,6 +1290,7 @@ static const char *getProtectionName(Protection prot)
case Public: return "public"; case Public: return "public";
case Protected: return "protected"; case Protected: return "protected";
case Private: return "private"; case Private: return "private";
case Package: return "package";
} }
return 0; return 0;
} }
......
...@@ -20,22 +20,22 @@ ...@@ -20,22 +20,22 @@
/*! Create a list of items that are cross referenced with documentation blocks /*! Create a list of items that are cross referenced with documentation blocks
* @param listName String representing the name of the list. * @param listName String representing the name of the list.
* @param optionName String representation of the option enabling the list.
* @param pageTitle String representing the title of the list page. * @param pageTitle String representing the title of the list page.
* @param secTitle String representing the title of the section. * @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, RefList::RefList(const char *listName,
const char *secTitle,BaseOutputDocInterface::SectionTypes type) const char *pageTitle,
const char *secTitle
)
{ {
m_dict = 0; m_dict = 0;
m_dictIterator = 0; m_dictIterator = 0;
m_id = 0; m_id = 0;
m_listName = listName; m_listName = listName;
m_optionName = optionName; //m_optionName = optionName;
m_pageTitle = pageTitle; m_pageTitle = pageTitle;
m_secTitle = secTitle; m_secTitle = secTitle;
m_type = type; /*m_type = type;*/
} }
/*! Destroy the todo list. Currently not called! */ /*! Destroy the todo list. Currently not called! */
...@@ -95,10 +95,10 @@ QCString RefList::listName() const ...@@ -95,10 +95,10 @@ QCString RefList::listName() const
return m_listName; return m_listName;
} }
QCString RefList::optionName() const //QCString RefList::optionName() const
{ //{
return m_optionName; // return m_optionName;
} //}
QCString RefList::pageTitle() const QCString RefList::pageTitle() const
{ {
...@@ -110,8 +110,10 @@ QCString RefList::sectionTitle() const ...@@ -110,8 +110,10 @@ QCString RefList::sectionTitle() const
return m_secTitle; return m_secTitle;
} }
BaseOutputDocInterface::SectionTypes RefList::sectionType() const
{ //BaseOutputDocInterface::SectionTypes RefList::sectionType() const
return m_type; //{
} // return m_type;
//}
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#include "qtbc.h" #include "qtbc.h"
#include <qintdict.h> #include <qintdict.h>
#include "outputgen.h" //#include "outputgen.h"
/*! This struct represents an item in the list of references. */ /*! This struct represents an item in the list of references. */
struct RefItem struct RefItem
...@@ -50,26 +50,26 @@ class RefList ...@@ -50,26 +50,26 @@ class RefList
RefItem *getFirstRefItem(); RefItem *getFirstRefItem();
RefItem *getNextRefItem(); RefItem *getNextRefItem();
QCString listName() const; QCString listName() const;
QCString optionName() const; //QCString optionName() const;
QCString pageTitle() const; QCString pageTitle() const;
QCString sectionTitle() const; QCString sectionTitle() const;
BaseOutputDocInterface::SectionTypes sectionType() const; //BaseOutputDocInterface::SectionTypes sectionType() const;
RefList(const char *listName,const char *optionName, RefList(const char *listName,
const char *pageTitle,const char *secTitle, const char *pageTitle,const char *secTitle
BaseOutputDocInterface::SectionTypes type /*,BaseOutputDocInterface::SectionTypes type*/
); );
~RefList(); ~RefList();
private: private:
int m_id; int m_id;
QCString m_listName; QCString m_listName;
QCString m_optionName; //QCString m_optionName;
QCString m_pageTitle; QCString m_pageTitle;
QCString m_secTitle; QCString m_secTitle;
QIntDict<RefItem> *m_dict; QIntDict<RefItem> *m_dict;
QIntDictIterator<RefItem> *m_dictIterator; QIntDictIterator<RefItem> *m_dictIterator;
BaseOutputDocInterface::SectionTypes m_type; //BaseOutputDocInterface::SectionTypes m_type;
}; };
#endif #endif
...@@ -153,6 +153,9 @@ static int depthIf; ...@@ -153,6 +153,9 @@ static int depthIf;
static int initializerSharpCount; static int initializerSharpCount;
static QCString memberGroupRelates; static QCString memberGroupRelates;
static QCString memberGroupInside; static QCString memberGroupInside;
static QCString xrefItemKey;
static QCString xrefItemTitle;
static QCString xrefListTitle;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -185,6 +188,7 @@ static void initParser() ...@@ -185,6 +188,7 @@ static void initParser()
static void initEntry() static void initEntry()
{ {
if (insideJava) protection = Package;
current->protection = protection ; current->protection = protection ;
current->mtype = mtype; current->mtype = mtype;
current->virt = virt; current->virt = virt;
...@@ -281,39 +285,17 @@ static void newDocState(); ...@@ -281,39 +285,17 @@ static void newDocState();
//----------------------------------------------------------------- //-----------------------------------------------------------------
#if 0 static void addXRefItem(const char *listName,const char *itemTitle,const char *listTitle)
static void addSection()
{ {
//printf("New section pageName=%s label=%s title=%s\n", if (listName==0) return;
// 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
static void addSpecialItem(const char *listName)
{
ListItemInfo *lii=0; ListItemInfo *lii=0;
RefList *refList = Doxygen::specialLists->find(listName); RefList *refList = Doxygen::xrefLists->find(listName);
ASSERT(refList!=0); if (refList==0) // new list
{
refList = new RefList(listName,listTitle,itemTitle);
Doxygen::xrefLists->insert(listName,refList);
}
if (current->sli) if (current->sli)
{ {
QListIterator<ListItemInfo> slii(*current->sli); QListIterator<ListItemInfo> slii(*current->sli);
...@@ -341,22 +323,12 @@ static void addSpecialItem(const char *listName) ...@@ -341,22 +323,12 @@ static void addSpecialItem(const char *listName)
item->listAnchor = anchorLabel; item->listAnchor = anchorLabel;
current->addSpecialListItem(listName,itemId); current->addSpecialListItem(listName,itemId);
QCString cmdString; QCString cmdString;
cmdString.sprintf("\\%s %d\n",listName,itemId); cmdString.sprintf("\\xrefitem %s %d\n",listName,itemId);
current->doc += cmdString; current->doc += cmdString;
//current->doc += (QCString)"\\anchor "+anchorLabel+"\n";
SectionInfo *si=new SectionInfo(listName,anchorLabel, SectionInfo *si=new SectionInfo(listName,anchorLabel,
sectionTitle,SectionInfo::Anchor); sectionTitle,SectionInfo::Anchor);
Doxygen::sectionDict.insert(anchorLabel,si); Doxygen::sectionDict.insert(anchorLabel,si);
current->anchors->append(new QCString(anchorLabel)); 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. current->brief = slString.copy(); // restore orginial brief desc.
} }
...@@ -512,7 +484,7 @@ static int yyread(char *buf,int max_size) ...@@ -512,7 +484,7 @@ static int yyread(char *buf,int max_size)
/* start command character */ /* start command character */
CMD ("\\"|"@") 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] BN [ \t\n\r]
BL [ \t\r]*"\n" BL [ \t\r]*"\n"
B [ \t] B [ \t]
...@@ -563,6 +535,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -563,6 +535,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x Operator %x Operator
%x Array %x Array
%x ReadBody %x ReadBody
%x ReadNSBody
%x Using %x Using
%x UsingDirective %x UsingDirective
%x NameSpaceDocArg1 %x NameSpaceDocArg1
...@@ -642,6 +615,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -642,6 +615,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x TestParam %x TestParam
%x BugParam %x BugParam
%x DeprecatedParam %x DeprecatedParam
%x XRefItemParam1
%x XRefItemParam2
%x XRefItemParam3
%x XRefItemParam4
%x SectionLabel %x SectionLabel
%x SectionTitle %x SectionTitle
%x SkipTemplate %x SkipTemplate
...@@ -1126,15 +1103,17 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -1126,15 +1103,17 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
} }
<NSAliasArg>({ID}"::")*{ID} { <NSAliasArg>({ID}"::")*{ID} {
//printf("Inserting namespace alias %s::%s->%s\n",current_root->name.data(),aliasName.data(),yytext); //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)); Doxygen::namespaceAliasDict.insert(aliasName,new QCString(yytext));
} //}
else //else
{ //{
Doxygen::namespaceAliasDict.insert(current_root->name+"::"+aliasName, // Doxygen::namespaceAliasDict.insert(current_root->name+"::"+aliasName,
new QCString(current_root->name+"::"+yytext)); // new QCString(current_root->name+"::"+yytext));
} //}
} }
<NSAliasArg>";" { <NSAliasArg>";" {
BEGIN( FindMembers ); BEGIN( FindMembers );
...@@ -1386,7 +1365,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -1386,7 +1365,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->bodyLine = yyLineNr; current->bodyLine = yyLineNr;
BEGIN( Define ); 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]); yyLineNr = atoi(&yytext[1]);
//printf("setting line number to %d\n",yyLineNr); //printf("setting line number to %d\n",yyLineNr);
lastPreLineCtrlContext = YY_START; lastPreLineCtrlContext = YY_START;
...@@ -1905,31 +1884,31 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -1905,31 +1884,31 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
/* /*
<FindFieldArg>"," { unput(*yytext); BEGIN(FindFields); } <FindFieldArg>"," { unput(*yytext); BEGIN(FindFields); }
*/ */
<ReadBody>[^\r\n\#{}"'/]* { current->program += yytext ; } <ReadBody,ReadNSBody>[^\r\n\#{}"'/]* { current->program += yytext ; }
<ReadBody>"//".* { current->program += yytext ; } <ReadBody,ReadNSBody>"//".* { current->program += yytext ; }
<ReadBody>"#".* { if (! insidePHP) <ReadBody,ReadNSBody>"#".* { if (! insidePHP)
REJECT; REJECT;
current->program += yytext ; current->program += yytext ;
} }
<ReadBody>\" { current->program += yytext ; <ReadBody,ReadNSBody>\" { current->program += yytext ;
pCopyQuotedString = &current->program; pCopyQuotedString = &current->program;
lastStringContext=YY_START; lastStringContext=YY_START;
BEGIN( CopyString ); BEGIN( CopyString );
} }
<ReadBody>"/*"{B}* { current->program += yytext ; <ReadBody,ReadNSBody>"/*"{B}* { current->program += yytext ;
lastContext = ReadBody ; lastContext = ReadBody ;
BEGIN( Comment ) ; BEGIN( Comment ) ;
} }
<ReadBody>"/*"{BL} { current->program += yytext ; <ReadBody,ReadNSBody>"/*"{BL} { current->program += yytext ;
++yyLineNr ; ++yyLineNr ;
lastContext = ReadBody ; lastContext = ReadBody ;
BEGIN( Comment ) ; BEGIN( Comment ) ;
} }
<ReadBody>{CHARLIT} { current->program += yytext; } <ReadBody,ReadNSBody>{CHARLIT} { current->program += yytext; }
<ReadBody>"{" { current->program += yytext ; <ReadBody,ReadNSBody>"{" { current->program += yytext ;
++curlyCount ; ++curlyCount ;
} }
<ReadBody>"}" { //err("ReadBody count=%d\n",curlyCount); <ReadBody,ReadNSBody>"}" { //err("ReadBody count=%d\n",curlyCount);
if ( curlyCount>0 ) if ( curlyCount>0 )
{ {
current->program += yytext ; current->program += yytext ;
...@@ -1966,7 +1945,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -1966,7 +1945,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current = new Entry(*current); current = new Entry(*current);
if (current->section==Entry::NAMESPACE_SEC || if (current->section==Entry::NAMESPACE_SEC ||
current->section==Entry::INTERFACE_SEC || current->section==Entry::INTERFACE_SEC ||
insideJava || insidePHP insideJava || insidePHP || insideCS
) )
{ // namespaces and interfaces and java classes ends with a closing bracket without semicolon { // namespaces and interfaces and java classes ends with a closing bracket without semicolon
current->reset(); current->reset();
...@@ -2143,10 +2122,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2143,10 +2122,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
*/ */
<MemberSpecSkip>"," { BEGIN(MemberSpec); } <MemberSpecSkip>"," { BEGIN(MemberSpec); }
<MemberSpecSkip>";" { unput(';'); BEGIN(MemberSpec); } <MemberSpecSkip>";" { unput(';'); BEGIN(MemberSpec); }
<ReadBody>{BN}+ { current->program += yytext ; <ReadBody,ReadNSBody>{BN}+ { current->program += yytext ;
lineCount() ; 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}*"::")*{ID}{BN}*")"{BN}*"(" | /* typedef void (A::func_t)(args...) */
<FindMembers>("("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+)+ { /* typedef void (A::*ptr_t)(args...) */ <FindMembers>("("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+)+ { /* typedef void (A::*ptr_t)(args...) */
...@@ -2975,8 +2954,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2975,8 +2954,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->name.sprintf("@%d",anonCount++); current->name.sprintf("@%d",anonCount++);
} }
curlyCount=0; curlyCount=0;
if (current->section==Entry::NAMESPACE_SEC)
{
BEGIN( ReadNSBody );
}
else
{
BEGIN( ReadBody ) ; BEGIN( ReadBody ) ;
} }
}
<BasesProt>"virtual" { baseVirt = Virtual; } <BasesProt>"virtual" { baseVirt = Virtual; }
<BasesProt>"public" { baseProt = Public; } <BasesProt>"public" { baseProt = Public; }
<BasesProt>"protected" { baseProt = Protected; } <BasesProt>"protected" { baseProt = Protected; }
...@@ -3473,10 +3459,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3473,10 +3459,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
} }
<SkipHtmlComment>"--"[!]?">" { BEGIN(lastSkipHtmlCommentContext); } <SkipHtmlComment>"--"[!]?">" { BEGIN(lastSkipHtmlCommentContext); }
<SkipHtmlComment>. <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; 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; current->brief+=yytext;
} }
<AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"todo"/[^a-z_A-Z0-9] { <AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"todo"/[^a-z_A-Z0-9] {
...@@ -3507,11 +3493,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3507,11 +3493,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->brief.resize(0); current->brief.resize(0);
BEGIN(ClassDocBrief); 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>\n |
<TodoParam>"//" | <TodoParam>"//" |
<TodoParam>"/*" | <TodoParam>"/*" |
<TodoParam>. { <TodoParam>. {
addSpecialItem("todo"); addXRefItem("todo",theTranslator->trTodo(),theTranslator->trTodoList());
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]); int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext); BEGIN(slStartContext);
} }
...@@ -3519,7 +3512,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3519,7 +3512,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<TestParam>"//" | <TestParam>"//" |
<TestParam>"/*" | <TestParam>"/*" |
<TestParam>. { <TestParam>. {
addSpecialItem("test"); addXRefItem("test",theTranslator->trTest(),theTranslator->trTestList());
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]); int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext); BEGIN(slStartContext);
} }
...@@ -3527,7 +3520,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3527,7 +3520,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<BugParam>"//" | <BugParam>"//" |
<BugParam>"/*" | <BugParam>"/*" |
<BugParam>. { <BugParam>. {
addSpecialItem("bug"); addXRefItem("bug",theTranslator->trBug(),theTranslator->trBugList());
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]); int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext); BEGIN(slStartContext);
} }
...@@ -3535,7 +3528,46 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3535,7 +3528,46 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<DeprecatedParam>"//" | <DeprecatedParam>"//" |
<DeprecatedParam>"/*" | <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]); int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext); BEGIN(slStartContext);
} }
...@@ -4065,6 +4097,12 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4065,6 +4097,12 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
unput('/');unput('*'); // make sure we have something to read unput('/');unput('*'); // make sure we have something to read
BEGIN( DeprecatedParam ); 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 && else if (YY_START==ClassDocBrief &&
lastBriefContext==Doc) lastBriefContext==Doc)
{ {
...@@ -4238,7 +4276,8 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4238,7 +4276,8 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
if (lastBriefContext==TodoParam || if (lastBriefContext==TodoParam ||
lastBriefContext==TestParam || lastBriefContext==TestParam ||
lastBriefContext==BugParam || lastBriefContext==BugParam ||
lastBriefContext==DeprecatedParam lastBriefContext==DeprecatedParam ||
lastBriefContext==XRefItemParam4
) )
{ {
unput('\n'); unput('\n');
...@@ -4291,6 +4330,16 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -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 unput('\n'); // make sure we have something to read
BEGIN( DeprecatedParam ); BEGIN( DeprecatedParam );
} }
else if
(lastBriefContext==XRefItemParam4 &&
(slStartContext==LineDoc ||
slStartContext==AfterDocLine
)
)
{
unput('\n'); // make sure we have something to read
BEGIN( XRefItemParam4 );
}
else else
{ {
current->brief += "\n"; current->brief += "\n";
...@@ -4351,14 +4400,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4351,14 +4400,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN( ReadFuncArgType ) ; BEGIN( ReadFuncArgType ) ;
} }
<ClassDocFunc>"("({ID}"::")*({B}*"*")+ { <ClassDocFunc>"("({ID}"::")*({B}*"*")+ {
current->name+=yytext; current->type+=current->name+yytext;
current->name.resize(0);
BEGIN( ClassDocFuncPtr ); BEGIN( ClassDocFuncPtr );
} }
<ClassDocFuncPtr>{SCOPENAME} { <ClassDocFuncPtr>{SCOPENAME} {
current->name+=yytext; current->name+=yytext;
} }
<ClassDocFuncPtr>")" { <ClassDocFuncPtr>")" {
current->name+=')'; current->type+=')';
BEGIN( ClassDocFunc ); BEGIN( ClassDocFunc );
} }
<ClassDocFuncQual>"{" { <ClassDocFuncQual>"{" {
...@@ -4872,11 +4922,13 @@ static void parseCompounds(Entry *rt) ...@@ -4872,11 +4922,13 @@ static void parseCompounds(Entry *rt)
// set default protection based on the compound type // set default protection based on the compound type
if( ce->section==Entry::CLASS_SEC ) // class if( ce->section==Entry::CLASS_SEC ) // class
{ {
if (ce->fileName.right(5)==".java" || if (
ce->fileName.right(4)==".php" || ce->fileName.right(4)==".php" ||
ce->fileName.right(4)==".inc" 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 else
current->protection = protection = Private ; current->protection = protection = Private ;
} }
......
...@@ -389,6 +389,17 @@ class Translator ...@@ -389,6 +389,17 @@ class Translator
virtual QCString trEvents() = 0; virtual QCString trEvents() = 0;
virtual QCString trEventDocumentation() = 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 #endif
...@@ -40,7 +40,26 @@ class TranslatorAdapterBase : public Translator ...@@ -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: public:
virtual QCString updateNeededMessage() virtual QCString updateNeededMessage()
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#ifndef TRANSLATOR_BR_H #ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H #define TRANSLATOR_BR_H
class TranslatorBrazilian: public Translator class TranslatorBrazilian: public TranslatorAdapter_1_3
{ {
public: public:
......
...@@ -166,7 +166,7 @@ ...@@ -166,7 +166,7 @@
// probably slightly faster. // probably slightly faster.
class TranslatorCzech : public Translator class TranslatorCzech : public TranslatorAdapter_1_3
{ {
private: private:
/*! The decode() inline assumes the source written in the /*! The decode() inline assumes the source written in the
......
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
#ifndef TRANSLATOR_DE_H #ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H #define TRANSLATOR_DE_H
class TranslatorGerman : public Translator class TranslatorGerman : public TranslatorAdapter_1_3
{ {
public: public:
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
#ifndef TRANSLATOR_DK_H #ifndef TRANSLATOR_DK_H
#define TRANSLATOR_DK_H #define TRANSLATOR_DK_H
class TranslatorDanish : public Translator class TranslatorDanish : public TranslatorAdapter_1_3
{ {
public: public:
......
...@@ -1433,6 +1433,46 @@ class TranslatorEnglish : public Translator ...@@ -1433,6 +1433,46 @@ class TranslatorEnglish : public Translator
return "Event Documentation"; 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 #endif
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
#ifndef TRANSLATOR_FR_H #ifndef TRANSLATOR_FR_H
#define TRANSLATOR_FR_H #define TRANSLATOR_FR_H
class TranslatorFrench : public Translator class TranslatorFrench : public TranslatorAdapter_1_3
{ {
public: public:
QCString idLanguage() QCString idLanguage()
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
#ifndef TRANSLATOR_HR_H #ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H #define TRANSLATOR_HR_H
class TranslatorCroatian : public Translator class TranslatorCroatian : public TranslatorAdapter_1_3
{ {
private: private:
/*! to avoid macro redefinition from translator_cz.h */ /*! to avoid macro redefinition from translator_cz.h */
......
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
#ifndef TRANSLATOR_IT_H #ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H #define TRANSLATOR_IT_H
class TranslatorItalian : public Translator class TranslatorItalian : public TranslatorAdapter_1_3
{ {
public: public:
......
...@@ -64,7 +64,7 @@ class TranslatorJapaneseEn : public TranslatorEnglish ...@@ -64,7 +64,7 @@ class TranslatorJapaneseEn : public TranslatorEnglish
} }
}; };
class TranslatorJapanese : public Translator class TranslatorJapanese : public TranslatorAdapter_1_3
{ {
private: private:
/*! The decode() can change euc into sjis */ /*! The decode() can change euc into sjis */
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#ifndef TRANSLATOR_KR_H #ifndef TRANSLATOR_KR_H
#define TRANSLATOR_KR_H #define TRANSLATOR_KR_H
class TranslatorKorean : public Translator class TranslatorKorean : public TranslatorAdapter_1_3
{ {
public: public:
......
...@@ -1030,6 +1030,45 @@ class TranslatorDutch : public Translator ...@@ -1030,6 +1030,45 @@ class TranslatorDutch : public Translator
return "Event Documentatie"; 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 #endif
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#ifndef TRANSLATOR_PL_H #ifndef TRANSLATOR_PL_H
#define TRANSLATOR_PL_H #define TRANSLATOR_PL_H
class TranslatorPolish : public Translator class TranslatorPolish : public TranslatorAdapter_1_3
{ {
private: private:
/*! to avoid macro redefinition from translator_pl.h */ /*! to avoid macro redefinition from translator_pl.h */
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
#ifndef TRANSLATOR_RU_H #ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H #define TRANSLATOR_RU_H
class TranslatorRussian : public Translator class TranslatorRussian : public TranslatorAdapter_1_3
{ {
private: private:
/*! The Decode() inline assumes the source written in the /*! The Decode() inline assumes the source written in the
......
...@@ -2934,7 +2934,7 @@ QCString substituteKeywords(const QCString &s,const char *title) ...@@ -2934,7 +2934,7 @@ QCString substituteKeywords(const QCString &s,const char *title)
*/ */
int getPrefixIndex(const QCString &name) 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"); QStrList &sl = Config_getList("IGNORE_PREFIX");
char *s = sl.first(); char *s = sl.first();
while (s) while (s)
...@@ -3624,16 +3624,16 @@ PageInfo *addRelatedPage(const char *name,const QCString &ptitle, ...@@ -3624,16 +3624,16 @@ PageInfo *addRelatedPage(const char *name,const QCString &ptitle,
if (sli) if (sli)
{ {
if (pi->specialListItems==0) if (pi->xrefListItems==0)
{ {
pi->specialListItems=new QList<ListItemInfo>; pi->xrefListItems=new QList<ListItemInfo>;
pi->specialListItems->setAutoDelete(TRUE); pi->xrefListItems->setAutoDelete(TRUE);
} }
QListIterator<ListItemInfo> slii(*sli); QListIterator<ListItemInfo> slii(*sli);
ListItemInfo *lii; ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii) 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, ...@@ -3700,10 +3700,16 @@ void addRefItem(const QList<ListItemInfo> *sli,
ListItemInfo *lii; ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii) for (slii.toFirst();(lii=slii.current());++slii)
{ {
RefList *refList = Doxygen::specialLists->find(lii->type); RefList *refList = Doxygen::xrefLists->find(lii->type);
ASSERT(refList!=0); if (refList &&
(
if (Config_getBool(refList->optionName())) // 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); RefItem *item = refList->getRefItem(lii->itemId);
ASSERT(item!=0); ASSERT(item!=0);
......
...@@ -501,6 +501,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -501,6 +501,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
case Public: t << "public"; break; case Public: t << "public"; break;
case Protected: t << "protected"; break; case Protected: t << "protected"; break;
case Private: t << "private"; break; case Private: t << "private"; break;
case Package: t << "package"; break;
} }
t << "\" static=\""; t << "\" static=\"";
if (md->isStatic()) t << "yes"; else t << "no"; if (md->isStatic()) t << "yes"; else t << "no";
...@@ -685,6 +686,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -685,6 +686,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
case Public: t << "public"; break; case Public: t << "public"; break;
case Protected: t << "protected"; break; case Protected: t << "protected"; break;
case Private: t << "private"; break; case Private: t << "private"; break;
case Package: t << "package"; break;
} }
t << "\">" << endl; t << "\">" << endl;
t << " <name>"; t << " <name>";
...@@ -791,6 +793,7 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t) ...@@ -791,6 +793,7 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t)
case Public: t << "public"; break; case Public: t << "public"; break;
case Protected: t << "protected"; break; case Protected: t << "protected"; break;
case Private: t << "private"; break; case Private: t << "private"; break;
case Package: t << "package"; break;
} }
t << "\" virt=\""; t << "\" virt=\"";
switch(virt) switch(virt)
...@@ -869,6 +872,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -869,6 +872,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
case Public: t << "public"; break; case Public: t << "public"; break;
case Protected: t << "protected"; break; case Protected: t << "protected"; break;
case Private: t << "private"; break; case Private: t << "private"; break;
case Package: ASSERT(0); break;
} }
t << "\" virt=\""; t << "\" virt=\"";
switch(bcd->virt) switch(bcd->virt)
...@@ -895,6 +899,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -895,6 +899,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
case Public: t << "public"; break; case Public: t << "public"; break;
case Protected: t << "protected"; break; case Protected: t << "protected"; break;
case Private: t << "private"; break; case Private: t << "private"; break;
case Package: ASSERT(0); break;
} }
t << "\" virt=\""; t << "\" virt=\"";
switch(bcd->virt) switch(bcd->virt)
......
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