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
8d986f5d
Commit
8d986f5d
authored
Sep 15, 2002
by
dimitri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.2.17-20020915
parent
0503d26a
Changes
38
Hide whitespace changes
Inline
Side-by-side
Showing
38 changed files
with
2993 additions
and
1536 deletions
+2993
-1536
INSTALL
INSTALL
+2
-2
README
README
+2
-2
VERSION
VERSION
+1
-1
commands.doc
doc/commands.doc
+35
-1
config.doc
doc/config.doc
+29
-0
index.doc
doc/index.doc
+1
-1
doxygen.spec
packages/rpm/doxygen.spec
+1
-1
config.l
src/config.l
+33
-2
doc.l
src/doc.l
+1
-1
docparser.cpp
src/docparser.cpp
+464
-329
docparser.h
src/docparser.h
+40
-23
docvisitor.h
src/docvisitor.h
+1
-2
dot.cpp
src/dot.cpp
+1
-0
htmldocvisitor.cpp
src/htmldocvisitor.cpp
+13
-16
htmldocvisitor.h
src/htmldocvisitor.h
+1
-2
htmlgen.cpp
src/htmlgen.cpp
+10
-6
latexdocvisitor.cpp
src/latexdocvisitor.cpp
+68
-31
latexdocvisitor.h
src/latexdocvisitor.h
+2
-2
latexgen.cpp
src/latexgen.cpp
+10
-6
libdoxygen.pro.in
src/libdoxygen.pro.in
+3
-1
mangen.cpp
src/mangen.cpp
+15
-6
mangen.h
src/mangen.h
+2
-0
outputgen.h
src/outputgen.h
+1
-1
outputlist.cpp
src/outputlist.cpp
+12
-3
pre.l
src/pre.l
+10
-3
printdocvisitor.h
src/printdocvisitor.h
+5
-10
rtfdocvisitor.cpp
src/rtfdocvisitor.cpp
+303
-246
rtfdocvisitor.h
src/rtfdocvisitor.h
+3
-2
rtfgen.cpp
src/rtfgen.cpp
+33
-17
rtfgen.h
src/rtfgen.h
+2
-0
rtfstyle.cpp
src/rtfstyle.cpp
+1
-1
rtfstyle.h
src/rtfstyle.h
+5
-2
scanner.l
src/scanner.l
+15
-4
section.h
src/section.h
+1
-1
util.cpp
src/util.cpp
+2
-2
xmldocvisitor.cpp
src/xmldocvisitor.cpp
+737
-0
xmldocvisitor.h
src/xmldocvisitor.h
+147
-0
xmlgen.cpp
src/xmlgen.cpp
+981
-809
No files found.
INSTALL
View file @
8d986f5d
DOXYGEN Version 1.2.17-200209
01
DOXYGEN Version 1.2.17-200209
15
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (
01
September 2002)
Dimitri van Heesch (
15
September 2002)
README
View file @
8d986f5d
DOXYGEN Version 1.2.17_200209
01
DOXYGEN Version 1.2.17_200209
15
Please read INSTALL for compilation instructions.
...
...
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (
01
September 2002)
Dimitri van Heesch (dimitri@stack.nl) (
15
September 2002)
VERSION
View file @
8d986f5d
1.2.17-200209
01
1.2.17-200209
15
doc/commands.doc
View file @
8d986f5d
...
...
@@ -116,6 +116,7 @@ documentation:
\refitem cmdskipline \\skipline
\refitem cmdstruct \\struct
\refitem cmdsubsection \\subsection
\refitem cmdsubsubsection \\subsubsection
\refitem cmdtest \\test
\refitem cmdthrow \\throw
\refitem cmdtodo \\todo
...
...
@@ -1106,13 +1107,46 @@ ALIASES = "english=\if english" \
subsection should be specified as the second argument of the \\subsection
command.
\warning This command only works inside related page documentation and
\warning This command only works inside a section of a related page
documentation block and
\e not in other documentation blocks!
\sa
Section \ref cmdpage "\\page" for an example of the
\ref cmdsubsection "\\subsection" command.
<hr>
\section cmdsubsubsection \subsubsection <subsubsection-name> (subsubsection title)
\addindex \\subsubsection
Creates a subsubsection with name \<subsubsection-name\>. The title of the
subsubsection should be specified as the second argument of the
\\subsubsection command.
\warning This command only works inside a subsection of a
related page documentation block and
\e not in other documentation blocks!
\sa
Section \ref cmdpage "\\page" for an example of the
\ref cmdsubsubsection "\\subsubsection" command.
<hr>
\section cmdparagraph \paragraph <paragraph-name> (paragraph title)
\addindex \\paragraph
Creates a named paragraph with name \<paragraph-name\>. The title of the
paragraph should be specified as the second argument of the
\\paragraph command.
\warning This command only works inside a subsubsection of a
related page documentation block and
\e not in other documentation blocks!
\sa
Section \ref cmdpage "\\page" for an example of the
\ref cmdparagraph "\\paragraph" command.
<hr>
<h2>\htmlonly <center> --- \endhtmlonly
...
...
doc/config.doc
View file @
8d986f5d
...
...
@@ -113,6 +113,7 @@ followed by the descriptions of the tags grouped by category.
\
refitem
cfg_generate_testlist
GENERATE_TESTLIST
\
refitem
cfg_generate_todolist
GENERATE_TODOLIST
\
refitem
cfg_generate_treeview
GENERATE_TREEVIEW
\
refitem
cfg_generate_xml
GENERATE_XML
\
refitem
cfg_graphical_hierarchy
GRAPHICAL_HIERARCHY
\
refitem
cfg_have_dot
HAVE_DOT
\
refitem
cfg_hhc_location
HHC_LOCATION
...
...
@@ -190,6 +191,8 @@ followed by the descriptions of the tags grouped by category.
\
refitem
cfg_warn_if_undocumented
WARN_IF_UNDOCUMENTED
\
refitem
cfg_warn_logfile
WARN_LOGFILE
\
refitem
cfg_warnings
WARNINGS
\
refitem
cfg_xml_dtd
XML_DTD
\
refitem
cfg_xml_schema
XML_SCHEMA
\
endsecreflist
\
section
config_general
General
options
...
...
@@ -1132,6 +1135,32 @@ EXTRA_PACKAGES = times
</dl>
\section xml_output XML related options
\anchor cfg_generate_xml
<dl>
<dt>\c GENERATE_XML <dd>
\addindex GENERATE_XML
If the GENERATE_XML tag is set to YES Doxygen will
generate an XML file that captures the structure of
the code including all documentation.
\anchor cfg_xml_schema
<dt>\c XML_SCHEMA <dd>
\addindex XML_SCHEMA
The XML_SCHEMA file can be used to specify an XML schema,
which can be used by a validating XML parser to check the
syntax of the XML files.
\anchor cfg_xml_dtd
<dt>\c XML_DTD <dd>
\addindex XML_DTD
The XML_DTD file can be used to specify an XML DTD,
which can be used by a validating XML parser to check the
syntax of the XML files.
</dl>
\section config_prepro Preprocessor related options
\anchor cfg_enable_preprocessing
<dl>
...
...
doc/index.doc
View file @
8d986f5d
...
...
@@ -180,7 +180,7 @@ Thanks go to:
All language maintainers for providing translations into many languages.
<li>Erik Jan Lingen of <a href="http://www.habanera.nl/">Habanera</a>, Mark
Roddy, Paul Schwartz, Charles Duffy, Vadym Voznyuk, Philip Walton,
Dwight Browne,
and Andreas Fredriksson
for donating money.
Dwight Browne,
Andreas Fredriksson, and Karel Lindveld
for donating money.
<li>The Comms group of <a href="http://www.symbian.com">Symbian</a> for donating
an ultra cool <a href="http://www.psion.com/revoplus">Revo plus</a>
organizer!
...
...
packages/rpm/doxygen.spec
View file @
8d986f5d
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.2.17_200209
01
Version: 1.2.17_200209
15
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
...
...
src/config.l
View file @
8d986f5d
...
...
@@ -1186,12 +1186,31 @@ void Config::check()
}
#undef PUTENV
#undef GETENV
#undef SEP
#if defined(_WIN32) && !defined(__GNUC__) && (__BORLANDC__ < 0x0550)
#define PUTENV _putenv
#else
#define GETENV _getenv
#define SEP ";"
#else
#define PUTENV putenv
#define GETENV getenv
#define SEP ":"
#endif
if (Config_getBool("HAVE_DOT")) PUTENV("DOTFONTPATH=.");
if (Config_getBool("HAVE_DOT"))
{
char *curFontPath = GETENV("DOTFONTPATH");
int l=curFontPath ? strlen(curFontPath)+1 : 0;
static char *buf = 0;
buf = (char *)realloc(buf,strlen("DOTFONTPATH=.")+l+1);
strcpy(buf,"DOTFONTPATH=.");
if (l>0)
{
strcat(buf,SEP);
strcat(buf,curFontPath);
}
PUTENV(buf);
}
}
...
...
@@ -2148,6 +2167,18 @@ void Config::create()
"moment. \n",
FALSE
);
cs = addString(
"XML_SCHEMA",
"The XML_SCHEMA file can be used to specify an XML schema, \n"
"which can be used by a validating XML parser to check the \n"
"syntax of the XML files. \n"
);
cs = addString(
"XML_DTD",
"The XML_DTD file can be used to specify an XML DTD, \n"
"which can be used by a validating XML parser to check the \n"
"syntax of the XML files. \n"
);
//--------------------------------------------------------------------------
addInfo( "DEF","configuration options for the AutoGen Definitions output");
//--------------------------------------------------------------------------
...
...
src/doc.l
View file @
8d986f5d
...
...
@@ -2763,7 +2763,7 @@ LINKMASK [^ \t\n\r\\@<&$]+("("[^\n)]*")")?({B}*("const"|"volatile"))?
{
outDoc->newParagraph();
}
if (ib &&
currentListIndent.top()=="P"
)
if (ib &&
*currentListIndent.top()=='P'
)
{ // inside paragraph block
endBlock();
}
...
...
src/docparser.cpp
View file @
8d986f5d
...
...
@@ -24,6 +24,7 @@
#include <qcstring.h>
#include <qstack.h>
#include <qdict.h>
#include <qregexp.h>
#include <ctype.h>
#include "doxygen.h"
...
...
@@ -35,24 +36,30 @@
#include "doctokenizer.h"
#include "cmdmapper.h"
#include "printdocvisitor.h"
#include "message.h"
#define DBG(x) do {} while(0)
//#define DBG(x) printf x
//---------------------------------------------------------------------------
static
bool
g_hasParamCommand
;
static
MemberDef
*
g_memberDef
;
static
QDict
<
void
>
g_paramsFound
;
// include file state
static
QCString
g_includeFileText
;
static
uint
g_includeFileOffset
;
static
uint
g_includeFileLength
;
// parser state
static
QCString
g_context
;
static
bool
g_inSeeBlock
;
static
bool
g_insideHtmlLink
;
static
QStack
<
DocNode
>
g_nodeStack
;
static
QCString
g_context
;
static
bool
g_inSeeBlock
;
static
bool
g_insideHtmlLink
;
static
QStack
<
DocNode
>
g_nodeStack
;
static
QStack
<
DocStyleChange
>
g_styleStack
;
static
QList
<
Definition
>
g_copyStack
;
static
QList
<
Definition
>
g_copyStack
;
static
QCString
g_fileName
;
struct
DocParserContext
{
...
...
@@ -62,6 +69,8 @@ struct DocParserContext
QStack
<
DocNode
>
nodeStack
;
QStack
<
DocStyleChange
>
styleStack
;
QList
<
Definition
>
copyStack
;
MemberDef
*
memberDef
;
QCString
fileName
;
};
static
QStack
<
DocParserContext
>
g_parserStack
;
...
...
@@ -78,6 +87,7 @@ static void docParserPushContext()
ctx
->
nodeStack
=
g_nodeStack
;
ctx
->
styleStack
=
g_styleStack
;
ctx
->
copyStack
=
g_copyStack
;
ctx
->
fileName
=
g_fileName
;
g_parserStack
.
push
(
ctx
);
}
...
...
@@ -90,12 +100,105 @@ static void docParserPopContext()
g_nodeStack
=
ctx
->
nodeStack
;
g_styleStack
=
ctx
->
styleStack
;
g_copyStack
=
ctx
->
copyStack
;
g_fileName
=
ctx
->
fileName
;
delete
ctx
;
doctokenizerYYpopContext
();
}
//---------------------------------------------------------------------------
static
void
checkArgumentName
(
const
QCString
&
name
,
bool
isParam
)
{
if
(
g_memberDef
==
0
)
return
;
// not a member
ArgumentList
*
al
=
g_memberDef
->
isDocsForDefinition
()
?
g_memberDef
->
argumentList
()
:
g_memberDef
->
declArgumentList
();
if
(
al
==
0
)
return
;
// no argument list
if
(
!
Config_getBool
(
"WARN_IF_UNDOCUMENTED"
))
return
;
static
QRegExp
re
(
"[a-zA-Z0-9_]+
\\
.*"
);
int
p
=
0
,
i
=
0
,
l
;
while
((
i
=
re
.
match
(
name
,
p
,
&
l
))
!=-
1
)
{
QCString
aName
=
name
.
mid
(
i
,
l
);
//printf("aName=%s\n",aName.data());
ArgumentListIterator
ali
(
*
al
);
Argument
*
a
;
bool
found
=
FALSE
;
for
(
ali
.
toFirst
();(
a
=
ali
.
current
());
++
ali
)
{
QCString
argName
=
g_memberDef
->
isDefine
()
?
a
->
type
:
a
->
name
;
if
(
argName
.
right
(
3
)
==
"..."
)
argName
=
argName
.
left
(
argName
.
length
()
-
3
);
if
(
aName
==
argName
)
{
//printf("adding `%s'\n",aName.data());
g_paramsFound
.
insert
(
aName
,(
void
*
)(
0x8
));
found
=
TRUE
;
break
;
}
}
if
(
!
found
&&
isParam
)
{
//printf("member type=%d\n",memberDef->memberType());
QCString
scope
=
g_memberDef
->
getScopeString
();
if
(
!
scope
.
isEmpty
())
scope
+=
"::"
;
else
scope
=
""
;
warn
(
g_memberDef
->
docFile
(),
g_memberDef
->
docLine
(),
"Warning: argument `%s' of command @param "
"is not found in the argument list of %s%s%s"
,
aName
.
data
(),
scope
.
data
(),
g_memberDef
->
name
().
data
(),
argListToString
(
al
).
data
()
);
}
p
=
i
+
l
;
}
}
static
void
checkUndocumentedParams
()
{
if
(
g_memberDef
&&
g_hasParamCommand
&&
Config_getBool
(
"WARN_IF_UNDOCUMENTED"
))
{
ArgumentList
*
al
=
g_memberDef
->
isDocsForDefinition
()
?
g_memberDef
->
argumentList
()
:
g_memberDef
->
declArgumentList
();
if
(
al
)
{
ArgumentListIterator
ali
(
*
al
);
Argument
*
a
;
bool
found
=
FALSE
;
for
(
ali
.
toFirst
();(
a
=
ali
.
current
());
++
ali
)
{
QCString
argName
=
g_memberDef
->
isDefine
()
?
a
->
type
:
a
->
name
;
if
(
argName
.
right
(
3
)
==
"..."
)
argName
=
argName
.
left
(
argName
.
length
()
-
3
);
if
(
!
argName
.
isEmpty
()
&&
g_paramsFound
.
find
(
argName
)
==
0
)
{
found
=
TRUE
;
break
;
}
}
if
(
found
)
{
QCString
scope
=
g_memberDef
->
getScopeString
();
if
(
!
scope
.
isEmpty
())
scope
+=
"::"
;
else
scope
=
""
;
warn
(
g_memberDef
->
docFile
(),
g_memberDef
->
docLine
(),
"Warning: The following parameters of "
"%s%s%s are not documented:"
,
scope
.
data
(),
g_memberDef
->
name
().
data
(),
argListToString
(
al
).
data
());
for
(
ali
.
toFirst
();(
a
=
ali
.
current
());
++
ali
)
{
QCString
argName
=
g_memberDef
->
isDefine
()
?
a
->
type
:
a
->
name
;
if
(
!
argName
.
isEmpty
()
&&
g_paramsFound
.
find
(
argName
)
==
0
)
{
warn_cont
(
" parameter %s
\n
"
,
argName
.
data
());
}
}
}
}
}
}
//---------------------------------------------------------------------------
static
QCString
stripKnownExtensions
(
const
char
*
text
)
{
QCString
result
=
text
;
...
...
@@ -300,8 +403,8 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
return
tok
;
}
while
((
tok
=
doctokenizerYYlex
())
&&
tok
!=
TK_WHITESPACE
&&
tok
!=
TK_NEWPARA
)
...
...
@@ -311,16 +414,16 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
switch
(
tok
)
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command
\\
%s as the argument of a
\\
%s command at line %d
\n
"
,
g_token
->
name
.
data
(),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command
\\
%s as the argument of a
\\
%s command
"
,
g_token
->
name
.
data
(),
cmdName
.
data
());
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
default:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
());
break
;
}
}
...
...
@@ -344,8 +447,8 @@ static void handleStyleLeave(DocNode *parent,QList<DocNode> &children,DocStyleCh
g_styleStack
.
top
()
->
position
()
!=
g_nodeStack
.
count
()
// wrong position
)
{
printf
(
"Error: found </%s> tag at line %d without matching <%s> in the same paragraph
\n
"
,
tagName
,
doctokenizerYYlineno
,
tagName
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: found </%s> tag without matching <%s> in the same paragraph
"
,
tagName
,
tagName
);
}
else
// end the section
{
...
...
@@ -373,8 +476,8 @@ static void handlePendingStyleCommands(DocNode *parent,QList<DocNode> &children)
case
DocStyleChange
:
:
Subscript
:
cmd
=
"subscript"
;
break
;
case
DocStyleChange
:
:
Superscript
:
cmd
=
"superscript"
;
break
;
}
printf
(
"Error: end of paragraph at line %d
without end of style "
"command </%s>
\n
"
,
doctokenizerYYlineno
,
cmd
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: end of paragraph
without end of style "
"command </%s>
"
,
cmd
);
children
.
append
(
new
DocStyleChange
(
parent
,
g_nodeStack
.
count
(),
sc
->
style
(),
FALSE
));
g_styleStack
.
pop
();
sc
=
g_styleStack
.
top
();
...
...
@@ -496,8 +599,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children
doctokenizerYYsetStateHtmlOnly
();
int
retval
=
doctokenizerYYlex
();
children
.
append
(
new
DocVerbatim
(
parent
,
g_context
,
g_token
->
verb
,
DocVerbatim
::
HtmlOnly
));
if
(
retval
==
0
)
printf
(
"Error: htmlonly section ended without end marker at line %d
\n
"
,
doctokenizerYYlineno
);
if
(
retval
==
0
)
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: htmlonly section ended without end marker"
);
doctokenizerYYsetStatePara
();
}
break
;
...
...
@@ -506,8 +608,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children
doctokenizerYYsetStateLatexOnly
();
int
retval
=
doctokenizerYYlex
();
children
.
append
(
new
DocVerbatim
(
parent
,
g_context
,
g_token
->
verb
,
DocVerbatim
::
LatexOnly
));
if
(
retval
==
0
)
printf
(
"Error: latexonly section ended without end marker at line %d
\n
"
,
doctokenizerYYlineno
);
if
(
retval
==
0
)
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: latexonly section ended without end marker"
,
doctokenizerYYlineno
);
doctokenizerYYsetStatePara
();
}
break
;
...
...
@@ -522,21 +623,21 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
tokenName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
tokenName
.
data
());
break
;
}
tok
=
doctokenizerYYlex
();
if
(
tok
==
0
)
{
printf
(
"Error: unexpected end of comment block at line %d
while parsing the "
"argument of command %s
\n
"
,
doctokenizerYYlineno
,
tokenName
.
data
());
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment block
while parsing the "
"argument of command %s
"
,
tokenName
.
data
());
break
;
}
else
if
(
tok
!=
TK_WORD
&&
tok
!=
TK_LNKWORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
tokenName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
tokenName
.
data
());
break
;
}
DocAnchor
*
anchor
=
new
DocAnchor
(
parent
,
g_token
->
name
,
FALSE
);
...
...
@@ -548,8 +649,8 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
tokenName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
tokenName
.
data
());
break
;
}
doctokenizerYYsetStateInternalRef
();
...
...
@@ -557,8 +658,8 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children
DocInternalRef
*
ref
=
0
;
if
(
tok
!=
TK_WORD
&&
tok
!=
TK_LNKWORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
tokenName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
tokenName
.
data
());
doctokenizerYYsetStatePara
();
break
;
}
...
...
@@ -796,15 +897,15 @@ static void readTextFileByName(const QCString &file,QCString &text)
}
else
if
(
ambig
)
{
printf
(
"Error: included file name %s at line %d is ambigious.
\n
"
"Possible candidates:
\n
%s"
,
file
.
data
(),
doctokenizerYYlineno
,
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: included file name %s is ambigious
"
"Possible candidates:
\n
%s"
,
file
.
data
(),
showFileDefMatches
(
Doxygen
::
exampleNameDict
,
file
).
data
()
);
}
else
{
printf
(
"Error: included file %s at line %d is not found.
"
"Check you EXAMPLE_PATH"
,
file
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: included file %s is not found
"
"Check you EXAMPLE_PATH"
,
file
.
data
());
}
}
...
...
@@ -815,7 +916,7 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
{
if
(
id
.
isEmpty
())
{
printf
(
"Error: Empty anchor label at line %d!
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Empty anchor label"
);
}
if
(
newAnchor
)
// found <a name="label">
{
...
...
@@ -831,7 +932,7 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
}
else
{
printf
(
"Error: Invalid anchor id `%s' at line %d
\n
"
,
id
.
data
(),
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Invalid anchor id `%s'"
,
id
.
data
()
);
}
}
}
...
...
@@ -998,14 +1099,14 @@ void DocCopy::parse()
}
else
// oops, recursion
{
printf
(
"Error: recursive call chain of
\\
copydoc commands detected at %d
\n
"
,
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: recursive call chain of
\\
copydoc commands detected at %d
\n
"
,
doctokenizerYYlineno
);
}
}
else
{
printf
(
"Error: target %s of
\\
copydoc command at line %d not found
\n
"
,
m_link
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: target %s of
\\
copydoc command not found
"
,
m_link
.
data
());
}
}
...
...
@@ -1047,7 +1148,8 @@ DocFormula::DocFormula(DocNode *parent,int id) :
Formula
*
formula
=
Doxygen
::
formulaNameDict
[
formCmd
];
if
(
formula
)
{
m_name
.
sprintf
(
"form_%d"
,
formula
->
getId
());
m_id
=
formula
->
getId
();
m_name
.
sprintf
(
"form_%d"
,
m_id
);
m_text
=
formula
->
getFormulaText
();
}
}
...
...
@@ -1095,16 +1197,16 @@ void DocSecRefItem::parse()
switch
(
tok
)
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command %s as part of a
\\
refitem at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a
\\
refitem
"
,
g_token
->
name
.
data
());
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
());
break
;
}
}
...
...
@@ -1123,14 +1225,13 @@ void DocSecRefItem::parse()
}
else
{
printf
(
"Error reference to unknown section %s at line %d
\n
"
,
m_target
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error reference to unknown section %s
"
,
m_target
.
data
());
}
}
else
{
printf
(
"Error reference to empty target at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error reference to empty target"
);
}
DBG
((
"DocSecRefItem::parse() end
\n
"
));
...
...
@@ -1160,15 +1261,14 @@ void DocSecRefList::parse()
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after
\\
refitem command at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after
\\
refitem command"
);
break
;
}
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WORD
&&
tok
!=
TK_LNKWORD
)
{
printf
(
"Error: unexpected token %s as the argument of
\\
refitem at line %d.
\n
"
,
tokToString
(
tok
)
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of
\\
refitem
"
,
tokToString
(
tok
));
break
;
}
...
...
@@ -1180,8 +1280,8 @@ void DocSecRefList::parse()
case
CMD_ENDSECREFLIST
:
goto
endsecreflist
;
default
:
printf
(
"Error: Illegal command %s as part of a
\\
secreflist at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a
\\
secreflist
"
,
g_token
->
name
.
data
());
goto
endsecreflist
;
}
}
...
...
@@ -1191,8 +1291,8 @@ void DocSecRefList::parse()
}
else
{
printf
(
"Error: Unexpected token %s inside section reference list at line %d
\n
"
,
tokToString
(
tok
)
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s inside section reference list
"
,
tokToString
(
tok
));
goto
endsecreflist
;
}
tok
=
doctokenizerYYlex
();
...
...
@@ -1234,16 +1334,16 @@ void DocInternalRef::parse()
switch
(
tok
)
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command %s as part of a
\\
ref at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a
\\
ref
"
,
g_token
->
name
.
data
());
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
());
break
;
}
}
...
...
@@ -1291,8 +1391,8 @@ DocRef::DocRef(DocNode *parent,const QCString &target) :
}
else
// oops, bogus target
{
printf
(
"Error: unable to resolve reference to `%s' for
\\
ref command at line %d
\n
"
,
target
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unable to resolve reference to `%s' for
\\
ref command
"
,
target
.
data
());
}
}
...
...
@@ -1309,16 +1409,16 @@ void DocRef::parse()
switch
(
tok
)
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command %s as part of a
\\
ref at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a
\\
ref
"
,
g_token
->
name
.
data
());
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
());
break
;
}
}
...
...
@@ -1353,8 +1453,8 @@ DocLink::DocLink(DocNode *parent,const QCString &target) :
}
else
// oops, bogus target
{
printf
(
"Error: unable to resolve link to `%s' for
\\
link command at line %d
\n
"
,
target
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unable to resolve link to `%s' for
\\
link command
"
,
target
.
data
());
}
}
...
...
@@ -1378,19 +1478,18 @@ QCString DocLink::parse(bool isJavaLink)
case
CMD_ENDLINK
:
if
(
isJavaLink
)
{
printf
(
"Error: {@link.. ended with @endlink command at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: {@link.. ended with @endlink command"
);
}
goto
endlink
;
default
:
printf
(
"Error: Illegal command %s as part of a
\\
ref at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a
\\
ref
"
,
g_token
->
name
.
data
());
break
;
}
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
case
TK_LNKWORD
:
case
TK_WORD
:
...
...
@@ -1416,16 +1515,16 @@ QCString DocLink::parse(bool isJavaLink)
m_children
.
append
(
new
DocWord
(
this
,
g_token
->
name
));
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
());
break
;
}
}
}
if
(
tok
==
0
)
{
printf
(
"Error: Unexpected end of comment at line %d
while inside"
" link command
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected end of comment
while inside"
" link command
\n
"
);
}
endlink
:
...
...
@@ -1453,16 +1552,16 @@ void DocDotFile::parse()
switch
(
tok
)
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command %s as part of a
\\
dotfile at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a
\\
dotfile
"
,
g_token
->
name
.
data
());
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
());
break
;
}
}
...
...
@@ -1480,8 +1579,8 @@ void DocDotFile::parse()
}
else
{
printf
(
"Error: Unknown option %s after image title at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unknown option %s after image title
"
,
g_token
->
name
.
data
());
}
tok
=
doctokenizerYYlex
();
}
...
...
@@ -1497,15 +1596,15 @@ void DocDotFile::parse()
}
else
if
(
ambig
)
{
printf
(
"Error: included dot file name %s at line %d
is ambigious.
\n
"
"Possible candidates:
\n
%s"
,
m_name
.
data
(),
doctokenizerYYlineno
,
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: included dot file name %s
is ambigious.
\n
"
"Possible candidates:
\n
%s"
,
m_name
.
data
(),
showFileDefMatches
(
Doxygen
::
exampleNameDict
,
m_name
).
data
()
);
}
else
{
printf
(
"Error: included dot file %s at line %d
is not found "
"in any of the paths specified via DOTFILE_DIRS!"
,
m_name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: included dot file %s
is not found "
"in any of the paths specified via DOTFILE_DIRS!"
,
m_name
.
data
());
}
DBG
((
"DocDotFile::parse() end
\n
"
));
...
...
@@ -1530,16 +1629,16 @@ void DocImage::parse()
switch
(
tok
)
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command %s as part of a
\\
image at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a
\\
image
"
,
g_token
->
name
.
data
());
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
());
break
;
}
}
...
...
@@ -1557,8 +1656,8 @@ void DocImage::parse()
}
else
{
printf
(
"Error: Unknown option %s after image title at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unknown option %s after image title
"
,
g_token
->
name
.
data
());
}
tok
=
doctokenizerYYlex
();
}
...
...
@@ -1588,8 +1687,8 @@ int DocHtmlHeader::parse()
switch
(
tok
)
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command %s as part of a <h%d> tag at line %d
\n
"
,
g_token
->
name
.
data
(),
m_level
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a <h%d> tag
"
,
g_token
->
name
.
data
(),
m_level
);
break
;
case
TK_HTMLTAG
:
{
...
...
@@ -1598,8 +1697,8 @@ int DocHtmlHeader::parse()
{
if
(
m_level
!=
1
)
{
printf
(
"Error: <h%d> ended with </h1> at line %d
\n
"
,
m_level
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: <h%d> ended with </h1>
"
,
m_level
);
}
goto
endheader
;
}
...
...
@@ -1607,8 +1706,8 @@ int DocHtmlHeader::parse()
{
if
(
m_level
!=
2
)
{
printf
(
"Error: <h%d> ended with </h2> at line %d
\n
"
,
m_level
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: <h%d> ended with </h2>
"
,
m_level
);
}
goto
endheader
;
}
...
...
@@ -1616,33 +1715,33 @@ int DocHtmlHeader::parse()
{
if
(
m_level
!=
3
)
{
printf
(
"Error: <h%d> ended with </h3> at line %d
\n
"
,
m_level
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: <h%d> ended with </h3>
"
,
m_level
);
}
goto
endheader
;
}
else
{
printf
(
"Error: Unexpected html tag <%s%s> found at line %d within <h%d> context
\n
"
,
g_token
->
endTag
?
"/"
:
""
,
g_token
->
name
.
data
(),
doctokenizerYYlineno
,
m_level
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected html tag <%s%s> found within <h%d> context
"
,
g_token
->
endTag
?
"/"
:
""
,
g_token
->
name
.
data
(),
m_level
);
}
}
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
());
break
;
}
}
}
if
(
tok
==
0
)
{
printf
(
"Error: Unexpected end of comment at line %d
while inside"
" <h%d> tag
\n
"
,
doctokenizerYYlineno
,
m_level
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected end of comment
while inside"
" <h%d> tag
\n
"
,
m_level
);
}
endheader
:
handlePendingStyleCommands
(
this
,
m_children
);
...
...
@@ -1668,12 +1767,12 @@ int DocHRef::parse()
switch
(
tok
)
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command %s as part of a <a>..</a> block at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a <a>..</a> block
"
,
g_token
->
name
.
data
());
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
case
TK_HTMLTAG
:
{
...
...
@@ -1684,13 +1783,13 @@ int DocHRef::parse()
}
else
{
printf
(
"Error: Unexpected html tag <%s%s> found at line %d within <a href=...> context
\n
"
,
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected html tag <%s%s> found within <a href=...> context
"
,
g_token
->
endTag
?
"/"
:
""
,
g_token
->
name
.
data
(),
doctokenizerYYlineno
);
}
}
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
(),
doctokenizerYYlineno
);
break
;
}
...
...
@@ -1698,8 +1797,8 @@ int DocHRef::parse()
}
if
(
tok
==
0
)
{
printf
(
"Error: Unexpected end of comment at line %d
while inside"
" <a href=...> tag
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected end of comment
while inside"
" <a href=...> tag"
,
doctokenizerYYlineno
);
}
endhref
:
handlePendingStyleCommands
(
this
,
m_children
);
...
...
@@ -1736,7 +1835,7 @@ int DocInternal::parse()
}
if
(
retval
==
TK_LISTITEM
)
{
printf
(
"Error: Invalid list item found at line %d!
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Invalid list item found
"
,
doctokenizerYYlineno
);
}
}
while
(
retval
!=
0
&&
retval
!=
RetVal_Section
);
if
(
lastPar
)
lastPar
->
markLast
();
...
...
@@ -1748,7 +1847,7 @@ int DocInternal::parse()
int
secLev
=
sec
->
type
==
SectionInfo
::
Subsection
?
2
:
1
;
if
(
secLev
!=
1
)
// wrong level
{
printf
(
"Error: Expected level 1 section, found a section with level %d at line %d.
\n
"
,
secLev
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Expected level 1 section, found a section with level %d."
,
secLev
);
break
;
}
else
...
...
@@ -1761,7 +1860,7 @@ int DocInternal::parse()
if
(
retval
==
RetVal_Internal
)
{
printf
(
"Error:
\\
internal command found inside internal section
\
n
"
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error:
\\
internal command found inside internal sectio
n"
);
}
DBG
((
"DocInternal::parse() end
\n
"
));
...
...
@@ -1780,35 +1879,66 @@ int DocIndexEntry::parse()
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after
\\
addindex command at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after
\\
addindex command"
);
goto
endindexentry
;
}
m_entry
.
resize
(
0
);
while
((
tok
=
doctokenizerYYlex
())
&&
tok
!=
TK_WHITESPACE
&&
tok
!=
TK_NEWPARA
)
{
if
(
!
defaultHandleToken
(
this
,
tok
,
m_children
)
)
switch
(
tok
)
{
switch
(
tok
)
case
TK_WORD
:
case
TK_LNKWORD
:
m_entry
+=
g_token
->
name
;
break
;
case
TK_SYMBOL
:
{
char
letter
=
'\0'
;
DocSymbol
::
SymType
s
=
DocSymbol
::
decodeSymbol
(
g_token
->
name
,
&
letter
);
switch
(
s
)
{
case
DocSymbol
:
:
BSlash
:
m_entry
+=
'\\'
;
break
;
case
DocSymbol
:
:
At
:
m_entry
+=
'@'
;
break
;
case
DocSymbol
:
:
Less
:
m_entry
+=
'<'
;
break
;
case
DocSymbol
:
:
Greater
:
m_entry
+=
'>'
;
break
;
case
DocSymbol
:
:
Amp
:
m_entry
+=
'&'
;
break
;
case
DocSymbol
:
:
Dollar
:
m_entry
+=
'$'
;
break
;
case
DocSymbol
:
:
Hash
:
m_entry
+=
'#'
;
break
;
case
DocSymbol
:
:
Percent
:
m_entry
+=
'%'
;
break
;
case
DocSymbol
:
:
Apos
:
m_entry
+=
'\''
;
break
;
case
DocSymbol
:
:
Quot
:
m_entry
+=
'"'
;
break
;
default
:
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected symbol found as argument of
\\
addindex"
);
break
;
}
}
break
;
case
TK_COMMAND
:
switch
(
CmdMapper
::
map
(
g_token
->
name
))
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command %s as part of a
\\
addindex at line %d
\n
"
,
g_token
->
name
.
data
(),
doctokenizerYYlineno
)
;
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
(),
doctokenizerYYlineno
)
;
break
;
case
CMD_BSLASH
:
m_entry
+=
'\\'
;
break
;
case
CMD_AT
:
m_entry
+=
'@'
;
break
;
case
CMD_LESS
:
m_entry
+=
'<'
;
break
;
case
CMD_GREATER
:
m_entry
+=
'>'
;
break
;
case
CMD_AMP
:
m_entry
+=
'&'
;
break
;
case
CMD_DOLLAR
:
m_entry
+=
'$'
;
break
;
case
CMD_HASH
:
m_entry
+=
'#'
;
break
;
case
CMD_PERCENT
:
m_entry
+=
'%'
;
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
(),
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected command %s found as argument of
\\
addindex
"
,
g_token
->
name
.
data
()
);
break
;
}
break
;
default
:
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s"
,
g_token
->
name
.
data
());
break
;
}
}
if
(
tok
!=
TK_WHITESPACE
)
retval
=
tok
;
endindexentry
:
handlePendingStyleCommands
(
this
,
m_children
);
DBG
((
"DocIndexEntry::parse() end
\n
"
));
DBG
((
"DocIndexEntry::parse() end retval=%x
\n
"
,
retval
));
DocNode
*
n
=
g_nodeStack
.
pop
();
ASSERT
(
n
==
this
);
return
retval
;
...
...
@@ -1829,12 +1959,12 @@ int DocHtmlCaption::parse()
switch
(
tok
)
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command %s as part of a <caption> tag at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a <caption> tag
"
,
g_token
->
name
.
data
());
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
case
TK_HTMLTAG
:
{
...
...
@@ -1846,22 +1976,22 @@ int DocHtmlCaption::parse()
}
else
{
printf
(
"Error: Unexpected html tag <%s%s> found at line %d within <caption> context
\n
"
,
g_token
->
endTag
?
"/"
:
""
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected html tag <%s%s> found within <caption> context
"
,
g_token
->
endTag
?
"/"
:
""
,
g_token
->
name
.
data
());
}
}
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
());
break
;
}
}
}
if
(
tok
==
0
)
{
printf
(
"Error: Unexpected end of comment at line %d
while inside"
" <caption> tag
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected end of comment
while inside"
" <caption> tag"
,
doctokenizerYYlineno
);
}
endcaption
:
handlePendingStyleCommands
(
this
,
m_children
);
...
...
@@ -1927,21 +2057,21 @@ int DocHtmlRow::parse()
}
else
// found some other tag
{
printf
(
"Error: expected <td> or <th> tag at line %d
but "
"found <%s> instead!
\n
"
,
doctokenizerYYlineno
,
g_token
->
name
.
data
());
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected <td> or <th> tag
but "
"found <%s> instead!
"
,
g_token
->
name
.
data
());
goto
endrow
;
}
}
else
if
(
tok
==
0
)
// premature end of comment
{
printf
(
"Error: unexpected end of comment at line %d
while looking"
" for a html description title
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment
while looking"
" for a html description title
"
);
goto
endrow
;
}
else
// token other than html token
{
printf
(
"Error: expected <td> or <th> tag at line %d but found %s token instead!
\n
"
,
doctokenizerYYlineno
,
tokToString
(
tok
));
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected <td> or <th> tag but found %s token instead!
"
,
tokToString
(
tok
));
goto
endrow
;
}
...
...
@@ -1991,8 +2121,7 @@ getrow:
{
if
(
m_caption
)
{
printf
(
"Error: table already has a caption, found another one at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: table already has a caption, found another one"
);
}
else
{
...
...
@@ -2007,20 +2136,19 @@ getrow:
}
else
// found wrong token
{
printf
(
"Error: expected <tr> or <caption> tag at line %d but "
"found <%s%s> instead!
\n
"
,
doctokenizerYYlineno
,
g_token
->
endTag
?
"/"
:
""
,
g_token
->
name
.
data
());
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected <tr> or <caption> tag but "
"found <%s%s> instead!"
,
g_token
->
endTag
?
"/"
:
""
,
g_token
->
name
.
data
());
}
}
else
if
(
tok
==
0
)
// premature end of comment
{
printf
(
"Error: unexpected end of comment at line %d
while looking"
" for a <tr> or <caption> tag
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment
while looking"
" for a <tr> or <caption> tag
"
);
}
else
// token other than html token
{
printf
(
"Error: expected <tr> tag at line %d but found %s token instead!
\n
"
,
doctokenizerYYlineno
,
tokToString
(
tok
));
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected <tr> tag but found %s token instead!
"
,
tokToString
(
tok
));
}
// parse one or more rows
...
...
@@ -2053,12 +2181,12 @@ int DocHtmlDescTitle::parse()
switch
(
tok
)
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command %s as part of a <dt> tag at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a <dt> tag
"
,
g_token
->
name
.
data
());
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
case
TK_HTMLTAG
:
{
...
...
@@ -2074,22 +2202,22 @@ int DocHtmlDescTitle::parse()
}
else
{
printf
(
"Error: Unexpected html tag <%s%s> found at line %d within <dt> context
\n
"
,
g_token
->
endTag
?
"/"
:
""
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected html tag <%s%s> found within <dt> context
"
,
g_token
->
endTag
?
"/"
:
""
,
g_token
->
name
.
data
());
}
}
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
());
break
;
}
}
}
if
(
tok
==
0
)
{
printf
(
"Error: Unexpected end of comment at line %d
while inside"
" <dt> tag
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected end of comment
while inside"
" <dt> tag
"
);
}
endtitle
:
handlePendingStyleCommands
(
this
,
m_children
);
...
...
@@ -2147,21 +2275,21 @@ int DocHtmlDescList::parse()
}
else
// found some other tag
{
printf
(
"Error: expected <dt> tag at line %d
but "
"found <%s> instead!
\n
"
,
doctokenizerYYlineno
,
g_token
->
name
.
data
());
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected <dt> tag
but "
"found <%s> instead!
"
,
g_token
->
name
.
data
());
goto
enddesclist
;
}
}
else
if
(
tok
==
0
)
// premature end of comment
{
printf
(
"Error: unexpected end of comment at line %d
while looking"
" for a html description title
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment
while looking"
" for a html description title
"
);
goto
enddesclist
;
}
else
// token other than html token
{
printf
(
"Error: expected <dt> tag at line %d but found %s token instead!
\n
"
,
doctokenizerYYlineno
,
tokToString
(
tok
));
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected <dt> tag but found %s token instead!
"
,
tokToString
(
tok
));
goto
enddesclist
;
}
...
...
@@ -2185,8 +2313,7 @@ int DocHtmlDescList::parse()
if
(
retval
==
0
)
{
printf
(
"Error: unexpected end of comment at line %d while inside <dl> block
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment while inside <dl> block"
);
}
enddesclist
:
...
...
@@ -2270,21 +2397,21 @@ int DocHtmlList::parse()
}
else
// found some other tag
{
printf
(
"Error: expected <li> tag at line %d
but "
"found <%s> instead!
\n
"
,
doctokenizerYYlineno
,
g_token
->
name
.
data
());
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected <li> tag
but "
"found <%s> instead!
"
,
g_token
->
name
.
data
());
goto
endlist
;
}
}
else
if
(
tok
==
0
)
// premature end of comment
{
printf
(
"Error: unexpected end of comment at line %d
while looking"
" for a html list item
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment
while looking"
" for a html list item
"
);
goto
endlist
;
}
else
// token other than html token
{
printf
(
"Error: expected <li> tag at line %d but found %s token instead!
\n
"
,
doctokenizerYYlineno
,
tokToString
(
tok
));
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected <li> tag but found %s token instead!
"
,
tokToString
(
tok
));
goto
endlist
;
}
...
...
@@ -2297,8 +2424,8 @@ int DocHtmlList::parse()
if
(
retval
==
0
)
{
printf
(
"Error: unexpected end of comment at line %d while inside <%cl> block
\n
"
,
doctokenizerYYlineno
,
m_type
==
Unordered
?
'u'
:
'o'
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment while inside <%cl> block
"
,
m_type
==
Unordered
?
'u'
:
'o'
);
}
endlist
:
...
...
@@ -2390,16 +2517,16 @@ void DocTitle::parse()
switch
(
tok
)
{
case
TK_COMMAND
:
printf
(
"Error: Illegal command %s as part of a title section at line %d
\
n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal command %s as part of a title sectio
n"
,
g_token
->
name
.
data
());
break
;
case
TK_SYMBOL
:
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
break
;
default
:
printf
(
"Error: Unexpected token %s at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s
"
,
g_token
->
name
.
data
());
break
;
}
}
...
...
@@ -2480,21 +2607,31 @@ int DocParamList::parse(const QCString &cmdName)
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
}
doctokenizerYYsetStateParam
();
tok
=
doctokenizerYYlex
();
while
(
tok
==
TK_WORD
)
/* there is a parameter name */
{
if
(
m_type
==
DocParamSect
::
Param
)
{
g_hasParamCommand
=
TRUE
;
checkArgumentName
(
g_token
->
name
,
TRUE
);
}
else
if
(
m_type
==
DocParamSect
::
RetVal
)
{
g_hasParamCommand
=
TRUE
;
checkArgumentName
(
g_token
->
name
,
FALSE
);
}
m_params
.
append
(
g_token
->
name
);
tok
=
doctokenizerYYlex
();
}
doctokenizerYYsetStatePara
();
if
(
tok
==
0
)
/* premature end of comment block */
{
printf
(
"Error: unexpected end of comment block at line %d
while parsing the "
"argument of command %s
\n
"
,
doctokenizerYYlineno
,
cmdName
.
data
());
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment block
while parsing the "
"argument of command %s
"
,
cmdName
.
data
());
return
0
;
}
ASSERT
(
tok
==
TK_WHITESPACE
);
...
...
@@ -2517,7 +2654,7 @@ int DocParamSect::parse(const QCString &cmdName)
DBG
((
"DocParamSect::parse() start
\n
"
));
g_nodeStack
.
push
(
this
);
DocParamList
*
pl
=
new
DocParamList
(
this
);
DocParamList
*
pl
=
new
DocParamList
(
this
,
m_type
);
m_children
.
append
(
pl
);
retval
=
pl
->
parse
(
cmdName
);
...
...
@@ -2590,8 +2727,8 @@ void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
return
;
}
doctokenizerYYsetStatePattern
();
...
...
@@ -2599,14 +2736,14 @@ void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type
doctokenizerYYsetStatePara
();
if
(
tok
==
0
)
{
printf
(
"Error: unexpected end of comment block at line %d
while parsing the "
"argument of command %s
\n
"
,
doctokenizerYYlineno
,
cmdName
.
data
());
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment block
while parsing the "
"argument of command %s
"
,
cmdName
.
data
());
return
;
}
else
if
(
tok
!=
TK_WORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
cmdName
.
data
());
return
;
}
DocIncOperator
*
op
=
new
DocIncOperator
(
this
,
t
,
g_token
->
name
,
g_context
);
...
...
@@ -2640,22 +2777,22 @@ void DocPara::handleImage(const QCString &cmdName)
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
return
;
}
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WORD
&&
tok
!=
TK_LNKWORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
cmdName
.
data
());
return
;
}
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
return
;
}
DocImage
::
Type
t
;
...
...
@@ -2665,17 +2802,17 @@ void DocPara::handleImage(const QCString &cmdName)
else
if
(
imgType
==
"rtf"
)
t
=
DocImage
::
Rtf
;
else
{
printf
(
"Error: image type %s specified as the first argument of "
"%s
at line %d is not valid.
\n
"
,
imgType
.
data
(),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: image type %s specified as the first argument of "
"%s
is not valid
"
,
imgType
.
data
(),
cmdName
.
data
());
return
;
}
doctokenizerYYsetStateFile
();
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
cmdName
.
data
());
return
;
}
doctokenizerYYsetStatePara
();
...
...
@@ -2689,16 +2826,16 @@ void DocPara::handleDotFile(const QCString &cmdName)
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
return
;
}
doctokenizerYYsetStateFile
();
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
cmdName
.
data
());
return
;
}
doctokenizerYYsetStatePara
();
...
...
@@ -2712,16 +2849,16 @@ void DocPara::handleLink(const QCString &cmdName,bool isJavaLink)
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
return
;
}
doctokenizerYYsetStateLink
();
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
cmdName
.
data
());
return
;
}
doctokenizerYYsetStatePara
();
...
...
@@ -2739,8 +2876,8 @@ void DocPara::handleRef(const QCString &cmdName)
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
return
;
}
doctokenizerYYsetStateRef
();
...
...
@@ -2748,8 +2885,8 @@ void DocPara::handleRef(const QCString &cmdName)
DocRef
*
ref
=
0
;
if
(
tok
!=
TK_WORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
cmdName
.
data
());
goto
endref
;
}
ref
=
new
DocRef
(
this
,
g_token
->
name
);
...
...
@@ -2789,8 +2926,8 @@ int DocPara::handleLanguageSwitch()
}
else
{
printf
(
"Error: Unexpected token %s as parameter of
\\
~ at line %d
\n
"
,
tokToString
(
tok
)
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected token %s as parameter of
\\
~
"
,
tokToString
(
tok
));
goto
endlang
;
}
}
...
...
@@ -2809,8 +2946,8 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
return
;
}
doctokenizerYYsetStateFile
();
...
...
@@ -2818,14 +2955,14 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
doctokenizerYYsetStatePara
();
if
(
tok
==
0
)
{
printf
(
"Error: unexpected end of comment block at line %d
while parsing the "
"argument of command %s
\n
"
,
doctokenizerYYlineno
,
cmdName
.
data
());
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment block
while parsing the "
"argument of command %s
"
,
cmdName
.
data
());
return
;
}
else
if
(
tok
!=
TK_WORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
cmdName
.
data
());
return
;
}
DocInclude
*
inc
=
new
DocInclude
(
this
,
g_token
->
name
,
g_context
,
t
);
...
...
@@ -2840,7 +2977,7 @@ int DocPara::handleCommand(const QCString &cmdName)
switch
(
CmdMapper
::
map
(
cmdName
))
{
case
CMD_UNKNOWN
:
printf
(
"Error: Found unknown command `
\\
%s' at line %d
\n
"
,
cmdName
.
data
(),
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Found unknown command `
\\
%s'"
,
cmdName
.
data
()
);
break
;
case
CMD_EMPHASIS
:
m_children
.
append
(
new
DocStyleChange
(
this
,
g_nodeStack
.
count
(),
DocStyleChange
::
Italic
,
TRUE
));
...
...
@@ -2941,21 +3078,21 @@ int DocPara::handleCommand(const QCString &cmdName)
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
break
;
}
tok
=
doctokenizerYYlex
();
if
(
tok
==
0
)
{
printf
(
"Error: unexpected end of comment block at line %d
while parsing the "
"argument of command %s
\n
"
,
doctokenizerYYlineno
,
cmdName
.
data
());
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment block
while parsing the "
"argument of command %s
\n
"
,
cmdName
.
data
());
break
;
}
else
if
(
tok
!=
TK_WORD
&&
tok
!=
TK_LNKWORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
cmdName
.
data
());
break
;
}
g_token
->
sectionId
=
g_token
->
name
;
...
...
@@ -2967,8 +3104,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateCode
();
retval
=
doctokenizerYYlex
();
m_children
.
append
(
new
DocVerbatim
(
this
,
g_context
,
g_token
->
verb
,
DocVerbatim
::
Code
));
if
(
retval
==
0
)
printf
(
"Error: code section ended without end marker at line %d
\n
"
,
doctokenizerYYlineno
);
if
(
retval
==
0
)
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: code section ended without end marker"
);
doctokenizerYYsetStatePara
();
}
break
;
...
...
@@ -2977,8 +3113,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateHtmlOnly
();
retval
=
doctokenizerYYlex
();
m_children
.
append
(
new
DocVerbatim
(
this
,
g_context
,
g_token
->
verb
,
DocVerbatim
::
HtmlOnly
));
if
(
retval
==
0
)
printf
(
"Error: htmlonly section ended without end marker at line %d
\n
"
,
doctokenizerYYlineno
);
if
(
retval
==
0
)
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: htmlonly section ended without end marker"
);
doctokenizerYYsetStatePara
();
}
break
;
...
...
@@ -2987,8 +3122,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateLatexOnly
();
retval
=
doctokenizerYYlex
();
m_children
.
append
(
new
DocVerbatim
(
this
,
g_context
,
g_token
->
verb
,
DocVerbatim
::
LatexOnly
));
if
(
retval
==
0
)
printf
(
"Error: latexonly section ended without end marker at line %d
\n
"
,
doctokenizerYYlineno
);
if
(
retval
==
0
)
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: latexonly section ended without end marker"
);
doctokenizerYYsetStatePara
();
}
break
;
...
...
@@ -2997,8 +3131,7 @@ int DocPara::handleCommand(const QCString &cmdName)
doctokenizerYYsetStateVerbatim
();
retval
=
doctokenizerYYlex
();
m_children
.
append
(
new
DocVerbatim
(
this
,
g_context
,
g_token
->
verb
,
DocVerbatim
::
Verbatim
));
if
(
retval
==
0
)
printf
(
"Error: verbatim section ended without end marker at line %d
\n
"
,
doctokenizerYYlineno
);
if
(
retval
==
0
)
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: verbatim section ended without end marker"
);
doctokenizerYYsetStatePara
();
}
break
;
...
...
@@ -3007,7 +3140,7 @@ int DocPara::handleCommand(const QCString &cmdName)
case
CMD_ENDLATEXONLY
:
case
CMD_ENDLINK
:
case
CMD_ENDVERBATIM
:
printf
(
"Error: unexpected command %s at line %d
\n
"
,
g_token
->
name
.
data
(),
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected command %s"
,
g_token
->
name
.
data
()
);
break
;
case
CMD_PARAM
:
retval
=
handleParamSection
(
cmdName
,
DocParamSect
::
Param
);
...
...
@@ -3041,21 +3174,21 @@ int DocPara::handleCommand(const QCString &cmdName)
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
break
;
}
tok
=
doctokenizerYYlex
();
if
(
tok
==
0
)
{
printf
(
"Error: unexpected end of comment block at line %d
while parsing the "
"argument of command %s
\n
"
,
doctokenizerYYlineno
,
cmdName
.
data
());
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment block
while parsing the "
"argument of command %s
"
,
cmdName
.
data
());
break
;
}
else
if
(
tok
!=
TK_WORD
&&
tok
!=
TK_LNKWORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
cmdName
.
data
());
break
;
}
DocAnchor
*
anchor
=
new
DocAnchor
(
this
,
g_token
->
name
,
FALSE
);
...
...
@@ -3077,21 +3210,21 @@ int DocPara::handleCommand(const QCString &cmdName)
int
tok
=
doctokenizerYYlex
();
if
(
tok
!=
TK_WHITESPACE
)
{
printf
(
"Error: expected whitespace after %s command at line %d
\n
"
,
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: expected whitespace after %s command
"
,
cmdName
.
data
());
break
;
}
tok
=
doctokenizerYYlex
();
if
(
tok
==
0
)
{
printf
(
"Error: unexpected end of comment block at line %d
while parsing the "
"argument of command %s
\n
"
,
doctokenizerYYlineno
,
cmdName
.
data
());
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected end of comment block
while parsing the "
"argument of command %s
\n
"
,
cmdName
.
data
());
break
;
}
else
if
(
tok
!=
TK_WORD
&&
tok
!=
TK_LNKWORD
)
{
printf
(
"Error: unexpected token %s as the argument of %s at line %d.
\n
"
,
tokToString
(
tok
),
cmdName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected token %s as the argument of %s
"
,
tokToString
(
tok
),
cmdName
.
data
());
break
;
}
DocCopy
*
cpy
=
new
DocCopy
(
this
,
g_token
->
name
);
...
...
@@ -3146,10 +3279,10 @@ int DocPara::handleCommand(const QCString &cmdName)
}
break
;
case
CMD_SECREFITEM
:
printf
(
"Error: unexpected command %s at line %d
\n
"
,
g_token
->
name
.
data
(),
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected command %s"
,
g_token
->
name
.
data
()
);
break
;
case
CMD_ENDSECREFLIST
:
printf
(
"Error: unexpected command %s at line %d
\n
"
,
g_token
->
name
.
data
(),
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected command %s"
,
g_token
->
name
.
data
()
);
break
;
case
CMD_FORMULA
:
{
...
...
@@ -3161,7 +3294,7 @@ int DocPara::handleCommand(const QCString &cmdName)
retval
=
handleLanguageSwitch
();
break
;
case
CMD_INTERNALREF
:
printf
(
"Error: unexpected command %s at line %d
\n
"
,
g_token
->
name
.
data
(),
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: unexpected command %s"
,
g_token
->
name
.
data
()
);
break
;
default
:
// we should not get here!
...
...
@@ -3201,7 +3334,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
case
HTML_LI
:
if
(
!
insideUL
(
this
)
&&
!
insideOL
(
this
))
{
printf
(
"Error: lonely <li> tag found at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: lonely <li> tag found"
);
}
else
{
...
...
@@ -3250,8 +3383,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
retval
=
RetVal_DescTitle
;
break
;
case
HTML_DD
:
printf
(
"Error: Unexpected tag <dd> found at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected tag <dd> found"
);
break
;
case
HTML_TABLE
:
{
...
...
@@ -3270,8 +3402,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
retval
=
RetVal_TableHCell
;
break
;
case
HTML_CAPTION
:
printf
(
"Error: Unexpected tag <caption> found at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected tag <caption> found"
);
break
;
case
HTML_BR
:
{
...
...
@@ -3301,8 +3432,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
}
else
{
printf
(
"Error: found <a> tag at line %d with name option but without value!
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: found <a> tag with name option but without value!"
);
}
}
else
if
(
opt
->
name
==
"href"
)
// <a href=url>..</a> tag
...
...
@@ -3356,8 +3486,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const QList<Option> &tag
}
break
;
case
HTML_UNKNOWN
:
printf
(
"Error: Unsupported html tag <%s> found at line %d
\n
"
,
tagName
.
data
(),
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported html tag <%s> found"
,
tagName
.
data
());
break
;
default
:
// we should not get here!
...
...
@@ -3377,8 +3506,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
case
HTML_UL
:
if
(
!
insideUL
(
this
))
{
printf
(
"Error: found </ul> tag at line %d without matching <ul>
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: found </ul> tag without matching <ul>"
);
}
else
{
...
...
@@ -3388,8 +3516,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
case
HTML_OL
:
if
(
!
insideOL
(
this
))
{
printf
(
"Error: found </ol> tag at line %d without matching <ol>
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: found </ol> tag without matching <ol>"
);
}
else
{
...
...
@@ -3399,8 +3526,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
case
HTML_LI
:
if
(
!
insideLI
(
this
))
{
printf
(
"Error: found </li> tag at line %d without matching <li>
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: found </li> tag without matching <li>"
);
}
else
{
...
...
@@ -3410,8 +3536,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
case
HTML_PRE
:
if
(
!
insidePRE
(
this
))
{
printf
(
"Error: found </pre> tag at line %d without matching <pre>
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: found </pre> tag without matching <pre>"
);
}
else
{
...
...
@@ -3464,40 +3589,33 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
// ignore </th> tag
break
;
case
HTML_CAPTION
:
printf
(
"Error: Unexpected tag </caption> found at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected tag </caption> found"
);
break
;
case
HTML_BR
:
printf
(
"Error: Illegal </br> tag found
\n
"
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Illegal </br> tag found
\n
"
);
break
;
case
HTML_H1
:
printf
(
"Error: Unexpected tag </h1> found at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected tag </h1> found"
);
break
;
case
HTML_H2
:
printf
(
"Error: Unexpected tag </h2> found at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected tag </h2> found"
);
break
;
case
HTML_H3
:
printf
(
"Error: Unexpected tag </h3> found at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected tag </h3> found"
);
break
;
case
HTML_IMG
:
printf
(
"Error: Unexpected tag </img> found at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected tag </img> found"
);
break
;
case
HTML_HR
:
printf
(
"Error: Unexpected tag </hr> found at line %d
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unexpected tag </hr> found"
);
break
;
case
HTML_A
:
//printf("Error: Unexpected tag </a> found at line %d\n",
// doctokenizerYYlineno);
//warn(g_fileName,doctokenizerYYlineno,"Error: Unexpected tag </a> found");
// ignore </a> tag (can be part of <a name=...></a>
break
;
case
HTML_UNKNOWN
:
printf
(
"Error: Unsupported html tag </%s> found at line %d
\n
"
,
tagName
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported html tag </%s> found
"
,
tagName
.
data
());
break
;
default
:
// we should not get here!
...
...
@@ -3619,14 +3737,14 @@ reparsetoken:
}
else
{
printf
(
"Error: End of list marker found at line %
d "
"has invalid indent level
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: End of list marker foun
d "
"has invalid indent level
"
);
}
}
else
{
printf
(
"Error: End of list marker found at line %
d without any preceding "
"list items
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: End of list marker foun
d without any preceding "
"list items
"
);
}
break
;
case
TK_COMMAND
:
...
...
@@ -3726,8 +3844,8 @@ reparsetoken:
}
else
{
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
()
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Unsupported symbol %s found
"
,
g_token
->
name
.
data
());
}
break
;
}
...
...
@@ -3747,7 +3865,7 @@ endparagraph:
if
(
!
(
retval
==
0
||
retval
==
TK_NEWPARA
||
retval
==
TK_LISTITEM
||
retval
==
TK_ENDLIST
||
retval
>
RetVal_OK
))
printf
(
"DocPara::parse: Error retval=%x unexpected at line %d!
\n
"
,
retval
,
doctokenizerYYlineno
);
))
warn
(
g_fileName
,
doctokenizerYYlineno
,
"DocPara::parse: Error retval=%x unexpected"
,
retval
);
return
retval
;
}
...
...
@@ -3791,7 +3909,7 @@ int DocSection::parse()
}
if
(
retval
==
TK_LISTITEM
)
{
printf
(
"Error: Invalid list item found at line %d!
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Invalid list item found"
);
}
}
while
(
retval
!=
0
&&
retval
!=
RetVal_Section
&&
retval
!=
RetVal_Internal
);
if
(
lastPar
)
lastPar
->
markLast
();
...
...
@@ -3801,15 +3919,23 @@ int DocSection::parse()
{
SectionInfo
*
sec
=
Doxygen
::
sectionDict
[
g_token
->
sectionId
];
ASSERT
(
sec
!=
0
);
int
secLev
=
sec
->
type
==
SectionInfo
::
Subsection
?
2
:
1
;
int
secLev
=
1
;
switch
(
sec
->
type
)
{
case
SectionInfo
:
:
Section
:
secLev
=
1
;
break
;
case
SectionInfo
:
:
Subsection
:
secLev
=
2
;
break
;
case
SectionInfo
:
:
Subsubsection
:
secLev
=
3
;
break
;
case
SectionInfo
:
:
Paragraph
:
secLev
=
4
;
break
;
default
:
ASSERT
(
0
);
}
if
(
secLev
<=
level
())
// new section at same or lower level
{
break
;
}
if
(
secLev
!=
level
()
+
1
)
// new section at wrong level
{
printf
(
"Error: Expected level %d section, found a section "
"with level %d
at line %d.
\n
"
,
level
()
+
1
,
secLev
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Expected level %d section, found a section "
"with level %d
"
,
level
()
+
1
,
secLev
);
retval
=
0
;
// stop parsing any further.
break
;
}
...
...
@@ -3820,7 +3946,7 @@ int DocSection::parse()
retval
=
s
->
parse
();
}
}
ASSERT
(
retval
==
0
||
retval
==
RetVal_Section
);
ASSERT
(
retval
==
0
||
retval
==
RetVal_Section
||
retval
==
RetVal_Internal
);
DBG
((
"DocSection::parse() end
\n
"
));
DocNode
*
n
=
g_nodeStack
.
pop
();
...
...
@@ -3855,7 +3981,7 @@ void DocRoot::parse()
}
if
(
retval
==
TK_LISTITEM
)
{
printf
(
"Error: Invalid list item found at line %d!
\n
"
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Invalid list item found"
);
}
}
while
(
retval
!=
0
&&
retval
!=
RetVal_Section
&&
retval
!=
RetVal_Internal
);
if
(
lastPar
)
lastPar
->
markLast
();
...
...
@@ -3865,10 +3991,11 @@ void DocRoot::parse()
{
SectionInfo
*
sec
=
Doxygen
::
sectionDict
[
g_token
->
sectionId
];
ASSERT
(
sec
!=
0
);
if
(
sec
==
0
)
break
;
int
secLev
=
sec
->
type
==
SectionInfo
::
Subsection
?
2
:
1
;
if
(
secLev
!=
1
)
// wrong level
{
printf
(
"Error: Expected level 1 section, found a section with level %d at line %d.
\n
"
,
secLev
,
doctokenizerYYlineno
);
warn
(
g_fileName
,
doctokenizerYYlineno
,
"Error: Expected level 1 section, found a section with level %d"
,
secLev
);
break
;
}
else
...
...
@@ -3893,14 +4020,17 @@ void DocRoot::parse()
//--------------------------------------------------------------------------
DocNode
*
validatingParseDoc
(
const
char
*
fileName
,
int
startLine
,
const
char
*
context
,
const
char
*
input
)
const
char
*
context
,
MemberDef
*
md
,
const
char
*
input
)
{
printf
(
"---------------- input --------------------
\n
%s
\n
----------- end input -------------------
\n
"
,
input
);
//
printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",input);
printf
(
"========== validating %s at line %d
\n
"
,
fileName
,
startLine
);
//
printf("========== validating %s at line %d\n",fileName,startLine);
g_token
=
new
TokenInfo
;
g_context
=
context
;
g_fileName
=
fileName
;
g_memberDef
=
md
;
g_nodeStack
.
clear
();
g_styleStack
.
clear
();
g_inSeeBlock
=
FALSE
;
...
...
@@ -3908,6 +4038,9 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
g_includeFileText
.
resize
(
0
);
g_includeFileOffset
=
0
;
g_includeFileLength
=
0
;
g_hasParamCommand
=
FALSE
;
g_paramsFound
.
setAutoDelete
(
FALSE
);
g_paramsFound
.
clear
();
doctokenizerYYlineno
=
startLine
;
doctokenizerYYinit
(
input
);
...
...
@@ -3923,6 +4056,8 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
root
->
accept
(
v
);
}
checkUndocumentedParams
();
delete
g_token
;
// TODO: These should be called at the end of the program.
...
...
src/docparser.h
View file @
8d986f5d
...
...
@@ -27,6 +27,7 @@
#include "doctokenizer.h"
class
DocNode
;
class
MemberDef
;
//---------------------------------------------------------------------------
...
...
@@ -40,7 +41,8 @@ class DocNode;
* pointer is handed over to the caller.
*/
DocNode
*
validatingParseDoc
(
const
char
*
fileName
,
int
startLine
,
const
char
*
context
,
const
char
*
input
);
const
char
*
context
,
MemberDef
*
md
,
const
char
*
input
);
//---------------------------------------------------------------------------
...
...
@@ -380,9 +382,10 @@ class DocFormula : public DocNode
{
public
:
DocFormula
(
DocNode
*
parent
,
int
id
);
Kind
kind
()
const
{
return
Kind_Formula
;
}
QCString
name
()
const
{
return
m_name
;
}
QCString
text
()
const
{
return
m_text
;
}
Kind
kind
()
const
{
return
Kind_Formula
;
}
QCString
name
()
const
{
return
m_name
;
}
QCString
text
()
const
{
return
m_text
;
}
int
id
()
const
{
return
m_id
;
}
DocNode
*
parent
()
const
{
return
m_parent
;
}
void
accept
(
DocVisitor
*
v
)
{
v
->
visit
(
this
);
}
...
...
@@ -390,39 +393,42 @@ class DocFormula : public DocNode
DocNode
*
m_parent
;
QCString
m_name
;
QCString
m_text
;
int
m_id
;
};
//-----------------------------------------------------------------------
/*! @brief Node representing a entry in the index. */
class
DocCopy
:
public
CompAccept
<
DocCopy
>
,
public
DocNode
/*! @brief Node representing an entry in the index. */
class
DocIndexEntry
:
public
DocNode
{
public
:
DocCopy
(
DocNode
*
parent
,
const
QCString
&
link
)
:
m_parent
(
parent
),
m_link
(
link
)
{
}
DocIndexEntry
(
DocNode
*
parent
)
:
m_parent
(
parent
)
{
}
Kind
kind
()
const
{
return
Kind_IndexEntry
;
}
QCString
link
()
const
{
return
m_link
;
}
void
parse
();
int
parse
();
DocNode
*
parent
()
const
{
return
m_parent
;
}
void
accept
(
DocVisitor
*
v
)
{
CompAccept
<
DocCopy
>::
accept
(
this
,
v
);
}
void
accept
(
DocVisitor
*
v
)
{
v
->
visit
(
this
);
}
QCString
entry
()
{
return
m_entry
;
}
private
:
DocNode
*
m_parent
;
QCString
m_
link
;
QCString
m_
entry
;
};
//-----------------------------------------------------------------------
/*! @brief Node representing a entry in the index. */
class
Doc
IndexEntry
:
public
CompAccept
<
DocIndexEntr
y
>
,
public
DocNode
class
Doc
Copy
:
public
CompAccept
<
DocCop
y
>
,
public
DocNode
{
public
:
DocIndexEntry
(
DocNode
*
parent
)
:
m_parent
(
parent
)
{
}
DocCopy
(
DocNode
*
parent
,
const
QCString
&
link
)
:
m_parent
(
parent
),
m_link
(
link
)
{
}
Kind
kind
()
const
{
return
Kind_IndexEntry
;
}
int
parse
();
QCString
link
()
const
{
return
m_link
;
}
void
parse
();
DocNode
*
parent
()
const
{
return
m_parent
;
}
void
accept
(
DocVisitor
*
v
)
{
CompAccept
<
Doc
IndexEntr
y
>::
accept
(
this
,
v
);
}
void
accept
(
DocVisitor
*
v
)
{
CompAccept
<
Doc
Cop
y
>::
accept
(
this
,
v
);
}
private
:
DocNode
*
m_parent
;
QCString
m_link
;
};
/*! @brief Node representing an auto List */
...
...
@@ -866,7 +872,8 @@ class DocPara : public CompAccept<DocPara>, public DocNode
class
DocParamList
:
public
DocNode
{
public
:
DocParamList
(
DocNode
*
parent
)
:
m_parent
(
parent
)
DocParamList
(
DocNode
*
parent
,
DocParamSect
::
Type
t
)
:
m_parent
(
parent
)
,
m_type
(
t
)
{
m_paragraph
=
new
DocPara
(
this
);
}
virtual
~
DocParamList
()
{
delete
m_paragraph
;
}
...
...
@@ -874,6 +881,7 @@ class DocParamList : public DocNode
Kind
kind
()
const
{
return
Kind_ParamList
;
}
DocNode
*
parent
()
const
{
return
m_parent
;
}
const
QStrList
&
parameters
()
{
return
m_params
;
}
DocParamSect
::
Type
type
()
const
{
return
m_type
;
}
void
accept
(
DocVisitor
*
v
)
{
v
->
visitPre
(
this
);
...
...
@@ -882,9 +890,10 @@ class DocParamList : public DocNode
}
private
:
DocNode
*
m_parent
;
DocPara
*
m_paragraph
;
QStrList
m_params
;
DocNode
*
m_parent
;
DocPara
*
m_paragraph
;
QStrList
m_params
;
DocParamSect
::
Type
m_type
;
};
/*! @brief Node representing an item of a auto list */
...
...
@@ -1049,7 +1058,15 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
}
return
cols
;
}
void
accept
(
DocVisitor
*
v
)
{
CompAccept
<
DocHtmlTable
>::
accept
(
this
,
v
);
}
void
accept
(
DocVisitor
*
v
)
{
v
->
visitPre
(
this
);
QListIterator
<
DocNode
>
cli
(
m_children
);
DocNode
*
n
;
for
(
cli
.
toFirst
();(
n
=
cli
.
current
());
++
cli
)
n
->
accept
(
v
);
if
(
m_caption
)
m_caption
->
accept
(
v
);
v
->
visitPost
(
this
);
}
private
:
DocNode
*
m_parent
;
...
...
src/docvisitor.h
View file @
8d986f5d
...
...
@@ -87,6 +87,7 @@ class DocVisitor
virtual
void
visit
(
DocIncOperator
*
)
=
0
;
virtual
void
visit
(
DocFormula
*
)
=
0
;
virtual
void
visit
(
DocLinkedWord
*
)
=
0
;
virtual
void
visit
(
DocIndexEntry
*
)
=
0
;
/*! @name Visitor functions for internal nodes */
virtual
void
visitPre
(
DocAutoList
*
)
=
0
;
...
...
@@ -127,8 +128,6 @@ class DocVisitor
virtual
void
visitPost
(
DocHtmlTable
*
)
=
0
;
virtual
void
visitPre
(
DocHtmlCaption
*
)
=
0
;
virtual
void
visitPost
(
DocHtmlCaption
*
)
=
0
;
virtual
void
visitPre
(
DocIndexEntry
*
)
=
0
;
virtual
void
visitPost
(
DocIndexEntry
*
)
=
0
;
virtual
void
visitPre
(
DocInternal
*
)
=
0
;
virtual
void
visitPost
(
DocInternal
*
)
=
0
;
virtual
void
visitPre
(
DocHRef
*
)
=
0
;
...
...
src/dot.cpp
View file @
8d986f5d
...
...
@@ -1777,6 +1777,7 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir,
QCString
oldDir
=
convertToQCString
(
QDir
::
currentDirPath
());
// go to the html output directory (i.e. path)
QDir
::
setCurrent
(
outDir
);
//printf("Going to dir %s\n",QDir::currentDirPath().data());
//{ // copy input file to output dir.
// QFile inf(inFile,IO_ReadOnly);
...
...
src/htmldocvisitor.cpp
View file @
8d986f5d
...
...
@@ -23,6 +23,7 @@
#include "outputgen.h"
#include "code.h"
#include "dot.h"
#include "message.h"
HtmlDocVisitor
::
HtmlDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
)
:
m_t
(
t
),
m_ci
(
ci
),
m_insidePre
(
FALSE
),
m_hide
(
FALSE
)
...
...
@@ -82,18 +83,20 @@ void HtmlDocVisitor::visit(DocSymbol *s)
case
DocSymbol
:
:
Circ
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"circ;"
;
break
;
case
DocSymbol
:
:
Tilde
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"tilde;"
;
break
;
case
DocSymbol
:
:
Szlig
:
m_t
<<
"ß"
;
break
;
case
DocSymbol
:
:
Cedil
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"ced
u
l;"
;
break
;
case
DocSymbol
:
:
Cedil
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"ced
i
l;"
;
break
;
case
DocSymbol
:
:
Ring
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"ring;"
;
break
;
case
DocSymbol
:
:
Nbsp
:
m_t
<<
" "
;
break
;
default
:
printf
(
"Error: unknown symbol found
\n
"
);
err
(
"Error: unknown symbol found
\n
"
);
}
}
void
HtmlDocVisitor
::
visit
(
DocURL
*
u
)
{
if
(
m_hide
)
return
;
m_t
<<
"<a href=
\"
"
<<
u
->
url
()
<<
"
\"
>"
<<
u
->
url
()
<<
"</a>"
;
m_t
<<
"<a href=
\"
"
<<
u
->
url
()
<<
"
\"
>"
;
filter
(
u
->
url
());
m_t
<<
"</a>"
;
}
void
HtmlDocVisitor
::
visit
(
DocLineBreak
*
)
...
...
@@ -161,10 +164,10 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
}
}
void
HtmlDocVisitor
::
visit
(
DocAnchor
*
)
void
HtmlDocVisitor
::
visit
(
DocAnchor
*
anc
)
{
if
(
m_hide
)
return
;
m_t
<<
"<a name=
\"
%s
\"
/></a>"
;
m_t
<<
"<a name=
\"
"
/*<< anc->file() << "#"*/
<<
anc
->
anchor
()
<<
"
\"
/></a>"
;
}
void
HtmlDocVisitor
::
visit
(
DocInclude
*
inc
)
...
...
@@ -233,6 +236,10 @@ void HtmlDocVisitor::visit(DocFormula *f)
m_t
<<
" "
;
}
void
HtmlDocVisitor
::
visit
(
DocIndexEntry
*
)
{
}
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
...
...
@@ -376,8 +383,8 @@ void HtmlDocVisitor::visitPre(DocSection *s)
{
m_t
<<
"<h"
<<
s
->
level
()
+
1
<<
">"
;
m_t
<<
"<a name=
\"
"
<<
s
->
anchor
();
m_t
<<
"
\"
></a>"
<<
endl
;
filter
(
s
->
title
());
m_t
<<
"
\"
</a>"
<<
endl
;
m_t
<<
"</h"
<<
s
->
level
()
+
1
<<
">
\n
"
;
}
...
...
@@ -493,16 +500,6 @@ void HtmlDocVisitor::visitPost(DocHtmlCaption *)
m_t
<<
"</caption>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocIndexEntry
*
)
{
m_hide
=
TRUE
;
}
void
HtmlDocVisitor
::
visitPost
(
DocIndexEntry
*
)
{
m_hide
=
FALSE
;
}
void
HtmlDocVisitor
::
visitPre
(
DocInternal
*
)
{
m_t
<<
"<p><b>"
<<
theTranslator
->
trForInternalUseOnly
()
<<
"</b></p>"
<<
endl
;
...
...
src/htmldocvisitor.h
View file @
8d986f5d
...
...
@@ -48,6 +48,7 @@ class HtmlDocVisitor : public DocVisitor
void
visit
(
DocInclude
*
);
void
visit
(
DocIncOperator
*
);
void
visit
(
DocFormula
*
);
void
visit
(
DocIndexEntry
*
);
//--------------------------------------
// visitor functions for compound nodes
...
...
@@ -91,8 +92,6 @@ class HtmlDocVisitor : public DocVisitor
void
visitPost
(
DocHtmlCell
*
);
void
visitPre
(
DocHtmlCaption
*
);
void
visitPost
(
DocHtmlCaption
*
);
void
visitPre
(
DocIndexEntry
*
);
void
visitPost
(
DocIndexEntry
*
);
void
visitPre
(
DocInternal
*
);
void
visitPost
(
DocInternal
*
);
void
visitPre
(
DocHRef
*
);
...
...
src/htmlgen.cpp
View file @
8d986f5d
...
...
@@ -526,9 +526,11 @@ void HtmlGenerator::startSection(const char *lab,const char *,SectionInfo::Secti
{
switch
(
type
)
{
case
SectionInfo
:
:
Page
:
t
<<
"<h1>"
;
break
;
case
SectionInfo
:
:
Section
:
t
<<
"<h2>"
;
break
;
case
SectionInfo
:
:
Subsection
:
t
<<
"<h3>"
;
break
;
case
SectionInfo
:
:
Page
:
t
<<
"<h1>"
;
break
;
case
SectionInfo
:
:
Section
:
t
<<
"<h2>"
;
break
;
case
SectionInfo
:
:
Subsection
:
t
<<
"<h3>"
;
break
;
case
SectionInfo
:
:
Subsubsection
:
t
<<
"<h4>"
;
break
;
case
SectionInfo
:
:
Paragraph
:
t
<<
"<h5>"
;
break
;
default
:
ASSERT
(
0
);
break
;
}
t
<<
"<a name=
\"
"
<<
lab
<<
"
\"
>"
;
...
...
@@ -539,9 +541,11 @@ void HtmlGenerator::endSection(const char *,SectionInfo::SectionType type)
t
<<
"</a>"
<<
endl
;
switch
(
type
)
{
case
SectionInfo
:
:
Page
:
t
<<
"</h1>"
;
break
;
case
SectionInfo
:
:
Section
:
t
<<
"</h2>"
;
break
;
case
SectionInfo
:
:
Subsection
:
t
<<
"</h3>"
;
break
;
case
SectionInfo
:
:
Page
:
t
<<
"</h1>"
;
break
;
case
SectionInfo
:
:
Section
:
t
<<
"</h2>"
;
break
;
case
SectionInfo
:
:
Subsection
:
t
<<
"</h3>"
;
break
;
case
SectionInfo
:
:
Subsubsection
:
t
<<
"</h4>"
;
break
;
case
SectionInfo
:
:
Paragraph
:
t
<<
"</h5>"
;
break
;
default
:
ASSERT
(
0
);
break
;
}
}
...
...
src/latexdocvisitor.cpp
View file @
8d986f5d
...
...
@@ -24,6 +24,48 @@
#include "code.h"
#include "dot.h"
#include "util.h"
#include "message.h"
static
QCString
escapeLabelName
(
const
char
*
s
)
{
QCString
result
;
const
char
*
p
=
s
;
char
c
;
while
((
c
=*
p
++
))
{
switch
(
c
)
{
case
'%'
:
result
+=
"
\\
%"
;
break
;
case
'|'
:
result
+=
"
\\
texttt{
\"
|}"
;
break
;
case
'!'
:
result
+=
"
\"
!"
;
break
;
default:
result
+=
c
;
}
}
return
result
;
}
QCString
LatexDocVisitor
::
escapeMakeIndexChars
(
const
char
*
s
)
{
QCString
result
;
const
char
*
p
=
s
;
char
str
[
2
];
str
[
1
]
=
0
;
char
c
;
while
((
c
=*
p
++
))
{
switch
(
c
)
{
case
'!'
:
m_t
<<
"
\"
!"
;
break
;
case
'"'
:
m_t
<<
"
\"\"
"
;
break
;
case
'@'
:
m_t
<<
"
\"
@"
;
break
;
case
'|'
:
m_t
<<
"
\\
texttt{
\"
|}"
;
break
;
case
'['
:
m_t
<<
"["
;
break
;
case
']'
:
m_t
<<
"]"
;
break
;
default
:
str
[
0
]
=
c
;
filter
(
str
);
break
;
}
}
return
result
;
}
LatexDocVisitor
::
LatexDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
)
:
m_t
(
t
),
m_ci
(
ci
),
m_insidePre
(
FALSE
),
m_hide
(
FALSE
)
...
...
@@ -107,7 +149,7 @@ void LatexDocVisitor::visit(DocSymbol *s)
case
DocSymbol
:
:
Ring
:
m_t
<<
"
\\
"
<<
s
->
letter
()
<<
s
->
letter
();
break
;
case
DocSymbol
:
:
Nbsp
:
m_t
<<
"
\\
"
;
break
;
default
:
printf
(
"Error: unknown symbol found
\n
"
);
err
(
"Error: unknown symbol found
\n
"
);
}
}
...
...
@@ -249,6 +291,13 @@ void LatexDocVisitor::visit(DocFormula *f)
m_t
<<
f
->
text
();
}
void
LatexDocVisitor
::
visit
(
DocIndexEntry
*
i
)
{
m_t
<<
"
\\
index{"
<<
escapeLabelName
(
i
->
entry
())
<<
"@{"
;
escapeMakeIndexChars
(
i
->
entry
());
m_t
<<
"}}"
;
}
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
...
...
@@ -390,26 +439,24 @@ void LatexDocVisitor::visitPre(DocSection *s)
{
m_t
<<
"
\\
hypertarget{"
<<
s
->
file
()
<<
"_"
<<
s
->
anchor
()
<<
"}{}"
;
}
if
(
s
->
level
()
==
1
)
if
(
Config_getBool
(
"COMPACT_LATEX"
)
)
{
if
(
Config_getBool
(
"COMPACT_LATEX"
))
{
m_t
<<
"
\\
subsubsection{"
;
}
else
switch
(
s
->
level
())
{
m_t
<<
"
\\
subsection{"
;
case
1
:
m_t
<<
"
\\
subsubsection{"
;
break
;
case
2
:
m_t
<<
"
\\
paragraph{"
;
break
;
case
3
:
m_t
<<
"
\\
subparagraph{"
;
break
;
case
4
:
m_t
<<
"
\\
subparagraph{"
;
break
;
}
}
else
if
(
s
->
level
()
==
2
)
else
{
if
(
Config_getBool
(
"COMPACT_LATEX"
))
{
m_t
<<
"
\\
paragraph{"
;
}
else
switch
(
s
->
level
())
{
m_t
<<
"
\\
subsubsection{"
;
case
1
:
m_t
<<
"
\\
subsection{"
;
break
;
case
2
:
m_t
<<
"
\\
subsubsection{"
;
break
;
case
3
:
m_t
<<
"
\\
paragraph{"
;
break
;
case
4
:
m_t
<<
"
\\
subparagraph{"
;
break
;
}
}
filter
(
s
->
title
());
...
...
@@ -534,16 +581,6 @@ void LatexDocVisitor::visitPost(DocHtmlCell *c)
if
(
!
c
->
isLast
())
m_t
<<
"&"
;
}
void
LatexDocVisitor
::
visitPre
(
DocIndexEntry
*
)
{
m_hide
=
TRUE
;
}
void
LatexDocVisitor
::
visitPost
(
DocIndexEntry
*
)
{
m_hide
=
FALSE
;
}
void
LatexDocVisitor
::
visitPre
(
DocInternal
*
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
...
...
@@ -577,18 +614,18 @@ void LatexDocVisitor::visitPre(DocHtmlHeader *header)
{
switch
(
header
->
level
())
{
case
1
:
m_t
<<
"
\\
subsection{"
;
break
;
case
2
:
m_t
<<
"
\\
subsubsection{"
;
break
;
case
3
:
m_t
<<
"
\\
paragraph{"
;
break
;
case
1
:
m_t
<<
"
\\
subsection
*
{"
;
break
;
case
2
:
m_t
<<
"
\\
subsubsection
*
{"
;
break
;
case
3
:
m_t
<<
"
\\
paragraph
*
{"
;
break
;
}
}
else
{
switch
(
header
->
level
())
{
case
1
:
m_t
<<
"
\\
section{"
;
break
;
case
2
:
m_t
<<
"
\\
subsection{"
;
break
;
case
3
:
m_t
<<
"
\\
subsubsection{"
;
break
;
case
1
:
m_t
<<
"
\\
section
*
{"
;
break
;
case
2
:
m_t
<<
"
\\
subsection
*
{"
;
break
;
case
3
:
m_t
<<
"
\\
subsubsection
*
{"
;
break
;
}
}
}
...
...
src/latexdocvisitor.h
View file @
8d986f5d
...
...
@@ -48,6 +48,7 @@ class LatexDocVisitor : public DocVisitor
void
visit
(
DocInclude
*
);
void
visit
(
DocIncOperator
*
);
void
visit
(
DocFormula
*
);
void
visit
(
DocIndexEntry
*
);
//--------------------------------------
// visitor functions for compound nodes
...
...
@@ -91,8 +92,6 @@ class LatexDocVisitor : public DocVisitor
void
visitPost
(
DocHtmlRow
*
)
;
void
visitPre
(
DocHtmlCell
*
);
void
visitPost
(
DocHtmlCell
*
);
void
visitPre
(
DocIndexEntry
*
);
void
visitPost
(
DocIndexEntry
*
);
void
visitPre
(
DocInternal
*
);
void
visitPost
(
DocInternal
*
);
void
visitPre
(
DocHRef
*
);
...
...
@@ -134,6 +133,7 @@ class LatexDocVisitor : public DocVisitor
void
startLink
(
const
QCString
&
ref
,
const
QCString
&
file
,
const
QCString
&
anchor
);
void
endLink
();
QCString
escapeMakeIndexChars
(
const
char
*
s
);
//--------------------------------------
// state variables
...
...
src/latexgen.cpp
View file @
8d986f5d
...
...
@@ -1209,9 +1209,11 @@ void LatexGenerator::startSection(const char *lab,const char *,SectionInfo::Sect
{
switch
(
type
)
{
case
SectionInfo
:
:
Page
:
t
<<
"subsection"
;
break
;
case
SectionInfo
:
:
Section
:
t
<<
"subsubsection"
;
break
;
case
SectionInfo
:
:
Subsection
:
t
<<
"paragraph"
;
break
;
case
SectionInfo
:
:
Page
:
t
<<
"subsection"
;
break
;
case
SectionInfo
:
:
Section
:
t
<<
"subsubsection"
;
break
;
case
SectionInfo
:
:
Subsection
:
t
<<
"paragraph"
;
break
;
case
SectionInfo
:
:
Subsubsection
:
t
<<
"subparagraph"
;
break
;
case
SectionInfo
:
:
Paragraph
:
t
<<
"subparagraph"
;
break
;
default
:
ASSERT
(
0
);
break
;
}
t
<<
"{"
;
...
...
@@ -1220,9 +1222,11 @@ void LatexGenerator::startSection(const char *lab,const char *,SectionInfo::Sect
{
switch
(
type
)
{
case
SectionInfo
:
:
Page
:
t
<<
"section"
;
break
;
case
SectionInfo
:
:
Section
:
t
<<
"subsection"
;
break
;
case
SectionInfo
:
:
Subsection
:
t
<<
"subsubsection"
;
break
;
case
SectionInfo
:
:
Page
:
t
<<
"section"
;
break
;
case
SectionInfo
:
:
Section
:
t
<<
"subsection"
;
break
;
case
SectionInfo
:
:
Subsection
:
t
<<
"subsubsection"
;
break
;
case
SectionInfo
:
:
Subsubsection
:
t
<<
"paragraph"
;
break
;
case
SectionInfo
:
:
Paragraph
:
t
<<
"subparagraph"
;
break
;
default
:
ASSERT
(
0
);
break
;
}
t
<<
"{"
;
...
...
src/libdoxygen.pro.in
View file @
8d986f5d
...
...
@@ -114,7 +114,8 @@ HEADERS = bufstr.h \
unistd.h \
util.h \
version.h \
xmlgen.h
xmldocvisitor.h \
xmlgen.h
SOURCES = ce_lex.cpp \
ce_parse.cpp \
classdef.cpp \
...
...
@@ -174,6 +175,7 @@ SOURCES = ce_lex.cpp \
translator.cpp \
util.cpp \
version.cpp \
xmldocvisitor.cpp \
xmlgen.cpp
win32:TMAKE_CXXFLAGS += -DQT_NODLL
...
...
src/mangen.cpp
View file @
8d986f5d
...
...
@@ -28,6 +28,7 @@
#include "util.h"
#include "doxygen.h"
#include <string.h>
#include "docparser.h"
static
QCString
getExtension
()
{
...
...
@@ -542,9 +543,11 @@ void ManGenerator::startSection(const char *,const char *,SectionInfo::SectionTy
{
switch
(
type
)
{
case
SectionInfo
:
:
Page
:
startGroupHeader
();
break
;
case
SectionInfo
:
:
Section
:
startGroupHeader
();
break
;
case
SectionInfo
:
:
Subsection
:
startMemberHeader
();
break
;
case
SectionInfo
:
:
Page
:
startGroupHeader
();
break
;
case
SectionInfo
:
:
Section
:
startGroupHeader
();
break
;
case
SectionInfo
:
:
Subsection
:
startMemberHeader
();
break
;
case
SectionInfo
:
:
Subsubsection
:
startMemberHeader
();
break
;
case
SectionInfo
:
:
Paragraph
:
startMemberHeader
();
break
;
default
:
ASSERT
(
0
);
break
;
}
}
...
...
@@ -556,9 +559,11 @@ void ManGenerator::endSection(const char *,SectionInfo::SectionType type)
{
switch
(
type
)
{
case
SectionInfo
:
:
Page
:
endGroupHeader
();
break
;
case
SectionInfo
:
:
Section
:
endGroupHeader
();
break
;
case
SectionInfo
:
:
Subsection
:
endMemberHeader
();
break
;
case
SectionInfo
:
:
Page
:
endGroupHeader
();
break
;
case
SectionInfo
:
:
Section
:
endGroupHeader
();
break
;
case
SectionInfo
:
:
Subsection
:
endMemberHeader
();
break
;
case
SectionInfo
:
:
Subsubsection
:
endMemberHeader
();
break
;
case
SectionInfo
:
:
Paragraph
:
endMemberHeader
();
break
;
default
:
ASSERT
(
0
);
break
;
}
}
...
...
@@ -608,3 +613,7 @@ void ManGenerator::endParamList()
{
}
void
ManGenerator
::
printDoc
(
DocNode
*
)
{
}
src/mangen.h
View file @
8d986f5d
...
...
@@ -39,6 +39,8 @@ class ManGenerator : public OutputGenerator
bool
isEnabled
(
OutputType
o
)
{
return
(
o
==
Man
&&
active
);
}
OutputGenerator
*
get
(
OutputType
o
)
{
return
(
o
==
Man
)
?
this
:
0
;
}
void
printDoc
(
DocNode
*
);
static
void
init
();
void
startFile
(
const
char
*
name
,
const
char
*
manName
,
const
char
*
title
,
bool
external
);
...
...
src/outputgen.h
View file @
8d986f5d
...
...
@@ -323,7 +323,7 @@ class OutputGenerator : public BaseOutputDocInterface
void
pushGeneratorState
();
void
popGeneratorState
();
virtual
void
printDoc
(
DocNode
*
)
{}
virtual
void
printDoc
(
DocNode
*
)
=
0
;
///////////////////////////////////////////////////////////////
// structural output interface
...
...
src/outputlist.cpp
View file @
8d986f5d
...
...
@@ -192,13 +192,22 @@ void OutputList::popGeneratorState()
}
void
OutputList
::
parseDoc
(
const
char
*
fileName
,
int
startLine
,
const
char
*
clName
,
MemberDef
*
/*md*/
,
const
char
*
clName
,
MemberDef
*
md
,
const
QCString
&
docStr
)
{
DocNode
*
root
=
validatingParseDoc
(
fileName
,
startLine
,
clName
,
docStr
);
int
count
=
0
;
OutputGenerator
*
og
=
outputs
->
first
();
while
(
og
)
{
if
(
og
->
isEnabled
())
count
++
;
og
=
outputs
->
next
();
}
if
(
count
==
0
)
return
;
// no output formats enabled.
DocNode
*
root
=
validatingParseDoc
(
fileName
,
startLine
,
clName
,
md
,
docStr
);
og
=
outputs
->
first
();
while
(
og
)
{
if
(
og
->
isEnabled
())
og
->
printDoc
(
root
);
og
=
outputs
->
next
();
...
...
src/pre.l
View file @
8d986f5d
...
...
@@ -98,6 +98,7 @@ static bool g_nospaces; // add extra spaces during macro expansion
static bool g_macroExpansion; // from the configuration
static bool g_expandOnlyPredef; // from the configuration
static int g_commentCount;
static void setFileName(const char *name)
...
...
@@ -1613,6 +1614,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
g_defText+=' ';
g_defLitText+=' ';
g_lastCContext=YY_START;
g_commentCount=1;
BEGIN(SkipCComment);
}
<DefineText>"//" {
...
...
@@ -1622,16 +1624,20 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(SkipCPPComment);
}
<SkipCComment>"*/" {
outputChar('*');outputChar('/');
BEGIN(g_lastCContext);
if (--g_commentCount<=0)
{
outputChar('*');outputChar('/');
BEGIN(g_lastCContext);
}
}
<SkipCComment>"//" {
outputChar('/');outputChar('/');
}
<SkipCComment>"/*" {
outputChar('/');outputChar('*');
g_commentCount++;
}
<SkipCComment>[^*\n]+ {
<SkipCComment>[^*\n
\/
]+ {
outputArray(yytext,yyleng);
}
<SkipCComment>\n {
...
...
@@ -1809,6 +1815,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<*>"/*" {
outputChar('/');outputChar('*');
g_lastCContext=YY_START;
g_commentCount=1;
BEGIN(SkipCComment);
}
<*>"//" {
...
...
src/printdocvisitor.h
View file @
8d986f5d
...
...
@@ -178,6 +178,11 @@ class PrintDocVisitor : public DocVisitor
indent_leaf
();
printf
(
"<formula name=%s test=%s/>"
,
f
->
name
().
data
(),
f
->
text
().
data
());
}
void
visit
(
DocIndexEntry
*
i
)
{
indent_leaf
();
printf
(
"<indexentry>%s</indexentry
\n
"
,
i
->
entry
().
data
());
}
//--------------------------------------
...
...
@@ -408,16 +413,6 @@ class PrintDocVisitor : public DocVisitor
indent_post
();
printf
(
"</caption>
\n
"
);
}
void
visitPre
(
DocIndexEntry
*
)
{
indent_pre
();
printf
(
"<indexentry>
\n
"
);
}
void
visitPost
(
DocIndexEntry
*
)
{
indent_post
();
printf
(
"</indexentry>
\n
"
);
}
void
visitPre
(
DocInternal
*
)
{
indent_pre
();
...
...
src/rtfdocvisitor.cpp
View file @
8d986f5d
...
...
@@ -25,6 +25,7 @@
#include "dot.h"
#include "util.h"
#include "rtfstyle.h"
#include "message.h"
RTFDocVisitor
::
RTFDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
)
:
m_t
(
t
),
m_ci
(
ci
),
m_insidePre
(
FALSE
),
m_hide
(
FALSE
),
m_indentLevel
(
0
)
...
...
@@ -40,6 +41,16 @@ QCString RTFDocVisitor::getStyle(const char *name)
return
sd
->
reference
;
}
void
RTFDocVisitor
::
incIndentLevel
()
{
if
(
m_indentLevel
<
rtf_maxIndentLevels
-
1
)
m_indentLevel
++
;
}
void
RTFDocVisitor
::
decIndentLevel
()
{
if
(
m_indentLevel
>
0
)
m_indentLevel
--
;
}
//--------------------------------------
// visitor functions for leaf nodes
//--------------------------------------
...
...
@@ -179,7 +190,7 @@ void RTFDocVisitor::visit(DocSymbol *s)
case
DocSymbol
:
:
Szlig
:
m_t
<<
"
\337
"
;
break
;
case
DocSymbol
:
:
Nbsp
:
m_t
<<
"
\\
~ "
;
break
;
default
:
printf
(
"Error: unknown symbol found
\n
"
);
err
(
"Error: unknown symbol found
\n
"
);
}
}
...
...
@@ -188,12 +199,19 @@ void RTFDocVisitor::visit(DocURL *u)
if
(
m_hide
)
return
;
if
(
Config_getBool
(
"RTF_HYPERLINKS"
))
{
m_t
<<
"{
\\
field {
\\
*
\\
fldinst { HYPERLINK
\\\\
l
\"
"
;
m_t
<<
"{
\\
field "
"{
\\
*
\\
fldinst "
"{ HYPERLINK
\\\\
l
\"
"
;
m_t
<<
u
->
url
();
m_t
<<
"
\"
}{}"
;
m_t
<<
"}{
\\
fldrslt {
\\
cs37
\\
ul
\\
cf2 "
;
m_t
<<
"
\"
}"
"{}"
;
m_t
<<
"}"
"{
\\
fldrslt "
"{
\\
cs37
\\
ul
\\
cf2 "
;
filter
(
u
->
url
());
m_t
<<
"}}}"
<<
endl
;
m_t
<<
"}"
"}"
"}"
<<
endl
;
}
else
{
...
...
@@ -277,12 +295,21 @@ void RTFDocVisitor::visit(DocVerbatim *s)
void
RTFDocVisitor
::
visit
(
DocAnchor
*
anc
)
{
if
(
m_hide
)
return
;
m_t
<<
"
\\
label{"
<<
anc
->
anchor
()
<<
"}"
<<
endl
;
if
(
!
anc
->
file
().
isEmpty
()
&&
Config_getBool
(
"PDF_HYPERLINKS"
))
QCString
anchor
;
if
(
!
anc
->
file
().
isEmpty
()
)
{
m_t
<<
"
\\
hypertarget{"
<<
anc
->
file
()
<<
"_"
<<
anc
->
anchor
()
<<
"}{}"
<<
endl
;
}
anchor
+=
anc
->
file
();
}
if
(
!
anc
->
file
().
isEmpty
()
&&
!
anc
->
anchor
().
isEmpty
())
{
anchor
+=
"_"
;
}
if
(
!
anc
->
anchor
().
isEmpty
())
{
anchor
+=
anc
->
anchor
();
}
m_t
<<
"{
\\
bkmkstart "
<<
rtfFormatBmkStr
(
anchor
)
<<
"}"
<<
endl
;
m_t
<<
"{
\\
bkmkend "
<<
rtfFormatBmkStr
(
anchor
)
<<
"}"
<<
endl
;
}
void
RTFDocVisitor
::
visit
(
DocInclude
*
inc
)
...
...
@@ -291,18 +318,24 @@ void RTFDocVisitor::visit(DocInclude *inc)
switch
(
inc
->
type
())
{
case
DocInclude
:
:
Include
:
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
m_t
<<
"{"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"CodeExample"
);
parseCode
(
m_ci
,
inc
->
context
(),
inc
->
text
(),
FALSE
,
0
);
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"}"
<<
endl
;
break
;
case
DocInclude
:
:
DontInclude
:
break
;
case
DocInclude
:
:
HtmlInclude
:
break
;
case
DocInclude
:
:
VerbInclude
:
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
m_t
<<
"{"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"CodeExample"
);
m_t
<<
inc
->
text
();
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"}"
<<
endl
;
break
;
}
}
...
...
@@ -313,7 +346,9 @@ void RTFDocVisitor::visit(DocIncOperator *op)
// op->type(),op->isFirst(),op->isLast(),op->text().data());
if
(
op
->
isFirst
())
{
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
m_t
<<
"{"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"CodeExample"
);
m_hide
=
TRUE
;
}
if
(
op
->
type
()
!=
DocIncOperator
::
Skip
)
...
...
@@ -323,7 +358,8 @@ void RTFDocVisitor::visit(DocIncOperator *op)
if
(
op
->
isLast
())
{
m_hide
=
FALSE
;
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"}"
<<
endl
;
}
else
{
...
...
@@ -334,42 +370,50 @@ void RTFDocVisitor::visit(DocIncOperator *op)
void
RTFDocVisitor
::
visit
(
DocFormula
*
f
)
{
if
(
m_hide
)
return
;
// TODO: do something sensible here, like including a bitmap
m_t
<<
f
->
text
();
}
void
RTFDocVisitor
::
visit
(
DocIndexEntry
*
i
)
{
m_t
<<
"{
\\
xe
\\
v "
<<
i
->
entry
()
<<
"}"
<<
endl
;
}
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
void
RTFDocVisitor
::
visitPre
(
DocAutoList
*
l
)
{
if
(
l
->
isEnumList
())
{
m_t
<<
"
\\
begin{enumerate}"
<<
endl
;
}
else
{
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
}
m_t
<<
"{"
<<
endl
;
incIndentLevel
();
rtf_listItemInfo
[
m_indentLevel
].
isEnum
=
l
->
isEnumList
();
rtf_listItemInfo
[
m_indentLevel
].
number
=
1
;
}
void
RTFDocVisitor
::
visitPost
(
DocAutoList
*
l
)
void
RTFDocVisitor
::
visitPost
(
DocAutoList
*
)
{
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"}"
<<
endl
;
decIndentLevel
();
}
void
RTFDocVisitor
::
visitPre
(
DocAutoListItem
*
)
{
if
(
l
->
isEnumList
())
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
rtf_Style_Reset
;
if
(
rtf_listItemInfo
[
m_indentLevel
].
isEnum
)
{
m_t
<<
"
\\
end{enumerate}"
<<
endl
;
m_t
<<
getStyle
(
"ListEnum"
)
<<
endl
;
m_t
<<
rtf_listItemInfo
[
m_indentLevel
].
number
<<
".
\\
tab "
;
rtf_listItemInfo
[
m_indentLevel
].
number
++
;
}
else
{
m_t
<<
"
\\
end{itemize}"
<<
endl
;
m_t
<<
getStyle
(
"ListBullet"
)
<<
endl
;
}
}
void
RTFDocVisitor
::
visitPre
(
DocAutoListItem
*
)
{
m_t
<<
"
\\
item "
;
}
void
RTFDocVisitor
::
visitPost
(
DocAutoListItem
*
)
{
}
...
...
@@ -384,7 +428,7 @@ void RTFDocVisitor::visitPost(DocPara *p)
!
(
p
->
parent
()
&&
// and for parameter sections
p
->
parent
()
->
kind
()
==
DocNode
::
Kind_ParamSect
)
)
m_t
<<
endl
<<
endl
;
)
m_t
<<
"
\\
par"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocRoot
*
)
...
...
@@ -397,7 +441,8 @@ void RTFDocVisitor::visitPost(DocRoot *)
void
RTFDocVisitor
::
visitPre
(
DocSimpleSect
*
s
)
{
m_t
<<
"
\\
begin{Desc}
\n\\
item["
;
m_t
<<
"{"
;
// start desc
m_t
<<
"{
\\
b "
;
// start bold
switch
(
s
->
type
())
{
case
DocSimpleSect
:
:
See
:
...
...
@@ -435,13 +480,18 @@ void RTFDocVisitor::visitPre(DocSimpleSect *s)
// special case 1: user defined title
if
(
s
->
type
()
!=
DocSimpleSect
::
User
)
{
m_t
<<
":]"
;
m_t
<<
":}"
;
// end bold
m_t
<<
"
\\
par"
<<
endl
;
incIndentLevel
();
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"DescContinue"
);
}
}
void
RTFDocVisitor
::
visitPost
(
DocSimpleSect
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
decIndentLevel
();
m_t
<<
"}"
;
// end desc
}
void
RTFDocVisitor
::
visitPre
(
DocTitle
*
)
...
...
@@ -450,22 +500,29 @@ void RTFDocVisitor::visitPre(DocTitle *)
void
RTFDocVisitor
::
visitPost
(
DocTitle
*
)
{
m_t
<<
"]"
;
m_t
<<
"}"
;
// end bold
m_t
<<
"
\\
par"
<<
endl
;
incIndentLevel
();
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"DescContinue"
);
}
void
RTFDocVisitor
::
visitPre
(
DocSimpleList
*
)
{
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
m_t
<<
"{"
<<
endl
;
incIndentLevel
();
rtf_listItemInfo
[
m_indentLevel
].
isEnum
=
FALSE
;
}
void
RTFDocVisitor
::
visitPost
(
DocSimpleList
*
)
{
m_t
<<
"
\\
end{itemize}"
<<
endl
;
decIndentLevel
();
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocSimpleListItem
*
)
{
m_t
<<
"
\\
item "
;
m_t
<<
"
\\
par"
<<
rtf_Style_Reset
<<
getStyle
(
"ListBullet"
)
<<
endl
;
}
void
RTFDocVisitor
::
visitPost
(
DocSimpleListItem
*
)
...
...
@@ -474,59 +531,53 @@ void RTFDocVisitor::visitPost(DocSimpleListItem *)
void
RTFDocVisitor
::
visitPre
(
DocSection
*
s
)
{
if
(
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
hypertarget{"
<<
s
->
file
()
<<
"_"
<<
s
->
anchor
()
<<
"}{}"
;
}
if
(
s
->
level
()
==
1
)
{
if
(
Config_getBool
(
"COMPACT_LATEX"
))
{
m_t
<<
"
\\
subsubsection{"
;
}
else
{
m_t
<<
"
\\
subsection{"
;
}
}
else
if
(
s
->
level
()
==
2
)
{
if
(
Config_getBool
(
"COMPACT_LATEX"
))
{
m_t
<<
"
\\
paragraph{"
;
}
else
{
m_t
<<
"
\\
subsubsection{"
;
}
}
m_t
<<
"{"
// start section
<<
rtf_Style_Reset
;
QCString
heading
;
int
level
=
QMIN
(
s
->
level
()
+
2
,
4
);
heading
.
sprintf
(
"Heading%d"
,
level
);
// set style
m_t
<<
rtf_Style
[
heading
]
->
reference
;
// make table of contents entry
m_t
<<
"{
\\
tc
\\
tcl"
<<
level
<<
"
\\
v "
;
filter
(
s
->
title
());
m_t
<<
"}
\\
label{"
<<
s
->
anchor
()
<<
"}
"
<<
endl
;
m_t
<<
"}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPost
(
DocSection
*
)
{
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"}"
;
// end section
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlList
*
s
)
void
RTFDocVisitor
::
visitPre
(
DocHtmlList
*
l
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"
\\
begin{enumerate}"
<<
endl
;
else
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
m_t
<<
"{"
<<
endl
;
incIndentLevel
();
rtf_listItemInfo
[
m_indentLevel
].
isEnum
=
l
->
type
()
==
DocHtmlList
::
Ordered
;
rtf_listItemInfo
[
m_indentLevel
].
number
=
1
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlList
*
s
)
void
RTFDocVisitor
::
visitPost
(
DocHtmlList
*
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"
\\
end{enumerate}"
<<
endl
;
else
m_t
<<
"
\\
end{itemize}"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
<<
"}"
<<
endl
;
decIndentLevel
();
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlListItem
*
)
{
m_t
<<
"
\\
item "
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
rtf_Style_Reset
;
if
(
rtf_listItemInfo
[
m_indentLevel
].
isEnum
)
{
m_t
<<
getStyle
(
"ListEnum"
)
<<
endl
;
m_t
<<
rtf_listItemInfo
[
m_indentLevel
].
number
<<
".
\\
tab "
;
rtf_listItemInfo
[
m_indentLevel
].
number
++
;
}
else
{
m_t
<<
getStyle
(
"ListBullet"
)
<<
endl
;
}
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlListItem
*
)
...
...
@@ -535,34 +586,41 @@ void RTFDocVisitor::visitPost(DocHtmlListItem *)
void
RTFDocVisitor
::
visitPre
(
DocHtmlPre
*
)
{
m_t
<<
"
\\
small
\\
begin{alltt}"
;
m_t
<<
"{"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"CodeExample"
);
m_insidePre
=
TRUE
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlPre
*
)
{
m_insidePre
=
FALSE
;
m_t
<<
"
\\
end{alltt}
\\
normalsize "
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlDescList
*
)
{
m_t
<<
"
\\
begin{description}"
<<
endl
;
m_t
<<
"{"
<<
endl
;
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"ListContinue"
);
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlDescList
*
)
{
m_t
<<
"
\\
end{description}"
<<
endl
;
m_t
<<
"}"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlDescTitle
*
)
{
m_t
<<
"
\\
item["
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"{
\\
b "
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlDescTitle
*
)
{
m_t
<<
"]"
;
m_t
<<
"}"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlDescData
*
)
...
...
@@ -573,173 +631,163 @@ void RTFDocVisitor::visitPost(DocHtmlDescData *)
{
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlTable
*
t
)
void
RTFDocVisitor
::
visitPre
(
DocHtmlTable
*
)
{
if
(
t
->
hasCaption
())
{
m_t
<<
"
\\
begin{table}[h]"
;
}
m_t
<<
"
\\
begin{TabularC}{"
<<
t
->
numCols
()
<<
"}
\n\\
hline
\n
"
;
m_t
<<
"
\\
par"
<<
endl
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlTable
*
t
)
{
if
(
t
->
hasCaption
())
if
(
!
t
->
hasCaption
())
{
m_t
<<
"
\\
end{table}
\n
"
;
}
else
{
m_t
<<
"
\\\\\\
hline
\n\\
end{TabularC}
\n
"
;
m_t
<<
endl
;
m_t
<<
"
\\
pard
\\
widctlpar
\\
intbl
\\
adjustright"
<<
endl
;
m_t
<<
"{
\\
row }"
<<
endl
;
}
m_t
<<
"
\\
pard"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlCaption
*
)
{
m_t
<<
"
\\\\\\
hline
\n\\
end{TabularC}
\n\\
centering
\n\\
caption{"
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlCaption
*
)
{
m_t
<<
"}
\n
"
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlRow
*
)
void
RTFDocVisitor
::
visitPre
(
DocHtmlRow
*
r
)
{
uint
i
,
columnWidth
=
rtf_pageWidth
/
r
->
numCells
();
m_t
<<
"
\\
trowd
\\
trgaph108
\\
trleft-108"
"
\\
trbrdrt
\\
brdrs
\\
brdrw10 "
"
\\
trbrdrl
\\
brdrs
\\
brdrw10 "
"
\\
trbrdrb
\\
brdrs
\\
brdrw10 "
"
\\
trbrdrr
\\
brdrs
\\
brdrw10 "
"
\\
trbrdrh
\\
brdrs
\\
brdrw10 "
"
\\
trbrdrv
\\
brdrs
\\
brdrw10 "
<<
endl
;
for
(
i
=
0
;
i
<
r
->
numCells
();
i
++
)
{
m_t
<<
"
\\
clvertalt
\\
clbrdrt
\\
brdrs
\\
brdrw10 "
"
\\
clbrdrl
\\
brdrs
\\
brdrw10 "
"
\\
clbrdrb
\\
brdrs
\\
brdrw10 "
"
\\
clbrdrr
\\
brdrs
\\
brdrw10 "
"
\\
cltxlrtb "
"
\\
cellx"
<<
(
i
*
columnWidth
)
<<
endl
;
}
m_t
<<
"
\\
pard
\\
widctlpar
\\
intbl
\\
adjustright"
<<
endl
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlRow
*
)
{
m_t
<<
"
\\\\\\
hline
\n
"
;
m_t
<<
endl
;
m_t
<<
"
\\
pard
\\
widctlpar
\\
intbl
\\
adjustright"
<<
endl
;
m_t
<<
"{
\\
row }"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlCell
*
)
{
m_t
<<
"{"
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlCell
*
c
)
{
if
(
!
c
->
isLast
())
m_t
<<
"&"
;
}
void
RTFDocVisitor
::
visitPre
(
DocIndexEntry
*
)
void
RTFDocVisitor
::
visitPost
(
DocHtmlCell
*
)
{
m_hide
=
TRUE
;
}
void
RTFDocVisitor
::
visitPost
(
DocIndexEntry
*
)
{
m_hide
=
FALSE
;
m_t
<<
"
\\
cell }"
;
}
void
RTFDocVisitor
::
visitPre
(
DocInternal
*
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
<<
"
\\
item["
<<
theTranslator
->
trForInternalUseOnly
()
<<
"]"
<<
endl
;
m_t
<<
"{"
;
// start desc
m_t
<<
"{
\\
b "
;
// start bold
m_t
<<
theTranslator
->
trForInternalUseOnly
();
m_t
<<
"}"
;
// end bold
m_t
<<
"
\\
par"
<<
endl
;
incIndentLevel
();
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"DescContinue"
);
}
void
RTFDocVisitor
::
visitPost
(
DocInternal
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
decIndentLevel
();
m_t
<<
"}"
;
// end desc
}
void
RTFDocVisitor
::
visitPre
(
DocHRef
*
href
)
{
if
(
Config_getBool
(
"
PD
F_HYPERLINKS"
))
if
(
Config_getBool
(
"
RT
F_HYPERLINKS"
))
{
m_t
<<
"
\\
href{"
;
m_t
<<
href
->
url
();
m_t
<<
"}"
;
m_t
<<
"{
\\
field "
"{
\\
*
\\
fldinst "
"{ HYPERLINK
\\\\
l
\"
"
<<
href
->
url
()
<<
"
\"
"
"}{}"
"}"
"{
\\
fldrslt "
"{
\\
cs37
\\
ul
\\
cf2 "
;
}
else
{
m_t
<<
"{
\\
f2 "
;
}
m_t
<<
"{
\\
tt "
;
}
void
RTFDocVisitor
::
visitPost
(
DocHRef
*
)
{
m_t
<<
"}"
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlHeader
*
header
)
{
if
(
Config_getBool
(
"COMPACT_LATEX"
))
{
switch
(
header
->
level
())
{
case
1
:
m_t
<<
"
\\
subsection{"
;
break
;
case
2
:
m_t
<<
"
\\
subsubsection{"
;
break
;
case
3
:
m_t
<<
"
\\
paragraph{"
;
break
;
}
if
(
Config_getBool
(
"RTF_HYPERLINKS"
))
{
m_t
<<
"}"
"}"
"}"
;
}
else
{
switch
(
header
->
level
())
{
case
1
:
m_t
<<
"
\\
section{"
;
break
;
case
2
:
m_t
<<
"
\\
subsection{"
;
break
;
case
3
:
m_t
<<
"
\\
subsubsection{"
;
break
;
}
m_t
<<
"}"
;
}
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlHeader
*
header
)
{
m_t
<<
"{"
// start section
<<
rtf_Style_Reset
;
QCString
heading
;
int
level
=
QMIN
(
header
->
level
()
+
2
,
4
);
heading
.
sprintf
(
"Heading%d"
,
level
);
// set style
m_t
<<
rtf_Style
[
heading
]
->
reference
;
// make table of contents entry
m_t
<<
"{
\\
tc
\\
tcl
\\
v "
<<
level
<<
"}"
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlHeader
*
)
{
m_t
<<
"}"
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"}"
<<
endl
;
// end section
}
void
RTFDocVisitor
::
visitPre
(
DocImage
*
img
)
{
if
(
img
->
type
()
==
DocImage
::
Latex
)
if
(
img
->
type
()
==
DocImage
::
Rtf
)
{
if
(
img
->
hasCaption
())
{
m_t
<<
"
\\
begin{figure}[H]"
<<
endl
;
m_t
<<
"
\\
begin{center}"
<<
endl
;
}
else
{
m_t
<<
"
\\
mbox{"
;
}
QCString
gfxName
=
img
->
name
();
if
(
gfxName
.
right
(
4
)
==
".eps"
||
gfxName
.
right
(
4
)
==
".pdf"
)
{
gfxName
=
gfxName
.
left
(
gfxName
.
length
()
-
4
);
}
m_t
<<
"
\\
includegraphics"
;
if
(
!
img
->
width
().
isEmpty
())
{
m_t
<<
"[width="
<<
img
->
width
()
<<
"]"
;
}
else
if
(
!
img
->
height
().
isEmpty
())
{
m_t
<<
"[height="
<<
img
->
height
()
<<
"]"
;
}
m_t
<<
"{"
<<
gfxName
<<
"}"
;
if
(
img
->
hasCaption
())
{
m_t
<<
"
\\
caption{"
;
}
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"{"
<<
endl
;
m_t
<<
rtf_Style_Reset
<<
endl
;
m_t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
m_t
<<
img
->
name
();
m_t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
m_t
<<
"}"
<<
endl
;
}
else
// other format -> skip
{
m_hide
=
TRUE
;
}
// hide caption since it is not supported at the moment
m_hide
=
TRUE
;
}
void
RTFDocVisitor
::
visitPost
(
DocImage
*
img
)
void
RTFDocVisitor
::
visitPost
(
DocImage
*
)
{
if
(
img
->
type
()
==
DocImage
::
Latex
)
{
m_t
<<
"}"
<<
endl
;
// end mbox or caption
if
(
img
->
hasCaption
())
{
m_t
<<
"
\\
end{center}"
<<
endl
;
m_t
<<
"
\\
end{figure}"
<<
endl
;
}
}
else
// other format
{
m_hide
=
FALSE
;
}
m_hide
=
FALSE
;
}
void
RTFDocVisitor
::
visitPre
(
DocDotFile
*
df
)
...
...
@@ -750,46 +798,23 @@ void RTFDocVisitor::visitPre(DocDotFile *df)
{
baseName
=
baseName
.
right
(
baseName
.
length
()
-
i
-
1
);
}
if
(
baseName
.
right
(
4
)
==
".eps"
||
baseName
.
right
(
4
)
==
".pdf"
)
{
baseName
=
baseName
.
left
(
baseName
.
length
()
-
4
);
}
QCString
outDir
=
Config_getString
(
"LATEX_OUTPUT"
);
writeDotGraphFromFile
(
df
->
file
(),
outDir
,
baseName
,
EPS
);
if
(
df
->
hasCaption
())
{
m_t
<<
"
\\
begin{figure}[H]"
<<
endl
;
m_t
<<
"
\\
begin{center}"
<<
endl
;
}
else
{
m_t
<<
"
\\
mbox{"
;
}
m_t
<<
"
\\
includegraphics"
;
if
(
!
df
->
width
().
isEmpty
())
{
m_t
<<
"[width="
<<
df
->
width
()
<<
"]"
;
}
else
if
(
!
df
->
height
().
isEmpty
())
{
m_t
<<
"[height="
<<
df
->
height
()
<<
"]"
;
}
m_t
<<
"{"
<<
baseName
<<
"}"
;
QCString
outDir
=
Config_getString
(
"RTF_OUTPUT"
);
writeDotGraphFromFile
(
df
->
file
(),
outDir
,
baseName
,
BITMAP
);
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"{"
<<
endl
;
m_t
<<
rtf_Style_Reset
<<
endl
;
m_t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
m_t
<<
outDir
<<
"
\\
"
<<
baseName
;
m_t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
m_t
<<
"}"
<<
endl
;
if
(
df
->
hasCaption
())
{
m_t
<<
"
\\
caption{"
;
}
// hide caption since it is not supported at the moment
m_hide
=
TRUE
;
}
void
RTFDocVisitor
::
visitPost
(
DocDotFile
*
df
)
void
RTFDocVisitor
::
visitPost
(
DocDotFile
*
)
{
m_t
<<
"}"
<<
endl
;
// end mbox or caption
if
(
df
->
hasCaption
())
{
m_t
<<
"
\\
end{center}"
<<
endl
;
m_t
<<
"
\\
end{figure}"
<<
endl
;
}
m_hide
=
FALSE
;
}
void
RTFDocVisitor
::
visitPre
(
DocLink
*
lnk
)
...
...
@@ -814,28 +839,28 @@ void RTFDocVisitor::visitPost(DocRef *ref)
m_t
<<
" "
;
}
void
RTFDocVisitor
::
visitPre
(
DocSecRefItem
*
)
{
m_t
<<
"
\\
item
\\
contentsline{section}{"
;
}
void
RTFDocVisitor
::
visitPost
(
DocSecRefItem
*
ref
)
void
RTFDocVisitor
::
visitPost
(
DocSecRefItem
*
)
{
m_t
<<
"}{
\\
ref{"
<<
ref
->
anchor
()
<<
"}}{}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocSecRefList
*
)
{
m_t
<<
"
\\
footnotesize"
<<
endl
;
m_t
<<
"
\\
begin{multicols}{2}"
<<
endl
;
m_t
<<
"
\\
begin{CompactList}"
<<
endl
;
m_t
<<
"{"
<<
endl
;
incIndentLevel
();
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"LatexTOC"
)
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
}
void
RTFDocVisitor
::
visitPost
(
DocSecRefList
*
)
{
m_t
<<
"
\\
end{CompactList}"
<<
endl
;
m_t
<<
"
\\
end{multicols}
"
<<
endl
;
m_t
<<
"
\\
normalsize"
<<
endl
;
decIndentLevel
()
;
m_t
<<
"
\\
par
"
<<
endl
;
m_t
<<
"
}"
;
}
void
RTFDocVisitor
::
visitPre
(
DocLanguage
*
)
...
...
@@ -848,8 +873,9 @@ void RTFDocVisitor::visitPost(DocLanguage *)
void
RTFDocVisitor
::
visitPre
(
DocParamSect
*
s
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
;
m_t
<<
"
\\
item["
;
m_t
<<
"{"
;
// start param list
m_t
<<
"{
\\
b "
;
// start bold
m_t
<<
"
\\
par"
<<
endl
;
switch
(
s
->
type
())
{
case
DocParamSect
:
:
Param
:
...
...
@@ -861,19 +887,22 @@ void RTFDocVisitor::visitPre(DocParamSect *s)
default
:
ASSERT
(
0
);
}
m_t
<<
":]"
<<
endl
;
m_t
<<
"
\\
begin{description}"
<<
endl
;
m_t
<<
":}"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
incIndentLevel
();
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"DescContinue"
);
}
void
RTFDocVisitor
::
visitPost
(
DocParamSect
*
)
{
m_t
<<
"
\\
end{description}"
<<
endl
;
m_t
<<
"
\\
end{Desc}"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
decIndentLevel
();
m_t
<<
"}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocParamList
*
pl
)
{
m_t
<<
"
\\
item[{
\\
em
"
;
m_t
<<
"
{
\\
i
"
;
QStrListIterator
li
(
pl
->
parameters
());
const
char
*
s
;
bool
first
=
TRUE
;
...
...
@@ -882,32 +911,60 @@ void RTFDocVisitor::visitPre(DocParamList *pl)
if
(
!
first
)
m_t
<<
","
;
else
first
=
FALSE
;
m_t
<<
s
;
}
m_t
<<
"}
]
"
;
m_t
<<
"}
"
;
}
void
RTFDocVisitor
::
visitPost
(
DocParamList
*
)
{
m_t
<<
"
\\
par"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocXRefItem
*
x
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
;
m_t
<<
"
\\
item["
;
if
(
Config_getBool
(
"PDF_HYPERLINKS"
))
m_t
<<
"{"
;
// start param list
m_t
<<
"{
\\
b "
;
// start bold
m_t
<<
"
\\
par"
<<
endl
;
if
(
Config_getBool
(
"RTF_HYPERLINKS"
))
{
m_t
<<
"
\\
hyperlink{"
<<
x
->
file
()
<<
"_"
<<
x
->
anchor
()
<<
"}{"
;
QCString
refName
;
if
(
!
x
->
file
().
isEmpty
())
{
refName
+=
x
->
file
();
}
if
(
!
x
->
file
().
isEmpty
()
&&
!
x
->
anchor
().
isEmpty
())
{
refName
+=
"_"
;
}
if
(
!
x
->
anchor
().
isEmpty
())
{
refName
+=
x
->
anchor
();
}
m_t
<<
"{
\\
field "
"{
\\
*
\\
fldinst "
"{ HYPERLINK
\\\\
l
\"
"
<<
refName
<<
"
\"
"
"}{}"
"}"
"{
\\
fldrslt "
"{
\\
cs37
\\
ul
\\
cf2 "
;
filter
(
x
->
title
());
m_t
<<
"}"
"}"
"}"
;
}
else
{
m_t
<<
"{
\\
bf "
;
filter
(
x
->
title
())
;
}
filter
(
x
->
title
());
m_t
<<
"}]"
;
m_t
<<
"}"
;
// end bold
m_t
<<
"
\\
par"
<<
endl
;
incIndentLevel
();
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"DescContinue"
);
}
void
RTFDocVisitor
::
visitPost
(
DocXRefItem
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
m_t
<<
"
}"
<<
endl
;
// end param list
}
void
RTFDocVisitor
::
visitPre
(
DocInternalRef
*
ref
)
...
...
src/rtfdocvisitor.h
View file @
8d986f5d
...
...
@@ -48,6 +48,7 @@ class RTFDocVisitor : public DocVisitor
void
visit
(
DocInclude
*
);
void
visit
(
DocIncOperator
*
);
void
visit
(
DocFormula
*
);
void
visit
(
DocIndexEntry
*
);
//--------------------------------------
// visitor functions for compound nodes
...
...
@@ -91,8 +92,6 @@ class RTFDocVisitor : public DocVisitor
void
visitPost
(
DocHtmlRow
*
)
;
void
visitPre
(
DocHtmlCell
*
);
void
visitPost
(
DocHtmlCell
*
);
void
visitPre
(
DocIndexEntry
*
);
void
visitPost
(
DocIndexEntry
*
);
void
visitPre
(
DocInternal
*
);
void
visitPost
(
DocInternal
*
);
void
visitPre
(
DocHRef
*
);
...
...
@@ -135,6 +134,8 @@ class RTFDocVisitor : public DocVisitor
const
QCString
&
anchor
);
void
endLink
(
const
QCString
&
ref
);
QCString
getStyle
(
const
char
*
name
);
void
incIndentLevel
();
void
decIndentLevel
();
//--------------------------------------
// state variables
...
...
src/rtfgen.cpp
View file @
8d986f5d
...
...
@@ -34,13 +34,12 @@
#include "version.h"
#include "page.h"
#include "rtfstyle.h"
#include "rtfdocvisitor.h"
#include "docparser.h"
//#define DBG_RTF(x) x;
#define DBG_RTF(x)
// used for table column width calculation
#define PAGEWIDTH 8748
static
QCString
dateToRTFDateString
()
{
const
QDateTime
&
d
=
QDateTime
::
currentDateTime
();
...
...
@@ -870,7 +869,7 @@ void RTFGenerator::startItemList()
DBG_RTF
(
t
<<
"{
\\
comment (startItemList level="
<<
m_listLevel
<<
") }"
<<
endl
)
t
<<
"{"
;
incrementIndentLevel
();
listItemInfo
[
m_listLevel
].
isEnum
=
FALSE
;
rtf_
listItemInfo
[
m_listLevel
].
isEnum
=
FALSE
;
}
/*! end bullet list */
...
...
@@ -889,8 +888,8 @@ void RTFGenerator::startEnumList() // starts an enumeration list
DBG_RTF
(
t
<<
"{
\\
comment (startEnumList)}"
<<
endl
)
t
<<
"{"
<<
endl
;
incrementIndentLevel
();
listItemInfo
[
m_listLevel
].
isEnum
=
TRUE
;
listItemInfo
[
m_listLevel
].
number
=
1
;
rtf_
listItemInfo
[
m_listLevel
].
isEnum
=
TRUE
;
rtf_
listItemInfo
[
m_listLevel
].
number
=
1
;
}
/*! end enumeration list */
...
...
@@ -909,11 +908,11 @@ void RTFGenerator::writeListItem()
DBG_RTF
(
t
<<
"{
\\
comment (writeListItem)}"
<<
endl
)
newParagraph
();
t
<<
rtf_Style_Reset
;
if
(
listItemInfo
[
m_listLevel
].
isEnum
)
if
(
rtf_
listItemInfo
[
m_listLevel
].
isEnum
)
{
t
<<
rtf_EList_DepthStyle
()
<<
endl
;
t
<<
listItemInfo
[
m_listLevel
].
number
<<
".
\\
tab "
;
listItemInfo
[
m_listLevel
].
number
++
;
t
<<
rtf_
listItemInfo
[
m_listLevel
].
number
<<
".
\\
tab "
;
rtf_
listItemInfo
[
m_listLevel
].
number
++
;
}
else
{
...
...
@@ -1099,12 +1098,14 @@ void RTFGenerator::endSubsubsection()
void
RTFGenerator
::
startTable
(
bool
,
int
colNumbers
)
{
DBG_RTF
(
t
<<
"{
\\
comment startTable}
\n
"
;)
m_numCols
=
colNumbers
;
t
<<
"
\\
par
\n
"
;
}
void
RTFGenerator
::
endTable
(
bool
hasCaption
)
{
DBG_RTF
(
t
<<
"{
\\
comment endTable}
\n
"
;)
if
(
!
hasCaption
)
t
<<
"
\n\\
pard
\\
widctlpar
\\
intbl
\\
adjustright
\n
{
\\
row }
\n
"
;
t
<<
"
\\
pard
\n
"
<<
endl
;
...
...
@@ -1112,22 +1113,25 @@ void RTFGenerator::endTable(bool hasCaption)
void
RTFGenerator
::
startCaption
()
{
DBG_RTF
(
t
<<
"{
\\
comment startCaption}
\n
"
;)
endTableRow
();
t
<<
"
\\
trowd
\\
trgaph108
\\
trleft-108
\\
trbrdrt
\\
brdrs
\\
brdrw10
\\
trbrdrl
\\
brdrs
\\
brdrw10
\\
trbrdrb
\\
brdrs
\\
brdrw10
\\
trbrdrr
\\
brdrs
\\
brdrw10
\\
trbrdrh
\\
brdrs
\\
brdrw10
\\
trbrdrv
\\
brdrs
\\
brdrw10"
<<
endl
;
t
<<
"
\\
clvertalt
\\
clbrdrt
\\
brdrs
\\
brdrw10
\\
clbrdrl
\\
brdrs
\\
brdrw10
\\
clbrdrb
\\
brdrs
\\
brdrw10
\\
clbrdrr
\\
brdrs
\\
brdrw10
\\
cltxlrtb
\\
cellx"
<<
PAGEWIDTH
<<
"
\\
pard
\\
qc
\\
nowidctlpar
\\
widctlpar
\\
intbl
\\
adjustright "
<<
endl
;
t
<<
"
\\
clvertalt
\\
clbrdrt
\\
brdrs
\\
brdrw10
\\
clbrdrl
\\
brdrs
\\
brdrw10
\\
clbrdrb
\\
brdrs
\\
brdrw10
\\
clbrdrr
\\
brdrs
\\
brdrw10
\\
cltxlrtb
\\
cellx"
<<
rtf_pageWidth
<<
"
\\
pard
\\
qc
\\
nowidctlpar
\\
widctlpar
\\
intbl
\\
adjustright "
<<
endl
;
nextTableColumn
();
}
void
RTFGenerator
::
endCaption
()
{
DBG_RTF
(
t
<<
"{
\\
comment endCaption}
\n
"
;)
endTableColumn
();
endTableRow
();
}
void
RTFGenerator
::
nextTableRow
()
{
DBG_RTF
(
t
<<
"{
\\
comment nextTableRow}
\n
"
;)
ASSERT
(
m_numCols
>
0
&&
m_numCols
<
25
);
uint
columnWidth
=
PAGEWIDTH
/
m_numCols
;
uint
columnWidth
=
rtf_pageWidth
/
m_numCols
;
t
<<
"
\\
trowd
\\
trgaph108
\\
trleft-108
\\
trbrdrt
\\
brdrs
\\
brdrw10 "
"
\\
trbrdrl
\\
brdrs
\\
brdrw10
\\
trbrdrb
\\
brdrs
\\
brdrw10 "
"
\\
trbrdrr
\\
brdrs
\\
brdrw10
\\
trbrdrh
\\
brdrs
\\
brdrw10 "
...
...
@@ -1143,16 +1147,19 @@ void RTFGenerator::nextTableRow()
void
RTFGenerator
::
endTableRow
()
{
DBG_RTF
(
t
<<
"{
\\
comment endTableRow}
\n
"
;)
t
<<
"
\n\\
pard
\\
widctlpar
\\
intbl
\\
adjustright
\n
{
\\
row }
\n
"
;
}
void
RTFGenerator
::
nextTableColumn
()
{
DBG_RTF
(
t
<<
"{
\\
comment nextTableColumn}
\n
"
;)
t
<<
"{ "
;
}
void
RTFGenerator
::
endTableColumn
()
{
DBG_RTF
(
t
<<
"{
\\
comment endTableColumn}
\n
"
;)
t
<<
"
\\
cell }"
;
}
...
...
@@ -1516,9 +1523,11 @@ void RTFGenerator::startSection(const char *,const char *title,SectionInfo::Sect
int
num
=
4
;
switch
(
type
)
{
case
SectionInfo
:
:
Page
:
num
=
2
;
break
;
case
SectionInfo
:
:
Section
:
num
=
3
;
break
;
case
SectionInfo
:
:
Subsection
:
num
=
4
;
break
;
case
SectionInfo
:
:
Page
:
num
=
2
;
break
;
case
SectionInfo
:
:
Section
:
num
=
3
;
break
;
case
SectionInfo
:
:
Subsection
:
num
=
4
;
break
;
case
SectionInfo
:
:
Subsubsection
:
num
=
4
;
break
;
case
SectionInfo
:
:
Paragraph
:
num
=
4
;
break
;
default
:
ASSERT
(
0
);
break
;
}
QCString
heading
;
...
...
@@ -1883,10 +1892,10 @@ void RTFGenerator::endDescTableData()
void
RTFGenerator
::
incrementIndentLevel
()
{
m_listLevel
++
;
if
(
m_listLevel
>
i
ndentLevels
-
1
)
if
(
m_listLevel
>
rtf_maxI
ndentLevels
-
1
)
{
warn_cont
(
"Warning: Maximum indent level (%d) exceeded while generating RTF output!
\n
"
,
i
ndentLevels
);
m_listLevel
=
i
ndentLevels
-
1
;
warn_cont
(
"Warning: Maximum indent level (%d) exceeded while generating RTF output!
\n
"
,
rtf_maxI
ndentLevels
);
m_listLevel
=
rtf_maxI
ndentLevels
-
1
;
}
}
...
...
@@ -2398,3 +2407,10 @@ void RTFGenerator::endParamList()
t
<<
"}"
;
}
void
RTFGenerator
::
printDoc
(
DocNode
*
n
)
{
RTFDocVisitor
*
visitor
=
new
RTFDocVisitor
(
t
,
*
this
);
n
->
accept
(
visitor
);
delete
visitor
;
}
src/rtfgen.h
View file @
8d986f5d
...
...
@@ -42,6 +42,8 @@ class RTFGenerator : public OutputGenerator
bool
isEnabled
(
OutputType
o
)
{
return
(
o
==
RTF
&&
active
);
}
OutputGenerator
*
get
(
OutputType
o
)
{
return
(
o
==
RTF
)
?
this
:
0
;
}
void
printDoc
(
DocNode
*
);
void
startFile
(
const
char
*
name
,
const
char
*
manName
,
const
char
*
title
,
bool
external
);
void
writeFooter
(
int
,
bool
)
{}
...
...
src/rtfstyle.cpp
View file @
8d986f5d
...
...
@@ -25,7 +25,7 @@
#include "message.h"
RTFListItemInfo
listItemInfo
[
i
ndentLevels
];
RTFListItemInfo
rtf_listItemInfo
[
rtf_maxI
ndentLevels
];
QCString
rtf_title
;
QCString
rtf_subject
;
...
...
src/rtfstyle.h
View file @
8d986f5d
...
...
@@ -23,6 +23,9 @@
#include <qregexp.h>
#include <qdict.h>
// used for table column width calculation
const
int
rtf_pageWidth
=
8748
;
extern
QCString
rtf_title
;
extern
QCString
rtf_subject
;
extern
QCString
rtf_comments
;
...
...
@@ -40,9 +43,9 @@ struct RTFListItemInfo
int
number
;
};
const
int
i
ndentLevels
=
10
;
const
int
rtf_maxI
ndentLevels
=
10
;
extern
RTFListItemInfo
listItemInfo
[
i
ndentLevels
];
extern
RTFListItemInfo
rtf_listItemInfo
[
rtf_maxI
ndentLevels
];
struct
Rtf_Style_Default
{
...
...
src/scanner.l
View file @
8d986f5d
...
...
@@ -282,10 +282,10 @@ static void addSection()
{
//printf("New section pageName=%s label=%s title=%s\n",
// current->name.data(),sectionLabel.data(),sectionTitle.data());
if (current->name.isEmpty()
|| current->section != Entry::PAGEDOC_SEC
)
if (current->name.isEmpty()
/*|| current->section != Entry::PAGEDOC_SEC */
)
{
warn(yyFileName,yyLineNr,"Warning: found section or anchor with label `%s' "
"outside of \\page context!\n",sectionLabel.data());
//
warn(yyFileName,yyLineNr,"Warning: found section or anchor with label `%s' "
//
"outside of \\page context!\n",sectionLabel.data());
return;
}
if (sectionLabel.isEmpty()) return;
...
...
@@ -453,6 +453,7 @@ static void addSpecialItem(const char *listName)
ASSERT(item!=0);
item->text += " <p>";
item->text += current->brief;
//printf("%s: text +=%s\n",listName,item->text.data());
}
else // new item
{
...
...
@@ -473,6 +474,7 @@ static void addSpecialItem(const char *listName)
sectionLabel=anchorLabel;
addSection();
current->name = tmpName;
//printf("%s: text %s doc %s\n",listName,item->text.data(),cmdString.data());
}
current->brief = slString.copy(); // restore orginial brief desc.
}
...
...
@@ -3223,6 +3225,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->section = Entry::MAINPAGEDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->name = "mainpage";
BEGIN( PageDocArg2 );
}
<Doc,JavaDoc>{B}*{CMD}"file"{B}* {
...
...
@@ -3517,6 +3520,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
sectionType=SectionInfo::Subsection;
BEGIN(SectionLabel);
}
<PageDoc>{CMD}"subsubsection"{B}+ {
sectionType=SectionInfo::Subsubsection;
BEGIN(SectionLabel);
}
<PageDoc>{CMD}"paragraph"{B}+ {
sectionType=SectionInfo::Paragraph;
BEGIN(SectionLabel);
}
<GroupHeader>. { memberGroupHeader+=*yytext; }
<GroupHeader>"*/" {
unput('/');unput('*');
...
...
@@ -3970,7 +3981,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<DocBaseClass>\n { yyLineNr++; BEGIN( ClassDoc ); }
<ClassDocBrief>{BS}({BL}|"\\n\\n") {
current->brief=current->brief.stripWhiteSpace();
if (!current->doc.isEmpty()) current->doc+=" <p>";
//
if (!current->doc.isEmpty()) current->doc+=" <p>";
if (lastBriefContext==TodoParam ||
lastBriefContext==TestParam ||
lastBriefContext==BugParam ||
...
...
src/section.h
View file @
8d986f5d
...
...
@@ -29,7 +29,7 @@ class PageInfo;
struct
SectionInfo
{
enum
SectionType
{
Page
,
Section
,
Subsection
,
Anchor
};
enum
SectionType
{
Page
,
Section
,
Subsection
,
Subsubsection
,
Paragraph
,
Anchor
};
SectionInfo
(
const
char
*
l
,
const
char
*
t
,
SectionType
st
,
const
char
*
r
=
0
)
{
label
=
l
;
title
=
t
;
type
=
st
;
ref
=
r
;
definition
=
0
;
pageRef
=
0
;
generated
=
FALSE
;
}
~
SectionInfo
()
{}
...
...
src/util.cpp
View file @
8d986f5d
...
...
@@ -3519,7 +3519,7 @@ void addRefItem(const QList<ListItemInfo> *sli,
doc
+=
"</dt>
\n
<dd>"
;
doc
+=
item
->
text
;
doc
+=
"</dd></dl>
\n
"
;
addRelatedPage
(
refList
->
listName
(),
refList
->
pageTitle
(),
doc
,
0
,
"generated"
,
1
,
0
,
0
,
0
);
addRelatedPage
(
refList
->
listName
(),
refList
->
pageTitle
(),
doc
,
0
,
refList
->
listName
()
,
1
,
0
,
0
,
0
);
item
->
written
=
TRUE
;
}
}
...
...
@@ -3937,7 +3937,7 @@ QCString rtfFormatBmkStr(const char *name)
{
if
(
(
++
(
*
nxtTag
)
)
>
'Z'
)
{
(
*
nxtTag
)
=
'A'
;
*
nxtTag
=
'A'
;
}
else
{
...
...
src/xmldocvisitor.cpp
0 → 100644
View file @
8d986f5d
/******************************************************************************
*
*
*
*
* Copyright (C) 1997-2002 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.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#include "xmldocvisitor.h"
#include "docparser.h"
#include "language.h"
#include "doxygen.h"
#include "outputgen.h"
#include "xmlgen.h"
#include "code.h"
#include "dot.h"
#include "message.h"
XmlDocVisitor
::
XmlDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
)
:
m_t
(
t
),
m_ci
(
ci
),
m_insidePre
(
FALSE
),
m_hide
(
FALSE
)
{
}
//--------------------------------------
// visitor functions for leaf nodes
//--------------------------------------
void
XmlDocVisitor
::
visit
(
DocWord
*
w
)
{
if
(
m_hide
)
return
;
filter
(
w
->
word
());
}
void
XmlDocVisitor
::
visit
(
DocLinkedWord
*
w
)
{
if
(
m_hide
)
return
;
startLink
(
w
->
ref
(),
w
->
file
(),
w
->
anchor
());
filter
(
w
->
word
());
endLink
();
}
void
XmlDocVisitor
::
visit
(
DocWhiteSpace
*
w
)
{
if
(
m_hide
)
return
;
if
(
m_insidePre
)
{
m_t
<<
w
->
chars
();
}
else
{
m_t
<<
" "
;
}
}
void
XmlDocVisitor
::
visit
(
DocSymbol
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
symbol
())
{
case
DocSymbol
:
:
BSlash
:
m_t
<<
"
\\
"
;
break
;
case
DocSymbol
:
:
At
:
m_t
<<
"@"
;
break
;
case
DocSymbol
:
:
Less
:
m_t
<<
"<"
;
break
;
case
DocSymbol
:
:
Greater
:
m_t
<<
">"
;
break
;
case
DocSymbol
:
:
Amp
:
m_t
<<
"&"
;
break
;
case
DocSymbol
:
:
Dollar
:
m_t
<<
"$"
;
break
;
case
DocSymbol
:
:
Hash
:
m_t
<<
"#"
;
break
;
case
DocSymbol
:
:
Percent
:
m_t
<<
"%"
;
break
;
case
DocSymbol
:
:
Copy
:
m_t
<<
"<copy/>"
;
break
;
case
DocSymbol
:
:
Apos
:
m_t
<<
"'"
;
break
;
case
DocSymbol
:
:
Quot
:
m_t
<<
"
\"
"
;
break
;
case
DocSymbol
:
:
Uml
:
m_t
<<
"<umlaut char=
\"
"
<<
s
->
letter
()
<<
"
\"
/>"
;
break
;
case
DocSymbol
:
:
Acute
:
m_t
<<
"<acute char=
\"
"
<<
s
->
letter
()
<<
"
\"
/>"
;
break
;
case
DocSymbol
:
:
Grave
:
m_t
<<
"<grave char=
\"
"
<<
s
->
letter
()
<<
"
\"
/>"
;
break
;
case
DocSymbol
:
:
Circ
:
m_t
<<
"<circ char=
\"
"
<<
s
->
letter
()
<<
"
\"
/>"
;
break
;
case
DocSymbol
:
:
Tilde
:
m_t
<<
"<tilde char=
\"
"
<<
s
->
letter
()
<<
"
\"
/>"
;
break
;
case
DocSymbol
:
:
Szlig
:
m_t
<<
"<szlig/>"
;
break
;
case
DocSymbol
:
:
Cedil
:
m_t
<<
"<cedil char=
\"
"
<<
s
->
letter
()
<<
"
\"
/>"
;
break
;
case
DocSymbol
:
:
Ring
:
m_t
<<
"<ring char=
\"
"
<<
s
->
letter
()
<<
"
\"
/>"
;
break
;
case
DocSymbol
:
:
Nbsp
:
m_t
<<
"<nonbreakablespace/>"
;
break
;
default
:
err
(
"Error: unknown symbol found
\n
"
);
}
}
void
XmlDocVisitor
::
visit
(
DocURL
*
u
)
{
if
(
m_hide
)
return
;
m_t
<<
"<ulink url=
\"
"
<<
u
->
url
()
<<
"
\"
>"
;
filter
(
u
->
url
());
m_t
<<
"</ulink>"
;
}
void
XmlDocVisitor
::
visit
(
DocLineBreak
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"<linebreak/>
\n
"
;
}
void
XmlDocVisitor
::
visit
(
DocHorRuler
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"<hruler/>
\n
"
;
}
void
XmlDocVisitor
::
visit
(
DocStyleChange
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
style
())
{
case
DocStyleChange
:
:
Bold
:
if
(
s
->
enable
())
m_t
<<
"<bold>"
;
else
m_t
<<
"</bold> "
;
break
;
case
DocStyleChange
:
:
Italic
:
if
(
s
->
enable
())
m_t
<<
"<emphasis>"
;
else
m_t
<<
"</emphasis> "
;
break
;
case
DocStyleChange
:
:
Code
:
if
(
s
->
enable
())
m_t
<<
"<computeroutput>"
;
else
m_t
<<
"</computeroutput> "
;
break
;
case
DocStyleChange
:
:
Subscript
:
if
(
s
->
enable
())
m_t
<<
"<subscript>"
;
else
m_t
<<
"</subscript> "
;
break
;
case
DocStyleChange
:
:
Superscript
:
if
(
s
->
enable
())
m_t
<<
"<superscript>"
;
else
m_t
<<
"</superscript> "
;
break
;
case
DocStyleChange
:
:
Center
:
if
(
s
->
enable
())
m_t
<<
"<center>"
;
else
m_t
<<
"</center> "
;
break
;
case
DocStyleChange
:
:
Small
:
if
(
s
->
enable
())
m_t
<<
"<small>"
;
else
m_t
<<
"</small> "
;
break
;
}
}
void
XmlDocVisitor
::
visit
(
DocVerbatim
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
type
())
{
case
DocVerbatim
:
:
Code
:
// fall though
m_t
<<
"<programlisting>"
;
parseCode
(
m_ci
,
s
->
context
(),
s
->
text
(),
FALSE
,
0
);
m_t
<<
"</programlisting>"
;
break
;
case
DocVerbatim
:
:
Verbatim
:
m_t
<<
"<preformatted>"
;
filter
(
s
->
text
());
m_t
<<
"</preformatted>"
;
break
;
case
DocVerbatim
:
:
HtmlOnly
:
m_t
<<
"<htmlonly>"
;
filter
(
s
->
text
());
m_t
<<
"</htmlonly>"
;
break
;
case
DocVerbatim
:
:
LatexOnly
:
m_t
<<
"<latexonly>"
;
filter
(
s
->
text
());
m_t
<<
"</latexonly>"
;
break
;
}
}
void
XmlDocVisitor
::
visit
(
DocAnchor
*
anc
)
{
if
(
m_hide
)
return
;
m_t
<<
"<anchor id=
\"
"
<<
anc
->
file
()
<<
"_1"
<<
anc
->
anchor
()
<<
"
\"
/>"
;
}
void
XmlDocVisitor
::
visit
(
DocInclude
*
inc
)
{
if
(
m_hide
)
return
;
switch
(
inc
->
type
())
{
case
DocInclude
:
:
Include
:
m_t
<<
"<programlisting>"
;
parseCode
(
m_ci
,
inc
->
context
(),
inc
->
text
(),
FALSE
,
0
);
m_t
<<
"</programlisting>"
;
break
;
case
DocInclude
:
:
DontInclude
:
break
;
case
DocInclude
:
:
HtmlInclude
:
m_t
<<
"<htmlonly>"
;
filter
(
inc
->
text
());
m_t
<<
"</htmlonly>"
;
break
;
case
DocInclude
:
:
VerbInclude
:
m_t
<<
"<preformatted>"
;
filter
(
inc
->
text
());
m_t
<<
"</preformatted>"
;
break
;
}
}
void
XmlDocVisitor
::
visit
(
DocIncOperator
*
op
)
{
//printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
// op->type(),op->isFirst(),op->isLast(),op->text().data());
if
(
op
->
isFirst
())
{
m_t
<<
"<programlisting>"
;
m_hide
=
TRUE
;
}
if
(
op
->
type
()
!=
DocIncOperator
::
Skip
)
{
parseCode
(
m_ci
,
op
->
context
(),
op
->
text
(),
FALSE
,
0
);
}
if
(
op
->
isLast
())
{
m_hide
=
FALSE
;
m_t
<<
"</programlisting>"
;
}
else
{
m_t
<<
endl
;
}
}
void
XmlDocVisitor
::
visit
(
DocFormula
*
f
)
{
if
(
m_hide
)
return
;
m_t
<<
"<formula id=
\"
"
<<
f
->
id
()
<<
"
\"
>"
;
filter
(
f
->
text
());
m_t
<<
"</formula>"
;
}
void
XmlDocVisitor
::
visit
(
DocIndexEntry
*
ie
)
{
m_t
<<
"<indexentry>"
"<primaryie>"
;
filter
(
ie
->
entry
());
m_t
<<
"</primaryie>"
"<secondaryie></secondaryie>"
"</indexentry>"
;
}
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
void
XmlDocVisitor
::
visitPre
(
DocAutoList
*
l
)
{
if
(
l
->
isEnumList
())
{
m_t
<<
"<orderedlist>
\n
"
;
}
else
{
m_t
<<
"<itemizedlist>
\n
"
;
}
}
void
XmlDocVisitor
::
visitPost
(
DocAutoList
*
l
)
{
if
(
l
->
isEnumList
())
{
m_t
<<
"</orderedlist>
\n
"
;
}
else
{
m_t
<<
"</itemizedlist>
\n
"
;
}
}
void
XmlDocVisitor
::
visitPre
(
DocAutoListItem
*
)
{
m_t
<<
"<listitem>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocAutoListItem
*
)
{
m_t
<<
"</listitem>"
;
}
void
XmlDocVisitor
::
visitPre
(
DocPara
*
)
{
m_t
<<
"<para>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocPara
*
)
{
m_t
<<
"</para>"
;
}
void
XmlDocVisitor
::
visitPre
(
DocRoot
*
)
{
//m_t << "<hr><h4><font color=\"red\">New parser:</font></h4>\n";
}
void
XmlDocVisitor
::
visitPost
(
DocRoot
*
)
{
//m_t << "<hr><h4><font color=\"red\">Old parser:</font></h4>\n";
}
void
XmlDocVisitor
::
visitPre
(
DocSimpleSect
*
s
)
{
m_t
<<
"<simplesect kind=
\"
>"
;
switch
(
s
->
type
())
{
case
DocSimpleSect
:
:
See
:
m_t
<<
"see"
;
break
;
case
DocSimpleSect
:
:
Return
:
m_t
<<
"return"
;
break
;
case
DocSimpleSect
:
:
Author
:
m_t
<<
"author"
;
break
;
case
DocSimpleSect
:
:
Authors
:
m_t
<<
"authors"
;
break
;
case
DocSimpleSect
:
:
Version
:
m_t
<<
"version"
;
break
;
case
DocSimpleSect
:
:
Since
:
m_t
<<
"since"
;
break
;
case
DocSimpleSect
:
:
Date
:
m_t
<<
"date"
;
break
;
case
DocSimpleSect
:
:
Note
:
m_t
<<
"bug"
;
break
;
case
DocSimpleSect
:
:
Warning
:
m_t
<<
"warning"
;
break
;
case
DocSimpleSect
:
:
Pre
:
m_t
<<
"pre"
;
break
;
case
DocSimpleSect
:
:
Post
:
m_t
<<
"post"
;
break
;
case
DocSimpleSect
:
:
Invar
:
m_t
<<
"invariant"
;
break
;
case
DocSimpleSect
:
:
Remark
:
m_t
<<
"remark"
;
break
;
case
DocSimpleSect
:
:
Attention
:
m_t
<<
"attention"
;
break
;
case
DocSimpleSect
:
:
User
:
m_t
<<
"par"
;
break
;
case
DocSimpleSect
:
:
Unknown
:
break
;
}
m_t
<<
"
\"
>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocSimpleSect
*
)
{
m_t
<<
"</simplesect>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocTitle
*
)
{
m_t
<<
"<title>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocTitle
*
)
{
m_t
<<
"</title>"
;
}
void
XmlDocVisitor
::
visitPre
(
DocSimpleList
*
)
{
m_t
<<
"<itemizedlist>
\n
"
;
}
void
XmlDocVisitor
::
visitPost
(
DocSimpleList
*
)
{
m_t
<<
"</itemizedlist>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocSimpleListItem
*
)
{
m_t
<<
"<listitem>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocSimpleListItem
*
)
{
m_t
<<
"</listitem>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocSection
*
s
)
{
m_t
<<
"<sect"
<<
s
->
level
()
+
1
<<
">"
;
filter
(
s
->
title
());
m_t
<<
"</sect"
<<
s
->
level
()
+
1
<<
">
\n
"
;
}
void
XmlDocVisitor
::
visitPost
(
DocSection
*
)
{
}
void
XmlDocVisitor
::
visitPre
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"<orderedlist>
\n
"
;
else
m_t
<<
"<itemizedlist>
\n
"
;
}
void
XmlDocVisitor
::
visitPost
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"</orderedlist>
\n
"
;
else
m_t
<<
"</itemizedlist>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocHtmlListItem
*
)
{
m_t
<<
"<listitem>
\n
"
;
}
void
XmlDocVisitor
::
visitPost
(
DocHtmlListItem
*
)
{
m_t
<<
"</listitem>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocHtmlPre
*
)
{
m_t
<<
"<preformatted>
\n
"
;
m_insidePre
=
TRUE
;
}
void
XmlDocVisitor
::
visitPost
(
DocHtmlPre
*
)
{
m_insidePre
=
FALSE
;
m_t
<<
"</preformatted>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocHtmlDescList
*
)
{
m_t
<<
"<variablelist>
\n
"
;
}
void
XmlDocVisitor
::
visitPost
(
DocHtmlDescList
*
)
{
m_t
<<
"</variablelist>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocHtmlDescTitle
*
)
{
m_t
<<
"<varlistentry><term>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocHtmlDescTitle
*
)
{
m_t
<<
"</term></varlistentry>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocHtmlDescData
*
)
{
m_t
<<
"<listitem>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocHtmlDescData
*
)
{
m_t
<<
"</listitem>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocHtmlTable
*
t
)
{
m_t
<<
"<table rows=
\"
"
<<
t
->
numRows
()
<<
"
\"
cols=
\"
"
<<
t
->
numCols
()
<<
"
\"
>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocHtmlTable
*
)
{
m_t
<<
"</table>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocHtmlRow
*
)
{
m_t
<<
"<row>
\n
"
;
}
void
XmlDocVisitor
::
visitPost
(
DocHtmlRow
*
)
{
m_t
<<
"</row>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocHtmlCell
*
c
)
{
if
(
c
->
isHeading
())
m_t
<<
"<entry thead=
\"
yes
\"
>"
;
else
m_t
<<
"<entry thead=
\"
no
\"
>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocHtmlCell
*
)
{
m_t
<<
"</entry>"
;
}
void
XmlDocVisitor
::
visitPre
(
DocHtmlCaption
*
)
{
m_t
<<
"<caption>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocHtmlCaption
*
)
{
m_t
<<
"</caption>
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocInternal
*
)
{
m_t
<<
"<internal>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocInternal
*
)
{
m_t
<<
"</internal>"
<<
endl
;
}
void
XmlDocVisitor
::
visitPre
(
DocHRef
*
href
)
{
m_t
<<
"<ulink url=
\"
"
<<
href
->
url
()
<<
"
\"
>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocHRef
*
)
{
m_t
<<
"</ulink>"
;
}
void
XmlDocVisitor
::
visitPre
(
DocHtmlHeader
*
header
)
{
m_t
<<
"<sect"
<<
header
->
level
()
<<
">"
;
}
void
XmlDocVisitor
::
visitPost
(
DocHtmlHeader
*
header
)
{
m_t
<<
"</sect"
<<
header
->
level
()
<<
">
\n
"
;
}
void
XmlDocVisitor
::
visitPre
(
DocImage
*
img
)
{
m_t
<<
"<image type=
\"
"
;
switch
(
img
->
type
())
{
case
DocImage
:
:
Html
:
m_t
<<
"html"
;
break
;
case
DocImage
:
:
Latex
:
m_t
<<
"latex"
;
break
;
case
DocImage
:
:
Rtf
:
m_t
<<
"rtf"
;
break
;
}
m_t
<<
"
\"
"
;
QCString
baseName
=
img
->
name
();
int
i
;
if
((
i
=
baseName
.
findRev
(
'/'
))
!=-
1
||
(
i
=
baseName
.
findRev
(
'\\'
))
!=-
1
)
{
baseName
=
baseName
.
right
(
baseName
.
length
()
-
i
-
1
);
}
m_t
<<
" name=
\"
"
<<
baseName
<<
"
\"
"
;
if
(
!
img
->
width
().
isEmpty
())
{
m_t
<<
" width=
\"
"
;
filter
(
img
->
width
());
m_t
<<
"
\"
"
;
}
else
if
(
!
img
->
height
().
isEmpty
())
{
m_t
<<
" height=
\"
"
;
filter
(
img
->
height
());
m_t
<<
"
\"
"
;
}
m_t
<<
">"
;
}
void
XmlDocVisitor
::
visitPost
(
DocImage
*
)
{
m_t
<<
"</image>"
<<
endl
;
}
void
XmlDocVisitor
::
visitPre
(
DocDotFile
*
df
)
{
m_t
<<
"<dotfile name=
\"
"
<<
df
->
file
()
<<
"
\"
>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocDotFile
*
)
{
m_t
<<
"</dotfile>"
<<
endl
;
}
void
XmlDocVisitor
::
visitPre
(
DocLink
*
lnk
)
{
startLink
(
lnk
->
ref
(),
lnk
->
file
(),
lnk
->
anchor
());
}
void
XmlDocVisitor
::
visitPost
(
DocLink
*
)
{
endLink
();
}
void
XmlDocVisitor
::
visitPre
(
DocRef
*
ref
)
{
startLink
(
ref
->
ref
(),
ref
->
file
(),
ref
->
anchor
());
if
(
!
ref
->
hasLinkText
())
filter
(
ref
->
targetTitle
());
}
void
XmlDocVisitor
::
visitPost
(
DocRef
*
)
{
endLink
();
m_t
<<
" "
;
}
void
XmlDocVisitor
::
visitPre
(
DocSecRefItem
*
ref
)
{
m_t
<<
"<tocitem id=
\"
"
<<
ref
->
file
()
<<
"_1"
<<
ref
->
anchor
()
<<
"
\"
>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocSecRefItem
*
)
{
m_t
<<
"</tocitem>"
<<
endl
;
}
void
XmlDocVisitor
::
visitPre
(
DocSecRefList
*
)
{
m_t
<<
"<toclist>"
<<
endl
;
}
void
XmlDocVisitor
::
visitPost
(
DocSecRefList
*
)
{
m_t
<<
"</toclist>"
<<
endl
;
}
void
XmlDocVisitor
::
visitPre
(
DocLanguage
*
l
)
{
m_t
<<
"<language id=
\"
"
<<
l
->
id
()
<<
"
\"
>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocLanguage
*
)
{
m_t
<<
"</language>"
<<
endl
;
}
void
XmlDocVisitor
::
visitPre
(
DocParamSect
*
s
)
{
m_t
<<
"<parameterlist kind=
\"
"
;
switch
(
s
->
type
())
{
case
DocParamSect
:
:
Param
:
m_t
<<
"param"
;
break
;
case
DocParamSect
:
:
RetVal
:
m_t
<<
"retval"
;
break
;
case
DocParamSect
:
:
Exception
:
m_t
<<
"exception"
;
break
;
default
:
ASSERT
(
0
);
}
m_t
<<
"
\"
>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocParamSect
*
)
{
m_t
<<
"</parameterlist>"
<<
endl
;
}
void
XmlDocVisitor
::
visitPre
(
DocParamList
*
pl
)
{
QStrListIterator
li
(
pl
->
parameters
());
const
char
*
s
;
for
(
li
.
toFirst
();(
s
=
li
.
current
());
++
li
)
{
m_t
<<
"<parametername>"
;
filter
(
s
);
m_t
<<
"</parametername>"
<<
endl
;
}
m_t
<<
"<parameterdescription>"
<<
endl
;
}
void
XmlDocVisitor
::
visitPost
(
DocParamList
*
)
{
m_t
<<
"</parameterdescription>"
;
}
void
XmlDocVisitor
::
visitPre
(
DocXRefItem
*
x
)
{
m_t
<<
"<xrefsect id=
\"
"
;
m_t
<<
x
->
file
()
<<
"_1"
<<
x
->
anchor
();
m_t
<<
"
\"
>"
;
m_t
<<
"<xreftitle>"
;
filter
(
x
->
title
());
m_t
<<
"</xreftitle>"
;
m_t
<<
"<xrefdescription>"
;
}
void
XmlDocVisitor
::
visitPost
(
DocXRefItem
*
)
{
m_t
<<
"</xrefdescription>"
;
m_t
<<
"</xrefsect>"
;
}
void
XmlDocVisitor
::
visitPre
(
DocInternalRef
*
ref
)
{
startLink
(
0
,
ref
->
file
(),
ref
->
anchor
());
}
void
XmlDocVisitor
::
visitPost
(
DocInternalRef
*
)
{
endLink
();
m_t
<<
" "
;
}
void
XmlDocVisitor
::
visitPre
(
DocCopy
*
)
{
}
void
XmlDocVisitor
::
visitPost
(
DocCopy
*
)
{
}
void
XmlDocVisitor
::
filter
(
const
char
*
str
)
{
if
(
str
==
0
)
return
;
const
char
*
p
=
str
;
char
c
;
while
(
*
p
)
{
c
=*
p
++
;
switch
(
c
)
{
case
'<'
:
m_t
<<
"<"
;
break
;
case
'>'
:
m_t
<<
">"
;
break
;
case
'&'
:
m_t
<<
"&"
;
break
;
default
:
m_t
<<
c
;
}
}
}
void
XmlDocVisitor
::
startLink
(
const
QCString
&
ref
,
const
QCString
&
file
,
const
QCString
&
anchor
)
{
m_t
<<
"<ref refid=
\"
"
<<
file
;
if
(
!
anchor
.
isEmpty
())
m_t
<<
"_1"
<<
anchor
;
m_t
<<
"
\"
kindref=
\"
"
;
if
(
!
anchor
.
isEmpty
())
m_t
<<
"member"
;
else
m_t
<<
"compound"
;
m_t
<<
"
\"
"
;
if
(
!
ref
.
isEmpty
())
m_t
<<
" external=
\"
"
<<
ref
<<
"
\"
"
;
m_t
<<
">"
;
}
void
XmlDocVisitor
::
endLink
()
{
m_t
<<
"</ref>"
;
}
src/xmldocvisitor.h
0 → 100644
View file @
8d986f5d
/******************************************************************************
*
*
*
*
* Copyright (C) 1997-2002 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.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef _XMLDOCVISITOR_H
#define _XMLDOCVISITOR_H
#include "docvisitor.h"
class
QTextStream
;
class
BaseCodeDocInterface
;
class
QCString
;
/*! @brief Concrete visitor implementation for HTML output. */
class
XmlDocVisitor
:
public
DocVisitor
{
public
:
XmlDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
);
//--------------------------------------
// visitor functions for leaf nodes
//--------------------------------------
void
visit
(
DocWord
*
);
void
visit
(
DocLinkedWord
*
);
void
visit
(
DocWhiteSpace
*
);
void
visit
(
DocSymbol
*
);
void
visit
(
DocURL
*
);
void
visit
(
DocLineBreak
*
);
void
visit
(
DocHorRuler
*
);
void
visit
(
DocStyleChange
*
);
void
visit
(
DocVerbatim
*
);
void
visit
(
DocAnchor
*
);
void
visit
(
DocInclude
*
);
void
visit
(
DocIncOperator
*
);
void
visit
(
DocFormula
*
);
void
visit
(
DocIndexEntry
*
);
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
void
visitPre
(
DocAutoList
*
);
void
visitPost
(
DocAutoList
*
);
void
visitPre
(
DocAutoListItem
*
);
void
visitPost
(
DocAutoListItem
*
);
void
visitPre
(
DocPara
*
)
;
void
visitPost
(
DocPara
*
);
void
visitPre
(
DocRoot
*
);
void
visitPost
(
DocRoot
*
);
void
visitPre
(
DocSimpleSect
*
);
void
visitPost
(
DocSimpleSect
*
);
void
visitPre
(
DocTitle
*
);
void
visitPost
(
DocTitle
*
);
void
visitPre
(
DocSimpleList
*
);
void
visitPost
(
DocSimpleList
*
);
void
visitPre
(
DocSimpleListItem
*
);
void
visitPost
(
DocSimpleListItem
*
);
void
visitPre
(
DocSection
*
);
void
visitPost
(
DocSection
*
);
void
visitPre
(
DocHtmlList
*
);
void
visitPost
(
DocHtmlList
*
)
;
void
visitPre
(
DocHtmlListItem
*
);
void
visitPost
(
DocHtmlListItem
*
);
void
visitPre
(
DocHtmlPre
*
);
void
visitPost
(
DocHtmlPre
*
);
void
visitPre
(
DocHtmlDescList
*
);
void
visitPost
(
DocHtmlDescList
*
);
void
visitPre
(
DocHtmlDescTitle
*
);
void
visitPost
(
DocHtmlDescTitle
*
);
void
visitPre
(
DocHtmlDescData
*
);
void
visitPost
(
DocHtmlDescData
*
);
void
visitPre
(
DocHtmlTable
*
);
void
visitPost
(
DocHtmlTable
*
);
void
visitPre
(
DocHtmlRow
*
);
void
visitPost
(
DocHtmlRow
*
)
;
void
visitPre
(
DocHtmlCell
*
);
void
visitPost
(
DocHtmlCell
*
);
void
visitPre
(
DocHtmlCaption
*
);
void
visitPost
(
DocHtmlCaption
*
);
void
visitPre
(
DocInternal
*
);
void
visitPost
(
DocInternal
*
);
void
visitPre
(
DocHRef
*
);
void
visitPost
(
DocHRef
*
);
void
visitPre
(
DocHtmlHeader
*
);
void
visitPost
(
DocHtmlHeader
*
);
void
visitPre
(
DocImage
*
);
void
visitPost
(
DocImage
*
);
void
visitPre
(
DocDotFile
*
);
void
visitPost
(
DocDotFile
*
);
void
visitPre
(
DocLink
*
);
void
visitPost
(
DocLink
*
);
void
visitPre
(
DocRef
*
);
void
visitPost
(
DocRef
*
);
void
visitPre
(
DocSecRefItem
*
);
void
visitPost
(
DocSecRefItem
*
);
void
visitPre
(
DocSecRefList
*
);
void
visitPost
(
DocSecRefList
*
);
void
visitPre
(
DocLanguage
*
);
void
visitPost
(
DocLanguage
*
);
void
visitPre
(
DocParamSect
*
);
void
visitPost
(
DocParamSect
*
);
void
visitPre
(
DocParamList
*
);
void
visitPost
(
DocParamList
*
);
void
visitPre
(
DocXRefItem
*
);
void
visitPost
(
DocXRefItem
*
);
void
visitPre
(
DocInternalRef
*
);
void
visitPost
(
DocInternalRef
*
);
void
visitPre
(
DocCopy
*
);
void
visitPost
(
DocCopy
*
);
private
:
//--------------------------------------
// helper functions
//--------------------------------------
void
filter
(
const
char
*
str
);
void
startLink
(
const
QCString
&
ref
,
const
QCString
&
file
,
const
QCString
&
anchor
);
void
endLink
();
//--------------------------------------
// state variables
//--------------------------------------
QTextStream
&
m_t
;
BaseCodeDocInterface
&
m_ci
;
bool
m_insidePre
;
bool
m_hide
;
};
#endif
src/xmlgen.cpp
View file @
8d986f5d
...
...
@@ -33,6 +33,8 @@
#include "page.h"
#include "filename.h"
#include "version.h"
#include "xmldocvisitor.h"
#include "docparser.h"
#include <qdir.h>
#include <qfile.h>
...
...
@@ -47,34 +49,34 @@
// debug inside output
//#define XML_DB(x) QCString __t;__t.sprintf x;m_t << __t
QCString
sectionTypeToString
(
BaseOutputDocInterface
::
SectionTypes
t
)
{
switch
(
t
)
{
case
BaseOutputDocInterface
:
:
See
:
return
"see"
;
case
BaseOutputDocInterface
:
:
Return
:
return
"return"
;
case
BaseOutputDocInterface
:
:
Author
:
return
"author"
;
case
BaseOutputDocInterface
:
:
Version
:
return
"version"
;
case
BaseOutputDocInterface
:
:
Since
:
return
"since"
;
case
BaseOutputDocInterface
:
:
Date
:
return
"date"
;
case
BaseOutputDocInterface
:
:
Bug
:
return
"bug"
;
case
BaseOutputDocInterface
:
:
Note
:
return
"note"
;
case
BaseOutputDocInterface
:
:
Warning
:
return
"warning"
;
case
BaseOutputDocInterface
:
:
Par
:
return
"par"
;
case
BaseOutputDocInterface
:
:
Deprecated
:
return
"deprecated"
;
case
BaseOutputDocInterface
:
:
Pre
:
return
"pre"
;
case
BaseOutputDocInterface
:
:
Post
:
return
"post"
;
case
BaseOutputDocInterface
:
:
Invar
:
return
"invariant"
;
case
BaseOutputDocInterface
:
:
Remark
:
return
"remark"
;
case
BaseOutputDocInterface
:
:
Attention
:
return
"attention"
;
case
BaseOutputDocInterface
:
:
Todo
:
return
"todo"
;
case
BaseOutputDocInterface
:
:
Test
:
return
"test"
;
case
BaseOutputDocInterface
:
:
RCS
:
return
"rcs"
;
case
BaseOutputDocInterface
:
:
EnumValues
:
return
"enumvalues"
;
case
BaseOutputDocInterface
:
:
Examples
:
return
"examples"
;
}
return
"illegal"
;
}
// static
QCString sectionTypeToString(BaseOutputDocInterface::SectionTypes t)
//
{
//
switch (t)
//
{
//
case BaseOutputDocInterface::See: return "see";
//
case BaseOutputDocInterface::Return: return "return";
//
case BaseOutputDocInterface::Author: return "author";
//
case BaseOutputDocInterface::Version: return "version";
//
case BaseOutputDocInterface::Since: return "since";
//
case BaseOutputDocInterface::Date: return "date";
//
case BaseOutputDocInterface::Bug: return "bug";
//
case BaseOutputDocInterface::Note: return "note";
//
case BaseOutputDocInterface::Warning: return "warning";
//
case BaseOutputDocInterface::Par: return "par";
//
case BaseOutputDocInterface::Deprecated: return "deprecated";
//
case BaseOutputDocInterface::Pre: return "pre";
//
case BaseOutputDocInterface::Post: return "post";
//
case BaseOutputDocInterface::Invar: return "invariant";
//
case BaseOutputDocInterface::Remark: return "remark";
//
case BaseOutputDocInterface::Attention: return "attention";
//
case BaseOutputDocInterface::Todo: return "todo";
//
case BaseOutputDocInterface::Test: return "test";
//
case BaseOutputDocInterface::RCS: return "rcs";
//
case BaseOutputDocInterface::EnumValues: return "enumvalues";
//
case BaseOutputDocInterface::Examples: return "examples";
//
}
//
return "illegal";
//
}
inline
void
writeXMLString
(
QTextStream
&
t
,
const
char
*
s
)
...
...
@@ -82,6 +84,26 @@ inline void writeXMLString(QTextStream &t,const char *s)
t
<<
convertToXML
(
s
);
}
static
void
writeXMLHeader
(
QTextStream
&
t
)
{
QCString
dtdName
=
Config_getString
(
"XML_DTD"
);
QCString
schemaName
=
Config_getString
(
"XML_SCHEMA"
);
t
<<
"<?xml version='1.0' encoding='ISO-8859-1' standalone='"
;
if
(
dtdName
.
isEmpty
()
&&
schemaName
.
isEmpty
())
t
<<
"yes"
;
else
t
<<
"no"
;
t
<<
"'?>"
<<
endl
;
if
(
!
dtdName
.
isEmpty
())
{
t
<<
"<!DOCTYPE doxygen SYSTEM
\"
doxygen.dtd
\"
>"
<<
endl
;
}
t
<<
"<doxygen "
;
if
(
!
schemaName
.
isEmpty
())
{
t
<<
"xmlns:xsi=
\"
http://www.w3.org/2001/XMLSchema-instance
\"
"
;
t
<<
"xsi:noNamespaceSchemaLocation=
\"
doxygen.xsd
\"
"
;
}
t
<<
"version=
\"
"
<<
versionString
<<
"
\"
>"
<<
endl
;
}
void
writeXMLLink
(
QTextStream
&
t
,
const
char
*
extRef
,
const
char
*
compoundId
,
const
char
*
anchorId
,
const
char
*
text
)
{
...
...
@@ -168,683 +190,86 @@ template<class T> class ValStack
int
m_size
;
};
/*! This class is used by the documentation parser.
* Its methods are called when some XML text or markup
* needs to be written.
*/
class
XMLGenerator
:
public
OutputDocInterface
class
XMLCodeGenerator
:
public
BaseCodeDocInterface
{
public
:
// helper functions
XMLCodeGenerator
(
QTextStream
&
t
)
:
m_t
(
t
),
m_lineNumber
(
-
1
),
m_insideCodeLine
(
FALSE
),
m_normalHLNeedStartTag
(
TRUE
),
m_insideSpecialHL
(
FALSE
)
{}
virtual
~
XMLCodeGenerator
()
{}
void
startParMode
()
{
if
(
!
m_inParStack
.
isEmpty
()
&&
!
m_inParStack
.
top
())
{
m_inParStack
.
top
()
=
TRUE
;
m_t
<<
"<para>"
;
XML_DB
((
"start par at level=%d
\n
"
,
m_inParStack
.
count
()));
}
else
if
(
m_inParStack
.
isEmpty
())
{
m_inParStack
.
push
(
TRUE
);
m_t
<<
"<para>"
;
XML_DB
((
"start par at level=%d
\n
"
,
m_inParStack
.
count
()));
}
}
void
endParMode
()
{
if
(
!
m_inParStack
.
isEmpty
()
&&
m_inParStack
.
top
())
{
m_inParStack
.
top
()
=
FALSE
;
m_t
<<
"</para>"
<<
endl
;
XML_DB
((
"end par at level=%d
\n
"
,
m_inParStack
.
count
()));
}
}
void
startNestedPar
()
{
m_inParStack
.
push
(
FALSE
);
XML_DB
((
"enter par level=%d
\n
"
,
m_inParStack
.
count
()));
}
void
endNestedPar
()
{
XML_DB
((
"leave par level=%d
\n
"
,
m_inParStack
.
count
()));
if
(
m_inParStack
.
pop
())
{
m_t
<<
"</para>"
<<
endl
;
}
else
{
//XML_DB(("ILLEGAL par level!\n"));
}
}
// Standard generator functions to be implemented by all generators
void
docify
(
const
char
*
s
)
{
if
(
m_outputEnabled
)
{
XML_DB
((
"(docify
\"
%s
\"
)
\n
"
,
s
));
startParMode
();
writeXMLString
(
m_t
,
s
);
}
}
void
writeChar
(
char
c
)
{
char
s
[
2
];
s
[
0
]
=
c
;
s
[
1
]
=
0
;
docify
(
s
);
}
void
writeString
(
const
char
*
text
)
{
//m_t << text;
docify
(
text
);
}
void
startItemList
()
{
XML_DB
((
"(startItemList)
\n
"
));
startParMode
();
m_t
<<
"<itemizedlist>"
<<
endl
;;
m_inListStack
.
push
(
TRUE
);
}
void
startEnumList
()
{
XML_DB
((
"(startEnumList)
\n
"
));
startParMode
();
m_t
<<
"<orderedlist>"
;
m_inListStack
.
push
(
TRUE
);
}
void
writeListItem
()
{
XML_DB
((
"(writeListItem)
\n
"
));
if
(
!
m_inListStack
.
isEmpty
()
&&
m_inListStack
.
top
())
// first element
{
m_inListStack
.
top
()
=
FALSE
;
}
else
// not first element, end previous element first
{
endParMode
();
endNestedPar
();
m_t
<<
"</listitem>"
<<
endl
;
}
m_t
<<
"<listitem>"
;
startNestedPar
();
}
void
endItemList
()
{
XML_DB
((
"(endItemList)
\n
"
));
if
(
!
m_inListStack
.
isEmpty
()
&&
!
m_inListStack
.
pop
())
// first element
{
endParMode
();
endNestedPar
();
m_t
<<
"</listitem>"
<<
endl
;
}
m_t
<<
"</itemizedlist>"
<<
endl
;
}
void
endEnumList
()
{
XML_DB
((
"(endEnumList)
\n
"
));
if
(
!
m_inListStack
.
isEmpty
()
&&
!
m_inListStack
.
pop
())
// first element
{
endParMode
();
m_t
<<
"</listitem>"
<<
endl
;
endNestedPar
();
}
m_t
<<
"</orderedlist>"
<<
endl
;
}
void
newParagraph
()
{
XML_DB
((
"(newParagraph)
\n
"
));
endParMode
();
startParMode
();
}
void
startBold
()
{
XML_DB
((
"(startBold)
\n
"
));
startParMode
();
m_t
<<
"<bold>"
;
// non DocBook
}
void
endBold
()
{
XML_DB
((
"(endBold)
\n
"
));
m_t
<<
"</bold>"
;
// non DocBook
}
void
startTypewriter
()
{
XML_DB
((
"(startTypewriter)
\n
"
));
startParMode
();
m_t
<<
"<computeroutput>"
;
}
void
endTypewriter
()
{
XML_DB
((
"(endTypewriter)
\n
"
));
m_t
<<
"</computeroutput>"
;
}
void
startEmphasis
()
{
XML_DB
((
"(startEmphasis)
\n
"
));
startParMode
();
m_t
<<
"<emphasis>"
;
}
void
endEmphasis
()
{
XML_DB
((
"(endEmphasis)
\n
"
));
m_t
<<
"</emphasis>"
;
}
void
startCodeFragment
()
{
XML_DB
((
"(startCodeFragment)
\n
"
));
startParMode
();
m_t
<<
"<programlisting>"
;
}
void
endCodeFragment
()
{
XML_DB
((
"(endCodeFragment)
\n
"
));
m_t
<<
"</programlisting>"
;
}
void
startPreFragment
()
{
XML_DB
((
"(startPreFragment)
\n
"
));
startParMode
();
m_t
<<
"<preformatted>"
;
}
void
endPreFragment
()
{
XML_DB
((
"(endPreFragment)
\n
"
));
m_t
<<
"</preformatted>"
;
}
void
startVerbatimFragment
()
{
XML_DB
((
"(startVerbatimFragment)
\n
"
));
startParMode
();
m_t
<<
"<preformatted>"
;
}
void
endVerbatimFragment
()
{
XML_DB
((
"(endVerbatimFragment)
\n
"
));
m_t
<<
"</preformatted>"
;
}
void
writeRuler
()
{
XML_DB
((
"(startParMode)
\n
"
));
startParMode
();
m_t
<<
"<hruler/>"
;
}
void
startDescription
()
{
XML_DB
((
"(startDescription)
\n
"
));
startParMode
();
m_t
<<
"<variablelist>"
;
m_inListStack
.
push
(
TRUE
);
}
void
endDescription
()
{
XML_DB
((
"(endDescription)
\n
"
));
if
(
!
m_inListStack
.
isEmpty
()
&&
!
m_inListStack
.
pop
())
// first element
{
endNestedPar
();
m_t
<<
"</listitem>"
<<
endl
;
}
m_t
<<
"</variablelist>"
;
if
(
!
m_inListStack
.
isEmpty
())
m_inListStack
.
pop
();
}
void
startDescItem
()
{
XML_DB
((
"(startDescItem)
\n
"
));
if
(
!
m_inListStack
.
isEmpty
()
&&
m_inListStack
.
top
())
// first element
{
m_inListStack
.
top
()
=
FALSE
;
}
else
// not first element, end previous element first
{
endNestedPar
();
m_t
<<
"</listitem>"
;
}
m_t
<<
"<varlistentry><term>"
;
}
void
endDescItem
()
{
XML_DB
((
"(endDescItem)
\n
"
));
m_t
<<
"</term></varlistentry><listitem>"
;
startNestedPar
();
}
void
startDescList
(
SectionTypes
st
)
{
XML_DB
((
"(startDescList)
\n
"
));
endParMode
();
m_t
<<
"<simplesect kind=
\"
"
<<
sectionTypeToString
(
st
);
m_t
<<
"
\"
><title>"
;
startNestedPar
();
m_inParStack
.
top
()
=
TRUE
;
}
void
endDescList
()
{
XML_DB
((
"(endDescList)
\n
"
));
endNestedPar
();
m_t
<<
"</simplesect>"
;
}
void
startSimpleSect
(
SectionTypes
st
,
const
char
*
,
const
char
*
,
const
char
*
)
{
XML_DB
((
"(startSimpleSect)
\n
"
));
m_t
<<
"<simplesect kind=
\"
"
<<
sectionTypeToString
(
st
)
<<
"
\"
>"
;
startNestedPar
();
}
void
endSimpleSect
()
void
codify
(
const
char
*
text
)
{
XML_DB
((
"(endSimpleSect)
\n
"
));
endNestedPar
();
m_t
<<
"</simplesect>"
;
}
void
startParamList
(
ParamListTypes
t
,
const
char
*
)
{
XML_DB
((
"(startParamList)
\n
"
));
startParMode
();
QCString
kind
;
switch
(
t
)
XML_DB
((
"(codify
\"
%s
\"
)
\n
"
,
text
));
if
(
m_insideCodeLine
&&
!
m_insideSpecialHL
&&
m_normalHLNeedStartTag
)
{
case
Param
:
kind
=
"param"
;
break
;
case
RetVal
:
kind
=
"retval"
;
break
;
case
Exception
:
kind
=
"exception"
;
break
;
m_t
<<
"<highlight class=
\"
normal
\"
>"
;
m_normalHLNeedStartTag
=
FALSE
;
}
m_t
<<
"<parameterlist kind=
\"
"
<<
kind
<<
"
\"
>"
;
// non DocBook
startNestedPar
();
m_inParStack
.
top
()
=
TRUE
;
m_inParamList
=
TRUE
;
}
void
endParamList
()
{
XML_DB
((
"(endParamList)
\n
"
));
m_inParamList
=
FALSE
;
m_t
<<
"</parameterlist>"
;
}
void
endDescTitle
()
{
m_inParStack
.
top
()
=
FALSE
;
endNestedPar
();
XML_DB
((
"(endDescTitle)
\n
"
));
m_t
<<
"</title>"
;
if
(
!
m_inParamList
)
startNestedPar
();
}
void
writeDescItem
()
{
XML_DB
((
"(writeDescItem)
\n
"
));
}
void
startDescTable
()
{
XML_DB
((
"(startDescTable)
\n
"
));
}
void
endDescTable
()
{
XML_DB
((
"(endDescTable)
\n
"
));
}
void
startDescTableTitle
()
{
XML_DB
((
"(startDescTableTitle)
\n
"
));
m_t
<<
"<parametername>"
;
// non docbook
}
void
endDescTableTitle
()
{
XML_DB
((
"(endDescTableTitle)
\n
"
));
m_t
<<
"</parametername>"
;
// non docbook
}
void
startDescTableData
()
{
XML_DB
((
"(startDescTableData)
\n
"
));
m_t
<<
"<parameterdescription>"
;
// non docbook
startNestedPar
();
}
void
endDescTableData
()
{
XML_DB
((
"(endDescTableData)
\n
"
));
endNestedPar
();
m_t
<<
"</parameterdescription>"
;
// non docbook
}
void
lineBreak
()
{
XML_DB
((
"(lineBreak)
\n
"
));
startParMode
();
m_t
<<
"<linebreak/>"
;
// non docbook
}
void
writeNonBreakableSpace
(
int
num
)
{
XML_DB
((
"(writeNonBreakableSpace)
\n
"
));
int
i
;
for
(
i
=
0
;
i
<
num
;
i
++
)
m_t
<<
" "
;
}
void
writeObjectLink
(
const
char
*
ref
,
const
char
*
file
,
const
char
*
anchor
,
const
char
*
text
)
{
XML_DB
((
"(writeObjectLink)
\n
"
));
startParMode
();
writeXMLLink
(
m_t
,
ref
,
file
,
anchor
,
text
);
writeXMLString
(
m_t
,
text
);
}
void
writeCodeLink
(
const
char
*
ref
,
const
char
*
file
,
const
char
*
anchor
,
const
char
*
text
)
{
XML_DB
((
"(writeCodeLink)
\n
"
));
writeXMLLink
(
m_t
,
ref
,
file
,
anchor
,
text
);
}
void
startHtmlLink
(
const
char
*
url
)
{
XML_DB
((
"(startHtmlLink)
\n
"
));
startParMode
();
m_t
<<
"<ulink url=
\"
"
<<
url
<<
"
\"
>"
;
}
void
endHtmlLink
()
{
XML_DB
((
"(endHtmlLink)
\n
"
));
m_t
<<
"</ulink>"
;
}
void
writeMailLink
(
const
char
*
url
)
{
XML_DB
((
"(writeMailLink)
\n
"
));
startParMode
();
m_t
<<
"<email>"
;
docify
(
url
);
m_t
<<
"</email>"
;
}
void
startSection
(
const
char
*
id
,
const
char
*
,
SectionInfo
::
SectionType
type
)
{
XML_DB
((
"(startSection)
\n
"
));
endParMode
();
m_t
<<
"<sect"
;
switch
(
type
)
{
case
SectionInfo
:
:
Page
:
m_t
<<
"1"
;
break
;
case
SectionInfo
:
:
Section
:
m_t
<<
"2"
;
break
;
case
SectionInfo
:
:
Subsection
:
m_t
<<
"3"
;
break
;
default
:
ASSERT
(
0
);
break
;
}
m_t
<<
" id=
\"
"
<<
id
<<
"
\"
>"
;
startNestedPar
();
m_inParStack
.
top
()
=
TRUE
;
}
void
endSection
(
const
char
*
,
SectionInfo
::
SectionType
type
)
{
XML_DB
((
"(endSection)
\n
"
));
m_t
<<
"</sect"
;
switch
(
type
)
{
case
SectionInfo
:
:
Page
:
m_t
<<
"1"
;
break
;
case
SectionInfo
:
:
Section
:
m_t
<<
"2"
;
break
;
case
SectionInfo
:
:
Subsection
:
m_t
<<
"3"
;
break
;
default
:
ASSERT
(
0
);
break
;
}
m_t
<<
">"
;
m_inParStack
.
top
()
=
FALSE
;
endNestedPar
();
}
void
startSubsection
()
{
XML_DB
((
"(startSubsection)
\n
"
));
endParMode
();
m_t
<<
"<sect2>"
;
startNestedPar
();
m_inParStack
.
top
()
=
TRUE
;
}
void
endSubsection
()
{
XML_DB
((
"(endSubsection)
\n
"
));
m_t
<<
"</sect2>"
;
m_inParStack
.
top
()
=
FALSE
;
endNestedPar
();
}
void
startSubsubsection
()
{
XML_DB
((
"(startSubsubsection)
\n
"
));
endParMode
();
m_t
<<
"<sect3>"
;
startNestedPar
();
m_inParStack
.
top
()
=
TRUE
;
}
void
endSubsubsection
()
{
XML_DB
((
"(endSubsubsection)
\n
"
));
m_t
<<
"</sect3>"
;
m_inParStack
.
top
()
=
FALSE
;
endNestedPar
();
}
void
startCenter
()
{
XML_DB
((
"(startCenter)
\n
"
));
startParMode
();
m_t
<<
"<center>"
;
// non docbook
}
void
endCenter
()
{
XML_DB
((
"(endCenter)
\n
"
));
m_t
<<
"</center>"
;
// non docbook
}
void
startSmall
()
{
XML_DB
((
"(startSmall)
\n
"
));
startParMode
();
m_t
<<
"<small>"
;
// non docbook
}
void
endSmall
()
{
XML_DB
((
"(endSmall)
\n
"
));
m_t
<<
"</small>"
;
// non docbook
}
void
startSubscript
()
{
XML_DB
((
"(startSubscript)
\n
"
));
startParMode
();
m_t
<<
"<subscript>"
;
}
void
endSubscript
()
{
XML_DB
((
"(endSubscript)
\n
"
));
m_t
<<
"</subscript>"
;
}
void
startSuperscript
()
{
XML_DB
((
"(startSuperscript)
\n
"
));
startParMode
();
m_t
<<
"<superscript>"
;
}
void
endSuperscript
()
{
XML_DB
((
"(endSuperscript)
\n
"
));
m_t
<<
"</superscript>"
;
}
void
startTable
(
bool
,
int
cols
)
{
XML_DB
((
"startTable
\n
"
));
startParMode
();
m_t
<<
"<table cols=
\"
"
<<
cols
<<
"
\"
>
\n
"
;
}
void
endTable
(
bool
hasCaption
)
{
XML_DB
((
"endTable
\n
"
));
if
(
!
hasCaption
)
m_t
<<
"</row>
\n
"
;
m_t
<<
"</table>"
;
}
void
startCaption
()
{
XML_DB
((
"startCaption"
));
m_t
<<
"</row><caption>"
;
}
void
endCaption
()
{
XML_DB
((
"encCaption"
));
m_t
<<
"</caption>"
;
}
void
nextTableRow
()
{
XML_DB
((
"(nextTableRow)
\n
"
));
m_t
<<
"<row><entry>"
;
// we need manually add a para here because cells are
// parsed before the table is generated, and thus
// are already parsed as if they are inside a paragraph.
m_t
<<
"<para>"
;
}
void
endTableRow
()
{
XML_DB
((
"(endTableRow)
\n
"
));
m_t
<<
"</row>"
<<
endl
;
}
void
nextTableColumn
()
{
XML_DB
((
"(nextTableColumn)
\n
"
));
m_t
<<
"<entry>"
;
// we need manually add a para here because cells are
// parsed before the table is generated, and thus
// are already parsed as if they are inside a paragraph.
m_t
<<
"<para>"
;
}
void
endTableColumn
()
{
XML_DB
((
"(endTableColumn)
\n
"
));
// we need manually add a para here because cells are
// parsed before the table is generated, and thus
// are already parsed as if they are inside a paragraph.
m_t
<<
"</para>"
;
m_t
<<
"</entry>"
;
}
void
writeQuote
()
{
m_t
<<
"
\"
"
;
}
void
writeCopyright
()
{
m_t
<<
"©"
;
}
void
writeUmlaut
(
char
c
)
{
m_t
<<
"&"
<<
c
<<
"uml;"
;
}
void
writeAcute
(
char
c
)
{
m_t
<<
"&"
<<
c
<<
"acute;"
;
}
void
writeGrave
(
char
c
)
{
m_t
<<
"&"
<<
c
<<
"grave;"
;
}
void
writeCirc
(
char
c
)
{
m_t
<<
"&"
<<
c
<<
"circ;"
;
}
void
writeTilde
(
char
c
)
{
m_t
<<
"&"
<<
c
<<
"tilde;"
;
}
void
writeRing
(
char
c
)
{
m_t
<<
"&"
<<
c
<<
"ring;"
;
}
void
writeSharpS
()
{
m_t
<<
"ß"
;
}
void
writeCCedil
(
char
c
)
{
m_t
<<
"&"
<<
c
<<
"cedil;"
;
}
void
startTitle
()
{
XML_DB
((
"(startTitle)
\n
"
));
m_t
<<
"<title>"
;
startNestedPar
();
m_inParStack
.
top
()
=
TRUE
;
}
void
endTitle
()
{
m_inParStack
.
top
()
=
FALSE
;
endNestedPar
();
XML_DB
((
"(endTitle)
\n
"
));
m_t
<<
"</title>"
<<
endl
;
}
void
writeAnchor
(
const
char
*
id
,
const
char
*
name
)
{
XML_DB
((
"(writeAnchor)
\n
"
));
startParMode
();
m_t
<<
"<anchor id=
\"
"
<<
id
<<
"_1"
<<
name
<<
"
\"
/>"
;
}
void
writeSectionRef
(
const
char
*
,
const
char
*
id
,
const
char
*
name
,
const
char
*
text
)
{
XML_DB
((
"(writeSectionRef)
\n
"
));
startParMode
();
m_t
<<
"<link linkend=
\"
"
<<
id
<<
"_1"
<<
name
<<
"
\"
>"
;
docify
(
text
);
m_t
<<
"</link>"
;
}
void
writeSectionRefItem
(
const
char
*
,
const
char
*
,
const
char
*
)
{
m_t
<<
"(writeSectionRefItem)"
;
}
void
addIndexItem
(
const
char
*
primaryie
,
const
char
*
secondaryie
)
{
XML_DB
((
"(addIndexItem)
\n
"
));
startParMode
();
m_t
<<
"<indexentry><primaryie>"
;
docify
(
primaryie
);
m_t
<<
"</primaryie><secondaryie>"
;
docify
(
secondaryie
);
m_t
<<
"</secondaryie></indexentry>"
;
}
void
writeFormula
(
const
char
*
id
,
const
char
*
text
)
{
XML_DB
((
"(writeFormula)
\n
"
));
startParMode
();
m_t
<<
"<formula id=
\"
"
<<
id
<<
"
\"
>"
;
// non Docbook
docify
(
text
);
m_t
<<
"</formula>"
;
}
void
startImage
(
const
char
*
name
,
const
char
*
size
,
bool
/*caption*/
)
{
XML_DB
((
"(startImage)
\n
"
));
startParMode
();
m_t
<<
"<image name=
\"
"
<<
name
<<
"
\"
"
;
if
(
size
)
m_t
<<
" size=
\"
"
<<
size
<<
"
\"
"
;
m_t
<<
">"
;
// non docbook
}
void
endImage
(
bool
)
{
XML_DB
((
"(endImage)
\n
"
));
m_t
<<
"</image>"
;
}
void
startDotFile
(
const
char
*
name
,
bool
/*caption*/
)
{
XML_DB
((
"(startDotFile)
\n
"
));
startParMode
();
m_t
<<
"<dotfile name=
\"
"
<<
name
<<
"
\"
>"
;
// non docbook
}
void
endDotFile
(
bool
)
{
XML_DB
((
"(endDotFile)
\n
"
));
m_t
<<
"</dotfile>"
;
}
void
startTextLink
(
const
char
*
name
,
const
char
*
anchor
)
{
XML_DB
((
"(startTextLink)
\n
"
));
startParMode
();
m_t
<<
"<ulink url=
\"
"
<<
name
<<
"#"
<<
anchor
<<
"
\"
>"
;
}
void
endTextLink
()
{
XML_DB
((
"(endTextLink)
\n
"
));
m_t
<<
"</ulink>"
;
}
void
startPageRef
()
{
XML_DB
((
"(startPageRef)
\n
"
));
m_outputEnabled
=
FALSE
;
}
void
endPageRef
(
const
char
*
,
const
char
*
)
{
XML_DB
((
"(endPageRef)
\n
"
));
m_outputEnabled
=
TRUE
;
}
void
writeLineNumber
(
const
char
*
extRef
,
const
char
*
compId
,
const
char
*
anchorId
,
int
l
)
{
XML_DB
((
"(writeLineNumber)
\n
"
));
m_t
<<
"<linenumber"
;
m_t
<<
" line=
\"
"
<<
l
<<
"
\"
"
;
if
(
compId
)
if
(
m_insideCodeLine
&&
!
m_insideSpecialHL
&&
m_normalHLNeedStartTag
)
{
m_t
<<
" refid=
\"
"
<<
compId
;
if
(
anchorId
)
m_t
<<
"_1"
<<
anchorId
;
m_t
<<
"
\"
kindref=
\"
"
;
if
(
anchorId
)
m_t
<<
"member"
;
else
m_t
<<
"compound"
;
m_t
<<
"
\"
"
;
if
(
extRef
)
m_t
<<
" external=
\"
"
<<
extRef
<<
"
\"
"
;
m_t
<<
"<highlight class=
\"
normal
\"
>"
;
m_normalHLNeedStartTag
=
FALSE
;
}
m_t
<<
"/>"
;
writeXMLLink
(
m_t
,
ref
,
file
,
anchor
,
text
)
;
}
void
startCodeLine
()
{
XML_DB
((
"(startCodeLine)
\n
"
));
startParMode
();
m_t
<<
"<codeline>"
;
// non DocBook
m_t
<<
"<codeline"
;
if
(
m_lineNumber
!=-
1
)
{
m_t
<<
" lineno=
\"
"
<<
m_lineNumber
<<
"
\"
"
;
if
(
!
m_refId
.
isEmpty
())
{
m_t
<<
" refid=
\"
"
<<
m_refId
<<
"
\"
"
;
if
(
m_isMemberRef
)
{
m_t
<<
" refkind=
\"
member
\"
"
;
}
else
{
m_t
<<
" refkind=
\"
compound
\"
"
;
}
}
if
(
!
m_external
.
isEmpty
())
{
m_t
<<
" external=
\"
"
<<
m_external
<<
"
\"
"
;
}
}
m_t
<<
">"
;
m_insideCodeLine
=
TRUE
;
}
void
endCodeLine
()
{
XML_DB
((
"(endCodeLine)
\n
"
));
if
(
!
m_insideSpecialHL
&&
!
m_normalHLNeedStartTag
)
{
m_t
<<
"</highlight>"
;
m_normalHLNeedStartTag
=
TRUE
;
}
m_t
<<
"</codeline>"
<<
endl
;
// non DocBook
m_lineNumber
=
-
1
;
m_refId
.
resize
(
0
);
m_external
.
resize
(
0
);
m_insideCodeLine
=
FALSE
;
}
void
startCodeAnchor
(
const
char
*
id
)
{
XML_DB
((
"(startCodeAnchor)
\n
"
));
startParMode
();
if
(
m_insideCodeLine
&&
!
m_insideSpecialHL
&&
m_normalHLNeedStartTag
)
{
m_t
<<
"<highlight class=
\"
normal
\"
>"
;
m_normalHLNeedStartTag
=
FALSE
;
}
m_t
<<
"<anchor id=
\"
"
<<
id
<<
"
\"
>"
;
}
void
endCodeAnchor
()
...
...
@@ -855,134 +280,867 @@ class XMLGenerator : public OutputDocInterface
void
startFontClass
(
const
char
*
colorClass
)
{
XML_DB
((
"(startFontClass)
\n
"
));
if
(
m_insideCodeLine
&&
!
m_insideSpecialHL
&&
!
m_normalHLNeedStartTag
)
{
m_t
<<
"</highlight>"
;
m_normalHLNeedStartTag
=
TRUE
;
}
m_t
<<
"<highlight class=
\"
"
<<
colorClass
<<
"
\"
>"
;
// non DocBook
m_insideSpecialHL
=
TRUE
;
}
void
endFontClass
()
{
XML_DB
((
"(endFontClass)
\n
"
));
m_t
<<
"</highlight>"
;
// non DocBook
}
void
codify
(
const
char
*
text
)
{
XML_DB
((
"(codify
\"
%s
\"
)
\n
"
,
text
));
docify
(
text
);
}
void
startHtmlOnly
()
{
XML_DB
((
"(startHtmlOnly)
\n
"
));
m_t
<<
"<htmlonly>"
<<
endl
;
}
void
endHtmlOnly
()
{
XML_DB
((
"(endHtmlOnly)
\n
"
));
m_t
<<
"</htmlonly>"
<<
endl
;
}
void
startLatexOnly
()
{
XML_DB
((
"(startLatexOnly)
\n
"
));
m_t
<<
"<latexonly>"
<<
endl
;
}
void
endLatexOnly
()
{
XML_DB
((
"(endLatexOnly)
\n
"
));
m_t
<<
"</latexonly>"
<<
endl
;
}
void
startSectionRefList
()
{
XML_DB
((
"(startSectionRefList)
\n
"
));
}
void
endSectionRefList
()
{
XML_DB
((
"(endSectionRefList)
\n
"
));
m_insideSpecialHL
=
FALSE
;
}
void
writeCodeAnchor
(
const
char
*
)
{
XML_DB
((
"(writeCodeAnchor)
\n
"
));
}
// Generator specific functions
/*! Create a clone of this generator. Uses the copy constructor */
OutputDocInterface
*
clone
()
void
writeLineNumber
(
const
char
*
extRef
,
const
char
*
compId
,
const
char
*
anchorId
,
int
l
)
{
return
new
XMLGenerator
(
this
);
XML_DB
((
"(writeLineNumber)
\n
"
));
// we remember the information provided here to use it
// at the <codeline> start tag.
m_lineNumber
=
l
;
if
(
compId
)
{
m_refId
=
compId
;
if
(
anchorId
)
m_refId
+=
(
QCString
)
"_1"
+
anchorId
;
m_isMemberRef
=
anchorId
!=
0
;
if
(
extRef
)
m_external
=
extRef
;
}
}
/*! Append the output written to generator \a g to this generator */
void
append
(
const
OutputDocInterface
*
g
)
{
const
XMLGenerator
*
xg
=
(
const
XMLGenerator
*
)
g
;
//printf("Appending \n>>>>\n`%s'\n<<<<\n and \n>>>>\n`%s'\n<<<<\n",getContents().data(),xg->getContents().data());
m_t
<<
xg
->
getContents
();
m_inParStack
=
xg
->
m_inParStack
;
m_inListStack
=
xg
->
m_inListStack
;
m_inParamList
=
xg
->
m_inParamList
;
}
/*! constructor.
*/
XMLGenerator
()
{
m_b
.
setBuffer
(
m_a
);
m_b
.
open
(
IO_WriteOnly
);
m_t
.
setDevice
(
&
m_b
);
m_t
.
setEncoding
(
QTextStream
::
Latin1
);
m_inParamList
=
FALSE
;
m_outputEnabled
=
TRUE
;
}
/*! copy constructor */
XMLGenerator
(
const
XMLGenerator
*
xg
)
{
m_b
.
setBuffer
(
m_a
);
m_b
.
open
(
IO_WriteOnly
);
m_t
.
setDevice
(
&
m_b
);
m_t
.
setEncoding
(
QTextStream
::
Latin1
);
//printf("Cloning >>%s<< m_parStack.count()=%d\n",
// xg->getContents().data(),xg->m_inParStack.count());
// copy state variables
m_inParStack
=
xg
->
m_inParStack
;
m_inListStack
=
xg
->
m_inListStack
;
m_inParamList
=
xg
->
m_inParamList
;
m_outputEnabled
=
xg
->
m_outputEnabled
;
}
/*! destructor */
virtual
~
XMLGenerator
()
{
}
/*! Returns the output written to this generator as a string */
QCString
getContents
()
const
{
QCString
s
;
s
.
resize
(
m_a
.
size
()
+
1
);
memcpy
(
s
.
data
(),
m_a
.
data
(),
m_a
.
size
());
s
.
at
(
m_a
.
size
())
=
'\0'
;
return
s
;
}
private
:
// only one destination stream, so these do not have to be implemented
void
pushGeneratorState
()
{}
void
popGeneratorState
()
{}
void
disableAllBut
(
OutputGenerator
::
OutputType
)
{}
void
enableAll
()
{}
void
disableAll
()
{}
void
disable
(
OutputGenerator
::
OutputType
)
{}
void
enable
(
OutputGenerator
::
OutputType
)
{}
bool
isEnabled
(
OutputGenerator
::
OutputType
)
{
return
TRUE
;
}
QTextStream
m_t
;
QByteArray
m_a
;
QBuffer
m_b
;
ValStack
<
bool
>
m_inParStack
;
ValStack
<
bool
>
m_inListStack
;
bool
m_inParamList
;
bool
m_outputEnabled
;
friend
void
writeXMLCodeBlock
(
QTextStream
&
t
,
FileDef
*
fd
);
QTextStream
&
m_t
;
QCString
m_refId
;
QCString
m_external
;
int
m_lineNumber
;
bool
m_isMemberRef
;
bool
m_insideCodeLine
;
bool
m_normalHLNeedStartTag
;
bool
m_insideSpecialHL
;
};
// /*! This class is used by the documentation parser.
// * Its methods are called when some XML text or markup
// * needs to be written.
// */
// class XMLGenerator : public OutputDocInterface
// {
// public:
//
// // helper functions
//
// void startParMode()
// {
// if (!m_inParStack.isEmpty() && !m_inParStack.top())
// {
// m_inParStack.top() = TRUE;
// m_t << "<para>";
// XML_DB(("start par at level=%d\n",m_inParStack.count()));
// }
// else if (m_inParStack.isEmpty())
// {
// m_inParStack.push(TRUE);
// m_t << "<para>";
// XML_DB(("start par at level=%d\n",m_inParStack.count()));
// }
// }
// void endParMode()
// {
// if (!m_inParStack.isEmpty() && m_inParStack.top())
// {
// m_inParStack.top() = FALSE;
// m_t << "</para>" << endl;
// XML_DB(("end par at level=%d\n",m_inParStack.count()));
// }
// }
// void startNestedPar()
// {
// m_inParStack.push(FALSE);
// XML_DB(("enter par level=%d\n",m_inParStack.count()));
// }
// void endNestedPar()
// {
// XML_DB(("leave par level=%d\n",m_inParStack.count()));
// if (m_inParStack.pop())
// {
// m_t << "</para>" << endl;
// }
// else
// {
// //XML_DB(("ILLEGAL par level!\n"));
// }
// }
//
// // Standard generator functions to be implemented by all generators
//
// void docify(const char *s)
// {
// if (m_outputEnabled)
// {
// XML_DB(("(docify \"%s\")\n",s));
// startParMode();
// writeXMLString(m_t,s);
// }
// }
// void writeChar(char c)
// {
// char s[2];s[0]=c;s[1]=0;
// docify(s);
// }
// void writeString(const char *text)
// {
// //m_t << text;
// docify(text);
// }
// void startItemList()
// {
// XML_DB(("(startItemList)\n"));
// startParMode();
// m_t << "<itemizedlist>" << endl;;
// m_inListStack.push(TRUE);
// }
// void startEnumList()
// {
// XML_DB(("(startEnumList)\n"));
// startParMode();
// m_t << "<orderedlist>";
// m_inListStack.push(TRUE);
// }
// void writeListItem()
// {
// XML_DB(("(writeListItem)\n"));
// if (!m_inListStack.isEmpty() && m_inListStack.top()) // first element
// {
// m_inListStack.top()=FALSE;
// }
// else // not first element, end previous element first
// {
// endParMode();
// endNestedPar();
// m_t << "</listitem>" << endl;
// }
// m_t << "<listitem>";
// startNestedPar();
// }
// void endItemList()
// {
// XML_DB(("(endItemList)\n"));
// if (!m_inListStack.isEmpty() && !m_inListStack.pop()) // first element
// {
// endParMode();
// endNestedPar();
// m_t << "</listitem>" << endl;
// }
// m_t << "</itemizedlist>" << endl;
// }
// void endEnumList()
// {
// XML_DB(("(endEnumList)\n"));
// if (!m_inListStack.isEmpty() && !m_inListStack.pop()) // first element
// {
// endParMode();
// m_t << "</listitem>" << endl;
// endNestedPar();
// }
// m_t << "</orderedlist>" << endl;
// }
// void newParagraph()
// {
// XML_DB(("(newParagraph)\n"));
// endParMode();
// startParMode();
// }
// void startBold()
// {
// XML_DB(("(startBold)\n"));
// startParMode();
// m_t << "<bold>"; // non DocBook
// }
// void endBold()
// {
// XML_DB(("(endBold)\n"));
// m_t << "</bold>"; // non DocBook
// }
// void startTypewriter()
// {
// XML_DB(("(startTypewriter)\n"));
// startParMode();
// m_t << "<computeroutput>";
// }
// void endTypewriter()
// {
// XML_DB(("(endTypewriter)\n"));
// m_t << "</computeroutput>";
// }
// void startEmphasis()
// {
// XML_DB(("(startEmphasis)\n"));
// startParMode();
// m_t << "<emphasis>";
// }
// void endEmphasis()
// {
// XML_DB(("(endEmphasis)\n"));
// m_t << "</emphasis>";
// }
// void startCodeFragment()
// {
// XML_DB(("(startCodeFragment)\n"));
// startParMode();
// m_t << "<programlisting>";
// }
// void endCodeFragment()
// {
// XML_DB(("(endCodeFragment)\n"));
// m_t << "</programlisting>";
// }
// void startPreFragment()
// {
// XML_DB(("(startPreFragment)\n"));
// startParMode();
// m_t << "<preformatted>";
// }
// void endPreFragment()
// {
// XML_DB(("(endPreFragment)\n"));
// m_t << "</preformatted>";
// }
// void startVerbatimFragment()
// {
// XML_DB(("(startVerbatimFragment)\n"));
// startParMode();
// m_t << "<preformatted>";
// }
// void endVerbatimFragment()
// {
// XML_DB(("(endVerbatimFragment)\n"));
// m_t << "</preformatted>";
// }
// void writeRuler()
// {
// XML_DB(("(startParMode)\n"));
// startParMode();
// m_t << "<hruler/>";
// }
// void startDescription()
// {
// XML_DB(("(startDescription)\n"));
// startParMode();
// m_t << "<variablelist>";
// m_inListStack.push(TRUE);
// }
// void endDescription()
// {
// XML_DB(("(endDescription)\n"));
// if (!m_inListStack.isEmpty() && !m_inListStack.pop()) // first element
// {
// endNestedPar();
// m_t << "</listitem>" << endl;
// }
// m_t << "</variablelist>";
// if (!m_inListStack.isEmpty()) m_inListStack.pop();
// }
// void startDescItem()
// {
// XML_DB(("(startDescItem)\n"));
// if (!m_inListStack.isEmpty() && m_inListStack.top()) // first element
// {
// m_inListStack.top()=FALSE;
// }
// else // not first element, end previous element first
// {
// endNestedPar();
// m_t << "</listitem>";
// }
// m_t << "<varlistentry><term>";
// }
// void endDescItem()
// {
// XML_DB(("(endDescItem)\n"));
// m_t << "</term></varlistentry><listitem>";
// startNestedPar();
// }
// void startDescList(SectionTypes st)
// {
// XML_DB(("(startDescList)\n"));
// endParMode();
// m_t << "<simplesect kind=\"" << sectionTypeToString(st);
// m_t << "\"><title>";
// startNestedPar();
// m_inParStack.top() = TRUE;
// }
// void endDescList()
// {
// XML_DB(("(endDescList)\n"));
// endNestedPar();
// m_t << "</simplesect>";
// }
// void startSimpleSect(SectionTypes st,const char *,const char *,const char *)
// {
// XML_DB(("(startSimpleSect)\n"));
// m_t << "<simplesect kind=\"" << sectionTypeToString(st) << "\">";
// startNestedPar();
// }
// void endSimpleSect()
// {
// XML_DB(("(endSimpleSect)\n"));
// endNestedPar();
// m_t << "</simplesect>";
// }
// void startParamList(ParamListTypes t,const char *)
// {
// XML_DB(("(startParamList)\n"));
// startParMode();
// QCString kind;
// switch(t)
// {
// case Param: kind="param"; break;
// case RetVal: kind="retval"; break;
// case Exception: kind="exception"; break;
// }
// m_t << "<parameterlist kind=\"" << kind << "\">"; // non DocBook
// startNestedPar();
// m_inParStack.top() = TRUE;
// m_inParamList = TRUE;
// }
// void endParamList()
// {
// XML_DB(("(endParamList)\n"));
// m_inParamList = FALSE;
// m_t << "</parameterlist>";
// }
// void endDescTitle()
// {
// m_inParStack.top() = FALSE;
// endNestedPar();
// XML_DB(("(endDescTitle)\n"));
// m_t << "</title>";
// if (!m_inParamList) startNestedPar();
// }
// void writeDescItem()
// {
// XML_DB(("(writeDescItem)\n"));
// }
// void startDescTable()
// {
// XML_DB(("(startDescTable)\n"));
// }
// void endDescTable()
// {
// XML_DB(("(endDescTable)\n"));
// }
// void startDescTableTitle()
// {
// XML_DB(("(startDescTableTitle)\n"));
// m_t << "<parametername>"; // non docbook
// }
// void endDescTableTitle()
// {
// XML_DB(("(endDescTableTitle)\n"));
// m_t << "</parametername>"; // non docbook
// }
// void startDescTableData()
// {
// XML_DB(("(startDescTableData)\n"));
// m_t << "<parameterdescription>"; // non docbook
// startNestedPar();
// }
// void endDescTableData()
// {
// XML_DB(("(endDescTableData)\n"));
// endNestedPar();
// m_t << "</parameterdescription>"; // non docbook
// }
// void lineBreak()
// {
// XML_DB(("(lineBreak)\n"));
// startParMode();
// m_t << "<linebreak/>"; // non docbook
// }
// void writeNonBreakableSpace(int num)
// {
// XML_DB(("(writeNonBreakableSpace)\n"));
// int i;for (i=0;i<num;i++) m_t << " ";
// }
//
// void writeObjectLink(const char *ref,const char *file,
// const char *anchor, const char *text)
// {
// XML_DB(("(writeObjectLink)\n"));
// startParMode();
// writeXMLLink(m_t,ref,file,anchor,text);
// }
// void writeCodeLink(const char *ref,const char *file,
// const char *anchor,const char *text)
// {
// XML_DB(("(writeCodeLink)\n"));
// writeXMLLink(m_t,ref,file,anchor,text);
// }
// void startHtmlLink(const char *url)
// {
// XML_DB(("(startHtmlLink)\n"));
// startParMode();
// m_t << "<ulink url=\"" << url << "\">";
// }
// void endHtmlLink()
// {
// XML_DB(("(endHtmlLink)\n"));
// m_t << "</ulink>";
// }
// void writeMailLink(const char *url)
// {
// XML_DB(("(writeMailLink)\n"));
// startParMode();
// m_t << "<email>";
// docify(url);
// m_t << "</email>";
// }
// void startSection(const char *id,const char *,SectionInfo::SectionType type)
// {
// XML_DB(("(startSection)\n"));
// endParMode();
// m_t << "<sect";
// switch(type)
// {
// case SectionInfo::Page: m_t << "1"; break;
// case SectionInfo::Section: m_t << "2"; break;
// case SectionInfo::Subsection: m_t << "3"; break;
// default: ASSERT(0); break;
// }
// m_t << " id=\"" << id << "\">";
// startNestedPar();
// m_inParStack.top() = TRUE;
// }
// void endSection(const char *,SectionInfo::SectionType type)
// {
// XML_DB(("(endSection)\n"));
// m_t << "</sect";
// switch(type)
// {
// case SectionInfo::Page: m_t << "1"; break;
// case SectionInfo::Section: m_t << "2"; break;
// case SectionInfo::Subsection: m_t << "3"; break;
// default: ASSERT(0); break;
// }
// m_t << ">";
// m_inParStack.top() = FALSE;
// endNestedPar();
// }
// void startSubsection()
// {
// XML_DB(("(startSubsection)\n"));
// endParMode();
// m_t << "<sect2>";
// startNestedPar();
// m_inParStack.top() = TRUE;
// }
// void endSubsection()
// {
// XML_DB(("(endSubsection)\n"));
// m_t << "</sect2>";
// m_inParStack.top() = FALSE;
// endNestedPar();
// }
// void startSubsubsection()
// {
// XML_DB(("(startSubsubsection)\n"));
// endParMode();
// m_t << "<sect3>";
// startNestedPar();
// m_inParStack.top() = TRUE;
// }
// void endSubsubsection()
// {
// XML_DB(("(endSubsubsection)\n"));
// m_t << "</sect3>";
// m_inParStack.top() = FALSE;
// endNestedPar();
// }
// void startCenter()
// {
// XML_DB(("(startCenter)\n"));
// startParMode();
// m_t << "<center>"; // non docbook
// }
// void endCenter()
// {
// XML_DB(("(endCenter)\n"));
// m_t << "</center>"; // non docbook
// }
// void startSmall()
// {
// XML_DB(("(startSmall)\n"));
// startParMode();
// m_t << "<small>"; // non docbook
// }
// void endSmall()
// {
// XML_DB(("(endSmall)\n"));
// m_t << "</small>"; // non docbook
// }
// void startSubscript()
// {
// XML_DB(("(startSubscript)\n"));
// startParMode();
// m_t << "<subscript>";
// }
// void endSubscript()
// {
// XML_DB(("(endSubscript)\n"));
// m_t << "</subscript>";
// }
// void startSuperscript()
// {
// XML_DB(("(startSuperscript)\n"));
// startParMode();
// m_t << "<superscript>";
// }
// void endSuperscript()
// {
// XML_DB(("(endSuperscript)\n"));
// m_t << "</superscript>";
// }
// void startTable(bool,int cols)
// {
// XML_DB(("startTable\n"));
// startParMode();
// m_t << "<table cols=\"" << cols << "\">\n";
// }
// void endTable(bool hasCaption)
// {
// XML_DB(("endTable\n"));
// if (!hasCaption) m_t << "</row>\n";
// m_t << "</table>";
// }
// void startCaption()
// {
// XML_DB(("startCaption"));
// m_t << "</row><caption>";
// }
// void endCaption()
// {
// XML_DB(("encCaption"));
// m_t << "</caption>";
// }
// void nextTableRow()
// {
// XML_DB(("(nextTableRow)\n"));
// m_t << "<row><entry>";
//
// // we need manually add a para here because cells are
// // parsed before the table is generated, and thus
// // are already parsed as if they are inside a paragraph.
// m_t << "<para>";
// }
// void endTableRow()
// {
// XML_DB(("(endTableRow)\n"));
// m_t << "</row>" << endl;
// }
// void nextTableColumn()
// {
// XML_DB(("(nextTableColumn)\n"));
// m_t << "<entry>";
//
// // we need manually add a para here because cells are
// // parsed before the table is generated, and thus
// // are already parsed as if they are inside a paragraph.
// m_t << "<para>";
// }
// void endTableColumn()
// {
// XML_DB(("(endTableColumn)\n"));
// // we need manually add a para here because cells are
// // parsed before the table is generated, and thus
// // are already parsed as if they are inside a paragraph.
// m_t << "</para>";
// m_t << "</entry>";
// }
//
// void writeQuote() { m_t << "\""; }
// void writeCopyright() { m_t << "©"; }
// void writeUmlaut(char c) { m_t << "&" << c << "uml;"; }
// void writeAcute(char c) { m_t << "&" << c << "acute;"; }
// void writeGrave(char c) { m_t << "&" << c << "grave;"; }
// void writeCirc(char c) { m_t << "&" << c << "circ;"; }
// void writeTilde(char c) { m_t << "&" << c << "tilde;"; }
// void writeRing(char c) { m_t << "&" << c << "ring;"; }
// void writeSharpS() { m_t << "ß"; }
// void writeCCedil(char c) { m_t << "&" << c << "cedil;"; }
//
// void startTitle()
// {
// XML_DB(("(startTitle)\n"));
// m_t << "<title>";
// startNestedPar();
// m_inParStack.top() = TRUE;
// }
// void endTitle()
// {
// m_inParStack.top() = FALSE;
// endNestedPar();
// XML_DB(("(endTitle)\n"));
// m_t << "</title>" << endl;
// }
// void writeAnchor(const char *id,const char *name)
// {
// XML_DB(("(writeAnchor)\n"));
// startParMode();
// m_t << "<anchor id=\"" << id << "_1" << name << "\"/>";
// }
// void writeSectionRef(const char *,const char *id,
// const char *name,const char *text)
// {
// XML_DB(("(writeSectionRef)\n"));
// startParMode();
// m_t << "<link linkend=\"" << id << "_1" << name << "\">";
// docify(text);
// m_t << "</link>";
// }
// void writeSectionRefItem(const char *,const char *,const char *)
// {
// m_t << "(writeSectionRefItem)";
// }
// void addIndexItem(const char *primaryie,const char *secondaryie)
// {
// XML_DB(("(addIndexItem)\n"));
// startParMode();
// m_t << "<indexentry><primaryie>";
// docify(primaryie);
// m_t << "</primaryie><secondaryie>";
// docify(secondaryie);
// m_t << "</secondaryie></indexentry>";
// }
// void writeFormula(const char *id,const char *text)
// {
// XML_DB(("(writeFormula)\n"));
// startParMode();
// m_t << "<formula id=\"" << id << "\">"; // non Docbook
// docify(text);
// m_t << "</formula>";
// }
// void startImage(const char *name,const char *size,bool /*caption*/)
// {
// XML_DB(("(startImage)\n"));
// startParMode();
// m_t << "<image name=\"" << name << "\"";
// if (size) m_t << " size=\"" << size << "\"";
// m_t << ">"; // non docbook
// }
// void endImage(bool)
// {
// XML_DB(("(endImage)\n"));
// m_t << "</image>";
// }
// void startDotFile(const char *name,bool /*caption*/)
// {
// XML_DB(("(startDotFile)\n"));
// startParMode();
// m_t << "<dotfile name=\"" << name << "\">"; // non docbook
// }
// void endDotFile(bool)
// {
// XML_DB(("(endDotFile)\n"));
// m_t << "</dotfile>";
// }
// void startTextLink(const char *name,const char *anchor)
// {
// XML_DB(("(startTextLink)\n"));
// startParMode();
// m_t << "<ulink url=\"" << name << "#" << anchor << "\">";
// }
// void endTextLink()
// {
// XML_DB(("(endTextLink)\n"));
// m_t << "</ulink>";
// }
// void startPageRef()
// {
// XML_DB(("(startPageRef)\n"));
// m_outputEnabled = FALSE;
// }
// void endPageRef(const char *,const char *)
// {
// XML_DB(("(endPageRef)\n"));
// m_outputEnabled = TRUE;
// }
// void writeLineNumber(const char *extRef,const char *compId,
// const char *anchorId,int l)
// {
// XML_DB(("(writeLineNumber)\n"));
// m_t << "<linenumber";
// m_t << " line=\"" << l << "\"";
// if (compId)
// {
// m_t << " refid=\"" << compId;
// if (anchorId) m_t << "_1" << anchorId;
// m_t << "\" kindref=\"";
// if (anchorId) m_t << "member"; else m_t << "compound";
// m_t << "\"";
// if (extRef) m_t << " external=\"" << extRef << "\"";
// }
// m_t << "/>";
// }
// void startCodeLine()
// {
// XML_DB(("(startCodeLine)\n"));
// startParMode();
// m_t << "<codeline>"; // non DocBook
// }
// void endCodeLine()
// {
// XML_DB(("(endCodeLine)\n"));
// m_t << "</codeline>" << endl; // non DocBook
// }
// void startCodeAnchor(const char *id)
// {
// XML_DB(("(startCodeAnchor)\n"));
// startParMode();
// m_t << "<anchor id=\"" << id << "\">";
// }
// void endCodeAnchor()
// {
// XML_DB(("(endCodeAnchor)\n"));
// m_t << "</anchor>";
// }
// void startFontClass(const char *colorClass)
// {
// XML_DB(("(startFontClass)\n"));
// m_t << "<highlight class=\"" << colorClass << "\">"; // non DocBook
// }
// void endFontClass()
// {
// XML_DB(("(endFontClass)\n"));
// m_t << "</highlight>"; // non DocBook
// }
// void codify(const char *text)
// {
// XML_DB(("(codify \"%s\")\n",text));
// docify(text);
// }
// void startHtmlOnly()
// {
// XML_DB(("(startHtmlOnly)\n"));
// m_t << "<htmlonly>" << endl;
// }
// void endHtmlOnly()
// {
// XML_DB(("(endHtmlOnly)\n"));
// m_t << "</htmlonly>" << endl;
// }
// void startLatexOnly()
// {
// XML_DB(("(startLatexOnly)\n"));
// m_t << "<latexonly>" << endl;
// }
// void endLatexOnly()
// {
// XML_DB(("(endLatexOnly)\n"));
// m_t << "</latexonly>" << endl;
// }
// void startSectionRefList()
// {
// XML_DB(("(startSectionRefList)\n"));
// }
// void endSectionRefList()
// {
// XML_DB(("(endSectionRefList)\n"));
// }
// void writeCodeAnchor(const char *)
// {
// XML_DB(("(writeCodeAnchor)\n"));
// }
//
// // Generator specific functions
//
// /*! Create a clone of this generator. Uses the copy constructor */
// OutputDocInterface *clone()
// {
// return new XMLGenerator(this);
// }
// /*! Append the output written to generator \a g to this generator */
// void append(const OutputDocInterface *g)
// {
// const XMLGenerator *xg = (const XMLGenerator *)g;
//
// //printf("Appending \n>>>>\n`%s'\n<<<<\n and \n>>>>\n`%s'\n<<<<\n",getContents().data(),xg->getContents().data());
// m_t << xg->getContents();
// m_inParStack = xg->m_inParStack;
// m_inListStack = xg->m_inListStack;
// m_inParamList = xg->m_inParamList;
// }
// /*! constructor.
// */
// XMLGenerator()
// {
// m_b.setBuffer(m_a);
// m_b.open( IO_WriteOnly );
// m_t.setDevice(&m_b);
// m_t.setEncoding(QTextStream::Latin1);
// m_inParamList = FALSE;
// m_outputEnabled = TRUE;
// }
// /*! copy constructor */
// XMLGenerator(const XMLGenerator *xg)
// {
// m_b.setBuffer(m_a);
// m_b.open( IO_WriteOnly );
// m_t.setDevice(&m_b);
// m_t.setEncoding(QTextStream::Latin1);
//
// //printf("Cloning >>%s<< m_parStack.count()=%d\n",
// // xg->getContents().data(),xg->m_inParStack.count());
//
// // copy state variables
// m_inParStack = xg->m_inParStack;
// m_inListStack = xg->m_inListStack;
// m_inParamList = xg->m_inParamList;
// m_outputEnabled = xg->m_outputEnabled;
// }
// /*! destructor */
// virtual ~XMLGenerator()
// {
// }
// /*! Returns the output written to this generator as a string */
// QCString getContents() const
// {
// QCString s;
// s.resize(m_a.size()+1);
// memcpy(s.data(),m_a.data(),m_a.size());
// s.at(m_a.size())='\0';
// return s;
// }
//
// private:
// // only one destination stream, so these do not have to be implemented
// void pushGeneratorState() {}
// void popGeneratorState() {}
// void disableAllBut(OutputGenerator::OutputType) {}
// void enableAll() {}
// void disableAll() {}
// void disable(OutputGenerator::OutputType) {}
// void enable(OutputGenerator::OutputType) {}
// bool isEnabled(OutputGenerator::OutputType) { return TRUE; }
//
// QTextStream m_t;
// QByteArray m_a;
// QBuffer m_b;
//
// ValStack<bool> m_inParStack;
// ValStack<bool> m_inListStack;
// bool m_inParamList;
// bool m_outputEnabled;
//
// friend void writeXMLCodeBlock(QTextStream &t,FileDef *fd);
// };
static
void
writeTemplateArgumentList
(
ArgumentList
*
al
,
QTextStream
&
t
,
const
char
*
name
,
int
indent
)
{
QCString
indentStr
;
...
...
@@ -1037,11 +1195,25 @@ static void writeXMLDocBlock(QTextStream &t,
const
QCString
&
fileName
,
int
lineNr
,
const
QCString
&
scope
,
MemberDef
*
md
,
MemberDef
*
md
,
const
QCString
&
text
)
{
QCString
stext
=
text
.
stripWhiteSpace
();
if
(
text
.
isEmpty
())
return
;
// convert the documentation string into an abstract syntax tree
DocNode
*
root
=
validatingParseDoc
(
fileName
,
lineNr
,
scope
,
md
,
stext
);
// create a code generator
XMLCodeGenerator
*
xmlCodeGen
=
new
XMLCodeGenerator
(
t
);
// create a parse tree visitor for XML
XmlDocVisitor
*
visitor
=
new
XmlDocVisitor
(
t
,
*
xmlCodeGen
);
// visit all nodes
root
->
accept
(
visitor
);
// clean up
delete
visitor
;
delete
xmlCodeGen
;
delete
root
;
/*
XMLGenerator *xmlGen = new XMLGenerator;
//xmlGen->startParMode();
parseDoc(*xmlGen,
...
...
@@ -1054,20 +1226,21 @@ static void writeXMLDocBlock(QTextStream &t,
xmlGen->endParMode();
t << xmlGen->getContents();
delete xmlGen;
*/
}
void
writeXMLCodeBlock
(
QTextStream
&
t
,
FileDef
*
fd
)
{
initParseCodeContext
();
XML
Generator
*
xmlGen
=
new
XMLGenerator
;
xmlGen
->
m_inParStack
.
push
(
TRUE
);
XML
CodeGenerator
*
xmlGen
=
new
XMLCodeGenerator
(
t
)
;
//
xmlGen->m_inParStack.push(TRUE);
parseCode
(
*
xmlGen
,
0
,
fileToString
(
fd
->
absFilePath
(),
Config_getBool
(
"FILTER_SOURCE_FILES"
)),
FALSE
,
0
,
fd
);
t
<<
xmlGen
->
getContents
();
//
t << xmlGen->getContents();
delete
xmlGen
;
}
...
...
@@ -1466,8 +1639,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
}
QTextStream
t
(
&
f
);
t
<<
"<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>"
<<
endl
;
t
<<
"<doxygen version=
\"
"
<<
versionString
<<
"
\"
>"
<<
endl
;
writeXMLHeader
(
t
);
t
<<
" <compounddef id=
\"
"
<<
cd
->
getOutputFileBase
()
<<
"
\"
kind=
\"
"
<<
cd
->
compoundTypeString
()
<<
"
\"
>"
<<
endl
;
...
...
@@ -1652,8 +1824,7 @@ static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &ti)
}
QTextStream
t
(
&
f
);
t
<<
"<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>"
<<
endl
;
t
<<
"<doxygen version=
\"
"
<<
versionString
<<
"
\"
>"
<<
endl
;
writeXMLHeader
(
t
);
t
<<
" <compounddef id=
\"
"
<<
nd
->
getOutputFileBase
()
<<
"
\"
kind=
\"
namespace
\"
>"
<<
endl
;
t
<<
" <compoundname>"
;
...
...
@@ -1743,8 +1914,7 @@ static void generateXMLForFile(FileDef *fd,QTextStream &ti)
}
QTextStream
t
(
&
f
);
t
<<
"<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>"
<<
endl
;
t
<<
"<doxygen version=
\"
"
<<
versionString
<<
"
\"
>"
<<
endl
;
writeXMLHeader
(
t
);
t
<<
" <compounddef id=
\"
"
<<
fd
->
getOutputFileBase
()
<<
"
\"
kind=
\"
file
\"
>"
<<
endl
;
t
<<
" <compoundname>"
;
...
...
@@ -1876,8 +2046,7 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti)
}
QTextStream
t
(
&
f
);
t
<<
"<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>"
<<
endl
;
t
<<
"<doxygen version=
\"
"
<<
versionString
<<
"
\"
>"
<<
endl
;
writeXMLHeader
(
t
);
t
<<
" <compounddef id=
\"
"
<<
gd
->
getOutputFileBase
()
<<
"
\"
kind=
\"
group
\"
>"
<<
endl
;
t
<<
" <compoundname>"
<<
convertToXML
(
gd
->
name
())
<<
"</compoundname>"
<<
endl
;
...
...
@@ -1975,11 +2144,14 @@ static void generateXMLForPage(PageInfo *pi,QTextStream &ti)
if
(
pi
->
isReference
())
return
;
ti
<<
" <compound refid=
\"
"
<<
pi
->
getOutputFileBase
()
QCString
pageName
=
pi
->
getOutputFileBase
();
if
(
pageName
==
"index"
)
pageName
=
"indexpage"
;
// to prevent overwriting the generated index page.
ti
<<
" <compound refid=
\"
"
<<
pageName
<<
"
\"
kind=
\"
page
\"
><name>"
<<
convertToXML
(
pi
->
name
)
<<
"</name>"
<<
endl
;
QCString
outputDirectory
=
Config_getString
(
"OUTPUT_DIRECTORY"
);
QCString
fileName
=
outputDirectory
+
"/xml/"
+
p
i
->
getOutputFileBase
()
+
".xml"
;
QCString
fileName
=
outputDirectory
+
"/xml/"
+
p
ageName
+
".xml"
;
QFile
f
(
fileName
);
if
(
!
f
.
open
(
IO_WriteOnly
))
{
...
...
@@ -1988,8 +2160,7 @@ static void generateXMLForPage(PageInfo *pi,QTextStream &ti)
}
QTextStream
t
(
&
f
);
t
<<
"<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>"
<<
endl
;
t
<<
"<doxygen version=
\"
"
<<
versionString
<<
"
\"
>"
<<
endl
;
writeXMLHeader
(
t
);
t
<<
" <compounddef id=
\"
"
;
if
(
Config_getBool
(
"CASE_SENSE_NAMES"
))
t
<<
pi
->
name
;
else
t
<<
pi
->
name
.
lower
();
t
<<
"
\"
kind=
\"
page
\"
>"
<<
endl
;
...
...
@@ -2071,10 +2242,7 @@ void generateXML()
return
;
}
QTextStream
t
(
&
f
);
t
<<
"<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>"
<<
endl
;
//t << "<!DOCTYPE doxygen SYSTEM \"doxygen.dtd\">" << endl;
t
<<
"<doxygen version=
\"
"
<<
versionString
<<
"
\"
>"
<<
endl
;
//t << " <compoundlist>" << endl;
writeXMLHeader
(
t
);
ClassSDict
::
Iterator
cli
(
Doxygen
::
classSDict
);
ClassDef
*
cd
;
for
(
cli
.
toFirst
();(
cd
=
cli
.
current
());
++
cli
)
...
...
@@ -2110,6 +2278,10 @@ void generateXML()
{
generateXMLForPage
(
pi
,
t
);
}
if
(
Doxygen
::
mainPage
)
{
generateXMLForPage
(
Doxygen
::
mainPage
,
t
);
}
//t << " </compoundlist>" << endl;
t
<<
"</doxygen>"
<<
endl
;
...
...
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