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

Release-1.8.3.1-20130402

parent deaa34e0
# The "checkoutlist" file is used to support additional version controlled
# administrative files in $CVSROOT/CVSROOT, such as template files.
#
# The first entry on a line is a filename which will be checked out from
# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
# The remainder of the line is an error message to use if the file cannot
# be checked out.
#
# File format:
#
# [<whitespace>]<filename><whitespace><error message><end-of-line>
#
# comment lines begin with '#'
# The "commitinfo" file is used to control pre-commit checks.
# The filter on the right is invoked with the repository and a list
# of files to check. A non-zero exit of the filter program will
# cause the commit to be aborted.
#
# The first entry on a line is a regular expression which is tested
# against the directory that the change is being committed to, relative
# to the $CVSROOT. For the first match that is found, then the remainder
# of the line is the name of the filter to run.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name "ALL" appears as a regular expression it is always used
# in addition to the first matching regex or "DEFAULT".
# Set this to "no" if pserver shouldn't check system users/passwords
#SystemAuth=no
# Set `PreservePermissions' to `yes' to save file status information
# in the repository.
#PreservePermissions=no
TopLevelAdmin=yes
#LockDir=/u/kp3softd/cvslocks/
# This file affects handling of files based on their names.
#
# The -t/-f options allow one to treat directories of files
# as a single file, or to transform a file in other ways on
# its way in and out of CVS.
#
# The -m option specifies whether CVS attempts to merge files.
#
# The -k option specifies keyword expansion (e.g. -kb for binary).
#
# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
#
# wildcard [option value][option value]...
#
# where option is one of
# -f from cvs filter value: path to filter
# -t to cvs filter value: path to filter
# -m update methodology value: MERGE or COPY
# -k expansion mode value: b, o, kkv, &c
#
# and value is a single-quote delimited value.
# For example:
*.gif -k 'b' -m 'COPY'
# The "editinfo" file is used to allow verification of logging
# information. It works best when a template (as specified in the
# rcsinfo file) is provided for the logging procedure. Given a
# template with locations for, a bug-id number, a list of people who
# reviewed the code before it can be checked in, and an external
# process to catalog the differences that were code reviewed, the
# following test can be applied to the code:
#
# Making sure that the entered bug-id number is correct.
# Validating that the code that was reviewed is indeed the code being
# checked in (using the bug-id number or a seperate review
# number to identify this particular code set.).
#
# If any of the above test failed, then the commit would be aborted.
#
# Actions such as mailing a copy of the report to each reviewer are
# better handled by an entry in the loginfo file.
#
# One thing that should be noted is the the ALL keyword is not
# supported. There can be only one entry that matches a given
# repository.
# The "loginfo" file controls where "cvs commit" log information
# is sent. The first entry on a line is a regular expression which must match
# the directory that the change is being made to, relative to the
# $CVSROOT. If a match is found, then the remainder of the line is a filter
# program that should expect log information on its standard input.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name ALL appears as a regular expression it is always used
# in addition to the first matching regex or DEFAULT.
#
# You may specify a format string as part of the
# filter. The string is composed of a `%' followed
# by a single format character, or followed by a set of format
# characters surrounded by `{' and `}' as separators. The format
# characters are:
#
# s = file name
# V = old version number (pre-checkin)
# v = new version number (post-checkin)
#
# For example:
#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog
# or
#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog
# Three different line formats are valid:
# key -a aliases...
# key [options] directory
# key [options] directory files...
#
# Where "options" are composed of:
# -i prog Run "prog" on "cvs commit" from top-level of module.
# -o prog Run "prog" on "cvs checkout" of module.
# -e prog Run "prog" on "cvs export" of module.
# -t prog Run "prog" on "cvs rtag" of module.
# -u prog Run "prog" on "cvs update" of module.
# -d dir Place module in directory "dir" instead of module name.
# -l Top-level directory only -- do not recurse.
#
# NOTE: If you change any of the "Run" options above, you'll have to
# release and re-checkout any working directories of these modules.
#
# And "directory" is a path to a directory relative to $CVSROOT.
#
# The "-a" option specifies an alias. An alias is interpreted as if
# everything on the right of the "-a" had been typed on the command line.
#
# You can encode a module within a module by using the special '&'
# character to interpose another module into the current module. This
# can be useful for creating a module that consists of many directories
# spread out over the entire source repository.
doxygen -a addon bin doc examples html lib objects packages qtools src tmake wintools libpng libmd5
# The "notify" file controls where notifications from watches set by
# "cvs watch add" or "cvs edit" are sent. The first entry on a line is
# a regular expression which is tested against the directory that the
# change is being made to, relative to the $CVSROOT. If it matches,
# then the remainder of the line is a filter program that should contain
# one occurrence of %s for the user to notify, and information on its
# standard input.
#
# "ALL" or "DEFAULT" can be used in place of the regular expression.
#
# For example:
#ALL mail %s -s "CVS notification"
# The "rcsinfo" file is used to control templates with which the editor
# is invoked on commit and import.
#
# The first entry on a line is a regular expression which is tested
# against the directory that the change is being made to, relative to the
# $CVSROOT. For the first match that is found, then the remainder of the
# line is the name of the file that contains the template.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name "ALL" appears as a regular expression it is always used
# in addition to the first matching regex or "DEFAULT".
# The "taginfo" file is used to control pre-tag checks.
# The filter on the right is invoked with the following arguments:
#
# $1 -- tagname
# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
# $3 -- repository
# $4-> file revision [file revision ...]
#
# A non-zero exit of the filter program will cause the tag to be aborted.
#
# The first entry on a line is a regular expression which is tested
# against the directory that the change is being committed to, relative
# to the $CVSROOT. For the first match that is found, then the remainder
# of the line is the name of the filter to run.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name "ALL" appears as a regular expression it is always used
# in addition to the first matching regex or "DEFAULT".
# The "verifymsg" file is used to allow verification of logging
# information. It works best when a template (as specified in the
# rcsinfo file) is provided for the logging procedure. Given a
# template with locations for, a bug-id number, a list of people who
# reviewed the code before it can be checked in, and an external
# process to catalog the differences that were code reviewed, the
# following test can be applied to the code:
#
# Making sure that the entered bug-id number is correct.
# Validating that the code that was reviewed is indeed the code being
# checked in (using the bug-id number or a seperate review
# number to identify this particular code set.).
#
# If any of the above test failed, then the commit would be aborted.
#
# Actions such as mailing a copy of the report to each reviewer are
# better handled by an entry in the loginfo file.
#
# One thing that should be noted is the the ALL keyword is not
# supported. There can be only one entry that matches a given
# repository.
DOXYGEN Version 1.8.3.1-20130324 DOXYGEN Version 1.8.3.1-20130402
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (24 March 2013) Dimitri van Heesch (02 April 2013)
DOXYGEN Version 1.8.3.1_20130324 DOXYGEN Version 1.8.3.1_20130402
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -26,4 +26,4 @@ forum. ...@@ -26,4 +26,4 @@ forum.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (24 March 2013) Dimitri van Heesch (dimitri@stack.nl) (02 April 2013)
...@@ -408,7 +408,7 @@ static void substEnvVarsInStrList(QStringList &sl) ...@@ -408,7 +408,7 @@ static void substEnvVarsInStrList(QStringList &sl)
if (!wasQuoted) /* as a result of the expansion, a single string if (!wasQuoted) /* as a result of the expansion, a single string
may have expanded into a list, which we'll may have expanded into a list, which we'll
add to sl. If the orginal string already add to sl. If the original string already
contained multiple elements no further contained multiple elements no further
splitting is done to allow quoted items with spaces! */ splitting is done to allow quoted items with spaces! */
{ {
......
...@@ -20,7 +20,7 @@ doxygen_version_minor=8 ...@@ -20,7 +20,7 @@ doxygen_version_minor=8
doxygen_version_revision=3.1 doxygen_version_revision=3.1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20130324 doxygen_version_mmn=20130402
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -58,7 +58,7 @@ of macros. This is to allow macro names to appear in the type of ...@@ -58,7 +58,7 @@ of macros. This is to allow macro names to appear in the type of
function parameters for instance. function parameters for instance.
Another difference is that the preprocessor parses, but not actually includes Another difference is that the preprocessor parses, but not actually includes
code when it encounters a \#include (with the exception of \#include code when it encounters a \c \#include (with the exception of \c \#include
found inside { ... } blocks). The reasons behind this deviation from found inside { ... } blocks). The reasons behind this deviation from
the standard is to prevent feeding multiple definitions of the the standard is to prevent feeding multiple definitions of the
same functions/classes to doxygen's parser. If all source files would same functions/classes to doxygen's parser. If all source files would
...@@ -67,7 +67,7 @@ definitions (and their documentation) would be present in each ...@@ -67,7 +67,7 @@ definitions (and their documentation) would be present in each
translation unit. translation unit.
The preprocessor is written using \c flex and can be found in The preprocessor is written using \c flex and can be found in
\c src/pre.l. For condition blocks (\#if) evaluation of constant expressions \c src/pre.l. For condition blocks (\c \#if) evaluation of constant expressions
is needed. For this a \c yacc based parser is used, which can be found is needed. For this a \c yacc based parser is used, which can be found
in \c src/constexp.y and \c src/constexp.l. in \c src/constexp.y and \c src/constexp.l.
......
This diff is collapsed.
...@@ -140,6 +140,7 @@ for the corresponding HTML documentation that is generated by doxygen<br/> ...@@ -140,6 +140,7 @@ for the corresponding HTML documentation that is generated by doxygen<br/>
\endhtmlonly \endhtmlonly
\htmlonly \htmlonly
<br><br>
Go to the <a href="preprocessing.html">next</a> section or return to the Go to the <a href="preprocessing.html">next</a> section or return to the
<a href="index.html">index</a>. <a href="index.html">index</a>.
\endhtmlonly \endhtmlonly
......
...@@ -433,8 +433,8 @@ config file. ...@@ -433,8 +433,8 @@ config file.
For VHDL a comment normally start with "--". Doxygen will extract comments For VHDL a comment normally start with "--". Doxygen will extract comments
starting with "--!". There are only two types of comment blocks in VHDL; starting with "--!". There are only two types of comment blocks in VHDL;
a one line --! comment representing a brief description, and a multi-line a one line "--!" comment representing a brief description, and a multi-line
--! comment (where the --! prefix is repeated for each line) representing "--!" comment (where the "--!" prefix is repeated for each line) representing
a detailed description. a detailed description.
Comments are always located in front of the item that is being documented Comments are always located in front of the item that is being documented
......
...@@ -67,11 +67,11 @@ afterwards: ...@@ -67,11 +67,11 @@ afterwards:
\verbatim \verbatim
doxygen -w html header.html footer.html stylesheet.css <config_file> doxygen -w html header.html footer.html stylesheet.css <config_file>
\endverbatim \endverbatim
The config_file is optional. When omitted doxygen will search for The `config_file` is optional. When omitted doxygen will search for
a file named Doxyfile and process that. When this is also not found it a file named `Doxyfile` and process that. When this is also not found it
will used the default settings. will used the default settings.
<li>For LaTeX output, you can generate the first and last part of \c refman.tex <li>For \f$\mbox{\LaTeX}\f$ output, you can generate the first and last part of \c refman.tex
(see \ref cfg_latex_header "LATEX_HEADER" and (see \ref cfg_latex_header "LATEX_HEADER" and
\ref cfg_latex_footer "LATEX_FOOTER") and the style sheet included \ref cfg_latex_footer "LATEX_FOOTER") and the style sheet included
by that header (normally <code>doxygen.sty</code>), using the following by that header (normally <code>doxygen.sty</code>), using the following
...@@ -79,7 +79,7 @@ doxygen -w html header.html footer.html stylesheet.css <config_file> ...@@ -79,7 +79,7 @@ doxygen -w html header.html footer.html stylesheet.css <config_file>
\verbatim \verbatim
doxygen -w latex header.tex footer.tex doxygen.sty <config_file> doxygen -w latex header.tex footer.tex doxygen.sty <config_file>
\endverbatim \endverbatim
If you need non-default options (for instance to use extra latex packages) If you need non-default options (for instance to use extra \f$\mbox{\LaTeX}\f$ packages)
you need to make a config file with those options set correctly and then specify you need to make a config file with those options set correctly and then specify
that config file after the generated files (make a backup of the configuration that config file after the generated files (make a backup of the configuration
file first so you don't loose it in case you forget to specify one of the file first so you don't loose it in case you forget to specify one of the
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<ol> <ol>
<li><b>How to get information on the index page in HTML?</b> <li><b>How to get information on the index page in HTML?</b>
<p> <p>
You should use the \\mainpage command inside a comment block like this: You should use the \ref cmdmainpage "\\mainpage" command inside a comment block like this:
\verbatim \verbatim
/*! \mainpage My Personal Index Page /*! \mainpage My Personal Index Page
* *
...@@ -41,9 +41,9 @@ You should use the \\mainpage command inside a comment block like this: ...@@ -41,9 +41,9 @@ You should use the \\mainpage command inside a comment block like this:
Check the following: Check the following:
<ol> <ol>
<li>Is your class / file / namespace documented? If not, it will not <li>Is your class / file / namespace documented? If not, it will not
be extracted from the sources unless \c EXTRACT_ALL is set to \c YES be extracted from the sources unless \ref cfg_extract_all "EXTRACT_ALL" is set to \c YES
in the config file. in the config file.
<li>Are the members private? If so, you must set \c EXTRACT_PRIVATE to \c YES <li>Are the members private? If so, you must set \ref cfg_extract_private "EXTRACT_PRIVATE" to \c YES
to make them appear in the documentation. to make them appear in the documentation.
<li>Is there a function macro in your class that does not end with a <li>Is there a function macro in your class that does not end with a
semicolon (e.g. MY_MACRO())? If so then you have to instruct semicolon (e.g. MY_MACRO())? If so then you have to instruct
...@@ -67,12 +67,12 @@ PREDEFINED = MY_MACRO()= ...@@ -67,12 +67,12 @@ PREDEFINED = MY_MACRO()=
In order for global functions, variables, enums, typedefs, and defines In order for global functions, variables, enums, typedefs, and defines
to be documented you should document the file in which these commands are to be documented you should document the file in which these commands are
located using a comment block containing a \\file (or \@file) located using a comment block containing a \ref cmdfile "\\file" (or \ref cmdfile "\@file")
command. command.
Alternatively, you can put all members in a group (or module) Alternatively, you can put all members in a group (or module)
using the \\ingroup command and then document the group using a comment using the \ref cmdingroup "\\ingroup" command and then document the group using a comment
block containing the \\defgroup command. block containing the \ref cmddefgroup "\\defgroup" command.
For member functions or functions that are part of a namespace you should For member functions or functions that are part of a namespace you should
document either the class or namespace. document either the class or namespace.
...@@ -98,12 +98,13 @@ around the blocks that should be hidden and put: ...@@ -98,12 +98,13 @@ around the blocks that should be hidden and put:
PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS
\endverbatim \endverbatim
in the config file then all blocks should be skipped by Doxygen as long in the config file then all blocks should be skipped by Doxygen as long
as <code>PREPROCESSING = YES</code>. as \ref cfg_enable_preprocessing "ENABLE_PREPROCESSING" is set to `YES`.
<li><b>How can I change what is after the <code>\#include</code> in the class documentation?</b> <li><b>How can I change what is after the <code>\#include</code>
in the class documentation?</b>
In most cases you can use STRIP_FROM_INC_PATH to strip a user defined In most cases you can use \ref cfg_strip_from_inc_path "STRIP_FROM_INC_PATH"
part of a path. to strip a user defined part of a path.
You can also document your class as follows You can also document your class as follows
...@@ -160,9 +161,9 @@ installdox -lb.tag@b.chm:: ...@@ -160,9 +161,9 @@ installdox -lb.tag@b.chm::
<li><b>I don't like the quick index that is put above each HTML page, what do I do?</b> <li><b>I don't like the quick index that is put above each HTML page, what do I do?</b>
You can disable the index by setting DISABLE_INDEX to YES. Then you can You can disable the index by setting \ref cfg_disable_index "DISABLE_INDEX" to `YES`. Then you can
put in your own header file by writing your own header and feed that to put in your own header file by writing your own header and feed that to
HTML_HEADER. \ref cfg_html_header "HTML_HEADER".
<li><b>The overall HTML output looks different, while I only wanted to <li><b>The overall HTML output looks different, while I only wanted to
use my own html header file</b> use my own html header file</b>
...@@ -237,8 +238,8 @@ various buffers and then run "texconfig init". ...@@ -237,8 +238,8 @@ various buffers and then run "texconfig init".
<li><b>Why are dependencies via STL classes not shown in the dot graphs?</b> <li><b>Why are dependencies via STL classes not shown in the dot graphs?</b>
Doxygen is unaware of the STL classes, unless the option BUILTIN_STL_SUPPORT is Doxygen is unaware of the STL classes, unless the
turned on. option \ref cfg_builtin_stl_support "BUILTIN_STL_SUPPORT" is turned on.
<li><b>I have problems getting the search engine to work with PHP5 and/or windows</b> <li><b>I have problems getting the search engine to work with PHP5 and/or windows</b>
...@@ -248,7 +249,7 @@ Please read <a href="searchengine.html">this</a> for hints on where to look. ...@@ -248,7 +249,7 @@ Please read <a href="searchengine.html">this</a> for hints on where to look.
Not via command line options, but doxygen can read from <code>stdin</code>, Not via command line options, but doxygen can read from <code>stdin</code>,
so you can pipe things through it. Here's an example how to override an option so you can pipe things through it. Here's an example how to override an option
in a configuration file from the command line (assuming a UNIX environment): in a configuration file from the command line (assuming a UNIX like environment):
\verbatim \verbatim
( cat Doxyfile ; echo "PROJECT_NUMBER=1.0" ) | doxygen - ( cat Doxyfile ; echo "PROJECT_NUMBER=1.0" ) | doxygen -
...@@ -280,9 +281,10 @@ At the time I was looking into lex and yacc, where a lot of things start with ...@@ -280,9 +281,10 @@ At the time I was looking into lex and yacc, where a lot of things start with
<li><b>What was the reason to develop doxygen?</b> <li><b>What was the reason to develop doxygen?</b>
I once wrote a GUI widget based on the Qt library (it is still available at I once wrote a GUI widget based on the Qt library (it is still available at
http://qdbttabular.sourceforge.net/ and maintained by Sven Meyer). http://sourceforge.net/projects/qdbttabular/ but hasn't been updated since 2002).
Qt had nicely generated documentation (using an internal tool which Qt had nicely generated documentation (using an internal tool which
they didn't want to release) and I wrote similar docs by hand. <a href="http://rant.gulbrandsen.priv.no/udoc/history">they didn't want to release</a>)
and I wrote similar docs by hand.
This was a nightmare to maintain, so I wanted a similar tool. I looked at This was a nightmare to maintain, so I wanted a similar tool. I looked at
Doc++ but that just wasn't good enough (it didn't support signals and Doc++ but that just wasn't good enough (it didn't support signals and
slots and did not have the Qt look and feel I had grown to like), slots and did not have the Qt look and feel I had grown to like),
......
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
Although doxygen can now be used in any project written in a language that is Although doxygen can now be used in any project written in a language that is
supported by doxygen, initially it was specifically designed to be used for projects supported by doxygen, initially it was specifically designed to be used for projects
that make use of Qt Software's that make use of Qt Software's
<A HREF="http://www.trolltech.com/products/qt.html">Qt toolkit</A>. I have tried to <A HREF="http://qt-project.org/">Qt toolkit</A>. I have tried to
make doxygen `Qt-compatible'. That is: Doxygen can read the documentation contained in make doxygen `Qt-compatible'. That is: Doxygen can read the documentation contained in
the Qt source code and create a class browser that looks quite similar to the the Qt source code and create a class browser that looks quite similar to the
one that is generated by Qt Software. Doxygen understands the C++ extensions one that is generated by Qt Software. Doxygen understands the C++ extensions
......
...@@ -40,10 +40,10 @@ of a HTML tag are passed on to the HTML output only ...@@ -40,10 +40,10 @@ of a HTML tag are passed on to the HTML output only
<li><tt>\<CAPTION\></tt> Starts a caption. Use within a table only. <li><tt>\<CAPTION\></tt> Starts a caption. Use within a table only.
<li><tt>\</CAPTION\></tt> Ends a caption. Use within a table only. <li><tt>\</CAPTION\></tt> Ends a caption. Use within a table only.
<li><tt>\<CODE\></tt> Starts a piece of text displayed in a typewriter font. <li><tt>\<CODE\></tt> Starts a piece of text displayed in a typewriter font.
Note that for C# code, this command is equivalent to Note that only for C# code, this command is equivalent to
\ref cmdcode "\\code". \ref cmdcode "\\code".
<li><tt>\</CODE\></tt> Ends a <tt>\<CODE\></tt> section. <li><tt>\</CODE\></tt> Ends a <tt>\<CODE\></tt> section.
Note that for C# code, this command is equivalent to Note that only for C# code, this command is equivalent to
\ref cmdendcode "\\endcode". \ref cmdendcode "\\endcode".
<li><tt>\<DD\></tt> Starts an item description. <li><tt>\<DD\></tt> Starts an item description.
<li><tt>\<DFN\></tt> Starts a piece of text displayed in a typewriter font. <li><tt>\<DFN\></tt> Starts a piece of text displayed in a typewriter font.
......
...@@ -30,7 +30,7 @@ Version: $(VERSION) ...@@ -30,7 +30,7 @@ Version: $(VERSION)
Doxygen is the de facto standard tool for generating documentation from Doxygen is the de facto standard tool for generating documentation from
annotated C++ sources, but it also supports other popular programming annotated C++ sources, but it also supports other popular programming
languages such as C, Objective-C, C#, PHP, Java, Python, IDL languages such as C, Objective-C, C#, PHP, Java, Python, IDL
(Corba and Microsoft flavors), Fortran, VHDL, Tcl, and to some extent D. (Corba, Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, and to some extent D.
Doxygen can help you in three ways: Doxygen can help you in three ways:
<ol> <ol>
...@@ -164,8 +164,8 @@ You can submit enhancement requests in ...@@ -164,8 +164,8 @@ You can submit enhancement requests in
<a href="https://bugzilla.gnome.org/buglist.cgi?product=doxygen&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=enhancement">the bug tracker</a>. <a href="https://bugzilla.gnome.org/buglist.cgi?product=doxygen&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=enhancement">the bug tracker</a>.
Make sure the severity of the bug report is set to "enhancement". Make sure the severity of the bug report is set to "enhancement".
<h2>Acknowledgements</h2> <h2>Acknowledgments</h2>
\addindex acknowledgements \addindex acknowledgments
Thanks go to: Thanks go to:
<ul> <ul>
<li>\addindex Doc++ <li>\addindex Doc++
......
...@@ -361,7 +361,7 @@ You can now build the Release or Debug flavor of Doxygen by right-clicking ...@@ -361,7 +361,7 @@ You can now build the Release or Debug flavor of Doxygen by right-clicking
the project in the solutions explorer, and selecting Build. the project in the solutions explorer, and selecting Build.
Note that compiling Doxywizard currently requires Qt version 4 Note that compiling Doxywizard currently requires Qt version 4
(see http://qt.nokia.com/products/platform/qt-for-windows). (see http://qt-project.org/).
Also read the next section for additional tools you may need to install to run Also read the next section for additional tools you may need to install to run
doxygen with certain features enabled. doxygen with certain features enabled.
...@@ -446,7 +446,7 @@ Here is what is required: ...@@ -446,7 +446,7 @@ Here is what is required:
of Qt that is needed for to compile doxygen. of Qt that is needed for to compile doxygen.
The Windows specific part were also created. The Windows specific part were also created.
As a result doxygen (without the wizard) can be compiled on systems As a result doxygen (without the wizard) can be compiled on systems
without X11 or (the commerical version of) Qt. without X11 or (the commercial version of) Qt.
<li>If you used WinZip to extract the tar archive it will (apparently) not <li>If you used WinZip to extract the tar archive it will (apparently) not
create empty folders, so you have to add the folders create empty folders, so you have to add the folders
...@@ -523,12 +523,12 @@ If you want to produce compressed HTML files (see \ref ...@@ -523,12 +523,12 @@ If you want to produce compressed HTML files (see \ref
cfg_generate_htmlhelp "GENERATE_HTMLHELP") in the config file, then cfg_generate_htmlhelp "GENERATE_HTMLHELP") in the config file, then
you need the Microsoft HTML help workshop. you need the Microsoft HTML help workshop.
You can download it from You can download it from
<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/vsconHH1Start.asp">Microsoft</a>. <a href="http://www.microsoft.com/en-us/download/details.aspx?id=21138">Microsoft</a>.
If you want to produce Qt Compressed Help files (see \ref If you want to produce Qt Compressed Help files (see \ref
cfg_qhg_location "QHG_LOCATION") in the config file, then cfg_qhg_location "QHG_LOCATION") in the config file, then
you need qhelpgenerator which is part of Qt. you need qhelpgenerator which is part of Qt.
You can download Qt from <a href="http://trolltech.com/downloads/">Qt Software Downloads</a>. You can download Qt from <a href="http://qt-project.org/downloads">Qt Software Downloads</a>.
In order to generate PDF output or use scientific formulas you will also need to In order to generate PDF output or use scientific formulas you will also need to
install <a href="http://en.wikipedia.org/wiki/LaTeX">LaTeX</a> and install <a href="http://en.wikipedia.org/wiki/LaTeX">LaTeX</a> and
...@@ -601,7 +601,7 @@ features: ...@@ -601,7 +601,7 @@ features:
cfg_qhelgenerator_loc "QHG_LOCATION") in the config file, cfg_qhelgenerator_loc "QHG_LOCATION") in the config file,
then you need qhelpgenerator which is part of Qt. then you need qhelpgenerator which is part of Qt.
You can download Qt from You can download Qt from
<a href="http://trolltech.com/downloads/">Qt Software Downloads</a>. <a href="http://qt-project.org/downloads">Qt Software Downloads</a>.
<li><a href="http://www.graphviz.org/"> <li><a href="http://www.graphviz.org/">
the Graph visualization toolkit version 1.8.10</a><br> the Graph visualization toolkit version 1.8.10</a><br>
......
...@@ -104,7 +104,7 @@ when the translator was updated. ...@@ -104,7 +104,7 @@ when the translator was updated.
<td>Czech</td> <td>Czech</td>
<td>Petr Přikryl</td> <td>Petr Přikryl</td>
<td>prikryl at atlas dot cz</td> <td>prikryl at atlas dot cz</td>
<td>up-to-date</td> <td>1.8.04</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Danish</td> <td>Danish</td>
...@@ -116,7 +116,7 @@ when the translator was updated. ...@@ -116,7 +116,7 @@ when the translator was updated.
<td>Dutch</td> <td>Dutch</td>
<td>Dimitri van Heesch</td> <td>Dimitri van Heesch</td>
<td>dimitri at stack dot nl</td> <td>dimitri at stack dot nl</td>
<td>up-to-date</td> <td>1.8.04</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>English</td> <td>English</td>
...@@ -128,7 +128,7 @@ when the translator was updated. ...@@ -128,7 +128,7 @@ when the translator was updated.
<td>Esperanto</td> <td>Esperanto</td>
<td>Ander Martínez</td> <td>Ander Martínez</td>
<td>ander dot basaundi at gmail dot com</td> <td>ander dot basaundi at gmail dot com</td>
<td>up-to-date</td> <td>1.8.04</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Finnish</td> <td>Finnish</td>
...@@ -146,13 +146,13 @@ when the translator was updated. ...@@ -146,13 +146,13 @@ when the translator was updated.
<td>German</td> <td>German</td>
<td>Peter Grotrian<br/>Jens Seidel</td> <td>Peter Grotrian<br/>Jens Seidel</td>
<td>Peter dot Grotrian at pdv-FS dot de<br/>jensseidel at users dot sf dot net</td> <td>Peter dot Grotrian at pdv-FS dot de<br/>jensseidel at users dot sf dot net</td>
<td>up-to-date</td> <td>1.8.04</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Greek</td> <td>Greek</td>
<td>Paul Gessos</td> <td>Paul Gessos</td>
<td>gessos dot paul at yahoo dot gr</td> <td>gessos dot paul at yahoo dot gr</td>
<td>up-to-date</td> <td>1.8.04</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Hungarian</td> <td>Hungarian</td>
...@@ -266,7 +266,7 @@ when the translator was updated. ...@@ -266,7 +266,7 @@ when the translator was updated.
<td>Slovak</td> <td>Slovak</td>
<td>Kali+Laco Švec<br/>Petr Přikryl</td> <td>Kali+Laco Švec<br/>Petr Přikryl</td>
<td><span style="color: brown">[the Slovak language advisors]</span><br/>prikryl at atlas dot cz</td> <td><span style="color: brown">[the Slovak language advisors]</span><br/>prikryl at atlas dot cz</td>
<td>up-to-date</td> <td>1.8.04</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Slovene</td> <td>Slovene</td>
...@@ -278,7 +278,7 @@ when the translator was updated. ...@@ -278,7 +278,7 @@ when the translator was updated.
<td>Spanish</td> <td>Spanish</td>
<td>Bartomeu<br/>Francisco Oltra Thennet<br/>David Vaquero</td> <td>Bartomeu<br/>Francisco Oltra Thennet<br/>David Vaquero</td>
<td>bartomeu at loteria3cornella dot com<br/><span style="color: brown">[unreachable]</span><br/>david at grupoikusnet dot com</td> <td>bartomeu at loteria3cornella dot com<br/><span style="color: brown">[unreachable]</span><br/>david at grupoikusnet dot com</td>
<td>up-to-date</td> <td>1.8.04</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Swedish</td> <td>Swedish</td>
...@@ -296,7 +296,7 @@ when the translator was updated. ...@@ -296,7 +296,7 @@ when the translator was updated.
<td>Ukrainian</td> <td>Ukrainian</td>
<td>Olexij Tkatchenko<br/>Petro Yermolenko</td> <td>Olexij Tkatchenko<br/>Petro Yermolenko</td>
<td><span style="color: brown">[resigned]</span><br/>python at i dot ua</td> <td><span style="color: brown">[resigned]</span><br/>python at i dot ua</td>
<td>up-to-date</td> <td>1.8.04</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Vietnamese</td> <td>Vietnamese</td>
...@@ -341,26 +341,26 @@ when the translator was updated. ...@@ -341,26 +341,26 @@ when the translator was updated.
\hline \hline
Croatian & Boris Bralo & {\tt\tiny boris dot bralo at gmail dot com} & 1.8.2 \\ Croatian & Boris Bralo & {\tt\tiny boris dot bralo at gmail dot com} & 1.8.2 \\
\hline \hline
Czech & Petr Přikryl & {\tt\tiny prikryl at atlas dot cz} & up-to-date \\ Czech & Petr Přikryl & {\tt\tiny prikryl at atlas dot cz} & 1.8.04 \\
\hline \hline
Danish & Poul-Erik Hansen & {\tt\tiny pouhan at gnotometrics dot dk} & 1.8.0 \\ Danish & Poul-Erik Hansen & {\tt\tiny pouhan at gnotometrics dot dk} & 1.8.0 \\
~ & Erik Søe Sørensen & {\tt\tiny eriksoe+doxygen at daimi dot au dot dk} & ~ \\ ~ & Erik Søe Sørensen & {\tt\tiny eriksoe+doxygen at daimi dot au dot dk} & ~ \\
\hline \hline
Dutch & Dimitri van Heesch & {\tt\tiny dimitri at stack dot nl} & up-to-date \\ Dutch & Dimitri van Heesch & {\tt\tiny dimitri at stack dot nl} & 1.8.04 \\
\hline \hline
English & Dimitri van Heesch & {\tt\tiny dimitri at stack dot nl} & up-to-date \\ English & Dimitri van Heesch & {\tt\tiny dimitri at stack dot nl} & up-to-date \\
\hline \hline
Esperanto & Ander Martínez & {\tt\tiny ander dot basaundi at gmail dot com} & up-to-date \\ Esperanto & Ander Martínez & {\tt\tiny ander dot basaundi at gmail dot com} & 1.8.04 \\
\hline \hline
Finnish & Antti Laine & {\tt\tiny antti dot a dot laine at tut dot fi} & 1.6.0 \\ Finnish & Antti Laine & {\tt\tiny antti dot a dot laine at tut dot fi} & 1.6.0 \\
\hline \hline
French & David Martinet & {\tt\tiny contact at e-concept-applications dot fr} & 1.8.0 \\ French & David Martinet & {\tt\tiny contact at e-concept-applications dot fr} & 1.8.0 \\
~ & Xavier Outhier & {\tt\tiny xouthier at yahoo dot fr} & ~ \\ ~ & Xavier Outhier & {\tt\tiny xouthier at yahoo dot fr} & ~ \\
\hline \hline
German & Peter Grotrian & {\tt\tiny Peter dot Grotrian at pdv-FS dot de} & up-to-date \\ German & Peter Grotrian & {\tt\tiny Peter dot Grotrian at pdv-FS dot de} & 1.8.04 \\
~ & Jens Seidel & {\tt\tiny jensseidel at users dot sf dot net} & ~ \\ ~ & Jens Seidel & {\tt\tiny jensseidel at users dot sf dot net} & ~ \\
\hline \hline
Greek & Paul Gessos & {\tt\tiny gessos dot paul at yahoo dot gr} & up-to-date \\ Greek & Paul Gessos & {\tt\tiny gessos dot paul at yahoo dot gr} & 1.8.04 \\
\hline \hline
Hungarian & Ákos Kiss & {\tt\tiny akiss at users dot sourceforge dot net} & 1.4.6 \\ Hungarian & Ákos Kiss & {\tt\tiny akiss at users dot sourceforge dot net} & 1.4.6 \\
~ & Földvári György & {\tt\tiny [unreachable] foldvari lost at cyberspace} & ~ \\ ~ & Földvári György & {\tt\tiny [unreachable] foldvari lost at cyberspace} & ~ \\
...@@ -412,12 +412,12 @@ when the translator was updated. ...@@ -412,12 +412,12 @@ when the translator was updated.
\hline \hline
SerbianCyrilic & Nedeljko Stefanovic & {\tt\tiny stenedjo at yahoo dot com} & 1.6.0 \\ SerbianCyrilic & Nedeljko Stefanovic & {\tt\tiny stenedjo at yahoo dot com} & 1.6.0 \\
\hline \hline
Slovak & Kali+Laco Švec & {\tt\tiny [the Slovak language advisors]} & up-to-date \\ Slovak & Kali+Laco Švec & {\tt\tiny [the Slovak language advisors]} & 1.8.04 \\
~ & Petr Přikryl & {\tt\tiny prikryl at atlas dot cz} & ~ \\ ~ & Petr Přikryl & {\tt\tiny prikryl at atlas dot cz} & ~ \\
\hline \hline
Slovene & Matjaž Ostroveršnik & {\tt\tiny matjaz dot ostroversnik at ostri dot org} & 1.4.6 \\ Slovene & Matjaž Ostroveršnik & {\tt\tiny matjaz dot ostroversnik at ostri dot org} & 1.4.6 \\
\hline \hline
Spanish & Bartomeu & {\tt\tiny bartomeu at loteria3cornella dot com} & up-to-date \\ Spanish & Bartomeu & {\tt\tiny bartomeu at loteria3cornella dot com} & 1.8.04 \\
~ & Francisco Oltra Thennet & {\tt\tiny [unreachable] foltra at puc dot cl} & ~ \\ ~ & Francisco Oltra Thennet & {\tt\tiny [unreachable] foltra at puc dot cl} & ~ \\
~ & David Vaquero & {\tt\tiny david at grupoikusnet dot com} & ~ \\ ~ & David Vaquero & {\tt\tiny david at grupoikusnet dot com} & ~ \\
\hline \hline
...@@ -425,7 +425,7 @@ when the translator was updated. ...@@ -425,7 +425,7 @@ when the translator was updated.
\hline \hline
Turkish & Emin Ilker Cetinbas & {\tt\tiny niw3 at yahoo dot com} & 1.7.5 \\ Turkish & Emin Ilker Cetinbas & {\tt\tiny niw3 at yahoo dot com} & 1.7.5 \\
\hline \hline
Ukrainian & Olexij Tkatchenko & {\tt\tiny [resigned] olexij at tkatchenko dot com} & up-to-date \\ Ukrainian & Olexij Tkatchenko & {\tt\tiny [resigned] olexij at tkatchenko dot com} & 1.8.04 \\
~ & Petro Yermolenko & {\tt\tiny python at i dot ua} & ~ \\ ~ & Petro Yermolenko & {\tt\tiny python at i dot ua} & ~ \\
\hline \hline
Vietnamese & Dang Minh Tuan & {\tt\tiny tuanvietkey at gmail dot com} & 1.6.0 \\ Vietnamese & Dang Minh Tuan & {\tt\tiny tuanvietkey at gmail dot com} & 1.6.0 \\
...@@ -651,8 +651,8 @@ for the supported languages, the \c translator.py Python ...@@ -651,8 +651,8 @@ for the supported languages, the \c translator.py Python
script was developed (located in \c doxygen/doc directory). script was developed (located in \c doxygen/doc directory).
It extracts the important information about obsolete and It extracts the important information about obsolete and
new methods from the source files for each of the languages. new methods from the source files for each of the languages.
The information is stored in the <em>translator report</em> ASCII file The information is stored in the translator report ASCII file
(translator_report.txt). (\c translator_report.txt).
\htmlonly If you compiled this documentation \htmlonly If you compiled this documentation
from sources and if you have also doxygen sources available the from sources and if you have also doxygen sources available the
...@@ -751,5 +751,10 @@ used if possible. On the other hand, implementation of adapters for ...@@ -751,5 +751,10 @@ used if possible. On the other hand, implementation of adapters for
really obsolete translators brings too much maintenance and really obsolete translators brings too much maintenance and
run-time overhead. run-time overhead.
\htmlonly
Go to the <a href="perlmod.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
*/ */
...@@ -254,8 +254,8 @@ for the supported languages, the \c translator.py Python ...@@ -254,8 +254,8 @@ for the supported languages, the \c translator.py Python
script was developed (located in \c doxygen/doc directory). script was developed (located in \c doxygen/doc directory).
It extracts the important information about obsolete and It extracts the important information about obsolete and
new methods from the source files for each of the languages. new methods from the source files for each of the languages.
The information is stored in the <em>translator report</em> ASCII file The information is stored in the translator report ASCII file
(%(translatorReportFileName)s). (\c %(translatorReportFileName)s).
\htmlonly If you compiled this documentation \htmlonly If you compiled this documentation
from sources and if you have also doxygen sources available the from sources and if you have also doxygen sources available the
...@@ -353,5 +353,10 @@ used if possible. On the other hand, implementation of adapters for ...@@ -353,5 +353,10 @@ used if possible. On the other hand, implementation of adapters for
really obsolete translators brings too much maintenance and really obsolete translators brings too much maintenance and
run-time overhead. run-time overhead.
\htmlonly
Go to the <a href="perlmod.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
*/ */
...@@ -520,7 +520,7 @@ stars, so the following will appear as-is: ...@@ -520,7 +520,7 @@ stars, so the following will appear as-is:
a_nice_identifier a_nice_identifier
Futhermore, a `*` or `_` only starts an emphasis if Furthermore, a `*` or `_` only starts an emphasis if
- it is followed by an alphanumberical character, and - it is followed by an alphanumberical character, and
- it is preceded by a space, newline, or one the following characters `<{([,:;` - it is preceded by a space, newline, or one the following characters `<{([,:;`
......
...@@ -21,37 +21,39 @@ ...@@ -21,37 +21,39 @@
The following output formats are \e directly supported by doxygen: The following output formats are \e directly supported by doxygen:
<dl> <dl>
<dt><b>HTML</b> <dt><b>HTML</b>
<dd>Generated if \c GENERATE_HTML is set to \c YES in the configuration file. <dd>Generated if \ref cfg_generate_html "GENERATE_HTML" is set to \c YES in the configuration file.
<dt>\f$\mbox{\LaTeX}\f$ <dt>\f$\mbox{\LaTeX}\f$
<dd>Generated if \c GENERATE_LATEX is set to \c YES in the configuration file. <dd>Generated if \ref cfg_generate_latex "GENERATE_LATEX" is set to \c YES in the configuration file.
<dt><b>Man pages</b> <dt><b>Man pages</b>
<dd>Generated if \c GENERATE_MAN is set to \c YES in the configuration file. <dd>Generated if \ref cfg_generate_man "GENERATE_MAN" is set to \c YES in the configuration file.
<dt><b>RTF</b> <dt><b>RTF</b>
<dd>Generated if \c GENERATE_RTF is set to \c YES in the configuration file.<p> <dd>Generated if \ref cfg_generate_rtf "GENERATE_RTF" is set to \c YES in the configuration file.<p>
Note that the RTF output probably only looks nice with Microsoft's Note that the RTF output probably only looks nice with Microsoft's
Word. If you have success with other programs, please let me know. Word. If you have success with other programs, please let me know.
<dt><b>XML</b> <dt><b>XML</b>
<dd>Generated if \c GENERATE_XML is set to \c YES in the configuration file.<p> <dd>Generated if \ref cfg_generate_xml "GENERATE_XML" is set to \c YES in the configuration file.<p>
<dt><b>Docbook</b>
<dd>Generated if \ref cfg_generate_docbook "GENERATE_DOCBOOOK" is set to \c YES in the configuration file.<p>
</dl> </dl>
The following output formats are \e indirectly supported by doxygen: The following output formats are \e indirectly supported by doxygen:
<dl> <dl>
<dt><b>Compiled HTML Help</b> (a.k.a. Windows 98 help) <dt><b>Compiled HTML Help</b> (a.k.a. Windows 98 help)
<dd>Generated by Microsoft's HTML Help workshop from the HTML output if <dd>Generated by Microsoft's HTML Help workshop from the HTML output if
\c GENERATE_HTMLHELP is set to \c YES. \ref cfg_generate_htmlhelp "GENERATE_HTMLHELP" is set to \c YES.
<dt><b>Qt Compressed Help (.qch)</b> <dt><b>Qt Compressed Help (.qch)</b>
<dd>Generated by Qt's qhelpgenerator tool from the HTML output if <dd>Generated by Qt's qhelpgenerator tool from the HTML output if
\c GENERATE_QHP is set to \c YES. \ref cfg_generate_qhp "GENERATE_QHP" is set to \c YES.
<dt><b>Eclipse Help</b> <dt><b>Eclipse Help</b>
<dd>Generated from HTML with a special index file that is generated when <dd>Generated from HTML with a special index file that is generated when
\c GENERATE_ECLIPSEHELP is set to \c YES. \ref cfg_generate_eclipsehelp "GENERATE_ECLIPSEHELP" is set to \c YES.
<dt><b>XCode DocSets</b> <dt><b>XCode DocSets</b>
<dd>Compiled from HTML with a special index file that is generated when <dd>Compiled from HTML with a special index file that is generated when
\c GENERATE_DOCSET is set to \c YES. \ref cfg_generate_docset "GENERATE_DOCSET" is set to \c YES.
<dt><b>PostScript</b> <dt><b>PostScript</b>
<dd>Generated from the \f$\mbox{\LaTeX}\f$ output by <dd>Generated from the \f$\mbox{\LaTeX}\f$ output by
running <code>make ps</code> in the output directory. running <code>make ps</code> in the output directory.
For the best results \c PDF_HYPERLINKS should be set to \c NO. For the best results \ref cfg_pdf_hyperlinks "PDF_HYPERLINKS" should be set to \c NO.
<dt><b>PDF</b>\htmlonly &nbsp;&nbsp;&nbsp;\endhtmlonly <dt><b>PDF</b>\htmlonly &nbsp;&nbsp;&nbsp;\endhtmlonly
<dd>Generated from the \f$\mbox{\LaTeX}\f$ output by <dd>Generated from the \f$\mbox{\LaTeX}\f$ output by
running <code>make pdf</code> in the output directory. running <code>make pdf</code> in the output directory.
......
...@@ -23,27 +23,27 @@ doxygen-develop mailing list. Suggestions are welcome as well. ...@@ -23,27 +23,27 @@ doxygen-develop mailing list. Suggestions are welcome as well.
\section using_perlmod_fmt Usage \section using_perlmod_fmt Usage
<p>When the <b>GENERATE_PERLMOD</b> tag is enabled in the Doxyfile, <p>When the \ref cfg_generate_perlmod "GENERATE_PERLMOD" tag is enabled in the Doxyfile,
running Doxygen generates a number of files in the <b>perlmod/</b> running Doxygen generates a number of files in the `perlmod/`
subdirectory of your output directory. These files are the following: subdirectory of your output directory. These files are the following:
<ul> <ul>
<li><b>DoxyDocs.pm</b>. This is the Perl module that actually <li>`DoxyDocs.pm`: This is the Perl module that actually
contains the documentation, in the Perl Module format described contains the documentation, in the Perl Module format described
\ref doxydocs_format "below". \ref doxydocs_format "below".
<li><b>DoxyModel.pm</b>. This Perl module describes the structure of <li>`DoxyModel.pm`: This Perl module describes the structure of
<b>DoxyDocs.pm</b>, independently of the actual documentation. See `DoxyDocs.pm`, independently of the actual documentation. See
\ref doxymodel_format "below" for details. \ref doxymodel_format "below" for details.
<li><b>doxyrules.make</b>. This file contains the make rules to build <li>`doxyrules.make`: This file contains the make rules to build
and clean the files that are generated from the Doxyfile. Also and clean the files that are generated from the Doxyfile. Also
contains the paths to those files and other relevant information. This contains the paths to those files and other relevant information. This
file is intended to be included by your own Makefile. file is intended to be included by your own Makefile.
<li><b>Makefile</b>. This is a simple Makefile including <li>`Makefile`: This is a simple Makefile including
<b>doxyrules.make</b>. `doxyrules.make`.
</ul> </ul>
...@@ -65,70 +65,71 @@ within files and classes and can be customized quite a lot by ...@@ -65,70 +65,71 @@ within files and classes and can be customized quite a lot by
redefining TeX macros. However, there is still no documentation on redefining TeX macros. However, there is still no documentation on
how to do this. how to do this.
<p>Setting the <b>PERLMOD_LATEX</b> tag to <b>YES</b> in the Doxyfile <p>Setting the \ref cfg_perlmod_latex "PERLMOD_LATEX" tag to \c YES in the
enables the creation of some additional files in the <b>perlmod/</b> \c Doxyfile enables the creation of some additional files in the `perlmod/`
subdirectory of your output directory. These files contain the Perl subdirectory of your output directory. These files contain the Perl
scripts and LaTeX code necessary to generate PDF and DVI output from scripts and LaTeX code necessary to generate PDF and DVI output from
the Perl Module output, using PDFLaTeX and LaTeX respectively. Rules the Perl Module output, using `pdflatex` and `latex` respectively. Rules
to automate the use of these files are also added to to automate the use of these files are also added to
<b>doxyrules.make</b> and the <b>Makefile</b>. `doxyrules.make` and the `Makefile`.
<p>The additional generated files are the following: <p>The additional generated files are the following:
<ul> <ul>
<li><b>doxylatex.pl</b>. This Perl script uses DoxyDocs.pm and <li>`doxylatex.pl`: This Perl script uses `DoxyDocs.pm` and
DoxyModel.pm to generate <b>doxydocs.tex</b>, a TeX file containing DoxyModel.pm to generate `doxydocs.tex`, a TeX file containing
the documentation in a format that can be accessed by LaTeX code. This the documentation in a format that can be accessed by LaTeX code. This
file is not directly LaTeXable. file is not directly LaTeXable.
<li><b>doxyformat.tex</b>. This file contains the LaTeX code that <li>`doxyformat.tex`: This file contains the \f$\mbox{\LaTeX}\f$ code that
transforms the documentation from doxydocs.tex into LaTeX text transforms the documentation from doxydocs.tex into LaTeX text
suitable to be LaTeX'ed and presented to the user. suitable to be \f$\mbox{\LaTeX}\f$'ed and presented to the user.
<li><b>doxylatex-template.pl</b>. This Perl script uses DoxyModel.pm <li>`doxylatex-template.pl`: This Perl script uses `DoxyModel.pm`
to generate <b>doxytemplate.tex</b>, a TeX file defining default to generate `doxytemplate.tex`, a \f$\mbox{\TeX}\f$ file defining default
values for some macros. doxytemplate.tex is included by values for some macros. doxytemplate.tex is included by
doxyformat.tex to avoid the need of explicitly defining some macros. doxyformat.tex to avoid the need of explicitly defining some macros.
<li><b>doxylatex.tex</b>. This is a very simple LaTeX document that <li>`doxylatex.tex`: This is a very simple \f$\mbox{\LaTeX}\f$ document that
loads some packages and includes doxyformat.tex and doxydocs.tex. This loads some packages and includes doxyformat.tex and doxydocs.tex. This
document is LaTeX'ed to produce the PDF and DVI documentation by the document is \f$\mbox{\LaTeX}\f$'ed to produce the PDF and DVI documentation by the
rules added to <b>doxyrules.make</b>. rules added to `doxyrules.make`.
</ul> </ul>
\subsection pm_pdf_gen Creation of PDF and DVI output \subsection pm_pdf_gen Creation of PDF and DVI output
<p>To try this you need to have installed LaTeX, PDFLaTeX and the <p>To try this you need to have installed LaTeX, PDFLaTeX and the
packages used by <b>doxylatex.tex</b>. packages used by `doxylatex.tex`.
<ol> <ol>
<li>Update your Doxyfile to the latest version using: <li>Update your `Doxyfile` to the latest version using:
<pre>doxygen -u Doxyfile</pre> <pre>doxygen -u Doxyfile</pre>
<li>Set both <b>GENERATE_PERLMOD</b> and <b>PERLMOD_LATEX</b> tags to <li>Set both \ref cfg_generate_perlmod "GENERATE_PERLMOD" and
YES in your Doxyfile. \ref cfg_perlmod_latex "PERLMOD_LATEX" tags to
\c YES in your Doxyfile.
<li>Run Doxygen on your Doxyfile: <li>Run Doxygen on your Doxyfile:
<pre>doxygen Doxyfile</pre> <pre>doxygen Doxyfile</pre>
<li>A <b>perlmod/</b> subdirectory should have appeared in your output <li>A `perlmod/` subdirectory should have appeared in your output
directory. Enter the <b>perlmod/</b> subdirectory and run: directory. Enter the `perlmod/` subdirectory and run:
<pre>make pdf</pre> <pre>make pdf</pre>
<p>This should generate a <b>doxylatex.pdf</b> with the documentation <p>This should generate a `doxylatex.pdf` with the documentation
in PDF format. in PDF format.
<li>Run: <li>Run:
<pre>make dvi</pre> <pre>make dvi</pre>
<p>This should generate a <b>doxylatex.dvi</b> with the documentation <p>This should generate a `doxylatex.dvi` with the documentation
in DVI format. in DVI format.
</ol> </ol>
...@@ -136,29 +137,29 @@ in DVI format. ...@@ -136,29 +137,29 @@ in DVI format.
\section doxydocs_format Documentation format. \section doxydocs_format Documentation format.
<p>The Perl Module documentation generated by Doxygen is stored in <p>The Perl Module documentation generated by Doxygen is stored in
<b>DoxyDocs.pm</b>. This is a very simple Perl module that contains `DoxyDocs.pm`. This is a very simple Perl module that contains
only two statements: an assignment to the variable <b>$doxydocs</b> and only two statements: an assignment to the variable `$doxydocs` and
the customary <b>1;</b> statement which usually ends Perl modules. the customary `1;` statement which usually ends Perl modules.
The documentation is stored in the variable <b>$doxydocs</b>, which The documentation is stored in the variable `$doxydocs`, which
can then be accessed by a Perl script using <b>DoxyDocs.pm</b>. can then be accessed by a Perl script using `DoxyDocs.pm`.
<p><b>$doxydocs</b> contains a tree-like structure composed of three <p>`$doxydocs` contains a tree-like structure composed of three
types of nodes: strings, hashes and lists. types of nodes: strings, hashes and lists.
<ul> <ul>
<li><b>Strings</b>. These are normal Perl strings. They can be of <li>`Strings`: These are normal Perl strings. They can be of
any length can contain any character. Their semantics depends on any length can contain any character. Their semantics depends on
their location within the tree. This type of node has no children. their location within the tree. This type of node has no children.
<li><b>Hashes</b>. These are references to anonymous Perl hashes. A <li>`Hashes`: These are references to anonymous Perl hashes. A
hash can have multiple fields, each with a different key. The value hash can have multiple fields, each with a different key. The value
of a hash field can be a string, a hash or a list, and its semantics of a hash field can be a string, a hash or a list, and its semantics
depends on the key of the hash field and the location of the hash depends on the key of the hash field and the location of the hash
within the tree. The values of the hash fields are the children of within the tree. The values of the hash fields are the children of
the node. the node.
<li><b>Lists</b>. These are references to anonymous Perl lists. A <li>`Lists`: These are references to anonymous Perl lists. A
list has an undefined number of elements, which are the children of list has an undefined number of elements, which are the children of
the node. Each element has the same type (string, hash or list) and the node. Each element has the same type (string, hash or list) and
the same semantics, depending on the location of the list within the the same semantics, depending on the location of the list within the
...@@ -166,12 +167,12 @@ tree. ...@@ -166,12 +167,12 @@ tree.
</ul> </ul>
<p>As you can see, the documentation contained in <b>$doxydocs</b> <p>As you can see, the documentation contained in `$doxydocs`
does not present any special impediment to be processed by a simple does not present any special impediment to be processed by a simple
Perl script. Perl script.
<!-- <!--
To be able to generate meaningful output using the To be able to generate meaningful output using the
documentation contained in <b>$doxydocs</b> you'll probably need to documentation contained in `$doxydocs` you'll probably need to
know the semantics of the nodes of the documentation tree, which we know the semantics of the nodes of the documentation tree, which we
present in \ref perlmod_tree "this page". present in \ref perlmod_tree "this page".
--> -->
...@@ -179,16 +180,16 @@ present in \ref perlmod_tree "this page". ...@@ -179,16 +180,16 @@ present in \ref perlmod_tree "this page".
\section doxymodel_format Data structure \section doxymodel_format Data structure
<p>You might be interested in processing the documentation contained <p>You might be interested in processing the documentation contained
in <b>DoxyDocs.pm</b> without needing to take into account the in `DoxyDocs.pm` without needing to take into account the
semantics of each node of the documentation tree. For this purpose, semantics of each node of the documentation tree. For this purpose,
Doxygen generates a <b>DoxyModel.pm</b> file which contains a data Doxygen generates a `DoxyModel.pm` file which contains a data
structure describing the type and children of each node in the structure describing the type and children of each node in the
documentation tree. documentation tree.
<p>The rest of this section is to be written yet, but in the meantime <p>The rest of this section is to be written yet, but in the meantime
you can look at the Perl scripts generated by Doxygen (such as you can look at the Perl scripts generated by Doxygen (such as
<b>doxylatex.pl</b> or <b>doxytemplate-latex.pl</b>) to get an idea on `doxylatex.pl` or `doxytemplate-latex.pl`) to get an idea on
how to use <b>DoxyModel.pm</b>. how to use `DoxyModel.pm`.
\htmlonly \htmlonly
......
...@@ -59,7 +59,7 @@ has its own advantages and disadvantages: ...@@ -59,7 +59,7 @@ has its own advantages and disadvantages:
Advantages over the client side search engine are that it provides full Advantages over the client side search engine are that it provides full
text search and it scales well to medium side projects. text search and it scales well to medium side projects.
Disadvantages are that it does not work locally (i.e. using a file:// URL) Disadvantages are that it does not work locally (i.e. using a "file://" URL)
and that it does not provide live search capabilities. and that it does not provide live search capabilities.
@note In the future this option will probably be replaced by the next @note In the future this option will probably be replaced by the next
...@@ -80,7 +80,7 @@ has its own advantages and disadvantages: ...@@ -80,7 +80,7 @@ has its own advantages and disadvantages:
\ref cfg_server_based_search "SERVER_BASED_SEARCH" and \ref cfg_server_based_search "SERVER_BASED_SEARCH" and
\ref cfg_external_search "EXTERNAL_SEARCH" all to \c YES. \ref cfg_external_search "EXTERNAL_SEARCH" all to \c YES.
See \ref extsearch for configuration details. See \subpage extsearch for configuration details.
Advantages over option 2 are that this method (potentially) scales to Advantages over option 2 are that this method (potentially) scales to
very large projects. It is also possible to combine multiple doxygen very large projects. It is also possible to combine multiple doxygen
...@@ -126,7 +126,7 @@ has its own advantages and disadvantages: ...@@ -126,7 +126,7 @@ has its own advantages and disadvantages:
options you may want to set. After doxygen has finished you will find options you may want to set. After doxygen has finished you will find
a Makefile in the HTML output directory. Running "make install" on this a Makefile in the HTML output directory. Running "make install" on this
Makefile will compile and install the doc set. Makefile will compile and install the doc set.
See <a href="http://developer.apple.com/tools/creatingdocsetswithdoxygen.html">this See <a href="https://developer.apple.com/library/mac/#featuredarticles/DoxygenXcode/_index.html">this
article</a> for more info. article</a> for more info.
Advantage of this method is that it nicely integrates with the Xcode Advantage of this method is that it nicely integrates with the Xcode
...@@ -139,7 +139,7 @@ has its own advantages and disadvantages: ...@@ -139,7 +139,7 @@ has its own advantages and disadvantages:
<h2>6. Qt Compressed Help</h2> <h2>6. Qt Compressed Help</h2>
If you develop for or want to install the Qt application framework, If you develop for or want to install the Qt application framework,
you will get an application you will get an application
called <a href="http://doc.trolltech.com/4.6/assistant-manual.html">Qt assistant</a>. called <a href="http://qt-project.org/doc/qt-4.8/assistant-manual.html">Qt assistant</a>.
This is a help viewer for Qt Compressed Help files (.qch). This is a help viewer for Qt Compressed Help files (.qch).
To enable this feature set \ref cfg_generate_qhp "GENERATE_QHP" to \c YES. To enable this feature set \ref cfg_generate_qhp "GENERATE_QHP" to \c YES.
...@@ -147,7 +147,7 @@ has its own advantages and disadvantages: ...@@ -147,7 +147,7 @@ has its own advantages and disadvantages:
\ref cfg_qhp_namespace "QHP_NAMESPACE", \ref cfg_qhp_namespace "QHP_NAMESPACE",
\ref cfg_qhg_location "QHG_LOCATION", \ref cfg_qhg_location "QHG_LOCATION",
\ref cfg_qhp_virtual_folder "QHP_VIRTUAL_FOLDER". \ref cfg_qhp_virtual_folder "QHP_VIRTUAL_FOLDER".
See <a href="http://doc.trolltech.com/qq/qq28-qthelp.html#htmlfilesandhelpprojects">this article</a> See <a href="http://doc.qt.digia.com/qq/qq28-qthelp.html#htmlfilesandhelpprojects">this article</a>
for more info. for more info.
Feature wise the Qt compressed help feature is comparable with the CHM Feature wise the Qt compressed help feature is comparable with the CHM
......
...@@ -1714,7 +1714,7 @@ class TrManager: ...@@ -1714,7 +1714,7 @@ class TrManager:
in the Translator class but their identifiers do not appear in the Translator class but their identifiers do not appear
in source files. The situation should be checked. The .cpp in source files. The situation should be checked. The .cpp
files and .h files excluding the '*translator*' files files and .h files excluding the '*translator*' files
in doxygen/src directory were simply searched for occurence in doxygen/src directory were simply searched for occurrence
of the method identifiers:''' of the method identifiers:'''
f.write('\n' + '=' * 70 + '\n') f.write('\n' + '=' * 70 + '\n')
f.write(fill(s) + '\n\n') f.write(fill(s) + '\n\n')
......
This diff is collapsed.
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
\endverbatim \endverbatim
then doxygen will remove the braces and correctly parse the result. then doxygen will remove the braces and correctly parse the result.
<li>Not all names in code fragments that are included in the documentation <li>Not all names in code fragments that are included in the documentation
are replaced by links (for instance when using \c SOURCE_BROWSER = \c YES) are replaced by links (for instance when using \ref cfg_source_browser "SOURCE_BROWSER" = `YES`)
and links to overloaded members may point to the wrong member. and links to overloaded members may point to the wrong member.
This also holds for the "Referenced by" list that is generated for This also holds for the "Referenced by" list that is generated for
each function. each function.
...@@ -62,7 +62,8 @@ ...@@ -62,7 +62,8 @@
documentation, because of possible ambiguities or lack of documentation, because of possible ambiguities or lack of
information about the context in which the code fragment is found. information about the context in which the code fragment is found.
<li>It is not possible to insert a non-member function f in a class A <li>It is not possible to insert a non-member function f in a class A
using the \\relates or \\relatesalso command, if class A already using the \ref cmdrelates "\\relates" or \ref cmdrelatesalso "\\relatesalso"
command, if class A already
has a member with name f and the same argument list. has a member with name f and the same argument list.
<li>There is only very limited support for member specialization at the <li>There is only very limited support for member specialization at the
moment. It only works if there is a specialized template class as moment. It only works if there is a specialized template class as
......
...@@ -128,6 +128,7 @@ REFERENCES_LINK_SOURCE = YES ...@@ -128,6 +128,7 @@ REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO USE_HTAGS = NO
VERBATIM_HEADERS = YES VERBATIM_HEADERS = YES
CLANG_ASSISTED_PARSING = YES CLANG_ASSISTED_PARSING = YES
CLANG_OPTIONS =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the alphabetical class index # configuration options related to the alphabetical class index
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -184,6 +185,7 @@ USE_MATHJAX = NO ...@@ -184,6 +185,7 @@ USE_MATHJAX = NO
MATHJAX_FORMAT = HTML-CSS MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS = MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = YES SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO SERVER_BASED_SEARCH = NO
EXTERNAL_SEARCH = NO EXTERNAL_SEARCH = NO
......
*~
.*sw?
\#*
.DS_Store
*.rej
*.orig
Makefile
*.pro
/.makeconfig
/.tmakeconfig
/VERSION
/src/libdoxycfg.t
/src/libdoxygen.t
/packages/rpm/doxygen.spec
/libmd5/Makefile.libmd5
/qtools/Makefile.qtools
/src/Makefile.doxygen
/src/Makefile.libdoxycfg
/src/Makefile.libdoxygen
/bin
/lib
/objects
/src/ce_lex.cpp
/src/ce_parse.cpp
/src/ce_parse.h
/src/code.cpp
/src/commentcnv.cpp
/src/commentscan.cpp
/src/config.cpp
/src/declinfo.cpp
/src/defargs.cpp
/src/doctokenizer.cpp
/src/fortrancode.cpp
/src/fortranscanner.cpp
/src/pre.cpp
/src/pycode.cpp
/src/pyscanner.cpp
/src/scanner.cpp
/src/tclscanner.cpp
/src/version.cpp
/src/vhdlcode.cpp
/src/vhdlparser.cpp
/src/vhdlparser.h
/src/vhdlscanner.cpp
...@@ -122,6 +122,19 @@ static QStrList getClangOptions() ...@@ -122,6 +122,19 @@ static QStrList getClangOptions()
return options; return options;
} }
#if 0
static void inclusionVisitor(CXFile includedFile,
CXSourceLocation* inclusionStack,
unsigned includeLen,
CXClientData clientData)
{
const char *fileName = (const char *)clientData;
CXString incFileName = clang_getFileName(includedFile);
printf("--- file %s includes %s\n",fileName,clang_getCString(incFileName));
clang_disposeString(incFileName);
}
#endif
void ClangParser::start(const char *fileName) void ClangParser::start(const char *fileName)
{ {
static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING"); static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
...@@ -177,6 +190,10 @@ void ClangParser::start(const char *fileName) ...@@ -177,6 +190,10 @@ void ClangParser::start(const char *fileName)
if (p->tu) if (p->tu)
{ {
//clang_getInclusions(p->tu,
// inclusionVisitor,
// (CXClientData)fileName
// );
for (uint i=0, n=clang_getNumDiagnostics(p->tu); i!=n; ++i) for (uint i=0, n=clang_getNumDiagnostics(p->tu); i!=n; ++i)
{ {
CXDiagnostic diag = clang_getDiagnostic(p->tu, i); CXDiagnostic diag = clang_getDiagnostic(p->tu, i);
...@@ -610,7 +627,7 @@ void ClangParser::writeSources(OutputList &ol,FileDef *fd) ...@@ -610,7 +627,7 @@ void ClangParser::writeSources(OutputList &ol,FileDef *fd)
char const *s = clang_getCString(tokenString); char const *s = clang_getCString(tokenString);
CXCursorKind cursorKind = clang_getCursorKind(p->cursors[i]); CXCursorKind cursorKind = clang_getCursorKind(p->cursors[i]);
CXTokenKind tokenKind = clang_getTokenKind(p->tokens[i]); CXTokenKind tokenKind = clang_getTokenKind(p->tokens[i]);
printf("%d:%d %s cursorKind=%d tokenKind=%d\n",line,column,s,cursorKind,tokenKind); //printf("%d:%d %s cursorKind=%d tokenKind=%d\n",line,column,s,cursorKind,tokenKind);
switch (tokenKind) switch (tokenKind)
{ {
case CXToken_Keyword: case CXToken_Keyword:
......
...@@ -187,7 +187,7 @@ class ClassDefImpl ...@@ -187,7 +187,7 @@ class ClassDefImpl
bool isGeneric; bool isGeneric;
int spec; uint64 spec;
}; };
void ClassDefImpl::init(const char *defFileName, const char *name, void ClassDefImpl::init(const char *defFileName, const char *name,
...@@ -435,6 +435,12 @@ void ClassDef::internalInsertMember(MemberDef *md, ...@@ -435,6 +435,12 @@ void ClassDef::internalInsertMember(MemberDef *md,
{ {
switch (md->memberType()) switch (md->memberType())
{ {
case MemberType_Service: // UNO IDL
addMemberToList(MemberListType_services,md,TRUE);
break;
case MemberType_Interface: // UNO IDL
addMemberToList(MemberListType_interfaces,md,TRUE);
break;
case MemberType_Signal: // Qt specific case MemberType_Signal: // Qt specific
addMemberToList(MemberListType_signals,md,TRUE); addMemberToList(MemberListType_signals,md,TRUE);
break; break;
...@@ -581,6 +587,12 @@ void ClassDef::internalInsertMember(MemberDef *md, ...@@ -581,6 +587,12 @@ void ClassDef::internalInsertMember(MemberDef *md,
{ {
switch (md->memberType()) switch (md->memberType())
{ {
case MemberType_Service: // UNO IDL
addMemberToList(MemberListType_serviceMembers,md,FALSE);
break;
case MemberType_Interface: // UNO IDL
addMemberToList(MemberListType_interfaceMembers,md,FALSE);
break;
case MemberType_Property: case MemberType_Property:
addMemberToList(MemberListType_propertyMembers,md,FALSE); addMemberToList(MemberListType_propertyMembers,md,FALSE);
break; break;
...@@ -1035,6 +1047,14 @@ void ClassDef::showUsedFiles(OutputList &ol) ...@@ -1035,6 +1047,14 @@ void ClassDef::showUsedFiles(OutputList &ol)
{ {
ol.parseText(theTranslator->trEnumGeneratedFromFiles(m_impl->files.count()==1)); ol.parseText(theTranslator->trEnumGeneratedFromFiles(m_impl->files.count()==1));
} }
else if (m_impl->compType==Service)
{
ol.parseText(theTranslator->trServiceGeneratedFromFiles(m_impl->files.count()==1));
}
else if (m_impl->compType==Singleton)
{
ol.parseText(theTranslator->trSingletonGeneratedFromFiles(m_impl->files.count()==1));
}
else else
{ {
ol.parseText(theTranslator->trGeneratedFromFiles( ol.parseText(theTranslator->trGeneratedFromFiles(
...@@ -1811,6 +1831,7 @@ void ClassDef::addClassAttributes(OutputList &ol) ...@@ -1811,6 +1831,7 @@ void ClassDef::addClassAttributes(OutputList &ol)
if (isFinal()) sl.append("final"); if (isFinal()) sl.append("final");
if (isSealed()) sl.append("sealed"); if (isSealed()) sl.append("sealed");
if (isAbstract()) sl.append("abstract"); if (isAbstract()) sl.append("abstract");
if (getLanguage()==SrcLangExt_IDL && isPublished()) sl.append("published");
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
...@@ -1923,10 +1944,12 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page ...@@ -1923,10 +1944,12 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
writeAuthorSection(ol); writeAuthorSection(ol);
break; break;
case LayoutDocEntry::NamespaceNestedNamespaces: case LayoutDocEntry::NamespaceNestedNamespaces:
case LayoutDocEntry::NamespaceNestedConstantGroups:
case LayoutDocEntry::NamespaceClasses: case LayoutDocEntry::NamespaceClasses:
case LayoutDocEntry::NamespaceInlineClasses: case LayoutDocEntry::NamespaceInlineClasses:
case LayoutDocEntry::FileClasses: case LayoutDocEntry::FileClasses:
case LayoutDocEntry::FileNamespaces: case LayoutDocEntry::FileNamespaces:
case LayoutDocEntry::FileConstantGroups:
case LayoutDocEntry::FileIncludes: case LayoutDocEntry::FileIncludes:
case LayoutDocEntry::FileIncludeGraph: case LayoutDocEntry::FileIncludeGraph:
case LayoutDocEntry::FileIncludedByGraph: case LayoutDocEntry::FileIncludedByGraph:
...@@ -1980,6 +2003,14 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1980,6 +2003,14 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
pageTitle = theTranslator->trEnumReference(displayName()); pageTitle = theTranslator->trEnumReference(displayName());
} }
else if (m_impl->compType==Service)
{
pageTitle = theTranslator->trServiceReference(displayName());
}
else if (m_impl->compType==Singleton)
{
pageTitle = theTranslator->trSingletonReference(displayName());
}
else else
{ {
pageTitle = theTranslator->trCompoundReference(displayName(), pageTitle = theTranslator->trCompoundReference(displayName(),
...@@ -2288,6 +2319,8 @@ void ClassDef::writeMemberList(OutputList &ol) ...@@ -2288,6 +2319,8 @@ void ClassDef::writeMemberList(OutputList &ol)
md->isFriend() || md->isRelated() || md->isExplicit() || md->isFriend() || md->isRelated() || md->isExplicit() ||
md->isMutable() || (md->isInline() && Config_getBool("INLINE_INFO")) || md->isMutable() || (md->isInline() && Config_getBool("INLINE_INFO")) ||
md->isSignal() || md->isSlot() || md->isSignal() || md->isSlot() ||
(getLanguage()==SrcLangExt_IDL &&
(md->isOptional() || md->isAttribute() || md->isUNOProperty())) ||
md->isStatic() || lang==SrcLangExt_VHDL md->isStatic() || lang==SrcLangExt_VHDL
) )
&& memberWritten) && memberWritten)
...@@ -2315,6 +2348,18 @@ void ClassDef::writeMemberList(OutputList &ol) ...@@ -2315,6 +2348,18 @@ void ClassDef::writeMemberList(OutputList &ol)
if (md->isStatic()) sl.append("static"); if (md->isStatic()) sl.append("static");
if (md->isSignal()) sl.append("signal"); if (md->isSignal()) sl.append("signal");
if (md->isSlot()) sl.append("slot"); if (md->isSlot()) sl.append("slot");
// this is the extra member page
if (md->isOptional()) sl.append("optional");
if (md->isAttribute()) sl.append("attribute");
if (md->isUNOProperty()) sl.append("property");
if (md->isReadonly()) sl.append("readonly");
if (md->isBound()) sl.append("bound");
if (md->isRemovable()) sl.append("removable");
if (md->isConstrained()) sl.append("constrained");
if (md->isTransient()) sl.append("transient");
if (md->isMaybeVoid()) sl.append("maybevoid");
if (md->isMaybeDefault()) sl.append("maybedefault");
if (md->isMaybeAmbiguous())sl.append("maybeambiguous");
} }
const char *s=sl.first(); const char *s=sl.first();
while (s) while (s)
...@@ -3159,7 +3204,7 @@ void ClassDef::determineImplUsageRelation() ...@@ -3159,7 +3204,7 @@ void ClassDef::determineImplUsageRelation()
cd=getResolvedClass(getNamespaceDef()->name()+"::"+usedClassName,0,&templSpec); cd=getResolvedClass(getNamespaceDef()->name()+"::"+usedClassName,0,&templSpec);
} }
if (cd==0) cd=getResolvedClass(name()+"::"+usedClassName,0,&templSpec); if (cd==0) cd=getResolvedClass(name()+"::"+usedClassName,0,&templSpec);
if (cd==0) cd=getResolvedClass(usedClassName,0,&templSpec); // TODO: also try inbetween scopes! if (cd==0) cd=getResolvedClass(usedClassName,0,&templSpec); // TODO: also try in-between scopes!
//printf("Search for class %s result=%p\n",usedClassName.data(),cd); //printf("Search for class %s result=%p\n",usedClassName.data(),cd);
if (cd) // class exists if (cd) // class exists
{ {
...@@ -3221,7 +3266,7 @@ void ClassDef::addUsedInterfaceClasses(MemberDef *md,const char *typeStr) ...@@ -3221,7 +3266,7 @@ void ClassDef::addUsedInterfaceClasses(MemberDef *md,const char *typeStr)
while ((i=re.match(type,p,&l))!=-1) // for each class name in the type while ((i=re.match(type,p,&l))!=-1) // for each class name in the type
{ {
ClassDef *cd=getClass(name()+"::"+type.mid(i,l)); ClassDef *cd=getClass(name()+"::"+type.mid(i,l));
if (cd==0) cd=getClass(type.mid(i,l)); // TODO: also try inbetween scopes! if (cd==0) cd=getClass(type.mid(i,l)); // TODO: also try in-between scopes!
if (cd && cd!=this && !isBaseClass(cd)) if (cd && cd!=this && !isBaseClass(cd))
{ {
if (m_impl->usesIntfClassDict==0) if (m_impl->usesIntfClassDict==0)
...@@ -3317,6 +3362,8 @@ QCString ClassDef::compoundTypeString() const ...@@ -3317,6 +3362,8 @@ QCString ClassDef::compoundTypeString() const
case Protocol: return "protocol"; case Protocol: return "protocol";
case Category: return "category"; case Category: return "category";
case Exception: return "exception"; case Exception: return "exception";
case Service: return "service";
case Singleton: return "singleton";
default: return "unknown"; default: return "unknown";
} }
} }
...@@ -4337,6 +4384,11 @@ bool ClassDef::isSealed() const ...@@ -4337,6 +4384,11 @@ bool ClassDef::isSealed() const
return m_impl->spec&Entry::Sealed; return m_impl->spec&Entry::Sealed;
} }
bool ClassDef::isPublished() const
{
return m_impl->spec&Entry::Published;
}
bool ClassDef::isObjectiveC() const bool ClassDef::isObjectiveC() const
{ {
return getLanguage()==SrcLangExt_ObjC; return getLanguage()==SrcLangExt_ObjC;
...@@ -4537,7 +4589,7 @@ bool ClassDef::isGeneric() const ...@@ -4537,7 +4589,7 @@ bool ClassDef::isGeneric() const
return m_impl->isGeneric; return m_impl->isGeneric;
} }
void ClassDef::setClassSpecifier(int spec) void ClassDef::setClassSpecifier(uint64 spec)
{ {
m_impl->spec = spec; m_impl->spec = spec;
} }
......
...@@ -48,7 +48,8 @@ class ArgumentList; ...@@ -48,7 +48,8 @@ class ArgumentList;
/** A class representing of a compound symbol. /** A class representing of a compound symbol.
* *
* A compound can be a class, struct, union, interface, or exception. * A compound can be a class, struct, union, interface, service, singleton,
* or exception.
* \note This class should be renamed to CompoundDef * \note This class should be renamed to CompoundDef
*/ */
class ClassDef : public Definition class ClassDef : public Definition
...@@ -61,7 +62,9 @@ class ClassDef : public Definition ...@@ -61,7 +62,9 @@ class ClassDef : public Definition
Interface, //=Entry::INTERFACE_SEC, Interface, //=Entry::INTERFACE_SEC,
Protocol, //=Entry::PROTOCOL_SEC, Protocol, //=Entry::PROTOCOL_SEC,
Category, //=Entry::CATEGORY_SEC, Category, //=Entry::CATEGORY_SEC,
Exception //=Entry::EXCEPTION_SEC Exception, //=Entry::EXCEPTION_SEC
Service, //=Entry::CLASS_SEC
Singleton, //=Entry::CLASS_SEC
}; };
/** Creates a new compound definition. /** Creates a new compound definition.
...@@ -256,6 +259,9 @@ class ClassDef : public Definition ...@@ -256,6 +259,9 @@ class ClassDef : public Definition
/** Returns TRUE if this class is marked as sealed */ /** Returns TRUE if this class is marked as sealed */
bool isSealed() const; bool isSealed() const;
/** Returns TRUE if this class is marked as published */
bool isPublished() const;
/** Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category) */ /** Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category) */
bool isExtension() const; bool isExtension() const;
...@@ -320,7 +326,7 @@ class ClassDef : public Definition ...@@ -320,7 +326,7 @@ class ClassDef : public Definition
void setIsStatic(bool b); void setIsStatic(bool b);
void setCompoundType(CompoundType t); void setCompoundType(CompoundType t);
void setClassName(const char *name); void setClassName(const char *name);
void setClassSpecifier(int spec); void setClassSpecifier(uint64 spec);
void setTemplateArguments(ArgumentList *al); void setTemplateArguments(ArgumentList *al);
void setTemplateBaseClassNames(QDict<int> *templateNames); void setTemplateBaseClassNames(QDict<int> *templateNames);
......
...@@ -43,12 +43,6 @@ ...@@ -43,12 +43,6 @@
#define ADDCHAR(c) g_outBuf->addChar(c) #define ADDCHAR(c) g_outBuf->addChar(c)
#define ADDARRAY(a,s) g_outBuf->addArray(a,s) #define ADDARRAY(a,s) g_outBuf->addArray(a,s)
enum GuardType
{
Guard_Cond,
Guard_CondNot
};
struct CondCtx struct CondCtx
{ {
CondCtx(int line,QCString id,bool b) CondCtx(int line,QCString id,bool b)
...@@ -85,8 +79,6 @@ static bool g_lastEscaped; ...@@ -85,8 +79,6 @@ static bool g_lastEscaped;
static int g_lastBlockContext; static int g_lastBlockContext;
static bool g_pythonDocString; static bool g_pythonDocString;
static GuardType guardType; // kind of guard for conditional section
static SrcLangExt g_lang; static SrcLangExt g_lang;
static bool isFixedForm; // For Fortran static bool isFixedForm; // For Fortran
...@@ -181,23 +173,14 @@ static inline void copyToOutput(const char *s,int len) ...@@ -181,23 +173,14 @@ static inline void copyToOutput(const char *s,int len)
static void startCondSection(const char *sectId) static void startCondSection(const char *sectId)
{ {
//printf("startCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count());
CondParser prs; CondParser prs;
bool expResult = prs.parse(g_fileName,g_lineNr,sectId); bool expResult = prs.parse(g_fileName,g_lineNr,sectId);
g_condStack.push(new CondCtx(g_lineNr,sectId,g_skip)); g_condStack.push(new CondCtx(g_lineNr,sectId,g_skip));
if (guardType == Guard_Cond) // found @cond
{
if (!expResult) // not enabled if (!expResult) // not enabled
{ {
g_skip=TRUE; g_skip=TRUE;
} }
}
else if (guardType == Guard_CondNot) // found @notcond
{
if (expResult) // enabled
{
g_skip=TRUE;
}
}
} }
static void endCondSection() static void endCondSection()
...@@ -212,6 +195,7 @@ static void endCondSection() ...@@ -212,6 +195,7 @@ static void endCondSection()
CondCtx *ctx = g_condStack.pop(); CondCtx *ctx = g_condStack.pop();
g_skip=ctx->skip; g_skip=ctx->skip;
} }
//printf("endCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count());
} }
/** copies string \a s with length \a len to the output, while /** copies string \a s with length \a len to the output, while
...@@ -721,7 +705,6 @@ void replaceComment(int offset); ...@@ -721,7 +705,6 @@ void replaceComment(int offset);
} }
<CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section <CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section
g_condCtx = YY_START; g_condCtx = YY_START;
guardType = Guard_Cond;
BEGIN(CondLine); BEGIN(CondLine);
} }
<CComment,ReadLine>[\\@]"endcond"/[^a-z_A-Z0-9] { // end of conditional section <CComment,ReadLine>[\\@]"endcond"/[^a-z_A-Z0-9] { // end of conditional section
...@@ -769,7 +752,6 @@ void replaceComment(int offset); ...@@ -769,7 +752,6 @@ void replaceComment(int offset);
<CondLine>[ \t]* <CondLine>[ \t]*
<CComment,ReadLine>[\\@]"cond"[ \t\r]*/\n | <CComment,ReadLine>[\\@]"cond"[ \t\r]*/\n |
<CondLine>. { // forgot section id? <CondLine>. { // forgot section id?
guardType = Guard_Cond;
if (YY_START!=CondLine) g_condCtx=YY_START; if (YY_START!=CondLine) g_condCtx=YY_START;
bool oldSkip=g_skip; bool oldSkip=g_skip;
startCondSection(" "); // fake section id causing the section to be hidden unconditionally startCondSection(" "); // fake section id causing the section to be hidden unconditionally
......
...@@ -665,7 +665,7 @@ static void stripTrailingWhiteSpace(QCString &s) ...@@ -665,7 +665,7 @@ static void stripTrailingWhiteSpace(QCString &s)
while (i>=0 && ((c = s.at(i))==' ' || c=='\t' || c=='\r')) i--; while (i>=0 && ((c = s.at(i))==' ' || c=='\t' || c=='\r')) i--;
if (i!=(int)len-1) if (i!=(int)len-1)
{ {
s.resize(i+2); // string upto and including char at pos i and \0 terminator s.resize(i+2); // string up to and including char at pos i and \0 terminator
} }
} }
...@@ -877,7 +877,7 @@ LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]* ...@@ -877,7 +877,7 @@ LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]* CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?) SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?)
SCOPENAME "$"?(({ID}?{BN}*("::"|"."){BN}*)*)((~{BN}*)?{ID}) SCOPENAME "$"?(({ID}?{BN}*("::"|"."){BN}*)*)((~{BN}*)?{ID})
MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+ MAILADDR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
RCSTAG "$"{ID}":"[^\n$]+"$" RCSTAG "$"{ID}":"[^\n$]+"$"
%option noyywrap %option noyywrap
...@@ -939,7 +939,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" ...@@ -939,7 +939,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
* words and whitespace and other characters (#,?!, etc). * words and whitespace and other characters (#,?!, etc).
* grouping commands (e.g. @{ and @}) * grouping commands (e.g. @{ and @})
* language switch (e.g. \~english or \~). * language switch (e.g. \~english or \~).
* mail adress (e.g. dimitri@stack.nl). * mail address (e.g. dimitri@stack.nl).
* quoted text, such as "foo@bar" * quoted text, such as "foo@bar"
* XML commands, <summary></summary><remarks></remarks> * XML commands, <summary></summary><remarks></remarks>
*/ */
...@@ -950,7 +950,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" ...@@ -950,7 +950,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<Comment>{CMD}{CMD}"~"[a-z_A-Z]* { // escaped command <Comment>{CMD}{CMD}"~"[a-z_A-Z]* { // escaped command
addOutput(yytext); addOutput(yytext);
} }
<Comment>{MAILADR} { // mail adress <Comment>{MAILADDR} { // mail address
addOutput(yytext); addOutput(yytext);
} }
<Comment>"\""[^"\n]*"\"" { // quoted text <Comment>"\""[^"\n]*"\"" { // quoted text
......
...@@ -172,6 +172,18 @@ ...@@ -172,6 +172,18 @@
<xsd:attribute name="required" type="DoxBool" use="optional"/> <xsd:attribute name="required" type="DoxBool" use="optional"/>
<!-- Objective-C 2.0 property accessor --> <!-- Objective-C 2.0 property accessor -->
<xsd:attribute name="accessor" type="DoxAccessor" use="optional"/> <xsd:attribute name="accessor" type="DoxAccessor" use="optional"/>
<!-- UNO IDL -->
<xsd:attribute name="attribute" type="DoxBool" use="optional"/>
<xsd:attribute name="property" type="DoxBool" use="optional"/>
<xsd:attribute name="readonly" type="DoxBool" use="optional"/>
<xsd:attribute name="bound" type="DoxBool" use="optional"/>
<xsd:attribute name="removable" type="DoxBool" use="optional"/>
<xsd:attribute name="contrained" type="DoxBool" use="optional"/>
<xsd:attribute name="transient" type="DoxBool" use="optional"/>
<xsd:attribute name="maybevoid" type="DoxBool" use="optional"/>
<xsd:attribute name="maybedefault" type="DoxBool" use="optional"/>
<xsd:attribute name="maybeambiguous" type="DoxBool" use="optional"/>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="descriptionType" mixed="true"> <xsd:complexType name="descriptionType" mixed="true">
...@@ -742,6 +754,8 @@ ...@@ -742,6 +754,8 @@
<xsd:enumeration value="friend" /> <xsd:enumeration value="friend" />
<xsd:enumeration value="dcop" /> <xsd:enumeration value="dcop" />
<xsd:enumeration value="slot" /> <xsd:enumeration value="slot" />
<xsd:enumeration value="interface" />
<xsd:enumeration value="service" />
</xsd:restriction> </xsd:restriction>
</xsd:simpleType> </xsd:simpleType>
...@@ -771,6 +785,10 @@ ...@@ -771,6 +785,10 @@
<xsd:enumeration value="protocol" /> <xsd:enumeration value="protocol" />
<xsd:enumeration value="category" /> <xsd:enumeration value="category" />
<xsd:enumeration value="exception" /> <xsd:enumeration value="exception" />
<xsd:enumeration value="service" />
<xsd:enumeration value="singleton" />
<xsd:enumeration value="module" />
<xsd:enumeration value="type" />
<xsd:enumeration value="file" /> <xsd:enumeration value="file" />
<xsd:enumeration value="namespace" /> <xsd:enumeration value="namespace" />
<xsd:enumeration value="group" /> <xsd:enumeration value="group" />
......
...@@ -172,6 +172,18 @@ ...@@ -172,6 +172,18 @@
" <xsd:attribute name=\"required\" type=\"DoxBool\" use=\"optional\"/>\n" " <xsd:attribute name=\"required\" type=\"DoxBool\" use=\"optional\"/>\n"
" <!-- Objective-C 2.0 property accessor -->\n" " <!-- Objective-C 2.0 property accessor -->\n"
" <xsd:attribute name=\"accessor\" type=\"DoxAccessor\" use=\"optional\"/>\n" " <xsd:attribute name=\"accessor\" type=\"DoxAccessor\" use=\"optional\"/>\n"
" <!-- UNO IDL -->\n"
" <xsd:attribute name=\"attribute\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"property\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"readonly\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"bound\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"removable\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"contrained\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"transient\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"maybevoid\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"maybedefault\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"maybeambiguous\" type=\"DoxBool\" use=\"optional\"/>\n"
"\n"
" </xsd:complexType>\n" " </xsd:complexType>\n"
"\n" "\n"
" <xsd:complexType name=\"descriptionType\" mixed=\"true\">\n" " <xsd:complexType name=\"descriptionType\" mixed=\"true\">\n"
...@@ -742,6 +754,8 @@ ...@@ -742,6 +754,8 @@
" <xsd:enumeration value=\"friend\" />\n" " <xsd:enumeration value=\"friend\" />\n"
" <xsd:enumeration value=\"dcop\" />\n" " <xsd:enumeration value=\"dcop\" />\n"
" <xsd:enumeration value=\"slot\" />\n" " <xsd:enumeration value=\"slot\" />\n"
" <xsd:enumeration value=\"interface\" />\n"
" <xsd:enumeration value=\"service\" />\n"
" </xsd:restriction>\n" " </xsd:restriction>\n"
" </xsd:simpleType>\n" " </xsd:simpleType>\n"
"\n" "\n"
...@@ -771,6 +785,10 @@ ...@@ -771,6 +785,10 @@
" <xsd:enumeration value=\"protocol\" />\n" " <xsd:enumeration value=\"protocol\" />\n"
" <xsd:enumeration value=\"category\" />\n" " <xsd:enumeration value=\"category\" />\n"
" <xsd:enumeration value=\"exception\" />\n" " <xsd:enumeration value=\"exception\" />\n"
" <xsd:enumeration value=\"service\" />\n"
" <xsd:enumeration value=\"singleton\" />\n"
" <xsd:enumeration value=\"module\" />\n"
" <xsd:enumeration value=\"type\" />\n"
" <xsd:enumeration value=\"file\" />\n" " <xsd:enumeration value=\"file\" />\n"
" <xsd:enumeration value=\"namespace\" />\n" " <xsd:enumeration value=\"namespace\" />\n"
" <xsd:enumeration value=\"group\" />\n" " <xsd:enumeration value=\"group\" />\n"
......
...@@ -67,6 +67,7 @@ class ConfigOption ...@@ -67,6 +67,7 @@ class ConfigOption
QCString dependsOn() const { return m_dependency; } QCString dependsOn() const { return m_dependency; }
void addDependency(const char *dep) { m_dependency = dep; } void addDependency(const char *dep) { m_dependency = dep; }
void setEncoding(const QCString &e) { m_encoding = e; } void setEncoding(const QCString &e) { m_encoding = e; }
void setUserComment(const QCString &u) { m_userComment = u; }
protected: protected:
virtual void writeTemplate(FTextStream &t,bool sl,bool upd) = 0; virtual void writeTemplate(FTextStream &t,bool sl,bool upd) = 0;
...@@ -75,7 +76,7 @@ class ConfigOption ...@@ -75,7 +76,7 @@ class ConfigOption
virtual void writeXML(FTextStream&) {} virtual void writeXML(FTextStream&) {}
virtual void init() {} virtual void init() {}
QCString convertToComment(const QCString &s); QCString convertToComment(const QCString &s, const QCString &u);
void writeBoolValue(FTextStream &t,bool v); void writeBoolValue(FTextStream &t,bool v);
void writeIntValue(FTextStream &t,int i); void writeIntValue(FTextStream &t,int i);
void writeStringValue(FTextStream &t,QCString &s); void writeStringValue(FTextStream &t,QCString &s);
...@@ -86,6 +87,7 @@ class ConfigOption ...@@ -86,6 +87,7 @@ class ConfigOption
QCString m_doc; QCString m_doc;
QCString m_dependency; QCString m_dependency;
QCString m_encoding; QCString m_encoding;
QCString m_userComment;
OptionType m_kind; OptionType m_kind;
}; };
...@@ -135,9 +137,13 @@ class ConfigList : public ConfigOption ...@@ -135,9 +137,13 @@ class ConfigList : public ConfigOption
if (!sl) if (!sl)
{ {
t << endl; t << endl;
t << convertToComment(m_doc); t << convertToComment(m_doc, m_userComment);
t << endl; t << endl;
} }
else if (!m_userComment.isEmpty())
{
t << convertToComment("", m_userComment);
}
t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "="; t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
writeStringList(t,m_value); writeStringList(t,m_value);
t << "\n"; t << "\n";
...@@ -175,9 +181,13 @@ class ConfigEnum : public ConfigOption ...@@ -175,9 +181,13 @@ class ConfigEnum : public ConfigOption
if (!sl) if (!sl)
{ {
t << endl; t << endl;
t << convertToComment(m_doc); t << convertToComment(m_doc, m_userComment);
t << endl; t << endl;
} }
else if (!m_userComment.isEmpty())
{
t << convertToComment("", m_userComment);
}
t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "="; t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
writeStringValue(t,m_value); writeStringValue(t,m_value);
t << "\n"; t << "\n";
...@@ -216,9 +226,13 @@ class ConfigString : public ConfigOption ...@@ -216,9 +226,13 @@ class ConfigString : public ConfigOption
if (!sl) if (!sl)
{ {
t << endl; t << endl;
t << convertToComment(m_doc); t << convertToComment(m_doc, m_userComment);
t << endl; t << endl;
} }
else if (!m_userComment.isEmpty())
{
t << convertToComment("", m_userComment);
}
t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "="; t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
writeStringValue(t,m_value); writeStringValue(t,m_value);
t << "\n"; t << "\n";
...@@ -259,9 +273,13 @@ class ConfigInt : public ConfigOption ...@@ -259,9 +273,13 @@ class ConfigInt : public ConfigOption
if (!sl) if (!sl)
{ {
t << endl; t << endl;
t << convertToComment(m_doc); t << convertToComment(m_doc, m_userComment);
t << endl; t << endl;
} }
else if (!m_userComment.isEmpty())
{
t << convertToComment("", m_userComment);
}
t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "="; t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
if (upd && !m_valueString.isEmpty()) if (upd && !m_valueString.isEmpty())
{ {
...@@ -306,9 +324,13 @@ class ConfigBool : public ConfigOption ...@@ -306,9 +324,13 @@ class ConfigBool : public ConfigOption
if (!sl) if (!sl)
{ {
t << endl; t << endl;
t << convertToComment(m_doc); t << convertToComment(m_doc, m_userComment);
t << endl; t << endl;
} }
else if (!m_userComment.isEmpty())
{
t << convertToComment("", m_userComment);
}
t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "="; t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
if (upd && !m_valueString.isEmpty()) if (upd && !m_valueString.isEmpty())
{ {
...@@ -570,6 +592,22 @@ class Config ...@@ -570,6 +592,22 @@ class Config
*/ */
void create(); void create();
/*! Append user comment
*/
void appendUserComment(const QCString &u)
{
m_userComment += u;
}
/*! Take the user comment and reset it internally
* \returns user comment
*/
QCString takeUserComment()
{
QCString result=m_userComment;
m_userComment.resize(0);
return result;
}
protected: protected:
Config() Config()
...@@ -594,6 +632,7 @@ class Config ...@@ -594,6 +632,7 @@ class Config
QList<ConfigOption> *m_obsolete; QList<ConfigOption> *m_obsolete;
QDict<ConfigOption> *m_dict; QDict<ConfigOption> *m_dict;
static Config *m_instance; static Config *m_instance;
QCString m_userComment;
bool m_initialized; bool m_initialized;
}; };
......
...@@ -77,11 +77,11 @@ static QCString configStringRecode( ...@@ -77,11 +77,11 @@ static QCString configStringRecode(
/* ----------------------------------------------------------------- /* -----------------------------------------------------------------
*/ */
QCString ConfigOption::convertToComment(const QCString &s) QCString ConfigOption::convertToComment(const QCString &s, const QCString &u)
{ {
//printf("convertToComment(%s)=%s\n",s.data(),u.data());
QCString result; QCString result;
if (s.isEmpty()) return result; if (!s.isEmpty())
else
{ {
QCString tmp=s.stripWhiteSpace(); QCString tmp=s.stripWhiteSpace();
char *p=tmp.data(); char *p=tmp.data();
...@@ -101,6 +101,11 @@ QCString ConfigOption::convertToComment(const QCString &s) ...@@ -101,6 +101,11 @@ QCString ConfigOption::convertToComment(const QCString &s)
} }
result+='\n'; result+='\n';
} }
if (!u.isEmpty())
{
if (!result.isEmpty()) result+='\n';
result+= u;
}
return result; return result;
} }
...@@ -589,6 +594,7 @@ static void readIncludeFile(const char *incName) ...@@ -589,6 +594,7 @@ static void readIncludeFile(const char *incName)
%% %%
<*>\0x0d <*>\0x0d
<Start,GetString,GetStrList,GetBool,SkipInvalid>"##".*"\n" { config->appendUserComment(yytext);}
<Start,GetString,GetStrList,GetBool,SkipInvalid>"#" { BEGIN(SkipComment); } <Start,GetString,GetStrList,GetBool,SkipInvalid>"#" { BEGIN(SkipComment); }
<Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"=" { QCString cmd=yytext; <Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"=" { QCString cmd=yytext;
cmd=cmd.left(cmd.length()-1).stripWhiteSpace(); cmd=cmd.left(cmd.length()-1).stripWhiteSpace();
...@@ -601,6 +607,7 @@ static void readIncludeFile(const char *incName) ...@@ -601,6 +607,7 @@ static void readIncludeFile(const char *incName)
} }
else // known tag else // known tag
{ {
option->setUserComment(config->takeUserComment());
option->setEncoding(encoding); option->setEncoding(encoding);
switch(option->kind()) switch(option->kind())
{ {
...@@ -654,6 +661,7 @@ static void readIncludeFile(const char *incName) ...@@ -654,6 +661,7 @@ static void readIncludeFile(const char *incName)
} }
else // known tag else // known tag
{ {
option->setUserComment(config->takeUserComment());
switch(option->kind()) switch(option->kind())
{ {
case ConfigOption::O_Info: case ConfigOption::O_Info:
...@@ -798,6 +806,8 @@ void Config::writeTemplate(FTextStream &t,bool sl,bool upd) ...@@ -798,6 +806,8 @@ void Config::writeTemplate(FTextStream &t,bool sl,bool upd)
t << "# This file describes the settings to be used by the documentation system\n"; t << "# This file describes the settings to be used by the documentation system\n";
t << "# doxygen (www.doxygen.org) for a project.\n"; t << "# doxygen (www.doxygen.org) for a project.\n";
t << "#\n"; t << "#\n";
t << "# All text after a double hash (##) is considered a comment and is placed\n";
t << "# in front of the TAG it is preceding .\n";
t << "# All text after a hash (#) is considered a comment and will be ignored.\n"; t << "# All text after a hash (#) is considered a comment and will be ignored.\n";
t << "# The format is:\n"; t << "# The format is:\n";
t << "# TAG = value [value, ...]\n"; t << "# TAG = value [value, ...]\n";
...@@ -811,6 +821,12 @@ void Config::writeTemplate(FTextStream &t,bool sl,bool upd) ...@@ -811,6 +821,12 @@ void Config::writeTemplate(FTextStream &t,bool sl,bool upd)
option->writeTemplate(t,sl,upd); option->writeTemplate(t,sl,upd);
option = m_options->next(); option = m_options->next();
} }
/* print last lines of user comment that were at the end of the file */
if (m_userComment)
{
t << "\n";
t << m_userComment;
}
} }
void Config::writeXML(FTextStream &t) void Config::writeXML(FTextStream &t)
...@@ -1130,6 +1146,21 @@ void Config::check() ...@@ -1130,6 +1146,21 @@ void Config::check()
exit(1); exit(1);
} }
} }
// Test to see if MathJax code file is valid
if (Config_getBool("USE_MATHJAX"))
{
QCString &MathJaxCodefile = Config_getString("MATHJAX_CODEFILE");
if (!MathJaxCodefile.isEmpty())
{
QFileInfo fi(MathJaxCodefile);
if (!fi.exists())
{
config_err("error: tag MATHJAX_CODEFILE file `%s' "
"does not exist\n",MathJaxCodefile.data());
exit(1);
}
}
}
// Test to see if LaTeX header is valid // Test to see if LaTeX header is valid
QCString &latexHeaderFile = Config_getString("LATEX_HEADER"); QCString &latexHeaderFile = Config_getString("LATEX_HEADER");
if (!latexHeaderFile.isEmpty()) if (!latexHeaderFile.isEmpty())
...@@ -1506,6 +1537,24 @@ void Config::init() ...@@ -1506,6 +1537,24 @@ void Config::init()
option->init(); option->init();
option = m_options->next(); option = m_options->next();
} }
// sanity check if all depends relations are valid
option = m_options->first();
while (option)
{
QCString depName = option->dependsOn();
if (!depName.isEmpty())
{
ConfigOption * opt = Config::instance()->get(depName);
if (opt==0)
{
config_err("Config option '%s' has invalid depends relation on unknown option '%s'\n",
option->name().data(),depName.data());
exit(1);
}
}
option = m_options->next();
}
} }
void Config::create() void Config::create()
......
...@@ -819,7 +819,7 @@ for better parsing at the cost of reduced performance. This can be particularly ...@@ -819,7 +819,7 @@ for better parsing at the cost of reduced performance. This can be particularly
helpful with template rich C++ code for which doxygen&apos;s built-in helpful with template rich C++ code for which doxygen&apos;s built-in
parser lacks the necessairy type information. parser lacks the necessairy type information.
' defval='0'/> ' defval='0'/>
<option type='string' id='CLANG_OPTIONS' settings='USE_LIBCLANG' docs=' <option type='string' id='CLANG_OPTIONS' setting='USE_LIBCLANG' docs='
If clang assisted parsing is enabled you can provide the compiler with command If clang assisted parsing is enabled you can provide the compiler with command
line options that you would normally use when invoking the compiler. Note that line options that you would normally use when invoking the compiler. Note that
the include paths will be set by doxygen based on the files and directory the include paths will be set by doxygen based on the files and directory
...@@ -923,7 +923,7 @@ the luminance component of the colors in the HTML output. Values below ...@@ -923,7 +923,7 @@ the luminance component of the colors in the HTML output. Values below
the output darker. The value divided by 100 is the actual gamma applied, the output darker. The value divided by 100 is the actual gamma applied,
so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
and 100 does not change the gamma. and 100 does not change the gamma.
' minval='40' maxval='240' defval='80'/> ' minval='40' maxval='240' defval='80' depends='GENERATE_HTML'/>
<option type='bool' id='HTML_TIMESTAMP' docs=' <option type='bool' id='HTML_TIMESTAMP' docs='
If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
page will contain the date and time when the page was generated. Setting page will contain the date and time when the page was generated. Setting
...@@ -943,7 +943,7 @@ visible (unless a fully collapsed tree already exceeds this amount). ...@@ -943,7 +943,7 @@ visible (unless a fully collapsed tree already exceeds this amount).
So setting the number of entries 1 will produce a full collapsed tree by So setting the number of entries 1 will produce a full collapsed tree by
default. 0 is a special value representing an infinite number of entries default. 0 is a special value representing an infinite number of entries
and will result in a full expanded tree by default. and will result in a full expanded tree by default.
' minval='0' maxval='9999' defval='100'/> ' minval='0' maxval='9999' defval='100' depends='GENERATE_HTML'/>
<option type='bool' id='GENERATE_DOCSET' docs=' <option type='bool' id='GENERATE_DOCSET' docs='
If the GENERATE_DOCSET tag is set to YES, additional index files If the GENERATE_DOCSET tag is set to YES, additional index files
will be generated that can be used as input for Apple&apos;s Xcode 3 will be generated that can be used as input for Apple&apos;s Xcode 3
...@@ -1130,7 +1130,7 @@ configure the path to it using the MATHJAX_RELPATH option. ...@@ -1130,7 +1130,7 @@ configure the path to it using the MATHJAX_RELPATH option.
' defval='0'/> ' defval='0'/>
<option type='enum' id='MATHJAX_FORMAT' defval='HTML-CSS' docs=' <option type='enum' id='MATHJAX_FORMAT' defval='HTML-CSS' docs='
When MathJax is enabled you can set the default output format to be used for When MathJax is enabled you can set the default output format to be used for
thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and
SVG. The default value is HTML-CSS, which is slower, but has the best SVG. The default value is HTML-CSS, which is slower, but has the best
compatibility. compatibility.
'> '>
...@@ -1151,6 +1151,11 @@ copy of MathJax from http://www.mathjax.org before deployment. ...@@ -1151,6 +1151,11 @@ copy of MathJax from http://www.mathjax.org before deployment.
<option type='list' id='MATHJAX_EXTENSIONS' format='string' docs=' <option type='list' id='MATHJAX_EXTENSIONS' format='string' docs='
The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
names that should be enabled during MathJax rendering. names that should be enabled during MathJax rendering.
' depends='USE_MATHJAX'>
</option>
<option type='string' id='MATHJAX_CODEFILE' format='string' docs='
The MATHJAX_CODEFILE tag can be used to specify a file with javascript
pieces of code that will be used on startup of the MathJax code.
' depends='USE_MATHJAX'> ' depends='USE_MATHJAX'>
</option> </option>
<option type='bool' id='SEARCHENGINE' docs=' <option type='bool' id='SEARCHENGINE' docs='
...@@ -1300,7 +1305,7 @@ such as SOURCE_BROWSER. ...@@ -1300,7 +1305,7 @@ such as SOURCE_BROWSER.
The LATEX_BIB_STYLE tag can be used to specify the style to use for the The LATEX_BIB_STYLE tag can be used to specify the style to use for the
bibliography, e.g. plainnat, or ieeetr. The default style is &quot;plain&quot;. See bibliography, e.g. plainnat, or ieeetr. The default style is &quot;plain&quot;. See
http://en.wikipedia.org/wiki/BibTeX for more info. http://en.wikipedia.org/wiki/BibTeX for more info.
' defval='plain'/> ' defval='plain' depends='GENERATE_LATEX'/>
</group> </group>
<group name='RTF' docs='configuration options related to the RTF output'> <group name='RTF' docs='configuration options related to the RTF output'>
<option type='bool' id='GENERATE_RTF' docs=' <option type='bool' id='GENERATE_RTF' docs='
...@@ -1575,7 +1580,7 @@ allowed to run in parallel. When set to 0 (the default) doxygen will ...@@ -1575,7 +1580,7 @@ allowed to run in parallel. When set to 0 (the default) doxygen will
base this on the number of processors available in the system. You can set it base this on the number of processors available in the system. You can set it
explicitly to a value larger than 0 to get control over the balance explicitly to a value larger than 0 to get control over the balance
between CPU load and processing speed. between CPU load and processing speed.
' defval='0' minval='0' maxval='32'/> ' defval='0' minval='0' maxval='32' dependes='HAVE_DOT'/>
<option type='string' id='DOT_FONTNAME' format='string' docs=' <option type='string' id='DOT_FONTNAME' format='string' docs='
By default doxygen will use the Helvetica font for all dot files that By default doxygen will use the Helvetica font for all dot files that
doxygen generates. When you want a differently looking font you can specify doxygen generates. When you want a differently looking font you can specify
...@@ -1619,7 +1624,7 @@ If the UML_LOOK tag is enabled, the fields and methods are shown inside ...@@ -1619,7 +1624,7 @@ If the UML_LOOK tag is enabled, the fields and methods are shown inside
the class node. If there are many fields or methods and many nodes the the class node. If there are many fields or methods and many nodes the
graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
threshold limits the number of items for each type to make the size more threshold limits the number of items for each type to make the size more
managable. Set this to 0 for no limit. Note that the threshold may be manageable. Set this to 0 for no limit. Note that the threshold may be
exceeded by 50% before the limit is enforced. exceeded by 50% before the limit is enforced.
' defval='10' minval='0' maxval='100' depends='HAVE_DOT'/> ' defval='10' minval='0' maxval='100' depends='HAVE_DOT'/>
<option type='bool' id='TEMPLATE_RELATIONS' docs=' <option type='bool' id='TEMPLATE_RELATIONS' docs='
......
...@@ -1162,6 +1162,7 @@ void addConfigOptions(Config *cfg) ...@@ -1162,6 +1162,7 @@ void addConfigOptions(Config *cfg)
FALSE FALSE
); );
#endif #endif
#if USE_LIBCLANG
//---- //----
cs = cfg->addString( cs = cfg->addString(
"CLANG_OPTIONS", "CLANG_OPTIONS",
...@@ -1171,6 +1172,7 @@ void addConfigOptions(Config *cfg) ...@@ -1171,6 +1172,7 @@ void addConfigOptions(Config *cfg)
"specified at INPUT and INCLUDE_PATH." "specified at INPUT and INCLUDE_PATH."
); );
cs->addDependency("CLANG_ASSISTED_PARSING"); cs->addDependency("CLANG_ASSISTED_PARSING");
#endif
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
cfg->addInfo("Index","configuration options related to the alphabetical class index"); cfg->addInfo("Index","configuration options related to the alphabetical class index");
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -1324,6 +1326,7 @@ void addConfigOptions(Config *cfg) ...@@ -1324,6 +1326,7 @@ void addConfigOptions(Config *cfg)
"and 100 does not change the gamma.", "and 100 does not change the gamma.",
40,240,80 40,240,80
); );
ci->addDependency("GENERATE_HTML");
//---- //----
cb = cfg->addBool( cb = cfg->addBool(
"HTML_TIMESTAMP", "HTML_TIMESTAMP",
...@@ -1355,6 +1358,7 @@ void addConfigOptions(Config *cfg) ...@@ -1355,6 +1358,7 @@ void addConfigOptions(Config *cfg)
"and will result in a full expanded tree by default.", "and will result in a full expanded tree by default.",
0,9999,100 0,9999,100
); );
ci->addDependency("GENERATE_HTML");
//---- //----
cb = cfg->addBool( cb = cfg->addBool(
"GENERATE_DOCSET", "GENERATE_DOCSET",
...@@ -1658,7 +1662,7 @@ void addConfigOptions(Config *cfg) ...@@ -1658,7 +1662,7 @@ void addConfigOptions(Config *cfg)
ce = cfg->addEnum( ce = cfg->addEnum(
"MATHJAX_FORMAT", "MATHJAX_FORMAT",
"When MathJax is enabled you can set the default output format to be used for\n" "When MathJax is enabled you can set the default output format to be used for\n"
"thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and\n" "the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and\n"
"SVG. The default value is HTML-CSS, which is slower, but has the best\n" "SVG. The default value is HTML-CSS, which is slower, but has the best\n"
"compatibility.", "compatibility.",
"HTML-CSS" "HTML-CSS"
...@@ -1688,6 +1692,13 @@ void addConfigOptions(Config *cfg) ...@@ -1688,6 +1692,13 @@ void addConfigOptions(Config *cfg)
); );
cl->addDependency("USE_MATHJAX"); cl->addDependency("USE_MATHJAX");
//---- //----
cs = cfg->addString(
"MATHJAX_CODEFILE",
"The MATHJAX_CODEFILE tag can be used to specify a file with javascript\n"
"pieces of code that will be used on startup of the MathJax code."
);
cs->addDependency("USE_MATHJAX");
//----
cb = cfg->addBool( cb = cfg->addBool(
"SEARCHENGINE", "SEARCHENGINE",
"When the SEARCHENGINE tag is enabled doxygen will generate a search box\n" "When the SEARCHENGINE tag is enabled doxygen will generate a search box\n"
...@@ -1924,6 +1935,7 @@ void addConfigOptions(Config *cfg) ...@@ -1924,6 +1935,7 @@ void addConfigOptions(Config *cfg)
"http://en.wikipedia.org/wiki/BibTeX for more info." "http://en.wikipedia.org/wiki/BibTeX for more info."
); );
cs->setDefaultValue("plain"); cs->setDefaultValue("plain");
cs->addDependency("GENERATE_LATEX");
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
cfg->addInfo("RTF","configuration options related to the RTF output"); cfg->addInfo("RTF","configuration options related to the RTF output");
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -2424,7 +2436,7 @@ void addConfigOptions(Config *cfg) ...@@ -2424,7 +2436,7 @@ void addConfigOptions(Config *cfg)
"the class node. If there are many fields or methods and many nodes the\n" "the class node. If there are many fields or methods and many nodes the\n"
"graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS\n" "graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS\n"
"threshold limits the number of items for each type to make the size more\n" "threshold limits the number of items for each type to make the size more\n"
"managable. Set this to 0 for no limit. Note that the threshold may be\n" "manageable. Set this to 0 for no limit. Note that the threshold may be\n"
"exceeded by 50% before the limit is enforced.", "exceeded by 50% before the limit is enforced.",
0,100,10 0,100,10
); );
......
...@@ -96,6 +96,8 @@ void generateDEFForMember(MemberDef *md, ...@@ -96,6 +96,8 @@ void generateDEFForMember(MemberDef *md,
case MemberType_Variable: memType="variable"; break; case MemberType_Variable: memType="variable"; break;
case MemberType_Typedef: memType="typedef"; break; case MemberType_Typedef: memType="typedef"; break;
case MemberType_Enumeration: memType="enum"; break; case MemberType_Enumeration: memType="enum"; break;
case MemberType_Interface: memType="interface"; break;
case MemberType_Service: memType="service"; break;
case MemberType_Function: memType="function"; isFunc=TRUE; break; case MemberType_Function: memType="function"; isFunc=TRUE; break;
case MemberType_Signal: memType="signal"; isFunc=TRUE; break; case MemberType_Signal: memType="signal"; isFunc=TRUE; break;
case MemberType_Friend: memType="friend"; isFunc=TRUE; break; case MemberType_Friend: memType="friend"; isFunc=TRUE; break;
...@@ -428,6 +430,8 @@ void generateDEFForClass(ClassDef *cd,FTextStream &t) ...@@ -428,6 +430,8 @@ void generateDEFForClass(ClassDef *cd,FTextStream &t)
if (numMembers>0) if (numMembers>0)
{ {
generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubTypes),"public-type"); generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubTypes),"public-type");
generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_interfaces),"interfaces");
generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_services),"services");
generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubMethods),"public-func"); generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubMethods),"public-func");
generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubAttribs),"public-attrib"); generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubAttribs),"public-attrib");
generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubSlots),"public-slot"); generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubSlots),"public-slot");
......
...@@ -403,10 +403,12 @@ void DirDef::writeDocumentation(OutputList &ol) ...@@ -403,10 +403,12 @@ void DirDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::ClassAllMembersLink: case LayoutDocEntry::ClassAllMembersLink:
case LayoutDocEntry::ClassUsedFiles: case LayoutDocEntry::ClassUsedFiles:
case LayoutDocEntry::NamespaceNestedNamespaces: case LayoutDocEntry::NamespaceNestedNamespaces:
case LayoutDocEntry::NamespaceNestedConstantGroups:
case LayoutDocEntry::NamespaceClasses: case LayoutDocEntry::NamespaceClasses:
case LayoutDocEntry::NamespaceInlineClasses: case LayoutDocEntry::NamespaceInlineClasses:
case LayoutDocEntry::FileClasses: case LayoutDocEntry::FileClasses:
case LayoutDocEntry::FileNamespaces: case LayoutDocEntry::FileNamespaces:
case LayoutDocEntry::FileConstantGroups:
case LayoutDocEntry::FileIncludes: case LayoutDocEntry::FileIncludes:
case LayoutDocEntry::FileIncludeGraph: case LayoutDocEntry::FileIncludeGraph:
case LayoutDocEntry::FileIncludedByGraph: case LayoutDocEntry::FileIncludedByGraph:
......
...@@ -433,21 +433,22 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de ...@@ -433,21 +433,22 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
// group members are only visible in their group // group members are only visible in their group
//if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return; //if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return;
QCString memType; QCString memType;
bool isFunc=FALSE;
switch (md->memberType()) switch (md->memberType())
{ {
case MemberType_Define: memType="define"; break; case MemberType_Define: memType="define"; break;
case MemberType_EnumValue: ASSERT(0); break; case MemberType_Function: memType="function"; break;
case MemberType_Property: memType="property"; break;
case MemberType_Event: memType="event"; break;
case MemberType_Variable: memType="variable"; break; case MemberType_Variable: memType="variable"; break;
case MemberType_Typedef: memType="typedef"; break; case MemberType_Typedef: memType="typedef"; break;
case MemberType_Enumeration: memType="enum"; break; case MemberType_Enumeration: memType="enum"; break;
case MemberType_Function: memType="function"; isFunc=TRUE; break; case MemberType_EnumValue: ASSERT(0); break;
case MemberType_Signal: memType="signal"; isFunc=TRUE; break; case MemberType_Signal: memType="signal"; break;
case MemberType_Friend: memType="friend"; isFunc=TRUE; break; case MemberType_Slot: memType="slot"; break;
case MemberType_DCOP: memType="dcop"; isFunc=TRUE; break; case MemberType_Friend: memType="friend"; break;
case MemberType_Slot: memType="slot"; isFunc=TRUE; break; case MemberType_DCOP: memType="dcop"; break;
case MemberType_Property: memType="property"; break;
case MemberType_Event: memType="event"; break;
case MemberType_Interface: memType="interface"; break;
case MemberType_Service: memType="service"; break;
} }
QCString scopeName; QCString scopeName;
if (md->getClassDef()) if (md->getClassDef())
......
...@@ -396,6 +396,10 @@ void DocSets::addIndexItem(Definition *context,MemberDef *md, ...@@ -396,6 +396,10 @@ void DocSets::addIndexItem(Definition *context,MemberDef *md,
break; break;
case MemberType_Event: case MemberType_Event:
type="event"; break; type="event"; break;
case MemberType_Interface:
type="ifc"; break;
case MemberType_Service:
type="svc"; break;
} }
cd = md->getClassDef(); cd = md->getClassDef();
nd = md->getNamespaceDef(); nd = md->getNamespaceDef();
......
...@@ -349,14 +349,14 @@ SPCMD3 {CMD}form#[0-9]+ ...@@ -349,14 +349,14 @@ SPCMD3 {CMD}form#[0-9]+
SPCMD4 {CMD}"::" SPCMD4 {CMD}"::"
INOUT "inout"|"in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLANK}*"in") INOUT "inout"|"in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLANK}*"in")
PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]" PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]"
TEMPCHAR [a-z_A-Z0-9,: \t\*\&] TEMPCHAR [a-z_A-Z0-9.,: \t\*\&\(\)\[\]]
FUNCCHAR [a-z_A-Z0-9,:\<\> \t\^\*\&\[\]] FUNCCHAR [a-z_A-Z0-9,:\<\> \t\^\*\&\[\]]
SCOPESEP "::"|"#"|"." SCOPESEP "::"|"#"|"."
TEMPLPART "<"{TEMPCHAR}*">" TEMPLPART "<"{TEMPCHAR}*">"
ANONNS "anonymous_namespace{"[^}]*"}" ANONNS "anonymous_namespace{"[^}]*"}"
SCOPEPRE (({ID}{TEMPLPART}?)|{ANONNS}){SCOPESEP} SCOPEPRE (({ID}{TEMPLPART}?)|{ANONNS}){SCOPESEP}
SCOPEKEYS ":"({ID}":")* SCOPEKEYS ":"({ID}":")*
SCOPECPP {SCOPEPRE}*(~)?{ID}("<"{TEMPCHAR}*">")? SCOPECPP {SCOPEPRE}*(~)?{ID}{TEMPLPART}?
SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}? SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
SCOPEMASK {SCOPECPP}|{SCOPEOBJC} SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"){BLANK})? FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"){BLANK})?
...@@ -380,7 +380,7 @@ HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">" ...@@ -380,7 +380,7 @@ HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">"
HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p" HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"
HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P" HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"
HTMLKEYW {HTMLKEYL}|{HTMLKEYU} HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCARG}? REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG}?
REFWORD3 ({ID}":")*{ID}":"? REFWORD3 ({ID}":")*{ID}":"?
REFWORD {LABELID}|{REFWORD2}|{REFWORD3} REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
......
...@@ -63,6 +63,18 @@ ...@@ -63,6 +63,18 @@
static const char svgZoomHeader[] = static const char svgZoomHeader[] =
"<svg id=\"main\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" onload=\"init(evt)\">\n" "<svg id=\"main\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" onload=\"init(evt)\">\n"
"<style type=\"text/css\"><![CDATA[\n"
".edge:hover path { stroke: red; }\n"
".edge:hover polygon { stroke: red; fill: red; }\n"
"]]></style>\n"
"<script type=\"text/javascript\"><![CDATA[\n"
"var edges = document.getElementsByTagName('g');\n"
"for (var i=0;i<edges.length;i++) {\n"
" if (edges[i].id.substr(0,4)=='edge') {\n"
" edges[i].setAttribute('class','edge');\n"
" }\n"
"}\n"
"]]></script>\n"
" <defs>\n" " <defs>\n"
" <circle id=\"rim\" cx=\"0\" cy=\"0\" r=\"7\"/>\n" " <circle id=\"rim\" cx=\"0\" cy=\"0\" r=\"7\"/>\n"
" <circle id=\"rim2\" cx=\"0\" cy=\"0\" r=\"3.5\"/>\n" " <circle id=\"rim2\" cx=\"0\" cy=\"0\" r=\"3.5\"/>\n"
......
This diff is collapsed.
/* The standard CSS for doxygen $doxygenversion */ /* The standard CSS for doxygen $doxygenversion */
body, table, div, p, dl { body, table, div, p, dl {
font: 400 14px/19px Roboto,sans-serif; font: 400 14px/22px Roboto,sans-serif;
} }
/* @group Heading Levels */ /* @group Heading Levels */
...@@ -687,6 +687,7 @@ div.directory { ...@@ -687,6 +687,7 @@ div.directory {
.directory td.entry { .directory td.entry {
white-space: nowrap; white-space: nowrap;
padding-right: 6px; padding-right: 6px;
padding-top: 3px;
} }
.directory td.entry a { .directory td.entry a {
......
...@@ -6,7 +6,7 @@ Introduction ...@@ -6,7 +6,7 @@ Introduction
This page provides a high-level overview of the internals of doxygen, with This page provides a high-level overview of the internals of doxygen, with
links to the relevant parts of the code. This document is intended for links to the relevant parts of the code. This document is intended for
developers who want to work on doxygen. Users of doxygen are refered to the developers who want to work on doxygen. Users of doxygen are referred to the
[User Manual](http://www.doxygen.org/manual.html). [User Manual](http://www.doxygen.org/manual.html).
The generic starting point of the application is of cource the main() function. The generic starting point of the application is of cource the main() function.
......
...@@ -20,7 +20,7 @@ HEADERS = doxygen.h ...@@ -20,7 +20,7 @@ HEADERS = doxygen.h
SOURCES = main.cpp SOURCES = main.cpp
unix:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%% unix:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%%
win32:INCLUDEPATH += . win32:INCLUDEPATH += .
win32-mingw:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread win32-mingw:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%%
win32-msvc:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib win32-msvc:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib
win32-msvc:TMAKE_LFLAGS += /LIBPATH:..\lib win32-msvc:TMAKE_LFLAGS += /LIBPATH:..\lib
win32-borland:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib win32-borland:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib
......
"/* The standard CSS for doxygen $doxygenversion */\n" "/* The standard CSS for doxygen $doxygenversion */\n"
"\n" "\n"
"body, table, div, p, dl {\n" "body, table, div, p, dl {\n"
" font: 400 14px/19px Roboto,sans-serif;\n" " font: 400 14px/22px Roboto,sans-serif;\n"
"}\n" "}\n"
"\n" "\n"
"/* @group Heading Levels */\n" "/* @group Heading Levels */\n"
...@@ -687,6 +687,7 @@ ...@@ -687,6 +687,7 @@
".directory td.entry {\n" ".directory td.entry {\n"
" white-space: nowrap;\n" " white-space: nowrap;\n"
" padding-right: 6px;\n" " padding-right: 6px;\n"
" padding-top: 3px;\n"
"}\n" "}\n"
"\n" "\n"
".directory td.entry a {\n" ".directory td.entry a {\n"
......
...@@ -79,9 +79,11 @@ class Entry ...@@ -79,9 +79,11 @@ class Entry
INTERFACEDOC_SEC = 0x00010000, INTERFACEDOC_SEC = 0x00010000,
PROTOCOLDOC_SEC = 0x00020000, PROTOCOLDOC_SEC = 0x00020000,
CATEGORYDOC_SEC = 0x00040000, CATEGORYDOC_SEC = 0x00040000,
SERVICEDOC_SEC = 0x00080000,
SINGLETONDOC_SEC = 0x00100000,
COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC | COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC |
INTERFACEDOC_SEC | EXCEPTIONDOC_SEC | PROTOCOLDOC_SEC | INTERFACEDOC_SEC | EXCEPTIONDOC_SEC | PROTOCOLDOC_SEC |
CATEGORYDOC_SEC, CATEGORYDOC_SEC | SERVICEDOC_SEC | SINGLETONDOC_SEC,
SOURCE_SEC = 0x00400000, SOURCE_SEC = 0x00400000,
HEADER_SEC = 0x00800000, HEADER_SEC = 0x00800000,
...@@ -111,56 +113,69 @@ class Entry ...@@ -111,56 +113,69 @@ class Entry
PACKAGEDOC_SEC = 0x16000000, PACKAGEDOC_SEC = 0x16000000,
OBJCIMPL_SEC = 0x17000000, OBJCIMPL_SEC = 0x17000000,
DIRDOC_SEC = 0x18000000 DIRDOC_SEC = 0x18000000
,EXPORTED_INTERFACE_SEC = 0x19000000
,INCLUDED_SERVICE_SEC = 0x1A000000
}; };
enum MemberSpecifier
{ // class specifiers (add new items to the end)
Inline = 0x00000001, static const uint64 Template = (1ULL<<0);
Explicit = 0x00000002, static const uint64 Generic = (1ULL<<1);
Mutable = 0x00000004, static const uint64 Ref = (1ULL<<2);
Settable = 0x00000008, static const uint64 Value = (1ULL<<3);
Gettable = 0x00000010, static const uint64 Interface = (1ULL<<4);
Readable = 0x00000020, static const uint64 Struct = (1ULL<<5);
Writable = 0x00000040, static const uint64 Union = (1ULL<<6);
Final = 0x00000080, static const uint64 Exception = (1ULL<<7);
Abstract = 0x00000100, static const uint64 Protocol = (1ULL<<8);
Addable = 0x00000200, static const uint64 Category = (1ULL<<9);
Removable = 0x00000400, static const uint64 SealedClass = (1ULL<<10);
Raisable = 0x00000800, static const uint64 AbstractClass = (1ULL<<11);
Override = 0x00001000, static const uint64 Enum = (1ULL<<12); // for Java-style enums
New = 0x00002000, static const uint64 Service = (1ULL<<13); // UNO IDL
Sealed = 0x00004000, static const uint64 Singleton = (1ULL<<14); // UNO IDL
Initonly = 0x00008000,
Optional = 0x00010000, // member specifiers (add new items to the beginning)
Required = 0x00020000, static const uint64 Inline = (1ULL<<24);
NonAtomic = 0x00040000, static const uint64 Explicit = (1ULL<<25);
Copy = 0x00080000, static const uint64 Mutable = (1ULL<<26);
Retain = 0x00100000, static const uint64 Settable = (1ULL<<27);
Assign = 0x00200000, static const uint64 Gettable = (1ULL<<28);
Strong = 0x00400000, static const uint64 Readable = (1ULL<<29);
Weak = 0x00800000, static const uint64 Writable = (1ULL<<30);
Unretained = 0x01000000, static const uint64 Final = (1ULL<<31);
Alias = 0x02000000, static const uint64 Abstract = (1ULL<<32);
ConstExp = 0x04000000, static const uint64 Addable = (1ULL<<33);
Default = 0x08000000, static const uint64 Removable = (1ULL<<34);
Delete = 0x10000000, static const uint64 Raisable = (1ULL<<35);
NoExcept = 0x20000000 static const uint64 Override = (1ULL<<36);
}; static const uint64 New = (1ULL<<37);
enum ClassSpecifier static const uint64 Sealed = (1ULL<<38);
{ static const uint64 Initonly = (1ULL<<39);
Template = 0x0001, static const uint64 Optional = (1ULL<<40);
Generic = 0x0002, static const uint64 Required = (1ULL<<41);
Ref = 0x0004, static const uint64 NonAtomic = (1ULL<<42);
Value = 0x0008, static const uint64 Copy = (1ULL<<43);
Interface = 0x0010, static const uint64 Retain = (1ULL<<44);
Struct = 0x0020, static const uint64 Assign = (1ULL<<45);
Union = 0x0040, static const uint64 Strong = (1ULL<<46);
Exception = 0x0080, static const uint64 Weak = (1ULL<<47);
Protocol = 0x0100, static const uint64 Unretained = (1ULL<<48);
Category = 0x0200, static const uint64 Alias = (1ULL<<49);
SealedClass = 0x0400, static const uint64 ConstExp = (1ULL<<50);
AbstractClass = 0x0800, static const uint64 Default = (1ULL<<51);
Enum = 0x1000 // for Java-style enums static const uint64 Delete = (1ULL<<52);
}; static const uint64 NoExcept = (1ULL<<53);
static const uint64 Attribute = (1ULL<<54); // UNO IDL attribute
static const uint64 Property = (1ULL<<55); // UNO IDL property
static const uint64 Readonly = (1ULL<<56); // on UNO IDL attribute or property
static const uint64 Bound = (1ULL<<57); // on UNO IDL attribute or property
static const uint64 Constrained = (1ULL<<58); // on UNO IDL property
static const uint64 Transient = (1ULL<<59); // on UNO IDL property
static const uint64 MaybeVoid = (1ULL<<60); // on UNO IDL property
static const uint64 MaybeDefault = (1ULL<<61); // on UNO IDL property
static const uint64 MaybeAmbiguous = (1ULL<<62); // on UNO IDL property
static const uint64 Published = (1ULL<<63); // UNO IDL keyword
enum GroupDocType enum GroupDocType
{ {
GROUPDOC_NORMAL, //!< defgroup GROUPDOC_NORMAL, //!< defgroup
...@@ -220,7 +235,7 @@ class Entry ...@@ -220,7 +235,7 @@ class Entry
// content // content
Protection protection; //!< class protection Protection protection; //!< class protection
MethodTypes mtype; //!< signal, slot, (dcop) method, or property? MethodTypes mtype; //!< signal, slot, (dcop) method, or property?
int spec; //!< class/member specifiers uint64 spec; //!< class/member specifiers
int initLines; //!< define/variable initializer lines to show int initLines; //!< define/variable initializer lines to show
bool stat; //!< static ? bool stat; //!< static ?
bool explicitExternal; //!< explicitly defined as external? bool explicitExternal; //!< explicitly defined as external?
......
...@@ -411,10 +411,11 @@ void FileDef::writeSourceLink(OutputList &ol) ...@@ -411,10 +411,11 @@ void FileDef::writeSourceLink(OutputList &ol)
} }
} }
void FileDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title) void FileDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title,
bool const isConstantGroup)
{ {
// write list of namespaces // write list of namespaces
if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title); if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,isConstantGroup);
} }
void FileDef::writeClassDeclarations(OutputList &ol,const QCString &title) void FileDef::writeClassDeclarations(OutputList &ol,const QCString &title)
...@@ -646,7 +647,13 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -646,7 +647,13 @@ void FileDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::FileNamespaces: case LayoutDocEntry::FileNamespaces:
{ {
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeNamespaceDeclarations(ol,ls->title(lang)); writeNamespaceDeclarations(ol,ls->title(lang),false);
}
break;
case LayoutDocEntry::FileConstantGroups:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeNamespaceDeclarations(ol,ls->title(lang),true);
} }
break; break;
case LayoutDocEntry::MemberGroups: case LayoutDocEntry::MemberGroups:
...@@ -693,6 +700,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -693,6 +700,7 @@ void FileDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::ClassUsedFiles: case LayoutDocEntry::ClassUsedFiles:
case LayoutDocEntry::ClassInlineClasses: case LayoutDocEntry::ClassInlineClasses:
case LayoutDocEntry::NamespaceNestedNamespaces: case LayoutDocEntry::NamespaceNestedNamespaces:
case LayoutDocEntry::NamespaceNestedConstantGroups:
case LayoutDocEntry::NamespaceClasses: case LayoutDocEntry::NamespaceClasses:
case LayoutDocEntry::NamespaceInlineClasses: case LayoutDocEntry::NamespaceInlineClasses:
case LayoutDocEntry::GroupClasses: case LayoutDocEntry::GroupClasses:
......
...@@ -190,7 +190,8 @@ class FileDef : public Definition ...@@ -190,7 +190,8 @@ class FileDef : public Definition
void writeMemberGroups(OutputList &ol); void writeMemberGroups(OutputList &ol);
void writeAuthorSection(OutputList &ol); void writeAuthorSection(OutputList &ol);
void writeSourceLink(OutputList &ol); void writeSourceLink(OutputList &ol);
void writeNamespaceDeclarations(OutputList &ol,const QCString &title); void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
bool isConstantGroup);
void writeClassDeclarations(OutputList &ol,const QCString &title); void writeClassDeclarations(OutputList &ol,const QCString &title);
void writeInlineClasses(OutputList &ol); void writeInlineClasses(OutputList &ol);
void startMemberDeclarations(OutputList &ol); void startMemberDeclarations(OutputList &ol);
......
...@@ -78,7 +78,7 @@ enum InterfaceType { IF_NONE, IF_SPECIFIC, IF_GENERIC, IF_ABSTRACT }; ...@@ -78,7 +78,7 @@ enum InterfaceType { IF_NONE, IF_SPECIFIC, IF_GENERIC, IF_ABSTRACT };
// {{{ ----- Helper structs ----- // {{{ ----- Helper structs -----
//! Holds modifiers (ie attributes) for one symbol (variable, function, etc) //! Holds modifiers (ie attributes) for one symbol (variable, function, etc)
struct SymbolModifiers { struct SymbolModifiers {
enum Protection {NONE_P, PUBLIC, PRIVATE, PROTECTED}; enum Protection {NONE_P, PUBLIC, PRIVATE};
enum Direction {NONE_D, IN, OUT, INOUT}; enum Direction {NONE_D, IN, OUT, INOUT};
//!< This is only used with function return value. //!< This is only used with function return value.
...@@ -86,6 +86,7 @@ struct SymbolModifiers { ...@@ -86,6 +86,7 @@ struct SymbolModifiers {
Protection protection; Protection protection;
Direction direction; Direction direction;
bool optional; bool optional;
bool protect;
QCString dimension; QCString dimension;
bool allocatable; bool allocatable;
bool external; bool external;
...@@ -101,7 +102,7 @@ struct SymbolModifiers { ...@@ -101,7 +102,7 @@ struct SymbolModifiers {
QCString passVar; QCString passVar;
SymbolModifiers() : type(), returnName(), protection(NONE_P), direction(NONE_D), SymbolModifiers() : type(), returnName(), protection(NONE_P), direction(NONE_D),
optional(FALSE), dimension(), allocatable(FALSE), optional(FALSE), protect(FALSE), dimension(), allocatable(FALSE),
external(FALSE), intrinsic(FALSE), parameter(FALSE), external(FALSE), intrinsic(FALSE), parameter(FALSE),
pointer(FALSE), target(FALSE), save(FALSE), deferred(FALSE), nonoverridable(FALSE), pointer(FALSE), target(FALSE), save(FALSE), deferred(FALSE), nonoverridable(FALSE),
nopass(FALSE), pass(FALSE), passVar() {} nopass(FALSE), pass(FALSE), passVar() {}
...@@ -145,9 +146,9 @@ struct CommentInPrepass { ...@@ -145,9 +146,9 @@ struct CommentInPrepass {
}; };
static QList<CommentInPrepass> comments; static QList<CommentInPrepass> comments;
#define MAX_INCLUDE_DEPTH 10 YY_BUFFER_STATE *include_stack = NULL;
YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
int include_stack_ptr = 0; int include_stack_ptr = 0;
int include_stack_cnt = 0;
static QFile inputFile; static QFile inputFile;
static QCString yyFileName; static QCString yyFileName;
...@@ -257,7 +258,7 @@ TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}COMPLE ...@@ -257,7 +258,7 @@ TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}COMPLE
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")" INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS}?|DEFERRED|NON_OVERRIDABLE) ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS}?|DEFERRED|NON_OVERRIDABLE)
ACCESS_SPEC (PROTECTED|PRIVATE|PUBLIC) ACCESS_SPEC (PRIVATE|PUBLIC)
LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")" LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")"
/* Assume that attribute statements are almost the same as attributes. */ /* Assume that attribute statements are almost the same as attributes. */
ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
...@@ -549,9 +550,6 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA ...@@ -549,9 +550,6 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
/*------- access specification --------------------------------------------------------------------------*/ /*------- access specification --------------------------------------------------------------------------*/
<ModuleBody>protected/{BS}(\n|"!") { defaultProtection = Protected;
current->protection = defaultProtection ;
}
<ModuleBody>private/{BS}(\n|"!") { defaultProtection = Private; <ModuleBody>private/{BS}(\n|"!") { defaultProtection = Private;
current->protection = defaultProtection ; current->protection = defaultProtection ;
} }
...@@ -593,10 +591,6 @@ private { ...@@ -593,10 +591,6 @@ private {
current->protection = Private; current->protection = Private;
typeProtection = Private; typeProtection = Private;
} }
protected {
current->protection = Protected;
typeProtection = Protected;
}
{LANGUAGE_BIND_SPEC} { {LANGUAGE_BIND_SPEC} {
/* ignored for now */ /* ignored for now */
} }
...@@ -1406,10 +1400,10 @@ static const char* prepassFixedForm(const char* contents) ...@@ -1406,10 +1400,10 @@ static const char* prepassFixedForm(const char* contents)
static void pushBuffer(QCString& buffer) static void pushBuffer(QCString& buffer)
{ {
if ( include_stack_ptr >= MAX_INCLUDE_DEPTH ) if (include_stack_cnt <= include_stack_ptr)
{ {
fprintf( stderr, "Stack buffers nested too deeply" ); include_stack_cnt++;
exit( 1 ); include_stack = (YY_BUFFER_STATE *)realloc(include_stack, include_stack_cnt * sizeof(YY_BUFFER_STATE));
} }
include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER; include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER;
yy_switch_to_buffer(yy_scan_string(buffer)); yy_switch_to_buffer(yy_scan_string(buffer));
...@@ -1501,6 +1495,7 @@ SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs) ...@@ -1501,6 +1495,7 @@ SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs)
allocatable |= mdfs.allocatable; allocatable |= mdfs.allocatable;
external |= mdfs.external; external |= mdfs.external;
intrinsic |= mdfs.intrinsic; intrinsic |= mdfs.intrinsic;
protect |= mdfs.protect;
parameter |= mdfs.parameter; parameter |= mdfs.parameter;
pointer |= mdfs.pointer; pointer |= mdfs.pointer;
target |= mdfs.target; target |= mdfs.target;
...@@ -1542,7 +1537,7 @@ SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString) ...@@ -1542,7 +1537,7 @@ SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString)
} }
else if (mdfString=="protected") else if (mdfString=="protected")
{ {
newMdf.protection = SymbolModifiers::PROTECTED; newMdf.protect = TRUE;
} }
else if (mdfString=="optional") else if (mdfString=="optional")
{ {
...@@ -1734,7 +1729,7 @@ static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs) ...@@ -1734,7 +1729,7 @@ static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs)
if (!typeName.isEmpty()) typeName += ", "; if (!typeName.isEmpty()) typeName += ", ";
typeName += "private"; typeName += "private";
} }
else if (mdfs.protection == SymbolModifiers::PROTECTED) if (mdfs.protect)
{ {
if (!typeName.isEmpty()) typeName += ", "; if (!typeName.isEmpty()) typeName += ", ";
typeName += "protected"; typeName += "protected";
...@@ -1760,8 +1755,6 @@ static void applyModifiers(Entry *ent, SymbolModifiers& mdfs) ...@@ -1760,8 +1755,6 @@ static void applyModifiers(Entry *ent, SymbolModifiers& mdfs)
ent->protection = Public; ent->protection = Public;
else if (mdfs.protection == SymbolModifiers::PRIVATE) else if (mdfs.protection == SymbolModifiers::PRIVATE)
ent->protection = Private; ent->protection = Private;
else if (mdfs.protection == SymbolModifiers::PROTECTED)
ent->protection = Protected;
} }
/*! Starts the new scope in fortran program. Consider using this function when /*! Starts the new scope in fortran program. Consider using this function when
...@@ -2107,6 +2100,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -2107,6 +2100,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
static void subrHandleCommentBlock(const QCString &doc,bool brief) static void subrHandleCommentBlock(const QCString &doc,bool brief)
{ {
QCString loc_doc;
Entry *tmp_entry = current; Entry *tmp_entry = current;
current = subrCurrent.first(); // temporarily switch to the entry of the subroutine / function current = subrCurrent.first(); // temporarily switch to the entry of the subroutine / function
if (docBlock.stripWhiteSpace().find("\\param") == 0) if (docBlock.stripWhiteSpace().find("\\param") == 0)
...@@ -2120,9 +2114,58 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief) ...@@ -2120,9 +2114,58 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
else else
{ {
int dir1 = modifiers[current_root][argName.lower()].direction; int dir1 = modifiers[current_root][argName.lower()].direction;
loc_doc = doc.stripWhiteSpace();
if (loc_doc.lower().find(directionParam[SymbolModifiers::IN]) == 0)
{
if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) ||
(directionParam[dir1] == directionParam[SymbolModifiers::IN]))
{
handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::IN] + " " +
argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::IN])),brief);
}
else
{
warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName);
handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
argName + " " + doc,brief);
}
}
else if (loc_doc.lower().find(directionParam[SymbolModifiers::OUT]) == 0)
{
if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) ||
(directionParam[dir1] == directionParam[SymbolModifiers::OUT]))
{
handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::OUT] + " " +
argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::OUT])),brief);
}
else
{
warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName);
handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
argName + " " + doc,brief); argName + " " + doc,brief);
} }
}
else if (loc_doc.lower().find(directionParam[SymbolModifiers::INOUT]) == 0)
{
if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) ||
(directionParam[dir1] == directionParam[SymbolModifiers::INOUT]))
{
handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::INOUT] + " " +
argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::INOUT])),brief);
}
else
{
warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName);
handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
argName + " " + doc,brief);
}
}
else
{
handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
argName + " " + doc,brief);
}
}
current=tmp_entry; current=tmp_entry;
} }
......
...@@ -1059,10 +1059,12 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -1059,10 +1059,12 @@ void GroupDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::ClassUsedFiles: case LayoutDocEntry::ClassUsedFiles:
case LayoutDocEntry::ClassInlineClasses: case LayoutDocEntry::ClassInlineClasses:
case LayoutDocEntry::NamespaceNestedNamespaces: case LayoutDocEntry::NamespaceNestedNamespaces:
case LayoutDocEntry::NamespaceNestedConstantGroups:
case LayoutDocEntry::NamespaceClasses: case LayoutDocEntry::NamespaceClasses:
case LayoutDocEntry::NamespaceInlineClasses: case LayoutDocEntry::NamespaceInlineClasses:
case LayoutDocEntry::FileClasses: case LayoutDocEntry::FileClasses:
case LayoutDocEntry::FileNamespaces: case LayoutDocEntry::FileNamespaces:
case LayoutDocEntry::FileConstantGroups:
case LayoutDocEntry::FileIncludes: case LayoutDocEntry::FileIncludes:
case LayoutDocEntry::FileIncludeGraph: case LayoutDocEntry::FileIncludeGraph:
case LayoutDocEntry::FileIncludedByGraph: case LayoutDocEntry::FileIncludedByGraph:
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#define GROW_AMOUNT 1024
/** Class representing a string buffer optimised for growing. */ /** Class representing a string buffer optimised for growing. */
class GrowBuf class GrowBuf
{ {
...@@ -11,22 +13,28 @@ class GrowBuf ...@@ -11,22 +13,28 @@ class GrowBuf
GrowBuf() : str(0), pos(0), len(0) {} GrowBuf() : str(0), pos(0), len(0) {}
~GrowBuf() { free(str); str=0; pos=0; len=0; } ~GrowBuf() { free(str); str=0; pos=0; len=0; }
void clear() { pos=0; } void clear() { pos=0; }
void addChar(char c) { if (pos>=len) { len+=1024; str = (char*)realloc(str,len); } void addChar(char c) { if (pos>=len) { len+=GROW_AMOUNT; str = (char*)realloc(str,len); }
str[pos++]=c; str[pos++]=c;
} }
void addStr(const char *s) { void addStr(const char *s) {
if (s)
{
int l=strlen(s); int l=strlen(s);
if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); } if (pos+l>=len) { len+=l+GROW_AMOUNT; str = (char*)realloc(str,len); }
strcpy(&str[pos],s); strcpy(&str[pos],s);
pos+=l; pos+=l;
} }
}
void addStr(const char *s,int n) { void addStr(const char *s,int n) {
if (s)
{
int l=strlen(s); int l=strlen(s);
if (n<l) l=n; if (n<l) l=n;
if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); } if (pos+l>=len) { len+=l+GROW_AMOUNT; str = (char*)realloc(str,len); }
strncpy(&str[pos],s,n); strncpy(&str[pos],s,n);
pos+=l; pos+=l;
} }
}
const char *get() { return str; } const char *get() { return str; }
int getPos() const { return pos; } int getPos() const { return pos; }
char at(int i) const { return str[i]; } char at(int i) const { return str[i]; }
......
...@@ -32,7 +32,7 @@ static QDict<QCString> g_symbolDict(10007); ...@@ -32,7 +32,7 @@ static QDict<QCString> g_symbolDict(10007);
/*! constructs command line of htags(1) and executes it. /*! constructs command line of htags(1) and executes it.
* \retval TRUE success * \retval TRUE success
* \retval FALSE an error has occured. * \retval FALSE an error has occurred.
*/ */
bool Htags::execute(const QCString &htmldir) bool Htags::execute(const QCString &htmldir)
{ {
......
...@@ -1834,11 +1834,11 @@ void HtmlDocVisitor::filterQuotedCdataAttr(const char* str) ...@@ -1834,11 +1834,11 @@ void HtmlDocVisitor::filterQuotedCdataAttr(const char* str)
// it's enough to replace these two, provided that the declaration // it's enough to replace these two, provided that the declaration
// for the HTML version we generate (and as supported by the browser) // for the HTML version we generate (and as supported by the browser)
// specifies that all the other symbols used in rawVal are // specifies that all the other symbols used in rawVal are
// within the right charachter class (i.e., they're not // within the right character class (i.e., they're not
// some multinational weird charachters not in the BASESET). // some multinational weird characters not in the BASESET).
// We assume that 1) the browser will support whatever is remaining // We assume that 1) the browser will support whatever is remaining
// in the formula and 2) the TeX formulae are generally governed // in the formula and 2) the TeX formulae are generally governed
// by even stricter charachter restrictions so it should be enough. // by even stricter character restrictions so it should be enough.
// //
// On some incompliant browsers, additional translation of // On some incompliant browsers, additional translation of
// '>' and '<' into "&gt;" and "&lt;", respectively, might be needed; // '>' and '<' into "&gt;" and "&lt;", respectively, might be needed;
......
...@@ -104,6 +104,7 @@ static const char extsearch_script[]= ...@@ -104,6 +104,7 @@ static const char extsearch_script[]=
static QCString g_header; static QCString g_header;
static QCString g_footer; static QCString g_footer;
static QCString g_mathjax_code;
//------------------------- Pictures for the Tabs ------------------------ //------------------------- Pictures for the Tabs ------------------------
...@@ -1176,8 +1177,13 @@ static QCString substituteHtmlKeywords(const QCString &s, ...@@ -1176,8 +1177,13 @@ static QCString substituteHtmlKeywords(const QCString &s,
} }
mathJaxJs += "],\n" mathJaxJs += "],\n"
" jax: [\"input/TeX\",\"output/"+mathJaxFormat+"\"],\n" " jax: [\"input/TeX\",\"output/"+mathJaxFormat+"\"],\n"
"});\n" "});\n";
"</script>"; if (!g_mathjax_code.isEmpty())
{
mathJaxJs += g_mathjax_code;
mathJaxJs += "\n";
}
mathJaxJs += "</script>";
mathJaxJs += "<script src=\"" + path + "MathJax.js\"></script>\n"; mathJaxJs += "<script src=\"" + path + "MathJax.js\"></script>\n";
} }
...@@ -1445,6 +1451,15 @@ void HtmlGenerator::init() ...@@ -1445,6 +1451,15 @@ void HtmlGenerator::init()
{ {
g_footer = defaultHtmlFooter; g_footer = defaultHtmlFooter;
} }
if (Config_getBool("USE_MATHJAX"))
{
if (!Config_getString("MATHJAX_CODEFILE").isEmpty())
{
g_mathjax_code=fileToString(Config_getString("MATHJAX_CODEFILE"));
//printf("g_mathjax_code='%s'\n",g_mathjax_code.data());
}
}
createSubDirs(d); createSubDirs(d);
QCString fileName=dname+"/tabs.css"; QCString fileName=dname+"/tabs.css";
...@@ -2383,7 +2398,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket) ...@@ -2383,7 +2398,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket)
{ {
if (emptyList) if (emptyList)
{ {
if (closeBracket) t << "</td><td>)"; if (closeBracket) t << ")</td><td>";
t << "</td>" << endl; t << "</td>" << endl;
t << " <td>"; t << " <td>";
} }
...@@ -2413,6 +2428,22 @@ void HtmlGenerator::endParameterList() ...@@ -2413,6 +2428,22 @@ void HtmlGenerator::endParameterList()
t << " </tr>" << endl; t << " </tr>" << endl;
} }
void HtmlGenerator::exceptionEntry(const char* prefix,bool closeBracket)
{
DBG_HTML(t << "<!-- exceptionEntry -->" << endl;)
t << "</td>" << endl;
t << " </tr>" << endl;
t << " <tr>" << endl;
t << " <td align=\"right\">";
// colspan 2 so it gets both parameter type and parameter name columns
if (prefix)
t << prefix << "</td><td>(</td><td colspan=\"2\">";
else if (closeBracket)
t << "</td><td>)</td><td></td><td>";
else
t << "</td><td></td><td colspan=\"2\">";
}
void HtmlGenerator::endMemberDoc(bool hasArgs) void HtmlGenerator::endMemberDoc(bool hasArgs)
{ {
DBG_HTML(t << "<!-- endMemberDoc -->" << endl;) DBG_HTML(t << "<!-- endMemberDoc -->" << endl;)
......
...@@ -308,6 +308,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -308,6 +308,7 @@ class HtmlGenerator : public OutputGenerator
void endParameterName(bool last,bool emptyList,bool closeBracket); void endParameterName(bool last,bool emptyList,bool closeBracket);
void startParameterList(bool); void startParameterList(bool);
void endParameterList(); void endParameterList();
virtual void exceptionEntry(const char*,bool);
void startConstraintList(const char *); void startConstraintList(const char *);
void startConstraintParam(); void startConstraintParam();
......
...@@ -2387,6 +2387,14 @@ void LatexGenerator::endParameterName(bool last,bool /* emptyList */,bool closeB ...@@ -2387,6 +2387,14 @@ void LatexGenerator::endParameterName(bool last,bool /* emptyList */,bool closeB
} }
} }
void LatexGenerator::exceptionEntry(const char* prefix,bool closeBracket)
{
if (prefix)
t << " " << prefix;
else if (closeBracket)
t << ")";
t << " ";
}
void LatexGenerator::writeDoc(DocNode *n,Definition *ctx,MemberDef *) void LatexGenerator::writeDoc(DocNode *n,Definition *ctx,MemberDef *)
{ {
......
...@@ -240,6 +240,7 @@ class LatexGenerator : public OutputGenerator ...@@ -240,6 +240,7 @@ class LatexGenerator : public OutputGenerator
void endParameterName(bool,bool,bool); void endParameterName(bool,bool,bool);
void startParameterList(bool); void startParameterList(bool);
void endParameterList(); void endParameterList();
void exceptionEntry(const char*,bool);
void startConstraintList(const char *); void startConstraintList(const char *);
void startConstraintParam(); void startConstraintParam();
......
...@@ -313,6 +313,12 @@ class LayoutParser : public QXmlDefaultHandler ...@@ -313,6 +313,12 @@ class LayoutParser : public QXmlDefaultHandler
SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE), SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE),
SrcLangExt_Fortran,theTranslator->trDataTypes() SrcLangExt_Fortran,theTranslator->trDataTypes()
))); )));
m_sHandler.insert("class/memberdecl/services",
new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
MemberListType_services,theTranslator->trServices()));
m_sHandler.insert("class/memberdecl/interfaces",
new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
MemberListType_interfaces,theTranslator->trInterfaces()));
m_sHandler.insert("class/memberdecl/publictypes", m_sHandler.insert("class/memberdecl/publictypes",
new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
MemberListType_pubTypes,theTranslator->trPublicTypes())); MemberListType_pubTypes,theTranslator->trPublicTypes()));
...@@ -422,6 +428,12 @@ class LayoutParser : public QXmlDefaultHandler ...@@ -422,6 +428,12 @@ class LayoutParser : public QXmlDefaultHandler
m_sHandler.insert("class/memberdef/enums", m_sHandler.insert("class/memberdef/enums",
new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
MemberListType_enumMembers,theTranslator->trMemberEnumerationDocumentation())); MemberListType_enumMembers,theTranslator->trMemberEnumerationDocumentation()));
m_sHandler.insert("class/memberdef/services",
new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
MemberListType_serviceMembers,theTranslator->trInterfaces()));
m_sHandler.insert("class/memberdef/interfaces",
new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
MemberListType_interfaceMembers,theTranslator->trInterfaces()));
m_sHandler.insert("class/memberdef/constructors", m_sHandler.insert("class/memberdef/constructors",
new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
MemberListType_constructors,theTranslator->trConstructorDocumentation())); MemberListType_constructors,theTranslator->trConstructorDocumentation()));
...@@ -465,12 +477,16 @@ class LayoutParser : public QXmlDefaultHandler ...@@ -465,12 +477,16 @@ class LayoutParser : public QXmlDefaultHandler
new StartElementHandler(this,&LayoutParser::startMemberDecl)); new StartElementHandler(this,&LayoutParser::startMemberDecl));
m_sHandler.insert("namespace/memberdecl/nestednamespaces", m_sHandler.insert("namespace/memberdecl/nestednamespaces",
new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedNamespaces,&LayoutParser::startSectionEntry, new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedNamespaces,&LayoutParser::startSectionEntry,
COMPILE_FOR_3_OPTIONS( COMPILE_FOR_4_OPTIONS(
theTranslator->trNamespaces(), theTranslator->trNamespaces(),
SrcLangExt_Java,theTranslator->trPackages(), SrcLangExt_Java,theTranslator->trPackages(),
SrcLangExt_VHDL,theTranslator->trPackages(), SrcLangExt_VHDL,theTranslator->trPackages(),
SrcLangExt_IDL,theTranslator->trModules(),
SrcLangExt_Fortran,theTranslator->trModules() SrcLangExt_Fortran,theTranslator->trModules()
))); )));
m_sHandler.insert("namespace/memberdecl/constantgroups",
new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedConstantGroups,&LayoutParser::startSectionEntry,
theTranslator->trConstantGroups()));
m_sHandler.insert("namespace/memberdecl/classes", m_sHandler.insert("namespace/memberdecl/classes",
new StartElementHandlerSection(this,LayoutDocEntry::NamespaceClasses,&LayoutParser::startSectionEntry, new StartElementHandlerSection(this,LayoutDocEntry::NamespaceClasses,&LayoutParser::startSectionEntry,
COMPILE_FOR_2_OPTIONS( COMPILE_FOR_2_OPTIONS(
...@@ -559,11 +575,15 @@ class LayoutParser : public QXmlDefaultHandler ...@@ -559,11 +575,15 @@ class LayoutParser : public QXmlDefaultHandler
))); )));
m_sHandler.insert("file/memberdecl/namespaces", m_sHandler.insert("file/memberdecl/namespaces",
new StartElementHandlerSection(this,LayoutDocEntry::FileNamespaces,&LayoutParser::startSectionEntry, new StartElementHandlerSection(this,LayoutDocEntry::FileNamespaces,&LayoutParser::startSectionEntry,
COMPILE_FOR_2_OPTIONS( COMPILE_FOR_3_OPTIONS(
theTranslator->trNamespaces(), theTranslator->trNamespaces(),
SrcLangExt_Java,theTranslator->trPackages(), SrcLangExt_Java,theTranslator->trPackages(),
SrcLangExt_IDL,theTranslator->trModules(),
SrcLangExt_Fortran,theTranslator->trModules() SrcLangExt_Fortran,theTranslator->trModules()
))); )));
m_sHandler.insert("file/memberdecl/constantgroups",
new StartElementHandlerSection(this,LayoutDocEntry::FileNamespaces,&LayoutParser::startSectionEntry,
theTranslator->trConstantGroups()));
m_sHandler.insert("file/memberdecl/defines", m_sHandler.insert("file/memberdecl/defines",
new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
MemberListType_decDefineMembers,theTranslator->trDefines())); MemberListType_decDefineMembers,theTranslator->trDefines()));
......
...@@ -45,11 +45,11 @@ struct LayoutDocEntry ...@@ -45,11 +45,11 @@ struct LayoutDocEntry
ClassUsedFiles, ClassUsedFiles,
// Namespace specific items // Namespace specific items
NamespaceNestedNamespaces, NamespaceClasses, NamespaceNestedNamespaces, NamespaceNestedConstantGroups,
NamespaceInlineClasses, NamespaceClasses, NamespaceInlineClasses,
// File specific items // File specific items
FileClasses, FileNamespaces, FileClasses, FileNamespaces, FileConstantGroups,
FileIncludes, FileIncludeGraph, FileIncludes, FileIncludeGraph,
FileIncludedByGraph, FileSourceLink, FileIncludedByGraph, FileSourceLink,
FileInlineClasses, FileInlineClasses,
......
...@@ -31,6 +31,8 @@ ...@@ -31,6 +31,8 @@
" <memberdecl>\n" " <memberdecl>\n"
" <nestedclasses visible=\"yes\" title=\"\"/>\n" " <nestedclasses visible=\"yes\" title=\"\"/>\n"
" <publictypes title=\"\"/>\n" " <publictypes title=\"\"/>\n"
" <services title=\"\"/>\n"
" <interfaces title=\"\"/>\n"
" <publicslots title=\"\"/>\n" " <publicslots title=\"\"/>\n"
" <signals title=\"\"/>\n" " <signals title=\"\"/>\n"
" <publicmethods title=\"\"/>\n" " <publicmethods title=\"\"/>\n"
...@@ -65,6 +67,8 @@ ...@@ -65,6 +67,8 @@
" <inlineclasses title=\"\"/>\n" " <inlineclasses title=\"\"/>\n"
" <typedefs title=\"\"/>\n" " <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n" " <enums title=\"\"/>\n"
" <services title=\"\"/>\n"
" <interfaces title=\"\"/>\n"
" <constructors title=\"\"/>\n" " <constructors title=\"\"/>\n"
" <functions title=\"\"/>\n" " <functions title=\"\"/>\n"
" <related title=\"\"/>\n" " <related title=\"\"/>\n"
...@@ -82,6 +86,7 @@ ...@@ -82,6 +86,7 @@
" <briefdescription visible=\"yes\"/>\n" " <briefdescription visible=\"yes\"/>\n"
" <memberdecl>\n" " <memberdecl>\n"
" <nestednamespaces visible=\"yes\" title=\"\"/>\n" " <nestednamespaces visible=\"yes\" title=\"\"/>\n"
" <constantgroups visible=\"yes\" title=\"\"/>\n"
" <classes visible=\"yes\" title=\"\"/>\n" " <classes visible=\"yes\" title=\"\"/>\n"
" <typedefs title=\"\"/>\n" " <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n" " <enums title=\"\"/>\n"
...@@ -110,6 +115,7 @@ ...@@ -110,6 +115,7 @@
" <memberdecl>\n" " <memberdecl>\n"
" <classes visible=\"yes\" title=\"\"/>\n" " <classes visible=\"yes\" title=\"\"/>\n"
" <namespaces visible=\"yes\" title=\"\"/>\n" " <namespaces visible=\"yes\" title=\"\"/>\n"
" <constantgroups visible=\"yes\" title=\"\"/>\n"
" <defines title=\"\"/>\n" " <defines title=\"\"/>\n"
" <typedefs title=\"\"/>\n" " <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n" " <enums title=\"\"/>\n"
......
...@@ -31,6 +31,8 @@ ...@@ -31,6 +31,8 @@
<memberdecl> <memberdecl>
<nestedclasses visible="yes" title=""/> <nestedclasses visible="yes" title=""/>
<publictypes title=""/> <publictypes title=""/>
<services title=""/>
<interfaces title=""/>
<publicslots title=""/> <publicslots title=""/>
<signals title=""/> <signals title=""/>
<publicmethods title=""/> <publicmethods title=""/>
...@@ -65,6 +67,8 @@ ...@@ -65,6 +67,8 @@
<inlineclasses title=""/> <inlineclasses title=""/>
<typedefs title=""/> <typedefs title=""/>
<enums title=""/> <enums title=""/>
<services title=""/>
<interfaces title=""/>
<constructors title=""/> <constructors title=""/>
<functions title=""/> <functions title=""/>
<related title=""/> <related title=""/>
...@@ -82,6 +86,7 @@ ...@@ -82,6 +86,7 @@
<briefdescription visible="yes"/> <briefdescription visible="yes"/>
<memberdecl> <memberdecl>
<nestednamespaces visible="yes" title=""/> <nestednamespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<classes visible="yes" title=""/> <classes visible="yes" title=""/>
<typedefs title=""/> <typedefs title=""/>
<enums title=""/> <enums title=""/>
...@@ -110,6 +115,7 @@ ...@@ -110,6 +115,7 @@
<memberdecl> <memberdecl>
<classes visible="yes" title=""/> <classes visible="yes" title=""/>
<namespaces visible="yes" title=""/> <namespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<defines title=""/> <defines title=""/>
<typedefs title=""/> <typedefs title=""/>
<enums title=""/> <enums title=""/>
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
ManDocVisitor::ManDocVisitor(FTextStream &t,CodeOutputInterface &ci, ManDocVisitor::ManDocVisitor(FTextStream &t,CodeOutputInterface &ci,
const char *langExt) const char *langExt)
: DocVisitor(DocVisitor_Man), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(TRUE), : DocVisitor(DocVisitor_Man), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(FALSE),
m_indent(0), m_langExt(langExt) m_indent(0), m_langExt(langExt)
{ {
} }
......
...@@ -33,16 +33,34 @@ ...@@ -33,16 +33,34 @@
static QCString getExtension() static QCString getExtension()
{ {
/*
* [.][nuber][rest]
* in case of . missing, just ignore it
* in case number missing, just place a 3 in front of it
*/
QCString ext = Config_getString("MAN_EXTENSION"); QCString ext = Config_getString("MAN_EXTENSION");
if( ext.length() >= 2 && if (ext.isEmpty())
ext.data()[0] == '.')
{ {
ext = ext.mid(1, ext.length()-1); ext = "3";
} }
else else
{
if (ext.at(0)=='.')
{
if (ext.length()==1)
{ {
ext = "3"; ext = "3";
} }
else // strip .
{
ext = ext.mid(1);
}
}
if (ext.at(0)<='0' || ext.at(0)>='9')
{
ext.prepend("3");
}
}
return ext; return ext;
} }
...@@ -50,7 +68,7 @@ ManGenerator::ManGenerator() : OutputGenerator() ...@@ -50,7 +68,7 @@ ManGenerator::ManGenerator() : OutputGenerator()
{ {
dir=Config_getString("MAN_OUTPUT")+"/man" + getExtension(); dir=Config_getString("MAN_OUTPUT")+"/man" + getExtension();
firstCol=TRUE; firstCol=TRUE;
paragraph=FALSE; paragraph=TRUE;
col=0; col=0;
upperCase=FALSE; upperCase=FALSE;
insideTabbing=FALSE; insideTabbing=FALSE;
...@@ -129,8 +147,8 @@ static QCString buildFileName(const char *name) ...@@ -129,8 +147,8 @@ static QCString buildFileName(const char *name)
} }
} }
QCString &manExtension = Config_getString("MAN_EXTENSION"); QCString manExtension = "." + getExtension();
if (fileName.right(2)!=manExtension) if (fileName.right(manExtension.length())!=manExtension)
{ {
fileName+=manExtension; fileName+=manExtension;
} }
...@@ -798,4 +816,12 @@ void ManGenerator::endLabels() ...@@ -798,4 +816,12 @@ void ManGenerator::endLabels()
{ {
} }
void ManGenerator::endHeaderSection()
{
if (!firstCol)
{
t<< endl; firstCol=TRUE;
}
}
...@@ -95,7 +95,7 @@ class ManGenerator : public OutputGenerator ...@@ -95,7 +95,7 @@ class ManGenerator : public OutputGenerator
void startMemberSections() {} void startMemberSections() {}
void endMemberSections() {} void endMemberSections() {}
void startHeaderSection() {} void startHeaderSection() {}
void endHeaderSection() {} void endHeaderSection();
void startMemberHeader(const char *); void startMemberHeader(const char *);
void endMemberHeader(); void endMemberHeader();
void insertMemberAlign(bool) {} void insertMemberAlign(bool) {}
...@@ -229,6 +229,7 @@ class ManGenerator : public OutputGenerator ...@@ -229,6 +229,7 @@ class ManGenerator : public OutputGenerator
void endParameterName(bool,bool,bool) {} void endParameterName(bool,bool,bool) {}
void startParameterList(bool) {} void startParameterList(bool) {}
void endParameterList() {} void endParameterList() {}
void exceptionEntry(const char*,bool) {}
void startFontClass(const char *) {} void startFontClass(const char *) {}
void endFontClass() {} void endFontClass() {}
......
...@@ -473,6 +473,25 @@ static int processNmdash(GrowBuf &out,const char *data,int,int size) ...@@ -473,6 +473,25 @@ static int processNmdash(GrowBuf &out,const char *data,int,int size)
return 0; return 0;
} }
/** Process quoted section "...", can contain one embedded newline */
static int processQuoted(GrowBuf &out,const char *data,int,int size)
{
int i=1;
int nl=0;
while (i<size && data[i]!='"' && nl<2)
{
if (data[i]=='\n') nl++;
i++;
}
if (i<size && data[i]=='"' && nl<2)
{
out.addStr(data,i+1);
return i+1;
}
// not a quoted section
return 0;
}
/** Process a HTML tag. Note that <pre>..</pre> are treated specially, in /** Process a HTML tag. Note that <pre>..</pre> are treated specially, in
* the sense that all code inside is written unprocessed * the sense that all code inside is written unprocessed
*/ */
...@@ -2197,6 +2216,7 @@ QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &input ...@@ -2197,6 +2216,7 @@ QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &input
g_actions[(unsigned int)'!']=processLink; g_actions[(unsigned int)'!']=processLink;
g_actions[(unsigned int)'<']=processHtmlTag; g_actions[(unsigned int)'<']=processHtmlTag;
g_actions[(unsigned int)'-']=processNmdash; g_actions[(unsigned int)'-']=processNmdash;
g_actions[(unsigned int)'"']=processQuoted;
init=TRUE; init=TRUE;
} }
......
This diff is collapsed.
...@@ -44,6 +44,7 @@ class Entry; ...@@ -44,6 +44,7 @@ class Entry;
void marshalInt(StorageIntf *s,int v); void marshalInt(StorageIntf *s,int v);
void marshalUInt(StorageIntf *s,uint v); void marshalUInt(StorageIntf *s,uint v);
void marshalUInt64(StorageIntf *s,uint64 v);
void marshalBool(StorageIntf *s,bool b); void marshalBool(StorageIntf *s,bool b);
void marshalQCString(StorageIntf *s,const QCString &str); void marshalQCString(StorageIntf *s,const QCString &str);
void marshalQGString(StorageIntf *s,const QGString &str); void marshalQGString(StorageIntf *s,const QGString &str);
...@@ -70,6 +71,7 @@ void marshalEntryTree(StorageIntf *s,Entry *e); ...@@ -70,6 +71,7 @@ void marshalEntryTree(StorageIntf *s,Entry *e);
int unmarshalInt(StorageIntf *s); int unmarshalInt(StorageIntf *s);
uint unmarshalUInt(StorageIntf *s); uint unmarshalUInt(StorageIntf *s);
uint64 unmarshalUInt64(StorageIntf *s);
bool unmarshalBool(StorageIntf *s); bool unmarshalBool(StorageIntf *s);
QCString unmarshalQCString(StorageIntf *s); QCString unmarshalQCString(StorageIntf *s);
QGString unmarshalQGString(StorageIntf *s); QGString unmarshalQGString(StorageIntf *s);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -404,6 +404,7 @@ class OutputGenerator : public BaseOutputDocInterface ...@@ -404,6 +404,7 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void endParameterName(bool,bool,bool) = 0; virtual void endParameterName(bool,bool,bool) = 0;
virtual void startParameterList(bool) = 0; virtual void startParameterList(bool) = 0;
virtual void endParameterList() = 0; virtual void endParameterList() = 0;
virtual void exceptionEntry(const char*,bool) = 0;
virtual void startConstraintList(const char *) = 0; virtual void startConstraintList(const char *) = 0;
virtual void startConstraintParam() = 0; virtual void startConstraintParam() = 0;
......
...@@ -422,6 +422,8 @@ class OutputList : public OutputDocInterface ...@@ -422,6 +422,8 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startParameterList,openBracket); } { forall(&OutputGenerator::startParameterList,openBracket); }
void endParameterList() void endParameterList()
{ forall(&OutputGenerator::endParameterList); } { forall(&OutputGenerator::endParameterList); }
void exceptionEntry(const char* prefix,bool closeBracket)
{ forall(&OutputGenerator::exceptionEntry,prefix,closeBracket); }
void startConstraintList(const char *header) void startConstraintList(const char *header)
{ forall(&OutputGenerator::startConstraintList,header); } { forall(&OutputGenerator::startConstraintList,header); }
......
...@@ -1575,6 +1575,8 @@ void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *) ...@@ -1575,6 +1575,8 @@ void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *)
case MemberType_DCOP: memType="dcop"; isFunc=TRUE; break; case MemberType_DCOP: memType="dcop"; isFunc=TRUE; break;
case MemberType_Slot: memType="slot"; isFunc=TRUE; break; case MemberType_Slot: memType="slot"; isFunc=TRUE; break;
case MemberType_Event: memType="event"; break; case MemberType_Event: memType="event"; break;
case MemberType_Interface: memType="interface"; break;
case MemberType_Service: memType="service"; break;
} }
m_output.openHash() m_output.openHash()
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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