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
38c6a14b
Commit
38c6a14b
authored
Jan 23, 2008
by
dimitri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.5.4-20080123
parent
d37b4be3
Changes
30
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
338 additions
and
178 deletions
+338
-178
INSTALL
INSTALL
+2
-2
Makefile.in
Makefile.in
+4
-1
README
README
+2
-2
configure
configure
+1
-1
commands.doc
doc/commands.doc
+22
-1
config.doc
doc/config.doc
+8
-8
output.doc
doc/output.doc
+1
-1
qcstring.cpp
qtools/qcstring.cpp
+1
-1
qcstring.h
qtools/qcstring.h
+1
-0
scstring.cpp
qtools/scstring.cpp
+2
-2
commentcnv.l
src/commentcnv.l
+36
-3
commentscan.l
src/commentscan.l
+8
-0
config.l
src/config.l
+7
-5
defargs.l
src/defargs.l
+6
-1
definition.cpp
src/definition.cpp
+28
-11
docsets.cpp
src/docsets.cpp
+7
-4
doxygen.cpp
src/doxygen.cpp
+4
-2
filedef.cpp
src/filedef.cpp
+4
-1
fortrancode.l
src/fortrancode.l
+6
-6
fortranscanner.l
src/fortranscanner.l
+85
-71
groupdef.cpp
src/groupdef.cpp
+24
-16
groupdef.h
src/groupdef.h
+2
-2
index.cpp
src/index.cpp
+1
-1
pre.l
src/pre.l
+6
-6
pyscanner.l
src/pyscanner.l
+1
-1
scanner.l
src/scanner.l
+2
-1
util.cpp
src/util.cpp
+22
-1
vhdldocgen.cpp
src/vhdldocgen.cpp
+42
-25
vhdlscanner.l
src/vhdlscanner.l
+1
-0
Doxywizard.vcproj
winbuild/Doxywizard.vcproj
+2
-2
No files found.
INSTALL
View file @
38c6a14b
DOXYGEN Version 1.5.4-200801
01
DOXYGEN Version 1.5.4-200801
23
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (
01
January 2008)
Dimitri van Heesch (
23
January 2008)
Makefile.in
View file @
38c6a14b
...
...
@@ -41,9 +41,12 @@ distclean: clean
-
rm
-r
addon/doxywizard/Makefile
-
rm
-f
addon/doxywizard/Makefile.doxywizard
-
rm
-f
addon/doxywizard/doxywizard.pro
-
rm
-f
addon/doxywizard/obj/
*
.o
-
rm
-f
addon/doxywizard/moc/moc_
*
-
rm
-f
addon/doxywizard/config.cpp
-
rm
-f
addon/doxywizard/lib
-
rm
-f
addon/doxywizard/objects
-
rm
-f
VERSION
-
rm
-f
packages/rpm/doxygen.spec
DATE
=
$(
shell
date
"+%B %Y"
)
...
...
README
View file @
38c6a14b
DOXYGEN Version 1.5.4_200801
01
DOXYGEN Version 1.5.4_200801
23
Please read INSTALL for compilation instructions.
...
...
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (
01
January 2008)
Dimitri van Heesch (dimitri@stack.nl) (
23
January 2008)
configure
View file @
38c6a14b
...
...
@@ -20,7 +20,7 @@ doxygen_version_minor=5
doxygen_version_revision
=
4
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn
=
200801
01
doxygen_version_mmn
=
200801
23
bin_dirs
=
`
echo
$PATH
|
sed
-e
"s/:/ /g"
`
...
...
doc/commands.doc
View file @
38c6a14b
...
...
@@ -88,6 +88,7 @@ documentation:
\refitem cmdfcurlyclose \\f}
\refitem cmdfile \\file
\refitem cmdfn \\fn
\refitem cmdheaderfile \\headerfile
\refitem cmdhideinitializer \\hideinitializer
\refitem cmdhtmlinclude \\htmlinclude
\refitem cmdhtmlonly \\htmlonly
...
...
@@ -259,7 +260,9 @@ doxygen. Unrecognized commands are treated as normal text.
on the default include path (like \<X11/X.h\>). With the \<header-name\>
argument you can also specify how the include statement should look like,
by adding either quotes or sharp brackets around the name.
Sharp brackets are used if just the name is given.
Sharp brackets are used if just the name is given. Note that the
last two arguments can also specified using
the \ref cmdheaderfile "\\headerfile" command.
\par Example:
\verbinclude class.h
...
...
@@ -420,6 +423,24 @@ doxygen. Unrecognized commands are treated as normal text.
\sa section \ref cmdvar "\\var" and \ref cmdtypedef "\\typedef".
<hr>
\section cmdheaderfile \\headerfile <header-file> [<header-name>]
\addindex \\headerfile
Intended to be used for class, struct, or union documentation, where
the documentation is in front of the definition. The arguments of
this command are the same as the second and third argument of
\ref cmdclass "\\cmdclass".
The header-file name refers to the file that should by included by the
application to obtain the definition of the class, struct, or union.
The \<header-name\> argument can be used to overwrite the
name of the link that is used in the class documentation to something other
than \<header-file\>. This can be useful if the include name is not located
on the default include path (like \<X11/X.h\>). With the \<header-name\>
argument you can also specify how the include statement should look like,
by adding either quotes or sharp brackets around the name.
Sharp brackets are used if just the name is given.
<hr>
\section cmdhideinitializer \\hideinitializer
...
...
doc/config.doc
View file @
38c6a14b
...
...
@@ -543,13 +543,13 @@ sources. Doxygen will then generate output that is tailored for VHDL.
\anchor cfg_typedef_hides_struct
<dt>\c TYPEDEF_HIDES_STRUCT <dd>
\addindex TYPEDEF_HIDES_STRUCT
When \c TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct
(or union) is
documented as struct with the name of the typedef. So
<code>typedef struct TypeS {} TypeT</code>, will appear in the documentation as a struct
with name \c TypeT. When disabled the typedef will appear as a member of a file,
namespace, or class. And the struct will be named \c TypeS. This can typically
be useful for C code
where the coding convention is that all structs are
type
def'
ed
and
only
the
typedef
is
referenced
never
the
struct
's
name.
When \c TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct
, union, or enum
is documented as struct, union, or enum with the name of the typedef. So
<code>typedef struct TypeS {} TypeT</code>, will appear in the documentation as a struct
with name \c TypeT. When disabled the typedef will appear as a member of a file,
namespace, or class. And the struct will be named \c TypeS. This can typically
be useful for C code
in case the coding convention dictates that all compound
type
s are typedef'
ed
and
only
the
typedef
is
referenced
,
never
the
tag
name
.
</
dl
>
...
...
@@ -1189,7 +1189,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
on Windows.
The HTML Help Workshop contains a compiler that can convert all HTML output
generated by doxygen into a single comp
ressed HTML file (.chm). Compress
ed
generated by doxygen into a single comp
iled HTML file (.chm). Compil
ed
HTML files are now used as the Windows 98 help format, and will replace
the old Windows help format (.hlp) on all Windows platforms in the future.
Compressed HTML files also contain an index, a table of contents,
...
...
doc/output.doc
View file @
38c6a14b
...
...
@@ -39,7 +39,7 @@ The following output formats are \e directly supported by doxygen:
The following output formats are \e indirectly supported by doxygen:
<dl>
<dt><b>Comp
ressed HTML
</b> (a.k.a. Windows 98 help)
<dt><b>Comp
iled HTML Help
</b> (a.k.a. Windows 98 help)
<dd>Generated by Microsoft's HTML Help workshop from the HTML output if
\c GENERATE_HTMLHELP is set to \c YES.
<dt><b>PostScript</b>
...
...
qtools/qcstring.cpp
View file @
38c6a14b
...
...
@@ -466,7 +466,7 @@ QCString QCString::simplifyWhiteSpace() const
QCString
&
QCString
::
insert
(
uint
index
,
const
char
*
s
)
{
int
len
=
qstrlen
(
s
)
;
int
len
=
s
?
qstrlen
(
s
)
:
0
;
if
(
len
==
0
)
return
*
this
;
uint
olen
=
length
();
...
...
qtools/qcstring.h
View file @
38c6a14b
...
...
@@ -295,6 +295,7 @@ inline void QCString::duplicate( const char *str)
inline
QCString
&
QCString
::
duplicate
(
const
char
*
str
,
int
)
{
if
(
m_data
==
str
)
return
*
this
;
if
(
m_data
)
free
(
m_data
);
duplicate
(
str
);
return
*
this
;
...
...
qtools/scstring.cpp
View file @
38c6a14b
...
...
@@ -84,6 +84,7 @@ SCString::~SCString()
SCString
&
SCString
::
assign
(
const
char
*
str
)
{
if
(
m_data
==
str
)
return
*
this
;
if
(
m_data
)
free
(
m_data
);
duplicate
(
str
);
return
*
this
;
...
...
@@ -562,8 +563,7 @@ SCString &SCString::replace( const QRegExp &rx, const char *str )
QString
d
=
QString
::
fromLatin1
(
m_data
);
QString
r
=
QString
::
fromLatin1
(
str
);
d
.
replace
(
rx
,
r
);
operator
=
(
d
.
ascii
()
);
return
*
this
;
return
assign
(
d
.
ascii
());
}
long
SCString
::
toLong
(
bool
*
ok
)
const
...
...
src/commentcnv.l
View file @
38c6a14b
...
...
@@ -64,6 +64,7 @@ static bool g_inSpecialComment;
static QCString g_aliasString;
static int g_blockCount;
static int g_lastBlockContext;
static bool g_PythonDocString;
static SrcLangExt g_lang;
...
...
@@ -273,6 +274,18 @@ void replaceComment(int offset);
<Scan>[^"'\/\n\\#\\-]* { /* eat anything that is not " / or \n */
copyToOutput(yytext,yyleng);
}
<Scan>"\"\"\""! { /* start of python long comment */
if (g_lang!=SrcLangExt_Python)
{
REJECT;
}
else
{
g_PythonDocString = TRUE;
copyToOutput(yytext,yyleng);
BEGIN(CComment);
}
}
<Scan>"\"" { /* start of a string */
copyToOutput(yytext,yyleng);
BEGIN(SkipString);
...
...
@@ -431,15 +444,34 @@ void replaceComment(int offset);
<CComment>"*"+[^*/\\@\n]* { /* stars without slashes */
copyToOutput(yytext,yyleng);
}
<CComment>"\"\"\"" { /* end of Python docstring */
if (g_lang!=SrcLangExt_Python)
{
REJECT;
}
else
{
g_PythonDocString = FALSE;
copyToOutput(yytext,yyleng);
BEGIN(Scan);
}
}
<CComment>\n { /* new line in comment */
copyToOutput(yytext,yyleng);
}
<CComment>"*"+"/" { /* end of C comment */
copyToOutput(yytext,yyleng);
BEGIN(Scan);
if (g_lang==SrcLangExt_Python)
{
REJECT;
}
else
{
copyToOutput(yytext,yyleng);
BEGIN(Scan);
}
}
<CComment>"\n"/[ \t]*[^#] { /* end of Python comment */
if (g_lang!=SrcLangExt_Python)
if (g_lang!=SrcLangExt_Python
|| g_PythonDocString
)
{
REJECT;
}
...
...
@@ -646,6 +678,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
g_skip = FALSE;
g_fileName = fileName;
g_lang = getLanguageFromFileName(fileName);
g_PythonDocString = FALSE;
g_lineNr = 0;
g_condStack.clear();
g_condStack.setAutoDelete(TRUE);
...
...
src/commentscan.l
View file @
38c6a14b
...
...
@@ -57,6 +57,7 @@ static bool handleWeakGroup(const QCString &);
static bool handleNamespace(const QCString &);
static bool handlePackage(const QCString &);
static bool handleClass(const QCString &);
static bool handleHeaderFile(const QCString &);
static bool handleProtocol(const QCString &);
static bool handleCategory(const QCString &);
static bool handleUnion(const QCString &);
...
...
@@ -134,6 +135,7 @@ static DocCmdMap docCmdMap[] =
{ "namespace", &handleNamespace, TRUE },
{ "package", &handlePackage, TRUE },
{ "class", &handleClass, TRUE },
{ "headerfile", &handleHeaderFile, TRUE },
{ "protocol", &handleProtocol, TRUE },
{ "category", &handleCategory, TRUE },
{ "union", &handleUnion, TRUE },
...
...
@@ -1900,6 +1902,12 @@ static bool handleClass(const QCString &)
return stop;
}
static bool handleHeaderFile(const QCString &)
{
BEGIN( ClassDocArg2 );
return FALSE;
}
static bool handleProtocol(const QCString &)
{ // Obj-C protocol
bool stop=makeStructuralIndicator(Entry::PROTOCOLDOC_SEC);
...
...
src/config.l
View file @
38c6a14b
...
...
@@ -1214,6 +1214,7 @@ void Config::check()
filePatternList.append("*.dox");
filePatternList.append("*.py");
filePatternList.append("*.f90");
filePatternList.append("*.f");
filePatternList.append("*.vhd");
filePatternList.append("*.vhdl");
if (portable_fileSystemIsCaseSensitive())
...
...
@@ -1234,6 +1235,7 @@ void Config::check()
filePatternList.append("*.MM");
filePatternList.append("*.PY");
filePatternList.append("*.F90");
filePatternList.append("*.F");
filePatternList.append("*.VHD");
filePatternList.append("*.VHDL");
}
...
...
@@ -1747,13 +1749,13 @@ void Config::create()
TRUE
);
cb = addBool( "TYPEDEF_HIDES_STRUCT",
"When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct
(or union) is
\n"
"
documented as struct
with the name of the typedef. So \n"
"When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct
, union, or enum
\n"
"
is documented as struct, union, or enum
with the name of the typedef. So \n"
"typedef struct TypeS {} TypeT, will appear in the documentation as a struct \n"
"with name TypeT. When disabled the typedef will appear as a member of a file, \n"
"namespace, or class. And the struct will be named TypeS. This can typically \n"
"be useful for C code
where the coding convention is that all structs are
\n"
"type
def'ed and only the typedef is referenced never the struct's
name.\n",
"be useful for C code
in case the coding convention dictates that all compound
\n"
"type
s are typedef'ed and only the typedef is referenced, never the tag
name.\n",
FALSE
);
//-----------------------------------------------------------------------------------------------
...
...
@@ -2305,7 +2307,7 @@ void Config::create()
"GENERATE_HTMLHELP",
"If the GENERATE_HTMLHELP tag is set to YES, additional index files \n"
"will be generated that can be used as input for tools like the \n"
"Microsoft HTML help workshop to generate a comp
ress
ed HTML help file (.chm) \n"
"Microsoft HTML help workshop to generate a comp
il
ed HTML help file (.chm) \n"
"of the generated HTML documentation. \n",
FALSE
);
...
...
src/defargs.l
View file @
38c6a14b
...
...
@@ -149,7 +149,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
<ReadFuncArgPtr>{ID} {
g_curArgName=yytext;
}
<ReadFuncArgPtr>")"{B}*"(" {
<ReadFuncArgPtr>")"{B}*"(" {
// function pointer
g_curArgTypeName+=yytext;
//g_curArgTypeName=g_curArgTypeName.simplifyWhiteSpace();
g_readArgContext = ReadFuncArgType;
...
...
@@ -157,6 +157,11 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
g_argRoundCount=0;
BEGIN( CopyArgRound2 );
}
<ReadFuncArgPtr>")"/{B}*"[" { // pointer to fixed size array
g_curArgTypeName+=yytext;
//g_curArgTypeName=g_curArgTypeName.simplifyWhiteSpace();
BEGIN( ReadFuncArgType );
}
<ReadFuncArgPtr>")" { // redundant braces detected / remove them
int i=g_curArgTypeName.findRev('('),l=g_curArgTypeName.length();
if (i!=-1)
...
...
src/definition.cpp
View file @
38c6a14b
...
...
@@ -36,15 +36,12 @@
#include "htags.h"
#include "parserintf.h"
#include "marshal.h"
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen
#define pclose _pclose
#endif
#include "debug.h"
#define START_MARKER 0x4445465B // DEF[
#define END_MARKER 0x4445465D // DEF]
//-----------------------------------------------------------------------------------------
class
DefinitionImpl
{
...
...
@@ -476,20 +473,33 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri
* stored in \a result. If FALSE is returned the code fragment could not be
* found.
*
* The file is scanned for a opening bracket ('{') from \a startLine onward
.
* The file is scanned for a opening bracket ('{') from \a startLine onward
* The line actually containing the bracket is returned via startLine.
* The file is scanned for a closing bracket ('}') from \a endLine backward.
* The line actually containing the bracket is returned via endLine.
* Note that for VHDL code the bracket search is not done.
*/
static
bool
readCodeFragment
(
const
char
*
fileName
,
int
&
startLine
,
int
&
endLine
,
QCString
&
result
)
{
static
bool
vhdlOpt
=
Config_getBool
(
"OPTIMIZE_OUTPUT_VHDL"
);
static
bool
vhdlOpt
=
Config_getBool
(
"OPTIMIZE_OUTPUT_VHDL"
);
static
bool
filterSourceFiles
=
Config_getBool
(
"FILTER_SOURCE_FILES"
);
//printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine);
if
(
fileName
==
0
||
fileName
[
0
]
==
0
)
return
FALSE
;
// not a valid file name
QCString
cmd
=
getFileFilter
(
fileName
)
+
"
\"
"
+
fileName
+
"
\"
"
;
FILE
*
f
=
Config_getBool
(
"FILTER_SOURCE_FILES"
)
?
popen
(
cmd
,
"r"
)
:
fopen
(
fileName
,
"r"
);
bool
found
=
vhdlOpt
;
// for VHDL not bracket search is possible
QCString
filter
=
getFileFilter
(
fileName
);
FILE
*
f
=
0
;
bool
usePipe
=
!
filter
.
isEmpty
()
&&
filterSourceFiles
;
if
(
!
usePipe
)
// no filter given or wanted
{
f
=
fopen
(
fileName
,
"r"
);
}
else
// use filter
{
QCString
cmd
=
filter
+
"
\"
"
+
fileName
+
"
\"
"
;
Debug
::
print
(
Debug
::
ExtCmd
,
0
,
"Executing popen(`%s`)
\n
"
,
cmd
.
data
());
f
=
portable_popen
(
cmd
,
"r"
);
}
bool
found
=
vhdlOpt
;
// for VHDL no bracket search is possible
if
(
f
)
{
int
c
=
0
;
...
...
@@ -584,7 +594,14 @@ static bool readCodeFragment(const char *fileName,
endLine
=
lineNr
-
1
;
}
}
if
(
Config_getBool
(
"FILTER_SOURCE_FILES"
))
pclose
(
f
);
else
fclose
(
f
);
if
(
usePipe
)
{
portable_pclose
(
f
);
}
else
{
fclose
(
f
);
}
}
result
=
transcodeCharacterStringToUTF8
(
result
);
return
found
;
...
...
src/docsets.cpp
View file @
38c6a14b
...
...
@@ -62,8 +62,11 @@ void DocSets::initialize()
"DOCSET_RESOURCES=$(DOCSET_CONTENTS)/Resources
\n
"
"DOCSET_DOCUMENTS=$(DOCSET_RESOURCES)/Documents
\n
"
"DOCSET_INSTALL=~/Library/Developer/Shared/Documentation/DocSets
\n
"
"XCODE_INSTALL=$(shell xcode-select -print-path)
\n
"
"
\n
"
"all: always
\n
"
"all: docset
\n
"
"
\n
"
"docset:
\n
"
"
\t
mkdir -p $(DOCSET_DOCUMENTS)
\n
"
"
\t
cp Nodes.xml $(DOCSET_RESOURCES)
\n
"
"
\t
cp Tokens.xml $(DOCSET_RESOURCES)
\n
"
...
...
@@ -74,16 +77,16 @@ void DocSets::initialize()
"
\t
--exclude Info.plist
\\\n
"
"
\t
--exclude Makefile -c -f - .
\\\n
"
"
\t
| (cd $(DOCSET_DOCUMENTS); tar xvf -)
\n
"
"
\t
docsetutil index $(DOCSET_NAME)
\n
"
"
\t
$(XCODE_INSTALL)/usr/bin/
docsetutil index $(DOCSET_NAME)
\n
"
"
\t
rm -f $(DOCSET_DOCUMENTS)/Nodes.xml
\n
"
"
\t
rm -f $(DOCSET_DOCUMENTS)/Info.plist
\n
"
"
\t
rm -f $(DOCSET_DOCUMENTS)/Makefile
\n
"
"
\t
rm -f $(DOCSET_RESOURCES)/Nodes.xml
\n
"
"
\t
rm -f $(DOCSET_RESOURCES)/Tokens.xml
\n
"
"
\n
"
"install:
\n
"
"install:
docset
\n
"
"
\t
mkdir -p $(DOCSET_INSTALL)
\n
"
"
\t
cp -
a
$(DOCSET_NAME) $(DOCSET_INSTALL)
\n
"
"
\t
cp -
R
$(DOCSET_NAME) $(DOCSET_INSTALL)
\n
"
"
\n
"
"uninstall:
\n
"
"
\t
rm -rf $(DOCSET_INSTALL)
\n
"
...
...
src/doxygen.cpp
View file @
38c6a14b
...
...
@@ -734,7 +734,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
{
// explicit request
QCString
text
;
text
.
sprintf
(
"Warning: the name `%s' supplied as "
"the
second argument in the
\\
class,
\\
struct, or
\\
union statement
"
,
"the
argument of the
\\
class,
\\
struct,
\\
union, or
\\
include command
"
,
root
->
includeFile
.
data
()
);
if
(
ambig
)
// name is ambigious
...
...
@@ -8337,6 +8337,7 @@ void copyAndFilterFile(const char *fileName,BufStr &dest)
else
{
QCString
cmd
=
filterName
+
"
\"
"
+
fileName
+
"
\"
"
;
Debug
::
print
(
Debug
::
ExtCmd
,
0
,
"Executing popen(`%s`)
\n
"
,
cmd
.
data
());
FILE
*
f
=
portable_popen
(
cmd
,
"r"
);
if
(
!
f
)
{
...
...
@@ -8884,7 +8885,8 @@ void initDoxygen()
ParserInterface
*
defaultParser
=
new
CLanguageScanner
;
Doxygen
::
parserManager
=
new
ParserManager
(
defaultParser
);
Doxygen
::
parserManager
->
registerParser
(
".py"
,
new
PythonLanguageScanner
);
Doxygen
::
parserManager
->
registerParser
(
".py"
,
new
PythonLanguageScanner
);
Doxygen
::
parserManager
->
registerParser
(
".f"
,
new
FortranLanguageScanner
);
Doxygen
::
parserManager
->
registerParser
(
".f90"
,
new
FortranLanguageScanner
);
Doxygen
::
parserManager
->
registerParser
(
".vhd"
,
new
VHDLLanguageScanner
);
...
...
src/filedef.cpp
View file @
38c6a14b
...
...
@@ -34,6 +34,7 @@
#include "parserintf.h"
#include "portable.h"
#include "vhdldocgen.h"
#include "debug.h"
class
DevNullCodeDocInterface
:
public
CodeOutputInterface
{
...
...
@@ -1336,7 +1337,9 @@ void FileDef::acquireFileVersion()
if
(
!
vercmd
.
isEmpty
())
{
msg
(
"Version of %s : "
,
filepath
.
data
());
FILE
*
f
=
portable_popen
(
vercmd
+
"
\"
"
+
filepath
+
"
\"
"
,
"r"
);
QCString
cmd
=
vercmd
+
"
\"
"
+
filepath
+
"
\"
"
;
Debug
::
print
(
Debug
::
ExtCmd
,
0
,
"Executing popen(`%s`)
\n
"
,
cmd
.
data
());
FILE
*
f
=
portable_popen
(
cmd
,
"r"
);
if
(
!
f
)
{
err
(
"Error: could not execute %s
\n
"
,
vercmd
.
data
());
...
...
src/fortrancode.l
View file @
38c6a14b
...
...
@@ -581,8 +581,8 @@ ARGS {BS}("("[^)]*")"){BS}
NUM_TYPE (complex|integer|logical|real)
KIND {ARGS}
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"([0-9]+|{ARGS}))
TYPE_SPEC (({NUM_TYPE}(
"*"[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS
}PRECISION|{CHAR})
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"(
{BS}
[0-9]+|{ARGS}))
TYPE_SPEC (({NUM_TYPE}(
{BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{B
}PRECISION|{CHAR})
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET)
...
...
@@ -630,7 +630,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE)
codifyLines(yytext);
endFontClass();
}
<Start>"end"
{BS}{COMMANDS}
/[ \t\n].* {
<Start>"end"
({BS_}{COMMANDS})?
/[ \t\n].* {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
...
...
@@ -687,11 +687,11 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE)
yy_pop_state();
REJECT;
}
<Start>"end"
{BS}"module".*
{ // just reset currentModule, rest is done in following rule
<Start>"end"
({BS_}"module")?.*
{ // just reset currentModule, rest is done in following rule
currentModule=0;
REJECT;
}
<Start>"end"
{BS}("program"|"module"|"type"|"interface")
{ //
<Start>"end"
({BS_}("program"|"module"|"type"|"interface"))?
{ //
endUseScope();
startFontClass("keyword");
codifyLines(yytext);
...
...
@@ -722,7 +722,7 @@ IGNORE (IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|DEALLOCATE|SIZE)
<Subprog>"\n" { codifyLines(yytext);
yy_pop_state();
}
<Start>"end"
{BS}{SUBPROG}.*
{ // Fortran subroutine or function ends
<Start>"end"
({BS_}{SUBPROG})?
{ // Fortran subroutine or function ends
//cout << "===> end function " << yytext << endl;
endUseScope();
startFontClass("keyword");
...
...
src/fortranscanner.l
View file @
38c6a14b
...
...
@@ -189,8 +189,8 @@ NOARGS {BS}"\n"
NUM_TYPE (complex|integer|logical|real)
KIND {ARGS}
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"([0-9]+|{ARGS}))
TYPE_SPEC (({NUM_TYPE}(
"*"[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS
}PRECISION|{CHAR}|TYPE{ARGS})
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"(
{BS}
[0-9]+|{ARGS}))
TYPE_SPEC (({NUM_TYPE}(
{BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_
}PRECISION|{CHAR}|TYPE{ARGS})
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET)
...
...
@@ -244,7 +244,7 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
<*>"\\\""|\\\' { /* ignore \" and \' */}
<String>\"|\' { // string ends with next quote without previous backspace
if(yytext[0]!=stringStartSymbol) REJECT; // single vs double quote
if
(yytext[0]!=stringStartSymbol) REJECT; // single vs double quote
// fprintf(stderr,"string end: %s\n",debugStr.data());
yy_pop_state();
}
...
...
@@ -252,7 +252,7 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
<String>. { debugStr+=yytext; } // ignore String contents (especially '!')
<*>\"|\' { /* string starts */
if(YY_START == StrIgnore) REJECT; // ignore in simple comments
if
(YY_START == StrIgnore) REJECT; // ignore in simple comments
// fprintf(stderr,"string start: %c %d\n",yytext[0],yyLineNr);
yy_push_state(YY_START);
stringStartSymbol=yytext[0]; // single or double quote
...
...
@@ -264,7 +264,8 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
<*>"!"/[^<>\n] { if (YY_START == String) REJECT; // "!" is ignored in strings
// skip comment line (without docu comments "!>" "!<" )
/* ignore further "!" and ignore comments in Strings */
if ((YY_START != StrIgnore) && (YY_START != String)) {
if ((YY_START != StrIgnore) && (YY_START != String))
{
yy_push_state(YY_START);
BEGIN(StrIgnore);
debugStr="*!";
...
...
@@ -316,7 +317,7 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
int index = name.find("interface", 0, FALSE);
index = name.find(QRegExp("[^ \\t]"), index+9);
//printf(stderr,"%s,%d\n",name.data(),index);
if(index!=-1)
if
(index!=-1)
name = name.right(name.length()-index);
else // interface without name, must be inside subprog
name = "interface";
...
...
@@ -324,8 +325,8 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
yy_push_state(InterfaceBody);
startScope(last_entry);
}
<InterfaceBody>"end"
{BS}"interface"
.* {
if(!endScope(current_root))
<InterfaceBody>"end"
({BS_}"interface")?
.* {
if
(!endScope(current_root))
yyterminate();
yy_pop_state();
}
...
...
@@ -348,9 +349,9 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
BEGIN(Module);
defaultProtection = Public;
}
<Start,ModuleBody>"end"
{BS}(module|program)
.* { // end module
<Start,ModuleBody>"end"
({BS_}(module|program))?
.* { // end module
resolveModuleProcedures(moduleProcedures, current_root);
if(!endScope(current_root))
if
(!endScope(current_root))
yyterminate();
defaultProtection = Public;
BEGIN(Start);
...
...
@@ -405,15 +406,26 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
startScope(last_entry);
BEGIN(TypedefBody);
}
<TypedefBody>"end"{BS
}"type".*
{ /* end type definition */
<TypedefBody>"end"{BS
_}"type".*
{ /* end type definition */
//cout << "=========> got typedef end "<< endl;
if(!endScope(current_root))
if
(!endScope(current_root))
yyterminate();
yy_pop_state();
}
/*------- module/global/typedef variable ---------------------------------------------------*/
<SubprogBody>"end"({BS_}{SUBPROG})?.* {
//cout << "1e=========> got end subprog: " << yytext << endl;
/* args is used for parameters in list of functions, argList for
parameters in detailed function descripttion */
//current->args = argListToString(current->argList);
//current->endBodyLine = yyLineNr; // ??? what ist endBodyLine for
if (!endScope(current_root))
yyterminate();
yy_pop_state() ;
}
<Start,ModuleBody,TypedefBody,SubprogBody>{
{TYPE_SPEC}/{SEPARATE} {
/* variable declaration starts */
...
...
@@ -429,16 +441,19 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
DefineDict* defines = getFileDefineDict();
QCString name;
int index = str.find("(");
if(index != -1)
if
(index != -1)
name = str.left(index).stripWhiteSpace();
else
name = str;
Define *define = (*defines)[name];
if(define != 0 && isTypeName(define->definition)) {
if (define != 0 && isTypeName(define->definition))
{
argType = str;
yy_push_state(AttributeList);
} else {
}
else
{
REJECT;
}
}
...
...
@@ -452,6 +467,8 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
yy_push_state(YY_START);
BEGIN( AttributeList ) ;
}
{ID} {
}
}
<AttributeList>{
{COMMA} {}
...
...
@@ -481,7 +498,8 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
int last= yy_top_state();
v_type= V_IGNORE;
if (!argType.isEmpty() && last != SubprogBody) { // new variable entry
if (!argType.isEmpty() && last != SubprogBody)
{ // new variable entry
v_type = V_VARIABLE;
current->section = Entry::VARIABLE_SEC;
current->name = argName;
...
...
@@ -489,7 +507,9 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
current->fileName = yyFileName;
current->bodyLine = yyLineNr; // used for source reference
addCurrentEntry();
} else if(!argType.isEmpty()){ // deklaration of parameter list: add type for corr. parameter
}
else if (!argType.isEmpty())
{ // deklaration of parameter list: add type for corr. parameter
parameter= addFortranParameter(argType,argName,docBlock);
if (parameter) v_type= V_PARAMETER;
// save, it may be function return type
...
...
@@ -518,14 +538,13 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
docBlock.resize(0);
}
<Initialization>"(
/"
{ initializer+=yytext;
<Initialization>"(
"
{ initializer+=yytext;
BEGIN(ArrayInitializer); // initializer may contain comma
}
<ArrayInitializer>. { initializer+=yytext; }
<ArrayInitializer>"/)" { initializer+=yytext;
yy_pop_state(); // end initialization
if (v_type == V_VARIABLE) last_entry->initializer= initializer;
<ArrayInitializer>")" { initializer+=yytext;
BEGIN(Initialization);
}
<ArrayInitializer>. { initializer+=yytext; }
<Initialization>{COMMA} { yy_pop_state(); // end initialization
if (v_type == V_VARIABLE) last_entry->initializer= initializer;
}
...
...
@@ -569,7 +588,8 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
QCString arglist= yytext;
//cout << "3=========> got parameterlist " << yytext << endl;
yyLineNr+= arglist.contains('\n');
arglist = arglist.replace(QRegExp("&[^\n]*\n"),"");
static QRegExp re("&[^\n]*\n");
arglist = arglist.replace(re,"");
//cout << "3=========> got parameterlist " << arglist << endl;
current->args = arglist;
current->args = removeRedundantWhiteSpace(current->args);
...
...
@@ -593,17 +613,6 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
modifiers[current_root->parent()][current_root->name.lower()].returnName = result;
//cout << "=====> got result " << result << endl;
}
<SubprogBody>"end"{BS}{SUBPROG}.* {
//cout << "1e=========> got end subprog: " << yytext << endl;
/* args is used for parameters in list of functions, argList for
parameters in detailed function descripttion */
//current->args = argListToString(current->argList);
//current->endBodyLine = yyLineNr; // ??? what ist endBodyLine for
if(!endScope(current_root))
yyterminate();
yy_pop_state() ;
}
/*---- documentation comments --------------------------------------------------------------------*/
...
...
@@ -620,13 +629,15 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
}
<DocBackLine>.* { // contents of current comment line
docBlock=yytext;
if (v_type == V_VARIABLE) {
if (v_type == V_VARIABLE)
{
Entry *tmp_entry = current;
current = last_entry; // temporarily switch to the previous entry
handleCommentBlock(docBlock,TRUE);
current=tmp_entry;
}
else if (v_type == V_PARAMETER) {
else if (v_type == V_PARAMETER)
{
parameter->docs=docBlock;
}
yy_pop_state();
...
...
@@ -659,9 +670,10 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
/*------------------------------------------------------------------------------------------------*/
<*>"\n" {yyLineNr++;
//if (debugStr.stripWhiteSpace().length() > 0) cout << "ignored text: " << debugStr << " state: " <<YY_START << endl;
debugStr="";
<*>"\n" {
yyLineNr++;
//if (debugStr.stripWhiteSpace().length() > 0) cout << "ignored text: " << debugStr << " state: " <<YY_START << endl;
debugStr="";
}
/*---- error: EOF in wrong state --------------------------------------------------------------------*/
...
...
@@ -670,7 +682,9 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
scanner_abort();
yyterminate();
}
<*>. {debugStr+=yytext;} // ignore remaining text
<*>. {
debugStr+=yytext;
} // ignore remaining text
/**********************************************************************************/
/**********************************************************************************/
...
...
@@ -725,12 +739,12 @@ static QCString extractFromParens(const QCString name)
{
QCString extracted = name;
int start = extracted.find("(");
if(start != -1)
if
(start != -1)
{
extracted.remove(0, start+1);
}
int end = extracted.findRev(")");
if(end != -1)
if
(end != -1)
{
int length = extracted.length();
extracted.remove(end, length);
...
...
@@ -743,10 +757,10 @@ static QCString extractFromParens(const QCString name)
/*! Adds passed modifiers to these modifiers.*/
SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs)
{
if(mdfs.protection!=NONE_P) protection = mdfs.protection;
if(mdfs.direction!=NONE_D) direction = mdfs.direction;
if
(mdfs.protection!=NONE_P) protection = mdfs.protection;
if
(mdfs.direction!=NONE_D) direction = mdfs.direction;
optional |= mdfs.optional;
if(!mdfs.dimension.isNull()) dimension = mdfs.dimension;
if
(!mdfs.dimension.isNull()) dimension = mdfs.dimension;
allocatable |= mdfs.allocatable;
external |= mdfs.external;
intrinsic |= mdfs.intrinsic;
...
...
@@ -772,9 +786,9 @@ SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString)
QCString tmp = extractFromParens(mdfString);
bool isin = tmp.contains("in");
bool isout = tmp.contains("out");
if(isin && isout) newMdf.direction = SymbolModifiers::INOUT;
else if(isin) newMdf.direction = SymbolModifiers::IN;
else if(isout) newMdf.direction = SymbolModifiers::OUT;
if
(isin && isout) newMdf.direction = SymbolModifiers::INOUT;
else if
(isin) newMdf.direction = SymbolModifiers::IN;
else if
(isout) newMdf.direction = SymbolModifiers::OUT;
}
else if (mdfString=="public")
{
...
...
@@ -796,23 +810,23 @@ SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString)
{
newMdf.external = TRUE;
}
else if(mdfString=="intrinsic")
else if
(mdfString=="intrinsic")
{
newMdf.intrinsic = TRUE;
}
else if(mdfString=="parameter")
else if
(mdfString=="parameter")
{
newMdf.parameter = TRUE;
}
else if(mdfString=="pointer")
else if
(mdfString=="pointer")
{
newMdf.pointer = TRUE;
}
else if(mdfString=="target")
else if
(mdfString=="target")
{
newMdf.target = TRUE;
}
else if(mdfString=="save")
else if
(mdfString=="save")
{
newMdf.save = TRUE;
}
...
...
@@ -838,7 +852,7 @@ static Argument *findArgument(Entry* subprog, QCString name, bool byTypeName = F
for (unsigned int i=0; i<subprog->argList->count(); i++)
{
Argument *arg = subprog->argList->at(i);
if(!byTypeName && arg->name.lower() == cname ||
if
(!byTypeName && arg->name.lower() == cname ||
byTypeName && arg->type.lower() == cname)
return arg;
}
...
...
@@ -856,10 +870,10 @@ static Entry *findFunction(Entry* entry, QCString name)
Entry *ce;
for (;(ce=eli.current());++eli)
{
if(ce->section != Entry::FUNCTION_SEC)
if
(ce->section != Entry::FUNCTION_SEC)
continue;
if(ce->name.lower() == cname)
if
(ce->name.lower() == cname)
return ce;
}
...
...
@@ -870,52 +884,52 @@ static Entry *findFunction(Entry* entry, QCString name)
/*! Apply modifiers stored in \a mdfs to the \a typeName string. */
static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs)
{
if(!mdfs.dimension.isNull())
if
(!mdfs.dimension.isNull())
{
typeName += ",";
typeName += mdfs.dimension;
}
if(mdfs.direction!=SymbolModifiers::NONE_D)
if
(mdfs.direction!=SymbolModifiers::NONE_D)
{
typeName += ",";
typeName += directionStrs[mdfs.direction];
}
if(mdfs.optional)
if
(mdfs.optional)
{
typeName += ",";
typeName += "optional";
}
if(mdfs.allocatable)
if
(mdfs.allocatable)
{
typeName += ",";
typeName += "allocatable";
}
if(mdfs.external)
if
(mdfs.external)
{
typeName += ",";
typeName += "external";
}
if(mdfs.intrinsic)
if
(mdfs.intrinsic)
{
typeName += ",";
typeName += "intrinsic";
}
if(mdfs.parameter)
if
(mdfs.parameter)
{
typeName += ",";
typeName += "parameter";
}
if(mdfs.pointer)
if
(mdfs.pointer)
{
typeName += ",";
typeName += "pointer";
}
if(mdfs.target)
if
(mdfs.target)
{
typeName += ",";
typeName += "target";
}
if(mdfs.save)
if
(mdfs.save)
{
typeName += ",";
typeName += "save";
...
...
@@ -937,9 +951,9 @@ static void applyModifiers(Entry *ent, SymbolModifiers& mdfs)
QCString tmp = ent->type;
ent->type = applyModifiers(tmp, mdfs);
if(mdfs.protection == SymbolModifiers::PUBLIC)
if
(mdfs.protection == SymbolModifiers::PUBLIC)
ent->protection = Public;
else if(mdfs.protection == SymbolModifiers::PRIVATE)
else if
(mdfs.protection == SymbolModifiers::PRIVATE)
ent->protection = Private;
}
...
...
@@ -1013,7 +1027,7 @@ static bool endScope(Entry *scope)
continue;
Argument *arg = findArgument(scope->parent(), ce->name, TRUE);
if(arg != 0)
if
(arg != 0)
{
// set type of dummy procedure argument to interface
arg->name = arg->type;
...
...
@@ -1029,11 +1043,11 @@ static bool endScope(Entry *scope)
Entry *ce;
for (;(ce=eli.current());++eli)
{
if(ce->section != Entry::VARIABLE_SEC && ce->section != Entry::FUNCTION_SEC)
if
(ce->section != Entry::VARIABLE_SEC && ce->section != Entry::FUNCTION_SEC)
continue;
//cout<<ce->name<<", "<<mdfsMap.contains(ce->name.lower())<<mdfsMap.count()<<endl;
if(mdfsMap.contains(ce->name.lower()))
if
(mdfsMap.contains(ce->name.lower()))
applyModifiers(ce, mdfsMap[ce->name.lower()]);
}
}
...
...
src/groupdef.cpp
View file @
38c6a14b
...
...
@@ -161,22 +161,32 @@ void GroupDef::addFile(const FileDef *def)
fileList
->
append
(
def
);
}
void
GroupDef
::
addClass
(
const
ClassDef
*
cd
)
bool
GroupDef
::
addClass
(
const
ClassDef
*
cd
)
{
if
(
cd
->
isHidden
())
return
;
if
(
Config_getBool
(
"SORT_BRIEF_DOCS"
))
classSDict
->
inSort
(
cd
->
name
(),
cd
);
else
classSDict
->
append
(
cd
->
name
(),
cd
);
if
(
cd
->
isHidden
())
return
FALSE
;
if
(
classSDict
->
find
(
cd
->
name
())
==
0
)
{
if
(
Config_getBool
(
"SORT_BRIEF_DOCS"
))
classSDict
->
inSort
(
cd
->
name
(),
cd
);
else
classSDict
->
append
(
cd
->
name
(),
cd
);
return
TRUE
;
}
return
FALSE
;
}
void
GroupDef
::
addNamespace
(
const
NamespaceDef
*
def
)
bool
GroupDef
::
addNamespace
(
const
NamespaceDef
*
def
)
{
if
(
def
->
isHidden
())
return
;
if
(
Config_getBool
(
"SORT_BRIEF_DOCS"
))
namespaceSDict
->
inSort
(
def
->
name
(),
def
);
else
namespaceSDict
->
append
(
def
->
name
(),
def
);
if
(
def
->
isHidden
())
return
FALSE
;
if
(
namespaceSDict
->
find
(
def
->
name
())
==
0
)
{
if
(
Config_getBool
(
"SORT_BRIEF_DOCS"
))
namespaceSDict
->
inSort
(
def
->
name
(),
def
);
else
namespaceSDict
->
append
(
def
->
name
(),
def
);
return
TRUE
;
}
return
FALSE
;
}
void
GroupDef
::
addDir
(
const
DirDef
*
def
)
...
...
@@ -926,8 +936,7 @@ void addClassToGroups(Entry *root,ClassDef *cd)
GroupDef
*
gd
=
0
;
if
(
!
g
->
groupname
.
isEmpty
()
&&
(
gd
=
Doxygen
::
groupSDict
->
find
(
g
->
groupname
)))
{
gd
->
addClass
(
cd
);
cd
->
makePartOfGroup
(
gd
);
if
(
gd
->
addClass
(
cd
))
cd
->
makePartOfGroup
(
gd
);
//printf("Compound %s: in group %s\n",cd->name().data(),s->data());
}
}
...
...
@@ -944,8 +953,7 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd)
//printf("group `%s'\n",s->data());
if
(
!
g
->
groupname
.
isEmpty
()
&&
(
gd
=
Doxygen
::
groupSDict
->
find
(
g
->
groupname
)))
{
gd
->
addNamespace
(
nd
);
nd
->
makePartOfGroup
(
gd
);
if
(
gd
->
addNamespace
(
nd
))
nd
->
makePartOfGroup
(
gd
);
//printf("Namespace %s: in group %s\n",nd->name().data(),s->data());
}
}
...
...
src/groupdef.h
View file @
38c6a14b
...
...
@@ -51,8 +51,8 @@ class GroupDef : public Definition
void
setGroupTitle
(
const
char
*
newtitle
);
bool
hasGroupTitle
(
)
{
return
titleSet
;
}
void
addFile
(
const
FileDef
*
def
);
void
addClass
(
const
ClassDef
*
def
);
void
addNamespace
(
const
NamespaceDef
*
def
);
bool
addClass
(
const
ClassDef
*
def
);
bool
addNamespace
(
const
NamespaceDef
*
def
);
void
addGroup
(
const
GroupDef
*
def
);
void
addParentGroup
(
const
GroupDef
*
def
);
void
addPage
(
PageDef
*
def
);
...
...
src/index.cpp
View file @
38c6a14b
...
...
@@ -2253,7 +2253,7 @@ void writePageIndex(OutputList &ol)
}
}
endIndexHierarchy
(
ol
,
0
);
Doxygen
::
indexList
.
decContentsDepth
();
//
Doxygen::indexList.decContentsDepth();
endFile
(
ol
);
ol
.
popGeneratorState
();
}
...
...
src/pre.l
View file @
38c6a14b
...
...
@@ -1975,7 +1975,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipCComment,SkipVerbatim>. {
outputChar(*yytext);
}
<CopyCComment>[^*
]+
{
<CopyCComment>[^*
a-z_A-Z]+
{
g_defLitText+=yytext;
g_defText+=escapeAt(yytext);
}
...
...
@@ -1989,10 +1989,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_defLitText+=yytext;
g_defText+=yytext;
}
<CopyCComment>. {
g_defLitText+=yytext;
g_defText+=yytext;
}
<RemoveCComment>"*/" { BEGIN(g_lastCContext); }
<RemoveCComment>"//"
<RemoveCComment>"/*"
...
...
@@ -2026,7 +2022,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_quoteArg=TRUE;
g_defLitText+=yytext;
}
<DefineText
>{ID}
{
<DefineText
,CopyCComment>{ID}
{
g_defLitText+=yytext;
if (g_quoteArg)
{
...
...
@@ -2059,6 +2055,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
g_quoteArg=FALSE;
}
<CopyCComment>. {
g_defLitText+=yytext;
g_defText+=yytext;
}
<DefineText>\\[\r]?\n {
g_defLitText+=yytext;
outputChar('\n');
...
...
src/pyscanner.l
View file @
38c6a14b
...
...
@@ -311,7 +311,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
yyFileName, // file
brief ? current->briefLine : current->docLine, // line of block start
docBlockInBody ? FALSE : brief,
FALSE, //docBlockJavaStyle, // javadoc style
docBlockJavaStyle, // javadoc style // or FALSE,
docBlockInBody,
protection,
position,
...
...
src/scanner.l
View file @
38c6a14b
...
...
@@ -3143,7 +3143,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
// -> omit typedef and use S_t as the struct name
if (typedefHidesStruct &&
isTypedef &&
(current->spec&(Entry::Struct|Entry::Union)) &&
((current->spec&(Entry::Struct|Entry::Union)) ||
current->section==Entry::ENUM_SEC )&&
msType.stripWhiteSpace().isEmpty() &&
memspecEntry)
{
...
...
src/util.cpp
View file @
38c6a14b
...
...
@@ -1465,6 +1465,20 @@ static bool findOperator(const QCString &s,int i)
return
TRUE
;
}
static
bool
findOperator2
(
const
QCString
&
s
,
int
i
)
{
int
b
=
s
.
findRev
(
"operator"
,
i
);
if
(
b
==-
1
)
return
FALSE
;
// not found
b
+=
8
;
while
(
b
<
i
)
// check if there are only non-ascii
// characters in front of the operator
{
if
(
isId
((
uchar
)
s
.
at
(
b
)))
return
FALSE
;
b
++
;
}
return
TRUE
;
}
static
const
char
constScope
[]
=
{
'c'
,
'o'
,
'n'
,
's'
,
't'
,
':'
};
static
const
char
virtualScope
[]
=
{
'v'
,
'i'
,
'r'
,
't'
,
'u'
,
'a'
,
'l'
,
':'
};
...
...
@@ -1599,7 +1613,12 @@ nextChar:
if
(
c
==
'*'
||
c
==
'&'
||
c
==
'@'
||
c
==
'$'
)
{
uint
rl
=
result
.
length
();
if
(
rl
>
0
&&
(
isId
(
result
.
at
(
rl
-
1
))
||
result
.
at
(
rl
-
1
)
==
'>'
))
result
+=
' '
;
if
((
rl
>
0
&&
(
isId
(
result
.
at
(
rl
-
1
))
||
result
.
at
(
rl
-
1
)
==
'>'
))
&&
(
c
!=
'*'
||
!
findOperator2
(
s
,
i
))
// avoid splitting operator* and operator->*
)
{
result
+=
' '
;
}
}
result
+=
c
;
if
(
cliSupport
&&
(
c
==
'^'
||
c
==
'%'
)
&&
i
>
1
&&
isId
(
s
.
at
(
i
-
1
)))
result
+=
' '
;
// C++/CLI: Type^ name and Type% name
...
...
@@ -2141,6 +2160,7 @@ QCString fileToString(const char *name,bool filter)
else
// filter the input
{
QCString
cmd
=
filterName
+
"
\"
"
+
name
+
"
\"
"
;
Debug
::
print
(
Debug
::
ExtCmd
,
0
,
"Executing popen(`%s`)
\n
"
,
cmd
.
data
());
FILE
*
f
=
portable_popen
(
cmd
,
"r"
);
if
(
!
f
)
{
...
...
@@ -6270,6 +6290,7 @@ SrcLangExt getLanguageFromFileName(const QCString fileName)
extLookup
.
insert
(
".M"
,
new
int
(
SrcLangExt_ObjC
));
extLookup
.
insert
(
".mm"
,
new
int
(
SrcLangExt_ObjC
));
extLookup
.
insert
(
".py"
,
new
int
(
SrcLangExt_Python
));
extLookup
.
insert
(
".f"
,
new
int
(
SrcLangExt_F90
));
extLookup
.
insert
(
".f90"
,
new
int
(
SrcLangExt_F90
));
extLookup
.
insert
(
".vhd"
,
new
int
(
SrcLangExt_VHDL
));
extLookup
.
insert
(
".vhdl"
,
new
int
(
SrcLangExt_VHDL
));
...
...
src/vhdldocgen.cpp
View file @
38c6a14b
...
...
@@ -144,13 +144,13 @@ QCString* VhdlDocGen::findKeyWord(const QCString& word)
if
(
word
.
isEmpty
()
||
word
.
at
(
0
)
==
'\0'
)
return
0
;
//printf("VhdlDocGen::findKeyWord(%s)\n",word.data());
if
(
g_vhdlKeyDict0
.
find
(
word
))
if
(
g_vhdlKeyDict0
.
find
(
word
.
lower
()
))
return
&
g_vhdlkeyword
;
if
(
g_vhdlKeyDict1
.
find
(
word
))
if
(
g_vhdlKeyDict1
.
find
(
word
.
lower
()
))
return
&
g_vhdltype
;
if
(
g_vhdlKeyDict2
.
find
(
word
))
if
(
g_vhdlKeyDict2
.
find
(
word
.
lower
()
))
return
&
g_vhdllogic
;
return
0
;
...
...
@@ -832,21 +832,23 @@ bool VhdlDocGen::getSigTypeName(QList<QCString>& ql, const char* str,QCString& b
bool
VhdlDocGen
::
getSigName
(
QList
<
QCString
>&
ql
,
const
char
*
str
,
QCString
&
buffer
)
{
int
len
,
j
,
ll
,
index
;
int
j
,
ll
,
index
;
char
*
signal
=
"signal "
;
QCString
qmem
;
QCString
temp
(
str
);
QCString
st
(
str
);
QRegExp
semi
(
","
);
QRegExp
r
(
":"
);
j
=
r
.
match
(
temp
.
data
(),
0
,
&
len
);
//QRegExp semi(",");
//QRegExp r(":");
// colon position
j
=
temp
.
find
(
':'
);
if
(
j
<
0
)
return
FALSE
;
// no input definition
st
=
st
.
left
(
j
);
st
=
st
.
left
(
j
);
// name only
index
=
st
.
find
(
signal
,
0
,
FALSE
);
if
(
index
>
-
1
)
if
(
index
>
-
1
)
// found "signal "
{
qmem
=
st
.
remove
(
index
,
strlen
(
signal
));
qmem
=
st
.
remove
(
index
,
strlen
(
signal
));
// strip it
temp
=
qmem
;
st
=
qmem
;
}
...
...
@@ -855,56 +857,71 @@ bool VhdlDocGen::getSigName(QList<QCString>& ql,
qmem
=
temp
;
}
ll
=
s
emi
.
match
(
st
.
data
(),
0
,
&
len
);
ll
=
s
t
.
find
(
','
);
if
(
ll
>
0
)
if
(
ll
>
0
)
// multiple names
{
while
(
TRUE
)
{
st
=
st
.
left
(
ll
);
st
=
st
.
left
(
ll
).
stripWhiteSpace
();
// one name
QCString
*
sig
=
new
QCString
(
st
);
ql
.
insert
(
0
,
sig
);
qmem
=
qmem
.
right
(
qmem
.
length
()
-
ll
-
1
);
st
=
qmem
;
ll
=
s
emi
.
match
(
st
.
data
(),
0
,
&
len
);
if
(
ll
<
0
)
qmem
=
qmem
.
right
(
qmem
.
length
()
-
ll
-
1
);
// strip from list
st
=
qmem
;
// remainder
ll
=
s
t
.
find
(
','
);
if
(
ll
<
0
)
// last name
{
ll
=
r
.
match
(
st
.
data
(),
0
,
&
len
);
st
=
st
.
left
(
ll
);
ll
=
st
.
find
(
':'
);
st
=
st
.
left
(
ll
)
.
stripWhiteSpace
()
;
ql
.
insert
(
0
,
new
QCString
(
st
));
break
;
}
}
}
else
else
// single name
{
st
=
st
.
left
(
j
);
st
=
st
.
stripWhiteSpace
(
);
ql
.
insert
(
0
,
new
QCString
(
st
));
}
QCString
*
qdir
=
new
QCString
(
str
);
st
=
qdir
->
mid
(
j
+
1
);
//st=st.lower();
st
=
st
.
stripWhiteSpace
();
st
=
qdir
->
mid
(
j
+
1
);
// part after :
st
=
st
.
lower
().
stripWhiteSpace
();
*
qdir
=
st
;
ql
.
insert
(
0
,
qdir
);
if
(
st
.
stripPrefix
(
"inout"
))
{
buffer
+=
"inout"
;
return
TRUE
;
}
if
(
st
.
stripPrefix
(
"INOUT"
))
{
buffer
+=
"inout"
;
return
TRUE
;
}
if
(
st
.
stripPrefix
(
"out"
))
{
buffer
+=
"out"
;
return
TRUE
;
}
if
(
st
.
stripPrefix
(
"OUT"
))
{
buffer
+=
"out"
;
return
TRUE
;
}
if
(
st
.
stripPrefix
(
"in"
))
{
buffer
+=
"in"
;
return
TRUE
;
}
if
(
st
.
stripPrefix
(
"IN"
))
{
buffer
+=
"in"
;
return
TRUE
;
}
return
FALSE
;
}
...
...
src/vhdlscanner.l
View file @
38c6a14b
...
...
@@ -247,6 +247,7 @@ void addSignals(const char* str,int line, Entry *e,const char *comment=0)
for (int k=1;k<count;k++)
{
printf("adding '%s' '%s'\n",ql.at(0)->data(),ql.at(k)->data());
Entry *pTemp=new Entry;
initEntry(pTemp);
pTemp->startLine = line;
...
...
winbuild/Doxywizard.vcproj
View file @
38c6a14b
...
...
@@ -73,7 +73,7 @@
/>
<Tool
Name=
"VCLinkerTool"
AdditionalDependencies=
"$(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib iconv.lib ws2_32.lib winmm.lib
imm32
.lib"
AdditionalDependencies=
"$(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib iconv.lib ws2_32.lib winmm.lib
gdi32.lib imm32.lib advapi32.lib comdlg32.lib shell32.lib winspool
.lib"
OutputFile=
"..\bin\Debug\doxywizard.exe"
LinkIncremental=
"2"
GenerateManifest=
"false"
...
...
@@ -158,7 +158,7 @@
/>
<Tool
Name=
"VCLinkerTool"
AdditionalDependencies=
"$(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib iconv.lib ws2_32.lib winmm.lib
imm32
.lib"
AdditionalDependencies=
"$(QTDIR)\lib\qt-mt.lib $(QTDIR)\lib\qtmain.lib iconv.lib ws2_32.lib winmm.lib
gdi32.lib imm32.lib advapi32.lib comdlg32.lib shell32.lib winspool
.lib"
OutputFile=
"..\bin\doxywizard.exe"
LinkIncremental=
"1"
GenerateManifest=
"false"
...
...
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