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
0a37457c
Commit
0a37457c
authored
Sep 01, 2002
by
dimitri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Doxygen-1.2.17-20020901
parent
55d2ef84
Changes
31
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
3998 additions
and
2259 deletions
+3998
-2259
INSTALL
INSTALL
+2
-2
README
README
+2
-2
VERSION
VERSION
+1
-1
commands.doc
doc/commands.doc
+5
-1
doxygen.spec
packages/rpm/doxygen.spec
+1
-1
defargs.l
src/defargs.l
+63
-53
doc.l
src/doc.l
+5
-3
docparser.cpp
src/docparser.cpp
+2
-1
dot.cpp
src/dot.cpp
+4
-2
doxygen.cpp
src/doxygen.cpp
+140
-93
groupdef.cpp
src/groupdef.cpp
+20
-9
groupdef.h
src/groupdef.h
+1
-1
htmldocvisitor.cpp
src/htmldocvisitor.cpp
+719
-0
htmldocvisitor.h
src/htmldocvisitor.h
+88
-625
htmlgen.cpp
src/htmlgen.cpp
+1
-0
latexdocvisitor.cpp
src/latexdocvisitor.cpp
+822
-0
latexdocvisitor.h
src/latexdocvisitor.h
+88
-728
latexgen.cpp
src/latexgen.cpp
+1
-0
libdoxygen.pro.in
src/libdoxygen.pro.in
+4
-0
memberdef.cpp
src/memberdef.cpp
+14
-1
memberdef.h
src/memberdef.h
+6
-3
page.h
src/page.h
+5
-1
rtfdocvisitor.cpp
src/rtfdocvisitor.cpp
+1013
-0
rtfdocvisitor.h
src/rtfdocvisitor.h
+150
-0
rtfgen.cpp
src/rtfgen.cpp
+143
-706
rtfgen.h
src/rtfgen.h
+12
-12
rtfstyle.cpp
src/rtfstyle.cpp
+518
-0
rtfstyle.h
src/rtfstyle.h
+80
-0
scanner.l
src/scanner.l
+34
-11
util.cpp
src/util.cpp
+52
-2
util.h
src/util.h
+2
-1
No files found.
INSTALL
View file @
0a37457c
DOXYGEN Version 1.2.17-20020
825
DOXYGEN Version 1.2.17-20020
901
Please read the installation section of the manual for instructions.
Please read the installation section of the manual for instructions.
--------
--------
Dimitri van Heesch (
25 August
2002)
Dimitri van Heesch (
01 September
2002)
README
View file @
0a37457c
DOXYGEN Version 1.2.17_20020
825
DOXYGEN Version 1.2.17_20020
901
Please read INSTALL for compilation instructions.
Please read INSTALL for compilation instructions.
...
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
...
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (
25 August
2002)
Dimitri van Heesch (dimitri@stack.nl) (
01 September
2002)
VERSION
View file @
0a37457c
1.2.17-20020
825
1.2.17-20020
901
doc/commands.doc
View file @
0a37457c
...
@@ -1039,7 +1039,11 @@ ALIASES = "english=\if english" \
...
@@ -1039,7 +1039,11 @@ ALIASES = "english=\if english" \
\addindex \\anchor
\addindex \\anchor
This command places an invisible, named anchor into the documentation
This command places an invisible, named anchor into the documentation
to which you can refer with the \\ref command.
to which you can refer with the \\ref command.
\note Anchors can currently only be put into a comment block
that is marked as a page (using \ref cmdpage "\\page") or mainpage
(\ref cmdmainpage "\\mainpage").
\sa section \ref cmdref "\\ref".
\sa section \ref cmdref "\\ref".
...
...
packages/rpm/doxygen.spec
View file @
0a37457c
Summary: A documentation system for C/C++.
Summary: A documentation system for C/C++.
Name: doxygen
Name: doxygen
Version: 1.2.17_20020
825
Version: 1.2.17_20020
901
Release: 1
Release: 1
Epoch: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
...
...
src/defargs.l
View file @
0a37457c
...
@@ -164,6 +164,9 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
...
@@ -164,6 +164,9 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
g_curArgTypeName+=g_curArgName;
g_curArgTypeName+=g_curArgName;
BEGIN( ReadFuncArgType );
BEGIN( ReadFuncArgType );
}
}
<ReadFuncArgType>"<="|">="|"->"|">>"|"<<" { // handle operators in defargs
g_curArgTypeName+=yytext;
}
<ReadFuncArgType,ReadFuncArgDef>[({<] {
<ReadFuncArgType,ReadFuncArgDef>[({<] {
if (YY_START==ReadFuncArgType)
if (YY_START==ReadFuncArgType)
{
{
...
@@ -175,10 +178,10 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
...
@@ -175,10 +178,10 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
g_curArgDefValue+=*yytext;
g_curArgDefValue+=*yytext;
g_copyArgValue=&g_curArgDefValue;
g_copyArgValue=&g_curArgDefValue;
}
}
g_readArgContext = YY_START;
g_readArgContext = YY_START;
if (*yytext=='(')
if (*yytext=='(')
{
{
g_argRoundCount=0;
g_argRoundCount=0;
BEGIN( CopyArgRound );
BEGIN( CopyArgRound );
}
}
else if (*yytext=='{')
else if (*yytext=='{')
...
@@ -249,67 +252,74 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
...
@@ -249,67 +252,74 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
BEGIN( ReadDocBlock );
BEGIN( ReadDocBlock );
}
}
<ReadFuncArgType,ReadFuncArgDef>[,)>] {
<ReadFuncArgType,ReadFuncArgDef>[,)>] {
g_curArgTypeName=removeRedundantWhiteSpace(g_curArgTypeName);
if (*yytext==')' && g_curArgTypeName.stripWhiteSpace().isEmpty())
g_curArgDefValue=g_curArgDefValue.stripWhiteSpace();
{
//printf("curArgType=`%s' curArgDefVal=`%s'\n",g_curArgTypeName.data(),g_curArgDefValue.data())
;
g_curArgTypeName+=*yytext
;
int l=g_curArgTypeName.length();
}
if (l>0)
else
{
{
int i=l-1;
g_curArgTypeName=removeRedundantWhiteSpace(g_curArgTypeName);
while (i>=0 && (isspace(g_curArgTypeName.at(i)) || g_curArgTypeName.at(i)=='.')) i--;
g_curArgDefValue=g_curArgDefValue.stripWhiteSpace();
while (i>=0 && isId(g_curArgTypeName.at(i))) i--;
//printf("curArgType=`%s' curArgDefVal=`%s'\n",g_curArgTypeName.data(),g_curArgDefValue.data());
//printf("g_curArgTypeName=`%s' i=%d\n",g_curArgTypeName.data(),i);
int l=g_curArgTypeName.length();
Argument *a = new Argument;
if (l>0)
a->attrib = g_curArgAttrib.copy();
//printf("a->type=%s a->name=%s i=%d l=%d\n",
// a->type.data(),a->name.data(),i,l);
a->array.resize(0);
if (i==l-1 && g_curArgTypeName.at(i)==')') // function argument
{
{
int bi=g_curArgTypeName.find('(');
int i=l-1;
int fi=bi-1;
while (i>=0 && (isspace(g_curArgTypeName.at(i)) || g_curArgTypeName.at(i)=='.')) i--;
//printf("func arg fi=%d\n",fi);
while (i>=0 && isId(g_curArgTypeName.at(i))) i--;
while (fi>=0 && isId(g_curArgTypeName.at(fi))) fi--;
//printf("g_curArgTypeName=`%s' i=%d\n",g_curArgTypeName.data(),i);
if (fi>=0)
Argument *a = new Argument;
a->attrib = g_curArgAttrib.copy();
//printf("a->type=%s a->name=%s i=%d l=%d\n",
// a->type.data(),a->name.data(),i,l);
a->array.resize(0);
if (i==l-1 && g_curArgTypeName.at(i)==')') // function argument
{
{
a->type = g_curArgTypeName.left(fi+1);
int bi=g_curArgTypeName.find('(');
a->name = g_curArgTypeName.mid(fi+1,bi-fi-1);
int fi=bi-1;
a->array = g_curArgTypeName.right(l-bi);
//printf("func arg fi=%d\n",fi);
while (fi>=0 && isId(g_curArgTypeName.at(fi))) fi--;
if (fi>=0)
{
a->type = g_curArgTypeName.left(fi+1);
a->name = g_curArgTypeName.mid(fi+1,bi-fi-1);
a->array = g_curArgTypeName.right(l-bi);
}
else
{
a->type = g_curArgTypeName;
}
}
else if (i>=0 && g_curArgTypeName.at(i)!=':')
{ // type contains a name
a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1));
a->name = g_curArgTypeName.right(l-i-1);
}
}
else
else
// assume only the type was specified, try to determine name later
{
{
a->type =
g_curArgTypeName;
a->type =
removeRedundantWhiteSpace(g_curArgTypeName);
}
}
//printf("a->type=%s a->name=%s a->array=%s\n",a->type.data(),a->name.data());
a->array += removeRedundantWhiteSpace(g_curArgArray);
a->defval = g_curArgDefValue.copy();
a->docs = g_curArgDocs.stripWhiteSpace();
//printf("Argument `%s' `%s' adding docs=`%s'\n",a->type.data(),a->name.data(),a->docs.data());
g_argList->append(a);
}
}
else if (i>=0 && g_curArgTypeName.at(i)!=':')
g_curArgAttrib.resize(0);
{ // type contains a name
g_curArgTypeName.resize(0);
a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1));
g_curArgDefValue.resize(0);
a->name = g_curArgTypeName.right(l-i-1);
g_curArgArray.resize(0);
g_curArgDocs.resize(0);
if (*yytext==')')
{
BEGIN(FuncQual);
//printf(">>> end of argument list\n");
}
}
else
// assume only the type was specified, try to determine name later
else
{
{
a->type = removeRedundantWhiteSpace(g_curArgTypeName);
BEGIN( ReadFuncArgType );
}
}
//printf("a->type=%s a->name=%s a->array=%s\n",a->type.data(),a->name.data());
a->array += removeRedundantWhiteSpace(g_curArgArray);
a->defval = g_curArgDefValue.copy();
a->docs = g_curArgDocs.stripWhiteSpace();
//printf("Argument `%s' `%s' adding docs=`%s'\n",a->type.data(),a->name.data(),a->docs.data());
g_argList->append(a);
}
g_curArgAttrib.resize(0);
g_curArgTypeName.resize(0);
g_curArgDefValue.resize(0);
g_curArgArray.resize(0);
g_curArgDocs.resize(0);
if (*yytext==')')
{
BEGIN(FuncQual);
//printf(">>> end of argument list\n");
}
else
{
BEGIN( ReadFuncArgType );
}
}
}
}
<ReadFuncArgType,ReadFuncArgPtr>{ID} {
<ReadFuncArgType,ReadFuncArgPtr>{ID} {
...
...
src/doc.l
View file @
0a37457c
...
@@ -1130,8 +1130,10 @@ static int yyread(char *buf,int max_size)
...
@@ -1130,8 +1130,10 @@ static int yyread(char *buf,int max_size)
return c;
return c;
}
}
//ATTR ((({BN}+[^\>]+)/">")?)
//LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))?
//ATTR ((({BN}+[^\>]+)/">")?)
%}
%}
CMD ("\\"|"@")
CMD ("\\"|"@")
BN [ \t\n\r]
BN [ \t\n\r]
BL [ \t\r]*"\n"
BL [ \t\r]*"\n"
...
@@ -1200,7 +1202,7 @@ OPARG "("[a-z_A-Z0-9,\<\> \t\*\&]*")"
...
@@ -1200,7 +1202,7 @@ OPARG "("[a-z_A-Z0-9,\<\> \t\*\&]*")"
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
OPCAST {B}+[^(\r\n.,]+
OPCAST {B}+[^(\r\n.,]+
OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
LINKMASK [
a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+
({B}*("const"|"volatile"))?
LINKMASK [
^ \t\n\r\\@<&$]+("("[^\n)]*")")?
({B}*("const"|"volatile"))?
%option noyywrap
%option noyywrap
...
@@ -1785,7 +1787,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))?
...
@@ -1785,7 +1787,7 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))?
if (inBlock()) endBlock();
if (inBlock()) endBlock();
inReturnBlock=TRUE;
inReturnBlock=TRUE;
currentListIndent.push("P");
currentListIndent.push("P");
outDoc->startSimpleSect(BaseOutputDocInterface::Return,0,0,theTranslator->trReturns()+":");
outDoc->startSimpleSect(BaseOutputDocInterface::Return,0,0,theTranslator->trReturns()+":
");
outDoc->writeDescItem();
outDoc->writeDescItem();
}
}
}
}
...
...
src/docparser.cpp
View file @
0a37457c
...
@@ -1392,6 +1392,7 @@ QCString DocLink::parse(bool isJavaLink)
...
@@ -1392,6 +1392,7 @@ QCString DocLink::parse(bool isJavaLink)
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
printf
(
"Error: Unsupported symbol %s found at line %d
\n
"
,
g_token
->
name
.
data
(),
doctokenizerYYlineno
);
g_token
->
name
.
data
(),
doctokenizerYYlineno
);
break
;
break
;
case
TK_LNKWORD
:
case
TK_WORD
:
case
TK_WORD
:
if
(
isJavaLink
)
// special case to detect closing }
if
(
isJavaLink
)
// special case to detect closing }
{
{
...
@@ -3894,7 +3895,7 @@ void DocRoot::parse()
...
@@ -3894,7 +3895,7 @@ void DocRoot::parse()
DocNode
*
validatingParseDoc
(
const
char
*
fileName
,
int
startLine
,
DocNode
*
validatingParseDoc
(
const
char
*
fileName
,
int
startLine
,
const
char
*
context
,
const
char
*
input
)
const
char
*
context
,
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_token
=
new
TokenInfo
;
...
...
src/dot.cpp
View file @
0a37457c
...
@@ -1793,8 +1793,10 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir,
...
@@ -1793,8 +1793,10 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir,
QCString
imgName
=
(
QCString
)
outFile
+
"."
+
imgExt
;
QCString
imgName
=
(
QCString
)
outFile
+
"."
+
imgExt
;
if
(
format
==
BITMAP
)
if
(
format
==
BITMAP
)
{
{
dotArgs
.
sprintf
(
"-T%s
\"
%s
\"
-o
\"
%s
\"
"
,
imgExt
.
data
(),
dotArgs
.
sprintf
(
"-T%s
\"
%s
\"
-o
\"
%s
\"
"
,
inFile
,
imgName
.
data
());
imgExt
.
data
(),
inFile
,
imgName
.
data
());
}
}
else
// format==EPS
else
// format==EPS
{
{
...
...
src/doxygen.cpp
View file @
0a37457c
...
@@ -200,11 +200,38 @@ static void addRelatedPage(Entry *root)
...
@@ -200,11 +200,38 @@ static void addRelatedPage(Entry *root)
if
(
!
g
->
groupname
.
isEmpty
()
&&
(
gd
=
Doxygen
::
groupSDict
[
g
->
groupname
]))
break
;
if
(
!
g
->
groupname
.
isEmpty
()
&&
(
gd
=
Doxygen
::
groupSDict
[
g
->
groupname
]))
break
;
}
}
//printf("addRelatedPage() %s gd=%p\n",root->name.data(),gd);
//printf("addRelatedPage() %s gd=%p\n",root->name.data(),gd);
addRelatedPage
(
root
->
name
,
root
->
args
,
root
->
doc
,
root
->
anchors
,
PageInfo
*
pi
=
addRelatedPage
(
root
->
name
,
root
->
args
,
root
->
doc
,
root
->
anchors
,
root
->
fileName
,
root
->
startLine
,
root
->
fileName
,
root
->
startLine
,
root
->
sli
,
root
->
sli
,
gd
,
root
->
tagInfo
gd
,
root
->
tagInfo
);
);
if
(
pi
)
{
// see if the function is inside a namespace
Definition
*
ctx
=
0
;
if
(
root
->
parent
->
section
&
Entry
::
COMPOUND_MASK
)
// inside class
{
QCString
fullName
=
removeRedundantWhiteSpace
(
root
->
parent
->
name
);
fullName
=
stripAnonymousNamespaceScope
(
fullName
);
fullName
=
stripTemplateSpecifiersFromScope
(
fullName
);
ctx
=
getClass
(
fullName
);
}
if
(
ctx
==
0
&&
root
->
parent
->
section
==
Entry
::
NAMESPACE_SEC
)
// inside namespace
{
QCString
nscope
=
removeAnonymousScopes
(
root
->
parent
->
name
);
if
(
!
nscope
.
isEmpty
())
{
ctx
=
getResolvedNamespace
(
nscope
);
}
}
if
(
ctx
==
0
)
// inside file
{
bool
ambig
;
ctx
=
findFileDef
(
Doxygen
::
inputNameDict
,
root
->
fileName
,
ambig
);
}
pi
->
context
=
ctx
;
}
}
}
...
@@ -1919,7 +1946,6 @@ static void buildFunctionList(Entry *root)
...
@@ -1919,7 +1946,6 @@ static void buildFunctionList(Entry *root)
isMember
=
memIndex
<
ts
||
memIndex
>
te
;
isMember
=
memIndex
<
ts
||
memIndex
>
te
;
}
}
}
}
if
(
root
->
parent
&&
if
(
root
->
parent
&&
!
root
->
parent
->
name
.
isEmpty
()
&&
!
root
->
parent
->
name
.
isEmpty
()
&&
(
root
->
parent
->
section
&
Entry
::
COMPOUND_MASK
)
&&
(
root
->
parent
->
section
&
Entry
::
COMPOUND_MASK
)
&&
...
@@ -1967,7 +1993,8 @@ static void buildFunctionList(Entry *root)
...
@@ -1967,7 +1993,8 @@ static void buildFunctionList(Entry *root)
if
(
rnd
)
rnsName
=
rnd
->
name
().
copy
();
if
(
rnd
)
rnsName
=
rnd
->
name
().
copy
();
NamespaceList
*
unl
=
fd
?
fd
->
getUsedNamespaces
()
:
0
;
NamespaceList
*
unl
=
fd
?
fd
->
getUsedNamespaces
()
:
0
;
ClassList
*
ucl
=
fd
?
fd
->
getUsedClasses
()
:
0
;
ClassList
*
ucl
=
fd
?
fd
->
getUsedClasses
()
:
0
;
//printf("matching arguments for %s\n",md->name().data());
//printf("matching arguments for %s%s %s%s\n",
// md->name().data(),md->argsString(),rname.data(),argListToString(root->argList).data());
if
(
if
(
matchArguments
(
md
->
argumentList
(),
root
->
argList
,
0
,
nsName
,
FALSE
,
unl
,
ucl
)
matchArguments
(
md
->
argumentList
(),
root
->
argList
,
0
,
nsName
,
FALSE
,
unl
,
ucl
)
)
)
...
@@ -2060,7 +2087,6 @@ static void buildFunctionList(Entry *root)
...
@@ -2060,7 +2087,6 @@ static void buildFunctionList(Entry *root)
root
->
type
,
name
,
root
->
args
,
root
->
exception
,
root
->
type
,
name
,
root
->
args
,
root
->
exception
,
root
->
protection
,
root
->
virt
,
root
->
stat
,
FALSE
,
root
->
protection
,
root
->
virt
,
root
->
stat
,
FALSE
,
MemberDef
::
Function
,
tArgList
,
root
->
argList
);
MemberDef
::
Function
,
tArgList
,
root
->
argList
);
//printf("new member %p\n",md);
if
(
root
->
tagInfo
)
if
(
root
->
tagInfo
)
...
@@ -2297,100 +2323,112 @@ static void transferFunctionDocumentation()
...
@@ -2297,100 +2323,112 @@ static void transferFunctionDocumentation()
MemberName
*
mn
;
MemberName
*
mn
;
for
(;(
mn
=
mnli
.
current
());
++
mnli
)
for
(;(
mn
=
mnli
.
current
());
++
mnli
)
{
{
MemberDef
*
md
,
*
mdef
=
0
,
*
mdec
=
0
;
//printf("memberName=%s count=%d\n",mn->memberName(),mn->count());
MemberNameIterator
mni
(
*
mn
);
MemberDef
*
mdef
=
0
,
*
mdec
=
0
;
MemberNameIterator
mni1
(
*
mn
);
/* find a matching function declaration and definition for this function */
/* find a matching function declaration and definition for this function */
for
(;(
md
=
mni
.
current
());
++
mni
)
for
(;(
mdec
=
mni1
.
current
());
++
mni1
)
{
if
(
md
->
isPrototype
())
mdec
=
md
;
else
if
(
md
->
isVariable
()
&&
md
->
isExternal
())
mdec
=
md
;
if
(
md
->
isFunction
()
&&
!
md
->
isStatic
()
&&
!
md
->
isPrototype
())
mdef
=
md
;
else
if
(
md
->
isVariable
()
&&
!
md
->
isExternal
()
&&
!
md
->
isStatic
())
mdef
=
md
;
}
//printf("mdef=(%p,%s) mdec=(%p,%s)\n",
// mdef, mdef ? mdef->name().data() : "",
// mdec, mdec ? mdec->name().data() : "");
if
(
mdef
&&
mdec
&&
matchArguments
(
mdef
->
argumentList
(),
mdec
->
argumentList
())
)
/* match found */
{
{
//printf("Found member %s: definition in %s (doc=`%s') and declaration in %s (doc=`%s')\n",
if
(
mdec
->
isPrototype
()
||
// mn->memberName(),
(
mdec
->
isVariable
()
&&
mdec
->
isExternal
())
// mdef->getFileDef()->name().data(),mdef->documentation().data(),
)
// mdec->getFileDef()->name().data(),mdec->documentation().data()
{
// );
MemberNameIterator
mni2
(
*
mn
);
for
(;(
mdef
=
mni2
.
current
());
++
mni2
)
// first merge argument documentation
transferArgumentDocumentation
(
mdec
->
argumentList
(),
mdef
->
argumentList
());
/* copy documentation between function definition and declaration */
if
(
!
mdec
->
briefDescription
().
isEmpty
())
{
mdef
->
setBriefDescription
(
mdec
->
briefDescription
(),
mdec
->
briefFile
(),
mdec
->
briefLine
());
}
else
if
(
!
mdef
->
briefDescription
().
isEmpty
())
{
mdec
->
setBriefDescription
(
mdef
->
briefDescription
(),
mdef
->
briefFile
(),
mdef
->
briefLine
());
}
if
(
!
mdef
->
documentation
().
isEmpty
())
{
//printf("transfering docs mdef->mdec (%s->%s)\n",mdef->argsString(),mdec->argsString());
mdec
->
setDocumentation
(
mdef
->
documentation
(),
mdef
->
docFile
(),
mdef
->
docLine
());
mdec
->
setDocsForDefinition
(
mdef
->
isDocsForDefinition
());
ArgumentList
*
mdefAl
=
new
ArgumentList
;
stringToArgumentList
(
mdef
->
argsString
(),
mdefAl
);
if
(
mdef
->
argumentList
())
{
transferArgumentDocumentation
(
mdef
->
argumentList
(),
mdefAl
);
}
mdec
->
setArgumentList
(
mdefAl
);
}
else
if
(
!
mdec
->
documentation
().
isEmpty
())
{
{
//printf("transfering docs mdec->mdef (%s->%s)\n",mdec->argsString(),mdef->argsString());
if
(
mdef
->
setDocumentation
(
mdec
->
documentation
(),
mdec
->
docFile
(),
mdec
->
docLine
());
(
mdef
->
isFunction
()
&&
!
mdef
->
isStatic
()
&&
!
mdef
->
isPrototype
())
||
mdef
->
setDocsForDefinition
(
mdec
->
isDocsForDefinition
());
(
mdef
->
isVariable
()
&&
!
mdef
->
isExternal
()
&&
!
mdef
->
isStatic
())
ArgumentList
*
mdecAl
=
new
ArgumentList
;
)
stringToArgumentList
(
mdec
->
argsString
(),
mdecAl
);
if
(
mdec
->
argumentList
())
{
{
transferArgumentDocumentation
(
mdec
->
argumentList
(),
mdecAl
);
//printf("mdef=(%p,%s) mdec=(%p,%s)\n",
}
// mdef, mdef ? mdef->name().data() : "",
mdef
->
setDeclArgumentList
(
mdecAl
);
// mdec, mdec ? mdec->name().data() : "");
}
if
(
mdef
&&
mdec
&&
if
(
mdec
->
getStartBodyLine
()
!=-
1
&&
mdef
->
getStartBodyLine
()
==-
1
)
matchArguments
(
mdef
->
argumentList
(),
mdec
->
argumentList
())
{
)
/* match found */
mdef
->
setBodySegment
(
mdec
->
getStartBodyLine
(),
mdec
->
getEndBodyLine
());
{
mdef
->
setBodyDef
(
mdec
->
getBodyDef
());
//printf("Found member %s: definition in %s (doc=`%s') and declaration in %s (doc=`%s')\n",
mdef
->
setBodyMember
(
mdec
);
// mn->memberName(),
}
// mdef->getFileDef()->name().data(),mdef->documentation().data(),
else
if
(
mdef
->
getStartBodyLine
()
!=-
1
&&
mdec
->
getStartBodyLine
()
==-
1
)
// mdec->getFileDef()->name().data(),mdec->documentation().data()
{
// );
mdec
->
setBodySegment
(
mdef
->
getStartBodyLine
(),
mdef
->
getEndBodyLine
());
mdec
->
setBodyDef
(
mdef
->
getBodyDef
());
// first merge argument documentation
mdec
->
setBodyMember
(
mdef
);
transferArgumentDocumentation
(
mdec
->
argumentList
(),
mdef
->
argumentList
());
}
mdec
->
mergeMemberSpecifiers
(
mdef
->
getMemberSpecifiers
());
/* copy documentation between function definition and declaration */
mdef
->
mergeMemberSpecifiers
(
mdec
->
getMemberSpecifiers
());
if
(
!
mdec
->
briefDescription
().
isEmpty
())
{
mdef
->
setBriefDescription
(
mdec
->
briefDescription
(),
mdec
->
briefFile
(),
mdec
->
briefLine
());
}
else
if
(
!
mdef
->
briefDescription
().
isEmpty
())
{
mdec
->
setBriefDescription
(
mdef
->
briefDescription
(),
mdef
->
briefFile
(),
mdef
->
briefLine
());
}
if
(
!
mdef
->
documentation
().
isEmpty
())
{
//printf("transfering docs mdef->mdec (%s->%s)\n",mdef->argsString(),mdec->argsString());
mdec
->
setDocumentation
(
mdef
->
documentation
(),
mdef
->
docFile
(),
mdef
->
docLine
());
mdec
->
setDocsForDefinition
(
mdef
->
isDocsForDefinition
());
ArgumentList
*
mdefAl
=
new
ArgumentList
;
stringToArgumentList
(
mdef
->
argsString
(),
mdefAl
);
if
(
mdef
->
argumentList
())
{
transferArgumentDocumentation
(
mdef
->
argumentList
(),
mdefAl
);
}
mdec
->
setArgumentList
(
mdefAl
);
}
else
if
(
!
mdec
->
documentation
().
isEmpty
())
{
//printf("transfering docs mdec->mdef (%s->%s)\n",mdec->argsString(),mdef->argsString());
mdef
->
setDocumentation
(
mdec
->
documentation
(),
mdec
->
docFile
(),
mdec
->
docLine
());
mdef
->
setDocsForDefinition
(
mdec
->
isDocsForDefinition
());
ArgumentList
*
mdecAl
=
new
ArgumentList
;
stringToArgumentList
(
mdec
->
argsString
(),
mdecAl
);
if
(
mdec
->
argumentList
())
{
transferArgumentDocumentation
(
mdec
->
argumentList
(),
mdecAl
);
}
mdef
->
setDeclArgumentList
(
mdecAl
);
}
if
(
mdec
->
getStartBodyLine
()
!=-
1
&&
mdef
->
getStartBodyLine
()
==-
1
)
{
//printf("body mdec->mdef %d-%d\n",mdec->getStartBodyLine(),mdef->getEndBodyLine());
mdef
->
setBodySegment
(
mdec
->
getStartBodyLine
(),
mdec
->
getEndBodyLine
());
mdef
->
setBodyDef
(
mdec
->
getBodyDef
());
mdef
->
setBodyMember
(
mdec
);
}
else
if
(
mdef
->
getStartBodyLine
()
!=-
1
&&
mdec
->
getStartBodyLine
()
==-
1
)
{
//printf("body mdef->mdec %d-%d\n",mdef->getStartBodyLine(),mdec->getEndBodyLine());
mdec
->
setBodySegment
(
mdef
->
getStartBodyLine
(),
mdef
->
getEndBodyLine
());
mdec
->
setBodyDef
(
mdef
->
getBodyDef
());
mdec
->
setBodyMember
(
mdef
);
}
mdec
->
mergeMemberSpecifiers
(
mdef
->
getMemberSpecifiers
());
mdef
->
mergeMemberSpecifiers
(
mdec
->
getMemberSpecifiers
());
// copy group info.
// copy group info.
//if (mdec->getGroupDef()==0 && mdef->getGroupDef()!=0)
//if (mdec->getGroupDef()==0 && mdef->getGroupDef()!=0)
//{
//{
// mdef->setGroupDef(mdec->getGroupDef(),mdec->getGroupPri(),mdec->docFile(),mdec->docLine(),mdec->hasDocumentation());
// mdef->setGroupDef(mdec->getGroupDef(),mdec->getGroupPri(),mdec->docFile(),mdec->docLine(),mdec->hasDocumentation());
//}
//}
//else if (mdef->getGroupDef()==0 && mdec->getGroupDef()!=0)
//else if (mdef->getGroupDef()==0 && mdec->getGroupDef()!=0)
//{
//{
// mdec->setGroupDef(mdef->getGroupDef(),mdef->getGroupPri(),mdef->docFile(),mdef->docLine(),mdef->hasDocumentation());
// mdec->setGroupDef(mdef->getGroupDef(),mdef->getGroupPri(),mdef->docFile(),mdef->docLine(),mdef->hasDocumentation());
//}
//}
mdec
->
setRefItems
(
mdef
->
specialListItems
());
mdec
->
setRefItems
(
mdef
->
specialListItems
());
mdef
->
setRefItems
(
mdec
->
specialListItems
());
mdef
->
setRefItems
(
mdec
->
specialListItems
());
mdef
->
setMemberDeclaration
(
mdec
);
mdec
->
setMemberDefinition
(
mdef
);
}
}
}
}
}
}
}
}
}
}
...
@@ -5972,7 +6010,16 @@ static void generatePageDocs()
...
@@ -5972,7 +6010,16 @@ static void generatePageDocs()
outputList
->
endSection
(
si
->
label
,
si
->
type
);
outputList
->
endSection
(
si
->
label
,
si
->
type
);
}
}
outputList
->
startTextBlock
();
outputList
->
startTextBlock
();
parseDoc
(
*
outputList
,
pi
->
defFileName
,
pi
->
defLine
,
0
,
0
,
pi
->
doc
);
QCString
scName
;
if
(
pi
->
context
&&
(
pi
->
context
->
definitionType
()
==
Definition
::
TypeClass
||
pi
->
context
->
definitionType
()
==
Definition
::
TypeNamespace
)
)
{
scName
=
pi
->
context
->
name
();
}
parseDoc
(
*
outputList
,
pi
->
defFileName
,
pi
->
defLine
,
scName
,
0
,
pi
->
doc
);
outputList
->
endTextBlock
();
outputList
->
endTextBlock
();
endFile
(
*
outputList
);
endFile
(
*
outputList
);
//outputList->enable(OutputGenerator::Man);
//outputList->enable(OutputGenerator::Man);
...
...
src/groupdef.cpp
View file @
0a37457c
...
@@ -162,7 +162,7 @@ void GroupDef::addMembersToMemberGroup()
...
@@ -162,7 +162,7 @@ void GroupDef::addMembersToMemberGroup()
}
}
void
GroupDef
::
insertMember
(
MemberDef
*
md
,
bool
docOnly
)
bool
GroupDef
::
insertMember
(
MemberDef
*
md
,
bool
docOnly
)
{
{
//printf("GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
//printf("GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
MemberNameInfo
*
mni
=
0
;
MemberNameInfo
*
mni
=
0
;
...
@@ -173,10 +173,17 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
...
@@ -173,10 +173,17 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
for
(
;
(
srcMi
=
srcMnii
.
current
())
;
++
srcMnii
)
for
(
;
(
srcMi
=
srcMnii
.
current
())
;
++
srcMnii
)
{
{
MemberDef
*
srcMd
=
srcMi
->
memberDef
;
MemberDef
*
srcMd
=
srcMi
->
memberDef
;
if
(
matchArguments
(
srcMd
->
argumentList
(),
md
->
argumentList
())
&&
srcMd
->
getOuterScope
()
==
md
->
getOuterScope
())
bool
sameScope
=
srcMd
->
getOuterScope
()
==
md
->
getOuterScope
()
||
// same class or namespace
// both inside a file => definition and declaration do not have to be in the same file
(
srcMd
->
getOuterScope
()
->
definitionType
()
==
Definition
::
TypeFile
&&
md
->
getOuterScope
()
->
definitionType
()
==
Definition
::
TypeFile
);
if
(
matchArguments
(
srcMd
->
argumentList
(),
md
->
argumentList
())
&&
sameScope
)
{
{
return
;
// member already added
return
FALSE
;
// member already added
}
}
}
}
mni
->
append
(
new
MemberInfo
(
md
,
md
->
protection
(),
md
->
virtualness
(),
FALSE
));
mni
->
append
(
new
MemberInfo
(
md
,
md
->
protection
(),
md
->
virtualness
(),
FALSE
));
...
@@ -187,6 +194,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
...
@@ -187,6 +194,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
mni
->
append
(
new
MemberInfo
(
md
,
md
->
protection
(),
md
->
virtualness
(),
FALSE
));
mni
->
append
(
new
MemberInfo
(
md
,
md
->
protection
(),
md
->
virtualness
(),
FALSE
));
allMemberNameInfoSDict
->
append
(
mni
->
memberName
(),
mni
);
allMemberNameInfoSDict
->
append
(
mni
->
memberName
(),
mni
);
}
}
//printf("Added member!\n");
allMemberList
->
append
(
md
);
allMemberList
->
append
(
md
);
switch
(
md
->
memberType
())
switch
(
md
->
memberType
())
{
{
...
@@ -241,7 +249,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
...
@@ -241,7 +249,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
md
->
getClassDef
()
?
md
->
getClassDef
()
->
name
().
data
()
:
""
,
md
->
getClassDef
()
?
md
->
getClassDef
()
->
name
().
data
()
:
""
,
name
().
data
());
name
().
data
());
}
}
//addMemberToGroup(md,groupId)
;
return
TRUE
;
}
}
void
GroupDef
::
removeMember
(
MemberDef
*
md
)
void
GroupDef
::
removeMember
(
MemberDef
*
md
)
...
@@ -723,10 +731,13 @@ void addMemberToGroups(Entry *root,MemberDef *md)
...
@@ -723,10 +731,13 @@ void addMemberToGroups(Entry *root,MemberDef *md)
if
(
insertit
)
if
(
insertit
)
{
{
//printf("insertMember\n");
//printf("insertMember\n");
fgd
->
insertMember
(
md
);
bool
success
=
fgd
->
insertMember
(
md
);
md
->
setGroupDef
(
fgd
,
pri
,
root
->
fileName
,
root
->
startLine
,
root
->
doc
.
length
()
!=
0
);
if
(
success
)
ClassDef
*
cd
=
md
->
getClassDefOfAnonymousType
();
{
if
(
cd
)
cd
->
setGroupDefForAllMembers
(
fgd
,
pri
,
root
->
fileName
,
root
->
startLine
,
root
->
doc
.
length
()
!=
0
);
md
->
setGroupDef
(
fgd
,
pri
,
root
->
fileName
,
root
->
startLine
,
root
->
doc
.
length
()
!=
0
);
ClassDef
*
cd
=
md
->
getClassDefOfAnonymousType
();
if
(
cd
)
cd
->
setGroupDefForAllMembers
(
fgd
,
pri
,
root
->
fileName
,
root
->
startLine
,
root
->
doc
.
length
()
!=
0
);
}
}
}
}
}
}
}
...
...
src/groupdef.h
View file @
0a37457c
...
@@ -55,7 +55,7 @@ class GroupDef : public Definition
...
@@ -55,7 +55,7 @@ class GroupDef : public Definition
void
addParentGroup
(
const
GroupDef
*
def
);
void
addParentGroup
(
const
GroupDef
*
def
);
void
addPage
(
PageInfo
*
def
);
// pages in this group
void
addPage
(
PageInfo
*
def
);
// pages in this group
void
addExample
(
const
PageInfo
*
def
);
// examples in this group
void
addExample
(
const
PageInfo
*
def
);
// examples in this group
void
insertMember
(
MemberDef
*
def
,
bool
docOnly
=
FALSE
);
bool
insertMember
(
MemberDef
*
def
,
bool
docOnly
=
FALSE
);
void
removeMember
(
MemberDef
*
md
);
void
removeMember
(
MemberDef
*
md
);
bool
containsGroup
(
const
GroupDef
*
def
);
// true if def is already a subgroup
bool
containsGroup
(
const
GroupDef
*
def
);
// true if def is already a subgroup
void
writeDetailedDocumentation
(
OutputList
&
ol
);
void
writeDetailedDocumentation
(
OutputList
&
ol
);
...
...
src/htmldocvisitor.cpp
View file @
0a37457c
...
@@ -17,6 +17,725 @@
...
@@ -17,6 +17,725 @@
*/
*/
#include "htmldocvisitor.h"
#include "htmldocvisitor.h"
#include "docparser.h"
#include "language.h"
#include "doxygen.h"
#include "outputgen.h"
#include "code.h"
#include "dot.h"
HtmlDocVisitor
::
HtmlDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
)
:
m_t
(
t
),
m_ci
(
ci
),
m_insidePre
(
FALSE
),
m_hide
(
FALSE
)
{
}
//--------------------------------------
// visitor functions for leaf nodes
//--------------------------------------
void
HtmlDocVisitor
::
HtmlDocVisitor
::
visit
(
DocWord
*
w
)
{
if
(
m_hide
)
return
;
filter
(
w
->
word
());
}
void
HtmlDocVisitor
::
HtmlDocVisitor
::
visit
(
DocLinkedWord
*
w
)
{
if
(
m_hide
)
return
;
startLink
(
w
->
ref
(),
w
->
file
(),
w
->
anchor
());
filter
(
w
->
word
());
endLink
();
}
void
HtmlDocVisitor
::
HtmlDocVisitor
::
visit
(
DocWhiteSpace
*
w
)
{
if
(
m_hide
)
return
;
if
(
m_insidePre
)
{
m_t
<<
w
->
chars
();
}
else
{
m_t
<<
" "
;
}
}
void
HtmlDocVisitor
::
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
<<
"©"
;
break
;
case
DocSymbol
:
:
Apos
:
m_t
<<
"'"
;
break
;
case
DocSymbol
:
:
Quot
:
m_t
<<
"
\"
"
;
break
;
case
DocSymbol
:
:
Uml
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"uml;"
;
break
;
case
DocSymbol
:
:
Acute
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"acute;"
;
break
;
case
DocSymbol
:
:
Grave
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"grave;"
;
break
;
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
()
<<
"cedul;"
;
break
;
case
DocSymbol
:
:
Ring
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"ring;"
;
break
;
case
DocSymbol
:
:
Nbsp
:
m_t
<<
" "
;
break
;
default
:
printf
(
"Error: unknown symbol found
\n
"
);
}
}
void
HtmlDocVisitor
::
visit
(
DocURL
*
u
)
{
if
(
m_hide
)
return
;
m_t
<<
"<a href=
\"
"
<<
u
->
url
()
<<
"
\"
>"
<<
u
->
url
()
<<
"</a>"
;
}
void
HtmlDocVisitor
::
visit
(
DocLineBreak
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"<br>
\n
"
;
}
void
HtmlDocVisitor
::
visit
(
DocHorRuler
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"<hr>
\n
"
;
}
void
HtmlDocVisitor
::
visit
(
DocStyleChange
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
style
())
{
case
DocStyleChange
:
:
Bold
:
if
(
s
->
enable
())
m_t
<<
"<b>"
;
else
m_t
<<
"</b> "
;
break
;
case
DocStyleChange
:
:
Italic
:
if
(
s
->
enable
())
m_t
<<
"<em>"
;
else
m_t
<<
"</em> "
;
break
;
case
DocStyleChange
:
:
Code
:
if
(
s
->
enable
())
m_t
<<
"<code>"
;
else
m_t
<<
"</code> "
;
break
;
case
DocStyleChange
:
:
Subscript
:
if
(
s
->
enable
())
m_t
<<
"<sub>"
;
else
m_t
<<
"</sub> "
;
break
;
case
DocStyleChange
:
:
Superscript
:
if
(
s
->
enable
())
m_t
<<
"<sup>"
;
else
m_t
<<
"</sup> "
;
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
HtmlDocVisitor
::
visit
(
DocVerbatim
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
type
())
{
case
DocVerbatim
:
:
Code
:
// fall though
m_t
<<
"<div class=
\"
fragment
\"
><pre>"
;
parseCode
(
m_ci
,
s
->
context
(),
s
->
text
(),
FALSE
,
0
);
m_t
<<
"</pre></div>"
;
break
;
case
DocVerbatim
:
:
Verbatim
:
m_t
<<
"<div class=
\"
fragment
\"
><pre>"
;
filter
(
s
->
text
());
m_t
<<
"</pre></div>"
;
break
;
case
DocVerbatim
:
:
HtmlOnly
:
m_t
<<
s
->
text
();
break
;
case
DocVerbatim
:
:
LatexOnly
:
/* nothing */
break
;
}
}
void
HtmlDocVisitor
::
visit
(
DocAnchor
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"<a name=
\"
%s
\"
/></a>"
;
}
void
HtmlDocVisitor
::
visit
(
DocInclude
*
inc
)
{
if
(
m_hide
)
return
;
switch
(
inc
->
type
())
{
case
DocInclude
:
:
Include
:
m_t
<<
"<div class=
\"
fragment
\"
><pre>"
;
parseCode
(
m_ci
,
inc
->
context
(),
inc
->
text
(),
FALSE
,
0
);
m_t
<<
"</pre></div>"
;
break
;
case
DocInclude
:
:
DontInclude
:
break
;
case
DocInclude
:
:
HtmlInclude
:
m_t
<<
inc
->
text
();
break
;
case
DocInclude
:
:
VerbInclude
:
m_t
<<
"<div class=
\"
fragment
\"
><pre>"
;
filter
(
inc
->
text
());
m_t
<<
"</pre></div>"
;
break
;
}
}
void
HtmlDocVisitor
::
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
<<
"<div class=
\"
fragment
\"
><pre>"
;
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
<<
"</pre></div>"
;
}
else
{
m_t
<<
endl
;
}
}
void
HtmlDocVisitor
::
visit
(
DocFormula
*
f
)
{
if
(
m_hide
)
return
;
if
(
f
->
text
().
at
(
0
)
==
'\\'
)
m_t
<<
"<p><center>"
<<
endl
;
m_t
<<
"<img align="
;
#if !defined(_WIN32)
m_t
<<
"
\"
top
\"
"
;
// assume Unix users use Netscape 4.x which does
// not seem to support align == "middle" :-((
#else
m_t
<<
"
\"
middle
\"
"
;
// assume Windows users use IE or HtmlHelp which on
// displays formulas nicely with align == "middle"
#endif
m_t
<<
" src=
\"
"
<<
f
->
name
()
<<
".png
\"
>"
;
if
(
f
->
text
().
at
(
0
)
==
'\\'
)
m_t
<<
endl
<<
"</center><p>"
<<
endl
;
else
m_t
<<
" "
;
}
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
void
HtmlDocVisitor
::
visitPre
(
DocAutoList
*
l
)
{
if
(
l
->
isEnumList
())
{
m_t
<<
"<ol>
\n
"
;
}
else
{
m_t
<<
"<ul>
\n
"
;
}
}
void
HtmlDocVisitor
::
visitPost
(
DocAutoList
*
l
)
{
if
(
l
->
isEnumList
())
{
m_t
<<
"</ol>
\n
"
;
}
else
{
m_t
<<
"</ul>
\n
"
;
}
}
void
HtmlDocVisitor
::
visitPre
(
DocAutoListItem
*
)
{
m_t
<<
"<li>"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocAutoListItem
*
)
{
m_t
<<
"</li>"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocPara
*
)
{
}
void
HtmlDocVisitor
::
visitPost
(
DocPara
*
p
)
{
if
(
!
p
->
isLast
()
&&
// omit <p> for last paragraph
!
(
p
->
parent
()
&&
// and for parameter sections
p
->
parent
()
->
kind
()
==
DocNode
::
Kind_ParamSect
)
)
m_t
<<
"
\n
<p>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocRoot
*
)
{
//m_t << "<hr><h4><font color=\"red\">New parser:</font></h4>\n";
}
void
HtmlDocVisitor
::
visitPost
(
DocRoot
*
)
{
//m_t << "<hr><h4><font color=\"red\">Old parser:</font></h4>\n";
}
void
HtmlDocVisitor
::
visitPre
(
DocSimpleSect
*
s
)
{
m_t
<<
"<dl compact><dt><b>"
;
switch
(
s
->
type
())
{
case
DocSimpleSect
:
:
See
:
m_t
<<
theTranslator
->
trSeeAlso
();
break
;
case
DocSimpleSect
:
:
Return
:
m_t
<<
theTranslator
->
trReturns
();
break
;
case
DocSimpleSect
:
:
Author
:
m_t
<<
theTranslator
->
trAuthor
(
TRUE
,
TRUE
);
break
;
case
DocSimpleSect
:
:
Authors
:
m_t
<<
theTranslator
->
trAuthor
(
TRUE
,
FALSE
);
break
;
case
DocSimpleSect
:
:
Version
:
m_t
<<
theTranslator
->
trVersion
();
break
;
case
DocSimpleSect
:
:
Since
:
m_t
<<
theTranslator
->
trSince
();
break
;
case
DocSimpleSect
:
:
Date
:
m_t
<<
theTranslator
->
trDate
();
break
;
case
DocSimpleSect
:
:
Note
:
m_t
<<
theTranslator
->
trNote
();
break
;
case
DocSimpleSect
:
:
Warning
:
m_t
<<
theTranslator
->
trWarning
();
break
;
case
DocSimpleSect
:
:
Pre
:
m_t
<<
theTranslator
->
trPrecondition
();
break
;
case
DocSimpleSect
:
:
Post
:
m_t
<<
theTranslator
->
trPostcondition
();
break
;
case
DocSimpleSect
:
:
Invar
:
m_t
<<
theTranslator
->
trInvariant
();
break
;
case
DocSimpleSect
:
:
Remark
:
m_t
<<
theTranslator
->
trRemarks
();
break
;
case
DocSimpleSect
:
:
Attention
:
m_t
<<
theTranslator
->
trAttention
();
break
;
case
DocSimpleSect
:
:
User
:
break
;
case
DocSimpleSect
:
:
Unknown
:
break
;
}
// special case 1: user defined title
if
(
s
->
type
()
!=
DocSimpleSect
::
User
)
{
m_t
<<
":</b></dt><dd>"
;
}
}
void
HtmlDocVisitor
::
visitPost
(
DocSimpleSect
*
)
{
m_t
<<
"</dd></dl>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocTitle
*
)
{
}
void
HtmlDocVisitor
::
visitPost
(
DocTitle
*
)
{
m_t
<<
"</b></dt><dd>"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocSimpleList
*
)
{
m_t
<<
"<ul>
\n
"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocSimpleList
*
)
{
m_t
<<
"</ul>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocSimpleListItem
*
)
{
m_t
<<
"<li>"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocSimpleListItem
*
)
{
m_t
<<
"</li>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocSection
*
s
)
{
m_t
<<
"<h"
<<
s
->
level
()
+
1
<<
">"
;
m_t
<<
"<a name=
\"
"
<<
s
->
anchor
();
filter
(
s
->
title
());
m_t
<<
"
\"
</a>"
<<
endl
;
m_t
<<
"</h"
<<
s
->
level
()
+
1
<<
">
\n
"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocSection
*
)
{
}
void
HtmlDocVisitor
::
visitPre
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"<ol>
\n
"
;
else
m_t
<<
"<ul>
\n
"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"</ol>
\n
"
;
else
m_t
<<
"</ul>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocHtmlListItem
*
)
{
m_t
<<
"<li>
\n
"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocHtmlListItem
*
)
{
m_t
<<
"</li>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocHtmlPre
*
)
{
m_t
<<
"<pre>
\n
"
;
m_insidePre
=
TRUE
;
}
void
HtmlDocVisitor
::
visitPost
(
DocHtmlPre
*
)
{
m_insidePre
=
FALSE
;
m_t
<<
"</pre>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocHtmlDescList
*
)
{
m_t
<<
"<dl>
\n
"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocHtmlDescList
*
)
{
m_t
<<
"</dl>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocHtmlDescTitle
*
)
{
m_t
<<
"<dt>"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocHtmlDescTitle
*
)
{
m_t
<<
"</dt>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocHtmlDescData
*
)
{
m_t
<<
"<dd>"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocHtmlDescData
*
)
{
m_t
<<
"</dd>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocHtmlTable
*
)
{
m_t
<<
"<table border=
\"
1
\"
cellspacing=
\"
3
\"
cellpadding=
\"
3
\"
>
\n
"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocHtmlTable
*
)
{
m_t
<<
"</table>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocHtmlRow
*
)
{
m_t
<<
"<tr>
\n
"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocHtmlRow
*
)
{
m_t
<<
"</tr>
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocHtmlCell
*
c
)
{
if
(
c
->
isHeading
())
m_t
<<
"<th>"
;
else
m_t
<<
"<td>"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocHtmlCell
*
c
)
{
if
(
c
->
isHeading
())
m_t
<<
"</th>"
;
else
m_t
<<
"</td>"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocHtmlCaption
*
)
{
m_t
<<
"<caption align=
\"
bottom
\"
>"
;
}
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
;
m_t
<<
"<p>"
<<
endl
;
}
void
HtmlDocVisitor
::
visitPost
(
DocInternal
*
)
{
m_t
<<
"</p>"
<<
endl
;
}
void
HtmlDocVisitor
::
visitPre
(
DocHRef
*
href
)
{
m_t
<<
"<a href=
\"
"
<<
href
->
url
()
<<
"
\"
>"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocHRef
*
)
{
m_t
<<
"</a>"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocHtmlHeader
*
header
)
{
m_t
<<
"<h"
<<
header
->
level
()
<<
">"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocHtmlHeader
*
header
)
{
m_t
<<
"</h"
<<
header
->
level
()
<<
">
\n
"
;
}
void
HtmlDocVisitor
::
visitPre
(
DocImage
*
img
)
{
if
(
img
->
type
()
==
DocImage
::
Html
)
{
QCString
baseName
=
img
->
name
();
int
i
;
if
((
i
=
baseName
.
findRev
(
'/'
))
!=-
1
||
(
i
=
baseName
.
findRev
(
'\\'
))
!=-
1
)
{
baseName
=
baseName
.
right
(
baseName
.
length
()
-
i
-
1
);
}
m_t
<<
"<div align=
\"
center
\"
>"
<<
endl
;
m_t
<<
"<img src=
\"
"
<<
img
->
name
()
<<
"
\"
alt=
\"
"
<<
baseName
<<
"
\"
>"
<<
endl
;
if
(
img
->
hasCaption
())
{
m_t
<<
"<p><strong>"
;
}
}
else
// other format -> skip
{
m_hide
=
TRUE
;
}
}
void
HtmlDocVisitor
::
visitPost
(
DocImage
*
img
)
{
if
(
img
->
type
()
==
DocImage
::
Html
)
{
if
(
img
->
hasCaption
())
{
m_t
<<
"</strong></p>"
;
}
m_t
<<
"</div>"
<<
endl
;
}
else
// other format
{
m_hide
=
FALSE
;
}
}
void
HtmlDocVisitor
::
visitPre
(
DocDotFile
*
df
)
{
QCString
baseName
=
df
->
file
();
int
i
;
if
((
i
=
baseName
.
findRev
(
'/'
))
!=-
1
)
{
baseName
=
baseName
.
right
(
baseName
.
length
()
-
i
-
1
);
}
QCString
outDir
=
Config_getString
(
"HTML_OUTPUT"
);
writeDotGraphFromFile
(
df
->
file
(),
outDir
,
baseName
,
BITMAP
);
m_t
<<
"<div align=
\"
center
\"
>"
<<
endl
;
m_t
<<
"<img src=
\"
"
<<
baseName
<<
"."
<<
Config_getEnum
(
"DOT_IMAGE_FORMAT"
)
<<
"
\"
alt=
\"
"
<<
baseName
<<
"
\"
>"
<<
endl
;
if
(
df
->
hasCaption
())
{
m_t
<<
"<p><strong>"
;
}
}
void
HtmlDocVisitor
::
visitPost
(
DocDotFile
*
df
)
{
if
(
df
->
hasCaption
())
{
m_t
<<
"</strong></p>"
<<
endl
;
}
m_t
<<
"</div>"
<<
endl
;
}
void
HtmlDocVisitor
::
visitPre
(
DocLink
*
lnk
)
{
startLink
(
lnk
->
ref
(),
lnk
->
file
(),
lnk
->
anchor
());
}
void
HtmlDocVisitor
::
visitPost
(
DocLink
*
)
{
endLink
();
}
void
HtmlDocVisitor
::
visitPre
(
DocRef
*
ref
)
{
startLink
(
ref
->
ref
(),
ref
->
file
(),
ref
->
anchor
());
if
(
!
ref
->
hasLinkText
())
filter
(
ref
->
targetTitle
());
}
void
HtmlDocVisitor
::
visitPost
(
DocRef
*
)
{
endLink
();
m_t
<<
" "
;
}
void
HtmlDocVisitor
::
visitPre
(
DocSecRefItem
*
ref
)
{
QCString
refName
=
ref
->
file
();
if
(
refName
.
right
(
Doxygen
::
htmlFileExtension
.
length
())
!=
Doxygen
::
htmlFileExtension
)
{
refName
+=
Doxygen
::
htmlFileExtension
;
}
m_t
<<
"<li><a href=
\"
"
<<
refName
<<
"#"
<<
ref
->
anchor
()
<<
"
\"
>"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocSecRefItem
*
)
{
m_t
<<
"</a> "
;
}
void
HtmlDocVisitor
::
visitPre
(
DocSecRefList
*
)
{
m_t
<<
"<multicol cols=3>"
<<
endl
;
m_t
<<
"<ul>"
<<
endl
;
}
void
HtmlDocVisitor
::
visitPost
(
DocSecRefList
*
)
{
m_t
<<
"</ul>"
<<
endl
;
m_t
<<
"</multicol>"
<<
endl
;
}
void
HtmlDocVisitor
::
visitPre
(
DocLanguage
*
)
{
}
void
HtmlDocVisitor
::
visitPost
(
DocLanguage
*
)
{
}
void
HtmlDocVisitor
::
visitPre
(
DocParamSect
*
s
)
{
m_t
<<
"<dl compact><dt><b>"
;
switch
(
s
->
type
())
{
case
DocParamSect
:
:
Param
:
m_t
<<
theTranslator
->
trParameters
();
break
;
case
DocParamSect
:
:
RetVal
:
m_t
<<
theTranslator
->
trReturnValues
();
break
;
case
DocParamSect
:
:
Exception
:
m_t
<<
theTranslator
->
trExceptions
();
break
;
default
:
ASSERT
(
0
);
}
m_t
<<
":"
;
m_t
<<
"</b></dt><dd>"
<<
endl
;
m_t
<<
" <table border=
\"
0
\"
cellspacing=
\"
2
\"
cellpadding=
\"
0
\"
>"
<<
endl
;
}
void
HtmlDocVisitor
::
visitPost
(
DocParamSect
*
)
{
m_t
<<
" </table>"
<<
endl
;
m_t
<<
"</dl>"
<<
endl
;
}
void
HtmlDocVisitor
::
visitPre
(
DocParamList
*
pl
)
{
m_t
<<
" <tr><td valign=top><em>"
;
QStrListIterator
li
(
pl
->
parameters
());
const
char
*
s
;
bool
first
=
TRUE
;
for
(
li
.
toFirst
();(
s
=
li
.
current
());
++
li
)
{
if
(
!
first
)
m_t
<<
","
;
else
first
=
FALSE
;
m_t
<<
s
;
}
m_t
<<
"</em> </td><td>"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocParamList
*
)
{
m_t
<<
"</td></tr>"
<<
endl
;
}
void
HtmlDocVisitor
::
visitPre
(
DocXRefItem
*
x
)
{
m_t
<<
"<dl compact><dt><b><a class=
\"
el
\"
href=
\"
"
<<
x
->
file
()
<<
Doxygen
::
htmlFileExtension
<<
"#"
<<
x
->
anchor
()
<<
"
\"
>"
;
filter
(
x
->
title
());
m_t
<<
":</a></b></dt><dd>"
;
}
void
HtmlDocVisitor
::
visitPost
(
DocXRefItem
*
)
{
m_t
<<
"</dd></dl>"
<<
endl
;
}
void
HtmlDocVisitor
::
visitPre
(
DocInternalRef
*
ref
)
{
startLink
(
0
,
ref
->
file
(),
ref
->
anchor
());
}
void
HtmlDocVisitor
::
visitPost
(
DocInternalRef
*
)
{
endLink
();
m_t
<<
" "
;
}
void
HtmlDocVisitor
::
visitPre
(
DocCopy
*
)
{
}
void
HtmlDocVisitor
::
visitPost
(
DocCopy
*
)
{
}
void
HtmlDocVisitor
::
filter
(
const
char
*
str
)
void
HtmlDocVisitor
::
filter
(
const
char
*
str
)
{
{
...
...
src/htmldocvisitor.h
View file @
0a37457c
...
@@ -20,646 +20,109 @@
...
@@ -20,646 +20,109 @@
#define _HTMLDOCVISITOR_H
#define _HTMLDOCVISITOR_H
#include "docvisitor.h"
#include "docvisitor.h"
#include "docparser.h"
#include "language.h"
class
QTextStream
;
#include "doxygen.h"
class
BaseCodeDocInterface
;
#include "outputgen.h"
class
QCString
;
#include "code.h"
#include "dot.h"
/*! @brief Concrete visitor implementation for HTML output. */
/*! @brief Concrete visitor implementation for HTML output. */
class
HtmlDocVisitor
:
public
DocVisitor
class
HtmlDocVisitor
:
public
DocVisitor
{
{
public
:
public
:
HtmlDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
)
HtmlDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
);
:
m_t
(
t
),
m_ci
(
ci
),
m_insidePre
(
FALSE
),
m_hide
(
FALSE
)
{}
//--------------------------------------
//--------------------------------------
// visitor functions for leaf nodes
// visitor functions for leaf nodes
//--------------------------------------
//--------------------------------------
void
visit
(
DocWord
*
w
)
void
visit
(
DocWord
*
);
{
void
visit
(
DocLinkedWord
*
);
if
(
m_hide
)
return
;
void
visit
(
DocWhiteSpace
*
);
filter
(
w
->
word
());
void
visit
(
DocSymbol
*
);
}
void
visit
(
DocURL
*
);
void
visit
(
DocLinkedWord
*
w
)
void
visit
(
DocLineBreak
*
);
{
void
visit
(
DocHorRuler
*
);
if
(
m_hide
)
return
;
void
visit
(
DocStyleChange
*
);
startLink
(
w
->
ref
(),
w
->
file
(),
w
->
anchor
());
void
visit
(
DocVerbatim
*
);
filter
(
w
->
word
());
void
visit
(
DocAnchor
*
);
endLink
();
void
visit
(
DocInclude
*
);
}
void
visit
(
DocIncOperator
*
);
void
visit
(
DocWhiteSpace
*
w
)
void
visit
(
DocFormula
*
);
{
if
(
m_hide
)
return
;
if
(
m_insidePre
)
{
m_t
<<
w
->
chars
();
}
else
{
m_t
<<
" "
;
}
}
void
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
<<
"©"
;
break
;
case
DocSymbol
:
:
Apos
:
m_t
<<
"'"
;
break
;
case
DocSymbol
:
:
Quot
:
m_t
<<
"
\"
"
;
break
;
case
DocSymbol
:
:
Uml
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"uml;"
;
break
;
case
DocSymbol
:
:
Acute
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"acute;"
;
break
;
case
DocSymbol
:
:
Grave
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"grave;"
;
break
;
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
()
<<
"cedul;"
;
break
;
case
DocSymbol
:
:
Ring
:
m_t
<<
"&"
<<
s
->
letter
()
<<
"ring;"
;
break
;
case
DocSymbol
:
:
Nbsp
:
m_t
<<
" "
;
break
;
default
:
printf
(
"Error: unknown symbol found
\n
"
);
}
}
void
visit
(
DocURL
*
u
)
{
if
(
m_hide
)
return
;
m_t
<<
"<a href=
\"
"
<<
u
->
url
()
<<
"
\"
>"
<<
u
->
url
()
<<
"</a>"
;
}
void
visit
(
DocLineBreak
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"<br>
\n
"
;
}
void
visit
(
DocHorRuler
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"<hr>
\n
"
;
}
void
visit
(
DocStyleChange
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
style
())
{
case
DocStyleChange
:
:
Bold
:
if
(
s
->
enable
())
m_t
<<
"<b>"
;
else
m_t
<<
"</b> "
;
break
;
case
DocStyleChange
:
:
Italic
:
if
(
s
->
enable
())
m_t
<<
"<em>"
;
else
m_t
<<
"</em> "
;
break
;
case
DocStyleChange
:
:
Code
:
if
(
s
->
enable
())
m_t
<<
"<code>"
;
else
m_t
<<
"</code> "
;
break
;
case
DocStyleChange
:
:
Subscript
:
if
(
s
->
enable
())
m_t
<<
"<sub>"
;
else
m_t
<<
"</sub> "
;
break
;
case
DocStyleChange
:
:
Superscript
:
if
(
s
->
enable
())
m_t
<<
"<sup>"
;
else
m_t
<<
"</sup> "
;
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
visit
(
DocVerbatim
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
type
())
{
case
DocVerbatim
:
:
Code
:
// fall though
m_t
<<
"<div class=
\"
fragment
\"
><pre>"
;
parseCode
(
m_ci
,
s
->
context
(),
s
->
text
(),
FALSE
,
0
);
m_t
<<
"</pre></div>"
;
break
;
case
DocVerbatim
:
:
Verbatim
:
m_t
<<
"<div class=
\"
fragment
\"
><pre>"
;
filter
(
s
->
text
());
m_t
<<
"</pre></div>"
;
break
;
case
DocVerbatim
:
:
HtmlOnly
:
m_t
<<
s
->
text
();
break
;
case
DocVerbatim
:
:
LatexOnly
:
/* nothing */
break
;
}
}
void
visit
(
DocAnchor
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"<a name=
\"
%s
\"
/></a>"
;
}
void
visit
(
DocInclude
*
inc
)
{
if
(
m_hide
)
return
;
switch
(
inc
->
type
())
{
case
DocInclude
:
:
Include
:
m_t
<<
"<div class=
\"
fragment
\"
><pre>"
;
parseCode
(
m_ci
,
inc
->
context
(),
inc
->
text
(),
FALSE
,
0
);
m_t
<<
"</pre></div>"
;
break
;
case
DocInclude
:
:
DontInclude
:
break
;
case
DocInclude
:
:
HtmlInclude
:
m_t
<<
inc
->
text
();
break
;
case
DocInclude
:
:
VerbInclude
:
m_t
<<
"<div class=
\"
fragment
\"
><pre>"
;
filter
(
inc
->
text
());
m_t
<<
"</pre></div>"
;
break
;
}
}
void
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
<<
"<div class=
\"
fragment
\"
><pre>"
;
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
<<
"</pre></div>"
;
}
else
{
m_t
<<
endl
;
}
}
void
visit
(
DocFormula
*
f
)
{
if
(
m_hide
)
return
;
if
(
f
->
text
().
at
(
0
)
==
'\\'
)
m_t
<<
"<p><center>"
<<
endl
;
m_t
<<
"<img align="
;
#if !defined(_WIN32)
m_t
<<
"
\"
top
\"
"
;
// assume Unix users use Netscape 4.x which does
// not seem to support align == "middle" :-((
#else
m_t
<<
"
\"
middle
\"
"
;
// assume Windows users use IE or HtmlHelp which on
// displays formulas nicely with align == "middle"
#endif
m_t
<<
" src=
\"
"
<<
f
->
name
()
<<
".png
\"
>"
;
if
(
f
->
text
().
at
(
0
)
==
'\\'
)
m_t
<<
endl
<<
"</center><p>"
<<
endl
;
else
m_t
<<
" "
;
}
//--------------------------------------
//--------------------------------------
// visitor functions for compound nodes
// visitor functions for compound nodes
//--------------------------------------
//--------------------------------------
void
visitPre
(
DocAutoList
*
l
)
void
visitPre
(
DocAutoList
*
);
{
void
visitPost
(
DocAutoList
*
);
if
(
l
->
isEnumList
())
void
visitPre
(
DocAutoListItem
*
);
{
void
visitPost
(
DocAutoListItem
*
);
m_t
<<
"<ol>
\n
"
;
void
visitPre
(
DocPara
*
)
;
}
void
visitPost
(
DocPara
*
);
else
void
visitPre
(
DocRoot
*
);
{
void
visitPost
(
DocRoot
*
);
m_t
<<
"<ul>
\n
"
;
void
visitPre
(
DocSimpleSect
*
);
}
void
visitPost
(
DocSimpleSect
*
);
}
void
visitPre
(
DocTitle
*
);
void
visitPost
(
DocAutoList
*
l
)
void
visitPost
(
DocTitle
*
);
{
void
visitPre
(
DocSimpleList
*
);
if
(
l
->
isEnumList
())
void
visitPost
(
DocSimpleList
*
);
{
void
visitPre
(
DocSimpleListItem
*
);
m_t
<<
"</ol>
\n
"
;
void
visitPost
(
DocSimpleListItem
*
);
}
void
visitPre
(
DocSection
*
);
else
void
visitPost
(
DocSection
*
);
{
void
visitPre
(
DocHtmlList
*
);
m_t
<<
"</ul>
\n
"
;
void
visitPost
(
DocHtmlList
*
)
;
}
void
visitPre
(
DocHtmlListItem
*
);
}
void
visitPost
(
DocHtmlListItem
*
);
void
visitPre
(
DocAutoListItem
*
)
void
visitPre
(
DocHtmlPre
*
);
{
void
visitPost
(
DocHtmlPre
*
);
m_t
<<
"<li>"
;
void
visitPre
(
DocHtmlDescList
*
);
}
void
visitPost
(
DocHtmlDescList
*
);
void
visitPost
(
DocAutoListItem
*
)
void
visitPre
(
DocHtmlDescTitle
*
);
{
void
visitPost
(
DocHtmlDescTitle
*
);
m_t
<<
"</li>"
;
void
visitPre
(
DocHtmlDescData
*
);
}
void
visitPost
(
DocHtmlDescData
*
);
void
visitPre
(
DocPara
*
)
void
visitPre
(
DocHtmlTable
*
);
{
void
visitPost
(
DocHtmlTable
*
);
}
void
visitPre
(
DocHtmlRow
*
);
void
visitPost
(
DocPara
*
p
)
void
visitPost
(
DocHtmlRow
*
)
;
{
void
visitPre
(
DocHtmlCell
*
);
if
(
!
p
->
isLast
()
&&
// omit <p> for last paragraph
void
visitPost
(
DocHtmlCell
*
);
!
(
p
->
parent
()
&&
// and for parameter sections
void
visitPre
(
DocHtmlCaption
*
);
p
->
parent
()
->
kind
()
==
DocNode
::
Kind_ParamSect
void
visitPost
(
DocHtmlCaption
*
);
)
void
visitPre
(
DocIndexEntry
*
);
)
m_t
<<
"
\n
<p>
\n
"
;
void
visitPost
(
DocIndexEntry
*
);
}
void
visitPre
(
DocInternal
*
);
void
visitPre
(
DocRoot
*
)
void
visitPost
(
DocInternal
*
);
{
void
visitPre
(
DocHRef
*
);
//m_t << "<hr><h4><font color=\"red\">New parser:</font></h4>\n";
void
visitPost
(
DocHRef
*
);
}
void
visitPre
(
DocHtmlHeader
*
);
void
visitPost
(
DocRoot
*
)
void
visitPost
(
DocHtmlHeader
*
);
{
void
visitPre
(
DocImage
*
);
//m_t << "<hr><h4><font color=\"red\">Old parser:</font></h4>\n";
void
visitPost
(
DocImage
*
);
}
void
visitPre
(
DocDotFile
*
);
void
visitPre
(
DocSimpleSect
*
s
)
void
visitPost
(
DocDotFile
*
);
{
void
visitPre
(
DocLink
*
);
m_t
<<
"<dl compact><dt><b>"
;
void
visitPost
(
DocLink
*
);
switch
(
s
->
type
())
void
visitPre
(
DocRef
*
);
{
void
visitPost
(
DocRef
*
);
case
DocSimpleSect
:
:
See
:
void
visitPre
(
DocSecRefItem
*
);
m_t
<<
theTranslator
->
trSeeAlso
();
break
;
void
visitPost
(
DocSecRefItem
*
);
case
DocSimpleSect
:
:
Return
:
void
visitPre
(
DocSecRefList
*
);
m_t
<<
theTranslator
->
trReturns
();
break
;
void
visitPost
(
DocSecRefList
*
);
case
DocSimpleSect
:
:
Author
:
void
visitPre
(
DocLanguage
*
);
m_t
<<
theTranslator
->
trAuthor
(
TRUE
,
TRUE
);
break
;
void
visitPost
(
DocLanguage
*
);
case
DocSimpleSect
:
:
Authors
:
void
visitPre
(
DocParamSect
*
);
m_t
<<
theTranslator
->
trAuthor
(
TRUE
,
FALSE
);
break
;
void
visitPost
(
DocParamSect
*
);
case
DocSimpleSect
:
:
Version
:
void
visitPre
(
DocParamList
*
);
m_t
<<
theTranslator
->
trVersion
();
break
;
void
visitPost
(
DocParamList
*
);
case
DocSimpleSect
:
:
Since
:
void
visitPre
(
DocXRefItem
*
);
m_t
<<
theTranslator
->
trSince
();
break
;
void
visitPost
(
DocXRefItem
*
);
case
DocSimpleSect
:
:
Date
:
void
visitPre
(
DocInternalRef
*
);
m_t
<<
theTranslator
->
trDate
();
break
;
void
visitPost
(
DocInternalRef
*
);
case
DocSimpleSect
:
:
Note
:
void
visitPre
(
DocCopy
*
);
m_t
<<
theTranslator
->
trNote
();
break
;
void
visitPost
(
DocCopy
*
);
case
DocSimpleSect
:
:
Warning
:
m_t
<<
theTranslator
->
trWarning
();
break
;
case
DocSimpleSect
:
:
Pre
:
m_t
<<
theTranslator
->
trPrecondition
();
break
;
case
DocSimpleSect
:
:
Post
:
m_t
<<
theTranslator
->
trPostcondition
();
break
;
case
DocSimpleSect
:
:
Invar
:
m_t
<<
theTranslator
->
trInvariant
();
break
;
case
DocSimpleSect
:
:
Remark
:
m_t
<<
theTranslator
->
trRemarks
();
break
;
case
DocSimpleSect
:
:
Attention
:
m_t
<<
theTranslator
->
trAttention
();
break
;
case
DocSimpleSect
:
:
User
:
break
;
case
DocSimpleSect
:
:
Unknown
:
break
;
}
// special case 1: user defined title
if
(
s
->
type
()
!=
DocSimpleSect
::
User
)
{
m_t
<<
":</b></dt><dd>"
;
}
}
void
visitPost
(
DocSimpleSect
*
)
{
m_t
<<
"</dd></dl>
\n
"
;
}
void
visitPre
(
DocTitle
*
)
{
}
void
visitPost
(
DocTitle
*
)
{
m_t
<<
"</b></dt><dd>"
;
}
void
visitPre
(
DocSimpleList
*
)
{
m_t
<<
"<ul>
\n
"
;
}
void
visitPost
(
DocSimpleList
*
)
{
m_t
<<
"</ul>
\n
"
;
}
void
visitPre
(
DocSimpleListItem
*
)
{
m_t
<<
"<li>"
;
}
void
visitPost
(
DocSimpleListItem
*
)
{
m_t
<<
"</li>
\n
"
;
}
void
visitPre
(
DocSection
*
s
)
{
m_t
<<
"<h"
<<
s
->
level
()
+
1
<<
">"
;
m_t
<<
"<a name=
\"
"
<<
s
->
anchor
();
filter
(
s
->
title
());
m_t
<<
"
\"
</a>"
<<
endl
;
m_t
<<
"</h"
<<
s
->
level
()
+
1
<<
">
\n
"
;
}
void
visitPost
(
DocSection
*
)
{
}
void
visitPre
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"<ol>
\n
"
;
else
m_t
<<
"<ul>
\n
"
;
}
void
visitPost
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"</ol>
\n
"
;
else
m_t
<<
"</ul>
\n
"
;
}
void
visitPre
(
DocHtmlListItem
*
)
{
m_t
<<
"<li>
\n
"
;
}
void
visitPost
(
DocHtmlListItem
*
)
{
m_t
<<
"</li>
\n
"
;
}
void
visitPre
(
DocHtmlPre
*
)
{
m_t
<<
"<pre>
\n
"
;
m_insidePre
=
TRUE
;
}
void
visitPost
(
DocHtmlPre
*
)
{
m_insidePre
=
FALSE
;
m_t
<<
"</pre>
\n
"
;
}
void
visitPre
(
DocHtmlDescList
*
)
{
m_t
<<
"<dl>
\n
"
;
}
void
visitPost
(
DocHtmlDescList
*
)
{
m_t
<<
"</dl>
\n
"
;
}
void
visitPre
(
DocHtmlDescTitle
*
)
{
m_t
<<
"<dt>"
;
}
void
visitPost
(
DocHtmlDescTitle
*
)
{
m_t
<<
"</dt>
\n
"
;
}
void
visitPre
(
DocHtmlDescData
*
)
{
m_t
<<
"<dd>"
;
}
void
visitPost
(
DocHtmlDescData
*
)
{
m_t
<<
"</dd>
\n
"
;
}
void
visitPre
(
DocHtmlTable
*
)
{
m_t
<<
"<table border=
\"
1
\"
cellspacing=
\"
3
\"
cellpadding=
\"
3
\"
>
\n
"
;
}
void
visitPost
(
DocHtmlTable
*
)
{
m_t
<<
"</table>
\n
"
;
}
void
visitPre
(
DocHtmlRow
*
)
{
m_t
<<
"<tr>
\n
"
;
}
void
visitPost
(
DocHtmlRow
*
)
{
m_t
<<
"</tr>
\n
"
;
}
void
visitPre
(
DocHtmlCell
*
c
)
{
if
(
c
->
isHeading
())
m_t
<<
"<th>"
;
else
m_t
<<
"<td>"
;
}
void
visitPost
(
DocHtmlCell
*
c
)
{
if
(
c
->
isHeading
())
m_t
<<
"</th>"
;
else
m_t
<<
"</td>"
;
}
void
visitPre
(
DocHtmlCaption
*
)
{
m_t
<<
"<caption align=
\"
bottom
\"
>"
;
}
void
visitPost
(
DocHtmlCaption
*
)
{
m_t
<<
"</caption>
\n
"
;
}
void
visitPre
(
DocIndexEntry
*
)
{
m_hide
=
TRUE
;
}
void
visitPost
(
DocIndexEntry
*
)
{
m_hide
=
FALSE
;
}
void
visitPre
(
DocInternal
*
)
{
m_t
<<
"<p><b>"
<<
theTranslator
->
trForInternalUseOnly
()
<<
"</b></p>"
<<
endl
;
m_t
<<
"<p>"
<<
endl
;
}
void
visitPost
(
DocInternal
*
)
{
m_t
<<
"</p>"
<<
endl
;
}
void
visitPre
(
DocHRef
*
href
)
{
m_t
<<
"<a href=
\"
"
<<
href
->
url
()
<<
"
\"
>"
;
}
void
visitPost
(
DocHRef
*
)
{
m_t
<<
"</a>"
;
}
void
visitPre
(
DocHtmlHeader
*
header
)
{
m_t
<<
"<h"
<<
header
->
level
()
<<
">"
;
}
void
visitPost
(
DocHtmlHeader
*
header
)
{
m_t
<<
"</h"
<<
header
->
level
()
<<
">
\n
"
;
}
void
visitPre
(
DocImage
*
img
)
{
if
(
img
->
type
()
==
DocImage
::
Html
)
{
QCString
baseName
=
img
->
name
();
int
i
;
if
((
i
=
baseName
.
findRev
(
'/'
))
!=-
1
||
(
i
=
baseName
.
findRev
(
'\\'
))
!=-
1
)
{
baseName
=
baseName
.
right
(
baseName
.
length
()
-
i
-
1
);
}
m_t
<<
"<div align=
\"
center
\"
>"
<<
endl
;
m_t
<<
"<img src=
\"
"
<<
img
->
name
()
<<
"
\"
alt=
\"
"
<<
baseName
<<
"
\"
>"
<<
endl
;
if
(
img
->
hasCaption
())
{
m_t
<<
"<p><strong>"
;
}
}
else
// other format -> skip
{
m_hide
=
TRUE
;
}
}
void
visitPost
(
DocImage
*
img
)
{
if
(
img
->
type
()
==
DocImage
::
Html
)
{
if
(
img
->
hasCaption
())
{
m_t
<<
"</strong></p>"
;
}
m_t
<<
"</div>"
<<
endl
;
}
else
// other format
{
m_hide
=
FALSE
;
}
}
void
visitPre
(
DocDotFile
*
df
)
{
QCString
baseName
=
df
->
file
();
int
i
;
if
((
i
=
baseName
.
findRev
(
'/'
))
!=-
1
)
{
baseName
=
baseName
.
right
(
baseName
.
length
()
-
i
-
1
);
}
QCString
outDir
=
Config_getString
(
"HTML_OUTPUT"
);
writeDotGraphFromFile
(
df
->
file
(),
outDir
,
baseName
,
BITMAP
);
m_t
<<
"<div align=
\"
center
\"
>"
<<
endl
;
m_t
<<
"<img src=
\"
"
<<
baseName
<<
"."
<<
Config_getEnum
(
"DOT_IMAGE_FORMAT"
)
<<
"
\"
alt=
\"
"
<<
baseName
<<
"
\"
>"
<<
endl
;
if
(
df
->
hasCaption
())
{
m_t
<<
"<p><strong>"
;
}
}
void
visitPost
(
DocDotFile
*
df
)
{
if
(
df
->
hasCaption
())
{
m_t
<<
"</strong></p>"
<<
endl
;
}
m_t
<<
"</div>"
<<
endl
;
}
void
visitPre
(
DocLink
*
lnk
)
{
startLink
(
lnk
->
ref
(),
lnk
->
file
(),
lnk
->
anchor
());
}
void
visitPost
(
DocLink
*
)
{
endLink
();
}
void
visitPre
(
DocRef
*
ref
)
{
startLink
(
ref
->
ref
(),
ref
->
file
(),
ref
->
anchor
());
if
(
!
ref
->
hasLinkText
())
filter
(
ref
->
targetTitle
());
}
void
visitPost
(
DocRef
*
)
{
endLink
();
m_t
<<
" "
;
}
void
visitPre
(
DocSecRefItem
*
ref
)
{
QCString
refName
=
ref
->
file
();
if
(
refName
.
right
(
Doxygen
::
htmlFileExtension
.
length
())
!=
Doxygen
::
htmlFileExtension
)
{
refName
+=
Doxygen
::
htmlFileExtension
;
}
m_t
<<
"<li><a href=
\"
"
<<
refName
<<
"#"
<<
ref
->
anchor
()
<<
"
\"
>"
;
}
void
visitPost
(
DocSecRefItem
*
)
{
m_t
<<
"</a> "
;
}
void
visitPre
(
DocSecRefList
*
)
{
m_t
<<
"<multicol cols=3>"
<<
endl
;
m_t
<<
"<ul>"
<<
endl
;
}
void
visitPost
(
DocSecRefList
*
)
{
m_t
<<
"</ul>"
<<
endl
;
m_t
<<
"</multicol>"
<<
endl
;
}
void
visitPre
(
DocLanguage
*
)
{
}
void
visitPost
(
DocLanguage
*
)
{
}
void
visitPre
(
DocParamSect
*
s
)
{
m_t
<<
"<dl compact><dt><b>"
;
switch
(
s
->
type
())
{
case
DocParamSect
:
:
Param
:
m_t
<<
theTranslator
->
trParameters
();
break
;
case
DocParamSect
:
:
RetVal
:
m_t
<<
theTranslator
->
trReturnValues
();
break
;
case
DocParamSect
:
:
Exception
:
m_t
<<
theTranslator
->
trExceptions
();
break
;
default
:
ASSERT
(
0
);
}
m_t
<<
":"
;
m_t
<<
"</b></dt><dd>"
<<
endl
;
m_t
<<
" <table border=
\"
0
\"
cellspacing=
\"
2
\"
cellpadding=
\"
0
\"
>"
<<
endl
;
}
void
visitPost
(
DocParamSect
*
)
{
m_t
<<
" </table>"
<<
endl
;
m_t
<<
"</dl>"
<<
endl
;
}
void
visitPre
(
DocParamList
*
pl
)
{
m_t
<<
" <tr><td valign=top><em>"
;
QStrListIterator
li
(
pl
->
parameters
());
const
char
*
s
;
bool
first
=
TRUE
;
for
(
li
.
toFirst
();(
s
=
li
.
current
());
++
li
)
{
if
(
!
first
)
m_t
<<
","
;
else
first
=
FALSE
;
m_t
<<
s
;
}
m_t
<<
"</em> </td><td>"
;
}
void
visitPost
(
DocParamList
*
)
{
m_t
<<
"</td></tr>"
<<
endl
;
}
void
visitPre
(
DocXRefItem
*
x
)
{
m_t
<<
"<dl compact><dt><b><a class=
\"
el
\"
href=
\"
"
<<
x
->
file
()
<<
Doxygen
::
htmlFileExtension
<<
"#"
<<
x
->
anchor
()
<<
"
\"
>"
;
filter
(
x
->
title
());
m_t
<<
":</a></b></dt><dd>"
;
}
void
visitPost
(
DocXRefItem
*
)
{
m_t
<<
"</dd></dl>"
<<
endl
;
}
void
visitPre
(
DocInternalRef
*
ref
)
{
startLink
(
0
,
ref
->
file
(),
ref
->
anchor
());
}
void
visitPost
(
DocInternalRef
*
)
{
endLink
();
m_t
<<
" "
;
}
void
visitPre
(
DocCopy
*
)
{
}
void
visitPost
(
DocCopy
*
)
{
}
private
:
private
:
...
...
src/htmlgen.cpp
View file @
0a37457c
...
@@ -30,6 +30,7 @@
...
@@ -30,6 +30,7 @@
#include "dot.h"
#include "dot.h"
#include "language.h"
#include "language.h"
#include "htmlhelp.h"
#include "htmlhelp.h"
#include "docparser.h"
#include "htmldocvisitor.h"
#include "htmldocvisitor.h"
// #define GROUP_COLOR "#ff8080"
// #define GROUP_COLOR "#ff8080"
...
...
src/latexdocvisitor.cpp
View file @
0a37457c
...
@@ -17,8 +17,830 @@
...
@@ -17,8 +17,830 @@
*/
*/
#include "latexdocvisitor.h"
#include "latexdocvisitor.h"
#include "docparser.h"
#include "language.h"
#include "doxygen.h"
#include "outputgen.h"
#include "code.h"
#include "dot.h"
#include "util.h"
#include "util.h"
LatexDocVisitor
::
LatexDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
)
:
m_t
(
t
),
m_ci
(
ci
),
m_insidePre
(
FALSE
),
m_hide
(
FALSE
)
{
}
//--------------------------------------
// visitor functions for leaf nodes
//--------------------------------------
void
LatexDocVisitor
::
visit
(
DocWord
*
w
)
{
if
(
m_hide
)
return
;
filter
(
w
->
word
());
}
void
LatexDocVisitor
::
visit
(
DocLinkedWord
*
w
)
{
if
(
m_hide
)
return
;
startLink
(
w
->
ref
(),
w
->
file
(),
w
->
anchor
());
filter
(
w
->
word
());
endLink
();
}
void
LatexDocVisitor
::
visit
(
DocWhiteSpace
*
w
)
{
if
(
m_hide
)
return
;
if
(
m_insidePre
)
{
m_t
<<
w
->
chars
();
}
else
{
m_t
<<
" "
;
}
}
void
LatexDocVisitor
::
visit
(
DocSymbol
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
symbol
())
{
case
DocSymbol
:
:
BSlash
:
m_t
<<
"$
\\
backslash$"
;
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
<<
"
\\
copyright"
;
break
;
case
DocSymbol
:
:
Apos
:
m_t
<<
"'"
;
break
;
case
DocSymbol
:
:
Quot
:
m_t
<<
"''"
;
break
;
case
DocSymbol
:
:
Uml
:
if
(
s
->
letter
()
==
'i'
)
m_t
<<
"
\\\"
{
\\
i}"
;
else
m_t
<<
"
\\\"
{"
<<
s
->
letter
()
<<
"}"
;
break
;
case
DocSymbol
:
:
Acute
:
if
(
s
->
letter
()
==
'i'
)
m_t
<<
"
\\
'{
\\
i}"
;
else
m_t
<<
"
\\
'{"
<<
s
->
letter
()
<<
"}"
;
break
;
case
DocSymbol
:
:
Grave
:
if
(
s
->
letter
()
==
'i'
)
m_t
<<
"
\\
`{
\\
i}"
;
else
m_t
<<
"
\\
`{"
<<
s
->
letter
()
<<
"}"
;
break
;
case
DocSymbol
:
:
Circ
:
if
(
s
->
letter
()
==
'i'
)
m_t
<<
"
\\
^{
\\
i}"
;
else
m_t
<<
"
\\
^{"
<<
s
->
letter
()
<<
"}"
;
break
;
case
DocSymbol
:
:
Tilde
:
m_t
<<
"
\\
~{"
<<
s
->
letter
()
<<
"}"
;
break
;
case
DocSymbol
:
:
Szlig
:
m_t
<<
"
\"
s"
;
break
;
case
DocSymbol
:
:
Cedil
:
m_t
<<
"
\\
c{"
<<
s
->
letter
()
<<
"}"
;
break
;
case
DocSymbol
:
:
Ring
:
m_t
<<
"
\\
"
<<
s
->
letter
()
<<
s
->
letter
();
break
;
case
DocSymbol
:
:
Nbsp
:
m_t
<<
"
\\
"
;
break
;
default
:
printf
(
"Error: unknown symbol found
\n
"
);
}
}
void
LatexDocVisitor
::
visit
(
DocURL
*
u
)
{
if
(
m_hide
)
return
;
if
(
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
href{"
<<
u
->
url
()
<<
"}"
;
}
m_t
<<
"{
\\
tt "
<<
u
->
url
()
<<
"}"
;
}
void
LatexDocVisitor
::
visit
(
DocLineBreak
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"
\\
par
\n
"
;
}
void
LatexDocVisitor
::
visit
(
DocHorRuler
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"
\n\n
"
;
}
void
LatexDocVisitor
::
visit
(
DocStyleChange
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
style
())
{
case
DocStyleChange
:
:
Bold
:
if
(
s
->
enable
())
m_t
<<
"{
\\
bf "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Italic
:
if
(
s
->
enable
())
m_t
<<
"{
\\
em "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Code
:
if
(
s
->
enable
())
m_t
<<
"{
\\
tt "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Subscript
:
if
(
s
->
enable
())
m_t
<<
"$_{
\\
mbox{"
;
else
m_t
<<
"}}$ "
;
break
;
case
DocStyleChange
:
:
Superscript
:
if
(
s
->
enable
())
m_t
<<
"$^{
\\
mbox{"
;
else
m_t
<<
"}}$ "
;
break
;
case
DocStyleChange
:
:
Center
:
if
(
s
->
enable
())
m_t
<<
"
\\
begin{center}"
;
else
m_t
<<
"
\\
end{center} "
;
break
;
case
DocStyleChange
:
:
Small
:
if
(
s
->
enable
())
m_t
<<
"
\\
footnotesize "
;
else
m_t
<<
"
\\
normalsize "
;
break
;
}
}
void
LatexDocVisitor
::
visit
(
DocVerbatim
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
type
())
{
case
DocVerbatim
:
:
Code
:
// fall though
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
parseCode
(
m_ci
,
s
->
context
(),
s
->
text
(),
FALSE
,
0
);
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
break
;
case
DocVerbatim
:
:
Verbatim
:
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
m_t
<<
s
->
text
();
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
break
;
case
DocVerbatim
:
:
HtmlOnly
:
/* nothing */
break
;
case
DocVerbatim
:
:
LatexOnly
:
m_t
<<
s
->
text
();
break
;
}
}
void
LatexDocVisitor
::
visit
(
DocAnchor
*
anc
)
{
if
(
m_hide
)
return
;
m_t
<<
"
\\
label{"
<<
anc
->
anchor
()
<<
"}"
<<
endl
;
if
(
!
anc
->
file
().
isEmpty
()
&&
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
hypertarget{"
<<
anc
->
file
()
<<
"_"
<<
anc
->
anchor
()
<<
"}{}"
<<
endl
;
}
}
void
LatexDocVisitor
::
visit
(
DocInclude
*
inc
)
{
if
(
m_hide
)
return
;
switch
(
inc
->
type
())
{
case
DocInclude
:
:
Include
:
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
parseCode
(
m_ci
,
inc
->
context
(),
inc
->
text
(),
FALSE
,
0
);
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
break
;
case
DocInclude
:
:
DontInclude
:
break
;
case
DocInclude
:
:
HtmlInclude
:
break
;
case
DocInclude
:
:
VerbInclude
:
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
m_t
<<
inc
->
text
();
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
break
;
}
}
void
LatexDocVisitor
::
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
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
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
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
}
else
{
m_t
<<
endl
;
}
}
void
LatexDocVisitor
::
visit
(
DocFormula
*
f
)
{
if
(
m_hide
)
return
;
m_t
<<
f
->
text
();
}
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
void
LatexDocVisitor
::
visitPre
(
DocAutoList
*
l
)
{
if
(
l
->
isEnumList
())
{
m_t
<<
"
\\
begin{enumerate}"
<<
endl
;
}
else
{
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
}
}
void
LatexDocVisitor
::
visitPost
(
DocAutoList
*
l
)
{
if
(
l
->
isEnumList
())
{
m_t
<<
"
\\
end{enumerate}"
<<
endl
;
}
else
{
m_t
<<
"
\\
end{itemize}"
<<
endl
;
}
}
void
LatexDocVisitor
::
visitPre
(
DocAutoListItem
*
)
{
m_t
<<
"
\\
item "
;
}
void
LatexDocVisitor
::
visitPost
(
DocAutoListItem
*
)
{
}
void
LatexDocVisitor
::
visitPre
(
DocPara
*
)
{
}
void
LatexDocVisitor
::
visitPost
(
DocPara
*
p
)
{
if
(
!
p
->
isLast
()
&&
// omit <p> for last paragraph
!
(
p
->
parent
()
&&
// and for parameter sections
p
->
parent
()
->
kind
()
==
DocNode
::
Kind_ParamSect
)
)
m_t
<<
endl
<<
endl
;
}
void
LatexDocVisitor
::
visitPre
(
DocRoot
*
)
{
}
void
LatexDocVisitor
::
visitPost
(
DocRoot
*
)
{
}
void
LatexDocVisitor
::
visitPre
(
DocSimpleSect
*
s
)
{
m_t
<<
"
\\
begin{Desc}
\n\\
item["
;
switch
(
s
->
type
())
{
case
DocSimpleSect
:
:
See
:
m_t
<<
theTranslator
->
trSeeAlso
();
break
;
case
DocSimpleSect
:
:
Return
:
m_t
<<
theTranslator
->
trReturns
();
break
;
case
DocSimpleSect
:
:
Author
:
m_t
<<
theTranslator
->
trAuthor
(
TRUE
,
TRUE
);
break
;
case
DocSimpleSect
:
:
Authors
:
m_t
<<
theTranslator
->
trAuthor
(
TRUE
,
FALSE
);
break
;
case
DocSimpleSect
:
:
Version
:
m_t
<<
theTranslator
->
trVersion
();
break
;
case
DocSimpleSect
:
:
Since
:
m_t
<<
theTranslator
->
trSince
();
break
;
case
DocSimpleSect
:
:
Date
:
m_t
<<
theTranslator
->
trDate
();
break
;
case
DocSimpleSect
:
:
Note
:
m_t
<<
theTranslator
->
trNote
();
break
;
case
DocSimpleSect
:
:
Warning
:
m_t
<<
theTranslator
->
trWarning
();
break
;
case
DocSimpleSect
:
:
Pre
:
m_t
<<
theTranslator
->
trPrecondition
();
break
;
case
DocSimpleSect
:
:
Post
:
m_t
<<
theTranslator
->
trPostcondition
();
break
;
case
DocSimpleSect
:
:
Invar
:
m_t
<<
theTranslator
->
trInvariant
();
break
;
case
DocSimpleSect
:
:
Remark
:
m_t
<<
theTranslator
->
trRemarks
();
break
;
case
DocSimpleSect
:
:
Attention
:
m_t
<<
theTranslator
->
trAttention
();
break
;
case
DocSimpleSect
:
:
User
:
break
;
case
DocSimpleSect
:
:
Unknown
:
break
;
}
// special case 1: user defined title
if
(
s
->
type
()
!=
DocSimpleSect
::
User
)
{
m_t
<<
":]"
;
}
}
void
LatexDocVisitor
::
visitPost
(
DocSimpleSect
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPre
(
DocTitle
*
)
{
}
void
LatexDocVisitor
::
visitPost
(
DocTitle
*
)
{
m_t
<<
"]"
;
}
void
LatexDocVisitor
::
visitPre
(
DocSimpleList
*
)
{
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPost
(
DocSimpleList
*
)
{
m_t
<<
"
\\
end{itemize}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPre
(
DocSimpleListItem
*
)
{
m_t
<<
"
\\
item "
;
}
void
LatexDocVisitor
::
visitPost
(
DocSimpleListItem
*
)
{
}
void
LatexDocVisitor
::
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{"
;
}
}
filter
(
s
->
title
());
m_t
<<
"}
\\
label{"
<<
s
->
anchor
()
<<
"}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPost
(
DocSection
*
)
{
}
void
LatexDocVisitor
::
visitPre
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"
\\
begin{enumerate}"
<<
endl
;
else
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPost
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"
\\
end{enumerate}"
<<
endl
;
else
m_t
<<
"
\\
end{itemize}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPre
(
DocHtmlListItem
*
)
{
m_t
<<
"
\\
item "
;
}
void
LatexDocVisitor
::
visitPost
(
DocHtmlListItem
*
)
{
}
void
LatexDocVisitor
::
visitPre
(
DocHtmlPre
*
)
{
m_t
<<
"
\\
small
\\
begin{alltt}"
;
m_insidePre
=
TRUE
;
}
void
LatexDocVisitor
::
visitPost
(
DocHtmlPre
*
)
{
m_insidePre
=
FALSE
;
m_t
<<
"
\\
end{alltt}
\\
normalsize "
<<
endl
;
}
void
LatexDocVisitor
::
visitPre
(
DocHtmlDescList
*
)
{
m_t
<<
"
\\
begin{description}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPost
(
DocHtmlDescList
*
)
{
m_t
<<
"
\\
end{description}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPre
(
DocHtmlDescTitle
*
)
{
m_t
<<
"
\\
item["
;
}
void
LatexDocVisitor
::
visitPost
(
DocHtmlDescTitle
*
)
{
m_t
<<
"]"
;
}
void
LatexDocVisitor
::
visitPre
(
DocHtmlDescData
*
)
{
}
void
LatexDocVisitor
::
visitPost
(
DocHtmlDescData
*
)
{
}
void
LatexDocVisitor
::
visitPre
(
DocHtmlTable
*
t
)
{
if
(
t
->
hasCaption
())
{
m_t
<<
"
\\
begin{table}[h]"
;
}
m_t
<<
"
\\
begin{TabularC}{"
<<
t
->
numCols
()
<<
"}
\n\\
hline
\n
"
;
}
void
LatexDocVisitor
::
visitPost
(
DocHtmlTable
*
t
)
{
if
(
t
->
hasCaption
())
{
m_t
<<
"
\\
end{table}
\n
"
;
}
else
{
m_t
<<
"
\\\\\\
hline
\n\\
end{TabularC}
\n
"
;
}
}
void
LatexDocVisitor
::
visitPre
(
DocHtmlCaption
*
)
{
m_t
<<
"
\\\\\\
hline
\n\\
end{TabularC}
\n\\
centering
\n\\
caption{"
;
}
void
LatexDocVisitor
::
visitPost
(
DocHtmlCaption
*
)
{
m_t
<<
"}
\n
"
;
}
void
LatexDocVisitor
::
visitPre
(
DocHtmlRow
*
)
{
}
void
LatexDocVisitor
::
visitPost
(
DocHtmlRow
*
)
{
m_t
<<
"
\\\\\\
hline
\n
"
;
}
void
LatexDocVisitor
::
visitPre
(
DocHtmlCell
*
)
{
}
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
<<
"
\\
item["
<<
theTranslator
->
trForInternalUseOnly
()
<<
"]"
<<
endl
;
}
void
LatexDocVisitor
::
visitPost
(
DocInternal
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPre
(
DocHRef
*
href
)
{
if
(
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
href{"
;
m_t
<<
href
->
url
();
m_t
<<
"}"
;
}
m_t
<<
"{
\\
tt "
;
}
void
LatexDocVisitor
::
visitPost
(
DocHRef
*
)
{
m_t
<<
"}"
;
}
void
LatexDocVisitor
::
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
;
}
}
else
{
switch
(
header
->
level
())
{
case
1
:
m_t
<<
"
\\
section{"
;
break
;
case
2
:
m_t
<<
"
\\
subsection{"
;
break
;
case
3
:
m_t
<<
"
\\
subsubsection{"
;
break
;
}
}
}
void
LatexDocVisitor
::
visitPost
(
DocHtmlHeader
*
)
{
m_t
<<
"}"
;
}
void
LatexDocVisitor
::
visitPre
(
DocImage
*
img
)
{
if
(
img
->
type
()
==
DocImage
::
Latex
)
{
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{"
;
}
}
else
// other format -> skip
{
m_hide
=
TRUE
;
}
}
void
LatexDocVisitor
::
visitPost
(
DocImage
*
img
)
{
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
;
}
}
void
LatexDocVisitor
::
visitPre
(
DocDotFile
*
df
)
{
QCString
baseName
=
df
->
file
();
int
i
;
if
((
i
=
baseName
.
findRev
(
'/'
))
!=-
1
)
{
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
<<
"}"
;
if
(
df
->
hasCaption
())
{
m_t
<<
"
\\
caption{"
;
}
}
void
LatexDocVisitor
::
visitPost
(
DocDotFile
*
df
)
{
m_t
<<
"}"
<<
endl
;
// end mbox or caption
if
(
df
->
hasCaption
())
{
m_t
<<
"
\\
end{center}"
<<
endl
;
m_t
<<
"
\\
end{figure}"
<<
endl
;
}
}
void
LatexDocVisitor
::
visitPre
(
DocLink
*
lnk
)
{
startLink
(
lnk
->
ref
(),
lnk
->
file
(),
lnk
->
anchor
());
}
void
LatexDocVisitor
::
visitPost
(
DocLink
*
)
{
endLink
();
}
void
LatexDocVisitor
::
visitPre
(
DocRef
*
ref
)
{
startLink
(
ref
->
ref
(),
ref
->
file
(),
ref
->
anchor
());
if
(
!
ref
->
hasLinkText
())
filter
(
ref
->
targetTitle
());
}
void
LatexDocVisitor
::
visitPost
(
DocRef
*
)
{
endLink
();
m_t
<<
" "
;
}
void
LatexDocVisitor
::
visitPre
(
DocSecRefItem
*
)
{
m_t
<<
"
\\
item
\\
contentsline{section}{"
;
}
void
LatexDocVisitor
::
visitPost
(
DocSecRefItem
*
ref
)
{
m_t
<<
"}{
\\
ref{"
<<
ref
->
anchor
()
<<
"}}{}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPre
(
DocSecRefList
*
)
{
m_t
<<
"
\\
footnotesize"
<<
endl
;
m_t
<<
"
\\
begin{multicols}{2}"
<<
endl
;
m_t
<<
"
\\
begin{CompactList}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPost
(
DocSecRefList
*
)
{
m_t
<<
"
\\
end{CompactList}"
<<
endl
;
m_t
<<
"
\\
end{multicols}"
<<
endl
;
m_t
<<
"
\\
normalsize"
<<
endl
;
}
void
LatexDocVisitor
::
visitPre
(
DocLanguage
*
)
{
}
void
LatexDocVisitor
::
visitPost
(
DocLanguage
*
)
{
}
void
LatexDocVisitor
::
visitPre
(
DocParamSect
*
s
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
;
m_t
<<
"
\\
item["
;
switch
(
s
->
type
())
{
case
DocParamSect
:
:
Param
:
m_t
<<
theTranslator
->
trParameters
();
break
;
case
DocParamSect
:
:
RetVal
:
m_t
<<
theTranslator
->
trReturnValues
();
break
;
case
DocParamSect
:
:
Exception
:
m_t
<<
theTranslator
->
trExceptions
();
break
;
default
:
ASSERT
(
0
);
}
m_t
<<
":]"
<<
endl
;
m_t
<<
"
\\
begin{description}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPost
(
DocParamSect
*
)
{
m_t
<<
"
\\
end{description}"
<<
endl
;
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPre
(
DocParamList
*
pl
)
{
m_t
<<
"
\\
item[{
\\
em "
;
QStrListIterator
li
(
pl
->
parameters
());
const
char
*
s
;
bool
first
=
TRUE
;
for
(
li
.
toFirst
();(
s
=
li
.
current
());
++
li
)
{
if
(
!
first
)
m_t
<<
","
;
else
first
=
FALSE
;
m_t
<<
s
;
}
m_t
<<
"}]"
;
}
void
LatexDocVisitor
::
visitPost
(
DocParamList
*
)
{
}
void
LatexDocVisitor
::
visitPre
(
DocXRefItem
*
x
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
;
m_t
<<
"
\\
item["
;
if
(
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
hyperlink{"
<<
x
->
file
()
<<
"_"
<<
x
->
anchor
()
<<
"}{"
;
}
else
{
m_t
<<
"{
\\
bf "
;
}
filter
(
x
->
title
());
m_t
<<
"}]"
;
}
void
LatexDocVisitor
::
visitPost
(
DocXRefItem
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
LatexDocVisitor
::
visitPre
(
DocInternalRef
*
ref
)
{
startLink
(
0
,
ref
->
file
(),
ref
->
anchor
());
}
void
LatexDocVisitor
::
visitPost
(
DocInternalRef
*
)
{
endLink
();
m_t
<<
" "
;
}
void
LatexDocVisitor
::
visitPre
(
DocCopy
*
)
{
}
void
LatexDocVisitor
::
visitPost
(
DocCopy
*
)
{
}
void
LatexDocVisitor
::
filter
(
const
char
*
str
)
void
LatexDocVisitor
::
filter
(
const
char
*
str
)
{
{
filterLatexString
(
m_t
,
str
,
FALSE
,
m_insidePre
);
filterLatexString
(
m_t
,
str
,
FALSE
,
m_insidePre
);
...
...
src/latexdocvisitor.h
View file @
0a37457c
...
@@ -20,749 +20,109 @@
...
@@ -20,749 +20,109 @@
#define _LATEXDOCVISITOR_H
#define _LATEXDOCVISITOR_H
#include "docvisitor.h"
#include "docvisitor.h"
#include "docparser.h"
#include "language.h"
class
QTextStream
;
#include "doxygen.h"
class
BaseCodeDocInterface
;
#include "outputgen.h"
class
QCString
;
#include "code.h"
#include "dot.h"
/*! @brief Concrete visitor implementation for LaTeX output. */
/*! @brief Concrete visitor implementation for LaTeX output. */
class
LatexDocVisitor
:
public
DocVisitor
class
LatexDocVisitor
:
public
DocVisitor
{
{
public
:
public
:
LatexDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
)
LatexDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
);
:
m_t
(
t
),
m_ci
(
ci
),
m_insidePre
(
FALSE
),
m_hide
(
FALSE
)
{}
//--------------------------------------
//--------------------------------------
// visitor functions for leaf nodes
// visitor functions for leaf nodes
//--------------------------------------
//--------------------------------------
void
visit
(
DocWord
*
w
)
void
visit
(
DocWord
*
);
{
void
visit
(
DocLinkedWord
*
);
if
(
m_hide
)
return
;
void
visit
(
DocWhiteSpace
*
);
filter
(
w
->
word
());
void
visit
(
DocSymbol
*
);
}
void
visit
(
DocURL
*
);
void
visit
(
DocLinkedWord
*
w
)
void
visit
(
DocLineBreak
*
);
{
void
visit
(
DocHorRuler
*
);
if
(
m_hide
)
return
;
void
visit
(
DocStyleChange
*
);
startLink
(
w
->
ref
(),
w
->
file
(),
w
->
anchor
());
void
visit
(
DocVerbatim
*
);
filter
(
w
->
word
());
void
visit
(
DocAnchor
*
);
endLink
();
void
visit
(
DocInclude
*
);
}
void
visit
(
DocIncOperator
*
);
void
visit
(
DocWhiteSpace
*
w
)
void
visit
(
DocFormula
*
);
{
if
(
m_hide
)
return
;
if
(
m_insidePre
)
{
m_t
<<
w
->
chars
();
}
else
{
m_t
<<
" "
;
}
}
void
visit
(
DocSymbol
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
symbol
())
{
case
DocSymbol
:
:
BSlash
:
m_t
<<
"$
\\
backslash$"
;
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
<<
"
\\
copyright"
;
break
;
case
DocSymbol
:
:
Apos
:
m_t
<<
"'"
;
break
;
case
DocSymbol
:
:
Quot
:
m_t
<<
"''"
;
break
;
case
DocSymbol
:
:
Uml
:
if
(
s
->
letter
()
==
'i'
)
m_t
<<
"
\\\"
{
\\
i}"
;
else
m_t
<<
"
\\\"
{"
<<
s
->
letter
()
<<
"}"
;
break
;
case
DocSymbol
:
:
Acute
:
if
(
s
->
letter
()
==
'i'
)
m_t
<<
"
\\
'{
\\
i}"
;
else
m_t
<<
"
\\
'{"
<<
s
->
letter
()
<<
"}"
;
break
;
case
DocSymbol
:
:
Grave
:
if
(
s
->
letter
()
==
'i'
)
m_t
<<
"
\\
`{
\\
i}"
;
else
m_t
<<
"
\\
`{"
<<
s
->
letter
()
<<
"}"
;
break
;
case
DocSymbol
:
:
Circ
:
if
(
s
->
letter
()
==
'i'
)
m_t
<<
"
\\
^{
\\
i}"
;
else
m_t
<<
"
\\
^{"
<<
s
->
letter
()
<<
"}"
;
break
;
case
DocSymbol
:
:
Tilde
:
m_t
<<
"
\\
~{"
<<
s
->
letter
()
<<
"}"
;
case
DocSymbol
:
:
Szlig
:
m_t
<<
"
\"
s"
;
break
;
case
DocSymbol
:
:
Cedil
:
m_t
<<
"
\\
c{"
<<
s
->
letter
()
<<
"}"
;
break
;
case
DocSymbol
:
:
Ring
:
m_t
<<
"
\\
"
<<
s
->
letter
()
<<
s
->
letter
();
break
;
case
DocSymbol
:
:
Nbsp
:
m_t
<<
"
\\
"
;
break
;
default
:
printf
(
"Error: unknown symbol found
\n
"
);
}
}
void
visit
(
DocURL
*
u
)
{
if
(
m_hide
)
return
;
if
(
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
href{"
<<
u
->
url
()
<<
"}"
;
}
m_t
<<
"{
\\
tt "
<<
u
->
url
()
<<
"}"
;
}
void
visit
(
DocLineBreak
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"
\\
par
\n
"
;
}
void
visit
(
DocHorRuler
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"
\n\n
"
;
}
void
visit
(
DocStyleChange
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
style
())
{
case
DocStyleChange
:
:
Bold
:
if
(
s
->
enable
())
m_t
<<
"{
\\
bf "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Italic
:
if
(
s
->
enable
())
m_t
<<
"{
\\
em "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Code
:
if
(
s
->
enable
())
m_t
<<
"{
\\
tt "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Subscript
:
if
(
s
->
enable
())
m_t
<<
"$_{
\\
mbox{"
;
else
m_t
<<
"}}$ "
;
break
;
case
DocStyleChange
:
:
Superscript
:
if
(
s
->
enable
())
m_t
<<
"$^{
\\
mbox{"
;
else
m_t
<<
"}}$ "
;
break
;
case
DocStyleChange
:
:
Center
:
if
(
s
->
enable
())
m_t
<<
"
\\
begin{center}"
;
else
m_t
<<
"
\\
end{center} "
;
break
;
case
DocStyleChange
:
:
Small
:
if
(
s
->
enable
())
m_t
<<
"
\\
footnotesize "
;
else
m_t
<<
"
\\
normalsize "
;
break
;
}
}
void
visit
(
DocVerbatim
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
type
())
{
case
DocVerbatim
:
:
Code
:
// fall though
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
parseCode
(
m_ci
,
s
->
context
(),
s
->
text
(),
FALSE
,
0
);
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
break
;
case
DocVerbatim
:
:
Verbatim
:
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
m_t
<<
s
->
text
();
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
break
;
case
DocVerbatim
:
:
HtmlOnly
:
/* nothing */
break
;
case
DocVerbatim
:
:
LatexOnly
:
m_t
<<
s
->
text
();
break
;
}
}
void
visit
(
DocAnchor
*
anc
)
{
if
(
m_hide
)
return
;
m_t
<<
"
\\
label{"
<<
anc
->
anchor
()
<<
"}"
<<
endl
;
if
(
!
anc
->
file
().
isEmpty
()
&&
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
hypertarget{"
<<
anc
->
file
()
<<
"_"
<<
anc
->
anchor
()
<<
"}{}"
<<
endl
;
}
}
void
visit
(
DocInclude
*
inc
)
{
if
(
m_hide
)
return
;
switch
(
inc
->
type
())
{
case
DocInclude
:
:
Include
:
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
parseCode
(
m_ci
,
inc
->
context
(),
inc
->
text
(),
FALSE
,
0
);
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
break
;
case
DocInclude
:
:
DontInclude
:
break
;
case
DocInclude
:
:
HtmlInclude
:
break
;
case
DocInclude
:
:
VerbInclude
:
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
m_t
<<
inc
->
text
();
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
break
;
}
}
void
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
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
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
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
}
else
{
m_t
<<
endl
;
}
}
void
visit
(
DocFormula
*
f
)
{
if
(
m_hide
)
return
;
m_t
<<
f
->
text
();
}
//--------------------------------------
//--------------------------------------
// visitor functions for compound nodes
// visitor functions for compound nodes
//--------------------------------------
//--------------------------------------
void
visitPre
(
DocAutoList
*
l
)
void
visitPre
(
DocAutoList
*
);
{
void
visitPost
(
DocAutoList
*
);
if
(
l
->
isEnumList
())
void
visitPre
(
DocAutoListItem
*
);
{
void
visitPost
(
DocAutoListItem
*
);
m_t
<<
"
\\
begin{enumerate}"
<<
endl
;
void
visitPre
(
DocPara
*
);
}
void
visitPost
(
DocPara
*
);
else
void
visitPre
(
DocRoot
*
);
{
void
visitPost
(
DocRoot
*
);
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
void
visitPre
(
DocSimpleSect
*
);
}
void
visitPost
(
DocSimpleSect
*
);
}
void
visitPre
(
DocTitle
*
);
void
visitPost
(
DocAutoList
*
l
)
void
visitPost
(
DocTitle
*
);
{
void
visitPre
(
DocSimpleList
*
);
if
(
l
->
isEnumList
())
void
visitPost
(
DocSimpleList
*
);
{
void
visitPre
(
DocSimpleListItem
*
);
m_t
<<
"
\\
end{enumerate}"
<<
endl
;
void
visitPost
(
DocSimpleListItem
*
);
}
void
visitPre
(
DocSection
*
s
);
else
void
visitPost
(
DocSection
*
);
{
void
visitPre
(
DocHtmlList
*
s
);
m_t
<<
"
\\
end{itemize}"
<<
endl
;
void
visitPost
(
DocHtmlList
*
s
);
}
void
visitPre
(
DocHtmlListItem
*
);
}
void
visitPost
(
DocHtmlListItem
*
);
void
visitPre
(
DocAutoListItem
*
)
void
visitPre
(
DocHtmlPre
*
);
{
void
visitPost
(
DocHtmlPre
*
);
m_t
<<
"
\\
item "
;
void
visitPre
(
DocHtmlDescList
*
);
}
void
visitPost
(
DocHtmlDescList
*
);
void
visitPost
(
DocAutoListItem
*
)
void
visitPre
(
DocHtmlDescTitle
*
);
{
void
visitPost
(
DocHtmlDescTitle
*
);
}
void
visitPre
(
DocHtmlDescData
*
);
void
visitPre
(
DocPara
*
)
void
visitPost
(
DocHtmlDescData
*
);
{
void
visitPre
(
DocHtmlTable
*
t
);
}
void
visitPost
(
DocHtmlTable
*
t
);
void
visitPost
(
DocPara
*
p
)
void
visitPre
(
DocHtmlCaption
*
);
{
void
visitPost
(
DocHtmlCaption
*
);
if
(
!
p
->
isLast
()
&&
// omit <p> for last paragraph
void
visitPre
(
DocHtmlRow
*
);
!
(
p
->
parent
()
&&
// and for parameter sections
void
visitPost
(
DocHtmlRow
*
)
;
p
->
parent
()
->
kind
()
==
DocNode
::
Kind_ParamSect
void
visitPre
(
DocHtmlCell
*
);
)
void
visitPost
(
DocHtmlCell
*
);
)
m_t
<<
endl
<<
endl
;
void
visitPre
(
DocIndexEntry
*
);
}
void
visitPost
(
DocIndexEntry
*
);
void
visitPre
(
DocRoot
*
)
void
visitPre
(
DocInternal
*
);
{
void
visitPost
(
DocInternal
*
);
}
void
visitPre
(
DocHRef
*
);
void
visitPost
(
DocRoot
*
)
void
visitPost
(
DocHRef
*
);
{
void
visitPre
(
DocHtmlHeader
*
);
}
void
visitPost
(
DocHtmlHeader
*
)
;
void
visitPre
(
DocSimpleSect
*
s
)
void
visitPre
(
DocImage
*
);
{
void
visitPost
(
DocImage
*
);
m_t
<<
"
\\
begin{Desc}
\n\\
item["
;
void
visitPre
(
DocDotFile
*
);
switch
(
s
->
type
())
void
visitPost
(
DocDotFile
*
);
{
void
visitPre
(
DocLink
*
lnk
);
case
DocSimpleSect
:
:
See
:
void
visitPost
(
DocLink
*
);
m_t
<<
theTranslator
->
trSeeAlso
();
break
;
void
visitPre
(
DocRef
*
ref
);
case
DocSimpleSect
:
:
Return
:
void
visitPost
(
DocRef
*
);
m_t
<<
theTranslator
->
trReturns
();
break
;
void
visitPre
(
DocSecRefItem
*
);
case
DocSimpleSect
:
:
Author
:
void
visitPost
(
DocSecRefItem
*
);
m_t
<<
theTranslator
->
trAuthor
(
TRUE
,
TRUE
);
break
;
void
visitPre
(
DocSecRefList
*
);
case
DocSimpleSect
:
:
Authors
:
void
visitPost
(
DocSecRefList
*
);
m_t
<<
theTranslator
->
trAuthor
(
TRUE
,
FALSE
);
break
;
void
visitPre
(
DocLanguage
*
);
case
DocSimpleSect
:
:
Version
:
void
visitPost
(
DocLanguage
*
);
m_t
<<
theTranslator
->
trVersion
();
break
;
void
visitPre
(
DocParamSect
*
);
case
DocSimpleSect
:
:
Since
:
void
visitPost
(
DocParamSect
*
);
m_t
<<
theTranslator
->
trSince
();
break
;
void
visitPre
(
DocParamList
*
);
case
DocSimpleSect
:
:
Date
:
void
visitPost
(
DocParamList
*
);
m_t
<<
theTranslator
->
trDate
();
break
;
void
visitPre
(
DocXRefItem
*
);
case
DocSimpleSect
:
:
Note
:
void
visitPost
(
DocXRefItem
*
);
m_t
<<
theTranslator
->
trNote
();
break
;
void
visitPre
(
DocInternalRef
*
);
case
DocSimpleSect
:
:
Warning
:
void
visitPost
(
DocInternalRef
*
);
m_t
<<
theTranslator
->
trWarning
();
break
;
void
visitPre
(
DocCopy
*
);
case
DocSimpleSect
:
:
Pre
:
void
visitPost
(
DocCopy
*
);
m_t
<<
theTranslator
->
trPrecondition
();
break
;
case
DocSimpleSect
:
:
Post
:
m_t
<<
theTranslator
->
trPostcondition
();
break
;
case
DocSimpleSect
:
:
Invar
:
m_t
<<
theTranslator
->
trInvariant
();
break
;
case
DocSimpleSect
:
:
Remark
:
m_t
<<
theTranslator
->
trRemarks
();
break
;
case
DocSimpleSect
:
:
Attention
:
m_t
<<
theTranslator
->
trAttention
();
break
;
case
DocSimpleSect
:
:
User
:
break
;
case
DocSimpleSect
:
:
Unknown
:
break
;
}
// special case 1: user defined title
if
(
s
->
type
()
!=
DocSimpleSect
::
User
)
{
m_t
<<
":]"
;
}
}
void
visitPost
(
DocSimpleSect
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
visitPre
(
DocTitle
*
)
{
}
void
visitPost
(
DocTitle
*
)
{
m_t
<<
"]"
;
}
void
visitPre
(
DocSimpleList
*
)
{
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
}
void
visitPost
(
DocSimpleList
*
)
{
m_t
<<
"
\\
end{itemize}"
<<
endl
;
}
void
visitPre
(
DocSimpleListItem
*
)
{
m_t
<<
"
\\
item "
;
}
void
visitPost
(
DocSimpleListItem
*
)
{
}
void
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{"
;
}
}
filter
(
s
->
title
());
m_t
<<
"}
\\
label{"
<<
s
->
anchor
()
<<
"}"
<<
endl
;
}
void
visitPost
(
DocSection
*
)
{
}
void
visitPre
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"
\\
begin{enumerate}"
<<
endl
;
else
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
}
void
visitPost
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"
\\
end{enumerate}"
<<
endl
;
else
m_t
<<
"
\\
end{itemize}"
<<
endl
;
}
void
visitPre
(
DocHtmlListItem
*
)
{
m_t
<<
"
\\
item "
;
}
void
visitPost
(
DocHtmlListItem
*
)
{
}
void
visitPre
(
DocHtmlPre
*
)
{
m_t
<<
"
\\
small
\\
begin{alltt}"
;
m_insidePre
=
TRUE
;
}
void
visitPost
(
DocHtmlPre
*
)
{
m_insidePre
=
FALSE
;
m_t
<<
"
\\
end{alltt}
\\
normalsize "
<<
endl
;
}
void
visitPre
(
DocHtmlDescList
*
)
{
m_t
<<
"
\\
begin{description}"
<<
endl
;
}
void
visitPost
(
DocHtmlDescList
*
)
{
m_t
<<
"
\\
end{description}"
<<
endl
;
}
void
visitPre
(
DocHtmlDescTitle
*
)
{
m_t
<<
"
\\
item["
;
}
void
visitPost
(
DocHtmlDescTitle
*
)
{
m_t
<<
"]"
;
}
void
visitPre
(
DocHtmlDescData
*
)
{
}
void
visitPost
(
DocHtmlDescData
*
)
{
}
void
visitPre
(
DocHtmlTable
*
t
)
{
if
(
t
->
hasCaption
())
{
m_t
<<
"
\\
begin{table}[h]"
;
}
m_t
<<
"
\\
begin{TabularC}{"
<<
t
->
numCols
()
<<
"}
\n\\
hline
\n
"
;
}
void
visitPost
(
DocHtmlTable
*
t
)
{
if
(
t
->
hasCaption
())
{
m_t
<<
"
\\
end{table}
\n
"
;
}
else
{
m_t
<<
"
\\\\\\
hline
\n\\
end{TabularC}
\n
"
;
}
}
void
visitPre
(
DocHtmlCaption
*
)
{
m_t
<<
"
\\\\\\
hline
\n\\
end{TabularC}
\n\\
centering
\n\\
caption{"
;
}
void
visitPost
(
DocHtmlCaption
*
)
{
m_t
<<
"}
\n
"
;
}
void
visitPre
(
DocHtmlRow
*
)
{
}
void
visitPost
(
DocHtmlRow
*
)
{
m_t
<<
"
\\\\\\
hline
\n
"
;
}
void
visitPre
(
DocHtmlCell
*
)
{
}
void
visitPost
(
DocHtmlCell
*
c
)
{
if
(
!
c
->
isLast
())
m_t
<<
"&"
;
}
void
visitPre
(
DocIndexEntry
*
)
{
m_hide
=
TRUE
;
}
void
visitPost
(
DocIndexEntry
*
)
{
m_hide
=
FALSE
;
}
void
visitPre
(
DocInternal
*
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
<<
"
\\
item["
<<
theTranslator
->
trForInternalUseOnly
()
<<
"]"
<<
endl
;
}
void
visitPost
(
DocInternal
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
visitPre
(
DocHRef
*
href
)
{
if
(
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
href{"
;
m_t
<<
href
->
url
();
m_t
<<
"}"
;
}
m_t
<<
"{
\\
tt "
;
}
void
visitPost
(
DocHRef
*
)
{
m_t
<<
"}"
;
}
void
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
;
}
}
else
{
switch
(
header
->
level
())
{
case
1
:
m_t
<<
"
\\
section{"
;
break
;
case
2
:
m_t
<<
"
\\
subsection{"
;
break
;
case
3
:
m_t
<<
"
\\
subsubsection{"
;
break
;
}
}
}
void
visitPost
(
DocHtmlHeader
*
)
{
m_t
<<
"}"
;
}
void
visitPre
(
DocImage
*
img
)
{
if
(
img
->
type
()
==
DocImage
::
Latex
)
{
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{"
;
}
}
else
// other format -> skip
{
m_hide
=
TRUE
;
}
}
void
visitPost
(
DocImage
*
img
)
{
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
;
}
}
void
visitPre
(
DocDotFile
*
df
)
{
QCString
baseName
=
df
->
file
();
int
i
;
if
((
i
=
baseName
.
findRev
(
'/'
))
!=-
1
)
{
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
<<
"}"
;
if
(
df
->
hasCaption
())
{
m_t
<<
"
\\
caption{"
;
}
}
void
visitPost
(
DocDotFile
*
df
)
{
m_t
<<
"}"
<<
endl
;
// end mbox or caption
if
(
df
->
hasCaption
())
{
m_t
<<
"
\\
end{center}"
<<
endl
;
m_t
<<
"
\\
end{figure}"
<<
endl
;
}
}
void
visitPre
(
DocLink
*
lnk
)
{
startLink
(
lnk
->
ref
(),
lnk
->
file
(),
lnk
->
anchor
());
}
void
visitPost
(
DocLink
*
)
{
endLink
();
}
void
visitPre
(
DocRef
*
ref
)
{
startLink
(
ref
->
ref
(),
ref
->
file
(),
ref
->
anchor
());
if
(
!
ref
->
hasLinkText
())
filter
(
ref
->
targetTitle
());
}
void
visitPost
(
DocRef
*
)
{
endLink
();
m_t
<<
" "
;
}
void
visitPre
(
DocSecRefItem
*
)
{
m_t
<<
"
\\
item
\\
contentsline{section}{"
;
}
void
visitPost
(
DocSecRefItem
*
ref
)
{
m_t
<<
"}{
\\
ref{"
<<
ref
->
anchor
()
<<
"}}{}"
<<
endl
;
}
void
visitPre
(
DocSecRefList
*
)
{
m_t
<<
"
\\
footnotesize"
<<
endl
;
m_t
<<
"
\\
begin{multicols}{2}"
<<
endl
;
m_t
<<
"
\\
begin{CompactList}"
<<
endl
;
}
void
visitPost
(
DocSecRefList
*
)
{
m_t
<<
"
\\
end{CompactList}"
<<
endl
;
m_t
<<
"
\\
end{multicols}"
<<
endl
;
m_t
<<
"
\\
normalsize"
<<
endl
;
}
void
visitPre
(
DocLanguage
*
)
{
}
void
visitPost
(
DocLanguage
*
)
{
}
void
visitPre
(
DocParamSect
*
s
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
;
m_t
<<
"
\\
item["
;
switch
(
s
->
type
())
{
case
DocParamSect
:
:
Param
:
m_t
<<
theTranslator
->
trParameters
();
break
;
case
DocParamSect
:
:
RetVal
:
m_t
<<
theTranslator
->
trReturnValues
();
break
;
case
DocParamSect
:
:
Exception
:
m_t
<<
theTranslator
->
trExceptions
();
break
;
default
:
ASSERT
(
0
);
}
m_t
<<
":]"
<<
endl
;
m_t
<<
"
\\
begin{description}"
<<
endl
;
}
void
visitPost
(
DocParamSect
*
)
{
m_t
<<
"
\\
end{description}"
<<
endl
;
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
visitPre
(
DocParamList
*
pl
)
{
m_t
<<
"
\\
item[{
\\
em "
;
QStrListIterator
li
(
pl
->
parameters
());
const
char
*
s
;
bool
first
=
TRUE
;
for
(
li
.
toFirst
();(
s
=
li
.
current
());
++
li
)
{
if
(
!
first
)
m_t
<<
","
;
else
first
=
FALSE
;
m_t
<<
s
;
}
m_t
<<
"}]"
;
}
void
visitPost
(
DocParamList
*
)
{
}
void
visitPre
(
DocXRefItem
*
x
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
;
m_t
<<
"
\\
item["
;
if
(
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
hyperlink{"
<<
x
->
file
()
<<
"_"
<<
x
->
anchor
()
<<
"}{"
;
}
else
{
m_t
<<
"{
\\
bf "
;
}
filter
(
x
->
title
());
m_t
<<
"}]"
;
}
void
visitPost
(
DocXRefItem
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
visitPre
(
DocInternalRef
*
ref
)
{
startLink
(
0
,
ref
->
file
(),
ref
->
anchor
());
}
void
visitPost
(
DocInternalRef
*
)
{
endLink
();
m_t
<<
" "
;
}
void
visitPre
(
DocCopy
*
)
{
}
void
visitPost
(
DocCopy
*
)
{
}
private
:
private
:
...
...
src/latexgen.cpp
View file @
0a37457c
...
@@ -29,6 +29,7 @@
...
@@ -29,6 +29,7 @@
#include "version.h"
#include "version.h"
#include "dot.h"
#include "dot.h"
#include "page.h"
#include "page.h"
#include "docparser.h"
#include "latexdocvisitor.h"
#include "latexdocvisitor.h"
//static QCString filterTitle(const char *s)
//static QCString filterTitle(const char *s)
...
...
src/libdoxygen.pro.in
View file @
0a37457c
...
@@ -71,7 +71,9 @@ HEADERS = bufstr.h \
...
@@ -71,7 +71,9 @@ HEADERS = bufstr.h \
printdocvisitor.h \
printdocvisitor.h \
qtbc.h \
qtbc.h \
reflist.h \
reflist.h \
rtfdocvisitor.h \
rtfgen.h \
rtfgen.h \
rtfstyle.h \
scanner.h \
scanner.h \
searchindex.h \
searchindex.h \
section.h \
section.h \
...
@@ -162,7 +164,9 @@ SOURCES = ce_lex.cpp \
...
@@ -162,7 +164,9 @@ SOURCES = ce_lex.cpp \
pngenc.cpp \
pngenc.cpp \
pre.cpp \
pre.cpp \
reflist.cpp \
reflist.cpp \
rtfdocvisitor.cpp \
rtfgen.cpp \
rtfgen.cpp \
rtfstyle.cpp \
scanner.cpp \
scanner.cpp \
searchindex.cpp \
searchindex.cpp \
suffixtree.cpp \
suffixtree.cpp \
...
...
src/memberdef.cpp
View file @
0a37457c
...
@@ -552,7 +552,14 @@ ClassDef *MemberDef::getClassDefOfAnonymousType()
...
@@ -552,7 +552,14 @@ ClassDef *MemberDef::getClassDefOfAnonymousType()
*/
*/
bool
MemberDef
::
isBriefSectionVisible
()
const
bool
MemberDef
::
isBriefSectionVisible
()
const
{
{
bool
hasDocs
=
hasDocumentation
();
//printf("Member %s grpId=%d docs=%s file=%s args=%s\n",
// name().data(),
// grpId,grpId==-1?"<none>":Doxygen::memberDocDict[grpId]->data(),
// getFileDef()->name().data(),
// argsString());
bool
hasDocs
=
hasDocumentation
()
||
// part of a documented member group
(
grpId
!=-
1
&&
!
Doxygen
::
memberDocDict
[
grpId
]
->
isEmpty
());
// only include static members with file/namespace scope if
// only include static members with file/namespace scope if
// explicitly enabled in the config file
// explicitly enabled in the config file
...
@@ -609,6 +616,12 @@ bool MemberDef::isBriefSectionVisible() const
...
@@ -609,6 +616,12 @@ bool MemberDef::isBriefSectionVisible() const
!
hasDocs
!
hasDocs
);
);
//printf("visibleIfStatic=%d visibleIfDocumented=%d visibleIfEnabled=%d"
// "visibleIfPrivate=%d visibleIfDocVirtual=%d visibltIfNotDefaultCDTor=%d "
// "visibleIfFriendCompound=%d\n",visibleIfStatic,visibleIfDocumented,
// visibleIfEnabled,visibleIfPrivate,visibleIfDocVirtual,visibleIfNotDefaultCDTor,
// visibleIfFriendCompound);
bool
visible
=
visibleIfStatic
&&
visibleIfDocumented
&&
bool
visible
=
visibleIfStatic
&&
visibleIfDocumented
&&
visibleIfEnabled
&&
visibleIfPrivate
&&
visibleIfEnabled
&&
visibleIfPrivate
&&
visibleIfDocVirtual
&&
visibleIfNotDefaultCDTor
&&
visibleIfDocVirtual
&&
visibleIfNotDefaultCDTor
&&
...
...
src/memberdef.h
View file @
0a37457c
...
@@ -245,6 +245,12 @@ class MemberDef : public Definition
...
@@ -245,6 +245,12 @@ class MemberDef : public Definition
}
}
void
setBodyMember
(
MemberDef
*
md
)
{
bodyMemb
=
md
;
}
void
setBodyMember
(
MemberDef
*
md
)
{
bodyMemb
=
md
;
}
void
setDocsForDefinition
(
bool
b
)
{
docsForDefinition
=
b
;
}
void
setDocsForDefinition
(
bool
b
)
{
docsForDefinition
=
b
;
}
// declaration <-> definition relation
void
setMemberDefinition
(
MemberDef
*
md
)
{
memDef
=
md
;
}
void
setMemberDeclaration
(
MemberDef
*
md
)
{
memDec
=
md
;
}
MemberDef
*
memberDefinition
()
const
{
return
memDef
;
}
MemberDef
*
memberDeclaration
()
const
{
return
memDec
;
}
bool
visited
;
bool
visited
;
...
@@ -270,8 +276,6 @@ class MemberDef : public Definition
...
@@ -270,8 +276,6 @@ class MemberDef : public Definition
QCString
init
;
// initializer
QCString
init
;
// initializer
int
initLines
;
// number of lines in the initializer
int
initLines
;
// number of lines in the initializer
QCString
decl
;
// member declaration in class
QCString
decl
;
// member declaration in class
//QCString declFile; // file where the declaration was found
//int declLine; // line where the declaration was found
QCString
def
;
// member definition in code (fully qualified name)
QCString
def
;
// member definition in code (fully qualified name)
QCString
anc
;
// HTML anchor name
QCString
anc
;
// HTML anchor name
MemberDef
*
bodyMemb
;
// Member containing the definition
MemberDef
*
bodyMemb
;
// Member containing the definition
...
@@ -281,7 +285,6 @@ class MemberDef : public Definition
...
@@ -281,7 +285,6 @@ class MemberDef : public Definition
bool
stat
;
// is it a static function?
bool
stat
;
// is it a static function?
int
memSpec
;
// The specifiers present for this member
int
memSpec
;
// The specifiers present for this member
MemberType
mtype
;
// returns the kind of member
MemberType
mtype
;
// returns the kind of member
//bool eUsed; // is the enumerate already placed in a list
bool
proto
;
// is it a prototype;
bool
proto
;
// is it a prototype;
bool
docEnumValues
;
// is an enum with documented enum values.
bool
docEnumValues
;
// is an enum with documented enum values.
bool
annScope
;
// member is part of an annoymous scope
bool
annScope
;
// member is part of an annoymous scope
...
...
src/page.h
View file @
0a37457c
...
@@ -25,7 +25,8 @@ class PageInfo
...
@@ -25,7 +25,8 @@ class PageInfo
public
:
public
:
PageInfo
(
const
char
*
f
,
int
l
,
const
char
*
n
,
const
char
*
d
,
const
char
*
t
)
:
PageInfo
(
const
char
*
f
,
int
l
,
const
char
*
n
,
const
char
*
d
,
const
char
*
t
)
:
defFileName
(
f
),
defLine
(
l
),
name
(
n
),
defFileName
(
f
),
defLine
(
l
),
name
(
n
),
doc
(
d
),
title
(
t
),
sectionDict
(
0
),
specialListItems
(
0
),
m_inGroup
(
0
)
{}
doc
(
d
),
title
(
t
),
context
(
0
),
sectionDict
(
0
),
specialListItems
(
0
),
m_inGroup
(
0
)
{}
// where the page definition was found
// where the page definition was found
QCString
defFileName
;
QCString
defFileName
;
...
@@ -40,6 +41,9 @@ class PageInfo
...
@@ -40,6 +41,9 @@ class PageInfo
QCString
reference
;
QCString
reference
;
QCString
fileName
;
QCString
fileName
;
// class, file or namespace in which the page was found
Definition
*
context
;
// functions to get a uniform interface with Definitions
// functions to get a uniform interface with Definitions
QCString
getOutputFileBase
()
const
{
return
fileName
;
}
QCString
getOutputFileBase
()
const
{
return
fileName
;
}
bool
isReference
()
const
{
return
!
reference
.
isEmpty
();
}
bool
isReference
()
const
{
return
!
reference
.
isEmpty
();
}
...
...
src/rtfdocvisitor.cpp
0 → 100644
View file @
0a37457c
/******************************************************************************
*
*
*
*
* 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 "rtfdocvisitor.h"
#include "docparser.h"
#include "language.h"
#include "doxygen.h"
#include "outputgen.h"
#include "code.h"
#include "dot.h"
#include "util.h"
#include "rtfstyle.h"
RTFDocVisitor
::
RTFDocVisitor
(
QTextStream
&
t
,
BaseCodeDocInterface
&
ci
)
:
m_t
(
t
),
m_ci
(
ci
),
m_insidePre
(
FALSE
),
m_hide
(
FALSE
),
m_indentLevel
(
0
)
{
}
QCString
RTFDocVisitor
::
getStyle
(
const
char
*
name
)
{
QCString
n
;
n
.
sprintf
(
"%s%d"
,
name
,
m_indentLevel
);
StyleData
*
sd
=
rtf_Style
[
n
];
ASSERT
(
sd
!=
0
);
return
sd
->
reference
;
}
//--------------------------------------
// visitor functions for leaf nodes
//--------------------------------------
void
RTFDocVisitor
::
visit
(
DocWord
*
w
)
{
if
(
m_hide
)
return
;
filter
(
w
->
word
());
}
void
RTFDocVisitor
::
visit
(
DocLinkedWord
*
w
)
{
if
(
m_hide
)
return
;
startLink
(
w
->
ref
(),
w
->
file
(),
w
->
anchor
());
filter
(
w
->
word
());
endLink
(
w
->
ref
());
}
void
RTFDocVisitor
::
visit
(
DocWhiteSpace
*
w
)
{
if
(
m_hide
)
return
;
if
(
m_insidePre
)
{
m_t
<<
w
->
chars
();
}
else
{
m_t
<<
" "
;
}
}
void
RTFDocVisitor
::
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
<<
"
\251
"
;
break
;
case
DocSymbol
:
:
Apos
:
m_t
<<
"'"
;
break
;
case
DocSymbol
:
:
Quot
:
m_t
<<
"
\"
"
;
break
;
case
DocSymbol
:
:
Uml
:
switch
(
s
->
letter
())
{
case
'A'
:
m_t
<<
'\304'
;
break
;
case
'E'
:
m_t
<<
'\313'
;
break
;
case
'I'
:
m_t
<<
'\317'
;
break
;
case
'O'
:
m_t
<<
'\326'
;
break
;
case
'U'
:
m_t
<<
'\334'
;
break
;
case
'Y'
:
m_t
<<
'Y'
;
break
;
case
'a'
:
m_t
<<
'\344'
;
break
;
case
'e'
:
m_t
<<
'\353'
;
break
;
case
'i'
:
m_t
<<
'\357'
;
break
;
case
'o'
:
m_t
<<
'\366'
;
break
;
case
'u'
:
m_t
<<
'\374'
;
break
;
case
'y'
:
m_t
<<
'\377'
;
break
;
default
:
m_t
<<
'?'
;
break
;
}
break
;
case
DocSymbol
:
:
Acute
:
switch
(
s
->
letter
())
{
case
'A'
:
m_t
<<
'\301'
;
break
;
case
'E'
:
m_t
<<
'\311'
;
break
;
case
'I'
:
m_t
<<
'\315'
;
break
;
case
'O'
:
m_t
<<
'\323'
;
break
;
case
'U'
:
m_t
<<
'\332'
;
break
;
case
'Y'
:
m_t
<<
'\335'
;
break
;
case
'a'
:
m_t
<<
'\341'
;
break
;
case
'e'
:
m_t
<<
'\351'
;
break
;
case
'i'
:
m_t
<<
'\355'
;
break
;
case
'o'
:
m_t
<<
'\363'
;
break
;
case
'u'
:
m_t
<<
'\372'
;
break
;
case
'y'
:
m_t
<<
'\375'
;
break
;
default
:
m_t
<<
'?'
;
break
;
}
break
;
case
DocSymbol
:
:
Grave
:
switch
(
s
->
letter
())
{
case
'A'
:
m_t
<<
'\300'
;
break
;
case
'E'
:
m_t
<<
'\310'
;
break
;
case
'I'
:
m_t
<<
'\314'
;
break
;
case
'O'
:
m_t
<<
'\322'
;
break
;
case
'U'
:
m_t
<<
'\331'
;
break
;
case
'a'
:
m_t
<<
'\340'
;
break
;
case
'e'
:
m_t
<<
'\350'
;
break
;
case
'i'
:
m_t
<<
'\354'
;
break
;
case
'o'
:
m_t
<<
'\362'
;
break
;
case
'u'
:
m_t
<<
'\371'
;
break
;
default
:
m_t
<<
'?'
;
break
;
}
break
;
case
DocSymbol
:
:
Circ
:
switch
(
s
->
letter
())
{
case
'A'
:
m_t
<<
'\302'
;
break
;
case
'E'
:
m_t
<<
'\312'
;
break
;
case
'I'
:
m_t
<<
'\316'
;
break
;
case
'O'
:
m_t
<<
'\324'
;
break
;
case
'U'
:
m_t
<<
'\333'
;
break
;
case
'a'
:
m_t
<<
'\342'
;
break
;
case
'e'
:
m_t
<<
'\352'
;
break
;
case
'i'
:
m_t
<<
'\356'
;
break
;
case
'o'
:
m_t
<<
'\364'
;
break
;
case
'u'
:
m_t
<<
'\373'
;
break
;
default
:
m_t
<<
'?'
;
break
;
}
break
;
case
DocSymbol
:
:
Tilde
:
switch
(
s
->
letter
())
{
case
'A'
:
m_t
<<
'\303'
;
break
;
case
'N'
:
m_t
<<
'\321'
;
break
;
case
'O'
:
m_t
<<
'\325'
;
break
;
case
'a'
:
m_t
<<
'\343'
;
break
;
case
'n'
:
m_t
<<
'\361'
;
break
;
case
'o'
:
m_t
<<
'\365'
;
break
;
default
:
m_t
<<
'?'
;
break
;
}
break
;
case
DocSymbol
:
:
Cedil
:
switch
(
s
->
letter
())
{
case
'C'
:
m_t
<<
'\307'
;
break
;
case
'c'
:
m_t
<<
'\347'
;
break
;
default
:
m_t
<<
'?'
;
break
;
}
break
;
case
DocSymbol
:
:
Ring
:
switch
(
s
->
letter
())
{
case
'A'
:
m_t
<<
'\305'
;
break
;
case
'a'
:
m_t
<<
'\345'
;
break
;
default
:
m_t
<<
'?'
;
break
;
}
break
;
case
DocSymbol
:
:
Szlig
:
m_t
<<
"
\337
"
;
break
;
case
DocSymbol
:
:
Nbsp
:
m_t
<<
"
\\
~ "
;
break
;
default
:
printf
(
"Error: unknown symbol found
\n
"
);
}
}
void
RTFDocVisitor
::
visit
(
DocURL
*
u
)
{
if
(
m_hide
)
return
;
if
(
Config_getBool
(
"RTF_HYPERLINKS"
))
{
m_t
<<
"{
\\
field {
\\
*
\\
fldinst { HYPERLINK
\\\\
l
\"
"
;
m_t
<<
u
->
url
();
m_t
<<
"
\"
}{}"
;
m_t
<<
"}{
\\
fldrslt {
\\
cs37
\\
ul
\\
cf2 "
;
filter
(
u
->
url
());
m_t
<<
"}}}"
<<
endl
;
}
else
{
m_t
<<
"{
\\
f2 "
;
filter
(
u
->
url
());
m_t
<<
"}"
;
}
}
void
RTFDocVisitor
::
visit
(
DocLineBreak
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"
\\
par
\n
"
;
}
void
RTFDocVisitor
::
visit
(
DocHorRuler
*
)
{
if
(
m_hide
)
return
;
m_t
<<
"{
\\
pard
\\
widctlpar
\\
brdrb
\\
brdrs
\\
brdrw5
\\
brsp20
\\
adjustright
\\
par}"
<<
endl
;
}
void
RTFDocVisitor
::
visit
(
DocStyleChange
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
style
())
{
case
DocStyleChange
:
:
Bold
:
if
(
s
->
enable
())
m_t
<<
"{
\\
b "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Italic
:
if
(
s
->
enable
())
m_t
<<
"{
\\
i "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Code
:
if
(
s
->
enable
())
m_t
<<
"{
\\
f2 "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Subscript
:
if
(
s
->
enable
())
m_t
<<
"{
\\
sub "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Superscript
:
if
(
s
->
enable
())
m_t
<<
"{
\\
super "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Center
:
if
(
s
->
enable
())
m_t
<<
"{
\\
qc "
;
else
m_t
<<
"} "
;
break
;
case
DocStyleChange
:
:
Small
:
if
(
s
->
enable
())
m_t
<<
"{
\\
sub "
;
else
m_t
<<
"} "
;
break
;
}
}
void
RTFDocVisitor
::
visit
(
DocVerbatim
*
s
)
{
if
(
m_hide
)
return
;
switch
(
s
->
type
())
{
case
DocVerbatim
:
:
Code
:
// fall though
m_t
<<
"{"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"CodeExample"
);
parseCode
(
m_ci
,
s
->
context
(),
s
->
text
(),
FALSE
,
0
);
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"}"
<<
endl
;
break
;
case
DocVerbatim
:
:
Verbatim
:
m_t
<<
"{"
<<
endl
;
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
rtf_Style_Reset
<<
getStyle
(
"CodeExample"
);
m_t
<<
s
->
text
();
m_t
<<
"
\\
par"
<<
endl
;
m_t
<<
"}"
<<
endl
;
break
;
case
DocVerbatim
:
:
HtmlOnly
:
/* nothing */
break
;
case
DocVerbatim
:
:
LatexOnly
:
/* nothing */
break
;
}
}
void
RTFDocVisitor
::
visit
(
DocAnchor
*
anc
)
{
if
(
m_hide
)
return
;
m_t
<<
"
\\
label{"
<<
anc
->
anchor
()
<<
"}"
<<
endl
;
if
(
!
anc
->
file
().
isEmpty
()
&&
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
hypertarget{"
<<
anc
->
file
()
<<
"_"
<<
anc
->
anchor
()
<<
"}{}"
<<
endl
;
}
}
void
RTFDocVisitor
::
visit
(
DocInclude
*
inc
)
{
if
(
m_hide
)
return
;
switch
(
inc
->
type
())
{
case
DocInclude
:
:
Include
:
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
parseCode
(
m_ci
,
inc
->
context
(),
inc
->
text
(),
FALSE
,
0
);
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
break
;
case
DocInclude
:
:
DontInclude
:
break
;
case
DocInclude
:
:
HtmlInclude
:
break
;
case
DocInclude
:
:
VerbInclude
:
m_t
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
m_t
<<
inc
->
text
();
m_t
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
break
;
}
}
void
RTFDocVisitor
::
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
<<
"
\n\n\\
footnotesize
\\
begin{verbatim}"
;
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
<<
"
\\
end{verbatim}
\\
normalsize"
<<
endl
;
}
else
{
m_t
<<
endl
;
}
}
void
RTFDocVisitor
::
visit
(
DocFormula
*
f
)
{
if
(
m_hide
)
return
;
m_t
<<
f
->
text
();
}
//--------------------------------------
// visitor functions for compound nodes
//--------------------------------------
void
RTFDocVisitor
::
visitPre
(
DocAutoList
*
l
)
{
if
(
l
->
isEnumList
())
{
m_t
<<
"
\\
begin{enumerate}"
<<
endl
;
}
else
{
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
}
}
void
RTFDocVisitor
::
visitPost
(
DocAutoList
*
l
)
{
if
(
l
->
isEnumList
())
{
m_t
<<
"
\\
end{enumerate}"
<<
endl
;
}
else
{
m_t
<<
"
\\
end{itemize}"
<<
endl
;
}
}
void
RTFDocVisitor
::
visitPre
(
DocAutoListItem
*
)
{
m_t
<<
"
\\
item "
;
}
void
RTFDocVisitor
::
visitPost
(
DocAutoListItem
*
)
{
}
void
RTFDocVisitor
::
visitPre
(
DocPara
*
)
{
}
void
RTFDocVisitor
::
visitPost
(
DocPara
*
p
)
{
if
(
!
p
->
isLast
()
&&
// omit <p> for last paragraph
!
(
p
->
parent
()
&&
// and for parameter sections
p
->
parent
()
->
kind
()
==
DocNode
::
Kind_ParamSect
)
)
m_t
<<
endl
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocRoot
*
)
{
}
void
RTFDocVisitor
::
visitPost
(
DocRoot
*
)
{
}
void
RTFDocVisitor
::
visitPre
(
DocSimpleSect
*
s
)
{
m_t
<<
"
\\
begin{Desc}
\n\\
item["
;
switch
(
s
->
type
())
{
case
DocSimpleSect
:
:
See
:
m_t
<<
theTranslator
->
trSeeAlso
();
break
;
case
DocSimpleSect
:
:
Return
:
m_t
<<
theTranslator
->
trReturns
();
break
;
case
DocSimpleSect
:
:
Author
:
m_t
<<
theTranslator
->
trAuthor
(
TRUE
,
TRUE
);
break
;
case
DocSimpleSect
:
:
Authors
:
m_t
<<
theTranslator
->
trAuthor
(
TRUE
,
FALSE
);
break
;
case
DocSimpleSect
:
:
Version
:
m_t
<<
theTranslator
->
trVersion
();
break
;
case
DocSimpleSect
:
:
Since
:
m_t
<<
theTranslator
->
trSince
();
break
;
case
DocSimpleSect
:
:
Date
:
m_t
<<
theTranslator
->
trDate
();
break
;
case
DocSimpleSect
:
:
Note
:
m_t
<<
theTranslator
->
trNote
();
break
;
case
DocSimpleSect
:
:
Warning
:
m_t
<<
theTranslator
->
trWarning
();
break
;
case
DocSimpleSect
:
:
Pre
:
m_t
<<
theTranslator
->
trPrecondition
();
break
;
case
DocSimpleSect
:
:
Post
:
m_t
<<
theTranslator
->
trPostcondition
();
break
;
case
DocSimpleSect
:
:
Invar
:
m_t
<<
theTranslator
->
trInvariant
();
break
;
case
DocSimpleSect
:
:
Remark
:
m_t
<<
theTranslator
->
trRemarks
();
break
;
case
DocSimpleSect
:
:
Attention
:
m_t
<<
theTranslator
->
trAttention
();
break
;
case
DocSimpleSect
:
:
User
:
break
;
case
DocSimpleSect
:
:
Unknown
:
break
;
}
// special case 1: user defined title
if
(
s
->
type
()
!=
DocSimpleSect
::
User
)
{
m_t
<<
":]"
;
}
}
void
RTFDocVisitor
::
visitPost
(
DocSimpleSect
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocTitle
*
)
{
}
void
RTFDocVisitor
::
visitPost
(
DocTitle
*
)
{
m_t
<<
"]"
;
}
void
RTFDocVisitor
::
visitPre
(
DocSimpleList
*
)
{
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPost
(
DocSimpleList
*
)
{
m_t
<<
"
\\
end{itemize}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocSimpleListItem
*
)
{
m_t
<<
"
\\
item "
;
}
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{"
;
}
}
filter
(
s
->
title
());
m_t
<<
"}
\\
label{"
<<
s
->
anchor
()
<<
"}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPost
(
DocSection
*
)
{
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"
\\
begin{enumerate}"
<<
endl
;
else
m_t
<<
"
\\
begin{itemize}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlList
*
s
)
{
if
(
s
->
type
()
==
DocHtmlList
::
Ordered
)
m_t
<<
"
\\
end{enumerate}"
<<
endl
;
else
m_t
<<
"
\\
end{itemize}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlListItem
*
)
{
m_t
<<
"
\\
item "
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlListItem
*
)
{
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlPre
*
)
{
m_t
<<
"
\\
small
\\
begin{alltt}"
;
m_insidePre
=
TRUE
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlPre
*
)
{
m_insidePre
=
FALSE
;
m_t
<<
"
\\
end{alltt}
\\
normalsize "
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlDescList
*
)
{
m_t
<<
"
\\
begin{description}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlDescList
*
)
{
m_t
<<
"
\\
end{description}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlDescTitle
*
)
{
m_t
<<
"
\\
item["
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlDescTitle
*
)
{
m_t
<<
"]"
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlDescData
*
)
{
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlDescData
*
)
{
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlTable
*
t
)
{
if
(
t
->
hasCaption
())
{
m_t
<<
"
\\
begin{table}[h]"
;
}
m_t
<<
"
\\
begin{TabularC}{"
<<
t
->
numCols
()
<<
"}
\n\\
hline
\n
"
;
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlTable
*
t
)
{
if
(
t
->
hasCaption
())
{
m_t
<<
"
\\
end{table}
\n
"
;
}
else
{
m_t
<<
"
\\\\\\
hline
\n\\
end{TabularC}
\n
"
;
}
}
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
::
visitPost
(
DocHtmlRow
*
)
{
m_t
<<
"
\\\\\\
hline
\n
"
;
}
void
RTFDocVisitor
::
visitPre
(
DocHtmlCell
*
)
{
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlCell
*
c
)
{
if
(
!
c
->
isLast
())
m_t
<<
"&"
;
}
void
RTFDocVisitor
::
visitPre
(
DocIndexEntry
*
)
{
m_hide
=
TRUE
;
}
void
RTFDocVisitor
::
visitPost
(
DocIndexEntry
*
)
{
m_hide
=
FALSE
;
}
void
RTFDocVisitor
::
visitPre
(
DocInternal
*
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
<<
"
\\
item["
<<
theTranslator
->
trForInternalUseOnly
()
<<
"]"
<<
endl
;
}
void
RTFDocVisitor
::
visitPost
(
DocInternal
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocHRef
*
href
)
{
if
(
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
href{"
;
m_t
<<
href
->
url
();
m_t
<<
"}"
;
}
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
;
}
}
else
{
switch
(
header
->
level
())
{
case
1
:
m_t
<<
"
\\
section{"
;
break
;
case
2
:
m_t
<<
"
\\
subsection{"
;
break
;
case
3
:
m_t
<<
"
\\
subsubsection{"
;
break
;
}
}
}
void
RTFDocVisitor
::
visitPost
(
DocHtmlHeader
*
)
{
m_t
<<
"}"
;
}
void
RTFDocVisitor
::
visitPre
(
DocImage
*
img
)
{
if
(
img
->
type
()
==
DocImage
::
Latex
)
{
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{"
;
}
}
else
// other format -> skip
{
m_hide
=
TRUE
;
}
}
void
RTFDocVisitor
::
visitPost
(
DocImage
*
img
)
{
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
;
}
}
void
RTFDocVisitor
::
visitPre
(
DocDotFile
*
df
)
{
QCString
baseName
=
df
->
file
();
int
i
;
if
((
i
=
baseName
.
findRev
(
'/'
))
!=-
1
)
{
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
<<
"}"
;
if
(
df
->
hasCaption
())
{
m_t
<<
"
\\
caption{"
;
}
}
void
RTFDocVisitor
::
visitPost
(
DocDotFile
*
df
)
{
m_t
<<
"}"
<<
endl
;
// end mbox or caption
if
(
df
->
hasCaption
())
{
m_t
<<
"
\\
end{center}"
<<
endl
;
m_t
<<
"
\\
end{figure}"
<<
endl
;
}
}
void
RTFDocVisitor
::
visitPre
(
DocLink
*
lnk
)
{
startLink
(
lnk
->
ref
(),
lnk
->
file
(),
lnk
->
anchor
());
}
void
RTFDocVisitor
::
visitPost
(
DocLink
*
lnk
)
{
endLink
(
lnk
->
ref
());
}
void
RTFDocVisitor
::
visitPre
(
DocRef
*
ref
)
{
startLink
(
ref
->
ref
(),
ref
->
file
(),
ref
->
anchor
());
if
(
!
ref
->
hasLinkText
())
filter
(
ref
->
targetTitle
());
}
void
RTFDocVisitor
::
visitPost
(
DocRef
*
ref
)
{
endLink
(
ref
->
ref
());
m_t
<<
" "
;
}
void
RTFDocVisitor
::
visitPre
(
DocSecRefItem
*
)
{
m_t
<<
"
\\
item
\\
contentsline{section}{"
;
}
void
RTFDocVisitor
::
visitPost
(
DocSecRefItem
*
ref
)
{
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
;
}
void
RTFDocVisitor
::
visitPost
(
DocSecRefList
*
)
{
m_t
<<
"
\\
end{CompactList}"
<<
endl
;
m_t
<<
"
\\
end{multicols}"
<<
endl
;
m_t
<<
"
\\
normalsize"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocLanguage
*
)
{
}
void
RTFDocVisitor
::
visitPost
(
DocLanguage
*
)
{
}
void
RTFDocVisitor
::
visitPre
(
DocParamSect
*
s
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
;
m_t
<<
"
\\
item["
;
switch
(
s
->
type
())
{
case
DocParamSect
:
:
Param
:
m_t
<<
theTranslator
->
trParameters
();
break
;
case
DocParamSect
:
:
RetVal
:
m_t
<<
theTranslator
->
trReturnValues
();
break
;
case
DocParamSect
:
:
Exception
:
m_t
<<
theTranslator
->
trExceptions
();
break
;
default
:
ASSERT
(
0
);
}
m_t
<<
":]"
<<
endl
;
m_t
<<
"
\\
begin{description}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPost
(
DocParamSect
*
)
{
m_t
<<
"
\\
end{description}"
<<
endl
;
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocParamList
*
pl
)
{
m_t
<<
"
\\
item[{
\\
em "
;
QStrListIterator
li
(
pl
->
parameters
());
const
char
*
s
;
bool
first
=
TRUE
;
for
(
li
.
toFirst
();(
s
=
li
.
current
());
++
li
)
{
if
(
!
first
)
m_t
<<
","
;
else
first
=
FALSE
;
m_t
<<
s
;
}
m_t
<<
"}]"
;
}
void
RTFDocVisitor
::
visitPost
(
DocParamList
*
)
{
}
void
RTFDocVisitor
::
visitPre
(
DocXRefItem
*
x
)
{
m_t
<<
"
\\
begin{Desc}"
<<
endl
;
m_t
<<
"
\\
item["
;
if
(
Config_getBool
(
"PDF_HYPERLINKS"
))
{
m_t
<<
"
\\
hyperlink{"
<<
x
->
file
()
<<
"_"
<<
x
->
anchor
()
<<
"}{"
;
}
else
{
m_t
<<
"{
\\
bf "
;
}
filter
(
x
->
title
());
m_t
<<
"}]"
;
}
void
RTFDocVisitor
::
visitPost
(
DocXRefItem
*
)
{
m_t
<<
"
\\
end{Desc}"
<<
endl
;
}
void
RTFDocVisitor
::
visitPre
(
DocInternalRef
*
ref
)
{
startLink
(
""
,
ref
->
file
(),
ref
->
anchor
());
}
void
RTFDocVisitor
::
visitPost
(
DocInternalRef
*
)
{
endLink
(
""
);
m_t
<<
" "
;
}
void
RTFDocVisitor
::
visitPre
(
DocCopy
*
)
{
}
void
RTFDocVisitor
::
visitPost
(
DocCopy
*
)
{
}
static
char
*
getMultiByte
(
int
c
)
{
static
char
s
[
10
];
sprintf
(
s
,
"
\\
'%X"
,
c
);
return
s
;
}
void
RTFDocVisitor
::
filter
(
const
char
*
str
)
{
if
(
str
)
{
const
unsigned
char
*
p
=
(
const
unsigned
char
*
)
str
;
unsigned
char
c
;
unsigned
char
pc
=
'\0'
;
while
(
*
p
)
{
static
bool
MultiByte
=
FALSE
;
c
=*
p
++
;
if
(
MultiByte
)
{
m_t
<<
getMultiByte
(
c
);
MultiByte
=
FALSE
;
continue
;
}
if
(
c
>=
0x80
)
{
MultiByte
=
TRUE
;
m_t
<<
getMultiByte
(
c
);
continue
;
}
switch
(
c
)
{
case
'{'
:
m_t
<<
"
\\
{"
;
break
;
case
'}'
:
m_t
<<
"
\\
}"
;
break
;
case
'\\'
:
m_t
<<
"
\\\\
"
;
break
;
default
:
m_t
<<
(
char
)
c
;
}
pc
=
c
;
}
}
}
void
RTFDocVisitor
::
startLink
(
const
QCString
&
ref
,
const
QCString
&
file
,
const
QCString
&
anchor
)
{
if
(
ref
.
isEmpty
()
&&
Config_getBool
(
"RTF_HYPERLINKS"
))
{
QCString
refName
;
if
(
!
file
.
isEmpty
())
{
refName
+=
file
;
}
if
(
anchor
)
{
refName
+=
'_'
;
refName
+=
anchor
;
}
m_t
<<
"{
\\
field {
\\
*
\\
fldinst { HYPERLINK
\\\\
l
\"
"
;
m_t
<<
rtfFormatBmkStr
(
refName
);
m_t
<<
"
\"
}{}"
;
m_t
<<
"}{
\\
fldrslt {
\\
cs37
\\
ul
\\
cf2 "
;
}
else
{
m_t
<<
"{
\\
b "
;
}
}
void
RTFDocVisitor
::
endLink
(
const
QCString
&
ref
)
{
if
(
ref
.
isEmpty
()
&&
Config_getBool
(
"RTF_HYPERLINKS"
))
{
m_t
<<
"}}}"
;
}
else
{
m_t
<<
"}"
;
}
}
src/rtfdocvisitor.h
0 → 100644
View file @
0a37457c
/******************************************************************************
*
*
*
*
* 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 _RTFDOCVISITOR_H
#define _RTFDOCVISITOR_H
#include "docvisitor.h"
class
QTextStream
;
class
BaseCodeDocInterface
;
class
QCString
;
/*! @brief Concrete visitor implementation for RTF output. */
class
RTFDocVisitor
:
public
DocVisitor
{
public
:
RTFDocVisitor
(
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
*
);
//--------------------------------------
// 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
*
s
);
void
visitPost
(
DocSection
*
);
void
visitPre
(
DocHtmlList
*
s
);
void
visitPost
(
DocHtmlList
*
s
);
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
*
t
);
void
visitPost
(
DocHtmlTable
*
t
);
void
visitPre
(
DocHtmlCaption
*
);
void
visitPost
(
DocHtmlCaption
*
);
void
visitPre
(
DocHtmlRow
*
);
void
visitPost
(
DocHtmlRow
*
)
;
void
visitPre
(
DocHtmlCell
*
);
void
visitPost
(
DocHtmlCell
*
);
void
visitPre
(
DocIndexEntry
*
);
void
visitPost
(
DocIndexEntry
*
);
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
*
lnk
);
void
visitPost
(
DocLink
*
);
void
visitPre
(
DocRef
*
ref
);
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
(
const
QCString
&
ref
);
QCString
getStyle
(
const
char
*
name
);
//--------------------------------------
// state variables
//--------------------------------------
QTextStream
&
m_t
;
BaseCodeDocInterface
&
m_ci
;
bool
m_insidePre
;
bool
m_hide
;
int
m_indentLevel
;
};
#endif
src/rtfgen.cpp
View file @
0a37457c
...
@@ -33,6 +33,7 @@
...
@@ -33,6 +33,7 @@
#include "dot.h"
#include "dot.h"
#include "version.h"
#include "version.h"
#include "page.h"
#include "page.h"
#include "rtfstyle.h"
//#define DBG_RTF(x) x;
//#define DBG_RTF(x) x;
#define DBG_RTF(x)
#define DBG_RTF(x)
...
@@ -40,64 +41,6 @@
...
@@ -40,64 +41,6 @@
// used for table column width calculation
// used for table column width calculation
#define PAGEWIDTH 8748
#define PAGEWIDTH 8748
const
int
indentLevels
=
10
;
struct
RTFListItemInfo
{
bool
isEnum
;
int
number
;
};
static
RTFListItemInfo
listItemInfo
[
indentLevels
];
static
QCString
title
;
static
QCString
subject
;
static
QCString
comments
;
static
QCString
company
;
static
QCString
logoFilename
;
static
QCString
author
;
static
QCString
manager
;
static
QCString
documentType
;
static
QCString
documentId
;
static
QCString
keywords
;
static
QCString
g_nextTag
(
"AAAAAAAAAA"
);
static
QDict
<
QCString
>
g_tagDict
(
5003
);
static
QCString
formatBmkStr
(
const
char
*
name
)
{
// To overcome the 40-character tag limitation, we
// substitute a short arbitrary string for the name
// supplied, and keep track of the correspondence
// between names and strings.
QCString
key
(
name
);
QCString
*
tag
=
g_tagDict
.
find
(
key
);
if
(
!
tag
)
{
// This particular name has not yet been added
// to the list. Add it, associating it with the
// next tag value, and increment the next tag.
tag
=
new
QCString
(
g_nextTag
.
copy
()
);
// Make sure to use a deep copy!
g_tagDict
.
insert
(
key
,
tag
);
// This is the increment part
char
*
nxtTag
=
g_nextTag
.
data
()
+
g_nextTag
.
length
()
-
1
;
for
(
unsigned
int
i
=
0
;
i
<
g_nextTag
.
length
();
++
i
,
--
nxtTag
)
{
if
(
(
++
(
*
nxtTag
)
)
>
'Z'
)
{
(
*
nxtTag
)
=
'A'
;
}
else
{
// Since there was no carry, we can stop now
break
;
}
}
}
return
*
tag
;
}
static
QCString
dateToRTFDateString
()
static
QCString
dateToRTFDateString
()
{
{
const
QDateTime
&
d
=
QDateTime
::
currentDateTime
();
const
QDateTime
&
d
=
QDateTime
::
currentDateTime
();
...
@@ -106,7 +49,7 @@ static QCString dateToRTFDateString()
...
@@ -106,7 +49,7 @@ static QCString dateToRTFDateString()
d
.
date
().
year
(),
d
.
date
().
month
(),
d
.
date
().
day
(),
d
.
date
().
year
(),
d
.
date
().
month
(),
d
.
date
().
day
(),
d
.
time
().
hour
(),
d
.
time
().
minute
(),
d
.
time
().
second
());
d
.
time
().
hour
(),
d
.
time
().
minute
(),
d
.
time
().
second
());
return
result
;
return
result
;
}
}
RTFGenerator
::
RTFGenerator
()
:
OutputGenerator
()
RTFGenerator
::
RTFGenerator
()
:
OutputGenerator
()
{
{
...
@@ -143,307 +86,6 @@ OutputGenerator *RTFGenerator::copy()
...
@@ -143,307 +86,6 @@ OutputGenerator *RTFGenerator::copy()
return
result
;
return
result
;
}
}
static
const
char
Rtf_Style_Reset
[]
=
"
\\
pard
\\
plain "
;
struct
Rtf_Style_Default
{
const
char
*
name
;
const
char
*
reference
;
const
char
*
definition
;
};
static
const
struct
Rtf_Style_Default
Rtf_Style_Default
[]
=
{
{
"Heading1"
,
"
\\
s1
\\
sb240
\\
sa60
\\
keepn
\\
widctlpar
\\
adjustright
\\
b
\\
f1
\\
fs36
\\
kerning36
\\
cgrid "
,
"
\\
sbasedon0
\\
snext0 heading 1"
},
{
"Heading2"
,
"
\\
s2
\\
sb240
\\
sa60
\\
keepn
\\
widctlpar
\\
adjustright
\\
b
\\
f1
\\
fs28
\\
kerning28
\\
cgrid "
,
"
\\
sbasedon0
\\
snext0 heading 2"
},
{
"Heading3"
,
"
\\
s3
\\
sb240
\\
sa60
\\
keepn
\\
widctlpar
\\
adjustright
\\
b
\\
f1
\\
cgrid "
,
"
\\
sbasedon0
\\
snext0 heading 3"
},
{
"Heading4"
,
"
\\
s4
\\
sb240
\\
sa60
\\
keepn
\\
widctlpar
\\
adjustright
\\
b
\\
f1
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext0 heading 4;}{
\\
*
\\
cs10
\\
additive Default Paragraph Font"
},
{
"Title"
,
"
\\
s15
\\
qc
\\
sb240
\\
sa60
\\
widctlpar
\\
outlinelevel0
\\
adjustright
\\
b
\\
f1
\\
fs32
\\
kerning28
\\
cgrid "
,
"
\\
sbasedon0
\\
snext15 Title"
},
{
"SubTitle"
,
"
\\
s16
\\
qc
\\
sa60
\\
widctlpar
\\
outlinelevel1
\\
adjustright
\\
f1
\\
cgrid "
,
"
\\
sbasedon0
\\
snext16 Subtitle"
},
{
"BodyText"
,
"
\\
s17
\\
sa60
\\
sb30
\\
widctlpar
\\
qj
\\
fs22
\\
cgrid "
,
"
\\
sbasedon0
\\
snext17 BodyText"
},
{
"DenseText"
,
"
\\
s18
\\
widctlpar
\\
fs22
\\
cgrid "
,
"
\\
sbasedon0
\\
snext18 DenseText"
},
{
"Header"
,
"
\\
s28
\\
widctlpar
\\
tqc
\\
tx4320
\\
tqr
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext28 header"
},
{
"Footer"
,
"
\\
s29
\\
widctlpar
\\
tqc
\\
tx4320
\\
tqr
\\
tx8640
\\
qr
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext29 footer"
},
{
"GroupHeader"
,
"
\\
s30
\\
li360
\\
sa60
\\
sb120
\\
keepn
\\
widctlpar
\\
adjustright
\\
b
\\
f1
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext30 GroupHeader"
},
{
"CodeExample0"
,
"
\\
s40
\\
li0
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext41 Code Example 0"
},
{
"CodeExample1"
,
"
\\
s41
\\
li360
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext42 Code Example 1"
},
{
"CodeExample2"
,
"
\\
s42
\\
li720
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext43 Code Example 2"
},
{
"CodeExample3"
,
"
\\
s43
\\
li1080
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext44 Code Example 3"
},
{
"CodeExample4"
,
"
\\
s44
\\
li1440
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext45 Code Example 4"
},
{
"CodeExample5"
,
"
\\
s45
\\
li1800
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext46 Code Example 5"
},
{
"CodeExample6"
,
"
\\
s46
\\
li2160
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext47 Code Example 6"
},
{
"CodeExample7"
,
"
\\
s47
\\
li2520
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext48 Code Example 7"
},
{
"CodeExample8"
,
"
\\
s48
\\
li2880
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext49 Code Example 8"
},
{
"CodeExample9"
,
"
\\
s49
\\
li3240
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext49 Code Example 9"
},
{
"ListContinue0"
,
"
\\
s50
\\
li0
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext51 List Continue 0"
},
{
"ListContinue1"
,
"
\\
s51
\\
li360
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext52 List Continue 1"
},
{
"ListContinue2"
,
"
\\
s52
\\
li720
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext53 List Continue 2"
},
{
"ListContinue3"
,
"
\\
s53
\\
li1080
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext54 List Continue 3"
},
{
"ListContinue4"
,
"
\\
s54
\\
li1440
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext55 List Continue 4"
},
{
"ListContinue5"
,
"
\\
s55
\\
li1800
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext56 List Continue 5"
},
{
"ListContinue6"
,
"
\\
s56
\\
li2160
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext57 List Continue 6"
},
{
"ListContinue7"
,
"
\\
s57
\\
li2520
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext58 List Continue 7"
},
{
"ListContinue8"
,
"
\\
s58
\\
li2880
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext59 List Continue 8"
},
{
"ListContinue9"
,
"
\\
s59
\\
li3240
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext59 List Continue 9"
},
{
"DescContinue0"
,
"
\\
s60
\\
li0
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext61 DescContinue 0"
},
{
"DescContinue1"
,
"
\\
s61
\\
li360
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext62 DescContinue 1"
},
{
"DescContinue2"
,
"
\\
s62
\\
li720
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext63 DescContinue 2"
},
{
"DescContinue3"
,
"
\\
s63
\\
li1080
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext64 DescContinue 3"
},
{
"DescContinue4"
,
"
\\
s64
\\
li1440
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext65 DescContinue 4"
},
{
"DescContinue5"
,
"
\\
s65
\\
li1800
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext66 DescContinue 5"
},
{
"DescContinue6"
,
"
\\
s66
\\
li2160
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext67 DescContinue 6"
},
{
"DescContinue7"
,
"
\\
s67
\\
li2520
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext68 DescContinue 7"
},
{
"DescContinue8"
,
"
\\
s68
\\
li2880
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext69 DescContinue 8"
},
{
"DescContinue9"
,
"
\\
s69
\\
li3240
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext69 DescContinue 9"
},
{
"LatexTOC0"
,
"
\\
s70
\\
li0
\\
sa30
\\
sb30
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext81 LatexTOC 0"
},
{
"LatexTOC1"
,
"
\\
s71
\\
li360
\\
sa27
\\
sb27
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext82 LatexTOC 1"
},
{
"LatexTOC2"
,
"
\\
s72
\\
li720
\\
sa24
\\
sb24
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext83 LatexTOC 2"
},
{
"LatexTOC3"
,
"
\\
s73
\\
li1080
\\
sa21
\\
sb21
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext84 LatexTOC 3"
},
{
"LatexTOC4"
,
"
\\
s74
\\
li1440
\\
sa18
\\
sb18
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext85 LatexTOC 4"
},
{
"LatexTOC5"
,
"
\\
s75
\\
li1800
\\
sa15
\\
sb15
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext86 LatexTOC 5"
},
{
"LatexTOC6"
,
"
\\
s76
\\
li2160
\\
sa12
\\
sb12
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext87 LatexTOC 6"
},
{
"LatexTOC7"
,
"
\\
s77
\\
li2520
\\
sa9
\\
sb9
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext88 LatexTOC 7"
},
{
"LatexTOC8"
,
"
\\
s78
\\
li2880
\\
sa6
\\
sb6
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext89 LatexTOC 8"
},
{
"LatexTOC9"
,
"
\\
s79
\\
li3240
\\
sa3
\\
sb3
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext89 LatexTOC 9"
},
{
"ListBullet0"
,
"
\\
s80
\\
fi-360
\\
li360
\\
widctlpar
\\
jclisttab
\\
tx360{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls1
\\
pnrnot0
\\
pndec }
\\
ls1
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext81
\\
sautoupd List Bullet 0"
},
{
"ListBullet1"
,
"
\\
s81
\\
fi-360
\\
li720
\\
widctlpar
\\
jclisttab
\\
tx720{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls2
\\
pnrnot0
\\
pndec }
\\
ls2
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext82
\\
sautoupd List Bullet 1"
},
{
"ListBullet2"
,
"
\\
s82
\\
fi-360
\\
li1080
\\
widctlpar
\\
jclisttab
\\
tx1080{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls3
\\
pnrnot0
\\
pndec }
\\
ls3
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext83
\\
sautoupd List Bullet 2"
},
{
"ListBullet3"
,
"
\\
s83
\\
fi-360
\\
li1440
\\
widctlpar
\\
jclisttab
\\
tx1440{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls4
\\
pnrnot0
\\
pndec }
\\
ls4
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext84
\\
sautoupd List Bullet 3"
},
{
"ListBullet4"
,
"
\\
s84
\\
fi-360
\\
li1800
\\
widctlpar
\\
jclisttab
\\
tx1800{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls5
\\
pnrnot0
\\
pndec }
\\
ls5
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext85
\\
sautoupd List Bullet 4"
},
{
"ListBullet5"
,
"
\\
s85
\\
fi-360
\\
li2160
\\
widctlpar
\\
jclisttab
\\
tx2160{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls6
\\
pnrnot0
\\
pndec }
\\
ls6
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext86
\\
sautoupd List Bullet 5"
},
{
"ListBullet6"
,
"
\\
s86
\\
fi-360
\\
li2520
\\
widctlpar
\\
jclisttab
\\
tx2520{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls7
\\
pnrnot0
\\
pndec }
\\
ls7
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext87
\\
sautoupd List Bullet 6"
},
{
"ListBullet7"
,
"
\\
s87
\\
fi-360
\\
li2880
\\
widctlpar
\\
jclisttab
\\
tx2880{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls8
\\
pnrnot0
\\
pndec }
\\
ls8
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext88
\\
sautoupd List Bullet 7"
},
{
"ListBullet8"
,
"
\\
s88
\\
fi-360
\\
li3240
\\
widctlpar
\\
jclisttab
\\
tx3240{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls9
\\
pnrnot0
\\
pndec }
\\
ls9
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext89
\\
sautoupd List Bullet 8"
},
{
"ListBullet9"
,
"
\\
s89
\\
fi-360
\\
li3600
\\
widctlpar
\\
jclisttab
\\
tx3600{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls10
\\
pnrnot0
\\
pndec }
\\
ls10
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext89
\\
sautoupd List Bullet 9"
},
{
"ListEnum0"
,
"
\\
s90
\\
fi-360
\\
li360
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext91
\\
sautoupd List Enum 0"
},
{
"ListEnum1"
,
"
\\
s91
\\
fi-360
\\
li720
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext92
\\
sautoupd List Enum 1"
},
{
"ListEnum2"
,
"
\\
s92
\\
fi-360
\\
li1080
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext93
\\
sautoupd List Enum 2"
},
{
"ListEnum3"
,
"
\\
s93
\\
fi-360
\\
li1440
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext94
\\
sautoupd List Enum 3"
},
{
"ListEnum4"
,
"
\\
s94
\\
fi-360
\\
li1800
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext95
\\
sautoupd List Enum 4"
},
{
"ListEnum5"
,
"
\\
s95
\\
fi-360
\\
li2160
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext96
\\
sautoupd List Enum 5"
},
{
"ListEnum6"
,
"
\\
s96
\\
fi-360
\\
li2520
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext96
\\
sautoupd List Enum 5"
},
{
"ListEnum7"
,
"
\\
s97
\\
fi-360
\\
li2880
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext98
\\
sautoupd List Enum 7"
},
{
"ListEnum8"
,
"
\\
s98
\\
fi-360
\\
li3240
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext99
\\
sautoupd List Enum 8"
},
{
"ListEnum9"
,
"
\\
s99
\\
fi-360
\\
li3600
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext99
\\
sautoupd List Enum 9"
},
{
0
,
0
,
0
}
};
void
RTFGenerator
::
writeStyleSheetFile
(
QFile
&
file
)
void
RTFGenerator
::
writeStyleSheetFile
(
QFile
&
file
)
{
{
QTextStream
t
(
&
file
);
QTextStream
t
(
&
file
);
...
@@ -453,171 +95,14 @@ void RTFGenerator::writeStyleSheetFile(QFile &file)
...
@@ -453,171 +95,14 @@ void RTFGenerator::writeStyleSheetFile(QFile &file)
t
<<
"# Remove a hash to activate a line.
\n\n
"
;
t
<<
"# Remove a hash to activate a line.
\n\n
"
;
int
i
;
int
i
;
for
(
i
=
0
;
Rtf_Style_Default
[
i
].
reference
!=
0
;
i
++
)
for
(
i
=
0
;
rtf_Style_Default
[
i
].
reference
!=
0
;
i
++
)
{
{
t
<<
"# "
<<
R
tf_Style_Default
[
i
].
name
<<
" = "
t
<<
"# "
<<
r
tf_Style_Default
[
i
].
name
<<
" = "
<<
R
tf_Style_Default
[
i
].
reference
<<
r
tf_Style_Default
[
i
].
reference
<<
R
tf_Style_Default
[
i
].
definition
<<
endl
;
<<
r
tf_Style_Default
[
i
].
definition
<<
endl
;
}
}
}
}
struct
StyleData
{
// elements of this type are stored in dictionary Rtf_Style
//
// to define a tag in the header reference + definition is required
// to use a tag in the body of the document only reference is required
unsigned
index
;
// index in style-sheet, i.e. number in s-clause
char
*
reference
;
// everything required to apply the style
char
*
definition
;
// aditional tags like \snext and style name
StyleData
(
const
char
*
reference
,
const
char
*
definition
);
~
StyleData
();
bool
setStyle
(
const
char
*
s
,
const
char
*
styleName
);
static
const
QRegExp
s_clause
;
};
const
QRegExp
StyleData
::
s_clause
(
"
\\\\
s[0-9]+
\\
s*"
);
StyleData
::
StyleData
(
const
char
*
reference
,
const
char
*
definition
)
{
int
start
=
s_clause
.
match
(
reference
);
ASSERT
(
start
>=
0
);
reference
+=
start
;
index
=
(
int
)
atol
(
reference
+
2
);
ASSERT
(
index
>
0
);
ASSERT
(
reference
!=
0
);
size_t
size
=
1
+
strlen
(
reference
);
memcpy
(
this
->
reference
=
new
char
[
size
],
reference
,
size
);
ASSERT
(
definition
!=
0
);
size
=
1
+
strlen
(
definition
);
memcpy
(
this
->
definition
=
new
char
[
size
],
definition
,
size
);
}
StyleData
::~
StyleData
()
{
delete
[]
reference
;
delete
[]
definition
;
}
bool
StyleData
::
setStyle
(
const
char
*
s
,
const
char
*
styleName
)
{
static
const
QRegExp
subgroup
(
"^{[^}]*}
\\
s*"
);
static
const
QRegExp
any_clause
(
"^
\\\\
[a-z][a-z0-9-]*
\\
s*"
);
int
len
=
0
;
// length of a particular RTF formatting control
int
ref_len
=
0
;
// length of the whole formatting section of a style
int
start
=
s_clause
.
match
(
s
,
0
,
&
len
);
if
(
start
<
0
)
{
err
(
"Style sheet '%s' contains no '
\\
s' clause.
\n
{%s}
\n
"
,
styleName
,
s
);
return
FALSE
;
}
s
+=
start
;
index
=
(
int
)
atol
(
s
+
2
);
ASSERT
(
index
>
0
);
// search for the end of pure formatting codes
const
char
*
end
=
s
+
len
;
ref_len
=
len
;
bool
haveNewDefinition
=
TRUE
;
for
(;;)
{
if
(
*
end
==
'{'
)
{
// subgroups are used for \\additive
if
(
0
!=
subgroup
.
match
(
end
,
0
,
&
len
))
break
;
else
{
end
+=
len
;
ref_len
+=
len
;
}
}
else
if
(
*
end
==
'\\'
)
{
if
(
0
==
strncmp
(
end
,
"
\\
snext"
,
6
))
break
;
if
(
0
==
strncmp
(
end
,
"
\\
sbasedon"
,
9
))
break
;
if
(
0
!=
any_clause
.
match
(
end
,
0
,
&
len
))
break
;
end
+=
len
;
ref_len
+=
len
;
}
else
if
(
*
end
==
0
)
{
// no style-definition part, keep default value
haveNewDefinition
=
FALSE
;
break
;
}
else
// plain name without leading \\snext
break
;
}
delete
[]
reference
;
reference
=
new
char
[
ref_len
+
1
];
memcpy
(
reference
,
s
,
ref_len
);
reference
[
ref_len
]
=
0
;
if
(
haveNewDefinition
)
{
delete
[]
definition
;
size_t
size
=
1
+
strlen
(
end
);
definition
=
new
char
[
size
];
memcpy
(
definition
,
end
,
size
);
}
return
TRUE
;
}
static
void
loadStylesheet
(
const
char
*
name
,
QDict
<
StyleData
>&
dict
)
{
QFile
file
(
name
);
if
(
!
file
.
open
(
IO_ReadOnly
))
{
err
(
"Can't open RTF style sheet file %s. Using defaults.
\n
"
,
name
);
return
;
}
msg
(
"Loading RTF style sheet %s...
\n
"
,
name
);
static
const
QRegExp
separator
(
"[
\t
]*=[
\t
]*"
);
uint
lineNr
=
1
;
QTextStream
t
(
&
file
);
#if QT_VERSION >= 200
t
.
setEncoding
(
QTextStream
::
Latin1
);
#endif
while
(
!
t
.
eof
())
{
QCString
s
(
4096
);
// string buffer of max line length
s
=
t
.
readLine
().
stripWhiteSpace
();
if
(
s
.
length
()
==
0
||
s
.
at
(
0
)
==
'#'
)
continue
;
// skip blanks & comments
int
sepLength
;
int
sepStart
=
separator
.
match
(
s
,
0
,
&
sepLength
);
if
(
sepStart
<=
0
)
// no valid assignment statement
{
warn
(
name
,
lineNr
,
"Assignment of style sheet name expected!
\n
"
);
continue
;
}
QCString
key
=
s
.
left
(
sepStart
);
if
(
dict
[
key
]
==
0
)
// not a valid style sheet name
{
warn
(
name
,
lineNr
,
"Invalid style sheet name %s ignored.
\n
"
,
key
.
data
());
continue
;
}
StyleData
*
styleData
=
dict
.
find
(
key
);
if
(
styleData
==
0
)
{
warn
(
name
,
lineNr
,
"Unknown style sheet name %s ignored.
\n
"
,
key
.
data
());
continue
;
}
s
+=
" "
;
// add command separator
styleData
->
setStyle
(
s
.
data
()
+
sepStart
+
sepLength
,
key
.
data
());
lineNr
++
;
}
}
static
QDict
<
StyleData
>
Rtf_Style
(
257
);
void
RTFGenerator
::
writeExtensionsFile
(
QFile
&
file
)
void
RTFGenerator
::
writeExtensionsFile
(
QFile
&
file
)
{
{
QTextStream
t
(
&
file
);
QTextStream
t
(
&
file
);
...
@@ -670,52 +155,6 @@ void RTFGenerator::writeExtensionsFile(QFile &file)
...
@@ -670,52 +155,6 @@ void RTFGenerator::writeExtensionsFile(QFile &file)
t
<<
"#Keywords =
\n\n
"
;
t
<<
"#Keywords =
\n\n
"
;
}
}
static
void
loadExtensions
(
const
char
*
name
)
{
QFile
file
(
name
);
if
(
!
file
.
open
(
IO_ReadOnly
))
{
err
(
"Can't open RTF extensions file %s. Using defaults.
\n
"
,
name
);
return
;
}
msg
(
"Loading RTF extensions %s...
\n
"
,
name
);
static
const
QRegExp
separator
(
"[
\t
]*=[
\t
]*"
);
uint
lineNr
=
1
;
QTextStream
t
(
&
file
);
#if QT_VERSION >= 200
t
.
setEncoding
(
QTextStream
::
Latin1
);
#endif
while
(
!
t
.
eof
())
{
QCString
s
(
4096
);
// string buffer of max line length
s
=
t
.
readLine
().
stripWhiteSpace
();
if
(
s
.
length
()
==
0
||
s
.
at
(
0
)
==
'#'
)
continue
;
// skip blanks & comments
int
sepLength
;
int
sepStart
=
separator
.
match
(
s
,
0
,
&
sepLength
);
if
(
sepStart
<=
0
)
// no valid assignment statement
{
warn
(
name
,
lineNr
,
"Assignment of extension field expected!
\n
"
);
continue
;
}
QCString
key
=
s
.
left
(
sepStart
);
QCString
data
=
s
.
data
()
+
sepStart
+
sepLength
;
if
(
key
==
"Title"
)
title
=
data
.
data
();
if
(
key
==
"Subject"
)
subject
=
data
.
data
();
if
(
key
==
"Comments"
)
comments
=
data
.
data
();
if
(
key
==
"Company"
)
company
=
data
.
data
();
if
(
key
==
"LogoFilename"
)
logoFilename
=
data
.
data
();
if
(
key
==
"Author"
)
author
=
data
.
data
();
if
(
key
==
"Manager"
)
manager
=
data
.
data
();
if
(
key
==
"DocumentType"
)
documentType
=
data
.
data
();
if
(
key
==
"DocumentId"
)
documentId
=
data
.
data
();
if
(
key
==
"Keywords"
)
keywords
=
data
.
data
();
lineNr
++
;
}
}
void
RTFGenerator
::
init
()
void
RTFGenerator
::
init
()
{
{
...
@@ -726,18 +165,16 @@ void RTFGenerator::init()
...
@@ -726,18 +165,16 @@ void RTFGenerator::init()
err
(
"Could not create output directory %s
\n
"
,
dir
.
data
());
err
(
"Could not create output directory %s
\n
"
,
dir
.
data
());
exit
(
1
);
exit
(
1
);
}
}
Rtf_Style
.
setAutoDelete
(
TRUE
);
rtf_Style
.
setAutoDelete
(
TRUE
);
g_tagDict
.
setAutoDelete
(
TRUE
);
// first duplicate strings of
R
tf_Style_Default
// first duplicate strings of
r
tf_Style_Default
const
struct
Rtf_Style_Default
*
def
=
R
tf_Style_Default
;
const
struct
Rtf_Style_Default
*
def
=
r
tf_Style_Default
;
while
(
def
->
reference
!=
0
)
while
(
def
->
reference
!=
0
)
{
{
if
(
def
->
definition
==
0
)
if
(
def
->
definition
==
0
)
err
(
"Internal error:
R
tf_Style_Default[%s] has no definition.
\n
"
,
def
->
name
);
err
(
"Internal error:
r
tf_Style_Default[%s] has no definition.
\n
"
,
def
->
name
);
StyleData
*
styleData
=
new
StyleData
(
def
->
reference
,
def
->
definition
);
StyleData
*
styleData
=
new
StyleData
(
def
->
reference
,
def
->
definition
);
R
tf_Style
.
insert
(
def
->
name
,
styleData
);
r
tf_Style
.
insert
(
def
->
name
,
styleData
);
def
++
;
def
++
;
}
}
...
@@ -745,7 +182,7 @@ void RTFGenerator::init()
...
@@ -745,7 +182,7 @@ void RTFGenerator::init()
QCString
&
rtfStyleSheetFile
=
Config_getString
(
"RTF_STYLESHEET_FILE"
);
QCString
&
rtfStyleSheetFile
=
Config_getString
(
"RTF_STYLESHEET_FILE"
);
if
(
!
rtfStyleSheetFile
.
isEmpty
())
if
(
!
rtfStyleSheetFile
.
isEmpty
())
{
{
loadStylesheet
(
rtfStyleSheetFile
,
R
tf_Style
);
loadStylesheet
(
rtfStyleSheetFile
,
r
tf_Style
);
}
}
// If user has defined an extension file, load its contents.
// If user has defined an extension file, load its contents.
...
@@ -807,7 +244,7 @@ void RTFGenerator::beginRTFDocument()
...
@@ -807,7 +244,7 @@ void RTFGenerator::beginRTFDocument()
// sort styles ascending by \s-number via an intermediate QArray
// sort styles ascending by \s-number via an intermediate QArray
QArray
<
const
StyleData
*>
array
(
128
);
QArray
<
const
StyleData
*>
array
(
128
);
array
.
fill
(
0
);
array
.
fill
(
0
);
QDictIterator
<
StyleData
>
iter
(
R
tf_Style
);
QDictIterator
<
StyleData
>
iter
(
r
tf_Style
);
const
StyleData
*
style
;
const
StyleData
*
style
;
for
(;
(
style
=
iter
.
current
());
++
iter
)
for
(;
(
style
=
iter
.
current
());
++
iter
)
{
{
...
@@ -847,40 +284,40 @@ void RTFGenerator::beginRTFChapter()
...
@@ -847,40 +284,40 @@ void RTFGenerator::beginRTFChapter()
{
{
t
<<
"
\n
"
;
t
<<
"
\n
"
;
DBG_RTF
(
t
<<
"{
\\
comment BeginRTFChapter}
\n
"
)
DBG_RTF
(
t
<<
"{
\\
comment BeginRTFChapter}
\n
"
)
t
<<
R
tf_Style_Reset
;
t
<<
r
tf_Style_Reset
;
// if we are compact, no extra page breaks...
// if we are compact, no extra page breaks...
if
(
Config_getBool
(
"COMPACT_RTF"
))
if
(
Config_getBool
(
"COMPACT_RTF"
))
{
{
// t <<"\\sect\\sectd\\sbknone\n";
// t <<"\\sect\\sectd\\sbknone\n";
t
<<
"
\\
sect
\\
sbknone
\n
"
;
t
<<
"
\\
sect
\\
sbknone
\n
"
;
R
tfwriteRuler_thick
();
r
tfwriteRuler_thick
();
}
}
else
else
t
<<
"
\\
sect
\\
sbkpage
\n
"
;
t
<<
"
\\
sect
\\
sbkpage
\n
"
;
//t <<"\\sect\\sectd\\sbkpage\n";
//t <<"\\sect\\sectd\\sbkpage\n";
t
<<
R
tf_Style
[
"Heading1"
]
->
reference
<<
"
\n
"
;
t
<<
r
tf_Style
[
"Heading1"
]
->
reference
<<
"
\n
"
;
}
}
void
RTFGenerator
::
beginRTFSection
()
void
RTFGenerator
::
beginRTFSection
()
{
{
t
<<
"
\n
"
;
t
<<
"
\n
"
;
DBG_RTF
(
t
<<
"{
\\
comment BeginRTFSection}
\n
"
)
DBG_RTF
(
t
<<
"{
\\
comment BeginRTFSection}
\n
"
)
t
<<
R
tf_Style_Reset
;
t
<<
r
tf_Style_Reset
;
// if we are compact, no extra page breaks...
// if we are compact, no extra page breaks...
if
(
Config_getBool
(
"COMPACT_RTF"
))
if
(
Config_getBool
(
"COMPACT_RTF"
))
{
{
// t <<"\\sect\\sectd\\sbknone\n";
// t <<"\\sect\\sectd\\sbknone\n";
t
<<
"
\\
sect
\\
sbknone
\n
"
;
t
<<
"
\\
sect
\\
sbknone
\n
"
;
R
tfwriteRuler_emboss
();
r
tfwriteRuler_emboss
();
}
}
else
else
t
<<
"
\\
sect
\\
sbkpage
\n
"
;
t
<<
"
\\
sect
\\
sbkpage
\n
"
;
//t <<"\\sect\\sectd\\sbkpage\n";
//t <<"\\sect\\sectd\\sbkpage\n";
t
<<
R
tf_Style
[
"Heading2"
]
->
reference
<<
"
\n
"
;
t
<<
r
tf_Style
[
"Heading2"
]
->
reference
<<
"
\n
"
;
}
}
void
RTFGenerator
::
startFile
(
const
char
*
name
,
const
char
*
,
void
RTFGenerator
::
startFile
(
const
char
*
name
,
const
char
*
,
...
@@ -929,13 +366,13 @@ void RTFGenerator::startIndexSection(IndexSections is)
...
@@ -929,13 +366,13 @@ void RTFGenerator::startIndexSection(IndexSections is)
break
;
break
;
case
isTitlePageAuthor
:
case
isTitlePageAuthor
:
t
<<
"}
\n
"
;
t
<<
"}
\n
"
;
if
(
subject
)
t
<<
"{
\\
subject "
<<
subject
<<
"}
\n
"
;
if
(
rtf_subject
)
t
<<
"{
\\
subject "
<<
rtf_
subject
<<
"}
\n
"
;
if
(
comments
)
t
<<
"{
\\
comment "
<<
comments
<<
"}
\n
"
;
if
(
rtf_comments
)
t
<<
"{
\\
comment "
<<
rtf_
comments
<<
"}
\n
"
;
if
(
company
)
t
<<
"{
\\
company "
<<
company
<<
"}
\n
"
;
if
(
rtf_company
)
t
<<
"{
\\
company "
<<
rtf_
company
<<
"}
\n
"
;
if
(
author
)
t
<<
"{
\\
author "
<<
author
<<
"}
\n
"
;
if
(
rtf_author
)
t
<<
"{
\\
author "
<<
rtf_
author
<<
"}
\n
"
;
if
(
manager
)
t
<<
"{
\\
manager "
<<
manager
<<
"}
\n
"
;
if
(
rtf_manager
)
t
<<
"{
\\
manager "
<<
rtf_
manager
<<
"}
\n
"
;
if
(
documentType
)
t
<<
"{
\\
category "
<<
documentType
<<
"}
\n
"
;
if
(
rtf_documentType
)
t
<<
"{
\\
category "
<<
rtf_
documentType
<<
"}
\n
"
;
if
(
keywords
)
t
<<
"{
\\
keywords "
<<
keywords
<<
"}
\n
"
;
if
(
rtf_keywords
)
t
<<
"{
\\
keywords "
<<
rtf_
keywords
<<
"}
\n
"
;
t
<<
"{
\\
comment "
;
t
<<
"{
\\
comment "
;
break
;
break
;
case
isMainPage
:
case
isMainPage
:
...
@@ -1081,9 +518,9 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1081,9 +518,9 @@ void RTFGenerator::endIndexSection(IndexSections is)
switch
(
is
)
switch
(
is
)
{
{
case
isTitlePageStart
:
case
isTitlePageStart
:
if
(
title
)
if
(
rtf_
title
)
// User has overridden document title in extensions file
// User has overridden document title in extensions file
t
<<
"}"
<<
title
;
t
<<
"}"
<<
rtf_
title
;
else
else
t
<<
"}"
<<
Config_getString
(
"PROJECT_NAME"
);
t
<<
"}"
<<
Config_getString
(
"PROJECT_NAME"
);
break
;
break
;
...
@@ -1093,42 +530,42 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1093,42 +530,42 @@ void RTFGenerator::endIndexSection(IndexSections is)
t
<<
"{
\\
creatim "
<<
dateToRTFDateString
()
<<
"}
\n
}"
;
t
<<
"{
\\
creatim "
<<
dateToRTFDateString
()
<<
"}
\n
}"
;
DBG_RTF
(
t
<<
"{
\\
comment end of infoblock}
\n
"
);
DBG_RTF
(
t
<<
"{
\\
comment end of infoblock}
\n
"
);
// setup for this section
// setup for this section
t
<<
R
tf_Style_Reset
<<
"
\n
"
;
t
<<
r
tf_Style_Reset
<<
"
\n
"
;
t
<<
"
\\
sectd
\\
pgnlcrm
\n
"
;
t
<<
"
\\
sectd
\\
pgnlcrm
\n
"
;
t
<<
"{
\\
footer "
<<
R
tf_Style
[
"Footer"
]
->
reference
<<
"{
\\
chpgn}}
\n
"
;
t
<<
"{
\\
footer "
<<
r
tf_Style
[
"Footer"
]
->
reference
<<
"{
\\
chpgn}}
\n
"
;
// the title entry
// the title entry
DBG_RTF
(
t
<<
"{
\\
comment begin title page}
\n
"
)
DBG_RTF
(
t
<<
"{
\\
comment begin title page}
\n
"
)
t
<<
Rtf_Style_Reset
<<
R
tf_Style
[
"SubTitle"
]
->
reference
<<
endl
;
// set to title style
t
<<
rtf_Style_Reset
<<
r
tf_Style
[
"SubTitle"
]
->
reference
<<
endl
;
// set to title style
t
<<
"
\\
vertalc
\\
qc
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\n
"
;
t
<<
"
\\
vertalc
\\
qc
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\n
"
;
if
(
logoFilename
)
if
(
rtf_
logoFilename
)
{
{
t
<<
"{
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
<<
logoFilename
;
t
<<
"{
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
<<
rtf_
logoFilename
;
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT} {
\\
fldrslt IMAGE }}
\\
par
\\
par
\n
"
;
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT} {
\\
fldrslt IMAGE }}
\\
par
\\
par
\n
"
;
}
}
if
(
company
)
if
(
rtf_
company
)
{
{
t
<<
company
<<
"
\\
par
\\
par
\n
"
;
t
<<
rtf_
company
<<
"
\\
par
\\
par
\n
"
;
}
}
t
<<
Rtf_Style_Reset
<<
R
tf_Style
[
"Title"
]
->
reference
<<
endl
;
// set to title style
t
<<
rtf_Style_Reset
<<
r
tf_Style
[
"Title"
]
->
reference
<<
endl
;
// set to title style
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst TITLE
\\\\
*MERGEFORMAT}{
\\
fldrslt TITLE}}
\\
par"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst TITLE
\\\\
*MERGEFORMAT}{
\\
fldrslt TITLE}}
\\
par"
<<
endl
;
t
<<
Rtf_Style_Reset
<<
R
tf_Style
[
"SubTitle"
]
->
reference
<<
endl
;
// set to title style
t
<<
rtf_Style_Reset
<<
r
tf_Style
[
"SubTitle"
]
->
reference
<<
endl
;
// set to title style
t
<<
"
\\
par
\n
"
;
t
<<
"
\\
par
\n
"
;
if
(
documentType
)
if
(
rtf_
documentType
)
{
{
t
<<
documentType
<<
"
\\
par
\n
"
;
t
<<
rtf_
documentType
<<
"
\\
par
\n
"
;
}
}
if
(
documentId
)
if
(
rtf_
documentId
)
{
{
t
<<
documentId
<<
"
\\
par
\n
"
;
t
<<
rtf_
documentId
<<
"
\\
par
\n
"
;
}
}
t
<<
"
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\n
"
;
t
<<
"
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\\
par
\n
"
;
t
<<
Rtf_Style_Reset
<<
R
tf_Style
[
"SubTitle"
]
->
reference
<<
endl
;
// set to subtitle style
t
<<
rtf_Style_Reset
<<
r
tf_Style
[
"SubTitle"
]
->
reference
<<
endl
;
// set to subtitle style
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst AUTHOR
\\\\
*MERGEFORMAT}{
\\
fldrslt AUTHOR}}
\\
par"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst AUTHOR
\\\\
*MERGEFORMAT}{
\\
fldrslt AUTHOR}}
\\
par"
<<
endl
;
t
<<
"Version "
<<
Config_getString
(
"PROJECT_NUMBER"
)
<<
"
\\
par"
;
t
<<
"Version "
<<
Config_getString
(
"PROJECT_NUMBER"
)
<<
"
\\
par"
;
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst CREATEDATE
\\\\
*MERGEFORMAT}"
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst CREATEDATE
\\\\
*MERGEFORMAT}"
...
@@ -1139,16 +576,16 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1139,16 +576,16 @@ void RTFGenerator::endIndexSection(IndexSections is)
// table of contents section
// table of contents section
DBG_RTF
(
t
<<
"{
\\
comment Table of contents}
\n
"
)
DBG_RTF
(
t
<<
"{
\\
comment Table of contents}
\n
"
)
t
<<
"
\\
vertalt
\n
"
;
t
<<
"
\\
vertalt
\n
"
;
t
<<
R
tf_Style_Reset
<<
endl
;
t
<<
r
tf_Style_Reset
<<
endl
;
t
<<
R
tf_Style
[
"Heading1"
]
->
reference
;
t
<<
r
tf_Style
[
"Heading1"
]
->
reference
;
t
<<
theTranslator
->
trRTFTableOfContents
()
<<
"
\\
par"
<<
endl
;
t
<<
theTranslator
->
trRTFTableOfContents
()
<<
"
\\
par"
<<
endl
;
t
<<
R
tf_Style_Reset
<<
"
\\
par"
<<
endl
;
t
<<
r
tf_Style_Reset
<<
"
\\
par"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst TOC
\\\\
f
\\\\
*MERGEFORMAT}{
\\
fldrslt Table of contents}}
\\
par
\n
"
;
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst TOC
\\\\
f
\\\\
*MERGEFORMAT}{
\\
fldrslt Table of contents}}
\\
par
\n
"
;
t
<<
R
tf_Style_Reset
<<
endl
;
t
<<
r
tf_Style_Reset
<<
endl
;
}
}
break
;
break
;
case
isMainPage
:
case
isMainPage
:
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
if
(
!
Doxygen
::
mainPage
||
Doxygen
::
mainPage
->
title
.
isEmpty
())
if
(
!
Doxygen
::
mainPage
||
Doxygen
::
mainPage
->
title
.
isEmpty
())
{
{
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trMainPage
()
<<
"}"
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trMainPage
()
<<
"}"
<<
endl
;
...
@@ -1162,37 +599,37 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1162,37 +599,37 @@ void RTFGenerator::endIndexSection(IndexSections is)
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
break
;
//case isPackageIndex:
//case isPackageIndex:
// t << "\\par " <<
R
tf_Style_Reset << endl;
// t << "\\par " <<
r
tf_Style_Reset << endl;
// t << "{\\tc \\v " << theTranslator->trPackageList() << "}"<< endl;
// t << "{\\tc \\v " << theTranslator->trPackageList() << "}"<< endl;
// t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"packages.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
// t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"packages.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
// break;
// break;
case
isModuleIndex
:
case
isModuleIndex
:
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trModuleIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trModuleIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
modules.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
modules.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
break
;
case
isNamespaceIndex
:
case
isNamespaceIndex
:
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trNamespaceIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trNamespaceIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
namespaces.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
namespaces.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
break
;
case
isClassHierarchyIndex
:
case
isClassHierarchyIndex
:
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trHierarchicalIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trHierarchicalIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
hierarchy.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
hierarchy.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
break
;
case
isCompoundIndex
:
case
isCompoundIndex
:
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trCompoundIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trCompoundIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
annotated.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
annotated.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
break
;
case
isFileIndex
:
case
isFileIndex
:
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trFileIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trFileIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
files.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
files.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
break
;
case
isPageIndex
:
case
isPageIndex
:
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trPageIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trPageIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
pages.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
pages.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
break
;
...
@@ -1203,7 +640,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1203,7 +640,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
// t << "{\\tc \\v " << theTranslator->trPackageDocumentation() << "}"<< endl;
// t << "{\\tc \\v " << theTranslator->trPackageDocumentation() << "}"<< endl;
// while (pd)
// while (pd)
// {
// {
// t << "\\par " <<
R
tf_Style_Reset << endl;
// t << "\\par " <<
r
tf_Style_Reset << endl;
// t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
// t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
// t << pd->getOutputFileBase();
// t << pd->getOutputFileBase();
// t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
// t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
...
@@ -1221,7 +658,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1221,7 +658,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
{
if
(
!
gd
->
isReference
())
if
(
!
gd
->
isReference
())
{
{
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
gd
->
getOutputFileBase
();
t
<<
gd
->
getOutputFileBase
();
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
...
@@ -1238,7 +675,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1238,7 +675,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
{
if
(
nd
->
isLinkableInProject
())
if
(
nd
->
isLinkableInProject
())
{
{
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
nd
->
getOutputFileBase
();
t
<<
nd
->
getOutputFileBase
();
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
...
@@ -1249,7 +686,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1249,7 +686,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
{
if
(
nd
->
isLinkableInProject
())
if
(
nd
->
isLinkableInProject
())
{
{
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
beginRTFSection
();
beginRTFSection
();
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
nd
->
getOutputFileBase
();
t
<<
nd
->
getOutputFileBase
();
...
@@ -1270,7 +707,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1270,7 +707,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
{
if
(
cd
->
isLinkableInProject
()
&&
cd
->
templateMaster
()
==
0
)
if
(
cd
->
isLinkableInProject
()
&&
cd
->
templateMaster
()
==
0
)
{
{
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
cd
->
getOutputFileBase
();
t
<<
cd
->
getOutputFileBase
();
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
...
@@ -1281,7 +718,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1281,7 +718,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
{
if
(
cd
->
isLinkableInProject
()
&&
cd
->
templateMaster
()
==
0
)
if
(
cd
->
isLinkableInProject
()
&&
cd
->
templateMaster
()
==
0
)
{
{
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
beginRTFSection
();
beginRTFSection
();
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
cd
->
getOutputFileBase
();
t
<<
cd
->
getOutputFileBase
();
...
@@ -1305,7 +742,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1305,7 +742,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
{
if
(
isFirst
)
if
(
isFirst
)
{
{
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
fd
->
getOutputFileBase
();
t
<<
fd
->
getOutputFileBase
();
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
...
@@ -1313,7 +750,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1313,7 +750,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
}
}
else
else
{
{
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
beginRTFSection
();
beginRTFSection
();
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
fd
->
getOutputFileBase
();
t
<<
fd
->
getOutputFileBase
();
...
@@ -1334,14 +771,14 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1334,14 +771,14 @@ void RTFGenerator::endIndexSection(IndexSections is)
PageInfo
*
pi
=
pdi
.
toFirst
();
PageInfo
*
pi
=
pdi
.
toFirst
();
if
(
pi
)
if
(
pi
)
{
{
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
pi
->
getOutputFileBase
();
t
<<
pi
->
getOutputFileBase
();
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
}
}
for
(
++
pdi
;(
pi
=
pdi
.
current
());
++
pdi
)
for
(
++
pdi
;(
pi
=
pdi
.
current
());
++
pdi
)
{
{
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
beginRTFSection
();
beginRTFSection
();
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
pi
->
getOutputFileBase
();
t
<<
pi
->
getOutputFileBase
();
...
@@ -1359,7 +796,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1359,7 +796,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
{
if
(
!
pi
->
getGroupDef
()
&&
!
pi
->
isReference
())
if
(
!
pi
->
getGroupDef
()
&&
!
pi
->
isReference
())
{
{
if
(
first
)
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
if
(
first
)
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
"
;
t
<<
pi
->
getOutputFileBase
();
t
<<
pi
->
getOutputFileBase
();
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
t
<<
".rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
...
@@ -1370,9 +807,9 @@ void RTFGenerator::endIndexSection(IndexSections is)
...
@@ -1370,9 +807,9 @@ void RTFGenerator::endIndexSection(IndexSections is)
break
;
break
;
case
isEndIndex
:
case
isEndIndex
:
beginRTFChapter
();
beginRTFChapter
();
t
<<
R
tf_Style
[
"Heading1"
]
->
reference
;
t
<<
r
tf_Style
[
"Heading1"
]
->
reference
;
t
<<
theTranslator
->
trRTFGeneralIndex
()
<<
"
\\
par "
<<
endl
;
t
<<
theTranslator
->
trRTFGeneralIndex
()
<<
"
\\
par "
<<
endl
;
t
<<
R
tf_Style_Reset
<<
endl
;
t
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trRTFGeneralIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trRTFGeneralIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst INDEX
\\\\
c2
\\\\
*MERGEFORMAT}{
\\
fldrslt INDEX}}
\n
"
;
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst INDEX
\\\\
c2
\\\\
*MERGEFORMAT}{
\\
fldrslt INDEX}}
\n
"
;
...
@@ -1388,8 +825,8 @@ void RTFGenerator::lastIndexPage()
...
@@ -1388,8 +825,8 @@ void RTFGenerator::lastIndexPage()
t
<<
"
\\
sect
\\
sectd
\\
sbknone
\n
"
;
t
<<
"
\\
sect
\\
sectd
\\
sbknone
\n
"
;
// set footer
// set footer
t
<<
"{
\\
footer "
<<
R
tf_Style
[
"Footer"
]
->
reference
<<
"{
\\
chpgn}}
\n
"
;
t
<<
"{
\\
footer "
<<
r
tf_Style
[
"Footer"
]
->
reference
<<
"{
\\
chpgn}}
\n
"
;
//t <<
R
tf_Style["Heading1"]->reference << "\n";
//t <<
r
tf_Style["Heading1"]->reference << "\n";
}
}
...
@@ -1413,7 +850,7 @@ void RTFGenerator::startIndexList()
...
@@ -1413,7 +850,7 @@ void RTFGenerator::startIndexList()
DBG_RTF
(
t
<<
"{
\\
comment (startIndexList)}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment (startIndexList)}"
<<
endl
)
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
incrementIndentLevel
();
incrementIndentLevel
();
t
<<
Rtf_Style_Reset
<<
R
tf_LCList_DepthStyle
()
<<
endl
;
t
<<
rtf_Style_Reset
<<
r
tf_LCList_DepthStyle
()
<<
endl
;
newParagraph
();
newParagraph
();
m_omitParagraph
=
TRUE
;
m_omitParagraph
=
TRUE
;
}
}
...
@@ -1471,16 +908,16 @@ void RTFGenerator::writeListItem()
...
@@ -1471,16 +908,16 @@ void RTFGenerator::writeListItem()
{
{
DBG_RTF
(
t
<<
"{
\\
comment (writeListItem)}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment (writeListItem)}"
<<
endl
)
newParagraph
();
newParagraph
();
t
<<
R
tf_Style_Reset
;
t
<<
r
tf_Style_Reset
;
if
(
listItemInfo
[
m_listLevel
].
isEnum
)
if
(
listItemInfo
[
m_listLevel
].
isEnum
)
{
{
t
<<
R
tf_EList_DepthStyle
()
<<
endl
;
t
<<
r
tf_EList_DepthStyle
()
<<
endl
;
t
<<
listItemInfo
[
m_listLevel
].
number
<<
".
\\
tab "
;
t
<<
listItemInfo
[
m_listLevel
].
number
<<
".
\\
tab "
;
listItemInfo
[
m_listLevel
].
number
++
;
listItemInfo
[
m_listLevel
].
number
++
;
}
}
else
else
{
{
t
<<
R
tf_BList_DepthStyle
()
<<
endl
;
t
<<
r
tf_BList_DepthStyle
()
<<
endl
;
}
}
m_omitParagraph
=
TRUE
;
m_omitParagraph
=
TRUE
;
}
}
...
@@ -1489,12 +926,12 @@ void RTFGenerator::writeIndexItem(const char *ref,const char *fn,
...
@@ -1489,12 +926,12 @@ void RTFGenerator::writeIndexItem(const char *ref,const char *fn,
const
char
*
name
)
const
char
*
name
)
{
{
DBG_RTF
(
t
<<
"{
\\
comment (writeIndexItem)}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment (writeIndexItem)}"
<<
endl
)
//t <<
R
tf_LCList_DepthStyle() << endl;
//t <<
r
tf_LCList_DepthStyle() << endl;
docify
(
name
);
docify
(
name
);
if
(
!
ref
&&
fn
)
if
(
!
ref
&&
fn
)
{
{
t
<<
"
\\
tab "
;
t
<<
"
\\
tab "
;
W
riteRTFReference
(
fn
);
w
riteRTFReference
(
fn
);
t
<<
endl
;
t
<<
endl
;
}
}
else
else
...
@@ -1556,7 +993,7 @@ void RTFGenerator::writeStartAnnoItem(const char *,const char *f,
...
@@ -1556,7 +993,7 @@ void RTFGenerator::writeStartAnnoItem(const char *,const char *f,
if
(
f
&&
Config_getBool
(
"RTF_HYPERLINKS"
))
if
(
f
&&
Config_getBool
(
"RTF_HYPERLINKS"
))
{
{
t
<<
"{
\\
field {
\\
*
\\
fldinst { HYPERLINK
\\\\
l
\"
"
;
t
<<
"{
\\
field {
\\
*
\\
fldinst { HYPERLINK
\\\\
l
\"
"
;
t
<<
f
ormatBmkStr
(
f
);
t
<<
rtfF
ormatBmkStr
(
f
);
t
<<
"
\"
}{}"
;
t
<<
"
\"
}{}"
;
t
<<
"}{
\\
fldrslt {
\\
cs37
\\
ul
\\
cf2 "
;
t
<<
"}{
\\
fldrslt {
\\
cs37
\\
ul
\\
cf2 "
;
...
@@ -1577,7 +1014,7 @@ void RTFGenerator::writeEndAnnoItem(const char *name)
...
@@ -1577,7 +1014,7 @@ void RTFGenerator::writeEndAnnoItem(const char *name)
if
(
name
)
if
(
name
)
{
{
t
<<
"
\\
tab "
;
t
<<
"
\\
tab "
;
W
riteRTFReference
(
name
);
w
riteRTFReference
(
name
);
t
<<
endl
;
t
<<
endl
;
}
}
else
else
...
@@ -1611,7 +1048,7 @@ void RTFGenerator::endIndexValue(const char *name,bool hasBrief)
...
@@ -1611,7 +1048,7 @@ void RTFGenerator::endIndexValue(const char *name,bool hasBrief)
if
(
name
)
if
(
name
)
{
{
t
<<
"
\\
tab "
;
t
<<
"
\\
tab "
;
W
riteRTFReference
(
name
);
w
riteRTFReference
(
name
);
t
<<
endl
;
t
<<
endl
;
}
}
else
else
...
@@ -1626,14 +1063,14 @@ void RTFGenerator::startSubsection()
...
@@ -1626,14 +1063,14 @@ void RTFGenerator::startSubsection()
//beginRTFSubSection();
//beginRTFSubSection();
t
<<
"
\n
"
;
t
<<
"
\n
"
;
DBG_RTF
(
t
<<
"{
\\
comment Begin SubSection}
\n
"
)
DBG_RTF
(
t
<<
"{
\\
comment Begin SubSection}
\n
"
)
t
<<
R
tf_Style_Reset
;
t
<<
r
tf_Style_Reset
;
t
<<
R
tf_Style
[
"Heading3"
]
->
reference
<<
"
\n
"
;
t
<<
r
tf_Style
[
"Heading3"
]
->
reference
<<
"
\n
"
;
}
}
void
RTFGenerator
::
endSubsection
()
void
RTFGenerator
::
endSubsection
()
{
{
newParagraph
();
newParagraph
();
t
<<
R
tf_Style_Reset
<<
endl
;
t
<<
r
tf_Style_Reset
<<
endl
;
}
}
void
RTFGenerator
::
startSubsubsection
()
void
RTFGenerator
::
startSubsubsection
()
...
@@ -1642,7 +1079,7 @@ void RTFGenerator::startSubsubsection()
...
@@ -1642,7 +1079,7 @@ void RTFGenerator::startSubsubsection()
t
<<
"
\n
"
;
t
<<
"
\n
"
;
DBG_RTF
(
t
<<
"{
\\
comment Begin SubSubSection}
\n
"
)
DBG_RTF
(
t
<<
"{
\\
comment Begin SubSubSection}
\n
"
)
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
t
<<
Rtf_Style_Reset
<<
R
tf_Style
[
"Heading4"
]
->
reference
<<
"
\n
"
;
t
<<
rtf_Style_Reset
<<
r
tf_Style
[
"Heading4"
]
->
reference
<<
"
\n
"
;
}
}
void
RTFGenerator
::
endSubsubsection
()
void
RTFGenerator
::
endSubsubsection
()
...
@@ -1735,7 +1172,7 @@ void RTFGenerator::startTextLink(const char *f,const char *anchor)
...
@@ -1735,7 +1172,7 @@ void RTFGenerator::startTextLink(const char *f,const char *anchor)
}
}
t
<<
"{
\\
field {
\\
*
\\
fldinst { HYPERLINK
\\\\
l
\"
"
;
t
<<
"{
\\
field {
\\
*
\\
fldinst { HYPERLINK
\\\\
l
\"
"
;
t
<<
f
ormatBmkStr
(
ref
);
t
<<
rtfF
ormatBmkStr
(
ref
);
t
<<
"
\"
}{}"
;
t
<<
"
\"
}{}"
;
t
<<
"}{
\\
fldrslt {
\\
cs37
\\
ul
\\
cf2 "
;
t
<<
"}{
\\
fldrslt {
\\
cs37
\\
ul
\\
cf2 "
;
}
}
...
@@ -1766,7 +1203,7 @@ void RTFGenerator::writeObjectLink(const char *ref, const char *f,
...
@@ -1766,7 +1203,7 @@ void RTFGenerator::writeObjectLink(const char *ref, const char *f,
}
}
t
<<
"{
\\
field {
\\
*
\\
fldinst { HYPERLINK
\\\\
l
\"
"
;
t
<<
"{
\\
field {
\\
*
\\
fldinst { HYPERLINK
\\\\
l
\"
"
;
t
<<
f
ormatBmkStr
(
refName
);
t
<<
rtfF
ormatBmkStr
(
refName
);
t
<<
"
\"
}{}"
;
t
<<
"
\"
}{}"
;
t
<<
"}{
\\
fldrslt {
\\
cs37
\\
ul
\\
cf2 "
;
t
<<
"}{
\\
fldrslt {
\\
cs37
\\
ul
\\
cf2 "
;
...
@@ -1800,7 +1237,7 @@ void RTFGenerator::endPageRef(const char *clname, const char *anchor)
...
@@ -1800,7 +1237,7 @@ void RTFGenerator::endPageRef(const char *clname, const char *anchor)
ref
+=
'_'
;
ref
+=
'_'
;
ref
+=
anchor
;
ref
+=
anchor
;
}
}
W
riteRTFReference
(
ref
);
w
riteRTFReference
(
ref
);
endEmphasis
();
endEmphasis
();
t
<<
")"
;
t
<<
")"
;
}
}
...
@@ -1822,7 +1259,7 @@ void RTFGenerator::writeCodeLink(const char *ref,const char *f,
...
@@ -1822,7 +1259,7 @@ void RTFGenerator::writeCodeLink(const char *ref,const char *f,
}
}
t
<<
"{
\\
field {
\\
*
\\
fldinst { HYPERLINK
\\\\
l
\"
"
;
t
<<
"{
\\
field {
\\
*
\\
fldinst { HYPERLINK
\\\\
l
\"
"
;
t
<<
f
ormatBmkStr
(
refName
);
t
<<
rtfF
ormatBmkStr
(
refName
);
t
<<
"
\"
}{}"
;
t
<<
"
\"
}{}"
;
t
<<
"}{
\\
fldrslt {
\\
cs37
\\
ul
\\
cf2 "
;
t
<<
"}{
\\
fldrslt {
\\
cs37
\\
ul
\\
cf2 "
;
...
@@ -1841,13 +1278,13 @@ void RTFGenerator::startTitleHead(const char *)
...
@@ -1841,13 +1278,13 @@ void RTFGenerator::startTitleHead(const char *)
DBG_RTF
(
t
<<
"{
\\
comment startTitleHead}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment startTitleHead}"
<<
endl
)
// beginRTFSection();
// beginRTFSection();
t
<<
Rtf_Style_Reset
<<
R
tf_Style
[
"Heading2"
]
->
reference
<<
endl
;
t
<<
rtf_Style_Reset
<<
r
tf_Style
[
"Heading2"
]
->
reference
<<
endl
;
}
}
void
RTFGenerator
::
endTitleHead
(
const
char
*
fileName
,
const
char
*
name
)
void
RTFGenerator
::
endTitleHead
(
const
char
*
fileName
,
const
char
*
name
)
{
{
DBG_RTF
(
t
<<
"{
\\
comment endTitleHead}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment endTitleHead}"
<<
endl
)
t
<<
"
\\
par "
<<
R
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par "
<<
r
tf_Style_Reset
<<
endl
;
if
(
name
)
if
(
name
)
{
{
// make table of contents entry
// make table of contents entry
...
@@ -1883,8 +1320,8 @@ void RTFGenerator::startGroupHeader()
...
@@ -1883,8 +1320,8 @@ void RTFGenerator::startGroupHeader()
{
{
DBG_RTF
(
t
<<
"{
\\
comment startGroupHeader}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment startGroupHeader}"
<<
endl
)
newParagraph
();
newParagraph
();
t
<<
R
tf_Style_Reset
;
t
<<
r
tf_Style_Reset
;
t
<<
R
tf_Style
[
"Heading3"
]
->
reference
;
t
<<
r
tf_Style
[
"Heading3"
]
->
reference
;
t
<<
endl
;
t
<<
endl
;
}
}
...
@@ -1892,7 +1329,7 @@ void RTFGenerator::endGroupHeader()
...
@@ -1892,7 +1329,7 @@ void RTFGenerator::endGroupHeader()
{
{
DBG_RTF
(
t
<<
"{
\\
comment endGroupHeader}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment endGroupHeader}"
<<
endl
)
newParagraph
();
newParagraph
();
t
<<
R
tf_Style_Reset
<<
endl
;
t
<<
r
tf_Style_Reset
<<
endl
;
}
}
void
RTFGenerator
::
startMemberDoc
(
const
char
*
clname
,
void
RTFGenerator
::
startMemberDoc
(
const
char
*
clname
,
...
@@ -1906,10 +1343,10 @@ void RTFGenerator::startMemberDoc(const char *clname,
...
@@ -1906,10 +1343,10 @@ void RTFGenerator::startMemberDoc(const char *clname,
addIndexItem
(
memname
,
clname
);
addIndexItem
(
memname
,
clname
);
addIndexItem
(
clname
,
memname
);
addIndexItem
(
clname
,
memname
);
}
}
t
<<
Rtf_Style_Reset
<<
R
tf_Style
[
"Heading4"
]
->
reference
;
t
<<
rtf_Style_Reset
<<
r
tf_Style
[
"Heading4"
]
->
reference
;
//styleStack.push(
R
tf_Style_Heading4);
//styleStack.push(
r
tf_Style_Heading4);
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
//printf("RTFGenerator::startMemberDoc() `%s'\n",
R
tf_Style["Heading4"]->reference);
//printf("RTFGenerator::startMemberDoc() `%s'\n",
r
tf_Style["Heading4"]->reference);
startBold
();
startBold
();
t
<<
endl
;
t
<<
endl
;
}
}
...
@@ -1920,7 +1357,7 @@ void RTFGenerator::endMemberDoc()
...
@@ -1920,7 +1357,7 @@ void RTFGenerator::endMemberDoc()
t
<<
"}"
<<
endl
;
t
<<
"}"
<<
endl
;
//const char *style = styleStack.pop();
//const char *style = styleStack.pop();
//printf("RTFGenerator::endMemberDoc() `%s'\n",style);
//printf("RTFGenerator::endMemberDoc() `%s'\n",style);
//ASSERT(style==
R
tf_Style["Heading4"]->reference);
//ASSERT(style==
r
tf_Style["Heading4"]->reference);
endBold
();
endBold
();
newParagraph
();
newParagraph
();
}
}
...
@@ -1946,10 +1383,10 @@ void RTFGenerator::endDoxyAnchor(const char *fName,const char *anchor)
...
@@ -1946,10 +1383,10 @@ void RTFGenerator::endDoxyAnchor(const char *fName,const char *anchor)
DBG_RTF
(
t
<<
"{
\\
comment endDoxyAnchor}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment endDoxyAnchor}"
<<
endl
)
t
<<
"{
\\
bkmkstart "
;
t
<<
"{
\\
bkmkstart "
;
t
<<
f
ormatBmkStr
(
ref
);
t
<<
rtfF
ormatBmkStr
(
ref
);
t
<<
"}"
<<
endl
;
t
<<
"}"
<<
endl
;
t
<<
"{
\\
bkmkend "
;
t
<<
"{
\\
bkmkend "
;
t
<<
f
ormatBmkStr
(
ref
);
t
<<
rtfF
ormatBmkStr
(
ref
);
t
<<
"}"
<<
endl
;
t
<<
"}"
<<
endl
;
}
}
...
@@ -1979,13 +1416,13 @@ void RTFGenerator::startIndent()
...
@@ -1979,13 +1416,13 @@ void RTFGenerator::startIndent()
incrementIndentLevel
();
incrementIndentLevel
();
DBG_RTF
(
t
<<
"{
\\
comment (startIndent) }"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment (startIndent) }"
<<
endl
)
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
t
<<
Rtf_Style_Reset
<<
R
tf_CList_DepthStyle
()
<<
endl
;
t
<<
rtf_Style_Reset
<<
r
tf_CList_DepthStyle
()
<<
endl
;
//styleStack.push(style);
//styleStack.push(style);
}
}
void
RTFGenerator
::
endIndent
()
void
RTFGenerator
::
endIndent
()
{
{
//const char *style = /*
R
tf_CList_DepthStyle(); */
//const char *style = /*
r
tf_CList_DepthStyle(); */
t
<<
"}"
<<
endl
;
t
<<
"}"
<<
endl
;
decrementIndentLevel
();
decrementIndentLevel
();
}
}
...
@@ -1995,7 +1432,7 @@ void RTFGenerator::startDescription()
...
@@ -1995,7 +1432,7 @@ void RTFGenerator::startDescription()
{
{
DBG_RTF
(
t
<<
"{
\\
comment (startDescription)}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment (startDescription)}"
<<
endl
)
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
t
<<
Rtf_Style_Reset
<<
R
tf_CList_DepthStyle
();
t
<<
rtf_Style_Reset
<<
r
tf_CList_DepthStyle
();
}
}
void
RTFGenerator
::
endDescription
()
void
RTFGenerator
::
endDescription
()
...
@@ -2024,7 +1461,7 @@ void RTFGenerator::startMemberDescription()
...
@@ -2024,7 +1461,7 @@ void RTFGenerator::startMemberDescription()
DBG_RTF
(
t
<<
"{
\\
comment (startMemberDescription)}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment (startMemberDescription)}"
<<
endl
)
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
incrementIndentLevel
();
incrementIndentLevel
();
t
<<
Rtf_Style_Reset
<<
R
tf_CList_DepthStyle
();
t
<<
rtf_Style_Reset
<<
r
tf_CList_DepthStyle
();
startEmphasis
();
startEmphasis
();
}
}
...
@@ -2053,7 +1490,7 @@ void RTFGenerator::endDescTitle()
...
@@ -2053,7 +1490,7 @@ void RTFGenerator::endDescTitle()
t
<<
"}"
;
t
<<
"}"
;
newParagraph
();
newParagraph
();
incrementIndentLevel
();
incrementIndentLevel
();
t
<<
Rtf_Style_Reset
<<
R
tf_DList_DepthStyle
();
t
<<
rtf_Style_Reset
<<
r
tf_DList_DepthStyle
();
}
}
void
RTFGenerator
::
writeDescItem
()
void
RTFGenerator
::
writeDescItem
()
...
@@ -2075,7 +1512,7 @@ void RTFGenerator::startSection(const char *,const char *title,SectionInfo::Sect
...
@@ -2075,7 +1512,7 @@ void RTFGenerator::startSection(const char *,const char *title,SectionInfo::Sect
{
{
DBG_RTF
(
t
<<
"{
\\
comment (startSection)}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment (startSection)}"
<<
endl
)
t
<<
"{"
;
t
<<
"{"
;
t
<<
R
tf_Style_Reset
;
t
<<
r
tf_Style_Reset
;
int
num
=
4
;
int
num
=
4
;
switch
(
type
)
switch
(
type
)
{
{
...
@@ -2087,7 +1524,7 @@ void RTFGenerator::startSection(const char *,const char *title,SectionInfo::Sect
...
@@ -2087,7 +1524,7 @@ void RTFGenerator::startSection(const char *,const char *title,SectionInfo::Sect
QCString
heading
;
QCString
heading
;
heading
.
sprintf
(
"Heading%d"
,
num
);
heading
.
sprintf
(
"Heading%d"
,
num
);
// set style
// set style
t
<<
R
tf_Style
[
heading
]
->
reference
;
t
<<
r
tf_Style
[
heading
]
->
reference
;
// make table of contents entry
// make table of contents entry
t
<<
"{
\\
tc
\\
tcl"
<<
num
<<
"
\\
v "
;
t
<<
"{
\\
tc
\\
tcl"
<<
num
<<
"
\\
v "
;
docify
(
title
);
docify
(
title
);
...
@@ -2117,7 +1554,7 @@ void RTFGenerator::writeSectionRef(const char *ref,const char *,
...
@@ -2117,7 +1554,7 @@ void RTFGenerator::writeSectionRef(const char *ref,const char *,
endBold
();
endBold
();
t
<<
" ("
;
t
<<
" ("
;
docify
(
theTranslator
->
trPageAbbreviation
());
docify
(
theTranslator
->
trPageAbbreviation
());
W
riteRTFReference
(
lab
);
w
riteRTFReference
(
lab
);
t
<<
")"
<<
endl
;
t
<<
")"
<<
endl
;
}
}
}
}
...
@@ -2127,7 +1564,7 @@ void RTFGenerator::writeSectionRefItem(const char *,const char *lab,
...
@@ -2127,7 +1564,7 @@ void RTFGenerator::writeSectionRefItem(const char *,const char *lab,
{
{
docify
(
title
);
docify
(
title
);
t
<<
"
\\
tab"
;
t
<<
"
\\
tab"
;
W
riteRTFReference
(
lab
);
w
riteRTFReference
(
lab
);
t
<<
endl
;
t
<<
endl
;
}
}
...
@@ -2258,7 +1695,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d,
...
@@ -2258,7 +1695,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d,
// display the file
// display the file
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
t
<<
R
tf_Style_Reset
<<
endl
;
t
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
t
<<
fileName
<<
".png"
;
t
<<
fileName
<<
".png"
;
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
...
@@ -2273,7 +1710,7 @@ void RTFGenerator::writeFormula(const char *,const char *text)
...
@@ -2273,7 +1710,7 @@ void RTFGenerator::writeFormula(const char *,const char *text)
void
RTFGenerator
::
startMemberItem
(
int
)
void
RTFGenerator
::
startMemberItem
(
int
)
{
{
DBG_RTF
(
t
<<
"{
\\
comment startMemberItem }"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment startMemberItem }"
<<
endl
)
t
<<
Rtf_Style_Reset
<<
R
tf_BList_DepthStyle
()
<<
endl
;
// set style to apropriate depth
t
<<
rtf_Style_Reset
<<
r
tf_BList_DepthStyle
()
<<
endl
;
// set style to apropriate depth
}
}
void
RTFGenerator
::
endMemberItem
(
bool
)
void
RTFGenerator
::
endMemberItem
(
bool
)
...
@@ -2299,14 +1736,14 @@ void RTFGenerator::writeAnchor(const char *fileName,const char *name)
...
@@ -2299,14 +1736,14 @@ void RTFGenerator::writeAnchor(const char *fileName,const char *name)
}
}
DBG_RTF
(
t
<<
"{
\\
comment writeAncheor ("
<<
anchor
<<
")}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment writeAncheor ("
<<
anchor
<<
")}"
<<
endl
)
t
<<
"{
\\
bkmkstart "
<<
f
ormatBmkStr
(
anchor
)
<<
"}"
<<
endl
;
t
<<
"{
\\
bkmkstart "
<<
rtfF
ormatBmkStr
(
anchor
)
<<
"}"
<<
endl
;
t
<<
"{
\\
bkmkend "
<<
f
ormatBmkStr
(
anchor
)
<<
"}"
<<
endl
;
t
<<
"{
\\
bkmkend "
<<
rtfF
ormatBmkStr
(
anchor
)
<<
"}"
<<
endl
;
}
}
void
RTFGenerator
::
W
riteRTFReference
(
const
char
*
label
)
void
RTFGenerator
::
w
riteRTFReference
(
const
char
*
label
)
{
{
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst PAGEREF "
;
t
<<
"{
\\
field
\\
fldedit {
\\
*
\\
fldinst PAGEREF "
;
t
<<
f
ormatBmkStr
(
label
);
t
<<
rtfF
ormatBmkStr
(
label
);
t
<<
"
\\\\
*MERGEFORMAT}{
\\
fldrslt pagenum}}"
;
t
<<
"
\\\\
*MERGEFORMAT}{
\\
fldrslt pagenum}}"
;
}
}
...
@@ -2314,8 +1751,8 @@ void RTFGenerator::startCodeFragment()
...
@@ -2314,8 +1751,8 @@ void RTFGenerator::startCodeFragment()
{
{
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
newParagraph
();
newParagraph
();
t
<<
Rtf_Style_Reset
<<
R
tf_Code_DepthStyle
();
t
<<
rtf_Style_Reset
<<
r
tf_Code_DepthStyle
();
//styleStack.push(
R
tf_Style_CodeExample);
//styleStack.push(
r
tf_Style_CodeExample);
}
}
void
RTFGenerator
::
endCodeFragment
()
void
RTFGenerator
::
endCodeFragment
()
...
@@ -2323,7 +1760,7 @@ void RTFGenerator::endCodeFragment()
...
@@ -2323,7 +1760,7 @@ void RTFGenerator::endCodeFragment()
newParagraph
();
newParagraph
();
//styleStack.pop();
//styleStack.pop();
//printf("RTFGenerator::endCodeFrament() top=%s\n",styleStack.top());
//printf("RTFGenerator::endCodeFrament() top=%s\n",styleStack.top());
//t <<
R
tf_Style_Reset << styleStack.top() << endl;
//t <<
r
tf_Style_Reset << styleStack.top() << endl;
DBG_RTF
(
t
<<
"{
\\
comment (endCodeFragment) }"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment (endCodeFragment) }"
<<
endl
)
t
<<
"}"
<<
endl
;
t
<<
"}"
<<
endl
;
m_omitParagraph
=
TRUE
;
m_omitParagraph
=
TRUE
;
...
@@ -2360,7 +1797,7 @@ void RTFGenerator::startImage(const char *name,const char *,bool)
...
@@ -2360,7 +1797,7 @@ void RTFGenerator::startImage(const char *name,const char *,bool)
{
{
newParagraph
();
newParagraph
();
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
t
<<
R
tf_Style_Reset
<<
endl
;
t
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
t
<<
name
;
t
<<
name
;
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
...
@@ -2384,7 +1821,7 @@ void RTFGenerator::startDotFile(const char *name,bool)
...
@@ -2384,7 +1821,7 @@ void RTFGenerator::startDotFile(const char *name,bool)
writeDotGraphFromFile
(
name
,
outDir
,
baseName
,
BITMAP
);
writeDotGraphFromFile
(
name
,
outDir
,
baseName
,
BITMAP
);
newParagraph
();
newParagraph
();
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
t
<<
R
tf_Style_Reset
<<
endl
;
t
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
t
<<
outDir
<<
"
\\
"
<<
baseName
;
t
<<
outDir
<<
"
\\
"
<<
baseName
;
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
...
@@ -2401,7 +1838,7 @@ void RTFGenerator::startDescTable()
...
@@ -2401,7 +1838,7 @@ void RTFGenerator::startDescTable()
DBG_RTF
(
t
<<
"{
\\
comment (startDescTable) }"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment (startDescTable) }"
<<
endl
)
//t << "{" << endl;
//t << "{" << endl;
//incrementIndentLevel();
//incrementIndentLevel();
//t <<
Rtf_Style_Reset << R
tf_CList_DepthStyle();
//t <<
rtf_Style_Reset << r
tf_CList_DepthStyle();
}
}
void
RTFGenerator
::
endDescTable
()
void
RTFGenerator
::
endDescTable
()
...
@@ -2409,12 +1846,12 @@ void RTFGenerator::endDescTable()
...
@@ -2409,12 +1846,12 @@ void RTFGenerator::endDescTable()
//decrementIndentLevel();
//decrementIndentLevel();
DBG_RTF
(
t
<<
"{
\\
comment (endDescTable)}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment (endDescTable)}"
<<
endl
)
//t << "}" << endl;
//t << "}" << endl;
//t <<
R
tf_Style_Reset << styleStack.top();
//t <<
r
tf_Style_Reset << styleStack.top();
}
}
void
RTFGenerator
::
startDescTableTitle
()
void
RTFGenerator
::
startDescTableTitle
()
{
{
//t <<
R
tf_BList_DepthStyle() << endl;
//t <<
r
tf_BList_DepthStyle() << endl;
DBG_RTF
(
t
<<
"{
\\
comment (startDescTableTitle) }"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment (startDescTableTitle) }"
<<
endl
)
startBold
();
startBold
();
startEmphasis
();
startEmphasis
();
...
@@ -2464,57 +1901,57 @@ void RTFGenerator::decrementIndentLevel()
...
@@ -2464,57 +1901,57 @@ void RTFGenerator::decrementIndentLevel()
}
}
// a style for list formatted with "list continue" style
// a style for list formatted with "list continue" style
const
char
*
RTFGenerator
::
R
tf_CList_DepthStyle
()
const
char
*
RTFGenerator
::
r
tf_CList_DepthStyle
()
{
{
QCString
n
=
makeIndexName
(
"ListContinue"
,
m_listLevel
);
QCString
n
=
makeIndexName
(
"ListContinue"
,
m_listLevel
);
return
R
tf_Style
[
n
]
->
reference
;
return
r
tf_Style
[
n
]
->
reference
;
}
}
// a style for list formatted as a "latext style" table of contents
// a style for list formatted as a "latext style" table of contents
const
char
*
RTFGenerator
::
R
tf_LCList_DepthStyle
()
const
char
*
RTFGenerator
::
r
tf_LCList_DepthStyle
()
{
{
QCString
n
=
makeIndexName
(
"LatexTOC"
,
m_listLevel
);
QCString
n
=
makeIndexName
(
"LatexTOC"
,
m_listLevel
);
return
R
tf_Style
[
n
]
->
reference
;
return
r
tf_Style
[
n
]
->
reference
;
}
}
// a style for list formatted as a "bullet" style
// a style for list formatted as a "bullet" style
const
char
*
RTFGenerator
::
R
tf_BList_DepthStyle
()
const
char
*
RTFGenerator
::
r
tf_BList_DepthStyle
()
{
{
QCString
n
=
makeIndexName
(
"ListBullet"
,
m_listLevel
);
QCString
n
=
makeIndexName
(
"ListBullet"
,
m_listLevel
);
return
R
tf_Style
[
n
]
->
reference
;
return
r
tf_Style
[
n
]
->
reference
;
}
}
// a style for list formatted as a "enumeration" style
// a style for list formatted as a "enumeration" style
const
char
*
RTFGenerator
::
R
tf_EList_DepthStyle
()
const
char
*
RTFGenerator
::
r
tf_EList_DepthStyle
()
{
{
QCString
n
=
makeIndexName
(
"ListEnum"
,
m_listLevel
);
QCString
n
=
makeIndexName
(
"ListEnum"
,
m_listLevel
);
return
R
tf_Style
[
n
]
->
reference
;
return
r
tf_Style
[
n
]
->
reference
;
}
}
const
char
*
RTFGenerator
::
R
tf_DList_DepthStyle
()
const
char
*
RTFGenerator
::
r
tf_DList_DepthStyle
()
{
{
QCString
n
=
makeIndexName
(
"DescContinue"
,
m_listLevel
);
QCString
n
=
makeIndexName
(
"DescContinue"
,
m_listLevel
);
return
R
tf_Style
[
n
]
->
reference
;
return
r
tf_Style
[
n
]
->
reference
;
}
}
const
char
*
RTFGenerator
::
R
tf_Code_DepthStyle
()
const
char
*
RTFGenerator
::
r
tf_Code_DepthStyle
()
{
{
QCString
n
=
makeIndexName
(
"CodeExample"
,
m_listLevel
);
QCString
n
=
makeIndexName
(
"CodeExample"
,
m_listLevel
);
return
R
tf_Style
[
n
]
->
reference
;
return
r
tf_Style
[
n
]
->
reference
;
}
}
void
RTFGenerator
::
startTextBlock
(
bool
dense
)
void
RTFGenerator
::
startTextBlock
(
bool
dense
)
{
{
DBG_RTF
(
t
<<
"{
\\
comment startTextBlock}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment startTextBlock}"
<<
endl
)
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
t
<<
R
tf_Style_Reset
;
t
<<
r
tf_Style_Reset
;
if
(
dense
)
// no spacing between "paragraphs"
if
(
dense
)
// no spacing between "paragraphs"
{
{
t
<<
R
tf_Style
[
"DenseText"
]
->
reference
;
t
<<
r
tf_Style
[
"DenseText"
]
->
reference
;
}
}
else
// some spacing
else
// some spacing
{
{
t
<<
R
tf_Style
[
"BodyText"
]
->
reference
;
t
<<
r
tf_Style
[
"BodyText"
]
->
reference
;
}
}
}
}
...
@@ -2537,7 +1974,7 @@ void RTFGenerator::startMemberSubtitle()
...
@@ -2537,7 +1974,7 @@ void RTFGenerator::startMemberSubtitle()
{
{
DBG_RTF
(
t
<<
"{
\\
comment startMemberSubtitle}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment startMemberSubtitle}"
<<
endl
)
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
t
<<
Rtf_Style_Reset
<<
R
tf_CList_DepthStyle
()
<<
endl
;
t
<<
rtf_Style_Reset
<<
r
tf_CList_DepthStyle
()
<<
endl
;
}
}
void
RTFGenerator
::
endMemberSubtitle
()
void
RTFGenerator
::
endMemberSubtitle
()
...
@@ -2742,7 +2179,7 @@ void RTFGenerator::endDotGraph(DotClassGraph &g)
...
@@ -2742,7 +2179,7 @@ void RTFGenerator::endDotGraph(DotClassGraph &g)
// display the file
// display the file
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
t
<<
R
tf_Style_Reset
<<
endl
;
t
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
t
<<
fileName
<<
"."
<<
Config_getEnum
(
"DOT_IMAGE_FORMAT"
);
t
<<
fileName
<<
"."
<<
Config_getEnum
(
"DOT_IMAGE_FORMAT"
);
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
...
@@ -2761,7 +2198,7 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
...
@@ -2761,7 +2198,7 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
// display the file
// display the file
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
t
<<
R
tf_Style_Reset
<<
endl
;
t
<<
r
tf_Style_Reset
<<
endl
;
t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
t
<<
"
\\
par
\\
pard
\\
qc {
\\
field
\\
flddirty {
\\
*
\\
fldinst INCLUDEPICTURE "
;
t
<<
fileName
<<
"."
<<
Config_getEnum
(
"DOT_IMAGE_FORMAT"
);
t
<<
fileName
<<
"."
<<
Config_getEnum
(
"DOT_IMAGE_FORMAT"
);
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
t
<<
"
\\\\
d
\\\\
*MERGEFORMAT}{
\\
fldrslt IMAGE}}
\\
par"
<<
endl
;
...
@@ -2870,14 +2307,14 @@ void RTFGenerator::startMemberGroupHeader(bool hasHeader)
...
@@ -2870,14 +2307,14 @@ void RTFGenerator::startMemberGroupHeader(bool hasHeader)
DBG_RTF
(
t
<<
"{
\\
comment startMemberGroupHeader}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment startMemberGroupHeader}"
<<
endl
)
t
<<
"{"
<<
endl
;
t
<<
"{"
<<
endl
;
if
(
hasHeader
)
incrementIndentLevel
();
if
(
hasHeader
)
incrementIndentLevel
();
t
<<
Rtf_Style_Reset
<<
R
tf_Style
[
"GroupHeader"
]
->
reference
;
t
<<
rtf_Style_Reset
<<
r
tf_Style
[
"GroupHeader"
]
->
reference
;
}
}
void
RTFGenerator
::
endMemberGroupHeader
()
void
RTFGenerator
::
endMemberGroupHeader
()
{
{
DBG_RTF
(
t
<<
"{
\\
comment endMemberGroupHeader}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment endMemberGroupHeader}"
<<
endl
)
newParagraph
();
newParagraph
();
t
<<
Rtf_Style_Reset
<<
R
tf_CList_DepthStyle
();
t
<<
rtf_Style_Reset
<<
r
tf_CList_DepthStyle
();
}
}
void
RTFGenerator
::
startMemberGroupDocs
()
void
RTFGenerator
::
startMemberGroupDocs
()
...
@@ -2896,7 +2333,7 @@ void RTFGenerator::endMemberGroupDocs()
...
@@ -2896,7 +2333,7 @@ void RTFGenerator::endMemberGroupDocs()
void
RTFGenerator
::
startMemberGroup
()
void
RTFGenerator
::
startMemberGroup
()
{
{
DBG_RTF
(
t
<<
"{
\\
comment startMemberGroup}"
<<
endl
)
DBG_RTF
(
t
<<
"{
\\
comment startMemberGroup}"
<<
endl
)
t
<<
Rtf_Style_Reset
<<
R
tf_BList_DepthStyle
()
<<
endl
;
t
<<
rtf_Style_Reset
<<
r
tf_BList_DepthStyle
()
<<
endl
;
}
}
void
RTFGenerator
::
endMemberGroup
(
bool
hasHeader
)
void
RTFGenerator
::
endMemberGroup
(
bool
hasHeader
)
...
@@ -2925,7 +2362,7 @@ void RTFGenerator::startSimpleSect(SectionTypes,const char *file,const char *anc
...
@@ -2925,7 +2362,7 @@ void RTFGenerator::startSimpleSect(SectionTypes,const char *file,const char *anc
t
<<
"}"
;
t
<<
"}"
;
newParagraph
();
newParagraph
();
incrementIndentLevel
();
incrementIndentLevel
();
t
<<
Rtf_Style_Reset
<<
R
tf_DList_DepthStyle
();
t
<<
rtf_Style_Reset
<<
r
tf_DList_DepthStyle
();
}
}
void
RTFGenerator
::
endSimpleSect
()
void
RTFGenerator
::
endSimpleSect
()
...
@@ -2949,7 +2386,7 @@ void RTFGenerator::startParamList(ParamListTypes,const char *title)
...
@@ -2949,7 +2386,7 @@ void RTFGenerator::startParamList(ParamListTypes,const char *title)
t
<<
"}"
;
t
<<
"}"
;
newParagraph
();
newParagraph
();
incrementIndentLevel
();
incrementIndentLevel
();
t
<<
Rtf_Style_Reset
<<
R
tf_DList_DepthStyle
();
t
<<
rtf_Style_Reset
<<
r
tf_DList_DepthStyle
();
}
}
void
RTFGenerator
::
endParamList
()
void
RTFGenerator
::
endParamList
()
...
...
src/rtfgen.h
View file @
0a37457c
...
@@ -107,7 +107,7 @@ class RTFGenerator : public OutputGenerator
...
@@ -107,7 +107,7 @@ class RTFGenerator : public OutputGenerator
//void memberGroupSeparator() {}
//void memberGroupSeparator() {}
void
insertMemberAlign
()
{}
void
insertMemberAlign
()
{}
void
writeRuler
()
{
RtfwriteRuler_thin
();};
void
writeRuler
()
{
rtfwriteRuler_thin
();
}
void
writeAnchor
(
const
char
*
fileName
,
const
char
*
name
);
void
writeAnchor
(
const
char
*
fileName
,
const
char
*
name
);
void
startCodeFragment
();
void
startCodeFragment
();
...
@@ -262,12 +262,12 @@ class RTFGenerator : public OutputGenerator
...
@@ -262,12 +262,12 @@ class RTFGenerator : public OutputGenerator
RTFGenerator
(
const
RTFGenerator
&
);
RTFGenerator
(
const
RTFGenerator
&
);
RTFGenerator
&
operator
=
(
const
RTFGenerator
&
);
RTFGenerator
&
operator
=
(
const
RTFGenerator
&
);
const
char
*
R
tf_BList_DepthStyle
();
const
char
*
r
tf_BList_DepthStyle
();
const
char
*
R
tf_CList_DepthStyle
();
const
char
*
r
tf_CList_DepthStyle
();
const
char
*
R
tf_EList_DepthStyle
();
const
char
*
r
tf_EList_DepthStyle
();
const
char
*
R
tf_LCList_DepthStyle
();
const
char
*
r
tf_LCList_DepthStyle
();
const
char
*
R
tf_DList_DepthStyle
();
const
char
*
r
tf_DList_DepthStyle
();
const
char
*
R
tf_Code_DepthStyle
();
const
char
*
r
tf_Code_DepthStyle
();
void
incrementIndentLevel
();
void
incrementIndentLevel
();
void
decrementIndentLevel
();
void
decrementIndentLevel
();
int
col
;
int
col
;
...
@@ -280,11 +280,11 @@ class RTFGenerator : public OutputGenerator
...
@@ -280,11 +280,11 @@ class RTFGenerator : public OutputGenerator
void
beginRTFDocument
();
void
beginRTFDocument
();
void
beginRTFChapter
();
void
beginRTFChapter
();
void
beginRTFSection
();
void
beginRTFSection
();
void
R
tfwriteRuler_doubleline
()
{
t
<<
"{
\\
pard
\\
widctlpar
\\
brdrb
\\
brdrdb
\\
brdrw15
\\
brsp20
\\
adjustright
\\
par}"
<<
endl
;
};
void
r
tfwriteRuler_doubleline
()
{
t
<<
"{
\\
pard
\\
widctlpar
\\
brdrb
\\
brdrdb
\\
brdrw15
\\
brsp20
\\
adjustright
\\
par}"
<<
endl
;
};
void
R
tfwriteRuler_emboss
()
{
t
<<
"{
\\
pard
\\
widctlpar
\\
brdrb
\\
brdremboss
\\
brdrw15
\\
brsp20
\\
adjustright
\\
par}"
<<
endl
;
};
void
r
tfwriteRuler_emboss
()
{
t
<<
"{
\\
pard
\\
widctlpar
\\
brdrb
\\
brdremboss
\\
brdrw15
\\
brsp20
\\
adjustright
\\
par}"
<<
endl
;
};
void
R
tfwriteRuler_thick
()
{
t
<<
"{
\\
pard
\\
widctlpar
\\
brdrb
\\
brdrs
\\
brdrw75
\\
brsp20
\\
adjustright
\\
par}"
<<
endl
;
};
void
r
tfwriteRuler_thick
()
{
t
<<
"{
\\
pard
\\
widctlpar
\\
brdrb
\\
brdrs
\\
brdrw75
\\
brsp20
\\
adjustright
\\
par}"
<<
endl
;
};
void
R
tfwriteRuler_thin
()
{
t
<<
"{
\\
pard
\\
widctlpar
\\
brdrb
\\
brdrs
\\
brdrw5
\\
brsp20
\\
adjustright
\\
par}"
<<
endl
;
};
void
r
tfwriteRuler_thin
()
{
t
<<
"{
\\
pard
\\
widctlpar
\\
brdrb
\\
brdrs
\\
brdrw5
\\
brsp20
\\
adjustright
\\
par}"
<<
endl
;
};
void
W
riteRTFReference
(
const
char
*
label
);
void
w
riteRTFReference
(
const
char
*
label
);
char
*
getMultiByte
(
int
c
);
char
*
getMultiByte
(
int
c
);
};
};
...
...
src/rtfstyle.cpp
0 → 100644
View file @
0a37457c
/******************************************************************************
*
*
*
*
* 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 "rtfstyle.h"
#include <qfile.h>
#include <qtextstream.h>
#include <stdlib.h>
#include "message.h"
RTFListItemInfo
listItemInfo
[
indentLevels
];
QCString
rtf_title
;
QCString
rtf_subject
;
QCString
rtf_comments
;
QCString
rtf_company
;
QCString
rtf_logoFilename
;
QCString
rtf_author
;
QCString
rtf_manager
;
QCString
rtf_documentType
;
QCString
rtf_documentId
;
QCString
rtf_keywords
;
char
rtf_Style_Reset
[]
=
"
\\
pard
\\
plain "
;
Rtf_Style_Default
rtf_Style_Default
[]
=
{
{
"Heading1"
,
"
\\
s1
\\
sb240
\\
sa60
\\
keepn
\\
widctlpar
\\
adjustright
\\
b
\\
f1
\\
fs36
\\
kerning36
\\
cgrid "
,
"
\\
sbasedon0
\\
snext0 heading 1"
},
{
"Heading2"
,
"
\\
s2
\\
sb240
\\
sa60
\\
keepn
\\
widctlpar
\\
adjustright
\\
b
\\
f1
\\
fs28
\\
kerning28
\\
cgrid "
,
"
\\
sbasedon0
\\
snext0 heading 2"
},
{
"Heading3"
,
"
\\
s3
\\
sb240
\\
sa60
\\
keepn
\\
widctlpar
\\
adjustright
\\
b
\\
f1
\\
cgrid "
,
"
\\
sbasedon0
\\
snext0 heading 3"
},
{
"Heading4"
,
"
\\
s4
\\
sb240
\\
sa60
\\
keepn
\\
widctlpar
\\
adjustright
\\
b
\\
f1
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext0 heading 4;}{
\\
*
\\
cs10
\\
additive Default Paragraph Font"
},
{
"Title"
,
"
\\
s15
\\
qc
\\
sb240
\\
sa60
\\
widctlpar
\\
outlinelevel0
\\
adjustright
\\
b
\\
f1
\\
fs32
\\
kerning28
\\
cgrid "
,
"
\\
sbasedon0
\\
snext15 Title"
},
{
"SubTitle"
,
"
\\
s16
\\
qc
\\
sa60
\\
widctlpar
\\
outlinelevel1
\\
adjustright
\\
f1
\\
cgrid "
,
"
\\
sbasedon0
\\
snext16 Subtitle"
},
{
"BodyText"
,
"
\\
s17
\\
sa60
\\
sb30
\\
widctlpar
\\
qj
\\
fs22
\\
cgrid "
,
"
\\
sbasedon0
\\
snext17 BodyText"
},
{
"DenseText"
,
"
\\
s18
\\
widctlpar
\\
fs22
\\
cgrid "
,
"
\\
sbasedon0
\\
snext18 DenseText"
},
{
"Header"
,
"
\\
s28
\\
widctlpar
\\
tqc
\\
tx4320
\\
tqr
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext28 header"
},
{
"Footer"
,
"
\\
s29
\\
widctlpar
\\
tqc
\\
tx4320
\\
tqr
\\
tx8640
\\
qr
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext29 footer"
},
{
"GroupHeader"
,
"
\\
s30
\\
li360
\\
sa60
\\
sb120
\\
keepn
\\
widctlpar
\\
adjustright
\\
b
\\
f1
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext30 GroupHeader"
},
{
"CodeExample0"
,
"
\\
s40
\\
li0
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext41 Code Example 0"
},
{
"CodeExample1"
,
"
\\
s41
\\
li360
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext42 Code Example 1"
},
{
"CodeExample2"
,
"
\\
s42
\\
li720
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext43 Code Example 2"
},
{
"CodeExample3"
,
"
\\
s43
\\
li1080
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext44 Code Example 3"
},
{
"CodeExample4"
,
"
\\
s44
\\
li1440
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext45 Code Example 4"
},
{
"CodeExample5"
,
"
\\
s45
\\
li1800
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext46 Code Example 5"
},
{
"CodeExample6"
,
"
\\
s46
\\
li2160
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext47 Code Example 6"
},
{
"CodeExample7"
,
"
\\
s47
\\
li2520
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext48 Code Example 7"
},
{
"CodeExample8"
,
"
\\
s48
\\
li2880
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext49 Code Example 8"
},
{
"CodeExample9"
,
"
\\
s49
\\
li3240
\\
widctlpar
\\
adjustright
\\
shading1000
\\
cbpat8
\\
f2
\\
fs16
\\
cgrid "
,
"
\\
sbasedon0
\\
snext49 Code Example 9"
},
{
"ListContinue0"
,
"
\\
s50
\\
li0
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext51 List Continue 0"
},
{
"ListContinue1"
,
"
\\
s51
\\
li360
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext52 List Continue 1"
},
{
"ListContinue2"
,
"
\\
s52
\\
li720
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext53 List Continue 2"
},
{
"ListContinue3"
,
"
\\
s53
\\
li1080
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext54 List Continue 3"
},
{
"ListContinue4"
,
"
\\
s54
\\
li1440
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext55 List Continue 4"
},
{
"ListContinue5"
,
"
\\
s55
\\
li1800
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext56 List Continue 5"
},
{
"ListContinue6"
,
"
\\
s56
\\
li2160
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext57 List Continue 6"
},
{
"ListContinue7"
,
"
\\
s57
\\
li2520
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext58 List Continue 7"
},
{
"ListContinue8"
,
"
\\
s58
\\
li2880
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext59 List Continue 8"
},
{
"ListContinue9"
,
"
\\
s59
\\
li3240
\\
sa60
\\
sb30
\\
qj
\\
widctlpar
\\
qj
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext59 List Continue 9"
},
{
"DescContinue0"
,
"
\\
s60
\\
li0
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext61 DescContinue 0"
},
{
"DescContinue1"
,
"
\\
s61
\\
li360
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext62 DescContinue 1"
},
{
"DescContinue2"
,
"
\\
s62
\\
li720
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext63 DescContinue 2"
},
{
"DescContinue3"
,
"
\\
s63
\\
li1080
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext64 DescContinue 3"
},
{
"DescContinue4"
,
"
\\
s64
\\
li1440
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext65 DescContinue 4"
},
{
"DescContinue5"
,
"
\\
s65
\\
li1800
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext66 DescContinue 5"
},
{
"DescContinue6"
,
"
\\
s66
\\
li2160
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext67 DescContinue 6"
},
{
"DescContinue7"
,
"
\\
s67
\\
li2520
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext68 DescContinue 7"
},
{
"DescContinue8"
,
"
\\
s68
\\
li2880
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext69 DescContinue 8"
},
{
"DescContinue9"
,
"
\\
s69
\\
li3240
\\
widctlpar
\\
ql
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext69 DescContinue 9"
},
{
"LatexTOC0"
,
"
\\
s70
\\
li0
\\
sa30
\\
sb30
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext81 LatexTOC 0"
},
{
"LatexTOC1"
,
"
\\
s71
\\
li360
\\
sa27
\\
sb27
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext82 LatexTOC 1"
},
{
"LatexTOC2"
,
"
\\
s72
\\
li720
\\
sa24
\\
sb24
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext83 LatexTOC 2"
},
{
"LatexTOC3"
,
"
\\
s73
\\
li1080
\\
sa21
\\
sb21
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext84 LatexTOC 3"
},
{
"LatexTOC4"
,
"
\\
s74
\\
li1440
\\
sa18
\\
sb18
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext85 LatexTOC 4"
},
{
"LatexTOC5"
,
"
\\
s75
\\
li1800
\\
sa15
\\
sb15
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext86 LatexTOC 5"
},
{
"LatexTOC6"
,
"
\\
s76
\\
li2160
\\
sa12
\\
sb12
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext87 LatexTOC 6"
},
{
"LatexTOC7"
,
"
\\
s77
\\
li2520
\\
sa9
\\
sb9
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext88 LatexTOC 7"
},
{
"LatexTOC8"
,
"
\\
s78
\\
li2880
\\
sa6
\\
sb6
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext89 LatexTOC 8"
},
{
"LatexTOC9"
,
"
\\
s79
\\
li3240
\\
sa3
\\
sb3
\\
widctlpar
\\
tqr
\\
tldot
\\
tx8640
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext89 LatexTOC 9"
},
{
"ListBullet0"
,
"
\\
s80
\\
fi-360
\\
li360
\\
widctlpar
\\
jclisttab
\\
tx360{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls1
\\
pnrnot0
\\
pndec }
\\
ls1
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext81
\\
sautoupd List Bullet 0"
},
{
"ListBullet1"
,
"
\\
s81
\\
fi-360
\\
li720
\\
widctlpar
\\
jclisttab
\\
tx720{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls2
\\
pnrnot0
\\
pndec }
\\
ls2
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext82
\\
sautoupd List Bullet 1"
},
{
"ListBullet2"
,
"
\\
s82
\\
fi-360
\\
li1080
\\
widctlpar
\\
jclisttab
\\
tx1080{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls3
\\
pnrnot0
\\
pndec }
\\
ls3
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext83
\\
sautoupd List Bullet 2"
},
{
"ListBullet3"
,
"
\\
s83
\\
fi-360
\\
li1440
\\
widctlpar
\\
jclisttab
\\
tx1440{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls4
\\
pnrnot0
\\
pndec }
\\
ls4
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext84
\\
sautoupd List Bullet 3"
},
{
"ListBullet4"
,
"
\\
s84
\\
fi-360
\\
li1800
\\
widctlpar
\\
jclisttab
\\
tx1800{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls5
\\
pnrnot0
\\
pndec }
\\
ls5
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext85
\\
sautoupd List Bullet 4"
},
{
"ListBullet5"
,
"
\\
s85
\\
fi-360
\\
li2160
\\
widctlpar
\\
jclisttab
\\
tx2160{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls6
\\
pnrnot0
\\
pndec }
\\
ls6
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext86
\\
sautoupd List Bullet 5"
},
{
"ListBullet6"
,
"
\\
s86
\\
fi-360
\\
li2520
\\
widctlpar
\\
jclisttab
\\
tx2520{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls7
\\
pnrnot0
\\
pndec }
\\
ls7
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext87
\\
sautoupd List Bullet 6"
},
{
"ListBullet7"
,
"
\\
s87
\\
fi-360
\\
li2880
\\
widctlpar
\\
jclisttab
\\
tx2880{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls8
\\
pnrnot0
\\
pndec }
\\
ls8
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext88
\\
sautoupd List Bullet 7"
},
{
"ListBullet8"
,
"
\\
s88
\\
fi-360
\\
li3240
\\
widctlpar
\\
jclisttab
\\
tx3240{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls9
\\
pnrnot0
\\
pndec }
\\
ls9
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext89
\\
sautoupd List Bullet 8"
},
{
"ListBullet9"
,
"
\\
s89
\\
fi-360
\\
li3600
\\
widctlpar
\\
jclisttab
\\
tx3600{
\\
*
\\
pn
\\
pnlvlbody
\\
ilvl0
\\
ls10
\\
pnrnot0
\\
pndec }
\\
ls10
\\
adjustright
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext89
\\
sautoupd List Bullet 9"
},
{
"ListEnum0"
,
"
\\
s90
\\
fi-360
\\
li360
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext91
\\
sautoupd List Enum 0"
},
{
"ListEnum1"
,
"
\\
s91
\\
fi-360
\\
li720
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext92
\\
sautoupd List Enum 1"
},
{
"ListEnum2"
,
"
\\
s92
\\
fi-360
\\
li1080
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext93
\\
sautoupd List Enum 2"
},
{
"ListEnum3"
,
"
\\
s93
\\
fi-360
\\
li1440
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext94
\\
sautoupd List Enum 3"
},
{
"ListEnum4"
,
"
\\
s94
\\
fi-360
\\
li1800
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext95
\\
sautoupd List Enum 4"
},
{
"ListEnum5"
,
"
\\
s95
\\
fi-360
\\
li2160
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext96
\\
sautoupd List Enum 5"
},
{
"ListEnum6"
,
"
\\
s96
\\
fi-360
\\
li2520
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext96
\\
sautoupd List Enum 5"
},
{
"ListEnum7"
,
"
\\
s97
\\
fi-360
\\
li2880
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext98
\\
sautoupd List Enum 7"
},
{
"ListEnum8"
,
"
\\
s98
\\
fi-360
\\
li3240
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext99
\\
sautoupd List Enum 8"
},
{
"ListEnum9"
,
"
\\
s99
\\
fi-360
\\
li3600
\\
widctlpar
\\
fs20
\\
cgrid "
,
"
\\
sbasedon0
\\
snext99
\\
sautoupd List Enum 9"
},
{
0
,
0
,
0
}
};
const
QRegExp
StyleData
::
s_clause
(
"
\\\\
s[0-9]+
\\
s*"
);
StyleData
::
StyleData
(
const
char
*
reference
,
const
char
*
definition
)
{
int
start
=
s_clause
.
match
(
reference
);
ASSERT
(
start
>=
0
);
reference
+=
start
;
index
=
(
int
)
atol
(
reference
+
2
);
ASSERT
(
index
>
0
);
ASSERT
(
reference
!=
0
);
size_t
size
=
1
+
strlen
(
reference
);
memcpy
(
this
->
reference
=
new
char
[
size
],
reference
,
size
);
ASSERT
(
definition
!=
0
);
size
=
1
+
strlen
(
definition
);
memcpy
(
this
->
definition
=
new
char
[
size
],
definition
,
size
);
}
StyleData
::~
StyleData
()
{
delete
[]
reference
;
delete
[]
definition
;
}
bool
StyleData
::
setStyle
(
const
char
*
s
,
const
char
*
styleName
)
{
static
const
QRegExp
subgroup
(
"^{[^}]*}
\\
s*"
);
static
const
QRegExp
any_clause
(
"^
\\\\
[a-z][a-z0-9-]*
\\
s*"
);
int
len
=
0
;
// length of a particular RTF formatting control
int
ref_len
=
0
;
// length of the whole formatting section of a style
int
start
=
s_clause
.
match
(
s
,
0
,
&
len
);
if
(
start
<
0
)
{
err
(
"Style sheet '%s' contains no '
\\
s' clause.
\n
{%s}
\n
"
,
styleName
,
s
);
return
FALSE
;
}
s
+=
start
;
index
=
(
int
)
atol
(
s
+
2
);
ASSERT
(
index
>
0
);
// search for the end of pure formatting codes
const
char
*
end
=
s
+
len
;
ref_len
=
len
;
bool
haveNewDefinition
=
TRUE
;
for
(;;)
{
if
(
*
end
==
'{'
)
{
// subgroups are used for \\additive
if
(
0
!=
subgroup
.
match
(
end
,
0
,
&
len
))
break
;
else
{
end
+=
len
;
ref_len
+=
len
;
}
}
else
if
(
*
end
==
'\\'
)
{
if
(
0
==
strncmp
(
end
,
"
\\
snext"
,
6
))
break
;
if
(
0
==
strncmp
(
end
,
"
\\
sbasedon"
,
9
))
break
;
if
(
0
!=
any_clause
.
match
(
end
,
0
,
&
len
))
break
;
end
+=
len
;
ref_len
+=
len
;
}
else
if
(
*
end
==
0
)
{
// no style-definition part, keep default value
haveNewDefinition
=
FALSE
;
break
;
}
else
// plain name without leading \\snext
break
;
}
delete
[]
reference
;
reference
=
new
char
[
ref_len
+
1
];
memcpy
(
reference
,
s
,
ref_len
);
reference
[
ref_len
]
=
0
;
if
(
haveNewDefinition
)
{
delete
[]
definition
;
size_t
size
=
1
+
strlen
(
end
);
definition
=
new
char
[
size
];
memcpy
(
definition
,
end
,
size
);
}
return
TRUE
;
}
void
loadStylesheet
(
const
char
*
name
,
QDict
<
StyleData
>&
dict
)
{
QFile
file
(
name
);
if
(
!
file
.
open
(
IO_ReadOnly
))
{
err
(
"Can't open RTF style sheet file %s. Using defaults.
\n
"
,
name
);
return
;
}
msg
(
"Loading RTF style sheet %s...
\n
"
,
name
);
static
const
QRegExp
separator
(
"[
\t
]*=[
\t
]*"
);
uint
lineNr
=
1
;
QTextStream
t
(
&
file
);
#if QT_VERSION >= 200
t
.
setEncoding
(
QTextStream
::
Latin1
);
#endif
while
(
!
t
.
eof
())
{
QCString
s
(
4096
);
// string buffer of max line length
s
=
t
.
readLine
().
stripWhiteSpace
();
if
(
s
.
length
()
==
0
||
s
.
at
(
0
)
==
'#'
)
continue
;
// skip blanks & comments
int
sepLength
;
int
sepStart
=
separator
.
match
(
s
,
0
,
&
sepLength
);
if
(
sepStart
<=
0
)
// no valid assignment statement
{
warn
(
name
,
lineNr
,
"Assignment of style sheet name expected!
\n
"
);
continue
;
}
QCString
key
=
s
.
left
(
sepStart
);
if
(
dict
[
key
]
==
0
)
// not a valid style sheet name
{
warn
(
name
,
lineNr
,
"Invalid style sheet name %s ignored.
\n
"
,
key
.
data
());
continue
;
}
StyleData
*
styleData
=
dict
.
find
(
key
);
if
(
styleData
==
0
)
{
warn
(
name
,
lineNr
,
"Unknown style sheet name %s ignored.
\n
"
,
key
.
data
());
continue
;
}
s
+=
" "
;
// add command separator
styleData
->
setStyle
(
s
.
data
()
+
sepStart
+
sepLength
,
key
.
data
());
lineNr
++
;
}
}
QDict
<
StyleData
>
rtf_Style
(
257
);
void
loadExtensions
(
const
char
*
name
)
{
QFile
file
(
name
);
if
(
!
file
.
open
(
IO_ReadOnly
))
{
err
(
"Can't open RTF extensions file %s. Using defaults.
\n
"
,
name
);
return
;
}
msg
(
"Loading RTF extensions %s...
\n
"
,
name
);
static
const
QRegExp
separator
(
"[
\t
]*=[
\t
]*"
);
uint
lineNr
=
1
;
QTextStream
t
(
&
file
);
#if QT_VERSION >= 200
t
.
setEncoding
(
QTextStream
::
Latin1
);
#endif
while
(
!
t
.
eof
())
{
QCString
s
(
4096
);
// string buffer of max line length
s
=
t
.
readLine
().
stripWhiteSpace
();
if
(
s
.
length
()
==
0
||
s
.
at
(
0
)
==
'#'
)
continue
;
// skip blanks & comments
int
sepLength
;
int
sepStart
=
separator
.
match
(
s
,
0
,
&
sepLength
);
if
(
sepStart
<=
0
)
// no valid assignment statement
{
warn
(
name
,
lineNr
,
"Assignment of extension field expected!
\n
"
);
continue
;
}
QCString
key
=
s
.
left
(
sepStart
);
QCString
data
=
s
.
data
()
+
sepStart
+
sepLength
;
if
(
key
==
"Title"
)
rtf_title
=
data
.
data
();
if
(
key
==
"Subject"
)
rtf_subject
=
data
.
data
();
if
(
key
==
"Comments"
)
rtf_comments
=
data
.
data
();
if
(
key
==
"Company"
)
rtf_company
=
data
.
data
();
if
(
key
==
"LogoFilename"
)
rtf_logoFilename
=
data
.
data
();
if
(
key
==
"Author"
)
rtf_author
=
data
.
data
();
if
(
key
==
"Manager"
)
rtf_manager
=
data
.
data
();
if
(
key
==
"DocumentType"
)
rtf_documentType
=
data
.
data
();
if
(
key
==
"DocumentId"
)
rtf_documentId
=
data
.
data
();
if
(
key
==
"Keywords"
)
rtf_keywords
=
data
.
data
();
lineNr
++
;
}
}
src/rtfstyle.h
0 → 100644
View file @
0a37457c
/******************************************************************************
*
*
*
*
* 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 RTFSTYLE_H
#define RTFSTYLE_H
#include "qtbc.h"
#include <qregexp.h>
#include <qdict.h>
extern
QCString
rtf_title
;
extern
QCString
rtf_subject
;
extern
QCString
rtf_comments
;
extern
QCString
rtf_company
;
extern
QCString
rtf_logoFilename
;
extern
QCString
rtf_author
;
extern
QCString
rtf_manager
;
extern
QCString
rtf_documentType
;
extern
QCString
rtf_documentId
;
extern
QCString
rtf_keywords
;
struct
RTFListItemInfo
{
bool
isEnum
;
int
number
;
};
const
int
indentLevels
=
10
;
extern
RTFListItemInfo
listItemInfo
[
indentLevels
];
struct
Rtf_Style_Default
{
const
char
*
name
;
const
char
*
reference
;
const
char
*
definition
;
};
extern
char
rtf_Style_Reset
[];
extern
Rtf_Style_Default
rtf_Style_Default
[];
struct
StyleData
{
// elements of this type are stored in dictionary Rtf_Style
//
// to define a tag in the header reference + definition is required
// to use a tag in the body of the document only reference is required
unsigned
index
;
// index in style-sheet, i.e. number in s-clause
char
*
reference
;
// everything required to apply the style
char
*
definition
;
// aditional tags like \snext and style name
StyleData
(
const
char
*
reference
,
const
char
*
definition
);
~
StyleData
();
bool
setStyle
(
const
char
*
s
,
const
char
*
styleName
);
static
const
QRegExp
s_clause
;
};
extern
QDict
<
StyleData
>
rtf_Style
;
void
loadExtensions
(
const
char
*
name
);
void
loadStylesheet
(
const
char
*
name
,
QDict
<
StyleData
>&
dict
);
#endif
src/scanner.l
View file @
0a37457c
...
@@ -282,6 +282,12 @@ static void addSection()
...
@@ -282,6 +282,12 @@ static void addSection()
{
{
//printf("New section pageName=%s label=%s title=%s\n",
//printf("New section pageName=%s label=%s title=%s\n",
// current->name.data(),sectionLabel.data(),sectionTitle.data());
// current->name.data(),sectionLabel.data(),sectionTitle.data());
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());
return;
}
if (sectionLabel.isEmpty()) return;
if (sectionLabel.isEmpty()) return;
if (Doxygen::sectionDict.find(sectionLabel)==0)
if (Doxygen::sectionDict.find(sectionLabel)==0)
{
{
...
@@ -3343,7 +3349,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -3343,7 +3349,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->name = yytext;
current->name = yytext;
newDocState();
newDocState();
}
}
<NameSpaceDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<NameSpaceDocArg1>"\\"{B}*"\n" {
yyLineNr++;
}
<NameSpaceDocArg1>"\n" {
<NameSpaceDocArg1>"\n" {
warn(yyFileName,yyLineNr,
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"Warning: missing argument after "
...
@@ -3355,7 +3363,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -3355,7 +3363,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->name = yytext;
current->name = yytext;
newDocState();
newDocState();
}
}
<PackageDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<PackageDocArg1>"\\"{B}*"\n" {
yyLineNr++;
}
<PackageDocArg1>"\n" {
<PackageDocArg1>"\n" {
warn(yyFileName,yyLineNr,
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"Warning: missing argument after "
...
@@ -3376,7 +3386,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -3376,7 +3386,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
prependScope();
prependScope();
BEGIN( ClassDocArg2 );
BEGIN( ClassDocArg2 );
}
}
<ClassDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<ClassDocArg1>"\\"{B}*"\n" {
yyLineNr++;
}
<ClassDocArg1>"\n" {
<ClassDocArg1>"\n" {
warn(yyFileName,yyLineNr,
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"Warning: missing argument after "
...
@@ -3394,7 +3406,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -3394,7 +3406,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->name=current->name.left(current->name.length()-5);
current->name=current->name.left(current->name.length()-5);
BEGIN(GroupDocArg2);
BEGIN(GroupDocArg2);
}
}
<GroupDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<GroupDocArg1>"\\"{B}*"\n" { yyLineNr++;
}
<GroupDocArg1>"\n" {
<GroupDocArg1>"\n" {
warn(yyFileName,yyLineNr,
warn(yyFileName,yyLineNr,
"Warning: missing group name after %s",
"Warning: missing group name after %s",
...
@@ -3408,7 +3421,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -3408,7 +3421,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
yyLineNr--;
yyLineNr--;
unput('/');unput('*');unput('\n');
unput('/');unput('*');unput('\n');
}
}
<GroupDocArg2>"\\"{B}*"\n" { yyLineNr++; }
<GroupDocArg2>"\\"{B}*"\n" { yyLineNr++;
}
<GroupDocArg2>[^\n\*]+ {
<GroupDocArg2>[^\n\*]+ {
current->type += yytext;
current->type += yytext;
current->type = current->type.stripWhiteSpace();
current->type = current->type.stripWhiteSpace();
...
@@ -3428,7 +3442,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -3428,7 +3442,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->includeFile = stripQuotes(yytext);
current->includeFile = stripQuotes(yytext);
BEGIN( ClassDocArg3 );
BEGIN( ClassDocArg3 );
}
}
<ClassDocArg2>"\\"{B}*"\n" { yyLineNr++; }
<ClassDocArg2>"\\"{B}*"\n" { yyLineNr++;
}
<ClassDocArg2>"\n" { yyLineNr++;
<ClassDocArg2>"\n" { yyLineNr++;
newDocState();
newDocState();
}
}
...
@@ -3437,7 +3452,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -3437,7 +3452,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->includeName = yytext;
current->includeName = yytext;
newDocState();
newDocState();
}
}
<ClassDocArg3>"\\"{B}*"\n" { yyLineNr++; }
<ClassDocArg3>"\\"{B}*"\n" { yyLineNr++;
}
<ClassDocArg3>"\n" { yyLineNr++;
<ClassDocArg3>"\n" { yyLineNr++;
newDocState();
newDocState();
}
}
...
@@ -3445,7 +3461,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -3445,7 +3461,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->name = stripQuotes(yytext);
current->name = stripQuotes(yytext);
newDocState();
newDocState();
}
}
<FileDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<FileDocArg1>"\\"{B}*"\n" { yyLineNr++;
}
<FileDocArg1>"\n" {
<FileDocArg1>"\n" {
current->name = yyFileName;
current->name = yyFileName;
yyLineNr++;
yyLineNr++;
...
@@ -3455,7 +3472,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -3455,7 +3472,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->name = stripQuotes(yytext);
current->name = stripQuotes(yytext);
BEGIN( PageDocArg2 );
BEGIN( PageDocArg2 );
}
}
<PageDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<PageDocArg1>"\\"{B}*"\n" { yyLineNr++;
current->doc+="\n";
}
<PageDocArg1>"\n" {
<PageDocArg1>"\n" {
warn(yyFileName,yyLineNr,
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"Warning: missing argument after "
...
@@ -3476,11 +3495,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -3476,11 +3495,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
prependScope();
prependScope();
newDocState();
newDocState();
}
}
<EnumDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<EnumDocArg1>"\\"{B}*"\n" { yyLineNr++;
current->doc+="\n";
}
<EnumDocArg1>"\n" {
<EnumDocArg1>"\n" {
warn(yyFileName,yyLineNr,
warn(yyFileName,yyLineNr,
"Warning: missing argument after \\enum."
"Warning: missing argument after \\enum."
);
);
current->doc+="\n";
yyLineNr++;
yyLineNr++;
BEGIN( Doc );
BEGIN( Doc );
}
}
...
@@ -3504,6 +3526,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -3504,6 +3526,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
}
<GroupHeader>\n {
<GroupHeader>\n {
yyLineNr++;
yyLineNr++;
current->doc+="\n";
//printf("Found memberGroup=`%s'\n",memberGroupHeader.data());
//printf("Found memberGroup=`%s'\n",memberGroupHeader.data());
startGroupInDoc();
startGroupInDoc();
newDocState();
newDocState();
...
@@ -4255,7 +4278,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
...
@@ -4255,7 +4278,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
}
<Doc,JavaDoc,ClassDoc,PageDoc,ExampleDoc,ReadFormulaShort,ReadFormulaLong,ClassDocBrief,AfterDoc,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+/[^/]
<Doc,JavaDoc,ClassDoc,PageDoc,ExampleDoc,ReadFormulaShort,ReadFormulaLong,ClassDocBrief,AfterDoc,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+/[^/]
<Doc,JavaDoc,ClassDoc,PageDoc,ExampleDoc,ReadFormulaShort,ReadFormulaLong,ClassDocBrief,AfterDoc,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+{B}+ {
<Doc,JavaDoc,ClassDoc,PageDoc,ExampleDoc,ReadFormulaShort,ReadFormulaLong,ClassDocBrief,AfterDoc,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+{B}+ {
current->doc+=' ';
current->doc+=' ';
}
}
<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc>"\\"[a-z_A-Z][a-z_A-Z0-9]*[\\] { // directory type of text
<Doc,ClassDoc,PageDoc,ExampleDoc,AfterDoc>"\\"[a-z_A-Z][a-z_A-Z0-9]*[\\] { // directory type of text
...
...
src/util.cpp
View file @
0a37457c
...
@@ -2136,12 +2136,13 @@ bool getDefs(const QCString &scName,const QCString &memberName,
...
@@ -2136,12 +2136,13 @@ bool getDefs(const QCString &scName,const QCString &memberName,
}
}
}
}
}
}
//printf("found %d candidate members\n",members.count());
if
(
members
.
count
()
!=
1
&&
!
strcmp
(
args
,
"()"
))
if
(
members
.
count
()
!=
1
&&
!
strcmp
(
args
,
"()"
))
{
{
// no exact match found, but if args="()" an arbitrary
// no exact match found, but if args="()" an arbitrary
// member will do
// member will do
md
=
mn
->
last
();
md
=
mn
->
last
();
while
(
md
)
while
(
md
&&
md
->
isLinkable
()
)
{
{
//printf("Found member `%s'\n",md->name().data());
//printf("Found member `%s'\n",md->name().data());
//printf("member is linkable md->name()=`%s'\n",md->name().data());
//printf("member is linkable md->name()=`%s'\n",md->name().data());
...
@@ -2363,6 +2364,7 @@ bool resolveRef(/* in */ const char *scName,
...
@@ -2363,6 +2364,7 @@ bool resolveRef(/* in */ const char *scName,
GroupDef
*
gd
=
0
;
GroupDef
*
gd
=
0
;
// check if nameStr is a member or global.
// check if nameStr is a member or global.
//printf("getDefs(scope=%s,name=%s,args=%s\n",scopeStr.data(),nameStr.data(),argsStr.data());
if
(
getDefs
(
scopeStr
,
nameStr
,
argsStr
,
if
(
getDefs
(
scopeStr
,
nameStr
,
argsStr
,
md
,
cd
,
fd
,
nd
,
gd
,
md
,
cd
,
fd
,
nd
,
gd
,
scopePos
==
0
&&
!
memberScopeFirst
,
scopePos
==
0
&&
!
memberScopeFirst
,
...
@@ -2378,6 +2380,8 @@ bool resolveRef(/* in */ const char *scName,
...
@@ -2378,6 +2380,8 @@ bool resolveRef(/* in */ const char *scName,
else
if
(
fd
)
*
resContext
=
fd
;
else
if
(
fd
)
*
resContext
=
fd
;
else
if
(
gd
)
*
resContext
=
gd
;
else
if
(
gd
)
*
resContext
=
gd
;
else
{
*
resContext
=
0
;
*
resMember
=
0
;
return
FALSE
;
}
else
{
*
resContext
=
0
;
*
resMember
=
0
;
return
FALSE
;
}
//printf("member=%s (md=%p) anchor=%s linkable()=%d context=%s\n",
// md->name().data(),md,md->anchor().data(),md->isLinkable(),(*resContext)->name().data());
return
TRUE
;
return
TRUE
;
}
}
else
if
(
inSeeBlock
&&
!
nameStr
.
isEmpty
()
&&
(
gd
=
Doxygen
::
groupSDict
[
nameStr
]))
else
if
(
inSeeBlock
&&
!
nameStr
.
isEmpty
()
&&
(
gd
=
Doxygen
::
groupSDict
[
nameStr
]))
...
@@ -2539,6 +2543,7 @@ bool resolveLink(/* in */ const char *scName,
...
@@ -2539,6 +2543,7 @@ bool resolveLink(/* in */ const char *scName,
bool
generateLink
(
OutputDocInterface
&
od
,
const
char
*
clName
,
bool
generateLink
(
OutputDocInterface
&
od
,
const
char
*
clName
,
const
char
*
lr
,
bool
inSeeBlock
,
const
char
*
lt
)
const
char
*
lr
,
bool
inSeeBlock
,
const
char
*
lt
)
{
{
//printf("generateLink(clName=%s,lr=%s,lr=%s)\n",clName,lr,lt);
Definition
*
compound
;
Definition
*
compound
;
PageInfo
*
pageInfo
;
PageInfo
*
pageInfo
;
QCString
anchor
,
linkText
=
lt
;
QCString
anchor
,
linkText
=
lt
;
...
@@ -3386,7 +3391,7 @@ found:
...
@@ -3386,7 +3391,7 @@ found:
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
void
addRelatedPage
(
const
char
*
name
,
const
QCString
&
ptitle
,
PageInfo
*
addRelatedPage
(
const
char
*
name
,
const
QCString
&
ptitle
,
const
QCString
&
doc
,
QList
<
QCString
>
*
anchors
,
const
QCString
&
doc
,
QList
<
QCString
>
*
anchors
,
const
char
*
fileName
,
int
startLine
,
const
char
*
fileName
,
int
startLine
,
const
QList
<
ListItemInfo
>
*
sli
,
const
QList
<
ListItemInfo
>
*
sli
,
...
@@ -3474,6 +3479,7 @@ void addRelatedPage(const char *name,const QCString &ptitle,
...
@@ -3474,6 +3479,7 @@ void addRelatedPage(const char *name,const QCString &ptitle,
Doxygen
::
sectionDict
.
insert
(
pageName
,
si
);
Doxygen
::
sectionDict
.
insert
(
pageName
,
si
);
}
}
}
}
return
pi
;
}
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
...
@@ -3902,3 +3908,47 @@ void filterLatexString(QTextStream &t,const char *str,
...
@@ -3902,3 +3908,47 @@ void filterLatexString(QTextStream &t,const char *str,
}
}
}
}
}
}
QCString
rtfFormatBmkStr
(
const
char
*
name
)
{
static
QCString
g_nextTag
(
"AAAAAAAAAA"
);
static
QDict
<
QCString
>
g_tagDict
(
5003
);
g_tagDict
.
setAutoDelete
(
TRUE
);
// To overcome the 40-character tag limitation, we
// substitute a short arbitrary string for the name
// supplied, and keep track of the correspondence
// between names and strings.
QCString
key
(
name
);
QCString
*
tag
=
g_tagDict
.
find
(
key
);
if
(
!
tag
)
{
// This particular name has not yet been added
// to the list. Add it, associating it with the
// next tag value, and increment the next tag.
tag
=
new
QCString
(
g_nextTag
.
copy
()
);
// Make sure to use a deep copy!
g_tagDict
.
insert
(
key
,
tag
);
// This is the increment part
char
*
nxtTag
=
g_nextTag
.
data
()
+
g_nextTag
.
length
()
-
1
;
for
(
unsigned
int
i
=
0
;
i
<
g_nextTag
.
length
();
++
i
,
--
nxtTag
)
{
if
(
(
++
(
*
nxtTag
)
)
>
'Z'
)
{
(
*
nxtTag
)
=
'A'
;
}
else
{
// Since there was no carry, we can stop now
break
;
}
}
}
return
*
tag
;
}
src/util.h
View file @
0a37457c
...
@@ -190,7 +190,7 @@ int getScopeFragment(const QCString &s,int p,int *l);
...
@@ -190,7 +190,7 @@ int getScopeFragment(const QCString &s,int p,int *l);
int
filterCRLF
(
char
*
buf
,
int
len
);
int
filterCRLF
(
char
*
buf
,
int
len
);
void
addRefItem
(
const
QList
<
ListItemInfo
>
*
sli
,
const
char
*
prefix
,
void
addRefItem
(
const
QList
<
ListItemInfo
>
*
sli
,
const
char
*
prefix
,
const
char
*
name
,
const
char
*
title
,
const
char
*
args
=
0
);
const
char
*
name
,
const
char
*
title
,
const
char
*
args
=
0
);
void
addRelatedPage
(
const
char
*
name
,
const
QCString
&
ptitle
,
PageInfo
*
addRelatedPage
(
const
char
*
name
,
const
QCString
&
ptitle
,
const
QCString
&
doc
,
QList
<
QCString
>
*
anchors
,
const
QCString
&
doc
,
QList
<
QCString
>
*
anchors
,
const
char
*
fileName
,
int
startLine
,
const
char
*
fileName
,
int
startLine
,
const
QList
<
ListItemInfo
>
*
sli
,
const
QList
<
ListItemInfo
>
*
sli
,
...
@@ -201,6 +201,7 @@ QCString escapeCharsInString(const char *name,bool allowDots);
...
@@ -201,6 +201,7 @@ QCString escapeCharsInString(const char *name,bool allowDots);
void
addGroupListToTitle
(
OutputList
&
ol
,
Definition
*
d
);
void
addGroupListToTitle
(
OutputList
&
ol
,
Definition
*
d
);
void
filterLatexString
(
QTextStream
&
t
,
const
char
*
str
,
void
filterLatexString
(
QTextStream
&
t
,
const
char
*
str
,
bool
insideTabbing
=
FALSE
,
bool
insidePre
=
FALSE
);
bool
insideTabbing
=
FALSE
,
bool
insidePre
=
FALSE
);
QCString
rtfFormatBmkStr
(
const
char
*
name
);
#endif
#endif
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