Commit e04496cb authored by Dimitri van Heesch's avatar Dimitri van Heesch

mods for doxygen-0.49-990522

parent 322885a8
DOXYGEN Version 0.49-990425 DOXYGEN Version 0.49-990522
INSTALLATION INSTRUCTIONS FOR UNIX: INSTALLATION INSTRUCTIONS FOR UNIX:
----------------------------------- -----------------------------------
1. Unpack the archive, unless you already have: 1. Unpack the archive, unless you already have:
gunzip doxygen-0.49-990425.src.tar.gz # uncompress the archive gunzip doxygen-0.49-990522.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-990425.src.tar # unpack it tar xf doxygen-0.49-990522.src.tar # unpack it
2. Make sure Qt is installed properly (check the environment variable $QTDIR) 2. Make sure Qt is installed properly (check the environment variable $QTDIR)
...@@ -80,6 +80,10 @@ You will need to install the windows/dos versions of following tools: ...@@ -80,6 +80,10 @@ You will need to install the windows/dos versions of following tools:
X-windows version as well!) X-windows version as well!)
- Microsoft Visual C++ version 5.0, use the vcvars32.bat to set the environment - Microsoft Visual C++ version 5.0, use the vcvars32.bat to set the environment
variables. variables.
- If you used WinZip to extract the tar archive it will (apparently) not
create empty folders, so you have to add the folders
`objects' and `bin' manually in the root of the distribution before
compiling.
Make sure all tools are accessible from the command-line. Make sure all tools are accessible from the command-line.
...@@ -97,6 +101,11 @@ nmake -f Makefile.windows examples ...@@ -97,6 +101,11 @@ nmake -f Makefile.windows examples
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
KNOWN CONFIGURATION PROBLEMS KNOWN CONFIGURATION PROBLEMS
HTML RELATED PROBLEMS:
- the indent continuously increases.
This seems to be a problem that can be observed with Netscape 4.01.
It is not present in many later and earlier versions.
LATEX RELATED PROBLEMS: LATEX RELATED PROBLEMS:
- the LaTeX translation of HTML tables doesn't seem to work for all - the LaTeX translation of HTML tables doesn't seem to work for all
...@@ -129,4 +138,4 @@ The latest version of doxygen can be obtained at ...@@ -129,4 +138,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (25 April 1999) Dimitri van Heesch (22 May 1999)
...@@ -9,4 +9,4 @@ PERL = perl ...@@ -9,4 +9,4 @@ PERL = perl
# The values below should probably be left unmodified # The values below should probably be left unmodified
TAR = tar # name of the GNU tar tool TAR = tar # name of the GNU tar tool
TMAKE = ../tmake/bin/tmake TMAKE = ../tmake/bin/tmake
VERSION = 0.49-990425 VERSION = 0.49-990522
DOXYGEN Version 0.49-990425 DOXYGEN Version 0.49-990522
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (25 April 1999) Dimitri van Heesch (22 May 1999)
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
Most documentation systems have special `see also' sections where links Most documentation systems have special `see also' sections where links
to other pieces of documentation can be inserted. to other pieces of documentation can be inserted.
Although doxygen also has a command to start such a section (See section Although doxygen also has a command to start such a section (See section
\ref cmdsa), it does allow you to put these kind of links anywhere in the \ref cmdsa "\\sa"), it does allow you to put these kind of links anywhere in the
documentation. documentation.
For \f$\mbox{\LaTeX}\f$ documentation a reference to the page number For \f$\mbox{\LaTeX}\f$ documentation a reference to the page number
is written instead of a link. Furthermore, the index at the end of the is written instead of a link. Furthermore, the index at the end of the
...@@ -93,20 +93,7 @@ ...@@ -93,20 +93,7 @@
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
\subsection resolving Resolving of defines and typedefs. \subsection resolving typedefs.
Macro definitions of the form:
\verbatim
#define TypeName ClassName
\endverbatim
will be resolved inside documentation blocks.
\par Example:
\verbinclude resdefine.cpp
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/resdefine/html/exportedname.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
Typedefs that involve classes, structs and unions, like Typedefs that involve classes, structs and unions, like
\verbatim \verbatim
......
...@@ -42,6 +42,7 @@ documentation: ...@@ -42,6 +42,7 @@ documentation:
\endlatexonly \endlatexonly
<li> \refitem cmda \a <li> \refitem cmda \a
<li> \refitem cmdaddindex \addindex <li> \refitem cmdaddindex \addindex
<li> \refitem cmdanchor \anchor
<li> \refitem cmdarg \arg <li> \refitem cmdarg \arg
<li> \refitem cmdauthor \author <li> \refitem cmdauthor \author
<li> \refitem cmdb \b <li> \refitem cmdb \b
...@@ -148,7 +149,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -148,7 +149,7 @@ Doxygen. Unrecognized commands are treated as normal text.
classes and members that are documented are automatically replaced by classes and members that are documented are automatically replaced by
links to the documentation. links to the documentation.
\sa section \ref cmdendcode, section \ref cmdverbatim \sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim"
<hr> <hr>
\subsection cmddef \def <name> \subsection cmddef \def <name>
...@@ -172,14 +173,14 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -172,14 +173,14 @@ Doxygen. Unrecognized commands are treated as normal text.
group of classes, files or namespaces. This can be used to group of classes, files or namespaces. This can be used to
categorize classes, files or namespaces, and document those categorize classes, files or namespaces, and document those
categories. categories.
\sa section \ref cmdingroup \sa section \ref cmdingroup "\\ingroup"
<hr> <hr>
\subsection cmdendcode \endcode \subsection cmdendcode \endcode
\addindex \endcode \addindex \endcode
Ends a block of code. Ends a block of code.
\sa section \ref cmdcode \sa section \ref cmdcode "\\code"
<hr> <hr>
\subsection cmdenum \enum <name> \subsection cmdenum \enum <name>
...@@ -226,7 +227,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -226,7 +227,7 @@ Doxygen. Unrecognized commands are treated as normal text.
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
\sa section \ref cmdinclude. \sa section \ref cmdinclude "\\include".
<hr> <hr>
\subsection cmdfile \file [<name>] \subsection cmdfile \file [<name>]
...@@ -266,7 +267,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -266,7 +267,7 @@ Doxygen. Unrecognized commands are treated as normal text.
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
\sa section \ref cmdvar and \ref cmdtypedef \sa section \ref cmdvar "\\var" and \ref cmdtypedef "\\typedef".
<hr> <hr>
\subsection cmdingroup \ingroup <groupname> \subsection cmdingroup \ingroup <groupname>
...@@ -275,7 +276,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -275,7 +276,7 @@ Doxygen. Unrecognized commands are treated as normal text.
If the \\ingroup command is placed in a comment block of a If the \\ingroup command is placed in a comment block of a
class, file or namespace, then it will be added to the group. class, file or namespace, then it will be added to the group.
\sa section \ref cmddefgroup \sa section \ref cmddefgroup "\\defgroup".
<hr> <hr>
\subsection cmdinternal \internal \subsection cmdinternal \internal
...@@ -337,8 +338,9 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -337,8 +338,9 @@ Doxygen. Unrecognized commands are treated as normal text.
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
\sa section \ref cmdsection, section \ref cmdsubsection, and \sa section \ref cmdsection "\\section", section
section \ref cmdref \ref cmdsubsection "\\subsection", and section
\ref cmdref "\\ref".
<hr> <hr>
\subsection cmdrelates \relates <name> \subsection cmdrelates \relates <name>
...@@ -366,7 +368,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -366,7 +368,7 @@ Doxygen. Unrecognized commands are treated as normal text.
struct with name \<name\>. The arguments are equal to the \\class struct with name \<name\>. The arguments are equal to the \\class
command. command.
\sa section \ref cmdclass. \sa section \ref cmdclass "\\class".
<hr> <hr>
\subsection cmdtypedef \typedef (typedef declaration) \subsection cmdtypedef \typedef (typedef declaration)
...@@ -376,7 +378,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -376,7 +378,7 @@ Doxygen. Unrecognized commands are treated as normal text.
typedef (either global or as a member of a class). typedef (either global or as a member of a class).
This command is equivalent to \\var and \\fn. This command is equivalent to \\var and \\fn.
\sa section \ref cmdfn and \ref cmdvar \sa section \ref cmdfn "\\fn" and \ref cmdvar "\\var".
<hr> <hr>
\subsection cmdunion \union <name> [<header-file>] [<header-name>] \subsection cmdunion \union <name> [<header-file>] [<header-name>]
...@@ -386,7 +388,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -386,7 +388,7 @@ Doxygen. Unrecognized commands are treated as normal text.
union with name \<name\>. The arguments are equal to the \\class union with name \<name\>. The arguments are equal to the \\class
command. command.
\sa section \ref cmdclass. \sa section \ref cmdclass "\\class".
<hr> <hr>
\subsection cmdvar \var (variable declaration) \subsection cmdvar \var (variable declaration)
...@@ -396,7 +398,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -396,7 +398,7 @@ Doxygen. Unrecognized commands are treated as normal text.
enum value (either global or as a member of a class). enum value (either global or as a member of a class).
This command is equivalent to \\typedef and \\fn. This command is equivalent to \\typedef and \\fn.
\sa section \ref cmdfn and \cmdtypedef \sa section \ref cmdfn "\\fn" and \ref cmdtypedef "\\typedef".
<hr> <hr>
...@@ -423,7 +425,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -423,7 +425,7 @@ Doxygen. Unrecognized commands are treated as normal text.
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
\sa Section \ref cmdjdauthor. \sa Section \ref cmdjdauthor "@author".
<hr> <hr>
\subsection cmdbrief \brief {brief description} \subsection cmdbrief \brief {brief description}
...@@ -437,9 +439,9 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -437,9 +439,9 @@ Doxygen. Unrecognized commands are treated as normal text.
it is advised to keep it brief!). A brief description ends when a it is advised to keep it brief!). A brief description ends when a
blank line or another sectioning command is encountered. If multiple blank line or another sectioning command is encountered. If multiple
\\brief commands are present they will be joined. See section \\brief commands are present they will be joined. See section
\ref cmdauthor for an example. \ref cmdauthor "\\author" for an example.
\sa Section \ref cmdjdshort \sa Section \ref cmdjdshort "@short".
<hr> <hr>
\subsection cmdbug \bug { bug description } \subsection cmdbug \bug { bug description }
...@@ -453,8 +455,8 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -453,8 +455,8 @@ Doxygen. Unrecognized commands are treated as normal text.
Each bug description will start on a new line. Each bug description will start on a new line.
Alternatively, one \\bug command may mention Alternatively, one \\bug command may mention
several bugs. The \\bug command ends when a blank line or some other several bugs. The \\bug command ends when a blank line or some other
sectioning command is encountered. See section \ref cmdauthor for an sectioning command is encountered. See section \ref cmdauthor "\\author"
example. for an example.
<hr> <hr>
\subsection cmddate \date { date description } \subsection cmddate \date { date description }
...@@ -468,10 +470,10 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -468,10 +470,10 @@ Doxygen. Unrecognized commands are treated as normal text.
Each date description will start on a new line. Each date description will start on a new line.
Alternatively, one \\date command may mention Alternatively, one \\date command may mention
several dates. The \\date command ends when a blank line or some other several dates. The \\date command ends when a blank line or some other
sectioning command is encountered. See section \ref cmdauthor for an sectioning command is encountered. See section \ref cmdauthor "\\author"
example. for an example.
\sa Section \ref cmdjddate. \sa Section \ref cmdjddate "@date".
<hr> <hr>
\subsection cmdpar \par (paragraph title) { paragraph } \subsection cmdpar \par (paragraph title) { paragraph }
...@@ -504,10 +506,10 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -504,10 +506,10 @@ Doxygen. Unrecognized commands are treated as normal text.
Multiple adjacent \\param commands will be joined into a single paragraph. Multiple adjacent \\param commands will be joined into a single paragraph.
Each parameter description will start on a new line. Each parameter description will start on a new line.
The \\param description ends when a blank line or some other The \\param description ends when a blank line or some other
sectioning command is encountered. See section \ref cmdfn for an sectioning command is encountered. See section \ref cmdfn "\\fn" for an
example. example.
\sa Section \ref cmdjdparam. \sa Section \ref cmdjdparam "@param".
<hr> <hr>
\subsection cmdexception \exception <exception-object> { exception description } \subsection cmdexception \exception <exception-object> { exception description }
...@@ -521,10 +523,10 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -521,10 +523,10 @@ Doxygen. Unrecognized commands are treated as normal text.
Multiple adjacent \\exception commands will be joined into a single paragraph. Multiple adjacent \\exception commands will be joined into a single paragraph.
Each parameter description will start on a new line. Each parameter description will start on a new line.
The \\exception description ends when a blank line or some other The \\exception description ends when a blank line or some other
sectioning command is encountered. See section \ref cmdfn for an sectioning command is encountered. See section \ref cmdfn "\\fn" for an
example. example.
\sa Section \ref cmdjdexception. \sa Section \ref cmdjdexception "@exception".
<hr> <hr>
\subsection cmdreturn \return { description of the return value } \subsection cmdreturn \return { description of the return value }
...@@ -535,10 +537,10 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -535,10 +537,10 @@ Doxygen. Unrecognized commands are treated as normal text.
enhancement commands may be used inside the paragraph. enhancement commands may be used inside the paragraph.
Multiple adjacent \\return commands will be joined into a single paragraph. Multiple adjacent \\return commands will be joined into a single paragraph.
The \\return description ends when a blank line or some other The \\return description ends when a blank line or some other
sectioning command is encountered. See section \ref cmdfn for an sectioning command is encountered. See section \ref cmdfn "\\fn" for an
example. example.
\sa Section \ref cmdjdreturn. \sa Section \ref cmdjdreturn "@return".
<hr> <hr>
\subsection cmdsa \sa { references } \subsection cmdsa \sa { references }
...@@ -551,8 +553,8 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -551,8 +553,8 @@ Doxygen. Unrecognized commands are treated as normal text.
may be selected by including a parenthesized list of argument types after may be selected by including a parenthesized list of argument types after
the method. the method.
\sa section \ref autolink for information on how to create links to objects \sa section \ref autolink "\\autolink" for information on how to create links to objects
and section \ref cmdjdsee for the JavaDoc version of this command. and section \ref cmdjdsee "@see" for the JavaDoc version of this command.
<hr> <hr>
\subsection cmdversion \version { version number } \subsection cmdversion \version { version number }
...@@ -566,10 +568,10 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -566,10 +568,10 @@ Doxygen. Unrecognized commands are treated as normal text.
Each version description will start on a new line. Each version description will start on a new line.
Alternatively, one \\version command may mention Alternatively, one \\version command may mention
several dates. The \\version command ends when a blank line or some other several dates. The \\version command ends when a blank line or some other
sectioning command is encountered. See section \ref cmdauthor for an sectioning command is encountered. See section \ref cmdauthor "\\author"
example. for an example.
\sa Section \ref cmdjdversion. \sa Section \ref cmdjdversion "@version".
<hr> <hr>
\subsection cmdwarning \warning { warning message } \subsection cmdwarning \warning { warning message }
...@@ -583,25 +585,35 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -583,25 +585,35 @@ Doxygen. Unrecognized commands are treated as normal text.
Each warning description will start on a new line. Each warning description will start on a new line.
Alternatively, one \\warning command may mention Alternatively, one \\warning command may mention
several warnings. The \\warning command ends when a blank line or some other several warnings. The \\warning command ends when a blank line or some other
sectioning command is encountered. See section \ref cmdauthor for an sectioning command is encountered. See section \ref cmdauthor "\\author"
example. for an example.
<hr>
<h2>\htmlonly <center> --- \endhtmlonly <h2>\htmlonly <center> --- \endhtmlonly
Commands to create links Commands to create links
\htmlonly --- </center>\endhtmlonly</h2> \htmlonly --- </center>\endhtmlonly</h2>
\subsection cmdaddindex \addindex <word> \subsection cmdaddindex \addindex (text)
\addindex \addindex \addindex \addindex
This command adds \<word\> to the \htmlonly LaTeX\endhtmlonly This command adds (text) to the \f$\mbox{\LaTeX}\f$ index.
\latexonly\LaTeX\ \endlatexonly index.
<hr>
\subsection cmdanchor \anchor <word>
\addindex \anchor
This command places an invisble, named anchor into to documentation
to which you can refer with the \\ref command.
\sa section \ref cmdref "\\ref".
<hr>
\subsection cmdendlink \endlink \subsection cmdendlink \endlink
\addindex \endlink \addindex \endlink
This command ends a link that is started with the \\link command. This command ends a link that is started with the \\link command.
\sa section \ref cmdlink. \sa section \ref cmdlink "\\link".
<hr> <hr>
\subsection cmdlink \link <link-object> \subsection cmdlink \link <link-object>
...@@ -616,25 +628,28 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -616,25 +628,28 @@ Doxygen. Unrecognized commands are treated as normal text.
the \\link and \\endlink commands serves as text for a link to the \\link and \\endlink commands serves as text for a link to
the \<link-object\> specified as the first argument of \\link. the \<link-object\> specified as the first argument of \\link.
See section \ref autolink for more information on automatically See section \ref autolink "\\autolink" for more information on automatically
generated links and valid link-objects. generated links and valid link-objects.
\b Notice: \b Notice:
Keep in mind that links are only meaningful in HTML text; Keep in mind that links are only meaningful in HTML text;
in \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly in \f$\mbox{\LaTeX}\f$ text, the link text is just written to the output.
text, the link text is just written to the output.
<hr> <hr>
\subsection cmdref \ref <section-name> \subsection cmdref \ref <name> ["(text)"]
\addindex \ref \addindex \ref
Creates a reference to a named section, subsection, or page. Creates a reference to a named section, subsection, page or anchor.
For HTML documentation the reference command will generate a link to For HTML documentation the reference command will generate a link to
the section, the title of the section will be used as the link text. the section. For a sections or subsections the title of the section will be
For \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly documentation the reference command will generate a section used as the text of the link. For anchor the optional text between quotes
number. will be used or \<name\> if no text is specified.
For \f$\mbox{\LaTeX}\f$ documentation the reference command will
generate a section number for sections or the text followed by a
page number if \<name\> refers to an anchor.
See section \ref cmdpage for an example of the \\ref command. \sa
Section \ref cmdpage "\\page" for an example of the \\ref command.
<hr> <hr>
\subsection cmdsection \section <section-name> (section title) \subsection cmdsection \section <section-name> (section title)
...@@ -644,7 +659,11 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -644,7 +659,11 @@ Doxygen. Unrecognized commands are treated as normal text.
section should be specified as the second argument of the \\section section should be specified as the second argument of the \\section
command. command.
See section \ref cmdpage for an example of the \\cmdsection command. \warning This command only works inside related page documentation and
\e not in other documentation blocks!
\sa
Section \ref cmdpage "\\page" for an example of the \\cmdsection command.
<hr> <hr>
\subsection cmdsubsection \subsection <subsection-name> (subsection title) \subsection cmdsubsection \subsection <subsection-name> (subsection title)
...@@ -653,7 +672,11 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -653,7 +672,11 @@ Doxygen. Unrecognized commands are treated as normal text.
subsection should be specified as the second argument of the \\subsection subsection should be specified as the second argument of the \\subsection
command. command.
See section \ref cmdpage for an example of the \\cmdsubsection command. \warning This command only works inside related page documentation and
\e not in other documentation blocks!
\sa
Section \ref cmdpage "\\page" for an example of the \\cmdsubsection command.
<hr> <hr>
<h2>\htmlonly <center> --- \endhtmlonly <h2>\htmlonly <center> --- \endhtmlonly
...@@ -682,7 +705,8 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -682,7 +705,8 @@ Doxygen. Unrecognized commands are treated as normal text.
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
\sa sections \ref cmdline, \ref cmdskip, \ref cmdskipline, and \ref cmduntil. \sa sections \ref cmdline "\\line", \ref cmdskip "\\skip",
\ref cmdskipline "\\skipline", and \ref cmduntil "\\until".
<hr> <hr>
\subsection cmdinclude \include <file-name> \subsection cmdinclude \include <file-name>
...@@ -706,7 +730,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -706,7 +730,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\\until commands. An internal pointer is used for these command. The \\until commands. An internal pointer is used for these command. The
\\include command sets the pointer to the first line of the example. \\include command sets the pointer to the first line of the example.
\sa section \ref cmdexample and \ref cmddontinclude. \sa section \ref cmdexample "\\example" and \ref cmddontinclude "\\dontinclude".
<hr> <hr>
\subsection cmdline \line ( pattern ) \subsection cmdline \line ( pattern )
...@@ -722,7 +746,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -722,7 +746,7 @@ Doxygen. Unrecognized commands are treated as normal text.
line that was found (or to the end of the example if no such line could line that was found (or to the end of the example if no such line could
be found). be found).
See section \ref cmddontinclude for an example. See section \ref cmddontinclude "\\dontinclude" for an example.
<hr> <hr>
\subsection cmdskip \skip ( pattern ) \subsection cmdskip \skip ( pattern )
...@@ -736,7 +760,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -736,7 +760,7 @@ Doxygen. Unrecognized commands are treated as normal text.
the example, is set to the start of the line that contains the specified the example, is set to the start of the line that contains the specified
pattern (or to the end of the example if the pattern could not be found). pattern (or to the end of the example if the pattern could not be found).
See section \ref cmddontinclude for an example. See section \ref cmddontinclude "\\dontinclude" for an example.
<hr> <hr>
\subsection cmdskipline \skipline ( pattern ) \subsection cmdskipline \skipline ( pattern )
...@@ -758,7 +782,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -758,7 +782,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\skip pattern \skip pattern
\line pattern\endverbatim \line pattern\endverbatim
See section \ref cmddontinclude for an example. See section \ref cmddontinclude "\\dontinclude" for an example.
<hr> <hr>
\subsection cmduntil \until ( pattern ) \subsection cmduntil \until ( pattern )
...@@ -773,7 +797,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -773,7 +797,7 @@ Doxygen. Unrecognized commands are treated as normal text.
the example, is set to the start of the line following last written the example, is set to the start of the line following last written
line (or to the end of the example if the pattern could not be found). line (or to the end of the example if the pattern could not be found).
See section \ref cmddontinclude for an example. See section \ref cmddontinclude "\\dontinclude" for an example.
<hr> <hr>
\subsection cmdverbinclude \verbinclude <file-name> \subsection cmdverbinclude \verbinclude <file-name>
...@@ -875,7 +899,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -875,7 +899,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\addindex \endhtmlonly \addindex \endhtmlonly
Ends a block of text that was started with a \\htmlonly command. Ends a block of text that was started with a \\htmlonly command.
\sa section \ref cmdhtmlonly. \sa section \ref cmdhtmlonly "\\htmlonly".
<hr> <hr>
\subsection cmdendlatexonly \endlatexonly \subsection cmdendlatexonly \endlatexonly
...@@ -883,7 +907,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -883,7 +907,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\addindex \endlatexonly \addindex \endlatexonly
Ends a block of text that was started with a \\latexonly command. Ends a block of text that was started with a \\latexonly command.
\sa section \ref cmdlatexonly. \sa section \ref cmdlatexonly "\\latexonly".
<hr> <hr>
\subsection cmdendverbatim \endverbatim \subsection cmdendverbatim \endverbatim
...@@ -891,7 +915,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -891,7 +915,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\addindex \endverbatim \addindex \endverbatim
Ends a block of text that was started with a \\verbatim command. Ends a block of text that was started with a \\verbatim command.
\sa section \ref cmdverbatim. \sa section \ref cmdverbatim "\\verbatim".
<hr> <hr>
\subsection cmdfdollar \f$ \subsection cmdfdollar \f$
...@@ -899,7 +923,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -899,7 +923,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\addindex \\f$ \addindex \\f$
Marks the start and end of an in-text formula. Marks the start and end of an in-text formula.
\sa section \ref formulas for an example. \sa section \ref formulas "formulas" for an example.
<hr> <hr>
\subsection cmdfbropen \f[ \subsection cmdfbropen \f[
...@@ -908,7 +932,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -908,7 +932,7 @@ Doxygen. Unrecognized commands are treated as normal text.
Marks the start of a long formula that is displayed Marks the start of a long formula that is displayed
centered on a separate line. centered on a separate line.
\sa section \ref cmdfbrclose and section \ref formulas. \sa section \ref cmdfbrclose "\\f]" and section \ref formulas "formulas".
<hr> <hr>
\subsection cmdfbrclose \f] \subsection cmdfbrclose \f]
...@@ -917,7 +941,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -917,7 +941,7 @@ Doxygen. Unrecognized commands are treated as normal text.
Marks the end of a long formula that is displayed Marks the end of a long formula that is displayed
centered on a separate line. centered on a separate line.
\sa section \ref cmdfbropen and section \ref formulas. \sa section \ref cmdfbropen ""\\f[" and section \ref formulas "formulas".
<hr> <hr>
\subsection cmdhtmlonly \htmlonly \subsection cmdhtmlonly \htmlonly
...@@ -930,38 +954,42 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -930,38 +954,42 @@ Doxygen. Unrecognized commands are treated as normal text.
This command can be used to include HTML code that is too complex This command can be used to include HTML code that is too complex
for Doxygen (i.e. images, applets, java-scripts, and HTML tags that for Doxygen (i.e. images, applets, java-scripts, and HTML tags that
require attributes). You can use the \\latexonly and \\endlatexonly require attributes). You can use the \\latexonly and \\endlatexonly
pair to provide a proper \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly alternative. pair to provide a proper \f$\mbox{\LaTeX}\f$ alternative.
\b Notice: \b Notice:
environment variables (like \$(HOME) ) are resolved inside a environment variables (like \$(HOME) ) are resolved inside a
HTML-only block. HTML-only block.
\sa section \ref cmdhtmlonly and section \ref cmdlatexonly. \sa section \ref cmdhtmlonly "\\htmlonly" and section
\ref cmdlatexonly "\\latexonly".
<hr> <hr>
\subsection cmdlatexonly \latexonly \subsection cmdlatexonly \latexonly
\addindex \latexonly \addindex \latexonly
Starts a block of text that will be verbatim included in the Starts a block of text that will be verbatim included in the
generated \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly documentation only. The block ends with a generated \f$\mbox{\LaTeX}\f$ documentation only. The block ends with a
endlatexonly command. endlatexonly command.
This command can be used to include \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly code that is too complex This command can be used to include \f$\mbox{\LaTeX}\f$ code that is too
for Doxygen (i.e. images, formulas, special characters). You can use the complex for Doxygen (i.e. images, formulas, special characters). You can
\\htmlonly and \\endhtmlonly pair to provide a proper HTML alternative. use the \\htmlonly and \\endhtmlonly pair to provide a proper HTML
alternative.
\b Notice: \b Notice:
environment variables (like \$(HOME) ) are resolved inside a environment variables (like \$(HOME) ) are resolved inside a
\htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\endlatexonly-only block. \f$\mbox{\LaTeX}\f$-only block.
\sa section \ref cmdlatexonly and section \ref cmdhtmlonly. \sa section \ref cmdlatexonly "\\latexonly"
and section \ref cmdhtmlonly "\\htmlonly".
<hr> <hr>
\subsection cmdverbatim \verbatim \subsection cmdverbatim \verbatim
\addindex \verbatim \addindex \verbatim
Starts a block of text that will be verbatim included in both the Starts a block of text that will be verbatim included in both the
HTML and the \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly documentation. The block should end with a HTML and the
\f$\mbox{\LaTeX}\f$ documentation. The block should end with a
\\endverbatim block. All commands are disabled in a verbatim block. \\endverbatim block. All commands are disabled in a verbatim block.
\warning Make sure you include a \\endverbatim command for each \warning Make sure you include a \\endverbatim command for each
...@@ -971,30 +999,32 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -971,30 +999,32 @@ Doxygen. Unrecognized commands are treated as normal text.
\subsection cmdbackslash \\ \subsection cmdbackslash \\
\addindex \\ \addindex \\
This command writes a backslash character (\\) to the HTML and \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly output. This command writes a backslash character (\\) to the HTML and
The backslash has to be escaped in some cases because Doxygen uses it to \f$\mbox{\LaTeX}\f$ output. The backslash has to be escaped in some
detect commands. cases because Doxygen uses it to detect commands.
<hr> <hr>
\subsection cmdat \@ \subsection cmdat \@
\addindex \@ \addindex \@
This command writes an at-sign (@) to the HTML and \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly output. This command writes an at-sign (@) to the HTML and
The at-sign has to be escaped in some cases because Doxygen uses it to \f$\mbox{\LaTeX}\f$ output. The at-sign has to be escaped in some cases
detect JavaDoc commands. because Doxygen uses it to detect JavaDoc commands.
<hr> <hr>
\subsection cmdamp \& \subsection cmdamp \&
\addindex \& \addindex \&
This command writes the \& character to the HTML and \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly output. This This command writes the \& character to the HTML and
character has to be escaped because it has a special meaning in HTML. \f$\mbox{\LaTeX}\f$ output. This character has to be escaped because
it has a special meaning in HTML.
<hr> <hr>
\subsection cmddollar \$ \subsection cmddollar \$
\addindex \$ \addindex \$
This command writes the \$ character to the HTML and \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly output. This This command writes the \$ character to the HTML and
\f$\mbox{\LaTeX}\f$ output. This
character has to be escaped in some cases, because it is used to expand character has to be escaped in some cases, because it is used to expand
environment variables. environment variables.
...@@ -1002,7 +1032,8 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -1002,7 +1032,8 @@ Doxygen. Unrecognized commands are treated as normal text.
\subsection cmdhash \# \subsection cmdhash \#
\addindex \# \addindex \#
This command writes the \# character to the HTML and \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly output. This This command writes the \# character to the HTML and
\f$\mbox{\LaTeX}\f$ output. This
character has to be escaped in some cases, because it is used to refer character has to be escaped in some cases, because it is used to refer
to documented entities. to documented entities.
...@@ -1010,14 +1041,16 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -1010,14 +1041,16 @@ Doxygen. Unrecognized commands are treated as normal text.
\subsection cmdlt \\< \subsection cmdlt \\<
\addindex \\< \addindex \\<
This command writes the \< character to the HTML and \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly output. This This command writes the \< character to the HTML and
\f$\mbox{\LaTeX}\f$ output. This
character has to be escaped because it has a special meaning in HTML. character has to be escaped because it has a special meaning in HTML.
<hr> <hr>
\subsection cmdgt \\> \subsection cmdgt \\>
\addindex \\> \addindex \\>
This command writes the \> character to the HTML and \htmlonly LaTeX\endhtmlonly\latexonly\LaTeX\ \endlatexonly output. This This command writes the \> character to the HTML and
\f$\mbox{\LaTeX}\f$ output. This
character has to be escaped because it has a special meaning in HTML. character has to be escaped because it has a special meaning in HTML.
<hr> <hr>
...@@ -1030,28 +1063,28 @@ The following command JavaDoc command are support. ...@@ -1030,28 +1063,28 @@ The following command JavaDoc command are support.
\subsection cmdjdauthor @author { list of authors } \subsection cmdjdauthor @author { list of authors }
\addindex @author \addindex @author
Equivalent to \\author (see section \ref cmdauthor). Equivalent to \\author (see section \ref cmdauthor "\\author").
\subsection cmdjddate @date { date description } \subsection cmdjddate @date { date description }
\addindex @date \addindex @date
Equivalent to \\date (see section \ref cmddate). Equivalent to \\date (see section \ref cmddate "\\date").
\subsection cmdjdparam @param <parameter-name> { parameter-description } \subsection cmdjdparam @param <parameter-name> { parameter-description }
\addindex @param \addindex @param
Equivalent to \\param (see section \ref cmdparam). Equivalent to \\param (see section \ref cmdparam "\\param").
\subsection cmdjdexception @exception <exception-object> { exception-description } \subsection cmdjdexception @exception <exception-object> { exception-description }
\addindex @exception \addindex @exception
Equivalent to \\exception (see section \ref cmdexception). Equivalent to \\exception (see section \ref cmdexception "\\exception").
\subsection cmdjdreturn @return { description of the return value } \subsection cmdjdreturn @return { description of the return value }
\addindex @return \addindex @return
Equivalent to \\return (see section \ref cmdreturn). Equivalent to \\return (see section \ref cmdreturn "\\return").
\subsection cmdjdsee @see { references } \subsection cmdjdsee @see { references }
\addindex @see \addindex @see
Equivalent to \\sa (see section \ref cmdsa). Equivalent to \\sa (see section \ref cmdsa "\\sa").
\subsection cmdjdshort @short { brief description } \subsection cmdjdshort @short { brief description }
\addindex @short \addindex @short
Equivalent to \\brief (see section \ref cmdbrief). Equivalent to \\brief (see section \ref cmdbrief "\\brief").
\subsection cmdjdversion @version { version number } \subsection cmdjdversion @version { version number }
\addindex @version \addindex @version
Equivalent to \\version (see section \ref cmdversion). Equivalent to \\version (see section \ref cmdversion "\\version").
<h2>\htmlonly <center> --- \endhtmlonly <h2>\htmlonly <center> --- \endhtmlonly
Commands included for Qt compatibility Commands included for Qt compatibility
......
...@@ -169,7 +169,7 @@ Below is a list of tags that are recognized for each category. ...@@ -169,7 +169,7 @@ Below is a list of tags that are recognized for each category.
If the VERBATIM_HEADERS tag is set the YES (the default) then Doxygen\n"; If the VERBATIM_HEADERS tag is set the YES (the default) then Doxygen\n";
will generate a verbatim copy of the header file for each class for\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"; which an include is specified. Set to NO to disable this.\n";
\sa Section \ref cmdclass. \sa Section \ref cmdclass "\\class".
</dl> </dl>
...@@ -216,7 +216,7 @@ Below is a list of tags that are recognized for each category. ...@@ -216,7 +216,7 @@ Below is a list of tags that are recognized for each category.
\addindex EXAMPLE_PATH \addindex EXAMPLE_PATH
The \c EXAMPLE_PATH tag can be used to specify one or more files or The \c EXAMPLE_PATH tag can be used to specify one or more files or
directories that contain example code fragments that are included (see directories that contain example code fragments that are included (see
the \\include command in section \ref cmdinclude). the \\include command in section \ref cmdinclude "\\include").
<dt>\c INCLUDE_PATH <dd> <dt>\c INCLUDE_PATH <dd>
\addindex INCLUDE_PATH \addindex INCLUDE_PATH
...@@ -262,6 +262,7 @@ Below is a list of tags that are recognized for each category. ...@@ -262,6 +262,7 @@ Below is a list of tags that are recognized for each category.
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>My title</TITLE> <TITLE>My title</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF"> <BODY BGCOLOR="#FFFFFF">
\endverbatim \endverbatim
...@@ -341,6 +342,10 @@ EXTRA_PACKAGES = times ...@@ -341,6 +342,10 @@ EXTRA_PACKAGES = times
A directory man3 will be created inside the directory specified by A directory man3 will be created inside the directory specified by
\c MAN_OUTPUT. \c MAN_OUTPUT.
<dt>\c MAN_EXTENSION <dd>
\addindex MAX_EXTENSION
The MAN_EXTENSION tag determines the extension that is added to
the generated man pages (default is the subroutine's section .3)
</dl> </dl>
\subsection config_prepro Preprocessor related options \subsection config_prepro Preprocessor related options
......
...@@ -155,8 +155,9 @@ Ole Gerden, ...@@ -155,8 +155,9 @@ Ole Gerden,
Olaf Meeuwissen, Olaf Meeuwissen,
Feiyi Wang, Feiyi Wang,
Robert J. Clark, Robert J. Clark,
Matthias Baas and Matthias Baas,
Walter Mueller Walter Mueller, and
William van Dieten
for suggestions, patches and bug reports. for suggestions, patches and bug reports.
</ul> </ul>
*/ */
......
...@@ -62,6 +62,11 @@ Furthermore, I would appreciate a mail if you have found ...@@ -62,6 +62,11 @@ Furthermore, I would appreciate a mail if you have found
a bug, or if you have ideas (or even better some code or a patch) a bug, or if you have ideas (or even better some code or a patch)
how to fix existing bugs and limitations. how to fix existing bugs and limitations.
The easiest way for me to solve bugs is if you can send me a small example
demonstrating the problem you have (make sure the example compiles!). It is
usually a good idea to send along the configuation file as well, but please
use doxygen with the <code>-s</code> flag while generating it.
My email address: <a href="mailto:dimitri@stack.nl">dimitri@stack.nl</a> My email address: <a href="mailto:dimitri@stack.nl">dimitri@stack.nl</a>
*/ */
...@@ -37,7 +37,7 @@ static QString stripExtension(const char *fName) ...@@ -37,7 +37,7 @@ static QString stripExtension(const char *fName)
} }
// constructs a new class definition // constructs a new class definition
ClassDef::ClassDef(const char *nm,int ct,const char *ref,const char *fName) ClassDef::ClassDef(const char *nm,CompoundType ct,const char *ref,const char *fName)
: Definition(removeRedundantWhiteSpace(nm)) : Definition(removeRedundantWhiteSpace(nm))
{ {
//name=n; //name=n;
...@@ -155,7 +155,7 @@ void ClassDef::insertMember(const MemberDef *md) ...@@ -155,7 +155,7 @@ void ClassDef::insertMember(const MemberDef *md)
if (md->isFriend() || md->protection()!=Private || extractPrivateFlag) if (md->isFriend() || md->protection()!=Private || extractPrivateFlag)
{ {
MemberInfo *mi = new MemberInfo((MemberDef *)md,Public,Normal); MemberInfo *mi = new MemberInfo((MemberDef *)md,Public,Normal);
MemberNameInfo *mni; MemberNameInfo *mni=0;
if ((mni=(*allMemberNameInfoDict)[md->name()])) if ((mni=(*allMemberNameInfoDict)[md->name()]))
{ {
mni->append(mi); mni->append(mi);
...@@ -232,8 +232,9 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -232,8 +232,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
pageTitle+=pageType+" Reference"; pageTitle+=pageType+" Reference";
startFile(ol,fileName,pageTitle); startFile(ol,fileName,pageTitle);
startTitle(ol); startTitle(ol);
ol.docify(name()+" "+pageType.right(pageType.length()-1)+" "); //ol.docify(name()+" "+pageType.right(pageType.length()-1)+" ");
parseDoc(ol,0,0,theTranslator->trReference()); //parseText(ol,theTranslator->trReference());
parseText(ol,theTranslator->trCompoundReference(name(),compType));
endTitle(ol,name()); endTitle(ol,name());
// write brief description // write brief description
...@@ -244,8 +245,8 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -244,8 +245,8 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol+=briefOutput; ol+=briefOutput;
ol.writeString(" \n"); ol.writeString(" \n");
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.startTextLink(0,"details"); ol.startTextLink(0,"_details");
parseDoc(ol,0,0,theTranslator->trMore()); parseText(ol,theTranslator->trMore());
ol.endTextLink(); ol.endTextLink();
ol.enableAll(); ol.enableAll();
} }
...@@ -286,7 +287,41 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -286,7 +287,41 @@ void ClassDef::writeDocumentation(OutputList &ol)
int count; int count;
if ((count=inherits->count())>0) if ((count=inherits->count())>0)
{ {
parseDoc(ol,0,0,theTranslator->trInherits()+" "); //parseText(ol,theTranslator->trInherits()+" ");
QString inheritLine = theTranslator->trInheritsList(inherits->count());
QRegExp marker("@[0-9]+");
int index=0,newIndex,matchLen;
// now replace all markers in inheritLine with links to the classes
while ((newIndex=marker.match(inheritLine,index,&matchLen))!=-1)
{
parseText(ol,inheritLine.mid(index,newIndex-index));
bool ok;
uint entryIndex = inheritLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
BaseClassDef *bcd=inherits->at(entryIndex);
if (ok && bcd)
{
ClassDef *cd=bcd->classDef;
if (cd->hasDocumentation() || cd->isReference())
{
if (genTagFile.length()>0) tagFile << cd->getOutputFileBase() << "?";
ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->name()+bcd->templSpecifiers);
}
else
{
ol.docify(cd->name());
}
}
else
{
err("Error: invalid marker %d in inherits list!\n",entryIndex);
}
index=newIndex+matchLen;
}
parseText(ol,inheritLine.right(inheritLine.length()-index));
ol.newParagraph();
#if 0
BaseClassDef *bcd=inherits->first(); BaseClassDef *bcd=inherits->first();
while (bcd) while (bcd)
{ {
...@@ -305,13 +340,13 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -305,13 +340,13 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (bcd) if (bcd)
{ {
if (inherits->at()==count-1) if (inherits->at()==count-1)
parseDoc(ol,0,0," "+theTranslator->trAnd()+" "); parseText(ol," "+theTranslator->trAnd()+" ");
else else
ol.writeString(", "); ol.writeString(", ");
} }
} }
ol.writeString("."); ol.writeString(".");
ol.newParagraph(); #endif
} }
if (genTagFile.length()>0) tagFile << " \"" << fileName << ".html\"\n"; if (genTagFile.length()>0) tagFile << " \"" << fileName << ".html\"\n";
...@@ -319,7 +354,36 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -319,7 +354,36 @@ void ClassDef::writeDocumentation(OutputList &ol)
// write subclasses // write subclasses
if ((count=inheritedBy->count())>0) if ((count=inheritedBy->count())>0)
{ {
parseDoc(ol,0,0,theTranslator->trInheritedBy()+" "); QString inheritLine = theTranslator->trInheritedByList(inheritedBy->count());
QRegExp marker("@[0-9]+");
int index=0,newIndex,matchLen;
// now replace all markers in inheritLine with links to the classes
while ((newIndex=marker.match(inheritLine,index,&matchLen))!=-1)
{
parseText(ol,inheritLine.mid(index,newIndex-index));
bool ok;
uint entryIndex = inheritLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
BaseClassDef *bcd=inheritedBy->at(entryIndex);
if (ok && bcd)
{
ClassDef *cd=bcd->classDef;
if (cd->hasDocumentation() || cd->isReference())
{
ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->name());
}
else
{
ol.docify(cd->name());
}
writeInheritanceSpecifier(ol,bcd);
}
index=newIndex+matchLen;
}
parseText(ol,inheritLine.right(inheritLine.length()-index));
ol.newParagraph();
#if 0
parseText(ol,theTranslator->trInheritedBy()+" ");
BaseClassDef *bcd=inheritedBy->first(); BaseClassDef *bcd=inheritedBy->first();
while (bcd) while (bcd)
{ {
...@@ -337,13 +401,14 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -337,13 +401,14 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (bcd) if (bcd)
{ {
if (inheritedBy->at()==count-1) if (inheritedBy->at()==count-1)
parseDoc(ol,0,0," "+theTranslator->trAnd()+" "); parseText(ol," "+theTranslator->trAnd()+" ");
else else
ol.writeString(", "); ol.writeString(", ");
} }
} }
ol.writeString("."); ol.writeString(".");
ol.newParagraph(); ol.newParagraph();
#endif
} }
if (classDiagramFlag) ol.enableAll(); if (classDiagramFlag) ol.enableAll();
...@@ -376,7 +441,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -376,7 +441,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
ClassDiagram diagram(this); // create a diagram of this class. ClassDiagram diagram(this); // create a diagram of this class.
ol.startClassDiagram(); ol.startClassDiagram();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
parseDoc(ol,name(),0,theTranslator->trClassDiagram(name())); parseText(ol,theTranslator->trClassDiagram(name()));
ol.enable(OutputGenerator::Man); ol.enable(OutputGenerator::Man);
ol.endClassDiagram(diagram,fileName,name()); ol.endClassDiagram(diagram,fileName,name());
} }
...@@ -386,40 +451,45 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -386,40 +451,45 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.startTextLink(memListFileName,0); ol.startTextLink(memListFileName,0);
parseDoc(ol,0,0,theTranslator->trListOfAllMembers()); parseText(ol,theTranslator->trListOfAllMembers());
ol.endTextLink(); ol.endTextLink();
ol.enableAll(); ol.enableAll();
} }
// write member groups // write member groups
writeMemberDecs(ol,this,0,0,"Public Members",0,&pubMembers); ol.startMemberSections();
writeMemberDecs(ol,this,0,0,"Public Slots",0,&pubSlots); writeMemberDecs(ol,this,0,0,theTranslator->trPublicMembers(),0,&pubMembers);
writeMemberDecs(ol,this,0,0,"Signals",0,&signals); writeMemberDecs(ol,this,0,0,theTranslator->trPublicSlots(),0,&pubSlots);
writeMemberDecs(ol,this,0,0,"Static Public Members",0,&pubStaticMembers); writeMemberDecs(ol,this,0,0,theTranslator->trSignals(),0,&signals);
writeMemberDecs(ol,this,0,0,"Protected Members",0,&proMembers); writeMemberDecs(ol,this,0,0,theTranslator->trStaticPublicMembers(),0,&pubStaticMembers);
writeMemberDecs(ol,this,0,0,"Protected Slots",0,&proSlots); writeMemberDecs(ol,this,0,0,theTranslator->trProtectedMembers(),0,&proMembers);
writeMemberDecs(ol,this,0,0,"Static Protected Members",0,&proStaticMembers); writeMemberDecs(ol,this,0,0,theTranslator->trProtectedSlots(),0,&proSlots);
writeMemberDecs(ol,this,0,0,theTranslator->trStaticProtectedMembers(),0,&proStaticMembers);
if (extractPrivateFlag) if (extractPrivateFlag)
{ {
writeMemberDecs(ol,this,0,0,"Private Members",0,&priMembers); writeMemberDecs(ol,this,0,0,theTranslator->trPrivateMembers(),0,&priMembers);
writeMemberDecs(ol,this,0,0,"Private Slots",0,&priSlots); writeMemberDecs(ol,this,0,0,theTranslator->trPrivateSlots(),0,&priSlots);
writeMemberDecs(ol,this,0,0,"Static Private Members",0,&priStaticMembers); writeMemberDecs(ol,this,0,0,theTranslator->trStaticPrivateMembers(),0,&priStaticMembers);
} }
writeMemberDecs(ol,this,0,0,"Friends",0,&friends); writeMemberDecs(ol,this,0,0,theTranslator->trFriends(),0,&friends);
writeMemberDecs(ol,this,0,0, writeMemberDecs(ol,this,0,0,
theTranslator->trRelatedFunctions(), theTranslator->trRelatedFunctions(),
theTranslator->trRelatedSubscript(), theTranslator->trRelatedSubscript(),
&related &related
); );
ol.endMemberSections();
// write detailed description // write detailed description
bool exampleFlag=hasExamples(); bool exampleFlag=hasExamples();
if (!briefDescription().isEmpty() || !documentation().isEmpty() || exampleFlag) if (!briefDescription().isEmpty() || !documentation().isEmpty() || exampleFlag)
{ {
ol.writeRuler(); ol.writeRuler();
ol.writeAnchor("details"); bool latexOn = ol.isEnabled(OutputGenerator::Latex);
if (latexOn) ol.disable(OutputGenerator::Latex);
ol.writeAnchor("_details");
if (latexOn) ol.enable(OutputGenerator::Latex);
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trDetailedDescription()); parseText(ol,theTranslator->trDetailedDescription());
ol.endGroupHeader(); ol.endGroupHeader();
if (tempArgs) // class is a template if (tempArgs) // class is a template
{ {
...@@ -460,11 +530,11 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -460,11 +530,11 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
ol.startDescList(); ol.startDescList();
ol.startBold(); ol.startBold();
parseDoc(ol,0,0,theTranslator->trExamples()+": "); parseText(ol,theTranslator->trExamples()+": ");
ol.endBold(); ol.endBold();
ol.endDescTitle(); ol.endDescTitle();
ol.writeDescItem(); ol.writeDescItem();
writeExample(ol); writeExample(ol,exampleList);
//ol.endDescItem(); //ol.endDescItem();
ol.endDescList(); ol.endDescList();
} }
...@@ -489,7 +559,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -489,7 +559,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trMemberTypedefDocumentation()); parseText(ol,theTranslator->trMemberTypedefDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,&pubMembers,name(),MemberDef::Typedef); writeMemberDocs(ol,&pubMembers,name(),MemberDef::Typedef);
...@@ -507,7 +577,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -507,7 +577,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trMemberEnumerationDocumentation()); parseText(ol,theTranslator->trMemberEnumerationDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,&pubMembers,name(),MemberDef::Enumeration); writeMemberDocs(ol,&pubMembers,name(),MemberDef::Enumeration);
...@@ -525,7 +595,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -525,7 +595,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trEnumerationValueDocumentation()); parseText(ol,theTranslator->trEnumerationValueDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,&pubMembers,name(),MemberDef::EnumValue); writeMemberDocs(ol,&pubMembers,name(),MemberDef::EnumValue);
...@@ -548,7 +618,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -548,7 +618,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trMemberFunctionDocumentation()); parseText(ol,theTranslator->trMemberFunctionDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,&pubMembers,name(),MemberDef::Function); writeMemberDocs(ol,&pubMembers,name(),MemberDef::Function);
...@@ -570,7 +640,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -570,7 +640,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trRelatedFunctionDocumentation()); parseText(ol,theTranslator->trRelatedFunctionDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,&friends,name(),MemberDef::Friend); writeMemberDocs(ol,&friends,name(),MemberDef::Friend);
writeMemberDocs(ol,&related,name(),MemberDef::Function); writeMemberDocs(ol,&related,name(),MemberDef::Function);
...@@ -586,7 +656,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -586,7 +656,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trMemberDataDocumentation()); parseText(ol,theTranslator->trMemberDataDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,&pubMembers,name(),MemberDef::Variable); writeMemberDocs(ol,&pubMembers,name(),MemberDef::Variable);
...@@ -603,41 +673,57 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -603,41 +673,57 @@ void ClassDef::writeDocumentation(OutputList &ol)
// write the list of used files (Html and LaTeX only) // write the list of used files (Html and LaTeX only)
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
ol.writeRuler(); ol.writeRuler();
parseDoc(ol,0,0, parseText(ol,theTranslator->trGeneratedFrom(pageType.lower(),
theTranslator->trGeneratedFrom(pageType.lower(),
files.count()==1)); files.count()==1));
ol.startItemList();
bool first=TRUE;
const char *file = files.first(); const char *file = files.first();
while (file) while (file)
{ {
QFileInfo fi(file);
ol.writeListItem();
FileDef *fd;
bool ambig; bool ambig;
if ((fd=findFileDef(&inputNameDict,fi.absFilePath(),ambig)) FileDef *fd=findFileDef(&inputNameDict,file,ambig);
&& fd->hasDocumentation()) if (fd)
{
if (first)
{
first=FALSE;
ol.startItemList();
}
ol.writeListItem();
QString path=fd->getPath().copy();
if (fullPathNameFlag)
{
// strip part of the path
if (path.left(stripFromPath.length())==stripFromPath)
{
path=path.right(path.length()-stripFromPath.length());
}
ol.docify(path);
}
if (fd->hasDocumentation())
{ {
ol.writeObjectLink(fd->getReference(),fd->diskName(),0, ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
fi.fileName()); fd->name());
} }
else else
{ {
ol.docify(fi.fileName()); ol.docify(fd->name());
}
} }
file=files.next(); file=files.next();
} }
if (!first) ol.endItemList();
ol.endItemList();
ol.enable(OutputGenerator::Man);
// write Author section (Man only) // write Author section (Man only)
ol.enable(OutputGenerator::Man);
ol.disableAllBut(OutputGenerator::Man); ol.disableAllBut(OutputGenerator::Man);
ol.writeString("\n"); ol.writeString("\n");
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trAuthor()); parseText(ol,theTranslator->trAuthor());
ol.endGroupHeader(); ol.endGroupHeader();
parseDoc(ol,0,0,theTranslator->trGeneratedAutomatically(projectName)); parseText(ol,theTranslator->trGeneratedAutomatically(projectName));
ol.enableAll(); ol.enableAll();
endFile(ol); endFile(ol);
...@@ -651,13 +737,11 @@ void ClassDef::writeMemberList(OutputList &ol) ...@@ -651,13 +737,11 @@ void ClassDef::writeMemberList(OutputList &ol)
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
startFile(ol,memListFileName,theTranslator->trMemberList()); startFile(ol,memListFileName,theTranslator->trMemberList());
startTitle(ol); startTitle(ol);
parseDoc(ol,name(),0,name()+" "+theTranslator->trMemberList()); parseText(ol,name()+" "+theTranslator->trMemberList());
endTitle(ol,0); endTitle(ol,0);
parseDoc(ol,0,0,theTranslator->trThisIsTheListOfAllMembers()); parseText(ol,theTranslator->trThisIsTheListOfAllMembers());
ol.writeString(" ");
ol.writeObjectLink(reference,fileName,0,name()); ol.writeObjectLink(reference,fileName,0,name());
ol.writeString(", "); parseText(ol,theTranslator->trIncludingInheritedMembers());
parseDoc(ol,0,0,theTranslator->trIncludingInheritedMembers());
ol.startItemList(); ol.startItemList();
...@@ -702,14 +786,14 @@ void ClassDef::writeMemberList(OutputList &ol) ...@@ -702,14 +786,14 @@ void ClassDef::writeMemberList(OutputList &ol)
{ {
QString name=mi->ambiguityResolutionScope+md->name(); QString name=mi->ambiguityResolutionScope+md->name();
ol.writeListItem(); ol.writeListItem();
ol.writeObjectLink(cd->getReference(),cd->classFile(), ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),
md->anchor(),name); md->anchor(),name);
if ( md->isFunction() || md->isSignal() || md->isSlot() ) if ( md->isFunction() || md->isSignal() || md->isSlot() )
ol.docify(md->argsString()); ol.docify(md->argsString());
else if (md->isEnumerate()) else if (md->isEnumerate())
parseDoc(ol,0,0," "+theTranslator->trEnumName()); parseText(ol," "+theTranslator->trEnumName());
else if (md->isEnumValue()) else if (md->isEnumValue())
parseDoc(ol,0,0," "+theTranslator->trEnumValue()); parseText(ol," "+theTranslator->trEnumValue());
else if (md->isTypedef()) else if (md->isTypedef())
ol.docify(" typedef"); ol.docify(" typedef");
else if (md->isFriend() && !strcmp(md->typeString(),"friend class")) else if (md->isFriend() && !strcmp(md->typeString(),"friend class"))
...@@ -725,16 +809,16 @@ void ClassDef::writeMemberList(OutputList &ol) ...@@ -725,16 +809,16 @@ void ClassDef::writeMemberList(OutputList &ol)
if ( md->isFunction() || md->isSignal() || md->isSlot() ) if ( md->isFunction() || md->isSignal() || md->isSlot() )
ol.docify(md->argsString()); ol.docify(md->argsString());
else if (md->isEnumerate()) else if (md->isEnumerate())
parseDoc(ol,0,0," "+theTranslator->trEnumName()); parseText(ol," "+theTranslator->trEnumName());
else if (md->isEnumValue()) else if (md->isEnumValue())
parseDoc(ol,0,0," "+theTranslator->trEnumValue()); parseText(ol," "+theTranslator->trEnumValue());
else if (md->isTypedef()) else if (md->isTypedef())
ol.docify(" typedef"); ol.docify(" typedef");
ol.writeString(" ("); ol.writeString(" (");
parseDoc(ol,0,0,theTranslator->trDefinedIn()+" "); parseText(ol,theTranslator->trDefinedIn()+" ");
if (cd->isVisible()) if (cd->isVisible())
{ {
ol.writeObjectLink(cd->getReference(),cd->classFile(),0,cd->name()); ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->name());
} }
else else
{ {
...@@ -792,9 +876,9 @@ void ClassDef::writeIncludeFile(OutputList &ol) ...@@ -792,9 +876,9 @@ void ClassDef::writeIncludeFile(OutputList &ol)
startTitle(ol); startTitle(ol);
QString n=incName.copy(); QString n=incName.copy();
if (incName.isNull()) n=incFile->name(); if (incName.isNull()) n=incFile->name();
parseDoc(ol,0,0,n); parseText(ol,n);
endTitle(ol,0); endTitle(ol,0);
parseDoc(ol,0,0,theTranslator->trVerbatimText(incFile->name())); parseText(ol,theTranslator->trVerbatimText(incFile->name()));
ol.writeRuler(); ol.writeRuler();
ol.startCodeFragment(); ol.startCodeFragment();
parseCode(ol,n,fileToString(incFile->absFilePath()),FALSE,0); parseCode(ol,n,fileToString(incFile->absFilePath()),FALSE,0);
...@@ -829,9 +913,31 @@ bool ClassDef::hasExamples() ...@@ -829,9 +913,31 @@ bool ClassDef::hasExamples()
return exampleList->count()>0; return exampleList->count()>0;
} }
#if 0
// write the list of all examples that are use this class. // write the list of all examples that are use this class.
void ClassDef::writeExample(OutputList &ol) void ClassDef::writeExample(OutputList &ol)
{ {
QString exampleLine=theTranslator->trWriteList(exampleList->count());
QRegExp marker("@[0-9]+");
int index=0,newIndex,matchLen;
// now replace all markers in inheritLine with links to the classes
while ((newIndex=marker.match(exampleLine,index,&matchLen))!=-1)
{
bool ok;
parseText(ol,exampleLine.mid(index,newIndex-index));
uint entryIndex = exampleLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
Example *e=exampleList->at(entryIndex);
if (ok && e)
{
ol.writeObjectLink(0,e->file,e->anchor,e->name);
}
index=newIndex+matchLen;
}
parseText(ol,exampleLine.right(exampleLine.length()-index));
ol.writeString(".");
#if 0
Example *e=exampleList->first(); Example *e=exampleList->first();
while (e) while (e)
{ {
...@@ -840,13 +946,15 @@ void ClassDef::writeExample(OutputList &ol) ...@@ -840,13 +946,15 @@ void ClassDef::writeExample(OutputList &ol)
if (e) if (e)
{ {
if (exampleList->at()==(int)exampleList->count()-1) if (exampleList->at()==(int)exampleList->count()-1)
parseDoc(ol,0,0," "+theTranslator->trAnd()+" "); parseText(ol," "+theTranslator->trAnd()+" ");
else else
ol.writeString(", "); ol.writeString(", ");
} }
} }
ol.writeString("."); ol.writeString(".");
#endif
} }
#endif
void ClassDef::setTemplateArguments(ArgumentList *al) void ClassDef::setTemplateArguments(ArgumentList *al)
{ {
......
...@@ -49,10 +49,11 @@ class ClassDef : public Definition ...@@ -49,10 +49,11 @@ class ClassDef : public Definition
Union=Entry::UNION_SEC Union=Entry::UNION_SEC
}; };
ClassDef(const char *name,int ct,const char *ref=0,const char *fName=0); ClassDef(const char *name,CompoundType ct,const char *ref=0,const char *fName=0);
~ClassDef(); ~ClassDef();
QString classFile() const { return fileName; } //QString classFile() const { return fileName; }
int compoundType() const { return compType; } QString getOutputFileBase() const { return fileName; }
CompoundType compoundType() const { return compType; }
const char *memberListFileName() const { return memListFileName; } const char *memberListFileName() const { return memListFileName; }
void insertBaseClass(ClassDef *,Protection p,Specifier s,const char *t=0); void insertBaseClass(ClassDef *,Protection p,Specifier s,const char *t=0);
BaseClassList *baseClasses() { return inherits; } BaseClassList *baseClasses() { return inherits; }
...@@ -75,7 +76,7 @@ class ClassDef : public Definition ...@@ -75,7 +76,7 @@ class ClassDef : public Definition
void writeIncludeFile(OutputList &ol); void writeIncludeFile(OutputList &ol);
bool addExample(const char *anchor,const char *name, const char *file); bool addExample(const char *anchor,const char *name, const char *file);
bool hasExamples(); bool hasExamples();
void writeExample(OutputList &ol); //void writeExample(OutputList &ol);
void setProtection(Protection p) { prot=p; } void setProtection(Protection p) { prot=p; }
Protection protection() const { return prot; } Protection protection() const { return prot; }
bool isVisible() bool isVisible()
...@@ -130,7 +131,7 @@ class ClassDef : public Definition ...@@ -130,7 +131,7 @@ class ClassDef : public Definition
QString reference; QString reference;
ExampleList *exampleList; ExampleList *exampleList;
ExampleDict *exampleDict; ExampleDict *exampleDict;
int compType; CompoundType compType;
Protection prot; Protection prot;
}; };
......
...@@ -173,16 +173,19 @@ static void generateClassLink(OutputList &ol,const char *clName) ...@@ -173,16 +173,19 @@ static void generateClassLink(OutputList &ol,const char *clName)
if (exampleBlock) if (exampleBlock)
{ {
QString anchor; QString anchor;
anchor.sprintf("a%d",anchorCount); anchor.sprintf("_a%d",anchorCount);
//printf("addExampleClass(%s,%s,%s)\n",anchor.data(),exampleName.data(), //printf("addExampleClass(%s,%s,%s)\n",anchor.data(),exampleName.data(),
// exampleFile.data()); // exampleFile.data());
if (cd->addExample(anchor,exampleName,exampleFile)) if (cd->addExample(anchor,exampleName,exampleFile))
{ {
bool latexOn = ol.isEnabled(OutputGenerator::Latex);
if (latexOn) ol.disable(OutputGenerator::Latex);
ol.writeAnchor(anchor); ol.writeAnchor(anchor);
if (latexOn) ol.enable(OutputGenerator::Latex);
anchorCount++; anchorCount++;
} }
} }
ol.writeCodeLink(cd->getReference(),cd->classFile(),0,className); ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className);
} }
else else
{ {
...@@ -196,10 +199,11 @@ static bool getLink(const char *className, ...@@ -196,10 +199,11 @@ static bool getLink(const char *className,
MemberDef *md; MemberDef *md;
ClassDef *cd; ClassDef *cd;
FileDef *fd; FileDef *fd;
NamespaceDef *nd;
QString m=memberName; QString m=memberName;
QString c=className; QString c=className;
//printf("Trying `%s'::`%s'\n",c.data(),m.data()); //printf("Trying `%s'::`%s'\n",c.data(),m.data());
if (getDefs(m,c,"()",md,cd,fd) && if (getDefs(m,c,"()",md,cd,fd,nd) &&
(md->hasDocumentation() || md->isReference())) (md->hasDocumentation() || md->isReference()))
{ {
//printf("Found!\n"); //printf("Found!\n");
...@@ -217,13 +221,19 @@ static bool getLink(const char *className, ...@@ -217,13 +221,19 @@ static bool getLink(const char *className,
} }
if (cd) if (cd)
{ {
result.writeCodeLink(cd->getReference(),cd->classFile(), result.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),
md->anchor(),memberName);
return TRUE;
}
else if (nd)
{
result.writeCodeLink(nd->getReference(),nd->getOutputFileBase(),
md->anchor(),memberName); md->anchor(),memberName);
return TRUE; return TRUE;
} }
else if (fd) else if (fd)
{ {
result.writeCodeLink(fd->getReference(),fd->diskName(), result.writeCodeLink(fd->getReference(),fd->getOutputFileBase(),
md->anchor(),memberName); md->anchor(),memberName);
return TRUE; return TRUE;
} }
...@@ -363,7 +373,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -363,7 +373,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
if ((fd=findFileDef(&inputNameDict,yytext,ambig)) && if ((fd=findFileDef(&inputNameDict,yytext,ambig)) &&
fd->hasDocumentation()) fd->hasDocumentation())
{ {
code->writeCodeLink(0,fd->diskName(),0,yytext); code->writeCodeLink(0,fd->getOutputFileBase(),0,yytext);
} }
else else
{ {
......
...@@ -41,6 +41,7 @@ extern QString genTagFile; // the tag file to generate ...@@ -41,6 +41,7 @@ extern QString genTagFile; // the tag file to generate
extern QString inputFilter; // a filter command that is applied to input files extern QString inputFilter; // a filter command that is applied to input files
extern QString paperType; // the page type to generate docs for extern QString paperType; // the page type to generate docs for
extern QString stripFromPath; // the string to strip from the file path extern QString stripFromPath; // the string to strip from the file path
extern QString manExtension; // extension the man page files
extern QStrList includePath; // list of include paths extern QStrList includePath; // list of include paths
extern QStrList examplePath; // list of example paths extern QStrList examplePath; // list of example paths
extern QStrList inputSources; // list of input files extern QStrList inputSources; // list of input files
...@@ -76,5 +77,6 @@ extern bool repeatBriefFlag; // repeat brief descriptions. ...@@ -76,5 +77,6 @@ extern bool repeatBriefFlag; // repeat brief descriptions.
extern bool internalDocsFlag; // determines what happens to internal docs. extern bool internalDocsFlag; // determines what happens to internal docs.
extern bool caseSensitiveNames; // determines if output can be mixed case. extern bool caseSensitiveNames; // determines if output can be mixed case.
extern bool verbatimHeaderFlag; // enable/disable generation of verb headers. extern bool verbatimHeaderFlag; // enable/disable generation of verb headers.
extern bool htmlAlignMemberFlag; // align members in HTML using tables.
#endif #endif
...@@ -62,6 +62,7 @@ QString inputFilter; ...@@ -62,6 +62,7 @@ QString inputFilter;
QString paperType; QString paperType;
QString outputLanguage; QString outputLanguage;
QString stripFromPath; QString stripFromPath;
QString manExtension;
QStrList includePath; QStrList includePath;
QStrList examplePath; QStrList examplePath;
QStrList inputSources; QStrList inputSources;
...@@ -97,6 +98,7 @@ bool searchIncludeFlag = TRUE; ...@@ -97,6 +98,7 @@ bool searchIncludeFlag = TRUE;
bool classDiagramFlag = TRUE; bool classDiagramFlag = TRUE;
bool repeatBriefFlag = TRUE; bool repeatBriefFlag = TRUE;
bool verbatimHeaderFlag = TRUE; bool verbatimHeaderFlag = TRUE;
bool htmlAlignMemberFlag = TRUE;
/* ----------------------------------------------------------------- /* -----------------------------------------------------------------
* *
...@@ -163,6 +165,7 @@ static int yyread(char *buf,int max_size) ...@@ -163,6 +165,7 @@ static int yyread(char *buf,int max_size)
<Start>"PAPER_TYPE"[ \t]*"=" { BEGIN(GetString); s=&paperType; } <Start>"PAPER_TYPE"[ \t]*"=" { BEGIN(GetString); s=&paperType; }
<Start>"OUTPUT_LANGUAGE"[ \t]*"=" { BEGIN(GetString); s=&outputLanguage; } <Start>"OUTPUT_LANGUAGE"[ \t]*"=" { BEGIN(GetString); s=&outputLanguage; }
<Start>"STRIP_FROM_PATH"[ \t]*"=" { BEGIN(GetString); s=&stripFromPath; } <Start>"STRIP_FROM_PATH"[ \t]*"=" { BEGIN(GetString); s=&stripFromPath; }
<Start>"MAN_EXTENSION"[ \t]*"=" { BEGIN(GetString); s=&manExtension; }
<Start>"INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&includePath; elemStr=""; } <Start>"INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&includePath; elemStr=""; }
<Start>"EXAMPLE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&examplePath; elemStr=""; } <Start>"EXAMPLE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&examplePath; elemStr=""; }
<Start>"INPUT"[ \t]*"=" { BEGIN(GetStrList); l=&inputSources; elemStr=""; } <Start>"INPUT"[ \t]*"=" { BEGIN(GetStrList); l=&inputSources; elemStr=""; }
...@@ -198,6 +201,7 @@ static int yyread(char *buf,int max_size) ...@@ -198,6 +201,7 @@ static int yyread(char *buf,int max_size)
<Start>"INTERNAL_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&internalDocsFlag; } <Start>"INTERNAL_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&internalDocsFlag; }
<Start>"CASE_SENSE_NAMES"[ \t]*"=" { BEGIN(GetBool); b=&caseSensitiveNames; } <Start>"CASE_SENSE_NAMES"[ \t]*"=" { BEGIN(GetBool); b=&caseSensitiveNames; }
<Start>"VERBATIM_HEADERS"[ \t]*"=" { BEGIN(GetBool); b=&verbatimHeaderFlag; } <Start>"VERBATIM_HEADERS"[ \t]*"=" { BEGIN(GetBool); b=&verbatimHeaderFlag; }
<Start>"HTML_ALIGN_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&htmlAlignMemberFlag; }
<Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); } <Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); } <GetString,GetBool>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n { <GetStrList>\n {
...@@ -634,6 +638,15 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -634,6 +638,15 @@ void writeTemplateConfig(QFile *f,bool sl)
} }
t << "HTML_FOOTER =\n"; t << "HTML_FOOTER =\n";
if (!sl) if (!sl)
{
t << "\n";
t << "# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,\n";
t << "# files or namespaces will be aligned in HTML using tables. If set to\n";
t << "# NO a bullet list will be used.\n";
t << "\n";
}
t << "HTML_ALIGN_MEMBERS = YES\n";
if (!sl)
{ {
t << "\n"; t << "\n";
t << "#---------------------------------------------------------------------------\n"; t << "#---------------------------------------------------------------------------\n";
...@@ -701,6 +714,15 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -701,6 +714,15 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "\n"; t << "\n";
} }
t << "MAN_OUTPUT =\n"; t << "MAN_OUTPUT =\n";
if (!sl)
{
t << "\n";
t << "# The MAN_EXTENSION tag determines the extension that is added to\n";
t << "# the generated man pages (default is the subroutine's section .3)\n";
t << "\n";
}
t << "MAN_EXTENSION = .3\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -870,6 +892,12 @@ void checkConfig() ...@@ -870,6 +892,12 @@ void checkConfig()
// projectName[0]=toupper(projectName[0]); // projectName[0]=toupper(projectName[0]);
//} //}
// set default man page extension if non is given by the user
if (manExtension.isEmpty())
{
manExtension=".3";
}
paperType = paperType.lower().stripWhiteSpace(); paperType = paperType.lower().stripWhiteSpace();
if (paperType.isEmpty()) if (paperType.isEmpty())
{ {
......
...@@ -16,6 +16,17 @@ ...@@ -16,6 +16,17 @@
#include <ctype.h> #include <ctype.h>
#include "definition.h" #include "definition.h"
#include "doxygen.h"
Definition::Definition(const char *name,const char *b,const char *d)
{
n=name; brief=b; doc=d; sectionList=0;
}
Definition::~Definition()
{
delete sectionList;
}
QString Definition::nameToFile(const char *name) QString Definition::nameToFile(const char *name)
{ {
...@@ -42,3 +53,22 @@ QString Definition::nameToFile(const char *name) ...@@ -42,3 +53,22 @@ QString Definition::nameToFile(const char *name)
} }
return result; return result;
} }
void Definition::addSectionsToDefinition(QList<QString> *anchorList)
{
if (!anchorList) return;
QString *s=anchorList->first();
while (s)
{
SectionInfo *si=0;
if (!s->isEmpty() && (si=sectionDict[*s]))
{
//printf("Add section `%s' to definition `%s'\n",
// si->label.data(),n.data());
if (sectionList==0) sectionList = new SectionList;
sectionList->append(si);
si->definition = this;
}
s=anchorList->next();
}
}
...@@ -18,19 +18,22 @@ ...@@ -18,19 +18,22 @@
#define DEFINITION_H #define DEFINITION_H
#include <qstring.h> #include <qstring.h>
#include <qlist.h>
#include "config.h" #include "config.h"
#include "section.h"
/*! The common base class of all definitions. */ /*! The common base class of all definitions. */
class Definition class Definition
{ {
public: public:
//! create a new definition //! create a new definition
Definition(const char *name,const char *b=0,const char *d=0) Definition(const char *name,const char *b=0,const char *d=0);
{ n=name; brief=b; doc=d; }
//! destroys the definition //! destroys the definition
virtual ~Definition() {} virtual ~Definition();
//! returns the name of the definition //! returns the name of the definition
QString name() const { return n; } QString name() const { return n; }
//! returns the base name of the output file that contains this definition.
virtual QString getOutputFileBase() const = 0;
//! returns the detailed description of this definition //! returns the detailed description of this definition
QString documentation() const { return doc; } QString documentation() const { return doc; }
//! returns the brief description of this definition //! returns the brief description of this definition
...@@ -55,10 +58,13 @@ class Definition ...@@ -55,10 +58,13 @@ class Definition
{ return !doc.isNull() || !brief.isNull() || extractAllFlag; } { return !doc.isNull() || !brief.isNull() || extractAllFlag; }
QString nameToFile(const char *name); QString nameToFile(const char *name);
void addSectionsToDefinition(QList<QString> *anchorList);
private: private:
QString n; // name of the definition QString n; // name of the definition
QString brief; // brief description QString brief; // brief description
QString doc; // detailed description QString doc; // detailed description
SectionList *sectionList; // list of all sections
}; };
#endif #endif
...@@ -152,7 +152,7 @@ static void writeMapArea(QTextStream &t,ClassDef *cd,int x,int y,int w,int h) ...@@ -152,7 +152,7 @@ static void writeMapArea(QTextStream &t,ClassDef *cd,int x,int y,int w,int h)
{ {
t << "<area "; t << "<area ";
if (cd->getReference()) t << "doxygen=\"" << cd->getReference() << ":\" "; if (cd->getReference()) t << "doxygen=\"" << cd->getReference() << ":\" ";
t << "href=\"" << cd->classFile() << ".html\" "; t << "href=\"" << cd->getOutputFileBase() << ".html\" ";
t << "ALT=\"" << cd->name(); t << "ALT=\"" << cd->name();
t << "\" shape=\"rect\" coords=\"" << x << "," << y << ","; t << "\" shape=\"rect\" coords=\"" << x << "," << y << ",";
t << x+w << "," << y+h << "\">" << endl; t << x+w << "," << y+h << "\">" << endl;
...@@ -187,7 +187,7 @@ QString DiagramItem::label() const ...@@ -187,7 +187,7 @@ QString DiagramItem::label() const
QString DiagramItem::fileName() const QString DiagramItem::fileName() const
{ {
return classDef->classFile(); return classDef->getOutputFileBase();
} }
int DiagramItem::avgChildPos() const int DiagramItem::avgChildPos() const
......
...@@ -60,6 +60,7 @@ PageList exampleList; // list of all example files ...@@ -60,6 +60,7 @@ PageList exampleList; // list of all example files
PageList pageList; // list of all related documentation pages PageList pageList; // list of all related documentation pages
MemberNameList memberNameList; // list of class member + related functions MemberNameList memberNameList; // list of class member + related functions
MemberNameList functionNameList; // list of all unrelated functions MemberNameList functionNameList; // list of all unrelated functions
//MemberNameList namespaceNameList; // list of namespace members;
FileNameList inputNameList; // list of all input files FileNameList inputNameList; // list of all input files
StringList inputFiles; StringList inputFiles;
FileList includeFiles; FileList includeFiles;
...@@ -71,8 +72,9 @@ PageDict pageDict(1009); // dictionary of all doc pages ...@@ -71,8 +72,9 @@ PageDict pageDict(1009); // dictionary of all doc pages
PageDict exampleDict(1009); // dictionary of all examples PageDict exampleDict(1009); // dictionary of all examples
ClassDict classDict(1009); // dictionary of all documented classes ClassDict classDict(1009); // dictionary of all documented classes
NamespaceDict namespaceDict(257); // dictionary of all documented namespaces NamespaceDict namespaceDict(257); // dictionary of all documented namespaces
MemberNameDict memberNameDict(10007); // dictionary of all member names MemberNameDict memberNameDict(10007); // dictionary of all class member names
MemberNameDict functionNameDict(10007); // dictionary of all functions MemberNameDict functionNameDict(10007); // dictionary of all functions
//MemberNameDict namespaceNameDict(10007);// dictionaty of all namespace member names
StringDict substituteDict(1009); // dictionary of class name substitutes StringDict substituteDict(1009); // dictionary of class name substitutes
SectionDict sectionDict(257); // dictionary of all page sections SectionDict sectionDict(257); // dictionary of all page sections
FileNameDict inputNameDict(1009); // dictionary of sections FileNameDict inputNameDict(1009); // dictionary of sections
...@@ -100,6 +102,7 @@ int documentedMembers; ...@@ -100,6 +102,7 @@ int documentedMembers;
int documentedFiles; int documentedFiles;
int documentedGroups; int documentedGroups;
int documentedNamespaces; int documentedNamespaces;
int documentedNamespaceMembers;
QTextStream tagFile; QTextStream tagFile;
...@@ -140,6 +143,7 @@ void buildGroupList(Entry *root) ...@@ -140,6 +143,7 @@ void buildGroupList(Entry *root)
gd = new GroupDef(root->name,root->type); gd = new GroupDef(root->name,root->type);
gd->setBriefDescription(root->brief); gd->setBriefDescription(root->brief);
gd->setDocumentation(root->doc); gd->setDocumentation(root->doc);
gd->addSectionsToDefinition(root->anchors);
groupList.inSort(gd); groupList.inSort(gd);
groupDict.insert(root->name,gd); groupDict.insert(root->name,gd);
} }
...@@ -207,6 +211,7 @@ void buildFileList(Entry *root) ...@@ -207,6 +211,7 @@ void buildFileList(Entry *root)
{ {
fd->setDocumentation(root->doc); fd->setDocumentation(root->doc);
fd->setBriefDescription(root->brief); fd->setBriefDescription(root->brief);
fd->addSectionsToDefinition(root->anchors);
QListIterator<QString> sli(*root->groups); QListIterator<QString> sli(*root->groups);
QString *s; QString *s;
for (;(s=sli.current());++sli) for (;(s=sli.current());++sli)
...@@ -290,7 +295,7 @@ void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root) ...@@ -290,7 +295,7 @@ void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
cd->setIncludeFile(fd); cd->setIncludeFile(fd);
// set include supplied name // set include supplied name
cd->setIncludeName(root->includeName); cd->setIncludeName(root->includeName);
fd->setIncludeName((QString)cd->classFile()+"-include"); fd->setIncludeName(cd->getOutputFileBase()+"-include");
if (includeDict[fd->absFilePath()]==0) // include not inserted earlier if (includeDict[fd->absFilePath()]==0) // include not inserted earlier
{ {
includeFiles.inSort(fd); includeFiles.inSort(fd);
...@@ -409,6 +414,7 @@ void buildClassList(Entry *root) ...@@ -409,6 +414,7 @@ void buildClassList(Entry *root)
{ {
cd->setDocumentation(root->doc); cd->setDocumentation(root->doc);
cd->setBriefDescription(root->brief); cd->setBriefDescription(root->brief);
cd->addSectionsToDefinition(root->anchors);
cd->setName(fullName); // change name to match docs cd->setName(fullName); // change name to match docs
} }
} }
...@@ -429,7 +435,7 @@ void buildClassList(Entry *root) ...@@ -429,7 +435,7 @@ void buildClassList(Entry *root)
) )
// new class // new class
{ {
int sec=ClassDef::Class; ClassDef::CompoundType sec=ClassDef::Class;
switch(root->section) switch(root->section)
{ {
case Entry::UNION_SEC: case Entry::UNION_SEC:
...@@ -445,6 +451,7 @@ void buildClassList(Entry *root) ...@@ -445,6 +451,7 @@ void buildClassList(Entry *root)
//printf("new ClassDef tempArgList=%p\n",root->tArgList); //printf("new ClassDef tempArgList=%p\n",root->tArgList);
cd->setTemplateArguments(root->tArgList); cd->setTemplateArguments(root->tArgList);
cd->setProtection(root->protection); cd->setProtection(root->protection);
cd->addSectionsToDefinition(root->anchors);
QListIterator<QString> sli(*root->groups); QListIterator<QString> sli(*root->groups);
QString *s; QString *s;
...@@ -519,6 +526,7 @@ void buildNamespaceList(Entry *root) ...@@ -519,6 +526,7 @@ void buildNamespaceList(Entry *root)
{ {
nd->setDocumentation(root->doc); nd->setDocumentation(root->doc);
nd->setName(fullName); // change name to match docs nd->setName(fullName); // change name to match docs
nd->addSectionsToDefinition(root->anchors);
} }
else if (!nd->documentation().isEmpty() && root->doc.length()>0) else if (!nd->documentation().isEmpty() && root->doc.length()>0)
{ {
...@@ -539,14 +547,16 @@ void buildNamespaceList(Entry *root) ...@@ -539,14 +547,16 @@ void buildNamespaceList(Entry *root)
} }
} }
} }
else if (root->doc.length()>0 || else /* if (root->doc.length()>0 ||
root->brief.length()>0 || root->brief.length()>0 ||
extractAllFlag extractAllFlag
) )
*/
{ {
NamespaceDef *nd=new NamespaceDef(fullName); NamespaceDef *nd=new NamespaceDef(fullName);
nd->setDocumentation(root->doc); // copy docs to definition nd->setDocumentation(root->doc); // copy docs to definition
nd->setBriefDescription(root->brief); nd->setBriefDescription(root->brief);
nd->addSectionsToDefinition(root->anchors);
QListIterator<QString> sli(*root->groups); QListIterator<QString> sli(*root->groups);
QString *s; QString *s;
...@@ -639,12 +649,14 @@ void buildVarList(Entry *root) ...@@ -639,12 +649,14 @@ void buildVarList(Entry *root)
bool stat=root->stat; bool stat=root->stat;
ClassDef *cd=0; ClassDef *cd=0;
Entry *p = root->parent; Entry *p = root->parent;
while ((p->section & Entry::COMPOUND_MASK)) while ((p->section & Entry::COMPOUND_MASK) ||
p->section==Entry::NAMESPACE_SEC)
{ {
if (p->name.length()>0 && p->name[0]!='@') if (p->name.length()>0 && p->name[0]!='@')
{ {
if (!scope.isEmpty()) scope.prepend("::"); if (!scope.isEmpty()) scope.prepend("::");
scope.prepend(p->name); scope.prepend(p->name);
break;
} }
p=p->parent; p=p->parent;
} }
...@@ -652,6 +664,7 @@ void buildVarList(Entry *root) ...@@ -652,6 +664,7 @@ void buildVarList(Entry *root)
//printf("scope=%s\n",scope.data()); //printf("scope=%s\n",scope.data());
int ni; int ni;
#if 0
if ((ni=root->name.findRev("::"))!=-1) if ((ni=root->name.findRev("::"))!=-1)
{ {
if (scope.length()>0) scope+="::"; if (scope.length()>0) scope+="::";
...@@ -659,8 +672,18 @@ void buildVarList(Entry *root) ...@@ -659,8 +672,18 @@ void buildVarList(Entry *root)
name=root->name.right(root->name.length()-ni-2); name=root->name.right(root->name.length()-ni-2);
stat=TRUE; stat=TRUE;
} }
#endif
if ((ni=root->name.findRev("::"))!=-1) goto nextMember;
/* skip this member, because it is a
* static variable definition (always?), which will be
* found in a class scope as well, but then we know the
* correct protection level, so only then it will be
* inserted in the correct list!
*/
MemberDef::MemberType mtype; MemberDef::MemberType mtype;
// NamespaceDef *nd = 0;
QString type=root->type.stripWhiteSpace(); QString type=root->type.stripWhiteSpace();
if (type=="@") if (type=="@")
mtype=MemberDef::EnumValue; mtype=MemberDef::EnumValue;
...@@ -715,11 +738,28 @@ void buildVarList(Entry *root) ...@@ -715,11 +738,28 @@ void buildVarList(Entry *root)
if (mn) if (mn)
{ {
MemberDef *md=mn->first(); MemberDef *md=mn->first();
while (md) while (md && !found)
{ {
if (md->memberClass()==cd) // member already in the scope if (md->memberClass()==cd) // member already in the scope
{ {
addMemberDocs(root,md,def,FALSE); addMemberDocs(root,md,def,FALSE);
#if 0
// always trust the most protected scope, so adjust if needed
// This is needed to properly place static private variables,
// which are defined in a `public' scope.
printf("Checking protection level\n");
if (root->protection==Private || md->protection()!=Private)
{
printf("Set to private\n");
md->setProtection(Private);
}
else if (root->protection==Protected && md->protection()==Public)
{
printf("Set to protected\n");
md->setProtection(Protected);
}
#endif
found=TRUE; found=TRUE;
} }
md=mn->next(); md=mn->next();
...@@ -737,6 +777,7 @@ void buildVarList(Entry *root) ...@@ -737,6 +777,7 @@ void buildVarList(Entry *root)
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
md->setDefinition(def); md->setDefinition(def);
md->addSectionsToDefinition(root->anchors);
// add the member to the global list // add the member to the global list
if (mn) if (mn)
...@@ -761,6 +802,56 @@ void buildVarList(Entry *root) ...@@ -761,6 +802,56 @@ void buildVarList(Entry *root)
cd->insertUsedFile(root->fileName); cd->insertUsedFile(root->fileName);
} }
} }
#if 0
else if (scope.length()>0 && name.length()>0 && (nd=namespaceDict[scope]))
{
Debug::print(Debug::Variables,0,
" namespace variable:\n"
" type=`%s' scope=`%s' name=`%s' args=`%s' prot=`%d\n",
root->type.data(),
scope.data(),
name.data(),
root->args.data(),
root->protection
);
// new global variable, enum value or typedef
MemberDef *md=new MemberDef(root->type,name,root->args,0,
Public, Normal,root->stat,FALSE,
mtype,0,0);
md->setDefFile(root->fileName);
md->setDefLine(root->startLine);
md->setDocumentation(root->doc);
md->setBriefDescription(root->brief);
md->addSectionsToDefinition(root->anchors);
QString def;
nd->insertMember(md);
md->setNamespace(nd);
if (root->type.length()>0)
{
def=root->type+" "+nd->name()+"::"+name+root->args;
}
else
{
def=nd->name()+"::"+name+root->args;
}
if (def.left(7)=="static ") def=def.right(def.length()-7);
md->setDefinition(def);
MemberName *mn;
// add member definition to the list of globals
if ((mn=namespaceNameDict[name]))
{
mn->inSort(md);
}
else
{
mn = new MemberName(name);
mn->inSort(md);
namespaceNameDict.insert(name,mn);
namespaceNameList.inSort(mn);
}
}
#endif
else if (name.length()>0) // global variable else if (name.length()>0) // global variable
{ {
Debug::print(Debug::Variables,0, Debug::print(Debug::Variables,0,
...@@ -781,6 +872,7 @@ void buildVarList(Entry *root) ...@@ -781,6 +872,7 @@ void buildVarList(Entry *root)
md->setDefLine(root->startLine); md->setDefLine(root->startLine);
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
md->addSectionsToDefinition(root->anchors);
QString def; QString def;
// see if the function is inside a namespace // see if the function is inside a namespace
...@@ -850,6 +942,7 @@ void buildVarList(Entry *root) ...@@ -850,6 +942,7 @@ void buildVarList(Entry *root)
} }
} }
} }
nextMember:
EntryListIterator eli(*root->sublist); EntryListIterator eli(*root->sublist);
Entry *e; Entry *e;
for (;(e=eli.current());++eli) for (;(e=eli.current());++eli)
...@@ -925,6 +1018,7 @@ void buildMemberList(Entry *root) ...@@ -925,6 +1018,7 @@ void buildMemberList(Entry *root)
md->setDefLine(root->startLine); md->setDefLine(root->startLine);
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
md->addSectionsToDefinition(root->anchors);
QString def; QString def;
if (root->relates.length()>0 || isFriend) if (root->relates.length()>0 || isFriend)
{ {
...@@ -1048,6 +1142,7 @@ void buildMemberList(Entry *root) ...@@ -1048,6 +1142,7 @@ void buildMemberList(Entry *root)
{ {
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
} }
md->addSectionsToDefinition(root->anchors);
} }
md=mn->next(); md=mn->next();
} }
...@@ -1067,6 +1162,7 @@ void buildMemberList(Entry *root) ...@@ -1067,6 +1162,7 @@ void buildMemberList(Entry *root)
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
md->setPrototype(root->proto); md->setPrototype(root->proto);
md->addSectionsToDefinition(root->anchors);
QString def; QString def;
if (root->type.length()>0) if (root->type.length()>0)
{ {
...@@ -1357,8 +1453,9 @@ void computeClassRelations(Entry *root) ...@@ -1357,8 +1453,9 @@ void computeClassRelations(Entry *root)
} }
else // base class not documented else // base class not documented
{ {
//printf("Found undocumented base class %s\n",bi->name.data());
NamespaceDef *nd=cd->getNamespace(); NamespaceDef *nd=cd->getNamespace();
//printf("Found undocumented base class `%s' namespace scope=`%s'\n",
// bi->name.data(),nd ? nd->name().data() : "<none>");
if (nd && (baseClass=getClass(nd->name()+"::"+baseClassName))) if (nd && (baseClass=getClass(nd->name()+"::"+baseClassName)))
// class is defined inside namespace // class is defined inside namespace
{ {
...@@ -1369,7 +1466,7 @@ void computeClassRelations(Entry *root) ...@@ -1369,7 +1466,7 @@ void computeClassRelations(Entry *root)
} }
else // undocumented base class else // undocumented base class
{ {
baseClass=new ClassDef(bi->name,Entry::CLASS_SEC); baseClass=new ClassDef(bi->name,ClassDef::Class);
// add base class to this class // add base class to this class
cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec); cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class // add this class as super class to the base class
...@@ -1523,6 +1620,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl, ...@@ -1523,6 +1620,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
} }
md->setDefFile(root->fileName); md->setDefFile(root->fileName);
md->setDefLine(root->startLine); md->setDefLine(root->startLine);
md->addSectionsToDefinition(root->anchors);
if (cd) cd->insertUsedFile(root->fileName); if (cd) cd->insertUsedFile(root->fileName);
} }
...@@ -1676,21 +1774,23 @@ void findMember(Entry *root,QString funcDecl,QString related,bool overloaded, ...@@ -1676,21 +1774,23 @@ void findMember(Entry *root,QString funcDecl,QString related,bool overloaded,
else else
scopeName=related.copy(); scopeName=related.copy();
} }
else if (scopeName.isEmpty() && related.isEmpty() && root->parent && else if (/*scopeName.isEmpty() &&*/ related.isEmpty() && root->parent &&
!root->parent->name.isNull()) !root->parent->name.isNull())
{ {
Entry *p=root->parent; Entry *p=root->parent;
while (p) // get full scope as class name while (p) // get full scope as class name
{ {
//printf("++++++ scope=`%s'\n",p->name.data());
if (((p->section & Entry::COMPOUND_MASK) || if (((p->section & Entry::COMPOUND_MASK) ||
p->section == Entry::NAMESPACE_SEC p->section == Entry::NAMESPACE_SEC
) && !p->name.isEmpty() && p->name[0]!='@' ) && !p->name.isEmpty() && p->name[0]!='@'
) )
{ {
if (scopeName.left(p->name.length())==p->name)
break; // scope already present, so stop now
// prepend name to scope
if (!scopeName.isEmpty()) scopeName.prepend("::"); if (!scopeName.isEmpty()) scopeName.prepend("::");
scopeName.prepend(p->name); scopeName.prepend(p->name);
break; // stop here because the class name already contains
// the whole scope!
} }
p=p->parent; p=p->parent;
} }
...@@ -1906,6 +2006,7 @@ void findMember(Entry *root,QString funcDecl,QString related,bool overloaded, ...@@ -1906,6 +2006,7 @@ void findMember(Entry *root,QString funcDecl,QString related,bool overloaded,
md->setDefFile(root->fileName); md->setDefFile(root->fileName);
md->setDefLine(root->startLine); md->setDefLine(root->startLine);
md->setPrototype(root->proto); md->setPrototype(root->proto);
md->addSectionsToDefinition(root->anchors);
mn->inSort(md); mn->inSort(md);
cd->insertMember(md); cd->insertMember(md);
cd->insertUsedFile(root->fileName); cd->insertUsedFile(root->fileName);
...@@ -1970,6 +2071,7 @@ void findMember(Entry *root,QString funcDecl,QString related,bool overloaded, ...@@ -1970,6 +2071,7 @@ void findMember(Entry *root,QString funcDecl,QString related,bool overloaded,
md->setDefFile(root->fileName); md->setDefFile(root->fileName);
md->setDefLine(root->startLine); md->setDefLine(root->startLine);
md->setPrototype(root->proto); md->setPrototype(root->proto);
md->addSectionsToDefinition(root->anchors);
mn->inSort(md); mn->inSort(md);
cd->insertMember(md); cd->insertMember(md);
cd->insertUsedFile(root->fileName); cd->insertUsedFile(root->fileName);
...@@ -2014,7 +2116,7 @@ void findMember(Entry *root,QString funcDecl,QString related,bool overloaded, ...@@ -2014,7 +2116,7 @@ void findMember(Entry *root,QString funcDecl,QString related,bool overloaded,
void findMemberDocumentation(Entry *root) void findMemberDocumentation(Entry *root)
{ {
int i,l; int i,l;
QRegExp re("([a-zA-Z0-9: ]*[ *]+[ ]*"); QRegExp re("([a-zA-Z0-9: ]*\\*+[ \\*]*");
Debug::print(Debug::FindMembers,0, Debug::print(Debug::FindMembers,0,
"root->type=`%s' root->name=`%s' root->args=`%s'\n", "root->type=`%s' root->name=`%s' root->args=`%s'\n",
root->type.data(),root->name.data(),root->args.data() root->type.data(),root->name.data(),root->args.data()
...@@ -2026,7 +2128,7 @@ void findMemberDocumentation(Entry *root) ...@@ -2026,7 +2128,7 @@ void findMemberDocumentation(Entry *root)
root->type=root->type.left(i+l); root->type=root->type.left(i+l);
isFunc=FALSE; isFunc=FALSE;
} }
else if (root->name.find(re)!=-1 && root->name.find("operator")!=-1) else if (root->name.find(re)!=-1 && root->name.find("operator")==-1)
// func ptr entered with \fn, \var or \typedef // func ptr entered with \fn, \var or \typedef
{ {
isFunc=FALSE; isFunc=FALSE;
...@@ -2151,6 +2253,7 @@ void findEnums(Entry *root) ...@@ -2151,6 +2253,7 @@ void findEnums(Entry *root)
if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd); if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd);
md->setDefFile(root->fileName); md->setDefFile(root->fileName);
md->setDefLine(root->startLine); md->setDefLine(root->startLine);
md->addSectionsToDefinition(root->anchors);
if (nd) if (nd)
{ {
md->setDefinition(nd->name()+"::"+name); md->setDefinition(nd->name()+"::"+name);
...@@ -2301,6 +2404,7 @@ void findEnumDocumentation(Entry *root) ...@@ -2301,6 +2404,7 @@ void findEnumDocumentation(Entry *root)
{ {
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
} }
md->addSectionsToDefinition(root->anchors);
found=TRUE; found=TRUE;
} }
md=mn->next(); md=mn->next();
...@@ -2319,6 +2423,7 @@ void findEnumDocumentation(Entry *root) ...@@ -2319,6 +2423,7 @@ void findEnumDocumentation(Entry *root)
{ {
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
md->addSectionsToDefinition(root->anchors);
found=TRUE; found=TRUE;
} }
} }
...@@ -2338,6 +2443,49 @@ void findEnumDocumentation(Entry *root) ...@@ -2338,6 +2443,49 @@ void findEnumDocumentation(Entry *root)
} }
} }
// seach for each enum (member or function) in mnl if it has documented
// enum values.
static void findDEV(const MemberNameList &mnl)
{
MemberName *mn;
MemberNameListIterator mnli(mnl);
// for each member name
for (mnli.toFirst();(mn=mnli.current());++mnli)
{
MemberDef *md;
MemberNameIterator mni(*mn);
// for each member definition
for (mni.toFirst();(md=mni.current());++mni)
{
if (md->isEnumerate()) // member is an enum
{
QList<MemberDef> *fmdl = md->enumFieldList();
int documentedEnumValues=0;
if (fmdl) // enum has values
{
MemberDef *fmd=fmdl->first();
// for each enum value
while (fmd)
{
if (fmd->hasDocumentation()) documentedEnumValues++;
fmd=fmdl->next();
}
}
// at least one enum value is documented
if (documentedEnumValues>0) md->setDocumentedEnumValues(TRUE);
}
}
}
}
// seach for each enum (member or function) if it has documented enum
// values.
void findDocumentedEnumValues()
{
findDEV(memberNameList);
findDEV(functionNameList);
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// recursive function: // recursive function:
// returns TRUE iff class definition `bcd' represents an (in)direct base // returns TRUE iff class definition `bcd' represents an (in)direct base
...@@ -2695,6 +2843,7 @@ void findDefineDocumentation(Entry *root) ...@@ -2695,6 +2843,7 @@ void findDefineDocumentation(Entry *root)
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
if (md->briefDescription().isEmpty()) if (md->briefDescription().isEmpty())
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
md->addSectionsToDefinition(root->anchors);
} }
md=mn->next(); md=mn->next();
} }
...@@ -2715,6 +2864,7 @@ void findDefineDocumentation(Entry *root) ...@@ -2715,6 +2864,7 @@ void findDefineDocumentation(Entry *root)
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
if (md->briefDescription().isEmpty()) if (md->briefDescription().isEmpty())
md->setBriefDescription(root->brief); md->setBriefDescription(root->brief);
md->addSectionsToDefinition(root->anchors);
} }
} }
md=mn->next(); md=mn->next();
...@@ -2769,6 +2919,7 @@ void buildPageList(Entry *root) ...@@ -2769,6 +2919,7 @@ void buildPageList(Entry *root)
baseName=baseName.left(baseName.length()-5); baseName=baseName.left(baseName.length()-5);
pi=new PageInfo(baseName, root->doc, pi=new PageInfo(baseName, root->doc,
root->args.stripWhiteSpace()); root->args.stripWhiteSpace());
setFileNameForSections(root->anchors,root->name);
pageList.append(pi); pageList.append(pi);
pageDict.insert(baseName,pi); pageDict.insert(baseName,pi);
if (pi->title.length()>0) if (pi->title.length()>0)
...@@ -2779,8 +2930,11 @@ void buildPageList(Entry *root) ...@@ -2779,8 +2930,11 @@ void buildPageList(Entry *root)
else else
pageName=pi->name.lower(); pageName=pi->name.lower();
//outputList->writeTitle(pi->name,pi->title); //outputList->writeTitle(pi->name,pi->title);
SectionInfo *si=new SectionInfo(pageName+".html",
pi->name,pi->title,FALSE); // a page name is a label as well!
SectionInfo *si=new SectionInfo(
pi->name,pi->title,SectionInfo::Section);
si->fileName=pageName+".html";
//printf("Adding section info %s\n",pi->name.data()); //printf("Adding section info %s\n",pi->name.data());
sectionDict.insert(pi->name,si); sectionDict.insert(pi->name,si);
} }
...@@ -2795,6 +2949,26 @@ void buildPageList(Entry *root) ...@@ -2795,6 +2949,26 @@ void buildPageList(Entry *root)
} }
} }
//----------------------------------------------------------------------------
void resolveUserReferences()
{
QDictIterator<SectionInfo> sdi(sectionDict);
SectionInfo *si;
for (;(si=sdi.current());++sdi)
{
if (si->definition)
{
//printf("si=`%s' def=`%s' file=`%s'\n",
// si->label.data(),
// si->definition->name().data(),
// si->definition->getOutputFileBase().data());
si->fileName=si->definition->getOutputFileBase().copy();
}
}
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// generate all separate documentation pages // generate all separate documentation pages
...@@ -2802,15 +2976,8 @@ void generatePageDocs() ...@@ -2802,15 +2976,8 @@ void generatePageDocs()
{ {
PageInfo *pi=pageList.first(); PageInfo *pi=pageList.first();
while (pi) while (pi)
{
if (!pi->title.isEmpty())
{
msg("Generating docs for page %s...\n",pi->title.data());
}
else
{ {
msg("Generating docs for page %s...\n",pi->name.data()); msg("Generating docs for page %s...\n",pi->name.data());
}
outputList->disable(OutputGenerator::Man); outputList->disable(OutputGenerator::Man);
QString pageName; QString pageName;
if (caseSensitiveNames) if (caseSensitiveNames)
...@@ -2850,6 +3017,7 @@ void buildExampleList(Entry *root) ...@@ -2850,6 +3017,7 @@ void buildExampleList(Entry *root)
else else
{ {
PageInfo *pi=new PageInfo(root->name,root->doc,root->args); PageInfo *pi=new PageInfo(root->name,root->doc,root->args);
setFileNameForSections(root->anchors,root->name);
exampleList.inSort(pi); exampleList.inSort(pi);
exampleDict.insert(root->name,pi); exampleDict.insert(root->name,pi);
} }
...@@ -3166,6 +3334,7 @@ void readFiles(BufStr &output) ...@@ -3166,6 +3334,7 @@ void readFiles(BufStr &output)
s=inputFiles.next(); s=inputFiles.next();
} }
// *p++='\0'; // *p++='\0';
output.addChar('\n'); /* to prevent problems under Windows ? */
output.addChar(0); output.addChar(0);
//printf("Output after preprocessing:\n---------\n%s\n----------\n",output.data()); //printf("Output after preprocessing:\n---------\n%s\n----------\n",output.data());
//printf("Final length = %d\n",p-output.data()); //printf("Final length = %d\n",p-output.data());
...@@ -3206,7 +3375,7 @@ int readDir(QFileInfo *fi, ...@@ -3206,7 +3375,7 @@ int readDir(QFileInfo *fi,
else if (cfi->isFile() && else if (cfi->isFile() &&
patternMatch(cfi,patList) && !patternMatch(cfi,exclPatList)) patternMatch(cfi,patList) && !patternMatch(cfi,exclPatList))
{ {
totalSize+=cfi->size()+cfi->absFilePath().length()+3; totalSize+=cfi->size()+cfi->absFilePath().length()+4;
QString name=cfi->fileName(); QString name=cfi->fileName();
if (fnDict) if (fnDict)
{ {
...@@ -3306,7 +3475,7 @@ int readFileOrDirectory(const char *s, ...@@ -3306,7 +3475,7 @@ int readFileOrDirectory(const char *s,
} }
else if (fi.isFile()) else if (fi.isFile())
{ {
totalSize+=fi.size()+fi.absFilePath().length()+3; //readFile(&fi,fiList,input); totalSize+=fi.size()+fi.absFilePath().length()+4; //readFile(&fi,fiList,input);
//fiList->inSort(new FileInfo(fi)); //fiList->inSort(new FileInfo(fi));
QString name=fi.fileName(); QString name=fi.fileName();
if (fnDict) if (fnDict)
...@@ -3646,16 +3815,19 @@ int main(int argc,char **argv) ...@@ -3646,16 +3815,19 @@ int main(int argc,char **argv)
msg("Searching for enumerations...\n"); msg("Searching for enumerations...\n");
findEnums(root); findEnums(root);
findEnumDocumentation(root); findEnumDocumentation(root);
// msg("Searching for function prototypes...\n"); // msg("Searching for function prototypes...\n");
// findPrototypes(root); // may introduce new members ! // findPrototypes(root); // may introduce new members !
msg("Searching for member function documentation...\n"); msg("Searching for member function documentation...\n");
findMemberDocumentation(root); // may introduce new members ! findMemberDocumentation(root); // may introduce new members !
msg("Freeing entry tree\n"); msg("Freeing entry tree\n");
delete root; delete root;
msg("Determining which enums are documented\n");
findDocumentedEnumValues();
msg("Computing member references...\n"); msg("Computing member references...\n");
computeMemberReferences(); computeMemberReferences();
...@@ -3680,17 +3852,21 @@ int main(int argc,char **argv) ...@@ -3680,17 +3852,21 @@ int main(int argc,char **argv)
msg("Counting data structures...\n"); msg("Counting data structures...\n");
annotatedClasses = countAnnotatedClasses(); annotatedClasses = countAnnotatedClasses();
hierarchyClasses = countClassHierarchy(); hierarchyClasses = countClassHierarchy();
documentedMembers = countMemberList(); documentedMembers = countClassMembers();
documentedFunctions = countFunctionList(); documentedFunctions = countFileMembers();
documentedFiles = countFileList(); documentedFiles = countFiles();
documentedGroups = countGroupList(); documentedGroups = countGroups();
documentedNamespaces = countNamespaceList(); documentedNamespaces = countNamespaces();
documentedNamespaceMembers = countNamespaceMembers();
// compute the shortest possible names of all files // compute the shortest possible names of all files
// without loosing the uniqueness of the file names. // without loosing the uniqueness of the file names.
msg("Generating disk names...\n"); msg("Generating disk names...\n");
inputNameList.generateDiskNames(); inputNameList.generateDiskNames();
msg("Resolving user defined references...\n");
resolveUserReferences();
msg("Generating example documentation...\n"); msg("Generating example documentation...\n");
generateExampleDocs(); generateExampleDocs();
...@@ -3715,8 +3891,11 @@ int main(int argc,char **argv) ...@@ -3715,8 +3891,11 @@ int main(int argc,char **argv)
msg("Generating example index...\n"); msg("Generating example index...\n");
writeExampleIndex(*outputList); writeExampleIndex(*outputList);
msg("Generating function index...\n"); msg("Generating file member index...\n");
writeFunctionIndex(*outputList); writeFileMemberIndex(*outputList);
msg("Generating namespace member index...\n");
writeNamespaceMemberIndex(*outputList);
// msg("Generating define index...\n"); // msg("Generating define index...\n");
// writeDefineIndex(*outputList); // writeDefineIndex(*outputList);
...@@ -3730,17 +3909,17 @@ int main(int argc,char **argv) ...@@ -3730,17 +3909,17 @@ int main(int argc,char **argv)
msg("Generating style sheet...\n"); msg("Generating style sheet...\n");
outputList->writeStyleInfo(0); // write first part outputList->writeStyleInfo(0); // write first part
outputList->disableAllBut(OutputGenerator::Latex); outputList->disableAllBut(OutputGenerator::Latex);
parseDoc(*outputList,0,0, parseText(*outputList,
theTranslator->trGeneratedAt(dateToString(TRUE),projectName) theTranslator->trGeneratedAt(dateToString(TRUE),projectName)
); );
outputList->writeStyleInfo(1); // write second part outputList->writeStyleInfo(1); // write second part
parseDoc(*outputList,0,0, theTranslator->trWrittenBy()); parseText(*outputList,theTranslator->trWrittenBy());
outputList->writeStyleInfo(2); // write third part outputList->writeStyleInfo(2); // write third part
parseDoc(*outputList,0,0, parseText(*outputList,
theTranslator->trGeneratedAt(dateToString(TRUE),projectName) theTranslator->trGeneratedAt(dateToString(TRUE),projectName)
); );
outputList->writeStyleInfo(3); // write fourth part outputList->writeStyleInfo(3); // write fourth part
parseDoc(*outputList,0,0, theTranslator->trWrittenBy()); parseText(*outputList,theTranslator->trWrittenBy());
outputList->writeStyleInfo(4); // write last part outputList->writeStyleInfo(4); // write last part
outputList->enableAll(); outputList->enableAll();
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "define.h" #include "define.h"
#include "namespacedef.h" #include "namespacedef.h"
#include "formula.h" #include "formula.h"
#include "section.h"
struct PageInfo struct PageInfo
{ {
...@@ -72,23 +73,12 @@ class BufStr : public QString ...@@ -72,23 +73,12 @@ class BufStr : public QString
const int spareRoom; // 10Kb extra room to avoid frequent resizing const int spareRoom; // 10Kb extra room to avoid frequent resizing
}; };
struct SectionInfo
{
SectionInfo(const char *n,const char *l,const char *t,bool sub)
{ pageName=n; label=l; title=t; isSubsection=sub; }
QString pageName;
QString label;
QString title;
bool isSubsection;
};
typedef QList<QString> StringList; typedef QList<QString> StringList;
typedef QDict<MemberDef> MemberDict; typedef QDict<MemberDef> MemberDict;
typedef QDict<ClassDef> ClassDict; typedef QDict<ClassDef> ClassDict;
typedef QDict<FileDef> FileDict; typedef QDict<FileDef> FileDict;
typedef QDict<QString> StringDict; typedef QDict<QString> StringDict;
typedef QDict<PageInfo> PageDict; typedef QDict<PageInfo> PageDict;
typedef QDict<SectionInfo> SectionDict;
typedef QDict<GroupDef> GroupDict; typedef QDict<GroupDef> GroupDict;
extern const char * getOverloadDocs(); extern const char * getOverloadDocs();
...@@ -118,6 +108,7 @@ extern FileList includeFiles; ...@@ -118,6 +108,7 @@ extern FileList includeFiles;
extern StringDict typedefDict; extern StringDict typedefDict;
extern GroupList groupList; extern GroupList groupList;
extern NamespaceList namespaceList; extern NamespaceList namespaceList;
extern NamespaceDict namespaceDict;
extern FormulaList formulaList; extern FormulaList formulaList;
extern FormulaDict formulaDict; extern FormulaDict formulaDict;
extern FormulaDict formulaNameDict; extern FormulaDict formulaNameDict;
...@@ -130,5 +121,6 @@ extern int documentedDefines; ...@@ -130,5 +121,6 @@ extern int documentedDefines;
extern int documentedFiles; extern int documentedFiles;
extern int documentedGroups; extern int documentedGroups;
extern int documentedNamespaces; extern int documentedNamespaces;
extern int documentedNamespaceMembers;
#endif #endif
...@@ -251,7 +251,8 @@ QString unhtmlify(const char *str) ...@@ -251,7 +251,8 @@ QString unhtmlify(const char *str)
} }
<SearchWords>[a-z_A-Z0-9]+ { <SearchWords>[a-z_A-Z0-9]+ {
docAnchor = yytext; docAnchor = yytext;
if (docAnchor=="details") if (docAnchor=="details" ||
docAnchor=="_details")
{ {
docRefName=className.copy(); docRefName=className.copy();
addReference(); addReference();
......
...@@ -29,6 +29,8 @@ Entry::Entry() ...@@ -29,6 +29,8 @@ Entry::Entry()
extends->setAutoDelete(TRUE); extends->setAutoDelete(TRUE);
groups = new QList<QString>; groups = new QList<QString>;
groups->setAutoDelete(TRUE); groups->setAutoDelete(TRUE);
anchors = new QList<QString>;
anchors->setAutoDelete(TRUE);
argList = new ArgumentList; argList = new ArgumentList;
argList->setAutoDelete(TRUE); argList->setAutoDelete(TRUE);
//printf("Entry::Entry() tArgList=0\n"); //printf("Entry::Entry() tArgList=0\n");
...@@ -66,6 +68,8 @@ Entry::Entry(const Entry &e) ...@@ -66,6 +68,8 @@ Entry::Entry(const Entry &e)
extends->setAutoDelete(TRUE); extends->setAutoDelete(TRUE);
groups = new QList<QString>; groups = new QList<QString>;
groups->setAutoDelete(TRUE); groups->setAutoDelete(TRUE);
anchors = new QList<QString>;
anchors->setAutoDelete(TRUE);
argList = new ArgumentList; argList = new ArgumentList;
argList->setAutoDelete(TRUE); argList->setAutoDelete(TRUE);
//printf("Entry::Entry(copy) tArgList=0\n"); //printf("Entry::Entry(copy) tArgList=0\n");
...@@ -95,6 +99,12 @@ Entry::Entry(const Entry &e) ...@@ -95,6 +99,12 @@ Entry::Entry(const Entry &e)
groups->append(new QString(*s)); groups->append(new QString(*s));
} }
QListIterator<QString> sli2(*e.anchors);
for (;(s=sli2.current());++sli2)
{
anchors->append(new QString(*s));
}
// deep copy argument list // deep copy argument list
QListIterator<Argument> ali(*e.argList); QListIterator<Argument> ali(*e.argList);
Argument *a; Argument *a;
...@@ -128,6 +138,7 @@ Entry::~Entry() ...@@ -128,6 +138,7 @@ Entry::~Entry()
delete sublist; delete sublist;
delete extends; delete extends;
delete groups; delete groups;
delete anchors;
delete argList; delete argList;
//printf("Entry::~Entry() tArgList=%p\n",tArgList); //printf("Entry::~Entry() tArgList=%p\n",tArgList);
delete tArgList; delete tArgList;
...@@ -177,6 +188,7 @@ void Entry::reset() ...@@ -177,6 +188,7 @@ void Entry::reset()
sublist->clear(); sublist->clear();
extends->clear(); extends->clear();
groups->clear(); groups->clear();
anchors->clear();
argList->clear(); argList->clear();
if (tArgList) { delete tArgList; tArgList=0; } if (tArgList) { delete tArgList; tArgList=0; }
} }
...@@ -211,6 +223,13 @@ int Entry::getSize() ...@@ -211,6 +223,13 @@ int Entry::getSize()
size+=s->length()+1; size+=s->length()+1;
s=groups->next(); s=groups->next();
} }
s=anchors->first();
while (s)
{
size+=sizeof(QLNode);
size+=s->length()+1;
s=anchors->next();
}
Entry *e=sublist->first(); Entry *e=sublist->first();
while (e) while (e)
{ {
......
...@@ -140,6 +140,7 @@ class Entry ...@@ -140,6 +140,7 @@ class Entry
QList<Entry> *sublist; // entries that are children of this one QList<Entry> *sublist; // entries that are children of this one
QList<BaseInfo> *extends; // list of base classes QList<BaseInfo> *extends; // list of base classes
QList<QString> *groups; // list of groups this entry belongs to QList<QString> *groups; // list of groups this entry belongs to
QList<QString> *anchors; // list of anchors defined in this entry
QString fileName; // file this entry was extracted from QString fileName; // file this entry was extracted from
int startLine; // start line of entry in the source int startLine; // start line of entry in the source
int num; int num;
......
...@@ -69,7 +69,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -69,7 +69,7 @@ void FileDef::writeDocumentation(OutputList &ol)
QString pageTitle=name()+" File Reference"; QString pageTitle=name()+" File Reference";
startFile(ol,diskname,pageTitle); startFile(ol,diskname,pageTitle);
startTitle(ol); startTitle(ol);
ol.docify(pageTitle); parseText(ol,theTranslator->trFileReference(name()));
endTitle(ol,name()); endTitle(ol,name());
//ol.newParagraph(); //ol.newParagraph();
...@@ -86,8 +86,8 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -86,8 +86,8 @@ void FileDef::writeDocumentation(OutputList &ol)
ol+=briefOutput; ol+=briefOutput;
ol.writeString(" \n"); ol.writeString(" \n");
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.startTextLink(0,"details"); ol.startTextLink(0,"_details");
parseDoc(ol,0,0,theTranslator->trMore()); parseText(ol,theTranslator->trMore());
ol.endTextLink(); ol.endTextLink();
ol.enableAll(); ol.enableAll();
} }
...@@ -96,6 +96,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -96,6 +96,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.enable(OutputGenerator::Man); ol.enable(OutputGenerator::Man);
ol.writeSynopsis(); ol.writeSynopsis();
ol.startMemberSections();
if (classList->count()>0) if (classList->count()>0)
{ {
ClassDef *cd=classList->first(); ClassDef *cd=classList->first();
...@@ -111,7 +112,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -111,7 +112,7 @@ void FileDef::writeDocumentation(OutputList &ol)
if (!found) if (!found)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseDoc(ol,0,0,theTranslator->trCompounds()); parseText(ol,theTranslator->trCompounds());
ol.endMemberHeader(); ol.endMemberHeader();
ol.startMemberList(); ol.startMemberList();
found=TRUE; found=TRUE;
...@@ -124,10 +125,11 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -124,10 +125,11 @@ void FileDef::writeDocumentation(OutputList &ol)
case ClassDef::Union: ol.writeString("union"); break; case ClassDef::Union: ol.writeString("union"); break;
} }
ol.writeString(" "); ol.writeString(" ");
ol.insertMemberAlign();
if (cd->hasDocumentation()) if (cd->hasDocumentation())
{ {
ol.writeObjectLink(cd->getReference(), ol.writeObjectLink(cd->getReference(),
cd->classFile(), cd->getOutputFileBase(),
0, 0,
cd->name() cd->name()
); );
...@@ -146,6 +148,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -146,6 +148,7 @@ void FileDef::writeDocumentation(OutputList &ol)
} }
writeMemberDecs(ol,0,0,this,0,0,memList); writeMemberDecs(ol,0,0,this,0,0,memList);
ol.endMemberSections();
//doc=doc.stripWhiteSpace(); //doc=doc.stripWhiteSpace();
//int bl=brief.length(); //int bl=brief.length();
...@@ -153,9 +156,12 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -153,9 +156,12 @@ void FileDef::writeDocumentation(OutputList &ol)
if (!briefDescription().isEmpty() || !documentation().isEmpty()) if (!briefDescription().isEmpty() || !documentation().isEmpty())
{ {
ol.writeRuler(); ol.writeRuler();
ol.writeAnchor("details"); bool latexOn = ol.isEnabled(OutputGenerator::Latex);
if (latexOn) ol.disable(OutputGenerator::Latex);
ol.writeAnchor("_details");
if (latexOn) ol.enable(OutputGenerator::Latex);
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trDetailedDescription()); parseText(ol,theTranslator->trDetailedDescription());
ol.endGroupHeader(); ol.endGroupHeader();
if (!briefDescription().isEmpty()) if (!briefDescription().isEmpty())
{ {
...@@ -177,7 +183,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -177,7 +183,7 @@ void FileDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trDefineDocumentation()); parseText(ol,theTranslator->trDefineDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Define); writeMemberDocs(ol,memList,name(),MemberDef::Define);
} }
...@@ -186,7 +192,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -186,7 +192,7 @@ void FileDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trFunctionPrototypeDocumentation()); parseText(ol,theTranslator->trFunctionPrototypeDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Prototype); writeMemberDocs(ol,memList,name(),MemberDef::Prototype);
} }
...@@ -195,7 +201,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -195,7 +201,7 @@ void FileDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trTypedefDocumentation()); parseText(ol,theTranslator->trTypedefDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Typedef); writeMemberDocs(ol,memList,name(),MemberDef::Typedef);
} }
...@@ -204,7 +210,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -204,7 +210,7 @@ void FileDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trEnumerationTypeDocumentation()); parseText(ol,theTranslator->trEnumerationTypeDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Enumeration); writeMemberDocs(ol,memList,name(),MemberDef::Enumeration);
} }
...@@ -213,7 +219,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -213,7 +219,7 @@ void FileDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trEnumerationValueDocumentation()); parseText(ol,theTranslator->trEnumerationValueDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::EnumValue); writeMemberDocs(ol,memList,name(),MemberDef::EnumValue);
} }
...@@ -222,7 +228,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -222,7 +228,7 @@ void FileDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trFunctionDocumentation()); parseText(ol,theTranslator->trFunctionDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Function); writeMemberDocs(ol,memList,name(),MemberDef::Function);
} }
...@@ -231,7 +237,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -231,7 +237,7 @@ void FileDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trVariableDocumentation()); parseText(ol,theTranslator->trVariableDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Variable); writeMemberDocs(ol,memList,name(),MemberDef::Variable);
} }
...@@ -239,9 +245,9 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -239,9 +245,9 @@ void FileDef::writeDocumentation(OutputList &ol)
// write Author section (Man only) // write Author section (Man only)
ol.disableAllBut(OutputGenerator::Man); ol.disableAllBut(OutputGenerator::Man);
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trAuthor()); parseText(ol,theTranslator->trAuthor());
ol.endGroupHeader(); ol.endGroupHeader();
parseDoc(ol,0,0,theTranslator->trGeneratedAutomatically(projectName)); parseText(ol,theTranslator->trGeneratedAutomatically(projectName));
ol.enableAll(); ol.enableAll();
endFile(ol); endFile(ol);
} }
......
...@@ -62,7 +62,8 @@ class FileDef : public Definition ...@@ -62,7 +62,8 @@ class FileDef : public Definition
} }
/*! Returns nameString with all slashes replaced by underscores. */ /*! Returns nameString with all slashes replaced by underscores. */
const char *diskName() const { return diskname; } //const char *diskName() const { return diskname; }
QString getOutputFileBase() const { return diskname; }
/*! Returns the absolute path including the file name. */ /*! Returns the absolute path including the file name. */
QString absFilePath() const { return filepath; } QString absFilePath() const { return filepath; }
......
...@@ -90,20 +90,20 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -90,20 +90,20 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol+=briefOutput; ol+=briefOutput;
ol.writeString(" \n"); ol.writeString(" \n");
ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::Latex);
ol.startTextLink(0,"details"); ol.startTextLink(0,"_details");
parseDoc(ol,0,0,theTranslator->trMore()); parseText(ol,theTranslator->trMore());
ol.enable(OutputGenerator::Latex); ol.enable(OutputGenerator::Latex);
} }
if (fileList->count()>0) if (fileList->count()>0)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseDoc(ol,0,0,theTranslator->trFiles()); parseText(ol,theTranslator->trFiles());
ol.endMemberHeader(); ol.endMemberHeader();
ol.startIndexList(); ol.startIndexList();
FileDef *fd=fileList->first(); FileDef *fd=fileList->first();
while (fd) while (fd)
{ {
ol.writeStartAnnoItem("file ",fd->diskName(),0,fd->name()); ol.writeStartAnnoItem("file ",fd->getOutputFileBase(),0,fd->name());
ol.writeEndAnnoItem(fd->name()); ol.writeEndAnnoItem(fd->name());
fd=fileList->next(); fd=fileList->next();
} }
...@@ -112,7 +112,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -112,7 +112,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (classList->count()>0) if (classList->count()>0)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseDoc(ol,0,0,theTranslator->trCompounds()); parseText(ol,theTranslator->trCompounds());
ol.endMemberHeader(); ol.endMemberHeader();
ol.startIndexList(); ol.startIndexList();
ClassDef *cd=classList->first(); ClassDef *cd=classList->first();
...@@ -125,7 +125,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -125,7 +125,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
case ClassDef::Struct: type="struct"; break; case ClassDef::Struct: type="struct"; break;
case ClassDef::Union: type="union"; break; case ClassDef::Union: type="union"; break;
} }
ol.writeStartAnnoItem(type,cd->classFile(),0,cd->name()); ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->name());
ol.writeEndAnnoItem(cd->name()); ol.writeEndAnnoItem(cd->name());
cd=classList->next(); cd=classList->next();
} }
...@@ -136,9 +136,12 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -136,9 +136,12 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (!briefDescription().isEmpty() || !documentation().isEmpty()) if (!briefDescription().isEmpty() || !documentation().isEmpty())
{ {
ol.writeRuler(); ol.writeRuler();
ol.writeAnchor("details"); bool latexOn = ol.isEnabled(OutputGenerator::Latex);
if (latexOn) ol.disable(OutputGenerator::Latex);
ol.writeAnchor("_details");
if (latexOn) ol.enable(OutputGenerator::Latex);
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trDetailedDescription()); parseText(ol,theTranslator->trDetailedDescription());
ol.endGroupHeader(); ol.endGroupHeader();
// repeat brief description // repeat brief description
if (!briefDescription().isEmpty()) if (!briefDescription().isEmpty())
......
...@@ -35,7 +35,8 @@ class GroupDef : public Definition ...@@ -35,7 +35,8 @@ class GroupDef : public Definition
public: public:
GroupDef(const char *name,const char *title); GroupDef(const char *name,const char *title);
~GroupDef(); ~GroupDef();
const char *groupFile() const { return fileName; } //const char *groupFile() const { return fileName; }
QString getOutputFileBase() const { return fileName; }
const char *groupTitle() const { return title; } const char *groupTitle() const { return title; }
void addFile(const FileDef *def); void addFile(const FileDef *def);
void addClass(const ClassDef *def); void addClass(const ClassDef *def);
......
...@@ -51,77 +51,10 @@ void HtmlGenerator::init() ...@@ -51,77 +51,10 @@ void HtmlGenerator::init()
writeLogo(htmlOutputDir); writeLogo(htmlOutputDir);
} }
//void HtmlGenerator::generateExternalIndex()
//{
// //printf("Generating external index...\n");
// QFile f;
// f.setName(htmlOutputDir+"/header.html");
// if (f.open(IO_WriteOnly))
// {
// QTextStream tt(&f);
// if (header.length()==0)
// {
// tt << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
// "<html><head><meta name=\"robots\" content=\"noindex\">\n"
// "<title>Doxysearch</title>\n"
// "</head><body bgcolor=\"#ffffff\">\n";
// }
// else
// {
// tt << header;
// }
// if (!noIndexFlag)
// {
// tt << "<center>";
// if (documentedGroups>0)
// tt << "<a doxygen=\"_doc:\" href=\"/modules.html\">Modules</a> &nbsp; ";
// if (hierarchyClasses>0)
// tt << "<a doxygen=\"_doc:\" href=\"/hierarchy.html\">Class hierarchy</a> &nbsp; ";
// if (annotatedClasses>0)
// tt << "<a doxygen=\"_doc:\" href=\"/annotated.html\">Compound list</a> &nbsp; ";
// if (documentedFiles>0)
// tt << "<a doxygen=\"_doc:\" href=\"/files.html\">File list</a> &nbsp; ";
// if (includeFiles.count()>0)
// tt << "<a doxygen=\"_doc:\" href=\"/headers.html\">Header files</a> &nbsp; ";
// if (documentedMembers>0)
// tt << "<a doxygen=\"_doc:\" href=\"/functions.html\">Compound Members</a> &nbsp; ";
// if (documentedFunctions>0)
// tt << "<a doxygen=\"_doc:\" href=\"/globals.html\">File Members</a> &nbsp; ";
// if (pageList.count()>0)
// tt << "<a doxygen=\"_doc:\" href=\"/pages.html\">Related Pages</a> &nbsp; ";
// if (exampleList.count()>0)
// tt << "<a doxygen=\"_doc:\" href=\"/examples.html\">Examples</a> &nbsp; ";
// if (searchEngineFlag)
// tt << "<a doxygen=\"_cgi:\" href=\"\">Search</a>";
// tt << endl << "</center><hr>" << endl;
// }
// }
// f.close();
//
// f.setName(htmlOutputDir+"/footer.html");
// if (f.open(IO_WriteOnly))
// {
// QTextStream tt(&f);
// if (footer.length()==0)
// {
// tt << "<hr><address><small>Generated at " << dateToString(TRUE);
// if (projectName.length()>0) tt << " for " << projectName;
// tt << " by <a href=\"http://www.stack.nl/~dimitri/doxygen/index.html\">"
// "doxygen</a>&nbsp; written by <a href="
// "\"mailto:dimitri@stack.nl\">Dimitri van Heesch</a>, &copy; "
// "1997-1999</small></address>\n</body>\n</html>\n";
// }
// else
// {
// tt << footer;
// }
// }
// f.close();
//}
void HtmlGenerator::startFile(const char *name,const char *title,bool external) void HtmlGenerator::startFile(const char *name,const char *title,bool external)
{ {
QString fileName=name; QString fileName=name;
lastTitle=title;
if (fileName.right(5)!=".html") fileName+=".html"; if (fileName.right(5)!=".html") fileName+=".html";
startPlainFile(fileName); startPlainFile(fileName);
if (header.length()==0) if (header.length()==0)
...@@ -139,34 +72,14 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external) ...@@ -139,34 +72,14 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
} }
else else
{ {
t << header; t << substitute(
} substitute(
substitute(header,"$title",lastTitle),
// if (!noIndexFlag) "$datetime",dateToString(TRUE)
// { ),
// t << "<center>"; "$date",dateToString(FALSE)
// if (documentedGroups>0) );
// t << "<a href=\"modules.html\">Modules</a> &nbsp; "; }
// if (hierarchyClasses>0)
// t << "<a href=\"hierarchy.html\">Class hierarchy</a> &nbsp; ";
// if (annotatedClasses>0)
// t << "<a href=\"annotated.html\">Compound list</a> &nbsp; ";
// if (documentedFiles>0)
// t << "<a href=\"files.html\">File list</a> &nbsp; ";
// if (includeFiles.count()>0)
// t << "<a href=\"headers.html\">Header files</a> &nbsp; ";
// if (documentedMembers>0)
// t << "<a href=\"functions.html\">Compound Members</a> &nbsp; ";
// if (documentedFunctions>0)
// t << "<a href=\"globals.html\">File Members</a> &nbsp; ";
// if (pageList.count()>0)
// t << "<a href=\"pages.html\">Related Pages</a> &nbsp; ";
// if (exampleList.count()>0)
// t << "<a href=\"examples.html\">Examples</a> &nbsp; ";
// if (searchEngineFlag)
// t << "<a doxygen=\"_cgi:\" href=\"\">Search</a>";
// t << endl << "</center><hr>" << endl;
// }
} }
void HtmlGenerator::startQuickIndexItem(const char *s,const char *l) void HtmlGenerator::startQuickIndexItem(const char *s,const char *l)
...@@ -189,7 +102,13 @@ void HtmlGenerator::writeFooter(int part,bool external) ...@@ -189,7 +102,13 @@ void HtmlGenerator::writeFooter(int part,bool external)
if (footer.length()==0) if (footer.length()==0)
t << "<hr><address><small>"; t << "<hr><address><small>";
else else
t << footer; t << substitute(
substitute(
substitute(footer,"$title",lastTitle),
"$datetime",dateToString(TRUE)
),
"$date",dateToString(FALSE)
);
break; break;
case 1: case 1:
if (footer.length()==0) if (footer.length()==0)
...@@ -219,24 +138,6 @@ void HtmlGenerator::writeFooter(int part,bool external) ...@@ -219,24 +138,6 @@ void HtmlGenerator::writeFooter(int part,bool external)
void HtmlGenerator::endFile() void HtmlGenerator::endFile()
{ {
// if (footer.length()==0)
// {
// t << "<hr><address><small>Generated at " << dateToString(TRUE);
// if (projectName.length()>0)
// {
// t << " for ";
// docify(projectName);
// }
// t << " by <a href=\"http://www.stack.nl/~dimitri/doxygen/index.html\">"
// "<img src=\"doxygen.gif\" alt=\"doxygen\" align=center border=0 "
// "width=118 height=53></a>&nbsp; written by <a href="
// "\"mailto:dimitri@stack.nl\">Dimitri van Heesch</a>, &copy; "
// "1997-1999</small></address>\n</body>\n</html>\n";
// }
// else
// {
// t << footer;
// }
endPlainFile(); endPlainFile();
} }
...@@ -250,45 +151,6 @@ void HtmlGenerator::endProjectNumber() ...@@ -250,45 +151,6 @@ void HtmlGenerator::endProjectNumber()
t << "</h3>"; t << "</h3>";
} }
//void HtmlGenerator::writeIndex()
//{
// startFile("index.html","Main Index");
// t << "<h1 align=center>";
// docify(projectName);
// t << " Documentation</h1>"
// << "<p>" << endl << "<p>" << endl;
// if (!projectNumber.isEmpty())
// {
// t << "<h3 align=center>";
// docify(projectNumber);
// t << "</h3>\n<p>\n<p>\n";
// }
// if (noIndexFlag)
// {
// t << "<ul>" << endl;
// if (hierarchyClasses>0)
// t << "<li><a href=\"hierarchy.html\">Class hierarchy</a>" << endl;
// if (annotatedClasses>0)
// t << "<li><a href=\"annotated.html\">Compound list</a>" << endl;
// if (documentedFiles>0)
// t << "<li><a href=\"files.html\">File list</a>" << endl;
// if (includeFiles.count()>0)
// t << "<li><a href=\"headers.html\">Header files</a>" << endl;
// if (documentedMembers>0)
// t << "<li><a href=\"functions.html\">Compound Members</a>" << endl;
// if (documentedFunctions>0)
// t << "<li><a href=\"globals.html\">File Members</a>" << endl;
// if (pageList.count()>0)
// t << "<li><a href=\"pageList.html\">Related Pages</a>" << endl;
// if (exampleList.count()>0)
// t << "<li><a href=\"examples.html\">Examples</a>" << endl;
// if (searchEngineFlag)
// t << "<li><a doxygen=\"_cgi:\" href=\"\">Search</a>" << endl;
// t << "</ul>" << endl;
// }
// endFile();
//}
void HtmlGenerator::writeStyleInfo(int part) void HtmlGenerator::writeStyleInfo(int part)
{ {
if (part==0) if (part==0)
...@@ -414,9 +276,9 @@ void HtmlGenerator::writeSectionRef(const char *name,const char *lab, ...@@ -414,9 +276,9 @@ void HtmlGenerator::writeSectionRef(const char *name,const char *lab,
{ {
QString refName=name; QString refName=name;
if (refName.right(5)!=".html") refName+=".html"; if (refName.right(5)!=".html") refName+=".html";
t << "&quot;<a href=\"" << refName << "#" << lab << "\">"; t << "<a href=\"" << refName << "#" << lab << "\">";
docify(title); docify(title);
t << "</a>&quot;"; t << "</a>";
} }
void HtmlGenerator::writeSectionRefItem(const char *name,const char *lab, void HtmlGenerator::writeSectionRefItem(const char *name,const char *lab,
...@@ -429,12 +291,12 @@ void HtmlGenerator::writeSectionRefItem(const char *name,const char *lab, ...@@ -429,12 +291,12 @@ void HtmlGenerator::writeSectionRefItem(const char *name,const char *lab,
t << "</a>"; t << "</a>";
} }
//void HtmlGenerator::docify(const char *str) void HtmlGenerator::writeSectionRefAnchor(const char *name,const char *lab,
//{ const char *title)
// docifyStatic(t,str); {
//} writeSectionRef(name,lab,title);
}
//void HtmlGenerator::docifyStatic(QTextStream &t,const char *str)
void HtmlGenerator::docify(const char *str) void HtmlGenerator::docify(const char *str)
{ {
if (str) if (str)
...@@ -510,3 +372,121 @@ void HtmlGenerator::writeFormula(const char *n,const char *text) ...@@ -510,3 +372,121 @@ void HtmlGenerator::writeFormula(const char *n,const char *text)
t << "<img align=\"top\" src=\"" << n << "\">" << endl; t << "<img align=\"top\" src=\"" << n << "\">" << endl;
if (text && text[0]=='\\') t << "</center></p>" << endl; if (text && text[0]=='\\') t << "</center></p>" << endl;
} }
void HtmlGenerator::startMemberList()
{
if (htmlAlignMemberFlag)
{
//t << endl << "<p><table border=0 cellspacing=2 cellpadding=0>" << endl;
}
else
{
t << "<ul>" << endl;
}
}
void HtmlGenerator::endMemberList()
{
if (htmlAlignMemberFlag)
{
//t << "</table>" << endl;
}
else
{
t << "</ul>" << endl;
}
}
void HtmlGenerator::startMemberItem()
{
if (htmlAlignMemberFlag)
{
t << "<tr><td align=right valign=top>";
}
else
{
t << "<li>";
}
}
void HtmlGenerator::insertMemberAlign()
{
if (htmlAlignMemberFlag)
{
t << "</td><td valign=top>";
}
}
void HtmlGenerator::endMemberItem()
{
if (htmlAlignMemberFlag)
{
t << "</td></tr>";
}
t << endl;
}
void HtmlGenerator::startMemberDescription()
{
if (htmlAlignMemberFlag)
{
t << "<tr><td></td><td><font size=-1><em>";
}
else
{
t << "<dl class=\"el\"><dd><font size=-1><em>";
}
}
void HtmlGenerator::endMemberDescription()
{
if (htmlAlignMemberFlag)
{
t << "</em></font><br><br></td></tr>" << endl;
}
else
{
t << "</em></font></dl>";
}
}
void HtmlGenerator::startMemberSections()
{
if (htmlAlignMemberFlag)
{
t << "<table border=0 cellpadding=0 cellspacing=1>" << endl;
}
}
void HtmlGenerator::endMemberSections()
{
if (htmlAlignMemberFlag)
{
t << "</table>" << endl;
}
}
void HtmlGenerator::startMemberHeader()
{
if (htmlAlignMemberFlag)
{
t << "<tr><td colspan=2><br><h2>";
}
else
{
startGroupHeader();
}
}
void HtmlGenerator::endMemberHeader()
{
if (htmlAlignMemberFlag)
{
t << "</h2></td></tr>" << endl;
}
else
{
endGroupHeader();
}
}
...@@ -81,18 +81,23 @@ class HtmlGenerator : public OutputGenerator ...@@ -81,18 +81,23 @@ class HtmlGenerator : public OutputGenerator
void endGroupHeader(); void endGroupHeader();
void writeListItem() { t << "<li>"; } void writeListItem() { t << "<li>"; }
void startMemberHeader() { startGroupHeader(); } void startMemberSections();
void endMemberHeader() { endGroupHeader(); } void endMemberSections();
void startMemberList() { t << "<ul>" << endl; } void startMemberHeader();
void endMemberList() { t << "</ul>" << endl; } void endMemberHeader();
void startMemberItem() { t << "<li>"; } void startMemberList();
void endMemberItem() { t << endl; } void endMemberList();
void startMemberItem();
void insertMemberAlign();
void endMemberItem();
void startMemberDescription();
void endMemberDescription();
void writeRuler() { t << "<hr>"; } void writeRuler() { t << "<hr>"; }
void writeAnchor(const char *name) void writeAnchor(const char *name)
{ t << "<a name=\"" << name <<"\"></a>"; } { t << "<a name=\"" << name <<"\"></a>"; }
void startCodeFragment() { t << "<div class=\"fragment\"><pre>"; } void startCodeFragment() { t << "<div class=\"fragment\"><pre>"; }
void endCodeFragment() { t << "</div></pre>"; } void endCodeFragment() { t << "</pre></div>"; }
void writeBoldString(const char *text) void writeBoldString(const char *text)
{ t << "<b>"; docify(text); t << "</b>"; } { t << "<b>"; docify(text); t << "</b>"; }
void startEmphasis() { t << "<em>"; } void startEmphasis() { t << "<em>"; }
...@@ -111,6 +116,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -111,6 +116,7 @@ class HtmlGenerator : public OutputGenerator
void writeDoxyAnchor(const char *clName,const char *anchor, void writeDoxyAnchor(const char *clName,const char *anchor,
const char *name); const char *name);
void writeLatexSpacing() {} void writeLatexSpacing() {}
void writeLatexLabel(const char *,const char *) {}
void writeStartAnnoItem(const char *type,const char *file, void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name); const char *path,const char *name);
void writeEndAnnoItem(const char *) { t << endl; } void writeEndAnnoItem(const char *) { t << endl; }
...@@ -139,8 +145,6 @@ class HtmlGenerator : public OutputGenerator ...@@ -139,8 +145,6 @@ class HtmlGenerator : public OutputGenerator
void writeGrave(char c) { t << "&" << c << "grave;"; } void writeGrave(char c) { t << "&" << c << "grave;"; }
void writeCirc(char c) { t << "&" << c << "circ;"; } void writeCirc(char c) { t << "&" << c << "circ;"; }
void writeTilde(char c) { t << "&" << c << "tilde;"; } void writeTilde(char c) { t << "&" << c << "tilde;"; }
void startMemberDescription() { t << "<dl class=\"el\"><dd><font size=-1><em>"; }
void endMemberDescription() { t << "</em></font></dl>"; }
void startDescList() { t << "<dl compact><dt>" << endl; } void startDescList() { t << "<dl compact><dt>" << endl; }
void endDescTitle() {} void endDescTitle() {}
void writeDescItem() { t << "<dd>" << endl; } void writeDescItem() { t << "<dd>" << endl; }
...@@ -148,6 +152,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -148,6 +152,7 @@ class HtmlGenerator : public OutputGenerator
void writeSection(const char *,const char *,bool); void writeSection(const char *,const char *,bool);
void writeSectionRef(const char *,const char *,const char *); void writeSectionRef(const char *,const char *,const char *);
void writeSectionRefItem(const char *,const char *,const char *); void writeSectionRefItem(const char *,const char *,const char *);
void writeSectionRefAnchor(const char *,const char *,const char *);
void addToIndex(const char *,const char *) {} void addToIndex(const char *,const char *) {}
void startIndent() { t << "<div class=\"in\">" << endl; } void startIndent() { t << "<div class=\"in\">" << endl; }
void endIndent() { t << "</div>" << endl; } void endIndent() { t << "</div>" << endl; }
...@@ -166,6 +171,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -166,6 +171,7 @@ class HtmlGenerator : public OutputGenerator
private: private:
QString header; QString header;
QString footer; QString footer;
QString lastTitle;
HtmlGenerator &operator=(const HtmlGenerator &g); HtmlGenerator &operator=(const HtmlGenerator &g);
HtmlGenerator(const HtmlGenerator &g); HtmlGenerator(const HtmlGenerator &g);
......
...@@ -147,7 +147,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper) ...@@ -147,7 +147,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper)
//printf("Passed...\n"); //printf("Passed...\n");
if (cd->hasDocumentation() || cd->isReference()) if (cd->hasDocumentation() || cd->isReference())
{ {
ol.writeIndexItem(cd->getReference(),cd->classFile(),cd->name()); ol.writeIndexItem(cd->getReference(),cd->getOutputFileBase(),cd->name());
if (cd->isReference()) if (cd->isReference())
{ {
ol.startTypewriter(); ol.startTypewriter();
...@@ -191,7 +191,7 @@ void writeClassHierarchy(OutputList &ol) ...@@ -191,7 +191,7 @@ void writeClassHierarchy(OutputList &ol)
} }
if (cd->hasDocumentation() || cd->isReference()) if (cd->hasDocumentation() || cd->isReference())
{ {
ol.writeIndexItem(cd->getReference(),cd->classFile(),cd->name()); ol.writeIndexItem(cd->getReference(),cd->getOutputFileBase(),cd->name());
if (cd->isReference()) if (cd->isReference())
{ {
ol.startTypewriter(); ol.startTypewriter();
...@@ -236,9 +236,9 @@ void writeHierarchicalIndex(OutputList &ol) ...@@ -236,9 +236,9 @@ void writeHierarchicalIndex(OutputList &ol)
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"hierarchy","Hierarchical Index"); startFile(ol,"hierarchy","Hierarchical Index");
startTitle(ol); startTitle(ol);
parseDoc(ol,0,0,projectName+" "+theTranslator->trClassHierarchy()); parseText(ol,projectName+" "+theTranslator->trClassHierarchy());
endTitle(ol,0); endTitle(ol,0);
parseDoc(ol,0,0,theTranslator->trClassHierarchyDescription()); parseText(ol,theTranslator->trClassHierarchyDescription());
ol.newParagraph(); ol.newParagraph();
writeClassHierarchy(ol); writeClassHierarchy(ol);
endFile(ol); endFile(ol);
...@@ -247,7 +247,7 @@ void writeHierarchicalIndex(OutputList &ol) ...@@ -247,7 +247,7 @@ void writeHierarchicalIndex(OutputList &ol)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
int countFileList() int countFiles()
{ {
int count=0; int count=0;
FileNameListIterator fnli(inputNameList); FileNameListIterator fnli(inputNameList);
...@@ -272,10 +272,10 @@ void writeFileIndex(OutputList &ol) ...@@ -272,10 +272,10 @@ void writeFileIndex(OutputList &ol)
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"files","File Index"); startFile(ol,"files","File Index");
startTitle(ol); startTitle(ol);
parseDoc(ol,0,0,projectName+" "+theTranslator->trFileList()); parseText(ol,projectName+" "+theTranslator->trFileList());
endTitle(ol,0); endTitle(ol,0);
ol.newParagraph(); ol.newParagraph();
parseDoc(ol,0,0,theTranslator->trFileListDescription(extractAllFlag)); parseText(ol,theTranslator->trFileListDescription(extractAllFlag));
ol.newParagraph(); ol.newParagraph();
ol.startIndexList(); ol.startIndexList();
...@@ -299,7 +299,7 @@ void writeFileIndex(OutputList &ol) ...@@ -299,7 +299,7 @@ void writeFileIndex(OutputList &ol)
} }
ol.writeStartAnnoItem("file", ol.writeStartAnnoItem("file",
fd->diskName(), fd->getOutputFileBase(),
path, path,
fd->name() fd->name()
); );
...@@ -314,7 +314,7 @@ void writeFileIndex(OutputList &ol) ...@@ -314,7 +314,7 @@ void writeFileIndex(OutputList &ol)
else else
{ {
ol.startEmphasis(); ol.startEmphasis();
parseDoc(ol,0,0,theTranslator->trNoDescriptionAvailable()); parseText(ol,theTranslator->trNoDescriptionAvailable());
ol.endEmphasis(); ol.endEmphasis();
} }
ol.docify(")"); ol.docify(")");
...@@ -330,15 +330,14 @@ void writeFileIndex(OutputList &ol) ...@@ -330,15 +330,14 @@ void writeFileIndex(OutputList &ol)
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
int countNamespaces()
int countNamespaceList()
{ {
int count=0; int count=0;
NamespaceListIterator nli(namespaceList); NamespaceListIterator nli(namespaceList);
NamespaceDef *nd; NamespaceDef *nd;
for (;(nd=nli.current());++nli) for (;(nd=nli.current());++nli)
{ {
if (nd->hasDocumentation()) count++; if (!nd->getReference() && nd->hasDocumentation()) count++;
} }
return count; return count;
} }
...@@ -351,19 +350,19 @@ void writeNamespaceIndex(OutputList &ol) ...@@ -351,19 +350,19 @@ void writeNamespaceIndex(OutputList &ol)
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"namespaces","Namespace Index"); startFile(ol,"namespaces","Namespace Index");
startTitle(ol); startTitle(ol);
parseDoc(ol,0,0,projectName+" "+theTranslator->trNamespaceList()); parseText(ol,projectName+" "+theTranslator->trNamespaceList());
endTitle(ol,0); endTitle(ol,0);
ol.newParagraph(); ol.newParagraph();
parseDoc(ol,0,0,theTranslator->trNamespaceListDescription(extractAllFlag)); parseText(ol,theTranslator->trNamespaceListDescription(extractAllFlag));
ol.newParagraph(); ol.newParagraph();
ol.startIndexList(); ol.startIndexList();
NamespaceDef *nd=namespaceList.first(); NamespaceDef *nd=namespaceList.first();
while (nd) while (nd)
{ {
if (nd->hasDocumentation()) if (!nd->getReference() && nd->hasDocumentation())
{ {
ol.writeStartAnnoItem("namespace",nd->namespaceFile(),0,nd->name()); ol.writeStartAnnoItem("namespace",nd->getOutputFileBase(),0,nd->name());
ol.docify(" ("); ol.docify(" (");
if (nd->briefDescription()) if (nd->briefDescription())
{ {
...@@ -375,7 +374,7 @@ void writeNamespaceIndex(OutputList &ol) ...@@ -375,7 +374,7 @@ void writeNamespaceIndex(OutputList &ol)
else else
{ {
ol.startEmphasis(); ol.startEmphasis();
parseDoc(ol,0,0,theTranslator->trNoDescriptionAvailable()); parseText(ol,theTranslator->trNoDescriptionAvailable());
ol.endEmphasis(); ol.endEmphasis();
} }
ol.docify(")"); ol.docify(")");
...@@ -433,7 +432,7 @@ void writeAnnotatedClassList(OutputList &ol) ...@@ -433,7 +432,7 @@ void writeAnnotatedClassList(OutputList &ol)
case ClassDef::Union: type="union"; break; case ClassDef::Union: type="union"; break;
default: type="unknown"; break; // an error default: type="unknown"; break; // an error
} }
ol.writeStartAnnoItem(type,cd->classFile(),0,cd->name()); ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->name());
ol.docify(" ("); ol.docify(" (");
if (cd->briefDescription()) if (cd->briefDescription())
{ {
...@@ -445,7 +444,7 @@ void writeAnnotatedClassList(OutputList &ol) ...@@ -445,7 +444,7 @@ void writeAnnotatedClassList(OutputList &ol)
else else
{ {
ol.startEmphasis(); ol.startEmphasis();
parseDoc(ol,0,0,theTranslator->trNoDescriptionAvailable()); parseText(ol,theTranslator->trNoDescriptionAvailable());
ol.endEmphasis(); ol.endEmphasis();
} }
ol.docify(")"); ol.docify(")");
...@@ -466,9 +465,9 @@ void writeAnnotatedIndex(OutputList &ol) ...@@ -466,9 +465,9 @@ void writeAnnotatedIndex(OutputList &ol)
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"annotated","Annotated Index"); startFile(ol,"annotated","Annotated Index");
startTitle(ol); startTitle(ol);
parseDoc(ol,0,0,projectName+" "+theTranslator->trCompoundList()); parseText(ol,projectName+" "+theTranslator->trCompoundList());
endTitle(ol,0); endTitle(ol,0);
parseDoc(ol,0,0,theTranslator->trCompoundListDescription()); parseText(ol,theTranslator->trCompoundListDescription());
writeAnnotatedClassList(ol); writeAnnotatedClassList(ol);
endFile(ol); endFile(ol);
ol.enable(OutputGenerator::Man); ol.enable(OutputGenerator::Man);
...@@ -522,7 +521,7 @@ void writeMemberList(OutputList &ol) ...@@ -522,7 +521,7 @@ void writeMemberList(OutputList &ol)
ol.docify(": "); ol.docify(": ");
else else
ol.docify(", "); ol.docify(", ");
ol.writeObjectLink(cd->getReference(),cd->classFile(),md->anchor(), ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),md->anchor(),
cd->name()); cd->name());
count++; count++;
prevName=cd->name(); prevName=cd->name();
...@@ -537,7 +536,7 @@ void writeMemberList(OutputList &ol) ...@@ -537,7 +536,7 @@ void writeMemberList(OutputList &ol)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
int countMemberList() int countClassMembers()
{ {
int count=0; int count=0;
MemberName *mn=memberNameList.first(); MemberName *mn=memberNameList.first();
...@@ -575,9 +574,9 @@ void writeMemberIndex(OutputList &ol) ...@@ -575,9 +574,9 @@ void writeMemberIndex(OutputList &ol)
ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::Latex);
startFile(ol,"functions","Compound Member Index"); startFile(ol,"functions","Compound Member Index");
startTitle(ol); startTitle(ol);
parseDoc(ol,0,0,projectName+" "+theTranslator->trCompoundMembers()); parseText(ol,projectName+" "+theTranslator->trCompoundMembers());
endTitle(ol,0); endTitle(ol,0);
parseDoc(ol,0,0,theTranslator->trCompoundMembersDescription(extractAllFlag)); parseText(ol,theTranslator->trCompoundMembersDescription(extractAllFlag));
writeMemberList(ol); writeMemberList(ol);
endFile(ol); endFile(ol);
ol.enable(OutputGenerator::Latex); ol.enable(OutputGenerator::Latex);
...@@ -586,7 +585,7 @@ void writeMemberIndex(OutputList &ol) ...@@ -586,7 +585,7 @@ void writeMemberIndex(OutputList &ol)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void writeFunctionList(OutputList &ol) void writeFileMemberList(OutputList &ol)
{ {
ol.startItemList(); ol.startItemList();
MemberName *mn=functionNameList.first(); MemberName *mn=functionNameList.first();
...@@ -639,7 +638,7 @@ void writeFunctionList(OutputList &ol) ...@@ -639,7 +638,7 @@ void writeFunctionList(OutputList &ol)
//if ((s=baseName.findRev("/"))!=-1) //if ((s=baseName.findRev("/"))!=-1)
// baseName=baseName.right(baseName.length()-s-1); // baseName=baseName.right(baseName.length()-s-1);
ol.writeObjectLink(fd->getReference(), ol.writeObjectLink(fd->getReference(),
fd->diskName(),md->anchor(), baseName); fd->getOutputFileBase(),md->anchor(), baseName);
count++; count++;
prevName=fd->name(); prevName=fd->name();
} }
...@@ -653,7 +652,89 @@ void writeFunctionList(OutputList &ol) ...@@ -653,7 +652,89 @@ void writeFunctionList(OutputList &ol)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
int countFunctionList() void writeNamespaceMemberList(OutputList &ol)
{
ol.startItemList();
MemberName *mn=functionNameList.first();
while (mn)
{
MemberDef *md=mn->first();
bool found=FALSE;
while (md && !found)
{
NamespaceDef *nd=md->getNamespace();
if (nd && nd->hasDocumentation() &&
!md->isReference() &&
md->hasDocumentation() &&
!md->name().isEmpty() &&
md->name()[0]!='@') found=TRUE;
else
md=mn->next();
}
if (found) // member is documented and in a documented namespace
{
ol.writeListItem();
ol.docify(md->name());
if (md->isFunction()) ol.docify("()");
ol.writeString("\n");
int count=0;
md=mn->first();
QString prevName;
while (md)
{
NamespaceDef *nd=md->getNamespace();
if (nd && nd->hasDocumentation() &&
!md->isReference() &&
md->hasDocumentation() &&
!md->name().isEmpty() && md->name()[0]!='@'
)
{
if (count==0)
ol.docify(": ");
else
ol.docify(", ");
ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),
md->anchor(),nd->name());
count++;
}
md=mn->next();
}
}
mn=functionNameList.next();
}
ol.endItemList();
}
//----------------------------------------------------------------------------
int countNamespaceMembers()
{
int count=0;
MemberName *mn=functionNameList.first();
while (mn)
{
MemberDef *md=mn->first();
bool found=FALSE;
while (md && !found)
{
if (md->getNamespace() &&
!md->isReference() && md->hasDocumentation() &&
!md->name().isEmpty() && md->name()[0]!='@'
)
found=TRUE;
else
md=mn->next();
}
if (found) count++;
mn=functionNameList.next();
}
return count;
}
//----------------------------------------------------------------------------
int countFileMembers()
{ {
int count=0; int count=0;
MemberName *mn=functionNameList.first(); MemberName *mn=functionNameList.first();
...@@ -665,7 +746,7 @@ int countFunctionList() ...@@ -665,7 +746,7 @@ int countFunctionList()
while (md && !found) while (md && !found)
{ {
if (!md->isReference() && md->hasDocumentation() && if (!md->isReference() && md->hasDocumentation() &&
md->name()[0]!='@' && !md->name().isEmpty() && md->name()[0]!='@' &&
(((fd=md->getFileDef()) && fd->hasDocumentation()) (((fd=md->getFileDef()) && fd->hasDocumentation())
|| ||
((fd=md->getFileDec()) && fd->hasDocumentation()) ((fd=md->getFileDec()) && fd->hasDocumentation())
...@@ -683,17 +764,35 @@ int countFunctionList() ...@@ -683,17 +764,35 @@ int countFunctionList()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void writeFunctionIndex(OutputList &ol) void writeFileMemberIndex(OutputList &ol)
{ {
if (documentedFunctions==0) return; if (documentedFunctions==0) return;
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::Latex);
startFile(ol,"globals","File Member Index"); startFile(ol,"globals","File Member Index");
startTitle(ol); startTitle(ol);
parseDoc(ol,0,0,projectName+" "+theTranslator->trFileMembers()); parseText(ol,projectName+" "+theTranslator->trFileMembers());
endTitle(ol,0);
parseText(ol,theTranslator->trFileMembersDescription(extractAllFlag));
writeFileMemberList(ol);
endFile(ol);
ol.enable(OutputGenerator::Latex);
ol.enable(OutputGenerator::Man);
}
//----------------------------------------------------------------------------
void writeNamespaceMemberIndex(OutputList &ol)
{
if (documentedNamespaceMembers==0) return;
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Latex);
startFile(ol,"namespacemembers","Namespace Member Index");
startTitle(ol);
parseText(ol,projectName+" "+theTranslator->trNamespaceMembers());
endTitle(ol,0); endTitle(ol,0);
parseDoc(ol,0,0,theTranslator->trFileMembersDescription(extractAllFlag)); parseText(ol,theTranslator->trNamespaceMemberDescription(extractAllFlag));
writeFunctionList(ol); writeNamespaceMemberList(ol);
endFile(ol); endFile(ol);
ol.enable(OutputGenerator::Latex); ol.enable(OutputGenerator::Latex);
ol.enable(OutputGenerator::Man); ol.enable(OutputGenerator::Man);
...@@ -736,9 +835,9 @@ void writeHeaderIndex(OutputList &ol) ...@@ -736,9 +835,9 @@ void writeHeaderIndex(OutputList &ol)
ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::Latex);
startFile(ol,"headers","Header File Index"); startFile(ol,"headers","Header File Index");
startTitle(ol); startTitle(ol);
parseDoc(ol,0,0,projectName+" "+theTranslator->trHeaderFiles()); parseText(ol,projectName+" "+theTranslator->trHeaderFiles());
endTitle(ol,0); endTitle(ol,0);
parseDoc(ol,0,0,theTranslator->trHeaderFilesDescription()); parseText(ol,theTranslator->trHeaderFilesDescription());
writeHeaderFileList(ol); writeHeaderFileList(ol);
endFile(ol); endFile(ol);
ol.enable(OutputGenerator::Latex); ol.enable(OutputGenerator::Latex);
...@@ -753,9 +852,9 @@ void writeExampleIndex(OutputList &ol) ...@@ -753,9 +852,9 @@ void writeExampleIndex(OutputList &ol)
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"examples","Example Index"); startFile(ol,"examples","Example Index");
startTitle(ol); startTitle(ol);
parseDoc(ol,0,0,projectName+" "+theTranslator->trExamples()); parseText(ol,projectName+" "+theTranslator->trExamples());
endTitle(ol,0); endTitle(ol,0);
parseDoc(ol,0,0,theTranslator->trExamplesDescription()); parseText(ol,theTranslator->trExamplesDescription());
ol.startIndexList(); ol.startIndexList();
PageInfo *pi=exampleList.first(); PageInfo *pi=exampleList.first();
while (pi) while (pi)
...@@ -788,18 +887,25 @@ void writePageIndex(OutputList &ol) ...@@ -788,18 +887,25 @@ void writePageIndex(OutputList &ol)
startTitle(ol); startTitle(ol);
ol.docify(projectName+" "+theTranslator->trRelatedPages()); ol.docify(projectName+" "+theTranslator->trRelatedPages());
endTitle(ol,0); endTitle(ol,0);
parseDoc(ol,0,0,theTranslator->trRelatedPagesDescription()); parseText(ol,theTranslator->trRelatedPagesDescription());
ol.startIndexList(); ol.startIndexList();
PageInfo *pi=pageList.first(); PageInfo *pi=pageList.first();
while (pi) while (pi)
{ {
QString pageName; QString pageName,pageTitle;
if (caseSensitiveNames) if (caseSensitiveNames)
pageName=pi->name.copy(); pageName=pi->name.copy();
else else
pageName=pi->name.lower(); pageName=pi->name.lower();
if (pi->title.isEmpty())
pageTitle=pi->name;
else
pageTitle=pi->title;
ol.writeListItem(); ol.writeListItem();
ol.writeObjectLink(0,pageName,0,pi->name); ol.writeObjectLink(0,pageName,0,pageTitle);
ol.writeString("\n"); ol.writeString("\n");
pi=pageList.next(); pi=pageList.next();
} }
...@@ -810,7 +916,7 @@ void writePageIndex(OutputList &ol) ...@@ -810,7 +916,7 @@ void writePageIndex(OutputList &ol)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
int countGroupList() int countGroups()
{ {
int count=0; int count=0;
GroupListIterator gli(groupList); GroupListIterator gli(groupList);
...@@ -835,7 +941,7 @@ void writeGroupList(OutputList &ol) ...@@ -835,7 +941,7 @@ void writeGroupList(OutputList &ol)
if (gd->countMembers()>0) if (gd->countMembers()>0)
{ {
ol.startDescItem(); ol.startDescItem();
ol.startTextLink(gd->groupFile(),0); ol.startTextLink(gd->getOutputFileBase(),0);
parseDoc(ol,0,0,gd->groupTitle()); parseDoc(ol,0,0,gd->groupTitle());
ol.endTextLink(); ol.endTextLink();
ol.endDescItem(); ol.endDescItem();
...@@ -854,9 +960,9 @@ void writeGroupIndex(OutputList &ol) ...@@ -854,9 +960,9 @@ void writeGroupIndex(OutputList &ol)
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
startFile(ol,"modules","Module Index"); startFile(ol,"modules","Module Index");
startTitle(ol); startTitle(ol);
parseDoc(ol,0,0,projectName+" "+theTranslator->trModules()); parseText(ol,projectName+" "+theTranslator->trModules());
endTitle(ol,0); endTitle(ol,0);
parseDoc(ol,0,0,theTranslator->trModulesDescription()); parseText(ol,theTranslator->trModulesDescription());
writeGroupList(ol); writeGroupList(ol);
endFile(ol); endFile(ol);
ol.enable(OutputGenerator::Man); ol.enable(OutputGenerator::Man);
...@@ -880,7 +986,7 @@ void writeIndex(OutputList &ol) ...@@ -880,7 +986,7 @@ void writeIndex(OutputList &ol)
ol.startFile("index","Main Index",FALSE); ol.startFile("index","Main Index",FALSE);
if (!noIndexFlag) writeQuickLinks(ol,TRUE); if (!noIndexFlag) writeQuickLinks(ol,TRUE);
ol.startTitleHead(); ol.startTitleHead();
parseDoc(ol,0,0,projPrefix+theTranslator->trDocumentation()); parseText(ol,projPrefix+theTranslator->trDocumentation());
ol.endTitleHead(0); ol.endTitleHead(0);
ol.newParagraph(); ol.newParagraph();
if (!projectNumber.isEmpty()) if (!projectNumber.isEmpty())
...@@ -897,7 +1003,7 @@ void writeIndex(OutputList &ol) ...@@ -897,7 +1003,7 @@ void writeIndex(OutputList &ol)
ol.enable(OutputGenerator::Latex); ol.enable(OutputGenerator::Latex);
ol.startFile("refman",0,FALSE); ol.startFile("refman",0,FALSE);
ol.startIndexSection(isTitlePageStart); ol.startIndexSection(isTitlePageStart);
parseDoc(ol,0,0,projPrefix+theTranslator->trReferenceManual()); parseText(ol,projPrefix+theTranslator->trReferenceManual());
if (!projectNumber.isEmpty()) if (!projectNumber.isEmpty())
{ {
ol.startProjectNumber(); ol.startProjectNumber();
...@@ -906,60 +1012,72 @@ void writeIndex(OutputList &ol) ...@@ -906,60 +1012,72 @@ void writeIndex(OutputList &ol)
} }
ol.endIndexSection(isTitlePageStart); ol.endIndexSection(isTitlePageStart);
ol.startIndexSection(isTitlePageAuthor); ol.startIndexSection(isTitlePageAuthor);
parseDoc(ol,0,0,theTranslator->trGeneratedBy()); parseText(ol,theTranslator->trGeneratedBy());
ol.endIndexSection(isTitlePageAuthor); ol.endIndexSection(isTitlePageAuthor);
if (documentedGroups>0) if (documentedGroups>0)
{ {
ol.startIndexSection(isModuleIndex); ol.startIndexSection(isModuleIndex);
parseDoc(ol,0,0,projPrefix+theTranslator->trModuleIndex()); parseText(ol,projPrefix+theTranslator->trModuleIndex());
ol.endIndexSection(isModuleIndex); ol.endIndexSection(isModuleIndex);
} }
if (documentedNamespaces>0)
{
ol.startIndexSection(isNamespaceIndex);
parseText(ol,projPrefix+theTranslator->trNamespaceIndex());
ol.endIndexSection(isNamespaceIndex);
}
if (hierarchyClasses>0) if (hierarchyClasses>0)
{ {
ol.startIndexSection(isClassHierarchyIndex); ol.startIndexSection(isClassHierarchyIndex);
parseDoc(ol,0,0,projPrefix+theTranslator->trHierarchicalIndex()); parseText(ol,projPrefix+theTranslator->trHierarchicalIndex());
ol.endIndexSection(isClassHierarchyIndex); ol.endIndexSection(isClassHierarchyIndex);
} }
if (annotatedClasses>0) if (annotatedClasses>0)
{ {
ol.startIndexSection(isCompoundIndex); ol.startIndexSection(isCompoundIndex);
parseDoc(ol,0,0,projPrefix+theTranslator->trCompoundIndex()); parseText(ol,projPrefix+theTranslator->trCompoundIndex());
ol.endIndexSection(isCompoundIndex); ol.endIndexSection(isCompoundIndex);
} }
if (documentedFiles>0) if (documentedFiles>0)
{ {
ol.startIndexSection(isFileIndex); ol.startIndexSection(isFileIndex);
parseDoc(ol,0,0,projPrefix+theTranslator->trFileIndex()); parseText(ol,projPrefix+theTranslator->trFileIndex());
ol.endIndexSection(isFileIndex); ol.endIndexSection(isFileIndex);
} }
if (documentedGroups>0) if (documentedGroups>0)
{ {
ol.startIndexSection(isModuleDocumentation); ol.startIndexSection(isModuleDocumentation);
parseDoc(ol,0,0,projPrefix+theTranslator->trModuleDocumentation()); parseText(ol,projPrefix+theTranslator->trModuleDocumentation());
ol.endIndexSection(isModuleDocumentation); ol.endIndexSection(isModuleDocumentation);
} }
if (documentedNamespaces>0)
{
ol.startIndexSection(isNamespaceDocumentation);
parseText(ol,projPrefix+theTranslator->trNamespaceDocumentation());
ol.endIndexSection(isNamespaceDocumentation);
}
if (annotatedClasses>0) if (annotatedClasses>0)
{ {
ol.startIndexSection(isClassDocumentation); ol.startIndexSection(isClassDocumentation);
parseDoc(ol,0,0,projPrefix+theTranslator->trClassDocumentation()); parseText(ol,projPrefix+theTranslator->trClassDocumentation());
ol.endIndexSection(isClassDocumentation); ol.endIndexSection(isClassDocumentation);
} }
if (documentedFiles>0) if (documentedFiles>0)
{ {
ol.startIndexSection(isFileDocumentation); ol.startIndexSection(isFileDocumentation);
parseDoc(ol,0,0,projPrefix+theTranslator->trFileDocumentation()); parseText(ol,projPrefix+theTranslator->trFileDocumentation());
ol.endIndexSection(isFileDocumentation); ol.endIndexSection(isFileDocumentation);
} }
if (exampleList.count()>0) if (exampleList.count()>0)
{ {
ol.startIndexSection(isExampleDocumentation); ol.startIndexSection(isExampleDocumentation);
parseDoc(ol,0,0,projPrefix+theTranslator->trExampleDocumentation()); parseText(ol,projPrefix+theTranslator->trExampleDocumentation());
ol.endIndexSection(isExampleDocumentation); ol.endIndexSection(isExampleDocumentation);
} }
if (pageList.count()>0) if (pageList.count()>0)
{ {
ol.startIndexSection(isPageDocumentation); ol.startIndexSection(isPageDocumentation);
parseDoc(ol,0,0,projPrefix+theTranslator->trPageDocumentation()); parseText(ol,projPrefix+theTranslator->trPageDocumentation());
ol.endIndexSection(isPageDocumentation); ol.endIndexSection(isPageDocumentation);
} }
ol.endIndexSection(isEndIndex); ol.endIndexSection(isEndIndex);
......
...@@ -25,10 +25,12 @@ enum IndexSections ...@@ -25,10 +25,12 @@ enum IndexSections
isTitlePageStart, isTitlePageStart,
isTitlePageAuthor, isTitlePageAuthor,
isModuleIndex, isModuleIndex,
isNamespaceIndex,
isClassHierarchyIndex, isClassHierarchyIndex,
isCompoundIndex, isCompoundIndex,
isFileIndex, isFileIndex,
isModuleDocumentation, isModuleDocumentation,
isNamespaceDocumentation,
isClassDocumentation, isClassDocumentation,
isFileDocumentation, isFileDocumentation,
isExampleDocumentation, isExampleDocumentation,
...@@ -50,16 +52,18 @@ void writeHeaderIndex(OutputList &ol); ...@@ -50,16 +52,18 @@ void writeHeaderIndex(OutputList &ol);
void writeHeaderFileList(OutputList &ol); void writeHeaderFileList(OutputList &ol);
void writeExampleIndex(OutputList &ol); void writeExampleIndex(OutputList &ol);
void writePageIndex(OutputList &ol); void writePageIndex(OutputList &ol);
void writeFunctionIndex(OutputList &ol); void writeFileMemberIndex(OutputList &ol);
void writeGroupIndex(OutputList &ol); void writeGroupIndex(OutputList &ol);
void writeNamespaceIndex(OutputList &ol); void writeNamespaceIndex(OutputList &ol);
void writeNamespaceMemberIndex(OutputList &ol);
int countClassHierarchy(); int countClassHierarchy();
int countMemberList(); int countClassMembers();
int countFunctionList(); int countFileMembers();
int countFileList(); int countFiles();
int countGroupList(); int countGroups();
int countNamespaceList(); int countNamespaces();
int countAnnotatedClasses(); int countAnnotatedClasses();
int countNamespaceMembers();
#endif #endif
...@@ -172,6 +172,10 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -172,6 +172,10 @@ void LatexGenerator::startIndexSection(IndexSections is)
if (compactLatexFlag) t << "\\section"; else t << "\\chapter"; if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Module Index}\n" t << "{"; //Module Index}\n"
break; break;
case isNamespaceIndex:
if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Namespace Index}\"
break;
case isClassHierarchyIndex: case isClassHierarchyIndex:
if (compactLatexFlag) t << "\\section"; else t << "\\chapter"; if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Hierarchical Index}\n" t << "{"; //Hierarchical Index}\n"
...@@ -200,17 +204,28 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -200,17 +204,28 @@ void LatexGenerator::startIndexSection(IndexSections is)
} }
} }
break; break;
case isNamespaceDocumentation:
{
NamespaceDef *nd=namespaceList.first();
bool found=FALSE;
while (nd && !found)
{
if (nd->hasDocumentation())
{
if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; // Namespace Documentation}\n":
found=TRUE;
}
nd=namespaceList.next();
}
}
break;
case isClassDocumentation: case isClassDocumentation:
{ {
ClassDef *cd=classList.first(); ClassDef *cd=classList.first();
bool found=FALSE; bool found=FALSE;
while (cd && !found) while (cd && !found)
{ {
//if (cd->classFile()[0]!='@' && !cd->getReference() &&
// (cd->hasDocumentation() || !hideClassFlag) &&
// (cd->protection()!=Private || extractPrivateFlag)
// )
if (!cd->isReference() && cd->isVisible()) if (!cd->isReference() && cd->isVisible())
{ {
if (compactLatexFlag) t << "\\section"; else t << "\\chapter"; if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
...@@ -282,6 +297,9 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -282,6 +297,9 @@ void LatexGenerator::endIndexSection(IndexSections is)
case isModuleIndex: case isModuleIndex:
t << "}\n\\input{modules}\n"; t << "}\n\\input{modules}\n";
break; break;
case isNamespaceIndex:
t << "}\n\\input{namespaces}\n";
break;
case isClassHierarchyIndex: case isClassHierarchyIndex:
t << "}\n\\input{hierarchy}\n"; t << "}\n\\input{hierarchy}\n";
break; break;
...@@ -299,7 +317,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -299,7 +317,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
{ {
if (gd->hasDocumentation() || gd->countMembers()>0) if (gd->hasDocumentation() || gd->countMembers()>0)
{ {
t << "}\n\\input{" << gd->groupFile() << "}\n"; t << "}\n\\input{" << gd->getOutputFileBase() << "}\n";
found=TRUE; found=TRUE;
} }
gd=groupList.next(); gd=groupList.next();
...@@ -309,12 +327,36 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -309,12 +327,36 @@ void LatexGenerator::endIndexSection(IndexSections is)
if (gd->hasDocumentation() || gd->countMembers()>0) if (gd->hasDocumentation() || gd->countMembers()>0)
{ {
if (compactLatexFlag) t << "\\input"; else t << "\\include"; if (compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << gd->groupFile() << "}\n"; t << "{" << gd->getOutputFileBase() << "}\n";
} }
gd=groupList.next(); gd=groupList.next();
} }
} }
break; break;
case isNamespaceDocumentation:
{
NamespaceDef *nd=namespaceList.first();
bool found=FALSE;
while (nd && !found)
{
if (nd->hasDocumentation() || nd->countMembers()>0)
{
t << "}\n\\input{" << nd->getOutputFileBase() << "}\n";
found=TRUE;
}
nd=namespaceList.next();
}
while (nd)
{
if (nd->hasDocumentation() || nd->countMembers()>0)
{
if (compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << nd->getOutputFileBase() << "}\n";
}
nd=namespaceList.next();
}
}
break;
case isClassDocumentation: case isClassDocumentation:
{ {
ClassDef *cd=classList.first(); ClassDef *cd=classList.first();
...@@ -327,7 +369,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -327,7 +369,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
// ) // )
if (!cd->isReference() && cd->isVisible()) if (!cd->isReference() && cd->isVisible())
{ {
t << "}\n\\input{" << cd->classFile() << "}\n"; t << "}\n\\input{" << cd->getOutputFileBase() << "}\n";
found=TRUE; found=TRUE;
} }
cd=classList.next(); cd=classList.next();
...@@ -341,7 +383,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -341,7 +383,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
if (!cd->isReference() && cd->isVisible()) if (!cd->isReference() && cd->isVisible())
{ {
if (compactLatexFlag) t << "\\input"; else t << "\\include"; if (compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << cd->classFile() << "}\n"; t << "{" << cd->getOutputFileBase() << "}\n";
} }
cd=classList.next(); cd=classList.next();
} }
...@@ -360,13 +402,13 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -360,13 +402,13 @@ void LatexGenerator::endIndexSection(IndexSections is)
{ {
if (isFirst) if (isFirst)
{ {
t << "}\n\\input{" << fd->diskName() << "}\n"; t << "}\n\\input{" << fd->getOutputFileBase() << "}\n";
isFirst=FALSE; isFirst=FALSE;
} }
else else
{ {
if (compactLatexFlag) t << "\\input" ; else t << "\\include"; if (compactLatexFlag) t << "\\input" ; else t << "\\include";
t << "{" << fd->diskName() << "}\n"; t << "{" << fd->getOutputFileBase() << "}\n";
} }
} }
fd=fn->next(); fd=fn->next();
...@@ -670,6 +712,11 @@ void LatexGenerator::writeDoxyAnchor(const char *clname,const char *anchor,const ...@@ -670,6 +712,11 @@ void LatexGenerator::writeDoxyAnchor(const char *clname,const char *anchor,const
t << "}" << endl; t << "}" << endl;
} }
void LatexGenerator::writeLatexLabel(const char *clName,const char *anchor)
{
writeDoxyAnchor(clName,anchor,0);
}
void LatexGenerator::addToIndex(const char *s1,const char *s2) void LatexGenerator::addToIndex(const char *s1,const char *s2)
{ {
if (s1) if (s1)
...@@ -709,6 +756,15 @@ void LatexGenerator::writeSectionRefItem(const char *,const char *lab, ...@@ -709,6 +756,15 @@ void LatexGenerator::writeSectionRefItem(const char *,const char *lab,
t << "}{\\ref{" << lab << "}}" << endl; t << "}{\\ref{" << lab << "}}" << endl;
} }
void LatexGenerator::writeSectionRefAnchor(const char *,const char *lab,
const char *title)
{
startBold();
docify(title);
endBold();
t << " (p. \\pageref{" << lab << "})" << endl;
}
//void LatexGenerator::docify(const char *str) //void LatexGenerator::docify(const char *str)
//{ //{
// docifyStatic(t,str); // docifyStatic(t,str);
......
...@@ -79,17 +79,20 @@ class LatexGenerator : public OutputGenerator ...@@ -79,17 +79,20 @@ class LatexGenerator : public OutputGenerator
void endGroupHeader(); void endGroupHeader();
void writeListItem() { t << "\\item " << endl; } void writeListItem() { t << "\\item " << endl; }
void startMemberSections() {}
void endMemberSections() {}
void startMemberHeader() { startGroupHeader(); } void startMemberHeader() { startGroupHeader(); }
void endMemberHeader() { endGroupHeader(); } void endMemberHeader() { endGroupHeader(); }
void startMemberList() { t << "\\begin{CompactItemize}" << endl; } void startMemberList() { t << "\\begin{CompactItemize}" << endl; }
void endMemberList() { t << "\\end{CompactItemize}" << endl; } void endMemberList() { t << "\\end{CompactItemize}" << endl; }
void startMemberItem() { t << "\\item " << endl; } void startMemberItem() { t << "\\item " << endl; }
void endMemberItem() { t << endl; } void endMemberItem() { t << endl; }
void insertMemberAlign() {}
void writeRuler() { t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}"; } void writeRuler() { t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}"; }
void writeAnchor(const char *) {} void writeAnchor(const char *name) { t << "\\label{" << name << "}" << endl; }
void startCodeFragment() { t << "\\small\\begin{verbatim}"; } void startCodeFragment() { t << "\\small\\begin{verbatim}"; }
void endCodeFragment() { t << "\\end{verbatim}\\normalsize "; } void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; }
void writeBoldString(const char *text) void writeBoldString(const char *text)
{ t << "{\\bf "; docify(text); t << "}"; } { t << "{\\bf "; docify(text); t << "}"; }
void startEmphasis() { t << "{\\em "; } void startEmphasis() { t << "{\\em "; }
...@@ -99,13 +102,14 @@ class LatexGenerator : public OutputGenerator ...@@ -99,13 +102,14 @@ class LatexGenerator : public OutputGenerator
void startDescription() { t << "\\begin{description}" << endl; } void startDescription() { t << "\\begin{description}" << endl; }
void endDescription() { t << "\\end{description}" << endl; } void endDescription() { t << "\\end{description}" << endl; }
void startDescItem() { t << "\\item["; } void startDescItem() { t << "\\item["; }
void endDescItem() { t << "]"; } void endDescItem() { t << "]" << endl; }
void lineBreak() { t << "\\par\n"; } void lineBreak() { t << "\\par\n"; }
void startMemberDoc(const char *,const char *,const char *); void startMemberDoc(const char *,const char *,const char *);
void endMemberDoc() { t << "}"; } void endMemberDoc() { t << "}"; }
void writeDoxyAnchor(const char *,const char *,const char *); void writeDoxyAnchor(const char *,const char *,const char *);
void writeChar(char c); void writeChar(char c);
void writeLatexSpacing() { t << "\\hspace{0.3cm}"; } void writeLatexSpacing() { t << "\\hspace{0.3cm}"; }
void writeLatexLabel(const char *scope,const char *anchor);
void writeStartAnnoItem(const char *type,const char *file, void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name); const char *path,const char *name);
void writeEndAnnoItem(const char *name); void writeEndAnnoItem(const char *name);
...@@ -148,11 +152,12 @@ class LatexGenerator : public OutputGenerator ...@@ -148,11 +152,12 @@ class LatexGenerator : public OutputGenerator
void endMemberDescription() { t << "\\item\\end{CompactList}"; } void endMemberDescription() { t << "\\item\\end{CompactList}"; }
void startDescList() { t << "\\begin{Desc}\\item["; } void startDescList() { t << "\\begin{Desc}\\item["; }
void endDescTitle() { t << "]"; } void endDescTitle() { t << "]"; }
void writeDescItem() { t << "\\par "; } void writeDescItem() { t << "\\par" << endl; }
void endDescList() { t << "\\end{Desc}"; } void endDescList() { t << "\\end{Desc}"; }
void writeSection(const char *,const char *,bool); void writeSection(const char *,const char *,bool);
void writeSectionRef(const char *,const char *,const char *); void writeSectionRef(const char *,const char *,const char *);
void writeSectionRefItem(const char *,const char *,const char *); void writeSectionRefItem(const char *,const char *,const char *);
void writeSectionRefAnchor(const char *,const char *,const char *);
void addToIndex(const char *,const char *); void addToIndex(const char *,const char *);
void startIndent() {} void startIndent() {}
void endIndent() {} void endIndent() {}
......
...@@ -78,7 +78,7 @@ void ManGenerator::startFile(const char *name,const char *,bool) ...@@ -78,7 +78,7 @@ void ManGenerator::startFile(const char *name,const char *,bool)
{ {
fileName=fileName.left(i); fileName=fileName.left(i);
} }
if (fileName.right(2)!=".3") fileName+=".3"; if (fileName.right(2)!=manExtension) fileName+=manExtension;
startPlainFile(fileName); startPlainFile(fileName);
firstCol=TRUE; firstCol=TRUE;
} }
......
...@@ -77,8 +77,11 @@ class ManGenerator : public OutputGenerator ...@@ -77,8 +77,11 @@ class ManGenerator : public OutputGenerator
void endTypewriter() { t << "\\fR"; firstCol=FALSE; } void endTypewriter() { t << "\\fR"; firstCol=FALSE; }
void startGroupHeader(); void startGroupHeader();
void endGroupHeader(); void endGroupHeader();
void startMemberSections() {}
void endMemberSections() {}
void startMemberHeader(); void startMemberHeader();
void endMemberHeader(); void endMemberHeader();
void insertMemberAlign() {}
void writeListItem(); void writeListItem();
void startMemberList() { t << "\n.in +1c"; firstCol=FALSE; } void startMemberList() { t << "\n.in +1c"; firstCol=FALSE; }
void endMemberList() { t << "\n.in -1c"; firstCol=FALSE; } void endMemberList() { t << "\n.in -1c"; firstCol=FALSE; }
...@@ -107,6 +110,7 @@ class ManGenerator : public OutputGenerator ...@@ -107,6 +110,7 @@ class ManGenerator : public OutputGenerator
void endMemberDoc() {} void endMemberDoc() {}
void writeDoxyAnchor(const char *clName,const char *anchor,const char *name); void writeDoxyAnchor(const char *clName,const char *anchor,const char *name);
void writeLatexSpacing() {} void writeLatexSpacing() {}
void writeLatexLabel(const char *,const char *) {}
void writeStartAnnoItem(const char *type,const char *file, void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name); const char *path,const char *name);
void writeEndAnnoItem(const char *) { t << endl; firstCol=TRUE; } void writeEndAnnoItem(const char *) { t << endl; firstCol=TRUE; }
...@@ -144,6 +148,7 @@ class ManGenerator : public OutputGenerator ...@@ -144,6 +148,7 @@ class ManGenerator : public OutputGenerator
void writeSection(const char *,const char *,bool) {} void writeSection(const char *,const char *,bool) {}
void writeSectionRef(const char *,const char *,const char *) {} void writeSectionRef(const char *,const char *,const char *) {}
void writeSectionRefItem(const char *,const char *,const char *) {} void writeSectionRefItem(const char *,const char *,const char *) {}
void writeSectionRefAnchor(const char *,const char *,const char *) {}
void addToIndex(const char *,const char *) {} void addToIndex(const char *,const char *) {}
void startIndent() {} void startIndent() {}
void endIndent() {} void endIndent() {}
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "membername.h" #include "membername.h"
#include "doxygen.h" #include "doxygen.h"
#include "util.h" #include "util.h"
#include "message.h"
/*! Creates a new member definition. /*! Creates a new member definition.
* Members can be function/variables/enums/etc. inside a class or inside a * Members can be function/variables/enums/etc. inside a class or inside a
...@@ -159,7 +160,7 @@ bool MemberDef::hasExamples() ...@@ -159,7 +160,7 @@ bool MemberDef::hasExamples()
return exampleList->count()>0; return exampleList->count()>0;
} }
#if 0
void MemberDef::writeExample(OutputList &ol) void MemberDef::writeExample(OutputList &ol)
{ {
Example *e=exampleList->first(); Example *e=exampleList->first();
...@@ -177,4 +178,27 @@ void MemberDef::writeExample(OutputList &ol) ...@@ -177,4 +178,27 @@ void MemberDef::writeExample(OutputList &ol)
} }
ol.writeString("."); ol.writeString(".");
} }
#endif
QString MemberDef::getOutputFileBase() const
{
if (classDef)
{
return classDef->getOutputFileBase();
}
else if (fileDef)
{
return fileDef->getOutputFileBase();
}
else if (fileDec)
{
return fileDec->getOutputFileBase();
}
else if (nspace)
{
return nspace->getOutputFileBase();
}
warn("Warning: Internal inconsistency: member %s does not belong to any\n"
" container!\n",name().data());
return "dummy";
}
...@@ -55,6 +55,7 @@ class MemberDef : public Definition ...@@ -55,6 +55,7 @@ class MemberDef : public Definition
const ArgumentList *al); const ArgumentList *al);
~MemberDef(); ~MemberDef();
QString getOutputFileBase() const;
const char *declaration() const { return decl; } const char *declaration() const { return decl; }
const char *definition() const { return def; } const char *definition() const { return def; }
const char *typeString() const { return type; } const char *typeString() const { return type; }
...@@ -72,6 +73,7 @@ class MemberDef : public Definition ...@@ -72,6 +73,7 @@ class MemberDef : public Definition
void setFileDef(FileDef *fd) { fileDef=fd; } void setFileDef(FileDef *fd) { fileDef=fd; }
void setFileDec(FileDef *fd) { fileDec=fd; } void setFileDec(FileDef *fd) { fileDec=fd; }
void setAnchor(const char *a) { ref=a; } void setAnchor(const char *a) { ref=a; }
void setProtection(Protection p) { prot=p; }
FileDef *getFileDef() { return fileDef; } FileDef *getFileDef() { return fileDef; }
FileDef *getFileDec() { return fileDec; } FileDef *getFileDec() { return fileDec; }
void setMemberClass(ClassDef *cd) { classDef=cd; } void setMemberClass(ClassDef *cd) { classDef=cd; }
...@@ -105,8 +107,9 @@ class MemberDef : public Definition ...@@ -105,8 +107,9 @@ class MemberDef : public Definition
// example related members // example related members
bool addExample(const char *anchor,const char *name,const char *file); bool addExample(const char *anchor,const char *name,const char *file);
void writeExample(OutputList &ol); //void writeExample(OutputList &ol);
bool hasExamples(); bool hasExamples();
ExampleList *getExampleList() const { return exampleList; }
// prototype related members // prototype related members
const char *getDefFile() { return defFile; } const char *getDefFile() { return defFile; }
......
...@@ -43,7 +43,10 @@ void MemberList::countDecMembers() ...@@ -43,7 +43,10 @@ void MemberList::countDecMembers()
if ((!hideMemberFlag || md->hasDocumentation()) && if ((!hideMemberFlag || md->hasDocumentation()) &&
(!hideMemberFlag || !md->documentation().isEmpty() || (!hideMemberFlag || !md->documentation().isEmpty() ||
briefMemDescFlag || repeatBriefFlag briefMemDescFlag || repeatBriefFlag
) || extractAllFlag ) || extractAllFlag ||
(md->isEnumerate() &&
md->hasDocumentedEnumValues()
)
) )
{ {
switch(md->memberType()) switch(md->memberType())
......
...@@ -22,12 +22,14 @@ ...@@ -22,12 +22,14 @@
#include "classdef.h" #include "classdef.h"
#include "classlist.h" #include "classlist.h"
#include "memberlist.h" #include "memberlist.h"
#include "doxygen.h"
NamespaceDef::NamespaceDef(const char *name) : Definition(name) NamespaceDef::NamespaceDef(const char *name,const char *ref) : Definition(name)
{ {
fileName="namespace_"+nameToFile(name); fileName="namespace_"+nameToFile(name);
classList = new ClassList; classList = new ClassList;
memList = new MemberList; memList = new MemberList;
reference=ref;
} }
NamespaceDef::~NamespaceDef() NamespaceDef::~NamespaceDef()
...@@ -61,18 +63,21 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -61,18 +63,21 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
QString pageTitle=name()+" Namespace Reference"; QString pageTitle=name()+" Namespace Reference";
startFile(ol,fileName,pageTitle); startFile(ol,fileName,pageTitle);
startTitle(ol); startTitle(ol);
ol.docify(pageTitle); //ol.docify(pageTitle);
parseText(ol,theTranslator->trNamespaceReference(name()));
endTitle(ol,name()); endTitle(ol,name());
if (genTagFile.length()>0) tagFile << "%" << name() << ":\n";
OutputList briefOutput(&ol); OutputList briefOutput(&ol);
if (briefDescription()) if (briefDescription())
{ {
parseDoc(briefOutput,0,0,briefDescription()); parseDoc(briefOutput,name(),0,briefDescription());
ol+=briefOutput; ol+=briefOutput;
ol.writeString(" \n"); ol.writeString(" \n");
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.startTextLink(0,"details"); ol.startTextLink(0,"_details");
parseDoc(ol,0,0,theTranslator->trMore()); parseText(ol,theTranslator->trMore());
ol.endTextLink(); ol.endTextLink();
ol.enableAll(); ol.enableAll();
} }
...@@ -81,6 +86,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -81,6 +86,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
ol.enable(OutputGenerator::Man); ol.enable(OutputGenerator::Man);
ol.writeSynopsis(); ol.writeSynopsis();
ol.startMemberSections();
if (classList->count()>0) if (classList->count()>0)
{ {
ClassDef *cd=classList->first(); ClassDef *cd=classList->first();
...@@ -92,7 +98,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -92,7 +98,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
if (!found) if (!found)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseDoc(ol,0,0,theTranslator->trCompounds()); parseText(ol,theTranslator->trCompounds());
ol.endMemberHeader(); ol.endMemberHeader();
ol.startMemberList(); ol.startMemberList();
found=TRUE; found=TRUE;
...@@ -111,10 +117,11 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -111,10 +117,11 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
case ClassDef::Union: ol.writeString("union"); break; case ClassDef::Union: ol.writeString("union"); break;
} }
ol.writeString(" "); ol.writeString(" ");
ol.insertMemberAlign();
if (cd->hasDocumentation()) if (cd->hasDocumentation())
{ {
ol.writeObjectLink(cd->getReference(), ol.writeObjectLink(cd->getReference(),
cd->classFile(), cd->getOutputFileBase(),
0, 0,
clName clName
); );
...@@ -133,13 +140,17 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -133,13 +140,17 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
} }
writeMemberDecs(ol,0,this,0,0,0,memList); writeMemberDecs(ol,0,this,0,0,0,memList);
ol.endMemberSections();
if (!briefDescription().isEmpty() || !documentation().isEmpty()) if (!briefDescription().isEmpty() || !documentation().isEmpty())
{ {
ol.writeRuler(); ol.writeRuler();
ol.writeAnchor("details"); bool latexOn = ol.isEnabled(OutputGenerator::Latex);
if (latexOn) ol.disable(OutputGenerator::Latex);
ol.writeAnchor("_details");
if (latexOn) ol.enable(OutputGenerator::Latex);
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trDetailedDescription()); parseText(ol,theTranslator->trDetailedDescription());
ol.endGroupHeader(); ol.endGroupHeader();
if (!briefDescription().isEmpty()) if (!briefDescription().isEmpty())
{ {
...@@ -148,7 +159,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -148,7 +159,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
} }
if (!documentation().isEmpty()) if (!documentation().isEmpty())
{ {
parseDoc(ol,0,0,documentation()+"\n"); parseDoc(ol,name(),0,documentation()+"\n");
ol.newParagraph(); ol.newParagraph();
} }
} }
...@@ -159,7 +170,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -159,7 +170,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trFunctionPrototypeDocumentation()); parseText(ol,theTranslator->trFunctionPrototypeDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Prototype); writeMemberDocs(ol,memList,name(),MemberDef::Prototype);
} }
...@@ -168,7 +179,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -168,7 +179,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trTypedefDocumentation()); parseText(ol,theTranslator->trTypedefDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Typedef); writeMemberDocs(ol,memList,name(),MemberDef::Typedef);
} }
...@@ -177,7 +188,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -177,7 +188,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trEnumerationTypeDocumentation()); parseText(ol,theTranslator->trEnumerationTypeDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Enumeration); writeMemberDocs(ol,memList,name(),MemberDef::Enumeration);
} }
...@@ -186,7 +197,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -186,7 +197,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trEnumerationValueDocumentation()); parseText(ol,theTranslator->trEnumerationValueDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::EnumValue); writeMemberDocs(ol,memList,name(),MemberDef::EnumValue);
} }
...@@ -195,7 +206,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -195,7 +206,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trFunctionDocumentation()); parseText(ol,theTranslator->trFunctionDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Function); writeMemberDocs(ol,memList,name(),MemberDef::Function);
} }
...@@ -204,7 +215,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -204,7 +215,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trVariableDocumentation()); parseText(ol,theTranslator->trVariableDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Variable); writeMemberDocs(ol,memList,name(),MemberDef::Variable);
} }
...@@ -212,9 +223,15 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -212,9 +223,15 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
// write Author section (Man only) // write Author section (Man only)
ol.disableAllBut(OutputGenerator::Man); ol.disableAllBut(OutputGenerator::Man);
ol.startGroupHeader(); ol.startGroupHeader();
parseDoc(ol,0,0,theTranslator->trAuthor()); parseText(ol,theTranslator->trAuthor());
ol.endGroupHeader(); ol.endGroupHeader();
parseDoc(ol,0,0,theTranslator->trGeneratedAutomatically(projectName)); parseText(ol,theTranslator->trGeneratedAutomatically(projectName));
ol.enableAll(); ol.enableAll();
endFile(ol); endFile(ol);
} }
int NamespaceDef::countMembers()
{
memList->countDocMembers();
return memList->totalCount()+classList->count();
}
...@@ -31,16 +31,20 @@ class MemberDef; ...@@ -31,16 +31,20 @@ class MemberDef;
class NamespaceDef : public Definition class NamespaceDef : public Definition
{ {
public: public:
NamespaceDef(const char *name); NamespaceDef(const char *name,const char *ref=0);
~NamespaceDef(); ~NamespaceDef();
QString namespaceFile() const { return fileName; } //QString namespaceFile() const { return fileName; }
QString getOutputFileBase() const { return fileName; }
void insertUsedFile(const char *fname); void insertUsedFile(const char *fname);
void writeDocumentation(OutputList &ol); void writeDocumentation(OutputList &ol);
void insertClass(ClassDef *cd); void insertClass(ClassDef *cd);
void insertMember(MemberDef *md); void insertMember(MemberDef *md);
void computeAnchors(); void computeAnchors();
int countMembers();
const char *getReference() { return reference; }
private: private:
QString reference;
QString fileName; QString fileName;
QStrList files; QStrList files;
ClassList *classList; ClassList *classList;
......
...@@ -84,12 +84,15 @@ class OutputGenerator ...@@ -84,12 +84,15 @@ class OutputGenerator
virtual void endGroupHeader() = 0; virtual void endGroupHeader() = 0;
virtual void writeListItem() = 0; virtual void writeListItem() = 0;
virtual void startMemberSections() = 0;
virtual void endMemberSections() = 0;
virtual void startMemberHeader() = 0; virtual void startMemberHeader() = 0;
virtual void endMemberHeader() = 0; virtual void endMemberHeader() = 0;
virtual void startMemberList() = 0; virtual void startMemberList() = 0;
virtual void endMemberList() = 0; virtual void endMemberList() = 0;
virtual void startMemberItem() = 0; virtual void startMemberItem() = 0;
virtual void endMemberItem() = 0; virtual void endMemberItem() = 0;
virtual void insertMemberAlign() = 0;
virtual void writeRuler() = 0; virtual void writeRuler() = 0;
virtual void writeAnchor(const char *name) = 0; virtual void writeAnchor(const char *name) = 0;
...@@ -103,6 +106,7 @@ class OutputGenerator ...@@ -103,6 +106,7 @@ class OutputGenerator
virtual void endMemberDoc() = 0; virtual void endMemberDoc() = 0;
virtual void writeDoxyAnchor(const char *clName,const char *anchor,const char *name) = 0; virtual void writeDoxyAnchor(const char *clName,const char *anchor,const char *name) = 0;
virtual void writeLatexSpacing() = 0; virtual void writeLatexSpacing() = 0;
virtual void writeLatexLabel(const char *clName,const char *anchor) = 0;
virtual void writeStartAnnoItem(const char *type,const char *file, virtual void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name) = 0; const char *path,const char *name) = 0;
virtual void writeEndAnnoItem(const char *name) = 0; virtual void writeEndAnnoItem(const char *name) = 0;
...@@ -144,6 +148,7 @@ class OutputGenerator ...@@ -144,6 +148,7 @@ class OutputGenerator
virtual void writeSection(const char *,const char *,bool) = 0; virtual void writeSection(const char *,const char *,bool) = 0;
virtual void writeSectionRef(const char *,const char *,const char *) = 0; virtual void writeSectionRef(const char *,const char *,const char *) = 0;
virtual void writeSectionRefItem(const char *,const char *,const char *) = 0; virtual void writeSectionRefItem(const char *,const char *,const char *) = 0;
virtual void writeSectionRefAnchor(const char *,const char *,const char *) = 0;
virtual void lineBreak() = 0; virtual void lineBreak() = 0;
virtual void addToIndex(const char *s1,const char *s2) = 0; virtual void addToIndex(const char *s1,const char *s2) = 0;
virtual void startIndent() = 0; virtual void startIndent() = 0;
......
...@@ -129,6 +129,10 @@ class OutputList ...@@ -129,6 +129,10 @@ class OutputList
{ forall(&OutputGenerator::endGroupHeader); } { forall(&OutputGenerator::endGroupHeader); }
void writeListItem() void writeListItem()
{ forall(&OutputGenerator::writeListItem); } { forall(&OutputGenerator::writeListItem); }
void startMemberSections()
{ forall(&OutputGenerator::startMemberSections); }
void endMemberSections()
{ forall(&OutputGenerator::endMemberSections); }
void startMemberHeader() void startMemberHeader()
{ forall(&OutputGenerator::startMemberHeader); } { forall(&OutputGenerator::startMemberHeader); }
void endMemberHeader() void endMemberHeader()
...@@ -141,6 +145,8 @@ class OutputList ...@@ -141,6 +145,8 @@ class OutputList
{ forall(&OutputGenerator::startMemberItem); } { forall(&OutputGenerator::startMemberItem); }
void endMemberItem() void endMemberItem()
{ forall(&OutputGenerator::endMemberItem); } { forall(&OutputGenerator::endMemberItem); }
void insertMemberAlign()
{ forall(&OutputGenerator::insertMemberAlign); }
void writeRuler() void writeRuler()
{ forall(&OutputGenerator::writeRuler); } { forall(&OutputGenerator::writeRuler); }
void writeAnchor(const char *name) void writeAnchor(const char *name)
...@@ -165,6 +171,8 @@ class OutputList ...@@ -165,6 +171,8 @@ class OutputList
{ forall(&OutputGenerator::writeDoxyAnchor,clName,anchor,name); } { forall(&OutputGenerator::writeDoxyAnchor,clName,anchor,name); }
void writeLatexSpacing() void writeLatexSpacing()
{ forall(&OutputGenerator::writeLatexSpacing); } { forall(&OutputGenerator::writeLatexSpacing); }
void writeLatexLabel(const char *scope,const char *anchor)
{ forall(&OutputGenerator::writeLatexLabel,scope,anchor); }
void startDescription() void startDescription()
{ forall(&OutputGenerator::startDescription); } { forall(&OutputGenerator::startDescription); }
void endDescription() void endDescription()
...@@ -251,6 +259,8 @@ class OutputList ...@@ -251,6 +259,8 @@ class OutputList
{ forall(&OutputGenerator::writeSectionRef,page,lab,title); } { forall(&OutputGenerator::writeSectionRef,page,lab,title); }
void writeSectionRefItem(const char *page,const char *lab, const char *title) void writeSectionRefItem(const char *page,const char *lab, const char *title)
{ forall(&OutputGenerator::writeSectionRefItem,page,lab,title); } { forall(&OutputGenerator::writeSectionRefItem,page,lab,title); }
void writeSectionRefAnchor(const char *page,const char *lab, const char *title)
{ forall(&OutputGenerator::writeSectionRefAnchor,page,lab,title); }
void addToIndex(const char *s1,const char *s2) void addToIndex(const char *s1,const char *s2)
{ forall(&OutputGenerator::addToIndex,s1,s2); } { forall(&OutputGenerator::addToIndex,s1,s2); }
void writeSynopsis() void writeSynopsis()
......
...@@ -1160,11 +1160,11 @@ BN [ \t\r\n] ...@@ -1160,11 +1160,11 @@ BN [ \t\r\n]
<SkipCommand>. <SkipCommand>.
<SkipLine>[^/\n]+ <SkipLine>[^/\n]+
<SkipLine>. <SkipLine>.
<SkipLine>"//" { <SkipLine,SkipCommand,SkipCPPBlock>"//" {
lastCPPContext=YY_START; lastCPPContext=YY_START;
BEGIN(RemoveCPPComment); BEGIN(RemoveCPPComment);
} }
<SkipLine>"/*" { <SkipLine,SkipCommand,SkipCPPBlock>"/*" {
lastCContext=YY_START; lastCContext=YY_START;
BEGIN(RemoveCComment); BEGIN(RemoveCComment);
} }
......
...@@ -31,4 +31,5 @@ extern void parseDoc(OutputList &ol,const char *clName, const char *memName, ...@@ -31,4 +31,5 @@ extern void parseDoc(OutputList &ol,const char *clName, const char *memName,
const QString &docString); const QString &docString);
extern void parseExample(OutputList &ol,const QString &docString, extern void parseExample(OutputList &ol,const QString &docString,
const char *fileName); const char *fileName);
extern void parseText(OutputList &ol,const QString &txtString);
#endif #endif
...@@ -76,6 +76,7 @@ static int lastCodeState; ...@@ -76,6 +76,7 @@ static int lastCodeState;
static int lastAfterDocContext; static int lastAfterDocContext;
static int lastGroupContext; static int lastGroupContext;
static int lastFormulaContext; static int lastFormulaContext;
static int lastAnchorContext;
static int nextDefContext; static int nextDefContext;
static Protection protection; static Protection protection;
static Protection baseProt; static Protection baseProt;
...@@ -120,7 +121,8 @@ static char afterDocTerminator; ...@@ -120,7 +121,8 @@ static char afterDocTerminator;
static int tmpDocType; static int tmpDocType;
static QString sectionLabel; static QString sectionLabel;
static QString sectionTitle; static QString sectionTitle;
static bool isSubsection; static SectionInfo::SectionType
sectionType;
static QString funcPtrType; static QString funcPtrType;
static QString templateStr; static QString templateStr;
static QString baseName; static QString baseName;
...@@ -184,7 +186,6 @@ static void initParser() ...@@ -184,7 +186,6 @@ static void initParser()
inParBlock = FALSE; inParBlock = FALSE;
firstSeeArg = FALSE; firstSeeArg = FALSE;
javaDocSee = FALSE; javaDocSee = FALSE;
isSubsection = FALSE;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -532,12 +533,19 @@ static void addSection() ...@@ -532,12 +533,19 @@ static void addSection()
{ {
//printf("New section pageName=%s label=%s title=%s\n", //printf("New section pageName=%s label=%s title=%s\n",
// current->name.data(),sectionLabel.data(),sectionTitle.data()); // current->name.data(),sectionLabel.data(),sectionTitle.data());
SectionInfo *si=new SectionInfo(current->name, if (sectionLabel.isEmpty()) return;
sectionLabel,sectionTitle,isSubsection); if (sectionDict[sectionLabel]==0)
{
SectionInfo *si=new SectionInfo(sectionLabel,sectionTitle,sectionType);
sectionDict.insert(sectionLabel,si); sectionDict.insert(sectionLabel,si);
current->anchors->append(new QString(sectionLabel));
}
else
{
warn("Warning: Duplicate label %s found!\n",sectionLabel.data());
}
} }
// Adds a formula text to the list/dictionary of formulas if it was // Adds a formula text to the list/dictionary of formulas if it was
// not already added. Returns the label of the formula. // not already added. Returns the label of the formula.
static QString addFormula() static QString addFormula()
...@@ -710,6 +718,7 @@ VAR [vV][aA][rR] ...@@ -710,6 +718,7 @@ VAR [vV][aA][rR]
%x MemberSpec %x MemberSpec
%x MemberSpecSkip %x MemberSpecSkip
%x SkipVerbatim %x SkipVerbatim
%x Text
%x DocScan %x DocScan
%x DocParam %x DocParam
%x DocException %x DocException
...@@ -742,6 +751,8 @@ VAR [vV][aA][rR] ...@@ -742,6 +751,8 @@ VAR [vV][aA][rR]
%x DocVerbInc %x DocVerbInc
%x DocIndexWord %x DocIndexWord
%x DocRef %x DocRef
%x DocRefArg
%x DocRefArgStart
%x DocRefItem %x DocRefItem
%x DocRefItemName %x DocRefItemName
%x SectionLabel %x SectionLabel
...@@ -756,6 +767,7 @@ VAR [vV][aA][rR] ...@@ -756,6 +767,7 @@ VAR [vV][aA][rR]
%x DocSkipHtmlComment %x DocSkipHtmlComment
%x ReadFormulaShort %x ReadFormulaShort
%x ReadFormulaLong %x ReadFormulaLong
%x AnchorLabel
%% %%
...@@ -798,13 +810,13 @@ VAR [vV][aA][rR] ...@@ -798,13 +810,13 @@ VAR [vV][aA][rR]
<DocScan>"<!--" { BEGIN(DocSkipHtmlComment); } <DocScan>"<!--" { BEGIN(DocSkipHtmlComment); }
<DocSkipHtmlComment>"--"[!]?">" { BEGIN(DocScan); } <DocSkipHtmlComment>"--"[!]?">" { BEGIN(DocScan); }
<DocSkipHtmlComment>. <DocSkipHtmlComment>.
<DocScan>"&copy;" { outDoc->writeCopyright(); } <DocScan,Text>"&copy;" { outDoc->writeCopyright(); }
<DocScan>"&quot;" { outDoc->writeQuote(); } <DocScan,Text>"&quot;" { outDoc->writeQuote(); }
<DocScan>"&"[AEIOUYaeiouy]"uml;" { outDoc->writeUmlaut(yytext[1]); } <DocScan,Text>"&"[AEIOUYaeiouy]"uml;" { outDoc->writeUmlaut(yytext[1]); }
<DocScan>"&"[AEIOUYaeiouy]"acute;" { outDoc->writeAcute(yytext[1]); } <DocScan,Text>"&"[AEIOUYaeiouy]"acute;" { outDoc->writeAcute(yytext[1]); }
<DocScan>"&"[AEIOUaeiou]"grave;" { outDoc->writeGrave(yytext[1]); } <DocScan,Text>"&"[AEIOUaeiou]"grave;" { outDoc->writeGrave(yytext[1]); }
<DocScan>"&"[AEIOUaeiou]"circ;" { outDoc->writeCirc(yytext[1]); } <DocScan,Text>"&"[AEIOUaeiou]"circ;" { outDoc->writeCirc(yytext[1]); }
<DocScan>"&"[ANOano]"tilde;" { outDoc->writeTilde(yytext[1]); } <DocScan,Text>"&"[ANOano]"tilde;" { outDoc->writeTilde(yytext[1]); }
<DocScan,DocHtmlScan,DocLatexScan>"$("[a-z_A-Z]+")" { <DocScan,DocHtmlScan,DocLatexScan>"$("[a-z_A-Z]+")" {
QString envvar=&yytext[2]; QString envvar=&yytext[2];
envvar=envvar.left(envvar.length()-1); envvar=envvar.left(envvar.length()-1);
...@@ -914,7 +926,7 @@ VAR [vV][aA][rR] ...@@ -914,7 +926,7 @@ VAR [vV][aA][rR]
outDoc->writeFormula(formName,formula->getFormulaText()); outDoc->writeFormula(formName,formula->getFormulaText());
} }
} }
<DocIndexWord>[^\n\t ]+ { <DocIndexWord>[^\n]+ {
//printf("Adding %s to index\n",yytext); //printf("Adding %s to index\n",yytext);
outDoc->addToIndex(yytext,0); outDoc->addToIndex(yytext,0);
BEGIN(DocScan); BEGIN(DocScan);
...@@ -1124,7 +1136,7 @@ VAR [vV][aA][rR] ...@@ -1124,7 +1136,7 @@ VAR [vV][aA][rR]
outDoc->docify(" - "); outDoc->docify(" - ");
BEGIN(DocScan); BEGIN(DocScan);
} }
<DocScan>("\\"|"@")"section "{ID}"\n" { <DocScan>"\\section "{ID}"\n" {
QString secName=&yytext[9]; // skip "\section " QString secName=&yytext[9]; // skip "\section "
secName=secName.left(secName.length()-1); // remove \n secName=secName.left(secName.length()-1); // remove \n
//printf("SectionName %s found\n",secName.data()); //printf("SectionName %s found\n",secName.data());
...@@ -1132,7 +1144,17 @@ VAR [vV][aA][rR] ...@@ -1132,7 +1144,17 @@ VAR [vV][aA][rR]
if ((sec=sectionDict[secName])) if ((sec=sectionDict[secName]))
{ {
//printf("Title %s\n",sec->title.data()); //printf("Title %s\n",sec->title.data());
outDoc->writeSection(sec->label,sec->title,sec->isSubsection); outDoc->writeSection(sec->label,sec->title,
sec->type==SectionInfo::Subsection);
}
}
<DocScan>"\\anchor "{ID}"\n" {
QString secName=&yytext[8];
secName=secName.left(secName.length()-1);
SectionInfo *sec;
if ((sec=sectionDict[secName]))
{
outDoc->writeAnchor(sec->label);
} }
} }
<DocScan>"\\ref" { <DocScan>"\\ref" {
...@@ -1146,7 +1168,19 @@ VAR [vV][aA][rR] ...@@ -1146,7 +1168,19 @@ VAR [vV][aA][rR]
SectionInfo *sec; SectionInfo *sec;
if ((sec=sectionDict[ref])) if ((sec=sectionDict[ref]))
{ {
outDoc->writeSectionRef(sec->pageName,sec->label,sec->title); QString text;
if (sec->title.isEmpty())
text=sec->label;
else
text=sec->title;
if (sec->type==SectionInfo::Anchor)
{
outDoc->writeSectionRefAnchor(sec->fileName,sec->label,text);
}
else
{
outDoc->writeSectionRef(sec->fileName,sec->label,text);
}
} }
else else
{ {
...@@ -1155,6 +1189,35 @@ VAR [vV][aA][rR] ...@@ -1155,6 +1189,35 @@ VAR [vV][aA][rR]
} }
BEGIN(DocScan); BEGIN(DocScan);
} }
<DocRefName>{ID}/{B}+"\"" {
sectionRef=yytext;
BEGIN(DocRefArgStart);
}
<DocRefArgStart>"\"" {
BEGIN(DocRefArg);
}
<DocRefArg>[^\"\n]+[\n\"] {
yytext[yyleng-1]='\0';
QString text=substitute(yytext,"\\\\","\\");
SectionInfo *sec;
if ((sec=sectionDict[sectionRef]))
{
if (sec->type==SectionInfo::Anchor)
{
outDoc->writeSectionRefAnchor(sec->fileName,sec->label,text);
}
else
{
outDoc->writeSectionRef(sec->fileName,sec->label,text);
}
}
else
{
warn("Warning: reference to unknown section %s!\n",sectionRef.data());
outDoc->writeBoldString("unknown reference!");
}
BEGIN(DocScan);
}
<DocRefItem>{ID} { <DocRefItem>{ID} {
sectionRef=yytext; sectionRef=yytext;
BEGIN(DocRefItemName); BEGIN(DocRefItemName);
...@@ -1163,7 +1226,7 @@ VAR [vV][aA][rR] ...@@ -1163,7 +1226,7 @@ VAR [vV][aA][rR]
SectionInfo *sec; SectionInfo *sec;
if ((sec=sectionDict[sectionRef])) if ((sec=sectionDict[sectionRef]))
{ {
outDoc->writeSectionRefItem(sec->pageName,sec->label,yytext); outDoc->writeSectionRefItem(sec->fileName,sec->label,yytext);
} }
else else
{ {
...@@ -1271,6 +1334,10 @@ VAR [vV][aA][rR] ...@@ -1271,6 +1334,10 @@ VAR [vV][aA][rR]
<DocKeyEnd>("\\"|"@")"until"{BN}+ { BEGIN(DocUntilKey); } <DocKeyEnd>("\\"|"@")"until"{BN}+ { BEGIN(DocUntilKey); }
<DocKeyEnd>("\\"|"@")"skipline"{BN}+ { BEGIN(DocSkiplineKey); } <DocKeyEnd>("\\"|"@")"skipline"{BN}+ { BEGIN(DocSkiplineKey); }
<DocKeyEnd>\n <DocKeyEnd>\n
<DocKeyEnd><<EOF>> {
if (!firstLine) outDoc->endCodeFragment();
yyterminate();
}
<DocKeyEnd>. { <DocKeyEnd>. {
unput(*yytext); unput(*yytext);
if (!firstLine) outDoc->endCodeFragment(); if (!firstLine) outDoc->endCodeFragment();
...@@ -1462,7 +1529,7 @@ VAR [vV][aA][rR] ...@@ -1462,7 +1529,7 @@ VAR [vV][aA][rR]
<DocScan>{BN}+ { <DocScan>{BN}+ {
outDoc->writeChar(' '); outDoc->writeChar(' ');
} }
<DocCode,DocEmphasis,DocBold,DocScan>. { <DocCode,DocEmphasis,DocBold,DocScan,Text>. {
outDoc->writeChar(*yytext); outDoc->writeChar(*yytext);
} }
<NextSemi>"{" { BEGIN(SkipBlock); } <NextSemi>"{" { BEGIN(SkipBlock); }
...@@ -1472,6 +1539,9 @@ VAR [vV][aA][rR] ...@@ -1472,6 +1539,9 @@ VAR [vV][aA][rR]
else else
BEGIN( NextSemi ) ; BEGIN( NextSemi ) ;
} }
<NextSemi>"'"\\[0-7]{1,3}"'"
<NextSemi>"'"\\."'"
<NextSemi>"'"."'"
<NextSemi>\" { <NextSemi>\" {
lastStringContext=NextSemi; lastStringContext=NextSemi;
BEGIN(SkipString); BEGIN(SkipString);
...@@ -1556,6 +1626,9 @@ VAR [vV][aA][rR] ...@@ -1556,6 +1626,9 @@ VAR [vV][aA][rR]
/* /*
<FindMembers>"inline" <FindMembers>"inline"
*/ */
<FindMembers>{BN}+ {
lineCount();
}
<FindMembers>{B}*"static"{BN}+ { //current->type += " static "; <FindMembers>{B}*"static"{BN}+ { //current->type += " static ";
current->stat = TRUE; current->stat = TRUE;
lineCount(); lineCount();
...@@ -2081,8 +2154,8 @@ VAR [vV][aA][rR] ...@@ -2081,8 +2154,8 @@ VAR [vV][aA][rR]
} }
<MemberSpecSkip>"," { BEGIN(MemberSpec); } <MemberSpecSkip>"," { BEGIN(MemberSpec); }
<MemberSpecSkip>";" { unput(';'); BEGIN(MemberSpec); } <MemberSpecSkip>";" { unput(';'); BEGIN(MemberSpec); }
<Curly>\n { current->program += yytext ; <Curly>{BN}+ { current->program += yytext ;
yyLineNr++ ; lineCount() ;
} }
<Curly>. { current->program += yytext ; } <Curly>. { current->program += yytext ; }
...@@ -2404,7 +2477,9 @@ VAR [vV][aA][rR] ...@@ -2404,7 +2477,9 @@ VAR [vV][aA][rR]
//BEGIN( FindMembers ) ; //BEGIN( FindMembers ) ;
BEGIN( lastCurlyContext ) ; BEGIN( lastCurlyContext ) ;
} }
<SkipCurly>\'.\' <SkipCurly>"'"\\[0-7]{1,3}"'"
<SkipCurly>"'"\\."'"
<SkipCurly>"'"."'"
<SkipCurly>\" { <SkipCurly>\" {
lastStringContext=SkipCurly; lastStringContext=SkipCurly;
BEGIN( SkipString ); BEGIN( SkipString );
...@@ -2538,15 +2613,16 @@ VAR [vV][aA][rR] ...@@ -2538,15 +2613,16 @@ VAR [vV][aA][rR]
); );
BEGIN( Curly ) ; BEGIN( Curly ) ;
} }
<Comment>\n { current->program += yytext ; <Comment>{BN}+ { current->program += yytext ;
yyLineNr++ ; lineCount() ;
} }
<Comment>"/*" { current->program += yytext ; } <Comment>"/*" { current->program += yytext ; }
<Comment>"//" { current->program += yytext ; } <Comment>"//" { current->program += yytext ; }
<Comment>. { current->program += *yytext ; } <Comment>[^\n\*]+ { current->program += yytext ; }
<Comment>.*"*/" { current->program += yytext ; <Comment>.*"*/" { current->program += yytext ;
BEGIN( Curly ) ; BEGIN( Curly ) ;
} }
<Comment>. { current->program += *yytext ; }
<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator>("//"{B}*)?"/*!" { <FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator>("//"{B}*)?"/*!" {
removeSlashes=(yytext[1]=='/'); removeSlashes=(yytext[1]=='/');
...@@ -2596,7 +2672,7 @@ VAR [vV][aA][rR] ...@@ -2596,7 +2672,7 @@ VAR [vV][aA][rR]
current->inside = current_root->name+"::"; current->inside = current_root->name+"::";
BEGIN( LineDoc ); BEGIN( LineDoc );
} }
<FindMembers>"extern"{BN}+"\"C"("++")?"\""{BN}+("{")? <FindMembers>"extern"{BN}+"\"C"("++")?"\""{BN}*("{")?
<FindMembers>"{" { <FindMembers>"{" {
current->type.resize(0); current->type.resize(0);
current->name.resize(0); current->name.resize(0);
...@@ -2846,13 +2922,18 @@ VAR [vV][aA][rR] ...@@ -2846,13 +2922,18 @@ VAR [vV][aA][rR]
current->doc+=yytext; current->doc+=yytext;
} }
<PageDoc>("\\"|"@")"section"{B}+ { <PageDoc>("\\"|"@")"section"{B}+ {
isSubsection=FALSE; sectionType=SectionInfo::Section;
BEGIN(SectionLabel); BEGIN(SectionLabel);
} }
<PageDoc>("\\"|"@")"subsection"{B}+ { <PageDoc>("\\"|"@")"subsection"{B}+ {
isSubsection=TRUE; sectionType=SectionInfo::Subsection;
BEGIN(SectionLabel); BEGIN(SectionLabel);
} }
<Doc,PageDoc,JavaDoc,ClassDoc>("\\"|"@")anchor{B}+ {
lastAnchorContext = YY_START;
sectionType=SectionInfo::Anchor;
BEGIN(AnchorLabel);
}
<Doc,PageDoc,JavaDoc,ClassDoc>"\\\\verbatim"/[^a-z_A-Z0-9] { <Doc,PageDoc,JavaDoc,ClassDoc>"\\\\verbatim"/[^a-z_A-Z0-9] {
current->doc+="\\\\verbatim"; current->doc+="\\\\verbatim";
} }
...@@ -2861,6 +2942,9 @@ VAR [vV][aA][rR] ...@@ -2861,6 +2942,9 @@ VAR [vV][aA][rR]
current->doc+="\\verbatim"; current->doc+="\\verbatim";
BEGIN(SkipVerbatim); BEGIN(SkipVerbatim);
} }
<Doc,PageDoc,JavaDoc,ClassDoc>"\\addindex"{B}+[^\n]+ {
current->doc+=yytext;
}
<Doc,PageDoc,JavaDoc,ClassDoc>"\\\\code"/[^a-z_A-Z0-9] { <Doc,PageDoc,JavaDoc,ClassDoc>"\\\\code"/[^a-z_A-Z0-9] {
current->doc+="\\\\code"; current->doc+="\\\\code";
} }
...@@ -2928,7 +3012,13 @@ VAR [vV][aA][rR] ...@@ -2928,7 +3012,13 @@ VAR [vV][aA][rR]
<SkipCode>. { <SkipCode>. {
current->doc+=*yytext; current->doc+=*yytext;
} }
<SectionLabel>[a-z_A-Z0-9]+ { <AnchorLabel>{ID} {
sectionLabel=yytext;
addSection();
current->doc += "\\anchor "+sectionLabel+"\n";
BEGIN(lastAnchorContext);
}
<SectionLabel>{ID} {
sectionLabel=yytext; sectionLabel=yytext;
sectionTitle.resize(0); sectionTitle.resize(0);
BEGIN(SectionTitle); BEGIN(SectionTitle);
...@@ -3220,15 +3310,18 @@ void scanString(const char *s) ...@@ -3220,15 +3310,18 @@ void scanString(const char *s)
{ {
const char *oldInputString = inputString; const char *oldInputString = inputString;
int oldInputPosition = inputPosition; int oldInputPosition = inputPosition;
int oldRule = YY_START;
YY_BUFFER_STATE oldBuffer = YY_CURRENT_BUFFER; YY_BUFFER_STATE oldBuffer = YY_CURRENT_BUFFER;
yy_switch_to_buffer(yy_create_buffer(scanYYin, YY_BUF_SIZE)); yy_switch_to_buffer(yy_create_buffer(scanYYin, YY_BUF_SIZE));
inputString = s; inputString = s;
inputPosition = 0; inputPosition = 0;
BEGIN( Text );
scanYYlex(); scanYYlex();
yy_delete_buffer(YY_CURRENT_BUFFER); yy_delete_buffer(YY_CURRENT_BUFFER);
yy_switch_to_buffer(oldBuffer); yy_switch_to_buffer(oldBuffer);
inputString = oldInputString; inputString = oldInputString;
inputPosition = oldInputPosition; inputPosition = oldInputPosition;
BEGIN( oldRule );
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
...@@ -3308,6 +3401,7 @@ void parseMain(Entry *rt) ...@@ -3308,6 +3401,7 @@ void parseMain(Entry *rt)
global_root = rt; global_root = rt;
current = new Entry; current = new Entry;
inputString = rt->program; inputString = rt->program;
//printf("parseDoc=`%s'\n",inputString);
inputPosition = 0; inputPosition = 0;
ifCount=0; ifCount=0;
scanYYrestart( scanYYin ); scanYYrestart( scanYYin );
...@@ -3367,6 +3461,21 @@ void parseDoc(OutputList &ol,const char *clName, ...@@ -3367,6 +3461,21 @@ void parseDoc(OutputList &ol,const char *clName,
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void parseText(OutputList &ol,const QString &txtString)
{
inputString = txtString;
outDoc = new OutputList(&ol);
inputPosition = 0;
scanYYrestart( scanYYin );
BEGIN( Text );
scanYYlex();
ol+=*outDoc;
delete outDoc;
return;
}
//----------------------------------------------------------------------------
void parseExample(OutputList &ol,const QString &docString, void parseExample(OutputList &ol,const QString &docString,
const char *fileName) const char *fileName)
{ {
......
/******************************************************************************
*
* $Id$
*
*
* Copyright (C) 1997-1999 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.
*
* All output generated with Doxygen is not covered by this license.
*
*/
#ifndef SECTION_H
#define SECTION_H
#include <qlist.h>
#include <qdict.h>
#include <qstring.h>
class Definition;
struct SectionInfo
{
enum SectionType { Section, Subsection, Anchor };
SectionInfo(const char *l,const char *t,SectionType st)
{ label=l; title=t; type=st; definition=0; }
QString fileName;
QString label;
QString title;
SectionType type;
Definition *definition;
};
class SectionList : public QList<SectionInfo>
{
};
class SectionDict : public QDict<SectionInfo>
{
public:
SectionDict(int size) : QDict<SectionInfo>(size) {}
};
#endif
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "classdef.h" #include "classdef.h"
#include "filedef.h" #include "filedef.h"
#include "namespacedef.h"
#include "memberdef.h" #include "memberdef.h"
#include "doxygen.h" #include "doxygen.h"
#include "util.h" #include "util.h"
...@@ -36,12 +37,14 @@ ...@@ -36,12 +37,14 @@
static int yyLineNr; static int yyLineNr;
static QString className; static QString className;
static QString fileName; static QString fileName;
static QString namespaceName;
static QString tagName; static QString tagName;
static QString memberName; static QString memberName;
static QString anchorName; static QString anchorName;
static QString argString; static QString argString;
static ClassDef *cd; static ClassDef *cd;
static FileDef *fd; static FileDef *fd;
static NamespaceDef *nd;
static void addClass(const char *name,const char *fileName) static void addClass(const char *name,const char *fileName)
{ {
...@@ -50,6 +53,7 @@ static void addClass(const char *name,const char *fileName) ...@@ -50,6 +53,7 @@ static void addClass(const char *name,const char *fileName)
{ {
cd = new ClassDef(name,ClassDef::Class,tagName,fileName); cd = new ClassDef(name,ClassDef::Class,tagName,fileName);
fd = 0; fd = 0;
nd = 0;
classList.inSort(cd); classList.inSort(cd);
classDict.insert(className,cd); classDict.insert(className,cd);
} }
...@@ -72,10 +76,27 @@ static void addFile(const char *name) ...@@ -72,10 +76,27 @@ static void addFile(const char *name)
inputNameDict.insert(name,mn); inputNameDict.insert(name,mn);
} }
cd = 0; cd = 0;
nd = 0;
//fileList.inSort(fd); //fileList.inSort(fd);
//fileDict.insert(fileName,fd); //fileDict.insert(fileName,fd);
} }
static void addNamespace(const char *name)
{
if ((nd=namespaceDict[name])==0)
{
// TODO: we assume that each namespace is limited to a single tagfile.
// since namespace are open, this need not to be the case. As a result
// namespace may contain members that are located in
// different namespaces!
nd = new NamespaceDef(name,tagName);
namespaceList.inSort(nd);
namespaceDict.insert(name,nd);
}
cd = 0;
fd = 0;
}
static void addMember(const char *name,const char *anchor,const char *args) static void addMember(const char *name,const char *anchor,const char *args)
{ {
//printf("adding member %s\n",name); //printf("adding member %s\n",name);
...@@ -87,21 +108,24 @@ static void addMember(const char *name,const char *anchor,const char *args) ...@@ -87,21 +108,24 @@ static void addMember(const char *name,const char *anchor,const char *args)
md=new MemberDef(0,name,args,0,Public,Normal,FALSE,FALSE, md=new MemberDef(0,name,args,0,Public,Normal,FALSE,FALSE,
MemberDef::Function,0,0); MemberDef::Function,0,0);
md->setReference(anchor); md->setReference(anchor);
if (cd) if (cd) // member of a class
{ {
//md=new MemberDef(cd,name,args,anchor,tagName);
md->setMemberClass(cd); md->setMemberClass(cd);
cd->insertMember(md); cd->insertMember(md);
//printf("Adding member %s %s to class\n",name,args);
mnd=&memberNameDict; mnd=&memberNameDict;
mnl=&memberNameList; mnl=&memberNameList;
} }
else else if (nd) // member of a namespace
{
md->setNamespace(nd);
nd->insertMember(md);
mnd=&functionNameDict;
mnl=&functionNameList;
}
else // member of a file
{ {
//md=new MemberDef(&unrelatedClass,name,args,anchor,tagName);
md->setFileDef(fd); md->setFileDef(fd);
fd->insertMember(md); fd->insertMember(md);
//printf("Adding global member %s %s\n",name,args);
mnd=&functionNameDict; mnd=&functionNameDict;
mnl=&functionNameList; mnl=&functionNameList;
} }
...@@ -130,6 +154,7 @@ static void addMember(const char *name,const char *anchor,const char *args) ...@@ -130,6 +154,7 @@ static void addMember(const char *name,const char *anchor,const char *args)
ID [a-z_A-Z][a-z_A-Z0-9]* ID [a-z_A-Z][a-z_A-Z0-9]*
FILE [a-z_A-Z0-9\.\-\+\:\\\/]+ FILE [a-z_A-Z0-9\.\-\+\:\\\/]+
SCOPE ({ID}"::")*{ID}
%x Pass1 %x Pass1
%x Pass2 %x Pass2
...@@ -139,18 +164,22 @@ FILE [a-z_A-Z0-9\.\-\+\:\\\/]+ ...@@ -139,18 +164,22 @@ FILE [a-z_A-Z0-9\.\-\+\:\\\/]+
%x ClassName1 %x ClassName1
%x ClassName2 %x ClassName2
%x FileName %x FileName
%x NamespaceName
%x BaseClasses %x BaseClasses
%x ClassFile1 %x ClassFile1
%x ClassFile2 %x ClassFile2
%% %%
<Pass1>^">" { <Pass1>^">" { // start of a class
BEGIN(ClassName1); BEGIN(ClassName1);
} }
<Pass1>^"&" { <Pass1>^"&" { // start of a file
BEGIN(FileName); BEGIN(FileName);
} }
<Pass1>^"%" { // start of a namespace
BEGIN(NamespaceName);
}
<Pass1>^[~a-z_A-Z][^ \n]*/" " { <Pass1>^[~a-z_A-Z][^ \n]*/" " {
memberName=yytext; memberName=yytext;
BEGIN(AnchorName); BEGIN(AnchorName);
...@@ -175,7 +204,12 @@ FILE [a-z_A-Z0-9\.\-\+\:\\\/]+ ...@@ -175,7 +204,12 @@ FILE [a-z_A-Z0-9\.\-\+\:\\\/]+
addFile(yytext); addFile(yytext);
BEGIN(Pass1); BEGIN(Pass1);
} }
<ClassName1>{ID}/":" { <NamespaceName>{SCOPE}/":" {
namespaceName=yytext;
addNamespace(yytext);
BEGIN(Pass1);
}
<ClassName1>{SCOPE}/":" {
className=yytext; className=yytext;
BEGIN(ClassFile1); BEGIN(ClassFile1);
} }
......
...@@ -18,32 +18,67 @@ ...@@ -18,32 +18,67 @@
#define TRANSLATOR_H #define TRANSLATOR_H
#include <qstring.h> #include <qstring.h>
#include "classdef.h"
#include "util.h"
class Translator class Translator
{ {
public: public:
virtual QString latexBabelPackage() //--------------------------------------------------------------------
{ return ""; } // NOTICE:
// the following functions are now obsolete: these are no longer used and
// will disappear in future versions. You do not have to translate them!
virtual QString trInherits() virtual QString trInherits()
{ return "Inherits"; } { return "Inherits"; }
virtual QString trAnd() virtual QString trAnd()
{ return "and"; } { return "and"; }
virtual QString trInheritedBy() virtual QString trInheritedBy()
{ return "Inherited By"; } { return "Inherited By"; }
virtual QString trReference()
{ return "Reference"; }
virtual QString trReimplementedFrom()
{ return "Reimplemented from"; }
virtual QString trReimplementedIn()
{ return "Reimplemented in"; }
virtual QString trIncludeFile()
{ return "Include File"; }
virtual QString trNamespaces()
{ return "Namespace List"; }
// end of obsolete functions
//--------------------------------------------------------------------
virtual QString latexBabelPackage()
// returns the name of the package that is included by LaTeX
{ return ""; }
virtual QString trRelatedFunctions() virtual QString trRelatedFunctions()
// used in the compound documentation before a list of related functions.
{ return "Related Functions"; } { return "Related Functions"; }
virtual QString trRelatedSubscript() virtual QString trRelatedSubscript()
// subscript for the related functions.
{ return "(Note that these are not member functions.)"; } { return "(Note that these are not member functions.)"; }
virtual QString trDetailedDescription() virtual QString trDetailedDescription()
// header that is put before the detailed description of files, classes and namespaces.
{ return "Detailed Description"; } { return "Detailed Description"; }
virtual QString trMemberTypedefDocumentation() virtual QString trMemberTypedefDocumentation()
// header that is put before the list of typedefs.
{ return "Member Typedef Documentation"; } { return "Member Typedef Documentation"; }
virtual QString trMemberEnumerationDocumentation() virtual QString trMemberEnumerationDocumentation()
// header that is put before the list of enumerations.
{ return "Member Enumeration Documentation"; } { return "Member Enumeration Documentation"; }
virtual QString trMemberFunctionDocumentation() virtual QString trMemberFunctionDocumentation()
// header that is put before the list of member functions.
{ return "Member Function Documentation"; } { return "Member Function Documentation"; }
virtual QString trMemberDataDocumentation() virtual QString trMemberDataDocumentation()
// header that is put before the list of member attributes.
{ return "Member Data Documentation"; } { return "Member Data Documentation"; }
virtual QString trGeneratedFrom(const char *s,bool single) virtual QString trGeneratedFrom(const char *s,bool single)
{ // here s is one of " Class", " Struct" or " Union" { // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file // single is true implies a single file
...@@ -52,62 +87,92 @@ class Translator ...@@ -52,62 +87,92 @@ class Translator
if (single) result+=":"; else result+="s:"; if (single) result+=":"; else result+="s:";
return result; return result;
} }
virtual QString trMore() virtual QString trMore()
// this is the text of a link put after brief descriptions.
{ return "More..."; } { return "More..."; }
virtual QString trReference()
{ return "Reference"; }
virtual QString trListOfAllMembers() virtual QString trListOfAllMembers()
// put in the class documentation
{ return "List of all members."; } { return "List of all members."; }
virtual QString trMemberList() virtual QString trMemberList()
// used as the title of the "list of all members" page of a class
{ return "Member List"; } { return "Member List"; }
virtual QString trThisIsTheListOfAllMembers() virtual QString trThisIsTheListOfAllMembers()
{ return "This is the complete list of members for"; } // this is the first part of a sentence that is followed by a class name
{ return "This is the complete list of members for "; }
virtual QString trIncludingInheritedMembers() virtual QString trIncludingInheritedMembers()
{ return "including all inherited members."; } // this is the remainder of the sentence after the class name
{ return ", including all inherited members."; }
virtual QString trGeneratedAutomatically(const char *s) virtual QString trGeneratedAutomatically(const char *s)
// this is put at the author sections at the bottom of man pages.
// parameter s is name of the project name.
{ QString result="Generated automatically by Doxygen"; { QString result="Generated automatically by Doxygen";
if (s) result+=(QString)" for "+s; if (s) result+=(QString)" for "+s;
result+=" from the source code."; result+=" from the source code.";
return result; return result;
} }
virtual QString trEnumName() virtual QString trEnumName()
// put after an enum name in the list of all members
{ return "enum name"; } { return "enum name"; }
virtual QString trEnumValue() virtual QString trEnumValue()
// put after an enum value in the list of all members
{ return "enum value"; } { return "enum value"; }
virtual QString trDefinedIn() virtual QString trDefinedIn()
// put after an undocumented member in the list of all members
{ return "defined in"; } { return "defined in"; }
virtual QString trIncludeFile()
{ return "Include File"; }
virtual QString trVerbatimText(const char *f) virtual QString trVerbatimText(const char *f)
// put as in introduction in the verbatim header file of a class.
// parameter f is the name of the include file.
{ return (QString)"This is the verbatim text of the "+f+" include file."; } { return (QString)"This is the verbatim text of the "+f+" include file."; }
// quick reference sections
virtual QString trModules() virtual QString trModules()
// This is put above each page as a link to the list of all groups of
// compounds or files (see the \group command).
{ return "Modules"; } { return "Modules"; }
virtual QString trClassHierarchy() virtual QString trClassHierarchy()
// This is put above each page as a link to the class hierarchy
{ return "Class Hierarchy"; } { return "Class Hierarchy"; }
virtual QString trCompoundList() virtual QString trCompoundList()
// This is put above each page as a link to the list of annotated classes
{ return "Compound List"; } { return "Compound List"; }
virtual QString trFileList() virtual QString trFileList()
// This is put above each page as a link to the list of documented files
{ return "File List"; } { return "File List"; }
virtual QString trHeaderFiles() virtual QString trHeaderFiles()
// This is put above each page as a link to the list of all verbatim headers
{ return "Header Files"; } { return "Header Files"; }
virtual QString trCompoundMembers() virtual QString trCompoundMembers()
// This is put above each page as a link to all members of compounds.
{ return "Compound Members"; } { return "Compound Members"; }
virtual QString trFileMembers() virtual QString trFileMembers()
// This is put above each page as a link to all members of files.
{ return "File Members"; } { return "File Members"; }
virtual QString trRelatedPages() virtual QString trRelatedPages()
// This is put above each page as a link to all related pages.
{ return "Related Pages"; } { return "Related Pages"; }
virtual QString trExamples() virtual QString trExamples()
// This is put above each page as a link to all examples.
{ return "Examples"; } { return "Examples"; }
virtual QString trSearch() virtual QString trSearch()
// This is put above each page as a link to the search engine.
{ return "Search"; } { return "Search"; }
virtual QString trClassHierarchyDescription() virtual QString trClassHierarchyDescription()
// This is an introduction to the class hierarchy.
{ return "This inheritance list is sorted roughly, " { return "This inheritance list is sorted roughly, "
"but not completely, alphabetically:"; "but not completely, alphabetically:";
} }
virtual QString trFileListDescription(bool extractAll) virtual QString trFileListDescription(bool extractAll)
// This is an introduction to the list with all files.
{ {
QString result="Here is a list of all "; QString result="Here is a list of all ";
if (!extractAll) result+="documented "; if (!extractAll) result+="documented ";
...@@ -115,10 +180,12 @@ class Translator ...@@ -115,10 +180,12 @@ class Translator
return result; return result;
} }
virtual QString trCompoundListDescription() virtual QString trCompoundListDescription()
// This is an introduction to the annotated compound list
{ return "Here are the classes, structs and " { return "Here are the classes, structs and "
"unions with brief descriptions:"; "unions with brief descriptions:";
} }
virtual QString trCompoundMembersDescription(bool extractAll) virtual QString trCompoundMembersDescription(bool extractAll)
// This is an introduction to the page with all class members
{ {
QString result="Here is a list of all "; QString result="Here is a list of all ";
if (!extractAll) result+="documented "; if (!extractAll) result+="documented ";
...@@ -130,6 +197,7 @@ class Translator ...@@ -130,6 +197,7 @@ class Translator
return result; return result;
} }
virtual QString trFileMembersDescription(bool extractAll) virtual QString trFileMembersDescription(bool extractAll)
// This is an introduction to the page with all file members
{ {
QString result="Here is a list of all "; QString result="Here is a list of all ";
if (!extractAll) result+="documented "; if (!extractAll) result+="documented ";
...@@ -141,76 +209,134 @@ class Translator ...@@ -141,76 +209,134 @@ class Translator
return result; return result;
} }
virtual QString trHeaderFilesDescription() virtual QString trHeaderFilesDescription()
// This is an introduction to the page with the list of all header files
{ return "Here are the header files that make up the API:"; } { return "Here are the header files that make up the API:"; }
virtual QString trExamplesDescription() virtual QString trExamplesDescription()
// This is an introduction to the page with the list of all examples
{ return "Here is a list of all examples:"; } { return "Here is a list of all examples:"; }
virtual QString trRelatedPagesDescription() virtual QString trRelatedPagesDescription()
// This is an introduction to the page with the list of related pages
{ return "Here is a list of all related documentation pages:"; } { return "Here is a list of all related documentation pages:"; }
virtual QString trModulesDescription() virtual QString trModulesDescription()
// This is an introduction to the page with the list of class/file groups
{ return "Here is a list of all modules:"; } { return "Here is a list of all modules:"; }
virtual QString trNoDescriptionAvailable() virtual QString trNoDescriptionAvailable()
// This sentences is used in the annotated class/file lists if no brief
// description is given.
{ return "No description available"; } { return "No description available"; }
// index titles (the project name is prepended for these)
virtual QString trDocumentation() virtual QString trDocumentation()
// This is used in HTML as the title of index.html.
{ return "Documentation"; } { return "Documentation"; }
virtual QString trModuleIndex() virtual QString trModuleIndex()
// This is used in LaTeX as the title of the chapter with the
// index of all groups.
{ return "Module Index"; } { return "Module Index"; }
virtual QString trHierarchicalIndex() virtual QString trHierarchicalIndex()
// This is used in LaTeX as the title of the chapter with the
// class hierarchy.
{ return "Hierarchical Index"; } { return "Hierarchical Index"; }
virtual QString trCompoundIndex() virtual QString trCompoundIndex()
// This is used in LaTeX as the title of the chapter with the
// annotated compound index
{ return "Compound Index"; } { return "Compound Index"; }
virtual QString trFileIndex() virtual QString trFileIndex()
// This is used in LaTeX as the title of the chapter with the
// list of all files.
{ return "File Index"; } { return "File Index"; }
virtual QString trModuleDocumentation() virtual QString trModuleDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all groups.
{ return "Module Documentation"; } { return "Module Documentation"; }
virtual QString trClassDocumentation() virtual QString trClassDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all classes, structs and unions.
{ return "Class Documentation"; } { return "Class Documentation"; }
virtual QString trFileDocumentation() virtual QString trFileDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all files.
{ return "File Documentation"; } { return "File Documentation"; }
virtual QString trExampleDocumentation() virtual QString trExampleDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all examples.
{ return "Example Documentation"; } { return "Example Documentation"; }
virtual QString trPageDocumentation() virtual QString trPageDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all related pages.
{ return "Page Documentation"; } { return "Page Documentation"; }
virtual QString trReferenceManual() virtual QString trReferenceManual()
// This is used in LaTeX as the title of the document
{ return "Reference Manual"; } { return "Reference Manual"; }
virtual QString trDefines() virtual QString trDefines()
// This is used in the documentation of a file as a header before the
// list of defines
{ return "Defines"; } { return "Defines"; }
virtual QString trFuncProtos() virtual QString trFuncProtos()
// This is used in the documentation of a file as a header before the
// list of function prototypes
{ return "Function Prototypes"; } { return "Function Prototypes"; }
virtual QString trTypedefs() virtual QString trTypedefs()
// This is used in the documentation of a file as a header before the
// list of typedefs
{ return "Typedefs"; } { return "Typedefs"; }
virtual QString trEnumerations() virtual QString trEnumerations()
// This is used in the documentation of a file as a header before the
// list of enumerations
{ return "Enumerations"; } { return "Enumerations"; }
virtual QString trFunctions() virtual QString trFunctions()
// This is used in the documentation of a file as a header before the
// list of (global) functions
{ return "Functions"; } { return "Functions"; }
virtual QString trVariables() virtual QString trVariables()
// This is used in the documentation of a file as a header before the
// list of (global) variables
{ return "Variables"; } { return "Variables"; }
virtual QString trEnumerationValues() virtual QString trEnumerationValues()
// This is used in the documentation of a file as a header before the
// list of (global) variables
{ return "Enumeration values"; } { return "Enumeration values"; }
virtual QString trReimplementedFrom()
{ return "Reimplemented from"; }
virtual QString trReimplementedIn()
{ return "Reimplemented in"; }
virtual QString trAuthor() virtual QString trAuthor()
// This is used in man pages as the author section.
{ return "Author"; } { return "Author"; }
virtual QString trDefineDocumentation() virtual QString trDefineDocumentation()
// This is used in the documentation of a file before the list of
// documentation blocks for defines
{ return "Define Documentation"; } { return "Define Documentation"; }
virtual QString trFunctionPrototypeDocumentation() virtual QString trFunctionPrototypeDocumentation()
// This is used in the documentation of a file/namespace before the list
// of documentation blocks for function prototypes
{ return "Function Prototype Documentation"; } { return "Function Prototype Documentation"; }
virtual QString trTypedefDocumentation() virtual QString trTypedefDocumentation()
// This is used in the documentation of a file/namespace before the list
// of documentation blocks for typedefs
{ return "Typedef Documentation"; } { return "Typedef Documentation"; }
virtual QString trEnumerationTypeDocumentation() virtual QString trEnumerationTypeDocumentation()
// This is used in the documentation of a file/namespace before the list
// of documentation blocks for enumeration types
{ return "Enumeration Type Documentation"; } { return "Enumeration Type Documentation"; }
virtual QString trEnumerationValueDocumentation() virtual QString trEnumerationValueDocumentation()
// This is used in the documentation of a file/namespace before the list
// of documentation blocks for enumeration values
{ return "Enumeration Value Documentation"; } { return "Enumeration Value Documentation"; }
virtual QString trFunctionDocumentation() virtual QString trFunctionDocumentation()
// This is used in the documentation of a file/namespace before the list
// of documentation blocks for functions
{ return "Function Documentation"; } { return "Function Documentation"; }
virtual QString trVariableDocumentation() virtual QString trVariableDocumentation()
// This is used in the documentation of a file/namespace before the list
// of documentation blocks for variables
{ return "Variable Documentation"; } { return "Variable Documentation"; }
virtual QString trCompounds() virtual QString trCompounds()
// This is used in the documentation of a file/namespace/group before
// the list of links to documented compounds
{ return "Compounds"; } { return "Compounds"; }
virtual QString trFiles() virtual QString trFiles()
// This is used in the documentation of a group before the list of
// links to documented files
{ return "Files"; } { return "Files"; }
virtual QString trGeneratedAt(const char *date,const char *projName) virtual QString trGeneratedAt(const char *date,const char *projName)
...@@ -226,42 +352,56 @@ class Translator ...@@ -226,42 +352,56 @@ class Translator
} }
virtual QString trClassDiagram(const char *clName) virtual QString trClassDiagram(const char *clName)
// this text is put before a class diagram
{ {
return (QString)"Class diagram for "+clName; return (QString)"Class diagram for "+clName;
} }
virtual QString trForInternalUseOnly() virtual QString trForInternalUseOnly()
// this text is generated when the \internal command is used.
{ return "For internal use only."; } { return "For internal use only."; }
virtual QString trReimplementedForInternalReasons() virtual QString trReimplementedForInternalReasons()
// this text is generated when the \reimp command is used.
{ return "Reimplemented for internal reasons; the API is not affected."; } { return "Reimplemented for internal reasons; the API is not affected."; }
virtual QString trWarning() virtual QString trWarning()
// this text is generated when the \warning command is used.
{ return "Warning"; } { return "Warning"; }
virtual QString trBugsAndLimitations() virtual QString trBugsAndLimitations()
// this text is generated when the \bug command is used.
{ return "Bugs and limitations"; } { return "Bugs and limitations"; }
virtual QString trVersion() virtual QString trVersion()
// this text is generated when the \version command is used.
{ return "Version"; } { return "Version"; }
virtual QString trDate() virtual QString trDate()
// this text is generated when the \date command is used.
{ return "Date"; } { return "Date"; }
virtual QString trAuthors() virtual QString trAuthors()
// this text is generated when the \author command is used.
{ return "Author(s)"; } { return "Author(s)"; }
virtual QString trReturns() virtual QString trReturns()
// this text is generated when the \return command is used.
{ return "Returns"; } { return "Returns"; }
virtual QString trSeeAlso() virtual QString trSeeAlso()
// this text is generated when the \sa command is used.
{ return "See also"; } { return "See also"; }
virtual QString trParameters() virtual QString trParameters()
// this text is generated when the \param command is used.
{ return "Parameters"; } { return "Parameters"; }
virtual QString trExceptions() virtual QString trExceptions()
// this text is generated when the \exception command is used.
{ return "Exceptions"; } { return "Exceptions"; }
virtual QString trGeneratedBy() virtual QString trGeneratedBy()
// this text is used in the title page of a LaTeX document.
{ return "Generated by"; } { return "Generated by"; }
// new since 0.49-990307 // new since 0.49-990307
virtual QString trNamespaces()
{ return "Namespaces"; }
virtual QString trNamespaceList() virtual QString trNamespaceList()
// used as the title of page containing all the index of all namespaces.
{ return "Namespace List"; } { return "Namespace List"; }
virtual QString trNamespaceListDescription(bool extractAll) virtual QString trNamespaceListDescription(bool extractAll)
// used as an introduction to the namespace list
{ {
QString result="Here is a list of all "; QString result="Here is a list of all ";
if (!extractAll) result+="documented "; if (!extractAll) result+="documented ";
...@@ -269,12 +409,147 @@ class Translator ...@@ -269,12 +409,147 @@ class Translator
return result; return result;
} }
virtual QString trFriends() virtual QString trFriends()
// used in the class documentation as a header before the list of all
// friends of a class
{ return "Friends"; } { return "Friends"; }
// new since 0.49-990405 //////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
virtual QString trRelatedFunctionDocumentation() virtual QString trRelatedFunctionDocumentation()
// used in the class documentation as a header before the list of all
// related classes
{ return "Friends And Related Function Documentation"; } { return "Friends And Related Function Documentation"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
virtual QString trCompoundReference(const char *clName,
ClassDef::CompoundType compType)
// used as the title of the HTML page of a class/struct/union
{
QString result=(QString)clName+" ";
switch(compType)
{
case ClassDef::Class: result+=" Class"; break;
case ClassDef::Struct: result+=" Struct"; break;
case ClassDef::Union: result+=" Union"; break;
}
result+=" Reference";
return result;
}
virtual QString trFileReference(const char *fileName)
// used as the title of the HTML page of a file
{
QString result=fileName;
result+=" File Reference";
return result;
}
virtual QString trNamespaceReference(const char *namespaceName)
// used as the title of the HTML page of a namespace
{
QString result=namespaceName;
result+=" Namespace Reference";
return result;
}
// these are for the member sections of a class, struct or union
virtual QString trPublicMembers()
{ return "Public Members"; }
virtual QString trPublicSlots()
{ return "Public Slots"; }
virtual QString trSignals()
{ return "Signals"; }
virtual QString trStaticPublicMembers()
{ return "Static Public Members"; }
virtual QString trProtectedMembers()
{ return "Protected Members"; }
virtual QString trProtectedSlots()
{ return "Protected Slots"; }
virtual QString trStaticProtectedMembers()
{ return "Static Protected Members"; }
virtual QString trPrivateMembers()
{ return "Private Members"; }
virtual QString trPrivateSlots()
{ return "Private Slots"; }
virtual QString trStaticPrivateMembers()
{ return "Static Private Members"; }
// end of member sections
virtual QString trWriteList(int numEntries)
{
// this function is used to produce a comma-separated list of items.
// use generateMarker(i) to indicate where item i should be put.
QString result;
int i;
// the inherits list contain `numEntries' classes
for (i=0;i<numEntries;i++)
{
// use generateMarker to generate placeholders for the class links!
result+=generateMarker(i); // generate marker for entry i in the list
// (order is left to right)
if (i!=numEntries-1) // not the last entry, so we need a separator
{
if (i<numEntries-2) // not the fore last entry
result+=", ";
else // the fore last entry
result+=", and ";
}
}
return result;
}
virtual QString trInheritsList(int numEntries)
// used in class documentation to produce a list of base classes,
// if class diagrams are disabled.
{
return "Inherits "+trWriteList(numEntries)+".";
}
virtual QString trInheritedByList(int numEntries)
// used in class documentation to produce a list of super classes,
// if class diagrams are disabled.
{
return "Inherited by "+trWriteList(numEntries)+".";
}
virtual QString trReimplementedFromList(int numEntries)
// used in member documentation blocks to produce a list of
// members that are hidden by this one.
{
return "Reimplemented from "+trWriteList(numEntries)+".";
}
virtual QString trReimplementedInList(int numEntries)
{
// used in member documentation blocks to produce a list of
// all member that overwrite the implementation of this member.
return "Reimplemented in "+trWriteList(numEntries)+".";
}
virtual QString trNamespaceMembers()
// This is put above each page as a link to all members of namespaces.
{ return "Namespace Members"; }
virtual QString trNamespaceMemberDescription(bool extractAll)
// This is an introduction to the page with all namespace members
{
QString result="Here is a list of all ";
if (!extractAll) result+="documented ";
result+="namespace members with links to ";
if (extractAll)
result+="the namespace documentation for each member:";
else
result+="the namespaces they belong to:";
return result;
}
virtual QString trNamespaceIndex()
// This is used in LaTeX as the title of the chapter with the
// index of all namespaces.
{ return "Namespace Index"; }
virtual QString trNamespaceDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all namespaces.
{ return "Namespace Documentation"; }
}; };
#endif #endif
...@@ -255,7 +255,7 @@ class TranslatorFrench : public Translator ...@@ -255,7 +255,7 @@ class TranslatorFrench : public Translator
virtual QString trNamespaces() virtual QString trNamespaces()
{ return "Namespaces"; } { return "Namespaces"; }
virtual QString trNamespaceList() virtual QString trNamespaceList()
{ return "List des Namespaces"; } { return "Liste des Namespaces"; }
virtual QString trNamespaceListDescription(bool extractAll) virtual QString trNamespaceListDescription(bool extractAll)
{ {
QString result="Liste de tous les namespaces "; QString result="Liste de tous les namespaces ";
...@@ -265,6 +265,11 @@ class TranslatorFrench : public Translator ...@@ -265,6 +265,11 @@ class TranslatorFrench : public Translator
} }
virtual QString trFriends() virtual QString trFriends()
{ return "Friends"; } { return "Friends"; }
// new since 0.49-990405
virtual QString trRelatedFunctionDocumentation()
{ return "Documentation des fonctions amies et associées"; }
}; };
#endif #endif
...@@ -24,12 +24,6 @@ class TranslatorDutch : public Translator ...@@ -24,12 +24,6 @@ class TranslatorDutch : public Translator
public: public:
QString latexBabelPackage() QString latexBabelPackage()
{ return "dutch"; } { return "dutch"; }
QString trInherits()
{ return "Erft over van"; }
QString trAnd()
{ return "en"; }
QString trInheritedBy()
{ return "Wordt overge&euml;rfd door"; }
QString trRelatedFunctions() QString trRelatedFunctions()
{ return "Gerelateerde functies"; } { return "Gerelateerde functies"; }
QString trRelatedSubscript() QString trRelatedSubscript()
...@@ -55,8 +49,6 @@ class TranslatorDutch : public Translator ...@@ -55,8 +49,6 @@ class TranslatorDutch : public Translator
} }
QString trMore() QString trMore()
{ return "Meer..."; } { return "Meer..."; }
QString trReference()
{ return "Referentie"; }
QString trListOfAllMembers() QString trListOfAllMembers()
{ return "Lijst van alle members."; } { return "Lijst van alle members."; }
QString trMemberList() QString trMemberList()
...@@ -64,7 +56,7 @@ class TranslatorDutch : public Translator ...@@ -64,7 +56,7 @@ class TranslatorDutch : public Translator
QString trThisIsTheListOfAllMembers() QString trThisIsTheListOfAllMembers()
{ return "Dit is de complete lijst van alle members voor"; } { return "Dit is de complete lijst van alle members voor"; }
QString trIncludingInheritedMembers() QString trIncludingInheritedMembers()
{ return "inclusief alle overge&euml;rfde members."; } { return ", inclusief alle overge&euml;rfde members."; }
QString trGeneratedAutomatically(const char *s) QString trGeneratedAutomatically(const char *s)
{ QString result="Automatisch gegenereerd door Doxygen"; { QString result="Automatisch gegenereerd door Doxygen";
if (s) result+=(QString)" voor "+s; if (s) result+=(QString)" voor "+s;
...@@ -77,8 +69,6 @@ class TranslatorDutch : public Translator ...@@ -77,8 +69,6 @@ class TranslatorDutch : public Translator
{ return "enum waarde"; } { return "enum waarde"; }
QString trDefinedIn() QString trDefinedIn()
{ return "gedefinieerd in"; } { return "gedefinieerd in"; }
QString trIncludeFile()
{ return "Include File"; }
QString trVerbatimText(const char *f) QString trVerbatimText(const char *f)
{ return (QString)"Dit is de letterlijke tekst van de include file "+f+"."; } { return (QString)"Dit is de letterlijke tekst van de include file "+f+"."; }
QString trModules() QString trModules()
...@@ -182,10 +172,6 @@ class TranslatorDutch : public Translator ...@@ -182,10 +172,6 @@ class TranslatorDutch : public Translator
{ return "Variabelen"; } { return "Variabelen"; }
QString trEnumerationValues() QString trEnumerationValues()
{ return "Enumeratie waarden"; } { return "Enumeratie waarden"; }
QString trReimplementedFrom()
{ return "Nieuwe implementatie van"; }
QString trReimplementedIn()
{ return "Opnieuw ge&iuml;mplementeerd in"; }
QString trAuthor() QString trAuthor()
{ return "auteur"; } { return "auteur"; }
QString trDefineDocumentation() QString trDefineDocumentation()
...@@ -246,10 +232,10 @@ class TranslatorDutch : public Translator ...@@ -246,10 +232,10 @@ class TranslatorDutch : public Translator
QString trGeneratedBy() QString trGeneratedBy()
{ return "Gegenereerd door"; } { return "Gegenereerd door"; }
// new since 0.49-990307 //////////////////////////////////////////////////////////////////////////
// new since 0.49-990307
//////////////////////////////////////////////////////////////////////////
QString trNamespaces()
{ return "Namespaces"; }
QString trNamespaceList() QString trNamespaceList()
{ return "Namespace Lijst"; } { return "Namespace Lijst"; }
QString trNamespaceListDescription(bool extractAll) QString trNamespaceListDescription(bool extractAll)
...@@ -261,6 +247,142 @@ class TranslatorDutch : public Translator ...@@ -261,6 +247,142 @@ class TranslatorDutch : public Translator
} }
QString trFriends() QString trFriends()
{ return "Friends"; } { return "Friends"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
QString trRelatedFunctionDocumentation()
{ return "Documentatie van friends en gerelateerde functies"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
virtual QString trCompoundReference(const char *clName,
ClassDef::CompoundType compType)
// used as the title of the HTML page of a class/struct/union
{
QString result=(QString)clName+" ";
switch(compType)
{
case ClassDef::Class: result+=" Class"; break;
case ClassDef::Struct: result+=" Struct"; break;
case ClassDef::Union: result+=" Union"; break;
}
result+=" Referentie";
return result;
}
virtual QString trFileReference(const char *fileName)
// used as the title of the HTML page of a file
{
QString result=fileName;
result+=" File Referentie";
return result;
}
virtual QString trNamespaceReference(const char *namespaceName)
// used as the title of the HTML page of a namespace
{
QString result=namespaceName;
result+=" Namespace Referentie";
return result;
}
// these are for the member sections of a class, struct or union
virtual QString trPublicMembers()
{ return "Public Members"; }
virtual QString trPublicSlots()
{ return "Public Slots"; }
virtual QString trSignals()
{ return "Signals"; }
virtual QString trStaticPublicMembers()
{ return "Static Public Members"; }
virtual QString trProtectedMembers()
{ return "Protected Members"; }
virtual QString trProtectedSlots()
{ return "Protected Slots"; }
virtual QString trStaticProtectedMembers()
{ return "Static Protected Members"; }
virtual QString trPrivateMembers()
{ return "Private Members"; }
virtual QString trPrivateSlots()
{ return "Private Slots"; }
virtual QString trStaticPrivateMembers()
{ return "Static Private Members"; }
// end of member sections
virtual QString trWriteList(int numEntries)
{
// this function is used to produce a comma-separated list of items.
// use generateMarker(i) to indicate where item i should be put.
QString result;
int i;
// the inherits list contain `numEntries' classes
for (i=0;i<numEntries;i++)
{
// use generateMarker to generate placeholders for the class links!
result+=generateMarker(i); // generate marker for entry i in the list
// (order is left to right)
if (i!=numEntries-1) // not the last entry, so we need a separator
{
if (i<numEntries-2) // not the fore last entry
result+=", ";
else // the fore last entry
result+=" en ";
}
}
return result;
}
virtual QString trInheritsList(int numEntries)
// used in class documentation to produce a list of base classes,
// if class diagrams are disabled.
{
return "Erft over van "+trWriteList(numEntries)+".";
}
virtual QString trInheritedByList(int numEntries)
// used in class documentation to produce a list of super classes,
// if class diagrams are disabled.
{
return "Wordt overge&euml;rfd door "+trWriteList(numEntries)+".";
}
virtual QString trReimplementedFromList(int numEntries)
// used in member documentation blocks to produce a list of
// members that are hidden by this one.
{
return "Nieuwe implementatie van "+trWriteList(numEntries)+".";
}
virtual QString trReimplementedInList(int numEntries)
{
// used in member documentation blocks to produce a list of
// all member that overwrite the implementation of this member.
return "Opnieuw ge&iuml;mplementeerd in "+trWriteList(numEntries)+".";
}
virtual QString trNamespaceMembers()
// This is put above each page as a link to all members of namespaces.
{ return "Namespace Members"; }
virtual QString trNamespaceMemberDescription(bool extractAll)
// This is an introduction to the page with all namespace members
{
QString result="Hier is een lijst van alle ";
if (!extractAll) result+="gedocumenteerde ";
result+="namespace members met links naar ";
if (extractAll)
result+="de namespace documentatie voor iedere member:";
else
result+="de namespaces waartoe ze behoren:";
return result;
}
virtual QString trNamespaceIndex()
// This is used in LaTeX as the title of the chapter with the
// index of all namespaces.
{ return "Namespace Index"; }
virtual QString trNamespaceDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all namespaces.
{ return "Namespace Documentatie"; }
}; };
#endif #endif
...@@ -14,6 +14,14 @@ ...@@ -14,6 +14,14 @@
* *
*/ */
/*-------------------------------------------------------------------------
Svensk versttning av:
Samuel Hgglund <sahag96@ite.mh.se>
Xet Erixon <xet@xeqt.com>
Skicka grna synpunkter.
--------------------------------------------------------------------------*/
#ifndef TRANSLATOR_SE_H #ifndef TRANSLATOR_SE_H
#define TRANSLATOR_SE_H #define TRANSLATOR_SE_H
...@@ -35,34 +43,32 @@ class TranslatorSwedish : public Translator ...@@ -35,34 +43,32 @@ class TranslatorSwedish : public Translator
QString trRelatedSubscript() QString trRelatedSubscript()
{ return "(Observera att dessa inte r medlemsfunktioner)"; } { return "(Observera att dessa inte r medlemsfunktioner)"; }
QString trDetailedDescription() QString trDetailedDescription()
{ return "Utkad beskrivning"; } { return "Detaljerad beskrivning"; }
QString trMemberTypedefDocumentation() QString trMemberTypedefDocumentation()
{ return "Har inte en aning..."; } { return "Dokumentation ver typdefinierade medlemmar"; }
QString trMemberEnumerationDocumentation() QString trMemberEnumerationDocumentation()
{ return "Upprknad dokumentation???"; } { return "Dokumentation ver egenupprknande medlemmar"; }
QString trEnumerationValueDocumentation()
{ return "Documentatie van enumeratie waarden"; }
QString trMemberFunctionDocumentation() QString trMemberFunctionDocumentation()
{ return "Dokumentation av medlemsfunktioner"; } { return "Dokumentation ver medlemsfunktioner"; }
QString trMemberDataDocumentation() QString trMemberDataDocumentation()
{ return "Dokumentation av datamedlemmar"; } { return "Dokumentation ver datamedlemmar"; }
QString trGeneratedFrom(const char *s,bool single) QString trGeneratedFrom(const char *s,bool single)
{ {
QString result=(QString)"Dokumentationen fr detta"+s+ QString result=(QString)"Dokumentationen fr denna"+s+
" r skapad ur fljande fil"; " r skapad utifrn fljande fil";
if (single) result+=":"; else result+="s:"; if (single) result+=":"; else result+="er:";
return result; return result;
} }
QString trMore() QString trMore()
{ return "Fler..."; } { return "Mer..."; }
QString trReference() QString trReference()
{ return "Hnvisning?"; } { return "Referens"; }
QString trListOfAllMembers() QString trListOfAllMembers()
{ return "Lista ver alla medlemmar."; } { return "Lista ver alla medlemmar."; }
QString trMemberList() QString trMemberList()
{ return "Medlemslista"; } { return "Medlemslista"; }
QString trThisIsTheListOfAllMembers() QString trThisIsTheListOfAllMembers()
{ return "Det hr r en fullstndig lista av medlemmar fr?"; } { return "Det hr r en fullstndig lista ver medlemmar fr"; }
QString trIncludingInheritedMembers() QString trIncludingInheritedMembers()
{ return "med alla rvda medlemmar."; } { return "med alla rvda medlemmar."; }
QString trGeneratedAutomatically(const char *s) QString trGeneratedAutomatically(const char *s)
...@@ -72,29 +78,29 @@ class TranslatorSwedish : public Translator ...@@ -72,29 +78,29 @@ class TranslatorSwedish : public Translator
return result; return result;
} }
QString trEnumName() QString trEnumName()
{ return "enum namn?"; } { return "enum namn"; }
QString trEnumValue() QString trEnumValue()
{ return "enum vrde?"; } { return "enum vrde"; }
QString trDefinedIn() QString trDefinedIn()
{ return "deklarerad i"; } { return "deklarerad i"; }
QString trIncludeFile() QString trIncludeFile()
{ return "Include Fil"; } { return "Inkluderingsfil"; }
QString trVerbatimText(const char *f) QString trVerbatimText(const char *f)
{ return (QString)"Detta r den ordagranna texten av "+f+" include fil."; } { return (QString)"Detta r den ordagranna texten frn inkluderingsfilen"+f; }
QString trModules() QString trModules()
{ return "Moduler?"; } { return "Moduler"; }
QString trClassHierarchy() QString trClassHierarchy()
{ return "Klasshierarki?"; } { return "Klasshierarki"; }
QString trCompoundList() QString trCompoundList()
{ return "Inhgnad lista???"; } { return "Sammansatt klasslista"; }
QString trFileList() QString trFileList()
{ return "Fillista"; } { return "Fillista"; }
QString trHeaderFiles() QString trHeaderFiles()
{ return "Headerfiler"; } { return "Headerfiler"; }
QString trCompoundMembers() QString trCompoundMembers()
{ return "Inhgnade medlemmar??"; } { return "Sammansatta klassmedlemmar"; }
QString trFileMembers() QString trFileMembers()
{ return "Filmedlemmar???"; } { return "Filmedlemmar"; }
QString trRelatedPages() QString trRelatedPages()
{ return "Beslktade sidor"; } { return "Beslktade sidor"; }
QString trExamples() QString trExamples()
...@@ -102,8 +108,8 @@ class TranslatorSwedish : public Translator ...@@ -102,8 +108,8 @@ class TranslatorSwedish : public Translator
QString trSearch() QString trSearch()
{ return "Sk"; } { return "Sk"; }
QString trClassHierarchyDescription() QString trClassHierarchyDescription()
{ return "Denna lista ver arv r grovsorterad, men inte helt " { return "Denna lista ver arv r grovt, men inte helt, "
"i alfabetisk ordning:"; "sorterad i alfabetisk ordning:";
} }
QString trFileListDescription(bool extractAll) QString trFileListDescription(bool extractAll)
{ {
...@@ -113,8 +119,8 @@ class TranslatorSwedish : public Translator ...@@ -113,8 +119,8 @@ class TranslatorSwedish : public Translator
return result; return result;
} }
QString trCompoundListDescription() QString trCompoundListDescription()
{ return "Hr fljer klasserna, structs och " { return "Hr fljer klasserna, structerna och "
"unions? med en kort beskrivning:"; "unionerna med en kort beskrivning:";
} }
QString trCompoundMembersDescription(bool extractAll) QString trCompoundMembersDescription(bool extractAll)
{ {
...@@ -129,18 +135,18 @@ class TranslatorSwedish : public Translator ...@@ -129,18 +135,18 @@ class TranslatorSwedish : public Translator
{ {
QString result="Hr fljer en lista ver alla "; QString result="Hr fljer en lista ver alla ";
if (!extractAll) result+="dokumenterade "; if (!extractAll) result+="dokumenterade ";
result+="filmedlemmar? med lnkar till "; result+="filmedlemmar med lnkar till ";
if (extractAll) result+="dokumentationsfilen fr varje medlem:"; if (extractAll) result+="dokumentationsfilen fr varje medlem:";
else result+="filerna som de tillhr:"; else result+="filerna som de tillhr:";
return result; return result;
} }
QString trHeaderFilesDescription() QString trHeaderFilesDescription()
{ return "Hr fljer headerfilerna som API:n bestr av???:"; } { return "Hr fljer headerfilerna som API:n bestr av:"; }
QString trExamplesDescription() QString trExamplesDescription()
{ return "Hr fljer en lista med alla exempel:"; } { return "Hr fljer en lista med alla exempel:"; }
QString trRelatedPagesDescription() QString trRelatedPagesDescription()
{ return "Hr fljer en lista med alla relevanta? dokumentationssidor:"; } { return "Hr fljer en lista ver alla relaterade dokumentationssidor:";
QString trModulesDescription() } QString trModulesDescription()
{ return "Hr fljer en lista ver alla moduler:"; } { return "Hr fljer en lista ver alla moduler:"; }
QString trNoDescriptionAvailable() QString trNoDescriptionAvailable()
{ return "Beskrivning saknas"; } { return "Beskrivning saknas"; }
...@@ -148,11 +154,11 @@ class TranslatorSwedish : public Translator ...@@ -148,11 +154,11 @@ class TranslatorSwedish : public Translator
QString trDocumentation() QString trDocumentation()
{ return "Dokumentation"; } { return "Dokumentation"; }
QString trModuleIndex() QString trModuleIndex()
{ return "Module Index"; } { return "Modul Index"; }
QString trHierarchicalIndex() QString trHierarchicalIndex()
{ return "Hierarkiskt Index"; } { return "Hierarkiskt Index"; }
QString trCompoundIndex() QString trCompoundIndex()
{ return "Compound Index"; } { return "Sammansatt Index"; }
QString trFileIndex() QString trFileIndex()
{ return "Fil Index"; } { return "Fil Index"; }
QString trModuleDocumentation() QString trModuleDocumentation()
...@@ -169,39 +175,41 @@ class TranslatorSwedish : public Translator ...@@ -169,39 +175,41 @@ class TranslatorSwedish : public Translator
{ return "Uppslagsbok"; } { return "Uppslagsbok"; }
QString trDefines() QString trDefines()
{ return "Definerar"; } { return "Definitioner"; }
QString trFuncProtos() QString trFuncProtos()
{ return "Funktionsprototyper"; } { return "Funktionsprototyper"; }
QString trTypedefs() QString trTypedefs()
{ return "Typedefs"; } { return "Typdefinitioner"; }
QString trEnumerations() QString trEnumerations()
{ return "Upprkning???"; } { return "Egenupprknande typer"; }
QString trFunctions() QString trFunctions()
{ return "Funktioner"; } { return "Funktioner"; }
QString trVariables() QString trVariables()
{ return "Variabler"; } { return "Variabler"; }
QString trEnumerationValues() QString trEnumerationValues()
{ return "Enum vrden??"; } { return "Egenupprknade vrden"; }
QString trReimplementedFrom() QString trReimplementedFrom()
{ return "teranvnd frn???"; } { return "teranvnd frn"; }
QString trReimplementedIn() QString trReimplementedIn()
{ return "teranvnd i??"; } { return "teranvnd i"; }
QString trAuthor() QString trAuthor()
{ return "Frfattare"; } { return "Frfattare"; }
QString trDefineDocumentation() QString trDefineDocumentation()
{ return "Definiera dokumentation"; } { return "Dokumentation ver definitioner"; }
QString trFunctionPrototypeDocumentation() QString trFunctionPrototypeDocumentation()
{ return "Dokumentation ver funktionsprototyper"; } { return "Dokumentation ver funktionsprototyper"; }
QString trTypedefDocumentation() QString trTypedefDocumentation()
{ return "Dokumentation ver typedefs"; } { return "Dokumentation ver typdefinitioner"; }
QString trEnumerationTypeDocumentation() QString trEnumerationTypeDocumentation()
{ return "Dokumentation ver enum typer"; } { return "Dokumentation ver egenupprknande typer (enum)"; }
QString trEnumerationValueDocumentation()
{ return "Dokumentation ver egenupprknande typers vrden"; }
QString trFunctionDocumentation() QString trFunctionDocumentation()
{ return "Dokumentation ver funktioner"; } { return "Dokumentation ver funktioner"; }
QString trVariableDocumentation() QString trVariableDocumentation()
{ return "Dokumentation ver variabler"; } { return "Dokumentation ver variabler"; }
QString trCompounds() QString trCompounds()
{ return "Compounds??"; } { return "Sammansttning"; }
QString trFiles() QString trFiles()
{ return "Filer"; } { return "Filer"; }
QString trGeneratedAt(const char *date,const char *projName) QString trGeneratedAt(const char *date,const char *projName)
...@@ -217,12 +225,12 @@ class TranslatorSwedish : public Translator ...@@ -217,12 +225,12 @@ class TranslatorSwedish : public Translator
} }
QString trClassDiagram(const char *clName) QString trClassDiagram(const char *clName)
{ {
return (QString)"Klass diagram fr "+clName; return (QString)"Klass-diagram fr "+clName;
} }
QString trForInternalUseOnly() QString trForInternalUseOnly()
{ return "Endast fr internt bruk."; } { return "Endast fr internt bruk."; }
QString trReimplementedForInternalReasons() QString trReimplementedForInternalReasons()
{ return "Omskriven av interna orsaker???; " { return "Omskriven av intern anledning ; "
"API:n pverkas inte."; "API:n pverkas inte.";
} }
QString trWarning() QString trWarning()
......
...@@ -37,6 +37,12 @@ bool isId(char c) ...@@ -37,6 +37,12 @@ bool isId(char c)
return c=='_' || isalnum(c); return c=='_' || isalnum(c);
} }
QString generateMarker(int id)
{
QString result;
result.sprintf("@%d\n",id);
return result;
}
// try to determine if this files is a source or a header file by looking // try to determine if this files is a source or a header file by looking
// at the extension (5 variations are allowed in both upper and lower case) // at the extension (5 variations are allowed in both upper and lower case)
...@@ -197,6 +203,7 @@ static void linkifyText(OutputList &ol,const char *clName,const char *name,const ...@@ -197,6 +203,7 @@ static void linkifyText(OutputList &ol,const char *clName,const char *name,const
ClassDef *cd=0; ClassDef *cd=0;
FileDef *fd=0; FileDef *fd=0;
MemberDef *md=0; MemberDef *md=0;
NamespaceDef *nd=0;
// check if `word' is a documented class name // check if `word' is a documented class name
if (word.length()>0 && word!=name && word!=clName) if (word.length()>0 && word!=name && word!=clName)
...@@ -206,24 +213,29 @@ static void linkifyText(OutputList &ol,const char *clName,const char *name,const ...@@ -206,24 +213,29 @@ static void linkifyText(OutputList &ol,const char *clName,const char *name,const
// add link to the result // add link to the result
if (cd->isVisible()) if (cd->isVisible())
{ {
result.writeObjectLink(cd->getReference(),cd->classFile(),0,word); result.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,word);
} }
else else
{ {
result.docify(word); result.docify(word);
} }
} }
else if (getDefs(word,clName,0,md,cd,fd) && md->hasDocumentation()) else if (getDefs(word,clName,0,md,cd,fd,nd) && md->hasDocumentation())
{ {
if (cd && cd->isVisible() && !md->isFunction()) // word is a member of cd if (cd && cd->isVisible() && !md->isFunction()) // word is a member of cd
{ {
result.writeObjectLink(cd->getReference(), result.writeObjectLink(cd->getReference(),
cd->classFile(),md->anchor(),word); cd->getOutputFileBase(),md->anchor(),word);
}
else if (nd && nd->hasDocumentation())
{
result.writeObjectLink(nd->getReference(),
nd->getOutputFileBase(),md->anchor(),word);
} }
else if (fd && fd->hasDocumentation()) // word is a global in file fd else if (fd && fd->hasDocumentation()) // word is a global in file fd
{ {
result.writeObjectLink(fd->getReference(), result.writeObjectLink(fd->getReference(),
fd->diskName(),md->anchor(),word); fd->getOutputFileBase(),md->anchor(),word);
} }
else // add word to the result else // add word to the result
{ {
...@@ -313,6 +325,28 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -313,6 +325,28 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
} }
} }
void writeExample(OutputList &ol,ExampleList *el)
{
QString exampleLine=theTranslator->trWriteList(el->count());
QRegExp marker("@[0-9]+");
int index=0,newIndex,matchLen;
// now replace all markers in inheritLine with links to the classes
while ((newIndex=marker.match(exampleLine,index,&matchLen))!=-1)
{
bool ok;
parseText(ol,exampleLine.mid(index,newIndex-index));
uint entryIndex = exampleLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
Example *e=el->at(entryIndex);
if (ok && e) ol.writeObjectLink(0,e->file,e->anchor,e->name);
index=newIndex+matchLen;
}
parseText(ol,exampleLine.right(exampleLine.length()-index));
ol.writeString(".");
}
QString argListToString(ArgumentList *al) QString argListToString(ArgumentList *al)
{ {
QString result; QString result;
...@@ -335,11 +369,14 @@ static void writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd, ...@@ -335,11 +369,14 @@ static void writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd,
FileDef *fd,MemberDef *md,const char *name) FileDef *fd,MemberDef *md,const char *name)
{ {
if (nd) if (nd)
ol.writeObjectLink(0 /*TODO: references */,nd->namespaceFile(),md->anchor(),name); ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),
md->anchor(),name);
else if (fd) else if (fd)
ol.writeObjectLink(fd->getReference(),fd->diskName(),md->anchor(),name); ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),
md->anchor(),name);
else else
ol.writeObjectLink(cd->getReference(),cd->classFile(),md->anchor(),name); ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),
md->anchor(),name);
} }
static void warnForUndocumentedMember(MemberDef *md) static void warnForUndocumentedMember(MemberDef *md)
...@@ -388,77 +425,84 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext) ...@@ -388,77 +425,84 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"modules.html"); ol.startQuickIndexItem(extLink,absPath+"modules.html");
parseDoc(ol,0,0,theTranslator->trModules()); parseText(ol,theTranslator->trModules());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedNamespaces>0) if (documentedNamespaces>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"namespaces.html"); ol.startQuickIndexItem(extLink,absPath+"namespaces.html");
parseDoc(ol,0,0,theTranslator->trNamespaces()); parseText(ol,theTranslator->trNamespaceList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (hierarchyClasses>0) if (hierarchyClasses>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"hierarchy.html"); ol.startQuickIndexItem(extLink,absPath+"hierarchy.html");
parseDoc(ol,0,0,theTranslator->trClassHierarchy()); parseText(ol,theTranslator->trClassHierarchy());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (annotatedClasses>0) if (annotatedClasses>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"annotated.html"); ol.startQuickIndexItem(extLink,absPath+"annotated.html");
parseDoc(ol,0,0,theTranslator->trCompoundList()); parseText(ol,theTranslator->trCompoundList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedFiles>0) if (documentedFiles>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"files.html"); ol.startQuickIndexItem(extLink,absPath+"files.html");
parseDoc(ol,0,0,theTranslator->trFileList()); parseText(ol,theTranslator->trFileList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (includeFiles.count()>0 && verbatimHeaderFlag) if (includeFiles.count()>0 && verbatimHeaderFlag)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"headers.html"); ol.startQuickIndexItem(extLink,absPath+"headers.html");
parseDoc(ol,0,0,theTranslator->trHeaderFiles()); parseText(ol,theTranslator->trHeaderFiles());
ol.endQuickIndexItem();
}
if (documentedNamespaceMembers>0)
{
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"namespacemembers.html");
parseText(ol,theTranslator->trNamespaceMembers());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedMembers>0) if (documentedMembers>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"functions.html"); ol.startQuickIndexItem(extLink,absPath+"functions.html");
parseDoc(ol,0,0,theTranslator->trCompoundMembers()); parseText(ol,theTranslator->trCompoundMembers());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedFunctions>0) if (documentedFunctions>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"globals.html"); ol.startQuickIndexItem(extLink,absPath+"globals.html");
parseDoc(ol,0,0,theTranslator->trFileMembers()); parseText(ol,theTranslator->trFileMembers());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (pageList.count()>0) if (pageList.count()>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"pages.html"); ol.startQuickIndexItem(extLink,absPath+"pages.html");
parseDoc(ol,0,0,theTranslator->trRelatedPages()); parseText(ol,theTranslator->trRelatedPages());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (exampleList.count()>0) if (exampleList.count()>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"examples.html"); ol.startQuickIndexItem(extLink,absPath+"examples.html");
parseDoc(ol,0,0,theTranslator->trExamples()); parseText(ol,theTranslator->trExamples());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (searchEngineFlag) if (searchEngineFlag)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem("_cgi:",""); ol.startQuickIndexItem("_cgi:","");
parseDoc(ol,0,0,theTranslator->trSearch()); parseText(ol,theTranslator->trSearch());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (compact) if (compact)
...@@ -489,7 +533,7 @@ void endFile(OutputList &ol,bool external) ...@@ -489,7 +533,7 @@ void endFile(OutputList &ol,bool external)
ol.writeFooter(0,external); // write the footer ol.writeFooter(0,external); // write the footer
if (footerFile.length()==0) if (footerFile.length()==0)
{ {
parseDoc(ol,0,0,theTranslator->trGeneratedAt( parseText(ol,theTranslator->trGeneratedAt(
dateToString(TRUE), dateToString(TRUE),
projectName projectName
)); ));
...@@ -497,7 +541,7 @@ void endFile(OutputList &ol,bool external) ...@@ -497,7 +541,7 @@ void endFile(OutputList &ol,bool external)
ol.writeFooter(1,external); // write the link to the picture ol.writeFooter(1,external); // write the link to the picture
if (footerFile.length()==0) if (footerFile.length()==0)
{ {
parseDoc(ol,0,0,theTranslator->trWrittenBy()); parseText(ol,theTranslator->trWrittenBy());
} }
ol.writeFooter(2,external); // end the footer ol.writeFooter(2,external); // end the footer
if (latexEnabled) ol.enable(OutputGenerator::Latex); if (latexEnabled) ol.enable(OutputGenerator::Latex);
...@@ -539,14 +583,24 @@ static void writeMemberDef(OutputList &ol, ClassDef *cd, NamespaceDef *nd, ...@@ -539,14 +583,24 @@ static void writeMemberDef(OutputList &ol, ClassDef *cd, NamespaceDef *nd,
else if (fd) cname=fd->name(); else if (fd) cname=fd->name();
// If there is no detailed description we need to write the anchor here. // If there is no detailed description we need to write the anchor here.
if (!md->detailsAreVisible() && !extractAllFlag) bool detailsVisible = md->detailsAreVisible();
if (!detailsVisible && !extractAllFlag)
{ {
ol.writeDoxyAnchor(cname,md->anchor(),md->name()); QString doxyName=md->name().copy();
if (!cname.isEmpty()) doxyName.prepend(cname+"::");
ol.writeDoxyAnchor(cname,md->anchor(),doxyName);
ol.addToIndex(md->name(),cname); ol.addToIndex(md->name(),cname);
ol.addToIndex(cname,md->name()); ol.addToIndex(cname,md->name());
ol.docify("\n"); ol.docify("\n");
} }
else if (!detailsVisible) // when extractAll it true we have to write
// a index reference and label in LaTeX because
// detailed section not shown in LaTeX
{
ol.addToIndex(md->name(),cname);
ol.addToIndex(cname,md->name());
ol.writeLatexLabel(cname,md->anchor());
}
ol.startMemberItem(); ol.startMemberItem();
// write type // write type
...@@ -564,6 +618,8 @@ static void writeMemberDef(OutputList &ol, ClassDef *cd, NamespaceDef *nd, ...@@ -564,6 +618,8 @@ static void writeMemberDef(OutputList &ol, ClassDef *cd, NamespaceDef *nd,
QString name=md->name().copy(); QString name=md->name().copy();
if (type.length()>0) ol.writeString(" "); if (type.length()>0) ol.writeString(" ");
ol.insertMemberAlign();
// write name // write name
if ( extractAllFlag || if ( extractAllFlag ||
(md->briefDescription().isEmpty() || !briefMemDescFlag) && (md->briefDescription().isEmpty() || !briefMemDescFlag) &&
...@@ -610,7 +666,7 @@ static void writeMemberDef(OutputList &ol, ClassDef *cd, NamespaceDef *nd, ...@@ -610,7 +666,7 @@ static void writeMemberDef(OutputList &ol, ClassDef *cd, NamespaceDef *nd,
ol.docify(" "); ol.docify(" ");
ol.startTextLink(0,md->anchor()); ol.startTextLink(0,md->anchor());
//ol.writeObjectLink(0,0,md->anchor()," More..."); //ol.writeObjectLink(0,0,md->anchor()," More...");
parseDoc(ol,0,0,theTranslator->trMore()); parseText(ol,theTranslator->trMore());
ol.endTextLink(); ol.endTextLink();
ol.startEmphasis(); ol.startEmphasis();
ol.enableAll(); ol.enableAll();
...@@ -634,11 +690,13 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -634,11 +690,13 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
if (title) if (title)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseDoc(ol,0,0,title); parseText(ol,title);
ol.endMemberHeader(); ol.endMemberHeader();
} }
if (subtitle) ol.writeString(subtitle); if (subtitle)
{
parseText(ol,subtitle);
}
if (!fd && !nd) ol.startMemberList(); if (!fd && !nd) ol.startMemberList();
MemberDef *md; MemberDef *md;
...@@ -646,7 +704,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -646,7 +704,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
if (fd && ml->defineCount()>0) if (fd && ml->defineCount()>0)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseDoc(ol,0,0,theTranslator->trDefines()); parseText(ol,theTranslator->trDefines());
ol.endMemberHeader(); ol.endMemberHeader();
ol.startMemberList(); ol.startMemberList();
MemberListIterator mli(*ml); MemberListIterator mli(*ml);
...@@ -663,7 +721,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -663,7 +721,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
if ((fd || nd) && ml->protoCount()>0) if ((fd || nd) && ml->protoCount()>0)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseDoc(ol,0,0,theTranslator->trFuncProtos()); parseText(ol,theTranslator->trFuncProtos());
ol.startMemberList(); ol.startMemberList();
MemberListIterator mli(*ml); MemberListIterator mli(*ml);
for ( ; (md=mli.current()); ++mli ) for ( ; (md=mli.current()); ++mli )
...@@ -678,7 +736,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -678,7 +736,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
if (fd || nd) if (fd || nd)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseDoc(ol,0,0,theTranslator->trTypedefs()); parseText(ol,theTranslator->trTypedefs());
ol.endMemberHeader(); ol.endMemberHeader();
//ol.writeMemberHeader("Typedefs"); //ol.writeMemberHeader("Typedefs");
ol.startMemberList(); ol.startMemberList();
...@@ -697,36 +755,21 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -697,36 +755,21 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
if (fd || nd) if (fd || nd)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseDoc(ol,0,0,theTranslator->trEnumerations()); parseText(ol,theTranslator->trEnumerations());
ol.endMemberHeader(); ol.endMemberHeader();
ol.startMemberList(); ol.startMemberList();
} }
MemberListIterator mli(*ml); MemberListIterator mli(*ml);
for ( ; (md=mli.current()) ; ++mli ) for ( ; (md=mli.current()) ; ++mli )
{ {
bool hasDocs=md->hasDocumentation(); /*bool hasDocs=md->hasDocumentation();*/
QString type=md->typeString(); QString type=md->typeString();
type=type.stripWhiteSpace(); type=type.stripWhiteSpace();
if (md->isEnumerate() && (hasDocs || !hideMemberFlag)) if (md->isEnumerate() /*&& (hasDocs || !hideMemberFlag)*/)
{
// see if there are any documented enum values
// we need this info to decide if we need to generate a link.
QList<MemberDef> *fmdl=md->enumFieldList();
int documentedEnumValues=0;
if (fmdl)
{ {
MemberDef *fmd=fmdl->first();
while (fmd)
{
if (fmd->hasDocumentation()) documentedEnumValues++;
fmd=fmdl->next();
}
}
if (documentedEnumValues>0) md->setDocumentedEnumValues(TRUE);
if (!hideMemberFlag || // do not hide undocumented members or if (!hideMemberFlag || // do not hide undocumented members or
!md->documentation().isEmpty() || // member has detailed descr. or !md->documentation().isEmpty() || // member has detailed descr. or
documentedEnumValues>0 || // member has documented enum vales. md->hasDocumentedEnumValues() || // member has documented enum vales.
briefMemDescFlag || // brief descr. is shown or briefMemDescFlag || // brief descr. is shown or
repeatBriefFlag // brief descr. is repeated. repeatBriefFlag // brief descr. is repeated.
) )
...@@ -739,7 +782,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -739,7 +782,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
{ {
if (extractAllFlag || if (extractAllFlag ||
(md->briefDescription().isEmpty() || !briefMemDescFlag) && (md->briefDescription().isEmpty() || !briefMemDescFlag) &&
(!md->documentation().isEmpty() || documentedEnumValues>0 || (!md->documentation().isEmpty() || md->hasDocumentedEnumValues() ||
(!md->briefDescription().isEmpty() && (!md->briefDescription().isEmpty() &&
!briefMemDescFlag && !briefMemDescFlag &&
repeatBriefFlag repeatBriefFlag
...@@ -760,6 +803,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -760,6 +803,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
} }
typeDecl.docify("{ "); typeDecl.docify("{ ");
QList<MemberDef> *fmdl=md->enumFieldList();
if (fmdl) if (fmdl)
{ {
MemberDef *fmd=fmdl->first(); MemberDef *fmd=fmdl->first();
...@@ -798,6 +842,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -798,6 +842,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
{ {
ol.startMemberItem(); ol.startMemberItem();
ol.writeString("enum "); ol.writeString("enum ");
ol.insertMemberAlign();
ol+=typeDecl; ol+=typeDecl;
ol.endMemberItem(); ol.endMemberItem();
//QString brief=md->briefDescription(); //QString brief=md->briefDescription();
...@@ -807,14 +852,14 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -807,14 +852,14 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
ol.startMemberDescription(); ol.startMemberDescription();
parseDoc(ol,cd?cd->name().data():0, parseDoc(ol,cd?cd->name().data():0,
md->name().data(),md->briefDescription()); md->name().data(),md->briefDescription());
if (!md->documentation().isEmpty() || documentedEnumValues>0) if (!md->documentation().isEmpty() || md->hasDocumentedEnumValues())
{ {
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.endEmphasis(); ol.endEmphasis();
ol.docify(" "); ol.docify(" ");
ol.startTextLink(0,md->anchor()); ol.startTextLink(0,md->anchor());
//ol.writeObjectLink(0,0,md->anchor()," More..."); //ol.writeObjectLink(0,0,md->anchor()," More...");
parseDoc(ol,0,0,theTranslator->trMore()); parseText(ol,theTranslator->trMore());
ol.endTextLink(); ol.endTextLink();
ol.startEmphasis(); ol.startEmphasis();
ol.enableAll(); ol.enableAll();
...@@ -838,7 +883,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -838,7 +883,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
if (fd || nd) if (fd || nd)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseDoc(ol,0,0,theTranslator->trFunctions()); parseText(ol,theTranslator->trFunctions());
ol.endMemberHeader(); ol.endMemberHeader();
ol.startMemberList(); ol.startMemberList();
} }
...@@ -873,6 +918,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -873,6 +918,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
{ {
ol.startMemberItem(); ol.startMemberItem();
ol.docify("class "); ol.docify("class ");
ol.insertMemberAlign();
ol.writeObjectLink(0,0,md->anchor(),md->name()); ol.writeObjectLink(0,0,md->anchor(),md->name());
ol.endMemberItem(); ol.endMemberItem();
} }
...@@ -880,13 +926,15 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -880,13 +926,15 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
{ {
ol.startMemberItem(); ol.startMemberItem();
ol.docify("class "); ol.docify("class ");
ol.writeObjectLink(cd->getReference(),cd->classFile(),0,cd->name()); ol.insertMemberAlign();
ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->name());
ol.endMemberItem(); ol.endMemberItem();
} }
else if (!hideMemberFlag) // no documentation else if (!hideMemberFlag) // no documentation
{ {
ol.startMemberItem(); ol.startMemberItem();
ol.docify("class "); ol.docify("class ");
ol.insertMemberAlign();
ol.writeBoldString(md->name()); ol.writeBoldString(md->name());
ol.endMemberItem(); ol.endMemberItem();
} }
...@@ -901,7 +949,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd, ...@@ -901,7 +949,7 @@ void writeMemberDecs(OutputList &ol,ClassDef *cd,NamespaceDef *nd, FileDef *fd,
if (fd || nd) if (fd || nd)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseDoc(ol,0,0,theTranslator->trVariables()); parseText(ol,theTranslator->trVariables());
ol.endMemberHeader(); ol.endMemberHeader();
ol.startMemberList(); ol.startMemberList();
} }
...@@ -1109,11 +1157,11 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName, ...@@ -1109,11 +1157,11 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName,
{ {
ol.newParagraph(); ol.newParagraph();
ol.startBold(); ol.startBold();
parseDoc(ol,0,0,theTranslator->trEnumerationValues()); parseText(ol,theTranslator->trEnumerationValues());
//ol.writeBoldString("Enumeration values:"); //ol.writeBoldString("Enumeration values:");
ol.docify(":"); ol.docify(":");
ol.endBold(); ol.endBold();
ol.startMemberList(); ol.startItemList();
} }
ol.writeDoxyAnchor(cname,fmd->anchor(),fmd->name()); ol.writeDoxyAnchor(cname,fmd->anchor(),fmd->name());
ol.addToIndex(fmd->name(),cname); ol.addToIndex(fmd->name(),cname);
...@@ -1141,7 +1189,7 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName, ...@@ -1141,7 +1189,7 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName,
fmd=fmdl->next(); fmd=fmdl->next();
} }
} }
if (!first) { ol.endMemberList(); ol.writeChar('\n'); } if (!first) { ol.endItemList(); ol.writeChar('\n'); }
} }
MemberDef *bmd=md->reimplements(); MemberDef *bmd=md->reimplements();
...@@ -1159,12 +1207,19 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName, ...@@ -1159,12 +1207,19 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName,
// write class that contains a member that is reimplemented by this one // write class that contains a member that is reimplemented by this one
ClassDef *bcd = bmd->memberClass(); ClassDef *bcd = bmd->memberClass();
ol.newParagraph(); ol.newParagraph();
parseDoc(ol,0,0,theTranslator->trReimplementedFrom()); //parseText(ol,theTranslator->trReimplementedFrom());
//ol.writeString("Reimplemented from "); //ol.docify(" ");
ol.docify(" ");
if (bmd->hasDocumentation()) QString reimplFromLine = theTranslator->trReimplementedFromList(1);
int markerPos = reimplFromLine.find("@0");
if (markerPos!=-1) // should always pass this.
{
parseText(ol,reimplFromLine.left(markerPos)); //text left from marker
if (bmd->hasDocumentation() &&
(bmd->protection()!=Private || extractPrivateFlag)
) // replace marker with link
{ {
ol.writeObjectLink(bcd->getReference(),bcd->classFile(), ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
bmd->anchor(),bcd->name()); bmd->anchor(),bcd->name());
if ( if (
!bcd->isReference() && !bcd->isReference() &&
...@@ -1176,7 +1231,7 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName, ...@@ -1176,7 +1231,7 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName,
} }
else else
{ {
ol.writeObjectLink(bcd->getReference(),bcd->classFile(), ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
0,bcd->name()); 0,bcd->name());
if ( if (
!bcd->isReference() && !bcd->isReference() &&
...@@ -1185,7 +1240,16 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName, ...@@ -1185,7 +1240,16 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName,
bcd->isVisible() bcd->isVisible()
) ol.writePageRef(bcd->name(),0); ) ol.writePageRef(bcd->name(),0);
} }
ol.writeString("."); parseText(ol,reimplFromLine.right(
reimplFromLine.length()-markerPos-2)); // text right from marker
}
else
{
err("Error: translation error: no marker in trReimplementsFromList()\n");
}
//ol.writeString(".");
} }
MemberList *bml=md->reimplementedBy(); MemberList *bml=md->reimplementedBy();
int count; int count;
...@@ -1193,16 +1257,53 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName, ...@@ -1193,16 +1257,53 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName,
{ {
// write the list of classes that overwrite this member // write the list of classes that overwrite this member
ol.newParagraph(); ol.newParagraph();
parseDoc(ol,0,0,theTranslator->trReimplementedIn()); //parseText(ol,theTranslator->trReimplementedIn());
//ol.writeString("Reimplemented in "); //ol.writeString("Reimplemented in ");
ol.docify(" "); //ol.docify(" ");
QString reimplInLine =
theTranslator->trReimplementedInList(bml->count());
QRegExp marker("@[0-9]+");
int index=0,newIndex,matchLen;
// now replace all markers in reimplInLine with links to the classes
while ((newIndex=marker.match(reimplInLine,index,&matchLen))!=-1)
{
parseText(ol,reimplInLine.mid(index,newIndex-index));
bool ok;
uint entryIndex = reimplInLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
bmd=bml->at(entryIndex);
if (ok && bmd) // write link for marker
{
ClassDef *bcd = bmd->memberClass();
if (bmd->hasDocumentation() &&
(bmd->protection()!=Private || extractPrivateFlag)
)
{
ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
bmd->anchor(),bcd->name());
if (!bcd->isReference() && bcd->isVisible())
ol.writePageRef(bcd->name(),bmd->anchor());
}
else
{
ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
0,bcd->name());
if (!bcd->isReference() && bcd->isVisible())
ol.writePageRef(bcd->name(),0);
}
}
index=newIndex+matchLen;
}
parseText(ol,reimplInLine.right(reimplInLine.length()-index));
#if 0
bmd=bml->first(); bmd=bml->first();
while (bmd) while (bmd)
{ {
ClassDef *bcd = bmd->memberClass(); ClassDef *bcd = bmd->memberClass();
if (bmd->hasDocumentation()) if (bmd->hasDocumentation())
{ {
ol.writeObjectLink(bcd->getReference(),bcd->classFile(), ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
bmd->anchor(),bcd->name()); bmd->anchor(),bcd->name());
if ( if (
!bcd->isReference() && !bcd->isReference() &&
...@@ -1214,7 +1315,7 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName, ...@@ -1214,7 +1315,7 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName,
} }
else else
{ {
ol.writeObjectLink(bcd->getReference(),bcd->classFile(), ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
0,bcd->name()); 0,bcd->name());
if ( if (
!bcd->isReference() && !bcd->isReference() &&
...@@ -1228,24 +1329,25 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName, ...@@ -1228,24 +1329,25 @@ void writeMemberDocs(OutputList &ol,MemberList *ml,const char *scopeName,
{ {
if (bml->at()==count-1) if (bml->at()==count-1)
//ol.writeString(" and "); //ol.writeString(" and ");
parseDoc(ol,0,0," "+theTranslator->trAnd()+" "); parseText(ol," "+theTranslator->trAnd()+" ");
else else
ol.writeString(", "); ol.writeString(", ");
} }
} }
ol.writeString("."); ol.writeString(".");
#endif
} }
// write the list of examples that use this member // write the list of examples that use this member
if (md->hasExamples()) if (md->hasExamples())
{ {
ol.startDescList(); ol.startDescList();
ol.startBold(); ol.startBold();
parseDoc(ol,0,0,theTranslator->trExamples()+": "); parseText(ol,theTranslator->trExamples()+": ");
//ol.writeBoldString("Examples: "); //ol.writeBoldString("Examples: ");
ol.endBold(); ol.endBold();
ol.endDescTitle(); ol.endDescTitle();
ol.writeDescItem(); ol.writeDescItem();
md->writeExample(ol); writeExample(ol,md->getExampleList());
//ol.endDescItem(); //ol.endDescItem();
ol.endDescList(); ol.endDescList();
} }
...@@ -1388,8 +1490,7 @@ static QString trimTemplateSpecifiers(const QString &className,const QString &s) ...@@ -1388,8 +1490,7 @@ static QString trimTemplateSpecifiers(const QString &className,const QString &s)
// removes the (one and only) occurrence of name:: from s. // removes the (one and only) occurrence of name:: from s.
static QString trimScope(const QString &name,const QString &s) static QString trimScope(const QString &name,const QString &s)
{ {
int spos; int spos=s.find(name+"::");
spos=s.find(name+"::");
if (spos!=-1) if (spos!=-1)
{ {
return s.left(spos)+s.right(s.length()-spos-name.length()-2); return s.left(spos)+s.right(s.length()-spos-name.length()-2);
...@@ -1486,8 +1587,12 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl, ...@@ -1486,8 +1587,12 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
{ {
srcAType=trimScope(className,srcAType); srcAType=trimScope(className,srcAType);
dstAType=trimScope(className,dstAType); dstAType=trimScope(className,dstAType);
ClassDef *cd=getClass(className); ClassDef *cd;
if (cd->baseClasses()->count()>0) if (!namespaceName.isEmpty())
cd=getClass(namespaceName+"::"+className);
else
cd=getClass(className);
if (cd && cd->baseClasses()->count()>0)
{ {
srcAType=trimBaseClassScope(cd->baseClasses(),srcAType); srcAType=trimBaseClassScope(cd->baseClasses(),srcAType);
dstAType=trimBaseClassScope(cd->baseClasses(),dstAType); dstAType=trimBaseClassScope(cd->baseClasses(),dstAType);
...@@ -1703,17 +1808,19 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl) ...@@ -1703,17 +1808,19 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl)
// returns TRUE if the class and member both could be found // returns TRUE if the class and member both could be found
bool getDefs(const QString &memberName,const QString &className, bool getDefs(const QString &memberName,const QString &className,
const char *args,MemberDef *&md, ClassDef *&cd, FileDef *&fd) const char *args,
MemberDef *&md, ClassDef *&cd, FileDef *&fd,NamespaceDef *&nd)
{ {
//printf("Search for %s::%s %s\n",className.data(),memberName.data(),args); //printf("Search for %s::%s %s\n",className.data(),memberName.data(),args);
fd=0; md=0; cd=0; fd=0, md=0, cd=0, nd=0;
if (memberName.length()==0) return FALSE; if (memberName.length()==0) return FALSE;
MemberName *mn; MemberName *mn;
if ((mn=memberNameDict[memberName]) && className.length()>0) if ((mn=memberNameDict[memberName]) && className.length()>0)
{ {
//printf(" >member name found\n"); //printf(" >member name found\n");
ClassDef *fcd=0; ClassDef *fcd=0;
if ((fcd=getClass(className))) //printf("className=%s\n",className.data());
if ((fcd=getClass(className)) && fcd->hasDocumentation())
{ {
//printf(" >member class found\n"); //printf(" >member class found\n");
MemberDef *mmd=mn->first(); MemberDef *mmd=mn->first();
...@@ -1744,7 +1851,6 @@ bool getDefs(const QString &memberName,const QString &className, ...@@ -1744,7 +1851,6 @@ bool getDefs(const QString &memberName,const QString &className,
mdist=m; mdist=m;
cd=mcd; cd=mcd;
md=mmd; md=mmd;
fd=0;
} }
} }
if (argList) if (argList)
...@@ -1778,7 +1884,6 @@ bool getDefs(const QString &memberName,const QString &className, ...@@ -1778,7 +1884,6 @@ bool getDefs(const QString &memberName,const QString &className,
mdist=m; mdist=m;
cd=mcd; cd=mcd;
md=mmd; md=mmd;
fd=0;
} }
} }
mmd=mn->next(); mmd=mn->next();
...@@ -1788,11 +1893,28 @@ bool getDefs(const QString &memberName,const QString &className, ...@@ -1788,11 +1893,28 @@ bool getDefs(const QString &memberName,const QString &className,
return mdist<maxInheritanceDepth; return mdist<maxInheritanceDepth;
} }
} }
else // maybe an unrelated member ? else // maybe an namespace or file member ?
{ {
MemberName *mn; MemberName *mn;
if ((mn=functionNameDict[memberName])) if ((mn=functionNameDict[memberName])) // name is known
{
NamespaceDef *fnd=0;
if (className.length()>0 && (fnd=namespaceDict[className]) &&
fnd->hasDocumentation())
{ // inside a namespace
MemberDef *mmd=mn->first();
while (mmd)
{ {
if (mmd->getNamespace()==fnd && mmd->hasDocumentation())
{ // namespace is found
nd=fnd;
md=mmd;
return TRUE;
}
mmd=mn->next();
}
}
// maybe a file member (e.g. global function or variable)
md=mn->first(); md=mn->first();
while (md) while (md)
{ {
...@@ -1801,7 +1923,6 @@ bool getDefs(const QString &memberName,const QString &className, ...@@ -1801,7 +1923,6 @@ bool getDefs(const QString &memberName,const QString &className,
fd=md->getFileDef(); fd=md->getFileDef();
if (fd && fd->hasDocumentation()) if (fd && fd->hasDocumentation())
{ {
cd=0;
return TRUE; return TRUE;
} }
} }
...@@ -1828,12 +1949,18 @@ void generateClassRef(OutputList &ol,const char *clName,const char *linkTxt) ...@@ -1828,12 +1949,18 @@ void generateClassRef(OutputList &ol,const char *clName,const char *linkTxt)
ol.docify(linkText); ol.docify(linkText);
return; return;
} }
ClassDef *cd; ClassDef *cd=0;
NamespaceDef *nd=0;
if ((cd=getClass(className)) && cd->isVisible()) if ((cd=getClass(className)) && cd->isVisible())
{ {
ol.writeObjectLink(cd->getReference(),cd->classFile(),0,linkText); ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,linkText);
if (!cd->isReference()) ol.writePageRef(cd->name(),0); if (!cd->isReference()) ol.writePageRef(cd->name(),0);
} }
else if ((nd=namespaceDict[className]) && nd->hasDocumentation())
{
ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),0,linkText);
ol.writePageRef(nd->name(),0);
}
else else
ol.docify(linkText); ol.docify(linkText);
} }
...@@ -1887,8 +2014,11 @@ void generateRef(OutputList &ol,const char *clName, ...@@ -1887,8 +2014,11 @@ void generateRef(OutputList &ol,const char *clName,
} }
// extract scope // extract scope
QString scopeStr; QString scopeContext=clName;
if (scopePos>0) scopeStr=tmpName.left(scopePos); else scopeStr=clName; QString scopeUser;
if (scopePos>0) scopeUser=tmpName.left(scopePos);
//printf("scopeContext=%s scopeUser=%s\n",scopeContext.data(),scopeUser.data());
// extract name // extract name
int startNamePos=scopePos!=-1 ? scopePos+2 : 0; int startNamePos=scopePos!=-1 ? scopePos+2 : 0;
...@@ -1899,43 +2029,59 @@ void generateRef(OutputList &ol,const char *clName, ...@@ -1899,43 +2029,59 @@ void generateRef(OutputList &ol,const char *clName,
QString argsStr; QString argsStr;
if (bracePos!=-1) argsStr=tmpName.right(tmpName.length()-bracePos); if (bracePos!=-1) argsStr=tmpName.right(tmpName.length()-bracePos);
bool explicitLink=TRUE;
// create a default link text if none was explicitly given // create a default link text if none was explicitly given
bool explicitLink=TRUE;
if (linkText.isNull()) if (linkText.isNull())
{ {
if (!scopeStr.isNull() && scopePos>0) linkText=scopeStr+"::"; if (!scopeUser.isEmpty()) linkText=scopeUser+"::";
linkText+=nameStr; linkText+=nameStr;
explicitLink=FALSE; explicitLink=FALSE;
} }
//printf("scope=`%s' name=`%s' arg=`%s' linkText=`%s'\n", //printf("scope=`%s' name=`%s' arg=`%s' linkText=`%s'\n",
// scopeStr.data(),nameStr.data(),argsStr.data(),linkText.data()); // scopeStr.data(),nameStr.data(),argsStr.data(),linkText.data());
//Define *d=0; //Define *d=0;
MemberDef *md; MemberDef *md = 0;
ClassDef *cd; ClassDef *cd = 0;
FileDef *fd; FileDef *fd = 0;
NamespaceDef *nd = 0;
int scopeOffset=scopeContext.length();
do
{
QString totalScope=scopeUser.copy();
if (scopeOffset>0)
{
if (!totalScope.isEmpty()) totalScope.prepend("::");
totalScope.prepend(scopeContext.left(scopeOffset));
}
//printf("Try with totalScope=`%s'\n",totalScope.data());
// check if nameStr is a member or global. // check if nameStr is a member or global.
if (getDefs(nameStr,scopeStr,argsStr,md,cd,fd)) if (getDefs(nameStr,totalScope,argsStr,md,cd,fd,nd))
{ {
QString anchor = md->hasDocumentation() ? md->anchor() : 0; QString anchor = md->hasDocumentation() ? md->anchor() : 0;
QString cName,aName; QString cName,aName;
if (cd) // nameStr is a member of cd if (cd) // nameStr is a member of cd
{ {
//printf("addObjectLink(%s,%s,%s,%s)\n",cd->getReference(), //printf("addObjectLink(%s,%s,%s,%s)\n",cd->getReference(),
// cd->classFile(),anchor.data(),resultName.stripWhiteSpace().data()); // cd->getOutputFileBase(),anchor.data(),resultName.stripWhiteSpace().data());
ol.writeObjectLink(cd->getReference(), ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),
cd->classFile(),anchor, anchor,linkText.stripWhiteSpace());
linkText.stripWhiteSpace());
cName=cd->name(); cName=cd->name();
aName=md->anchor(); aName=md->anchor();
} }
else if (nd) // nameStr is a member of nd
{
ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),
anchor,linkText.stripWhiteSpace());
cName=nd->name();
aName=md->anchor();
}
else if (fd) // nameStr is a global in file fd else if (fd) // nameStr is a global in file fd
{ {
//printf("addFileLink(%s,%s,%s)\n",fd->diskName(),anchor.data(), //printf("addFileLink(%s,%s,%s)\n",fd->getOutputFileBase(),anchor.data(),
// resultName.stripWhiteSpace().data()); // resultName.stripWhiteSpace().data());
ol.writeObjectLink(fd->getReference(),fd->diskName(), ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),
anchor, linkText.stripWhiteSpace()); anchor,linkText.stripWhiteSpace());
cName=fd->name(); cName=fd->name();
aName=md->anchor(); aName=md->anchor();
} }
...@@ -1957,30 +2103,34 @@ void generateRef(OutputList &ol,const char *clName, ...@@ -1957,30 +2103,34 @@ void generateRef(OutputList &ol,const char *clName,
// generate the page reference (for LaTeX) // generate the page reference (for LaTeX)
if (cName.length()>0 || aName.length()>0) if (cName.length()>0 || aName.length()>0)
{ {
if (/*md->detailsAreVisible() &&*/ if (
( (cd && !cd->isReference() && cd->isVisible()) ||
(cd && !cd->isReference() && (fd && !fd->isReference()) ||
// (cd->hasDocumentation() || !hideClassFlag) && (nd /* TODO: && !nd->isReference() */)
// (cd->protection()!=Private || extractPrivateFlag)
cd->isVisible()
) ||
(fd && !fd->isReference())
) )
) ol.writePageRef(cName,aName); {
ol.writePageRef(cName,aName);
} }
} }
// else if (!nameStr.isNull() && (d=defineDict[nameStr])) return;
// // check if nameStr is perhaps a define }
// { // else if (!nameStr.isNull() && (d=defineDict[nameStr]))
// if (d->hasDocumentation() && d->fileDef) // // check if nameStr is perhaps a define
// { // {
// ol.writeObjectLink(0,d->fileDef->diskName(),d->anchor, // if (d->hasDocumentation() && d->fileDef)
// linkText.stripWhiteSpace()); // {
// if (!explicitLink) ol.docify(argsStr); // ol.writeObjectLink(0,d->fileDef->getOutputFileBase(),d->anchor,
// } // linkText.stripWhiteSpace());
// } // if (!explicitLink) ol.docify(argsStr);
else // nameStr is a false alarm or a typo. // }
{ // }
if (scopeOffset==0)
scopeOffset=-1;
else if ((scopeOffset=scopeContext.findRev("::",scopeOffset-1))==-1)
scopeOffset=0;
} while (scopeOffset>=0);
// nothing found
if (rt) if (rt)
ol.docify(rt); ol.docify(rt);
else else
...@@ -1988,7 +2138,6 @@ void generateRef(OutputList &ol,const char *clName, ...@@ -1988,7 +2138,6 @@ void generateRef(OutputList &ol,const char *clName,
ol.docify(linkText); ol.docify(linkText);
if (!argsStr.isNull()) ol.docify(argsStr); if (!argsStr.isNull()) ol.docify(argsStr);
} }
}
return; return;
} }
...@@ -2016,7 +2165,7 @@ void generateLink(OutputList &ol,const char *clName, ...@@ -2016,7 +2165,7 @@ void generateLink(OutputList &ol,const char *clName,
else if ((fd=findFileDef(&inputNameDict,linkRef,ambig)) else if ((fd=findFileDef(&inputNameDict,linkRef,ambig))
&& fd->hasDocumentation()) && fd->hasDocumentation())
// link to documented input file // link to documented input file
ol.writeObjectLink(fd->getReference(),fd->diskName(),0,lt); ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,lt);
else // probably a class or member reference else // probably a class or member reference
generateRef(ol,clName,lr,inSeeBlock,lt); generateRef(ol,clName,lr,inSeeBlock,lt);
} }
...@@ -2030,7 +2179,7 @@ void generateFileRef(OutputList &ol,const char *name,const char *text) ...@@ -2030,7 +2179,7 @@ void generateFileRef(OutputList &ol,const char *name,const char *text)
if ((fd=findFileDef(&inputNameDict,name,ambig)) && if ((fd=findFileDef(&inputNameDict,name,ambig)) &&
fd->hasDocumentation()) fd->hasDocumentation())
// link to documented input file // link to documented input file
ol.writeObjectLink(fd->getReference(),fd->diskName(),0,linkText); ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,linkText);
else else
ol.docify(linkText); ol.docify(linkText);
} }
...@@ -2172,3 +2321,17 @@ void showFileDefMatches(const FileNameDict *fnDict,const char *n) ...@@ -2172,3 +2321,17 @@ void showFileDefMatches(const FileNameDict *fnDict,const char *n)
} }
} }
//----------------------------------------------------------------------
void setFileNameForSections(QList<QString> *anchorList,const char *fileName)
{
if (!anchorList) return;
QString *s=anchorList->first();
while (s)
{
SectionInfo *si;
if (!s->isEmpty() && (si=sectionDict[*s])) si->fileName=fileName;
s=anchorList->next();
}
}
...@@ -46,7 +46,8 @@ extern QString dateToString(bool); ...@@ -46,7 +46,8 @@ extern QString dateToString(bool);
//extern OutputList linkifyText(const char *clName,const char *name, //extern OutputList linkifyText(const char *clName,const char *name,
// const char *text); // const char *text);
extern bool getDefs(const QString &memberName,const QString &className, extern bool getDefs(const QString &memberName,const QString &className,
const char *, MemberDef *&md, ClassDef *&cd,FileDef *&fd); const char *, MemberDef *&md, ClassDef *&cd,FileDef *&fd,
NamespaceDef *&nd);
extern void generateRef(OutputList &ol,const char *, extern void generateRef(OutputList &ol,const char *,
const char *,bool inSeeBlock,const char * =0); const char *,bool inSeeBlock,const char * =0);
extern void generateLink(OutputList &ol,const char *, extern void generateLink(OutputList &ol,const char *,
...@@ -78,5 +79,8 @@ void startFile(OutputList &ol,const char *name, ...@@ -78,5 +79,8 @@ void startFile(OutputList &ol,const char *name,
void endFile(OutputList &ol,bool external=FALSE); void endFile(OutputList &ol,bool external=FALSE);
void writeQuickLinks(OutputList &ol,bool compact,bool external=FALSE); void writeQuickLinks(OutputList &ol,bool compact,bool external=FALSE);
QString argListToString(ArgumentList *al); QString argListToString(ArgumentList *al);
QString generateMarker(int id);
void writeExample(OutputList &ol,ExampleList *el);
void setFileNameForSections(QList<QString> *anchorList,const char *fileName);
#endif #endif
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