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
6b40e3de
Commit
6b40e3de
authored
Mar 04, 2001
by
dimitri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.2.5-20010304
parent
ef3faee6
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
101 additions
and
100 deletions
+101
-100
INSTALL
INSTALL
+2
-2
README
README
+2
-2
VERSION
VERSION
+1
-1
config.doc
doc/config.doc
+2
-2
preprocessing.doc
doc/preprocessing.doc
+3
-2
Makefile.in
examples/Makefile.in
+3
-3
Makefile.win.in
examples/Makefile.win.in
+0
-4
tag.cfg
examples/tag.cfg
+1
-1
doxygen.spec
packages/rpm/doxygen.spec
+1
-1
code.l
src/code.l
+1
-1
doc.l
src/doc.l
+3
-0
doxygen.cpp
src/doxygen.cpp
+40
-52
htmlgen.h
src/htmlgen.h
+1
-7
memberdef.cpp
src/memberdef.cpp
+11
-11
memberdef.h
src/memberdef.h
+1
-1
scanner.l
src/scanner.l
+15
-9
tagreader.cpp
src/tagreader.cpp
+14
-1
No files found.
INSTALL
View file @
6b40e3de
DOXYGEN Version 1.2.5-20010
226
DOXYGEN Version 1.2.5-20010
304
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (
26 February
2001)
Dimitri van Heesch (
04 March
2001)
README
View file @
6b40e3de
DOXYGEN Version 1.2.5-20010
226
DOXYGEN Version 1.2.5-20010
304
Please read INSTALL for compilation instructions.
...
...
@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
26 February
2001)
Dimitri van Heesch (
04 March
2001)
VERSION
View file @
6b40e3de
1.2.5-20010
226
1.2.5-20010
304
doc/config.doc
View file @
6b40e3de
...
...
@@ -94,7 +94,7 @@ followed by the descriptions of the tags grouped by category.
<
li
>
\
refitem
cfg_example_patterns
EXAMPLE_PATTERNS
<
li
>
\
refitem
cfg_exclude
EXCLUDE
<
li
>
\
refitem
cfg_exclude_patterns
EXCLUDE_PATTERNS
<
li
>
\
refitem
cfg_expand_as_defined
EXPAND_AS_
PRE
DEFINED
<
li
>
\
refitem
cfg_expand_as_defined
EXPAND_AS_DEFINED
<
li
>
\
refitem
cfg_expand_only_predef
EXPAND_ONLY_PREDEF
<
li
>
\
refitem
cfg_ext_doc_paths
EXT_DOC_PATHS
<
li
>
\
refitem
cfg_extra_packages
EXTRA_PACKAGES
...
...
@@ -1006,7 +1006,7 @@ EXTRA_PACKAGES = times
\
addindex
EXPAND_ONLY_PREDEF
If
the
\
c
EXPAND_ONLY_PREDEF
and
\
c
MACRO_EXPANSION
tags
are
both
set
to
YES
then
the
macro
expansion
is
limited
to
the
macros
specified
with
the
\
c
PREDEFINED
and
\
c
EXPAND_AS_
PRE
DEFINED
tags
.
\
c
PREDEFINED
and
\
c
EXPAND_AS_DEFINED
tags
.
\
anchor
cfg_search_includes
<
dt
>\
c
SEARCH_INCLUDES
<
dd
>
...
...
doc/preprocessing.doc
View file @
6b40e3de
...
...
@@ -66,9 +66,10 @@ allows you to expand only those defines that you explicitly
specify. For this you have to set the
\ref cfg_expand_only_predef "EXPAND_ONLY_PREDEF" tag to \c YES
and specify the macro definitions after
the \ref cfg_predefined "PREDEFINED" tag.
the \ref cfg_predefined "PREDEFINED" or
\ref cfg_expand_as_defined "EXPAND_AS_DEFINED" tag.
As an example, suppose you have the following obfusc
i
ated code fragment
As an example, suppose you have the following obfuscated code fragment
of an abstract base class called \c IUnknown:
\verbatim
...
...
examples/Makefile.in
View file @
6b40e3de
...
...
@@ -77,10 +77,10 @@ structcmd/html/index.html: structcmd.h structcmd.cfg
autolink/html/index.html
:
autolink.cpp autolink.cfg
$(DOXYGEN)
/bin/doxygen autolink.cfg
tag/html/index.html
:
tag.cpp tag.cfg
tag/html/index.html
:
tag.cpp tag.cfg
example/html/index.html
$(DOXYGEN)
/bin/doxygen tag.cfg
sed
-e
"1,1s#perl#
$(PERL)
#g"
tag/html/installdox
>
tag/html/installdox.perl
cd
tag/html
;
$(PERL)
installdox.perl
-lexample
.tag@../../example/html
#
sed -e "1,1s#perl#$(PERL)#g" tag/html/installdox >tag/html/installdox.perl
#
cd tag/html ; $(PERL) installdox.perl -lexample.tag@../../example/html
restypedef/html/index.html
:
restypedef.cpp restypedef.cfg
$(DOXYGEN)
/bin/doxygen restypedef.cfg
...
...
examples/Makefile.win.in
View file @
6b40e3de
...
...
@@ -81,10 +81,6 @@ autolink/html/index.html: autolink.cpp autolink.cfg
tag/html/index.html
:
tag.cpp tag.cfg
$(DOXYDIR)
\d
oxygen tag.cfg
cd
tag
\h
tml
echo
perl installdox
-lexample
.tag@../../example/html
>
runperl.bat
runperl.bat
cd
..
\.
.
restypedef/html/index.html
:
restypedef.cpp restypedef.cfg
$(DOXYDIR)
\d
oxygen restypedef.cfg
...
...
examples/tag.cfg
View file @
6b40e3de
...
...
@@ -5,7 +5,7 @@ GENERATE_MAN = NO
GENERATE_RTF = NO
CASE_SENSE_NAMES = NO
INPUT = tag.cpp
TAGFILES = example.tag
TAGFILES = example.tag
=../../example/html
PERL_PATH = perl
QUIET = YES
JAVADOC_AUTOBRIEF = YES
packages/rpm/doxygen.spec
View file @
6b40e3de
Name: doxygen
Version: 1.2.5-20010
226
Version: 1.2.5-20010
304
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
...
...
src/code.l
View file @
6b40e3de
...
...
@@ -1170,7 +1170,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
<Body>[0-9]+ {
g_code->codify(yytext);
}
<Body>[0-9]+[xX][0-9A-F]+ {
<Body>[0-9]+[xX][0-9A-F
a-f
]+ {
g_code->codify(yytext);
}
<MemberCall2,FuncCall>{KEYWORD}/([^a-z_A-Z0-9]) {
...
...
src/doc.l
View file @
6b40e3de
...
...
@@ -1786,6 +1786,9 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
}
<DocScan>("http:"|"https:"|"ftp:"|"file:"){URLMASK} { outDoc->writeHtmlLink(yytext,yytext); }
<DocScan>[a-zA-Z_0-9\.\-]+"@"[0-9a-z_A-Z\.\-]+ { outDoc->writeMailLink(yytext); }
<DocScan>{FILESCHAR}*{FILEECHAR}+/".\\n" { // special exception that is otherwise matches by FILEMASK
generateRef(*outDoc,className,yytext,inSeeBlock);
}
<DocScan>{FILEMASK} {
generateFileRef(*outDoc,yytext);
}
...
...
src/doxygen.cpp
View file @
6b40e3de
...
...
@@ -424,8 +424,8 @@ static void buildGroupList(Entry *root)
static
void
buildFileList
(
Entry
*
root
)
{
if
(((
root
->
section
==
Entry
::
FILEDOC_SEC
)
||
((
root
->
section
&
Entry
::
FILE_MASK
)
&&
Config
::
extractAllFlag
))
&&
!
root
->
name
.
isEmpty
()
((
root
->
section
&
Entry
::
FILE_MASK
)
&&
Config
::
extractAllFlag
))
&&
!
root
->
name
.
isEmpty
()
&&
!
root
->
tagInfo
// skip any file coming from tag files
)
{
bool
ambig
;
...
...
@@ -436,10 +436,10 @@ static void buildFileList(Entry *root)
(
!
root
->
brief
.
isEmpty
()
&&
!
fd
->
briefDescription
().
isEmpty
()))
{
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: file %s already documented. "
"Skipping documentation."
,
root
->
name
.
data
()
root
->
fileName
,
root
->
startLine
,
"Warning: file %s already documented. "
"Skipping documentation."
,
root
->
name
.
data
()
);
}
else
...
...
@@ -469,15 +469,15 @@ static void buildFileList(Entry *root)
const
char
*
fn
=
root
->
fileName
.
data
();
QCString
text
;
text
.
sprintf
(
"Warning: the name `%s' supplied as "
"the second argument in the
\\
file statement "
,
root
->
name
.
data
()
"the second argument in the
\\
file statement "
,
root
->
name
.
data
()
);
if
(
ambig
)
// name is ambigious
{
text
+=
"matches the following input files:
\n
"
;
text
+=
showFileDefMatches
(
Doxygen
::
inputNameDict
,
root
->
name
);
text
+=
"Please use a more specific name by "
"including a (larger) part of the path!"
;
"including a (larger) part of the path!"
;
}
else
// name is not an input file
{
...
...
@@ -811,7 +811,7 @@ static void buildNamespaceList(Entry *root)
//printf("Found namespace %s in %s at line %d\n",root->name.data(),
// root->fileName.data(), root->startLine);
NamespaceDef
*
nd
;
if
((
nd
=
Doxygen
::
namespaceDict
[
fullName
]))
if
((
nd
=
Doxygen
::
namespaceDict
[
fullName
]))
// existing namespace
{
if
(
!
root
->
doc
.
isEmpty
()
||
!
root
->
brief
.
isEmpty
())
// block contains docs
{
...
...
@@ -852,11 +852,7 @@ static void buildNamespaceList(Entry *root)
addNamespaceToGroups
(
root
,
nd
);
nd
->
setRefItems
(
root
->
todoId
,
root
->
testId
,
root
->
bugId
);
}
else
/* if (!root->doc.isEmpty() ||
!root->brief.isEmpty() ||
Config::extractAllFlag
)
*/
else
// fresh namespace
{
QCString
tagName
;
if
(
root
->
tagInfo
)
...
...
@@ -1390,16 +1386,17 @@ static MemberDef *addVariableToFile(
* \returns -1 if this is not a function pointer variable or
* the index at which the brace of (...*name) was found.
*/
static
int
findFunctionPtr
(
const
QCString
&
type
)
static
int
findFunctionPtr
(
const
QCString
&
type
,
int
*
pLength
=
0
)
{
static
const
QRegExp
re
(
"([^)]*
)
"
);
int
i
=-
1
;
static
const
QRegExp
re
(
"([^)]*"
);
int
i
=-
1
,
l
;
if
(
!
type
.
isEmpty
()
&&
// return type is non-empty
(
i
=
type
.
find
(
re
,
0
))
!=-
1
&&
// contains a (*
(
i
=
re
.
match
(
type
,
0
,
&
l
))
!=-
1
&&
// contains a (*
type
.
find
(
"operator"
)
==-
1
&&
// not an operator
type
.
find
(
")("
)
==-
1
// not a function pointer return type
)
{
if
(
pLength
)
*
pLength
=
l
;
return
i
;
}
else
...
...
@@ -1414,18 +1411,13 @@ static int findFunctionPtr(const QCString &type)
void
buildVarList
(
Entry
*
root
)
{
int
i
=-
1
;
if
(
!
root
->
name
.
isEmpty
()
&&
(
root
->
type
.
isEmpty
()
||
compoundKeywordDict
.
find
(
root
->
type
)
==
0
)
&&
(
(
root
->
section
==
Entry
::
VARIABLE_SEC
// it's a variable
)
||
(
root
->
section
==
Entry
::
FUNCTION_SEC
&&
// or maybe a function pointer variable
(
i
=
findFunctionPtr
(
root
->
type
))
!=-
1
//!root->type.isEmpty() && // return type is non-empty
// root->type.find(re,0)!=-1 && // contains a (*
// /root->type.find("operator")==-1 && // not an operator
// root->type.find(")(")==-1 // not a function pointer return type
findFunctionPtr
(
root
->
type
)
!=-
1
)
)
)
// documented variable
...
...
@@ -1444,11 +1436,14 @@ void buildVarList(Entry *root)
if
(
root
->
type
.
isEmpty
()
&&
root
->
name
.
find
(
"operator"
)
==-
1
&&
(
root
->
name
.
find
(
'*'
)
!=-
1
||
root
->
name
.
find
(
'&'
)
!=-
1
))
{
// recover from parse error caused by redundant braces
// recover from parse error caused by redundant braces
// like in "int *(var[10]);", which is parsed as
// type="" name="int *" args="(var[10])"
root
->
type
=
root
->
name
;
static
const
QRegExp
reName
(
"[a-z_A-Z][a-z_A-Z0-9]*"
);
int
l
;
i
=
root
->
args
.
isEmpty
()
?
-
1
:
reName
.
match
(
root
->
args
,
0
,
&
l
);
i
nt
i
=
root
->
args
.
isEmpty
()
?
-
1
:
reName
.
match
(
root
->
args
,
0
,
&
l
);
root
->
name
=
root
->
args
.
mid
(
i
,
l
);
root
->
args
=
root
->
args
.
mid
(
i
+
l
,
root
->
args
.
find
(
')'
,
i
+
l
)
-
i
-
l
);
//printf("new: type=`%s' name=`%s' args=`%s'\n",
...
...
@@ -1456,6 +1451,7 @@ void buildVarList(Entry *root)
}
else
{
int
i
=
findFunctionPtr
(
root
->
type
);
if
(
i
!=-
1
)
// function pointer
{
int
ai
=
root
->
type
.
find
(
'['
,
i
);
...
...
@@ -1464,7 +1460,7 @@ void buildVarList(Entry *root)
root
->
args
.
prepend
(
root
->
type
.
right
(
root
->
type
.
length
()
-
ai
));
root
->
type
=
root
->
type
.
left
(
ai
);
}
else
else
if
(
root
->
type
.
find
(
')'
,
i
)
!=-
1
)
// function ptr, not variable like "int (*bla)[10]"
{
root
->
type
=
root
->
type
.
left
(
root
->
type
.
length
()
-
1
);
root
->
args
.
prepend
(
")"
);
...
...
@@ -1473,12 +1469,6 @@ void buildVarList(Entry *root)
}
QCString
scope
,
name
=
root
->
name
.
copy
();
//int si;
//if ((si=name.findRev("::"))!=-1)
//{
// scope=name.left(si);
// name=name.right(name.length()-si-2);
//}
// find the scope of this variable
Entry
*
p
=
root
->
parent
;
...
...
@@ -3781,31 +3771,26 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
static
void
findMemberDocumentation
(
Entry
*
root
)
{
int
i
=-
1
,
l
;
//QRegExp re("([a-z_A-Z0-9: ]*\\*+[ \\*]*");
Debug
::
print
(
Debug
::
FindMembers
,
0
,
"root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->memSpec=%d root->mGrpId=%d
\n
"
,
root
->
type
.
data
(),
root
->
inside
.
data
(),
root
->
name
.
data
(),
root
->
args
.
data
(),
root
->
section
,
root
->
memSpec
,
root
->
mGrpId
);
bool
isFunc
=
TRUE
;
if
(
findFunctionPtr
(
root
->
type
)
!=-
1
// func variable/typedef to func ptr
//!root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1
if
(
// detect func variable/typedef to func ptr
(
i
=
findFunctionPtr
(
root
->
type
,
&
l
))
!=-
1
)
{
// fix type and argument
root
->
args
+=
root
->
type
.
right
(
root
->
type
.
length
()
-
i
-
l
);
root
->
type
=
root
->
type
.
left
(
i
+
l
);
isFunc
=
FALSE
;
}
//else if (root->name.find(re)!=-1 && root->name.find("operator")==-1)
// // func ptr entered with \fn, \var or \typedef
//{
// isFunc=FALSE;
//}
else
if
((
root
->
type
.
isEmpty
()
&&
root
->
name
.
left
(
8
)
==
"typedef "
)
||
root
->
args
.
find
(
'('
)
==-
1
)
else
if
((
root
->
type
.
left
(
8
)
==
"typedef "
&&
root
->
args
.
find
(
'('
)
!=-
1
))
// detect function types marked as functions
{
isFunc
=
FALSE
;
}
//printf("Member %s isFunc=%d\n",root->name.data(),isFunc);
if
(
root
->
section
==
Entry
::
MEMBERDOC_SEC
)
{
...
...
@@ -3820,15 +3805,18 @@ static void findMemberDocumentation(Entry *root)
findMember
(
root
,
root
->
name
,
root
->
relates
,
TRUE
,
isFunc
);
}
else
if
((
root
->
section
==
Entry
::
FUNCTION_SEC
// function
((
root
->
section
==
Entry
::
FUNCTION_SEC
// function
||
(
root
->
section
==
Entry
::
VARIABLE_SEC
&&
// variable
!
root
->
type
.
isEmpty
()
&&
/*root->type.left(8)!="typedef " &&*/
compoundKeywordDict
.
find
(
root
->
type
)
==
0
(
root
->
section
==
Entry
::
VARIABLE_SEC
&&
// variable
!
root
->
type
.
isEmpty
()
&&
// with a type
compoundKeywordDict
.
find
(
root
->
type
)
==
0
// that is not a keyword
// (to skip forward declaration of class etc.)
)
)
&&
!
root
->
stat
&&
(
!
root
->
doc
.
isEmpty
()
||
!
root
->
brief
.
isEmpty
()
||
/*root->bodyLine!=-1 ||*/
(
root
->
memSpec
&
Entry
::
Inline
)
||
root
->
mGrpId
!=-
1
)
&&
!
root
->
stat
&&
// not static
(
!
root
->
doc
.
isEmpty
()
||
// has detailed docs
!
root
->
brief
.
isEmpty
()
||
// has brief docs
(
root
->
memSpec
&
Entry
::
Inline
)
||
// is inline
root
->
mGrpId
!=-
1
// is part of a group
)
)
{
...
...
src/htmlgen.h
View file @
6b40e3de
...
...
@@ -115,13 +115,7 @@ class HtmlGenerator : public OutputGenerator
void
writeAnchor
(
const
char
*
,
const
char
*
name
)
{
t
<<
"<a name=
\"
"
<<
name
<<
"
\"
></a>"
;
}
void
startCodeFragment
()
{
t
<<
"<div class=
\"
fragment
\"
><pre>"
;
}
void
endCodeFragment
()
{
t
<<
"</div></pre>"
;
}
// <- I know this is
// ordered the wrong
// way, but it is
// the only way I know
// to prevent an extra
// blank line
// (with netscape)
void
endCodeFragment
()
{
t
<<
"</pre></div>"
;
}
void
startPreFragment
()
{
t
<<
"<pre>"
;
}
void
endPreFragment
()
{
t
<<
"</pre>"
;
}
void
startCodeLine
()
{
col
=
0
;
}
...
...
src/memberdef.cpp
View file @
6b40e3de
...
...
@@ -1475,17 +1475,17 @@ QCString MemberDef::getScopeString() const
}
Definition
*
MemberDef
::
getCompoundDef
()
const
{
NamespaceDef
*
nd
=
getNamespaceDef
();
ClassDef
*
cd
=
getClassDef
();
FileDef
*
fd
=
getFileDef
();
GroupDef
*
gd
=
getGroupDef
();
Definition
*
d
=
0
;
if
(
cd
)
d
=
cd
;
else
if
(
nd
)
d
=
nd
;
else
if
(
gd
)
d
=
gd
;
else
d
=
fd
;
ASSERT
(
d
!=
0
);
return
d
;
}
//
Definition *MemberDef::getCompoundDef() const
//
{
//
NamespaceDef *nd=getNamespaceDef();
//
ClassDef *cd=getClassDef();
//
FileDef *fd=getFileDef();
//
GroupDef *gd=getGroupDef();
//
Definition *d = 0;
//
if (cd) d=cd; else if (nd) d=nd; else if (gd) d=gd; else d=fd;
//
ASSERT(d!=0);
//
return d;
//
}
QCString
MemberDef
::
anchor
()
const
{
...
...
src/memberdef.h
View file @
6b40e3de
...
...
@@ -88,7 +88,7 @@ class MemberDef : public Definition
GroupDef
*
getGroupDef
()
const
{
return
group
;
}
FileDef
*
getFileDef
()
const
{
return
fileDef
;
}
NamespaceDef
*
getNamespaceDef
()
const
{
return
nspace
;
}
Definition
*
getCompoundDef
()
const
;
//
Definition *getCompoundDef() const;
// direct kind info
Protection
protection
()
const
{
return
prot
;
}
...
...
src/scanner.l
View file @
6b40e3de
...
...
@@ -1136,7 +1136,9 @@ TITLE [tT][iI][tT][lL][eE]
}
<DefineEnd>.
<FindMembers>[*&]+ { current->name += yytext ; }
<FindMembers>[*&]+ { current->name += yytext ;
addType( current );
}
<FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount();
if (current->bodyLine==-1)
...
...
@@ -1677,7 +1679,7 @@ TITLE [tT][iI][tT][lL][eE]
}
<ReadBody>. { current->program += yytext ; }
<FindMembers>
"("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*
)+ {
<FindMembers>
("("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+
)+ {
current->bodyLine = yyLineNr;
lineCount();
addType(current);
...
...
@@ -1769,13 +1771,17 @@ TITLE [tT][iI][tT][lL][eE]
<FuncFuncType>. {
current->type += *yytext;
}
<FindMembers>"(" { current->args = yytext;
current->bodyLine = yyLineNr;
currentArgumentContext = FuncQual;
fullArgString=current->args.copy();
copyArgString=¤t->args;
BEGIN( ReadFuncArgType ) ;
//printf(">>> Read function arguments!\n");
<FindMembers>"(" {
if (!current->name.isEmpty())
{
current->args = yytext;
current->bodyLine = yyLineNr;
currentArgumentContext = FuncQual;
fullArgString=current->args.copy();
copyArgString=¤t->args;
BEGIN( ReadFuncArgType ) ;
//printf(">>> Read function arguments!\n");
}
}
/*
<FindMembers>"("{BN}*("void"{BN}*)?")" {
...
...
src/tagreader.cpp
View file @
6b40e3de
...
...
@@ -857,6 +857,19 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members)
}
}
static
QString
stripPath
(
const
QString
&
s
)
{
int
i
=
s
.
findRev
(
'/'
);
if
(
i
!=-
1
)
{
return
s
.
right
(
s
.
length
()
-
i
-
1
);
}
else
{
return
s
;
}
}
void
TagFileParser
::
buildLists
(
Entry
*
root
)
{
// build class list
...
...
@@ -902,7 +915,7 @@ void TagFileParser::buildLists(Entry *root)
ti
->
fileName
=
tfi
->
filename
;
fe
->
tagInfo
=
ti
;
QString
fullName
=
m_tagName
+
":"
+
tfi
->
path
+
tfi
->
name
;
QString
fullName
=
m_tagName
+
":"
+
tfi
->
path
+
stripPath
(
tfi
->
name
)
;
fe
->
fileName
=
fullName
;
FileDef
*
fd
=
new
FileDef
(
m_tagName
+
":"
+
tfi
->
path
,
tfi
->
name
,
m_tagName
);
FileName
*
mn
;
...
...
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