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
3b8b750f
Commit
3b8b750f
authored
Apr 30, 2000
by
Dimitri van Heesch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.1.2-20000430
parent
a790b4ae
Changes
41
Expand all
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 @
3b8b750f
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 @
3b8b750f
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 @
3b8b750f
1.1.2-200004
23
1.1.2-200004
30
addon/configgen/config_templ.l
View file @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
This diff is collapsed.
Click to expand it.
src/config.l
View file @
3b8b750f
This diff is collapsed.
Click to expand it.
src/declinfo.l
View file @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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 @
3b8b750f
...
...
@@ -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