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
5ade6c6e
Commit
5ade6c6e
authored
Jun 25, 2000
by
dimitri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.1.4-20000625
parent
cb417a1f
Changes
37
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
631 additions
and
239 deletions
+631
-239
INSTALL
INSTALL
+4
-4
README
README
+2
-2
VERSION
VERSION
+1
-1
configgen.cpp
addon/configgen/configgen.cpp
+51
-7
README
addon/doxywizard/README
+2
-0
commands.doc
doc/commands.doc
+11
-0
config.doc
doc/config.doc
+51
-10
doxygen.spec
packages/rpm/doxygen.spec
+1
-1
classdef.cpp
src/classdef.cpp
+67
-56
classdef.h
src/classdef.h
+1
-0
code.l
src/code.l
+37
-3
config.h
src/config.h
+5
-1
config.l
src/config.l
+80
-8
dot.cpp
src/dot.cpp
+38
-28
dot.h
src/dot.h
+6
-3
doxygen.cpp
src/doxygen.cpp
+49
-39
filedef.cpp
src/filedef.cpp
+37
-1
filedef.h
src/filedef.h
+5
-1
latexgen.cpp
src/latexgen.cpp
+33
-8
memberdef.cpp
src/memberdef.cpp
+6
-12
membergroup.cpp
src/membergroup.cpp
+5
-2
memberlist.cpp
src/memberlist.cpp
+2
-2
pre.l
src/pre.l
+16
-3
scanner.l
src/scanner.l
+83
-35
translator.h
src/translator.h
+12
-1
translator_cz.h
src/translator_cz.h
+2
-1
translator_de.h
src/translator_de.h
+2
-1
translator_es.h
src/translator_es.h
+2
-1
translator_fi.h
src/translator_fi.h
+2
-1
translator_fr.h
src/translator_fr.h
+2
-1
translator_hr.h
src/translator_hr.h
+2
-1
translator_it.h
src/translator_it.h
+2
-1
translator_jp.h
src/translator_jp.h
+2
-1
translator_nl.h
src/translator_nl.h
+3
-1
translator_ru.h
src/translator_ru.h
+3
-1
translator_se.h
src/translator_se.h
+2
-1
util.cpp
src/util.cpp
+2
-0
No files found.
INSTALL
View file @
5ade6c6e
DOXYGEN Version 1.1.4
DOXYGEN Version 1.1.4
-20000625
CONTENTS
--------
...
...
@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.4.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.4.src.tar # unpack it
gunzip doxygen-1.1.4
-20000625
.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.4
-20000625
.src.tar # unpack it
2. Run the configure script:
...
...
@@ -255,4 +255,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
18
June 2000)
Dimitri van Heesch (
25
June 2000)
README
View file @
5ade6c6e
DOXYGEN Version 1.1.4
DOXYGEN Version 1.1.4
-20000625
Please read INSTALL for compilation instructions.
...
...
@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
18
June 2000)
Dimitri van Heesch (
25
June 2000)
VERSION
View file @
5ade6c6e
1.1.4
1.1.4
-20000625
addon/configgen/configgen.cpp
View file @
5ade6c6e
...
...
@@ -787,18 +787,25 @@ void init()
ConfigBool
::
add
(
"extractAllFlag"
,
"EXTRACT_ALL"
,
"FALSE"
,
"ge
r
erate docs for all classes flag"
,
"ge
n
erate docs for all classes flag"
,
"If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
\n
"
"documentation are documented, even if no documentation was available.
\n
"
"Private class members and static file members will be hidden unless
\n
"
"the EXTRACT_PRIVATE
tag is
set to YES
\n
"
"the EXTRACT_PRIVATE
and EXTRACT_STATIC tags are
set to YES
\n
"
);
ConfigBool
::
add
(
"extractPrivateFlag"
,
"EXTRACT_PRIVATE"
,
"FALSE"
,
"generate docs for private members flag"
,
"If the EXTRACT_PRIVATE tag is set to YES all private members of a class
\n
"
"and the static members of a file will be included in the documentation.
\n
"
"will be included in the documentation.
\n
"
);
ConfigBool
::
add
(
"extractStaticFlag"
,
"EXTRACT_STATIC"
,
"FALSE"
,
"generate docs for static members flag"
,
"If the EXTRACT_STATIC tag is set to YES all static members of a file
\n
"
"will be included in the documentation.
\n
"
);
ConfigBool
::
add
(
"hideMemberFlag"
,
"HIDE_UNDOC_MEMBERS"
,
...
...
@@ -806,6 +813,8 @@ void init()
"hide undocumented members."
,
"If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
\n
"
"undocumented members of documented classes, files or namespaces.
\n
"
"If set to NO (the default) these members will be included in the
\n
"
"various overviews, but no documentation section is generated.
\n
"
"This option has no effect if EXTRACT_ALL is enabled.
\n
"
);
ConfigBool
::
add
(
"hideClassFlag"
,
...
...
@@ -814,7 +823,8 @@ void init()
"hide undocumented members."
,
"If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all
\n
"
"undocumented classes that are normally visible in the class hierarchy.
\n
"
"This option has no effect if EXTRACT_ALL is enabled.
\n
"
"If set to NO (the default) these class will be included in the various
\n
"
"overviews. This option has no effect if EXTRACT_ALL is enabled.
\n
"
);
ConfigBool
::
add
(
"briefMemDescFlag"
,
"BRIEF_MEMBER_DESC"
,
...
...
@@ -1290,7 +1300,7 @@ void init()
//-----------------------------------------------------------------------------------------------
ConfigBool
::
add
(
"generateRTF"
,
"GENERATE_RTF"
,
"
FALS
E"
,
"
TRU
E"
,
"generate RTF flag"
,
"If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
\n
"
"For now this is experimental and is disabled by default. The RTF output
\n
"
...
...
@@ -1490,6 +1500,15 @@ void init()
"documented files.
\n
"
);
addDependency
(
"includeGraphFlag"
,
"haveDotFlag"
);
ConfigBool
::
add
(
"includedByGraphFlag"
,
"INCLUDED_BY_GRAPH"
,
"TRUE"
,
"depends on include graph"
,
"If the ENABLE_PREPROCESSING, INCLUDED_BY_GRAPH, and HAVE_DOT tags are set to
\n
"
"YES then doxygen will generate a graph for each documented header file showing
\n
"
"the documented files that directly or indirectly include this file
\n
"
);
addDependency
(
"includedByGraphFlag"
,
"haveDotFlag"
);
ConfigBool
::
add
(
"gfxHierarchyFlag"
,
"GRAPHICAL_HIERARCHY"
,
"TRUE"
,
...
...
@@ -1502,11 +1521,36 @@ void init()
"DOT_PATH"
,
""
,
"path to the dot tool"
,
"Th
is tag can be used to specify the path where the dot tool can be found.
\n
"
"If left blank, it is assumed the dot tool can be found on the path.
\n
"
,
"Th
e tag DOT_PATH can be used to specify the path where the dot tool can be
\n
"
"
found.
If left blank, it is assumed the dot tool can be found on the path.
\n
"
,
ConfigString
::
Dir
);
addDependency
(
"dotPath"
,
"haveDotFlag"
);
ConfigInt
::
add
(
"maxDotGraphWidth"
,
"MAX_DOT_GRAPH_WIDTH"
,
"1024"
,
"max dot graph width"
,
"The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
\n
"
"(in pixels) of the graphs generated by dot. If a graph becomes larger than
\n
"
"this value, doxygen will try to truncate the graph, so that it fits within
\n
"
"the specified constraint. Beware that most browsers cannot cope with very
\n
"
"large images.
\n
"
,
250
,
30000
);
addDependency
(
"maxDotGraphWidth"
,
"haveDotFlag"
);
ConfigInt
::
add
(
"maxDotGraphHeight"
,
"MAX_DOT_GRAPH_HEIGHT"
,
"1024"
,
"max dot graph height"
,
"The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
\n
"
"(in pixels) of the graphs generated by dot. If a graph becomes larger than
\n
"
"this value, doxygen will try to truncate the graph, so that it fits within
\n
"
"the specified constraint. Beware that most browsers cannot cope with very
\n
"
"large images.
\n
"
,
250
,
30000
);
addDependency
(
"maxDotGraphHeight"
,
"haveDotFlag"
);
//-----------------------------------------------------------------------------------------------
ConfigInfo
::
add
(
"Search"
,
"Configuration::addtions related to the search engine "
);
...
...
addon/doxywizard/README
0 → 100644
View file @
5ade6c6e
Doxywizard is a graphical front-end to read/edit/write doxygen configuration
files. It requires Qt version 2.1.0 or higher.
doc/commands.doc
View file @
5ade6c6e
...
...
@@ -104,6 +104,7 @@ documentation:
<li> \refitem cmdsa \sa
<li> \refitem cmdsection \section
<li> \refitem cmdshowinitializer \showinitializer
<li> \refitem cmdsince \since
<li> \refitem cmdskip \skip
<li> \refitem cmdskipline \skipline
<li> \refitem cmdstruct \struct
...
...
@@ -801,6 +802,16 @@ Public/Protected/Private/... section.
\sa section \ref autolink "\\autolink" for information on how to create links
to objects.
<hr>
\subsection cmdsince \since { text }
\addindex \since
This tag can be used to specify since when (version or time) an
entity is available. The paragraph that follows \\since does not have any
special internal structure. All visual enhancement commands may be
used inside the paragraph. The \\since description ends when a blank
line or some other sectioning command is encountered.
<hr>
\subsection cmdthrow \throw <exception-object> { exception description }
...
...
doc/config.doc
View file @
5ade6c6e
...
...
@@ -52,8 +52,8 @@ followed by the descriptions of the tags grouped by category.
\
begin
{
CompactList
}
\
endlatexonly
<
li
>
\
refitem
cfg_allexternals
ALLEXTERNALS
<
li
>
\
refitem
cfg_always_detailed_sec
ALWAYS_DETAILED_SEC
<
li
>
\
refitem
cfg_alphabetical_index
ALPHABETICAL_INDEX
<
li
>
\
refitem
cfg_always_detailed_sec
ALWAYS_DETAILED_SEC
<
li
>
\
refitem
cfg_bin_abspath
BIN_ABSPATH
<
li
>
\
refitem
cfg_brief_member_desc
BRIEF_MEMBER_DESC
<
li
>
\
refitem
cfg_case_sense_names
CASE_SENSE_NAMES
...
...
@@ -68,6 +68,7 @@ followed by the descriptions of the tags grouped by category.
<
li
>
\
refitem
cfg_disable_index
DISABLE_INDEX
<
li
>
\
refitem
cfg_doc_abspath
DOC_ABSPATH
<
li
>
\
refitem
cfg_doc_url
DOC_URL
<
li
>
\
refitem
cfg_dot_path
DOT_PATH
<
li
>
\
refitem
cfg_enable_preprocessing
ENABLE_PREPROCESSING
<
li
>
\
refitem
cfg_enabled_sections
ENABLED_SECTIONS
<
li
>
\
refitem
cfg_example_path
EXAMPLE_PATH
...
...
@@ -79,6 +80,7 @@ followed by the descriptions of the tags grouped by category.
<
li
>
\
refitem
cfg_extra_packages
EXTRA_PACKAGES
<
li
>
\
refitem
cfg_extract_all
EXTRACT_ALL
<
li
>
\
refitem
cfg_extract_private
EXTRACT_PRIVATE
<
li
>
\
refitem
cfg_extract_static
EXTRACT_STATIC
<
li
>
\
refitem
cfg_file_patterns
FILE_PATTERNS
<
li
>
\
refitem
cfg_full_path_names
FULL_PATH_NAMES
<
li
>
\
refitem
cfg_generate_html
GENERATE_HTML
...
...
@@ -114,6 +116,8 @@ followed by the descriptions of the tags grouped by category.
<
li
>
\
refitem
cfg_macro_expansion
MACRO_EXPANSION
<
li
>
\
refitem
cfg_man_extension
MAN_EXTENSION
<
li
>
\
refitem
cfg_man_output
MAN_OUTPUT
<
li
>
\
refitem
cfg_max_dot_graph_height
MAX_DOT_GRAPH_HEIGHT
<
li
>
\
refitem
cfg_max_dot_graph_width
MAX_DOT_GRAPH_WIDTH
<
li
>
\
refitem
cfg_output_directory
OUTPUT_DIRECTORY
<
li
>
\
refitem
cfg_output_language
OUTPUT_LANGUAGE
<
li
>
\
refitem
cfg_paper_type
PAPER_TYPE
...
...
@@ -125,6 +129,8 @@ followed by the descriptions of the tags grouped by category.
<
li
>
\
refitem
cfg_quiet
QUIET
<
li
>
\
refitem
cfg_recursive
RECURSIVE
<
li
>
\
refitem
cfg_repeat_brief
REPEAT_BRIEF
<
li
>
\
refitem
cfg_rtf_hyperlinks
RTF_HYPERLINKS
<
li
>
\
refitem
cfg_rtf_output
RTF_OUTPUT
<
li
>
\
refitem
cfg_search_includes
SEARCH_INCLUDES
<
li
>
\
refitem
cfg_searchengine
SEARCHENGINE
<
li
>
\
refitem
cfg_show_include_files
SHOW_INCLUDE_FILES
...
...
@@ -132,14 +138,12 @@ followed by the descriptions of the tags grouped by category.
<
li
>
\
refitem
cfg_source_browser
SOURCE_BROWSER
<
li
>
\
refitem
cfg_strip_code_comments
STRIP_CODE_COMMENTS
<
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
<
li
>
\
refitem
cfg_warnings
WARNINGS
<
li
>
\
refitem
cfg_warn_format
WARN_FORMAT
<
li
>
\
refitem
cfg_warn_if_undocumented
WARN_IF_UNDOCUMENTED
<
li
>
\
refitem
cfg_warnings
WARNINGS
\
htmlonly
</
ul
>
</
multicol
>
...
...
@@ -197,8 +201,10 @@ followed by the descriptions of the tags grouped by category.
\
anchor
cfg_extract_all
<
dt
>\
c
EXTRACT_ALL
<
dd
>
\
addindex
EXTRACT_ALL
If
the
\
c
EXTRACT_ALL
tag
is
set
to
\
c
YES
all
classes
and
functions
will
be
included
in
the
documentation
,
even
if
no
documentation
was
available
.
If
the
\
c
EXTRACT_ALL
tag
is
set
to
\
c
YES
doxygen
will
assume
all
entities
in
documentation
are
documented
,
even
if
no
documentation
was
available
.
Private
class
members
and
static
file
members
will
be
hidden
unless
the
\
c
EXTRACT_PRIVATE
and
\
c
EXTRACT_STATIC
tags
are
set
to
\
c
YES
\
par
Note
:
This
will
also
disable
the
warnings
about
undocumented
members
...
...
@@ -207,8 +213,14 @@ followed by the descriptions of the tags grouped by category.
\
anchor
cfg_extract_private
<
dt
>\
c
EXTRACT_PRIVATE
<
dd
>
\
addindex
EXTRACT_PRIVATE
If
the
\
c
EXTRACT_PRIVATE
tag
is
set
to
\
c
YES
all
documentation
for
private
members
will
be
extracted
as
well
.
If
the
\
c
EXTRACT_PRIVATE
tag
is
set
to
\
c
YES
all
private
members
of
a
class
will
be
included
in
the
documentation
.
\
anchor
cfg_extract_static
<
dt
>\
c
EXTRACT_STATIC
<
dd
>
\
addindex
EXTRACT_STATIC
If
the
\
c
EXTRACT_STATIC
tag
is
set
to
\
c
YES
all
static
members
of
a
file
will
be
included
in
the
documentation
.
\
anchor
cfg_hide_undoc_members
<
dt
>\
c
HIDE_UNDOC_MEMBERS
<
dd
>
...
...
@@ -217,6 +229,7 @@ followed by the descriptions of the tags grouped by category.
undocumented
members
inside
documented
classes
or
files
.
If
set
to
\
c
NO
(
the
default
)
these
members
will
be
included
in
the
various
overviews
,
but
no
documentation
section
is
generated
.
This
option
has
no
effect
if
\
c
EXTRACT_ALL
is
enabled
.
\
anchor
cfg_hide_undoc_classes
<
dt
>\
c
HIDE_UNDOC_CLASSES
<
dd
>
...
...
@@ -225,6 +238,7 @@ followed by the descriptions of the tags grouped by category.
undocumented
classes
.
If
set
to
\
c
NO
(
the
default
)
these
classes
will
be
included
in
the
various
overviews
.
This
option
has
no
effect
if
\
c
EXTRACT_ALL
is
enabled
.
\
anchor
cfg_brief_member_desc
<
dt
>\
c
BRIEF_MEMBER_DESC
<
dd
>
...
...
@@ -247,6 +261,7 @@ followed by the descriptions of the tags grouped by category.
\
anchor
cfg_always_detailed_sec
<
dt
>\
c
ALWAYS_DETAILED_SEC
<
dd
>
\
addindex
ALWAYS_DETAILED_SEC
If
the
\
c
ALWAYS_DETAILED_SEC
and
\
c
REPEAT_BRIEF
tags
are
both
set
to
\
c
YES
then
Doxygen
will
generate
a
detailed
section
even
if
there
is
only
a
brief
description
.
...
...
@@ -822,13 +837,13 @@ EXTRA_PACKAGES = times
put
in
front
of
it
.
If
left
blank
`
man
' will be used as the default path.
A directory man3 will be created inside the directory specified by
\c MAN_OUTPUT.
</dl>
\anchor cfg_man_extension
<dt>\c MAN_EXTENSION <dd>
\addindex MAX_EXTENSION
The \c MAN_EXTENSION tag determines the extension that is added to
the generated man pages (default is the subroutine'
s
section
.3
)
</
dl
>
\
subsection
config_prepro
Preprocessor
related
options
\
anchor
cfg_enable_preprocessing
...
...
@@ -964,6 +979,14 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
showing the direct and indirect include dependencies of the file with other
documented files.
\anchor cfg_included_by_graph
<dt>\c INCLUDED_BY_GRAPH <dd>
\addindex INCLUDED_BY_GRAPH
If the \c ENABLE_PREPROCESSING, \c INCLUDED_BY_GRAPH, and \c HAVE_DOT tags are
set to \c YES then doxygen will generate a graph for each documented header
file showing the documented files that directly or indirectly include this
file.
\anchor cfg_graphical_hierarchy
<dt>\c GRAPHICAL_HIERARCHY <dd>
\addindex GRAPHICAL_HIERATCHY
...
...
@@ -976,6 +999,24 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
This tag can be used to specify the path where the dot tool can be found.
If left blank, it is assumed the dot tool can be found on the path.
\anchor cfg_max_dot_graph_height
<dt>\c MAX_DOT_GRAPH_HEIGHT <dd>
\addindex MAX_DOT_GRAPH_HEIGHT
The \c MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
(in pixels) of the graphs generated by dot. If a graph becomes larger than
this value, doxygen will try to truncate the graph, so that it fits within
the specified constraint. Beware that most browsers cannot cope with very
large images.
\anchor cfg_max_dot_graph_width
<dt>\c MAX_DOT_GRAPH_WIDTH <dd>
\addindex MAX_DOT_GRAPH_WIDTH
The \c MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
(in pixels) of the graphs generated by dot. If a graph becomes larger than
this value, doxygen will try to truncate the graph, so that it fits within
the specified constraint. Beware that most browsers cannot cope with very
large images.
</dl>
\subsection config_search Search engine options
\anchor cfg_searchengine
...
...
@@ -1007,7 +1048,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
\addindex DOC_URL
The \c DOC_URL tag should be the absolute URL to the directory where the
documentation is located. If left blank the absolute path to the
documentation, with
<tt>file://</tt>
prepended to it, will be used.
documentation, with
\c file://
prepended to it, will be used.
This is correct for local viewing only.
\anchor cfg_doc_abspath
...
...
packages/rpm/doxygen.spec
View file @
5ade6c6e
Name: doxygen
Version: 1.1.4
Version: 1.1.4
-20000625
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
...
...
src/classdef.cpp
View file @
5ade6c6e
...
...
@@ -566,23 +566,44 @@ void ClassDef::setIncludeFile(FileDef *fd,const char *incName,bool local)
}
}
ArgumentList
*
ClassDef
::
outerTemplateArguments
()
const
{
int
ti
;
ClassDef
*
pcd
=
0
;
int
pi
=
0
;
// find the outer most class scope
while
((
ti
=
name
().
find
(
"::"
,
pi
))
!=-
1
&&
(
pcd
=
getClass
(
name
().
left
(
ti
)))
==
0
)
pi
=
ti
+
2
;
if
(
pcd
)
{
return
pcd
->
templateArguments
();
}
else
{
return
tempArgs
;
}
}
// write all documentation for this class
void
ClassDef
::
writeDocumentation
(
OutputList
&
ol
)
{
// write title
QCString
pageTitle
=
name
().
copy
();
QCString
pageType
;
ArgumentList
*
outerTempArgList
=
outerTemplateArguments
();
if
(
outerTempArgList
)
pageType
+=
" Template"
;
switch
(
compType
)
{
case
Class
:
pageType
=
" Class"
;
break
;
case
Struct
:
pageType
=
" Struct"
;
break
;
case
Union
:
pageType
=
" Union"
;
break
;
default
:
pageType
=
" Interface"
;
break
;
case
Class
:
pageType
+=
" Class"
;
break
;
case
Struct
:
pageType
+
=
" Struct"
;
break
;
case
Union
:
pageType
+
=
" Union"
;
break
;
default
:
pageType
+
=
" Interface"
;
break
;
}
pageTitle
+=
pageType
+
" Reference"
;
startFile
(
ol
,
fileName
,
pageTitle
);
startTitle
(
ol
,
getOutputFileBase
());
parseText
(
ol
,
theTranslator
->
trCompoundReference
(
name
(),
compType
));
parseText
(
ol
,
theTranslator
->
trCompoundReference
(
name
(),
compType
,
outerTempArgList
!=
0
));
endTitle
(
ol
,
getOutputFileBase
(),
name
());
ol
.
startTextBlock
();
...
...
@@ -868,24 +889,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol
.
endGroupHeader
();
ol
.
startTextBlock
();
ArgumentList
*
al
=
0
;
int
ti
;
ClassDef
*
pcd
=
0
;
int
pi
=
0
;
// find the outer most class scope
while
((
ti
=
name
().
find
(
"::"
,
pi
))
!=-
1
&&
(
pcd
=
getClass
(
name
().
left
(
ti
)))
==
0
)
pi
=
ti
+
2
;
if
(
pcd
)
{
al
=
pcd
->
templateArguments
();
}
else
{
al
=
tempArgs
;
}
ArgumentList
*
al
=
outerTempArgList
;
if
(
al
)
// class is a template
{
ol
.
startSubsubsection
();
...
...
@@ -894,7 +898,11 @@ void ClassDef::writeDocumentation(OutputList &ol)
while
(
a
)
{
ol
.
docify
(
a
->
type
);
ol
.
docify
(
a
->
name
);
if
(
!
a
->
name
.
isEmpty
())
{
ol
.
docify
(
" "
);
ol
.
docify
(
a
->
name
);
}
if
(
a
->
defval
.
length
()
!=
0
)
{
ol
.
docify
(
" = "
);
...
...
@@ -1583,45 +1591,48 @@ void ClassDef::determineImplUsageRelation()
// name().data(),type.data(),md->name().data());
int
p
=
0
,
i
,
l
;
bool
found
=
FALSE
;
while
((
i
=
re
.
match
(
type
,
p
,
&
l
))
!=-
1
&&
!
found
)
// for each class name in the type
if
(
typeLen
>
0
)
{
int
ts
=
i
+
l
;
int
te
=
ts
;
while
(
type
.
at
(
ts
)
==
' '
&&
ts
<
typeLen
)
ts
++
;
// skip any whitespace
if
(
type
.
at
(
ts
)
==
'<'
)
// assume template instance
while
((
i
=
re
.
match
(
type
,
p
,
&
l
))
!=-
1
&&
!
found
)
// for each class name in the type
{
// locate end of template
te
=
ts
+
1
;
int
brCount
=
1
;
while
(
te
<
typeLen
&&
brCount
!=
0
)
int
ts
=
i
+
l
;
int
te
=
ts
;
while
(
type
.
at
(
ts
)
==
' '
&&
ts
<
typeLen
)
ts
++
;
// skip any whitespace
if
(
type
.
at
(
ts
)
==
'<'
)
// assume template instance
{
if
(
type
.
at
(
te
)
==
'<'
)
brCount
++
;
if
(
type
.
at
(
te
)
==
'>'
)
brCount
--
;
te
++
;
// 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
)
// class exists
{
found
=
TRUE
;
if
(
usesImplClassDict
==
0
)
usesImplClassDict
=
new
UsesClassDict
(
257
);
UsesClassDef
*
ucd
=
usesImplClassDict
->
find
(
cd
->
name
());
if
(
ucd
==
0
||
ucd
->
templSpecifiers
!=
templSpec
)
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
)
// class exists
{
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());
found
=
TRUE
;
if
(
usesImplClassDict
==
0
)
usesImplClassDict
=
new
UsesClassDict
(
257
);
UsesClassDef
*
ucd
=
usesImplClassDict
->
find
(
cd
->
name
());
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());
}
ucd
->
addAccessor
(
md
->
name
());
//printf("Adding accessor %s to class %s\n",
// md->name().data(),ucd->classDef->name().data());
}
ucd
->
addAccessor
(
md
->
name
());
//printf("Adding accessor %s to class %s\n",
// md->name().data(),ucd->classDef->name().data());
p
=
i
+
l
;
}
p
=
i
+
l
;
}
}
}
...
...
src/classdef.h
View file @
5ade6c6e
...
...
@@ -99,6 +99,7 @@ class ClassDef : public Definition
// template argument functions
ArgumentList
*
templateArguments
()
const
{
return
tempArgs
;
}
ArgumentList
*
outerTemplateArguments
()
const
;
void
setTemplateArguments
(
ArgumentList
*
al
);
//QCString getTemplateNameString();
void
setNamespace
(
NamespaceDef
*
nd
)
{
nspace
=
nd
;
}
...
...
src/code.l
View file @
5ade6c6e
...
...
@@ -396,6 +396,7 @@ static bool getLink(const char *className,
static ClassDef *stripClassName(const char *s)
{
QCString tmp=s;
if (tmp.isEmpty()) return 0;
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)
...
...
@@ -1131,10 +1132,10 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
endFontClass();
}
}
<*>\n
({B}*(("//@"[{}])|("/*@"[{}]"*/")){B}*\n)
{ // remove one-line group marker
<*>\n
{B}*"//@"[{}].*\n
{ // remove one-line group marker
if (Config::stripCommentsFlag)
{
g_yyLineNr+=
((QCString)yytext).contains('\n')
;
g_yyLineNr+=
2
;
g_code->endCodeLine();
if (g_yyLineNr<g_inputLines)
{
...
...
@@ -1148,7 +1149,26 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
endFontClass();
}
}
<*>^{B}*(("//@"[{}])|("/*@"[{}]"*/")){B}*\n { // remove one-line group marker
<*>\n{B}*"/*@"[{}] { // remove one-line group marker
if (Config::stripCommentsFlag)
{
g_lastSpecialCContext = YY_START;
g_yyLineNr++;
BEGIN(RemoveSpecialCComment);
}
else
{
// check is to prevent getting stuck in skipping C++ comments
if (YY_START != SkipCxxComment)
{
g_lastCContext = YY_START ;
}
startFontClass("comment");
codifyLines(yytext);
BEGIN(SkipComment);
}
}
<*>^{B}*"//@"[{}].*\n { // remove one-line group marker
if (Config::stripCommentsFlag)
{
g_yyLineNr++;
...
...
@@ -1165,6 +1185,20 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
endFontClass();
}
}
<*>^{B}*"/*@"[{}] { // remove multi-line group marker
if (Config::stripCommentsFlag)
{
g_lastSpecialCContext = YY_START;
BEGIN(RemoveSpecialCComment);
}
else
{
g_lastCContext = YY_START ;
startFontClass("comment");
g_code->codify(yytext);
BEGIN(SkipComment);
}
}
<*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment
if (Config::stripCommentsFlag)
{
...
...
src/config.h
View file @
5ade6c6e
...
...
@@ -36,8 +36,9 @@ struct Config
static
QCString
outputDir
;
// the global output directory
static
QCString
outputLanguage
;
// the output language
static
bool
noIndexFlag
;
// generate condensed index flag
static
bool
extractAllFlag
;
// ge
r
erate docs for all classes flag
static
bool
extractAllFlag
;
// ge
n
erate docs for all classes flag
static
bool
extractPrivateFlag
;
// generate docs for private members flag
static
bool
extractStaticFlag
;
// generate docs for static members flag
static
bool
hideMemberFlag
;
// hide undocumented members.
static
bool
hideClassFlag
;
// hide undocumented members.
static
bool
briefMemDescFlag
;
// enable `inline' brief member descr.
...
...
@@ -112,8 +113,11 @@ struct Config
static
bool
classGraphFlag
;
// class graph
static
bool
collGraphFlag
;
// collaboration graph
static
bool
includeGraphFlag
;
// include graph
static
bool
includedByGraphFlag
;
// depends on include graph
static
bool
gfxHierarchyFlag
;
// flag to enable graphical hierarchy
static
QCString
dotPath
;
// path to the dot tool
static
int
maxDotGraphWidth
;
// max dot graph width
static
int
maxDotGraphHeight
;
// max dot graph height
static
bool
searchEngineFlag
;
// generate search engine flag
static
QCString
cgiName
;
// the name of the CGI binary
static
QCString
cgiURL
;
// the absolute URL to the CGI binary
...
...
src/config.l
View file @
5ade6c6e
...
...
@@ -73,6 +73,7 @@ QCString Config::outputLanguage = "English";
bool Config::noIndexFlag = FALSE;
bool Config::extractAllFlag = FALSE;
bool Config::extractPrivateFlag = FALSE;
bool Config::extractStaticFlag = FALSE;
bool Config::hideMemberFlag = FALSE;
bool Config::hideClassFlag = FALSE;
bool Config::briefMemDescFlag = TRUE;
...
...
@@ -126,7 +127,7 @@ QStrList Config::extraPackageList;
QCString Config::latexHeaderFile;
bool Config::pdfHyperFlag = FALSE;
bool Config::latexBatchModeFlag = FALSE;
bool Config::generateRTF =
FALS
E;
bool Config::generateRTF =
TRU
E;
QCString Config::rtfOutputDir = "rtf";
bool Config::compactRTFFlag = FALSE;
bool Config::rtfHyperFlag = FALSE;
...
...
@@ -147,8 +148,11 @@ bool Config::haveDotFlag = FALSE;
bool Config::classGraphFlag = TRUE;
bool Config::collGraphFlag = TRUE;
bool Config::includeGraphFlag = TRUE;
bool Config::includedByGraphFlag = TRUE;
bool Config::gfxHierarchyFlag = TRUE;
QCString Config::dotPath;
int Config::maxDotGraphWidth = 1024;
int Config::maxDotGraphHeight = 1024;
bool Config::searchEngineFlag = FALSE;
QCString Config::cgiName = "search.cgi";
QCString Config::cgiURL;
...
...
@@ -175,6 +179,8 @@ static QCString elemStr;
//static QCString colsInAlphaIndexString;
static QCString tabSizeString;
static QCString colsInAlphaIndexString;
static QCString maxDotGraphWidthString;
static QCString maxDotGraphHeightString;
/* -----------------------------------------------------------------
*/
...
...
@@ -215,6 +221,7 @@ static int yyread(char *buf,int max_size)
<Start>"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; }
<Start>"EXTRACT_ALL"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractAllFlag; }
<Start>"EXTRACT_PRIVATE"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractPrivateFlag; }
<Start>"EXTRACT_STATIC"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractStaticFlag; }
<Start>"HIDE_UNDOC_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::hideMemberFlag; }
<Start>"HIDE_UNDOC_CLASSES"[ \t]*"=" { BEGIN(GetBool); b=&Config::hideClassFlag; }
<Start>"BRIEF_MEMBER_DESC"[ \t]*"=" { BEGIN(GetBool); b=&Config::briefMemDescFlag; }
...
...
@@ -289,8 +296,11 @@ static int yyread(char *buf,int max_size)
<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>"INCLUDED_BY_GRAPH"[ \t]*"=" { BEGIN(GetBool); b=&Config::includedByGraphFlag; }
<Start>"GRAPHICAL_HIERARCHY"[ \t]*"=" { BEGIN(GetBool); b=&Config::gfxHierarchyFlag; }
<Start>"DOT_PATH"[ \t]*"=" { BEGIN(GetString); s=&Config::dotPath; s->resize(0); }
<Start>"MAX_DOT_GRAPH_WIDTH"[ \t]*"=" { BEGIN(GetString); s=&maxDotGraphWidthString; s->resize(0); }
<Start>"MAX_DOT_GRAPH_HEIGHT"[ \t]*"=" { BEGIN(GetString); s=&maxDotGraphHeightString; s->resize(0); }
<Start>"SEARCHENGINE"[ \t]*"=" { BEGIN(GetBool); b=&Config::searchEngineFlag; }
<Start>"CGI_NAME"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiName; s->resize(0); }
<Start>"CGI_URL"[ \t]*"=" { BEGIN(GetString); s=&Config::cgiURL; s->resize(0); }
...
...
@@ -395,6 +405,7 @@ void dumpConfig()
printf("noIndexFlag=`%d'\n",Config::noIndexFlag);
printf("extractAllFlag=`%d'\n",Config::extractAllFlag);
printf("extractPrivateFlag=`%d'\n",Config::extractPrivateFlag);
printf("extractStaticFlag=`%d'\n",Config::extractStaticFlag);
printf("hideMemberFlag=`%d'\n",Config::hideMemberFlag);
printf("hideClassFlag=`%d'\n",Config::hideClassFlag);
printf("briefMemDescFlag=`%d'\n",Config::briefMemDescFlag);
...
...
@@ -577,8 +588,11 @@ void dumpConfig()
printf("classGraphFlag=`%d'\n",Config::classGraphFlag);
printf("collGraphFlag=`%d'\n",Config::collGraphFlag);
printf("includeGraphFlag=`%d'\n",Config::includeGraphFlag);
printf("includedByGraphFlag=`%d'\n",Config::includedByGraphFlag);
printf("gfxHierarchyFlag=`%d'\n",Config::gfxHierarchyFlag);
printf("dotPath=`%s'\n",Config::dotPath.data());
printf("maxDotGraphWidth=`%d'\n",Config::maxDotGraphWidth);
printf("maxDotGraphHeight=`%d'\n",Config::maxDotGraphHeight);
printf("# Configuration::addtions related to the search engine \n");
printf("searchEngineFlag=`%d'\n",Config::searchEngineFlag);
printf("cgiName=`%s'\n",Config::cgiName.data());
...
...
@@ -605,6 +619,7 @@ void Config::init()
Config::noIndexFlag = FALSE;
Config::extractAllFlag = FALSE;
Config::extractPrivateFlag = FALSE;
Config::extractStaticFlag = FALSE;
Config::hideMemberFlag = FALSE;
Config::hideClassFlag = FALSE;
Config::briefMemDescFlag = TRUE;
...
...
@@ -658,7 +673,7 @@ void Config::init()
Config::latexHeaderFile.resize(0);
Config::pdfHyperFlag = FALSE;
Config::latexBatchModeFlag = FALSE;
Config::generateRTF =
FALS
E;
Config::generateRTF =
TRU
E;
Config::rtfOutputDir = "rtf";
Config::compactRTFFlag = FALSE;
Config::rtfHyperFlag = FALSE;
...
...
@@ -679,8 +694,11 @@ void Config::init()
Config::classGraphFlag = TRUE;
Config::collGraphFlag = TRUE;
Config::includeGraphFlag = TRUE;
Config::includedByGraphFlag = TRUE;
Config::gfxHierarchyFlag = TRUE;
Config::dotPath.resize(0);
Config::maxDotGraphWidth = 1024;
Config::maxDotGraphHeight = 1024;
Config::searchEngineFlag = FALSE;
Config::cgiName = "search.cgi";
Config::cgiURL.resize(0);
...
...
@@ -818,8 +836,10 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# If the EXTRACT_ALL tag is set to YES all classes and functions will be \n";
t << "# included in the documentation, even if no documentation was available. \n";
t << "# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \n";
t << "# documentation are documented, even if no documentation was available. \n";
t << "# Private class members and static file members will be hidden unless \n";
t << "# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES \n";
t << "\n";
}
t << "EXTRACT_ALL = ";
...
...
@@ -836,10 +856,23 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::extractPrivateFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the EXTRACT_STATIC tag is set to YES all static members of a file \n";
t << "# will be included in the documentation. \n";
t << "\n";
}
t << "EXTRACT_STATIC = ";
writeBoolValue(t,Config::extractStaticFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \n";
t << "# undocumented members inside documented classes or files. \n";
t << "# undocumented members of documented classes, files or namespaces. \n";
t << "# If set to NO (the default) these members will be included in the \n";
t << "# various overviews, but no documentation section is generated. \n";
t << "# This option has no effect if EXTRACT_ALL is enabled. \n";
t << "\n";
}
t << "HIDE_UNDOC_MEMBERS = ";
...
...
@@ -849,7 +882,9 @@ void writeTemplateConfig(QFile *f,bool sl)
{
t << "\n";
t << "# If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all \n";
t << "# undocumented classes. \n";
t << "# undocumented classes that are normally visible in the class hierarchy. \n";
t << "# If set to NO (the default) these class will be included in the various \n";
t << "# overviews. This option has no effect if EXTRACT_ALL is enabled. \n";
t << "\n";
}
t << "HIDE_UNDOC_CLASSES = ";
...
...
@@ -1733,6 +1768,17 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::includeGraphFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the ENABLE_PREPROCESSING, INCLUDED_BY_GRAPH, and HAVE_DOT tags are set to \n";
t << "# YES then doxygen will generate a graph for each documented header file showing \n";
t << "# the documented files that directly or indirectly include this file \n";
t << "\n";
}
t << "INCLUDED_BY_GRAPH = ";
writeBoolValue(t,Config::includedByGraphFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \n";
...
...
@@ -1745,14 +1791,40 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# Th
is tag can be used to specify the path where the dot tool can be found.
\n";
t << "# If left blank, it is assumed the dot tool can be found on the path. \n";
t << "# Th
e tag DOT_PATH can be used to specify the path where the dot tool can be
\n";
t << "#
found.
If left blank, it is assumed the dot tool can be found on the path. \n";
t << "\n";
}
t << "DOT_PATH = ";
writeStringValue(t,Config::dotPath);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width \n";
t << "# (in pixels) of the graphs generated by dot. If a graph becomes larger than \n";
t << "# this value, doxygen will try to truncate the graph, so that it fits within \n";
t << "# the specified constraint. Beware that most browsers cannot cope with very \n";
t << "# large images. \n";
t << "\n";
}
t << "MAX_DOT_GRAPH_WIDTH = ";
writeIntValue(t,Config::maxDotGraphWidth);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height \n";
t << "# (in pixels) of the graphs generated by dot. If a graph becomes larger than \n";
t << "# this value, doxygen will try to truncate the graph, so that it fits within \n";
t << "# the specified constraint. Beware that most browsers cannot cope with very \n";
t << "# large images. \n";
t << "\n";
}
t << "MAX_DOT_GRAPH_HEIGHT = ";
writeIntValue(t,Config::maxDotGraphHeight);
t << "\n";
if (!sl)
{
t << "\n";
}
...
...
src/dot.cpp
View file @
5ade6c6e
...
...
@@ -30,11 +30,8 @@
//--------------------------------------------------------------------
const
int
maxImageWidth
=
1024
;
const
int
maxImageHeight
=
1024
;
/*! mapping from protection levels to color names */
static
char
*
edgeColorMap
[]
=
static
c
onst
c
har
*
edgeColorMap
[]
=
{
"midnightblue"
,
// Public
"darkgreen"
,
// Protected
...
...
@@ -43,7 +40,7 @@ static char *edgeColorMap[] =
"grey"
// Undocumented
};
static
char
*
edgeStyleMap
[]
=
static
c
onst
c
har
*
edgeStyleMap
[]
=
{
"solid"
,
// inheritance
"dashed"
// usage
...
...
@@ -364,7 +361,8 @@ void DotNode::write(QTextStream &t,
GraphOutputFormat
format
,
bool
topDown
,
bool
toChildren
,
int
distance
int
distance
,
bool
backArrows
)
{
//printf("DotNode::write(%d) name=%s\n",distance,m_label.data());
...
...
@@ -394,9 +392,9 @@ void DotNode::write(QTextStream &t,
{
if
(
cn
->
m_distance
<=
distance
)
{
writeArrow
(
t
,
format
,
cn
,
dnli2
.
current
(),
topDown
);
writeArrow
(
t
,
format
,
cn
,
dnli2
.
current
(),
topDown
,
backArrows
);
}
cn
->
write
(
t
,
format
,
topDown
,
toChildren
,
distance
);
cn
->
write
(
t
,
format
,
topDown
,
toChildren
,
distance
,
backArrows
);
}
}
else
// render parents
...
...
@@ -411,10 +409,11 @@ void DotNode::write(QTextStream &t,
format
,
pn
,
pn
->
m_edgeInfo
->
at
(
pn
->
m_children
->
findRef
(
this
)),
FALSE
FALSE
,
backArrows
);
}
pn
->
write
(
t
,
format
,
TRUE
,
FALSE
,
distance
);
pn
->
write
(
t
,
format
,
TRUE
,
FALSE
,
distance
,
backArrows
);
}
}
}
...
...
@@ -915,11 +914,12 @@ void writeDotGraph(DotNode *root,
const
QCString
&
baseName
,
bool
lrRank
,
bool
renderParents
,
int
distance
int
distance
,
bool
backArrows
)
{
// generate the graph description for dot
//printf("writeDotGraph(%s,%d)\n",baseName.data(),
renderParent
s);
//printf("writeDotGraph(%s,%d)\n",baseName.data(),
backArrow
s);
QFile
f
;
f
.
setName
(
baseName
+
".dot"
);
if
(
f
.
open
(
IO_WriteOnly
))
...
...
@@ -932,7 +932,7 @@ void writeDotGraph(DotNode *root,
t
<<
" rankdir=LR;"
<<
endl
;
}
root
->
clearWriteFlag
();
root
->
write
(
t
,
format
,
TRUE
,
TRUE
,
distance
);
root
->
write
(
t
,
format
,
TRUE
,
TRUE
,
distance
,
backArrows
);
if
(
renderParents
&&
root
->
m_parents
)
{
//printf("rendering parents!\n");
...
...
@@ -946,10 +946,11 @@ void writeDotGraph(DotNode *root,
format
,
pn
,
pn
->
m_edgeInfo
->
at
(
pn
->
m_children
->
findRef
(
root
)),
FALSE
FALSE
,
backArrows
);
}
pn
->
write
(
t
,
format
,
TRUE
,
FALSE
,
distance
);
pn
->
write
(
t
,
format
,
TRUE
,
FALSE
,
distance
,
backArrows
);
}
}
t
<<
"}"
<<
endl
;
...
...
@@ -963,7 +964,8 @@ static void findMaximalDotGraph(DotNode *root,
QDir
&
thisDir
,
GraphOutputFormat
format
,
bool
lrRank
=
FALSE
,
bool
renderParents
=
FALSE
bool
renderParents
=
FALSE
,
bool
backArrows
=
TRUE
)
{
bool
lastFit
;
...
...
@@ -974,10 +976,11 @@ static void findMaximalDotGraph(DotNode *root,
int
height
=
0
;
// binary search for the maximal inheritance depth that fits in a reasonable
// sized image (dimensions:
maxImageWidth, maxImage
Height)
// sized image (dimensions:
Config::maxDotGraphWidth, Config::maxDotGraph
Height)
do
{
writeDotGraph
(
root
,
format
,
baseName
,
lrRank
,
renderParents
,
curDistance
);
writeDotGraph
(
root
,
format
,
baseName
,
lrRank
,
renderParents
,
curDistance
,
backArrows
);
QCString
dotCmd
(
4096
);
// create annotated dot file
...
...
@@ -995,7 +998,7 @@ static void findMaximalDotGraph(DotNode *root,
height
=
height
*
96
/
72
;
// 96 pixels/inch, 72 points/inch
//printf("Found bounding box (%d,%d)\n",width,height);
lastFit
=
(
width
<
maxImageWidth
&&
height
<
maxImage
Height
);
lastFit
=
(
width
<
Config
::
maxDotGraphWidth
&&
height
<
Config
::
maxDotGraph
Height
);
if
(
lastFit
)
// image is small enough
{
minDistance
=
curDistance
;
...
...
@@ -1020,9 +1023,10 @@ static void findMaximalDotGraph(DotNode *root,
writeDotGraph
(
root
,
format
,
baseName
,
lrRank
||
(
curDistance
==
1
&&
width
>
maxImage
Width
),
lrRank
||
(
curDistance
==
1
&&
width
>
Config
::
maxDotGraph
Width
),
renderParents
,
minDistance
minDistance
,
backArrows
);
}
}
...
...
@@ -1131,7 +1135,8 @@ int DotInclDepGraph::m_curNodeNumber;
void
DotInclDepGraph
::
buildGraph
(
DotNode
*
n
,
FileDef
*
fd
,
int
distance
)
{
QList
<
IncludeInfo
>
*
includeFiles
=
fd
->
includeFileList
();
QList
<
IncludeInfo
>
*
includeFiles
=
m_inverse
?
fd
->
includedByFileList
()
:
fd
->
includeFileList
();
QListIterator
<
IncludeInfo
>
ili
(
*
includeFiles
);
IncludeInfo
*
ii
;
for
(;(
ii
=
ili
.
current
());
++
ili
)
...
...
@@ -1178,9 +1183,10 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
}
}
DotInclDepGraph
::
DotInclDepGraph
(
FileDef
*
fd
)
DotInclDepGraph
::
DotInclDepGraph
(
FileDef
*
fd
,
bool
inverse
)
{
m_maxDistance
=
0
;
m_inverse
=
inverse
;
ASSERT
(
fd
!=
0
);
m_diskName
=
fd
->
getOutputFileBase
().
copy
();
m_startNode
=
new
DotNode
(
m_curNodeNumber
++
,
...
...
@@ -1221,9 +1227,14 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
QDir
::
setCurrent
(
d
.
absPath
());
QDir
thisDir
;
QCString
baseName
=
m_diskName
+
"_incldep"
;
QCString
baseName
=
m_diskName
;
if
(
m_inverse
)
baseName
+=
"_dep"
;
baseName
+=
"_incl"
;
QCString
mapName
=
m_startNode
->
m_label
.
copy
();
if
(
m_inverse
)
mapName
+=
"dep"
;
findMaximalDotGraph
(
m_startNode
,
m_maxDistance
,
baseName
,
thisDir
,
format
);
findMaximalDotGraph
(
m_startNode
,
m_maxDistance
,
baseName
,
thisDir
,
format
,
FALSE
,
FALSE
,
!
m_inverse
);
if
(
format
==
GIF
)
{
...
...
@@ -1247,8 +1258,8 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
}
out
<<
"<p><center><img src=
\"
"
<<
baseName
<<
".gif
\"
border=
\"
0
\"
usemap=
\"
#"
<<
m
_startNode
->
m_label
<<
"_map
\"
></center>"
<<
endl
;
out
<<
"<map name=
\"
"
<<
m
_startNode
->
m_label
<<
"_map
\"
>"
<<
endl
;
<<
m
apName
<<
"_map
\"
></center>"
<<
endl
;
out
<<
"<map name=
\"
"
<<
m
apName
<<
"_map
\"
>"
<<
endl
;
convertMapFile
(
out
,
baseName
+
".map"
);
out
<<
"</map><p>"
<<
endl
;
thisDir
.
remove
(
baseName
+
".map"
);
...
...
@@ -1257,7 +1268,6 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
{
// run dot to create a .eps image
QCString
dotCmd
;
dotCmd
.
sprintf
(
"%sdot -Tps
\"
%s.dot
\"
-o
\"
%s.eps
\"
"
,
Config
::
dotPath
.
data
(),
baseName
.
data
(),
baseName
.
data
());
if
(
system
(
dotCmd
)
!=
0
)
...
...
src/dot.h
View file @
5ade6c6e
...
...
@@ -52,7 +52,9 @@ class DotNode
const
QCString
&
baseName
,
bool
lrRank
,
bool
renderParents
,
int
distance
);
int
distance
,
bool
backArrow
);
public
:
DotNode
(
int
n
,
const
char
*
lab
,
const
char
*
url
,
int
distance
=
0
,
bool
rootNode
=
FALSE
);
~
DotNode
();
...
...
@@ -70,7 +72,7 @@ class DotNode
void
removeParent
(
DotNode
*
n
);
int
number
()
const
{
return
m_number
;
}
void
write
(
QTextStream
&
t
,
GraphOutputFormat
f
,
bool
topDown
,
bool
toChildren
,
int
maxDistance
=
1000
);
int
maxDistance
=
1000
,
bool
backArrows
=
TRUE
);
int
m_subgraphId
;
void
clearWriteFlag
();
...
...
@@ -137,7 +139,7 @@ class DotClassGraph
class
DotInclDepGraph
{
public
:
DotInclDepGraph
(
FileDef
*
fd
);
DotInclDepGraph
(
FileDef
*
fd
,
bool
inverse
=
FALSE
);
~
DotInclDepGraph
();
void
writeGraph
(
QTextStream
&
t
,
GraphOutputFormat
f
,
const
char
*
path
);
bool
isTrivial
()
const
;
...
...
@@ -150,4 +152,5 @@ class DotInclDepGraph
static
int
m_curNodeNumber
;
QCString
m_diskName
;
int
m_maxDistance
;
bool
m_inverse
;
};
src/doxygen.cpp
View file @
5ade6c6e
...
...
@@ -1165,10 +1165,9 @@ void buildVarList(Entry *root)
root
->
type
=
root
->
name
;
QRegExp
re
(
"[a-z_A-Z][a-z_A-Z0-9]*"
);
int
l
;
i
=
re
.
match
(
root
->
args
,
0
,
&
l
);
i
=
r
oot
->
args
.
isEmpty
()
?
-
1
:
r
e
.
match
(
root
->
args
,
0
,
&
l
);
root
->
name
=
root
->
args
.
mid
(
i
,
l
);
root
->
args
=
root
->
args
.
mid
(
i
+
l
,
root
->
args
.
find
(
')'
,
i
+
l
)
-
i
-
l
);
root
->
args
=
root
->
args
.
mid
(
i
+
l
,
root
->
args
.
find
(
')'
,
i
+
l
)
-
i
-
l
);
//printf("new: type=`%s' name=`%s' args=`%s'\n",
// root->type.data(),root->name.data(),root->args.data());
}
...
...
@@ -1350,7 +1349,7 @@ static void buildMemberList(Entry *root)
)
{
int
l
;
if
((
i
=
re
.
match
(
root
->
type
,
0
,
&
l
))
!=-
1
)
// function variable
if
(
!
root
->
type
.
isEmpty
()
&&
(
i
=
re
.
match
(
root
->
type
,
0
,
&
l
))
!=-
1
)
// function variable
{
root
->
args
+=
root
->
type
.
right
(
root
->
type
.
length
()
-
i
-
l
);
root
->
type
=
root
->
type
.
left
(
i
+
l
);
...
...
@@ -1882,8 +1881,14 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
int
typeLen
=
baseClassName
.
length
();
while
(
e
<
typeLen
&&
brCount
!=
0
)
{
if
(
baseClassName
.
at
(
e
)
==
'<'
)
brCount
++
;
if
(
baseClassName
.
at
(
e
)
==
'>'
)
brCount
--
;
if
(
baseClassName
.
at
(
e
)
==
'<'
)
{
if
(
e
<
typeLen
-
1
&&
baseClassName
.
at
(
e
+
1
)
==
'<'
)
e
++
;
else
brCount
++
;
}
if
(
baseClassName
.
at
(
e
)
==
'>'
)
{
if
(
e
<
typeLen
-
1
&&
baseClassName
.
at
(
e
+
1
)
==
'>'
)
e
++
;
else
brCount
--
;
}
e
++
;
}
if
(
brCount
==
0
)
// end of template was found at e
...
...
@@ -2185,6 +2190,8 @@ static void addMemberDocs(Entry *root,
FileDef
*
fd
=
findFileDef
(
inputNameDict
,
root
->
fileName
,
ambig
);
md
->
setBodyDef
(
fd
);
}
}
//md->setDefFile(root->fileName);
//md->setDefLine(root->startLine);
...
...
@@ -2192,6 +2199,7 @@ static void addMemberDocs(Entry *root,
md
->
addSectionsToDefinition
(
root
->
anchors
);
addMemberToGroups
(
root
,
md
);
if
(
cd
)
cd
->
insertUsedFile
(
root
->
fileName
);
//printf("root->mGrpId=%d\n",root->mGrpId);
if
(
root
->
mGrpId
!=-
1
)
{
if
(
md
->
getMemberGroupId
()
!=-
1
)
...
...
@@ -2208,23 +2216,9 @@ static void addMemberDocs(Entry *root,
}
else
// set group id
{
//printf("setMemberGroupId=%d md=%s\n",root->mGrpId,md->name().data());
md
->
setMemberGroupId
(
root
->
mGrpId
);
}
//md->setMemberGroup(memberGroupDict[root->mGrpId]);
// if (cd)
// cd->addMemberToGroup(md,root->mGrpId);
// else if (nd)
// nd->addMemberToGroup(md,root->mGrpId);
// else
// {
// bool ambig;
// FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig);
// if (fd)
// {
// //fd->addMemberToGroup(md,root->mGrpId);
// }
// }
//}
}
}
...
...
@@ -2419,24 +2413,26 @@ static void substituteTemplateArgNames(ArgumentList *src,
bool
isReplaced
=
FALSE
;
QRegExp
re
(
idMask
);
int
i
,
p
=
0
,
l
,
c
=
0
;
while
((
i
=
re
.
match
(
s
,
p
,
&
l
))
!=-
1
)
// for each template name found at the
// member definition
while
(
!
s
.
isEmpty
()
&&
(
i
=
re
.
match
(
s
,
p
,
&
l
))
!=-
1
)
// for each template name found at the
// member definition
{
Argument
*
ta
=
c
<
(
int
)
tempArgs
->
count
()
?
tempArgs
->
at
(
c
)
:
0
;
if
(
ta
)
// get matching template argument of the class
{
QCString
dstName
=
s
.
mid
(
i
,
l
);
QCString
srcName
=
ta
->
type
.
copy
();
QCString
srcName
=
ta
->
name
.
copy
();
if
(
srcName
.
isEmpty
())
srcName
=
ta
->
type
.
copy
();
//printf("1.Template Name = `%s' -> `%s'\n",srcName.data(),dstName.data());
int
bi
;
if
((
bi
=
srcName
.
findRev
(
' '
))
!=-
1
)
// search for separator
{
// strip the type specifier (usuall class or typename)
// strip the type specifier (usuall
y
class or typename)
srcName
=
srcName
.
right
(
srcName
.
length
()
-
bi
-
1
);
}
//if (srcName.left(6)=="class ") srcName=srcName.right(srcName.length()-6);
//if (srcName.left(9)=="typename ") srcName=srcName.right(srcName.length()-9);
//printf("Template Name = `%s' -> `%s'\n",srcName.data(),dstName.data());
//printf("
2.
Template Name = `%s' -> `%s'\n",srcName.data(),dstName.data());
if
(
srcName
!=
dstName
)
/* we need to substitute */
{
int
ti
,
tp
=
0
;
...
...
@@ -2478,7 +2474,7 @@ static void substituteTemplateArgNames(ArgumentList *src,
}
dst
->
append
(
na
);
}
//printf("substituteTemplateArgNames(
src=`%s',tempNameStr=`%s',tempArgs=`%s',dest=`%s'
)\n",
//printf("substituteTemplateArgNames(
\nsrc=`%s',\ntempNameStr=`%s',\ntempArgs=`%s',\ndest=`%s'\n
)\n",
// argListToString(src).data(),
// s.data(),
// argListToString(tempArgs).data(),
...
...
@@ -3210,14 +3206,14 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
static
void
findMemberDocumentation
(
Entry
*
root
)
{
int
i
,
l
;
int
i
=-
1
,
l
;
QRegExp
re
(
"([a-zA-Z0-9: ]*
\\
*+[
\\
*]*"
);
Debug
::
print
(
Debug
::
FindMembers
,
0
,
"root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->memSpec=%d
\n
"
,
root
->
type
.
data
(),
root
->
inside
.
data
(),
root
->
name
.
data
(),
root
->
args
.
data
(),
root
->
section
,
root
->
memSpec
"root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->memSpec=%d
root->mGrpId=%d
\n
"
,
root
->
type
.
data
(),
root
->
inside
.
data
(),
root
->
name
.
data
(),
root
->
args
.
data
(),
root
->
section
,
root
->
memSpec
,
root
->
mGrpId
);
bool
isFunc
=
TRUE
;
if
((
i
=
re
.
match
(
root
->
type
,
0
,
&
l
))
!=-
1
)
// func variable/typedef to func ptr
if
(
!
root
->
type
.
isEmpty
()
&&
(
i
=
re
.
match
(
root
->
type
,
0
,
&
l
))
!=-
1
)
// func variable/typedef to func ptr
{
root
->
args
+=
root
->
type
.
right
(
root
->
type
.
length
()
-
i
-
l
);
root
->
type
=
root
->
type
.
left
(
i
+
l
);
...
...
@@ -3249,14 +3245,13 @@ static void findMemberDocumentation(Entry *root)
else
if
((
root
->
section
==
Entry
::
FUNCTION_SEC
// function
||
(
root
->
section
==
Entry
::
VARIABLE_SEC
&&
(
root
->
section
==
Entry
::
VARIABLE_SEC
&&
// variable
!
root
->
type
.
isEmpty
()
&&
root
->
type
.
left
(
8
)
!=
"typedef "
&&
compoundKeywordDict
.
find
(
root
->
type
)
==
0
)
)
&&
(
!
root
->
doc
.
isEmpty
()
||
!
root
->
brief
.
isEmpty
()
||
root
->
bodyLine
!=-
1
||
(
root
->
memSpec
&
Entry
::
Inline
)
(
!
root
->
doc
.
isEmpty
()
||
!
root
->
brief
.
isEmpty
()
||
root
->
bodyLine
!=-
1
||
(
root
->
memSpec
&
Entry
::
Inline
)
||
root
->
mGrpId
!=-
1
)
)
{
...
...
@@ -3386,7 +3381,14 @@ static void findEnums(Entry *root)
//}
if
(
nd
&&
!
nd
->
name
().
isEmpty
()
&&
nd
->
name
().
at
(
0
)
!=
'@'
)
{
md
->
setDefinition
(
nd
->
name
()
+
"::"
+
name
);
if
(
Config
::
hideScopeNames
)
{
md
->
setDefinition
(
name
);
}
else
{
md
->
setDefinition
(
nd
->
name
()
+
"::"
+
name
);
}
nd
->
insertMember
(
md
);
md
->
setNamespace
(
nd
);
}
...
...
@@ -3397,7 +3399,14 @@ static void findEnums(Entry *root)
}
else
if
(
cd
)
{
md
->
setDefinition
(
cd
->
name
()
+
"::"
+
name
);
if
(
Config
::
hideScopeNames
)
{
md
->
setDefinition
(
name
);
}
else
{
md
->
setDefinition
(
cd
->
name
()
+
"::"
+
name
);
}
cd
->
insertMember
(
md
);
cd
->
insertUsedFile
(
root
->
fileName
);
}
...
...
@@ -3538,7 +3547,6 @@ static void findEnumDocumentation(Entry *root)
if
(
root
->
mGrpId
!=-
1
&&
md
->
getMemberGroupId
()
==-
1
)
{
//cd->addMemberToGroup(md,root->mGrpId);
md
->
setMemberGroupId
(
root
->
mGrpId
);
}
...
...
@@ -3562,6 +3570,7 @@ static void findEnumDocumentation(Entry *root)
md
->
setDocumentation
(
root
->
doc
);
md
->
setBriefDescription
(
root
->
brief
);
md
->
addSectionsToDefinition
(
root
->
anchors
);
md
->
setMemberGroupId
(
root
->
mGrpId
);
found
=
TRUE
;
}
}
...
...
@@ -3853,7 +3862,8 @@ static void addSourceReferences()
{
//printf("Found member `%s' in file `%s' at line `%d'\n",
// md->name().data(),fd->name().data(),md->getStartBodyLine());
Definition
*
d
=
gd
?
gd
:
(
nd
?
nd
:
fd
);
Definition
*
d
=
gd
!=
0
?
(
Definition
*
)
gd
:
(
nd
!=
0
?
(
Definition
*
)
nd
:
(
Definition
*
)
fd
);
fd
->
addSourceRef
(
md
->
getStartBodyLine
(),
d
,
md
);
}
}
...
...
src/filedef.cpp
View file @
5ade6c6e
...
...
@@ -46,6 +46,9 @@ FileDef::FileDef(const char *p,const char *nm,const char *ref)
includeList
=
new
QList
<
IncludeInfo
>
;
includeList
->
setAutoDelete
(
TRUE
);
includeDict
=
new
QDict
<
IncludeInfo
>
(
61
);
includedByList
=
new
QList
<
IncludeInfo
>
;
includedByList
->
setAutoDelete
(
TRUE
);
includedByDict
=
new
QDict
<
IncludeInfo
>
(
61
);
namespaceList
=
new
NamespaceList
;
namespaceDict
=
new
NamespaceDict
(
7
);
srcDefDict
=
0
;
...
...
@@ -188,7 +191,7 @@ void FileDef::writeDocumentation(OutputList &ol)
if
(
Config
::
haveDotFlag
&&
Config
::
includeGraphFlag
)
{
//printf("Graph for file %s\n",name().data());
DotInclDepGraph
incDepGraph
(
this
);
DotInclDepGraph
incDepGraph
(
this
,
FALSE
);
if
(
!
incDepGraph
.
isTrivial
())
{
ol
.
disable
(
OutputGenerator
::
Man
);
...
...
@@ -201,6 +204,22 @@ void FileDef::writeDocumentation(OutputList &ol)
//incDepGraph.writeGraph(Config::htmlOutputDir,fd->getOutputFileBase());
}
if
(
Config
::
haveDotFlag
&&
Config
::
includedByGraphFlag
)
{
//printf("Graph for file %s\n",name().data());
DotInclDepGraph
incDepGraph
(
this
,
TRUE
);
if
(
!
incDepGraph
.
isTrivial
())
{
ol
.
disable
(
OutputGenerator
::
Man
);
ol
.
newParagraph
();
ol
.
startInclDepGraph
();
parseText
(
ol
,
theTranslator
->
trInclByDepGraph
());
ol
.
endInclDepGraph
(
incDepGraph
);
ol
.
enableAll
();
}
//incDepGraph.writeGraph(Config::htmlOutputDir,fd->getOutputFileBase());
}
if
(
generateSource
()
||
(
!
isReference
()
&&
Config
::
sourceBrowseFlag
))
{
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
...
...
@@ -454,6 +473,7 @@ void FileDef::addMemberListToGroup(MemberList *ml,
{
QCString
*
pGrpHeader
=
memberHeaderDict
[
groupId
];
QCString
*
pDocs
=
memberDocDict
[
groupId
];
//printf("Member `%s' pGrpHeader=%p\n",md->name().data(),pGrpHeader);
if
(
pGrpHeader
)
{
MemberGroup
*
mg
=
memberGroupDict
->
find
(
groupId
);
...
...
@@ -463,6 +483,7 @@ void FileDef::addMemberListToGroup(MemberList *ml,
memberGroupDict
->
insert
(
groupId
,
mg
);
memberGroupList
->
append
(
mg
);
}
//printf("insert member %s in group %s\n",md->name().data(),pGrpHeader->data());
mg
->
insertMember
(
md
);
md
->
setMemberGroup
(
mg
);
}
...
...
@@ -595,6 +616,21 @@ void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local)
}
}
void
FileDef
::
addIncludedByDependency
(
FileDef
*
fd
,
const
char
*
incName
,
bool
local
)
{
//printf("FileDef::addIncludedByDependency(%p,%s,%d)\n",fd,incName,local);
QCString
iName
=
fd
?
fd
->
absFilePath
().
data
()
:
incName
;
if
(
!
iName
.
isEmpty
()
&&
includedByDict
->
find
(
iName
)
==
0
)
{
IncludeInfo
*
ii
=
new
IncludeInfo
;
ii
->
fileDef
=
fd
;
ii
->
includeName
=
incName
;
ii
->
local
=
local
;
includedByList
->
append
(
ii
);
includedByDict
->
insert
(
iName
,
ii
);
}
}
//-----------------------------------------------------------------------------
/*! Creates a file list. */
...
...
src/filedef.h
View file @
5ade6c6e
...
...
@@ -122,9 +122,11 @@ class FileDef : public Definition
void
setGenerateSource
(
bool
b
)
{
isSource
=
b
;
}
bool
generateSource
()
const
{
return
isSource
;
}
void
addIncludeDependency
(
FileDef
*
fd
,
const
char
*
incName
,
bool
local
);
void
addIncludedByDependency
(
FileDef
*
fd
,
const
char
*
incName
,
bool
local
);
QList
<
IncludeInfo
>
*
includeFileList
()
const
{
return
includeList
;
}
Q
Dict
<
IncludeInfo
>
*
includeFileDict
()
const
{
return
includeDic
t
;
}
Q
List
<
IncludeInfo
>
*
includedByFileList
()
const
{
return
includedByLis
t
;
}
void
addMembersToMemberGroup
();
void
distributeMemberGroupDocumentation
();
...
...
@@ -145,6 +147,8 @@ class FileDef : public Definition
ClassList
*
classList
;
QDict
<
IncludeInfo
>
*
includeDict
;
QList
<
IncludeInfo
>
*
includeList
;
QDict
<
IncludeInfo
>
*
includedByDict
;
QList
<
IncludeInfo
>
*
includedByList
;
NamespaceDict
*
namespaceDict
;
NamespaceList
*
namespaceList
;
NamespaceList
*
usingDirList
;
...
...
src/latexgen.cpp
View file @
5ade6c6e
...
...
@@ -48,22 +48,47 @@ static QCString filterTitle(const char *s)
return
result
;
}
static
QCString
escapeLabelName
(
const
QCString
&
s
)
static
QCString
escapeLabelName
(
const
char
*
s
)
{
QCString
result
;
uint
i
;
for
(
i
=
0
;
i
<
s
.
length
();
i
++
)
const
char
*
p
=
s
;
char
c
;
while
((
c
=*
p
++
))
{
char
c
=
s
.
at
(
i
);
switch
(
c
)
{
case
'%'
:
result
+=
"
\\
%"
;
break
;
case
'|'
:
result
+=
"
\\
texttt{
\"
|}"
;
break
;
case
'!'
:
result
+=
"
\"
!"
;
break
;
default:
result
+=
c
;
}
}
return
result
;
}
static
QCString
escapeMakeIndexChars
(
LatexGenerator
*
g
,
QTextStream
&
t
,
const
char
*
s
)
{
QCString
result
;
const
char
*
p
=
s
;
char
str
[
2
];
str
[
1
]
=
0
;
char
c
;
while
((
c
=*
p
++
))
{
switch
(
c
)
{
case
'!'
:
t
<<
"
\"
!"
;
break
;
case
'"'
:
t
<<
"
\"\"
"
;
break
;
case
'@'
:
t
<<
"
\"
@"
;
break
;
case
'|'
:
t
<<
"
\\
texttt{
\"
|}"
;
break
;
case
'['
:
t
<<
"["
;
break
;
case
']'
:
t
<<
"]"
;
break
;
default:
str
[
0
]
=
c
;
g
->
docify
(
str
);
break
;
}
}
return
result
;
}
LatexGenerator
::
LatexGenerator
()
:
OutputGenerator
()
{
...
...
@@ -178,7 +203,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
t
<<
"}
\n
"
;
if
(
Config
::
paperType
==
"a4wide"
)
t
<<
"
\\
usepackage{a4wide}
\n
"
;
t
<<
"
\\
usepackage{makeidx}
\n
"
"
\\
usepackage{fancyh
eadings
}
\n
"
"
\\
usepackage{fancyh
dr
}
\n
"
"
\\
usepackage{epsfig}
\n
"
"
\\
usepackage{float}
\n
"
"
\\
usepackage{doxygen}
\n
"
;
...
...
@@ -865,11 +890,11 @@ void LatexGenerator::startMemberDoc(const char *clname,
t
<<
"}!"
;
}
t
<<
escapeLabelName
(
memname
)
<<
"@{"
;
docify
(
memname
);
escapeMakeIndexChars
(
this
,
t
,
memname
);
t
<<
"}}"
<<
endl
;
t
<<
"
\\
index{"
<<
escapeLabelName
(
memname
)
<<
"@{"
;
docify
(
memname
);
escapeMakeIndexChars
(
this
,
t
,
memname
);
t
<<
"}"
;
if
(
clname
)
{
...
...
@@ -934,7 +959,7 @@ void LatexGenerator::addToIndex(const char *s1,const char *s2)
if
(
s1
)
{
t
<<
"
\\
index{"
<<
escapeLabelName
(
s1
)
<<
"@{"
;
docify
(
s1
);
escapeMakeIndexChars
(
this
,
t
,
s1
);
t
<<
"}"
;
if
(
s2
)
{
...
...
src/memberdef.cpp
View file @
5ade6c6e
...
...
@@ -475,8 +475,8 @@ void MemberDef::writeDeclaration(OutputList &ol,
if
(
Config
::
hideMemberFlag
&&
documentation
().
isEmpty
()
&&
!
Config
::
briefMemDescFlag
&&
!
Config
::
repeatBriefFlag
)
return
;
// hide static file & namespace members unless extract
private
is on
if
(
cd
==
0
&&
isStatic
()
&&
!
Config
::
extract
Private
Flag
)
return
;
// hide static file & namespace members unless extract
static
is on
if
(
cd
==
0
&&
isStatic
()
&&
!
Config
::
extract
Static
Flag
)
return
;
// hide private member that are put into a member group. Non-grouped
// members are not rendered anyway.
...
...
@@ -489,7 +489,8 @@ void MemberDef::writeDeclaration(OutputList &ol,
// strip `friend' keyword from type
if
(
type
.
left
(
7
)
==
"friend "
)
type
=
type
.
right
(
type
.
length
()
-
7
);
static
QRegExp
r
(
"@[0-9]+"
);
if
((
i
=
r
.
match
(
type
,
0
,
&
l
))
==-
1
||
!
enumUsed
())
i
=-
1
;
if
((
type
.
isEmpty
()
||
(
i
=
r
.
match
(
type
,
0
,
&
l
))
==-
1
)
||
!
enumUsed
())
{
if
(
!
Config
::
genTagFile
.
isEmpty
())
...
...
@@ -792,7 +793,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
void
MemberDef
::
writeDocumentation
(
MemberList
*
ml
,
OutputList
&
ol
,
const
char
*
scopeName
)
{
if
(
memberClass
()
==
0
&&
isStatic
()
&&
!
Config
::
extract
Private
Flag
)
return
;
if
(
memberClass
()
==
0
&&
isStatic
()
&&
!
Config
::
extract
Static
Flag
)
return
;
bool
hasDocs
=
detailsAreVisible
();
//printf("MemberDef::writeDocumentation(): type=`%s' def=`%s'\n",type.data(),definition());
if
(
...
...
@@ -834,14 +835,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
int
i
=
0
,
l
;
static
QRegExp
r
(
"@[0-9]+"
);
//ENUM
if
(
isEnumValue
())
return
;
//if (isEnumValue() && def[0]=='@') def = def.right(def.length()-2);
//int dummy;
//if (isEnumerate() && r.match(def,0,&l)!=-1) return;
//MemberDef *smd;
//if (isEnumValue() && (smd = getEnumScope())
// && r.match(smd->name(),0,&dummy)==-1) return;
ol
.
pushGeneratorState
();
...
...
@@ -1342,7 +1336,7 @@ bool MemberDef::isLinkableInProject()
((
hasDocumentation
()
&&
!
isReference
())
)
&&
(
prot
!=
Private
||
Config
::
extractPrivateFlag
||
isFriend
())
&&
// not a private class member
(
classDef
!=
0
||
Config
::
extract
PrivateFlag
||
!
isStatic
());
// not a private
file/namespace member
(
classDef
!=
0
||
Config
::
extract
StaticFlag
||
!
isStatic
());
// not a static
file/namespace member
}
bool
MemberDef
::
isLinkable
()
...
...
src/membergroup.cpp
View file @
5ade6c6e
...
...
@@ -111,14 +111,17 @@ int MemberGroup::countDecMembers(bool sectionPerType)
void
MemberGroup
::
distributeMemberGroupDocumentation
()
{
//printf("MemberGroup::distributeMemberGroupDocumentation() %s\n",grpHeader.data());
MemberDef
*
md
=
memberList
->
first
();
if
(
md
&&
md
->
hasDocumentation
(
))
if
(
md
&&
!
(
md
->
documentation
().
isEmpty
()
&&
md
->
briefDescription
().
isEmpty
()
))
{
//printf("First member %s has documentation!\n",md->name().data());
MemberDef
*
omd
=
memberList
->
next
();
while
(
omd
)
{
if
(
!
omd
->
hasDocumentation
())
if
(
omd
->
documentation
().
isEmpty
()
&&
omd
->
briefDescription
().
isEmpty
())
{
//printf("Copying documentation to member %s\n",omd->name().data());
omd
->
setBriefDescription
(
md
->
briefDescription
());
omd
->
setDocumentation
(
md
->
documentation
());
}
...
...
src/memberlist.cpp
View file @
5ade6c6e
...
...
@@ -54,7 +54,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe
{
//printf("md=%p md->name()=`%s' inGroup=%d getMemberGroup()=%p\n",
// md,md->name().data(),inGroup,md->getMemberGroup());
if
(
!
(
md
->
memberClass
()
==
0
&&
md
->
isStatic
()
&&
!
Config
::
extract
Private
Flag
)
&&
if
(
!
(
md
->
memberClass
()
==
0
&&
md
->
isStatic
()
&&
!
Config
::
extract
Static
Flag
)
&&
(
!
Config
::
hideMemberFlag
||
md
->
hasDocumentation
())
&&
(
(
!
Config
::
hideMemberFlag
||
!
md
->
documentation
().
isEmpty
()
||
...
...
@@ -119,7 +119,7 @@ void MemberList::countDocMembers()
//printf("%s MemberList::countDocMembers() details=%d\n",
// md->name().data(),md->detailsAreVisible());
bool
visibleIfStatic
=
!
(
md
->
memberClass
()
==
0
&&
md
->
isStatic
()
&&
!
Config
::
extract
Private
Flag
);
!
(
md
->
memberClass
()
==
0
&&
md
->
isStatic
()
&&
!
Config
::
extract
Static
Flag
);
if
(
visibleIfStatic
&&
(
Config
::
extractAllFlag
||
md
->
detailsAreVisible
())
...
...
src/pre.l
View file @
5ade6c6e
...
...
@@ -120,7 +120,8 @@ static void decrLevel()
}
else
{
err("Error: More #endif's than #if's found.\n");
err("%s:%d: Error: More #endif's than #if's found.\n",
g_yyFileName.data(),g_yyLineNr);
}
}
...
...
@@ -128,7 +129,8 @@ static bool otherCaseDone()
{
if (g_level==0)
{
err("Error: Found an #else without a preceding #if.\n");
err("%s:%d: Error: Found an #else without a preceding #if.\n",
g_yyFileName.data(),g_yyLineNr);
return TRUE;
}
else
...
...
@@ -165,7 +167,7 @@ static FILE *findFile(const char *fileName)
{
QCString absName=(QCString)s+"/"+fileName;
QFileInfo fi(absName);
if (fi.exists())
if (fi.exists()
&& fi.isFile()
)
{
FILE *f;
if (!Config::inputFilter.isEmpty())
...
...
@@ -279,6 +281,7 @@ static void processConcatOperators(QCString &expr)
{
QRegExp r("[ \\t\\n]*##[ \\t\\n]*");
int l,n,i=0;
if (expr.isEmpty()) return;
while ((n=r.match(expr,i,&l))!=-1)
{
if (n+l+1<(int)expr.length() && expr.at(n+l)=='@' && expr.at(n+l+1)=='-')
...
...
@@ -840,6 +843,11 @@ static void readIncludeFile(const QCString &inc)
{
// add include dependency to the file in which the #include was found
oldFileDef->addIncludeDependency(g_yyFileDef,incFileName,localInclude);
// add included by dependency
if (g_yyFileDef)
{
g_yyFileDef->addIncludedByDependency(oldFileDef,oldFileDef->name(),localInclude);
}
}
// store the state of the old file
FileState *fs=new FileState;
...
...
@@ -861,6 +869,11 @@ static void readIncludeFile(const QCString &inc)
FileDef *fd = findFileDef(inputNameDict,incFileName,ambig);
// add include dependency to the file in which the #include was found
oldFileDef->addIncludeDependency(fd,incFileName,localInclude);
// add included by dependency
if (fd)
{
fd->addIncludedByDependency(oldFileDef,oldFileDef->name(),localInclude);
}
}
#if SHOW_INCLUDES
msg("#include %s: not found! skipping...\n",incFileName.data());
...
...
src/scanner.l
View file @
5ade6c6e
This diff is collapsed.
Click to expand it.
src/translator.h
View file @
5ade6c6e
...
...
@@ -519,9 +519,11 @@ class Translator
/*! used as the title of the HTML page of a class/struct/union */
virtual
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
ClassDef
::
CompoundType
compType
,
bool
isTemplate
)
{
QCString
result
=
(
QCString
)
clName
+
" "
;
if
(
isTemplate
)
result
+=
" Template"
;
switch
(
compType
)
{
case
ClassDef
:
:
Class
:
result
+=
" Class"
;
break
;
...
...
@@ -893,6 +895,15 @@ class Translator
{
return
"Attention"
;
}
virtual
QCString
trInclByDepGraph
()
{
return
"This graph shows which files directly or "
"indirectly include this file:"
;
}
virtual
QCString
trSince
()
{
return
"Since"
;
}
};
#endif
src/translator_cz.h
View file @
5ade6c6e
...
...
@@ -287,7 +287,8 @@ class TranslatorCzech : public Translator
/*! used as the title of the HTML page of a class/struct/union */
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
ClassDef
::
CompoundType
compType
,
bool
/*isTemplate*/
)
{
QCString
result
=
(
QCString
)
clName
+
" "
;
result
+=
" Reference"
;
...
...
src/translator_de.h
View file @
5ade6c6e
...
...
@@ -429,7 +429,8 @@ class TranslatorGerman : public Translator
//////////////////////////////////////////////////////////////////////////
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
ClassDef
::
CompoundType
compType
,
bool
/*isTemplate*/
)
// used as the title of the HTML page of a class/struct/union
{
QCString
result
=
(
QCString
)
clName
+
" "
;
...
...
src/translator_es.h
View file @
5ade6c6e
...
...
@@ -524,7 +524,8 @@ class TranslatorSpanish : public Translator
/*! used as the title of the HTML page of a class/struct/union */
virtual
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
ClassDef
::
CompoundType
compType
,
bool
/*isTemplate*/
)
{
QCString
result
=
(
QCString
)
clName
+
" "
;
switch
(
compType
)
...
...
src/translator_fi.h
View file @
5ade6c6e
...
...
@@ -464,7 +464,8 @@ class TranslatorFinnish : public Translator
//////////////////////////////////////////////////////////////////////////
virtual
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
ClassDef
::
CompoundType
compType
,
bool
/*isTemplate*/
)
// used as the title of the HTML page of a class/struct/union
{
QCString
result
=
(
QCString
)
clName
+
" "
;
...
...
src/translator_fr.h
View file @
5ade6c6e
...
...
@@ -491,7 +491,8 @@ class TranslatorFrench : public Translator
/*! used as the title of the HTML page of a class/struct/union */
virtual
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
ClassDef
::
CompoundType
compType
,
bool
/*isTemplate*/
)
{
QCString
result
=
"Référence de "
;
switch
(
compType
)
...
...
src/translator_hr.h
View file @
5ade6c6e
...
...
@@ -261,7 +261,8 @@ class TranslatorCroatian : public Translator
//////////////////////////////////////////////////////////////////////////
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
ClassDef
::
CompoundType
compType
,
bool
/*isTemplate*/
)
// used as the title of the HTML page of a class/struct/union
{
QCString
result
=
"Opis "
;
...
...
src/translator_it.h
View file @
5ade6c6e
...
...
@@ -531,7 +531,8 @@ class TranslatorItalian : public Translator
/*! used as the title of the HTML page of a class/struct/union */
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
ClassDef
::
CompoundType
compType
,
bool
/* isTemplate */
)
{
QCString
result
=
"Riferimenti per "
;
switch
(
compType
)
...
...
src/translator_jp.h
View file @
5ade6c6e
...
...
@@ -511,7 +511,8 @@ class TranslatorJapanese : public Translator
/*! used as the title of the HTML page of a class/struct/union */
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
ClassDef
::
CompoundType
compType
,
bool
/*isTemplate*/
)
{
QCString
result
=
""
;
switch
(
compType
)
...
...
src/translator_nl.h
View file @
5ade6c6e
...
...
@@ -261,10 +261,12 @@ class TranslatorDutch : public Translator
//////////////////////////////////////////////////////////////////////////
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
ClassDef
::
CompoundType
compType
,
bool
isTemplate
)
// used as the title of the HTML page of a class/struct/union
{
QCString
result
=
(
QCString
)
clName
+
" "
;
if
(
isTemplate
)
result
+=
" Template"
;
switch
(
compType
)
{
case
ClassDef
:
:
Class
:
result
+=
" Class"
;
break
;
...
...
src/translator_ru.h
View file @
5ade6c6e
...
...
@@ -402,7 +402,9 @@ class TranslatorRussian : public Translator
// need translation
return
" "
;
}
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
,
bool
/*isTemplate*/
)
{
QCString
result
=
(
QCString
)
clName
+
" "
;
switch
(
compType
)
...
...
src/translator_se.h
View file @
5ade6c6e
...
...
@@ -380,7 +380,8 @@ class TranslatorSwedish : public Translator
//////////////////////////////////////////////////////////////////////////
virtual
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
ClassDef
::
CompoundType
compType
,
bool
/*isTemplate*/
)
{
QCString
result
=
(
QCString
)
clName
+
" "
;
switch
(
compType
)
...
...
src/util.cpp
View file @
5ade6c6e
...
...
@@ -287,6 +287,7 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char *
int
newIndex
;
int
skipIndex
=
0
;
int
floatingIndex
=
0
;
if
(
strLen
==
0
)
return
;
// read a word from the text string
while
((
newIndex
=
regExp
.
match
(
txtStr
,
index
,
&
matchLen
))
!=-
1
)
{
...
...
@@ -1987,6 +1988,7 @@ QCString substituteClassNames(const QCString &s)
{
int
i
=
0
,
l
,
p
;
QCString
result
;
if
(
s
.
isEmpty
())
return
result
;
QRegExp
r
(
"[a-z_A-Z][a-z_A-Z0-9]*"
);
while
((
p
=
r
.
match
(
s
,
i
,
&
l
))
!=-
1
)
{
...
...
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