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
02aa9b67
Commit
02aa9b67
authored
Nov 29, 2004
by
Dimitri van Heesch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.3.9.1-20041129
parent
05930245
Changes
37
Show whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
595 additions
and
151 deletions
+595
-151
INSTALL
INSTALL
+2
-2
README
README
+2
-2
VERSION
VERSION
+1
-1
commands.doc
doc/commands.doc
+7
-0
config.doc
doc/config.doc
+9
-0
doxygen.spec
packages/rpm/doxygen.spec
+1
-1
classdef.cpp
src/classdef.cpp
+8
-0
classlist.cpp
src/classlist.cpp
+11
-10
classlist.h
src/classlist.h
+1
-1
commentcnv.l
src/commentcnv.l
+16
-10
config.l
src/config.l
+8
-0
definition.cpp
src/definition.cpp
+39
-0
definition.h
src/definition.h
+3
-0
dirdef.cpp
src/dirdef.cpp
+25
-0
dirdef.h
src/dirdef.h
+4
-4
docparser.cpp
src/docparser.cpp
+76
-7
docparser.h
src/docparser.h
+2
-1
doxygen.cpp
src/doxygen.cpp
+150
-30
doxygen.h
src/doxygen.h
+3
-0
groupdef.cpp
src/groupdef.cpp
+9
-38
groupdef.h
src/groupdef.h
+12
-12
htmlgen.cpp
src/htmlgen.cpp
+23
-8
index.cpp
src/index.cpp
+6
-6
latexgen.cpp
src/latexgen.cpp
+1
-1
memberdef.cpp
src/memberdef.cpp
+10
-1
namespacedef.cpp
src/namespacedef.cpp
+64
-2
namespacedef.h
src/namespacedef.h
+1
-0
outputlist.cpp
src/outputlist.cpp
+3
-3
outputlist.h
src/outputlist.h
+1
-1
perlmodgen.cpp
src/perlmodgen.cpp
+2
-2
scanner.h
src/scanner.h
+1
-0
scanner.l
src/scanner.l
+64
-1
sortdict.h
src/sortdict.h
+8
-0
translator_de.h
src/translator_de.h
+2
-2
util.cpp
src/util.cpp
+14
-3
util.h
src/util.h
+4
-0
xmlgen.cpp
src/xmlgen.cpp
+2
-2
No files found.
INSTALL
View file @
02aa9b67
DOXYGEN Version 1.3.9.1-200411
14
DOXYGEN Version 1.3.9.1-200411
29
Please read the installation section of the manual
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
(http://www.doxygen.org/install.html) for instructions.
--------
--------
Dimitri van Heesch (
14
November 2004)
Dimitri van Heesch (
29
November 2004)
README
View file @
02aa9b67
DOXYGEN Version 1.3.9.1_200411
14
DOXYGEN Version 1.3.9.1_200411
29
Please read INSTALL for compilation instructions.
Please read INSTALL for compilation instructions.
...
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
...
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (
14
November 2004)
Dimitri van Heesch (dimitri@stack.nl) (
29
November 2004)
VERSION
View file @
02aa9b67
1.3.9.1-200411
14
1.3.9.1-200411
29
doc/commands.doc
View file @
02aa9b67
...
@@ -131,6 +131,7 @@ documentation:
...
@@ -131,6 +131,7 @@ documentation:
\refitem cmdretval \\retval
\refitem cmdretval \\retval
\refitem cmdsa \\sa
\refitem cmdsa \\sa
\refitem cmdsection \\section
\refitem cmdsection \\section
\refitem cmdsee \\see
\refitem cmdshowinitializer \\showinitializer
\refitem cmdshowinitializer \\showinitializer
\refitem cmdsince \\since
\refitem cmdsince \\since
\refitem cmdskip \\skip
\refitem cmdskip \\skip
...
@@ -1150,6 +1151,12 @@ void memcpy(void *dest, const void *src, size_t n);
...
@@ -1150,6 +1151,12 @@ void memcpy(void *dest, const void *src, size_t n);
\sa section \ref autolink "autolink" for information on how to create links
\sa section \ref autolink "autolink" for information on how to create links
to objects.
to objects.
<hr>
\section cmdsee \see { references }
\addindex \\see
Equivalent to \ref cmdsa "\\sa". Introduced for compatibility with Javadoc.
<hr>
<hr>
\section cmdsince \since { text }
\section cmdsince \since { text }
...
...
doc/config.doc
View file @
02aa9b67
...
@@ -205,6 +205,7 @@ followed by the descriptions of the tags grouped by category.
...
@@ -205,6 +205,7 @@ followed by the descriptions of the tags grouped by category.
\
refitem
cfg_warn_if_doc_error
WARN_IF_DOC_ERROR
\
refitem
cfg_warn_if_doc_error
WARN_IF_DOC_ERROR
\
refitem
cfg_warn_if_undocumented
WARN_IF_UNDOCUMENTED
\
refitem
cfg_warn_if_undocumented
WARN_IF_UNDOCUMENTED
\
refitem
cfg_warn_logfile
WARN_LOGFILE
\
refitem
cfg_warn_logfile
WARN_LOGFILE
\
refitem
cfg_warn_no_paramdoc
WARN_NO_PARAMDOC
\
refitem
cfg_warnings
WARNINGS
\
refitem
cfg_warnings
WARNINGS
\
refitem
cfg_xml_dtd
XML_DTD
\
refitem
cfg_xml_dtd
XML_DTD
\
refitem
cfg_xml_output
XML_OUTPUT
\
refitem
cfg_xml_output
XML_OUTPUT
...
@@ -673,6 +674,14 @@ function's detailed documentation block.
...
@@ -673,6 +674,14 @@ function's detailed documentation block.
parameters in a documented function, or documenting parameters that
parameters in a documented function, or documenting parameters that
don'
t
exist
or
using
markup
commands
wrongly
.
don'
t
exist
or
using
markup
commands
wrongly
.
\
anchor
cfg_warn_no_paramdoc
<
dt
>\
c
WARN_NO_PARAMDOC
This
\
c
WARN_NO_PARAMDOC
option
can
be
abled
to
get
warnings
for
functions
that
are
documented
,
but
have
no
documentation
for
their
parameters
or
return
value
.
If
set
to
\
c
NO
(
the
default
)
doxygen
will
only
warn
about
wrong
or
incomplete
parameter
documentation
,
but
not
about
the
absence
of
documentation
.
\
anchor
cfg_warn_format
\
anchor
cfg_warn_format
<
dt
>\
c
WARN_FORMAT
<
dd
>
<
dt
>\
c
WARN_FORMAT
<
dd
>
\
addindex
WARN_FORMAT
\
addindex
WARN_FORMAT
...
...
packages/rpm/doxygen.spec
View file @
02aa9b67
Summary: A documentation system for C/C++.
Summary: A documentation system for C/C++.
Name: doxygen
Name: doxygen
Version: 1.3.9.1_200411
14
Version: 1.3.9.1_200411
29
Release: 1
Release: 1
Epoch: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
...
...
src/classdef.cpp
View file @
02aa9b67
...
@@ -947,6 +947,10 @@ void ClassDef::writeDocumentation(OutputList &ol)
...
@@ -947,6 +947,10 @@ void ClassDef::writeDocumentation(OutputList &ol)
m_tempArgs
!=
0
);
m_tempArgs
!=
0
);
startFile
(
ol
,
getOutputFileBase
(),
name
(),
pageTitle
);
startFile
(
ol
,
getOutputFileBase
(),
name
(),
pageTitle
);
if
(
getOuterScope
()
!=
Doxygen
::
globalScope
)
{
writeNavigationPath
(
ol
);
}
startTitle
(
ol
,
getOutputFileBase
());
startTitle
(
ol
,
getOutputFileBase
());
ol
.
parseText
(
pageTitle
);
ol
.
parseText
(
pageTitle
);
addGroupListToTitle
(
ol
,
this
);
addGroupListToTitle
(
ol
,
this
);
...
@@ -1343,6 +1347,10 @@ void ClassDef::writeDocumentation(OutputList &ol)
...
@@ -1343,6 +1347,10 @@ void ClassDef::writeDocumentation(OutputList &ol)
theTranslator
->
trRelatedFunctions
(),
theTranslator
->
trRelatedFunctions
(),
theTranslator
->
trRelatedSubscript
()
theTranslator
->
trRelatedSubscript
()
);
);
// nested classes
m_innerClasses
->
writeDeclaration
(
ol
,
0
,
0
,
TRUE
);
ol
.
endMemberSections
();
ol
.
endMemberSections
();
// write detailed description
// write detailed description
...
...
src/classlist.cpp
View file @
02aa9b67
...
@@ -60,7 +60,8 @@ ClassListIterator::ClassListIterator(const ClassList &cllist) :
...
@@ -60,7 +60,8 @@ ClassListIterator::ClassListIterator(const ClassList &cllist) :
{
{
}
}
void
ClassSDict
::
writeDeclaration
(
OutputList
&
ol
,
const
ClassDef
::
CompoundType
*
filter
,
const
char
*
header
)
void
ClassSDict
::
writeDeclaration
(
OutputList
&
ol
,
const
ClassDef
::
CompoundType
*
filter
,
const
char
*
header
,
bool
localNames
)
{
{
if
(
count
()
>
0
)
if
(
count
()
>
0
)
{
{
...
@@ -102,15 +103,15 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
...
@@ -102,15 +103,15 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
}
}
ol
.
startMemberItem
(
FALSE
);
ol
.
startMemberItem
(
FALSE
);
QCString
tmp
=
cd
->
compoundTypeString
();
QCString
tmp
=
cd
->
compoundTypeString
();
QCString
cname
=
cd
->
displayName
()
;
QCString
cname
;
//if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")
)
if
(
localNames
)
//
{
{
// cname = substitute(cd->className(),"::","."
);
cname
=
cd
->
localName
(
);
//
}
}
//
else
else
//
{
{
// cname = cd->class
Name();
cname
=
cd
->
display
Name
();
//
}
}
ol
.
writeString
(
tmp
);
ol
.
writeString
(
tmp
);
ol
.
writeString
(
" "
);
ol
.
writeString
(
" "
);
ol
.
insertMemberAlign
();
ol
.
insertMemberAlign
();
...
...
src/classlist.h
View file @
02aa9b67
...
@@ -53,7 +53,7 @@ class ClassSDict : public SDict<ClassDef>
...
@@ -53,7 +53,7 @@ class ClassSDict : public SDict<ClassDef>
~
ClassSDict
()
{}
~
ClassSDict
()
{}
int
compareItems
(
GCI
item1
,
GCI
item2
);
int
compareItems
(
GCI
item1
,
GCI
item2
);
void
writeDeclaration
(
OutputList
&
ol
,
const
ClassDef
::
CompoundType
*
filter
=
0
,
void
writeDeclaration
(
OutputList
&
ol
,
const
ClassDef
::
CompoundType
*
filter
=
0
,
const
char
*
header
=
0
);
const
char
*
header
=
0
,
bool
localNames
=
FALSE
);
};
};
#endif
#endif
src/commentcnv.l
View file @
02aa9b67
...
@@ -24,6 +24,7 @@
...
@@ -24,6 +24,7 @@
#include <qstack.h>
#include <qstack.h>
#include <qregexp.h>
#include <qregexp.h>
#include <qtextstream.h>
#include "bufstr.h"
#include "bufstr.h"
#include "debug.h"
#include "debug.h"
...
@@ -31,6 +32,10 @@
...
@@ -31,6 +32,10 @@
#include "config.h"
#include "config.h"
#include "doxygen.h"
#include "doxygen.h"
#define ADDCHAR(c) g_outBuf->addChar(c)
#define ADDARRAY(a,s) g_outBuf->addArray(a,s)
struct CondCtx
struct CondCtx
{
{
CondCtx(int line,QCString id,bool b)
CondCtx(int line,QCString id,bool b)
...
@@ -60,18 +65,18 @@ static void replaceCommentMarker(const char *s,int len)
...
@@ -60,18 +65,18 @@ static void replaceCommentMarker(const char *s,int len)
// copy blanks
// copy blanks
while ((c=*p) && (c==' ' || c=='\t' || c=='\n'))
while ((c=*p) && (c==' ' || c=='\t' || c=='\n'))
{
{
g_outBuf->addChar
(c);
ADDCHAR
(c);
g_lineNr += c=='\n';
g_lineNr += c=='\n';
p++;
p++;
}
}
// replace start of comment marker by spaces
// replace start of comment marker by spaces
while ((c=*p) && (c=='/' || c=='!' || c=='#'))
while ((c=*p) && (c=='/' || c=='!' || c=='#'))
{
{
g_outBuf->addChar
(' ');
ADDCHAR
(' ');
p++;
p++;
if (*p=='<') // comment-after-item marker
if (*p=='<') // comment-after-item marker
{
{
g_outBuf->addChar
(' ');
ADDCHAR
(' ');
p++;
p++;
}
}
if (c=='!') // end after first !
if (c=='!') // end after first !
...
@@ -80,7 +85,7 @@ static void replaceCommentMarker(const char *s,int len)
...
@@ -80,7 +85,7 @@ static void replaceCommentMarker(const char *s,int len)
}
}
}
}
// copy comment line to output
// copy comment line to output
g_outBuf->addArray
(p,len-(p-s));
ADDARRAY
(p,len-(p-s));
}
}
static inline int computeIndent(const char *s)
static inline int computeIndent(const char *s)
...
@@ -107,14 +112,14 @@ static inline void copyToOutput(const char *s,int len)
...
@@ -107,14 +112,14 @@ static inline void copyToOutput(const char *s,int len)
{
{
if (s[i]=='\n')
if (s[i]=='\n')
{
{
g_outBuf->addChar
('\n');
ADDCHAR
('\n');
g_lineNr++;
g_lineNr++;
}
}
}
}
}
}
else
else
{
{
g_outBuf->addArray
(s,len);
ADDARRAY
(s,len);
static int tabSize=Config_getInt("TAB_SIZE");
static int tabSize=Config_getInt("TAB_SIZE");
for (i=0;i<len;i++)
for (i=0;i<len;i++)
{
{
...
@@ -392,8 +397,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
...
@@ -392,8 +397,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
if (YY_START==CComment && oldSkip && !g_skip)
if (YY_START==CComment && oldSkip && !g_skip)
{
{
//printf("** Adding start of comment!\n");
//printf("** Adding start of comment!\n");
g_outBuf->addChar
('/');
ADDCHAR
('/');
g_outBuf->addChar
('*');
ADDCHAR
('*');
}
}
}
}
<CondLine>[a-z_A-Z][a-z_A-Z0-9.\-]* {
<CondLine>[a-z_A-Z][a-z_A-Z0-9.\-]* {
...
@@ -402,8 +407,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
...
@@ -402,8 +407,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
if (g_condCtx==CComment && !oldSkip && g_skip)
if (g_condCtx==CComment && !oldSkip && g_skip)
{
{
//printf("** Adding terminator for comment!\n");
//printf("** Adding terminator for comment!\n");
g_outBuf->addChar
('*');
ADDCHAR
('*');
g_outBuf->addChar
('/');
ADDCHAR
('/');
}
}
BEGIN(g_condCtx);
BEGIN(g_condCtx);
}
}
...
@@ -483,6 +488,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
...
@@ -483,6 +488,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
}
}
if (Debug::isFlagSet(Debug::CommentCnv))
if (Debug::isFlagSet(Debug::CommentCnv))
{
{
g_outBuf->at(g_outBuf->curPos())='\0';
msg("-------------\n%s\n-------------\n",g_outBuf->data());
msg("-------------\n%s\n-------------\n",g_outBuf->data());
}
}
}
}
...
...
src/config.l
View file @
02aa9b67
...
@@ -1856,6 +1856,14 @@ void Config::create()
...
@@ -1856,6 +1856,14 @@ void Config::create()
"don't exist or using markup commands wrongly. \n",
"don't exist or using markup commands wrongly. \n",
TRUE
TRUE
);
);
cb = addBool( "WARN_NO_PARAMDOC",
"This WARN_NO_PARAMDOC option can be abled to get warnings for \n"
"functions that are documented, but have no documentation for their parameters \n"
"or return value. If set to NO (the default) doxygen will only warn about \n"
"wrong or incomplete parameter documentation, but not about the absence of \n"
"documentation.\n",
FALSE
);
cs = addString(
cs = addString(
"WARN_FORMAT",
"WARN_FORMAT",
"The WARN_FORMAT tag determines the format of the warning messages that \n"
"The WARN_FORMAT tag determines the format of the warning messages that \n"
...
...
src/definition.cpp
View file @
02aa9b67
...
@@ -753,3 +753,42 @@ QCString Definition::convertNameToFile(const char *name,bool allowDots) const
...
@@ -753,3 +753,42 @@ QCString Definition::convertNameToFile(const char *name,bool allowDots) const
}
}
}
}
void
Definition
::
writePathFragment
(
OutputList
&
ol
)
const
{
if
(
m_outerScope
&&
m_outerScope
!=
Doxygen
::
globalScope
)
{
m_outerScope
->
writePathFragment
(
ol
);
ol
.
writeString
(
" "
);
if
(
m_outerScope
->
definitionType
()
==
Definition
::
TypeClass
||
m_outerScope
->
definitionType
()
==
Definition
::
TypeNamespace
)
{
if
(
Config_getBool
(
"OPTIMIZE_OUTPUT_JAVA"
))
{
ol
.
writeString
(
"."
);
}
else
{
ol
.
writeString
(
"::"
);
}
}
else
{
ol
.
writeString
(
"/"
);
}
ol
.
writeString
(
" "
);
}
ol
.
writeObjectLink
(
getReference
(),
getOutputFileBase
(),
0
,
m_localName
);
}
void
Definition
::
writeNavigationPath
(
OutputList
&
ol
)
const
{
ol
.
pushGeneratorState
();
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
ol
.
writeString
(
"<div class=
\"
nav
\"
>
\n
"
);
writePathFragment
(
ol
);
ol
.
writeString
(
"</div>
\n
"
);
ol
.
popGeneratorState
();
}
src/definition.h
View file @
02aa9b67
...
@@ -193,6 +193,9 @@ class Definition
...
@@ -193,6 +193,9 @@ class Definition
GroupList
*
partOfGroups
()
const
{
return
m_partOfGroups
;
}
GroupList
*
partOfGroups
()
const
{
return
m_partOfGroups
;
}
QCString
convertNameToFile
(
const
char
*
name
,
bool
allowDots
=
FALSE
)
const
;
QCString
convertNameToFile
(
const
char
*
name
,
bool
allowDots
=
FALSE
)
const
;
void
writePathFragment
(
OutputList
&
ol
)
const
;
void
writeNavigationPath
(
OutputList
&
ol
)
const
;
protected
:
protected
:
int
m_startBodyLine
;
// line number of the start of the definition
int
m_startBodyLine
;
// line number of the start of the definition
int
m_endBodyLine
;
// line number of the end of the definition
int
m_endBodyLine
;
// line number of the end of the definition
...
...
src/dirdef.cpp
View file @
02aa9b67
...
@@ -41,6 +41,16 @@ DirDef::~DirDef()
...
@@ -41,6 +41,16 @@ DirDef::~DirDef()
{
{
}
}
bool
DirDef
::
isLinkableInProject
()
const
{
return
!
isReference
()
&&
Config_getBool
(
"SHOW_DIRECTORIES"
);
}
bool
DirDef
::
isLinkable
()
const
{
return
isReference
()
||
isLinkableInProject
();
}
void
DirDef
::
addSubDir
(
DirDef
*
subdir
)
void
DirDef
::
addSubDir
(
DirDef
*
subdir
)
{
{
m_subdirs
.
inSort
(
subdir
);
m_subdirs
.
inSort
(
subdir
);
...
@@ -213,6 +223,18 @@ void DirDef::writeDocumentation(OutputList &ol)
...
@@ -213,6 +223,18 @@ void DirDef::writeDocumentation(OutputList &ol)
ol
.
writeString
(
fd
->
name
());
ol
.
writeString
(
fd
->
name
());
ol
.
endBold
();
ol
.
endBold
();
}
}
if
(
fd
->
generateSourceFile
())
{
ol
.
pushGeneratorState
();
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
ol
.
docify
(
" "
);
ol
.
startTextLink
(
fd
->
includeName
(),
0
);
ol
.
docify
(
"["
);
ol
.
parseText
(
theTranslator
->
trCode
());
ol
.
docify
(
"]"
);
ol
.
endTextLink
();
ol
.
popGeneratorState
();
}
if
(
!
Config_getString
(
"GENERATE_TAGFILE"
).
isEmpty
())
if
(
!
Config_getString
(
"GENERATE_TAGFILE"
).
isEmpty
())
{
{
Doxygen
::
tagFile
<<
" <file>"
<<
convertToXML
(
fd
->
name
())
<<
"</file>"
<<
endl
;
Doxygen
::
tagFile
<<
" <file>"
<<
convertToXML
(
fd
->
name
())
<<
"</file>"
<<
endl
;
...
@@ -247,6 +269,7 @@ void DirDef::writeDocumentation(OutputList &ol)
...
@@ -247,6 +269,7 @@ void DirDef::writeDocumentation(OutputList &ol)
ol
.
popGeneratorState
();
ol
.
popGeneratorState
();
}
}
#if 0
void DirDef::writePathFragment(OutputList &ol) const
void DirDef::writePathFragment(OutputList &ol) const
{
{
if (m_parent)
if (m_parent)
...
@@ -268,6 +291,7 @@ void DirDef::writeNavigationPath(OutputList &ol)
...
@@ -268,6 +291,7 @@ void DirDef::writeNavigationPath(OutputList &ol)
ol.popGeneratorState();
ol.popGeneratorState();
}
}
#endif
void
DirDef
::
setLevel
()
void
DirDef
::
setLevel
()
{
{
...
@@ -407,6 +431,7 @@ UsedDir::~UsedDir()
...
@@ -407,6 +431,7 @@ UsedDir::~UsedDir()
{
{
}
}
void
UsedDir
::
addFileDep
(
FileDef
*
srcFd
,
FileDef
*
dstFd
)
void
UsedDir
::
addFileDep
(
FileDef
*
srcFd
,
FileDef
*
dstFd
)
{
{
m_filePairs
.
inSort
(
srcFd
->
getOutputFileBase
()
+
dstFd
->
getOutputFileBase
(),
m_filePairs
.
inSort
(
srcFd
->
getOutputFileBase
()
+
dstFd
->
getOutputFileBase
(),
...
...
src/dirdef.h
View file @
02aa9b67
...
@@ -51,8 +51,8 @@ class DirDef : public Definition
...
@@ -51,8 +51,8 @@ class DirDef : public Definition
// accessors
// accessors
virtual
DefType
definitionType
()
{
return
TypeDir
;
}
virtual
DefType
definitionType
()
{
return
TypeDir
;
}
virtual
QCString
getOutputFileBase
()
const
;
virtual
QCString
getOutputFileBase
()
const
;
virtual
bool
isLinkableInProject
()
const
{
return
!
isReference
()
&&
hasDocumentation
();
}
virtual
bool
isLinkableInProject
()
const
;
virtual
bool
isLinkable
()
const
{
return
isReference
()
||
isLinkableInProject
();
}
virtual
bool
isLinkable
()
const
;
QCString
displayName
()
const
{
return
m_dispName
;
}
QCString
displayName
()
const
{
return
m_dispName
;
}
QCString
shortName
()
const
{
return
m_shortName
;
}
QCString
shortName
()
const
{
return
m_shortName
;
}
void
addSubDir
(
DirDef
*
subdir
);
void
addSubDir
(
DirDef
*
subdir
);
...
@@ -70,9 +70,9 @@ class DirDef : public Definition
...
@@ -70,9 +70,9 @@ class DirDef : public Definition
// generate output
// generate output
void
writeDetailedDocumentation
(
OutputList
&
ol
);
void
writeDetailedDocumentation
(
OutputList
&
ol
);
void
writeDocumentation
(
OutputList
&
ol
);
void
writeDocumentation
(
OutputList
&
ol
);
void
writeNavigationPath
(
OutputList
&
ol
);
void
writeDepGraph
(
QTextStream
&
t
);
void
writeDepGraph
(
QTextStream
&
t
);
void
writePathFragment
(
OutputList
&
ol
)
const
;
//void writePathFragment(OutputList &ol) const;
//void writeNavigationPath(OutputList &ol);
static
DirDef
*
mergeDirectoryInTree
(
const
QCString
&
path
);
static
DirDef
*
mergeDirectoryInTree
(
const
QCString
&
path
);
bool
visited
;
bool
visited
;
...
...
src/docparser.cpp
View file @
02aa9b67
...
@@ -62,6 +62,7 @@ static const char *sectionLevelToName[] =
...
@@ -62,6 +62,7 @@ static const char *sectionLevelToName[] =
// global variables during a call to validatingParseDoc
// global variables during a call to validatingParseDoc
static
bool
g_hasParamCommand
;
static
bool
g_hasParamCommand
;
static
bool
g_hasReturnCommand
;
static
MemberDef
*
g_memberDef
;
static
MemberDef
*
g_memberDef
;
static
QDict
<
void
>
g_paramsFound
;
static
QDict
<
void
>
g_paramsFound
;
static
bool
g_isExample
;
static
bool
g_isExample
;
...
@@ -317,11 +318,9 @@ static void checkUndocumentedParams()
...
@@ -317,11 +318,9 @@ static void checkUndocumentedParams()
}
}
if
(
found
)
if
(
found
)
{
{
QString
scope
=
g_memberDef
->
getScopeString
();
QString
errMsg
=
if
(
!
scope
.
isEmpty
())
scope
+=
"::"
;
else
scope
=
""
;
QString
errMsg
=
(
QString
)
"Warning: The following parameters of "
+
"Warning: The following parameters of "
+
scope
+
QString
(
g_memberDef
->
n
ame
())
+
QString
(
g_memberDef
->
qualifiedN
ame
())
+
QString
(
argListToString
(
al
))
+
QString
(
argListToString
(
al
))
+
" are not documented:
\n
"
;
" are not documented:
\n
"
;
for
(
ali
.
toFirst
();(
a
=
ali
.
current
());
++
ali
)
for
(
ali
.
toFirst
();(
a
=
ali
.
current
());
++
ali
)
...
@@ -338,6 +337,69 @@ static void checkUndocumentedParams()
...
@@ -338,6 +337,69 @@ static void checkUndocumentedParams()
}
}
}
}
/*! Check if a member has documentation for its parameter and or return
* type, if applicable.
*/
static
void
checkNoDocumentedParams
()
{
if
(
g_memberDef
&&
Config_getBool
(
"WARN_NO_PARAMDOC"
))
{
ArgumentList
*
al
=
g_memberDef
->
argumentList
();
ArgumentList
*
declAl
=
g_memberDef
->
declArgumentList
();
QString
returnType
=
g_memberDef
->
typeString
();
if
(
!
g_hasParamCommand
&&
// no @param command
al
&&
// but the member has a parameter list
al
->
count
()
>
0
// with at least one parameter (that is not void)
)
{
ArgumentListIterator
ali
(
*
al
);
Argument
*
a
;
bool
allDoc
=
TRUE
;
for
(
ali
.
toFirst
();(
a
=
ali
.
current
())
&&
allDoc
;
++
ali
)
{
allDoc
=
!
a
->
docs
.
isEmpty
();
printf
(
"a->name=%s doc=%s
\n
"
,
a
->
name
.
data
(),
a
->
docs
.
data
());
}
if
(
!
allDoc
)
{
if
(
declAl
)
// try declaration arguments as well
{
allDoc
=
TRUE
;
ArgumentListIterator
ali
(
*
declAl
);
Argument
*
a
;
for
(
ali
.
toFirst
();(
a
=
ali
.
current
())
&&
allDoc
;
++
ali
)
{
allDoc
=
!
a
->
docs
.
isEmpty
();
printf
(
"a->name=%s doc=%s
\n
"
,
a
->
name
.
data
(),
a
->
docs
.
data
());
}
}
if
(
!
allDoc
)
{
QString
errMsg
=
"Warning: the parameters of member "
+
QString
(
g_memberDef
->
qualifiedName
())
+
QString
(
argListToString
(
al
))
+
" are not documented."
;
warn_doc_error
(
g_memberDef
->
docFile
(),
g_memberDef
->
docLine
(),
errMsg
);
}
}
}
if
(
!
g_hasReturnCommand
&&
// no @return or @retval commands
!
returnType
.
isEmpty
()
&&
// non empty
returnType
!=
"void"
// end non void return type
)
{
QString
errMsg
=
"Warning: the return type or values of member "
+
QString
(
g_memberDef
->
qualifiedName
())
+
QString
(
argListToString
(
al
))
+
" are not documented."
;
warn_doc_error
(
g_memberDef
->
docFile
(),
g_memberDef
->
docLine
(),
errMsg
);
}
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
/*! Strips known html and tex extensions from \a text. */
/*! Strips known html and tex extensions from \a text. */
...
@@ -3227,7 +3289,7 @@ int DocParamList::parse(const QString &cmdName)
...
@@ -3227,7 +3289,7 @@ int DocParamList::parse(const QString &cmdName)
}
}
else
if
(
m_type
==
DocParamSect
::
RetVal
)
else
if
(
m_type
==
DocParamSect
::
RetVal
)
{
{
//g_hasParam
Command=TRUE;
g_hasReturn
Command
=
TRUE
;
checkArgumentName
(
g_token
->
name
,
FALSE
);
checkArgumentName
(
g_token
->
name
,
FALSE
);
}
}
m_params
.
append
(
g_token
->
name
);
m_params
.
append
(
g_token
->
name
);
...
@@ -3696,6 +3758,7 @@ int DocPara::handleCommand(const QString &cmdName)
...
@@ -3696,6 +3758,7 @@ int DocPara::handleCommand(const QString &cmdName)
break
;
break
;
case
CMD_RETURN
:
case
CMD_RETURN
:
retval
=
handleSimpleSection
(
DocSimpleSect
::
Return
);
retval
=
handleSimpleSection
(
DocSimpleSect
::
Return
);
g_hasReturnCommand
=
TRUE
;
break
;
break
;
case
CMD_AUTHOR
:
case
CMD_AUTHOR
:
retval
=
handleSimpleSection
(
DocSimpleSect
::
Author
);
retval
=
handleSimpleSection
(
DocSimpleSect
::
Author
);
...
@@ -4890,7 +4953,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
...
@@ -4890,7 +4953,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
Definition
*
ctx
,
MemberDef
*
md
,
Definition
*
ctx
,
MemberDef
*
md
,
const
char
*
input
,
bool
indexWords
,
const
char
*
input
,
bool
indexWords
,
bool
isExample
,
const
char
*
exampleName
,
bool
isExample
,
const
char
*
exampleName
,
bool
singleLine
)
bool
singleLine
,
bool
isParam
)
{
{
//printf("validatingParseDoc(%s,%s)\n",ctx?ctx->name().data():"<none>",
//printf("validatingParseDoc(%s,%s)\n",ctx?ctx->name().data():"<none>",
...
@@ -5003,6 +5066,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
...
@@ -5003,6 +5066,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
g_isExample
=
isExample
;
g_isExample
=
isExample
;
g_exampleName
=
exampleName
;
g_exampleName
=
exampleName
;
g_hasParamCommand
=
FALSE
;
g_hasParamCommand
=
FALSE
;
g_hasReturnCommand
=
FALSE
;
g_paramsFound
.
setAutoDelete
(
FALSE
);
g_paramsFound
.
setAutoDelete
(
FALSE
);
g_paramsFound
.
clear
();
g_paramsFound
.
clear
();
g_sectionDict
=
0
;
//sections;
g_sectionDict
=
0
;
//sections;
...
@@ -5022,7 +5086,11 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
...
@@ -5022,7 +5086,11 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
delete
v
;
delete
v
;
}
}
if
(
!
isParam
)
{
checkUndocumentedParams
();
checkUndocumentedParams
();
checkNoDocumentedParams
();
}
delete
g_token
;
delete
g_token
;
...
@@ -5055,6 +5123,7 @@ DocNode *validatingParseText(const char *input)
...
@@ -5055,6 +5123,7 @@ DocNode *validatingParseText(const char *input)
g_isExample
=
FALSE
;
g_isExample
=
FALSE
;
g_exampleName
=
""
;
g_exampleName
=
""
;
g_hasParamCommand
=
FALSE
;
g_hasParamCommand
=
FALSE
;
g_hasReturnCommand
=
FALSE
;
g_paramsFound
.
setAutoDelete
(
FALSE
);
g_paramsFound
.
setAutoDelete
(
FALSE
);
g_paramsFound
.
clear
();
g_paramsFound
.
clear
();
g_searchUrl
=
""
;
g_searchUrl
=
""
;
...
...
src/docparser.h
View file @
02aa9b67
...
@@ -53,6 +53,7 @@ void initDocParser();
...
@@ -53,6 +53,7 @@ void initDocParser();
* @param exampleName Base name of the example file (0 if isExample is FALSE).
* @param exampleName Base name of the example file (0 if isExample is FALSE).
* @param singleLine Output should be presented on a single line, so without
* @param singleLine Output should be presented on a single line, so without
* starting a new paragraph at the end.
* starting a new paragraph at the end.
* @param isParam TRUE if the documentation is for a parameter.
* @returns Root node of the abstract syntax tree. Ownership of the
* @returns Root node of the abstract syntax tree. Ownership of the
* pointer is handed over to the caller.
* pointer is handed over to the caller.
*/
*/
...
@@ -60,7 +61,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
...
@@ -60,7 +61,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
Definition
*
context
,
MemberDef
*
md
,
Definition
*
context
,
MemberDef
*
md
,
const
char
*
input
,
bool
indexWords
,
const
char
*
input
,
bool
indexWords
,
bool
isExample
,
const
char
*
exampleName
=
0
,
bool
isExample
,
const
char
*
exampleName
=
0
,
bool
singleLine
=
FALSE
);
bool
singleLine
=
FALSE
,
bool
isParam
=
FALSE
);
/*! Main entry point for parsing simple text fragments. These
/*! Main entry point for parsing simple text fragments. These
* fragments are limited to words, whitespace and symbols.
* fragments are limited to words, whitespace and symbols.
...
...
src/doxygen.cpp
View file @
02aa9b67
...
@@ -511,6 +511,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
...
@@ -511,6 +511,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
}
}
}
}
#if 0
static bool addNamespace(Entry *root,ClassDef *cd)
static bool addNamespace(Entry *root,ClassDef *cd)
{
{
// see if this class is defined inside a namespace
// see if this class is defined inside a namespace
...
@@ -539,6 +540,7 @@ static bool addNamespace(Entry *root,ClassDef *cd)
...
@@ -539,6 +540,7 @@ static bool addNamespace(Entry *root,ClassDef *cd)
}
}
return FALSE;
return FALSE;
}
}
#endif
static
Definition
*
findScope
(
Entry
*
root
,
int
level
=
0
)
static
Definition
*
findScope
(
Entry
*
root
,
int
level
=
0
)
{
{
...
@@ -698,7 +700,7 @@ static void addClassToContext(Entry *root)
...
@@ -698,7 +700,7 @@ static void addClassToContext(Entry *root)
{
{
addIncludeFile
(
cd
,
fd
,
root
);
addIncludeFile
(
cd
,
fd
,
root
);
}
}
addNamespace
(
root
,
cd
);
//
addNamespace(root,cd);
if
(
fd
&&
(
root
->
section
&
Entry
::
COMPOUND_MASK
))
if
(
fd
&&
(
root
->
section
&
Entry
::
COMPOUND_MASK
))
{
{
//printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
//printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
...
@@ -793,7 +795,7 @@ static void addClassToContext(Entry *root)
...
@@ -793,7 +795,7 @@ static void addClassToContext(Entry *root)
cd
->
setRefItems
(
root
->
sli
);
cd
->
setRefItems
(
root
->
sli
);
// see if the class is found inside a namespace
// see if the class is found inside a namespace
bool
found
=
addNamespace
(
root
,
cd
);
//
bool found=addNamespace(root,cd);
cd
->
setFileDef
(
fd
);
cd
->
setFileDef
(
fd
);
if
(
cd
->
hasDocumentation
())
if
(
cd
->
hasDocumentation
())
...
@@ -801,6 +803,7 @@ static void addClassToContext(Entry *root)
...
@@ -801,6 +803,7 @@ static void addClassToContext(Entry *root)
addIncludeFile
(
cd
,
fd
,
root
);
addIncludeFile
(
cd
,
fd
,
root
);
}
}
#if 0
// namespace is part of the class name
// namespace is part of the class name
if (!found && !namespaceName.isEmpty())
if (!found && !namespaceName.isEmpty())
{
{
...
@@ -824,6 +827,7 @@ static void addClassToContext(Entry *root)
...
@@ -824,6 +827,7 @@ static void addClassToContext(Entry *root)
// );
// );
fd->insertClass(cd);
fd->insertClass(cd);
}
}
#endif
// the empty string test is needed for extract all case
// the empty string test is needed for extract all case
cd
->
setBriefDescription
(
root
->
brief
,
root
->
briefFile
,
root
->
briefLine
);
cd
->
setBriefDescription
(
root
->
brief
,
root
->
briefFile
,
root
->
briefLine
);
...
@@ -1720,7 +1724,7 @@ static MemberDef *addVariableToFile(
...
@@ -1720,7 +1724,7 @@ static MemberDef *addVariableToFile(
*/
*/
static
int
findFunctionPtr
(
const
QCString
&
type
,
int
*
pLength
=
0
)
static
int
findFunctionPtr
(
const
QCString
&
type
,
int
*
pLength
=
0
)
{
{
static
const
QRegExp
re
(
"([^)]*"
);
static
const
QRegExp
re
(
"([^)]
\\
*"
);
int
i
=-
1
,
l
;
int
i
=-
1
,
l
;
if
(
!
type
.
isEmpty
()
&&
// return type is non-empty
if
(
!
type
.
isEmpty
()
&&
// return type is non-empty
(
i
=
re
.
match
(
type
,
0
,
&
l
))
!=-
1
&&
// contains a (*
(
i
=
re
.
match
(
type
,
0
,
&
l
))
!=-
1
&&
// contains a (*
...
@@ -1901,6 +1905,7 @@ static void buildVarList(Entry *root)
...
@@ -1901,6 +1905,7 @@ static void buildVarList(Entry *root)
{
{
root
->
type
=
root
->
type
.
left
(
root
->
type
.
length
()
-
1
);
root
->
type
=
root
->
type
.
left
(
root
->
type
.
length
()
-
1
);
root
->
args
.
prepend
(
")"
);
root
->
args
.
prepend
(
")"
);
printf
(
"root->type=%s root->args=%s
\n
"
,
root
->
type
.
data
(),
root
->
args
.
data
());
}
}
}
}
}
}
...
@@ -4722,10 +4727,43 @@ static void findMember(Entry *root,
...
@@ -4722,10 +4727,43 @@ static void findMember(Entry *root,
className
.
data
(),
namespaceName
.
data
()
className
.
data
(),
namespaceName
.
data
()
);
);
// TODO: match loop for all possible scopes
//#define NEWMATCH
#ifdef NEWMATCH
bool
ambig
;
bool
matching
=
FileDef
*
fd
=
findFileDef
(
Doxygen
::
inputNameDict
,
root
->
fileName
,
ambig
);
md
->
isVariable
()
||
md
->
isTypedef
()
||
// needed for function pointers
(
md
->
argumentList
()
==
0
&&
root
->
argList
->
count
()
==
0
)
||
matchArguments2
(
md
->
getClassDef
(),
md
->
getFileDef
(),
argList
,
cd
,
fd
,
root
->
argList
,
TRUE
);
Debug
::
print
(
Debug
::
FindMembers
,
0
,
"6. match results of matchArguments2 = %d
\n
"
,
matching
);
if
(
substDone
)
// found a new argument list
{
if
(
matching
)
// replace member's argument list
{
md
->
setDefinitionTemplateParameterLists
(
root
->
tArgLists
);
md
->
setArgumentList
(
argList
);
}
else
// no match -> delete argument list
{
delete
argList
;
}
}
if
(
matching
)
{
//printf("addMemberDocs root->inLine=%d md->isInline()=%d\n",
// root->inLine,md->isInline());
addMemberDocs
(
root
,
md
,
funcDecl
,
0
,
overloaded
,
0
/* TODO */
);
count
++
;
memFound
=
TRUE
;
}
#else // old matching routine
// TODO: match loop for all possible scopes
// list of namespaces using in the file/namespace that this
// list of namespaces using in the file/namespace that this
// member definition is part of
// member definition is part of
...
@@ -4829,6 +4867,7 @@ static void findMember(Entry *root,
...
@@ -4829,6 +4867,7 @@ static void findMember(Entry *root,
}
}
delete
cl
;
delete
cl
;
delete
nl
;
delete
nl
;
#endif
}
}
}
}
if
(
count
==
0
&&
root
->
parent
&&
root
->
parent
->
section
==
Entry
::
OBJCIMPL_SEC
)
if
(
count
==
0
&&
root
->
parent
&&
root
->
parent
->
section
==
Entry
::
OBJCIMPL_SEC
)
...
@@ -7294,6 +7333,55 @@ static void copyStyleSheet()
...
@@ -7294,6 +7333,55 @@ static void copyStyleSheet()
}
}
}
}
#ifdef USE_TMP_FILE
static
void
readFiles
(
const
QCString
&
tmpFile
)
{
QFile
outFile
(
tmpFile
);
if
(
outFile
.
open
(
IO_WriteOnly
))
{
QTextStream
out
(
&
outFile
);
QCString
*
s
=
inputFiles
.
first
();
while
(
s
)
{
QCString
fileName
=*
s
;
//bool multiLineIsBrief = Config_getBool("MULTILINE_CPP_IS_BRIEF");
out
<<
(
char
)
6
;
out
<<
fileName
;
out
<<
(
char
)
6
;
out
<<
'\n'
;
QFileInfo
fi
(
fileName
);
BufStr
preBuf
(
fi
.
size
()
+
4096
);
BufStr
*
bufPtr
=
&
preBuf
;
if
(
Config_getBool
(
"ENABLE_PREPROCESSING"
))
{
msg
(
"Preprocessing %s...
\n
"
,
s
->
data
());
preprocessFile
(
fileName
,
*
bufPtr
);
}
else
{
msg
(
"Reading %s...
\n
"
,
s
->
data
());
copyAndFilterFile
(
fileName
,
*
bufPtr
);
}
bufPtr
->
addChar
(
'\n'
);
/* to prevent problems under Windows ? */
BufStr
convBuf
(
bufPtr
->
curPos
()
+
1024
);
convertCppComments
(
&
preBuf
,
&
convBuf
,
fileName
);
out
.
writeRawBytes
(
convBuf
.
data
(),
convBuf
.
curPos
());
s
=
inputFiles
.
next
();
//printf("-------> adding new line\n");
}
}
}
#else
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Reads a file to a string.
// Reads a file to a string.
// The name of the file is written in front of the file's contents and
// The name of the file is written in front of the file's contents and
...
@@ -7342,6 +7430,7 @@ static void readFiles(BufStr &output)
...
@@ -7342,6 +7430,7 @@ static void readFiles(BufStr &output)
}
}
output
.
addChar
(
0
);
output
.
addChar
(
0
);
}
}
#endif
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Read all files matching at least one pattern in `patList' in the
// Read all files matching at least one pattern in `patList' in the
...
@@ -8230,27 +8319,6 @@ void parseInput()
...
@@ -8230,27 +8319,6 @@ void parseInput()
s
=
tagFileList
.
next
();
s
=
tagFileList
.
next
();
}
}
/**************************************************************************
* Read Input Files *
**************************************************************************/
BufStr
input
(
inputSize
+
1
);
// Add one byte extra for \0 termination
// read and preprocess all input files
readFiles
(
input
);
if
(
input
.
isEmpty
())
{
err
(
"No input read, no output generated!
\n
"
);
delete
root
;
cleanUpDoxygen
();
exit
(
1
);
}
else
{
msg
(
"Read %d bytes
\n
"
,
input
.
curPos
());
}
/**************************************************************************
/**************************************************************************
* Check/create output directorties *
* Check/create output directorties *
**************************************************************************/
**************************************************************************/
...
@@ -8386,18 +8454,70 @@ void parseInput()
...
@@ -8386,18 +8454,70 @@ void parseInput()
readFormulaRepository
();
readFormulaRepository
();
}
}
root
->
program
=
input
;
/**************************************************************************
/**************************************************************************
*
Gather information *
*
Read Input Files *
**************************************************************************/
**************************************************************************/
#ifdef USE_TMP_FILE
QCString
tmpName
=
Config_getString
(
"OUTPUT_DIRECTORY"
)
+
"/doxygen_scratchfile.tmp"
;
// read and preprocess all input files
readFiles
(
tmpName
);
QFileInfo
fi
(
tmpName
);
if
(
fi
.
size
()
==
0
)
{
err
(
"No input read, no output generated!
\n
"
);
delete
root
;
cleanUpDoxygen
();
exit
(
1
);
}
else
{
msg
(
"Read %d bytes
\n
"
,
fi
.
size
());
}
msg
(
"Parsing input...
\n
"
);
parseMain
(
root
,
tmpName
);
// build a tree of entries
// remove temp file
QDir
().
remove
(
tmpName
);
#else // use memory to store intermediate results
BufStr
input
(
inputSize
+
1
);
// Add one byte extra for \0 termination
// read and preprocess all input files
readFiles
(
input
);
if
(
input
.
isEmpty
())
{
err
(
"No input read, no output generated!
\n
"
);
delete
root
;
cleanUpDoxygen
();
exit
(
1
);
}
else
{
msg
(
"Read %d bytes
\n
"
,
input
.
curPos
());
}
root
->
program
=
input
;
msg
(
"Parsing input...
\n
"
);
msg
(
"Parsing input...
\n
"
);
parseMain
(
root
);
// build a tree of entries
parseMain
(
root
);
// build a tree of entries
msg
(
"Freeing input...
\n
"
);
msg
(
"Freeing input...
\n
"
);
input
.
resize
(
0
);
input
.
resize
(
0
);
#endif
/**************************************************************************
* Gather information *
**************************************************************************/
msg
(
"Building group list...
\n
"
);
msg
(
"Building group list...
\n
"
);
buildGroupList
(
root
);
buildGroupList
(
root
);
organizeSubGroups
(
root
);
organizeSubGroups
(
root
);
...
...
src/doxygen.h
View file @
02aa9b67
...
@@ -123,4 +123,7 @@ void readConfiguration(int argc, char **argv);
...
@@ -123,4 +123,7 @@ void readConfiguration(int argc, char **argv);
void
parseInput
();
void
parseInput
();
void
generateOutput
();
void
generateOutput
();
#undef USE_TMP_FILE
//#define USE_TMP_FILE
#endif
#endif
src/groupdef.cpp
View file @
02aa9b67
...
@@ -38,11 +38,11 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
...
@@ -38,11 +38,11 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
const
char
*
refFileName
)
:
Definition
(
df
,
dl
,
na
)
const
char
*
refFileName
)
:
Definition
(
df
,
dl
,
na
)
{
{
fileList
=
new
FileList
;
fileList
=
new
FileList
;
classSDict
=
new
ClassSDict
(
25
7
);
classSDict
=
new
ClassSDict
(
1
7
);
groupList
=
new
GroupList
;
groupList
=
new
GroupList
;
namespace
List
=
new
NamespaceList
;
namespace
SDict
=
new
NamespaceSDict
(
17
)
;
pageDict
=
new
PageSDict
(
25
7
);
pageDict
=
new
PageSDict
(
1
7
);
exampleDict
=
new
PageSDict
(
25
7
);
exampleDict
=
new
PageSDict
(
1
7
);
dirList
=
new
DirList
;
dirList
=
new
DirList
;
allMemberList
=
new
MemberList
;
allMemberList
=
new
MemberList
;
allMemberNameInfoSDict
=
new
MemberNameInfoSDict
(
17
);
allMemberNameInfoSDict
=
new
MemberNameInfoSDict
(
17
);
...
@@ -81,7 +81,7 @@ GroupDef::~GroupDef()
...
@@ -81,7 +81,7 @@ GroupDef::~GroupDef()
delete
fileList
;
delete
fileList
;
delete
classSDict
;
delete
classSDict
;
delete
groupList
;
delete
groupList
;
delete
namespace
Lis
t
;
delete
namespace
SDic
t
;
delete
pageDict
;
delete
pageDict
;
delete
exampleDict
;
delete
exampleDict
;
delete
allMemberList
;
delete
allMemberList
;
...
@@ -152,9 +152,9 @@ void GroupDef::addClass(const ClassDef *cd)
...
@@ -152,9 +152,9 @@ void GroupDef::addClass(const ClassDef *cd)
void
GroupDef
::
addNamespace
(
const
NamespaceDef
*
def
)
void
GroupDef
::
addNamespace
(
const
NamespaceDef
*
def
)
{
{
if
(
Config_getBool
(
"SORT_BRIEF_DOCS"
))
if
(
Config_getBool
(
"SORT_BRIEF_DOCS"
))
namespace
List
->
inSort
(
def
);
namespace
SDict
->
inSort
(
def
->
name
(),
def
);
else
else
namespace
List
->
append
(
def
);
namespace
SDict
->
append
(
def
->
name
(),
def
);
}
}
void
GroupDef
::
addDir
(
const
DirDef
*
def
)
void
GroupDef
::
addDir
(
const
DirDef
*
def
)
...
@@ -414,7 +414,7 @@ int GroupDef::countMembers() const
...
@@ -414,7 +414,7 @@ int GroupDef::countMembers() const
{
{
return
fileList
->
count
()
+
return
fileList
->
count
()
+
classSDict
->
count
()
+
classSDict
->
count
()
+
namespace
Lis
t
->
count
()
+
namespace
SDic
t
->
count
()
+
groupList
->
count
()
+
groupList
->
count
()
+
allMemberList
->
count
()
+
allMemberList
->
count
()
+
pageDict
->
count
()
+
pageDict
->
count
()
+
...
@@ -547,35 +547,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
...
@@ -547,35 +547,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
}
// write list of namespaces
// write list of namespaces
if
(
namespaceList
->
count
()
>
0
)
namespaceSDict
->
writeDeclaration
(
ol
);
{
ol
.
startMemberHeader
();
ol
.
parseText
(
theTranslator
->
trNamespaces
());
ol
.
endMemberHeader
();
ol
.
startMemberList
();
NamespaceDef
*
nd
=
namespaceList
->
first
();
while
(
nd
)
{
ol
.
startMemberItem
(
0
);
ol
.
docify
(
"namespace "
);
ol
.
insertMemberAlign
();
ol
.
writeObjectLink
(
nd
->
getReference
(),
nd
->
getOutputFileBase
(),
0
,
nd
->
name
());
if
(
!
Config_getString
(
"GENERATE_TAGFILE"
).
isEmpty
())
{
Doxygen
::
tagFile
<<
" <namespace>"
<<
convertToXML
(
nd
->
name
())
<<
"</namespace>"
<<
endl
;
}
ol
.
endMemberItem
();
if
(
!
nd
->
briefDescription
().
isEmpty
()
&&
Config_getBool
(
"BRIEF_MEMBER_DESC"
))
{
ol
.
startMemberDescription
();
ol
.
parseDoc
(
briefFile
(),
briefLine
(),
nd
,
0
,
nd
->
briefDescription
(),
FALSE
,
FALSE
);
ol
.
endMemberDescription
();
ol
.
newParagraph
();
}
nd
=
namespaceList
->
next
();
}
ol
.
endMemberList
();
}
// write list of groups
// write list of groups
if
(
groupList
->
count
()
>
0
)
if
(
groupList
->
count
()
>
0
)
...
@@ -641,7 +613,6 @@ void GroupDef::writeDocumentation(OutputList &ol)
...
@@ -641,7 +613,6 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol
.
endMemberList
();
ol
.
endMemberList
();
}
}
// write list of classes
// write list of classes
classSDict
->
writeDeclaration
(
ol
);
classSDict
->
writeDeclaration
(
ol
);
...
...
src/groupdef.h
View file @
02aa9b67
...
@@ -32,7 +32,7 @@ class ClassDef;
...
@@ -32,7 +32,7 @@ class ClassDef;
class
NamespaceDef
;
class
NamespaceDef
;
class
GroupList
;
class
GroupList
;
class
OutputList
;
class
OutputList
;
class
Namespace
Lis
t
;
class
Namespace
SDic
t
;
class
MemberGroupSDict
;
class
MemberGroupSDict
;
class
MemberNameInfoSDict
;
class
MemberNameInfoSDict
;
class
PageSDict
;
class
PageSDict
;
...
@@ -108,7 +108,7 @@ class GroupDef : public Definition
...
@@ -108,7 +108,7 @@ class GroupDef : public Definition
FileList
*
getFiles
()
const
{
return
fileList
;
}
FileList
*
getFiles
()
const
{
return
fileList
;
}
ClassSDict
*
getClasses
()
const
{
return
classSDict
;
}
ClassSDict
*
getClasses
()
const
{
return
classSDict
;
}
Namespace
List
*
getNamespaces
()
const
{
return
namespaceLis
t
;
}
Namespace
SDict
*
getNamespaces
()
const
{
return
namespaceSDic
t
;
}
GroupList
*
getSubGroups
()
const
{
return
groupList
;
}
GroupList
*
getSubGroups
()
const
{
return
groupList
;
}
PageSDict
*
getPages
()
const
{
return
pageDict
;
}
PageSDict
*
getPages
()
const
{
return
pageDict
;
}
DirList
*
getDirs
()
const
{
return
dirList
;
}
DirList
*
getDirs
()
const
{
return
dirList
;
}
...
@@ -122,7 +122,7 @@ class GroupDef : public Definition
...
@@ -122,7 +122,7 @@ class GroupDef : public Definition
QCString
fileName
;
// base name of the generated file
QCString
fileName
;
// base name of the generated file
FileList
*
fileList
;
// list of files in the group
FileList
*
fileList
;
// list of files in the group
ClassSDict
*
classSDict
;
// list of classes in the group
ClassSDict
*
classSDict
;
// list of classes in the group
Namespace
List
*
namespaceList
;
// list of namespaces in the group
Namespace
SDict
*
namespaceSDict
;
// list of namespaces in the group
GroupList
*
groupList
;
// list of sub groups.
GroupList
*
groupList
;
// list of sub groups.
PageSDict
*
pageDict
;
// list of pages in the group
PageSDict
*
pageDict
;
// list of pages in the group
PageSDict
*
exampleDict
;
// list of examples in the group
PageSDict
*
exampleDict
;
// list of examples in the group
...
...
src/htmlgen.cpp
View file @
02aa9b67
...
@@ -46,8 +46,18 @@ static const char *defaultStyleSheet =
...
@@ -46,8 +46,18 @@ static const char *defaultStyleSheet =
"BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
\n
"
"BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
\n
"
" font-family: Geneva, Arial, Helvetica, sans-serif;
\n
"
" font-family: Geneva, Arial, Helvetica, sans-serif;
\n
"
"}
\n
"
"}
\n
"
"BODY {
\n
"
" font-size: 90%;
\n
"
"}
\n
"
"H1 {
\n
"
"H1 {
\n
"
" text-align: center;
\n
"
" text-align: center;
\n
"
" font-size: 160%;
\n
"
"}
\n
"
"H2 {
\n
"
" font-size: 120%;
\n
"
"}
\n
"
"H3 {
\n
"
" font-size: 110%;
\n
"
"}
\n
"
"}
\n
"
"CAPTION { font-weight: bold }
\n
"
"CAPTION { font-weight: bold }
\n
"
"DIV.qindex {
\n
"
"DIV.qindex {
\n
"
...
@@ -134,7 +144,7 @@ static const char *defaultStyleSheet =
...
@@ -134,7 +144,7 @@ static const char *defaultStyleSheet =
" margin-bottom: 6px;
\n
"
" margin-bottom: 6px;
\n
"
" font-weight: bold;
\n
"
" font-weight: bold;
\n
"
"}
\n
"
"}
\n
"
"DIV.groupText { margin-left: 16px; font-style: italic; font-size:
14px
}
\n
"
"DIV.groupText { margin-left: 16px; font-style: italic; font-size:
90%
}
\n
"
"BODY {
\n
"
"BODY {
\n
"
" background: white;
\n
"
" background: white;
\n
"
" color: black;
\n
"
" color: black;
\n
"
...
@@ -189,7 +199,7 @@ static const char *defaultStyleSheet =
...
@@ -189,7 +199,7 @@ static const char *defaultStyleSheet =
"}
\n
"
"}
\n
"
".mdescLeft {
\n
"
".mdescLeft {
\n
"
" padding: 0px 8px 4px 8px;
\n
"
" padding: 0px 8px 4px 8px;
\n
"
" font-size:
12px
;
\n
"
" font-size:
80%
;
\n
"
" font-style: italic;
\n
"
" font-style: italic;
\n
"
" background-color: #FAFAFA;
\n
"
" background-color: #FAFAFA;
\n
"
" border-top: 1px none #E0E0E0;
\n
"
" border-top: 1px none #E0E0E0;
\n
"
...
@@ -200,7 +210,7 @@ static const char *defaultStyleSheet =
...
@@ -200,7 +210,7 @@ static const char *defaultStyleSheet =
"}
\n
"
"}
\n
"
".mdescRight {
\n
"
".mdescRight {
\n
"
" padding: 0px 8px 4px 8px;
\n
"
" padding: 0px 8px 4px 8px;
\n
"
" font-size:
12px
;
\n
"
" font-size:
80%
;
\n
"
" font-style: italic;
\n
"
" font-style: italic;
\n
"
" background-color: #FAFAFA;
\n
"
" background-color: #FAFAFA;
\n
"
" border-top: 1px none #E0E0E0;
\n
"
" border-top: 1px none #E0E0E0;
\n
"
...
@@ -225,7 +235,7 @@ static const char *defaultStyleSheet =
...
@@ -225,7 +235,7 @@ static const char *defaultStyleSheet =
" border-bottom-style: none;
\n
"
" border-bottom-style: none;
\n
"
" border-left-style: none;
\n
"
" border-left-style: none;
\n
"
" background-color: #FAFAFA;
\n
"
" background-color: #FAFAFA;
\n
"
" font-size:
12px
;
\n
"
" font-size:
80%
;
\n
"
"}
\n
"
"}
\n
"
".memItemRight {
\n
"
".memItemRight {
\n
"
" padding: 1px 8px 0px 8px;
\n
"
" padding: 1px 8px 0px 8px;
\n
"
...
@@ -243,7 +253,7 @@ static const char *defaultStyleSheet =
...
@@ -243,7 +253,7 @@ static const char *defaultStyleSheet =
" border-bottom-style: none;
\n
"
" border-bottom-style: none;
\n
"
" border-left-style: none;
\n
"
" border-left-style: none;
\n
"
" background-color: #FAFAFA;
\n
"
" background-color: #FAFAFA;
\n
"
" font-size:
13px
;
\n
"
" font-size:
80%
;
\n
"
"}
\n
"
"}
\n
"
".memTemplItemLeft {
\n
"
".memTemplItemLeft {
\n
"
" padding: 1px 0px 0px 8px;
\n
"
" padding: 1px 0px 0px 8px;
\n
"
...
@@ -261,7 +271,7 @@ static const char *defaultStyleSheet =
...
@@ -261,7 +271,7 @@ static const char *defaultStyleSheet =
" border-bottom-style: none;
\n
"
" border-bottom-style: none;
\n
"
" border-left-style: none;
\n
"
" border-left-style: none;
\n
"
" background-color: #FAFAFA;
\n
"
" background-color: #FAFAFA;
\n
"
" font-size:
12px
;
\n
"
" font-size:
80%
;
\n
"
"}
\n
"
"}
\n
"
".memTemplItemRight {
\n
"
".memTemplItemRight {
\n
"
" padding: 1px 8px 0px 8px;
\n
"
" padding: 1px 8px 0px 8px;
\n
"
...
@@ -279,7 +289,7 @@ static const char *defaultStyleSheet =
...
@@ -279,7 +289,7 @@ static const char *defaultStyleSheet =
" border-bottom-style: none;
\n
"
" border-bottom-style: none;
\n
"
" border-left-style: none;
\n
"
" border-left-style: none;
\n
"
" background-color: #FAFAFA;
\n
"
" background-color: #FAFAFA;
\n
"
" font-size:
13px
;
\n
"
" font-size:
80%
;
\n
"
"}
\n
"
"}
\n
"
".memTemplParams {
\n
"
".memTemplParams {
\n
"
" padding: 1px 0px 0px 8px;
\n
"
" padding: 1px 0px 0px 8px;
\n
"
...
@@ -298,7 +308,7 @@ static const char *defaultStyleSheet =
...
@@ -298,7 +308,7 @@ static const char *defaultStyleSheet =
" border-left-style: none;
\n
"
" border-left-style: none;
\n
"
" color: #606060;
\n
"
" color: #606060;
\n
"
" background-color: #FAFAFA;
\n
"
" background-color: #FAFAFA;
\n
"
" font-size:
12px
;
\n
"
" font-size:
80%
;
\n
"
"}
\n
"
"}
\n
"
".search { color: #003399;
\n
"
".search { color: #003399;
\n
"
" font-weight: bold;
\n
"
" font-weight: bold;
\n
"
...
@@ -326,9 +336,14 @@ static const char *defaultStyleSheet =
...
@@ -326,9 +336,14 @@ static const char *defaultStyleSheet =
"}
\n
"
"}
\n
"
"TH.dirtab { background: #eeeeff;
\n
"
"TH.dirtab { background: #eeeeff;
\n
"
" font-weight: bold;
\n
"
" font-weight: bold;
\n
"
"}
\n
"
"HR { height: 1px;
\n
"
" border: none;
\n
"
" border-top: 1px solid black;
\n
"
"}
\n
"
;
"}
\n
"
;
static
QCString
g_header
;
static
QCString
g_header
;
static
QCString
g_footer
;
static
QCString
g_footer
;
...
...
src/index.cpp
View file @
02aa9b67
...
@@ -2539,7 +2539,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
...
@@ -2539,7 +2539,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
numSubItems
+=
gd
->
docFuncMembers
.
count
();
numSubItems
+=
gd
->
docFuncMembers
.
count
();
numSubItems
+=
gd
->
docVarMembers
.
count
();
numSubItems
+=
gd
->
docVarMembers
.
count
();
numSubItems
+=
gd
->
docProtoMembers
.
count
();
numSubItems
+=
gd
->
docProtoMembers
.
count
();
numSubItems
+=
gd
->
namespace
Lis
t
->
count
();
numSubItems
+=
gd
->
namespace
SDic
t
->
count
();
numSubItems
+=
gd
->
classSDict
->
count
();
numSubItems
+=
gd
->
classSDict
->
count
();
numSubItems
+=
gd
->
fileList
->
count
();
numSubItems
+=
gd
->
fileList
->
count
();
numSubItems
+=
gd
->
exampleDict
->
count
();
numSubItems
+=
gd
->
exampleDict
->
count
();
...
@@ -2676,8 +2676,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
...
@@ -2676,8 +2676,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
}
}
// write namespaces
// write namespaces
Namespace
List
*
namespaceList
=
gd
->
namespaceLis
t
;
Namespace
SDict
*
namespaceSDict
=
gd
->
namespaceSDic
t
;
if
(
namespace
Lis
t
->
count
()
>
0
)
if
(
namespace
SDic
t
->
count
()
>
0
)
{
{
if
(
htmlHelp
)
if
(
htmlHelp
)
{
{
...
@@ -2692,8 +2692,9 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
...
@@ -2692,8 +2692,9 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
ftvHelp
->
incContentsDepth
();
ftvHelp
->
incContentsDepth
();
}
}
NamespaceDef
*
nsd
=
namespaceList
->
first
();
NamespaceSDict
::
Iterator
ni
(
*
namespaceSDict
);
while
(
nsd
)
NamespaceDef
*
nsd
;
for
(
ni
.
toFirst
();(
nsd
=
ni
.
current
());
++
ni
)
{
{
if
(
htmlHelp
)
if
(
htmlHelp
)
{
{
...
@@ -2703,7 +2704,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
...
@@ -2703,7 +2704,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
{
{
ftvHelp
->
addContentsItem
(
FALSE
,
nsd
->
getReference
(),
nsd
->
getOutputFileBase
(),
0
,
convertToHtml
(
nsd
->
name
()));
ftvHelp
->
addContentsItem
(
FALSE
,
nsd
->
getReference
(),
nsd
->
getOutputFileBase
(),
0
,
convertToHtml
(
nsd
->
name
()));
}
}
nsd
=
namespaceList
->
next
();
}
}
if
(
htmlHelp
)
htmlHelp
->
decContentsDepth
();
if
(
htmlHelp
)
htmlHelp
->
decContentsDepth
();
if
(
ftvHelp
)
ftvHelp
->
decContentsDepth
();
if
(
ftvHelp
)
ftvHelp
->
decContentsDepth
();
...
...
src/latexgen.cpp
View file @
02aa9b67
...
@@ -1378,7 +1378,7 @@ void LatexGenerator::writeNonBreakableSpace(int)
...
@@ -1378,7 +1378,7 @@ void LatexGenerator::writeNonBreakableSpace(int)
m_indent
++
;
m_indent
++
;
}
}
else
else
t
<<
"
\\
"
;
t
<<
"
~
"
;
}
}
void
LatexGenerator
::
startMemberList
()
void
LatexGenerator
::
startMemberList
()
...
...
src/memberdef.cpp
View file @
02aa9b67
...
@@ -1582,7 +1582,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
...
@@ -1582,7 +1582,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol
.
docify
(
a
->
name
);
ol
.
docify
(
a
->
name
);
ol
.
endDescTableTitle
();
ol
.
endDescTableTitle
();
ol
.
startDescTableData
();
ol
.
startDescTableData
();
ol
.
parseDoc
(
docFile
(),
docLine
(),
getOuterScope
()
?
getOuterScope
()
:
container
,
this
,
a
->
docs
+
"
\n
"
,
TRUE
,
FALSE
);
ol
.
parseDoc
(
docFile
(),
docLine
(),
getOuterScope
()
?
getOuterScope
()
:
container
,
this
,
a
->
docs
+
"
\n
"
,
// docStr
TRUE
,
// indexWords
FALSE
,
// isExample
0
,
// exampleName
FALSE
,
// singleLine
TRUE
// isParam
);
ol
.
endDescTableData
();
ol
.
endDescTableData
();
}
}
}
}
...
...
src/namespacedef.cpp
View file @
02aa9b67
...
@@ -44,7 +44,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl,
...
@@ -44,7 +44,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl,
}
}
classSDict
=
new
ClassSDict
(
17
);
classSDict
=
new
ClassSDict
(
17
);
namespaceSDict
=
new
NamespaceSDict
(
17
);
namespaceSDict
=
new
NamespaceSDict
(
17
);
m_innerCompounds
=
new
SDict
<
Definition
>
(
25
7
);
m_innerCompounds
=
new
SDict
<
Definition
>
(
1
7
);
usingDirList
=
0
;
usingDirList
=
0
;
usingDeclList
=
0
;
usingDeclList
=
0
;
setReference
(
lref
);
setReference
(
lref
);
...
@@ -283,6 +283,10 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
...
@@ -283,6 +283,10 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
pageTitle
=
theTranslator
->
trNamespaceReference
(
displayName
());
pageTitle
=
theTranslator
->
trNamespaceReference
(
displayName
());
}
}
startFile
(
ol
,
getOutputFileBase
(),
name
(),
pageTitle
);
startFile
(
ol
,
getOutputFileBase
(),
name
(),
pageTitle
);
if
(
getOuterScope
()
!=
Doxygen
::
globalScope
)
{
writeNavigationPath
(
ol
);
}
startTitle
(
ol
,
getOutputFileBase
());
startTitle
(
ol
,
getOutputFileBase
());
ol
.
parseText
(
pageTitle
);
ol
.
parseText
(
pageTitle
);
addGroupListToTitle
(
ol
,
this
);
addGroupListToTitle
(
ol
,
this
);
...
@@ -330,7 +334,9 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
...
@@ -330,7 +334,9 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
ol
.
endTextBlock
();
ol
.
endTextBlock
();
ol
.
startMemberSections
();
ol
.
startMemberSections
();
classSDict
->
writeDeclaration
(
ol
);
classSDict
->
writeDeclaration
(
ol
,
0
,
0
,
TRUE
);
namespaceSDict
->
writeDeclaration
(
ol
,
TRUE
);
/* write user defined member groups */
/* write user defined member groups */
MemberGroupSDict
::
Iterator
mgli
(
*
memberGroupSDict
);
MemberGroupSDict
::
Iterator
mgli
(
*
memberGroupSDict
);
...
@@ -508,3 +514,59 @@ void NamespaceDef::combineUsingRelations()
...
@@ -508,3 +514,59 @@ void NamespaceDef::combineUsingRelations()
}
}
}
}
void
NamespaceSDict
::
writeDeclaration
(
OutputList
&
ol
,
bool
localName
)
{
if
(
count
()
==
0
)
return
;
// write list of namespaces
ol
.
startMemberHeader
();
bool
javaOpt
=
Config_getBool
(
"OPTIMIZE_OUTPUT_JAVA"
);
if
(
javaOpt
)
{
ol
.
parseText
(
theTranslator
->
trPackages
());
}
else
{
ol
.
parseText
(
theTranslator
->
trNamespaces
());
}
ol
.
endMemberHeader
();
ol
.
startMemberList
();
SDict
<
NamespaceDef
>::
Iterator
ni
(
*
this
);
NamespaceDef
*
nd
;
for
(
ni
.
toFirst
();(
nd
=
ni
.
current
());
++
ni
)
{
ol
.
startMemberItem
(
0
);
if
(
javaOpt
)
{
ol
.
docify
(
"package "
);
}
else
{
ol
.
docify
(
"namespace "
);
}
ol
.
insertMemberAlign
();
QCString
name
;
if
(
localName
)
{
name
=
nd
->
localName
();
}
else
{
name
=
nd
->
displayName
();
}
ol
.
writeObjectLink
(
nd
->
getReference
(),
nd
->
getOutputFileBase
(),
0
,
name
);
if
(
!
Config_getString
(
"GENERATE_TAGFILE"
).
isEmpty
())
{
Doxygen
::
tagFile
<<
" <namespace>"
<<
convertToXML
(
nd
->
name
())
<<
"</namespace>"
<<
endl
;
}
ol
.
endMemberItem
();
if
(
!
nd
->
briefDescription
().
isEmpty
()
&&
Config_getBool
(
"BRIEF_MEMBER_DESC"
))
{
ol
.
startMemberDescription
();
ol
.
parseDoc
(
nd
->
briefFile
(),
nd
->
briefLine
(),
nd
,
0
,
nd
->
briefDescription
(),
FALSE
,
FALSE
);
ol
.
endMemberDescription
();
ol
.
newParagraph
();
}
}
ol
.
endMemberList
();
}
src/namespacedef.h
View file @
02aa9b67
...
@@ -163,6 +163,7 @@ class NamespaceSDict : public SDict<NamespaceDef>
...
@@ -163,6 +163,7 @@ class NamespaceSDict : public SDict<NamespaceDef>
((
NamespaceDef
*
)
item2
)
->
name
()
((
NamespaceDef
*
)
item2
)
->
name
()
);
);
}
}
void
writeDeclaration
(
OutputList
&
ol
,
bool
localName
=
FALSE
);
};
};
...
...
src/outputlist.cpp
View file @
02aa9b67
...
@@ -133,7 +133,7 @@ void OutputList::parseDoc(const char *fileName,int startLine,
...
@@ -133,7 +133,7 @@ void OutputList::parseDoc(const char *fileName,int startLine,
Definition
*
ctx
,
MemberDef
*
md
,
Definition
*
ctx
,
MemberDef
*
md
,
const
QCString
&
docStr
,
bool
indexWords
,
const
QCString
&
docStr
,
bool
indexWords
,
bool
isExample
,
const
char
*
exampleName
,
bool
isExample
,
const
char
*
exampleName
,
bool
singleLine
)
bool
singleLine
,
bool
isParam
)
{
{
int
count
=
0
;
int
count
=
0
;
if
(
docStr
.
isEmpty
())
return
;
if
(
docStr
.
isEmpty
())
return
;
...
@@ -151,13 +151,13 @@ void OutputList::parseDoc(const char *fileName,int startLine,
...
@@ -151,13 +151,13 @@ void OutputList::parseDoc(const char *fileName,int startLine,
{
{
root
=
validatingParseDoc
(
fileName
,
startLine
,
root
=
validatingParseDoc
(
fileName
,
startLine
,
ctx
,
md
,
docStr
,
indexWords
,
isExample
,
exampleName
,
ctx
,
md
,
docStr
,
indexWords
,
isExample
,
exampleName
,
singleLine
);
singleLine
,
isParam
);
}
}
else
else
{
{
root
=
validatingParseDoc
(
fileName
,
startLine
,
root
=
validatingParseDoc
(
fileName
,
startLine
,
ctx
,
md
,
docStr
+
"
\n
"
,
indexWords
,
isExample
,
exampleName
,
ctx
,
md
,
docStr
+
"
\n
"
,
indexWords
,
isExample
,
exampleName
,
singleLine
);
singleLine
,
isParam
);
}
}
og
=
outputs
->
first
();
og
=
outputs
->
first
();
...
...
src/outputlist.h
View file @
02aa9b67
...
@@ -64,7 +64,7 @@ class OutputList : public OutputDocInterface
...
@@ -64,7 +64,7 @@ class OutputList : public OutputDocInterface
void
parseDoc
(
const
char
*
fileName
,
int
startLine
,
void
parseDoc
(
const
char
*
fileName
,
int
startLine
,
Definition
*
ctx
,
MemberDef
*
md
,
const
QCString
&
docStr
,
Definition
*
ctx
,
MemberDef
*
md
,
const
QCString
&
docStr
,
bool
indexWords
,
bool
isExample
,
const
char
*
exampleName
=
0
,
bool
indexWords
,
bool
isExample
,
const
char
*
exampleName
=
0
,
bool
singleLine
=
FALSE
);
bool
singleLine
=
FALSE
,
bool
isParam
=
FALSE
);
void
parseText
(
const
QCString
&
textStr
);
void
parseText
(
const
QCString
&
textStr
);
...
...
src/perlmodgen.cpp
View file @
02aa9b67
...
@@ -1900,11 +1900,11 @@ void PerlModGenerator::generatePerlModForGroup(GroupDef *gd)
...
@@ -1900,11 +1900,11 @@ void PerlModGenerator::generatePerlModForGroup(GroupDef *gd)
m_output
.
closeList
();
m_output
.
closeList
();
}
}
Namespace
Lis
t
*
nl
=
gd
->
getNamespaces
();
Namespace
SDic
t
*
nl
=
gd
->
getNamespaces
();
if
(
nl
)
if
(
nl
)
{
{
m_output
.
openList
(
"namespaces"
);
m_output
.
openList
(
"namespaces"
);
Namespace
List
Iterator
nli
(
*
nl
);
Namespace
SDict
::
Iterator
nli
(
*
nl
);
NamespaceDef
*
nd
;
NamespaceDef
*
nd
;
for
(
nli
.
toFirst
();(
nd
=
nli
.
current
());
++
nli
)
for
(
nli
.
toFirst
();(
nd
=
nli
.
current
());
++
nli
)
m_output
.
openHash
()
m_output
.
openHash
()
...
...
src/scanner.h
View file @
02aa9b67
...
@@ -24,5 +24,6 @@ class OutputList;
...
@@ -24,5 +24,6 @@ class OutputList;
class
Entry
;
class
Entry
;
extern
void
parseMain
(
Entry
*
);
extern
void
parseMain
(
Entry
*
);
extern
void
parseMain
(
Entry
*
,
const
char
*
fileName
);
#endif
#endif
src/scanner.l
View file @
02aa9b67
...
@@ -30,6 +30,7 @@
...
@@ -30,6 +30,7 @@
#include <qstack.h>
#include <qstack.h>
#include <qregexp.h>
#include <qregexp.h>
#include <unistd.h>
#include <unistd.h>
#include <qfile.h>
#include "scanner.h"
#include "scanner.h"
#include "entry.h"
#include "entry.h"
...
@@ -54,6 +55,7 @@
...
@@ -54,6 +55,7 @@
*/
*/
static const char * inputString;
static const char * inputString;
static int inputPosition;
static int inputPosition;
static QFile inputFile;
static int lastContext;
static int lastContext;
static int lastCContext;
static int lastCContext;
static int lastDocContext;
static int lastDocContext;
...
@@ -169,6 +171,7 @@ static QCString g_skipBlockName;
...
@@ -169,6 +171,7 @@ static QCString g_skipBlockName;
static QCString oldStyleArgType;
static QCString oldStyleArgType;
static QCString docBackup;
static QCString docBackup;
static QCString briefBackup;
static QCString briefBackup;
static bool g_inputFromFile;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
...
@@ -644,12 +647,22 @@ static void addKnRArgInfo(const QCString &type,const QCString &name,
...
@@ -644,12 +647,22 @@ static void addKnRArgInfo(const QCString &type,const QCString &name,
static int yyread(char *buf,int max_size)
static int yyread(char *buf,int max_size)
{
{
int c=0;
int c=0;
#ifdef USE_TMP_FILE
if (g_inputFromFile)
{
c = inputFile.readBlock(buf,max_size);
if (c==-1) yy_fatal_error("input in flex scanner failed");
}
else
#endif
{
while( c < max_size && inputString[inputPosition] )
while( c < max_size && inputString[inputPosition] )
{
{
*buf = inputString[inputPosition++] ;
*buf = inputString[inputPosition++] ;
//printf("%d (%c)\n",*buf,*buf);
//printf("%d (%c)\n",*buf,*buf);
c++; buf++;
c++; buf++;
}
}
}
return c;
return c;
}
}
...
@@ -5925,6 +5938,7 @@ static void newDocState()
...
@@ -5925,6 +5938,7 @@ static void newDocState()
static void parseCompounds(Entry *rt)
static void parseCompounds(Entry *rt)
{
{
//printf("parseCompounds(%s)\n",rt->name.data());
//printf("parseCompounds(%s)\n",rt->name.data());
g_inputFromFile = FALSE;
EntryListIterator eli(*rt->sublist);
EntryListIterator eli(*rt->sublist);
Entry *ce;
Entry *ce;
for (;(ce=eli.current());++eli)
for (;(ce=eli.current());++eli)
...
@@ -6019,10 +6033,55 @@ static void parseCompounds(Entry *rt)
...
@@ -6019,10 +6033,55 @@ static void parseCompounds(Entry *rt)
}
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
#ifdef USE_TMP_FILE
void parseMain(Entry *rt,const char *fileName)
{
initParser();
g_inputFromFile = TRUE;
anonCount = 0;
depthIf = 0;
protection = Public;
mtype = Method;
gstat = FALSE;
virt = Normal;
current_root = rt;
global_root = rt;
inputFile.setName(fileName);
if (inputFile.open(IO_ReadOnly))
{
current = new Entry;
inputPosition = 0;
scanYYrestart( scanYYin );
BEGIN( FindMembers );
scanYYlex();
if (YY_START==Comment)
{
warn(yyFileName,yyLineNr,"File ended in the middle of a comment block! Perhaps a missing \\endcode?");
}
forceEndGroup();
if (depthIf>0)
{
warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
}
rt->program.resize(0);
delete current; current=0;
parseCompounds(rt);
inputFile.close();
}
}
#else
void parseMain(Entry *rt)
void parseMain(Entry *rt)
{
{
initParser();
initParser();
g_inputFromFile = FALSE;
anonCount = 0;
anonCount = 0;
depthIf = 0;
depthIf = 0;
protection = Public;
protection = Public;
...
@@ -6054,6 +6113,10 @@ void parseMain(Entry *rt)
...
@@ -6054,6 +6113,10 @@ void parseMain(Entry *rt)
parseCompounds(rt);
parseCompounds(rt);
}
}
#endif
//----------------------------------------------------------------------------
#if !defined(YY_FLEX_SUBMINOR_VERSION)
#if !defined(YY_FLEX_SUBMINOR_VERSION)
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
extern "C" { // some bogus code to keep the compiler happy
extern "C" { // some bogus code to keep the compiler happy
...
...
src/sortdict.h
View file @
02aa9b67
...
@@ -59,6 +59,14 @@ const uint SDict_primes[] =
...
@@ -59,6 +59,14 @@ const uint SDict_primes[] =
5516827
,
5516827
,
8826919
,
8826919
,
14123059
,
14123059
,
23538433
,
39230771
,
65384537
,
108974231
,
181623707
,
302706181
,
504510283
,
840850487
,
0xffffffff
0xffffffff
};
};
#endif
#endif
...
...
src/translator_de.h
View file @
02aa9b67
...
@@ -522,7 +522,7 @@ class TranslatorGerman : public Translator
...
@@ -522,7 +522,7 @@ class TranslatorGerman : public Translator
* of documentation blocks for typedefs
* of documentation blocks for typedefs
*/
*/
virtual
QCString
trTypedefDocumentation
()
virtual
QCString
trTypedefDocumentation
()
{
return
"Dokumentation der benutzerdefinerten Typen"
;
}
{
return
"Dokumentation der benutzerdefin
i
erten Typen"
;
}
/*! This is used in the documentation of a file/namespace before the list
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
* of documentation blocks for enumeration types
...
@@ -1662,7 +1662,7 @@ class TranslatorGerman : public Translator
...
@@ -1662,7 +1662,7 @@ class TranslatorGerman : public Translator
* directory is passed via \a dirName.
* directory is passed via \a dirName.
*/
*/
virtual
QCString
trDirReference
(
const
char
*
dirName
)
virtual
QCString
trDirReference
(
const
char
*
dirName
)
{
QCString
result
=
dirName
;
result
+=
"
Verzeichnisreferenz"
;
return
result
;
}
{
QCString
result
=
dirName
;
result
+=
"
-
Verzeichnisreferenz"
;
return
result
;
}
/*! This returns the word directory with or without starting capital
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
* (\a first_capital) and in sigular or plural form (\a singular).
...
...
src/util.cpp
View file @
02aa9b67
...
@@ -2602,6 +2602,7 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a
...
@@ -2602,6 +2602,7 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a
{
{
QCString
type
=
arg
->
type
;
QCString
type
=
arg
->
type
;
QCString
name
=
arg
->
name
;
QCString
name
=
arg
->
name
;
printf
(
"extractCanonicalType(type=%s,name=%s)
\n
"
,
type
.
data
(),
name
.
data
());
if
((
type
==
"const"
||
type
==
"volatile"
)
&&
!
name
.
isEmpty
())
if
((
type
==
"const"
||
type
==
"volatile"
)
&&
!
name
.
isEmpty
())
{
// name is part of type => correct
{
// name is part of type => correct
type
+=
" "
;
type
+=
" "
;
...
@@ -2623,27 +2624,37 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a
...
@@ -2623,27 +2624,37 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a
else
if
(
type
.
left
(
5
)
==
"enum "
)
type
=
type
.
right
(
type
.
length
()
-
5
);
else
if
(
type
.
left
(
5
)
==
"enum "
)
type
=
type
.
right
(
type
.
length
()
-
5
);
else
if
(
type
.
left
(
9
)
==
"typename "
)
type
=
type
.
right
(
type
.
length
()
-
9
);
else
if
(
type
.
left
(
9
)
==
"typename "
)
type
=
type
.
right
(
type
.
length
()
-
9
);
static
QRegExp
id
(
"[a-z_A-Z][a-z_A-Z0-9]*"
);
static
QRegExp
id
(
"[a-z_A-Z][
:
a-z_A-Z0-9]*"
);
QCString
canType
;
QCString
canType
;
int
i
,
p
=
0
,
l
;
int
i
,
p
=
0
,
l
;
while
((
i
=
id
.
match
(
type
,
p
,
&
l
)))
// foreach identifier in the type
while
((
i
=
id
.
match
(
type
,
p
,
&
l
))
!=-
1
)
// foreach identifier in the type
{
{
canType
+=
type
.
mid
(
p
,
i
-
p
);
canType
+=
type
.
mid
(
p
,
i
-
p
);
QCString
word
=
type
.
mid
(
i
,
l
);
QCString
word
=
type
.
mid
(
i
,
l
);
ClassDef
*
cd
=
getResolvedClass
(
d
,
fs
,
word
);
ClassDef
*
cd
=
getResolvedClass
(
d
,
fs
,
word
);
printf
(
"word %s => %s
\n
"
,
word
.
data
(),
cd
?
cd
->
qualifiedName
().
data
()
:
"<none>"
);
if
(
cd
)
if
(
cd
)
{
{
canType
+=
cd
->
qualifiedName
();
canType
+=
cd
->
qualifiedName
();
}
}
else
else
{
QCString
resolvedType
=
resolveTypeDef
(
d
,
word
);
if
(
resolvedType
.
isEmpty
())
{
{
canType
+=
word
;
canType
+=
word
;
}
}
else
{
canType
+=
resolvedType
;
}
}
p
=
i
+
l
;
p
=
i
+
l
;
}
}
canType
+=
type
.
right
(
type
.
length
()
-
p
);
canType
+=
type
.
right
(
type
.
length
()
-
p
);
printf
(
"result = %s
\n
"
,
canType
.
data
());
return
removeRedundantWhiteSpace
(
canType
);
return
removeRedundantWhiteSpace
(
canType
);
}
}
...
...
src/util.h
View file @
02aa9b67
...
@@ -133,6 +133,10 @@ bool matchArguments(ArgumentList *,ArgumentList *,
...
@@ -133,6 +133,10 @@ bool matchArguments(ArgumentList *,ArgumentList *,
const
char
*
cl
=
0
,
const
char
*
ns
=
0
,
bool
checkCV
=
TRUE
,
const
char
*
cl
=
0
,
const
char
*
ns
=
0
,
bool
checkCV
=
TRUE
,
NamespaceSDict
*
usingNamespaces
=
0
,
NamespaceSDict
*
usingNamespaces
=
0
,
SDict
<
Definition
>
*
usingClasses
=
0
);
SDict
<
Definition
>
*
usingClasses
=
0
);
bool
matchArguments2
(
Definition
*
srcScope
,
FileDef
*
srcFileScope
,
ArgumentList
*
srcAl
,
Definition
*
dstScope
,
FileDef
*
dstFileScope
,
ArgumentList
*
dstAl
,
bool
checkCV
);
void
mergeArguments
(
ArgumentList
*
,
ArgumentList
*
,
bool
forceNameOverwrite
=
FALSE
);
void
mergeArguments
(
ArgumentList
*
,
ArgumentList
*
,
bool
forceNameOverwrite
=
FALSE
);
QCString
substituteClassNames
(
const
QCString
&
s
);
QCString
substituteClassNames
(
const
QCString
&
s
);
QCString
substitute
(
const
char
*
s
,
const
char
*
src
,
const
char
*
dst
);
QCString
substitute
(
const
char
*
s
,
const
char
*
src
,
const
char
*
dst
);
...
...
src/xmlgen.cpp
View file @
02aa9b67
...
@@ -1402,10 +1402,10 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti)
...
@@ -1402,10 +1402,10 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti)
<<
"
\"
>"
<<
convertToXML
(
cd
->
name
())
<<
"</innerclass>"
<<
endl
;
<<
"
\"
>"
<<
convertToXML
(
cd
->
name
())
<<
"</innerclass>"
<<
endl
;
}
}
}
}
Namespace
Lis
t
*
nl
=
gd
->
getNamespaces
();
Namespace
SDic
t
*
nl
=
gd
->
getNamespaces
();
if
(
nl
)
if
(
nl
)
{
{
Namespace
List
Iterator
nli
(
*
nl
);
Namespace
SDict
::
Iterator
nli
(
*
nl
);
NamespaceDef
*
nd
;
NamespaceDef
*
nd
;
for
(
nli
.
toFirst
();(
nd
=
nli
.
current
());
++
nli
)
for
(
nli
.
toFirst
();(
nd
=
nli
.
current
());
++
nli
)
{
{
...
...
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