Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
doxverilog
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
doxverilog
Commits
367c98ad
Commit
367c98ad
authored
May 08, 2000
by
Dimitri van Heesch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.1.3
parent
59bbbf50
Changes
44
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
44 changed files
with
891 additions
and
411 deletions
+891
-411
INSTALL
INSTALL
+4
-4
README
README
+2
-2
VERSION
VERSION
+1
-1
configgen.cpp
addon/configgen/configgen.cpp
+10
-0
commands.doc
doc/commands.doc
+15
-10
config.doc
doc/config.doc
+19
-0
doxygen_manual.tex
doc/doxygen_manual.tex
+1
-0
faq.doc
doc/faq.doc
+6
-1
index.doc
doc/index.doc
+34
-23
starting.doc
doc/starting.doc
+202
-79
Makefile.in
examples/Makefile.in
+7
-2
Makefile.win.in
examples/Makefile.win.in
+6
-2
group.cpp
examples/group.cpp
+9
-4
memgrp.cfg
examples/memgrp.cfg
+6
-0
memgrp.cpp
examples/memgrp.cpp
+32
-0
make.bat
make.bat
+3
-3
doxygen.spec
packages/rpm/doxygen.spec
+5
-2
classdef.cpp
src/classdef.cpp
+46
-14
classdef.h
src/classdef.h
+1
-0
code.l
src/code.l
+9
-1
config.h
src/config.h
+1
-0
config.l
src/config.l
+16
-0
dot.cpp
src/dot.cpp
+161
-70
dot.h
src/dot.h
+14
-9
doxygen.cpp
src/doxygen.cpp
+55
-59
groupdef.cpp
src/groupdef.cpp
+140
-6
groupdef.h
src/groupdef.h
+13
-6
htmlgen.cpp
src/htmlgen.cpp
+2
-2
htmlgen.h
src/htmlgen.h
+2
-2
index.cpp
src/index.cpp
+1
-0
latexgen.cpp
src/latexgen.cpp
+18
-19
latexgen.h
src/latexgen.h
+2
-2
mangen.h
src/mangen.h
+2
-2
memberdef.cpp
src/memberdef.cpp
+6
-5
memberlist.cpp
src/memberlist.cpp
+1
-61
outputgen.h
src/outputgen.h
+3
-3
outputlist.cpp
src/outputlist.cpp
+1
-1
outputlist.h
src/outputlist.h
+6
-6
rtfgen.cpp
src/rtfgen.cpp
+2
-2
rtfgen.h
src/rtfgen.h
+2
-2
scanner.l
src/scanner.l
+8
-2
util.cpp
src/util.cpp
+13
-2
util.h
src/util.h
+3
-1
tmake.conf
tmake/lib/win32-msvc/tmake.conf
+1
-1
No files found.
INSTALL
View file @
367c98ad
DOXYGEN Version 1.1.
2-20000430
DOXYGEN Version 1.1.
3
CONTENTS
--------
...
...
@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.
2-20000430
.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.
2-20000430
.src.tar # unpack it
gunzip doxygen-1.1.
3
.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.
3
.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 (
30 April
2000)
Dimitri van Heesch (
08 May
2000)
README
View file @
367c98ad
DOXYGEN Version 1.1.
2-20000430
DOXYGEN Version 1.1.
3
Please read INSTALL for compilation instructions.
...
...
@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
30 April
2000)
Dimitri van Heesch (
08 May
2000)
VERSION
View file @
367c98ad
1.1.
2-20000430
1.1.
3
addon/configgen/configgen.cpp
View file @
367c98ad
...
...
@@ -1427,6 +1427,16 @@ void init()
"toolkit from AT&T and Lucent Bell Labs. The other options in this section
\n
"
"have no effect if this option is set to NO (the default)
\n
"
);
ConfigBool
::
add
(
"classGraphFlag"
,
"CLASS_GRAPH"
,
"TRUE"
,
"class graph"
,
"If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
\n
"
"will generate a graph for each documented class showing the direct and
\n
"
"indirect inheritance relations. Setting this tag to YES will force the
\n
"
"the CLASS_DIAGRAMS tag to NO.
\n
"
);
addDependency
(
"classGraphFlag"
,
"haveDotFlag"
);
ConfigBool
::
add
(
"collGraphFlag"
,
"COLLABORATION_GRAPH"
,
"TRUE"
,
...
...
doc/commands.doc
View file @
367c98ad
...
...
@@ -85,6 +85,7 @@ documentation:
<li> \refitem cmdline \line
<li> \refitem cmdlink \link
<li> \refitem cmdmainpage \mainpage
<li> \refitem cmdname \name
<li> \refitem cmdnamespace \namespace
<li> \refitem cmdoverload \overload
<li> \refitem cmdpage \page
...
...
@@ -186,20 +187,13 @@ Doxygen. Unrecognized commands are treated as normal text.
\addindex \defgroup
Indicates that a comment block contains documentation for a
group
of classes, files or namespaces. This can be used to
\ref modules "group"
of classes, files or namespaces. This can be used to
categorize classes, files or namespaces, and document those
categories.
categories. You can also uses groups as members of other groups,
thus building a hierarchy of groups.
The \<name\> argument should an single word identifier.
\par Example:
\verbinclude group.cpp
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/group/html/modules.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
\sa section \ref cmdingroup "\\ingroup"
<hr>
...
...
@@ -354,6 +348,17 @@ Doxygen. Unrecognized commands are treated as normal text.
section \ref cmdsubsection "\\subsection" and
section \ref cmdpage "\\page".
<hr>
\subsection cmdname \name (header)
This command turns a comment block into a header
definition of a member group. The
comment block should be followed by a
<code>//@{ ... //@}</code> block containing the
members of the group.
See section \ref memgroup for an example.
<hr>
\subsection cmdnamespace \namespace <name>
...
...
doc/config.doc
View file @
367c98ad
...
...
@@ -60,6 +60,7 @@ 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_class_graph
CLASS_GRAPH
<
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
...
...
@@ -115,6 +116,7 @@ followed by the descriptions of the tags grouped by category.
<
li
>
\
refitem
cfg_output_directory
OUTPUT_DIRECTORY
<
li
>
\
refitem
cfg_output_language
OUTPUT_LANGUAGE
<
li
>
\
refitem
cfg_paper_type
PAPER_TYPE
<
li
>
\
refitem
cfg_pdf_hyperlinks
PDF_HYPERLINKS
<
li
>
\
refitem
cfg_perl_path
PERL_PATH
<
li
>
\
refitem
cfg_predefined
PREDEFINED
<
li
>
\
refitem
cfg_project_name
PROJECT_NAME
...
...
@@ -704,6 +706,15 @@ EXTRA_PACKAGES = times
the
version
number
of
doxygen
,
the
project
name
(
see
PROJECT_NAME
),
or
the
project
number
(
see
PROJECT_NUMBER
).
\
anchor
cfg_pdf_hyperlinks
<
dt
>\
c
PDF_HYPERLINKS
<
dd
>
\
addindex
PDF_HYPERLINKS
If
the
\
c
PDF_HYPERLINKS
tag
is
set
to
\
c
YES
,
the
LaTeX
that
is
generated
is
prepared
for
conversion
to
pdf
(
using
ps2pdf
).
The
pdf
file
will
contain
links
(
just
like
the
HTML
output
)
instead
of
page
references
This
makes
the
output
suitable
for
online
browsing
using
a
pdf
viewer
.
\
anchor
cfg_latex_batchmode
<
dt
>\
c
LATEX_BATCHMODE
<
dd
>
\
addindex
LATEX_BATCHMODE
...
...
@@ -890,6 +901,14 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
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_class_graph
<dt>\c CLASS_GRAPH <dd>
\addindex CLASS_GRAPH
If the \c CLASS_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 inheritance relations. Setting this tag to \c YES will force the
the \c CLASS_DIAGRAMS tag to NO.
\anchor cfg_collaboration_graph
<dt>\c COLLABORATION_GRAPH <dd>
\addindex COLLABORATION_GRAPH
...
...
doc/doxygen_manual.tex
View file @
367c98ad
...
...
@@ -47,6 +47,7 @@ Written by Dimitri van Heesch\\[2ex]
\input
{
install
}
\input
{
starting
}
\input
{
docblocks
}
\input
{
grouping
}
\input
{
formulas
}
\input
{
diagrams
}
\input
{
preprocessing
}
...
...
doc/faq.doc
View file @
367c98ad
...
...
@@ -35,7 +35,7 @@ You should use the \\mainpage command inside a comment block like this:
*/
\endverbatim
<li><b>When I set EXTRACT_ALL to NO non of my function are shown in the documentation.</b></li>
<li><b>When I set EXTRACT_ALL to NO non of my function
s
are shown in the documentation.</b></li>
In order for global functions, variables, enums, typedefs, and defines
to be documented you should document the file in which these commands are
...
...
@@ -147,6 +147,11 @@ QTime and QIODevice classes.
Another reason is for the nice and bug free utility classes, like QList,
QDict, QString, QArray, QTextStream, QRegExp etc.
<li><b>Can use doxygen on my Java code?</b>
No, at the moment there is no support for Java. I suggest to
use Sun's JavaDoc instead.
</ol>
\htmlonly
...
...
doc/index.doc
View file @
367c98ad
...
...
@@ -47,23 +47,33 @@ Documents produced by Doxygen are derivative works derived from the
input used in their production; they are not affected by this license.
<h2>Introduction</h2>
Doxygen is a documentation system for C, C++ and IDL. It can generate an
on-line class browser (in HTML) and/or an off-line reference manual
(in \f$\mbox{\LaTeX}\f$) from a set
of documented source files. There is also support for generating
man pages and for converting the generated output into
Postscript, hyperlinked PDF or compressed HTML.
The documentation is extracted directly from the
sources. Doxygen is developed on <a href="http://www.linux.org">Linux</a>,
but it runs on most other UNIX flavors as well.
An executable for Windows 9x/NT is also available.
Doxygen can also be configured to extract the code-structure from undocumented
source files. This can be very useful to quickly find your way in large
source distributions.
You can even `abuse' doxygen for creating normal documentation (as I did
for this manual).
Doxygen is a documentation system for C++, IDL (Corba and Microsoft flavors)
and C.
It can help you in three ways:
<ol>
<li> It can generate an on-line documentation browser (in HTML) and/or an
off-line reference manual (in \f$\mbox{\LaTeX}\f$) from a set
of documented source files.
There is also support for generating output in RTF (MS-Word),
Postscript, hyperlinked PDF, compressed HTML, and Unix man pages.
The documentation is extracted directly from the sources, which
makes it much easier to keep the documentation consistent with the
source code.
<li> Doxygen can be configured to extract the code structure
from undocumented source files. This can be very useful to quickly
find your way in large source distributions.
The relations between the various elements are be visualized
by means of include dependency graphs, inheritance diagrams,
and collaboration diagrams, which are all generated automatically.
<li> You can even `abuse' doxygen for creating normal documentation (as I did
for this manual).
</ol>
Doxygen is developed on <a href="http://www.linux.org">Linux</a>,
but is set-up to be highly portable. As a result, it runs on most
other UNIX flavors as well. Furthermore, an executable for
Windows 9x/NT is also available.
This manual is divided into two parts, each of which is divided into several
sections.
...
...
@@ -77,6 +87,7 @@ The first part forms a user manual:
documentation quickly.
<li>Section \ref docblocks demonstrates the various ways that code can
be documented.
<li>Section \ref grouping shows how to group things together.
<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.
...
...
@@ -112,13 +123,13 @@ The second part forms a reference manual:
<h2>Projects using doxygen</h2>
I have compiled a
small
I have compiled a
\htmlonly
<a href="http://www.stack.nl/~dimitri/doxygen/projects.html">list of projects</a>
that use doxygen
that use doxygen
.
\endhtmlonly
\latexonly
list of projects that use doxygen (see {\tt http://www.stack.nl/$\sim$dimitri/doxygen/projects.html})
list of projects that use doxygen (see {\tt http://www.stack.nl/$\sim$dimitri/doxygen/projects.html})
.
\endlatexonly
If you know other projects, let me know and I'll add them.
...
...
@@ -143,13 +154,13 @@ Thanks go to:
Although I have rewritten practically all code since then, DOC++ has still
given me a good start in writing Doxygen.
<li>All people at Troll Tech, for creating a beautiful GUI Toolkit
(which is
even useful for GUI-less applications like doxygen
:-)
(which is
very useful as a Windows/Unix platform abstraction layer
:-)
<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>Joerg Baumann, for adding conditional documentation blocks,
and
PDF links.
<li>Joerg Baumann, for adding conditional documentation blocks,
PDF links
, and the configuration generator
.
<li>Matthias Andree for providing a .spec script for building rpms from the
sources.
<li>Jens Breitenstein, Christophe Bordeaux, Samuel Hägglund, Xet Erixon,
...
...
doc/starting.doc
View file @
367c98ad
This diff is collapsed.
Click to expand it.
examples/Makefile.in
View file @
367c98ad
...
...
@@ -20,12 +20,14 @@ all: class/html/index.html \
template/html/index.html
\
tag/html/index.html
\
group/html/index.html
\
diagrams/html/index.html
diagrams/html/index.html
\
memgrp/html/index.html
clean
:
rm
-rf
class define enum file func page relates author
\
par overload example include qtstyle jdstyle structcmd
\
autolink tag restypedef afterdoc template tag group diagrams
autolink tag restypedef afterdoc template tag group diagrams
\
memgrp
class/html/index.html
:
class.h class.cfg
$(DOXYGEN)
/bin/doxygen class.cfg
...
...
@@ -92,6 +94,9 @@ template/html/index.html: templ.cpp templ.cfg
group/html/index.html
:
group.cpp group.cfg
$(DOXYGEN)
/bin/doxygen group.cfg
memgrp/html/index.html
:
memgrp.cpp memgrp.cfg
$(DOXYGEN)
/bin/doxygen memgrp.cfg
diagrams/html/index.html
:
diagrams_a.h diagrams_b.h diagrams_c.h diagrams_d.h diagrams_e.h diagrams.cfg
ifneq
($(HAVE_DOT),)
$(DOXYGEN)/bin/doxygen
diagrams.cfg
...
...
examples/Makefile.win.in
View file @
367c98ad
...
...
@@ -21,14 +21,15 @@ all: class/html/index.html \
template/html/index.html
\
tag/html/index.html
\
group/html/index.html
\
diagrams/html/index.html
diagrams/html/index.html
\
memgrp/html/index.html
clean
:
deltree /y class define enum file
deltree /y func page relates author
deltree /y par overload example include qtstyle
deltree /y jdstyle structcmd autolink resdefine
deltree /y restypedef afterdoc template tag group diagrams
deltree /y restypedef afterdoc template tag group diagrams
memgrp
class/html/index.html
:
class.h class.cfg
$(DOXYDIR)
\d
oxygen class.cfg
...
...
@@ -97,5 +98,8 @@ template/html/index.html: templ.cpp templ.cfg
group/html/index.html
:
group.cpp group.cfg
$(DOXYDIR)
\d
oxygen group.cfg
memgrp/html/index.html
:
memgrp.cpp memgrp.cfg
$(DOXYDIR)
\d
oxygen memgrp.cfg
diagrams/html/index.html
:
diagrams_a.h diagrams_b.h diagrams_c.h diagrams_d.h diagrams_e.h diagrams.cfg
$(DOXYDIR)
\d
oxygen diagrams.cfg
examples/group.cpp
View file @
367c98ad
...
...
@@ -10,6 +10,11 @@
* This is the third group
*/
/*! \defgroup group4 The Fourth Group
* \ingroup group3
* Group 4 is a subgroup of group 3
*/
/*! \ingroup group1
* \brief class C1 in group 1
*/
...
...
@@ -35,11 +40,11 @@ class C4 {};
*/
class
C5
{};
/*! \ingroup group1 group2 group3
*
\brief class C6
in all groups
* \sa \link group1 The first group\endlink, group2, group3
/*! \ingroup group1 group2 group3
group4
*
namespace N1 is
in all groups
* \sa \link group1 The first group\endlink, group2, group3
, group4
*/
class
C6
{};
namespace
N1
{};
/*! \file
* \ingroup group3
...
...
examples/memgrp.cfg
0 → 100644
View file @
367c98ad
PROJECT_NAME = "Member Grouping"
OUTPUT_DIRECTORY = memgrp
GENERATE_LATEX = NO
GENERATE_MAN = NO
INPUT = memgrp.cpp
QUIET = YES
examples/memgrp.cpp
0 → 100644
View file @
367c98ad
/** A class. Details */
class
Test
{
public
:
/** @name Group1
*/
//@{
/** Function 1 in group 1. Details. */
void
func1InGroup1
();
void
func2InGroup1
();
//@}
/** Function without group. Details. */
void
ungroupedFunction
();
void
func1InGroup2
();
protected
:
void
func2InGroup2
();
};
void
Test
::
func1InGroup1
()
{}
void
Test
::
func2InGroup1
()
{}
/** @name Group2
* Description of group 2.
*/
//@{
/** Function 2 in group 2. Details. */
void
Test
::
func2InGroup2
()
{}
/** Function 1 in group 2. Details. */
void
Test
::
func1InGroup2
()
{}
//@}
make.bat
View file @
367c98ad
...
...
@@ -7,8 +7,8 @@ type makeconfig Makefile.win.in >Makefile
type makeconfig src\Makefile.in >src\Makefile
type makeconfig examples\Makefile.win.in >examples\Makefile
type makeconfig doc\Makefile.win.in >doc\Makefile
copy src\doxygen.pro.in
src\doxygen.pro
copy src\doxytag.pro.in
src\doxytag.pro
copy src\doxysearch.pro.in
src\doxysearch.pro
type src\doxygen.pro.in | sed "s/\$extraopts/release/g" >
src\doxygen.pro
type src\doxytag.pro.in | sed "s/\$extraopts/release/g" >
src\doxytag.pro
type src\doxysearch.pro.in | sed "s/\$extraopts/release/g" >
src\doxysearch.pro
nmake
packages/rpm/doxygen.spec
View file @
367c98ad
Name: doxygen
Version: 1.1.
2-20000430
Version: 1.1.
3
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
...
...
@@ -24,7 +24,7 @@ BuildPrereq: perl tetex
%build
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix %{prefix}
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix %{prefix}
--with-doxywizard
make
%install
...
...
@@ -36,6 +36,9 @@ make INSTALL=$RPM_BUILD_ROOT%{prefix} install
( cd $RPM_BUILD_ROOT
mkdir -p ./usr/doc/packages
mv .%{prefix}/doc/doxygen ./usr/doc/packages/doxygen
mv .%{prefix}/doc/doxysearch ./usr/doc/packages/doxysearch
mv .%{prefix}/doc/doxytag ./usr/doc/packages/doxytag
mv .%{prefix}/doc/doxywizard ./usr/doc/packages/doxywizard
)
%files
...
...
src/classdef.cpp
View file @
367c98ad
...
...
@@ -243,7 +243,7 @@ void ClassDef::insertMember(MemberDef *md,int groupId)
break
;
}
}
else
if
(
md
->
isTypedef
()
||
md
->
isEnumerate
())
else
if
(
md
->
isTypedef
()
||
md
->
isEnumerate
()
||
md
->
isEnumValue
()
)
{
switch
(
md
->
protection
())
{
...
...
@@ -675,8 +675,25 @@ void ClassDef::writeDocumentation(OutputList &ol)
if
(
icd
->
isVisibleInHierarchy
())
count
++
;
ibcd
=
inherits
->
next
();
}
if
(
Config
::
classDiagramFlag
&&
count
>
0
)
// write class diagram
if
(
Config
::
haveDotFlag
&&
Config
::
classGraphFlag
)
// write class diagram using dot
{
DotClassGraph
inheritanceGraph
(
this
,
DotClassGraph
::
Inheritance
);
if
(
!
inheritanceGraph
.
isTrivial
())
{
ol
.
pushGeneratorState
();
ol
.
disable
(
OutputGenerator
::
Latex
);
ol
.
disable
(
OutputGenerator
::
Man
);
ol
.
startDotGraph
();
parseText
(
ol
,
theTranslator
->
trClassDiagram
(
name
()));
ol
.
endDotGraph
(
inheritanceGraph
);
ol
.
popGeneratorState
();
}
}
else
if
(
Config
::
classDiagramFlag
&&
count
>
0
)
// write class diagram using build-in generator
{
ClassDiagram
diagram
(
this
);
// create a diagram of this class.
ol
.
startClassDiagram
();
...
...
@@ -688,20 +705,16 @@ void ClassDef::writeDocumentation(OutputList &ol)
if
(
Config
::
haveDotFlag
&&
Config
::
collGraphFlag
)
{
Dot
GfxUsageGraph
usageImplGraph
(
this
,
TRUE
);
Dot
ClassGraph
usageImplGraph
(
this
,
DotClassGraph
::
Implementation
);
if
(
!
usageImplGraph
.
isTrivial
())
{
ol
.
pushGeneratorState
();
ol
.
disable
(
OutputGenerator
::
Latex
);
ol
.
disable
(
OutputGenerator
::
Man
);
ol
.
start
CollaborationDiagram
();
ol
.
start
DotGraph
();
parseText
(
ol
,
theTranslator
->
trCollaborationDiagram
(
name
()));
//usageImplGraph.writeGraph(Config::htmlOutputDir);
//ol.writeString((QCString)"<p>Interface collaboration diagram for "
// "<a href=\"usage_intf_graph_"+name()+".html\">here</a>");
//ol.writeString((QCString)"<p>Implementation collaboration diagram for "
// "<a href=\"usage_impl_graph_"+name()+".html\">here</a>");
ol
.
endCollaborationDiagram
(
usageImplGraph
);
ol
.
enableAll
();
ol
.
endDotGraph
(
usageImplGraph
);
ol
.
popGeneratorState
();
}
}
...
...
@@ -1616,6 +1629,7 @@ void ClassDef::determineImplUsageRelation()
if
(
md
->
isVariable
())
// for each member variable in this class
{
QCString
type
=
md
->
typeString
();
int
typeLen
=
type
.
length
();
static
const
QRegExp
re
(
"[a-z_A-Z][a-z_A-Z0-9:]*"
);
//printf("in class %s found var type=`%s' name=`%s'\n",
// name().data(),type.data(),md->name().data());
...
...
@@ -1623,17 +1637,35 @@ void ClassDef::determineImplUsageRelation()
bool
found
=
FALSE
;
while
((
i
=
re
.
match
(
type
,
p
,
&
l
))
!=-
1
&&
!
found
)
// for each class name in the type
{
int
ts
=
p
+
l
;
int
te
=
ts
;
while
(
type
.
at
(
ts
)
==
' '
&&
ts
<
typeLen
)
ts
++
;
// skip any whitespace
if
(
type
.
at
(
ts
)
==
'<'
)
// assume template instance
{
// locate end of template
te
=
ts
+
1
;
int
brCount
=
1
;
while
(
te
<
typeLen
&&
brCount
!=
0
)
{
if
(
type
.
at
(
te
)
==
'<'
)
brCount
++
;
if
(
type
.
at
(
te
)
==
'>'
)
brCount
--
;
te
++
;
}
}
QCString
templSpec
;
if
(
te
>
ts
)
templSpec
=
type
.
mid
(
ts
,
te
-
ts
);
ClassDef
*
cd
=
getResolvedClass
(
name
()
+
"::"
+
type
.
mid
(
i
,
l
));
if
(
cd
==
0
)
cd
=
getResolvedClass
(
type
.
mid
(
i
,
l
));
// TODO: also try inbetween scopes!
if
(
cd
/*&& cd->isLinkable()*/
)
// class exists and is linkable
if
(
cd
)
// class exists
{
found
=
TRUE
;
if
(
usesImplClassDict
==
0
)
usesImplClassDict
=
new
UsesClassDict
(
257
);
UsesClassDef
*
ucd
=
usesImplClassDict
->
find
(
cd
->
name
());
if
(
ucd
==
0
)
if
(
ucd
==
0
||
ucd
->
templSpecifiers
!=
templSpec
)
{
ucd
=
new
UsesClassDef
(
cd
);
usesImplClassDict
->
insert
(
cd
->
name
(),
ucd
);
ucd
->
templSpecifiers
=
templSpec
;
//printf("Adding used class %s to class %s\n",
// cd->name().data(),name().data());
}
...
...
src/classdef.h
View file @
367c98ad
...
...
@@ -198,6 +198,7 @@ struct UsesClassDef
}
ClassDef
*
classDef
;
QDict
<
void
>
*
accessors
;
QCString
templSpecifiers
;
};
class
UsesClassDict
:
public
QDict
<
UsesClassDef
>
...
...
src/code.l
View file @
367c98ad
...
...
@@ -965,7 +965,15 @@ TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"u
{
startCodeLine(*g_code);
}
BEGIN(g_lastSpecialCContext);
if (g_lastSpecialCContext==SkipCxxComment)
{ // force end of C++ comment here
endFontClass();
BEGIN( g_lastCContext ) ;
}
else
{
BEGIN(g_lastSpecialCContext);
}
}
<RemoveSpecialCComment>"*/" {
BEGIN(g_lastSpecialCContext);
...
...
src/config.h
View file @
367c98ad
...
...
@@ -106,6 +106,7 @@ struct Config
static
bool
allExtFlag
;
// include all external classes flag
static
QCString
perlPath
;
// the absolute path to perl
static
bool
haveDotFlag
;
// indicates wether or not dot is present
static
bool
classGraphFlag
;
// class graph
static
bool
collGraphFlag
;
// collaboration graph
static
bool
includeGraphFlag
;
// include graph
static
bool
gfxHierarchyFlag
;
// flag to enable graphical hierarchy
...
...
src/config.l
View file @
367c98ad
...
...
@@ -138,6 +138,7 @@ QCString Config::genTagFile;
bool Config::allExtFlag = FALSE;
QCString Config::perlPath = "/usr/bin/perl";
bool Config::haveDotFlag = FALSE;
bool Config::classGraphFlag = TRUE;
bool Config::collGraphFlag = TRUE;
bool Config::includeGraphFlag = TRUE;
bool Config::gfxHierarchyFlag = TRUE;
...
...
@@ -275,6 +276,7 @@ static int yyread(char *buf,int max_size)
<Start>"ALLEXTERNALS"[ \t]*"=" { BEGIN(GetBool); b=&Config::allExtFlag; }
<Start>"PERL_PATH"[ \t]*"=" { BEGIN(GetString); s=&Config::perlPath; s->resize(0); }
<Start>"HAVE_DOT"[ \t]*"=" { BEGIN(GetBool); b=&Config::haveDotFlag; }
<Start>"CLASS_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::classGraphFlag; }
<Start>"COLLABORATION_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::collGraphFlag; }
<Start>"INCLUDE_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::includeGraphFlag; }
<Start>"GRAPHICAL_HIERARCHY"[ \t]*"=" { BEGIN(GetBool); b=&Config::gfxHierarchyFlag; }
...
...
@@ -557,6 +559,7 @@ void dumpConfig()
printf("perlPath=`%s'\n",Config::perlPath.data());
printf("# Configuration options related to the dot tool \n");
printf("haveDotFlag=`%d'\n",Config::haveDotFlag);
printf("classGraphFlag=`%d'\n",Config::classGraphFlag);
printf("collGraphFlag=`%d'\n",Config::collGraphFlag);
printf("includeGraphFlag=`%d'\n",Config::includeGraphFlag);
printf("gfxHierarchyFlag=`%d'\n",Config::gfxHierarchyFlag);
...
...
@@ -654,6 +657,7 @@ void Config::init()
Config::allExtFlag = FALSE;
Config::perlPath = "/usr/bin/perl";
Config::haveDotFlag = FALSE;
Config::classGraphFlag = TRUE;
Config::collGraphFlag = TRUE;
Config::includeGraphFlag = TRUE;
Config::gfxHierarchyFlag = TRUE;
...
...
@@ -1632,6 +1636,18 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::haveDotFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \n";
t << "# will generate a graph for each documented class showing the direct and \n";
t << "# indirect inheritance relations. Setting this tag to YES will force the \n";
t << "# the CLASS_DIAGRAMS tag to NO.\n";
t << "\n";
}
t << "CLASS_GRAPH = ";
writeBoolValue(t,Config::classGraphFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \n";
...
...
src/dot.cpp
View file @
367c98ad
This diff is collapsed.
Click to expand it.
src/dot.h
View file @
367c98ad
...
...
@@ -41,9 +41,11 @@ struct EdgeInfo
class
DotNode
{
friend
class
DotGfxHierarchyTable
;
friend
class
Dot
GfxUsage
Graph
;
friend
class
Dot
Class
Graph
;
friend
class
DotInclDepGraph
;
friend
class
DotNodeList
;
friend
void
writeDotGraph
(
DotNode
*
root
,
const
QCString
&
baseName
,
bool
lrRank
,
bool
renderParents
,
int
distance
);
public
:
DotNode
(
int
n
,
const
char
*
lab
,
const
char
*
url
,
int
distance
=
0
,
bool
rootNode
=
FALSE
);
~
DotNode
();
...
...
@@ -60,14 +62,15 @@ class DotNode
void
removeChild
(
DotNode
*
n
);
void
removeParent
(
DotNode
*
n
);
int
number
()
const
{
return
m_number
;
}
void
write
(
QTextStream
&
t
,
bool
topDown
,
int
maxDistance
=
1000
);
void
write
(
QTextStream
&
t
,
bool
topDown
,
bool
toChildren
,
int
maxDistance
=
1000
);
int
m_subgraphId
;
void
clearWriteFlag
();
private
:
void
colorConnectedNodes
(
int
curColor
);
void
writeBox
(
QTextStream
&
t
,
bool
hasNonReachableChildren
);
void
writeArrow
(
QTextStream
&
t
,
DotNode
*
cn
,
EdgeInfo
*
ei
,
bool
topDown
);
void
writeArrow
(
QTextStream
&
t
,
DotNode
*
cn
,
EdgeInfo
*
ei
,
bool
topDown
,
bool
pointBack
=
TRUE
);
const
DotNode
*
findDocNode
()
const
;
// only works for acyclic graphs!
int
m_number
;
QCString
m_label
;
//!< label text
...
...
@@ -98,22 +101,24 @@ class DotGfxHierarchyTable
DotNodeList
*
m_rootSubgraphs
;
};
class
Dot
GfxUsage
Graph
class
Dot
Class
Graph
{
public
:
DotGfxUsageGraph
(
ClassDef
*
cd
,
bool
impl
,
int
maxRecusionDepth
=
1000
);
~
DotGfxUsageGraph
();
enum
GraphType
{
Interface
,
Implementation
,
Inheritance
};
DotClassGraph
(
ClassDef
*
cd
,
GraphType
t
,
int
maxRecusionDepth
=
1000
);
~
DotClassGraph
();
bool
isTrivial
()
const
;
void
writeGraph
(
QTextStream
&
t
,
const
char
*
path
,
bool
TBRank
=
TRUE
);
QCString
diskName
()
const
;
private
:
void
buildGraph
(
ClassDef
*
cd
,
DotNode
*
n
,
int
level
);
void
addClass
(
ClassDef
*
cd
,
DotNode
*
n
,
int
prot
,
const
char
*
label
,
int
level
);
void
buildGraph
(
ClassDef
*
cd
,
DotNode
*
n
,
int
level
,
bool
base
);
void
addClass
(
ClassDef
*
cd
,
DotNode
*
n
,
int
prot
,
const
char
*
label
,
int
level
,
const
char
*
templSpec
,
bool
base
);
DotNode
*
m_startNode
;
QDict
<
DotNode
>
*
m_usedNodes
;
static
int
m_curNodeNumber
;
bool
m_impl
;
GraphType
m_graphType
;
int
m_recDepth
;
QCString
m_diskName
;
int
m_maxDistance
;
...
...
src/doxygen.cpp
View file @
367c98ad
...
...
@@ -154,7 +154,7 @@ int documentedIncludeFiles;
QTextStream
tagFile
;
void
addMemberDocs
(
Entry
*
root
,
MemberDef
*
md
,
const
char
*
funcDecl
,
bool
over_load
);
bool
over_load
,
NamespaceList
*
nl
=
0
);
const
char
idMask
[]
=
"[A-Za-z_][A-Za-z_0-9]*"
;
QCString
spaces
;
...
...
@@ -195,6 +195,7 @@ void buildGroupList(Entry *root)
gd
->
addSectionsToDefinition
(
root
->
anchors
);
groupList
.
append
(
gd
);
groupDict
.
insert
(
root
->
name
,
gd
);
addGroupToGroups
(
root
,
gd
);
}
}
EntryListIterator
eli
(
*
root
->
sublist
);
...
...
@@ -407,48 +408,6 @@ static bool addNamespace(Entry *root,ClassDef *cd)
return
FALSE
;
}
static
void
addClassToGroups
(
Entry
*
root
,
ClassDef
*
cd
)
{
QListIterator
<
QCString
>
sli
(
*
root
->
groups
);
QCString
*
s
;
for
(;(
s
=
sli
.
current
());
++
sli
)
{
GroupDef
*
gd
=
0
;
if
(
!
s
->
isEmpty
()
&&
(
gd
=
groupDict
[
*
s
]))
{
gd
->
addClass
(
cd
);
//printf("Compound %s: in group %s\n",cd->name().data(),s->data());
}
}
}
static
void
addMemberToGroups
(
Entry
*
root
,
MemberDef
*
md
)
{
QListIterator
<
QCString
>
sli
(
*
root
->
groups
);
QCString
*
s
;
for
(;(
s
=
sli
.
current
());
++
sli
)
{
GroupDef
*
gd
=
0
;
if
(
!
s
->
isEmpty
()
&&
(
gd
=
groupDict
[
*
s
]))
{
GroupDef
*
mgd
=
md
->
groupDef
();
if
(
mgd
==
0
)
{
gd
->
insertMember
(
md
,
root
->
mGrpId
);
md
->
setGroupDef
(
gd
);
}
else
if
(
mgd
!=
gd
)
{
warn
(
"Warning: Member %s found in multiple groups.!
\n
"
"The member will be put in group %s, and not in group %s"
,
md
->
name
().
data
(),
mgd
->
name
().
data
(),
gd
->
name
().
data
()
);
}
//printf("Member %s: in group %s\n",md->name().data(),s->data());
}
}
}
//----------------------------------------------------------------------
// build a list of all classes mentioned in the documentation
// and all classes that have a documentation block before their definition.
...
...
@@ -689,14 +648,8 @@ void buildNamespaceList(Entry *root)
nd
->
setBriefDescription
(
root
->
brief
);
nd
->
addSectionsToDefinition
(
root
->
anchors
);
QListIterator
<
QCString
>
sli
(
*
root
->
groups
);
QCString
*
s
;
for
(;(
s
=
sli
.
current
());
++
sli
)
{
GroupDef
*
gd
=
0
;
if
(
!
s
->
isEmpty
()
&&
(
gd
=
groupDict
[
*
s
]))
gd
->
addNamespace
(
nd
);
}
//printf("Adding namespace to group\n");
addNamespaceToGroups
(
root
,
nd
);
bool
ambig
;
// file definition containing the namespace nd
...
...
@@ -710,6 +663,7 @@ void buildNamespaceList(Entry *root)
// add class to the list
namespaceList
.
inSort
(
nd
);
namespaceDict
.
insert
(
fullName
,
nd
);
}
}
}
...
...
@@ -783,6 +737,39 @@ void findUsingDirectives(Entry *root)
fd
->
addUsingDirective
(
usingNd
);
}
}
else
// unknown namespace, but add it anyway.
{
NamespaceDef
*
nd
=
new
NamespaceDef
(
root
->
name
);
nd
->
setDocumentation
(
root
->
doc
);
// copy docs to definition
nd
->
setBriefDescription
(
root
->
brief
);
nd
->
addSectionsToDefinition
(
root
->
anchors
);
QListIterator
<
QCString
>
sli
(
*
root
->
groups
);
QCString
*
s
;
for
(;(
s
=
sli
.
current
());
++
sli
)
{
GroupDef
*
gd
=
0
;
if
(
!
s
->
isEmpty
()
&&
(
gd
=
groupDict
[
*
s
]))
gd
->
addNamespace
(
nd
);
}
bool
ambig
;
// file definition containing the namespace nd
FileDef
*
fd
=
findFileDef
(
&
inputNameDict
,
root
->
fileName
,
ambig
);
// insert the namespace in the file definition
if
(
fd
)
{
fd
->
insertNamespace
(
nd
);
fd
->
addUsingDirective
(
nd
);
}
// the empty string test is needed for extract all case
nd
->
setBriefDescription
(
root
->
brief
);
nd
->
insertUsedFile
(
root
->
fileName
);
// add class to the list
namespaceList
.
inSort
(
nd
);
namespaceDict
.
insert
(
root
->
name
,
nd
);
}
}
}
EntryListIterator
eli
(
*
root
->
sublist
);
...
...
@@ -1961,7 +1948,7 @@ void computeMemberReferences()
// over_load is set the standard overload text is added.
void
addMemberDocs
(
Entry
*
root
,
MemberDef
*
md
,
const
char
*
funcDecl
,
bool
over_load
)
bool
over_load
,
NamespaceList
*
nl
)
{
//printf("addMemberDocs: `%s'::`%s' `%s' funcDecl=`%s'\n",
// root->parent->name.data(),md->name().data(),md->argsString(),funcDecl);
...
...
@@ -1973,7 +1960,9 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
NamespaceDef
*
nd
=
md
->
getNamespace
();
if
(
matchArguments
(
md
->
argumentList
(),
root
->
argList
,
cd
?
cd
->
name
().
data
()
:
0
,
nd
?
nd
->
name
().
data
()
:
0
nd
?
nd
->
name
().
data
()
:
0
,
TRUE
,
nl
)
)
{
...
...
@@ -2715,10 +2704,16 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
);
// TODO: match loop for all possible scopes
bool
ambig
;
FileDef
*
fd
=
findFileDef
(
&
inputNameDict
,
root
->
fileName
,
ambig
);
// list of namespaces using in the file that this member definition is part of
NamespaceList
*
nl
=
fd
?
fd
->
getUsedNamespaces
()
:
0
;
bool
matching
=
md
->
isVariable
()
||
md
->
isTypedef
()
||
// needed for function pointers
(
md
->
argumentList
()
==
0
&&
root
->
argList
->
count
()
==
0
)
||
matchArguments
(
argList
,
root
->
argList
,
className
,
namespaceName
);
matchArguments
(
argList
,
root
->
argList
,
className
,
namespaceName
,
TRUE
,
nl
);
Debug
::
print
(
Debug
::
FindMembers
,
0
,
"6. match results = %d
\n
"
,
matching
);
...
...
@@ -2742,7 +2737,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
{
//printf("addMemberDocs root->inLine=%d md->isInline()=%d\n",
// root->inLine,md->isInline());
addMemberDocs
(
root
,
md
,
funcDecl
,
overloaded
);
addMemberDocs
(
root
,
md
,
funcDecl
,
overloaded
,
nl
);
count
++
;
}
}
...
...
@@ -4533,7 +4528,8 @@ int readDir(QFileInfo *fi,
err
(
"Error: source %s is not a readable file or directory... skipping.
\n
"
,
cfi
->
absFilePath
().
data
());
}
else
if
(
cfi
->
isFile
()
&&
patternMatch
(
cfi
,
patList
)
&&
!
patternMatch
(
cfi
,
exclPatList
))
(
patList
==
0
||
patternMatch
(
cfi
,
patList
))
&&
!
patternMatch
(
cfi
,
exclPatList
))
{
totalSize
+=
cfi
->
size
()
+
cfi
->
absFilePath
().
length
()
+
4
;
QCString
name
=
convertToQCString
(
cfi
->
fileName
());
...
...
@@ -4991,13 +4987,13 @@ int main(int argc,char **argv)
msg
(
"Freeing input...
\n
"
);
input
.
resize
(
0
);
msg
(
"Building group list...
\n
"
);
buildGroupList
(
root
);
msg
(
"Building namespace list...
\n
"
);
buildNamespaceList
(
root
);
findUsingDirectives
(
root
);
msg
(
"Building group list...
\n
"
);
buildGroupList
(
root
);
//msg("Computing group relations...\n");
//computeGroupRelations(root);
...
...
src/groupdef.cpp
View file @
367c98ad
...
...
@@ -36,7 +36,8 @@ GroupDef::GroupDef(const char *na,const char *t) :
{
fileList
=
new
FileList
;
classList
=
new
ClassList
;
// groupList = new GroupList;
groupList
=
new
GroupList
;
namespaceList
=
new
NamespaceList
;
allMemberList
=
new
MemberList
;
allMemberDict
=
new
QDict
<
MemberDef
>
;
...
...
@@ -57,6 +58,10 @@ GroupDef::~GroupDef()
{
delete
fileList
;
delete
classList
;
delete
groupList
;
delete
namespaceList
;
delete
allMemberList
;
delete
allMemberDict
;
delete
memberGroupList
;
delete
memberGroupDict
;
}
...
...
@@ -120,14 +125,18 @@ void GroupDef::insertMember(MemberDef *md,int groupId)
}
}
//
void GroupDef::addGroup(const GroupDef *def)
//
{
//
groupList->append(def);
//
}
void
GroupDef
::
addGroup
(
const
GroupDef
*
def
)
{
groupList
->
append
(
def
);
}
int
GroupDef
::
countMembers
()
const
{
return
fileList
->
count
()
+
classList
->
count
()
+
allMemberList
->
count
();
return
fileList
->
count
()
+
classList
->
count
()
+
namespaceList
->
count
()
+
groupList
->
count
()
+
allMemberList
->
count
();
}
/*! Compute the HTML anchor names for all members in the class */
...
...
@@ -188,6 +197,55 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
ol
.
endMemberList
();
}
if
(
namespaceList
->
count
()
>
0
)
{
ol
.
startMemberHeader
();
parseText
(
ol
,
theTranslator
->
trNamespaces
());
ol
.
endMemberHeader
();
ol
.
startMemberList
();
NamespaceDef
*
nd
=
namespaceList
->
first
();
while
(
nd
)
{
ol
.
startMemberItem
(
0
);
ol
.
docify
(
"namespace"
);
ol
.
insertMemberAlign
();
ol
.
writeObjectLink
(
nd
->
getReference
(),
nd
->
getOutputFileBase
(),
0
,
nd
->
name
());
ol
.
endMemberItem
(
FALSE
);
if
(
!
nd
->
briefDescription
().
isEmpty
()
&&
Config
::
briefMemDescFlag
)
{
ol
.
startMemberDescription
();
parseDoc
(
ol
,
0
,
0
,
nd
->
briefDescription
());
ol
.
endMemberDescription
();
ol
.
newParagraph
();
}
nd
=
namespaceList
->
next
();
}
ol
.
endMemberList
();
}
if
(
groupList
->
count
()
>
0
)
{
ol
.
startMemberHeader
();
parseText
(
ol
,
theTranslator
->
trModules
());
ol
.
endMemberHeader
();
ol
.
startMemberList
();
GroupDef
*
gd
=
groupList
->
first
();
while
(
gd
)
{
ol
.
startMemberItem
(
0
);
//ol.insertMemberAlign();
ol
.
writeObjectLink
(
gd
->
getReference
(),
gd
->
getOutputFileBase
(),
0
,
gd
->
groupTitle
());
ol
.
endMemberItem
(
FALSE
);
if
(
!
gd
->
briefDescription
().
isEmpty
()
&&
Config
::
briefMemDescFlag
)
{
ol
.
startMemberDescription
();
parseDoc
(
ol
,
0
,
0
,
gd
->
briefDescription
());
ol
.
endMemberDescription
();
ol
.
newParagraph
();
}
gd
=
groupList
->
next
();
}
ol
.
endMemberList
();
}
classList
->
writeDeclaration
(
ol
);
...
...
@@ -303,3 +361,79 @@ void GroupDef::writeDocumentation(OutputList &ol)
endFile
(
ol
);
ol
.
popGeneratorState
();
}
//---- helper functions ------------------------------------------------------
void
addClassToGroups
(
Entry
*
root
,
ClassDef
*
cd
)
{
QListIterator
<
QCString
>
sli
(
*
root
->
groups
);
QCString
*
s
;
for
(;(
s
=
sli
.
current
());
++
sli
)
{
GroupDef
*
gd
=
0
;
if
(
!
s
->
isEmpty
()
&&
(
gd
=
groupDict
[
*
s
]))
{
gd
->
addClass
(
cd
);
//printf("Compound %s: in group %s\n",cd->name().data(),s->data());
}
}
}
void
addNamespaceToGroups
(
Entry
*
root
,
NamespaceDef
*
nd
)
{
//printf("root->groups->count()=%d\n",root->groups->count());
QListIterator
<
QCString
>
sli
(
*
root
->
groups
);
QCString
*
s
;
for
(;(
s
=
sli
.
current
());
++
sli
)
{
GroupDef
*
gd
=
0
;
//printf("group `%s'\n",s->data());
if
(
!
s
->
isEmpty
()
&&
(
gd
=
groupDict
[
*
s
]))
{
gd
->
addNamespace
(
nd
);
//printf("Namespace %s: in group %s\n",nd->name().data(),s->data());
}
}
}
void
addGroupToGroups
(
Entry
*
root
,
GroupDef
*
subGroup
)
{
QListIterator
<
QCString
>
sli
(
*
root
->
groups
);
QCString
*
s
;
for
(;(
s
=
sli
.
current
());
++
sli
)
{
GroupDef
*
gd
=
0
;
if
(
!
s
->
isEmpty
()
&&
(
gd
=
groupDict
[
*
s
]))
{
gd
->
addGroup
(
subGroup
);
}
}
}
void
addMemberToGroups
(
Entry
*
root
,
MemberDef
*
md
)
{
QListIterator
<
QCString
>
sli
(
*
root
->
groups
);
QCString
*
s
;
for
(;(
s
=
sli
.
current
());
++
sli
)
{
GroupDef
*
gd
=
0
;
if
(
!
s
->
isEmpty
()
&&
(
gd
=
groupDict
[
*
s
]))
{
GroupDef
*
mgd
=
md
->
groupDef
();
if
(
mgd
==
0
)
{
gd
->
insertMember
(
md
,
root
->
mGrpId
);
md
->
setGroupDef
(
gd
);
}
else
if
(
mgd
!=
gd
)
{
warn
(
"Warning: Member %s found in multiple groups.!
\n
"
"The member will be put in group %s, and not in group %s"
,
md
->
name
().
data
(),
mgd
->
name
().
data
(),
gd
->
name
().
data
()
);
}
//printf("Member %s: in group %s\n",md->name().data(),s->data());
}
}
}
src/groupdef.h
View file @
367c98ad
...
...
@@ -41,12 +41,12 @@ class GroupDef : public Definition
public
:
GroupDef
(
const
char
*
name
,
const
char
*
title
);
~
GroupDef
();
//const char *groupFile() const { return fileName; }
QCString
getOutputFileBase
()
const
{
return
fileName
;
}
const
char
*
groupTitle
()
const
{
return
title
;
}
void
addFile
(
const
FileDef
*
def
);
void
addClass
(
const
ClassDef
*
def
);
void
addNamespace
(
const
NamespaceDef
*
def
);
void
addGroup
(
const
GroupDef
*
def
);
void
insertMember
(
MemberDef
*
def
,
int
groupId
);
void
addMemberToGroup
(
MemberDef
*
def
,
int
groupId
);
void
writeDocumentation
(
OutputList
&
ol
);
...
...
@@ -64,13 +64,15 @@ class GroupDef : public Definition
private
:
QCString
title
;
// title of the group
QCString
fileName
;
// base name of the generated file
FileList
*
fileList
;
// list of all files in the group
ClassList
*
classList
;
// list of all classes in the group
NamespaceList
*
namespaceList
;
// list of all namespace in the group
FileList
*
fileList
;
// list of files in the group
ClassList
*
classList
;
// list of classes in the group
NamespaceList
*
namespaceList
;
// list of namespaces in the group
GroupList
*
groupList
;
// list of sub groups.
MemberList
*
allMemberList
;
// list of all members in the group
QDict
<
MemberDef
>
*
allMemberDict
;
// members sorted to type
// members sorted by type
MemberList
defineMembers
;
MemberList
protoMembers
;
MemberList
typedefMembers
;
...
...
@@ -80,7 +82,7 @@ class GroupDef : public Definition
MemberList
varMembers
;
/* user defined member groups */
MemberGroupList
*
memberGroupList
;
MemberGroupList
*
memberGroupList
;
// list of member groups in this group
MemberGroupDict
*
memberGroupDict
;
};
...
...
@@ -95,4 +97,9 @@ class GroupListIterator : public QListIterator<GroupDef>
GroupListIterator
(
const
GroupList
&
l
)
:
QListIterator
<
GroupDef
>
(
l
)
{}
};
void
addClassToGroups
(
Entry
*
root
,
ClassDef
*
cd
);
void
addNamespaceToGroups
(
Entry
*
root
,
NamespaceDef
*
nd
);
void
addGroupToGroups
(
Entry
*
root
,
GroupDef
*
subGroup
);
void
addMemberToGroups
(
Entry
*
root
,
MemberDef
*
md
);
#endif
src/htmlgen.cpp
View file @
367c98ad
...
...
@@ -784,11 +784,11 @@ void HtmlGenerator::endMemberDoc()
t
<<
"</table>"
<<
endl
;
}
void
HtmlGenerator
::
start
CollaborationDiagram
()
void
HtmlGenerator
::
start
DotGraph
()
{
}
void
HtmlGenerator
::
end
CollaborationDiagram
(
DotGfxUsage
Graph
&
g
)
void
HtmlGenerator
::
end
DotGraph
(
DotClass
Graph
&
g
)
{
g
.
writeGraph
(
t
,
Config
::
htmlOutputDir
);
}
...
...
src/htmlgen.h
View file @
367c98ad
...
...
@@ -214,8 +214,8 @@ class HtmlGenerator : public OutputGenerator
{
t
<<
"</td></tr>"
<<
endl
;
}
//static void docifyStatic(QTextStream &t,const char *str);
void
start
CollaborationDiagram
();
void
end
CollaborationDiagram
(
DotGfxUsage
Graph
&
g
);
void
start
DotGraph
();
void
end
DotGraph
(
DotClass
Graph
&
g
);
void
startInclDepGraph
();
void
endInclDepGraph
(
DotInclDepGraph
&
g
);
void
writeGraphicalHierarchy
(
DotGfxHierarchyTable
&
g
);
...
...
src/index.cpp
View file @
367c98ad
...
...
@@ -1449,6 +1449,7 @@ void writeGroupList(OutputList &ol)
GroupDef
*
gd
;
for
(;(
gd
=
gli
.
current
());
++
gli
)
{
//printf("gd->name()=%s #members=%d\n",gd->name().data(),gd->countMembers());
if
(
gd
->
countMembers
()
>
0
)
{
ol
.
startDescItem
();
...
...
src/latexgen.cpp
View file @
367c98ad
...
...
@@ -47,22 +47,21 @@ static QCString filterTitle(const char *s)
return
result
;
}
//static QCString escapeLabelName(const QCString &s)
//{
// QCString result;
// uint i;
// for (i=0;i<s.length();i++)
// {
// char c=s.at(i);
// switch (c)
// {
// case '~': result+=".1"; break;
// case '%': result+=".2"; break;
// default: result+=c;
// }
// }
// return result;
//}
static
QCString
escapeLabelName
(
const
QCString
&
s
)
{
QCString
result
;
uint
i
;
for
(
i
=
0
;
i
<
s
.
length
();
i
++
)
{
char
c
=
s
.
at
(
i
);
switch
(
c
)
{
case
'%'
:
result
+=
"
\\
%"
;
break
;
default:
result
+=
c
;
}
}
return
result
;
}
LatexGenerator
::
LatexGenerator
()
:
OutputGenerator
()
...
...
@@ -861,11 +860,11 @@ void LatexGenerator::startMemberDoc(const char *clname,
docify
(
clname
);
t
<<
"}!"
;
}
t
<<
memname
<<
"@{"
;
t
<<
escapeLabelName
(
memname
)
<<
"@{"
;
docify
(
memname
);
t
<<
"}}"
<<
endl
;
t
<<
"
\\
index{"
<<
memname
<<
"@{"
;
t
<<
"
\\
index{"
<<
escapeLabelName
(
memname
)
<<
"@{"
;
docify
(
memname
);
t
<<
"}"
;
if
(
clname
)
...
...
@@ -921,7 +920,7 @@ void LatexGenerator::addToIndex(const char *s1,const char *s2)
{
if
(
s1
)
{
t
<<
"
\\
index{"
<<
s1
<<
"@{"
;
t
<<
"
\\
index{"
<<
escapeLabelName
(
s1
)
<<
"@{"
;
docify
(
s1
);
t
<<
"}"
;
if
(
s2
)
...
...
src/latexgen.h
View file @
367c98ad
...
...
@@ -211,8 +211,8 @@ class LatexGenerator : public OutputGenerator
//static void docifyStatic(QTextStream &t,const char *str);
void
start
CollaborationDiagram
()
{}
void
end
CollaborationDiagram
(
DotGfxUsage
Graph
&
)
{}
void
start
DotGraph
()
{}
void
end
DotGraph
(
DotClass
Graph
&
)
{}
void
startInclDepGraph
()
{}
void
endInclDepGraph
(
DotInclDepGraph
&
)
{}
void
writeGraphicalHierarchy
(
DotGfxHierarchyTable
&
)
{}
...
...
src/mangen.h
View file @
367c98ad
...
...
@@ -197,8 +197,8 @@ class ManGenerator : public OutputGenerator
void
startDescTableData
()
{
}
void
endDescTableData
()
{}
void
start
CollaborationDiagram
()
{}
void
end
CollaborationDiagram
(
DotGfxUsage
Graph
&
)
{}
void
start
DotGraph
()
{}
void
end
DotGraph
(
DotClass
Graph
&
)
{}
void
startInclDepGraph
()
{}
void
endInclDepGraph
(
DotInclDepGraph
&
)
{}
void
writeGraphicalHierarchy
(
DotGfxHierarchyTable
&
)
{}
...
...
src/memberdef.cpp
View file @
367c98ad
...
...
@@ -104,7 +104,8 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
bool
first
=
TRUE
;
while
(
a
)
{
ol
.
startParameter
(
first
);
first
=
FALSE
;
if
(
!
md
->
isDefine
())
ol
.
startParameter
(
first
);
else
ol
.
docify
(
" "
);
first
=
FALSE
;
QRegExp
re
(
")("
);
int
vp
;
if
(
!
a
->
attrib
.
isEmpty
())
// argument has an IDL attribute
...
...
@@ -154,7 +155,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
if
(
a
)
{
ol
.
docify
(
", "
);
// there are more arguments
ol
.
endParameter
(
FALSE
);
if
(
!
md
->
isDefine
())
ol
.
endParameter
(
FALSE
);
}
}
ol
.
pushGeneratorState
();
...
...
@@ -1004,7 +1005,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol
.
docify
(
"]"
);
ol
.
endTypewriter
();
}
ol
.
endParameter
(
TRUE
);
if
(
!
isDefine
())
ol
.
endParameter
(
TRUE
);
ol
.
endMemberDoc
();
ol
.
endDoxyAnchor
();
ol
.
startIndent
();
...
...
@@ -1300,11 +1301,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
void
MemberDef
::
warnIfUndocumented
()
{
//
if (memberGroup) return;
if
(
memberGroup
)
return
;
ClassDef
*
cd
=
memberClass
();
NamespaceDef
*
nd
=
getNamespace
();
FileDef
*
fd
=
getFileDef
();
GroupDef
*
gd
=
groupDef
();
GroupDef
*
gd
=
groupDef
();
Definition
*
d
=
0
;
const
char
*
t
=
0
;
if
(
cd
)
...
...
src/memberlist.cpp
View file @
367c98ad
...
...
@@ -119,67 +119,7 @@ void MemberList::countDocMembers()
(
Config
::
extractAllFlag
||
md
->
detailsAreVisible
())
)
{
static
QRegExp
r
(
"@[0-9]+"
);
int
dummy
;
switch
(
md
->
memberType
())
{
case
MemberDef
:
:
Enumeration
:
if
(
r
.
match
(
md
->
name
(),
0
,
&
dummy
)
==-
1
)
{
m_count
++
;
}
break
;
case
MemberDef
:
:
EnumValue
:
{
MemberDef
*
scope
;
scope
=
md
->
getEnumScope
();
if
(
scope
&&
r
.
match
(
scope
->
name
(),
0
,
&
dummy
)
!=-
1
)
m_count
++
;
}
break
;
default
:
m_count
++
;
break
;
}
// QRegExp r("@[0-9]+");
// int dummy;
// switch(md->memberType())
// {
// case MemberDef::Variable:
// varCnt++;
// break;
// case MemberDef::Function:
// case MemberDef::Signal:
// case MemberDef::Slot:
// funcCnt++;
// break;
// case MemberDef::Enumeration:
// if (r.match(md->name(),0,&dummy)==-1)
// {
// enumCnt++;
// }
// break;
// case MemberDef::EnumValue:
// {
// MemberDef *scope;
// scope=md->getEnumScope();
// if (scope && r.match(scope->name(),0,&dummy)!=-1)
// enumValCnt++;
// }
// break;
// case MemberDef::Typedef:
// typeCnt++;
// break;
// case MemberDef::Prototype:
// protoCnt++;
// break;
// case MemberDef::Define:
// defCnt++;
// break;
// case MemberDef::Friend:
// friendCnt++;
// }
if
(
md
->
memberType
()
!=
MemberDef
::
EnumValue
)
m_count
++
;
}
md
=
next
();
}
...
...
src/outputgen.h
View file @
367c98ad
...
...
@@ -26,7 +26,7 @@
#include "index.h"
class
ClassDiagram
;
class
Dot
GfxUsage
Graph
;
class
Dot
Class
Graph
;
class
DotInclDepGraph
;
class
DotGfxHierarchyTable
;
...
...
@@ -200,8 +200,8 @@ class OutputGenerator
virtual
void
startDescTableData
()
=
0
;
virtual
void
endDescTableData
()
=
0
;
virtual
void
start
CollaborationDiagram
()
=
0
;
virtual
void
end
CollaborationDiagram
(
DotGfxUsage
Graph
&
g
)
=
0
;
virtual
void
start
DotGraph
()
=
0
;
virtual
void
end
DotGraph
(
DotClass
Graph
&
g
)
=
0
;
virtual
void
startInclDepGraph
()
=
0
;
virtual
void
endInclDepGraph
(
DotInclDepGraph
&
g
)
=
0
;
virtual
void
writeGraphicalHierarchy
(
DotGfxHierarchyTable
&
g
)
=
0
;
...
...
src/outputlist.cpp
View file @
367c98ad
...
...
@@ -257,7 +257,7 @@ void OutputList::forall(void (OutputGenerator::*func)(a1,a2,a3,a4),a1,a2,a3,a4)
FORALL1
(
const
char
*
a1
,
a1
)
FORALL1
(
char
a1
,
a1
)
FORALL1
(
int
a1
,
a1
)
FORALL1
(
Dot
GfxUsage
Graph
&
a1
,
a1
)
FORALL1
(
Dot
Class
Graph
&
a1
,
a1
)
FORALL1
(
DotInclDepGraph
&
a1
,
a1
)
FORALL1
(
DotGfxHierarchyTable
&
a1
,
a1
)
#if defined(HAS_BOOL_TYPE)
...
...
src/outputlist.h
View file @
367c98ad
...
...
@@ -33,7 +33,7 @@
void forall(void (OutputGenerator::*func)(arg1,arg2,arg3,arg4),arg1,arg2,arg3,arg4)
class
ClassDiagram
;
class
Dot
GfxUsage
Graph
;
class
Dot
Class
Graph
;
class
DotInclDepGraph
;
class
DotGfxHierarchyTable
;
...
...
@@ -347,10 +347,10 @@ class OutputList
{
forall
(
&
OutputGenerator
::
startDescTableData
);
}
void
endDescTableData
()
{
forall
(
&
OutputGenerator
::
endDescTableData
);
}
void
start
CollaborationDiagram
()
{
forall
(
&
OutputGenerator
::
start
CollaborationDiagram
);
}
void
end
CollaborationDiagram
(
DotGfxUsage
Graph
&
g
)
{
forall
(
&
OutputGenerator
::
end
CollaborationDiagram
,
g
);
}
void
start
DotGraph
()
{
forall
(
&
OutputGenerator
::
start
DotGraph
);
}
void
end
DotGraph
(
DotClass
Graph
&
g
)
{
forall
(
&
OutputGenerator
::
end
DotGraph
,
g
);
}
void
startInclDepGraph
()
{
forall
(
&
OutputGenerator
::
startInclDepGraph
);
}
void
endInclDepGraph
(
DotInclDepGraph
&
g
)
...
...
@@ -383,7 +383,7 @@ class OutputList
FORALLPROTO1
(
char
);
FORALLPROTO1
(
IndexSections
);
FORALLPROTO1
(
int
);
FORALLPROTO1
(
Dot
GfxUsage
Graph
&
);
FORALLPROTO1
(
Dot
Class
Graph
&
);
FORALLPROTO1
(
DotInclDepGraph
&
);
FORALLPROTO1
(
DotGfxHierarchyTable
&
);
#if defined(HAS_BOOL_TYPE)
...
...
src/rtfgen.cpp
View file @
367c98ad
...
...
@@ -1927,11 +1927,11 @@ static bool PreProcessFile(QDir &d,QCString &infName, QTextStream &t, bool bIncl
return
TRUE
;
}
void
RTFGenerator
::
start
CollaborationDiagram
()
void
RTFGenerator
::
start
DotGraph
()
{
}
void
RTFGenerator
::
end
CollaborationDiagram
(
DotGfxUsage
Graph
&
g
)
void
RTFGenerator
::
end
DotGraph
(
DotClass
Graph
&
g
)
{
newParagraph
();
t
<<
"{
\\
comment This would be an image map..."
<<
endl
;
...
...
src/rtfgen.h
View file @
367c98ad
...
...
@@ -191,8 +191,8 @@ class RTFGenerator : public OutputGenerator
void
startDescTableData
();
void
endDescTableData
();
void
start
CollaborationDiagram
();
void
end
CollaborationDiagram
(
DotGfxUsage
Graph
&
);
void
start
DotGraph
();
void
end
DotGraph
(
DotClass
Graph
&
);
void
startInclDepGraph
();
void
endInclDepGraph
(
DotInclDepGraph
&
);
void
writeGraphicalHierarchy
(
DotGfxHierarchyTable
&
)
{}
...
...
src/scanner.l
View file @
367c98ad
...
...
@@ -830,7 +830,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
if (result.left(5)!="http:")
{
warn("Warning: image file %s is not found in IMAGE_PATH: "
"assuming external image.
",fileName);
"assuming external image.
\n
",fileName);
}
}
return result;
...
...
@@ -877,7 +877,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?)
SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
SCOPEMASK {ID}?(("::"|"#")?(~)?{ID})+
URLMASK [a-z_A-Z0-9\~\:\@\#\.\-\+\/]+
URLMASK [a-z_A-Z0-9\~\:\
?\
@\#\.\-\+\/]+
NONTERM [\{\}\[\]\`\~\@\|\-\+\#\$\/\\\!\%\^\&\*()a-z_A-Z<>0-9]
WORD ({NONTERM}+([^\n\t ]*{NONTERM}+)?)|("\""[^\n\"]"\"")
ATTR ({B}+[^>\n]*)?
...
...
@@ -1125,6 +1125,9 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<DocScan>^{B}*(("//"{B}*)?)"*"*{B}*"-"{B}+ { /* found list item marker */
addListItemMarker(yytext);
}
<DocScan>\n{B}*"-" {
addListItemMarker(yytext+1);
}
<DocScan>"<!--" { BEGIN(DocSkipHtmlComment); }
<DocSkipHtmlComment>"--"[!]?">" { BEGIN(DocScan); }
<DocSkipHtmlComment>.
...
...
@@ -3970,6 +3973,9 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->brief+=' ';
lineCount();
}
<JavaDoc>".\\"/[ \t\r\n] {
current->brief+=".";
}
<JavaDoc>"."[ \t\r\n] {
lineCount();
current->brief+=".";
...
...
src/util.cpp
View file @
367c98ad
...
...
@@ -946,7 +946,8 @@ static void trimNamespaceScope(QCString &t1,QCString &t2)
// stored in the list should be equal.
bool
matchArguments
(
ArgumentList
*
srcAl
,
ArgumentList
*
dstAl
,
const
char
*
cl
,
const
char
*
ns
,
bool
checkCV
)
const
char
*
cl
,
const
char
*
ns
,
bool
checkCV
,
NamespaceList
*
usingList
)
{
QCString
className
=
cl
;
QCString
namespaceName
=
ns
;
...
...
@@ -1048,9 +1049,18 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
srcAType
=
trimScope
(
namespaceName
,
srcAType
);
dstAType
=
trimScope
(
namespaceName
,
dstAType
);
}
if
(
usingList
&&
usingList
->
count
()
>
0
)
{
NamespaceListIterator
nli
(
*
usingList
);
NamespaceDef
*
nd
;
for
(;(
nd
=
nli
.
current
());
++
nli
)
{
srcAType
=
trimScope
(
nd
->
name
(),
srcAType
);
dstAType
=
trimScope
(
nd
->
name
(),
dstAType
);
}
}
//printf("srcAType=%s dstAType=%s\n",srcAType.data(),dstAType.data());
//printf("`%s' <=> `%s'\n",srcAType.data(),dstAType.data());
uint
srcPos
=
0
,
dstPos
=
0
;
bool
equal
=
TRUE
;
while
(
srcPos
<
srcAType
.
length
()
&&
dstPos
<
dstAType
.
length
()
&&
equal
)
...
...
@@ -1201,6 +1211,7 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl)
// argListToString(srcAl).data(),argListToString(dstAl).data());
//printArgList(srcAl);printf(" <=> ");
//printArgList(dstAl);printf("\n");
if
(
srcAl
==
0
||
dstAl
==
0
||
srcAl
->
count
()
!=
dstAl
->
count
())
{
return
;
// invalid argument lists -> do not merge
...
...
src/util.h
View file @
367c98ad
...
...
@@ -35,6 +35,7 @@ class ExampleList;
class
ClassList
;
class
BaseClassList
;
class
GroupDef
;
class
NamespaceList
;
extern
void
setAnchors
(
char
id
,
MemberList
*
ml
,
int
groupId
=-
1
);
extern
QCString
fileToString
(
const
char
*
name
);
...
...
@@ -53,7 +54,8 @@ extern bool generateLink(OutputList &ol,const char *,
extern
void
generateFileRef
(
OutputList
&
ol
,
const
char
*
,
const
char
*
linkTxt
=
0
);
extern
bool
matchArguments
(
ArgumentList
*
,
ArgumentList
*
,
const
char
*
cl
=
0
,
const
char
*
ns
=
0
,
bool
checkCV
=
TRUE
);
const
char
*
cl
=
0
,
const
char
*
ns
=
0
,
bool
checkCV
=
TRUE
,
NamespaceList
*
usingList
=
0
);
extern
void
mergeArguments
(
ArgumentList
*
,
ArgumentList
*
);
extern
QCString
substituteClassNames
(
const
QCString
&
s
);
extern
QCString
convertSlashes
(
const
QCString
&
s
,
bool
dots
=
FALSE
);
...
...
tmake/lib/win32-msvc/tmake.conf
View file @
367c98ad
...
...
@@ -11,7 +11,7 @@ TMAKE_CC = cl
TMAKE_CFLAGS
= -
nologo
TMAKE_CFLAGS_WARN_ON
= -
W3
TMAKE_CFLAGS_WARN_OFF
= -
W0
TMAKE_CFLAGS_RELEASE
= -
O
1
TMAKE_CFLAGS_RELEASE
= -
O
2
TMAKE_CFLAGS_DEBUG
= -
Zi
TMAKE_CFLAGS_MT
= -
MT
TMAKE_CFLAGS_MT_DBG
= -
MTd
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment