Commit d4bdeb54 authored by mueller's avatar mueller

mods for doxygen-0.49-991003

parent 79bf453d
DOXYGEN Version 0.49-990901
DOXYGEN Version 0.49-991003
CONTENTS
--------
......@@ -8,14 +8,15 @@ CONTENTS
* HTML related problems
* LaTeX related problems
* HP-UX / Digital UNIX problems
* gcc 2.7.2.x related problems
INSTALLATION INSTRUCTIONS FOR UNIX:
-----------------------------------
1. Unpack the archive, unless you already have:
gunzip doxygen-0.49-990901.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-990901.src.tar # unpack it
gunzip doxygen-0.49-991003.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-991003.src.tar # unpack it
2. Run the configure script:
......@@ -26,6 +27,9 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
interpreter. It will report what it finds. Use configure --help
to see how to override or change the default or detected settings.
If you have downloaded the binary distribution, you can proceed
with step 6 now.
3. Compile the program by running make:
make
......@@ -34,14 +38,14 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
doxytag, and doxysearch) should be available in the bin directory of the
distribution.
5. Generate the user manual (optional, will also be done in step 6).
4. Generate the user manual (optional, will also be done in step 6).
make docs
to let doxygen generate the HTML and LaTeX documentation.
To let doxygen generate the HTML and LaTeX documentation.
(you will need the stream editor `sed' for this)
make ps
5. make ps
to generate a postscript version of the manual.
(you will need latex and dvips for this)
......@@ -58,14 +62,17 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
make install
Binaries are install to the directory <prefix>/bin
Documentation and examples to the directory <prefix>/share/doxygen
Binaries are installed in the directory <prefix>/bin
Documentation and examples in the directory <prefix>/doc/doxygen
<prefix> defaults to /usr but can be changed with the --prefix
option of the configure script.
INSTALLATION INSTRUCTIONS FOR WINDOWS:
--------------------------------------
Currently, only Microsoft Visual C++ (version 5.0) is supported.
(For other platforms you may need to edit the perl script in wintools/make.pl
(For other compilers you may need to edit the perl script in wintools/make.pl
a bit). Let me know what you had to change if you got Doxygen working with
another windows compiler.
......@@ -80,9 +87,10 @@ You will need to install the windows/dos versions of following tools:
- Qt-1.xx (Qt-2.xx should also work, but I didn't test it for Windows)
(Hint: only the tools section is required, so you can use the free
X-windows version as well!)
You can get it at http://www.troll.no
- Microsoft Visual C++ (I only tested with version 5.0).
Use the vcvars32.bat to set the environment variables
(if not selected to do this automatically during installation).
(if you did not select to do this automatically during installation).
- To generate LaTeX documentation or formulas in HTML you need the tools:
latex, dvips and gswin32
To get these working under Windows install the fpTeX distribution
......@@ -96,15 +104,17 @@ You will need to install the windows/dos versions of following tools:
`objects' and `bin' manually in the root of the distribution before
compiling.
Make sure all tools are accessible from the command-line (add them to the
PATH environment if needed).
Open a dos box.
Make sure all tools (i.e. nmake, latex, gswin32, dvips, sed, flex, bison,
cl, rm and perl), are accessible from the command-line (add them to the
PATH environment variable if needed).
Open a dos box, goto the doxygen root dir and type:
goto the doxygen root dir and type:
make.bat
This should build the executables doxygen.exe, doxytag.exe, and doxysearch.exe
(The compiler should not produce any warnings or errors).
(The compiler should not produce any serious warnings or errors).
To build the examples type:
......@@ -125,8 +135,8 @@ The manual should now be here latex/doxygen_manual.ps
KNOWN CONFIGURATION PROBLEMS
QT RELATED PROBLEMS:
- Qt-2.01 contains a bug that
- Qt-2.01 contains a bug that makes some special characters appear as
question marks (?) in the HTML output.
HTML RELATED PROBLEMS:
- the indent continuously increases.
......@@ -168,7 +178,31 @@ HP-UX / DIGITAL UNIX PROBLEMS:
defined (__sparc) || defined (__sgi) || defined (__osf__)
#include <alloca.h>
This seems to be a problem with bison, but I don't know how to fix it.
Alternatively, one could fix the problem at the bison side.
Here is patch for bison.simple (provided by Andre Johansen):
------------------------------------------------------------------------------
--- bison.simple~ Tue Nov 18 11:45:53 1997
+++ bison.simple Mon Jan 26 15:10:26 1998
@@ -27,7 +27,7 @@
#ifdef __GNUC__
#define alloca __builtin_alloca
#else /* not GNU C. */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || defined (__alpha)
#include <alloca.h>
#else /* not sparc */
#if defined (MSDOS) && !defined (__TURBOC__)
------------------------------------------------------------------------------
GCC 2.7.2.X PROBLEMS
Old versions of the GNU compiler have problems with constant strings
containing characters with ascii codes >127. Therefore the compiler will
fail to compile some of the translator_xx.h files.
A workaround, if you are planning to use the English translation only,
is to configure doxygen with the --english-only option.
-----------------------------------------------------------------------------
That's it!
......@@ -180,4 +214,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (01 September 1999)
Dimitri van Heesch (03 October 1999)
......@@ -19,17 +19,18 @@ distclean: clean
install:
$(INSTTOOL) -d $(INSTALL)/bin
$(INSTTOOL) -d $(INSTALL)/share/doxygen/doc
$(INSTTOOL) -d $(INSTALL)/share/doxygen/examples
$(INSTTOOL) -d $(INSTALL)/doc/doxygen
$(INSTTOOL) -d $(INSTALL)/doc/doxygen
$(INSTTOOL) -m 755 bin/doxy* $(INSTALL)/bin
cp -r doc $(INSTALL)/share/doxygen
cp -r examples $(INSTALL)/share/doxygen
echo "DOXYGEN = $(INSTALL)" > $(INSTALL)/share/doxygen/doc/Makefile
echo "DOXYDOCS = $(INSTALL)/share/doxygen" >> $(INSTALL)/share/doxygen/doc/Makefile
echo "VERSION = $(VERSION)" >> $(INSTALL)/share/doxygen/doc/Makefile
cat doc/Makefile.in >> $(INSTALL)/share/doxygen/doc/Makefile
cd $(INSTALL)/share/doxygen/examples ; $(MAKE)
cd $(INSTALL)/share/doxygen/doc ; $(MAKE)
cp -r doc $(INSTALL)/doc/doxygen
cp -r examples $(INSTALL)/doc/doxygen
echo "DOXYGEN = $(INSTALL)" > $(INSTALL)/doc/doxygen/doc/Makefile
echo "DOXYDOCS = .." >> $(INSTALL)/doc/doxygen/doc/Makefile
echo "VERSION = $(VERSION)" >> $(INSTALL)/doc/doxygen/doc/Makefile
cat doc/Makefile.in >> $(INSTALL)/doc/doxygen/doc/Makefile
cd $(INSTALL)/doc/doxygen/examples ; $(MAKE)
cd $(INSTALL)/doc/doxygen/doc ; $(MAKE)
rm -rf $(INSTALL)/doc/doxygen/doc
docs: FORCE
cd examples ; $(MAKE)
......@@ -38,10 +39,13 @@ docs: FORCE
ps: docs
cd latex ; $(MAKE)
pdf: docs
cd latex ; $(MAKE)
archive: distclean
tar zcvf dx`date +%y%m%d`.tgz tmake doc wintools examples bin objects \
src configure Makefile.in Makefile.win.in INSTALL make.bat \
LANGUAGE.HOWTO LICENSE PLATFORMS VERSION
src configure configure.bin Makefile.in Makefile.win.in INSTALL \
make.bat LANGUAGE.HOWTO LICENSE PLATFORMS VERSION
src/version.cpp: Makefile
echo "char versionString[]=\"$(VERSION)\";" > src/version.cpp
......
DOXYGEN Version 0.49-990901
DOXYGEN Version 0.49-991003
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (01 September 1999)
Dimitri van Heesch (03 October 1999)
0.49-990901
0.49-991003
......@@ -21,8 +21,9 @@ f_shared=YES
f_make=NO
f_perl=NO
f_plf_auto=NO
f_prefix=/usr/local
f_prefix=/usr
f_insttool=install
f_english=NO
while test -n "$1"; do
case $1 in
......@@ -41,6 +42,9 @@ while test -n "$1"; do
--debug)
f_debug=YES
;;
--english-only)
f_english=YES
;;
--platform)
shift; f_platform=$1
;;
......@@ -68,12 +72,12 @@ done
if test "$f_help" = y; then
cat <<EOF
Usage: $0 [--help] [--shared] [--static] [--release] [--debug]
[--perl name] [--make name] [--platform target] [--prefix]
[--install]
[--perl name] [--make name] [--platform target] [--prefix dir]
[--install name] [--english-only]
Options:
Options:ll
--help Print this message
--help Print this help
--shared | --static Build using shared or static linking
[default: shared]
......@@ -91,11 +95,13 @@ Options:
See PLATFORMS for a list of possibilities
--prefix dir Installation prefix directory
[default: /usr/local]
[default: /usr]
--install name name of the GNU install tool
--install name Use \`name' as the name of the GNU install tool
[default: install]
--english-only Include support for English only.
EOF
test "$f_error" = y && exit 1
exit 0;
......@@ -196,11 +202,11 @@ if test -z "$QTDIR"; then
echo "check your Qt installation!"
exit 2
else
if ! test -d "$QTDIR/lib"; then
if test ! -d "$QTDIR/lib"; then
echo "QTDIR is set, but library directory does not exist!"
exit 2
fi
if ! test -d "$QTDIR/include"; then
if test ! -d "$QTDIR/include"; then
echo "QTDIR is set, but include directory does not exist!"
exit 2
fi
......@@ -218,9 +224,11 @@ if test "$f_make" = NO; then
for i in $make_names; do
for j in $make_dirs; do
if test -x "$j/$i"; then
if test -n "`$j/$i --version 2>/dev/null | grep GNU`"; then
make_prog="$j/$i"
break 2
fi
fi
done
done
f_make="$make_prog"
......@@ -281,18 +289,24 @@ RM = rm -f
VERSION = `cat VERSION`
INSTALL = $f_prefix
INSTTOOL = $f_insttool
DOXYDOCS = $PWD
DOXYDOCS = ..
export TMAKEPATH
EOF
touch .tmakeconfig
if test "$f_shared" = NO; then
cat > .tmakeconfig <<EOF
cat >> .tmakeconfig <<EOF
TMAKE_LFLAGS = -static
EOF
fi
if test "$f_english" = YES; then
cat >> .tmakeconfig << EOF
TMAKE_CXXFLAGS = -DENGLISH_ONLY
EOF
fi
for i in Makefile.in src/Makefile.in examples/Makefile.in doc/Makefile.in ; do
SRC=$i
DST=`echo $i|sed 's%\(.*\).in$%\1%'`
......
#
# $Id$
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
# All output generated with Doxygen is not covered by this license.
PROJECT_NAME =
OUTPUT_DIRECTORY = ..
HTML_HEADER =
......@@ -14,7 +27,7 @@ ENABLE_PREPROCESSING = NO
INPUT = index.doc install.doc starting.doc faq.doc trouble.doc \
history.doc features.doc \
doxygen_usage.doc doxytag_usage.doc doxysearch_usage.doc \
installdox_usage.doc autolink.doc \
installdox_usage.doc output.doc autolink.doc \
config.doc commands.doc htmlcmds.doc language.doc
FILE_PATTERNS = *.cpp *.h *.doc
EXAMPLE_PATH = ../examples
......@@ -29,3 +42,4 @@ DOC_URL =
DOC_ABSPATH =
BIN_ABSPATH = /usr/local/bin/
EXT_DOC_PATHS =
PDF_HYPERLINKS = YES
#
# $Id$
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
# All output generated with Doxygen is not covered by this license.
all: FORCE
DOXYGEN_DOCDIR=$(DOXYDOCS); \
......
all: doxygen_manual.ps
#
# $Id$
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
# All output generated with Doxygen is not covered by this license.
all: doxygen_manual.pdf
doxygen_manual.pdf: doxygen_manual.ps
ps2pdf doxygen_manual.ps doxygen_manual.pdf
doxygen_manual.ps: doxygen_manual.dvi
dvips -o doxygen_manual.ps doxygen_manual.dvi
......
#
# $Id$
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
# All output generated with Doxygen is not covered by this license.
all: FORCE
set DOXYGEN_DOCDIR=file:///$(DOXYGEN)
set VERSION=$(VERSION)
......
......@@ -70,12 +70,14 @@ documentation:
<li> \refitem cmdfile \file
<li> \refitem cmdfn \fn
<li> \refitem cmdhtmlonly \htmlonly
<li> \refitem cmdimage \image
<li> \refitem cmdinclude \include
<li> \refitem cmdingroup \ingroup
<li> \refitem cmdinternal \internal
<li> \refitem cmdlatexonly \latexonly
<li> \refitem cmdline \line
<li> \refitem cmdlink \link
<li> \refitem cmdmainpage \mainpage
<li> \refitem cmdnamespace \namespace
<li> \refitem cmdoverload \overload
<li> \refitem cmdpage \page
......@@ -84,6 +86,7 @@ documentation:
<li> \refitem cmdref \ref
<li> \refitem cmdrelates \relates
<li> \refitem cmdreturn \return
<li> \refitem cmdretval \retval
<li> \refitem cmdsa \sa
<li> \refitem cmdsection \section
<li> \refitem cmdskip \skip
......@@ -286,6 +289,38 @@ Doxygen. Unrecognized commands are treated as normal text.
This command writes the message `For internal use only' to the output.
All text after a \c \internal command is ignored.
<hr>
\subsection cmdmainpage \mainpage [(title)]
\addindex \mainpage
If the \\mainpage command is placed in a comment block the
block is used to customize the index page (in HTML) or
the first chapter (in \f$\mbox{\LaTeX}\f$).
The title argument is optional and replaces the default title that
doxygen normally generates.
Here is an example:
\verbatim
/*! \mainpage My Personal Index Page
*
* \section intro Introduction
*
* This is the introduction.
*
* \section install Installation
*
* \subsection step1 Step 1: Opening the box
*
* etc...
*/
\endverbatim
\sa section \ref cmdsection "\\section",
section \ref cmdsubsection "\\subsection" and
section \ref cmdpage "\\page".
<hr>
\subsection cmdnamespace \namespace <name>
......@@ -339,6 +374,15 @@ Doxygen. Unrecognized commands are treated as normal text.
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
\par notice:
The \<name\> argument consists of a combination of letters and number
digits. If you wish to use upper case letters (e.g. \c MYPAGE1), or
mixed case letters (e.g. \c MyPage1) in the \<name\> argument, you
should set \c CASE_SENSE_NAMES to \c YES. However, this is advisable
only if your file system is case sensitive. Otherwise (and for better
portability) you should use all lower case letters (e.g. \c mypage1)
for \<name\> in all references to the page.
\sa section \ref cmdsection "\\section", section
\ref cmdsubsection "\\subsection", and section
\ref cmdref "\\ref".
......@@ -543,6 +587,23 @@ Doxygen. Unrecognized commands are treated as normal text.
\sa Section \ref cmdjdreturn "@return".
<hr>
\subsection cmdretval \retval <return value> { description }
\addindex \retval
Starts a return value for a function with name
\<return value\>. Followed by a description of the return value.
The text of the paragraph that forms the description has no special
internal structure. All visual enhancement commands may be used inside the
paragraph.
Multiple adjacent \\retval commands will be joined into a single paragraph.
Each return value description will start on a new line.
The \\retval description ends when a blank line or some other
sectioning command is encountered.
\sa Section \ref cmdjdretval "@retval".
<hr>
\subsection cmdsa \sa { references }
......@@ -690,11 +751,17 @@ Doxygen. Unrecognized commands are treated as normal text.
\addindex \dontinclude
This command can be used to parse a source file without actually
including it. Any class and member declarations inside the code
verbatim including it in the documentation (as the \\include command does).
This is useful if you want to divide the source file into smaller pieces and
add documentation between the pieces.
Source files or directories can be specified using the \c EXAMPLE_PATH tag
of Doxygen's configuration file.
The class and member declarations and definitions inside the code fragment
are `remembered' during the parsing of the comment block that contained
the \\dontinclude command.
For line by line description of source files, one or more lines
For line by line descriptions of source files, one or more lines
of the example can be displayed using the \\line, \\skip, \\skipline, and
\\until commands. An internal pointer is used for these commands. The
\\dontinclude command sets the pointer to the first line of the example.
......@@ -717,8 +784,8 @@ Doxygen. Unrecognized commands are treated as normal text.
\addindex \include
This command can be used to include a source file as a block of code.
The command takes the name of an include file as an argument.
Include files or directories can be specified using the
\c INCLUDE_PATH tag of Doxygen's configuration file.
Source files or directories can be specified using the
\c EXAMPLE_PATH tag of Doxygen's configuration file.
Using the \\include command is equivalent to inserting the file into
the documentation block and surrounding it
......@@ -728,10 +795,9 @@ Doxygen. Unrecognized commands are treated as normal text.
duplication in case of example blocks that consist of multiple
source and header files.
For line by line description of source files, one or more lines
of the example can be displayed using the \\line, \\skip, \\skipline, and
\\until commands. An internal pointer is used for these command. The
\\include command sets the pointer to the first line of the example.
For a line by line description of a source files use the
\\dontinclude command in combination with the \\line, \\skip, \\skipline,
and \\until commands.
\sa section \ref cmdexample "\\example" and \ref cmddontinclude "\\dontinclude".
......@@ -966,6 +1032,45 @@ Doxygen. Unrecognized commands are treated as normal text.
\sa section \ref cmdhtmlonly "\\htmlonly" and section
\ref cmdlatexonly "\\latexonly".
<hr>
\subsection cmdimage \image <format> <file> [<sizeindication>=<size>]
\addindex \image
Inserts an image into the documentation. This command is format
specific, so if you want to insert an image for more than one
format you'll have to repeat this command for each format.
The first argument specifies the output format. Currently, the
following values are supported: \c html and \c latex.
The second argument specifies the path and file name of the image.
If a relative path is used, this will be relative to the directory to
which the output of the particular format is written.
For the html format you may also
specify an URL. If the name contains spaces you'll have to put
quotes (") around it.
The third argument can be used to specify the width or height of the
image. This is only useful for \f$\mbox{\LaTeX}\f$ output
(i.e. format=latex). \c sizeindication can be either
\c width or \c height. The size should be a valid
size specifier in \f$\mbox{\LaTeX}\f$ (for example <code>10cm</code> or
<code>6in</code>).
\verbatim
/*! Here is a snapshot of my new application:
* \image html ../images/application.jpg
* \image latex ../images/application.eps width=10cm
*/
\endverbatim
\warning The image format for HTML is limited to what your
browser supports. For \f$\mbox{\LaTeX}\f$ the image format
must be an encapsulated postscipt (eps).
<br><br>
Doxygen does not check if an image exists or if it is in
the correct format. So \e you have to make sure this is the case!
<hr>
\subsection cmdlatexonly \latexonly
......@@ -1078,6 +1183,9 @@ The following command JavaDoc command are support.
\subsection cmdjdreturn @return { description of the return value }
\addindex @return
Equivalent to \\return (see section \ref cmdreturn "\\return").
\subsection cmdjdretval @retval <return value name> { return value description }
\addindex @retval
Equivalent to \\retval (see section \ref cmdretval "\\retval").
\subsection cmdjdsee @see { references }
\addindex @see
Equivalent to \\sa (see section \ref cmdsa "\\sa").
......
This diff is collapsed.
%
% $Id$
%
% Copyright (C) 1997-1999 by Dimitri van Heesch.
%
% Permission to use, copy, modify, and distribute this software and its
% documentation under the terms of the GNU General Public License is hereby
% granted. No representations are made about the suitability of this software
% for any purpose. It is provided "as is" without express or implied warranty.
% See the GNU General Public License for more details.
%
% All output generated with Doxygen is not covered by this license.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{doxygen}
\RequirePackage{calc}
......
\documentclass[a4paper]{article}
%
% $Id$
%
% Copyright (C) 1997-1999 by Dimitri van Heesch.
%
% Permission to use, copy, modify, and distribute this software and its
% documentation under the terms of the GNU General Public License is hereby
% granted. No representations are made about the suitability of this software
% for any purpose. It is provided "as is" without express or implied warranty.
% See the GNU General Public License for more details.
%
% All output generated with Doxygen is not covered by this license.
\documentclass[a4paper,ps2pdf]{article}
\usepackage{a4wide}
\usepackage{makeidx}
\usepackage{fancyheadings}
\usepackage{epsf}
\usepackage{doxygen}
\usepackage{multicol}
\usepackage{times}
\usepackage[backref=true,
pagebackref=true,
colorlinks=true,
linkcolor=blue
]{hyperref}
\makeindex
\setcounter{tocdepth}{1}
\setlength{\footrulewidth}{0.4pt}
......@@ -35,6 +54,7 @@ Written by Dimitri van Heesch\\[2ex]
\input{doxytag_usage}
\input{doxysearch_usage}
\input{installdox_usage}
\input{output}
\input{autolink}
\input{config}
\input{commands}
......
......@@ -41,7 +41,11 @@ doxygen <config_file>
\endverbatim
</ol>
If you also want a search engine to be generated, you should look
The \c -s option is optional and can be used suppress the description that
doxygen normally generates for each tag. Try to use this option if you send
me configuration files!
If you also want to use the search engine, you should look
at section \ref doxysearch_usage.
*/
......@@ -18,12 +18,19 @@
<ol>
<li><b>How do get information on the index page in HTML?</b>
<p>
There is no real support for title pages at the moment. But you can
override the default index page, by using the following comment block:
You should use the \\mainpage command inside a comment block like this:
\verbatim
/*! \page index My Personal Index Page
/*! \mainpage My Personal Index Page
*
* This is my index personal index page.
* \section intro Introduction
*
* This is the introduction.
*
* \section install Installation
*
* \subsection step1 Step 1: Opening the box
*
* etc...
*/
\endverbatim
......@@ -44,6 +51,11 @@ around the blocks that should be hidden and put:
\endverbatim
in the config file then all blocks should be skipped by Doxygen as long
as <code>PREPROCESSING = YES</code>.
<li><b>How can I make doxygen ignore nasty macro's? </b>
Look at section \ref preprocessing for the answer.
</ol>
*/
......@@ -41,7 +41,8 @@ All output generated by Doxygen is not covered by this license.
Doxygen is a documentation system for C and C++. It can generate an on-line
class browser (in HTML) and/or an off-line reference manual
(in \f$\mbox{\LaTeX}\f$) from a set
of documented source files. The documentation is extracted directly from the
of documented source files. There is also some support for generating
man pages. The documentation is extracted directly from the
sources. Doxygen is developed on a <a href="http://www.linux.org">Linux</a>
platform, but it runs on most other UNIX flavors as well.
An executable for Windows 95/NT is also available.
......@@ -78,6 +79,8 @@ The second part forms a reference manual:
<li>Section \ref doxysearch_usage shows how to use the \c doxysearch program.
<li>Section \ref installdox_usage shows how to use the \c installdox
script that is generated by Doxygen if you use tag files.
<li>Section \ref output shows how to generate the various output formats
supported by Doxygen.
<li>Section \ref autolink shows how to put links to files, classes,
and members in the documentation.
<li>Section \ref config shows how to fine-tune doxygen, so it
......@@ -177,6 +180,8 @@ Matthias Baas,
Walter Mueller,
William van Dieten,
Joshua Jensen,
Patrick Aberts,
Jacques Tremblay,
and many others for suggestions, patches and bug reports.
</ul>
*/
......
......@@ -150,6 +150,31 @@ Here is a list of the languages and their current maintainers:
foltra@puc.cl</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Finnish
</TD>
<TD>
Olli Korhonen
</TD>
<TD>
<a href="mailto:Olli.Korhonen@ccc.fi">
Olli.Korhonen@ccc.fi</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Russian
</TD>
<TD>
Vladimir Vodolazkiy
</TD>
<TD>
<a href="mailto:voldemarus@geocities.com">
voldemarus@geocities.com</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Dutch
......@@ -192,6 +217,10 @@ Here is a list of the languages and their current maintainers:
\hline
Spanish & Francisco Oltra Thennet & {\tt foltra@puc.cl} \\
\hline
Finish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} \\
\hline
Russian & Vladimir Vodolazkiy & {\tt voldemarus@geocities.com} \\
\hline
Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} \\
\hline
\end{tabular}
......
/******************************************************************************
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* All output generated with Doxygen is not covered by this license.
*
*/
/*! \page output.html
\section output Output Formats
\addindex output formats
The following output formats are \e directly supported by doxygen:
<dl>
<dt><b>HTML</b>
<dd>Generated if GENERATE_HTML is set to YES in the configuration file.
<dt>\f$\mbox{\LaTeX}\f$
<dd>Generated if GENERATE_LATEX is set to YES in the configuration file.
<dt><b>Man pages</b>
<dd>Generated if GENERATE_MAN is set to YES in the configuration file.
</dl>
The following output formats are \e indirectly supported by doxygen:
<dl>
<dt><b>Compressed HTML</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.
<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.
<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.
In order to get hyperlinks in the pdf file,
\c PDF_HYPERLINKS should be set to \c YES.
</dl>
*/
......@@ -203,7 +203,7 @@ The one-line comments should contain a brief description,
whereas the multi-line comment blocks contain a more detailed description.
The brief descriptions are included in the member overview of a class,
namespace or file and are printed using a small italic font
(this description can be omitted by setting \c BRIEF_MEMBER_DESC to \c NO in
(this description can be omitted by setting \c BRIEF_STDMETHOD_DESC to \c NO in
the config file). By default the brief descriptions are also the first
sentence of the detailed description
(this can be changed by setting the \c REPEAT_BRIEF tag to \c NO).
......@@ -443,7 +443,7 @@ after preprocessing becomes:
\endverbatim
Notice that doxygen will now expand \e all macro definitions
(recursively if needed). This is often too much, therefore doxygen also
(recursively if needed). This is often too much. Therefore, doxygen also
allows you to expand only those defines that you explicitly
specify. For this you have to set the \c EXPAND_ONLY_PREDEF tag to \c YES
and specify the macro definitions after the \c PREDEFINED tag.
......@@ -462,9 +462,9 @@ of an abstract base class called \c IUnknown:
/*! The IUnknown interface */
DECLARE_INTERFACE(IUnknown)
{
MEMBER(HRESULT,QueryInterface) (THIS_ REFIID iid, void **ppv) PURE;
MEMBER(ULONG,AddRef) (THIS) PURE;
MEMBER(ULONG,Release) (THIS) PURE;
STDMETHOD(HRESULT,QueryInterface) (THIS_ REFIID iid, void **ppv) PURE;
STDMETHOD(ULONG,AddRef) (THIS) PURE;
STDMETHOD(ULONG,Release) (THIS) PURE;
};
\endverbatim
......@@ -479,7 +479,7 @@ ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
PREDEFINED = "DECLARE_INTERFACE(name)=class name" \
"MEMBER(result,name)=virtual result name" \
"STDMETHOD(result,name)=virtual result name" \
"PURE= = 0" \
THIS_= \
THIS= \
......
......@@ -48,8 +48,8 @@
int *(a[20]);
\endverbatim
then doxygen will remove the braces and correctly parse the result.
<li>Not all names in code fragments that are include in the documentation
are replaced by links (for instance when using SOURCE_BROWSER = YES).
<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).
For a part this is because the code parser isn't smart enough at the
moment. I'll try to improve this in the future. But even with these
improvements not everthing can be properly linked to the corresponding
......
......@@ -75,7 +75,7 @@ autolink/html/index.html: autolink.cpp autolink.cfg
tag/html/index.html: tag.cpp tag.cfg
$(DOXYGEN)/bin/doxygen tag.cfg
sed -e "1,1s.perl.$(PERL).g" tag/html/installdox >tag/html/installdox.perl
sed -e "1,1s#perl#$(PERL)#g" tag/html/installdox >tag/html/installdox.perl
cd tag/html ; $(PERL) installdox.perl -lexample.tag@../../example/html
restypedef/html/index.html: restypedef.cpp restypedef.cfg
......
......@@ -232,11 +232,11 @@ void ClassDef::writeDocumentation(OutputList &ol)
}
pageTitle+=pageType+" Reference";
startFile(ol,fileName,pageTitle);
startTitle(ol);
startTitle(ol,getOutputFileBase());
//ol.docify(name()+" "+pageType.right(pageType.length()-1)+" ");
//parseText(ol,theTranslator->trReference());
parseText(ol,theTranslator->trCompoundReference(name(),compType));
endTitle(ol,name());
endTitle(ol,getOutputFileBase(),name());
// write brief description
OutputList briefOutput(&ol);
......@@ -694,9 +694,9 @@ void ClassDef::writeMemberList(OutputList &ol)
// do not generate Latex output
ol.disableAllBut(OutputGenerator::Html);
startFile(ol,memListFileName,theTranslator->trMemberList());
startTitle(ol);
startTitle(ol,0);
parseText(ol,name()+" "+theTranslator->trMemberList());
endTitle(ol,0);
endTitle(ol,0,0);
parseText(ol,theTranslator->trThisIsTheListOfAllMembers());
ol.writeObjectLink(getReference(),fileName,0,name());
parseText(ol,theTranslator->trIncludingInheritedMembers());
......@@ -746,7 +746,8 @@ void ClassDef::writeMemberList(OutputList &ol)
ol.writeListItem();
ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),
md->anchor(),name);
if ( md->isFunction() || md->isSignal() || md->isSlot() )
if ( md->isFunction() || md->isSignal() || md->isSlot() ||
(md->isFriend() && md->argsString()))
ol.docify(md->argsString());
else if (md->isEnumerate())
parseText(ol," "+theTranslator->trEnumName());
......@@ -786,7 +787,8 @@ void ClassDef::writeMemberList(OutputList &ol)
memberWritten=TRUE;
}
if ((protect!=Public || md->isStatic() || virt!=Normal ||
md->isFriend() || md->isRelated()
md->isFriend() || md->isRelated() ||
(md->isInline() && Config::inlineInfoFlag)
)
&& memberWritten)
{
......@@ -797,6 +799,8 @@ void ClassDef::writeMemberList(OutputList &ol)
else if (md->isRelated()) sl.append("related");
else
{
if (Config::inlineInfoFlag && md->isInline())
sl.append("inline");
if (protect==Protected) sl.append("protected");
else if (protect==Private) sl.append("private");
if (virt==Virtual) sl.append("virtual");
......@@ -831,11 +835,11 @@ void ClassDef::writeIncludeFile(OutputList &ol)
//printf("incFile=%s\n",incFile->absFilePath().data());
ol.disableAllBut(OutputGenerator::Html);
startFile(ol,fileName+"-include",name()+" Include File");
startTitle(ol);
startTitle(ol,0);
QCString n=incName.copy();
if (incName.isNull()) n=incFile->name();
parseText(ol,n);
endTitle(ol,0);
endTitle(ol,0,0);
parseText(ol,theTranslator->trVerbatimText(incFile->name()));
ol.writeRuler();
ol.startCodeFragment();
......@@ -992,15 +996,25 @@ bool ClassDef::hasNonReferenceSuperClass()
// htmlHelp->decContentsDepth();
//}
void ClassDef::writeDeclaration(OutputList &ol)
void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md)
{
//ol.insertMemberAlign();
//printf("ClassName=`%s'\n",name().data());
switch(compType)
{
case Class: ol.docify("class {"); break;
case Struct: ol.docify("struct {"); break;
default: ol.docify("union {"); break;
case Class: ol.docify("class"); break;
case Struct: ol.docify("struct"); break;
default: ol.docify("union"); break;
}
int ri=name().findRev("::");
if (ri==-1) ri=name().length();
QCString cn=name().right(name().length()-ri-2);
if (!cn.isEmpty() && cn.at(0)!='@' && md)
{
ol.docify(" ");
ol.writeObjectLink(0,0,md->anchor(),cn);
}
ol.docify(" {");
ol.endMemberItem(FALSE,0,0,FALSE); // TODO: pass correct group parameters
// insert members of this class
......
......@@ -39,6 +39,7 @@ class BaseClassList;
class MemberInfoList;
class MemberInfoDict;
class NamespaceDef;
class MemberDef;
class ClassDef : public Definition
{
......@@ -76,7 +77,7 @@ class ClassDef : public Definition
void writeMemberList(OutputList &ol);
void writeIncludeFile(OutputList &ol);
//void writeMembersToContents();
void writeDeclaration(OutputList &ol);
void writeDeclaration(OutputList &ol,MemberDef *md);
bool addExample(const char *anchor,const char *name, const char *file);
bool hasExamples();
//void writeExample(OutputList &ol);
......@@ -84,9 +85,9 @@ class ClassDef : public Definition
Protection protection() const { return prot; }
/*! a link to this class is possible within this project */
bool isLinkableInProject()
{ int i = name().findRev("::");
if (i==-1) i=0; else i+=2;
return !name().isEmpty() && name().at(i)!='@' &&
{ //int i = name().findRev("::");
//if (i==-1) i=0; else i+=2;
return !name().isEmpty() && name().find('@')==-1 &&
(prot!=Private || Config::extractPrivateFlag) &&
hasDocumentation() && !isReference();
}
......@@ -167,6 +168,7 @@ struct BaseClassDef
class BaseClassList : public QList<BaseClassDef>
{
public:
~BaseClassList() {}
int compareItems(GCI item1,GCI item2)
{
ClassDef *c1=((BaseClassDef *)item1)->classDef;
......
......@@ -213,7 +213,10 @@ static bool getLink(const char *className,
// exampleFile.data());
if (md->addExample(anchor,exampleName,exampleFile))
{
bool latexEnabled = result.isEnabled(OutputGenerator::Latex);
if (latexEnabled) result.disable(OutputGenerator::Latex);
result.writeAnchor(anchor);
if (latexEnabled) result.enable(OutputGenerator::Latex);
anchorCount++;
}
}
......@@ -222,6 +225,7 @@ static bool getLink(const char *className,
if (d)
{
//printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data());
result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
md->anchor(),memberName);
return TRUE;
......@@ -384,7 +388,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
if ((fd=findFileDef(&inputNameDict,yytext,ambig)) &&
fd->isLinkable())
{
code->writeCodeLink(0,fd->getOutputFileBase(),0,yytext);
code->writeCodeLink(fd->getReference(),fd->getOutputFileBase(),0,yytext);
}
else
{
......
......@@ -39,6 +39,7 @@ struct Config
static QCString manOutputDir; // the directory to put the man pages
static QCString outputLanguage; // the output language
static QCString headerFile; // the name of the personal HTML header
static QCString latexHeaderFile; // the name of the personal LaTeX header
static QCString footerFile; // the name of the personal HTML footer
static QCString cgiName; // the name of the CGI binary
static QCString cgiURL; // the absolute URL to the CGI binary
......@@ -91,6 +92,9 @@ struct Config
static bool autoBriefFlag; // javadoc comments behaves as Qt comments.
static bool htmlHelpFlag; // should html help files be generated?
static bool alphaIndexFlag; // should an alphabetical index be generated?
static bool pdfHyperFlag; // generate latex prepared creating hyperlinked pdfs.
static bool inheritDocsFlag; // inheritance of documentation enabled?
static bool inlineInfoFlag; // show info about inline members?
};
#endif
......@@ -71,6 +71,7 @@ QCString Config::latexOutputDir;
QCString Config::manOutputDir;
QCString Config::outputLanguage;
QCString Config::headerFile;
QCString Config::latexHeaderFile;
QCString Config::footerFile;
QCString Config::cgiName;
QCString Config::cgiURL;
......@@ -111,6 +112,7 @@ bool Config::caseSensitiveNames = FALSE;
bool Config::includeSourceFlag = FALSE;
bool Config::htmlHelpFlag = FALSE;
bool Config::alphaIndexFlag = FALSE;
bool Config::pdfHyperFlag = FALSE;
bool Config::autoBriefFlag = TRUE;
bool Config::warningFlag = TRUE;
bool Config::generateHtml = TRUE;
......@@ -123,6 +125,8 @@ bool Config::classDiagramFlag = TRUE;
bool Config::repeatBriefFlag = TRUE;
bool Config::verbatimHeaderFlag = TRUE;
bool Config::htmlAlignMemberFlag = TRUE;
bool Config::inheritDocsFlag = TRUE;
bool Config::inlineInfoFlag = TRUE;
/* -----------------------------------------------------------------
*
......@@ -180,6 +184,7 @@ static int yyread(char *buf,int max_size)
<Start>"LATEX_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::latexOutputDir; }
<Start>"HTML_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::headerFile; }
<Start>"HTML_FOOTER"[ \t]*"=" { BEGIN(GetString); s=&Config::footerFile; }
<Start>"LATEX_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::latexHeaderFile; }
<Start>"CGI_NAME"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiName; }
<Start>"CGI_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiURL; }
<Start>"DOC_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::docURL; }
......@@ -232,6 +237,9 @@ static int yyread(char *buf,int max_size)
<Start>"JAVADOC_AUTOBRIEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::autoBriefFlag; }
<Start>"GENERATE_HTMLHELP"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpFlag; }
<Start>"ALPHABETICAL_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::alphaIndexFlag; }
<Start>"PDF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::pdfHyperFlag; }
<Start>"INHERIT_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::inheritDocsFlag; }
<Start>"INLINE_INFO"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineInfoFlag; }
<Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n {
......@@ -375,6 +383,7 @@ void Config::init()
Config::manOutputDir ="man";
Config::outputLanguage = "English";
Config::headerFile.resize(0);
Config::latexHeaderFile.resize(0);
Config::footerFile.resize(0);
Config::cgiName = "search.cgi";
Config::cgiURL.resize(0);
......@@ -415,6 +424,7 @@ void Config::init()
Config::includeSourceFlag = FALSE;
Config::htmlHelpFlag = FALSE;
Config::alphaIndexFlag = FALSE;
Config::pdfHyperFlag = FALSE;
Config::warningFlag = TRUE;
Config::generateHtml = TRUE;
Config::generateLatex = TRUE;
......@@ -427,6 +437,8 @@ void Config::init()
Config::verbatimHeaderFlag = TRUE;
Config::htmlAlignMemberFlag = TRUE;
Config::autoBriefFlag = TRUE;
Config::inheritDocsFlag = TRUE;
Config::inlineInfoFlag = TRUE;
}
void writeTemplateConfig(QFile *f,bool sl)
......@@ -636,7 +648,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# If the JAVADOC_NO_AUTOBRIEF is set to YES (the default) then Doxygen\n";
t << "# If the JAVADOC_AUTOBRIEF tag is set to YES (the default) then Doxygen\n";
t << "# will interpret the first line (until the first dot) of a JavaDoc-style\n";
t << "# comment as the brief description. If set to NO, the Javadoc-style will\n";
t << "# behave just like the Qt-style comments.\n";
......@@ -644,6 +656,23 @@ void writeTemplateConfig(QFile *f,bool sl)
}
t << "JAVADOC_AUTOBRIEF = YES\n";
if (!sl)
{
t << "\n";
t << "# if the INHERIT_DOCS tag is set to YES (the default) then an undocumented\n";
t << "# member inherits the documentation from any documented member that it\n";
t << "# reimplements.\n";
t << "\n";
}
t << "INHERIT_DOCS = YES\n";
if (!sl)
{
t << "\n";
t << "# if the INLINE_INFO tag is set to YES (the default) then a tag [inline]\n";
t << "# is inserted in the documentation for inline members.\n";
t << "\n";
}
t << "INLINE_INFO = YES\n";
if (!sl)
{
t << "\n";
}
......@@ -839,6 +868,26 @@ void writeTemplateConfig(QFile *f,bool sl)
}
t << "EXTRA_PACKAGES =\n";
if (!sl)
{
t << "\n";
t << "# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \n";
t << "# the generated latex document. The header should contain everything until\n";
t << "# the first chapter. If it is left blank doxygen will generate a \n";
t << "# standard header. Notice: only use this tag if you know what you are doing!\n";
t << "\n";
}
t << "LATEX_HEADER =\n";
if (!sl)
{
t << "\n";
t << "# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated\n";
t << "# is prepared for conversion to pdf (using ps2pdf). The pdf file will\n";
t << "# contain links (just like the HTML output) instead of page references\n";
t << "# This makes the output suitable for online browsing using a pdf viewer.\n";
t << "\n";
}
t << "PDF_HYPERLINKS = NO\n";
if (!sl)
{
t << "\n";
}
......@@ -1177,6 +1226,17 @@ void checkConfig()
exit(1);
}
}
// Test to see if LaTeX header is valid
if (Config::latexHeaderFile.length()>0)
{
QFileInfo fi(Config::latexHeaderFile);
if (!fi.exists())
{
err("Error: tag LATEX_HEADER: header file `%s' "
"does not exist\n",Config::latexHeaderFile.data());
exit(1);
}
}
// check include path
char *s=Config::includePath.first();
while (s)
......
......@@ -171,11 +171,11 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
<Template>. {
name+=*yytext;
}
<Operator>{B}*"()"{B}*"<>"{B}*/"(" {
<Operator>{B}*"("{B}*")"{B}*"<>"{B}*/"(" {
name+="() <>";
BEGIN(ReadArgs);
}
<Operator>{B}*"()"{B}*/"(" {
<Operator>{B}*"("{B}*")"{B}*/"(" {
name+="()";
BEGIN(ReadArgs);
}
......
......@@ -73,3 +73,17 @@ void Definition::addSectionsToDefinition(QList<QCString> *anchorList)
s=anchorList->next();
}
}
void Definition::setBriefDescription(const char *b)
{
brief=QCString(b).stripWhiteSpace();
int bl=brief.length();
if (bl>0) // add puntuation if needed
{
switch(brief.at(bl-1))
{
case '.': case '!': case '?': break;
default: brief+='.'; break;
}
}
}
......@@ -50,19 +50,7 @@ class Definition
/*! sets the brief description of this definition to \a b.
* A dot is added to the sentence if not available.
*/
void setBriefDescription(const char *b)
{
brief=((QCString) b).stripWhiteSpace();
int bl=brief.length();
if (bl>0) // add puntuation if needed
{
switch(brief.at(bl-1))
{
case '.': case '!': case '?': break;
default: brief+='.'; break;
}
}
}
void setBriefDescription(const char *b);
/*! returns TRUE iff the definition is documented */
virtual bool hasDocumentation()
{ return !doc.isNull() || !brief.isNull() || Config::extractAllFlag; }
......
This diff is collapsed.
......@@ -113,6 +113,7 @@ extern NamespaceDict namespaceDict;
extern FormulaList formulaList;
extern FormulaDict formulaDict;
extern FormulaDict formulaNameDict;
extern PageInfo *mainPage;
extern int annotatedClasses;
extern int hierarchyClasses;
......
......@@ -65,6 +65,7 @@ Entry::Entry(const Entry &e)
fileName = e.fileName.copy();
startLine = e.startLine;
mGrpId = e.mGrpId;
inLine = e.inLine;
sublist = new QList<Entry>;
sublist->setAutoDelete(TRUE);
extends = new QList<BaseInfo>;
......@@ -207,6 +208,7 @@ void Entry::reset()
slot = FALSE;
stat = FALSE;
proto = FALSE;
inLine = FALSE;
protection = Public;
sublist->clear();
extends->clear();
......
......@@ -62,6 +62,7 @@ struct Argument
class ArgumentList : public QList<Argument>
{
public:
~ArgumentList() {}
ArgumentList() : QList<Argument>(),
constSpecifier(FALSE),
volatileSpecifier(FALSE),
......@@ -106,6 +107,7 @@ class Entry
NAMESPACEDOC_SEC = 0x02000000,
INTERFACE_SEC = 0x04000000,
INTERFACEDOC_SEC = 0x08000000,
MAINPAGEDOC_SEC = 0x10000000,
COMPOUND_MASK = CLASS_SEC | STRUCT_SEC | UNION_SEC | INTERFACE_SEC,
COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC | INTERFACEDOC_SEC,
SCOPE_MASK = COMPOUND_MASK | NAMESPACE_SEC,
......@@ -126,6 +128,7 @@ class Entry
bool slot; // a Qt slot ?
bool stat; // static ?
bool proto; // prototype ?
bool inLine; // inline ?
Specifier virt; // virtualness of the entry
Entry *parent; // parent node in the tree
QCString type; // member type
......
......@@ -37,6 +37,7 @@ FileDef::FileDef(const char *p,const char *nm,const char *ref)
path=p;
filepath=path+nm;
filename=nameToFile(nm);
diskname=filename.copy();
setReference(ref);
memList = new MemberList;
classList = new ClassList;
......@@ -72,9 +73,9 @@ void FileDef::writeDocumentation(OutputList &ol)
QCString pageTitle=name()+" File Reference";
startFile(ol,diskname,pageTitle);
startTitle(ol);
startTitle(ol,getOutputFileBase());
parseText(ol,theTranslator->trFileReference(name()));
endTitle(ol,name());
endTitle(ol,getOutputFileBase(),name());
//ol.newParagraph();
if (Config::genTagFile.length()>0) tagFile << "&" << name() << ":\n";
......@@ -184,8 +185,8 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.endMemberItem(FALSE,0,0,FALSE);
}
cd=classList->next();
if (found) ol.endMemberList();
}
if (found) ol.endMemberList();
}
memList->writeDeclarations(ol,0,0,this,0,0);
......@@ -265,14 +266,11 @@ void FileDef::writeDocumentation(OutputList &ol)
memList->writeDocumentation(ol,name(),MemberDef::EnumValue);
}
int cnt;
if ( (cnt=memList->funcCount()>0) )
if ( memList->funcCount()>0 )
{
ol.writeRuler();
ol.startGroupHeader();
QCString cntString;
cntString.sprintf(" (%d)",cnt);
parseText(ol,theTranslator->trFunctionDocumentation()+cntString);
parseText(ol,theTranslator->trFunctionDocumentation());
ol.endGroupHeader();
memList->writeDocumentation(ol,name(),MemberDef::Function);
}
......
......@@ -59,6 +59,7 @@ class FileNameDict : public QDict<FileName>
{
public:
FileNameDict(uint size) : QDict<FileName>(size) {}
~FileNameDict() {}
};
#endif
......@@ -52,6 +52,7 @@ class FormulaDict : public QDict<Formula>
public:
FormulaDict(uint size) :
QDict<Formula>(size) {}
~FormulaDict() {}
};
#endif
......@@ -78,9 +78,9 @@ void GroupDef::writeDocumentation(OutputList &ol)
{
ol.disable(OutputGenerator::Man);
startFile(ol,fileName,title);
startTitle(ol);
startTitle(ol,getOutputFileBase());
ol.docify(title);
endTitle(ol,name());
endTitle(ol,getOutputFileBase(),name());
//brief=brief.stripWhiteSpace();
//int bl=brief.length();
......@@ -111,14 +111,19 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol.endIndexList();
}
if (classList->count()>0)
{
ClassDef *cd=classList->first();
bool found=FALSE;
while (cd)
{
if (!found)
{
ol.startMemberHeader();
parseText(ol,theTranslator->trCompounds());
ol.endMemberHeader();
ol.startIndexList();
ClassDef *cd=classList->first();
while (cd)
{
found=TRUE;
}
QCString type;
switch (cd->compoundType())
{
......
......@@ -170,17 +170,25 @@ void HtmlGenerator::writeStyleInfo(int part)
t << "DL.el { margin-left: -1cm }" << endl;
t << "DIV.fragment { width: 100%; border: none; background-color: #eeeeee }" << endl;
t << "DIV.in { margin-left: 16 }" << endl;
t << "DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }" << endl;
t << "A.gl:link { color: #ffffff }" << endl;
t << "A.gl:visited { color: #ffffff }" << endl;
t << "A.gl { text-decoration: none; font-weight: bold; background-color: " << GROUP_COLOR << " }" << endl;
t << "TD.md { background-color: #f2f2ff }" << endl;
t << endl;
endPlainFile();
}
}
void HtmlGenerator::writeDoxyAnchor(const char *,const char *anchor, const char *name)
void HtmlGenerator::startDoxyAnchor(const char *,const char *,
const char *anchor, const char *name)
{
t << "<a name=\"" << anchor << "\" doxytag=\"" << name << "\"></a>";
t << "<a name=\"" << anchor << "\" doxytag=\"" << name << "\">";
}
void HtmlGenerator::endDoxyAnchor()
{
t << "</a>" << endl;
}
void HtmlGenerator::newParagraph()
......@@ -601,17 +609,40 @@ void HtmlGenerator::endIndexList()
//}
}
void HtmlGenerator::startAlfabeticalIndexList()
void HtmlGenerator::startAlphabeticalIndexList()
{
t << "<multicol cols=5><dl compact>" << endl;
t << "<table width=95% border=0 cellspacing=0 cellpadding=0>" << endl;
}
void HtmlGenerator::endAlfabeticalIndexList()
void HtmlGenerator::endAlphabeticalIndexList()
{
t << "</dl></multicol>" << endl;
t << "</table>" << endl;
}
void HtmlGenerator::writeIndexHeading(const char *s)
{
t << "<dt><b><big>" << s << "</big></b><dd>" << endl;
//t << "<dt><b><big>" << s << "</big></b><dd>" << endl;
t << "<div class=\"ah\"><font color=\"white\"><b>&nbsp;&nbsp;" << s
<< "&nbsp;&nbsp;</b></font></div>";
}
void HtmlGenerator::writeImage(const char *name,const char *,const char *)
{
QCString baseName=name;
int i;
if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
{
baseName=baseName.right(baseName.length()-i);
}
t << "<img src=" << name << " alt=\"" << baseName << "\">" << endl;
}
void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *)
{
t << endl << "<p><table width=100%% cellpadding=2 cellspacing=0 border=0><tr><td class=\"md\"><b>" << endl;
}
void HtmlGenerator::endMemberDoc()
{
t << endl << "</b></td></tr></table>" << endl;
}
......@@ -54,8 +54,8 @@ class HtmlGenerator : public OutputGenerator
void startProjectNumber();
void endProjectNumber();
void writeStyleInfo(int part);
void startTitleHead() { startTitle(); }
void endTitleHead(const char *) { endTitle(); }
void startTitleHead(const char *) { startTitle(); }
void endTitleHead(const char *,const char *) { endTitle(); }
void startTitle() { t << "<h1>"; }
void endTitle() { t << "</h1>"; }
......@@ -67,8 +67,8 @@ class HtmlGenerator : public OutputGenerator
void endItemList() { t << "</ul>" << endl; }
void startEnumList() { t << "<ol>" << endl; }
void endEnumList() { t << "</ol>" << endl; }
void startAlfabeticalIndexList();
void endAlfabeticalIndexList();
void startAlphabeticalIndexList();
void endAlphabeticalIndexList();
void writeIndexHeading(const char *s);
void writeIndexItem(const char *ref,const char *file,const char *name);
void docify(const char *text);
......@@ -120,13 +120,15 @@ class HtmlGenerator : public OutputGenerator
void endDescItem() { t << "<dd>"; }
void lineBreak() { t << "<br>" << endl; }
void writeChar(char c);
void startMemberDoc(const char *,const char *,const char *)
{ t << endl << "<h3>"; }
void endMemberDoc() { t << "</h3>" << endl; }
void writeDoxyAnchor(const char *clName,const char *anchor,
const char *name);
void startMemberDoc(const char *,const char *,const char *,const char *);
void endMemberDoc();
//void writeDoxyAnchor(const char *fName,const char *clName,
// const char *anchor,const char *name);
void startDoxyAnchor(const char *fName,const char *clName,
const char *anchor,const char *name);
void endDoxyAnchor();
void writeLatexSpacing() {}
void writeLatexLabel(const char *,const char *) {}
//void writeLatexLabel(const char *,const char *) {}
void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name);
void writeEndAnnoItem(const char *) { t << endl; }
......@@ -144,7 +146,7 @@ class HtmlGenerator : public OutputGenerator
void endSuperscript() { t << "</sup>"; }
void startTable(int) { t << "<table border=1 cellspacing=3 cellpadding=3>"; }
void endTable() { t << "</table>" << endl; }
void nextTableRow() { t << endl << "<tr><td>"; }
void nextTableRow() { t << "<tr><td>"; }
void endTableRow() { t << "</tr>" << endl; }
void nextTableColumn() { t << "<td>"; }
void endTableColumn() { t << "</td>"; }
......@@ -171,11 +173,13 @@ class HtmlGenerator : public OutputGenerator
void endClassDiagram(ClassDiagram &,const char *,const char *);
void startColorFont(uchar r,uchar g,uchar b);
void endColorFont();
void writePageRef(const char *,const char *) {}
void startPageRef() {}
void endPageRef(const char *,const char *) {}
void startQuickIndexItem(const char *,const char *);
void endQuickIndexItem();
void writeFormula(const char *,const char *);
void writeNonBreakableSpace() { t << "&nbsp;&nbsp;&nbsp;"; }
void writeImage(const char *,const char *,const char *);
//static void docifyStatic(QTextStream &t,const char *str);
......
This diff is collapsed.
......@@ -25,6 +25,7 @@ enum IndexSections
{
isTitlePageStart,
isTitlePageAuthor,
isMainPage,
isModuleIndex,
isNamespaceIndex,
isClassHierarchyIndex,
......
......@@ -15,6 +15,7 @@
*/
#include "language.h"
#if !defined(ENGLISH_ONLY)
#include "translator_nl.h"
#include "translator_se.h"
#include "translator_cz.h"
......@@ -23,6 +24,7 @@
#include "translator_de.h"
#include "translator_jp.h"
#include "translator_es.h"
#endif
#define L_EQUAL(a) !stricmp(langName,a)
......@@ -34,6 +36,7 @@ bool setTranslator(const char *langName)
{
theTranslator=new Translator;
}
#if !defined(ENGLISH_ONLY)
else if (L_EQUAL("dutch"))
{
theTranslator=new TranslatorDutch;
......@@ -66,6 +69,7 @@ bool setTranslator(const char *langName)
{
theTranslator=new TranslatorSpanish;
}
#endif
else // use the default language (i.e. english)
{
theTranslator=new Translator;
......
This diff is collapsed.
......@@ -27,7 +27,7 @@ class LatexGenerator : public OutputGenerator
LatexGenerator();
~LatexGenerator();
OutputGenerator *copy() { return new LatexGenerator; }
OutputGenerator *copy();
//OutputGenerator *clone() { return new LatexGenerator(*this); }
void append(const OutputGenerator *o);
void enable() { active=TRUE; }
......@@ -50,9 +50,9 @@ class LatexGenerator : public OutputGenerator
void startProjectNumber();
void endProjectNumber() {}
void writeStyleInfo(int part);
void startTitleHead() { startTitle(); }
void startTitleHead(const char *);
void startTitle();
void endTitleHead(const char *name);
void endTitleHead(const char *,const char *name);
void endTitle() { t << "}"; }
void newParagraph();
......@@ -63,8 +63,8 @@ class LatexGenerator : public OutputGenerator
void endItemList() { t << "\\end{CompactItemize}" << endl; }
void startEnumList() { t << "\\begin{enumerate}" << endl; }
void endEnumList() { t << "\\end{enumerate}" << endl; }
void startAlfabeticalIndexList() {}
void endAlfabeticalIndexList() {}
void startAlphabeticalIndexList() {}
void endAlphabeticalIndexList() {}
void writeIndexHeading(const char *) {}
void writeIndexItem(const char *ref,const char *file,const char *name);
void docify(const char *text);
......@@ -96,7 +96,7 @@ class LatexGenerator : public OutputGenerator
void memberGroupSeparator() {}
void insertMemberAlign() {}
void writeRuler() { t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}"; }
void writeRuler() { t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}" << endl; }
void writeAnchor(const char *name) { t << "\\label{" << name << "}" << endl; }
void startCodeFragment() { t << "\\small\\begin{verbatim}"; }
void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; }
......@@ -111,12 +111,13 @@ class LatexGenerator : public OutputGenerator
void startDescItem() { t << "\\item["; }
void endDescItem() { t << "]" << endl; }
void lineBreak() { t << "\\par\n"; }
void startMemberDoc(const char *,const char *,const char *);
void startMemberDoc(const char *,const char *,const char *,const char *);
void endMemberDoc() { t << "}"; }
void writeDoxyAnchor(const char *,const char *,const char *);
void startDoxyAnchor(const char *,const char *,const char *,const char *);
void endDoxyAnchor();
void writeChar(char c);
void writeLatexSpacing() { t << "\\hspace{0.3cm}"; }
void writeLatexLabel(const char *scope,const char *anchor);
//void writeLatexLabel(const char *scope,const char *anchor);
void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name);
void writeEndAnnoItem(const char *name);
......@@ -157,10 +158,10 @@ class LatexGenerator : public OutputGenerator
void writeTilde(char c) { t << "\\~{" << c << "}"; }
void startMemberDescription() { t << "\\begin{CompactList}\\small\\item\\em "; }
void endMemberDescription() { t << "\\item\\end{CompactList}"; }
void startDescList() { t << "\\begin{Desc}\\item["; }
void startDescList() { t << "\\begin{Desc}\n\\item["; }
void endDescTitle() { t << "]"; }
void writeDescItem() { t << "\\par" << endl; }
void endDescList() { t << "\\end{Desc}"; }
void endDescList() { t << "\\end{Desc}" << endl; }
void writeSection(const char *,const char *,bool);
void writeSectionRef(const char *,const char *,const char *);
void writeSectionRefItem(const char *,const char *,const char *);
......@@ -174,11 +175,13 @@ class LatexGenerator : public OutputGenerator
void endClassDiagram(ClassDiagram &,const char *,const char *);
void startColorFont(uchar,uchar,uchar) {}
void endColorFont() {}
void writePageRef(const char *,const char *);
void startPageRef();
void endPageRef(const char *,const char *);
void startQuickIndexItem(const char *,const char *) {}
void endQuickIndexItem() {}
void writeFormula(const char *,const char *);
void writeNonBreakableSpace();
void writeImage(const char *,const char *,const char *);
//static void docifyStatic(QTextStream &t,const char *str);
......
......@@ -92,11 +92,7 @@ void ManGenerator::endFile()
endPlainFile();
}
void ManGenerator::writeDoxyAnchor(const char *, const char *,const char *)
{
}
void ManGenerator::endTitleHead(const char *name)
void ManGenerator::endTitleHead(const char *,const char *name)
{
t << ".TH " << name << " 3 \"" << dateToString(FALSE) << "\" \"";
if (Config::projectName.isEmpty())
......@@ -284,7 +280,7 @@ void ManGenerator::endCodeFragment()
col=0;
}
void ManGenerator::startMemberDoc(const char *,const char *,const char *)
void ManGenerator::startMemberDoc(const char *,const char *,const char *,const char *)
{
if (!firstCol) t << endl;
t << ".SS ";
......
......@@ -50,8 +50,8 @@ class ManGenerator : public OutputGenerator
void startProjectNumber() {}
void endProjectNumber() {}
void writeStyleInfo(int) {}
void startTitleHead() {}
void endTitleHead(const char *);
void startTitleHead(const char *) {}
void endTitleHead(const char *,const char *);
void startTitle();
void endTitle() {}
......@@ -63,8 +63,8 @@ class ManGenerator : public OutputGenerator
void endItemList() {}
void startEnumList() {}
void endEnumList() {}
void startAlfabeticalIndexList() {}
void endAlfabeticalIndexList() {}
void startAlphabeticalIndexList() {}
void endAlphabeticalIndexList() {}
void writeIndexHeading(const char *) {}
void writeIndexItem(const char *ref,const char *file,const char *name);
void docify(const char *text);
......@@ -110,11 +110,13 @@ class ManGenerator : public OutputGenerator
void endDescItem();
void lineBreak() { t << "\n.br" << endl; }
void writeChar(char c);
void startMemberDoc(const char *,const char *,const char *);
void startMemberDoc(const char *,const char *,const char *,const char *);
void endMemberDoc() {}
void writeDoxyAnchor(const char *clName,const char *anchor,const char *name);
void startDoxyAnchor(const char *,const char *,
const char *,const char *) {}
void endDoxyAnchor() {}
void writeLatexSpacing() {}
void writeLatexLabel(const char *,const char *) {}
//void writeLatexLabel(const char *,const char *) {}
void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name);
void writeEndAnnoItem(const char *) { t << endl; firstCol=TRUE; }
......@@ -162,11 +164,13 @@ class ManGenerator : public OutputGenerator
void endClassDiagram(ClassDiagram &,const char *,const char *) {}
void startColorFont(uchar,uchar,uchar) {}
void endColorFont() {}
void writePageRef(const char *,const char *) {}
void startPageRef() {}
void endPageRef(const char *,const char *) {}
void startQuickIndexItem(const char *,const char *) {}
void endQuickIndexItem() {}
void writeFormula(const char *,const char *) {}
void writeNonBreakableSpace() { t << " "; }
void writeImage(const char *,const char *,const char *) {}
private:
bool firstCol;
......
This diff is collapsed.
......@@ -85,11 +85,13 @@ class MemberDef : public Definition
void setAnchor(const char *a) { anc=a; }
void setProtection(Protection p) { prot=p; }
void setBody(const QCString &b) { body=b; }
void setInline(bool in) { inLine=in; }
FileDef *getFileDef() { return fileDef; }
FileDef *getFileDec() { return fileDec; }
void setMemberClass(ClassDef *cd) { classDef=cd; }
bool isRelated() const { return related; }
bool isStatic() const { return stat; }
bool isInline() const { return inLine; }
bool hasDocumentation() // overrides hasDocumentation in definition.h
{ return Definition::hasDocumentation() || !body.isEmpty(); }
......@@ -212,12 +214,14 @@ class MemberDef : public Definition
Protection prot; // protection type [Public/Protected/Private]
bool related; // is this a member that is only related to a class
bool stat; // is it a static function?
bool inLine; // is it an inline function?
MemberType mtype; // returns the kind of member
bool eUsed; // is the enumerate already placed in a list
bool proto; // is it a prototype;
bool docEnumValues; // is an enum with documented enum values.
bool annScope;
bool annUsed;
bool annShown;
int indDepth;
MemberDef *annMemb;
ArgumentList *argList; // argument list of this member
......
......@@ -62,9 +62,9 @@ void MemberGroup::writeDocumentation(OutputList &ol)
}
ol.disable(OutputGenerator::Man);
startFile(ol,fileName,title);
startTitle(ol);
startTitle(ol,getOutputFileBase());
ol.docify(title);
endTitle(ol,name());
endTitle(ol,getOutputFileBase(),name());
OutputList briefOutput(&ol);
......
......@@ -256,11 +256,11 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
// )
// )
// )
if (md->hasDocumentation() || md->hasDocumentedEnumValues())
if (md->isLinkableInProject() || md->hasDocumentedEnumValues())
{
if (Config::genTagFile.length()>0)
tagFile << md->name() << " " << md->anchor()
<< " \"" << md->argsString() << "\"";
<< " \"\"" << endl;
md->writeLink(typeDecl,cd,nd,fd,0);
}
else
......
......@@ -86,6 +86,7 @@ class MemberNameInfoIterator : public QListIterator<MemberInfo>
class MemberNameInfoList : public QList<MemberNameInfo>
{
public:
~MemberNameInfoList() {}
int compareItems(GCI item1,GCI item2)
{ return stricmp(
((MemberNameInfo *)item1)->memberName(),
......@@ -98,6 +99,7 @@ class MemberNameInfoDict : public QDict<MemberNameInfo>
{
public:
MemberNameInfoDict(int size) : QDict<MemberNameInfo>(size) {}
~MemberNameInfoDict() {}
};
class MemberNameInfoListIterator : public QListIterator<MemberNameInfo>
......
......@@ -63,10 +63,10 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{
QCString pageTitle=name()+" Namespace Reference";
startFile(ol,fileName,pageTitle);
startTitle(ol);
startTitle(ol,getOutputFileBase());
//ol.docify(pageTitle);
parseText(ol,theTranslator->trNamespaceReference(name()));
endTitle(ol,name());
endTitle(ol,getOutputFileBase(),name());
if (Config::genTagFile.length()>0) tagFile << "%" << name() << ":\n";
......@@ -94,7 +94,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
bool found=FALSE;
while (cd)
{
if (cd->isLinkable())
if (cd->name().find('@')==-1)
{
if (!found)
{
......@@ -120,7 +120,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
}
ol.writeString(" ");
ol.insertMemberAlign();
if (cd->hasDocumentation())
if (cd->isLinkable())
{
ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(),
......
......@@ -76,6 +76,7 @@ class NamespaceDef : public Definition
class NamespaceList : public QList<NamespaceDef>
{
public:
~NamespaceList() {}
int compareItems(GCI item1,GCI item2)
{
return strcmp(((NamespaceDef *)item1)->name(),
......@@ -95,6 +96,7 @@ class NamespaceDict : public QDict<NamespaceDef>
{
public:
NamespaceDict(int size) : QDict<NamespaceDef>(size) {}
~NamespaceDict() {}
};
#endif
......@@ -53,8 +53,8 @@ class OutputGenerator
virtual void startProjectNumber() = 0;
virtual void endProjectNumber() = 0;
virtual void writeStyleInfo(int part) = 0;
virtual void startTitleHead() = 0;
virtual void endTitleHead(const char *name) = 0;
virtual void startTitleHead(const char *) = 0;
virtual void endTitleHead(const char *fileName,const char *name) = 0;
virtual void startTitle() = 0;
virtual void endTitle() = 0;
virtual void newParagraph() = 0;
......@@ -67,8 +67,8 @@ class OutputGenerator
virtual void endEnumList() = 0;
virtual void startBold() = 0;
virtual void endBold() = 0;
virtual void startAlfabeticalIndexList() = 0;
virtual void endAlfabeticalIndexList() = 0;
virtual void startAlphabeticalIndexList() = 0;
virtual void endAlphabeticalIndexList() = 0;
virtual void writeIndexHeading(const char *s) = 0;
virtual void writeIndexItem(const char *ref,const char *file,
const char *text) = 0;
......@@ -109,11 +109,14 @@ class OutputGenerator
virtual void startEmphasis() = 0;
virtual void endEmphasis() = 0;
virtual void writeChar(char c) = 0;
virtual void startMemberDoc(const char *,const char *,const char *) = 0;
virtual void startMemberDoc(const char *,const char *,
const char *,const char *) = 0;
virtual void endMemberDoc() = 0;
virtual void writeDoxyAnchor(const char *clName,const char *anchor,const char *name) = 0;
virtual void startDoxyAnchor(const char *fileName,const char *clName,
const char *anchor,const char *name) = 0;
virtual void endDoxyAnchor() = 0;
virtual void writeLatexSpacing() = 0;
virtual void writeLatexLabel(const char *clName,const char *anchor) = 0;
//virtual void writeLatexLabel(const char *clName,const char *anchor) = 0;
virtual void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name) = 0;
virtual void writeEndAnnoItem(const char *name) = 0;
......@@ -166,11 +169,13 @@ class OutputGenerator
virtual void endClassDiagram(ClassDiagram &,const char *,const char *) = 0;
virtual void startColorFont(uchar r,uchar g,uchar b) = 0;
virtual void endColorFont() = 0;
virtual void writePageRef(const char *,const char *) = 0;
virtual void startPageRef() = 0;
virtual void endPageRef(const char *,const char *) = 0;
virtual void startQuickIndexItem(const char *s,const char *l) = 0;
virtual void endQuickIndexItem() = 0;
virtual void writeFormula(const char *,const char *) = 0;
virtual void writeNonBreakableSpace() = 0;
virtual void writeImage(const char *,const char *,const char *) = 0;
void clear() { b.close(); a.resize(0); b.setBuffer(a);
b.open(IO_WriteOnly); t.setDevice(&b); }
......
......@@ -226,12 +226,14 @@ void OutputList::forall(void (OutputGenerator::*func)(a1,a2,a3,a4),a1,a2,a3,a4)
FORALL1(const char *a1,a1)
FORALL1(char a1,a1)
FORALL1(int a1,a1)
#if defined(HAS_BOOL_TYPE)
FORALL1(bool a1,a1)
FORALL1(IndexSections a1,a1)
FORALL2(const char *a1,const char *a2,a1,a2)
FORALL2(int a1,bool a2,a1,a2)
FORALL2(bool a1,int a2,a1,a2)
FORALL2(bool a1,bool a2,a1,a2)
#endif
FORALL2(int a1,bool a2,a1,a2)
FORALL1(IndexSections a1,a1)
FORALL2(const char *a1,const char *a2,a1,a2)
FORALL3(ClassDiagram &a1,const char *a2,const char *a3,a1,a2,a3)
FORALL3(const char *a1,const char *a2,const char *a3,a1,a2,a3)
FORALL3(const char *a1,const char *a2,bool a3,a1,a2,a3)
......
......@@ -72,10 +72,10 @@ class OutputList
{ forall(&OutputGenerator::endFile); }
void endPlainFile()
{ forall(&OutputGenerator::endPlainFile); }
void startTitleHead()
{ forall(&OutputGenerator::startTitleHead); }
void endTitleHead(const char *name)
{ forall(&OutputGenerator::endTitleHead,name); }
void startTitleHead(const char *fileName)
{ forall(&OutputGenerator::startTitleHead,fileName); }
void endTitleHead(const char *fileName,const char *name)
{ forall(&OutputGenerator::endTitleHead,fileName,name); }
void startTitle()
{ forall(&OutputGenerator::startTitle); }
void endTitle()
......@@ -96,10 +96,10 @@ class OutputList
{ forall(&OutputGenerator::startEnumList); }
void endEnumList()
{ forall(&OutputGenerator::endEnumList); }
void startAlfabeticalIndexList()
{ forall(&OutputGenerator::startAlfabeticalIndexList); }
void endAlfabeticalIndexList()
{ forall(&OutputGenerator::endAlfabeticalIndexList); }
void startAlphabeticalIndexList()
{ forall(&OutputGenerator::startAlphabeticalIndexList); }
void endAlphabeticalIndexList()
{ forall(&OutputGenerator::endAlphabeticalIndexList); }
void writeIndexHeading(const char *s)
{ forall(&OutputGenerator::writeIndexHeading,s); }
void writeIndexItem(const char *ref,const char *file,const char *text)
......@@ -177,16 +177,20 @@ class OutputList
{ forall(&OutputGenerator::endEmphasis); }
void writeChar(char c)
{ forall(&OutputGenerator::writeChar,c); }
void startMemberDoc(const char *clName,const char *memName,const char *anchor)
{ forall(&OutputGenerator::startMemberDoc,clName,memName,anchor); }
void startMemberDoc(const char *clName,const char *memName,
const char *anchor,const char *title)
{ forall(&OutputGenerator::startMemberDoc,clName,memName,anchor,title); }
void endMemberDoc()
{ forall(&OutputGenerator::endMemberDoc); }
void writeDoxyAnchor(const char *clName,const char *anchor,const char *name)
{ forall(&OutputGenerator::writeDoxyAnchor,clName,anchor,name); }
void startDoxyAnchor(const char *fn, const char *cn,
const char *anchor,const char *name)
{ forall(&OutputGenerator::startDoxyAnchor,fn,cn,anchor,name); }
void endDoxyAnchor()
{ forall(&OutputGenerator::endDoxyAnchor); }
void writeLatexSpacing()
{ forall(&OutputGenerator::writeLatexSpacing); }
void writeLatexLabel(const char *scope,const char *anchor)
{ forall(&OutputGenerator::writeLatexLabel,scope,anchor); }
//void writeLatexLabel(const char *scope,const char *anchor)
//{ forall(&OutputGenerator::writeLatexLabel,scope,anchor); }
void startDescription()
{ forall(&OutputGenerator::startDescription); }
void endDescription()
......@@ -289,8 +293,10 @@ class OutputList
{ forall(&OutputGenerator::startColorFont,r,g,b); }
void endColorFont()
{ forall(&OutputGenerator::endColorFont); }
void writePageRef(const char *c,const char *a)
{ forall(&OutputGenerator::writePageRef,c,a); }
void startPageRef()
{ forall(&OutputGenerator::startPageRef); }
void endPageRef(const char *c,const char *a)
{ forall(&OutputGenerator::endPageRef,c,a); }
void startQuickIndexItem(const char *s,const char *l)
{ forall(&OutputGenerator::startQuickIndexItem,s,l); }
void endQuickIndexItem()
......@@ -299,6 +305,8 @@ class OutputList
{ forall(&OutputGenerator::writeFormula,n,t); }
void writeNonBreakableSpace()
{ forall(&OutputGenerator::writeNonBreakableSpace); }
void writeImage(const char *n,const char *w,const char *h)
{ forall(&OutputGenerator::writeImage,n,w,h); }
private:
void debug();
......@@ -307,13 +315,15 @@ class OutputList
void forall(void (OutputGenerator::*func)());
FORALLPROTO1(const char *);
FORALLPROTO1(char);
FORALLPROTO1(IndexSections);
FORALLPROTO1(int);
#if defined(HAS_BOOL_TYPE)
FORALLPROTO1(bool);
FORALLPROTO1(IndexSections);
FORALLPROTO2(const char *,const char *);
FORALLPROTO2(int,bool);
FORALLPROTO2(bool,int);
FORALLPROTO2(bool,bool);
#endif
FORALLPROTO2(int,bool);
FORALLPROTO2(const char *,const char *);
FORALLPROTO3(const char *,const char *,bool);
FORALLPROTO3(uchar,uchar,uchar);
FORALLPROTO3(const char *,const char *,const char *);
......
......@@ -1155,7 +1155,7 @@ BN [ \t\r\n]
ifcount++;
//printf("#if... depth=%d\n",ifcount);
}
<SkipCommand>"else"/[^a-z_A-Z0-9] {
<SkipCommand>"else" {
//printf("Else! ifcount=%d otherCaseDone=%d\n",ifcount,otherCaseDone());
if (ifcount==0 && !otherCaseDone())
{
......@@ -1179,7 +1179,7 @@ BN [ \t\r\n]
}
}
}
<SkipCommand>"endif"/[^a-z_A-Z0-9] {
<SkipCommand>"endif" {
decrLevel();
if (--ifcount<0)
{
......
This diff is collapsed.
......@@ -44,6 +44,7 @@ class SectionDict : public QDict<SectionInfo>
{
public:
SectionDict(int size) : QDict<SectionInfo>(size) {}
~SectionDict() {}
};
#endif
......@@ -63,7 +63,7 @@ static void addClass(const char *name,const char *fileName)
static void addFile(const char *name)
{
//printf("adding file %s\n",name);
//printf("adding file %s tagName=`%s'\n",name,tagName.data());
fd = new FileDef(0,name,tagName);
FileName *mn;
if ((mn=inputNameDict[name]))
......
......@@ -687,7 +687,7 @@ class Translator
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interface"; break;
}
result+="was generated from the following file";
result+=" was generated from the following file";
if (single) result+=":"; else result+="s:";
return result;
}
......@@ -696,9 +696,26 @@ class Translator
* list.
*/
virtual QCString trAlphabeticalList()
{
return "Alphabetical List";
}
{ return "Alphabetical List"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
virtual QCString trReturnValues()
{ return "Return values"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual QCString trMainPage()
{ return "Main Page"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual QCString trPageAbbreviation()
{ return "p."; }
};
......
......@@ -16,7 +16,7 @@
/**
* translator_es.h modifief by Francisco Oltra
* translator_es.h modified by Francisco Oltra
* Some notes:
* - Computer related use of the spanish language differs from
* country to country, so some words might not sound so good
......
This diff is collapsed.
......@@ -6,6 +6,9 @@
*
* Initial Italian Translation by Ahmed Aldo Faisal
* Revised and completed by Alessandro Falappa (June 1999)
* Updates:
* 1999/09/10: corrected some small typos in the "new since 0.49-990425" section
* added the "new since 0.49-990728" section
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
......@@ -293,15 +296,15 @@ class TranslatorItalian : public Translator
QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType)
{
QCString result="Riferimenti per la";
QCString result="Riferimenti per ";
switch(compType)
{
case ClassDef::Class: result+=" classe"; break;
case ClassDef::Struct: result+=" struct"; break;
case ClassDef::Union: result+=" union"; break;
case ClassDef::Interface: result+=" interface"; break;
case ClassDef::Class: result+="la classe "; break;
case ClassDef::Struct: result+="la struct "; break;
case ClassDef::Union: result+="la union "; break;
case ClassDef::Interface: result+="l'interfaccia "; break;
}
result+=" "+(QCString)clName;
result+=(QCString)clName;
return result;
}
QCString trFileReference(const char *fileName)
......@@ -375,6 +378,40 @@ class TranslatorItalian : public Translator
{ return "Indice dei namespaces"; }
QCString trNamespaceDocumentation()
{ return "Documentazione dei namespaces"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString result=(QCString)"La documentazione per questa ";
switch(compType)
{
case ClassDef::Class: result+="classe"; break;
case ClassDef::Struct: result+="struct"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interfaccia"; break;
}
result+=" stata generata a partire ";
if (single) result+="dal seguente file:";
else result+="dai seguenti files:";
return result;
}
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual QCString trAlphabeticalList()
{
return "Lista in ordine alfabetico";
}
};
#endif
......@@ -384,6 +384,55 @@ class TranslatorDutch : public Translator
// This is used in LaTeX as the title of the chapter containing
// the documentation of all namespaces.
{ return "Namespace Documentatie"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString result=(QCString)"De documentatie voor deze ";
switch(compType)
{
case ClassDef::Class: result+="class"; break;
case ClassDef::Struct: result+="struct"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interface"; break;
}
result+=" is gegenereerd op grond van de volgende file";
if (single) result+=":"; else result+="s:";
return result;
}
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual QCString trAlphabeticalList()
{ return "Alphabetical List"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
virtual QCString trReturnValues()
{ return "Retour waarden"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual QCString trMainPage()
{ return "Hoofd Pagina"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual QCString trPageAbbreviation()
{ return "p."; }
};
#endif
......@@ -47,10 +47,15 @@ Uppdateringar.
===================================================================================
Problem!
Namespace och slot: har de nn hygglig svensk versttning???
Slot: nn hygglig svensk versttning???
Skicka grna synpunkter.
===================================================================================
1999/09/01
* Det verkar som om "namnrymd" r en hyggligt vedertagen svensk versttning
av "namnepace", s jag kr med det frn och med nu.
* "interface" heter numera "grnssnitt"
*/
#ifndef TRANSLATOR_SE_H
......@@ -349,13 +354,13 @@ class TranslatorSwedish : public Translator
// new since 0.49-990307
virtual QCString trNamespaceList()
{ return "Namespacelista"; }
{ return "Namnrymdlista"; }
virtual QCString trNamespaceListDescription(bool extractAll)
{
QCString result="Hr r en lista ver alla ";
if (!extractAll) result+="dokumenterade ";
result+="namespaces med en kort frklaring:";
result+="namnrymder med en kort frklaring:";
return result;
}
......@@ -379,10 +384,10 @@ class TranslatorSwedish : public Translator
QCString result=(QCString)clName+" ";
switch(compType)
{
case ClassDef::Class: result+=" Klass"; break;
case ClassDef::Struct: result+=" Strukt"; break;
case ClassDef::Union: result+=" Union"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Class: result+=" klass"; break;
case ClassDef::Struct: result+=" strukt"; break;
case ClassDef::Union: result+=" union"; break;
case ClassDef::Interface: result+=" grnssnitt"; break;
}
result+="referens";
return result;
......@@ -398,7 +403,7 @@ class TranslatorSwedish : public Translator
virtual QCString trNamespaceReference(const char *namespaceName)
{
QCString result=namespaceName;
result+=" namespacereferens";
result+=" namnrymdreferens";
return result;
}
......@@ -474,25 +479,65 @@ class TranslatorSwedish : public Translator
}
virtual QCString trNamespaceMembers()
{ return "Namespacemedlemmar"; }
{ return "Namnrymdsmedlemmar"; }
virtual QCString trNamespaceMemberDescription(bool extractAll)
{
QCString result="Hr r en lista ver alla ";
if (!extractAll) result+="dokumenterade ";
result+="namespacemedlemmar med lnkar till ";
result+="namnrymdsmedlemmar med lnkar till ";
if (extractAll)
result+=" namespace-dokumentationen fr varje medlem:";
result+=" namnrymd-dokumentationen fr varje medlem:";
else
result+="de namespaces de tillhr:";
result+="de namnrymder de tillhr:";
return result;
}
virtual QCString trNamespaceIndex()
{ return "Namespaceindex"; }
{ return "Namnrymdsindex"; }
virtual QCString trNamespaceDocumentation()
{ return "Namnrymd-dokumentation"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
//////////////////////////////////////////////////////////////////////////
/*! This is used in the documentation before the list of all
* namespaces in a file.
*/
virtual QCString trNamespaces()
{ return "Namnrymder"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString result=(QCString)"Dokumentationen fr ";
switch(compType)
{
case ClassDef::Class: result+="denna klass "; break;
case ClassDef::Struct: result+="denna strukt "; break;
case ClassDef::Union: result+="denna union "; break;
case ClassDef::Interface: result+="detta grnssnitt "; break;
}
result+="var genererad frn fljande fil";
if (single) result+=":"; else result+="er:";
return result;
}
{ return "Namespace-dokumentation"; }
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual QCString trAlphabeticalList()
{
return "Alfabetisk lista";
}
};
#endif
......@@ -39,18 +39,52 @@ bool isId(char c)
return c=='_' || isalnum(c);
}
// strip annonymous part of the scope
QCString stripAnnonymousScope(const QCString &s)
// strip annonymous left hand side part of the scope
//QCString stripAnnonymousScope(const QCString &s)
//{
// QCString result=s;
// int i=0;
// while (!result.isEmpty() && result.at(0)=='@' && (i=result.find("::"))!=-1)
// {
// result=result.right(result.length()-i-2);
// }
// //if (result.at(0)=='@')
// //{
// // result.resize(0);
// //}
// return result;
//}
// strip annonymous left hand side part of the scope
QCString stripAnnonymousNamespaceScope(const QCString &s)
{
QCString result=s;
int i=0;
while (!result.isEmpty() && result.at(0)=='@' && (i=result.find("::"))!=-1)
int oi=0,i=0,p=0;
if (s.isEmpty()) return s;
while (s.at(p)=='@' && (i=s.find("::",p))!=-1 &&
namespaceDict[s.left(i)]!=0) { oi=i; p=i+2; }
if (oi==0)
{
result=result.right(result.length()-i-2);
//printf("stripAnnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.data());
return s;
}
else
{
//printf("stripAnnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.right(s.length()-oi-2).data());
return s.right(s.length()-oi-2);
}
return result;
}
void writePageRef(OutputList &ol,const char *cn,const char *mn)
{
bool htmlOn = ol.isEnabled(OutputGenerator::Html);
bool manOn = ol.isEnabled(OutputGenerator::Man);
ol.startPageRef();
ol.disableAllBut(OutputGenerator::Latex);
ol.docify(theTranslator->trPageAbbreviation());
ol.endPageRef(cn,mn);
if (htmlOn) ol.enable(OutputGenerator::Html);
if (manOn) ol.enable(OutputGenerator::Man);
}
QCString generateMarker(int id)
{
......@@ -159,8 +193,6 @@ QCString removeRedundantWhiteSpace(const QCString &s)
return result;
}
bool rightScopeMatch(const QCString &scope, const QCString &name)
{
return (name==scope || // equal
......@@ -244,12 +276,14 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char *
}
} while (!found && scopeOffset>=0);
//if (!found) printf("Trying to link %s in %s\n",word.data(),scName);
if (!found &&
getDefs(scName,word,0,md,cd,fd,nd) &&
(md->isTypedef() || md->isEnumerate()) &&
(md->isTypedef() || md->isEnumerate() || md->isReference()) &&
md->isLinkable()
)
{
//printf("Found ref\n");
Definition *d=0;
if (cd) d=cd; else if (nd) d=nd; else d=fd;
if (d && d->isLinkable())
......@@ -369,17 +403,17 @@ QCString tempArgListToString(ArgumentList *al)
static bool manIsEnabled;
void startTitle(OutputList &ol)
void startTitle(OutputList &ol,const char *fileName)
{
ol.startTitleHead();
ol.startTitleHead(fileName);
manIsEnabled=ol.isEnabled(OutputGenerator::Man);
if (manIsEnabled) ol.disable(OutputGenerator::Man);
}
void endTitle(OutputList &ol,const char *name)
void endTitle(OutputList &ol,const char *fileName,const char *name)
{
if (manIsEnabled) ol.enable(OutputGenerator::Man);
ol.endTitleHead(name);
ol.endTitleHead(fileName,name);
}
void writeQuickLinks(OutputList &ol,bool compact,bool ext)
......@@ -391,6 +425,12 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext)
if (manEnabled) ol.disable(OutputGenerator::Man);
if (texEnabled) ol.disable(OutputGenerator::Latex);
if (compact) ol.startCenter(); else ol.startItemList();
if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"index.html");
parseText(ol,theTranslator->trMainPage());
ol.endQuickIndexItem();
if (documentedGroups>0)
{
if (!compact) ol.writeListItem();
......@@ -1428,15 +1468,19 @@ void generateRef(OutputList &ol,const char *scName,
{
ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(),0,linkText);
if (!cd->isReference())
ol.writePageRef(cd->name(),0);
if (!cd->isReference() && !Config::pdfHyperFlag)
{
writePageRef(ol,cd->name(),0);
}
}
else // scope matches that of a namespace
{
ol.writeObjectLink(nd->getReference(),
nd->getOutputFileBase(),0,linkText);
if (!nd->getReference())
ol.writePageRef(nd->name(),0);
if (!nd->getReference() && !Config::pdfHyperFlag)
{
writePageRef(ol,nd->name(),0);
}
}
// link has been written, stop now.
return;
......@@ -1532,15 +1576,15 @@ void generateRef(OutputList &ol,const char *scName,
}
// generate the page reference (for LaTeX)
if (cName.length()>0 || aName.length()>0)
if (!Config::pdfHyperFlag && (cName.length()>0 || aName.length()>0))
{
if (
(cd && cd->isLinkableInProject()) ||
(fd && !fd->isReference()) ||
(nd /* TODO: && !nd->isReference() */)
(nd && !nd->isReference())
)
{
ol.writePageRef(cName,aName);
writePageRef(ol,cName,aName);
}
}
return;
......
......@@ -72,8 +72,8 @@ extern int guessSection(const char *name);
//extern QCString nameToFile(const char *name);
extern bool isId(char c);
extern QCString removeRedundantWhiteSpace(const QCString &s);
extern void startTitle(OutputList &ol);
extern void endTitle(OutputList &ol,const char *name);
extern void startTitle(OutputList &ol,const char *fileName);
extern void endTitle(OutputList &ol,const char *fileName,const char *name);
void startFile(OutputList &ol,const char *name,
const char *title,bool external=FALSE);
void endFile(OutputList &ol,bool external=FALSE);
......@@ -84,6 +84,7 @@ QCString generateMarker(int id);
void writeExample(OutputList &ol,ExampleList *el);
void setFileNameForSections(QList<QCString> *anchorList,const char *fileName);
QCString stripAnnonymousScope(const QCString &s);
QCString stripAnnonymousNamespaceScope(const QCString &s);
//void writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd,
......@@ -92,5 +93,6 @@ QCString stripAnnonymousScope(const QCString &s);
QCString stripFromPath(const QCString &path);
bool rightScopeMatch(const QCString &scope, const QCString &name);
bool leftScopeMatch(const QCString &scope, const QCString &name);
void writePageRef(OutputList &ol,const char *cn,const char *mn);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment