Commit 397fa609 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Upgrade to 1.1.0

parent 19119105
DOXYGEN Version 1.0.0
DOXYGEN Version 1.1.0
CONTENTS
--------
......@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.0.0.src.tar.gz # uncompress the archive
tar xf doxygen-1.0.0.src.tar # unpack it
gunzip doxygen-1.1.0.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.0.src.tar # unpack it
2. Run the configure script:
......@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (27 December 1999)
Dimitri van Heesch (13 February 2000)
This program is distributed under the GNU GPL v2 (see below),
with the additional permission that it may be linked against Troll Tech's
Qt library, and distributed, without the GPL applying to Qt.
-----------------------------------------------------------------------
GNU LIBRARY GENERAL PUBLIC LICENSE
Version 2, June 1991
......
DOXYGEN Version 1.0.0
DOXYGEN Version 1.1.0
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (27 December 1999)
Dimitri van Heesch (13 February 2000)
#
# $Id$
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
# 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
......
#
# $Id$
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
# 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
......
#
# $Id$
#
# Copyright (C) 1997-1999 by Dimitri van Heesch.
# 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -29,6 +29,11 @@
The next sections show how to generate links to the various documented
entities in a source file.
\subsection linkurl Links to web pages and mail addresses
Doxygen will automatically replace any URLs and mail addresses found in the
documentation by links (in HTML).
\subsection linkclass Links to classes.
All words in the documentation that correspond to a documented class
......@@ -108,5 +113,4 @@ typedef struct StructName TypeName
Click <a href="$(DOXYGEN_DOCDIR)/examples/restypedef/html/restypedef.cpp.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
*/
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -77,6 +77,7 @@ documentation:
<li> \refitem cmdinclude \include
<li> \refitem cmdingroup \ingroup
<li> \refitem cmdinternal \internal
<li> \refitem cmdinvariant \invariant
<li> \refitem cmdlatexonly \latexonly
<li> \refitem cmdline \line
<li> \refitem cmdlink \link
......@@ -86,6 +87,8 @@ documentation:
<li> \refitem cmdpage \page
<li> \refitem cmdpar \par
<li> \refitem cmdparam \param
<li> \refitem cmdpost \post
<li> \refitem cmdpre \pre
<li> \refitem cmdref \ref
<li> \refitem cmdrelates \relates
<li> \refitem cmdreturn \return
......@@ -138,7 +141,10 @@ Doxygen. Unrecognized commands are treated as normal text.
The \<header-name\> argument can be used to overwrite the
name of the link that is used in the class documentation to something other
than \<header-file\>. This can be useful if the include name is not located
on the default include path (like \<X11/X.h\>).
on the default include path (like \<X11/X.h\>). With the \<header-name\>
argument you can also specify how the include statement should look like,
by adding either quotes or sharp brackets around the name.
Sharp brackets are used if just the name is given.
\par Example:
\verbinclude class.h
......@@ -546,6 +552,38 @@ Doxygen. Unrecognized commands are treated as normal text.
a deprecated entity. Can be used to describe alternatives,
expected life span, etc.
<hr>
\subsection cmdexception \exception <exception-object> { exception description }
\addindex \exception
Starts an exception description for an exception object with name
\<exception-object\>. Followed by a description of the exception.
The existence of the exception object is not checked.
The text of the paragraph has no special internal structure. All visual
enhancement commands may be used inside the paragraph.
Multiple adjacent \\exception commands will be joined into a single paragraph.
Each parameter description will start on a new line.
The \\exception description ends when a blank line or some other
sectioning command is encountered. See section \ref cmdfn "\\fn" for an
example.
\par Note:
the tag \\exceptions is a synonym for this tag.
<hr>
\subsection cmdinvariant \invariant { description of invariant }
\addindex \invariant
Starts a paragraph where the invariant of an entity can be described.
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 \\invariant commands will be joined into a single paragraph.
Each warning description will start on a new line.
Alternatively, one \\invariant command may mention
several invariants. The \\invariant command ends when a blank line or some other
sectioning command is encountered.
<hr>
\subsection cmdpar \par (paragraph title) { paragraph }
......@@ -581,32 +619,33 @@ Doxygen. Unrecognized commands are treated as normal text.
example.
<hr>
\subsection cmdexception \exception <exception-object> { exception description }
\subsection cmdpost \post { description of the postcondition }
\addindex \exception
Starts an exception description for an exception object with name
\<exception-object\>. Followed by a description of the exception.
The existence of the exception object is not checked.
\addindex \post
Starts a paragraph where the postcondition of an entity can be described.
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 \\exception commands will be joined into a single paragraph.
Each parameter description will start on a new line.
The \\exception description ends when a blank line or some other
sectioning command is encountered. See section \ref cmdfn "\\fn" for an
example.
\par Note:
the tag \\exceptions is a synonym for this tag.
Multiple adjacent \\post commands will be joined into a single paragraph.
Each warning description will start on a new line.
Alternatively, one \\post command may mention
several postconditions. The \\post command ends when a blank line or some other
sectioning command is encountered.
<hr>
\subsection cmdthrow \throw <exception-object> { exception description }
\addindex \throw
Synonymous to \\exception (see section \ref cmdexception "\\exception").
\par Note:
the tag \\throws is a synonym for this tag.
\subsection cmdpre \pre { description of the precondition }
\addindex \pre
Starts a paragraph where the precondition of an entity can be described.
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 \\pre commands will be joined into a single paragraph.
Each warning description will start on a new line.
Alternatively, one \\pre command may mention
several preconditions. The \\pre command ends when a blank line or some other
sectioning command is encountered.
<hr>
\subsection cmdreturn \return { description of the return value }
......@@ -649,6 +688,15 @@ Doxygen. Unrecognized commands are treated as normal text.
\sa section \ref autolink "\\autolink" for information on how to create links
to objects.
<hr>
\subsection cmdthrow \throw <exception-object> { exception description }
\addindex \throw
Synonymous to \\exception (see section \ref cmdexception "\\exception").
\par Note:
the tag \\throws is a synonym for this tag.
<hr>
\subsection cmdversion \version { version number }
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -58,8 +58,10 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_cgi_name CGI_NAME
<li> \refitem cfg_cgi_url CGI_URL
<li> \refitem cfg_class_diagrams CLASS_DIAGRAMS
<li> \refitem cfg_collaboration_graph COLLABORATION_GRAPH
<li> \refitem cfg_cols_in_alpha_index COLS_IN_ALPHA_INDEX
<li> \refitem cfg_compact_latex COMPACT_LATEX
<li> \refitem cfg_compact_rtf COMPACT_RTF
<li> \refitem cfg_disable_index DISABLE_INDEX
<li> \refitem cfg_doc_abspath DOC_ABSPATH
<li> \refitem cfg_doc_url DOC_URL
......@@ -79,7 +81,10 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_generate_htmlhelp GENERATE_HTMLHELP
<li> \refitem cfg_generate_latex GENERATE_LATEX
<li> \refitem cfg_generate_man GENERATE_MAN
<li> \refitem cfg_generate_rtf GENERATE_RTF
<li> \refitem cfg_generate_tagfile GENERATE_TAGFILE
<li> \refitem cfg_graphical_hierarchy GRAPHICAL_HIERARCHY
<li> \refitem cfg_have_dot HAVE_DOT
<li> \refitem cfg_hide_undoc_classes HIDE_UNDOC_CLASSES
<li> \refitem cfg_hide_undoc_members HIDE_UNDOC_MEMBERS
<li> \refitem cfg_html_align_members HTML_ALIGN_MEMBERS
......@@ -87,7 +92,9 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_html_header HTML_HEADER
<li> \refitem cfg_html_output HTML_OUTPUT
<li> \refitem cfg_html_stylesheet HTML_STYLESHEET
<li> \refitem cfg_ignore_prefix IGNORE_PREFIX
<li> \refitem cfg_image_path IMAGE_PATH
<li> \refitem cfg_include_graph INCLUDE_GRAPH
<li> \refitem cfg_include_path INCLUDE_PATH
<li> \refitem cfg_inherit_docs INHERIT_DOCS
<li> \refitem cfg_inline_info INLINE_INFO
......@@ -115,6 +122,8 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_searchengine SEARCHENGINE
<li> \refitem cfg_source_browser SOURCE_BROWSER
<li> \refitem cfg_strip_from_path STRIP_FROM_PATH
<li> \refitem cfg_rtf_hyperlinks RTF_HYPERLINKS
<li> \refitem cfg_rtf_output RTF_OUTPUT
<li> \refitem cfg_tab_size TAB_SIZE
<li> \refitem cfg_tagfiles TAGFILES
<li> \refitem cfg_verbatim_headers VERBATIM_HEADERS
......@@ -502,7 +511,6 @@ TD.md { background-color: #f2f2ff }
\anchor cfg_html_align_members
<dt>\c HTML_ALIGN_MEMBERS <dd>
If the \c HTML_ALIGN_MEMBERS tag is set to \c YES, the members of classes,
files or namespaces will be aligned in HTML using tables. If set to
NO a bullet list will be used.
......@@ -513,7 +521,6 @@ intent to support and test the aligned representation.
\anchor cfg_generate_htmlhelp
<dt>\c GENERATE_HTMLHELP <dd>
If the \c GENERATE_HTMLHELP tag is set to \c YES then
doxygen generates three additional HTML index files:
\c index.hhp, \c index.hhc, and \c index.hhk. The \c index.hhp is a
......@@ -534,20 +541,29 @@ and you can search for words in the documentation
(which basically renders \c doxysearch obsolete on Windows).
The HTML workshop also contains a viewer for compressed HTML files.
</dl>
\subsection alphabetical_index Alphabetical index options
<dl>
\anchor cfg_alphabetical_index
<dt>\c ALPHABETICAL_INDEX <dd>
If the \c ALPHABETICAL_INDEX tag is set to \c YES, an alphabetical index
of all compounds will be generated. Enable this if the project contains
a lot of classes, structs, unions or interfaces.
\anchor cfg_cols_in_alpha_index
<dt>\c COLS_IN_ALPHA_INDEX <dd>
If the alphabetical index is enabled
(see \c ALPHABETICAL_INDEX) then the \c COLS_IN_ALPHA_INDEX tag can be
used to specify the number of columns in which this list will be split (can be a number in the range [1..20])
\anchor cfg_ignore_prefix
<dt>\c IGNORE_PREFIX <dd>
In case all classes in a project start with a common prefix, all
classes will be put under the same header in the alphabetical index.
The \c IGNORE_PREFIX tag can be use to specify a prefix that should be ignored
while generating the index headers.
</dl>
\subsection latex_output LaTeX related options
......@@ -645,6 +661,44 @@ EXTRA_PACKAGES = times
</dl>
\subsection rtf_output RTF related options
<dl>
\anchor cfg_generate_rtf
<dt>\c GENERATE_RTF <dd>
\addindex GENERATE_RTF
If the \c GENERATE_RTF tag is set to \c YES Doxygen will generate RTF output.
For now this is experimental and is disabled by default. The RTF
output is optimised for Word 97 and may not look too pretty with
other readers/editors.
\anchor cfg_rtf_output
<dt>\c RTF_OUTPUT <dd>
\addindex RTF_OUTPUT
The \c RTF_OUTPUT tag is used to specify where the RTF docs will be put.
If a relative path is entered the value of OUTPUT_DIRECTORY will be
put in front of it. If left blank \c rtf will be used as the default path.
\anchor cfg_compact_rtf
<dt>\c COMPACT_RTF <dd>
\addindex COMPACT_RTF
If the \c COMPACT_RTF tag is set to \c YES Doxygen generates more compact
RTF documents. This may be useful for small projects and may help to
save some trees in general.
\anchor cfg_rtf_hyperlinks
<dt>\c RTF_HYPERLINKS <dd>
\addindex RTF_HYPERLINKS
If the \c RTF_HYPERLINKS tag is set to \c YES, the RTF that is generated
will contain hyperlink fields. The RTF file will
contain links (just like the HTML output) instead of page references.
This makes the output suitable for online browsing using Word or some other
Word compatible reader that support those fields.
\par note:
wordpad (write) and others do not support links.
</dl>
\subsection man_output Man page related options
<dl>
......@@ -758,7 +812,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
\anchor cfg_allexternals
<dt>\c ALLEXTERNALS <dd>
\addindex ALLEXTERNALS
if the \c ALLEXTERNALS tag is set to \c YES all external class will be listed
If the \c ALLEXTERNALS tag is set to \c YES all external class will be listed
in the class index. If set to \c NO only the inherited external classes
will be listed.
......@@ -768,6 +822,41 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
The \c PERL_PATH should be the absolute path and name of the perl script
interpreter (i.e. the result of `<tt>which perl</tt>').
</dl>
\subsection config_dot Dot options
<dl>
\anchor cfg_have_dot
<dt>\c HAVE_DOT <dd>
\addindex HAVE_DOT
If you set the \c HAVE_DOT tag to \c YES then doxygen will assume the dot tool is
available from the path. This tool is part of
<a href="http://www.research.att.com/sw/tools/graphviz/">Graphviz</a>, a graph
visualization toolkit from AT&T and Lucent Bell Labs. The other options in
this section have no effect if this option is set to \c NO (the default)
\anchor cfg_collaboration_graph
<dt>\c COLLABORATION_GRAPH <dd>
\addindex COLLABORATION_GRAPH
If the \c COLLABORATION_GRAPH and \c HAVE_DOT tags are set to \c YES then doxygen
will generate a graph for each documented class showing the direct and
indirect implementation dependencies (inheritance, containment, and
class references variables) of the class with other documented classes.
\anchor cfg_include_graph
<dt>\c INCLUDE_GRAPH <dd>
\addindex INCLUDE_GRAPH
If the \c ENABLE_PREPROCESSING, \c INCLUDE_GRAPH, and \c HAVE_DOT tags are
set to \c YES then doxygen will generate a graph for each documented file
showing the direct and indirect include dependencies of the file with other
documented files.
\anchor cfg_graphical_hierarchy
<dt>\c GRAPHICAL_HIERARCHY <dd>
\addindex GRAPHICAL_HIERATCHY
If the \c GRAPHICAL_HIERARCHY and \c HAVE_DOT tags are set to \c YES then
doxygen will graphical hierarchy of all classes instead of a textual one.
</dl>
\subsection config_search Search engine options
<dl>
......
%
% $Id$
%
% Copyright (C) 1997-1999 by Dimitri van Heesch.
% 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
......@@ -23,8 +23,8 @@
{\fancyplain{}{\bfseries\rightmark}}
\rhead[\fancyplain{}{\bfseries\leftmark}]
{\fancyplain{}{\bfseries\thepage}}
\rfoot[\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-1998}]{}
\lfoot[]{\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-1998}}
\rfoot[\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2000}]{}
\lfoot[]{\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2000}}
\cfoot{}
\newenvironment{CompactList}
{\begin{list}{}{
......
%
% $Id$
%
% Copyright (C) 1997-1999 by Dimitri van Heesch.
% 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
......@@ -45,6 +45,10 @@ Written by Dimitri van Heesch\\[2ex]
\part{User Manual}
\input{install}
\input{starting}
\input{docblocks}
\input{formulas}
\input{diagrams}
\input{preprocessing}
\input{faq}
\input{trouble}
\part{Reference Manual}
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -75,6 +75,15 @@ To make doxygen put <br><br>
in the documentation of the class MyClassName regardless of the name of the actual
header file in which the definition of MyClassName is contained.
If you want doxygen to show that the include file should be included using
brackets you should type:
\verbatim
/*! \class MyClassName include.h "path/include.h"
*
* Docs for MyClassName
*/
\endverbatim
<li><b>How can I use tag files in combination with compressed HTML</b>
If you want to refer from one compressed HTML file
......@@ -102,6 +111,28 @@ or you can use \c installdox to set the links as follows:
installdox -lb.tag@b.chm::
\endverbatim
<li><b>I don't like the quick index that is put above each HTML page, what do I do?</b>
You can disable the index by setting DISABLE_INDEX to YES. Then you can
put in your own header file by writing your own header and feed that to
HTML_HEADER.
<li><b>The overall HTML output looks different, while I only wanted to
use my own html header file</b>
You probably forgot to include the stylesheet <code>doxygen.css</code> that
doxygen generates. You can include this by putting
\verbatim
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
\endverbatim
In the HEAD section of the HTML page.
</ol>
\htmlonly
Go to the <a href="trouble.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
*/
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -22,17 +22,20 @@
<li>Requires very little overhead from the writer of the documentation.
Plain text will do, but for more fancy or structured output HTML tags
and/or some of doxygen's special commands can be used.
<li>Supports C++, (Corba or Microsoft) IDL and C sources.
<li>Supports C++, (Corba and Microsoft) IDL and C sources.
<li>Supports documentation of files, namespaces, classes, structs, unions,
templates, variables, functions, typedefs, enums and defines.
<li>JavaDoc (1.1), Qt-Doc, and KDOC compatible.
<li>Automatically generates class diagrams in HTML (as clickable
image maps) and \f$\mbox{\LaTeX}\f$ (as encapsulated postscript images).
<li>Using the dot tool of the Graphviz tool kit doxygen can generate
include dependency graphs, collaboration diagrams, and
graphical class hierarchy graphs.
<li>Allows you to put documentation in the header file (before the
declaration of an entity), source file (before the definition of an entity)
or in a separate file.
<li>Outputs documentation in on-line format (HTML and UNIX man page) and
off-line format (\f$\mbox{\LaTeX}\f$) simultaniously
off-line format (\f$\mbox{\LaTeX}\f$) and RTF simultaniously
(any one can be disabled if desired). Both formats are optimized for
ease of reading. <br>
Furthermore, compressed HTML can be generated from HTML output using
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -26,7 +26,7 @@ Version: $(VERSION)
\addindex license
\addindex GPL
Copyright &copy; 1997-1999 by
Copyright &copy; 1997-2000 by
<a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>.<p>
Permission to use, copy, modify, and distribute this software and its
......@@ -38,6 +38,10 @@ See the
GNU General Public License</a>
for more details.
<p>
It is hereby explicitly allowed that this program may be linked against
<a href="http://www.troll.no/qt">Troll Tech's Qt library</a>,
and distributed, without the GPL applying to Qt.
<p>
All output generated by Doxygen is not covered by this license.
<h2>Introduction</h2>
......@@ -69,6 +73,11 @@ The first part forms a user manual:
doxygen for your platform.
<li>Section \ref starting tells you how to generate your first piece of
documentation quickly.
<li>Section \ref docblocks demonstrates the various ways that code can
be documented.
<li>Section \ref formulas shows how to insert formulas in the documentation.
<li>Section \ref diagrams describes the diagrams and graphs that doxygen can generate.
<li>Section \ref preprocessing explains how doxygen deals with macro definitions.
<li>Section \ref faq gives answers to frequently asked questions.
<li>Section \ref trouble tells you what to do when you have problems.
</ul>
......@@ -136,6 +145,7 @@ Thanks go to:
<li>My brother <a href="http://www.stack.nl/~fidget/index.html">Frank</a>
for rendering the logos.
<li>Harm van der Heijden for adding HTML help support.
<li>Parker Waerchter for adding the RTF output generator.
<li>Jens Breitenstein, Christophe Bordeaux, Samuel Hägglund, Xet Erixon,
Vlastimil Havran, Ahmed Also Faisal, Alessandro Falappa, Kenji Nagamatsu,
Francisco Oltra Thennet, Olli Korhonen for providing translations into
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -91,6 +91,25 @@ The following binaries should now be available:
generated by doxygen.
</UL>
To take full advantage of doxygen's features the following additional
tools should be installed.
<ul>
<li>\f$\mbox{\LaTeX}\f$:
<a href="http://www.tug.org">teTeX 1.0</a> (for Unix) or
<a href="ftp://ctan.tug.org/tex-archive/systems/win32/web2c/fptex-0.3/">fpTeX 0.3</a> (for Windows)<br>
Needed for LaTeX and PDF output.
<li><a href="http://www.research.att.com/sw/tools/graphviz/">
the Graph visualization toolkit version 1.5</a><br>
Needed for the include dependency graphs, the graphical inheritance graphs,
and the collaboration graphs.<br>
<b>Note:</b> For windows you will have to set the <code>DOTFONTPATH</code> environment
variable to include the current directory (e.g. <code>DOTFONTPATH=.</code>)
<li><a href="http://msdn.microsoft.com/workshop/author/htmlhelp">
the HTML help workshop</a> (for Windows only)<br>
Needed for compiling compressed HTML output (a.k.a. the new Windows help format).
</ul>
Doxygen was developed and tested under Linux using the following tools:
<ul>
<li>EGCS version 2.91.66
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -27,6 +27,10 @@ The following output formats are \e directly supported by doxygen:
<dd>Generated if \c GENERATE_LATEX is set to \c YES in the configuration file.
<dt><b>Man pages</b>
<dd>Generated if \c GENERATE_MAN is set to \c YES in the configuration file.
<dt><b>RTF</b>
<dd>Generated if \c GENERATE_RTF is set to \c YES in the configuration file.<p>
Note that the RTF output probably only looks nice with Microsoft's
Word 97. If you have success with other programs, please let me know.
</dl>
The following output formats are \e indirectly supported by doxygen:
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -184,6 +184,51 @@ During parsing the following steps take place:
See section \ref htmlcmds for an overview of all supported HTML tags.
</ul>
Using a number of column aligned minus signs at the start of a
line in a comment block will generate a bullet list.
Nested lists are also possible.
Here is an example:
\verbatim
/*!
* A list of events:
* - mouse events
* - mouse move event
* - mouse click event
* - mouse double click event\n
* More info about the click event.
* - keyboard events
* - key down event
* - key up event
*
* More text here.
*/
\endverbatim
The result will be:
A list of events:
- mouse events
- mouse move event
- mouse click event\n
More info about the click event.
- mouse double click event
- keyboard events
- key down event
- key up event
More text here.
If you use tabs within lists, please make sure that \c TAB_SIZE in the
configuration file is set to the correct tab size.
\htmlonly
Go to the <a href="docblocks.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
*/
/*! \page docblocks Documenting the code
\subsection specialblock Special documentation blocks
The following types of special documentation blocks are supported by doxygen:
......@@ -357,7 +402,13 @@ Here is an example of a the use of these comment blocks:
enums. Furthermore, the structural commands mentioned in the
previous section are ignored inside these comment blocks.
\subsection formulas Including formulas in the documentation
\htmlonly
Go to the <a href="formulas.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
*/
/*! \page formulas Including formulas
Doxygen allows you to put \f$\mbox{\LaTeX}\f$ formulas in the
output (this works only for the HTML and \f$\mbox{\LaTeX}\f$ formats,
......@@ -420,7 +471,128 @@ from typos in formulas. It may have to be necessary to remove the
file <code>formula.repository</code> that is written in the html directory to
a rid of an incorrect formula
\subsection preprocessing Preprocessing
\htmlonly
Go to the <a href="diagrams.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
*/
/*! \page diagrams Graphs and diagrams
Doxygen has build-in support to generate inheritance diagrams for C++
classes.
Doxygen can use the "dot" tool from graphviz 1.5 to generate
more advanced diagrams & graphs. Graphviz is an open-sourced,
cross-platform graph drawing toolkit from AT&T and Lucent Bell Labs and
can be found at http://www.research.att.com/sw/tools/graphviz/
If you have the "dot" tool available in the path, you can set
\ref cfg_have_dot "HAVE_DOT" to \c YES in the configuration file to
let doxygen use it.
Doxygen uses the "dot" tool to generate the following graphs:
<ul>
<li>if \ref cfg_graphical_hierarchy "GRAPHICAL_HIERARCHY" is set to \c YES,
a graphical representation of the class diagram will be drawn, along
with the textual one. Currently this feature is supported for HTML only.\n
<b>Warning:</b> When you have a very large class hierarchy where many
classes derive from a common
base class, the resulting image may become too big to handle for some
browsers.
<li>if \ref cfg_include_graph "INCLUDE_GRAPH" is set to \c YES, an include
dependency graph is generated for each documented file that includes at
least one other file. This feature is currently supported for HTML and RTF
only.
<li>if \ref cfg_collaboration_graph "COLLABORATION_GRAPH" is set to YES, a
graph is drawn for each documented class and struct that shows:
<ul>
<li> the inheritance relations with base classes.
<li> the usage relations with other structs & classes (e.g.
class \c A has a member variable \c m_a of type class \c B, then
\c A has an arrow to \c B with \c m_a as label).
</ul>
</ul>
The elements in the class diagrams in HTML and RTF
have the following meaning:
<ul>
<li> A yellow box indicates a class. A box can have a
little marker in the lower right corner to indicate that the class
contains base classes that are hidden. If the box is filled with a
dashed pattern the inheritance relation is virtual.
<li> A white box indicates that the documentation of the class
is currently shown.
<li> A grey box indicates an undocumented class.
<li> A solid dark blue arrows indicates public inheritance.
<li> A dashed dark green arrows indicates protected inheritance.
<li> A dotted dark green arrows indicates private inheritance.
</ul>
The elements in the class diagram in \f$\mbox{\LaTeX}\f$ have the
following meaning:
<ul>
<li> A white box indicates a class.
A marker in the lower right corner of the box indicates that the
class has base classes that are hidden.
If the box has a dashed border this indicates virtual inheritance.
<li> A solid arrow indicates public inheritance.
<li> A dashed arrow indicates protected inheritance.
<li> A dotted arrow indicated private inheritance.
</ul>
The elements in the graphs generated by the dot tool have the following
meaning:
<ul>
<li> A white box indicates a class or struct. If the box has a
red border this indicates that the class contains related classes
that are hidden.
<li> A black box indicates that the class' documentation is currently shown.
<li> A dark blue arrow indicates an include relation (for the
include dependency graph) or public inheritance (for the other graphs).
<li> A dark green arrow indicates protected inheritance.
<li> A dark red arrow indicates private inheritance.
<li> A purple dashed arrow indicated a "usage" relation, the
edge of the arrow is labled with the variable(s) responsible for the
relation.
Class \c A uses class \c B, if class \c A has a member variable \c m
of type C, where B is a subtype of C (e.g. C could be \c B, \c B*, \c T<B>* ).
</ul>
The reason why classes or structs are sometimes hidden is too prevent images
to become too large. For the class diagrams the maximum tree width
is currently 8 elements. For the graphs generated with dot doxygen tries
to limit the width of the resulting image to 1024 pixels.
Here are a couple of header files that together show the various diagrams
that doxygen can generate:
<code>diagrams_a.h</code>
\verbinclude diagrams_a.h
<code>diagrams_b.h</code>
\verbinclude diagrams_b.h
<code>diagrams_c.h</code>
\verbinclude diagrams_c.h
<code>diagrams_d.h</code>
\verbinclude diagrams_d.h
<code>diagrams_e.h</code>
\verbinclude diagrams_e.h
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/diagrams/html/index.html">here</a>
for the corresponding HTML documentation that is generated by doxygen<br>
(<code>EXTRACT_ALL</code> = <code>YES</code> is used here).
\endhtmlonly
\htmlonly
Go to the <a href="preprocessing.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
*/
/*! \page preprocessing Preprocessing
Source files that are used as input to doxygen can be parsed by doxygen's
build-in C-preprocessor.
......@@ -482,6 +654,7 @@ of an abstract base class called \c IUnknown:
#define REFIID const IID *
#endif
/*! The IUnknown interface */
DECLARE_INTERFACE(IUnknown)
{
......@@ -555,15 +728,19 @@ As you can see doxygen's preprocessor is quite powerful, but if you want
even more flexibility you can always write an input filter and specify it
after the \c INPUT_FILTER tag.
\subsection moreinfo More information
If you are unsure what the effect of doxygen's preprocessing will be
you can run doxygen as follows:
\verbatim
doxygen -d Preprocessor
\endverbatim
This will instruct doxygen to dump the input sources to standard output after
preprocessing has been done (Hint: set <code>QUIET = YES</code> and
<code>WARNINGS = NO</code> in the configuration file to disable any other
output).
\addindex QdbtTabular
For a more elaborate example see <a href="http://www.stack.nl/~dimitri/qdbttabular/doc/html/index.html">
the documentation of QdbtTabular</a> \latexonly
({\tt http://www.stack.nl/$\sim$dimitri/qdbttabular/doc/html})\endlatexonly.
\htmlonly
I hope that was clear. If not, please let me know, so I can improve this document. If you have problems
take a look at the <a href="faq.html">faq</a> and the <a href="trouble.html">troubleshooting</a> sections.
Go to the <a href="faq.html">next</a> section or return to the
<a href="index.html">index</a>.
\endhtmlonly
*/
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -19,7 +19,8 @@ all: class/html/index.html \
afterdoc/html/index.html \
template/html/index.html \
tag/html/index.html \
group/html/index.html
group/html/index.html \
diagram/html/index.html
clean:
rm -rf class define enum file func page relates author \
......@@ -90,3 +91,6 @@ template/html/index.html: templ.cpp templ.cfg
group/html/index.html: group.cpp group.cfg
$(DOXYGEN)/bin/doxygen group.cfg
diagram/html/index.html: diagrams_a.h diagrams_b.h diagrams_c.h diagrams_d.h diagrams_e.h diagrams.cfg
$(DOXYGEN)/bin/doxygen diagrams.cfg
......@@ -18,7 +18,11 @@ all: class/html/index.html \
autolink/html/index.html \
tag/html/index.html \
restypedef/html/index.html \
afterdoc/html/index.html
afterdoc/html/index.html \
template/html/index.html \
tag/html/index.html \
group/html/index.html \
diagram/html/index.html
clean:
deltree /y class define enum file
......@@ -87,3 +91,12 @@ restypedef/html/index.html: restypedef.cpp restypedef.cfg
afterdoc/html/index.html: afterdoc.h afterdoc.cfg
$(DOXYDIR)\doxygen afterdoc.cfg
template/html/index.html: templ.cpp templ.cfg
$(DOXYDIR)\doxygen templ.cfg
group/html/index.html: group.cpp group.cfg
$(DOXYDIR)\doxygen group.cfg
diagram/html/index.html: diagrams_a.h diagrams_b.h diagrams_c.h diagrams_d.h diagrams_e.h diagrams.cfg
$(DOXYDIR)\doxygen diagrams.cfg
......@@ -4,7 +4,7 @@ class Test
{
}
/*! \class Test class.h inc/class.h
/*! \class Test class.h "inc/class.h"
* \brief This is a test class.
*
* Some details about the Test class
......
......@@ -14,7 +14,7 @@ struct CoordStruct
};
/*! Creates a type name for CoordStruct */
typedef struct CoordStruct Coord;
typedef CoordStruct Coord;
/*!
* This function returns the addition of \a c1 and \a c2, i.e:
......
......@@ -445,7 +445,7 @@ char *yytext;
* $Id$
*
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -269,7 +269,7 @@ static const short yycheck[] = { 1,
#ifdef __GNUC__
#define alloca __builtin_alloca
#else /* not GNU C. */
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || defined (__alpha)
#include <alloca.h>
#else /* not sparc */
#if defined (MSDOS) && !defined (__TURBOC__)
......
This diff is collapsed.
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -38,11 +38,12 @@ class MemberDef;
class ExampleList;
class MemberNameInfoList;
class MemberNameInfoDict;
class UsesClassDict;
struct IncludeInfo;
class ClassDef : public Definition
{
public:
enum CompoundType { Class=Entry::CLASS_SEC,
Struct=Entry::STRUCT_SEC,
Union=Entry::UNION_SEC,
......@@ -56,9 +57,9 @@ class ClassDef : public Definition
BaseClassList *baseClasses() { return inherits; }
void insertSuperClass(ClassDef *,Protection p,Specifier s,const char *t=0);
BaseClassList *superClasses() { return inheritedBy; }
void setIncludeFile(FileDef *fd) { incFile=fd; }
FileDef *includeFile() const { return incFile; }
void setIncludeName(const char *n_) { incName=n_; }
void setIncludeFile(FileDef *fd,const char *incName,bool local);
//FileDef *includeFile() const { return incFile; }
//void setIncludeName(const char *n_) { incName=n_; }
MemberNameInfoList *memberNameInfoList() { return allMemberNameInfoList; }
MemberNameInfoDict *memberNameInfoDict() { return allMemberNameInfoDict; }
void insertMember(const MemberDef *);
......@@ -68,7 +69,7 @@ class ClassDef : public Definition
void dumpMembers();
void writeDocumentation(OutputList &ol);
void writeMemberList(OutputList &ol);
void writeIncludeFile(OutputList &ol);
//void writeIncludeFile(OutputList &ol);
//void writeMembersToContents();
void writeDeclaration(OutputList &ol,MemberDef *md);
bool addExample(const char *anchor,const char *name, const char *file);
......@@ -96,17 +97,34 @@ class ClassDef : public Definition
NamespaceDef *getNamespace() { return nspace; }
void setFileDef(FileDef *fd) { fileDef=fd; }
FileDef *getFileDef() const { return fileDef; }
void mergeMembers();
bool isBaseClass(ClassDef *bcd);
void determineImplUsageRelation();
void determineIntfUsageRelation();
UsesClassDict *usedImplementationClasses() const
{
return usesImplClassDict;
}
UsesClassDict *usedInterfaceClasses() const
{
return usesIntfClassDict;
}
bool visited;
protected:
void addUsedInterfaceClasses(MemberDef *md,const char *typeStr);
private:
QCString fileName; // HTML containing the class docs
FileDef *incFile; // header file to refer to
IncludeInfo *incInfo; // header file to refer to
QCString incName; // alternative include file name
QCString memListFileName;
BaseClassList *inherits;
BaseClassList *inheritedBy;
NamespaceDef *nspace; // the namespace this class is in
/* member list by protection */
MemberList pubMembers;
MemberList proMembers;
MemberList priMembers;
......@@ -119,6 +137,16 @@ class ClassDef : public Definition
MemberList related;
MemberList signals;
MemberList friends;
/* member list by types */
MemberList constructors;
MemberList typedefMembers;
MemberList enumMembers;
MemberList enumValMembers;
MemberList functionMembers;
MemberList relatedMembers;
MemberList variableMembers;
MemberNameInfoList *allMemberNameInfoList;
MemberNameInfoDict *allMemberNameInfoDict;
ArgumentList *tempArgs;
......@@ -128,8 +156,45 @@ class ClassDef : public Definition
CompoundType compType;
Protection prot;
FileDef *fileDef;
UsesClassDict *usesImplClassDict;
UsesClassDict *usesIntfClassDict;
};
struct UsesClassDef
{
UsesClassDef(ClassDef *cd) : classDef(cd)
{
accessors = new QDict<void>(17);
}
~UsesClassDef()
{
delete accessors;
}
void addAccessor(const char *s)
{
if (accessors->find(s)==0)
{
accessors->insert(s,(void *)666);
}
}
ClassDef *classDef;
QDict<void> *accessors;
};
class UsesClassDict : public QDict<UsesClassDef>
{
public:
UsesClassDict(int size) : QDict<UsesClassDef>(size) {}
~UsesClassDict() {}
};
class UsesClassDictIterator : public QDictIterator<UsesClassDef>
{
public:
UsesClassDictIterator(const QDict<UsesClassDef> &d)
: QDictIterator<UsesClassDef>(d) {}
~UsesClassDictIterator() {}
};
struct BaseClassDef
{
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -15,6 +15,7 @@
*/
#include "classlist.h"
#include "config.h"
ClassList::ClassList() : QList<ClassDef>()
{
......@@ -28,7 +29,11 @@ int ClassList::compareItems(GCI item1, GCI item2)
{
ClassDef *c1=(ClassDef *)item1;
ClassDef *c2=(ClassDef *)item2;
return strcmp(c1->name(),c2->name());
int prefixLength = Config::ignorePrefix.length();
int i1 = c1->name().left(prefixLength)==Config::ignorePrefix ? prefixLength : 0;
int i2 = c2->name().left(prefixLength)==Config::ignorePrefix ? prefixLength : 0;
return strcmp(c1->name().data()+i1,c2->name().data()+i2);
}
ClassListIterator::ClassListIterator(const ClassList &cllist) :
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
This diff is collapsed.
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -77,7 +77,7 @@ typedef QList<CodeVarDef> CodeVarList;
*/
static CodeClassList g_codeClassList;
static CodeClassDict g_codeClassDict(17);
static CodeClassDict g_codeClassDict(1009);
static CodeVarList g_codeVarList;
static CodeVarList g_codeParmList;
static const char * g_inputString; //!< the code fragment as text
......@@ -203,10 +203,10 @@ static void writeMultiLineCodeLink(OutputList &ol,
static void addType()
{
if (g_name=="const") { g_name.resize(0); return; }
if (g_type.length()) g_type += ' ' ;
if (!g_type.isEmpty()) g_type += ' ' ;
g_type += g_name ;
g_name.resize(0) ;
if (g_type.length()) g_type += ' ' ;
if (!g_type.isEmpty()) g_type += ' ' ;
g_type += g_args ;
g_args.resize(0) ;
}
......@@ -214,7 +214,7 @@ static void addType()
static void addParmType()
{
if (g_parmName=="const") { g_parmName.resize(0); return; }
if (g_parmType.length()) g_parmType += ' ' ;
if (!g_parmType.isEmpty()) g_parmType += ' ' ;
g_parmType += g_parmName ;
g_parmName.resize(0) ;
}
......@@ -236,7 +236,7 @@ static void addVariable()
{
g_cvd.name=g_name.copy().simplifyWhiteSpace();
g_cvd.type=g_type.copy().simplifyWhiteSpace();
if (g_type.length()==0)
if (g_type.isEmpty())
return;
else if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
{
......@@ -249,7 +249,7 @@ static void addParameter()
{
g_cvd.name=g_parmName.copy().simplifyWhiteSpace();
g_cvd.type=g_parmType.copy().simplifyWhiteSpace();
if (g_cvd.type.length()==0)
if (g_cvd.type.isEmpty())
return;
else if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
{
......@@ -261,7 +261,7 @@ static void addParameter()
static void generateClassLink(OutputList &ol,char *clName)
{
QCString className=clName;
if (className.length()==0) return;
if (className.isEmpty()) return;
ClassDef *cd;
if ((cd=getClass(className)) && cd->isLinkable())
{
......@@ -273,10 +273,14 @@ static void generateClassLink(OutputList &ol,char *clName)
// g_exampleFile.data());
if (cd->addExample(anchor,g_exampleName,g_exampleFile))
{
bool latexOn = ol.isEnabled(OutputGenerator::Latex);
if (latexOn) ol.disable(OutputGenerator::Latex);
ol.pushGeneratorState();
//bool latexOn = ol.isEnabled(OutputGenerator::Latex);
//if (latexOn) ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.writeAnchor(anchor);
if (latexOn) ol.enable(OutputGenerator::Latex);
//if (latexOn) ol.enable(OutputGenerator::Latex);
ol.popGeneratorState();
g_anchorCount++;
}
}
......@@ -311,10 +315,13 @@ static bool getLink(const char *className,
// g_exampleFile.data());
if (md->addExample(anchor,g_exampleName,g_exampleFile))
{
bool latexEnabled = result.isEnabled(OutputGenerator::Latex);
if (latexEnabled) result.disable(OutputGenerator::Latex);
//bool latexEnabled = result.isEnabled(OutputGenerator::Latex);
result.pushGeneratorState();
//if (latexEnabled) result.disable(OutputGenerator::Latex);
result.disable(OutputGenerator::Latex);
result.writeAnchor(anchor);
if (latexEnabled) result.enable(OutputGenerator::Latex);
result.popGeneratorState();
//if (latexEnabled) result.enable(OutputGenerator::Latex);
g_anchorCount++;
}
}
......@@ -337,7 +344,7 @@ static bool getLink(const char *className,
static ClassDef *stripClassName(const char *s)
{
QCString tmp=s;
QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*");
static const QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*");
int p=0,i,l;
while ((i=re.match(tmp,p,&l))!=-1)
{
......@@ -475,7 +482,7 @@ static void generateFunctionLink(OutputList &ol,char *funcName)
locFunc=locFunc.right(locFunc.length()-i-2);
}
//printf("generateFunctionLink(%s) classScope=%s\n",locFunc.data(),locScope.data());
if (locScope.length()>0 && (ccd=g_codeClassDict[locScope]))
if (!locScope.isEmpty() && (ccd=g_codeClassDict[locScope]))
{
//printf("using classScope %s\n",g_classScope.data());
char *s=ccd->bases.first();
......@@ -635,7 +642,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
g_code->codify(yytext);
g_curlyCount++;
g_inClass=TRUE;
if (g_ccd.name.length()>0)
if (!g_ccd.name.isEmpty())
{
g_classScope=g_ccd.name.copy();
CodeClassDef *cd=new CodeClassDef(g_ccd);
......@@ -703,7 +710,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
<Body>{SCOPENAME}/{B}*"(" {
addType();
//if (type.length()==0)
//if (type.isEmpty())
QCString tmp=yytext;
generateFunctionLink(*g_code,yytext);
//else
......@@ -718,7 +725,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
g_lastStringContext=YY_START;
BEGIN( SkipString );
}
<SkipString>[^\"\\]* {
<SkipString>[^\"\\\n]* {
g_code->codify(yytext);
}
<SkipString>"//"|"/*" {
......@@ -738,12 +745,13 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<Body,MemberCall,MemberCall2,FuncCall>"'"((\\.)|(.))"'" {
g_code->codify(yytext);
}
<Body>"this->" { g_code->codify(yytext); }
<Body>"."|"->" {
g_code->codify(yytext);
BEGIN( MemberCall );
}
<MemberCall>{SCOPENAME}/{B}*"(" {
if (g_name.length()>0)
if (!g_name.isEmpty())
generateMemberLink(*g_code,g_name,yytext);
else
g_code->codify(yytext);
......@@ -759,7 +767,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
<Body>[,=;\[] {
g_code->codify(yytext);
if (g_type.length()>0)
if (!g_type.isEmpty())
addVariable();
g_name.resize(0);
if (*yytext!=',') g_type.resize(0);
......@@ -792,7 +800,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<MemberCall2,FuncCall>")"[ \t\n]*";" {
codifyLines(yytext);
g_bracketCount=0;
if (!g_inClass && g_type.length()>0)
if (!g_inClass && !g_type.isEmpty())
addVariable();
g_name.resize(0);g_type.resize(0);
g_parmType.resize(0);g_parmName.resize(0);
......@@ -832,7 +840,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
BEGIN( MemberCall2 );
}
<MemberCall2>([a-z_A-Z][a-z_A-Z0-9]*)/([ \t\n]*"(") {
if (g_args.length()>0)
if (!g_args.isEmpty())
generateMemberLink(*g_code,g_args,yytext);
else
g_code->codify(yytext);
......
This diff is collapsed.
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -37,6 +37,7 @@ struct Config
static QCString htmlOutputDir; // the directory to put the HTML files
static QCString latexOutputDir; // the directory to put the Latex files
static QCString manOutputDir; // the directory to put the man pages
static QCString rtfOutputDir; // the directory to put the RTF files
static QCString outputLanguage; // the output language
static QCString headerFile; // the name of the personal HTML header
static QCString latexHeaderFile; // the name of the personal LaTeX header
......@@ -52,6 +53,7 @@ struct Config
static QCString paperType; // the page type to generate docs for
static QCString manExtension; // extension the man page files
static QCString htmlStyleSheet; // user defined cascading style sheet
static QCString ignorePrefix; // prefix to ignore for the alphabetical index
static QStrList includePath; // list of include paths
static QStrList examplePath; // list of example paths
static QStrList imagePath; // list of image paths
......@@ -103,6 +105,13 @@ struct Config
static int tabSize; // number of spaces in a tab
static int colsInAlphaIndex; // number of columns in the alphabetical index
static bool inlineSourceFlag; // inline the definition bodies in the docs?
static bool haveDotFlag; // indicates wether or not dot is present
static bool collGraphFlag; // collaboration graph
static bool includeGraphFlag; // include graph
static bool gfxHierarchyFlag; // flag to enable graphical hierarchy
static bool generateRTF; // generate RTF flag
static bool compactRTFFlag; // generate more compact RTF
static bool rtfHyperFlag; // generate hyper links in RTF
};
#endif
This diff is collapsed.
......@@ -3,7 +3,7 @@
* $Id$
*
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -3,7 +3,7 @@
* $Id$
*
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -3,7 +3,7 @@
* $Id$
*
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -3,7 +3,7 @@
* $Id$
*
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -3,7 +3,7 @@
* $Id$
*
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -302,13 +302,13 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
*yy_cp = '\0'; \
yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 21
#define YY_END_OF_BUFFER 22
#define YY_NUM_RULES 22
#define YY_END_OF_BUFFER 23
static yyconst short int yy_accept[89] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
22, 20, 21, 5, 4, 8, 7, 20, 10, 2,
23, 20, 21, 5, 4, 8, 7, 20, 10, 2,
9, 2, 20, 13, 11, 12, 18, 18, 20, 20,
21, 16, 20, 19, 5, 8, 7, 0, 10, 9,
4, 0, 6, 3, 2, 2, 0, 2, 0, 0,
......@@ -451,7 +451,7 @@ char *yytext;
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -967,7 +967,12 @@ YY_RULE_SETUP
YY_BREAK
case 21:
YY_RULE_SETUP
#line 198 "declinfo.l"
#line 197 "declinfo.l"
YY_BREAK
case 22:
YY_RULE_SETUP
#line 199 "declinfo.l"
ECHO;
YY_BREAK
case YY_STATE_EOF(INITIAL):
......@@ -1864,7 +1869,7 @@ int main()
return 0;
}
#endif
#line 198 "declinfo.l"
#line 199 "declinfo.l"
/*@ ----------------------------------------------------------------------------
......@@ -1876,9 +1881,9 @@ void parseFuncDecl(const QCString &decl,QCString &cl,QCString &ctl,QCString &t,
inputString = decl;
//printf("Input=`%s'\n",inputString);
if (inputString==0) return;
inputPosition = 0;
inputPosition = 0;
classTempListFound = FALSE;
funcTempListFound = FALSE;
funcTempListFound = FALSE;
scope.resize(0);
className.resize(0);
classTempList.resize(0);
......@@ -1915,7 +1920,7 @@ void parseFuncDecl(const QCString &decl,QCString &cl,QCString &ctl,QCString &t,
a=removeRedundantWhiteSpace(args);
exc=removeRedundantWhiteSpace(exceptionString);
if (t.length()>0 && t.at(t.length()-1)==')')
if (!t.isEmpty() && t.at(t.length()-1)==')')
{
a.prepend(")");
t=t.left(t.length()-1);
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -194,6 +194,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
exceptionString+=*yytext;
}
<*>.
<*>\n
%%
......@@ -206,9 +207,9 @@ void parseFuncDecl(const QCString &decl,QCString &cl,QCString &ctl,QCString &t,
inputString = decl;
//printf("Input=`%s'\n",inputString);
if (inputString==0) return;
inputPosition = 0;
inputPosition = 0;
classTempListFound = FALSE;
funcTempListFound = FALSE;
funcTempListFound = FALSE;
scope.resize(0);
className.resize(0);
classTempList.resize(0);
......@@ -245,7 +246,7 @@ void parseFuncDecl(const QCString &decl,QCString &cl,QCString &ctl,QCString &t,
a=removeRedundantWhiteSpace(args);
exc=removeRedundantWhiteSpace(exceptionString);
if (t.length()>0 && t.at(t.length()-1)==')')
if (!t.isEmpty() && t.at(t.length()-1)==')')
{
a.prepend(")");
t=t.left(t.length()-1);
......
This diff is collapsed.
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
This diff is collapsed.
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -43,11 +43,13 @@ QCString Definition::nameToFile(const char *name)
{
switch(c)
{
case ':': result+="_"; break;
case ':': result+="_c_"; break;
case '<': result+="_lt"; break;
case '>': result+="_gt"; break;
case '*': result+="_ast"; break;
case '&': result+="_amp"; break;
case '|': result+="_p_"; break;
case ',': result+="_x_"; break;
case ' ': break;
default:
if (Config::caseSensitiveNames)
......@@ -161,17 +163,20 @@ static bool readCodeFragment(const char *fileName,
/*! Write a reference to the source code defining this definition */
void Definition::writeSourceRef(OutputList &ol,const char *scopeName)
{
ol.pushGeneratorState();
//printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
if (Config::sourceBrowseFlag && startBodyLine!=-1 && bodyDef)
{
//ol.disable(OutputGenerator::RTF);
ol.newParagraph();
//ol.enableAll();
QCString refText = theTranslator->trDefinedAtLineInSourceFile();
int lineMarkerPos = refText.find("@0");
int fileMarkerPos = refText.find("@1");
if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this.
{
QString lineStr,anchorStr;
QCString lineStr,anchorStr;
lineStr.sprintf("%d",startBodyLine);
anchorStr.sprintf("l%05d",startBodyLine);
if (lineMarkerPos<fileMarkerPos) // line marker before file marker
......@@ -243,6 +248,10 @@ void Definition::writeSourceRef(OutputList &ol,const char *scopeName)
{
err("Error: translation error: invalid markers in trDefinedInSourceFile()\n");
}
ol.disableAllBut(OutputGenerator::RTF);
ol.newParagraph();
ol.enableAll();
}
if (Config::inlineSourceFlag && startBodyLine!=-1 &&
endBodyLine>=startBodyLine && bodyDef)
......@@ -255,6 +264,7 @@ void Definition::writeSourceRef(OutputList &ol,const char *scopeName)
actualStart,actualEnd,codeFragment)
)
{
initParseCodeContext();
//printf("Read:\n`%s'\n\n",codeFragment.data());
ol.startCodeFragment();
parseCode(ol,scopeName,codeFragment,FALSE,0,
......@@ -262,6 +272,7 @@ void Definition::writeSourceRef(OutputList &ol,const char *scopeName)
ol.endCodeFragment();
}
}
ol.popGeneratorState();
}
bool Definition::hasDocumentation()
......
......@@ -2,7 +2,7 @@
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -33,17 +33,17 @@ class Definition
/*! destroys the definition */
virtual ~Definition();
/*! returns the name of the definition */
QCString name() const { return n; }
const QCString& name() const { return n; }
/*! returns the base name of the output file that contains this
* definition.
*/
virtual QCString getOutputFileBase() const = 0;
/*! Returns the name of the source listing of this file. */
QCString sourceName() const { return getOutputFileBase()+"-source"; }
const QCString sourceName() const { return getOutputFileBase()+"-source"; }
/*! returns the detailed description of this definition */
QCString documentation() const { return doc; }
const QCString& documentation() const { return doc; }
/*! returns the brief description of this definition */
QCString briefDescription() const { return brief; }
const QCString& briefDescription() const { return brief; }
/*! sets a new \a name for the definition */
void setName(const char *name) { n=name; }
/*! sets the documentation of this definition to \a d. */
......
......@@ -3,7 +3,7 @@
* $Id$
*
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -166,7 +166,7 @@ static void writeMapArea(QTextStream &t,ClassDef *cd,int x,int y,int w,int h)
if ((dest=tagDestinationDict[ref])) t << *dest << "/";
}
t << cd->getOutputFileBase() << ".html\" ";
t << "ALT=\"" << cd->name();
t << "alt=\"" << cd->name();
t << "\" shape=\"rect\" coords=\"" << x << "," << y << ",";
t << (x+w) << "," << (y+h) << "\">" << endl;
}
......@@ -230,10 +230,11 @@ void DiagramItem::addChild(DiagramItem *di)
void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
Protection prot,Specifier virt,const char *ts)
{
if (cd->visited) return; // error in the class diagram
//if (cd->visited) return; // the visit check does not work in case of
// multiple inheritance of the same class!
DiagramItem *di=new DiagramItem(parent, diagram->at(level)->count(),
cd,prot,virt,ts);
cd->visited=TRUE;
//cd->visited=TRUE;
if (parent) parent->addChild(di);
di->move(count()*gridWidth,level*gridHeight);
append(di);
......@@ -244,7 +245,7 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
while (bcd)
{
ClassDef *ccd=bcd->classDef;
if (ccd && ccd->isVisibleInHierarchy() && !ccd->visited) count++;
if (ccd && ccd->isVisibleInHierarchy() /*&& !ccd->visited*/) count++;
bcd=bcl->next();
}
if (count>0 && (prot!=Private || !doBases))
......@@ -264,7 +265,7 @@ void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
while (bcd)
{
ClassDef *ccd=bcd->classDef;
if (ccd && ccd->isVisibleInHierarchy() && !ccd->visited)
if (ccd && ccd->isVisibleInHierarchy() /*&& !ccd->visited*/)
{
row->insertClass(di,ccd,doBases,bcd->prot,
doBases?bcd->virt:Normal,
......@@ -969,8 +970,8 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path,
realWidth=pageWidth;
}
output << "}\n"
"\\begin{figure}[H]\n"
//output << "}\n";
output << ":\\begin{figure}[H]\n"
"\\begin{center}\n"
"\\leavevmode\n";
output << "\\setlength{\\epsfysize}{" << realHeight << "cm}\n";
......@@ -1251,6 +1252,6 @@ void ClassDiagram::writeImageMap(QTextStream &t,const char *path,
image.save((QCString)path+"/"+fileName+".gif");
t << "</MAP></P>" << endl;
t << "</map></p>" << endl;
}
......@@ -3,7 +3,7 @@
* $Id$
*
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -3,7 +3,7 @@
* $Id$
*
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
* 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
......@@ -106,7 +106,7 @@ extern FileNameDict includeNameDict;
extern FileNameDict exampleNameDict;
extern FileNameDict inputNameDict;
extern FileNameDict imageNameDict;
extern FileList includeFiles;
//extern FileList includeFiles;
extern StringDict typedefDict;
extern GroupList groupList;
extern GroupDict groupDict;
......
......@@ -23,7 +23,8 @@ HEADERS = doxygen.h scanner.h classdef.h classlist.h memberdef.h \
filename.h defargs.h groupdef.h gifenc.h diagram.h image.h \
namespacedef.h version.h language.h translator.h \
translator_nl.h translator_se.h translator_cz.h translator_fr.h \
translator_it.h formula.h debug.h membergroup.h htmlhelp.h
translator_it.h formula.h debug.h membergroup.h htmlhelp.h \
dot.h rtfgen.h
SOURCES = doxygen.cpp scanner.cpp classdef.cpp classlist.cpp memberdef.cpp \
membername.cpp index.cpp memberlist.cpp \
entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \
......@@ -33,7 +34,7 @@ SOURCES = doxygen.cpp scanner.cpp classdef.cpp classlist.cpp memberdef.cpp
tag.cpp filename.cpp declinfo.cpp defargs.cpp define.cpp \
diagram.cpp gifenc.cpp image.cpp namespacedef.cpp \
version.cpp language.cpp definition.cpp formula.cpp debug.cpp \
membergroup.cpp htmlhelp.cpp
membergroup.cpp htmlhelp.cpp dot.cpp rtfgen.cpp
win32:INCLUDEPATH += .
TARGET = ../bin/doxygen
OBJECTS_DIR = ../objects
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment