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
26b5069c
Commit
26b5069c
authored
Apr 30, 2000
by
dimitri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.1.2-20000430
parent
e2b4a623
Changes
41
Hide whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
759 additions
and
570 deletions
+759
-570
INSTALL
INSTALL
+4
-4
README
README
+2
-2
VERSION
VERSION
+1
-1
config_templ.l
addon/configgen/config_templ.l
+60
-46
configgen.cpp
addon/configgen/configgen.cpp
+10
-5
pagewidget.cpp
addon/doxywizard/pagewidget.cpp
+1
-1
htmlcmds.doc
doc/htmlcmds.doc
+1
-0
language.doc
doc/language.doc
+16
-2
doxygen.spec
packages/rpm/doxygen.spec
+1
-1
classdef.cpp
src/classdef.cpp
+11
-11
classlist.cpp
src/classlist.cpp
+59
-0
classlist.h
src/classlist.h
+1
-0
code.l
src/code.l
+143
-41
config.l
src/config.l
+145
-131
declinfo.l
src/declinfo.l
+1
-1
definition.h
src/definition.h
+5
-2
diagram.cpp
src/diagram.cpp
+8
-1
dot.cpp
src/dot.cpp
+15
-1
doxygen.cpp
src/doxygen.cpp
+23
-58
filedef.cpp
src/filedef.cpp
+15
-58
groupdef.cpp
src/groupdef.cpp
+12
-48
htmlgen.cpp
src/htmlgen.cpp
+3
-0
htmlgen.h
src/htmlgen.h
+3
-0
index.cpp
src/index.cpp
+3
-2
language.cpp
src/language.cpp
+5
-0
latexgen.cpp
src/latexgen.cpp
+5
-1
latexgen.h
src/latexgen.h
+3
-0
mangen.h
src/mangen.h
+3
-0
memberdef.cpp
src/memberdef.cpp
+56
-29
memberdef.h
src/memberdef.h
+10
-7
memberlist.cpp
src/memberlist.cpp
+27
-27
namespacedef.cpp
src/namespacedef.cpp
+12
-63
outputgen.h
src/outputgen.h
+3
-0
outputlist.h
src/outputlist.h
+5
-0
pre.l
src/pre.l
+13
-4
rtfgen.cpp
src/rtfgen.cpp
+24
-15
rtfgen.h
src/rtfgen.h
+3
-0
scanner.l
src/scanner.l
+19
-5
translator_de.h
src/translator_de.h
+1
-1
util.cpp
src/util.cpp
+26
-2
util.h
src/util.h
+1
-0
No files found.
INSTALL
View file @
26b5069c
DOXYGEN Version 1.1.2-200004
23
DOXYGEN Version 1.1.2-200004
30
CONTENTS
--------
...
...
@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.2-200004
23
.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.2-200004
23
.src.tar # unpack it
gunzip doxygen-1.1.2-200004
30
.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.2-200004
30
.src.tar # unpack it
2. Run the configure script:
...
...
@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
23
April 2000)
Dimitri van Heesch (
30
April 2000)
README
View file @
26b5069c
DOXYGEN Version 1.1.2-200004
23
DOXYGEN Version 1.1.2-200004
30
Please read INSTALL for compilation instructions.
...
...
@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
23
April 2000)
Dimitri van Heesch (
30
April 2000)
VERSION
View file @
26b5069c
1.1.2-200004
23
1.1.2-200004
30
addon/configgen/config_templ.l
View file @
26b5069c
...
...
@@ -335,65 +335,79 @@ static void substEnvVarsInStrList(QStrList &sl)
while (s)
{
QCString result(s);
bool wasQuoted = (result.find(' ')!=-1) || (result.find('\t')!=-1);
substEnvVarsInString(result);
int l=result.length();
int i,p=0;
// skip spaces
// search for a "word"
for (i=0;i<l;i++)
if (!wasQuoted) /* as a result of the expansion, a single string
may have expanded into a list, which we'll
add to sl. If the orginal string already
contained multiple elements no splitting is done! */
{
char c;
// skip until start of new word
for (;i<l && ((c=result.at(i))==' ' || c=='\t');i++)
p=i; // p marks the start index of the word
// skip until end of a word
for (;i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"');i++);
if (i<l) // not at the end of the string
int l=result.length();
int i,p=0;
// skip spaces
// search for a "word"
for (i=0;i<l;i++)
{
if (c=='"') // word within quotes
char c;
// skip until start of new word
for (;i<l && ((c=result.at(i))==' ' || c=='\t');i++)
p=i; // p marks the start index of the word
// skip until end of a word
for (;i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"');i++);
if (i<l) // not at the end of the string
{
p=i+1;
for (i++;i<l;i++)
if (c=='"') // word within quotes
{
c=result.at(i)
;
if (c=='"') // end quote
p=i+1
;
for (i++;i<l;i++)
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
sl.next(); // current item is now the old item
p=i+1;
break;
}
else if (c=='\\') // skip escaped stuff
{
i++;
c=result.at(i);
if (c=='"') // end quote
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
sl.next(); // current item is now the old item
p=i+1;
break;
}
else if (c=='\\') // skip escaped stuff
{
i++;
}
}
}
}
else if (c==' ' || c=='\t') // separator
{
// replace the string in the list and go to the nex
t item.
sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
sl.next(); // current item is now the old item
p=i+1;
else if (c==' ' || c=='\t') // separator
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before curren
t item.
sl.next(); // current item is now the old item
p=i+1;
}
}
}
if (p!=l) // add the leftover as a string
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.right(l-p)); // insert new item before current item.
sl.next(); // current item is now the old item
}
// remove the old unexpanded string from the list
i=sl.at();
sl.remove(); // current item index changes if the last element is removed.
if (sl.at()==i) // not last item
s = sl.current();
else // just removed last item
s = 0;
}
if (p!=l) // add the leftover as a string
else // just goto the next element in the list
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.right(l-p)); // insert new item before current item.
sl.next(); // current item is now the old item
s=sl.next();
}
// remove the old unexpanded string from the list
i=sl.at();
sl.remove(); // current item index changes if the last element is removed.
if (sl.at()==i) // not last item
s = sl.current();
else // just removed last item
s = 0;
}
}
...
...
addon/configgen/configgen.cpp
View file @
26b5069c
...
...
@@ -21,9 +21,10 @@
#include <qfile.h>
#include <qlist.h>
#include <qdict.h>
#include <qstr
ing
list.h>
#include <qstrlist.h>
#include <stdio.h>
#include <stdlib.h>
static
QString
spaces
=
" "
;
...
...
@@ -122,7 +123,9 @@ class ConfigOption
stringToC
(
t
,
longDesc
,
" t <<
\"
# "
,
"
\\
n
\"
;"
);
t
<<
" t <<
\"\\
n
\"
;"
<<
endl
;
t
<<
" }"
<<
endl
;
t
<<
" t <<
\"
"
<<
cfgName
<<
" =
\"
;"
<<
endl
;
t
<<
" t <<
\"
"
<<
cfgName
;
t
<<
spaces
.
left
(
22
-
cfgName
.
length
());
t
<<
"=
\"
;"
<<
endl
;
t
<<
" "
<<
writeFunc
<<
"(t,Config::"
<<
varName
<<
");"
<<
endl
;
t
<<
" t <<
\"\\
n
\"
;"
<<
endl
;
}
...
...
@@ -406,9 +409,11 @@ class ConfigString : public ConfigOption
<<
",SIGNAL(changed()),this,SIGNAL(changed()));"
<<
endl
;
if
(
m_values
.
count
()
>
0
)
{
for
(
QStringList
::
Iterator
it
=
m_values
.
begin
();
it
!=
m_values
.
end
();
++
it
)
char
*
s
=
m_values
.
first
();
while
(
s
)
{
t
<<
" "
<<
varName
<<
"->addValue(
\"
"
<<
(
*
it
)
<<
"
\"
);"
<<
endl
;
t
<<
" "
<<
varName
<<
"->addValue(
\"
"
<<
s
<<
"
\"
);"
<<
endl
;
s
=
m_values
.
next
();
}
}
}
...
...
@@ -434,7 +439,7 @@ class ConfigString : public ConfigOption
private
:
ConfigInfo
*
m_parent
;
WidgetType
m_widgetType
;
QStr
ing
List
m_values
;
QStrList
m_values
;
};
class
ConfigInt
:
public
ConfigOption
...
...
addon/doxywizard/pagewidget.cpp
View file @
26b5069c
...
...
@@ -51,7 +51,7 @@ PageWidget::PageWidget( QTabWidget *parent, const char *name )
m_parent
->
addTab
(
this
,
name
);
}
void
PageWidget
::
addStretch
(
int
stretch
=
0
)
void
PageWidget
::
addStretch
(
int
stretch
)
{
lay
->
addStretch
(
stretch
);
//printf("Viewport SizeHint %d,%d\n",viewport()->sizeHint().width(),viewport()->sizeHint().height());
...
...
doc/htmlcmds.doc
View file @
26b5069c
...
...
@@ -106,6 +106,7 @@ The special HTML characters entities that are recognized by Doxygen:
writes a character with a circumflex accent (like â).
<li>\c &?tilde; where ? is one of {A,N,O,a,n,o},
writes a character with a tilde accent (like ã).
<li>\c ß write a sharp s (i.e. ß) to the output.
</ul>
*/
...
...
doc/language.doc
View file @
26b5069c
...
...
@@ -164,6 +164,18 @@ Here is a list of the languages and their current maintainers:
snob@NOSPAM.int.spb.ru</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Croatian
</TD>
<TD>
Boris Bralo
</TD>
<TD>
<a href="mailto:boris.bralo@NOSPAM.zg.tel.hr">
boris.bralo@NOSPAM.zg.tel.hr</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
...
...
@@ -205,9 +217,11 @@ Here is a list of the languages and their current maintainers:
\hline
Spanish & Francisco Oltra Thennet & {\tt foltra@puc.cl} \\
\hline
Finish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} \\
Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} \\
\hline
Russian & Nickolay Semyonov & {\tt snob@int.spb.ru} \\
\hline
Russian & Vladimir Vodolazkiy & {\tt voldemarus@geocities.com
} \\
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr
} \\
\hline
Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} \\
\hline
...
...
packages/rpm/doxygen.spec
View file @
26b5069c
Name: doxygen
Version: 1.1.2-200004
23
Version: 1.1.2-200004
30
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
...
...
src/classdef.cpp
View file @
26b5069c
...
...
@@ -774,9 +774,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
// write detailed description
bool
exampleFlag
=
hasExamples
();
if
(
!
briefDescription
().
isEmpty
(
)
||
if
(
(
!
briefDescription
().
isEmpty
()
&&
Config
::
repeatBriefFlag
)
||
!
documentation
().
isEmpty
()
||
(
startBodyLine
!=-
1
&&
bodyDef
)
||
/*(Config::sourceBrowseFlag && startBodyLine!=-1 && bodyDef) ||*/
exampleFlag
)
{
ol
.
writeRuler
();
...
...
@@ -884,15 +884,15 @@ void ClassDef::writeDocumentation(OutputList &ol)
enumMembers
.
writeDocumentation
(
ol
,
name
());
}
enumValMembers
.
countDocMembers
();
if
(
enumValMembers
.
totalCount
()
>
0
)
{
ol
.
writeRuler
();
ol
.
startGroupHeader
();
parseText
(
ol
,
theTranslator
->
trEnumerationValueDocumentation
());
ol
.
endGroupHeader
();
enumValMembers
.
writeDocumentation
(
ol
,
name
());
}
//
enumValMembers.countDocMembers();
//
if (enumValMembers.totalCount()>0)
//
{
//
ol.writeRuler();
//
ol.startGroupHeader();
//
parseText(ol,theTranslator->trEnumerationValueDocumentation());
//
ol.endGroupHeader();
//
enumValMembers.writeDocumentation(ol,name());
//
}
constructors
.
countDocMembers
();
if
(
constructors
.
totalCount
()
>
0
)
...
...
src/classlist.cpp
View file @
26b5069c
...
...
@@ -18,6 +18,9 @@
#include "classlist.h"
#include "config.h"
#include "util.h"
#include "outputlist.h"
#include "language.h"
#include "scanner.h"
ClassList
::
ClassList
()
:
QList
<
ClassDef
>
()
{
...
...
@@ -43,3 +46,59 @@ ClassListIterator::ClassListIterator(const ClassList &cllist) :
QListIterator
<
ClassDef
>
(
cllist
)
{
}
void
ClassList
::
writeDeclaration
(
OutputList
&
ol
)
{
if
(
count
()
>
0
)
{
ClassDef
*
cd
=
first
();
bool
found
=
FALSE
;
while
(
cd
)
{
if
(
cd
->
name
().
find
(
'@'
)
==-
1
)
{
bool
isLink
=
cd
->
isLinkable
();
if
(
isLink
||
!
Config
::
hideClassFlag
)
{
if
(
!
found
)
{
ol
.
startMemberHeader
();
parseText
(
ol
,
theTranslator
->
trCompounds
());
ol
.
endMemberHeader
();
ol
.
startMemberList
();
found
=
TRUE
;
}
ol
.
startMemberItem
(
FALSE
);
switch
(
cd
->
compoundType
())
{
case
ClassDef
:
:
Class
:
ol
.
writeString
(
"class"
);
break
;
case
ClassDef
:
:
Struct
:
ol
.
writeString
(
"struct"
);
break
;
case
ClassDef
:
:
Union
:
ol
.
writeString
(
"union"
);
break
;
case
ClassDef
:
:
Interface
:
ol
.
writeString
(
"interface"
);
break
;
case
ClassDef
:
:
Exception
:
ol
.
writeString
(
"exception"
);
break
;
}
ol
.
writeString
(
" "
);
ol
.
insertMemberAlign
();
if
(
isLink
)
{
ol
.
writeObjectLink
(
cd
->
getReference
(),
cd
->
getOutputFileBase
(),
0
,
cd
->
name
()
);
}
else
{
ol
.
startBold
();
ol
.
docify
(
cd
->
name
());
ol
.
endBold
();
}
ol
.
endMemberItem
(
FALSE
);
}
}
cd
=
next
();
}
if
(
found
)
ol
.
endMemberList
();
}
}
src/classlist.h
View file @
26b5069c
...
...
@@ -30,6 +30,7 @@ class ClassList : public QList<ClassDef>
~
ClassList
();
int
compareItems
(
GCI
item1
,
GCI
item2
);
void
writeDeclaration
(
OutputList
&
ol
);
};
class
ClassListIterator
:
public
QListIterator
<
ClassDef
>
...
...
src/code.l
View file @
26b5069c
...
...
@@ -34,7 +34,6 @@
#include "outputlist.h"
#include "util.h"
#define YY_NO_UNPUT
#define YY_NEVER_INTERACTIVE 1
class CodeClassDef
...
...
@@ -107,12 +106,17 @@ static QCString g_exampleFile;
static int g_anchorCount;
static FileDef * g_sourceFileDef;
static bool g_includeCodeFragment;
static const char * g_currentFontClass;
// start a new line of code, inserting a line number if g_sourceFileDef
// is TRUE. If a definition starts at the current line, then the line
// number is linked to the documentation of that definition.
static void startCodeLine(OutputList &ol)
{
if (g_currentFontClass)
{
g_code->endFontClass();
}
if (g_sourceFileDef)
{
QCString lineNumber,lineAnchor;
...
...
@@ -135,6 +139,10 @@ static void startCodeLine(OutputList &ol)
}
}
ol.startCodeLine();
if (g_currentFontClass)
{
g_code->startFontClass(g_currentFontClass);
}
}
// write a code fragment `text' that may span multiple lines, inserting
...
...
@@ -175,8 +183,7 @@ static void writeMultiLineCodeLink(OutputList &ol,
const char *anchor,const char *text)
{
bool done=FALSE;
QCString ts = text;
char *p=ts.data();
char *p=(char *)text;
while (!done)
{
char *sp=p;
...
...
@@ -226,7 +233,7 @@ static void setClassScope(const QCString &name)
QCString n=name;
n=n.simplifyWhiteSpace();
int index;
if ((index=n.find("::"))!=-1)
if ((index=n.find
Rev
("::"))!=-1)
g_classScope=n.left(index);
else
g_classScope.resize(0);
...
...
@@ -238,11 +245,17 @@ static void addVariable()
g_cvd.name=g_name.copy().simplifyWhiteSpace();
g_cvd.type=g_type.copy().simplifyWhiteSpace();
if (g_type.isEmpty())
{
return;
else if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
}
else
{
g_cvd.classScope=g_classScope;
g_codeVarList.append(new CodeVarDef(g_cvd)); // add it to a list
//printf("adding variable `%s' `%s'\n",g_cvd.type.data(),g_cvd.name.data());
if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
{
g_cvd.classScope=g_classScope;
g_codeVarList.append(new CodeVarDef(g_cvd)); // add it to a list
}
}
}
...
...
@@ -251,20 +264,32 @@ static void addParameter()
g_cvd.name=g_parmName.copy().simplifyWhiteSpace();
g_cvd.type=g_parmType.copy().simplifyWhiteSpace();
if (g_cvd.type.isEmpty())
{
return;
else if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
}
else
{
g_cvd.classScope=g_classScope;
g_codeParmList.append(new CodeVarDef(g_cvd)); // add it to a list
//printf("adding parameter `%s' `%s'\n",g_cvd.type.data(),g_cvd.name.data());
if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
{
g_cvd.classScope=g_classScope;
g_codeParmList.append(new CodeVarDef(g_cvd)); // add it to a list
}
}
}
static void generateClassLink(OutputList &ol,char *clName)
static void generateClassLink(OutputList &ol,char *clName
,int *clNameLen=0
)
{
int i=0;
QCString className=clName;
if (clNameLen) *clNameLen=0;
if (className.isEmpty()) return;
ClassDef *cd;
if ((cd=getClass(className)) && cd->isLinkable())
ClassDef *cd=getClass(className);
if (cd==0 && (i=className.find('<'))!=-1)
{
cd=getClass(className.left(i));
}
if (cd && cd->isLinkable())
{
if (g_exampleBlock)
{
...
...
@@ -285,12 +310,13 @@ static void generateClassLink(OutputList &ol,char *clName)
g_anchorCount++;
}
}
//ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className);
writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,className);
if (clNameLen) *clNameLen=className.length()-i-1;
}
else
{
codifyLines(clName);
if (clNameLen) *clNameLen=className.length()-1;
}
}
...
...
@@ -330,11 +356,9 @@ static bool getLink(const char *className,
Definition *d=0;
if (cd) d=cd; else if (cd) d=nd; else if (fd) d=fd; else d=gd;
if (d)
if (d
&& d->isLinkable()
)
{
//printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data());
//result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
// md->anchor(),text ? text : memberName);
writeMultiLineCodeLink(result,d->getReference(),d->getOutputFileBase(),
md->anchor(),text ? text : memberName);
return TRUE;
...
...
@@ -413,7 +437,7 @@ static void generateMemberLink(OutputList &ol,const char *varName,
else
{
ClassDef *vcd = getClass(g_classScope);
if (vcd)
if (vcd
&& vcd->isLinkable()
)
{
//printf("Found class for variable `%s'\n",varName);
MemberName *vmn=memberNameDict[varName];
...
...
@@ -427,7 +451,7 @@ static void generateMemberLink(OutputList &ol,const char *varName,
{
//printf("Found variable type=%s\n",vmd->typeString());
ClassDef *mcd=stripClassName(vmd->typeString());
if (mcd)
if (mcd
&& mcd->isLinkable()
)
{
MemberName *mmn=memberNameDict[memName];
if (mmn)
...
...
@@ -438,8 +462,6 @@ static void generateMemberLink(OutputList &ol,const char *varName,
{
if (mmd->memberClass()==mcd)
{
//ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(),
// mmd->anchor(),memName);
writeMultiLineCodeLink(ol,mcd->getReference(),
mcd->getOutputFileBase(),mmd->anchor(),memName);
return;
...
...
@@ -519,6 +541,22 @@ static int countLines()
return count;
}
static void endFontClass()
{
if (g_currentFontClass)
{
g_code->endFontClass();
g_currentFontClass=0;
}
}
static void startFontClass(const char *s)
{
endFontClass();
g_code->startFontClass(s);
g_currentFontClass=s;
}
/* -----------------------------------------------------------------
*/
#undef YY_INPUT
...
...
@@ -541,6 +579,8 @@ B [ \t]
BN [ \t\n\r]
ID [a-z_A-Z][a-z_A-Z0-9]*
SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
KEYWORD ("asm"|"auto"|"break"|"case"|"catch"|"class"|"const_cast"|"continue"|"default"|"delete"|"do"|"dynamic_cast"|"else"|"enum"|"explicit"|"extern"|"false"|"for"|"friend"|"goto"|"if"|"inline"|"mutable"|"namespace"|"new"|"operator"|"private"|"protected"|"public"|"register"|"reinterpret_cast"|"return"|"sizeof"|"static"|"static_cast"|"struct"|"switch"|"template"|"this"|"throw"|"true"|"try"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"while")
TYPEKW ("bool"|"char"|"const"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"|"void"|"wchar_t")
%option noyywrap
...
...
@@ -564,11 +604,14 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<*>\x0d
<Body>^([ \t]*"#"[ \t]"include"[ \t]*)("<"|"\"") {
startFontClass("preprocessor");
g_code->codify(yytext);
BEGIN( ReadInclude );
}
<Body>("class"|"struct"|"union")[ \t\n]+ {
codifyLines(yytext);
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
//g_code->codify(yytext);
BEGIN( ClassName );
}
...
...
@@ -589,9 +632,11 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
QCString text;
text+=c;
g_code->codify(text);
endFontClass();
BEGIN( Body );
}
<Body>^[ \t]*"#" {
startFontClass("preprocessor");
g_code->codify(yytext);
BEGIN( SkipCPP ) ;
}
...
...
@@ -603,6 +648,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
<SkipCPP>\n {
codifyLines(yytext);
endFontClass();
BEGIN( Body ) ;
}
<SkipCPP>"//" {
...
...
@@ -653,17 +699,10 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
BEGIN( Body );
}
<Bases>"virtual" {
g_code->codify(yytext);
}
<Bases>"public" {
g_code->codify(yytext);
}
<Bases>"protected" {
g_code->codify(yytext);
}
<Bases>"private" {
<Bases>"virtual"|"public"|"protected"|"private" {
startFontClass("keyword");
g_code->codify(yytext);
endFontClass();
}
<Bases>{ID} {
//printf("%s:addBase(%s)\n",g_ccd.name.data(),yytext);
...
...
@@ -689,12 +728,24 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
<Body>("asm"|"auto"|"break"|"case"|"catch"|"continue"|"default"|"delete"|"do"|"else"|"for"|"goto"|"if"|"new"|"return"|"switch"|"this"|"throw"|"try"|"typedef"|"while")([ \t\n]*)/"(" {
<Body>{KEYWORD}/([^a-z_A-Z0-9]) {
startFontClass("keyword");
codifyLines(yytext);
g_name.resize(0);g_type.resize(0
);
endFontClass(
);
}
<Body>("asm"|"auto"|"break"|"case"|"catch"|"continue"|"default"|"delete"|"do"|"else"|"for"|"goto"|"if"|"new"|"return"|"switch"|"this"|"throw"|"try"|"typedef"|"while")([ \t\n]*) {
<Body>{KEYWORD}/{B}* {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
}
<Body>{KEYWORD}/{B}*"(" {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
g_name.resize(0);g_type.resize(0);
}
<Body>[\\|\)\+\-\/\%\~\!] {
g_code->codify(yytext);
g_name.resize(0);g_type.resize(0);
}
/*
...
...
@@ -704,7 +755,21 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
name+=yytext;
}
*/
<Body>{SCOPENAME}/[ \t\n]* {
<Body>{TYPEKW}/{B}* {
startFontClass("keyword");
g_code->codify(yytext);
endFontClass();
addType();
g_name+=yytext;
}
<Body>{SCOPENAME}{B}*"<"[^\}\{\(\)\/\n\>]*">"/{B}* {
int i;
generateClassLink(*g_code,yytext,&i);
addType();
QCString text=yytext;
g_name+=text.left(i);
}
<Body>{SCOPENAME}/{B}* {
generateClassLink(*g_code,yytext);
//codifyLines(yytext);
addType();
...
...
@@ -778,6 +843,13 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<Body>[0-9]+ {
g_code->codify(yytext);
}
<MemberCall2,FuncCall>({KEYWORD}|{TYPEKW})/([^a-z_A-Z0-9]) {
addParmType();
g_parmName=yytext;
startFontClass("keyword");
g_code->codify(yytext);
endFontClass();
}
<MemberCall2,FuncCall>[a-z_A-Z][:a-z_A-Z0-9]* {
addParmType();
g_parmName=yytext;
...
...
@@ -808,15 +880,21 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
g_parmType.resize(0);g_parmName.resize(0);
BEGIN( Body );
}
<MemberCall2,FuncCall>")"
[ \t\n]
*"{" {
<MemberCall2,FuncCall>")"
({BN}"const"|"volatile")*{BN}
*"{" {
addParameter();
g_parmType.resize(0);g_parmName.resize(0);
if (g_name.find("::")!=-1) setClassScope(g_name);
codifyLines(yytext);
g_code->codify(")");
startFontClass("keyword");
yytext[yyleng-1]='\0';
codifyLines(yytext+1);
endFontClass();
g_code->codify("{");
g_curlyCount++;
g_type.resize(0); g_name.resize(0);
BEGIN( Body );
}
/*
<MemberCall2,FuncCall>")"[ \t\n]*":" {
addParameter();
g_parmType.resize(0);g_parmName.resize(0);
...
...
@@ -825,6 +903,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
g_type.resize(0); g_name.resize(0);
BEGIN( SkipInits );
}
*/
<SkipInits>"{" {
g_code->codify(yytext);
g_curlyCount++;
...
...
@@ -861,13 +940,21 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
<SkipComment>[ \t]*"*/" {
g_code->codify(yytext);
endFontClass();
BEGIN( g_lastCContext ) ;
}
<SkipCxxComment>.*/\n {
//codifyLines(yytext);
<SkipCxxComment>[^\r\n]* {
g_code->codify(yytext);
BEGIN( g_lastCContext ) ;
}
<SkipCxxComment>\r
<SkipCxxComment>\n {
unput('\n');
endFontClass();
BEGIN( g_lastCContext ) ;
}
<SkipCxxComment>. {
g_code->codify(yytext);
}
<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*{B}*"/*"[*!]/[^/*] {
g_yyLineNr+=QCString(yytext).contains('\n');
}
...
...
@@ -899,7 +986,9 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
else
{
startFontClass("comment");
codifyLines(yytext);
endFontClass();
}
}
<*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment
...
...
@@ -914,7 +1003,9 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
else
{
startFontClass("comment");
codifyLines(yytext);
endFontClass();
}
}
<*>"//"[!/][^\n]*\n { // strip special one-line comment
...
...
@@ -925,7 +1016,9 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
else
{
startFontClass("comment");
codifyLines(yytext);
endFontClass();
}
}
<*>\n{B}*"/*"[!*]/[^/*] {
...
...
@@ -938,6 +1031,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
else
{
g_lastCContext = YY_START ;
startFontClass("comment");
codifyLines(yytext);
BEGIN(SkipComment);
}
...
...
@@ -951,6 +1045,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
else
{
g_lastCContext = YY_START ;
startFontClass("comment");
g_code->codify(yytext);
BEGIN(SkipComment);
}
...
...
@@ -964,21 +1059,26 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
else
{
g_lastCContext = YY_START ;
startFontClass("comment");
g_code->codify(yytext);
BEGIN(SkipComment);
}
}
<*>"/*"("!"?)"*/" { if (!Config::stripCommentsFlag)
{
startFontClass("comment");
g_code->codify(yytext);
endFontClass();
}
}
<*>"/*" {
startFontClass("comment");
g_code->codify(yytext);
g_lastCContext = YY_START ;
BEGIN( SkipComment ) ;
}
<*>"//" {
startFontClass("comment");
g_code->codify(yytext);
g_lastCContext = YY_START ;
BEGIN( SkipCxxComment ) ;
...
...
@@ -1025,6 +1125,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
if (s.isEmpty()) return;
g_inputString = s;
g_inputPosition = 0;
g_currentFontClass = 0;
if (endLine!=-1)
g_inputLines = endLine+1;
else
...
...
@@ -1051,6 +1152,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
codeYYrestart( codeYYin );
BEGIN( Body );
codeYYlex();
endFontClass();
//if (g_yyLineNr<=g_inputLines) code->endCodeLine();
ol+=*g_code;
delete g_code;
...
...
src/config.l
View file @
26b5069c
...
...
@@ -740,7 +740,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# by quotes) that should identify the project. \n";
t << "\n";
}
t << "PROJECT_NAME = ";
t << "PROJECT_NAME
= ";
writeStringValue(t,Config::projectName);
t << "\n";
if (!sl)
...
...
@@ -751,7 +751,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# if some version control system is used.\n";
t << "\n";
}
t << "PROJECT_NUMBER = ";
t << "PROJECT_NUMBER
= ";
writeStringValue(t,Config::projectNumber);
t << "\n";
if (!sl)
...
...
@@ -763,7 +763,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# where doxygen was started. If left blank the current directory will be used.\n";
t << "\n";
}
t << "OUTPUT_DIRECTORY = ";
t << "OUTPUT_DIRECTORY
= ";
writeStringValue(t,Config::outputDir);
t << "\n";
if (!sl)
...
...
@@ -777,7 +777,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# Spanish and Russian\n";
t << "\n";
}
t << "OUTPUT_LANGUAGE = ";
t << "OUTPUT_LANGUAGE
= ";
writeStringValue(t,Config::outputLanguage);
t << "\n";
if (!sl)
...
...
@@ -787,7 +787,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# by doxygen. Possible values are YES and NO. If left blank NO is used. \n";
t << "\n";
}
t << "QUIET = ";
t << "QUIET
= ";
writeBoolValue(t,Config::quietFlag);
t << "\n";
if (!sl)
...
...
@@ -798,7 +798,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# NO is used. \n";
t << "\n";
}
t << "WARNINGS = ";
t << "WARNINGS
= ";
writeBoolValue(t,Config::warningFlag);
t << "\n";
if (!sl)
...
...
@@ -809,7 +809,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the value YES disables it. \n";
t << "\n";
}
t << "DISABLE_INDEX = ";
t << "DISABLE_INDEX
= ";
writeBoolValue(t,Config::noIndexFlag);
t << "\n";
if (!sl)
...
...
@@ -819,7 +819,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# included in the documentation, even if no documentation was available. \n";
t << "\n";
}
t << "EXTRACT_ALL = ";
t << "EXTRACT_ALL
= ";
writeBoolValue(t,Config::extractAllFlag);
t << "\n";
if (!sl)
...
...
@@ -829,7 +829,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# will be included in the documentation. \n";
t << "\n";
}
t << "EXTRACT_PRIVATE = ";
t << "EXTRACT_PRIVATE
= ";
writeBoolValue(t,Config::extractPrivateFlag);
t << "\n";
if (!sl)
...
...
@@ -839,7 +839,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# undocumented members inside documented classes or files. \n";
t << "\n";
}
t << "HIDE_UNDOC_MEMBERS = ";
t << "HIDE_UNDOC_MEMBERS
= ";
writeBoolValue(t,Config::hideMemberFlag);
t << "\n";
if (!sl)
...
...
@@ -849,7 +849,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# undocumented classes. \n";
t << "\n";
}
t << "HIDE_UNDOC_CLASSES = ";
t << "HIDE_UNDOC_CLASSES
= ";
writeBoolValue(t,Config::hideClassFlag);
t << "\n";
if (!sl)
...
...
@@ -861,7 +861,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# Set to NO to disable this. \n";
t << "\n";
}
t << "BRIEF_MEMBER_DESC = ";
t << "BRIEF_MEMBER_DESC
= ";
writeBoolValue(t,Config::briefMemDescFlag);
t << "\n";
if (!sl)
...
...
@@ -873,7 +873,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# brief descriptions will be completely suppressed. \n";
t << "\n";
}
t << "REPEAT_BRIEF = ";
t << "REPEAT_BRIEF
= ";
writeBoolValue(t,Config::repeatBriefFlag);
t << "\n";
if (!sl)
...
...
@@ -884,7 +884,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# description. \n";
t << "\n";
}
t << "ALWAYS_DETAILED_SEC = ";
t << "ALWAYS_DETAILED_SEC
= ";
writeBoolValue(t,Config::alwaysDetailsFlag);
t << "\n";
if (!sl)
...
...
@@ -895,7 +895,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# to NO the shortest path that makes the file name unique will be used. \n";
t << "\n";
}
t << "FULL_PATH_NAMES = ";
t << "FULL_PATH_NAMES
= ";
writeBoolValue(t,Config::fullPathNameFlag);
t << "\n";
if (!sl)
...
...
@@ -907,7 +907,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the path. \n";
t << "\n";
}
t << "STRIP_FROM_PATH = ";
t << "STRIP_FROM_PATH
= ";
writeStringList(t,Config::stripFromPath);
t << "\n";
if (!sl)
...
...
@@ -919,7 +919,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# Set it to YES to include the internal documentation. \n";
t << "\n";
}
t << "INTERNAL_DOCS = ";
t << "INTERNAL_DOCS
= ";
writeBoolValue(t,Config::internalDocsFlag);
t << "\n";
if (!sl)
...
...
@@ -930,7 +930,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# super classes. Setting the tag to NO turns the diagrams off. \n";
t << "\n";
}
t << "CLASS_DIAGRAMS = ";
t << "CLASS_DIAGRAMS
= ";
writeBoolValue(t,Config::classDiagramFlag);
t << "\n";
if (!sl)
...
...
@@ -940,7 +940,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# be generated. Documented entities will be cross-referenced with these sources. \n";
t << "\n";
}
t << "SOURCE_BROWSER = ";
t << "SOURCE_BROWSER
= ";
writeBoolValue(t,Config::sourceBrowseFlag);
t << "\n";
if (!sl)
...
...
@@ -950,7 +950,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# of functions and classes directly in the documentation. \n";
t << "\n";
}
t << "INLINE_SOURCES = ";
t << "INLINE_SOURCES
= ";
writeBoolValue(t,Config::inlineSourceFlag);
t << "\n";
if (!sl)
...
...
@@ -961,7 +961,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# fragments. Normal C and C++ comments will always remain visible. \n";
t << "\n";
}
t << "STRIP_CODE_COMMENTS = ";
t << "STRIP_CODE_COMMENTS
= ";
writeBoolValue(t,Config::stripCommentsFlag);
t << "\n";
if (!sl)
...
...
@@ -974,7 +974,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# supports case sensitive file names. \n";
t << "\n";
}
t << "CASE_SENSE_NAMES = ";
t << "CASE_SENSE_NAMES
= ";
writeBoolValue(t,Config::caseSensitiveNames);
t << "\n";
if (!sl)
...
...
@@ -985,7 +985,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# which an include is specified. Set to NO to disable this. \n";
t << "\n";
}
t << "VERBATIM_HEADERS = ";
t << "VERBATIM_HEADERS
= ";
writeBoolValue(t,Config::verbatimHeaderFlag);
t << "\n";
if (!sl)
...
...
@@ -996,7 +996,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# of that file. \n";
t << "\n";
}
t << "SHOW_INCLUDE_FILES = ";
t << "SHOW_INCLUDE_FILES
= ";
writeBoolValue(t,Config::showIncFileFlag);
t << "\n";
if (!sl)
...
...
@@ -1008,7 +1008,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# behave just like the Qt-style comments. \n";
t << "\n";
}
t << "JAVADOC_AUTOBRIEF = ";
t << "JAVADOC_AUTOBRIEF
= ";
writeBoolValue(t,Config::autoBriefFlag);
t << "\n";
if (!sl)
...
...
@@ -1019,7 +1019,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# reimplements. \n";
t << "\n";
}
t << "INHERIT_DOCS = ";
t << "INHERIT_DOCS
= ";
writeBoolValue(t,Config::inheritDocsFlag);
t << "\n";
if (!sl)
...
...
@@ -1029,7 +1029,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# is inserted in the documentation for inline members. \n";
t << "\n";
}
t << "INLINE_INFO = ";
t << "INLINE_INFO
= ";
writeBoolValue(t,Config::inlineInfoFlag);
t << "\n";
if (!sl)
...
...
@@ -1041,7 +1041,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# declaration order. \n";
t << "\n";
}
t << "SORT_MEMBER_DOCS = ";
t << "SORT_MEMBER_DOCS
= ";
writeBoolValue(t,Config::sortMembersFlag);
t << "\n";
if (!sl)
...
...
@@ -1051,7 +1051,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# Doxygen uses this value to replace tabs by spaces in code fragments. \n";
t << "\n";
}
t << "TAB_SIZE = ";
t << "TAB_SIZE
= ";
writeIntValue(t,Config::tabSize);
t << "\n";
if (!sl)
...
...
@@ -1061,7 +1061,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# documentation sections, marked by \\if sectionname ... \\endif. \n";
t << "\n";
}
t << "ENABLED_SECTIONS = ";
t << "ENABLED_SECTIONS
= ";
writeStringList(t,Config::sectionFilterList);
t << "\n";
if (!sl)
...
...
@@ -1080,7 +1080,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# with spaces. \n";
t << "\n";
}
t << "INPUT = ";
t << "INPUT
= ";
writeStringList(t,Config::inputSources);
t << "\n";
if (!sl)
...
...
@@ -1092,7 +1092,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# blank all files are included. \n";
t << "\n";
}
t << "FILE_PATTERNS = ";
t << "FILE_PATTERNS
= ";
writeStringList(t,Config::filePatternList);
t << "\n";
if (!sl)
...
...
@@ -1103,7 +1103,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# If left blank NO is used. \n";
t << "\n";
}
t << "RECURSIVE = ";
t << "RECURSIVE
= ";
writeBoolValue(t,Config::recursiveFlag);
t << "\n";
if (!sl)
...
...
@@ -1114,7 +1114,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# subdirectory from a directory tree whose root is specified with the INPUT tag. \n";
t << "\n";
}
t << "EXCLUDE = ";
t << "EXCLUDE
= ";
writeStringList(t,Config::excludeSources);
t << "\n";
if (!sl)
...
...
@@ -1125,7 +1125,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# certain files from those directories. \n";
t << "\n";
}
t << "EXCLUDE_PATTERNS = ";
t << "EXCLUDE_PATTERNS
= ";
writeStringList(t,Config::excludePatternList);
t << "\n";
if (!sl)
...
...
@@ -1136,7 +1136,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the \\include command). \n";
t << "\n";
}
t << "EXAMPLE_PATH = ";
t << "EXAMPLE_PATH
= ";
writeStringList(t,Config::examplePath);
t << "\n";
if (!sl)
...
...
@@ -1148,7 +1148,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# blank all files are included. \n";
t << "\n";
}
t << "EXAMPLE_PATTERNS = ";
t << "EXAMPLE_PATTERNS
= ";
writeStringList(t,Config::examplePatternList);
t << "\n";
if (!sl)
...
...
@@ -1159,7 +1159,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the \\image command). \n";
t << "\n";
}
t << "IMAGE_PATH = ";
t << "IMAGE_PATH
= ";
writeStringList(t,Config::imagePath);
t << "\n";
if (!sl)
...
...
@@ -1173,7 +1173,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# to standard output. \n";
t << "\n";
}
t << "INPUT_FILTER = ";
t << "INPUT_FILTER
= ";
writeStringValue(t,Config::inputFilter);
t << "\n";
if (!sl)
...
...
@@ -1191,7 +1191,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# contains a lot of classes, structs, unions or interfaces. \n";
t << "\n";
}
t << "ALPHABETICAL_INDEX = ";
t << "ALPHABETICAL_INDEX
= ";
writeBoolValue(t,Config::alphaIndexFlag);
t << "\n";
if (!sl)
...
...
@@ -1202,7 +1202,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# in which this list will be split (can be a number in the range [1..20]) \n";
t << "\n";
}
t << "COLS_IN_ALPHA_INDEX = ";
t << "COLS_IN_ALPHA_INDEX
= ";
writeIntValue(t,Config::colsInAlphaIndex);
t << "\n";
if (!sl)
...
...
@@ -1214,7 +1214,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# should be ignored while generating the index headers. \n";
t << "\n";
}
t << "IGNORE_PREFIX = ";
t << "IGNORE_PREFIX
= ";
writeStringList(t,Config::ignorePrefixList);
t << "\n";
if (!sl)
...
...
@@ -1231,7 +1231,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# generate HTML output. \n";
t << "\n";
}
t << "GENERATE_HTML = ";
t << "GENERATE_HTML
= ";
writeBoolValue(t,Config::generateHtml);
t << "\n";
if (!sl)
...
...
@@ -1242,7 +1242,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# put in front of it. If left blank `html' will be used as the default path. \n";
t << "\n";
}
t << "HTML_OUTPUT = ";
t << "HTML_OUTPUT
= ";
writeStringValue(t,Config::htmlOutputDir);
t << "\n";
if (!sl)
...
...
@@ -1253,7 +1253,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# standard header.\n";
t << "\n";
}
t << "HTML_HEADER = ";
t << "HTML_HEADER
= ";
writeStringValue(t,Config::headerFile);
t << "\n";
if (!sl)
...
...
@@ -1264,7 +1264,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# standard footer.\n";
t << "\n";
}
t << "HTML_FOOTER = ";
t << "HTML_FOOTER
= ";
writeStringValue(t,Config::footerFile);
t << "\n";
if (!sl)
...
...
@@ -1276,7 +1276,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# will generate a default style sheet \n";
t << "\n";
}
t << "HTML_STYLESHEET = ";
t << "HTML_STYLESHEET
= ";
writeStringValue(t,Config::htmlStyleSheet);
t << "\n";
if (!sl)
...
...
@@ -1287,7 +1287,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# NO a bullet list will be used. \n";
t << "\n";
}
t << "HTML_ALIGN_MEMBERS = ";
t << "HTML_ALIGN_MEMBERS
= ";
writeBoolValue(t,Config::htmlAlignMemberFlag);
t << "\n";
if (!sl)
...
...
@@ -1299,7 +1299,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# of the generated HTML documentation. \n";
t << "\n";
}
t << "GENERATE_HTMLHELP = ";
t << "GENERATE_HTMLHELP
= ";
writeBoolValue(t,Config::htmlHelpFlag);
t << "\n";
if (!sl)
...
...
@@ -1316,7 +1316,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# generate Latex output. \n";
t << "\n";
}
t << "GENERATE_LATEX = ";
t << "GENERATE_LATEX
= ";
writeBoolValue(t,Config::generateLatex);
t << "\n";
if (!sl)
...
...
@@ -1327,7 +1327,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# put in front of it. If left blank `latex' will be used as the default path. \n";
t << "\n";
}
t << "LATEX_OUTPUT = ";
t << "LATEX_OUTPUT
= ";
writeStringValue(t,Config::latexOutputDir);
t << "\n";
if (!sl)
...
...
@@ -1338,7 +1338,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# save some trees in general. \n";
t << "\n";
}
t << "COMPACT_LATEX = ";
t << "COMPACT_LATEX
= ";
writeBoolValue(t,Config::compactLatexFlag);
t << "\n";
if (!sl)
...
...
@@ -1349,7 +1349,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# executive. If left blank a4wide will be used. \n";
t << "\n";
}
t << "PAPER_TYPE = ";
t << "PAPER_TYPE
= ";
writeStringValue(t,Config::paperType);
t << "\n";
if (!sl)
...
...
@@ -1359,7 +1359,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# packages that should be included in the LaTeX output. \n";
t << "\n";
}
t << "EXTRA_PACKAGES = ";
t << "EXTRA_PACKAGES
= ";
writeStringList(t,Config::extraPackageList);
t << "\n";
if (!sl)
...
...
@@ -1371,7 +1371,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# standard header. Notice: only use this tag if you know what you are doing! \n";
t << "\n";
}
t << "LATEX_HEADER = ";
t << "LATEX_HEADER
= ";
writeStringValue(t,Config::latexHeaderFile);
t << "\n";
if (!sl)
...
...
@@ -1383,7 +1383,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# This makes the output suitable for online browsing using a pdf viewer. \n";
t << "\n";
}
t << "PDF_HYPERLINKS = ";
t << "PDF_HYPERLINKS
= ";
writeBoolValue(t,Config::pdfHyperFlag);
t << "\n";
if (!sl)
...
...
@@ -1395,7 +1395,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# This option is also used when generating formulas in HTML. \n";
t << "\n";
}
t << "LATEX_BATCHMODE = ";
t << "LATEX_BATCHMODE
= ";
writeBoolValue(t,Config::latexBatchModeFlag);
t << "\n";
if (!sl)
...
...
@@ -1414,7 +1414,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# or editors.\n";
t << "\n";
}
t << "GENERATE_RTF = ";
t << "GENERATE_RTF
= ";
writeBoolValue(t,Config::generateRTF);
t << "\n";
if (!sl)
...
...
@@ -1425,7 +1425,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# put in front of it. If left blank `rtf' will be used as the default path. \n";
t << "\n";
}
t << "RTF_OUTPUT = ";
t << "RTF_OUTPUT
= ";
writeStringValue(t,Config::rtfOutputDir);
t << "\n";
if (!sl)
...
...
@@ -1436,7 +1436,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# save some trees in general. \n";
t << "\n";
}
t << "COMPACT_RTF = ";
t << "COMPACT_RTF
= ";
writeBoolValue(t,Config::compactRTFFlag);
t << "\n";
if (!sl)
...
...
@@ -1450,7 +1450,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# Note: wordpad (write) and others do not support links. \n";
t << "\n";
}
t << "RTF_HYPERLINKS = ";
t << "RTF_HYPERLINKS
= ";
writeBoolValue(t,Config::rtfHyperFlag);
t << "\n";
if (!sl)
...
...
@@ -1467,7 +1467,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# generate man pages \n";
t << "\n";
}
t << "GENERATE_MAN = ";
t << "GENERATE_MAN
= ";
writeBoolValue(t,Config::generateMan);
t << "\n";
if (!sl)
...
...
@@ -1478,7 +1478,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# put in front of it. If left blank `man' will be used as the default path. \n";
t << "\n";
}
t << "MAN_OUTPUT = ";
t << "MAN_OUTPUT
= ";
writeStringValue(t,Config::manOutputDir);
t << "\n";
if (!sl)
...
...
@@ -1488,7 +1488,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the generated man pages (default is the subroutine's section .3) \n";
t << "\n";
}
t << "MAN_EXTENSION = ";
t << "MAN_EXTENSION
= ";
writeStringValue(t,Config::manExtension);
t << "\n";
if (!sl)
...
...
@@ -1506,7 +1506,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# files. \n";
t << "\n";
}
t << "ENABLE_PREPROCESSING = ";
t << "ENABLE_PREPROCESSING
= ";
writeBoolValue(t,Config::preprocessingFlag);
t << "\n";
if (!sl)
...
...
@@ -1517,7 +1517,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# compilation will be performed. \n";
t << "\n";
}
t << "MACRO_EXPANSION = ";
t << "MACRO_EXPANSION
= ";
writeBoolValue(t,Config::macroExpansionFlag);
t << "\n";
if (!sl)
...
...
@@ -1527,7 +1527,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# in the INCLUDE_PATH (see below) will be search if a #include is found. \n";
t << "\n";
}
t << "SEARCH_INCLUDES = ";
t << "SEARCH_INCLUDES
= ";
writeBoolValue(t,Config::searchIncludeFlag);
t << "\n";
if (!sl)
...
...
@@ -1538,7 +1538,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the preprocessor. \n";
t << "\n";
}
t << "INCLUDE_PATH = ";
t << "INCLUDE_PATH
= ";
writeStringList(t,Config::includePath);
t << "\n";
if (!sl)
...
...
@@ -1551,7 +1551,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# omitted =1 is assumed. \n";
t << "\n";
}
t << "PREDEFINED = ";
t << "PREDEFINED
= ";
writeStringList(t,Config::predefined);
t << "\n";
if (!sl)
...
...
@@ -1562,7 +1562,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# PREDEFINED tag. \n";
t << "\n";
}
t << "EXPAND_ONLY_PREDEF = ";
t << "EXPAND_ONLY_PREDEF
= ";
writeBoolValue(t,Config::onlyPredefinedFlag);
t << "\n";
if (!sl)
...
...
@@ -1578,7 +1578,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# The TAGFILES tag can be used to specify one or more tagfiles. \n";
t << "\n";
}
t << "TAGFILES = ";
t << "TAGFILES
= ";
writeStringList(t,Config::tagFileList);
t << "\n";
if (!sl)
...
...
@@ -1588,7 +1588,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# a tag file that is based on the input files it reads. \n";
t << "\n";
}
t << "GENERATE_TAGFILE = ";
t << "GENERATE_TAGFILE
= ";
writeStringValue(t,Config::genTagFile);
t << "\n";
if (!sl)
...
...
@@ -1599,7 +1599,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# will be listed. \n";
t << "\n";
}
t << "ALLEXTERNALS = ";
t << "ALLEXTERNALS
= ";
writeBoolValue(t,Config::allExtFlag);
t << "\n";
if (!sl)
...
...
@@ -1609,7 +1609,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# interpreter (i.e. the result of `which perl'). \n";
t << "\n";
}
t << "PERL_PATH = ";
t << "PERL_PATH
= ";
writeStringValue(t,Config::perlPath);
t << "\n";
if (!sl)
...
...
@@ -1628,7 +1628,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# have no effect if this option is set to NO (the default) \n";
t << "\n";
}
t << "HAVE_DOT = ";
t << "HAVE_DOT
= ";
writeBoolValue(t,Config::haveDotFlag);
t << "\n";
if (!sl)
...
...
@@ -1640,7 +1640,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# class references variables) of the class with other documented classes. \n";
t << "\n";
}
t << "COLLABORATION_GRAPH = ";
t << "COLLABORATION_GRAPH
= ";
writeBoolValue(t,Config::collGraphFlag);
t << "\n";
if (!sl)
...
...
@@ -1652,7 +1652,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# documented files. \n";
t << "\n";
}
t << "INCLUDE_GRAPH = ";
t << "INCLUDE_GRAPH
= ";
writeBoolValue(t,Config::includeGraphFlag);
t << "\n";
if (!sl)
...
...
@@ -1662,7 +1662,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# will graphical hierarchy of all classes instead of a textual one. \n";
t << "\n";
}
t << "GRAPHICAL_HIERARCHY = ";
t << "GRAPHICAL_HIERARCHY
= ";
writeBoolValue(t,Config::gfxHierarchyFlag);
t << "\n";
if (!sl)
...
...
@@ -1679,7 +1679,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# used. If set to NO the values of all tags below this one will be ignored. \n";
t << "\n";
}
t << "SEARCHENGINE = ";
t << "SEARCHENGINE
= ";
writeBoolValue(t,Config::searchEngineFlag);
t << "\n";
if (!sl)
...
...
@@ -1690,7 +1690,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# A script with this name will be generated by doxygen. \n";
t << "\n";
}
t << "CGI_NAME = ";
t << "CGI_NAME
= ";
writeStringValue(t,Config::cgiName);
t << "\n";
if (!sl)
...
...
@@ -1701,7 +1701,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# details. \n";
t << "\n";
}
t << "CGI_URL = ";
t << "CGI_URL
= ";
writeStringValue(t,Config::cgiURL);
t << "\n";
if (!sl)
...
...
@@ -1712,7 +1712,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# documentation, with file:// prepended to it, will be used. \n";
t << "\n";
}
t << "DOC_URL = ";
t << "DOC_URL
= ";
writeStringValue(t,Config::docURL);
t << "\n";
if (!sl)
...
...
@@ -1723,7 +1723,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# will be used. \n";
t << "\n";
}
t << "DOC_ABSPATH = ";
t << "DOC_ABSPATH
= ";
writeStringValue(t,Config::docAbsPath);
t << "\n";
if (!sl)
...
...
@@ -1733,7 +1733,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# is installed. \n";
t << "\n";
}
t << "BIN_ABSPATH = ";
t << "BIN_ABSPATH
= ";
writeStringValue(t,Config::binAbsPath);
t << "\n";
if (!sl)
...
...
@@ -1744,7 +1744,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the documentation for these projects as well. \n";
t << "\n";
}
t << "EXT_DOC_PATHS = ";
t << "EXT_DOC_PATHS
= ";
writeStringList(t,Config::extDocPathList);
t << "\n";
}
...
...
@@ -1808,65 +1808,79 @@ static void substEnvVarsInStrList(QStrList &sl)
while (s)
{
QCString result(s);
bool wasQuoted = (result.find(' ')!=-1) || (result.find('\t')!=-1);
substEnvVarsInString(result);
int l=result.length();
int i,p=0;
// skip spaces
// search for a "word"
for (i=0;i<l;i++)
if (!wasQuoted) /* as a result of the expansion, a single string
may have expanded into a list, which we'll
add to sl. If the orginal string already
contained multiple elements no splitting is done! */
{
char c;
// skip until start of new word
for (;i<l && ((c=result.at(i))==' ' || c=='\t');i++)
p=i; // p marks the start index of the word
// skip until end of a word
for (;i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"');i++);
if (i<l) // not at the end of the string
int l=result.length();
int i,p=0;
// skip spaces
// search for a "word"
for (i=0;i<l;i++)
{
if (c=='"') // word within quotes
char c;
// skip until start of new word
for (;i<l && ((c=result.at(i))==' ' || c=='\t');i++)
p=i; // p marks the start index of the word
// skip until end of a word
for (;i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"');i++);
if (i<l) // not at the end of the string
{
p=i+1;
for (i++;i<l;i++)
if (c=='"') // word within quotes
{
c=result.at(i)
;
if (c=='"') // end quote
p=i+1
;
for (i++;i<l;i++)
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
sl.next(); // current item is now the old item
p=i+1;
break;
}
else if (c=='\\') // skip escaped stuff
{
i++;
c=result.at(i);
if (c=='"') // end quote
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
sl.next(); // current item is now the old item
p=i+1;
break;
}
else if (c=='\\') // skip escaped stuff
{
i++;
}
}
}
}
else if (c==' ' || c=='\t') // separator
{
// replace the string in the list and go to the nex
t item.
sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
sl.next(); // current item is now the old item
p=i+1;
else if (c==' ' || c=='\t') // separator
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before curren
t item.
sl.next(); // current item is now the old item
p=i+1;
}
}
}
if (p!=l) // add the leftover as a string
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.right(l-p)); // insert new item before current item.
sl.next(); // current item is now the old item
}
// remove the old unexpanded string from the list
i=sl.at();
sl.remove(); // current item index changes if the last element is removed.
if (sl.at()==i) // not last item
s = sl.current();
else // just removed last item
s = 0;
}
if (p!=l) // add the leftover as a string
else // just goto the next element in the list
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.right(l-p)); // insert new item before current item.
sl.next(); // current item is now the old item
s=sl.next();
}
// remove the old unexpanded string from the list
i=sl.at();
sl.remove(); // current item index changes if the last element is removed.
if (sl.at()==i) // not last item
s = sl.current();
else // just removed last item
s = 0;
}
}
...
...
src/declinfo.l
View file @
26b5069c
...
...
@@ -56,7 +56,7 @@ static void addType()
//printf("addType() type=`%s' scope=`%s' name=`%s'\n",
// type.data(),scope.data(),name.data());
if (name.isEmpty() && scope.isEmpty()) return;
if (!type.isEmpty()) type+=
' '
;
if (!type.isEmpty()) type+=
" "
;
if (!scope.isEmpty()) type+=scope+"::";
type+=name;
scope.resize(0);
...
...
src/definition.h
View file @
26b5069c
...
...
@@ -48,9 +48,12 @@ class Definition
/*! sets a new \a name for the definition */
void
setName
(
const
char
*
name
)
{
n
=
name
;
}
/*! sets the documentation of this definition to \a d. */
void
setDocumentation
(
const
char
*
d
)
void
setDocumentation
(
const
char
*
d
,
bool
stripWhiteSpace
=
TRUE
)
{
doc
=
((
QCString
)
d
).
stripWhiteSpace
();
if
(
stripWhiteSpace
)
doc
=
((
QCString
)
d
).
stripWhiteSpace
();
else
doc
=
d
;
}
/*! sets the brief description of this definition to \a b.
* A dot is added to the sentence if not available.
...
...
src/diagram.cpp
View file @
26b5069c
...
...
@@ -196,7 +196,14 @@ DiagramItem::~DiagramItem()
QCString
DiagramItem
::
label
()
const
{
return
classDef
->
name
()
+
templSpec
;
if
(
!
templSpec
.
isEmpty
())
{
return
insertTemplateSpecifierInScope
(
classDef
->
name
(),
templSpec
);
}
else
{
return
classDef
->
name
();
}
}
QCString
DiagramItem
::
fileName
()
const
...
...
src/dot.cpp
View file @
26b5069c
...
...
@@ -277,6 +277,19 @@ void DotNode::deleteNode(DotNodeList &deletedList)
deletedList
.
append
(
this
);
}
static
QCString
convertLabel
(
const
QCString
&
l
)
{
QCString
result
;
const
char
*
p
=
l
.
data
();
char
c
;
while
((
c
=*
p
++
))
{
if
(
c
==
'\\'
)
result
+=
"
\\\\
"
;
else
result
+=
c
;
}
return
result
;
}
void
DotNode
::
writeBox
(
QTextStream
&
t
,
bool
hasNonReachableChildren
)
{
const
char
*
labCol
=
...
...
@@ -284,7 +297,8 @@ void DotNode::writeBox(QTextStream &t,bool hasNonReachableChildren)
(
(
hasNonReachableChildren
)
?
"red"
:
"black"
);
t
<<
" Node"
<<
m_number
<<
" [shape=
\"
box
\"
,label=
\"
"
<<
m_label
t
<<
" Node"
<<
m_number
<<
" [shape=
\"
box
\"
,label=
\"
"
<<
convertLabel
(
m_label
)
<<
"
\"
,fontsize=10,height=0.2,width=0.4,fontname=
\"
doxfont
\"
"
;
t
<<
",color=
\"
"
<<
labCol
<<
"
\"
"
;
if
(
m_isRoot
)
...
...
src/doxygen.cpp
View file @
26b5069c
...
...
@@ -258,7 +258,10 @@ void buildFileList(Entry *root)
}
else
{
fd
->
setDocumentation
(
root
->
doc
);
// using FALSE in setDocumentation is small hack to make sure a file
// is documented even if a \file command is used without further
// documentation
fd
->
setDocumentation
(
root
->
doc
,
FALSE
);
fd
->
setBriefDescription
(
root
->
brief
);
fd
->
addSectionsToDefinition
(
root
->
anchors
);
QListIterator
<
QCString
>
sli
(
*
root
->
groups
);
...
...
@@ -1729,12 +1732,13 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
if
(
baseClassName
!=
root
->
name
)
// check for base class with the same name,
// look in the outer scope for a match
{
//printf("baseClass %s of %s found (%s and %s)\n",
// baseClassName.data(),
// root->name.data(),
// (bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"),
// (bi->virt==Normal)?"normal":"virtual"
// );
Debug
::
print
(
Debug
::
Classes
,
0
,
"baseClass %s of %s found (%s and %s)
\n
"
,
baseClassName
.
data
(),
root
->
name
.
data
(),
(
bi
->
prot
==
Private
)
?
"private"
:
((
bi
->
prot
==
Protected
)
?
"protected"
:
"public"
),
(
bi
->
virt
==
Normal
)
?
"normal"
:
"virtual"
);
int
i
;
QCString
templSpec
;
...
...
@@ -1743,11 +1747,15 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
{
// TODO: here we should try to find the correct template specialization
// but for now, we only look for the unspecializated base class.
templSpec
=
baseClassName
.
right
(
baseClassName
.
length
()
-
i
);
baseClassName
=
baseClassName
.
left
(
i
);
baseClass
=
getResolvedClass
(
baseClassName
);
//printf("baseClass=%p baseClass=%s templSpec=%s\n",
// baseClass,baseClassName.data(),templSpec.data());
int
e
=
baseClassName
.
find
(
'>'
);
if
(
e
!=-
1
)
{
templSpec
=
baseClassName
.
mid
(
i
,
e
-
i
+
1
);
baseClassName
=
baseClassName
.
left
(
i
)
+
baseClassName
.
right
(
baseClassName
.
length
()
-
e
-
1
);
baseClass
=
getResolvedClass
(
baseClassName
);
//printf("baseClass=%p baseClass=%s templSpec=%s\n",
// baseClass,baseClassName.data(),templSpec.data());
}
}
bool
found
=
baseClass
!=
0
&&
baseClass
!=
cd
;
...
...
@@ -1819,7 +1827,6 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
}
else
{
//printf(">>> base class %s not found!\n",bi->name.data());
Debug
::
print
(
Debug
::
Classes
,
0
,
" Base class `%s' not found
\n
"
,
bi
->
name
.
data
());
}
}
...
...
@@ -2063,33 +2070,6 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
}
}
//----------------------------------------------------------------------
static
QCString
insertTemplateSpecifierInScope
(
const
QCString
&
scope
,
const
QCString
&
templ
)
{
QCString
result
=
scope
.
copy
();
if
(
!
templ
.
isEmpty
()
&&
scope
.
find
(
'<'
)
==-
1
)
{
int
si
,
pi
=
0
;
while
((
si
=
scope
.
find
(
"::"
,
pi
))
!=-
1
&&
!
getClass
(
scope
.
left
(
si
)
+
templ
)
&&
!
getClass
(
scope
.
left
(
si
)))
{
//printf("Tried `%s'\n",(scope.left(si)+templ).data());
pi
=
si
+
2
;
}
if
(
si
==-
1
)
// not nested => append template specifier
{
result
+=
templ
;
}
else
// nested => insert template specifier before after first class name
{
result
=
scope
.
left
(
si
)
+
templ
+
scope
.
right
(
scope
.
length
()
-
si
);
}
}
//printf("insertTemplateSpecifierInScope(`%s',`%s')=%s\n",
// scope.data(),templ.data(),result.data());
return
result
;
}
//----------------------------------------------------------------------
// find a class definition given the scope name and (optionally) a
// template list specifier
...
...
@@ -2573,9 +2553,6 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
QCString
fullFuncDecl
=
funcDecl
.
copy
();
if
(
isFunc
)
fullFuncDecl
+=
argListToString
(
root
->
argList
);
//printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data());
//printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data());
// destructor => do backward class name substitution if needed
//if (!funcName.isEmpty() && funcName[0]=='~')
// funcName="~"+resolveDefines(className);
...
...
@@ -3681,12 +3658,6 @@ void generateClassDocs()
msg
(
"Generating hierarchical class index...
\n
"
);
writeHierarchicalIndex
(
*
outputList
);
//if (documentedIncludeFiles>0)
//{
// msg("Generating header index...\n");
// writeHeaderIndex(*outputList);
//}
msg
(
"Generating member index...
\n
"
);
writeMemberIndex
(
*
outputList
);
...
...
@@ -3706,11 +3677,6 @@ void generateClassDocs()
cd
->
writeDocumentation
(
*
outputList
);
cd
->
writeMemberList
(
*
outputList
);
//DotGfxUsageGraph usageIntfGraph(cd,FALSE,1);
//usageIntfGraph.writeGraph(Config::htmlOutputDir,FALSE);
//if (Config::verbatimHeaderFlag) cd->writeIncludeFile(*outputList);
}
}
}
...
...
@@ -4262,12 +4228,13 @@ void generateSearchIndex()
err
(
"Error: Cannot open file %s for writing
\n
"
,
fileName
.
data
());
}
//outputList->generateExternalIndex();
outputList
->
pushGeneratorState
();
outputList
->
disableAllBut
(
OutputGenerator
::
Html
);
startFile
(
*
outputList
,
"header.html"
,
"Search Engine"
,
TRUE
);
outputList
->
endPlainFile
();
outputList
->
startPlainFile
(
"footer.html"
);
endFile
(
*
outputList
,
TRUE
);
outputList
->
enableAll
();
outputList
->
popGeneratorState
();
}
}
...
...
@@ -5161,9 +5128,6 @@ int main(int argc,char **argv)
msg
(
"Generating group documentation...
\n
"
);
generateGroupDocs
();
//msg("Generating member group documentation...\n");
//generateMemberGroupDocs();
msg
(
"Generating namespace index...
\n
"
);
generateNamespaceDocs
();
...
...
@@ -5186,6 +5150,7 @@ int main(int argc,char **argv)
generateSearchIndex
();
msg
(
"Generating style sheet...
\n
"
);
//outputList->enable(OutputGenerator::Latex);
outputList
->
writeStyleInfo
(
0
);
// write first part
outputList
->
disableAllBut
(
OutputGenerator
::
Latex
);
parseText
(
*
outputList
,
...
...
src/filedef.cpp
View file @
26b5069c
...
...
@@ -247,53 +247,8 @@ void FileDef::writeDocumentation(OutputList &ol)
}
if
(
found
)
ol
.
endMemberList
();
}
if
(
classList
->
count
()
>
0
)
{
ClassDef
*
cd
=
classList
->
first
();
bool
found
=
FALSE
;
while
(
cd
)
{
if
(
cd
->
name
().
find
(
'@'
)
==-
1
)
{
if
(
!
found
)
{
ol
.
startMemberHeader
();
parseText
(
ol
,
theTranslator
->
trCompounds
());
ol
.
endMemberHeader
();
ol
.
startMemberList
();
found
=
TRUE
;
}
ol
.
startMemberItem
(
FALSE
);
switch
(
cd
->
compoundType
())
{
case
ClassDef
:
:
Class
:
ol
.
writeString
(
"class"
);
break
;
case
ClassDef
:
:
Struct
:
ol
.
writeString
(
"struct"
);
break
;
case
ClassDef
:
:
Union
:
ol
.
writeString
(
"union"
);
break
;
case
ClassDef
:
:
Interface
:
ol
.
writeString
(
"interface"
);
break
;
case
ClassDef
:
:
Exception
:
ol
.
writeString
(
"exception"
);
break
;
}
ol
.
writeString
(
" "
);
ol
.
insertMemberAlign
();
if
(
cd
->
isLinkable
())
{
ol
.
writeObjectLink
(
cd
->
getReference
(),
cd
->
getOutputFileBase
(),
0
,
cd
->
name
()
);
}
else
{
ol
.
startBold
();
ol
.
docify
(
cd
->
name
());
ol
.
endBold
();
}
ol
.
endMemberItem
(
FALSE
);
}
cd
=
classList
->
next
();
}
if
(
found
)
ol
.
endMemberList
();
}
classList
->
writeDeclaration
(
ol
);
/* write user defined member groups */
MemberGroupListIterator
mgli
(
*
memberGroupList
);
...
...
@@ -309,8 +264,10 @@ void FileDef::writeDocumentation(OutputList &ol)
//doc=doc.stripWhiteSpace();
//int bl=brief.length();
//int dl=doc.length();
if
(
!
briefDescription
().
isEmpty
()
||
!
documentation
().
isEmpty
()
||
startBodyLine
!=-
1
)
if
((
!
briefDescription
().
isEmpty
()
&&
Config
::
repeatBriefFlag
)
||
!
documentation
().
isEmpty
()
/* || startBodyLine!=-1 */
)
{
ol
.
writeRuler
();
ol
.
pushGeneratorState
();
...
...
@@ -395,15 +352,15 @@ void FileDef::writeDocumentation(OutputList &ol)
enumMembers
.
writeDocumentation
(
ol
,
name
());
}
enumValMembers
.
countDocMembers
();
if
(
enumValMembers
.
totalCount
()
>
0
)
{
ol
.
writeRuler
();
ol
.
startGroupHeader
();
parseText
(
ol
,
theTranslator
->
trEnumerationValueDocumentation
());
ol
.
endGroupHeader
();
enumValMembers
.
writeDocumentation
(
ol
,
name
());
}
//
enumValMembers.countDocMembers();
//
if (enumValMembers.totalCount()>0 )
//
{
//
ol.writeRuler();
//
ol.startGroupHeader();
//
parseText(ol,theTranslator->trEnumerationValueDocumentation());
//
ol.endGroupHeader();
//
enumValMembers.writeDocumentation(ol,name());
//
}
funcMembers
.
countDocMembers
();
if
(
funcMembers
.
totalCount
()
>
0
)
...
...
src/groupdef.cpp
View file @
26b5069c
...
...
@@ -188,45 +188,9 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
ol
.
endMemberList
();
}
if
(
classList
->
count
()
>
0
)
{
ClassDef
*
cd
=
classList
->
first
();
bool
found
=
FALSE
;
while
(
cd
)
{
if
(
!
found
)
{
ol
.
startMemberHeader
();
parseText
(
ol
,
theTranslator
->
trCompounds
());
ol
.
endMemberHeader
();
ol
.
startMemberList
();
found
=
TRUE
;
}
QCString
type
;
switch
(
cd
->
compoundType
())
{
case
ClassDef
:
:
Class
:
type
=
"class"
;
break
;
case
ClassDef
:
:
Struct
:
type
=
"struct"
;
break
;
case
ClassDef
:
:
Union
:
type
=
"union"
;
break
;
case
ClassDef
:
:
Interface
:
type
=
"interface"
;
break
;
case
ClassDef
:
:
Exception
:
type
=
"exception"
;
break
;
}
ol
.
startMemberItem
(
0
);
ol
.
docify
(
type
);
ol
.
insertMemberAlign
();
ol
.
writeObjectLink
(
cd
->
getReference
(),
cd
->
getOutputFileBase
(),
0
,
cd
->
name
());
ol
.
endMemberItem
(
FALSE
);
if
(
!
cd
->
briefDescription
().
isEmpty
()
&&
Config
::
briefMemDescFlag
)
{
ol
.
startMemberDescription
();
parseDoc
(
ol
,
0
,
0
,
cd
->
briefDescription
());
ol
.
endMemberDescription
();
ol
.
newParagraph
();
}
cd
=
classList
->
next
();
}
if
(
found
)
ol
.
endMemberList
();
}
classList
->
writeDeclaration
(
ol
);
if
(
allMemberList
->
count
()
>
0
)
{
/* write user defined member groups */
...
...
@@ -306,15 +270,15 @@ void GroupDef::writeDocumentation(OutputList &ol)
enumMembers
.
writeDocumentation
(
ol
,
name
());
}
enumValMembers
.
countDocMembers
();
if
(
enumValMembers
.
totalCount
()
>
0
)
{
ol
.
writeRuler
();
ol
.
startGroupHeader
();
parseText
(
ol
,
theTranslator
->
trEnumerationValueDocumentation
());
ol
.
endGroupHeader
();
enumValMembers
.
writeDocumentation
(
ol
,
name
());
}
//
enumValMembers.countDocMembers();
//
if (enumValMembers.totalCount()>0 )
//
{
//
ol.writeRuler();
//
ol.startGroupHeader();
//
parseText(ol,theTranslator->trEnumerationValueDocumentation());
//
ol.endGroupHeader();
//
enumValMembers.writeDocumentation(ol,name());
//
}
funcMembers
.
countDocMembers
();
if
(
funcMembers
.
totalCount
()
>
0
)
...
...
src/htmlgen.cpp
View file @
26b5069c
...
...
@@ -207,6 +207,9 @@ void HtmlGenerator::writeStyleInfo(int part)
t
<<
"TD.md { background-color: #f2f2ff }"
<<
endl
;
t
<<
"DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold }"
<<
endl
;
t
<<
"DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller }"
<<
endl
;
t
<<
"FONT.keyword { color: #008000 }"
<<
endl
;
t
<<
"FONT.comment { color: #800000 }"
<<
endl
;
t
<<
"FONT.preprocessor { color: #806020 }"
<<
endl
;
//t << "TD.groupLine { background-color: #3080ff }" << endl;
t
<<
endl
;
endPlainFile
();
...
...
src/htmlgen.h
View file @
26b5069c
...
...
@@ -227,6 +227,9 @@ class HtmlGenerator : public OutputGenerator
void
startParameter
(
bool
first
);
void
endParameter
(
bool
last
);
void
startFontClass
(
const
char
*
s
)
{
t
<<
"<font class=
\"
"
<<
s
<<
"
\"
>"
;
}
void
endFontClass
()
{
t
<<
"</font>"
;
}
private
:
QCString
header
;
QCString
footer
;
...
...
src/index.cpp
View file @
26b5069c
...
...
@@ -828,15 +828,16 @@ void writeAlphabeticalClassList(OutputList &ol)
void
writeAlphabeticalIndex
(
OutputList
&
ol
)
{
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
if
(
annotatedClasses
==
0
)
return
;
ol
.
pushGeneratorState
();
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
startFile
(
ol
,
"classes.html"
,
"Alphabetical index"
);
startTitle
(
ol
,
0
);
parseText
(
ol
,
Config
::
projectName
+
" "
+
theTranslator
->
trCompoundIndex
());
endTitle
(
ol
,
0
,
0
);
writeAlphabeticalClassList
(
ol
);
endFile
(
ol
);
ol
.
enableAll
();
ol
.
popGeneratorState
();
}
//----------------------------------------------------------------------------
...
...
src/language.cpp
View file @
26b5069c
...
...
@@ -27,6 +27,7 @@
#include "translator_es.h"
#include "translator_fi.h"
#include "translator_ru.h"
#include "translator_hr.h"
#endif
#define L_EQUAL(a) !stricmp(langName,a)
...
...
@@ -80,6 +81,10 @@ bool setTranslator(const char *langName)
{
theTranslator
=
new
TranslatorRussian
;
}
else
if
(
L_EQUAL
(
"croatian"
))
{
theTranslator
=
new
TranslatorCroatian
;
}
#endif
else
// use the default language (i.e. english)
{
...
...
src/latexgen.cpp
View file @
26b5069c
...
...
@@ -195,7 +195,11 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
if
(
theTranslator
->
latexBabelPackage
()
==
"russian"
)
{
t
<<
"
\\
usepackage{inputenc}
\n
"
;
#if defined(_WIN32)
t
<<
"
\\
usepackage[cp1251]{inputenc}
\n
"
;
#else
t
<<
"
\\
usepackage[koi8-r]{inputenc}
\n
"
;
#endif
}
t
<<
"
\\
usepackage["
<<
theTranslator
->
latexBabelPackage
()
<<
"]{babel}
\n
"
;
}
...
...
src/latexgen.h
View file @
26b5069c
...
...
@@ -221,6 +221,9 @@ class LatexGenerator : public OutputGenerator
void
endTextBlock
()
{}
void
startParameter
(
bool
)
{}
void
endParameter
(
bool
)
{}
void
startFontClass
(
const
char
*
)
{}
void
endFontClass
()
{}
private
:
LatexGenerator
(
const
LatexGenerator
&
);
...
...
src/mangen.h
View file @
26b5069c
...
...
@@ -209,6 +209,9 @@ class ManGenerator : public OutputGenerator
void
startParameter
(
bool
)
{}
void
endParameter
(
bool
)
{}
void
startFontClass
(
const
char
*
)
{}
void
endFontClass
()
{}
private
:
bool
firstCol
;
bool
paragraph
;
...
...
src/memberdef.cpp
View file @
26b5069c
...
...
@@ -259,6 +259,7 @@ MemberDef::MemberDef(const char *t,const char *na,const char *a,const char *e,
annMemb
=
0
;
annUsed
=
FALSE
;
annShown
=
FALSE
;
annEnumType
=
0
;
indDepth
=
0
;
section
=
0
;
docEnumValues
=
FALSE
;
...
...
@@ -463,7 +464,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
// name().data(),cd->name().data(),annScope,annMemb);
//}
// hide members in an
n
onymous scopes
// hide members in anonymous scopes
// (they are displayed by there parent placeholder)
if
(
annScope
)
return
;
// hide undocumented members unless overwritten by the configuration
...
...
@@ -535,16 +536,16 @@ void MemberDef::writeDeclaration(OutputList &ol,
bool
hasHtmlHelp
=
Config
::
generateHtml
&&
Config
::
htmlHelpFlag
;
if
(
hasHtmlHelp
)
htmlHelp
=
HtmlHelp
::
getInstance
();
// search for the last an
n
onymous scope in the member type
// search for the last anonymous scope in the member type
ClassDef
*
annoClassDef
=
0
;
//while (i!=-1 && cname.find(type.mid(i,l))!=-1)
//{
// i=r.match(type,i+l,&l);
//}
int
il
=
i
-
1
,
ir
=
i
+
l
;
if
(
i
!=-
1
)
// found an
n
onymous scope in type
if
(
i
!=-
1
)
// found anonymous scope in type
{
// extract an
n
onymous scope
// extract anonymous scope
while
(
il
>=
0
&&
(
isId
(
type
.
at
(
il
))
||
type
.
at
(
il
)
==
':'
||
type
.
at
(
il
)
==
'@'
))
il
--
;
if
(
il
>
0
)
il
++
;
while
(
ir
<
(
int
)
type
.
length
()
&&
(
isId
(
type
.
at
(
ir
))
||
type
.
at
(
ir
)
==
':'
||
type
.
at
(
ir
)
==
'@'
))
ir
++
;
...
...
@@ -569,7 +570,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
}
// start a new member declaration
ol
.
startMemberItem
(
/* gId!=-1,*/
(
annoClassDef
||
annMemb
)
?
1
:
0
);
ol
.
startMemberItem
(
(
annoClassDef
||
annMemb
||
annEnumType
)
?
1
:
0
);
// If there is no detailed description we need to write the anchor here.
bool
detailsVisible
=
detailsAreVisible
();
...
...
@@ -605,12 +606,12 @@ void MemberDef::writeDeclaration(OutputList &ol,
writeTemplatePrefix
(
ol
,
tArgList
,
FALSE
);
}
if
(
i
!=-
1
)
//
render member with annonymous componound as result type.
if
(
i
!=-
1
)
//
member has an anonymous type
{
//printf("annoClassDef=%p annMemb=%p scopeName=`%s' an
n
onymous=`%s'\n",
//printf("annoClassDef=%p annMemb=%p scopeName=`%s' anonymous=`%s'\n",
// annoClassDef,annMemb,cname.data(),type.mid(i,l).data());
if
(
annoClassDef
)
if
(
annoClassDef
)
// type is an anonymous compound
{
//printf("class found!\n");
annoClassDef
->
writeDeclaration
(
ol
,
annMemb
,
inGroup
);
...
...
@@ -633,8 +634,17 @@ void MemberDef::writeDeclaration(OutputList &ol,
}
else
{
type
=
type
.
left
(
i
)
+
" { ... } "
+
type
.
right
(
type
.
length
()
-
i
-
l
);
linkifyText
(
ol
,
cname
,
name
(),
type
,
TRUE
);
if
(
getAnonymousEnumType
())
// type is an anonymous enum
{
linkifyText
(
ol
,
cname
,
name
(),
type
.
left
(
i
),
TRUE
);
ol
+=*
getAnonymousEnumType
()
->
enumDecl
();
linkifyText
(
ol
,
cname
,
name
(),
type
.
right
(
type
.
length
()
-
i
-
l
),
TRUE
);
}
else
{
type
=
type
.
left
(
i
)
+
" { ... } "
+
type
.
right
(
type
.
length
()
-
i
-
l
);
linkifyText
(
ol
,
cname
,
name
(),
type
,
TRUE
);
}
}
}
else
...
...
@@ -749,7 +759,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
ol
.
endDoxyAnchor
();
}
ol
.
endMemberItem
(
annoClassDef
!=
0
&&
indDepth
==
0
);
ol
.
endMemberItem
(
(
annoClassDef
!=
0
&&
indDepth
==
0
)
||
annEnumType
);
//ol.endMemberItem(gId!=-1,gFile,gHeader,annoClassDef || annMemb);
// write brief description
...
...
@@ -775,7 +785,9 @@ void MemberDef::writeDeclaration(OutputList &ol,
warnIfUndocumented
();
}
/*! Writes the "detailed documentation" section of this member to
* all active output formats.
*/
void
MemberDef
::
writeDocumentation
(
MemberList
*
ml
,
OutputList
&
ol
,
const
char
*
scopeName
)
{
...
...
@@ -783,37 +795,52 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
bool
hasDocs
=
detailsAreVisible
();
//printf("MemberDef::writeDocumentation(): type=`%s' def=`%s'\n",type.data(),definition());
if
(
(
/*memberType()==m &&*/
// filter member type
(
Config
::
extractAllFlag
||
hasDocs
)
/*&& groupId()==-1 */
// not in a group
)
||
/* member is part of an annonymous scope that is the type of
* another member in the list.
*/
Config
::
extractAllFlag
||
hasDocs
||
/* member is part of an anonymous scope that is the type of
* another member in the list.
*/
(
!
hasDocs
&&
!
briefDescription
().
isEmpty
()
&&
annUsed
)
)
{
// get definition. TODO: make a method of this
NamespaceDef
*
nd
=
getNamespace
();
ClassDef
*
cd
=
memberClass
();
FileDef
*
fd
=
getFileDef
();
Definition
*
d
=
0
;
if
(
cd
)
d
=
cd
;
else
if
(
nd
)
d
=
nd
;
else
d
=
fd
;
ASSERT
(
d
!=
0
);
QCString
cname
=
d
->
name
();
QCString
cfname
=
d
->
getOutputFileBase
();
// get member name
QCString
doxyName
=
name
().
copy
();
// prepend scope if there is any
// prepend scope if there is any
. TODO: make this optional for C only docs
if
(
scopeName
)
doxyName
.
prepend
((
QCString
)
scopeName
+
"::"
);
QCString
def
=
definition
();
if
(
isEnumerate
())
def
.
prepend
(
"enum "
);
MemberDef
*
smd
;
if
(
isEnumValue
()
&&
def
[
0
]
==
'@'
)
def
=
def
.
right
(
def
.
length
()
-
2
);
int
i
=
0
,
l
,
dummy
;
if
(
isEnumerate
())
{
if
(
name
().
at
(
0
)
==
'@'
)
{
def
=
"anonymous enum"
;
}
else
{
def
.
prepend
(
"enum "
);
}
}
int
i
=
0
,
l
;
static
QRegExp
r
(
"@[0-9]+"
);
if
(
isEnumerate
()
&&
r
.
match
(
def
,
0
,
&
l
)
!=-
1
)
return
;
if
(
isEnumValue
()
&&
(
smd
=
getEnumScope
())
&&
r
.
match
(
smd
->
name
(),
0
,
&
dummy
)
==-
1
)
return
;
//ENUM
if
(
isEnumValue
())
return
;
//if (isEnumValue() && def[0]=='@') def = def.right(def.length()-2);
//int dummy;
//if (isEnumerate() && r.match(def,0,&l)!=-1) return;
//MemberDef *smd;
//if (isEnumValue() && (smd = getEnumScope())
// && r.match(smd->name(),0,&dummy)==-1) return;
ol
.
pushGeneratorState
();
...
...
@@ -823,7 +850,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if
((
isVariable
()
||
isTypedef
())
&&
(
i
=
r
.
match
(
def
,
0
,
&
l
))
!=-
1
)
{
// find enum type an insert it in the definition
// find enum type an
d
insert it in the definition
MemberListIterator
vmli
(
*
ml
);
MemberDef
*
vmd
;
bool
found
=
FALSE
;
...
...
@@ -840,7 +867,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
linkifyText
(
ol
,
scopeName
,
name
(),
def
.
left
(
i
));
ol
+=*
vmd
->
enumDecl
();
linkifyText
(
ol
,
scopeName
,
name
(),
def
.
right
(
def
.
length
()
-
i
-
l
));
//ol.endDoxyAnchor();
found
=
TRUE
;
}
...
...
@@ -854,7 +880,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{
htmlHelp
->
addIndexItem
(
cname
,
name
(),
cfname
,
anchor
());
}
// strip an
n
onymous compound names from definition
// strip anonymous compound names from definition
int
si
=
def
.
find
(
' '
),
pi
,
ei
=
i
+
l
;
if
(
si
==-
1
)
si
=
0
;
while
((
pi
=
r
.
match
(
def
,
i
+
l
,
&
l
))
!=-
1
)
ei
=
i
=
pi
+
l
;
...
...
@@ -1329,6 +1355,7 @@ bool MemberDef::detailsAreVisible() const
void
MemberDef
::
setEnumDecl
(
OutputList
&
ed
)
{
enumDeclList
=
new
OutputList
(
&
ed
);
*
enumDeclList
+=
ed
;
}
bool
MemberDef
::
hasDocumentation
()
...
...
src/memberdef.h
View file @
26b5069c
...
...
@@ -124,15 +124,17 @@ class MemberDef : public Definition
// enumeration specific members
void
insertEnumField
(
MemberDef
*
md
);
void
setEnumScope
(
MemberDef
*
md
)
{
enumScope
=
md
;
}
MemberDef
*
getEnumScope
()
const
{
return
enumScope
;
}
void
setEnumScope
(
MemberDef
*
md
)
{
enumScope
=
md
;
}
MemberDef
*
getEnumScope
()
const
{
return
enumScope
;
}
void
setEnumDecl
(
OutputList
&
ed
);
void
setEnumUsed
()
{
eUsed
=
TRUE
;
}
bool
enumUsed
()
const
{
return
eUsed
;
}
OutputList
*
enumDecl
()
const
{
return
enumDeclList
;
}
MemberList
*
enumFieldList
()
{
return
enumFields
;
}
void
setEnumUsed
()
{
eUsed
=
TRUE
;
}
bool
enumUsed
()
const
{
return
eUsed
;
}
OutputList
*
enumDecl
()
const
{
return
enumDeclList
;
}
MemberList
*
enumFieldList
()
{
return
enumFields
;
}
void
setDocumentedEnumValues
(
bool
value
)
{
docEnumValues
=
value
;
}
bool
hasDocumentedEnumValues
()
const
{
return
docEnumValues
;
}
bool
hasDocumentedEnumValues
()
const
{
return
docEnumValues
;
}
void
setAnonymousEnumType
(
MemberDef
*
md
)
{
annEnumType
=
md
;
}
MemberDef
*
getAnonymousEnumType
()
{
return
annEnumType
;
}
// example related members
bool
addExample
(
const
char
*
anchor
,
const
char
*
name
,
const
char
*
file
);
...
...
@@ -199,6 +201,7 @@ class MemberDef : public Definition
FileDef
*
fileDec
;
// member of file declaration
MemberDef
*
redefines
;
// the member that is redefined by this one
MemberDef
*
enumScope
;
// the enclosing scope, if this is an enum field
MemberDef
*
annEnumType
;
// the annonymous enum that is the type of this member
MemberList
*
redefinedBy
;
// the list of members that redefine this one
MemberDef
*
memDef
;
// member definition for this declaration
MemberDef
*
memDec
;
// member declaration for this definition
...
...
src/memberlist.cpp
View file @
26b5069c
...
...
@@ -304,19 +304,25 @@ void MemberList::writePlainDeclarations(OutputList &ol,
ol
.
startMemberList
();
}
MemberListIterator
mli
(
*
this
);
for
(
;
(
md
=
mli
.
current
())
;
++
mli
)
for
(
;
(
md
=
mli
.
current
())
;
++
mli
)
// iterate through the members
{
// see if member is hidden by protection
if
(
md
->
protection
()
==
Private
&&
!
Config
::
extractPrivateFlag
)
continue
;
/*bool hasDocs=md->hasDocumentation();*/
QCString
type
=
md
->
typeString
();
type
=
type
.
stripWhiteSpace
();
type
=
type
.
stripWhiteSpace
();
// TODO: is this really needed?
// filter out enums that are in a group iff inGroup holds
if
(
md
->
isEnumerate
()
&&
inGroup
==
(
md
->
getMemberGroup
()
!=
0
)
/*&& (hasDocs || !Config::hideMemberFlag)*/
)
{
if
(
!
Config
::
hideMemberFlag
||
// do not hide undocumented members or
!
md
->
documentation
().
isEmpty
()
||
// member has detailed descr. or
md
->
hasDocumentedEnumValues
()
||
// member has documented enum vales.
Config
::
briefMemDescFlag
||
// brief descr. is shown or
Config
::
repeatBriefFlag
// brief descr. is repeated.
// filter out invisible enums
if
(
!
Config
::
hideMemberFlag
||
// do not hide undocumented members or
!
md
->
documentation
().
isEmpty
()
||
// member has detailed descr. or
md
->
hasDocumentedEnumValues
()
||
// member has documented enum vales.
(
!
md
->
briefDescription
().
isEmpty
()
&&
Config
::
briefMemDescFlag
// brief descr. is shown or
)
)
{
OutputList
typeDecl
(
&
ol
);
...
...
@@ -325,15 +331,6 @@ void MemberList::writePlainDeclarations(OutputList &ol,
if
(
i
!=-
1
)
name
=
name
.
right
(
name
.
length
()
-
i
-
2
);
// strip scope
if
(
name
[
0
]
!=
'@'
)
// not an anonymous enum
{
//if (Config::extractAllFlag ||
// (md->briefDescription().isEmpty() || !Config::briefMemDescFlag) &&
// (!md->documentation().isEmpty() || md->hasDocumentedEnumValues() ||
// (!md->briefDescription().isEmpty() &&
// !Config::briefMemDescFlag &&
// Config::repeatBriefFlag
// )
// )
// )
if
(
md
->
isLinkableInProject
()
||
md
->
hasDocumentedEnumValues
())
{
if
(
!
Config
::
genTagFile
.
isEmpty
())
...
...
@@ -400,23 +397,29 @@ void MemberList::writePlainDeclarations(OutputList &ol,
for
(
;
(
vmd
=
vmli
.
current
())
;
++
vmli
)
{
QCString
vtype
=
vmd
->
typeString
();
if
((
vtype
.
find
(
name
))
!=-
1
)
enumVars
++
;
if
((
vtype
.
find
(
name
))
!=-
1
)
{
enumVars
++
;
vmd
->
setAnonymousEnumType
(
md
);
}
}
}
if
(
enumVars
==
0
)
// no variable of this enum type
// if this is an annoymous enum and there are variable of this
// enum type (i.e. enumVars>0), then we do not show the enum here.
if
(
enumVars
==
0
)
// show enum here
{
ol
.
startMemberItem
(
0
);
ol
.
writeString
(
"enum "
);
ol
.
insertMemberAlign
();
ol
+=
typeDecl
;
ol
+=
typeDecl
;
// append the enum values.
ol
.
endMemberItem
(
FALSE
);
//QCString brief=md->briefDescription();
//brief=brief.stripWhiteSpace();
if
(
!
md
->
briefDescription
().
isEmpty
()
&&
Config
::
briefMemDescFlag
)
{
ol
.
startMemberDescription
();
parseDoc
(
ol
,
cd
?
cd
->
name
().
data
()
:
0
,
md
->
name
().
data
(),
md
->
briefDescription
());
parseDoc
(
ol
,
cd
?
cd
->
name
().
data
()
:
0
,
md
->
name
().
data
(),
md
->
briefDescription
()
);
if
(
!
md
->
documentation
().
isEmpty
()
||
md
->
hasDocumentedEnumValues
())
{
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
...
...
@@ -429,9 +432,6 @@ void MemberList::writePlainDeclarations(OutputList &ol,
ol
.
enableAll
();
}
ol
.
endMemberDescription
();
//ol.disable(OutputGenerator::Man);
//ol.newParagraph();
//ol.enable(OutputGenerator::Man);
}
}
md
->
warnIfUndocumented
();
...
...
src/namespacedef.cpp
View file @
26b5069c
...
...
@@ -148,59 +148,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
ol
.
endTextBlock
();
ol
.
startMemberSections
();
if
(
classList
->
count
()
>
0
)
{
ClassDef
*
cd
=
classList
->
first
();
bool
found
=
FALSE
;
while
(
cd
)
{
if
(
cd
->
name
().
find
(
'@'
)
==-
1
)
{
if
(
!
found
)
{
ol
.
startMemberHeader
();
parseText
(
ol
,
theTranslator
->
trCompounds
());
ol
.
endMemberHeader
();
ol
.
startMemberList
();
found
=
TRUE
;
}
QCString
clName
=
cd
->
name
().
copy
();
if
(
clName
.
left
(
name
().
length
()
+
2
)
==
name
()
+
"::"
)
{
clName
=
clName
.
right
(
clName
.
length
()
-
name
().
length
()
-
2
);
}
ol
.
startMemberItem
(
0
);
switch
(
cd
->
compoundType
())
{
case
ClassDef
:
:
Class
:
ol
.
writeString
(
"class"
);
break
;
case
ClassDef
:
:
Struct
:
ol
.
writeString
(
"struct"
);
break
;
case
ClassDef
:
:
Union
:
ol
.
writeString
(
"union"
);
break
;
case
ClassDef
:
:
Interface
:
ol
.
writeString
(
"interface"
);
break
;
case
ClassDef
:
:
Exception
:
ol
.
writeString
(
"exception"
);
break
;
}
ol
.
writeString
(
" "
);
ol
.
insertMemberAlign
();
if
(
cd
->
isLinkable
())
{
ol
.
writeObjectLink
(
cd
->
getReference
(),
cd
->
getOutputFileBase
(),
0
,
clName
);
}
else
{
ol
.
startBold
();
ol
.
docify
(
clName
);
ol
.
endBold
();
}
ol
.
endMemberItem
(
FALSE
);
}
cd
=
classList
->
next
();
}
if
(
found
)
ol
.
endMemberList
();
}
classList
->
writeDeclaration
(
ol
);
/* write user defined member groups */
MemberGroupListIterator
mgli
(
*
memberGroupList
);
...
...
@@ -213,7 +161,8 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
allMemberList
.
writeDeclarations
(
ol
,
0
,
this
,
0
,
0
,
0
,
0
);
ol
.
endMemberSections
();
if
(
!
briefDescription
().
isEmpty
()
||
!
documentation
().
isEmpty
())
if
((
!
briefDescription
().
isEmpty
()
&&
Config
::
repeatBriefFlag
)
||
!
documentation
().
isEmpty
())
{
ol
.
writeRuler
();
ol
.
pushGeneratorState
();
...
...
@@ -281,15 +230,15 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
enumMembers
.
writeDocumentation
(
ol
,
name
());
}
enumValMembers
.
countDocMembers
();
if
(
enumValMembers
.
totalCount
()
>
0
)
{
ol
.
writeRuler
();
ol
.
startGroupHeader
();
parseText
(
ol
,
theTranslator
->
trEnumerationValueDocumentation
());
ol
.
endGroupHeader
();
enumValMembers
.
writeDocumentation
(
ol
,
name
());
}
//
enumValMembers.countDocMembers();
//
if ( enumValMembers.totalCount()>0 )
//
{
//
ol.writeRuler();
//
ol.startGroupHeader();
//
parseText(ol,theTranslator->trEnumerationValueDocumentation());
//
ol.endGroupHeader();
//
enumValMembers.writeDocumentation(ol,name());
//
}
funcMembers
.
countDocMembers
();
if
(
funcMembers
.
totalCount
()
>
0
)
...
...
src/outputgen.h
View file @
26b5069c
...
...
@@ -213,6 +213,9 @@ class OutputGenerator
virtual
void
startParameter
(
bool
)
=
0
;
virtual
void
endParameter
(
bool
)
=
0
;
virtual
void
startFontClass
(
const
char
*
)
=
0
;
virtual
void
endFontClass
()
=
0
;
void
clear
()
{
b
.
close
();
a
.
resize
(
0
);
b
.
setBuffer
(
a
);
b
.
open
(
IO_WriteOnly
);
t
.
setDevice
(
&
b
);
}
...
...
src/outputlist.h
View file @
26b5069c
...
...
@@ -369,6 +369,11 @@ class OutputList
void
endParameter
(
bool
last
)
{
forall
(
&
OutputGenerator
::
endParameter
,
last
);
}
void
startFontClass
(
const
char
*
c
)
{
forall
(
&
OutputGenerator
::
startFontClass
,
c
);
}
void
endFontClass
()
{
forall
(
&
OutputGenerator
::
endFontClass
);
}
private
:
void
debug
();
void
clear
();
...
...
src/pre.l
View file @
26b5069c
...
...
@@ -125,7 +125,15 @@ static void decrLevel()
static bool otherCaseDone()
{
return g_levelGuard[g_level-1];
if (g_level==0)
{
err("Error: Found an #else without a preceding #if.\n");
return TRUE;
}
else
{
return g_levelGuard[g_level-1];
}
}
static void setCaseDone(bool value)
...
...
@@ -1079,7 +1087,7 @@ BN [ \t\r\n]
g_guardExpr.resize(0);
BEGIN(Guard);
}
<Command>
"elif"/[ \t(]
{
<Command>
("elif"|"else"{B}*"if")/[ \t(]
{
if (!otherCaseDone())
{
g_guardExpr.resize(0);
...
...
@@ -1107,7 +1115,7 @@ BN [ \t\r\n]
<Command>"undef"{B}+ {
BEGIN(Ung_defName);
}
<Command>
"elif"/[ \t(]
{
<Command>
("elif"|"else"{B}*"if")/[ \t(]
{
if (!otherCaseDone())
{
g_guardExpr.resize(0);
...
...
@@ -1208,7 +1216,7 @@ BN [ \t\r\n]
BEGIN(Start);
}
}
<SkipCommand>
"elif"
/[ \t(] {
<SkipCommand>
("elif"|"else"{B}*"if")
/[ \t(] {
if (g_ifcount==0)
{
if (!otherCaseDone())
...
...
@@ -1693,6 +1701,7 @@ void preprocessFile(const char *fileName,BufStr &output)
char *defStr = Config::predefined.first();
while (defStr)
{
//printf("Predefined: `%s'\n",defStr);
QCString ds = defStr;
int i_equals=ds.find('=');
int i_obrace=ds.find('(');
...
...
src/rtfgen.cpp
View file @
26b5069c
...
...
@@ -528,41 +528,44 @@ void RTFGenerator::endIndexSection(IndexSections is)
break
;
case
isMainPage
:
t
<<
"
\\
par "
<<
Rtf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trMainPage
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
index.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
case
isModuleIndex
:
t
<<
"
\\
par "
<<
Rtf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trModuleIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
modules.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
case
isNamespaceIndex
:
t
<<
"
\\
par "
<<
Rtf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trNamespaceIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
namespaces.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
case
isClassHierarchyIndex
:
t
<<
"
\\
par "
<<
Rtf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v
Hierarchical Index}"
<<
endl
;
;
t
<<
"{
\\
tc
\\
v
"
<<
theTranslator
->
trHierarchicalIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
hierarchy.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
case
isCompoundIndex
:
t
<<
"
\\
par "
<<
Rtf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v
Compound Index}"
<<
endl
;
;
t
<<
"{
\\
tc
\\
v
"
<<
theTranslator
->
trCompoundIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
annotated.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
case
isFileIndex
:
t
<<
"
\\
par "
<<
Rtf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v
File Index}"
<<
endl
;
;
t
<<
"{
\\
tc
\\
v
"
<<
theTranslator
->
trFileIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
files.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
case
isPageIndex
:
t
<<
"
\\
par "
<<
Rtf_Style_Reset
<<
endl
;
t
<<
"{
\\
tc
\\
v
Page Index}"
<<
endl
;
;
t
<<
"{
\\
tc
\\
v
"
<<
theTranslator
->
trPageIndex
()
<<
"}"
<<
endl
;
t
<<
"{
\\
field
\\
fldedit{
\\
*
\\
fldinst INCLUDETEXT
\"
pages.rtf
\"
\\\\
*MERGEFORMAT}{
\\
fldrslt includedstuff}}
\n
"
;
break
;
case
isModuleDocumentation
:
{
GroupDef
*
gd
=
groupList
.
first
();
bool
found
=
FALSE
;
t
<<
"{
\\
tc
\\
v
Module Documentation}"
<<
endl
;
;
t
<<
"{
\\
tc
\\
v
"
<<
theTranslator
->
trModuleDocumentation
()
<<
"}"
<<
endl
;
while
(
gd
&&
!
found
)
{
if
(
gd
->
isLinkableInProject
()
||
gd
->
countMembers
()
>
0
)
...
...
@@ -625,7 +628,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
ClassDef
*
cd
=
classList
.
first
();
bool
found
=
FALSE
;
t
<<
"{
\\
tc
\\
v
Class Documentation}"
<<
endl
;
;
t
<<
"{
\\
tc
\\
v
"
<<
theTranslator
->
trClassDocumentation
()
<<
"}"
<<
endl
;
while
(
cd
&&
!
found
)
{
if
(
cd
->
isLinkableInProject
())
...
...
@@ -657,7 +660,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
bool
isFirst
=
TRUE
;
FileName
*
fn
=
inputNameList
.
first
();
t
<<
"{
\\
tc
\\
v
File Documentation
}"
<<
endl
;
t
<<
"{
\\
tc
\\
v
"
<<
theTranslator
->
trFileDocumentation
()
<<
"
}"
<<
endl
;
while
(
fn
)
{
FileDef
*
fd
=
fn
->
first
();
...
...
@@ -692,6 +695,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
//t << "}\n";
PageInfo
*
pi
=
exampleList
.
first
();
t
<<
"{
\\
tc
\\
v "
<<
theTranslator
->
trExampleDocumentation
()
<<
"}"
<<
endl
;
if
(
pi
)
{
t
<<
"
\\
par "
<<
Rtf_Style_Reset
<<
endl
;
...
...
@@ -713,7 +717,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
break
;
case
isPageDocumentation
:
{
t
<<
"{
\\
tc
\\
v
Page Documentation}"
<<
endl
;
;
t
<<
"{
\\
tc
\\
v
"
<<
theTranslator
->
trPageDocumentation
()
<<
"}"
<<
endl
;
PageInfo
*
pi
=
pageList
.
first
();
if
(
pi
)
{
...
...
@@ -1346,7 +1350,7 @@ void RTFGenerator::startDescList()
{
t
<<
"{
\\
comment (startDescList)}"
<<
endl
;
t
<<
"{"
;
/*if (!m_omitParagraph)*/
newParagraph
();
/
//
*if (!m_omitParagraph)*/ newParagraph();
}
void
RTFGenerator
::
endDescTitle
()
...
...
@@ -1378,6 +1382,7 @@ void RTFGenerator::endDescList()
void
RTFGenerator
::
writeSection
(
const
char
*
lab
,
const
char
*
title
,
bool
sub
)
{
t
<<
"{
\\
comment (writeSection)}"
<<
endl
;
t
<<
"{"
;
t
<<
Rtf_Style_Reset
;
if
(
sub
)
{
...
...
@@ -1404,12 +1409,19 @@ void RTFGenerator::writeSection(const char *lab,const char *title,bool sub)
newParagraph
();
// make bookmark
writeAnchor
(
lab
);
t
<<
"}"
;
}
void
RTFGenerator
::
writeSectionRef
(
const
char
*
,
const
char
*
lab
,
const
char
*
)
const
char
*
title
)
{
startBold
();
docify
(
title
);
endBold
();
t
<<
" ("
;
docify
(
theTranslator
->
trPageAbbreviation
());
WriteRTFReference
(
lab
);
t
<<
")"
<<
endl
;
}
void
RTFGenerator
::
writeSectionRefItem
(
const
char
*
,
const
char
*
lab
,
...
...
@@ -1421,13 +1433,10 @@ void RTFGenerator::writeSectionRefItem(const char *,const char *lab,
t
<<
endl
;
}
void
RTFGenerator
::
writeSectionRefAnchor
(
const
char
*
,
const
char
*
lab
,
void
RTFGenerator
::
writeSectionRefAnchor
(
const
char
*
name
,
const
char
*
lab
,
const
char
*
title
)
{
startBold
();
docify
(
title
);
endBold
();
t
<<
" (p.~
\\
pageref{"
<<
lab
<<
"})"
<<
endl
;
writeSectionRef
(
name
,
lab
,
title
);
}
void
RTFGenerator
::
docify
(
const
char
*
str
)
...
...
src/rtfgen.h
View file @
26b5069c
...
...
@@ -211,6 +211,9 @@ class RTFGenerator : public OutputGenerator
void
startParameter
(
bool
)
{}
void
endParameter
(
bool
)
{}
void
startFontClass
(
const
char
*
)
{}
void
endFontClass
()
{}
static
bool
preProcessFileInplace
(
const
char
*
path
,
const
char
*
name
);
private
:
...
...
src/scanner.l
View file @
26b5069c
...
...
@@ -3773,16 +3773,17 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<BasesProt>"private" { baseProt = Private; }
<BasesProt>{BN} { lineCount(); }
<BasesProt>. { unput(*yytext); BEGIN(Bases); }
<Bases>("::")
*
{BN}*({ID}{BN}*"::"{BN}*)*{ID} {
<Bases>("::")
?
{BN}*({ID}{BN}*"::"{BN}*)*{ID} {
//current->extends->append(
// new BaseInfo(yytext,baseProt,baseVirt)
//) ;
if (*yytext != ':')
bool globalScope = *yytext==':' && baseName.isEmpty();
if (!globalScope)
baseName += yytext;
else
baseName += (yytext+2);
current->args += ' ';
if (
*yytext != ':'
)
if (
!globalScope
)
current->args += yytext;
else
current->args += (yytext+2);
...
...
@@ -4492,7 +4493,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
);
}
<DocBaseClass>\n { yyLineNr++; BEGIN( ClassDoc ); }
<ClassDocBrief>{BS}
{BL}
{
<ClassDocBrief>{BS}
({BL}|"\\n\\n")
{
current->brief=current->brief.stripWhiteSpace();
if (!current->doc.isEmpty()) current->doc+="<p>";
yyLineNr++;
...
...
@@ -4659,13 +4660,26 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
unput(afterDocTerminator);
BEGIN(lastAfterDocContext);
}
<ClassDocRelates,ClassDocFunc,ClassDocDefine,GroupDocArg1,ClassDocArg1,SectionTitle,EnumDocArg1,
FileDocArg1,
PageDocArg1,ExampleDocArg1,ClassDefineArgs,GroupName>"*/" {
<ClassDocRelates,ClassDocFunc,ClassDocDefine,GroupDocArg1,ClassDocArg1,SectionTitle,EnumDocArg1,PageDocArg1,ExampleDocArg1,ClassDefineArgs,GroupName>"*/" {
current->doc += "\n\n";
err("Warning: unexpected end of "
"documentation block found in "
"file %s at line %d\n",yyFileName,yyLineNr);
BEGIN( lastDocContext );
}
<FileDocArg1>"*/" {
current->name = yyFileName;
current->doc += "\n\n";
current_root->addSubEntry(current);
current = new Entry ;
current->protection = protection ;
current->sig = sig;
current->virt = virt;
current->stat = gstat;
current->slot = slot;
current->mGrpId = memberGroupId;
BEGIN( FindMembers );
}
<Doc>"*/" {
checkDocs();
current->doc += "\n\n";
...
...
src/translator_de.h
View file @
26b5069c
...
...
@@ -48,7 +48,7 @@ class TranslatorGerman : public Translator
QCString
latexBabelPackage
()
// returns the name of the package that is included by LaTeX
{
return
"
deutsch
"
;
}
{
return
"
german
"
;
}
QCString
trRelatedFunctions
()
// used in the compound documentation before a list of related functions.
...
...
src/util.cpp
View file @
26b5069c
...
...
@@ -248,7 +248,7 @@ QCString removeRedundantWhiteSpace(const QCString &s)
(
i
!=
0
&&
i
!=
s
.
length
()
-
1
&&
isId
(
s
.
at
(
i
-
1
))
&&
isId
(
s
.
at
(
i
+
1
)))
)
{
if
((
c
==
'*'
||
c
==
'&'
)
&&
if
((
c
==
'*'
||
c
==
'&'
||
c
==
'@'
)
&&
!
result
.
isEmpty
()
&&
isId
(
result
.
at
(
result
.
length
()
-
1
))
)
result
+=
' '
;
result
+=
c
;
...
...
@@ -535,7 +535,7 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext)
//bool texEnabled = ol.isEnabled(OutputGenerator::Latex);
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
QCString
extLink
,
absPath
;
if
(
ext
)
{
extLink
=
"_doc
:
"
;
absPath
=
"/"
;
}
if
(
ext
)
{
extLink
=
"_doc"
;
absPath
=
"/"
;
}
//if (manEnabled) ol.disable(OutputGenerator::Man);
//if (texEnabled) ol.disable(OutputGenerator::Latex);
if
(
compact
)
ol
.
startCenter
();
else
ol
.
startItemList
();
...
...
@@ -2217,3 +2217,27 @@ void extractNamespaceName(const QCString &scopeName,
return
;
}
QCString
insertTemplateSpecifierInScope
(
const
QCString
&
scope
,
const
QCString
&
templ
)
{
QCString
result
=
scope
.
copy
();
if
(
!
templ
.
isEmpty
()
&&
scope
.
find
(
'<'
)
==-
1
)
{
int
si
,
pi
=
0
;
while
((
si
=
scope
.
find
(
"::"
,
pi
))
!=-
1
&&
!
getClass
(
scope
.
left
(
si
)
+
templ
)
&&
!
getClass
(
scope
.
left
(
si
)))
{
//printf("Tried `%s'\n",(scope.left(si)+templ).data());
pi
=
si
+
2
;
}
if
(
si
==-
1
)
// not nested => append template specifier
{
result
+=
templ
;
}
else
// nested => insert template specifier before after first class name
{
result
=
scope
.
left
(
si
)
+
templ
+
scope
.
right
(
scope
.
length
()
-
si
);
}
}
//printf("insertTemplateSpecifierInScope(`%s',`%s')=%s\n",
// scope.data(),templ.data(),result.data());
return
result
;
}
src/util.h
View file @
26b5069c
...
...
@@ -93,5 +93,6 @@ int minClassDistance(ClassDef *cd,ClassDef *bcd,int level=0);
QCString
convertNameToFile
(
const
char
*
name
);
void
extractNamespaceName
(
const
QCString
&
scopeName
,
QCString
&
className
,
QCString
&
namespaceName
);
QCString
insertTemplateSpecifierInScope
(
const
QCString
&
scope
,
const
QCString
&
templ
);
#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