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
74cc4d70
Commit
74cc4d70
authored
Dec 15, 1999
by
mueller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mods for doxygen-0.49-991117
parent
5576fbf6
Changes
33
Show whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
7878 additions
and
7662 deletions
+7878
-7662
INSTALL
INSTALL
+4
-4
Makefile.in
Makefile.in
+3
-1
README
README
+2
-2
VERSION
VERSION
+1
-1
commands.doc
doc/commands.doc
+2
-5
config.doc
doc/config.doc
+6
-9
faq.doc
doc/faq.doc
+19
-0
history.doc
doc/history.doc
+0
-16
index.doc
doc/index.doc
+1
-0
language.doc
doc/language.doc
+0
-14
todo.doc
doc/todo.doc
+36
-0
code.cpp
src/code.cpp
+214
-163
code.l
src/code.l
+136
-85
config.cpp
src/config.cpp
+1
-11
config.l
src/config.l
+1
-11
debug.cpp
src/debug.cpp
+7
-0
debug.h
src/debug.h
+6
-4
doxygen.cpp
src/doxygen.cpp
+168
-176
filename.cpp
src/filename.cpp
+8
-4
groupdef.cpp
src/groupdef.cpp
+1
-0
htmlgen.cpp
src/htmlgen.cpp
+10
-7
index.cpp
src/index.cpp
+23
-20
memberdef.cpp
src/memberdef.cpp
+1
-1
namespacedef.cpp
src/namespacedef.cpp
+1
-1
pre.cpp
src/pre.cpp
+140
-136
pre.l
src/pre.l
+19
-15
scanner.cpp
src/scanner.cpp
+6957
-6930
scanner.l
src/scanner.l
+9
-8
tag.cpp
src/tag.cpp
+5
-1
tag.l
src/tag.l
+5
-1
translator_nl.h
src/translator_nl.h
+44
-27
translator_se.h
src/translator_se.h
+36
-1
util.cpp
src/util.cpp
+12
-8
No files found.
INSTALL
View file @
74cc4d70
DOXYGEN Version 0.49-9911
06
DOXYGEN Version 0.49-9911
17
CONTENTS
--------
...
...
@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-0.49-9911
06
.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-9911
06
.src.tar # unpack it
gunzip doxygen-0.49-9911
17
.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-9911
17
.src.tar # unpack it
2. Run the configure script:
...
...
@@ -234,4 +234,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
06
November 1999)
Dimitri van Heesch (
17
November 1999)
Makefile.in
View file @
74cc4d70
...
...
@@ -21,7 +21,9 @@ install:
$(INSTTOOL)
-d
$(INSTALL)
/bin
$(INSTTOOL)
-d
$(INSTALL)
/doc/doxygen
$(INSTTOOL)
-d
$(INSTALL)
/doc/doxygen
$(INSTTOOL)
-m
755 bin/doxy
*
$(INSTALL)
/bin
$(INSTTOOL)
-m
755 bin/doxygen
$(INSTALL)
/bin
$(INSTTOOL)
-m
755 bin/doxytag
$(INSTALL)
/bin
$(INSTTOOL)
-m
755 bin/doxysearch
$(INSTALL)
/bin
cp
-r
doc
$(INSTALL)
/doc/doxygen
cp
-r
examples
$(INSTALL)
/doc/doxygen
echo
"DOXYGEN =
$(INSTALL)
"
>
$(INSTALL)
/doc/doxygen/doc/Makefile
...
...
README
View file @
74cc4d70
DOXYGEN Version 0.49-9911
06
DOXYGEN Version 0.49-9911
17
Please read INSTALL for compilation instructions.
...
...
@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
06
November 1999)
Dimitri van Heesch (
17
November 1999)
VERSION
View file @
74cc4d70
0.49-9911
06
0.49-9911
17
doc/commands.doc
View file @
74cc4d70
...
...
@@ -1057,10 +1057,8 @@ Doxygen. Unrecognized commands are treated as normal text.
The second argument specifies the file name of the image.
Doxygen will look for files in the paths (or files) that you specified
after the \ref cfg_image_path "IMAGE_PATH" tag and filter those files through the patterns
you specified after the \ref cfg_image_patterns "IMAGE_PATTERNS" tag.
If the image is found it
will be copied to the correct output directory.
after the \ref cfg_image_path "IMAGE_PATH" tag.
If the image is found it will be copied to the correct output directory.
If the image name contains spaces you'll have to put quotes (") around it.
The third argument can be used to specify the width or height of the
...
...
@@ -1083,7 +1081,6 @@ Doxygen. Unrecognized commands are treated as normal text.
\verbatim
IMAGE_PATH = my_image_dir
IMAGE_PATTERNS = *.eps *.gif *.jpg
\endverbatim
\warning The image format for HTML is limited to what your
...
...
doc/config.doc
View file @
74cc4d70
...
...
@@ -88,7 +88,6 @@ followed by the descriptions of the tags grouped by category.
<
li
>
\
refitem
cfg_html_output
HTML_OUTPUT
<
li
>
\
refitem
cfg_html_stylesheet
HTML_STYLESHEET
<
li
>
\
refitem
cfg_image_path
IMAGE_PATH
<
li
>
\
refitem
cfg_image_patterns
IMAGE_PATTERNS
<
li
>
\
refitem
cfg_include_path
INCLUDE_PATH
<
li
>
\
refitem
cfg_inherit_docs
INHERIT_DOCS
<
li
>
\
refitem
cfg_inline_info
INLINE_INFO
...
...
@@ -115,6 +114,7 @@ followed by the descriptions of the tags grouped by category.
<
li
>
\
refitem
cfg_searchengine
SEARCHENGINE
<
li
>
\
refitem
cfg_source_browser
SOURCE_BROWSER
<
li
>
\
refitem
cfg_strip_from_path
STRIP_FROM_PATH
<
li
>
\
refitem
cfg_tab_size
TAB_SIZE
<
li
>
\
refitem
cfg_tagfiles
TAGFILES
<
li
>
\
refitem
cfg_verbatim_headers
VERBATIM_HEADERS
<
li
>
\
refitem
cfg_warnings
WARNINGS
...
...
@@ -314,6 +314,11 @@ followed by the descriptions of the tags grouped by category.
If
the
\
c
INLINE_INFO
tag
is
set
to
\
c
YES
(
the
default
)
then
a
tag
[
inline
]
is
inserted
in
the
documentation
for
inline
members
.
\
anchor
cfg_tab_size
<
dt
>\
c
TAB_SIZE
<
dd
>
the
TAB_SIZE
tag
can
be
used
to
set
the
number
of
spaces
in
a
tab
.
Doxygen
uses
this
value
to
replace
tabs
by
spaces
in
code
fragments
.
</
dl
>
\
subsection
config_input
Input
related
options
...
...
@@ -382,14 +387,6 @@ followed by the descriptions of the tags grouped by category.
directories
that
contain
images
that
are
to
be
included
in
the
documentation
(
see
the
\
ref
cmdimage
"\image"
command
).
\
anchor
cfg_image_patterns
<
dt
>\
c
IMAGE_PATTERNS
<
dd
>
\
addindex
IMAGE_PATTERNS
If
the
value
of
the
\
c
IMAGE_PATH
tag
contains
directories
,
you
can
use
the
\
c
IMAGE_PATTERNS
tag
to
specify
one
or
more
wildcard
pattern
(
like
*.
gif
and
*.
eps
)
to
filter
out
the
image
files
in
the
directories
.
If
left
blank
all
files
are
included
.
\
anchor
cfg_input_filter
<
dt
>\
c
INPUT_FILTER
<
dd
>
\
addindex
INPUT_FILTER
...
...
doc/faq.doc
View file @
74cc4d70
...
...
@@ -56,6 +56,25 @@ as <code>PREPROCESSING = YES</code>.
Look at section \ref preprocessing for the answer.
<li><b>How can I change what's after the <code>#include</code> in class documentation?</b>
You can document your class like
\verbatim
/*! \class MyClassName include.h path/include.h
*
* Docs for MyClassName
*/
\endverbatim
To make doxygen put <br><br>
<code>
#include <path/include.h>
</code>
in the documentation of the class MyClassName regardless of the name of the actual
header file in which the definition of MyClassName is contained.
</ol>
*/
doc/history.doc
View file @
74cc4d70
...
...
@@ -14,24 +14,8 @@
*
*/
/*! \page history Doxygen History
<h3>TODO/Wish list</h3>
<ul>
<li>Add support for grouping members, and document then as a group.
<li>Support for K&R-style function arguments.
<li>More ouput formats: suggested are info format and RTF format.
<li>Split long lists in an index to a set of smaller lists.
<li>Add a nice graphical front-end for creating and modifying the
configuration file (it should be flexible enough to quickly add new options).
<li>Improve the search index generation, so it uses less memory and
is easier to get running.
<li>Generate code metrics (Anyone know a good book about code metrics?)
<li>Add features that you think are missing... So if you know any that are
not yet listed here, please let me know.
</ul>
<h3>Features scheduled for version 1.0</h3>
<ul>
<li>Include LaTeX style formulas in LaTeX and HTML output (in HTML as a gif).
...
...
doc/index.doc
View file @
74cc4d70
...
...
@@ -184,6 +184,7 @@ Patrick Alberts,
Jacques Tremblay,
John Sturton,
Moshe Kruger,
David Wong,
and many others for suggestions, patches and bug reports.
</ul>
*/
...
...
doc/language.doc
View file @
74cc4d70
...
...
@@ -100,18 +100,6 @@ Here is a list of the languages and their current maintainers:
borco@NOSPAM.borco-ei.eng.hokudai.ac.jp</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Polish
</TD>
<TD>
Piotr Piatkowski
</TD>
<TD>
<a href="mailto:kompas@NOSPAM.ceti.com.pl">
kompas@NOSPAM.ceti.com.pl</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Italian
...
...
@@ -209,8 +197,6 @@ Here is a list of the languages and their current maintainers:
\hline
Romanian & Ionutz Borcoman & {\tt borco@borco-ei.eng.hokudai.ac.jp} \\
\hline
Polish & Piotr Piatkowski & {\tt kompas@ceti.com.pl} \\
\hline
Italian & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} \\
& Alessandro Falappa & {\tt a.falappa@flashnet.it} \\
\hline
...
...
doc/todo.doc
0 → 100644
View file @
74cc4d70
/******************************************************************************
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* All output generated with Doxygen is not covered by this license.
*
*/
/*! \page todo Doxygen TODO's
<h3>TODO/Wish list</h3>
<ul>
<li>Expand namespaces in the file docs with the contents that are
specific to the file (maybe also expand the classes inside a namespace).
<li>Add support for grouping members, and document then as a group.
<li>Support for K&R-style function arguments.
<li>More output formats: suggested are info format and RTF format.
<li>Split long lists in an index to a set of smaller lists.
<li>Add a nice graphical front-end for creating and modifying the
configuration file (it should be flexible enough to quickly add new options).
<li>Improve the search index generation, so it uses less memory and
is easier to get running.
<li>Generate code metrics (Anyone know a good book about code metrics?)
<li>Add features that you think are missing... So if you know any that are
not yet listed here, please let me know.
</ul>
*/
src/code.cpp
View file @
74cc4d70
...
...
@@ -1201,6 +1201,97 @@ static int anchorCount;
static
FileDef
*
sourceFileDef
;
static
QCString
lastVariable
;
// start a new line of code, inserting a line number if sourceFileDef
// is TRUE. If a definition starts at the current line, then the line
// number is linked to the documentation of that definition.
static
void
startCodeLine
(
OutputList
&
ol
)
{
if
(
sourceFileDef
)
{
QCString
lineNumber
,
lineAnchor
;
lineNumber
.
sprintf
(
"%05d "
,
yyLineNr
);
lineAnchor
.
sprintf
(
"l%05d"
,
yyLineNr
);
Definition
*
d
=
sourceFileDef
->
getSourceDefinition
(
yyLineNr
);
QCString
anchor
=
sourceFileDef
->
getSourceAnchor
(
yyLineNr
);
if
(
d
&&
d
->
isLinkableInProject
())
{
ol
.
startCodeAnchor
(
lineAnchor
);
ol
.
writeCodeLink
(
d
->
getReference
(),
d
->
getOutputFileBase
(),
anchor
,
lineNumber
);
ol
.
endCodeAnchor
();
}
else
{
ol
.
codify
(
lineNumber
);
}
}
ol
.
startCodeLine
();
}
// write a code fragment `text' that may span multiple lines, inserting
// line numbers for each line.
static
void
codifyLines
(
char
*
text
)
{
char
*
p
=
text
,
*
sp
=
p
;
char
c
;
bool
done
=
FALSE
;
while
(
!
done
)
{
sp
=
p
;
while
((
c
=*
p
++
)
&&
c
!=
'\n'
);
if
(
c
==
'\n'
)
{
yyLineNr
++
;
*
(
p
-
1
)
=
'\0'
;
code
->
codify
(
sp
);
code
->
endCodeLine
();
if
(
yyLineNr
<
inputLines
)
{
startCodeLine
(
*
code
);
}
}
else
{
code
->
codify
(
sp
);
done
=
TRUE
;
}
}
}
// writes a link to a fragment `text' that may span multiple lines, inserting
// line numbers for each line. If `text' contains newlines, the link will be
// split into multiple links with the same destination, one for each line.
static
void
writeMultiLineCodeLink
(
OutputList
&
ol
,
const
char
*
ref
,
const
char
*
file
,
const
char
*
anchor
,
const
char
*
text
)
{
bool
done
=
FALSE
;
QCString
ts
=
text
;
char
*
p
=
ts
.
data
();
while
(
!
done
)
{
char
*
sp
=
p
;
char
c
;
while
((
c
=*
p
++
)
&&
c
!=
'\n'
);
if
(
c
==
'\n'
)
{
yyLineNr
++
;
*
(
p
-
1
)
=
'\0'
;
ol
.
writeCodeLink
(
ref
,
file
,
anchor
,
sp
);
ol
.
endCodeLine
();
if
(
yyLineNr
<
inputLines
)
{
startCodeLine
(
ol
);
}
}
else
{
ol
.
writeCodeLink
(
ref
,
file
,
anchor
,
sp
);
done
=
TRUE
;
}
}
}
static
void
addType
()
{
if
(
name
==
"const"
)
{
name
.
resize
(
0
);
return
;
}
...
...
@@ -1258,7 +1349,7 @@ static void addParameter()
}
}
static
void
generateClassLink
(
OutputList
&
ol
,
c
onst
c
har
*
clName
)
static
void
generateClassLink
(
OutputList
&
ol
,
char
*
clName
)
{
QCString
className
=
clName
;
if
(
className
.
length
()
==
0
)
return
;
...
...
@@ -1280,11 +1371,12 @@ static void generateClassLink(OutputList &ol,const char *clName)
anchorCount
++
;
}
}
ol
.
writeCodeLink
(
cd
->
getReference
(),
cd
->
getOutputFileBase
(),
0
,
className
);
//ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className);
writeMultiLineCodeLink
(
ol
,
cd
->
getReference
(),
cd
->
getOutputFileBase
(),
0
,
className
);
}
else
{
ol
.
codify
(
clName
);
codifyLines
(
clName
);
}
}
...
...
@@ -1323,7 +1415,9 @@ static bool getLink(const char *className,
if
(
d
)
{
//printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data());
result
.
writeCodeLink
(
d
->
getReference
(),
d
->
getOutputFileBase
(),
//result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
// md->anchor(),text ? text : memberName);
writeMultiLineCodeLink
(
result
,
d
->
getReference
(),
d
->
getOutputFileBase
(),
md
->
anchor
(),
text
?
text
:
memberName
);
return
TRUE
;
}
...
...
@@ -1346,7 +1440,7 @@ static ClassDef *stripClassName(const char *s)
}
static
void
generateMemberLink
(
OutputList
&
ol
,
const
char
*
varName
,
c
onst
c
har
*
memName
)
char
*
memName
)
{
//printf("generateMemberLink(object=%s,mem=%s) classScope=%s\n",
// varName,memName,classScope.data());
...
...
@@ -1393,7 +1487,7 @@ static void generateMemberLink(OutputList &ol,const char *varName,
}
else
{
ol
.
codify
(
memName
);
codifyLines
(
memName
);
}
return
;
}
...
...
@@ -1426,8 +1520,10 @@ static void generateMemberLink(OutputList &ol,const char *varName,
{
if
(
mmd
->
memberClass
()
==
mcd
)
{
ol
.
writeCodeLink
(
mcd
->
getReference
(),
mcd
->
getOutputFileBase
(),
mmd
->
anchor
(),
memName
);
//ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(),
// mmd->anchor(),memName);
writeMultiLineCodeLink
(
ol
,
mcd
->
getReference
(),
mcd
->
getOutputFileBase
(),
mmd
->
anchor
(),
memName
);
return
;
}
}
...
...
@@ -1438,16 +1534,31 @@ static void generateMemberLink(OutputList &ol,const char *varName,
}
}
}
ol
.
codify
(
memName
);
codifyLines
(
memName
);
return
;
}
static
void
generateFunctionLink
(
OutputList
&
ol
,
const
char
*
funcName
)
static
QCString
removeWhiteSpace
(
const
char
*
s
)
{
QCString
result
;
if
(
s
)
{
const
char
*
p
=
s
;
int
c
;
while
((
c
=*
p
++
))
{
if
(
c
!=
' '
&&
c
!=
'\n'
&&
c
!=
'\r'
&&
c
!=
'\t'
)
result
+=
c
;
}
}
return
result
;
}
static
void
generateFunctionLink
(
OutputList
&
ol
,
char
*
funcName
)
{
OutputList
result
(
&
ol
);
CodeClassDef
*
ccd
=
0
;
QCString
locScope
=
classScope
.
copy
();
QCString
locFunc
=
funcName
;
QCString
locFunc
=
removeWhiteSpace
(
funcName
)
;
int
i
=
locFunc
.
findRev
(
"::"
);
if
(
i
>
0
)
{
...
...
@@ -1475,7 +1586,7 @@ static void generateFunctionLink(OutputList &ol,const char *funcName)
}
else
{
ol
.
codify
(
funcName
);
codifyLines
(
funcName
);
}
return
;
}
...
...
@@ -1490,66 +1601,6 @@ static int countLines()
return
count
;
}
static
void
startCodeLine
()
{
if
(
sourceFileDef
)
{
QCString
lineNumber
,
lineAnchor
;
lineNumber
.
sprintf
(
"%05d "
,
yyLineNr
);
lineAnchor
.
sprintf
(
"l%05d"
,
yyLineNr
);
//MemberDef *md = sourceFileDef->getSourceDefinition(yyLineNr);
//Definition *d=0;
//if (md)
//{
// d=md->memberClass();
// if (!d) d=md->getFileDef();
//}
//if (md && d)
Definition
*
d
=
sourceFileDef
->
getSourceDefinition
(
yyLineNr
);
QCString
anchor
=
sourceFileDef
->
getSourceAnchor
(
yyLineNr
);
if
(
d
&&
d
->
isLinkableInProject
())
{
code
->
startCodeAnchor
(
lineAnchor
);
code
->
writeCodeLink
(
d
->
getReference
(),
d
->
getOutputFileBase
(),
anchor
,
lineNumber
);
code
->
endCodeAnchor
();
}
else
{
code
->
codify
(
lineNumber
);
}
}
code
->
startCodeLine
();
}
static
void
codifyLines
(
char
*
text
)
{
char
*
p
=
text
,
*
sp
=
p
;
char
c
;
bool
done
=
FALSE
;
while
(
!
done
)
{
sp
=
p
;
while
((
c
=*
p
++
)
&&
c
!=
'\n'
);
if
(
c
==
'\n'
)
{
yyLineNr
++
;
*
(
p
-
1
)
=
'\0'
;
code
->
codify
(
sp
);
code
->
endCodeLine
();
if
(
yyLineNr
<
inputLines
)
{
startCodeLine
();
}
}
else
{
code
->
codify
(
sp
);
done
=
TRUE
;
}
}
}
/* -----------------------------------------------------------------
*/
#undef YY_INPUT
...
...
@@ -1749,7 +1800,7 @@ YY_DECL
register
char
*
yy_cp
,
*
yy_bp
;
register
int
yy_act
;
#line 5
02
"code.l"
#line 5
53
"code.l"
...
...
@@ -1858,12 +1909,12 @@ do_action: /* This label is used only to access EOF actions. */
{
/* beginning of action switch */
case
1
:
YY_RULE_SETUP
#line 5
04
"code.l"
#line 5
55
"code.l"
YY_BREAK
case
2
:
YY_RULE_SETUP
#line 5
05
"code.l"
#line 5
56
"code.l"
{
code
->
codify
(
yytext
);
BEGIN
(
ReadInclude
);
...
...
@@ -1871,7 +1922,7 @@ YY_RULE_SETUP
YY_BREAK
case
3
:
YY_RULE_SETUP
#line 5
09
"code.l"
#line 5
60
"code.l"
{
codifyLines
(
yytext
);
//code->codify(yytext);
...
...
@@ -1880,7 +1931,7 @@ YY_RULE_SETUP
YY_BREAK
case
4
:
YY_RULE_SETUP
#line 5
14
"code.l"
#line 5
65
"code.l"
{
//FileInfo *f;
bool
ambig
;
...
...
@@ -1903,7 +1954,7 @@ YY_RULE_SETUP
YY_BREAK
case
5
:
YY_RULE_SETUP
#line 5
33
"code.l"
#line 5
84
"code.l"
{
code
->
codify
(
yytext
);
BEGIN
(
SkipCPP
)
;
...
...
@@ -1911,21 +1962,21 @@ YY_RULE_SETUP
YY_BREAK
case
6
:
YY_RULE_SETUP
#line 5
37
"code.l"
#line 5
88
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
7
:
YY_RULE_SETUP
#line 5
40
"code.l"
#line 5
91
"code.l"
{
codifyLines
(
yytext
);
}
YY_BREAK
case
8
:
YY_RULE_SETUP
#line 5
43
"code.l"
#line 5
94
"code.l"
{
codifyLines
(
yytext
);
BEGIN
(
Body
)
;
...
...
@@ -1933,14 +1984,14 @@ YY_RULE_SETUP
YY_BREAK
case
9
:
YY_RULE_SETUP
#line 5
47
"code.l"
#line 5
98
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
10
:
YY_RULE_SETUP
#line
550
"code.l"
#line
601
"code.l"
{
code
->
codify
(
yytext
);
curlyCount
++
;
...
...
@@ -1949,7 +2000,7 @@ YY_RULE_SETUP
YY_BREAK
case
11
:
YY_RULE_SETUP
#line
555
"code.l"
#line
606
"code.l"
{
code
->
codify
(
yytext
);
inClass
=
FALSE
;
...
...
@@ -1962,7 +2013,7 @@ YY_RULE_SETUP
YY_BREAK
case
12
:
YY_RULE_SETUP
#line
564
"code.l"
#line
615
"code.l"
{
code
->
codify
(
yytext
);
BEGIN
(
Body
);
...
...
@@ -1970,7 +2021,7 @@ YY_RULE_SETUP
YY_BREAK
case
13
:
YY_RULE_SETUP
#line
568
"code.l"
#line
619
"code.l"
{
addType
();
code
->
codify
(
yytext
);
...
...
@@ -1978,7 +2029,7 @@ YY_RULE_SETUP
YY_BREAK
case
14
:
YY_RULE_SETUP
#line
572
"code.l"
#line
623
"code.l"
{
ccd
.
name
=
yytext
;
addType
();
...
...
@@ -1987,7 +2038,7 @@ YY_RULE_SETUP
YY_BREAK
case
15
:
YY_RULE_SETUP
#line
577
"code.l"
#line
628
"code.l"
{
codifyLines
(
yytext
);
BEGIN
(
Bases
);
...
...
@@ -1995,7 +2046,7 @@ YY_RULE_SETUP
YY_BREAK
case
16
:
YY_RULE_SETUP
#line
581
"code.l"
#line
632
"code.l"
{
code
->
codify
(
yytext
);
curlyCount
++
;
...
...
@@ -2012,35 +2063,35 @@ YY_RULE_SETUP
YY_BREAK
case
17
:
YY_RULE_SETUP
#line
594
"code.l"
#line
645
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
18
:
YY_RULE_SETUP
#line
597
"code.l"
#line
648
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
19
:
YY_RULE_SETUP
#line 6
00
"code.l"
#line 6
51
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
20
:
YY_RULE_SETUP
#line 6
03
"code.l"
#line 6
54
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
21
:
YY_RULE_SETUP
#line 6
06
"code.l"
#line 6
57
"code.l"
{
//printf("%s:addBase(%s)\n",ccd.name.data(),yytext);
ccd
.
bases
.
inSort
(
yytext
);
...
...
@@ -2049,7 +2100,7 @@ YY_RULE_SETUP
YY_BREAK
case
22
:
YY_RULE_SETUP
#line 6
11
"code.l"
#line 6
62
"code.l"
{
code
->
codify
(
yytext
);
sharpCount
=
1
;
...
...
@@ -2058,7 +2109,7 @@ YY_RULE_SETUP
YY_BREAK
case
23
:
YY_RULE_SETUP
#line 6
16
"code.l"
#line 6
67
"code.l"
{
code
->
codify
(
yytext
);
++
sharpCount
;
...
...
@@ -2066,7 +2117,7 @@ YY_RULE_SETUP
YY_BREAK
case
24
:
YY_RULE_SETUP
#line 6
20
"code.l"
#line 6
71
"code.l"
{
code
->
codify
(
yytext
);
if
(
--
sharpCount
<=
0
)
...
...
@@ -2075,7 +2126,7 @@ YY_RULE_SETUP
YY_BREAK
case
25
:
YY_RULE_SETUP
#line 6
25
"code.l"
#line 6
76
"code.l"
{
code
->
codify
(
yytext
);
}
...
...
@@ -2085,7 +2136,7 @@ case 26:
yy_c_buf_p
=
yy_cp
-=
1
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 6
30
"code.l"
#line 6
81
"code.l"
{
codifyLines
(
yytext
);
name
.
resize
(
0
);
type
.
resize
(
0
);
...
...
@@ -2093,7 +2144,7 @@ YY_RULE_SETUP
YY_BREAK
case
27
:
YY_RULE_SETUP
#line 6
34
"code.l"
#line 6
85
"code.l"
{
codifyLines
(
yytext
);
name
.
resize
(
0
);
type
.
resize
(
0
);
...
...
@@ -2108,7 +2159,7 @@ YY_RULE_SETUP
*/
case
28
:
YY_RULE_SETUP
#line 6
45
"code.l"
#line 6
96
"code.l"
{
generateClassLink
(
*
code
,
yytext
);
//codifyLines(yytext);
...
...
@@ -2118,7 +2169,7 @@ YY_RULE_SETUP
YY_BREAK
case
29
:
YY_RULE_SETUP
#line
651
"code.l"
#line
702
"code.l"
{
addType
();
//if (type.length()==0)
...
...
@@ -2134,7 +2185,7 @@ YY_RULE_SETUP
YY_BREAK
case
30
:
YY_RULE_SETUP
#line
663
"code.l"
#line
714
"code.l"
{
code
->
codify
(
yytext
);
lastStringContext
=
YY_START
;
...
...
@@ -2143,21 +2194,21 @@ YY_RULE_SETUP
YY_BREAK
case
31
:
YY_RULE_SETUP
#line
668
"code.l"
#line
719
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
32
:
YY_RULE_SETUP
#line
671
"code.l"
#line
722
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
33
:
YY_RULE_SETUP
#line
674
"code.l"
#line
725
"code.l"
{
code
->
codify
(
yytext
);
BEGIN
(
lastStringContext
);
...
...
@@ -2165,14 +2216,14 @@ YY_RULE_SETUP
YY_BREAK
case
34
:
YY_RULE_SETUP
#line
678
"code.l"
#line
729
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
35
:
YY_RULE_SETUP
#line
681
"code.l"
#line
732
"code.l"
{
code
->
codify
(
yytext
);
name
.
resize
(
0
);
type
.
resize
(
0
);
...
...
@@ -2180,14 +2231,14 @@ YY_RULE_SETUP
YY_BREAK
case
36
:
YY_RULE_SETUP
#line
685
"code.l"
#line
736
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
37
:
YY_RULE_SETUP
#line
688
"code.l"
#line
739
"code.l"
{
code
->
codify
(
yytext
);
BEGIN
(
MemberCall
);
...
...
@@ -2195,7 +2246,7 @@ YY_RULE_SETUP
YY_BREAK
case
38
:
YY_RULE_SETUP
#line
692
"code.l"
#line
743
"code.l"
{
if
(
name
.
length
()
>
0
)
generateMemberLink
(
*
code
,
name
,
yytext
);
...
...
@@ -2208,7 +2259,7 @@ YY_RULE_SETUP
YY_BREAK
case
39
:
YY_RULE_SETUP
#line 7
01
"code.l"
#line 7
52
"code.l"
{
code
->
codify
(
yytext
);
type
.
resize
(
0
);
...
...
@@ -2218,7 +2269,7 @@ YY_RULE_SETUP
YY_BREAK
case
40
:
YY_RULE_SETUP
#line 7
07
"code.l"
#line 7
58
"code.l"
{
code
->
codify
(
yytext
);
if
(
type
.
length
()
>
0
)
...
...
@@ -2230,14 +2281,14 @@ YY_RULE_SETUP
YY_BREAK
case
41
:
YY_RULE_SETUP
#line 7
15
"code.l"
#line 7
66
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
42
:
YY_RULE_SETUP
#line 7
18
"code.l"
#line 7
69
"code.l"
{
addParmType
();
parmName
=
yytext
;
...
...
@@ -2246,7 +2297,7 @@ YY_RULE_SETUP
YY_BREAK
case
43
:
YY_RULE_SETUP
#line 7
23
"code.l"
#line 7
74
"code.l"
{
code
->
codify
(
yytext
);
addParameter
();
...
...
@@ -2255,7 +2306,7 @@ YY_RULE_SETUP
YY_BREAK
case
44
:
YY_RULE_SETUP
#line 7
28
"code.l"
#line 7
79
"code.l"
{
code
->
codify
(
yytext
);
bracketCount
++
;
...
...
@@ -2263,7 +2314,7 @@ YY_RULE_SETUP
YY_BREAK
case
45
:
YY_RULE_SETUP
#line 7
32
"code.l"
#line 7
83
"code.l"
{
code
->
codify
(
yytext
);
if
(
--
bracketCount
<=
0
)
...
...
@@ -2274,7 +2325,7 @@ YY_RULE_SETUP
YY_BREAK
case
46
:
YY_RULE_SETUP
#line 7
39
"code.l"
#line 7
90
"code.l"
{
codifyLines
(
yytext
);
bracketCount
=
0
;
...
...
@@ -2287,7 +2338,7 @@ YY_RULE_SETUP
YY_BREAK
case
47
:
YY_RULE_SETUP
#line 7
48
"code.l"
#line 7
99
"code.l"
{
addParameter
();
parmType
.
resize
(
0
);
parmName
.
resize
(
0
);
...
...
@@ -2300,7 +2351,7 @@ YY_RULE_SETUP
YY_BREAK
case
48
:
YY_RULE_SETUP
#line
757
"code.l"
#line
808
"code.l"
{
addParameter
();
parmType
.
resize
(
0
);
parmName
.
resize
(
0
);
...
...
@@ -2312,7 +2363,7 @@ YY_RULE_SETUP
YY_BREAK
case
49
:
YY_RULE_SETUP
#line
765
"code.l"
#line
816
"code.l"
{
code
->
codify
(
yytext
);
curlyCount
++
;
...
...
@@ -2321,7 +2372,7 @@ YY_RULE_SETUP
YY_BREAK
case
50
:
YY_RULE_SETUP
#line
770
"code.l"
#line
821
"code.l"
{
generateClassLink
(
*
code
,
yytext
);
}
...
...
@@ -2331,14 +2382,14 @@ case 51:
yy_c_buf_p
=
yy_cp
-=
1
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line
773
"code.l"
#line
824
"code.l"
{
generateFunctionLink
(
*
code
,
yytext
);
}
YY_BREAK
case
52
:
YY_RULE_SETUP
#line
776
"code.l"
#line
827
"code.l"
{
code
->
codify
(
yytext
);
args
=
yytext
;
...
...
@@ -2347,7 +2398,7 @@ YY_RULE_SETUP
YY_BREAK
case
53
:
YY_RULE_SETUP
#line
781
"code.l"
#line
832
"code.l"
{
if
(
args
.
length
()
>
0
)
generateMemberLink
(
*
code
,
args
,
yytext
);
...
...
@@ -2359,7 +2410,7 @@ YY_RULE_SETUP
YY_BREAK
case
54
:
YY_RULE_SETUP
#line
789
"code.l"
#line
840
"code.l"
{
code
->
codify
(
yytext
);
args
=
yytext
;
...
...
@@ -2367,21 +2418,21 @@ YY_RULE_SETUP
YY_BREAK
case
55
:
YY_RULE_SETUP
#line
793
"code.l"
#line
844
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
56
:
YY_RULE_SETUP
#line
796
"code.l"
#line
847
"code.l"
{
code
->
codify
(
yytext
);
}
YY_BREAK
case
57
:
YY_RULE_SETUP
#line
799
"code.l"
#line
850
"code.l"
{
code
->
codify
(
yytext
);
BEGIN
(
lastCContext
)
;
...
...
@@ -2389,7 +2440,7 @@ YY_RULE_SETUP
YY_BREAK
case
58
:
YY_RULE_SETUP
#line 8
03
"code.l"
#line 8
54
"code.l"
{
codifyLines
(
yytext
);
BEGIN
(
lastCContext
)
;
...
...
@@ -2400,49 +2451,49 @@ case 59:
yy_c_buf_p
=
yy_cp
-=
1
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 8
07
"code.l"
#line 8
58
"code.l"
{
yyLineNr
+=
QCString
(
yytext
).
contains
(
'\n'
);
}
YY_BREAK
case
60
:
YY_RULE_SETUP
#line 8
10
"code.l"
#line 8
61
"code.l"
{
yyLineNr
+=
QCString
(
yytext
).
contains
(
'\n'
);
code
->
endCodeLine
();
if
(
yyLineNr
<
inputLines
)
{
startCodeLine
();
startCodeLine
(
*
code
);
}
BEGIN
(
lastSpecialCContext
);
}
YY_BREAK
case
61
:
YY_RULE_SETUP
#line 8
19
"code.l"
#line 8
70
"code.l"
{
BEGIN
(
lastSpecialCContext
);
}
YY_BREAK
case
62
:
YY_RULE_SETUP
#line 8
22
"code.l"
#line 8
73
"code.l"
YY_BREAK
case
63
:
YY_RULE_SETUP
#line 8
23
"code.l"
#line 8
74
"code.l"
YY_BREAK
case
64
:
YY_RULE_SETUP
#line 8
24
"code.l"
#line 8
75
"code.l"
{
yyLineNr
++
;
}
YY_BREAK
case
65
:
YY_RULE_SETUP
#line 8
25
"code.l"
#line 8
76
"code.l"
YY_BREAK
/*
...
...
@@ -2471,31 +2522,31 @@ YY_RULE_SETUP
*/
case
66
:
YY_RULE_SETUP
#line
850
"code.l"
#line
901
"code.l"
{
// remove special one-line comment
yyLineNr
+=
((
QCString
)
yytext
).
contains
(
'\n'
);
code
->
endCodeLine
();
if
(
yyLineNr
<
inputLines
)
{
startCodeLine
();
startCodeLine
(
*
code
);
}
}
YY_BREAK
case
67
:
YY_RULE_SETUP
#line
858
"code.l"
#line
909
"code.l"
{
// remove special one-line comment
yyLineNr
++
;
code
->
endCodeLine
();
if
(
yyLineNr
<
inputLines
)
{
startCodeLine
();
startCodeLine
(
*
code
);
}
}
YY_BREAK
case
68
:
YY_RULE_SETUP
#line
866
"code.l"
#line
917
"code.l"
{
// strip special one-line comment
char
c
[
2
];
c
[
0
]
=
'\n'
;
c
[
1
]
=
0
;
codifyLines
(
c
);
...
...
@@ -2506,7 +2557,7 @@ case 69:
yy_c_buf_p
=
yy_cp
-=
1
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line
870
"code.l"
#line
921
"code.l"
{
lastSpecialCContext
=
YY_START
;
yyLineNr
++
;
...
...
@@ -2518,7 +2569,7 @@ case 70:
yy_c_buf_p
=
yy_cp
-=
1
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line
875
"code.l"
#line
926
"code.l"
{
// special C comment block at a new line
lastSpecialCContext
=
YY_START
;
BEGIN
(
RemoveSpecialCComment
);
...
...
@@ -2529,7 +2580,7 @@ case 71:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
3
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line
879
"code.l"
#line
930
"code.l"
{
// special C comment block half way a line
lastSpecialCContext
=
YY_START
;
BEGIN
(
RemoveSpecialCComment
);
...
...
@@ -2537,7 +2588,7 @@ YY_RULE_SETUP
YY_BREAK
case
72
:
YY_RULE_SETUP
#line
883
"code.l"
#line
934
"code.l"
{
code
->
codify
(
yytext
);
lastCContext
=
YY_START
;
...
...
@@ -2546,7 +2597,7 @@ YY_RULE_SETUP
YY_BREAK
case
73
:
YY_RULE_SETUP
#line
888
"code.l"
#line
939
"code.l"
{
code
->
codify
(
yytext
);
lastCContext
=
YY_START
;
...
...
@@ -2555,14 +2606,14 @@ YY_RULE_SETUP
YY_BREAK
case
74
:
YY_RULE_SETUP
#line
893
"code.l"
#line
944
"code.l"
{
codifyLines
(
yytext
);
}
YY_BREAK
case
75
:
YY_RULE_SETUP
#line
896
"code.l"
#line
947
"code.l"
{
code
->
codify
(
yytext
);
}
...
...
@@ -2578,7 +2629,7 @@ YY_RULE_SETUP
*/
case
76
:
YY_RULE_SETUP
#line 9
09
"code.l"
#line 9
60
"code.l"
ECHO
;
YY_BREAK
case
YY_STATE_EOF
(
INITIAL
):
...
...
@@ -3477,7 +3528,7 @@ int main()
return
0
;
}
#endif
#line 9
09
"code.l"
#line 9
60
"code.l"
/*@ ----------------------------------------------------------------------------
...
...
@@ -3500,7 +3551,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
bool
exBlock
,
const
char
*
exName
,
FileDef
*
fd
)
{
code
=
new
OutputList
(
&
ol
);
if
(
s
.
length
()
==
0
)
return
;
if
(
s
.
isEmpty
()
)
return
;
inputString
=
s
;
inputPosition
=
0
;
inputLines
=
countLines
();
...
...
@@ -3513,7 +3564,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
exampleName
=
exName
;
sourceFileDef
=
fd
;
exampleFile
=
convertSlashes
(
exampleName
,
TRUE
)
+
"-example"
;
startCodeLine
();
startCodeLine
(
*
code
);
type
.
resize
(
0
);
name
.
resize
(
0
);
args
.
resize
(
0
);
...
...
src/code.l
View file @
74cc4d70
...
...
@@ -109,6 +109,97 @@ static int anchorCount;
static FileDef *sourceFileDef;
static QCString lastVariable;
// start a new line of code, inserting a line number if sourceFileDef
// is TRUE. If a definition starts at the current line, then the line
// number is linked to the documentation of that definition.
static void startCodeLine(OutputList &ol)
{
if (sourceFileDef)
{
QCString lineNumber,lineAnchor;
lineNumber.sprintf("%05d ",yyLineNr);
lineAnchor.sprintf("l%05d",yyLineNr);
Definition *d = sourceFileDef->getSourceDefinition(yyLineNr);
QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr);
if (d && d->isLinkableInProject())
{
ol.startCodeAnchor(lineAnchor);
ol.writeCodeLink(d->getReference(),d->getOutputFileBase(),
anchor,lineNumber);
ol.endCodeAnchor();
}
else
{
ol.codify(lineNumber);
}
}
ol.startCodeLine();
}
// write a code fragment `text' that may span multiple lines, inserting
// line numbers for each line.
static void codifyLines(char *text)
{
char *p=text,*sp=p;
char c;
bool done=FALSE;
while (!done)
{
sp=p;
while ((c=*p++) && c!='\n');
if (c=='\n')
{
yyLineNr++;
*(p-1)='\0';
code->codify(sp);
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine(*code);
}
}
else
{
code->codify(sp);
done=TRUE;
}
}
}
// writes a link to a fragment `text' that may span multiple lines, inserting
// line numbers for each line. If `text' contains newlines, the link will be
// split into multiple links with the same destination, one for each line.
static void writeMultiLineCodeLink(OutputList &ol,
const char *ref,const char *file,
const char *anchor,const char *text)
{
bool done=FALSE;
QCString ts = text;
char *p=ts.data();
while (!done)
{
char *sp=p;
char c;
while ((c=*p++) && c!='\n');
if (c=='\n')
{
yyLineNr++;
*(p-1)='\0';
ol.writeCodeLink(ref,file,anchor,sp);
ol.endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine(ol);
}
}
else
{
ol.writeCodeLink(ref,file,anchor,sp);
done=TRUE;
}
}
}
static void addType()
{
if (name=="const") { name.resize(0); return; }
...
...
@@ -166,7 +257,7 @@ static void addParameter()
}
}
static void generateClassLink(OutputList &ol,c
onst c
har *clName)
static void generateClassLink(OutputList &ol,char *clName)
{
QCString className=clName;
if (className.length()==0) return;
...
...
@@ -188,11 +279,12 @@ static void generateClassLink(OutputList &ol,const char *clName)
anchorCount++;
}
}
ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className);
//ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className);
writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,className);
}
else
{
ol.codify
(clName);
codifyLines
(clName);
}
}
...
...
@@ -231,7 +323,9 @@ static bool getLink(const char *className,
if (d)
{
//printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data());
result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
//result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
// md->anchor(),text ? text : memberName);
writeMultiLineCodeLink(result,d->getReference(),d->getOutputFileBase(),
md->anchor(),text ? text : memberName);
return TRUE;
}
...
...
@@ -254,7 +348,7 @@ static ClassDef *stripClassName(const char *s)
}
static void generateMemberLink(OutputList &ol,const char *varName,
c
onst c
har *memName)
char *memName)
{
//printf("generateMemberLink(object=%s,mem=%s) classScope=%s\n",
// varName,memName,classScope.data());
...
...
@@ -301,7 +395,7 @@ static void generateMemberLink(OutputList &ol,const char *varName,
}
else
{
ol.codify
(memName);
codifyLines
(memName);
}
return;
}
...
...
@@ -334,8 +428,10 @@ static void generateMemberLink(OutputList &ol,const char *varName,
{
if (mmd->memberClass()==mcd)
{
ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(),
mmd->anchor(),memName);
//ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(),
// mmd->anchor(),memName);
writeMultiLineCodeLink(ol,mcd->getReference(),
mcd->getOutputFileBase(),mmd->anchor(),memName);
return;
}
}
...
...
@@ -346,16 +442,31 @@ static void generateMemberLink(OutputList &ol,const char *varName,
}
}
}
ol.codify
(memName);
codifyLines
(memName);
return;
}
static void generateFunctionLink(OutputList &ol,const char *funcName)
static QCString removeWhiteSpace(const char *s)
{
QCString result;
if (s)
{
const char *p=s;
int c;
while ((c=*p++))
{
if (c!=' ' && c!='\n' && c!='\r' && c!='\t') result+=c;
}
}
return result;
}
static void generateFunctionLink(OutputList &ol,char *funcName)
{
OutputList result(&ol);
CodeClassDef *ccd=0;
QCString locScope=classScope.copy();
QCString locFunc=
funcName
;
QCString locFunc=
removeWhiteSpace(funcName)
;
int i=locFunc.findRev("::");
if (i>0)
{
...
...
@@ -383,7 +494,7 @@ static void generateFunctionLink(OutputList &ol,const char *funcName)
}
else
{
ol.codify
(funcName);
codifyLines
(funcName);
}
return;
}
...
...
@@ -398,66 +509,6 @@ static int countLines()
return count;
}
static void startCodeLine()
{
if (sourceFileDef)
{
QCString lineNumber,lineAnchor;
lineNumber.sprintf("%05d ",yyLineNr);
lineAnchor.sprintf("l%05d",yyLineNr);
//MemberDef *md = sourceFileDef->getSourceDefinition(yyLineNr);
//Definition *d=0;
//if (md)
//{
// d=md->memberClass();
// if (!d) d=md->getFileDef();
//}
//if (md && d)
Definition *d = sourceFileDef->getSourceDefinition(yyLineNr);
QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr);
if (d && d->isLinkableInProject())
{
code->startCodeAnchor(lineAnchor);
code->writeCodeLink(d->getReference(),d->getOutputFileBase(),
anchor,lineNumber);
code->endCodeAnchor();
}
else
{
code->codify(lineNumber);
}
}
code->startCodeLine();
}
static void codifyLines(char *text)
{
char *p=text,*sp=p;
char c;
bool done=FALSE;
while (!done)
{
sp=p;
while ((c=*p++) && c!='\n');
if (c=='\n')
{
yyLineNr++;
*(p-1)='\0';
code->codify(sp);
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
}
}
else
{
code->codify(sp);
done=TRUE;
}
}
}
/* -----------------------------------------------------------------
*/
#undef YY_INPUT
...
...
@@ -812,7 +863,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
startCodeLine(
*code
);
}
BEGIN(lastSpecialCContext);
}
...
...
@@ -852,7 +903,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
startCodeLine(
*code
);
}
}
<*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment
...
...
@@ -860,7 +911,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
startCodeLine(
*code
);
}
}
<*>"//"[!/][^\n]*\n { // strip special one-line comment
...
...
@@ -928,7 +979,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
bool exBlock, const char *exName,FileDef *fd)
{
code = new OutputList(&ol);
if (s.
length()==0
) return;
if (s.
isEmpty()
) return;
inputString = s;
inputPosition = 0;
inputLines = countLines();
...
...
@@ -941,7 +992,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
exampleName = exName;
sourceFileDef = fd;
exampleFile = convertSlashes(exampleName,TRUE)+"-example";
startCodeLine();
startCodeLine(
*code
);
type.resize(0);
name.resize(0);
args.resize(0);
...
...
src/config.cpp
View file @
74cc4d70
...
...
@@ -3170,7 +3170,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if
(
!
sl
)
{
t
<<
"
\n
"
;
t
<<
"# the TAB_SIZE tag can be used to set the number of spaces in a tab
\n
"
;
t
<<
"# the TAB_SIZE tag can be used to set the number of spaces in a tab
.
\n
"
;
t
<<
"# Doxygen uses this value to replace tabs by spaces in code fragments.
\n
"
;
t
<<
"
\n
"
;
}
...
...
@@ -3259,16 +3259,6 @@ void writeTemplateConfig(QFile *f,bool sl)
}
t
<<
"IMAGE_PATH =
\n
"
;
if
(
!
sl
)
{
t
<<
"
\n
"
;
t
<<
"# If the value of the IMAGE_PATH tag contains directories, you can use the
\n
"
;
t
<<
"# IMAGE_PATTERNS tag to specify one or more wildcard pattern (like *.gif
\n
"
;
t
<<
"# and *.eps) to filter out the image files in the directories. If left
\n
"
;
t
<<
"# blank all files are included.
\n
"
;
t
<<
"
\n
"
;
}
t
<<
"IMAGE_PATTERNS =
\n
"
;
if
(
!
sl
)
{
t
<<
"
\n
"
;
t
<<
"# The INPUT_FILTER tag can be used to specify a program that doxygen should
\n
"
;
...
...
src/config.l
View file @
74cc4d70
...
...
@@ -707,7 +707,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab\n";
t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab
.
\n";
t << "# Doxygen uses this value to replace tabs by spaces in code fragments.\n";
t << "\n";
}
...
...
@@ -796,16 +796,6 @@ void writeTemplateConfig(QFile *f,bool sl)
}
t << "IMAGE_PATH =\n";
if (!sl)
{
t << "\n";
t << "# If the value of the IMAGE_PATH tag contains directories, you can use the\n";
t << "# IMAGE_PATTERNS tag to specify one or more wildcard pattern (like *.gif \n";
t << "# and *.eps) to filter out the image files in the directories. If left \n";
t << "# blank all files are included.\n";
t << "\n";
}
t << "IMAGE_PATTERNS =\n";
if (!sl)
{
t << "\n";
t << "# The INPUT_FILTER tag can be used to specify a program that doxygen should\n";
...
...
src/debug.cpp
View file @
74cc4d70
...
...
@@ -43,6 +43,8 @@ static int labelToEnumValue(const char *l)
return
Debug
::
Functions
;
else
if
(
label
==
"Variables"
)
return
Debug
::
Variables
;
else
if
(
label
==
"Preprocessor"
)
return
Debug
::
Preprocessor
;
else
return
0
;
}
...
...
@@ -61,3 +63,8 @@ void Debug::setPriority(int p)
{
curPrio
=
p
;
}
bool
Debug
::
isFlagSet
(
DebugMask
mask
)
{
return
(
curMask
&
mask
)
!=
0
;
}
src/debug.h
View file @
74cc4d70
...
...
@@ -24,11 +24,13 @@ class Debug
enum
DebugMask
{
Quiet
=
0x00000000
,
FindMembers
=
0x00000001
,
Functions
=
0x00000002
,
Variables
=
0x00000004
Variables
=
0x00000004
,
Preprocessor
=
0x00000008
};
static
void
print
(
DebugMask
mask
,
int
prio
,
const
char
*
fmt
,...);
static
void
setFlag
(
const
char
*
label
);
static
void
clearFlag
(
const
char
*
label
);
static
bool
isFlagSet
(
DebugMask
mask
);
static
void
setPriority
(
int
p
);
private
:
...
...
src/doxygen.cpp
View file @
74cc4d70
...
...
@@ -207,8 +207,8 @@ void buildFileList(Entry *root)
FileDef
*
fd
=
findFileDef
(
&
inputNameDict
,
root
->
name
,
ambig
);
if
(
fd
&&
!
ambig
)
{
if
((
root
->
doc
.
length
()
>
0
&&
fd
->
documentation
())
||
(
root
->
brief
.
length
()
>
0
&&
fd
->
briefDescription
()))
if
((
root
->
doc
.
length
()
>
0
&&
!
fd
->
documentation
().
isEmpty
())
||
(
root
->
brief
.
length
()
>
0
&&
!
fd
->
briefDescription
().
isEmpty
()))
{
warn
(
"Warning: file %s already documented
\n
"
" skipping documentation in file %s at line %d
\n
"
,
...
...
@@ -262,6 +262,12 @@ void buildFileList(Entry *root)
void
addIncludeFile
(
ClassDef
*
cd
,
FileDef
*
ifd
,
Entry
*
root
)
{
if
(
(
!
root
->
doc
.
isEmpty
()
||
!
root
->
brief
.
isEmpty
()
||
Config
::
extractAllFlag
)
&&
root
->
protection
!=
Private
)
{
//printf(">>>>>> includeFile=%s\n",root->includeFile.data());
bool
ambig
;
...
...
@@ -312,6 +318,7 @@ void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
includeDict
.
insert
(
fd
->
absFilePath
(),
fd
);
}
}
}
}
/*! Input is a scopeName, output is the scopename split into a
...
...
@@ -322,8 +329,8 @@ void extractNamespaceName(const QCString &scopeName,
{
QCString
clName
=
scopeName
.
copy
();
QCString
nsName
;
if
(
clName
.
length
()
>
0
&&
namespaceDict
[
clName
])
{
// the whole name is a namespace
if
(
clName
.
length
()
>
0
&&
namespaceDict
[
clName
]
&&
getClass
(
clName
)
==
0
)
{
// the whole name is a namespace
(and not a class)
namespaceName
=
clName
.
copy
();
className
.
resize
(
0
);
//printf("extractNamespace `%s' => `%s|%s'\n",scopeName.data(),
...
...
@@ -332,9 +339,9 @@ void extractNamespaceName(const QCString &scopeName,
}
int
i
,
p
=
clName
.
length
()
-
2
;
while
(
p
>=
0
&&
(
i
=
clName
.
findRev
(
"::"
,
p
))
!=-
1
)
// see if the first part is a namespace
// see if the first part is a namespace
(and not a class)
{
if
(
i
>
0
&&
namespaceDict
[
clName
.
left
(
i
)])
if
(
i
>
0
&&
namespaceDict
[
clName
.
left
(
i
)]
&&
getClass
(
clName
.
left
(
i
))
==
0
)
{
namespaceName
=
clName
.
left
(
i
);
className
=
clName
.
right
(
clName
.
length
()
-
i
-
2
);
...
...
@@ -445,9 +452,7 @@ void buildClassList(Entry *root)
cd
->
addSectionsToDefinition
(
root
->
anchors
);
cd
->
setName
(
fullName
);
// change name to match docs
}
if
(
cd
->
includeFile
()
==
0
&&
(
!
root
->
doc
.
isEmpty
()
||
!
root
->
brief
.
isEmpty
())
)
if
(
cd
->
includeFile
()
==
0
)
{
FileDef
*
fd
=
findFileDef
(
&
inputNameDict
,
root
->
fileName
,
ambig
);
cd
->
setFileDef
(
fd
);
...
...
@@ -498,7 +503,6 @@ void buildClassList(Entry *root)
cd
->
setFileDef
(
ifd
);
if
(
!
root
->
doc
.
isEmpty
()
||
!
root
->
brief
.
isEmpty
())
addIncludeFile
(
cd
,
ifd
,
root
);
// if the class is not in a namespace then we insert
...
...
@@ -1458,13 +1462,13 @@ void findFriends()
// function is actually a friend.
{
mergeArguments
(
mmd
->
argumentList
(),
fmd
->
argumentList
());
if
(
fmd
->
documentation
())
if
(
!
fmd
->
documentation
().
isEmpty
())
mmd
->
setDocumentation
(
fmd
->
documentation
());
else
if
(
mmd
->
documentation
())
else
if
(
!
mmd
->
documentation
().
isEmpty
())
fmd
->
setDocumentation
(
mmd
->
documentation
());
if
(
!
mmd
->
briefDescription
()
&&
fmd
->
briefDescription
())
if
(
mmd
->
briefDescription
().
isEmpty
()
&&
!
fmd
->
briefDescription
().
isEmpty
())
mmd
->
setBriefDescription
(
fmd
->
briefDescription
());
else
if
(
mmd
->
briefDescription
()
&&
!
fmd
->
briefDescription
())
else
if
(
!
mmd
->
briefDescription
().
isEmpty
()
&&
!
fmd
->
briefDescription
().
isEmpty
())
fmd
->
setBriefDescription
(
mmd
->
briefDescription
());
if
(
mmd
->
getBodyLine
()
==-
1
&&
fmd
->
getBodyLine
()
!=-
1
)
mmd
->
setBodyLine
(
fmd
->
getBodyLine
());
...
...
@@ -1532,84 +1536,22 @@ void transferFunctionDocumentation()
}
}
//----------------------------------------------------------------------
// Computes the base and super classes for each class in the tree
void
computeClassRelations
(
Entry
*
root
)
bool
findBaseClassRelation
(
Entry
*
root
,
ClassDef
*
cd
,
const
char
*
scopePrefix
,
bool
insertUndocumented
)
{
if
(
(
(
root
->
section
&
Entry
::
COMPOUND_MASK
)
||
(
(
root
->
section
&
Entry
::
COMPOUNDDOC_MASK
)
&&
root
->
extends
->
count
()
>
0
)
)
&&
root
->
name
.
length
()
>
0
)
{
ClassDef
*
cd
;
QCString
bName
=
stripAnnonymousNamespaceScope
(
root
->
name
);
//printf("Class %s\n",bName.data());
if
((
cd
=
getClass
(
bName
)))
{
//printf("Class %s %d\n",cd->name().data(),root->extends->count());
if
(
!
cd
->
visited
)
{
cd
->
visited
=
TRUE
;
// mark class as used (in case the are multiple classes
// with the same name!)
if
(
root
->
extends
->
count
()
>
0
)
// there are base classes
{
QCString
scopePrefix
;
Entry
*
p
=
root
->
parent
;
bool
found
=
FALSE
;
// For nested classes the base class could also be nested!
// To find the correct scope, we try to prepend the scope to the base
// name, starting with the largest, most inner scope.
while
(
p
->
section
&
Entry
::
SCOPE_MASK
&&
!
found
)
{
scopePrefix
=
p
->
name
+
"::"
;
QList
<
BaseInfo
>
*
baseList
=
root
->
extends
;
BaseInfo
*
bi
=
baseList
->
first
();
while
(
bi
&&
!
found
)
// for each base class
{
QCString
cName
=
removeRedundantWhiteSpace
(
scopePrefix
+
bi
->
name
);
//printf("Base class %s\n",cName.data());
ClassDef
*
baseClass
=
getClass
(
cName
);
if
(
baseClass
&&
cName
!=
cd
->
name
())
// base class is documented
{
//printf("Adding!\n");
// add base class to this class
cd
->
insertBaseClass
(
baseClass
,
bi
->
prot
,
bi
->
virt
);
// add this class as super class to the base class
baseClass
->
insertSuperClass
(
cd
,
bi
->
prot
,
bi
->
virt
);
found
=
TRUE
;
}
//else // base class not documented
//{
// warn("Warning: Base class %s referred to in file %s at line %d is not "
// "documented\n",s->data(),root->fileName.data(),root->startLine);
//}
bi
=
baseList
->
next
();
}
p
=
p
->
parent
;
}
if
(
!
found
)
{
// The base class could ofcouse also be a non-nested class
QList
<
BaseInfo
>
*
baseList
=
root
->
extends
;
BaseInfo
*
bi
=
baseList
->
first
();
bool
foundAny
=
FALSE
;
while
(
bi
)
// for each base class
{
QCString
baseClassName
=
removeRedundantWhiteSpace
(
bi
->
name
);
QCString
baseClassName
=
removeRedundantWhiteSpace
(
scopePrefix
+
bi
->
name
);
ClassDef
*
baseClass
=
getClass
(
baseClassName
);
//printf("baseClass %s of %s found (%s and %s)\n",
// baseClassName.data(),
// bN
ame.data(),
// root->n
ame.data(),
// (bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"),
// (bi->virt==Normal)?"normal":"virtual"
// );
...
...
@@ -1620,9 +1562,11 @@ void computeClassRelations(Entry *root)
{
// TODO: here we should try to find the correct template specialization
// but for now, we only look for the unspecializated base class.
templSpec
=
baseClassName
.
right
(
baseClassName
.
length
()
-
i
);
baseClassName
=
baseClassName
.
left
(
i
);
baseClass
=
getClass
(
baseClassName
);
templSpec
=
bi
->
name
.
right
(
bi
->
name
.
length
()
-
i
);
//printf("baseClass=%s templSpec=%s\n",
// baseClassName.data(),templSpec.data());
}
bool
found
=
baseClass
!=
0
;
...
...
@@ -1641,21 +1585,21 @@ void computeClassRelations(Entry *root)
NamespaceDef
*
nd
;
for
(
nli
.
toFirst
()
;
(
nd
=
nli
.
current
())
&&
!
found
;
++
nli
)
{
found
=
(
baseClass
=
getClass
(
nd
->
name
()
+
"::"
+
baseClassName
))
;
found
=
(
baseClass
=
getClass
(
nd
->
name
()
+
"::"
+
baseClassName
))
!=
0
;
}
}
}
if
(
!
found
&&
nd
)
// class is inside a namespace
{
NamespaceList
*
nl
=
nd
->
getUsedNamespaces
();
found
=
(
baseClass
=
getClass
(
nd
->
name
()
+
"::"
+
baseClassName
))
;
found
=
(
baseClass
=
getClass
(
nd
->
name
()
+
"::"
+
baseClassName
))
!=
0
;
if
(
nl
)
// try to prepend any of the using namespace scopes.
{
NamespaceListIterator
nli
(
*
nl
);
NamespaceDef
*
nd
;
for
(
nli
.
toFirst
()
;
(
nd
=
nli
.
current
())
&&
!
found
;
++
nli
)
{
found
=
(
baseClass
=
getClass
(
nd
->
name
()
+
"::"
+
baseClassName
))
;
found
=
(
baseClass
=
getClass
(
nd
->
name
()
+
"::"
+
baseClassName
))
!=
0
;
}
}
}
...
...
@@ -1666,8 +1610,9 @@ void computeClassRelations(Entry *root)
cd
->
insertBaseClass
(
baseClass
,
bi
->
prot
,
bi
->
virt
,
templSpec
);
// add this class as super class to the base class
baseClass
->
insertSuperClass
(
cd
,
bi
->
prot
,
bi
->
virt
,
templSpec
);
foundAny
=
TRUE
;
}
else
else
if
(
insertUndocumented
)
{
//printf(">>> Undocumented base class = %s\n",bi->name.data());
baseClass
=
new
ClassDef
(
baseClassName
,
ClassDef
::
Class
);
...
...
@@ -1685,6 +1630,53 @@ void computeClassRelations(Entry *root)
}
bi
=
baseList
->
next
();
}
return
foundAny
;
}
//----------------------------------------------------------------------
// Computes the base and super classes for each class in the tree
void
computeClassRelations
(
Entry
*
root
)
{
if
(
(
(
root
->
section
&
Entry
::
COMPOUND_MASK
)
||
(
(
root
->
section
&
Entry
::
COMPOUNDDOC_MASK
)
&&
root
->
extends
->
count
()
>
0
)
)
&&
root
->
name
.
length
()
>
0
)
{
ClassDef
*
cd
;
QCString
bName
=
stripAnnonymousNamespaceScope
(
root
->
name
);
//printf("Class %s\n",bName.data());
if
((
cd
=
getClass
(
bName
)))
{
//printf("Class %s %d\n",cd->name().data(),root->extends->count());
if
(
!
cd
->
visited
)
{
cd
->
visited
=
TRUE
;
// mark class as used (in case the are multiple classes
// with the same name!)
if
(
root
->
extends
->
count
()
>
0
)
// there are base classes
{
Entry
*
p
=
root
->
parent
;
bool
found
=
FALSE
;
// For nested classes (or classes inside namespaces) the base class
// could also be nested (or inside a namespace)!
// To find the correct scope, we try to prepend the scope to the base
// name, starting with the largest, most inner scope.
while
(
p
&&
p
->
section
&
Entry
::
SCOPE_MASK
&&
!
(
found
=
findBaseClassRelation
(
root
,
cd
,
p
->
name
+
"::"
,
FALSE
)))
p
=
p
->
parent
;
// For classes with global scope the same search is preformed
if
(
!
found
)
{
findBaseClassRelation
(
root
,
cd
,
0
,
TRUE
);
}
// class not nested
}
// class has no base classes
}
// else class is already found
...
...
@@ -3429,7 +3421,7 @@ void generateSources()
while
(
fn
)
{
FileDef
*
fd
=
fn
->
first
();
while
(
fd
)
while
(
fd
&&
!
fd
->
isReference
()
)
{
msg
(
"Generating source listing for file %s...
\n
"
,
fd
->
name
().
data
());
fd
->
writeSource
(
*
outputList
);
...
...
src/filename.cpp
View file @
74cc4d70
...
...
@@ -60,6 +60,7 @@ void FileName::generateDiskNames()
while
(
fd
&&
fd
->
isReference
())
fd
=
next
();
char
c
=
fd
->
path
.
at
(
i
);
if
(
c
==
'/'
)
j
=
i
;
// remember last position of dirname
fd
=
next
();
while
(
fd
&&
!
found
)
{
if
(
!
fd
->
isReference
())
...
...
@@ -67,8 +68,8 @@ void FileName::generateDiskNames()
//printf("i=%d fd->path=`%s' fd->name=`%s'\n",i,fd->path.data(),fd->name().data());
if
(
i
==
(
int
)
fd
->
path
.
length
())
{
warning
(
"Warning: Input file %s found multiple times!
\n
"
" The generated documentation for this file may not be correct!
\n
"
,
fd
->
absFilePath
().
data
());
//
warning("Warning: Input file %s found multiple times!\n"
//
" The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
found
=
TRUE
;
}
else
if
(
fd
->
path
[
i
]
!=
c
)
...
...
@@ -84,8 +85,11 @@ void FileName::generateDiskNames()
while
(
fd
)
{
//printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data());
if
(
!
fd
->
isReference
())
{
fd
->
setName
(
fd
->
path
.
right
(
fd
->
path
.
length
()
-
j
-
1
)
+
name
);
fd
->
diskname
=
convertSlashes
(
fd
->
name
());
}
fd
=
next
();
}
}
...
...
src/groupdef.cpp
View file @
74cc4d70
...
...
@@ -93,6 +93,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol
.
disable
(
OutputGenerator
::
Latex
);
ol
.
startTextLink
(
0
,
"_details"
);
parseText
(
ol
,
theTranslator
->
trMore
());
ol
.
endTextLink
();
ol
.
enable
(
OutputGenerator
::
Latex
);
}
if
(
fileList
->
count
()
>
0
)
...
...
src/htmlgen.cpp
View file @
74cc4d70
...
...
@@ -124,11 +124,14 @@ void HtmlGenerator::writeFooter(int part,bool external)
t
<<
"<hr><address><small>"
;
else
t
<<
substitute
(
substitute
(
substitute
(
substitute
(
footer
,
"$title"
,
lastTitle
),
"$datetime"
,
dateToString
(
TRUE
)
),
"$date"
,
dateToString
(
FALSE
)
),
"$doxygenversion"
,
versionString
);
break
;
case
1
:
...
...
@@ -663,7 +666,7 @@ void HtmlGenerator::endIndexList()
void
HtmlGenerator
::
startAlphabeticalIndexList
()
{
t
<<
"<table width=95% border=0 cellspacing=0 cellpadding=0>"
<<
endl
;
t
<<
"<table
align=center
width=95% border=0 cellspacing=0 cellpadding=0>"
<<
endl
;
}
void
HtmlGenerator
::
endAlphabeticalIndexList
()
...
...
@@ -684,9 +687,9 @@ void HtmlGenerator::writeImage(const char *name,const char *,const char *)
int
i
;
if
((
i
=
baseName
.
findRev
(
'/'
))
!=-
1
||
(
i
=
baseName
.
findRev
(
'\\'
))
!=-
1
)
{
baseName
=
baseName
.
right
(
baseName
.
length
()
-
i
);
baseName
=
baseName
.
right
(
baseName
.
length
()
-
i
-
1
);
}
t
<<
"<img src=
"
<<
name
<<
" alt=
\"
"
<<
baseName
<<
"
\"
>"
<<
endl
;
t
<<
"<img src=
\"
"
<<
name
<<
"
\
"
alt=
\"
"
<<
baseName
<<
"
\"
>"
<<
endl
;
}
void
HtmlGenerator
::
startMemberDoc
(
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
)
...
...
src/index.cpp
View file @
74cc4d70
...
...
@@ -358,7 +358,7 @@ void writeFileIndex(OutputList &ol)
fd
->
name
()
);
ol
.
docify
(
" ("
);
if
(
fd
->
briefDescription
())
if
(
!
fd
->
briefDescription
().
isEmpty
())
{
OutputList
briefOutput
(
&
ol
);
parseDoc
(
briefOutput
,
0
,
0
,
...
...
@@ -420,6 +420,8 @@ void writeSourceIndex(OutputList &ol)
{
FileDef
*
fd
=
fn
->
first
();
while
(
fd
)
{
if
(
!
fd
->
isReference
())
{
if
(
!
started
)
{
...
...
@@ -440,6 +442,7 @@ void writeSourceIndex(OutputList &ol)
HtmlHelp
::
getInstance
()
->
addContentsItem
(
fd
->
name
(),
fd
->
sourceName
());
}
}
fd
=
fn
->
next
();
}
fn
=
inputNameList
.
next
();
...
...
@@ -497,7 +500,7 @@ void writeNamespaceIndex(OutputList &ol)
{
ol
.
writeStartAnnoItem
(
"namespace"
,
nd
->
getOutputFileBase
(),
0
,
nd
->
name
());
ol
.
docify
(
" ("
);
if
(
nd
->
briefDescription
())
if
(
!
nd
->
briefDescription
().
isEmpty
())
{
OutputList
briefOutput
(
&
ol
);
parseDoc
(
briefOutput
,
nd
->
name
(),
0
,
...
...
@@ -570,7 +573,7 @@ void writeAnnotatedClassList(OutputList &ol)
}
ol
.
writeStartAnnoItem
(
type
,
cd
->
getOutputFileBase
(),
0
,
cd
->
name
());
ol
.
docify
(
" ("
);
if
(
cd
->
briefDescription
())
if
(
!
cd
->
briefDescription
().
isEmpty
())
{
OutputList
briefOutput
(
&
ol
);
parseDoc
(
briefOutput
,
cd
->
name
(),
0
,
...
...
src/memberdef.cpp
View file @
74cc4d70
...
...
@@ -991,8 +991,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
ol
.
disableAllBut
(
OutputGenerator
::
Man
);
ol
.
writeString
(
" "
);
ol
.
enableAll
();
ol
.
endDescTableTitle
();
ol
.
endDoxyAnchor
();
ol
.
endDescTableTitle
();
//ol.newParagraph();
ol
.
startDescTableData
();
...
...
src/namespacedef.cpp
View file @
74cc4d70
...
...
@@ -73,7 +73,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
if
(
Config
::
genTagFile
.
length
()
>
0
)
tagFile
<<
"%"
<<
name
()
<<
":
\n
"
;
OutputList
briefOutput
(
&
ol
);
if
(
briefDescription
())
if
(
!
briefDescription
().
isEmpty
())
{
parseDoc
(
briefOutput
,
name
(),
0
,
briefDescription
());
ol
+=
briefOutput
;
...
...
src/pre.cpp
View file @
74cc4d70
...
...
@@ -1014,6 +1014,7 @@ char *yytext;
#include "message.h"
#include "util.h"
#include "defargs.h"
#include "debug.h"
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen
...
...
@@ -1022,7 +1023,7 @@ char *yytext;
#define YY_NEVER_INTERACTIVE 1
#define DUMP_OUTPUT
0
// set this to one to see what the preprocessor
#define DUMP_OUTPUT
1
// set this to one to see what the preprocessor
// produces.
#define SHOW_INCLUDES 0 // set this to one to list all parsed include files
...
...
@@ -2005,7 +2006,7 @@ YY_DECL
register
char
*
yy_cp
,
*
yy_bp
;
register
int
yy_act
;
#line 86
4
"pre.l"
#line 86
5
"pre.l"
...
...
@@ -2114,17 +2115,17 @@ do_action: /* This label is used only to access EOF actions. */
{
/* beginning of action switch */
case
1
:
YY_RULE_SETUP
#line 86
6
"pre.l"
#line 86
7
"pre.l"
YY_BREAK
case
2
:
YY_RULE_SETUP
#line 86
7
"pre.l"
#line 86
8
"pre.l"
YY_BREAK
case
3
:
YY_RULE_SETUP
#line 86
8
"pre.l"
#line 86
9
"pre.l"
YY_BREAK
/*
...
...
@@ -2142,7 +2143,7 @@ YY_RULE_SETUP
*/
case
4
:
YY_RULE_SETUP
#line 88
2
"pre.l"
#line 88
3
"pre.l"
{
BEGIN
(
Command
);
}
YY_BREAK
case
5
:
...
...
@@ -2150,7 +2151,7 @@ case 5:
yy_c_buf_p
=
yy_cp
-=
1
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 88
3
"pre.l"
#line 88
4
"pre.l"
{
outputArray
(
yytext
,
yyleng
);
BEGIN
(
CopyLine
);
...
...
@@ -2163,7 +2164,7 @@ YY_RULE_SETUP
*/
case
6
:
YY_RULE_SETUP
#line 89
2
"pre.l"
#line 89
3
"pre.l"
{
Define
*
def
=
0
;
//printf("Search for define %s\n",yytext);
...
...
@@ -2197,7 +2198,7 @@ YY_RULE_SETUP
YY_BREAK
case
7
:
YY_RULE_SETUP
#line 92
2
"pre.l"
#line 92
3
"pre.l"
{
Define
*
def
=
0
;
//printf("Search for define %s\n",yytext);
...
...
@@ -2222,14 +2223,14 @@ YY_RULE_SETUP
YY_BREAK
case
8
:
YY_RULE_SETUP
#line 94
3
"pre.l"
#line 94
4
"pre.l"
{
outputChar
(
*
yytext
);
}
YY_BREAK
case
9
:
YY_RULE_SETUP
#line 94
6
"pre.l"
#line 94
7
"pre.l"
{
outputChar
(
'\n'
);
BEGIN
(
Start
);
...
...
@@ -2238,7 +2239,7 @@ YY_RULE_SETUP
YY_BREAK
case
10
:
YY_RULE_SETUP
#line 95
1
"pre.l"
#line 95
2
"pre.l"
{
defArgsStr
+=
'('
;
roundCount
++
;
...
...
@@ -2246,7 +2247,7 @@ YY_RULE_SETUP
YY_BREAK
case
11
:
YY_RULE_SETUP
#line 95
5
"pre.l"
#line 95
6
"pre.l"
{
defArgsStr
+=
')'
;
roundCount
--
;
...
...
@@ -2274,7 +2275,7 @@ YY_RULE_SETUP
*/
case
12
:
YY_RULE_SETUP
#line 9
79
"pre.l"
#line 9
80
"pre.l"
{
defArgsStr
+=*
yytext
;
BEGIN
(
ReadString
);
...
...
@@ -2282,7 +2283,7 @@ YY_RULE_SETUP
YY_BREAK
case
13
:
YY_RULE_SETUP
#line 98
3
"pre.l"
#line 98
4
"pre.l"
{
yyLineNr
++
;
outputChar
(
'\n'
);
...
...
@@ -2290,28 +2291,28 @@ YY_RULE_SETUP
YY_BREAK
case
14
:
YY_RULE_SETUP
#line 98
7
"pre.l"
#line 98
8
"pre.l"
{
defArgsStr
+=
"@@"
;
}
YY_BREAK
case
15
:
YY_RULE_SETUP
#line 99
0
"pre.l"
#line 99
1
"pre.l"
{
defArgsStr
+=*
yytext
;
}
YY_BREAK
case
16
:
YY_RULE_SETUP
#line 99
3
"pre.l"
#line 99
4
"pre.l"
{
defArgsStr
+=
yytext
;
}
YY_BREAK
case
17
:
YY_RULE_SETUP
#line 99
6
"pre.l"
#line 99
7
"pre.l"
{
defArgsStr
+=*
yytext
;
BEGIN
(
FindDefineArgs
);
...
...
@@ -2319,21 +2320,21 @@ YY_RULE_SETUP
YY_BREAK
case
18
:
YY_RULE_SETUP
#line 100
0
"pre.l"
#line 100
1
"pre.l"
{
defArgsStr
+=
yytext
;
}
YY_BREAK
case
19
:
YY_RULE_SETUP
#line 100
3
"pre.l"
#line 100
4
"pre.l"
{
defArgsStr
+=*
yytext
;
}
YY_BREAK
case
20
:
YY_RULE_SETUP
#line 100
6
"pre.l"
#line 100
7
"pre.l"
{
if
(
Config
::
macroExpansionFlag
)
BEGIN
(
IncludeID
);
...
...
@@ -2341,14 +2342,14 @@ YY_RULE_SETUP
YY_BREAK
case
21
:
YY_RULE_SETUP
#line 101
0
"pre.l"
#line 101
1
"pre.l"
{
BEGIN
(
Include
);
}
YY_BREAK
case
22
:
YY_RULE_SETUP
#line 101
3
"pre.l"
#line 101
4
"pre.l"
{
//printf("!!!DefName\n");
BEGIN
(
DefName
);
...
...
@@ -2359,7 +2360,7 @@ case 23:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
5
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 101
7
"pre.l"
#line 101
8
"pre.l"
{
incrLevel
();
guardExpr
.
resize
(
0
);
...
...
@@ -2371,7 +2372,7 @@ case 24:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
5
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 102
2
"pre.l"
#line 102
3
"pre.l"
{
//printf("Pre.l: ifdef\n");
incrLevel
();
...
...
@@ -2384,7 +2385,7 @@ case 25:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
6
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 102
8
"pre.l"
#line 102
9
"pre.l"
{
incrLevel
();
guardExpr
=
"! "
;
...
...
@@ -2396,7 +2397,7 @@ case 26:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
6
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 103
3
"pre.l"
#line 103
4
"pre.l"
{
incrLevel
();
guardExpr
=
"! "
;
...
...
@@ -2408,7 +2409,7 @@ case 27:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
2
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 103
8
"pre.l"
#line 103
9
"pre.l"
{
incrLevel
();
guardExpr
.
resize
(
0
);
...
...
@@ -2420,7 +2421,7 @@ case 28:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
4
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 104
3
"pre.l"
#line 104
4
"pre.l"
{
if
(
!
otherCaseDone
())
{
...
...
@@ -2439,7 +2440,7 @@ case 29:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
4
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 105
5
"pre.l"
#line 105
6
"pre.l"
{
//printf("else levelGuard[%d]=%d\n",level-1,levelGuard[level-1]);
if
(
otherCaseDone
())
...
...
@@ -2456,7 +2457,7 @@ YY_RULE_SETUP
YY_BREAK
case
30
:
YY_RULE_SETUP
#line 106
8
"pre.l"
#line 106
9
"pre.l"
{
BEGIN
(
UndefName
);
}
...
...
@@ -2466,7 +2467,7 @@ case 31:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
4
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 107
1
"pre.l"
#line 107
2
"pre.l"
{
if
(
!
otherCaseDone
())
{
...
...
@@ -2480,7 +2481,7 @@ case 32:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
5
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 107
8
"pre.l"
#line 107
9
"pre.l"
{
//printf("Pre.l: #endif\n");
decrLevel
();
...
...
@@ -2488,7 +2489,7 @@ YY_RULE_SETUP
YY_BREAK
case
33
:
YY_RULE_SETUP
#line 108
2
"pre.l"
#line 108
3
"pre.l"
{
outputChar
(
'\n'
);
BEGIN
(
Start
);
...
...
@@ -2497,24 +2498,24 @@ YY_RULE_SETUP
YY_BREAK
case
34
:
YY_RULE_SETUP
#line 108
7
"pre.l"
#line 108
8
"pre.l"
{
// unknown directive
BEGIN
(
IgnoreLine
);
}
YY_BREAK
case
35
:
YY_RULE_SETUP
#line 109
0
"pre.l"
#line 109
1
"pre.l"
YY_BREAK
case
36
:
YY_RULE_SETUP
#line 109
1
"pre.l"
#line 109
2
"pre.l"
YY_BREAK
case
37
:
YY_RULE_SETUP
#line 109
2
"pre.l"
#line 109
3
"pre.l"
{
Define
*
def
;
if
((
def
=
isDefined
(
yytext
)))
...
...
@@ -2527,7 +2528,7 @@ YY_RULE_SETUP
YY_BREAK
case
38
:
YY_RULE_SETUP
#line 110
1
"pre.l"
#line 110
2
"pre.l"
{
outputChar
(
'\n'
);
guardExpr
+=
' '
;
...
...
@@ -2539,7 +2540,7 @@ case 39:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
7
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 110
6
"pre.l"
#line 110
7
"pre.l"
{
BEGIN
(
DefinedExpr2
);
}
...
...
@@ -2549,19 +2550,19 @@ case 40:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
7
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 11
09
"pre.l"
#line 11
10
"pre.l"
{
BEGIN
(
DefinedExpr1
);
}
YY_BREAK
case
41
:
YY_RULE_SETUP
#line 111
2
"pre.l"
#line 111
3
"pre.l"
{
guardExpr
+=*
yytext
;
}
YY_BREAK
case
42
:
YY_RULE_SETUP
#line 111
3
"pre.l"
#line 111
4
"pre.l"
{
outputChar
(
'\n'
);
yyLineNr
++
;
...
...
@@ -2583,12 +2584,12 @@ YY_RULE_SETUP
YY_BREAK
case
43
:
YY_RULE_SETUP
#line 113
1
"pre.l"
#line 113
2
"pre.l"
{
yyLineNr
++
;
outputChar
(
'\n'
);
}
YY_BREAK
case
44
:
YY_RULE_SETUP
#line 113
2
"pre.l"
#line 113
3
"pre.l"
{
if
(
isDefined
(
yytext
))
guardExpr
+=
" 1L "
;
...
...
@@ -2600,7 +2601,7 @@ YY_RULE_SETUP
YY_BREAK
case
45
:
YY_RULE_SETUP
#line 114
0
"pre.l"
#line 114
1
"pre.l"
{
if
(
isDefined
(
yytext
))
guardExpr
+=
" 1L "
;
...
...
@@ -2611,7 +2612,7 @@ YY_RULE_SETUP
YY_BREAK
case
46
:
YY_RULE_SETUP
#line 114
7
"pre.l"
#line 114
8
"pre.l"
{
// should not happen, handle anyway
ifcount
=
0
;
BEGIN
(
SkipCPPBlock
);
...
...
@@ -2619,19 +2620,19 @@ YY_RULE_SETUP
YY_BREAK
case
47
:
YY_RULE_SETUP
#line 115
1
"pre.l"
#line 115
2
"pre.l"
{
BEGIN
(
Guard
);
}
YY_BREAK
case
48
:
YY_RULE_SETUP
#line 115
4
"pre.l"
#line 115
5
"pre.l"
YY_BREAK
case
49
:
YY_RULE_SETUP
#line 115
5
"pre.l"
#line 115
6
"pre.l"
{
BEGIN
(
SkipCommand
);
}
YY_BREAK
case
50
:
...
...
@@ -2639,12 +2640,12 @@ case 50:
yy_c_buf_p
=
yy_cp
-=
1
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 115
6
"pre.l"
#line 115
7
"pre.l"
{
BEGIN
(
SkipLine
);
}
YY_BREAK
case
51
:
YY_RULE_SETUP
#line 115
7
"pre.l"
#line 115
8
"pre.l"
YY_BREAK
case
52
:
...
...
@@ -2652,7 +2653,7 @@ case 52:
yy_c_buf_p
=
yy_cp
-=
1
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 115
8
"pre.l"
#line 115
9
"pre.l"
{
incrLevel
();
ifcount
++
;
...
...
@@ -2661,7 +2662,7 @@ YY_RULE_SETUP
YY_BREAK
case
53
:
YY_RULE_SETUP
#line 116
3
"pre.l"
#line 116
4
"pre.l"
{
//printf("Else! ifcount=%d otherCaseDone=%d\n",ifcount,otherCaseDone());
if
(
ifcount
==
0
&&
!
otherCaseDone
())
...
...
@@ -2677,7 +2678,7 @@ case 54:
yy_c_buf_p
=
yy_cp
=
yy_bp
+
4
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 117
2
"pre.l"
#line 117
3
"pre.l"
{
if
(
ifcount
==
0
)
{
...
...
@@ -2696,7 +2697,7 @@ YY_RULE_SETUP
YY_BREAK
case
55
:
YY_RULE_SETUP
#line 118
7
"pre.l"
#line 118
8
"pre.l"
{
decrLevel
();
if
(
--
ifcount
<
0
)
...
...
@@ -2708,7 +2709,7 @@ YY_RULE_SETUP
YY_BREAK
case
56
:
YY_RULE_SETUP
#line 119
5
"pre.l"
#line 119
6
"pre.l"
{
outputChar
(
'\n'
);
yyLineNr
++
;
...
...
@@ -2717,29 +2718,29 @@ YY_RULE_SETUP
YY_BREAK
case
57
:
YY_RULE_SETUP
#line 120
0
"pre.l"
#line 120
1
"pre.l"
{
// unknown directive
BEGIN
(
SkipLine
);
}
YY_BREAK
case
58
:
YY_RULE_SETUP
#line 120
3
"pre.l"
#line 120
4
"pre.l"
YY_BREAK
case
59
:
YY_RULE_SETUP
#line 120
4
"pre.l"
#line 120
5
"pre.l"
YY_BREAK
case
60
:
YY_RULE_SETUP
#line 120
5
"pre.l"
#line 120
6
"pre.l"
YY_BREAK
case
61
:
YY_RULE_SETUP
#line 120
6
"pre.l"
#line 120
7
"pre.l"
{
lastCPPContext
=
YY_START
;
BEGIN
(
RemoveCPPComment
);
...
...
@@ -2747,7 +2748,7 @@ YY_RULE_SETUP
YY_BREAK
case
62
:
YY_RULE_SETUP
#line 121
0
"pre.l"
#line 121
1
"pre.l"
{
lastCContext
=
YY_START
;
BEGIN
(
RemoveCComment
);
...
...
@@ -2755,7 +2756,7 @@ YY_RULE_SETUP
YY_BREAK
case
63
:
YY_RULE_SETUP
#line 121
4
"pre.l"
#line 121
5
"pre.l"
{
outputChar
(
'\n'
);
yyLineNr
++
;
...
...
@@ -2767,7 +2768,7 @@ case 64:
yy_c_buf_p
=
yy_cp
-=
1
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 12
19
"pre.l"
#line 12
20
"pre.l"
{
roundCount
=
0
;
defArgsStr
=
yytext
;
...
...
@@ -2777,7 +2778,7 @@ YY_RULE_SETUP
YY_BREAK
case
65
:
YY_RULE_SETUP
#line 122
5
"pre.l"
#line 122
6
"pre.l"
{
readIncludeFile
(
expandMacro
(
yytext
));
BEGIN
(
Start
);
...
...
@@ -2785,7 +2786,7 @@ YY_RULE_SETUP
YY_BREAK
case
66
:
YY_RULE_SETUP
#line 12
29
"pre.l"
#line 12
30
"pre.l"
{
QCString
incName
=
yytext
;
//int l=incName.length();
...
...
@@ -2806,7 +2807,7 @@ case 67:
yy_c_buf_p
=
yy_cp
-=
1
;
YY_DO_BEFORE_ACTION
;
/* set up yytext again */
YY_RULE_SETUP
#line 124
3
"pre.l"
#line 124
4
"pre.l"
{
//printf("Define() `%s'\n",yytext);
argDict
=
new
QDict
<
int
>
(
31
);
...
...
@@ -2821,7 +2822,7 @@ YY_RULE_SETUP
YY_BREAK
case
68
:
YY_RULE_SETUP
#line 125
4
"pre.l"
#line 125
5
"pre.l"
{
//printf("Define `%s'\n",yytext);
argDict
=
0
;
...
...
@@ -2838,7 +2839,7 @@ YY_RULE_SETUP
YY_BREAK
case
69
:
YY_RULE_SETUP
#line 126
7
"pre.l"
#line 126
8
"pre.l"
{
argDict
=
0
;
defArgs
=
-
1
;
...
...
@@ -2889,17 +2890,17 @@ YY_RULE_SETUP
YY_BREAK
case
70
:
YY_RULE_SETUP
#line 131
4
"pre.l"
#line 131
5
"pre.l"
{
defArgsStr
+=
yytext
;
}
YY_BREAK
case
71
:
YY_RULE_SETUP
#line 131
5
"pre.l"
#line 131
6
"pre.l"
{
defArgsStr
+=
yytext
;
}
YY_BREAK
case
72
:
YY_RULE_SETUP
#line 131
6
"pre.l"
#line 131
7
"pre.l"
{
defArgsStr
+=
yytext
;
QCString
tmp
=
(
QCString
)
"#define "
+
defName
+
defArgsStr
;
...
...
@@ -2910,7 +2911,7 @@ YY_RULE_SETUP
YY_BREAK
case
73
:
YY_RULE_SETUP
#line 132
3
"pre.l"
#line 132
4
"pre.l"
{
//printf("Define addArg(%s)\n",yytext);
QCString
argName
=
yytext
;
...
...
@@ -2924,7 +2925,7 @@ YY_RULE_SETUP
YY_BREAK
case
74
:
YY_RULE_SETUP
#line 133
3
"pre.l"
#line 133
4
"pre.l"
{
outputChar
(
'/'
);
outputChar
(
'*'
);
defText
+=
' '
;
...
...
@@ -2934,7 +2935,7 @@ YY_RULE_SETUP
YY_BREAK
case
75
:
YY_RULE_SETUP
#line 13
39
"pre.l"
#line 13
40
"pre.l"
{
outputChar
(
'/'
);
outputChar
(
'/'
);
lastCPPContext
=
YY_START
;
...
...
@@ -2943,7 +2944,7 @@ YY_RULE_SETUP
YY_BREAK
case
76
:
YY_RULE_SETUP
#line 134
4
"pre.l"
#line 134
5
"pre.l"
{
outputChar
(
'*'
);
outputChar
(
'/'
);
BEGIN
(
lastCContext
);
...
...
@@ -2951,28 +2952,28 @@ YY_RULE_SETUP
YY_BREAK
case
77
:
YY_RULE_SETUP
#line 134
8
"pre.l"
#line 134
9
"pre.l"
{
outputChar
(
'/'
);
outputChar
(
'/'
);
}
YY_BREAK
case
78
:
YY_RULE_SETUP
#line 135
1
"pre.l"
#line 135
2
"pre.l"
{
outputChar
(
'/'
);
outputChar
(
'*'
);
}
YY_BREAK
case
79
:
YY_RULE_SETUP
#line 135
4
"pre.l"
#line 135
5
"pre.l"
{
outputArray
(
yytext
,
yyleng
);
}
YY_BREAK
case
80
:
YY_RULE_SETUP
#line 135
7
"pre.l"
#line 135
8
"pre.l"
{
yyLineNr
++
;
outputChar
(
'\n'
);
...
...
@@ -2980,44 +2981,44 @@ YY_RULE_SETUP
YY_BREAK
case
81
:
YY_RULE_SETUP
#line 136
1
"pre.l"
#line 136
2
"pre.l"
{
outputChar
(
*
yytext
);
}
YY_BREAK
case
82
:
YY_RULE_SETUP
#line 136
4
"pre.l"
#line 136
5
"pre.l"
{
BEGIN
(
lastCContext
);
}
YY_BREAK
case
83
:
YY_RULE_SETUP
#line 136
5
"pre.l"
#line 136
6
"pre.l"
YY_BREAK
case
84
:
YY_RULE_SETUP
#line 136
6
"pre.l"
#line 136
7
"pre.l"
YY_BREAK
case
85
:
YY_RULE_SETUP
#line 136
7
"pre.l"
#line 136
8
"pre.l"
YY_BREAK
case
86
:
YY_RULE_SETUP
#line 136
8
"pre.l"
#line 136
9
"pre.l"
{
yyLineNr
++
;
outputChar
(
'\n'
);
}
YY_BREAK
case
87
:
YY_RULE_SETUP
#line 13
69
"pre.l"
#line 13
70
"pre.l"
YY_BREAK
case
88
:
YY_RULE_SETUP
#line 137
0
"pre.l"
#line 137
1
"pre.l"
{
unput
(
*
yytext
);
BEGIN
(
lastCPPContext
);
...
...
@@ -3025,62 +3026,62 @@ YY_RULE_SETUP
YY_BREAK
case
89
:
YY_RULE_SETUP
#line 137
4
"pre.l"
#line 137
5
"pre.l"
{
outputChar
(
'/'
);
outputChar
(
'*'
);
}
YY_BREAK
case
90
:
YY_RULE_SETUP
#line 137
7
"pre.l"
#line 137
8
"pre.l"
{
outputChar
(
'/'
);
outputChar
(
'/'
);
}
YY_BREAK
case
91
:
YY_RULE_SETUP
#line 138
0
"pre.l"
#line 138
1
"pre.l"
{
outputArray
(
yytext
,
yyleng
);
}
YY_BREAK
case
92
:
YY_RULE_SETUP
#line 138
3
"pre.l"
#line 138
4
"pre.l"
{
outputChar
(
*
yytext
);
}
YY_BREAK
case
93
:
YY_RULE_SETUP
#line 138
6
"pre.l"
#line 138
7
"pre.l"
YY_BREAK
case
94
:
YY_RULE_SETUP
#line 138
7
"pre.l"
#line 138
8
"pre.l"
YY_BREAK
case
95
:
YY_RULE_SETUP
#line 138
8
"pre.l"
#line 138
9
"pre.l"
YY_BREAK
case
96
:
YY_RULE_SETUP
#line 13
89
"pre.l"
#line 13
90
"pre.l"
YY_BREAK
case
97
:
YY_RULE_SETUP
#line 139
0
"pre.l"
#line 139
1
"pre.l"
{
quoteArg
=
TRUE
;
}
YY_BREAK
case
98
:
YY_RULE_SETUP
#line 139
3
"pre.l"
#line 139
4
"pre.l"
{
if
(
quoteArg
)
{
...
...
@@ -3116,7 +3117,7 @@ YY_RULE_SETUP
YY_BREAK
case
99
:
YY_RULE_SETUP
#line 142
5
"pre.l"
#line 142
6
"pre.l"
{
outputChar
(
'\n'
);
defText
+=
' '
;
yyLineNr
++
;
...
...
@@ -3124,7 +3125,7 @@ YY_RULE_SETUP
YY_BREAK
case
100
:
YY_RULE_SETUP
#line 14
29
"pre.l"
#line 14
30
"pre.l"
{
outputChar
(
'\n'
);
Define
*
def
=
0
;
...
...
@@ -3162,46 +3163,46 @@ YY_RULE_SETUP
YY_BREAK
case
101
:
YY_RULE_SETUP
#line 146
3
"pre.l"
#line 146
4
"pre.l"
{
defText
+=
' '
;
}
YY_BREAK
case
102
:
YY_RULE_SETUP
#line 146
4
"pre.l"
#line 146
5
"pre.l"
{
defText
+=
"##"
;
}
YY_BREAK
case
103
:
YY_RULE_SETUP
#line 146
5
"pre.l"
#line 146
6
"pre.l"
{
defText
+=
"@@"
;
}
YY_BREAK
case
104
:
YY_RULE_SETUP
#line 146
6
"pre.l"
#line 146
7
"pre.l"
{
defText
+=
*
yytext
;
BEGIN
(
SkipDoubleQuote
);
}
YY_BREAK
case
105
:
YY_RULE_SETUP
#line 14
69
"pre.l"
#line 14
70
"pre.l"
{
defText
+=
*
yytext
;
BEGIN
(
SkipSingleQuote
);
}
YY_BREAK
case
106
:
YY_RULE_SETUP
#line 147
2
"pre.l"
#line 147
3
"pre.l"
{
defText
+=
yytext
;
}
YY_BREAK
case
107
:
YY_RULE_SETUP
#line 147
3
"pre.l"
#line 147
4
"pre.l"
{
defText
+=
yytext
;
}
YY_BREAK
case
108
:
YY_RULE_SETUP
#line 147
4
"pre.l"
#line 147
5
"pre.l"
{
defText
+=
*
yytext
;
BEGIN
(
DefineText
);
...
...
@@ -3209,14 +3210,14 @@ YY_RULE_SETUP
YY_BREAK
case
109
:
YY_RULE_SETUP
#line 147
8
"pre.l"
#line 147
9
"pre.l"
{
defText
+=
yytext
;
}
YY_BREAK
case
110
:
YY_RULE_SETUP
#line 148
1
"pre.l"
#line 148
2
"pre.l"
{
defText
+=
*
yytext
;
BEGIN
(
DefineText
);
...
...
@@ -3224,17 +3225,17 @@ YY_RULE_SETUP
YY_BREAK
case
111
:
YY_RULE_SETUP
#line 148
5
"pre.l"
#line 148
6
"pre.l"
{
defText
+=
*
yytext
;
}
YY_BREAK
case
112
:
YY_RULE_SETUP
#line 148
6
"pre.l"
#line 148
7
"pre.l"
{
defText
+=
*
yytext
;
}
YY_BREAK
case
113
:
YY_RULE_SETUP
#line 148
7
"pre.l"
#line 148
8
"pre.l"
{
defText
+=
*
yytext
;
}
YY_BREAK
case
YY_STATE_EOF
(
INITIAL
):
...
...
@@ -3264,7 +3265,7 @@ case YY_STATE_EOF(UndefName):
case
YY_STATE_EOF
(
IgnoreLine
):
case
YY_STATE_EOF
(
FindDefineArgs
):
case
YY_STATE_EOF
(
ReadString
):
#line 148
8
"pre.l"
#line 148
9
"pre.l"
{
//printf("End of include file\n");
//printf("Include stack depth=%d\n",includeStack.count());
...
...
@@ -3293,7 +3294,7 @@ case YY_STATE_EOF(ReadString):
YY_BREAK
case
114
:
YY_RULE_SETUP
#line 151
3
"pre.l"
#line 151
4
"pre.l"
{
outputChar
(
'/'
);
outputChar
(
'*'
);
lastCContext
=
YY_START
;
...
...
@@ -3302,7 +3303,7 @@ YY_RULE_SETUP
YY_BREAK
case
115
:
YY_RULE_SETUP
#line 151
8
"pre.l"
#line 151
9
"pre.l"
{
outputChar
(
'/'
);
outputChar
(
'/'
);
lastCPPContext
=
YY_START
;
...
...
@@ -3311,7 +3312,7 @@ YY_RULE_SETUP
YY_BREAK
case
116
:
YY_RULE_SETUP
#line 152
3
"pre.l"
#line 152
4
"pre.l"
{
outputChar
(
'\n'
);
yyLineNr
++
;
...
...
@@ -3319,14 +3320,14 @@ YY_RULE_SETUP
YY_BREAK
case
117
:
YY_RULE_SETUP
#line 152
7
"pre.l"
#line 152
8
"pre.l"
{
outputChar
(
*
yytext
);
}
YY_BREAK
case
118
:
YY_RULE_SETUP
#line 153
1
"pre.l"
#line 153
2
"pre.l"
ECHO
;
YY_BREAK
...
...
@@ -4208,7 +4209,7 @@ int main()
return
0
;
}
#endif
#line 153
1
"pre.l"
#line 153
2
"pre.l"
/*@ ----------------------------------------------------------------------------
...
...
@@ -4308,9 +4309,9 @@ void cleanupPreprocessor()
void
preprocessFile
(
const
char
*
fileName
,
BufStr
&
output
)
{
#if DUMP_OUTPUT
//
#if DUMP_OUTPUT
uint
orgOffset
=
output
.
curPos
();
#endif
//
#endif
outputBuf
=&
output
;
includeStack
.
setAutoDelete
(
TRUE
);
...
...
@@ -4446,10 +4447,12 @@ void preprocessFile(const char *fileName,BufStr &output)
else
pclose
(
preYYin
);
#if DUMP_OUTPUT
//#if DUMP_OUTPUT
if
(
Debug
::
isFlagSet
(
Debug
::
Preprocessor
))
{
char
*
orgPos
=
output
.
data
()
+
orgOffset
;
char
*
newPos
=
output
.
data
()
+
output
.
curPos
();
printf
(
"Resulting size: %d bytes
\n
"
,
newPos
-
orgPos
);
printf
(
"Preprocessor output (size: %d bytes):
\n
"
,
newPos
-
orgPos
);
int
line
=
1
;
printf
(
"---------
\n
00001 "
);
while
(
orgPos
<
newPos
)
...
...
@@ -4459,7 +4462,8 @@ void preprocessFile(const char *fileName,BufStr &output)
orgPos
++
;
}
printf
(
"
\n
---------
\n
"
);
#endif
}
//#endif
}
extern
"C"
{
// some bogus code to keep the compiler happy
...
...
src/pre.l
View file @
74cc4d70
...
...
@@ -40,6 +40,7 @@
#include "message.h"
#include "util.h"
#include "defargs.h"
#include "debug.h"
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen
...
...
@@ -48,7 +49,7 @@
#define YY_NEVER_INTERACTIVE 1
#define DUMP_OUTPUT
0
// set this to one to see what the preprocessor
#define DUMP_OUTPUT
1
// set this to one to see what the preprocessor
// produces.
#define SHOW_INCLUDES 0 // set this to one to list all parsed include files
...
...
@@ -1627,9 +1628,9 @@ void cleanupPreprocessor()
void preprocessFile(const char *fileName,BufStr &output)
{
#if DUMP_OUTPUT
//
#if DUMP_OUTPUT
uint orgOffset=output.curPos();
#endif
//
#endif
outputBuf=&output;
includeStack.setAutoDelete(TRUE);
...
...
@@ -1765,10 +1766,12 @@ void preprocessFile(const char *fileName,BufStr &output)
else
pclose(preYYin);
#if DUMP_OUTPUT
//#if DUMP_OUTPUT
if (Debug::isFlagSet(Debug::Preprocessor))
{
char *orgPos=output.data()+orgOffset;
char *newPos=output.data()+output.curPos();
printf("Resulting size: %d bytes
\n",newPos-orgPos);
printf("Preprocessor output (size: %d bytes):
\n",newPos-orgPos);
int line=1;
printf("---------\n00001 ");
while (orgPos<newPos)
...
...
@@ -1778,7 +1781,8 @@ void preprocessFile(const char *fileName,BufStr &output)
orgPos++;
}
printf("\n---------\n");
#endif
}
//#endif
}
extern "C" { // some bogus code to keep the compiler happy
...
...
src/scanner.cpp
View file @
74cc4d70
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/scanner.l
View file @
74cc4d70
...
...
@@ -127,7 +127,6 @@ static bool inBugBlock;
static bool inWarningBlock;
static bool inParBlock;
static bool firstSeeArg;
static bool javaDocSee;
static char afterDocTerminator;
static int tmpDocType;
static QCString sectionLabel;
...
...
@@ -200,7 +199,6 @@ static void initParser()
inWarningBlock = FALSE;
inParBlock = FALSE;
firstSeeArg = FALSE;
javaDocSee = FALSE;
}
//-----------------------------------------------------------------------------
...
...
@@ -707,8 +705,12 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
}
else
{
warn("Warning: image file %s is not found. ",fileName);
warn("Check your IMAGE_PATH\n");
result=fileName;
if (result.left(5)!="http:")
{
warn("Warning: image file %s is not found in IMAGE_PATH: "
"assuming external image. ",fileName);
}
}
return result;
}
...
...
@@ -1243,7 +1245,6 @@ VAR [vV][aA][rR]
if (inBlock()) endBlock();
inSeeBlock=TRUE;
//firstSeeArg=TRUE;
//javaDocSee=!strcmp(yytext,"@see");
outDoc->startDescList();
//outDoc->writeBoldString("See also: ");
outDoc->startBold();
...
...
@@ -1439,8 +1440,8 @@ VAR [vV][aA][rR]
<DocImage>[lL][aA][tT][eE][xX] {
BEGIN(DocLatexImageName);
}
<DocHtmlImageName>{FILE}
{
curImageName = findAndCopyImage(
yytext
,IT_Html);
<DocHtmlImageName>{FILE}
|{URLMASK}
{
curImageName = findAndCopyImage(
stripQuotes(yytext)
,IT_Html);
if (!curImageName.isEmpty())
{
storeOutputListState();
...
...
@@ -1451,7 +1452,7 @@ VAR [vV][aA][rR]
BEGIN(DocScan);
}
<DocLatexImageName>{FILE} {
curImageName = findAndCopyImage(
yytext
,IT_Latex);
curImageName = findAndCopyImage(
stripQuotes(yytext)
,IT_Latex);
if (curImageName.isEmpty())
BEGIN(DocScan);
else
...
...
src/tag.cpp
View file @
74cc4d70
...
...
@@ -1939,7 +1939,11 @@ void parseTagFile(const char *fileName)
{
FILE
*
f
=
fopen
(
fileName
,
"r"
);
QFileInfo
fi
(
fileName
);
if
(
!
f
||
!
fi
.
exists
());
if
(
!
f
||
!
fi
.
exists
())
{
if
(
f
)
fclose
(
f
);
return
;
}
tagName
=
fi
.
fileName
();
tagYYin
=
f
;
...
...
src/tag.l
View file @
74cc4d70
...
...
@@ -260,7 +260,11 @@ void parseTagFile(const char *fileName)
{
FILE *f=fopen(fileName,"r");
QFileInfo fi(fileName);
if (!f || !fi.exists());
if (!f || !fi.exists())
{
if (f) fclose(f);
return;
}
tagName = fi.fileName();
tagYYin = f;
...
...
src/translator_nl.h
View file @
74cc4d70
...
...
@@ -259,7 +259,7 @@ class TranslatorDutch : public Translator
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
virtual
QCString
trCompoundReference
(
const
char
*
clName
,
QCString
trCompoundReference
(
const
char
*
clName
,
ClassDef
::
CompoundType
compType
)
// used as the title of the HTML page of a class/struct/union
{
...
...
@@ -274,14 +274,14 @@ class TranslatorDutch : public Translator
result
+=
" Referentie"
;
return
result
;
}
virtual
QCString
trFileReference
(
const
char
*
fileName
)
QCString
trFileReference
(
const
char
*
fileName
)
// used as the title of the HTML page of a file
{
QCString
result
=
fileName
;
result
+=
" File Referentie"
;
return
result
;
}
virtual
QCString
trNamespaceReference
(
const
char
*
namespaceName
)
QCString
trNamespaceReference
(
const
char
*
namespaceName
)
// used as the title of the HTML page of a namespace
{
QCString
result
=
namespaceName
;
...
...
@@ -290,29 +290,29 @@ class TranslatorDutch : public Translator
}
// these are for the member sections of a class, struct or union
virtual
QCString
trPublicMembers
()
QCString
trPublicMembers
()
{
return
"Public Members"
;
}
virtual
QCString
trPublicSlots
()
QCString
trPublicSlots
()
{
return
"Public Slots"
;
}
virtual
QCString
trSignals
()
QCString
trSignals
()
{
return
"Signals"
;
}
virtual
QCString
trStaticPublicMembers
()
QCString
trStaticPublicMembers
()
{
return
"Static Public Members"
;
}
virtual
QCString
trProtectedMembers
()
QCString
trProtectedMembers
()
{
return
"Protected Members"
;
}
virtual
QCString
trProtectedSlots
()
QCString
trProtectedSlots
()
{
return
"Protected Slots"
;
}
virtual
QCString
trStaticProtectedMembers
()
QCString
trStaticProtectedMembers
()
{
return
"Static Protected Members"
;
}
virtual
QCString
trPrivateMembers
()
QCString
trPrivateMembers
()
{
return
"Private Members"
;
}
virtual
QCString
trPrivateSlots
()
QCString
trPrivateSlots
()
{
return
"Private Slots"
;
}
virtual
QCString
trStaticPrivateMembers
()
QCString
trStaticPrivateMembers
()
{
return
"Static Private Members"
;
}
// end of member sections
virtual
QCString
trWriteList
(
int
numEntries
)
QCString
trWriteList
(
int
numEntries
)
{
// this function is used to produce a comma-separated list of items.
// use generateMarker(i) to indicate where item i should be put.
...
...
@@ -336,35 +336,35 @@ class TranslatorDutch : public Translator
return
result
;
}
virtual
QCString
trInheritsList
(
int
numEntries
)
QCString
trInheritsList
(
int
numEntries
)
// used in class documentation to produce a list of base classes,
// if class diagrams are disabled.
{
return
"Erft over van "
+
trWriteList
(
numEntries
)
+
"."
;
}
virtual
QCString
trInheritedByList
(
int
numEntries
)
QCString
trInheritedByList
(
int
numEntries
)
// used in class documentation to produce a list of super classes,
// if class diagrams are disabled.
{
return
"Wordt overgeërfd door "
+
trWriteList
(
numEntries
)
+
"."
;
}
virtual
QCString
trReimplementedFromList
(
int
numEntries
)
QCString
trReimplementedFromList
(
int
numEntries
)
// used in member documentation blocks to produce a list of
// members that are hidden by this one.
{
return
"Nieuwe implementatie van "
+
trWriteList
(
numEntries
)
+
"."
;
}
virtual
QCString
trReimplementedInList
(
int
numEntries
)
QCString
trReimplementedInList
(
int
numEntries
)
{
// used in member documentation blocks to produce a list of
// all member that overwrite the implementation of this member.
return
"Opnieuw geïmplementeerd in "
+
trWriteList
(
numEntries
)
+
"."
;
}
virtual
QCString
trNamespaceMembers
()
QCString
trNamespaceMembers
()
// This is put above each page as a link to all members of namespaces.
{
return
"Namespace Members"
;
}
virtual
QCString
trNamespaceMemberDescription
(
bool
extractAll
)
QCString
trNamespaceMemberDescription
(
bool
extractAll
)
// This is an introduction to the page with all namespace members
{
QCString
result
=
"Hier is een lijst van alle "
;
...
...
@@ -376,11 +376,11 @@ class TranslatorDutch : public Translator
result
+=
"de namespaces waartoe ze behoren:"
;
return
result
;
}
virtual
QCString
trNamespaceIndex
()
QCString
trNamespaceIndex
()
// This is used in LaTeX as the title of the chapter with the
// index of all namespaces.
{
return
"Namespace Index"
;
}
virtual
QCString
trNamespaceDocumentation
()
QCString
trNamespaceDocumentation
()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all namespaces.
{
return
"Namespace Documentatie"
;
}
...
...
@@ -392,7 +392,7 @@ class TranslatorDutch : public Translator
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual
QCString
trGeneratedFromFiles
(
ClassDef
::
CompoundType
compType
,
QCString
trGeneratedFromFiles
(
ClassDef
::
CompoundType
compType
,
bool
single
)
{
// here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
...
...
@@ -412,7 +412,7 @@ class TranslatorDutch : public Translator
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual
QCString
trAlphabeticalList
()
QCString
trAlphabeticalList
()
{
return
"Alphabetical List"
;
}
//////////////////////////////////////////////////////////////////////////
...
...
@@ -420,19 +420,36 @@ class TranslatorDutch : public Translator
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
virtual
QCString
trReturnValues
()
QCString
trReturnValues
()
{
return
"Retour waarden"
;
}
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual
QCString
trMainPage
()
QCString
trMainPage
()
{
return
"Hoofd Pagina"
;
}
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual
QCString
trPageAbbreviation
()
QCString
trPageAbbreviation
()
{
return
"p."
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991106
//////////////////////////////////////////////////////////////////////////
QCString
trSources
()
{
return
"Sources"
;
}
QCString
trDefinedAtLineInSourceFile
()
{
return
"De definitie bevindt zich op regel @0 in de file @1."
;
}
QCString
trDefinedInSourceFile
()
{
return
"De definitie bevindt zich in de file @0."
;
}
};
#endif
src/translator_se.h
View file @
74cc4d70
...
...
@@ -53,7 +53,7 @@ Problem!
===================================================================================
1999/09/01
* Det verkar som om "namnrymd" r en hyggligt vedertagen svensk versttning
av "nam
ne
pace", s jag kr med det frn och med nu.
av "nam
es
pace", s jag kr med det frn och med nu.
* "interface" heter numera "grnssnitt"
*/
...
...
@@ -538,6 +538,41 @@ class TranslatorSwedish : public Translator
{
return
"Alfabetisk lista"
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
virtual
QCString
trReturnValues
()
{
return
"Returvrden"
;
}
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual
QCString
trMainPage
()
{
return
"Huvudsida"
;
}
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual
QCString
trPageAbbreviation
()
{
return
"s."
;
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
virtual
QCString
trSources
()
{
return
"Kllor"
;
}
virtual
QCString
trDefinedAtLineInSourceFile
()
{
return
"Definition p rad @0 i filen @1."
;
}
virtual
QCString
trDefinedInSourceFile
()
{
return
"Definition i filen @0."
;
}
};
#endif
src/util.cpp
View file @
74cc4d70
...
...
@@ -320,8 +320,8 @@ void writeExample(OutputList &ol,ExampleList *el)
QCString
exampleLine
=
theTranslator
->
trWriteList
(
el
->
count
());
bool
latexEnabled
=
ol
.
isEnabled
(
OutputGenerator
::
Latex
);
bool
manEnabled
=
ol
.
isEnabled
(
OutputGenerator
::
Html
);
bool
htmlEnabled
=
ol
.
isEnabled
(
OutputGenerator
::
Man
);
bool
manEnabled
=
ol
.
isEnabled
(
OutputGenerator
::
Man
);
bool
htmlEnabled
=
ol
.
isEnabled
(
OutputGenerator
::
Html
);
QRegExp
marker
(
"@[0-9]+"
);
int
index
=
0
,
newIndex
,
matchLen
;
// now replace all markers in inheritLine with links to the classes
...
...
@@ -624,21 +624,25 @@ QCString fileToString(const char *name)
QFileInfo
fi
(
name
);
if
(
!
fi
.
exists
()
||
!
fi
.
isFile
())
{
err
(
"Error: file `%s' not found
\n
"
,
name
);
exit
(
1
)
;
warn
(
"Error: file `%s' not found
\n
"
,
name
);
return
""
;
}
f
.
setName
(
name
);
fileOpened
=
f
.
open
(
IO_ReadOnly
);
}
if
(
!
fileOpened
)
{
err
(
"Error: cannot open file `%s' for reading
\n
"
,
name
);
exit
(
1
)
;
warn
(
"Error: cannot open file `%s' for reading
\n
"
,
name
);
return
""
;
}
int
fsize
=
f
.
size
();
QCString
contents
(
fsize
+
1
);
QCString
contents
(
fsize
+
2
);
f
.
readBlock
(
contents
.
data
(),
fsize
);
if
(
fsize
==
0
||
contents
[
fsize
-
1
]
==
'\n'
)
contents
[
fsize
]
=
'\0'
;
else
contents
[
fsize
]
=
'\n'
;
contents
[
fsize
+
1
]
=
'\0'
;
f
.
close
();
return
contents
;
}
...
...
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