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
(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.
......@@ -26,4 +26,4 @@ forum.
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)
if (!wasQuoted) /* as a result of the expansion, a single string
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
splitting is done to allow quoted items with spaces! */
{
......
......@@ -20,7 +20,7 @@ doxygen_version_minor=8
doxygen_version_revision=3.1
#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"`
......
......@@ -58,7 +58,7 @@ of macros. This is to allow macro names to appear in the type of
function parameters for instance.
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
the standard is to prevent feeding multiple definitions of the
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
translation unit.
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
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/>
\endhtmlonly
\htmlonly
<br><br>
Go to the <a href="preprocessing.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
......
......@@ -433,8 +433,8 @@ config file.
For VHDL a comment normally start with "--". Doxygen will extract comments
starting with "--!". There are only two types of comment blocks in VHDL;
a one line --! comment representing a brief description, and a multi-line
--! comment (where the --! prefix is repeated for each line) representing
a one line "--!" comment representing a brief description, and a multi-line
"--!" comment (where the "--!" prefix is repeated for each line) representing
a detailed description.
Comments are always located in front of the item that is being documented
......
......@@ -67,11 +67,11 @@ afterwards:
\verbatim
doxygen -w html header.html footer.html stylesheet.css <config_file>
\endverbatim
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
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
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
\ref cfg_latex_footer "LATEX_FOOTER") and the style sheet included
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>
\verbatim
doxygen -w latex header.tex footer.tex doxygen.sty <config_file>
\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
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
......
......@@ -19,7 +19,7 @@
<ol>
<li><b>How to get information on the index page in HTML?</b>
<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
/*! \mainpage My Personal Index Page
*
......@@ -41,9 +41,9 @@ You should use the \\mainpage command inside a comment block like this:
Check the following:
<ol>
<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.
<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.
<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
......@@ -67,12 +67,12 @@ PREDEFINED = MY_MACRO()=
In order for global functions, variables, enums, typedefs, and defines
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.
Alternatively, you can put all members in a group (or module)
using the \\ingroup command and then document the group using a comment
block containing the \\defgroup command.
using the \ref cmdingroup "\\ingroup" command and then document the group using a comment
block containing the \ref cmddefgroup "\\defgroup" command.
For member functions or functions that are part of a namespace you should
document either the class or namespace.
......@@ -98,12 +98,13 @@ around the blocks that should be hidden and put:
PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS
\endverbatim
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
part of a path.
In most cases you can use \ref cfg_strip_from_inc_path "STRIP_FROM_INC_PATH"
to strip a user defined part of a path.
You can also document your class as follows
......@@ -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>
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
HTML_HEADER.
\ref cfg_html_header "HTML_HEADER".
<li><b>The overall HTML output looks different, while I only wanted to
use my own html header file</b>
......@@ -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>
Doxygen is unaware of the STL classes, unless the option BUILTIN_STL_SUPPORT is
turned on.
Doxygen is unaware of the STL classes, unless the
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>
......@@ -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>,
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
( 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
<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
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
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
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),
......
......@@ -100,7 +100,7 @@
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
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
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
......
......@@ -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> Ends a caption. Use within a table only.
<li><tt>\<CODE\></tt> Starts a piece of text displayed in a typewriter font.
Note that for C# code, this command is equivalent to
\ref cmdcode "\\code".
Note that only for C# code, this command is equivalent to
\ref cmdcode "\\code".
<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".
<li><tt>\<DD\></tt> Starts an item description.
<li><tt>\<DFN\></tt> Starts a piece of text displayed in a typewriter font.
......
......@@ -30,7 +30,7 @@ Version: $(VERSION)
Doxygen is the de facto standard tool for generating documentation from
annotated C++ sources, but it also supports other popular programming
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:
<ol>
......@@ -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>.
Make sure the severity of the bug report is set to "enhancement".
<h2>Acknowledgements</h2>
\addindex acknowledgements
<h2>Acknowledgments</h2>
\addindex acknowledgments
Thanks go to:
<ul>
<li>\addindex Doc++
......
......@@ -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.
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
doxygen with certain features enabled.
......@@ -446,7 +446,7 @@ Here is what is required:
of Qt that is needed for to compile doxygen.
The Windows specific part were also created.
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
create empty folders, so you have to add the folders
......@@ -523,12 +523,12 @@ If you want to produce compressed HTML files (see \ref
cfg_generate_htmlhelp "GENERATE_HTMLHELP") in the config file, then
you need the Microsoft HTML help workshop.
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
cfg_qhg_location "QHG_LOCATION") in the config file, then
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
install <a href="http://en.wikipedia.org/wiki/LaTeX">LaTeX</a> and
......@@ -601,7 +601,7 @@ features:
cfg_qhelgenerator_loc "QHG_LOCATION") in the config file,
then you need qhelpgenerator which is part of Qt.
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/">
the Graph visualization toolkit version 1.8.10</a><br>
......
......@@ -104,7 +104,7 @@ when the translator was updated.
<td>Czech</td>
<td>Petr Přikryl</td>
<td>prikryl at atlas dot cz</td>
<td>up-to-date</td>
<td>1.8.04</td>
</tr>
<tr bgcolor="#ffffff">
<td>Danish</td>
......@@ -116,7 +116,7 @@ when the translator was updated.
<td>Dutch</td>
<td>Dimitri van Heesch</td>
<td>dimitri at stack dot nl</td>
<td>up-to-date</td>
<td>1.8.04</td>
</tr>
<tr bgcolor="#ffffff">
<td>English</td>
......@@ -128,7 +128,7 @@ when the translator was updated.
<td>Esperanto</td>
<td>Ander Martínez</td>
<td>ander dot basaundi at gmail dot com</td>
<td>up-to-date</td>
<td>1.8.04</td>
</tr>
<tr bgcolor="#ffffff">
<td>Finnish</td>
......@@ -146,13 +146,13 @@ when the translator was updated.
<td>German</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>up-to-date</td>
<td>1.8.04</td>
</tr>
<tr bgcolor="#ffffff">
<td>Greek</td>
<td>Paul Gessos</td>
<td>gessos dot paul at yahoo dot gr</td>
<td>up-to-date</td>
<td>1.8.04</td>
</tr>
<tr bgcolor="#ffffff">
<td>Hungarian</td>
......@@ -266,7 +266,7 @@ when the translator was updated.
<td>Slovak</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>up-to-date</td>
<td>1.8.04</td>
</tr>
<tr bgcolor="#ffffff">
<td>Slovene</td>
......@@ -278,7 +278,7 @@ when the translator was updated.
<td>Spanish</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>up-to-date</td>
<td>1.8.04</td>
</tr>
<tr bgcolor="#ffffff">
<td>Swedish</td>
......@@ -296,7 +296,7 @@ when the translator was updated.
<td>Ukrainian</td>
<td>Olexij Tkatchenko<br/>Petro Yermolenko</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 bgcolor="#ffffff">
<td>Vietnamese</td>
......@@ -341,26 +341,26 @@ when the translator was updated.
\hline
Croatian & Boris Bralo & {\tt\tiny boris dot bralo at gmail dot com} & 1.8.2 \\
\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
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} & ~ \\
\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
English & Dimitri van Heesch & {\tt\tiny dimitri at stack dot nl} & up-to-date \\
\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
Finnish & Antti Laine & {\tt\tiny antti dot a dot laine at tut dot fi} & 1.6.0 \\
\hline
French & David Martinet & {\tt\tiny contact at e-concept-applications dot fr} & 1.8.0 \\
~ & Xavier Outhier & {\tt\tiny xouthier at yahoo dot fr} & ~ \\
\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} & ~ \\
\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
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} & ~ \\
......@@ -412,12 +412,12 @@ when the translator was updated.
\hline
SerbianCyrilic & Nedeljko Stefanovic & {\tt\tiny stenedjo at yahoo dot com} & 1.6.0 \\
\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} & ~ \\
\hline
Slovene & Matjaž Ostroveršnik & {\tt\tiny matjaz dot ostroversnik at ostri dot org} & 1.4.6 \\
\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} & ~ \\
~ & David Vaquero & {\tt\tiny david at grupoikusnet dot com} & ~ \\
\hline
......@@ -425,7 +425,7 @@ when the translator was updated.
\hline
Turkish & Emin Ilker Cetinbas & {\tt\tiny niw3 at yahoo dot com} & 1.7.5 \\
\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} & ~ \\
\hline
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
script was developed (located in \c doxygen/doc directory).
It extracts the important information about obsolete and
new methods from the source files for each of the languages.
The information is stored in the <em>translator report</em> ASCII file
(translator_report.txt).
The information is stored in the translator report ASCII file
(\c translator_report.txt).
\htmlonly If you compiled this documentation
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
really obsolete translators brings too much maintenance and
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
script was developed (located in \c doxygen/doc directory).
It extracts the important information about obsolete and
new methods from the source files for each of the languages.
The information is stored in the <em>translator report</em> ASCII file
(%(translatorReportFileName)s).
The information is stored in the translator report ASCII file
(\c %(translatorReportFileName)s).
\htmlonly If you compiled this documentation
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
really obsolete translators brings too much maintenance and
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:
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 preceded by a space, newline, or one the following characters `<{([,:;`
......
......@@ -21,37 +21,39 @@
The following output formats are \e directly supported by doxygen:
<dl>
<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$
<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>
<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>
<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
Word. If you have success with other programs, please let me know.
<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>
The following output formats are \e indirectly supported by doxygen:
<dl>
<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
\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>
<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>
<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>
<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>
<dd>Generated from the \f$\mbox{\LaTeX}\f$ output by
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
<dd>Generated from the \f$\mbox{\LaTeX}\f$ output by
running <code>make pdf</code> in the output directory.
......
......@@ -23,27 +23,27 @@ doxygen-develop mailing list. Suggestions are welcome as well.
\section using_perlmod_fmt Usage
<p>When the <b>GENERATE_PERLMOD</b> tag is enabled in the Doxyfile,
running Doxygen generates a number of files in the <b>perlmod/</b>
<p>When the \ref cfg_generate_perlmod "GENERATE_PERLMOD" tag is enabled in the Doxyfile,
running Doxygen generates a number of files in the `perlmod/`
subdirectory of your output directory. These files are the following:
<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
\ref doxydocs_format "below".
<li><b>DoxyModel.pm</b>. This Perl module describes the structure of
<b>DoxyDocs.pm</b>, independently of the actual documentation. See
<li>`DoxyModel.pm`: This Perl module describes the structure of
`DoxyDocs.pm`, independently of the actual documentation. See
\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
contains the paths to those files and other relevant information. This
file is intended to be included by your own Makefile.
<li><b>Makefile</b>. This is a simple Makefile including
<b>doxyrules.make</b>.
<li>`Makefile`: This is a simple Makefile including
`doxyrules.make`.
</ul>
......@@ -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
how to do this.
<p>Setting the <b>PERLMOD_LATEX</b> tag to <b>YES</b> in the Doxyfile
enables the creation of some additional files in the <b>perlmod/</b>
<p>Setting the \ref cfg_perlmod_latex "PERLMOD_LATEX" tag to \c YES in the
\c Doxyfile enables the creation of some additional files in the `perlmod/`
subdirectory of your output directory. These files contain the Perl
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
<b>doxyrules.make</b> and the <b>Makefile</b>.
`doxyrules.make` and the `Makefile`.
<p>The additional generated files are the following:
<ul>
<li><b>doxylatex.pl</b>. This Perl script uses DoxyDocs.pm and
DoxyModel.pm to generate <b>doxydocs.tex</b>, a TeX file containing
<li>`doxylatex.pl`: This Perl script uses `DoxyDocs.pm` and
DoxyModel.pm to generate `doxydocs.tex`, a TeX file containing
the documentation in a format that can be accessed by LaTeX code. This
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
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
to generate <b>doxytemplate.tex</b>, a TeX file defining default
<li>`doxylatex-template.pl`: This Perl script uses `DoxyModel.pm`
to generate `doxytemplate.tex`, a \f$\mbox{\TeX}\f$ file defining default
values for some macros. doxytemplate.tex is included by
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
document is LaTeX'ed to produce the PDF and DVI documentation by the
rules added to <b>doxyrules.make</b>.
document is \f$\mbox{\LaTeX}\f$'ed to produce the PDF and DVI documentation by the
rules added to `doxyrules.make`.
</ul>
\subsection pm_pdf_gen Creation of PDF and DVI output
<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>
<li>Update your Doxyfile to the latest version using:
<li>Update your `Doxyfile` to the latest version using:
<pre>doxygen -u Doxyfile</pre>
<li>Set both <b>GENERATE_PERLMOD</b> and <b>PERLMOD_LATEX</b> tags to
YES in your Doxyfile.
<li>Set both \ref cfg_generate_perlmod "GENERATE_PERLMOD" and
\ref cfg_perlmod_latex "PERLMOD_LATEX" tags to
\c YES in your Doxyfile.
<li>Run Doxygen on your Doxyfile:
<pre>doxygen Doxyfile</pre>
<li>A <b>perlmod/</b> subdirectory should have appeared in your output
directory. Enter the <b>perlmod/</b> subdirectory and run:
<li>A `perlmod/` subdirectory should have appeared in your output
directory. Enter the `perlmod/` subdirectory and run:
<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.
<li>Run:
<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.
</ol>
......@@ -136,29 +137,29 @@ in DVI format.
\section doxydocs_format Documentation format.
<p>The Perl Module documentation generated by Doxygen is stored in
<b>DoxyDocs.pm</b>. This is a very simple Perl module that contains
only two statements: an assignment to the variable <b>$doxydocs</b> and
the customary <b>1;</b> statement which usually ends Perl modules.
The documentation is stored in the variable <b>$doxydocs</b>, which
can then be accessed by a Perl script using <b>DoxyDocs.pm</b>.
`DoxyDocs.pm`. This is a very simple Perl module that contains
only two statements: an assignment to the variable `$doxydocs` and
the customary `1;` statement which usually ends Perl modules.
The documentation is stored in the variable `$doxydocs`, which
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.
<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
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
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
within the tree. The values of the hash fields are the children of
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
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
......@@ -166,12 +167,12 @@ tree.
</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
Perl script.
<!--
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
present in \ref perlmod_tree "this page".
-->
......@@ -179,16 +180,16 @@ present in \ref perlmod_tree "this page".
\section doxymodel_format Data structure
<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,
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
documentation tree.
<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
<b>doxylatex.pl</b> or <b>doxytemplate-latex.pl</b>) to get an idea on
how to use <b>DoxyModel.pm</b>.
`doxylatex.pl` or `doxytemplate-latex.pl`) to get an idea on
how to use `DoxyModel.pm`.
\htmlonly
......
......@@ -59,7 +59,7 @@ has its own advantages and disadvantages:
Advantages over the client side search engine are that it provides full
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.
@note In the future this option will probably be replaced by the next
......@@ -80,7 +80,7 @@ has its own advantages and disadvantages:
\ref cfg_server_based_search "SERVER_BASED_SEARCH" and
\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
very large projects. It is also possible to combine multiple doxygen
......@@ -126,7 +126,7 @@ has its own advantages and disadvantages:
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
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.
Advantage of this method is that it nicely integrates with the Xcode
......@@ -139,7 +139,7 @@ has its own advantages and disadvantages:
<h2>6. Qt Compressed Help</h2>
If you develop for or want to install the Qt application framework,
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).
To enable this feature set \ref cfg_generate_qhp "GENERATE_QHP" to \c YES.
......@@ -147,7 +147,7 @@ has its own advantages and disadvantages:
\ref cfg_qhp_namespace "QHP_NAMESPACE",
\ref cfg_qhg_location "QHG_LOCATION",
\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.
Feature wise the Qt compressed help feature is comparable with the CHM
......
......@@ -1714,7 +1714,7 @@ class TrManager:
in the Translator class but their identifiers do not appear
in source files. The situation should be checked. The .cpp
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:'''
f.write('\n' + '=' * 70 + '\n')
f.write(fill(s) + '\n\n')
......
This diff is collapsed.
......@@ -51,7 +51,7 @@
\endverbatim
then doxygen will remove the braces and correctly parse the result.
<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.
This also holds for the "Referenced by" list that is generated for
each function.
......@@ -62,7 +62,8 @@
documentation, because of possible ambiguities or lack of
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
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.
<li>There is only very limited support for member specialization at the
moment. It only works if there is a specialized template class as
......
......@@ -128,6 +128,7 @@ REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
CLANG_ASSISTED_PARSING = YES
CLANG_OPTIONS =
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
......@@ -184,6 +185,7 @@ USE_MATHJAX = NO
MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = YES
SERVER_BASED_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()
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)
{
static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
......@@ -177,6 +190,10 @@ void ClangParser::start(const char *fileName)
if (p->tu)
{
//clang_getInclusions(p->tu,
// inclusionVisitor,
// (CXClientData)fileName
// );
for (uint i=0, n=clang_getNumDiagnostics(p->tu); i!=n; ++i)
{
CXDiagnostic diag = clang_getDiagnostic(p->tu, i);
......@@ -610,7 +627,7 @@ void ClangParser::writeSources(OutputList &ol,FileDef *fd)
char const *s = clang_getCString(tokenString);
CXCursorKind cursorKind = clang_getCursorKind(p->cursors[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)
{
case CXToken_Keyword:
......
......@@ -187,7 +187,7 @@ class ClassDefImpl
bool isGeneric;
int spec;
uint64 spec;
};
void ClassDefImpl::init(const char *defFileName, const char *name,
......@@ -435,6 +435,12 @@ void ClassDef::internalInsertMember(MemberDef *md,
{
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
addMemberToList(MemberListType_signals,md,TRUE);
break;
......@@ -581,6 +587,12 @@ void ClassDef::internalInsertMember(MemberDef *md,
{
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:
addMemberToList(MemberListType_propertyMembers,md,FALSE);
break;
......@@ -1035,6 +1047,14 @@ void ClassDef::showUsedFiles(OutputList &ol)
{
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
{
ol.parseText(theTranslator->trGeneratedFromFiles(
......@@ -1811,6 +1831,7 @@ void ClassDef::addClassAttributes(OutputList &ol)
if (isFinal()) sl.append("final");
if (isSealed()) sl.append("sealed");
if (isAbstract()) sl.append("abstract");
if (getLanguage()==SrcLangExt_IDL && isPublished()) sl.append("published");
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
......@@ -1923,10 +1944,12 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
writeAuthorSection(ol);
break;
case LayoutDocEntry::NamespaceNestedNamespaces:
case LayoutDocEntry::NamespaceNestedConstantGroups:
case LayoutDocEntry::NamespaceClasses:
case LayoutDocEntry::NamespaceInlineClasses:
case LayoutDocEntry::FileClasses:
case LayoutDocEntry::FileNamespaces:
case LayoutDocEntry::FileConstantGroups:
case LayoutDocEntry::FileIncludes:
case LayoutDocEntry::FileIncludeGraph:
case LayoutDocEntry::FileIncludedByGraph:
......@@ -1980,6 +2003,14 @@ void ClassDef::writeDocumentation(OutputList &ol)
{
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
{
pageTitle = theTranslator->trCompoundReference(displayName(),
......@@ -2288,6 +2319,8 @@ void ClassDef::writeMemberList(OutputList &ol)
md->isFriend() || md->isRelated() || md->isExplicit() ||
md->isMutable() || (md->isInline() && Config_getBool("INLINE_INFO")) ||
md->isSignal() || md->isSlot() ||
(getLanguage()==SrcLangExt_IDL &&
(md->isOptional() || md->isAttribute() || md->isUNOProperty())) ||
md->isStatic() || lang==SrcLangExt_VHDL
)
&& memberWritten)
......@@ -2315,6 +2348,18 @@ void ClassDef::writeMemberList(OutputList &ol)
if (md->isStatic()) sl.append("static");
if (md->isSignal()) sl.append("signal");
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();
while (s)
......@@ -3159,7 +3204,7 @@ void ClassDef::determineImplUsageRelation()
cd=getResolvedClass(getNamespaceDef()->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);
if (cd) // class exists
{
......@@ -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
{
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 (m_impl->usesIntfClassDict==0)
......@@ -3317,6 +3362,8 @@ QCString ClassDef::compoundTypeString() const
case Protocol: return "protocol";
case Category: return "category";
case Exception: return "exception";
case Service: return "service";
case Singleton: return "singleton";
default: return "unknown";
}
}
......@@ -4337,6 +4384,11 @@ bool ClassDef::isSealed() const
return m_impl->spec&Entry::Sealed;
}
bool ClassDef::isPublished() const
{
return m_impl->spec&Entry::Published;
}
bool ClassDef::isObjectiveC() const
{
return getLanguage()==SrcLangExt_ObjC;
......@@ -4537,7 +4589,7 @@ bool ClassDef::isGeneric() const
return m_impl->isGeneric;
}
void ClassDef::setClassSpecifier(int spec)
void ClassDef::setClassSpecifier(uint64 spec)
{
m_impl->spec = spec;
}
......
......@@ -48,7 +48,8 @@ class ArgumentList;
/** 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
*/
class ClassDef : public Definition
......@@ -61,7 +62,9 @@ class ClassDef : public Definition
Interface, //=Entry::INTERFACE_SEC,
Protocol, //=Entry::PROTOCOL_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.
......@@ -256,6 +259,9 @@ class ClassDef : public Definition
/** Returns TRUE if this class is marked as sealed */
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) */
bool isExtension() const;
......@@ -320,7 +326,7 @@ class ClassDef : public Definition
void setIsStatic(bool b);
void setCompoundType(CompoundType t);
void setClassName(const char *name);
void setClassSpecifier(int spec);
void setClassSpecifier(uint64 spec);
void setTemplateArguments(ArgumentList *al);
void setTemplateBaseClassNames(QDict<int> *templateNames);
......
......@@ -43,12 +43,6 @@
#define ADDCHAR(c) g_outBuf->addChar(c)
#define ADDARRAY(a,s) g_outBuf->addArray(a,s)
enum GuardType
{
Guard_Cond,
Guard_CondNot
};
struct CondCtx
{
CondCtx(int line,QCString id,bool b)
......@@ -85,8 +79,6 @@ static bool g_lastEscaped;
static int g_lastBlockContext;
static bool g_pythonDocString;
static GuardType guardType; // kind of guard for conditional section
static SrcLangExt g_lang;
static bool isFixedForm; // For Fortran
......@@ -181,22 +173,13 @@ static inline void copyToOutput(const char *s,int len)
static void startCondSection(const char *sectId)
{
//printf("startCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count());
CondParser prs;
bool expResult = prs.parse(g_fileName,g_lineNr,sectId);
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;
}
}
else if (guardType == Guard_CondNot) // found @notcond
{
if (expResult) // enabled
{
g_skip=TRUE;
}
g_skip=TRUE;
}
}
......@@ -212,6 +195,7 @@ static void endCondSection()
CondCtx *ctx = g_condStack.pop();
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
......@@ -721,7 +705,6 @@ void replaceComment(int offset);
}
<CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section
g_condCtx = YY_START;
guardType = Guard_Cond;
BEGIN(CondLine);
}
<CComment,ReadLine>[\\@]"endcond"/[^a-z_A-Z0-9] { // end of conditional section
......@@ -769,7 +752,6 @@ void replaceComment(int offset);
<CondLine>[ \t]*
<CComment,ReadLine>[\\@]"cond"[ \t\r]*/\n |
<CondLine>. { // forgot section id?
guardType = Guard_Cond;
if (YY_START!=CondLine) g_condCtx=YY_START;
bool oldSkip=g_skip;
startCondSection(" "); // fake section id causing the section to be hidden unconditionally
......
......@@ -665,7 +665,7 @@ static void stripTrailingWhiteSpace(QCString &s)
while (i>=0 && ((c = s.at(i))==' ' || c=='\t' || c=='\r')) i--;
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\-]*
CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
SCOPEID {ID}({ID}*{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$]+"$"
%option noyywrap
......@@ -939,7 +939,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
* words and whitespace and other characters (#,?!, etc).
* grouping commands (e.g. @{ and @})
* 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"
* XML commands, <summary></summary><remarks></remarks>
*/
......@@ -950,7 +950,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
<Comment>{CMD}{CMD}"~"[a-z_A-Z]* { // escaped command
addOutput(yytext);
}
<Comment>{MAILADR} { // mail adress
<Comment>{MAILADDR} { // mail address
addOutput(yytext);
}
<Comment>"\""[^"\n]*"\"" { // quoted text
......
......@@ -172,6 +172,18 @@
<xsd:attribute name="required" type="DoxBool" use="optional"/>
<!-- Objective-C 2.0 property accessor -->
<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 name="descriptionType" mixed="true">
......@@ -742,6 +754,8 @@
<xsd:enumeration value="friend" />
<xsd:enumeration value="dcop" />
<xsd:enumeration value="slot" />
<xsd:enumeration value="interface" />
<xsd:enumeration value="service" />
</xsd:restriction>
</xsd:simpleType>
......@@ -771,6 +785,10 @@
<xsd:enumeration value="protocol" />
<xsd:enumeration value="category" />
<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="namespace" />
<xsd:enumeration value="group" />
......
......@@ -172,6 +172,18 @@
" <xsd:attribute name=\"required\" type=\"DoxBool\" use=\"optional\"/>\n"
" <!-- Objective-C 2.0 property accessor -->\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"
"\n"
" <xsd:complexType name=\"descriptionType\" mixed=\"true\">\n"
......@@ -742,6 +754,8 @@
" <xsd:enumeration value=\"friend\" />\n"
" <xsd:enumeration value=\"dcop\" />\n"
" <xsd:enumeration value=\"slot\" />\n"
" <xsd:enumeration value=\"interface\" />\n"
" <xsd:enumeration value=\"service\" />\n"
" </xsd:restriction>\n"
" </xsd:simpleType>\n"
"\n"
......@@ -771,6 +785,10 @@
" <xsd:enumeration value=\"protocol\" />\n"
" <xsd:enumeration value=\"category\" />\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=\"namespace\" />\n"
" <xsd:enumeration value=\"group\" />\n"
......
......@@ -67,6 +67,7 @@ class ConfigOption
QCString dependsOn() const { return m_dependency; }
void addDependency(const char *dep) { m_dependency = dep; }
void setEncoding(const QCString &e) { m_encoding = e; }
void setUserComment(const QCString &u) { m_userComment = u; }
protected:
virtual void writeTemplate(FTextStream &t,bool sl,bool upd) = 0;
......@@ -75,7 +76,7 @@ class ConfigOption
virtual void writeXML(FTextStream&) {}
virtual void init() {}
QCString convertToComment(const QCString &s);
QCString convertToComment(const QCString &s, const QCString &u);
void writeBoolValue(FTextStream &t,bool v);
void writeIntValue(FTextStream &t,int i);
void writeStringValue(FTextStream &t,QCString &s);
......@@ -86,6 +87,7 @@ class ConfigOption
QCString m_doc;
QCString m_dependency;
QCString m_encoding;
QCString m_userComment;
OptionType m_kind;
};
......@@ -135,9 +137,13 @@ class ConfigList : public ConfigOption
if (!sl)
{
t << endl;
t << convertToComment(m_doc);
t << convertToComment(m_doc, m_userComment);
t << endl;
}
else if (!m_userComment.isEmpty())
{
t << convertToComment("", m_userComment);
}
t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
writeStringList(t,m_value);
t << "\n";
......@@ -175,9 +181,13 @@ class ConfigEnum : public ConfigOption
if (!sl)
{
t << endl;
t << convertToComment(m_doc);
t << convertToComment(m_doc, m_userComment);
t << endl;
}
else if (!m_userComment.isEmpty())
{
t << convertToComment("", m_userComment);
}
t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
writeStringValue(t,m_value);
t << "\n";
......@@ -216,9 +226,13 @@ class ConfigString : public ConfigOption
if (!sl)
{
t << endl;
t << convertToComment(m_doc);
t << convertToComment(m_doc, m_userComment);
t << endl;
}
else if (!m_userComment.isEmpty())
{
t << convertToComment("", m_userComment);
}
t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
writeStringValue(t,m_value);
t << "\n";
......@@ -259,9 +273,13 @@ class ConfigInt : public ConfigOption
if (!sl)
{
t << endl;
t << convertToComment(m_doc);
t << convertToComment(m_doc, m_userComment);
t << endl;
}
else if (!m_userComment.isEmpty())
{
t << convertToComment("", m_userComment);
}
t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
if (upd && !m_valueString.isEmpty())
{
......@@ -306,9 +324,13 @@ class ConfigBool : public ConfigOption
if (!sl)
{
t << endl;
t << convertToComment(m_doc);
t << convertToComment(m_doc, m_userComment);
t << endl;
}
else if (!m_userComment.isEmpty())
{
t << convertToComment("", m_userComment);
}
t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
if (upd && !m_valueString.isEmpty())
{
......@@ -570,6 +592,22 @@ class Config
*/
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:
Config()
......@@ -594,6 +632,7 @@ class Config
QList<ConfigOption> *m_obsolete;
QDict<ConfigOption> *m_dict;
static Config *m_instance;
QCString m_userComment;
bool m_initialized;
};
......
......@@ -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;
if (s.isEmpty()) return result;
else
if (!s.isEmpty())
{
QCString tmp=s.stripWhiteSpace();
char *p=tmp.data();
......@@ -101,6 +101,11 @@ QCString ConfigOption::convertToComment(const QCString &s)
}
result+='\n';
}
if (!u.isEmpty())
{
if (!result.isEmpty()) result+='\n';
result+= u;
}
return result;
}
......@@ -589,7 +594,8 @@ static void readIncludeFile(const char *incName)
%%
<*>\0x0d
<Start,GetString,GetStrList,GetBool,SkipInvalid>"#" { BEGIN(SkipComment); }
<Start,GetString,GetStrList,GetBool,SkipInvalid>"##".*"\n" { config->appendUserComment(yytext);}
<Start,GetString,GetStrList,GetBool,SkipInvalid>"#" { BEGIN(SkipComment); }
<Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"=" { QCString cmd=yytext;
cmd=cmd.left(cmd.length()-1).stripWhiteSpace();
ConfigOption *option = config->get(cmd);
......@@ -601,6 +607,7 @@ static void readIncludeFile(const char *incName)
}
else // known tag
{
option->setUserComment(config->takeUserComment());
option->setEncoding(encoding);
switch(option->kind())
{
......@@ -654,6 +661,7 @@ static void readIncludeFile(const char *incName)
}
else // known tag
{
option->setUserComment(config->takeUserComment());
switch(option->kind())
{
case ConfigOption::O_Info:
......@@ -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 << "# doxygen (www.doxygen.org) for a project.\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 << "# The format is:\n";
t << "# TAG = value [value, ...]\n";
......@@ -811,6 +821,12 @@ void Config::writeTemplate(FTextStream &t,bool sl,bool upd)
option->writeTemplate(t,sl,upd);
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)
......@@ -1130,6 +1146,21 @@ void Config::check()
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
QCString &latexHeaderFile = Config_getString("LATEX_HEADER");
if (!latexHeaderFile.isEmpty())
......@@ -1506,6 +1537,24 @@ void Config::init()
option->init();
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()
......
......@@ -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
parser lacks the necessairy type information.
' 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
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
......@@ -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,
so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
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='
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
......@@ -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
default. 0 is a special value representing an infinite number of entries
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='
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
......@@ -1130,7 +1130,7 @@ configure the path to it using the MATHJAX_RELPATH option.
' defval='0'/>
<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
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
compatibility.
'>
......@@ -1151,6 +1151,11 @@ copy of MathJax from http://www.mathjax.org before deployment.
<option type='list' id='MATHJAX_EXTENSIONS' format='string' docs='
The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
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'>
</option>
<option type='bool' id='SEARCHENGINE' docs='
......@@ -1300,7 +1305,7 @@ such as SOURCE_BROWSER.
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
http://en.wikipedia.org/wiki/BibTeX for more info.
' defval='plain'/>
' defval='plain' depends='GENERATE_LATEX'/>
</group>
<group name='RTF' docs='configuration options related to the RTF output'>
<option type='bool' id='GENERATE_RTF' docs='
......@@ -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
explicitly to a value larger than 0 to get control over the balance
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='
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
......@@ -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
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
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.
' defval='10' minval='0' maxval='100' depends='HAVE_DOT'/>
<option type='bool' id='TEMPLATE_RELATIONS' docs='
......
......@@ -1162,6 +1162,7 @@ void addConfigOptions(Config *cfg)
FALSE
);
#endif
#if USE_LIBCLANG
//----
cs = cfg->addString(
"CLANG_OPTIONS",
......@@ -1171,6 +1172,7 @@ void addConfigOptions(Config *cfg)
"specified at INPUT and INCLUDE_PATH."
);
cs->addDependency("CLANG_ASSISTED_PARSING");
#endif
//---------------------------------------------------------------------------
cfg->addInfo("Index","configuration options related to the alphabetical class index");
//---------------------------------------------------------------------------
......@@ -1324,6 +1326,7 @@ void addConfigOptions(Config *cfg)
"and 100 does not change the gamma.",
40,240,80
);
ci->addDependency("GENERATE_HTML");
//----
cb = cfg->addBool(
"HTML_TIMESTAMP",
......@@ -1355,6 +1358,7 @@ void addConfigOptions(Config *cfg)
"and will result in a full expanded tree by default.",
0,9999,100
);
ci->addDependency("GENERATE_HTML");
//----
cb = cfg->addBool(
"GENERATE_DOCSET",
......@@ -1658,7 +1662,7 @@ void addConfigOptions(Config *cfg)
ce = cfg->addEnum(
"MATHJAX_FORMAT",
"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"
"compatibility.",
"HTML-CSS"
......@@ -1688,6 +1692,13 @@ void addConfigOptions(Config *cfg)
);
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(
"SEARCHENGINE",
"When the SEARCHENGINE tag is enabled doxygen will generate a search box\n"
......@@ -1924,6 +1935,7 @@ void addConfigOptions(Config *cfg)
"http://en.wikipedia.org/wiki/BibTeX for more info."
);
cs->setDefaultValue("plain");
cs->addDependency("GENERATE_LATEX");
//---------------------------------------------------------------------------
cfg->addInfo("RTF","configuration options related to the RTF output");
//---------------------------------------------------------------------------
......@@ -2424,7 +2436,7 @@ void addConfigOptions(Config *cfg)
"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"
"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.",
0,100,10
);
......
......@@ -96,6 +96,8 @@ void generateDEFForMember(MemberDef *md,
case MemberType_Variable: memType="variable"; break;
case MemberType_Typedef: memType="typedef"; 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_Signal: memType="signal"; isFunc=TRUE; break;
case MemberType_Friend: memType="friend"; isFunc=TRUE; break;
......@@ -428,6 +430,8 @@ void generateDEFForClass(ClassDef *cd,FTextStream &t)
if (numMembers>0)
{
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_pubAttribs),"public-attrib");
generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubSlots),"public-slot");
......
......@@ -403,10 +403,12 @@ void DirDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::ClassAllMembersLink:
case LayoutDocEntry::ClassUsedFiles:
case LayoutDocEntry::NamespaceNestedNamespaces:
case LayoutDocEntry::NamespaceNestedConstantGroups:
case LayoutDocEntry::NamespaceClasses:
case LayoutDocEntry::NamespaceInlineClasses:
case LayoutDocEntry::FileClasses:
case LayoutDocEntry::FileNamespaces:
case LayoutDocEntry::FileConstantGroups:
case LayoutDocEntry::FileIncludes:
case LayoutDocEntry::FileIncludeGraph:
case LayoutDocEntry::FileIncludedByGraph:
......
......@@ -433,21 +433,22 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de
// group members are only visible in their group
//if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return;
QCString memType;
bool isFunc=FALSE;
switch (md->memberType())
{
case MemberType_Define: memType="define"; break;
case MemberType_EnumValue: ASSERT(0); break;
case MemberType_Property: memType="property"; break;
case MemberType_Event: memType="event"; break;
case MemberType_Function: memType="function"; break;
case MemberType_Variable: memType="variable"; break;
case MemberType_Typedef: memType="typedef"; break;
case MemberType_Enumeration: memType="enum"; break;
case MemberType_Function: memType="function"; isFunc=TRUE; break;
case MemberType_Signal: memType="signal"; isFunc=TRUE; break;
case MemberType_Friend: memType="friend"; isFunc=TRUE; break;
case MemberType_DCOP: memType="dcop"; isFunc=TRUE; break;
case MemberType_Slot: memType="slot"; isFunc=TRUE; break;
case MemberType_EnumValue: ASSERT(0); break;
case MemberType_Signal: memType="signal"; break;
case MemberType_Slot: memType="slot"; break;
case MemberType_Friend: memType="friend"; 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;
if (md->getClassDef())
......
......@@ -396,6 +396,10 @@ void DocSets::addIndexItem(Definition *context,MemberDef *md,
break;
case MemberType_Event:
type="event"; break;
case MemberType_Interface:
type="ifc"; break;
case MemberType_Service:
type="svc"; break;
}
cd = md->getClassDef();
nd = md->getNamespaceDef();
......
......@@ -349,14 +349,14 @@ SPCMD3 {CMD}form#[0-9]+
SPCMD4 {CMD}"::"
INOUT "inout"|"in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLANK}*"in")
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\^\*\&\[\]]
SCOPESEP "::"|"#"|"."
TEMPLPART "<"{TEMPCHAR}*">"
ANONNS "anonymous_namespace{"[^}]*"}"
SCOPEPRE (({ID}{TEMPLPART}?)|{ANONNS}){SCOPESEP}
SCOPEKEYS ":"({ID}":")*
SCOPECPP {SCOPEPRE}*(~)?{ID}("<"{TEMPCHAR}*">")?
SCOPECPP {SCOPEPRE}*(~)?{ID}{TEMPLPART}?
SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"){BLANK})?
......@@ -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"
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}
REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCARG}?
REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG}?
REFWORD3 ({ID}":")*{ID}":"?
REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
......
......@@ -63,6 +63,18 @@
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"
"<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"
" <circle id=\"rim\" cx=\"0\" cy=\"0\" r=\"7\"/>\n"
" <circle id=\"rim2\" cx=\"0\" cy=\"0\" r=\"3.5\"/>\n"
......
This diff is collapsed.
/* The standard CSS for doxygen $doxygenversion */
body, table, div, p, dl {
font: 400 14px/19px Roboto,sans-serif;
font: 400 14px/22px Roboto,sans-serif;
}
/* @group Heading Levels */
......@@ -687,6 +687,7 @@ div.directory {
.directory td.entry {
white-space: nowrap;
padding-right: 6px;
padding-top: 3px;
}
.directory td.entry a {
......
......@@ -6,7 +6,7 @@ Introduction
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
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).
The generic starting point of the application is of cource the main() function.
......
......@@ -20,7 +20,7 @@ HEADERS = doxygen.h
SOURCES = main.cpp
unix:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%%
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:TMAKE_LFLAGS += /LIBPATH:..\lib
win32-borland:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib
......
"/* The standard CSS for doxygen $doxygenversion */\n"
"\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"
"/* @group Heading Levels */\n"
......@@ -687,6 +687,7 @@
".directory td.entry {\n"
" white-space: nowrap;\n"
" padding-right: 6px;\n"
" padding-top: 3px;\n"
"}\n"
"\n"
".directory td.entry a {\n"
......
......@@ -79,9 +79,11 @@ class Entry
INTERFACEDOC_SEC = 0x00010000,
PROTOCOLDOC_SEC = 0x00020000,
CATEGORYDOC_SEC = 0x00040000,
SERVICEDOC_SEC = 0x00080000,
SINGLETONDOC_SEC = 0x00100000,
COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC |
INTERFACEDOC_SEC | EXCEPTIONDOC_SEC | PROTOCOLDOC_SEC |
CATEGORYDOC_SEC,
CATEGORYDOC_SEC | SERVICEDOC_SEC | SINGLETONDOC_SEC,
SOURCE_SEC = 0x00400000,
HEADER_SEC = 0x00800000,
......@@ -111,56 +113,69 @@ class Entry
PACKAGEDOC_SEC = 0x16000000,
OBJCIMPL_SEC = 0x17000000,
DIRDOC_SEC = 0x18000000
,EXPORTED_INTERFACE_SEC = 0x19000000
,INCLUDED_SERVICE_SEC = 0x1A000000
};
enum MemberSpecifier
{
Inline = 0x00000001,
Explicit = 0x00000002,
Mutable = 0x00000004,
Settable = 0x00000008,
Gettable = 0x00000010,
Readable = 0x00000020,
Writable = 0x00000040,
Final = 0x00000080,
Abstract = 0x00000100,
Addable = 0x00000200,
Removable = 0x00000400,
Raisable = 0x00000800,
Override = 0x00001000,
New = 0x00002000,
Sealed = 0x00004000,
Initonly = 0x00008000,
Optional = 0x00010000,
Required = 0x00020000,
NonAtomic = 0x00040000,
Copy = 0x00080000,
Retain = 0x00100000,
Assign = 0x00200000,
Strong = 0x00400000,
Weak = 0x00800000,
Unretained = 0x01000000,
Alias = 0x02000000,
ConstExp = 0x04000000,
Default = 0x08000000,
Delete = 0x10000000,
NoExcept = 0x20000000
};
enum ClassSpecifier
{
Template = 0x0001,
Generic = 0x0002,
Ref = 0x0004,
Value = 0x0008,
Interface = 0x0010,
Struct = 0x0020,
Union = 0x0040,
Exception = 0x0080,
Protocol = 0x0100,
Category = 0x0200,
SealedClass = 0x0400,
AbstractClass = 0x0800,
Enum = 0x1000 // for Java-style enums
};
// class specifiers (add new items to the end)
static const uint64 Template = (1ULL<<0);
static const uint64 Generic = (1ULL<<1);
static const uint64 Ref = (1ULL<<2);
static const uint64 Value = (1ULL<<3);
static const uint64 Interface = (1ULL<<4);
static const uint64 Struct = (1ULL<<5);
static const uint64 Union = (1ULL<<6);
static const uint64 Exception = (1ULL<<7);
static const uint64 Protocol = (1ULL<<8);
static const uint64 Category = (1ULL<<9);
static const uint64 SealedClass = (1ULL<<10);
static const uint64 AbstractClass = (1ULL<<11);
static const uint64 Enum = (1ULL<<12); // for Java-style enums
static const uint64 Service = (1ULL<<13); // UNO IDL
static const uint64 Singleton = (1ULL<<14); // UNO IDL
// member specifiers (add new items to the beginning)
static const uint64 Inline = (1ULL<<24);
static const uint64 Explicit = (1ULL<<25);
static const uint64 Mutable = (1ULL<<26);
static const uint64 Settable = (1ULL<<27);
static const uint64 Gettable = (1ULL<<28);
static const uint64 Readable = (1ULL<<29);
static const uint64 Writable = (1ULL<<30);
static const uint64 Final = (1ULL<<31);
static const uint64 Abstract = (1ULL<<32);
static const uint64 Addable = (1ULL<<33);
static const uint64 Removable = (1ULL<<34);
static const uint64 Raisable = (1ULL<<35);
static const uint64 Override = (1ULL<<36);
static const uint64 New = (1ULL<<37);
static const uint64 Sealed = (1ULL<<38);
static const uint64 Initonly = (1ULL<<39);
static const uint64 Optional = (1ULL<<40);
static const uint64 Required = (1ULL<<41);
static const uint64 NonAtomic = (1ULL<<42);
static const uint64 Copy = (1ULL<<43);
static const uint64 Retain = (1ULL<<44);
static const uint64 Assign = (1ULL<<45);
static const uint64 Strong = (1ULL<<46);
static const uint64 Weak = (1ULL<<47);
static const uint64 Unretained = (1ULL<<48);
static const uint64 Alias = (1ULL<<49);
static const uint64 ConstExp = (1ULL<<50);
static const uint64 Default = (1ULL<<51);
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
{
GROUPDOC_NORMAL, //!< defgroup
......@@ -220,7 +235,7 @@ class Entry
// content
Protection protection; //!< class protection
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
bool stat; //!< static ?
bool explicitExternal; //!< explicitly defined as external?
......
......@@ -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
if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title);
if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,isConstantGroup);
}
void FileDef::writeClassDeclarations(OutputList &ol,const QCString &title)
......@@ -646,9 +647,15 @@ void FileDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::FileNamespaces:
{
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;
case LayoutDocEntry::MemberGroups:
writeMemberGroups(ol);
break;
......@@ -693,6 +700,7 @@ void FileDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::ClassUsedFiles:
case LayoutDocEntry::ClassInlineClasses:
case LayoutDocEntry::NamespaceNestedNamespaces:
case LayoutDocEntry::NamespaceNestedConstantGroups:
case LayoutDocEntry::NamespaceClasses:
case LayoutDocEntry::NamespaceInlineClasses:
case LayoutDocEntry::GroupClasses:
......
......@@ -190,7 +190,8 @@ class FileDef : public Definition
void writeMemberGroups(OutputList &ol);
void writeAuthorSection(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 writeInlineClasses(OutputList &ol);
void startMemberDeclarations(OutputList &ol);
......
......@@ -78,7 +78,7 @@ enum InterfaceType { IF_NONE, IF_SPECIFIC, IF_GENERIC, IF_ABSTRACT };
// {{{ ----- Helper structs -----
//! Holds modifiers (ie attributes) for one symbol (variable, function, etc)
struct SymbolModifiers {
enum Protection {NONE_P, PUBLIC, PRIVATE, PROTECTED};
enum Protection {NONE_P, PUBLIC, PRIVATE};
enum Direction {NONE_D, IN, OUT, INOUT};
//!< This is only used with function return value.
......@@ -86,6 +86,7 @@ struct SymbolModifiers {
Protection protection;
Direction direction;
bool optional;
bool protect;
QCString dimension;
bool allocatable;
bool external;
......@@ -101,7 +102,7 @@ struct SymbolModifiers {
QCString passVar;
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),
pointer(FALSE), target(FALSE), save(FALSE), deferred(FALSE), nonoverridable(FALSE),
nopass(FALSE), pass(FALSE), passVar() {}
......@@ -145,9 +146,9 @@ struct CommentInPrepass {
};
static QList<CommentInPrepass> comments;
#define MAX_INCLUDE_DEPTH 10
YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
YY_BUFFER_STATE *include_stack = NULL;
int include_stack_ptr = 0;
int include_stack_cnt = 0;
static QFile inputFile;
static QCString yyFileName;
......@@ -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}")"
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})?")"
/* Assume that attribute statements are almost the same as attributes. */
ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
......@@ -549,9 +550,6 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
/*------- access specification --------------------------------------------------------------------------*/
<ModuleBody>protected/{BS}(\n|"!") { defaultProtection = Protected;
current->protection = defaultProtection ;
}
<ModuleBody>private/{BS}(\n|"!") { defaultProtection = Private;
current->protection = defaultProtection ;
}
......@@ -593,10 +591,6 @@ private {
current->protection = Private;
typeProtection = Private;
}
protected {
current->protection = Protected;
typeProtection = Protected;
}
{LANGUAGE_BIND_SPEC} {
/* ignored for now */
}
......@@ -1406,10 +1400,10 @@ static const char* prepassFixedForm(const char* contents)
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" );
exit( 1 );
include_stack_cnt++;
include_stack = (YY_BUFFER_STATE *)realloc(include_stack, include_stack_cnt * sizeof(YY_BUFFER_STATE));
}
include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER;
yy_switch_to_buffer(yy_scan_string(buffer));
......@@ -1501,6 +1495,7 @@ SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs)
allocatable |= mdfs.allocatable;
external |= mdfs.external;
intrinsic |= mdfs.intrinsic;
protect |= mdfs.protect;
parameter |= mdfs.parameter;
pointer |= mdfs.pointer;
target |= mdfs.target;
......@@ -1542,7 +1537,7 @@ SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString)
}
else if (mdfString=="protected")
{
newMdf.protection = SymbolModifiers::PROTECTED;
newMdf.protect = TRUE;
}
else if (mdfString=="optional")
{
......@@ -1734,7 +1729,7 @@ static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs)
if (!typeName.isEmpty()) typeName += ", ";
typeName += "private";
}
else if (mdfs.protection == SymbolModifiers::PROTECTED)
if (mdfs.protect)
{
if (!typeName.isEmpty()) typeName += ", ";
typeName += "protected";
......@@ -1760,8 +1755,6 @@ static void applyModifiers(Entry *ent, SymbolModifiers& mdfs)
ent->protection = Public;
else if (mdfs.protection == SymbolModifiers::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
......@@ -2107,6 +2100,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
static void subrHandleCommentBlock(const QCString &doc,bool brief)
{
QCString loc_doc;
Entry *tmp_entry = current;
current = subrCurrent.first(); // temporarily switch to the entry of the subroutine / function
if (docBlock.stripWhiteSpace().find("\\param") == 0)
......@@ -2120,8 +2114,57 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
else
{
int dir1 = modifiers[current_root][argName.lower()].direction;
handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
argName + " " + doc,brief);
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] + " " +
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;
}
......
......@@ -1059,10 +1059,12 @@ void GroupDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::ClassUsedFiles:
case LayoutDocEntry::ClassInlineClasses:
case LayoutDocEntry::NamespaceNestedNamespaces:
case LayoutDocEntry::NamespaceNestedConstantGroups:
case LayoutDocEntry::NamespaceClasses:
case LayoutDocEntry::NamespaceInlineClasses:
case LayoutDocEntry::FileClasses:
case LayoutDocEntry::FileNamespaces:
case LayoutDocEntry::FileConstantGroups:
case LayoutDocEntry::FileIncludes:
case LayoutDocEntry::FileIncludeGraph:
case LayoutDocEntry::FileIncludedByGraph:
......
......@@ -4,6 +4,8 @@
#include <stdlib.h>
#include <string.h>
#define GROW_AMOUNT 1024
/** Class representing a string buffer optimised for growing. */
class GrowBuf
{
......@@ -11,21 +13,27 @@ class GrowBuf
GrowBuf() : str(0), pos(0), len(0) {}
~GrowBuf() { free(str); str=0; pos=0; len=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;
}
void addStr(const char *s) {
int l=strlen(s);
if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); }
strcpy(&str[pos],s);
pos+=l;
if (s)
{
int l=strlen(s);
if (pos+l>=len) { len+=l+GROW_AMOUNT; str = (char*)realloc(str,len); }
strcpy(&str[pos],s);
pos+=l;
}
}
void addStr(const char *s,int n) {
int l=strlen(s);
if (n<l) l=n;
if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); }
strncpy(&str[pos],s,n);
pos+=l;
if (s)
{
int l=strlen(s);
if (n<l) l=n;
if (pos+l>=len) { len+=l+GROW_AMOUNT; str = (char*)realloc(str,len); }
strncpy(&str[pos],s,n);
pos+=l;
}
}
const char *get() { return str; }
int getPos() const { return pos; }
......
......@@ -32,7 +32,7 @@ static QDict<QCString> g_symbolDict(10007);
/*! constructs command line of htags(1) and executes it.
* \retval TRUE success
* \retval FALSE an error has occured.
* \retval FALSE an error has occurred.
*/
bool Htags::execute(const QCString &htmldir)
{
......
......@@ -1834,11 +1834,11 @@ void HtmlDocVisitor::filterQuotedCdataAttr(const char* str)
// it's enough to replace these two, provided that the declaration
// for the HTML version we generate (and as supported by the browser)
// specifies that all the other symbols used in rawVal are
// within the right charachter class (i.e., they're not
// some multinational weird charachters not in the BASESET).
// within the right character class (i.e., they're not
// some multinational weird characters not in the BASESET).
// We assume that 1) the browser will support whatever is remaining
// in the formula and 2) the TeX formulae are generally governed
// by even stricter charachter restrictions so it should be enough.
// by even stricter character restrictions so it should be enough.
//
// On some incompliant browsers, additional translation of
// '>' and '<' into "&gt;" and "&lt;", respectively, might be needed;
......
......@@ -104,6 +104,7 @@ static const char extsearch_script[]=
static QCString g_header;
static QCString g_footer;
static QCString g_mathjax_code;
//------------------------- Pictures for the Tabs ------------------------
......@@ -1176,8 +1177,13 @@ static QCString substituteHtmlKeywords(const QCString &s,
}
mathJaxJs += "],\n"
" jax: [\"input/TeX\",\"output/"+mathJaxFormat+"\"],\n"
"});\n"
"</script>";
"});\n";
if (!g_mathjax_code.isEmpty())
{
mathJaxJs += g_mathjax_code;
mathJaxJs += "\n";
}
mathJaxJs += "</script>";
mathJaxJs += "<script src=\"" + path + "MathJax.js\"></script>\n";
}
......@@ -1445,6 +1451,15 @@ void HtmlGenerator::init()
{
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);
QCString fileName=dname+"/tabs.css";
......@@ -2383,7 +2398,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket)
{
if (emptyList)
{
if (closeBracket) t << "</td><td>)";
if (closeBracket) t << ")</td><td>";
t << "</td>" << endl;
t << " <td>";
}
......@@ -2413,6 +2428,22 @@ void HtmlGenerator::endParameterList()
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)
{
DBG_HTML(t << "<!-- endMemberDoc -->" << endl;)
......
......@@ -308,6 +308,7 @@ class HtmlGenerator : public OutputGenerator
void endParameterName(bool last,bool emptyList,bool closeBracket);
void startParameterList(bool);
void endParameterList();
virtual void exceptionEntry(const char*,bool);
void startConstraintList(const char *);
void startConstraintParam();
......
......@@ -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 *)
{
......
......@@ -240,6 +240,7 @@ class LatexGenerator : public OutputGenerator
void endParameterName(bool,bool,bool);
void startParameterList(bool);
void endParameterList();
void exceptionEntry(const char*,bool);
void startConstraintList(const char *);
void startConstraintParam();
......
......@@ -313,6 +313,12 @@ class LayoutParser : public QXmlDefaultHandler
SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE),
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",
new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
MemberListType_pubTypes,theTranslator->trPublicTypes()));
......@@ -422,6 +428,12 @@ class LayoutParser : public QXmlDefaultHandler
m_sHandler.insert("class/memberdef/enums",
new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
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",
new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
MemberListType_constructors,theTranslator->trConstructorDocumentation()));
......@@ -465,12 +477,16 @@ class LayoutParser : public QXmlDefaultHandler
new StartElementHandler(this,&LayoutParser::startMemberDecl));
m_sHandler.insert("namespace/memberdecl/nestednamespaces",
new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedNamespaces,&LayoutParser::startSectionEntry,
COMPILE_FOR_3_OPTIONS(
COMPILE_FOR_4_OPTIONS(
theTranslator->trNamespaces(),
SrcLangExt_Java,theTranslator->trPackages(),
SrcLangExt_VHDL,theTranslator->trPackages(),
SrcLangExt_IDL,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",
new StartElementHandlerSection(this,LayoutDocEntry::NamespaceClasses,&LayoutParser::startSectionEntry,
COMPILE_FOR_2_OPTIONS(
......@@ -559,11 +575,15 @@ class LayoutParser : public QXmlDefaultHandler
)));
m_sHandler.insert("file/memberdecl/namespaces",
new StartElementHandlerSection(this,LayoutDocEntry::FileNamespaces,&LayoutParser::startSectionEntry,
COMPILE_FOR_2_OPTIONS(
COMPILE_FOR_3_OPTIONS(
theTranslator->trNamespaces(),
SrcLangExt_Java,theTranslator->trPackages(),
SrcLangExt_IDL,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",
new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
MemberListType_decDefineMembers,theTranslator->trDefines()));
......
......@@ -45,11 +45,11 @@ struct LayoutDocEntry
ClassUsedFiles,
// Namespace specific items
NamespaceNestedNamespaces, NamespaceClasses,
NamespaceInlineClasses,
NamespaceNestedNamespaces, NamespaceNestedConstantGroups,
NamespaceClasses, NamespaceInlineClasses,
// File specific items
FileClasses, FileNamespaces,
FileClasses, FileNamespaces, FileConstantGroups,
FileIncludes, FileIncludeGraph,
FileIncludedByGraph, FileSourceLink,
FileInlineClasses,
......
......@@ -31,6 +31,8 @@
" <memberdecl>\n"
" <nestedclasses visible=\"yes\" title=\"\"/>\n"
" <publictypes title=\"\"/>\n"
" <services title=\"\"/>\n"
" <interfaces title=\"\"/>\n"
" <publicslots title=\"\"/>\n"
" <signals title=\"\"/>\n"
" <publicmethods title=\"\"/>\n"
......@@ -65,6 +67,8 @@
" <inlineclasses title=\"\"/>\n"
" <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n"
" <services title=\"\"/>\n"
" <interfaces title=\"\"/>\n"
" <constructors title=\"\"/>\n"
" <functions title=\"\"/>\n"
" <related title=\"\"/>\n"
......@@ -82,6 +86,7 @@
" <briefdescription visible=\"yes\"/>\n"
" <memberdecl>\n"
" <nestednamespaces visible=\"yes\" title=\"\"/>\n"
" <constantgroups visible=\"yes\" title=\"\"/>\n"
" <classes visible=\"yes\" title=\"\"/>\n"
" <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n"
......@@ -110,6 +115,7 @@
" <memberdecl>\n"
" <classes visible=\"yes\" title=\"\"/>\n"
" <namespaces visible=\"yes\" title=\"\"/>\n"
" <constantgroups visible=\"yes\" title=\"\"/>\n"
" <defines title=\"\"/>\n"
" <typedefs title=\"\"/>\n"
" <enums title=\"\"/>\n"
......
......@@ -31,6 +31,8 @@
<memberdecl>
<nestedclasses visible="yes" title=""/>
<publictypes title=""/>
<services title=""/>
<interfaces title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
......@@ -65,6 +67,8 @@
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<services title=""/>
<interfaces title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
......@@ -82,6 +86,7 @@
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
......@@ -110,6 +115,7 @@
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
......
......@@ -32,7 +32,7 @@
ManDocVisitor::ManDocVisitor(FTextStream &t,CodeOutputInterface &ci,
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)
{
}
......
......@@ -33,15 +33,33 @@
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");
if( ext.length() >= 2 &&
ext.data()[0] == '.')
if (ext.isEmpty())
{
ext = ext.mid(1, ext.length()-1);
ext = "3";
}
else
{
ext = "3";
if (ext.at(0)=='.')
{
if (ext.length()==1)
{
ext = "3";
}
else // strip .
{
ext = ext.mid(1);
}
}
if (ext.at(0)<='0' || ext.at(0)>='9')
{
ext.prepend("3");
}
}
return ext;
}
......@@ -50,7 +68,7 @@ ManGenerator::ManGenerator() : OutputGenerator()
{
dir=Config_getString("MAN_OUTPUT")+"/man" + getExtension();
firstCol=TRUE;
paragraph=FALSE;
paragraph=TRUE;
col=0;
upperCase=FALSE;
insideTabbing=FALSE;
......@@ -129,8 +147,8 @@ static QCString buildFileName(const char *name)
}
}
QCString &manExtension = Config_getString("MAN_EXTENSION");
if (fileName.right(2)!=manExtension)
QCString manExtension = "." + getExtension();
if (fileName.right(manExtension.length())!=manExtension)
{
fileName+=manExtension;
}
......@@ -798,4 +816,12 @@ void ManGenerator::endLabels()
{
}
void ManGenerator::endHeaderSection()
{
if (!firstCol)
{
t<< endl; firstCol=TRUE;
}
}
......@@ -95,7 +95,7 @@ class ManGenerator : public OutputGenerator
void startMemberSections() {}
void endMemberSections() {}
void startHeaderSection() {}
void endHeaderSection() {}
void endHeaderSection();
void startMemberHeader(const char *);
void endMemberHeader();
void insertMemberAlign(bool) {}
......@@ -229,6 +229,7 @@ class ManGenerator : public OutputGenerator
void endParameterName(bool,bool,bool) {}
void startParameterList(bool) {}
void endParameterList() {}
void exceptionEntry(const char*,bool) {}
void startFontClass(const char *) {}
void endFontClass() {}
......
......@@ -473,6 +473,25 @@ static int processNmdash(GrowBuf &out,const char *data,int,int size)
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
* the sense that all code inside is written unprocessed
*/
......@@ -2197,6 +2216,7 @@ QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &input
g_actions[(unsigned int)'!']=processLink;
g_actions[(unsigned int)'<']=processHtmlTag;
g_actions[(unsigned int)'-']=processNmdash;
g_actions[(unsigned int)'"']=processQuoted;
init=TRUE;
}
......
This diff is collapsed.
......@@ -44,6 +44,7 @@ class Entry;
void marshalInt(StorageIntf *s,int v);
void marshalUInt(StorageIntf *s,uint v);
void marshalUInt64(StorageIntf *s,uint64 v);
void marshalBool(StorageIntf *s,bool b);
void marshalQCString(StorageIntf *s,const QCString &str);
void marshalQGString(StorageIntf *s,const QGString &str);
......@@ -70,6 +71,7 @@ void marshalEntryTree(StorageIntf *s,Entry *e);
int unmarshalInt(StorageIntf *s);
uint unmarshalUInt(StorageIntf *s);
uint64 unmarshalUInt64(StorageIntf *s);
bool unmarshalBool(StorageIntf *s);
QCString unmarshalQCString(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
virtual void endParameterName(bool,bool,bool) = 0;
virtual void startParameterList(bool) = 0;
virtual void endParameterList() = 0;
virtual void exceptionEntry(const char*,bool) = 0;
virtual void startConstraintList(const char *) = 0;
virtual void startConstraintParam() = 0;
......
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.
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