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
4f577549
Commit
4f577549
authored
May 14, 2000
by
Dimitri van Heesch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.1.3-20000514
parent
367c98ad
Changes
56
Hide whitespace changes
Inline
Side-by-side
Showing
56 changed files
with
450 additions
and
163 deletions
+450
-163
INSTALL
INSTALL
+4
-4
Makefile.in
Makefile.in
+1
-1
README
README
+2
-2
VERSION
VERSION
+1
-1
configure
configure
+7
-1
config.doc
doc/config.doc
+10
-4
starting.doc
doc/starting.doc
+19
-1
doxygen.spec
packages/rpm/doxygen.spec
+1
-1
classdef.cpp
src/classdef.cpp
+1
-1
code.l
src/code.l
+71
-20
doxygen.cpp
src/doxygen.cpp
+78
-41
htmlgen.cpp
src/htmlgen.cpp
+71
-24
htmlgen.h
src/htmlgen.h
+4
-0
latexgen.h
src/latexgen.h
+5
-0
mangen.h
src/mangen.h
+5
-0
memberdef.cpp
src/memberdef.cpp
+20
-9
outputgen.h
src/outputgen.h
+4
-0
outputlist.h
src/outputlist.h
+8
-0
rtfgen.h
src/rtfgen.h
+4
-0
scanner.l
src/scanner.l
+45
-11
util.cpp
src/util.cpp
+54
-7
tmake.conf
tmake/lib/aix-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/aix-xlc/tmake.conf
+1
-1
tmake.conf
tmake/lib/bsdi-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/dgux-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/freebsd-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/gnu-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/hpux-acc/tmake.conf
+1
-1
tmake.conf
tmake/lib/hpux-cc/tmake.conf
+1
-1
tmake.conf
tmake/lib/hpux-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/irix-64/tmake.conf
+1
-1
tmake.conf
tmake/lib/irix-dcc/tmake.conf
+1
-1
tmake.conf
tmake/lib/irix-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/irix-n32/tmake.conf
+1
-1
tmake.conf
tmake/lib/irix-o32/tmake.conf
+1
-1
tmake.conf
tmake/lib/linux-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/netbsd-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/openbsd-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/osf1-cxx/tmake.conf
+1
-1
tmake.conf
tmake/lib/osf1-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/qnx-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/sco-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/solaris-cc-gcc/tmake.conf
+1
-1
tmake.conf
tmake/lib/solaris-cc/tmake.conf
+1
-1
tmake.conf
tmake/lib/solaris-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/sunos-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/ultrix-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/unixware-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/unixware7-cc/tmake.conf
+1
-1
tmake.conf
tmake/lib/unixware7-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/win32-borland/tmake.conf
+1
-1
tmake.conf
tmake/lib/win32-g++/tmake.conf
+1
-1
tmake.conf
tmake/lib/win32-msvc/tmake.conf
+1
-1
tmake.conf
tmake/lib/win32-symantec/tmake.conf
+1
-1
tmake.conf
tmake/lib/win32-visage/tmake.conf
+1
-1
tmake.conf
tmake/lib/win32-watcom/tmake.conf
+1
-1
No files found.
INSTALL
View file @
4f577549
DOXYGEN Version 1.1.3
DOXYGEN Version 1.1.3
-20000514
CONTENTS
--------
...
...
@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.3.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.3.src.tar # unpack it
gunzip doxygen-1.1.3
-20000514
.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.3
-20000514
.src.tar # unpack it
2. Run the configure script:
...
...
@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
08
May 2000)
Dimitri van Heesch (
14
May 2000)
Makefile.in
View file @
4f577549
...
...
@@ -21,7 +21,7 @@ distclean: clean
-
rm
-f
html
-
rm
-f
objects/
*
.o
-
rm
-f
src/Makefile.doxygen src/Makefile.doxytag src/Makefile.doxysearch
-
rm
-f
Makefile src/Makefile examples/Makefile doc/Makefile
-
rm
-f
Makefile src/Makefile examples/Makefile doc/Makefile
-
rm
-f
.makeconfig .tmakeconfig
-
rm
-f
src/doxygen.pro src/doxytag.pro src/doxysearch.pro
-
rm
-f
src/version.cpp
...
...
README
View file @
4f577549
DOXYGEN Version 1.1.3
DOXYGEN Version 1.1.3
-20000514
Please read INSTALL for compilation instructions.
...
...
@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
08
May 2000)
Dimitri van Heesch (
14
May 2000)
VERSION
View file @
4f577549
1.1.3
1.1.3
-20000514
configure
View file @
4f577549
...
...
@@ -349,9 +349,15 @@ fi
touch
.tmakeconfig
if
test
"
$f_shared
"
=
NO
;
then
if
test
"
$f_platform
"
=
"osf1-cxx"
;
then
cat
>>
.tmakeconfig
<<
EOF
TMAKE_LFLAGS = -static
TMAKE_LFLAGS = -non_shared
EOF
else
cat
>>
.tmakeconfig
<<
EOF
TMAKE_LFLAGS = -static
EOF
fi
fi
if
test
"
$f_english
"
=
YES
;
then
...
...
doc/config.doc
View file @
4f577549
...
...
@@ -538,21 +538,27 @@ description.
that doxygen normally generates:
\verbatim
H1 { text-align: center }
H1 { text-align: center
;
}
A.qindex {}
A.qindexRef {}
A.el { text-decoration: none; font-weight: bold }
A.elRef { font-weight: bold }
A.code { text-decoration: none; font-weight: normal; color: #4444ee }
A.codeRef { font-weight: normal; color: #4444ee }
A.gl:link { color: #ffffff }
A.gl:visited { color: #ffffff }
A.gl { text-decoration: none; font-weight: bold; background-color: #ff8080 }
DL.el { margin-left: -1cm }
DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
DIV.in { margin-left: 16 }
DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }
TD.md { background-color: #f2f2ff }
DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight
DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller }
FONT.keyword { color: #008000 }
FONT.keywordtype { color: #008060 }
FONT.keywordflow { color: #e08000 }
FONT.comment { color: #800000 }
FONT.preprocessor { color: #806020 }
FONT.stringliteral { color: #002080 }
FONT.charliteral { color: #008080 }
\endverbatim
\anchor cfg_html_align_members
...
...
doc/starting.doc
View file @
4f577549
...
...
@@ -742,7 +742,7 @@ Then by default doxygen will feed the following to its parser:
You can disable all preprocessing by setting
\ref cfg_enable_preprocessing "ENABLE_PREPROCESSING" to \c
NO in the configuation file. In the case above doxygen will then read
NO in the configuation file. In the case above doxygen will then read
s
both statements!
In case you want to expand the \c CONST_STRING macro, you should set the
...
...
@@ -847,6 +847,24 @@ for class QList is to define:
PREDEFINED = QListT:=QList
\endverbatim
Here is example provided by Valter Minute that helps doxygen to
wade through the boilerplate code in Microsoft's ATL library:
\verbatim
PREDEFINED = DECLARE_REGISTRY_RESOURCEID=// \
DECLARE_PROTECT_FINAL_CONSTRUCT=// \
BEGIN_COM_MAP=/* \
END_COM_MAP=*/// \
BEGIN_PROP_MAP=/* \
END_PROP_MAP=*/// \
BEGIN_MSG_MAP=/* \
END_MSG_MAP=*/// \
DECLARE_VIEW_STATUS=// \
"STDMETHOD(a)=HRESULT a" \
"ATL_NO_VTABLE= "\
"__declspec(a)= "\
\endverbatim
As you can see doxygen's preprocessor is quite powerful, but if you want
even more flexibility you can always write an input filter and specify it
after the \ref cfg_input_filter "INPUT_FILTER" tag.
...
...
packages/rpm/doxygen.spec
View file @
4f577549
Name: doxygen
Version: 1.1.3
Version: 1.1.3
-20000514
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
...
...
src/classdef.cpp
View file @
4f577549
...
...
@@ -1637,7 +1637,7 @@ void ClassDef::determineImplUsageRelation()
bool
found
=
FALSE
;
while
((
i
=
re
.
match
(
type
,
p
,
&
l
))
!=-
1
&&
!
found
)
// for each class name in the type
{
int
ts
=
p
+
l
;
int
ts
=
i
+
l
;
int
te
=
ts
;
while
(
type
.
at
(
ts
)
==
' '
&&
ts
<
typeLen
)
ts
++
;
// skip any whitespace
if
(
type
.
at
(
ts
)
==
'<'
)
// assume template instance
...
...
src/code.l
View file @
4f577549
...
...
@@ -284,10 +284,10 @@ static void generateClassLink(OutputList &ol,char *clName,int *clNameLen=0)
QCString className=clName;
if (clNameLen) *clNameLen=0;
if (className.isEmpty()) return;
ClassDef *cd=getClass(className);
ClassDef *cd=get
Resolved
Class(className);
if (cd==0 && (i=className.find('<'))!=-1)
{
cd=getClass(className.left(i));
cd=get
Resolved
Class(className.left(i));
}
if (cd && cd->isLinkable())
{
...
...
@@ -374,7 +374,7 @@ static ClassDef *stripClassName(const char *s)
int p=0,i,l;
while ((i=re.match(tmp,p,&l))!=-1)
{
ClassDef *cd=getClass(tmp.mid(i,l));
ClassDef *cd=get
Resolved
Class(tmp.mid(i,l));
if (cd) return cd;
p=i+l;
}
...
...
@@ -579,8 +579,10 @@ B [ \t]
BN [ \t\n\r]
ID [a-z_A-Z][a-z_A-Z0-9]*
SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
KEYWORD ("asm"|"auto"|"break"|"case"|"catch"|"class"|"const_cast"|"continue"|"default"|"delete"|"do"|"dynamic_cast"|"else"|"enum"|"explicit"|"extern"|"false"|"for"|"friend"|"goto"|"if"|"inline"|"mutable"|"namespace"|"new"|"operator"|"private"|"protected"|"public"|"register"|"reinterpret_cast"|"return"|"sizeof"|"static"|"static_cast"|"struct"|"switch"|"template"|"this"|"throw"|"true"|"try"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"while")
TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"|"void"|"wchar_t")
SCOPEPREFIX {ID}{B}*"::"({B}*{ID}{B}*"::")*
KEYWORD ("asm"|"auto"|"class"|"const"|"const_cast"|"delete"|"dynamic_cast"|"enum"|"explicit"|"extern"|"false"|"friend"|"inline"|"mutable"|"namespace"|"new"|"operator"|"private"|"protected"|"public"|"register"|"reinterpret_cast"|"sizeof"|"static"|"static_cast"|"struct"|"template"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile")
FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"for"|"goto"|"if"|"return"|"switch"|"throw"|"try"|"while")
TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"|"void"|"wchar_t")
%option noyywrap
...
...
@@ -603,7 +605,7 @@ TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"u
%%
<*>\x0d
<Body>^([ \t]*"#"[ \t]"include"[ \t]*)("<"|"\"") {
<Body>^([ \t]*"#"[ \t]
*
"include"[ \t]*)("<"|"\"") {
startFontClass("preprocessor");
g_code->codify(yytext);
BEGIN( ReadInclude );
...
...
@@ -728,22 +730,54 @@ TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"u
}
<Body>{KEYWORD}/([^a-z_A-Z0-9]) {
<Body>{SCOPEPREFIX}*{B}*"operator"{B}*"()"{B}*/"(" {
addType();
generateFunctionLink(*g_code,yytext);
g_bracketCount=1;
g_args.resize(0);
g_name+=yytext;
BEGIN( FuncCall );
}
<Body>{SCOPEPREFIX}*{B}*"operator"{B}*[^\(\n]+/"(" {
addType();
generateFunctionLink(*g_code,yytext);
g_bracketCount=1;
g_args.resize(0);
g_name+=yytext;
BEGIN( FuncCall );
}
<Body>{KEYWORD}/([^a-z_A-Z0-9]) {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
}
<Body>{KEYWORD}/{B}* {
<Body>{KEYWORD}/{B}*
{
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
}
<Body>{KEYWORD}/{B}*"(" {
<Body>{KEYWORD}/{B}*"("
{
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
g_name.resize(0);g_type.resize(0);
}
<Body>{FLOWKW}/([^a-z_A-Z0-9]) {
startFontClass("keywordflow");
codifyLines(yytext);
endFontClass();
}
<Body>{FLOWKW}/{B}* {
startFontClass("keywordflow");
codifyLines(yytext);
endFontClass();
}
<Body>{FLOWKW}/{B}*"(" {
startFontClass("keywordflow");
codifyLines(yytext);
endFontClass();
g_name.resize(0);g_type.resize(0);
}
<Body>[\\|\)\+\-\/\%\~\!] {
g_code->codify(yytext);
g_name.resize(0);g_type.resize(0);
...
...
@@ -756,13 +790,13 @@ TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"u
}
*/
<Body>{TYPEKW}/{B}* {
startFontClass("keyword");
startFontClass("keyword
type
");
g_code->codify(yytext);
endFontClass();
addType();
g_name+=yytext;
}
<Body>{SCOPENAME}{B}*"<"[^\}\{\(\)\/\n\>]*">"/{B}* {
<Body>{SCOPENAME}{B}*"<"[^\
"\
}\{\(\)\/\n\>]*">"/{B}* {
int i;
generateClassLink(*g_code,yytext,&i);
addType();
...
...
@@ -771,23 +805,19 @@ TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"u
}
<Body>{SCOPENAME}/{B}* {
generateClassLink(*g_code,yytext);
//codifyLines(yytext);
addType();
g_name+=yytext;
}
<Body>{SCOPENAME}/{B}*"(" {
addType();
//if (type.isEmpty())
QCString tmp=yytext;
generateFunctionLink(*g_code,yytext);
//else
// g_code->codify(yytext);
g_bracketCount=1;
g_args.resize(0);
g_name+=yytext;
BEGIN( FuncCall );
}
<FuncCall,Body,MemberCall>\" {
startFontClass("stringliteral");
g_code->codify(yytext);
g_lastStringContext=YY_START;
BEGIN( SkipString );
...
...
@@ -800,6 +830,7 @@ TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"u
}
<SkipString>\" {
g_code->codify(yytext);
endFontClass();
BEGIN( g_lastStringContext );
}
<SkipString>\\. {
...
...
@@ -809,8 +840,10 @@ TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"u
g_code->codify(yytext);
g_name.resize(0);g_type.resize(0);
}
<Body,MemberCall,MemberCall2,FuncCall>"'"((\\.)|(.))"'" {
<Body,MemberCall,MemberCall2,FuncCall>"'"((\\0[Xx0-9]+)|(\\.)|(.))"'" {
startFontClass("charliteral");
g_code->codify(yytext);
endFontClass();
}
<Body>"this->" { g_code->codify(yytext); }
<Body>"."|"->" {
...
...
@@ -843,13 +876,27 @@ TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"u
<Body>[0-9]+ {
g_code->codify(yytext);
}
<MemberCall2,FuncCall>
({KEYWORD}|{TYPEKW})
/([^a-z_A-Z0-9]) {
<MemberCall2,FuncCall>
{KEYWORD}
/([^a-z_A-Z0-9]) {
addParmType();
g_parmName=yytext;
startFontClass("keyword");
g_code->codify(yytext);
endFontClass();
}
<MemberCall2,FuncCall>{TYPEKW}/([^a-z_A-Z0-9]) {
addParmType();
g_parmName=yytext;
startFontClass("keywordtype");
g_code->codify(yytext);
endFontClass();
}
<MemberCall2,FuncCall>{FLOWKW}/([^a-z_A-Z0-9]) {
addParmType();
g_parmName=yytext;
startFontClass("keywordflow");
g_code->codify(yytext);
endFontClass();
}
<MemberCall2,FuncCall>[a-z_A-Z][:a-z_A-Z0-9]* {
addParmType();
g_parmName=yytext;
...
...
@@ -943,7 +990,7 @@ TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"u
endFontClass();
BEGIN( g_lastCContext ) ;
}
<SkipCxxComment>[^\r\n]
*
{
<SkipCxxComment>[^\r\n]
+
{
g_code->codify(yytext);
}
<SkipCxxComment>\r
...
...
@@ -1038,7 +1085,11 @@ TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"u
}
else
{
g_lastCContext = YY_START ;
// check is to prevent getting stuck in skipping C++ comments
if (YY_START != SkipCxxComment)
{
g_lastCContext = YY_START ;
}
startFontClass("comment");
codifyLines(yytext);
BEGIN(SkipComment);
...
...
src/doxygen.cpp
View file @
4f577549
...
...
@@ -154,7 +154,7 @@ int documentedIncludeFiles;
QTextStream
tagFile
;
void
addMemberDocs
(
Entry
*
root
,
MemberDef
*
md
,
const
char
*
funcDecl
,
bool
over_load
,
NamespaceList
*
nl
=
0
);
ArgumentList
*
al
,
bool
over_load
,
NamespaceList
*
nl
=
0
);
const
char
idMask
[]
=
"[A-Za-z_][A-Za-z_0-9]*"
;
QCString
spaces
;
...
...
@@ -782,9 +782,16 @@ void findUsingDirectives(Entry *root)
//----------------------------------------------------------------------
static
MemberDef
*
addVariableToClass
(
Entry
*
root
,
ClassDef
*
cd
,
MemberDef
::
MemberType
mtype
,
const
QCString
&
scope
,
const
QCString
&
name
,
bool
fromAnnScope
,
int
indentDepth
,
MemberDef
*
fromAnnMemb
,
Protection
prot
)
static
MemberDef
*
addVariableToClass
(
Entry
*
root
,
ClassDef
*
cd
,
MemberDef
::
MemberType
mtype
,
const
QCString
&
scope
,
const
QCString
&
name
,
bool
fromAnnScope
,
int
indentDepth
,
MemberDef
*
fromAnnMemb
,
Protection
prot
)
{
Debug
::
print
(
Debug
::
Variables
,
0
,
" class variable:
\n
"
...
...
@@ -832,7 +839,7 @@ static MemberDef *addVariableToClass(Entry *root,ClassDef *cd,
if
(
md
->
memberClass
()
==
cd
&&
root
->
type
==
md
->
typeString
())
// member already in the scope
{
addMemberDocs
(
root
,
md
,
def
,
FALSE
);
addMemberDocs
(
root
,
md
,
def
,
0
,
FALSE
);
return
md
;
}
md
=
mn
->
next
();
...
...
@@ -885,9 +892,14 @@ static MemberDef *addVariableToClass(Entry *root,ClassDef *cd,
//----------------------------------------------------------------------
static
MemberDef
*
addVariableToFile
(
Entry
*
root
,
MemberDef
::
MemberType
mtype
,
const
QCString
&
scope
,
const
QCString
&
name
,
bool
fromAnnScope
,
int
indentDepth
,
MemberDef
*
fromAnnMemb
)
static
MemberDef
*
addVariableToFile
(
Entry
*
root
,
MemberDef
::
MemberType
mtype
,
const
QCString
&
scope
,
const
QCString
&
name
,
bool
fromAnnScope
,
int
indentDepth
,
MemberDef
*
fromAnnMemb
)
{
Debug
::
print
(
Debug
::
Variables
,
0
,
" global variable:
\n
"
...
...
@@ -1134,7 +1146,8 @@ void buildVarList(Entry *root)
else
// annonymous scope inside namespace or file => put variable in the global scope
{
//printf("Inserting member in global scope %s!\n",pScope.data());
md
=
addVariableToFile
(
root
,
mtype
,
pScope
,
name
,
!
pScope
.
isEmpty
(),
indentDepth
,
0
);
//md=addVariableToFile(root,mtype,pScope,name,!pScope.isEmpty(),indentDepth,0);
md
=
addVariableToFile
(
root
,
mtype
,
pScope
,
name
,
TRUE
,
indentDepth
,
0
);
}
}
}
...
...
@@ -1734,11 +1747,20 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
{
// TODO: here we should try to find the correct template specialization
// but for now, we only look for the unspecializated base class.
int
e
=
baseClassName
.
find
(
'>'
);
if
(
e
!=-
1
)
// locate end of template
int
e
=
i
+
1
;
int
brCount
=
1
;
int
typeLen
=
baseClassName
.
length
();
while
(
e
<
typeLen
&&
brCount
!=
0
)
{
templSpec
=
baseClassName
.
mid
(
i
,
e
-
i
+
1
);
baseClassName
=
baseClassName
.
left
(
i
)
+
baseClassName
.
right
(
baseClassName
.
length
()
-
e
-
1
);
if
(
baseClassName
.
at
(
e
)
==
'<'
)
brCount
++
;
if
(
baseClassName
.
at
(
e
)
==
'>'
)
brCount
--
;
e
++
;
}
if
(
brCount
==
0
)
// end of template was found at e
{
templSpec
=
baseClassName
.
mid
(
i
,
e
-
i
);
baseClassName
=
baseClassName
.
left
(
i
)
+
baseClassName
.
right
(
baseClassName
.
length
()
-
e
);
baseClass
=
getResolvedClass
(
baseClassName
);
//printf("baseClass=%p baseClass=%s templSpec=%s\n",
// baseClass,baseClassName.data(),templSpec.data());
...
...
@@ -1796,7 +1818,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
}
else
if
(
insertUndocumented
)
{
Debug
::
print
(
Debug
::
Classes
,
0
,
" Undocumented base class `%s'
\n
"
,
bi
->
n
ame
.
data
());
Debug
::
print
(
Debug
::
Classes
,
0
,
" Undocumented base class `%s'
baseClassName=%s
\n
"
,
bi
->
name
.
data
(),
baseClassN
ame
.
data
());
baseClass
=
new
ClassDef
(
baseClassName
,
ClassDef
::
Class
);
// add base class to this class
cd
->
insertBaseClass
(
baseClass
,
bi
->
prot
,
bi
->
virt
,
templSpec
);
...
...
@@ -1947,8 +1969,12 @@ void computeMemberReferences()
// set the function declaration of the member to `funcDecl'. If the boolean
// over_load is set the standard overload text is added.
void
addMemberDocs
(
Entry
*
root
,
MemberDef
*
md
,
const
char
*
funcDecl
,
bool
over_load
,
NamespaceList
*
nl
)
void
addMemberDocs
(
Entry
*
root
,
MemberDef
*
md
,
const
char
*
funcDecl
,
ArgumentList
*
al
,
bool
over_load
,
NamespaceList
*
nl
)
{
//printf("addMemberDocs: `%s'::`%s' `%s' funcDecl=`%s'\n",
// root->parent->name.data(),md->name().data(),md->argsString(),funcDecl);
...
...
@@ -1958,15 +1984,22 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
md
->
setDefinition
(
fDecl
);
ClassDef
*
cd
=
md
->
memberClass
();
NamespaceDef
*
nd
=
md
->
getNamespace
();
if
(
matchArguments
(
md
->
argumentList
(),
root
->
argList
,
cd
?
cd
->
name
().
data
()
:
0
,
nd
?
nd
->
name
().
data
()
:
0
,
TRUE
,
nl
)
)
if
(
al
)
{
mergeArguments
(
md
->
argumentList
(),
root
->
argList
);
mergeArguments
(
md
->
argumentList
(),
al
);
}
else
{
if
(
matchArguments
(
md
->
argumentList
(),
root
->
argList
,
cd
?
cd
->
name
().
data
()
:
0
,
nd
?
nd
->
name
().
data
()
:
0
,
TRUE
,
nl
)
)
{
mergeArguments
(
md
->
argumentList
(),
root
->
argList
);
}
}
if
(
over_load
)
// the \overload keyword was used
{
...
...
@@ -2133,20 +2166,19 @@ static bool findUnrelatedFunction(Entry *root,
{
Debug
::
print
(
Debug
::
FindMembers
,
0
,
"4. Try to add member `%s' to scope `%s'
\n
"
,
md
->
name
().
data
(),
namespaceName
.
data
());
//printf("Searching for match between %s and %s\n",
// argListToString(md->argumentList()).data(),
// argListToString(root->argList).data());
//ArgumentList *al = new ArgumentList;
//stringToArgumentList(funcArgs,al);
QCString
nsName
=
nd
?
nd
->
name
().
data
()
:
""
;
bool
matching
=
/*matchArguments(md->argsString(),args);*/
(
md
->
argumentList
()
==
0
&&
root
->
argList
->
count
()
==
0
)
||
matchArguments
(
md
->
argumentList
(),
root
->
argList
,
0
,
nsName
);
if
(
matching
)
// add docs to the member
{
Debug
::
print
(
Debug
::
FindMembers
,
0
,
"5. Match found
\n
"
);
addMemberDocs
(
root
,
md
,
decl
,
FALSE
);
addMemberDocs
(
root
,
md
,
decl
,
root
->
argList
,
FALSE
);
found
=
TRUE
;
}
//delete al;
}
md
=
mn
->
next
();
}
...
...
@@ -2468,7 +2500,6 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
}
}
if
(
root
->
tArgList
==
0
&&
!
classTempList
.
isEmpty
())
{
// no template specifiers found during parsing (because \fn was used),
...
...
@@ -2542,13 +2573,6 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
QCString
fullFuncDecl
=
funcDecl
.
copy
();
if
(
isFunc
)
fullFuncDecl
+=
argListToString
(
root
->
argList
);
// destructor => do backward class name substitution if needed
//if (!funcName.isEmpty() && funcName[0]=='~')
// funcName="~"+resolveDefines(className);
// constructor => do backward class name substitution if needed
//if (funcName==className) funcName=resolveDefines(className);
//if (funcDecl.left(7)=="inline ") funcDecl=funcDecl.right(funcDecl.length()-7);
Debug
::
print
(
Debug
::
FindMembers
,
0
,
"findMember() Parse results:
\n
"
" namespaceName=`%s'
\n
"
...
...
@@ -2693,7 +2717,9 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
argList
/* dest argument list */
);
if
(
substDone
)
// delete old argument list
{
delete
oldArgList
;
}
substDone
=
TRUE
;
}
...
...
@@ -2731,13 +2757,15 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
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
,
overloaded
,
nl
);
addMemberDocs
(
root
,
md
,
funcDecl
,
0
,
overloaded
,
nl
);
count
++
;
}
}
...
...
@@ -2865,7 +2893,7 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
if
(
!
newMember
&&
rmd
)
// member already exists as rmd -> add docs
{
//printf("addMemberDocs for related member %s\n",root->name.data());
addMemberDocs
(
root
,
rmd
,
funcDecl
,
overloaded
);
addMemberDocs
(
root
,
rmd
,
funcDecl
,
0
,
overloaded
);
}
}
...
...
@@ -4817,8 +4845,17 @@ int main(int argc,char **argv)
}
else
{
config
=
fileToString
(
argv
[
optind
]);
configName
=
argv
[
optind
];
QFileInfo
fi
(
argv
[
optind
]);
if
(
fi
.
exists
())
{
config
=
fileToString
(
argv
[
optind
]);
configName
=
argv
[
optind
];
}
else
{
err
(
"Error: configuration file %s not found!
\n
"
,
argv
[
optind
]);
usage
(
argv
[
0
]);
}
}
parseConfig
(
config
);
...
...
src/htmlgen.cpp
View file @
4f577549
...
...
@@ -207,9 +207,13 @@ void HtmlGenerator::writeStyleInfo(int part)
t
<<
"TD.md { background-color: #f2f2ff }"
<<
endl
;
t
<<
"DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold }"
<<
endl
;
t
<<
"DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller }"
<<
endl
;
t
<<
"FONT.keyword { color: #008000 }"
<<
endl
;
t
<<
"FONT.comment { color: #800000 }"
<<
endl
;
t
<<
"FONT.preprocessor { color: #806020 }"
<<
endl
;
t
<<
"FONT.keyword { color: #008000 }"
<<
endl
;
t
<<
"FONT.keywordtype { color: #604020 }"
<<
endl
;
t
<<
"FONT.keywordflow { color: #e08000 }"
<<
endl
;
t
<<
"FONT.comment { color: #800000 }"
<<
endl
;
t
<<
"FONT.preprocessor { color: #806020 }"
<<
endl
;
t
<<
"FONT.stringliteral { color: #002080 }"
<<
endl
;
t
<<
"FONT.charliteral { color: #008080 }"
<<
endl
;
//t << "TD.groupLine { background-color: #3080ff }" << endl;
t
<<
endl
;
endPlainFile
();
...
...
@@ -603,24 +607,6 @@ void HtmlGenerator::endMemberItem(bool)
t
<<
endl
;
}
void
HtmlGenerator
::
startParameter
(
bool
first
)
{
if
(
first
)
{
t
<<
endl
<<
"</b></td>"
<<
endl
;
t
<<
"<td valign=bottom><b>"
<<
endl
;
}
else
{
t
<<
"<tr><td></td><td><b>"
<<
endl
;
}
}
void
HtmlGenerator
::
endParameter
(
bool
)
{
t
<<
"</b></td></tr>"
<<
endl
;
}
void
HtmlGenerator
::
insertMemberAlign
()
{
...
...
@@ -764,20 +750,81 @@ void HtmlGenerator::writeImage(const char *name,const char *,const char *)
void
HtmlGenerator
::
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
)
{
DBG_HTML
(
t
<<
"<!-- startMemberDoc -->"
<<
endl
;)
t
<<
"<p>"
<<
endl
;
t
<<
"<table width=100% cellpadding=2 cellspacing=0 border=0>"
<<
endl
;
t
<<
" <tr>"
<<
endl
;
t
<<
" <td class=
\"
md
\"
><b>"
<<
endl
;
t
<<
" <table cellspadding=0 cellspacing=0 border=0>"
<<
endl
;
}
void
HtmlGenerator
::
startMemberDocPrefixItem
()
{
DBG_HTML
(
t
<<
"<!-- startMemberDocPrefixItem -->"
<<
endl
;)
t
<<
" <tr>"
<<
endl
;
t
<<
" <td valign=top><b>"
<<
endl
;
t
<<
" <td colspan=
\"
2
\"
><b>"
<<
endl
;
}
void
HtmlGenerator
::
endMemberDocPrefixItem
()
{
DBG_HTML
(
t
<<
"<!-- endMemberDocPrefixItem -->"
<<
endl
;)
t
<<
" </b></td>"
<<
endl
;
t
<<
" </tr>"
<<
endl
;
}
void
HtmlGenerator
::
startMemberDocName
()
{
DBG_HTML
(
t
<<
"<!-- startMemberDocName -->"
<<
endl
;)
t
<<
" <tr>"
<<
endl
;
t
<<
" <td nowrap valign=
\"
top
\"
><b> "
<<
endl
;
}
void
HtmlGenerator
::
endMemberDocName
()
{
DBG_HTML
(
t
<<
"<!-- endMemberDocName -->"
<<
endl
;)
t
<<
endl
;
t
<<
" </b></td>"
<<
endl
;
}
void
HtmlGenerator
::
startParameter
(
bool
first
)
{
if
(
first
)
{
DBG_HTML
(
t
<<
"<!-- startFirstParameter -->"
<<
endl
;)
t
<<
" <td valign=
\"
bottom
\"
><b>"
<<
endl
;
}
else
{
DBG_HTML
(
t
<<
"<!-- startParameter -->"
<<
endl
;)
t
<<
" <tr>"
<<
endl
;
t
<<
" <td></td>"
<<
endl
;
t
<<
" <td><b>"
<<
endl
;
}
}
void
HtmlGenerator
::
endParameter
(
bool
first
)
{
if
(
first
)
{
DBG_HTML
(
t
<<
"<!-- endFirstParameter -->"
<<
endl
;)
t
<<
endl
;
t
<<
" </b></td>"
<<
endl
;
//t << " <td width=\"300\"><img src=\"null.gif\"></td>" << endl;
t
<<
" </tr>"
<<
endl
;
}
else
{
DBG_HTML
(
t
<<
"<!-- endParameter -->"
<<
endl
;)
t
<<
endl
;
t
<<
" </b></td>"
<<
endl
;
t
<<
" </tr>"
<<
endl
;
}
}
void
HtmlGenerator
::
endMemberDoc
()
{
DBG_HTML
(
t
<<
"<!-- endMemberDoc -->"
<<
endl
;)
t
<<
endl
;
t
<<
" </b></td>"
<<
endl
;
t
<<
" </tr>"
<<
endl
;
t
<<
" </table>"
<<
endl
;
t
<<
" </td>"
<<
endl
;
t
<<
" </tr>"
<<
endl
;
...
...
src/htmlgen.h
View file @
4f577549
...
...
@@ -224,6 +224,10 @@ class HtmlGenerator : public OutputGenerator
void
endTextBlock
()
{}
void
lastIndexPage
()
{}
void
startMemberDocPrefixItem
();
void
endMemberDocPrefixItem
();
void
startMemberDocName
();
void
endMemberDocName
();
void
startParameter
(
bool
first
);
void
endParameter
(
bool
last
);
...
...
src/latexgen.h
View file @
4f577549
...
...
@@ -219,6 +219,11 @@ class LatexGenerator : public OutputGenerator
void
startTextBlock
(
bool
)
{}
void
endTextBlock
()
{}
void
startMemberDocPrefixItem
()
{}
void
endMemberDocPrefixItem
()
{}
void
startMemberDocName
()
{}
void
endMemberDocName
()
{}
void
startParameter
(
bool
)
{}
void
endParameter
(
bool
)
{}
...
...
src/mangen.h
View file @
4f577549
...
...
@@ -206,6 +206,11 @@ class ManGenerator : public OutputGenerator
void
startTextBlock
(
bool
)
{}
void
endTextBlock
()
{}
void
lastIndexPage
()
{}
void
startMemberDocPrefixItem
()
{}
void
endMemberDocPrefixItem
()
{}
void
startMemberDocName
()
{}
void
endMemberDocName
()
{}
void
startParameter
(
bool
)
{}
void
endParameter
(
bool
)
{}
...
...
src/memberdef.cpp
View file @
4f577549
...
...
@@ -73,6 +73,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
if
(
argList
==
0
)
return
;
// member has no function like argument list
if
(
!
md
->
isDefine
())
ol
.
docify
(
" "
);
ol
.
docify
(
"("
);
// start argument list
ol
.
endMemberDocName
();
Argument
*
a
=
argList
->
first
();
QCString
cName
;
if
(
md
->
scopeDefTemplateArguments
())
...
...
@@ -101,11 +102,11 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
}
//printf("~~~ %s cName=%s\n",md->name().data(),cName.data());
//if (!md->isDefine()) ol.startParameter(TRUE); else ol.docify(" ");
ol
.
startParameter
(
TRUE
);
bool
first
=
TRUE
;
while
(
a
)
{
if
(
!
md
->
isDefine
())
ol
.
startParameter
(
first
);
else
ol
.
docify
(
" "
);
first
=
FALSE
;
QRegExp
re
(
")("
);
int
vp
;
if
(
!
a
->
attrib
.
isEmpty
())
// argument has an IDL attribute
...
...
@@ -155,12 +156,17 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
if
(
a
)
{
ol
.
docify
(
", "
);
// there are more arguments
if
(
!
md
->
isDefine
())
ol
.
endParameter
(
FALSE
);
if
(
!
md
->
isDefine
())
{
ol
.
endParameter
(
first
);
ol
.
startParameter
(
FALSE
);
}
}
first
=
FALSE
;
}
ol
.
pushGeneratorState
();
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
ol
.
writeString
(
" "
);
if
(
!
first
)
ol
.
writeString
(
" "
);
ol
.
popGeneratorState
();
ol
.
docify
(
")"
);
// end argument list
if
(
argList
->
constSpecifier
)
...
...
@@ -192,11 +198,11 @@ static void writeTemplatePrefix(OutputList &ol,ArgumentList *al,bool br=TRUE)
ol
.
docify
(
"> "
);
if
(
br
)
{
ol
.
pushGeneratorState
();
ol
.
disable
(
OutputGenerator
::
Man
);
ol
.
disable
(
OutputGenerator
::
Latex
);
ol
.
lineBreak
();
ol
.
popGeneratorState
();
//
ol.pushGeneratorState();
//
ol.disable(OutputGenerator::Man);
//
ol.disable(OutputGenerator::Latex);
//
ol.lineBreak();
//
ol.popGeneratorState();
}
}
...
...
@@ -914,13 +920,17 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
// )
if
(
scopeAl
&&
!
related
)
// class template prefix
{
ol
.
startMemberDocPrefixItem
();
writeTemplatePrefix
(
ol
,
scopeAl
);
ol
.
endMemberDocPrefixItem
();
}
if
(
scopeAl
&&
membAl
)
ol
.
docify
(
" "
);
if
(
membAl
)
// function template prefix
{
ol
.
startMemberDocPrefixItem
();
writeTemplatePrefix
(
ol
,
membAl
);
ol
.
endMemberDocPrefixItem
();
}
if
(
cd
)
{
...
...
@@ -940,6 +950,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
def
=
addTemplateNames
(
def
,
cName
,
tempArgListToString
(
scopeAl
));
}
}
ol
.
startMemberDocName
();
linkifyText
(
ol
,
scopeName
,
name
(),
def
);
writeDefArgumentList
(
ol
,
cd
,
scopeName
,
this
);
if
(
!
init
.
isEmpty
()
&&
initLines
==
0
)
// add initializer
...
...
src/outputgen.h
View file @
4f577549
...
...
@@ -210,6 +210,10 @@ class OutputGenerator
virtual
void
endTextBlock
()
=
0
;
virtual
void
lastIndexPage
()
=
0
;
virtual
void
startMemberDocPrefixItem
()
=
0
;
virtual
void
endMemberDocPrefixItem
()
=
0
;
virtual
void
startMemberDocName
()
=
0
;
virtual
void
endMemberDocName
()
=
0
;
virtual
void
startParameter
(
bool
)
=
0
;
virtual
void
endParameter
(
bool
)
=
0
;
...
...
src/outputlist.h
View file @
4f577549
...
...
@@ -364,6 +364,14 @@ class OutputList
void
lastIndexPage
()
{
forall
(
&
OutputGenerator
::
lastIndexPage
);
}
void
startMemberDocPrefixItem
()
{
forall
(
&
OutputGenerator
::
startMemberDocPrefixItem
);
}
void
endMemberDocPrefixItem
()
{
forall
(
&
OutputGenerator
::
endMemberDocPrefixItem
);
}
void
startMemberDocName
()
{
forall
(
&
OutputGenerator
::
startMemberDocName
);
}
void
endMemberDocName
()
{
forall
(
&
OutputGenerator
::
endMemberDocName
);
}
void
startParameter
(
bool
first
)
{
forall
(
&
OutputGenerator
::
startParameter
,
first
);
}
void
endParameter
(
bool
last
)
...
...
src/rtfgen.h
View file @
4f577549
...
...
@@ -208,6 +208,10 @@ class RTFGenerator : public OutputGenerator
void
endTextBlock
();
void
lastIndexPage
();
void
startMemberDocPrefixItem
()
{}
void
endMemberDocPrefixItem
()
{}
void
startMemberDocName
()
{}
void
endMemberDocName
()
{}
void
startParameter
(
bool
)
{}
void
endParameter
(
bool
)
{}
...
...
src/scanner.l
View file @
4f577549
...
...
@@ -151,6 +151,7 @@ static QCString formulaText;
static QCString sectionRef;
static bool insideIDL = FALSE;
static bool insideCppQuote = FALSE;
static bool insideVerbatim = FALSE;
static int depthIf;
// state variable for reading the argument list of a function
...
...
@@ -778,7 +779,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
FileDef *fd;
if ((fd=findFileDef(&imageNameDict,fileName,ambig)))
{
QFile inImage(fd->absFilePath());
QFile inImage(fd->absFilePath()
.data()
);
if (inImage.open(IO_ReadOnly))
{
result = fileName;
...
...
@@ -798,7 +799,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
break;
}
QCString outputFile = outputDir+"/"+result;
QFile outImage(outputFile);
QFile outImage(outputFile
.data()
);
if (outImage.open(IO_WriteOnly)) // copy the image
{
char *buffer = new char[inImage.size()];
...
...
@@ -1125,7 +1126,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<DocScan>^{B}*(("//"{B}*)?)"*"*{B}*"-"{B}+ { /* found list item marker */
addListItemMarker(yytext);
}
<DocScan>\n{B}*
"-"
{
<DocScan>\n{B}*
(("//"{B}*)?)"*"*{B}*"-"{B}+
{
addListItemMarker(yytext+1);
}
<DocScan>"<!--" { BEGIN(DocSkipHtmlComment); }
...
...
@@ -1188,10 +1189,12 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
<DocScan>{CMD}"verbatim"/[^a-z_A-Z0-9] {
outDoc->startCodeFragment();
insideVerbatim=TRUE;
BEGIN(DocVerbatim);
}
<DocVerbatim>{CMD}"endverbatim"/[^a-z_A-Z0-9] {
outDoc->endCodeFragment();
insideVerbatim=FALSE;
BEGIN(DocScan);
}
<DocVerbatim>[^\n\\\@]*"\n" {
...
...
@@ -1939,14 +1942,30 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<DocScan>"<"{OL}{ATTR}">" { outDoc->startEnumList();
currentListIndentLevel++;
}
<DocScan>"</"{OL}{ATTR}">" { outDoc->endEnumList();
currentListIndentLevel--;
<DocScan>"</"{OL}{ATTR}">" {
if (currentListIndentLevel<=0)
{
warn("Warning: more </ol> tags than <ol> tags in the documentation of %s\n",yyFileName);
}
else
{
outDoc->endEnumList();
currentListIndentLevel--;
}
}
<DocScan>"<"{UL}{ATTR}">" { outDoc->startItemList();
currentListIndentLevel++;
}
<DocScan>"</"{UL}{ATTR}">" { outDoc->endItemList();
currentListIndentLevel--;
<DocScan>"</"{UL}{ATTR}">" {
if (currentListIndentLevel<=0)
{
warn("Warning: more </ul> tags than <ul> tags in the documentation of %s\n",yyFileName);
}
else
{
outDoc->endItemList();
currentListIndentLevel--;
}
}
<DocScan>"<"{LI}{ATTR}">" { outDoc->writeListItem(); }
<DocScan>"</"{LI}{ATTR}">"
...
...
@@ -1958,8 +1977,16 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<DocScan>"<"{DL}{ATTR}">" { outDoc->startDescription();
currentListIndentLevel++;
}
<DocScan>"</"{DL}{ATTR}">" { outDoc->endDescription();
currentListIndentLevel--;
<DocScan>"</"{DL}{ATTR}">" {
if (currentListIndentLevel<=0)
{
warn("Warning: more </dl> tags than <dl> tags in the documentation of %s\n",yyFileName);
}
else
{
outDoc->endDescription();
currentListIndentLevel--;
}
}
<DocScan>"<"{DT}{ATTR}">" { outDoc->startDescItem(); }
<DocScan>"</"{DT}{ATTR}">"
...
...
@@ -2813,7 +2840,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<CopyCurly>"'"\\[0-7]{1,3}"'" { *pCopyCurlyString+=yytext; }
<CopyCurly>"'"\\."'" { *pCopyCurlyString+=yytext; }
<CopyCurly>"'"."'" { *pCopyCurlyString+=yytext; }
<CopyCurly>[^"'{}\n]+ {
<CopyCurly>[^"'{}\
/\
n]+ {
*pCopyCurlyString+=yytext;
}
<CopyCurly>\n {
...
...
@@ -3316,6 +3343,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
BEGIN( ReadFuncArgType );
}
<CopyArgCommentLine>\n { fullArgString+=yytext;
yyLineNr++;
if (lastCopyArgChar!=0)
unput(lastCopyArgChar);
BEGIN( ReadFuncArgType );
...
...
@@ -4870,11 +4898,12 @@ void parseDocument(OutputList &ol,const QCString &docString)
scanYYrestart( scanYYin );
BEGIN( DocScan );
insideArgumentList = FALSE;
insideVerbatim = FALSE;
scanYYlex();
if (insideArgumentList) { insideArgumentList=FALSE; outDoc->endItemList(); }
if (insideItemList) { forceEndItemList(); }
if (inBlock()) endBlock();
if (currentListIndentLevel
!=
0)
if (currentListIndentLevel
>
0)
{
if (!refName.isEmpty())
{
...
...
@@ -4902,6 +4931,10 @@ void parseDocument(OutputList &ol,const QCString &docString)
{
forceEndTable();
}
if (insideVerbatim)
{
warn("Warning: file ended inside a \\verbatim block!\n");
}
ol+=*outDoc;
delete outDoc; outDoc=0;
return;
...
...
@@ -4931,6 +4964,7 @@ void parseDoc(OutputList &ol,const char *clName,
refName="<unknown>";
}
parseDocument(ol,docString);
}
//----------------------------------------------------------------------------
...
...
src/util.cpp
View file @
4f577549
...
...
@@ -455,7 +455,14 @@ QCString argListToString(ArgumentList *al)
result
+=
"("
;
while
(
a
)
{
result
+=
a
->
type
+
" "
+
a
->
name
+
a
->
array
;
if
(
!
a
->
name
.
isEmpty
()
||
!
a
->
array
.
isEmpty
())
{
result
+=
a
->
type
+
" "
+
a
->
name
+
a
->
array
;
}
else
{
result
+=
a
->
type
;
}
a
=
al
->
next
();
if
(
a
)
result
+=
","
;
}
...
...
@@ -877,7 +884,7 @@ static QCString trimScope(const QCString &name,const QCString &s)
return
result
;
}
static
QCString
trimBaseClassScope
(
BaseClassList
*
bcl
,
const
QCString
&
s
,
int
level
=
0
)
void
trimBaseClassScope
(
BaseClassList
*
bcl
,
QCString
&
s
,
int
level
=
0
)
{
//printf("trimBaseClassScope level=%d `%s'\n",level,s.data());
BaseClassListIterator
bcli
(
*
bcl
);
...
...
@@ -885,18 +892,18 @@ static QCString trimBaseClassScope(BaseClassList *bcl,const QCString &s,int leve
for
(;(
bcd
=
bcli
.
current
());
++
bcli
)
{
ClassDef
*
cd
=
bcd
->
classDef
;
//printf("Trying class %s\n",cd->name().data());
int
spos
=
s
.
find
(
cd
->
name
()
+
"::"
);
if
(
spos
!=-
1
)
{
return
s
.
left
(
spos
)
+
s
.
right
(
s
.
length
()
-
spos
-
cd
->
name
().
length
()
-
2
s
=
s
.
left
(
spos
)
+
s
.
right
(
s
.
length
()
-
spos
-
cd
->
name
().
length
()
-
2
);
}
//printf("base class `%s'\n",cd->name().data());
if
(
cd
->
baseClasses
()
->
count
()
>
0
)
trimBaseClassScope
(
cd
->
baseClasses
(),
s
,
level
+
1
);
}
return
s
;
}
/*! if either t1 or t2 contains a namespace scope, then remove that
...
...
@@ -938,6 +945,44 @@ static void trimNamespaceScope(QCString &t1,QCString &t2)
}
}
/*! According to the C++ spec and Ivan Vecerina:
Parameter declarations that differ only in the presence or absence
of const and/or volatile are equivalent.
So the following example, show what is stripped by this routine
for const. The same is done for volatile.
\code
const T param -> T param // not relevant
const T& param -> const T& param // const needed
T* const param -> T* param // not relevant
const T* param -> const T* param // const needed
\endcode
*/
void
stripIrrelevantConstVolatile
(
QCString
&
s
)
{
int
i
,
j
;
i
=
s
.
find
(
"const "
);
if
(
i
!=-
1
)
{
// no & or * after the const
if
((
j
=
s
.
find
(
'*'
,
i
+
6
))
==-
1
&&
(
j
=
s
.
find
(
'&'
,
i
+
6
))
==-
1
)
{
s
=
s
.
left
(
i
)
+
s
.
right
(
s
.
length
()
-
i
-
6
);
}
}
i
=
s
.
find
(
"volatile "
);
if
(
i
!=-
1
)
{
// no & or * after the volatile
if
((
j
=
s
.
find
(
'*'
,
i
+
9
))
==-
1
&&
(
j
=
s
.
find
(
'&'
,
i
+
9
))
==-
1
)
{
s
=
s
.
left
(
i
)
+
s
.
right
(
s
.
length
()
-
i
-
9
);
}
}
}
//----------------------------------------------------------------------
// Matches the arguments list srcAl with the argument list dstAl
// Returns TRUE if the argument lists are equal. Two argument list are
...
...
@@ -1014,6 +1059,8 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
QCString
dstAType
=
trimTemplateSpecifiers
(
className
,
dstA
->
type
);
if
(
srcAType
.
left
(
6
)
==
"class "
)
srcAType
=
srcAType
.
right
(
srcAType
.
length
()
-
6
);
if
(
dstAType
.
left
(
6
)
==
"class "
)
dstAType
=
dstAType
.
right
(
dstAType
.
length
()
-
6
);
stripIrrelevantConstVolatile
(
srcAType
);
stripIrrelevantConstVolatile
(
dstAType
);
if
(
srcAType
!=
dstAType
)
// check if the argument only differs on name
{
...
...
@@ -1039,8 +1086,8 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
cd
=
getClass
(
className
);
if
(
cd
&&
cd
->
baseClasses
()
->
count
()
>
0
)
{
srcAType
=
trimBaseClassScope
(
cd
->
baseClasses
(),
srcAType
);
dstAType
=
trimBaseClassScope
(
cd
->
baseClasses
(),
dstAType
);
trimBaseClassScope
(
cd
->
baseClasses
(),
srcAType
);
trimBaseClassScope
(
cd
->
baseClasses
(),
dstAType
);
}
//printf("trimBaseClassScope: `%s' <=> `%s'\n",srcAType.data(),dstAType.data());
}
...
...
tmake/lib/aix-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for aix-g++
#
...
...
tmake/lib/aix-xlc/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for aix-xlc
#
...
...
tmake/lib/bsdi-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for bsdi-shlicc++, bsdi 4.0
#
...
...
tmake/lib/dgux-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for linux-g++
#
...
...
tmake/lib/freebsd-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for freebsd-g++
#
...
...
tmake/lib/gnu-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for linux-g++
#
...
...
tmake/lib/hpux-acc/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for hpux-acc
#
...
...
tmake/lib/hpux-cc/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for hpux-cc
#
...
...
tmake/lib/hpux-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for hpux-g++
#
...
...
tmake/lib/irix-64/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for irix-64
#
...
...
tmake/lib/irix-dcc/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for irix-dcc
#
...
...
tmake/lib/irix-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for irix-g++
#
...
...
tmake/lib/irix-n32/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for irix-n32
#
...
...
tmake/lib/irix-o32/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for irix-o32
#
...
...
tmake/lib/linux-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for linux-g++
#
...
...
tmake/lib/netbsd-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for netbsd-g++
#
...
...
tmake/lib/openbsd-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for netbsd-g++
#
...
...
tmake/lib/osf1-cxx/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for osf1-cxx (a.k.a. DEC Unix)
#
...
...
tmake/lib/osf1-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for osf1-g++ (a.k.a. DEC Unix)
#
...
...
tmake/lib/qnx-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for qnx-g++
#
...
...
tmake/lib/sco-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for sco-g++
#
...
...
tmake/lib/solaris-cc-gcc/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for solaris-cc-gcc
# (Using SunPro CC for C++ code and gcc for C code.)
...
...
tmake/lib/solaris-cc/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for solaris-cc
#
...
...
tmake/lib/solaris-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for solaris-g++
#
...
...
tmake/lib/sunos-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for sunos-g++
#
...
...
tmake/lib/ultrix-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for ultrix-g++
#
...
...
tmake/lib/unixware-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for sco-g++
#
...
...
tmake/lib/unixware7-cc/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for sco-g++
#
...
...
tmake/lib/unixware7-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for sco-g++
#
...
...
tmake/lib/win32-borland/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for Win32/Borland C++
#
...
...
tmake/lib/win32-g++/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for Win32/g++ (Cygnus gnu-win32)
#
...
...
tmake/lib/win32-msvc/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for Win32/Microsoft C++
#
...
...
tmake/lib/win32-symantec/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for Win32/Symantec C++
#
...
...
tmake/lib/win32-visage/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for Win32/IBM Visual Age
#
...
...
tmake/lib/win32-watcom/tmake.conf
View file @
4f577549
#
#
$Id$
#
#
# tmake configuration for Win32/Watcom C++
#
...
...
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