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
422c14b6
Commit
422c14b6
authored
Jul 23, 2000
by
Dimitri van Heesch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.2.0
parent
686cb8df
Changes
67
Show whitespace changes
Inline
Side-by-side
Showing
67 changed files
with
2413 additions
and
772 deletions
+2413
-772
INSTALL
INSTALL
+2
-2
README
README
+2
-2
VERSION
VERSION
+1
-1
configgen.cpp
addon/configgen/configgen.cpp
+4
-4
configure
configure
+4
-0
Doxyfile
doc/Doxyfile
+6
-2
commands.doc
doc/commands.doc
+121
-27
config.doc
doc/config.doc
+54
-136
doxygen_usage.doc
doc/doxygen_usage.doc
+47
-8
doxywizard.gif
doc/doxywizard.gif
+0
-0
doxywizard_usage.doc
doc/doxywizard_usage.doc
+50
-0
history.doc
doc/history.doc
+1
-1
index.doc
doc/index.doc
+3
-0
install.doc
doc/install.doc
+51
-1
starting.doc
doc/starting.doc
+10
-5
trouble.doc
doc/trouble.doc
+16
-4
afterdoc.cfg
examples/afterdoc.cfg
+1
-0
author.cfg
examples/author.cfg
+1
-0
autolink.cfg
examples/autolink.cfg
+1
-0
class.cfg
examples/class.cfg
+1
-0
define.cfg
examples/define.cfg
+1
-0
diagrams.cfg
examples/diagrams.cfg
+1
-0
enum.cfg
examples/enum.cfg
+1
-0
example.cfg
examples/example.cfg
+1
-0
example.tag
examples/example.tag
+1
-1
file.cfg
examples/file.cfg
+1
-0
func.cfg
examples/func.cfg
+1
-0
group.cfg
examples/group.cfg
+1
-0
include.cfg
examples/include.cfg
+1
-0
jdstyle.cfg
examples/jdstyle.cfg
+1
-0
memgrp.cfg
examples/memgrp.cfg
+1
-0
overload.cfg
examples/overload.cfg
+2
-0
page.cfg
examples/page.cfg
+1
-0
par.cfg
examples/par.cfg
+1
-0
qtstyle.cfg
examples/qtstyle.cfg
+1
-0
relates.cfg
examples/relates.cfg
+1
-0
restypedef.cfg
examples/restypedef.cfg
+1
-0
structcmd.cfg
examples/structcmd.cfg
+1
-0
tag.cfg
examples/tag.cfg
+1
-0
templ.cfg
examples/templ.cfg
+1
-0
doxygen.spec
packages/rpm/doxygen.spec
+1
-1
classdef.cpp
src/classdef.cpp
+9
-9
classdef.h
src/classdef.h
+4
-2
code.l
src/code.l
+88
-22
definition.cpp
src/definition.cpp
+1
-1
dot.cpp
src/dot.cpp
+18
-3
doxygen.cpp
src/doxygen.cpp
+143
-126
filedef.cpp
src/filedef.cpp
+37
-10
groupdef.cpp
src/groupdef.cpp
+60
-13
htmlgen.cpp
src/htmlgen.cpp
+74
-26
htmlgen.h
src/htmlgen.h
+2
-0
index.cpp
src/index.cpp
+18
-26
language.cpp
src/language.cpp
+5
-0
latexgen.cpp
src/latexgen.cpp
+147
-104
latexgen.h
src/latexgen.h
+6
-4
memberdef.cpp
src/memberdef.cpp
+21
-21
memberdef.h
src/memberdef.h
+73
-69
memberlist.cpp
src/memberlist.cpp
+4
-4
membername.cpp
src/membername.cpp
+4
-4
namespacedef.cpp
src/namespacedef.cpp
+53
-9
pre.l
src/pre.l
+8
-9
rtfgen.cpp
src/rtfgen.cpp
+4
-4
scanner.l
src/scanner.l
+26
-19
translator_cz.h
src/translator_cz.h
+192
-74
translator_nl.h
src/translator_nl.h
+110
-1
translator_pt.h
src/translator_pt.h
+884
-0
util.cpp
src/util.cpp
+24
-17
No files found.
INSTALL
View file @
422c14b6
DOXYGEN Version 1.
1.5-20000716
DOXYGEN Version 1.
2.0
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (
16
July 2000)
Dimitri van Heesch (
23
July 2000)
README
View file @
422c14b6
DOXYGEN Version 1.
1.5-20000716
DOXYGEN Version 1.
2.0
Please read INSTALL for compilation instructions.
...
...
@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
16
July 2000)
Dimitri van Heesch (
23
July 2000)
VERSION
View file @
422c14b6
1.
1.5-20000716
1.
2.0
addon/configgen/configgen.cpp
View file @
422c14b6
...
...
@@ -768,7 +768,7 @@ void init()
"information to generate all constant output in the proper language.
\n
"
"The default language is English, other supported languages are:
\n
"
"Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese,
\n
"
"Spanish, Russian, Croatian
and Polish
.
\n
"
"Spanish, Russian, Croatian
, Polish, and Portuguese
.
\n
"
);
ConfigString
::
addFixedValue
(
"outputLanguage"
,
"English"
);
ConfigString
::
addFixedValue
(
"outputLanguage"
,
"Dutch"
);
...
...
@@ -783,6 +783,7 @@ void init()
ConfigString
::
addFixedValue
(
"outputLanguage"
,
"Russian"
);
ConfigString
::
addFixedValue
(
"outputLanguage"
,
"Croatian"
);
ConfigString
::
addFixedValue
(
"outputLanguage"
,
"Polish"
);
ConfigString
::
addFixedValue
(
"outputLanguage"
,
"Portuguese"
);
ConfigBool
::
add
(
"noIndexFlag"
,
"DISABLE_INDEX"
,
"FALSE"
,
...
...
@@ -1310,9 +1311,8 @@ void init()
"TRUE"
,
"generate RTF flag"
,
"If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
\n
"
"For now this is experimental and is disabled by default. The RTF output
\n
"
"is optimised for Word 97 and may not look too pretty with other readers
\n
"
"or editors.
\n
"
"The RTF output is optimised for Word 97 and may not look very pretty with
\n
"
"other RTF readers or editors.
\n
"
);
ConfigString
::
add
(
"rtfOutputDir"
,
"RTF_OUTPUT"
,
...
...
configure
View file @
422c14b6
...
...
@@ -356,6 +356,10 @@ EOF
elif
test
"
$f_platform
"
=
"solaris-cc"
;
then
cat
>>
.tmakeconfig
<<
EOF
TMAKE_LFLAGS = -Bstatic
EOF
elif
test
"
$f_platform
"
=
"hpux-cc"
;
then
cat
>>
.tmakeconfig
<<
EOF
TMAKE_LFLAGS = -noshared
EOF
else
cat
>>
.tmakeconfig
<<
EOF
...
...
doc/Doxyfile
View file @
422c14b6
...
...
@@ -26,11 +26,15 @@ GENERATE_LATEX = YES
GENERATE_HTML = YES
GENERATE_HTMLHELP = YES
GENERATE_RTF = NO
ENABLED_SECTIONS = logo_on
ENABLE_PREPROCESSING = NO
CASE_SENSE_NAMES = NO
IMAGE_PATH = .
INPUT = index.doc install.doc starting.doc docblocks.doc \
grouping.doc formulas.doc diagrams.doc preprocessing.doc \
external.doc faq.doc trouble.doc history.doc features.doc \
doxygen_usage.doc doxytag_usage.doc doxysearch_usage.doc \
doxywizard_usage.doc \
installdox_usage.doc output.doc autolink.doc \
config.doc commands.doc htmlcmds.doc language.doc
FILE_PATTERNS = *.cpp *.h *.doc
...
...
doc/commands.doc
View file @
422c14b6
...
...
@@ -61,6 +61,7 @@ documentation:
<li> \refitem cmddeprecated \deprecated
<li> \refitem cmddontinclude \dontinclude
<li> \refitem cmde \e
<li> \refitem cmdem \em
<li> \refitem cmdendcode \endcode
<li> \refitem cmdendhtmlonly \endhtmlonly
<li> \refitem cmdendif \endif
...
...
@@ -84,13 +85,16 @@ documentation:
<li> \refitem cmdinternal \internal
<li> \refitem cmdinvariant \invariant
<li> \refitem cmdlatexonly \latexonly
<li> \refitem cmdli \li
<li> \refitem cmdline \line
<li> \refitem cmdlink \link
<li> \refitem cmdmainpage \mainpage
<li> \refitem cmdname \name
<li> \refitem cmdnamespace \namespace
<li> \refitem cmdnosubgrouping \nosubgrouping
<li> \refitem cmdnote \note
<li> \refitem cmdoverload \overload
<li> \refitem cmdp \p
<li> \refitem cmdpage \page
<li> \refitem cmdpar \par
<li> \refitem cmdparam \param
...
...
@@ -164,17 +168,6 @@ Doxygen. Unrecognized commands are treated as normal text.
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
<hr>
\subsection cmdcode \code
\addindex \code
Starts a block of code. A code block is treated differently
from ordinary text. It is interpreted as C/C++ code. The names of the
classes and members that are documented are automatically replaced by
links to the documentation.
\sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim"
<hr>
\subsection cmddef \def <name>
...
...
@@ -185,7 +178,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Example:
\verbinclude define.h
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/define/html/
index
.html">here</a>
Click <a href="$(DOXYGEN_DOCDIR)/examples/define/html/
define.h
.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
...
...
@@ -203,13 +196,6 @@ Doxygen. Unrecognized commands are treated as normal text.
\sa section \ref cmdingroup "\\ingroup"
<hr>
\subsection cmdendcode \endcode
\addindex \endcode
Ends a block of code.
\sa section \ref cmdcode "\\code"
<hr>
\subsection cmdenum \enum <name>
...
...
@@ -229,7 +215,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Example:
\verbinclude enum.h
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/enum/html/
index
.html">here</a>
Click <a href="$(DOXYGEN_DOCDIR)/examples/enum/html/
class_test
.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
...
...
@@ -260,7 +246,7 @@ Doxygen. Unrecognized commands are treated as normal text.
Where the example file \c example_test.cpp looks as follows:
\verbinclude example_test.cpp
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/example/html/
index
.html">here</a>
Click <a href="$(DOXYGEN_DOCDIR)/examples/example/html/
examples
.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
...
...
@@ -283,7 +269,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Example:
\verbinclude file.h
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/file/html/
index
.html">here</a>
Click <a href="$(DOXYGEN_DOCDIR)/examples/file/html/
file.h
.html">here</a>
for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly
...
...
@@ -412,6 +398,8 @@ Public/Protected/Private/... section.
\par Note 1:
You are responsible that there is indeed an
earlier documented member that is overloaded by this one.
To prevent that document reorders the documentation you should set
\ref cfg_sort_member_docs "SORT_MEMBER_DOCS" to NO in this case.
\par Note 2:
The \\overload command does not work inside a one-line comment.
\par Example:
...
...
@@ -684,6 +672,20 @@ Public/Protected/Private/... section.
several invariants. The \\invariant command ends when a blank line or some other
sectioning command is encountered.
<hr>
\subsection cmdnote \note { text }
\addindex \note
Starts a paragraph where a note can be entered. The paragraph will be
indented. The text of the paragraph has no special internal structure.
All visual enhancement commands may be used inside the paragraph.
Multiple adjacent \\note commands will be joined into a single paragraph.
Each note description will start on a new line.
Alternatively, one \\note command may mention
several notes. The \\note command ends when a blank line or some other
sectioning command is encountered. See section \ref cmdpar "\\par"
for an example.
<hr>
\subsection cmdpar \par [(paragraph title)] { paragraph }
...
...
@@ -797,10 +799,11 @@ Public/Protected/Private/... section.
\addindex \sa
Starts a paragraph where one or more cross-references to classes,
functions, methods, variables, files or URL may be specified.
The separators \c :: and \c # may be used to separate a class from the
name of its members. One of several overloaded methods or constructors
Two names joines by either <code>::</code> or <code>\#</code>
are understood as referring to a class and one of its members.
One of several overloaded methods or constructors
may be selected by including a parenthesized list of argument types after
the method.
the method
name
.
Synonymous to \\see.
...
...
@@ -1112,7 +1115,7 @@ Public/Protected/Private/... section.
\par Example:
\verbatim
... the \a x and \y coordinates are used to ...
... the \a x and \
a
y coordinates are used to ...
\endverbatim
This will result in the following text:<br><br>
... the \a x and \a y coordinates are used to ...
...
...
@@ -1147,6 +1150,9 @@ Public/Protected/Private/... section.
\par Note:
For nested lists, HTML commands should be used.
Equivalent to \ref cmdli "\\cmdli"
<hr>
\subsection cmdb \b <word>
...
...
@@ -1170,6 +1176,19 @@ Public/Protected/Private/... section.
will result in the following text:<br><br>
... This function returns \c void and not \c int ...
Equivalent to \ref cmdp "\\cmdp"
<hr>
\subsection cmdcode \code
\addindex \code
Starts a block of code. A code block is treated differently
from ordinary text. It is interpreted as C/C++ code. The names of the
classes and members that are documented are automatically replaced by
links to the documentation.
\sa section \ref cmdendcode "\\endcode", section \ref cmdverbatim "\\verbatim"
<hr>
\subsection cmde \e <word>
...
...
@@ -1185,6 +1204,32 @@ Public/Protected/Private/... section.
will result in the following text:<br><br>
... this is a \e really good example ...
Equvalent to \ref cmdem "\\em"
<hr>
\subsection cmdem \em <word>
\addindex \e
Displays the argument \<word\> in italics.
Use this command to emphasize words.
\par Example:
Typing:
\verbatim
... this is a \em really good example ...
\endverbatim
will result in the following text:<br><br>
... this is a \em really good example ...
Equivalent to \ref cmde "\\e"
<hr>
\subsection cmdendcode \endcode
\addindex \endcode
Ends a block of code.
\sa section \ref cmdcode "\\code"
<hr>
\subsection cmdendhtmlonly \endhtmlonly
...
...
@@ -1321,6 +1366,55 @@ Public/Protected/Private/... section.
\sa section \ref cmdlatexonly "\\latexonly"
and section \ref cmdhtmlonly "\\htmlonly".
<hr>
\subsection cmdli \li { item-description }
\addindex \li
This command has one argument that continues until the first
blank line or until another \\li is encountered.
The command can be used to generate a simple, not nested list of
arguments.
Each argument should start with a \\li command.
\par Example:
Typing:
\verbatim
\li \c AlignLeft left alignment.
\li \c AlignCenter center alignment.
\li \c AlignRight right alignment
No other types of alignment are supported.
\endverbatim
will result in the following text:<br><br>
<ul>
<li> \c AlignLeft left alignment.
<li> \c AlignCenter center alignment.
<li> \c AlignRight right alignment
</ul><br>
No other types of alignment are supported.
\par Note:
For nested lists, HTML commands should be used.
Equivalent to \ref cmdarg "\\cmdarg"
<hr>
\subsection cmdp \p <word>
\addindex \p
Displays the parameter \<word\> using a typewriter font.
You can use this command to refer to member function parameters in
the running text.
\par Example:
\verbatim
... the \p x and \p y coordinates are used to ...
\endverbatim
This will result in the following text:<br><br>
... the \p x and \p y coordinates are used to ...
Equivalent to \ref cmdc "\\cmdc"
<hr>
\subsection cmdverbatim \verbatim
...
...
doc/config.doc
View file @
422c14b6
...
...
@@ -21,8 +21,7 @@
\
subsection
config_format
Format
A
configuration
file
is
a
free
-
form
ASCII
text
file
with
a
structure
that
is
similar
to
that
of
a
Makefile
.
It
is
parsed
by
a
recursive
-
descent
parser
that
is
built
into
\
c
doxygen
.
is
similar
to
that
of
a
Makefile
.
It
is
parsed
by
\
c
doxygen
.
The
file
may
contain
tabs
and
newlines
for
formatting
purposes
.
The
statements
in
the
file
are
case
-
sensitive
.
Comments
may
be
placed
anywhere
within
the
file
(
except
within
quotes
).
...
...
@@ -189,7 +188,7 @@ followed by the descriptions of the tags grouped by category.
information
to
generate
all
constant
output
in
the
proper
language
.
The
default
language
is
English
,
other
supported
languages
are
:
Dutch
,
French
,
Italian
,
Czech
,
Swedish
,
German
,
Finnish
,
Japanese
,
Spanish
,
Russian
,
Croatian
and
Polish
.
Spanish
,
Russian
,
Croatian
,
Polish
and
Portuguese
.
\
anchor
cfg_disable_index
<
dt
>\
c
DISABLE_INDEX
<
dd
>
...
...
@@ -423,7 +422,8 @@ followed by the descriptions of the tags grouped by category.
<
dt
>\
c
WARN_FORMAT
<
dd
>
\
addindex
WARN_FORMAT
The
WARN_FORMAT
tag
determines
the
format
of
the
warning
messages
that
doxygen
can
produce
.
The
string
should
contain
the
$
file
,
$
line
,
and
$
text
doxygen
can
produce
.
The
string
should
contain
the
<
code
>\$
file
</
code
>,
<
code
>\$
line
</
code
>,
and
<
code
>\$
text
</
code
>
tags
,
which
will
be
replaced
by
the
file
and
line
number
from
which
the
warning
originated
and
the
warning
text
.
...
...
@@ -559,7 +559,9 @@ followed by the descriptions of the tags grouped by category.
\addindex HTML_HEADER
The \c HTML_HEADER tag can be used to specify a user defined HTML
header file for each generated HTML page. To get valid HTML the header file
should contain at least a \c <HTML> and a \c <BODY> tag. Example:
should contain at least a \c <HTML> and a \c <BODY> tag, but it is
good idea to include the style sheet that is generated by doxygen as well.
Minimal example:
\verbatim
<HTML>
<HEAD>
...
...
@@ -580,12 +582,15 @@ followed by the descriptions of the tags grouped by category.
the version number of doxygen, the project name (see \c PROJECT_NAME), or the
project number (see \c PROJECT_NUMBER).
See also section \ref doxygen_usage for information on how to generate
the default header that doxygen normally uses.
\anchor cfg_html_footer
<dt>\c HTML_FOOTER <dd>
\addindex HTML_FOOTER
The \c HTML_FOOTER tag can be used to specify a user defined HTML footer for
each generated HTML page. To get valid HTML the header file should contain
at least a \c </BODY> and a \c </HTML> tag.
E
xample:
at least a \c </BODY> and a \c </HTML> tag.
A minimal e
xample:
\verbatim
</BODY>
</HTML>
...
...
@@ -601,6 +606,8 @@ followed by the descriptions of the tags grouped by category.
the version number of doxygen, the project name (see \c PROJECT_NAME), or the
project number (see \c PROJECT_NUMBER).
See also section \ref doxygen_usage for information on how to generate
the default footer that doxygen normally uses.
\anchor cfg_html_stylesheet
<dt>\c HTML_STYLESHEET <dd>
...
...
@@ -608,32 +615,10 @@ followed by the descriptions of the tags grouped by category.
The \c HTML_STYLESHEET tag can be used to specify a user defined cascading
style sheet that is used by each HTML page. It can be used to
fine-tune the look of the HTML output. If the tag is left blank doxygen
will generate a default style sheet. Here is the default style sheet
that doxygen normally generates:
will generate a default style sheet.
\verbatim
H1 { text-align: center; }
A.qindex {}
A.qindexRef {}
A.el { text-decoration: none; font-weight: bold }
A.elRef { font-weight: bold }
A.code { text-decoration: none; font-weight: normal; color: #4444ee }
A.codeRef { font-weight: normal; color: #4444ee }
DL.el { margin-left: -1cm }
DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
DIV.in { margin-left: 16 }
DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }
TD.md { background-color: #f2f2ff }
DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight
DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller }
FONT.keyword { color: #008000 }
FONT.keywordtype { color: #604020 }
FONT.keywordflow { color: #e08000 }
FONT.comment { color: #800000 }
FONT.preprocessor { color: #806020 }
FONT.stringliteral { color: #002080 }
FONT.charliteral { color: #008080 }
\endverbatim
See also section \ref doxygen_usage for information on how to generate
the style sheet that doxygen normally uses.
\anchor cfg_html_align_members
<dt>\c HTML_ALIGN_MEMBERS <dd>
...
...
@@ -724,32 +709,11 @@ EXTRA_PACKAGES = times
\
addindex
LATEX_HEADER
The
\
c
LATEX_HEADER
tag
can
be
used
to
specify
a
personal
\
f
$\
mbox
{\
LaTeX
}\
f
$
header
for
the
generated
latex
document
.
The
header
should
contain
everything
until
the
first
chapter
.
If
it
is
left
blank
doxygen
will
generate
a
standard
header
,
which
looks
as
follows
for
the
default
configuration
settings
:
until
the
first
chapter
.
\
verbatim
\
documentclass
[
a4paper
]{
book
}
\
usepackage
{
a4wide
}
\
usepackage
{
makeidx
}
\
usepackage
{
fancyheadings
}
\
usepackage
{
epsfig
}
\
usepackage
{
float
}
\
usepackage
{
doxygen
}
\
makeindex
\
setcounter
{
tocdepth
}{
1
}
\
setlength
{\
footrulewidth
}{
0.4
pt
}
\
begin
{
document
}
\
title
{
Reference
Manual
}
\
author
{
Generated
by
Doxygen
}
\
date
{
Thu
Sep
30
19
:
58
:
32
1999
}
\
maketitle
\
pagenumbering
{
roman
}
\
clearemptydoublepage
\
tableofcontents
\
clearemptydoublepage
\
pagenumbering
{
arabic
}
\
endverbatim
If
it
is
left
blank
doxygen
will
generate
a
standard
header
.
See
section
\
ref
doxygen_usage
for
information
on
how
to
let
doxygen
write
the
default
header
to
a
separate
file
.
\
par
Note
:
Only
use
a
user
defined
header
if
you
know
what
you
are
doing
!
...
...
@@ -790,8 +754,7 @@ EXTRA_PACKAGES = times
<
dt
>\
c
GENERATE_RTF
<
dd
>
\
addindex
GENERATE_RTF
If
the
\
c
GENERATE_RTF
tag
is
set
to
\
c
YES
Doxygen
will
generate
RTF
output
.
For
now
this
is
experimental
and
is
disabled
by
default
.
The
RTF
output
is
optimised
for
Word
97
and
may
not
look
too
pretty
with
The
RTF
output
is
optimised
for
Word
97
and
may
not
look
too
pretty
with
other
readers
/
editors
.
\
anchor
cfg_rtf_output
...
...
@@ -820,89 +783,15 @@ EXTRA_PACKAGES = times
\
par
note
:
wordpad
(
write
)
and
others
do
not
support
links
.
\
anchor
cfg_rtf_stylesheet_file
RTF_STYLESHEET_FILE
\
anchor
cfg_rtf_stylesheet_file
<
dt
>\
c
RTF_STYLESHEET_FILE
<
dd
>
\
addindex
RTF_STYLESHEET_FILE
Load
stylesheet
definitions
from
file
.
Syntax
is
similar
to
doxygen
's
config file, i.e. a series of assigments. You only have to provide
replacements, missing definitions are set to their default value.
\htmlonly
Here are the default settings:
<font size=2><pre>Reset = \\pard\\plain
Heading1 = \\s1\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs36\\kerning36\\cgrid
Heading2 = \\s2\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs28\\kerning28\\cgrid
Heading3 = \\s3\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\cgrid
Heading4 = \\s4\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid
Title = \\s15\\qc\\sb240\\sa60\\widctlpar\\outlinelevel0\\adjustright \\b\\f1\\fs32\\kerning28\\cgrid
SubTitle = \\s16\\qc\\sa60\\widctlpar\\outlinelevel1\\adjustright \\f1\\cgrid
BodyText = \\s17\\sa60\\sb30\\widctlpar\\qj \\fs22\\cgrid
DenseText = \\s18\\widctlpar\\fs22\\cgrid
Header = \\s28\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\adjustright \\fs20\\cgrid
Footer = \\s29\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\qr\\adjustright \\fs20\\cgrid
GroupHeader = \\s30\\li360\\sa60\\sb120\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid
CodeExample0 = \\s40\\li0\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
CodeExample1 = \\s41\\li360\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
CodeExample2 = \\s42\\li720\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
CodeExample3 = \\s43\\li1080\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
CodeExample4 = \\s44\\li1440\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
CodeExample5 = \\s45\\li1800\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
CodeExample6 = \\s46\\li2160\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
CodeExample7 = \\s47\\li2520\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
CodeExample8 = \\s48\\li2880\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
CodeExample9 = \\s49\\li3240\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid
ListContinue0 = \\s50\\li0\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
ListContinue1 = \\s51\\li360\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
ListContinue2 = \\s52\\li720\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
ListContinue3 = \\s53\\li1080\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
ListContinue4 = \\s54\\li1440\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
ListContinue5 = \\s55\\li1800\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
ListContinue6 = \\s56\\li2160\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
ListContinue7 = \\s57\\li2520\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
ListContinue8 = \\s58\\li2880\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
ListContinue9 = \\s59\\li3240\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid
DescContinue0 = \\s60\\li0\\widctlpar\\ql\\adjustright \\fs20\\cgrid
DescContinue1 = \\s61\\li360\\widctlpar\\ql\\adjustright \\fs20\\cgrid
DescContinue2 = \\s62\\li720\\widctlpar\\ql\\adjustright \\fs20\\cgrid
DescContinue3 = \\s63\\li1080\\widctlpar\\ql\\adjustright \\fs20\\cgrid
DescContinue4 = \\s64\\li1440\\widctlpar\\ql\\adjustright \\fs20\\cgrid
DescContinue5 = \\s65\\li1800\\widctlpar\\ql\\adjustright \\fs20\\cgrid
DescContinue6 = \\s66\\li2160\\widctlpar\\ql\\adjustright \\fs20\\cgrid
DescContinue7 = \\s67\\li2520\\widctlpar\\ql\\adjustright \\fs20\\cgrid
DescContinue8 = \\s68\\li2880\\widctlpar\\ql\\adjustright \\fs20\\cgrid
DescContinue9 = \\s69\\li3240\\widctlpar\\ql\\adjustright \\fs20\\cgrid
LatexTOC0 = \\s70\\li0\\sa30\\sb30\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
LatexTOC1 = \\s71\\li360\\sa27\\sb27\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
LatexTOC2 = \\s72\\li720\\sa24\\sb24\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
LatexTOC3 = \\s73\\li1080\\sa21\\sb21\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
LatexTOC4 = \\s74\\li1440\\sa18\\sb18\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
LatexTOC5 = \\s75\\li1800\\sa15\\sb15\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
LatexTOC6 = \\s76\\li2160\\sa12\\sb12\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
LatexTOC7 = \\s77\\li2520\\sa9\\sb9\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
LatexTOC8 = \\s78\\li2880\\sa6\\sb6\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
LatexTOC9 = \\s79\\li3240\\sa3\\sb3\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid
ListBullet0 = \\s80\\fi-360\\li360\\widctlpar\\jclisttab\\tx360{\\*\\pn \\pnlvlbody\\ilvl0\\ls1\\pnrnot0\\pndec }\\ls1\\adjustright \\fs20\\cgrid
ListBullet1 = \\s81\\fi-360\\li720\\widctlpar\\jclisttab\\tx720{\\*\\pn \\pnlvlbody\\ilvl0\\ls2\\pnrnot0\\pndec }\\ls2\\adjustright \\fs20\\cgrid
ListBullet2 = \\s82\\fi-360\\li1080\\widctlpar\\jclisttab\\tx1080{\\*\\pn \\pnlvlbody\\ilvl0\\ls3\\pnrnot0\\pndec }\\ls3\\adjustright \\fs20\\cgrid
ListBullet3 = \\s83\\fi-360\\li1440\\widctlpar\\jclisttab\\tx1440{\\*\\pn \\pnlvlbody\\ilvl0\\ls4\\pnrnot0\\pndec }\\ls4\\adjustright \\fs20\\cgrid
ListBullet4 = \\s84\\fi-360\\li1800\\widctlpar\\jclisttab\\tx1800{\\*\\pn \\pnlvlbody\\ilvl0\\ls5\\pnrnot0\\pndec }\\ls5\\adjustright \\fs20\\cgrid
ListBullet5 = \\s85\\fi-360\\li2160\\widctlpar\\jclisttab\\tx2160{\\*\\pn \\pnlvlbody\\ilvl0\\ls6\\pnrnot0\\pndec }\\ls6\\adjustright \\fs20\\cgrid
ListBullet6 = \\s86\\fi-360\\li2520\\widctlpar\\jclisttab\\tx2520{\\*\\pn \\pnlvlbody\\ilvl0\\ls7\\pnrnot0\\pndec }\\ls7\\adjustright \\fs20\\cgrid
ListBullet7 = \\s87\\fi-360\\li2880\\widctlpar\\jclisttab\\tx2880{\\*\\pn \\pnlvlbody\\ilvl0\\ls8\\pnrnot0\\pndec }\\ls8\\adjustright \\fs20\\cgrid
ListBullet8 = \\s88\\fi-360\\li3240\\widctlpar\\jclisttab\\tx3240{\\*\\pn \\pnlvlbody\\ilvl0\\ls9\\pnrnot0\\pndec }\\ls9\\adjustright \\fs20\\cgrid
ListBullet9 = \\s89\\fi-360\\li3600\\widctlpar\\jclisttab\\tx3600{\\*\\pn \\pnlvlbody\\ilvl0\\ls10\\pnrnot0\\pndec }\\ls10\\adjustright \\fs20\\cgrid
ListEnum0 = \\s90\\fi-360\\li360\\widctlpar\\fs20\\cgrid
ListEnum1 = \\s91\\fi-360\\li720\\widctlpar\\fs20\\cgrid
ListEnum2 = \\s92\\fi-360\\li1080\\widctlpar\\fs20\\cgrid
ListEnum3 = \\s93\\fi-360\\li1440\\widctlpar\\fs20\\cgrid
ListEnum4 = \\s94\\fi-360\\li1800\\widctlpar\\fs20\\cgrid
ListEnum4 = \\s95\\fi-360\\li2160\\widctlpar\\fs20\\cgrid
ListEnum5 = \\s96\\fi-360\\li2520\\widctlpar\\fs20\\cgrid
ListEnum6 = \\s97\\fi-360\\li2880\\widctlpar\\fs20\\cgrid
ListEnum7 = \\s98\\fi-360\\li3240\\widctlpar\\fs20\\cgrid
ListEnum8 = \\s99\\fi-360\\li3600\\widctlpar\\fs20\\cgrid
</pre></font>
\endhtmlonly
See also section \ref doxygen_usage for information on how to generate
the default style sheet that doxygen normally uses.
</dl>
...
...
@@ -1247,6 +1136,35 @@ INCLUDE_PATH = $(QTDIR)/include
RECURSIVE
=
YES
\
endverbatim
For
the
Qt
-
2.1
sources
I
recommand
to
use
the
following
settings
:
\
verbatim
PROJECT_NAME
=
Qt
PROJECT_NUMBER
=
2.1
HIDE_UNDOC_MEMBERS
=
YES
HIDE_UNDOC_CLASSES
=
YES
SOURCE_BROWSER
=
YES
INPUT
=
$(
QTDIR
)/
src
FILE_PATTERNS
=
*.
cpp
*.
h
q
*.
doc
RECURSIVE
=
YES
EXCLUDE_PATTERNS
=
*
codec
.
cpp
moc_
*
*/
compat
/*
*/
3
rdparty
/*
ALPHABETICAL_INDEX
=
YES
COLS_IN_ALPHA_INDEX
=
3
IGNORE_PREFIX
=
Q
ENABLE_PREPROCESSING
=
YES
MACRO_EXPANSION
=
YES
INCLUDE_PATH
=
$(
QTDIR
)/
include
PREDEFINED
=
Q_PROPERTY
(
x
)=
\
Q_OVERRIDE
(
x
)=
\
Q_EXPORT
=
\
Q_ENUMS
(
x
)=
\
"QT_STATIC_CONST=static const "
\
_WS_X11_
\
INCLUDE_MENUITEM_DEF
EXPAND_ONLY_PREDEF
=
YES
EXPAND_AS_DEFINED
=
Q_OBJECT_FAKE
Q_OBJECT
ACTIVATE_SIGNAL_WITH_PARAM
\
Q_VARIANT_AS
\
endverbatim
Here
Doxygen
's preprocessor is used to substitute some
macro names that are normally substituted by the C preprocessor,
but without doing full macro expansion.
...
...
doc/doxygen_usage.doc
View file @
422c14b6
...
...
@@ -17,16 +17,17 @@
/*! \page doxygen_usage Doxygen usage
Doxygen is a command line based utility. Calling \c doxygen with the
\c -
h
option at the command line will give you a brief description of the
\c -
-help
option at the command line will give you a brief description of the
usage of the program.
All options consist of a leading character <tt>-</tt>,
followed by one character and o
ptionally an argument
.
followed by one character and o
ne or more arguments depending on the option
.
To generate a class browser you typically need to follow these steps:
To generate a manual for your project you typically
need to follow these steps:
<ol>
<li> You document your source code with
special documentation blocks.
special documentation blocks
(see section \ref specialblock)
.
<li> You generate a configuration file (see section \ref config) by
calling doxygen with the \c -g option:
\verbatim
...
...
@@ -42,12 +43,50 @@ doxygen <config_file>
\endverbatim
</ol>
If you have a configuration file generated with an older version of
doxygen that you can upgrade it to the current version by running doxygen
with the -u option.
\verbatim
doxygen -u <config_file>
\endverbatim
All configuration settings in the orginal configuration file will be copied
to the new configuration file. Any new options will have their default value.
Note that comments that you may have added in the original configuration file
will be lost.
If you want to fine-tune the way the output looks, doxygen allows you
generate default style sheet, header, and footer files that you can edit
afterwards:
<ul>
<li>For HTML output, you can generate the default header file
(see \ref cfg_html_header "HTML_HEADER"), the default footer
(see \ref cfg_html_footer "HTML_FOOTER"), and the default style
sheet (see \ref cfg_html_stylesheet "HTML_STYLESHEET"), using the
following command:
\verbatim
doxygen -w html header.html footer.html stylesheet.css
\endverbatim
<li>For LaTeX output, you can generate the first part of \c refman.tex
(see \ref cfg_latex_header "LATEX_HEADER") and the style sheet included
by that header (normally <code>doxygen.sty</code>), using:
\verbatim
doxygen -w latex header.tex doxygen.sty
\endverbatim
<li>For RTF output, you can generate the default style sheet file (see
\ref cfg_rtf_stylesheet_file "RTF_STYLESHEET_FILE") using:
\verbatim
doxygen -w rtf rtfstyle.cfg
\endverbatim
</ul>
<b>Note:</b><br>
<ul>
<li> If you do not want the description for each item in the configuration
file then you can use the optional \c -s option.
Try to use this option if you send me a configuration file as part of
a bug report!
<li> If you do not want documentation for each item inside the configuration
file then you can use the optional \c -s option. This can use be
used in combination with the \c -u option, to add or strip the
documentation from an existing configuration file.
Please use the \c -s this option if you send me a configuration file
as part of a bug report!
<li> To make doxygen read/write to standard input/output instead of from/to
a file, use \c - for the file name.
</ul>
...
...
doc/doxywizard.gif
0 → 100644
View file @
422c14b6
18.5 KB
doc/doxywizard_usage.doc
0 → 100644
View file @
422c14b6
/******************************************************************************
*
*
*
* Copyright (C) 1997-2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
/*! \page doxywizard_usage Doxywizard usage
Doxywizard is a GUI front-end for creating and editing
configuration files that are used by doxygen.
Doxywizard consists of a single executable that, when started,
pops up a window.
The main window has a number of tab field, one
for each section in the configuration file. Each tab-field
contains a number of lines, one for each configuration option in
that section.
The kind of input widget depends on the type of the configuration option.
<ul>
<li>For each boolean option (those options that are answered with YES or
NO in the configuration file) there is a check-box.
<li>For items taking one of a fixed set of values (like
\ref cfg_output_language "OUTPUT_LANGUAGE") a combo box is used.
<li>For items taking an integer value from a range, a spinbox is used.
<li>For free form string-type options there is a one line edit field
<li>For options taking a lists of strings, a one line edit field is
available, with a `+' button to add this string to the list and
a `-' button to remove the selected string from the list. There
is also a button with a circular "refresh" arrow that, when pressed,
replaces the selected item in the list with the string entered in the
edit field.
<li>For file and folder entries, there are special buttons
that start a file dialog.
</ul>
\image html doxywizard.gif
*/
doc/history.doc
View file @
422c14b6
...
...
@@ -38,7 +38,7 @@
parser and GUI front-end from source templates.
<li>Better support for the using keyword.
<li>New transparent mini logo that is put in the footer of all HTML pages.
<li>Internationalization support for the Polish and Croatian language.
<li>Internationalization support for the Polish
, Portuguese
and Croatian language.
<li>Todo list support.
<li>If the source browser is enabled, for a function, a list of function whose
implementation calls that function, is generated.
...
...
doc/index.doc
View file @
422c14b6
...
...
@@ -15,6 +15,7 @@
*
*/
/*! \page index
\if logo_on
<center>
\htmlonly
<img align=center lowsrc="doxygen_logo_low.gif" src="doxygen_logo.gif"
...
...
@@ -22,6 +23,7 @@
Version: $(VERSION)
\endhtmlonly
</center>
\endif
<h2>Doxygen license</h2>
\addindex license
...
...
@@ -105,6 +107,7 @@ The second part forms a reference manual:
<li>Section \ref doxygen_usage shows how to use the \c doxygen program.
<li>Section \ref doxytag_usage shows how to use the \c doxytag program.
<li>Section \ref doxysearch_usage shows how to use the \c doxysearch program.
<li>Section \ref doxywizard_usage shows how to use the \c doxywizard program.
<li>Section \ref installdox_usage shows how to use the \c installdox
script that is generated by Doxygen if you use tag files.
<li>Section \ref output shows how to generate the various output formats
...
...
doc/install.doc
View file @
422c14b6
...
...
@@ -92,7 +92,11 @@ Compilation is now done by performing the following steps:
If you have Qt-2.1.x installed and want to build the GUI front-end, you
should run the configure script with the <code>--with-doxywizard</code>
option.
option:
\verbatim
configure --with-doxywizard
\endverbatim
For an overview of other configuration options use
...
...
@@ -216,6 +220,9 @@ If you are compiling for HP-UX with aCC and you get this error:
#include <alloca.h>
\endverbatim
If that does not help, try removing <code>ce_parse.cpp</code> and let
bison rebuilt it (this worked for me).
If you are compiling for Digital Unix, the same problem can be solved
(according to Barnard Schmallhof) by replacing the following in
ce_parse.cpp:
...
...
@@ -256,7 +263,50 @@ ce_parse.cpp:
<b>Sun compiler problems</b>
I tried compiling doxygen only with Sun's C++ WorkShop Compiler
version 5.0 (I used <code>./configure --platform solaris-cc</code>)
Qt-2.x.x is required for this compiler (Qt-1.44 has problems with the bool
type).
Compiling the \c doxygen binary went ok, but while linking <code>doxytag</code> I got a
lot of link errors, like these:
\verbatim
QList<PageInfo>::__vtbl /home/dimitri/doxygen/objects/SunWS_cache/CC_obj_6/6c3eO4IogMT2vrlGCQUQ.o
[Hint: try checking whether the first non-inlined, non-pure virtual function of class QList<PageInfo> is defined]
\endverbatim
These are generated because the compiler is confused about the object sharing
between \c doxygen and \c doxytag. To compile \c doxytag and \c doxysearch
anyway do:
\verbatim
rm -rf objects
mkdir objects
cd src
gmake -f Makefile.doxytag
gmake -f Makefile.doxysearch
\endverbatim
when configuring with <code>--static</code> I got:
\verbatim
Undefined first referenced
symbol in file
dlclose /usr/lib/libc.a(nss_deffinder.o)
dlsym /usr/lib/libc.a(nss_deffinder.o)
dlopen /usr/lib/libc.a(nss_deffinder.o)
\endverbatim
Manually adding <code>-Bdynamic</code> after the target rule in
<code>Makefile.doxygen</code> and <code>Makefile.doxytag</code>
will fix this:
\verbatim
$(TARGET): $(OBJECTS) $(OBJMOC)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) -Bdynamic
\endverbatim
<b>GNU 2.7.2.x compiler problems</b>
...
...
doc/starting.doc
View file @
422c14b6
...
...
@@ -29,6 +29,9 @@ information.
The executable \c doxysearch is only needed if you want to use the search
engine. See section \ref doxysearch_usage for more detailed usage information.
Optionally, the executable \c doxywizard is a GUI front-end for editing
the configuration files that are used by doxygen.
\subsection step1 Step 1: Creating a configuration file
Doxygen uses a configuration file to determine all of its settings.
...
...
@@ -129,14 +132,16 @@ documentation, \c doxygen writes a \c Makefile into the \c latex directory.
By typing \c make in the \c latex directory the dvi file \c refman.dvi
will be generated (provided that you have a make tool called
<code>make</code> ofcourse). This file can then be viewed using \c xdvi or
converted into a postscript file \c refman.ps by typing <code>make ps</code>
(this requires <code>dvips</code>). The Postscript file can be send to a postscript
converted into a postscript file \c refman.ps by
typing <code>make ps</code> (this requires <code>dvips</code>).
To put 2 pages on one physical page use <code>make ps_2on1</code> instead.
The resulting Postscript file can be send to a postscript
printer. If you do not have a postscript printer, you can try to use
ghostscript to convert postscript into something your printer understands.
Conversion to PDF is also possible if you have installed the ghostscript
interpreter; just type <code>make pdf</code>
. To get the best results for
PDF output you should set the \ref cfg_pdf_hyperlinks "PDF_HYPERLINKS"
tag to \c YES.
interpreter; just type <code>make pdf</code>
(or <code>make pdf_2on1</code>).
To get the best results for PDF output you should set
t
he \ref cfg_pdf_hyperlinks "PDF_HYPERLINKS" t
ag to \c YES.
The generated man pages can be viewed using the \c man program. You do need
to make sure the man directory is in the man path (see the \c MANPATH
...
...
doc/trouble.doc
View file @
422c14b6
...
...
@@ -80,12 +80,24 @@ know why.
Furthermore, I would appreciate a mail if you have found
a bug, or if you have ideas (or even better some code or a patch)
how to fix existing bugs and limitations.
how to fix existing bugs and limitations. For patches please use
"diff -u"
<h2>How to report a bug</h2>
If you think you have found a bug in doxygen, please report it so I can
fix it.
Always include the following information in your bug report:
- The version of doxygen you are using.
- The name and version number of your operating system
The easiest way for me to solve bugs is if you can send me a small example
demonstrating the problem you have (make sure the example compiles!). It is
usually a good idea to send along the configuation file as well, but please
use doxygen with the <code>-s</code> flag while generating it.
demonstrating the problem you have. Please make sure the example is valid
source code (try compiling it) and if the problem is really captured by
the example.
It is usually a good idea to send along the configuation file as well,
but please use doxygen with the <code>-s</code> flag while generating it.
My e-mail address: <a href="mailto:dimitri@stack.nl">dimitri@stack.nl</a>
*/
...
...
examples/afterdoc.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = afterdoc
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = afterdoc.h
QUIET = YES
examples/author.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = author
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = author.cpp
QUIET = YES
examples/autolink.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = autolink
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = autolink.cpp
QUIET = YES
examples/class.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = class
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = class.h
QUIET = YES
examples/define.cfg
View file @
422c14b6
...
...
@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = define
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = define.h
ENABLE_PREPROCESSING = YES
QUIET = YES
examples/diagrams.cfg
View file @
422c14b6
...
...
@@ -5,6 +5,7 @@ EXTRACT_ALL = YES
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
ENABLE_PREPROCESSING = YES
INPUT = .
FILE_PATTERNS = diagrams_*.h
...
...
examples/enum.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = enum
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = enum.h
QUIET = YES
examples/example.cfg
View file @
422c14b6
...
...
@@ -4,6 +4,7 @@ GENERATE_TAGFILE = example.tag
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = example.cpp
EXAMPLE_PATH = example_test.cpp
QUIET = YES
examples/example.tag
View file @
422c14b6
>Test: "class_
T
est.html"
>Test: "class_
t
est.html"
example a0 "()"
examples/file.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = file
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = file.h
QUIET = YES
examples/func.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = func
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = func.h
QUIET = YES
examples/group.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = group
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = group.cpp
QUIET = YES
examples/include.cfg
View file @
422c14b6
...
...
@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = include
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = include.cpp
EXAMPLE_PATH = example_test.cpp
QUIET = YES
examples/jdstyle.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = jdstyle
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = jdstyle.cpp
QUIET = YES
examples/memgrp.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = memgrp
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = memgrp.cpp
QUIET = YES
examples/overload.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,7 @@ OUTPUT_DIRECTORY = overload
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
SORT_MEMBER_DOCS = NO
INPUT = overload.cpp
QUIET = YES
examples/page.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = page
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = page.doc
QUIET = YES
examples/par.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = par
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = par.cpp
QUIET = YES
examples/qtstyle.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = qtstyle
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = qtstyle.cpp
QUIET = YES
examples/relates.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = relates
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = relates.cpp
QUIET = YES
examples/restypedef.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = restypedef
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = restypedef.cpp
QUIET = YES
examples/structcmd.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = structcmd
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = structcmd.h
QUIET = YES
examples/tag.cfg
View file @
422c14b6
...
...
@@ -3,6 +3,7 @@ OUTPUT_DIRECTORY = tag
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = tag.cpp
TAGFILES = example.tag
PERL_PATH = perl
...
...
examples/templ.cfg
View file @
422c14b6
...
...
@@ -3,5 +3,6 @@ OUTPUT_DIRECTORY = template
GENERATE_LATEX = NO
GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = templ.cpp
QUIET = YES
packages/rpm/doxygen.spec
View file @
422c14b6
Name: doxygen
Version: 1.
1.5-20000716
Version: 1.
2.0
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
...
...
src/classdef.cpp
View file @
422c14b6
...
...
@@ -779,9 +779,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
{
ol
.
pushGeneratorState
();
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
ol
.
writeString
(
"<
font size=2><center
>["
);
ol
.
writeString
(
"<
center><font size=
\"
2
\"
>["
);
ol
.
writeHtmlLink
(
"graph_legend.html"
,
theTranslator
->
trLegend
());
ol
.
writeString
(
"]</
center></font
>"
);
ol
.
writeString
(
"]</
font></center
>"
);
ol
.
popGeneratorState
();
}
ol
.
popGeneratorState
();
...
...
@@ -811,9 +811,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
{
ol
.
pushGeneratorState
();
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
ol
.
writeString
(
"<
font size=2><center
>["
);
ol
.
writeString
(
"<
center><font size=
\"
2
\"
>["
);
ol
.
writeHtmlLink
(
"graph_legend.html"
,
theTranslator
->
trLegend
());
ol
.
writeString
(
"]</
center></font
>"
);
ol
.
writeString
(
"]</
font></center
>"
);
ol
.
popGeneratorState
();
}
ol
.
popGeneratorState
();
...
...
@@ -1123,7 +1123,7 @@ void ClassDef::writeMemberList(OutputList &ol)
while
(
mi
)
{
MemberDef
*
md
=
mi
->
memberDef
;
ClassDef
*
cd
=
md
->
memberClass
();
ClassDef
*
cd
=
md
->
getClassDef
();
// compute the protection level for this member
Protection
protect
=
md
->
protection
();
...
...
@@ -1301,7 +1301,7 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup)
//ol.insertMemberAlign();
//printf("ClassName=`%s' inGroup=%d\n",name().data(),inGroup);
if
(
inGroup
&&
md
&&
md
->
memberClass
()
==
this
)
return
;
if
(
inGroup
&&
md
&&
md
->
getClassDef
()
==
this
)
return
;
switch
(
compType
)
{
...
...
@@ -1447,13 +1447,13 @@ void ClassDef::mergeMembers(/*ClassDef *cd,BaseClassList *bcl*/)
bool
hidden
=
FALSE
;
MemberNameInfoIterator
dstMnii
(
*
dstMni
);
MemberInfo
*
dstMi
;
ClassDef
*
srcCd
=
srcMd
->
memberClass
();
ClassDef
*
srcCd
=
srcMd
->
getClassDef
();
for
(
;
(
dstMi
=
dstMnii
.
current
())
&&
!
found
;
++
dstMnii
)
{
MemberDef
*
dstMd
=
dstMi
->
memberDef
;
if
(
srcMd
!=
dstMd
)
// different members
{
ClassDef
*
dstCd
=
dstMd
->
memberClass
();
ClassDef
*
dstCd
=
dstMd
->
getClassDef
();
//printf("Is %s a base class of %s?\n",srcCd->name(),dstCd->name());
if
(
srcCd
==
dstCd
||
dstCd
->
isBaseClass
(
srcCd
))
// member is in the same or a base class
...
...
@@ -1565,7 +1565,7 @@ void ClassDef::mergeMembers(/*ClassDef *cd,BaseClassList *bcl*/)
Specifier
virt
=
mi
->
virt
;
if
(
mi
->
virt
==
Normal
&&
bcd
->
virt
!=
Normal
)
virt
=
bcd
->
virt
;
MemberInfo
*
newMi
=
new
MemberInfo
(
mi
->
memberDef
,
bcd
->
prot
,
virt
);
//if (mi->memberDef->
memberClass
()!=bClass)
//if (mi->memberDef->
getClassDef
()!=bClass)
newMi
->
scopePath
=
bClass
->
name
()
+
"::"
+
mi
->
scopePath
;
newMi
->
ambigClass
=
mi
->
ambigClass
;
newMi
->
ambiguityResolutionScope
=
mi
->
ambiguityResolutionScope
.
copy
();
...
...
src/classdef.h
View file @
422c14b6
...
...
@@ -102,10 +102,12 @@ class ClassDef : public Definition
ArgumentList
*
outerTemplateArguments
()
const
;
void
setTemplateArguments
(
ArgumentList
*
al
);
//QCString getTemplateNameString();
NamespaceDef
*
getNamespaceDef
()
{
return
nspace
;
}
FileDef
*
getFileDef
()
const
{
return
fileDef
;
}
void
setNamespace
(
NamespaceDef
*
nd
)
{
nspace
=
nd
;
}
NamespaceDef
*
getNamespace
()
{
return
nspace
;
}
void
setFileDef
(
FileDef
*
fd
)
{
fileDef
=
fd
;
}
FileDef
*
getFileDef
()
const
{
return
fileDef
;
}
void
mergeMembers
();
bool
isBaseClass
(
ClassDef
*
bcd
);
void
determineImplUsageRelation
();
...
...
src/code.l
View file @
422c14b6
...
...
@@ -96,6 +96,7 @@ static int g_lastStringContext;
static int g_bracketCount = 0;
static int g_curlyCount = 0;
static int g_sharpCount = 0;
static bool g_insideTemplate = FALSE;
static QCString g_type;
static QCString g_name;
static QCString g_args;
...
...
@@ -254,6 +255,14 @@ static void setClassScope(const QCString &name)
//printf("setClassScope(%s)\n",name.data());
QCString n=name;
n=n.simplifyWhiteSpace();
int ts=n.find('<'); // start of template
int te=n.findRev('>'); // end of template
//printf("ts=%d te=%d\n",ts,te);
if (ts!=-1 && te!=-1 && te>ts)
{
// remove template from scope
n=n.left(ts)+n.right(n.length()-te-1);
}
int index;
if ((index=n.findRev("::"))!=-1)
g_classScope=n.left(index);
...
...
@@ -273,7 +282,7 @@ static void addVariable()
else
{
//printf("adding variable `%s' `%s'\n",g_cvd.type.data(),g_cvd.name.data());
if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
if ((get
Resolved
Class(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
{
g_cvd.classScope=g_classScope;
g_codeVarList.append(new CodeVarDef(g_cvd)); // add it to a list
...
...
@@ -436,11 +445,11 @@ static bool generateClassMemberLink(OutputList &ol,ClassDef *mcd,const char *mem
int mdist=maxInheritanceDepth;
for (;(mmd=mmni.current());++mmni)
{
int m=minClassDistance(mcd,mmd->
memberClass
());
if (m<mdist && mmd->
memberClass
()->isLinkable())
int m=minClassDistance(mcd,mmd->
getClassDef
());
if (m<mdist && mmd->
getClassDef
()->isLinkable())
{
mdist=m;
xcd=mmd->
memberClass
();
xcd=mmd->
getClassDef
();
xmd=mmd;
}
}
...
...
@@ -507,7 +516,9 @@ static void generateMemberLink(OutputList &ol,const char *varName,
}
else
{
//printf("Class not found!\n");
OutputList result(&ol);
//printf("cvd->type=`%s'\n",cvd->type.data());
if (getLink(cvd->type,memName,result))
{
ol+=result;
...
...
@@ -521,19 +532,20 @@ static void generateMemberLink(OutputList &ol,const char *varName,
}
else
{
ClassDef *vcd = getClass(g_classScope);
ClassDef *vcd = get
Resolved
Class(g_classScope);
if (vcd && vcd->isLinkable())
{
//printf("Found class for variable `%s'\n",varName);
MemberName *vmn=memberNameDict[varName];
if (vmn)
{
//printf("There is a variable with name `%s'\n",varName);
MemberNameIterator vmni(*vmn);
MemberDef *vmd;
for (;(vmd=vmni.current());++vmni)
{
if ((vmd->isVariable() || vmd->isFunction()) &&
vmd->
memberClass
()==vcd)
vmd->
getClassDef
()==vcd)
{
//printf("Found variable type=%s\n",vmd->typeString());
ClassDef *mcd=stripClassName(vmd->typeString());
...
...
@@ -552,11 +564,11 @@ static void generateMemberLink(OutputList &ol,const char *varName,
int mdist=maxInheritanceDepth;
for (;(mmd=mmni.current());++mmni)
{
int m=minClassDistance(mcd,mmd->
memberClass
());
if (m<mdist && mmd->
memberClass
()->isLinkable())
int m=minClassDistance(mcd,mmd->
getClassDef
());
if (m<mdist && mmd->
getClassDef
()->isLinkable())
{
mdist=m;
xcd=mmd->
memberClass
();
xcd=mmd->
getClassDef
();
xmd=mmd;
}
}
...
...
@@ -609,6 +621,14 @@ static void generateFunctionLink(OutputList &ol,char *funcName)
{
locScope=locFunc.left(i);
locFunc=locFunc.right(locFunc.length()-i-2);
int ts=locScope.find('<'); // start of template
int te=locScope.findRev('>'); // end of template
//printf("ts=%d te=%d\n",ts,te);
if (ts!=-1 && te!=-1 && te>ts)
{
// remove template from scope
locScope=locScope.left(ts)+locScope.right(locScope.length()-te-1);
}
}
//printf("generateFunctionLink(%s) classScope=%s\n",locFunc.data(),locScope.data());
if (!locScope.isEmpty() && (ccd=g_codeClassDict[locScope]))
...
...
@@ -684,7 +704,9 @@ B [ \t]
BN [ \t\n\r]
ID [a-z_A-Z][a-z_A-Z0-9]*
SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
SCOPEPREFIX {ID}{B}*"::"({B}*{ID}{B}*"::")*
TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">"
SCOPETNAME ((({ID}{TEMPLIST}?){BN}*"::"{BN}*)*)((~{BN}*)?{ID})
SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*"::"{BN}*)+
KEYWORD ("asm"|"auto"|"class"|"const"|"const_cast"|"delete"|"dynamic_cast"|"enum"|"explicit"|"extern"|"false"|"friend"|"inline"|"mutable"|"namespace"|"new"|"operator"|"private"|"protected"|"public"|"register"|"reinterpret_cast"|"sizeof"|"static"|"static_cast"|"struct"|"template"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile")
FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"for"|"goto"|"if"|"return"|"switch"|"throw"|"try"|"while")
TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"|"void"|"wchar_t")
...
...
@@ -720,6 +742,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
codifyLines(yytext);
endFontClass();
//g_code->codify(yytext);
if (!g_insideTemplate)
BEGIN( ClassName );
}
<ReadInclude>[a-z_A-Z0-9.]+(("/"[a-z_A-Z0-9.]+)*)/(">"|"\"") {
...
...
@@ -753,7 +776,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
<SkipCPP>\\\n {
codifyLines(yytext);
}
<SkipCPP>\n
{
<SkipCPP>\n
/.*\n
{
codifyLines(yytext);
endFontClass();
BEGIN( Body ) ;
...
...
@@ -852,7 +875,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
}
<Body>{SCOPEPREFIX}
*{B}*
"operator"{B}*"()"{B}*/"(" {
<Body>{SCOPEPREFIX}
?
"operator"{B}*"()"{B}*/"(" {
addType();
generateFunctionLink(*g_code,yytext);
g_bracketCount=1;
...
...
@@ -860,7 +883,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_name+=yytext;
BEGIN( FuncCall );
}
<Body>{SCOPEPREFIX}
*{B}*
"operator"{B}*[^\(\n]+/"(" {
<Body>{SCOPEPREFIX}
?
"operator"{B}*[^\(\n]+/"(" {
addType();
generateFunctionLink(*g_code,yytext);
g_bracketCount=1;
...
...
@@ -868,6 +891,13 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_name+=yytext;
BEGIN( FuncCall );
}
<Body>"template"/([^a-zA-Z0-9]) {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
g_insideTemplate=TRUE;
g_sharpCount=0;
}
<Body>{KEYWORD}/([^a-z_A-Z0-9]) {
startFontClass("keyword");
codifyLines(yytext);
...
...
@@ -918,13 +948,15 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
addType();
g_name+=yytext;
}
<Body>{SCOPENAME}{B}*"<"[^\"\}\{\(\)\/\n\>]*">"/{B}* {
/*
<Body>{SCOPETNAME}/{B}* {
int i;
generateClassLink(*g_code,yytext,&i);
addType();
QCString text=yytext;
g_name+=text.left(i);
}
*/
<Body>{SCOPENAME}/{B}* { // p->func()
generateClassLink(*g_code,yytext);
addType();
...
...
@@ -944,7 +976,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
addType();
g_name+=varname;
}
<Body>{SCOPE
NAME}/{B}*"(" { // func1()->func2
()
<Body>{SCOPE
TNAME}/{B}*"(" { // a() or c::a() or t<A,B>::a
()
addType();
generateFunctionLink(*g_code,yytext);
g_bracketCount=1;
...
...
@@ -976,6 +1008,23 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_code->codify(yytext);
g_name.resize(0);g_type.resize(0);
}
<Body>"<" {
if (g_insideTemplate)
{
g_sharpCount++;
}
g_code->codify(yytext);
}
<Body>">" {
if (g_insideTemplate)
{
if (--g_sharpCount<=0)
{
g_insideTemplate=FALSE;
}
}
g_code->codify(yytext);
}
<Body,MemberCall,MemberCall2,FuncCall>"'"((\\0[Xx0-9]+)|(\\.)|(.))"'" {
startFontClass("charliteral");
g_code->codify(yytext);
...
...
@@ -986,7 +1035,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_code->codify(yytext);
BEGIN( MemberCall );
}
<MemberCall>{SCOPENAME}/{B}*"(" {
<MemberCall>{SCOPE
T
NAME}/{B}*"(" {
if (!g_name.isEmpty())
{
generateMemberLink(*g_code,g_name,yytext);
...
...
@@ -1272,8 +1321,12 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
BEGIN(RemoveSpecialCComment);
}
else
{
// check is to prevent getting stuck in skipping C++ comments
if (YY_START != SkipCxxComment)
{
g_lastCContext = YY_START ;
}
startFontClass("comment");
g_code->codify(yytext);
BEGIN(SkipComment);
...
...
@@ -1335,8 +1388,12 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
BEGIN(RemoveSpecialCComment);
}
else
{
// check is to prevent getting stuck in skipping C++ comments
if (YY_START != SkipCxxComment)
{
g_lastCContext = YY_START ;
}
startFontClass("comment");
g_code->codify(yytext);
BEGIN(SkipComment);
...
...
@@ -1349,8 +1406,12 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
BEGIN(RemoveSpecialCComment);
}
else
{
// check is to prevent getting stuck in skipping C++ comments
if (YY_START != SkipCxxComment)
{
g_lastCContext = YY_START ;
}
startFontClass("comment");
g_code->codify(yytext);
BEGIN(SkipComment);
...
...
@@ -1366,7 +1427,11 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
<*>"/*" {
startFontClass("comment");
g_code->codify(yytext);
// check is to prevent getting stuck in skipping C++ comments
if (YY_START != SkipCxxComment)
{
g_lastCContext = YY_START ;
}
BEGIN( SkipComment ) ;
}
<*>"//" {
...
...
@@ -1430,6 +1495,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
g_bodyCurlyCount = 0;
g_bracketCount = 0;
g_sharpCount = 0;
g_insideTemplate = FALSE;
g_classVar = 0;
g_classScope = className;
g_exampleBlock = exBlock;
...
...
src/definition.cpp
View file @
422c14b6
...
...
@@ -357,7 +357,7 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
{
QCString
scope
=
md
->
getScopeString
();
QCString
name
=
md
->
name
();
//printf("class=%p scope=%s scopeName=%s\n",md->
memberClass
(),scope.data(),scopeName);
//printf("class=%p scope=%s scopeName=%s\n",md->
getClassDef
(),scope.data(),scopeName);
if
(
!
scope
.
isEmpty
()
&&
scope
!=
scopeName
)
{
name
.
prepend
(
scope
+
"::"
);
...
...
src/dot.cpp
View file @
422c14b6
...
...
@@ -1104,7 +1104,20 @@ void DotClassGraph::writeGraph(QTextStream &out,
return
;
}
out
<<
"<p><center><img src=
\"
"
<<
baseName
<<
".gif
\"
border=
\"
0
\"
usemap=
\"
#"
<<
m_startNode
->
m_label
<<
"_"
<<
mapName
<<
"
\"
></center>"
<<
endl
;
<<
m_startNode
->
m_label
<<
"_"
<<
mapName
<<
"
\"
alt=
\"
"
;
switch
(
m_graphType
)
{
case
Implementation
:
out
<<
"Collaboration graph"
;
break
;
case
Interface
:
out
<<
"Interface dependency graph"
;
break
;
case
Inheritance
:
out
<<
"Inheritance graph"
;
break
;
}
out
<<
"
\"
></center>"
<<
endl
;
out
<<
"<map name=
\"
"
<<
m_startNode
->
m_label
<<
"_"
<<
mapName
<<
"
\"
>"
<<
endl
;
convertMapFile
(
out
,
baseName
+
".map"
);
out
<<
"</map><p>"
<<
endl
;
...
...
@@ -1140,7 +1153,7 @@ void DotClassGraph::writeGraph(QTextStream &out,
"
\\
end{center}
\n
"
"
\\
end{figure}
\n
"
;
}
//
thisDir.remove(baseName+".dot");
thisDir
.
remove
(
baseName
+
".dot"
);
QDir
::
setCurrent
(
oldDir
);
}
...
...
@@ -1280,7 +1293,9 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
}
out
<<
"<p><center><img src=
\"
"
<<
baseName
<<
".gif
\"
border=
\"
0
\"
usemap=
\"
#"
<<
mapName
<<
"_map
\"
>"
;
<<
mapName
<<
"_map
\"
alt=
\"
"
;
if
(
m_inverse
)
out
<<
"Included by dependency graph"
;
else
out
<<
"Include dependency graph"
;
out
<<
"
\"
>"
;
out
<<
"</center>"
<<
endl
;
out
<<
"<map name=
\"
"
<<
mapName
<<
"_map
\"
>"
<<
endl
;
convertMapFile
(
out
,
baseName
+
".map"
);
...
...
src/doxygen.cpp
View file @
422c14b6
...
...
@@ -952,7 +952,7 @@ static MemberDef *addVariableToClass(
MemberDef
*
md
=
mn
->
first
();
while
(
md
)
{
if
(
md
->
memberClass
()
==
cd
&&
root
->
type
==
md
->
typeString
())
if
(
md
->
getClassDef
()
==
cd
&&
root
->
type
==
md
->
typeString
())
// member already in the scope
{
addMemberDocs
(
root
,
md
,
def
,
0
,
FALSE
);
...
...
@@ -1085,7 +1085,7 @@ static MemberDef *addVariableToFile(
{
nd
=
namespaceDict
[
nscope
];
}
if
(
nd
==
0
||
md
->
getNamespace
()
==
nd
)
if
(
nd
==
0
||
md
->
getNamespace
Def
()
==
nd
)
// variable already in the scope
{
addMemberDocs
(
root
,
md
,
def
,
0
,
FALSE
);
...
...
@@ -1352,8 +1352,9 @@ static void buildMemberList(Entry *root)
);
bool
isFriend
=
root
->
type
.
find
(
"friend "
)
!=-
1
;
QCString
rname
=
removeRedundantWhiteSpace
(
root
->
name
);
if
(
!
r
oot
->
name
.
isEmpty
())
if
(
!
rname
.
isEmpty
())
{
ClassDef
*
cd
=
0
;
...
...
@@ -1365,18 +1366,18 @@ static void buildMemberList(Entry *root)
QCString
scope
=
stripAnnonymousNamespaceScope
(
root
->
parent
->
name
.
copy
());
bool
isMember
=
FALSE
;
int
memIndex
=
r
oot
->
name
.
find
(
"::"
);
int
memIndex
=
rname
.
find
(
"::"
);
if
(
memIndex
!=-
1
)
{
int
ts
=
r
oot
->
name
.
find
(
'<'
);
int
te
=
r
oot
->
name
.
find
(
'>'
);
int
ts
=
rname
.
find
(
'<'
);
int
te
=
rname
.
find
(
'>'
);
if
(
ts
==-
1
||
te
==-
1
)
{
isMember
=
TRUE
;
}
else
{
isMember
=
memIndex
<
ts
&&
memIndex
<
te
;
isMember
=
memIndex
<
ts
||
memIndex
>
te
;
}
}
...
...
@@ -1398,7 +1399,7 @@ static void buildMemberList(Entry *root)
root
->
type
=
root
->
type
.
left
(
i
+
l
);
}
QCString
name
=
removeRedundantWhiteSpace
(
r
oot
->
name
);
QCString
name
=
removeRedundantWhiteSpace
(
rname
);
if
(
name
.
left
(
2
)
==
"::"
)
name
=
name
.
right
(
name
.
length
()
-
2
);
MemberDef
::
MemberType
mtype
;
...
...
@@ -1417,7 +1418,7 @@ static void buildMemberList(Entry *root)
//if (Config::includeSourceFlag && !root->body.isEmpty())
//{
// printf("Function: %s\n-----------------\n%s\n------------------\n",
// r
oot->
name.data(),root->body.data());
// rname.data(),root->body.data());
//}
// new member function, signal or slot.
...
...
@@ -1500,7 +1501,7 @@ static void buildMemberList(Entry *root)
" def=`%s'
\n
"
,
root
->
type
.
data
(),
root
->
parent
->
name
.
data
(),
r
oot
->
name
.
data
(),
rname
.
data
(),
root
->
args
.
data
(),
root
->
proto
,
def
.
data
()
...
...
@@ -1532,7 +1533,7 @@ static void buildMemberList(Entry *root)
!
(
root
->
parent
->
section
&
Entry
::
COMPOUND_MASK
)
&&
!
isMember
&&
//r
oot->
name.find("::")==-1 && // TODO: remove this check
//rname.find("::")==-1 && // TODO: remove this check
// // it breaks cases like
// // func<A::B>(), but it is needed
// // for detect that A::func() is a member
...
...
@@ -1550,23 +1551,37 @@ static void buildMemberList(Entry *root)
bool
found
=
FALSE
;
MemberName
*
mn
;
//MemberDef *fmd;
if
((
mn
=
functionNameDict
[
r
oot
->
name
]))
if
((
mn
=
functionNameDict
[
rname
]))
{
//printf("--> function %s already found!\n",r
oot->
name.data());
//printf("--> function %s already found!\n",rname.data());
MemberDef
*
md
=
mn
->
first
();
while
(
md
&&
!
found
)
{
NamespaceDef
*
nd
=
md
->
getNamespace
();
NamespaceDef
*
nd
=
md
->
getNamespaceDef
();
NamespaceDef
*
rnd
=
0
;
if
(
!
root
->
parent
->
name
.
isEmpty
())
{
rnd
=
namespaceDict
[
root
->
parent
->
name
];
}
FileDef
*
fd
=
md
->
getFileDef
();
QCString
nsName
=
nd
?
nd
->
name
().
data
()
:
""
;
//printf("namespace `%s'\n",nsName.data());
QCString
nsName
,
rnsName
;
if
(
nd
)
nsName
=
nd
->
name
().
copy
();
if
(
rnd
)
rnsName
=
rnd
->
name
().
copy
();
//printf("namespace `%s' `%s'\n",nsName.data(),rnsName.data());
if
(
matchArguments
(
md
->
argumentList
(),
root
->
argList
,
0
,
nsName
)
)
{
// function already found in the same file, one is probably
// a prototype.
found
=
nd
||
fd
->
absFilePath
()
==
root
->
fileName
;
// see if we need to create a new member
found
=
nsName
==
rnsName
&&
// members are in the same namespace
((
fd
!=
0
&&
// no external reference
fd
->
absFilePath
()
==
root
->
fileName
// prototype in the same file
)
||
md
->
getGroupDef
()
!=
0
// member is part of a group
);
// otherwise, allow a duplicate global member with the same argument list
// merge members documentation and properties
mergeArguments
(
root
->
argList
,
md
->
argumentList
());
if
(
!
md
->
documentation
()
&&
!
root
->
doc
.
isEmpty
())
{
...
...
@@ -1590,10 +1605,10 @@ static void buildMemberList(Entry *root)
if
(
!
found
)
/* global function is unique with respect to the file */
{
//printf("New function type=`%s' name=`%s' args=`%s' bodyLine=%d\n",
// root->type.data(),r
oot->
name.data(),root->args.data(),root->bodyLine);
// root->type.data(),rname.data(),root->args.data(),root->bodyLine);
// new global function
QCString
name
=
removeRedundantWhiteSpace
(
r
oot
->
name
);
QCString
name
=
removeRedundantWhiteSpace
(
rname
);
MemberDef
*
md
=
new
MemberDef
(
root
->
fileName
,
root
->
startLine
,
root
->
type
,
name
,
root
->
args
,
root
->
exception
,
...
...
@@ -1641,7 +1656,7 @@ static void buildMemberList(Entry *root)
" def=`%s'
\n
"
,
root
->
type
.
data
(),
root
->
parent
->
name
.
data
(),
r
oot
->
name
.
data
(),
rname
.
data
(),
root
->
args
.
data
(),
root
->
proto
,
def
.
data
()
...
...
@@ -1705,10 +1720,10 @@ static void buildMemberList(Entry *root)
}
//printf("unrelated function %d `%s' `%s' `%s'\n",
// root->parent->section,root->type.data(),r
oot->
name.data(),root->args.data());
// root->parent->section,root->type.data(),rname.data(),root->args.data());
}
}
else
if
(
r
oot
->
name
.
isEmpty
())
else
if
(
rname
.
isEmpty
())
{
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: Illegal member name found."
...
...
@@ -1748,11 +1763,11 @@ static void findFriends()
//printf("Checking for matching arguments
// mmd->isRelated()=%d mmd->isFriend()=%d mmd->isFunction()=%d\n",
// mmd->isRelated(),mmd->isFriend(),mmd->isFunction());
NamespaceDef
*
nd
=
mmd
->
getNamespace
();
NamespaceDef
*
nd
=
mmd
->
getNamespace
Def
();
if
((
mmd
->
isFriend
()
||
(
mmd
->
isRelated
()
&&
mmd
->
isFunction
()))
&&
matchArguments
(
mmd
->
argumentList
(),
fmd
->
argumentList
(),
mmd
->
memberClass
()
->
name
(),
mmd
->
getClassDef
()
->
name
(),
nd
?
nd
->
name
().
data
()
:
0
)
)
// if the member is related and the arguments match then the
...
...
@@ -1951,7 +1966,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
}
bool
found
=
baseClass
!=
0
&&
baseClass
!=
cd
;
NamespaceDef
*
nd
=
cd
->
getNamespace
();
NamespaceDef
*
nd
=
cd
->
getNamespace
Def
();
if
(
!
found
)
{
FileDef
*
fd
=
cd
->
getFileDef
();
...
...
@@ -2166,8 +2181,8 @@ static void addMemberDocs(Entry *root,
// strip extern specifier
if
(
fDecl
.
left
(
7
)
==
"extern "
)
fDecl
=
fDecl
.
right
(
fDecl
.
length
()
-
7
);
md
->
setDefinition
(
fDecl
);
ClassDef
*
cd
=
md
->
memberClass
();
NamespaceDef
*
nd
=
md
->
getNamespace
();
ClassDef
*
cd
=
md
->
getClassDef
();
NamespaceDef
*
nd
=
md
->
getNamespace
Def
();
if
(
al
)
{
mergeArguments
(
md
->
argumentList
(),
al
);
...
...
@@ -2390,7 +2405,7 @@ static bool findUnrelatedFunction(Entry *root,
while
(
md
)
{
bool
ambig
;
NamespaceDef
*
nd
=
md
->
getNamespace
();
NamespaceDef
*
nd
=
md
->
getNamespace
Def
();
//printf("Namespace namespaceName=%s nd=%s\n",
// namespaceName.data(),nd ? nd->name().data() : "<none>");
FileDef
*
fd
=
findFileDef
(
inputNameDict
,
root
->
fileName
,
ambig
);
...
...
@@ -2897,7 +2912,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
{
Debug
::
print
(
Debug
::
FindMembers
,
0
,
"3. member definition found scopeName=`%s'
\n
"
,
scopeName
.
data
());
ClassDef
*
cd
=
md
->
memberClass
();
ClassDef
*
cd
=
md
->
getClassDef
();
//printf("Member %s (member scopeName=%s) (this scopeName=%s) classTempList=%s\n",md->name().data(),cd->name().data(),scopeName.data(),classTempList.data());
ClassDef
*
tcd
=
0
;
...
...
@@ -3036,7 +3051,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
md
=
mn
->
first
();
while
(
md
)
{
ClassDef
*
cd
=
md
->
memberClass
();
ClassDef
*
cd
=
md
->
getClassDef
();
if
(
cd
!=
0
&&
cd
->
name
()
==
className
)
candidates
++
;
md
=
mn
->
next
();
}
...
...
@@ -3047,7 +3062,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
md
=
mn
->
first
();
while
(
md
)
{
ClassDef
*
cd
=
md
->
memberClass
();
ClassDef
*
cd
=
md
->
getClassDef
();
if
(
cd
!=
0
&&
cd
->
name
()
==
className
)
{
warn_cont
(
" %s"
,
md
->
declaration
());
...
...
@@ -3075,14 +3090,14 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
// however be avoided, because it is error prone
MemberDef
*
md
=
mn
->
first
();
ASSERT
(
md
);
ClassDef
*
cd
=
md
->
memberClass
();
ClassDef
*
cd
=
md
->
getClassDef
();
ASSERT
(
cd
);
QCString
className
=
cd
->
name
().
copy
();
md
=
mn
->
next
();
bool
unique
=
TRUE
;
while
(
md
)
{
ClassDef
*
cd
=
md
->
memberClass
();
ClassDef
*
cd
=
md
->
getClassDef
();
if
(
className
!=
cd
->
name
())
unique
=
FALSE
;
md
=
mn
->
next
();
}
...
...
@@ -3519,7 +3534,7 @@ static void findEnums(Entry *root)
{
if
(
nd
&&
!
nd
->
name
().
isEmpty
()
&&
nd
->
name
().
at
(
0
)
!=
'@'
)
{
NamespaceDef
*
fnd
=
fmd
->
getNamespace
();
NamespaceDef
*
fnd
=
fmd
->
getNamespace
Def
();
if
(
fnd
==
nd
)
// enum value is inside a namespace
{
md
->
insertEnumField
(
fmd
);
...
...
@@ -3537,7 +3552,7 @@ static void findEnums(Entry *root)
}
else
{
ClassDef
*
fcd
=
fmd
->
memberClass
();
ClassDef
*
fcd
=
fmd
->
getClassDef
();
if
(
fcd
==
cd
)
// enum value is inside a class
{
md
->
insertEnumField
(
fmd
);
// add field def to list
...
...
@@ -3605,7 +3620,7 @@ static void findEnumDocumentation(Entry *root)
MemberDef
*
md
=
mn
->
first
();
while
(
md
&&
!
found
)
{
ClassDef
*
cd
=
md
->
memberClass
();
ClassDef
*
cd
=
md
->
getClassDef
();
if
(
cd
&&
cd
->
name
()
==
className
)
{
// documentation outside a compound overrides the documentation inside it
...
...
@@ -3729,8 +3744,8 @@ static void computeMemberRelations()
for
(
;
bmdi
.
current
()
;
++
bmdi
)
// for each other member with that signature
{
MemberDef
*
bmd
=
bmdi
.
current
();
ClassDef
*
bmcd
=
bmd
->
memberClass
();
ClassDef
*
mcd
=
md
->
memberClass
();
ClassDef
*
bmcd
=
bmd
->
getClassDef
();
ClassDef
*
mcd
=
md
->
getClassDef
();
//printf("Check relation between `%s'::`%s' and `%s'::`%s'\n",
// mcd->name().data(),md->name().data(),
// bmcd->name().data(),bmd->name().data()
...
...
@@ -3750,7 +3765,7 @@ static void computeMemberRelations()
{
MemberDef
*
rmd
;
if
((
rmd
=
md
->
reimplements
())
==
0
||
minClassDistance
(
mcd
,
bmcd
)
<
minClassDistance
(
mcd
,
rmd
->
memberClass
())
minClassDistance
(
mcd
,
bmcd
)
<
minClassDistance
(
mcd
,
rmd
->
getClassDef
())
)
{
//printf("setting (new) reimplements member\n");
...
...
@@ -3905,13 +3920,13 @@ static void addSourceReferences()
MemberDef
*
md
=
0
;
for
(
mni
.
toFirst
();(
md
=
mni
.
current
());
++
mni
)
{
ClassDef
*
cd
=
md
->
memberClass
();
ClassDef
*
cd
=
md
->
getClassDef
();
FileDef
*
fd
=
md
->
getBodyDef
();
if
(
fd
&&
cd
&&
cd
->
isLinkableInProject
()
&&
md
->
getStartBodyLine
()
!=-
1
&&
md
->
isLinkableInProject
())
{
Definition
*
d
=
cd
;
if
(
d
==
0
)
d
=
md
->
getNamespace
();
if
(
d
==
0
)
d
=
md
->
getNamespace
Def
();
if
(
d
==
0
)
d
=
md
->
getFileDef
();
fd
->
addSourceRef
(
md
->
getStartBodyLine
(),
d
,
md
);
}
...
...
@@ -3924,9 +3939,9 @@ static void addSourceReferences()
MemberDef
*
md
=
0
;
for
(
mni
.
toFirst
();(
md
=
mni
.
current
());
++
mni
)
{
NamespaceDef
*
nd
=
md
->
getNamespace
();
NamespaceDef
*
nd
=
md
->
getNamespace
Def
();
FileDef
*
fd
=
md
->
getBodyDef
();
GroupDef
*
gd
=
md
->
groupDef
();
GroupDef
*
gd
=
md
->
g
etG
roupDef
();
if
(
md
->
getStartBodyLine
()
!=-
1
&&
md
->
isLinkableInProject
()
&&
((
nd
&&
nd
->
isLinkableInProject
())
||
(
fd
&&
fd
->
isLinkableInProject
())
||
...
...
@@ -4641,22 +4656,17 @@ static void generateSearchIndex()
//----------------------------------------------------------------------------
/*! Generate a template version of the configuration file.
* If the \a shortList parameter is TRUE a configuration file without
* comments will be generated.
*/
static
void
generateConfigFile
(
const
char
*
configFile
,
bool
shortList
)
static
bool
openOutputFile
(
const
char
*
outFile
,
QFile
&
f
)
{
QFile
f
;
bool
fileOpened
=
FALSE
;
bool
writeToStdout
=
(
configFile
[
0
]
==
'-'
&&
configFile
[
1
]
==
0
);
bool
writeToStdout
=
(
outFile
[
0
]
==
'-'
&&
outFile
[
1
]
==
'\0'
);
if
(
writeToStdout
)
// write to stdout
{
fileOpened
=
f
.
open
(
IO_WriteOnly
,
stdout
);
}
else
// write to file
{
QFileInfo
fi
(
config
File
);
QFileInfo
fi
(
out
File
);
if
(
fi
.
exists
())
// create a backup
{
QDir
dir
=
fi
.
dir
();
...
...
@@ -4665,14 +4675,24 @@ static void generateConfigFile(const char *configFile,bool shortList)
dir
.
remove
(
backup
.
fileName
());
dir
.
rename
(
fi
.
fileName
(),
fi
.
fileName
()
+
".bak"
);
}
f
.
setName
(
config
File
);
f
.
setName
(
out
File
);
fileOpened
=
f
.
open
(
IO_WriteOnly
);
}
return
fileOpened
;
}
/*! Generate a template version of the configuration file.
* If the \a shortList parameter is TRUE a configuration file without
* comments will be generated.
*/
static
void
generateConfigFile
(
const
char
*
configFile
,
bool
shortList
)
{
QFile
f
;
bool
fileOpened
=
openOutputFile
(
configFile
,
f
);
bool
writeToStdout
=
(
configFile
[
0
]
==
'-'
&&
configFile
[
1
]
==
'\0'
);
if
(
fileOpened
)
{
writeTemplateConfig
(
&
f
,
shortList
);
f
.
close
();
if
(
!
writeToStdout
)
{
msg
(
"
\n\n
Configuration file `%s' created.
\n\n
"
,
configFile
);
...
...
@@ -4691,60 +4711,6 @@ static void generateConfigFile(const char *configFile,bool shortList)
}
}
//----------------------------------------------------------------------------
/*! Generate a template stylesheet
*/
static
void
generateStyleSheetFile
(
OutputGenerator
::
OutputType
outType
,
const
char
*
sheetName
)
{
QFile
f
;
bool
fileOpened
=
FALSE
;
bool
writeToStdout
=
strcmp
(
sheetName
,
"-"
)
==
0
;
if
(
writeToStdout
)
// write to stdout
{
fileOpened
=
f
.
open
(
IO_WriteOnly
,
stdout
);
}
else
// write to file
{
QFileInfo
fi
(
sheetName
);
if
(
fi
.
exists
())
// create a backup
{
QDir
dir
=
fi
.
dir
();
QFileInfo
backup
(
fi
.
fileName
()
+
".bak"
);
if
(
backup
.
exists
())
// remove existing backup
dir
.
remove
(
backup
.
fileName
());
dir
.
rename
(
fi
.
fileName
(),
fi
.
fileName
()
+
".bak"
);
}
f
.
setName
(
sheetName
);
fileOpened
=
f
.
open
(
IO_WriteOnly
);
}
if
(
fileOpened
)
{
switch
(
outType
)
{
case
OutputGenerator
:
:
RTF
:
RTFGenerator
::
writeStyleSheetFile
(
f
);
break
;
case
OutputGenerator
:
:
Html
:
HtmlGenerator
::
writeStyleSheetFile
(
f
);
break
;
case
OutputGenerator
:
:
Latex
:
LatexGenerator
::
writeStyleSheetFile
(
f
);
break
;
default:
break
;
}
f
.
close
();
}
else
{
err
(
"Error: Cannot open file %s for writing
\n
"
,
sheetName
);
exit
(
1
);
}
}
//----------------------------------------------------------------------------
// read and parse a tag file
...
...
@@ -5189,8 +5155,9 @@ static void usage(const char *name)
msg
(
" %s [configName]
\n\n
"
,
name
);
msg
(
" If - is used for configName doxygen will read from standard input.
\n\n
"
);
msg
(
"4) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.
\n
"
);
msg
(
" %s -w rtf|html|latex outputFileName [configName]
\n
"
,
name
);
msg
(
" If - is used for outputFileName doxygen will write to standard output.
\n\n
"
);
msg
(
" RTF: %s -w rtf styleSheetFile
\n
"
,
name
);
msg
(
" HTML: %s -w html headerFile footerFile styleSheetFile [configFile]
\n
"
,
name
);
msg
(
" LaTeX: %s -w latex headerFile styleSheetFile [configFile]
\n\n
"
,
name
);
msg
(
"If -s is specified the comments in the config file will be omitted.
\n
"
);
msg
(
"If configName is omitted `Doxyfile' will be used as a default.
\n\n
"
);
exit
(
1
);
...
...
@@ -5261,28 +5228,65 @@ int main(int argc,char **argv)
err
(
"Error: option -w is missing format specifier rtf, html or latex
\n
"
);
exit
(
1
);
}
if
(
stricmp
(
formatName
,
"rtf"
)
==
0
)
{
if
(
optind
+
1
>=
argc
)
{
err
(
"Error: option -w is missing a configuration
file name
\n
"
);
err
(
"Error: option
\"
-w rtf
\"
is missing a style sheet
file name
\n
"
);
exit
(
1
);
}
if
(
stricmp
(
formatName
,
"rtf"
)
==
0
)
QFile
f
;
if
(
openOutputFile
(
argv
[
optind
+
1
],
f
))
{
generateStyleSheetFile
(
OutputGenerator
::
RTF
,
argv
[
optind
+
1
]);
RTFGenerator
::
writeStyleSheetFile
(
f
);
}
exit
(
1
);
}
else
if
(
stricmp
(
formatName
,
"html"
)
==
0
)
{
generateStyleSheetFile
(
OutputGenerator
::
Html
,
argv
[
optind
+
1
]);
if
(
optind
+
4
<
argc
)
{
QCString
configFile
=
fileToString
(
argv
[
optind
+
4
]);
if
(
configFile
.
isEmpty
())
exit
(
1
);
parseConfig
(
fileToString
(
argv
[
optind
+
4
]));
configStrToVal
();
substituteEnvironmentVars
();
checkConfig
();
}
else
{
Config
::
init
();
setTranslator
(
"English"
);
}
if
(
optind
+
3
>=
argc
)
{
err
(
"Error: option
\"
-w html
\"
does not have enough arguments
\n
"
);
exit
(
1
);
}
QFile
f
;
if
(
openOutputFile
(
argv
[
optind
+
1
],
f
))
{
HtmlGenerator
::
writeHeaderFile
(
f
);
}
f
.
close
();
if
(
openOutputFile
(
argv
[
optind
+
2
],
f
))
{
HtmlGenerator
::
writeFooterFile
(
f
);
}
f
.
close
();
if
(
openOutputFile
(
argv
[
optind
+
3
],
f
))
{
HtmlGenerator
::
writeStyleSheetFile
(
f
);
}
exit
(
1
);
}
else
if
(
stricmp
(
formatName
,
"latex"
)
==
0
)
{
if
(
optind
+
2
<
argc
)
// use config file to get settings
if
(
optind
+
3
<
argc
)
// use config file to get settings
{
QCString
configFile
=
fileToString
(
argv
[
optind
+
2
]);
QCString
configFile
=
fileToString
(
argv
[
optind
+
3
]);
if
(
configFile
.
isEmpty
())
exit
(
1
);
parseConfig
(
fileToString
(
argv
[
optind
+
2
]));
parseConfig
(
fileToString
(
argv
[
optind
+
3
]));
configStrToVal
();
substituteEnvironmentVars
();
checkConfig
();
...
...
@@ -5292,7 +5296,21 @@ int main(int argc,char **argv)
Config
::
init
();
setTranslator
(
"English"
);
}
generateStyleSheetFile
(
OutputGenerator
::
Latex
,
argv
[
optind
+
1
]);
if
(
optind
+
2
>=
argc
)
{
err
(
"Error: option
\"
-w html
\"
does not have enough arguments
\n
"
);
exit
(
1
);
}
QFile
f
;
if
(
openOutputFile
(
argv
[
optind
+
1
],
f
))
{
LatexGenerator
::
writeHeaderFile
(
f
);
}
f
.
close
();
if
(
openOutputFile
(
argv
[
optind
+
2
],
f
))
{
LatexGenerator
::
writeStyleSheetFile
(
f
);
}
exit
(
1
);
}
else
...
...
@@ -5356,7 +5374,7 @@ int main(int argc,char **argv)
else
{
QFileInfo
fi
(
argv
[
optind
]);
if
(
fi
.
exists
())
if
(
fi
.
exists
()
||
strcmp
(
argv
[
optind
],
"-"
)
==
0
)
{
config
=
fileToString
(
argv
[
optind
]);
configName
=
argv
[
optind
];
...
...
@@ -5765,8 +5783,7 @@ int main(int argc,char **argv)
msg
(
"Combining RTF output...
\n
"
);
if
(
!
RTFGenerator
::
preProcessFileInplace
(
Config
::
rtfOutputDir
,
"refman.rtf"
))
{
err
(
"Error processing RTF files!
\n
"
);
exit
(
1
);
err
(
"An error occurred during post-processing the RTF files!
\n
"
);
}
}
...
...
src/filedef.cpp
View file @
422c14b6
...
...
@@ -508,25 +508,46 @@ void FileDef::insertMember(MemberDef *md)
switch
(
md
->
memberType
())
{
case
MemberDef
:
:
Variable
:
if
(
Config
::
sortMembersFlag
)
varMembers
.
inSort
(
md
);
else
varMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Function
:
if
(
Config
::
sortMembersFlag
)
funcMembers
.
inSort
(
md
);
else
funcMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Typedef
:
if
(
Config
::
sortMembersFlag
)
typedefMembers
.
inSort
(
md
);
else
typedefMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Enumeration
:
if
(
Config
::
sortMembersFlag
)
enumMembers
.
inSort
(
md
);
else
enumMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
EnumValue
:
if
(
Config
::
sortMembersFlag
)
enumValMembers
.
inSort
(
md
);
else
enumValMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Prototype
:
if
(
Config
::
sortMembersFlag
)
protoMembers
.
inSort
(
md
);
else
protoMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Define
:
if
(
Config
::
sortMembersFlag
)
defineMembers
.
inSort
(
md
);
else
defineMembers
.
append
(
md
);
break
;
default
:
err
(
"FileDef::insertMembers(): unexpected member insert in file!
\n
"
);
...
...
@@ -537,7 +558,10 @@ void FileDef::insertMember(MemberDef *md)
/*! Adds compound definition \a cd to the list of all compounds of this file */
void
FileDef
::
insertClass
(
ClassDef
*
cd
)
{
if
(
Config
::
sortMembersFlag
)
classList
->
inSort
(
cd
);
else
classList
->
append
(
cd
);
}
/*! Adds namespace definition \a nd to the list of all compounds of this file */
...
...
@@ -545,7 +569,10 @@ void FileDef::insertNamespace(NamespaceDef *nd)
{
if
(
!
nd
->
name
().
isEmpty
()
&&
namespaceDict
->
find
(
nd
->
name
())
==
0
)
{
if
(
Config
::
sortMembersFlag
)
namespaceList
->
inSort
(
nd
);
else
namespaceList
->
append
(
nd
);
namespaceDict
->
insert
(
nd
->
name
(),
nd
);
}
}
...
...
src/groupdef.cpp
View file @
422c14b6
...
...
@@ -78,16 +78,25 @@ void GroupDef::distributeMemberGroupDocumentation()
void
GroupDef
::
addFile
(
const
FileDef
*
def
)
{
if
(
Config
::
sortMembersFlag
)
fileList
->
inSort
(
def
);
else
fileList
->
append
(
def
);
}
void
GroupDef
::
addClass
(
const
ClassDef
*
def
)
{
if
(
Config
::
sortMembersFlag
)
classList
->
inSort
(
def
);
else
classList
->
append
(
def
);
}
void
GroupDef
::
addNamespace
(
const
NamespaceDef
*
def
)
{
if
(
Config
::
sortMembersFlag
)
namespaceList
->
inSort
(
def
);
else
namespaceList
->
append
(
def
);
}
...
...
@@ -142,13 +151,48 @@ void GroupDef::insertMember(MemberDef *md)
allMemberDict
->
insert
(
funcDecl
,
md
);
switch
(
md
->
memberType
())
{
case
MemberDef
:
:
Variable
:
varMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Function
:
funcMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Typedef
:
typedefMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Enumeration
:
enumMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
EnumValue
:
enumValMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Prototype
:
protoMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Define
:
defineMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Variable
:
if
(
Config
::
sortMembersFlag
)
varMembers
.
inSort
(
md
);
else
varMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Function
:
if
(
Config
::
sortMembersFlag
)
funcMembers
.
inSort
(
md
);
else
funcMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Typedef
:
if
(
Config
::
sortMembersFlag
)
typedefMembers
.
inSort
(
md
);
else
typedefMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Enumeration
:
if
(
Config
::
sortMembersFlag
)
enumMembers
.
inSort
(
md
);
else
enumMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
EnumValue
:
if
(
Config
::
sortMembersFlag
)
enumValMembers
.
inSort
(
md
);
else
enumValMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Prototype
:
if
(
Config
::
sortMembersFlag
)
protoMembers
.
inSort
(
md
);
else
protoMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Define
:
if
(
Config
::
sortMembersFlag
)
defineMembers
.
inSort
(
md
);
else
defineMembers
.
append
(
md
);
break
;
default
:
err
(
"FileDef::insertMembers(): unexpected member insert in file!
\n
"
);
}
...
...
@@ -158,6 +202,9 @@ void GroupDef::insertMember(MemberDef *md)
void
GroupDef
::
addGroup
(
const
GroupDef
*
def
)
{
if
(
Config
::
sortMembersFlag
)
groupList
->
inSort
(
def
);
else
groupList
->
append
(
def
);
}
...
...
@@ -450,7 +497,7 @@ void addMemberToGroups(Entry *root,MemberDef *md)
GroupDef
*
gd
=
0
;
if
(
!
s
->
isEmpty
()
&&
(
gd
=
groupDict
[
*
s
]))
{
GroupDef
*
mgd
=
md
->
groupDef
();
GroupDef
*
mgd
=
md
->
g
etG
roupDef
();
if
(
mgd
==
0
)
{
gd
->
insertMember
(
md
);
...
...
src/htmlgen.cpp
View file @
422c14b6
...
...
@@ -45,7 +45,7 @@ static const char *defaultStyleSheet =
"A.codeRef { font-weight: normal; color: #4444ee }
\n
"
"DL.el { margin-left: -1cm }
\n
"
"DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
\n
"
"DIV.in { margin-left: 16 }
\n
"
//
"DIV.in { margin-left: 16 }\n"
"DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }
\n
"
"TD.md { background-color: #f2f2ff }
\n
"
"DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold }
\n
"
...
...
@@ -96,15 +96,10 @@ void HtmlGenerator::writeStyleSheetFile(QFile &file)
QTextStream
t
(
&
file
);
t
<<
defaultStyleSheet
;
}
void
HtmlGenerator
::
startFile
(
const
char
*
name
,
const
char
*
title
,
bool
external
)
static
void
writeDefaultHeaderFile
(
QTextStream
&
t
,
const
char
*
title
,
bool
external
)
{
QCString
fileName
=
name
;
lastTitle
=
title
;
if
(
fileName
.
right
(
5
)
!=
".html"
)
fileName
+=
".html"
;
startPlainFile
(
fileName
);
lastFile
=
fileName
;
if
(
header
.
isEmpty
())
{
t
<<
"<!DOCTYPE HTML PUBLIC
\"
-//W3C//DTD HTML 4.0 Transitional//EN
\"
>
\n
"
"<html><head><meta name=
\"
robots
\"
content=
\"
noindex
\"
>
\n
"
"<meta http-equiv=
\"
Content-Type
\"
content=
\"
text/html;charset="
...
...
@@ -123,10 +118,49 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
else
{
QFileInfo
cssfi
(
Config
::
htmlStyleSheet
);
if
(
!
cssfi
.
exists
())
{
err
(
"Error: user specified HTML style sheet file does not exist!
\n
"
);
}
t
<<
cssfi
.
fileName
();
}
t
<<
"
\"
rel=
\"
stylesheet
\"
type=
\"
text/css
\"
>
\n
"
"</head><body bgcolor=
\"
#ffffff
\"
>
\n
"
;
}
void
HtmlGenerator
::
writeHeaderFile
(
QFile
&
file
)
{
QTextStream
t
(
&
file
);
writeDefaultHeaderFile
(
t
,
"$title"
,
FALSE
);
}
void
HtmlGenerator
::
writeFooterFile
(
QFile
&
file
)
{
QTextStream
t
(
&
file
);
t
<<
"<hr><address><small>
\n
"
;
t
<<
"Generated at $datetime for $projectname "
;
t
<<
" by <a href=
\"
http://www.stack.nl/~dimitri/doxygen/index.html
\"
>
\n
"
<<
"<img src=
\"
doxygen.gif
\"
alt=
\"
doxygen
\"
"
<<
"align=
\"
middle
\"
border=0 width=110 height=53>
\n
"
<<
"</a> $doxygenversion written by"
<<
" <a href=
\"
mailto:dimitri@stack.nl
\"
>Dimitri van Heesch</a>,
\n
"
<<
" © 1997-2000</small></address>
\n
"
<<
"</body>
\n
"
<<
"</html>
\n
"
;
}
void
HtmlGenerator
::
startFile
(
const
char
*
name
,
const
char
*
title
,
bool
external
)
{
QCString
fileName
=
name
;
lastTitle
=
title
;
if
(
fileName
.
right
(
5
)
!=
".html"
)
fileName
+=
".html"
;
startPlainFile
(
fileName
);
lastFile
=
fileName
;
if
(
header
.
isEmpty
())
{
writeDefaultHeaderFile
(
t
,
title
,
external
);
}
else
{
...
...
@@ -190,13 +224,13 @@ void HtmlGenerator::writeFooter(int part,bool external)
t
<<
"src=
\"
"
;
}
t
<<
"doxygen.gif
\"
alt=
\"
doxygen
\"
"
<<
"align=
center
border=0 "
<<
endl
<<
<<
"align=
\"
middle
\"
border=0 "
<<
endl
<<
"width=110 height=53></a>"
<<
versionString
<<
" "
;
}
break
;
default
:
if
(
footer
.
isEmpty
())
t
<<
" <a href=
\"
mailto:dimitri@stack.nl
\"
>Dimitri van Heesch</a>,
\n
©
"
t
<<
" <a href=
\"
mailto:dimitri@stack.nl
\"
>Dimitri van Heesch</a>,
\n
©
"
"1997-2000</small></address>
\n
</body>
\n
</html>
\n
"
;
break
;
...
...
@@ -561,7 +595,15 @@ void HtmlGenerator::endColorFont()
void
HtmlGenerator
::
writeFormula
(
const
char
*
n
,
const
char
*
text
)
{
if
(
text
&&
text
[
0
]
==
'\\'
)
t
<<
"<p><center>"
<<
endl
;
t
<<
"<img align=
\"
top
\"
src=
\"
"
<<
n
<<
"
\"
>"
<<
endl
;
t
<<
"<img align="
;
#if !defined(_WIN32)
t
<<
"
\"
top
\"
"
;
// assume Unix users use Netscape 4.x which does
// not seem to support align == "middle" :-((
#else
t
<<
"
\"
middle
\"
"
;
// assume Windows users use IE or HtmlHelp which only
// displays formulas nicely with align == "middle"
#endif
t
<<
" src=
\"
"
<<
n
<<
"
\"
>"
<<
endl
;
if
(
text
&&
text
[
0
]
==
'\\'
)
t
<<
"</center><p>"
<<
endl
;
}
...
...
@@ -899,7 +941,13 @@ void HtmlGenerator::endMemberGroup(bool)
void
HtmlGenerator
::
startIndent
()
{
// I really wanted to use CSS here to provide an indented section, but
// alas, Netscape is buggy enough to sometimes "forget" to end the
// indent cause a staircase effect where the indent continuously increases.
// It's back to abusing tables :-(
//t << "<div class=\"in\">" << endl;
t
<<
"<table cellspacing=5 cellpadding=0 border=0>
\n
"
" <tr>
\n
"
" <td>
\n
"
...
...
src/htmlgen.h
View file @
422c14b6
...
...
@@ -31,6 +31,8 @@ class HtmlGenerator : public OutputGenerator
~
HtmlGenerator
();
static
void
init
();
static
void
writeStyleSheetFile
(
QFile
&
f
);
static
void
writeHeaderFile
(
QFile
&
f
);
static
void
writeFooterFile
(
QFile
&
f
);
OutputGenerator
*
copy
()
{
return
new
HtmlGenerator
;
}
//OutputGenerator *clone() { return new HtmlGenerator(*this); }
...
...
src/index.cpp
View file @
422c14b6
...
...
@@ -947,7 +947,7 @@ void writeMemberList(OutputList &ol)
//!md->isReference() && md->hasDocumentation() &&
// md->name()[0]!='@' &&
md
->
isLinkableInProject
()
&&
(
cd
=
md
->
memberClass
())
&&
(
cd
=
md
->
getClassDef
())
&&
cd
->
isLinkableInProject
()
)
{
...
...
@@ -968,7 +968,7 @@ void writeMemberList(OutputList &ol)
QCString
prevName
;
while
(
md
)
{
ClassDef
*
cd
=
md
->
memberClass
();
ClassDef
*
cd
=
md
->
getClassDef
();
if
(
//cd && (md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) &&
//!md->isReference() && md->hasDocumentation() &&
md
->
isLinkableInProject
()
&&
...
...
@@ -1009,10 +1009,10 @@ int countClassMembers()
{
if
(
//(md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) &&
//!md->isReference() && !md->isRelated() && md->hasDocumentation() &&
//md->name()[0]!='@' && (cd=md->
memberClass
()) && cd->isLinkable())
//md->name()[0]!='@' && (cd=md->
getClassDef
()) && cd->isLinkable())
md
->
isLinkableInProject
()
&&
!
md
->
isRelated
()
&&
(
cd
=
md
->
memberClass
())
&&
(
cd
=
md
->
getClassDef
())
&&
cd
->
isLinkableInProject
()
)
{
...
...
@@ -1025,10 +1025,10 @@ int countClassMembers()
// otherMd=md;
//if (//(md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) &&
// //!md->isReference() && md->isRelated() && md->hasDocumentation() &&
// //md->name()[0]!='@' && (cd=md->
memberClass
()) && cd->isLinkable()
// //md->name()[0]!='@' && (cd=md->
getClassDef
()) && cd->isLinkable()
// md->isLinkableInProject() &&
// md->isRelated() &&
// (cd=md->
memberClass
()) &&
// (cd=md->
getClassDef
()) &&
// cd->isLinkableInProject()
// )
// found=TRUE;
...
...
@@ -1073,10 +1073,9 @@ void writeFileMemberList(OutputList &ol)
bool
found
=
FALSE
;
while
(
md
&&
!
found
)
{
FileDef
*
fd
=
md
->
getFileDef
()
?
md
->
getFileDef
()
:
md
->
getFileDec
();
bool
hasDocs
=
(
md
->
getFileDef
()
&&
md
->
getFileDef
()
->
isLinkableInProject
())
||
(
md
->
getFileDec
()
&&
md
->
getFileDec
()
->
isLinkableInProject
());
FileDef
*
fd
=
md
->
getFileDef
();
bool
hasDocs
=
md
->
getFileDef
()
&&
md
->
getFileDef
()
->
isLinkableInProject
();
if
(
fd
&&
hasDocs
&&
md
->
isLinkableInProject
()
...
...
@@ -1099,10 +1098,9 @@ void writeFileMemberList(OutputList &ol)
QCString
prevName
;
while
(
md
)
{
FileDef
*
fd
=
md
->
getFileDef
()
?
md
->
getFileDef
()
:
md
->
getFileDec
();
bool
hasDocs
=
(
md
->
getFileDef
()
&&
md
->
getFileDef
()
->
isLinkableInProject
())
||
(
md
->
getFileDec
()
&&
md
->
getFileDec
()
->
isLinkableInProject
());
FileDef
*
fd
=
md
->
getFileDef
();
bool
hasDocs
=
md
->
getFileDef
()
&&
md
->
getFileDef
()
->
isLinkableInProject
();
if
(
fd
&&
hasDocs
&&
md
->
isLinkableInProject
()
&&
//!md->isReference() &&
...
...
@@ -1143,7 +1141,7 @@ void writeNamespaceMemberList(OutputList &ol)
bool
found
=
FALSE
;
while
(
md
&&
!
found
)
{
NamespaceDef
*
nd
=
md
->
getNamespace
();
NamespaceDef
*
nd
=
md
->
getNamespace
Def
();
if
(
nd
&&
nd
->
isLinkableInProject
()
&&
md
->
isLinkableInProject
())
found
=
TRUE
;
else
...
...
@@ -1161,7 +1159,7 @@ void writeNamespaceMemberList(OutputList &ol)
QCString
prevName
;
while
(
md
)
{
NamespaceDef
*
nd
=
md
->
getNamespace
();
NamespaceDef
*
nd
=
md
->
getNamespace
Def
();
if
(
nd
&&
nd
->
isLinkableInProject
()
&&
md
->
isLinkableInProject
()
&&
prevName
!=
nd
->
name
()
)
...
...
@@ -1195,7 +1193,7 @@ int countNamespaceMembers()
bool
found
=
FALSE
;
while
(
md
&&
!
found
)
{
NamespaceDef
*
nd
=
md
->
getNamespace
();
NamespaceDef
*
nd
=
md
->
getNamespace
Def
();
if
(
nd
&&
nd
->
isLinkableInProject
()
&&
md
->
isLinkableInProject
())
found
=
TRUE
;
else
...
...
@@ -1221,10 +1219,8 @@ int countFileMembers()
while
(
md
&&
!
found
)
{
if
(
md
->
isLinkableInProject
()
&&
(((
fd
=
md
->
getFileDef
())
&&
fd
->
isLinkableInProject
())
||
((
fd
=
md
->
getFileDec
())
&&
fd
->
isLinkableInProject
())
)
(
fd
=
md
->
getFileDef
())
&&
fd
->
isLinkableInProject
()
)
found
=
TRUE
;
else
...
...
@@ -1243,8 +1239,6 @@ void writeFileMemberIndex(OutputList &ol)
if
(
documentedFunctions
==
0
)
return
;
ol
.
pushGeneratorState
();
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
//ol.disable(OutputGenerator::Man);
//ol.disable(OutputGenerator::Latex);
startFile
(
ol
,
"globals"
,
"File Member Index"
);
startTitle
(
ol
,
0
);
parseText
(
ol
,
Config
::
projectName
+
" "
+
theTranslator
->
trFileMembers
());
...
...
@@ -1252,8 +1246,6 @@ void writeFileMemberIndex(OutputList &ol)
parseText
(
ol
,
theTranslator
->
trFileMembersDescription
(
Config
::
extractAllFlag
));
writeFileMemberList
(
ol
);
endFile
(
ol
);
//ol.enable(OutputGenerator::Latex);
//ol.enable(OutputGenerator::Man);
ol
.
popGeneratorState
();
}
...
...
src/language.cpp
View file @
422c14b6
...
...
@@ -30,6 +30,7 @@
#include "translator_ru.h"
#include "translator_hr.h"
#include "translator_pl.h"
#include "translator_pt.h"
#endif
#define L_EQUAL(a) !stricmp(langName,a)
...
...
@@ -95,6 +96,10 @@ bool setTranslator(const char *langName)
{
theTranslator
=
new
TranslatorPolish
;
}
else
if
(
L_EQUAL
(
"portuguese"
))
{
theTranslator
=
new
TranslatorPortuguese
;
}
#endif
else
// use the default language (i.e. english)
{
...
...
src/latexgen.cpp
View file @
422c14b6
...
...
@@ -96,6 +96,7 @@ LatexGenerator::LatexGenerator() : OutputGenerator()
col
=
0
;
//printf("LatexGenerator::LatexGenerator() insideTabbing=FALSE\n");
insideTabbing
=
FALSE
;
firstDescItem
=
TRUE
;
}
LatexGenerator
::~
LatexGenerator
()
...
...
@@ -113,6 +114,7 @@ void LatexGenerator::append(const OutputGenerator *g)
t
<<
g
->
getContents
();
col
+=
((
LatexGenerator
*
)
g
)
->
col
;
insideTabbing
=
insideTabbing
||
((
LatexGenerator
*
)
g
)
->
insideTabbing
;
firstDescItem
=
((
LatexGenerator
*
)
g
)
->
firstDescItem
;
//printf("LatexGenerator::append(%s) insideTabbing=%s\n", g->getContents().data(),
// insideTabbing ? "TRUE" : "FALSE" );
}
...
...
@@ -175,7 +177,7 @@ void LatexGenerator::init()
<<
"
\t
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out"
<<
endl
;
}
static
void
writeDefault
sStyleSheet
Part1
(
QTextStream
&
t
)
static
void
writeDefault
Header
Part1
(
QTextStream
&
t
)
{
// part 1
...
...
@@ -252,7 +254,7 @@ static void writeDefaultsStyleSheetPart1(QTextStream &t)
}
static
void
writeDefault
sStyleSheet
Part2
(
QTextStream
&
t
)
static
void
writeDefault
Header
Part2
(
QTextStream
&
t
)
{
// part 2
t
<<
"}
\\\\
"
<<
endl
...
...
@@ -260,7 +262,7 @@ static void writeDefaultsStyleSheetPart2(QTextStream &t)
<<
"{
\\
large "
;
}
static
void
writeDefault
sStyleSheet
Part3
(
QTextStream
&
t
)
static
void
writeDefault
Header
Part3
(
QTextStream
&
t
)
{
// part 3
t
<<
" Doxygen "
<<
versionString
<<
"}
\\\\
"
<<
endl
...
...
@@ -275,16 +277,112 @@ static void writeDefaultsStyleSheetPart3(QTextStream &t)
t
<<
"
\\
pagenumbering{arabic}
\n
"
;
}
void
LatexGenerator
::
writeStyleSheetFile
(
QFile
&
f
)
static
void
writeDefaultStyleSheetPart1
(
QTextStream
&
t
)
{
// part 1
t
<<
"
\\
NeedsTeXFormat{LaTeX2e}
\n
"
;
t
<<
"
\\
ProvidesPackage{doxygen}
\n
"
;
t
<<
"
\\
RequirePackage{calc}
\n
"
;
t
<<
"
\\
RequirePackage{array}
\n
"
;
t
<<
"
\\
pagestyle{fancyplain}
\n
"
;
t
<<
"
\\
addtolength{
\\
headwidth}{
\\
marginparsep}
\n
"
;
t
<<
"
\\
addtolength{
\\
headwidth}{
\\
marginparwidth}
\n
"
;
t
<<
"
\\
newcommand{
\\
clearemptydoublepage}{
\\
newpage{
\\
pagestyle{empty}"
;
t
<<
"
\\
cleardoublepage}}
\n
"
;
if
(
!
Config
::
compactLatexFlag
)
t
<<
"
\\
renewcommand{
\\
chaptermark}[1]{
\\
markboth{#1}{}}
\n
"
;
t
<<
"
\\
renewcommand{
\\
sectionmark}[1]{
\\
markright{
\\
thesection
\\
#1}}
\n
"
;
t
<<
"
\\
lhead[
\\
fancyplain{}{
\\
bfseries
\\
thepage}]
\n
"
;
t
<<
" {
\\
fancyplain{}{
\\
bfseries
\\
rightmark}}
\n
"
;
t
<<
"
\\
rhead[
\\
fancyplain{}{
\\
bfseries
\\
leftmark}]
\n
"
;
t
<<
" {
\\
fancyplain{}{
\\
bfseries
\\
thepage}}
\n
"
;
t
<<
"
\\
rfoot[
\\
fancyplain{}{
\\
bfseries
\\
scriptsize "
;
}
static
void
writeDefaultStyleSheetPart2
(
QTextStream
&
t
)
{
t
<<
"
\\
lfoot[]{
\\
fancyplain{}{
\\
bfseries
\\
scriptsize "
;
}
static
void
writeDefaultStyleSheetPart3
(
QTextStream
&
t
)
{
t
<<
"}}
\n
"
;
t
<<
"
\\
cfoot{}
\n
"
;
t
<<
"
\\
newenvironment{CompactList}
\n
"
;
t
<<
"{
\\
begin{list}{}{
\n
"
;
t
<<
"
\\
setlength{
\\
leftmargin}{0.5cm}
\n
"
;
t
<<
"
\\
setlength{
\\
itemsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
parsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
topsep}{0pt}
\n
"
;
t
<<
"
\\
renewcommand{
\\
makelabel}{}}}
\n
"
;
t
<<
"{
\\
end{list}}
\n
"
;
t
<<
"
\\
newenvironment{CompactItemize}
\n
"
;
t
<<
"{
\n
"
;
t
<<
"
\\
begin{itemize}
\n
"
;
t
<<
"
\\
setlength{
\\
itemsep}{-3pt}
\n
"
;
t
<<
"
\\
setlength{
\\
parsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
topsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
partopsep}{0pt}
\n
"
;
t
<<
"}
\n
"
;
t
<<
"{
\\
end{itemize}}
\n
"
;
t
<<
"
\\
newcommand{
\\
PBS}[1]{
\\
let
\\
temp=
\\\\
#1
\\
let
\\\\
=
\\
temp}
\n
"
;
t
<<
"
\\
newlength{
\\
tmplength}
\n
"
;
t
<<
"
\\
newenvironment{TabularC}[1]
\n
"
;
t
<<
"{
\n
"
;
t
<<
"
\\
setlength{
\\
tmplength}
\n
"
;
t
<<
" {
\\
linewidth/(#1)-
\\
tabcolsep*2-
\\
arrayrulewidth*(#1+1)/(#1)}
\n
"
;
t
<<
"
\\
par
\\
begin{tabular*}{
\\
linewidth}
\n
"
;
t
<<
" {*{#1}{|>{
\\
PBS
\\
raggedright
\\
hspace{0pt}}p{
\\
the
\\
tmplength}}|}
\n
"
;
t
<<
"}
\n
"
;
t
<<
"{
\\
end{tabular*}
\\
par}
\n
"
;
t
<<
"
\\
newcommand{
\\
entrylabel}[1]{
\n
"
;
t
<<
" {
\\
parbox[b]{
\\
labelwidth-4pt}{
\\
makebox[0pt][l]{
\\
textbf{#1}}
\\\\
}}}
\n
"
;
t
<<
"
\\
newenvironment{Desc}
\n
"
;
t
<<
"{
\\
begin{list}{}
\n
"
;
t
<<
" {
\n
"
;
t
<<
"
\\
settowidth{
\\
labelwidth}{40pt}
\n
"
;
t
<<
"
\\
setlength{
\\
leftmargin}{
\\
labelwidth}
\n
"
;
t
<<
"
\\
setlength{
\\
parsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
itemsep}{-4pt}
\n
"
;
t
<<
"
\\
renewcommand{
\\
makelabel}{
\\
entrylabel}
\n
"
;
t
<<
" }
\n
"
;
t
<<
"}
\n
"
;
t
<<
"{
\\
end{list}}
\n
"
;
t
<<
"
\\
newenvironment{Indent}
\n
"
;
t
<<
" {
\\
begin{list}{}{
\\
setlength{
\\
leftmargin}{0.5cm}}
\n
"
;
t
<<
"
\\
item[]
\\
ignorespaces}
\n
"
;
t
<<
" {
\\
unskip
\\
end{list}}
\n
"
;
t
<<
"
\\
setlength{
\\
parindent}{0cm}
\n
"
;
t
<<
"
\\
setlength{
\\
parskip}{0.2cm}
\n
"
;
t
<<
"
\\
addtocounter{secnumdepth}{1}
\n
"
;
t
<<
"
\\
sloppy
\n
"
;
}
void
LatexGenerator
::
writeHeaderFile
(
QFile
&
f
)
{
QTextStream
t
(
&
f
);
writeDefault
sStyleSheet
Part1
(
t
);
writeDefault
Header
Part1
(
t
);
t
<<
"Your title here"
;
writeDefault
sStyleSheet
Part2
(
t
);
writeDefault
Header
Part2
(
t
);
t
<<
"Generated by"
;
writeDefault
sStyleSheet
Part3
(
t
);
writeDefault
Header
Part3
(
t
);
}
void
LatexGenerator
::
writeStyleSheetFile
(
QFile
&
f
)
{
QTextStream
t
(
&
f
);
writeDefaultStyleSheetPart1
(
t
);
t
<<
"Generated at "
<<
dateToString
(
TRUE
);
if
(
Config
::
projectName
.
isEmpty
())
t
<<
" for "
<<
Config
::
projectName
<<
" "
;
t
<<
"by doxygen written by Dimitri van Heesch
\\
copyright{} 1997-2000"
;
writeDefaultStyleSheetPart2
(
t
);
t
<<
"Generated at "
<<
dateToString
(
TRUE
);
if
(
Config
::
projectName
.
isEmpty
())
t
<<
" for "
<<
Config
::
projectName
<<
" "
;
t
<<
"by doxygen written by Dimitri van Heesch
\\
copyright{} 1997-2000"
;
writeDefaultStyleSheetPart3
(
t
);
}
void
LatexGenerator
::
startFile
(
const
char
*
name
,
const
char
*
,
bool
)
{
...
...
@@ -316,7 +414,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
if
(
Config
::
latexHeaderFile
.
isEmpty
())
{
writeDefault
sStyleSheet
Part1
(
t
);
writeDefault
Header
Part1
(
t
);
}
else
{
...
...
@@ -328,7 +426,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
case
isTitlePageAuthor
:
if
(
Config
::
latexHeaderFile
.
isEmpty
())
{
writeDefault
sStyleSheet
Part2
(
t
);
writeDefault
Header
Part2
(
t
);
}
break
;
case
isMainPage
:
...
...
@@ -365,7 +463,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
bool
found
=
FALSE
;
while
(
gd
&&
!
found
)
{
if
(
gd
->
isLinkableInProject
()
||
gd
->
countMembers
()
>
0
)
if
(
gd
->
countMembers
()
>
0
)
{
if
(
Config
::
compactLatexFlag
)
t
<<
"
\\
section"
;
else
t
<<
"
\\
chapter"
;
t
<<
"{"
;
//Module Documentation}\n";
...
...
@@ -381,7 +479,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
bool
found
=
FALSE
;
while
(
nd
&&
!
found
)
{
if
(
nd
->
isLinkableInProject
())
if
(
nd
->
isLinkableInProject
()
&&
nd
->
countMembers
()
>
0
)
{
if
(
Config
::
compactLatexFlag
)
t
<<
"
\\
section"
;
else
t
<<
"
\\
chapter"
;
t
<<
"{"
;
// Namespace Documentation}\n":
...
...
@@ -458,7 +556,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
case
isTitlePageAuthor
:
if
(
Config
::
latexHeaderFile
.
isEmpty
())
{
writeDefault
sStyleSheet
Part3
(
t
);
writeDefault
Header
Part3
(
t
);
}
break
;
case
isMainPage
:
...
...
@@ -512,7 +610,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
bool
found
=
FALSE
;
while
(
nd
&&
!
found
)
{
if
(
nd
->
isLinkableInProject
()
||
nd
->
countMembers
()
>
0
)
if
(
nd
->
isLinkableInProject
()
&&
nd
->
countMembers
()
>
0
)
{
t
<<
"}
\n\\
input{"
<<
nd
->
getOutputFileBase
()
<<
"}
\n
"
;
found
=
TRUE
;
...
...
@@ -521,7 +619,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
}
while
(
nd
)
{
if
(
nd
->
isLinkableInProject
()
||
nd
->
countMembers
()
>
0
)
if
(
nd
->
isLinkableInProject
()
&&
nd
->
countMembers
()
>
0
)
{
if
(
Config
::
compactLatexFlag
)
t
<<
"
\\
input"
;
else
t
<<
"
\\
include"
;
t
<<
"{"
<<
nd
->
getOutputFileBase
()
<<
"}
\n
"
;
...
...
@@ -640,23 +738,7 @@ void LatexGenerator::writeStyleInfo(int part)
{
//QCString pname=Config::projectName.stripWhiteSpace();
startPlainFile
(
"doxygen.sty"
);
t
<<
"
\\
NeedsTeXFormat{LaTeX2e}
\n
"
;
t
<<
"
\\
ProvidesPackage{doxygen}
\n
"
;
t
<<
"
\\
RequirePackage{calc}
\n
"
;
t
<<
"
\\
RequirePackage{array}
\n
"
;
t
<<
"
\\
pagestyle{fancyplain}
\n
"
;
t
<<
"
\\
addtolength{
\\
headwidth}{
\\
marginparsep}
\n
"
;
t
<<
"
\\
addtolength{
\\
headwidth}{
\\
marginparwidth}
\n
"
;
t
<<
"
\\
newcommand{
\\
clearemptydoublepage}{
\\
newpage{
\\
pagestyle{empty}"
;
t
<<
"
\\
cleardoublepage}}
\n
"
;
if
(
!
Config
::
compactLatexFlag
)
t
<<
"
\\
renewcommand{
\\
chaptermark}[1]{
\\
markboth{#1}{}}
\n
"
;
t
<<
"
\\
renewcommand{
\\
sectionmark}[1]{
\\
markright{
\\
thesection
\\
#1}}
\n
"
;
t
<<
"
\\
lhead[
\\
fancyplain{}{
\\
bfseries
\\
thepage}]
\n
"
;
t
<<
" {
\\
fancyplain{}{
\\
bfseries
\\
rightmark}}
\n
"
;
t
<<
"
\\
rhead[
\\
fancyplain{}{
\\
bfseries
\\
leftmark}]
\n
"
;
t
<<
" {
\\
fancyplain{}{
\\
bfseries
\\
thepage}}
\n
"
;
t
<<
"
\\
rfoot[
\\
fancyplain{}{
\\
bfseries
\\
scriptsize "
;
writeDefaultStyleSheetPart1
(
t
);
}
break
;
case
1
:
...
...
@@ -665,83 +747,15 @@ void LatexGenerator::writeStyleInfo(int part)
break
;
case
2
:
{
t
<<
" Dimitri van Heesch
\\
copyright{} 1997-2000
}]{}
\n
"
;
//QCString dtString=dateToString(FALSE)
;
t
<<
"
\\
lfoot[]{
\\
fancyplain{}{
\\
bfseries
\\
scriptsize "
;
t
<<
" Dimitri van Heesch
\\
copyright{} 1997-2000"
;
t
<<
"}]{}
\n
"
;
writeDefaultStyleSheetPart2
(
t
)
;
}
break
;
case
4
:
{
t
<<
" Dimitri van Heesch
\\
copyright{} 1997-2000}}
\n
"
;
t
<<
"
\\
cfoot{}
\n
"
;
t
<<
"
\\
newenvironment{CompactList}
\n
"
;
t
<<
"{
\\
begin{list}{}{
\n
"
;
t
<<
"
\\
setlength{
\\
leftmargin}{0.5cm}
\n
"
;
t
<<
"
\\
setlength{
\\
itemsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
parsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
topsep}{0pt}
\n
"
;
t
<<
"
\\
renewcommand{
\\
makelabel}{}}}
\n
"
;
t
<<
"{
\\
end{list}}
\n
"
;
t
<<
"
\\
newenvironment{CompactItemize}
\n
"
;
t
<<
"{
\n
"
;
t
<<
"
\\
begin{itemize}
\n
"
;
t
<<
"
\\
setlength{
\\
itemsep}{-3pt}
\n
"
;
t
<<
"
\\
setlength{
\\
parsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
topsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
partopsep}{0pt}
\n
"
;
t
<<
"}
\n
"
;
t
<<
"{
\\
end{itemize}}
\n
"
;
t
<<
"
\\
newcommand{
\\
PBS}[1]{
\\
let
\\
temp=
\\\\
#1
\\
let
\\\\
=
\\
temp}
\n
"
;
t
<<
"
\\
newlength{
\\
tmplength}
\n
"
;
t
<<
"
\\
newenvironment{TabularC}[1]
\n
"
;
t
<<
"{
\n
"
;
t
<<
"
\\
setlength{
\\
tmplength}
\n
"
;
t
<<
" {
\\
linewidth/(#1)-
\\
tabcolsep*2-
\\
arrayrulewidth*(#1+1)/(#1)}
\n
"
;
t
<<
"
\\
par
\\
begin{tabular*}{
\\
linewidth}
\n
"
;
t
<<
" {*{#1}{|>{
\\
PBS
\\
raggedright
\\
hspace{0pt}}p{
\\
the
\\
tmplength}}|}
\n
"
;
t
<<
"}
\n
"
;
t
<<
"{
\\
end{tabular*}
\\
par}
\n
"
;
t
<<
"
\\
newcommand{
\\
entrylabel}[1]{
\n
"
;
t
<<
" {
\\
parbox[b]{
\\
labelwidth-4pt}{
\\
makebox[0pt][l]{
\\
textbf{#1}}
\\\\
}}}
\n
"
;
t
<<
"
\\
newenvironment{Desc}
\n
"
;
t
<<
"{
\\
begin{list}{}
\n
"
;
t
<<
" {
\n
"
;
t
<<
"
\\
settowidth{
\\
labelwidth}{40pt}
\n
"
;
t
<<
"
\\
setlength{
\\
leftmargin}{
\\
labelwidth}
\n
"
;
t
<<
"
\\
setlength{
\\
parsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
itemsep}{-4pt}
\n
"
;
t
<<
"
\\
renewcommand{
\\
makelabel}{
\\
entrylabel}
\n
"
;
t
<<
" }
\n
"
;
t
<<
"}
\n
"
;
t
<<
"{
\\
end{list}}
\n
"
;
t
<<
"
\\
newenvironment{Indent}
\n
"
;
t
<<
" {
\\
begin{list}{}{
\\
setlength{
\\
leftmargin}{0.5cm}}
\n
"
;
t
<<
"
\\
item[]
\\
ignorespaces}
\n
"
;
t
<<
" {
\\
unskip
\\
end{list}}
\n
"
;
t
<<
"
\\
setlength{
\\
parindent}{0cm}
\n
"
;
t
<<
"
\\
setlength{
\\
parskip}{0.2cm}
\n
"
;
t
<<
"
\\
addtocounter{secnumdepth}{1}
\n
"
;
//if (!Config::compactLatexFlag)
//{
// t << "\\renewcommand{\\subsection}{\\@startsection{subsection}{2}{\\z@}\n";
// t << " {-3.25ex \\@plus -1ex \\@minus -.2ex}\n";
// t << " {1.5ex \\@plus.2ex}\n";
// t << " {\\normalfont\\large\\bfseries\\medskip\n";
// t << " \\vspace{0.6cm}\\hrule\\vspace{-0.6cm}}\n";
// t << " }\n";
//}
//else
//{
// t << "\\renewcommand{\\subsubsection}{\\@startsection{subsubsection}{3}{\\z@}\n";
// t << " {-3.25ex \\@plus -1ex \\@minus -.2ex}\n";
// t << " {1.5ex \\@plus.2ex}\n";
// t << " {\\normalfont\\normalsize\\bfseries\\medskip\n";
// t << " \\vspace{0.6cm}\\hrule\\vspace{-0.6cm}}\n";
// t << " }\n";
//}
t
<<
"
\\
sloppy
\n
"
;
t
<<
" Dimitri van Heesch
\\
copyright{} 1997-2000"
;
writeDefaultStyleSheetPart3
(
t
);
endPlainFile
();
}
break
;
...
...
@@ -1435,4 +1449,33 @@ void LatexGenerator::endInclDepGraph(DotInclDepGraph &g)
g
.
writeGraph
(
t
,
EPS
,
Config
::
latexOutputDir
);
}
void
LatexGenerator
::
startDescription
()
{
t
<<
"
\\
begin{description}"
<<
endl
;
}
void
LatexGenerator
::
endDescription
()
{
t
<<
"
\\
end{description}"
<<
endl
;
firstDescItem
=
TRUE
;
}
void
LatexGenerator
::
startDescItem
()
{
firstDescItem
=
TRUE
;
t
<<
"
\\
item["
;
}
void
LatexGenerator
::
endDescItem
()
{
if
(
firstDescItem
)
{
t
<<
"]"
<<
endl
;
firstDescItem
=
FALSE
;
}
else
{
lineBreak
();
}
}
src/latexgen.h
View file @
422c14b6
...
...
@@ -29,6 +29,7 @@ class LatexGenerator : public OutputGenerator
~
LatexGenerator
();
static
void
init
();
static
void
writeStyleSheetFile
(
QFile
&
f
);
static
void
writeHeaderFile
(
QFile
&
f
);
OutputGenerator
*
copy
();
//OutputGenerator *clone() { return new LatexGenerator(*this); }
...
...
@@ -117,10 +118,10 @@ class LatexGenerator : public OutputGenerator
void
endEmphasis
()
{
t
<<
"}"
;
}
void
startBold
()
{
t
<<
"{
\\
bf "
;
}
void
endBold
()
{
t
<<
"}"
;
}
void
startDescription
()
{
t
<<
"
\\
begin{description}"
<<
endl
;
}
void
endDescription
()
{
t
<<
"
\\
end{description}"
<<
endl
;
}
void
startDescItem
()
{
t
<<
"
\\
item["
;
}
void
endDescItem
()
{
t
<<
"]"
<<
endl
;
}
void
startDescription
()
;
void
endDescription
()
;
void
startDescItem
()
;
void
endDescItem
()
;
void
lineBreak
()
{
t
<<
"
\\
par
\n
"
;
}
void
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
);
void
endMemberDoc
();
...
...
@@ -236,6 +237,7 @@ class LatexGenerator : public OutputGenerator
LatexGenerator
&
operator
=
(
const
LatexGenerator
&
);
int
col
;
bool
insideTabbing
;
bool
firstDescItem
;
};
#endif
src/memberdef.cpp
View file @
422c14b6
...
...
@@ -236,7 +236,7 @@ MemberDef::MemberDef(const char *df,int dl,
//printf("++++++ MemberDef(%s file=%s,line=%d) ++++++ \n",na,df,dl);
classDef
=
0
;
fileDef
=
0
;
fileDec
=
0
;
//
fileDec=0;
redefines
=
0
;
redefinedBy
=
0
;
nspace
=
0
;
...
...
@@ -392,10 +392,10 @@ QCString MemberDef::getOutputFileBase() const
{
return
fileDef
->
getOutputFileBase
();
}
else
if
(
fileDec
)
{
return
fileDec
->
getOutputFileBase
();
}
//
else if (fileDec)
//
{
//
return fileDec->getOutputFileBase();
//
}
else
if
(
nspace
)
{
return
nspace
->
getOutputFileBase
();
...
...
@@ -703,10 +703,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
{
//printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
annMemb
->
writeLink
(
ol
,
annMemb
->
memberClass
(),
annMemb
->
getNamespace
(),
annMemb
->
getClassDef
(),
annMemb
->
getNamespace
Def
(),
annMemb
->
getFileDef
(),
annMemb
->
groupDef
()
annMemb
->
g
etG
roupDef
()
);
annMemb
->
annUsed
=
annUsed
=
TRUE
;
}
...
...
@@ -794,7 +794,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
void
MemberDef
::
writeDocumentation
(
MemberList
*
ml
,
OutputList
&
ol
,
const
char
*
scopeName
)
{
if
(
memberClass
()
==
0
&&
isStatic
()
&&
!
Config
::
extractStaticFlag
)
return
;
if
(
getClassDef
()
==
0
&&
isStatic
()
&&
!
Config
::
extractStaticFlag
)
return
;
bool
hasDocs
=
detailsAreVisible
();
//printf("MemberDef::writeDocumentation(): type=`%s' def=`%s'\n",type.data(),definition());
if
(
...
...
@@ -806,8 +806,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
)
{
// get definition. TODO: make a method of this
NamespaceDef
*
nd
=
getNamespace
();
ClassDef
*
cd
=
memberClass
();
NamespaceDef
*
nd
=
getNamespace
Def
();
ClassDef
*
cd
=
getClassDef
();
FileDef
*
fd
=
getFileDef
();
Definition
*
d
=
0
;
if
(
cd
)
d
=
cd
;
else
if
(
nd
)
d
=
nd
;
else
d
=
fd
;
...
...
@@ -1160,7 +1160,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
MemberDef
*
bmd
=
reimplements
();
ClassDef
*
bcd
=
0
;
if
(
bmd
&&
(
bcd
=
bmd
->
memberClass
()))
if
(
bmd
&&
(
bcd
=
bmd
->
getClassDef
()))
{
#if 0
if (lvirt!=Normal) // search for virtual member of the deepest base class
...
...
@@ -1168,7 +1168,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
MemberDef *lastBmd=bmd;
while (lastBmd)
{
ClassDef *lastBcd = lastBmd->
memberClass
();
ClassDef *lastBcd = lastBmd->
getClassDef
();
if (lastBmd->virtualness()!=Normal &&
lastBmd->isLinkable() &&
lastBcd->isLinkable()
...
...
@@ -1227,7 +1227,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
MemberDef
*
bmd
=
0
;
uint
count
=
0
;
ClassDef
*
bcd
=
0
;
for
(
mli
.
toFirst
();(
bmd
=
mli
.
current
())
&&
(
bcd
=
bmd
->
memberClass
());
++
mli
)
for
(
mli
.
toFirst
();(
bmd
=
mli
.
current
())
&&
(
bcd
=
bmd
->
getClassDef
());
++
mli
)
{
// count the members that directly inherit from md and for
// which the member and class are visible in the docs.
...
...
@@ -1253,7 +1253,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
count
=
0
;
// find the entryIndex-th documented entry in the inheritance list.
for
(
mli
.
toLast
();(
bmd
=
mli
.
current
())
&&
(
bcd
=
bmd
->
memberClass
());
--
mli
)
for
(
mli
.
toLast
();(
bmd
=
mli
.
current
())
&&
(
bcd
=
bmd
->
getClassDef
());
--
mli
)
{
if
(
bmd
->
isLinkable
()
&&
bcd
->
isLinkable
())
{
...
...
@@ -1310,10 +1310,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
void
MemberDef
::
warnIfUndocumented
()
{
if
(
memberGroup
)
return
;
ClassDef
*
cd
=
memberClass
();
NamespaceDef
*
nd
=
getNamespace
();
ClassDef
*
cd
=
getClassDef
();
NamespaceDef
*
nd
=
getNamespace
Def
();
FileDef
*
fd
=
getFileDef
();
GroupDef
*
gd
=
groupDef
();
GroupDef
*
gd
=
g
etG
roupDef
();
Definition
*
d
=
0
;
const
char
*
t
=
0
;
if
(
cd
)
...
...
@@ -1348,7 +1348,7 @@ bool MemberDef::isLinkable()
bool
MemberDef
::
detailsAreVisible
()
const
{
return
!
documentation
().
isEmpty
()
||
// has detailed docs
/*(Config::sourceBrowseFlag && startBodyLine!=-1 && bodyDef) || // has reference to sources */
(
Config
::
sourceBrowseFlag
&&
startBodyLine
!=-
1
&&
bodyDef
)
||
// has reference to sources
(
mtype
==
Enumeration
&&
docEnumValues
)
||
// has enum values
(
mtype
==
EnumValue
&&
!
briefDescription
().
isEmpty
())
||
// is doc enum value
(
!
briefDescription
().
isEmpty
()
&&
...
...
@@ -1385,7 +1385,7 @@ bool MemberDef::visibleMemberGroup(bool hideNoHeader)
QCString
MemberDef
::
getScopeString
()
const
{
QCString
result
;
if
(
memberClass
())
result
=
memberClass
()
->
name
();
else
if
(
getNamespace
())
result
=
getNamespace
()
->
name
();
if
(
getClassDef
())
result
=
getClassDef
()
->
name
();
else
if
(
getNamespace
Def
())
result
=
getNamespaceDef
()
->
name
();
return
result
;
}
src/memberdef.h
View file @
422c14b6
...
...
@@ -72,15 +72,6 @@ class MemberDef : public Definition
const
ArgumentList
*
al
);
~
MemberDef
();
void
writeLink
(
OutputList
&
ol
,
ClassDef
*
cd
,
NamespaceDef
*
nd
,
FileDef
*
fd
,
GroupDef
*
gd
);
void
writeDeclaration
(
OutputList
&
ol
,
ClassDef
*
cd
,
NamespaceDef
*
nd
,
FileDef
*
fd
,
GroupDef
*
gd
,
bool
inGroup
);
void
writeDocumentation
(
MemberList
*
ml
,
OutputList
&
ol
,
const
char
*
scopeName
/*,MemberType m*/
);
void
warnIfUndocumented
();
QCString
getOutputFileBase
()
const
;
const
char
*
declaration
()
const
{
return
decl
;
}
const
char
*
definition
()
const
{
return
def
;
}
...
...
@@ -90,27 +81,49 @@ class MemberDef : public Definition
const
char
*
anchor
()
const
{
return
anc
;
}
const
QCString
&
initializer
()
const
{
return
init
;
}
int
initializerLines
()
const
{
return
initLines
;
}
ClassDef
*
memberClass
()
const
{
return
classDef
;
}
int
getMemberSpecifiers
()
const
{
return
memSpec
;
}
MemberList
*
getSectionList
()
const
{
return
section
;
}
// scope query members
ClassDef
*
getClassDef
()
const
{
return
classDef
;
}
GroupDef
*
getGroupDef
()
const
{
return
group
;
}
FileDef
*
getFileDef
()
const
{
return
fileDef
;
}
NamespaceDef
*
getNamespaceDef
()
const
{
return
nspace
;
}
// direct kind info
Protection
protection
()
const
{
return
prot
;
}
Specifier
virtualness
()
const
{
return
virt
;
}
MemberType
memberType
()
const
{
return
mtype
;
}
GroupDef
*
groupDef
()
const
{
return
group
;
}
FileDef
*
getFileDef
()
{
return
fileDef
;
}
FileDef
*
getFileDec
()
{
return
fileDec
;
}
// convenience methods
bool
isSignal
()
const
{
return
mtype
==
Signal
;
}
bool
isSlot
()
const
{
return
mtype
==
Slot
;
}
bool
isVariable
()
const
{
return
mtype
==
Variable
;
}
bool
isEnumerate
()
const
{
return
mtype
==
Enumeration
;
}
bool
isEnumValue
()
const
{
return
mtype
==
EnumValue
;
}
bool
isTypedef
()
const
{
return
mtype
==
Typedef
;
}
bool
isFunction
()
const
{
return
mtype
==
Function
;
}
bool
isDefine
()
const
{
return
mtype
==
Define
;
}
bool
isFriend
()
const
{
return
mtype
==
Friend
;
}
bool
isRelated
()
const
{
return
related
;
}
bool
isStatic
()
const
{
return
stat
;
}
bool
isInline
()
const
{
return
(
memSpec
&
Entry
::
Inline
)
!=
0
;
}
bool
isExplicit
()
const
{
return
(
memSpec
&
Entry
::
Explicit
)
!=
0
;
}
bool
isMutable
()
const
{
return
(
memSpec
&
Entry
::
Mutable
)
!=
0
;
}
MemberList
*
getSectionList
()
const
{
return
section
;
}
// output info
bool
isLinkableInProject
();
bool
isLinkable
();
bool
detailsAreVisible
()
const
;
bool
hasDocumentation
();
// overrides hasDocumentation in definition.h
// set functions
void
setMemberType
(
MemberType
t
)
{
mtype
=
t
;
}
void
setDefinition
(
const
char
*
d
)
{
def
=
d
;
}
void
setFileDef
(
FileDef
*
fd
)
{
fileDef
=
fd
;
}
void
setFileDec
(
FileDef
*
fd
)
{
fileDec
=
fd
;
}
void
setAnchor
(
const
char
*
a
)
{
anc
=
a
;
}
void
setProtection
(
Protection
p
)
{
prot
=
p
;
}
void
setMemberSpecifiers
(
int
s
)
{
memSpec
=
s
;
}
int
getMemberSpecifiers
()
const
{
return
memSpec
;
}
void
mergeMemberSpecifiers
(
int
s
)
{
memSpec
|=
s
;
}
void
setInitializer
(
const
char
*
i
)
{
init
=
i
;
init
=
init
.
stripWhiteSpace
();
...
...
@@ -119,13 +132,20 @@ class MemberDef : public Definition
void
setMaxInitLines
(
int
lines
)
{
if
(
lines
!=-
1
)
maxInitLines
=
lines
;
}
void
setMemberClass
(
ClassDef
*
cd
)
{
classDef
=
cd
;
}
void
setSectionList
(
MemberList
*
sl
)
{
section
=
sl
;
}
void
makeRelated
()
{
related
=
TRUE
;
}
void
setGroupDef
(
GroupDef
*
gd
)
{
group
=
gd
;
}
bool
hasDocumentation
();
// overrides hasDocumentation in definition.h
bool
isLinkableInProject
();
bool
isLinkable
();
bool
detailsAreVisible
()
const
;
void
makeRelated
()
{
related
=
TRUE
;
}
// output generatation
void
writeLink
(
OutputList
&
ol
,
ClassDef
*
cd
,
NamespaceDef
*
nd
,
FileDef
*
fd
,
GroupDef
*
gd
);
void
writeDeclaration
(
OutputList
&
ol
,
ClassDef
*
cd
,
NamespaceDef
*
nd
,
FileDef
*
fd
,
GroupDef
*
gd
,
bool
inGroup
);
void
writeDocumentation
(
MemberList
*
ml
,
OutputList
&
ol
,
const
char
*
scopeName
/*,MemberType m*/
);
void
warnIfUndocumented
();
// relation to other members
void
setReimplements
(
MemberDef
*
md
)
{
redefines
=
md
;
}
void
insertReimplementedBy
(
MemberDef
*
md
);
...
...
@@ -148,20 +168,9 @@ class MemberDef : public Definition
// example related members
bool
addExample
(
const
char
*
anchor
,
const
char
*
name
,
const
char
*
file
);
//void writeExample(OutputList &ol);
bool
hasExamples
();
ExampleList
*
getExampleList
()
const
{
return
exampleList
;
}
// convenience members
bool
isSignal
()
const
{
return
mtype
==
Signal
;
}
bool
isSlot
()
const
{
return
mtype
==
Slot
;
}
bool
isVariable
()
const
{
return
mtype
==
Variable
;
}
bool
isEnumerate
()
const
{
return
mtype
==
Enumeration
;
}
bool
isEnumValue
()
const
{
return
mtype
==
EnumValue
;
}
bool
isTypedef
()
const
{
return
mtype
==
Typedef
;
}
bool
isFunction
()
const
{
return
mtype
==
Function
;
}
bool
isDefine
()
const
{
return
mtype
==
Define
;
}
bool
isFriend
()
const
{
return
mtype
==
Friend
;
}
// prototype related members
void
setPrototype
(
bool
p
)
{
proto
=
p
;
}
...
...
@@ -178,10 +187,8 @@ class MemberDef : public Definition
ArgumentList
*
scopeDefTemplateArguments
()
const
{
return
scopeTAL
;
}
void
setMemberDefTemplateArguments
(
ArgumentList
*
t
);
ArgumentList
*
memberDefTemplateArguments
()
const
{
return
membTAL
;
}
//QCString getScopeTemplateNameString();
// namespace related members
NamespaceDef
*
getNamespace
()
const
{
return
nspace
;
}
void
setNamespace
(
NamespaceDef
*
nd
)
{
nspace
=
nd
;
}
// member group related members
...
...
@@ -190,6 +197,7 @@ class MemberDef : public Definition
void
setMemberGroupId
(
int
id
)
{
grpId
=
id
;
}
int
getMemberGroupId
()
const
{
return
grpId
;
}
// annonymous scope members
void
setFromAnnonymousScope
(
bool
b
)
{
annScope
=
b
;
}
void
setFromAnnonymousMember
(
MemberDef
*
m
)
{
annMemb
=
m
;
}
bool
fromAnnonymousScope
()
const
{
return
annScope
;
}
...
...
@@ -204,7 +212,6 @@ class MemberDef : public Definition
private
:
ClassDef
*
classDef
;
// member of or related to
FileDef
*
fileDef
;
// member of file definition
FileDef
*
fileDec
;
// member of file declaration
MemberDef
*
redefines
;
// the member that is redefined by this one
MemberDef
*
enumScope
;
// the enclosing scope, if this is an enum field
MemberDef
*
annEnumType
;
// the annonymous enum that is the type of this member
...
...
@@ -225,8 +232,6 @@ class MemberDef : public Definition
QCString
declFile
;
// file where the declaration was found
int
declLine
;
// line where the declaration was found
QCString
def
;
// member definition in code (fully qualified name)
//QCString defFile; // file where the definition was found
//int defLine; // line where the definition was found
QCString
anc
;
// HTML anchor name
Specifier
virt
;
// normal/virtual/pure virtual
Protection
prot
;
// protection type [Public/Protected/Private]
...
...
@@ -237,10 +242,10 @@ class MemberDef : public Definition
bool
eUsed
;
// is the enumerate already placed in a list
bool
proto
;
// is it a prototype;
bool
docEnumValues
;
// is an enum with documented enum values.
bool
annScope
;
bool
annScope
;
// member is part of an annoymous scope
bool
annUsed
;
bool
annShown
;
int
indDepth
;
int
indDepth
;
// indentation depth for this member if inside an annonymous scope
int
maxInitLines
;
// when the initializer will be displayed
MemberList
*
section
;
// declation list containing this member
MemberDef
*
annMemb
;
...
...
@@ -249,7 +254,6 @@ class MemberDef : public Definition
ArgumentList
*
scopeTAL
;
// template argument list of class template
ArgumentList
*
membTAL
;
// template argument list of class template
int
grpId
;
// group id
//QCString grpHeader; // group header
MemberGroup
*
memberGroup
;
// group's member definition
GroupDef
*
group
;
// group in which this member is in
...
...
src/memberlist.cpp
View file @
422c14b6
...
...
@@ -54,7 +54,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe
{
//printf("md=%p md->name()=`%s' inGroup=%d getMemberGroup()=%p\n",
// md,md->name().data(),inGroup,md->getMemberGroup());
if
(
!
(
md
->
memberClass
()
==
0
&&
md
->
isStatic
()
&&
!
Config
::
extractStaticFlag
)
&&
if
(
!
(
md
->
getClassDef
()
==
0
&&
md
->
isStatic
()
&&
!
Config
::
extractStaticFlag
)
&&
(
!
Config
::
hideMemberFlag
||
md
->
hasDocumentation
())
&&
(
(
!
Config
::
hideMemberFlag
||
!
md
->
documentation
().
isEmpty
()
||
...
...
@@ -73,7 +73,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe
case
MemberDef
:
:
Variable
:
varCnt
++
,
m_count
++
;
break
;
case
MemberDef
:
:
Function
:
// fall through
case
MemberDef
:
:
Signal
:
// fall through
case
MemberDef
:
:
Slot
:
if
(
!
md
->
isRelated
()
||
md
->
memberClass
())
case
MemberDef
:
:
Slot
:
if
(
!
md
->
isRelated
()
||
md
->
getClassDef
())
funcCnt
++
,
m_count
++
;
break
;
case
MemberDef
:
:
Enumeration
:
enumCnt
++
,
m_count
++
;
break
;
...
...
@@ -119,7 +119,7 @@ void MemberList::countDocMembers()
//printf("%s MemberList::countDocMembers() details=%d\n",
// md->name().data(),md->detailsAreVisible());
bool
visibleIfStatic
=
!
(
md
->
memberClass
()
==
0
&&
md
->
isStatic
()
&&
!
Config
::
extractStaticFlag
);
!
(
md
->
getClassDef
()
==
0
&&
md
->
isStatic
()
&&
!
Config
::
extractStaticFlag
);
if
(
visibleIfStatic
&&
(
Config
::
extractAllFlag
||
md
->
detailsAreVisible
())
...
...
@@ -410,7 +410,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
{
if
(
(
md
->
isFunction
()
||
md
->
isSignal
()
||
md
->
isSlot
())
&&
(
!
md
->
isRelated
()
||
md
->
memberClass
()
)
&&
(
!
md
->
isRelated
()
||
md
->
getClassDef
()
)
&&
inGroup
==
md
->
visibleMemberGroup
(
sectionPerType
)
)
{
...
...
src/membername.cpp
View file @
422c14b6
...
...
@@ -33,8 +33,8 @@ int MemberName::compareItems(GCI item1, GCI item2)
{
MemberDef
*
m1
=
(
MemberDef
*
)
item1
;
MemberDef
*
m2
=
(
MemberDef
*
)
item2
;
ClassDef
*
c1
=
m1
->
memberClass
();
ClassDef
*
c2
=
m2
->
memberClass
();
ClassDef
*
c1
=
m1
->
getClassDef
();
ClassDef
*
c2
=
m2
->
getClassDef
();
FileDef
*
f1
=
m1
->
getFileDef
();
FileDef
*
f2
=
m2
->
getFileDef
();
if
(
c1
&&
c2
)
...
...
@@ -55,8 +55,8 @@ int MemberNameInfo::compareItems(GCI item1, GCI item2)
{
MemberInfo
*
m1
=
(
MemberInfo
*
)
item1
;
MemberInfo
*
m2
=
(
MemberInfo
*
)
item2
;
ClassDef
*
c1
=
m1
->
memberDef
->
memberClass
();
ClassDef
*
c2
=
m2
->
memberDef
->
memberClass
();
ClassDef
*
c1
=
m1
->
memberDef
->
getClassDef
();
ClassDef
*
c2
=
m2
->
memberDef
->
getClassDef
();
FileDef
*
f1
=
m1
->
memberDef
->
getFileDef
();
FileDef
*
f2
=
m2
->
memberDef
->
getFileDef
();
if
(
c1
&&
c2
)
...
...
src/namespacedef.cpp
View file @
422c14b6
...
...
@@ -66,13 +66,22 @@ void NamespaceDef::distributeMemberGroupDocumentation()
}
void
NamespaceDef
::
insertUsedFile
(
const
char
*
f
)
{
if
(
files
.
find
(
f
)
==-
1
)
files
.
append
(
f
);
if
(
files
.
find
(
f
)
==-
1
)
{
if
(
Config
::
sortMembersFlag
)
files
.
inSort
(
f
);
else
files
.
append
(
f
);
}
}
void
NamespaceDef
::
insertClass
(
ClassDef
*
cd
)
{
if
(
classDict
->
find
(
cd
->
name
())
==
0
)
{
if
(
Config
::
sortMembersFlag
)
classList
->
inSort
(
cd
);
else
classList
->
append
(
cd
);
classDict
->
insert
(
cd
->
name
(),
cd
);
}
...
...
@@ -121,13 +130,48 @@ void NamespaceDef::insertMember(MemberDef *md)
allMemberList
.
append
(
md
);
switch
(
md
->
memberType
())
{
case
MemberDef
:
:
Variable
:
varMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Function
:
funcMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Typedef
:
typedefMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Enumeration
:
enumMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
EnumValue
:
enumValMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Prototype
:
protoMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Define
:
defineMembers
.
inSort
(
md
);
break
;
case
MemberDef
:
:
Variable
:
if
(
Config
::
sortMembersFlag
)
varMembers
.
inSort
(
md
);
else
varMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Function
:
if
(
Config
::
sortMembersFlag
)
funcMembers
.
inSort
(
md
);
else
funcMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Typedef
:
if
(
Config
::
sortMembersFlag
)
typedefMembers
.
inSort
(
md
);
else
typedefMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Enumeration
:
if
(
Config
::
sortMembersFlag
)
enumMembers
.
inSort
(
md
);
else
enumMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
EnumValue
:
if
(
Config
::
sortMembersFlag
)
enumValMembers
.
inSort
(
md
);
else
enumValMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Prototype
:
if
(
Config
::
sortMembersFlag
)
protoMembers
.
inSort
(
md
);
else
protoMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Define
:
if
(
Config
::
sortMembersFlag
)
defineMembers
.
inSort
(
md
);
else
defineMembers
.
append
(
md
);
break
;
default
:
err
(
"NamespaceDef::insertMembers(): unexpected member inserted in namespace!
\n
"
);
}
...
...
src/pre.l
View file @
422c14b6
...
...
@@ -51,8 +51,6 @@
#define YY_NEVER_INTERACTIVE 1
#define DUMP_OUTPUT 1 // set this to one to see what the preprocessor
// produces.
#define SHOW_INCLUDES 0 // set this to one to list all parsed include files
struct FileState
...
...
@@ -590,10 +588,10 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
if (g_expandedDict->find(macroName)==0) // expand macro
{
Define *def=isDefined(macroName);
//printf("name is not an expanded macro def=%s\n",def ? def->name.data() : 0);
if (def && def->nargs==-1) // simple macro
{
// substitute the definition of the macro
//printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data());
expMacro=def->definition.stripWhiteSpace();
replaced=TRUE;
len=l;
...
...
@@ -774,6 +772,7 @@ Define *newDefine()
def->fileName = g_yyFileName;
def->lineNr = g_yyLineNr;
def->varArgs = g_defVarArgs;
//printf("newDefine: `%s'->`%s'\n",def->name.data(),def->definition.data());
if (!def->name.isEmpty() && expandAsDefinedDict[def->name])
{
def->isPredefined=TRUE;
...
...
@@ -1520,7 +1519,7 @@ BN [ \t\r\n]
g_defLitText+=yytext;
outputChar('\n');
Define *def=0;
//printf("Define name=`%s' text=`%s'
\n",g_defName.data(),g_def
Text.data());
//printf("Define name=`%s' text=`%s'
litTexti=`%s'\n",g_defName.data(),g_defText.data(),g_defLit
Text.data());
if (g_includeStack.isEmpty())
{
addDefine();
...
...
@@ -1528,10 +1527,12 @@ BN [ \t\r\n]
def=g_fileDefineDict->find(g_defName);
if (def==0) // new define
{
//printf("new define!\n");
g_fileDefineDict->insert(g_defName,newDefine());
}
else if (def)// name already exists
{
//printf("existing define!\n");
//printf("define found\n");
if (def->undef) // undefined name
{
...
...
@@ -1860,23 +1861,21 @@ void preprocessFile(const char *fileName,BufStr &output)
else
pclose(preYYin);
//#if DUMP_OUTPUT
if (Debug::isFlagSet(Debug::Preprocessor))
{
char *orgPos=output.data()+orgOffset;
char *newPos=output.data()+output.curPos();
printf
("Preprocessor output (size: %d bytes):\n",newPos-orgPos);
msg
("Preprocessor output (size: %d bytes):\n",newPos-orgPos);
int line=1;
printf
("---------\n00001 ");
msg
("---------\n00001 ");
while (orgPos<newPos)
{
putchar(*orgPos);
if (*orgPos=='\n') printf("%05d ",++line);
orgPos++;
}
printf
("\n---------\n");
msg
("\n---------\n");
}
//#endif
}
extern "C" { // some bogus code to keep the compiler happy
...
...
src/rtfgen.cpp
View file @
422c14b6
...
...
@@ -650,7 +650,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
bool
found
=
FALSE
;
while
(
gd
&&
!
found
)
{
if
(
gd
->
isLinkableInProject
()
||
gd
->
countMembers
()
>
0
)
if
(
gd
->
countMembers
()
>
0
)
{
beginRTFChapter
();
found
=
TRUE
;
...
...
@@ -666,7 +666,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
bool
found
=
FALSE
;
while
(
nd
&&
!
found
)
{
if
(
nd
->
isLinkableInProject
())
if
(
nd
->
isLinkableInProject
()
&&
nd
->
countMembers
()
>
0
)
{
beginRTFChapter
();
found
=
TRUE
;
...
...
@@ -840,7 +840,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
bool
found
=
FALSE
;
while
(
nd
&&
!
found
)
{
if
(
nd
->
isLinkableInProject
()
||
nd
->
countMembers
()
>
0
)
if
(
nd
->
isLinkableInProject
()
&&
nd
->
countMembers
()
>
0
)
{
t
<<
"
\\
par "
<<
Rtf_Style
[
"Reset"
]
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
...
...
@@ -852,7 +852,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
}
while
(
nd
)
{
if
(
nd
->
isLinkableInProject
()
||
nd
->
countMembers
()
>
0
)
if
(
nd
->
isLinkableInProject
()
&&
nd
->
countMembers
()
>
0
)
{
t
<<
"
\\
par "
<<
Rtf_Style
[
"Reset"
]
<<
endl
;
beginRTFSection
();
...
...
src/scanner.l
View file @
422c14b6
...
...
@@ -2449,7 +2449,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
lineCount();
BEGIN( CompoundName );
}
<FindMembers>{B}*(
"disp")?"interface"
{BN}+ { // M$/Corba IDL interface
<FindMembers>{B}*(
(("disp")?"interface")|"valuetype")
{BN}+ { // M$/Corba IDL interface
isTypedef=FALSE;
current->section = Entry::INTERFACE_SEC;
addType( current ) ;
...
...
@@ -3157,6 +3157,8 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
//printf("adding `%s' `%s' `%s' to enum `%s' (mGrpId=%d)\n",
// current->type.data(), current->name.data(),
// current->args.data(), current_root->name.data(),current->mGrpId);
if (!current->name.isEmpty())
{
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->type = "@"; // enum marker
...
...
@@ -3176,6 +3178,11 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
current->slot = slot;
current->mGrpId = memberGroupId;
}
else // probably a redundant ,
{
current->reset();
}
}
/*
<FindFieldArg>"," { unput(*yytext); BEGIN(FindFields); }
*/
...
...
src/translator_cz.h
View file @
422c14b6
...
...
@@ -27,33 +27,60 @@
//
// havran@fel.cvut.cz, 1999/04/11
//
// The first version of Czech strings with diacritics was implemented by
// Petr Prikryl (prikrylp@skil.cz). Vlastimil Havran is still
// the maintainer. The translation was based on translator.h
// of Doxygen versison 1.1.4 (from scratch) and updated for 1.1.5
// (including important updates of the up-to-1.1.4 strings).
// Updates:
// --------
// 2000/06/20
// - The prototype version of Czech strings with diacritics implemented by
// Petr Prikryl (prikrylp@skil.cz). (Vlastimil Havran is still
// the maintainer.) The translation was based on translator.h
// of Doxygen versison 1.1.4 (from scratch).
//
// The Czech strings in this file were first written in Windows 1250
// encoding. The conditional compilation ensures or the neutral
// functionality of the macro DECODE, or calling the WinToISO()
// method for on-line encoding conversion. If you want to maintain
// the source in the ISO Latin-2, do convert the source, change the
// conditional definition of the DECODE macro using the method
// ISOToWin() -- for conversion of strings for the Windows version.
// The version which does not call the function is slightly faster.
// 2000/07/10 (Petr Prikryl)
// - Updated version based on 1.1.5 sources (including important updates
// of the up-to-1.1.4 strings). Czech strings this file were written
// in windows-1250 encoding. On-line decoding into iso-8859-2 ensured
// via conditional compilation if the sources are compiled under UNIX.
//
// Notice: Only one of the following tables is necessary for
// the support as well as the only one conversion private method
// of the TranslatorCzech class. However, the prototype was created
// under WindowsNT thus using Windows 1250 encoding. The second
// table and the method are here to switch to the ISO Latin-2
// smoothly. And also, there is not a big loose of space when both
// tables and methods are supported.
/*! Translation tables for characters >127. They should work,
* but I would not put my hand into fire for that.
*/
static
const
char
WinToISOTab
[]
=
{
// 2000/07/19 (Petr Prikryl)
// - Encoding conversion tables moved to the methods that use them.
// - Updates for "new since 1.1.5".
//
// Notices:
// --------
// The conditional compilation ensures or the neutral functionality
// of the macro DECODE, or calling the WinToISO() method for
// on-line encoding conversion. If you want to maintain the source
// in the iso-8859-2, do convert the source, change the conditional
// definition of the DECODE macro using the method ISOToWin() --
// for conversion of strings for the Windows version. The version
// which does not call the function is slightly faster.
//
// Only one of the private method WinToISO() and ISOToWin() is
// necessary depending on whether this source is maintained in
// windows-1250 or iso-8859-2 encoding. However, there is not a
// big loose of space when both methods with the conversion tables
// are supported. The other (not used now) may be handy in future.
// Do not erase it.
// Here the DECODE macro assumes the source written in Windows encoding.
//
#ifdef _WIN32
#define DECODE(sInput) sInput
#else
#define DECODE(sInput) WinToISO(sInput)
#endif
class
TranslatorCzech
:
public
Translator
{
private
:
/*! returns the string converted from windows-1250 to iso-8859-2 */
QCString
WinToISO
(
const
QCString
sInput
)
{
// The conversion table for characters >127
//
static
const
char
WinToISOTab
[]
=
{
'\x80'
,
'\x81'
,
'\x82'
,
'\x83'
,
'\x84'
,
'\x85'
,
'\x86'
,
'\x87'
,
'\x88'
,
'\x89'
,
'\xA9'
,
'\x8B'
,
'\xA6'
,
'\xAB'
,
'\xAE'
,
'\xAC'
,
'\x90'
,
'\x91'
,
'\x92'
,
'\x93'
,
'\x94'
,
'\x2E'
,
'\x96'
,
'\x97'
,
...
...
@@ -71,9 +98,25 @@ static const char WinToISOTab[] = {
'\xF0'
,
'\xF1'
,
'\xF2'
,
'\xF3'
,
'\xF4'
,
'\xF5'
,
'\xF6'
,
'\x2D'
,
'\xF8'
,
'\xF9'
,
'\xFA'
,
'\xFB'
,
'\xFC'
,
'\xFD'
,
'\xFE'
,
'\xFF'
,
'\0'
};
};
QCString
result
;
int
len
=
sInput
.
length
();
static
const
char
ISOToWinTab
[]
=
{
for
(
int
i
=
0
;
i
<
len
;
++
i
)
{
unsigned
int
c
=
sInput
[
i
];
result
+=
(
c
>
127
)
?
WinToISOTab
[
c
&
0x7F
]
:
c
;
}
return
result
;
}
/*! returns the string converted from iso-8859-2 to windows-1250 */
QCString
ISOToWin
(
const
QCString
sInput
)
{
// The conversion table for characters >127
//
static
const
char
ISOToWinTab
[]
=
{
'\x80'
,
'\x81'
,
'\x82'
,
'\x83'
,
'\x84'
,
'\x85'
,
'\x86'
,
'\x87'
,
'\x88'
,
'\x89'
,
'\x8A'
,
'\x8B'
,
'\x8C'
,
'\x8D'
,
'\x8E'
,
'\x8F'
,
'\x90'
,
'\x91'
,
'\x92'
,
'\x93'
,
'\x94'
,
'\x95'
,
'\x96'
,
'\x97'
,
...
...
@@ -91,39 +134,7 @@ static const char ISOToWinTab[] = {
'\xF0'
,
'\xF1'
,
'\xF2'
,
'\xF3'
,
'\xF4'
,
'\xF5'
,
'\xF6'
,
'\xF7'
,
'\xF8'
,
'\xF9'
,
'\xFA'
,
'\xFB'
,
'\xFC'
,
'\xFD'
,
'\xFE'
,
'\xFF'
,
'\0'
};
// Here the DECODE macro assumes the source written in Win1250 encoding.
//
#ifdef _WIN32
#define DECODE(sInput) sInput
#else
#define DECODE(sInput) WinToISO(sInput)
#endif
class
TranslatorCzech
:
public
Translator
{
private
:
/*! returns the string converted from Win1250 to ISO Latin-2 */
QCString
WinToISO
(
const
QCString
sInput
)
{
QCString
result
;
int
len
=
sInput
.
length
();
for
(
int
i
=
0
;
i
<
len
;
++
i
)
{
unsigned
int
c
=
sInput
[
i
];
result
+=
(
c
>
127
)
?
WinToISOTab
[
c
&
0x7F
]
:
c
;
}
return
result
;
}
/*! returns the string converted from ISO Latin-2 to Win1250 */
QCString
ISOToWin
(
const
QCString
sInput
)
{
};
QCString
result
;
int
len
=
sInput
.
length
();
...
...
@@ -136,6 +147,8 @@ class TranslatorCzech : public Translator
}
public
:
// --- Language contol methods -------------------
virtual
QCString
idLanguage
()
{
return
"czech"
;
}
...
...
@@ -146,6 +159,18 @@ class TranslatorCzech : public Translator
virtual
QCString
latexBabelPackage
()
{
return
""
;
}
/*! return the language charset. This will be used for the HTML output */
virtual
QCString
idLanguageCharset
()
{
#ifdef _WIN32
return
"windows-1250"
;
#else
return
"iso-8859-2"
;
#endif
}
// --- Language translation methods -------------------
/*! used in the compound documentation before a list of related functions. */
virtual
QCString
trRelatedFunctions
()
{
return
DECODE
(
"Související funkce"
);
}
...
...
@@ -567,7 +592,7 @@ class TranslatorCzech : public Translator
/*! this text is generated when the \return command is used. */
virtual
QCString
trReturns
()
{
return
DECODE
(
"
Vrací
"
);
}
{
return
DECODE
(
"
Návratová hodnota
"
);
}
/*! this text is generated when the \sa command is used. */
virtual
QCString
trSeeAlso
()
...
...
@@ -642,7 +667,7 @@ class TranslatorCzech : public Translator
/*! used as the title of the HTML page of a file */
virtual
QCString
trFileReference
(
const
char
*
fileName
)
{
QCString
result
=
"Dokumentace souboru "
;
QCString
result
(
"Dokumentace souboru "
)
;
result
+=
fileName
;
return
DECODE
(
result
);
}
...
...
@@ -650,7 +675,7 @@ class TranslatorCzech : public Translator
/*! used as the title of the HTML page of a namespace */
virtual
QCString
trNamespaceReference
(
const
char
*
namespaceName
)
{
QCString
result
(
"Dokumentace prost
r
oru jmen "
);
QCString
result
(
"Dokumentace prostoru jmen "
);
result
+=
namespaceName
;
return
DECODE
(
result
);
}
...
...
@@ -718,7 +743,10 @@ class TranslatorCzech : public Translator
*/
virtual
QCString
trInheritedByList
(
int
numEntries
)
{
return
DECODE
(
"Zdìdìna tøídami "
+
trWriteList
(
numEntries
)
+
"."
);
QCString
result
(
"Zdìdìna "
);
result
+=
(
numEntries
==
1
)
?
"tøídou "
:
"tøídami "
;
result
+=
trWriteList
(
numEntries
)
+
"."
;
return
DECODE
(
result
);
}
/*! used in member documentation blocks to produce a list of
...
...
@@ -726,7 +754,10 @@ class TranslatorCzech : public Translator
*/
virtual
QCString
trReimplementedFromList
(
int
numEntries
)
{
return
DECODE
(
"Reimplementace metody tøídy "
+
trWriteList
(
numEntries
)
+
"."
);
QCString
result
(
"Reimplementuje "
);
result
+=
(
numEntries
==
1
)
?
"metodu tøídy "
:
"metody tøíd "
;
result
+=
trWriteList
(
numEntries
)
+
"."
;
return
DECODE
(
result
);
}
/*! used in member documentation blocks to produce a list of
...
...
@@ -734,7 +765,10 @@ class TranslatorCzech : public Translator
*/
virtual
QCString
trReimplementedInList
(
int
numEntries
)
{
return
DECODE
(
"Reimplementováno v "
+
trWriteList
(
numEntries
)
+
"."
);
QCString
result
(
"Reimplementováno "
);
result
+=
(
numEntries
==
1
)
?
"tøídou "
:
"tøídami "
;
result
+=
trWriteList
(
numEntries
)
+
"."
;
return
DECODE
(
result
);
}
/*! This is put above each page as a link to all members of namespaces. */
...
...
@@ -1010,6 +1044,90 @@ class TranslatorCzech : public Translator
{
return
DECODE
(
"Od"
);
// ??? not checked in a context
}
////////////////////////////////////////////////////////////////////////////
// new since 1.1.5
//////////////////////////////////////////////////////////////////////////
/*! title of the graph legend page */
virtual
QCString
trLegendTitle
()
{
return
DECODE
(
"Vysvìtlivky ke grafu"
);
}
/*! page explaining how the dot graph's should be interpreted */
virtual
QCString
trLegendDocs
()
{
QCString
result
(
"Zde naleznete vysvìtlení, jak mají být interpretovány grafy, "
"které byly generovány programem doxygen.<p>
\n
"
"Uvaujte následující pøíklad:
\n
"
"
\\
code
\n
"
"/*! Neviditelná tøída, která se v grafu nezobrazuje, protoe "
"dolo k oøezání grafu. */
\n
"
"class Invisible { };
\n\n
"
"/*! Tøída, u které dolo k oøezání grafu. Vztah dìdiènosti "
"je skryt. */
\n
"
"class Truncated : public Invisible { };
\n\n
"
"/* Tøída, která není dokumentována komentáøi programu doxygen. */
\n
"
"class Undocumented { };
\n\n
"
"/*! Odvozená tøída s veøejným (public) dìdìním bázové tøídy. */
\n
"
"class PublicBase : public Truncated { };
\n\n
"
"/*! Odvozená tøída s chránìným (protected) dìdìním bázové tøídy. */
\n
"
"class ProtectedBase { };
\n\n
"
"/*! Odvozená tøída s privátním dìdìním bázové tøídy. */
\n
"
"class PrivateBase { };
\n\n
"
"/*! Tøída, která je vyuívána tøídou Inherited. */
\n
"
"class Used { };
\n\n
"
"/*! Odvozená tøída, která rùzným zpùsobem dìdí z více bázových "
"tøíd. */
\n
"
"class Inherited : public PublicBase,
\n
"
" protected ProtectedBase,
\n
"
" private PrivateBase,
\n
"
" public Undocumented
\n
"
"{
\n
"
" private:
\n
"
" Used *m_usedClass;
\n
"
"};
\n
"
"
\\
endcode
\n
"
"Pokud je poloka
\\
c MAX_DOT_GRAPH_HEIGHT konfiguraèního souboru "
"nastavena na hodnotu 200, bude vygenerován následující graf:"
"<p><center><img src=
\"
graph_legend.gif
\"
></center>
\n
"
"<p>
\n
"
"Bloky (tj. uzly) v uvedeném grafu mají následující význam:
\n
"
"<ul>
\n
"
"<li>Èernì vyplnìný obdélník reprezentuje strukturu nebo tøídu, "
"pro kterou byl graf generován.
\n
"
"<li>Obdélník s èerným obrysem oznaèuje dokumentovanou "
"strukturu nebo tøídu.
\n
"
"<li>Obdélník s edým obrysem oznaèuje nedokumentovanou "
"strukturu nebo tøídu.
\n
"
"<li>Obdélník s èerveným obrysem oznaèuje dokumentovanou "
"strukturu nebo tøídu, pro kterou
\n
"
"nejsou zobrazeny vechny vztahy dìdiènosti nebo obsaení. "
"Graf je oøezán v pøípadì, kdy jej
\n
"
"není moné umístit do vymezených hranic.
\n
"
"</ul>
\n
"
"ipky (tj. hrany grafu) mají následující význam:
\n
"
"<ul>
\n
"
"<li>Tmavì modrá ipka se pouívá pro oznaèení vztahu veøejné "
"dìdiènosti mezi dvìma tøídami.
\n
"
"<li>Tmavì zelená ipka oznaèuje vztah chránìné dìdiènosti "
"(protected).
\n
"
"<li>Tmavì èervená ipka oznaèuje vztah privátní dìdiènosti.
\n
"
"<li>Purpurová ipka kreslená èárkovanì se pouívá v pøípadì, "
"kdy je tøída obsaena v jiné tøídì,
\n
"
"nebo kdy je pouívána jinou tøídou. Je oznaèena identifikátorem "
"jedné nebo více promìných, pøes které
\n
"
"je tøída nebo struktura zpøístupnìna.
\n
"
"</ul>
\n
"
);
return
DECODE
(
result
);
}
/*! text for the link to the legend page */
virtual
QCString
trLegend
()
{
return
DECODE
(
"vysvìtlivky"
);
}
};
#endif // TRANSLATOR_CZ_H
src/translator_nl.h
View file @
422c14b6
...
...
@@ -583,10 +583,119 @@ class TranslatorDutch : public Translator
return
"Static Private Attributen"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a todo item */
QCString
trTodo
()
{
return
"Todo"
;
}
/*! Used as the header of the todo list */
QCString
trTodoList
()
{
return
"Todo Lijst"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.4
//////////////////////////////////////////////////////////////////////////
QCString
trReferencedBy
()
{
return
"Wordt aangeroepen door"
;
}
QCString
trRemarks
()
{
return
"Opmerkingen"
;
}
QCString
trAttention
()
{
return
"Attentie"
;
}
QCString
trInclByDepGraph
()
{
return
"Deze graaf geeft aan welke files direct of "
"indirect afhankelijk zijn van deze file:"
;
}
QCString
trSince
()
{
return
"Sinds"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.
1
// new since 1.1.
5
//////////////////////////////////////////////////////////////////////////
/*! title of the graph legend page */
QCString
trLegendTitle
()
{
return
"Graaf Legenda"
;
}
/*! page explaining how the dot graph's should be interpreted */
QCString
trLegendDocs
()
{
return
"Deze pagina legt uit hoe de grafen die gegenereerd worden door doxygen "
"geïnterpreteerd dienen te worden.<p>
\n
"
"Beschouw het volgende voorbeeld:
\n
"
"
\\
code
\n
"
"/*! Onzichtbare klasse vanwege afkappen van de graaf */
\n
"
"class Invisible { };
\n\n
"
"/*! Afgekapte klasse, overervingsrelatie is verborgen */
\n
"
"class Truncated : public Invisible { };
\n\n
"
"/* Klasse is niet gedocumenteerd met doxygen commentaar */
\n
"
"class Undocumented { };
\n\n
"
"/*! Klasse met public inheritance */
\n
"
"class PublicBase : public Truncated { };
\n\n
"
"/*! Klasse met protected inheritance */
\n
"
"class ProtectedBase { };
\n\n
"
"/*! Klasse met private inheritance */
\n
"
"class PrivateBase { };
\n\n
"
"/*! Klasse die wordt gebruikt door de klasse Inherited */
\n
"
"class Used { };
\n\n
"
"/*! Super klasse die overerft van een aantal andere klassen */
\n
"
"class Inherited : public PublicBase,
\n
"
" protected ProtectedBase,
\n
"
" private PrivateBase,
\n
"
" public Undocumented
\n
"
"{
\n
"
" private:
\n
"
" Used *m_usedClass;
\n
"
"};
\n
"
"
\\
endcode
\n
"
"Als de
\\
c MAX_DOT_GRAPH_HEIGHT tag in the configuratie file "
"op 200 gezet is, zal het bestaande voorbeeld resulteren in de volgende graaf:"
"<p><center><img src=
\"
graph_legend.gif
\"
></center>
\n
"
"<p>
\n
"
"De rechthoeken in the bovenstaande graaf hebben de volgende betekenis:
\n
"
"<ul>
\n
"
"<li>Een gevulde zwarte rechthoek representeert de structure of klasse waarvoor "
"de graaf is gegeneerd.
\n
"
"<li>Een rechthoek met een zwarte rand representeert een gedocumenteerde structure of klasse.
\n
"
"<li>Een rechthoek met een grijze rand representeert een ongedocumenteerde structure of klasse.
\n
"
"<li>Een rechthoek met een rode rand representeert een gedocumenteerde structure or klasse waarvoor
\n
"
"niet alle overervings- of gebruiksrelaties konden worden getoond. Een graaf wordt "
"afgekapt als hij niet past binnen de gespecificeerde grenzen."
"</ul>
\n
"
"De pijlen hebben de volgende betekenis:
\n
"
"<ul>
\n
"
"<li>Een donkerblauwe pijl visualizeert een public inheritance "
"relatie tussen twee klassen.
\n
"
"<li>Een donkergroene pijl wordt gebruikt voor protected inheritance.
\n
"
"<li>Een donkerrode pijl wordt gebruikt voor private inheritance.
\n
"
"<li>Een paars gestreepte pijl wordt gebruikt indien een klasse bevat is of gebruikt wordt "
"door een andere klasse. De pijl is gelabeled met de variable(n) "
"die toegang geven tot de aangewezen klasse of structure.
\n
"
"</ul>
\n
"
;
}
/*! text for the link to the legend page */
QCString
trLegend
()
{
return
"legenda"
;
}
};
#endif
src/translator_pt.h
0 → 100644
View file @
422c14b6
/******************************************************************************
*
*
*
* Copyright (C) 1997-2000 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
* The translation into Portuguese was provided by
* Rui Godinho Lopes <ruiglopes@yahoo.com>
*/
#ifndef TRANSLATOR_PT_H
#define TRANSLATOR_PT_H
#include "translator.h"
class
TranslatorPortuguese
:
public
Translator
{
public
:
QCString
idLanguage
()
{
return
"portuguese"
;
}
/*! returns the name of the package that is included by LaTeX */
QCString
latexBabelPackage
()
{
return
"portuguese"
;
}
/*! used in the compound documentation before a list of related functions. */
QCString
trRelatedFunctions
()
{
return
"Funções associadas"
;
}
/*! subscript for the related functions. */
QCString
trRelatedSubscript
()
{
return
"(Note que não são funções membro)"
;
}
/*! header that is put before the detailed description of files, classes and namespaces. */
QCString
trDetailedDescription
()
{
return
"Descrição detalhada"
;
}
/*! header that is put before the list of typedefs. */
QCString
trMemberTypedefDocumentation
()
{
return
"Documentação de tipos definidos"
;
}
/*! header that is put before the list of enumerations. */
QCString
trMemberEnumerationDocumentation
()
{
return
"Documentação da enumerações"
;
}
/*! header that is put before the list of member functions. */
QCString
trMemberFunctionDocumentation
()
{
return
"Documentação dos métodos"
;
}
/*! header that is put before the list of member attributes. */
QCString
trMemberDataDocumentation
()
{
return
"Documentação dos dados"
;
}
/*! this is the text of a link put after brief descriptions. */
QCString
trMore
()
{
return
"Mais..."
;
}
/*! put in the class documentation */
QCString
trListOfAllMembers
()
{
return
"Mostrar lista completa dos membros"
;
}
/*! used as the title of the "list of all members" page of a class */
QCString
trMemberList
()
{
return
"Lista dos membros"
;
}
/*! this is the first part of a sentence that is followed by a class name */
QCString
trThisIsTheListOfAllMembers
()
{
return
"Esta é a lista completa dos membros de "
;
}
/*! this is the remainder of the sentence after the class name */
QCString
trIncludingInheritedMembers
()
{
return
", incluindo todos os membros herdados."
;
}
/*! this is put at the author sections at the bottom of man pages.
* parameter s is name of the project name.
*/
QCString
trGeneratedAutomatically
(
const
char
*
s
)
{
QCString
result
=
"Gerado automaticamente por Doxygen"
;
if
(
s
)
result
+=
(
QCString
)
" para "
+
s
;
result
+=
" a partir do código fonte."
;
return
result
;
}
/*! put after an enum name in the list of all members */
QCString
trEnumName
()
{
return
"enumeração"
;
}
/*! put after an enum value in the list of all members */
QCString
trEnumValue
()
{
return
"valor enumerado"
;
}
/*! put after an undocumented member in the list of all members */
QCString
trDefinedIn
()
{
return
"definido em"
;
}
/*! put as in introduction in the verbatim header file of a class.
* parameter f is the name of the include file.
*/
QCString
trIncludeFile
()
{
return
"Ficheiro incluído"
;
}
QCString
trVerbatimText
(
const
char
*
f
)
{
return
(
QCString
)
"Este texto foi originado pelo ficheiro incluído "
+
f
+
"."
;
}
// quick reference sections
/*! This is put above each page as a link to the list of all groups of
* compounds or files (see the \group command).
*/
QCString
trModules
()
{
return
"Módulos"
;
}
/*! This is put above each page as a link to the class hierarchy */
QCString
trClassHierarchy
()
{
return
"Hierarquia de classes"
;
}
/*! This is put above each page as a link to the list of annotated classes */
QCString
trCompoundList
()
{
return
"Lista de componentes"
;
/*! This is put above each page as a link to the list of documented files */
}
QCString
trFileList
()
{
return
"Lista de ficheiros"
;
}
/*! This is put above each page as a link to the list of all verbatim headers */
QCString
trHeaderFiles
()
{
return
"Ficheiros Incluídos"
;
}
/*! This is put above each page as a link to all members of compounds. */
QCString
trCompoundMembers
()
{
return
"Componentes"
;
}
/*! This is put above each page as a link to all members of files. */
QCString
trFileMembers
()
{
return
"Declarações"
;
}
/*! This is put above each page as a link to all related pages. */
QCString
trRelatedPages
()
{
return
"Paginas relacionadas"
;
}
/*! This is put above each page as a link to all examples. */
QCString
trExamples
()
{
return
"Exemplos"
;
}
/*! This is put above each page as a link to the search engine. */
QCString
trSearch
()
{
return
"Localizar"
;
}
/*! This is an introduction to the class hierarchy. */
QCString
trClassHierarchyDescription
()
{
return
"Esta lista de heranças está organizada, dentro do possível, por ordem alfabética:"
;
}
/*! This is an introduction to the list with all files. */
QCString
trFileListDescription
(
bool
extractAll
)
{
QCString
result
=
"Lista de todos os ficheiros "
;
if
(
!
extractAll
)
result
+=
"documentados "
;
result
+=
"com uma breve descrição:"
;
return
result
;
}
/*! This is an introduction to the annotated compound list. */
QCString
trCompoundListDescription
()
{
return
"Lista da classes, estruturas, uniões e interfaces com uma breve descrição:"
;
}
/*! This is an introduction to the page with all class members. */
QCString
trCompoundMembersDescription
(
bool
extractAll
)
{
QCString
result
=
"Lista de todas as funções membro "
;
if
(
!
extractAll
)
result
+=
"documentadas "
;
result
+=
"com links para "
;
if
(
extractAll
)
result
+=
"a documentação da classe correspondente:"
;
else
result
+=
"o ficheiro a que pertencem:"
;
return
result
;
}
/*! This is an introduction to the page with all file members. */
QCString
trFileMembersDescription
(
bool
extractAll
)
{
QCString
result
=
"Lista de todas as funções membro "
;
if
(
!
extractAll
)
result
+=
"documentadas "
;
result
+=
"com links para "
;
if
(
extractAll
)
result
+=
"a documentação correspondente:"
;
else
result
+=
"os ficheiros onde foram definidas:"
;
return
result
;
}
/*! This is an introduction to the page with the list of all header files. */
QCString
trHeaderFilesDescription
()
{
return
"Lista de todos os ficheiros cabeçalho que constituem a API:"
;
}
/*! This is an introduction to the page with the list of all examples */
QCString
trExamplesDescription
()
{
return
"Lista de todos os exemplos:"
;
}
/*! This is an introduction to the page with the list of related pages */
QCString
trRelatedPagesDescription
()
{
return
"Lista de documentação relacionada:"
;
}
/*! This is an introduction to the page with the list of class/file groups */
QCString
trModulesDescription
()
{
return
"Lista de todos os módulos:"
;
}
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
*/
QCString
trNoDescriptionAvailable
()
{
return
"Nenhuma descrição disponível"
;
}
// index titles (the project name is prepended for these)
/*! This is used in HTML as the title of index.html. */
QCString
trDocumentation
()
{
return
"Documentação"
;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all groups.
*/
QCString
trModuleIndex
()
{
return
"Índice dos módulos"
;
}
/*! This is used in LaTeX as the title of the chapter with the
* class hierarchy.
*/
QCString
trHierarchicalIndex
()
{
return
"Índice da hierarquia"
;
}
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index.
*/
QCString
trCompoundIndex
()
{
return
"Índice dos componentes"
;
}
/*! This is used in LaTeX as the title of the chapter with the
* list of all files.
*/
QCString
trFileIndex
()
{
return
"Índice dos ficheiros"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
*/
QCString
trModuleDocumentation
()
{
return
"Documentação do módulo"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all classes, structs and unions.
*/
QCString
trClassDocumentation
()
{
return
"Documentação da classe"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all files.
*/
QCString
trFileDocumentation
()
{
return
"Documentação do ficheiro"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
*/
QCString
trExampleDocumentation
()
{
return
"Documentação do exemplo"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages.
*/
QCString
trPageDocumentation
()
{
return
"Documentação da página"
;
}
/*! This is used in LaTeX as the title of the document */
QCString
trReferenceManual
()
{
return
"Manual de referência"
;
}
/*! This is used in the documentation of a file as a header before the
* list of defines
*/
QCString
trDefines
()
{
return
"Definição de macros"
;
}
/*! This is used in the documentation of a file as a header before the
* list of function prototypes
*/
QCString
trFuncProtos
()
{
return
"Protótipos de funções"
;
}
/*! This is used in the documentation of a file as a header before the
* list of typedefs
*/
QCString
trTypedefs
()
{
return
"Definição de tipos"
;
}
/*! This is used in the documentation of a file as a header before the
* list of enumerations
*/
QCString
trEnumerations
()
{
return
"Enumerações"
;
}
/*! This is used in the documentation of a file as a header before the
* list of (global) functions
*/
QCString
trFunctions
()
{
return
"Funções"
;
}
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
QCString
trVariables
()
{
return
"Variáveis"
;
}
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
QCString
trEnumerationValues
()
{
return
"Valores da enumeração"
;
}
/*! This is used in man pages as the author section. */
QCString
trAuthor
()
{
return
"Autor"
;
}
/*! This is used in the documentation of a file before the list of
* documentation blocks for defines
*/
QCString
trDefineDocumentation
()
{
return
"Documentação da macro"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes
*/
QCString
trFunctionPrototypeDocumentation
()
{
return
"Documentação do protótipo da função"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for typedefs
*/
QCString
trTypedefDocumentation
()
{
return
"Documentação do tipo"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
*/
QCString
trEnumerationTypeDocumentation
()
{
return
"Documentação do tipo de enumeração"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
QCString
trEnumerationValueDocumentation
()
{
return
"Documentação dos elementos da enumeração"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions
*/
QCString
trFunctionDocumentation
()
{
return
"Documentação da função"
;
}
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables
*/
QCString
trVariableDocumentation
()
{
return
"Documentação da variável"
;
}
/*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds
*/
QCString
trCompounds
()
{
return
"Componentes"
;
}
/*! This is used in the documentation of a group before the list of
* links to documented files
*/
QCString
trFiles
()
{
return
"Ficheiros"
;
}
/*! This is used in the standard footer of each page and indicates when
* the page was generated
*/
QCString
trGeneratedAt
(
const
char
*
date
,
const
char
*
projName
)
{
QCString
result
=
(
QCString
)
"Gerado em "
+
date
;
if
(
projName
)
result
+=
(
QCString
)
" para "
+
projName
;
result
+=
(
QCString
)
" por"
;
return
result
;
}
/*! This is part of the sentence used in the standard footer of each page.
*/
QCString
trWrittenBy
()
{
return
"escrito por"
;
}
/*! this text is put before a class diagram */
QCString
trClassDiagram
(
const
char
*
clName
)
{
return
(
QCString
)
"Diagrama de heranças da classe "
+
clName
;
}
/*! this text is generated when the \internal command is used. */
QCString
trForInternalUseOnly
()
{
return
"Apenas para uso interno."
;
}
/*! this text is generated when the \reimp command is used. */
QCString
trReimplementedForInternalReasons
()
{
return
"Redefinido por razões internas; o interface não é afectado"
;
}
/*! this text is generated when the \warning command is used. */
QCString
trWarning
()
{
return
"Aviso"
;
}
/*! this text is generated when the \bug command is used. */
QCString
trBugsAndLimitations
()
{
return
"Bugs e limitações"
;
}
/*! this text is generated when the \version command is used. */
QCString
trVersion
()
{
return
"Versão"
;
}
/*! this text is generated when the \date command is used. */
QCString
trDate
()
{
return
"Data"
;
}
/*! this text is generated when the \author command is used. */
QCString
trAuthors
()
{
return
"Autor(es)"
;
}
/*! this text is generated when the \return command is used. */
QCString
trReturns
()
{
return
"Retorna"
;
}
/*! this text is generated when the \sa command is used. */
QCString
trSeeAlso
()
{
return
"Veja também"
;
}
/*! this text is generated when the \param command is used. */
QCString
trParameters
()
{
return
"Parâmetros"
;
}
/*! this text is generated when the \exception command is used. */
QCString
trExceptions
()
{
return
"Excepções"
;
}
/*! this text is used in the title page of a LaTeX document. */
QCString
trGeneratedBy
()
{
return
"Gerado por"
;
}
// new since 0.49-990307
virtual
QCString
trNamespaceList
()
{
return
"Lista de namespaces"
;
}
/*! used as an introduction to the namespace list */
virtual
QCString
trNamespaceListDescription
(
bool
extractAll
)
{
QCString
result
=
"Lista "
;
if
(
!
extractAll
)
result
+=
"de toda a documentação "
;
result
+=
"dos namespaces com uma breve descrição:"
;
return
result
;
}
/*! used in the class documentation as a header before the list of all
* friends of a class
*/
virtual
QCString
trFriends
()
{
return
"Amigos"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
/*! used in the class documentation as a header before the list of all
* related classes
*/
virtual
QCString
trRelatedFunctionDocumentation
()
{
return
"Documentação das funções relacionadas e classes amigas"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
/*! used as the title of the HTML page of a class/struct/union */
virtual
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
,
bool
isTemplate
)
{
QCString
result
=
"Referencia "
;
switch
(
compType
)
{
case
ClassDef
:
:
Class
:
result
+=
"à classe "
;
break
;
case
ClassDef
:
:
Struct
:
result
+=
"à estrutura "
;
break
;
case
ClassDef
:
:
Union
:
result
+=
"à união "
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"ao interface "
;
break
;
case
ClassDef
:
:
Exception
:
result
+=
"à excepção "
;
break
;
}
if
(
isTemplate
)
result
+=
"<template> "
;
result
+=
(
QCString
)
clName
;
return
result
;
}
/*! used as the title of the HTML page of a file */
virtual
QCString
trFileReference
(
const
char
*
fileName
)
{
QCString
result
=
"Referencia ao ficheiro "
;
result
+=
fileName
;
return
result
;
}
/*! used as the title of the HTML page of a namespace */
virtual
QCString
trNamespaceReference
(
const
char
*
namespaceName
)
{
QCString
result
=
"Referencia ao namespace "
;
result
+=
namespaceName
;
return
result
;
}
/*! \mgroup Class sections
* these are for the member sections of a class, struct or union
*/
virtual
QCString
trPublicMembers
()
{
return
"Membros públicos"
;
}
virtual
QCString
trPublicSlots
()
{
return
"Slots públicos"
;
}
virtual
QCString
trSignals
()
{
return
"Sinais"
;
}
virtual
QCString
trStaticPublicMembers
()
{
return
"Membros públicos estáticos"
;
}
virtual
QCString
trProtectedMembers
()
{
return
"Membros protegidos"
;
}
virtual
QCString
trProtectedSlots
()
{
return
"Slots protegidos"
;
}
virtual
QCString
trStaticProtectedMembers
()
{
return
"Membros protegidos estáticos"
;
}
virtual
QCString
trPrivateMembers
()
{
return
"Membros privados"
;
}
virtual
QCString
trPrivateSlots
()
{
return
"Slots privados"
;
}
virtual
QCString
trStaticPrivateMembers
()
{
return
"Membros privados estáticos"
;
}
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items.
* use generateMarker(i) to indicate where item i should be put.
*/
virtual
QCString
trWriteList
(
int
numEntries
)
{
QCString
result
;
int
i
;
// the inherits list contain `numEntries' classes
for
(
i
=
0
;
i
<
numEntries
;
i
++
)
{
// use generateMarker to generate placeholders for the class links!
result
+=
generateMarker
(
i
);
// generate marker for entry i in the list
// (order is left to right)
if
(
i
!=
numEntries
-
1
)
// not the last entry, so we need a separator
{
if
(
i
<
numEntries
-
2
)
// not the fore last entry
result
+=
", "
;
else
// the fore last entry
result
+=
", e "
;
}
}
return
result
;
}
/*! used in class documentation to produce a list of base classes,
* if class diagrams are disabled.
*/
virtual
QCString
trInheritsList
(
int
numEntries
)
{
return
"Derivada de "
+
trWriteList
(
numEntries
)
+
"."
;
}
/*! used in class documentation to produce a list of super classes,
* if class diagrams are disabled.
*/
virtual
QCString
trInheritedByList
(
int
numEntries
)
{
return
"Herdado por "
+
trWriteList
(
numEntries
)
+
"."
;
}
/*! used in member documentation blocks to produce a list of
* members that are hidden by this one.
*/
virtual
QCString
trReimplementedFromList
(
int
numEntries
)
{
return
"Reimplementado de "
+
trWriteList
(
numEntries
)
+
"."
;
}
/*! used in member documentation blocks to produce a list of
* all member that overwrite the implementation of this member.
*/
virtual
QCString
trReimplementedInList
(
int
numEntries
)
{
return
"Reimplementado em "
+
trWriteList
(
numEntries
)
+
"."
;
}
/*! This is put above each page as a link to all members of namespaces. */
virtual
QCString
trNamespaceMembers
()
{
return
"Membros do namespace"
;
}
/*! This is an introduction to the page with all namespace members */
virtual
QCString
trNamespaceMemberDescription
(
bool
extractAll
)
{
QCString
result
=
"Lista "
;
if
(
extractAll
)
result
+=
"de todos os "
;
else
result
+=
"de toda a documentação dos "
;
result
+=
"membros do namespace com links para "
;
if
(
extractAll
)
result
+=
"a documentação de cada membro:"
;
else
result
+=
"o namespace correspondente:"
;
return
result
;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all namespaces.
*/
virtual
QCString
trNamespaceIndex
()
{
return
"Índice dos namespaces"
;
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all namespaces.
*/
virtual
QCString
trNamespaceDocumentation
()
{
return
"Documentação dos namespaces"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
//////////////////////////////////////////////////////////////////////////
/*! This is used in the documentation before the list of all
* namespaces in a file.
*/
virtual
QCString
trNamespaces
()
{
return
"Namespaces"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual
QCString
trGeneratedFromFiles
(
ClassDef
::
CompoundType
compType
,
bool
single
)
{
// here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString
result
=
(
QCString
)
"A documentação para "
;
switch
(
compType
)
{
case
ClassDef
:
:
Class
:
result
+=
"esta classe"
;
break
;
case
ClassDef
:
:
Struct
:
result
+=
"esta estrutura"
;
break
;
case
ClassDef
:
:
Union
:
result
+=
"esta união"
;
break
;
case
ClassDef
:
:
Interface
:
result
+=
"este interface"
;
break
;
case
ClassDef
:
:
Exception
:
result
+=
"esta excepção"
;
break
;
}
result
+=
" foi gerada a partir "
;
if
(
single
)
result
+=
" do seguinte ficheiro:"
;
else
result
+=
"dos seguintes ficheiros:"
;
return
result
;
}
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual
QCString
trAlphabeticalList
()
{
return
"Lista alfabética"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
virtual
QCString
trReturnValues
()
{
return
"Valores retornados"
;
}
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual
QCString
trMainPage
()
{
return
"Página principal"
;
}
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual
QCString
trPageAbbreviation
()
{
return
"p. "
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
virtual
QCString
trSources
()
{
return
"Fontes"
;
}
virtual
QCString
trDefinedAtLineInSourceFile
()
{
return
"Definido na linha @0 do ficheiro @1."
;
}
virtual
QCString
trDefinedInSourceFile
()
{
return
"Definido no ficheiro @0."
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991205
//////////////////////////////////////////////////////////////////////////
virtual
QCString
trDeprecated
()
{
return
"Desaprovado"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.0.0
//////////////////////////////////////////////////////////////////////////
/*! this text is put before a collaboration diagram */
virtual
QCString
trCollaborationDiagram
(
const
char
*
clName
)
{
return
(
QCString
)
"Diagrama de colaboração para "
+
clName
+
":"
;
}
/*! this text is put before an include dependency graph */
virtual
QCString
trInclDepGraph
(
const
char
*
fName
)
{
return
(
QCString
)
"Diagrama de dependências de inclusão para "
+
fName
+
":"
;
}
/*! header that is put before the list of constructor/destructors. */
virtual
QCString
trConstructorDocumentation
()
{
return
"Documentação do Construtor & Destrutor"
;
}
/*! Used in the file documentation to point to the corresponding sources. */
virtual
QCString
trGotoSourceCode
()
{
return
"Ir para o código fonte deste ficheiro."
;
}
/*! Used in the file sources to point to the corresponding documentation. */
virtual
QCString
trGotoDocumentation
()
{
return
"Ir para a documentação deste ficheiro."
;
}
/*! Text for the \pre command */
virtual
QCString
trPrecondition
()
{
return
"Precondição"
;
}
/*! Text for the \post command */
virtual
QCString
trPostcondition
()
{
return
"Poscondição"
;
}
/*! Text for the \invariant command */
virtual
QCString
trInvariant
()
{
return
"Invariante"
;
}
/*! Text shown before a multi-line variable/enum initialization */
virtual
QCString
trInitialValue
()
{
return
"Valor inicial:"
;
}
/*! Text used the source code in the file index */
virtual
QCString
trCode
()
{
return
"código"
;
}
virtual
QCString
trGraphicalHierarchy
()
{
return
"Representação gráfica da hiearquia da classe"
;
}
virtual
QCString
trGotoGraphicalHierarchy
()
{
return
"Ir para a representação gráfica da hierarquia da classe"
;
}
virtual
QCString
trGotoTextualHierarchy
()
{
return
"Ir para a representação textual da hierarquia da classe"
;
}
virtual
QCString
trPageIndex
()
{
return
"Índice da página"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.0
//////////////////////////////////////////////////////////////////////////
virtual
QCString
trNote
()
{
return
"Nota"
;
}
virtual
QCString
trPublicTypes
()
{
return
"Tipos Públicos"
;
}
virtual
QCString
trPublicAttribs
()
{
return
"Atributos Públicos"
;
}
virtual
QCString
trStaticPublicAttribs
()
{
return
"Atributos Públicos Estáticos"
;
}
virtual
QCString
trProtectedTypes
()
{
return
"Tipos Protegidos"
;
}
virtual
QCString
trProtectedAttribs
()
{
return
"Atributos Protegidos"
;
}
virtual
QCString
trStaticProtectedAttribs
()
{
return
"Atributos Protegidos Estáticos"
;
}
virtual
QCString
trPrivateTypes
()
{
return
"Tipos Privados"
;
}
virtual
QCString
trPrivateAttribs
()
{
return
"Atributos Privados"
;
}
virtual
QCString
trStaticPrivateAttribs
()
{
return
"Atributos Privados Estáticos"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a todo item */
virtual
QCString
trTodo
()
{
return
"Tarefa"
;
}
/*! Used as the header of the todo list */
virtual
QCString
trTodoList
()
{
return
"Lista de tarefas"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.4
//////////////////////////////////////////////////////////////////////////
virtual
QCString
trReferencedBy
()
{
return
"Referenciado por"
;
}
virtual
QCString
trRemarks
()
{
return
"Observações"
;
}
virtual
QCString
trAttention
()
{
return
"Atenção"
;
}
virtual
QCString
trInclByDepGraph
()
{
return
"Este gráfico mostra quais são os ficheiros que incluem directamente ou indirectamente este ficheiro:"
;
}
virtual
QCString
trSince
()
{
return
"Desde"
;
}
};
#endif
src/util.cpp
View file @
422c14b6
...
...
@@ -300,13 +300,19 @@ QCString removeRedundantWhiteSpace(const QCString &s)
for
(
i
=
0
;
i
<
l
;
i
++
)
{
char
c
=
s
.
at
(
i
);
if
(
i
<
l
-
2
&&
c
==
'<'
&&
(
isId
(
s
.
at
(
i
+
1
))
||
isspace
(
s
.
at
(
i
+
1
))))
if
(
i
<
l
-
2
&&
c
==
'<'
&&
// current char is a <
(
isId
(
s
.
at
(
i
+
1
))
||
isspace
(
s
.
at
(
i
+
1
)))
&&
// next char is a id char or space
(
i
<
8
||
s
.
mid
(
i
-
8
,
8
)
!=
"operator"
)
// string in front is not "operator"
)
{
result
+=
"< "
;
result
+=
"< "
;
// insert extra space for layouting (nested) templates
}
else
if
(
i
>
0
&&
c
==
'>'
&&
(
isId
(
s
.
at
(
i
-
1
))
||
isspace
(
s
.
at
(
i
-
1
))))
else
if
(
i
>
0
&&
c
==
'>'
&&
// current char is a >
(
isId
(
s
.
at
(
i
-
1
))
||
isspace
(
s
.
at
(
i
-
1
)))
&&
// prev char is a id char or space
(
i
<
8
||
s
.
mid
(
i
-
8
,
8
)
!=
"operator"
)
// string in front is not "operator"
)
{
result
+=
" >"
;
result
+=
" >"
;
// insert extra space for layouting (nested) templates
}
else
if
(
c
!=
' '
||
(
i
!=
0
&&
i
!=
l
-
1
&&
isId
(
s
.
at
(
i
-
1
))
&&
isId
(
s
.
at
(
i
+
1
)))
...
...
@@ -1480,7 +1486,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf("Trying class scope %s\n",className.data());
ClassDef
*
fcd
=
0
;
if
((
fcd
=
getClass
(
className
))
&&
// is it a documented class
if
((
fcd
=
get
Resolved
Class
(
className
))
&&
// is it a documented class
fcd
->
isLinkable
()
)
{
...
...
@@ -1501,7 +1507,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf("match=%d\n",match);
if
(
match
)
{
ClassDef
*
mcd
=
mmd
->
memberClass
();
ClassDef
*
mcd
=
mmd
->
getClassDef
();
int
m
=
minClassDistance
(
fcd
,
mcd
);
if
(
m
<
mdist
&&
mcd
->
isLinkable
())
{
...
...
@@ -1533,7 +1539,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
mmd
->
isLinkable
()
)
{
ClassDef
*
mcd
=
mmd
->
memberClass
();
ClassDef
*
mcd
=
mmd
->
getClassDef
();
//printf(" >Class %s found\n",mcd->name().data());
int
m
=
minClassDistance
(
fcd
,
mcd
);
if
(
m
<
mdist
&&
mcd
->
isLinkable
())
...
...
@@ -1594,9 +1600,9 @@ bool getDefs(const QCString &scName,const QCString &memberName,
MemberDef
*
mmd
=
mn
->
first
();
while
(
mmd
&&
!
found
)
{
//printf("mmd->getNamespace()=%p fnd=%p\n",
// mmd->getNamespace(),fnd);
if
(
mmd
->
getNamespace
()
==
fnd
&&
//printf("mmd->getNamespace
Def
()=%p fnd=%p\n",
// mmd->getNamespace
Def
(),fnd);
if
(
mmd
->
getNamespace
Def
()
==
fnd
&&
//(mmd->isReference() || mmd->hasDocumentation())
mmd
->
isLinkable
()
)
...
...
@@ -1630,7 +1636,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
// the first defined!
while
(
mmd
&&
!
found
)
{
if
(
mmd
->
getNamespace
()
==
fnd
&&
if
(
mmd
->
getNamespace
Def
()
==
fnd
&&
//(mmd->isReference() || mmd->hasDocumentation())
mmd
->
isLinkable
()
)
...
...
@@ -1646,14 +1652,14 @@ bool getDefs(const QCString &scName,const QCString &memberName,
}
else
// no scope => global function
{
//printf("Function with global scope `%s'
\n",namespaceName.data()
);
//printf("Function with global scope `%s'
args=`%s'\n",namespaceName.data(),args
);
md
=
mn
->
first
();
while
(
md
)
{
if
(
md
->
isLinkable
())
{
fd
=
md
->
getFileDef
();
gd
=
md
->
groupDef
();
gd
=
md
->
g
etG
roupDef
();
//printf("md->name()=`%s' md->args=`%s' fd=%p gd=%p\n",
// md->name().data(),args,fd,gd);
bool
inGroup
=
FALSE
;
...
...
@@ -1688,13 +1694,14 @@ bool getDefs(const QCString &scName,const QCString &memberName,
md
=
mn
->
last
();
while
(
md
)
{
if
(
md
->
isLinkable
())
//printf("Found member `%s'\n",md->name().data());
if
(
1
/* md->isLinkable() */
)
{
//printf("md->name()=`%s'\n",md->name().data());
//printf("m
ember is linkable m
d->name()=`%s'\n",md->name().data());
fd
=
md
->
getFileDef
();
gd
=
md
->
groupDef
();
gd
=
md
->
g
etG
roupDef
();
bool
inGroup
=
FALSE
;
if
((
fd
&&
fd
->
isLinkable
())
|
+
if
((
fd
&&
fd
->
isLinkable
())
|
|
(
inGroup
=
(
gd
&&
gd
->
isLinkable
()))
)
{
...
...
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