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

mods for doxygen-0.49-990829

parent 6aa7383e
DOXYGEN Version 0.49-990728
DOXYGEN Version 0.49-990829
CONTENTS
--------
- Installation instructions for UNIX
- Installation instructions for Windows
- Known configuration problems:
* HTML related problems
* LaTeX related problems
* HP-UX / Digital UNIX problems
INSTALLATION INSTRUCTIONS FOR UNIX:
-----------------------------------
1. Unpack the archive, unless you already have:
gunzip doxygen-0.49-990728.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-990728.src.tar # unpack it
2. Make sure Qt is installed properly (check the environment variable $QTDIR)
gunzip doxygen-0.49-990829.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-990829.src.tar # unpack it
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.
2. Run the configure script:
sh ./configure
4. Compile the program.
The script tries to determine the platform you use, the location
of the Qt library, the make tool and the perl interpreter.
It will report what it finds. Use configure --help
to see how to override or change the default settings.
Type:
make
3. Compile the program by running 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++
make
The program should compile without problems and three binaries (doxygen,
doxytag, and doxysearch) should be available in the bin directory of the
......@@ -40,16 +36,12 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
5. Generate the user manual.
type:
make docs
make docs
to let doxygen generate the HTML and LaTeX documentation.
(you will need the stream editor `sed' for this)
type:
make ps
make ps
to generate a postscript version of the manual.
(you will need latex and dvips for this)
......@@ -65,27 +57,40 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
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.
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
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.
You can download it at: http://www.ActiveState.com/pw32/
- the GNU tools flex, bison and sed.
To get these working on Windows you can install the cygwin tools.
You can download them at: http://sourceware.cygnus.com/cygwin/
Make sure the BISONLIB environment variable points to the
location where bison.simple and bison.hairy are located.
- 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!)
- 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).
- 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
You can download it at:
ftp://ctan.tug.org/tex-archive/systems/win32/web2c/fptex-0.3/
- If you want to generate compressed HTML help (see GENERATE_HTMLHELP in the
config file), then you need the Microsoft HTML help workshop.
You can download it at: http://msdn.microsoft.com/workshop/author/htmlhelp
- If you used WinZip to extract the tar archive it will (apparently) not
create empty folders, so you have to add the folders
`objects' and `bin' manually in the root of the distribution before
compiling.
Make sure all tools are accessible from the command-line.
Make sure all tools are accessible from the command-line (add them to the
PATH environment if needed).
Open a dos box, goto the doxygen root dir and type:
......@@ -96,23 +101,37 @@ This should build the executables doxygen.exe, doxytag.exe, and doxysearch.exe
To build the examples type:
nmake -f Makefile.windows examples
nmake examples
To generate the HTML documentation type:
nmake docs
The generated docs are located in the html directory.
To generate the postscript manual type:
nmake ps
The manual should now be here latex/doxygen_manual.ps
-----------------------------------------------------------------------------
KNOWN CONFIGURATION PROBLEMS
QT RELATED PROBLEMS:
- Qt-2.01 contains a bug that
HTML RELATED PROBLEMS:
- the indent continuously increases.
This seems to be a problem that can be observed with Netscape 4.01.
It is not present in many later and earlier versions I tested.
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)
in the config file (see the PAPER_TYPE tag in the config file)
- the file fancyheader.sty is known as fancyhdr.sty on some systems.
Please change that in src/latexgen.cpp
......@@ -154,4 +173,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (30 July 1999)
Dimitri van Heesch (29 August 1999)
# 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)
gnu-g++: src/version.cpp
cd src; \
TMAKEPATH=../tmake/lib/gnu-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 LICENSE
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-990728
all: src/version.cpp
cd src ; $(MAKE)
clean: FORCE
cd examples ; $(MAKE) clean
cd doc ; $(MAKE) clean
cd src ; $(MAKE) clean
-rm -f bin/doxy*
-rm -f objects/*.o
distclean: clean
-rm -f src/Makefile.doxygen \
src/Makefile.doxytag \
src/Makefile.doxysearch
-rm -f Makefile src/Makefile examples/Makefile doc/Makefile
-rm -f src/doxygen.pro src/doxytag.pro src/doxysearch.pro
-rm -f src/version.cpp
docs: FORCE
cd examples ; $(MAKE)
cd doc ; $(MAKE)
ps: 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/version.cpp: Makefile
echo "char versionString[]=\"$(VERSION)\";" > src/version.cpp
FORCE:
all: src\version.cpp
set TMAKEPATH=$(TMAKEPATH)
cd src
$(MAKE)
clean: FORCE
cd examples
$(MAKE) clean
cd ..
cd doc
$(MAKE) clean
cd ..
cd src
$(MAKE) clean
cd ..
-del bin\doxy*.*
-del objects\*.o
distclean: clean
-del src\Makefile.doxygen \
src\Makefile.doxytag \
src\Makefile.doxysearch
-del Makefile src\Makefile examples\Makefile doc\Makefile
-del src\doxygen.pro src\doxytag.pro src\doxysearch.pro
-del src\version.cpp
docs: FORCE
cd examples
$(MAKE)
cd ..
cd doc
$(MAKE)
cd ..
ps: docs
cd latex
$(MAKE)
src\version.cpp: Makefile
echo char versionString[]="$(VERSION)"; > src\version.cpp
FORCE:
# 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:
aix-g++
aix-xlc
dgux-g++
freebsd-g++
gnu-g++
hpux-acc
hpux-cc
hpux-g++
irix-64
irix-dcc
irix-g++
irix-n32
linux-g++
netbsd-g++
openbsd-g++
osf1-cxx
osf1-g++
qnx-g++
sco-g++
solaris-cc
solaris-g++
sunos-g++
ultrix-g++
unixware-g++
DOXYGEN Version 0.49-990728
DOXYGEN Version 0.49-990829
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (30 July 1999)
Dimitri van Heesch (29 August 1999)
0.49-990829
#! /bin/sh
#
# $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.
#
# shell script to configure doxygen
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
f_debug=NO
f_shared=YES
f_make=NO
f_perl=NO
f_qt_include=NO
f_qt_library=NO
f_plf_auto=NO
while test -n "$1"; do
case $1 in
--shared)
f_shared=YES
;;
--static)
f_shared=NO
;;
--release)
f_debug=NO
;;
--debug)
f_debug=YES
;;
--qt-includes)
shift; f_qt_include=$1
;;
--qt-libs)
shift; f_qt_library=$1
;;
--platform)
shift; f_platform=$1
;;
--make)
shift; f_make=$1
;;
--perl)
shift; f_perl=$1
;;
-h | -help | --help)
f_help=y
;;
*)
echo $1: unknown argument
f_help=y
f_error=y
;;
esac
shift
done
if test "$f_help" = y; then
cat <<EOF
Usage: $0 [--help] [--shared] [--static] [--release] [--debug]
[--perl name] [--make name] [--qt-includes name] [--qt-libs name]
[--platform target]
Options:
--help Print this message
--shared | --static Build using shared or static linking
[default: shared]
--release | --debug Build for release or debug
[default: release]
--perl name Use \`name' as the name of the perl interpreter
[default: autodetect]
--make name Use \`name' as the name of the make tool
[default: autodetect]
--qt-includes path Use \`path' as the path to the qt include directory
[default: autodetect]
--qt-libs path Use \`path' as the path to the qt library directory
[default: autodetect]
--platform target Do not detect platform but use \`target' instead.
See PLATFORMS for a list of possibilities
EOF
test "$f_error" = y && exit 1
exit 0;
fi
u_release=`(uname -r) 2>/dev/null` || u_release=unknown
u_system=`(uname -s) 2>/dev/null` || u_system=unknown
if test -z "$f_platform"; then
f_platforms="`cat PLATFORMS`"
case "$u_system:$u_release" in
AIX*)
f_platform=aix-xlc
;;
dgux:*)
f_platform=dgux-g++
;;
FreeBSD:*)
f_platform=freebsd-g++
;;
GNU:*)
f_platform=gnu-g++
;;
HP-UX:*)
f_platform=hpux-g++
;;
IRIX64:*)
f_platform=irix-64
;;
IRIX:*)
f_platform=irix-n32
;;
Linux:*)
f_platform=linux-g++
;;
NetBSD:*)
f_platform=netbsd-g++
;;
OpenBSD:*)
f_platform=openbsd-g++
;;
OSF1:*)
f_platform=osf1-g++
;;
QNX:*)
f_platform=qnx-g++
;;
*:3.2)
f_platform=sco-g++
;;
SunOS:4*)
f_platform=sunos-g++
;;
SunOS:5*)
f_platform=solaris-cc
;;
ULTRIX:*)
f_platform=ultrix-g++
;;
UNIX_SV:4.2*)
f_platform=unixware-g++
;;
*)
echo
echo "Your platform was not recognised by this configure script"
echo "Please use the -platform option to specify one of platforms"
echo "in this list:"
echo
for p in $f_platforms
do
echo " $0 $* -platform $p"
done
echo
exit 2
esac
echo " Autodetected platform $f_platform... "
f_plf_auto=YES
fi
if test "$f_plf_auto" = NO; then
echo -n " Checking for platform $f_platform... "
if test '!' -d tmake/lib/$f_platform; then
echo "not supported!"
echo
exit 2
fi
echo "supported"
fi
#- check for qt --------------------------------------------------------------
echo -n " Checking for Qt..."
if test "$f_qt_include" = NO; then
qt_incdirs="/usr/lib/qt/include /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt"
test -n "$QTDIR" && qt_incdirs="$QTDIR/include $QTDIR $qt_incdirs"
qt_incdir=NO
for i in $qt_incdirs; do
if test -r "$i/qlist.h"; then
qt_incdir=$i
break
else
echo "Tried include directory $i..."
fi
done
f_qt_include="$qt_incdir"
fi
if test "$f_qt_library" = NO; then
qt_libdirs="/usr/lib/qt/lib /usr/X11R6/lib /usr/lib /usr/local/qt/lib /usr/lib/qt"
if test -n "$LD_LIBRARY_PATH"; then
qt_ldpaths=`echo $LD_LIBRARY_PATH | sed 's%:% %'`
qt_libdirs="$qt_ldpaths $qt_libdirs"
fi
test -n "$QTDIR" && qt_libdirs="$QTDIR/lib $QTDIR $qt_libdirs"
qt_libdir=NO
for i in $qt_libdirs; do
try="ls -1 $i/libqt*"
if test=`eval $try 2>/dev/null`; then
qt_libdir=$i;
break
else
echo "Tried library directory $i..."
fi
done
f_qt_library="$qt_libdir"
fi
if test "$f_qt_include" = NO || test "$f_qt_library" = NO; then
if test "$f_qt_include" = NO && test "$f_qt_library" = NO; then
echo "not found!"
echo
elif test "$f_qt_include" = NO; then
echo "include files not found!"
else
echo "libraries not found!"
fi
exit 2
fi
echo "libraries: $f_qt_library"
echo " headers: $f_qt_include"
# - check for make ------------------------------------------------------------
echo -n " Checking for make tool... "
if test "$f_make" = NO; then
make_names="make gmake pmake"
make_dirs="/usr/bin /usr/local/bin /bin /sbin $bin_dirs"
make_prog=NO
for i in $make_names; do
for j in $make_dirs; do
if test -x "$j/$i"; then
make_prog="$j/$i"
break 2
fi
done
done
f_make="$make_prog"
fi
if test "$f_make" = NO; then
echo "not found!";
echo
exit 2
fi
echo "using $f_make"
# - check for perl ------------------------------------------------------------
echo -n " Checking for perl... "
if test "$f_perl" = NO; then
perl_names="perl perl5"
perl_dirs="/usr/bin /usr/local/bin /bin /sbin $bin_dirs"
perl_prog=NO
perl_found=NO
for i in $perl_names; do
for j in $perl_dirs; do
if test -x "$j/$i"; then
perl_found=YES
if $j/$i -e 'require 5.000;' 2>/dev/null ; then
perl_prog="$j/$i"
break 2
fi
fi
done
done
f_perl="$perl_prog"
fi
if test "$f_perl" = NO; then
if test "$perl_found" = YES; then
echo "version is too old (5.000 or higher is required)."
else
echo "not found!";
fi
echo
exit 2
fi
echo "using $f_perl";
# -----------------------------------------------------------------------------
test -f .makeconfig && rm .makeconfig
test -f .tmakeconfig && rm .tmakeconfig
cat > .makeconfig <<EOF
DOXYGEN = $PWD
TMAKEPATH = $PWD/tmake/lib/$f_platform
TMAKE = $PWD/tmake/bin/tmake
MAKE = $f_make
PERL = $f_perl
RM = rm -f
VERSION = `cat VERSION`
EOF
touch .tmakeconfig
if test "$f_shared" = NO; then
cat > .tmakeconfig <<EOF
TMAKE_LFLAGS = -static
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%'`
TIME=`date`
cat > $DST <<EOF
#
# This file was generated from `basename $i` on $TIME
#
EOF
cat .makeconfig $SRC >> $DST
echo " Created $DST from $SRC..."
done
for i in src/doxygen.pro.in src/doxytag.pro.in src/doxysearch.pro.in ; do
SRC=$i
DST=`echo $i|sed 's%\(.*\).in$%\1%'`
TIME=`date`
cat > $DST <<EOF
#
# This file was generated from `basename $i` on $TIME
#
EOF
if test "$f_debug" = NO; then
cat $SRC .tmakeconfig | sed -e "s/\$extraopts/release/g" >> $DST
else
cat $SRC .tmakeconfig | sed -e "s/\$extraopts/debug/g" >> $DST
fi
echo " Created $DST from $SRC..."
done
include ../Makefile.config
DOXYDIR=../bin
DOXYGEN_DOCDIR=..
all: FORCE
DOXYGEN_DOCDIR=$(DOXYGEN_DOCDIR); \
DOXYGEN_DOCDIR=$(DOXYGEN); \
export DOXYGEN_DOCDIR; \
VERSION=$(VERSION) ; \
export VERSION; \
$(DOXYDIR)/doxygen
$(DOXYGEN)/bin/doxygen
@rm -f ../latex/refman.tex
@cp doxygen_logo*.gif ../html
@cp Makefile.latex ../latex/Makefile
......
all: FORCE
set DOXYGEN_DOCDIR=file:///$(DOXYGEN)
set VERSION=$(VERSION)
$(DOXYGEN)\bin\doxygen
@del ..\latex\refman.tex
@copy doxygen_logo*.gif ..\html
@copy 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
@copy doxygen_logo.eps ..\latex
clean:
del /s /q ..\html ..\latex
FORCE:
......@@ -35,7 +35,7 @@ Values are sequences of non-blanks. If the value should contain one or more
blanks it must be surrounded by quotes (&quot;...&quot;).
Multiple lines can be concatenated by inserting a backslash (\\)
as the last character of a line.
Environment variables can expanded using the pattern \$(ENV_VARIABLE_NAME).
Environment variables can expanded using the pattern \c $(ENV_VARIABLE_NAME).
The configuration options can be divided into several categories.
Below is a list of tags that are recognized for each category.
......@@ -155,7 +155,7 @@ Below is a list of tags that are recognized for each category.
\addindex STRIP_FROM_PATH
If the \c FULL_PATH_NAMES tag is set to \c YES then the \c STRIP_FROM_PATH tag
can be used to strip a user defined part of the path. Stripping is
only done if the specified string matches the left-hand part of the
only done if one of the specified strings matches the left-hand part of the
path.
<dt>\c CLASS_DIAGRAMS <dd>
......@@ -164,6 +164,12 @@ Below is a list of tags that are recognized for each category.
generate a class diagram (in Html and LaTeX) for classes with base or
super classes. Setting the tag to \c NO turns the diagrams off.
<dt>\c SOURCE_BROWSER <dd>
\addindex SOURCE_BROWSER
If the \c SOURCE_BROWSER tag is set to \c YES than the body of a member or
function will be appended as a block of code to the documentation of.
that member or function.
<dt>\c CASE_SENSE_NAMES <dd>
\addindex CASE_SENSE_NAMES
If the \c CASE_SENSE_NAMES tag is set to \c NO (the default) then Doxygen
......@@ -179,6 +185,13 @@ Below is a list of tags that are recognized for each category.
which an include is specified. Set to NO to disable this.\n";
\sa Section \ref cmdclass "\\class".
<dt>\c JAVADOC_AUTOBRIEF <dd>
\addinex JAVADOC_AUTOBRIEF
If the JAVADOC_NO_AUTOBRIEF is set to YES (the default) then Doxygen
will interpret the first line (until the first dot) of a JavaDoc-style
comment as the brief description. If set to NO, the Javadoc-style will
behave just like the Qt-style comments.
</dl>
\subsection config_input Input related options
......@@ -226,12 +239,6 @@ Below is a list of tags that are recognized for each category.
directories that contain example code fragments that are included (see
the \\include command in section \ref cmdinclude "\\include").
<dt>\c INCLUDE_PATH <dd>
\addindex INCLUDE_PATH
The INCLUDE_PATH tag can be used to specify one or more directories that
contain include files that are not input files but should be processed by
the preprocessor.
<dt>\c INPUT_FILTER <dd>
\addindex INPUT_FILTER
The \c INPUT_FILTER tag can be used to specify a program that doxygen should
......@@ -298,6 +305,44 @@ Below is a list of tags that are recognized for each category.
Doxygen will replace them by respectively
the title of the page, the current date and time, or only the current date.
<dt>\c HTML_ALIGN_MEMBERS <dd>
If the \c HTML_ALIGN_MEMBERS tag is set to \c YES, the members of classes,
files or namespaces will be aligned in HTML using tables. If set to
NO a bullet list will be used.
\par Notice
Setting this tag to NO will become obsolete in the future, since I only
intent to support and test the aligned representation.
<dt>\c GENERATE_HTMLHELP <dd>
If the \c GENERATE_HTMLHELP tag is set to \c YES,
doxygen generates three additional HTML index files:
\c index.hhp, \c index.hhc, and \c index.hhk. The \c index.hhp is a
project file that can be read by
<a href="http://msdn.microsoft.com/workshop/author/htmlhelp">
Microsoft HTML help workshop</a>
\latexonly
(see http://msdn.microsoft.com/workshop/author/htmlhelp)
\endlatexonly
on Windows.
The HTML workshop contains a compiler that can convert all HTML output
generated by doxygen into a single compressed HTML file (.chm). Compressed
HTML files are now used as the Windows 98 help format, and will replace
the old windows help format (.hlp) on all Windows platforms in the future.
Compressed HTML files also contain an index, a table of contents,
and you can search for words in the documentation
(which basically renders \c doxysearch obsolete on Windows).
The HTML workshop also contains a viewer for compressed HTML files.
<dt>\c ALPHABETICAL_INDEX <dd>
If the \c ALPHABETICAL_INDEX tag is set to \c YES, an alphabetical index
of all compounds will be generated. Enable this if the project contains
a lot of classes, structs, unions or interfaces.
</dl>
\subsection latex_output LaTeX related options
......@@ -542,22 +587,22 @@ SEARCH_INCLUDES = YES
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = $(QTDIR)/
PREDEFINED = USE_TEMPLATECLASS Q_EXPORT= \
QArrayT=QArray \
QListT=QList \
QDictT=QDict \
QQueueT=QQueue \
QVectorT=QVector \
QPtrDictT=QPtrDict \
QIntDictT=QIntDict \
QStackT=QStack \
QDictIteratorT=QDictIterator \
QListIteratorT=QListIterator \
QCacheT=QCache \
QCacheIteratorT=QCacheIterator \
QIntCacheT=QIntCache \
QIntCacheIteratorT=QIntCacheIterator \
QIntDictIteratorT=QIntDictIterator \
QPtrDictIteratorT=QPtrDictIterator
QArrayT:=QArray \
QListT:=QList \
QDictT:=QDict \
QQueueT:=QQueue \
QVectorT:=QVector \
QPtrDictT:=QPtrDict \
QIntDictT:=QIntDict \
QStackT:=QStack \
QDictIteratorT:=QDictIterator \
QListIteratorT:=QListIterator \
QCacheT:=QCache \
QCacheIteratorT:=QCacheIterator \
QIntCacheT:=QIntCache \
QIntCacheIteratorT:=QIntCacheIterator \
QIntDictIteratorT:=QIntDictIterator \
QPtrDictIteratorT:=QPtrDictIterator
INPUT = $(QTDIR)/doc \
$(QTDIR)/src/widgets \
$(QTDIR)/src/kernel \
......
......@@ -23,10 +23,10 @@
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).
format (LaTeX) simulatiously (any 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>Allows documentation of files, namespaces, classes, structs, unions,
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
......@@ -46,7 +46,7 @@
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.
them to their equivalent Latex and man-page counterparts 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
......@@ -58,6 +58,8 @@
file.
<li>Documentation and search engine can be transferred to another
location or machine without regenerating the documentation.
<li>Doxygen can generate index and project files that can
be converted into compressed HTML by MicroSoft's HTML help workshop.
<li>Can cope with large projects easily.
</UL>
......
......@@ -116,6 +116,7 @@ Thanks go to:
(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>Harm van der Heijden for adding HTML help support.
<li>
Arnt Gulbrandsen,
Adam P. Jenkins,
......@@ -174,9 +175,9 @@ Feiyi Wang,
Robert J. Clark,
Matthias Baas,
Walter Mueller,
William van Dieten, and
Joshua Jensen and
many others for suggestions, patches and bug reports.
William van Dieten,
Joshua Jensen,
and many others for suggestions, patches and bug reports.
</ul>
*/
......@@ -79,15 +79,15 @@ The following binaries should now be available:
Doxygen was developed and tested under Linux using the following tools:
<ul>
<li>GCC version 2.8.1
<li>EGCS version 2.91.66
<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>GNU make version 3.76.1
<li>Perl version 5.005_02
<li>VIM version 5.4
<li>Netscape 4.04 & 4.5
<li>Troll Tech's tmake version 1.2 (included in the distribution)
<li>teTeX version 0.4
<li>teTeX version 0.9
</ul>
\htmlonly
......
......@@ -394,7 +394,7 @@ Formulas should be valid commands in \f$\mbox{\LaTeX}\f$'s math-mode.
\warning Currently, Doxygen is not very fault tolerant in recovering
from typos in formulas. It may have to be necessary to remove the
file formula.repository that is written in the html directory to
file <code>formula.repository</code> that is written in the html directory to
a rid of an incorrect formula
\subsection preprocessing Preprocessing
......@@ -404,7 +404,7 @@ build-in C-preprocessor.
By default doxygen does only partial preprocessing. That is, it
evaluates conditional compilation statements (like \#if) and
evaluates macro definitions, but is does not perform macro expansion.
evaluates macro definitions, but it does not perform macro expansion.
So if you have the following code fragment
\verbatim
......@@ -509,6 +509,25 @@ automatically by the preprocessor (like \c __cplusplus), have to be defined
by hand with doxygen's parser (this is done because these defines
are often platform/compiler specific).
In some cases you may want to substitute a macro name or function by
something else without exposing the result to further macro substitution.
You can do this but using the <code>:=</code> operator instead of
<code>=</code>
As an example suppose we have the following piece of code:
\verbatim
#define QList QListT
class QListT
{
};
\endverbatim
Then the only way to get doxygen interpret this as a class definition
for class QList is to define:
\verbatim
PREDEFINED = QListT:=QList
\endverbatim
As you can see doxygen's preprocessor is quite powerful, but if you want
even more flexibility you can always write an input filter and specify it on
the \c INPUT_FILTER flag.
......
......@@ -48,6 +48,13 @@
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).
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
documentation, because of possible ambiguities or lack of
information about the context in which the code fragment is found.
</ul>
......@@ -67,6 +74,6 @@ demonstrating the problem you have (make sure the example compiles!). It is
usually a good idea to send along the configuation file as well, but please
use doxygen with the <code>-s</code> flag while generating it.
My email address: <a href="mailto:dimitri@stack.nl">dimitri@stack.nl</a>
My e-mail address: <a href="mailto:dimitri@stack.nl">dimitri@stack.nl</a>
*/
include ../Makefile.config
DOXYDIR = ../bin
DOXYDIR = ../bin
all: class/html/index.html \
define/html/index.html \
......
......@@ -17,7 +17,6 @@ all: class/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
......@@ -83,9 +82,6 @@ tag/html/index.html: tag.cpp tag.cfg
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
......
REM make script for Microsoft Visual C++
set TMAKEPATH=..\tmake\lib\win32-msvc
nmake /NOLOGO -f Makefile.windows win32-msvc
REM use perl to create the config file
perl wintools\make.pl
type makeconfig Makefile.win.in >Makefile
type makeconfig src\Makefile.in >src\Makefile
type makeconfig examples\Makefile.win.in >examples\Makefile
type makeconfig doc\Makefile.win.in >doc\Makefile
copy src\doxygen.pro.in src\doxygen.pro
copy src\doxytag.pro.in src\doxytag.pro
copy src\doxysearch.pro.in src\doxysearch.pro
nmake
#
# $Id$
#
......@@ -12,8 +13,6 @@
# 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 $@
......@@ -37,7 +36,7 @@ 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 \
-$(RM) 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
......
This diff is collapsed.
......@@ -46,7 +46,8 @@ class ClassDef : public Definition
enum CompoundType { Class=Entry::CLASS_SEC,
Struct=Entry::STRUCT_SEC,
Union=Entry::UNION_SEC
Union=Entry::UNION_SEC,
Interface=Entry::INTERFACE_SEC
};
ClassDef(const char *name,CompoundType ct,const char *ref=0,const char *fName=0);
......@@ -54,7 +55,7 @@ class ClassDef : public Definition
//QCString classFile() const { return fileName; }
QCString getOutputFileBase() const { return fileName; }
CompoundType compoundType() const { return compType; }
const char *memberListFileName() const { return memListFileName; }
//const char *memberListFileName() const { return memListFileName; }
void insertBaseClass(ClassDef *,Protection p,Specifier s,const char *t=0);
BaseClassList *baseClasses() { return inherits; }
void insertSuperClass(ClassDef *,Protection p,Specifier s,const char *t=0);
......@@ -64,8 +65,8 @@ class ClassDef : public Definition
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; }
//bool isReference() { return !reference.isNull(); }
//const char *getReference() const { return reference; }
void insertMember(const MemberDef *);
void insertUsedFile(const char *);
void computeAnchors();
......@@ -74,29 +75,45 @@ class ClassDef : public Definition
void writeDocumentation(OutputList &ol);
void writeMemberList(OutputList &ol);
void writeIncludeFile(OutputList &ol);
//void writeMembersToContents();
void writeDeclaration(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 || Config::extractPrivateFlag) &&
hasDocumentation();
}
/*! 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)!='@' &&
(prot!=Private || Config::extractPrivateFlag) &&
hasDocumentation() && !isReference();
}
/*! a link to this class is possible (either within this project,
* or as a cross-reference to another project
*/
bool isLinkable()
{
return isLinkableInProject() || isReference();
}
bool hasNonReferenceSuperClass();
bool isVisibleExt()
{ return (Config::allExtFlag || hasNonReferenceSuperClass()) &&
!name().isEmpty() && name().at(0)!='@' &&
(prot!=Private || Config::extractPrivateFlag) &&
(hasDocumentation() || !Config::hideClassFlag ||
!reference.isNull());
}
/*! the class is visible in a class diagram, or class hierarchy */
bool isVisibleInHierarchy()
{ return // show all classes or a superclass is visible
(Config::allExtFlag || hasNonReferenceSuperClass()) &&
// and not an annonymous compound
name().find('@')==-1 &&
// and not privately inherited
(prot!=Private || Config::extractPrivateFlag) &&
// documented or show anyway or documentation is external
(hasDocumentation() || !Config::hideClassFlag || isReference());
}
// template argument functions
ArgumentList *templateArguments() const { return tempArgs; }
void setTemplateArguments(ArgumentList *al);
QCString getTemplateNameString();
//QCString getTemplateNameString();
void setNamespace(NamespaceDef *nd) { nspace = nd; }
NamespaceDef *getNamespace() { return nspace; }
......@@ -129,7 +146,7 @@ class ClassDef : public Definition
MemberNameInfoDict *allMemberNameInfoDict;
ArgumentList *tempArgs;
QStrList files;
QCString reference;
//QCString reference;
ExampleList *exampleList;
ExampleDict *exampleDict;
CompoundType compType;
......
......@@ -167,7 +167,7 @@ static void generateClassLink(OutputList &ol,const char *clName)
QCString className=clName;
if (className.length()==0) return;
ClassDef *cd;
if ((cd=getClass(className)) && cd->isVisible())
if ((cd=getClass(className)) && cd->isLinkable())
{
if (exampleBlock)
{
......@@ -202,8 +202,7 @@ static bool getLink(const char *className,
QCString m=memberName;
QCString c=className;
//printf("Trying `%s'::`%s'\n",c.data(),m.data());
if (getDefs(c,m,"()",md,cd,fd,nd) &&
(md->hasDocumentation() || md->isReference()))
if (getDefs(c,m,"()",md,cd,fd,nd) && md->isLinkable())
{
//printf("Found!\n");
if (exampleBlock)
......@@ -218,24 +217,35 @@ static bool getLink(const char *className,
anchorCount++;
}
}
if (cd)
{
result.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),
md->anchor(),memberName);
return TRUE;
}
else if (nd)
{
result.writeCodeLink(nd->getReference(),nd->getOutputFileBase(),
md->anchor(),memberName);
return TRUE;
}
else if (fd)
Definition *d=0;
if (cd) d=cd; else if (cd) d=nd; else d=fd;
if (d)
{
result.writeCodeLink(fd->getReference(),fd->getOutputFileBase(),
md->anchor(),memberName);
result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
md->anchor(),memberName);
return TRUE;
}
}
// if (cd)
// {
// result.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),
// md->anchor(),memberName);
// return TRUE;
// }
// else if (nd)
// {
// result.writeCodeLink(nd->getReference(),nd->getOutputFileBase(),
// md->anchor(),memberName);
// return TRUE;
// }
// else if (fd)
// {
// result.writeCodeLink(fd->getReference(),fd->getOutputFileBase(),
// md->anchor(),memberName);
// return TRUE;
// }
}
return FALSE;
......@@ -372,7 +382,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
bool ambig;
FileDef *fd;
if ((fd=findFileDef(&inputNameDict,yytext,ambig)) &&
fd->hasDocumentation())
fd->isLinkable())
{
code->writeCodeLink(0,fd->getOutputFileBase(),0,yytext);
}
......
......@@ -49,7 +49,6 @@ struct Config
static QCString genTagFile; // the tag file to generate
static QCString inputFilter; // a filter command that is applied to input files
static QCString paperType; // the page type to generate docs for
static QCString stripFromPath; // the string to strip from the file path
static QCString manExtension; // extension the man page files
static QStrList includePath; // list of include paths
static QStrList examplePath; // list of example paths
......@@ -61,6 +60,7 @@ struct Config
static QStrList extDocPathList; // list of external doc. directories.
static QStrList predefined; // list of predefined macro names.
static QStrList extraPackageList; // list of extra LaTeX packages.
static QStrList stripFromPath; // list of candidates to strip from the file path
static bool quietFlag; // generate progress messages flag
static bool warningFlag; // generate warnings flag
static bool recursiveFlag; // scan directories recursively
......@@ -89,6 +89,8 @@ struct Config
static bool htmlAlignMemberFlag; // align members in HTML using tables.
static bool includeSourceFlag; // include source code in documentation.
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?
};
#endif
This diff is collapsed.
......@@ -223,15 +223,17 @@ void parseFuncDecl(const QCString &decl,QCString &cl,QCString &ctl,QCString &t,
declinfoYYlex();
cl=scope.copy();
//printf("scope=`%s'\n",scope.data());
int il,ir;
if ((il=cl.find('<'))!=-1 && (ir=cl.findRev('>'))!=-1) // split up scope and template arguments
{
if (ir==-1) ir=cl.length(); else ir++;
ctl=removeRedundantWhiteSpace(cl.mid(il,ir-il));
cl=cl.left(il)+cl.right(cl.length()-ir);
ctl=removeRedundantWhiteSpace(cl.mid(il,ir-il+1));
cl=cl.left(il)+cl.right(cl.length()-ir-1);
}
//printf("cl=`%s' ctl=`%s'\n",cl.data(),ctl.data());
n=removeRedundantWhiteSpace(name);
if ((il=n.find('<'))!=-1 && n.left(8)!="operator")
if ((il=n.find('<'))!=-1 && (ir=n.findRev('>'))!=-1)
// TODO: handle cases like where n="operator<< <T>"
{
ftl=removeRedundantWhiteSpace(n.right(n.length()-il));
n=n.left(il);
......
......@@ -45,6 +45,7 @@ static QCString *copyArgValue;
static QCString curArgTypeName;
static QCString curArgDefValue;
static QCString curArgName;
static QCString curArgAttrib;
static int argRoundCount;
static int argSharpCount;
static int argCurlyCount;
......@@ -94,6 +95,12 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
<ReadFuncArgType>{B}* {
curArgTypeName+=" ";
}
<ReadFuncArgType>"["[^\]]*"]" {
if (curArgTypeName.stripWhiteSpace().isEmpty())
curArgAttrib=yytext;
else
curArgTypeName+=yytext;
}
<ReadFuncArgDef>"'"\\[0-7]{1,3}"'" { curArgDefValue+=yytext; }
<ReadFuncArgDef>"'"\\."'" { curArgDefValue+=yytext; }
<ReadFuncArgDef>"'"."'" { curArgDefValue+=yytext; }
......@@ -216,6 +223,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
)
) i--;
Argument *a = new Argument;
a->attrib = curArgAttrib.copy();
if (i>=0 && curArgTypeName.at(i)!=':')
{ // type contains a name
a->type = curArgTypeName.left(i+1).stripWhiteSpace();
......@@ -229,6 +237,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
//printf("----> Adding argument `%s' `%s' `%s'\n",a->type.data(),a->name.data(),a->defval.data());
argList->append(a);
}
curArgAttrib.resize(0);
curArgTypeName.resize(0);
curArgDefValue.resize(0);
if (*yytext==')')
......
......@@ -21,6 +21,8 @@ Define::Define()
{
undef=FALSE;
fileDef=0;
isPredefined=FALSE;
nonRecursive=FALSE;
}
Define::Define(const Define &d)
......
......@@ -42,6 +42,8 @@ class Define
int nargs;
bool undef;
bool varArgs;
bool isPredefined;
bool nonRecursive;
};
class DefineList : public QList<Define>
......
......@@ -26,44 +26,72 @@
class Definition
{
public:
//! create a new definition
/*! create a new definition */
Definition(const char *name,const char *b=0,const char *d=0);
//! destroys the definition
/*! destroys the definition */
virtual ~Definition();
//! returns the name of the definition
/*! returns the name of the definition */
QCString name() const { return n; }
//! returns the base name of the output file that contains this definition.
/*! returns the base name of the output file that contains this
* definition.
*/
virtual QCString getOutputFileBase() const = 0;
//! returns the detailed description of this definition
/*! returns the detailed description of this definition */
QCString documentation() const { return doc; }
//! returns the brief description of this definition
/*! returns the brief description of this definition */
QCString briefDescription() const { return brief; }
//! sets a new name for the definition
/*! sets a new \a name for the definition */
void setName(const char *name) { n=name; }
//! sets the documentation of this definition
/*! sets the documentation of this definition to \a d. */
void setDocumentation(const char *d)
{
doc=d; doc=doc.stripWhiteSpace();
doc=((QCString)d).stripWhiteSpace();
}
//! sets the brief description of this 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=b; brief=brief.stripWhiteSpace();
brief=((QCString) b).stripWhiteSpace();
int bl=brief.length();
if (bl>0 && brief.at(bl-1)!='.' && brief.at(bl-1)!='!' &&
brief.at(bl-1)!='?') brief+='.';
if (bl>0) // add puntuation if needed
{
switch(brief.at(bl-1))
{
case '.': case '!': case '?': break;
default: brief+='.'; break;
}
}
}
//! returns TRUE iff the definition is documented
/*! returns TRUE iff the definition is documented */
virtual bool hasDocumentation()
{ return !doc.isNull() || !brief.isNull() || Config::extractAllFlag; }
virtual bool isLinkableInProject() = 0;
virtual bool isLinkable() = 0;
bool isReference() { return !ref.isEmpty(); }
void setReference(const char *r) { ref=r; }
QCString getReference() { return ref; }
/*! returns the base file name that corresponds with the \a name of this
* definition. This replaces a number of special characters in the
* name by string that are more suitable to use in file names.
* The function getOutputFileBase() also uses this function in most cases.
* \sa setName(),Definition()
*/
QCString nameToFile(const char *name);
/*! Add the list of anchors that mark the sections that are found in the
* documentation.
*/
void addSectionsToDefinition(QList<QCString> *anchorList);
private:
QCString n; // name of the definition
QCString brief; // brief description
QCString doc; // detailed description
QCString ref; // reference to external documentation
SectionList *sectionList; // list of all sections
};
......
......@@ -148,7 +148,7 @@ static void writeVectorBox(QTextStream &t,DiagramItem *di,
static void writeMapArea(QTextStream &t,ClassDef *cd,int x,int y,int w,int h)
{
if (cd->hasDocumentation() || cd->isReference())
if (cd->isLinkable())
{
t << "<area ";
if (cd->getReference()) t << "doxygen=\"" << cd->getReference() << ":\" ";
......@@ -229,10 +229,7 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
while (bcd)
{
ClassDef *ccd=bcd->classDef;
if (ccd && ccd->isVisibleExt()
//(ccd->protection()!=Private || extractPrivateFlag) &&
//(ccd->hasDocumentation() || !hideClassFlag)
) count++;
if (ccd && ccd->isVisibleInHierarchy()) count++;
bcd=bcl->next();
}
if (count>0 && (prot!=Private || !doBases))
......@@ -252,10 +249,7 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
while (bcd)
{
ClassDef *ccd=bcd->classDef;
if (ccd && ccd->isVisibleExt()
//(ccd->protection()!=Private || extractPrivateFlag) &&
//(ccd->hasDocumentation() || !hideClassFlag)
)
if (ccd && ccd->isVisibleInHierarchy())
{
row->insertClass(di,ccd,doBases,bcd->prot,
doBases?bcd->virt:Normal,
......@@ -519,8 +513,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image,
if (bitmap)
{
bool hasDocs=di->getClassDef()->hasDocumentation() ||
di->getClassDef()->isReference();
bool hasDocs=di->getClassDef()->isLinkable();
writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,
hasDocs,di->getChildren()->count()>0);
if (!firstRow) writeMapArea(t,di->getClassDef(),x,y,cellWidth,cellHeight);
......@@ -553,8 +546,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image,
y = (baseRows-1)*(cellHeight+labelVertSpacing)+
di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
}
bool hasDocs=di->getClassDef()->hasDocumentation() ||
di->getClassDef()->isReference();
bool hasDocs=di->getClassDef()->isLinkable();
writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,hasDocs);
if (!firstRow) writeMapArea(t,di->getClassDef(),x,y,cellWidth,cellHeight);
}
......
This diff is collapsed.
......@@ -74,11 +74,11 @@ class BufStr : public QCString
const int spareRoom; // 10Kb extra room to avoid frequent resizing
};
typedef QList<QCString> StringList;
typedef QList<QCString> StringList;
typedef QDict<MemberDef> MemberDict;
typedef QDict<ClassDef> ClassDict;
typedef QDict<FileDef> FileDict;
typedef QDict<QCString> StringDict;
typedef QDict<QCString> StringDict;
typedef QDict<PageInfo> PageDict;
typedef QDict<GroupDef> GroupDict;
......@@ -123,5 +123,6 @@ extern int documentedFiles;
extern int documentedGroups;
extern int documentedNamespaces;
extern int documentedNamespaceMembers;
extern int documentedIncludeFiles;
#endif
......@@ -14,7 +14,7 @@
# TMake project file for doxygen
TEMPLATE = doxygen.t
CONFIG = console qt warn_on release #debug
CONFIG = console qt warn_on $extraopts
HEADERS = doxygen.h scanner.h classdef.h classlist.h memberdef.h \
membername.h index.h memberlist.h definition.h \
entry.h logos.h instdox.h message.h code.h \
......@@ -23,7 +23,7 @@ HEADERS = doxygen.h scanner.h classdef.h classlist.h memberdef.h \
filename.h defargs.h groupdef.h gifenc.h diagram.h image.h \
namespacedef.h version.h language.h translator.h \
translator_nl.h translator_se.h translator_cz.h translator_fr.h \
translator_it.h formula.h debug.h
translator_it.h formula.h debug.h membergroup.h htmlhelp.h
SOURCES = doxygen.cpp scanner.cpp classdef.cpp classlist.cpp memberdef.cpp \
membername.cpp index.cpp memberlist.cpp \
entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \
......@@ -32,7 +32,8 @@ SOURCES = doxygen.cpp scanner.cpp classdef.cpp classlist.cpp memberdef.cpp
cppvalue.cpp ce_lex.cpp ce_parse.cpp pre.cpp \
tag.cpp filename.cpp declinfo.cpp defargs.cpp define.cpp \
diagram.cpp gifenc.cpp image.cpp namespacedef.cpp \
version.cpp language.cpp definition.cpp formula.cpp debug.cpp
version.cpp language.cpp definition.cpp formula.cpp debug.cpp \
membergroup.cpp htmlhelp.cpp
win32:INCLUDEPATH += .
TARGET = ../bin/doxygen
OBJECTS_DIR = ../objects
......@@ -12,7 +12,7 @@
# All output generated with Doxygen is not covered by this license.
TEMPLATE = app.t
CONFIG = console warn_on release
CONFIG = console warn_on $extraopts
SOURCES = doxysearch.cpp
TARGET = ../bin/doxysearch
OBJECTS_DIR = ../objects
......@@ -324,14 +324,18 @@ QCString unhtmlify(const char *str)
classFile=yytext;
BEGIN( SearchMemberRef );
}
<SearchMemberRef>"#" {
<SearchMemberRef,ReadClassFile>"#" {
if (YY_START==ReadClassFile)
{
classFile=yyFileName;
}
BEGIN( ReadMemberRef );
}
<ReadMemberRef>[a-z_A-Z0-9]+ {
memberRef=yytext;
BEGIN( SearchMemberName );
}
<SearchMemberName>"<strong>" {
<SearchMemberName>"<strong>"|"<b>" { // <strong> is for qt-1.44, <b> is for qt-2.00
BEGIN( ReadMemberName );
}
<SearchMemberName>[a-z_A-Z~] {
......
......@@ -14,7 +14,7 @@
# TMake project file for doxytag
TEMPLATE = doxytag.t
CONFIG = console warn_on qt release
CONFIG = console warn_on qt $extraopts
HEADERS = suffixtree.h searchindex.h logos.h version.h
SOURCES = doxytag.cpp suffixtree.cpp searchindex.cpp \
logos.cpp version.cpp
......
......@@ -35,6 +35,7 @@ Entry::Entry()
argList->setAutoDelete(TRUE);
//printf("Entry::Entry() tArgList=0\n");
tArgList = 0;
mtArgList = 0;
mGrpId = -1;
reset();
}
......@@ -76,6 +77,7 @@ Entry::Entry(const Entry &e)
argList->setAutoDelete(TRUE);
//printf("Entry::Entry(copy) tArgList=0\n");
tArgList = 0;
mtArgList = 0;
// deep copy of the child entry list
QListIterator<Entry> eli(*e.sublist);
......@@ -131,6 +133,20 @@ Entry::Entry(const Entry &e)
//printf("appending argument %s %s\n",a->type.data(),a->name.data());
}
}
// deep copy template argument list
if (e.mtArgList)
{
mtArgList = new ArgumentList;
mtArgList->setAutoDelete(TRUE);
//printf("Entry::Entry(copy) new tArgList=%p\n",tArgList);
QListIterator<Argument> mtali(*e.mtArgList);
for (;(a=mtali.current());++mtali)
{
mtArgList->append(new Argument(*a));
//printf("appending argument %s %s\n",a->type.data(),a->name.data());
}
}
}
Entry::~Entry()
......@@ -143,6 +159,7 @@ Entry::~Entry()
delete anchors;
delete argList;
delete tArgList;
delete mtArgList;
num--;
}
......@@ -181,6 +198,8 @@ void Entry::reset()
brief.resize(0);
inside.resize(0);
fileName.resize(0);
scopeSpec.resize(0);
memberSpec.resize(0);
mGrpId = -1;
section = EMPTY_SEC;
sig = FALSE;
......@@ -195,6 +214,7 @@ void Entry::reset()
anchors->clear();
argList->clear();
if (tArgList) { delete tArgList; tArgList=0; }
if (mtArgList) { delete mtArgList; mtArgList=0; }
}
......@@ -262,5 +282,17 @@ int Entry::getSize()
a=tArgList->next();
}
}
if (mtArgList)
{
a=mtArgList->first();
while (e)
{
size+=sizeof(Argument);
size+=a->type.length()+1
+a->name.length()+1
+a->defval.length()+1;
a=mtArgList->next();
}
}
return size;
}
......@@ -36,6 +36,7 @@ struct Argument
Argument() {}
Argument(const Argument &a)
{
attrib=a.attrib.copy();
type=a.type.copy();
name=a.name.copy();
defval=a.defval.copy();
......@@ -44,6 +45,7 @@ struct Argument
{
if (this!=&a)
{
attrib=a.attrib.copy();
type=a.type.copy();
name=a.name.copy();
defval=a.defval.copy();
......@@ -51,6 +53,7 @@ struct Argument
return *this;
}
QCString attrib; // argument attribute (IDL only)
QCString type; // argument type
QCString name; // argument name (if any)
QCString defval; // argument default value (if any)
......@@ -101,8 +104,10 @@ class Entry
GROUPDOC_SEC = 0x00800000,
NAMESPACE_SEC = 0x01000000,
NAMESPACEDOC_SEC = 0x02000000,
COMPOUND_MASK = CLASS_SEC | STRUCT_SEC | UNION_SEC,
COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC,
INTERFACE_SEC = 0x04000000,
INTERFACEDOC_SEC = 0x08000000,
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,
FILE_MASK = SOURCE_SEC | HEADER_SEC
};
......@@ -128,6 +133,9 @@ class Entry
QCString args; // member argument string
ArgumentList *argList; // member arguments as a list
ArgumentList *tArgList; // template argument list
ArgumentList *mtArgList; // member template argument list
QCString scopeSpec; // template specialization of the scope
QCString memberSpec; // template specialization of the member
QCString program; // the program text
QCString body; // the function body
QCString includeFile; // include file (2 arg of \class, must be unique)
......@@ -138,7 +146,6 @@ class Entry
QCString inside; // name of the class in which documents are found
QCString exception; // throw specification
int mGrpId; // member group id
QCString mGrpHeader; // member group header
QList<Entry> *sublist; // entries that are children of this one
QList<BaseInfo> *extends; // list of base classes
QList<QCString> *groups; // list of groups this entry belongs to
......
......@@ -37,12 +37,13 @@ FileDef::FileDef(const char *p,const char *nm,const char *ref)
path=p;
filepath=path+nm;
filename=nameToFile(nm);
reference=ref;
setReference(ref);
memList = new MemberList;
classList = new ClassList;
includeList = new FileList;
defineList = new DefineList;
namespaceList = new NamespaceList;
namespaceDict = new NamespaceDict(7);
}
/*! destroy the file definition */
......@@ -52,6 +53,8 @@ FileDef::~FileDef()
delete classList;
delete includeList;
delete defineList;
delete namespaceList;
delete namespaceDict;
}
/*! Compute the HTML anchor names for all members in the class */
......@@ -105,7 +108,7 @@ void FileDef::writeDocumentation(OutputList &ol)
bool found=FALSE;
while (nd)
{
if (nd->isVisibleExt())
if (nd->name().find('@')==-1)
{
if (!found)
{
......@@ -115,16 +118,16 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startMemberList();
found=TRUE;
}
ol.startMemberItem();
ol.startMemberItem(FALSE,0);
ol.writeString("namespace ");
ol.insertMemberAlign();
if (nd->hasDocumentation())
if (nd->isLinkable())
{
ol.writeObjectLink(nd->getReference(),
nd->getOutputFileBase(),
0,
nd->name()
);
nd->getOutputFileBase(),
0,
nd->name()
);
}
else
{
......@@ -132,7 +135,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.docify(nd->name());
ol.endBold();
}
ol.endMemberItem();
ol.endMemberItem(FALSE,0,0,FALSE);
}
nd=namespaceList->next();
}
......@@ -144,7 +147,7 @@ void FileDef::writeDocumentation(OutputList &ol)
bool found=FALSE;
while (cd)
{
if ( cd->isVisibleExt() )
if (cd->name().find('@')==-1)
{
if (!found)
{
......@@ -154,22 +157,23 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startMemberList();
found=TRUE;
}
ol.startMemberItem();
ol.startMemberItem(FALSE,FALSE);
switch (cd->compoundType())
{
case ClassDef::Class: ol.writeString("class"); break;
case ClassDef::Struct: ol.writeString("struct"); break;
case ClassDef::Union: ol.writeString("union"); break;
case ClassDef::Interface: ol.writeString("interface"); break;
}
ol.writeString(" ");
ol.insertMemberAlign();
if (cd->hasDocumentation())
if (cd->isLinkable())
{
ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(),
0,
cd->name()
);
cd->getOutputFileBase(),
0,
cd->name()
);
}
else
{
......@@ -177,14 +181,14 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.docify(cd->name());
ol.endBold();
}
ol.endMemberItem();
ol.endMemberItem(FALSE,0,0,FALSE);
}
cd=classList->next();
if (found) ol.endMemberList();
}
if (found) ol.endMemberList();
}
writeMemberDecs(ol,0,0,this,0,0,memList);
memList->writeDeclarations(ol,0,0,this,0,0);
ol.endMemberSections();
//doc=doc.stripWhiteSpace();
......@@ -222,7 +226,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader();
parseText(ol,theTranslator->trDefineDocumentation());
ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Define);
memList->writeDocumentation(ol,name(),MemberDef::Define);
}
if ( memList->protoCount()>0 )
......@@ -231,7 +235,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader();
parseText(ol,theTranslator->trFunctionPrototypeDocumentation());
ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Prototype);
memList->writeDocumentation(ol,name(),MemberDef::Prototype);
}
if ( memList->typedefCount()>0 )
......@@ -240,7 +244,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader();
parseText(ol,theTranslator->trTypedefDocumentation());
ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Typedef);
memList->writeDocumentation(ol,name(),MemberDef::Typedef);
}
if ( memList->enumCount()>0 )
......@@ -249,7 +253,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader();
parseText(ol,theTranslator->trEnumerationTypeDocumentation());
ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Enumeration);
memList->writeDocumentation(ol,name(),MemberDef::Enumeration);
}
if ( memList->enumValueCount()>0 )
......@@ -258,16 +262,19 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader();
parseText(ol,theTranslator->trEnumerationValueDocumentation());
ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::EnumValue);
memList->writeDocumentation(ol,name(),MemberDef::EnumValue);
}
if ( memList->funcCount()>0 )
int cnt;
if ( (cnt=memList->funcCount()>0) )
{
ol.writeRuler();
ol.startGroupHeader();
parseText(ol,theTranslator->trFunctionDocumentation());
QCString cntString;
cntString.sprintf(" (%d)",cnt);
parseText(ol,theTranslator->trFunctionDocumentation()+cntString);
ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Function);
memList->writeDocumentation(ol,name(),MemberDef::Function);
}
if ( memList->varCount()>0 )
......@@ -276,7 +283,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader();
parseText(ol,theTranslator->trVariableDocumentation());
ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Variable);
memList->writeDocumentation(ol,name(),MemberDef::Variable);
}
// write Author section (Man only)
......@@ -304,7 +311,11 @@ void FileDef::insertClass(ClassDef *cd)
/*! Adds namespace definition \a nd to the list of all compounds of this file */
void FileDef::insertNamespace(NamespaceDef *nd)
{
namespaceList->append(nd);
if (!nd->name().isEmpty() && namespaceDict->find(nd->name())==0)
{
namespaceList->append(nd);
namespaceDict->insert(nd->name(),nd);
}
}
//-----------------------------------------------------------------------------
......
......@@ -31,6 +31,7 @@ class OutputList;
class DefineList;
class NamespaceDef;
class NamespaceList;
class NamespaceDict;
/*! \class FileDef filedef.h
\brief A File definition.
......@@ -95,15 +96,26 @@ class FileDef : public Definition
/*! Returns true iff this file was externally defined
(i.e. read from a tag file) */
bool isReference() { return !reference.isNull(); }
//bool isReference() { return !reference.isNull(); }
/*! Returns the reference name of the external file, if any or 0
if the file is not defined. */
const char *getReference() { return reference; }
//const char *getReference() { return reference; }
//void setFileType(FileType ft) { ftype = ft; }
//FileType fileType() const { return ftype; }
bool isLinkableInProject()
{
return hasDocumentation() && !isReference();
}
bool isLinkable()
{
return isLinkableInProject() || isReference();
}
void writeDocumentation(OutputList &ol);
friend void generatedFileNames();
void insertMember(MemberDef *fd);
......@@ -115,12 +127,13 @@ class FileDef : public Definition
MemberList *memList;
ClassList *classList;
FileList *includeList;
NamespaceDict *namespaceDict;
NamespaceList *namespaceList;
DefineList *defineList;
//QCString n;
//QCString doc;
//QCString brief;
QCString reference;
//QCString reference;
QCString path;
QCString filepath;
QCString diskname;
......
......@@ -150,11 +150,19 @@ void FormulaList::generateBitmaps(const char *path)
// Then we run ghostscript to convert the postscript to a pixmap
// The pixmap is a truecolor image, where only black and white are
// used.
#ifdef _WIN32
sprintf(gsCmd,"gswin32 -q -g%dx%d -r%dx%dx -sDEVICE=ppmraw "
"-sOutputFile=%s.pnm -DNOPAUSE -- %s.ps",
gx,gy,(int)(scaleFactor*72),(int)(scaleFactor*72),
formBase.data(),formBase.data()
);
#else
sprintf(gsCmd,"gs -q -g%dx%d -r%dx%dx -sDEVICE=ppmraw "
"-sOutputFile=%s.pnm -DNOPAUSE -- %s.ps",
gx,gy,(int)(scaleFactor*72),(int)(scaleFactor*72),
formBase.data(),formBase.data()
);
#endif
//printf("Running ghostscript...\n");
system(gsCmd);
f.setName(formBase+".pnm");
......
......@@ -122,9 +122,10 @@ void GroupDef::writeDocumentation(OutputList &ol)
QCString type;
switch (cd->compoundType())
{
case ClassDef::Class: type="class"; break;
case ClassDef::Struct: type="struct"; break;
case ClassDef::Union: type="union"; break;
case ClassDef::Class: type="class"; break;
case ClassDef::Struct: type="struct"; break;
case ClassDef::Union: type="union"; break;
case ClassDef::Interface: type="interface"; break;
}
ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->name());
ol.writeEndAnnoItem(cd->name());
......
......@@ -43,6 +43,14 @@ class GroupDef : public Definition
void addNamespace(const NamespaceDef *def);
void writeDocumentation(OutputList &ol);
int countMembers() const;
bool isLinkableInProject()
{
return hasDocumentation() && !isReference();
}
bool isLinkable()
{
return isLinkableInProject() || isReference();
}
private:
QCString title; // title of the group
......
......@@ -26,6 +26,10 @@
#include "logos.h"
#include "diagram.h"
#define GROUP_COLOR "#ff8080"
HtmlHelp *HtmlGenerator::htmlHelp = 0;
HtmlGenerator::HtmlGenerator() : OutputGenerator()
{
if (Config::headerFile.length()>0) header=fileToString(Config::headerFile);
......@@ -51,6 +55,7 @@ void HtmlGenerator::init()
exit(1);
}
writeLogo(Config::htmlOutputDir);
writeNullImage(Config::htmlOutputDir);
}
void HtmlGenerator::startFile(const char *name,const char *title,bool external)
......@@ -59,6 +64,7 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
lastTitle=title;
if (fileName.right(5)!=".html") fileName+=".html";
startPlainFile(fileName);
lastFile = fileName;
if (header.length()==0)
{
t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
......@@ -158,14 +164,16 @@ void HtmlGenerator::writeStyleInfo(int part)
if (part==0)
{
startPlainFile("doxygen.css");
t
//<< "H1 { border-width: thin; border: solid; text-align: center }" << endl
<< "H1 { text-align: center }" << endl
<< "A.el { text-decoration: none; font-weight: bold }" << endl
<< "DL.el { margin-left: -1cm }" << endl
<< "DIV.fragment { width: 100%; border: none; background-color: #eeeeee }" << endl
<< "DIV.in { margin-left: 16 }" << endl
<< endl;
t << "H1 { text-align: center }" << endl;
t << "A.el { text-decoration: none; font-weight: bold }" << endl;
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 << "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 << endl;
endPlainFile();
}
}
......@@ -209,6 +217,10 @@ void HtmlGenerator::writeIndexItem(const char *ref,const char *f,
{
t << "</b>";
}
//if (Config::htmlHelpFlag && f)
//{
// htmlHelp->addItem(name,((QCString)f)+".html");
//}
}
void HtmlGenerator::writeStartAnnoItem(const char *,const char *f,
......@@ -219,6 +231,10 @@ void HtmlGenerator::writeStartAnnoItem(const char *,const char *f,
t << "<a class=\"el\" href=\"" << f << ".html\">";
docify(name);
t << "</a> ";
//if (Config::htmlHelpFlag && f)
//{
// htmlHelp->addItem(name, ((QCString)f)+".html");
//}
}
void HtmlGenerator::writeObjectLink(const char *ref,const char *f,
......@@ -232,6 +248,10 @@ void HtmlGenerator::writeObjectLink(const char *ref,const char *f,
t << "\">";
docify(name);
t << "</a>";
//if (Config::htmlHelpFlag && f && htmlHelp->depth()>0)
//{
// htmlHelp->addItem(name,((QCString)f)+".html");
//}
}
void HtmlGenerator::startTextLink(const char *f,const char *anchor)
......@@ -401,11 +421,26 @@ void HtmlGenerator::endMemberList()
}
}
void HtmlGenerator::startMemberItem()
// annonymous type:
// 0 = single column right aligned
// 1 = double column left aligned
// 2 = single column left aligned
void HtmlGenerator::startMemberItem(bool inGroup,int annoType)
{
if (Config::htmlAlignMemberFlag)
{
t << "<tr><td align=right valign=top>";
t << "<tr>";
if (inGroup)
t << "<td bgcolor=\"" << GROUP_COLOR << "\">";
else
t << "<td>";
t << "<img src=\"null.gif\"></td><td><img src=\"null.gif\"></td>";
switch(annoType)
{
case 0: t << "<td nowrap align=right valign=top>"; break;
case 1: t << "<td nowrap>"; break;
default: t << "<td nowrap valign=top>"; break;
}
}
else
{
......@@ -413,28 +448,45 @@ void HtmlGenerator::startMemberItem()
}
}
void HtmlGenerator::insertMemberAlign()
void HtmlGenerator::endMemberItem(bool inGroup,
const char *fileName,const char *headerName,bool)
{
if (Config::htmlAlignMemberFlag)
{
t << "&nbsp;</td><td valign=top>";
if (inGroup)
{
t << "&nbsp;</td><td";
if (headerName)
{
t << " align=right valign=top><a class=\"gl\" href=\""
<< fileName << ".html\">&nbsp;" << headerName << "&nbsp;</a>";
}
else
{
t << ">";
}
t << "</td><td bgcolor=\"" << GROUP_COLOR
<< "\"><img src=\"null.gif\">";
}
t << "</td></tr>";
}
t << endl;
}
void HtmlGenerator::endMemberItem()
void HtmlGenerator::insertMemberAlign()
{
if (Config::htmlAlignMemberFlag)
{
t << "</td></tr>";
t << "&nbsp;</td><td valign=top>";
}
t << endl;
}
void HtmlGenerator::startMemberDescription()
{
if (Config::htmlAlignMemberFlag)
{
t << "<tr><td></td><td><font size=-1><em>";
t << "<tr><td><img src=null.gif></td><td><img src=null.gif></td>"
"<td></td><td><font size=-1><em>";
}
else
{
......@@ -458,7 +510,7 @@ void HtmlGenerator::startMemberSections()
{
if (Config::htmlAlignMemberFlag)
{
t << "<table border=0 cellpadding=0 cellspacing=1>" << endl;
t << "<table border=0 cellpadding=0 cellspacing=0>" << endl;
}
}
......@@ -474,7 +526,7 @@ void HtmlGenerator::startMemberHeader()
{
if (Config::htmlAlignMemberFlag)
{
t << "<tr><td colspan=2><br><h2>";
t << "<tr><td colspan=4><br><h2>";
}
else
{
......@@ -494,9 +546,35 @@ void HtmlGenerator::endMemberHeader()
}
}
void HtmlGenerator::memberGroupSpacing(bool inGroup)
{
t << "<tr><td";
if (inGroup)
{
// left vertical table line
t << " bgcolor=\"" << GROUP_COLOR << "\" height=1><img src=\"null.gif\">"
// white space
"</td><td colspan=4></td>"
// right vertical table line
"<td bgcolor=\"" << GROUP_COLOR << "\"><img src=\"null.gif\">";
}
else
{
// one pixel height of whitespace
t << " height=1>";
}
t << "</td></tr>" << endl;
}
void HtmlGenerator::memberGroupSeparator()
{
t << "<tr><td colspan=6 height=1 bgcolor=\"" << GROUP_COLOR
<< "\"><img src=\"null.gif\"></td></tr>" << endl;
}
void HtmlGenerator::startMemberSubtitle()
{
if (Config::htmlAlignMemberFlag) t << "<tr><td colspan=2>";
if (Config::htmlAlignMemberFlag) t << "<tr><td colspan=4>";
}
void HtmlGenerator::endMemberSubtitle()
......@@ -504,3 +582,36 @@ void HtmlGenerator::endMemberSubtitle()
if (Config::htmlAlignMemberFlag) t << "<br><br></td></tr>" << endl;
}
void HtmlGenerator::startIndexList()
{
t << "<ul>" << endl;
//if (Config::htmlHelpFlag)
//{
// if (htmlHelp->depth()==0) htmlHelp->addItem(lastTitle,lastFile);
// htmlHelp->incDepth();
//}
}
void HtmlGenerator::endIndexList()
{
t << "</ul>" << endl;
//if (Config::htmlHelpFlag)
//{
// htmlHelp->decDepth();
//}
}
void HtmlGenerator::startAlfabeticalIndexList()
{
t << "<multicol cols=5><dl compact>" << endl;
}
void HtmlGenerator::endAlfabeticalIndexList()
{
t << "</dl></multicol>" << endl;
}
void HtmlGenerator::writeIndexHeading(const char *s)
{
t << "<dt><b><big>" << s << "</big></b><dd>" << endl;
}
......@@ -21,6 +21,7 @@
#include "outputgen.h"
class QFile;
class HtmlHelp;
class HtmlGenerator : public OutputGenerator
{
......@@ -40,6 +41,7 @@ class HtmlGenerator : public OutputGenerator
OutputGenerator *get(OutputType o) { return (o==Html) ? this : 0; }
static void init();
//void generateExternalIndex();
void startFile(const char *name,const char *title,bool external);
void writeFooter(int,bool);
......@@ -59,12 +61,15 @@ class HtmlGenerator : public OutputGenerator
void newParagraph();
void writeString(const char *text);
void startIndexList() { t << "<ul>" << endl; }
void endIndexList() { t << "</ul>" << endl; }
void startIndexList();
void endIndexList();
void startItemList() { t << "<ul>" << endl; }
void endItemList() { t << "</ul>" << endl; }
void startEnumList() { t << "<ol>" << endl; }
void endEnumList() { t << "</ol>" << endl; }
void startAlfabeticalIndexList();
void endAlfabeticalIndexList();
void writeIndexHeading(const char *s);
void writeIndexItem(const char *ref,const char *file,const char *name);
void docify(const char *text);
void codify(const char *text);
......@@ -90,9 +95,11 @@ class HtmlGenerator : public OutputGenerator
void endMemberSubtitle();
void startMemberList();
void endMemberList();
void startMemberItem();
void startMemberItem(bool,int);
void memberGroupSpacing(bool inGroup);
void memberGroupSeparator();
void insertMemberAlign();
void endMemberItem();
void endMemberItem(bool,const char *,const char *,bool);
void startMemberDescription();
void endMemberDescription();
......@@ -115,7 +122,7 @@ class HtmlGenerator : public OutputGenerator
void writeChar(char c);
void startMemberDoc(const char *,const char *,const char *)
{ t << endl << "<h3>"; }
void endMemberDoc() { t << "</h3>" << endl; }
void endMemberDoc() { t << "</h3>" << endl; }
void writeDoxyAnchor(const char *clName,const char *anchor,
const char *name);
void writeLatexSpacing() {}
......@@ -168,6 +175,7 @@ class HtmlGenerator : public OutputGenerator
void startQuickIndexItem(const char *,const char *);
void endQuickIndexItem();
void writeFormula(const char *,const char *);
void writeNonBreakableSpace() { t << "&nbsp;&nbsp;&nbsp;"; }
//static void docifyStatic(QTextStream &t,const char *str);
......@@ -175,9 +183,12 @@ class HtmlGenerator : public OutputGenerator
QCString header;
QCString footer;
QCString lastTitle;
QCString lastFile;
HtmlGenerator &operator=(const HtmlGenerator &g);
HtmlGenerator(const HtmlGenerator &g);
static HtmlHelp *htmlHelp;
};
#endif
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.
*
* The code is this file is largely based on a contribution from
* Harm van der Heijden <H.v.d.Heijden@phys.tue.nl>
* Please send thanks to him and bug reports to me :-)
*/
#ifndef HTMLHELP_H
#define HTMLHELP_H
#include "qtbc.h"
#include <qtstream.h>
class QFile;
class HtmlHelpIndex;
/*! A class that generated the HTML Help specific files.
* These files can be used with the Microsoft HTML Help workshop
* to generate compressed HTML files (.chm).
*/
class HtmlHelp
{
public:
static HtmlHelp *getInstance();
void initialize();
void finalize();
int incContentsDepth();
int decContentsDepth();
/*! return the current depth of the contents tree */
int contentsDepth() { return dc; }
void addContentsItem(const char *name, const char *ref,
const char *anchor = 0);
void addIndexItem(const char *level1, const char *level2,
const char *ref, const char *anchor);
private:
HtmlHelp();
QFile *cf,*kf;
QTextStream cts,kts;
HtmlHelpIndex *index;
int dc;
static HtmlHelp *theInstance;
};
#endif /* HTMLHELP_H */
This diff is collapsed.
......@@ -43,6 +43,7 @@ class OutputList;
void writeIndex(OutputList &ol);
void writeHierarchicalIndex(OutputList &ol);
void writeAlphabeticalIndex(OutputList &ol);
void writeClassHierarchy(OutputList &ol);
void writeFileIndex(OutputList &ol);
void writeAnnotatedIndex(OutputList &ol);
......@@ -66,5 +67,6 @@ int countGroups();
int countNamespaces();
int countAnnotatedClasses();
int countNamespaceMembers();
int countIncludeFiles();
#endif
......@@ -49,6 +49,7 @@ LatexGenerator::LatexGenerator()
{
dir=Config::latexOutputDir;
col=0;
insideTabbing=FALSE;
}
LatexGenerator::~LatexGenerator()
......@@ -196,7 +197,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
bool found=FALSE;
while (gd && !found)
{
if (gd->hasDocumentation() || gd->countMembers()>0)
if (gd->isLinkableInProject() || gd->countMembers()>0)
{
if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Module Documentation}\n";
......@@ -212,7 +213,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
bool found=FALSE;
while (nd && !found)
{
if (nd->hasDocumentation())
if (nd->isLinkableInProject())
{
if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; // Namespace Documentation}\n":
......@@ -228,7 +229,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
bool found=FALSE;
while (cd && !found)
{
if (!cd->isReference() && cd->isVisible())
if (cd->isLinkableInProject())
{
if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Compound Documentation}\n";
......@@ -247,7 +248,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
FileDef *fd=fn->first();
while (fd)
{
if (fd->hasDocumentation() && !fd->isReference())
if (fd->isLinkableInProject())
{
if (isFirst)
{
......@@ -317,7 +318,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
bool found=FALSE;
while (gd && !found)
{
if (gd->hasDocumentation() || gd->countMembers()>0)
if (gd->isLinkableInProject() || gd->countMembers()>0)
{
t << "}\n\\input{" << gd->getOutputFileBase() << "}\n";
found=TRUE;
......@@ -326,7 +327,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
}
while (gd)
{
if (gd->hasDocumentation() || gd->countMembers()>0)
if (gd->isLinkableInProject() || gd->countMembers()>0)
{
if (Config::compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << gd->getOutputFileBase() << "}\n";
......@@ -341,7 +342,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
bool found=FALSE;
while (nd && !found)
{
if (nd->hasDocumentation() || nd->countMembers()>0)
if (nd->isLinkableInProject() || nd->countMembers()>0)
{
t << "}\n\\input{" << nd->getOutputFileBase() << "}\n";
found=TRUE;
......@@ -350,7 +351,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
}
while (nd)
{
if (nd->hasDocumentation() || nd->countMembers()>0)
if (nd->isLinkableInProject() || nd->countMembers()>0)
{
if (Config::compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << nd->getOutputFileBase() << "}\n";
......@@ -365,11 +366,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
bool found=FALSE;
while (cd && !found)
{
//if (cd->classFile()[0]!='@' && !cd->getReference() &&
// (cd->hasDocumentation() || !hideClassFlag) &&
// (cd->protection()!=Private || extractPrivateFlag)
// )
if (!cd->isReference() && cd->isVisible())
if (cd->isLinkableInProject())
{
t << "}\n\\input{" << cd->getOutputFileBase() << "}\n";
found=TRUE;
......@@ -378,11 +375,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
}
while (cd)
{
//if (cd->classFile()[0]!='@' && !cd->getReference() &&
// (cd->hasDocumentation() || !hideClassFlag) &&
// (cd->protection()!=Private || extractPrivateFlag)
// )
if (!cd->isReference() && cd->isVisible())
if (cd->isLinkableInProject())
{
if (Config::compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << cd->getOutputFileBase() << "}\n";
......@@ -400,7 +393,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
FileDef *fd=fn->first();
while (fd)
{
if (fd->hasDocumentation() && !fd->isReference())
if (fd->isLinkableInProject())
{
if (isFirst)
{
......@@ -791,13 +784,18 @@ void LatexGenerator::docify(const char *str)
case '^': t << "$^\\wedge$"; break;
case '&': t << "\\&"; break;
case '*': t << "$\\ast$"; break;
case '_': t << "\\_\\-"; break;
case '_': t << "\\_";
if (!insideTabbing) t << "\\-";
break;
case '{': t << "\\{"; break;
case '}': t << "\\}"; break;
case '<': t << "$<$"; break;
case '>': t << "$>$"; break;
case '|': t << "$|$"; break;
case '~': t << "$\\sim$"; break;
case ']': if (pc=='[') t << "$\\,$";
t << "]";
break;
case '-': if (*p=='>')
{ t << " $\\rightarrow$ "; p++; }
else
......@@ -824,7 +822,7 @@ void LatexGenerator::docify(const char *str)
}
else // ascii char => see if we can insert hypenation hint
{
if (isupper(c) && islower(pc)) t << "\\-";
if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-";
t << (char)c;
}
}
......@@ -900,7 +898,7 @@ void LatexGenerator::docify(const char *str)
default: // normal ascii char
{
// see if we can insert an hyphenation hint
if (isupper(c) && islower(pc)) t << "\\-";
if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-";
t << (char)c;
}
}
......@@ -955,3 +953,56 @@ void LatexGenerator::writeFormula(const char *,const char *text)
{
t << text;
}
void LatexGenerator::startMemberItem(bool,int annType)
{
if (!insideTabbing)
{
t << "\\item " << endl;
switch(annType)
{
case 0: break;
case 1:
default:
t << "\\begin{tabbing}" << endl;
t << "xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=\\kill" << endl;
insideTabbing=TRUE;
break;
}
}
}
void LatexGenerator::endMemberItem(bool,const char *,const char *,bool endItem)
{
if (endItem)
{
t << endl << "\\end{tabbing}";
insideTabbing=FALSE;
}
if (insideTabbing)
{
t << "\\\\";
}
t << endl;
}
void LatexGenerator::writeNonBreakableSpace()
{
if (insideTabbing)
t << "\\>";
else
t << "\\ ";
}
void LatexGenerator::startMemberList()
{
if (!insideTabbing)
t << "\\begin{CompactItemize}" << endl;
}
void LatexGenerator::endMemberList()
{
if (!insideTabbing)
t << "\\end{CompactItemize}" << endl;
}
......@@ -63,6 +63,9 @@ 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 writeIndexHeading(const char *) {}
void writeIndexItem(const char *ref,const char *file,const char *name);
void docify(const char *text);
void codify(const char *text);
......@@ -85,10 +88,12 @@ class LatexGenerator : public OutputGenerator
void endMemberHeader() { endGroupHeader(); }
void startMemberSubtitle() {}
void endMemberSubtitle() {}
void startMemberList() { t << "\\begin{CompactItemize}" << endl; }
void endMemberList() { t << "\\end{CompactItemize}" << endl; }
void startMemberItem() { t << "\\item " << endl; }
void endMemberItem() { t << endl; }
void startMemberList();
void endMemberList();
void startMemberItem(bool,int);
void endMemberItem(bool,const char *,const char *,bool);
void memberGroupSpacing(bool) {}
void memberGroupSeparator() {}
void insertMemberAlign() {}
void writeRuler() { t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}"; }
......@@ -173,6 +178,7 @@ class LatexGenerator : public OutputGenerator
void startQuickIndexItem(const char *,const char *) {}
void endQuickIndexItem() {}
void writeFormula(const char *,const char *);
void writeNonBreakableSpace();
//static void docifyStatic(QTextStream &t,const char *str);
......@@ -180,6 +186,7 @@ class LatexGenerator : public OutputGenerator
LatexGenerator(const LatexGenerator &);
LatexGenerator &operator=(const LatexGenerator &);
int col;
bool insideTabbing;
};
#endif
......@@ -19,6 +19,15 @@
#include "qtbc.h"
#include <qfile.h>
unsigned char null_data[] = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0xff,
0x00, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00,
0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
0x00, 0x02, 0x02, 0x44, 0x01, 0x00, 0x3b
};
unsigned int null_len = 43;
unsigned char logo_data[] = {
0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x76, 0x00, 0x35, 0x00, 0xf7, 0x00,
0x00, 0x31, 0x7b, 0x6b, 0x31, 0x7b, 0x73, 0x31, 0x84, 0x7b, 0x31, 0x84,
......@@ -490,6 +499,18 @@ unsigned char search_data[] = {
};
unsigned int search_len = 2010;
void writeNullImage(const char *dir)
{
QCString fileName=(QCString)dir+"/null.gif";
QFile f(fileName);
if (f.open(IO_WriteOnly))
f.writeBlock((char *)null_data,null_len);
else
{
fprintf(stderr,"Warning: Cannot open file %s for writing\n",fileName.data());
}
f.close();
}
void writeLogo(const char *dir)
{
......
......@@ -18,6 +18,7 @@
#define LOGOS_H
extern void writeLogo(const char *dir);
extern void writeNullImage(const char *dir);
extern void writeSearchButton(const char *dir);
#endif
......@@ -31,6 +31,7 @@ ManGenerator::ManGenerator() : OutputGenerator()
paragraph=FALSE;
col=0;
upperCase=FALSE;
insideTabbing=FALSE;
}
ManGenerator::~ManGenerator()
......@@ -342,3 +343,38 @@ void ManGenerator::endDescItem()
t << "\" 1c" << endl;
firstCol=TRUE;
}
void ManGenerator::startMemberItem(bool,int annType)
{
if (firstCol && !insideTabbing) t << ".in +1c\n";
t << "\n.ti -1c\n.RI \"";
firstCol=FALSE;
if (annType!=0) insideTabbing=TRUE;
}
void ManGenerator::endMemberItem(bool,const char *,const char *,bool endItem)
{
if (endItem)
{
insideTabbing=FALSE;
t << "\"\n.br\n.RI \"";
}
t << "\"\n.br";
}
void ManGenerator::startMemberList()
{
if (!insideTabbing)
{
t << "\n.in +1c"; firstCol=FALSE;
}
}
void ManGenerator::endMemberList()
{
if (!insideTabbing)
{
t << "\n.in -1c"; firstCol=FALSE;
}
}
......@@ -63,6 +63,9 @@ class ManGenerator : public OutputGenerator
void endItemList() {}
void startEnumList() {}
void endEnumList() {}
void startAlfabeticalIndexList() {}
void endAlfabeticalIndexList() {}
void writeIndexHeading(const char *) {}
void writeIndexItem(const char *ref,const char *file,const char *name);
void docify(const char *text);
void codify(const char *text);
......@@ -85,13 +88,12 @@ class ManGenerator : public OutputGenerator
void startMemberSubtitle() {}
void endMemberSubtitle() {}
void writeListItem();
void startMemberList() { t << "\n.in +1c"; firstCol=FALSE; }
void endMemberList() { t << "\n.in -1c"; firstCol=FALSE; }
void startMemberItem() { if (firstCol) t << ".in +1c";
t << "\n.ti -1c\n.RI \"";
firstCol=FALSE;
}
void endMemberItem() { t << "\"\n.br"; }
void startMemberList();
void endMemberList();
void startMemberItem(bool,int);
void endMemberItem(bool,const char *,const char *,bool);
void memberGroupSpacing(bool) {}
void memberGroupSeparator() {}
void writeRuler() {}
void writeAnchor(const char *) {}
void startCodeFragment();
......@@ -164,12 +166,14 @@ class ManGenerator : public OutputGenerator
void startQuickIndexItem(const char *,const char *) {}
void endQuickIndexItem() {}
void writeFormula(const char *,const char *) {}
void writeNonBreakableSpace() { t << " "; }
private:
bool firstCol;
bool paragraph;
int col;
bool upperCase;
bool insideTabbing;
ManGenerator(const ManGenerator &g);
ManGenerator &operator=(const ManGenerator &g);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -50,10 +50,6 @@ MemberNameInfo::MemberNameInfo(const char *n) : QList<MemberInfo>()
setAutoDelete(TRUE);
}
MemberNameInfo::~MemberNameInfo()
{
}
int MemberNameInfo::compareItems(GCI item1, GCI item2)
{
MemberInfo *m1=(MemberInfo *)item1;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#! Use the common Unix template
#$ IncludeTemplate("../unix/app.t");
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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