Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
doxverilog
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
doxverilog
Commits
d4bdeb54
Commit
d4bdeb54
authored
Dec 15, 1999
by
mueller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mods for doxygen-0.49-991003
parent
79bf453d
Changes
68
Hide whitespace changes
Inline
Side-by-side
Showing
68 changed files
with
2516 additions
and
630 deletions
+2516
-630
INSTALL
INSTALL
+52
-18
Makefile.in
Makefile.in
+16
-12
README
README
+2
-2
VERSION
VERSION
+1
-1
configure
configure
+40
-26
Doxyfile
doc/Doxyfile
+15
-1
Makefile.in
doc/Makefile.in
+12
-0
Makefile.latex
doc/Makefile.latex
+17
-1
Makefile.win.in
doc/Makefile.win.in
+13
-0
commands.doc
doc/commands.doc
+116
-8
config.doc
doc/config.doc
+203
-12
doxygen.sty
doc/doxygen.sty
+13
-0
doxygen_manual.tex
doc/doxygen_manual.tex
+21
-1
doxygen_usage.doc
doc/doxygen_usage.doc
+5
-1
faq.doc
doc/faq.doc
+16
-4
index.doc
doc/index.doc
+6
-1
language.doc
doc/language.doc
+29
-0
output.doc
doc/output.doc
+48
-0
starting.doc
doc/starting.doc
+6
-6
trouble.doc
doc/trouble.doc
+2
-2
Makefile.in
examples/Makefile.in
+1
-1
classdef.cpp
src/classdef.cpp
+26
-12
classdef.h
src/classdef.h
+6
-4
code.l
src/code.l
+5
-1
config.h
src/config.h
+4
-0
config.l
src/config.l
+61
-1
declinfo.l
src/declinfo.l
+2
-2
definition.cpp
src/definition.cpp
+14
-0
definition.h
src/definition.h
+1
-13
doxygen.cpp
src/doxygen.cpp
+279
-123
doxygen.h
src/doxygen.h
+1
-0
entry.cpp
src/entry.cpp
+2
-0
entry.h
src/entry.h
+3
-0
filedef.cpp
src/filedef.cpp
+6
-8
filename.h
src/filename.h
+1
-0
formula.h
src/formula.h
+1
-0
groupdef.cpp
src/groupdef.cpp
+11
-6
htmlgen.cpp
src/htmlgen.cpp
+38
-7
htmlgen.h
src/htmlgen.h
+16
-12
index.cpp
src/index.cpp
+161
-40
index.h
src/index.h
+1
-0
language.cpp
src/language.cpp
+4
-0
latexgen.cpp
src/latexgen.cpp
+201
-71
latexgen.h
src/latexgen.h
+15
-12
mangen.cpp
src/mangen.cpp
+2
-6
mangen.h
src/mangen.h
+12
-8
memberdef.cpp
src/memberdef.cpp
+112
-59
memberdef.h
src/memberdef.h
+5
-1
membergroup.cpp
src/membergroup.cpp
+2
-2
memberlist.cpp
src/memberlist.cpp
+2
-2
membername.h
src/membername.h
+2
-0
namespacedef.cpp
src/namespacedef.cpp
+4
-4
namespacedef.h
src/namespacedef.h
+2
-0
outputgen.h
src/outputgen.h
+13
-8
outputlist.cpp
src/outputlist.cpp
+5
-3
outputlist.h
src/outputlist.h
+29
-19
pre.l
src/pre.l
+2
-2
scanner.l
src/scanner.l
+159
-32
section.h
src/section.h
+1
-0
tag.l
src/tag.l
+1
-1
translator.h
src/translator.h
+21
-4
translator_es.h
src/translator_es.h
+1
-1
translator_fr.h
src/translator_fr.h
+427
-25
translator_it.h
src/translator_it.h
+43
-6
translator_nl.h
src/translator_nl.h
+49
-0
translator_se.h
src/translator_se.h
+59
-14
util.cpp
src/util.cpp
+66
-22
util.h
src/util.h
+4
-2
No files found.
INSTALL
View file @
d4bdeb54
DOXYGEN Version 0.49-99
0901
DOXYGEN Version 0.49-99
1003
CONTENTS
--------
...
...
@@ -8,14 +8,15 @@ CONTENTS
* HTML related problems
* LaTeX related problems
* HP-UX / Digital UNIX problems
* gcc 2.7.2.x related problems
INSTALLATION INSTRUCTIONS FOR UNIX:
-----------------------------------
1. Unpack the archive, unless you already have:
gunzip doxygen-0.49-99
0901
.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-99
0901
.src.tar # unpack it
gunzip doxygen-0.49-99
1003
.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-99
1003
.src.tar # unpack it
2. Run the configure script:
...
...
@@ -26,6 +27,9 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
interpreter. It will report what it finds. Use configure --help
to see how to override or change the default or detected settings.
If you have downloaded the binary distribution, you can proceed
with step 6 now.
3. Compile the program by running make:
make
...
...
@@ -34,14 +38,14 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
doxytag, and doxysearch) should be available in the bin directory of the
distribution.
5
. Generate the user manual (optional, will also be done in step 6).
4
. Generate the user manual (optional, will also be done in step 6).
make docs
t
o let doxygen generate the HTML and LaTeX documentation.
T
o let doxygen generate the HTML and LaTeX documentation.
(you will need the stream editor `sed' for this)
make ps
5.
make ps
to generate a postscript version of the manual.
(you will need latex and dvips for this)
...
...
@@ -58,14 +62,17 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
make install
Binaries are install to the directory <prefix>/bin
Documentation and examples to the directory <prefix>/share/doxygen
Binaries are installed in the directory <prefix>/bin
Documentation and examples in the directory <prefix>/doc/doxygen
<prefix> defaults to /usr but can be changed with the --prefix
option of the configure script.
INSTALLATION INSTRUCTIONS FOR WINDOWS:
--------------------------------------
Currently, only Microsoft Visual C++ (version 5.0) is supported.
(For other
platform
s you may need to edit the perl script in wintools/make.pl
(For other
compiler
s you may need to edit the perl script in wintools/make.pl
a bit). Let me know what you had to change if you got Doxygen working with
another windows compiler.
...
...
@@ -80,9 +87,10 @@ You will need to install the windows/dos versions of following tools:
- Qt-1.xx (Qt-2.xx should also work, but I didn't test it for Windows)
(Hint: only the tools section is required, so you can use the free
X-windows version as well!)
You can get it at http://www.troll.no
- Microsoft Visual C++ (I only tested with version 5.0).
Use the vcvars32.bat to set the environment variables
(if
not selected
to do this automatically during installation).
(if
you did not select
to do this automatically during installation).
- To generate LaTeX documentation or formulas in HTML you need the tools:
latex, dvips and gswin32
To get these working under Windows install the fpTeX distribution
...
...
@@ -96,15 +104,17 @@ You will need to install the windows/dos versions of following tools:
`objects' and `bin' manually in the root of the distribution before
compiling.
Make sure all tools are accessible from the command-line (add them to the
PATH environment if needed).
Open a dos box.
Make sure all tools (i.e. nmake, latex, gswin32, dvips, sed, flex, bison,
cl, rm and perl), are accessible from the command-line (add them to the
PATH environment variable if needed).
Open a dos box,
goto the doxygen root dir and type:
goto the doxygen root dir and type:
make.bat
This should build the executables doxygen.exe, doxytag.exe, and doxysearch.exe
(The compiler should not produce any warnings or errors).
(The compiler should not produce any
serious
warnings or errors).
To build the examples type:
...
...
@@ -125,8 +135,8 @@ The manual should now be here latex/doxygen_manual.ps
KNOWN CONFIGURATION PROBLEMS
QT RELATED PROBLEMS:
- Qt-2.01 contains a bug that
- Qt-2.01 contains a bug that
makes some special characters appear as
question marks (?) in the HTML output.
HTML RELATED PROBLEMS:
- the indent continuously increases.
...
...
@@ -168,7 +178,31 @@ HP-UX / DIGITAL UNIX PROBLEMS:
defined (__sparc) || defined (__sgi) || defined (__osf__)
#include <alloca.h>
This seems to be a problem with bison, but I don't know how to fix it.
Alternatively, one could fix the problem at the bison side.
Here is patch for bison.simple (provided by Andre Johansen):
------------------------------------------------------------------------------
--- bison.simple~ Tue Nov 18 11:45:53 1997
+++ bison.simple Mon Jan 26 15:10:26 1998
@@ -27,7 +27,7 @@
#ifdef __GNUC__
#define alloca __builtin_alloca
#else /* not GNU C. */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || defined (__alpha)
#include <alloca.h>
#else /* not sparc */
#if defined (MSDOS) && !defined (__TURBOC__)
------------------------------------------------------------------------------
GCC 2.7.2.X PROBLEMS
Old versions of the GNU compiler have problems with constant strings
containing characters with ascii codes >127. Therefore the compiler will
fail to compile some of the translator_xx.h files.
A workaround, if you are planning to use the English translation only,
is to configure doxygen with the --english-only option.
-----------------------------------------------------------------------------
That's it!
...
...
@@ -180,4 +214,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (0
1 Septem
ber 1999)
Dimitri van Heesch (0
3 Octo
ber 1999)
Makefile.in
View file @
d4bdeb54
...
...
@@ -19,17 +19,18 @@ distclean: clean
install
:
$(INSTTOOL)
-d
$(INSTALL)
/bin
$(INSTTOOL)
-d
$(INSTALL)
/
share/doxygen/doc
$(INSTTOOL)
-d
$(INSTALL)
/
share/doxygen/examples
$(INSTTOOL)
-d
$(INSTALL)
/
doc/doxygen
$(INSTTOOL)
-d
$(INSTALL)
/
doc/doxygen
$(INSTTOOL)
-m
755 bin/doxy
*
$(INSTALL)
/bin
cp
-r
doc
$(INSTALL)
/share/doxygen
cp
-r
examples
$(INSTALL)
/share/doxygen
echo
"DOXYGEN =
$(INSTALL)
"
>
$(INSTALL)
/share/doxygen/doc/Makefile
echo
"DOXYDOCS =
$(INSTALL)
/share/doxygen"
>>
$(INSTALL)
/share/doxygen/doc/Makefile
echo
"VERSION =
$(VERSION)
"
>>
$(INSTALL)
/share/doxygen/doc/Makefile
cat
doc/Makefile.in
>>
$(INSTALL)
/share/doxygen/doc/Makefile
cd
$(INSTALL)
/share/doxygen/examples
;
$(MAKE)
cd
$(INSTALL)
/share/doxygen/doc
;
$(MAKE)
cp
-r
doc
$(INSTALL)
/doc/doxygen
cp
-r
examples
$(INSTALL)
/doc/doxygen
echo
"DOXYGEN =
$(INSTALL)
"
>
$(INSTALL)
/doc/doxygen/doc/Makefile
echo
"DOXYDOCS = .."
>>
$(INSTALL)
/doc/doxygen/doc/Makefile
echo
"VERSION =
$(VERSION)
"
>>
$(INSTALL)
/doc/doxygen/doc/Makefile
cat
doc/Makefile.in
>>
$(INSTALL)
/doc/doxygen/doc/Makefile
cd
$(INSTALL)
/doc/doxygen/examples
;
$(MAKE)
cd
$(INSTALL)
/doc/doxygen/doc
;
$(MAKE)
rm
-rf
$(INSTALL)
/doc/doxygen/doc
docs
:
FORCE
cd
examples
;
$(MAKE)
...
...
@@ -38,10 +39,13 @@ docs: FORCE
ps
:
docs
cd
latex
;
$(MAKE)
pdf
:
docs
cd
latex
;
$(MAKE)
archive
:
distclean
tar
zcvf dx
`
date
+%y%m%d
`
.tgz tmake doc wintools examples bin objects
\
src configure
Makefile.in Makefile.win.in INSTALL make.bat
\
LANGUAGE.HOWTO LICENSE PLATFORMS VERSION
src configure
configure.bin Makefile.in Makefile.win.in INSTALL
\
make.bat
LANGUAGE.HOWTO LICENSE PLATFORMS VERSION
src/version.cpp
:
Makefile
echo
"char versionString[]=
\"
$(VERSION)
\"
;"
>
src/version.cpp
...
...
README
View file @
d4bdeb54
DOXYGEN Version 0.49-99
0901
DOXYGEN Version 0.49-99
1003
Please read INSTALL for compilation instructions.
...
...
@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (0
1 Septem
ber 1999)
Dimitri van Heesch (0
3 Octo
ber 1999)
VERSION
View file @
d4bdeb54
0.49-99
0901
0.49-99
1003
configure
View file @
d4bdeb54
...
...
@@ -21,10 +21,11 @@ f_shared=YES
f_make
=
NO
f_perl
=
NO
f_plf_auto
=
NO
f_prefix
=
/usr
/local
f_prefix
=
/usr
f_insttool
=
install
f_english
=
NO
while
test
-n
"
$1
"
;
do
while
test
-n
"
$1
"
;
do
case
$1
in
--prefix
)
shift
;
f_prefix
=
$1
...
...
@@ -41,6 +42,9 @@ while test -n "$1"; do
--debug
)
f_debug
=
YES
;;
--english-only
)
f_english
=
YES
;;
--platform
)
shift
;
f_platform
=
$1
;;
...
...
@@ -68,33 +72,35 @@ done
if
test
"
$f_help
"
=
y
;
then
cat
<<
EOF
Usage:
$0
[--help] [--shared] [--static] [--release] [--debug]
[--perl name] [--make name] [--platform target] [--prefix]
[--install]
[--perl name] [--make name] [--platform target] [--prefix
dir
]
[--install
name] [--english-only
]
Options:
Options:
ll
--help
Print this message
--help
Print this help
--shared | --static Build using shared or static linking
[default: shared]
--shared | --static
Build using shared or static linking
[default: shared]
--release | --debug Build for release or debug
[default: release]
--release | --debug
Build for release or debug
[default: release]
--perl name Use \`name' as the name of the perl interpreter
[default: autodetect]
--perl name
Use \`name' as the name of the perl interpreter
[default: autodetect]
--make name Use \`name' as the name of the GNU make tool
[default: autodetect]
--make name
Use \`name' as the name of the GNU make tool
[default: autodetect]
--platform target Do not detect platform but use \`target' instead.
See PLATFORMS for a list of possibilities
--platform target
Do not detect platform but use \`target' instead.
See PLATFORMS for a list of possibilities
--prefix dir Installation prefix directory
[default: /usr/local
]
--prefix dir
Installation prefix directory
[default: /usr
]
--install name name of the GNU install tool
[default: install]
--install name Use \`name' as the name of the GNU install tool
[default: install]
--english-only Include support for English only.
EOF
test
"
$f_error
"
=
y
&&
exit
1
...
...
@@ -196,11 +202,11 @@ if test -z "$QTDIR"; then
echo
"check your Qt installation!"
exit
2
else
if
!
test
-d
"
$QTDIR
/lib"
;
then
if
test
!
-d
"
$QTDIR
/lib"
;
then
echo
"QTDIR is set, but library directory does not exist!"
exit
2
fi
if
!
test
-d
"
$QTDIR
/include"
;
then
if
test
!
-d
"
$QTDIR
/include"
;
then
echo
"QTDIR is set, but include directory does not exist!"
exit
2
fi
...
...
@@ -218,8 +224,10 @@ if test "$f_make" = NO; then
for
i
in
$make_names
;
do
for
j
in
$make_dirs
;
do
if
test
-x
"
$j
/
$i
"
;
then
make_prog
=
"
$j
/
$i
"
break
2
if
test
-n
"
`
$j
/
$i
--version
2>/dev/null |
grep
GNU
`
"
;
then
make_prog
=
"
$j
/
$i
"
break
2
fi
fi
done
done
...
...
@@ -281,18 +289,24 @@ RM = rm -f
VERSION = `cat VERSION`
INSTALL =
$f_prefix
INSTTOOL =
$f_insttool
DOXYDOCS =
$PWD
DOXYDOCS =
..
export TMAKEPATH
EOF
touch
.tmakeconfig
if
test
"
$f_shared
"
=
NO
;
then
cat
>
.tmakeconfig
<<
EOF
cat
>
>
.tmakeconfig
<<
EOF
TMAKE_LFLAGS = -static
EOF
fi
if
test
"
$f_english
"
=
YES
;
then
cat
>>
.tmakeconfig
<<
EOF
TMAKE_CXXFLAGS = -DENGLISH_ONLY
EOF
fi
for
i
in
Makefile.in src/Makefile.in examples/Makefile.in doc/Makefile.in
;
do
SRC
=
$i
DST
=
`
echo
$i
|sed
's%\(.*\).in$%\1%'
`
...
...
doc/Doxyfile
View file @
d4bdeb54
#
# $Id$
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
# All output generated with Doxygen is not covered by this license.
PROJECT_NAME =
OUTPUT_DIRECTORY = ..
HTML_HEADER =
...
...
@@ -14,7 +27,7 @@ ENABLE_PREPROCESSING = NO
INPUT = index.doc install.doc starting.doc faq.doc trouble.doc \
history.doc features.doc \
doxygen_usage.doc doxytag_usage.doc doxysearch_usage.doc \
installdox_usage.doc autolink.doc \
installdox_usage.doc
output.doc
autolink.doc \
config.doc commands.doc htmlcmds.doc language.doc
FILE_PATTERNS = *.cpp *.h *.doc
EXAMPLE_PATH = ../examples
...
...
@@ -29,3 +42,4 @@ DOC_URL =
DOC_ABSPATH =
BIN_ABSPATH = /usr/local/bin/
EXT_DOC_PATHS =
PDF_HYPERLINKS = YES
doc/Makefile.in
View file @
d4bdeb54
#
# $Id$
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
# All output generated with Doxygen is not covered by this license.
all
:
FORCE
DOXYGEN_DOCDIR
=
$(DOXYDOCS)
;
\
...
...
doc/Makefile.latex
View file @
d4bdeb54
all
:
doxygen_manual.ps
#
# $Id$
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
# All output generated with Doxygen is not covered by this license.
all
:
doxygen_manual.pdf
doxygen_manual.pdf
:
doxygen_manual.ps
ps2pdf doxygen_manual.ps doxygen_manual.pdf
doxygen_manual.ps
:
doxygen_manual.dvi
dvips
-o
doxygen_manual.ps doxygen_manual.dvi
...
...
doc/Makefile.win.in
View file @
d4bdeb54
#
# $Id$
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation under the terms of the GNU General Public License is hereby
# granted. No representations are made about the suitability of this software
# for any purpose. It is provided "as is" without express or implied warranty.
# See the GNU General Public License for more details.
#
# All output generated with Doxygen is not covered by this license.
all
:
FORCE
set
DOXYGEN_DOCDIR
=
file:///
$(DOXYGEN)
set
VERSION
=
$(VERSION)
...
...
doc/commands.doc
View file @
d4bdeb54
...
...
@@ -70,12 +70,14 @@ documentation:
<li> \refitem cmdfile \file
<li> \refitem cmdfn \fn
<li> \refitem cmdhtmlonly \htmlonly
<li> \refitem cmdimage \image
<li> \refitem cmdinclude \include
<li> \refitem cmdingroup \ingroup
<li> \refitem cmdinternal \internal
<li> \refitem cmdlatexonly \latexonly
<li> \refitem cmdline \line
<li> \refitem cmdlink \link
<li> \refitem cmdmainpage \mainpage
<li> \refitem cmdnamespace \namespace
<li> \refitem cmdoverload \overload
<li> \refitem cmdpage \page
...
...
@@ -84,6 +86,7 @@ documentation:
<li> \refitem cmdref \ref
<li> \refitem cmdrelates \relates
<li> \refitem cmdreturn \return
<li> \refitem cmdretval \retval
<li> \refitem cmdsa \sa
<li> \refitem cmdsection \section
<li> \refitem cmdskip \skip
...
...
@@ -286,6 +289,38 @@ Doxygen. Unrecognized commands are treated as normal text.
This command writes the message `For internal use only' to the output.
All text after a \c \internal command is ignored.
<hr>
\subsection cmdmainpage \mainpage [(title)]
\addindex \mainpage
If the \\mainpage command is placed in a comment block the
block is used to customize the index page (in HTML) or
the first chapter (in \f$\mbox{\LaTeX}\f$).
The title argument is optional and replaces the default title that
doxygen normally generates.
Here is an example:
\verbatim
/*! \mainpage My Personal Index Page
*
* \section intro Introduction
*
* This is the introduction.
*
* \section install Installation
*
* \subsection step1 Step 1: Opening the box
*
* etc...
*/
\endverbatim
\sa section \ref cmdsection "\\section",
section \ref cmdsubsection "\\subsection" and
section \ref cmdpage "\\page".
<hr>
\subsection cmdnamespace \namespace <name>
...
...
@@ -338,6 +373,15 @@ Doxygen. Unrecognized commands are treated as normal text.
Click <a href="$(DOXYGEN_DOCDIR)/examples/page/html/pages.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
\par notice:
The \<name\> argument consists of a combination of letters and number
digits. If you wish to use upper case letters (e.g. \c MYPAGE1), or
mixed case letters (e.g. \c MyPage1) in the \<name\> argument, you
should set \c CASE_SENSE_NAMES to \c YES. However, this is advisable
only if your file system is case sensitive. Otherwise (and for better
portability) you should use all lower case letters (e.g. \c mypage1)
for \<name\> in all references to the page.
\sa section \ref cmdsection "\\section", section
\ref cmdsubsection "\\subsection", and section
...
...
@@ -543,6 +587,23 @@ Doxygen. Unrecognized commands are treated as normal text.
\sa Section \ref cmdjdreturn "@return".
<hr>
\subsection cmdretval \retval <return value> { description }
\addindex \retval
Starts a return value for a function with name
\<return value\>. Followed by a description of the return value.
The text of the paragraph that forms the description has no special
internal structure. All visual enhancement commands may be used inside the
paragraph.
Multiple adjacent \\retval commands will be joined into a single paragraph.
Each return value description will start on a new line.
The \\retval description ends when a blank line or some other
sectioning command is encountered.
\sa Section \ref cmdjdretval "@retval".
<hr>
\subsection cmdsa \sa { references }
...
...
@@ -690,11 +751,17 @@ Doxygen. Unrecognized commands are treated as normal text.
\addindex \dontinclude
This command can be used to parse a source file without actually
including it. Any class and member declarations inside the code
verbatim including it in the documentation (as the \\include command does).
This is useful if you want to divide the source file into smaller pieces and
add documentation between the pieces.
Source files or directories can be specified using the \c EXAMPLE_PATH tag
of Doxygen's configuration file.
The class and member declarations and definitions inside the code fragment
are `remembered' during the parsing of the comment block that contained
the \\dontinclude command.
For line by line description of source files, one or more lines
For line by line description
s
of source files, one or more lines
of the example can be displayed using the \\line, \\skip, \\skipline, and
\\until commands. An internal pointer is used for these commands. The
\\dontinclude command sets the pointer to the first line of the example.
...
...
@@ -717,8 +784,8 @@ Doxygen. Unrecognized commands are treated as normal text.
\addindex \include
This command can be used to include a source file as a block of code.
The command takes the name of an include file as an argument.
Includ
e files or directories can be specified using the
\c
INCLUD
E_PATH tag of Doxygen's configuration file.
Sourc
e files or directories can be specified using the
\c
EXAMPL
E_PATH tag of Doxygen's configuration file.
Using the \\include command is equivalent to inserting the file into
the documentation block and surrounding it
...
...
@@ -728,10 +795,9 @@ Doxygen. Unrecognized commands are treated as normal text.
duplication in case of example blocks that consist of multiple
source and header files.
For line by line description of source files, one or more lines
of the example can be displayed using the \\line, \\skip, \\skipline, and
\\until commands. An internal pointer is used for these command. The
\\include command sets the pointer to the first line of the example.
For a line by line description of a source files use the
\\dontinclude command in combination with the \\line, \\skip, \\skipline,
and \\until commands.
\sa section \ref cmdexample "\\example" and \ref cmddontinclude "\\dontinclude".
...
...
@@ -966,6 +1032,45 @@ Doxygen. Unrecognized commands are treated as normal text.
\sa section \ref cmdhtmlonly "\\htmlonly" and section
\ref cmdlatexonly "\\latexonly".
<hr>
\subsection cmdimage \image <format> <file> [<sizeindication>=<size>]
\addindex \image
Inserts an image into the documentation. This command is format
specific, so if you want to insert an image for more than one
format you'll have to repeat this command for each format.
The first argument specifies the output format. Currently, the
following values are supported: \c html and \c latex.
The second argument specifies the path and file name of the image.
If a relative path is used, this will be relative to the directory to
which the output of the particular format is written.
For the html format you may also
specify an URL. If the name contains spaces you'll have to put
quotes (") around it.
The third argument can be used to specify the width or height of the
image. This is only useful for \f$\mbox{\LaTeX}\f$ output
(i.e. format=latex). \c sizeindication can be either
\c width or \c height. The size should be a valid
size specifier in \f$\mbox{\LaTeX}\f$ (for example <code>10cm</code> or
<code>6in</code>).
\verbatim
/*! Here is a snapshot of my new application:
* \image html ../images/application.jpg
* \image latex ../images/application.eps width=10cm
*/
\endverbatim
\warning The image format for HTML is limited to what your
browser supports. For \f$\mbox{\LaTeX}\f$ the image format
must be an encapsulated postscipt (eps).
<br><br>
Doxygen does not check if an image exists or if it is in
the correct format. So \e you have to make sure this is the case!
<hr>
\subsection cmdlatexonly \latexonly
...
...
@@ -1078,6 +1183,9 @@ The following command JavaDoc command are support.
\subsection cmdjdreturn @return { description of the return value }
\addindex @return
Equivalent to \\return (see section \ref cmdreturn "\\return").
\subsection cmdjdretval @retval <return value name> { return value description }
\addindex @retval
Equivalent to \\retval (see section \ref cmdretval "\\retval").
\subsection cmdjdsee @see { references }
\addindex @see
Equivalent to \\sa (see section \ref cmdsa "\\sa").
...
...
doc/config.doc
View file @
d4bdeb54
...
...
@@ -25,7 +25,7 @@ recursive-descent parser that is built into \c doxygen.
The
file
may
contain
tabs
and
newlines
for
formatting
purposes
.
The
statements
in
the
file
are
case
-
sensitive
.
Comments
may
be
placed
anywhere
within
the
file
(
except
within
quotes
).
Comments
begin
with
the
\
c
#
character
and
end
at
the
end
of
the
Comments
begin
with
the
\#
character
and
end
at
the
end
of
the
line
.
The
file
essentially
consists
of
a
list
of
assignment
statements
.
...
...
@@ -38,11 +38,95 @@ as the last character of a line.
Environment
variables
can
expanded
using
the
pattern
\
c
$(
ENV_VARIABLE_NAME
).
The
configuration
options
can
be
divided
into
several
categories
.
Below
is
a
list
of
tags
that
are
recognized
for
each
category
.
Below
is
an
alphabetical
index
of
the
tags
that
are
recognized
followed
by
the
descriptions
of
the
tags
grouped
by
category
.
\
htmlonly
<
multicol
cols
=
3
>
<
ul
>
\
endhtmlonly
\
latexonly
\
footnotesize
\
begin
{
multicols
}{
3
}
\
begin
{
CompactList
}
\
endlatexonly
<
li
>
\
refitem
cfg_allexternals
ALLEXTERNALS
<
li
>
\
refitem
cfg_alphabetical_index
ALPHABETICAL_INDEX
<
li
>
\
refitem
cfg_bin_abspath
BIN_ABSPATH
<
li
>
\
refitem
cfg_brief_member_desc
BRIEF_MEMBER_DESC
<
li
>
\
refitem
cfg_case_sense_names
CASE_SENSE_NAMES
<
li
>
\
refitem
cfg_cgi_name
CGI_NAME
<
li
>
\
refitem
cfg_cgi_url
CGI_URL
<
li
>
\
refitem
cfg_class_diagrams
CLASS_DIAGRAMS
<
li
>
\
refitem
cfg_compact_latex
COMPACT_LATEX
<
li
>
\
refitem
cfg_disable_index
DISABLE_INDEX
<
li
>
\
refitem
cfg_doc_abspath
DOC_ABSPATH
<
li
>
\
refitem
cfg_doc_url
DOC_URL
<
li
>
\
refitem
cfg_enable_preprocessing
ENABLE_PREPROCESSING
<
li
>
\
refitem
cfg_example_path
EXAMPLE_PATH
<
li
>
\
refitem
cfg_exclude
EXCLUDE
<
li
>
\
refitem
cfg_exclude_patterns
EXCLUDE_PATTERNS
<
li
>
\
refitem
cfg_expand_only_predef
EXPAND_ONLY_PREDEF
<
li
>
\
refitem
cfg_ext_doc_paths
EXT_DOC_PATHS
<
li
>
\
refitem
cfg_extra_packages
EXTRA_PACKAGES
<
li
>
\
refitem
cfg_extract_all
EXTRACT_ALL
<
li
>
\
refitem
cfg_extract_private
EXTRACT_PRIVATE
<
li
>
\
refitem
cfg_file_patterns
FILE_PATTERNS
<
li
>
\
refitem
cfg_full_path_names
FULL_PATH_NAMES
<
li
>
\
refitem
cfg_generate_html
GENERATE_HTML
<
li
>
\
refitem
cfg_generate_htmlhelp
GENERATE_HTMLHELP
<
li
>
\
refitem
cfg_generate_latex
GENERATE_LATEX
<
li
>
\
refitem
cfg_generate_man
GENERATE_MAN
<
li
>
\
refitem
cfg_generate_tagfile
GENERATE_TAGFILE
<
li
>
\
refitem
cfg_hide_undoc_classes
HIDE_UNDOC_CLASSES
<
li
>
\
refitem
cfg_hide_undoc_members
HIDE_UNDOC_MEMBERS
<
li
>
\
refitem
cfg_html_align_members
HTML_ALIGN_MEMBERS
<
li
>
\
refitem
cfg_html_footer
HTML_FOOTER
<
li
>
\
refitem
cfg_html_header
HTML_HEADER
<
li
>
\
refitem
cfg_html_output
HTML_OUTPUT
<
li
>
\
refitem
cfg_include_path
INCLUDE_PATH
<
li
>
\
refitem
cfg_inherit_docs
INHERIT_DOCS
<
li
>
\
refitem
cfg_inline_info
INLINE_INFO
<
li
>
\
refitem
cfg_input
INPUT
<
li
>
\
refitem
cfg_input_filter
INPUT_FILTER
<
li
>
\
refitem
cfg_internal_docs
INTERNAL_DOCS
<
li
>
\
refitem
cfg_javadoc_autobrief
JAVADOC_AUTOBRIEF
<
li
>
\
refitem
cfg_latex_header
LATEX_HEADER
<
li
>
\
refitem
cfg_latex_output
LATEX_OUTPUT
<
li
>
\
refitem
cfg_macro_expansion
MACRO_EXPANSION
<
li
>
\
refitem
cfg_man_extension
MAN_EXTENSION
<
li
>
\
refitem
cfg_man_output
MAN_OUTPUT
<
li
>
\
refitem
cfg_output_directory
OUTPUT_DIRECTORY
<
li
>
\
refitem
cfg_output_language
OUTPUT_LANGUAGE
<
li
>
\
refitem
cfg_paper_type
PAPER_TYPE
<
li
>
\
refitem
cfg_perl_path
PERL_PATH
<
li
>
\
refitem
cfg_predefined
PREDEFINED
<
li
>
\
refitem
cfg_project_name
PROJECT_NAME
<
li
>
\
refitem
cfg_project_number
PROJECT_NUMBER
<
li
>
\
refitem
cfg_quiet
QUIET
<
li
>
\
refitem
cfg_recursive
RECURSIVE
<
li
>
\
refitem
cfg_repeat_brief
REPEAT_BRIEF
<
li
>
\
refitem
cfg_search_includes
SEARCH_INCLUDES
<
li
>
\
refitem
cfg_searchengine
SEARCHENGINE
<
li
>
\
refitem
cfg_source_browser
SOURCE_BROWSER
<
li
>
\
refitem
cfg_strip_from_path
STRIP_FROM_PATH
<
li
>
\
refitem
cfg_tagfiles
TAGFILES
<
li
>
\
refitem
cfg_verbatim_headers
VERBATIM_HEADERS
<
li
>
\
refitem
cfg_warnings
WARNINGS
\
htmlonly
</
ul
>
</
multicol
>
\
endhtmlonly
\
latexonly
\
end
{
CompactList
}
\
end
{
multicols
}
\
normalsize
\
endlatexonly
\
subsection
config_general
General
options
<
dl
>
\
anchor
cfg_project_name
<
dt
>\
c
PROJECT_NAME
<
dd
>
\
addindex
PROJECT_NAME
The
\
c
PROJECT_NAME
tag
is
a
single
word
(
or
a
sequence
of
words
...
...
@@ -50,12 +134,14 @@ Below is a list of tags that are recognized for each category.
documentation
is
generated
.
This
name
is
used
in
the
title
of
most
generated
pages
and
in
a
few
other
places
.
\
anchor
cfg_project_number
<
dt
>\
c
PROJECT_NUMBER
<
dd
>
\
addindex
PROJECT_NUMBER
The
\
c
PROJECT_NUMBER
tag
can
be
used
to
enter
a
project
or
revision
number
.
This
could
be
handy
for
archiving
the
generated
documentation
or
if
some
version
control
system
is
used
.
\
anchor
cfg_output_directory
<
dt
>\
c
OUTPUT_DIRECTORY
<
dd
>
\
addindex
OUTPUT_DIRECTORY
The
\
c
OUTPUT_DIRECTORY
tag
is
used
to
specify
the
(
relative
or
absolute
)
...
...
@@ -63,6 +149,7 @@ Below is a list of tags that are recognized for each category.
If
a
relative
path
is
entered
,
it
will
be
relative
to
the
location
where
doxygen
was
started
.
If
left
blank
the
current
directory
will
be
used
.
\
anchor
cfg_output_language
<
dt
>\
c
OUTPUT_LANGUAGE
<
dd
>
\
addindex
OUTPUT_LANGUAGE
The
\
c
OUTPUT_LANGUAGE
tag
is
used
to
specify
the
language
in
which
all
...
...
@@ -71,6 +158,7 @@ Below is a list of tags that are recognized for each category.
The
default
language
is
English
,
other
supported
languages
are
:
Dutch
,
French
,
Italian
,
Czech
,
Swedish
,
German
and
Japanese
.
\
anchor
cfg_quiet
<
dt
>\
c
QUIET
<
dd
>
\
addindex
QUIET
The
\
c
QUIET
tag
can
be
used
to
turn
on
/
off
the
messages
that
are
generated
...
...
@@ -78,6 +166,7 @@ Below is a list of tags that are recognized for each category.
where
\
c
YES
implies
that
the
messages
are
off
.
If
left
blank
\
c
NO
is
used
.
\
anchor
cfg_warnings
<
dt
>\
c
WARNINGS
<
dd
>
\
addindex
WARNINGS
The
\
c
WARNINGS
tag
can
be
used
to
turn
on
/
off
the
warning
messages
that
are
...
...
@@ -86,6 +175,7 @@ Below is a list of tags that are recognized for each category.
\
b
Tip
:
Turn
warnings
on
while
writing
the
documentation
.
\
anchor
cfg_disable_index
<
dt
>\
c
DISABLE_INDEX
<
dd
>
\
addindex
DISABLE_INDEX
If
you
want
full
control
over
the
layout
of
the
generated
HTML
pages
it
...
...
@@ -94,6 +184,7 @@ Below is a list of tags that are recognized for each category.
top
of
each
page
.
A
value
of
NO
(
the
default
)
enables
the
index
and
the
value
YES
disables
it
.
\
anchor
cfg_extract_all
<
dt
>\
c
EXTRACT_ALL
<
dd
>
\
addindex
EXTRACT_ALL
If
the
\
c
EXTRACT_ALL
tag
is
set
to
\
c
YES
all
classes
and
functions
will
be
...
...
@@ -102,11 +193,13 @@ Below is a list of tags that are recognized for each category.
\
b
Notice
:
This
will
also
disable
the
warnings
about
undocumented
members
that
are
normally
produced
when
\
c
WARNINGS
is
set
to
\
c
YES
\
anchor
cfg_extract_private
<
dt
>\
c
EXTRACT_PRIVATE
<
dd
>
\
addindex
EXTRACT_PRIVATE
If
the
\
c
EXTRACT_PRIVATE
tag
is
set
to
\
c
YES
all
documentation
for
private
members
will
be
extracted
as
well
.
\
anchor
cfg_hide_undoc_members
<
dt
>\
c
HIDE_UNDOC_MEMBERS
<
dd
>
\
addindex
HIDE_UNDOC_MEMBERS
If
the
\
c
HIDE_UNDOC_MEMBERS
tag
is
set
to
\
c
YES
,
Doxygen
will
hide
all
...
...
@@ -114,6 +207,7 @@ Below is a list of tags that are recognized for each category.
If
set
to
\
c
NO
(
the
default
)
these
members
will
be
included
in
the
various
overviews
,
but
no
documentation
section
is
generated
.
\
anchor
cfg_hide_undoc_classes
<
dt
>\
c
HIDE_UNDOC_CLASSES
<
dd
>
\
addindex
HIDE_UNDOC_CLASSES
If
the
\
c
HIDE_UNDOC_CLASSESS
tag
is
set
to
\
c
YES
,
Doxygen
will
hide
all
...
...
@@ -121,6 +215,7 @@ Below is a list of tags that are recognized for each category.
If
set
to
\
c
NO
(
the
default
)
these
classes
will
be
included
in
the
various
overviews
.
\
anchor
cfg_brief_member_desc
<
dt
>\
c
BRIEF_MEMBER_DESC
<
dd
>
\
addindex
BRIEF_MEMBER_DESC
If
the
\
c
BRIEF_MEMBER_DESC
tag
is
set
to
\
c
YES
(
the
default
)
Doxygen
will
...
...
@@ -128,6 +223,7 @@ Below is a list of tags that are recognized for each category.
the
file
and
class
documentation
(
similar
to
JavaDoc
).
Set
to
NO
to
disable
this
.
\
anchor
cfg_internal_docs
<
dt
>\
c
INTERNAL_DOCS
<
dd
>
\
addindex
INTERNAL_DOCS
The
\
c
INTERNAL_DOCS
tag
determines
if
documentation
...
...
@@ -135,6 +231,7 @@ Below is a list of tags that are recognized for each category.
to
\
c
NO
(
the
default
)
then
the
documentation
will
be
excluded
.
Set
it
to
\
c
YES
to
include
the
internal
documentation
.
\
anchor
cfg_repeat_brief
<
dt
>\
c
REPEAT_BRIEF
<
dd
>
\
addindex
REPEAT_BRIEF
If
the
\
c
REPEAT_BRIEF
tag
is
set
to
\
c
YES
(
the
default
)
Doxygen
will
...
...
@@ -145,12 +242,14 @@ Below is a list of tags that are recognized for each category.
If
both
\
c
HIDE_UNDOC_MEMBERS
and
\
c
BRIEF_MEMBER_DESC
are
set
to
\
c
NO
,
the
brief
descriptions
will
be
completely
suppressed
.
\
anchor
cfg_full_path_names
<
dt
>\
c
FULL_PATH_NAMES
<
dd
>
\
addindex
FULL_PATH_NAMES
If
the
\
c
FULL_PATH_NAMES
tag
is
set
to
\
c
YES
Doxygen
will
prepend
the
full
path
before
files
name
in
the
file
list
and
in
the
header
files
.
If
set
to
NO
the
shortest
path
that
makes
the
file
name
unique
will
be
used
\
anchor
cfg_strip_from_path
<
dt
>\
c
STRIP_FROM_PATH
<
dd
>
\
addindex
STRIP_FROM_PATH
If
the
\
c
FULL_PATH_NAMES
tag
is
set
to
\
c
YES
then
the
\
c
STRIP_FROM_PATH
tag
...
...
@@ -158,18 +257,21 @@ Below is a list of tags that are recognized for each category.
only
done
if
one
of
the
specified
strings
matches
the
left
-
hand
part
of
the
path
.
\
anchor
cfg_class_diagrams
<
dt
>\
c
CLASS_DIAGRAMS
<
dd
>
\
addindex
CLASS_DIAGRAMS
If
the
\
c
CLASS_DIAGRAMS
tag
is
set
to
\
c
YES
(
the
default
)
Doxygen
will
generate
a
class
diagram
(
in
Html
and
LaTeX
)
for
classes
with
base
or
generate
a
class
diagram
(
in
Html
and
\
f
$\
mbox
{\
LaTeX
}\
f
$
)
for
classes
with
base
or
super
classes
.
Setting
the
tag
to
\
c
NO
turns
the
diagrams
off
.
\
anchor
cfg_source_browser
<
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
.
\
anchor
cfg_case_sense_names
<
dt
>\
c
CASE_SENSE_NAMES
<
dd
>
\
addindex
CASE_SENSE_NAMES
If
the
\
c
CASE_SENSE_NAMES
tag
is
set
to
\
c
NO
(
the
default
)
then
Doxygen
...
...
@@ -178,25 +280,40 @@ Below is a list of tags that are recognized for each category.
classes
or
files
whose
names
only
differ
in
case
and
if
your
file
system
supports
case
sensitive
file
names
.
\
anchor
cfg_verbatim_headers
<
dt
>\
c
VERBATIM_HEADERS
<
dd
>
\
addindex
VERBATIM_HEADERS
If
the
VERBATIM_HEADERS
tag
is
set
the
YES
(
the
default
)
then
Doxygen
\
n
";
will generate a verbatim copy of the header file for each class for
\n
"
;
which
an
include
is
specified
.
Set
to
NO
to
disable
this
.
\
n
";
If
the
\
c
VERBATIM_HEADERS
tag
is
set
the
\
c
YES
(
the
default
)
then
Doxygen
will
generate
a
verbatim
copy
of
the
header
file
for
each
class
for
which
an
include
is
specified
.
Set
to
NO
to
disable
this
.
\
sa
Section
\
ref
cmdclass
"
\\
class"
.
\
anchor
cfg_javadoc_autobrief
<
dt
>\
c
JAVADOC_AUTOBRIEF
<
dd
>
\
addinex
JAVADOC_AUTOBRIEF
If the
JAVADOC_NO_AUTOBRIEF is set to
YES (the default) then Doxygen
If
the
\
c
JAVADOC_NO_AUTOBRIEF
is
set
to
\
c
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
.
\
anchor
cfg_inherit_docs
<
dt
>\
c
INHERIT_DOCS
<
dd
>
\
addindex
INHERIT_DOCS
If
the
\
c
INHERIT_DOCS
tag
is
set
to
\
c
YES
(
the
default
)
then
an
undocumented
member
inherits
the
documentation
from
any
documented
member
that
it
reimplements
.
\
anchor
cfg_inline_info
<
dt
>
INLINE_INFO
<
dd
>
If
the
\
c
INLINE_INFO
tag
is
set
to
\
c
YES
(
the
default
)
then
a
tag
[
inline
]
is
inserted
in
the
documentation
for
inline
members
.
</
dl
>
\
subsection
config_input
Input
related
options
<
dl
>
\
anchor
cfg_input
<
dt
>\
c
INPUT
<
dd
>
\
addindex
INPUT
The
\
c
INPUT
tag
is
used
to
specify
the
files
and
/
or
directories
that
contain
...
...
@@ -206,6 +323,7 @@ Below is a list of tags that are recognized for each category.
\
b
Notice
:
This
tag
(
and
only
this
tag
)
is
\
e
required
.
\
anchor
cfg_file_patterns
<
dt
>\
c
FILE_PATTERNS
<
dd
>
\
addindex
FILE_PATTERNS
If
the
value
of
the
\
c
INPUT
tag
contains
directories
,
you
can
use
the
...
...
@@ -214,31 +332,35 @@ Below is a list of tags that are recognized for each category.
in
the
directories
.
If
left
blank
all
files
are
included
(
i
.
e
.
wildcard
<
tt
>*</
tt
>).
\
anchor
cfg_recursive
<
dt
>\
c
RECURSIVE
<
dd
>
\
addindex
RECURSIVE
The
\
c
RECURSIVE
tag
can
be
used
to
specify
whether
or
not
subdirectories
should
be
searched
for
input
files
as
well
.
Possible
values
are
\
c
YES
and
\
c
NO
.
If
left
blank
\
c
NO
is
used
.
\
anchor
cfg_exclude
<
dt
>\
c
EXCLUDE
<
dd
>
\
addindex
EXCLUDE
The
\
c
EXCLUDE
tag
can
be
used
to
specify
files
and
/
or
directories
that
should
excluded
from
the
\
c
INPUT
source
files
.
This
way
you
can
easily
exclude
a
subdirectory
from
a
directory
tree
whose
root
is
specified
with
the
\
c
INPUT
tag
.
\
anchor
cfg_exclude_patterns
<
dt
>\
c
EXCLUDE_PATTERNS
<
dd
>
\
addindex
EXCLUDE_PATTERNS
If
the
value
of
the
INPUT
tag
contains
directories
,
you
can
use
the
\
c
EXCLUDE_PATTERNS
tag
to
specify
one
or
more
wildcard
patterns
to
exclude
certain
files
from
those
directories
.
\
anchor
cfg_example_path
<
dt
>\
c
EXAMPLE_PATH
<
dd
>
\
addindex
EXAMPLE_PATH
The
\
c
EXAMPLE_PATH
tag
can
be
used
to
specify
one
or
more
files
or
directories
that
contain
example
code
fragments
that
are
included
(
see
the
\\
include
command
in
section
\
ref
cmdinclude
"
\\
include"
).
\
anchor
cfg_input_filter
<
dt
>\
c
INPUT_FILTER
<
dd
>
\
addindex
INPUT_FILTER
The
\
c
INPUT_FILTER
tag
can
be
used
to
specify
a
program
that
doxygen
should
...
...
@@ -257,17 +379,20 @@ Below is a list of tags that are recognized for each category.
\
subsection
html_output
HTML
related
options
<
dl
>
\
anchor
cfg_generate_html
<
dt
>\
c
GENERATE_HTML
<
dd
>
\
addindex
GENERATE_HTML
If
the
\
c
GENERATE_HTML
tag
is
set
to
\
c
YES
(
the
default
)
Doxygen
will
generate
HTML
output
\
anchor
cfg_html_output
<
dt
>\
c
HTML_OUTPUT
<
dd
>
\
addindex
HTML_OUTPUT
The
\
c
HTML_OUTPUT
tag
is
used
to
specify
where
the
HTML
docs
will
be
put
.
If
a
relative
path
is
entered
the
value
of
\
c
OUTPUT_DIRECTORY
will
be
put
in
front
of
it
.
If
left
blank
`
html
' will be used as the default path.
\anchor cfg_html_header
<dt>\c HTML_HEADER <dd>
\addindex HTML_HEADER
The \c HTML_HEADER tag can be used to specify a user defined HTML
...
...
@@ -289,6 +414,7 @@ Below is a list of tags that are recognized for each category.
Doxygen will replace them by respectively
the title of the page, the current date and time, or only the current date.
\anchor cfg_html_footer
<dt>\c HTML_FOOTER <dd>
\addindex HTML_FOOTER
The \c HTML_FOOTER tag can be used to specify a user defined HTML footer for
...
...
@@ -305,6 +431,7 @@ Below is a list of tags that are recognized for each category.
Doxygen will replace them by respectively
the title of the page, the current date and time, or only the current date.
\anchor cfg_html_align_members
<dt>\c HTML_ALIGN_MEMBERS <dd>
If the \c HTML_ALIGN_MEMBERS tag is set to \c YES, the members of classes,
...
...
@@ -315,6 +442,7 @@ NO a bullet list will be used.
Setting this tag to NO will become obsolete in the future, since I only
intent to support and test the aligned representation.
\anchor cfg_generate_htmlhelp
<dt>\c GENERATE_HTMLHELP <dd>
If the \c GENERATE_HTMLHELP tag is set to \c YES,
...
...
@@ -337,6 +465,7 @@ 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.
\anchor cfg_alphabetical_index
<dt>\c ALPHABETICAL_INDEX <dd>
If the \c ALPHABETICAL_INDEX tag is set to \c YES, an alphabetical index
...
...
@@ -348,23 +477,28 @@ a lot of classes, structs, unions or interfaces.
\subsection latex_output LaTeX related options
<dl>
\anchor cfg_generate_latex
<dt>\c GENERATE_LATEX <dd>
\addindex GENERATE_LATEX
If the \c GENERATE_LATEX tag is set to \c YES (the default) Doxygen will
generate Latex output.
\anchor cfg_latex_output
<dt>\c LATEX_OUTPUT <dd>
\addindex LATEX_OUTPUT
The \c LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
The \c LATEX_OUTPUT tag is used to specify where the \f$\mbox{\LaTeX}\f$
docs will be put.
If a relative path is entered the value of \c OUTPUT_DIRECTORY will be
put in front of it. If left blank `latex'
will
be
used
as
the
default
path
.
\
anchor
cfg_compact_latex
<
dt
>\
c
COMPACT_LATEX
<
dd
>
\
addindex
COMPACT_LATEX
If
the
\
c
COMPACT_LATEX
tag
is
set
to
\
c
YES
Doxygen
generates
more
compact
LaTeX
documents. This may be useful for small projects and may help to
\
f
$\
mbox
{\
LaTeX
}\
f
$
documents
.
This
may
be
useful
for
small
projects
and
may
help
to
save
some
trees
in
general
.
\
anchor
cfg_paper_type
<
dt
>\
c
PAPER_TYPE
<
dd
>
\
addindex
PAPER_TYPE
The
PAPER_TYPE
tag
can
be
used
to
set
the
paper
type
that
is
used
...
...
@@ -378,25 +512,64 @@ a lot of classes, structs, unions or interfaces.
</
ul
>
If
left
blank
a4wide
will
be
used
.
\
anchor
cfg_extra_packages
<
dt
>\
c
EXTRA_PACKAGES
<
dd
>
\
addindex
EXTRA_PACKAGES
The EXTRA_PACKAGES tag can be used to specify one or more
LaTeX
package names that should be included in the
LaTeX
output.
The
EXTRA_PACKAGES
tag
can
be
used
to
specify
one
or
more
\
f
$\
mbox
{\
LaTeX
}\
f
$
package
names
that
should
be
included
in
the
\
f
$\
mbox
{\
LaTeX
}\
f
$
output
.
To
get
the
times
font
for
instance
you
can
specify
\
verbatim
EXTRA_PACKAGES
=
times
\
endverbatim
If
left
blank
no
extra
packages
will
be
included
.
\
anchor
cfg_latex_header
<
dt
>\
c
LATEX_HEADER
<
dd
>
\
addindex
LATEX_HEADER
The
\
c
LATEX_HEADER
tag
can
be
used
to
specify
a
personal
\
f
$\
mbox
{\
LaTeX
}\
f
$
header
for
the
generated
latex
document
.
The
header
should
contain
everything
until
the
first
chapter
.
If
it
is
left
blank
doxygen
will
generate
a
standard
header
,
which
looks
as
follows
for
the
default
configuration
settings
:
\
verbatim
\
documentclass
[
a4paper
]{
book
}
\
usepackage
{
a4wide
}
\
usepackage
{
makeidx
}
\
usepackage
{
fancyheadings
}
\
usepackage
{
epsfig
}
\
usepackage
{
float
}
\
usepackage
{
doxygen
}
\
makeindex
\
setcounter
{
tocdepth
}{
1
}
\
setlength
{\
footrulewidth
}{
0.4
pt
}
\
begin
{
document
}
\
title
{
Reference
Manual
}
\
author
{
Generated
by
Doxygen
}
\
date
{
Thu
Sep
30
19
:
58
:
32
1999
}
\
maketitle
\
pagenumbering
{
roman
}
\
clearemptydoublepage
\
tableofcontents
\
clearemptydoublepage
\
pagenumbering
{
arabic
}
\
endverbatim
\
par
Notice
:
Only
use
a
user
defined
header
if
you
know
what
you
are
doing
!
</
dl
>
\
subsection
man_output
Man
page
related
options
<
dl
>
\
anchor
cfg_generate_man
<
dt
>\
c
GENERATE_MAN
<
dd
>
\
addindex
GENERATE_MAN
If
the
\
c
GENERATE_MAN
tag
is
set
to
\
c
YES
(
the
default
)
Doxygen
will
generate
man
pages
for
classes
and
files
.
\
anchor
cfg_man_output
<
dt
>\
c
MAN_OUTPUT
<
dd
>
\
addindex
MAN_OUTPUT
The
\
c
MAN_OUTPUT
tag
is
used
to
specify
where
the
man
pages
will
be
put
.
...
...
@@ -405,6 +578,7 @@ EXTRA_PACKAGES = times
A directory man3 will be created inside the directory specified by
\c MAN_OUTPUT.
\anchor cfg_man_extension
<dt>\c MAN_EXTENSION <dd>
\addindex MAX_EXTENSION
The MAN_EXTENSION tag determines the extension that is added to
...
...
@@ -414,29 +588,34 @@ EXTRA_PACKAGES = times
\
subsection
config_prepro
Preprocessor
related
options
<
dl
>
\
anchor
cfg_enable_preprocessing
<
dt
>\
c
ENABLE_PREPROCESSING
<
dd
>
\
addindex
ENABLE_PREPROCESSING
If
the
\
c
ENABLE_PREPROCESSING
tag
is
set
to
\
c
YES
(
the
default
)
Doxygen
will
evaluate
all
C
-
preprocessor
directives
found
in
the
sources
and
include
files
.
\
anchor
cfg_macro_expansion
<
dt
>\
c
MACRO_EXPANSION
<
dd
>
\
addindex
MACRO_EXPANSION
If
the
\
c
MACRO_EXPANSION
tag
is
set
to
\
c
YES
Doxygen
will
expand
all
macro
names
in
the
source
code
.
If
set
to
\
c
NO
(
the
default
)
only
conditional
compilation
will
be
performed
.
\
anchor
cfg_search_includes
<
dt
>\
c
SEARCH_INCLUDES
<
dd
>
\
addindex
SEARCH_INCLUDES
If
the
\
c
SEARCH_INCLUDES
tag
is
set
to
\
c
YES
(
the
default
)
the
includes
files
in
the
\
c
INCLUDE_PATH
(
see
below
)
will
be
search
if
a
\#
include
is
found
.
\
anchor
cfg_include_path
<
dt
>\
c
INCLUDE_PATH
<
dd
>
\
addindex
INCLUDE_PATH
The
\
c
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
.
\
anchor
cfg_predefined
<
dt
>\
c
PREDEFINED
<
dd
>
\
addindex
PREDEFINED
The
\
c
PREDEFINED
tag
can
be
used
to
specify
one
or
more
macro
names
that
...
...
@@ -445,6 +624,7 @@ EXTRA_PACKAGES = times
<
code
>
name
</
code
>
or
<
code
>
name
=
definition
</
code
>
(
no
spaces
).
If
the
definition
and
the
=
are
omitted
=
1
is
assumed
.
\
anchor
cfg_expand_only_predef
<
dt
>\
c
EXPAND_ONLY_PREDEF
<
dd
>
\
addindex
EXPAND_ONLY_PREDEF
If
the
\
c
EXPAND_ONLY_PREDEF
and
\
c
MACRO_EXPANSION
tags
are
both
set
to
YES
...
...
@@ -456,6 +636,7 @@ EXTRA_PACKAGES = times
\
subsection
config_extref
External
reference
options
<
dl
>
\
anchor
cfg_tagfiles
<
dt
>\
c
TAGFILES
<
dd
>
\
addindex
TAGFILES
The
\
c
TAGFILES
tag
can
be
used
to
specify
one
or
more
tagfiles
.
...
...
@@ -467,6 +648,7 @@ EXTRA_PACKAGES = times
in
the
directory
in
which
doxygen
is
run
,
you
must
also
specify
the
path
to
the
tagfile
here
.
\
anchor
cfg_generate_tagfile
<
dt
>\
c
GENERATE_TAGFILE
<
dd
>
\
addindex
GENERATE_TAGFILE
When
a
file
name
is
specified
after
\
c
GENERATE_TAGFILE
,
doxygen
will
create
...
...
@@ -474,12 +656,14 @@ EXTRA_PACKAGES = times
See
section
\
ref
doxytag_usage
for
more
information
about
the
usage
of
tag
files
.
\
anchor
cfg_allexternals
<
dt
>\
c
ALLEXTERNALS
<
dd
>
\
addindex
ALLEXTERNALS
if
the
\
c
ALLEXTERNALS
tag
is
set
to
\
c
YES
all
external
class
will
be
listed
in
the
class
index
.
If
set
to
\
c
NO
only
the
inherited
external
classes
will
be
listed
.
\
anchor
cfg_perl_path
<
dt
>\
c
PERL_PATH
<
dd
>
\
addindex
PERL_PATH
The
\
c
PERL_PATH
should
be
the
absolute
path
and
name
of
the
perl
script
...
...
@@ -489,6 +673,7 @@ EXTRA_PACKAGES = times
\subsection config_search Search engine options
<dl>
\anchor cfg_searchengine
<dt>\c SEARCHENGINE <dd>
\addindex SEARCHENGINE
The \c SEARCHENGINE tag specifies whether or not a
...
...
@@ -496,18 +681,21 @@ EXTRA_PACKAGES = times
If set to \c NO or left blank, the values of all other tags in this section
will be ignored.
\anchor cfg_cgi_name
<dt>\c CGI_NAME <dd>
\addindex CGI_NAME
The \c CGI_NAME tag should be the name of the CGI script that
starts the search engine (<tt>doxysearch</tt>) with the correct parameters.
A script with this name will be generated by doxygen.
\anchor cfg_cgi_url
<dt>\c CGI_URL <dd>
\addindex CGI_URL
The \c CGI_URL tag should be the absolute URL to the directory where the
cgi binaries are located. See the documentation of your http daemon for
details.
\anchor cfg_doc_url
<dt>\c DOC_URL <dd>
\addindex DOC_URL
The \c DOC_URL tag should be the absolute URL to the directory where the
...
...
@@ -515,17 +703,20 @@ EXTRA_PACKAGES = times
documentation, with <tt>file://</tt> prepended to it, will be used.
This is correct for local viewing only.
\anchor cfg_doc_abspath
<dt>\c DOC_ABSPATH <dd>
\addindex DOC_ABSPATH
The \c DOC_ABSPATH tag should be the absolute path to the directory where the
documentation is located. If left blank the directory on the local machine
will be used.
\anchor cfg_bin_abspath
<dt>\c BIN_ABSPATH <dd>
\addindex BIN_ABSPATH
The \c BIN_ABSPATH tag must point to the directory where the doxysearch binary
is installed.
\anchor cfg_ext_doc_paths
<dt>\c EXT_DOC_PATHS <dd>
\addindex EXT_DOC_PATHS
The \c EXT_DOC_PATHS tag can be used to specify one or more paths to
...
...
doc/doxygen.sty
View file @
d4bdeb54
%
% $Id$
%
% Copyright (C) 1997-1999 by Dimitri van Heesch.
%
% Permission to use, copy, modify, and distribute this software and its
% documentation under the terms of the GNU General Public License is hereby
% granted. No representations are made about the suitability of this software
% for any purpose. It is provided "as is" without express or implied warranty.
% See the GNU General Public License for more details.
%
% All output generated with Doxygen is not covered by this license.
\NeedsTeXFormat
{
LaTeX2e
}
\ProvidesPackage
{
doxygen
}
\RequirePackage
{
calc
}
...
...
doc/doxygen_manual.tex
View file @
d4bdeb54
\documentclass
[a4paper]
{
article
}
%
% $Id$
%
% Copyright (C) 1997-1999 by Dimitri van Heesch.
%
% Permission to use, copy, modify, and distribute this software and its
% documentation under the terms of the GNU General Public License is hereby
% granted. No representations are made about the suitability of this software
% for any purpose. It is provided "as is" without express or implied warranty.
% See the GNU General Public License for more details.
%
% All output generated with Doxygen is not covered by this license.
\documentclass
[a4paper,ps2pdf]
{
article
}
\usepackage
{
a4wide
}
\usepackage
{
makeidx
}
\usepackage
{
fancyheadings
}
\usepackage
{
epsf
}
\usepackage
{
doxygen
}
\usepackage
{
multicol
}
\usepackage
{
times
}
\usepackage
[backref=true,
pagebackref=true,
colorlinks=true,
linkcolor=blue
]
{
hyperref
}
\makeindex
\setcounter
{
tocdepth
}{
1
}
\setlength
{
\footrulewidth
}{
0.4pt
}
...
...
@@ -35,6 +54,7 @@ Written by Dimitri van Heesch\\[2ex]
\input
{
doxytag
_
usage
}
\input
{
doxysearch
_
usage
}
\input
{
installdox
_
usage
}
\input
{
output
}
\input
{
autolink
}
\input
{
config
}
\input
{
commands
}
...
...
doc/doxygen_usage.doc
View file @
d4bdeb54
...
...
@@ -41,7 +41,11 @@ doxygen <config_file>
\endverbatim
</ol>
If you also want a search engine to be generated, you should look
The \c -s option is optional and can be used suppress the description that
doxygen normally generates for each tag. Try to use this option if you send
me configuration files!
If you also want to use the search engine, you should look
at section \ref doxysearch_usage.
*/
doc/faq.doc
View file @
d4bdeb54
...
...
@@ -18,12 +18,19 @@
<ol>
<li><b>How do get information on the index page in HTML?</b>
<p>
There is no real support for title pages at the moment. But you can
override the default index page, by using the following comment block:
You should use the \\mainpage command inside a comment block like this:
\verbatim
/*! \
page index
My Personal Index Page
/*! \
mainpage
My Personal Index Page
*
* This is my index personal index page.
* \section intro Introduction
*
* This is the introduction.
*
* \section install Installation
*
* \subsection step1 Step 1: Opening the box
*
* etc...
*/
\endverbatim
...
...
@@ -44,6 +51,11 @@ around the blocks that should be hidden and put:
\endverbatim
in the config file then all blocks should be skipped by Doxygen as long
as <code>PREPROCESSING = YES</code>.
<li><b>How can I make doxygen ignore nasty macro's? </b>
Look at section \ref preprocessing for the answer.
</ol>
*/
doc/index.doc
View file @
d4bdeb54
...
...
@@ -41,7 +41,8 @@ All output generated by Doxygen is not covered by this license.
Doxygen is a documentation system for C and C++. It can generate an on-line
class browser (in HTML) and/or an off-line reference manual
(in \f$\mbox{\LaTeX}\f$) from a set
of documented source files. The documentation is extracted directly from the
of documented source files. There is also some support for generating
man pages. The documentation is extracted directly from the
sources. Doxygen is developed on a <a href="http://www.linux.org">Linux</a>
platform, but it runs on most other UNIX flavors as well.
An executable for Windows 95/NT is also available.
...
...
@@ -78,6 +79,8 @@ The second part forms a reference manual:
<li>Section \ref doxysearch_usage shows how to use the \c doxysearch program.
<li>Section \ref installdox_usage shows how to use the \c installdox
script that is generated by Doxygen if you use tag files.
<li>Section \ref output shows how to generate the various output formats
supported by Doxygen.
<li>Section \ref autolink shows how to put links to files, classes,
and members in the documentation.
<li>Section \ref config shows how to fine-tune doxygen, so it
...
...
@@ -177,6 +180,8 @@ Matthias Baas,
Walter Mueller,
William van Dieten,
Joshua Jensen,
Patrick Aberts,
Jacques Tremblay,
and many others for suggestions, patches and bug reports.
</ul>
*/
...
...
doc/language.doc
View file @
d4bdeb54
...
...
@@ -150,6 +150,31 @@ Here is a list of the languages and their current maintainers:
foltra@puc.cl</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Finnish
</TD>
<TD>
Olli Korhonen
</TD>
<TD>
<a href="mailto:Olli.Korhonen@ccc.fi">
Olli.Korhonen@ccc.fi</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Russian
</TD>
<TD>
Vladimir Vodolazkiy
</TD>
<TD>
<a href="mailto:voldemarus@geocities.com">
voldemarus@geocities.com</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Dutch
...
...
@@ -192,6 +217,10 @@ Here is a list of the languages and their current maintainers:
\hline
Spanish & Francisco Oltra Thennet & {\tt foltra@puc.cl} \\
\hline
Finish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} \\
\hline
Russian & Vladimir Vodolazkiy & {\tt voldemarus@geocities.com} \\
\hline
Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} \\
\hline
\end{tabular}
...
...
doc/output.doc
0 → 100644
View file @
d4bdeb54
/******************************************************************************
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* All output generated with Doxygen is not covered by this license.
*
*/
/*! \page output.html
\section output Output Formats
\addindex output formats
The following output formats are \e directly supported by doxygen:
<dl>
<dt><b>HTML</b>
<dd>Generated if GENERATE_HTML is set to YES in the configuration file.
<dt>\f$\mbox{\LaTeX}\f$
<dd>Generated if GENERATE_LATEX is set to YES in the configuration file.
<dt><b>Man pages</b>
<dd>Generated if GENERATE_MAN is set to YES in the configuration file.
</dl>
The following output formats are \e indirectly supported by doxygen:
<dl>
<dt><b>Compressed HTML</b> (a.k.a. Windows 98 help)
<dd>Generated by Microsoft's HTML Help workshop from the HTML output if
\c GENERATE_HTMLHELP is set to \c YES.
<dt><b>Postscript</b>
<dd>Generated from the \f$\mbox{\LaTeX}\f$ output by
running <code>make ps</code> in the output directory.
For the best results \c PDF_HYPERLINKS should be set to \c NO.
<dt><b>PDF</b>\htmlonly \endhtmlonly
<dd>Generated from the \f$\mbox{\LaTeX}\f$ output by
running <code>make pdf</code> in the output directory.
In order to get hyperlinks in the pdf file,
\c PDF_HYPERLINKS should be set to \c YES.
</dl>
*/
doc/starting.doc
View file @
d4bdeb54
...
...
@@ -203,7 +203,7 @@ The one-line comments should contain a brief description,
whereas the multi-line comment blocks contain a more detailed description.
The brief descriptions are included in the member overview of a class,
namespace or file and are printed using a small italic font
(this description can be omitted by setting \c BRIEF_
MEMBER
_DESC to \c NO in
(this description can be omitted by setting \c BRIEF_
STDMETHOD
_DESC to \c NO in
the config file). By default the brief descriptions are also the first
sentence of the detailed description
(this can be changed by setting the \c REPEAT_BRIEF tag to \c NO).
...
...
@@ -443,7 +443,7 @@ after preprocessing becomes:
\endverbatim
Notice that doxygen will now expand \e all macro definitions
(recursively if needed). This is often too much
, therefore
doxygen also
(recursively if needed). This is often too much
. Therefore,
doxygen also
allows you to expand only those defines that you explicitly
specify. For this you have to set the \c EXPAND_ONLY_PREDEF tag to \c YES
and specify the macro definitions after the \c PREDEFINED tag.
...
...
@@ -462,9 +462,9 @@ of an abstract base class called \c IUnknown:
/*! The IUnknown interface */
DECLARE_INTERFACE(IUnknown)
{
MEMBER
(HRESULT,QueryInterface) (THIS_ REFIID iid, void **ppv) PURE;
MEMBER
(ULONG,AddRef) (THIS) PURE;
MEMBER
(ULONG,Release) (THIS) PURE;
STDMETHOD
(HRESULT,QueryInterface) (THIS_ REFIID iid, void **ppv) PURE;
STDMETHOD
(ULONG,AddRef) (THIS) PURE;
STDMETHOD
(ULONG,Release) (THIS) PURE;
};
\endverbatim
...
...
@@ -479,7 +479,7 @@ ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
PREDEFINED = "DECLARE_INTERFACE(name)=class name" \
"
MEMBER
(result,name)=virtual result name" \
"
STDMETHOD
(result,name)=virtual result name" \
"PURE= = 0" \
THIS_= \
THIS= \
...
...
doc/trouble.doc
View file @
d4bdeb54
...
...
@@ -48,8 +48,8 @@
int *(a[20]);
\endverbatim
then doxygen will remove the braces and correctly parse the result.
<li>Not all names in code fragments that are include in the documentation
are replaced by links (for instance when using
SOURCE_BROWSER =
YES).
<li>Not all names in code fragments that are include
d
in the documentation
are replaced by links (for instance when using
\c SOURCE_BROWSER = \c
YES).
For a part this is because the code parser isn't smart enough at the
moment. I'll try to improve this in the future. But even with these
improvements not everthing can be properly linked to the corresponding
...
...
examples/Makefile.in
View file @
d4bdeb54
...
...
@@ -75,7 +75,7 @@ autolink/html/index.html: autolink.cpp autolink.cfg
tag/html/index.html
:
tag.cpp tag.cfg
$(DOXYGEN)
/bin/doxygen tag.cfg
sed
-e
"1,1s
.perl.
$(PERL)
.
g"
tag/html/installdox
>
tag/html/installdox.perl
sed
-e
"1,1s
#perl#
$(PERL)
#
g"
tag/html/installdox
>
tag/html/installdox.perl
cd
tag/html
;
$(PERL)
installdox.perl
-lexample
.tag@../../example/html
restypedef/html/index.html
:
restypedef.cpp restypedef.cfg
...
...
src/classdef.cpp
View file @
d4bdeb54
...
...
@@ -232,11 +232,11 @@ void ClassDef::writeDocumentation(OutputList &ol)
}
pageTitle
+=
pageType
+
" Reference"
;
startFile
(
ol
,
fileName
,
pageTitle
);
startTitle
(
ol
);
startTitle
(
ol
,
getOutputFileBase
()
);
//ol.docify(name()+" "+pageType.right(pageType.length()-1)+" ");
//parseText(ol,theTranslator->trReference());
parseText
(
ol
,
theTranslator
->
trCompoundReference
(
name
(),
compType
));
endTitle
(
ol
,
name
());
endTitle
(
ol
,
getOutputFileBase
(),
name
());
// write brief description
OutputList
briefOutput
(
&
ol
);
...
...
@@ -694,9 +694,9 @@ void ClassDef::writeMemberList(OutputList &ol)
// do not generate Latex output
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
startFile
(
ol
,
memListFileName
,
theTranslator
->
trMemberList
());
startTitle
(
ol
);
startTitle
(
ol
,
0
);
parseText
(
ol
,
name
()
+
" "
+
theTranslator
->
trMemberList
());
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
parseText
(
ol
,
theTranslator
->
trThisIsTheListOfAllMembers
());
ol
.
writeObjectLink
(
getReference
(),
fileName
,
0
,
name
());
parseText
(
ol
,
theTranslator
->
trIncludingInheritedMembers
());
...
...
@@ -746,7 +746,8 @@ void ClassDef::writeMemberList(OutputList &ol)
ol
.
writeListItem
();
ol
.
writeObjectLink
(
cd
->
getReference
(),
cd
->
getOutputFileBase
(),
md
->
anchor
(),
name
);
if
(
md
->
isFunction
()
||
md
->
isSignal
()
||
md
->
isSlot
()
)
if
(
md
->
isFunction
()
||
md
->
isSignal
()
||
md
->
isSlot
()
||
(
md
->
isFriend
()
&&
md
->
argsString
()))
ol
.
docify
(
md
->
argsString
());
else
if
(
md
->
isEnumerate
())
parseText
(
ol
,
" "
+
theTranslator
->
trEnumName
());
...
...
@@ -786,7 +787,8 @@ void ClassDef::writeMemberList(OutputList &ol)
memberWritten
=
TRUE
;
}
if
((
protect
!=
Public
||
md
->
isStatic
()
||
virt
!=
Normal
||
md
->
isFriend
()
||
md
->
isRelated
()
md
->
isFriend
()
||
md
->
isRelated
()
||
(
md
->
isInline
()
&&
Config
::
inlineInfoFlag
)
)
&&
memberWritten
)
{
...
...
@@ -797,6 +799,8 @@ void ClassDef::writeMemberList(OutputList &ol)
else
if
(
md
->
isRelated
())
sl
.
append
(
"related"
);
else
{
if
(
Config
::
inlineInfoFlag
&&
md
->
isInline
())
sl
.
append
(
"inline"
);
if
(
protect
==
Protected
)
sl
.
append
(
"protected"
);
else
if
(
protect
==
Private
)
sl
.
append
(
"private"
);
if
(
virt
==
Virtual
)
sl
.
append
(
"virtual"
);
...
...
@@ -831,11 +835,11 @@ void ClassDef::writeIncludeFile(OutputList &ol)
//printf("incFile=%s\n",incFile->absFilePath().data());
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
startFile
(
ol
,
fileName
+
"-include"
,
name
()
+
" Include File"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
QCString
n
=
incName
.
copy
();
if
(
incName
.
isNull
())
n
=
incFile
->
name
();
parseText
(
ol
,
n
);
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
parseText
(
ol
,
theTranslator
->
trVerbatimText
(
incFile
->
name
()));
ol
.
writeRuler
();
ol
.
startCodeFragment
();
...
...
@@ -992,15 +996,25 @@ bool ClassDef::hasNonReferenceSuperClass()
// htmlHelp->decContentsDepth();
//}
void
ClassDef
::
writeDeclaration
(
OutputList
&
ol
)
void
ClassDef
::
writeDeclaration
(
OutputList
&
ol
,
MemberDef
*
md
)
{
//ol.insertMemberAlign();
//printf("ClassName=`%s'\n",name().data());
switch
(
compType
)
{
case
Class
:
ol
.
docify
(
"class
{"
);
break
;
case
Struct
:
ol
.
docify
(
"struct
{
"
);
break
;
default
:
ol
.
docify
(
"union
{
"
);
break
;
case
Class
:
ol
.
docify
(
"class
"
);
break
;
case
Struct
:
ol
.
docify
(
"struct"
);
break
;
default
:
ol
.
docify
(
"union"
);
break
;
}
int
ri
=
name
().
findRev
(
"::"
);
if
(
ri
==-
1
)
ri
=
name
().
length
();
QCString
cn
=
name
().
right
(
name
().
length
()
-
ri
-
2
);
if
(
!
cn
.
isEmpty
()
&&
cn
.
at
(
0
)
!=
'@'
&&
md
)
{
ol
.
docify
(
" "
);
ol
.
writeObjectLink
(
0
,
0
,
md
->
anchor
(),
cn
);
}
ol
.
docify
(
" {"
);
ol
.
endMemberItem
(
FALSE
,
0
,
0
,
FALSE
);
// TODO: pass correct group parameters
// insert members of this class
...
...
src/classdef.h
View file @
d4bdeb54
...
...
@@ -39,6 +39,7 @@ class BaseClassList;
class
MemberInfoList
;
class
MemberInfoDict
;
class
NamespaceDef
;
class
MemberDef
;
class
ClassDef
:
public
Definition
{
...
...
@@ -76,7 +77,7 @@ class ClassDef : public Definition
void
writeMemberList
(
OutputList
&
ol
);
void
writeIncludeFile
(
OutputList
&
ol
);
//void writeMembersToContents();
void
writeDeclaration
(
OutputList
&
ol
);
void
writeDeclaration
(
OutputList
&
ol
,
MemberDef
*
md
);
bool
addExample
(
const
char
*
anchor
,
const
char
*
name
,
const
char
*
file
);
bool
hasExamples
();
//void writeExample(OutputList &ol);
...
...
@@ -84,9 +85,9 @@ class ClassDef : public Definition
Protection
protection
()
const
{
return
prot
;
}
/*! a link to this class is possible within this project */
bool
isLinkableInProject
()
{
int
i
=
name
().
findRev
(
"::"
);
if
(
i
==-
1
)
i
=
0
;
else
i
+=
2
;
return
!
name
().
isEmpty
()
&&
name
().
at
(
i
)
!=
'@'
&&
{
//
int i = name().findRev("::");
//
if (i==-1) i=0; else i+=2;
return
!
name
().
isEmpty
()
&&
name
().
find
(
'@'
)
==-
1
&&
(
prot
!=
Private
||
Config
::
extractPrivateFlag
)
&&
hasDocumentation
()
&&
!
isReference
();
}
...
...
@@ -167,6 +168,7 @@ struct BaseClassDef
class
BaseClassList
:
public
QList
<
BaseClassDef
>
{
public
:
~
BaseClassList
()
{}
int
compareItems
(
GCI
item1
,
GCI
item2
)
{
ClassDef
*
c1
=
((
BaseClassDef
*
)
item1
)
->
classDef
;
...
...
src/code.l
View file @
d4bdeb54
...
...
@@ -213,7 +213,10 @@ static bool getLink(const char *className,
// exampleFile.data());
if (md->addExample(anchor,exampleName,exampleFile))
{
bool latexEnabled = result.isEnabled(OutputGenerator::Latex);
if (latexEnabled) result.disable(OutputGenerator::Latex);
result.writeAnchor(anchor);
if (latexEnabled) result.enable(OutputGenerator::Latex);
anchorCount++;
}
}
...
...
@@ -222,6 +225,7 @@ static bool getLink(const char *className,
if (d)
{
//printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data());
result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
md->anchor(),memberName);
return TRUE;
...
...
@@ -384,7 +388,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
if ((fd=findFileDef(&inputNameDict,yytext,ambig)) &&
fd->isLinkable())
{
code->writeCodeLink(
0
,fd->getOutputFileBase(),0,yytext);
code->writeCodeLink(
fd->getReference()
,fd->getOutputFileBase(),0,yytext);
}
else
{
...
...
src/config.h
View file @
d4bdeb54
...
...
@@ -39,6 +39,7 @@ struct Config
static
QCString
manOutputDir
;
// the directory to put the man pages
static
QCString
outputLanguage
;
// the output language
static
QCString
headerFile
;
// the name of the personal HTML header
static
QCString
latexHeaderFile
;
// the name of the personal LaTeX header
static
QCString
footerFile
;
// the name of the personal HTML footer
static
QCString
cgiName
;
// the name of the CGI binary
static
QCString
cgiURL
;
// the absolute URL to the CGI binary
...
...
@@ -91,6 +92,9 @@ struct Config
static
bool
autoBriefFlag
;
// javadoc comments behaves as Qt comments.
static
bool
htmlHelpFlag
;
// should html help files be generated?
static
bool
alphaIndexFlag
;
// should an alphabetical index be generated?
static
bool
pdfHyperFlag
;
// generate latex prepared creating hyperlinked pdfs.
static
bool
inheritDocsFlag
;
// inheritance of documentation enabled?
static
bool
inlineInfoFlag
;
// show info about inline members?
};
#endif
src/config.l
View file @
d4bdeb54
...
...
@@ -71,6 +71,7 @@ QCString Config::latexOutputDir;
QCString Config::manOutputDir;
QCString Config::outputLanguage;
QCString Config::headerFile;
QCString Config::latexHeaderFile;
QCString Config::footerFile;
QCString Config::cgiName;
QCString Config::cgiURL;
...
...
@@ -111,6 +112,7 @@ bool Config::caseSensitiveNames = FALSE;
bool Config::includeSourceFlag = FALSE;
bool Config::htmlHelpFlag = FALSE;
bool Config::alphaIndexFlag = FALSE;
bool Config::pdfHyperFlag = FALSE;
bool Config::autoBriefFlag = TRUE;
bool Config::warningFlag = TRUE;
bool Config::generateHtml = TRUE;
...
...
@@ -123,6 +125,8 @@ bool Config::classDiagramFlag = TRUE;
bool Config::repeatBriefFlag = TRUE;
bool Config::verbatimHeaderFlag = TRUE;
bool Config::htmlAlignMemberFlag = TRUE;
bool Config::inheritDocsFlag = TRUE;
bool Config::inlineInfoFlag = TRUE;
/* -----------------------------------------------------------------
*
...
...
@@ -180,6 +184,7 @@ static int yyread(char *buf,int max_size)
<Start>"LATEX_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::latexOutputDir; }
<Start>"HTML_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::headerFile; }
<Start>"HTML_FOOTER"[ \t]*"=" { BEGIN(GetString); s=&Config::footerFile; }
<Start>"LATEX_HEADER"[ \t]*"=" { BEGIN(GetString); s=&Config::latexHeaderFile; }
<Start>"CGI_NAME"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiName; }
<Start>"CGI_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiURL; }
<Start>"DOC_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::docURL; }
...
...
@@ -232,6 +237,9 @@ static int yyread(char *buf,int max_size)
<Start>"JAVADOC_AUTOBRIEF"[ \t]*"=" { BEGIN(GetBool); b=&Config::autoBriefFlag; }
<Start>"GENERATE_HTMLHELP"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpFlag; }
<Start>"ALPHABETICAL_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::alphaIndexFlag; }
<Start>"PDF_HYPERLINKS"[ \t]*"=" { BEGIN(GetBool); b=&Config::pdfHyperFlag; }
<Start>"INHERIT_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::inheritDocsFlag; }
<Start>"INLINE_INFO"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineInfoFlag; }
<Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n {
...
...
@@ -375,6 +383,7 @@ void Config::init()
Config::manOutputDir ="man";
Config::outputLanguage = "English";
Config::headerFile.resize(0);
Config::latexHeaderFile.resize(0);
Config::footerFile.resize(0);
Config::cgiName = "search.cgi";
Config::cgiURL.resize(0);
...
...
@@ -415,6 +424,7 @@ void Config::init()
Config::includeSourceFlag = FALSE;
Config::htmlHelpFlag = FALSE;
Config::alphaIndexFlag = FALSE;
Config::pdfHyperFlag = FALSE;
Config::warningFlag = TRUE;
Config::generateHtml = TRUE;
Config::generateLatex = TRUE;
...
...
@@ -427,6 +437,8 @@ void Config::init()
Config::verbatimHeaderFlag = TRUE;
Config::htmlAlignMemberFlag = TRUE;
Config::autoBriefFlag = TRUE;
Config::inheritDocsFlag = TRUE;
Config::inlineInfoFlag = TRUE;
}
void writeTemplateConfig(QFile *f,bool sl)
...
...
@@ -636,7 +648,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# If the JAVADOC_
NO_AUTOBRIEF
is set to YES (the default) then Doxygen\n";
t << "# If the JAVADOC_
AUTOBRIEF tag
is set to YES (the default) then Doxygen\n";
t << "# will interpret the first line (until the first dot) of a JavaDoc-style\n";
t << "# comment as the brief description. If set to NO, the Javadoc-style will\n";
t << "# behave just like the Qt-style comments.\n";
...
...
@@ -644,6 +656,23 @@ void writeTemplateConfig(QFile *f,bool sl)
}
t << "JAVADOC_AUTOBRIEF = YES\n";
if (!sl)
{
t << "\n";
t << "# if the INHERIT_DOCS tag is set to YES (the default) then an undocumented\n";
t << "# member inherits the documentation from any documented member that it\n";
t << "# reimplements.\n";
t << "\n";
}
t << "INHERIT_DOCS = YES\n";
if (!sl)
{
t << "\n";
t << "# if the INLINE_INFO tag is set to YES (the default) then a tag [inline]\n";
t << "# is inserted in the documentation for inline members.\n";
t << "\n";
}
t << "INLINE_INFO = YES\n";
if (!sl)
{
t << "\n";
}
...
...
@@ -839,6 +868,26 @@ void writeTemplateConfig(QFile *f,bool sl)
}
t << "EXTRA_PACKAGES =\n";
if (!sl)
{
t << "\n";
t << "# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \n";
t << "# the generated latex document. The header should contain everything until\n";
t << "# the first chapter. If it is left blank doxygen will generate a \n";
t << "# standard header. Notice: only use this tag if you know what you are doing!\n";
t << "\n";
}
t << "LATEX_HEADER =\n";
if (!sl)
{
t << "\n";
t << "# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated\n";
t << "# is prepared for conversion to pdf (using ps2pdf). The pdf file will\n";
t << "# contain links (just like the HTML output) instead of page references\n";
t << "# This makes the output suitable for online browsing using a pdf viewer.\n";
t << "\n";
}
t << "PDF_HYPERLINKS = NO\n";
if (!sl)
{
t << "\n";
}
...
...
@@ -1177,6 +1226,17 @@ void checkConfig()
exit(1);
}
}
// Test to see if LaTeX header is valid
if (Config::latexHeaderFile.length()>0)
{
QFileInfo fi(Config::latexHeaderFile);
if (!fi.exists())
{
err("Error: tag LATEX_HEADER: header file `%s' "
"does not exist\n",Config::latexHeaderFile.data());
exit(1);
}
}
// check include path
char *s=Config::includePath.first();
while (s)
...
...
src/declinfo.l
View file @
d4bdeb54
...
...
@@ -171,11 +171,11 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
<Template>. {
name+=*yytext;
}
<Operator>{B}*"()"{B}*"<>"{B}*/"(" {
<Operator>{B}*"(
"{B}*"
)"{B}*"<>"{B}*/"(" {
name+="() <>";
BEGIN(ReadArgs);
}
<Operator>{B}*"()"{B}*/"(" {
<Operator>{B}*"(
"{B}*"
)"{B}*/"(" {
name+="()";
BEGIN(ReadArgs);
}
...
...
src/definition.cpp
View file @
d4bdeb54
...
...
@@ -73,3 +73,17 @@ void Definition::addSectionsToDefinition(QList<QCString> *anchorList)
s
=
anchorList
->
next
();
}
}
void
Definition
::
setBriefDescription
(
const
char
*
b
)
{
brief
=
QCString
(
b
).
stripWhiteSpace
();
int
bl
=
brief
.
length
();
if
(
bl
>
0
)
// add puntuation if needed
{
switch
(
brief
.
at
(
bl
-
1
))
{
case
'.'
:
case
'!'
:
case
'?'
:
break
;
default
:
brief
+=
'.'
;
break
;
}
}
}
src/definition.h
View file @
d4bdeb54
...
...
@@ -50,19 +50,7 @@ class Definition
/*! sets the brief description of this definition to \a b.
* A dot is added to the sentence if not available.
*/
void
setBriefDescription
(
const
char
*
b
)
{
brief
=
((
QCString
)
b
).
stripWhiteSpace
();
int
bl
=
brief
.
length
();
if
(
bl
>
0
)
// add puntuation if needed
{
switch
(
brief
.
at
(
bl
-
1
))
{
case
'.'
:
case
'!'
:
case
'?'
:
break
;
default
:
brief
+=
'.'
;
break
;
}
}
}
void
setBriefDescription
(
const
char
*
b
);
/*! returns TRUE iff the definition is documented */
virtual
bool
hasDocumentation
()
{
return
!
doc
.
isNull
()
||
!
brief
.
isNull
()
||
Config
::
extractAllFlag
;
}
...
...
src/doxygen.cpp
View file @
d4bdeb54
...
...
@@ -90,6 +90,8 @@ FormulaDict formulaNameDict(1009); // dictionary of the label name of all f
// a member group
OutputList
*
outputList
;
// list of output generating objects
PageInfo
*
mainPage
=
0
;
//bool unrelatedFunctionsUsed;
...
...
@@ -357,8 +359,10 @@ static bool addNamespace(Entry *root,ClassDef *cd)
if
(
e
->
section
==
Entry
::
NAMESPACE_SEC
)
{
NamespaceDef
*
nd
=
0
;
if
(
!
e
->
name
.
isEmpty
()
&&
e
->
name
.
at
(
0
)
!=
'@'
&&
(
nd
=
namespaceDict
[
e
->
name
])
//printf("addNameSpace() trying: %s\n",e->name.data());
QCString
nsName
=
stripAnnonymousNamespaceScope
(
e
->
name
);
if
(
!
nsName
.
isEmpty
()
&&
nsName
.
at
(
0
)
!=
'@'
&&
(
nd
=
namespaceDict
[
nsName
])
)
{
cd
->
setNamespace
(
nd
);
...
...
@@ -393,7 +397,7 @@ void buildClassList(Entry *root)
}
else
{
fullName
=
stripAnnonymousScope
(
fullName
);
fullName
=
stripAnnonymous
Namespace
Scope
(
fullName
);
//printf("new class with name %s\n",fullName.data());
bool
ambig
;
...
...
@@ -506,14 +510,8 @@ void buildNamespaceList(Entry *root)
root
->
name
.
length
()
>
0
)
{
QCString
fullName
=
root
->
name
.
copy
();
if
(
fullName
.
length
()
==
0
)
{
// this should not be called
warn
(
"Warning: invalid namespace found in file %s at %d
\n
"
,
root
->
fileName
.
data
(),
root
->
startLine
);
}
else
QCString
fullName
=
stripAnnonymousNamespaceScope
(
root
->
name
.
copy
());
if
(
fullName
.
length
()
>
0
)
{
//printf("Found namespace %s in %s at line %d\n",root->name.data(),
// root->fileName.data(), root->startLine);
...
...
@@ -596,6 +594,8 @@ void buildNamespaceList(Entry *root)
}
}
//----------------------------------------------------------------------
static
MemberDef
*
addVariableToClass
(
Entry
*
root
,
ClassDef
*
cd
,
MemberDef
::
MemberType
mtype
,
const
QCString
&
scope
,
const
QCString
&
name
,
bool
fromAnnScope
,
int
indentDepth
,
MemberDef
*
fromAnnMemb
)
...
...
@@ -642,7 +642,8 @@ static MemberDef *addVariableToClass(Entry *root,ClassDef *cd,
MemberDef
*
md
=
mn
->
first
();
while
(
md
)
{
if
(
md
->
memberClass
()
==
cd
)
// member already in the scope
if
(
md
->
memberClass
()
==
cd
&&
root
->
type
==
md
->
typeString
())
// member already in the scope
{
addMemberDocs
(
root
,
md
,
def
,
FALSE
);
return
md
;
...
...
@@ -668,9 +669,6 @@ static MemberDef *addVariableToClass(Entry *root,ClassDef *cd,
// add the member to the global list
if
(
mn
)
{
//printf("Member already found! %s\n",md->name());
//addMemberDocs(root,mn->first(),def,FALSE);
//delete md;
mn
->
inSort
(
md
);
}
else
// new variable name
...
...
@@ -689,6 +687,107 @@ static MemberDef *addVariableToClass(Entry *root,ClassDef *cd,
return
md
;
}
//----------------------------------------------------------------------
static
MemberDef
*
addVariableToFile
(
Entry
*
root
,
MemberDef
::
MemberType
mtype
,
const
QCString
&
scope
,
const
QCString
&
name
,
bool
fromAnnScope
,
int
indentDepth
,
MemberDef
*
fromAnnMemb
)
{
Debug
::
print
(
Debug
::
Variables
,
0
,
" global variable:
\n
"
" type=`%s' scope=`%s' name=`%s' args=`%s' prot=`%d
\n
"
,
root
->
type
.
data
(),
scope
.
data
(),
name
.
data
(),
root
->
args
.
data
(),
root
->
protection
);
// new global variable, enum value or typedef
MemberDef
*
md
=
new
MemberDef
(
root
->
type
,
name
,
root
->
args
,
0
,
Public
,
Normal
,
root
->
stat
,
FALSE
,
mtype
,
0
,
0
);
md
->
setDefFile
(
root
->
fileName
);
md
->
setDefLine
(
root
->
startLine
);
md
->
setDocumentation
(
root
->
doc
);
md
->
setBriefDescription
(
root
->
brief
);
md
->
addSectionsToDefinition
(
root
->
anchors
);
md
->
setFromAnnonymousScope
(
fromAnnScope
);
md
->
setFromAnnonymousMember
(
fromAnnMemb
);
md
->
setIndentDepth
(
indentDepth
);
// see if the function is inside a namespace
NamespaceDef
*
nd
=
0
;
if
(
scope
.
length
()
>
0
)
{
nd
=
namespaceDict
[
scope
];
}
if
(
nd
&&
!
nd
->
name
().
isEmpty
()
&&
nd
->
name
().
at
(
0
)
!=
'@'
)
{
nd
->
insertMember
(
md
);
md
->
setNamespace
(
nd
);
}
else
{
// find file definition
FileDef
*
fd
=
0
;
bool
ambig
;
if
(
root
->
fileName
.
length
()
>
0
&&
(
fd
=
findFileDef
(
&
inputNameDict
,
root
->
fileName
,
ambig
))
)
{
fd
->
insertMember
(
md
);
md
->
setFileDef
(
fd
);
}
}
QCString
def
;
// determine the definition of the global variable
if
(
nd
&&
!
nd
->
name
().
isEmpty
()
&&
nd
->
name
().
at
(
0
)
!=
'@'
)
// variable is inside a namespace, so put the scope before the name
{
if
(
root
->
type
.
length
()
>
0
)
{
def
=
root
->
type
+
" "
+
nd
->
name
()
+
"::"
+
name
+
root
->
args
;
}
else
{
def
=
nd
->
name
()
+
"::"
+
name
+
root
->
args
;
}
}
else
{
if
(
root
->
type
.
length
()
>
0
)
{
if
(
name
.
at
(
0
)
==
'@'
)
// dummy variable representing annonymous union
def
=
root
->
type
;
else
def
=
root
->
type
+
" "
+
name
+
root
->
args
;
}
else
{
def
=
name
+
root
->
args
;
}
}
if
(
def
.
left
(
7
)
==
"static "
)
def
=
def
.
right
(
def
.
length
()
-
7
);
md
->
setDefinition
(
def
);
MemberName
*
mn
=
0
;
// add member definition to the list of globals
if
((
mn
=
functionNameDict
[
name
]))
{
mn
->
inSort
(
md
);
}
else
{
mn
=
new
MemberName
(
name
);
mn
->
inSort
(
md
);
functionNameDict
.
insert
(
name
,
mn
);
functionNameList
.
inSort
(
mn
);
}
return
md
;
}
//----------------------------------------------------------------------
// Searches the Entry tree for Variable documentation sections.
// If found they are stored in their class or in the global list.
...
...
@@ -698,7 +797,7 @@ void buildVarList(Entry *root)
QRegExp
re
(
"([^)]*)"
);
int
i
=-
1
;
if
(
root
->
name
.
length
()
>
0
&&
root
->
type
!=
"class"
&&
root
->
type
!=
"class"
&&
root
->
type
!=
"interface"
&&
(
(
root
->
section
==
Entry
::
VARIABLE_SEC
)
||
...
...
@@ -751,7 +850,8 @@ void buildVarList(Entry *root)
Entry
*
p
=
root
->
parent
;
while
((
p
->
section
&
Entry
::
SCOPE_MASK
))
{
QCString
scopeName
=
stripAnnonymousScope
(
p
->
name
);
//QCString scopeName = stripAnnonymousScope(p->name);
QCString
scopeName
=
p
->
name
.
copy
();
if
(
!
scopeName
.
isEmpty
())
{
scope
.
prepend
(
scopeName
);
...
...
@@ -769,6 +869,10 @@ void buildVarList(Entry *root)
// scope=scope.left(i);
//}
MemberDef
::
MemberType
mtype
;
QCString
type
=
root
->
type
.
stripWhiteSpace
();
ClassDef
*
cd
=
0
;
int
ni
;
if
((
ni
=
root
->
name
.
findRev
(
"::"
))
!=-
1
)
goto
nextMember
;
/* skip this member, because it is a
...
...
@@ -778,9 +882,6 @@ void buildVarList(Entry *root)
* inserted in the correct list!
*/
MemberDef
::
MemberType
mtype
;
// NamespaceDef *nd = 0;
QCString
type
=
root
->
type
.
stripWhiteSpace
();
if
(
type
==
"@"
)
mtype
=
MemberDef
::
EnumValue
;
else
if
(
type
.
left
(
8
)
==
"typedef "
)
...
...
@@ -790,17 +891,34 @@ void buildVarList(Entry *root)
else
mtype
=
MemberDef
::
Variable
;
ClassDef
*
cd
=
0
;
//printf("name=`%s' scope=%s\n",name.data(),scope.data());
QCString
classScope
=
stripAnnonymousNamespaceScope
(
scope
);
QCString
annScopePrefix
=
scope
.
left
(
scope
.
length
()
-
classScope
.
length
());
scope
=
classScope
;
if
(
scope
.
length
()
>
0
&&
name
.
length
()
>
0
&&
(
cd
=
getClass
(
scope
)))
{
MemberDef
*
md
=
0
;
// if cd is an annonymous scope we insert the member
// into a non-annonymous scope as well.
int
indentDepth
=
0
;
if
(
scope
.
find
(
'@'
)
!=-
1
)
int
si
=
scope
.
find
(
'@'
);
if
(
si
!=-
1
)
{
QCString
pScope
=
scope
.
copy
();
//printf("name=`%s' scope=%s\n",name.data(),scope.data());
QCString
pScope
;
ClassDef
*
pcd
=
0
;
pScope
=
scope
.
left
(
QMAX
(
si
-
2
,
0
));
indentDepth
=
scope
.
right
(
scope
.
length
()
-
si
).
contains
(
"::"
)
+
1
;
#if 0
// Find the last annonymous scope while search from right to left
// Keep track of the number of scope names we skipped.
while ((i=pScope.findRev("::"))!=-1 && (int)pScope.length()>i+2 &&
pScope.at(i+2)!='@'
)
{
pScope=pScope.left(i);
indentDepth++;
}
while ((i=pScope.findRev("::"))!=-1 && (int)pScope.length()>i+2 &&
pScope.at(i+2)=='@'
)
...
...
@@ -808,102 +926,37 @@ void buildVarList(Entry *root)
pScope=pScope.left(i);
indentDepth++;
}
if
((
pcd
=
getClass
(
pScope
)))
if (pScope.length()>0 && pScope.at(0)=='@')
{
pScope.resize(0);
indentDepth++;
}
#endif
if
(
!
pScope
.
isEmpty
())
pScope
.
prepend
(
annScopePrefix
);
else
if
(
annScopePrefix
.
length
()
>
2
)
pScope
=
annScopePrefix
.
left
(
annScopePrefix
.
length
()
-
2
);
//printf("pScope=`%s'\n",pScope.data());
if
(
!
name
.
isEmpty
()
&&
name
.
at
(
0
)
!=
'@'
)
{
//printf("Inserting member in parent scope!\n");
md
=
addVariableToClass
(
root
,
pcd
,
mtype
,
pScope
,
name
,
TRUE
,
indentDepth
,
0
);
if
(
pScope
.
length
()
>
0
&&
(
pcd
=
getClass
(
pScope
)))
{
//printf("Inserting member in parent scope!\n");
md
=
addVariableToClass
(
root
,
pcd
,
mtype
,
pScope
,
name
,
TRUE
,
indentDepth
,
0
);
}
else
// annonymous scope inside namespace or file => put variable in the global scope
{
//printf("Inserting member in global scope %s!\n",pScope.data());
md
=
addVariableToFile
(
root
,
mtype
,
pScope
,
name
,
!
pScope
.
isEmpty
(),
indentDepth
,
0
);
}
}
}
addVariableToClass
(
root
,
cd
,
mtype
,
scope
,
name
,
FALSE
,
indentDepth
,
md
);
}
else
if
(
name
.
length
()
>
0
)
// global variable
{
Debug
::
print
(
Debug
::
Variables
,
0
,
" global variable:
\n
"
" type=`%s' scope=`%s' name=`%s' args=`%s' prot=`%d
\n
"
,
root
->
type
.
data
(),
scope
.
data
(),
name
.
data
(),
root
->
args
.
data
(),
root
->
protection
);
// new global variable, enum value or typedef
MemberDef
*
md
=
new
MemberDef
(
root
->
type
,
name
,
root
->
args
,
0
,
Public
,
Normal
,
root
->
stat
,
FALSE
,
mtype
,
0
,
0
);
md
->
setDefFile
(
root
->
fileName
);
md
->
setDefLine
(
root
->
startLine
);
md
->
setDocumentation
(
root
->
doc
);
md
->
setBriefDescription
(
root
->
brief
);
md
->
addSectionsToDefinition
(
root
->
anchors
);
QCString
def
;
// see if the function is inside a namespace
NamespaceDef
*
nd
=
0
;
if
(
scope
.
length
()
>
0
)
{
nd
=
namespaceDict
[
scope
];
}
if
(
nd
&&
!
nd
->
name
().
isEmpty
()
&&
nd
->
name
().
at
(
0
)
!=
'@'
)
{
nd
->
insertMember
(
md
);
md
->
setNamespace
(
nd
);
}
else
{
// find file definition
FileDef
*
fd
=
0
;
bool
ambig
;
if
(
root
->
fileName
.
length
()
>
0
&&
(
fd
=
findFileDef
(
&
inputNameDict
,
root
->
fileName
,
ambig
))
)
{
fd
->
insertMember
(
md
);
md
->
setFileDef
(
fd
);
}
}
// determine the definition of the global variable
if
(
nd
&&
!
nd
->
name
().
isEmpty
()
&&
nd
->
name
().
at
(
0
)
!=
'@'
)
// variable is inside a namespace, so put the scope before the name
{
if
(
root
->
type
.
length
()
>
0
)
{
def
=
root
->
type
+
" "
+
nd
->
name
()
+
"::"
+
name
+
root
->
args
;
}
else
{
def
=
nd
->
name
()
+
"::"
+
name
+
root
->
args
;
}
}
else
{
if
(
root
->
type
.
length
()
>
0
)
{
def
=
root
->
type
+
" "
+
name
+
root
->
args
;
}
else
{
def
=
name
+
root
->
args
;
}
}
if
(
def
.
left
(
7
)
==
"static "
)
def
=
def
.
right
(
def
.
length
()
-
7
);
md
->
setDefinition
(
def
);
MemberName
*
mn
;
// add member definition to the list of globals
if
((
mn
=
functionNameDict
[
name
]))
{
mn
->
inSort
(
md
);
}
else
{
mn
=
new
MemberName
(
name
);
mn
->
inSort
(
md
);
functionNameDict
.
insert
(
name
,
mn
);
functionNameList
.
inSort
(
mn
);
}
//printf("Inserting member in global scope %s!\n",scope.data());
addVariableToFile
(
root
,
mtype
,
scope
,
name
,
FALSE
,
0
,
0
);
}
}
nextMember:
...
...
@@ -948,7 +1001,7 @@ void buildMemberList(Entry *root)
//printf("root->parent=`%s' cd=%p root->type.find(re,0)=%d\n",
// root->parent->name.data(),getClass(root->parent->name),
// root->type.find(re,0));
QCString
scope
=
stripAnnonymousScope
(
root
->
parent
->
name
.
copy
());
QCString
scope
=
stripAnnonymous
Namespace
Scope
(
root
->
parent
->
name
.
copy
());
int
i
;
if
(
root
->
parent
&&
root
->
parent
->
name
.
length
()
>
0
&&
...
...
@@ -1002,6 +1055,7 @@ void buildMemberList(Entry *root)
md
->
setBriefDescription
(
root
->
brief
);
md
->
setBody
(
root
->
body
);
md
->
setGroupId
(
root
->
mGrpId
);
md
->
setInline
(
root
->
inLine
);
//md->setScopeTemplateArguments(root->tArgList);
md
->
addSectionsToDefinition
(
root
->
anchors
);
QCString
def
;
...
...
@@ -1095,7 +1149,7 @@ void buildMemberList(Entry *root)
root
->
name
.
find
(
"::"
)
==-
1
&&
root
->
relates
.
length
()
==
0
&&
root
->
type
.
left
(
7
)
!=
"extern "
&&
root
->
type
.
left
(
8
)
!=
"typedef "
root
->
type
.
left
(
8
)
!=
"typedef "
)
// no member => unrelated function
{
...
...
@@ -1151,6 +1205,7 @@ void buildMemberList(Entry *root)
md
->
setBody
(
root
->
body
);
md
->
addSectionsToDefinition
(
root
->
anchors
);
md
->
setGroupId
(
root
->
mGrpId
);
md
->
setInline
(
root
->
inLine
);
QCString
def
;
if
(
root
->
type
.
length
()
>
0
)
{
...
...
@@ -1369,7 +1424,9 @@ void computeClassRelations(Entry *root)
)
{
ClassDef
*
cd
;
if
((
cd
=
getClass
(
root
->
name
)))
QCString
bName
=
stripAnnonymousNamespaceScope
(
root
->
name
);
//printf("Class %s\n",bName.data());
if
((
cd
=
getClass
(
bName
)))
{
//printf("Class %s %d\n",cd->name().data(),root->extends->count());
if
(
!
cd
->
visited
)
...
...
@@ -1423,7 +1480,7 @@ void computeClassRelations(Entry *root)
ClassDef
*
baseClass
=
getClass
(
baseClassName
);
//printf("baseClass %s of %s found (%s and %s)\n",
// baseClassName.data(),
//
root->n
ame.data(),
//
bN
ame.data(),
// (bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"),
// (bi->virt==Normal)?"normal":"virtual"
// );
...
...
@@ -1481,7 +1538,7 @@ void computeClassRelations(Entry *root)
}
// class has no base classes
}
// else class is already found
}
else
if
(
root
->
n
ame
.
right
(
2
)
!=
"::"
)
else
if
(
bN
ame
.
right
(
2
)
!=
"::"
)
{
if
(
root
->
name
.
length
()
>
0
&&
root
->
name
[
0
]
!=
'@'
)
warn
(
"Warning: Compound %s
\n
"
...
...
@@ -1605,6 +1662,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
}
md
->
setDefFile
(
root
->
fileName
);
md
->
setDefLine
(
root
->
startLine
);
if
(
root
->
inLine
&&
!
md
->
isInline
())
md
->
setInline
(
TRUE
);
md
->
addSectionsToDefinition
(
root
->
anchors
);
if
(
cd
)
cd
->
insertUsedFile
(
root
->
fileName
);
if
(
root
->
mGrpId
!=-
1
)
...
...
@@ -1823,10 +1881,12 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
bool
isFunc
)
{
Debug
::
print
(
Debug
::
FindMembers
,
0
,
"findMember(root=%p,funcDecl=`%s',related=`%s',overload=%d,isFunc=%d mGrpId=%d tArgList=%p=
\"
%s
\"
scopeSpec=%s memberSpec=%s
\n
"
,
"findMember(root=%p,funcDecl=`%s',related=`%s',overload=%d,"
"isFunc=%d mGrpId=%d tArgList=%p=
\"
%s
\"
scopeSpec=%s "
"memberSpec=%s inLine=%d
\n
"
,
root
,
funcDecl
.
data
(),
related
.
data
(),
overloaded
,
isFunc
,
root
->
mGrpId
,
root
->
tArgList
,
tempArgListToString
(
root
->
tArgList
).
data
(),
root
->
scopeSpec
.
data
(),
root
->
memberSpec
.
data
()
root
->
scopeSpec
.
data
(),
root
->
memberSpec
.
data
()
,
root
->
inLine
);
if
(
Config
::
includeSourceFlag
&&
!
root
->
body
.
isEmpty
())
{
...
...
@@ -1851,6 +1911,11 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
funcDecl
=
funcDecl
.
right
(
funcDecl
.
length
()
-
7
);
isFriend
=
TRUE
;
}
if
(
funcDecl
.
left
(
7
)
==
"inline "
)
{
funcDecl
=
funcDecl
.
right
(
funcDecl
.
length
()
-
7
);
root
->
inLine
=
TRUE
;
}
// delete any ; from the function declaration
int
sep
;
...
...
@@ -2229,6 +2294,8 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
}
if
(
matching
)
{
//printf("addMemberDocs root->inLine=%d md->isInline()=%d\n",
// root->inLine,md->isInline());
addMemberDocs
(
root
,
md
,
funcDecl
,
overloaded
);
count
++
;
}
...
...
@@ -2309,6 +2376,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
md
->
setPrototype
(
root
->
proto
);
md
->
addSectionsToDefinition
(
root
->
anchors
);
md
->
setBody
(
root
->
body
);
md
->
setInline
(
root
->
inLine
);
mn
->
inSort
(
md
);
cd
->
insertMember
(
md
);
cd
->
insertUsedFile
(
root
->
fileName
);
...
...
@@ -2374,6 +2442,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
md
->
setDefLine
(
root
->
startLine
);
md
->
setPrototype
(
root
->
proto
);
md
->
setBody
(
root
->
body
);
md
->
setInline
(
root
->
inLine
);
md
->
addSectionsToDefinition
(
root
->
anchors
);
mn
->
inSort
(
md
);
cd
->
insertMember
(
md
);
...
...
@@ -2421,8 +2490,8 @@ void findMemberDocumentation(Entry *root)
int
i
,
l
;
QRegExp
re
(
"([a-zA-Z0-9: ]*
\\
*+[
\\
*]*"
);
Debug
::
print
(
Debug
::
FindMembers
,
0
,
"root->type=`%s' root->name=`%s' root->args=`%s' section=%x
\n
"
,
root
->
type
.
data
(),
root
->
name
.
data
(),
root
->
args
.
data
(),
root
->
section
"root->type=`%s' root->name=`%s' root->args=`%s' section=%x
root->inLine=%d
\n
"
,
root
->
type
.
data
(),
root
->
name
.
data
(),
root
->
args
.
data
(),
root
->
section
,
root
->
inLine
);
bool
isFunc
=
TRUE
;
if
((
i
=
re
.
match
(
root
->
type
,
0
,
&
l
))
!=-
1
)
// func variable/typedef to func ptr
...
...
@@ -2458,6 +2527,7 @@ void findMemberDocumentation(Entry *root)
(
root
->
section
==
Entry
::
FUNCTION_SEC
&&
(
!
root
->
doc
.
isEmpty
()
||
!
root
->
brief
.
isEmpty
()
||
!
root
->
body
.
isEmpty
()
||
root
->
mGrpId
!=-
1
/*|| Config::extractAllFlag*/
||
root
->
inLine
)
)
{
...
...
@@ -3149,6 +3219,39 @@ void generateClassDocs()
//----------------------------------------------------------------------------
void
inheritDocumentation
()
{
MemberNameListIterator
mnli
(
memberNameList
);
MemberName
*
mn
;
//int count=0;
for
(;(
mn
=
mnli
.
current
());
++
mnli
)
{
MemberNameIterator
mni
(
*
mn
);
MemberDef
*
md
;
for
(;(
md
=
mni
.
current
());
++
mni
)
{
//printf("%04d Member `%s'\n",count++,md->name().data());
if
(
md
->
documentation
().
isEmpty
()
&&
md
->
briefDescription
().
isEmpty
())
{
// no documentation yet
MemberDef
*
bmd
=
md
->
reimplements
();
while
(
bmd
&&
bmd
->
documentation
().
isEmpty
()
&&
bmd
->
briefDescription
().
isEmpty
()
)
{
// search up the inheritance tree for a documentation member
bmd
=
bmd
->
reimplements
();
}
if
(
bmd
)
// copy the documentation from the reimplemented member
{
md
->
setDocumentation
(
bmd
->
documentation
());
md
->
setBriefDescription
(
bmd
->
briefDescription
());
}
}
}
}
}
//----------------------------------------------------------------------------
void
findDefineDocumentation
(
Entry
*
root
)
{
if
((
root
->
section
==
Entry
::
DEFINEDOC_SEC
||
...
...
@@ -3286,6 +3389,30 @@ void buildPageList(Entry *root)
}
}
void
findMainPage
(
Entry
*
root
)
{
if
(
root
->
section
==
Entry
::
MAINPAGEDOC_SEC
)
{
if
(
mainPage
==
0
)
{
//printf("Found main page! \n======\n%s\n=======\n",root->doc.data());
mainPage
=
new
PageInfo
(
"index"
,
root
->
doc
,
root
->
args
.
stripWhiteSpace
());
}
else
{
warn
(
"Warning: found more than one
\\
mainpage comment block!
\n
Skipping the "
"block at line %d of %s
\n
"
,
root
->
startLine
,
root
->
fileName
.
data
());
}
}
EntryListIterator
eli
(
*
root
->
sublist
);
Entry
*
e
;
for
(;(
e
=
eli
.
current
());
++
eli
)
{
findMainPage
(
e
);
}
}
//----------------------------------------------------------------------------
void
resolveUserReferences
()
...
...
@@ -3309,6 +3436,25 @@ void resolveUserReferences()
//----------------------------------------------------------------------------
// generate all separate documentation pages
//void generateMainPageDocs()
//{
// if (mainPage)
// {
// msg("Generating docs for the main page\n",mainPage->name.data());
// outputList->disable(OutputGenerator::Man);
// startFile(*outputList,mainPage->name,mainPage->title);
// SectionInfo *si=0;
// if (mainPage->title.length()>0 && mainPage->name.length()>0 &&
// (si=sectionDict[mainPage->name])!=0)
// {
// outputList->writeSection(si->label,si->title,FALSE);
// }
// parseDoc(*outputList,0,0,mainPage->doc);
// endFile(*outputList);
// outputList->enable(OutputGenerator::Man);
// }
//}
void
generatePageDocs
()
{
PageInfo
*
pi
=
pageList
.
first
();
...
...
@@ -3661,7 +3807,7 @@ bool patternMatch(QFileInfo *fi,QStrList *patList)
#else // unix
QRegExp
re
(
pattern
,
TRUE
,
TRUE
);
// case sensitive match
#endif
found
=
found
||
re
.
match
(
fi
->
fileName
())
!=-
1
;
found
=
found
||
re
.
match
(
fi
->
fileName
())
!=-
1
||
re
.
match
(
fi
->
filePath
())
!=-
1
;
pattern
=
patList
->
next
();
}
}
...
...
@@ -3766,9 +3912,10 @@ void readFiles(BufStr &output)
copyAndFilterFile
(
fileName
,
output
);
}
output
.
addChar
(
'\n'
);
/* to prevent problems under Windows ? */
s
=
inputFiles
.
next
();
//printf("-------> adding new line\n");
output
.
addChar
(
'\n'
);
/* to prevent problems under Windows ? */
}
// *p++='\0';
output
.
addChar
(
0
);
...
...
@@ -4232,6 +4379,9 @@ int main(int argc,char **argv)
msg
(
"Building page list...
\n
"
);
buildPageList
(
root
);
msg
(
"Search for main page...
\n
"
);
findMainPage
(
root
);
// msg("Adding compounds to file pages...\n");
// findClassDefsInFiles(root);
...
...
@@ -4283,6 +4433,12 @@ int main(int argc,char **argv)
computeMemberGroupDocumentation
();
//unrelatedFunctionsUsed=hasUnrelatedFunctions();
if
(
Config
::
inheritDocsFlag
)
{
msg
(
"Inheriting documentation...
\n
"
);
inheritDocumentation
();
}
/**************************************************************************
* Generate documentation *
...
...
src/doxygen.h
View file @
d4bdeb54
...
...
@@ -113,6 +113,7 @@ extern NamespaceDict namespaceDict;
extern
FormulaList
formulaList
;
extern
FormulaDict
formulaDict
;
extern
FormulaDict
formulaNameDict
;
extern
PageInfo
*
mainPage
;
extern
int
annotatedClasses
;
extern
int
hierarchyClasses
;
...
...
src/entry.cpp
View file @
d4bdeb54
...
...
@@ -65,6 +65,7 @@ Entry::Entry(const Entry &e)
fileName
=
e
.
fileName
.
copy
();
startLine
=
e
.
startLine
;
mGrpId
=
e
.
mGrpId
;
inLine
=
e
.
inLine
;
sublist
=
new
QList
<
Entry
>
;
sublist
->
setAutoDelete
(
TRUE
);
extends
=
new
QList
<
BaseInfo
>
;
...
...
@@ -207,6 +208,7 @@ void Entry::reset()
slot
=
FALSE
;
stat
=
FALSE
;
proto
=
FALSE
;
inLine
=
FALSE
;
protection
=
Public
;
sublist
->
clear
();
extends
->
clear
();
...
...
src/entry.h
View file @
d4bdeb54
...
...
@@ -62,6 +62,7 @@ struct Argument
class
ArgumentList
:
public
QList
<
Argument
>
{
public
:
~
ArgumentList
()
{}
ArgumentList
()
:
QList
<
Argument
>
(),
constSpecifier
(
FALSE
),
volatileSpecifier
(
FALSE
),
...
...
@@ -106,6 +107,7 @@ class Entry
NAMESPACEDOC_SEC
=
0x02000000
,
INTERFACE_SEC
=
0x04000000
,
INTERFACEDOC_SEC
=
0x08000000
,
MAINPAGEDOC_SEC
=
0x10000000
,
COMPOUND_MASK
=
CLASS_SEC
|
STRUCT_SEC
|
UNION_SEC
|
INTERFACE_SEC
,
COMPOUNDDOC_MASK
=
CLASSDOC_SEC
|
STRUCTDOC_SEC
|
UNIONDOC_SEC
|
INTERFACEDOC_SEC
,
SCOPE_MASK
=
COMPOUND_MASK
|
NAMESPACE_SEC
,
...
...
@@ -126,6 +128,7 @@ class Entry
bool
slot
;
// a Qt slot ?
bool
stat
;
// static ?
bool
proto
;
// prototype ?
bool
inLine
;
// inline ?
Specifier
virt
;
// virtualness of the entry
Entry
*
parent
;
// parent node in the tree
QCString
type
;
// member type
...
...
src/filedef.cpp
View file @
d4bdeb54
...
...
@@ -37,6 +37,7 @@ FileDef::FileDef(const char *p,const char *nm,const char *ref)
path
=
p
;
filepath
=
path
+
nm
;
filename
=
nameToFile
(
nm
);
diskname
=
filename
.
copy
();
setReference
(
ref
);
memList
=
new
MemberList
;
classList
=
new
ClassList
;
...
...
@@ -72,9 +73,9 @@ void FileDef::writeDocumentation(OutputList &ol)
QCString
pageTitle
=
name
()
+
" File Reference"
;
startFile
(
ol
,
diskname
,
pageTitle
);
startTitle
(
ol
);
startTitle
(
ol
,
getOutputFileBase
()
);
parseText
(
ol
,
theTranslator
->
trFileReference
(
name
()));
endTitle
(
ol
,
name
());
endTitle
(
ol
,
getOutputFileBase
(),
name
());
//ol.newParagraph();
if
(
Config
::
genTagFile
.
length
()
>
0
)
tagFile
<<
"&"
<<
name
()
<<
":
\n
"
;
...
...
@@ -184,8 +185,8 @@ void FileDef::writeDocumentation(OutputList &ol)
ol
.
endMemberItem
(
FALSE
,
0
,
0
,
FALSE
);
}
cd
=
classList
->
next
();
if
(
found
)
ol
.
endMemberList
();
}
if
(
found
)
ol
.
endMemberList
();
}
memList
->
writeDeclarations
(
ol
,
0
,
0
,
this
,
0
,
0
);
...
...
@@ -265,14 +266,11 @@ void FileDef::writeDocumentation(OutputList &ol)
memList
->
writeDocumentation
(
ol
,
name
(),
MemberDef
::
EnumValue
);
}
int
cnt
;
if
(
(
cnt
=
memList
->
funcCount
()
>
0
)
)
if
(
memList
->
funcCount
()
>
0
)
{
ol
.
writeRuler
();
ol
.
startGroupHeader
();
QCString
cntString
;
cntString
.
sprintf
(
" (%d)"
,
cnt
);
parseText
(
ol
,
theTranslator
->
trFunctionDocumentation
()
+
cntString
);
parseText
(
ol
,
theTranslator
->
trFunctionDocumentation
());
ol
.
endGroupHeader
();
memList
->
writeDocumentation
(
ol
,
name
(),
MemberDef
::
Function
);
}
...
...
src/filename.h
View file @
d4bdeb54
...
...
@@ -59,6 +59,7 @@ class FileNameDict : public QDict<FileName>
{
public
:
FileNameDict
(
uint
size
)
:
QDict
<
FileName
>
(
size
)
{}
~
FileNameDict
()
{}
};
#endif
src/formula.h
View file @
d4bdeb54
...
...
@@ -52,6 +52,7 @@ class FormulaDict : public QDict<Formula>
public
:
FormulaDict
(
uint
size
)
:
QDict
<
Formula
>
(
size
)
{}
~
FormulaDict
()
{}
};
#endif
src/groupdef.cpp
View file @
d4bdeb54
...
...
@@ -78,9 +78,9 @@ void GroupDef::writeDocumentation(OutputList &ol)
{
ol
.
disable
(
OutputGenerator
::
Man
);
startFile
(
ol
,
fileName
,
title
);
startTitle
(
ol
);
startTitle
(
ol
,
getOutputFileBase
()
);
ol
.
docify
(
title
);
endTitle
(
ol
,
name
());
endTitle
(
ol
,
getOutputFileBase
(),
name
());
//brief=brief.stripWhiteSpace();
//int bl=brief.length();
...
...
@@ -112,13 +112,18 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
if
(
classList
->
count
()
>
0
)
{
ol
.
startMemberHeader
();
parseText
(
ol
,
theTranslator
->
trCompounds
());
ol
.
endMemberHeader
();
ol
.
startIndexList
();
ClassDef
*
cd
=
classList
->
first
();
bool
found
=
FALSE
;
while
(
cd
)
{
if
(
!
found
)
{
ol
.
startMemberHeader
();
parseText
(
ol
,
theTranslator
->
trCompounds
());
ol
.
endMemberHeader
();
ol
.
startIndexList
();
found
=
TRUE
;
}
QCString
type
;
switch
(
cd
->
compoundType
())
{
...
...
src/htmlgen.cpp
View file @
d4bdeb54
...
...
@@ -170,17 +170,25 @@ void HtmlGenerator::writeStyleInfo(int part)
t
<<
"DL.el { margin-left: -1cm }"
<<
endl
;
t
<<
"DIV.fragment { width: 100%; border: none; background-color: #eeeeee }"
<<
endl
;
t
<<
"DIV.in { margin-left: 16 }"
<<
endl
;
t
<<
"DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }"
<<
endl
;
t
<<
"A.gl:link { color: #ffffff }"
<<
endl
;
t
<<
"A.gl:visited { color: #ffffff }"
<<
endl
;
t
<<
"A.gl { text-decoration: none; font-weight: bold; background-color: "
<<
GROUP_COLOR
<<
" }"
<<
endl
;
t
<<
"TD.md { background-color: #f2f2ff }"
<<
endl
;
t
<<
endl
;
endPlainFile
();
}
}
void
HtmlGenerator
::
writeDoxyAnchor
(
const
char
*
,
const
char
*
anchor
,
const
char
*
name
)
void
HtmlGenerator
::
startDoxyAnchor
(
const
char
*
,
const
char
*
,
const
char
*
anchor
,
const
char
*
name
)
{
t
<<
"<a name=
\"
"
<<
anchor
<<
"
\"
doxytag=
\"
"
<<
name
<<
"
\"
>"
;
}
void
HtmlGenerator
::
endDoxyAnchor
()
{
t
<<
"<
a name=
\"
"
<<
anchor
<<
"
\"
doxytag=
\"
"
<<
name
<<
"
\"
></a>"
;
t
<<
"<
/a>"
<<
endl
;
}
void
HtmlGenerator
::
newParagraph
()
...
...
@@ -601,17 +609,40 @@ void HtmlGenerator::endIndexList()
//}
}
void
HtmlGenerator
::
startAl
f
abeticalIndexList
()
void
HtmlGenerator
::
startAl
ph
abeticalIndexList
()
{
t
<<
"<
multicol cols=5><dl compact
>"
<<
endl
;
t
<<
"<
table width=95% border=0 cellspacing=0 cellpadding=0
>"
<<
endl
;
}
void
HtmlGenerator
::
endAl
f
abeticalIndexList
()
void
HtmlGenerator
::
endAl
ph
abeticalIndexList
()
{
t
<<
"</
dl></multicol
>"
<<
endl
;
t
<<
"</
table
>"
<<
endl
;
}
void
HtmlGenerator
::
writeIndexHeading
(
const
char
*
s
)
{
t
<<
"<dt><b><big>"
<<
s
<<
"</big></b><dd>"
<<
endl
;
//t << "<dt><b><big>" << s << "</big></b><dd>" << endl;
t
<<
"<div class=
\"
ah
\"
><font color=
\"
white
\"
><b> "
<<
s
<<
" </b></font></div>"
;
}
void
HtmlGenerator
::
writeImage
(
const
char
*
name
,
const
char
*
,
const
char
*
)
{
QCString
baseName
=
name
;
int
i
;
if
((
i
=
baseName
.
findRev
(
'/'
))
!=-
1
||
(
i
=
baseName
.
findRev
(
'\\'
))
!=-
1
)
{
baseName
=
baseName
.
right
(
baseName
.
length
()
-
i
);
}
t
<<
"<img src="
<<
name
<<
" alt=
\"
"
<<
baseName
<<
"
\"
>"
<<
endl
;
}
void
HtmlGenerator
::
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
)
{
t
<<
endl
<<
"<p><table width=100%% cellpadding=2 cellspacing=0 border=0><tr><td class=
\"
md
\"
><b>"
<<
endl
;
}
void
HtmlGenerator
::
endMemberDoc
()
{
t
<<
endl
<<
"</b></td></tr></table>"
<<
endl
;
}
src/htmlgen.h
View file @
d4bdeb54
...
...
@@ -54,8 +54,8 @@ class HtmlGenerator : public OutputGenerator
void
startProjectNumber
();
void
endProjectNumber
();
void
writeStyleInfo
(
int
part
);
void
startTitleHead
()
{
startTitle
();
}
void
endTitleHead
(
const
char
*
)
{
endTitle
();
}
void
startTitleHead
(
const
char
*
)
{
startTitle
();
}
void
endTitleHead
(
const
char
*
,
const
char
*
)
{
endTitle
();
}
void
startTitle
()
{
t
<<
"<h1>"
;
}
void
endTitle
()
{
t
<<
"</h1>"
;
}
...
...
@@ -67,8 +67,8 @@ class HtmlGenerator : public OutputGenerator
void
endItemList
()
{
t
<<
"</ul>"
<<
endl
;
}
void
startEnumList
()
{
t
<<
"<ol>"
<<
endl
;
}
void
endEnumList
()
{
t
<<
"</ol>"
<<
endl
;
}
void
startAl
f
abeticalIndexList
();
void
endAl
f
abeticalIndexList
();
void
startAl
ph
abeticalIndexList
();
void
endAl
ph
abeticalIndexList
();
void
writeIndexHeading
(
const
char
*
s
);
void
writeIndexItem
(
const
char
*
ref
,
const
char
*
file
,
const
char
*
name
);
void
docify
(
const
char
*
text
);
...
...
@@ -120,13 +120,15 @@ class HtmlGenerator : public OutputGenerator
void
endDescItem
()
{
t
<<
"<dd>"
;
}
void
lineBreak
()
{
t
<<
"<br>"
<<
endl
;
}
void
writeChar
(
char
c
);
void
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
)
{
t
<<
endl
<<
"<h3>"
;
}
void
endMemberDoc
()
{
t
<<
"</h3>"
<<
endl
;
}
void
writeDoxyAnchor
(
const
char
*
clName
,
const
char
*
anchor
,
const
char
*
name
);
void
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
);
void
endMemberDoc
();
//void writeDoxyAnchor(const char *fName,const char *clName,
// const char *anchor,const char *name);
void
startDoxyAnchor
(
const
char
*
fName
,
const
char
*
clName
,
const
char
*
anchor
,
const
char
*
name
);
void
endDoxyAnchor
();
void
writeLatexSpacing
()
{}
void
writeLatexLabel
(
const
char
*
,
const
char
*
)
{}
//
void writeLatexLabel(const char *,const char *) {}
void
writeStartAnnoItem
(
const
char
*
type
,
const
char
*
file
,
const
char
*
path
,
const
char
*
name
);
void
writeEndAnnoItem
(
const
char
*
)
{
t
<<
endl
;
}
...
...
@@ -144,7 +146,7 @@ class HtmlGenerator : public OutputGenerator
void
endSuperscript
()
{
t
<<
"</sup>"
;
}
void
startTable
(
int
)
{
t
<<
"<table border=1 cellspacing=3 cellpadding=3>"
;
}
void
endTable
()
{
t
<<
"</table>"
<<
endl
;
}
void
nextTableRow
()
{
t
<<
endl
<<
"<tr><td>"
;
}
void
nextTableRow
()
{
t
<<
"<tr><td>"
;
}
void
endTableRow
()
{
t
<<
"</tr>"
<<
endl
;
}
void
nextTableColumn
()
{
t
<<
"<td>"
;
}
void
endTableColumn
()
{
t
<<
"</td>"
;
}
...
...
@@ -171,11 +173,13 @@ class HtmlGenerator : public OutputGenerator
void
endClassDiagram
(
ClassDiagram
&
,
const
char
*
,
const
char
*
);
void
startColorFont
(
uchar
r
,
uchar
g
,
uchar
b
);
void
endColorFont
();
void
writePageRef
(
const
char
*
,
const
char
*
)
{}
void
startPageRef
()
{}
void
endPageRef
(
const
char
*
,
const
char
*
)
{}
void
startQuickIndexItem
(
const
char
*
,
const
char
*
);
void
endQuickIndexItem
();
void
writeFormula
(
const
char
*
,
const
char
*
);
void
writeNonBreakableSpace
()
{
t
<<
" "
;
}
void
writeImage
(
const
char
*
,
const
char
*
,
const
char
*
);
//static void docifyStatic(QTextStream &t,const char *str);
...
...
src/index.cpp
View file @
d4bdeb54
...
...
@@ -275,10 +275,10 @@ void writeHierarchicalIndex(OutputList &ol)
if
(
hierarchyClasses
==
0
)
return
;
ol
.
disable
(
OutputGenerator
::
Man
);
startFile
(
ol
,
"hierarchy"
,
"Hierarchical Index"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
QCString
title
=
Config
::
projectName
+
" "
+
theTranslator
->
trClassHierarchy
();
parseText
(
ol
,
title
);
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
HtmlHelp
*
htmlHelp
=
0
;
if
(
Config
::
generateHtml
&&
Config
::
htmlHelpFlag
)
{
...
...
@@ -318,10 +318,10 @@ void writeFileIndex(OutputList &ol)
if
(
documentedFiles
==
0
)
return
;
ol
.
disable
(
OutputGenerator
::
Man
);
startFile
(
ol
,
"files"
,
"File Index"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
QCString
title
=
Config
::
projectName
+
" "
+
theTranslator
->
trFileList
();
parseText
(
ol
,
title
);
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
HtmlHelp
*
htmlHelp
=
0
;
bool
hasHtmlHelp
=
Config
::
generateHtml
&&
Config
::
htmlHelpFlag
;
if
(
hasHtmlHelp
)
...
...
@@ -410,10 +410,10 @@ void writeNamespaceIndex(OutputList &ol)
if
(
documentedNamespaces
==
0
)
return
;
ol
.
disable
(
OutputGenerator
::
Man
);
startFile
(
ol
,
"namespaces"
,
"Namespace Index"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
QCString
title
=
Config
::
projectName
+
" "
+
theTranslator
->
trNamespaceList
();
parseText
(
ol
,
title
);
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
HtmlHelp
*
htmlHelp
=
0
;
bool
hasHtmlHelp
=
Config
::
generateHtml
&&
Config
::
htmlHelpFlag
;
if
(
hasHtmlHelp
)
...
...
@@ -536,31 +536,126 @@ void writeAnnotatedClassList(OutputList &ol)
//----------------------------------------------------------------------------
void
writeAlfabeticalClassList
(
OutputList
&
ol
)
// write an alphabetical index of all class with a header for each letter
void
writeAlphabeticalClassList
(
OutputList
&
ol
)
{
ol
.
startAl
f
abeticalIndexList
();
//ClassDef *cd=classList.first();
//
while (cd)
ol
.
startAl
ph
abeticalIndexList
();
//
first count the number of headers
ClassListIterator
cli
(
classList
);
ClassDef
*
cd
;
char
startLetter
=
0
;
int
headerItems
=
0
;
for
(;(
cd
=
cli
.
current
());
++
cli
)
{
if
(
cd
->
isLinkableInProject
())
{
if
(
cd
->
name
().
at
(
0
)
!=
startLetter
)
// new begin letter => new header
{
startLetter
=
cd
->
name
().
at
(
0
);
headerItems
++
;
}
}
}
// the number of columns in the table
const
int
columns
=
5
;
int
i
,
j
;
int
totalItems
=
headerItems
+
annotatedClasses
;
// number of items in the table
int
rows
=
(
totalItems
+
columns
-
1
)
/
columns
;
// number of rows in the table
int
itemsInLastRow
=
(
totalItems
+
columns
-
1
)
%
columns
+
1
;
// number of items in the last row
//printf("headerItems=%d totalItems=%d columns=%d rows=%d itemsInLastRow=%d\n",
// headerItems,totalItems,columns,rows,itemsInLastRow);
// create one class list for each column
ClassList
*
colList
=
new
ClassList
[
columns
];
// fill the columns with the class list (row elements in each column,
// expect for the columns with number >= itemsInLastRow, which get on
// item less.
int
col
=
0
,
row
=
0
;
//int icount=0;
startLetter
=
0
;
for
(
cli
.
toFirst
();(
cd
=
cli
.
current
());
++
cli
)
{
if
(
cd
->
isLinkableInProject
())
{
if
(
cd
->
name
().
at
(
0
)
!=
startLetter
)
{
// insert a new header using a dummy class pointer.
startLetter
=
cd
->
name
().
at
(
0
);
char
s
[
2
];
s
[
0
]
=
startLetter
;
s
[
1
]
=
0
;
ol
.
writeIndexHeading
(
s
);
colList
[
col
].
append
((
ClassDef
*
)
8
);
// insert dummy for the header
row
++
;
if
(
row
>=
rows
+
((
col
<
itemsInLastRow
)
?
0
:
-
1
))
{
// if the header is the last item in the row, we add an extra
// row to make it easier to find the text of the header (this
// is then contained in the next cell)
colList
[
col
].
append
(
cd
);
col
++
;
row
=
0
;
}
}
ol
.
writeObjectLink
(
cd
->
getReference
(),
cd
->
getOutputFileBase
(),
0
,
cd
->
name
());
ol
.
lineBreak
();
// add the class definition to the correct column list
colList
[
col
].
append
(
cd
);
row
++
;
if
(
row
>=
rows
+
((
col
<
itemsInLastRow
)
?
0
:
-
1
))
{
col
++
;
row
=
0
;
}
}
cd
=
classList
.
next
();
}
ol
.
endAlfabeticalIndexList
();
// create iterators for each column
ClassListIterator
**
colIterators
=
new
ClassListIterator
*
[
columns
];
for
(
i
=
0
;
i
<
columns
;
i
++
)
{
colIterators
[
i
]
=
new
ClassListIterator
(
colList
[
i
]);
}
// generate table
for
(
i
=
0
;
i
<
rows
;
i
++
)
// forarch table row
{
ol
.
nextTableRow
();
// the last column may contain less items then the others
int
colsInRow
=
(
i
<
rows
-
1
)
?
columns
:
itemsInLastRow
;
//printf("row [%d]\n",i);
for
(
j
=
0
;
j
<
colsInRow
;
j
++
)
// foreach table column
{
ClassDef
*
cd
=
colIterators
[
j
]
->
current
();
//printf("columns [%d] cd=%p\n",j,cd);
if
(
cd
==
(
ClassDef
*
)
8
)
// the class pointer is really a header
{
cd
=++
(
*
colIterators
[
j
]);
// get the next item
if
(
cd
)
{
//printf("head ClassDef=%p %s\n",cd,cd ? cd->name().data() : "<none>");
startLetter
=
cd
->
name
().
at
(
0
);
char
s
[
2
];
s
[
0
]
=
startLetter
;
s
[
1
]
=
0
;
ol
.
writeIndexHeading
(
s
);
}
}
else
if
(
cd
)
// a real class, insert a link
{
ol
.
writeObjectLink
(
cd
->
getReference
(),
cd
->
getOutputFileBase
(),
0
,
cd
->
name
());
ol
.
writeNonBreakableSpace
();
//printf("item ClassDef=%p %s\n",cd,cd ? cd->name().data() : "<none>");
++
(
*
colIterators
[
j
]);
}
ol
.
endTableColumn
();
if
(
j
<
colsInRow
-
1
)
ol
.
nextTableColumn
();
}
ol
.
endTableRow
();
}
ol
.
endAlphabeticalIndexList
();
// release the temporary memory
for
(
i
=
0
;
i
<
columns
;
i
++
)
{
delete
colIterators
[
i
];
}
delete
[]
colIterators
;
delete
[]
colList
;
}
//----------------------------------------------------------------------------
...
...
@@ -569,11 +664,11 @@ void writeAlphabeticalIndex(OutputList &ol)
{
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
if
(
annotatedClasses
==
0
)
return
;
startFile
(
ol
,
"classes.html"
,
"Al
f
abetical index"
);
startTitle
(
ol
);
startFile
(
ol
,
"classes.html"
,
"Al
ph
abetical index"
);
startTitle
(
ol
,
0
);
parseText
(
ol
,
Config
::
projectName
+
" "
+
theTranslator
->
trCompoundIndex
());
endTitle
(
ol
,
0
);
writeAl
f
abeticalClassList
(
ol
);
endTitle
(
ol
,
0
,
0
);
writeAl
ph
abeticalClassList
(
ol
);
endFile
(
ol
);
ol
.
enableAll
();
}
...
...
@@ -587,10 +682,10 @@ void writeAnnotatedIndex(OutputList &ol)
//if (classList.count()==0) return;
ol
.
disable
(
OutputGenerator
::
Man
);
startFile
(
ol
,
"annotated"
,
"Annotated Index"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
QCString
title
=
Config
::
projectName
+
" "
+
theTranslator
->
trCompoundList
();
parseText
(
ol
,
title
);
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
HtmlHelp
*
htmlHelp
=
0
;
if
(
Config
::
generateHtml
&&
Config
::
htmlHelpFlag
)
{
...
...
@@ -728,9 +823,9 @@ void writeMemberIndex(OutputList &ol)
ol
.
disable
(
OutputGenerator
::
Man
);
ol
.
disable
(
OutputGenerator
::
Latex
);
startFile
(
ol
,
"functions"
,
"Compound Member Index"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
parseText
(
ol
,
Config
::
projectName
+
" "
+
theTranslator
->
trCompoundMembers
());
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
parseText
(
ol
,
theTranslator
->
trCompoundMembersDescription
(
Config
::
extractAllFlag
));
writeMemberList
(
ol
);
endFile
(
ol
);
...
...
@@ -921,9 +1016,9 @@ void writeFileMemberIndex(OutputList &ol)
ol
.
disable
(
OutputGenerator
::
Man
);
ol
.
disable
(
OutputGenerator
::
Latex
);
startFile
(
ol
,
"globals"
,
"File Member Index"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
parseText
(
ol
,
Config
::
projectName
+
" "
+
theTranslator
->
trFileMembers
());
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
parseText
(
ol
,
theTranslator
->
trFileMembersDescription
(
Config
::
extractAllFlag
));
writeFileMemberList
(
ol
);
endFile
(
ol
);
...
...
@@ -939,9 +1034,9 @@ void writeNamespaceMemberIndex(OutputList &ol)
ol
.
disable
(
OutputGenerator
::
Man
);
ol
.
disable
(
OutputGenerator
::
Latex
);
startFile
(
ol
,
"namespacemembers"
,
"Namespace Member Index"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
parseText
(
ol
,
Config
::
projectName
+
" "
+
theTranslator
->
trNamespaceMembers
());
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
parseText
(
ol
,
theTranslator
->
trNamespaceMemberDescription
(
Config
::
extractAllFlag
));
writeNamespaceMemberList
(
ol
);
endFile
(
ol
);
...
...
@@ -1007,10 +1102,10 @@ void writeHeaderIndex(OutputList &ol)
ol
.
disable
(
OutputGenerator
::
Man
);
ol
.
disable
(
OutputGenerator
::
Latex
);
startFile
(
ol
,
"headers"
,
"Header File Index"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
QCString
title
=
Config
::
projectName
+
" "
+
theTranslator
->
trHeaderFiles
();
parseText
(
ol
,
title
);
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
HtmlHelp
*
htmlHelp
=
0
;
if
(
Config
::
generateHtml
&&
Config
::
htmlHelpFlag
)
{
...
...
@@ -1036,10 +1131,10 @@ void writeExampleIndex(OutputList &ol)
if
(
exampleList
.
count
()
==
0
)
return
;
ol
.
disable
(
OutputGenerator
::
Man
);
startFile
(
ol
,
"examples"
,
"Example Index"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
QCString
title
=
Config
::
projectName
+
" "
+
theTranslator
->
trExamples
();
parseText
(
ol
,
title
);
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
HtmlHelp
*
htmlHelp
=
0
;
bool
hasHtmlHelp
=
Config
::
generateHtml
&&
Config
::
htmlHelpFlag
;
if
(
hasHtmlHelp
)
...
...
@@ -1084,10 +1179,10 @@ void writePageIndex(OutputList &ol)
if
(
pageList
.
count
()
==
0
)
return
;
ol
.
disable
(
OutputGenerator
::
Man
);
startFile
(
ol
,
"pages"
,
"Page Index"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
QCString
title
=
Config
::
projectName
+
" "
+
theTranslator
->
trRelatedPages
();
ol
.
docify
(
title
);
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
HtmlHelp
*
htmlHelp
=
0
;
bool
hasHtmlHelp
=
Config
::
generateHtml
&&
Config
::
htmlHelpFlag
;
if
(
hasHtmlHelp
)
...
...
@@ -1173,10 +1268,10 @@ void writeGroupIndex(OutputList &ol)
if
(
documentedGroups
==
0
)
return
;
ol
.
disable
(
OutputGenerator
::
Man
);
startFile
(
ol
,
"modules"
,
"Module Index"
);
startTitle
(
ol
);
startTitle
(
ol
,
0
);
QCString
title
=
Config
::
projectName
+
" "
+
theTranslator
->
trModules
();
parseText
(
ol
,
title
);
endTitle
(
ol
,
0
);
endTitle
(
ol
,
0
,
0
);
HtmlHelp
*
htmlHelp
=
0
;
bool
hasHtmlHelp
=
Config
::
generateHtml
&&
Config
::
htmlHelpFlag
;
if
(
hasHtmlHelp
)
...
...
@@ -1212,9 +1307,16 @@ void writeIndex(OutputList &ol)
ol
.
disable
(
OutputGenerator
::
Latex
);
ol
.
startFile
(
"index"
,
"Main Index"
,
FALSE
);
if
(
!
Config
::
noIndexFlag
)
writeQuickLinks
(
ol
,
TRUE
);
ol
.
startTitleHead
();
parseText
(
ol
,
projPrefix
+
theTranslator
->
trDocumentation
());
ol
.
endTitleHead
(
0
);
ol
.
startTitleHead
(
0
);
if
(
mainPage
&&
!
mainPage
->
title
.
isEmpty
())
{
parseDoc
(
ol
,
0
,
0
,
mainPage
->
title
);
}
else
{
parseText
(
ol
,
projPrefix
+
theTranslator
->
trDocumentation
());
}
ol
.
endTitleHead
(
0
,
0
);
ol
.
newParagraph
();
if
(
!
Config
::
projectNumber
.
isEmpty
())
{
...
...
@@ -1223,6 +1325,12 @@ void writeIndex(OutputList &ol)
ol
.
endProjectNumber
();
}
if
(
Config
::
noIndexFlag
)
writeQuickLinks
(
ol
,
FALSE
);
if
(
mainPage
)
{
parseDoc
(
ol
,
0
,
0
,
mainPage
->
doc
);
}
endFile
(
ol
);
ol
.
disable
(
OutputGenerator
::
Html
);
...
...
@@ -1241,6 +1349,19 @@ void writeIndex(OutputList &ol)
ol
.
startIndexSection
(
isTitlePageAuthor
);
parseText
(
ol
,
theTranslator
->
trGeneratedBy
());
ol
.
endIndexSection
(
isTitlePageAuthor
);
if
(
mainPage
)
{
ol
.
startIndexSection
(
isMainPage
);
if
(
!
mainPage
->
title
.
isEmpty
())
{
parseDoc
(
ol
,
0
,
0
,
mainPage
->
title
);
}
else
{
parseText
(
ol
,
projPrefix
+
theTranslator
->
trMainPage
());
}
ol
.
endIndexSection
(
isMainPage
);
}
if
(
documentedGroups
>
0
)
{
ol
.
startIndexSection
(
isModuleIndex
);
...
...
src/index.h
View file @
d4bdeb54
...
...
@@ -25,6 +25,7 @@ enum IndexSections
{
isTitlePageStart
,
isTitlePageAuthor
,
isMainPage
,
isModuleIndex
,
isNamespaceIndex
,
isClassHierarchyIndex
,
...
...
src/language.cpp
View file @
d4bdeb54
...
...
@@ -15,6 +15,7 @@
*/
#include "language.h"
#if !defined(ENGLISH_ONLY)
#include "translator_nl.h"
#include "translator_se.h"
#include "translator_cz.h"
...
...
@@ -23,6 +24,7 @@
#include "translator_de.h"
#include "translator_jp.h"
#include "translator_es.h"
#endif
#define L_EQUAL(a) !stricmp(langName,a)
...
...
@@ -34,6 +36,7 @@ bool setTranslator(const char *langName)
{
theTranslator
=
new
Translator
;
}
#if !defined(ENGLISH_ONLY)
else
if
(
L_EQUAL
(
"dutch"
))
{
theTranslator
=
new
TranslatorDutch
;
...
...
@@ -66,6 +69,7 @@ bool setTranslator(const char *langName)
{
theTranslator
=
new
TranslatorSpanish
;
}
#endif
else
// use the default language (i.e. english)
{
theTranslator
=
new
Translator
;
...
...
src/latexgen.cpp
View file @
d4bdeb54
...
...
@@ -26,6 +26,25 @@
#include "diagram.h"
#include "language.h"
static
QCString
filterTitle
(
const
char
*
s
)
{
QCString
tmp
=
s
,
result
;
uint
i
;
for
(
i
=
0
;
i
<
tmp
.
length
();
i
++
)
{
char
c
=
tmp
.
at
(
i
);
switch
(
c
)
{
case
'#'
:
result
+=
"
\\
#"
;
break
;
case
'"'
:
result
+=
"
\\\"
"
;
break
;
case
'%'
:
result
+=
"
\\
%"
;
break
;
case
'['
:
result
+=
"{"
;
break
;
case
']'
:
result
+=
"}"
;
break
;
default:
result
+=
c
;
break
;
}
}
return
result
;
}
//static QCString escapeLabelName(const QCString &s)
//{
// QCString result;
...
...
@@ -49,6 +68,7 @@ LatexGenerator::LatexGenerator()
{
dir
=
Config
::
latexOutputDir
;
col
=
0
;
//printf("LatexGenerator::LatexGenerator() insideTabbing=FALSE\n");
insideTabbing
=
FALSE
;
}
...
...
@@ -66,8 +86,17 @@ void LatexGenerator::append(const OutputGenerator *g)
{
t
<<
g
->
getContents
();
col
+=
((
LatexGenerator
*
)
g
)
->
col
;
insideTabbing
=
insideTabbing
||
((
LatexGenerator
*
)
g
)
->
insideTabbing
;
//printf("LatexGenerator::append(%s) insideTabbing=%s\n", g->getContents().data(),
// insideTabbing ? "TRUE" : "FALSE" );
}
OutputGenerator
*
LatexGenerator
::
copy
()
{
LatexGenerator
*
result
=
new
LatexGenerator
;
result
->
insideTabbing
=
insideTabbing
;
return
result
;
}
void
LatexGenerator
::
init
()
{
...
...
@@ -91,6 +120,9 @@ void LatexGenerator::init()
<<
endl
<<
"ps: refman.ps"
<<
endl
<<
endl
<<
"pdf: ps"
<<
endl
<<
"
\t
ps2pdf refman.ps refman.pdf"
<<
endl
<<
endl
<<
"refman.ps: refman.dvi"
<<
endl
<<
"
\t
dvips -o refman.ps refman.dvi"
<<
endl
<<
endl
...
...
@@ -102,7 +134,7 @@ void LatexGenerator::init()
<<
"
\t
echo
\"
Rerunning latex....
\"
"
<<
endl
<<
"
\t
latex refman.tex"
<<
endl
<<
"clean:"
<<
endl
<<
"
\t
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log"
<<
endl
;
<<
"
\t
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log
*.out
"
<<
endl
;
}
void
LatexGenerator
::
startFile
(
const
char
*
name
,
const
char
*
,
bool
)
...
...
@@ -134,42 +166,67 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
case
isTitlePageStart
:
{
if
(
Config
::
paperType
==
"a4wide"
)
paperName
=
"a4"
;
else
paperName
=
Config
::
paperType
;
t
<<
"
\\
documentclass["
<<
paperName
<<
"paper]{"
;
if
(
Config
::
compactLatexFlag
)
t
<<
"article"
;
else
t
<<
"book"
;
t
<<
"}
\n
"
;
if
(
Config
::
paperType
==
"a4wide"
)
t
<<
"
\\
usepackage{a4wide}
\n
"
;
t
<<
"
\\
usepackage{makeidx}
\n
"
"
\\
usepackage{fancyheadings}
\n
"
"
\\
usepackage{epsf}
\n
"
"
\\
usepackage{float}
\n
"
"
\\
usepackage{doxygen}
\n
"
;
if
(
!
theTranslator
->
latexBabelPackage
().
isEmpty
())
if
(
Config
::
latexHeaderFile
.
isEmpty
())
{
t
<<
"
\\
usepackage{"
<<
theTranslator
->
latexBabelPackage
()
<<
"}
\n
"
;
if
(
Config
::
paperType
==
"a4wide"
)
paperName
=
"a4"
;
else
paperName
=
Config
::
paperType
;
t
<<
"
\\
documentclass["
<<
paperName
<<
"paper"
;
if
(
Config
::
pdfHyperFlag
)
t
<<
",ps2pdf"
;
t
<<
"]{"
;
if
(
Config
::
compactLatexFlag
)
t
<<
"article"
;
else
t
<<
"book"
;
t
<<
"}
\n
"
;
if
(
Config
::
paperType
==
"a4wide"
)
t
<<
"
\\
usepackage{a4wide}
\n
"
;
t
<<
"
\\
usepackage{makeidx}
\n
"
"
\\
usepackage{fancyheadings}
\n
"
"
\\
usepackage{epsfig}
\n
"
"
\\
usepackage{float}
\n
"
"
\\
usepackage{doxygen}
\n
"
;
if
(
Config
::
pdfHyperFlag
)
{
t
<<
"
\\
usepackage{times}"
<<
endl
<<
"
\\
usepackage[backref=true,"
<<
endl
<<
" pagebackref=true,"
<<
endl
<<
" colorlinks=true,"
<<
endl
<<
" linkcolor=blue"
<<
endl
<<
" ]{hyperref}"
<<
endl
;
}
if
(
!
theTranslator
->
latexBabelPackage
().
isEmpty
())
{
t
<<
"
\\
usepackage{"
<<
theTranslator
->
latexBabelPackage
()
<<
"}
\n
"
;
}
const
char
*
s
=
Config
::
extraPackageList
.
first
();
while
(
s
)
{
t
<<
"
\\
usepackage{"
<<
s
<<
"}
\n
"
;
s
=
Config
::
extraPackageList
.
next
();
}
t
<<
"
\\
makeindex
\n
"
"
\\
setcounter{tocdepth}{1}
\n
"
"
\\
setlength{
\\
footrulewidth}{0.4pt}
\n
"
"
\\
begin{document}
\n
"
"
\\
title{"
;
//docify(projectName);
//t << " Reference Manual";
//if (!projectNumber.isEmpty())
//{
// t << "\\\\[1ex]\\large ";
// docify(projectNumber);
//}
}
const
char
*
s
=
Config
::
extraPackageList
.
first
();
while
(
s
)
else
{
t
<<
"
\\
usepackage{"
<<
s
<<
"}
\n
"
;
s
=
Config
::
extraPackageList
.
next
();
t
<<
fileToString
(
Config
::
latexHeaderFile
);
}
t
<<
"
\\
makeindex
\n
"
"
\\
setcounter{tocdepth}{1}
\n
"
"
\\
setlength{
\\
footrulewidth}{0.4pt}
\n
"
"
\\
begin{document}
\n
"
"
\\
title{"
;
//docify(projectName);
//t << " Reference Manual";
//if (!projectNumber.isEmpty())
//{
// t << "\\\\[1ex]\\large ";
// docify(projectNumber);
//}
}
break
;
case
isTitlePageAuthor
:
t
<<
"}
\n\\
author{"
;
if
(
Config
::
latexHeaderFile
.
isEmpty
())
{
t
<<
"}
\n\\
author{"
;
}
break
;
case
isMainPage
:
if
(
Config
::
compactLatexFlag
)
t
<<
"
\\
section"
;
else
t
<<
"
\\
chapter"
;
t
<<
"{"
;
//Introduction}\n"
break
;
case
isModuleIndex
:
if
(
Config
::
compactLatexFlag
)
t
<<
"
\\
section"
;
else
t
<<
"
\\
chapter"
;
...
...
@@ -288,14 +345,20 @@ void LatexGenerator::endIndexSection(IndexSections is)
case
isTitlePageStart
:
break
;
case
isTitlePageAuthor
:
t
<<
" Doxygen}
\n
"
"
\\
date{"
<<
dateToString
(
TRUE
)
<<
"}
\n
"
"
\\
maketitle
\n
"
"
\\
pagenumbering{roman}
\n
"
;
if
(
!
Config
::
compactLatexFlag
)
t
<<
"
\\
clearemptydoublepage
\n
"
;
t
<<
"
\\
tableofcontents
\n
"
;
if
(
!
Config
::
compactLatexFlag
)
t
<<
"
\\
clearemptydoublepage
\n
"
;
t
<<
"
\\
pagenumbering{arabic}
\n
"
;
if
(
Config
::
latexHeaderFile
.
isEmpty
())
{
t
<<
" Doxygen}
\n
"
"
\\
date{"
<<
dateToString
(
TRUE
)
<<
"}
\n
"
"
\\
maketitle
\n
"
"
\\
pagenumbering{roman}
\n
"
;
if
(
!
Config
::
compactLatexFlag
)
t
<<
"
\\
clearemptydoublepage
\n
"
;
t
<<
"
\\
tableofcontents
\n
"
;
if
(
!
Config
::
compactLatexFlag
)
t
<<
"
\\
clearemptydoublepage
\n
"
;
t
<<
"
\\
pagenumbering{arabic}
\n
"
;
}
break
;
case
isMainPage
:
t
<<
"}
\n\\
input{index}
\n
"
;
break
;
case
isModuleIndex
:
t
<<
"}
\n\\
input{modules}
\n
"
;
...
...
@@ -495,14 +558,14 @@ void LatexGenerator::writeStyleInfo(int part)
break
;
case
2
:
{
t
<<
" Dimitri van Heesch
\\
copyright
1997-1999}]{}
\n
"
;
t
<<
" Dimitri van Heesch
(c)
1997-1999}]{}
\n
"
;
//QCString dtString=dateToString(FALSE);
t
<<
"
\\
lfoot[]{
\\
fancyplain{}{
\\
bfseries
\\
scriptsize "
;
}
break
;
case
4
:
{
t
<<
" Dimitri van Heesch
\\
copyright
1997-1999}}
\n
"
;
t
<<
" Dimitri van Heesch
(c)
1997-1999}}
\n
"
;
t
<<
"
\\
cfoot{}
\n
"
;
t
<<
"
\\
newenvironment{CompactList}
\n
"
;
t
<<
"{
\\
begin{list}{}{
\n
"
;
...
...
@@ -553,19 +616,6 @@ void LatexGenerator::writeStyleInfo(int part)
}
}
void
LatexGenerator
::
endTitleHead
(
const
char
*
name
)
{
t
<<
"}"
<<
endl
;
if
(
name
)
{
t
<<
"
\\
label{"
<<
name
<<
"}
\\
index{"
<<
name
<<
"@{"
;
docify
(
name
);
t
<<
"}}"
;
}
t
<<
endl
;
}
void
LatexGenerator
::
newParagraph
()
{
t
<<
endl
<<
endl
;
...
...
@@ -584,7 +634,7 @@ void LatexGenerator::writeIndexItem(const char *ref,const char *fn,
{
t
<<
"
\\
contentsline{section}{"
;
docify
(
name
);
t
<<
"}{
\\
pageref{"
<<
name
<<
"}}"
<<
endl
;
t
<<
"}{
\\
pageref{"
<<
name
<<
"}}
{}
"
<<
endl
;
}
else
docify
(
name
);
...
...
@@ -620,7 +670,7 @@ void LatexGenerator::writeStartAnnoItem(const char *,const char *,
void
LatexGenerator
::
writeEndAnnoItem
(
const
char
*
name
)
{
t
<<
"}{
\\
pageref{"
<<
name
<<
"}}"
<<
endl
;
t
<<
"}{
\\
pageref{"
<<
name
<<
"}}
{}
"
<<
endl
;
}
//void LatexGenerator::writeClassLink(const char *,const char *,
...
...
@@ -631,17 +681,34 @@ void LatexGenerator::writeEndAnnoItem(const char *name)
// t << "}";
//}
void
LatexGenerator
::
writeObjectLink
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
text
)
void
LatexGenerator
::
writeObjectLink
(
const
char
*
ref
,
const
char
*
f
,
const
char
*
anchor
,
const
char
*
text
)
{
t
<<
"{
\\
bf "
;
docify
(
text
);
t
<<
"}"
;
if
(
!
ref
&&
Config
::
pdfHyperFlag
)
{
t
<<
"
\\
hyperlink{"
;
if
(
f
)
t
<<
f
;
if
(
anchor
)
t
<<
"_"
<<
anchor
;
t
<<
"}{"
;
docify
(
text
);
t
<<
"}"
;
}
else
{
t
<<
"{
\\
bf "
;
docify
(
text
);
t
<<
"}"
;
}
}
void
LatexGenerator
::
startPageRef
()
{
t
<<
" {
\\
rm ("
;
}
void
LatexGenerator
::
write
PageRef
(
const
char
*
clname
,
const
char
*
anchor
)
void
LatexGenerator
::
end
PageRef
(
const
char
*
clname
,
const
char
*
anchor
)
{
t
<<
"
{
\\
rm (p.
~
\\
pageref{"
;
t
<<
"~
\\
pageref{"
;
if
(
clname
)
t
<<
clname
;
if
(
anchor
)
t
<<
"_"
<<
anchor
;
t
<<
"})}"
;
...
...
@@ -654,6 +721,30 @@ void LatexGenerator::writeCodeLink(const char *,const char *,
col
+=
strlen
(
name
);
}
void
LatexGenerator
::
startTitleHead
(
const
char
*
fileName
)
{
if
(
Config
::
pdfHyperFlag
&&
fileName
)
{
t
<<
"
\\
hypertarget{"
<<
fileName
<<
"}{"
<<
endl
;
}
if
(
Config
::
compactLatexFlag
)
t
<<
"
\\
subsection{"
;
else
t
<<
"
\\
section{"
;
}
void
LatexGenerator
::
endTitleHead
(
const
char
*
fileName
,
const
char
*
name
)
{
t
<<
"}"
<<
endl
;
if
(
name
)
{
t
<<
"
\\
label{"
<<
name
<<
"}
\\
index{"
<<
name
<<
"@{"
;
docify
(
name
);
t
<<
"}}"
<<
endl
;
if
(
Config
::
pdfHyperFlag
&&
fileName
)
{
t
<<
"}"
<<
endl
;
}
}
}
void
LatexGenerator
::
startTitle
()
{
...
...
@@ -671,7 +762,9 @@ void LatexGenerator::endGroupHeader()
}
void
LatexGenerator
::
startMemberDoc
(
const
char
*
clname
,
const
char
*
memname
,
const
char
*
)
const
char
*
memname
,
const
char
*
,
const
char
*
title
)
{
t
<<
"
\\
index{"
;
if
(
clname
)
...
...
@@ -695,23 +788,41 @@ void LatexGenerator::startMemberDoc(const char *clname,
}
t
<<
"}"
<<
endl
;
//
if
(
Config
::
compactLatexFlag
)
t
<<
"
\\
subsubsection{"
;
else
t
<<
"
\\
subsection{"
;
t
<<
"
\\
setlength{
\\
rightskip}{0pt plus 5cm}"
;
if
(
Config
::
compactLatexFlag
)
t
<<
"
\\
subsubsection"
;
else
t
<<
"
\\
subsection"
;
if
(
Config
::
pdfHyperFlag
&&
title
)
t
<<
"["
<<
filterTitle
(
title
)
<<
"]"
;
t
<<
"{
\\
setlength{
\\
rightskip}{0pt plus 5cm}"
;
}
void
LatexGenerator
::
writeDoxyAnchor
(
const
char
*
clname
,
const
char
*
anchor
,
const
char
*
)
void
LatexGenerator
::
startDoxyAnchor
(
const
char
*
fName
,
const
char
*
clname
,
const
char
*
anchor
,
const
char
*
)
{
t
<<
"
\\
label{"
;
if
(
clname
)
t
<<
clname
;
if
(
anchor
)
t
<<
"_"
<<
anchor
;
t
<<
"}"
<<
endl
;
if
(
Config
::
pdfHyperFlag
)
{
t
<<
"
\\
hypertarget{"
;
if
(
fName
)
t
<<
fName
;
if
(
anchor
)
t
<<
"_"
<<
anchor
;
t
<<
"}{"
<<
endl
;
}
}
void
LatexGenerator
::
writeLatexLabel
(
const
char
*
clName
,
const
char
*
anchor
)
void
LatexGenerator
::
endDoxyAnchor
(
)
{
writeDoxyAnchor
(
clName
,
anchor
,
0
);
if
(
Config
::
pdfHyperFlag
)
{
t
<<
"}"
<<
endl
;
}
}
//void LatexGenerator::writeLatexLabel(const char *clName,const char *anchor)
//{
// writeDoxyAnchor(0,clName,anchor,0);
//}
void
LatexGenerator
::
addToIndex
(
const
char
*
s1
,
const
char
*
s2
)
{
if
(
s1
)
...
...
@@ -748,7 +859,7 @@ void LatexGenerator::writeSectionRefItem(const char *,const char *lab,
{
t
<<
"
\\
contentsline{section}{"
;
docify
(
title
);
t
<<
"}{
\\
ref{"
<<
lab
<<
"}}"
<<
endl
;
t
<<
"}{
\\
ref{"
<<
lab
<<
"}}
{}
"
<<
endl
;
}
void
LatexGenerator
::
writeSectionRefAnchor
(
const
char
*
,
const
char
*
lab
,
...
...
@@ -793,8 +904,16 @@ void LatexGenerator::docify(const char *str)
case
'>'
:
t
<<
"$>$"
;
break
;
case
'|'
:
t
<<
"$|$"
;
break
;
case
'~'
:
t
<<
"$
\\
sim$"
;
break
;
case
'['
:
if
(
Config
::
pdfHyperFlag
)
t
<<
"
\\
mbox{[}"
;
else
t
<<
"["
;
break
;
case
']'
:
if
(
pc
==
'['
)
t
<<
"$
\\
,$"
;
t
<<
"]"
;
if
(
Config
::
pdfHyperFlag
)
t
<<
"
\\
mbox{]}"
;
else
t
<<
"]"
;
break
;
case
'-'
:
if
(
*
p
==
'>'
)
{
t
<<
" $
\\
rightarrow$ "
;
p
++
;
}
...
...
@@ -966,6 +1085,7 @@ void LatexGenerator::startMemberItem(bool,int annType)
default
:
t
<<
"
\\
begin{tabbing}"
<<
endl
;
t
<<
"xx
\\
=xx
\\
=xx
\\
=xx
\\
=xx
\\
=xx
\\
=xx
\\
=xx
\\
=xx
\\
=
\\
kill"
<<
endl
;
//printf("LatexGenerator::startMemberItem() insideTabbing=TRUE\n");
insideTabbing
=
TRUE
;
break
;
}
...
...
@@ -974,9 +1094,10 @@ void LatexGenerator::startMemberItem(bool,int annType)
void
LatexGenerator
::
endMemberItem
(
bool
,
const
char
*
,
const
char
*
,
bool
endItem
)
{
if
(
endItem
)
if
(
insideTabbing
&&
endItem
)
{
t
<<
endl
<<
"
\\
end{tabbing}"
;
//printf("LatexGenerator::endMemberItem() insideTabbing=FALSE\n");
insideTabbing
=
FALSE
;
}
if
(
insideTabbing
)
...
...
@@ -1006,3 +1127,12 @@ void LatexGenerator::endMemberList()
t
<<
"
\\
end{CompactItemize}"
<<
endl
;
}
void
LatexGenerator
::
writeImage
(
const
char
*
name
,
const
char
*
w
,
const
char
*
h
)
{
t
<<
"
\\
mbox{
\\
epsfig{file="
<<
name
;
if
(
w
)
t
<<
","
<<
w
;
else
if
(
h
)
t
<<
","
<<
h
;
t
<<
"}}"
<<
endl
;
}
src/latexgen.h
View file @
d4bdeb54
...
...
@@ -27,7 +27,7 @@ class LatexGenerator : public OutputGenerator
LatexGenerator
();
~
LatexGenerator
();
OutputGenerator
*
copy
()
{
return
new
LatexGenerator
;
}
OutputGenerator
*
copy
()
;
//OutputGenerator *clone() { return new LatexGenerator(*this); }
void
append
(
const
OutputGenerator
*
o
);
void
enable
()
{
active
=
TRUE
;
}
...
...
@@ -50,9 +50,9 @@ class LatexGenerator : public OutputGenerator
void
startProjectNumber
();
void
endProjectNumber
()
{}
void
writeStyleInfo
(
int
part
);
void
startTitleHead
(
)
{
startTitle
();
}
void
startTitleHead
(
const
char
*
);
void
startTitle
();
void
endTitleHead
(
const
char
*
name
);
void
endTitleHead
(
const
char
*
,
const
char
*
name
);
void
endTitle
()
{
t
<<
"}"
;
}
void
newParagraph
();
...
...
@@ -63,8 +63,8 @@ class LatexGenerator : public OutputGenerator
void
endItemList
()
{
t
<<
"
\\
end{CompactItemize}"
<<
endl
;
}
void
startEnumList
()
{
t
<<
"
\\
begin{enumerate}"
<<
endl
;
}
void
endEnumList
()
{
t
<<
"
\\
end{enumerate}"
<<
endl
;
}
void
startAl
f
abeticalIndexList
()
{}
void
endAl
f
abeticalIndexList
()
{}
void
startAl
ph
abeticalIndexList
()
{}
void
endAl
ph
abeticalIndexList
()
{}
void
writeIndexHeading
(
const
char
*
)
{}
void
writeIndexItem
(
const
char
*
ref
,
const
char
*
file
,
const
char
*
name
);
void
docify
(
const
char
*
text
);
...
...
@@ -96,7 +96,7 @@ class LatexGenerator : public OutputGenerator
void
memberGroupSeparator
()
{}
void
insertMemberAlign
()
{}
void
writeRuler
()
{
t
<<
"
\\
vspace{0.4cm}
\\
hrule
\\
vspace{0.2cm}"
;
}
void
writeRuler
()
{
t
<<
"
\\
vspace{0.4cm}
\\
hrule
\\
vspace{0.2cm}"
<<
endl
;
}
void
writeAnchor
(
const
char
*
name
)
{
t
<<
"
\\
label{"
<<
name
<<
"}"
<<
endl
;
}
void
startCodeFragment
()
{
t
<<
"
\\
small
\\
begin{verbatim}"
;
}
void
endCodeFragment
()
{
t
<<
"
\\
end{verbatim}
\\
normalsize "
<<
endl
;
}
...
...
@@ -111,12 +111,13 @@ class LatexGenerator : public OutputGenerator
void
startDescItem
()
{
t
<<
"
\\
item["
;
}
void
endDescItem
()
{
t
<<
"]"
<<
endl
;
}
void
lineBreak
()
{
t
<<
"
\\
par
\n
"
;
}
void
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
);
void
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
);
void
endMemberDoc
()
{
t
<<
"}"
;
}
void
writeDoxyAnchor
(
const
char
*
,
const
char
*
,
const
char
*
);
void
startDoxyAnchor
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
);
void
endDoxyAnchor
();
void
writeChar
(
char
c
);
void
writeLatexSpacing
()
{
t
<<
"
\\
hspace{0.3cm}"
;
}
void
writeLatexLabel
(
const
char
*
scope
,
const
char
*
anchor
);
//
void writeLatexLabel(const char *scope,const char *anchor);
void
writeStartAnnoItem
(
const
char
*
type
,
const
char
*
file
,
const
char
*
path
,
const
char
*
name
);
void
writeEndAnnoItem
(
const
char
*
name
);
...
...
@@ -157,10 +158,10 @@ class LatexGenerator : public OutputGenerator
void
writeTilde
(
char
c
)
{
t
<<
"
\\
~{"
<<
c
<<
"}"
;
}
void
startMemberDescription
()
{
t
<<
"
\\
begin{CompactList}
\\
small
\\
item
\\
em "
;
}
void
endMemberDescription
()
{
t
<<
"
\\
item
\\
end{CompactList}"
;
}
void
startDescList
()
{
t
<<
"
\\
begin{Desc}
\\
item["
;
}
void
startDescList
()
{
t
<<
"
\\
begin{Desc}
\
n\
\
item["
;
}
void
endDescTitle
()
{
t
<<
"]"
;
}
void
writeDescItem
()
{
t
<<
"
\\
par"
<<
endl
;
}
void
endDescList
()
{
t
<<
"
\\
end{Desc}"
;
}
void
endDescList
()
{
t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
writeSection
(
const
char
*
,
const
char
*
,
bool
);
void
writeSectionRef
(
const
char
*
,
const
char
*
,
const
char
*
);
void
writeSectionRefItem
(
const
char
*
,
const
char
*
,
const
char
*
);
...
...
@@ -174,11 +175,13 @@ class LatexGenerator : public OutputGenerator
void
endClassDiagram
(
ClassDiagram
&
,
const
char
*
,
const
char
*
);
void
startColorFont
(
uchar
,
uchar
,
uchar
)
{}
void
endColorFont
()
{}
void
writePageRef
(
const
char
*
,
const
char
*
);
void
startPageRef
();
void
endPageRef
(
const
char
*
,
const
char
*
);
void
startQuickIndexItem
(
const
char
*
,
const
char
*
)
{}
void
endQuickIndexItem
()
{}
void
writeFormula
(
const
char
*
,
const
char
*
);
void
writeNonBreakableSpace
();
void
writeImage
(
const
char
*
,
const
char
*
,
const
char
*
);
//static void docifyStatic(QTextStream &t,const char *str);
...
...
src/mangen.cpp
View file @
d4bdeb54
...
...
@@ -92,11 +92,7 @@ void ManGenerator::endFile()
endPlainFile
();
}
void
ManGenerator
::
writeDoxyAnchor
(
const
char
*
,
const
char
*
,
const
char
*
)
{
}
void
ManGenerator
::
endTitleHead
(
const
char
*
name
)
void
ManGenerator
::
endTitleHead
(
const
char
*
,
const
char
*
name
)
{
t
<<
".TH "
<<
name
<<
" 3
\"
"
<<
dateToString
(
FALSE
)
<<
"
\"
\"
"
;
if
(
Config
::
projectName
.
isEmpty
())
...
...
@@ -284,7 +280,7 @@ void ManGenerator::endCodeFragment()
col
=
0
;
}
void
ManGenerator
::
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
)
void
ManGenerator
::
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
)
{
if
(
!
firstCol
)
t
<<
endl
;
t
<<
".SS "
;
...
...
src/mangen.h
View file @
d4bdeb54
...
...
@@ -50,8 +50,8 @@ class ManGenerator : public OutputGenerator
void
startProjectNumber
()
{}
void
endProjectNumber
()
{}
void
writeStyleInfo
(
int
)
{}
void
startTitleHead
()
{}
void
endTitleHead
(
const
char
*
);
void
startTitleHead
(
const
char
*
)
{}
void
endTitleHead
(
const
char
*
,
const
char
*
);
void
startTitle
();
void
endTitle
()
{}
...
...
@@ -63,8 +63,8 @@ class ManGenerator : public OutputGenerator
void
endItemList
()
{}
void
startEnumList
()
{}
void
endEnumList
()
{}
void
startAl
f
abeticalIndexList
()
{}
void
endAl
f
abeticalIndexList
()
{}
void
startAl
ph
abeticalIndexList
()
{}
void
endAl
ph
abeticalIndexList
()
{}
void
writeIndexHeading
(
const
char
*
)
{}
void
writeIndexItem
(
const
char
*
ref
,
const
char
*
file
,
const
char
*
name
);
void
docify
(
const
char
*
text
);
...
...
@@ -110,11 +110,13 @@ class ManGenerator : public OutputGenerator
void
endDescItem
();
void
lineBreak
()
{
t
<<
"
\n
.br"
<<
endl
;
}
void
writeChar
(
char
c
);
void
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
);
void
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
);
void
endMemberDoc
()
{}
void
writeDoxyAnchor
(
const
char
*
clName
,
const
char
*
anchor
,
const
char
*
name
);
void
startDoxyAnchor
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
)
{}
void
endDoxyAnchor
()
{}
void
writeLatexSpacing
()
{}
void
writeLatexLabel
(
const
char
*
,
const
char
*
)
{}
//
void writeLatexLabel(const char *,const char *) {}
void
writeStartAnnoItem
(
const
char
*
type
,
const
char
*
file
,
const
char
*
path
,
const
char
*
name
);
void
writeEndAnnoItem
(
const
char
*
)
{
t
<<
endl
;
firstCol
=
TRUE
;
}
...
...
@@ -162,11 +164,13 @@ class ManGenerator : public OutputGenerator
void
endClassDiagram
(
ClassDiagram
&
,
const
char
*
,
const
char
*
)
{}
void
startColorFont
(
uchar
,
uchar
,
uchar
)
{}
void
endColorFont
()
{}
void
writePageRef
(
const
char
*
,
const
char
*
)
{}
void
startPageRef
()
{}
void
endPageRef
(
const
char
*
,
const
char
*
)
{}
void
startQuickIndexItem
(
const
char
*
,
const
char
*
)
{}
void
endQuickIndexItem
()
{}
void
writeFormula
(
const
char
*
,
const
char
*
)
{}
void
writeNonBreakableSpace
()
{
t
<<
" "
;
}
void
writeImage
(
const
char
*
,
const
char
*
,
const
char
*
)
{}
private
:
bool
firstCol
;
...
...
src/memberdef.cpp
View file @
d4bdeb54
...
...
@@ -235,8 +235,10 @@ MemberDef::MemberDef(const char *t,const char *na,const char *a,const char *e,
eUsed
=
FALSE
;
proto
=
FALSE
;
annScope
=
FALSE
;
inLine
=
FALSE
;
annMemb
=
0
;
annUsed
=
FALSE
;
annShown
=
FALSE
;
indDepth
=
0
;
docEnumValues
=
FALSE
;
// copy function template arguments (if any)
...
...
@@ -500,27 +502,47 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
// search for the last annonymous scope in the member type
ClassDef
*
annoClassDef
=
0
;
while
(
i
!=-
1
&&
cname
.
find
(
type
.
mid
(
i
,
l
))
!=-
1
)
{
i
=
r
.
match
(
type
,
i
+
l
,
&
l
);
}
if
(
i
!=-
1
)
//while (i!=-1 && cname.find(type.mid(i,l))!=-1)
//{
// i=r.match(type,i+l,&l);
//}
int
il
=
i
-
1
,
ir
=
i
+
l
;
if
(
i
!=-
1
)
// found annonymous scope in type
{
// get the definition of the annonymous class that is
// the type of this member
annoClassDef
=
getClass
(
cname
+
"::"
+
type
.
mid
(
i
,
l
));
// extract annonymous scope
while
(
il
>=
0
&&
(
isId
(
type
.
at
(
il
))
||
type
.
at
(
il
)
==
':'
||
type
.
at
(
il
)
==
'@'
))
il
--
;
if
(
il
>
0
)
il
++
;
while
(
ir
<
(
int
)
type
.
length
()
&&
(
isId
(
type
.
at
(
ir
))
||
type
.
at
(
ir
)
==
':'
||
type
.
at
(
ir
)
==
'@'
))
ir
++
;
//QCString annName = type.mid(i,l);
QCString
annName
=
type
.
mid
(
il
,
ir
-
il
);
// if inside a class or namespace try to prepend the scope name
if
((
cd
||
nd
)
&&
annName
.
left
(
cname
.
length
())
!=
cname
)
{
QCString
ts
=
stripAnnonymousNamespaceScope
(
cname
+
"::"
+
annName
);
//printf("Member::writeDeclaration: Trying %s\n",ts.data());
annoClassDef
=
getClass
(
ts
);
}
// if not found yet, try without scope name
if
(
annoClassDef
==
0
)
{
QCString
ts
=
stripAnnonymousNamespaceScope
(
annName
);
//printf("Member::writeDeclaration: Trying %s\n",ts.data());
annoClassDef
=
getClass
(
ts
);
}
}
// start a new member declaration
ol
.
startMemberItem
(
gId
!=-
1
,(
(
i
!=-
1
)
||
annMemb
)
?
1
:
0
);
ol
.
startMemberItem
(
gId
!=-
1
,(
annoClassDef
||
annMemb
)
?
1
:
0
);
// If there is no detailed description we need to write the anchor here.
bool
detailsVisible
=
detailsAreVisible
();
if
(
!
detailsVisible
&&
!
Config
::
extractAllFlag
&&
!
annMemb
)
{
QCString
doxyName
=
name
().
copy
();
if
(
!
cname
.
isEmpty
())
doxyName
.
prepend
(
cname
+
"::"
);
ol
.
writeDoxyAnchor
(
cname
,
anchor
(),
doxyName
);
ol
.
startDoxyAnchor
(
cfname
,
cname
,
anchor
(),
doxyName
);
ol
.
addToIndex
(
name
(),
cname
);
ol
.
addToIndex
(
cname
,
name
());
if
(
hasHtmlHelp
)
...
...
@@ -538,12 +560,8 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
// ol.writeLatexLabel(cname,anchor());
//}
if
(
tArgList
)
{
writeTemplatePrefix
(
ol
,
tArgList
,
FALSE
);
}
if
(
i
!=-
1
||
annMemb
)
//printf("member name=%s indDepth=%d\n",name().data(),indDepth);
if
(
annoClassDef
||
annMemb
)
{
int
j
;
for
(
j
=
0
;
j
<
indDepth
;
j
++
)
...
...
@@ -552,6 +570,11 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
}
}
if
(
tArgList
)
{
writeTemplatePrefix
(
ol
,
tArgList
,
FALSE
);
}
if
(
i
!=-
1
)
{
//printf("scopeName=`%s' annonymous=`%s'\n",
...
...
@@ -560,15 +583,23 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
if
(
annoClassDef
)
{
//printf("class found!\n");
annoClassDef
->
writeDeclaration
(
ol
);
annoClassDef
->
writeDeclaration
(
ol
,
annMemb
);
ol
.
startMemberItem
(
gId
!=-
1
,
2
);
int
j
;
for
(
j
=
0
;
j
<
indDepth
;
j
++
)
{
ol
.
writeNonBreakableSpace
();
}
QCString
varName
=
type
.
right
(
type
.
length
()
-
ir
).
stripWhiteSpace
();
ol
.
docify
(
"}"
);
ol
.
docify
(
type
.
right
(
type
.
length
()
-
i
-
l
).
stripWhiteSpace
());
if
(
varName
.
isEmpty
()
&&
(
name
().
isEmpty
()
||
name
().
at
(
0
)
==
'@'
))
{
ol
.
docify
(
";"
);
}
else
{
ol
.
docify
(
varName
);
}
}
else
{
...
...
@@ -605,35 +636,43 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
ol
.
insertMemberAlign
();
// write name
if
(
grpId
!=-
1
)
if
(
!
name
().
isEmpty
()
&&
name
().
at
(
0
)
!=
'@'
)
{
if
(
annMemb
)
if
(
grpId
!=-
1
)
{
//printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
annMemb
->
writeLink
(
ol
,
cd
,
nd
,
fd
,
inGroup
?
memberGroup
:
0
);
annMemb
->
annUsed
=
annUsed
=
TRUE
;
if
(
annMemb
)
{
//printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
annMemb
->
writeLink
(
ol
,
cd
,
nd
,
fd
,
inGroup
?
memberGroup
:
0
);
annMemb
->
annUsed
=
annUsed
=
TRUE
;
}
else
writeLink
(
ol
,
0
,
0
,
0
,
memberGroup
);
//ol.writeBoldString(name());
}
else
writeLink
(
ol
,
0
,
0
,
0
,
memberGroup
);
//ol.writeBoldString(name());
}
else
if
(
isLinkable
())
{
if
(
annMemb
)
else
if
(
isLinkable
())
{
//printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
annMemb
->
writeLink
(
ol
,
annMemb
->
memberClass
(),
nd
,
fd
,
inGroup
?
memberGroup
:
0
);
annMemb
->
annUsed
=
annUsed
=
TRUE
;
if
(
annMemb
)
{
//printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
annMemb
->
writeLink
(
ol
,
annMemb
->
memberClass
(),
annMemb
->
getNamespace
(),
annMemb
->
getFileDef
(),
inGroup
?
memberGroup
:
0
);
annMemb
->
annUsed
=
annUsed
=
TRUE
;
}
else
//printf("writeLink %s->%d\n",name.data(),hasDocumentation());
writeLink
(
ol
,
cd
,
nd
,
fd
,
inGroup
?
memberGroup
:
0
);
}
else
// there is a brief member description and brief member
// descriptions are enabled or there is no detailed description.
{
if
(
annMemb
)
annMemb
->
annUsed
=
annUsed
=
TRUE
;
ol
.
writeBoldString
(
name
());
}
else
//printf("writeLink %s->%d\n",name.data(),hasDocumentation());
writeLink
(
ol
,
cd
,
nd
,
fd
,
inGroup
?
memberGroup
:
0
);
}
else
// there is a brief member description and brief member
// descriptions are enabled or there is no detailed description.
{
if
(
annMemb
)
annMemb
->
annUsed
=
annUsed
=
TRUE
;
ol
.
writeBoldString
(
name
());
}
// if member template specifiers are not part of the name, but they are
...
...
@@ -657,8 +696,14 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
ol
.
docify
(
excpString
());
}
ol
.
endMemberItem
(
gId
!=-
1
,
gFile
,
gHeader
,
annoClassDef
!=
0
&&
indDepth
==
0
);
if
(
!
detailsVisible
&&
!
Config
::
extractAllFlag
&&
!
annMemb
)
{
ol
.
endDoxyAnchor
();
}
ol
.
endMemberItem
(
gId
!=-
1
,
gFile
,
gHeader
,
annoClassDef
!=
0
&&
indDepth
==
0
);
//ol.endMemberItem(gId!=-1,gFile,gHeader,annoClassDef || annMemb);
// write brief description
if
(
!
briefDescription
().
isEmpty
()
&&
Config
::
briefMemDescFlag
&&
gId
==-
1
&&
!
inGroup
&&
!
annMemb
)
...
...
@@ -743,27 +788,28 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
{
if
(
vmd
->
isEnumerate
()
&&
def
.
mid
(
i
,
l
)
==
vmd
->
name
())
{
ol
.
startMemberDoc
(
cname
,
name
(),
anchor
());
ol
.
startDoxyAnchor
(
cfname
,
cname
,
anchor
(),
doxyName
);
ol
.
startMemberDoc
(
cname
,
name
(),
anchor
(),
name
());
if
(
hasHtmlHelp
)
{
htmlHelp
->
addIndexItem
(
cname
,
name
(),
cfname
,
anchor
());
}
ol
.
writeDoxyAnchor
(
cname
,
anchor
(),
doxyName
);
linkifyText
(
ol
,
scopeName
,
name
(),
def
.
left
(
i
));
ol
+=*
vmd
->
enumDecl
();
linkifyText
(
ol
,
scopeName
,
name
(),
def
.
right
(
def
.
length
()
-
i
-
l
));
//ol.endDoxyAnchor();
found
=
TRUE
;
}
}
if
(
!
found
)
// anonymous compound
{
//printf("Annonymous compound `%s'\n",cname.data());
ol
.
startMemberDoc
(
cname
,
name
(),
anchor
());
ol
.
startDoxyAnchor
(
cfname
,
cname
,
anchor
(),
doxyName
);
ol
.
startMemberDoc
(
cname
,
name
(),
anchor
(),
name
());
if
(
hasHtmlHelp
)
{
htmlHelp
->
addIndexItem
(
cname
,
name
(),
cfname
,
anchor
());
}
ol
.
writeDoxyAnchor
(
cname
,
anchor
(),
doxyName
);
// strip annonymous compound names from definition
int
si
=
def
.
find
(
' '
),
pi
,
ei
=
i
+
l
;
if
(
si
==-
1
)
si
=
0
;
...
...
@@ -772,17 +818,19 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
ol
.
docify
(
def
.
left
(
si
));
ol
.
docify
(
" { ... } "
);
// last ei characters of def contain pointer/reference specifiers
int
ni
=
def
.
findRev
(
"::"
);
if
(
ni
>=
ei
)
ei
=
ni
+
2
;
linkifyText
(
ol
,
scopeName
,
name
(),
def
.
right
(
def
.
length
()
-
ei
));
}
}
else
{
ol
.
startMemberDoc
(
cname
,
name
(),
anchor
());
ol
.
startDoxyAnchor
(
cfname
,
cname
,
anchor
(),
doxyName
);
ol
.
startMemberDoc
(
cname
,
name
(),
anchor
(),
name
());
if
(
hasHtmlHelp
)
{
htmlHelp
->
addIndexItem
(
cname
,
name
(),
cfname
,
anchor
());
}
ol
.
writeDoxyAnchor
(
cname
,
anchor
(),
doxyName
);
ArgumentList
*
scopeAl
=
scopeDefTemplateArguments
();
if
(
scopeAl
==
0
&&
cd
)
scopeAl
=
cd
->
templateArguments
();
...
...
@@ -840,7 +888,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
if
(
isStatic
()
||
protection
()
!=
Public
||
virt
!=
Normal
||
isSignal
()
||
isFriend
()
||
isRelated
()
||
isSlot
()
isRelated
()
||
isSlot
()
||
(
isInline
()
&&
Config
::
inlineInfoFlag
)
)
{
// write the member specifier list
...
...
@@ -852,6 +901,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
else
if
(
isRelated
())
sl
.
append
(
"related"
);
else
{
if
(
Config
::
inlineInfoFlag
&&
isInline
())
sl
.
append
(
"inline"
);
if
(
isStatic
())
sl
.
append
(
"static"
);
if
(
protection
()
==
Protected
)
sl
.
append
(
"protected"
);
else
if
(
protection
()
==
Private
)
sl
.
append
(
"private"
);
...
...
@@ -871,6 +922,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
ol
.
endTypewriter
();
}
ol
.
endMemberDoc
();
ol
.
endDoxyAnchor
();
ol
.
startIndent
();
ol
.
newParagraph
();
...
...
@@ -915,7 +967,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
ol
.
endBold
();
ol
.
startItemList
();
}
ol
.
writeDoxyAnchor
(
cname
,
fmd
->
anchor
(),
fmd
->
name
());
ol
.
addToIndex
(
fmd
->
name
(),
cname
);
ol
.
addToIndex
(
cname
,
fmd
->
name
());
if
(
Config
::
generateHtml
&&
Config
::
htmlHelpFlag
)
...
...
@@ -923,10 +974,12 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
HtmlHelp
::
getInstance
()
->
addIndexItem
(
cname
,
fmd
->
name
(),
cfname
,
fmd
->
anchor
());
}
ol
.
writeListItem
();
ol
.
startDoxyAnchor
(
cfname
,
cname
,
fmd
->
anchor
(),
fmd
->
name
());
first
=
FALSE
;
ol
.
startBold
();
ol
.
docify
(
fmd
->
name
());
ol
.
endBold
();
ol
.
endDoxyAnchor
();
ol
.
newParagraph
();
if
(
!
fmd
->
briefDescription
().
isEmpty
())
...
...
@@ -979,18 +1032,18 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
{
ol
.
writeObjectLink
(
bcd
->
getReference
(),
bcd
->
getOutputFileBase
(),
bmd
->
anchor
(),
bcd
->
name
());
if
(
bcd
->
isLinkableInProject
())
if
(
bcd
->
isLinkableInProject
()
&&
!
Config
::
pdfHyperFlag
)
{
ol
.
writePageRef
(
bcd
->
name
(),
bmd
->
anchor
());
writePageRef
(
ol
,
bcd
->
name
(),
bmd
->
anchor
());
}
}
else
{
ol
.
writeObjectLink
(
bcd
->
getReference
(),
bcd
->
getOutputFileBase
(),
0
,
bcd
->
name
());
if
(
bcd
->
isLinkableInProject
())
if
(
bcd
->
isLinkableInProject
()
&&
!
Config
::
pdfHyperFlag
)
{
ol
.
writePageRef
(
bcd
->
name
(),
0
);
writePageRef
(
ol
,
bcd
->
name
(),
0
);
}
}
parseText
(
ol
,
reimplFromLine
.
right
(
...
...
@@ -1041,7 +1094,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
count
=
0
;
// find the entryIndex-th documented entry in the inheritance list.
for
(
mli
.
to
First
();(
bmd
=
mli
.
current
())
&&
(
bcd
=
bmd
->
memberClass
());
++
mli
)
for
(
mli
.
to
Last
();(
bmd
=
mli
.
current
())
&&
(
bcd
=
bmd
->
memberClass
());
--
mli
)
{
if
(
bmd
->
isLinkable
()
&&
bcd
->
isLinkable
())
{
...
...
@@ -1058,9 +1111,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
//{
ol
.
writeObjectLink
(
bcd
->
getReference
(),
bcd
->
getOutputFileBase
(),
bmd
->
anchor
(),
bcd
->
name
());
if
(
bcd
->
isLinkableInProject
())
if
(
bcd
->
isLinkableInProject
()
&&
!
Config
::
pdfHyperFlag
)
{
ol
.
writePageRef
(
bcd
->
name
(),
bmd
->
anchor
());
writePageRef
(
ol
,
bcd
->
name
(),
bmd
->
anchor
());
}
//}
//else
...
...
src/memberdef.h
View file @
d4bdeb54
...
...
@@ -84,12 +84,14 @@ class MemberDef : public Definition
void
setFileDec
(
FileDef
*
fd
)
{
fileDec
=
fd
;
}
void
setAnchor
(
const
char
*
a
)
{
anc
=
a
;
}
void
setProtection
(
Protection
p
)
{
prot
=
p
;
}
void
setBody
(
const
QCString
&
b
)
{
body
=
b
;
}
void
setBody
(
const
QCString
&
b
)
{
body
=
b
;
}
void
setInline
(
bool
in
)
{
inLine
=
in
;
}
FileDef
*
getFileDef
()
{
return
fileDef
;
}
FileDef
*
getFileDec
()
{
return
fileDec
;
}
void
setMemberClass
(
ClassDef
*
cd
)
{
classDef
=
cd
;
}
bool
isRelated
()
const
{
return
related
;
}
bool
isStatic
()
const
{
return
stat
;
}
bool
isInline
()
const
{
return
inLine
;
}
bool
hasDocumentation
()
// overrides hasDocumentation in definition.h
{
return
Definition
::
hasDocumentation
()
||
!
body
.
isEmpty
();
}
...
...
@@ -212,12 +214,14 @@ class MemberDef : public Definition
Protection
prot
;
// protection type [Public/Protected/Private]
bool
related
;
// is this a member that is only related to a class
bool
stat
;
// is it a static function?
bool
inLine
;
// is it an inline function?
MemberType
mtype
;
// returns the kind of member
bool
eUsed
;
// is the enumerate already placed in a list
bool
proto
;
// is it a prototype;
bool
docEnumValues
;
// is an enum with documented enum values.
bool
annScope
;
bool
annUsed
;
bool
annShown
;
int
indDepth
;
MemberDef
*
annMemb
;
ArgumentList
*
argList
;
// argument list of this member
...
...
src/membergroup.cpp
View file @
d4bdeb54
...
...
@@ -62,9 +62,9 @@ void MemberGroup::writeDocumentation(OutputList &ol)
}
ol
.
disable
(
OutputGenerator
::
Man
);
startFile
(
ol
,
fileName
,
title
);
startTitle
(
ol
);
startTitle
(
ol
,
getOutputFileBase
()
);
ol
.
docify
(
title
);
endTitle
(
ol
,
name
());
endTitle
(
ol
,
getOutputFileBase
(),
name
());
OutputList
briefOutput
(
&
ol
);
...
...
src/memberlist.cpp
View file @
d4bdeb54
...
...
@@ -256,11 +256,11 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
// )
// )
// )
if
(
md
->
hasDocumentation
()
||
md
->
hasDocumentedEnumValues
())
if
(
md
->
isLinkableInProject
()
||
md
->
hasDocumentedEnumValues
())
{
if
(
Config
::
genTagFile
.
length
()
>
0
)
tagFile
<<
md
->
name
()
<<
" "
<<
md
->
anchor
()
<<
"
\"
"
<<
md
->
argsString
()
<<
"
\"
"
;
<<
"
\"
\"
"
<<
endl
;
md
->
writeLink
(
typeDecl
,
cd
,
nd
,
fd
,
0
);
}
else
...
...
src/membername.h
View file @
d4bdeb54
...
...
@@ -86,6 +86,7 @@ class MemberNameInfoIterator : public QListIterator<MemberInfo>
class
MemberNameInfoList
:
public
QList
<
MemberNameInfo
>
{
public
:
~
MemberNameInfoList
()
{}
int
compareItems
(
GCI
item1
,
GCI
item2
)
{
return
stricmp
(
((
MemberNameInfo
*
)
item1
)
->
memberName
(),
...
...
@@ -98,6 +99,7 @@ class MemberNameInfoDict : public QDict<MemberNameInfo>
{
public
:
MemberNameInfoDict
(
int
size
)
:
QDict
<
MemberNameInfo
>
(
size
)
{}
~
MemberNameInfoDict
()
{}
};
class
MemberNameInfoListIterator
:
public
QListIterator
<
MemberNameInfo
>
...
...
src/namespacedef.cpp
View file @
d4bdeb54
...
...
@@ -63,10 +63,10 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{
QCString
pageTitle
=
name
()
+
" Namespace Reference"
;
startFile
(
ol
,
fileName
,
pageTitle
);
startTitle
(
ol
);
startTitle
(
ol
,
getOutputFileBase
()
);
//ol.docify(pageTitle);
parseText
(
ol
,
theTranslator
->
trNamespaceReference
(
name
()));
endTitle
(
ol
,
name
());
endTitle
(
ol
,
getOutputFileBase
(),
name
());
if
(
Config
::
genTagFile
.
length
()
>
0
)
tagFile
<<
"%"
<<
name
()
<<
":
\n
"
;
...
...
@@ -94,7 +94,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
bool
found
=
FALSE
;
while
(
cd
)
{
if
(
cd
->
isLinkable
()
)
if
(
cd
->
name
().
find
(
'@'
)
==-
1
)
{
if
(
!
found
)
{
...
...
@@ -120,7 +120,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
}
ol
.
writeString
(
" "
);
ol
.
insertMemberAlign
();
if
(
cd
->
hasDocumentation
())
if
(
cd
->
isLinkable
())
{
ol
.
writeObjectLink
(
cd
->
getReference
(),
cd
->
getOutputFileBase
(),
...
...
src/namespacedef.h
View file @
d4bdeb54
...
...
@@ -76,6 +76,7 @@ class NamespaceDef : public Definition
class
NamespaceList
:
public
QList
<
NamespaceDef
>
{
public
:
~
NamespaceList
()
{}
int
compareItems
(
GCI
item1
,
GCI
item2
)
{
return
strcmp
(((
NamespaceDef
*
)
item1
)
->
name
(),
...
...
@@ -95,6 +96,7 @@ class NamespaceDict : public QDict<NamespaceDef>
{
public
:
NamespaceDict
(
int
size
)
:
QDict
<
NamespaceDef
>
(
size
)
{}
~
NamespaceDict
()
{}
};
#endif
src/outputgen.h
View file @
d4bdeb54
...
...
@@ -53,8 +53,8 @@ class OutputGenerator
virtual
void
startProjectNumber
()
=
0
;
virtual
void
endProjectNumber
()
=
0
;
virtual
void
writeStyleInfo
(
int
part
)
=
0
;
virtual
void
startTitleHead
()
=
0
;
virtual
void
endTitleHead
(
const
char
*
name
)
=
0
;
virtual
void
startTitleHead
(
const
char
*
)
=
0
;
virtual
void
endTitleHead
(
const
char
*
fileName
,
const
char
*
name
)
=
0
;
virtual
void
startTitle
()
=
0
;
virtual
void
endTitle
()
=
0
;
virtual
void
newParagraph
()
=
0
;
...
...
@@ -67,8 +67,8 @@ class OutputGenerator
virtual
void
endEnumList
()
=
0
;
virtual
void
startBold
()
=
0
;
virtual
void
endBold
()
=
0
;
virtual
void
startAl
f
abeticalIndexList
()
=
0
;
virtual
void
endAl
f
abeticalIndexList
()
=
0
;
virtual
void
startAl
ph
abeticalIndexList
()
=
0
;
virtual
void
endAl
ph
abeticalIndexList
()
=
0
;
virtual
void
writeIndexHeading
(
const
char
*
s
)
=
0
;
virtual
void
writeIndexItem
(
const
char
*
ref
,
const
char
*
file
,
const
char
*
text
)
=
0
;
...
...
@@ -109,11 +109,14 @@ class OutputGenerator
virtual
void
startEmphasis
()
=
0
;
virtual
void
endEmphasis
()
=
0
;
virtual
void
writeChar
(
char
c
)
=
0
;
virtual
void
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
)
=
0
;
virtual
void
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
)
=
0
;
virtual
void
endMemberDoc
()
=
0
;
virtual
void
writeDoxyAnchor
(
const
char
*
clName
,
const
char
*
anchor
,
const
char
*
name
)
=
0
;
virtual
void
startDoxyAnchor
(
const
char
*
fileName
,
const
char
*
clName
,
const
char
*
anchor
,
const
char
*
name
)
=
0
;
virtual
void
endDoxyAnchor
()
=
0
;
virtual
void
writeLatexSpacing
()
=
0
;
virtual
void
writeLatexLabel
(
const
char
*
clName
,
const
char
*
anchor
)
=
0
;
//
virtual void writeLatexLabel(const char *clName,const char *anchor) = 0;
virtual
void
writeStartAnnoItem
(
const
char
*
type
,
const
char
*
file
,
const
char
*
path
,
const
char
*
name
)
=
0
;
virtual
void
writeEndAnnoItem
(
const
char
*
name
)
=
0
;
...
...
@@ -166,11 +169,13 @@ class OutputGenerator
virtual
void
endClassDiagram
(
ClassDiagram
&
,
const
char
*
,
const
char
*
)
=
0
;
virtual
void
startColorFont
(
uchar
r
,
uchar
g
,
uchar
b
)
=
0
;
virtual
void
endColorFont
()
=
0
;
virtual
void
writePageRef
(
const
char
*
,
const
char
*
)
=
0
;
virtual
void
startPageRef
()
=
0
;
virtual
void
endPageRef
(
const
char
*
,
const
char
*
)
=
0
;
virtual
void
startQuickIndexItem
(
const
char
*
s
,
const
char
*
l
)
=
0
;
virtual
void
endQuickIndexItem
()
=
0
;
virtual
void
writeFormula
(
const
char
*
,
const
char
*
)
=
0
;
virtual
void
writeNonBreakableSpace
()
=
0
;
virtual
void
writeImage
(
const
char
*
,
const
char
*
,
const
char
*
)
=
0
;
void
clear
()
{
b
.
close
();
a
.
resize
(
0
);
b
.
setBuffer
(
a
);
b
.
open
(
IO_WriteOnly
);
t
.
setDevice
(
&
b
);
}
...
...
src/outputlist.cpp
View file @
d4bdeb54
...
...
@@ -226,12 +226,14 @@ void OutputList::forall(void (OutputGenerator::*func)(a1,a2,a3,a4),a1,a2,a3,a4)
FORALL1
(
const
char
*
a1
,
a1
)
FORALL1
(
char
a1
,
a1
)
FORALL1
(
int
a1
,
a1
)
#if defined(HAS_BOOL_TYPE)
FORALL1
(
bool
a1
,
a1
)
FORALL1
(
IndexSections
a1
,
a1
)
FORALL2
(
const
char
*
a1
,
const
char
*
a2
,
a1
,
a2
)
FORALL2
(
int
a1
,
bool
a2
,
a1
,
a2
)
FORALL2
(
bool
a1
,
int
a2
,
a1
,
a2
)
FORALL2
(
bool
a1
,
bool
a2
,
a1
,
a2
)
#endif
FORALL2
(
int
a1
,
bool
a2
,
a1
,
a2
)
FORALL1
(
IndexSections
a1
,
a1
)
FORALL2
(
const
char
*
a1
,
const
char
*
a2
,
a1
,
a2
)
FORALL3
(
ClassDiagram
&
a1
,
const
char
*
a2
,
const
char
*
a3
,
a1
,
a2
,
a3
)
FORALL3
(
const
char
*
a1
,
const
char
*
a2
,
const
char
*
a3
,
a1
,
a2
,
a3
)
FORALL3
(
const
char
*
a1
,
const
char
*
a2
,
bool
a3
,
a1
,
a2
,
a3
)
...
...
src/outputlist.h
View file @
d4bdeb54
...
...
@@ -72,10 +72,10 @@ class OutputList
{
forall
(
&
OutputGenerator
::
endFile
);
}
void
endPlainFile
()
{
forall
(
&
OutputGenerator
::
endPlainFile
);
}
void
startTitleHead
()
{
forall
(
&
OutputGenerator
::
startTitleHead
);
}
void
endTitleHead
(
const
char
*
name
)
{
forall
(
&
OutputGenerator
::
endTitleHead
,
name
);
}
void
startTitleHead
(
const
char
*
fileName
)
{
forall
(
&
OutputGenerator
::
startTitleHead
,
fileName
);
}
void
endTitleHead
(
const
char
*
fileName
,
const
char
*
name
)
{
forall
(
&
OutputGenerator
::
endTitleHead
,
fileName
,
name
);
}
void
startTitle
()
{
forall
(
&
OutputGenerator
::
startTitle
);
}
void
endTitle
()
...
...
@@ -96,10 +96,10 @@ class OutputList
{
forall
(
&
OutputGenerator
::
startEnumList
);
}
void
endEnumList
()
{
forall
(
&
OutputGenerator
::
endEnumList
);
}
void
startAl
f
abeticalIndexList
()
{
forall
(
&
OutputGenerator
::
startAl
f
abeticalIndexList
);
}
void
endAl
f
abeticalIndexList
()
{
forall
(
&
OutputGenerator
::
endAl
f
abeticalIndexList
);
}
void
startAl
ph
abeticalIndexList
()
{
forall
(
&
OutputGenerator
::
startAl
ph
abeticalIndexList
);
}
void
endAl
ph
abeticalIndexList
()
{
forall
(
&
OutputGenerator
::
endAl
ph
abeticalIndexList
);
}
void
writeIndexHeading
(
const
char
*
s
)
{
forall
(
&
OutputGenerator
::
writeIndexHeading
,
s
);
}
void
writeIndexItem
(
const
char
*
ref
,
const
char
*
file
,
const
char
*
text
)
...
...
@@ -177,16 +177,20 @@ class OutputList
{
forall
(
&
OutputGenerator
::
endEmphasis
);
}
void
writeChar
(
char
c
)
{
forall
(
&
OutputGenerator
::
writeChar
,
c
);
}
void
startMemberDoc
(
const
char
*
clName
,
const
char
*
memName
,
const
char
*
anchor
)
{
forall
(
&
OutputGenerator
::
startMemberDoc
,
clName
,
memName
,
anchor
);
}
void
startMemberDoc
(
const
char
*
clName
,
const
char
*
memName
,
const
char
*
anchor
,
const
char
*
title
)
{
forall
(
&
OutputGenerator
::
startMemberDoc
,
clName
,
memName
,
anchor
,
title
);
}
void
endMemberDoc
()
{
forall
(
&
OutputGenerator
::
endMemberDoc
);
}
void
writeDoxyAnchor
(
const
char
*
clName
,
const
char
*
anchor
,
const
char
*
name
)
{
forall
(
&
OutputGenerator
::
writeDoxyAnchor
,
clName
,
anchor
,
name
);
}
void
startDoxyAnchor
(
const
char
*
fn
,
const
char
*
cn
,
const
char
*
anchor
,
const
char
*
name
)
{
forall
(
&
OutputGenerator
::
startDoxyAnchor
,
fn
,
cn
,
anchor
,
name
);
}
void
endDoxyAnchor
()
{
forall
(
&
OutputGenerator
::
endDoxyAnchor
);
}
void
writeLatexSpacing
()
{
forall
(
&
OutputGenerator
::
writeLatexSpacing
);
}
void
writeLatexLabel
(
const
char
*
scope
,
const
char
*
anchor
)
{
forall
(
&
OutputGenerator
::
writeLatexLabel
,
scope
,
anchor
);
}
//
void writeLatexLabel(const char *scope,const char *anchor)
//
{ forall(&OutputGenerator::writeLatexLabel,scope,anchor); }
void
startDescription
()
{
forall
(
&
OutputGenerator
::
startDescription
);
}
void
endDescription
()
...
...
@@ -289,8 +293,10 @@ class OutputList
{
forall
(
&
OutputGenerator
::
startColorFont
,
r
,
g
,
b
);
}
void
endColorFont
()
{
forall
(
&
OutputGenerator
::
endColorFont
);
}
void
writePageRef
(
const
char
*
c
,
const
char
*
a
)
{
forall
(
&
OutputGenerator
::
writePageRef
,
c
,
a
);
}
void
startPageRef
()
{
forall
(
&
OutputGenerator
::
startPageRef
);
}
void
endPageRef
(
const
char
*
c
,
const
char
*
a
)
{
forall
(
&
OutputGenerator
::
endPageRef
,
c
,
a
);
}
void
startQuickIndexItem
(
const
char
*
s
,
const
char
*
l
)
{
forall
(
&
OutputGenerator
::
startQuickIndexItem
,
s
,
l
);
}
void
endQuickIndexItem
()
...
...
@@ -299,6 +305,8 @@ class OutputList
{
forall
(
&
OutputGenerator
::
writeFormula
,
n
,
t
);
}
void
writeNonBreakableSpace
()
{
forall
(
&
OutputGenerator
::
writeNonBreakableSpace
);
}
void
writeImage
(
const
char
*
n
,
const
char
*
w
,
const
char
*
h
)
{
forall
(
&
OutputGenerator
::
writeImage
,
n
,
w
,
h
);
}
private
:
void
debug
();
...
...
@@ -307,13 +315,15 @@ class OutputList
void
forall
(
void
(
OutputGenerator
::*
func
)());
FORALLPROTO1
(
const
char
*
);
FORALLPROTO1
(
char
);
FORALLPROTO1
(
IndexSections
);
FORALLPROTO1
(
int
);
#if defined(HAS_BOOL_TYPE)
FORALLPROTO1
(
bool
);
FORALLPROTO1
(
IndexSections
);
FORALLPROTO2
(
const
char
*
,
const
char
*
);
FORALLPROTO2
(
int
,
bool
);
FORALLPROTO2
(
bool
,
int
);
FORALLPROTO2
(
bool
,
bool
);
#endif
FORALLPROTO2
(
int
,
bool
);
FORALLPROTO2
(
const
char
*
,
const
char
*
);
FORALLPROTO3
(
const
char
*
,
const
char
*
,
bool
);
FORALLPROTO3
(
uchar
,
uchar
,
uchar
);
FORALLPROTO3
(
const
char
*
,
const
char
*
,
const
char
*
);
...
...
src/pre.l
View file @
d4bdeb54
...
...
@@ -1155,7 +1155,7 @@ BN [ \t\r\n]
ifcount++;
//printf("#if... depth=%d\n",ifcount);
}
<SkipCommand>"else"
/[^a-z_A-Z0-9]
{
<SkipCommand>"else"
{
//printf("Else! ifcount=%d otherCaseDone=%d\n",ifcount,otherCaseDone());
if (ifcount==0 && !otherCaseDone())
{
...
...
@@ -1179,7 +1179,7 @@ BN [ \t\r\n]
}
}
}
<SkipCommand>"endif"
/[^a-z_A-Z0-9]
{
<SkipCommand>"endif"
{
decrLevel();
if (--ifcount<0)
{
...
...
src/scanner.l
View file @
d4bdeb54
...
...
@@ -115,6 +115,7 @@ static int includeFileLength = 0;
static bool firstLine;
static bool isTypedef;
static bool inParamBlock;
static bool inRetValBlock;
static bool inExceptionBlock;
static bool inSeeBlock;
static bool inReturnBlock;
...
...
@@ -149,6 +150,7 @@ static QCString *copyArgString;
static ArgumentList *currentArgumentList;
static QCString *currentTemplateSpec;
static QCString curImageName;
//-----------------------------------------------------------------------------
...
...
@@ -186,6 +188,7 @@ static void initParser()
firstLine = TRUE;
isTypedef = FALSE;
inParamBlock = FALSE;
inRetValBlock = FALSE;
inExceptionBlock = FALSE;
inSeeBlock = FALSE;
inReturnBlock = FALSE;
...
...
@@ -534,7 +537,7 @@ static void newDocState();
static bool inBlock()
{
return inParamBlock || inSeeBlock || inReturnBlock || inAuthorBlock ||
return inParamBlock || in
RetValBlock || in
SeeBlock || inReturnBlock || inAuthorBlock ||
inVersionBlock || inDateBlock || inWarningBlock || inBugBlock ||
inParBlock || inExceptionBlock;
}
...
...
@@ -542,7 +545,7 @@ static bool inBlock()
static void endBlock()
{
outDoc->endDescList();
inParamBlock=inSeeBlock=inReturnBlock=inAuthorBlock=
inParamBlock=in
RetValBlock=in
SeeBlock=inReturnBlock=inAuthorBlock=
inVersionBlock=inDateBlock=inBugBlock=inWarningBlock=
inParBlock=inExceptionBlock=FALSE;
}
...
...
@@ -692,6 +695,7 @@ VAR [vV][aA][rR]
%x ClassName
%x ClassVar
%x Bases
%x BasesProt
%x NextSemi
%x FindMembers
%x FindMemberName
...
...
@@ -803,6 +807,10 @@ VAR [vV][aA][rR]
%x DocRefArgStart
%x DocRefItem
%x DocRefItemName
%x DocImage
%x DocHtmlImageName
%x DocLatexImageName
%x DocLatexImageWidth
%x SectionLabel
%x SectionTitle
%x SkipTemplate
...
...
@@ -1031,7 +1039,7 @@ VAR [vV][aA][rR]
outDoc->writeDescItem();
}
}
<DocScan>("\\"|"@")"bug"{BN}+ {
<DocScan>("\\"|"@")"bug"
[s]?
{BN}+ {
endArgumentList();
if (!inBugBlock)
{
...
...
@@ -1107,7 +1115,7 @@ VAR [vV][aA][rR]
outDoc->docify(", ");
}
}
<DocScan>("\\"|"@")
"return"
{BN}+ {
<DocScan>("\\"|"@")
("return"([s])?|"result")
{BN}+ {
endArgumentList();
if (!inReturnBlock)
{
...
...
@@ -1150,7 +1158,6 @@ VAR [vV][aA][rR]
if (inBlock()) endBlock();
inParamBlock=TRUE;
outDoc->startDescList();
//outDoc->writeBoldString("Parameters: ");
outDoc->startBold();
scanString(theTranslator->trParameters()+": ");
outDoc->endBold();
...
...
@@ -1158,6 +1165,20 @@ VAR [vV][aA][rR]
}
BEGIN(DocParam);
}
<DocScan>("\\"|"@")"retval"{BN}+ {
endArgumentList();
if (!inRetValBlock)
{
if (inBlock()) endBlock();
inRetValBlock=TRUE;
outDoc->startDescList();
outDoc->startBold();
scanString(theTranslator->trReturnValues()+": ");
outDoc->endBold();
outDoc->endDescTitle();
}
BEGIN(DocParam);
}
<DocScan>("\\"|"@")"exception"{BN}+ {
endArgumentList();
if (!inExceptionBlock)
...
...
@@ -1174,7 +1195,7 @@ VAR [vV][aA][rR]
BEGIN(DocException);
}
<DocScan>"\\capt".*
<DocParam>
{SCOPENAME}
{
<DocParam>
[a-z_A-Z0-9:]+
{
outDoc->writeDescItem();
outDoc->startEmphasis();
outDoc->docify(yytext);
...
...
@@ -1290,6 +1311,52 @@ VAR [vV][aA][rR]
}
BEGIN(DocScan);
}
<DocScan>("\\"|"@")"image"{B}+ {
BEGIN(DocImage);
}
<DocImage>[hH][tT][mM][lL] {
BEGIN(DocHtmlImageName);
}
<DocImage>[lL][aA][tT][eE][xX] {
BEGIN(DocLatexImageName);
}
<DocHtmlImageName>{FILE}|{URLMASK} {
outDoc->disableAllBut(OutputGenerator::Html);
outDoc->writeImage(yytext,0,0);
outDoc->enableAll();
BEGIN(DocScan);
}
<DocLatexImageName>{FILE} {
curImageName = yytext;
BEGIN(DocLatexImageWidth);
}
<DocLatexImageWidth>\n { // no width specified
outDoc->disableAllBut(OutputGenerator::Html);
outDoc->writeImage(curImageName,0,0);
outDoc->enableAll();
BEGIN(DocScan);
}
<DocLatexImageWidth>"width"{B}*"="{B}*[0-9\.]+({B}*{ID})? {
outDoc->disableAllBut(OutputGenerator::Latex);
outDoc->writeImage(curImageName,yytext,0);
outDoc->enableAll();
BEGIN(DocScan);
}
<DocLatexImageWidth>"height"{B}*"="{B}*[0-9\.]+({B}*{ID})? {
outDoc->disableAllBut(OutputGenerator::Latex);
outDoc->writeImage(curImageName,0,yytext);
outDoc->enableAll();
BEGIN(DocScan);
}
<DocImage>[a-z_A-Z0-9\.\-]+ {
warn("Warning: %s is an unsupported output format for \\image\n",yytext);
}
<DocImage,DocHtmlImageName,DocLatexImageName>\n {
warn("Warning: invalid \\image command found!\n");
yyLineNr++;
outDoc->enableAll();
BEGIN(DocScan);
}
<DocScan>("\\"|"@")"code"/{BN}+ {
outDoc->startCodeFragment();
codeBlock.resize(0);
...
...
@@ -1697,9 +1764,6 @@ VAR [vV][aA][rR]
current->argList->clear();
lineCount() ;
}
/*
<FindMembers>"inline"
*/
<FindMembers>{BN}+ {
lineCount();
}
...
...
@@ -1715,7 +1779,9 @@ VAR [vV][aA][rR]
current->virt = Virtual;
lineCount();
}
<FindMembers>{B}*"inline"{BN}+ { lineCount(); }
<FindMembers>{B}*"inline"{BN}+ { current->inLine = TRUE;
lineCount();
}
<FindMembers>{B}*"typename"{BN}+ { lineCount(); }
<FindMembers>{B}*"namespace"{BN}+ {
isTypedef=FALSE;
...
...
@@ -2177,7 +2243,8 @@ VAR [vV][aA][rR]
else
{
QCString &cn = current->name;
QCString rn = stripAnnonymousScope(current_root->name);
//QCString rn = stripAnnonymousScope(current_root->name);
QCString rn = current_root->name.copy();
//printf("cn=`%s' rn=`%s'\n",cn.data(),rn.data());
if (!cn.isEmpty() && !rn.isEmpty() &&
(current_root->section & Entry::SCOPE_MASK))
...
...
@@ -2202,8 +2269,10 @@ VAR [vV][aA][rR]
//printf("adding `%s' `%s' `%s' brief=%s\n",current->type.data(),current->name.data(),current->args.data(),current->brief.data());
current_root->addSubEntry( current ) ;
current = new Entry(*current);
if (current->section == Entry::NAMESPACE_SEC)
{ // a namespace ends with a closing bracket
if (current->section==Entry::NAMESPACE_SEC ||
current->section==Entry::INTERFACE_SEC
)
{ // namespaces and interfaces ends with a closing bracket without semicolon
current->reset();
current->protection = protection ;
current->sig = sig;
...
...
@@ -2254,7 +2323,33 @@ VAR [vV][aA][rR]
msType = yytext; msType=msType.left(i);
}
<MemberSpec>[,;] {
if (msName.length()>0)
if (msName.isEmpty() && !current->name.isEmpty())
/* && (current->section & Entry::COMPOUND_MASK)) */
{
// see if the compound does not have a name or is inside another
// annonymous compound. If so we insert a
// special `annonymous' variable.
Entry *p=current_root;
while (p)
{
// only look for class scopes, not namespace scopes
if (p->section & Entry::COMPOUND_MASK)
{
//printf("Trying scope `%s'\n",p->name.data());
int i=p->name.findRev("::");
int pi = (i==-1) ? 0 : i+2;
if (p->name.at(pi)=='@')
{
// annonymous compound inside -> insert dummy variable name
//printf("Adding annonymous variable for scope %s\n",p->name.data());
msName.sprintf("@%d",anonCount++);
break;
}
}
p=p->parent;
}
}
if (!msName.isEmpty())
{
Entry *varEntry=new Entry;
varEntry->protection = current->protection ;
...
...
@@ -2518,6 +2613,11 @@ VAR [vV][aA][rR]
lineCount() ;
BEGIN( ExcpRound ) ;
}
<FuncQual>{BN}*"raises"{BN}*"(" {
current->exception = " raises(" ;
lineCount() ;
BEGIN( ExcpRound ) ;
}
<ExcpRound>"(" { current->exception += *yytext ;
++bracketCount ;
}
...
...
@@ -2588,7 +2688,8 @@ VAR [vV][aA][rR]
{
//printf("Scanner.l: prototype? type=`%s' name=`%s' args=`%s'\n",current->type.data(),current->name.data(),current->args.data());
QRegExp re("([^)]*)");
if (!current->type.isNull() && current->type.find(re,0)!=-1)
if (!current->type.isNull() &&
(current->type.find(re,0)!=-1 || current->type.left(8)=="typedef "))
{
//printf("Scanner.l: found function variable!\n");
current->section = Entry::VARIABLE_SEC;
...
...
@@ -2600,9 +2701,8 @@ VAR [vV][aA][rR]
current->proto = TRUE;
}
}
//printf("Adding entry `%s' groupId=%d groupHeader=`%s'\n",
// current->name.data(),current->mGrpId,current->mGrpId!=-1 ?
// memberGroupDict[current->mGrpId]->header().data() : "");
//printf("Adding entry `%s' inLine`%d'\n",
// current->name.data(),current->inLine);
previous = current;
current_root->addSubEntry(current);
current = new Entry ;
...
...
@@ -2615,6 +2715,8 @@ VAR [vV][aA][rR]
lastCurlyContext = FindMembers;
if( *yytext == '{' )
{
if (current_root->section & Entry::COMPOUND_MASK)
previous->inLine = TRUE;
addToBody(yytext);
BEGIN( SkipCurly ) ;
}
...
...
@@ -2779,7 +2881,7 @@ VAR [vV][aA][rR]
baseProt=Private;
baseVirt=Normal;
baseName.resize(0);
BEGIN( Bases ) ;
BEGIN( Bases
Prot
) ;
}
<ClassVar>[;=*&] {
unput(*yytext);
...
...
@@ -2792,17 +2894,25 @@ VAR [vV][aA][rR]
current->name.sprintf("@%d",anonCount++);
BEGIN( Curly ) ;
}
<Bases>"virtual" { baseVirt = Virtual; }
<Bases>"public" { baseProt = Public; }
<Bases>"protected" { baseProt = Protected; }
<Bases>"private" { baseProt = Private; }
<Bases>({ID}{BN}*"::"{BN}*)*{ID} {
<BasesProt>"virtual" { baseVirt = Virtual; }
<BasesProt>"public" { baseProt = Public; }
<BasesProt>"protected" { baseProt = Protected; }
<BasesProt>"private" { baseProt = Private; }
<BasesProt>{BN} {}
<BasesProt>. { unput(*yytext); BEGIN(Bases); }
<Bases>("::")*{BN}*({ID}{BN}*"::"{BN}*)*{ID} {
//current->extends->append(
// new BaseInfo(yytext,baseProt,baseVirt)
//) ;
baseName += yytext;
current->args += ' ' ;
current->args += yytext ;
if (*yytext != ':')
baseName += yytext;
else
baseName += (yytext+2);
current->args += ' ';
if (*yytext != ':')
current->args += yytext;
else
current->args += (yytext+2);
}
<ClassVar>"<" { current->name += *yytext;
sharpCount=1;
...
...
@@ -2845,6 +2955,7 @@ VAR [vV][aA][rR]
baseProt=Private;
baseVirt=Normal;
baseName.resize(0);
BEGIN(BasesProt);
}
<Bases>{B}*"{"{B}* { current->fileName = yyFileName ;
current->startLine = yyLineNr ;
...
...
@@ -2940,6 +3051,10 @@ VAR [vV][aA][rR]
lastBriefContext=Doc;
BEGIN( ClassDocBrief );
}
<JavaDoc>"\\brief"{B}+ {
lastBriefContext=tmpDocType;
BEGIN( ClassDocBrief );
}
<JavaDoc>^(({B}*"*"+)?){BL} {
lineCount();
if (!current->brief.stripWhiteSpace().isEmpty())
...
...
@@ -3061,6 +3176,12 @@ VAR [vV][aA][rR]
current->startLine = yyLineNr;
BEGIN( PageDocArg1 );
}
<Doc,JavaDoc>{B}*("\\"|"@")"mainpage"{B}* {
current->section = Entry::MAINPAGEDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( PageDocArg2 );
}
<Doc,JavaDoc>{B}*("\\"|"@")"file"{B}* {
current->section = Entry::FILEDOC_SEC;
current->fileName = yyFileName;
...
...
@@ -3150,8 +3271,6 @@ VAR [vV][aA][rR]
newDocState();
}
<FileDocArg1>"\n" {
//warn("Warning: missing argument after "
// "\\file at line %d of %s.\n",yyLineNr,yyFileName);
current->name = yyFileName;
yyLineNr++;
newDocState();
...
...
@@ -3430,17 +3549,18 @@ VAR [vV][aA][rR]
current->brief=current->brief.stripWhiteSpace();
BEGIN( lastBriefContext );
}
<ClassDocBrief>{BS}/("\\"|"@")"image" { BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\"|"@")"author" { BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\"|"@")"internal" { BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\"|"@")"version" { BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/
"\\date"
{ BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/
("\\"|"@")"date"
{ BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\"|"@")"param" { BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\"|"@")"exception" { BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\"|"@")"return" { BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\sa"|"@see") { BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\"|"@")"bug" { BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\"|"@")"warning"
{ BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\"|"@")"par"{BN}+
{ BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\"|"@")"warning" { BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\"|"@")"par"{BN}+
{ BEGIN( lastBriefContext ); }
<ClassDocBrief>{BS}/("\\brief"|"@short"){BN}+ {
lastBriefContext=YY_START;
BEGIN( ClassDocBrief );
...
...
@@ -3529,6 +3649,7 @@ VAR [vV][aA][rR]
current->name = current->name.stripWhiteSpace();
newDocState();
}
<Doc>[a-z_A-Z0-9]+ { current->doc += yytext; }
<Doc>. { current->doc += *yytext; }
<DefLineDoc,LineDoc>. { current->brief += *yytext; }
<Doc>\n { yyLineNr++; current->doc += *yytext; }
...
...
@@ -3564,6 +3685,12 @@ VAR [vV][aA][rR]
BEGIN(lastAfterDocContext);
}
<AfterDocBrief>"."/{BN} { BEGIN(AfterDoc); }
<LineDoc,AfterDocBrief,AfterDocLine>("\\"|"@")"internal" {
current->brief+="\\internal";
}
<Doc,AfterDoc>("\\"|"@")"internal" {
current->doc+="\\internal";
}
<AfterDoc>("\\"|"@")"brief" { BEGIN(AfterDocBrief); }
<AfterDoc>"/*"|"//" { current->doc+=yytext; }
<AfterDoc>^{B}*"*"+/[^/]
...
...
src/section.h
View file @
d4bdeb54
...
...
@@ -44,6 +44,7 @@ class SectionDict : public QDict<SectionInfo>
{
public
:
SectionDict
(
int
size
)
:
QDict
<
SectionInfo
>
(
size
)
{}
~
SectionDict
()
{}
};
#endif
src/tag.l
View file @
d4bdeb54
...
...
@@ -63,7 +63,7 @@ static void addClass(const char *name,const char *fileName)
static void addFile(const char *name)
{
//printf("adding file %s
\n",name
);
//printf("adding file %s
tagName=`%s'\n",name,tagName.data()
);
fd = new FileDef(0,name,tagName);
FileName *mn;
if ((mn=inputNameDict[name]))
...
...
src/translator.h
View file @
d4bdeb54
...
...
@@ -687,7 +687,7 @@ class Translator
case
ClassDef
:
:
Union
:
result
+=
"union"
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"interface"
;
break
;
}
result
+=
"was generated from the following file"
;
result
+=
"
was generated from the following file"
;
if
(
single
)
result
+=
":"
;
else
result
+=
"s:"
;
return
result
;
}
...
...
@@ -696,9 +696,26 @@ class Translator
* list.
*/
virtual
QCString
trAlphabeticalList
()
{
return
"Alphabetical List"
;
}
{
return
"Alphabetical List"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
virtual
QCString
trReturnValues
()
{
return
"Return values"
;
}
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual
QCString
trMainPage
()
{
return
"Main Page"
;
}
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual
QCString
trPageAbbreviation
()
{
return
"p."
;
}
};
...
...
src/translator_es.h
View file @
d4bdeb54
...
...
@@ -16,7 +16,7 @@
/**
* translator_es.h modifie
f
by Francisco Oltra
* translator_es.h modifie
d
by Francisco Oltra
* Some notes:
* - Computer related use of the spanish language differs from
* country to country, so some words might not sound so good
...
...
src/translator_fr.h
View file @
d4bdeb54
...
...
@@ -24,89 +24,138 @@
class
TranslatorFrench
:
public
Translator
{
public
:
/*! returns the name of the package that is included by LaTeX */
QCString
latexBabelPackage
()
{
return
"french"
;
}
QCString
trInherits
()
{
return
"Hérite de"
;
}
QCString
trAnd
()
{
return
"et"
;
}
QCString
trInheritedBy
()
{
return
"Dérivée par"
;
}
/*! used in the compound documentation before a list of related functions. */
QCString
trRelatedFunctions
()
{
return
"Fonctions associées"
;
}
/*! subscript for the related functions. */
QCString
trRelatedSubscript
()
{
return
"(Noter que ces fonctions ne sont pas des méthodes de la classe)"
;
}
/*! header that is put before the detailed description of files, classes and namespaces. */
QCString
trDetailedDescription
()
{
return
"Description détaillée"
;
}
/*! header that is put before the list of typedefs. */
QCString
trMemberTypedefDocumentation
()
{
return
"Documentation des types imbriqués"
;
}
/*! header that is put before the list of enumerations. */
QCString
trMemberEnumerationDocumentation
()
{
return
"Documentation des énumérations imbriqués"
;
}
/*! header that is put before the list of member functions. */
QCString
trMemberFunctionDocumentation
()
{
return
"Documentation des méthodes"
;
}
/*! header that is put before the list of member attributes. */
QCString
trMemberDataDocumentation
()
{
return
"Documentation des données imbriqués"
;
}
QCString
trGeneratedFrom
(
const
char
*
s
,
bool
single
)
{
QCString
result
=
(
QCString
)
"La documentation pour cette"
+
s
+
" a été générée à partir "
;
if
(
single
)
result
+=
"du fichier suivant:"
;
else
result
+=
"des fichiers suivants:"
;
return
result
;
}
/*! this is the text of a link put after brief descriptions. */
QCString
trMore
()
{
return
"Plus de détails..."
;
}
QCString
trReference
()
{
return
"Référence"
;
}
/*! put in the class documentation */
QCString
trListOfAllMembers
()
{
return
"Liste de tous les membres"
;
}
/*! used as the title of the "list of all members" page of a class */
QCString
trMemberList
()
{
return
"Liste des membres"
;
}
/*! this is the first part of a sentence that is followed by a class name */
QCString
trThisIsTheListOfAllMembers
()
{
return
"Ceci est la liste complète des membres de"
;
}
/*! this is the remainder of the sentence after the class name */
QCString
trIncludingInheritedMembers
()
{
return
"y compris des membres des classes héritées."
;
}
/*! this is put at the author sections at the bottom of man pages.
* parameter s is name of the project name.
*/
QCString
trGeneratedAutomatically
(
const
char
*
s
)
{
QCString
result
=
"Généré automatiquement par Doxygen"
;
if
(
s
)
result
+=
(
QCString
)
" pour "
+
s
;
result
+=
" à partir du code source."
;
return
result
;
}
/*! put after an enum name in the list of all members */
QCString
trEnumName
()
{
return
"énumération"
;
}
/*! put after an enum value in the list of all members */
QCString
trEnumValue
()
{
return
"élément d'une énumération"
;
}
/*! put after an undocumented member in the list of all members */
QCString
trDefinedIn
()
{
return
"défini dans"
;
}
/*! put as in introduction in the verbatim header file of a class.
* parameter f is the name of the include file.
*/
QCString
trIncludeFile
()
{
return
"Fichier inclu"
;
}
QCString
trVerbatimText
(
const
char
*
f
)
{
return
(
QCString
)
"Ce texte provient du fichier inclu "
+
f
+
"."
;
}
// quick reference sections
/*! This is put above each page as a link to the list of all groups of
* compounds or files (see the \group command).
*/
QCString
trModules
()
{
return
"Modules"
;
}
/*! This is put above each page as a link to the class hierarchy */
QCString
trClassHierarchy
()
{
return
"Hiérarchie des classes"
;
}
/*! This is put above each page as a link to the list of annotated classes */
QCString
trCompoundList
()
{
return
"Liste des composants"
;
}
{
return
"Liste des composants"
;
/*! This is put above each page as a link to the list of documented files */
}
QCString
trFileList
()
{
return
"Liste des fichiers"
;
}
/*! This is put above each page as a link to the list of all verbatim headers */
QCString
trHeaderFiles
()
{
return
"Fichiers d'entête"
;
}
/*! This is put above each page as a link to all members of compounds. */
QCString
trCompoundMembers
()
{
return
"Composants"
;
}
/*! This is put above each page as a link to all members of files. */
QCString
trFileMembers
()
{
return
"Déclarations"
;
}
/*! This is put above each page as a link to all related pages. */
QCString
trRelatedPages
()
{
return
"Pages associées"
;
}
/*! This is put above each page as a link to all examples. */
QCString
trExamples
()
{
return
"Exemples"
;
}
/*! This is put above each page as a link to the search engine. */
QCString
trSearch
()
{
return
"Recherche"
;
}
/*! This is an introduction to the class hierarchy. */
QCString
trClassHierarchyDescription
()
{
return
"Cette liste d'héritage est, autant que possible, "
"classée par ordre alphabétique"
;
}
/*! This is an introduction to the list with all files. */
QCString
trFileListDescription
(
bool
extractAll
)
{
QCString
result
=
"Liste de tous les fichiers "
;
...
...
@@ -114,10 +163,14 @@ class TranslatorFrench : public Translator
result
+=
"avec une brève description :"
;
return
result
;
}
/*! This is an introduction to the annotated compound list. */
QCString
trCompoundListDescription
()
{
return
"Liste des classes, des strutures et des unions "
"avec une brève description :"
;
}
/*! This is an introduction to the page with all class members. */
QCString
trCompoundMembersDescription
(
bool
extractAll
)
{
QCString
result
=
"Liste de tous les membres de classe "
;
...
...
@@ -127,6 +180,8 @@ class TranslatorFrench : public Translator
else
result
+=
"les classes auxquelles ils appartiennent :"
;
return
result
;
}
/*! This is an introduction to the page with all file members. */
QCString
trFileMembersDescription
(
bool
extractAll
)
{
QCString
result
=
"Liste de toutes les déclarations"
;
...
...
@@ -137,79 +192,198 @@ class TranslatorFrench : public Translator
else
result
+=
"les fichiers dans lesquels elles sont définies :"
;
return
result
;
}
/*! This is an introduction to the page with the list of all header files. */
QCString
trHeaderFilesDescription
()
{
return
"Liste de tous les fichiers d'entête constituant "
"l'interface de programmation :"
;
}
/*! This is an introduction to the page with the list of all examples */
QCString
trExamplesDescription
()
{
return
"Liste de tous les exemples :"
;
}
/*! This is an introduction to the page with the list of related pages */
QCString
trRelatedPagesDescription
()
{
return
"Liste de toutes les pages de documentation associées :"
;
}
/*! This is an introduction to the page with the list of class/file groups */
QCString
trModulesDescription
()
{
return
"Liste de tous les modules"
;
}
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
*/
QCString
trNoDescriptionAvailable
()
{
return
"Aucune description n'est disponible"
;
}
// index titles (the project name is prepended for these)
/*! This is used in HTML as the title of index.html. */
QCString
trDocumentation
()
{
return
"Documentation"
;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all groups.
*/
QCString
trModuleIndex
()
{
return
"Index des modules"
;
}
/*! This is used in LaTeX as the title of the chapter with the
* class hierarchy.
*/
QCString
trHierarchicalIndex
()
{
return
"Index hiérarchique"
;
}
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index.
*/
QCString
trCompoundIndex
()
{
return
"Index des composants"
;
}
/*! This is used in LaTeX as the title of the chapter with the
* list of all files.
*/
QCString
trFileIndex
()
{
return
"Index des fichiers"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
*/
QCString
trModuleDocumentation
()
{
return
"Documentation du module"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all classes, structs and unions.
*/
QCString
trClassDocumentation
()
{
return
"Documentation de la classe"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all files.
*/
QCString
trFileDocumentation
()
{
return
"Documentation du fichier"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
*/
QCString
trExampleDocumentation
()
{
return
"Documentation de l'exemple"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages.
*/
QCString
trPageDocumentation
()
{
return
"Documentation de la page"
;
}
/*! This is used in LaTeX as the title of the document */
QCString
trReferenceManual
()
{
return
"Manuel de référence"
;
}
/*! This is used in the documentation of a file as a header before the
* list of defines
*/
QCString
trDefines
()
{
return
"Définitions des macros"
;
}
/*! This is used in the documentation of a file as a header before the
* list of function prototypes
*/
QCString
trFuncProtos
()
{
return
"Prototypes des fonctions"
;
}
/*! This is used in the documentation of a file as a header before the
* list of typedefs
*/
QCString
trTypedefs
()
{
return
"Définitions des types"
;
}
/*! This is used in the documentation of a file as a header before the
* list of enumerations
*/
QCString
trEnumerations
()
{
return
"Enumérations"
;
}
/*! This is used in the documentation of a file as a header before the
* list of (global) functions
*/
QCString
trFunctions
()
{
return
"Fonctions"
;
}
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
QCString
trVariables
()
{
return
"Variables"
;
}
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
QCString
trEnumerationValues
()
{
return
"Eléments énumérés"
;
}
QCString
trReimplementedFrom
()
{
return
"Redéfini à partir de"
;
}
QCString
trReimplementedIn
()
{
return
"Redéfini dans"
;
}
/*! This is used in man pages as the author section. */
QCString
trAuthor
()
{
return
"Auteur"
;
}
/*! This is used in the documentation of a file before the list of
* documentation blocks for defines
*/
QCString
trDefineDocumentation
()
{
return
"Documentation de la macro"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes
*/
QCString
trFunctionPrototypeDocumentation
()
{
return
"Documentation du prototype de la fonction"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for typedefs
*/
QCString
trTypedefDocumentation
()
{
return
"Documentation du type"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
*/
QCString
trEnumerationTypeDocumentation
()
{
return
"Documentation du type de l'énumeration"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
QCString
trEnumerationValueDocumentation
()
{
return
"Documentation de l'élément de l'énumeration"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions
*/
QCString
trFunctionDocumentation
()
{
return
"Documentation de la fonction"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables
*/
QCString
trVariableDocumentation
()
{
return
"Documentation de la variable"
;
}
/*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds
*/
QCString
trCompounds
()
{
return
"Composants"
;
}
/*! This is used in the documentation of a group before the list of
* links to documented files
*/
QCString
trFiles
()
{
return
"Fichiers"
;
}
/*! This is used in the standard footer of each page and indicates when
* the page was generated
*/
QCString
trGeneratedAt
(
const
char
*
date
,
const
char
*
projName
)
{
QCString
result
=
(
QCString
)
"Généré le "
+
date
;
...
...
@@ -217,47 +391,75 @@ class TranslatorFrench : public Translator
result
+=
(
QCString
)
" par "
;
return
result
;
}
/*! This is part of the sentence used in the standard footer of each page.
*/
QCString
trWrittenBy
()
{
return
"écrit par"
;
}
/*! this text is put before a class diagram */
QCString
trClassDiagram
(
const
char
*
clName
)
{
return
(
QCString
)
"Graphe d'héritage de la classe "
+
clName
;
}
/*! this text is generated when the \internal command is used. */
QCString
trForInternalUseOnly
()
{
return
"A usage interne uniquement."
;
}
/*! this text is generated when the \reimp command is used. */
QCString
trReimplementedForInternalReasons
()
{
return
"Redéfini pour des raisons internes; "
"l'interface n'est pas modifiée"
;
}
/*! this text is generated when the \warning command is used. */
QCString
trWarning
()
{
return
"Avertissement"
;
}
/*! this text is generated when the \bug command is used. */
QCString
trBugsAndLimitations
()
{
return
"Bogues et limitations"
;
}
/*! this text is generated when the \version command is used. */
QCString
trVersion
()
{
return
"Version"
;
}
/*! this text is generated when the \date command is used. */
QCString
trDate
()
{
return
"Date"
;
}
/*! this text is generated when the \author command is used. */
QCString
trAuthors
()
{
return
"Auteur(s)"
;
}
/*! this text is generated when the \return command is used. */
QCString
trReturns
()
{
return
"Renvoie"
;
}
/*! this text is generated when the \sa command is used. */
QCString
trSeeAlso
()
{
return
"Voir également"
;
}
/*! this text is generated when the \param command is used. */
QCString
trParameters
()
{
return
"Paramètres"
;
}
/*! this text is generated when the \exception command is used. */
QCString
trExceptions
()
{
return
"Exceptions"
;
}
/*! this text is used in the title page of a LaTeX document. */
QCString
trGeneratedBy
()
{
return
"Généré par"
;
}
// new since 0.49-990307
virtual
QCString
trNamespaces
()
{
return
"Namespaces"
;
}
virtual
QCString
trNamespaceList
()
{
return
"Liste des Namespaces"
;
}
/*! used as an introduction to the namespace list */
virtual
QCString
trNamespaceListDescription
(
bool
extractAll
)
{
QCString
result
=
"Liste de tous les namespaces "
;
...
...
@@ -265,13 +467,213 @@ class TranslatorFrench : public Translator
result
+=
"avec une brève description :"
;
return
result
;
}
/*! used in the class documentation as a header before the list of all
* friends of a class
*/
virtual
QCString
trFriends
()
{
return
"Friends"
;
}
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
/*! used in the class documentation as a header before the list of all
* related classes
*/
virtual
QCString
trRelatedFunctionDocumentation
()
{
return
"Documentation des fonctions amies et associées"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
/*! used as the title of the HTML page of a class/struct/union */
virtual
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
{
QCString
result
=
"Référence de "
;
switch
(
compType
)
{
case
ClassDef
:
:
Class
:
result
+=
"la classe "
;
break
;
case
ClassDef
:
:
Struct
:
result
+=
"la structure "
;
break
;
case
ClassDef
:
:
Union
:
result
+=
"l'union "
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"l'interface "
;
break
;
}
result
+=
(
QCString
)
clName
;
return
result
;
}
/*! used as the title of the HTML page of a file */
virtual
QCString
trFileReference
(
const
char
*
fileName
)
{
QCString
result
=
"Référence du fichier "
;
result
+=
fileName
;
return
result
;
}
/*! used as the title of the HTML page of a namespace */
virtual
QCString
trNamespaceReference
(
const
char
*
namespaceName
)
{
QCString
result
=
"Référence du namespace "
;
result
+=
namespaceName
;
return
result
;
}
/*! \mgroup Class sections
* these are for the member sections of a class, struct or union
*/
virtual
QCString
trPublicMembers
()
{
return
"Membres publiques"
;
}
virtual
QCString
trPublicSlots
()
{
return
"Connecteurs publiques"
;
}
virtual
QCString
trSignals
()
{
return
"Signaux"
;
}
virtual
QCString
trStaticPublicMembers
()
{
return
"Membres publiques statiques"
;
}
virtual
QCString
trProtectedMembers
()
{
return
"Membres protégés"
;
}
virtual
QCString
trProtectedSlots
()
{
return
"Connecteurs protégés"
;
}
virtual
QCString
trStaticProtectedMembers
()
{
return
"Membres protégés statiques"
;
}
virtual
QCString
trPrivateMembers
()
{
return
"Membres privés"
;
}
virtual
QCString
trPrivateSlots
()
{
return
"Connecteurs privés"
;
}
virtual
QCString
trStaticPrivateMembers
()
{
return
"Membres privés statiques"
;
}
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items.
* use generateMarker(i) to indicate where item i should be put.
*/
virtual
QCString
trWriteList
(
int
numEntries
)
{
QCString
result
;
int
i
;
// the inherits list contain `numEntries' classes
for
(
i
=
0
;
i
<
numEntries
;
i
++
)
{
// use generateMarker to generate placeholders for the class links!
result
+=
generateMarker
(
i
);
// generate marker for entry i in the list
// (order is left to right)
if
(
i
!=
numEntries
-
1
)
// not the last entry, so we need a separator
{
if
(
i
<
numEntries
-
2
)
// not the fore last entry
result
+=
", "
;
else
// the fore last entry
result
+=
", and "
;
}
}
return
result
;
}
/*! used in class documentation to produce a list of base classes,
* if class diagrams are disabled.
*/
virtual
QCString
trInheritsList
(
int
numEntries
)
{
return
"Est dérivée de "
+
trWriteList
(
numEntries
)
+
"."
;
}
/*! used in class documentation to produce a list of super classes,
* if class diagrams are disabled.
*/
virtual
QCString
trInheritedByList
(
int
numEntries
)
{
return
"Dérivée par "
+
trWriteList
(
numEntries
)
+
"."
;
}
/*! used in member documentation blocks to produce a list of
* members that are hidden by this one.
*/
virtual
QCString
trReimplementedFromList
(
int
numEntries
)
{
return
"Redéfinie à partir de "
+
trWriteList
(
numEntries
)
+
"."
;
}
/*! used in member documentation blocks to produce a list of
* all member that overwrite the implementation of this member.
*/
virtual
QCString
trReimplementedInList
(
int
numEntries
)
{
return
"Redéfinie dans "
+
trWriteList
(
numEntries
)
+
"."
;
}
/*! This is put above each page as a link to all members of namespaces. */
virtual
QCString
trNamespaceMembers
()
{
return
"Menbres des namespaces"
;
}
/*! This is an introduction to the page with all namespace members */
virtual
QCString
trNamespaceMemberDescription
(
bool
extractAll
)
{
QCString
result
=
"Voici une list de tous les membres de namespace"
;
if
(
!
extractAll
)
result
+=
"documentés "
;
result
+=
" avec liens vers "
;
if
(
extractAll
)
result
+=
"les documentations des namespaces associés :"
;
else
result
+=
"les namespaces auxquels ils appartiennent :"
;
return
result
;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all namespaces.
*/
virtual
QCString
trNamespaceIndex
()
{
return
"Index des Namespaces"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all namespaces.
*/
virtual
QCString
trNamespaceDocumentation
()
{
return
"Documentation des Namespaces"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
//////////////////////////////////////////////////////////////////////////
/*! This is used in the documentation before the list of all
* namespaces in a file.
*/
virtual
QCString
trNamespaces
()
{
return
"Namespaces"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual
QCString
trGeneratedFromFiles
(
ClassDef
::
CompoundType
compType
,
bool
single
)
{
// here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString
result
=
(
QCString
)
"La documentation associée à cette "
;
switch
(
compType
)
{
case
ClassDef
:
:
Class
:
result
+=
"classe"
;
break
;
case
ClassDef
:
:
Struct
:
result
+=
"structure"
;
break
;
case
ClassDef
:
:
Union
:
result
+=
"union"
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"interface"
;
break
;
}
result
+=
" a été générée à partir "
;
if
(
single
)
result
+=
" du fichier suivant :"
;
else
result
+=
"des fichiers suivants :"
;
return
result
;
}
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual
QCString
trAlphabeticalList
()
{
return
"Liste par ordre alphabétique"
;
}
};
#endif
src/translator_it.h
View file @
d4bdeb54
...
...
@@ -6,6 +6,9 @@
*
* Initial Italian Translation by Ahmed Aldo Faisal
* Revised and completed by Alessandro Falappa (June 1999)
* Updates:
* 1999/09/10: corrected some small typos in the "new since 0.49-990425" section
* added the "new since 0.49-990728" section
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
...
...
@@ -293,15 +296,15 @@ class TranslatorItalian : public Translator
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
{
QCString
result
=
"Riferimenti per
la
"
;
QCString
result
=
"Riferimenti per "
;
switch
(
compType
)
{
case
ClassDef
:
:
Class
:
result
+=
"
classe
"
;
break
;
case
ClassDef
:
:
Struct
:
result
+=
"
struct
"
;
break
;
case
ClassDef
:
:
Union
:
result
+=
"
union
"
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"
interface
"
;
break
;
case
ClassDef
:
:
Class
:
result
+=
"
la classe
"
;
break
;
case
ClassDef
:
:
Struct
:
result
+=
"
la struct
"
;
break
;
case
ClassDef
:
:
Union
:
result
+=
"
la union
"
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"
l'interfaccia
"
;
break
;
}
result
+=
" "
+
(
QCString
)
clName
;
result
+=
(
QCString
)
clName
;
return
result
;
}
QCString
trFileReference
(
const
char
*
fileName
)
...
...
@@ -375,6 +378,40 @@ class TranslatorItalian : public Translator
{
return
"Indice dei namespaces"
;
}
QCString
trNamespaceDocumentation
()
{
return
"Documentazione dei namespaces"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual
QCString
trGeneratedFromFiles
(
ClassDef
::
CompoundType
compType
,
bool
single
)
{
// here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString
result
=
(
QCString
)
"La documentazione per questa "
;
switch
(
compType
)
{
case
ClassDef
:
:
Class
:
result
+=
"classe"
;
break
;
case
ClassDef
:
:
Struct
:
result
+=
"struct"
;
break
;
case
ClassDef
:
:
Union
:
result
+=
"union"
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"interfaccia"
;
break
;
}
result
+=
" stata generata a partire "
;
if
(
single
)
result
+=
"dal seguente file:"
;
else
result
+=
"dai seguenti files:"
;
return
result
;
}
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual
QCString
trAlphabeticalList
()
{
return
"Lista in ordine alfabetico"
;
}
};
#endif
src/translator_nl.h
View file @
d4bdeb54
...
...
@@ -384,6 +384,55 @@ class TranslatorDutch : public Translator
// This is used in LaTeX as the title of the chapter containing
// the documentation of all namespaces.
{
return
"Namespace Documentatie"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual
QCString
trGeneratedFromFiles
(
ClassDef
::
CompoundType
compType
,
bool
single
)
{
// here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString
result
=
(
QCString
)
"De documentatie voor deze "
;
switch
(
compType
)
{
case
ClassDef
:
:
Class
:
result
+=
"class"
;
break
;
case
ClassDef
:
:
Struct
:
result
+=
"struct"
;
break
;
case
ClassDef
:
:
Union
:
result
+=
"union"
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"interface"
;
break
;
}
result
+=
" is gegenereerd op grond van de volgende file"
;
if
(
single
)
result
+=
":"
;
else
result
+=
"s:"
;
return
result
;
}
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual
QCString
trAlphabeticalList
()
{
return
"Alphabetical List"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
virtual
QCString
trReturnValues
()
{
return
"Retour waarden"
;
}
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual
QCString
trMainPage
()
{
return
"Hoofd Pagina"
;
}
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual
QCString
trPageAbbreviation
()
{
return
"p."
;
}
};
#endif
src/translator_se.h
View file @
d4bdeb54
...
...
@@ -47,10 +47,15 @@ Uppdateringar.
===================================================================================
Problem!
Namespace och slot: har de
nn hygglig svensk versttning???
Slot:
nn hygglig svensk versttning???
Skicka grna synpunkter.
===================================================================================
1999/09/01
* Det verkar som om "namnrymd" r en hyggligt vedertagen svensk versttning
av "namnepace", s jag kr med det frn och med nu.
* "interface" heter numera "grnssnitt"
*/
#ifndef TRANSLATOR_SE_H
...
...
@@ -349,13 +354,13 @@ class TranslatorSwedish : public Translator
// new since 0.49-990307
virtual
QCString
trNamespaceList
()
{
return
"Nam
espace
lista"
;
}
{
return
"Nam
nrymd
lista"
;
}
virtual
QCString
trNamespaceListDescription
(
bool
extractAll
)
{
QCString
result
=
"Hr r en lista ver alla "
;
if
(
!
extractAll
)
result
+=
"dokumenterade "
;
result
+=
"nam
espaces
med en kort frklaring:"
;
result
+=
"nam
nrymder
med en kort frklaring:"
;
return
result
;
}
...
...
@@ -379,10 +384,10 @@ class TranslatorSwedish : public Translator
QCString
result
=
(
QCString
)
clName
+
" "
;
switch
(
compType
)
{
case
ClassDef
:
:
Class
:
result
+=
"
K
lass"
;
break
;
case
ClassDef
:
:
Struct
:
result
+=
"
S
trukt"
;
break
;
case
ClassDef
:
:
Union
:
result
+=
"
U
nion"
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"
Interface
"
;
break
;
case
ClassDef
:
:
Class
:
result
+=
"
k
lass"
;
break
;
case
ClassDef
:
:
Struct
:
result
+=
"
s
trukt"
;
break
;
case
ClassDef
:
:
Union
:
result
+=
"
u
nion"
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"
grnssnitt
"
;
break
;
}
result
+=
"referens"
;
return
result
;
...
...
@@ -398,7 +403,7 @@ class TranslatorSwedish : public Translator
virtual
QCString
trNamespaceReference
(
const
char
*
namespaceName
)
{
QCString
result
=
namespaceName
;
result
+=
" nam
espace
referens"
;
result
+=
" nam
nrymd
referens"
;
return
result
;
}
...
...
@@ -474,25 +479,65 @@ class TranslatorSwedish : public Translator
}
virtual
QCString
trNamespaceMembers
()
{
return
"Nam
espace
medlemmar"
;
}
{
return
"Nam
nrymds
medlemmar"
;
}
virtual
QCString
trNamespaceMemberDescription
(
bool
extractAll
)
{
QCString
result
=
"Hr r en lista ver alla "
;
if
(
!
extractAll
)
result
+=
"dokumenterade "
;
result
+=
"nam
espace
medlemmar med lnkar till "
;
result
+=
"nam
nrymds
medlemmar med lnkar till "
;
if
(
extractAll
)
result
+=
" nam
espace
-dokumentationen fr varje medlem:"
;
result
+=
" nam
nrymd
-dokumentationen fr varje medlem:"
;
else
result
+=
"de nam
espaces
de tillhr:"
;
result
+=
"de nam
nrymder
de tillhr:"
;
return
result
;
}
virtual
QCString
trNamespaceIndex
()
{
return
"Nam
espace
index"
;
}
{
return
"Nam
nrymds
index"
;
}
virtual
QCString
trNamespaceDocumentation
()
{
return
"Namnrymd-dokumentation"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
//////////////////////////////////////////////////////////////////////////
/*! This is used in the documentation before the list of all
* namespaces in a file.
*/
virtual
QCString
trNamespaces
()
{
return
"Namnrymder"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual
QCString
trGeneratedFromFiles
(
ClassDef
::
CompoundType
compType
,
bool
single
)
{
// here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString
result
=
(
QCString
)
"Dokumentationen fr "
;
switch
(
compType
)
{
case
ClassDef
:
:
Class
:
result
+=
"denna klass "
;
break
;
case
ClassDef
:
:
Struct
:
result
+=
"denna strukt "
;
break
;
case
ClassDef
:
:
Union
:
result
+=
"denna union "
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"detta grnssnitt "
;
break
;
}
result
+=
"var genererad frn fljande fil"
;
if
(
single
)
result
+=
":"
;
else
result
+=
"er:"
;
return
result
;
}
{
return
"Namespace-dokumentation"
;
}
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual
QCString
trAlphabeticalList
()
{
return
"Alfabetisk lista"
;
}
};
#endif
src/util.cpp
View file @
d4bdeb54
...
...
@@ -39,18 +39,52 @@ bool isId(char c)
return
c
==
'_'
||
isalnum
(
c
);
}
// strip annonymous part of the scope
QCString
stripAnnonymousScope
(
const
QCString
&
s
)
// strip annonymous left hand side part of the scope
//QCString stripAnnonymousScope(const QCString &s)
//{
// QCString result=s;
// int i=0;
// while (!result.isEmpty() && result.at(0)=='@' && (i=result.find("::"))!=-1)
// {
// result=result.right(result.length()-i-2);
// }
// //if (result.at(0)=='@')
// //{
// // result.resize(0);
// //}
// return result;
//}
// strip annonymous left hand side part of the scope
QCString
stripAnnonymousNamespaceScope
(
const
QCString
&
s
)
{
QCString
result
=
s
;
int
i
=
0
;
while
(
!
result
.
isEmpty
()
&&
result
.
at
(
0
)
==
'@'
&&
(
i
=
result
.
find
(
"::"
))
!=-
1
)
{
result
=
result
.
right
(
result
.
length
()
-
i
-
2
);
int
oi
=
0
,
i
=
0
,
p
=
0
;
if
(
s
.
isEmpty
())
return
s
;
while
(
s
.
at
(
p
)
==
'@'
&&
(
i
=
s
.
find
(
"::"
,
p
))
!=-
1
&&
namespaceDict
[
s
.
left
(
i
)]
!=
0
)
{
oi
=
i
;
p
=
i
+
2
;
}
if
(
oi
==
0
)
{
//printf("stripAnnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.data());
return
s
;
}
else
{
//printf("stripAnnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.right(s.length()-oi-2).data());
return
s
.
right
(
s
.
length
()
-
oi
-
2
);
}
return
result
;
}
void
writePageRef
(
OutputList
&
ol
,
const
char
*
cn
,
const
char
*
mn
)
{
bool
htmlOn
=
ol
.
isEnabled
(
OutputGenerator
::
Html
);
bool
manOn
=
ol
.
isEnabled
(
OutputGenerator
::
Man
);
ol
.
startPageRef
();
ol
.
disableAllBut
(
OutputGenerator
::
Latex
);
ol
.
docify
(
theTranslator
->
trPageAbbreviation
());
ol
.
endPageRef
(
cn
,
mn
);
if
(
htmlOn
)
ol
.
enable
(
OutputGenerator
::
Html
);
if
(
manOn
)
ol
.
enable
(
OutputGenerator
::
Man
);
}
QCString
generateMarker
(
int
id
)
{
...
...
@@ -159,8 +193,6 @@ QCString removeRedundantWhiteSpace(const QCString &s)
return
result
;
}
bool
rightScopeMatch
(
const
QCString
&
scope
,
const
QCString
&
name
)
{
return
(
name
==
scope
||
// equal
...
...
@@ -244,12 +276,14 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char *
}
}
while
(
!
found
&&
scopeOffset
>=
0
);
//if (!found) printf("Trying to link %s in %s\n",word.data(),scName);
if
(
!
found
&&
getDefs
(
scName
,
word
,
0
,
md
,
cd
,
fd
,
nd
)
&&
(
md
->
isTypedef
()
||
md
->
isEnumerate
()
)
&&
(
md
->
isTypedef
()
||
md
->
isEnumerate
()
||
md
->
isReference
())
&&
md
->
isLinkable
()
)
{
//printf("Found ref\n");
Definition
*
d
=
0
;
if
(
cd
)
d
=
cd
;
else
if
(
nd
)
d
=
nd
;
else
d
=
fd
;
if
(
d
&&
d
->
isLinkable
())
...
...
@@ -369,17 +403,17 @@ QCString tempArgListToString(ArgumentList *al)
static
bool
manIsEnabled
;
void
startTitle
(
OutputList
&
ol
)
void
startTitle
(
OutputList
&
ol
,
const
char
*
fileName
)
{
ol
.
startTitleHead
();
ol
.
startTitleHead
(
fileName
);
manIsEnabled
=
ol
.
isEnabled
(
OutputGenerator
::
Man
);
if
(
manIsEnabled
)
ol
.
disable
(
OutputGenerator
::
Man
);
}
void
endTitle
(
OutputList
&
ol
,
const
char
*
name
)
void
endTitle
(
OutputList
&
ol
,
const
char
*
fileName
,
const
char
*
name
)
{
if
(
manIsEnabled
)
ol
.
enable
(
OutputGenerator
::
Man
);
ol
.
endTitleHead
(
name
);
ol
.
endTitleHead
(
fileName
,
name
);
}
void
writeQuickLinks
(
OutputList
&
ol
,
bool
compact
,
bool
ext
)
...
...
@@ -391,6 +425,12 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext)
if
(
manEnabled
)
ol
.
disable
(
OutputGenerator
::
Man
);
if
(
texEnabled
)
ol
.
disable
(
OutputGenerator
::
Latex
);
if
(
compact
)
ol
.
startCenter
();
else
ol
.
startItemList
();
if
(
!
compact
)
ol
.
writeListItem
();
ol
.
startQuickIndexItem
(
extLink
,
absPath
+
"index.html"
);
parseText
(
ol
,
theTranslator
->
trMainPage
());
ol
.
endQuickIndexItem
();
if
(
documentedGroups
>
0
)
{
if
(
!
compact
)
ol
.
writeListItem
();
...
...
@@ -1428,15 +1468,19 @@ void generateRef(OutputList &ol,const char *scName,
{
ol
.
writeObjectLink
(
cd
->
getReference
(),
cd
->
getOutputFileBase
(),
0
,
linkText
);
if
(
!
cd
->
isReference
())
ol
.
writePageRef
(
cd
->
name
(),
0
);
if
(
!
cd
->
isReference
()
&&
!
Config
::
pdfHyperFlag
)
{
writePageRef
(
ol
,
cd
->
name
(),
0
);
}
}
else
// scope matches that of a namespace
{
ol
.
writeObjectLink
(
nd
->
getReference
(),
nd
->
getOutputFileBase
(),
0
,
linkText
);
if
(
!
nd
->
getReference
())
ol
.
writePageRef
(
nd
->
name
(),
0
);
if
(
!
nd
->
getReference
()
&&
!
Config
::
pdfHyperFlag
)
{
writePageRef
(
ol
,
nd
->
name
(),
0
);
}
}
// link has been written, stop now.
return
;
...
...
@@ -1532,15 +1576,15 @@ void generateRef(OutputList &ol,const char *scName,
}
// generate the page reference (for LaTeX)
if
(
cName
.
length
()
>
0
||
aName
.
length
()
>
0
)
if
(
!
Config
::
pdfHyperFlag
&&
(
cName
.
length
()
>
0
||
aName
.
length
()
>
0
)
)
{
if
(
(
cd
&&
cd
->
isLinkableInProject
())
||
(
fd
&&
!
fd
->
isReference
())
||
(
nd
/* TODO: && !nd->isReference() */
)
(
nd
&&
!
nd
->
isReference
())
)
{
ol
.
writePageRef
(
cName
,
aName
);
writePageRef
(
ol
,
cName
,
aName
);
}
}
return
;
...
...
src/util.h
View file @
d4bdeb54
...
...
@@ -72,8 +72,8 @@ extern int guessSection(const char *name);
//extern QCString nameToFile(const char *name);
extern
bool
isId
(
char
c
);
extern
QCString
removeRedundantWhiteSpace
(
const
QCString
&
s
);
extern
void
startTitle
(
OutputList
&
ol
);
extern
void
endTitle
(
OutputList
&
ol
,
const
char
*
name
);
extern
void
startTitle
(
OutputList
&
ol
,
const
char
*
fileName
);
extern
void
endTitle
(
OutputList
&
ol
,
const
char
*
fileName
,
const
char
*
name
);
void
startFile
(
OutputList
&
ol
,
const
char
*
name
,
const
char
*
title
,
bool
external
=
FALSE
);
void
endFile
(
OutputList
&
ol
,
bool
external
=
FALSE
);
...
...
@@ -84,6 +84,7 @@ QCString generateMarker(int id);
void
writeExample
(
OutputList
&
ol
,
ExampleList
*
el
);
void
setFileNameForSections
(
QList
<
QCString
>
*
anchorList
,
const
char
*
fileName
);
QCString
stripAnnonymousScope
(
const
QCString
&
s
);
QCString
stripAnnonymousNamespaceScope
(
const
QCString
&
s
);
//void writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd,
...
...
@@ -92,5 +93,6 @@ QCString stripAnnonymousScope(const QCString &s);
QCString
stripFromPath
(
const
QCString
&
path
);
bool
rightScopeMatch
(
const
QCString
&
scope
,
const
QCString
&
name
);
bool
leftScopeMatch
(
const
QCString
&
scope
,
const
QCString
&
name
);
void
writePageRef
(
OutputList
&
ol
,
const
char
*
cn
,
const
char
*
mn
);
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment