Commit 7295388a authored by dimitri's avatar dimitri

Release-1.2.0

parent 4c7970f6
DOXYGEN Version 1.1.5-20000716 DOXYGEN Version 1.2.0
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (16 July 2000) Dimitri van Heesch (23 July 2000)
DOXYGEN Version 1.1.5-20000716 DOXYGEN Version 1.2.0
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (16 July 2000) Dimitri van Heesch (23 July 2000)
1.1.5-20000716 1.2.0
...@@ -768,7 +768,7 @@ void init() ...@@ -768,7 +768,7 @@ void init()
"information to generate all constant output in the proper language. \n" "information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n" "The default language is English, other supported languages are: \n"
"Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n" "Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n"
"Spanish, Russian, Croatian and Polish.\n" "Spanish, Russian, Croatian, Polish, and Portuguese.\n"
); );
ConfigString::addFixedValue("outputLanguage","English"); ConfigString::addFixedValue("outputLanguage","English");
ConfigString::addFixedValue("outputLanguage","Dutch"); ConfigString::addFixedValue("outputLanguage","Dutch");
...@@ -783,6 +783,7 @@ void init() ...@@ -783,6 +783,7 @@ void init()
ConfigString::addFixedValue("outputLanguage","Russian"); ConfigString::addFixedValue("outputLanguage","Russian");
ConfigString::addFixedValue("outputLanguage","Croatian"); ConfigString::addFixedValue("outputLanguage","Croatian");
ConfigString::addFixedValue("outputLanguage","Polish"); ConfigString::addFixedValue("outputLanguage","Polish");
ConfigString::addFixedValue("outputLanguage","Portuguese");
ConfigBool::add( "noIndexFlag", ConfigBool::add( "noIndexFlag",
"DISABLE_INDEX", "DISABLE_INDEX",
"FALSE", "FALSE",
...@@ -1310,9 +1311,8 @@ void init() ...@@ -1310,9 +1311,8 @@ void init()
"TRUE", "TRUE",
"generate RTF flag", "generate RTF flag",
"If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n" "If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n"
"For now this is experimental and is disabled by default. The RTF output \n" "The RTF output is optimised for Word 97 and may not look very pretty with \n"
"is optimised for Word 97 and may not look too pretty with other readers \n" "other RTF readers or editors.\n"
"or editors.\n"
); );
ConfigString::add("rtfOutputDir", ConfigString::add("rtfOutputDir",
"RTF_OUTPUT", "RTF_OUTPUT",
......
...@@ -356,6 +356,10 @@ EOF ...@@ -356,6 +356,10 @@ EOF
elif test "$f_platform" = "solaris-cc"; then elif test "$f_platform" = "solaris-cc"; then
cat >> .tmakeconfig <<EOF cat >> .tmakeconfig <<EOF
TMAKE_LFLAGS = -Bstatic TMAKE_LFLAGS = -Bstatic
EOF
elif test "$f_platform" = "hpux-cc"; then
cat >> .tmakeconfig <<EOF
TMAKE_LFLAGS = -noshared
EOF EOF
else else
cat >> .tmakeconfig <<EOF cat >> .tmakeconfig <<EOF
......
...@@ -26,11 +26,15 @@ GENERATE_LATEX = YES ...@@ -26,11 +26,15 @@ GENERATE_LATEX = YES
GENERATE_HTML = YES GENERATE_HTML = YES
GENERATE_HTMLHELP = YES GENERATE_HTMLHELP = YES
GENERATE_RTF = NO GENERATE_RTF = NO
ENABLED_SECTIONS = logo_on
ENABLE_PREPROCESSING = NO ENABLE_PREPROCESSING = NO
CASE_SENSE_NAMES = NO
IMAGE_PATH = .
INPUT = index.doc install.doc starting.doc docblocks.doc \ INPUT = index.doc install.doc starting.doc docblocks.doc \
grouping.doc formulas.doc diagrams.doc preprocessing.doc \ grouping.doc formulas.doc diagrams.doc preprocessing.doc \
external.doc faq.doc trouble.doc history.doc features.doc \ external.doc faq.doc trouble.doc history.doc features.doc \
doxygen_usage.doc doxytag_usage.doc doxysearch_usage.doc \ doxygen_usage.doc doxytag_usage.doc doxysearch_usage.doc \
doxywizard_usage.doc \
installdox_usage.doc output.doc autolink.doc \ installdox_usage.doc output.doc autolink.doc \
config.doc commands.doc htmlcmds.doc language.doc config.doc commands.doc htmlcmds.doc language.doc
FILE_PATTERNS = *.cpp *.h *.doc FILE_PATTERNS = *.cpp *.h *.doc
......
...@@ -61,6 +61,7 @@ documentation: ...@@ -61,6 +61,7 @@ documentation:
<li> \refitem cmddeprecated \deprecated <li> \refitem cmddeprecated \deprecated
<li> \refitem cmddontinclude \dontinclude <li> \refitem cmddontinclude \dontinclude
<li> \refitem cmde \e <li> \refitem cmde \e
<li> \refitem cmdem \em
<li> \refitem cmdendcode \endcode <li> \refitem cmdendcode \endcode
<li> \refitem cmdendhtmlonly \endhtmlonly <li> \refitem cmdendhtmlonly \endhtmlonly
<li> \refitem cmdendif \endif <li> \refitem cmdendif \endif
...@@ -84,13 +85,16 @@ documentation: ...@@ -84,13 +85,16 @@ documentation:
<li> \refitem cmdinternal \internal <li> \refitem cmdinternal \internal
<li> \refitem cmdinvariant \invariant <li> \refitem cmdinvariant \invariant
<li> \refitem cmdlatexonly \latexonly <li> \refitem cmdlatexonly \latexonly
<li> \refitem cmdli \li
<li> \refitem cmdline \line <li> \refitem cmdline \line
<li> \refitem cmdlink \link <li> \refitem cmdlink \link
<li> \refitem cmdmainpage \mainpage <li> \refitem cmdmainpage \mainpage
<li> \refitem cmdname \name <li> \refitem cmdname \name
<li> \refitem cmdnamespace \namespace <li> \refitem cmdnamespace \namespace
<li> \refitem cmdnosubgrouping \nosubgrouping <li> \refitem cmdnosubgrouping \nosubgrouping
<li> \refitem cmdnote \note
<li> \refitem cmdoverload \overload <li> \refitem cmdoverload \overload
<li> \refitem cmdp \p
<li> \refitem cmdpage \page <li> \refitem cmdpage \page
<li> \refitem cmdpar \par <li> \refitem cmdpar \par
<li> \refitem cmdparam \param <li> \refitem cmdparam \param
...@@ -164,17 +168,6 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -164,17 +168,6 @@ Doxygen. Unrecognized commands are treated as normal text.
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
<hr>
\subsection cmdcode \code
\addindex \code
Starts a block of code. A code block is treated differently
from ordinary text. It is interpreted as C/C++ code. The names of the
classes and members that are documented are automatically replaced by
links to the documentation.
\sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim"
<hr> <hr>
\subsection cmddef \def <name> \subsection cmddef \def <name>
...@@ -185,7 +178,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -185,7 +178,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Example: \par Example:
\verbinclude define.h \verbinclude define.h
\htmlonly \htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/define/html/index.html">here</a> Click <a href="$(DOXYGEN_DOCDIR)/examples/define/html/define.h.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
...@@ -203,13 +196,6 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -203,13 +196,6 @@ Doxygen. Unrecognized commands are treated as normal text.
\sa section \ref cmdingroup "\\ingroup" \sa section \ref cmdingroup "\\ingroup"
<hr>
\subsection cmdendcode \endcode
\addindex \endcode
Ends a block of code.
\sa section \ref cmdcode "\\code"
<hr> <hr>
\subsection cmdenum \enum <name> \subsection cmdenum \enum <name>
...@@ -229,7 +215,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -229,7 +215,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Example: \par Example:
\verbinclude enum.h \verbinclude enum.h
\htmlonly \htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/enum/html/index.html">here</a> Click <a href="$(DOXYGEN_DOCDIR)/examples/enum/html/class_test.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
...@@ -260,7 +246,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -260,7 +246,7 @@ Doxygen. Unrecognized commands are treated as normal text.
Where the example file \c example_test.cpp looks as follows: Where the example file \c example_test.cpp looks as follows:
\verbinclude example_test.cpp \verbinclude example_test.cpp
\htmlonly \htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/example/html/index.html">here</a> Click <a href="$(DOXYGEN_DOCDIR)/examples/example/html/examples.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
...@@ -283,7 +269,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -283,7 +269,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Example: \par Example:
\verbinclude file.h \verbinclude file.h
\htmlonly \htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/file/html/index.html">here</a> Click <a href="$(DOXYGEN_DOCDIR)/examples/file/html/file.h.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
...@@ -412,6 +398,8 @@ Public/Protected/Private/... section. ...@@ -412,6 +398,8 @@ Public/Protected/Private/... section.
\par Note 1: \par Note 1:
You are responsible that there is indeed an You are responsible that there is indeed an
earlier documented member that is overloaded by this one. earlier documented member that is overloaded by this one.
To prevent that document reorders the documentation you should set
\ref cfg_sort_member_docs "SORT_MEMBER_DOCS" to NO in this case.
\par Note 2: \par Note 2:
The \\overload command does not work inside a one-line comment. The \\overload command does not work inside a one-line comment.
\par Example: \par Example:
...@@ -684,6 +672,20 @@ Public/Protected/Private/... section. ...@@ -684,6 +672,20 @@ Public/Protected/Private/... section.
several invariants. The \\invariant command ends when a blank line or some other several invariants. The \\invariant command ends when a blank line or some other
sectioning command is encountered. sectioning command is encountered.
<hr>
\subsection cmdnote \note { text }
\addindex \note
Starts a paragraph where a note can be entered. The paragraph will be
indented. The text of the paragraph has no special internal structure.
All visual enhancement commands may be used inside the paragraph.
Multiple adjacent \\note commands will be joined into a single paragraph.
Each note description will start on a new line.
Alternatively, one \\note command may mention
several notes. The \\note command ends when a blank line or some other
sectioning command is encountered. See section \ref cmdpar "\\par"
for an example.
<hr> <hr>
\subsection cmdpar \par [(paragraph title)] { paragraph } \subsection cmdpar \par [(paragraph title)] { paragraph }
...@@ -797,10 +799,11 @@ Public/Protected/Private/... section. ...@@ -797,10 +799,11 @@ Public/Protected/Private/... section.
\addindex \sa \addindex \sa
Starts a paragraph where one or more cross-references to classes, Starts a paragraph where one or more cross-references to classes,
functions, methods, variables, files or URL may be specified. functions, methods, variables, files or URL may be specified.
The separators \c :: and \c # may be used to separate a class from the Two names joines by either <code>::</code> or <code>\#</code>
name of its members. One of several overloaded methods or constructors are understood as referring to a class and one of its members.
One of several overloaded methods or constructors
may be selected by including a parenthesized list of argument types after may be selected by including a parenthesized list of argument types after
the method. the method name.
Synonymous to \\see. Synonymous to \\see.
...@@ -1112,7 +1115,7 @@ Public/Protected/Private/... section. ...@@ -1112,7 +1115,7 @@ Public/Protected/Private/... section.
\par Example: \par Example:
\verbatim \verbatim
... the \a x and \y coordinates are used to ... ... the \a x and \a y coordinates are used to ...
\endverbatim \endverbatim
This will result in the following text:<br><br> This will result in the following text:<br><br>
... the \a x and \a y coordinates are used to ... ... the \a x and \a y coordinates are used to ...
...@@ -1147,6 +1150,9 @@ Public/Protected/Private/... section. ...@@ -1147,6 +1150,9 @@ Public/Protected/Private/... section.
\par Note: \par Note:
For nested lists, HTML commands should be used. For nested lists, HTML commands should be used.
Equivalent to \ref cmdli "\\cmdli"
<hr> <hr>
\subsection cmdb \b <word> \subsection cmdb \b <word>
...@@ -1170,6 +1176,19 @@ Public/Protected/Private/... section. ...@@ -1170,6 +1176,19 @@ Public/Protected/Private/... section.
will result in the following text:<br><br> will result in the following text:<br><br>
... This function returns \c void and not \c int ... ... This function returns \c void and not \c int ...
Equivalent to \ref cmdp "\\cmdp"
<hr>
\subsection cmdcode \code
\addindex \code
Starts a block of code. A code block is treated differently
from ordinary text. It is interpreted as C/C++ code. The names of the
classes and members that are documented are automatically replaced by
links to the documentation.
\sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim"
<hr> <hr>
\subsection cmde \e <word> \subsection cmde \e <word>
...@@ -1185,6 +1204,32 @@ Public/Protected/Private/... section. ...@@ -1185,6 +1204,32 @@ Public/Protected/Private/... section.
will result in the following text:<br><br> will result in the following text:<br><br>
... this is a \e really good example ... ... this is a \e really good example ...
Equvalent to \ref cmdem "\\em"
<hr>
\subsection cmdem \em <word>
\addindex \e
Displays the argument \<word\> in italics.
Use this command to emphasize words.
\par Example:
Typing:
\verbatim
... this is a \em really good example ...
\endverbatim
will result in the following text:<br><br>
... this is a \em really good example ...
Equivalent to \ref cmde "\\e"
<hr>
\subsection cmdendcode \endcode
\addindex \endcode
Ends a block of code.
\sa section \ref cmdcode "\\code"
<hr> <hr>
\subsection cmdendhtmlonly \endhtmlonly \subsection cmdendhtmlonly \endhtmlonly
...@@ -1321,6 +1366,55 @@ Public/Protected/Private/... section. ...@@ -1321,6 +1366,55 @@ Public/Protected/Private/... section.
\sa section \ref cmdlatexonly "\\latexonly" \sa section \ref cmdlatexonly "\\latexonly"
and section \ref cmdhtmlonly "\\htmlonly". and section \ref cmdhtmlonly "\\htmlonly".
<hr>
\subsection cmdli \li { item-description }
\addindex \li
This command has one argument that continues until the first
blank line or until another \\li is encountered.
The command can be used to generate a simple, not nested list of
arguments.
Each argument should start with a \\li command.
\par Example:
Typing:
\verbatim
\li \c AlignLeft left alignment.
\li \c AlignCenter center alignment.
\li \c AlignRight right alignment
No other types of alignment are supported.
\endverbatim
will result in the following text:<br><br>
<ul>
<li> \c AlignLeft left alignment.
<li> \c AlignCenter center alignment.
<li> \c AlignRight right alignment
</ul><br>
No other types of alignment are supported.
\par Note:
For nested lists, HTML commands should be used.
Equivalent to \ref cmdarg "\\cmdarg"
<hr>
\subsection cmdp \p <word>
\addindex \p
Displays the parameter \<word\> using a typewriter font.
You can use this command to refer to member function parameters in
the running text.
\par Example:
\verbatim
... the \p x and \p y coordinates are used to ...
\endverbatim
This will result in the following text:<br><br>
... the \p x and \p y coordinates are used to ...
Equivalent to \ref cmdc "\\cmdc"
<hr> <hr>
\subsection cmdverbatim \verbatim \subsection cmdverbatim \verbatim
......
This diff is collapsed.
...@@ -17,16 +17,17 @@ ...@@ -17,16 +17,17 @@
/*! \page doxygen_usage Doxygen usage /*! \page doxygen_usage Doxygen usage
Doxygen is a command line based utility. Calling \c doxygen with the Doxygen is a command line based utility. Calling \c doxygen with the
\c -h option at the command line will give you a brief description of the \c --help option at the command line will give you a brief description of the
usage of the program. usage of the program.
All options consist of a leading character <tt>-</tt>, All options consist of a leading character <tt>-</tt>,
followed by one character and optionally an argument. followed by one character and one or more arguments depending on the option.
To generate a class browser you typically need to follow these steps: To generate a manual for your project you typically
need to follow these steps:
<ol> <ol>
<li> You document your source code with <li> You document your source code with
special documentation blocks. special documentation blocks (see section \ref specialblock).
<li> You generate a configuration file (see section \ref config) by <li> You generate a configuration file (see section \ref config) by
calling doxygen with the \c -g option: calling doxygen with the \c -g option:
\verbatim \verbatim
...@@ -42,12 +43,50 @@ doxygen <config_file> ...@@ -42,12 +43,50 @@ doxygen <config_file>
\endverbatim \endverbatim
</ol> </ol>
If you have a configuration file generated with an older version of
doxygen that you can upgrade it to the current version by running doxygen
with the -u option.
\verbatim
doxygen -u <config_file>
\endverbatim
All configuration settings in the orginal configuration file will be copied
to the new configuration file. Any new options will have their default value.
Note that comments that you may have added in the original configuration file
will be lost.
If you want to fine-tune the way the output looks, doxygen allows you
generate default style sheet, header, and footer files that you can edit
afterwards:
<ul>
<li>For HTML output, you can generate the default header file
(see \ref cfg_html_header "HTML_HEADER"), the default footer
(see \ref cfg_html_footer "HTML_FOOTER"), and the default style
sheet (see \ref cfg_html_stylesheet "HTML_STYLESHEET"), using the
following command:
\verbatim
doxygen -w html header.html footer.html stylesheet.css
\endverbatim
<li>For LaTeX output, you can generate the first part of \c refman.tex
(see \ref cfg_latex_header "LATEX_HEADER") and the style sheet included
by that header (normally <code>doxygen.sty</code>), using:
\verbatim
doxygen -w latex header.tex doxygen.sty
\endverbatim
<li>For RTF output, you can generate the default style sheet file (see
\ref cfg_rtf_stylesheet_file "RTF_STYLESHEET_FILE") using:
\verbatim
doxygen -w rtf rtfstyle.cfg
\endverbatim
</ul>
<b>Note:</b><br> <b>Note:</b><br>
<ul> <ul>
<li> If you do not want the description for each item in the configuration <li> If you do not want documentation for each item inside the configuration
file then you can use the optional \c -s option. file then you can use the optional \c -s option. This can use be
Try to use this option if you send me a configuration file as part of used in combination with the \c -u option, to add or strip the
a bug report! documentation from an existing configuration file.
Please use the \c -s this option if you send me a configuration file
as part of a bug report!
<li> To make doxygen read/write to standard input/output instead of from/to <li> To make doxygen read/write to standard input/output instead of from/to
a file, use \c - for the file name. a file, use \c - for the file name.
</ul> </ul>
......
/******************************************************************************
*
*
*
* Copyright (C) 1997-2000 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.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
/*! \page doxywizard_usage Doxywizard usage
Doxywizard is a GUI front-end for creating and editing
configuration files that are used by doxygen.
Doxywizard consists of a single executable that, when started,
pops up a window.
The main window has a number of tab field, one
for each section in the configuration file. Each tab-field
contains a number of lines, one for each configuration option in
that section.
The kind of input widget depends on the type of the configuration option.
<ul>
<li>For each boolean option (those options that are answered with YES or
NO in the configuration file) there is a check-box.
<li>For items taking one of a fixed set of values (like
\ref cfg_output_language "OUTPUT_LANGUAGE") a combo box is used.
<li>For items taking an integer value from a range, a spinbox is used.
<li>For free form string-type options there is a one line edit field
<li>For options taking a lists of strings, a one line edit field is
available, with a `+' button to add this string to the list and
a `-' button to remove the selected string from the list. There
is also a button with a circular "refresh" arrow that, when pressed,
replaces the selected item in the list with the string entered in the
edit field.
<li>For file and folder entries, there are special buttons
that start a file dialog.
</ul>
\image html doxywizard.gif
*/
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
parser and GUI front-end from source templates. parser and GUI front-end from source templates.
<li>Better support for the using keyword. <li>Better support for the using keyword.
<li>New transparent mini logo that is put in the footer of all HTML pages. <li>New transparent mini logo that is put in the footer of all HTML pages.
<li>Internationalization support for the Polish and Croatian language. <li>Internationalization support for the Polish, Portuguese and Croatian language.
<li>Todo list support. <li>Todo list support.
<li>If the source browser is enabled, for a function, a list of function whose <li>If the source browser is enabled, for a function, a list of function whose
implementation calls that function, is generated. implementation calls that function, is generated.
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
* *
*/ */
/*! \page index /*! \page index
\if logo_on
<center> <center>
\htmlonly \htmlonly
<img align=center lowsrc="doxygen_logo_low.gif" src="doxygen_logo.gif" <img align=center lowsrc="doxygen_logo_low.gif" src="doxygen_logo.gif"
...@@ -22,6 +23,7 @@ ...@@ -22,6 +23,7 @@
Version: $(VERSION) Version: $(VERSION)
\endhtmlonly \endhtmlonly
</center> </center>
\endif
<h2>Doxygen license</h2> <h2>Doxygen license</h2>
\addindex license \addindex license
...@@ -105,6 +107,7 @@ The second part forms a reference manual: ...@@ -105,6 +107,7 @@ The second part forms a reference manual:
<li>Section \ref doxygen_usage shows how to use the \c doxygen program. <li>Section \ref doxygen_usage shows how to use the \c doxygen program.
<li>Section \ref doxytag_usage shows how to use the \c doxytag program. <li>Section \ref doxytag_usage shows how to use the \c doxytag program.
<li>Section \ref doxysearch_usage shows how to use the \c doxysearch program. <li>Section \ref doxysearch_usage shows how to use the \c doxysearch program.
<li>Section \ref doxywizard_usage shows how to use the \c doxywizard program.
<li>Section \ref installdox_usage shows how to use the \c installdox <li>Section \ref installdox_usage shows how to use the \c installdox
script that is generated by Doxygen if you use tag files. script that is generated by Doxygen if you use tag files.
<li>Section \ref output shows how to generate the various output formats <li>Section \ref output shows how to generate the various output formats
......
...@@ -92,7 +92,11 @@ Compilation is now done by performing the following steps: ...@@ -92,7 +92,11 @@ Compilation is now done by performing the following steps:
If you have Qt-2.1.x installed and want to build the GUI front-end, you If you have Qt-2.1.x installed and want to build the GUI front-end, you
should run the configure script with the <code>--with-doxywizard</code> should run the configure script with the <code>--with-doxywizard</code>
option. option:
\verbatim
configure --with-doxywizard
\endverbatim
For an overview of other configuration options use For an overview of other configuration options use
...@@ -216,6 +220,9 @@ If you are compiling for HP-UX with aCC and you get this error: ...@@ -216,6 +220,9 @@ If you are compiling for HP-UX with aCC and you get this error:
#include <alloca.h> #include <alloca.h>
\endverbatim \endverbatim
If that does not help, try removing <code>ce_parse.cpp</code> and let
bison rebuilt it (this worked for me).
If you are compiling for Digital Unix, the same problem can be solved If you are compiling for Digital Unix, the same problem can be solved
(according to Barnard Schmallhof) by replacing the following in (according to Barnard Schmallhof) by replacing the following in
ce_parse.cpp: ce_parse.cpp:
...@@ -256,7 +263,50 @@ ce_parse.cpp: ...@@ -256,7 +263,50 @@ ce_parse.cpp:
<b>Sun compiler problems</b> <b>Sun compiler problems</b>
I tried compiling doxygen only with Sun's C++ WorkShop Compiler
version 5.0 (I used <code>./configure --platform solaris-cc</code>)
Qt-2.x.x is required for this compiler (Qt-1.44 has problems with the bool
type).
Compiling the \c doxygen binary went ok, but while linking <code>doxytag</code> I got a
lot of link errors, like these:
\verbatim
QList<PageInfo>::__vtbl /home/dimitri/doxygen/objects/SunWS_cache/CC_obj_6/6c3eO4IogMT2vrlGCQUQ.o
[Hint: try checking whether the first non-inlined, non-pure virtual function of class QList<PageInfo> is defined]
\endverbatim
These are generated because the compiler is confused about the object sharing
between \c doxygen and \c doxytag. To compile \c doxytag and \c doxysearch
anyway do:
\verbatim
rm -rf objects
mkdir objects
cd src
gmake -f Makefile.doxytag
gmake -f Makefile.doxysearch
\endverbatim
when configuring with <code>--static</code> I got:
\verbatim
Undefined first referenced
symbol in file
dlclose /usr/lib/libc.a(nss_deffinder.o)
dlsym /usr/lib/libc.a(nss_deffinder.o)
dlopen /usr/lib/libc.a(nss_deffinder.o)
\endverbatim
Manually adding <code>-Bdynamic</code> after the target rule in
<code>Makefile.doxygen</code> and <code>Makefile.doxytag</code>
will fix this:
\verbatim
$(TARGET): $(OBJECTS) $(OBJMOC)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) -Bdynamic
\endverbatim
<b>GNU 2.7.2.x compiler problems</b> <b>GNU 2.7.2.x compiler problems</b>
......
...@@ -29,6 +29,9 @@ information. ...@@ -29,6 +29,9 @@ information.
The executable \c doxysearch is only needed if you want to use the search The executable \c doxysearch is only needed if you want to use the search
engine. See section \ref doxysearch_usage for more detailed usage information. engine. See section \ref doxysearch_usage for more detailed usage information.
Optionally, the executable \c doxywizard is a GUI front-end for editing
the configuration files that are used by doxygen.
\subsection step1 Step 1: Creating a configuration file \subsection step1 Step 1: Creating a configuration file
Doxygen uses a configuration file to determine all of its settings. Doxygen uses a configuration file to determine all of its settings.
...@@ -129,14 +132,16 @@ documentation, \c doxygen writes a \c Makefile into the \c latex directory. ...@@ -129,14 +132,16 @@ documentation, \c doxygen writes a \c Makefile into the \c latex directory.
By typing \c make in the \c latex directory the dvi file \c refman.dvi By typing \c make in the \c latex directory the dvi file \c refman.dvi
will be generated (provided that you have a make tool called will be generated (provided that you have a make tool called
<code>make</code> ofcourse). This file can then be viewed using \c xdvi or <code>make</code> ofcourse). This file can then be viewed using \c xdvi or
converted into a postscript file \c refman.ps by typing <code>make ps</code> converted into a postscript file \c refman.ps by
(this requires <code>dvips</code>). The Postscript file can be send to a postscript typing <code>make ps</code> (this requires <code>dvips</code>).
To put 2 pages on one physical page use <code>make ps_2on1</code> instead.
The resulting Postscript file can be send to a postscript
printer. If you do not have a postscript printer, you can try to use printer. If you do not have a postscript printer, you can try to use
ghostscript to convert postscript into something your printer understands. ghostscript to convert postscript into something your printer understands.
Conversion to PDF is also possible if you have installed the ghostscript Conversion to PDF is also possible if you have installed the ghostscript
interpreter; just type <code>make pdf</code>. To get the best results for interpreter; just type <code>make pdf</code> (or <code>make pdf_2on1</code>).
PDF output you should set the \ref cfg_pdf_hyperlinks "PDF_HYPERLINKS" To get the best results for PDF output you should set
tag to \c YES. the \ref cfg_pdf_hyperlinks "PDF_HYPERLINKS" tag to \c YES.
The generated man pages can be viewed using the \c man program. You do need The generated man pages can be viewed using the \c man program. You do need
to make sure the man directory is in the man path (see the \c MANPATH to make sure the man directory is in the man path (see the \c MANPATH
......
...@@ -80,12 +80,24 @@ know why. ...@@ -80,12 +80,24 @@ know why.
Furthermore, I would appreciate a mail if you have found Furthermore, I would appreciate a mail if you have found
a bug, or if you have ideas (or even better some code or a patch) a bug, or if you have ideas (or even better some code or a patch)
how to fix existing bugs and limitations. how to fix existing bugs and limitations. For patches please use
"diff -u"
<h2>How to report a bug</h2>
If you think you have found a bug in doxygen, please report it so I can
fix it.
Always include the following information in your bug report:
- The version of doxygen you are using.
- The name and version number of your operating system
The easiest way for me to solve bugs is if you can send me a small example The easiest way for me to solve bugs is if you can send me a small example
demonstrating the problem you have (make sure the example compiles!). It is demonstrating the problem you have. Please make sure the example is valid
usually a good idea to send along the configuation file as well, but please source code (try compiling it) and if the problem is really captured by
use doxygen with the <code>-s</code> flag while generating it. the example.
It is usually a good idea to send along the configuation file as well,
but please use doxygen with the <code>-s</code> flag while generating it.
My e-mail address: <a href="mailto:dimitri@stack.nl">dimitri@stack.nl</a> My e-mail address: <a href="mailto:dimitri@stack.nl">dimitri@stack.nl</a>
*/ */
......
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = afterdoc ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = afterdoc
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = afterdoc.h INPUT = afterdoc.h
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = author ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = author
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = author.cpp INPUT = author.cpp
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = autolink ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = autolink
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = autolink.cpp INPUT = autolink.cpp
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = class ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = class
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = class.h INPUT = class.h
QUIET = YES QUIET = YES
...@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = define ...@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = define
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = define.h INPUT = define.h
ENABLE_PREPROCESSING = YES ENABLE_PREPROCESSING = YES
QUIET = YES QUIET = YES
...@@ -5,6 +5,7 @@ EXTRACT_ALL = YES ...@@ -5,6 +5,7 @@ EXTRACT_ALL = YES
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
ENABLE_PREPROCESSING = YES ENABLE_PREPROCESSING = YES
INPUT = . INPUT = .
FILE_PATTERNS = diagrams_*.h FILE_PATTERNS = diagrams_*.h
......
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = enum ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = enum
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = enum.h INPUT = enum.h
QUIET = YES QUIET = YES
...@@ -4,6 +4,7 @@ GENERATE_TAGFILE = example.tag ...@@ -4,6 +4,7 @@ GENERATE_TAGFILE = example.tag
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = example.cpp INPUT = example.cpp
EXAMPLE_PATH = example_test.cpp EXAMPLE_PATH = example_test.cpp
QUIET = YES QUIET = YES
>Test: "class_Test.html" >Test: "class_test.html"
example a0 "()" example a0 "()"
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = file ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = file
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = file.h INPUT = file.h
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = func ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = func
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = func.h INPUT = func.h
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = group ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = group
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = group.cpp INPUT = group.cpp
QUIET = YES QUIET = YES
...@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = include ...@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = include
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = include.cpp INPUT = include.cpp
EXAMPLE_PATH = example_test.cpp EXAMPLE_PATH = example_test.cpp
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = jdstyle ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = jdstyle
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = jdstyle.cpp INPUT = jdstyle.cpp
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = memgrp ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = memgrp
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = memgrp.cpp INPUT = memgrp.cpp
QUIET = YES QUIET = YES
...@@ -3,5 +3,7 @@ OUTPUT_DIRECTORY = overload ...@@ -3,5 +3,7 @@ OUTPUT_DIRECTORY = overload
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
SORT_MEMBER_DOCS = NO
INPUT = overload.cpp INPUT = overload.cpp
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = page ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = page
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = page.doc INPUT = page.doc
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = par ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = par
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = par.cpp INPUT = par.cpp
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = qtstyle ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = qtstyle
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = qtstyle.cpp INPUT = qtstyle.cpp
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = relates ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = relates
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = relates.cpp INPUT = relates.cpp
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = restypedef ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = restypedef
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = restypedef.cpp INPUT = restypedef.cpp
QUIET = YES QUIET = YES
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = structcmd ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = structcmd
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = structcmd.h INPUT = structcmd.h
QUIET = YES QUIET = YES
...@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = tag ...@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = tag
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = tag.cpp INPUT = tag.cpp
TAGFILES = example.tag TAGFILES = example.tag
PERL_PATH = perl PERL_PATH = perl
......
...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = template ...@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = template
GENERATE_LATEX = NO GENERATE_LATEX = NO
GENERATE_MAN = NO GENERATE_MAN = NO
GENERATE_RTF = NO GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = templ.cpp INPUT = templ.cpp
QUIET = YES QUIET = YES
Name: doxygen Name: doxygen
Version: 1.1.5-20000716 Version: 1.2.0
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 1 Release: 1
Source0: doxygen-%{version}.src.tar.gz Source0: doxygen-%{version}.src.tar.gz
......
...@@ -779,9 +779,9 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -779,9 +779,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<font size=2><center>["); ol.writeString("<center><font size=\"2\">[");
ol.writeHtmlLink("graph_legend.html",theTranslator->trLegend()); ol.writeHtmlLink("graph_legend.html",theTranslator->trLegend());
ol.writeString("]</center></font>"); ol.writeString("]</font></center>");
ol.popGeneratorState(); ol.popGeneratorState();
} }
ol.popGeneratorState(); ol.popGeneratorState();
...@@ -811,9 +811,9 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -811,9 +811,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<font size=2><center>["); ol.writeString("<center><font size=\"2\">[");
ol.writeHtmlLink("graph_legend.html",theTranslator->trLegend()); ol.writeHtmlLink("graph_legend.html",theTranslator->trLegend());
ol.writeString("]</center></font>"); ol.writeString("]</font></center>");
ol.popGeneratorState(); ol.popGeneratorState();
} }
ol.popGeneratorState(); ol.popGeneratorState();
...@@ -1123,7 +1123,7 @@ void ClassDef::writeMemberList(OutputList &ol) ...@@ -1123,7 +1123,7 @@ void ClassDef::writeMemberList(OutputList &ol)
while (mi) while (mi)
{ {
MemberDef *md=mi->memberDef; MemberDef *md=mi->memberDef;
ClassDef *cd=md->memberClass(); ClassDef *cd=md->getClassDef();
// compute the protection level for this member // compute the protection level for this member
Protection protect=md->protection(); Protection protect=md->protection();
...@@ -1301,7 +1301,7 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup) ...@@ -1301,7 +1301,7 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup)
//ol.insertMemberAlign(); //ol.insertMemberAlign();
//printf("ClassName=`%s' inGroup=%d\n",name().data(),inGroup); //printf("ClassName=`%s' inGroup=%d\n",name().data(),inGroup);
if (inGroup && md && md->memberClass()==this) return; if (inGroup && md && md->getClassDef()==this) return;
switch(compType) switch(compType)
{ {
...@@ -1447,13 +1447,13 @@ void ClassDef::mergeMembers(/*ClassDef *cd,BaseClassList *bcl*/) ...@@ -1447,13 +1447,13 @@ void ClassDef::mergeMembers(/*ClassDef *cd,BaseClassList *bcl*/)
bool hidden=FALSE; bool hidden=FALSE;
MemberNameInfoIterator dstMnii(*dstMni); MemberNameInfoIterator dstMnii(*dstMni);
MemberInfo *dstMi; MemberInfo *dstMi;
ClassDef *srcCd = srcMd->memberClass(); ClassDef *srcCd = srcMd->getClassDef();
for ( ; (dstMi=dstMnii.current()) && !found; ++dstMnii ) for ( ; (dstMi=dstMnii.current()) && !found; ++dstMnii )
{ {
MemberDef *dstMd = dstMi->memberDef; MemberDef *dstMd = dstMi->memberDef;
if (srcMd!=dstMd) // different members if (srcMd!=dstMd) // different members
{ {
ClassDef *dstCd = dstMd->memberClass(); ClassDef *dstCd = dstMd->getClassDef();
//printf("Is %s a base class of %s?\n",srcCd->name(),dstCd->name()); //printf("Is %s a base class of %s?\n",srcCd->name(),dstCd->name());
if (srcCd==dstCd || dstCd->isBaseClass(srcCd)) if (srcCd==dstCd || dstCd->isBaseClass(srcCd))
// member is in the same or a base class // member is in the same or a base class
...@@ -1565,7 +1565,7 @@ void ClassDef::mergeMembers(/*ClassDef *cd,BaseClassList *bcl*/) ...@@ -1565,7 +1565,7 @@ void ClassDef::mergeMembers(/*ClassDef *cd,BaseClassList *bcl*/)
Specifier virt=mi->virt; Specifier virt=mi->virt;
if (mi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt; if (mi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt;
MemberInfo *newMi=new MemberInfo(mi->memberDef,bcd->prot,virt); MemberInfo *newMi=new MemberInfo(mi->memberDef,bcd->prot,virt);
//if (mi->memberDef->memberClass()!=bClass) //if (mi->memberDef->getClassDef()!=bClass)
newMi->scopePath=bClass->name()+"::"+mi->scopePath; newMi->scopePath=bClass->name()+"::"+mi->scopePath;
newMi->ambigClass=mi->ambigClass; newMi->ambigClass=mi->ambigClass;
newMi->ambiguityResolutionScope=mi->ambiguityResolutionScope.copy(); newMi->ambiguityResolutionScope=mi->ambiguityResolutionScope.copy();
......
...@@ -102,10 +102,12 @@ class ClassDef : public Definition ...@@ -102,10 +102,12 @@ class ClassDef : public Definition
ArgumentList *outerTemplateArguments() const; ArgumentList *outerTemplateArguments() const;
void setTemplateArguments(ArgumentList *al); void setTemplateArguments(ArgumentList *al);
//QCString getTemplateNameString(); //QCString getTemplateNameString();
NamespaceDef *getNamespaceDef() { return nspace; }
FileDef *getFileDef() const { return fileDef; }
void setNamespace(NamespaceDef *nd) { nspace = nd; } void setNamespace(NamespaceDef *nd) { nspace = nd; }
NamespaceDef *getNamespace() { return nspace; }
void setFileDef(FileDef *fd) { fileDef=fd; } void setFileDef(FileDef *fd) { fileDef=fd; }
FileDef *getFileDef() const { return fileDef; }
void mergeMembers(); void mergeMembers();
bool isBaseClass(ClassDef *bcd); bool isBaseClass(ClassDef *bcd);
void determineImplUsageRelation(); void determineImplUsageRelation();
......
This diff is collapsed.
...@@ -357,7 +357,7 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) ...@@ -357,7 +357,7 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
{ {
QCString scope=md->getScopeString(); QCString scope=md->getScopeString();
QCString name=md->name(); QCString name=md->name();
//printf("class=%p scope=%s scopeName=%s\n",md->memberClass(),scope.data(),scopeName); //printf("class=%p scope=%s scopeName=%s\n",md->getClassDef(),scope.data(),scopeName);
if (!scope.isEmpty() && scope!=scopeName) if (!scope.isEmpty() && scope!=scopeName)
{ {
name.prepend(scope+"::"); name.prepend(scope+"::");
......
...@@ -1104,7 +1104,20 @@ void DotClassGraph::writeGraph(QTextStream &out, ...@@ -1104,7 +1104,20 @@ void DotClassGraph::writeGraph(QTextStream &out,
return; return;
} }
out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#" out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#"
<< m_startNode->m_label << "_" << mapName << "\"></center>" << endl; << m_startNode->m_label << "_" << mapName << "\" alt=\"";
switch (m_graphType)
{
case Implementation:
out << "Collaboration graph";
break;
case Interface:
out << "Interface dependency graph";
break;
case Inheritance:
out << "Inheritance graph";
break;
}
out << "\"></center>" << endl;
out << "<map name=\"" << m_startNode->m_label << "_" << mapName << "\">" << endl; out << "<map name=\"" << m_startNode->m_label << "_" << mapName << "\">" << endl;
convertMapFile(out,baseName+".map"); convertMapFile(out,baseName+".map");
out << "</map><p>" << endl; out << "</map><p>" << endl;
...@@ -1140,7 +1153,7 @@ void DotClassGraph::writeGraph(QTextStream &out, ...@@ -1140,7 +1153,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
"\\end{center}\n" "\\end{center}\n"
"\\end{figure}\n"; "\\end{figure}\n";
} }
//thisDir.remove(baseName+".dot"); thisDir.remove(baseName+".dot");
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
} }
...@@ -1280,7 +1293,9 @@ void DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1280,7 +1293,9 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
} }
out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#" out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#"
<< mapName << "_map\">"; << mapName << "_map\" alt=\"";
if (m_inverse) out << "Included by dependency graph"; else out << "Include dependency graph";
out << "\">";
out << "</center>" << endl; out << "</center>" << endl;
out << "<map name=\"" << mapName << "_map\">" << endl; out << "<map name=\"" << mapName << "_map\">" << endl;
convertMapFile(out,baseName+".map"); convertMapFile(out,baseName+".map");
......
This diff is collapsed.
...@@ -508,25 +508,46 @@ void FileDef::insertMember(MemberDef *md) ...@@ -508,25 +508,46 @@ void FileDef::insertMember(MemberDef *md)
switch(md->memberType()) switch(md->memberType())
{ {
case MemberDef::Variable: case MemberDef::Variable:
if (Config::sortMembersFlag)
varMembers.inSort(md); varMembers.inSort(md);
else
varMembers.append(md);
break; break;
case MemberDef::Function: case MemberDef::Function:
if (Config::sortMembersFlag)
funcMembers.inSort(md); funcMembers.inSort(md);
else
funcMembers.append(md);
break; break;
case MemberDef::Typedef: case MemberDef::Typedef:
if (Config::sortMembersFlag)
typedefMembers.inSort(md); typedefMembers.inSort(md);
else
typedefMembers.append(md);
break; break;
case MemberDef::Enumeration: case MemberDef::Enumeration:
if (Config::sortMembersFlag)
enumMembers.inSort(md); enumMembers.inSort(md);
else
enumMembers.append(md);
break; break;
case MemberDef::EnumValue: case MemberDef::EnumValue:
if (Config::sortMembersFlag)
enumValMembers.inSort(md); enumValMembers.inSort(md);
else
enumValMembers.append(md);
break; break;
case MemberDef::Prototype: case MemberDef::Prototype:
if (Config::sortMembersFlag)
protoMembers.inSort(md); protoMembers.inSort(md);
else
protoMembers.append(md);
break; break;
case MemberDef::Define: case MemberDef::Define:
if (Config::sortMembersFlag)
defineMembers.inSort(md); defineMembers.inSort(md);
else
defineMembers.append(md);
break; break;
default: default:
err("FileDef::insertMembers(): unexpected member insert in file!\n"); err("FileDef::insertMembers(): unexpected member insert in file!\n");
...@@ -537,7 +558,10 @@ void FileDef::insertMember(MemberDef *md) ...@@ -537,7 +558,10 @@ void FileDef::insertMember(MemberDef *md)
/*! Adds compound definition \a cd to the list of all compounds of this file */ /*! Adds compound definition \a cd to the list of all compounds of this file */
void FileDef::insertClass(ClassDef *cd) void FileDef::insertClass(ClassDef *cd)
{ {
if (Config::sortMembersFlag)
classList->inSort(cd); classList->inSort(cd);
else
classList->append(cd);
} }
/*! Adds namespace definition \a nd to the list of all compounds of this file */ /*! Adds namespace definition \a nd to the list of all compounds of this file */
...@@ -545,7 +569,10 @@ void FileDef::insertNamespace(NamespaceDef *nd) ...@@ -545,7 +569,10 @@ void FileDef::insertNamespace(NamespaceDef *nd)
{ {
if (!nd->name().isEmpty() && namespaceDict->find(nd->name())==0) if (!nd->name().isEmpty() && namespaceDict->find(nd->name())==0)
{ {
if (Config::sortMembersFlag)
namespaceList->inSort(nd); namespaceList->inSort(nd);
else
namespaceList->append(nd);
namespaceDict->insert(nd->name(),nd); namespaceDict->insert(nd->name(),nd);
} }
} }
......
...@@ -78,16 +78,25 @@ void GroupDef::distributeMemberGroupDocumentation() ...@@ -78,16 +78,25 @@ void GroupDef::distributeMemberGroupDocumentation()
void GroupDef::addFile(const FileDef *def) void GroupDef::addFile(const FileDef *def)
{ {
if (Config::sortMembersFlag)
fileList->inSort(def);
else
fileList->append(def); fileList->append(def);
} }
void GroupDef::addClass(const ClassDef *def) void GroupDef::addClass(const ClassDef *def)
{ {
if (Config::sortMembersFlag)
classList->inSort(def);
else
classList->append(def); classList->append(def);
} }
void GroupDef::addNamespace(const NamespaceDef *def) void GroupDef::addNamespace(const NamespaceDef *def)
{ {
if (Config::sortMembersFlag)
namespaceList->inSort(def);
else
namespaceList->append(def); namespaceList->append(def);
} }
...@@ -142,13 +151,48 @@ void GroupDef::insertMember(MemberDef *md) ...@@ -142,13 +151,48 @@ void GroupDef::insertMember(MemberDef *md)
allMemberDict->insert(funcDecl,md); allMemberDict->insert(funcDecl,md);
switch(md->memberType()) switch(md->memberType())
{ {
case MemberDef::Variable: varMembers.inSort(md); break; case MemberDef::Variable:
case MemberDef::Function: funcMembers.inSort(md); break; if (Config::sortMembersFlag)
case MemberDef::Typedef: typedefMembers.inSort(md); break; varMembers.inSort(md);
case MemberDef::Enumeration: enumMembers.inSort(md); break; else
case MemberDef::EnumValue: enumValMembers.inSort(md); break; varMembers.append(md);
case MemberDef::Prototype: protoMembers.inSort(md); break; break;
case MemberDef::Define: defineMembers.inSort(md); break; case MemberDef::Function:
if (Config::sortMembersFlag)
funcMembers.inSort(md);
else
funcMembers.append(md);
break;
case MemberDef::Typedef:
if (Config::sortMembersFlag)
typedefMembers.inSort(md);
else
typedefMembers.append(md);
break;
case MemberDef::Enumeration:
if (Config::sortMembersFlag)
enumMembers.inSort(md);
else
enumMembers.append(md);
break;
case MemberDef::EnumValue:
if (Config::sortMembersFlag)
enumValMembers.inSort(md);
else
enumValMembers.append(md);
break;
case MemberDef::Prototype:
if (Config::sortMembersFlag)
protoMembers.inSort(md);
else
protoMembers.append(md);
break;
case MemberDef::Define:
if (Config::sortMembersFlag)
defineMembers.inSort(md);
else
defineMembers.append(md);
break;
default: default:
err("FileDef::insertMembers(): unexpected member insert in file!\n"); err("FileDef::insertMembers(): unexpected member insert in file!\n");
} }
...@@ -158,6 +202,9 @@ void GroupDef::insertMember(MemberDef *md) ...@@ -158,6 +202,9 @@ void GroupDef::insertMember(MemberDef *md)
void GroupDef::addGroup(const GroupDef *def) void GroupDef::addGroup(const GroupDef *def)
{ {
if (Config::sortMembersFlag)
groupList->inSort(def);
else
groupList->append(def); groupList->append(def);
} }
...@@ -450,7 +497,7 @@ void addMemberToGroups(Entry *root,MemberDef *md) ...@@ -450,7 +497,7 @@ void addMemberToGroups(Entry *root,MemberDef *md)
GroupDef *gd=0; GroupDef *gd=0;
if (!s->isEmpty() && (gd=groupDict[*s])) if (!s->isEmpty() && (gd=groupDict[*s]))
{ {
GroupDef *mgd = md->groupDef(); GroupDef *mgd = md->getGroupDef();
if (mgd==0) if (mgd==0)
{ {
gd->insertMember(md); gd->insertMember(md);
......
...@@ -45,7 +45,7 @@ static const char *defaultStyleSheet = ...@@ -45,7 +45,7 @@ static const char *defaultStyleSheet =
"A.codeRef { font-weight: normal; color: #4444ee }\n" "A.codeRef { font-weight: normal; color: #4444ee }\n"
"DL.el { margin-left: -1cm }\n" "DL.el { margin-left: -1cm }\n"
"DIV.fragment { width: 100%; border: none; background-color: #eeeeee }\n" "DIV.fragment { width: 100%; border: none; background-color: #eeeeee }\n"
"DIV.in { margin-left: 16 }\n" //"DIV.in { margin-left: 16 }\n"
"DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }\n" "DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }\n"
"TD.md { background-color: #f2f2ff }\n" "TD.md { background-color: #f2f2ff }\n"
"DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold }\n" "DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold }\n"
...@@ -96,15 +96,10 @@ void HtmlGenerator::writeStyleSheetFile(QFile &file) ...@@ -96,15 +96,10 @@ void HtmlGenerator::writeStyleSheetFile(QFile &file)
QTextStream t(&file); QTextStream t(&file);
t << defaultStyleSheet; t << defaultStyleSheet;
} }
void HtmlGenerator::startFile(const char *name,const char *title,bool external)
static void writeDefaultHeaderFile(QTextStream &t,const char *title,
bool external)
{ {
QCString fileName=name;
lastTitle=title;
if (fileName.right(5)!=".html") fileName+=".html";
startPlainFile(fileName);
lastFile = fileName;
if (header.isEmpty())
{
t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n" t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
"<html><head><meta name=\"robots\" content=\"noindex\">\n" "<html><head><meta name=\"robots\" content=\"noindex\">\n"
"<meta http-equiv=\"Content-Type\" content=\"text/html;charset=" "<meta http-equiv=\"Content-Type\" content=\"text/html;charset="
...@@ -123,10 +118,49 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external) ...@@ -123,10 +118,49 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
else else
{ {
QFileInfo cssfi(Config::htmlStyleSheet); QFileInfo cssfi(Config::htmlStyleSheet);
if (!cssfi.exists())
{
err("Error: user specified HTML style sheet file does not exist!\n");
}
t << cssfi.fileName(); t << cssfi.fileName();
} }
t << "\" rel=\"stylesheet\" type=\"text/css\">\n" t << "\" rel=\"stylesheet\" type=\"text/css\">\n"
"</head><body bgcolor=\"#ffffff\">\n"; "</head><body bgcolor=\"#ffffff\">\n";
}
void HtmlGenerator::writeHeaderFile(QFile &file)
{
QTextStream t(&file);
writeDefaultHeaderFile(t,"$title",FALSE);
}
void HtmlGenerator::writeFooterFile(QFile &file)
{
QTextStream t(&file);
t << "<hr><address><small>\n";
t << "Generated at $datetime for $projectname ";
t << " by <a href=\"http://www.stack.nl/~dimitri/doxygen/index.html\">\n"
<< "<img src=\"doxygen.gif\" alt=\"doxygen\" "
<< "align=\"middle\" border=0 width=110 height=53>\n"
<< "</a> $doxygenversion written by"
<< " <a href=\"mailto:dimitri@stack.nl\">Dimitri van Heesch</a>,\n"
<< " &copy;&nbsp;1997-2000</small></address>\n"
<< "</body>\n"
<< "</html>\n";
}
void HtmlGenerator::startFile(const char *name,const char *title,bool external)
{
QCString fileName=name;
lastTitle=title;
if (fileName.right(5)!=".html") fileName+=".html";
startPlainFile(fileName);
lastFile = fileName;
if (header.isEmpty())
{
writeDefaultHeaderFile(t,title,external);
} }
else else
{ {
...@@ -190,13 +224,13 @@ void HtmlGenerator::writeFooter(int part,bool external) ...@@ -190,13 +224,13 @@ void HtmlGenerator::writeFooter(int part,bool external)
t << "src=\""; t << "src=\"";
} }
t << "doxygen.gif\" alt=\"doxygen\" " t << "doxygen.gif\" alt=\"doxygen\" "
<< "align=center border=0 " << endl << << "align=\"middle\" border=0 " << endl <<
"width=110 height=53></a>" << versionString <<" "; "width=110 height=53></a>" << versionString <<" ";
} }
break; break;
default: default:
if (footer.isEmpty()) if (footer.isEmpty())
t << " <a href=\"mailto:dimitri@stack.nl\">Dimitri van Heesch</a>,\n &copy; " t << " <a href=\"mailto:dimitri@stack.nl\">Dimitri van Heesch</a>,\n &copy;&nbsp;"
"1997-2000</small></address>\n</body>\n</html>\n"; "1997-2000</small></address>\n</body>\n</html>\n";
break; break;
...@@ -561,7 +595,15 @@ void HtmlGenerator::endColorFont() ...@@ -561,7 +595,15 @@ void HtmlGenerator::endColorFont()
void HtmlGenerator::writeFormula(const char *n,const char *text) void HtmlGenerator::writeFormula(const char *n,const char *text)
{ {
if (text && text[0]=='\\') t << "<p><center>" << endl; if (text && text[0]=='\\') t << "<p><center>" << endl;
t << "<img align=\"top\" src=\"" << n << "\">" << endl; t << "<img align=";
#if !defined(_WIN32)
t << "\"top\""; // assume Unix users use Netscape 4.x which does
// not seem to support align == "middle" :-((
#else
t << "\"middle\""; // assume Windows users use IE or HtmlHelp which only
// displays formulas nicely with align == "middle"
#endif
t << " src=\"" << n << "\">" << endl;
if (text && text[0]=='\\') t << "</center><p>" << endl; if (text && text[0]=='\\') t << "</center><p>" << endl;
} }
...@@ -899,7 +941,13 @@ void HtmlGenerator::endMemberGroup(bool) ...@@ -899,7 +941,13 @@ void HtmlGenerator::endMemberGroup(bool)
void HtmlGenerator::startIndent() void HtmlGenerator::startIndent()
{ {
// I really wanted to use CSS here to provide an indented section, but
// alas, Netscape is buggy enough to sometimes "forget" to end the
// indent cause a staircase effect where the indent continuously increases.
// It's back to abusing tables :-(
//t << "<div class=\"in\">" << endl; //t << "<div class=\"in\">" << endl;
t << "<table cellspacing=5 cellpadding=0 border=0>\n" t << "<table cellspacing=5 cellpadding=0 border=0>\n"
" <tr>\n" " <tr>\n"
" <td>\n" " <td>\n"
......
...@@ -31,6 +31,8 @@ class HtmlGenerator : public OutputGenerator ...@@ -31,6 +31,8 @@ class HtmlGenerator : public OutputGenerator
~HtmlGenerator(); ~HtmlGenerator();
static void init(); static void init();
static void writeStyleSheetFile(QFile &f); static void writeStyleSheetFile(QFile &f);
static void writeHeaderFile(QFile &f);
static void writeFooterFile(QFile &f);
OutputGenerator *copy() { return new HtmlGenerator; } OutputGenerator *copy() { return new HtmlGenerator; }
//OutputGenerator *clone() { return new HtmlGenerator(*this); } //OutputGenerator *clone() { return new HtmlGenerator(*this); }
......
...@@ -947,7 +947,7 @@ void writeMemberList(OutputList &ol) ...@@ -947,7 +947,7 @@ void writeMemberList(OutputList &ol)
//!md->isReference() && md->hasDocumentation() && //!md->isReference() && md->hasDocumentation() &&
// md->name()[0]!='@' && // md->name()[0]!='@' &&
md->isLinkableInProject() && md->isLinkableInProject() &&
(cd=md->memberClass()) && (cd=md->getClassDef()) &&
cd->isLinkableInProject() cd->isLinkableInProject()
) )
{ {
...@@ -968,7 +968,7 @@ void writeMemberList(OutputList &ol) ...@@ -968,7 +968,7 @@ void writeMemberList(OutputList &ol)
QCString prevName; QCString prevName;
while (md) while (md)
{ {
ClassDef *cd=md->memberClass(); ClassDef *cd=md->getClassDef();
if (//cd && (md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) && if (//cd && (md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) &&
//!md->isReference() && md->hasDocumentation() && //!md->isReference() && md->hasDocumentation() &&
md->isLinkableInProject() && md->isLinkableInProject() &&
...@@ -1009,10 +1009,10 @@ int countClassMembers() ...@@ -1009,10 +1009,10 @@ int countClassMembers()
{ {
if (//(md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) && if (//(md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) &&
//!md->isReference() && !md->isRelated() && md->hasDocumentation() && //!md->isReference() && !md->isRelated() && md->hasDocumentation() &&
//md->name()[0]!='@' && (cd=md->memberClass()) && cd->isLinkable()) //md->name()[0]!='@' && (cd=md->getClassDef()) && cd->isLinkable())
md->isLinkableInProject() && md->isLinkableInProject() &&
!md->isRelated() && !md->isRelated() &&
(cd=md->memberClass()) && (cd=md->getClassDef()) &&
cd->isLinkableInProject() cd->isLinkableInProject()
) )
{ {
...@@ -1025,10 +1025,10 @@ int countClassMembers() ...@@ -1025,10 +1025,10 @@ int countClassMembers()
// otherMd=md; // otherMd=md;
//if (//(md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) && //if (//(md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) &&
// //!md->isReference() && md->isRelated() && md->hasDocumentation() && // //!md->isReference() && md->isRelated() && md->hasDocumentation() &&
// //md->name()[0]!='@' && (cd=md->memberClass()) && cd->isLinkable() // //md->name()[0]!='@' && (cd=md->getClassDef()) && cd->isLinkable()
// md->isLinkableInProject() && // md->isLinkableInProject() &&
// md->isRelated() && // md->isRelated() &&
// (cd=md->memberClass()) && // (cd=md->getClassDef()) &&
// cd->isLinkableInProject() // cd->isLinkableInProject()
// ) // )
// found=TRUE; // found=TRUE;
...@@ -1073,10 +1073,9 @@ void writeFileMemberList(OutputList &ol) ...@@ -1073,10 +1073,9 @@ void writeFileMemberList(OutputList &ol)
bool found=FALSE; bool found=FALSE;
while (md && !found) while (md && !found)
{ {
FileDef *fd=md->getFileDef() ? md->getFileDef() : md->getFileDec(); FileDef *fd=md->getFileDef();
bool hasDocs = bool hasDocs = md->getFileDef() &&
(md->getFileDef() && md->getFileDef()->isLinkableInProject()) || md->getFileDef()->isLinkableInProject();
(md->getFileDec() && md->getFileDec()->isLinkableInProject());
if (fd && hasDocs && if (fd && hasDocs &&
md->isLinkableInProject() md->isLinkableInProject()
...@@ -1099,10 +1098,9 @@ void writeFileMemberList(OutputList &ol) ...@@ -1099,10 +1098,9 @@ void writeFileMemberList(OutputList &ol)
QCString prevName; QCString prevName;
while (md) while (md)
{ {
FileDef *fd=md->getFileDef() ? md->getFileDef() : md->getFileDec(); FileDef *fd=md->getFileDef();
bool hasDocs = bool hasDocs = md->getFileDef() &&
(md->getFileDef() && md->getFileDef()->isLinkableInProject()) || md->getFileDef()->isLinkableInProject();
(md->getFileDec() && md->getFileDec()->isLinkableInProject());
if (fd && hasDocs && if (fd && hasDocs &&
md->isLinkableInProject() && md->isLinkableInProject() &&
//!md->isReference() && //!md->isReference() &&
...@@ -1143,7 +1141,7 @@ void writeNamespaceMemberList(OutputList &ol) ...@@ -1143,7 +1141,7 @@ void writeNamespaceMemberList(OutputList &ol)
bool found=FALSE; bool found=FALSE;
while (md && !found) while (md && !found)
{ {
NamespaceDef *nd=md->getNamespace(); NamespaceDef *nd=md->getNamespaceDef();
if (nd && nd->isLinkableInProject() && md->isLinkableInProject()) if (nd && nd->isLinkableInProject() && md->isLinkableInProject())
found=TRUE; found=TRUE;
else else
...@@ -1161,7 +1159,7 @@ void writeNamespaceMemberList(OutputList &ol) ...@@ -1161,7 +1159,7 @@ void writeNamespaceMemberList(OutputList &ol)
QCString prevName; QCString prevName;
while (md) while (md)
{ {
NamespaceDef *nd=md->getNamespace(); NamespaceDef *nd=md->getNamespaceDef();
if (nd && nd->isLinkableInProject() && md->isLinkableInProject() && if (nd && nd->isLinkableInProject() && md->isLinkableInProject() &&
prevName!=nd->name() prevName!=nd->name()
) )
...@@ -1195,7 +1193,7 @@ int countNamespaceMembers() ...@@ -1195,7 +1193,7 @@ int countNamespaceMembers()
bool found=FALSE; bool found=FALSE;
while (md && !found) while (md && !found)
{ {
NamespaceDef *nd=md->getNamespace(); NamespaceDef *nd=md->getNamespaceDef();
if (nd && nd->isLinkableInProject() && md->isLinkableInProject()) if (nd && nd->isLinkableInProject() && md->isLinkableInProject())
found=TRUE; found=TRUE;
else else
...@@ -1221,10 +1219,8 @@ int countFileMembers() ...@@ -1221,10 +1219,8 @@ int countFileMembers()
while (md && !found) while (md && !found)
{ {
if (md->isLinkableInProject() && if (md->isLinkableInProject() &&
(((fd=md->getFileDef()) && fd->isLinkableInProject()) (fd=md->getFileDef()) &&
|| fd->isLinkableInProject()
((fd=md->getFileDec()) && fd->isLinkableInProject())
)
) )
found=TRUE; found=TRUE;
else else
...@@ -1243,8 +1239,6 @@ void writeFileMemberIndex(OutputList &ol) ...@@ -1243,8 +1239,6 @@ void writeFileMemberIndex(OutputList &ol)
if (documentedFunctions==0) return; if (documentedFunctions==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
//ol.disable(OutputGenerator::Man);
//ol.disable(OutputGenerator::Latex);
startFile(ol,"globals","File Member Index"); startFile(ol,"globals","File Member Index");
startTitle(ol,0); startTitle(ol,0);
parseText(ol,Config::projectName+" "+theTranslator->trFileMembers()); parseText(ol,Config::projectName+" "+theTranslator->trFileMembers());
...@@ -1252,8 +1246,6 @@ void writeFileMemberIndex(OutputList &ol) ...@@ -1252,8 +1246,6 @@ void writeFileMemberIndex(OutputList &ol)
parseText(ol,theTranslator->trFileMembersDescription(Config::extractAllFlag)); parseText(ol,theTranslator->trFileMembersDescription(Config::extractAllFlag));
writeFileMemberList(ol); writeFileMemberList(ol);
endFile(ol); endFile(ol);
//ol.enable(OutputGenerator::Latex);
//ol.enable(OutputGenerator::Man);
ol.popGeneratorState(); ol.popGeneratorState();
} }
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "translator_ru.h" #include "translator_ru.h"
#include "translator_hr.h" #include "translator_hr.h"
#include "translator_pl.h" #include "translator_pl.h"
#include "translator_pt.h"
#endif #endif
#define L_EQUAL(a) !stricmp(langName,a) #define L_EQUAL(a) !stricmp(langName,a)
...@@ -95,6 +96,10 @@ bool setTranslator(const char *langName) ...@@ -95,6 +96,10 @@ bool setTranslator(const char *langName)
{ {
theTranslator=new TranslatorPolish; theTranslator=new TranslatorPolish;
} }
else if (L_EQUAL("portuguese"))
{
theTranslator=new TranslatorPortuguese;
}
#endif #endif
else // use the default language (i.e. english) else // use the default language (i.e. english)
{ {
......
This diff is collapsed.
...@@ -29,6 +29,7 @@ class LatexGenerator : public OutputGenerator ...@@ -29,6 +29,7 @@ class LatexGenerator : public OutputGenerator
~LatexGenerator(); ~LatexGenerator();
static void init(); static void init();
static void writeStyleSheetFile(QFile &f); static void writeStyleSheetFile(QFile &f);
static void writeHeaderFile(QFile &f);
OutputGenerator *copy(); OutputGenerator *copy();
//OutputGenerator *clone() { return new LatexGenerator(*this); } //OutputGenerator *clone() { return new LatexGenerator(*this); }
...@@ -117,10 +118,10 @@ class LatexGenerator : public OutputGenerator ...@@ -117,10 +118,10 @@ class LatexGenerator : public OutputGenerator
void endEmphasis() { t << "}"; } void endEmphasis() { t << "}"; }
void startBold() { t << "{\\bf "; } void startBold() { t << "{\\bf "; }
void endBold() { t << "}"; } void endBold() { t << "}"; }
void startDescription() { t << "\\begin{description}" << endl; } void startDescription();
void endDescription() { t << "\\end{description}" << endl; } void endDescription();
void startDescItem() { t << "\\item["; } void startDescItem();
void endDescItem() { t << "]" << endl; } void endDescItem();
void lineBreak() { t << "\\par\n"; } void lineBreak() { t << "\\par\n"; }
void startMemberDoc(const char *,const char *,const char *,const char *); void startMemberDoc(const char *,const char *,const char *,const char *);
void endMemberDoc(); void endMemberDoc();
...@@ -236,6 +237,7 @@ class LatexGenerator : public OutputGenerator ...@@ -236,6 +237,7 @@ class LatexGenerator : public OutputGenerator
LatexGenerator &operator=(const LatexGenerator &); LatexGenerator &operator=(const LatexGenerator &);
int col; int col;
bool insideTabbing; bool insideTabbing;
bool firstDescItem;
}; };
#endif #endif
...@@ -236,7 +236,7 @@ MemberDef::MemberDef(const char *df,int dl, ...@@ -236,7 +236,7 @@ MemberDef::MemberDef(const char *df,int dl,
//printf("++++++ MemberDef(%s file=%s,line=%d) ++++++ \n",na,df,dl); //printf("++++++ MemberDef(%s file=%s,line=%d) ++++++ \n",na,df,dl);
classDef=0; classDef=0;
fileDef=0; fileDef=0;
fileDec=0; //fileDec=0;
redefines=0; redefines=0;
redefinedBy=0; redefinedBy=0;
nspace=0; nspace=0;
...@@ -392,10 +392,10 @@ QCString MemberDef::getOutputFileBase() const ...@@ -392,10 +392,10 @@ QCString MemberDef::getOutputFileBase() const
{ {
return fileDef->getOutputFileBase(); return fileDef->getOutputFileBase();
} }
else if (fileDec) //else if (fileDec)
{ //{
return fileDec->getOutputFileBase(); // return fileDec->getOutputFileBase();
} //}
else if (nspace) else if (nspace)
{ {
return nspace->getOutputFileBase(); return nspace->getOutputFileBase();
...@@ -703,10 +703,10 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -703,10 +703,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
{ {
//printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor()); //printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
annMemb->writeLink(ol, annMemb->writeLink(ol,
annMemb->memberClass(), annMemb->getClassDef(),
annMemb->getNamespace(), annMemb->getNamespaceDef(),
annMemb->getFileDef(), annMemb->getFileDef(),
annMemb->groupDef() annMemb->getGroupDef()
); );
annMemb->annUsed=annUsed=TRUE; annMemb->annUsed=annUsed=TRUE;
} }
...@@ -794,7 +794,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -794,7 +794,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
const char *scopeName) const char *scopeName)
{ {
if (memberClass()==0 && isStatic() && !Config::extractStaticFlag) return; if (getClassDef()==0 && isStatic() && !Config::extractStaticFlag) return;
bool hasDocs = detailsAreVisible(); bool hasDocs = detailsAreVisible();
//printf("MemberDef::writeDocumentation(): type=`%s' def=`%s'\n",type.data(),definition()); //printf("MemberDef::writeDocumentation(): type=`%s' def=`%s'\n",type.data(),definition());
if ( if (
...@@ -806,8 +806,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -806,8 +806,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
) )
{ {
// get definition. TODO: make a method of this // get definition. TODO: make a method of this
NamespaceDef *nd=getNamespace(); NamespaceDef *nd=getNamespaceDef();
ClassDef *cd=memberClass(); ClassDef *cd=getClassDef();
FileDef *fd=getFileDef(); FileDef *fd=getFileDef();
Definition *d = 0; Definition *d = 0;
if (cd) d=cd; else if (nd) d=nd; else d=fd; if (cd) d=cd; else if (nd) d=nd; else d=fd;
...@@ -1160,7 +1160,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1160,7 +1160,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
MemberDef *bmd=reimplements(); MemberDef *bmd=reimplements();
ClassDef *bcd=0; ClassDef *bcd=0;
if (bmd && (bcd=bmd->memberClass())) if (bmd && (bcd=bmd->getClassDef()))
{ {
#if 0 #if 0
if (lvirt!=Normal) // search for virtual member of the deepest base class if (lvirt!=Normal) // search for virtual member of the deepest base class
...@@ -1168,7 +1168,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1168,7 +1168,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
MemberDef *lastBmd=bmd; MemberDef *lastBmd=bmd;
while (lastBmd) while (lastBmd)
{ {
ClassDef *lastBcd = lastBmd->memberClass(); ClassDef *lastBcd = lastBmd->getClassDef();
if (lastBmd->virtualness()!=Normal && if (lastBmd->virtualness()!=Normal &&
lastBmd->isLinkable() && lastBmd->isLinkable() &&
lastBcd->isLinkable() lastBcd->isLinkable()
...@@ -1227,7 +1227,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1227,7 +1227,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
MemberDef *bmd=0; MemberDef *bmd=0;
uint count=0; uint count=0;
ClassDef *bcd=0; ClassDef *bcd=0;
for (mli.toFirst();(bmd=mli.current()) && (bcd=bmd->memberClass());++mli) for (mli.toFirst();(bmd=mli.current()) && (bcd=bmd->getClassDef());++mli)
{ {
// count the members that directly inherit from md and for // count the members that directly inherit from md and for
// which the member and class are visible in the docs. // which the member and class are visible in the docs.
...@@ -1253,7 +1253,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1253,7 +1253,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
count=0; count=0;
// find the entryIndex-th documented entry in the inheritance list. // find the entryIndex-th documented entry in the inheritance list.
for (mli.toLast();(bmd=mli.current()) && (bcd=bmd->memberClass());--mli) for (mli.toLast();(bmd=mli.current()) && (bcd=bmd->getClassDef());--mli)
{ {
if ( bmd->isLinkable() && bcd->isLinkable()) if ( bmd->isLinkable() && bcd->isLinkable())
{ {
...@@ -1310,10 +1310,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1310,10 +1310,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
void MemberDef::warnIfUndocumented() void MemberDef::warnIfUndocumented()
{ {
if (memberGroup) return; if (memberGroup) return;
ClassDef *cd = memberClass(); ClassDef *cd = getClassDef();
NamespaceDef *nd = getNamespace(); NamespaceDef *nd = getNamespaceDef();
FileDef *fd = getFileDef(); FileDef *fd = getFileDef();
GroupDef *gd = groupDef(); GroupDef *gd = getGroupDef();
Definition *d=0; Definition *d=0;
const char *t=0; const char *t=0;
if (cd) if (cd)
...@@ -1348,7 +1348,7 @@ bool MemberDef::isLinkable() ...@@ -1348,7 +1348,7 @@ bool MemberDef::isLinkable()
bool MemberDef::detailsAreVisible() const bool MemberDef::detailsAreVisible() const
{ {
return !documentation().isEmpty() || // has detailed docs return !documentation().isEmpty() || // has detailed docs
/*(Config::sourceBrowseFlag && startBodyLine!=-1 && bodyDef) || // has reference to sources */ (Config::sourceBrowseFlag && startBodyLine!=-1 && bodyDef) || // has reference to sources
(mtype==Enumeration && docEnumValues) || // has enum values (mtype==Enumeration && docEnumValues) || // has enum values
(mtype==EnumValue && !briefDescription().isEmpty()) || // is doc enum value (mtype==EnumValue && !briefDescription().isEmpty()) || // is doc enum value
(!briefDescription().isEmpty() && (!briefDescription().isEmpty() &&
...@@ -1385,7 +1385,7 @@ bool MemberDef::visibleMemberGroup(bool hideNoHeader) ...@@ -1385,7 +1385,7 @@ bool MemberDef::visibleMemberGroup(bool hideNoHeader)
QCString MemberDef::getScopeString() const QCString MemberDef::getScopeString() const
{ {
QCString result; QCString result;
if (memberClass()) result=memberClass()->name(); if (getClassDef()) result=getClassDef()->name();
else if (getNamespace()) result=getNamespace()->name(); else if (getNamespaceDef()) result=getNamespaceDef()->name();
return result; return result;
} }
...@@ -72,15 +72,6 @@ class MemberDef : public Definition ...@@ -72,15 +72,6 @@ class MemberDef : public Definition
const ArgumentList *al); const ArgumentList *al);
~MemberDef(); ~MemberDef();
void writeLink(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
void writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool inGroup);
void writeDocumentation(MemberList *ml,OutputList &ol,
const char *scopeName/*,MemberType m*/);
void warnIfUndocumented();
QCString getOutputFileBase() const; QCString getOutputFileBase() const;
const char *declaration() const { return decl; } const char *declaration() const { return decl; }
const char *definition() const { return def; } const char *definition() const { return def; }
...@@ -90,27 +81,49 @@ class MemberDef : public Definition ...@@ -90,27 +81,49 @@ class MemberDef : public Definition
const char *anchor() const { return anc; } const char *anchor() const { return anc; }
const QCString &initializer() const { return init; } const QCString &initializer() const { return init; }
int initializerLines() const { return initLines; } int initializerLines() const { return initLines; }
ClassDef *memberClass() const { return classDef; } int getMemberSpecifiers() const { return memSpec; }
MemberList *getSectionList() const { return section; }
// scope query members
ClassDef *getClassDef() const { return classDef; }
GroupDef *getGroupDef() const { return group; }
FileDef *getFileDef() const { return fileDef; }
NamespaceDef* getNamespaceDef() const { return nspace; }
// direct kind info
Protection protection() const { return prot; } Protection protection() const { return prot; }
Specifier virtualness() const { return virt; } Specifier virtualness() const { return virt; }
MemberType memberType() const { return mtype; } MemberType memberType() const { return mtype; }
GroupDef *groupDef() const { return group; }
FileDef *getFileDef() { return fileDef; } // convenience methods
FileDef *getFileDec() { return fileDec; } bool isSignal() const { return mtype==Signal; }
bool isSlot() const { return mtype==Slot; }
bool isVariable() const { return mtype==Variable; }
bool isEnumerate() const { return mtype==Enumeration; }
bool isEnumValue() const { return mtype==EnumValue; }
bool isTypedef() const { return mtype==Typedef; }
bool isFunction() const { return mtype==Function; }
bool isDefine() const { return mtype==Define; }
bool isFriend() const { return mtype==Friend; }
bool isRelated() const { return related; } bool isRelated() const { return related; }
bool isStatic() const { return stat; } bool isStatic() const { return stat; }
bool isInline() const { return (memSpec&Entry::Inline)!=0; } bool isInline() const { return (memSpec&Entry::Inline)!=0; }
bool isExplicit() const { return (memSpec&Entry::Explicit)!=0; } bool isExplicit() const { return (memSpec&Entry::Explicit)!=0; }
bool isMutable() const { return (memSpec&Entry::Mutable)!=0; } bool isMutable() const { return (memSpec&Entry::Mutable)!=0; }
MemberList *getSectionList() const { return section; }
// output info
bool isLinkableInProject();
bool isLinkable();
bool detailsAreVisible() const;
bool hasDocumentation(); // overrides hasDocumentation in definition.h
// set functions
void setMemberType(MemberType t) { mtype=t; } void setMemberType(MemberType t) { mtype=t; }
void setDefinition(const char *d) { def=d; } void setDefinition(const char *d) { def=d; }
void setFileDef(FileDef *fd) { fileDef=fd; } void setFileDef(FileDef *fd) { fileDef=fd; }
void setFileDec(FileDef *fd) { fileDec=fd; }
void setAnchor(const char *a) { anc=a; } void setAnchor(const char *a) { anc=a; }
void setProtection(Protection p) { prot=p; } void setProtection(Protection p) { prot=p; }
void setMemberSpecifiers(int s) { memSpec=s; } void setMemberSpecifiers(int s) { memSpec=s; }
int getMemberSpecifiers() const { return memSpec; }
void mergeMemberSpecifiers(int s) { memSpec|=s; } void mergeMemberSpecifiers(int s) { memSpec|=s; }
void setInitializer(const char *i) { init=i; void setInitializer(const char *i) { init=i;
init=init.stripWhiteSpace(); init=init.stripWhiteSpace();
...@@ -119,13 +132,20 @@ class MemberDef : public Definition ...@@ -119,13 +132,20 @@ class MemberDef : public Definition
void setMaxInitLines(int lines) { if (lines!=-1) maxInitLines=lines; } void setMaxInitLines(int lines) { if (lines!=-1) maxInitLines=lines; }
void setMemberClass(ClassDef *cd) { classDef=cd; } void setMemberClass(ClassDef *cd) { classDef=cd; }
void setSectionList(MemberList *sl) { section=sl; } void setSectionList(MemberList *sl) { section=sl; }
void makeRelated() { related=TRUE; }
void setGroupDef(GroupDef *gd) { group=gd; } void setGroupDef(GroupDef *gd) { group=gd; }
bool hasDocumentation(); // overrides hasDocumentation in definition.h
bool isLinkableInProject();
bool isLinkable();
bool detailsAreVisible() const; void makeRelated() { related=TRUE; }
// output generatation
void writeLink(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
void writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool inGroup);
void writeDocumentation(MemberList *ml,OutputList &ol,
const char *scopeName/*,MemberType m*/);
void warnIfUndocumented();
// relation to other members // relation to other members
void setReimplements(MemberDef *md) { redefines=md; } void setReimplements(MemberDef *md) { redefines=md; }
void insertReimplementedBy(MemberDef *md); void insertReimplementedBy(MemberDef *md);
...@@ -148,20 +168,9 @@ class MemberDef : public Definition ...@@ -148,20 +168,9 @@ class MemberDef : public Definition
// example related members // example related members
bool addExample(const char *anchor,const char *name,const char *file); bool addExample(const char *anchor,const char *name,const char *file);
//void writeExample(OutputList &ol);
bool hasExamples(); bool hasExamples();
ExampleList *getExampleList() const { return exampleList; } ExampleList *getExampleList() const { return exampleList; }
// convenience members
bool isSignal() const { return mtype==Signal; }
bool isSlot() const { return mtype==Slot; }
bool isVariable() const { return mtype==Variable; }
bool isEnumerate() const { return mtype==Enumeration; }
bool isEnumValue() const { return mtype==EnumValue; }
bool isTypedef() const { return mtype==Typedef; }
bool isFunction() const { return mtype==Function; }
bool isDefine() const { return mtype==Define; }
bool isFriend() const { return mtype==Friend; }
// prototype related members // prototype related members
void setPrototype(bool p) { proto=p; } void setPrototype(bool p) { proto=p; }
...@@ -178,10 +187,8 @@ class MemberDef : public Definition ...@@ -178,10 +187,8 @@ class MemberDef : public Definition
ArgumentList *scopeDefTemplateArguments() const { return scopeTAL; } ArgumentList *scopeDefTemplateArguments() const { return scopeTAL; }
void setMemberDefTemplateArguments(ArgumentList *t); void setMemberDefTemplateArguments(ArgumentList *t);
ArgumentList *memberDefTemplateArguments() const { return membTAL; } ArgumentList *memberDefTemplateArguments() const { return membTAL; }
//QCString getScopeTemplateNameString();
// namespace related members // namespace related members
NamespaceDef *getNamespace() const { return nspace; }
void setNamespace(NamespaceDef *nd) { nspace=nd; } void setNamespace(NamespaceDef *nd) { nspace=nd; }
// member group related members // member group related members
...@@ -190,6 +197,7 @@ class MemberDef : public Definition ...@@ -190,6 +197,7 @@ class MemberDef : public Definition
void setMemberGroupId(int id) { grpId=id; } void setMemberGroupId(int id) { grpId=id; }
int getMemberGroupId() const { return grpId; } int getMemberGroupId() const { return grpId; }
// annonymous scope members
void setFromAnnonymousScope(bool b) { annScope=b; } void setFromAnnonymousScope(bool b) { annScope=b; }
void setFromAnnonymousMember(MemberDef *m) { annMemb=m; } void setFromAnnonymousMember(MemberDef *m) { annMemb=m; }
bool fromAnnonymousScope() const { return annScope; } bool fromAnnonymousScope() const { return annScope; }
...@@ -204,7 +212,6 @@ class MemberDef : public Definition ...@@ -204,7 +212,6 @@ class MemberDef : public Definition
private: private:
ClassDef *classDef; // member of or related to ClassDef *classDef; // member of or related to
FileDef *fileDef; // member of file definition FileDef *fileDef; // member of file definition
FileDef *fileDec; // member of file declaration
MemberDef *redefines; // the member that is redefined by this one MemberDef *redefines; // the member that is redefined by this one
MemberDef *enumScope; // the enclosing scope, if this is an enum field MemberDef *enumScope; // the enclosing scope, if this is an enum field
MemberDef *annEnumType; // the annonymous enum that is the type of this member MemberDef *annEnumType; // the annonymous enum that is the type of this member
...@@ -225,8 +232,6 @@ class MemberDef : public Definition ...@@ -225,8 +232,6 @@ class MemberDef : public Definition
QCString declFile; // file where the declaration was found QCString declFile; // file where the declaration was found
int declLine; // line where the declaration was found int declLine; // line where the declaration was found
QCString def; // member definition in code (fully qualified name) QCString def; // member definition in code (fully qualified name)
//QCString defFile; // file where the definition was found
//int defLine; // line where the definition was found
QCString anc; // HTML anchor name QCString anc; // HTML anchor name
Specifier virt; // normal/virtual/pure virtual Specifier virt; // normal/virtual/pure virtual
Protection prot; // protection type [Public/Protected/Private] Protection prot; // protection type [Public/Protected/Private]
...@@ -237,10 +242,10 @@ class MemberDef : public Definition ...@@ -237,10 +242,10 @@ class MemberDef : public Definition
bool eUsed; // is the enumerate already placed in a list bool eUsed; // is the enumerate already placed in a list
bool proto; // is it a prototype; bool proto; // is it a prototype;
bool docEnumValues; // is an enum with documented enum values. bool docEnumValues; // is an enum with documented enum values.
bool annScope; bool annScope; // member is part of an annoymous scope
bool annUsed; bool annUsed;
bool annShown; bool annShown;
int indDepth; int indDepth; // indentation depth for this member if inside an annonymous scope
int maxInitLines; // when the initializer will be displayed int maxInitLines; // when the initializer will be displayed
MemberList *section; // declation list containing this member MemberList *section; // declation list containing this member
MemberDef *annMemb; MemberDef *annMemb;
...@@ -249,7 +254,6 @@ class MemberDef : public Definition ...@@ -249,7 +254,6 @@ class MemberDef : public Definition
ArgumentList *scopeTAL; // template argument list of class template ArgumentList *scopeTAL; // template argument list of class template
ArgumentList *membTAL; // template argument list of class template ArgumentList *membTAL; // template argument list of class template
int grpId; // group id int grpId; // group id
//QCString grpHeader; // group header
MemberGroup *memberGroup; // group's member definition MemberGroup *memberGroup; // group's member definition
GroupDef *group; // group in which this member is in GroupDef *group; // group in which this member is in
......
...@@ -54,7 +54,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe ...@@ -54,7 +54,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe
{ {
//printf("md=%p md->name()=`%s' inGroup=%d getMemberGroup()=%p\n", //printf("md=%p md->name()=`%s' inGroup=%d getMemberGroup()=%p\n",
// md,md->name().data(),inGroup,md->getMemberGroup()); // md,md->name().data(),inGroup,md->getMemberGroup());
if (!(md->memberClass()==0 && md->isStatic() && !Config::extractStaticFlag) && if (!(md->getClassDef()==0 && md->isStatic() && !Config::extractStaticFlag) &&
(!Config::hideMemberFlag || md->hasDocumentation()) && (!Config::hideMemberFlag || md->hasDocumentation()) &&
( (
(!Config::hideMemberFlag || !md->documentation().isEmpty() || (!Config::hideMemberFlag || !md->documentation().isEmpty() ||
...@@ -73,7 +73,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe ...@@ -73,7 +73,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe
case MemberDef::Variable: varCnt++,m_count++; break; case MemberDef::Variable: varCnt++,m_count++; break;
case MemberDef::Function: // fall through case MemberDef::Function: // fall through
case MemberDef::Signal: // fall through case MemberDef::Signal: // fall through
case MemberDef::Slot: if (!md->isRelated() || md->memberClass()) case MemberDef::Slot: if (!md->isRelated() || md->getClassDef())
funcCnt++,m_count++; funcCnt++,m_count++;
break; break;
case MemberDef::Enumeration: enumCnt++,m_count++; break; case MemberDef::Enumeration: enumCnt++,m_count++; break;
...@@ -119,7 +119,7 @@ void MemberList::countDocMembers() ...@@ -119,7 +119,7 @@ void MemberList::countDocMembers()
//printf("%s MemberList::countDocMembers() details=%d\n", //printf("%s MemberList::countDocMembers() details=%d\n",
// md->name().data(),md->detailsAreVisible()); // md->name().data(),md->detailsAreVisible());
bool visibleIfStatic = bool visibleIfStatic =
!(md->memberClass()==0 && md->isStatic() && !Config::extractStaticFlag); !(md->getClassDef()==0 && md->isStatic() && !Config::extractStaticFlag);
if (visibleIfStatic && if (visibleIfStatic &&
(Config::extractAllFlag || md->detailsAreVisible()) (Config::extractAllFlag || md->detailsAreVisible())
...@@ -410,7 +410,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -410,7 +410,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
{ {
if ( if (
( md->isFunction() || md->isSignal() || md->isSlot()) && ( md->isFunction() || md->isSignal() || md->isSlot()) &&
( !md->isRelated() || md->memberClass() ) && ( !md->isRelated() || md->getClassDef() ) &&
inGroup==md->visibleMemberGroup(sectionPerType) inGroup==md->visibleMemberGroup(sectionPerType)
) )
{ {
......
...@@ -33,8 +33,8 @@ int MemberName::compareItems(GCI item1, GCI item2) ...@@ -33,8 +33,8 @@ int MemberName::compareItems(GCI item1, GCI item2)
{ {
MemberDef *m1=(MemberDef *)item1; MemberDef *m1=(MemberDef *)item1;
MemberDef *m2=(MemberDef *)item2; MemberDef *m2=(MemberDef *)item2;
ClassDef *c1=m1->memberClass(); ClassDef *c1=m1->getClassDef();
ClassDef *c2=m2->memberClass(); ClassDef *c2=m2->getClassDef();
FileDef *f1=m1->getFileDef(); FileDef *f1=m1->getFileDef();
FileDef *f2=m2->getFileDef(); FileDef *f2=m2->getFileDef();
if (c1 && c2) if (c1 && c2)
...@@ -55,8 +55,8 @@ int MemberNameInfo::compareItems(GCI item1, GCI item2) ...@@ -55,8 +55,8 @@ int MemberNameInfo::compareItems(GCI item1, GCI item2)
{ {
MemberInfo *m1=(MemberInfo *)item1; MemberInfo *m1=(MemberInfo *)item1;
MemberInfo *m2=(MemberInfo *)item2; MemberInfo *m2=(MemberInfo *)item2;
ClassDef *c1=m1->memberDef->memberClass(); ClassDef *c1=m1->memberDef->getClassDef();
ClassDef *c2=m2->memberDef->memberClass(); ClassDef *c2=m2->memberDef->getClassDef();
FileDef *f1=m1->memberDef->getFileDef(); FileDef *f1=m1->memberDef->getFileDef();
FileDef *f2=m2->memberDef->getFileDef(); FileDef *f2=m2->memberDef->getFileDef();
if (c1 && c2) if (c1 && c2)
......
...@@ -66,13 +66,22 @@ void NamespaceDef::distributeMemberGroupDocumentation() ...@@ -66,13 +66,22 @@ void NamespaceDef::distributeMemberGroupDocumentation()
} }
void NamespaceDef::insertUsedFile(const char *f) void NamespaceDef::insertUsedFile(const char *f)
{ {
if (files.find(f)==-1) files.append(f); if (files.find(f)==-1)
{
if (Config::sortMembersFlag)
files.inSort(f);
else
files.append(f);
}
} }
void NamespaceDef::insertClass(ClassDef *cd) void NamespaceDef::insertClass(ClassDef *cd)
{ {
if (classDict->find(cd->name())==0) if (classDict->find(cd->name())==0)
{ {
if (Config::sortMembersFlag)
classList->inSort(cd);
else
classList->append(cd); classList->append(cd);
classDict->insert(cd->name(),cd); classDict->insert(cd->name(),cd);
} }
...@@ -121,13 +130,48 @@ void NamespaceDef::insertMember(MemberDef *md) ...@@ -121,13 +130,48 @@ void NamespaceDef::insertMember(MemberDef *md)
allMemberList.append(md); allMemberList.append(md);
switch(md->memberType()) switch(md->memberType())
{ {
case MemberDef::Variable: varMembers.inSort(md); break; case MemberDef::Variable:
case MemberDef::Function: funcMembers.inSort(md); break; if (Config::sortMembersFlag)
case MemberDef::Typedef: typedefMembers.inSort(md); break; varMembers.inSort(md);
case MemberDef::Enumeration: enumMembers.inSort(md); break; else
case MemberDef::EnumValue: enumValMembers.inSort(md); break; varMembers.append(md);
case MemberDef::Prototype: protoMembers.inSort(md); break; break;
case MemberDef::Define: defineMembers.inSort(md); break; case MemberDef::Function:
if (Config::sortMembersFlag)
funcMembers.inSort(md);
else
funcMembers.append(md);
break;
case MemberDef::Typedef:
if (Config::sortMembersFlag)
typedefMembers.inSort(md);
else
typedefMembers.append(md);
break;
case MemberDef::Enumeration:
if (Config::sortMembersFlag)
enumMembers.inSort(md);
else
enumMembers.append(md);
break;
case MemberDef::EnumValue:
if (Config::sortMembersFlag)
enumValMembers.inSort(md);
else
enumValMembers.append(md);
break;
case MemberDef::Prototype:
if (Config::sortMembersFlag)
protoMembers.inSort(md);
else
protoMembers.append(md);
break;
case MemberDef::Define:
if (Config::sortMembersFlag)
defineMembers.inSort(md);
else
defineMembers.append(md);
break;
default: default:
err("NamespaceDef::insertMembers(): unexpected member inserted in namespace!\n"); err("NamespaceDef::insertMembers(): unexpected member inserted in namespace!\n");
} }
......
...@@ -51,8 +51,6 @@ ...@@ -51,8 +51,6 @@
#define YY_NEVER_INTERACTIVE 1 #define YY_NEVER_INTERACTIVE 1
#define DUMP_OUTPUT 1 // set this to one to see what the preprocessor
// produces.
#define SHOW_INCLUDES 0 // set this to one to list all parsed include files #define SHOW_INCLUDES 0 // set this to one to list all parsed include files
struct FileState struct FileState
...@@ -590,10 +588,10 @@ static void expandExpression(QCString &expr,QCString *rest,int pos) ...@@ -590,10 +588,10 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
if (g_expandedDict->find(macroName)==0) // expand macro if (g_expandedDict->find(macroName)==0) // expand macro
{ {
Define *def=isDefined(macroName); Define *def=isDefined(macroName);
//printf("name is not an expanded macro def=%s\n",def ? def->name.data() : 0);
if (def && def->nargs==-1) // simple macro if (def && def->nargs==-1) // simple macro
{ {
// substitute the definition of the macro // substitute the definition of the macro
//printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data());
expMacro=def->definition.stripWhiteSpace(); expMacro=def->definition.stripWhiteSpace();
replaced=TRUE; replaced=TRUE;
len=l; len=l;
...@@ -774,6 +772,7 @@ Define *newDefine() ...@@ -774,6 +772,7 @@ Define *newDefine()
def->fileName = g_yyFileName; def->fileName = g_yyFileName;
def->lineNr = g_yyLineNr; def->lineNr = g_yyLineNr;
def->varArgs = g_defVarArgs; def->varArgs = g_defVarArgs;
//printf("newDefine: `%s'->`%s'\n",def->name.data(),def->definition.data());
if (!def->name.isEmpty() && expandAsDefinedDict[def->name]) if (!def->name.isEmpty() && expandAsDefinedDict[def->name])
{ {
def->isPredefined=TRUE; def->isPredefined=TRUE;
...@@ -1520,7 +1519,7 @@ BN [ \t\r\n] ...@@ -1520,7 +1519,7 @@ BN [ \t\r\n]
g_defLitText+=yytext; g_defLitText+=yytext;
outputChar('\n'); outputChar('\n');
Define *def=0; Define *def=0;
//printf("Define name=`%s' text=`%s'\n",g_defName.data(),g_defText.data()); //printf("Define name=`%s' text=`%s' litTexti=`%s'\n",g_defName.data(),g_defText.data(),g_defLitText.data());
if (g_includeStack.isEmpty()) if (g_includeStack.isEmpty())
{ {
addDefine(); addDefine();
...@@ -1528,10 +1527,12 @@ BN [ \t\r\n] ...@@ -1528,10 +1527,12 @@ BN [ \t\r\n]
def=g_fileDefineDict->find(g_defName); def=g_fileDefineDict->find(g_defName);
if (def==0) // new define if (def==0) // new define
{ {
//printf("new define!\n");
g_fileDefineDict->insert(g_defName,newDefine()); g_fileDefineDict->insert(g_defName,newDefine());
} }
else if (def)// name already exists else if (def)// name already exists
{ {
//printf("existing define!\n");
//printf("define found\n"); //printf("define found\n");
if (def->undef) // undefined name if (def->undef) // undefined name
{ {
...@@ -1860,23 +1861,21 @@ void preprocessFile(const char *fileName,BufStr &output) ...@@ -1860,23 +1861,21 @@ void preprocessFile(const char *fileName,BufStr &output)
else else
pclose(preYYin); pclose(preYYin);
//#if DUMP_OUTPUT
if (Debug::isFlagSet(Debug::Preprocessor)) if (Debug::isFlagSet(Debug::Preprocessor))
{ {
char *orgPos=output.data()+orgOffset; char *orgPos=output.data()+orgOffset;
char *newPos=output.data()+output.curPos(); char *newPos=output.data()+output.curPos();
printf("Preprocessor output (size: %d bytes):\n",newPos-orgPos); msg("Preprocessor output (size: %d bytes):\n",newPos-orgPos);
int line=1; int line=1;
printf("---------\n00001 "); msg("---------\n00001 ");
while (orgPos<newPos) while (orgPos<newPos)
{ {
putchar(*orgPos); putchar(*orgPos);
if (*orgPos=='\n') printf("%05d ",++line); if (*orgPos=='\n') printf("%05d ",++line);
orgPos++; orgPos++;
} }
printf("\n---------\n"); msg("\n---------\n");
} }
//#endif
} }
extern "C" { // some bogus code to keep the compiler happy extern "C" { // some bogus code to keep the compiler happy
......
...@@ -650,7 +650,7 @@ void RTFGenerator::startIndexSection(IndexSections is) ...@@ -650,7 +650,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
bool found=FALSE; bool found=FALSE;
while (gd && !found) while (gd && !found)
{ {
if (gd->isLinkableInProject() || gd->countMembers()>0) if (gd->countMembers()>0)
{ {
beginRTFChapter(); beginRTFChapter();
found=TRUE; found=TRUE;
...@@ -666,7 +666,7 @@ void RTFGenerator::startIndexSection(IndexSections is) ...@@ -666,7 +666,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
bool found=FALSE; bool found=FALSE;
while (nd && !found) while (nd && !found)
{ {
if (nd->isLinkableInProject()) if (nd->isLinkableInProject() && nd->countMembers()>0)
{ {
beginRTFChapter(); beginRTFChapter();
found=TRUE; found=TRUE;
...@@ -840,7 +840,7 @@ void RTFGenerator::endIndexSection(IndexSections is) ...@@ -840,7 +840,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
bool found=FALSE; bool found=FALSE;
while (nd && !found) while (nd && !found)
{ {
if (nd->isLinkableInProject() || nd->countMembers()>0) if (nd->isLinkableInProject() && nd->countMembers()>0)
{ {
t << "\\par " << Rtf_Style["Reset"] << endl; t << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
...@@ -852,7 +852,7 @@ void RTFGenerator::endIndexSection(IndexSections is) ...@@ -852,7 +852,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
} }
while (nd) while (nd)
{ {
if (nd->isLinkableInProject() || nd->countMembers()>0) if (nd->isLinkableInProject() && nd->countMembers()>0)
{ {
t << "\\par " << Rtf_Style["Reset"] << endl; t << "\\par " << Rtf_Style["Reset"] << endl;
beginRTFSection(); beginRTFSection();
......
...@@ -2449,7 +2449,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -2449,7 +2449,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
lineCount(); lineCount();
BEGIN( CompoundName ); BEGIN( CompoundName );
} }
<FindMembers>{B}*("disp")?"interface"{BN}+ { // M$/Corba IDL interface <FindMembers>{B}*((("disp")?"interface")|"valuetype"){BN}+ { // M$/Corba IDL interface
isTypedef=FALSE; isTypedef=FALSE;
current->section = Entry::INTERFACE_SEC; current->section = Entry::INTERFACE_SEC;
addType( current ) ; addType( current ) ;
...@@ -3157,6 +3157,8 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -3157,6 +3157,8 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
//printf("adding `%s' `%s' `%s' to enum `%s' (mGrpId=%d)\n", //printf("adding `%s' `%s' `%s' to enum `%s' (mGrpId=%d)\n",
// current->type.data(), current->name.data(), // current->type.data(), current->name.data(),
// current->args.data(), current_root->name.data(),current->mGrpId); // current->args.data(), current_root->name.data(),current->mGrpId);
if (!current->name.isEmpty())
{
current->fileName = yyFileName; current->fileName = yyFileName;
current->startLine = yyLineNr; current->startLine = yyLineNr;
current->type = "@"; // enum marker current->type = "@"; // enum marker
...@@ -3176,6 +3178,11 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -3176,6 +3178,11 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
current->slot = slot; current->slot = slot;
current->mGrpId = memberGroupId; current->mGrpId = memberGroupId;
} }
else // probably a redundant ,
{
current->reset();
}
}
/* /*
<FindFieldArg>"," { unput(*yytext); BEGIN(FindFields); } <FindFieldArg>"," { unput(*yytext); BEGIN(FindFields); }
*/ */
......
This diff is collapsed.
...@@ -583,10 +583,119 @@ class TranslatorDutch : public Translator ...@@ -583,10 +583,119 @@ class TranslatorDutch : public Translator
return "Static Private Attributen"; return "Static Private Attributen";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a todo item */
QCString trTodo()
{
return "Todo";
}
/*! Used as the header of the todo list */
QCString trTodoList()
{
return "Todo Lijst";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.4
//////////////////////////////////////////////////////////////////////////
QCString trReferencedBy()
{
return "Wordt aangeroepen door";
}
QCString trRemarks()
{
return "Opmerkingen";
}
QCString trAttention()
{
return "Attentie";
}
QCString trInclByDepGraph()
{
return "Deze graaf geeft aan welke files direct of "
"indirect afhankelijk zijn van deze file:";
}
QCString trSince()
{
return "Sinds";
}
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 1.1.1 // new since 1.1.5
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! title of the graph legend page */
QCString trLegendTitle()
{
return "Graaf Legenda";
}
/*! page explaining how the dot graph's should be interpreted */
QCString trLegendDocs()
{
return
"Deze pagina legt uit hoe de grafen die gegenereerd worden door doxygen "
"ge&iuml;nterpreteerd dienen te worden.<p>\n"
"Beschouw het volgende voorbeeld:\n"
"\\code\n"
"/*! Onzichtbare klasse vanwege afkappen van de graaf */\n"
"class Invisible { };\n\n"
"/*! Afgekapte klasse, overervingsrelatie is verborgen */\n"
"class Truncated : public Invisible { };\n\n"
"/* Klasse is niet gedocumenteerd met doxygen commentaar */\n"
"class Undocumented { };\n\n"
"/*! Klasse met public inheritance */\n"
"class PublicBase : public Truncated { };\n\n"
"/*! Klasse met protected inheritance */\n"
"class ProtectedBase { };\n\n"
"/*! Klasse met private inheritance */\n"
"class PrivateBase { };\n\n"
"/*! Klasse die wordt gebruikt door de klasse Inherited */\n"
"class Used { };\n\n"
"/*! Super klasse die overerft van een aantal andere klassen */\n"
"class Inherited : public PublicBase,\n"
" protected ProtectedBase,\n"
" private PrivateBase,\n"
" public Undocumented\n"
"{\n"
" private:\n"
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"Als de \\c MAX_DOT_GRAPH_HEIGHT tag in the configuratie file "
"op 200 gezet is, zal het bestaande voorbeeld resulteren in de volgende graaf:"
"<p><center><img src=\"graph_legend.gif\"></center>\n"
"<p>\n"
"De rechthoeken in the bovenstaande graaf hebben de volgende betekenis:\n"
"<ul>\n"
"<li>Een gevulde zwarte rechthoek representeert de structure of klasse waarvoor "
"de graaf is gegeneerd.\n"
"<li>Een rechthoek met een zwarte rand representeert een gedocumenteerde structure of klasse.\n"
"<li>Een rechthoek met een grijze rand representeert een ongedocumenteerde structure of klasse.\n"
"<li>Een rechthoek met een rode rand representeert een gedocumenteerde structure or klasse waarvoor\n"
"niet alle overervings- of gebruiksrelaties konden worden getoond. Een graaf wordt "
"afgekapt als hij niet past binnen de gespecificeerde grenzen."
"</ul>\n"
"De pijlen hebben de volgende betekenis:\n"
"<ul>\n"
"<li>Een donkerblauwe pijl visualizeert een public inheritance "
"relatie tussen twee klassen.\n"
"<li>Een donkergroene pijl wordt gebruikt voor protected inheritance.\n"
"<li>Een donkerrode pijl wordt gebruikt voor private inheritance.\n"
"<li>Een paars gestreepte pijl wordt gebruikt indien een klasse bevat is of gebruikt wordt "
"door een andere klasse. De pijl is gelabeled met de variable(n) "
"die toegang geven tot de aangewezen klasse of structure. \n"
"</ul>\n";
}
/*! text for the link to the legend page */
QCString trLegend()
{
return "legenda";
}
}; };
#endif #endif
This diff is collapsed.
...@@ -300,13 +300,19 @@ QCString removeRedundantWhiteSpace(const QCString &s) ...@@ -300,13 +300,19 @@ QCString removeRedundantWhiteSpace(const QCString &s)
for (i=0;i<l;i++) for (i=0;i<l;i++)
{ {
char c=s.at(i); char c=s.at(i);
if (i<l-2 && c=='<' && (isId(s.at(i+1)) || isspace(s.at(i+1)))) if (i<l-2 && c=='<' && // current char is a <
(isId(s.at(i+1)) || isspace(s.at(i+1))) && // next char is a id char or space
(i<8 || s.mid(i-8,8)!="operator") // string in front is not "operator"
)
{ {
result+="< "; result+="< "; // insert extra space for layouting (nested) templates
} }
else if (i>0 && c=='>' && (isId(s.at(i-1)) || isspace(s.at(i-1)))) else if (i>0 && c=='>' && // current char is a >
(isId(s.at(i-1)) || isspace(s.at(i-1))) && // prev char is a id char or space
(i<8 || s.mid(i-8,8)!="operator") // string in front is not "operator"
)
{ {
result+=" >"; result+=" >"; // insert extra space for layouting (nested) templates
} }
else if (c!=' ' || else if (c!=' ' ||
(i!=0 && i!=l-1 && isId(s.at(i-1)) && isId(s.at(i+1))) (i!=0 && i!=l-1 && isId(s.at(i-1)) && isId(s.at(i+1)))
...@@ -1480,7 +1486,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1480,7 +1486,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf("Trying class scope %s\n",className.data()); //printf("Trying class scope %s\n",className.data());
ClassDef *fcd=0; ClassDef *fcd=0;
if ((fcd=getClass(className)) && // is it a documented class if ((fcd=getResolvedClass(className)) && // is it a documented class
fcd->isLinkable() fcd->isLinkable()
) )
{ {
...@@ -1501,7 +1507,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1501,7 +1507,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf("match=%d\n",match); //printf("match=%d\n",match);
if (match) if (match)
{ {
ClassDef *mcd=mmd->memberClass(); ClassDef *mcd=mmd->getClassDef();
int m=minClassDistance(fcd,mcd); int m=minClassDistance(fcd,mcd);
if (m<mdist && mcd->isLinkable()) if (m<mdist && mcd->isLinkable())
{ {
...@@ -1533,7 +1539,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1533,7 +1539,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
mmd->isLinkable() mmd->isLinkable()
) )
{ {
ClassDef *mcd=mmd->memberClass(); ClassDef *mcd=mmd->getClassDef();
//printf(" >Class %s found\n",mcd->name().data()); //printf(" >Class %s found\n",mcd->name().data());
int m=minClassDistance(fcd,mcd); int m=minClassDistance(fcd,mcd);
if (m<mdist && mcd->isLinkable()) if (m<mdist && mcd->isLinkable())
...@@ -1594,9 +1600,9 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1594,9 +1600,9 @@ bool getDefs(const QCString &scName,const QCString &memberName,
MemberDef *mmd=mn->first(); MemberDef *mmd=mn->first();
while (mmd && !found) while (mmd && !found)
{ {
//printf("mmd->getNamespace()=%p fnd=%p\n", //printf("mmd->getNamespaceDef()=%p fnd=%p\n",
// mmd->getNamespace(),fnd); // mmd->getNamespaceDef(),fnd);
if (mmd->getNamespace()==fnd && if (mmd->getNamespaceDef()==fnd &&
//(mmd->isReference() || mmd->hasDocumentation()) //(mmd->isReference() || mmd->hasDocumentation())
mmd->isLinkable() mmd->isLinkable()
) )
...@@ -1630,7 +1636,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1630,7 +1636,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
// the first defined! // the first defined!
while (mmd && !found) while (mmd && !found)
{ {
if (mmd->getNamespace()==fnd && if (mmd->getNamespaceDef()==fnd &&
//(mmd->isReference() || mmd->hasDocumentation()) //(mmd->isReference() || mmd->hasDocumentation())
mmd->isLinkable() mmd->isLinkable()
) )
...@@ -1646,14 +1652,14 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1646,14 +1652,14 @@ bool getDefs(const QCString &scName,const QCString &memberName,
} }
else // no scope => global function else // no scope => global function
{ {
//printf("Function with global scope `%s'\n",namespaceName.data()); //printf("Function with global scope `%s' args=`%s'\n",namespaceName.data(),args);
md=mn->first(); md=mn->first();
while (md) while (md)
{ {
if (md->isLinkable()) if (md->isLinkable())
{ {
fd=md->getFileDef(); fd=md->getFileDef();
gd=md->groupDef(); gd=md->getGroupDef();
//printf("md->name()=`%s' md->args=`%s' fd=%p gd=%p\n", //printf("md->name()=`%s' md->args=`%s' fd=%p gd=%p\n",
// md->name().data(),args,fd,gd); // md->name().data(),args,fd,gd);
bool inGroup=FALSE; bool inGroup=FALSE;
...@@ -1688,13 +1694,14 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1688,13 +1694,14 @@ bool getDefs(const QCString &scName,const QCString &memberName,
md=mn->last(); md=mn->last();
while (md) while (md)
{ {
if (md->isLinkable()) //printf("Found member `%s'\n",md->name().data());
if (1 /* md->isLinkable() */)
{ {
//printf("md->name()=`%s'\n",md->name().data()); //printf("member is linkable md->name()=`%s'\n",md->name().data());
fd=md->getFileDef(); fd=md->getFileDef();
gd=md->groupDef(); gd=md->getGroupDef();
bool inGroup=FALSE; bool inGroup=FALSE;
if ((fd && fd->isLinkable()) |+ if ((fd && fd->isLinkable()) ||
(inGroup=(gd && gd->isLinkable())) (inGroup=(gd && gd->isLinkable()))
) )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment