Commit 2eef94da authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3-20030421

parent 7e0aeda8
DOXYGEN Version 1.3
DOXYGEN Version 1.3-20030421
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (10 April 2003)
Dimitri van Heesch (21 April 2003)
DOXYGEN Version 1.3
DOXYGEN Version 1.3_20030421
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (10 April 2003)
Dimitri van Heesch (dimitri@stack.nl) (21 April 2003)
......@@ -287,7 +287,7 @@ if test "$f_insttool" = NO; then
for i in $install_names; do
for j in $install_dirs; do
if test -x "$j/$i"; then
if test -n "`$j/$i --version 2>/dev/null | grep fileutils`"; then
if test -n "`$j/$i --version 2>/dev/null | grep utils`"; then
install_found=YES
install_prog="$j/$i"
break 2
......@@ -305,7 +305,7 @@ if test "$f_insttool" = NO; then
echo "not found!";
echo
fi
echo "GNU version of install is required: this is part of the fileutils package: "
echo "GNU version of install is required: this is part of the fileutils/coreutils package: "
echo "see http://www.gnu.org/software/fileutils/fileutils.html"
echo
exit 2
......
......@@ -139,12 +139,13 @@ strings and executes the commands it finds in it (this is the second pass
in parsing the documentation). It writes the result directly to the output
generators.
The parser is written using \c flex and can be found in \c src/doc.l
The parser is written in C++ and can be found in src/docparser.cpp. The
tokens that are eaten by the parser come from src/doctokenizer.l.
Code fragments found in the comment blocks are passed on to the source parser.
The main entry point for the documentation parser is \c parseDoc()
declared in \c src/doc.h. For simple texts with special
commands \c parseText() is used.
The main entry point for the documentation parser is \c validatingParseDoc()
declared in \c src/docparser.h. For simple texts with special
commands \c validatingParseText() is used.
<h3>Source parser</h3>
......
......@@ -129,6 +129,7 @@ documentation:
\refitem cmdversion \\version
\refitem cmdwarning \\warning
\refitem cmdweakgroup \\weakgroup
\refitem cmdxrefitem \\xrefitem
\refitem cmddollar \\\$
\refitem cmdat \\\@
\refitem cmdbackslash \\\\
......@@ -1027,6 +1028,38 @@ ALIASES = "english=\if english" \
sectioning command is encountered. See section \ref cmdauthor "\\author"
for an example.
\section cmdxrefitem \xrefitem <key> "(heading)" "(list title)" {text}
\addindex \\xrefitem
This command is a generalization of commands such as \ref cmdtodo "\\todo"
and \ref cmdbug "\\bug".
It can be used to create user-defined text sections which are automatically
cross-referenced between the place of occurrence and a related page,
which will be generated. On the related page all sections of
the same type will be collected.
The first argument \<key\> is a
identifier uniquely representing the type of the section. The second argument
is a quoted string representing the heading of the section under which
text passed as the forth argument is put. The third argument (list title)
is used as the title for the related page containing all items with the
same key. The keys "todo", "test", "bug", and "deprecated" are predefined.
To get an idea on how to use the \\xrefitem command and what its effect
is, consider the todo list, which (for English output) can be seen an
alias for the command
\verbatim \xrefitem todo "Todo" "Todo List" \endverbatim
Since it is very tedious and error-prone to repeat the first three
parameters of the command for each section, the command is meant to
be used in combination with the \ref cfg_aliases "ALIASES" option in the
configuration file.
To define a new command \\reminder, for instance, one should add the following
line to the configuration file:
\verbatim ALIASES += "reminder=\xrefitem reminders \"Reminder\" \"Reminders\"" \endverbatim
Note the use of escaped quotes for the second and third argument of the
\\xrefitem command.
<hr>
<h2>\htmlonly <center> --- \endhtmlonly
Commands to create links
......
......@@ -641,7 +641,7 @@ function's detailed documentation block.
in the directories. If left blank the following patterns are tested:
<code>
*.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
*.h++ *.idl *.odl
*.h++ *.idl *.odl *.cs
</code>
\anchor cfg_recursive
......
......@@ -55,7 +55,7 @@ when the translator was updated.
<TD>Brazilian Portuguese</TD>
<TD>Fabio "FJTC" Jun Takada Chino</TD>
<TD>chino@NOSPAM.icmc.sc.usp.br</TD>
<TD>up-to-date</TD>
<TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Catalan</TD>
......@@ -79,19 +79,19 @@ when the translator was updated.
<TD>Croatian</TD>
<TD>Boris Bralo</TD>
<TD>boris.bralo@NOSPAM.zg.tel.hr</TD>
<TD>up-to-date</TD>
<TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Czech</TD>
<TD>Petr P&#x0159;ikryl</TD>
<TD>prikrylp@NOSPAM.skil.cz</TD>
<TD>up-to-date</TD>
<TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Danish</TD>
<TD>Erik S&oslash;e S&oslash;rensen</TD>
<TD>erik@NOSPAM.mail.nu</TD>
<TD>up-to-date</TD>
<TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Dutch</TD>
......@@ -115,13 +115,13 @@ when the translator was updated.
<TD>French</TD>
<TD>Xavier Outhier</TD>
<TD>xouthier@NOSPAM.yahoo.fr</TD>
<TD>up-to-date</TD>
<TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>German</TD>
<TD>Jens Seidel</TD>
<TD>jensseidel@NOSPAM.users.sf.net</TD>
<TD>up-to-date</TD>
<TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Greek</TD>
......@@ -139,19 +139,19 @@ when the translator was updated.
<TD>Italian</TD>
<TD>Alessandro Falappa<br>Ahmed Aldo Faisal</TD>
<TD>alessandro@NOSPAM.falappa.net<br>aaf23@NOSPAM.cam.ac.uk</TD>
<TD>up-to-date</TD>
<TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Japanese</TD>
<TD>Ryunosuke Satoh<br>Kenji Nagamatsu</TD>
<TD>sun594@NOSPAM.hotmail.com<br>naga@NOSPAM.joyful.club.ne.jp</TD>
<TD>up-to-date</TD>
<TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Korean</TD>
<TD>Richard Kim</TD>
<TD>ryk@NOSPAM.dspwiz.com</TD>
<TD>up-to-date</TD>
<TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Norwegian</TD>
......@@ -163,7 +163,7 @@ when the translator was updated.
<TD>Polish</TD>
<TD>Piotr Kaminski<br>Grzegorz Kowal</TD>
<TD>Piotr.Kaminski@NOSPAM.ctm.gdynia.pl<br>g_kowal@NOSPAM.poczta.onet.pl</TD>
<TD>up-to-date</TD>
<TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Portuguese</TD>
......@@ -181,7 +181,7 @@ when the translator was updated.
<TD>Russian</TD>
<TD>Alexandr Chelpanov</TD>
<TD>cav@NOSPAM.cryptopro.ru</TD>
<TD>up-to-date</TD>
<TD>strange</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Serbian</TD>
......@@ -230,7 +230,7 @@ when the translator was updated.
{\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
\hline
\hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & up-to-date \\
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & strange \\
\hline
Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\
\hline
......@@ -239,11 +239,11 @@ when the translator was updated.
\hline
Chinese Traditional & Gary Lee & {\tt garylee@ecosine.com.tw} & 1.2.16 \\
\hline
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & strange \\
\hline
Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\
Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & strange \\
\hline
Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & up-to-date \\
Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & strange \\
\hline
Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} & up-to-date \\
\hline
......@@ -251,32 +251,32 @@ when the translator was updated.
\hline
Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & obsolete \\
\hline
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & up-to-date \\
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & strange \\
\hline
German & Jens Seidel & {\tt jensseidel@users.sf.net} & up-to-date \\
German & Jens Seidel & {\tt jensseidel@users.sf.net} & strange \\
\hline
Greek & Harry Kalogirou & {\tt harkal@rainbow.cs.unipi.gr} & 1.2.11 \\
\hline
Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\
\hline
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & strange \\
& Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\
\hline
Japanese & Ryunosuke Satoh & {\tt sun594@hotmail.com} & up-to-date \\
Japanese & Ryunosuke Satoh & {\tt sun594@hotmail.com} & strange \\
& Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & \\
\hline
Korean & Richard Kim & {\tt ryk@dspwiz.com} & up-to-date \\
Korean & Richard Kim & {\tt ryk@dspwiz.com} & strange \\
\hline
Norwegian & Lars Erik Jordet & {\tt lej@circuitry.no} & 1.2.2 \\
\hline
Polish & Piotr Kaminski & {\tt Piotr.Kaminski@ctm.gdynia.pl} & up-to-date \\
Polish & Piotr Kaminski & {\tt Piotr.Kaminski@ctm.gdynia.pl} & strange \\
& Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & \\
\hline
Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.2.18 \\
\hline
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\
\hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & strange \\
\hline
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.2.17 \\
\hline
......
......@@ -446,7 +446,7 @@ int inflate_trees_fixed(uIntf *bl, uIntf *bd, inflate_huft **tl, inflate_huft **
fixed_built = 1;
}
#else
z=z; // DvH: added to avoid compiler warning
z=z; /* DvH: added to avoid compiler warning */
#endif
*bl = fixed_bl;
*bd = fixed_bd;
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.3
Version: 1.3_20030421
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -170,6 +170,11 @@ void ClassDef::addMembersToMemberGroup()
::addMembersToMemberGroup(&dcopMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&pubStaticMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&pubStaticAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&pacTypes,memberGroupSDict,this);
::addMembersToMemberGroup(&pacMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&pacAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&pacStaticMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&pacStaticAttribs,memberGroupSDict,this);
::addMembersToMemberGroup(&proTypes,memberGroupSDict,this);
::addMembersToMemberGroup(&proMethods,memberGroupSDict,this);
::addMembersToMemberGroup(&proAttribs,memberGroupSDict,this);
......@@ -247,9 +252,11 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot)
{
case Protected:
case Package: // slots in packages are not possible!
proSlots.append(md);
md->setSectionList(this,&proSlots);
break;
break;
case Public:
pubSlots.append(md);
md->setSectionList(this,&pubSlots);
......@@ -271,6 +278,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proStaticAttribs.append(md);
md->setSectionList(this,&proStaticAttribs);
break;
case Package:
pacStaticAttribs.append(md);
md->setSectionList(this,&pacStaticAttribs);
break;
case Public:
pubStaticAttribs.append(md);
md->setSectionList(this,&pubStaticAttribs);
......@@ -289,6 +300,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proStaticMethods.append(md);
md->setSectionList(this,&proStaticMethods);
break;
case Package:
pacStaticMethods.append(md);
md->setSectionList(this,&pacStaticMethods);
break;
case Public:
pubStaticMethods.append(md);
md->setSectionList(this,&pubStaticMethods);
......@@ -310,6 +325,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proAttribs.append(md);
md->setSectionList(this,&proAttribs);
break;
case Package:
pacAttribs.append(md);
md->setSectionList(this,&pacAttribs);
break;
case Public:
pubAttribs.append(md);
md->setSectionList(this,&pubAttribs);
......@@ -328,6 +347,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proTypes.append(md);
md->setSectionList(this,&proTypes);
break;
case Package:
pacTypes.append(md);
md->setSectionList(this,&pacTypes);
break;
case Public:
pubTypes.append(md);
md->setSectionList(this,&pubTypes);
......@@ -346,6 +369,10 @@ void ClassDef::internalInsertMember(MemberDef *md,
proMethods.append(md);
md->setSectionList(this,&proMethods);
break;
case Package:
pacMethods.append(md);
md->setSectionList(this,&pacMethods);
break;
case Public:
pubMethods.append(md);
md->setSectionList(this,&pubMethods);
......@@ -401,11 +428,7 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot)
{
case Protected:
if (Config_getBool("SORT_MEMBER_DOCS"))
functionMembers.inSort(md);
else
functionMembers.append(md);
break;
case Package:
case Public:
if (Config_getBool("SORT_MEMBER_DOCS"))
functionMembers.inSort(md);
......@@ -517,28 +540,32 @@ void ClassDef::computeAnchors()
ClassDef *context = Config_getBool("INLINE_INHERITED_MEMB") ? this : 0;
setAnchors(context,'a',&pubMethods);
setAnchors(context,'b',&proMethods);
setAnchors(context,'c',&priMethods);
setAnchors(context,'d',&pubStaticMethods);
setAnchors(context,'e',&proStaticMethods);
setAnchors(context,'f',&priStaticMethods);
setAnchors(context,'g',&pubSlots);
setAnchors(context,'h',&proSlots);
setAnchors(context,'i',&priSlots);
setAnchors(context,'j',&signals);
setAnchors(context,'k',&related);
setAnchors(context,'l',&friends);
setAnchors(context,'m',&pubAttribs);
setAnchors(context,'n',&proAttribs);
setAnchors(context,'o',&priAttribs);
setAnchors(context,'p',&pubStaticAttribs);
setAnchors(context,'q',&proStaticAttribs);
setAnchors(context,'r',&priStaticAttribs);
setAnchors(context,'s',&pubTypes);
setAnchors(context,'t',&proTypes);
setAnchors(context,'u',&priTypes);
setAnchors(context,'v',&dcopMethods);
setAnchors(context,'w',&properties);
setAnchors(context,'x',&events);
setAnchors(context,'c',&pacMethods);
setAnchors(context,'d',&priMethods);
setAnchors(context,'e',&pubStaticMethods);
setAnchors(context,'f',&proStaticMethods);
setAnchors(context,'g',&pacStaticMethods);
setAnchors(context,'h',&priStaticMethods);
setAnchors(context,'i',&pubSlots);
setAnchors(context,'j',&proSlots);
setAnchors(context,'k',&priSlots);
setAnchors(context,'l',&signals);
setAnchors(context,'m',&related);
setAnchors(context,'n',&friends);
setAnchors(context,'o',&pubAttribs);
setAnchors(context,'p',&proAttribs);
setAnchors(context,'q',&pacAttribs);
setAnchors(context,'r',&priAttribs);
setAnchors(context,'s',&pubStaticAttribs);
setAnchors(context,'t',&proStaticAttribs);
setAnchors(context,'u',&pacStaticAttribs);
setAnchors(context,'v',&priStaticAttribs);
setAnchors(context,'w',&pubTypes);
setAnchors(context,'x',&proTypes);
setAnchors(context,'y',&priTypes);
setAnchors(context,'z',&dcopMethods);
setAnchors(context,'0',&properties);
setAnchors(context,'1',&events);
MemberGroupSDict::Iterator mgli(*memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
......@@ -574,6 +601,11 @@ void ClassDef::findSectionsInDocumentation()
dcopMethods.findSectionsInDocumentation();
pubStaticMethods.findSectionsInDocumentation();
pubStaticAttribs.findSectionsInDocumentation();
pacTypes.findSectionsInDocumentation();
pacMethods.findSectionsInDocumentation();
pacAttribs.findSectionsInDocumentation();
pacStaticMethods.findSectionsInDocumentation();
pacStaticAttribs.findSectionsInDocumentation();
proTypes.findSectionsInDocumentation();
proMethods.findSectionsInDocumentation();
proAttribs.findSectionsInDocumentation();
......@@ -1155,7 +1187,18 @@ void ClassDef::writeDocumentation(OutputList &ol)
proAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedAttribs(),0);
proStaticAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticProtectedAttribs(),0);
// properties
// package types
pacTypes.writeDeclarations(ol,this,0,0,0,theTranslator->trPackageTypes(),0);
// package methods
pacMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trPackageMembers(),0);
pacStaticMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPackageMembers(),0);
// package attribs
pacAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trPackageAttribs(),0);
pacStaticAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPackageAttribs(),0);
// package
properties.writeDeclarations(ol,this,0,0,0,theTranslator->trProperties(),0);
// events
......@@ -1463,6 +1506,7 @@ void ClassDef::writeMemberList(OutputList &ol)
if (md->isMutable()) sl.append("mutable");
if (prot==Protected) sl.append("protected");
else if (prot==Private) sl.append("private");
else if (prot==Package) sl.append("package");
if (virt==Virtual) sl.append("virtual");
else if (virt==Pure) sl.append("pure virtual");
if (md->isStatic()) sl.append("static");
......@@ -1639,6 +1683,16 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup)
proStaticMethods.writePlainDeclarations(ol,this,0,0,0);
proStaticAttribs.setInGroup(inGroup);
proStaticAttribs.writePlainDeclarations(ol,this,0,0,0);
pacTypes.setInGroup(inGroup);
pacTypes.writePlainDeclarations(ol,this,0,0,0);
pacMethods.setInGroup(inGroup);
pacMethods.writePlainDeclarations(ol,this,0,0,0);
pacAttribs.setInGroup(inGroup);
pacAttribs.writePlainDeclarations(ol,this,0,0,0);
pacStaticMethods.setInGroup(inGroup);
pacStaticMethods.writePlainDeclarations(ol,this,0,0,0);
pacStaticAttribs.setInGroup(inGroup);
pacStaticAttribs.writePlainDeclarations(ol,this,0,0,0);
if (Config_getBool("EXTRACT_PRIVATE"))
{
priTypes.setInGroup(inGroup);
......@@ -2534,7 +2588,7 @@ QCString ClassDef::className() const
void ClassDef::addListReferences()
{
addRefItem(specialListItems(),
addRefItem(xrefListItems(),
theTranslator->trClass(TRUE,TRUE),
getOutputFileBase(),displayName()
);
......
......@@ -199,21 +199,26 @@ class ClassDef : public Definition
/* member lists by protection */
MemberList pubMethods;
MemberList proMethods;
MemberList pacMethods;
MemberList priMethods;
MemberList pubStaticMethods;
MemberList proStaticMethods;
MemberList pacStaticMethods;
MemberList priStaticMethods;
MemberList pubSlots;
MemberList proSlots;
MemberList priSlots;
MemberList pubAttribs;
MemberList proAttribs;
MemberList pacAttribs;
MemberList priAttribs;
MemberList pubStaticAttribs;
MemberList proStaticAttribs;
MemberList pacStaticAttribs;
MemberList priStaticAttribs;
MemberList pubTypes;
MemberList proTypes;
MemberList pacTypes;
MemberList priTypes;
MemberList related;
MemberList signals;
......
......@@ -27,12 +27,10 @@ CommandMap cmdMap[] =
{ "attention", CMD_ATTENTION },
{ "author", CMD_AUTHOR },
{ "b", CMD_BOLD },
{ "bug", CMD_BUG },
{ "c", CMD_CODE },
{ "code", CMD_STARTCODE },
{ "copydoc", CMD_COPYDOC },
{ "date", CMD_DATE },
{ "deprecated", CMD_DEPRECATED },
{ "dontinclude", CMD_DONTINCLUDE },
{ "dotfile", CMD_DOTFILE },
{ "e", CMD_EMPHASIS },
......@@ -81,9 +79,8 @@ CommandMap cmdMap[] =
{ "since", CMD_SINCE },
{ "skip", CMD_SKIP },
{ "skipline", CMD_SKIPLINE },
{ "test", CMD_TEST },
{ "xrefitem", CMD_XREFITEM },
{ "throw", CMD_EXCEPTION },
{ "todo", CMD_TODO },
{ "until", CMD_UNTIL },
{ "verbatim", CMD_VERBATIM },
{ "verbinclude", CMD_VERBINCLUDE },
......
......@@ -33,76 +33,73 @@ enum CommandType
{
CMD_UNKNOWN = 0,
CMD_ADDINDEX = 1,
CMD_ANCHOR = 2,
CMD_ATTENTION = 3 | SIMPLESECT_BIT,
CMD_AUTHOR = 4 | SIMPLESECT_BIT,
CMD_BOLD = 5,
CMD_BUG = 6 | SIMPLESECT_BIT,
CMD_CODE = 7,
CMD_COPYDOC = 8,
CMD_DATE = 9 | SIMPLESECT_BIT,
CMD_DEPRECATED = 10 | SIMPLESECT_BIT,
CMD_DONTINCLUDE = 11,
CMD_DOTFILE = 12,
CMD_EMPHASIS = 13,
CMD_ENDCODE = 14,
CMD_ENDHTMLONLY = 15,
CMD_ENDLATEXONLY = 16,
CMD_ENDLINK = 17,
CMD_ENDVERBATIM = 18,
CMD_EXCEPTION = 19 | SIMPLESECT_BIT,
CMD_HTMLINCLUDE = 20,
CMD_HTMLONLY = 21,
CMD_IMAGE = 22,
CMD_INCLUDE = 23,
CMD_INTERNAL = 24,
CMD_INVARIANT = 25 | SIMPLESECT_BIT ,
CMD_LATEXONLY = 26,
CMD_LI = 27,
CMD_LINE = 28,
CMD_LINK = 29,
CMD_NOTE = 30 | SIMPLESECT_BIT ,
CMD_PAR = 31 | SIMPLESECT_BIT ,
CMD_PARAM = 32 | SIMPLESECT_BIT,
CMD_POST = 33 | SIMPLESECT_BIT,
CMD_PRE = 34 | SIMPLESECT_BIT ,
CMD_REF = 35,
CMD_SECREFITEM = 36,
CMD_REMARK = 37 | SIMPLESECT_BIT ,
CMD_RETURN = 38 | SIMPLESECT_BIT ,
CMD_RETVAL = 39 | SIMPLESECT_BIT,
CMD_SA = 40 | SIMPLESECT_BIT ,
CMD_SECTION = 41,
CMD_SUBSECTION = 42,
CMD_SUBSUBSECTION= 43,
CMD_PARAGRAPH = 44,
CMD_SINCE = 45 | SIMPLESECT_BIT,
CMD_SKIP = 46,
CMD_SKIPLINE = 47,
CMD_STARTCODE = 48,
CMD_JAVALINK = 49,
CMD_TEST = 50 | SIMPLESECT_BIT,
CMD_TODO = 51 | SIMPLESECT_BIT,
CMD_UNTIL = 52,
CMD_VERBATIM = 53,
CMD_VERBINCLUDE = 54,
CMD_VERSION = 55 | SIMPLESECT_BIT,
CMD_WARNING = 56 | SIMPLESECT_BIT ,
CMD_BSLASH = 57,
CMD_AT = 58,
CMD_LESS = 59,
CMD_GREATER = 60,
CMD_AMP = 61,
CMD_DOLLAR = 62,
CMD_HASH = 63,
CMD_PERCENT = 64,
CMD_LINEBREAK = 65,
CMD_FORMULA = 66,
CMD_SECREFLIST = 67,
CMD_ENDSECREFLIST= 68,
CMD_LANGSWITCH = 69,
CMD_AUTHORS = 70 | SIMPLESECT_BIT,
CMD_INTERNALREF = 71
CMD_AMP = 2,
CMD_ANCHOR = 3,
CMD_AT = 4,
CMD_ATTENTION = 5 | SIMPLESECT_BIT,
CMD_AUTHOR = 6 | SIMPLESECT_BIT,
CMD_AUTHORS = 7 | SIMPLESECT_BIT,
CMD_BOLD = 8,
CMD_BSLASH = 9,
CMD_CODE = 10,
CMD_COPYDOC = 11,
CMD_DATE = 12 | SIMPLESECT_BIT,
CMD_DOLLAR = 13,
CMD_DONTINCLUDE = 14,
CMD_DOTFILE = 15,
CMD_EMPHASIS = 16,
CMD_ENDCODE = 17,
CMD_ENDHTMLONLY = 18,
CMD_ENDLATEXONLY = 19,
CMD_ENDLINK = 20,
CMD_ENDSECREFLIST= 21,
CMD_ENDVERBATIM = 22,
CMD_EXCEPTION = 23 | SIMPLESECT_BIT,
CMD_FORMULA = 24,
CMD_GREATER = 25,
CMD_HASH = 26,
CMD_HTMLINCLUDE = 27,
CMD_HTMLONLY = 28,
CMD_IMAGE = 29,
CMD_INCLUDE = 30,
CMD_INTERNAL = 31,
CMD_INTERNALREF = 32,
CMD_INVARIANT = 33 | SIMPLESECT_BIT ,
CMD_LANGSWITCH = 34,
CMD_LATEXONLY = 35,
CMD_LESS = 36,
CMD_LI = 37,
CMD_LINE = 38,
CMD_LINEBREAK = 39,
CMD_LINK = 40,
CMD_NOTE = 41 | SIMPLESECT_BIT,
CMD_PAR = 42 | SIMPLESECT_BIT,
CMD_PARAM = 43 | SIMPLESECT_BIT,
CMD_PERCENT = 44,
CMD_POST = 45 | SIMPLESECT_BIT,
CMD_PRE = 46 | SIMPLESECT_BIT ,
CMD_REF = 47,
CMD_SECREFITEM = 48,
CMD_REMARK = 49 | SIMPLESECT_BIT ,
CMD_RETURN = 50 | SIMPLESECT_BIT ,
CMD_RETVAL = 51 | SIMPLESECT_BIT,
CMD_SA = 52 | SIMPLESECT_BIT ,
CMD_SECREFLIST = 53,
CMD_SECTION = 54,
CMD_SUBSECTION = 55,
CMD_SUBSUBSECTION= 56,
CMD_PARAGRAPH = 57,
CMD_SINCE = 58 | SIMPLESECT_BIT,
CMD_SKIP = 59,
CMD_SKIPLINE = 60,
CMD_STARTCODE = 61,
CMD_JAVALINK = 62,
CMD_UNTIL = 63,
CMD_VERBATIM = 64,
CMD_VERBINCLUDE = 65,
CMD_VERSION = 66 | SIMPLESECT_BIT,
CMD_WARNING = 67 | SIMPLESECT_BIT,
CMD_XREFITEM = 68 | SIMPLESECT_BIT
};
enum HtmlTagType
......
......@@ -1078,6 +1078,7 @@ void Config::check()
filePatternList.append("*.h++");
filePatternList.append("*.idl");
filePatternList.append("*.odl");
filePatternList.append("*.cs");
}
// add default pattern if needed
......@@ -1526,13 +1527,6 @@ void Config::create()
"documentation. If set to YES the scope will be hidden. \n",
FALSE
);
cb = addBool(
"VERBATIM_HEADERS",
"If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \n"
"will generate a verbatim copy of the header file for each class for \n"
"which an include is specified. Set to NO to disable this. \n",
TRUE
);
cb = addBool(
"SHOW_INCLUDE_FILES",
"If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \n"
......@@ -1741,7 +1735,7 @@ void Config::create()
"and *.h) to filter out the source-files in the directories. If left \n"
"blank the following patterns are tested: \n"
"*.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp \n"
"*.h++ *.idl *.odl\n"
"*.h++ *.idl *.odl *.cs\n"
);
cb = addBool(
"RECURSIVE",
......@@ -1851,6 +1845,13 @@ void Config::create()
TRUE
);
cb->addDependency("SOURCE_BROWSER");
cb = addBool(
"VERBATIM_HEADERS",
"If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \n"
"will generate a verbatim copy of the header file for each class for \n"
"which an include is specified. Set to NO to disable this. \n",
TRUE
);
//-----------------------------------------------------------------------------------------------
addInfo( "Index","configuration options related to the alphabetical class index");
//-----------------------------------------------------------------------------------------------
......
......@@ -121,6 +121,7 @@ void generateDEFForMember(MemberDef *md,
case Public: t << "public;" << endl; break;
case Protected: t << "protected;" << endl; break;
case Private: t << "private;" << endl; break;
case Package: t << "package;" << endl; break;
}
if (md->memberType()!=MemberDef::Define &&
......@@ -365,6 +366,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
switch (bcd->prot)
{
case Public: t << "public;" << endl; break;
case Package: // package scope is not possible
case Protected: t << "protected;" << endl; break;
case Private: t << "private;" << endl; break;
}
......@@ -392,6 +394,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
switch (bcd->prot)
{
case Public: t << "public;" << endl; break;
case Package: // packet scope is not possible!
case Protected: t << "protected;" << endl; break;
case Private: t << "private;" << endl; break;
}
......
......@@ -58,7 +58,7 @@ Definition::Definition(const char *df,int dl,
m_deprecatedId=0;
m_outerScope=Doxygen::globalScope;
m_partOfGroups=0;
m_specialListItems=0;
m_xrefListItems=0;
m_briefLine=1;
m_briefFile=(QCString)"<"+name+">";
m_docLine=1;
......@@ -71,7 +71,7 @@ Definition::~Definition()
delete m_sourceRefByDict;
delete m_sourceRefsDict;
delete m_partOfGroups;
delete m_specialListItems;
delete m_xrefListItems;
}
void Definition::addSectionsToDefinition(QList<QCString> *anchorList)
......@@ -612,47 +612,47 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli)
if (sli)
{
// deep copy the list
if (m_specialListItems==0)
if (m_xrefListItems==0)
{
m_specialListItems=new QList<ListItemInfo>;
m_specialListItems->setAutoDelete(TRUE);
m_xrefListItems=new QList<ListItemInfo>;
m_xrefListItems->setAutoDelete(TRUE);
}
QListIterator<ListItemInfo> slii(*sli);
ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii)
{
m_specialListItems->append(new ListItemInfo(*lii));
m_xrefListItems->append(new ListItemInfo(*lii));
}
}
}
void Definition::mergeRefItems(Definition *d)
{
if (d->specialListItems())
if (d->xrefListItems())
{
// deep copy the list
if (m_specialListItems==0)
if (m_xrefListItems==0)
{
m_specialListItems=new QList<ListItemInfo>;
m_specialListItems->setAutoDelete(TRUE);
m_xrefListItems=new QList<ListItemInfo>;
m_xrefListItems->setAutoDelete(TRUE);
}
QListIterator<ListItemInfo> slii(*d->specialListItems());
QListIterator<ListItemInfo> slii(*d->xrefListItems());
ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii)
{
if (getSpecialListId(lii->type)==-1)
if (getXRefListId(lii->type)==-1)
{
m_specialListItems->append(new ListItemInfo(*lii));
m_xrefListItems->append(new ListItemInfo(*lii));
}
}
}
}
int Definition::getSpecialListId(const char *listName) const
int Definition::getXRefListId(const char *listName) const
{
if (m_specialListItems)
if (m_xrefListItems)
{
QListIterator<ListItemInfo> slii(*m_specialListItems);
QListIterator<ListItemInfo> slii(*m_xrefListItems);
ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii)
{
......@@ -665,9 +665,9 @@ int Definition::getSpecialListId(const char *listName) const
return -1;
}
const QList<ListItemInfo> *Definition::specialListItems() const
const QList<ListItemInfo> *Definition::xrefListItems() const
{
return m_specialListItems;
return m_xrefListItems;
}
......
......@@ -39,7 +39,8 @@ class Definition
/*! Types of derived classes */
enum DefType
{
TypeClass, TypeMember, TypeFile, TypeGroup, TypeNamespace, TypePackage
TypeClass, TypeMember, TypeFile, TypeGroup,
TypeNamespace, TypePackage, TypePage
};
/*! Use this for dynamic inspection of the derived class */
virtual DefType definitionType() = 0;
......@@ -114,8 +115,7 @@ class Definition
//int bugId() const { return m_bugId; }
void setRefItems(const QList<ListItemInfo> *sli);
void mergeRefItems(Definition *d);
int getSpecialListId(const char *listName) const;
const QList<ListItemInfo> *specialListItems() const;
const QList<ListItemInfo> *xrefListItems() const;
/*! returns the file in which this definition was found */
QCString getDefFileName() const { return m_defFileName; }
......@@ -154,6 +154,7 @@ class Definition
private:
int getXRefListId(const char *listName) const;
void writeSourceRefList(OutputList &ol,const char *scopeName,
const QCString &text,MemberSDict *members,bool);
//QCString m_qualifiedName; // name of the definition
......@@ -171,7 +172,7 @@ class Definition
QCString m_docFile;
int m_briefLine;
QCString m_briefFile;
QList<ListItemInfo> *m_specialListItems;
QList<ListItemInfo> *m_xrefListItems;
};
class DefinitionList : public QList<Definition>
......
......@@ -62,6 +62,7 @@ static uint protToMask(Protection p)
switch(p)
{
case Public: return 0xffffffff;
case Package: // package is not possible!
case Protected: return 0xcccccccc;
case Private: return 0xaaaaaaaa;
}
......@@ -73,6 +74,7 @@ static uint protToColor(Protection p)
switch(p)
{
case Public: return 6;
case Package: // package is not possible!
case Protected: return 5;
case Private: return 4;
}
......@@ -84,6 +86,7 @@ static QCString protToString(Protection p)
switch(p)
{
case Public: return "solid";
case Package: // package is not possible!
case Protected: return "dashed";
case Private: return "dotted";
}
......
......@@ -1361,15 +1361,23 @@ void DocCopy::parse()
void DocXRefItem::parse()
{
QString listName;
switch(m_type)
{
case Bug: listName="bug"; break;
case Test: listName="test"; break;
case Todo: listName="todo"; break;
case Deprecated: listName="deprecated"; break;
}
RefList *refList = Doxygen::specialLists->find(listName);
if (Config_getBool(refList->optionName())) // list is enabled
//switch(m_type)
//{
// case Bug: listName="bug"; break;
// case Test: listName="test"; break;
// case Todo: listName="todo"; break;
// case Deprecated: listName="deprecated"; break;
//}
RefList *refList = Doxygen::xrefLists->find(m_key);
if (refList &&
(
// either not a built-in list or the list is enabled
(m_key!="todo" || Config_getBool("GENERATE_TODOLIST")) &&
(m_key!="test" || Config_getBool("GENERATE_TESTLIST")) &&
(m_key!="bug" || Config_getBool("GENERATE_BUGLIST")) &&
(m_key!="deprecated" || Config_getBool("GENERATE_DEPRECATEDLIST"))
)
)
{
RefItem *item = refList->getRefItem(m_id);
ASSERT(item!=0);
......@@ -3116,15 +3124,15 @@ int DocPara::handleParamSection(const QString &cmdName,DocParamSect::Type t)
return (rv!=TK_NEWPARA) ? rv : RetVal_OK;
}
int DocPara::handleXRefItem(DocXRefItem::Type t)
int DocPara::handleXRefItem()
{
int retval=doctokenizerYYlex();
ASSERT(retval==TK_WHITESPACE);
doctokenizerYYsetStateXRefItem();
retval=doctokenizerYYlex();
if (retval!=0)
if (retval==RetVal_OK)
{
DocXRefItem *ref = new DocXRefItem(this,g_token->id,t);
DocXRefItem *ref = new DocXRefItem(this,g_token->id,g_token->name);
m_children.append(ref);
ref->parse();
}
......@@ -3601,17 +3609,8 @@ int DocPara::handleCommand(const QString &cmdName)
case CMD_EXCEPTION:
retval = handleParamSection(cmdName,DocParamSect::Exception);
break;
case CMD_BUG:
retval = handleXRefItem(DocXRefItem::Bug);
break;
case CMD_TODO:
retval = handleXRefItem(DocXRefItem::Todo);
break;
case CMD_TEST:
retval = handleXRefItem(DocXRefItem::Test);
break;
case CMD_DEPRECATED:
retval = handleXRefItem(DocXRefItem::Deprecated);
case CMD_XREFITEM:
retval = handleXRefItem();
break;
case CMD_LINEBREAK:
{
......@@ -3801,6 +3800,12 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
case HTML_EMPHASIS:
handleStyleEnter(this,m_children,DocStyleChange::Italic,&g_token->attribs);
break;
case HTML_DIV:
handleStyleEnter(this,m_children,DocStyleChange::Div,&g_token->attribs);
break;
case HTML_SPAN:
handleStyleEnter(this,m_children,DocStyleChange::Span,&g_token->attribs);
break;
case HTML_SUB:
handleStyleEnter(this,m_children,DocStyleChange::Subscript,&g_token->attribs);
break;
......@@ -4029,6 +4034,12 @@ int DocPara::handleHtmlEndTag(const QString &tagName)
case HTML_EMPHASIS:
handleStyleLeave(this,m_children,DocStyleChange::Italic,"em");
break;
case HTML_DIV:
handleStyleLeave(this,m_children,DocStyleChange::Div,"div");
break;
case HTML_SPAN:
handleStyleLeave(this,m_children,DocStyleChange::Span,"span");
break;
case HTML_SUB:
handleStyleLeave(this,m_children,DocStyleChange::Subscript,"sub");
break;
......
......@@ -532,11 +532,11 @@ class DocTitle : public CompAccept<DocTitle>, public DocNode
class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
{
public:
enum Type { Bug, Test, Todo, Deprecated };
DocXRefItem(DocNode *parent,int id,Type t) :
m_parent(parent), m_id(id), m_type(t) {}
//enum Type { Bug, Test, Todo, Deprecated };
DocXRefItem(DocNode *parent,int id,const char *key) :
m_parent(parent), m_id(id), m_key(key) /*, m_type(t)*/ {}
Kind kind() const { return Kind_XRefItem; }
Type type() const { return m_type; }
//Type type() const { return m_type; }
QString file() const { return m_file; }
QString anchor() const { return m_anchor; }
QString title() const { return m_title; }
......@@ -547,7 +547,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
private:
DocNode *m_parent;
int m_id;
Type m_type;
QString m_key;
QString m_file;
QString m_anchor;
QString m_title;
......@@ -927,7 +927,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode
int handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tagHtmlAttribs);
int handleHtmlEndTag(const QString &tagName);
int handleSimpleSection(DocSimpleSect::Type t);
int handleXRefItem(DocXRefItem::Type t);
int handleXRefItem();
int handleParamSection(const QString &cmdName,DocParamSect::Type t);
void handleIncludeOperator(const QString &cmdName,DocIncOperator::Type t);
void handleImage(const QString &cmdName);
......
......@@ -314,6 +314,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
%x St_Verbatim
%x St_Param
%x St_XRefItem
%x St_XRefItem2
%x St_File
%x St_Pattern
%x St_Link
......@@ -651,7 +652,13 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
<St_Ref2>"\""|\n { /* " or \n => end of title */
return 0;
}
<St_XRefItem>[0-9]+\n {
<St_XRefItem>{ID} {
g_token->name=yytext;
}
<St_XRefItem>" " {
BEGIN(St_XRefItem2);
}
<St_XRefItem2>[0-9]+\n {
QString numStr=yytext;
numStr=numStr.left(yyleng-1);
g_token->id=numStr.toInt();
......
......@@ -46,12 +46,36 @@ static const char *edgeColorMap[] =
"orange" // template relation
};
//static const char *arrowStyle[] =
//{
// "empty", // Public
// "empty", // Protected
// "empty", // Private
// "open", // "use" relation
// 0, // Undocumented
// 0 // template relation
//};
static const char *edgeStyleMap[] =
{
"solid", // inheritance
"dashed" // usage
};
static void writeGraphHeader(QTextStream &t)
{
t << "digraph G" << endl;
t << "{" << endl;
t << " edge [fontname=\"Helvetica\",fontsize=10,"
"labelfontname=\"Helvetica\",labelfontsize=10];\n";
t << " node [fontname=\"Helvetica\",fontsize=10,shape=record];\n";
}
static void writeGraphFooter(QTextStream &t)
{
t << "}" << endl;
}
/*! converts the rectangles in a server site image map into a client
* site image map.
* \param t the stream to which the result is written.
......@@ -382,14 +406,20 @@ static QCString convertLabel(const QCString &l)
char c;
while ((c=*p++))
{
if (c=='\\') result+="\\\\";
else result+=c;
switch(c)
{
case '\\': result+="\\\\"; break;
case '<': result+="\\<"; break;
case '>': result+="\\>"; break;
case '|': result+="\\|"; break;
default: result+=c; break;
}
}
return result;
}
void DotNode::writeBox(QTextStream &t,
GraphOutputFormat format,
GraphOutputFormat /*format*/,
bool hasNonReachableChildren)
{
const char *labCol =
......@@ -397,10 +427,10 @@ void DotNode::writeBox(QTextStream &t,
(
(hasNonReachableChildren) ? "red" : "black"
);
t << " Node" << m_number << " [shape=\"box\",label=\""
t << " Node" << m_number << " [label=\""
<< convertLabel(m_label)
<< "\",fontsize=10,height=0.2,width=0.4";
if (format==BITMAP) t << ",fontname=\"Helvetica\"";
<< "\",height=0.2,width=0.4";
//if (format==BITMAP) t << ",fontname=\"Helvetica\"";
t << ",color=\"" << labCol << "\"";
if (m_isRoot)
{
......@@ -433,6 +463,10 @@ void DotNode::writeArrow(QTextStream &t,
{
t << ",label=\"" << ei->m_label << "\"";
}
//if (arrowStyle[ei->m_color])
//{
// if (pointBack) t << ",arrowtail=\"empty\""; else t << ",arrowhead=\"empty\"";
//}
if (format==BITMAP) t << ",fontname=\"Helvetica\"";
t << "];" << endl;
}
......@@ -768,8 +802,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
QFile f(dotName);
if (!f.open(IO_WriteOnly)) return;
QTextStream t(&f);
t << "digraph inheritance" << endl;
t << "{" << endl;
writeGraphHeader(t);
t << " rankdir=LR;" << endl;
QListIterator<DotNode> dnli2(*m_rootNodes);
DotNode *node;
......@@ -778,7 +811,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
if (node->m_subgraphId==n->m_subgraphId)
node->write(t,BITMAP,FALSE,TRUE,1000,TRUE);
}
t << "}" << endl;
writeGraphFooter(t);
f.close();
QCString dotArgs(maxCmdLine);
......@@ -1203,8 +1236,7 @@ void writeDotGraph(DotNode *root,
if (f.open(IO_WriteOnly))
{
QTextStream t(&f);
t << "digraph inheritance" << endl;
t << "{" << endl;
writeGraphHeader(t);
if (lrRank)
{
t << " rankdir=LR;" << endl;
......@@ -1231,7 +1263,7 @@ void writeDotGraph(DotNode *root,
pn->write(t,format,TRUE,FALSE,distance,backArrows);
}
}
t << "}" << endl;
writeGraphFooter(t);
f.close();
}
}
......@@ -1725,8 +1757,7 @@ void generateGraphLegend(const char *path)
return;
}
QTextStream dotText(&dotFile);
dotText << "digraph inheritance\n";
dotText << "{\n";
writeGraphHeader(dotText);
dotText << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n";
dotText << " Node10 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"Helvetica\"];\n";
dotText << " Node10 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classPublicBase" << Doxygen::htmlFileExtension << "\"];\n";
......@@ -1744,7 +1775,7 @@ void generateGraphLegend(const char *path)
dotText << " Node17 [shape=\"box\",label=\"Templ< T >\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classTempl" << Doxygen::htmlFileExtension << "\"];\n";
dotText << " Node18 -> Node9 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"Helvetica\"];\n";
dotText << " Node18 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"Helvetica\",color=\"black\",URL=\"$classUsed" << Doxygen::htmlFileExtension << "\"];\n";
dotText << "}\n";
writeGraphFooter(dotText);
dotFile.close();
QDir d(path);
......
......@@ -112,7 +112,7 @@ bool Doxygen::insideMainPage = FALSE; // are we generating docs for th
QTextStream Doxygen::tagFile;
NamespaceDef *Doxygen::globalScope = new NamespaceDef("<globalScope>",1,"<globalScope>");
QDict<RefList> *Doxygen::specialLists = new QDict<RefList>; // dictionary of cross-referenced item lists
QDict<RefList> *Doxygen::xrefLists = new QDict<RefList>; // dictionary of cross-referenced item lists
static StringList inputFiles;
......@@ -2985,6 +2985,12 @@ static void findUsedClassesForClass(Entry *root,
QCString typeName = resolveTypeDef(masterCd,usedClassName);
//printf("Found resolved class %s\n",typeName.data());
int si=usedClassName.findRev("::");
if (si!=-1)
{
// replace any namespace aliases
replaceNamespaceAliases(usedClassName,si);
}
// add any template arguments to the class
QCString usedName = usedClassName+templSpec;
......@@ -3341,96 +3347,6 @@ static bool findClassRelation(
// cd->name().data(),baseClassName.data(),baseClass);
found = baseClass!=0 && baseClass!=cd;
#if 0
if (fd)
{
// look for the using statement in this file in which the
// class was found
NamespaceList *nl = fd->getUsedNamespaces();
if (nl) // try to prepend any of the using namespace scopes.
{
NamespaceListIterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{
QCString fName = nd->name()+"::"+baseClassName;
found = (baseClass=getResolvedClass(cd,fName))!=0 &&
baseClass!=cd &&
root->name!=fName;
}
}
if (fd && !found) // and in the global namespace
{
ClassList *cl = fd->getUsedClasses();
if (cl)
{
ClassListIterator cli(*cl);
ClassDef *ucd;
for (cli.toFirst(); (ucd=cli.current()) && !found; ++cli)
{
if (rightScopeMatch(ucd->name(),biName))
{
baseClass = ucd;
found = TRUE;
}
}
}
}
}
if (!found && nd) // class is inside a namespace
{
NamespaceList *nl = nd->getUsedNamespaces();
QCString fName = nd->name()+"::"+baseClassName;
found = (baseClass=getResolvedClass(cd,fName))!=0 && root->name!=fName;
if (nl) // try to prepend any of the using namespace scopes.
{
NamespaceListIterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{
fName = nd->name()+"::"+baseClassName;
found = (baseClass=getResolvedClass(cd,fName))!=0 &&
baseClass!=cd &&
root->name!=fName;
}
}
if (!found) // also check imported classes within this namespace
{
ClassList *cl = nd->getUsedClasses();
if (cl)
{
ClassListIterator cli(*cl);
ClassDef *ucd;
for (cli.toFirst(); (ucd=cli.current()) && !found; ++cli)
{
if (rightScopeMatch(ucd->name(),biName))
{
baseClass = ucd;
found = TRUE;
}
}
}
}
// TODO: check any inbetween namespaces as well!
if (fd && !found) // and in the global namespace
{
ClassList *cl = fd->getUsedClasses();
if (cl)
{
ClassListIterator cli(*cl);
ClassDef *ucd;
for (cli.toFirst(); (ucd=cli.current()) && !found; ++cli)
{
if (rightScopeMatch(ucd->name(),biName))
{
baseClass = ucd;
found = TRUE;
}
}
}
}
}
#endif
}
bool isATemplateArgument = templateNames!=0 && templateNames->find(biName)!=0;
if (found)
......@@ -3832,7 +3748,7 @@ static void addListReferences()
{
name = pi->getGroupDef()->getOutputFileBase().copy();
}
addRefItem(pi->specialListItems,
addRefItem(pi->xrefListItems,
theTranslator->trPage(TRUE,TRUE),
name,pi->title);
}
......@@ -5020,9 +4936,11 @@ static void findMemberDocumentation(Entry *root)
(i=findFunctionPtr(root->type,&l))!=-1
)
{
//printf("Fixing function pointer!\n");
// fix type and argument
root->args+=root->type.right(root->type.length()-i-l);
root->args.prepend(root->type.right(root->type.length()-i-l));
root->type=root->type.left(i+l);
//printf("Results type=%s,name=%s,args=%s\n",root->type.data(),root->name.data(),root->args.data());
isFunc=FALSE;
}
else if ((root->type.left(8)=="typedef " && root->args.find('(')!=-1))
......@@ -5037,7 +4955,14 @@ static void findMemberDocumentation(Entry *root)
//printf("Documentation for inline member `%s' found args=`%s'\n",
// root->name.data(),root->args.data());
//if (root->relates.length()) printf(" Relates %s\n",root->relates.data());
findMember(root,root->name+root->args+root->exception,FALSE,isFunc);
if (root->type.isEmpty())
{
findMember(root,root->name+root->args+root->exception,FALSE,isFunc);
}
else
{
findMember(root,root->type+" "+root->name+root->args+root->exception,FALSE,isFunc);
}
}
else if (root->section==Entry::OVERLOADDOC_SEC)
{
......@@ -6171,7 +6096,7 @@ static void resolveUserReferences()
// name (not from the todo/test/bug/deprecated list, but from the file in
// which they are defined). We correct this here by looking at the
// generated section labels!
QDictIterator<RefList> rli(*Doxygen::specialLists);
QDictIterator<RefList> rli(*Doxygen::xrefLists);
RefList *rl;
for (rli.toFirst();(rl=rli.current());++rli)
{
......@@ -7168,7 +7093,7 @@ void cleanUpDoxygen()
delete Doxygen::pageSDict;
delete Doxygen::exampleSDict;
delete Doxygen::globalScope;
delete Doxygen::specialLists;
delete Doxygen::xrefLists;
cleanUpPreprocessor();
Config::deleteInstance();
QTextCodec::deleteAllCodecs();
......@@ -7475,40 +7400,42 @@ void readConfiguration(int argc, char **argv)
QFileInfo configFileInfo(configName);
setPerlModDoxyfile(configFileInfo.absFilePath());
Doxygen::xrefLists->setAutoDelete(TRUE);
#if 0
/* init the special lists */
Doxygen::specialLists->setAutoDelete(TRUE);
Doxygen::specialLists->insert("todo",
new RefList("todo",
"GENERATE_TODOLIST",
theTranslator->trTodoList(),
theTranslator->trTodo(),
BaseOutputDocInterface::Todo
theTranslator->trTodo()
//,BaseOutputDocInterface::Todo
)
);
Doxygen::specialLists->insert("test",
new RefList("test",
"GENERATE_TESTLIST",
theTranslator->trTestList(),
theTranslator->trTest(),
BaseOutputDocInterface::Test
theTranslator->trTest()
//,BaseOutputDocInterface::Test
)
);
Doxygen::specialLists->insert("bug",
new RefList("bug",
"GENERATE_BUGLIST",
theTranslator->trBugList(),
theTranslator->trBug(),
BaseOutputDocInterface::Bug
theTranslator->trBug()
//,BaseOutputDocInterface::Bug
)
);
Doxygen::specialLists->insert("deprecated",
new RefList("deprecated",
"GENERATE_DEPRECATEDLIST",
theTranslator->trDeprecatedList(),
theTranslator->trDeprecated(),
BaseOutputDocInterface::Deprecated
theTranslator->trDeprecated()
//,BaseOutputDocInterface::Deprecated
)
);
#endif
}
......
......@@ -91,7 +91,7 @@ class Doxygen
static QIntDict<MemberGroupInfo> memGrpInfoDict;
static QDict<void> expandAsDefinedDict;
static NamespaceDef *globalScope;
static QDict<RefList> *specialLists; // array of special lists: todo, test, bug, deprecated ...
static QDict<RefList> *xrefLists; // array of xref lists: todo, test, bug, deprecated ...
static QCString htmlFileExtension;
};
......
......@@ -21,7 +21,7 @@
#include "qtbc.h"
#include <qlist.h>
enum Protection { Public, Protected, Private } ;
enum Protection { Public, Protected, Private, Package } ;
enum Specifier { Normal, Virtual, Pure } ;
enum MethodTypes { Method, Signal, Slot, DCOP, Property, Event };
......
......@@ -734,7 +734,7 @@ bool FileDef::generateSourceFile() const
void FileDef::addListReferences()
{
addRefItem(specialListItems(),
addRefItem(xrefListItems(),
theTranslator->trFile(TRUE,TRUE),
getOutputFileBase(),name()
);
......
......@@ -783,7 +783,7 @@ QCString GroupDef::getOutputFileBase() const
void GroupDef::addListReferences()
{
addRefItem(specialListItems(),
addRefItem(xrefListItems(),
theTranslator->trGroup(TRUE,TRUE),
getOutputFileBase(),name()
);
......
......@@ -272,6 +272,11 @@ void HtmlDocVisitor::visit(DocFormula *f)
m_t << "\"middle\""; // assume Windows users use IE or HtmlHelp which on
// displays formulas nicely with align == "middle"
#endif
m_t << " alt=\"";
filterQuotedCdataAttr(f->text());
m_t << "\"";
/// @todo cache image dimensions on formula generation and give height/width
/// for faster preloading and better rendering of the page
m_t << " src=\"" << f->name() << ".png\">";
if (f->text().at(0)=='\\')
m_t << endl << "</center><p>" << endl;
......@@ -921,6 +926,43 @@ void HtmlDocVisitor::filter(const char *str)
}
}
/// Escape basic entities to produce a valid CDATA attribute value,
/// assume that the outer quoting will be using the double quote &quot;
void HtmlDocVisitor::filterQuotedCdataAttr(const char* str)
{
if (str==0) return;
const char *p=str;
char c;
while (*p)
{
c=*p++;
switch(c)
{
case '&': m_t << "&amp;"; break;
case '"': m_t << "&quot;"; break;
// For SGML compliance, and given the SGML declaration for HTML syntax,
// it's enough to replace these two, provided that the declaration
// for the HTML version we generate (and as supported by the browser)
// specifies that all the other symbols used in rawVal are
// within the right charachter class (i.e., they're not
// some multinational weird charachters not in the BASESET).
// We assume that 1) the browser will support whatever is remaining
// in the formula and 2) the TeX formulae are generally governed
// by even stricter charachter restrictions so it should be enough.
//
// On some incompliant browsers, additional translation of
// '>' and '<' into "&gt;" and "&lt;", respectively, might be needed;
// but I'm unaware of particular modern (last 4 years) versions
// with such problems, so let's not do it for performance.
// Also, some brousers will (wrongly) not process the entity references
// inside the attribute value and show the &...; form instead,
// so we won't create entites unless necessary to minimize clutter there.
// --vassilii
default: m_t << c;
}
}
}
void HtmlDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor)
{
QCString *dest;
......
......@@ -133,6 +133,7 @@ class HtmlDocVisitor : public DocVisitor
//--------------------------------------
void filter(const char *str);
void filterQuotedCdataAttr(const char* str);
void startLink(const QString &ref,const QString &file,
const QString &anchor);
void endLink();
......
......@@ -214,11 +214,17 @@ void HtmlGenerator::startFile(const char *name,const char *,
{
HtmlHelp::getInstance()->addIndexFile(fileName);
}
QCString dispTitle = title;
QCString projName = Config_getString("PROJECT_NAME");
if (!projName.isEmpty())
{
dispTitle.prepend(projName+": ");
}
lastFile = fileName;
if (g_header.isEmpty())
{
writeDefaultHeaderFile(t,title,external);
writeDefaultHeaderFile(t,dispTitle,external);
}
else
{
......
......@@ -66,6 +66,7 @@ HEADERS = bufstr.h \
outputgen.h \
outputlist.h \
page.h \
pagedef.h \
perlmodgen.h \
pngenc.h \
pre.h \
......@@ -161,6 +162,7 @@ SOURCES = ce_lex.cpp \
namespacedef.cpp \
outputgen.cpp \
outputlist.cpp \
pagedef.cpp \
perlmodgen.cpp \
pngenc.cpp \
pre.cpp \
......
......@@ -683,8 +683,9 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (prot!=Public)
{
Doxygen::tagFile << "\" protection=\"";
if (prot==Protected) Doxygen::tagFile << "public";
else /* Private */ Doxygen::tagFile << "protected";
if (prot==Protected) Doxygen::tagFile << "public";
else if (prot==Package) Doxygen::tagFile << "package";
else /* Private */ Doxygen::tagFile << "protected";
}
if (virt!=Normal)
{
......@@ -1226,6 +1227,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (isSettable()) sl.append("set");
if (protection()==Protected) sl.append("protected");
else if (protection()==Private) sl.append("private");
else if (protection()==Package) sl.append("package");
if (lvirt==Virtual) sl.append("virtual");
else if (lvirt==Pure) sl.append("pure virtual");
if (isSignal()) sl.append("signal");
......@@ -1811,7 +1813,7 @@ void MemberDef::addListReference(Definition *d)
}
}
//printf("*** addListReference %s todo=%d test=%d bug=%d\n",name().data(),todoId(),testId(),bugId());
addRefItem(specialListItems(),memLabel,
addRefItem(xrefListItems(),memLabel,
d->getOutputFileBase()+"#"+anchor(),memName,argsString());
}
......
......@@ -390,7 +390,7 @@ Definition *NamespaceDef::findInnerCompound(const char *n)
void NamespaceDef::addListReferences()
{
addRefItem(specialListItems(),
addRefItem(xrefListItems(),
theTranslator->trNamespace(TRUE,TRUE),
getOutputFileBase(),displayName()
);
......
......@@ -78,11 +78,11 @@ class BaseOutputDocInterface : public BaseCodeDocInterface
{
public:
enum ParamListTypes { Param, RetVal, Exception };
enum SectionTypes { See, Return, Author, Version,
enum SectionTypes { /*See, Return, Author, Version,
Since, Date, Bug, Note,
Warning, Par, Deprecated, Pre,
Post, Invar, Remark, Attention,
Todo, Test, RCS, EnumValues,
Todo, Test, RCS, */ EnumValues,
Examples
};
......
......@@ -27,7 +27,7 @@ class PageInfo
public:
PageInfo(const char *f, int l,const char *n,const char *d,const char *t) :
defFileName(f), defLine(l), name(n),
doc(d), title(t), context(0),specialListItems(0),m_inGroup(0)
doc(d), title(t), context(0), xrefListItems(0),m_inGroup(0)
{
sectionDict = new SectionDict(17);
}
......@@ -111,7 +111,7 @@ class PageInfo
// is this page part of a group
SectionDict *sectionDict;
QList<ListItemInfo> *specialListItems;
QList<ListItemInfo> *xrefListItems;
private:
GroupDef *m_inGroup;
......
#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)
case Public: return "public";
case Protected: return "protected";
case Private: return "private";
case Package: return "package";
}
return 0;
}
......
......@@ -20,22 +20,22 @@
/*! Create a list of items that are cross referenced with documentation blocks
* @param listName String representing the name of the list.
* @param optionName String representation of the option enabling the list.
* @param pageTitle String representing the title of the list page.
* @param secTitle String representing the title of the section.
* @param type Type of the section.
*/
RefList::RefList(const char *listName,const char *optionName,const char *pageTitle,
const char *secTitle,BaseOutputDocInterface::SectionTypes type)
RefList::RefList(const char *listName,
const char *pageTitle,
const char *secTitle
)
{
m_dict = 0;
m_dictIterator = 0;
m_id = 0;
m_listName = listName;
m_optionName = optionName;
//m_optionName = optionName;
m_pageTitle = pageTitle;
m_secTitle = secTitle;
m_type = type;
/*m_type = type;*/
}
/*! Destroy the todo list. Currently not called! */
......@@ -95,10 +95,10 @@ QCString RefList::listName() const
return m_listName;
}
QCString RefList::optionName() const
{
return m_optionName;
}
//QCString RefList::optionName() const
//{
// return m_optionName;
//}
QCString RefList::pageTitle() const
{
......@@ -110,8 +110,10 @@ QCString RefList::sectionTitle() const
return m_secTitle;
}
BaseOutputDocInterface::SectionTypes RefList::sectionType() const
{
return m_type;
}
//BaseOutputDocInterface::SectionTypes RefList::sectionType() const
//{
// return m_type;
//}
......@@ -21,7 +21,7 @@
#include "qtbc.h"
#include <qintdict.h>
#include "outputgen.h"
//#include "outputgen.h"
/*! This struct represents an item in the list of references. */
struct RefItem
......@@ -50,26 +50,26 @@ class RefList
RefItem *getFirstRefItem();
RefItem *getNextRefItem();
QCString listName() const;
QCString optionName() const;
//QCString optionName() const;
QCString pageTitle() const;
QCString sectionTitle() const;
BaseOutputDocInterface::SectionTypes sectionType() const;
//BaseOutputDocInterface::SectionTypes sectionType() const;
RefList(const char *listName,const char *optionName,
const char *pageTitle,const char *secTitle,
BaseOutputDocInterface::SectionTypes type
RefList(const char *listName,
const char *pageTitle,const char *secTitle
/*,BaseOutputDocInterface::SectionTypes type*/
);
~RefList();
private:
int m_id;
QCString m_listName;
QCString m_optionName;
//QCString m_optionName;
QCString m_pageTitle;
QCString m_secTitle;
QIntDict<RefItem> *m_dict;
QIntDictIterator<RefItem> *m_dictIterator;
BaseOutputDocInterface::SectionTypes m_type;
//BaseOutputDocInterface::SectionTypes m_type;
};
#endif
This diff is collapsed.
......@@ -389,6 +389,17 @@ class Translator
virtual QCString trEvents() = 0;
virtual QCString trEventDocumentation() = 0;
//////////////////////////////////////////////////////////////////////////
// new since 1.3
//////////////////////////////////////////////////////////////////////////
virtual QCString trPackageTypes() = 0;
virtual QCString trPackageMembers() = 0;
virtual QCString trStaticPackageMembers() = 0;
virtual QCString trPackageAttribs() = 0;
virtual QCString trStaticPackageAttribs() = 0;
};
#endif
......@@ -40,7 +40,26 @@ class TranslatorAdapterBase : public Translator
};
class TranslatorAdapter_1_2_18 : public TranslatorAdapterBase
class TranslatorAdapter_1_3 : public TranslatorAdapterBase
{
public:
virtual QCString updateNeededMessage()
{ return createUpdateNeededMessage(idLanguage(),"release 1.3"); }
virtual QCString trPackageTypes()
{ return english.trPackageTypes(); }
virtual QCString trPackageMembers()
{ return english.trPackageMembers(); }
virtual QCString trStaticPackageMembers()
{ return english.trStaticPackageMembers(); }
virtual QCString trPackageAttribs()
{ return english.trPackageAttribs(); }
virtual QCString trStaticPackageAttribs()
{ return english.trStaticPackageAttribs(); }
};
class TranslatorAdapter_1_2_18 : public TranslatorAdapter_1_3
{
public:
virtual QCString updateNeededMessage()
......
......@@ -32,7 +32,7 @@
#ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H
class TranslatorBrazilian: public Translator
class TranslatorBrazilian: public TranslatorAdapter_1_3
{
public:
......
......@@ -166,7 +166,7 @@
// probably slightly faster.
class TranslatorCzech : public Translator
class TranslatorCzech : public TranslatorAdapter_1_3
{
private:
/*! The decode() inline assumes the source written in the
......
......@@ -79,7 +79,7 @@
#ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H
class TranslatorGerman : public Translator
class TranslatorGerman : public TranslatorAdapter_1_3
{
public:
......
......@@ -71,7 +71,7 @@
#ifndef TRANSLATOR_DK_H
#define TRANSLATOR_DK_H
class TranslatorDanish : public Translator
class TranslatorDanish : public TranslatorAdapter_1_3
{
public:
......
......@@ -1433,6 +1433,46 @@ class TranslatorEnglish : public Translator
return "Event Documentation";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a heading for a list of Java class types with package scope.
*/
virtual QCString trPackageTypes()
{
return "Package Types";
}
/*! Used as a heading for a list of Java class functions with package
* scope.
*/
virtual QCString trPackageMembers()
{
return "Package Functions";
}
/*! Used as a heading for a list of static Java class functions with
* package scope.
*/
virtual QCString trStaticPackageMembers()
{
return "Static Package Functions";
}
/*! Used as a heading for a list of Java class variables with package
* scope.
*/
virtual QCString trPackageAttribs()
{
return "Package Attributes";
}
/*! Used as a heading for a list of static Java class variables with
* package scope.
*/
virtual QCString trStaticPackageAttribs()
{
return "Static Package Attributes";
}
};
#endif
......@@ -47,7 +47,7 @@
#ifndef TRANSLATOR_FR_H
#define TRANSLATOR_FR_H
class TranslatorFrench : public Translator
class TranslatorFrench : public TranslatorAdapter_1_3
{
public:
QCString idLanguage()
......
......@@ -53,7 +53,7 @@
#ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H
class TranslatorCroatian : public Translator
class TranslatorCroatian : public TranslatorAdapter_1_3
{
private:
/*! to avoid macro redefinition from translator_cz.h */
......
......@@ -67,7 +67,7 @@
#ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H
class TranslatorItalian : public Translator
class TranslatorItalian : public TranslatorAdapter_1_3
{
public:
......
......@@ -64,7 +64,7 @@ class TranslatorJapaneseEn : public TranslatorEnglish
}
};
class TranslatorJapanese : public Translator
class TranslatorJapanese : public TranslatorAdapter_1_3
{
private:
/*! The decode() can change euc into sjis */
......
......@@ -18,7 +18,7 @@
#ifndef TRANSLATOR_KR_H
#define TRANSLATOR_KR_H
class TranslatorKorean : public Translator
class TranslatorKorean : public TranslatorAdapter_1_3
{
public:
......
......@@ -1030,6 +1030,45 @@ class TranslatorDutch : public Translator
return "Event Documentatie";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a heading for a list of Java class types with package scope.
*/
virtual QCString trPackageTypes()
{
return "Package Types";
}
/*! Used as a heading for a list of Java class functions with package
* scope.
*/
virtual QCString trPackageMembers()
{
return "Package Functies";
}
/*! Used as a heading for a list of static Java class functions with
* package scope.
*/
virtual QCString trStaticPackageMembers()
{
return "Statische Package Functies";
}
/*! Used as a heading for a list of Java class variables with package
* scope.
*/
virtual QCString trPackageAttribs()
{
return "Package Attributen";
}
/*! Used as a heading for a list of static Java class variables with
* package scope.
*/
virtual QCString trStaticPackageAttribs()
{
return "Statische Package Attributen";
}
};
#endif
......@@ -20,7 +20,7 @@
#ifndef TRANSLATOR_PL_H
#define TRANSLATOR_PL_H
class TranslatorPolish : public Translator
class TranslatorPolish : public TranslatorAdapter_1_3
{
private:
/*! to avoid macro redefinition from translator_pl.h */
......
......@@ -48,7 +48,7 @@
#ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H
class TranslatorRussian : public Translator
class TranslatorRussian : public TranslatorAdapter_1_3
{
private:
/*! The Decode() inline assumes the source written in the
......
......@@ -2934,7 +2934,7 @@ QCString substituteKeywords(const QCString &s,const char *title)
*/
int getPrefixIndex(const QCString &name)
{
//printf("getPrefixIndex(%s) ni=%d\n",name.data(),ni);
if (name.isEmpty()) return 0;
QStrList &sl = Config_getList("IGNORE_PREFIX");
char *s = sl.first();
while (s)
......@@ -3624,16 +3624,16 @@ PageInfo *addRelatedPage(const char *name,const QCString &ptitle,
if (sli)
{
if (pi->specialListItems==0)
if (pi->xrefListItems==0)
{
pi->specialListItems=new QList<ListItemInfo>;
pi->specialListItems->setAutoDelete(TRUE);
pi->xrefListItems=new QList<ListItemInfo>;
pi->xrefListItems->setAutoDelete(TRUE);
}
QListIterator<ListItemInfo> slii(*sli);
ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii)
{
pi->specialListItems->append(new ListItemInfo(*lii));
pi->xrefListItems->append(new ListItemInfo(*lii));
}
}
......@@ -3700,10 +3700,16 @@ void addRefItem(const QList<ListItemInfo> *sli,
ListItemInfo *lii;
for (slii.toFirst();(lii=slii.current());++slii)
{
RefList *refList = Doxygen::specialLists->find(lii->type);
ASSERT(refList!=0);
if (Config_getBool(refList->optionName()))
RefList *refList = Doxygen::xrefLists->find(lii->type);
if (refList &&
(
// either not a built-in list or the list is enabled
(lii->type!="todo" || Config_getBool("GENERATE_TODOLIST")) &&
(lii->type!="test" || Config_getBool("GENERATE_TESTLIST")) &&
(lii->type!="bug" || Config_getBool("GENERATE_BUGLIST")) &&
(lii->type!="deprecated" || Config_getBool("GENERATE_DEPRECATEDLIST"))
)
)
{
RefItem *item = refList->getRefItem(lii->itemId);
ASSERT(item!=0);
......
......@@ -501,6 +501,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
case Package: t << "package"; break;
}
t << "\" static=\"";
if (md->isStatic()) t << "yes"; else t << "no";
......@@ -685,6 +686,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
case Package: t << "package"; break;
}
t << "\">" << endl;
t << " <name>";
......@@ -791,6 +793,7 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t)
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
case Package: t << "package"; break;
}
t << "\" virt=\"";
switch(virt)
......@@ -869,6 +872,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
case Package: ASSERT(0); break;
}
t << "\" virt=\"";
switch(bcd->virt)
......@@ -895,6 +899,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
case Public: t << "public"; break;
case Protected: t << "protected"; break;
case Private: t << "private"; break;
case Package: ASSERT(0); break;
}
t << "\" virt=\"";
switch(bcd->virt)
......
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