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: INSTALLATION INSTRUCTIONS FOR UNIX:
----------------------------------- -----------------------------------
1. Unpack the archive, unless you already have: 1. Unpack the archive, unless you already have:
gunzip doxygen-0.49-990728.src.tar.gz # uncompress the archive gunzip doxygen-0.49-990829.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-990728.src.tar # unpack it tar xf doxygen-0.49-990829.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 2. Run the configure script:
installed in one single directory. In this case I suggest to create a
local qt directory to which the QTDIR variable should point. Then sh ./configure
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. 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: 3. Compile the program by running make:
make
You'll see a list of all supported platforms/compiler combinations. make
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, The program should compile without problems and three binaries (doxygen,
doxytag, and doxysearch) should be available in the bin directory of the doxytag, and doxysearch) should be available in the bin directory of the
...@@ -40,16 +36,12 @@ INSTALLATION INSTRUCTIONS FOR UNIX: ...@@ -40,16 +36,12 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
5. Generate the user manual. 5. Generate the user manual.
type: make docs
make docs
to let doxygen generate the HTML and LaTeX documentation. to let doxygen generate the HTML and LaTeX documentation.
(you will need the stream editor `sed' for this) (you will need the stream editor `sed' for this)
type: make ps
make ps
to generate a postscript version of the manual. to generate a postscript version of the manual.
(you will need latex and dvips for this) (you will need latex and dvips for this)
...@@ -65,27 +57,40 @@ INSTALLATION INSTRUCTIONS FOR UNIX: ...@@ -65,27 +57,40 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
INSTALLATION INSTRUCTIONS FOR WINDOWS: INSTALLATION INSTRUCTIONS FOR WINDOWS:
-------------------------------------- --------------------------------------
Currently, only Microsoft Visual C++ version 5.0 is supported. For other Currently, only Microsoft Visual C++ (version 5.0) is supported.
platforms you may need to edit the Makefiles a bit. Let me know what you (For other platforms you may need to edit the perl script in wintools/make.pl
had to change if you got Doxygen working with another windows compiler. 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: You will need to install the windows/dos versions of following tools:
- Perl 5.0+ - Perl 5.0+
- flex (you can use the DJGPP version) You can download it at: http://www.ActiveState.com/pw32/
- bison (you can use the DJGPP version, but you need to copy - the GNU tools flex, bison and sed.
lib\bison.sim to c:\djgpp\lib\bison.simple and To get these working on Windows you can install the cygwin tools.
lib\bison.hai to c:\djgpp\lib\bison.hairy. You can download them at: http://sourceware.cygnus.com/cygwin/
The paths seem to be hardcoded in the executable) Make sure the BISONLIB environment variable points to the
- Qt (Hint: only the tools section is required, so you can use the free location where bison.simple and bison.hairy are located.
X-windows version as well!) - Qt-1.xx (Qt-2.xx should also work, but I didn't test it for Windows)
- Microsoft Visual C++ version 5.0, use the vcvars32.bat to set the environment (Hint: only the tools section is required, so you can use the free
variables. 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 - If you used WinZip to extract the tar archive it will (apparently) not
create empty folders, so you have to add the folders create empty folders, so you have to add the folders
`objects' and `bin' manually in the root of the distribution before `objects' and `bin' manually in the root of the distribution before
compiling. 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: 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 ...@@ -96,23 +101,37 @@ This should build the executables doxygen.exe, doxytag.exe, and doxysearch.exe
To build the examples type: 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 KNOWN CONFIGURATION PROBLEMS
QT RELATED PROBLEMS:
- Qt-2.01 contains a bug that
HTML RELATED PROBLEMS: HTML RELATED PROBLEMS:
- the indent continuously increases. - the indent continuously increases.
This seems to be a problem that can be observed with Netscape 4.01. 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. It is not present in many later and earlier versions I tested.
LATEX RELATED PROBLEMS: LATEX RELATED PROBLEMS:
- the LaTeX translation of HTML tables doesn't seem to work for all - 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) 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 - the file a4wide.sty is not available for all distributions. If
your distribution does not have it please select another paper type 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. - the file fancyheader.sty is known as fancyhdr.sty on some systems.
Please change that in src/latexgen.cpp Please change that in src/latexgen.cpp
...@@ -154,4 +173,4 @@ The latest version of doxygen can be obtained at ...@@ -154,4 +173,4 @@ The latest version of doxygen can be obtained at
Enjoy, 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. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, 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 all: FORCE
DOXYGEN_DOCDIR=$(DOXYGEN_DOCDIR); \ DOXYGEN_DOCDIR=$(DOXYGEN); \
export DOXYGEN_DOCDIR; \ export DOXYGEN_DOCDIR; \
VERSION=$(VERSION) ; \ VERSION=$(VERSION) ; \
export VERSION; \ export VERSION; \
$(DOXYDIR)/doxygen $(DOXYGEN)/bin/doxygen
@rm -f ../latex/refman.tex @rm -f ../latex/refman.tex
@cp doxygen_logo*.gif ../html @cp doxygen_logo*.gif ../html
@cp Makefile.latex ../latex/Makefile @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 ...@@ -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;). blanks it must be surrounded by quotes (&quot;...&quot;).
Multiple lines can be concatenated by inserting a backslash (\\) Multiple lines can be concatenated by inserting a backslash (\\)
as the last character of a line. 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. The configuration options can be divided into several categories.
Below is a list of tags that are recognized for each category. 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. ...@@ -155,7 +155,7 @@ Below is a list of tags that are recognized for each category.
\addindex STRIP_FROM_PATH \addindex STRIP_FROM_PATH
If the \c FULL_PATH_NAMES tag is set to \c YES then the \c STRIP_FROM_PATH tag 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 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. path.
<dt>\c CLASS_DIAGRAMS <dd> <dt>\c CLASS_DIAGRAMS <dd>
...@@ -164,6 +164,12 @@ Below is a list of tags that are recognized for each category. ...@@ -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 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. 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> <dt>\c CASE_SENSE_NAMES <dd>
\addindex CASE_SENSE_NAMES \addindex CASE_SENSE_NAMES
If the \c CASE_SENSE_NAMES tag is set to \c NO (the default) then Doxygen 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. ...@@ -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"; which an include is specified. Set to NO to disable this.\n";
\sa Section \ref cmdclass "\\class". \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> </dl>
\subsection config_input Input related options \subsection config_input Input related options
...@@ -226,12 +239,6 @@ Below is a list of tags that are recognized for each category. ...@@ -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 directories that contain example code fragments that are included (see
the \\include command in section \ref cmdinclude "\\include"). 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> <dt>\c INPUT_FILTER <dd>
\addindex INPUT_FILTER \addindex INPUT_FILTER
The \c INPUT_FILTER tag can be used to specify a program that doxygen should 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. ...@@ -298,6 +305,44 @@ Below is a list of tags that are recognized for each category.
Doxygen will replace them by respectively Doxygen will replace them by respectively
the title of the page, the current date and time, or only the current date. 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> </dl>
\subsection latex_output LaTeX related options \subsection latex_output LaTeX related options
...@@ -542,22 +587,22 @@ SEARCH_INCLUDES = YES ...@@ -542,22 +587,22 @@ SEARCH_INCLUDES = YES
FULL_PATH_NAMES = YES FULL_PATH_NAMES = YES
STRIP_FROM_PATH = $(QTDIR)/ STRIP_FROM_PATH = $(QTDIR)/
PREDEFINED = USE_TEMPLATECLASS Q_EXPORT= \ PREDEFINED = USE_TEMPLATECLASS Q_EXPORT= \
QArrayT=QArray \ QArrayT:=QArray \
QListT=QList \ QListT:=QList \
QDictT=QDict \ QDictT:=QDict \
QQueueT=QQueue \ QQueueT:=QQueue \
QVectorT=QVector \ QVectorT:=QVector \
QPtrDictT=QPtrDict \ QPtrDictT:=QPtrDict \
QIntDictT=QIntDict \ QIntDictT:=QIntDict \
QStackT=QStack \ QStackT:=QStack \
QDictIteratorT=QDictIterator \ QDictIteratorT:=QDictIterator \
QListIteratorT=QListIterator \ QListIteratorT:=QListIterator \
QCacheT=QCache \ QCacheT:=QCache \
QCacheIteratorT=QCacheIterator \ QCacheIteratorT:=QCacheIterator \
QIntCacheT=QIntCache \ QIntCacheT:=QIntCache \
QIntCacheIteratorT=QIntCacheIterator \ QIntCacheIteratorT:=QIntCacheIterator \
QIntDictIteratorT=QIntDictIterator \ QIntDictIteratorT:=QIntDictIterator \
QPtrDictIteratorT=QPtrDictIterator QPtrDictIteratorT:=QPtrDictIterator
INPUT = $(QTDIR)/doc \ INPUT = $(QTDIR)/doc \
$(QTDIR)/src/widgets \ $(QTDIR)/src/widgets \
$(QTDIR)/src/kernel \ $(QTDIR)/src/kernel \
......
...@@ -23,10 +23,10 @@ ...@@ -23,10 +23,10 @@
Plain text will do, but for more fancy or structured output HTML tags Plain text will do, but for more fancy or structured output HTML tags
and/or some of doxygen's special commands can be used. 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 <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. Both formats are optimized for ease of reading.
<li>Allows documentation of files, classes, templates, variables, functions, <li>Allows documentation of files, namespaces, classes, structs, unions,
typedefs, enums and defines. templates, variables, functions, typedefs, enums and defines.
<li>Includes a full C preprocessor to allow proper parsing of conditional <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. 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 <li>Automatically detects public, protected and private sections, as well as
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
of a member function or class. Most documentation systems (such as Javadoc) only of a member function or class. Most documentation systems (such as Javadoc) only
support the former, others (such as Qt) only the latter. support the former, others (such as Qt) only the latter.
<li>You can type normal HTML tags in your documentation. Doxygen will convert <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 <li>Allows references to documentation generated for other projects
(or another part of the same project) in a location independent way. (or another part of the same project) in a location independent way.
<li>Allows inclusion of source code examples that are automatically <li>Allows inclusion of source code examples that are automatically
...@@ -58,6 +58,8 @@ ...@@ -58,6 +58,8 @@
file. file.
<li>Documentation and search engine can be transferred to another <li>Documentation and search engine can be transferred to another
location or machine without regenerating the documentation. 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. <li>Can cope with large projects easily.
</UL> </UL>
......
...@@ -116,6 +116,7 @@ Thanks go to: ...@@ -116,6 +116,7 @@ Thanks go to:
(which is even useful for GUI-less applications like doxygen :-) (which is even useful for GUI-less applications like doxygen :-)
<li>My brother <a href="http://www.stack.nl/~fidget/index.html">Frank</a> <li>My brother <a href="http://www.stack.nl/~fidget/index.html">Frank</a>
for rendering the logos. for rendering the logos.
<li>Harm van der Heijden for adding HTML help support.
<li> <li>
Arnt Gulbrandsen, Arnt Gulbrandsen,
Adam P. Jenkins, Adam P. Jenkins,
...@@ -174,9 +175,9 @@ Feiyi Wang, ...@@ -174,9 +175,9 @@ Feiyi Wang,
Robert J. Clark, Robert J. Clark,
Matthias Baas, Matthias Baas,
Walter Mueller, Walter Mueller,
William van Dieten, and William van Dieten,
Joshua Jensen and Joshua Jensen,
many others for suggestions, patches and bug reports. and many others for suggestions, patches and bug reports.
</ul> </ul>
*/ */
...@@ -79,15 +79,15 @@ The following binaries should now be available: ...@@ -79,15 +79,15 @@ The following binaries should now be available:
Doxygen was developed and tested under Linux using the following tools: Doxygen was developed and tested under Linux using the following tools:
<ul> <ul>
<li>GCC version 2.8.1 <li>EGCS version 2.91.66
<li>GNU flex version 2.5.4 <li>GNU flex version 2.5.4
<li>GNU bison version 1.25 <li>GNU bison version 1.25
<li>GNU make version 3.77 <li>GNU make version 3.76.1
<li>Perl version 5.001 (patch level 1m) <li>Perl version 5.005_02
<li>VIM version 5.3 <li>VIM version 5.4
<li>Netscape 4.04 & 4.5 <li>Netscape 4.04 & 4.5
<li>Troll Tech's tmake version 1.2 (included in the distribution) <li>Troll Tech's tmake version 1.2 (included in the distribution)
<li>teTeX version 0.4 <li>teTeX version 0.9
</ul> </ul>
\htmlonly \htmlonly
......
...@@ -394,7 +394,7 @@ Formulas should be valid commands in \f$\mbox{\LaTeX}\f$'s math-mode. ...@@ -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 \warning Currently, Doxygen is not very fault tolerant in recovering
from typos in formulas. It may have to be necessary to remove the 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 a rid of an incorrect formula
\subsection preprocessing Preprocessing \subsection preprocessing Preprocessing
...@@ -404,7 +404,7 @@ build-in C-preprocessor. ...@@ -404,7 +404,7 @@ build-in C-preprocessor.
By default doxygen does only partial preprocessing. That is, it By default doxygen does only partial preprocessing. That is, it
evaluates conditional compilation statements (like \#if) and 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 So if you have the following code fragment
\verbatim \verbatim
...@@ -509,6 +509,25 @@ automatically by the preprocessor (like \c __cplusplus), have to be defined ...@@ -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 by hand with doxygen's parser (this is done because these defines
are often platform/compiler specific). 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 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 even more flexibility you can always write an input filter and specify it on
the \c INPUT_FILTER flag. the \c INPUT_FILTER flag.
......
...@@ -48,6 +48,13 @@ ...@@ -48,6 +48,13 @@
int *(a[20]); int *(a[20]);
\endverbatim \endverbatim
then doxygen will remove the braces and correctly parse the result. then doxygen will remove the braces and correctly parse the result.
<li>Not all names in code fragments that are 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> </ul>
...@@ -67,6 +74,6 @@ demonstrating the problem you have (make sure the example compiles!). It is ...@@ -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 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. 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 \ all: class/html/index.html \
define/html/index.html \ define/html/index.html \
......
...@@ -17,7 +17,6 @@ all: class/html/index.html \ ...@@ -17,7 +17,6 @@ all: class/html/index.html \
structcmd/html/index.html \ structcmd/html/index.html \
autolink/html/index.html \ autolink/html/index.html \
tag/html/index.html \ tag/html/index.html \
resdefine/html/index.html \
restypedef/html/index.html \ restypedef/html/index.html \
afterdoc/html/index.html afterdoc/html/index.html
...@@ -83,9 +82,6 @@ tag/html/index.html: tag.cpp tag.cfg ...@@ -83,9 +82,6 @@ tag/html/index.html: tag.cpp tag.cfg
runperl.bat runperl.bat
cd ..\.. cd ..\..
resdefine/html/index.html: resdefine.cpp resdefine.cfg
$(DOXYDIR)\doxygen resdefine.cfg
restypedef/html/index.html: restypedef.cpp restypedef.cfg restypedef/html/index.html: restypedef.cpp restypedef.cfg
$(DOXYDIR)\doxygen restypedef.cfg $(DOXYDIR)\doxygen restypedef.cfg
......
REM make script for Microsoft Visual C++ REM make script for Microsoft Visual C++
set TMAKEPATH=..\tmake\lib\win32-msvc REM use perl to create the config file
nmake /NOLOGO -f Makefile.windows win32-msvc 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$ # $Id$
# #
...@@ -12,8 +13,6 @@ ...@@ -12,8 +13,6 @@
# All output generated with Doxygen is not covered by this license. # All output generated with Doxygen is not covered by this license.
# #
include ../Makefile.config
all: Makefile.doxygen Makefile.doxytag Makefile.doxysearch Makefile all: Makefile.doxygen Makefile.doxytag Makefile.doxysearch Makefile
$(MAKE) -f Makefile.doxygen $@ $(MAKE) -f Makefile.doxygen $@
$(MAKE) -f Makefile.doxytag $@ $(MAKE) -f Makefile.doxytag $@
...@@ -37,7 +36,7 @@ clean: ...@@ -37,7 +36,7 @@ clean:
$(MAKE) -f Makefile.doxygen clean $(MAKE) -f Makefile.doxygen clean
$(MAKE) -f Makefile.doxytag clean $(MAKE) -f Makefile.doxytag clean
$(MAKE) -f Makefile.doxysearch 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 \ ce_parse.cpp ce_parse.h doxytag.cpp tag.cpp \
declinfo.cpp defargs.cpp declinfo.cpp defargs.cpp
......
This diff is collapsed.
...@@ -46,7 +46,8 @@ class ClassDef : public Definition ...@@ -46,7 +46,8 @@ class ClassDef : public Definition
enum CompoundType { Class=Entry::CLASS_SEC, enum CompoundType { Class=Entry::CLASS_SEC,
Struct=Entry::STRUCT_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); ClassDef(const char *name,CompoundType ct,const char *ref=0,const char *fName=0);
...@@ -54,7 +55,7 @@ class ClassDef : public Definition ...@@ -54,7 +55,7 @@ class ClassDef : public Definition
//QCString classFile() const { return fileName; } //QCString classFile() const { return fileName; }
QCString getOutputFileBase() const { return fileName; } QCString getOutputFileBase() const { return fileName; }
CompoundType compoundType() const { return compType; } 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); void insertBaseClass(ClassDef *,Protection p,Specifier s,const char *t=0);
BaseClassList *baseClasses() { return inherits; } BaseClassList *baseClasses() { return inherits; }
void insertSuperClass(ClassDef *,Protection p,Specifier s,const char *t=0); void insertSuperClass(ClassDef *,Protection p,Specifier s,const char *t=0);
...@@ -64,8 +65,8 @@ class ClassDef : public Definition ...@@ -64,8 +65,8 @@ class ClassDef : public Definition
void setIncludeName(const char *n_) { incName=n_; } void setIncludeName(const char *n_) { incName=n_; }
MemberNameInfoList *memberNameInfoList() { return allMemberNameInfoList; } MemberNameInfoList *memberNameInfoList() { return allMemberNameInfoList; }
MemberNameInfoDict *memberNameInfoDict() { return allMemberNameInfoDict; } MemberNameInfoDict *memberNameInfoDict() { return allMemberNameInfoDict; }
bool isReference() { return !reference.isNull(); } //bool isReference() { return !reference.isNull(); }
const char *getReference() const { return reference; } //const char *getReference() const { return reference; }
void insertMember(const MemberDef *); void insertMember(const MemberDef *);
void insertUsedFile(const char *); void insertUsedFile(const char *);
void computeAnchors(); void computeAnchors();
...@@ -74,29 +75,45 @@ class ClassDef : public Definition ...@@ -74,29 +75,45 @@ class ClassDef : public Definition
void writeDocumentation(OutputList &ol); void writeDocumentation(OutputList &ol);
void writeMemberList(OutputList &ol); void writeMemberList(OutputList &ol);
void writeIncludeFile(OutputList &ol); void writeIncludeFile(OutputList &ol);
//void writeMembersToContents();
void writeDeclaration(OutputList &ol);
bool addExample(const char *anchor,const char *name, const char *file); bool addExample(const char *anchor,const char *name, const char *file);
bool hasExamples(); bool hasExamples();
//void writeExample(OutputList &ol); //void writeExample(OutputList &ol);
void setProtection(Protection p) { prot=p; } void setProtection(Protection p) { prot=p; }
Protection protection() const { return prot; } Protection protection() const { return prot; }
bool isVisible() /*! a link to this class is possible within this project */
{ return !name().isEmpty() && name().at(0)!='@' && bool isLinkableInProject()
(prot!=Private || Config::extractPrivateFlag) && { int i = name().findRev("::");
hasDocumentation(); 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 hasNonReferenceSuperClass();
bool isVisibleExt() /*! the class is visible in a class diagram, or class hierarchy */
{ return (Config::allExtFlag || hasNonReferenceSuperClass()) && bool isVisibleInHierarchy()
!name().isEmpty() && name().at(0)!='@' && { return // show all classes or a superclass is visible
(prot!=Private || Config::extractPrivateFlag) && (Config::allExtFlag || hasNonReferenceSuperClass()) &&
(hasDocumentation() || !Config::hideClassFlag || // and not an annonymous compound
!reference.isNull()); 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 // template argument functions
ArgumentList *templateArguments() const { return tempArgs; } ArgumentList *templateArguments() const { return tempArgs; }
void setTemplateArguments(ArgumentList *al); void setTemplateArguments(ArgumentList *al);
QCString getTemplateNameString(); //QCString getTemplateNameString();
void setNamespace(NamespaceDef *nd) { nspace = nd; } void setNamespace(NamespaceDef *nd) { nspace = nd; }
NamespaceDef *getNamespace() { return nspace; } NamespaceDef *getNamespace() { return nspace; }
...@@ -129,7 +146,7 @@ class ClassDef : public Definition ...@@ -129,7 +146,7 @@ class ClassDef : public Definition
MemberNameInfoDict *allMemberNameInfoDict; MemberNameInfoDict *allMemberNameInfoDict;
ArgumentList *tempArgs; ArgumentList *tempArgs;
QStrList files; QStrList files;
QCString reference; //QCString reference;
ExampleList *exampleList; ExampleList *exampleList;
ExampleDict *exampleDict; ExampleDict *exampleDict;
CompoundType compType; CompoundType compType;
......
...@@ -167,7 +167,7 @@ static void generateClassLink(OutputList &ol,const char *clName) ...@@ -167,7 +167,7 @@ static void generateClassLink(OutputList &ol,const char *clName)
QCString className=clName; QCString className=clName;
if (className.length()==0) return; if (className.length()==0) return;
ClassDef *cd; ClassDef *cd;
if ((cd=getClass(className)) && cd->isVisible()) if ((cd=getClass(className)) && cd->isLinkable())
{ {
if (exampleBlock) if (exampleBlock)
{ {
...@@ -202,8 +202,7 @@ static bool getLink(const char *className, ...@@ -202,8 +202,7 @@ static bool getLink(const char *className,
QCString m=memberName; QCString m=memberName;
QCString c=className; QCString c=className;
//printf("Trying `%s'::`%s'\n",c.data(),m.data()); //printf("Trying `%s'::`%s'\n",c.data(),m.data());
if (getDefs(c,m,"()",md,cd,fd,nd) && if (getDefs(c,m,"()",md,cd,fd,nd) && md->isLinkable())
(md->hasDocumentation() || md->isReference()))
{ {
//printf("Found!\n"); //printf("Found!\n");
if (exampleBlock) if (exampleBlock)
...@@ -218,24 +217,35 @@ static bool getLink(const char *className, ...@@ -218,24 +217,35 @@ static bool getLink(const char *className,
anchorCount++; anchorCount++;
} }
} }
if (cd) Definition *d=0;
{ if (cd) d=cd; else if (cd) d=nd; else d=fd;
result.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),
md->anchor(),memberName); if (d)
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(), result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
md->anchor(),memberName); md->anchor(),memberName);
return TRUE; 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; return FALSE;
...@@ -372,7 +382,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -372,7 +382,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
bool ambig; bool ambig;
FileDef *fd; FileDef *fd;
if ((fd=findFileDef(&inputNameDict,yytext,ambig)) && if ((fd=findFileDef(&inputNameDict,yytext,ambig)) &&
fd->hasDocumentation()) fd->isLinkable())
{ {
code->writeCodeLink(0,fd->getOutputFileBase(),0,yytext); code->writeCodeLink(0,fd->getOutputFileBase(),0,yytext);
} }
......
...@@ -49,7 +49,6 @@ struct Config ...@@ -49,7 +49,6 @@ struct Config
static QCString genTagFile; // the tag file to generate static QCString genTagFile; // the tag file to generate
static QCString inputFilter; // a filter command that is applied to input files static QCString inputFilter; // a filter command that is applied to input files
static QCString paperType; // the page type to generate docs for 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 QCString manExtension; // extension the man page files
static QStrList includePath; // list of include paths static QStrList includePath; // list of include paths
static QStrList examplePath; // list of example paths static QStrList examplePath; // list of example paths
...@@ -61,6 +60,7 @@ struct Config ...@@ -61,6 +60,7 @@ struct Config
static QStrList extDocPathList; // list of external doc. directories. static QStrList extDocPathList; // list of external doc. directories.
static QStrList predefined; // list of predefined macro names. static QStrList predefined; // list of predefined macro names.
static QStrList extraPackageList; // list of extra LaTeX packages. 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 quietFlag; // generate progress messages flag
static bool warningFlag; // generate warnings flag static bool warningFlag; // generate warnings flag
static bool recursiveFlag; // scan directories recursively static bool recursiveFlag; // scan directories recursively
...@@ -89,6 +89,8 @@ struct Config ...@@ -89,6 +89,8 @@ struct Config
static bool htmlAlignMemberFlag; // align members in HTML using tables. static bool htmlAlignMemberFlag; // align members in HTML using tables.
static bool includeSourceFlag; // include source code in documentation. static bool includeSourceFlag; // include source code in documentation.
static bool autoBriefFlag; // javadoc comments behaves as Qt comments. 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 #endif
This diff is collapsed.
...@@ -223,15 +223,17 @@ void parseFuncDecl(const QCString &decl,QCString &cl,QCString &ctl,QCString &t, ...@@ -223,15 +223,17 @@ void parseFuncDecl(const QCString &decl,QCString &cl,QCString &ctl,QCString &t,
declinfoYYlex(); declinfoYYlex();
cl=scope.copy(); cl=scope.copy();
//printf("scope=`%s'\n",scope.data());
int il,ir; int il,ir;
if ((il=cl.find('<'))!=-1 && (ir=cl.findRev('>'))!=-1) // split up scope and template arguments 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+1));
ctl=removeRedundantWhiteSpace(cl.mid(il,ir-il)); cl=cl.left(il)+cl.right(cl.length()-ir-1);
cl=cl.left(il)+cl.right(cl.length()-ir);
} }
//printf("cl=`%s' ctl=`%s'\n",cl.data(),ctl.data());
n=removeRedundantWhiteSpace(name); 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)); ftl=removeRedundantWhiteSpace(n.right(n.length()-il));
n=n.left(il); n=n.left(il);
......
...@@ -45,6 +45,7 @@ static QCString *copyArgValue; ...@@ -45,6 +45,7 @@ static QCString *copyArgValue;
static QCString curArgTypeName; static QCString curArgTypeName;
static QCString curArgDefValue; static QCString curArgDefValue;
static QCString curArgName; static QCString curArgName;
static QCString curArgAttrib;
static int argRoundCount; static int argRoundCount;
static int argSharpCount; static int argSharpCount;
static int argCurlyCount; static int argCurlyCount;
...@@ -94,6 +95,12 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -94,6 +95,12 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
<ReadFuncArgType>{B}* { <ReadFuncArgType>{B}* {
curArgTypeName+=" "; curArgTypeName+=" ";
} }
<ReadFuncArgType>"["[^\]]*"]" {
if (curArgTypeName.stripWhiteSpace().isEmpty())
curArgAttrib=yytext;
else
curArgTypeName+=yytext;
}
<ReadFuncArgDef>"'"\\[0-7]{1,3}"'" { curArgDefValue+=yytext; } <ReadFuncArgDef>"'"\\[0-7]{1,3}"'" { curArgDefValue+=yytext; }
<ReadFuncArgDef>"'"\\."'" { curArgDefValue+=yytext; } <ReadFuncArgDef>"'"\\."'" { curArgDefValue+=yytext; }
<ReadFuncArgDef>"'"."'" { curArgDefValue+=yytext; } <ReadFuncArgDef>"'"."'" { curArgDefValue+=yytext; }
...@@ -216,6 +223,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -216,6 +223,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
) )
) i--; ) i--;
Argument *a = new Argument; Argument *a = new Argument;
a->attrib = curArgAttrib.copy();
if (i>=0 && curArgTypeName.at(i)!=':') if (i>=0 && curArgTypeName.at(i)!=':')
{ // type contains a name { // type contains a name
a->type = curArgTypeName.left(i+1).stripWhiteSpace(); a->type = curArgTypeName.left(i+1).stripWhiteSpace();
...@@ -229,6 +237,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -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()); //printf("----> Adding argument `%s' `%s' `%s'\n",a->type.data(),a->name.data(),a->defval.data());
argList->append(a); argList->append(a);
} }
curArgAttrib.resize(0);
curArgTypeName.resize(0); curArgTypeName.resize(0);
curArgDefValue.resize(0); curArgDefValue.resize(0);
if (*yytext==')') if (*yytext==')')
......
...@@ -21,6 +21,8 @@ Define::Define() ...@@ -21,6 +21,8 @@ Define::Define()
{ {
undef=FALSE; undef=FALSE;
fileDef=0; fileDef=0;
isPredefined=FALSE;
nonRecursive=FALSE;
} }
Define::Define(const Define &d) Define::Define(const Define &d)
......
...@@ -42,6 +42,8 @@ class Define ...@@ -42,6 +42,8 @@ class Define
int nargs; int nargs;
bool undef; bool undef;
bool varArgs; bool varArgs;
bool isPredefined;
bool nonRecursive;
}; };
class DefineList : public QList<Define> class DefineList : public QList<Define>
......
...@@ -26,44 +26,72 @@ ...@@ -26,44 +26,72 @@
class Definition class Definition
{ {
public: public:
//! create a new definition /*! create a new definition */
Definition(const char *name,const char *b=0,const char *d=0); Definition(const char *name,const char *b=0,const char *d=0);
//! destroys the definition /*! destroys the definition */
virtual ~Definition(); virtual ~Definition();
//! returns the name of the definition /*! returns the name of the definition */
QCString name() const { return n; } 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; virtual QCString getOutputFileBase() const = 0;
//! returns the detailed description of this definition /*! returns the detailed description of this definition */
QCString documentation() const { return doc; } QCString documentation() const { return doc; }
//! returns the brief description of this definition /*! returns the brief description of this definition */
QCString briefDescription() const { return brief; } 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; } 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) 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) void setBriefDescription(const char *b)
{ {
brief=b; brief=brief.stripWhiteSpace(); brief=((QCString) b).stripWhiteSpace();
int bl=brief.length(); int bl=brief.length();
if (bl>0 && brief.at(bl-1)!='.' && brief.at(bl-1)!='!' && if (bl>0) // add puntuation if needed
brief.at(bl-1)!='?') brief+='.'; {
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() virtual bool hasDocumentation()
{ return !doc.isNull() || !brief.isNull() || Config::extractAllFlag; } { 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); 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); void addSectionsToDefinition(QList<QCString> *anchorList);
private: private:
QCString n; // name of the definition QCString n; // name of the definition
QCString brief; // brief description QCString brief; // brief description
QCString doc; // detailed description QCString doc; // detailed description
QCString ref; // reference to external documentation
SectionList *sectionList; // list of all sections SectionList *sectionList; // list of all sections
}; };
......
...@@ -148,7 +148,7 @@ static void writeVectorBox(QTextStream &t,DiagramItem *di, ...@@ -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) 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 "; t << "<area ";
if (cd->getReference()) t << "doxygen=\"" << cd->getReference() << ":\" "; if (cd->getReference()) t << "doxygen=\"" << cd->getReference() << ":\" ";
...@@ -229,10 +229,7 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases, ...@@ -229,10 +229,7 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
while (bcd) while (bcd)
{ {
ClassDef *ccd=bcd->classDef; ClassDef *ccd=bcd->classDef;
if (ccd && ccd->isVisibleExt() if (ccd && ccd->isVisibleInHierarchy()) count++;
//(ccd->protection()!=Private || extractPrivateFlag) &&
//(ccd->hasDocumentation() || !hideClassFlag)
) count++;
bcd=bcl->next(); bcd=bcl->next();
} }
if (count>0 && (prot!=Private || !doBases)) if (count>0 && (prot!=Private || !doBases))
...@@ -252,10 +249,7 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases, ...@@ -252,10 +249,7 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
while (bcd) while (bcd)
{ {
ClassDef *ccd=bcd->classDef; ClassDef *ccd=bcd->classDef;
if (ccd && ccd->isVisibleExt() if (ccd && ccd->isVisibleInHierarchy())
//(ccd->protection()!=Private || extractPrivateFlag) &&
//(ccd->hasDocumentation() || !hideClassFlag)
)
{ {
row->insertClass(di,ccd,doBases,bcd->prot, row->insertClass(di,ccd,doBases,bcd->prot,
doBases?bcd->virt:Normal, doBases?bcd->virt:Normal,
...@@ -519,8 +513,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image, ...@@ -519,8 +513,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image,
if (bitmap) if (bitmap)
{ {
bool hasDocs=di->getClassDef()->hasDocumentation() || bool hasDocs=di->getClassDef()->isLinkable();
di->getClassDef()->isReference();
writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow, writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,
hasDocs,di->getChildren()->count()>0); hasDocs,di->getChildren()->count()>0);
if (!firstRow) writeMapArea(t,di->getClassDef(),x,y,cellWidth,cellHeight); if (!firstRow) writeMapArea(t,di->getClassDef(),x,y,cellWidth,cellHeight);
...@@ -553,8 +546,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image, ...@@ -553,8 +546,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image,
y = (baseRows-1)*(cellHeight+labelVertSpacing)+ y = (baseRows-1)*(cellHeight+labelVertSpacing)+
di->yPos()*(cellHeight+labelVertSpacing)/gridHeight; di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
} }
bool hasDocs=di->getClassDef()->hasDocumentation() || bool hasDocs=di->getClassDef()->isLinkable();
di->getClassDef()->isReference();
writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,hasDocs); writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,hasDocs);
if (!firstRow) writeMapArea(t,di->getClassDef(),x,y,cellWidth,cellHeight); if (!firstRow) writeMapArea(t,di->getClassDef(),x,y,cellWidth,cellHeight);
} }
......
This diff is collapsed.
...@@ -74,11 +74,11 @@ class BufStr : public QCString ...@@ -74,11 +74,11 @@ class BufStr : public QCString
const int spareRoom; // 10Kb extra room to avoid frequent resizing const int spareRoom; // 10Kb extra room to avoid frequent resizing
}; };
typedef QList<QCString> StringList; typedef QList<QCString> StringList;
typedef QDict<MemberDef> MemberDict; typedef QDict<MemberDef> MemberDict;
typedef QDict<ClassDef> ClassDict; typedef QDict<ClassDef> ClassDict;
typedef QDict<FileDef> FileDict; typedef QDict<FileDef> FileDict;
typedef QDict<QCString> StringDict; typedef QDict<QCString> StringDict;
typedef QDict<PageInfo> PageDict; typedef QDict<PageInfo> PageDict;
typedef QDict<GroupDef> GroupDict; typedef QDict<GroupDef> GroupDict;
...@@ -123,5 +123,6 @@ extern int documentedFiles; ...@@ -123,5 +123,6 @@ extern int documentedFiles;
extern int documentedGroups; extern int documentedGroups;
extern int documentedNamespaces; extern int documentedNamespaces;
extern int documentedNamespaceMembers; extern int documentedNamespaceMembers;
extern int documentedIncludeFiles;
#endif #endif
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
# TMake project file for doxygen # TMake project file for doxygen
TEMPLATE = doxygen.t 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 \ HEADERS = doxygen.h scanner.h classdef.h classlist.h memberdef.h \
membername.h index.h memberlist.h definition.h \ membername.h index.h memberlist.h definition.h \
entry.h logos.h instdox.h message.h code.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 \ ...@@ -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 \ filename.h defargs.h groupdef.h gifenc.h diagram.h image.h \
namespacedef.h version.h language.h translator.h \ namespacedef.h version.h language.h translator.h \
translator_nl.h translator_se.h translator_cz.h translator_fr.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 \ SOURCES = doxygen.cpp scanner.cpp classdef.cpp classlist.cpp memberdef.cpp \
membername.cpp index.cpp memberlist.cpp \ membername.cpp index.cpp memberlist.cpp \
entry.cpp logos.cpp instdox.cpp message.cpp code.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 ...@@ -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 \ cppvalue.cpp ce_lex.cpp ce_parse.cpp pre.cpp \
tag.cpp filename.cpp declinfo.cpp defargs.cpp define.cpp \ tag.cpp filename.cpp declinfo.cpp defargs.cpp define.cpp \
diagram.cpp gifenc.cpp image.cpp namespacedef.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 += . win32:INCLUDEPATH += .
TARGET = ../bin/doxygen TARGET = ../bin/doxygen
OBJECTS_DIR = ../objects OBJECTS_DIR = ../objects
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
# All output generated with Doxygen is not covered by this license. # All output generated with Doxygen is not covered by this license.
TEMPLATE = app.t TEMPLATE = app.t
CONFIG = console warn_on release CONFIG = console warn_on $extraopts
SOURCES = doxysearch.cpp SOURCES = doxysearch.cpp
TARGET = ../bin/doxysearch TARGET = ../bin/doxysearch
OBJECTS_DIR = ../objects OBJECTS_DIR = ../objects
...@@ -324,14 +324,18 @@ QCString unhtmlify(const char *str) ...@@ -324,14 +324,18 @@ QCString unhtmlify(const char *str)
classFile=yytext; classFile=yytext;
BEGIN( SearchMemberRef ); BEGIN( SearchMemberRef );
} }
<SearchMemberRef>"#" { <SearchMemberRef,ReadClassFile>"#" {
if (YY_START==ReadClassFile)
{
classFile=yyFileName;
}
BEGIN( ReadMemberRef ); BEGIN( ReadMemberRef );
} }
<ReadMemberRef>[a-z_A-Z0-9]+ { <ReadMemberRef>[a-z_A-Z0-9]+ {
memberRef=yytext; memberRef=yytext;
BEGIN( SearchMemberName ); BEGIN( SearchMemberName );
} }
<SearchMemberName>"<strong>" { <SearchMemberName>"<strong>"|"<b>" { // <strong> is for qt-1.44, <b> is for qt-2.00
BEGIN( ReadMemberName ); BEGIN( ReadMemberName );
} }
<SearchMemberName>[a-z_A-Z~] { <SearchMemberName>[a-z_A-Z~] {
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
# TMake project file for doxytag # TMake project file for doxytag
TEMPLATE = doxytag.t TEMPLATE = doxytag.t
CONFIG = console warn_on qt release CONFIG = console warn_on qt $extraopts
HEADERS = suffixtree.h searchindex.h logos.h version.h HEADERS = suffixtree.h searchindex.h logos.h version.h
SOURCES = doxytag.cpp suffixtree.cpp searchindex.cpp \ SOURCES = doxytag.cpp suffixtree.cpp searchindex.cpp \
logos.cpp version.cpp logos.cpp version.cpp
......
...@@ -35,6 +35,7 @@ Entry::Entry() ...@@ -35,6 +35,7 @@ Entry::Entry()
argList->setAutoDelete(TRUE); argList->setAutoDelete(TRUE);
//printf("Entry::Entry() tArgList=0\n"); //printf("Entry::Entry() tArgList=0\n");
tArgList = 0; tArgList = 0;
mtArgList = 0;
mGrpId = -1; mGrpId = -1;
reset(); reset();
} }
...@@ -76,6 +77,7 @@ Entry::Entry(const Entry &e) ...@@ -76,6 +77,7 @@ Entry::Entry(const Entry &e)
argList->setAutoDelete(TRUE); argList->setAutoDelete(TRUE);
//printf("Entry::Entry(copy) tArgList=0\n"); //printf("Entry::Entry(copy) tArgList=0\n");
tArgList = 0; tArgList = 0;
mtArgList = 0;
// deep copy of the child entry list // deep copy of the child entry list
QListIterator<Entry> eli(*e.sublist); QListIterator<Entry> eli(*e.sublist);
...@@ -131,6 +133,20 @@ Entry::Entry(const Entry &e) ...@@ -131,6 +133,20 @@ Entry::Entry(const Entry &e)
//printf("appending argument %s %s\n",a->type.data(),a->name.data()); //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() Entry::~Entry()
...@@ -143,6 +159,7 @@ Entry::~Entry() ...@@ -143,6 +159,7 @@ Entry::~Entry()
delete anchors; delete anchors;
delete argList; delete argList;
delete tArgList; delete tArgList;
delete mtArgList;
num--; num--;
} }
...@@ -181,6 +198,8 @@ void Entry::reset() ...@@ -181,6 +198,8 @@ void Entry::reset()
brief.resize(0); brief.resize(0);
inside.resize(0); inside.resize(0);
fileName.resize(0); fileName.resize(0);
scopeSpec.resize(0);
memberSpec.resize(0);
mGrpId = -1; mGrpId = -1;
section = EMPTY_SEC; section = EMPTY_SEC;
sig = FALSE; sig = FALSE;
...@@ -195,6 +214,7 @@ void Entry::reset() ...@@ -195,6 +214,7 @@ void Entry::reset()
anchors->clear(); anchors->clear();
argList->clear(); argList->clear();
if (tArgList) { delete tArgList; tArgList=0; } if (tArgList) { delete tArgList; tArgList=0; }
if (mtArgList) { delete mtArgList; mtArgList=0; }
} }
...@@ -262,5 +282,17 @@ int Entry::getSize() ...@@ -262,5 +282,17 @@ int Entry::getSize()
a=tArgList->next(); 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; return size;
} }
...@@ -36,6 +36,7 @@ struct Argument ...@@ -36,6 +36,7 @@ struct Argument
Argument() {} Argument() {}
Argument(const Argument &a) Argument(const Argument &a)
{ {
attrib=a.attrib.copy();
type=a.type.copy(); type=a.type.copy();
name=a.name.copy(); name=a.name.copy();
defval=a.defval.copy(); defval=a.defval.copy();
...@@ -44,6 +45,7 @@ struct Argument ...@@ -44,6 +45,7 @@ struct Argument
{ {
if (this!=&a) if (this!=&a)
{ {
attrib=a.attrib.copy();
type=a.type.copy(); type=a.type.copy();
name=a.name.copy(); name=a.name.copy();
defval=a.defval.copy(); defval=a.defval.copy();
...@@ -51,6 +53,7 @@ struct Argument ...@@ -51,6 +53,7 @@ struct Argument
return *this; return *this;
} }
QCString attrib; // argument attribute (IDL only)
QCString type; // argument type QCString type; // argument type
QCString name; // argument name (if any) QCString name; // argument name (if any)
QCString defval; // argument default value (if any) QCString defval; // argument default value (if any)
...@@ -101,8 +104,10 @@ class Entry ...@@ -101,8 +104,10 @@ class Entry
GROUPDOC_SEC = 0x00800000, GROUPDOC_SEC = 0x00800000,
NAMESPACE_SEC = 0x01000000, NAMESPACE_SEC = 0x01000000,
NAMESPACEDOC_SEC = 0x02000000, NAMESPACEDOC_SEC = 0x02000000,
COMPOUND_MASK = CLASS_SEC | STRUCT_SEC | UNION_SEC, INTERFACE_SEC = 0x04000000,
COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC, 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, SCOPE_MASK = COMPOUND_MASK | NAMESPACE_SEC,
FILE_MASK = SOURCE_SEC | HEADER_SEC FILE_MASK = SOURCE_SEC | HEADER_SEC
}; };
...@@ -128,6 +133,9 @@ class Entry ...@@ -128,6 +133,9 @@ class Entry
QCString args; // member argument string QCString args; // member argument string
ArgumentList *argList; // member arguments as a list ArgumentList *argList; // member arguments as a list
ArgumentList *tArgList; // template argument 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 program; // the program text
QCString body; // the function body QCString body; // the function body
QCString includeFile; // include file (2 arg of \class, must be unique) QCString includeFile; // include file (2 arg of \class, must be unique)
...@@ -138,7 +146,6 @@ class Entry ...@@ -138,7 +146,6 @@ class Entry
QCString inside; // name of the class in which documents are found QCString inside; // name of the class in which documents are found
QCString exception; // throw specification QCString exception; // throw specification
int mGrpId; // member group id int mGrpId; // member group id
QCString mGrpHeader; // member group header
QList<Entry> *sublist; // entries that are children of this one QList<Entry> *sublist; // entries that are children of this one
QList<BaseInfo> *extends; // list of base classes QList<BaseInfo> *extends; // list of base classes
QList<QCString> *groups; // list of groups this entry belongs to 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) ...@@ -37,12 +37,13 @@ FileDef::FileDef(const char *p,const char *nm,const char *ref)
path=p; path=p;
filepath=path+nm; filepath=path+nm;
filename=nameToFile(nm); filename=nameToFile(nm);
reference=ref; setReference(ref);
memList = new MemberList; memList = new MemberList;
classList = new ClassList; classList = new ClassList;
includeList = new FileList; includeList = new FileList;
defineList = new DefineList; defineList = new DefineList;
namespaceList = new NamespaceList; namespaceList = new NamespaceList;
namespaceDict = new NamespaceDict(7);
} }
/*! destroy the file definition */ /*! destroy the file definition */
...@@ -52,6 +53,8 @@ FileDef::~FileDef() ...@@ -52,6 +53,8 @@ FileDef::~FileDef()
delete classList; delete classList;
delete includeList; delete includeList;
delete defineList; delete defineList;
delete namespaceList;
delete namespaceDict;
} }
/*! Compute the HTML anchor names for all members in the class */ /*! Compute the HTML anchor names for all members in the class */
...@@ -105,7 +108,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -105,7 +108,7 @@ void FileDef::writeDocumentation(OutputList &ol)
bool found=FALSE; bool found=FALSE;
while (nd) while (nd)
{ {
if (nd->isVisibleExt()) if (nd->name().find('@')==-1)
{ {
if (!found) if (!found)
{ {
...@@ -115,16 +118,16 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -115,16 +118,16 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startMemberList(); ol.startMemberList();
found=TRUE; found=TRUE;
} }
ol.startMemberItem(); ol.startMemberItem(FALSE,0);
ol.writeString("namespace "); ol.writeString("namespace ");
ol.insertMemberAlign(); ol.insertMemberAlign();
if (nd->hasDocumentation()) if (nd->isLinkable())
{ {
ol.writeObjectLink(nd->getReference(), ol.writeObjectLink(nd->getReference(),
nd->getOutputFileBase(), nd->getOutputFileBase(),
0, 0,
nd->name() nd->name()
); );
} }
else else
{ {
...@@ -132,7 +135,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -132,7 +135,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.docify(nd->name()); ol.docify(nd->name());
ol.endBold(); ol.endBold();
} }
ol.endMemberItem(); ol.endMemberItem(FALSE,0,0,FALSE);
} }
nd=namespaceList->next(); nd=namespaceList->next();
} }
...@@ -144,7 +147,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -144,7 +147,7 @@ void FileDef::writeDocumentation(OutputList &ol)
bool found=FALSE; bool found=FALSE;
while (cd) while (cd)
{ {
if ( cd->isVisibleExt() ) if (cd->name().find('@')==-1)
{ {
if (!found) if (!found)
{ {
...@@ -154,22 +157,23 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -154,22 +157,23 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startMemberList(); ol.startMemberList();
found=TRUE; found=TRUE;
} }
ol.startMemberItem(); ol.startMemberItem(FALSE,FALSE);
switch (cd->compoundType()) switch (cd->compoundType())
{ {
case ClassDef::Class: ol.writeString("class"); break; case ClassDef::Class: ol.writeString("class"); break;
case ClassDef::Struct: ol.writeString("struct"); break; case ClassDef::Struct: ol.writeString("struct"); break;
case ClassDef::Union: ol.writeString("union"); break; case ClassDef::Union: ol.writeString("union"); break;
case ClassDef::Interface: ol.writeString("interface"); break;
} }
ol.writeString(" "); ol.writeString(" ");
ol.insertMemberAlign(); ol.insertMemberAlign();
if (cd->hasDocumentation()) if (cd->isLinkable())
{ {
ol.writeObjectLink(cd->getReference(), ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(), cd->getOutputFileBase(),
0, 0,
cd->name() cd->name()
); );
} }
else else
{ {
...@@ -177,14 +181,14 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -177,14 +181,14 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.docify(cd->name()); ol.docify(cd->name());
ol.endBold(); ol.endBold();
} }
ol.endMemberItem(); ol.endMemberItem(FALSE,0,0,FALSE);
} }
cd=classList->next(); 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(); ol.endMemberSections();
//doc=doc.stripWhiteSpace(); //doc=doc.stripWhiteSpace();
...@@ -222,7 +226,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -222,7 +226,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trDefineDocumentation()); parseText(ol,theTranslator->trDefineDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Define); memList->writeDocumentation(ol,name(),MemberDef::Define);
} }
if ( memList->protoCount()>0 ) if ( memList->protoCount()>0 )
...@@ -231,7 +235,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -231,7 +235,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trFunctionPrototypeDocumentation()); parseText(ol,theTranslator->trFunctionPrototypeDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Prototype); memList->writeDocumentation(ol,name(),MemberDef::Prototype);
} }
if ( memList->typedefCount()>0 ) if ( memList->typedefCount()>0 )
...@@ -240,7 +244,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -240,7 +244,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trTypedefDocumentation()); parseText(ol,theTranslator->trTypedefDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Typedef); memList->writeDocumentation(ol,name(),MemberDef::Typedef);
} }
if ( memList->enumCount()>0 ) if ( memList->enumCount()>0 )
...@@ -249,7 +253,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -249,7 +253,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trEnumerationTypeDocumentation()); parseText(ol,theTranslator->trEnumerationTypeDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Enumeration); memList->writeDocumentation(ol,name(),MemberDef::Enumeration);
} }
if ( memList->enumValueCount()>0 ) if ( memList->enumValueCount()>0 )
...@@ -258,16 +262,19 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -258,16 +262,19 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trEnumerationValueDocumentation()); parseText(ol,theTranslator->trEnumerationValueDocumentation());
ol.endGroupHeader(); 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.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trFunctionDocumentation()); QCString cntString;
cntString.sprintf(" (%d)",cnt);
parseText(ol,theTranslator->trFunctionDocumentation()+cntString);
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Function); memList->writeDocumentation(ol,name(),MemberDef::Function);
} }
if ( memList->varCount()>0 ) if ( memList->varCount()>0 )
...@@ -276,7 +283,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -276,7 +283,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trVariableDocumentation()); parseText(ol,theTranslator->trVariableDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
writeMemberDocs(ol,memList,name(),MemberDef::Variable); memList->writeDocumentation(ol,name(),MemberDef::Variable);
} }
// write Author section (Man only) // write Author section (Man only)
...@@ -304,7 +311,11 @@ void FileDef::insertClass(ClassDef *cd) ...@@ -304,7 +311,11 @@ void FileDef::insertClass(ClassDef *cd)
/*! Adds namespace definition \a nd to the list of all compounds of this file */ /*! Adds namespace definition \a nd to the list of all compounds of this file */
void FileDef::insertNamespace(NamespaceDef *nd) 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; ...@@ -31,6 +31,7 @@ class OutputList;
class DefineList; class DefineList;
class NamespaceDef; class NamespaceDef;
class NamespaceList; class NamespaceList;
class NamespaceDict;
/*! \class FileDef filedef.h /*! \class FileDef filedef.h
\brief A File definition. \brief A File definition.
...@@ -95,15 +96,26 @@ class FileDef : public Definition ...@@ -95,15 +96,26 @@ class FileDef : public Definition
/*! Returns true iff this file was externally defined /*! Returns true iff this file was externally defined
(i.e. read from a tag file) */ (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 /*! Returns the reference name of the external file, if any or 0
if the file is not defined. */ if the file is not defined. */
const char *getReference() { return reference; } //const char *getReference() { return reference; }
//void setFileType(FileType ft) { ftype = ft; } //void setFileType(FileType ft) { ftype = ft; }
//FileType fileType() const { return ftype; } //FileType fileType() const { return ftype; }
bool isLinkableInProject()
{
return hasDocumentation() && !isReference();
}
bool isLinkable()
{
return isLinkableInProject() || isReference();
}
void writeDocumentation(OutputList &ol); void writeDocumentation(OutputList &ol);
friend void generatedFileNames(); friend void generatedFileNames();
void insertMember(MemberDef *fd); void insertMember(MemberDef *fd);
...@@ -115,12 +127,13 @@ class FileDef : public Definition ...@@ -115,12 +127,13 @@ class FileDef : public Definition
MemberList *memList; MemberList *memList;
ClassList *classList; ClassList *classList;
FileList *includeList; FileList *includeList;
NamespaceDict *namespaceDict;
NamespaceList *namespaceList; NamespaceList *namespaceList;
DefineList *defineList; DefineList *defineList;
//QCString n; //QCString n;
//QCString doc; //QCString doc;
//QCString brief; //QCString brief;
QCString reference; //QCString reference;
QCString path; QCString path;
QCString filepath; QCString filepath;
QCString diskname; QCString diskname;
......
...@@ -150,11 +150,19 @@ void FormulaList::generateBitmaps(const char *path) ...@@ -150,11 +150,19 @@ void FormulaList::generateBitmaps(const char *path)
// Then we run ghostscript to convert the postscript to a pixmap // Then we run ghostscript to convert the postscript to a pixmap
// The pixmap is a truecolor image, where only black and white are // The pixmap is a truecolor image, where only black and white are
// used. // 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 " sprintf(gsCmd,"gs -q -g%dx%d -r%dx%dx -sDEVICE=ppmraw "
"-sOutputFile=%s.pnm -DNOPAUSE -- %s.ps", "-sOutputFile=%s.pnm -DNOPAUSE -- %s.ps",
gx,gy,(int)(scaleFactor*72),(int)(scaleFactor*72), gx,gy,(int)(scaleFactor*72),(int)(scaleFactor*72),
formBase.data(),formBase.data() formBase.data(),formBase.data()
); );
#endif
//printf("Running ghostscript...\n"); //printf("Running ghostscript...\n");
system(gsCmd); system(gsCmd);
f.setName(formBase+".pnm"); f.setName(formBase+".pnm");
......
...@@ -122,9 +122,10 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -122,9 +122,10 @@ void GroupDef::writeDocumentation(OutputList &ol)
QCString type; QCString type;
switch (cd->compoundType()) switch (cd->compoundType())
{ {
case ClassDef::Class: type="class"; break; case ClassDef::Class: type="class"; break;
case ClassDef::Struct: type="struct"; break; case ClassDef::Struct: type="struct"; break;
case ClassDef::Union: type="union"; break; case ClassDef::Union: type="union"; break;
case ClassDef::Interface: type="interface"; break;
} }
ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->name()); ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->name());
ol.writeEndAnnoItem(cd->name()); ol.writeEndAnnoItem(cd->name());
......
...@@ -43,6 +43,14 @@ class GroupDef : public Definition ...@@ -43,6 +43,14 @@ class GroupDef : public Definition
void addNamespace(const NamespaceDef *def); void addNamespace(const NamespaceDef *def);
void writeDocumentation(OutputList &ol); void writeDocumentation(OutputList &ol);
int countMembers() const; int countMembers() const;
bool isLinkableInProject()
{
return hasDocumentation() && !isReference();
}
bool isLinkable()
{
return isLinkableInProject() || isReference();
}
private: private:
QCString title; // title of the group QCString title; // title of the group
......
...@@ -26,6 +26,10 @@ ...@@ -26,6 +26,10 @@
#include "logos.h" #include "logos.h"
#include "diagram.h" #include "diagram.h"
#define GROUP_COLOR "#ff8080"
HtmlHelp *HtmlGenerator::htmlHelp = 0;
HtmlGenerator::HtmlGenerator() : OutputGenerator() HtmlGenerator::HtmlGenerator() : OutputGenerator()
{ {
if (Config::headerFile.length()>0) header=fileToString(Config::headerFile); if (Config::headerFile.length()>0) header=fileToString(Config::headerFile);
...@@ -51,6 +55,7 @@ void HtmlGenerator::init() ...@@ -51,6 +55,7 @@ void HtmlGenerator::init()
exit(1); exit(1);
} }
writeLogo(Config::htmlOutputDir); writeLogo(Config::htmlOutputDir);
writeNullImage(Config::htmlOutputDir);
} }
void HtmlGenerator::startFile(const char *name,const char *title,bool external) 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) ...@@ -59,6 +64,7 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
lastTitle=title; lastTitle=title;
if (fileName.right(5)!=".html") fileName+=".html"; if (fileName.right(5)!=".html") fileName+=".html";
startPlainFile(fileName); startPlainFile(fileName);
lastFile = fileName;
if (header.length()==0) if (header.length()==0)
{ {
t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n" t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
...@@ -158,14 +164,16 @@ void HtmlGenerator::writeStyleInfo(int part) ...@@ -158,14 +164,16 @@ void HtmlGenerator::writeStyleInfo(int part)
if (part==0) if (part==0)
{ {
startPlainFile("doxygen.css"); startPlainFile("doxygen.css");
t
//<< "H1 { border-width: thin; border: solid; text-align: center }" << endl //<< "H1 { border-width: thin; border: solid; text-align: center }" << endl
<< "H1 { text-align: center }" << endl t << "H1 { text-align: center }" << endl;
<< "A.el { text-decoration: none; font-weight: bold }" << endl t << "A.el { text-decoration: none; font-weight: bold }" << endl;
<< "DL.el { margin-left: -1cm }" << endl t << "DL.el { margin-left: -1cm }" << endl;
<< "DIV.fragment { width: 100%; border: none; background-color: #eeeeee }" << endl t << "DIV.fragment { width: 100%; border: none; background-color: #eeeeee }" << endl;
<< "DIV.in { margin-left: 16 }" << endl t << "DIV.in { margin-left: 16 }" << endl;
<< 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(); endPlainFile();
} }
} }
...@@ -209,6 +217,10 @@ void HtmlGenerator::writeIndexItem(const char *ref,const char *f, ...@@ -209,6 +217,10 @@ void HtmlGenerator::writeIndexItem(const char *ref,const char *f,
{ {
t << "</b>"; t << "</b>";
} }
//if (Config::htmlHelpFlag && f)
//{
// htmlHelp->addItem(name,((QCString)f)+".html");
//}
} }
void HtmlGenerator::writeStartAnnoItem(const char *,const char *f, void HtmlGenerator::writeStartAnnoItem(const char *,const char *f,
...@@ -219,6 +231,10 @@ 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\">"; t << "<a class=\"el\" href=\"" << f << ".html\">";
docify(name); docify(name);
t << "</a> "; t << "</a> ";
//if (Config::htmlHelpFlag && f)
//{
// htmlHelp->addItem(name, ((QCString)f)+".html");
//}
} }
void HtmlGenerator::writeObjectLink(const char *ref,const char *f, void HtmlGenerator::writeObjectLink(const char *ref,const char *f,
...@@ -232,6 +248,10 @@ void HtmlGenerator::writeObjectLink(const char *ref,const char *f, ...@@ -232,6 +248,10 @@ void HtmlGenerator::writeObjectLink(const char *ref,const char *f,
t << "\">"; t << "\">";
docify(name); docify(name);
t << "</a>"; t << "</a>";
//if (Config::htmlHelpFlag && f && htmlHelp->depth()>0)
//{
// htmlHelp->addItem(name,((QCString)f)+".html");
//}
} }
void HtmlGenerator::startTextLink(const char *f,const char *anchor) void HtmlGenerator::startTextLink(const char *f,const char *anchor)
...@@ -401,11 +421,26 @@ void HtmlGenerator::endMemberList() ...@@ -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) 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 else
{ {
...@@ -413,28 +448,45 @@ void HtmlGenerator::startMemberItem() ...@@ -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) 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) if (Config::htmlAlignMemberFlag)
{ {
t << "</td></tr>"; t << "&nbsp;</td><td valign=top>";
} }
t << endl;
} }
void HtmlGenerator::startMemberDescription() void HtmlGenerator::startMemberDescription()
{ {
if (Config::htmlAlignMemberFlag) 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 else
{ {
...@@ -458,7 +510,7 @@ void HtmlGenerator::startMemberSections() ...@@ -458,7 +510,7 @@ void HtmlGenerator::startMemberSections()
{ {
if (Config::htmlAlignMemberFlag) 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() ...@@ -474,7 +526,7 @@ void HtmlGenerator::startMemberHeader()
{ {
if (Config::htmlAlignMemberFlag) if (Config::htmlAlignMemberFlag)
{ {
t << "<tr><td colspan=2><br><h2>"; t << "<tr><td colspan=4><br><h2>";
} }
else else
{ {
...@@ -494,9 +546,35 @@ void HtmlGenerator::endMemberHeader() ...@@ -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() void HtmlGenerator::startMemberSubtitle()
{ {
if (Config::htmlAlignMemberFlag) t << "<tr><td colspan=2>"; if (Config::htmlAlignMemberFlag) t << "<tr><td colspan=4>";
} }
void HtmlGenerator::endMemberSubtitle() void HtmlGenerator::endMemberSubtitle()
...@@ -504,3 +582,36 @@ void HtmlGenerator::endMemberSubtitle() ...@@ -504,3 +582,36 @@ void HtmlGenerator::endMemberSubtitle()
if (Config::htmlAlignMemberFlag) t << "<br><br></td></tr>" << endl; 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 @@ ...@@ -21,6 +21,7 @@
#include "outputgen.h" #include "outputgen.h"
class QFile; class QFile;
class HtmlHelp;
class HtmlGenerator : public OutputGenerator class HtmlGenerator : public OutputGenerator
{ {
...@@ -40,6 +41,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -40,6 +41,7 @@ class HtmlGenerator : public OutputGenerator
OutputGenerator *get(OutputType o) { return (o==Html) ? this : 0; } OutputGenerator *get(OutputType o) { return (o==Html) ? this : 0; }
static void init(); static void init();
//void generateExternalIndex(); //void generateExternalIndex();
void startFile(const char *name,const char *title,bool external); void startFile(const char *name,const char *title,bool external);
void writeFooter(int,bool); void writeFooter(int,bool);
...@@ -59,12 +61,15 @@ class HtmlGenerator : public OutputGenerator ...@@ -59,12 +61,15 @@ class HtmlGenerator : public OutputGenerator
void newParagraph(); void newParagraph();
void writeString(const char *text); void writeString(const char *text);
void startIndexList() { t << "<ul>" << endl; } void startIndexList();
void endIndexList() { t << "</ul>" << endl; } void endIndexList();
void startItemList() { t << "<ul>" << endl; } void startItemList() { t << "<ul>" << endl; }
void endItemList() { t << "</ul>" << endl; } void endItemList() { t << "</ul>" << endl; }
void startEnumList() { t << "<ol>" << endl; } void startEnumList() { t << "<ol>" << endl; }
void endEnumList() { 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 writeIndexItem(const char *ref,const char *file,const char *name);
void docify(const char *text); void docify(const char *text);
void codify(const char *text); void codify(const char *text);
...@@ -90,9 +95,11 @@ class HtmlGenerator : public OutputGenerator ...@@ -90,9 +95,11 @@ class HtmlGenerator : public OutputGenerator
void endMemberSubtitle(); void endMemberSubtitle();
void startMemberList(); void startMemberList();
void endMemberList(); void endMemberList();
void startMemberItem(); void startMemberItem(bool,int);
void memberGroupSpacing(bool inGroup);
void memberGroupSeparator();
void insertMemberAlign(); void insertMemberAlign();
void endMemberItem(); void endMemberItem(bool,const char *,const char *,bool);
void startMemberDescription(); void startMemberDescription();
void endMemberDescription(); void endMemberDescription();
...@@ -115,7 +122,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -115,7 +122,7 @@ class HtmlGenerator : public OutputGenerator
void writeChar(char c); void writeChar(char c);
void startMemberDoc(const char *,const char *,const char *) void startMemberDoc(const char *,const char *,const char *)
{ t << endl << "<h3>"; } { t << endl << "<h3>"; }
void endMemberDoc() { t << "</h3>" << endl; } void endMemberDoc() { t << "</h3>" << endl; }
void writeDoxyAnchor(const char *clName,const char *anchor, void writeDoxyAnchor(const char *clName,const char *anchor,
const char *name); const char *name);
void writeLatexSpacing() {} void writeLatexSpacing() {}
...@@ -168,6 +175,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -168,6 +175,7 @@ class HtmlGenerator : public OutputGenerator
void startQuickIndexItem(const char *,const char *); void startQuickIndexItem(const char *,const char *);
void endQuickIndexItem(); void endQuickIndexItem();
void writeFormula(const char *,const char *); void writeFormula(const char *,const char *);
void writeNonBreakableSpace() { t << "&nbsp;&nbsp;&nbsp;"; }
//static void docifyStatic(QTextStream &t,const char *str); //static void docifyStatic(QTextStream &t,const char *str);
...@@ -175,9 +183,12 @@ class HtmlGenerator : public OutputGenerator ...@@ -175,9 +183,12 @@ class HtmlGenerator : public OutputGenerator
QCString header; QCString header;
QCString footer; QCString footer;
QCString lastTitle; QCString lastTitle;
QCString lastFile;
HtmlGenerator &operator=(const HtmlGenerator &g); HtmlGenerator &operator=(const HtmlGenerator &g);
HtmlGenerator(const HtmlGenerator &g); HtmlGenerator(const HtmlGenerator &g);
static HtmlHelp *htmlHelp;
}; };
#endif #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; ...@@ -43,6 +43,7 @@ class OutputList;
void writeIndex(OutputList &ol); void writeIndex(OutputList &ol);
void writeHierarchicalIndex(OutputList &ol); void writeHierarchicalIndex(OutputList &ol);
void writeAlphabeticalIndex(OutputList &ol);
void writeClassHierarchy(OutputList &ol); void writeClassHierarchy(OutputList &ol);
void writeFileIndex(OutputList &ol); void writeFileIndex(OutputList &ol);
void writeAnnotatedIndex(OutputList &ol); void writeAnnotatedIndex(OutputList &ol);
...@@ -66,5 +67,6 @@ int countGroups(); ...@@ -66,5 +67,6 @@ int countGroups();
int countNamespaces(); int countNamespaces();
int countAnnotatedClasses(); int countAnnotatedClasses();
int countNamespaceMembers(); int countNamespaceMembers();
int countIncludeFiles();
#endif #endif
...@@ -49,6 +49,7 @@ LatexGenerator::LatexGenerator() ...@@ -49,6 +49,7 @@ LatexGenerator::LatexGenerator()
{ {
dir=Config::latexOutputDir; dir=Config::latexOutputDir;
col=0; col=0;
insideTabbing=FALSE;
} }
LatexGenerator::~LatexGenerator() LatexGenerator::~LatexGenerator()
...@@ -196,7 +197,7 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -196,7 +197,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
bool found=FALSE; bool found=FALSE;
while (gd && !found) while (gd && !found)
{ {
if (gd->hasDocumentation() || gd->countMembers()>0) if (gd->isLinkableInProject() || gd->countMembers()>0)
{ {
if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter"; if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Module Documentation}\n"; t << "{"; //Module Documentation}\n";
...@@ -212,7 +213,7 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -212,7 +213,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
bool found=FALSE; bool found=FALSE;
while (nd && !found) while (nd && !found)
{ {
if (nd->hasDocumentation()) if (nd->isLinkableInProject())
{ {
if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter"; if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; // Namespace Documentation}\n": t << "{"; // Namespace Documentation}\n":
...@@ -228,7 +229,7 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -228,7 +229,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
bool found=FALSE; bool found=FALSE;
while (cd && !found) while (cd && !found)
{ {
if (!cd->isReference() && cd->isVisible()) if (cd->isLinkableInProject())
{ {
if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter"; if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Compound Documentation}\n"; t << "{"; //Compound Documentation}\n";
...@@ -247,7 +248,7 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -247,7 +248,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
FileDef *fd=fn->first(); FileDef *fd=fn->first();
while (fd) while (fd)
{ {
if (fd->hasDocumentation() && !fd->isReference()) if (fd->isLinkableInProject())
{ {
if (isFirst) if (isFirst)
{ {
...@@ -317,7 +318,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -317,7 +318,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
bool found=FALSE; bool found=FALSE;
while (gd && !found) while (gd && !found)
{ {
if (gd->hasDocumentation() || gd->countMembers()>0) if (gd->isLinkableInProject() || gd->countMembers()>0)
{ {
t << "}\n\\input{" << gd->getOutputFileBase() << "}\n"; t << "}\n\\input{" << gd->getOutputFileBase() << "}\n";
found=TRUE; found=TRUE;
...@@ -326,7 +327,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -326,7 +327,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
} }
while (gd) while (gd)
{ {
if (gd->hasDocumentation() || gd->countMembers()>0) if (gd->isLinkableInProject() || gd->countMembers()>0)
{ {
if (Config::compactLatexFlag) t << "\\input"; else t << "\\include"; if (Config::compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << gd->getOutputFileBase() << "}\n"; t << "{" << gd->getOutputFileBase() << "}\n";
...@@ -341,7 +342,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -341,7 +342,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
bool found=FALSE; bool found=FALSE;
while (nd && !found) while (nd && !found)
{ {
if (nd->hasDocumentation() || nd->countMembers()>0) if (nd->isLinkableInProject() || nd->countMembers()>0)
{ {
t << "}\n\\input{" << nd->getOutputFileBase() << "}\n"; t << "}\n\\input{" << nd->getOutputFileBase() << "}\n";
found=TRUE; found=TRUE;
...@@ -350,7 +351,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -350,7 +351,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
} }
while (nd) while (nd)
{ {
if (nd->hasDocumentation() || nd->countMembers()>0) if (nd->isLinkableInProject() || nd->countMembers()>0)
{ {
if (Config::compactLatexFlag) t << "\\input"; else t << "\\include"; if (Config::compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << nd->getOutputFileBase() << "}\n"; t << "{" << nd->getOutputFileBase() << "}\n";
...@@ -365,11 +366,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -365,11 +366,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
bool found=FALSE; bool found=FALSE;
while (cd && !found) while (cd && !found)
{ {
//if (cd->classFile()[0]!='@' && !cd->getReference() && if (cd->isLinkableInProject())
// (cd->hasDocumentation() || !hideClassFlag) &&
// (cd->protection()!=Private || extractPrivateFlag)
// )
if (!cd->isReference() && cd->isVisible())
{ {
t << "}\n\\input{" << cd->getOutputFileBase() << "}\n"; t << "}\n\\input{" << cd->getOutputFileBase() << "}\n";
found=TRUE; found=TRUE;
...@@ -378,11 +375,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -378,11 +375,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
} }
while (cd) while (cd)
{ {
//if (cd->classFile()[0]!='@' && !cd->getReference() && if (cd->isLinkableInProject())
// (cd->hasDocumentation() || !hideClassFlag) &&
// (cd->protection()!=Private || extractPrivateFlag)
// )
if (!cd->isReference() && cd->isVisible())
{ {
if (Config::compactLatexFlag) t << "\\input"; else t << "\\include"; if (Config::compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << cd->getOutputFileBase() << "}\n"; t << "{" << cd->getOutputFileBase() << "}\n";
...@@ -400,7 +393,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -400,7 +393,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
FileDef *fd=fn->first(); FileDef *fd=fn->first();
while (fd) while (fd)
{ {
if (fd->hasDocumentation() && !fd->isReference()) if (fd->isLinkableInProject())
{ {
if (isFirst) if (isFirst)
{ {
...@@ -791,13 +784,18 @@ void LatexGenerator::docify(const char *str) ...@@ -791,13 +784,18 @@ void LatexGenerator::docify(const char *str)
case '^': t << "$^\\wedge$"; break; case '^': t << "$^\\wedge$"; break;
case '&': t << "\\&"; break; case '&': t << "\\&"; break;
case '*': t << "$\\ast$"; 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 << "$<$"; break;
case '>': t << "$>$"; break; case '>': t << "$>$"; break;
case '|': t << "$|$"; break; case '|': t << "$|$"; break;
case '~': t << "$\\sim$"; break; case '~': t << "$\\sim$"; break;
case ']': if (pc=='[') t << "$\\,$";
t << "]";
break;
case '-': if (*p=='>') case '-': if (*p=='>')
{ t << " $\\rightarrow$ "; p++; } { t << " $\\rightarrow$ "; p++; }
else else
...@@ -824,7 +822,7 @@ void LatexGenerator::docify(const char *str) ...@@ -824,7 +822,7 @@ void LatexGenerator::docify(const char *str)
} }
else // ascii char => see if we can insert hypenation hint 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; t << (char)c;
} }
} }
...@@ -900,7 +898,7 @@ void LatexGenerator::docify(const char *str) ...@@ -900,7 +898,7 @@ void LatexGenerator::docify(const char *str)
default: // normal ascii char default: // normal ascii char
{ {
// see if we can insert an hyphenation hint // see if we can insert an hyphenation hint
if (isupper(c) && islower(pc)) t << "\\-"; if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-";
t << (char)c; t << (char)c;
} }
} }
...@@ -955,3 +953,56 @@ void LatexGenerator::writeFormula(const char *,const char *text) ...@@ -955,3 +953,56 @@ void LatexGenerator::writeFormula(const char *,const char *text)
{ {
t << 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 ...@@ -63,6 +63,9 @@ class LatexGenerator : public OutputGenerator
void endItemList() { t << "\\end{CompactItemize}" << endl; } void endItemList() { t << "\\end{CompactItemize}" << endl; }
void startEnumList() { t << "\\begin{enumerate}" << endl; } void startEnumList() { t << "\\begin{enumerate}" << endl; }
void endEnumList() { t << "\\end{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 writeIndexItem(const char *ref,const char *file,const char *name);
void docify(const char *text); void docify(const char *text);
void codify(const char *text); void codify(const char *text);
...@@ -85,10 +88,12 @@ class LatexGenerator : public OutputGenerator ...@@ -85,10 +88,12 @@ class LatexGenerator : public OutputGenerator
void endMemberHeader() { endGroupHeader(); } void endMemberHeader() { endGroupHeader(); }
void startMemberSubtitle() {} void startMemberSubtitle() {}
void endMemberSubtitle() {} void endMemberSubtitle() {}
void startMemberList() { t << "\\begin{CompactItemize}" << endl; } void startMemberList();
void endMemberList() { t << "\\end{CompactItemize}" << endl; } void endMemberList();
void startMemberItem() { t << "\\item " << endl; } void startMemberItem(bool,int);
void endMemberItem() { t << endl; } void endMemberItem(bool,const char *,const char *,bool);
void memberGroupSpacing(bool) {}
void memberGroupSeparator() {}
void insertMemberAlign() {} void insertMemberAlign() {}
void writeRuler() { t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}"; } void writeRuler() { t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}"; }
...@@ -173,6 +178,7 @@ class LatexGenerator : public OutputGenerator ...@@ -173,6 +178,7 @@ class LatexGenerator : public OutputGenerator
void startQuickIndexItem(const char *,const char *) {} void startQuickIndexItem(const char *,const char *) {}
void endQuickIndexItem() {} void endQuickIndexItem() {}
void writeFormula(const char *,const char *); void writeFormula(const char *,const char *);
void writeNonBreakableSpace();
//static void docifyStatic(QTextStream &t,const char *str); //static void docifyStatic(QTextStream &t,const char *str);
...@@ -180,6 +186,7 @@ class LatexGenerator : public OutputGenerator ...@@ -180,6 +186,7 @@ class LatexGenerator : public OutputGenerator
LatexGenerator(const LatexGenerator &); LatexGenerator(const LatexGenerator &);
LatexGenerator &operator=(const LatexGenerator &); LatexGenerator &operator=(const LatexGenerator &);
int col; int col;
bool insideTabbing;
}; };
#endif #endif
...@@ -19,6 +19,15 @@ ...@@ -19,6 +19,15 @@
#include "qtbc.h" #include "qtbc.h"
#include <qfile.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[] = { unsigned char logo_data[] = {
0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x76, 0x00, 0x35, 0x00, 0xf7, 0x00, 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x76, 0x00, 0x35, 0x00, 0xf7, 0x00,
0x00, 0x31, 0x7b, 0x6b, 0x31, 0x7b, 0x73, 0x31, 0x84, 0x7b, 0x31, 0x84, 0x00, 0x31, 0x7b, 0x6b, 0x31, 0x7b, 0x73, 0x31, 0x84, 0x7b, 0x31, 0x84,
...@@ -490,6 +499,18 @@ unsigned char search_data[] = { ...@@ -490,6 +499,18 @@ unsigned char search_data[] = {
}; };
unsigned int search_len = 2010; 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) void writeLogo(const char *dir)
{ {
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#define LOGOS_H #define LOGOS_H
extern void writeLogo(const char *dir); extern void writeLogo(const char *dir);
extern void writeNullImage(const char *dir);
extern void writeSearchButton(const char *dir); extern void writeSearchButton(const char *dir);
#endif #endif
...@@ -31,6 +31,7 @@ ManGenerator::ManGenerator() : OutputGenerator() ...@@ -31,6 +31,7 @@ ManGenerator::ManGenerator() : OutputGenerator()
paragraph=FALSE; paragraph=FALSE;
col=0; col=0;
upperCase=FALSE; upperCase=FALSE;
insideTabbing=FALSE;
} }
ManGenerator::~ManGenerator() ManGenerator::~ManGenerator()
...@@ -342,3 +343,38 @@ void ManGenerator::endDescItem() ...@@ -342,3 +343,38 @@ void ManGenerator::endDescItem()
t << "\" 1c" << endl; t << "\" 1c" << endl;
firstCol=TRUE; 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 ...@@ -63,6 +63,9 @@ class ManGenerator : public OutputGenerator
void endItemList() {} void endItemList() {}
void startEnumList() {} void startEnumList() {}
void endEnumList() {} void endEnumList() {}
void startAlfabeticalIndexList() {}
void endAlfabeticalIndexList() {}
void writeIndexHeading(const char *) {}
void writeIndexItem(const char *ref,const char *file,const char *name); void writeIndexItem(const char *ref,const char *file,const char *name);
void docify(const char *text); void docify(const char *text);
void codify(const char *text); void codify(const char *text);
...@@ -85,13 +88,12 @@ class ManGenerator : public OutputGenerator ...@@ -85,13 +88,12 @@ class ManGenerator : public OutputGenerator
void startMemberSubtitle() {} void startMemberSubtitle() {}
void endMemberSubtitle() {} void endMemberSubtitle() {}
void writeListItem(); void writeListItem();
void startMemberList() { t << "\n.in +1c"; firstCol=FALSE; } void startMemberList();
void endMemberList() { t << "\n.in -1c"; firstCol=FALSE; } void endMemberList();
void startMemberItem() { if (firstCol) t << ".in +1c"; void startMemberItem(bool,int);
t << "\n.ti -1c\n.RI \""; void endMemberItem(bool,const char *,const char *,bool);
firstCol=FALSE; void memberGroupSpacing(bool) {}
} void memberGroupSeparator() {}
void endMemberItem() { t << "\"\n.br"; }
void writeRuler() {} void writeRuler() {}
void writeAnchor(const char *) {} void writeAnchor(const char *) {}
void startCodeFragment(); void startCodeFragment();
...@@ -164,12 +166,14 @@ class ManGenerator : public OutputGenerator ...@@ -164,12 +166,14 @@ class ManGenerator : public OutputGenerator
void startQuickIndexItem(const char *,const char *) {} void startQuickIndexItem(const char *,const char *) {}
void endQuickIndexItem() {} void endQuickIndexItem() {}
void writeFormula(const char *,const char *) {} void writeFormula(const char *,const char *) {}
void writeNonBreakableSpace() { t << " "; }
private: private:
bool firstCol; bool firstCol;
bool paragraph; bool paragraph;
int col; int col;
bool upperCase; bool upperCase;
bool insideTabbing;
ManGenerator(const ManGenerator &g); ManGenerator(const ManGenerator &g);
ManGenerator &operator=(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>() ...@@ -50,10 +50,6 @@ MemberNameInfo::MemberNameInfo(const char *n) : QList<MemberInfo>()
setAutoDelete(TRUE); setAutoDelete(TRUE);
} }
MemberNameInfo::~MemberNameInfo()
{
}
int MemberNameInfo::compareItems(GCI item1, GCI item2) int MemberNameInfo::compareItems(GCI item1, GCI item2)
{ {
MemberInfo *m1=(MemberInfo *)item1; 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