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.
--------
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.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
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()
"information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \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","Dutch");
......@@ -783,6 +783,7 @@ void init()
ConfigString::addFixedValue("outputLanguage","Russian");
ConfigString::addFixedValue("outputLanguage","Croatian");
ConfigString::addFixedValue("outputLanguage","Polish");
ConfigString::addFixedValue("outputLanguage","Portuguese");
ConfigBool::add( "noIndexFlag",
"DISABLE_INDEX",
"FALSE",
......@@ -1310,9 +1311,8 @@ void init()
"TRUE",
"generate RTF flag",
"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"
"is optimised for Word 97 and may not look too pretty with other readers \n"
"or editors.\n"
"The RTF output is optimised for Word 97 and may not look very pretty with \n"
"other RTF readers or editors.\n"
);
ConfigString::add("rtfOutputDir",
"RTF_OUTPUT",
......
......@@ -356,6 +356,10 @@ EOF
elif test "$f_platform" = "solaris-cc"; then
cat >> .tmakeconfig <<EOF
TMAKE_LFLAGS = -Bstatic
EOF
elif test "$f_platform" = "hpux-cc"; then
cat >> .tmakeconfig <<EOF
TMAKE_LFLAGS = -noshared
EOF
else
cat >> .tmakeconfig <<EOF
......
......@@ -26,11 +26,15 @@ GENERATE_LATEX = YES
GENERATE_HTML = YES
GENERATE_HTMLHELP = YES
GENERATE_RTF = NO
ENABLED_SECTIONS = logo_on
ENABLE_PREPROCESSING = NO
CASE_SENSE_NAMES = NO
IMAGE_PATH = .
INPUT = index.doc install.doc starting.doc docblocks.doc \
grouping.doc formulas.doc diagrams.doc preprocessing.doc \
external.doc faq.doc trouble.doc history.doc features.doc \
doxygen_usage.doc doxytag_usage.doc doxysearch_usage.doc \
doxywizard_usage.doc \
installdox_usage.doc output.doc autolink.doc \
config.doc commands.doc htmlcmds.doc language.doc
FILE_PATTERNS = *.cpp *.h *.doc
......
......@@ -61,6 +61,7 @@ documentation:
<li> \refitem cmddeprecated \deprecated
<li> \refitem cmddontinclude \dontinclude
<li> \refitem cmde \e
<li> \refitem cmdem \em
<li> \refitem cmdendcode \endcode
<li> \refitem cmdendhtmlonly \endhtmlonly
<li> \refitem cmdendif \endif
......@@ -84,13 +85,16 @@ documentation:
<li> \refitem cmdinternal \internal
<li> \refitem cmdinvariant \invariant
<li> \refitem cmdlatexonly \latexonly
<li> \refitem cmdli \li
<li> \refitem cmdline \line
<li> \refitem cmdlink \link
<li> \refitem cmdmainpage \mainpage
<li> \refitem cmdname \name
<li> \refitem cmdnamespace \namespace
<li> \refitem cmdnosubgrouping \nosubgrouping
<li> \refitem cmdnote \note
<li> \refitem cmdoverload \overload
<li> \refitem cmdp \p
<li> \refitem cmdpage \page
<li> \refitem cmdpar \par
<li> \refitem cmdparam \param
......@@ -164,17 +168,6 @@ Doxygen. Unrecognized commands are treated as normal text.
for the corresponding HTML documentation that is generated by Doxygen.
\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>
\subsection cmddef \def <name>
......@@ -185,7 +178,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Example:
\verbinclude define.h
\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.
\endhtmlonly
......@@ -203,13 +196,6 @@ Doxygen. Unrecognized commands are treated as normal text.
\sa section \ref cmdingroup "\\ingroup"
<hr>
\subsection cmdendcode \endcode
\addindex \endcode
Ends a block of code.
\sa section \ref cmdcode "\\code"
<hr>
\subsection cmdenum \enum <name>
......@@ -229,7 +215,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Example:
\verbinclude enum.h
\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.
\endhtmlonly
......@@ -260,7 +246,7 @@ Doxygen. Unrecognized commands are treated as normal text.
Where the example file \c example_test.cpp looks as follows:
\verbinclude example_test.cpp
\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.
\endhtmlonly
......@@ -283,7 +269,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Example:
\verbinclude file.h
\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.
\endhtmlonly
......@@ -412,6 +398,8 @@ Public/Protected/Private/... section.
\par Note 1:
You are responsible that there is indeed an
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:
The \\overload command does not work inside a one-line comment.
\par Example:
......@@ -684,6 +672,20 @@ Public/Protected/Private/... section.
several invariants. The \\invariant command ends when a blank line or some other
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>
\subsection cmdpar \par [(paragraph title)] { paragraph }
......@@ -797,10 +799,11 @@ Public/Protected/Private/... section.
\addindex \sa
Starts a paragraph where one or more cross-references to classes,
functions, methods, variables, files or URL may be specified.
The separators \c :: and \c # may be used to separate a class from the
name of its members. One of several overloaded methods or constructors
Two names joines by either <code>::</code> or <code>\#</code>
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
the method.
the method name.
Synonymous to \\see.
......@@ -1112,7 +1115,7 @@ Public/Protected/Private/... section.
\par Example:
\verbatim
... the \a x and \y coordinates are used to ...
... the \a x and \a y coordinates are used to ...
\endverbatim
This will result in the following text:<br><br>
... the \a x and \a y coordinates are used to ...
......@@ -1147,6 +1150,9 @@ Public/Protected/Private/... section.
\par Note:
For nested lists, HTML commands should be used.
Equivalent to \ref cmdli "\\cmdli"
<hr>
\subsection cmdb \b <word>
......@@ -1170,6 +1176,19 @@ Public/Protected/Private/... section.
will result in the following text:<br><br>
... 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>
\subsection cmde \e <word>
......@@ -1185,6 +1204,32 @@ Public/Protected/Private/... section.
will result in the following text:<br><br>
... 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>
\subsection cmdendhtmlonly \endhtmlonly
......@@ -1321,6 +1366,55 @@ Public/Protected/Private/... section.
\sa section \ref cmdlatexonly "\\latexonly"
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>
\subsection cmdverbatim \verbatim
......
This diff is collapsed.
......@@ -17,16 +17,17 @@
/*! \page doxygen_usage Doxygen usage
Doxygen is a command line based utility. Calling \c doxygen with the
\c -h option at the command line will give you a brief description of the
\c --help option at the command line will give you a brief description of the
usage of the program.
All options consist of a leading character <tt>-</tt>,
followed by one character and optionally an argument.
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>
<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
calling doxygen with the \c -g option:
\verbatim
......@@ -42,12 +43,50 @@ doxygen <config_file>
\endverbatim
</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>
<ul>
<li> If you do not want the description for each item in the configuration
file then you can use the optional \c -s option.
Try to use this option if you send me a configuration file as part of
a bug report!
<li> If you do not want documentation for each item inside the configuration
file then you can use the optional \c -s option. This can use be
used in combination with the \c -u option, to add or strip the
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
a file, use \c - for the file name.
</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 @@
parser and GUI front-end from source templates.
<li>Better support for the using keyword.
<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>If the source browser is enabled, for a function, a list of function whose
implementation calls that function, is generated.
......
......@@ -15,6 +15,7 @@
*
*/
/*! \page index
\if logo_on
<center>
\htmlonly
<img align=center lowsrc="doxygen_logo_low.gif" src="doxygen_logo.gif"
......@@ -22,6 +23,7 @@
Version: $(VERSION)
\endhtmlonly
</center>
\endif
<h2>Doxygen license</h2>
\addindex license
......@@ -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 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 doxywizard_usage shows how to use the \c doxywizard program.
<li>Section \ref installdox_usage shows how to use the \c installdox
script that is generated by Doxygen if you use tag files.
<li>Section \ref output shows how to generate the various output formats
......
......@@ -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
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
......@@ -216,6 +220,9 @@ If you are compiling for HP-UX with aCC and you get this error:
#include <alloca.h>
\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
(according to Barnard Schmallhof) by replacing the following in
ce_parse.cpp:
......@@ -256,7 +263,50 @@ ce_parse.cpp:
<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>
......
......@@ -29,6 +29,9 @@ information.
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.
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
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.
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
<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>
(this requires <code>dvips</code>). The Postscript file can be send to a postscript
converted into a postscript file \c refman.ps by
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
ghostscript to convert postscript into something your printer understands.
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
PDF output you should set the \ref cfg_pdf_hyperlinks "PDF_HYPERLINKS"
tag to \c YES.
interpreter; just type <code>make pdf</code> (or <code>make pdf_2on1</code>).
To get the best results for PDF output you should set
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
to make sure the man directory is in the man path (see the \c MANPATH
......
......@@ -80,12 +80,24 @@ know why.
Furthermore, I would appreciate a mail if you have found
a bug, or if you have ideas (or even better some code or a patch)
how to fix existing bugs and limitations.
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
demonstrating the problem you have (make sure the example compiles!). It is
usually a good idea to send along the configuation file as well, but please
use doxygen with the <code>-s</code> flag while generating it.
demonstrating the problem you have. Please make sure the example is valid
source code (try compiling it) and if the problem is really captured by
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>
*/
......
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = afterdoc
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = afterdoc.h
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = author
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = author.cpp
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = autolink
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = autolink.cpp
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = class
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = class.h
QUIET = YES
......@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = define
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = define.h
ENABLE_PREPROCESSING = YES
QUIET = YES
......@@ -5,6 +5,7 @@ EXTRACT_ALL = YES
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
ENABLE_PREPROCESSING = YES
INPUT = .
FILE_PATTERNS = diagrams_*.h
......
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = enum
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = enum.h
QUIET = YES
......@@ -4,6 +4,7 @@ GENERATE_TAGFILE = example.tag
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = example.cpp
EXAMPLE_PATH = example_test.cpp
QUIET = YES
>Test: "class_Test.html"
>Test: "class_test.html"
example a0 "()"
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = file
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = file.h
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = func
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = func.h
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = group
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = group.cpp
QUIET = YES
......@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = include
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = include.cpp
EXAMPLE_PATH = example_test.cpp
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = jdstyle
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = jdstyle.cpp
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = memgrp
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = memgrp.cpp
QUIET = YES
......@@ -3,5 +3,7 @@ OUTPUT_DIRECTORY = overload
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
SORT_MEMBER_DOCS = NO
INPUT = overload.cpp
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = page
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = page.doc
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = par
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = par.cpp
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = qtstyle
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = qtstyle.cpp
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = relates
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = relates.cpp
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = restypedef
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = restypedef.cpp
QUIET = YES
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = structcmd
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = structcmd.h
QUIET = YES
......@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = tag
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = tag.cpp
TAGFILES = example.tag
PERL_PATH = perl
......
......@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = template
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = templ.cpp
QUIET = YES
Name: doxygen
Version: 1.1.5-20000716
Version: 1.2.0
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
......
......@@ -779,9 +779,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<font size=2><center>[");
ol.writeString("<center><font size=\"2\">[");
ol.writeHtmlLink("graph_legend.html",theTranslator->trLegend());
ol.writeString("]</center></font>");
ol.writeString("]</font></center>");
ol.popGeneratorState();
}
ol.popGeneratorState();
......@@ -811,9 +811,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.writeString("<font size=2><center>[");
ol.writeString("<center><font size=\"2\">[");
ol.writeHtmlLink("graph_legend.html",theTranslator->trLegend());
ol.writeString("]</center></font>");
ol.writeString("]</font></center>");
ol.popGeneratorState();
}
ol.popGeneratorState();
......@@ -1123,7 +1123,7 @@ void ClassDef::writeMemberList(OutputList &ol)
while (mi)
{
MemberDef *md=mi->memberDef;
ClassDef *cd=md->memberClass();
ClassDef *cd=md->getClassDef();
// compute the protection level for this member
Protection protect=md->protection();
......@@ -1301,7 +1301,7 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup)
//ol.insertMemberAlign();
//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)
{
......@@ -1447,13 +1447,13 @@ void ClassDef::mergeMembers(/*ClassDef *cd,BaseClassList *bcl*/)
bool hidden=FALSE;
MemberNameInfoIterator dstMnii(*dstMni);
MemberInfo *dstMi;
ClassDef *srcCd = srcMd->memberClass();
ClassDef *srcCd = srcMd->getClassDef();
for ( ; (dstMi=dstMnii.current()) && !found; ++dstMnii )
{
MemberDef *dstMd = dstMi->memberDef;
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());
if (srcCd==dstCd || dstCd->isBaseClass(srcCd))
// member is in the same or a base class
......@@ -1565,7 +1565,7 @@ void ClassDef::mergeMembers(/*ClassDef *cd,BaseClassList *bcl*/)
Specifier virt=mi->virt;
if (mi->virt==Normal && bcd->virt!=Normal) virt=bcd->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->ambigClass=mi->ambigClass;
newMi->ambiguityResolutionScope=mi->ambiguityResolutionScope.copy();
......
......@@ -102,10 +102,12 @@ class ClassDef : public Definition
ArgumentList *outerTemplateArguments() const;
void setTemplateArguments(ArgumentList *al);
//QCString getTemplateNameString();
NamespaceDef *getNamespaceDef() { return nspace; }
FileDef *getFileDef() const { return fileDef; }
void setNamespace(NamespaceDef *nd) { nspace = nd; }
NamespaceDef *getNamespace() { return nspace; }
void setFileDef(FileDef *fd) { fileDef=fd; }
FileDef *getFileDef() const { return fileDef; }
void mergeMembers();
bool isBaseClass(ClassDef *bcd);
void determineImplUsageRelation();
......
This diff is collapsed.
......@@ -357,7 +357,7 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
{
QCString scope=md->getScopeString();
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)
{
name.prepend(scope+"::");
......
......@@ -1104,7 +1104,20 @@ void DotClassGraph::writeGraph(QTextStream &out,
return;
}
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;
convertMapFile(out,baseName+".map");
out << "</map><p>" << endl;
......@@ -1140,7 +1153,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
"\\end{center}\n"
"\\end{figure}\n";
}
//thisDir.remove(baseName+".dot");
thisDir.remove(baseName+".dot");
QDir::setCurrent(oldDir);
}
......@@ -1280,7 +1293,9 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
}
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 << "<map name=\"" << mapName << "_map\">" << endl;
convertMapFile(out,baseName+".map");
......
This diff is collapsed.
......@@ -508,25 +508,46 @@ void FileDef::insertMember(MemberDef *md)
switch(md->memberType())
{
case MemberDef::Variable:
if (Config::sortMembersFlag)
varMembers.inSort(md);
else
varMembers.append(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:
err("FileDef::insertMembers(): unexpected member insert in file!\n");
......@@ -537,7 +558,10 @@ void FileDef::insertMember(MemberDef *md)
/*! Adds compound definition \a cd to the list of all compounds of this file */
void FileDef::insertClass(ClassDef *cd)
{
if (Config::sortMembersFlag)
classList->inSort(cd);
else
classList->append(cd);
}
/*! Adds namespace definition \a nd to the list of all compounds of this file */
......@@ -545,7 +569,10 @@ void FileDef::insertNamespace(NamespaceDef *nd)
{
if (!nd->name().isEmpty() && namespaceDict->find(nd->name())==0)
{
if (Config::sortMembersFlag)
namespaceList->inSort(nd);
else
namespaceList->append(nd);
namespaceDict->insert(nd->name(),nd);
}
}
......
......@@ -78,16 +78,25 @@ void GroupDef::distributeMemberGroupDocumentation()
void GroupDef::addFile(const FileDef *def)
{
if (Config::sortMembersFlag)
fileList->inSort(def);
else
fileList->append(def);
}
void GroupDef::addClass(const ClassDef *def)
{
if (Config::sortMembersFlag)
classList->inSort(def);
else
classList->append(def);
}
void GroupDef::addNamespace(const NamespaceDef *def)
{
if (Config::sortMembersFlag)
namespaceList->inSort(def);
else
namespaceList->append(def);
}
......@@ -142,13 +151,48 @@ void GroupDef::insertMember(MemberDef *md)
allMemberDict->insert(funcDecl,md);
switch(md->memberType())
{
case MemberDef::Variable: varMembers.inSort(md); break;
case MemberDef::Function: funcMembers.inSort(md); break;
case MemberDef::Typedef: typedefMembers.inSort(md); break;
case MemberDef::Enumeration: enumMembers.inSort(md); break;
case MemberDef::EnumValue: enumValMembers.inSort(md); break;
case MemberDef::Prototype: protoMembers.inSort(md); break;
case MemberDef::Define: defineMembers.inSort(md); break;
case MemberDef::Variable:
if (Config::sortMembersFlag)
varMembers.inSort(md);
else
varMembers.append(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:
err("FileDef::insertMembers(): unexpected member insert in file!\n");
}
......@@ -158,6 +202,9 @@ void GroupDef::insertMember(MemberDef *md)
void GroupDef::addGroup(const GroupDef *def)
{
if (Config::sortMembersFlag)
groupList->inSort(def);
else
groupList->append(def);
}
......@@ -450,7 +497,7 @@ void addMemberToGroups(Entry *root,MemberDef *md)
GroupDef *gd=0;
if (!s->isEmpty() && (gd=groupDict[*s]))
{
GroupDef *mgd = md->groupDef();
GroupDef *mgd = md->getGroupDef();
if (mgd==0)
{
gd->insertMember(md);
......
......@@ -45,7 +45,7 @@ static const char *defaultStyleSheet =
"A.codeRef { font-weight: normal; color: #4444ee }\n"
"DL.el { margin-left: -1cm }\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"
"TD.md { background-color: #f2f2ff }\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)
QTextStream t(&file);
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"
"<html><head><meta name=\"robots\" content=\"noindex\">\n"
"<meta http-equiv=\"Content-Type\" content=\"text/html;charset="
......@@ -123,10 +118,49 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
else
{
QFileInfo cssfi(Config::htmlStyleSheet);
if (!cssfi.exists())
{
err("Error: user specified HTML style sheet file does not exist!\n");
}
t << cssfi.fileName();
}
t << "\" rel=\"stylesheet\" type=\"text/css\">\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
{
......@@ -190,13 +224,13 @@ void HtmlGenerator::writeFooter(int part,bool external)
t << "src=\"";
}
t << "doxygen.gif\" alt=\"doxygen\" "
<< "align=center border=0 " << endl <<
<< "align=\"middle\" border=0 " << endl <<
"width=110 height=53></a>" << versionString <<" ";
}
break;
default:
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";
break;
......@@ -561,7 +595,15 @@ void HtmlGenerator::endColorFont()
void HtmlGenerator::writeFormula(const char *n,const char *text)
{
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;
}
......@@ -899,7 +941,13 @@ void HtmlGenerator::endMemberGroup(bool)
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 << "<table cellspacing=5 cellpadding=0 border=0>\n"
" <tr>\n"
" <td>\n"
......
......@@ -31,6 +31,8 @@ class HtmlGenerator : public OutputGenerator
~HtmlGenerator();
static void init();
static void writeStyleSheetFile(QFile &f);
static void writeHeaderFile(QFile &f);
static void writeFooterFile(QFile &f);
OutputGenerator *copy() { return new HtmlGenerator; }
//OutputGenerator *clone() { return new HtmlGenerator(*this); }
......
......@@ -947,7 +947,7 @@ void writeMemberList(OutputList &ol)
//!md->isReference() && md->hasDocumentation() &&
// md->name()[0]!='@' &&
md->isLinkableInProject() &&
(cd=md->memberClass()) &&
(cd=md->getClassDef()) &&
cd->isLinkableInProject()
)
{
......@@ -968,7 +968,7 @@ void writeMemberList(OutputList &ol)
QCString prevName;
while (md)
{
ClassDef *cd=md->memberClass();
ClassDef *cd=md->getClassDef();
if (//cd && (md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) &&
//!md->isReference() && md->hasDocumentation() &&
md->isLinkableInProject() &&
......@@ -1009,10 +1009,10 @@ int countClassMembers()
{
if (//(md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) &&
//!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->isRelated() &&
(cd=md->memberClass()) &&
(cd=md->getClassDef()) &&
cd->isLinkableInProject()
)
{
......@@ -1025,10 +1025,10 @@ int countClassMembers()
// otherMd=md;
//if (//(md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) &&
// //!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->isRelated() &&
// (cd=md->memberClass()) &&
// (cd=md->getClassDef()) &&
// cd->isLinkableInProject()
// )
// found=TRUE;
......@@ -1073,10 +1073,9 @@ void writeFileMemberList(OutputList &ol)
bool found=FALSE;
while (md && !found)
{
FileDef *fd=md->getFileDef() ? md->getFileDef() : md->getFileDec();
bool hasDocs =
(md->getFileDef() && md->getFileDef()->isLinkableInProject()) ||
(md->getFileDec() && md->getFileDec()->isLinkableInProject());
FileDef *fd=md->getFileDef();
bool hasDocs = md->getFileDef() &&
md->getFileDef()->isLinkableInProject();
if (fd && hasDocs &&
md->isLinkableInProject()
......@@ -1099,10 +1098,9 @@ void writeFileMemberList(OutputList &ol)
QCString prevName;
while (md)
{
FileDef *fd=md->getFileDef() ? md->getFileDef() : md->getFileDec();
bool hasDocs =
(md->getFileDef() && md->getFileDef()->isLinkableInProject()) ||
(md->getFileDec() && md->getFileDec()->isLinkableInProject());
FileDef *fd=md->getFileDef();
bool hasDocs = md->getFileDef() &&
md->getFileDef()->isLinkableInProject();
if (fd && hasDocs &&
md->isLinkableInProject() &&
//!md->isReference() &&
......@@ -1143,7 +1141,7 @@ void writeNamespaceMemberList(OutputList &ol)
bool found=FALSE;
while (md && !found)
{
NamespaceDef *nd=md->getNamespace();
NamespaceDef *nd=md->getNamespaceDef();
if (nd && nd->isLinkableInProject() && md->isLinkableInProject())
found=TRUE;
else
......@@ -1161,7 +1159,7 @@ void writeNamespaceMemberList(OutputList &ol)
QCString prevName;
while (md)
{
NamespaceDef *nd=md->getNamespace();
NamespaceDef *nd=md->getNamespaceDef();
if (nd && nd->isLinkableInProject() && md->isLinkableInProject() &&
prevName!=nd->name()
)
......@@ -1195,7 +1193,7 @@ int countNamespaceMembers()
bool found=FALSE;
while (md && !found)
{
NamespaceDef *nd=md->getNamespace();
NamespaceDef *nd=md->getNamespaceDef();
if (nd && nd->isLinkableInProject() && md->isLinkableInProject())
found=TRUE;
else
......@@ -1221,10 +1219,8 @@ int countFileMembers()
while (md && !found)
{
if (md->isLinkableInProject() &&
(((fd=md->getFileDef()) && fd->isLinkableInProject())
||
((fd=md->getFileDec()) && fd->isLinkableInProject())
)
(fd=md->getFileDef()) &&
fd->isLinkableInProject()
)
found=TRUE;
else
......@@ -1243,8 +1239,6 @@ void writeFileMemberIndex(OutputList &ol)
if (documentedFunctions==0) return;
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
//ol.disable(OutputGenerator::Man);
//ol.disable(OutputGenerator::Latex);
startFile(ol,"globals","File Member Index");
startTitle(ol,0);
parseText(ol,Config::projectName+" "+theTranslator->trFileMembers());
......@@ -1252,8 +1246,6 @@ void writeFileMemberIndex(OutputList &ol)
parseText(ol,theTranslator->trFileMembersDescription(Config::extractAllFlag));
writeFileMemberList(ol);
endFile(ol);
//ol.enable(OutputGenerator::Latex);
//ol.enable(OutputGenerator::Man);
ol.popGeneratorState();
}
......
......@@ -30,6 +30,7 @@
#include "translator_ru.h"
#include "translator_hr.h"
#include "translator_pl.h"
#include "translator_pt.h"
#endif
#define L_EQUAL(a) !stricmp(langName,a)
......@@ -95,6 +96,10 @@ bool setTranslator(const char *langName)
{
theTranslator=new TranslatorPolish;
}
else if (L_EQUAL("portuguese"))
{
theTranslator=new TranslatorPortuguese;
}
#endif
else // use the default language (i.e. english)
{
......
This diff is collapsed.
......@@ -29,6 +29,7 @@ class LatexGenerator : public OutputGenerator
~LatexGenerator();
static void init();
static void writeStyleSheetFile(QFile &f);
static void writeHeaderFile(QFile &f);
OutputGenerator *copy();
//OutputGenerator *clone() { return new LatexGenerator(*this); }
......@@ -117,10 +118,10 @@ class LatexGenerator : public OutputGenerator
void endEmphasis() { t << "}"; }
void startBold() { t << "{\\bf "; }
void endBold() { t << "}"; }
void startDescription() { t << "\\begin{description}" << endl; }
void endDescription() { t << "\\end{description}" << endl; }
void startDescItem() { t << "\\item["; }
void endDescItem() { t << "]" << endl; }
void startDescription();
void endDescription();
void startDescItem();
void endDescItem();
void lineBreak() { t << "\\par\n"; }
void startMemberDoc(const char *,const char *,const char *,const char *);
void endMemberDoc();
......@@ -236,6 +237,7 @@ class LatexGenerator : public OutputGenerator
LatexGenerator &operator=(const LatexGenerator &);
int col;
bool insideTabbing;
bool firstDescItem;
};
#endif
......@@ -236,7 +236,7 @@ MemberDef::MemberDef(const char *df,int dl,
//printf("++++++ MemberDef(%s file=%s,line=%d) ++++++ \n",na,df,dl);
classDef=0;
fileDef=0;
fileDec=0;
//fileDec=0;
redefines=0;
redefinedBy=0;
nspace=0;
......@@ -392,10 +392,10 @@ QCString MemberDef::getOutputFileBase() const
{
return fileDef->getOutputFileBase();
}
else if (fileDec)
{
return fileDec->getOutputFileBase();
}
//else if (fileDec)
//{
// return fileDec->getOutputFileBase();
//}
else if (nspace)
{
return nspace->getOutputFileBase();
......@@ -703,10 +703,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
{
//printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
annMemb->writeLink(ol,
annMemb->memberClass(),
annMemb->getNamespace(),
annMemb->getClassDef(),
annMemb->getNamespaceDef(),
annMemb->getFileDef(),
annMemb->groupDef()
annMemb->getGroupDef()
);
annMemb->annUsed=annUsed=TRUE;
}
......@@ -794,7 +794,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
const char *scopeName)
{
if (memberClass()==0 && isStatic() && !Config::extractStaticFlag) return;
if (getClassDef()==0 && isStatic() && !Config::extractStaticFlag) return;
bool hasDocs = detailsAreVisible();
//printf("MemberDef::writeDocumentation(): type=`%s' def=`%s'\n",type.data(),definition());
if (
......@@ -806,8 +806,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
)
{
// get definition. TODO: make a method of this
NamespaceDef *nd=getNamespace();
ClassDef *cd=memberClass();
NamespaceDef *nd=getNamespaceDef();
ClassDef *cd=getClassDef();
FileDef *fd=getFileDef();
Definition *d = 0;
if (cd) d=cd; else if (nd) d=nd; else d=fd;
......@@ -1160,7 +1160,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
MemberDef *bmd=reimplements();
ClassDef *bcd=0;
if (bmd && (bcd=bmd->memberClass()))
if (bmd && (bcd=bmd->getClassDef()))
{
#if 0
if (lvirt!=Normal) // search for virtual member of the deepest base class
......@@ -1168,7 +1168,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
MemberDef *lastBmd=bmd;
while (lastBmd)
{
ClassDef *lastBcd = lastBmd->memberClass();
ClassDef *lastBcd = lastBmd->getClassDef();
if (lastBmd->virtualness()!=Normal &&
lastBmd->isLinkable() &&
lastBcd->isLinkable()
......@@ -1227,7 +1227,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
MemberDef *bmd=0;
uint count=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
// which the member and class are visible in the docs.
......@@ -1253,7 +1253,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
count=0;
// 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())
{
......@@ -1310,10 +1310,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
void MemberDef::warnIfUndocumented()
{
if (memberGroup) return;
ClassDef *cd = memberClass();
NamespaceDef *nd = getNamespace();
ClassDef *cd = getClassDef();
NamespaceDef *nd = getNamespaceDef();
FileDef *fd = getFileDef();
GroupDef *gd = groupDef();
GroupDef *gd = getGroupDef();
Definition *d=0;
const char *t=0;
if (cd)
......@@ -1348,7 +1348,7 @@ bool MemberDef::isLinkable()
bool MemberDef::detailsAreVisible() const
{
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==EnumValue && !briefDescription().isEmpty()) || // is doc enum value
(!briefDescription().isEmpty() &&
......@@ -1385,7 +1385,7 @@ bool MemberDef::visibleMemberGroup(bool hideNoHeader)
QCString MemberDef::getScopeString() const
{
QCString result;
if (memberClass()) result=memberClass()->name();
else if (getNamespace()) result=getNamespace()->name();
if (getClassDef()) result=getClassDef()->name();
else if (getNamespaceDef()) result=getNamespaceDef()->name();
return result;
}
......@@ -72,15 +72,6 @@ class MemberDef : public Definition
const ArgumentList *al);
~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;
const char *declaration() const { return decl; }
const char *definition() const { return def; }
......@@ -90,27 +81,49 @@ class MemberDef : public Definition
const char *anchor() const { return anc; }
const QCString &initializer() const { return init; }
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; }
Specifier virtualness() const { return virt; }
MemberType memberType() const { return mtype; }
GroupDef *groupDef() const { return group; }
FileDef *getFileDef() { return fileDef; }
FileDef *getFileDec() { return fileDec; }
// convenience methods
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 isStatic() const { return stat; }
bool isInline() const { return (memSpec&Entry::Inline)!=0; }
bool isExplicit() const { return (memSpec&Entry::Explicit)!=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 setDefinition(const char *d) { def=d; }
void setFileDef(FileDef *fd) { fileDef=fd; }
void setFileDec(FileDef *fd) { fileDec=fd; }
void setAnchor(const char *a) { anc=a; }
void setProtection(Protection p) { prot=p; }
void setMemberSpecifiers(int s) { memSpec=s; }
int getMemberSpecifiers() const { return memSpec; }
void mergeMemberSpecifiers(int s) { memSpec|=s; }
void setInitializer(const char *i) { init=i;
init=init.stripWhiteSpace();
......@@ -119,13 +132,20 @@ class MemberDef : public Definition
void setMaxInitLines(int lines) { if (lines!=-1) maxInitLines=lines; }
void setMemberClass(ClassDef *cd) { classDef=cd; }
void setSectionList(MemberList *sl) { section=sl; }
void makeRelated() { related=TRUE; }
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
void setReimplements(MemberDef *md) { redefines=md; }
void insertReimplementedBy(MemberDef *md);
......@@ -148,20 +168,9 @@ class MemberDef : public Definition
// example related members
bool addExample(const char *anchor,const char *name,const char *file);
//void writeExample(OutputList &ol);
bool hasExamples();
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
void setPrototype(bool p) { proto=p; }
......@@ -178,10 +187,8 @@ class MemberDef : public Definition
ArgumentList *scopeDefTemplateArguments() const { return scopeTAL; }
void setMemberDefTemplateArguments(ArgumentList *t);
ArgumentList *memberDefTemplateArguments() const { return membTAL; }
//QCString getScopeTemplateNameString();
// namespace related members
NamespaceDef *getNamespace() const { return nspace; }
void setNamespace(NamespaceDef *nd) { nspace=nd; }
// member group related members
......@@ -190,6 +197,7 @@ class MemberDef : public Definition
void setMemberGroupId(int id) { grpId=id; }
int getMemberGroupId() const { return grpId; }
// annonymous scope members
void setFromAnnonymousScope(bool b) { annScope=b; }
void setFromAnnonymousMember(MemberDef *m) { annMemb=m; }
bool fromAnnonymousScope() const { return annScope; }
......@@ -204,7 +212,6 @@ class MemberDef : public Definition
private:
ClassDef *classDef; // member of or related to
FileDef *fileDef; // member of file definition
FileDef *fileDec; // member of file declaration
MemberDef *redefines; // the member that is redefined by this one
MemberDef *enumScope; // the enclosing scope, if this is an enum field
MemberDef *annEnumType; // the annonymous enum that is the type of this member
......@@ -225,8 +232,6 @@ class MemberDef : public Definition
QCString declFile; // file where the declaration was found
int declLine; // line where the declaration was found
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
Specifier virt; // normal/virtual/pure virtual
Protection prot; // protection type [Public/Protected/Private]
......@@ -237,10 +242,10 @@ class MemberDef : public Definition
bool eUsed; // is the enumerate already placed in a list
bool proto; // is it a prototype;
bool docEnumValues; // is an enum with documented enum values.
bool annScope;
bool annScope; // member is part of an annoymous scope
bool annUsed;
bool annShown;
int indDepth;
int indDepth; // indentation depth for this member if inside an annonymous scope
int maxInitLines; // when the initializer will be displayed
MemberList *section; // declation list containing this member
MemberDef *annMemb;
......@@ -249,7 +254,6 @@ class MemberDef : public Definition
ArgumentList *scopeTAL; // template argument list of class template
ArgumentList *membTAL; // template argument list of class template
int grpId; // group id
//QCString grpHeader; // group header
MemberGroup *memberGroup; // group's member definition
GroupDef *group; // group in which this member is in
......
......@@ -54,7 +54,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe
{
//printf("md=%p md->name()=`%s' inGroup=%d getMemberGroup()=%p\n",
// 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->documentation().isEmpty() ||
......@@ -73,7 +73,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe
case MemberDef::Variable: varCnt++,m_count++; break;
case MemberDef::Function: // 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++;
break;
case MemberDef::Enumeration: enumCnt++,m_count++; break;
......@@ -119,7 +119,7 @@ void MemberList::countDocMembers()
//printf("%s MemberList::countDocMembers() details=%d\n",
// md->name().data(),md->detailsAreVisible());
bool visibleIfStatic =
!(md->memberClass()==0 && md->isStatic() && !Config::extractStaticFlag);
!(md->getClassDef()==0 && md->isStatic() && !Config::extractStaticFlag);
if (visibleIfStatic &&
(Config::extractAllFlag || md->detailsAreVisible())
......@@ -410,7 +410,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
{
if (
( md->isFunction() || md->isSignal() || md->isSlot()) &&
( !md->isRelated() || md->memberClass() ) &&
( !md->isRelated() || md->getClassDef() ) &&
inGroup==md->visibleMemberGroup(sectionPerType)
)
{
......
......@@ -33,8 +33,8 @@ int MemberName::compareItems(GCI item1, GCI item2)
{
MemberDef *m1=(MemberDef *)item1;
MemberDef *m2=(MemberDef *)item2;
ClassDef *c1=m1->memberClass();
ClassDef *c2=m2->memberClass();
ClassDef *c1=m1->getClassDef();
ClassDef *c2=m2->getClassDef();
FileDef *f1=m1->getFileDef();
FileDef *f2=m2->getFileDef();
if (c1 && c2)
......@@ -55,8 +55,8 @@ int MemberNameInfo::compareItems(GCI item1, GCI item2)
{
MemberInfo *m1=(MemberInfo *)item1;
MemberInfo *m2=(MemberInfo *)item2;
ClassDef *c1=m1->memberDef->memberClass();
ClassDef *c2=m2->memberDef->memberClass();
ClassDef *c1=m1->memberDef->getClassDef();
ClassDef *c2=m2->memberDef->getClassDef();
FileDef *f1=m1->memberDef->getFileDef();
FileDef *f2=m2->memberDef->getFileDef();
if (c1 && c2)
......
......@@ -66,13 +66,22 @@ void NamespaceDef::distributeMemberGroupDocumentation()
}
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)
{
if (classDict->find(cd->name())==0)
{
if (Config::sortMembersFlag)
classList->inSort(cd);
else
classList->append(cd);
classDict->insert(cd->name(),cd);
}
......@@ -121,13 +130,48 @@ void NamespaceDef::insertMember(MemberDef *md)
allMemberList.append(md);
switch(md->memberType())
{
case MemberDef::Variable: varMembers.inSort(md); break;
case MemberDef::Function: funcMembers.inSort(md); break;
case MemberDef::Typedef: typedefMembers.inSort(md); break;
case MemberDef::Enumeration: enumMembers.inSort(md); break;
case MemberDef::EnumValue: enumValMembers.inSort(md); break;
case MemberDef::Prototype: protoMembers.inSort(md); break;
case MemberDef::Define: defineMembers.inSort(md); break;
case MemberDef::Variable:
if (Config::sortMembersFlag)
varMembers.inSort(md);
else
varMembers.append(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:
err("NamespaceDef::insertMembers(): unexpected member inserted in namespace!\n");
}
......
......@@ -51,8 +51,6 @@
#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
struct FileState
......@@ -590,10 +588,10 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
if (g_expandedDict->find(macroName)==0) // expand macro
{
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
{
// substitute the definition of the macro
//printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data());
expMacro=def->definition.stripWhiteSpace();
replaced=TRUE;
len=l;
......@@ -774,6 +772,7 @@ Define *newDefine()
def->fileName = g_yyFileName;
def->lineNr = g_yyLineNr;
def->varArgs = g_defVarArgs;
//printf("newDefine: `%s'->`%s'\n",def->name.data(),def->definition.data());
if (!def->name.isEmpty() && expandAsDefinedDict[def->name])
{
def->isPredefined=TRUE;
......@@ -1520,7 +1519,7 @@ BN [ \t\r\n]
g_defLitText+=yytext;
outputChar('\n');
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())
{
addDefine();
......@@ -1528,10 +1527,12 @@ BN [ \t\r\n]
def=g_fileDefineDict->find(g_defName);
if (def==0) // new define
{
//printf("new define!\n");
g_fileDefineDict->insert(g_defName,newDefine());
}
else if (def)// name already exists
{
//printf("existing define!\n");
//printf("define found\n");
if (def->undef) // undefined name
{
......@@ -1860,23 +1861,21 @@ void preprocessFile(const char *fileName,BufStr &output)
else
pclose(preYYin);
//#if DUMP_OUTPUT
if (Debug::isFlagSet(Debug::Preprocessor))
{
char *orgPos=output.data()+orgOffset;
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;
printf("---------\n00001 ");
msg("---------\n00001 ");
while (orgPos<newPos)
{
putchar(*orgPos);
if (*orgPos=='\n') printf("%05d ",++line);
orgPos++;
}
printf("\n---------\n");
msg("\n---------\n");
}
//#endif
}
extern "C" { // some bogus code to keep the compiler happy
......
......@@ -650,7 +650,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
bool found=FALSE;
while (gd && !found)
{
if (gd->isLinkableInProject() || gd->countMembers()>0)
if (gd->countMembers()>0)
{
beginRTFChapter();
found=TRUE;
......@@ -666,7 +666,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
bool found=FALSE;
while (nd && !found)
{
if (nd->isLinkableInProject())
if (nd->isLinkableInProject() && nd->countMembers()>0)
{
beginRTFChapter();
found=TRUE;
......@@ -840,7 +840,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
bool found=FALSE;
while (nd && !found)
{
if (nd->isLinkableInProject() || nd->countMembers()>0)
if (nd->isLinkableInProject() && nd->countMembers()>0)
{
t << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
......@@ -852,7 +852,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
}
while (nd)
{
if (nd->isLinkableInProject() || nd->countMembers()>0)
if (nd->isLinkableInProject() && nd->countMembers()>0)
{
t << "\\par " << Rtf_Style["Reset"] << endl;
beginRTFSection();
......
......@@ -2449,7 +2449,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
lineCount();
BEGIN( CompoundName );
}
<FindMembers>{B}*("disp")?"interface"{BN}+ { // M$/Corba IDL interface
<FindMembers>{B}*((("disp")?"interface")|"valuetype"){BN}+ { // M$/Corba IDL interface
isTypedef=FALSE;
current->section = Entry::INTERFACE_SEC;
addType( current ) ;
......@@ -3157,6 +3157,8 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
//printf("adding `%s' `%s' `%s' to enum `%s' (mGrpId=%d)\n",
// current->type.data(), current->name.data(),
// current->args.data(), current_root->name.data(),current->mGrpId);
if (!current->name.isEmpty())
{
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->type = "@"; // enum marker
......@@ -3176,6 +3178,11 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
current->slot = slot;
current->mGrpId = memberGroupId;
}
else // probably a redundant ,
{
current->reset();
}
}
/*
<FindFieldArg>"," { unput(*yytext); BEGIN(FindFields); }
*/
......
This diff is collapsed.
......@@ -583,10 +583,119 @@ class TranslatorDutch : public Translator
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
This diff is collapsed.
......@@ -300,13 +300,19 @@ QCString removeRedundantWhiteSpace(const QCString &s)
for (i=0;i<l;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!=' ' ||
(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,
//printf("Trying class scope %s\n",className.data());
ClassDef *fcd=0;
if ((fcd=getClass(className)) && // is it a documented class
if ((fcd=getResolvedClass(className)) && // is it a documented class
fcd->isLinkable()
)
{
......@@ -1501,7 +1507,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf("match=%d\n",match);
if (match)
{
ClassDef *mcd=mmd->memberClass();
ClassDef *mcd=mmd->getClassDef();
int m=minClassDistance(fcd,mcd);
if (m<mdist && mcd->isLinkable())
{
......@@ -1533,7 +1539,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
mmd->isLinkable()
)
{
ClassDef *mcd=mmd->memberClass();
ClassDef *mcd=mmd->getClassDef();
//printf(" >Class %s found\n",mcd->name().data());
int m=minClassDistance(fcd,mcd);
if (m<mdist && mcd->isLinkable())
......@@ -1594,9 +1600,9 @@ bool getDefs(const QCString &scName,const QCString &memberName,
MemberDef *mmd=mn->first();
while (mmd && !found)
{
//printf("mmd->getNamespace()=%p fnd=%p\n",
// mmd->getNamespace(),fnd);
if (mmd->getNamespace()==fnd &&
//printf("mmd->getNamespaceDef()=%p fnd=%p\n",
// mmd->getNamespaceDef(),fnd);
if (mmd->getNamespaceDef()==fnd &&
//(mmd->isReference() || mmd->hasDocumentation())
mmd->isLinkable()
)
......@@ -1630,7 +1636,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
// the first defined!
while (mmd && !found)
{
if (mmd->getNamespace()==fnd &&
if (mmd->getNamespaceDef()==fnd &&
//(mmd->isReference() || mmd->hasDocumentation())
mmd->isLinkable()
)
......@@ -1646,14 +1652,14 @@ bool getDefs(const QCString &scName,const QCString &memberName,
}
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();
while (md)
{
if (md->isLinkable())
{
fd=md->getFileDef();
gd=md->groupDef();
gd=md->getGroupDef();
//printf("md->name()=`%s' md->args=`%s' fd=%p gd=%p\n",
// md->name().data(),args,fd,gd);
bool inGroup=FALSE;
......@@ -1688,13 +1694,14 @@ bool getDefs(const QCString &scName,const QCString &memberName,
md=mn->last();
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();
gd=md->groupDef();
gd=md->getGroupDef();
bool inGroup=FALSE;
if ((fd && fd->isLinkable()) |+
if ((fd && fd->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