Commit 322885a8 authored by Dimitri van Heesch's avatar Dimitri van Heesch

initial version

parent 361bf791
DOXYGEN Version 0.49-990425
INSTALLATION INSTRUCTIONS FOR UNIX:
-----------------------------------
1. Unpack the archive, unless you already have:
gunzip doxygen-0.49-990425.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-990425.src.tar # unpack it
2. Make sure Qt is installed properly (check the environment variable $QTDIR)
Note: on some systems (like FreeBSD) it is possible that qt is not
installed in one single directory. In this case I suggest to create a
local qt directory to which the QTDIR variable should point. Then
create two links in that directory like this:
ln -s <location_of_the_qt_includes> include
ln -s <location_of_the_qt_libs> lib
3. Look at the first two entries of Makefile.config and modify them if needed.
Note: Doxygen requires GNU make to build. On some systems this is
known as gmake. If you have such a system, you must edit Makefile.config
and replace make by gmake in rest of this document.
4. Compile the program.
Type:
make
You'll see a list of all supported platforms/compiler combinations.
To build for the Linux platform with g++ as the compiler for example, type:
make linux-g++
The program should compile without problems and three binaries (doxygen,
doxytag, and doxysearch) should be available in the bin directory of the
distribution.
5. Generate the user manual.
type:
make docs
to let doxygen generate the HTML and LaTeX documentation.
(you will need the stream editor `sed' for this)
type:
make ps
to generate a postscript version of the manual.
(you will need latex and dvips for this)
The html directory of the distribution will now contain the html
documentation (just point a HTML browser to the file index.html in the
html directory).
The postscript manual doxygen_manual.ps will be located in the latex
directory of the distribution. Just send it to a postscript printer to
print it or use ghostview to view it.
INSTALLATION INSTRUCTIONS FOR WINDOWS:
--------------------------------------
Currently, only Microsoft Visual C++ version 5.0 is supported. For other
platforms you may need to edit the Makefiles a bit. Let me know what you
had to change if you got Doxygen working with another windows compiler.
You will need to install the windows/dos versions of following tools:
- Perl 5.0+
- flex (you can use the DJGPP version)
- bison (you can use the DJGPP version, but you need to copy
lib\bison.sim to c:\djgpp\lib\bison.simple and
lib\bison.hai to c:\djgpp\lib\bison.hairy.
The paths seem to be hardcoded in the executable)
- Qt (Hint: only the tools section is required, so you can use the free
X-windows version as well!)
- Microsoft Visual C++ version 5.0, use the vcvars32.bat to set the environment
variables.
Make sure all tools are accessible from the command-line.
Open a dos box, 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).
To build the examples type:
nmake -f Makefile.windows examples
-----------------------------------------------------------------------------
KNOWN CONFIGURATION PROBLEMS
LATEX RELATED PROBLEMS:
- the LaTeX translation of HTML tables doesn't seem to work for all
compilers. It is known to work for teTeX (versions 0.4 and 0.9)
- the file a4wide.sty is not available for all distributions. If
your distribution does not have it please select another paper type
in the config file (see PAPER_TYPE)
- the file fancyheader.sty is known as fancyhdr.sty on some systems.
Please change that in src/latexgen.cpp
HP-UX PROBLEMS:
- If you are compiling for HP-UX with aCC and you get this error:
/opt/aCC/lbin/ld: Unsatisfied symbols:
alloca (code)
then you should edit ce_parse.cpp and replace
extern "C" {
void *alloca (unsigned int);
};
with
#include <alloca.h>
This seems to be a problem with bison, but I don't know how to fix it.
-----------------------------------------------------------------------------
That's it!
Please report any problems to dimitri@stack.nl
The latest version of doxygen can be obtained at
http://www.stack.nl/~dimitri/doxygen
Enjoy,
Dimitri van Heesch (25 April 1999)
This short howto explains how to add support for a new language to Doxygen:
Just follow these steps:
1) Tell me for which language you want to add support. If no one else
is already working on support for that language, you will be
assigned as the maintainer for the language. I'll create a
list on Doxygen's homepage, so everyone knows who is doing what.
2) Create a copy of translator_nl.h and name it
translator_<your_2_letter_counter_code>.h
I'll use xx in the rest of this document.
3) Edit language.cpp:
- Add a #include<translator_xx.h>
- in setTranslator() add
else if (L_EQUAL("your_language_name"))
{
theTranslator = new TranslatorYourlanguage;
}
after the if { ... }
4) Edit doxygen.pro and add translator_xx.h to the HEADERS line in the
file doxygen.pro.
5) Edit translator_xx.h:
- Rename TRANSLATOR_NL_H to TRANSLATOR_XX_H twice.
- Rename TranslatorDutch to TranslatorYourlanguage
- In the member latexBabelPackage() change "dutch" into the name of the
latex package that adds support for your language.
- Edit all the strings that are returned by the members that start
with tr.
Look at the corresponding member in translator.h for the english text
that is returned and translate that into your language.
Try to match punctuation and capitals!
To enter special characters (with accents) you can:
a) Enter them directly if your keyboard supports that and you are
using a Latin-1 font.
Doxygen will translate the characters to proper Latex and
leave the Html and man output for what it is.
b) Use html codes like &auml; for an a with an umlaut.
See the HTML specification for the codes.
6) Recompile everything (do this from the root of the distribution,
because the Makefile.dox* have to be regenerated!)
7) Now you can use OUTPUT_LANGUAGE = your_language_name
in the config file to generate output in your language.
8) Send translator_xx.h or a diff -u of the changes to me so I can add it
to doxygen.
Good luck, and let me know if there are problems.
# this Makefile need GNU make
include Makefile.config
variables: Makefile
@echo
@echo "Select one of the following targets:"
@echo
@echo "aix-g++ aix-xlc "
@echo "dgux-g++ freebsd-g++ "
@echo "gnu-g++ hpux-acc "
@echo "hpux-cc hpux-g++ "
@echo "irix-64 irix-dcc "
@echo "irix-g++ irix-n32 "
@echo "linux-g++ netbsd-g++ "
@echo "openbsd-g++ osf1-cxx "
@echo "osf1-g++ qnx-g++ "
@echo "sco-g++ solaris-cc "
@echo "solaris-g++ sunos-g++ "
@echo "ultrix-g++ unixware-g++ "
@echo
@echo "Make any of them to build Doxygen."
@echo "Make will now abort with an error."
@exit 1
aix-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/aix-g++ \
$(MAKE)
aix-xlc: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/aix-xlc \
$(MAKE)
dgux-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/dgux-g++ \
$(MAKE)
freebsd-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/freebsd-g++ \
$(MAKE)
hpux-acc: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/hpux-acc \
$(MAKE)
hpux-cc: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/hpux-cc \
$(MAKE)
hpux-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/hpux-g++ \
$(MAKE)
irix-64: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/irix-64 \
$(MAKE)
irix-dcc: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/irix-dcc \
$(MAKE)
irix-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/irix-g++ \
$(MAKE)
irix-n32: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/irix-n32 \
$(MAKE)
linux-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/linux-g++ \
$(MAKE)
netbsd-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/netbsd-g++ \
$(MAKE)
openbsd-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/openbsd-g++ \
$(MAKE)
osf1-cxx: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/osf1-cxx \
$(MAKE)
osf1-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/osf1-g++ \
$(MAKE)
qnx-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/qnx-g++ \
$(MAKE)
sco-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/sco-g++ \
$(MAKE)
solaris-cc: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/solaris-cc \
$(MAKE)
solaris-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/solaris-g++ \
$(MAKE)
sunos-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/sunos-g++ \
$(MAKE)
ultrix-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/ultrix-g++ \
$(MAKE)
unixware-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/unixware-g++ \
$(MAKE)
clean: FORCE
cd examples ; $(MAKE) clean
cd doc ; $(MAKE) clean
-rm -f src/scanner.cpp \
src/code.cpp \
src/config.cpp \
src/pre.cpp \
src/tag.cpp \
src/ce_lex.cpp \
src/ce_parse.cpp \
src/ce_parse.h \
src/doxytag.cpp \
src/declinfo.cpp \
src/defargs.cpp \
src/Makefile.doxygen \
src/Makefile.doxytag \
src/Makefile.doxysearch \
src/version.cpp
-rm -f bin/doxy*
-rm -f objects/*.o
docs: FORCE
cd examples ; $(MAKE)
cd doc ; $(MAKE)
ps: docs
cd latex ; $(MAKE)
archive: clean
$(TAR) zcvf backup/dx`date +%y%m%d`.tgz tmake doc examples bin objects \
src Makefile Makefile.windows INSTALL make.bat Makefile.config \
LANGUAGE.HOWTO
src/version.cpp: FORCE
echo "char versionString[]=\"$(VERSION)\";" > src/version.cpp
FORCE:
# name (and path if needed) of the make tool to use
# note that make must really be GNU make, not BSD or some other make
MAKE = make
# name (and path if needed) of the perl interpreter
# note that it must be version 5 or higher (check with perl -v)
PERL = perl
# The values below should probably be left unmodified
TAR = tar # name of the GNU tar tool
TMAKE = ../tmake/bin/tmake
VERSION = 0.49-990425
# Makefile for Microsoft Visual C++
include Makefile.config
MAKE = nmake /NOLOGO
TMAKE = ..\tmake\bin\tmake
all:
@echo "
@echo " Select one of the following targets: "
@echo " "
@echo " win32-msvc "
@echo " "
@echo " Make any of them to build Doxygen. "
@echo " Make will now abort with an error. "
@exit 1
win32-msvc: src\version.cpp
cd src
$(MAKE) tmake TMAKE=$(TMAKE) PERL=$(PERL)
$(MAKE) MAKE=$(MAKE)
clean: FORCE
cd examples
$(MAKE) -f Makefile.windows clean
cd ..
-del src\scanner.cpp
-del src\code.cpp
-del src\config.cpp
-del src\pre.cpp
-del src\tag.cpp
-del src\constexp.lex.cpp
-del src\constexp.parse.cpp
-del src\constexp.parse.h
-del src\doxytag.cpp
-del src\declinfo.cpp
-del src\defargs.cpp
-del src\Makefile.doxygen
-del src\Makefile.doxytag
-del src\Makefile.doxysearch
-del src\version.cpp
-del bin\doxy*.*
-del objects\*.obj
examples: FORCE
cd examples
$(MAKE) -f Makefile.windows
cd ..
docs: examples
@echo Docs cannot be made using windows yet.
@echo Get them from the binary distribution...
src\version.cpp:
echo char versionString[]="$(VERSION)"; >src\version.cpp
FORCE:
DOXYGEN Version 0.49-990425
Please read INSTALL for compilation instructions.
The latest version of doxygen can be obtained at
http://www.stack.nl/~dimitri/doxygen
Enjoy,
Dimitri van Heesch (25 April 1999)
PROJECT_NAME =
OUTPUT_DIRECTORY = ..
HTML_HEADER =
HTML_FOOTER =
QUIET = NO
WARNINGS = YES
DISABLE_INDEX = YES
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
GENERATE_LATEX = YES
GENERATE_HTML = YES
ENABLE_PREPROCESSING = NO
INPUT = index.doc install.doc starting.doc trouble.doc \
history.doc features.doc \
doxygen_usage.doc doxytag_usage.doc doxysearch_usage.doc \
installdox_usage.doc autolink.doc \
config.doc commands.doc htmlcmds.doc
FILE_PATTERNS = *.cpp *.h *.doc
EXAMPLE_PATH = ../examples
RECURSIVE = NO
TAGFILES =
ALLEXTERNALS = NO
PERL_PATH = /usr/local/bin/perl
SEARCHENGINE = NO
CGI_NAME = search.cgi
CGI_URL =
DOC_URL =
DOC_ABSPATH =
BIN_ABSPATH = /usr/local/bin/
EXT_DOC_PATHS =
include ../Makefile.config
DOXYDIR=../bin
DOXYGEN_DOCDIR=..
all: FORCE
DOXYGEN_DOCDIR=$(DOXYGEN_DOCDIR); \
export DOXYGEN_DOCDIR; \
VERSION=$(VERSION) ; \
export VERSION; \
$(DOXYDIR)/doxygen
@rm -f ../latex/refman.tex
@cp doxygen_logo*.gif ../html
@cp Makefile.latex ../latex/Makefile
@sed -e "s/\$$VERSION/$(VERSION)/g" doxygen_manual.tex >../latex/doxygen_manual.tex
@sed -e "s/\$$VERSION/$(VERSION)/g" doxygen.sty >../latex/doxygen.sty
@cp doxygen_logo.eps ../latex
clean:
rm -rf ../html ../latex
FORCE:
all: doxygen_manual.ps
doxygen_manual.ps: doxygen_manual.dvi
dvips -o doxygen_manual.ps doxygen_manual.dvi
doxygen_manual.dvi: doxygen_manual.tex doxygen.sty
echo "Running latex..."
latex doxygen_manual.tex
echo "Running makeindex..."
makeindex doxygen_manual.idx
echo "Rerunning latex...."
latex doxygen_manual.tex
clean:
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log
/******************************************************************************
*
* $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 autolink Automatic link generation
Most documentation systems have special `see also' sections where links
to other pieces of documentation can be inserted.
Although doxygen also has a command to start such a section (See section
\ref cmdsa), it does allow you to put these kind of links anywhere in the
documentation.
For \f$\mbox{\LaTeX}\f$ documentation a reference to the page number
is written instead of a link. Furthermore, the index at the end of the
document can be used to quickly find the documentation of a member, class,
namespace or file.
For man pages no reference information is generated.
The next sections show how to generate links to the various documented
entities in a source file.
\subsection linkclass Links to classes.
All words in the documentation that correspond to a documented class
will automatically be replaced by a link to the page containing the
documentation of the class. If you want to prevent that a word
that corresponds to a documented class is replaced by a link you
should put a \% in front of the word.
\subsection linkfile Links to files.
All words that contain a dot (<tt>.</tt>) that is not the last character
in the word are considered to be file names.
If the word is indeed the name of a documented input file, a link will
automatically be created to the documentation of that file.
\subsection linkfunc Links to functions.
Links to functions are created if one of the following patterns is
encountered:
<ol>
<li><tt>\<functionName\>"("\<argument-list\>")"</tt>
<li><tt>\<functionName\>"()"</tt>
<li><tt>"::"\<functionName\></tt>
<li><tt>(\<className\>"::")<sup>n</sup>\<functionName\>"("\<argument-list\>")"</tt>
<li><tt>(\<className\>"::")<sup>n</sup>\<functionName\>"()"</tt>
<li><tt>(\<className\>"::")<sup>n</sup>\<functionName\></tt>
</ol>
where n>0.
\par Notice 1:
The patterns above should not contain spaces, tabs or newlines.
\par Notice 2:
For JavaDoc compatibility a \c # may be used instead of a \c :: in
the patterns above.
For non overloaded members the argument list may be omitted.
If a function is overloaded and no matching argument list is specified
(i.e. pattern 2 or 5 is used), a link will be created to the
documentation of one of the overloaded members.
For member functions the class scope (as used in patterns 4 to 6) may
be omitted, if:
<ol>
<li>The pattern points to a documented member that belongs to the same class
as the documentation block that contains the pattern.
<li>The class that corresponds to the documentation blocks that contains
the pattern has a base class that contains a documented member
that matches the pattern.
</ol>
\subsection linkother Links to variables, typedefs, enum types, enum values and defines.
All of these entities can be linked to in the same way as described in the
previous section. For sake of clarity it is advised to only use
patterns 3 and 6 in this case.
\par Example:
\verbinclude autolink.cpp
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/autolink/html/index.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
\subsection resolving Resolving of defines and typedefs.
Macro definitions of the form:
\verbatim
#define TypeName ClassName
\endverbatim
will be resolved inside documentation blocks.
\par Example:
\verbinclude resdefine.cpp
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/resdefine/html/exportedname.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
Typedefs that involve classes, structs and unions, like
\verbatim
typedef struct StructName TypeName
\endverbatim
create an alias for StructName, so links will be generated to StructName,
when either StructName itself or TypeName is encountered.
\par Example:
\verbinclude restypedef.cpp
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/restypedef/html/restypedef.cpp.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
*/
This diff is collapsed.
This diff is collapsed.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{doxygen}
\RequirePackage{calc}
\RequirePackage{array}
\pagestyle{fancyplain}
\addtolength{\headwidth}{\marginparsep}
\addtolength{\headwidth}{\marginparwidth}
\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}}
\lhead[\fancyplain{}{\bfseries\thepage}]
{\fancyplain{}{\bfseries\rightmark}}
\rhead[\fancyplain{}{\bfseries\leftmark}]
{\fancyplain{}{\bfseries\thepage}}
\rfoot[\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-1998}]{}
\lfoot[]{\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-1998}}
\cfoot{}
\newenvironment{CompactList}
{\begin{list}{}{
\setlength{\leftmargin}{0.5cm}
\setlength{\itemsep}{0pt}
\setlength{\parsep}{0pt}
\setlength{\topsep}{0pt}
\renewcommand{\makelabel}{}}}
{\end{list}}
\newenvironment{CompactItemize}
{
\begin{itemize}
\setlength{\itemsep}{-4pt}
\setlength{\parsep}{0pt}
\setlength{\topsep}{0pt}
\setlength{\partopsep}{0pt}
}
{\end{itemize}}
\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}
\newlength{\tmplength}
\newenvironment{TabularC}[1]
{
\setlength{\tmplength}
{\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}
\par\begin{tabular*}{\linewidth}
{*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}
}
{\end{tabular*}\par}
\newcommand{\entrylabel}[1]{
{\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\\}}}
\newenvironment{Desc}
{\begin{list}{}
{
\settowidth{\labelwidth}{40pt}
\setlength{\leftmargin}{\labelwidth}
\setlength{\parsep}{0pt}
\setlength{\itemsep}{-4pt}
\renewcommand{\makelabel}{\entrylabel}
}
}
{\end{list}}
\setlength{\parindent}{0cm}
\setlength{\parskip}{0.2cm}
\sloppy
This diff is collapsed.
\documentclass[a4paper]{article}
\usepackage{a4wide}
\usepackage{makeidx}
\usepackage{fancyheadings}
\usepackage{epsf}
\usepackage{doxygen}
\usepackage{multicol}
\makeindex
\setcounter{tocdepth}{1}
\setlength{\footrulewidth}{0.4pt}
\begin{document}
\begin{titlepage}
\setlength{\epsfxsize}{\textwidth}
\epsffile{doxygen_logo.eps}
\begin{center}
Manual for version $VERSION\\[2ex]
Written by Dimitri van Heesch\\[2ex]
\copyright 1997-1998
\end{center}
\end{titlepage}
\clearemptydoublepage
\tableofcontents
\clearemptydoublepage
\pagenumbering{arabic}
\include{index}
\part{User Manual}
\input{install}
\input{starting}
\input{trouble}
\part{Reference Manual}
\input{features}
\input{history}
\input{doxygen_usage}
\input{doxytag_usage}
\input{doxysearch_usage}
\input{installdox_usage}
\input{autolink}
\input{config}
\input{commands}
\input{htmlcmds}
\printindex
\end{document}
/******************************************************************************
*
* $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 doxygen_usage Doxygen usage
Doxygen is a command line based utility. Calling \c doxygen with the
\c -h option at the command line will give you a brief description of the
usage of the program.
All options consist of a leading character <tt>-</tt>,
followed by one character and optionally an argument.
To generate a class browser you typically need to follow these steps:
<ol>
<li> You document your source code with
special documentation blocks.
<li> You generate a configuration file (see section \ref config) by
calling doxygen with the \c -g option:
\verbatim
doxygen -g <config_file>
\endverbatim
<li> You edit the configuration file so it matches your project.
In the configuration file you can specify the input files and
a lot of optional information.
<li> You let doxygen generate the documentation, based on the settings in the
configuration file:
\verbatim
doxygen <config_file>
\endverbatim
</ol>
If you also want a search engine to be generated, you should look
at section \ref doxysearch_usage.
*/
/******************************************************************************
*
* $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 doxysearch_usage Doxysearch usage
Doxysearch is a small, fast and highly portable search engine that allows
you to search for strings or words in the documentation generated by
<a href="doxygen_usage.html">doxygen</a> or
in the Qt documentation (see <a href="#searchqt">below</a>).
Doxysearch must be run as a CGI binary. This implies the following:
<ul>
<li> There must be a HTTP daemon running on the system where you want to
install the documentation (the <em>target</em>)
<li> You must have permission to install and execute a CGI binary on the
target.
</ul>
Ask you system administrator or provider if you are unsure if this is possible.
In order to be able to search fast and efficient, doxysearch does not
search the generated documentation directly. Instead, it uses an
<em>index file</em>, that should be generated with
<a href="doxytag_usage.html">doxytag</a>. The index file is extracted from
the generated HTML files and contains all words and substrings of words
present in the HTML files, in a compact form, together with their
frequencies and links. Although I tried to store all information
as compactly as possible, the size of the index is still quite large.
Usually it is about the same size as the original HTML files.
I have tried to make the search engine highly portable, because it
must run on the target system. As a result doxysearch does not require the
Qt library. All that is required to build doxysearch is a C++ compiler.
If you are using \c g++ for example, you can build the search engine manually,
by typing:
\verbatim
g++ doxysearch.cpp -o doxysearch
\endverbatim
<a name="se">
<h3>Generating the search engine</h3>
</a>
To include a search engine in the documentation generated by doxygen
follow these steps:
<ol>
<li>Generate a configuration file with
<a href="doxygen_usage.html">doxygen</a> using the
<code>-g</code> option, if you haven't done this already.
<li>Edit the search engine section (see section \ref config_search of
the configuration file).
Make sure the \c SEARCHENGINE tag is set to \c YES
and that all paths are correct.
<li>Use <a href="doxygen_usage.html">doxygen</a> to generate the
documentation. Apart from the documentation, Doxygen will create the
following files:
<ul>
<li>A small CGI script. the name of the script is determined by the
\c CGI_NAME tag in the configuration file.
The script is a small wrapper that calls \c doxysearch with
the correct parameters. Using this script allows multiple
search engines for different projects to be present in one directory.
<li>\c search.cfg: this file is a small configuration file
for the search engine. It contains two lines of text. The first line
should be the absolute URL to the documentation. The second line should
be the absolute URL to the CGI script. This information is taken from
the configuration file.
<li>\c search.gif: this is the image that is used for the search button.
</ul>
<li>Copy (or move) the CGI script to the directory where the CGI binaries
are located.
This is usually a special directory on your system or in your
home directory.
Consult the manual of your HTTP daemon or your system administrator to
find out, where this directory resides on your system.
<li>Goto the directory where the generated HTML files are located and run
doxytag as follows:
<pre>doxytag -s search.idx</pre>
This will create a search index with the name <code>search.idx</code>.
Currently the index file <em>must</em> be called like this.
<li>Run <a href="installdox_usage.html">installdox</a> to replace
any dummy links in the documentation with real links.
<b>Notice:</b> When using a search engine this step is <em>required</em>
even if no tag files are used. If tag files are used you must specify
the correct options.
</ol>
<a name="searchqt">
<h3>Creating a search engine to search in the Qt documentation</h3>
</a>
Using <code>doxytag</code> and <code>doxysearch</code> it is possible to create a search engine for
the Qt documentation, without needing the sources!
This can be done by carefully following these steps:
<ol>
<li>Goto the html directory of the Qt-distribution:
<pre>cd $QTDIR/html</pre>
<li>Generate the search index by typing:
<pre>doxytag -s search.idx *.html</pre>
This will parse all files and build a search index.
Apart from the file <code>search.idx</code> two other files
will be generated: <code>search.gif</code> and <code>search.cgi</code>
\par Notice:
Doxytag requires quite a large amount of memory to
generate the search index (about 30 Mb on my Linux box)!
The resulting index file requires about 3 Mb space on your disk.
<li>Edit the shell script <code>search.cgi</code> with a text editor.
Fill in the absolute path to the <code>doxysearch</code> binary after
the <code>DOXYSEARCH=</code> tag.
On my system this becomes:
<pre>DOXYSEARCH=/usr/local/bin/doxysearch</pre>
Fill in the absolute path to the qt documentation after the
<code>DOXYPATH=</code> tag.
On my system this becomes:
<pre>DOXYPATH=/usr/local/qt/html</pre>
<li>
CGI binaries are usually located in a special directory.
Consult the manual of your HTTP daemon or your system administrator to
find out, where this directory resides on your system.
Copy (or move) the <code>search.cgi</code> script to this directory.
If needed you may change the name of the script.
On my system, this becomes:
<pre>cp search.cgi /usr/local/lib/httpd/cgi-bin/</pre>
<li>Create a text-file with the name <code>search.cfg</code>.
On the first line, you must put the <em>absolute</em> URL to the Qt
documentation.
Since, I only use the search engine on my own standalone system, I use
the <code>file:</code> protocol.
On the second line, you must put the <em>absolute</em> URL to the
cgi script.
On my system the resulting file looks like this:
\verbatim
file:///usr/local/qt/html
http://blizzard/cgi-bin/search.cgi
\endverbatim
<li>Add a link to the search engine in the Qt documentation.
On my system, I have put a line
\verbatim
<li><a href="http://blizzard/cgi-bin/search.cgi">Search the documentation<a>
\endverbatim
in the additional information section of the <code>index.html</code> file.
<li>Start your favourite web browser and click on the link.
If everything is ok, you should get a page where you can enter
search terms.
</ol>
*/
/******************************************************************************
*
* $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 doxytag_usage Doxytag usage
Doxytag is a small command line based utility.
It has two functions:
<ul>
<li>
Doxytag can generate <em>tag files</em>.
These tag files can be used with <a href="doxygen_usage.html">doxygen</a>
to generate references to external documentation
(i.e. documentation not contained in the input files that are used by
doxygen).
A tag file contains information about files, classes and members
documented in external documentation. Doxytag extracts this information
directly from the HTML files. This has the advantage that you do not need
to have the sources from which the documentation was extracted.
If you do have the sources you can also let \c doxygen generate the
tag file by putting the name of the tag file after \c GENERATE_TAGFILE in
the configuration file.
<li>
Doxytag can generate a <em>search index</em> for the documentation
generated with doxygen or for the Qt documentation. See the documentation of
<a href="doxysearch_usage.html">doxysearch</a> for more information on how
to do this.
A search index contains information about all the words (and all substrings
thereof) that are contained in the documentation.
For each string the index contains the set of documentation blocks that
contain the string and the frequency of occurrence. This way
<code>doxysearch</code> can search for words very quickly
(most queries are processed within a few milliseconds on my system.)
</ul>
In both cases the input of doxytag consists of a set of HTML files.
\par Important:
If you use tag files or use a search engine, the links that
are generated by doxygen will contain \e dummy links. You have to run
the \c installdox script to change these dummy links into real links.
See \ref installdox_usage for more information.
The use of dummy links may seem redundant, but it is really useful,
if you want to move the external documentation to another location.
Then the documentation does not need to be regenerated by \c doxygen,
only \c installdox has to be run.
\par Notice:
Because the HTML files are expected to have a certain
structure, only HTML files generated with doxygen or with Qt's class
browser generator can be used. Doxytag only <em>reads</em> the HTML files,
they are not altered in any way.
Doxytag expects a list of all HTML files that form the documentation
or a directory that contains all HTML files. If neither is present doxytag
will read all files with a <tt>.html</tt> extension from the current directory.
If doxytag is used with the <code>-t</code> flag it generates a tag file.
\par Example 1:
Suppose the file \c example.cpp from the \c examples directory that is listed
below is included in some package for which you do not have the sources.
Fortunately, the distributor of the packages included the HTML documentation
that was generated by doxygen in the package.
\verbinclude example.cpp
Now you can create a tag file from the HTML files in the package by
typing:
\verbatim
doxytag -t example.tag example/html
\endverbatim
from the examples directory.
Finally you can use this tag file with your own piece of code, such
as done in the following example:
\verbinclude tag.cpp
Doxygen will now include links to the external package in your own
documentation. Because the tag file does not specify where the
documentation is located, you will have to specify that by running the
installdox script that doxygen generates
(See \ref installdox_usage for more information).
Notice that this is actually a feature because if you (or someone else)
moves the external documentation to a different
directory or URL you can simply run the script again and all links in
the HTML files will be updated.
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/tag/html/index.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen using
only the tag file and second piece of code.
\endhtmlonly
\par Example 2:
To generate a tag file of the Qt documentation you can do the following:
\verbatim
doxytag -t qt.tag $QTDIR/html
\endverbatim
A typical example to use doxytag to generate a search index is:
\verbatim
doxytag -s search.idx
\endverbatim
\par Notice:
In the current version of doxygen, the search index must be
called \c search.idx.
*/
/******************************************************************************
*
* $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 features.html
\section features Features
\addindex features
<UL>
<li>Requires very little overhead from the writer of the documentation.
Plain text will do, but for more fancy or structured output HTML tags
and/or some of doxygen's special commands can be used.
<li>Outputs documentation in on-line format (HTML and man page) and off-line
format (LaTeX) simulatiously (one can be disabled if desired).
Both formats are optimized for ease of reading.
<li>Allows documentation of files, classes, templates, variables, functions,
typedefs, enums and defines.
<li>Includes a full C preprocessor to allow proper parsing of conditional
code fragments and to allow expansion of all or part of the define macros.
<li>Automatically detects public, protected and private sections, as well as
the Qt specific signal and slots sections. Extraction of private class
members is optional.
<li>Automatically generates of class diagrams in HTML (as clickable
image maps) and Latex (as encapsulated postscript).
<li>JavaDoc (1.1) and Qt-Doc compatible.
<li>References to base/super classes and inherited/overridden members are
generated automatically.
<li>Includes a fast, rank based search engine to search for strings or words
in the class and member documentation.
<li>Automatic generation of references to documented classes, files and
members. Documentation of global functions, globals variables,
typedefs, defines and enumerations is also supported.
<li>Documentation may be placed either at the declaration or at the definition
of a member function or class. Most documentation systems (such as Javadoc) only
support the former, others (such as Qt) only the latter.
<li>You can type normal HTML tags in your documentation. Doxygen will convert
them to Latex automatically.
<li>Allows references to documentation generated for other projects
(or another part of the same project) in a location independent way.
<li>Allows inclusion of source code examples that are automatically
cross-referenced with the documentation.
<li>Inclusion of undocumented classes is also supported, allowing to quickly
learn the structure and interfaces of a (large) piece of code without
looking into the implementation details.
<li>All options are read from an easy to edit and documented configuration
file.
<li>Documentation and search engine can be transferred to another
location or machine without regenerating the documentation.
<li>Can cope with large projects easily.
</UL>
Although doxygen can be used in any C or C++ project, it was specifically
designed to be used for projects that make use of Troll Tech's
<A HREF="http://www.troll.no/qt">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 very similar to the
one that is generated by Troll Tech. Doxygen understands the C++ extensions
used by Qt such as signals and slots.
Doxygen can also automatically generate links to existing documentation
that was generated with Doxygen or with Qt's non-public class browser
generator. For a Qt based project this means that whenever you refer to
members or classes belonging to the Qt toolkit, a link will be generated to
the Qt documentation. This is done independent of where this documentation
is located!
*/
/******************************************************************************
*
* $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 history Doxygen History
<h3>TODO/Wish list</h3>
<ul>
<li>Add support for grouping members, and document then as a group.
<li>Support for K&R-style function arguments.
<li>More ouput formats: suggested are info format and RTF format.
<li>Reintroduction of the multi-column class list (and file list) to quickly
select a class or file
<li>Split long lists in an index to a set of smaller lists.
<li>Add a nice graphical front-end for creating and modifying the
configuration file (it should be flexible enough to quickly add new options).
<li>Improve the search index generation, so it uses less memory and
is easier to get running.
<li>Generate code metrics (Anyone know a good book about code metrics?)
<li>Add features that you think are missing... So if you know any that are
not yet listed here, please let me know.
</ul>
<h3>Features scheduled for version 0.5</h3>
<ul>
<li>Proper support for namespaces.
<li>Include LaTeX style formulas in LaTeX and HTML output (in HTML as a gif).
<li>Proper support for template classes, members, functions and specializations.
<li>Multi-lingual support.
<li>Generation of class diagrams (clickable image maps in HTML, eps images in
postscript).
<li>Add generator for man pages format.
</ul>
<h3>Version 0.4</h3>
<h4>New features:</h4>
<ul>
<li>LaTeX output generation.
<li>Full JavaDoc support.
<li>Build-in C-preprocessor for correct conditional parsing of source code
that is read by Doxygen.
<li>Build-in HTML to LaTeX converter. This allows you to use HTML tags in
your documentation, while doxygen still generates proper LaTeX output.
<li>Many new commands (there are now more than 60!) to document
more entities, to make the documentation look nicer, and to include
examples or pieces of examples.
<li>Enum types, enum values, typedefs, #defines, and files can now be
documented.
<li>Completely new documentation, that is now generated by Doxygen.
<li>A lot of small examples are now included.
</ul>
<h4>Bug fixes:</h4>
<ul>
<li>A lot of parser bugs are fixed.
<li>Improved support for documenting C code.
</ul>
<h3>Version 0.3</h3>
<h4>New features:</h4>
<ul>
<li>A search engine <a href="doxysearch_usage.html">doxysearch</a>,
that allows you to search through the generated documentation.
<li>A configuration file instead of command-line options. A default
configuration file can be generated
by <a href="doxygen_usage.html">doxygen</a>.
<li>Added an option to generate output for undocumented classes.
<li>Added an option to generate output for private members.
<li>Every page now contains a condensed index page, allowing much faster
navigation through the documentation.
<li>Global and member variables can now be documented.
<li>A project name can now given, which will be included in the
documentation.
</ul>
<h4>Bug fixes:</h4>
<ul>
<li>Fixed bug when files with the same name but in different directories
are used as include files.
<li>Template classes now work.
<li>Inner classes now work.
<li>Fixed a bug regarding unrelated functions and <code>\fn</code>.
<li>Fixed parse bug with <code>/**/</code> comments
<li>Fixed a bug regarding inline friend functions.
<li>The list of all members now also contains the undocumented members.
<li>Special documentation is now removed from code blocks.
<li>Doxygen should compile on Sun Solaris (with <code>CC</code>), HP-UX (with
<code>CC</code>), Irix (with DCC) and Linux (with <code>GCC</code>)
<li>Fixed several minor bugs.
</ul>
<h3>Version 0.2</h3>
<h4>New features:</h4>
<ul>
<li>Blocks of code are now parsed. Function calls and variables are
replaced by links to their documentation if possible.
<li>Special example documentation block added. This can be used to
provide cross references between the documentation and some example code.
<li>Documentation blocks can now be placed inside the body of a class.
<li>Documentation blocks with line range may now be created using
special <code>//!</code> C++ line comments.
<li>Unrelated members can now be documented. A page containing a
list of these members is generated.
<li>Added an <code>\include</code> command to insert blocks of source code
into the documentation.
<li>Warnings are generated for members that are undocumented.
<li>You can now specify your own HTML headers and footers for the
generated pages.
<li>Option added to generated indices containing all external classes
instead of only the used ones.
</ul>
<h4>Bug fixes:</h4>
<ul>
<li>Fixed a link generation problem with mixed case filenames are used.
<li>Made doxygen a little more portable.
(doxygen should now compile on Linux (with g++) and HP-UX (with CC))
<li>Fixed a bug in err() function.
<li>Fixed a problem with the type cast operator.
<li>Removed some typo's from the docs.
<li>Several small bug fixes and enhancements.
</ul>
<h3>Version 0.1</h3>
Initial version.
*/
/******************************************************************************
*
* $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 htmlcmds HTML Commands
Here is a list of all HTML commands that may be used inside the
documentation. Notice that all attributes of a HTML tag are ignored
(the HREF and NAME attributes for the A tag are the only exception).
<ul>
<li><tt>\<A HREF="..."\></tt> Starts a HTML hyper-link (HTML only).
<li><tt>\<A NAME="..."\></tt> Starts an named anchor (HTML only).
<li>\c </A> Ends a link or anchor (HTML only).
<li>\c <B> Starts a piece of text displayed in a bold font.
<li>\c </B> Ends a \c <B> section.
<li>\c <BODY> Does not generate any output.
<li>\c </BODY> Does not generate any output.
<li>\c <BR> Forces a line break.
<li>\c <CENTER> starts a section of centered text.
<li>\c </CENTER> ends a section of centered text.
<li>\c <CODE> Starts a piece of text displayed in a typewriter font.
<li>\c </CODE> End a \c <CODE> section.
<li>\c <DD> Starts an item description.
<li>\c <DFN> Starts a piece of text displayed in a typewriter font.
<li>\c </DFN> Ends a \c <DFN> section.
<li>\c <DL> Starts a description list.
<li>\c </DL> Ends a description list.
<li>\c <DT> Starts a item title.
<li>\c </DT> Does not generate any output.
<li>\c <EM> Starts a piece of text displayed in an italic font.
<li>\c </EM> Ends a \c <EM> section.
<li>\c <FORM> Does not generate any output.
<li>\c </FORM> Does not generate any output.
<li>\c <HR> Writes a horizontal ruler.
<li>\c <H1> Starts an unnumbered section.
<li>\c </H1> Ends an unnumberd section.
<li>\c <H2> Starts an unnumbered subsection.
<li>\c </H2> Ends an unnumbered subsection.
<li>\c <H?> Where ? is one of {3,4,5,6}, starts an unnumbered subsubsection.
<li>\c </H?> Where ? is one of {3,4,5,6}, ends an unnumbered subsubsection.
<li>\c <I> Starts a piece of text displayed in an italic font.
<li>\c <INPUT> Does not generated any output.
<li>\c </I> Ends a \c <I> section.
<li>\c <IMG> This command is written with attributes to the HTML output only.
<li>\c <LI> Starts a new list item.
<li>\c </LI> Does not generate any output.
<li>\c <META> Does not generate any output.
<li>\c <MULTICOL> ignored by Doxygen.
<li>\c </MUTLICOL> ignored by Doxygen.
<li>\c <OL> Starts a numbered item list.
<li>\c </OL> Ends a numbered item list.
<li>\c <P> Starts a new paragraph.
<li>\c </P> Does not generate any output.
<li>\c <PRE> starts a code fragment,
equivalent to the command \\code (see section \ref cmdcode).
<li>\c </PRE> ends a code fragment,
equivalent to the command \\endcode (see section \ref cmdendcode).
<li>\c <SMALL> starts a section of text displayed in a smaller font.
<li>\c </SMALL> ends a \c <SMALL> section.
<li>\c <STRONG> starts a section of bold text.
<li>\c </STRONG> ends a section of bold text.
<li>\c <SUB> Starts a piece of text displayed in superscript.
<li>\c </SUB> Ends a \c <SUB> section.
<li>\c <SUP> Starts a piece of text displayed in subscript.
<li>\c </SUP> Ends a \c </SUP> section.
<li>\c <TABLE> starts a table, the available space of a page is always
divided equally amount the columns.
<li>\c </TABLE> ends a table
<li>\c <TD> Starts a new table element.
<li>\c </TD> Does not generate any output.
<li>\c <TR> Starts a new table row.
<li>\c </TR> Does not generate any output.
<li>\c <TT> Starts a piece of text displayed in a typewriter font.
<li>\c </TT> Ends a \c <TT> section.
<li>\c <UL> Starts an unnumbered item list.
<li>\c </UL> Ends an unnumbered item list.
<li>\c <VAR> Starts a piece of text displayed in an italic font.
<li>\c </VAR> Ends a \c </VAR> section.
</ul>
The special HTML characters entities that are recognized by Doxygen:
<ul>
<li>\c &copy; the copyright symbol
<li>\c &quot; a double quote
<li>\c &?uml; where ? is one of {A,E,I,O,U,Y,a,e,i,o,u,y},
writes a character with a diaeresis accent (like &auml;).
<li>\c &?acute; where ? is one of {A,E,I,O,U,Y,a,e,i,o,u,y},
writes a character with a acute accent (like &aacute;).
<li>\c &?grave; where ? is one of {A,E,I,O,U,a,e,i,o,u,y},
writes a character with a grave accent (like &agrave;).
<li>\c &?circ; where ? is one of {A,E,I,O,U,a,e,i,o,u,y},
writes a character with a circumflex accent (like &acirc;).
<li>\c &?tilde; where ? is one of {A,N,O,a,n,o},
writes a character with a tilde accent (like &atilde;).
</ul>
*/
/******************************************************************************
*
* $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 index
<center>
\htmlonly
<img align=center lowsrc="doxygen_logo_low.gif" src="doxygen_logo.gif"
width=634 height=197 alt="doxygen"><br>
Version: $(VERSION)
\endhtmlonly
</center>
<h2>Doxygen license</h2>
\addindex license
\addindex GPL
Copyright &copy; 1997-1999 by
<a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>.<p>
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.
<p>
All output generated by Doxygen is not covered by this license.
<h2>Introduction</h2>
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
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.
Doxygen can also be configured to extract the code-structure from undocumented
source files. This can be very useful to quickly find your way in large
source distributions.
You can even `abuse' doxygen for creating normal documentation (as I did
for this manual).
This manual is divided into two parts, each of which is divided into several
sections.
The first part forms a user manual:
<ul>
<li>Section \ref install discusses how to download, compile and install
doxygen for your platform.
<li>Section \ref starting tells you how to generate your first piece of
documentation quickly.
<li>Section \ref trouble tells you what to do when you have problems.
</ul>
The second part forms a reference manual:
<ul>
<li>Section \ref features presents an overview of what Doxygen can do.
<li>Section \ref history shows what has changed during the development
of Doxygen and what still has to be done.
<li>Section \ref doxygen_usage shows how to use the \c doxygen program.
<li>Section \ref doxytag_usage shows how to use the \c doxytag program.
<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 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
generates the documentation you want.
<li>Section \ref commands shows an overview of the special commands that can be
used within the documentation.
<li>Section \ref htmlcmds shows an overview of the HTML commands that
can be used within the documentation.
</ul>
<h2>Acknowledgements</h2>
\addindex acknowledgements
Thanks go to:
<ul>
\addindex Doc++
<li>Malte Z&ouml;ckler and Roland Wunderling, authors of Doc++.
The first version of Doxygen was based on an old version of Doc++.
Although I have rewritten practically all code since then, Doc++ has still
given me a good start in writing Doxygen.
<li>All people at Troll Tech, for creating a beautiful GUI Toolkit.
(which is even useful for GUI-less applications like doxygen :-)
<li>My brother <a href="http://www.stack.nl/~fidget/index.html">Frank</a>
for rendering the logos.
<li>
Arnt Gulbrandsen,
Adam P. Jenkins,
Frank van de Pol,
Ulrich Quill,
Karl Robillard,
Frugal the Curious,
Michael Figley,
Eric Bos,
Barry Roberts,
Mark Tigges,
Jan Ekholm,
Andre Johansen,
Martin Franken,
Martin Hofmann,
Ulrich Ring,
Andy Guy,
Ryan Mclean,
Joseph Reklow,
Morten Eriksen,
Arthur Pope,
Andreas Felber,
Matthias Schwartz,
Bj&ouml;rn Bon,
Volker B&ouml;rchers,
Baruch Even,
Kor de Jong,
Thomas Eschenbacher,
Bert Scholten,
Germar Morgenthaler,
Daniel Bellen,
Terry Brown,
Anke Selig,
David Aspinwall,
Hellmar Becker,
Harald Krummeck,
Christoph Koegl,
Martin Reinecke,
Joseph Turian,
Craig P Earls,
Greg Sjaardema,
Vlado Sironja,
Jens Schmidt,
Lutz Sammer,
Robert Dale,
Ionutz Borcoman,
Markus Noga,
Darren Kelly,
Joerg Ott,
Kostya Serebrainy,
Marco Molteni,
Johannes Zellner,
Ole Gerden,
Olaf Meeuwissen,
Feiyi Wang,
Robert J. Clark,
Matthias Baas and
Walter Mueller
for suggestions, patches and bug reports.
</ul>
*/
/******************************************************************************
*
* $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 install Installation
\addindex installation
First go to the
<a href="http://www.stack.nl/~dimitri/doxygen/download.html">download</a> page
\latexonly({\tt http://www.stack.nl/$\sim$dimitri/doxygen/download.html})\endlatexonly
to get the latest distribution and unpack it.
If you downloaded the source distribution, you need at least the
following to build the executable:
<UL>
<LI>Troll Tech's GUI toolkit <A HREF="http://www.troll.no/dl">Qt</A>
\latexonly(see {\tt http://www.troll.no/dl})\endlatexonly.
\addindex Qt
<LI>The <a href="ftp://prep.ai.mit.edu/pub/gnu">GNU</a> tools
flex, bison and make
\latexonly(see {\tt ftp://prep.ai.mit.edu/pub/gnu})\endlatexonly.
\addindex flex
\addindex bison
\addindex make
<LI>In order to generate a Makefile for your platform, you need
<a href="http://www.perl.com>perl</a>
\latexonly(see {\tt http://www.perl.com})\endlatexonly.
\addindex perl
</UL>
\addindex HTTP
\addindex CGI
To use the search engine \c doxysearch, you will also need
a HTTP daemon running on the target system and permission to execute a
CGI binary.
Once you have Qt installed correctly, you can simply enter:
\verbatim
make
\endverbatim
to get a list of all supported platforms/compilers.
Typing <tt>make</tt> followed by your platform will compile doxygen.
For Linux you can enter the following:
\verbatim
make linux-g++
\endverbatim
Doxygen should compile without errors or warnings.
If it does not, please send the compilation errors or warnings along
with a description of your platform to
<a href="mailto:dimitri@stack.nl>dimitri@stack.nl</a>.
After compilation, the binaries will be located in the \c bin
directory of the distribution.
You may want to copy these files to a location in your path
(\c /usr/local/bin for instance) or add the \c bin
directory of the distribution to your search path.
The following binaries should now be available:
<UL>
<LI>\c doxygen: for generating the class browser.
<LI>\c doxytag: for creating a tag file containing references
to external documentation.
<LI>\c doxysearch: the search engine. This binary should not be
executed directly. It must be called from an CGI script that will be
generated by doxygen.
</UL>
Doxygen was developed and tested under Linux using the following tools:
<ul>
<li>GCC version 2.8.1
<li>GNU flex version 2.5.4
<li>GNU bison version 1.25
<li>GNU make version 3.77
<li>Perl version 5.001 (patch level 1m)
<li>VIM version 5.3
<li>Netscape 4.04 & 4.5
<li>Troll Tech's tmake version 1.2 (included in the distribution)
<li>teTeX version 0.4
</ul>
\htmlonly
Go to the <a href="starting.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
*/
/******************************************************************************
*
* $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 installdox_usage Installdox usage
Installdox is a perl script that is generated by doxygen whenever
tag files are used (See \c TAGFILES
in section \ref config_extref)
or the search engine is enabled (See \c SEARCHENGINE
in section \ref config_search). The script is
located in the same directory where the HTML files are located.
Its purpose is to set the location of the external documentation
for each tag file and to set the correct links to the search engine
at install time.
Calling \c installdox with option <b>-h</b> at the command line
will give you a brief description of the usage of the program.
The following options are available:
<dl>
<dt><b>-l <tt>\<tagfile\>\@\<location\></tt></b><dd>
Each tag file contains information about the files, classes and members
documented in a set of HTML files. A user can install these
HTML files anywhere on his/her hard disk or web site.
Therefore installdox \e requires the location of the
documentation for each tag file <tt>\<tagfile\></tt>
that is used by doxygen. The location <tt>\<location\></tt> can be
an absolute path or a URL.
\par Notice:
Each <tagfile> must be unique and should only be the name of the
file, not including the path.
<dt><b>-q</b><dd>
When this option is specified, installdox will generate no output other
than fatal errors.
</dl>
Optionally a list of HTML files may be given.
These files are scanned and modified if needed.
If this list is omitted all files in the current directory
that end with \c .html are used.
The \c installdox script is unique for each generated class browser
in the sense that it `knows' what tag files are used. It will generate an error if
the <b>-l</b> option is missing for a tag file or if an invalid tag file
is given.
*/
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.
*
*/
/*! \page trouble Troubleshooting
<h2>Known problems:</h2>
<ul>
<li>Doxygen is <em>not</em> a compiler, it is only a lexical scanner.
This means that it can and will not detect errors in your source code.
<li>Since it impossible to test all possible code fragments, it is
very well possible, that some valid piece of C/C++ code is not handled
properly. If you find such a piece, please send it to me, so I can
improve doxygen's parsing capabilities. Try to make the piece of code
you send as small as possible, to help me narrow down the search.
<li>Using declarations and directives are not yet. They are
simply ignored.
<li>Doxygen does not work properly if there are multiple classes, structs
or unions with the same name in your code. It should not crash however,
rather it should ignore all of the classes with the same name except one.
<li>Some commands do not work inside the arguments of other commands.
Inside a HTML link (i.e \<a href="..."\>...\<a\>) for instance
other commands (including other HTML commands) do not work!
The sectioning commands are an important exception.
<li>Redundant braces can confuse doxygen in some cases.
For example:
\verbatim
void f (int);
\endverbatim
is properly parsed as a function declaration, but
\verbatim
const int (a);
\endverbatim
is also seen as a function declaration, because only the syntax is analysed,
not the semantics. If the redundant braces can be detected, as in
\verbatim
int *(a[20]);
\endverbatim
then doxygen will remove the braces and correctly parse the result.
</ul>
<h2>How to help</h2>
The development of Doxygen highly depends on your input!
If you are trying Doxygen let me know what you think of it (do you
miss certain features?). Even if you decide not to use it, please let me
know why.
Furthermore, I would appreciate a mail if you have found
a bug, or if you have ideas (or even better some code or a patch)
how to fix existing bugs and limitations.
My email address: <a href="mailto:dimitri@stack.nl">dimitri@stack.nl</a>
*/
include ../Makefile.config
DOXYDIR = ../bin
all: class/html/index.html \
define/html/index.html \
enum/html/index.html \
file/html/index.html \
func/html/index.html \
page/html/index.html \
relates/html/index.html \
author/html/index.html \
par/html/index.html \
overload/html/index.html \
example/html/index.html \
include/html/index.html \
qtstyle/html/index.html \
jdstyle/html/index.html \
structcmd/html/index.html \
autolink/html/index.html \
resdefine/html/index.html \
restypedef/html/index.html \
afterdoc/html/index.html \
template/html/index.html \
tag/html/index.html
clean:
rm -rf class define enum file func page relates author \
par overload example include qtstyle jdstyle structcmd \
autolink tag resdefine restypedef afterdoc template
class/html/index.html: class.h class.cfg
$(DOXYDIR)/doxygen class.cfg
define/html/index.html: define.h define.cfg
$(DOXYDIR)/doxygen define.cfg
enum/html/index.html: enum.h enum.cfg
$(DOXYDIR)/doxygen enum.cfg
file/html/index.html: file.h file.cfg
$(DOXYDIR)/doxygen file.cfg
func/html/index.html: func.h func.cfg
$(DOXYDIR)/doxygen func.cfg
page/html/index.html: page.doc page.cfg
$(DOXYDIR)/doxygen page.cfg
relates/html/index.html: relates.cpp relates.cfg
$(DOXYDIR)/doxygen relates.cfg
author/html/index.html: author.cpp author.cfg
$(DOXYDIR)/doxygen author.cfg
par/html/index.html: par.cpp par.cfg
$(DOXYDIR)/doxygen par.cfg
overload/html/index.html: overload.cpp overload.cfg
$(DOXYDIR)/doxygen overload.cfg
example/html/index.html: example.cpp example_test.cpp example.cfg
$(DOXYDIR)/doxygen example.cfg
include/html/index.html: include.cpp example_test.cpp include.cfg
$(DOXYDIR)/doxygen include.cfg
qtstyle/html/index.html: qtstyle.cpp qtstyle.cfg
$(DOXYDIR)/doxygen qtstyle.cfg
jdstyle/html/index.html: jdstyle.cpp jdstyle.cfg
$(DOXYDIR)/doxygen jdstyle.cfg
structcmd/html/index.html: structcmd.h structcmd.cfg
$(DOXYDIR)/doxygen structcmd.cfg
autolink/html/index.html: autolink.cpp autolink.cfg
$(DOXYDIR)/doxygen autolink.cfg
tag/html/index.html: tag.cpp tag.cfg
$(DOXYDIR)/doxygen tag.cfg
sed -e "1,1s.perl.$(PERL).g" tag/html/installdox >tag/html/installdox.perl
cd tag/html ; $(PERL) installdox.perl -lexample.tag@../../example/html
resdefine/html/index.html: resdefine.cpp resdefine.cfg
$(DOXYDIR)/doxygen resdefine.cfg
restypedef/html/index.html: restypedef.cpp restypedef.cfg
$(DOXYDIR)/doxygen restypedef.cfg
afterdoc/html/index.html: afterdoc.h afterdoc.cfg
$(DOXYDIR)/doxygen afterdoc.cfg
template/html/index.html: templ.cpp templ.cfg
$(DOXYDIR)/doxygen templ.cfg
DOXYDIR = ..\bin
all: class/html/index.html \
define/html/index.html \
enum/html/index.html \
file/html/index.html \
func/html/index.html \
page/html/index.html \
relates/html/index.html \
author/html/index.html \
par/html/index.html \
overload/html/index.html \
example/html/index.html \
include/html/index.html \
qtstyle/html/index.html \
jdstyle/html/index.html \
structcmd/html/index.html \
autolink/html/index.html \
tag/html/index.html \
resdefine/html/index.html \
restypedef/html/index.html \
afterdoc/html/index.html
clean:
deltree /y class define enum file
deltree /y func page relates author
deltree /y par overload example include qtstyle
deltree /y jdstyle structcmd autolink tag resdefine
deltree /y restypedef
class/html/index.html: class.h class.cfg
$(DOXYDIR)\doxygen class.cfg
define/html/index.html: define.h define.cfg
$(DOXYDIR)\doxygen define.cfg
enum/html/index.html: enum.h enum.cfg
$(DOXYDIR)\doxygen enum.cfg
file/html/index.html: file.h file.cfg
$(DOXYDIR)\doxygen file.cfg
func/html/index.html: func.h func.cfg
$(DOXYDIR)\doxygen func.cfg
page/html/index.html: page.doc page.cfg
$(DOXYDIR)\doxygen page.cfg
relates/html/index.html: relates.cpp relates.cfg
$(DOXYDIR)\doxygen relates.cfg
author/html/index.html: author.cpp author.cfg
$(DOXYDIR)\doxygen author.cfg
par/html/index.html: par.cpp par.cfg
$(DOXYDIR)\doxygen par.cfg
overload/html/index.html: overload.cpp overload.cfg
$(DOXYDIR)\doxygen overload.cfg
example/html/index.html: example.cpp example_test.cpp example.cfg
$(DOXYDIR)\doxygen example.cfg
include/html/index.html: include.cpp example_test.cpp include.cfg
$(DOXYDIR)\doxygen include.cfg
qtstyle/html/index.html: qtstyle.cpp qtstyle.cfg
$(DOXYDIR)\doxygen qtstyle.cfg
jdstyle/html/index.html: jdstyle.cpp jdstyle.cfg
$(DOXYDIR)\doxygen jdstyle.cfg
structcmd/html/index.html: structcmd.h structcmd.cfg
$(DOXYDIR)\doxygen structcmd.cfg
autolink/html/index.html: autolink.cpp autolink.cfg
$(DOXYDIR)\doxygen autolink.cfg
tag/html/index.html: tag.cpp tag.cfg
$(DOXYDIR)\doxygen tag.cfg
cd tag\html
echo perl installdox -lexample.tag@../../example/html >runperl.bat
runperl.bat
cd ..\..
resdefine/html/index.html: resdefine.cpp resdefine.cfg
$(DOXYDIR)\doxygen resdefine.cfg
restypedef/html/index.html: restypedef.cpp restypedef.cfg
$(DOXYDIR)\doxygen restypedef.cfg
afterdoc/html/index.html: afterdoc.h afterdoc.cfg
$(DOXYDIR)\doxygen afterdoc.cfg
PROJECT_NAME = "AfterDocs"
OUTPUT_DIRECTORY = afterdoc
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = afterdoc.h
QUIET = YES
/*! A test class */
class Test
{
public:
/** An enum type.
* The documentation block cannot be put after the enum!
*/
enum EnumType
{
int EVal1, /**< enum value 1 */
int EVal2 /**< enum value 2 */
};
void member(); //!< a member function.
protected:
int value; /*!< an integer value */
};
PROJECT_NAME = "Author Command"
OUTPUT_DIRECTORY = author
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = author.cpp
QUIET = YES
/*! \class WindowsNT
* \brief Windows Nice Try.
* \author Bill Gates
* \author Several hundred furry animals gathered in a cave and grooving
* with a pit.
* \version 4.0
* \date 1996-1998
* \bug It crashes a lot and requires huge amounts of memory.
* \bug The class introduces the more bugs, the longer it is used.
* \warning This class may explode in your face.
* \warning If you inherit anything from this class, you're doomed.
*/
class WindowsNT {};
PROJECT_NAME = "Automatic link generation"
OUTPUT_DIRECTORY = autolink
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = autolink.cpp
QUIET = YES
/*! \file autolink.cpp
Testing automatic link generation.
A link to a member of the Test class: Test::member,
More specific links to the each of the overloaded members:
Test::member(int) and Test#member(int,int)
A link to a protected member variable of Test: Test#var,
A link to the global enumeration type #GlobEnum.
A link to the define #ABS(x).
A link to the destructor of the Test class: Test::~Test,
A link to the typedef ::B.
A link to the enumeration type Test::EType
A link to some enumeration values Test::Val1 and ::GVal2
*/
/*!
Since this documentation block belongs to the class Test no link to
Test is generated.
Two ways to link to a constructor are: #Test and Test().
Links to the destructor are: #~Test and ~Test().
A link to a member in this class: member().
More specific links to the each of the overloaded members:
member(int) and member(int,int).
A link to the variable #var.
A link to the global typedef ::B.
A link to the global enumeration type #GlobEnum.
A link to the define ABS(x).
A link to a variable \link #var using another text\endlink as a link.
A link to the enumeration type #EType.
A link to some enumeration values: ::Val1 and ::GVal1.
And last but not least a link to a file: autolink.cpp.
\sa Inside a see also section any word is checked, so EType,
Val1, GVal1, ~Test and member will be replaced by links in HTML.
*/
class Test
{
public:
Test(); //!< constructor
~Test(); //!< destructor
void member(int); /**< A member function. Details. */
void member(int,int); /**< An overloaded member function. Details */
/** An enum type. More details */
enum EType {
Val1, /**< enum value 1 */
Val2 /**< enum value 2 */
};
protected:
int var; /**< A member variable */
};
/*! details. */
Test::Test() { }
/*! details. */
Test::~Test() { }
/*! A global variable. */
int globVar;
/*! A global enum. */
enum GlobEnum {
GVal1, /*!< global enum value 1 */
GVal2 /*!< global enum value 2 */
};
/*!
* A macro definition.
*/
#define ABS(x) (((x)>0)?(x):-(x))
typedef Test B;
/*! \fn typedef Test B
* A type definition.
*/
PROJECT_NAME = "Class Command"
OUTPUT_DIRECTORY = class
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = class.h
QUIET = YES
/* A dummy class */
class Test
{
}
/*! \class Test class.h inc/class.h
* \brief This is a test class.
*
* Some details about the Test class
*/
PROJECT_NAME = "Define Command"
OUTPUT_DIRECTORY = define
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = define.h
ENABLE_PREPROCESSING = YES
QUIET = YES
/*! \file define.h
\brief testing defines
This is to test the documentation of defines.
*/
/*! \def ABS(x)
The define ABS computes the absolute value of its argument \a x.
*/
#define ABS(x) (((x)>0)?(x):-(x))
PROJECT_NAME = "Enum Command"
OUTPUT_DIRECTORY = enum
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = enum.h
QUIET = YES
class Test
{
public:
enum TEnum { Val1, Val2 };
};
/*! \class Test
* The class description.
*/
/*! \enum Test::TEnum
* A description of the enum type.
*/
/*! \var Test::TEnum Test::Val1
* The description of the first enum value.
*/
PROJECT_NAME = "Example Command"
OUTPUT_DIRECTORY = example
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = example.cpp
EXAMPLE_PATH = example_test.cpp
QUIET = YES
/** A Test class.
* More details about this class.
*/
class Test
{
public:
/** An example member function.
* More details about this function.
*/
void example();
};
void Test::example() {}
/** \example example_test.cpp
* This is an example of how to use the Test class.
* More details about this example.
*/
>Test:
example a0 "()"
void main()
{
Test t;
t.example();
}
PROJECT_NAME = "File Command"
OUTPUT_DIRECTORY = file
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = file.h
QUIET = YES
/** \file file.h
* A brief file description.
* A more elaborated file description.
*/
/**
* A global integer value.
* More details about this value.
*/
extern int globalValue;
PROJECT_NAME = "Fn Command"
OUTPUT_DIRECTORY = func
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = func.h
QUIET = YES
class Test
{
public:
const char *member(char,int) throw(std::out_of_range);
};
const char *Test::member(char c,int n) throw(std::out_of_range) {}
/*! \class Test
* \brief Test class.
*
* Details about Test.
*/
/*! \fn const char *Test::member(char c,int n)
* \brief A member function.
* \param c a character.
* \param n an integer.
* \exception std::out_of_range parameter is out of range.
* \return a character pointer.
*/
PROJECT_NAME = "Include Command"
OUTPUT_DIRECTORY = include
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = include.cpp
EXAMPLE_PATH = example_test.cpp
QUIET = YES
/*! A test class. */
class Test
{
public:
/// a member function
void example();
};
/*! \page example
* \dontinclude example_test.cpp
* Our main function starts like this:
* \skip main
* \until {
* First we create a object \c t of the Test class.
* \skipline Test
* Then we call the example member function
* \line example
* After that our little test routine ends.
* \line }
*/
PROJECT_NAME = "JavaDoc Style"
OUTPUT_DIRECTORY = jdstyle
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = jdstyle.cpp
QUIET = YES
/**
* A test class. A more elaborate class description.
*/
class Test
{
public:
/**
* An enum.
* More detailed enum description.
*/
enum TEnum {
TVal1, /**< enum value TVal1. */
TVal2, /**< enum value TVal2. */
TVal3 /**< enum value TVal3. */
}
*enumPtr, /**< enum pointer. Details. */
enumVar; /**< enum variable. Details. */
/**
* A constructor.
* A more elaborate description of the constructor.
*/
Test();
/**
* A destructor.
* A more elaborate description of the destructor.
*/
~Test();
/**
* a normal member taking two arguments and returning an integer value.
* @param a an integer argument.
* @param s a constant chararcter pointer.
* @see Test()
* @see ~Test()
* @see testMeToo()
* @see publicVar()
* @return The test results
*/
int testMe(int a,const char *s);
/**
* A pure virtual member.
* @see testMe()
* @param c1 the first argument.
* @param c2 the second argument.
*/
virtual void testMeToo(char c1,char c2) = 0;
/**
* a public variable.
* Details.
*/
int publicVar;
/**
* a function variable.
* Details.
*/
int (*handler)(int a,int b);
};
PROJECT_NAME = "Overloaded Command"
OUTPUT_DIRECTORY = overload
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = overload.cpp
QUIET = YES
class Test
{
public:
void drawRect(int,int,int,int);
void drawRect(const Rect &r);
};
void Test::drawRect(int x,int y,int w,int h) {}
void Test::drawRect(const Rect &r) {}
/*! \class Test
* \brief A short description.
*
* More text.
*/
/*! \fn void Test::drawRect(int x,int y,int w,int h)
* This command draws a rectangle with a left upper corner at ( \a x , \a y ),
* width \a w and height \a h.
*/
/*!
* \overload void Test::drawRect(const Rect &r)
*/
PROJECT_NAME = "Page Command"
OUTPUT_DIRECTORY = page
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = page.doc
QUIET = YES
/*! \page page1 A documentation page
This page contains the subsections \ref subsection1 and \ref subsection2.
For more info see section \ref page2.
\subsection subsection1 The first subsection
Text.
\subsection subsection2 The second subsection
More text.
*/
/*! \page page2 Another page
Even more info.
*/
PROJECT_NAME = "Par Command"
OUTPUT_DIRECTORY = par
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = par.cpp
QUIET = YES
/*! \class Test
* Normal text.
* \par User defined paragraph:
* Contents of the paragraph.
*
* More normal text.
*/
class Test {};
PROJECT_NAME = "Qt Style"
OUTPUT_DIRECTORY = qtstyle
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = qtstyle.cpp
QUIET = YES
//! A test class.
/*!
A more elaborate class description.
*/
class Test
{
public:
//! An enum.
/*! More detailed enum description. */
enum TEnum {
TVal1, /*!< Enum value TVal1. */
TVal2, /*!< Enum value TVal2. */
TVal3 /*!< Enum value TVal3. */
}
//! Enum pointer.
/*! Details. */
*enumPtr,
//! Enum variable.
/*! Details. */
enumVar;
//! A constructor.
/*!
A more elaborate description of the constructor.
*/
Test();
//! A destructor.
/*!
A more elaborate description of the destructor.
*/
~Test();
//! A normal member taking two arguments and returning an integer value.
/*!
\param a an integer argument.
\param s a constant chararcter pointer.
\return The test results
\sa Test(), ~Test(), testMeToo() and publicVar()
*/
int testMe(int a,const char *s);
//! A pure virtual member.
/*!
\sa testMe()
\param c1 the first argument.
\param c2 the second argument.
*/
virtual void testMeToo(char c1,char c2) = 0;
//! A public variable.
/*!
Details.
*/
int publicVar;
//! A function variable.
/*!
Details.
*/
int (*handler)(int a,int b);
};
PROJECT_NAME = "Relates Command"
OUTPUT_DIRECTORY = relates
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = relates.cpp
QUIET = YES
/*!
* A String class.
*/
class String
{
friend int strcmp(const String &,const String &);
};
/*!
* Compares two strings.
*/
int strcmp(const String &s1,const String &s2)
{
}
/*! \relates String
* A string debug function.
*/
void stringDebug()
{
}
PROJECT_NAME = "Resolving Defines"
OUTPUT_DIRECTORY = resdefine
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = resdefine.cpp
QUIET = YES
#define ExportedName InternalName
class InternalName
{
public:
InternalName() {}
~InternalName() {}
};
/*! \class ExportedName
* This class's real name is InternalName but everyone should use
* ExportedName.
*/
/*! \fn ExportedName::ExportedName()
* The constructor
*/
/*! \fn ExportedName::~ExportedName()
* The destructor
*/
PROJECT_NAME = "Resolving Typedefs"
OUTPUT_DIRECTORY = restypedef
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = restypedef.cpp
QUIET = YES
/*! \file restypedef.cpp
* An example of resolving typedefs.
*/
/*! \struct CoordStruct
* A coordinate pair.
*/
struct CoordStruct
{
/*! The x coordinate */
float x;
/*! The y coordinate */
float y;
};
/*! Creates a type name for CoordStruct */
typedef struct CoordStruct Coord;
/*!
* This function returns the addition of \a c1 and \a c2, i.e:
* (c1.x+c2.x,c1.y+c2.y)
*/
Coord add(Coord c1,Coord c2)
{
}
PROJECT_NAME = "Structural commands"
OUTPUT_DIRECTORY = structcmd
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = structcmd.h
QUIET = YES
/*! \file structcmd.h
\brief A Documented file.
Details.
*/
/*! \def MAX(a,b)
\brief A macro that returns the maximum of \a a and \a b.
Details.
*/
/*! \var typedef unsigned int UINT32
\brief A type definition for a .
Details.
*/
/*! \var int errno
\brief Contains the last error code.
\warning Not thread safe!
*/
/*! \fn int open(const char *pathname,int flags)
\brief Opens a file descriptor.
\param pathname The name of the descriptor.
\param flags Opening flags.
*/
/*! \fn int close(int fd)
\brief Closes the file descriptor \a fd.
\param fd The descriptor to close.
*/
/*! \fn size_t write(int fd,const char *buf, size_t count)
\brief Writes \a count bytes from \a buf to the filedescriptor \a fd.
\param fd The descriptor to write to.
\param buf The data buffer to write.
\param count The number of bytes to write.
*/
/*! \fn int read(int fd,char *buf,size_t count)
\brief Read bytes from a file descriptor.
\param fd The descriptor to read from.
\param buf The buffer to read into.
\param count The number of bytes to read.
*/
#define MAX(a,b) (((a)>(b))?(a):(b))
typedef unsigned int UINT32;
int errno;
int open(const char *,int);
int close(int);
size_t write(int,const char *, size_t);
int read(int,char *,size_t);
PROJECT_NAME = "Tag Files"
OUTPUT_DIRECTORY = tag
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = tag.cpp
TAGFILES = example.tag
PERL_PATH = perl
QUIET = YES
/*! A class that is inherited from the external class Test.
*/
class Tag : public Test
{
public:
/*! an overloaded member. */
void example();
};
PROJECT_NAME = "Template Test"
OUTPUT_DIRECTORY = template
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = templ.cpp
QUIET = YES
/*! A template class */
template<class T,int i=100> class Test
{
public:
Test();
Test(const Test &);
friend void friendTempFunc(Test &, int=5);
};
/*! complete specialization */
template<> class Test<void *,200>
{
public:
Test();
};
/*! A partial template specialization */
template<class T> class Test< T * > : public Test<void *,200>
{
public:
Test();
};
/*! The constructor of the template class*/
template<class T,int i> Test<T,i>::Test() {}
/*! The copy constructor */
template<class T,int i> Test<T,i>::Test(const Test<T,i> &t) {}
/*! A friend function of a template class */
template<class T,int i> void friendTempFunc(Test<T,i> &t,int a) {}
/*! The constructor of the specilization */
template<> Test<void *,200>::Test() {}
/*! The constructor of the partial specilization */
template<class T> Test<T*>::Test() {}
REM make script for Microsoft Visual C++
set TMAKEPATH=..\tmake\lib\win32-msvc
nmake /NOLOGO -f Makefile.windows win32-msvc
#
# $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.
#
include ../Makefile.config
all: Makefile.doxygen Makefile.doxytag Makefile.doxysearch Makefile
$(MAKE) -f Makefile.doxygen $@
$(MAKE) -f Makefile.doxytag $@
$(MAKE) -f Makefile.doxysearch $@
Makefile.doxygen: doxygen.pro doxygen.t
$(PERL) $(TMAKE) doxygen.pro >Makefile.doxygen
Makefile.doxytag: doxytag.pro doxytag.t
$(PERL) $(TMAKE) doxytag.pro >Makefile.doxytag
Makefile.doxysearch: doxysearch.pro
$(PERL) $(TMAKE) doxysearch.pro >Makefile.doxysearch
tmake:
$(PERL) $(TMAKE) doxygen.pro >Makefile.doxygen
$(PERL) $(TMAKE) doxytag.pro >Makefile.doxytag
$(PERL) $(TMAKE) doxysearch.pro >Makefile.doxysearch
clean:
$(MAKE) -f Makefile.doxygen clean
$(MAKE) -f Makefile.doxytag clean
$(MAKE) -f Makefile.doxysearch clean
-rm -f scanner.cpp code.cpp config.cpp pre.cpp ce_lex.cpp \
ce_parse.cpp ce_parse.h doxytag.cpp tag.cpp \
declinfo.cpp defargs.cpp version.cpp
FORCE:
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.
*
*/
#ifndef CLASSDEF_H
#define CLASSDEF_H
#include <qstring.h>
#include <qfileinf.h>
#include <qlist.h>
#include <qdict.h>
#include <qtstream.h>
#include <qstrlist.h>
#include "membername.h"
#include "memberlist.h"
#include "memberdef.h"
#include "example.h"
#include "entry.h"
#include "definition.h"
typedef QDict<MemberDef> MemberDict;
class ClassList;
class OutputList;
class FileDef;
class BaseClassList;
class MemberInfoList;
class MemberInfoDict;
class NamespaceDef;
class ClassDef : public Definition
{
public:
enum CompoundType { Class=Entry::CLASS_SEC,
Struct=Entry::STRUCT_SEC,
Union=Entry::UNION_SEC
};
ClassDef(const char *name,int ct,const char *ref=0,const char *fName=0);
~ClassDef();
QString classFile() const { return fileName; }
int compoundType() const { return compType; }
const char *memberListFileName() const { return memListFileName; }
void insertBaseClass(ClassDef *,Protection p,Specifier s,const char *t=0);
BaseClassList *baseClasses() { return inherits; }
void insertSuperClass(ClassDef *,Protection p,Specifier s,const char *t=0);
BaseClassList *superClasses() { return inheritedBy; }
void setIncludeFile(FileDef *fd) { incFile=fd; }
FileDef *includeFile() const { return incFile; }
void setIncludeName(const char *n_) { incName=n_; }
MemberNameInfoList *memberNameInfoList() { return allMemberNameInfoList; }
MemberNameInfoDict *memberNameInfoDict() { return allMemberNameInfoDict; }
bool isReference() { return !reference.isNull(); }
const char *getReference() const { return reference; }
void insertMember(const MemberDef *);
void insertUsedFile(const char *);
void computeAnchors();
void setAnchor(MemberDef *);
void dumpMembers();
void writeDocumentation(OutputList &ol);
void writeMemberList(OutputList &ol);
void writeIncludeFile(OutputList &ol);
bool addExample(const char *anchor,const char *name, const char *file);
bool hasExamples();
void writeExample(OutputList &ol);
void setProtection(Protection p) { prot=p; }
Protection protection() const { return prot; }
bool isVisible()
{ return !name().isEmpty() && name().at(0)!='@' &&
(prot!=Private || extractPrivateFlag) &&
hasDocumentation();
}
bool hasNonReferenceSuperClass();
bool isVisibleExt()
{ return (allExtFlag || hasNonReferenceSuperClass()) &&
!name().isEmpty() && name().at(0)!='@' &&
(prot!=Private || extractPrivateFlag) &&
(hasDocumentation() || !hideClassFlag || !reference.isNull());
}
// template argument functions
ArgumentList *templateArguments() const { return tempArgs; }
void setTemplateArguments(ArgumentList *al);
QString getTemplateNameString();
void setNamespace(NamespaceDef *nd) { nspace = nd; }
NamespaceDef *getNamespace() { return nspace; }
bool visited;
private:
//QString name; // name of the class
QString fileName; // HTML containing the class docs
//QString doc; // general class documentation
FileDef *incFile; // header file to refer to
QString incName; // alternative include file name
//QString brief; // brief class discription
QString memListFileName;
BaseClassList *inherits;
BaseClassList *inheritedBy;
NamespaceDef *nspace; // the namespace this class is in
MemberList pubMembers;
MemberList proMembers;
MemberList priMembers;
MemberList pubStaticMembers;
MemberList proStaticMembers;
MemberList priStaticMembers;
MemberList pubSlots;
MemberList proSlots;
MemberList priSlots;
MemberList related;
MemberList signals;
MemberList friends;
MemberNameInfoList *allMemberNameInfoList;
MemberNameInfoDict *allMemberNameInfoDict;
ArgumentList *tempArgs;
QStrList files;
QString reference;
ExampleList *exampleList;
ExampleDict *exampleDict;
int compType;
Protection prot;
};
struct BaseClassDef
{
BaseClassDef(ClassDef *cd,Protection p,Specifier v,const char *t) :
classDef(cd), prot(p), virt(v), templSpecifiers(t) {}
ClassDef *classDef;
Protection prot;
Specifier virt;
QString templSpecifiers;
};
class BaseClassList : public QList<BaseClassDef>
{
public:
int compareItems(GCI item1,GCI item2)
{
ClassDef *c1=((BaseClassDef *)item1)->classDef;
ClassDef *c2=((BaseClassDef *)item2)->classDef;
if (c1==0 || c2==0)
return FALSE;
else
return strcmp(c1->name(),c2->name());
}
};
class BaseClassListIterator : public QListIterator<BaseClassDef>
{
public:
BaseClassListIterator(const BaseClassList &bcl) :
QListIterator<BaseClassDef>(bcl) {}
};
#endif
/******************************************************************************
*
* $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.
*
*/
#include "classlist.h"
ClassList::ClassList() : QList<ClassDef>()
{
}
ClassList::~ClassList()
{
}
int ClassList::compareItems(GCI item1, GCI item2)
{
ClassDef *c1=(ClassDef *)item1;
ClassDef *c2=(ClassDef *)item2;
return strcmp(c1->name(),c2->name());
}
ClassListIterator::ClassListIterator(const ClassList &cllist) :
QListIterator<ClassDef>(cllist)
{
}
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.
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.
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.
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.
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